{"id":"c8f0d4c1671dd97c07139bed10675cac","_format":"hh-sol-build-info-1","solcVersion":"0.8.25","solcLongVersion":"0.8.25+commit.b61c2a91","input":{"language":"Solidity","sources":{"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./OwnableUpgradeable.sol\";\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership} and {acceptOwnership}.\n *\n * This module is used through inheritance. It will make available all functions\n * from parent (Ownable).\n */\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\n    address private _pendingOwner;\n\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\n\n    function __Ownable2Step_init() internal onlyInitializing {\n        __Ownable_init_unchained();\n    }\n\n    function __Ownable2Step_init_unchained() internal onlyInitializing {\n    }\n    /**\n     * @dev Returns the address of the pending owner.\n     */\n    function pendingOwner() public view virtual returns (address) {\n        return _pendingOwner;\n    }\n\n    /**\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\n        _pendingOwner = newOwner;\n        emit OwnershipTransferStarted(owner(), newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual override {\n        delete _pendingOwner;\n        super._transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev The new owner accepts the ownership transfer.\n     */\n    function acceptOwnership() public virtual {\n        address sender = _msgSender();\n        require(pendingOwner() == sender, \"Ownable2Step: caller is not the new owner\");\n        _transferOwnership(sender);\n    }\n\n    /**\n     * @dev This empty reserved space is put in place to allow future versions to add new\n     * variables without shifting down storage in the inheritance chain.\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n     */\n    uint256[49] private __gap;\n}\n"},"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n    address private _owner;\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the deployer as the initial owner.\n     */\n    function __Ownable_init() internal onlyInitializing {\n        __Ownable_init_unchained();\n    }\n\n    function __Ownable_init_unchained() internal onlyInitializing {\n        _transferOwnership(_msgSender());\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        _checkOwner();\n        _;\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if the sender is not the owner.\n     */\n    function _checkOwner() internal view virtual {\n        require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby disabling any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        address oldOwner = _owner;\n        _owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n\n    /**\n     * @dev This empty reserved space is put in place to allow future versions to add new\n     * variables without shifting down storage in the inheritance chain.\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n     */\n    uint256[49] private __gap;\n}\n"},"@openzeppelin/contracts-upgradeable/interfaces/IERC4626Upgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC4626.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../token/ERC20/IERC20Upgradeable.sol\";\nimport \"../token/ERC20/extensions/IERC20MetadataUpgradeable.sol\";\n\n/**\n * @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\n *\n * _Available since v4.7._\n */\ninterface IERC4626Upgradeable is IERC20Upgradeable, IERC20MetadataUpgradeable {\n    event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);\n\n    event Withdraw(\n        address indexed sender,\n        address indexed receiver,\n        address indexed owner,\n        uint256 assets,\n        uint256 shares\n    );\n\n    /**\n     * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n     *\n     * - MUST be an ERC-20 token contract.\n     * - MUST NOT revert.\n     */\n    function asset() external view returns (address assetTokenAddress);\n\n    /**\n     * @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n     *\n     * - SHOULD include any compounding that occurs from yield.\n     * - MUST be inclusive of any fees that are charged against assets in the Vault.\n     * - MUST NOT revert.\n     */\n    function totalAssets() external view returns (uint256 totalManagedAssets);\n\n    /**\n     * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n     * scenario where all the conditions are met.\n     *\n     * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n     * - MUST NOT show any variations depending on the caller.\n     * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n     * - MUST NOT revert.\n     *\n     * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n     * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n     * from.\n     */\n    function convertToShares(uint256 assets) external view returns (uint256 shares);\n\n    /**\n     * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n     * scenario where all the conditions are met.\n     *\n     * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n     * - MUST NOT show any variations depending on the caller.\n     * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n     * - MUST NOT revert.\n     *\n     * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n     * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n     * from.\n     */\n    function convertToAssets(uint256 shares) external view returns (uint256 assets);\n\n    /**\n     * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n     * through a deposit call.\n     *\n     * - MUST return a limited value if receiver is subject to some deposit limit.\n     * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n     * - MUST NOT revert.\n     */\n    function maxDeposit(address receiver) external view returns (uint256 maxAssets);\n\n    /**\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n     * current on-chain conditions.\n     *\n     * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n     *   call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n     *   in the same transaction.\n     * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n     *   deposit would be accepted, regardless if the user has enough tokens approved, etc.\n     * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n     * - MUST NOT revert.\n     *\n     * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n     * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n     */\n    function previewDeposit(uint256 assets) external view returns (uint256 shares);\n\n    /**\n     * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n     *\n     * - MUST emit the Deposit event.\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n     *   deposit execution, and are accounted for during deposit.\n     * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n     *   approving enough underlying tokens to the Vault contract, etc).\n     *\n     * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n     */\n    function deposit(uint256 assets, address receiver) external returns (uint256 shares);\n\n    /**\n     * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n     * - MUST return a limited value if receiver is subject to some mint limit.\n     * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n     * - MUST NOT revert.\n     */\n    function maxMint(address receiver) external view returns (uint256 maxShares);\n\n    /**\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n     * current on-chain conditions.\n     *\n     * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n     *   in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n     *   same transaction.\n     * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n     *   would be accepted, regardless if the user has enough tokens approved, etc.\n     * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n     * - MUST NOT revert.\n     *\n     * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n     * share price or some other type of condition, meaning the depositor will lose assets by minting.\n     */\n    function previewMint(uint256 shares) external view returns (uint256 assets);\n\n    /**\n     * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n     *\n     * - MUST emit the Deposit event.\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n     *   execution, and are accounted for during mint.\n     * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n     *   approving enough underlying tokens to the Vault contract, etc).\n     *\n     * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n     */\n    function mint(uint256 shares, address receiver) external returns (uint256 assets);\n\n    /**\n     * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n     * Vault, through a withdraw call.\n     *\n     * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n     * - MUST NOT revert.\n     */\n    function maxWithdraw(address owner) external view returns (uint256 maxAssets);\n\n    /**\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n     * given current on-chain conditions.\n     *\n     * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n     *   call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n     *   called\n     *   in the same transaction.\n     * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n     *   the withdrawal would be accepted, regardless if the user has enough shares, etc.\n     * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n     * - MUST NOT revert.\n     *\n     * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n     * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n     */\n    function previewWithdraw(uint256 assets) external view returns (uint256 shares);\n\n    /**\n     * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n     *\n     * - MUST emit the Withdraw event.\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n     *   withdraw execution, and are accounted for during withdraw.\n     * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n     *   not having enough shares, etc).\n     *\n     * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n     * Those methods should be performed separately.\n     */\n    function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);\n\n    /**\n     * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n     * through a redeem call.\n     *\n     * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n     * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n     * - MUST NOT revert.\n     */\n    function maxRedeem(address owner) external view returns (uint256 maxShares);\n\n    /**\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n     * given current on-chain conditions.\n     *\n     * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n     *   in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n     *   same transaction.\n     * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n     *   redemption would be accepted, regardless if the user has enough shares, etc.\n     * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n     * - MUST NOT revert.\n     *\n     * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n     * share price or some other type of condition, meaning the depositor will lose assets by redeeming.\n     */\n    function previewRedeem(uint256 shares) external view returns (uint256 assets);\n\n    /**\n     * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n     *\n     * - MUST emit the Withdraw event.\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n     *   redeem execution, and are accounted for during redeem.\n     * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n     *   not having enough shares, etc).\n     *\n     * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n     * Those methods should be performed separately.\n     */\n    function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);\n}\n"},"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```solidity\n * contract MyToken is ERC20Upgradeable {\n *     function initialize() initializer public {\n *         __ERC20_init(\"MyToken\", \"MTK\");\n *     }\n * }\n *\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n *     function initializeV2() reinitializer(2) public {\n *         __ERC20Permit_init(\"MyToken\");\n *     }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n *     _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n    /**\n     * @dev Indicates that the contract has been initialized.\n     * @custom:oz-retyped-from bool\n     */\n    uint8 private _initialized;\n\n    /**\n     * @dev Indicates that the contract is in the process of being initialized.\n     */\n    bool private _initializing;\n\n    /**\n     * @dev Triggered when the contract has been initialized or reinitialized.\n     */\n    event Initialized(uint8 version);\n\n    /**\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n     * `onlyInitializing` functions can be used to initialize parent contracts.\n     *\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\n     * constructor.\n     *\n     * Emits an {Initialized} event.\n     */\n    modifier initializer() {\n        bool isTopLevelCall = !_initializing;\n        require(\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\n            \"Initializable: contract is already initialized\"\n        );\n        _initialized = 1;\n        if (isTopLevelCall) {\n            _initializing = true;\n        }\n        _;\n        if (isTopLevelCall) {\n            _initializing = false;\n            emit Initialized(1);\n        }\n    }\n\n    /**\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n     * used to initialize parent contracts.\n     *\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\n     * are added through upgrades and that require initialization.\n     *\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\n     *\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n     * a contract, executing them in the right order is up to the developer or operator.\n     *\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\n     *\n     * Emits an {Initialized} event.\n     */\n    modifier reinitializer(uint8 version) {\n        require(!_initializing && _initialized < version, \"Initializable: contract is already initialized\");\n        _initialized = version;\n        _initializing = true;\n        _;\n        _initializing = false;\n        emit Initialized(version);\n    }\n\n    /**\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\n     */\n    modifier onlyInitializing() {\n        require(_initializing, \"Initializable: contract is not initializing\");\n        _;\n    }\n\n    /**\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n     * through proxies.\n     *\n     * Emits an {Initialized} event the first time it is successfully executed.\n     */\n    function _disableInitializers() internal virtual {\n        require(!_initializing, \"Initializable: contract is initializing\");\n        if (_initialized != type(uint8).max) {\n            _initialized = type(uint8).max;\n            emit Initialized(type(uint8).max);\n        }\n    }\n\n    /**\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\n     */\n    function _getInitializedVersion() internal view returns (uint8) {\n        return _initialized;\n    }\n\n    /**\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\n     */\n    function _isInitializing() internal view returns (bool) {\n        return _initializing;\n    }\n}\n"},"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)\n\npragma solidity ^0.8.0;\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuardUpgradeable is Initializable {\n    // Booleans are more expensive than uint256 or any type that takes up a full\n    // word because each write operation emits an extra SLOAD to first read the\n    // slot's contents, replace the bits taken up by the boolean, and then write\n    // back. This is the compiler's defense against contract upgrades and\n    // pointer aliasing, and it cannot be disabled.\n\n    // The values being non-zero value makes deployment a bit more expensive,\n    // but in exchange the refund on every call to nonReentrant will be lower in\n    // amount. Since refunds are capped to a percentage of the total\n    // transaction's gas, it is best to keep them low in cases like this one, to\n    // increase the likelihood of the full refund coming into effect.\n    uint256 private constant _NOT_ENTERED = 1;\n    uint256 private constant _ENTERED = 2;\n\n    uint256 private _status;\n\n    function __ReentrancyGuard_init() internal onlyInitializing {\n        __ReentrancyGuard_init_unchained();\n    }\n\n    function __ReentrancyGuard_init_unchained() internal onlyInitializing {\n        _status = _NOT_ENTERED;\n    }\n\n    /**\n     * @dev Prevents a contract from calling itself, directly or indirectly.\n     * Calling a `nonReentrant` function from another `nonReentrant`\n     * function is not supported. It is possible to prevent this from happening\n     * by making the `nonReentrant` function external, and making it call a\n     * `private` function that does the actual work.\n     */\n    modifier nonReentrant() {\n        _nonReentrantBefore();\n        _;\n        _nonReentrantAfter();\n    }\n\n    function _nonReentrantBefore() private {\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\n        require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n        // Any calls to nonReentrant after this point will fail\n        _status = _ENTERED;\n    }\n\n    function _nonReentrantAfter() private {\n        // By storing the original value once again, a refund is triggered (see\n        // https://eips.ethereum.org/EIPS/eip-2200)\n        _status = _NOT_ENTERED;\n    }\n\n    /**\n     * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n     * `nonReentrant` function in the call stack.\n     */\n    function _reentrancyGuardEntered() internal view returns (bool) {\n        return _status == _ENTERED;\n    }\n\n    /**\n     * @dev This empty reserved space is put in place to allow future versions to add new\n     * variables without shifting down storage in the inheritance chain.\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n     */\n    uint256[49] private __gap;\n}\n"},"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC20Upgradeable.sol\";\nimport \"./extensions/IERC20MetadataUpgradeable.sol\";\nimport \"../../utils/ContextUpgradeable.sol\";\nimport {Initializable} from \"../../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * The default value of {decimals} is 18. To change this, you should override\n * this function so it returns a different value.\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC20\n * applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\n    mapping(address => uint256) private _balances;\n\n    mapping(address => mapping(address => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n\n    /**\n     * @dev Sets the values for {name} and {symbol}.\n     *\n     * All two of these values are immutable: they can only be set once during\n     * construction.\n     */\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\n        __ERC20_init_unchained(name_, symbol_);\n    }\n\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\n        _name = name_;\n        _symbol = symbol_;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view virtual override returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view virtual override returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the default value returned by this function, unless\n     * it's overridden.\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view virtual override returns (uint8) {\n        return 18;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view virtual override returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view virtual override returns (uint256) {\n        return _balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - the caller must have a balance of at least `amount`.\n     */\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\n        address owner = _msgSender();\n        _transfer(owner, to, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-allowance}.\n     */\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\n        return _allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Emits an {Approval} event indicating the updated allowance. This is not\n     * required by the EIP. See the note at the beginning of {ERC20}.\n     *\n     * NOTE: Does not update the allowance if the current allowance\n     * is the maximum `uint256`.\n     *\n     * Requirements:\n     *\n     * - `from` and `to` cannot be the zero address.\n     * - `from` must have a balance of at least `amount`.\n     * - the caller must have allowance for ``from``'s tokens of at least\n     * `amount`.\n     */\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\n        address spender = _msgSender();\n        _spendAllowance(from, spender, amount);\n        _transfer(from, to, amount);\n        return true;\n    }\n\n    /**\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\n        return true;\n    }\n\n    /**\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     * - `spender` must have allowance for the caller of at least\n     * `subtractedValue`.\n     */\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n        address owner = _msgSender();\n        uint256 currentAllowance = allowance(owner, spender);\n        require(currentAllowance >= subtractedValue, \"ERC20: decreased allowance below zero\");\n        unchecked {\n            _approve(owner, spender, currentAllowance - subtractedValue);\n        }\n\n        return true;\n    }\n\n    /**\n     * @dev Moves `amount` of tokens from `from` to `to`.\n     *\n     * This internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `from` must have a balance of at least `amount`.\n     */\n    function _transfer(address from, address to, uint256 amount) internal virtual {\n        require(from != address(0), \"ERC20: transfer from the zero address\");\n        require(to != address(0), \"ERC20: transfer to the zero address\");\n\n        _beforeTokenTransfer(from, to, amount);\n\n        uint256 fromBalance = _balances[from];\n        require(fromBalance >= amount, \"ERC20: transfer amount exceeds balance\");\n        unchecked {\n            _balances[from] = fromBalance - amount;\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\n            // decrementing then incrementing.\n            _balances[to] += amount;\n        }\n\n        emit Transfer(from, to, amount);\n\n        _afterTokenTransfer(from, to, amount);\n    }\n\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n     * the total supply.\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `account` cannot be the zero address.\n     */\n    function _mint(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: mint to the zero address\");\n\n        _beforeTokenTransfer(address(0), account, amount);\n\n        _totalSupply += amount;\n        unchecked {\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\n            _balances[account] += amount;\n        }\n        emit Transfer(address(0), account, amount);\n\n        _afterTokenTransfer(address(0), account, amount);\n    }\n\n    /**\n     * @dev Destroys `amount` tokens from `account`, reducing the\n     * total supply.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `account` cannot be the zero address.\n     * - `account` must have at least `amount` tokens.\n     */\n    function _burn(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: burn from the zero address\");\n\n        _beforeTokenTransfer(account, address(0), amount);\n\n        uint256 accountBalance = _balances[account];\n        require(accountBalance >= amount, \"ERC20: burn amount exceeds balance\");\n        unchecked {\n            _balances[account] = accountBalance - amount;\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\n            _totalSupply -= amount;\n        }\n\n        emit Transfer(account, address(0), amount);\n\n        _afterTokenTransfer(account, address(0), amount);\n    }\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     */\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\n        require(owner != address(0), \"ERC20: approve from the zero address\");\n        require(spender != address(0), \"ERC20: approve to the zero address\");\n\n        _allowances[owner][spender] = amount;\n        emit Approval(owner, spender, amount);\n    }\n\n    /**\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\n     *\n     * Does not update the allowance amount in case of infinite allowance.\n     * Revert if not enough allowance is available.\n     *\n     * Might emit an {Approval} event.\n     */\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\n        uint256 currentAllowance = allowance(owner, spender);\n        if (currentAllowance != type(uint256).max) {\n            require(currentAllowance >= amount, \"ERC20: insufficient allowance\");\n            unchecked {\n                _approve(owner, spender, currentAllowance - amount);\n            }\n        }\n    }\n\n    /**\n     * @dev Hook that is called before any transfer of tokens. This includes\n     * minting and burning.\n     *\n     * Calling conditions:\n     *\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n     * will be transferred to `to`.\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n     * - `from` and `to` are never both zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\n\n    /**\n     * @dev Hook that is called after any transfer of tokens. This includes\n     * minting and burning.\n     *\n     * Calling conditions:\n     *\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n     * has been transferred to `to`.\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\n     * - `from` and `to` are never both zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\n\n    /**\n     * @dev This empty reserved space is put in place to allow future versions to add new\n     * variables without shifting down storage in the inheritance chain.\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n     */\n    uint256[45] private __gap;\n}\n"},"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/ERC4626.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC20Upgradeable.sol\";\nimport \"../utils/SafeERC20Upgradeable.sol\";\nimport \"../../../interfaces/IERC4626Upgradeable.sol\";\nimport \"../../../utils/math/MathUpgradeable.sol\";\nimport {Initializable} from \"../../../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Implementation of the ERC4626 \"Tokenized Vault Standard\" as defined in\n * https://eips.ethereum.org/EIPS/eip-4626[EIP-4626].\n *\n * This extension allows the minting and burning of \"shares\" (represented using the ERC20 inheritance) in exchange for\n * underlying \"assets\" through standardized {deposit}, {mint}, {redeem} and {burn} workflows. This contract extends\n * the ERC20 standard. Any additional extensions included along it would affect the \"shares\" token represented by this\n * contract and not the \"assets\" token which is an independent contract.\n *\n * [CAUTION]\n * ====\n * In empty (or nearly empty) ERC-4626 vaults, deposits are at high risk of being stolen through frontrunning\n * with a \"donation\" to the vault that inflates the price of a share. This is variously known as a donation or inflation\n * attack and is essentially a problem of slippage. Vault deployers can protect against this attack by making an initial\n * deposit of a non-trivial amount of the asset, such that price manipulation becomes infeasible. Withdrawals may\n * similarly be affected by slippage. Users can protect against this attack as well as unexpected slippage in general by\n * verifying the amount received is as expected, using a wrapper that performs these checks such as\n * https://github.com/fei-protocol/ERC4626#erc4626router-and-base[ERC4626Router].\n *\n * Since v4.9, this implementation uses virtual assets and shares to mitigate that risk. The `_decimalsOffset()`\n * corresponds to an offset in the decimal representation between the underlying asset's decimals and the vault\n * decimals. This offset also determines the rate of virtual shares to virtual assets in the vault, which itself\n * determines the initial exchange rate. While not fully preventing the attack, analysis shows that the default offset\n * (0) makes it non-profitable, as a result of the value being captured by the virtual shares (out of the attacker's\n * donation) matching the attacker's expected gains. With a larger offset, the attack becomes orders of magnitude more\n * expensive than it is profitable. More details about the underlying math can be found\n * xref:erc4626.adoc#inflation-attack[here].\n *\n * The drawback of this approach is that the virtual shares do capture (a very small) part of the value being accrued\n * to the vault. Also, if the vault experiences losses, the users try to exit the vault, the virtual shares and assets\n * will cause the first user to exit to experience reduced losses in detriment to the last users that will experience\n * bigger losses. Developers willing to revert back to the pre-v4.9 behavior just need to override the\n * `_convertToShares` and `_convertToAssets` functions.\n *\n * To learn more, check out our xref:ROOT:erc4626.adoc[ERC-4626 guide].\n * ====\n *\n * _Available since v4.7._\n */\nabstract contract ERC4626Upgradeable is Initializable, ERC20Upgradeable, IERC4626Upgradeable {\n    using MathUpgradeable for uint256;\n\n    IERC20Upgradeable private _asset;\n    uint8 private _underlyingDecimals;\n\n    /**\n     * @dev Set the underlying asset contract. This must be an ERC20-compatible contract (ERC20 or ERC777).\n     */\n    function __ERC4626_init(IERC20Upgradeable asset_) internal onlyInitializing {\n        __ERC4626_init_unchained(asset_);\n    }\n\n    function __ERC4626_init_unchained(IERC20Upgradeable asset_) internal onlyInitializing {\n        (bool success, uint8 assetDecimals) = _tryGetAssetDecimals(asset_);\n        _underlyingDecimals = success ? assetDecimals : 18;\n        _asset = asset_;\n    }\n\n    /**\n     * @dev Attempts to fetch the asset decimals. A return value of false indicates that the attempt failed in some way.\n     */\n    function _tryGetAssetDecimals(IERC20Upgradeable asset_) private view returns (bool, uint8) {\n        (bool success, bytes memory encodedDecimals) = address(asset_).staticcall(\n            abi.encodeWithSelector(IERC20MetadataUpgradeable.decimals.selector)\n        );\n        if (success && encodedDecimals.length >= 32) {\n            uint256 returnedDecimals = abi.decode(encodedDecimals, (uint256));\n            if (returnedDecimals <= type(uint8).max) {\n                return (true, uint8(returnedDecimals));\n            }\n        }\n        return (false, 0);\n    }\n\n    /**\n     * @dev Decimals are computed by adding the decimal offset on top of the underlying asset's decimals. This\n     * \"original\" value is cached during construction of the vault contract. If this read operation fails (e.g., the\n     * asset has not been created yet), a default of 18 is used to represent the underlying asset's decimals.\n     *\n     * See {IERC20Metadata-decimals}.\n     */\n    function decimals() public view virtual override(IERC20MetadataUpgradeable, ERC20Upgradeable) returns (uint8) {\n        return _underlyingDecimals + _decimalsOffset();\n    }\n\n    /** @dev See {IERC4626-asset}. */\n    function asset() public view virtual override returns (address) {\n        return address(_asset);\n    }\n\n    /** @dev See {IERC4626-totalAssets}. */\n    function totalAssets() public view virtual override returns (uint256) {\n        return _asset.balanceOf(address(this));\n    }\n\n    /** @dev See {IERC4626-convertToShares}. */\n    function convertToShares(uint256 assets) public view virtual override returns (uint256) {\n        return _convertToShares(assets, MathUpgradeable.Rounding.Down);\n    }\n\n    /** @dev See {IERC4626-convertToAssets}. */\n    function convertToAssets(uint256 shares) public view virtual override returns (uint256) {\n        return _convertToAssets(shares, MathUpgradeable.Rounding.Down);\n    }\n\n    /** @dev See {IERC4626-maxDeposit}. */\n    function maxDeposit(address) public view virtual override returns (uint256) {\n        return type(uint256).max;\n    }\n\n    /** @dev See {IERC4626-maxMint}. */\n    function maxMint(address) public view virtual override returns (uint256) {\n        return type(uint256).max;\n    }\n\n    /** @dev See {IERC4626-maxWithdraw}. */\n    function maxWithdraw(address owner) public view virtual override returns (uint256) {\n        return _convertToAssets(balanceOf(owner), MathUpgradeable.Rounding.Down);\n    }\n\n    /** @dev See {IERC4626-maxRedeem}. */\n    function maxRedeem(address owner) public view virtual override returns (uint256) {\n        return balanceOf(owner);\n    }\n\n    /** @dev See {IERC4626-previewDeposit}. */\n    function previewDeposit(uint256 assets) public view virtual override returns (uint256) {\n        return _convertToShares(assets, MathUpgradeable.Rounding.Down);\n    }\n\n    /** @dev See {IERC4626-previewMint}. */\n    function previewMint(uint256 shares) public view virtual override returns (uint256) {\n        return _convertToAssets(shares, MathUpgradeable.Rounding.Up);\n    }\n\n    /** @dev See {IERC4626-previewWithdraw}. */\n    function previewWithdraw(uint256 assets) public view virtual override returns (uint256) {\n        return _convertToShares(assets, MathUpgradeable.Rounding.Up);\n    }\n\n    /** @dev See {IERC4626-previewRedeem}. */\n    function previewRedeem(uint256 shares) public view virtual override returns (uint256) {\n        return _convertToAssets(shares, MathUpgradeable.Rounding.Down);\n    }\n\n    /** @dev See {IERC4626-deposit}. */\n    function deposit(uint256 assets, address receiver) public virtual override returns (uint256) {\n        require(assets <= maxDeposit(receiver), \"ERC4626: deposit more than max\");\n\n        uint256 shares = previewDeposit(assets);\n        _deposit(_msgSender(), receiver, assets, shares);\n\n        return shares;\n    }\n\n    /** @dev See {IERC4626-mint}.\n     *\n     * As opposed to {deposit}, minting is allowed even if the vault is in a state where the price of a share is zero.\n     * In this case, the shares will be minted without requiring any assets to be deposited.\n     */\n    function mint(uint256 shares, address receiver) public virtual override returns (uint256) {\n        require(shares <= maxMint(receiver), \"ERC4626: mint more than max\");\n\n        uint256 assets = previewMint(shares);\n        _deposit(_msgSender(), receiver, assets, shares);\n\n        return assets;\n    }\n\n    /** @dev See {IERC4626-withdraw}. */\n    function withdraw(uint256 assets, address receiver, address owner) public virtual override returns (uint256) {\n        require(assets <= maxWithdraw(owner), \"ERC4626: withdraw more than max\");\n\n        uint256 shares = previewWithdraw(assets);\n        _withdraw(_msgSender(), receiver, owner, assets, shares);\n\n        return shares;\n    }\n\n    /** @dev See {IERC4626-redeem}. */\n    function redeem(uint256 shares, address receiver, address owner) public virtual override returns (uint256) {\n        require(shares <= maxRedeem(owner), \"ERC4626: redeem more than max\");\n\n        uint256 assets = previewRedeem(shares);\n        _withdraw(_msgSender(), receiver, owner, assets, shares);\n\n        return assets;\n    }\n\n    /**\n     * @dev Internal conversion function (from assets to shares) with support for rounding direction.\n     */\n    function _convertToShares(uint256 assets, MathUpgradeable.Rounding rounding) internal view virtual returns (uint256) {\n        return assets.mulDiv(totalSupply() + 10 ** _decimalsOffset(), totalAssets() + 1, rounding);\n    }\n\n    /**\n     * @dev Internal conversion function (from shares to assets) with support for rounding direction.\n     */\n    function _convertToAssets(uint256 shares, MathUpgradeable.Rounding rounding) internal view virtual returns (uint256) {\n        return shares.mulDiv(totalAssets() + 1, totalSupply() + 10 ** _decimalsOffset(), rounding);\n    }\n\n    /**\n     * @dev Deposit/mint common workflow.\n     */\n    function _deposit(address caller, address receiver, uint256 assets, uint256 shares) internal virtual {\n        // If _asset is ERC777, `transferFrom` can trigger a reentrancy BEFORE the transfer happens through the\n        // `tokensToSend` hook. On the other hand, the `tokenReceived` hook, that is triggered after the transfer,\n        // calls the vault, which is assumed not malicious.\n        //\n        // Conclusion: we need to do the transfer before we mint so that any reentrancy would happen before the\n        // assets are transferred and before the shares are minted, which is a valid state.\n        // slither-disable-next-line reentrancy-no-eth\n        SafeERC20Upgradeable.safeTransferFrom(_asset, caller, address(this), assets);\n        _mint(receiver, shares);\n\n        emit Deposit(caller, receiver, assets, shares);\n    }\n\n    /**\n     * @dev Withdraw/redeem common workflow.\n     */\n    function _withdraw(\n        address caller,\n        address receiver,\n        address owner,\n        uint256 assets,\n        uint256 shares\n    ) internal virtual {\n        if (caller != owner) {\n            _spendAllowance(owner, caller, shares);\n        }\n\n        // If _asset is ERC777, `transfer` can trigger a reentrancy AFTER the transfer happens through the\n        // `tokensReceived` hook. On the other hand, the `tokensToSend` hook, that is triggered before the transfer,\n        // calls the vault, which is assumed not malicious.\n        //\n        // Conclusion: we need to do the transfer after the burn so that any reentrancy would happen after the\n        // shares are burned and after the assets are transferred, which is a valid state.\n        _burn(owner, shares);\n        SafeERC20Upgradeable.safeTransfer(_asset, receiver, assets);\n\n        emit Withdraw(caller, receiver, owner, assets, shares);\n    }\n\n    function _decimalsOffset() internal view virtual returns (uint8) {\n        return 0;\n    }\n\n    /**\n     * @dev This empty reserved space is put in place to allow future versions to add new\n     * variables without shifting down storage in the inheritance chain.\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n     */\n    uint256[49] private __gap;\n}\n"},"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../IERC20Upgradeable.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n *\n * _Available since v4.1._\n */\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the symbol of the token.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the decimals places of the token.\n     */\n    function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n *\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n * need to send a transaction, and thus is not required to hold Ether at all.\n *\n * ==== Security Considerations\n *\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\n * generally recommended is:\n *\n * ```solidity\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\n *     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\n *     doThing(..., value);\n * }\n *\n * function doThing(..., uint256 value) public {\n *     token.safeTransferFrom(msg.sender, address(this), value);\n *     ...\n * }\n * ```\n *\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\n * {SafeERC20-safeTransferFrom}).\n *\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\n * contracts should have entry points that don't rely on permit.\n */\ninterface IERC20PermitUpgradeable {\n    /**\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n     * given ``owner``'s signed approval.\n     *\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\n     * ordering also apply here.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     * - `deadline` must be a timestamp in the future.\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n     * over the EIP712-formatted function arguments.\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\n     *\n     * For more information on the signature format, see the\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n     * section].\n     *\n     * CAUTION: See Security Considerations above.\n     */\n    function permit(\n        address owner,\n        address spender,\n        uint256 value,\n        uint256 deadline,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) external;\n\n    /**\n     * @dev Returns the current nonce for `owner`. This value must be\n     * included whenever a signature is generated for {permit}.\n     *\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\n     * prevents a signature from being used multiple times.\n     */\n    function nonces(address owner) external view returns (uint256);\n\n    /**\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\n     */\n    // solhint-disable-next-line func-name-mixedcase\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\n}\n"},"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20Upgradeable {\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    /**\n     * @dev Returns the amount of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the amount of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves `amount` tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Moves `amount` tokens from `from` to `to` using the\n     * allowance mechanism. `amount` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\n}\n"},"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../IERC20Upgradeable.sol\";\nimport \"../extensions/IERC20PermitUpgradeable.sol\";\nimport \"../../../utils/AddressUpgradeable.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20Upgradeable {\n    using AddressUpgradeable for address;\n\n    /**\n     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n     * non-reverting calls are assumed to be successful.\n     */\n    function safeTransfer(IERC20Upgradeable token, address to, uint256 value) internal {\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\n    }\n\n    /**\n     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n     */\n    function safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) internal {\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\n    }\n\n    /**\n     * @dev Deprecated. This function has issues similar to the ones found in\n     * {IERC20-approve}, and its usage is discouraged.\n     *\n     * Whenever possible, use {safeIncreaseAllowance} and\n     * {safeDecreaseAllowance} instead.\n     */\n    function safeApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\n        // safeApprove should only be called when setting an initial allowance,\n        // or when resetting it to zero. To increase and decrease it, use\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\n        require(\n            (value == 0) || (token.allowance(address(this), spender) == 0),\n            \"SafeERC20: approve from non-zero to non-zero allowance\"\n        );\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\n    }\n\n    /**\n     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n     * non-reverting calls are assumed to be successful.\n     */\n    function safeIncreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\n        uint256 oldAllowance = token.allowance(address(this), spender);\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));\n    }\n\n    /**\n     * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n     * non-reverting calls are assumed to be successful.\n     */\n    function safeDecreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\n        unchecked {\n            uint256 oldAllowance = token.allowance(address(this), spender);\n            require(oldAllowance >= value, \"SafeERC20: decreased allowance below zero\");\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));\n        }\n    }\n\n    /**\n     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n     * to be set to zero before setting it to a non-zero value, such as USDT.\n     */\n    function forceApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\n        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);\n\n        if (!_callOptionalReturnBool(token, approvalCall)) {\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));\n            _callOptionalReturn(token, approvalCall);\n        }\n    }\n\n    /**\n     * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.\n     * Revert on invalid signature.\n     */\n    function safePermit(\n        IERC20PermitUpgradeable token,\n        address owner,\n        address spender,\n        uint256 value,\n        uint256 deadline,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) internal {\n        uint256 nonceBefore = token.nonces(owner);\n        token.permit(owner, spender, value, deadline, v, r, s);\n        uint256 nonceAfter = token.nonces(owner);\n        require(nonceAfter == nonceBefore + 1, \"SafeERC20: permit did not succeed\");\n    }\n\n    /**\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\n     * @param token The token targeted by the call.\n     * @param data The call data (encoded using abi.encode or one of its variants).\n     */\n    function _callOptionalReturn(IERC20Upgradeable token, bytes memory data) private {\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\n        // the target address contains contract code and also asserts for success in the low-level call.\n\n        bytes memory returndata = address(token).functionCall(data, \"SafeERC20: low-level call failed\");\n        require(returndata.length == 0 || abi.decode(returndata, (bool)), \"SafeERC20: ERC20 operation did not succeed\");\n    }\n\n    /**\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\n     * @param token The token targeted by the call.\n     * @param data The call data (encoded using abi.encode or one of its variants).\n     *\n     * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\n     */\n    function _callOptionalReturnBool(IERC20Upgradeable token, bytes memory data) private returns (bool) {\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\n        // and not revert is the subcall reverts.\n\n        (bool success, bytes memory returndata) = address(token).call(data);\n        return\n            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && AddressUpgradeable.isContract(address(token));\n    }\n}\n"},"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\n    /**\n     * @dev Returns true if `account` is a contract.\n     *\n     * [IMPORTANT]\n     * ====\n     * It is unsafe to assume that an address for which this function returns\n     * false is an externally-owned account (EOA) and not a contract.\n     *\n     * Among others, `isContract` will return false for the following\n     * types of addresses:\n     *\n     *  - an externally-owned account\n     *  - a contract in construction\n     *  - an address where a contract will be created\n     *  - an address where a contract lived, but was destroyed\n     *\n     * Furthermore, `isContract` will also return true if the target contract within\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\n     * which only has an effect at the end of a transaction.\n     * ====\n     *\n     * [IMPORTANT]\n     * ====\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\n     *\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n     * constructor.\n     * ====\n     */\n    function isContract(address account) internal view returns (bool) {\n        // This method relies on extcodesize/address.code.length, which returns 0\n        // for contracts in construction, since the code is only stored at the end\n        // of the constructor execution.\n\n        return account.code.length > 0;\n    }\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n        (bool success, ) = recipient.call{value: amount}(\"\");\n        require(success, \"Address: unable to send value, recipient may have reverted\");\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain `call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason, it is bubbled up by this\n     * function (like regular Solidity function calls).\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, \"Address: low-level call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n     * `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(\n        address target,\n        bytes memory data,\n        uint256 value,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        require(address(this).balance >= value, \"Address: insufficient balance for call\");\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n        return functionStaticCall(target, data, \"Address: low-level static call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal view returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.delegatecall(data);\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n     *\n     * _Available since v4.8._\n     */\n    function verifyCallResultFromTarget(\n        address target,\n        bool success,\n        bytes memory returndata,\n        string memory errorMessage\n    ) internal view returns (bytes memory) {\n        if (success) {\n            if (returndata.length == 0) {\n                // only check isContract if the call was successful and the return data is empty\n                // otherwise we already know that it was a contract\n                require(isContract(target), \"Address: call to non-contract\");\n            }\n            return returndata;\n        } else {\n            _revert(returndata, errorMessage);\n        }\n    }\n\n    /**\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n     * revert reason or using the provided one.\n     *\n     * _Available since v4.3._\n     */\n    function verifyCallResult(\n        bool success,\n        bytes memory returndata,\n        string memory errorMessage\n    ) internal pure returns (bytes memory) {\n        if (success) {\n            return returndata;\n        } else {\n            _revert(returndata, errorMessage);\n        }\n    }\n\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\n        // Look for revert reason and bubble it up if present\n        if (returndata.length > 0) {\n            // The easiest way to bubble the revert reason is using memory via assembly\n            /// @solidity memory-safe-assembly\n            assembly {\n                let returndata_size := mload(returndata)\n                revert(add(32, returndata), returndata_size)\n            }\n        } else {\n            revert(errorMessage);\n        }\n    }\n}\n"},"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\n\npragma solidity ^0.8.0;\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n    function __Context_init() internal onlyInitializing {\n    }\n\n    function __Context_init_unchained() internal onlyInitializing {\n    }\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n\n    function _contextSuffixLength() internal view virtual returns (uint256) {\n        return 0;\n    }\n\n    /**\n     * @dev This empty reserved space is put in place to allow future versions to add new\n     * variables without shifting down storage in the inheritance chain.\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n     */\n    uint256[50] private __gap;\n}\n"},"@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary MathUpgradeable {\n    enum Rounding {\n        Down, // Toward negative infinity\n        Up, // Toward infinity\n        Zero // Toward zero\n    }\n\n    /**\n     * @dev Returns the largest of two numbers.\n     */\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\n        return a > b ? a : b;\n    }\n\n    /**\n     * @dev Returns the smallest of two numbers.\n     */\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\n        return a < b ? a : b;\n    }\n\n    /**\n     * @dev Returns the average of two numbers. The result is rounded towards\n     * zero.\n     */\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\n        // (a + b) / 2 can overflow.\n        return (a & b) + (a ^ b) / 2;\n    }\n\n    /**\n     * @dev Returns the ceiling of the division of two numbers.\n     *\n     * This differs from standard division with `/` in that it rounds up instead\n     * of rounding down.\n     */\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n        // (a + b - 1) / b can overflow on addition, so we distribute.\n        return a == 0 ? 0 : (a - 1) / b + 1;\n    }\n\n    /**\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n     * with further edits by Uniswap Labs also under MIT license.\n     */\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\n        unchecked {\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n            // variables such that product = prod1 * 2^256 + prod0.\n            uint256 prod0; // Least significant 256 bits of the product\n            uint256 prod1; // Most significant 256 bits of the product\n            assembly {\n                let mm := mulmod(x, y, not(0))\n                prod0 := mul(x, y)\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n            }\n\n            // Handle non-overflow cases, 256 by 256 division.\n            if (prod1 == 0) {\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\n                // The surrounding unchecked block does not change this fact.\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\n                return prod0 / denominator;\n            }\n\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\n            require(denominator > prod1, \"Math: mulDiv overflow\");\n\n            ///////////////////////////////////////////////\n            // 512 by 256 division.\n            ///////////////////////////////////////////////\n\n            // Make division exact by subtracting the remainder from [prod1 prod0].\n            uint256 remainder;\n            assembly {\n                // Compute remainder using mulmod.\n                remainder := mulmod(x, y, denominator)\n\n                // Subtract 256 bit number from 512 bit number.\n                prod1 := sub(prod1, gt(remainder, prod0))\n                prod0 := sub(prod0, remainder)\n            }\n\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\n            // See https://cs.stackexchange.com/q/138556/92363.\n\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\n            uint256 twos = denominator & (~denominator + 1);\n            assembly {\n                // Divide denominator by twos.\n                denominator := div(denominator, twos)\n\n                // Divide [prod1 prod0] by twos.\n                prod0 := div(prod0, twos)\n\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n                twos := add(div(sub(0, twos), twos), 1)\n            }\n\n            // Shift in bits from prod1 into prod0.\n            prod0 |= prod1 * twos;\n\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n            // four bits. That is, denominator * inv = 1 mod 2^4.\n            uint256 inverse = (3 * denominator) ^ 2;\n\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\n            // in modular arithmetic, doubling the correct bits in each step.\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n            // is no longer required.\n            result = prod0 * inverse;\n            return result;\n        }\n    }\n\n    /**\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n     */\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\n        uint256 result = mulDiv(x, y, denominator);\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\n            result += 1;\n        }\n        return result;\n    }\n\n    /**\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n     *\n     * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n     */\n    function sqrt(uint256 a) internal pure returns (uint256) {\n        if (a == 0) {\n            return 0;\n        }\n\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n        //\n        // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n        //\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n        //\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n        uint256 result = 1 << (log2(a) >> 1);\n\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n        // into the expected uint128 result.\n        unchecked {\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            return min(result, a / result);\n        }\n    }\n\n    /**\n     * @notice Calculates sqrt(a), following the selected rounding direction.\n     */\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = sqrt(a);\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\n        }\n    }\n\n    /**\n     * @dev Return the log in base 2, rounded down, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log2(uint256 value) internal pure returns (uint256) {\n        uint256 result = 0;\n        unchecked {\n            if (value >> 128 > 0) {\n                value >>= 128;\n                result += 128;\n            }\n            if (value >> 64 > 0) {\n                value >>= 64;\n                result += 64;\n            }\n            if (value >> 32 > 0) {\n                value >>= 32;\n                result += 32;\n            }\n            if (value >> 16 > 0) {\n                value >>= 16;\n                result += 16;\n            }\n            if (value >> 8 > 0) {\n                value >>= 8;\n                result += 8;\n            }\n            if (value >> 4 > 0) {\n                value >>= 4;\n                result += 4;\n            }\n            if (value >> 2 > 0) {\n                value >>= 2;\n                result += 2;\n            }\n            if (value >> 1 > 0) {\n                result += 1;\n            }\n        }\n        return result;\n    }\n\n    /**\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = log2(value);\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\n        }\n    }\n\n    /**\n     * @dev Return the log in base 10, rounded down, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log10(uint256 value) internal pure returns (uint256) {\n        uint256 result = 0;\n        unchecked {\n            if (value >= 10 ** 64) {\n                value /= 10 ** 64;\n                result += 64;\n            }\n            if (value >= 10 ** 32) {\n                value /= 10 ** 32;\n                result += 32;\n            }\n            if (value >= 10 ** 16) {\n                value /= 10 ** 16;\n                result += 16;\n            }\n            if (value >= 10 ** 8) {\n                value /= 10 ** 8;\n                result += 8;\n            }\n            if (value >= 10 ** 4) {\n                value /= 10 ** 4;\n                result += 4;\n            }\n            if (value >= 10 ** 2) {\n                value /= 10 ** 2;\n                result += 2;\n            }\n            if (value >= 10 ** 1) {\n                result += 1;\n            }\n        }\n        return result;\n    }\n\n    /**\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = log10(value);\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\n        }\n    }\n\n    /**\n     * @dev Return the log in base 256, rounded down, of a positive value.\n     * Returns 0 if given 0.\n     *\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n     */\n    function log256(uint256 value) internal pure returns (uint256) {\n        uint256 result = 0;\n        unchecked {\n            if (value >> 128 > 0) {\n                value >>= 128;\n                result += 16;\n            }\n            if (value >> 64 > 0) {\n                value >>= 64;\n                result += 8;\n            }\n            if (value >> 32 > 0) {\n                value >>= 32;\n                result += 4;\n            }\n            if (value >> 16 > 0) {\n                value >>= 16;\n                result += 2;\n            }\n            if (value >> 8 > 0) {\n                result += 1;\n            }\n        }\n        return result;\n    }\n\n    /**\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = log256(value);\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\n        }\n    }\n}\n"},"@openzeppelin/contracts/access/IAccessControl.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev External interface of AccessControl declared to support ERC165 detection.\n */\ninterface IAccessControl {\n    /**\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\n     *\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\n     * {RoleAdminChanged} not being emitted signaling this.\n     *\n     * _Available since v3.1._\n     */\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\n\n    /**\n     * @dev Emitted when `account` is granted `role`.\n     *\n     * `sender` is the account that originated the contract call, an admin role\n     * bearer except when using {AccessControl-_setupRole}.\n     */\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\n\n    /**\n     * @dev Emitted when `account` is revoked `role`.\n     *\n     * `sender` is the account that originated the contract call:\n     *   - if using `revokeRole`, it is the admin role bearer\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\n     */\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\n\n    /**\n     * @dev Returns `true` if `account` has been granted `role`.\n     */\n    function hasRole(bytes32 role, address account) external view returns (bool);\n\n    /**\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\n     * {revokeRole}.\n     *\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\n     */\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\n\n    /**\n     * @dev Grants `role` to `account`.\n     *\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\n     * event.\n     *\n     * Requirements:\n     *\n     * - the caller must have ``role``'s admin role.\n     */\n    function grantRole(bytes32 role, address account) external;\n\n    /**\n     * @dev Revokes `role` from `account`.\n     *\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\n     *\n     * Requirements:\n     *\n     * - the caller must have ``role``'s admin role.\n     */\n    function revokeRole(bytes32 role, address account) external;\n\n    /**\n     * @dev Revokes `role` from the calling account.\n     *\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\n     * purpose is to provide a mechanism for accounts to lose their privileges\n     * if they are compromised (such as when a trusted device is misplaced).\n     *\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\n     * event.\n     *\n     * Requirements:\n     *\n     * - the caller must be `account`.\n     */\n    function renounceRole(bytes32 role, address account) external;\n}\n"},"@openzeppelin/contracts/access/Ownable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n    address private _owner;\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the deployer as the initial owner.\n     */\n    constructor() {\n        _transferOwnership(_msgSender());\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        _checkOwner();\n        _;\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if the sender is not the owner.\n     */\n    function _checkOwner() internal view virtual {\n        require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby disabling any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        address oldOwner = _owner;\n        _owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n}\n"},"@openzeppelin/contracts/interfaces/draft-IERC1822.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n    /**\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n     * address.\n     *\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n     * function revert if invoked through a proxy.\n     */\n    function proxiableUUID() external view returns (bytes32);\n}\n"},"@openzeppelin/contracts/interfaces/IERC1967.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC1967.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\n *\n * _Available since v4.8.3._\n */\ninterface IERC1967 {\n    /**\n     * @dev Emitted when the implementation is upgraded.\n     */\n    event Upgraded(address indexed implementation);\n\n    /**\n     * @dev Emitted when the admin account has changed.\n     */\n    event AdminChanged(address previousAdmin, address newAdmin);\n\n    /**\n     * @dev Emitted when the beacon is changed.\n     */\n    event BeaconUpgraded(address indexed beacon);\n}\n"},"@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from an {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n    /**\n     * @dev Initializes the proxy with `beacon`.\n     *\n     * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n     * will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity\n     * constructor.\n     *\n     * Requirements:\n     *\n     * - `beacon` must be a contract with the interface {IBeacon}.\n     */\n    constructor(address beacon, bytes memory data) payable {\n        _upgradeBeaconToAndCall(beacon, data, false);\n    }\n\n    /**\n     * @dev Returns the current beacon address.\n     */\n    function _beacon() internal view virtual returns (address) {\n        return _getBeacon();\n    }\n\n    /**\n     * @dev Returns the current implementation address of the associated beacon.\n     */\n    function _implementation() internal view virtual override returns (address) {\n        return IBeacon(_getBeacon()).implementation();\n    }\n\n    /**\n     * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n     *\n     * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n     *\n     * Requirements:\n     *\n     * - `beacon` must be a contract.\n     * - The implementation returned by `beacon` must be a contract.\n     */\n    function _setBeacon(address beacon, bytes memory data) internal virtual {\n        _upgradeBeaconToAndCall(beacon, data, false);\n    }\n}\n"},"@openzeppelin/contracts/proxy/beacon/IBeacon.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n    /**\n     * @dev Must return an address that can be used as a delegate call target.\n     *\n     * {BeaconProxy} will check that this address is a contract.\n     */\n    function implementation() external view returns (address);\n}\n"},"@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n    address private _implementation;\n\n    /**\n     * @dev Emitted when the implementation returned by the beacon is changed.\n     */\n    event Upgraded(address indexed implementation);\n\n    /**\n     * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n     * beacon.\n     */\n    constructor(address implementation_) {\n        _setImplementation(implementation_);\n    }\n\n    /**\n     * @dev Returns the current implementation address.\n     */\n    function implementation() public view virtual override returns (address) {\n        return _implementation;\n    }\n\n    /**\n     * @dev Upgrades the beacon to a new implementation.\n     *\n     * Emits an {Upgraded} event.\n     *\n     * Requirements:\n     *\n     * - msg.sender must be the owner of the contract.\n     * - `newImplementation` must be a contract.\n     */\n    function upgradeTo(address newImplementation) public virtual onlyOwner {\n        _setImplementation(newImplementation);\n        emit Upgraded(newImplementation);\n    }\n\n    /**\n     * @dev Sets the implementation contract address for this beacon\n     *\n     * Requirements:\n     *\n     * - `newImplementation` must be a contract.\n     */\n    function _setImplementation(address newImplementation) private {\n        require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n        _implementation = newImplementation;\n    }\n}\n"},"@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/IERC1967.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n */\nabstract contract ERC1967Upgrade is IERC1967 {\n    // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n    /**\n     * @dev Storage slot with the address of the current implementation.\n     * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n     * validated in the constructor.\n     */\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n    /**\n     * @dev Returns the current implementation address.\n     */\n    function _getImplementation() internal view returns (address) {\n        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new address in the EIP1967 implementation slot.\n     */\n    function _setImplementation(address newImplementation) private {\n        require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n    }\n\n    /**\n     * @dev Perform implementation upgrade\n     *\n     * Emits an {Upgraded} event.\n     */\n    function _upgradeTo(address newImplementation) internal {\n        _setImplementation(newImplementation);\n        emit Upgraded(newImplementation);\n    }\n\n    /**\n     * @dev Perform implementation upgrade with additional setup call.\n     *\n     * Emits an {Upgraded} event.\n     */\n    function _upgradeToAndCall(address newImplementation, bytes memory data, bool forceCall) internal {\n        _upgradeTo(newImplementation);\n        if (data.length > 0 || forceCall) {\n            Address.functionDelegateCall(newImplementation, data);\n        }\n    }\n\n    /**\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n     *\n     * Emits an {Upgraded} event.\n     */\n    function _upgradeToAndCallUUPS(address newImplementation, bytes memory data, bool forceCall) internal {\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\n        if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n            _setImplementation(newImplementation);\n        } else {\n            try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n                require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n            } catch {\n                revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n            }\n            _upgradeToAndCall(newImplementation, data, forceCall);\n        }\n    }\n\n    /**\n     * @dev Storage slot with the admin of the contract.\n     * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n     * validated in the constructor.\n     */\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n    /**\n     * @dev Returns the current admin.\n     */\n    function _getAdmin() internal view returns (address) {\n        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new address in the EIP1967 admin slot.\n     */\n    function _setAdmin(address newAdmin) private {\n        require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n    }\n\n    /**\n     * @dev Changes the admin of the proxy.\n     *\n     * Emits an {AdminChanged} event.\n     */\n    function _changeAdmin(address newAdmin) internal {\n        emit AdminChanged(_getAdmin(), newAdmin);\n        _setAdmin(newAdmin);\n    }\n\n    /**\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n     */\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n    /**\n     * @dev Returns the current beacon.\n     */\n    function _getBeacon() internal view returns (address) {\n        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\n     */\n    function _setBeacon(address newBeacon) private {\n        require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n        require(\n            Address.isContract(IBeacon(newBeacon).implementation()),\n            \"ERC1967: beacon implementation is not a contract\"\n        );\n        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n    }\n\n    /**\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n     *\n     * Emits a {BeaconUpgraded} event.\n     */\n    function _upgradeBeaconToAndCall(address newBeacon, bytes memory data, bool forceCall) internal {\n        _setBeacon(newBeacon);\n        emit BeaconUpgraded(newBeacon);\n        if (data.length > 0 || forceCall) {\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n        }\n    }\n}\n"},"@openzeppelin/contracts/proxy/Proxy.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n    /**\n     * @dev Delegates the current call to `implementation`.\n     *\n     * This function does not return to its internal call site, it will return directly to the external caller.\n     */\n    function _delegate(address implementation) internal virtual {\n        assembly {\n            // Copy msg.data. We take full control of memory in this inline assembly\n            // block because it will not return to Solidity code. We overwrite the\n            // Solidity scratch pad at memory position 0.\n            calldatacopy(0, 0, calldatasize())\n\n            // Call the implementation.\n            // out and outsize are 0 because we don't know the size yet.\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n            // Copy the returned data.\n            returndatacopy(0, 0, returndatasize())\n\n            switch result\n            // delegatecall returns 0 on error.\n            case 0 {\n                revert(0, returndatasize())\n            }\n            default {\n                return(0, returndatasize())\n            }\n        }\n    }\n\n    /**\n     * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\n     * and {_fallback} should delegate.\n     */\n    function _implementation() internal view virtual returns (address);\n\n    /**\n     * @dev Delegates the current call to the address returned by `_implementation()`.\n     *\n     * This function does not return to its internal call site, it will return directly to the external caller.\n     */\n    function _fallback() internal virtual {\n        _beforeFallback();\n        _delegate(_implementation());\n    }\n\n    /**\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n     * function in the contract matches the call data.\n     */\n    fallback() external payable virtual {\n        _fallback();\n    }\n\n    /**\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n     * is empty.\n     */\n    receive() external payable virtual {\n        _fallback();\n    }\n\n    /**\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n     * call, or as part of the Solidity `fallback` or `receive` functions.\n     *\n     * If overridden should call `super._beforeFallback()`.\n     */\n    function _beforeFallback() internal virtual {}\n}\n"},"@openzeppelin/contracts/utils/Address.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev Returns true if `account` is a contract.\n     *\n     * [IMPORTANT]\n     * ====\n     * It is unsafe to assume that an address for which this function returns\n     * false is an externally-owned account (EOA) and not a contract.\n     *\n     * Among others, `isContract` will return false for the following\n     * types of addresses:\n     *\n     *  - an externally-owned account\n     *  - a contract in construction\n     *  - an address where a contract will be created\n     *  - an address where a contract lived, but was destroyed\n     *\n     * Furthermore, `isContract` will also return true if the target contract within\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\n     * which only has an effect at the end of a transaction.\n     * ====\n     *\n     * [IMPORTANT]\n     * ====\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\n     *\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n     * constructor.\n     * ====\n     */\n    function isContract(address account) internal view returns (bool) {\n        // This method relies on extcodesize/address.code.length, which returns 0\n        // for contracts in construction, since the code is only stored at the end\n        // of the constructor execution.\n\n        return account.code.length > 0;\n    }\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n        (bool success, ) = recipient.call{value: amount}(\"\");\n        require(success, \"Address: unable to send value, recipient may have reverted\");\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain `call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason, it is bubbled up by this\n     * function (like regular Solidity function calls).\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, \"Address: low-level call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n     * `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(\n        address target,\n        bytes memory data,\n        uint256 value,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        require(address(this).balance >= value, \"Address: insufficient balance for call\");\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n        return functionStaticCall(target, data, \"Address: low-level static call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal view returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.delegatecall(data);\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n     *\n     * _Available since v4.8._\n     */\n    function verifyCallResultFromTarget(\n        address target,\n        bool success,\n        bytes memory returndata,\n        string memory errorMessage\n    ) internal view returns (bytes memory) {\n        if (success) {\n            if (returndata.length == 0) {\n                // only check isContract if the call was successful and the return data is empty\n                // otherwise we already know that it was a contract\n                require(isContract(target), \"Address: call to non-contract\");\n            }\n            return returndata;\n        } else {\n            _revert(returndata, errorMessage);\n        }\n    }\n\n    /**\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n     * revert reason or using the provided one.\n     *\n     * _Available since v4.3._\n     */\n    function verifyCallResult(\n        bool success,\n        bytes memory returndata,\n        string memory errorMessage\n    ) internal pure returns (bytes memory) {\n        if (success) {\n            return returndata;\n        } else {\n            _revert(returndata, errorMessage);\n        }\n    }\n\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\n        // Look for revert reason and bubble it up if present\n        if (returndata.length > 0) {\n            // The easiest way to bubble the revert reason is using memory via assembly\n            /// @solidity memory-safe-assembly\n            assembly {\n                let returndata_size := mload(returndata)\n                revert(add(32, returndata), returndata_size)\n            }\n        } else {\n            revert(errorMessage);\n        }\n    }\n}\n"},"@openzeppelin/contracts/utils/Context.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n\n    function _contextSuffixLength() internal view virtual returns (uint256) {\n        return 0;\n    }\n}\n"},"@openzeppelin/contracts/utils/StorageSlot.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```solidity\n * contract ERC1967 {\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n *     function _getImplementation() internal view returns (address) {\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n *     }\n *\n *     function _setImplementation(address newImplementation) internal {\n *         require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n *     }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\n * _Available since v4.9 for `string`, `bytes`._\n */\nlibrary StorageSlot {\n    struct AddressSlot {\n        address value;\n    }\n\n    struct BooleanSlot {\n        bool value;\n    }\n\n    struct Bytes32Slot {\n        bytes32 value;\n    }\n\n    struct Uint256Slot {\n        uint256 value;\n    }\n\n    struct StringSlot {\n        string value;\n    }\n\n    struct BytesSlot {\n        bytes value;\n    }\n\n    /**\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n     */\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n     */\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n     */\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n     */\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\n     */\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\n     */\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := store.slot\n        }\n    }\n\n    /**\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\n     */\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\n     */\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := store.slot\n        }\n    }\n}\n"},"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\";\n\nimport \"./IAccessControlManagerV8.sol\";\n\n/**\n * @title AccessControlledV8\n * @author Venus\n * @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\n * to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\n */\nabstract contract AccessControlledV8 is Initializable, Ownable2StepUpgradeable {\n    /// @notice Access control manager contract\n    IAccessControlManagerV8 internal _accessControlManager;\n\n    /**\n     * @dev This empty reserved space is put in place to allow future versions to add new\n     * variables without shifting down storage in the inheritance chain.\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n     */\n    uint256[49] private __gap;\n\n    /// @notice Emitted when access control manager contract address is changed\n    event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager);\n\n    /// @notice Thrown when the action is prohibited by AccessControlManager\n    error Unauthorized(address sender, address calledContract, string methodSignature);\n\n    function __AccessControlled_init(address accessControlManager_) internal onlyInitializing {\n        __Ownable2Step_init();\n        __AccessControlled_init_unchained(accessControlManager_);\n    }\n\n    function __AccessControlled_init_unchained(address accessControlManager_) internal onlyInitializing {\n        _setAccessControlManager(accessControlManager_);\n    }\n\n    /**\n     * @notice Sets the address of AccessControlManager\n     * @dev Admin function to set address of AccessControlManager\n     * @param accessControlManager_ The new address of the AccessControlManager\n     * @custom:event Emits NewAccessControlManager event\n     * @custom:access Only Governance\n     */\n    function setAccessControlManager(address accessControlManager_) external onlyOwner {\n        _setAccessControlManager(accessControlManager_);\n    }\n\n    /**\n     * @notice Returns the address of the access control manager contract\n     */\n    function accessControlManager() external view returns (IAccessControlManagerV8) {\n        return _accessControlManager;\n    }\n\n    /**\n     * @dev Internal function to set address of AccessControlManager\n     * @param accessControlManager_ The new address of the AccessControlManager\n     */\n    function _setAccessControlManager(address accessControlManager_) internal {\n        require(address(accessControlManager_) != address(0), \"invalid acess control manager address\");\n        address oldAccessControlManager = address(_accessControlManager);\n        _accessControlManager = IAccessControlManagerV8(accessControlManager_);\n        emit NewAccessControlManager(oldAccessControlManager, accessControlManager_);\n    }\n\n    /**\n     * @notice Reverts if the call is not allowed by AccessControlManager\n     * @param signature Method signature\n     */\n    function _checkAccessAllowed(string memory signature) internal view {\n        bool isAllowedToCall = _accessControlManager.isAllowedToCall(msg.sender, signature);\n\n        if (!isAllowedToCall) {\n            revert Unauthorized(msg.sender, address(this), signature);\n        }\n    }\n}\n"},"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity ^0.8.25;\n\nimport \"@openzeppelin/contracts/access/IAccessControl.sol\";\n\n/**\n * @title IAccessControlManagerV8\n * @author Venus\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\n */\ninterface IAccessControlManagerV8 is IAccessControl {\n    function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\n\n    function revokeCallPermission(\n        address contractAddress,\n        string calldata functionSig,\n        address accountToRevoke\n    ) external;\n\n    function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\n\n    function hasPermission(\n        address account,\n        address contractAddress,\n        string calldata functionSig\n    ) external view returns (bool);\n}\n"},"@venusprotocol/isolated-pools/contracts/Comptroller.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\nimport { Ownable2StepUpgradeable } from \"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\";\nimport { ResilientOracleInterface } from \"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\";\nimport { AccessControlledV8 } from \"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\";\nimport { IPrime } from \"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\";\n\nimport { ComptrollerInterface, Action } from \"./ComptrollerInterface.sol\";\nimport { ComptrollerStorage } from \"./ComptrollerStorage.sol\";\nimport { ExponentialNoError } from \"./ExponentialNoError.sol\";\nimport { VToken } from \"./VToken.sol\";\nimport { RewardsDistributor } from \"./Rewards/RewardsDistributor.sol\";\nimport { MaxLoopsLimitHelper } from \"./MaxLoopsLimitHelper.sol\";\nimport { ensureNonzeroAddress } from \"./lib/validators.sol\";\n\n/**\n * @title Comptroller\n * @author Venus\n * @notice The Comptroller is designed to provide checks for all minting, redeeming, transferring, borrowing, lending, repaying, liquidating,\n * and seizing done by the `vToken` contract. Each pool has one `Comptroller` checking these interactions across markets. When a user interacts\n * with a given market by one of these main actions, a call is made to a corresponding hook in the associated `Comptroller`, which either allows\n * or reverts the transaction. These hooks also update supply and borrow rewards as they are called. The comptroller holds the logic for assessing\n * liquidity snapshots of an account via the collateral factor and liquidation threshold. This check determines the collateral needed for a borrow,\n * as well as how much of a borrow may be liquidated. A user may borrow a portion of their collateral with the maximum amount determined by the\n * markets collateral factor. However, if their borrowed amount exceeds an amount calculated using the market’s corresponding liquidation threshold,\n * the borrow is eligible for liquidation.\n *\n * The `Comptroller` also includes two functions `liquidateAccount()` and `healAccount()`, which are meant to handle accounts that do not exceed\n * the `minLiquidatableCollateral` for the `Comptroller`:\n *\n * - `healAccount()`: This function is called to seize all of a given user’s collateral, requiring the `msg.sender` repay a certain percentage\n * of the debt calculated by `collateral/(borrows*liquidationIncentive)`. The function can only be called if the calculated percentage does not exceed\n * 100%, because otherwise no `badDebt` would be created and `liquidateAccount()` should be used instead. The difference in the actual amount of debt\n * and debt paid off is recorded as `badDebt` for each market, which can then be auctioned off for the risk reserves of the associated pool.\n * - `liquidateAccount()`: This function can only be called if the collateral seized will cover all borrows of an account, as well as the liquidation\n * incentive. Otherwise, the pool will incur bad debt, in which case the function `healAccount()` should be used instead. This function skips the logic\n * verifying that the repay amount does not exceed the close factor.\n */\ncontract Comptroller is\n    Ownable2StepUpgradeable,\n    AccessControlledV8,\n    ComptrollerStorage,\n    ComptrollerInterface,\n    ExponentialNoError,\n    MaxLoopsLimitHelper\n{\n    // PoolRegistry, immutable to save on gas\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\n    address public immutable poolRegistry;\n\n    /// @notice Emitted when an account enters a market\n    event MarketEntered(VToken indexed vToken, address indexed account);\n\n    /// @notice Emitted when an account exits a market\n    event MarketExited(VToken indexed vToken, address indexed account);\n\n    /// @notice Emitted when close factor is changed by admin\n    event NewCloseFactor(uint256 oldCloseFactorMantissa, uint256 newCloseFactorMantissa);\n\n    /// @notice Emitted when a collateral factor is changed by admin\n    event NewCollateralFactor(VToken vToken, uint256 oldCollateralFactorMantissa, uint256 newCollateralFactorMantissa);\n\n    /// @notice Emitted when liquidation threshold is changed by admin\n    event NewLiquidationThreshold(\n        VToken vToken,\n        uint256 oldLiquidationThresholdMantissa,\n        uint256 newLiquidationThresholdMantissa\n    );\n\n    /// @notice Emitted when liquidation incentive is changed by admin\n    event NewLiquidationIncentive(uint256 oldLiquidationIncentiveMantissa, uint256 newLiquidationIncentiveMantissa);\n\n    /// @notice Emitted when price oracle is changed\n    event NewPriceOracle(ResilientOracleInterface oldPriceOracle, ResilientOracleInterface newPriceOracle);\n\n    /// @notice Emitted when an action is paused on a market\n    event ActionPausedMarket(VToken vToken, Action action, bool pauseState);\n\n    /// @notice Emitted when borrow cap for a vToken is changed\n    event NewBorrowCap(VToken indexed vToken, uint256 newBorrowCap);\n\n    /// @notice Emitted when the collateral threshold (in USD) for non-batch liquidations is changed\n    event NewMinLiquidatableCollateral(uint256 oldMinLiquidatableCollateral, uint256 newMinLiquidatableCollateral);\n\n    /// @notice Emitted when supply cap for a vToken is changed\n    event NewSupplyCap(VToken indexed vToken, uint256 newSupplyCap);\n\n    /// @notice Emitted when a rewards distributor is added\n    event NewRewardsDistributor(address indexed rewardsDistributor, address indexed rewardToken);\n\n    /// @notice Emitted when a market is supported\n    event MarketSupported(VToken vToken);\n\n    /// @notice Emitted when prime token contract address is changed\n    event NewPrimeToken(IPrime oldPrimeToken, IPrime newPrimeToken);\n\n    /// @notice Emitted when forced liquidation is enabled or disabled for a market\n    event IsForcedLiquidationEnabledUpdated(address indexed vToken, bool enable);\n\n    /// @notice Emitted when a market is unlisted\n    event MarketUnlisted(address indexed vToken);\n    /// @notice Emitted when the borrowing or redeeming delegate rights are updated for an account\n    event DelegateUpdated(address indexed approver, address indexed delegate, bool approved);\n\n    /// @notice Thrown when collateral factor exceeds the upper bound\n    error InvalidCollateralFactor();\n\n    /// @notice Thrown when liquidation threshold exceeds the collateral factor\n    error InvalidLiquidationThreshold();\n\n    /// @notice Thrown when the action is only available to specific sender, but the real sender was different\n    error UnexpectedSender(address expectedSender, address actualSender);\n\n    /// @notice Thrown when the oracle returns an invalid price for some asset\n    error PriceError(address vToken);\n\n    /// @notice Thrown if VToken unexpectedly returned a nonzero error code while trying to get account snapshot\n    error SnapshotError(address vToken, address user);\n\n    /// @notice Thrown when the market is not listed\n    error MarketNotListed(address market);\n\n    /// @notice Thrown when a market has an unexpected comptroller\n    error ComptrollerMismatch();\n\n    /// @notice Thrown when user is not member of market\n    error MarketNotCollateral(address vToken, address user);\n\n    /// @notice Thrown when borrow action is not paused\n    error BorrowActionNotPaused();\n\n    /// @notice Thrown when mint action is not paused\n    error MintActionNotPaused();\n\n    /// @notice Thrown when redeem action is not paused\n    error RedeemActionNotPaused();\n\n    /// @notice Thrown when repay action is not paused\n    error RepayActionNotPaused();\n\n    /// @notice Thrown when seize action is not paused\n    error SeizeActionNotPaused();\n\n    /// @notice Thrown when exit market action is not paused\n    error ExitMarketActionNotPaused();\n\n    /// @notice Thrown when transfer action is not paused\n    error TransferActionNotPaused();\n\n    /// @notice Thrown when enter market action is not paused\n    error EnterMarketActionNotPaused();\n\n    /// @notice Thrown when liquidate action is not paused\n    error LiquidateActionNotPaused();\n\n    /// @notice Thrown when borrow cap is not zero\n    error BorrowCapIsNotZero();\n\n    /// @notice Thrown when supply cap is not zero\n    error SupplyCapIsNotZero();\n\n    /// @notice Thrown when collateral factor is not zero\n    error CollateralFactorIsNotZero();\n\n    /**\n     * @notice Thrown during the liquidation if user's total collateral amount is lower than\n     *   a predefined threshold. In this case only batch liquidations (either liquidateAccount\n     *   or healAccount) are available.\n     */\n    error MinimalCollateralViolated(uint256 expectedGreaterThan, uint256 actual);\n    error CollateralExceedsThreshold(uint256 expectedLessThanOrEqualTo, uint256 actual);\n    error InsufficientCollateral(uint256 collateralToSeize, uint256 availableCollateral);\n\n    /// @notice Thrown when the account doesn't have enough liquidity to redeem or borrow\n    error InsufficientLiquidity();\n\n    /// @notice Thrown when trying to liquidate a healthy account\n    error InsufficientShortfall();\n\n    /// @notice Thrown when trying to repay more than allowed by close factor\n    error TooMuchRepay();\n\n    /// @notice Thrown if the user is trying to exit a market in which they have an outstanding debt\n    error NonzeroBorrowBalance();\n\n    /// @notice Thrown when trying to perform an action that is paused\n    error ActionPaused(address market, Action action);\n\n    /// @notice Thrown when trying to add a market that is already listed\n    error MarketAlreadyListed(address market);\n\n    /// @notice Thrown if the supply cap is exceeded\n    error SupplyCapExceeded(address market, uint256 cap);\n\n    /// @notice Thrown if the borrow cap is exceeded\n    error BorrowCapExceeded(address market, uint256 cap);\n\n    /// @notice Thrown if delegate approval status is already set to the requested value\n    error DelegationStatusUnchanged();\n\n    /// @param poolRegistry_ Pool registry address\n    /// @custom:oz-upgrades-unsafe-allow constructor\n    /// @custom:error ZeroAddressNotAllowed is thrown when pool registry address is zero\n    constructor(address poolRegistry_) {\n        ensureNonzeroAddress(poolRegistry_);\n\n        poolRegistry = poolRegistry_;\n        _disableInitializers();\n    }\n\n    /**\n     * @param loopLimit Limit for the loops can iterate to avoid the DOS\n     * @param accessControlManager Access control manager contract address\n     */\n    function initialize(uint256 loopLimit, address accessControlManager) external initializer {\n        __Ownable2Step_init();\n        __AccessControlled_init_unchained(accessControlManager);\n\n        _setMaxLoopsLimit(loopLimit);\n    }\n\n    /**\n     * @notice Add assets to be included in account liquidity calculation; enabling them to be used as collateral\n     * @param vTokens The list of addresses of the vToken markets to be enabled\n     * @return errors An array of NO_ERROR for compatibility with Venus core tooling\n     * @custom:event MarketEntered is emitted for each market on success\n     * @custom:error ActionPaused error is thrown if entering any of the markets is paused\n     * @custom:error MarketNotListed error is thrown if any of the markets is not listed\n     * @custom:access Not restricted\n     */\n    function enterMarkets(address[] memory vTokens) external override returns (uint256[] memory) {\n        uint256 len = vTokens.length;\n\n        uint256[] memory results = new uint256[](len);\n        for (uint256 i; i < len; ++i) {\n            VToken vToken = VToken(vTokens[i]);\n\n            _addToMarket(vToken, msg.sender);\n            results[i] = NO_ERROR;\n        }\n\n        return results;\n    }\n\n    /**\n     * @notice Unlist a market by setting isListed to false\n     * @dev Checks if all actions are paused, borrow/supply caps is set to 0 and collateral factor is to 0.\n     * @param market The address of the market (token) to unlist\n     * @return uint256 Always NO_ERROR for compatibility with Venus core tooling\n     * @custom:event MarketUnlisted is emitted on success\n     * @custom:error MarketNotListed error is thrown when the market is not listed\n     * @custom:error BorrowActionNotPaused error is thrown if borrow action is not paused\n     * @custom:error MintActionNotPaused error is thrown if mint action is not paused\n     * @custom:error RedeemActionNotPaused error is thrown if redeem action is not paused\n     * @custom:error RepayActionNotPaused error is thrown if repay action is not paused\n     * @custom:error EnterMarketActionNotPaused error is thrown if enter market action is not paused\n     * @custom:error LiquidateActionNotPaused error is thrown if liquidate action is not paused\n     * @custom:error BorrowCapIsNotZero error is thrown if borrow cap is not zero\n     * @custom:error SupplyCapIsNotZero error is thrown if supply cap is not zero\n     * @custom:error CollateralFactorIsNotZero error is thrown if collateral factor is not zero\n     */\n    function unlistMarket(address market) external returns (uint256) {\n        _checkAccessAllowed(\"unlistMarket(address)\");\n\n        Market storage _market = markets[market];\n\n        if (!_market.isListed) {\n            revert MarketNotListed(market);\n        }\n\n        if (!actionPaused(market, Action.BORROW)) {\n            revert BorrowActionNotPaused();\n        }\n\n        if (!actionPaused(market, Action.MINT)) {\n            revert MintActionNotPaused();\n        }\n\n        if (!actionPaused(market, Action.REDEEM)) {\n            revert RedeemActionNotPaused();\n        }\n\n        if (!actionPaused(market, Action.REPAY)) {\n            revert RepayActionNotPaused();\n        }\n\n        if (!actionPaused(market, Action.SEIZE)) {\n            revert SeizeActionNotPaused();\n        }\n\n        if (!actionPaused(market, Action.ENTER_MARKET)) {\n            revert EnterMarketActionNotPaused();\n        }\n\n        if (!actionPaused(market, Action.LIQUIDATE)) {\n            revert LiquidateActionNotPaused();\n        }\n\n        if (!actionPaused(market, Action.TRANSFER)) {\n            revert TransferActionNotPaused();\n        }\n\n        if (!actionPaused(market, Action.EXIT_MARKET)) {\n            revert ExitMarketActionNotPaused();\n        }\n\n        if (borrowCaps[market] != 0) {\n            revert BorrowCapIsNotZero();\n        }\n\n        if (supplyCaps[market] != 0) {\n            revert SupplyCapIsNotZero();\n        }\n\n        if (_market.collateralFactorMantissa != 0) {\n            revert CollateralFactorIsNotZero();\n        }\n\n        _market.isListed = false;\n        emit MarketUnlisted(market);\n\n        return NO_ERROR;\n    }\n\n    /**\n     * @notice Grants or revokes the borrowing or redeeming delegate rights to / from an account\n     *  If allowed, the delegate will be able to borrow funds on behalf of the sender\n     *  Upon a delegated borrow, the delegate will receive the funds, and the borrower\n     *  will see the debt on their account\n     *  Upon a delegated redeem, the delegate will receive the redeemed amount and the approver\n     *  will see a deduction in his vToken balance\n     * @param delegate The address to update the rights for\n     * @param approved Whether to grant (true) or revoke (false) the borrowing or redeeming rights\n     * @custom:event DelegateUpdated emits on success\n     * @custom:error ZeroAddressNotAllowed is thrown when delegate address is zero\n     * @custom:error DelegationStatusUnchanged is thrown if approval status is already set to the requested value\n     * @custom:access Not restricted\n     */\n    function updateDelegate(address delegate, bool approved) external {\n        ensureNonzeroAddress(delegate);\n        if (approvedDelegates[msg.sender][delegate] == approved) {\n            revert DelegationStatusUnchanged();\n        }\n\n        approvedDelegates[msg.sender][delegate] = approved;\n        emit DelegateUpdated(msg.sender, delegate, approved);\n    }\n\n    /**\n     * @notice Removes asset from sender's account liquidity calculation; disabling them as collateral\n     * @dev Sender must not have an outstanding borrow balance in the asset,\n     *  or be providing necessary collateral for an outstanding borrow.\n     * @param vTokenAddress The address of the asset to be removed\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\n     * @custom:event MarketExited is emitted on success\n     * @custom:error ActionPaused error is thrown if exiting the market is paused\n     * @custom:error NonzeroBorrowBalance error is thrown if the user has an outstanding borrow in this market\n     * @custom:error MarketNotListed error is thrown when the market is not listed\n     * @custom:error InsufficientLiquidity error is thrown if exiting the market would lead to user's insolvency\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\n     * @custom:access Not restricted\n     */\n    function exitMarket(address vTokenAddress) external override returns (uint256) {\n        _checkActionPauseState(vTokenAddress, Action.EXIT_MARKET);\n        VToken vToken = VToken(vTokenAddress);\n        /* Get sender tokensHeld and amountOwed underlying from the vToken */\n        (uint256 tokensHeld, uint256 amountOwed, ) = _safeGetAccountSnapshot(vToken, msg.sender);\n\n        /* Fail if the sender has a borrow balance */\n        if (amountOwed != 0) {\n            revert NonzeroBorrowBalance();\n        }\n\n        /* Fail if the sender is not permitted to redeem all of their tokens */\n        _checkRedeemAllowed(vTokenAddress, msg.sender, tokensHeld);\n\n        Market storage marketToExit = markets[address(vToken)];\n\n        /* Return true if the sender is not already ‘in’ the market */\n        if (!marketToExit.accountMembership[msg.sender]) {\n            return NO_ERROR;\n        }\n\n        /* Set vToken account membership to false */\n        delete marketToExit.accountMembership[msg.sender];\n\n        /* Delete vToken from the account’s list of assets */\n        // load into memory for faster iteration\n        VToken[] memory userAssetList = accountAssets[msg.sender];\n        uint256 len = userAssetList.length;\n\n        uint256 assetIndex = len;\n        for (uint256 i; i < len; ++i) {\n            if (userAssetList[i] == vToken) {\n                assetIndex = i;\n                break;\n            }\n        }\n\n        // We *must* have found the asset in the list or our redundant data structure is broken\n        assert(assetIndex < len);\n\n        // copy last item in list to location of item to be removed, reduce length by 1\n        VToken[] storage storedList = accountAssets[msg.sender];\n        storedList[assetIndex] = storedList[storedList.length - 1];\n        storedList.pop();\n\n        emit MarketExited(vToken, msg.sender);\n\n        return NO_ERROR;\n    }\n\n    /*** Policy Hooks ***/\n\n    /**\n     * @notice Checks if the account should be allowed to mint tokens in the given market\n     * @param vToken The market to verify the mint against\n     * @param minter The account which would get the minted tokens\n     * @param mintAmount The amount of underlying being supplied to the market in exchange for tokens\n     * @custom:error ActionPaused error is thrown if supplying to this market is paused\n     * @custom:error MarketNotListed error is thrown when the market is not listed\n     * @custom:error SupplyCapExceeded error is thrown if the total supply exceeds the cap after minting\n     * @custom:access Not restricted\n     */\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external override {\n        _checkActionPauseState(vToken, Action.MINT);\n\n        if (!markets[vToken].isListed) {\n            revert MarketNotListed(address(vToken));\n        }\n\n        uint256 supplyCap = supplyCaps[vToken];\n        // Skipping the cap check for uncapped coins to save some gas\n        if (supplyCap != type(uint256).max) {\n            uint256 vTokenSupply = VToken(vToken).totalSupply();\n            Exp memory exchangeRate = Exp({ mantissa: VToken(vToken).exchangeRateStored() });\n            uint256 nextTotalSupply = mul_ScalarTruncateAddUInt(exchangeRate, vTokenSupply, mintAmount);\n            if (nextTotalSupply > supplyCap) {\n                revert SupplyCapExceeded(vToken, supplyCap);\n            }\n        }\n\n        // Keep the flywheel moving\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\n\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\n            rewardsDistributor.distributeSupplierRewardToken(vToken, minter);\n        }\n    }\n\n    /**\n     * @notice Validates mint, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\n     * @param vToken Asset being minted\n     * @param minter The address minting the tokens\n     * @param actualMintAmount The amount of the underlying asset being minted\n     * @param mintTokens The number of tokens being minted\n     */\n    // solhint-disable-next-line no-unused-vars\n    function mintVerify(address vToken, address minter, uint256 actualMintAmount, uint256 mintTokens) external {\n        if (address(prime) != address(0)) {\n            prime.accrueInterestAndUpdateScore(minter, vToken);\n        }\n    }\n\n    /**\n     * @notice Checks if the account should be allowed to redeem tokens in the given market\n     * @param vToken The market to verify the redeem against\n     * @param redeemer The account which would redeem the tokens\n     * @param redeemTokens The number of vTokens to exchange for the underlying asset in the market\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\n     * @custom:error MarketNotListed error is thrown when the market is not listed\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\n     * @custom:access Not restricted\n     */\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external override {\n        _checkActionPauseState(vToken, Action.REDEEM);\n\n        _checkRedeemAllowed(vToken, redeemer, redeemTokens);\n\n        // Keep the flywheel moving\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\n\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\n            rewardsDistributor.distributeSupplierRewardToken(vToken, redeemer);\n        }\n    }\n\n    /**\n     * @notice Validates redeem, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\n     * @param vToken Asset being redeemed\n     * @param redeemer The address redeeming the tokens\n     * @param redeemAmount The amount of the underlying asset being redeemed\n     * @param redeemTokens The number of tokens being redeemed\n     */\n    function redeemVerify(address vToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens) external {\n        if (address(prime) != address(0)) {\n            prime.accrueInterestAndUpdateScore(redeemer, vToken);\n        }\n    }\n\n    /**\n     * @notice Validates repayBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\n     * @param vToken Asset being repaid\n     * @param payer The address repaying the borrow\n     * @param borrower The address of the borrower\n     * @param actualRepayAmount The amount of underlying being repaid\n     */\n    function repayBorrowVerify(\n        address vToken,\n        address payer, // solhint-disable-line no-unused-vars\n        address borrower,\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\n        uint256 borrowerIndex // solhint-disable-line no-unused-vars\n    ) external {\n        if (address(prime) != address(0)) {\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\n        }\n    }\n\n    /**\n     * @notice Validates liquidateBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\n     * @param liquidator The address repaying the borrow and seizing the collateral\n     * @param borrower The address of the borrower\n     * @param actualRepayAmount The amount of underlying being repaid\n     * @param seizeTokens The amount of collateral token that will be seized\n     */\n    function liquidateBorrowVerify(\n        address vTokenBorrowed,\n        address vTokenCollateral, // solhint-disable-line no-unused-vars\n        address liquidator,\n        address borrower,\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\n    ) external {\n        if (address(prime) != address(0)) {\n            prime.accrueInterestAndUpdateScore(borrower, vTokenBorrowed);\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenBorrowed);\n        }\n    }\n\n    /**\n     * @notice Validates seize, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\n     * @param liquidator The address repaying the borrow and seizing the collateral\n     * @param borrower The address of the borrower\n     * @param seizeTokens The number of collateral tokens to seize\n     */\n    function seizeVerify(\n        address vTokenCollateral,\n        address vTokenBorrowed, // solhint-disable-line no-unused-vars\n        address liquidator,\n        address borrower,\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\n    ) external {\n        if (address(prime) != address(0)) {\n            prime.accrueInterestAndUpdateScore(borrower, vTokenCollateral);\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenCollateral);\n        }\n    }\n\n    /**\n     * @notice Validates transfer, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\n     * @param vToken Asset being transferred\n     * @param src The account which sources the tokens\n     * @param dst The account which receives the tokens\n     * @param transferTokens The number of vTokens to transfer\n     */\n    // solhint-disable-next-line no-unused-vars\n    function transferVerify(address vToken, address src, address dst, uint256 transferTokens) external {\n        if (address(prime) != address(0)) {\n            prime.accrueInterestAndUpdateScore(src, vToken);\n            prime.accrueInterestAndUpdateScore(dst, vToken);\n        }\n    }\n\n    /**\n     * @notice Checks if the account should be allowed to borrow the underlying asset of the given market\n     * @param vToken The market to verify the borrow against\n     * @param borrower The account which would borrow the asset\n     * @param borrowAmount The amount of underlying the account would borrow\n     * @custom:error ActionPaused error is thrown if borrowing is paused in this market\n     * @custom:error MarketNotListed error is thrown when the market is not listed\n     * @custom:error InsufficientLiquidity error is thrown if there is not enough collateral to borrow\n     * @custom:error BorrowCapExceeded is thrown if the borrow cap will be exceeded should this borrow succeed\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\n     * @custom:access Not restricted if vToken is enabled as collateral, otherwise only vToken\n     */\n    /// disable-eslint\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external override {\n        _checkActionPauseState(vToken, Action.BORROW);\n\n        if (!markets[vToken].isListed) {\n            revert MarketNotListed(address(vToken));\n        }\n\n        if (!markets[vToken].accountMembership[borrower]) {\n            // only vTokens may call borrowAllowed if borrower not in market\n            _checkSenderIs(vToken);\n\n            // attempt to add borrower to the market or revert\n            _addToMarket(VToken(msg.sender), borrower);\n        }\n\n        // Update the prices of tokens\n        updatePrices(borrower);\n\n        if (oracle.getUnderlyingPrice(vToken) == 0) {\n            revert PriceError(address(vToken));\n        }\n\n        uint256 borrowCap = borrowCaps[vToken];\n        // Skipping the cap check for uncapped coins to save some gas\n        if (borrowCap != type(uint256).max) {\n            uint256 totalBorrows = VToken(vToken).totalBorrows();\n            uint256 badDebt = VToken(vToken).badDebt();\n            uint256 nextTotalBorrows = totalBorrows + borrowAmount + badDebt;\n            if (nextTotalBorrows > borrowCap) {\n                revert BorrowCapExceeded(vToken, borrowCap);\n            }\n        }\n\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\n            borrower,\n            VToken(vToken),\n            0,\n            borrowAmount,\n            _getCollateralFactor\n        );\n\n        if (snapshot.shortfall > 0) {\n            revert InsufficientLiquidity();\n        }\n\n        Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\n\n        // Keep the flywheel moving\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\n\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\n        }\n    }\n\n    /**\n     * @notice Validates borrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\n     * @param vToken Asset whose underlying is being borrowed\n     * @param borrower The address borrowing the underlying\n     * @param borrowAmount The amount of the underlying asset requested to borrow\n     */\n    // solhint-disable-next-line no-unused-vars\n    function borrowVerify(address vToken, address borrower, uint256 borrowAmount) external {\n        if (address(prime) != address(0)) {\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\n        }\n    }\n\n    /**\n     * @notice Checks if the account should be allowed to repay a borrow in the given market\n     * @param vToken The market to verify the repay against\n     * @param borrower The account which would borrowed the asset\n     * @custom:error ActionPaused error is thrown if repayments are paused in this market\n     * @custom:error MarketNotListed error is thrown when the market is not listed\n     * @custom:access Not restricted\n     */\n    function preRepayHook(address vToken, address borrower) external override {\n        _checkActionPauseState(vToken, Action.REPAY);\n\n        oracle.updatePrice(vToken);\n\n        if (!markets[vToken].isListed) {\n            revert MarketNotListed(address(vToken));\n        }\n\n        // Keep the flywheel moving\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\n\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\n            Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\n        }\n    }\n\n    /**\n     * @notice Checks if the liquidation should be allowed to occur\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\n     * @param borrower The address of the borrower\n     * @param repayAmount The amount of underlying being repaid\n     * @param skipLiquidityCheck Allows the borrow to be liquidated regardless of the account liquidity\n     * @custom:error ActionPaused error is thrown if liquidations are paused in this market\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\n     * @custom:error TooMuchRepay error is thrown if the liquidator is trying to repay more than allowed by close factor\n     * @custom:error MinimalCollateralViolated is thrown if the users' total collateral is lower than the threshold for non-batch liquidations\n     * @custom:error InsufficientShortfall is thrown when trying to liquidate a healthy account\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\n     */\n    function preLiquidateHook(\n        address vTokenBorrowed,\n        address vTokenCollateral,\n        address borrower,\n        uint256 repayAmount,\n        bool skipLiquidityCheck\n    ) external override {\n        // Pause Action.LIQUIDATE on BORROWED TOKEN to prevent liquidating it.\n        // If we want to pause liquidating to vTokenCollateral, we should pause\n        // Action.SEIZE on it\n        _checkActionPauseState(vTokenBorrowed, Action.LIQUIDATE);\n\n        // Update the prices of tokens\n        updatePrices(borrower);\n\n        if (!markets[vTokenBorrowed].isListed) {\n            revert MarketNotListed(address(vTokenBorrowed));\n        }\n        if (!markets[vTokenCollateral].isListed) {\n            revert MarketNotListed(address(vTokenCollateral));\n        }\n\n        uint256 borrowBalance = VToken(vTokenBorrowed).borrowBalanceStored(borrower);\n\n        /* Allow accounts to be liquidated if it is a forced liquidation */\n        if (skipLiquidityCheck || isForcedLiquidationEnabled[vTokenBorrowed]) {\n            if (repayAmount > borrowBalance) {\n                revert TooMuchRepay();\n            }\n            return;\n        }\n\n        /* The borrower must have shortfall and collateral > threshold in order to be liquidatable */\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\n\n        if (snapshot.totalCollateral <= minLiquidatableCollateral) {\n            /* The liquidator should use either liquidateAccount or healAccount */\n            revert MinimalCollateralViolated(minLiquidatableCollateral, snapshot.totalCollateral);\n        }\n\n        if (snapshot.shortfall == 0) {\n            revert InsufficientShortfall();\n        }\n\n        /* The liquidator may not repay more than what is allowed by the closeFactor */\n        uint256 maxClose = mul_ScalarTruncate(Exp({ mantissa: closeFactorMantissa }), borrowBalance);\n        if (repayAmount > maxClose) {\n            revert TooMuchRepay();\n        }\n    }\n\n    /**\n     * @notice Checks if the seizing of assets should be allowed to occur\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\n     * @param seizerContract Contract that tries to seize the asset (either borrowed vToken or Comptroller)\n     * @param liquidator The address repaying the borrow and seizing the collateral\n     * @param borrower The address of the borrower\n     * @custom:error ActionPaused error is thrown if seizing this type of collateral is paused\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\n     * @custom:error ComptrollerMismatch error is when seizer contract or seized asset belong to different pools\n     * @custom:access Not restricted\n     */\n    function preSeizeHook(\n        address vTokenCollateral,\n        address seizerContract,\n        address liquidator,\n        address borrower\n    ) external override {\n        // Pause Action.SEIZE on COLLATERAL to prevent seizing it.\n        // If we want to pause liquidating vTokenBorrowed, we should pause\n        // Action.LIQUIDATE on it\n        _checkActionPauseState(vTokenCollateral, Action.SEIZE);\n\n        Market storage market = markets[vTokenCollateral];\n\n        if (!market.isListed) {\n            revert MarketNotListed(vTokenCollateral);\n        }\n\n        if (seizerContract == address(this)) {\n            // If Comptroller is the seizer, just check if collateral's comptroller\n            // is equal to the current address\n            if (address(VToken(vTokenCollateral).comptroller()) != address(this)) {\n                revert ComptrollerMismatch();\n            }\n        } else {\n            // If the seizer is not the Comptroller, check that the seizer is a\n            // listed market, and that the markets' comptrollers match\n            if (!markets[seizerContract].isListed) {\n                revert MarketNotListed(seizerContract);\n            }\n            if (VToken(vTokenCollateral).comptroller() != VToken(seizerContract).comptroller()) {\n                revert ComptrollerMismatch();\n            }\n        }\n\n        if (!market.accountMembership[borrower]) {\n            revert MarketNotCollateral(vTokenCollateral, borrower);\n        }\n\n        // Keep the flywheel moving\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\n\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\n            rewardsDistributor.updateRewardTokenSupplyIndex(vTokenCollateral);\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, borrower);\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, liquidator);\n        }\n    }\n\n    /**\n     * @notice Checks if the account should be allowed to transfer tokens in the given market\n     * @param vToken The market to verify the transfer against\n     * @param src The account which sources the tokens\n     * @param dst The account which receives the tokens\n     * @param transferTokens The number of vTokens to transfer\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\n     * @custom:error MarketNotListed error is thrown when the market is not listed\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\n     * @custom:access Not restricted\n     */\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external override {\n        _checkActionPauseState(vToken, Action.TRANSFER);\n\n        // Currently the only consideration is whether or not\n        //  the src is allowed to redeem this many tokens\n        _checkRedeemAllowed(vToken, src, transferTokens);\n\n        // Keep the flywheel moving\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\n\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\n            rewardsDistributor.distributeSupplierRewardToken(vToken, src);\n            rewardsDistributor.distributeSupplierRewardToken(vToken, dst);\n        }\n    }\n\n    /*** Pool-level operations ***/\n\n    /**\n     * @notice Seizes all the remaining collateral, makes msg.sender repay the existing\n     *   borrows, and treats the rest of the debt as bad debt (for each market).\n     *   The sender has to repay a certain percentage of the debt, computed as\n     *   collateral / (borrows * liquidationIncentive).\n     * @param user account to heal\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for healing\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\n     * @custom:access Not restricted\n     */\n    function healAccount(address user) external {\n        VToken[] memory userAssets = getAssetsIn(user);\n        uint256 userAssetsCount = userAssets.length;\n\n        address liquidator = msg.sender;\n        {\n            ResilientOracleInterface oracle_ = oracle;\n            // We need all user's markets to be fresh for the computations to be correct\n            for (uint256 i; i < userAssetsCount; ++i) {\n                userAssets[i].accrueInterest();\n                oracle_.updatePrice(address(userAssets[i]));\n            }\n        }\n\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(user, _getLiquidationThreshold);\n\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\n        }\n\n        if (snapshot.shortfall == 0) {\n            revert InsufficientShortfall();\n        }\n\n        // percentage = collateral / (borrows * liquidation incentive)\n        Exp memory collateral = Exp({ mantissa: snapshot.totalCollateral });\n        Exp memory scaledBorrows = mul_(\n            Exp({ mantissa: snapshot.borrows }),\n            Exp({ mantissa: liquidationIncentiveMantissa })\n        );\n\n        Exp memory percentage = div_(collateral, scaledBorrows);\n        if (lessThanExp(Exp({ mantissa: MANTISSA_ONE }), percentage)) {\n            revert CollateralExceedsThreshold(scaledBorrows.mantissa, collateral.mantissa);\n        }\n\n        for (uint256 i; i < userAssetsCount; ++i) {\n            VToken market = userAssets[i];\n\n            (uint256 tokens, uint256 borrowBalance, ) = _safeGetAccountSnapshot(market, user);\n            uint256 repaymentAmount = mul_ScalarTruncate(percentage, borrowBalance);\n\n            // Seize the entire collateral\n            if (tokens != 0) {\n                market.seize(liquidator, user, tokens);\n            }\n            // Repay a certain percentage of the borrow, forgive the rest\n            if (borrowBalance != 0) {\n                market.healBorrow(liquidator, user, repaymentAmount);\n            }\n        }\n    }\n\n    /**\n     * @notice Liquidates all borrows of the borrower. Callable only if the collateral is less than\n     *   a predefined threshold, and the account collateral can be seized to cover all borrows. If\n     *   the collateral is higher than the threshold, use regular liquidations. If the collateral is\n     *   below the threshold, and the account is insolvent, use healAccount.\n     * @param borrower the borrower address\n     * @param orders an array of liquidation orders\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for a batch liquidation\n     * @custom:error InsufficientCollateral error is thrown when there is not enough collateral to cover the debt\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\n     * @custom:access Not restricted\n     */\n    function liquidateAccount(address borrower, LiquidationOrder[] calldata orders) external {\n        // We will accrue interest and update the oracle prices later during the liquidation\n\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\n\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\n            // You should use the regular vToken.liquidateBorrow(...) call\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\n        }\n\n        uint256 collateralToSeize = mul_ScalarTruncate(\n            Exp({ mantissa: liquidationIncentiveMantissa }),\n            snapshot.borrows\n        );\n        if (collateralToSeize >= snapshot.totalCollateral) {\n            // There is not enough collateral to seize. Use healBorrow to repay some part of the borrow\n            // and record bad debt.\n            revert InsufficientCollateral(collateralToSeize, snapshot.totalCollateral);\n        }\n\n        if (snapshot.shortfall == 0) {\n            revert InsufficientShortfall();\n        }\n\n        uint256 ordersCount = orders.length;\n\n        _ensureMaxLoops(ordersCount / 2);\n\n        for (uint256 i; i < ordersCount; ++i) {\n            if (!markets[address(orders[i].vTokenBorrowed)].isListed) {\n                revert MarketNotListed(address(orders[i].vTokenBorrowed));\n            }\n            if (!markets[address(orders[i].vTokenCollateral)].isListed) {\n                revert MarketNotListed(address(orders[i].vTokenCollateral));\n            }\n\n            LiquidationOrder calldata order = orders[i];\n            order.vTokenBorrowed.forceLiquidateBorrow(\n                msg.sender,\n                borrower,\n                order.repayAmount,\n                order.vTokenCollateral,\n                true\n            );\n        }\n\n        VToken[] memory borrowMarkets = getAssetsIn(borrower);\n        uint256 marketsCount = borrowMarkets.length;\n\n        for (uint256 i; i < marketsCount; ++i) {\n            (, uint256 borrowBalance, ) = _safeGetAccountSnapshot(borrowMarkets[i], borrower);\n            require(borrowBalance == 0, \"Nonzero borrow balance after liquidation\");\n        }\n    }\n\n    /**\n     * @notice Sets the closeFactor to use when liquidating borrows\n     * @param newCloseFactorMantissa New close factor, scaled by 1e18\n     * @custom:event Emits NewCloseFactor on success\n     * @custom:access Controlled by AccessControlManager\n     */\n    function setCloseFactor(uint256 newCloseFactorMantissa) external {\n        _checkAccessAllowed(\"setCloseFactor(uint256)\");\n        require(MAX_CLOSE_FACTOR_MANTISSA >= newCloseFactorMantissa, \"Close factor greater than maximum close factor\");\n        require(MIN_CLOSE_FACTOR_MANTISSA <= newCloseFactorMantissa, \"Close factor smaller than minimum close factor\");\n\n        uint256 oldCloseFactorMantissa = closeFactorMantissa;\n        closeFactorMantissa = newCloseFactorMantissa;\n        emit NewCloseFactor(oldCloseFactorMantissa, newCloseFactorMantissa);\n    }\n\n    /**\n     * @notice Sets the collateralFactor for a market\n     * @dev This function is restricted by the AccessControlManager\n     * @param vToken The market to set the factor on\n     * @param newCollateralFactorMantissa The new collateral factor, scaled by 1e18\n     * @param newLiquidationThresholdMantissa The new liquidation threshold, scaled by 1e18\n     * @custom:event Emits NewCollateralFactor when collateral factor is updated\n     *    and NewLiquidationThreshold when liquidation threshold is updated\n     * @custom:error MarketNotListed error is thrown when the market is not listed\n     * @custom:error InvalidCollateralFactor error is thrown when collateral factor is too high\n     * @custom:error InvalidLiquidationThreshold error is thrown when liquidation threshold is lower than collateral factor\n     * @custom:error PriceError is thrown when the oracle returns an invalid price for the asset\n     * @custom:access Controlled by AccessControlManager\n     */\n    function setCollateralFactor(\n        VToken vToken,\n        uint256 newCollateralFactorMantissa,\n        uint256 newLiquidationThresholdMantissa\n    ) external {\n        _checkAccessAllowed(\"setCollateralFactor(address,uint256,uint256)\");\n\n        // Verify market is listed\n        Market storage market = markets[address(vToken)];\n        if (!market.isListed) {\n            revert MarketNotListed(address(vToken));\n        }\n\n        // Check collateral factor <= 0.9\n        if (newCollateralFactorMantissa > MAX_COLLATERAL_FACTOR_MANTISSA) {\n            revert InvalidCollateralFactor();\n        }\n\n        // Ensure that liquidation threshold <= 1\n        if (newLiquidationThresholdMantissa > MANTISSA_ONE) {\n            revert InvalidLiquidationThreshold();\n        }\n\n        // Ensure that liquidation threshold >= CF\n        if (newLiquidationThresholdMantissa < newCollateralFactorMantissa) {\n            revert InvalidLiquidationThreshold();\n        }\n\n        // If collateral factor != 0, fail if price == 0\n        if (newCollateralFactorMantissa != 0 && oracle.getUnderlyingPrice(address(vToken)) == 0) {\n            revert PriceError(address(vToken));\n        }\n\n        uint256 oldCollateralFactorMantissa = market.collateralFactorMantissa;\n        if (newCollateralFactorMantissa != oldCollateralFactorMantissa) {\n            market.collateralFactorMantissa = newCollateralFactorMantissa;\n            emit NewCollateralFactor(vToken, oldCollateralFactorMantissa, newCollateralFactorMantissa);\n        }\n\n        uint256 oldLiquidationThresholdMantissa = market.liquidationThresholdMantissa;\n        if (newLiquidationThresholdMantissa != oldLiquidationThresholdMantissa) {\n            market.liquidationThresholdMantissa = newLiquidationThresholdMantissa;\n            emit NewLiquidationThreshold(vToken, oldLiquidationThresholdMantissa, newLiquidationThresholdMantissa);\n        }\n    }\n\n    /**\n     * @notice Sets liquidationIncentive\n     * @dev This function is restricted by the AccessControlManager\n     * @param newLiquidationIncentiveMantissa New liquidationIncentive scaled by 1e18\n     * @custom:event Emits NewLiquidationIncentive on success\n     * @custom:access Controlled by AccessControlManager\n     */\n    function setLiquidationIncentive(uint256 newLiquidationIncentiveMantissa) external {\n        require(newLiquidationIncentiveMantissa >= MANTISSA_ONE, \"liquidation incentive should be greater than 1e18\");\n\n        _checkAccessAllowed(\"setLiquidationIncentive(uint256)\");\n\n        // Save current value for use in log\n        uint256 oldLiquidationIncentiveMantissa = liquidationIncentiveMantissa;\n\n        // Set liquidation incentive to new incentive\n        liquidationIncentiveMantissa = newLiquidationIncentiveMantissa;\n\n        // Emit event with old incentive, new incentive\n        emit NewLiquidationIncentive(oldLiquidationIncentiveMantissa, newLiquidationIncentiveMantissa);\n    }\n\n    /**\n     * @notice Add the market to the markets mapping and set it as listed\n     * @dev Only callable by the PoolRegistry\n     * @param vToken The address of the market (token) to list\n     * @custom:error MarketAlreadyListed is thrown if the market is already listed in this pool\n     * @custom:access Only PoolRegistry\n     */\n    function supportMarket(VToken vToken) external {\n        _checkSenderIs(poolRegistry);\n\n        if (markets[address(vToken)].isListed) {\n            revert MarketAlreadyListed(address(vToken));\n        }\n\n        require(vToken.isVToken(), \"Comptroller: Invalid vToken\"); // Sanity check to make sure its really a VToken\n\n        Market storage newMarket = markets[address(vToken)];\n        newMarket.isListed = true;\n        newMarket.collateralFactorMantissa = 0;\n        newMarket.liquidationThresholdMantissa = 0;\n\n        _addMarket(address(vToken));\n\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\n\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\n            rewardsDistributors[i].initializeMarket(address(vToken));\n        }\n\n        emit MarketSupported(vToken);\n    }\n\n    /**\n     * @notice Set the given borrow caps for the given vToken markets. Borrowing that brings total borrows to or above borrow cap will revert.\n     * @dev This function is restricted by the AccessControlManager\n     * @dev A borrow cap of type(uint256).max corresponds to unlimited borrowing.\n     * @dev Borrow caps smaller than the current total borrows are accepted. This way, new borrows will not be allowed\n            until the total borrows amount goes below the new borrow cap\n     * @param vTokens The addresses of the markets (tokens) to change the borrow caps for\n     * @param newBorrowCaps The new borrow cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited borrowing.\n     * @custom:access Controlled by AccessControlManager\n     */\n    function setMarketBorrowCaps(VToken[] calldata vTokens, uint256[] calldata newBorrowCaps) external {\n        _checkAccessAllowed(\"setMarketBorrowCaps(address[],uint256[])\");\n\n        uint256 numMarkets = vTokens.length;\n        uint256 numBorrowCaps = newBorrowCaps.length;\n\n        require(numMarkets != 0 && numMarkets == numBorrowCaps, \"invalid input\");\n\n        _ensureMaxLoops(numMarkets);\n\n        for (uint256 i; i < numMarkets; ++i) {\n            borrowCaps[address(vTokens[i])] = newBorrowCaps[i];\n            emit NewBorrowCap(vTokens[i], newBorrowCaps[i]);\n        }\n    }\n\n    /**\n     * @notice Set the given supply caps for the given vToken markets. Supply that brings total Supply to or above supply cap will revert.\n     * @dev This function is restricted by the AccessControlManager\n     * @dev A supply cap of type(uint256).max corresponds to unlimited supply.\n     * @dev Supply caps smaller than the current total supplies are accepted. This way, new supplies will not be allowed\n            until the total supplies amount goes below the new supply cap\n     * @param vTokens The addresses of the markets (tokens) to change the supply caps for\n     * @param newSupplyCaps The new supply cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited supply.\n     * @custom:access Controlled by AccessControlManager\n     */\n    function setMarketSupplyCaps(VToken[] calldata vTokens, uint256[] calldata newSupplyCaps) external {\n        _checkAccessAllowed(\"setMarketSupplyCaps(address[],uint256[])\");\n        uint256 vTokensCount = vTokens.length;\n\n        require(vTokensCount != 0, \"invalid number of markets\");\n        require(vTokensCount == newSupplyCaps.length, \"invalid number of markets\");\n\n        _ensureMaxLoops(vTokensCount);\n\n        for (uint256 i; i < vTokensCount; ++i) {\n            supplyCaps[address(vTokens[i])] = newSupplyCaps[i];\n            emit NewSupplyCap(vTokens[i], newSupplyCaps[i]);\n        }\n    }\n\n    /**\n     * @notice Pause/unpause specified actions\n     * @dev This function is restricted by the AccessControlManager\n     * @param marketsList Markets to pause/unpause the actions on\n     * @param actionsList List of action ids to pause/unpause\n     * @param paused The new paused state (true=paused, false=unpaused)\n     * @custom:access Controlled by AccessControlManager\n     */\n    function setActionsPaused(VToken[] calldata marketsList, Action[] calldata actionsList, bool paused) external {\n        _checkAccessAllowed(\"setActionsPaused(address[],uint256[],bool)\");\n\n        uint256 marketsCount = marketsList.length;\n        uint256 actionsCount = actionsList.length;\n\n        _ensureMaxLoops(marketsCount * actionsCount);\n\n        for (uint256 marketIdx; marketIdx < marketsCount; ++marketIdx) {\n            for (uint256 actionIdx; actionIdx < actionsCount; ++actionIdx) {\n                _setActionPaused(address(marketsList[marketIdx]), actionsList[actionIdx], paused);\n            }\n        }\n    }\n\n    /**\n     * @notice Set the given collateral threshold for non-batch liquidations. Regular liquidations\n     *   will fail if the collateral amount is less than this threshold. Liquidators should use batch\n     *   operations like liquidateAccount or healAccount.\n     * @dev This function is restricted by the AccessControlManager\n     * @param newMinLiquidatableCollateral The new min liquidatable collateral (in USD).\n     * @custom:access Controlled by AccessControlManager\n     */\n    function setMinLiquidatableCollateral(uint256 newMinLiquidatableCollateral) external {\n        _checkAccessAllowed(\"setMinLiquidatableCollateral(uint256)\");\n\n        uint256 oldMinLiquidatableCollateral = minLiquidatableCollateral;\n        minLiquidatableCollateral = newMinLiquidatableCollateral;\n        emit NewMinLiquidatableCollateral(oldMinLiquidatableCollateral, newMinLiquidatableCollateral);\n    }\n\n    /**\n     * @notice Add a new RewardsDistributor and initialize it with all markets. We can add several RewardsDistributor\n     * contracts with the same rewardToken, and there could be overlaping among them considering the last reward slot (block or second)\n     * @dev Only callable by the admin\n     * @param _rewardsDistributor Address of the RewardDistributor contract to add\n     * @custom:access Only Governance\n     * @custom:event Emits NewRewardsDistributor with distributor address\n     */\n    function addRewardsDistributor(RewardsDistributor _rewardsDistributor) external onlyOwner {\n        require(!rewardsDistributorExists[address(_rewardsDistributor)], \"already exists\");\n\n        uint256 rewardsDistributorsLen = rewardsDistributors.length;\n        _ensureMaxLoops(rewardsDistributorsLen + 1);\n\n        rewardsDistributors.push(_rewardsDistributor);\n        rewardsDistributorExists[address(_rewardsDistributor)] = true;\n\n        uint256 marketsCount = allMarkets.length;\n\n        for (uint256 i; i < marketsCount; ++i) {\n            _rewardsDistributor.initializeMarket(address(allMarkets[i]));\n        }\n\n        emit NewRewardsDistributor(address(_rewardsDistributor), address(_rewardsDistributor.rewardToken()));\n    }\n\n    /**\n     * @notice Sets a new price oracle for the Comptroller\n     * @dev Only callable by the admin\n     * @param newOracle Address of the new price oracle to set\n     * @custom:event Emits NewPriceOracle on success\n     * @custom:error ZeroAddressNotAllowed is thrown when the new oracle address is zero\n     */\n    function setPriceOracle(ResilientOracleInterface newOracle) external onlyOwner {\n        ensureNonzeroAddress(address(newOracle));\n\n        ResilientOracleInterface oldOracle = oracle;\n        oracle = newOracle;\n        emit NewPriceOracle(oldOracle, newOracle);\n    }\n\n    /**\n     * @notice Set the for loop iteration limit to avoid DOS\n     * @param limit Limit for the max loops can execute at a time\n     */\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\n        _setMaxLoopsLimit(limit);\n    }\n\n    /**\n     * @notice Sets the prime token contract for the comptroller\n     * @param _prime Address of the Prime contract\n     */\n    function setPrimeToken(IPrime _prime) external onlyOwner {\n        ensureNonzeroAddress(address(_prime));\n\n        emit NewPrimeToken(prime, _prime);\n        prime = _prime;\n    }\n\n    /**\n     * @notice Enables forced liquidations for a market. If forced liquidation is enabled,\n     * borrows in the market may be liquidated regardless of the account liquidity\n     * @param vTokenBorrowed Borrowed vToken\n     * @param enable Whether to enable forced liquidations\n     */\n    function setForcedLiquidation(address vTokenBorrowed, bool enable) external {\n        _checkAccessAllowed(\"setForcedLiquidation(address,bool)\");\n        ensureNonzeroAddress(vTokenBorrowed);\n\n        if (!markets[vTokenBorrowed].isListed) {\n            revert MarketNotListed(vTokenBorrowed);\n        }\n\n        isForcedLiquidationEnabled[vTokenBorrowed] = enable;\n        emit IsForcedLiquidationEnabledUpdated(vTokenBorrowed, enable);\n    }\n\n    /**\n     * @notice Determine the current account liquidity with respect to liquidation threshold requirements\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\n     * @param account The account get liquidity for\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\n     * @return liquidity Account liquidity in excess of liquidation threshold requirements,\n     * @return shortfall Account shortfall below liquidation threshold requirements\n     */\n    function getAccountLiquidity(\n        address account\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getLiquidationThreshold);\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\n    }\n\n    /**\n     * @notice Determine the current account liquidity with respect to collateral requirements\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\n     * @param account The account get liquidity for\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\n     * @return liquidity Account liquidity in excess of collateral requirements,\n     * @return shortfall Account shortfall below collateral requirements\n     */\n    function getBorrowingPower(\n        address account\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getCollateralFactor);\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\n    }\n\n    /**\n     * @notice Determine what the account liquidity would be if the given amounts were redeemed/borrowed\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\n     * @param vTokenModify The market to hypothetically redeem/borrow in\n     * @param account The account to determine liquidity for\n     * @param redeemTokens The number of tokens to hypothetically redeem\n     * @param borrowAmount The amount of underlying to hypothetically borrow\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\n     * @return liquidity Hypothetical account liquidity in excess of collateral requirements,\n     * @return shortfall Hypothetical account shortfall below collateral requirements\n     */\n    function getHypotheticalAccountLiquidity(\n        address account,\n        address vTokenModify,\n        uint256 redeemTokens,\n        uint256 borrowAmount\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\n            account,\n            VToken(vTokenModify),\n            redeemTokens,\n            borrowAmount,\n            _getCollateralFactor\n        );\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\n    }\n\n    /**\n     * @notice Return all of the markets\n     * @dev The automatic getter may be used to access an individual market.\n     * @return markets The list of market addresses\n     */\n    function getAllMarkets() external view override returns (VToken[] memory) {\n        return allMarkets;\n    }\n\n    /**\n     * @notice Check if a market is marked as listed (active)\n     * @param vToken vToken Address for the market to check\n     * @return listed True if listed otherwise false\n     */\n    function isMarketListed(VToken vToken) external view returns (bool) {\n        return markets[address(vToken)].isListed;\n    }\n\n    /*** Assets You Are In ***/\n\n    /**\n     * @notice Returns whether the given account is entered in a given market\n     * @param account The address of the account to check\n     * @param vToken The vToken to check\n     * @return True if the account is in the market specified, otherwise false.\n     */\n    function checkMembership(address account, VToken vToken) external view returns (bool) {\n        return markets[address(vToken)].accountMembership[account];\n    }\n\n    /**\n     * @notice Calculate number of tokens of collateral asset to seize given an underlying amount\n     * @dev Used in liquidation (called in vToken.liquidateBorrowFresh)\n     * @param vTokenBorrowed The address of the borrowed vToken\n     * @param vTokenCollateral The address of the collateral vToken\n     * @param actualRepayAmount The amount of vTokenBorrowed underlying to convert into vTokenCollateral tokens\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\n     * @return tokensToSeize Number of vTokenCollateral tokens to be seized in a liquidation\n     * @custom:error PriceError if the oracle returns an invalid price\n     */\n    function liquidateCalculateSeizeTokens(\n        address vTokenBorrowed,\n        address vTokenCollateral,\n        uint256 actualRepayAmount\n    ) external view override returns (uint256 error, uint256 tokensToSeize) {\n        /* Read oracle prices for borrowed and collateral markets */\n        uint256 priceBorrowedMantissa = _safeGetUnderlyingPrice(VToken(vTokenBorrowed));\n        uint256 priceCollateralMantissa = _safeGetUnderlyingPrice(VToken(vTokenCollateral));\n\n        /*\n         * Get the exchange rate and calculate the number of collateral tokens to seize:\n         *  seizeAmount = actualRepayAmount * liquidationIncentive * priceBorrowed / priceCollateral\n         *  seizeTokens = seizeAmount / exchangeRate\n         *   = actualRepayAmount * (liquidationIncentive * priceBorrowed) / (priceCollateral * exchangeRate)\n         */\n        uint256 exchangeRateMantissa = VToken(vTokenCollateral).exchangeRateStored(); // Note: reverts on error\n        uint256 seizeTokens;\n        Exp memory numerator;\n        Exp memory denominator;\n        Exp memory ratio;\n\n        numerator = mul_(Exp({ mantissa: liquidationIncentiveMantissa }), Exp({ mantissa: priceBorrowedMantissa }));\n        denominator = mul_(Exp({ mantissa: priceCollateralMantissa }), Exp({ mantissa: exchangeRateMantissa }));\n        ratio = div_(numerator, denominator);\n\n        seizeTokens = mul_ScalarTruncate(ratio, actualRepayAmount);\n\n        return (NO_ERROR, seizeTokens);\n    }\n\n    /**\n     * @notice Returns reward speed given a vToken\n     * @param vToken The vToken to get the reward speeds for\n     * @return rewardSpeeds Array of total supply and borrow speeds and reward token for all reward distributors\n     */\n    function getRewardsByMarket(address vToken) external view returns (RewardSpeeds[] memory rewardSpeeds) {\n        uint256 rewardsDistributorsLength = rewardsDistributors.length;\n        rewardSpeeds = new RewardSpeeds[](rewardsDistributorsLength);\n        for (uint256 i; i < rewardsDistributorsLength; ++i) {\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\n            address rewardToken = address(rewardsDistributor.rewardToken());\n            rewardSpeeds[i] = RewardSpeeds({\n                rewardToken: rewardToken,\n                supplySpeed: rewardsDistributor.rewardTokenSupplySpeeds(vToken),\n                borrowSpeed: rewardsDistributor.rewardTokenBorrowSpeeds(vToken)\n            });\n        }\n        return rewardSpeeds;\n    }\n\n    /**\n     * @notice Return all reward distributors for this pool\n     * @return Array of RewardDistributor addresses\n     */\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory) {\n        return rewardsDistributors;\n    }\n\n    /**\n     * @notice A marker method that returns true for a valid Comptroller contract\n     * @return Always true\n     */\n    function isComptroller() external pure override returns (bool) {\n        return true;\n    }\n\n    /**\n     * @notice Update the prices of all the tokens associated with the provided account\n     * @param account Address of the account to get associated tokens with\n     */\n    function updatePrices(address account) public {\n        VToken[] memory vTokens = getAssetsIn(account);\n        uint256 vTokensCount = vTokens.length;\n\n        ResilientOracleInterface oracle_ = oracle;\n\n        for (uint256 i; i < vTokensCount; ++i) {\n            oracle_.updatePrice(address(vTokens[i]));\n        }\n    }\n\n    /**\n     * @notice Checks if a certain action is paused on a market\n     * @param market vToken address\n     * @param action Action to check\n     * @return paused True if the action is paused otherwise false\n     */\n    function actionPaused(address market, Action action) public view returns (bool) {\n        return _actionPaused[market][action];\n    }\n\n    /**\n     * @notice Returns the assets an account has entered\n     * @param account The address of the account to pull assets for\n     * @return A list with the assets the account has entered\n     */\n    function getAssetsIn(address account) public view returns (VToken[] memory) {\n        uint256 len;\n        VToken[] memory _accountAssets = accountAssets[account];\n        uint256 _accountAssetsLength = _accountAssets.length;\n\n        VToken[] memory assetsIn = new VToken[](_accountAssetsLength);\n\n        for (uint256 i; i < _accountAssetsLength; ++i) {\n            Market storage market = markets[address(_accountAssets[i])];\n            if (market.isListed) {\n                assetsIn[len] = _accountAssets[i];\n                ++len;\n            }\n        }\n\n        assembly {\n            mstore(assetsIn, len)\n        }\n\n        return assetsIn;\n    }\n\n    /**\n     * @notice Add the market to the borrower's \"assets in\" for liquidity calculations\n     * @param vToken The market to enter\n     * @param borrower The address of the account to modify\n     */\n    function _addToMarket(VToken vToken, address borrower) internal {\n        _checkActionPauseState(address(vToken), Action.ENTER_MARKET);\n        Market storage marketToJoin = markets[address(vToken)];\n\n        if (!marketToJoin.isListed) {\n            revert MarketNotListed(address(vToken));\n        }\n\n        if (marketToJoin.accountMembership[borrower]) {\n            // already joined\n            return;\n        }\n\n        // survived the gauntlet, add to list\n        // NOTE: we store these somewhat redundantly as a significant optimization\n        //  this avoids having to iterate through the list for the most common use cases\n        //  that is, only when we need to perform liquidity checks\n        //  and not whenever we want to check if an account is in a particular market\n        marketToJoin.accountMembership[borrower] = true;\n        accountAssets[borrower].push(vToken);\n\n        emit MarketEntered(vToken, borrower);\n    }\n\n    /**\n     * @notice Internal function to validate that a market hasn't already been added\n     * and if it hasn't adds it\n     * @param vToken The market to support\n     */\n    function _addMarket(address vToken) internal {\n        uint256 marketsCount = allMarkets.length;\n\n        for (uint256 i; i < marketsCount; ++i) {\n            if (allMarkets[i] == VToken(vToken)) {\n                revert MarketAlreadyListed(vToken);\n            }\n        }\n        allMarkets.push(VToken(vToken));\n        marketsCount = allMarkets.length;\n        _ensureMaxLoops(marketsCount);\n    }\n\n    /**\n     * @dev Pause/unpause an action on a market\n     * @param market Market to pause/unpause the action on\n     * @param action Action id to pause/unpause\n     * @param paused The new paused state (true=paused, false=unpaused)\n     */\n    function _setActionPaused(address market, Action action, bool paused) internal {\n        require(markets[market].isListed, \"cannot pause a market that is not listed\");\n        _actionPaused[market][action] = paused;\n        emit ActionPausedMarket(VToken(market), action, paused);\n    }\n\n    /**\n     * @dev Internal function to check that vTokens can be safely redeemed for the underlying asset.\n     * @param vToken Address of the vTokens to redeem\n     * @param redeemer Account redeeming the tokens\n     * @param redeemTokens The number of tokens to redeem\n     */\n    function _checkRedeemAllowed(address vToken, address redeemer, uint256 redeemTokens) internal {\n        Market storage market = markets[vToken];\n\n        if (!market.isListed) {\n            revert MarketNotListed(address(vToken));\n        }\n\n        /* If the redeemer is not 'in' the market, then we can bypass the liquidity check */\n        if (!market.accountMembership[redeemer]) {\n            return;\n        }\n\n        // Update the prices of tokens\n        updatePrices(redeemer);\n\n        /* Otherwise, perform a hypothetical liquidity check to guard against shortfall */\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\n            redeemer,\n            VToken(vToken),\n            redeemTokens,\n            0,\n            _getCollateralFactor\n        );\n        if (snapshot.shortfall > 0) {\n            revert InsufficientLiquidity();\n        }\n    }\n\n    /**\n     * @notice Get the total collateral, weighted collateral, borrow balance, liquidity, shortfall\n     * @param account The account to get the snapshot for\n     * @param weight The function to compute the weight of the collateral – either collateral factor or\n     *  liquidation threshold. Accepts the address of the vToken and returns the weight as Exp.\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\n     *  without calculating accumulated interest.\n     * @return snapshot Account liquidity snapshot\n     */\n    function _getCurrentLiquiditySnapshot(\n        address account,\n        function(VToken) internal view returns (Exp memory) weight\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\n        return _getHypotheticalLiquiditySnapshot(account, VToken(address(0)), 0, 0, weight);\n    }\n\n    /**\n     * @notice Determine what the supply/borrow balances would be if the given amounts were redeemed/borrowed\n     * @param vTokenModify The market to hypothetically redeem/borrow in\n     * @param account The account to determine liquidity for\n     * @param redeemTokens The number of tokens to hypothetically redeem\n     * @param borrowAmount The amount of underlying to hypothetically borrow\n     * @param weight The function to compute the weight of the collateral – either collateral factor or\n         liquidation threshold. Accepts the address of the VToken and returns the weight\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\n     *  without calculating accumulated interest.\n     * @return snapshot Account liquidity snapshot\n     */\n    function _getHypotheticalLiquiditySnapshot(\n        address account,\n        VToken vTokenModify,\n        uint256 redeemTokens,\n        uint256 borrowAmount,\n        function(VToken) internal view returns (Exp memory) weight\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\n        // For each asset the account is in\n        VToken[] memory assets = getAssetsIn(account);\n        uint256 assetsCount = assets.length;\n\n        for (uint256 i; i < assetsCount; ++i) {\n            VToken asset = assets[i];\n\n            // Read the balances and exchange rate from the vToken\n            (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) = _safeGetAccountSnapshot(\n                asset,\n                account\n            );\n\n            // Get the normalized price of the asset\n            Exp memory oraclePrice = Exp({ mantissa: _safeGetUnderlyingPrice(asset) });\n\n            // Pre-compute conversion factors from vTokens -> usd\n            Exp memory vTokenPrice = mul_(Exp({ mantissa: exchangeRateMantissa }), oraclePrice);\n            Exp memory weightedVTokenPrice = mul_(weight(asset), vTokenPrice);\n\n            // weightedCollateral += weightedVTokenPrice * vTokenBalance\n            snapshot.weightedCollateral = mul_ScalarTruncateAddUInt(\n                weightedVTokenPrice,\n                vTokenBalance,\n                snapshot.weightedCollateral\n            );\n\n            // totalCollateral += vTokenPrice * vTokenBalance\n            snapshot.totalCollateral = mul_ScalarTruncateAddUInt(vTokenPrice, vTokenBalance, snapshot.totalCollateral);\n\n            // borrows += oraclePrice * borrowBalance\n            snapshot.borrows = mul_ScalarTruncateAddUInt(oraclePrice, borrowBalance, snapshot.borrows);\n\n            // Calculate effects of interacting with vTokenModify\n            if (asset == vTokenModify) {\n                // redeem effect\n                // effects += tokensToDenom * redeemTokens\n                snapshot.effects = mul_ScalarTruncateAddUInt(weightedVTokenPrice, redeemTokens, snapshot.effects);\n\n                // borrow effect\n                // effects += oraclePrice * borrowAmount\n                snapshot.effects = mul_ScalarTruncateAddUInt(oraclePrice, borrowAmount, snapshot.effects);\n            }\n        }\n\n        uint256 borrowPlusEffects = snapshot.borrows + snapshot.effects;\n        // These are safe, as the underflow condition is checked first\n        unchecked {\n            if (snapshot.weightedCollateral > borrowPlusEffects) {\n                snapshot.liquidity = snapshot.weightedCollateral - borrowPlusEffects;\n                snapshot.shortfall = 0;\n            } else {\n                snapshot.liquidity = 0;\n                snapshot.shortfall = borrowPlusEffects - snapshot.weightedCollateral;\n            }\n        }\n\n        return snapshot;\n    }\n\n    /**\n     * @dev Retrieves price from oracle for an asset and checks it is nonzero\n     * @param asset Address for asset to query price\n     * @return Underlying price\n     */\n    function _safeGetUnderlyingPrice(VToken asset) internal view returns (uint256) {\n        uint256 oraclePriceMantissa = oracle.getUnderlyingPrice(address(asset));\n        if (oraclePriceMantissa == 0) {\n            revert PriceError(address(asset));\n        }\n        return oraclePriceMantissa;\n    }\n\n    /**\n     * @dev Return collateral factor for a market\n     * @param asset Address for asset\n     * @return Collateral factor as exponential\n     */\n    function _getCollateralFactor(VToken asset) internal view returns (Exp memory) {\n        return Exp({ mantissa: markets[address(asset)].collateralFactorMantissa });\n    }\n\n    /**\n     * @dev Retrieves liquidation threshold for a market as an exponential\n     * @param asset Address for asset to liquidation threshold\n     * @return Liquidation threshold as exponential\n     */\n    function _getLiquidationThreshold(VToken asset) internal view returns (Exp memory) {\n        return Exp({ mantissa: markets[address(asset)].liquidationThresholdMantissa });\n    }\n\n    /**\n     * @dev Returns supply and borrow balances of user in vToken, reverts on failure\n     * @param vToken Market to query\n     * @param user Account address\n     * @return vTokenBalance Balance of vTokens, the same as vToken.balanceOf(user)\n     * @return borrowBalance Borrowed amount, including the interest\n     * @return exchangeRateMantissa Stored exchange rate\n     */\n    function _safeGetAccountSnapshot(\n        VToken vToken,\n        address user\n    ) internal view returns (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) {\n        uint256 err;\n        (err, vTokenBalance, borrowBalance, exchangeRateMantissa) = vToken.getAccountSnapshot(user);\n        if (err != 0) {\n            revert SnapshotError(address(vToken), user);\n        }\n        return (vTokenBalance, borrowBalance, exchangeRateMantissa);\n    }\n\n    /// @notice Reverts if the call is not from expectedSender\n    /// @param expectedSender Expected transaction sender\n    function _checkSenderIs(address expectedSender) internal view {\n        if (msg.sender != expectedSender) {\n            revert UnexpectedSender(expectedSender, msg.sender);\n        }\n    }\n\n    /// @notice Reverts if a certain action is paused on a market\n    /// @param market Market to check\n    /// @param action Action to check\n    function _checkActionPauseState(address market, Action action) private view {\n        if (actionPaused(market, action)) {\n            revert ActionPaused(market, action);\n        }\n    }\n}\n"},"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity ^0.8.25;\n\nimport { ResilientOracleInterface } from \"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\";\n\nimport { VToken } from \"./VToken.sol\";\nimport { RewardsDistributor } from \"./Rewards/RewardsDistributor.sol\";\n\nenum Action {\n    MINT,\n    REDEEM,\n    BORROW,\n    REPAY,\n    SEIZE,\n    LIQUIDATE,\n    TRANSFER,\n    ENTER_MARKET,\n    EXIT_MARKET\n}\n\n/**\n * @title ComptrollerInterface\n * @author Venus\n * @notice Interface implemented by the `Comptroller` contract.\n */\ninterface ComptrollerInterface {\n    /*** Assets You Are In ***/\n\n    function enterMarkets(address[] calldata vTokens) external returns (uint256[] memory);\n\n    function exitMarket(address vToken) external returns (uint256);\n\n    /*** Policy Hooks ***/\n\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external;\n\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external;\n\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external;\n\n    function preRepayHook(address vToken, address borrower) external;\n\n    function preLiquidateHook(\n        address vTokenBorrowed,\n        address vTokenCollateral,\n        address borrower,\n        uint256 repayAmount,\n        bool skipLiquidityCheck\n    ) external;\n\n    function preSeizeHook(\n        address vTokenCollateral,\n        address vTokenBorrowed,\n        address liquidator,\n        address borrower\n    ) external;\n\n    function borrowVerify(address vToken, address borrower, uint borrowAmount) external;\n\n    function mintVerify(address vToken, address minter, uint mintAmount, uint mintTokens) external;\n\n    function redeemVerify(address vToken, address redeemer, uint redeemAmount, uint redeemTokens) external;\n\n    function repayBorrowVerify(\n        address vToken,\n        address payer,\n        address borrower,\n        uint repayAmount,\n        uint borrowerIndex\n    ) external;\n\n    function liquidateBorrowVerify(\n        address vTokenBorrowed,\n        address vTokenCollateral,\n        address liquidator,\n        address borrower,\n        uint repayAmount,\n        uint seizeTokens\n    ) external;\n\n    function seizeVerify(\n        address vTokenCollateral,\n        address vTokenBorrowed,\n        address liquidator,\n        address borrower,\n        uint seizeTokens\n    ) external;\n\n    function transferVerify(address vToken, address src, address dst, uint transferTokens) external;\n\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external;\n\n    function isComptroller() external view returns (bool);\n\n    /*** Liquidity/Liquidation Calculations ***/\n\n    function liquidateCalculateSeizeTokens(\n        address vTokenBorrowed,\n        address vTokenCollateral,\n        uint256 repayAmount\n    ) external view returns (uint256, uint256);\n\n    function getAllMarkets() external view returns (VToken[] memory);\n\n    function actionPaused(address market, Action action) external view returns (bool);\n}\n\n/**\n * @title ComptrollerViewInterface\n * @author Venus\n * @notice Interface implemented by the `Comptroller` contract, including only some util view functions.\n */\ninterface ComptrollerViewInterface {\n    function markets(address) external view returns (bool, uint256);\n\n    function oracle() external view returns (ResilientOracleInterface);\n\n    function getAssetsIn(address) external view returns (VToken[] memory);\n\n    function closeFactorMantissa() external view returns (uint256);\n\n    function liquidationIncentiveMantissa() external view returns (uint256);\n\n    function minLiquidatableCollateral() external view returns (uint256);\n\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory);\n\n    function getAllMarkets() external view returns (VToken[] memory);\n\n    function borrowCaps(address) external view returns (uint256);\n\n    function supplyCaps(address) external view returns (uint256);\n\n    function approvedDelegates(address user, address delegate) external view returns (bool);\n}\n"},"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\nimport { ResilientOracleInterface } from \"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\";\n\nimport { VToken } from \"./VToken.sol\";\nimport { RewardsDistributor } from \"./Rewards/RewardsDistributor.sol\";\nimport { IPrime } from \"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\";\nimport { Action } from \"./ComptrollerInterface.sol\";\n\n/**\n * @title ComptrollerStorage\n * @author Venus\n * @notice Storage layout for the `Comptroller` contract.\n */\ncontract ComptrollerStorage {\n    struct LiquidationOrder {\n        VToken vTokenCollateral;\n        VToken vTokenBorrowed;\n        uint256 repayAmount;\n    }\n\n    struct AccountLiquiditySnapshot {\n        uint256 totalCollateral;\n        uint256 weightedCollateral;\n        uint256 borrows;\n        uint256 effects;\n        uint256 liquidity;\n        uint256 shortfall;\n    }\n\n    struct RewardSpeeds {\n        address rewardToken;\n        uint256 supplySpeed;\n        uint256 borrowSpeed;\n    }\n\n    struct Market {\n        // Whether or not this market is listed\n        bool isListed;\n        //  Multiplier representing the most one can borrow against their collateral in this market.\n        //  For instance, 0.9 to allow borrowing 90% of collateral value.\n        //  Must be between 0 and 1, and stored as a mantissa.\n        uint256 collateralFactorMantissa;\n        //  Multiplier representing the collateralization after which the borrow is eligible\n        //  for liquidation. For instance, 0.8 liquidate when the borrow is 80% of collateral\n        //  value. Must be between 0 and collateral factor, stored as a mantissa.\n        uint256 liquidationThresholdMantissa;\n        // Per-market mapping of \"accounts in this asset\"\n        mapping(address => bool) accountMembership;\n    }\n\n    /**\n     * @notice Oracle which gives the price of any given asset\n     */\n    ResilientOracleInterface public oracle;\n\n    /**\n     * @notice Multiplier used to calculate the maximum repayAmount when liquidating a borrow\n     */\n    uint256 public closeFactorMantissa;\n\n    /**\n     * @notice Multiplier representing the discount on collateral that a liquidator receives\n     */\n    uint256 public liquidationIncentiveMantissa;\n\n    /**\n     * @notice Per-account mapping of \"assets you are in\"\n     */\n    mapping(address => VToken[]) public accountAssets;\n\n    /**\n     * @notice Official mapping of vTokens -> Market metadata\n     * @dev Used e.g. to determine if a market is supported\n     */\n    mapping(address => Market) public markets;\n\n    /// @notice A list of all markets\n    VToken[] public allMarkets;\n\n    /// @notice Borrow caps enforced by borrowAllowed for each vToken address. Defaults to zero which restricts borrowing.\n    mapping(address => uint256) public borrowCaps;\n\n    /// @notice Minimal collateral required for regular (non-batch) liquidations\n    uint256 public minLiquidatableCollateral;\n\n    /// @notice Supply caps enforced by mintAllowed for each vToken address. Defaults to zero which corresponds to minting not allowed\n    mapping(address => uint256) public supplyCaps;\n\n    /// @notice True if a certain action is paused on a certain market\n    mapping(address => mapping(Action => bool)) internal _actionPaused;\n\n    // List of Reward Distributors added\n    RewardsDistributor[] internal rewardsDistributors;\n\n    // Used to check if rewards distributor is added\n    mapping(address => bool) internal rewardsDistributorExists;\n\n    /// @notice Flag indicating whether forced liquidation enabled for a market\n    mapping(address => bool) public isForcedLiquidationEnabled;\n\n    uint256 internal constant NO_ERROR = 0;\n\n    // closeFactorMantissa must be strictly greater than this value\n    uint256 internal constant MIN_CLOSE_FACTOR_MANTISSA = 0.05e18; // 0.05\n\n    // closeFactorMantissa must not exceed this value\n    uint256 internal constant MAX_CLOSE_FACTOR_MANTISSA = 0.9e18; // 0.9\n\n    // No collateralFactorMantissa may exceed this value\n    uint256 internal constant MAX_COLLATERAL_FACTOR_MANTISSA = 0.95e18; // 0.95\n\n    /// Prime token address\n    IPrime public prime;\n\n    /// @notice Whether the delegate is allowed to borrow or redeem on behalf of the user\n    //mapping(address user => mapping (address delegate => bool approved)) public approvedDelegates;\n    mapping(address => mapping(address => bool)) public approvedDelegates;\n\n    /**\n     * @dev This empty reserved space is put in place to allow future versions to add new\n     * variables without shifting down storage in the inheritance chain.\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n     */\n    uint256[47] private __gap;\n}\n"},"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\n/**\n * @title TokenErrorReporter\n * @author Venus\n * @notice Errors that can be thrown by the `VToken` contract.\n */\ncontract TokenErrorReporter {\n    uint256 public constant NO_ERROR = 0; // support legacy return codes\n\n    error TransferNotAllowed();\n\n    error MintFreshnessCheck();\n\n    error RedeemFreshnessCheck();\n    error RedeemTransferOutNotPossible();\n\n    error BorrowFreshnessCheck();\n    error BorrowCashNotAvailable();\n    error DelegateNotApproved();\n\n    error RepayBorrowFreshnessCheck();\n\n    error HealBorrowUnauthorized();\n    error ForceLiquidateBorrowUnauthorized();\n\n    error LiquidateFreshnessCheck();\n    error LiquidateCollateralFreshnessCheck();\n    error LiquidateAccrueCollateralInterestFailed(uint256 errorCode);\n    error LiquidateLiquidatorIsBorrower();\n    error LiquidateCloseAmountIsZero();\n    error LiquidateCloseAmountIsUintMax();\n\n    error LiquidateSeizeLiquidatorIsBorrower();\n\n    error ProtocolSeizeShareTooBig();\n\n    error SetReserveFactorFreshCheck();\n    error SetReserveFactorBoundsCheck();\n\n    error AddReservesFactorFreshCheck(uint256 actualAddAmount);\n\n    error ReduceReservesFreshCheck();\n    error ReduceReservesCashNotAvailable();\n    error ReduceReservesCashValidation();\n\n    error SetInterestRateModelFreshCheck();\n}\n"},"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\nimport { EXP_SCALE as EXP_SCALE_, MANTISSA_ONE as MANTISSA_ONE_ } from \"./lib/constants.sol\";\n\n/**\n * @title Exponential module for storing fixed-precision decimals\n * @author Compound\n * @notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.\n *         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:\n *         `Exp({mantissa: 5100000000000000000})`.\n */\ncontract ExponentialNoError {\n    struct Exp {\n        uint256 mantissa;\n    }\n\n    struct Double {\n        uint256 mantissa;\n    }\n\n    uint256 internal constant EXP_SCALE = EXP_SCALE_;\n    uint256 internal constant DOUBLE_SCALE = 1e36;\n    uint256 internal constant HALF_EXP_SCALE = EXP_SCALE / 2;\n    uint256 internal constant MANTISSA_ONE = MANTISSA_ONE_;\n\n    /**\n     * @dev Truncates the given exp to a whole number value.\n     *      For example, truncate(Exp{mantissa: 15 * EXP_SCALE}) = 15\n     */\n    function truncate(Exp memory exp) internal pure returns (uint256) {\n        // Note: We are not using careful math here as we're performing a division that cannot fail\n        return exp.mantissa / EXP_SCALE;\n    }\n\n    /**\n     * @dev Multiply an Exp by a scalar, then truncate to return an unsigned integer.\n     */\n    // solhint-disable-next-line func-name-mixedcase\n    function mul_ScalarTruncate(Exp memory a, uint256 scalar) internal pure returns (uint256) {\n        Exp memory product = mul_(a, scalar);\n        return truncate(product);\n    }\n\n    /**\n     * @dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.\n     */\n    // solhint-disable-next-line func-name-mixedcase\n    function mul_ScalarTruncateAddUInt(Exp memory a, uint256 scalar, uint256 addend) internal pure returns (uint256) {\n        Exp memory product = mul_(a, scalar);\n        return add_(truncate(product), addend);\n    }\n\n    /**\n     * @dev Checks if first Exp is less than second Exp.\n     */\n    function lessThanExp(Exp memory left, Exp memory right) internal pure returns (bool) {\n        return left.mantissa < right.mantissa;\n    }\n\n    function safe224(uint256 n, string memory errorMessage) internal pure returns (uint224) {\n        require(n <= type(uint224).max, errorMessage);\n        return uint224(n);\n    }\n\n    function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) {\n        require(n <= type(uint32).max, errorMessage);\n        return uint32(n);\n    }\n\n    function add_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\n        return Exp({ mantissa: add_(a.mantissa, b.mantissa) });\n    }\n\n    function add_(Double memory a, Double memory b) internal pure returns (Double memory) {\n        return Double({ mantissa: add_(a.mantissa, b.mantissa) });\n    }\n\n    function add_(uint256 a, uint256 b) internal pure returns (uint256) {\n        return a + b;\n    }\n\n    function sub_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\n        return Exp({ mantissa: sub_(a.mantissa, b.mantissa) });\n    }\n\n    function sub_(Double memory a, Double memory b) internal pure returns (Double memory) {\n        return Double({ mantissa: sub_(a.mantissa, b.mantissa) });\n    }\n\n    function sub_(uint256 a, uint256 b) internal pure returns (uint256) {\n        return a - b;\n    }\n\n    function mul_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\n        return Exp({ mantissa: mul_(a.mantissa, b.mantissa) / EXP_SCALE });\n    }\n\n    function mul_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\n        return Exp({ mantissa: mul_(a.mantissa, b) });\n    }\n\n    function mul_(uint256 a, Exp memory b) internal pure returns (uint256) {\n        return mul_(a, b.mantissa) / EXP_SCALE;\n    }\n\n    function mul_(Double memory a, Double memory b) internal pure returns (Double memory) {\n        return Double({ mantissa: mul_(a.mantissa, b.mantissa) / DOUBLE_SCALE });\n    }\n\n    function mul_(Double memory a, uint256 b) internal pure returns (Double memory) {\n        return Double({ mantissa: mul_(a.mantissa, b) });\n    }\n\n    function mul_(uint256 a, Double memory b) internal pure returns (uint256) {\n        return mul_(a, b.mantissa) / DOUBLE_SCALE;\n    }\n\n    function mul_(uint256 a, uint256 b) internal pure returns (uint256) {\n        return a * b;\n    }\n\n    function div_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\n        return Exp({ mantissa: div_(mul_(a.mantissa, EXP_SCALE), b.mantissa) });\n    }\n\n    function div_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\n        return Exp({ mantissa: div_(a.mantissa, b) });\n    }\n\n    function div_(uint256 a, Exp memory b) internal pure returns (uint256) {\n        return div_(mul_(a, EXP_SCALE), b.mantissa);\n    }\n\n    function div_(Double memory a, Double memory b) internal pure returns (Double memory) {\n        return Double({ mantissa: div_(mul_(a.mantissa, DOUBLE_SCALE), b.mantissa) });\n    }\n\n    function div_(Double memory a, uint256 b) internal pure returns (Double memory) {\n        return Double({ mantissa: div_(a.mantissa, b) });\n    }\n\n    function div_(uint256 a, Double memory b) internal pure returns (uint256) {\n        return div_(mul_(a, DOUBLE_SCALE), b.mantissa);\n    }\n\n    function div_(uint256 a, uint256 b) internal pure returns (uint256) {\n        return a / b;\n    }\n\n    function fraction(uint256 a, uint256 b) internal pure returns (Double memory) {\n        return Double({ mantissa: div_(mul_(a, DOUBLE_SCALE), b) });\n    }\n}\n"},"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\n/**\n * @title Compound's InterestRateModel Interface\n * @author Compound\n */\nabstract contract InterestRateModel {\n    /**\n     * @notice Calculates the current borrow interest rate per slot (block or second)\n     * @param cash The total amount of cash the market has\n     * @param borrows The total amount of borrows the market has outstanding\n     * @param reserves The total amount of reserves the market has\n     * @param badDebt The amount of badDebt in the market\n     * @return The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\n     */\n    function getBorrowRate(\n        uint256 cash,\n        uint256 borrows,\n        uint256 reserves,\n        uint256 badDebt\n    ) external view virtual returns (uint256);\n\n    /**\n     * @notice Calculates the current supply interest rate per slot (block or second)\n     * @param cash The total amount of cash the market has\n     * @param borrows The total amount of borrows the market has outstanding\n     * @param reserves The total amount of reserves the market has\n     * @param reserveFactorMantissa The current reserve factor the market has\n     * @param badDebt The amount of badDebt in the market\n     * @return The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\n     */\n    function getSupplyRate(\n        uint256 cash,\n        uint256 borrows,\n        uint256 reserves,\n        uint256 reserveFactorMantissa,\n        uint256 badDebt\n    ) external view virtual returns (uint256);\n\n    /**\n     * @notice Indicator that this is an InterestRateModel contract (for inspection)\n     * @return Always true\n     */\n    function isInterestRateModel() external pure virtual returns (bool) {\n        return true;\n    }\n}\n"},"@venusprotocol/isolated-pools/contracts/lib/constants.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity ^0.8.25;\n\n/// @dev The approximate number of seconds per year\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\n\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\nuint256 constant EXP_SCALE = 1e18;\n\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\nuint256 constant MANTISSA_ONE = EXP_SCALE;\n"},"@venusprotocol/isolated-pools/contracts/lib/validators.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\nerror ZeroAddressNotAllowed();\n\n/// @notice Checks if the provided address is nonzero, reverts otherwise\n/// @param address_ Address to check\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\nfunction ensureNonzeroAddress(address address_) pure {\n    if (address_ == address(0)) {\n        revert ZeroAddressNotAllowed();\n    }\n}\n"},"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\n/**\n * @title MaxLoopsLimitHelper\n * @author Venus\n * @notice Abstract contract used to avoid collection with too many items that would generate gas errors and DoS.\n */\nabstract contract MaxLoopsLimitHelper {\n    // Limit for the loops to avoid the DOS\n    uint256 public maxLoopsLimit;\n\n    /**\n     * @dev This empty reserved space is put in place to allow future versions to add new\n     * variables without shifting down storage in the inheritance chain.\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n     */\n    uint256[49] private __gap;\n\n    /// @notice Emitted when max loops limit is set\n    event MaxLoopsLimitUpdated(uint256 oldMaxLoopsLimit, uint256 newmaxLoopsLimit);\n\n    /// @notice Thrown an error on maxLoopsLimit exceeds for any loop\n    error MaxLoopsLimitExceeded(uint256 loopsLimit, uint256 requiredLoops);\n\n    /**\n     * @notice Set the limit for the loops can iterate to avoid the DOS\n     * @param limit Limit for the max loops can execute at a time\n     */\n    function _setMaxLoopsLimit(uint256 limit) internal {\n        require(limit > maxLoopsLimit, \"Comptroller: Invalid maxLoopsLimit\");\n\n        uint256 oldMaxLoopsLimit = maxLoopsLimit;\n        maxLoopsLimit = limit;\n\n        emit MaxLoopsLimitUpdated(oldMaxLoopsLimit, limit);\n    }\n\n    /**\n     * @notice Compare the maxLoopsLimit with number of the times loop iterate\n     * @param len Length of the loops iterate\n     * @custom:error MaxLoopsLimitExceeded error is thrown when loops length exceeds maxLoopsLimit\n     */\n    function _ensureMaxLoops(uint256 len) internal view {\n        if (len > maxLoopsLimit) {\n            revert MaxLoopsLimitExceeded(maxLoopsLimit, len);\n        }\n    }\n}\n"},"@venusprotocol/isolated-pools/contracts/Pool/PoolRegistryInterface.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity ^0.8.25;\n\n/**\n * @title PoolRegistryInterface\n * @author Venus\n * @notice Interface implemented by `PoolRegistry`.\n */\ninterface PoolRegistryInterface {\n    /**\n     * @notice Struct for a Venus interest rate pool.\n     */\n    struct VenusPool {\n        string name;\n        address creator;\n        address comptroller;\n        uint256 blockPosted;\n        uint256 timestampPosted;\n    }\n\n    /**\n     * @notice Struct for a Venus interest rate pool metadata.\n     */\n    struct VenusPoolMetaData {\n        string category;\n        string logoURL;\n        string description;\n    }\n\n    /// @notice Get all pools in PoolRegistry\n    function getAllPools() external view returns (VenusPool[] memory);\n\n    /// @notice Get a pool by comptroller address\n    function getPoolByComptroller(address comptroller) external view returns (VenusPool memory);\n\n    /// @notice Get the address of the VToken contract in the Pool where the underlying token is the provided asset\n    function getVTokenForAsset(address comptroller, address asset) external view returns (address);\n\n    /// @notice Get the addresss of the Pools supported that include a market for the provided asset\n    function getPoolsSupportedByAsset(address asset) external view returns (address[] memory);\n\n    /// @notice Get the metadata of a Pool by comptroller address\n    function getVenusPoolMetadata(address comptroller) external view returns (VenusPoolMetaData memory);\n}\n"},"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\nimport { Ownable2StepUpgradeable } from \"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\";\nimport { IERC20Upgradeable } from \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\nimport { SafeERC20Upgradeable } from \"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\";\nimport { AccessControlledV8 } from \"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\";\nimport { TimeManagerV8 } from \"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\";\n\nimport { ExponentialNoError } from \"../ExponentialNoError.sol\";\nimport { VToken } from \"../VToken.sol\";\nimport { Comptroller } from \"../Comptroller.sol\";\nimport { MaxLoopsLimitHelper } from \"../MaxLoopsLimitHelper.sol\";\nimport { RewardsDistributorStorage } from \"./RewardsDistributorStorage.sol\";\n\n/**\n * @title `RewardsDistributor`\n * @author Venus\n * @notice Contract used to configure, track and distribute rewards to users based on their actions (borrows and supplies) in the protocol.\n * Users can receive additional rewards through a `RewardsDistributor`. Each `RewardsDistributor` proxy is initialized with a specific reward\n * token and `Comptroller`, which can then distribute the reward token to users that supply or borrow in the associated pool.\n * Authorized users can set the reward token borrow and supply speeds for each market in the pool. This sets a fixed amount of reward\n * token to be released each slot (block or second) for borrowers and suppliers, which is distributed based on a user’s percentage of the borrows or supplies\n * respectively. The owner can also set up reward distributions to contributor addresses (distinct from suppliers and borrowers) by setting\n * their contributor reward token speed, which similarly allocates a fixed amount of reward token per slot (block or second).\n *\n * The owner has the ability to transfer any amount of reward tokens held by the contract to any other address. Rewards are not distributed\n * automatically and must be claimed by a user calling `claimRewardToken()`. Users should be aware that it is up to the owner and other centralized\n * entities to ensure that the `RewardsDistributor` holds enough tokens to distribute the accumulated rewards of users and contributors.\n */\ncontract RewardsDistributor is\n    ExponentialNoError,\n    Ownable2StepUpgradeable,\n    AccessControlledV8,\n    MaxLoopsLimitHelper,\n    RewardsDistributorStorage,\n    TimeManagerV8\n{\n    using SafeERC20Upgradeable for IERC20Upgradeable;\n\n    /// @notice The initial REWARD TOKEN index for a market\n    uint224 public constant INITIAL_INDEX = 1e36;\n\n    /// @notice Emitted when REWARD TOKEN is distributed to a supplier\n    event DistributedSupplierRewardToken(\n        VToken indexed vToken,\n        address indexed supplier,\n        uint256 rewardTokenDelta,\n        uint256 rewardTokenTotal,\n        uint256 rewardTokenSupplyIndex\n    );\n\n    /// @notice Emitted when REWARD TOKEN is distributed to a borrower\n    event DistributedBorrowerRewardToken(\n        VToken indexed vToken,\n        address indexed borrower,\n        uint256 rewardTokenDelta,\n        uint256 rewardTokenTotal,\n        uint256 rewardTokenBorrowIndex\n    );\n\n    /// @notice Emitted when a new supply-side REWARD TOKEN speed is calculated for a market\n    event RewardTokenSupplySpeedUpdated(VToken indexed vToken, uint256 newSpeed);\n\n    /// @notice Emitted when a new borrow-side REWARD TOKEN speed is calculated for a market\n    event RewardTokenBorrowSpeedUpdated(VToken indexed vToken, uint256 newSpeed);\n\n    /// @notice Emitted when REWARD TOKEN is granted by admin\n    event RewardTokenGranted(address indexed recipient, uint256 amount);\n\n    /// @notice Emitted when a new REWARD TOKEN speed is set for a contributor\n    event ContributorRewardTokenSpeedUpdated(address indexed contributor, uint256 newSpeed);\n\n    /// @notice Emitted when a market is initialized\n    event MarketInitialized(address indexed vToken);\n\n    /// @notice Emitted when a reward token supply index is updated\n    event RewardTokenSupplyIndexUpdated(address indexed vToken);\n\n    /// @notice Emitted when a reward token borrow index is updated\n    event RewardTokenBorrowIndexUpdated(address indexed vToken, Exp marketBorrowIndex);\n\n    /// @notice Emitted when a reward for contributor is updated\n    event ContributorRewardsUpdated(address indexed contributor, uint256 rewardAccrued);\n\n    /// @notice Emitted when a reward token last rewarding block for supply is updated\n    event SupplyLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\n\n    /// @notice Emitted when a reward token last rewarding block for borrow is updated\n    event BorrowLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\n\n    /// @notice Emitted when a reward token last rewarding timestamp for supply is updated\n    event SupplyLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\n\n    /// @notice Emitted when a reward token last rewarding timestamp for borrow is updated\n    event BorrowLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\n\n    modifier onlyComptroller() {\n        require(address(comptroller) == msg.sender, \"Only comptroller can call this function\");\n        _;\n    }\n\n    /**\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\n     * @param blocksPerYear_ The number of blocks per year\n     * @custom:oz-upgrades-unsafe-allow constructor\n     */\n    constructor(bool timeBased_, uint256 blocksPerYear_) TimeManagerV8(timeBased_, blocksPerYear_) {\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\n        // to set the state variables.\n        _disableInitializers();\n    }\n\n    /**\n     * @notice RewardsDistributor initializer\n     * @dev Initializes the deployer to owner\n     * @param comptroller_ Comptroller to attach the reward distributor to\n     * @param rewardToken_ Reward token to distribute\n     * @param loopsLimit_ Maximum number of iterations for the loops in this contract\n     * @param accessControlManager_ AccessControlManager contract address\n     */\n    function initialize(\n        Comptroller comptroller_,\n        IERC20Upgradeable rewardToken_,\n        uint256 loopsLimit_,\n        address accessControlManager_\n    ) external initializer {\n        comptroller = comptroller_;\n        rewardToken = rewardToken_;\n        __Ownable2Step_init();\n        __AccessControlled_init_unchained(accessControlManager_);\n\n        _setMaxLoopsLimit(loopsLimit_);\n    }\n\n    /**\n     * @notice Initializes the market state for a specific vToken\n     * @param vToken The address of the vToken to be initialized\n     * @custom:event MarketInitialized emits on success\n     * @custom:access Only Comptroller\n     */\n    function initializeMarket(address vToken) external onlyComptroller {\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\n\n        isTimeBased\n            ? _initializeMarketTimestampBased(vToken, blockNumberOrTimestamp)\n            : _initializeMarketBlockBased(vToken, safe32(blockNumberOrTimestamp, \"block number exceeds 32 bits\"));\n\n        emit MarketInitialized(vToken);\n    }\n\n    /*** Reward Token Distribution ***/\n\n    /**\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them\n     *         Borrowers will begin to accrue after the first interaction with the protocol.\n     * @dev This function should only be called when the user has a borrow position in the market\n     *      (e.g. Comptroller.preBorrowHook, and Comptroller.preRepayHook)\n     *      We avoid an external call to check if they are in the market to save gas because this function is called in many places\n     * @param vToken The market in which the borrower is interacting\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\n     * @param marketBorrowIndex The current global borrow index of vToken\n     */\n    function distributeBorrowerRewardToken(\n        address vToken,\n        address borrower,\n        Exp memory marketBorrowIndex\n    ) external onlyComptroller {\n        _distributeBorrowerRewardToken(vToken, borrower, marketBorrowIndex);\n    }\n\n    function updateRewardTokenSupplyIndex(address vToken) external onlyComptroller {\n        _updateRewardTokenSupplyIndex(vToken);\n    }\n\n    /**\n     * @notice Transfer REWARD TOKEN to the recipient\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all\n     * @param recipient The address of the recipient to transfer REWARD TOKEN to\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\n     */\n    function grantRewardToken(address recipient, uint256 amount) external onlyOwner {\n        uint256 amountLeft = _grantRewardToken(recipient, amount);\n        require(amountLeft == 0, \"insufficient rewardToken for grant\");\n        emit RewardTokenGranted(recipient, amount);\n    }\n\n    function updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) external onlyComptroller {\n        _updateRewardTokenBorrowIndex(vToken, marketBorrowIndex);\n    }\n\n    /**\n     * @notice Set REWARD TOKEN borrow and supply speeds for the specified markets\n     * @param vTokens The markets whose REWARD TOKEN speed to update\n     * @param supplySpeeds New supply-side REWARD TOKEN speed for the corresponding market\n     * @param borrowSpeeds New borrow-side REWARD TOKEN speed for the corresponding market\n     */\n    function setRewardTokenSpeeds(\n        VToken[] memory vTokens,\n        uint256[] memory supplySpeeds,\n        uint256[] memory borrowSpeeds\n    ) external {\n        _checkAccessAllowed(\"setRewardTokenSpeeds(address[],uint256[],uint256[])\");\n        uint256 numTokens = vTokens.length;\n        require(numTokens == supplySpeeds.length && numTokens == borrowSpeeds.length, \"invalid setRewardTokenSpeeds\");\n\n        for (uint256 i; i < numTokens; ++i) {\n            _setRewardTokenSpeed(vTokens[i], supplySpeeds[i], borrowSpeeds[i]);\n        }\n    }\n\n    /**\n     * @notice Set REWARD TOKEN last rewarding block for the specified markets, used when contract is block based\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\n     * @param supplyLastRewardingBlocks New supply-side REWARD TOKEN last rewarding block for the corresponding market\n     * @param borrowLastRewardingBlocks New borrow-side REWARD TOKEN last rewarding block for the corresponding market\n     */\n    function setLastRewardingBlocks(\n        VToken[] calldata vTokens,\n        uint32[] calldata supplyLastRewardingBlocks,\n        uint32[] calldata borrowLastRewardingBlocks\n    ) external {\n        _checkAccessAllowed(\"setLastRewardingBlocks(address[],uint32[],uint32[])\");\n        require(!isTimeBased, \"Block-based operation only\");\n\n        uint256 numTokens = vTokens.length;\n        require(\n            numTokens == supplyLastRewardingBlocks.length && numTokens == borrowLastRewardingBlocks.length,\n            \"RewardsDistributor::setLastRewardingBlocks invalid input\"\n        );\n\n        for (uint256 i; i < numTokens; ) {\n            _setLastRewardingBlock(vTokens[i], supplyLastRewardingBlocks[i], borrowLastRewardingBlocks[i]);\n            unchecked {\n                ++i;\n            }\n        }\n    }\n\n    /**\n     * @notice Set REWARD TOKEN last rewarding block timestamp for the specified markets, used when contract is time based\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\n     * @param supplyLastRewardingBlockTimestamps New supply-side REWARD TOKEN last rewarding block timestamp for the corresponding market\n     * @param borrowLastRewardingBlockTimestamps New borrow-side REWARD TOKEN last rewarding block timestamp for the corresponding market\n     */\n    function setLastRewardingBlockTimestamps(\n        VToken[] calldata vTokens,\n        uint256[] calldata supplyLastRewardingBlockTimestamps,\n        uint256[] calldata borrowLastRewardingBlockTimestamps\n    ) external {\n        _checkAccessAllowed(\"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])\");\n        require(isTimeBased, \"Time-based operation only\");\n\n        uint256 numTokens = vTokens.length;\n        require(\n            numTokens == supplyLastRewardingBlockTimestamps.length &&\n                numTokens == borrowLastRewardingBlockTimestamps.length,\n            \"RewardsDistributor::setLastRewardingBlockTimestamps invalid input\"\n        );\n\n        for (uint256 i; i < numTokens; ) {\n            _setLastRewardingBlockTimestamp(\n                vTokens[i],\n                supplyLastRewardingBlockTimestamps[i],\n                borrowLastRewardingBlockTimestamps[i]\n            );\n            unchecked {\n                ++i;\n            }\n        }\n    }\n\n    /**\n     * @notice Set REWARD TOKEN speed for a single contributor\n     * @param contributor The contributor whose REWARD TOKEN speed to update\n     * @param rewardTokenSpeed New REWARD TOKEN speed for contributor\n     */\n    function setContributorRewardTokenSpeed(address contributor, uint256 rewardTokenSpeed) external onlyOwner {\n        // note that REWARD TOKEN speed could be set to 0 to halt liquidity rewards for a contributor\n        updateContributorRewards(contributor);\n        if (rewardTokenSpeed == 0) {\n            // release storage\n            delete lastContributorBlock[contributor];\n        } else {\n            lastContributorBlock[contributor] = getBlockNumberOrTimestamp();\n        }\n        rewardTokenContributorSpeeds[contributor] = rewardTokenSpeed;\n\n        emit ContributorRewardTokenSpeedUpdated(contributor, rewardTokenSpeed);\n    }\n\n    function distributeSupplierRewardToken(address vToken, address supplier) external onlyComptroller {\n        _distributeSupplierRewardToken(vToken, supplier);\n    }\n\n    /**\n     * @notice Claim all the rewardToken accrued by holder in all markets\n     * @param holder The address to claim REWARD TOKEN for\n     */\n    function claimRewardToken(address holder) external {\n        return claimRewardToken(holder, comptroller.getAllMarkets());\n    }\n\n    /**\n     * @notice Set the limit for the loops can iterate to avoid the DOS\n     * @param limit Limit for the max loops can execute at a time\n     */\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\n        _setMaxLoopsLimit(limit);\n    }\n\n    /**\n     * @notice Calculate additional accrued REWARD TOKEN for a contributor since last accrual\n     * @param contributor The address to calculate contributor rewards for\n     */\n    function updateContributorRewards(address contributor) public {\n        uint256 rewardTokenSpeed = rewardTokenContributorSpeeds[contributor];\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\n        uint256 deltaBlocksOrTimestamp = sub_(blockNumberOrTimestamp, lastContributorBlock[contributor]);\n        if (deltaBlocksOrTimestamp > 0 && rewardTokenSpeed > 0) {\n            uint256 newAccrued = mul_(deltaBlocksOrTimestamp, rewardTokenSpeed);\n            uint256 contributorAccrued = add_(rewardTokenAccrued[contributor], newAccrued);\n\n            rewardTokenAccrued[contributor] = contributorAccrued;\n            lastContributorBlock[contributor] = blockNumberOrTimestamp;\n\n            emit ContributorRewardsUpdated(contributor, rewardTokenAccrued[contributor]);\n        }\n    }\n\n    /**\n     * @notice Claim all the rewardToken accrued by holder in the specified markets\n     * @param holder The address to claim REWARD TOKEN for\n     * @param vTokens The list of markets to claim REWARD TOKEN in\n     */\n    function claimRewardToken(address holder, VToken[] memory vTokens) public {\n        uint256 vTokensCount = vTokens.length;\n\n        _ensureMaxLoops(vTokensCount);\n\n        for (uint256 i; i < vTokensCount; ++i) {\n            VToken vToken = vTokens[i];\n            require(comptroller.isMarketListed(vToken), \"market must be listed\");\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\n            _distributeBorrowerRewardToken(address(vToken), holder, borrowIndex);\n            _updateRewardTokenSupplyIndex(address(vToken));\n            _distributeSupplierRewardToken(address(vToken), holder);\n        }\n        rewardTokenAccrued[holder] = _grantRewardToken(holder, rewardTokenAccrued[holder]);\n    }\n\n    /**\n     * @notice Set REWARD TOKEN last rewarding block for a single market.\n     * @param vToken market's whose reward token last rewarding block to be updated\n     * @param supplyLastRewardingBlock New supply-side REWARD TOKEN last rewarding block for market\n     * @param borrowLastRewardingBlock New borrow-side REWARD TOKEN last rewarding block for market\n     */\n    function _setLastRewardingBlock(\n        VToken vToken,\n        uint32 supplyLastRewardingBlock,\n        uint32 borrowLastRewardingBlock\n    ) internal {\n        require(comptroller.isMarketListed(vToken), \"rewardToken market is not listed\");\n\n        uint256 blockNumber = getBlockNumberOrTimestamp();\n\n        require(supplyLastRewardingBlock > blockNumber, \"setting last rewarding block in the past is not allowed\");\n        require(borrowLastRewardingBlock > blockNumber, \"setting last rewarding block in the past is not allowed\");\n\n        uint32 currentSupplyLastRewardingBlock = rewardTokenSupplyState[address(vToken)].lastRewardingBlock;\n        uint32 currentBorrowLastRewardingBlock = rewardTokenBorrowState[address(vToken)].lastRewardingBlock;\n\n        require(\n            currentSupplyLastRewardingBlock == 0 || currentSupplyLastRewardingBlock > blockNumber,\n            \"this RewardsDistributor is already locked\"\n        );\n        require(\n            currentBorrowLastRewardingBlock == 0 || currentBorrowLastRewardingBlock > blockNumber,\n            \"this RewardsDistributor is already locked\"\n        );\n\n        if (currentSupplyLastRewardingBlock != supplyLastRewardingBlock) {\n            rewardTokenSupplyState[address(vToken)].lastRewardingBlock = supplyLastRewardingBlock;\n            emit SupplyLastRewardingBlockUpdated(address(vToken), supplyLastRewardingBlock);\n        }\n\n        if (currentBorrowLastRewardingBlock != borrowLastRewardingBlock) {\n            rewardTokenBorrowState[address(vToken)].lastRewardingBlock = borrowLastRewardingBlock;\n            emit BorrowLastRewardingBlockUpdated(address(vToken), borrowLastRewardingBlock);\n        }\n    }\n\n    /**\n     * @notice Set REWARD TOKEN last rewarding timestamp for a single market.\n     * @param vToken market's whose reward token last rewarding timestamp to be updated\n     * @param supplyLastRewardingBlockTimestamp New supply-side REWARD TOKEN last rewarding timestamp for market\n     * @param borrowLastRewardingBlockTimestamp New borrow-side REWARD TOKEN last rewarding timestamp for market\n     */\n    function _setLastRewardingBlockTimestamp(\n        VToken vToken,\n        uint256 supplyLastRewardingBlockTimestamp,\n        uint256 borrowLastRewardingBlockTimestamp\n    ) internal {\n        require(comptroller.isMarketListed(vToken), \"rewardToken market is not listed\");\n\n        uint256 blockTimestamp = getBlockNumberOrTimestamp();\n\n        require(\n            supplyLastRewardingBlockTimestamp > blockTimestamp,\n            \"setting last rewarding timestamp in the past is not allowed\"\n        );\n        require(\n            borrowLastRewardingBlockTimestamp > blockTimestamp,\n            \"setting last rewarding timestamp in the past is not allowed\"\n        );\n\n        uint256 currentSupplyLastRewardingBlockTimestamp = rewardTokenSupplyStateTimeBased[address(vToken)]\n            .lastRewardingTimestamp;\n        uint256 currentBorrowLastRewardingBlockTimestamp = rewardTokenBorrowStateTimeBased[address(vToken)]\n            .lastRewardingTimestamp;\n\n        require(\n            currentSupplyLastRewardingBlockTimestamp == 0 || currentSupplyLastRewardingBlockTimestamp > blockTimestamp,\n            \"this RewardsDistributor is already locked\"\n        );\n        require(\n            currentBorrowLastRewardingBlockTimestamp == 0 || currentBorrowLastRewardingBlockTimestamp > blockTimestamp,\n            \"this RewardsDistributor is already locked\"\n        );\n\n        if (currentSupplyLastRewardingBlockTimestamp != supplyLastRewardingBlockTimestamp) {\n            rewardTokenSupplyStateTimeBased[address(vToken)].lastRewardingTimestamp = supplyLastRewardingBlockTimestamp;\n            emit SupplyLastRewardingBlockTimestampUpdated(address(vToken), supplyLastRewardingBlockTimestamp);\n        }\n\n        if (currentBorrowLastRewardingBlockTimestamp != borrowLastRewardingBlockTimestamp) {\n            rewardTokenBorrowStateTimeBased[address(vToken)].lastRewardingTimestamp = borrowLastRewardingBlockTimestamp;\n            emit BorrowLastRewardingBlockTimestampUpdated(address(vToken), borrowLastRewardingBlockTimestamp);\n        }\n    }\n\n    /**\n     * @notice Set REWARD TOKEN speed for a single market.\n     * @param vToken market's whose reward token rate to be updated\n     * @param supplySpeed New supply-side REWARD TOKEN speed for market\n     * @param borrowSpeed New borrow-side REWARD TOKEN speed for market\n     */\n    function _setRewardTokenSpeed(VToken vToken, uint256 supplySpeed, uint256 borrowSpeed) internal {\n        require(comptroller.isMarketListed(vToken), \"rewardToken market is not listed\");\n\n        if (rewardTokenSupplySpeeds[address(vToken)] != supplySpeed) {\n            // Supply speed updated so let's update supply state to ensure that\n            //  1. REWARD TOKEN accrued properly for the old speed, and\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\n            _updateRewardTokenSupplyIndex(address(vToken));\n\n            // Update speed and emit event\n            rewardTokenSupplySpeeds[address(vToken)] = supplySpeed;\n            emit RewardTokenSupplySpeedUpdated(vToken, supplySpeed);\n        }\n\n        if (rewardTokenBorrowSpeeds[address(vToken)] != borrowSpeed) {\n            // Borrow speed updated so let's update borrow state to ensure that\n            //  1. REWARD TOKEN accrued properly for the old speed, and\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\n\n            // Update speed and emit event\n            rewardTokenBorrowSpeeds[address(vToken)] = borrowSpeed;\n            emit RewardTokenBorrowSpeedUpdated(vToken, borrowSpeed);\n        }\n    }\n\n    /**\n     * @notice Calculate REWARD TOKEN accrued by a supplier and possibly transfer it to them.\n     * @param vToken The market in which the supplier is interacting\n     * @param supplier The address of the supplier to distribute REWARD TOKEN to\n     */\n    function _distributeSupplierRewardToken(address vToken, address supplier) internal {\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\n\n        uint256 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\n        uint256 supplierIndex = rewardTokenSupplierIndex[vToken][supplier];\n\n        // Update supplier's index to the current index since we are distributing accrued REWARD TOKEN\n        rewardTokenSupplierIndex[vToken][supplier] = supplyIndex;\n\n        if (supplierIndex == 0 && supplyIndex >= INITIAL_INDEX) {\n            // Covers the case where users supplied tokens before the market's supply state index was set.\n            // Rewards the user with REWARD TOKEN accrued from the start of when supplier rewards were first\n            // set for the market.\n            supplierIndex = INITIAL_INDEX;\n        }\n\n        // Calculate change in the cumulative sum of the REWARD TOKEN per vToken accrued\n        Double memory deltaIndex = Double({ mantissa: sub_(supplyIndex, supplierIndex) });\n\n        uint256 supplierTokens = VToken(vToken).balanceOf(supplier);\n\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerVToken\n        uint256 supplierDelta = mul_(supplierTokens, deltaIndex);\n\n        uint256 supplierAccrued = add_(rewardTokenAccrued[supplier], supplierDelta);\n        rewardTokenAccrued[supplier] = supplierAccrued;\n\n        emit DistributedSupplierRewardToken(VToken(vToken), supplier, supplierDelta, supplierAccrued, supplyIndex);\n    }\n\n    /**\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them.\n     * @param vToken The market in which the borrower is interacting\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\n     * @param marketBorrowIndex The current global borrow index of vToken\n     */\n    function _distributeBorrowerRewardToken(address vToken, address borrower, Exp memory marketBorrowIndex) internal {\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\n\n        uint256 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\n        uint256 borrowerIndex = rewardTokenBorrowerIndex[vToken][borrower];\n\n        // Update borrowers's index to the current index since we are distributing accrued REWARD TOKEN\n        rewardTokenBorrowerIndex[vToken][borrower] = borrowIndex;\n\n        if (borrowerIndex == 0 && borrowIndex >= INITIAL_INDEX) {\n            // Covers the case where users borrowed tokens before the market's borrow state index was set.\n            // Rewards the user with REWARD TOKEN accrued from the start of when borrower rewards were first\n            // set for the market.\n            borrowerIndex = INITIAL_INDEX;\n        }\n\n        // Calculate change in the cumulative sum of the REWARD TOKEN per borrowed unit accrued\n        Double memory deltaIndex = Double({ mantissa: sub_(borrowIndex, borrowerIndex) });\n\n        uint256 borrowerAmount = div_(VToken(vToken).borrowBalanceStored(borrower), marketBorrowIndex);\n\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerBorrowedUnit\n        if (borrowerAmount != 0) {\n            uint256 borrowerDelta = mul_(borrowerAmount, deltaIndex);\n\n            uint256 borrowerAccrued = add_(rewardTokenAccrued[borrower], borrowerDelta);\n            rewardTokenAccrued[borrower] = borrowerAccrued;\n\n            emit DistributedBorrowerRewardToken(VToken(vToken), borrower, borrowerDelta, borrowerAccrued, borrowIndex);\n        }\n    }\n\n    /**\n     * @notice Transfer REWARD TOKEN to the user.\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all.\n     * @param user The address of the user to transfer REWARD TOKEN to\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\n     * @return The amount of REWARD TOKEN which was NOT transferred to the user\n     */\n    function _grantRewardToken(address user, uint256 amount) internal returns (uint256) {\n        uint256 rewardTokenRemaining = rewardToken.balanceOf(address(this));\n        if (amount > 0 && amount <= rewardTokenRemaining) {\n            rewardToken.safeTransfer(user, amount);\n            return 0;\n        }\n        return amount;\n    }\n\n    /**\n     * @notice Accrue REWARD TOKEN to the market by updating the supply index\n     * @param vToken The market whose supply index to update\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\n     */\n    function _updateRewardTokenSupplyIndex(address vToken) internal {\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\n\n        uint256 supplySpeed = rewardTokenSupplySpeeds[vToken];\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\n\n        if (!isTimeBased) {\n            safe32(blockNumberOrTimestamp, \"block number exceeds 32 bits\");\n        }\n\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\n            ? supplyStateTimeBased.lastRewardingTimestamp\n            : uint256(supplyState.lastRewardingBlock);\n\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\n        }\n\n        uint256 deltaBlocksOrTimestamp = sub_(\n            blockNumberOrTimestamp,\n            (isTimeBased ? supplyStateTimeBased.timestamp : uint256(supplyState.block))\n        );\n        if (deltaBlocksOrTimestamp > 0 && supplySpeed > 0) {\n            uint256 supplyTokens = VToken(vToken).totalSupply();\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, supplySpeed);\n            Double memory ratio = supplyTokens > 0\n                ? fraction(accruedSinceUpdate, supplyTokens)\n                : Double({ mantissa: 0 });\n            uint224 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\n            uint224 index = safe224(\n                add_(Double({ mantissa: supplyIndex }), ratio).mantissa,\n                \"new index exceeds 224 bits\"\n            );\n\n            if (isTimeBased) {\n                supplyStateTimeBased.index = index;\n                supplyStateTimeBased.timestamp = blockNumberOrTimestamp;\n            } else {\n                supplyState.index = index;\n                supplyState.block = uint32(blockNumberOrTimestamp);\n            }\n        } else if (deltaBlocksOrTimestamp > 0) {\n            isTimeBased ? supplyStateTimeBased.timestamp = blockNumberOrTimestamp : supplyState.block = uint32(\n                blockNumberOrTimestamp\n            );\n        }\n\n        emit RewardTokenSupplyIndexUpdated(vToken);\n    }\n\n    /**\n     * @notice Accrue REWARD TOKEN to the market by updating the borrow index\n     * @param vToken The market whose borrow index to update\n     * @param marketBorrowIndex The current global borrow index of vToken\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\n     */\n    function _updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) internal {\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\n\n        uint256 borrowSpeed = rewardTokenBorrowSpeeds[vToken];\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\n\n        if (!isTimeBased) {\n            safe32(blockNumberOrTimestamp, \"block number exceeds 32 bits\");\n        }\n\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\n            ? borrowStateTimeBased.lastRewardingTimestamp\n            : uint256(borrowState.lastRewardingBlock);\n\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\n        }\n\n        uint256 deltaBlocksOrTimestamp = sub_(\n            blockNumberOrTimestamp,\n            (isTimeBased ? borrowStateTimeBased.timestamp : uint256(borrowState.block))\n        );\n        if (deltaBlocksOrTimestamp > 0 && borrowSpeed > 0) {\n            uint256 borrowAmount = div_(VToken(vToken).totalBorrows(), marketBorrowIndex);\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, borrowSpeed);\n            Double memory ratio = borrowAmount > 0\n                ? fraction(accruedSinceUpdate, borrowAmount)\n                : Double({ mantissa: 0 });\n            uint224 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\n            uint224 index = safe224(\n                add_(Double({ mantissa: borrowIndex }), ratio).mantissa,\n                \"new index exceeds 224 bits\"\n            );\n\n            if (isTimeBased) {\n                borrowStateTimeBased.index = index;\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\n            } else {\n                borrowState.index = index;\n                borrowState.block = uint32(blockNumberOrTimestamp);\n            }\n        } else if (deltaBlocksOrTimestamp > 0) {\n            if (isTimeBased) {\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\n            } else {\n                borrowState.block = uint32(blockNumberOrTimestamp);\n            }\n        }\n\n        emit RewardTokenBorrowIndexUpdated(vToken, marketBorrowIndex);\n    }\n\n    /**\n     * @notice Initializes the market state for a specific vToken called when contract is block-based\n     * @param vToken The address of the vToken to be initialized\n     * @param blockNumber current block number\n     */\n    function _initializeMarketBlockBased(address vToken, uint32 blockNumber) internal {\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\n\n        /*\n         * Update market state indices\n         */\n        if (supplyState.index == 0) {\n            // Initialize supply state index with default value\n            supplyState.index = INITIAL_INDEX;\n        }\n\n        if (borrowState.index == 0) {\n            // Initialize borrow state index with default value\n            borrowState.index = INITIAL_INDEX;\n        }\n\n        /*\n         * Update market state block numbers\n         */\n        supplyState.block = borrowState.block = blockNumber;\n    }\n\n    /**\n     * @notice Initializes the market state for a specific vToken called when contract is time-based\n     * @param vToken The address of the vToken to be initialized\n     * @param blockTimestamp current block timestamp\n     */\n    function _initializeMarketTimestampBased(address vToken, uint256 blockTimestamp) internal {\n        TimeBasedRewardToken storage supplyState = rewardTokenSupplyStateTimeBased[vToken];\n        TimeBasedRewardToken storage borrowState = rewardTokenBorrowStateTimeBased[vToken];\n\n        /*\n         * Update market state indices\n         */\n        if (supplyState.index == 0) {\n            // Initialize supply state index with default value\n            supplyState.index = INITIAL_INDEX;\n        }\n\n        if (borrowState.index == 0) {\n            // Initialize borrow state index with default value\n            borrowState.index = INITIAL_INDEX;\n        }\n\n        /*\n         * Update market state block timestamp\n         */\n        supplyState.timestamp = borrowState.timestamp = blockTimestamp;\n    }\n}\n"},"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\nimport { IERC20Upgradeable } from \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport { Comptroller } from \"../Comptroller.sol\";\n\n/**\n * @title RewardsDistributorStorage\n * @author Venus\n * @dev Storage for RewardsDistributor\n */\ncontract RewardsDistributorStorage {\n    struct RewardToken {\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\n        uint224 index;\n        // The block number the index was last updated at\n        uint32 block;\n        // The block number at which to stop rewards\n        uint32 lastRewardingBlock;\n    }\n\n    struct TimeBasedRewardToken {\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\n        uint224 index;\n        // The block timestamp the index was last updated at\n        uint256 timestamp;\n        // The block timestamp at which to stop rewards\n        uint256 lastRewardingTimestamp;\n    }\n\n    /// @notice The REWARD TOKEN market supply state for each market\n    mapping(address => RewardToken) public rewardTokenSupplyState;\n\n    /// @notice The REWARD TOKEN borrow index for each market for each supplier as of the last time they accrued REWARD TOKEN\n    mapping(address => mapping(address => uint256)) public rewardTokenSupplierIndex;\n\n    /// @notice The REWARD TOKEN accrued but not yet transferred to each user\n    mapping(address => uint256) public rewardTokenAccrued;\n\n    /// @notice The rate at which rewardToken is distributed to the corresponding borrow market per slot (block or second)\n    mapping(address => uint256) public rewardTokenBorrowSpeeds;\n\n    /// @notice The rate at which rewardToken is distributed to the corresponding supply market per slot (block or second)\n    mapping(address => uint256) public rewardTokenSupplySpeeds;\n\n    /// @notice The REWARD TOKEN market borrow state for each market\n    mapping(address => RewardToken) public rewardTokenBorrowState;\n\n    /// @notice The portion of REWARD TOKEN that each contributor receives per slot (block or second)\n    mapping(address => uint256) public rewardTokenContributorSpeeds;\n\n    /// @notice Last slot (block or second) at which a contributor's REWARD TOKEN rewards have been allocated\n    mapping(address => uint256) public lastContributorBlock;\n\n    /// @notice The REWARD TOKEN borrow index for each market for each borrower as of the last time they accrued REWARD TOKEN\n    mapping(address => mapping(address => uint256)) public rewardTokenBorrowerIndex;\n\n    Comptroller internal comptroller;\n\n    IERC20Upgradeable public rewardToken;\n\n    /// @notice The REWARD TOKEN market supply state for each market\n    mapping(address => TimeBasedRewardToken) public rewardTokenSupplyStateTimeBased;\n\n    /// @notice The REWARD TOKEN market borrow state for each market\n    mapping(address => TimeBasedRewardToken) public rewardTokenBorrowStateTimeBased;\n\n    /**\n     * @dev This empty reserved space is put in place to allow future versions to add new\n     * variables without shifting down storage in the inheritance chain\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n     */\n    uint256[37] private __gap;\n}\n"},"@venusprotocol/isolated-pools/contracts/VToken.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\nimport { Ownable2StepUpgradeable } from \"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\";\nimport { IERC20Upgradeable } from \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\nimport { SafeERC20Upgradeable } from \"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\";\nimport { AccessControlledV8 } from \"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\";\nimport { IProtocolShareReserve } from \"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\";\n\nimport { VTokenInterface } from \"./VTokenInterfaces.sol\";\nimport { ComptrollerInterface, ComptrollerViewInterface } from \"./ComptrollerInterface.sol\";\nimport { TokenErrorReporter } from \"./ErrorReporter.sol\";\nimport { InterestRateModel } from \"./InterestRateModel.sol\";\nimport { ExponentialNoError } from \"./ExponentialNoError.sol\";\nimport { TimeManagerV8 } from \"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\";\nimport { ensureNonzeroAddress } from \"./lib/validators.sol\";\n\n/**\n * @title VToken\n * @author Venus\n * @notice Each asset that is supported by a pool is integrated through an instance of the `VToken` contract. As outlined in the protocol overview,\n * each isolated pool creates its own `vToken` corresponding to an asset. Within a given pool, each included `vToken` is referred to as a market of\n * the pool. The main actions a user regularly interacts with in a market are:\n\n- mint/redeem of vTokens;\n- transfer of vTokens;\n- borrow/repay a loan on an underlying asset;\n- liquidate a borrow or liquidate/heal an account.\n\n * A user supplies the underlying asset to a pool by minting `vTokens`, where the corresponding `vToken` amount is determined by the `exchangeRate`.\n * The `exchangeRate` will change over time, dependent on a number of factors, some of which accrue interest. Additionally, once users have minted\n * `vToken` in a pool, they can borrow any asset in the isolated pool by using their `vToken` as collateral. In order to borrow an asset or use a `vToken`\n * as collateral, the user must be entered into each corresponding market (else, the `vToken` will not be considered collateral for a borrow). Note that\n * a user may borrow up to a portion of their collateral determined by the market’s collateral factor. However, if their borrowed amount exceeds an amount\n * calculated using the market’s corresponding liquidation threshold, the borrow is eligible for liquidation. When a user repays a borrow, they must also\n * pay off interest accrued on the borrow.\n * \n * The Venus protocol includes unique mechanisms for healing an account and liquidating an account. These actions are performed in the `Comptroller`\n * and consider all borrows and collateral for which a given account is entered within a market. These functions may only be called on an account with a\n * total collateral amount that is no larger than a universal `minLiquidatableCollateral` value, which is used for all markets within a `Comptroller`.\n * Both functions settle all of an account’s borrows, but `healAccount()` may add `badDebt` to a vToken. For more detail, see the description of\n * `healAccount()` and `liquidateAccount()` in the `Comptroller` summary section below.\n */\ncontract VToken is\n    Ownable2StepUpgradeable,\n    AccessControlledV8,\n    VTokenInterface,\n    ExponentialNoError,\n    TokenErrorReporter,\n    TimeManagerV8\n{\n    using SafeERC20Upgradeable for IERC20Upgradeable;\n\n    uint256 internal constant DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA = 5e16; // 5%\n\n    // Maximum fraction of interest that can be set aside for reserves\n    uint256 internal constant MAX_RESERVE_FACTOR_MANTISSA = 1e18;\n\n    // Maximum borrow rate that can ever be applied per slot(block or second)\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\n    uint256 internal immutable MAX_BORROW_RATE_MANTISSA;\n\n    /**\n     * Reentrancy Guard **\n     */\n\n    /**\n     * @dev Prevents a contract from calling itself, directly or indirectly.\n     */\n    modifier nonReentrant() {\n        require(_notEntered, \"re-entered\");\n        _notEntered = false;\n        _;\n        _notEntered = true; // get a gas-refund post-Istanbul\n    }\n\n    /**\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\n     * @param blocksPerYear_ The number of blocks per year\n     * @param maxBorrowRateMantissa_ The maximum value of borrowing rate mantissa\n     * @custom:oz-upgrades-unsafe-allow constructor\n     */\n    constructor(\n        bool timeBased_,\n        uint256 blocksPerYear_,\n        uint256 maxBorrowRateMantissa_\n    ) TimeManagerV8(timeBased_, blocksPerYear_) {\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\n        // to set the state variables.\n        require(maxBorrowRateMantissa_ <= 1e18, \"Max borrow rate must be <= 1e18\");\n\n        MAX_BORROW_RATE_MANTISSA = maxBorrowRateMantissa_;\n        _disableInitializers();\n    }\n\n    /**\n     * @notice Construct a new money market\n     * @param underlying_ The address of the underlying asset\n     * @param comptroller_ The address of the Comptroller\n     * @param interestRateModel_ The address of the interest rate model\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\n     * @param name_ ERC-20 name of this token\n     * @param symbol_ ERC-20 symbol of this token\n     * @param decimals_ ERC-20 decimal precision of this token\n     * @param admin_ Address of the administrator of this token\n     * @param accessControlManager_ AccessControlManager contract address\n     * @param riskManagement Addresses of risk & income related contracts\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\n     * @custom:error ZeroAddressNotAllowed is thrown when admin address is zero\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\n     */\n    function initialize(\n        address underlying_,\n        ComptrollerInterface comptroller_,\n        InterestRateModel interestRateModel_,\n        uint256 initialExchangeRateMantissa_,\n        string memory name_,\n        string memory symbol_,\n        uint8 decimals_,\n        address admin_,\n        address accessControlManager_,\n        RiskManagementInit memory riskManagement,\n        uint256 reserveFactorMantissa_\n    ) external initializer {\n        ensureNonzeroAddress(admin_);\n\n        // Initialize the market\n        _initialize(\n            underlying_,\n            comptroller_,\n            interestRateModel_,\n            initialExchangeRateMantissa_,\n            name_,\n            symbol_,\n            decimals_,\n            admin_,\n            accessControlManager_,\n            riskManagement,\n            reserveFactorMantissa_\n        );\n    }\n\n    /**\n     * @notice Transfer `amount` tokens from `msg.sender` to `dst`\n     * @param dst The address of the destination account\n     * @param amount The number of tokens to transfer\n     * @return success True if the transfer succeeded, reverts otherwise\n     * @custom:event Emits Transfer event on success\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\n     * @custom:access Not restricted\n     */\n    function transfer(address dst, uint256 amount) external override nonReentrant returns (bool) {\n        _transferTokens(msg.sender, msg.sender, dst, amount);\n        return true;\n    }\n\n    /**\n     * @notice Transfer `amount` tokens from `src` to `dst`\n     * @param src The address of the source account\n     * @param dst The address of the destination account\n     * @param amount The number of tokens to transfer\n     * @return success True if the transfer succeeded, reverts otherwise\n     * @custom:event Emits Transfer event on success\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\n     * @custom:access Not restricted\n     */\n    function transferFrom(address src, address dst, uint256 amount) external override nonReentrant returns (bool) {\n        _transferTokens(msg.sender, src, dst, amount);\n        return true;\n    }\n\n    /**\n     * @notice Approve `spender` to transfer up to `amount` from `src`\n     * @dev This will overwrite the approval amount for `spender`\n     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\n     * @param spender The address of the account which may transfer tokens\n     * @param amount The number of tokens that are approved (uint256.max means infinite)\n     * @return success Whether or not the approval succeeded\n     * @custom:event Emits Approval event\n     * @custom:access Not restricted\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\n     */\n    function approve(address spender, uint256 amount) external override returns (bool) {\n        ensureNonzeroAddress(spender);\n\n        address src = msg.sender;\n        transferAllowances[src][spender] = amount;\n        emit Approval(src, spender, amount);\n        return true;\n    }\n\n    /**\n     * @notice Increase approval for `spender`\n     * @param spender The address of the account which may transfer tokens\n     * @param addedValue The number of additional tokens spender can transfer\n     * @return success Whether or not the approval succeeded\n     * @custom:event Emits Approval event\n     * @custom:access Not restricted\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\n     */\n    function increaseAllowance(address spender, uint256 addedValue) external override returns (bool) {\n        ensureNonzeroAddress(spender);\n\n        address src = msg.sender;\n        uint256 newAllowance = transferAllowances[src][spender];\n        newAllowance += addedValue;\n        transferAllowances[src][spender] = newAllowance;\n\n        emit Approval(src, spender, newAllowance);\n        return true;\n    }\n\n    /**\n     * @notice Decreases approval for `spender`\n     * @param spender The address of the account which may transfer tokens\n     * @param subtractedValue The number of tokens to remove from total approval\n     * @return success Whether or not the approval succeeded\n     * @custom:event Emits Approval event\n     * @custom:access Not restricted\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\n     */\n    function decreaseAllowance(address spender, uint256 subtractedValue) external override returns (bool) {\n        ensureNonzeroAddress(spender);\n\n        address src = msg.sender;\n        uint256 currentAllowance = transferAllowances[src][spender];\n        require(currentAllowance >= subtractedValue, \"decreased allowance below zero\");\n        unchecked {\n            currentAllowance -= subtractedValue;\n        }\n\n        transferAllowances[src][spender] = currentAllowance;\n\n        emit Approval(src, spender, currentAllowance);\n        return true;\n    }\n\n    /**\n     * @notice Get the underlying balance of the `owner`\n     * @dev This also accrues interest in a transaction\n     * @param owner The address of the account to query\n     * @return amount The amount of underlying owned by `owner`\n     */\n    function balanceOfUnderlying(address owner) external override returns (uint256) {\n        Exp memory exchangeRate = Exp({ mantissa: exchangeRateCurrent() });\n        return mul_ScalarTruncate(exchangeRate, accountTokens[owner]);\n    }\n\n    /**\n     * @notice Returns the current total borrows plus accrued interest\n     * @return totalBorrows The total borrows with interest\n     */\n    function totalBorrowsCurrent() external override nonReentrant returns (uint256) {\n        accrueInterest();\n        return totalBorrows;\n    }\n\n    /**\n     * @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\n     * @param account The address whose balance should be calculated after updating borrowIndex\n     * @return borrowBalance The calculated balance\n     */\n    function borrowBalanceCurrent(address account) external override nonReentrant returns (uint256) {\n        accrueInterest();\n        return _borrowBalanceStored(account);\n    }\n\n    /**\n     * @notice Sender supplies assets into the market and receives vTokens in exchange\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\n     * @param mintAmount The amount of the underlying asset to supply\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\n     * @custom:access Not restricted\n     */\n    function mint(uint256 mintAmount) external override nonReentrant returns (uint256) {\n        accrueInterest();\n\n        _mintFresh(msg.sender, msg.sender, mintAmount);\n        return NO_ERROR;\n    }\n\n    /**\n     * @notice Sender calls on-behalf of minter. minter supplies assets into the market and receives vTokens in exchange\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\n     * @param minter User whom the supply will be attributed to\n     * @param mintAmount The amount of the underlying asset to supply\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\n     * @custom:access Not restricted\n     * @custom:error ZeroAddressNotAllowed is thrown when minter address is zero\n     */\n    function mintBehalf(address minter, uint256 mintAmount) external override nonReentrant returns (uint256) {\n        ensureNonzeroAddress(minter);\n\n        accrueInterest();\n\n        _mintFresh(msg.sender, minter, mintAmount);\n        return NO_ERROR;\n    }\n\n    /**\n     * @notice Sender redeems vTokens in exchange for the underlying asset\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\n     * @param redeemTokens The number of vTokens to redeem into underlying\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\n     * @custom:access Not restricted\n     */\n    function redeem(uint256 redeemTokens) external override nonReentrant returns (uint256) {\n        accrueInterest();\n\n        _redeemFresh(msg.sender, msg.sender, redeemTokens, 0);\n        return NO_ERROR;\n    }\n\n    /**\n     * @notice Sender redeems assets on behalf of some other address. This function is only available\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\n     * @param redeemer The user on behalf of whom to redeem\n     * @param redeemTokens The number of vTokens to redeem into underlying\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\n     * @custom:access Not restricted\n     */\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external override nonReentrant returns (uint256) {\n        _ensureSenderIsDelegateOf(redeemer);\n\n        accrueInterest();\n\n        _redeemFresh(redeemer, msg.sender, redeemTokens, 0);\n        return NO_ERROR;\n    }\n\n    /**\n     * @notice Sender redeems vTokens in exchange for a specified amount of underlying asset\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\n     */\n    function redeemUnderlying(uint256 redeemAmount) external override nonReentrant returns (uint256) {\n        accrueInterest();\n\n        _redeemFresh(msg.sender, msg.sender, 0, redeemAmount);\n        return NO_ERROR;\n    }\n\n    /**\n     * @notice Sender redeems underlying assets on behalf of some other address. This function is only available\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\n     * @param redeemer, on behalf of whom to redeem\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\n     * @custom:access Not restricted\n     */\n    function redeemUnderlyingBehalf(\n        address redeemer,\n        uint256 redeemAmount\n    ) external override nonReentrant returns (uint256) {\n        _ensureSenderIsDelegateOf(redeemer);\n\n        accrueInterest();\n\n        _redeemFresh(redeemer, msg.sender, 0, redeemAmount);\n        return NO_ERROR;\n    }\n\n    /**\n     * @notice Sender borrows assets from the protocol to their own address\n     * @param borrowAmount The amount of the underlying asset to borrow\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\n     * @custom:event Emits Borrow event; may emit AccrueInterest\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\n     * @custom:access Not restricted\n     */\n    function borrow(uint256 borrowAmount) external override nonReentrant returns (uint256) {\n        accrueInterest();\n\n        _borrowFresh(msg.sender, msg.sender, borrowAmount);\n        return NO_ERROR;\n    }\n\n    /**\n     * @notice Sender borrows assets on behalf of some other address. This function is only available\n     *   for senders, explicitly marked as delegates of the borrower using `comptroller.updateDelegate`\n     * @param borrower The borrower, on behalf of whom to borrow\n     * @param borrowAmount The amount of the underlying asset to borrow\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\n     * @custom:error DelegateNotApproved is thrown if caller is not approved delegate\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\n     * @custom:event Emits Borrow event; may emit AccrueInterest\n     * @custom:access Not restricted\n     */\n    function borrowBehalf(address borrower, uint256 borrowAmount) external override returns (uint256) {\n        _ensureSenderIsDelegateOf(borrower);\n        accrueInterest();\n\n        _borrowFresh(borrower, msg.sender, borrowAmount);\n        return NO_ERROR;\n    }\n\n    /**\n     * @notice Sender repays their own borrow\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\n     * @custom:access Not restricted\n     */\n    function repayBorrow(uint256 repayAmount) external override nonReentrant returns (uint256) {\n        accrueInterest();\n\n        _repayBorrowFresh(msg.sender, msg.sender, repayAmount);\n        return NO_ERROR;\n    }\n\n    /**\n     * @notice Sender repays a borrow belonging to borrower\n     * @param borrower the account with the debt being payed off\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\n     * @custom:access Not restricted\n     */\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external override nonReentrant returns (uint256) {\n        accrueInterest();\n\n        _repayBorrowFresh(msg.sender, borrower, repayAmount);\n        return NO_ERROR;\n    }\n\n    /**\n     * @notice The sender liquidates the borrowers collateral.\n     *  The collateral seized is transferred to the liquidator.\n     * @param borrower The borrower of this vToken to be liquidated\n     * @param repayAmount The amount of the underlying borrowed asset to repay\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\n     * @custom:access Not restricted\n     */\n    function liquidateBorrow(\n        address borrower,\n        uint256 repayAmount,\n        VTokenInterface vTokenCollateral\n    ) external override returns (uint256) {\n        _liquidateBorrow(msg.sender, borrower, repayAmount, vTokenCollateral, false);\n        return NO_ERROR;\n    }\n\n    /**\n     * @notice sets protocol share accumulated from liquidations\n     * @dev must be equal or less than liquidation incentive - 1\n     * @param newProtocolSeizeShareMantissa_ new protocol share mantissa\n     * @custom:event Emits NewProtocolSeizeShare event on success\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\n     * @custom:error ProtocolSeizeShareTooBig is thrown when the new seize share is too high\n     * @custom:access Controlled by AccessControlManager\n     */\n    function setProtocolSeizeShare(uint256 newProtocolSeizeShareMantissa_) external {\n        _checkAccessAllowed(\"setProtocolSeizeShare(uint256)\");\n        uint256 liquidationIncentive = ComptrollerViewInterface(address(comptroller)).liquidationIncentiveMantissa();\n        if (newProtocolSeizeShareMantissa_ + MANTISSA_ONE > liquidationIncentive) {\n            revert ProtocolSeizeShareTooBig();\n        }\n\n        uint256 oldProtocolSeizeShareMantissa = protocolSeizeShareMantissa;\n        protocolSeizeShareMantissa = newProtocolSeizeShareMantissa_;\n        emit NewProtocolSeizeShare(oldProtocolSeizeShareMantissa, newProtocolSeizeShareMantissa_);\n    }\n\n    /**\n     * @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\n     * @dev Admin function to accrue interest and set a new reserve factor\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\n     * @custom:event Emits NewReserveFactor event; may emit AccrueInterest\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\n     * @custom:error SetReserveFactorBoundsCheck is thrown when the new reserve factor is too high\n     * @custom:access Controlled by AccessControlManager\n     */\n    function setReserveFactor(uint256 newReserveFactorMantissa) external override nonReentrant {\n        _checkAccessAllowed(\"setReserveFactor(uint256)\");\n\n        accrueInterest();\n        _setReserveFactorFresh(newReserveFactorMantissa);\n    }\n\n    /**\n     * @notice Accrues interest and reduces reserves by transferring to the protocol reserve contract\n     * @dev Gracefully return if reserves already reduced in accrueInterest\n     * @param reduceAmount Amount of reduction to reserves\n     * @custom:event Emits ReservesReduced event; may emit AccrueInterest\n     * @custom:error ReduceReservesCashNotAvailable is thrown when the vToken does not have sufficient cash\n     * @custom:error ReduceReservesCashValidation is thrown when trying to withdraw more cash than the reserves have\n     * @custom:access Not restricted\n     */\n    function reduceReserves(uint256 reduceAmount) external override nonReentrant {\n        accrueInterest();\n        if (reduceReservesBlockNumber == getBlockNumberOrTimestamp()) return;\n        _reduceReservesFresh(reduceAmount);\n    }\n\n    /**\n     * @notice The sender adds to reserves.\n     * @param addAmount The amount of underlying token to add as reserves\n     * @custom:event Emits ReservesAdded event; may emit AccrueInterest\n     * @custom:access Not restricted\n     */\n    function addReserves(uint256 addAmount) external override nonReentrant {\n        accrueInterest();\n        _addReservesFresh(addAmount);\n    }\n\n    /**\n     * @notice accrues interest and updates the interest rate model using _setInterestRateModelFresh\n     * @dev Admin function to accrue interest and update the interest rate model\n     * @param newInterestRateModel the new interest rate model to use\n     * @custom:event Emits NewMarketInterestRateModel event; may emit AccrueInterest\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\n     * @custom:access Controlled by AccessControlManager\n     */\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external override {\n        _checkAccessAllowed(\"setInterestRateModel(address)\");\n\n        accrueInterest();\n        _setInterestRateModelFresh(newInterestRateModel);\n    }\n\n    /**\n     * @notice Repays a certain amount of debt, treats the rest of the borrow as bad debt, essentially\n     *   \"forgiving\" the borrower. Healing is a situation that should rarely happen. However, some pools\n     *   may list risky assets or be configured improperly – we want to still handle such cases gracefully.\n     *   We assume that Comptroller does the seizing, so this function is only available to Comptroller.\n     * @dev This function does not call any Comptroller hooks (like \"healAllowed\"), because we assume\n     *   the Comptroller does all the necessary checks before calling this function.\n     * @param payer account who repays the debt\n     * @param borrower account to heal\n     * @param repayAmount amount to repay\n     * @custom:event Emits RepayBorrow, BadDebtIncreased events; may emit AccrueInterest\n     * @custom:error HealBorrowUnauthorized is thrown when the request does not come from Comptroller\n     * @custom:access Only Comptroller\n     */\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external override nonReentrant {\n        if (repayAmount != 0) {\n            comptroller.preRepayHook(address(this), borrower);\n        }\n\n        if (msg.sender != address(comptroller)) {\n            revert HealBorrowUnauthorized();\n        }\n\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\n        uint256 totalBorrowsNew = totalBorrows;\n\n        uint256 actualRepayAmount;\n        if (repayAmount != 0) {\n            // _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\n            // We violate checks-effects-interactions here to account for tokens that take transfer fees\n            actualRepayAmount = _doTransferIn(payer, repayAmount);\n            totalBorrowsNew = totalBorrowsNew - actualRepayAmount;\n            emit RepayBorrow(\n                payer,\n                borrower,\n                actualRepayAmount,\n                accountBorrowsPrev - actualRepayAmount,\n                totalBorrowsNew\n            );\n        }\n\n        // The transaction will fail if trying to repay too much\n        uint256 badDebtDelta = accountBorrowsPrev - actualRepayAmount;\n        if (badDebtDelta != 0) {\n            uint256 badDebtOld = badDebt;\n            uint256 badDebtNew = badDebtOld + badDebtDelta;\n            totalBorrowsNew = totalBorrowsNew - badDebtDelta;\n            badDebt = badDebtNew;\n\n            // We treat healing as \"repayment\", where vToken is the payer\n            emit RepayBorrow(address(this), borrower, badDebtDelta, 0, totalBorrowsNew);\n            emit BadDebtIncreased(borrower, badDebtDelta, badDebtOld, badDebtNew);\n        }\n\n        accountBorrows[borrower].principal = 0;\n        accountBorrows[borrower].interestIndex = borrowIndex;\n        totalBorrows = totalBorrowsNew;\n\n        emit HealBorrow(payer, borrower, repayAmount);\n    }\n\n    /**\n     * @notice The extended version of liquidations, callable only by Comptroller. May skip\n     *  the close factor check. The collateral seized is transferred to the liquidator.\n     * @param liquidator The address repaying the borrow and seizing collateral\n     * @param borrower The borrower of this vToken to be liquidated\n     * @param repayAmount The amount of the underlying borrowed asset to repay\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\n     *   regardless of the account liquidity\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\n     * @custom:error ForceLiquidateBorrowUnauthorized is thrown when the request does not come from Comptroller\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\n     * @custom:access Only Comptroller\n     */\n    function forceLiquidateBorrow(\n        address liquidator,\n        address borrower,\n        uint256 repayAmount,\n        VTokenInterface vTokenCollateral,\n        bool skipLiquidityCheck\n    ) external override {\n        if (msg.sender != address(comptroller)) {\n            revert ForceLiquidateBorrowUnauthorized();\n        }\n        _liquidateBorrow(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\n    }\n\n    /**\n     * @notice Transfers collateral tokens (this market) to the liquidator.\n     * @dev Will fail unless called by another vToken during the process of liquidation.\n     *  It's absolutely critical to use msg.sender as the borrowed vToken and not a parameter.\n     * @param liquidator The account receiving seized collateral\n     * @param borrower The account having collateral seized\n     * @param seizeTokens The number of vTokens to seize\n     * @custom:event Emits Transfer, ReservesAdded events\n     * @custom:error LiquidateSeizeLiquidatorIsBorrower is thrown when trying to liquidate self\n     * @custom:access Not restricted\n     */\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external override nonReentrant {\n        _seize(msg.sender, liquidator, borrower, seizeTokens);\n    }\n\n    /**\n     * @notice Updates bad debt\n     * @dev Called only when bad debt is recovered from auction\n     * @param recoveredAmount_ The amount of bad debt recovered\n     * @custom:event Emits BadDebtRecovered event\n     * @custom:access Only Shortfall contract\n     */\n    function badDebtRecovered(uint256 recoveredAmount_) external {\n        require(msg.sender == shortfall, \"only shortfall contract can update bad debt\");\n        require(recoveredAmount_ <= badDebt, \"more than bad debt recovered from auction\");\n\n        uint256 badDebtOld = badDebt;\n        uint256 badDebtNew = badDebtOld - recoveredAmount_;\n        badDebt = badDebtNew;\n\n        emit BadDebtRecovered(badDebtOld, badDebtNew);\n    }\n\n    /**\n     * @notice Sets protocol share reserve contract address\n     * @param protocolShareReserve_ The address of the protocol share reserve contract\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\n     * @custom:access Only Governance\n     */\n    function setProtocolShareReserve(address payable protocolShareReserve_) external onlyOwner {\n        _setProtocolShareReserve(protocolShareReserve_);\n    }\n\n    /**\n     * @notice Sets shortfall contract address\n     * @param shortfall_ The address of the shortfall contract\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\n     * @custom:access Only Governance\n     */\n    function setShortfallContract(address shortfall_) external onlyOwner {\n        _setShortfallContract(shortfall_);\n    }\n\n    /**\n     * @notice A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)\n     * @param token The address of the ERC-20 token to sweep\n     * @custom:access Only Governance\n     */\n    function sweepToken(IERC20Upgradeable token) external override {\n        require(msg.sender == owner(), \"VToken::sweepToken: only admin can sweep tokens\");\n        require(address(token) != underlying, \"VToken::sweepToken: can not sweep underlying token\");\n        uint256 balance = token.balanceOf(address(this));\n        token.safeTransfer(owner(), balance);\n\n        emit SweepToken(address(token));\n    }\n\n    /**\n     * @notice A public function to set new threshold of slot(block or second) difference after which funds will be sent to the protocol share reserve\n     * @param _newReduceReservesBlockOrTimestampDelta slot(block or second) difference value\n     * @custom:access Only Governance\n     */\n    function setReduceReservesBlockDelta(uint256 _newReduceReservesBlockOrTimestampDelta) external {\n        _checkAccessAllowed(\"setReduceReservesBlockDelta(uint256)\");\n        require(_newReduceReservesBlockOrTimestampDelta > 0, \"Invalid Input\");\n        emit NewReduceReservesBlockDelta(reduceReservesBlockDelta, _newReduceReservesBlockOrTimestampDelta);\n        reduceReservesBlockDelta = _newReduceReservesBlockOrTimestampDelta;\n    }\n\n    /**\n     * @notice Get the current allowance from `owner` for `spender`\n     * @param owner The address of the account which owns the tokens to be spent\n     * @param spender The address of the account which may transfer tokens\n     * @return amount The number of tokens allowed to be spent (type(uint256).max means infinite)\n     */\n    function allowance(address owner, address spender) external view override returns (uint256) {\n        return transferAllowances[owner][spender];\n    }\n\n    /**\n     * @notice Get the token balance of the `owner`\n     * @param owner The address of the account to query\n     * @return amount The number of tokens owned by `owner`\n     */\n    function balanceOf(address owner) external view override returns (uint256) {\n        return accountTokens[owner];\n    }\n\n    /**\n     * @notice Get a snapshot of the account's balances, and the cached exchange rate\n     * @dev This is used by comptroller to more efficiently perform liquidity checks.\n     * @param account Address of the account to snapshot\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\n     * @return vTokenBalance User's balance of vTokens\n     * @return borrowBalance Amount owed in terms of underlying\n     * @return exchangeRate Stored exchange rate\n     */\n    function getAccountSnapshot(\n        address account\n    )\n        external\n        view\n        override\n        returns (uint256 error, uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRate)\n    {\n        return (NO_ERROR, accountTokens[account], _borrowBalanceStored(account), _exchangeRateStored());\n    }\n\n    /**\n     * @notice Get cash balance of this vToken in the underlying asset\n     * @return cash The quantity of underlying asset owned by this contract\n     */\n    function getCash() external view override returns (uint256) {\n        return _getCashPrior();\n    }\n\n    /**\n     * @notice Returns the current per slot(block or second) borrow interest rate for this vToken\n     * @return rate The borrow interest rate per slot(block or second), scaled by 1e18\n     */\n    function borrowRatePerBlock() external view override returns (uint256) {\n        return interestRateModel.getBorrowRate(_getCashPrior(), totalBorrows, totalReserves, badDebt);\n    }\n\n    /**\n     * @notice Returns the current per-slot(block or second) supply interest rate for this v\n     * @return rate The supply interest rate per slot(block or second), scaled by 1e18\n     */\n    function supplyRatePerBlock() external view override returns (uint256) {\n        return\n            interestRateModel.getSupplyRate(\n                _getCashPrior(),\n                totalBorrows,\n                totalReserves,\n                reserveFactorMantissa,\n                badDebt\n            );\n    }\n\n    /**\n     * @notice Return the borrow balance of account based on stored data\n     * @param account The address whose balance should be calculated\n     * @return borrowBalance The calculated balance\n     */\n    function borrowBalanceStored(address account) external view override returns (uint256) {\n        return _borrowBalanceStored(account);\n    }\n\n    /**\n     * @notice Calculates the exchange rate from the underlying to the VToken\n     * @dev This function does not accrue interest before calculating the exchange rate\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\n     */\n    function exchangeRateStored() external view override returns (uint256) {\n        return _exchangeRateStored();\n    }\n\n    /**\n     * @notice Accrue interest then return the up-to-date exchange rate\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\n     */\n    function exchangeRateCurrent() public override nonReentrant returns (uint256) {\n        accrueInterest();\n        return _exchangeRateStored();\n    }\n\n    /**\n     * @notice Applies accrued interest to total borrows and reserves\n     * @dev This calculates interest accrued from the last checkpointed slot(block or second)\n     *  up to the current slot(block or second) and writes new checkpoint to storage and\n     *  reduce spread reserves to protocol share reserve\n     *  if currentSlot - reduceReservesBlockNumber >= slotDelta\n     * @return Always NO_ERROR\n     * @custom:event Emits AccrueInterest event on success\n     * @custom:access Not restricted\n     */\n    function accrueInterest() public virtual override returns (uint256) {\n        /* Remember the initial block number or timestamp */\n        uint256 currentSlotNumber = getBlockNumberOrTimestamp();\n        uint256 accrualSlotNumberPrior = accrualBlockNumber;\n\n        /* Short-circuit accumulating 0 interest */\n        if (accrualSlotNumberPrior == currentSlotNumber) {\n            return NO_ERROR;\n        }\n\n        /* Read the previous values out of storage */\n        uint256 cashPrior = _getCashPrior();\n        uint256 borrowsPrior = totalBorrows;\n        uint256 reservesPrior = totalReserves;\n        uint256 borrowIndexPrior = borrowIndex;\n\n        /* Calculate the current borrow interest rate */\n        uint256 borrowRateMantissa = interestRateModel.getBorrowRate(cashPrior, borrowsPrior, reservesPrior, badDebt);\n        require(borrowRateMantissa <= MAX_BORROW_RATE_MANTISSA, \"borrow rate is absurdly high\");\n\n        /* Calculate the number of slots elapsed since the last accrual */\n        uint256 slotDelta = currentSlotNumber - accrualSlotNumberPrior;\n\n        /*\n         * Calculate the interest accumulated into borrows and reserves and the new index:\n         *  simpleInterestFactor = borrowRate * slotDelta\n         *  interestAccumulated = simpleInterestFactor * totalBorrows\n         *  totalBorrowsNew = interestAccumulated + totalBorrows\n         *  totalReservesNew = interestAccumulated * reserveFactor + totalReserves\n         *  borrowIndexNew = simpleInterestFactor * borrowIndex + borrowIndex\n         */\n\n        Exp memory simpleInterestFactor = mul_(Exp({ mantissa: borrowRateMantissa }), slotDelta);\n        uint256 interestAccumulated = mul_ScalarTruncate(simpleInterestFactor, borrowsPrior);\n        uint256 totalBorrowsNew = interestAccumulated + borrowsPrior;\n        uint256 totalReservesNew = mul_ScalarTruncateAddUInt(\n            Exp({ mantissa: reserveFactorMantissa }),\n            interestAccumulated,\n            reservesPrior\n        );\n        uint256 borrowIndexNew = mul_ScalarTruncateAddUInt(simpleInterestFactor, borrowIndexPrior, borrowIndexPrior);\n\n        /////////////////////////\n        // EFFECTS & INTERACTIONS\n        // (No safe failures beyond this point)\n\n        /* We write the previously calculated values into storage */\n        accrualBlockNumber = currentSlotNumber;\n        borrowIndex = borrowIndexNew;\n        totalBorrows = totalBorrowsNew;\n        totalReserves = totalReservesNew;\n\n        if (currentSlotNumber - reduceReservesBlockNumber >= reduceReservesBlockDelta) {\n            reduceReservesBlockNumber = currentSlotNumber;\n            if (cashPrior < totalReservesNew) {\n                _reduceReservesFresh(cashPrior);\n            } else {\n                _reduceReservesFresh(totalReservesNew);\n            }\n        }\n\n        /* We emit an AccrueInterest event */\n        emit AccrueInterest(cashPrior, interestAccumulated, borrowIndexNew, totalBorrowsNew);\n\n        return NO_ERROR;\n    }\n\n    /**\n     * @notice User supplies assets into the market and receives vTokens in exchange\n     * @dev Assumes interest has already been accrued up to the current block or timestamp\n     * @param payer The address of the account which is sending the assets for supply\n     * @param minter The address of the account which is supplying the assets\n     * @param mintAmount The amount of the underlying asset to supply\n     */\n    function _mintFresh(address payer, address minter, uint256 mintAmount) internal {\n        /* Fail if mint not allowed */\n        comptroller.preMintHook(address(this), minter, mintAmount);\n\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\n            revert MintFreshnessCheck();\n        }\n\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\n\n        /////////////////////////\n        // EFFECTS & INTERACTIONS\n        // (No safe failures beyond this point)\n\n        /*\n         *  We call `_doTransferIn` for the minter and the mintAmount.\n         *  `_doTransferIn` reverts if anything goes wrong, since we can't be sure if\n         *  side-effects occurred. The function returns the amount actually transferred,\n         *  in case of a fee. On success, the vToken holds an additional `actualMintAmount`\n         *  of cash.\n         */\n        uint256 actualMintAmount = _doTransferIn(payer, mintAmount);\n\n        /*\n         * We get the current exchange rate and calculate the number of vTokens to be minted:\n         *  mintTokens = actualMintAmount / exchangeRate\n         */\n\n        uint256 mintTokens = div_(actualMintAmount, exchangeRate);\n\n        /*\n         * We calculate the new total supply of vTokens and minter token balance, checking for overflow:\n         *  totalSupplyNew = totalSupply + mintTokens\n         *  accountTokensNew = accountTokens[minter] + mintTokens\n         * And write them into storage\n         */\n        totalSupply = totalSupply + mintTokens;\n        uint256 balanceAfter = accountTokens[minter] + mintTokens;\n        accountTokens[minter] = balanceAfter;\n\n        /* We emit a Mint event, and a Transfer event */\n        emit Mint(minter, actualMintAmount, mintTokens, balanceAfter);\n        emit Transfer(address(0), minter, mintTokens);\n\n        /* We call the defense and prime accrue interest hook */\n        comptroller.mintVerify(address(this), minter, actualMintAmount, mintTokens);\n    }\n\n    /**\n     * @notice Redeemer redeems vTokens in exchange for the underlying assets, transferred to the receiver. Redeemer and receiver can be the same\n     *   address, or different addresses if the receiver was previously approved by the redeemer as a valid delegate (see Comptroller.updateDelegate)\n     * @dev Assumes interest has already been accrued up to the current slot(block or second)\n     * @param redeemer The address of the account which is redeeming the tokens\n     * @param receiver The receiver of the underlying tokens\n     * @param redeemTokensIn The number of vTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be non-zero)\n     * @param redeemAmountIn The number of underlying tokens to receive from redeeming vTokens (only one of redeemTokensIn or redeemAmountIn may be non-zero)\n     */\n    function _redeemFresh(address redeemer, address receiver, uint256 redeemTokensIn, uint256 redeemAmountIn) internal {\n        require(redeemTokensIn == 0 || redeemAmountIn == 0, \"one of redeemTokensIn or redeemAmountIn must be zero\");\n\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\n            revert RedeemFreshnessCheck();\n        }\n\n        /* exchangeRate = invoke Exchange Rate Stored() */\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\n\n        uint256 redeemTokens;\n        uint256 redeemAmount;\n\n        /* If redeemTokensIn > 0: */\n        if (redeemTokensIn > 0) {\n            /*\n             * We calculate the exchange rate and the amount of underlying to be redeemed:\n             *  redeemTokens = redeemTokensIn\n             */\n            redeemTokens = redeemTokensIn;\n        } else {\n            /*\n             * We get the current exchange rate and calculate the amount to be redeemed:\n             *  redeemTokens = redeemAmountIn / exchangeRate\n             */\n            redeemTokens = div_(redeemAmountIn, exchangeRate);\n\n            uint256 _redeemAmount = mul_(redeemTokens, exchangeRate);\n            if (_redeemAmount != 0 && _redeemAmount != redeemAmountIn) redeemTokens++; // round up\n        }\n\n        // redeemAmount = exchangeRate * redeemTokens\n        redeemAmount = mul_ScalarTruncate(exchangeRate, redeemTokens);\n\n        // Revert if amount is zero\n        if (redeemAmount == 0) {\n            revert(\"redeemAmount is zero\");\n        }\n\n        /* Fail if redeem not allowed */\n        comptroller.preRedeemHook(address(this), redeemer, redeemTokens);\n\n        /* Fail gracefully if protocol has insufficient cash */\n        if (_getCashPrior() - totalReserves < redeemAmount) {\n            revert RedeemTransferOutNotPossible();\n        }\n\n        /////////////////////////\n        // EFFECTS & INTERACTIONS\n        // (No safe failures beyond this point)\n\n        /*\n         * We write the previously calculated values into storage.\n         *  Note: Avoid token reentrancy attacks by writing reduced supply before external transfer.\n         */\n        totalSupply = totalSupply - redeemTokens;\n        uint256 balanceAfter = accountTokens[redeemer] - redeemTokens;\n        accountTokens[redeemer] = balanceAfter;\n\n        /*\n         * We invoke _doTransferOut for the receiver and the redeemAmount.\n         *  On success, the vToken has redeemAmount less of cash.\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\n         */\n        _doTransferOut(receiver, redeemAmount);\n\n        /* We emit a Transfer event, and a Redeem event */\n        emit Transfer(redeemer, address(this), redeemTokens);\n        emit Redeem(redeemer, redeemAmount, redeemTokens, balanceAfter);\n\n        /* We call the defense and prime accrue interest hook */\n        comptroller.redeemVerify(address(this), redeemer, redeemAmount, redeemTokens);\n    }\n\n    /**\n     * @notice Users or their delegates borrow assets from the protocol\n     * @param borrower User who borrows the assets\n     * @param receiver The receiver of the tokens, if called by a delegate\n     * @param borrowAmount The amount of the underlying asset to borrow\n     */\n    function _borrowFresh(address borrower, address receiver, uint256 borrowAmount) internal {\n        /* Fail if borrow not allowed */\n        comptroller.preBorrowHook(address(this), borrower, borrowAmount);\n\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\n            revert BorrowFreshnessCheck();\n        }\n\n        /* Fail gracefully if protocol has insufficient underlying cash */\n        if (_getCashPrior() - totalReserves < borrowAmount) {\n            revert BorrowCashNotAvailable();\n        }\n\n        /*\n         * We calculate the new borrower and total borrow balances, failing on overflow:\n         *  accountBorrowNew = accountBorrow + borrowAmount\n         *  totalBorrowsNew = totalBorrows + borrowAmount\n         */\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\n        uint256 accountBorrowsNew = accountBorrowsPrev + borrowAmount;\n        uint256 totalBorrowsNew = totalBorrows + borrowAmount;\n\n        /////////////////////////\n        // EFFECTS & INTERACTIONS\n        // (No safe failures beyond this point)\n\n        /*\n         * We write the previously calculated values into storage.\n         *  Note: Avoid token reentrancy attacks by writing increased borrow before external transfer.\n        `*/\n        accountBorrows[borrower].principal = accountBorrowsNew;\n        accountBorrows[borrower].interestIndex = borrowIndex;\n        totalBorrows = totalBorrowsNew;\n\n        /*\n         * We invoke _doTransferOut for the receiver and the borrowAmount.\n         *  On success, the vToken borrowAmount less of cash.\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\n         */\n        _doTransferOut(receiver, borrowAmount);\n\n        /* We emit a Borrow event */\n        emit Borrow(borrower, borrowAmount, accountBorrowsNew, totalBorrowsNew);\n\n        /* We call the defense and prime accrue interest hook */\n        comptroller.borrowVerify(address(this), borrower, borrowAmount);\n    }\n\n    /**\n     * @notice Borrows are repaid by another user (possibly the borrower).\n     * @param payer the account paying off the borrow\n     * @param borrower the account with the debt being payed off\n     * @param repayAmount the amount of underlying tokens being returned, or type(uint256).max for the full outstanding amount\n     * @return (uint) the actual repayment amount.\n     */\n    function _repayBorrowFresh(address payer, address borrower, uint256 repayAmount) internal returns (uint256) {\n        /* Fail if repayBorrow not allowed */\n        comptroller.preRepayHook(address(this), borrower);\n\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\n            revert RepayBorrowFreshnessCheck();\n        }\n\n        /* We fetch the amount the borrower owes, with accumulated interest */\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\n\n        uint256 repayAmountFinal = repayAmount >= accountBorrowsPrev ? accountBorrowsPrev : repayAmount;\n\n        /////////////////////////\n        // EFFECTS & INTERACTIONS\n        // (No safe failures beyond this point)\n\n        /*\n         * We call _doTransferIn for the payer and the repayAmount\n         *  On success, the vToken holds an additional repayAmount of cash.\n         *  _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\n         *   it returns the amount actually transferred, in case of a fee.\n         */\n        uint256 actualRepayAmount = _doTransferIn(payer, repayAmountFinal);\n\n        /*\n         * We calculate the new borrower and total borrow balances, failing on underflow:\n         *  accountBorrowsNew = accountBorrows - actualRepayAmount\n         *  totalBorrowsNew = totalBorrows - actualRepayAmount\n         */\n        uint256 accountBorrowsNew = accountBorrowsPrev - actualRepayAmount;\n        uint256 totalBorrowsNew = totalBorrows - actualRepayAmount;\n\n        /* We write the previously calculated values into storage */\n        accountBorrows[borrower].principal = accountBorrowsNew;\n        accountBorrows[borrower].interestIndex = borrowIndex;\n        totalBorrows = totalBorrowsNew;\n\n        /* We emit a RepayBorrow event */\n        emit RepayBorrow(payer, borrower, actualRepayAmount, accountBorrowsNew, totalBorrowsNew);\n\n        /* We call the defense and prime accrue interest hook */\n        comptroller.repayBorrowVerify(address(this), payer, borrower, actualRepayAmount, borrowIndex);\n\n        return actualRepayAmount;\n    }\n\n    /**\n     * @notice The sender liquidates the borrowers collateral.\n     *  The collateral seized is transferred to the liquidator.\n     * @param liquidator The address repaying the borrow and seizing collateral\n     * @param borrower The borrower of this vToken to be liquidated\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\n     * @param repayAmount The amount of the underlying borrowed asset to repay\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\n     *   regardless of the account liquidity\n     */\n    function _liquidateBorrow(\n        address liquidator,\n        address borrower,\n        uint256 repayAmount,\n        VTokenInterface vTokenCollateral,\n        bool skipLiquidityCheck\n    ) internal nonReentrant {\n        accrueInterest();\n\n        uint256 error = vTokenCollateral.accrueInterest();\n        if (error != NO_ERROR) {\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted liquidation failed\n            revert LiquidateAccrueCollateralInterestFailed(error);\n        }\n\n        _liquidateBorrowFresh(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\n    }\n\n    /**\n     * @notice The liquidator liquidates the borrowers collateral.\n     *  The collateral seized is transferred to the liquidator.\n     * @param liquidator The address repaying the borrow and seizing collateral\n     * @param borrower The borrower of this vToken to be liquidated\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\n     * @param repayAmount The amount of the underlying borrowed asset to repay\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\n     *   regardless of the account liquidity\n     */\n    function _liquidateBorrowFresh(\n        address liquidator,\n        address borrower,\n        uint256 repayAmount,\n        VTokenInterface vTokenCollateral,\n        bool skipLiquidityCheck\n    ) internal {\n        /* Fail if liquidate not allowed */\n        comptroller.preLiquidateHook(\n            address(this),\n            address(vTokenCollateral),\n            borrower,\n            repayAmount,\n            skipLiquidityCheck\n        );\n\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\n            revert LiquidateFreshnessCheck();\n        }\n\n        /* Verify vTokenCollateral market's slot(block or second) number equals current slot(block or second) number */\n        if (vTokenCollateral.accrualBlockNumber() != getBlockNumberOrTimestamp()) {\n            revert LiquidateCollateralFreshnessCheck();\n        }\n\n        /* Fail if borrower = liquidator */\n        if (borrower == liquidator) {\n            revert LiquidateLiquidatorIsBorrower();\n        }\n\n        /* Fail if repayAmount = 0 */\n        if (repayAmount == 0) {\n            revert LiquidateCloseAmountIsZero();\n        }\n\n        /* Fail if repayAmount = type(uint256).max */\n        if (repayAmount == type(uint256).max) {\n            revert LiquidateCloseAmountIsUintMax();\n        }\n\n        /* Fail if repayBorrow fails */\n        uint256 actualRepayAmount = _repayBorrowFresh(liquidator, borrower, repayAmount);\n\n        /////////////////////////\n        // EFFECTS & INTERACTIONS\n        // (No safe failures beyond this point)\n\n        /* We calculate the number of collateral tokens that will be seized */\n        (uint256 amountSeizeError, uint256 seizeTokens) = comptroller.liquidateCalculateSeizeTokens(\n            address(this),\n            address(vTokenCollateral),\n            actualRepayAmount\n        );\n        require(amountSeizeError == NO_ERROR, \"LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED\");\n\n        /* Revert if borrower collateral token balance < seizeTokens */\n        require(vTokenCollateral.balanceOf(borrower) >= seizeTokens, \"LIQUIDATE_SEIZE_TOO_MUCH\");\n\n        // If this is also the collateral, call _seize internally to avoid re-entrancy, otherwise make an external call\n        if (address(vTokenCollateral) == address(this)) {\n            _seize(address(this), liquidator, borrower, seizeTokens);\n        } else {\n            vTokenCollateral.seize(liquidator, borrower, seizeTokens);\n        }\n\n        /* We emit a LiquidateBorrow event */\n        emit LiquidateBorrow(liquidator, borrower, actualRepayAmount, address(vTokenCollateral), seizeTokens);\n\n        /* We call the defense and prime accrue interest hook */\n        comptroller.liquidateBorrowVerify(\n            address(this),\n            address(vTokenCollateral),\n            liquidator,\n            borrower,\n            actualRepayAmount,\n            seizeTokens\n        );\n    }\n\n    /**\n     * @notice Transfers collateral tokens (this market) to the liquidator.\n     * @dev Called only during an in-kind liquidation, or by liquidateBorrow during the liquidation of another VToken.\n     *  It's absolutely critical to use msg.sender as the seizer vToken and not a parameter.\n     * @param seizerContract The contract seizing the collateral (either borrowed vToken or Comptroller)\n     * @param liquidator The account receiving seized collateral\n     * @param borrower The account having collateral seized\n     * @param seizeTokens The number of vTokens to seize\n     */\n    function _seize(address seizerContract, address liquidator, address borrower, uint256 seizeTokens) internal {\n        /* Fail if seize not allowed */\n        comptroller.preSeizeHook(address(this), seizerContract, liquidator, borrower);\n\n        /* Fail if borrower = liquidator */\n        if (borrower == liquidator) {\n            revert LiquidateSeizeLiquidatorIsBorrower();\n        }\n\n        /*\n         * We calculate the new borrower and liquidator token balances, failing on underflow/overflow:\n         *  borrowerTokensNew = accountTokens[borrower] - seizeTokens\n         *  liquidatorTokensNew = accountTokens[liquidator] + seizeTokens\n         */\n        uint256 liquidationIncentiveMantissa = ComptrollerViewInterface(address(comptroller))\n            .liquidationIncentiveMantissa();\n        uint256 numerator = mul_(seizeTokens, Exp({ mantissa: protocolSeizeShareMantissa }));\n        uint256 protocolSeizeTokens = div_(numerator, Exp({ mantissa: liquidationIncentiveMantissa }));\n        uint256 liquidatorSeizeTokens = seizeTokens - protocolSeizeTokens;\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\n        uint256 protocolSeizeAmount = mul_ScalarTruncate(exchangeRate, protocolSeizeTokens);\n\n        /////////////////////////\n        // EFFECTS & INTERACTIONS\n        // (No safe failures beyond this point)\n\n        /* We write the calculated values into storage */\n        totalSupply = totalSupply - protocolSeizeTokens;\n        accountTokens[borrower] = accountTokens[borrower] - seizeTokens;\n        accountTokens[liquidator] = accountTokens[liquidator] + liquidatorSeizeTokens;\n\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\n        _doTransferOut(protocolShareReserve, protocolSeizeAmount);\n\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\n            address(comptroller),\n            underlying,\n            IProtocolShareReserve.IncomeType.LIQUIDATION\n        );\n\n        /* Emit a Transfer event */\n        emit Transfer(borrower, liquidator, liquidatorSeizeTokens);\n        emit ProtocolSeize(borrower, protocolShareReserve, protocolSeizeAmount);\n\n        /* We call the defense and prime accrue interest hook */\n        comptroller.seizeVerify(address(this), seizerContract, liquidator, borrower, seizeTokens);\n    }\n\n    function _setComptroller(ComptrollerInterface newComptroller) internal {\n        ComptrollerInterface oldComptroller = comptroller;\n        // Ensure invoke comptroller.isComptroller() returns true\n        require(newComptroller.isComptroller(), \"marker method returned false\");\n\n        // Set market's comptroller to newComptroller\n        comptroller = newComptroller;\n\n        // Emit NewComptroller(oldComptroller, newComptroller)\n        emit NewComptroller(oldComptroller, newComptroller);\n    }\n\n    /**\n     * @notice Sets a new reserve factor for the protocol (*requires fresh interest accrual)\n     * @dev Admin function to set a new reserve factor\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\n     */\n    function _setReserveFactorFresh(uint256 newReserveFactorMantissa) internal {\n        // Verify market's slot(block or second) number equals current slot(block or second) number\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\n            revert SetReserveFactorFreshCheck();\n        }\n\n        // Check newReserveFactor ≤ maxReserveFactor\n        if (newReserveFactorMantissa > MAX_RESERVE_FACTOR_MANTISSA) {\n            revert SetReserveFactorBoundsCheck();\n        }\n\n        uint256 oldReserveFactorMantissa = reserveFactorMantissa;\n        reserveFactorMantissa = newReserveFactorMantissa;\n\n        emit NewReserveFactor(oldReserveFactorMantissa, newReserveFactorMantissa);\n    }\n\n    /**\n     * @notice Add reserves by transferring from caller\n     * @dev Requires fresh interest accrual\n     * @param addAmount Amount of addition to reserves\n     * @return actualAddAmount The actual amount added, excluding the potential token fees\n     */\n    function _addReservesFresh(uint256 addAmount) internal returns (uint256) {\n        // totalReserves + actualAddAmount\n        uint256 totalReservesNew;\n        uint256 actualAddAmount;\n\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\n            revert AddReservesFactorFreshCheck(actualAddAmount);\n        }\n\n        actualAddAmount = _doTransferIn(msg.sender, addAmount);\n        totalReservesNew = totalReserves + actualAddAmount;\n        totalReserves = totalReservesNew;\n        emit ReservesAdded(msg.sender, actualAddAmount, totalReservesNew);\n\n        return actualAddAmount;\n    }\n\n    /**\n     * @notice Reduces reserves by transferring to the protocol reserve contract\n     * @dev Requires fresh interest accrual\n     * @param reduceAmount Amount of reduction to reserves\n     */\n    function _reduceReservesFresh(uint256 reduceAmount) internal {\n        if (reduceAmount == 0) {\n            return;\n        }\n        // totalReserves - reduceAmount\n        uint256 totalReservesNew;\n\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\n            revert ReduceReservesFreshCheck();\n        }\n\n        // Fail gracefully if protocol has insufficient underlying cash\n        if (_getCashPrior() < reduceAmount) {\n            revert ReduceReservesCashNotAvailable();\n        }\n\n        // Check reduceAmount ≤ reserves[n] (totalReserves)\n        if (reduceAmount > totalReserves) {\n            revert ReduceReservesCashValidation();\n        }\n\n        /////////////////////////\n        // EFFECTS & INTERACTIONS\n        // (No safe failures beyond this point)\n\n        totalReservesNew = totalReserves - reduceAmount;\n\n        // Store reserves[n+1] = reserves[n] - reduceAmount\n        totalReserves = totalReservesNew;\n\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\n        _doTransferOut(protocolShareReserve, reduceAmount);\n\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\n            address(comptroller),\n            underlying,\n            IProtocolShareReserve.IncomeType.SPREAD\n        );\n\n        emit SpreadReservesReduced(protocolShareReserve, reduceAmount, totalReservesNew);\n    }\n\n    /**\n     * @notice updates the interest rate model (*requires fresh interest accrual)\n     * @dev Admin function to update the interest rate model\n     * @param newInterestRateModel the new interest rate model to use\n     */\n    function _setInterestRateModelFresh(InterestRateModel newInterestRateModel) internal {\n        // Used to store old model for use in the event that is emitted on success\n        InterestRateModel oldInterestRateModel;\n\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\n            revert SetInterestRateModelFreshCheck();\n        }\n\n        // Track the market's current interest rate model\n        oldInterestRateModel = interestRateModel;\n\n        // Ensure invoke newInterestRateModel.isInterestRateModel() returns true\n        require(newInterestRateModel.isInterestRateModel(), \"marker method returned false\");\n\n        // Set the interest rate model to newInterestRateModel\n        interestRateModel = newInterestRateModel;\n\n        // Emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel)\n        emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel);\n    }\n\n    /**\n     * Safe Token **\n     */\n\n    /**\n     * @dev Similar to ERC-20 transfer, but handles tokens that have transfer fees.\n     *      This function returns the actual amount received,\n     *      which may be less than `amount` if there is a fee attached to the transfer.\n     * @param from Sender of the underlying tokens\n     * @param amount Amount of underlying to transfer\n     * @return Actual amount received\n     */\n    function _doTransferIn(address from, uint256 amount) internal virtual returns (uint256) {\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\n        uint256 balanceBefore = token.balanceOf(address(this));\n        token.safeTransferFrom(from, address(this), amount);\n        uint256 balanceAfter = token.balanceOf(address(this));\n        // Return the amount that was *actually* transferred\n        return balanceAfter - balanceBefore;\n    }\n\n    /**\n     * @dev Just a regular ERC-20 transfer, reverts on failure\n     * @param to Receiver of the underlying tokens\n     * @param amount Amount of underlying to transfer\n     */\n    function _doTransferOut(address to, uint256 amount) internal virtual {\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\n        token.safeTransfer(to, amount);\n    }\n\n    /**\n     * @notice Transfer `tokens` tokens from `src` to `dst` by `spender`\n     * @dev Called by both `transfer` and `transferFrom` internally\n     * @param spender The address of the account performing the transfer\n     * @param src The address of the source account\n     * @param dst The address of the destination account\n     * @param tokens The number of tokens to transfer\n     */\n    function _transferTokens(address spender, address src, address dst, uint256 tokens) internal {\n        /* Fail if transfer not allowed */\n        comptroller.preTransferHook(address(this), src, dst, tokens);\n\n        /* Do not allow self-transfers */\n        if (src == dst) {\n            revert TransferNotAllowed();\n        }\n\n        /* Get the allowance, infinite for the account owner */\n        uint256 startingAllowance;\n        if (spender == src) {\n            startingAllowance = type(uint256).max;\n        } else {\n            startingAllowance = transferAllowances[src][spender];\n        }\n\n        /* Do the calculations, checking for {under,over}flow */\n        uint256 allowanceNew = startingAllowance - tokens;\n        uint256 srcTokensNew = accountTokens[src] - tokens;\n        uint256 dstTokensNew = accountTokens[dst] + tokens;\n\n        /////////////////////////\n        // EFFECTS & INTERACTIONS\n\n        accountTokens[src] = srcTokensNew;\n        accountTokens[dst] = dstTokensNew;\n\n        /* Eat some of the allowance (if necessary) */\n        if (startingAllowance != type(uint256).max) {\n            transferAllowances[src][spender] = allowanceNew;\n        }\n\n        /* We emit a Transfer event */\n        emit Transfer(src, dst, tokens);\n\n        comptroller.transferVerify(address(this), src, dst, tokens);\n    }\n\n    /**\n     * @notice Initialize the money market\n     * @param underlying_ The address of the underlying asset\n     * @param comptroller_ The address of the Comptroller\n     * @param interestRateModel_ The address of the interest rate model\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\n     * @param name_ ERC-20 name of this token\n     * @param symbol_ ERC-20 symbol of this token\n     * @param decimals_ ERC-20 decimal precision of this token\n     * @param admin_ Address of the administrator of this token\n     * @param accessControlManager_ AccessControlManager contract address\n     * @param riskManagement Addresses of risk & income related contracts\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\n     */\n    function _initialize(\n        address underlying_,\n        ComptrollerInterface comptroller_,\n        InterestRateModel interestRateModel_,\n        uint256 initialExchangeRateMantissa_,\n        string memory name_,\n        string memory symbol_,\n        uint8 decimals_,\n        address admin_,\n        address accessControlManager_,\n        RiskManagementInit memory riskManagement,\n        uint256 reserveFactorMantissa_\n    ) internal onlyInitializing {\n        __Ownable2Step_init();\n        __AccessControlled_init_unchained(accessControlManager_);\n        require(accrualBlockNumber == 0 && borrowIndex == 0, \"market may only be initialized once\");\n\n        // Set initial exchange rate\n        initialExchangeRateMantissa = initialExchangeRateMantissa_;\n        require(initialExchangeRateMantissa > 0, \"initial exchange rate must be greater than zero.\");\n\n        _setComptroller(comptroller_);\n\n        // Initialize slot(block or second) number and borrow index (slot(block or second) number mocks depend on comptroller being set)\n        accrualBlockNumber = getBlockNumberOrTimestamp();\n        borrowIndex = MANTISSA_ONE;\n\n        // Set the interest rate model (depends on slot(block or second) number / borrow index)\n        _setInterestRateModelFresh(interestRateModel_);\n\n        _setReserveFactorFresh(reserveFactorMantissa_);\n\n        name = name_;\n        symbol = symbol_;\n        decimals = decimals_;\n        _setShortfallContract(riskManagement.shortfall);\n        _setProtocolShareReserve(riskManagement.protocolShareReserve);\n        protocolSeizeShareMantissa = DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA;\n\n        // Set underlying and sanity check it\n        underlying = underlying_;\n        IERC20Upgradeable(underlying).totalSupply();\n\n        // The counter starts true to prevent changing it from zero to non-zero (i.e. smaller cost/refund)\n        _notEntered = true;\n        _transferOwnership(admin_);\n    }\n\n    function _setShortfallContract(address shortfall_) internal {\n        ensureNonzeroAddress(shortfall_);\n        address oldShortfall = shortfall;\n        shortfall = shortfall_;\n        emit NewShortfallContract(oldShortfall, shortfall_);\n    }\n\n    function _setProtocolShareReserve(address payable protocolShareReserve_) internal {\n        ensureNonzeroAddress(protocolShareReserve_);\n        address oldProtocolShareReserve = address(protocolShareReserve);\n        protocolShareReserve = protocolShareReserve_;\n        emit NewProtocolShareReserve(oldProtocolShareReserve, address(protocolShareReserve_));\n    }\n\n    function _ensureSenderIsDelegateOf(address user) internal view {\n        if (!ComptrollerViewInterface(address(comptroller)).approvedDelegates(user, msg.sender)) {\n            revert DelegateNotApproved();\n        }\n    }\n\n    /**\n     * @notice Gets balance of this contract in terms of the underlying\n     * @dev This excludes the value of the current message, if any\n     * @return The quantity of underlying tokens owned by this contract\n     */\n    function _getCashPrior() internal view virtual returns (uint256) {\n        return IERC20Upgradeable(underlying).balanceOf(address(this));\n    }\n\n    /**\n     * @notice Return the borrow balance of account based on stored data\n     * @param account The address whose balance should be calculated\n     * @return borrowBalance the calculated balance\n     */\n    function _borrowBalanceStored(address account) internal view returns (uint256) {\n        /* Get borrowBalance and borrowIndex */\n        BorrowSnapshot memory borrowSnapshot = accountBorrows[account];\n\n        /* If borrowBalance = 0 then borrowIndex is likely also 0.\n         * Rather than failing the calculation with a division by 0, we immediately return 0 in this case.\n         */\n        if (borrowSnapshot.principal == 0) {\n            return 0;\n        }\n\n        /* Calculate new borrow balance using the interest index:\n         *  recentBorrowBalance = borrower.borrowBalance * market.borrowIndex / borrower.borrowIndex\n         */\n        uint256 principalTimesIndex = borrowSnapshot.principal * borrowIndex;\n\n        return principalTimesIndex / borrowSnapshot.interestIndex;\n    }\n\n    /**\n     * @notice Calculates the exchange rate from the underlying to the VToken\n     * @dev This function does not accrue interest before calculating the exchange rate\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\n     */\n    function _exchangeRateStored() internal view virtual returns (uint256) {\n        uint256 _totalSupply = totalSupply;\n        if (_totalSupply == 0) {\n            /*\n             * If there are no tokens minted:\n             *  exchangeRate = initialExchangeRate\n             */\n            return initialExchangeRateMantissa;\n        }\n        /*\n         * Otherwise:\n         *  exchangeRate = (totalCash + totalBorrows + badDebt - totalReserves) / totalSupply\n         */\n        uint256 totalCash = _getCashPrior();\n        uint256 cashPlusBorrowsMinusReserves = totalCash + totalBorrows + badDebt - totalReserves;\n        uint256 exchangeRate = (cashPlusBorrowsMinusReserves * EXP_SCALE) / _totalSupply;\n\n        return exchangeRate;\n    }\n}\n"},"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\nimport { IERC20Upgradeable } from \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\nimport { ResilientOracleInterface } from \"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\";\n\nimport { ComptrollerInterface } from \"./ComptrollerInterface.sol\";\nimport { InterestRateModel } from \"./InterestRateModel.sol\";\n\n/**\n * @title VTokenStorage\n * @author Venus\n * @notice Storage layout used by the `VToken` contract\n */\n// solhint-disable-next-line max-states-count\ncontract VTokenStorage {\n    /**\n     * @notice Container for borrow balance information\n     * @member principal Total balance (with accrued interest), after applying the most recent balance-changing action\n     * @member interestIndex Global borrowIndex as of the most recent balance-changing action\n     */\n    struct BorrowSnapshot {\n        uint256 principal;\n        uint256 interestIndex;\n    }\n\n    /**\n     * @dev Guard variable for re-entrancy checks\n     */\n    bool internal _notEntered;\n\n    /**\n     * @notice Underlying asset for this VToken\n     */\n    address public underlying;\n\n    /**\n     * @notice EIP-20 token name for this token\n     */\n    string public name;\n\n    /**\n     * @notice EIP-20 token symbol for this token\n     */\n    string public symbol;\n\n    /**\n     * @notice EIP-20 token decimals for this token\n     */\n    uint8 public decimals;\n\n    /**\n     * @notice Protocol share Reserve contract address\n     */\n    address payable public protocolShareReserve;\n\n    /**\n     * @notice Contract which oversees inter-vToken operations\n     */\n    ComptrollerInterface public comptroller;\n\n    /**\n     * @notice Model which tells what the current interest rate should be\n     */\n    InterestRateModel public interestRateModel;\n\n    // Initial exchange rate used when minting the first VTokens (used when totalSupply = 0)\n    uint256 internal initialExchangeRateMantissa;\n\n    /**\n     * @notice Fraction of interest currently set aside for reserves\n     */\n    uint256 public reserveFactorMantissa;\n\n    /**\n     * @notice Slot(block or second) number that interest was last accrued at\n     */\n    uint256 public accrualBlockNumber;\n\n    /**\n     * @notice Accumulator of the total earned interest rate since the opening of the market\n     */\n    uint256 public borrowIndex;\n\n    /**\n     * @notice Total amount of outstanding borrows of the underlying in this market\n     */\n    uint256 public totalBorrows;\n\n    /**\n     * @notice Total amount of reserves of the underlying held in this market\n     */\n    uint256 public totalReserves;\n\n    /**\n     * @notice Total number of tokens in circulation\n     */\n    uint256 public totalSupply;\n\n    /**\n     * @notice Total bad debt of the market\n     */\n    uint256 public badDebt;\n\n    // Official record of token balances for each account\n    mapping(address => uint256) internal accountTokens;\n\n    // Approved token transfer amounts on behalf of others\n    mapping(address => mapping(address => uint256)) internal transferAllowances;\n\n    // Mapping of account addresses to outstanding borrow balances\n    mapping(address => BorrowSnapshot) internal accountBorrows;\n\n    /**\n     * @notice Share of seized collateral that is added to reserves\n     */\n    uint256 public protocolSeizeShareMantissa;\n\n    /**\n     * @notice Storage of Shortfall contract address\n     */\n    address public shortfall;\n\n    /**\n     * @notice delta slot (block or second) after which reserves will be reduced\n     */\n    uint256 public reduceReservesBlockDelta;\n\n    /**\n     * @notice last slot (block or second) number at which reserves were reduced\n     */\n    uint256 public reduceReservesBlockNumber;\n\n    /**\n     * @dev This empty reserved space is put in place to allow future versions to add new\n     * variables without shifting down storage in the inheritance chain.\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n     */\n    uint256[48] private __gap;\n}\n\n/**\n * @title VTokenInterface\n * @author Venus\n * @notice Interface implemented by the `VToken` contract\n */\nabstract contract VTokenInterface is VTokenStorage {\n    struct RiskManagementInit {\n        address shortfall;\n        address payable protocolShareReserve;\n    }\n\n    /*** Market Events ***/\n\n    /**\n     * @notice Event emitted when interest is accrued\n     */\n    event AccrueInterest(uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows);\n\n    /**\n     * @notice Event emitted when tokens are minted\n     */\n    event Mint(address indexed minter, uint256 mintAmount, uint256 mintTokens, uint256 accountBalance);\n\n    /**\n     * @notice Event emitted when tokens are redeemed\n     */\n    event Redeem(address indexed redeemer, uint256 redeemAmount, uint256 redeemTokens, uint256 accountBalance);\n\n    /**\n     * @notice Event emitted when underlying is borrowed\n     */\n    event Borrow(address indexed borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows);\n\n    /**\n     * @notice Event emitted when a borrow is repaid\n     */\n    event RepayBorrow(\n        address indexed payer,\n        address indexed borrower,\n        uint256 repayAmount,\n        uint256 accountBorrows,\n        uint256 totalBorrows\n    );\n\n    /**\n     * @notice Event emitted when bad debt is accumulated on a market\n     * @param borrower borrower to \"forgive\"\n     * @param badDebtDelta amount of new bad debt recorded\n     * @param badDebtOld previous bad debt value\n     * @param badDebtNew new bad debt value\n     */\n    event BadDebtIncreased(address indexed borrower, uint256 badDebtDelta, uint256 badDebtOld, uint256 badDebtNew);\n\n    /**\n     * @notice Event emitted when bad debt is recovered via an auction\n     * @param badDebtOld previous bad debt value\n     * @param badDebtNew new bad debt value\n     */\n    event BadDebtRecovered(uint256 badDebtOld, uint256 badDebtNew);\n\n    /**\n     * @notice Event emitted when a borrow is liquidated\n     */\n    event LiquidateBorrow(\n        address indexed liquidator,\n        address indexed borrower,\n        uint256 repayAmount,\n        address indexed vTokenCollateral,\n        uint256 seizeTokens\n    );\n\n    /*** Admin Events ***/\n\n    /**\n     * @notice Event emitted when comptroller is changed\n     */\n    event NewComptroller(ComptrollerInterface indexed oldComptroller, ComptrollerInterface indexed newComptroller);\n\n    /**\n     * @notice Event emitted when shortfall contract address is changed\n     */\n    event NewShortfallContract(address indexed oldShortfall, address indexed newShortfall);\n\n    /**\n     * @notice Event emitted when protocol share reserve contract address is changed\n     */\n    event NewProtocolShareReserve(address indexed oldProtocolShareReserve, address indexed newProtocolShareReserve);\n\n    /**\n     * @notice Event emitted when interestRateModel is changed\n     */\n    event NewMarketInterestRateModel(\n        InterestRateModel indexed oldInterestRateModel,\n        InterestRateModel indexed newInterestRateModel\n    );\n\n    /**\n     * @notice Event emitted when protocol seize share is changed\n     */\n    event NewProtocolSeizeShare(uint256 oldProtocolSeizeShareMantissa, uint256 newProtocolSeizeShareMantissa);\n\n    /**\n     * @notice Event emitted when the reserve factor is changed\n     */\n    event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa);\n\n    /**\n     * @notice Event emitted when the reserves are added\n     */\n    event ReservesAdded(address indexed benefactor, uint256 addAmount, uint256 newTotalReserves);\n\n    /**\n     * @notice Event emitted when the spread reserves are reduced\n     */\n    event SpreadReservesReduced(address indexed protocolShareReserve, uint256 reduceAmount, uint256 newTotalReserves);\n\n    /**\n     * @notice EIP20 Transfer event\n     */\n    event Transfer(address indexed from, address indexed to, uint256 amount);\n\n    /**\n     * @notice EIP20 Approval event\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\n\n    /**\n     * @notice Event emitted when healing the borrow\n     */\n    event HealBorrow(address indexed payer, address indexed borrower, uint256 repayAmount);\n\n    /**\n     * @notice Event emitted when tokens are swept\n     */\n    event SweepToken(address indexed token);\n\n    /**\n     * @notice Event emitted when reduce reserves slot (block or second) delta is changed\n     */\n    event NewReduceReservesBlockDelta(\n        uint256 oldReduceReservesBlockOrTimestampDelta,\n        uint256 newReduceReservesBlockOrTimestampDelta\n    );\n\n    /**\n     * @notice Event emitted when liquidation reserves are reduced\n     */\n    event ProtocolSeize(address indexed from, address indexed to, uint256 amount);\n\n    /*** User Interface ***/\n\n    function mint(uint256 mintAmount) external virtual returns (uint256);\n\n    function mintBehalf(address minter, uint256 mintAllowed) external virtual returns (uint256);\n\n    function redeem(uint256 redeemTokens) external virtual returns (uint256);\n\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external virtual returns (uint256);\n\n    function redeemUnderlying(uint256 redeemAmount) external virtual returns (uint256);\n\n    function redeemUnderlyingBehalf(address redeemer, uint256 redeemAmount) external virtual returns (uint256);\n\n    function borrow(uint256 borrowAmount) external virtual returns (uint256);\n\n    function borrowBehalf(address borrwwer, uint256 borrowAmount) external virtual returns (uint256);\n\n    function repayBorrow(uint256 repayAmount) external virtual returns (uint256);\n\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external virtual returns (uint256);\n\n    function liquidateBorrow(\n        address borrower,\n        uint256 repayAmount,\n        VTokenInterface vTokenCollateral\n    ) external virtual returns (uint256);\n\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external virtual;\n\n    function forceLiquidateBorrow(\n        address liquidator,\n        address borrower,\n        uint256 repayAmount,\n        VTokenInterface vTokenCollateral,\n        bool skipCloseFactorCheck\n    ) external virtual;\n\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external virtual;\n\n    function transfer(address dst, uint256 amount) external virtual returns (bool);\n\n    function transferFrom(address src, address dst, uint256 amount) external virtual returns (bool);\n\n    function accrueInterest() external virtual returns (uint256);\n\n    function sweepToken(IERC20Upgradeable token) external virtual;\n\n    /*** Admin Functions ***/\n\n    function setReserveFactor(uint256 newReserveFactorMantissa) external virtual;\n\n    function reduceReserves(uint256 reduceAmount) external virtual;\n\n    function exchangeRateCurrent() external virtual returns (uint256);\n\n    function borrowBalanceCurrent(address account) external virtual returns (uint256);\n\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external virtual;\n\n    function addReserves(uint256 addAmount) external virtual;\n\n    function totalBorrowsCurrent() external virtual returns (uint256);\n\n    function balanceOfUnderlying(address owner) external virtual returns (uint256);\n\n    function approve(address spender, uint256 amount) external virtual returns (bool);\n\n    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool);\n\n    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool);\n\n    function allowance(address owner, address spender) external view virtual returns (uint256);\n\n    function balanceOf(address owner) external view virtual returns (uint256);\n\n    function getAccountSnapshot(address account) external view virtual returns (uint256, uint256, uint256, uint256);\n\n    function borrowRatePerBlock() external view virtual returns (uint256);\n\n    function supplyRatePerBlock() external view virtual returns (uint256);\n\n    function borrowBalanceStored(address account) external view virtual returns (uint256);\n\n    function exchangeRateStored() external view virtual returns (uint256);\n\n    function getCash() external view virtual returns (uint256);\n\n    /**\n     * @notice Indicator that this is a VToken contract (for inspection)\n     * @return Always true\n     */\n    function isVToken() external pure virtual returns (bool) {\n        return true;\n    }\n}\n"},"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity ^0.8.25;\n\ninterface OracleInterface {\n    function getPrice(address asset) external view returns (uint256);\n}\n\ninterface ResilientOracleInterface is OracleInterface {\n    function updatePrice(address vToken) external;\n\n    function updateAssetPrice(address asset) external;\n\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\n}\n\ninterface TwapInterface is OracleInterface {\n    function updateTwap(address asset) external returns (uint256);\n}\n\ninterface BoundValidatorInterface {\n    function validatePriceWithAnchorPrice(\n        address asset,\n        uint256 reporterPrice,\n        uint256 anchorPrice\n    ) external view returns (bool);\n}\n"},"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity ^0.8.25;\n\ninterface IProtocolShareReserve {\n    /// @notice it represents the type of vToken income\n    enum IncomeType {\n        SPREAD,\n        LIQUIDATION\n    }\n\n    function updateAssetsState(\n        address comptroller,\n        address asset,\n        IncomeType incomeType\n    ) external;\n}\n"},"@venusprotocol/solidity-utilities/contracts/constants.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity ^0.8.25;\n\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\nuint256 constant EXP_SCALE = 1e18;\n\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\nuint256 constant MANTISSA_ONE = EXP_SCALE;\n\n/// @dev The approximate number of seconds per year\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\n"},"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\nimport { SECONDS_PER_YEAR } from \"./constants.sol\";\n\nabstract contract TimeManagerV8 {\n    /// @notice Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\n    uint256 public immutable blocksOrSecondsPerYear;\n\n    /// @notice Acknowledges if a contract is time based or not\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\n    bool public immutable isTimeBased;\n\n    /// @notice Stores the current block timestamp or block number depending on isTimeBased\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\n    function() view returns (uint256) private immutable _getCurrentSlot;\n\n    /**\n     * @dev This empty reserved space is put in place to allow future versions to add new\n     * variables without shifting down storage in the inheritance chain\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n     */\n    uint256[48] private __gap;\n\n    /// @notice Thrown when blocks per year is invalid\n    error InvalidBlocksPerYear();\n\n    /// @notice Thrown when time based but blocks per year is provided\n    error InvalidTimeBasedConfiguration();\n\n    /**\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block\n     * If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\n     * @param blocksPerYear_ The number of blocks per year\n     * @custom:error InvalidBlocksPerYear is thrown if blocksPerYear entered is zero and timeBased is false\n     * @custom:error InvalidTimeBasedConfiguration is thrown if blocksPerYear entered is non zero and timeBased is true\n     * @custom:oz-upgrades-unsafe-allow constructor\n     */\n    constructor(bool timeBased_, uint256 blocksPerYear_) {\n        if (!timeBased_ && blocksPerYear_ == 0) {\n            revert InvalidBlocksPerYear();\n        }\n\n        if (timeBased_ && blocksPerYear_ != 0) {\n            revert InvalidTimeBasedConfiguration();\n        }\n\n        isTimeBased = timeBased_;\n        blocksOrSecondsPerYear = timeBased_ ? SECONDS_PER_YEAR : blocksPerYear_;\n        _getCurrentSlot = timeBased_ ? _getBlockTimestamp : _getBlockNumber;\n    }\n\n    /**\n     * @dev Function to simply retrieve block number or block timestamp\n     * @return Current block number or block timestamp\n     */\n    function getBlockNumberOrTimestamp() public view virtual returns (uint256) {\n        return _getCurrentSlot();\n    }\n\n    /**\n     * @dev Returns the current timestamp in seconds\n     * @return The current timestamp\n     */\n    function _getBlockTimestamp() private view returns (uint256) {\n        return block.timestamp;\n    }\n\n    /**\n     * @dev Returns the current block number\n     * @return The current block number\n     */\n    function _getBlockNumber() private view returns (uint256) {\n        return block.number;\n    }\n}\n"},"@venusprotocol/solidity-utilities/contracts/validators.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\nerror ZeroAddressNotAllowed();\n\n/// @notice Thrown if the supplied value is 0 where it is not allowed\nerror ZeroValueNotAllowed();\n\n/// @notice Checks if the provided address is nonzero, reverts otherwise\n/// @param address_ Address to check\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\nfunction ensureNonzeroAddress(address address_) pure {\n    if (address_ == address(0)) {\n        revert ZeroAddressNotAllowed();\n    }\n}\n\n/// @notice Checks if the provided value is nonzero, reverts otherwise\n/// @param value_ Value to check\n/// @custom:error ZeroValueNotAllowed is thrown if the provided value is 0\nfunction ensureNonzeroValue(uint256 value_) pure {\n    if (value_ == 0) {\n        revert ZeroValueNotAllowed();\n    }\n}\n"},"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity ^0.8.25;\n\nimport { PrimeStorageV1 } from \"../PrimeStorage.sol\";\n\n/**\n * @title IPrime\n * @author Venus\n * @notice Interface for Prime Token\n */\ninterface IPrime {\n    struct APRInfo {\n        // supply APR of the user in BPS\n        uint256 supplyAPR;\n        // borrow APR of the user in BPS\n        uint256 borrowAPR;\n        // total score of the market\n        uint256 totalScore;\n        // score of the user\n        uint256 userScore;\n        // capped XVS balance of the user\n        uint256 xvsBalanceForScore;\n        // capital of the user\n        uint256 capital;\n        // capped supply of the user\n        uint256 cappedSupply;\n        // capped borrow of the user\n        uint256 cappedBorrow;\n        // capped supply of user in USD\n        uint256 supplyCapUSD;\n        // capped borrow of user in USD\n        uint256 borrowCapUSD;\n    }\n\n    struct Capital {\n        // capital of the user\n        uint256 capital;\n        // capped supply of the user\n        uint256 cappedSupply;\n        // capped borrow of the user\n        uint256 cappedBorrow;\n        // capped supply of user in USD\n        uint256 supplyCapUSD;\n        // capped borrow of user in USD\n        uint256 borrowCapUSD;\n    }\n\n    /**\n     * @notice Returns boosted pending interest accrued for a user for all markets\n     * @param user the account for which to get the accrued interests\n     * @return pendingRewards the number of underlying tokens accrued by the user for all markets\n     */\n    function getPendingRewards(address user) external returns (PrimeStorageV1.PendingReward[] memory pendingRewards);\n\n    /**\n     * @notice Update total score of multiple users and market\n     * @param users accounts for which we need to update score\n     */\n    function updateScores(address[] memory users) external;\n\n    /**\n     * @notice Update value of alpha\n     * @param _alphaNumerator numerator of alpha. If alpha is 0.5 then numerator is 1\n     * @param _alphaDenominator denominator of alpha. If alpha is 0.5 then denominator is 2\n     */\n    function updateAlpha(uint128 _alphaNumerator, uint128 _alphaDenominator) external;\n\n    /**\n     * @notice Update multipliers for a market\n     * @param market address of the market vToken\n     * @param supplyMultiplier new supply multiplier for the market, scaled by 1e18\n     * @param borrowMultiplier new borrow multiplier for the market, scaled by 1e18\n     */\n    function updateMultipliers(address market, uint256 supplyMultiplier, uint256 borrowMultiplier) external;\n\n    /**\n     * @notice Add a market to prime program\n     * @param comptroller address of the comptroller\n     * @param market address of the market vToken\n     * @param supplyMultiplier the multiplier for supply cap. It should be converted to 1e18\n     * @param borrowMultiplier the multiplier for borrow cap. It should be converted to 1e18\n     */\n    function addMarket(\n        address comptroller,\n        address market,\n        uint256 supplyMultiplier,\n        uint256 borrowMultiplier\n    ) external;\n\n    /**\n     * @notice Set limits for total tokens that can be minted\n     * @param _irrevocableLimit total number of irrevocable tokens that can be minted\n     * @param _revocableLimit total number of revocable tokens that can be minted\n     */\n    function setLimit(uint256 _irrevocableLimit, uint256 _revocableLimit) external;\n\n    /**\n     * @notice Directly issue prime tokens to users\n     * @param isIrrevocable are the tokens being issued\n     * @param users list of address to issue tokens to\n     */\n    function issue(bool isIrrevocable, address[] calldata users) external;\n\n    /**\n     * @notice Executed by XVSVault whenever user's XVSVault balance changes\n     * @param user the account address whose balance was updated\n     */\n    function xvsUpdated(address user) external;\n\n    /**\n     * @notice accrues interest and updates score for an user for a specific market\n     * @param user the account address for which to accrue interest and update score\n     * @param market the market for which to accrue interest and update score\n     */\n    function accrueInterestAndUpdateScore(address user, address market) external;\n\n    /**\n     * @notice For claiming prime token when staking period is completed\n     */\n    function claim() external;\n\n    /**\n     * @notice For burning any prime token\n     * @param user the account address for which the prime token will be burned\n     */\n    function burn(address user) external;\n\n    /**\n     * @notice To pause or unpause claiming of interest\n     */\n    function togglePause() external;\n\n    /**\n     * @notice For user to claim boosted yield\n     * @param vToken the market for which claim the accrued interest\n     * @return amount the amount of tokens transferred to the user\n     */\n    function claimInterest(address vToken) external returns (uint256);\n\n    /**\n     * @notice For user to claim boosted yield\n     * @param vToken the market for which claim the accrued interest\n     * @param user the user for which to claim the accrued interest\n     * @return amount the amount of tokens transferred to the user\n     */\n    function claimInterest(address vToken, address user) external returns (uint256);\n\n    /**\n     * @notice Distributes income from market since last distribution\n     * @param vToken the market for which to distribute the income\n     */\n    function accrueInterest(address vToken) external;\n\n    /**\n     * @notice Returns boosted interest accrued for a user\n     * @param vToken the market for which to fetch the accrued interest\n     * @param user the account for which to get the accrued interest\n     * @return interestAccrued the number of underlying tokens accrued by the user since the last accrual\n     */\n    function getInterestAccrued(address vToken, address user) external returns (uint256);\n\n    /**\n     * @notice Retrieves an array of all available markets\n     * @return an array of addresses representing all available markets\n     */\n    function getAllMarkets() external view returns (address[] memory);\n\n    /**\n     * @notice fetch the numbers of seconds remaining for staking period to complete\n     * @param user the account address for which we are checking the remaining time\n     * @return timeRemaining the number of seconds the user needs to wait to claim prime token\n     */\n    function claimTimeRemaining(address user) external view returns (uint256);\n\n    /**\n     * @notice Returns supply and borrow APR for user for a given market\n     * @param market the market for which to fetch the APR\n     * @param user the account for which to get the APR\n     * @return aprInfo APR information for the user for the given market\n     */\n    function calculateAPR(address market, address user) external view returns (APRInfo memory aprInfo);\n\n    /**\n     * @notice Returns supply and borrow APR for estimated supply, borrow and XVS staked\n     * @param market the market for which to fetch the APR\n     * @param user the account for which to get the APR\n     * @param borrow hypothetical borrow amount\n     * @param supply hypothetical supply amount\n     * @param xvsStaked hypothetical staked XVS amount\n     * @return aprInfo APR information for the user for the given market\n     */\n    function estimateAPR(\n        address market,\n        address user,\n        uint256 borrow,\n        uint256 supply,\n        uint256 xvsStaked\n    ) external view returns (APRInfo memory aprInfo);\n\n    /**\n     * @notice the total income that's going to be distributed in a year to prime token holders\n     * @param vToken the market for which to fetch the total income that's going to distributed in a year\n     * @return amount the total income\n     */\n    function incomeDistributionYearly(address vToken) external view returns (uint256 amount);\n\n    /**\n     * @notice Returns if user is a prime holder\n     * @return isPrimeHolder true if user is a prime holder\n     */\n    function isUserPrimeHolder(address user) external view returns (bool);\n\n    /**\n     * @notice Set the limit for the loops can iterate to avoid the DOS\n     * @param loopsLimit Number of loops limit\n     */\n    function setMaxLoopsLimit(uint256 loopsLimit) external;\n\n    /**\n     * @notice Update staked at timestamp for multiple users\n     * @param users accounts for which we need to update staked at timestamp\n     * @param timestamps new staked at timestamp for the users\n     */\n    function setStakedAt(address[] calldata users, uint256[] calldata timestamps) external;\n}\n"},"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\nimport { ResilientOracleInterface } from \"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\";\n\n/**\n * @title PrimeStorageV1\n * @author Venus\n * @notice Storage for Prime Token\n */\ncontract PrimeStorageV1 {\n    struct Token {\n        bool exists;\n        bool isIrrevocable;\n    }\n\n    struct Market {\n        uint256 supplyMultiplier;\n        uint256 borrowMultiplier;\n        uint256 rewardIndex;\n        uint256 sumOfMembersScore;\n        bool exists;\n    }\n\n    struct Interest {\n        uint256 accrued;\n        uint256 score;\n        uint256 rewardIndex;\n    }\n\n    struct PendingReward {\n        address vToken;\n        address rewardToken;\n        uint256 amount;\n    }\n\n    /// @notice Base unit for computations, usually used in scaling (multiplications, divisions)\n    uint256 internal constant EXP_SCALE = 1e18;\n\n    /// @notice maximum BPS = 100%\n    uint256 internal constant MAXIMUM_BPS = 1e4;\n\n    /// @notice Mapping to get prime token's metadata\n    mapping(address => Token) public tokens;\n\n    /// @notice  Tracks total irrevocable tokens minted\n    uint256 public totalIrrevocable;\n\n    /// @notice  Tracks total revocable tokens minted\n    uint256 public totalRevocable;\n\n    /// @notice  Indicates maximum revocable tokens that can be minted\n    uint256 public revocableLimit;\n\n    /// @notice  Indicates maximum irrevocable tokens that can be minted\n    uint256 public irrevocableLimit;\n\n    /// @notice Tracks when prime token eligible users started staking for claiming prime token\n    mapping(address => uint256) public stakedAt;\n\n    /// @notice vToken to market configuration\n    mapping(address => Market) public markets;\n\n    /// @notice vToken to user to user index\n    mapping(address => mapping(address => Interest)) public interests;\n\n    /// @notice A list of boosted markets\n    address[] internal _allMarkets;\n\n    /// @notice numerator of alpha. Ex: if alpha is 0.5 then this will be 1\n    uint128 public alphaNumerator;\n\n    /// @notice denominator of alpha. Ex: if alpha is 0.5 then this will be 2\n    uint128 public alphaDenominator;\n\n    /// @notice address of XVS vault\n    address public xvsVault;\n\n    /// @notice address of XVS vault reward token\n    address public xvsVaultRewardToken;\n\n    /// @notice address of XVS vault pool id\n    uint256 public xvsVaultPoolId;\n\n    /// @notice mapping to check if a account's score was updated in the round\n    mapping(uint256 => mapping(address => bool)) public isScoreUpdated;\n\n    /// @notice unique id for next round\n    uint256 public nextScoreUpdateRoundId;\n\n    /// @notice total number of accounts whose score needs to be updated\n    uint256 public totalScoreUpdatesRequired;\n\n    /// @notice total number of accounts whose score is yet to be updated\n    uint256 public pendingScoreUpdates;\n\n    /// @notice mapping used to find if an asset is part of prime markets\n    mapping(address => address) public vTokenForAsset;\n\n    /// @notice Address of core pool comptroller contract\n    address internal corePoolComptroller;\n\n    /// @notice unreleased income from PLP that's already distributed to prime holders\n    /// @dev mapping of asset address => amount\n    mapping(address => uint256) public unreleasedPLPIncome;\n\n    /// @notice The address of PLP contract\n    address public primeLiquidityProvider;\n\n    /// @notice The address of ResilientOracle contract\n    ResilientOracleInterface public oracle;\n\n    /// @notice The address of PoolRegistry contract\n    address public poolRegistry;\n\n    /// @dev This empty reserved space is put in place to allow future versions to add new\n    /// variables without shifting down storage in the inheritance chain.\n    uint256[26] private __gap;\n}\n"},"contracts/ERC4626/Interfaces/IComptroller.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\nimport { Action } from \"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\";\nimport { RewardsDistributor } from \"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\";\n\n/**\n * @title IComptroller\n * @author Venus\n * @notice Combined interface for the `Comptroller` contract, including both core and view functions.\n */\ninterface IComptroller {\n    function actionPaused(address market, Action action) external view returns (bool);\n\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory);\n\n    function supplyCaps(address) external view returns (uint256);\n}\n"},"contracts/ERC4626/Interfaces/IProtocolShareReserve.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity ^0.8.25;\n\ninterface IProtocolShareReserve {\n    /// @notice it represents the type of vToken income\n    enum IncomeType {\n        SPREAD,\n        LIQUIDATION,\n        ERC4626_WRAPPER_REWARDS,\n        FLASHLOAN\n    }\n\n    function updateAssetsState(address comptroller, address asset, IncomeType incomeType) external;\n}\n"},"contracts/ERC4626/Interfaces/IRewardsDistributor.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\nimport { VToken } from \"@venusprotocol/isolated-pools/contracts/VToken.sol\";\nimport { IERC20Upgradeable } from \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nabstract contract IRewardsDistributor {\n    struct RewardToken {\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\n        uint224 index;\n        // The block number the index was last updated at\n        uint32 block;\n        // The block number at which to stop rewards\n        uint32 lastRewardingBlock;\n    }\n\n    IERC20Upgradeable public rewardToken;\n\n    function claimRewardToken(address holder, VToken[] memory vTokens) external virtual;\n}\n"},"contracts/ERC4626/VenusERC4626.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\nimport { ERC4626Upgradeable } from \"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol\";\nimport { SafeERC20Upgradeable } from \"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\";\nimport { IERC20Upgradeable } from \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\nimport { ERC20Upgradeable } from \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\";\nimport { ReentrancyGuardUpgradeable } from \"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol\";\nimport { MathUpgradeable } from \"@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol\";\nimport { AccessControlledV8 } from \"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\";\n\nimport { IProtocolShareReserve } from \"./Interfaces/IProtocolShareReserve.sol\";\nimport { RewardsDistributor } from \"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\";\nimport { MaxLoopsLimitHelper } from \"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\";\nimport { IComptroller } from \"./Interfaces/IComptroller.sol\";\nimport { ensureNonzeroAddress } from \"@venusprotocol/solidity-utilities/contracts/validators.sol\";\n\nimport { Action } from \"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\";\nimport { EXP_SCALE } from \"@venusprotocol/isolated-pools/contracts/lib/constants.sol\";\nimport { VToken } from \"@venusprotocol/isolated-pools/contracts/VToken.sol\";\n\n/// @title VenusERC4626\n/// @notice ERC4626 wrapper for Venus vTokens, enabling standard ERC4626 vault interactions with Venus Protocol.\ncontract VenusERC4626 is ERC4626Upgradeable, AccessControlledV8, MaxLoopsLimitHelper, ReentrancyGuardUpgradeable {\n    using MathUpgradeable for uint256;\n    using SafeERC20Upgradeable for ERC20Upgradeable;\n\n    /// @notice Error code representing no errors in Venus operations.\n    uint256 internal constant NO_ERROR = 0;\n\n    /// @notice The Venus vToken associated with this ERC4626 vault.\n    VToken public vToken;\n\n    /// @notice The Venus Comptroller contract, responsible for market operations.\n    IComptroller public comptroller;\n\n    /// @notice The recipient of rewards distributed by the Venus Protocol.\n    address public rewardRecipient;\n\n    /// @notice Emitted when rewards are claimed.\n    /// @param amount The amount of reward tokens claimed.\n    /// @param rewardToken The address of the reward token claimed.\n    event ClaimRewards(uint256 amount, address indexed rewardToken);\n\n    /// @notice Emitted when the reward recipient address is updated.\n    /// @param oldRecipient The previous reward recipient address.\n    /// @param newRecipient The new reward recipient address.\n    event RewardRecipientUpdated(address indexed oldRecipient, address indexed newRecipient);\n\n    /// @notice Event emitted when tokens are swept\n    event SweepToken(address indexed token, address indexed receiver, uint256 amount);\n\n    /// @notice Thrown when a Venus protocol call returns an error.\n    /// @dev This error is triggered if a Venus operation (such as minting or redeeming vTokens) fails.\n    /// @param errorCode The error code returned by the Venus protocol.\n    error VenusERC4626__VenusError(uint256 errorCode);\n\n    /// @notice Thrown when a deposit exceeds the maximum allowed limit.\n    /// @dev This error is triggered if the deposit amount is greater than `maxDeposit(receiver)`.\n    error ERC4626__DepositMoreThanMax();\n\n    /// @notice Thrown when a mint operation exceeds the maximum allowed limit.\n    /// @dev This error is triggered if the mint amount is greater than `maxMint(receiver)`.\n    error ERC4626__MintMoreThanMax();\n\n    /// @notice Thrown when a withdrawal exceeds the maximum available assets.\n    /// @dev This error is triggered if the withdrawal amount is greater than `maxWithdraw(owner)`.\n    error ERC4626__WithdrawMoreThanMax();\n\n    /// @notice Thrown when a redemption exceeds the maximum redeemable shares.\n    /// @dev This error is triggered if the redemption amount is greater than `maxRedeem(owner)`.\n    error ERC4626__RedeemMoreThanMax();\n\n    /// @notice Thrown when attempting an operation with a zero amount.\n    /// @dev This error prevents unnecessary transactions with zero amounts in deposit, withdraw, mint, or redeem operations.\n    /// @param operation The name of the operation that failed (e.g., \"deposit\", \"withdraw\", \"mint\", \"redeem\").\n    error ERC4626__ZeroAmount(string operation);\n\n    /// @custom:oz-upgrades-unsafe-allow constructor\n    constructor() {\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\n        // to set the state variables.\n        _disableInitializers();\n    }\n\n    /// @notice Initializes the VenusERC4626 vault, only with the VToken address associated to the vault\n    /// @dev `initialize2` should be invoked to complete the configuration of the vault\n    /// @param vToken_ The VToken associated with the vault, representing the yield-bearing asset.\n    function initialize(address vToken_) public initializer {\n        ensureNonzeroAddress(vToken_);\n\n        vToken = VToken(vToken_);\n        comptroller = IComptroller(address(vToken.comptroller()));\n        ERC20Upgradeable asset = ERC20Upgradeable(vToken.underlying());\n\n        __ERC20_init(_generateVaultName(asset), _generateVaultSymbol(asset));\n        __ERC4626_init(asset);\n        __ReentrancyGuard_init();\n    }\n\n    /**\n     * @notice Set the limit for the loops can iterate to avoid the DOS\n     * @param loopsLimit Number of loops limit\n     * @custom:event Emits MaxLoopsLimitUpdated event on success\n     * @custom:access Controlled by ACM\n     */\n    function setMaxLoopsLimit(uint256 loopsLimit) external {\n        _checkAccessAllowed(\"setMaxLoopsLimit(uint256)\");\n        _setMaxLoopsLimit(loopsLimit);\n    }\n\n    /// @notice Sets a new reward recipient address\n    /// @param newRecipient The address of the new reward recipient\n    /// @custom:access Controlled by ACM\n    function setRewardRecipient(address newRecipient) external {\n        _checkAccessAllowed(\"setRewardRecipient(address)\");\n        _setRewardRecipient(newRecipient);\n    }\n\n    /// @notice Sweeps the input token address tokens from the contract and sends them to the owner\n    /// @param token Address of the token\n    /// @custom:event SweepToken emits on success\n    /// @custom:access Only owner\n    function sweepToken(IERC20Upgradeable token) external onlyOwner {\n        uint256 balance = token.balanceOf(address(this));\n\n        if (balance > 0) {\n            address owner_ = owner();\n            SafeERC20Upgradeable.safeTransfer(token, owner_, balance);\n            emit SweepToken(address(token), owner_, balance);\n        }\n    }\n\n    /// @notice Claims rewards from all reward distributors associated with the VToken and transfers them to the reward recipient.\n    /// @dev Iterates through all reward distributors fetched from the comptroller, claims rewards, and transfers them if available.\n    function claimRewards() external {\n        IComptroller _comptroller = comptroller;\n        VToken _vToken = vToken;\n        address _rewardRecipient = rewardRecipient;\n\n        RewardsDistributor[] memory rewardDistributors = _comptroller.getRewardDistributors();\n\n        _ensureMaxLoops(rewardDistributors.length);\n\n        for (uint256 i = 0; i < rewardDistributors.length; i++) {\n            RewardsDistributor rewardDistributor = rewardDistributors[i];\n            IERC20Upgradeable rewardToken = IERC20Upgradeable(address(rewardDistributor.rewardToken()));\n\n            VToken[] memory vTokens = new VToken[](1);\n            vTokens[0] = _vToken;\n            RewardsDistributor(rewardDistributor).claimRewardToken(address(this), vTokens);\n            uint256 rewardBalance = rewardToken.balanceOf(address(this));\n\n            if (rewardBalance > 0) {\n                SafeERC20Upgradeable.safeTransfer(rewardToken, _rewardRecipient, rewardBalance);\n\n                // Try to update the asset state on the recipient if reward recipient is a protocol share reserve\n                // reward recipient cannot be an EOA\n                try\n                    IProtocolShareReserve(_rewardRecipient).updateAssetsState(\n                        address(_comptroller),\n                        address(rewardToken),\n                        IProtocolShareReserve.IncomeType.ERC4626_WRAPPER_REWARDS\n                    )\n                {} catch {}\n            }\n            emit ClaimRewards(rewardBalance, address(rewardToken));\n        }\n    }\n\n    /// @notice Second function to invoke to complete the configuration of the vault, setting the rest of the attributes\n    /// @param accessControlManager_ Address of the ACM contract\n    /// @param rewardRecipient_ The address that will receive rewards generated by the vault.\n    /// @param loopsLimit_ The maximum number of loops allowed for reward distribution.\n    /// @param vaultOwner_ The owner that will be set for the created vault\n    function initialize2(\n        address accessControlManager_,\n        address rewardRecipient_,\n        uint256 loopsLimit_,\n        address vaultOwner_\n    ) public reinitializer(2) {\n        ensureNonzeroAddress(vaultOwner_);\n\n        __AccessControlled_init(accessControlManager_);\n        _setMaxLoopsLimit(loopsLimit_);\n        _setRewardRecipient(rewardRecipient_);\n        _transferOwnership(vaultOwner_);\n    }\n\n    /// @inheritdoc ERC4626Upgradeable\n    function deposit(uint256 assets, address receiver) public override nonReentrant returns (uint256) {\n        ensureNonzeroAddress(receiver);\n\n        vToken.accrueInterest();\n        if (assets == 0) {\n            revert ERC4626__ZeroAmount(\"deposit\");\n        }\n        if (assets > maxDeposit(receiver)) {\n            revert ERC4626__DepositMoreThanMax();\n        }\n\n        uint256 shares = previewDeposit(assets);\n        if (shares == 0) {\n            revert ERC4626__ZeroAmount(\"deposit\");\n        }\n\n        uint256 totalSupplyBefore = totalSupply();\n        _deposit(_msgSender(), receiver, assets, shares);\n        uint256 actualShares = totalSupply() - totalSupplyBefore;\n\n        return actualShares;\n    }\n\n    /// @dev The minted shares are calculated considering the minted VTokens\n    /// @dev It can mint slightly fewer shares than requested, because VToken.mint rounds down\n    /// @inheritdoc ERC4626Upgradeable\n    function mint(uint256 shares, address receiver) public override nonReentrant returns (uint256) {\n        ensureNonzeroAddress(receiver);\n\n        vToken.accrueInterest();\n        if (shares == 0) {\n            revert ERC4626__ZeroAmount(\"mint\");\n        }\n        if (shares > maxMint(receiver)) {\n            revert ERC4626__MintMoreThanMax();\n        }\n        uint256 assets = previewMint(shares);\n        if (assets == 0) {\n            revert ERC4626__ZeroAmount(\"mint\");\n        }\n        _deposit(_msgSender(), receiver, assets, shares);\n        return assets;\n    }\n\n    /// @dev Receiver can receive slightly more assets than requested, because VToken.redeemUnderlying rounds up\n    /// @dev The shares to burn are calculated considering the actual transferred assets, not the requested ones\n    /// @inheritdoc ERC4626Upgradeable\n    function withdraw(uint256 assets, address receiver, address owner) public override nonReentrant returns (uint256) {\n        ensureNonzeroAddress(receiver);\n        ensureNonzeroAddress(owner);\n\n        vToken.accrueInterest();\n        if (assets == 0) {\n            revert ERC4626__ZeroAmount(\"withdraw\");\n        }\n        if (assets > maxWithdraw(owner)) {\n            revert ERC4626__WithdrawMoreThanMax();\n        }\n\n        (uint256 actualAssets, uint256 actualShares) = _beforeWithdraw(assets);\n        _withdraw(_msgSender(), receiver, owner, actualAssets, actualShares);\n\n        return actualShares;\n    }\n\n    /// @inheritdoc ERC4626Upgradeable\n    function redeem(uint256 shares, address receiver, address owner) public override nonReentrant returns (uint256) {\n        ensureNonzeroAddress(receiver);\n        ensureNonzeroAddress(owner);\n\n        vToken.accrueInterest();\n        if (shares == 0) {\n            revert ERC4626__ZeroAmount(\"redeem\");\n        }\n        if (shares > maxRedeem(owner)) {\n            revert ERC4626__RedeemMoreThanMax();\n        }\n\n        uint256 actualAssets = _beforeRedeem(shares);\n        if (actualAssets == 0) {\n            revert ERC4626__ZeroAmount(\"redeem\");\n        }\n\n        _withdraw(_msgSender(), receiver, owner, actualAssets, shares);\n        return actualAssets;\n    }\n\n    /// @notice Returns the total amount of assets deposited\n    /// @return Amount of assets deposited\n    function totalAssets() public view virtual override returns (uint256) {\n        return (vToken.balanceOf(address(this)) * vToken.exchangeRateStored()) / EXP_SCALE;\n    }\n\n    /// @notice Returns the maximum deposit allowed based on Venus supply caps.\n    /// @dev If minting is paused or the supply cap is reached, returns 0.\n    /// @param /*account*/ The address of the account.\n    /// @return The maximum amount of assets that can be deposited.\n    function maxDeposit(address /*account*/) public view virtual override returns (uint256) {\n        if (comptroller.actionPaused(address(vToken), Action.MINT)) {\n            return 0;\n        }\n\n        uint256 supplyCap = comptroller.supplyCaps(address(vToken));\n        uint256 totalSupply_ = (vToken.totalSupply() * vToken.exchangeRateStored()) / EXP_SCALE;\n        return supplyCap > totalSupply_ ? supplyCap - totalSupply_ : 0;\n    }\n\n    /// @notice Returns the maximum amount of shares that can be minted.\n    /// @dev This is derived from the maximum deposit amount converted to shares.\n    /// @param /*account*/ The address of the account.\n    /// @return The maximum number of shares that can be minted.\n    function maxMint(address /*account*/) public view virtual override returns (uint256) {\n        return convertToShares(maxDeposit(address(0)));\n    }\n\n    /// @notice Returns the maximum amount that can be withdrawn.\n    /// @dev The withdrawable amount is limited by the available cash in the vault.\n    /// @param receiver The address of the account withdrawing.\n    /// @return The maximum amount of assets that can be withdrawn.\n    function maxWithdraw(address receiver) public view virtual override returns (uint256) {\n        if (comptroller.actionPaused(address(vToken), Action.REDEEM)) {\n            return 0;\n        }\n\n        uint256 cash = vToken.getCash();\n        uint256 totalReserves = vToken.totalReserves();\n        uint256 assetsBalance = convertToAssets(balanceOf(receiver));\n\n        if (cash < totalReserves) {\n            return 0;\n        } else {\n            uint256 availableCash = cash - totalReserves;\n            return availableCash < assetsBalance ? availableCash : assetsBalance;\n        }\n    }\n\n    /// @notice Returns the maximum amount of shares that can be redeemed.\n    /// @dev Redemption is limited by the available cash in the vault.\n    /// @param receiver The address of the account redeeming.\n    /// @return The maximum number of shares that can be redeemed.\n    function maxRedeem(address receiver) public view virtual override returns (uint256) {\n        if (comptroller.actionPaused(address(vToken), Action.REDEEM)) {\n            return 0;\n        }\n\n        uint256 cash = vToken.getCash();\n        uint256 totalReserves = vToken.totalReserves();\n        if (cash < totalReserves) {\n            return 0;\n        } else {\n            uint256 availableCash = cash - totalReserves;\n            uint256 availableCashInShares = convertToShares(availableCash);\n            uint256 shareBalance = balanceOf(receiver);\n            return availableCashInShares < shareBalance ? availableCashInShares : shareBalance;\n        }\n    }\n\n    /// @notice Redeems the amount of vTokens equivalent to the provided shares.\n    /// @dev Calls `redeem` on the vToken contract. Reverts on error.\n    /// @param shares The amount of shares to redeem.\n    /// @return The amount of assets transferred in\n    function _beforeRedeem(uint256 shares) internal returns (uint256) {\n        IERC20Upgradeable token = IERC20Upgradeable(asset());\n        uint256 balanceBefore = token.balanceOf(address(this));\n\n        // Calculate the amount of vTokens equivalent to the amount of shares, rounding it down\n        uint256 vTokens = shares.mulDiv(\n            vToken.balanceOf(address(this)),\n            totalSupply() + 10 ** _decimalsOffset(),\n            MathUpgradeable.Rounding.Down\n        );\n\n        uint256 errorCode = vToken.redeem(vTokens);\n        if (errorCode != NO_ERROR) {\n            revert VenusERC4626__VenusError(errorCode);\n        }\n\n        uint256 balanceAfter = token.balanceOf(address(this));\n\n        // Return the amount of assets that was *actually* transferred in\n        return balanceAfter - balanceBefore;\n    }\n\n    /// @notice Redeems underlying assets before withdrawing from the vault.\n    /// @dev Calls `redeemUnderlying` on the vToken contract. Reverts on error.\n    /// @param assets The amount of underlying assets to redeem.\n    /// @return actualAssets The amount of assets transferred in\n    /// @return actualShares The shares equivalent to `actualAssets`, to be burned, rounded up\n    /// @custom:error ERC4626__ZeroAmount is thrown when the redeemed VTokens are zero\n    function _beforeWithdraw(uint256 assets) internal returns (uint256 actualAssets, uint256 actualShares) {\n        IERC20Upgradeable token = IERC20Upgradeable(asset());\n        uint256 balanceBefore = token.balanceOf(address(this));\n        uint256 vTokenBalanceBefore = vToken.balanceOf(address(this));\n\n        uint256 errorCode = vToken.redeemUnderlying(assets);\n        if (errorCode != NO_ERROR) {\n            revert VenusERC4626__VenusError(errorCode);\n        }\n\n        // Return the amount of assets *actually* transferred in\n        actualAssets = token.balanceOf(address(this)) - balanceBefore;\n\n        uint256 actualVTokens = vTokenBalanceBefore - vToken.balanceOf(address(this));\n        if (actualVTokens == 0) {\n            revert ERC4626__ZeroAmount(\"actualVTokens at _beforeWithdraw\");\n        }\n        // Return the shares equivalent to the burned vTokens\n        actualShares = actualVTokens.mulDiv(\n            totalSupply() + 10 ** _decimalsOffset(),\n            vTokenBalanceBefore,\n            MathUpgradeable.Rounding.Up\n        );\n    }\n\n    /// @notice Mints vTokens after depositing assets.\n    /// @dev Calls `mint` on the vToken contract. Reverts on error.\n    /// @param assets The amount of underlying assets to deposit.\n    function _mintVTokens(uint256 assets) internal {\n        ERC20Upgradeable(asset()).safeApprove(address(vToken), assets);\n        uint256 errorCode = vToken.mint(assets);\n        if (errorCode != NO_ERROR) {\n            revert VenusERC4626__VenusError(errorCode);\n        }\n    }\n\n    /// @notice Sets a new reward recipient address\n    /// @param newRecipient The address of the new reward recipient\n    /// @custom:error ZeroAddressNotAllowed is thrown when the new recipient address is zero\n    /// @custom:event RewardRecipientUpdated is emitted when the reward recipient address is updated\n    function _setRewardRecipient(address newRecipient) internal {\n        ensureNonzeroAddress(newRecipient);\n\n        emit RewardRecipientUpdated(rewardRecipient, newRecipient);\n        rewardRecipient = newRecipient;\n    }\n\n    /// @notice Deposits the assets into the VToken and calculates the shares to mint based on the\n    /// underlying assets equivalent to the new VTokens minted\n    /// @custom:error ERC4626__ZeroAmount is thrown when the minted VTokens are zero\n    /// @inheritdoc ERC4626Upgradeable\n    function _deposit(address caller, address receiver, uint256 assets, uint256 shares) internal override {\n        // 1. Track pre-transfer balances\n        uint256 assetBalanceBefore = IERC20Upgradeable(asset()).balanceOf(address(this));\n        uint256 vTokenBalanceBefore = vToken.balanceOf(address(this));\n\n        // 2. Perform asset transfer (original OZ 4626 logic)\n        SafeERC20Upgradeable.safeTransferFrom(IERC20Upgradeable(asset()), caller, address(this), assets);\n\n        // 3. Calculate actual assets received (protects against fee-on-transfer)\n        uint256 assetsReceived = IERC20Upgradeable(asset()).balanceOf(address(this)) - assetBalanceBefore;\n\n        // 4. Mint vTokens with received assets\n        _mintVTokens(assetsReceived);\n\n        // 5. Verify actual vTokens received\n        uint256 vTokensReceived = vToken.balanceOf(address(this)) - vTokenBalanceBefore;\n        if (vTokensReceived == 0) {\n            revert ERC4626__ZeroAmount(\"vTokensReceived at _deposit\");\n        }\n        uint256 actualAssetsValue = (vTokensReceived * vToken.exchangeRateStored()) / EXP_SCALE;\n\n        // 6. Recalculate shares based on actual received value\n        // This is the same operation performed by previewDeposit, adjusting the total assets\n        uint256 actualShares = actualAssetsValue.mulDiv(\n            totalSupply() + 10 ** _decimalsOffset(),\n            totalAssets() + 1 - actualAssetsValue, // remove the new assets deposited to the VToken in this operation\n            MathUpgradeable.Rounding.Down\n        );\n\n        // 7. Mint the corrected share amount\n        _mint(receiver, actualShares);\n\n        emit Deposit(caller, receiver, assets, actualShares);\n    }\n\n    /// @notice Override `_decimalsOffset` to normalize decimals to 18 for all VenusERC4626 vaults.\n    /// @return Gap between 18 and the decimals of the asset token\n    function _decimalsOffset() internal view virtual override returns (uint8) {\n        return 18 - ERC20Upgradeable(asset()).decimals();\n    }\n\n    /// @notice Generates and returns the derived name of the vault considering the asset name\n    /// @param asset_ Asset to be accepted in the vault whose name this function will return\n    /// @return Name of the vault considering the asset name\n    function _generateVaultName(ERC20Upgradeable asset_) internal view returns (string memory) {\n        return string(abi.encodePacked(\"ERC4626-Wrapped Venus \", asset_.name()));\n    }\n\n    /// @notice Generates and returns the derived symbol of the vault considering the asset symbol\n    /// @param asset_ Asset to be accepted in the vault whose symbol this function will return\n    /// @return Symbol of the vault considering the asset name\n    function _generateVaultSymbol(ERC20Upgradeable asset_) internal view returns (string memory) {\n        return string(abi.encodePacked(\"v4626\", asset_.symbol()));\n    }\n}\n"},"contracts/ERC4626/VenusERC4626Factory.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\nimport { ERC4626Upgradeable } from \"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol\";\nimport { UpgradeableBeacon } from \"@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol\";\nimport { BeaconProxy } from \"@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol\";\n\nimport { AccessControlledV8 } from \"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\";\nimport { PoolRegistryInterface } from \"@venusprotocol/isolated-pools/contracts/Pool/PoolRegistryInterface.sol\";\nimport { MaxLoopsLimitHelper } from \"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\";\nimport { VTokenInterface } from \"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol\";\nimport { VenusERC4626 } from \"./VenusERC4626.sol\";\nimport { ensureNonzeroAddress } from \"@venusprotocol/solidity-utilities/contracts/validators.sol\";\n\n/// @title VenusERC4626Factory\n/// @notice Factory for creating VenusERC4626 contracts\ncontract VenusERC4626Factory is AccessControlledV8, MaxLoopsLimitHelper {\n    /// @notice A constant salt value used for deterministic contract deployment\n    bytes32 public constant SALT = keccak256(\"Venus-ERC4626 Vault\");\n\n    /// @notice The beacon contract for VenusERC4626 proxies\n    UpgradeableBeacon public beacon;\n\n    /// @notice The Pool Registry contract\n    PoolRegistryInterface public poolRegistry;\n\n    /// @notice The address that will receive the liquidity mining rewards\n    address public rewardRecipient;\n\n    // @notice Map of vaults created by this factory\n    mapping(address vToken => ERC4626Upgradeable vault) public createdVaults;\n\n    /// @notice Emitted when a new ERC4626 vault has been created\n    /// @param vToken The vToken used by the vault\n    /// @param vault The vault that was created\n    event CreateERC4626(VTokenInterface indexed vToken, ERC4626Upgradeable indexed vault);\n\n    /// @notice Emitted when the reward recipient address is updated.\n    /// @param oldRecipient The previous reward recipient address.\n    /// @param newRecipient The new reward recipient address.\n    event RewardRecipientUpdated(address indexed oldRecipient, address indexed newRecipient);\n\n    /// @notice Thrown when the provided vToken is not registered in PoolRegistry\n    error VenusERC4626Factory__InvalidVToken();\n\n    /// @notice Thrown when a VenusERC4626 already exists for the provided vToken\n    error VenusERC4626Factory__ERC4626AlreadyExists();\n\n    /// @custom:oz-upgrades-unsafe-allow constructor\n    constructor() {\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\n        // to set the state variables.\n        _disableInitializers();\n    }\n\n    /// @notice Initializes the contract\n    /// @param accessControlManager Address of the ACM contract\n    /// @param poolRegistryAddress Address of the Pool Registry contract\n    /// @param rewardRecipientAddress Reward recipient address\n    /// @param venusERC4626Implementation Address of the VenusERC4626 implementation contract\n    /// @param loopsLimitNumber The loops limit for the MaxLoopsLimit helper\n    function initialize(\n        address accessControlManager,\n        address poolRegistryAddress,\n        address rewardRecipientAddress,\n        address venusERC4626Implementation,\n        uint256 loopsLimitNumber\n    ) external initializer {\n        ensureNonzeroAddress(accessControlManager);\n        ensureNonzeroAddress(poolRegistryAddress);\n        ensureNonzeroAddress(rewardRecipientAddress);\n        ensureNonzeroAddress(venusERC4626Implementation);\n\n        __AccessControlled_init(accessControlManager);\n\n        poolRegistry = PoolRegistryInterface(poolRegistryAddress);\n        rewardRecipient = rewardRecipientAddress;\n        _setMaxLoopsLimit(loopsLimitNumber);\n\n        // Deploy the upgradeable beacon with the initial implementation\n        beacon = new UpgradeableBeacon(venusERC4626Implementation);\n\n        // The owner of the beacon will initially be the owner of the factory\n        beacon.transferOwnership(owner());\n    }\n\n    /// @notice Sets a new reward recipient address\n    /// @param newRecipient The address of the new reward recipient\n    /// @custom:access Controlled by ACM\n    /// @custom:error ZeroAddressNotAllowed is thrown when the new recipient address is zero\n    /// @custom:event RewardRecipientUpdated is emitted when the reward recipient address is updated\n    function setRewardRecipient(address newRecipient) external {\n        _checkAccessAllowed(\"setRewardRecipient(address)\");\n        ensureNonzeroAddress(newRecipient);\n\n        emit RewardRecipientUpdated(rewardRecipient, newRecipient);\n        rewardRecipient = newRecipient;\n    }\n\n    /**\n     * @notice Set the limit for the loops can iterate to avoid the DOS\n     * @param loopsLimit Number of loops limit\n     * @custom:event Emits MaxLoopsLimitUpdated event on success\n     * @custom:access Controlled by ACM\n     */\n    function setMaxLoopsLimit(uint256 loopsLimit) external {\n        _checkAccessAllowed(\"setMaxLoopsLimit(uint256)\");\n        _setMaxLoopsLimit(loopsLimit);\n    }\n\n    /// @notice Creates a VenusERC4626 vault for a given asset and comptroller\n    /// @param vToken The vToken address to create the vault\n    /// @return vault The deployed VenusERC4626 vault\n    /// @custom:error ZeroAddressNotAllowed is thrown when the vToken address is zero\n    /// @custom:error VenusERC4626Factory__InvalidVToken is thrown when the provided vToken is not supported by the poolRegistry\n    /// @custom:error VenusERC4626Factory__ERC4626AlreadyExists is thrown when this factory already created a VenusERC4626 for the provided vToken\n    /// @custom:event CreateERC4626 is emitted when the ERC4626 wrapper is created\n    function createERC4626(address vToken) external returns (ERC4626Upgradeable vault) {\n        ensureNonzeroAddress(vToken);\n\n        if (address(createdVaults[vToken]) != address(0)) {\n            revert VenusERC4626Factory__ERC4626AlreadyExists();\n        }\n\n        VTokenInterface vToken_ = VTokenInterface(vToken);\n\n        address comptroller = address(vToken_.comptroller());\n\n        if (vToken != poolRegistry.getVTokenForAsset(comptroller, vToken_.underlying())) {\n            revert VenusERC4626Factory__InvalidVToken();\n        }\n\n        VenusERC4626 venusERC4626 = VenusERC4626(\n            address(\n                new BeaconProxy{ salt: SALT }(\n                    address(beacon),\n                    abi.encodeWithSelector(VenusERC4626.initialize.selector, vToken)\n                )\n            )\n        );\n\n        venusERC4626.initialize2(address(_accessControlManager), rewardRecipient, maxLoopsLimit, owner());\n\n        vault = ERC4626Upgradeable(address(venusERC4626));\n\n        createdVaults[vToken] = vault;\n\n        emit CreateERC4626(vToken_, vault);\n    }\n\n    /// @notice Predicts the vault address for a given vToken\n    /// @param vToken The vToken address\n    /// @return The precomputed vault address\n    function computeVaultAddress(address vToken) public view returns (address) {\n        return\n            address(\n                uint160(\n                    uint256(\n                        keccak256(\n                            abi.encodePacked(\n                                bytes1(0xff),\n                                address(this),\n                                SALT,\n                                keccak256(\n                                    abi.encodePacked(\n                                        type(BeaconProxy).creationCode,\n                                        abi.encode(\n                                            address(beacon),\n                                            abi.encodeWithSelector(VenusERC4626.initialize.selector, vToken)\n                                        )\n                                    )\n                                )\n                            )\n                        )\n                    )\n                )\n            );\n    }\n}\n"},"contracts/hardhat-dependency-compiler/hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport 'hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol';\n"},"contracts/hardhat-dependency-compiler/hardhat-deploy/solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport 'hardhat-deploy/solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol';\n"},"contracts/test/Mocks/MockVenusERC4626.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\nimport { VenusERC4626 } from \"../../ERC4626/VenusERC4626.sol\";\nimport { IERC20Upgradeable } from \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\nimport { ERC20Upgradeable } from \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\";\n\ncontract MockVenusERC4626 is VenusERC4626 {\n    mapping(address => uint256) private _balances;\n    uint256 private mockTotalAssets;\n    uint256 private mockMaxDeposit;\n    uint256 private mockMaxWithdraw;\n    uint256 private mockMaxMint;\n    uint256 private mockMaxRedeem;\n    uint256 private mockTotalSupply;\n\n    // Mock functions for testing\n    function setTotalAssets(uint256 _totalAssets) external {\n        mockTotalAssets = _totalAssets;\n    }\n\n    function setMaxWithdraw(uint256 _maxWithdraw) external {\n        mockMaxWithdraw = _maxWithdraw;\n    }\n\n    function setMaxDeposit(uint256 _maxDeposit) external {\n        mockMaxDeposit = _maxDeposit;\n    }\n\n    function setMaxRedeem(uint256 _maxRedeem) external {\n        mockMaxRedeem = _maxRedeem;\n    }\n\n    function setMaxMint(uint256 _maxMint) external {\n        mockMaxMint = _maxMint;\n    }\n\n    function setTotalSupply(uint256 _totalSupply) external {\n        mockTotalSupply = _totalSupply;\n    }\n\n    function setAccountBalance(address account, uint256 balance) public {\n        _balances[account] = balance;\n    }\n\n    // Override totalAssets to return the mocked value\n    function totalAssets() public view override returns (uint256) {\n        return mockTotalAssets;\n    }\n\n    // Override maxDeposit to return the mocked value\n    function maxDeposit(address) public view override returns (uint256) {\n        return mockMaxDeposit;\n    }\n\n    // Override maxWithdraw to return the mocked value\n    function maxWithdraw(address) public view override returns (uint256) {\n        return mockMaxWithdraw;\n    }\n\n    function maxMint(address) public view override returns (uint256) {\n        return mockMaxMint;\n    }\n\n    function maxRedeem(address) public view override returns (uint256) {\n        return mockMaxRedeem;\n    }\n\n    function totalSupply() public view override(ERC20Upgradeable, IERC20Upgradeable) returns (uint256) {\n        return mockTotalSupply;\n    }\n\n    function _mint(address account, uint256 amount) internal override {\n        mockTotalSupply += amount;\n        _balances[account] += amount;\n        super._mint(account, amount);\n    }\n\n    function _burn(address account, uint256 amount) internal override {\n        mockTotalSupply -= amount;\n        _balances[account] -= amount;\n        super._burn(account, amount);\n    }\n}\n"},"hardhat-deploy/solc_0.8/openzeppelin/access/Ownable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n    address private _owner;\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the deployer as the initial owner.\n     */\n    constructor (address initialOwner) {\n        _transferOwnership(initialOwner);\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n        _;\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby removing any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        address oldOwner = _owner;\n        _owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n}\n"},"hardhat-deploy/solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n    /**\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n     * address.\n     *\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n     * function revert if invoked through a proxy.\n     */\n    function proxiableUUID() external view returns (bytes32);\n}\n"},"hardhat-deploy/solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n    /**\n     * @dev Must return an address that can be used as a delegate call target.\n     *\n     * {BeaconProxy} will check that this address is a contract.\n     */\n    function implementation() external view returns (address);\n}\n"},"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n    /**\n     * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n     *\n     * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n     * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n     */\n    constructor(address _logic, bytes memory _data) payable {\n        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n        _upgradeToAndCall(_logic, _data, false);\n    }\n\n    /**\n     * @dev Returns the current implementation address.\n     */\n    function _implementation() internal view virtual override returns (address impl) {\n        return ERC1967Upgrade._getImplementation();\n    }\n}\n"},"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n    // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n    /**\n     * @dev Storage slot with the address of the current implementation.\n     * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n     * validated in the constructor.\n     */\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n    /**\n     * @dev Emitted when the implementation is upgraded.\n     */\n    event Upgraded(address indexed implementation);\n\n    /**\n     * @dev Returns the current implementation address.\n     */\n    function _getImplementation() internal view returns (address) {\n        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new address in the EIP1967 implementation slot.\n     */\n    function _setImplementation(address newImplementation) private {\n        require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n    }\n\n    /**\n     * @dev Perform implementation upgrade\n     *\n     * Emits an {Upgraded} event.\n     */\n    function _upgradeTo(address newImplementation) internal {\n        _setImplementation(newImplementation);\n        emit Upgraded(newImplementation);\n    }\n\n    /**\n     * @dev Perform implementation upgrade with additional setup call.\n     *\n     * Emits an {Upgraded} event.\n     */\n    function _upgradeToAndCall(\n        address newImplementation,\n        bytes memory data,\n        bool forceCall\n    ) internal {\n        _upgradeTo(newImplementation);\n        if (data.length > 0 || forceCall) {\n            Address.functionDelegateCall(newImplementation, data);\n        }\n    }\n\n    /**\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n     *\n     * Emits an {Upgraded} event.\n     */\n    function _upgradeToAndCallUUPS(\n        address newImplementation,\n        bytes memory data,\n        bool forceCall\n    ) internal {\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\n        if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n            _setImplementation(newImplementation);\n        } else {\n            try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n                require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n            } catch {\n                revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n            }\n            _upgradeToAndCall(newImplementation, data, forceCall);\n        }\n    }\n\n    /**\n     * @dev Storage slot with the admin of the contract.\n     * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n     * validated in the constructor.\n     */\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n    /**\n     * @dev Emitted when the admin account has changed.\n     */\n    event AdminChanged(address previousAdmin, address newAdmin);\n\n    /**\n     * @dev Returns the current admin.\n     */\n    function _getAdmin() internal view virtual returns (address) {\n        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new address in the EIP1967 admin slot.\n     */\n    function _setAdmin(address newAdmin) private {\n        require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n    }\n\n    /**\n     * @dev Changes the admin of the proxy.\n     *\n     * Emits an {AdminChanged} event.\n     */\n    function _changeAdmin(address newAdmin) internal {\n        emit AdminChanged(_getAdmin(), newAdmin);\n        _setAdmin(newAdmin);\n    }\n\n    /**\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n     */\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n    /**\n     * @dev Emitted when the beacon is upgraded.\n     */\n    event BeaconUpgraded(address indexed beacon);\n\n    /**\n     * @dev Returns the current beacon.\n     */\n    function _getBeacon() internal view returns (address) {\n        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\n     */\n    function _setBeacon(address newBeacon) private {\n        require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n        require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n    }\n\n    /**\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n     *\n     * Emits a {BeaconUpgraded} event.\n     */\n    function _upgradeBeaconToAndCall(\n        address newBeacon,\n        bytes memory data,\n        bool forceCall\n    ) internal {\n        _setBeacon(newBeacon);\n        emit BeaconUpgraded(newBeacon);\n        if (data.length > 0 || forceCall) {\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n        }\n    }\n}\n"},"hardhat-deploy/solc_0.8/openzeppelin/proxy/Proxy.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n    /**\n     * @dev Delegates the current call to `implementation`.\n     *\n     * This function does not return to its internal call site, it will return directly to the external caller.\n     */\n    function _delegate(address implementation) internal virtual {\n        assembly {\n            // Copy msg.data. We take full control of memory in this inline assembly\n            // block because it will not return to Solidity code. We overwrite the\n            // Solidity scratch pad at memory position 0.\n            calldatacopy(0, 0, calldatasize())\n\n            // Call the implementation.\n            // out and outsize are 0 because we don't know the size yet.\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n            // Copy the returned data.\n            returndatacopy(0, 0, returndatasize())\n\n            switch result\n            // delegatecall returns 0 on error.\n            case 0 {\n                revert(0, returndatasize())\n            }\n            default {\n                return(0, returndatasize())\n            }\n        }\n    }\n\n    /**\n     * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n     * and {_fallback} should delegate.\n     */\n    function _implementation() internal view virtual returns (address);\n\n    /**\n     * @dev Delegates the current call to the address returned by `_implementation()`.\n     *\n     * This function does not return to its internall call site, it will return directly to the external caller.\n     */\n    function _fallback() internal virtual {\n        _beforeFallback();\n        _delegate(_implementation());\n    }\n\n    /**\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n     * function in the contract matches the call data.\n     */\n    fallback() external payable virtual {\n        _fallback();\n    }\n\n    /**\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n     * is empty.\n     */\n    receive() external payable virtual {\n        _fallback();\n    }\n\n    /**\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n     * call, or as part of the Solidity `fallback` or `receive` functions.\n     *\n     * If overriden should call `super._beforeFallback()`.\n     */\n    function _beforeFallback() internal virtual {}\n}\n"},"hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n    constructor (address initialOwner) Ownable(initialOwner) {}\n\n    /**\n     * @dev Returns the current implementation of `proxy`.\n     *\n     * Requirements:\n     *\n     * - This contract must be the admin of `proxy`.\n     */\n    function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n        // We need to manually run the static call since the getter cannot be flagged as view\n        // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n        (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n        require(success);\n        return abi.decode(returndata, (address));\n    }\n\n    /**\n     * @dev Returns the current admin of `proxy`.\n     *\n     * Requirements:\n     *\n     * - This contract must be the admin of `proxy`.\n     */\n    function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n        // We need to manually run the static call since the getter cannot be flagged as view\n        // bytes4(keccak256(\"admin()\")) == 0xf851a440\n        (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n        require(success);\n        return abi.decode(returndata, (address));\n    }\n\n    /**\n     * @dev Changes the admin of `proxy` to `newAdmin`.\n     *\n     * Requirements:\n     *\n     * - This contract must be the current admin of `proxy`.\n     */\n    function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n        proxy.changeAdmin(newAdmin);\n    }\n\n    /**\n     * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n     *\n     * Requirements:\n     *\n     * - This contract must be the admin of `proxy`.\n     */\n    function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n        proxy.upgradeTo(implementation);\n    }\n\n    /**\n     * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n     * {TransparentUpgradeableProxy-upgradeToAndCall}.\n     *\n     * Requirements:\n     *\n     * - This contract must be the admin of `proxy`.\n     */\n    function upgradeAndCall(\n        TransparentUpgradeableProxy proxy,\n        address implementation,\n        bytes memory data\n    ) public payable virtual onlyOwner {\n        proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n    }\n}\n"},"hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n    /**\n     * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n     * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n     */\n    constructor(\n        address _logic,\n        address admin_,\n        bytes memory _data\n    ) payable ERC1967Proxy(_logic, _data) {\n        assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n        _changeAdmin(admin_);\n    }\n\n    /**\n     * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n     */\n    modifier ifAdmin() {\n        if (msg.sender == _getAdmin()) {\n            _;\n        } else {\n            _fallback();\n        }\n    }\n\n    /**\n     * @dev Returns the current admin.\n     *\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n     *\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n     */\n    function admin() external ifAdmin returns (address admin_) {\n        admin_ = _getAdmin();\n    }\n\n    /**\n     * @dev Returns the current implementation.\n     *\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n     *\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n     * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n     */\n    function implementation() external ifAdmin returns (address implementation_) {\n        implementation_ = _implementation();\n    }\n\n    /**\n     * @dev Changes the admin of the proxy.\n     *\n     * Emits an {AdminChanged} event.\n     *\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n     */\n    function changeAdmin(address newAdmin) external virtual ifAdmin {\n        _changeAdmin(newAdmin);\n    }\n\n    /**\n     * @dev Upgrade the implementation of the proxy.\n     *\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n     */\n    function upgradeTo(address newImplementation) external ifAdmin {\n        _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n    }\n\n    /**\n     * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n     * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n     * proxied contract.\n     *\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n     */\n    function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n        _upgradeToAndCall(newImplementation, data, true);\n    }\n\n    /**\n     * @dev Returns the current admin.\n     */\n    function _admin() internal view virtual returns (address) {\n        return _getAdmin();\n    }\n\n    /**\n     * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n     */\n    function _beforeFallback() internal virtual override {\n        require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n        super._beforeFallback();\n    }\n}\n"},"hardhat-deploy/solc_0.8/openzeppelin/utils/Address.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev Returns true if `account` is a contract.\n     *\n     * [IMPORTANT]\n     * ====\n     * It is unsafe to assume that an address for which this function returns\n     * false is an externally-owned account (EOA) and not a contract.\n     *\n     * Among others, `isContract` will return false for the following\n     * types of addresses:\n     *\n     *  - an externally-owned account\n     *  - a contract in construction\n     *  - an address where a contract will be created\n     *  - an address where a contract lived, but was destroyed\n     * ====\n     *\n     * [IMPORTANT]\n     * ====\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\n     *\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n     * constructor.\n     * ====\n     */\n    function isContract(address account) internal view returns (bool) {\n        // This method relies on extcodesize/address.code.length, which returns 0\n        // for contracts in construction, since the code is only stored at the end\n        // of the constructor execution.\n\n        return account.code.length > 0;\n    }\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n        (bool success, ) = recipient.call{value: amount}(\"\");\n        require(success, \"Address: unable to send value, recipient may have reverted\");\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain `call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason, it is bubbled up by this\n     * function (like regular Solidity function calls).\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionCall(target, data, \"Address: low-level call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n     * `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(\n        address target,\n        bytes memory data,\n        uint256 value\n    ) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(\n        address target,\n        bytes memory data,\n        uint256 value,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        require(address(this).balance >= value, \"Address: insufficient balance for call\");\n        require(isContract(target), \"Address: call to non-contract\");\n\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\n        return verifyCallResult(success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n        return functionStaticCall(target, data, \"Address: low-level static call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal view returns (bytes memory) {\n        require(isContract(target), \"Address: static call to non-contract\");\n\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return verifyCallResult(success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        require(isContract(target), \"Address: delegate call to non-contract\");\n\n        (bool success, bytes memory returndata) = target.delegatecall(data);\n        return verifyCallResult(success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n     * revert reason using the provided one.\n     *\n     * _Available since v4.3._\n     */\n    function verifyCallResult(\n        bool success,\n        bytes memory returndata,\n        string memory errorMessage\n    ) internal pure returns (bytes memory) {\n        if (success) {\n            return returndata;\n        } else {\n            // Look for revert reason and bubble it up if present\n            if (returndata.length > 0) {\n                // The easiest way to bubble the revert reason is using memory via assembly\n\n                assembly {\n                    let returndata_size := mload(returndata)\n                    revert(add(32, returndata), returndata_size)\n                }\n            } else {\n                revert(errorMessage);\n            }\n        }\n    }\n}\n"},"hardhat-deploy/solc_0.8/openzeppelin/utils/Context.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n}\n"},"hardhat-deploy/solc_0.8/openzeppelin/utils/StorageSlot.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n *     function _getImplementation() internal view returns (address) {\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n *     }\n *\n *     function _setImplementation(address newImplementation) internal {\n *         require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n *     }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n    struct AddressSlot {\n        address value;\n    }\n\n    struct BooleanSlot {\n        bool value;\n    }\n\n    struct Bytes32Slot {\n        bytes32 value;\n    }\n\n    struct Uint256Slot {\n        uint256 value;\n    }\n\n    /**\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n     */\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n     */\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n     */\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n     */\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n        assembly {\n            r.slot := slot\n        }\n    }\n}\n"},"hardhat-deploy/solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n    address internal immutable _ADMIN;\n\n    /**\n     * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n     * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n     */\n    constructor(\n        address _logic,\n        address admin_,\n        bytes memory _data\n    ) payable ERC1967Proxy(_logic, _data) {\n        assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n        _ADMIN = admin_;\n\n        // still store it to work with EIP-1967\n        bytes32 slot = _ADMIN_SLOT;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            sstore(slot, admin_)\n        }\n        emit AdminChanged(address(0), admin_);\n    }\n\n    /**\n     * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n     */\n    modifier ifAdmin() {\n        if (msg.sender == _getAdmin()) {\n            _;\n        } else {\n            _fallback();\n        }\n    }\n\n    /**\n     * @dev Returns the current admin.\n     *\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n     *\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n     */\n    function admin() external ifAdmin returns (address admin_) {\n        admin_ = _getAdmin();\n    }\n\n    /**\n     * @dev Returns the current implementation.\n     *\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n     *\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n     * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n     */\n    function implementation() external ifAdmin returns (address implementation_) {\n        implementation_ = _implementation();\n    }\n\n    /**\n     * @dev Upgrade the implementation of the proxy.\n     *\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n     */\n    function upgradeTo(address newImplementation) external ifAdmin {\n        _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n    }\n\n    /**\n     * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n     * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n     * proxied contract.\n     *\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n     */\n    function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n        _upgradeToAndCall(newImplementation, data, true);\n    }\n\n    /**\n     * @dev Returns the current admin.\n     */\n    function _admin() internal view virtual returns (address) {\n        return _getAdmin();\n    }\n\n    /**\n     * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n     */\n    function _beforeFallback() internal virtual override {\n        require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n        super._beforeFallback();\n    }\n\n    function _getAdmin() internal view virtual override returns (address) {\n        return _ADMIN;\n    }\n}\n"}},"settings":{"optimizer":{"enabled":true,"runs":200,"details":{"yul":false}},"evmVersion":"paris","outputSelection":{"*":{"*":["storageLayout","abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata","devdoc","userdoc","evm.gasEstimates"],"":["ast"]}},"metadata":{"useLiteralContent":true}}},"output":{"errors":[{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> @venusprotocol/isolated-pools/contracts/Comptroller.sol:463:57:\n    |\n463 |     function mintVerify(address vToken, address minter, uint256 actualMintAmount, uint256 mintTokens) external {\n    |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":21291,"file":"@venusprotocol/isolated-pools/contracts/Comptroller.sol","start":21267},"type":"Warning"},{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> @venusprotocol/isolated-pools/contracts/Comptroller.sol:463:83:\n    |\n463 |     function mintVerify(address vToken, address minter, uint256 actualMintAmount, uint256 mintTokens) external {\n    |                                                                                   ^^^^^^^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":21311,"file":"@venusprotocol/isolated-pools/contracts/Comptroller.sol","start":21293},"type":"Warning"},{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> @venusprotocol/isolated-pools/contracts/Comptroller.sol:503:61:\n    |\n503 |     function redeemVerify(address vToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens) external {\n    |                                                             ^^^^^^^^^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":23389,"file":"@venusprotocol/isolated-pools/contracts/Comptroller.sol","start":23369},"type":"Warning"},{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> @venusprotocol/isolated-pools/contracts/Comptroller.sol:503:83:\n    |\n503 |     function redeemVerify(address vToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens) external {\n    |                                                                                   ^^^^^^^^^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":23411,"file":"@venusprotocol/isolated-pools/contracts/Comptroller.sol","start":23391},"type":"Warning"},{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> @venusprotocol/isolated-pools/contracts/Comptroller.sol:518:9:\n    |\n518 |         address payer, // solhint-disable-line no-unused-vars\n    |         ^^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":23977,"file":"@venusprotocol/isolated-pools/contracts/Comptroller.sol","start":23964},"type":"Warning"},{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> @venusprotocol/isolated-pools/contracts/Comptroller.sol:520:9:\n    |\n520 |         uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\n    |         ^^^^^^^^^^^^^^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":24077,"file":"@venusprotocol/isolated-pools/contracts/Comptroller.sol","start":24052},"type":"Warning"},{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> @venusprotocol/isolated-pools/contracts/Comptroller.sol:521:9:\n    |\n521 |         uint256 borrowerIndex // solhint-disable-line no-unused-vars\n    |         ^^^^^^^^^^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":24147,"file":"@venusprotocol/isolated-pools/contracts/Comptroller.sol","start":24126},"type":"Warning"},{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> @venusprotocol/isolated-pools/contracts/Comptroller.sol:539:9:\n    |\n539 |         address vTokenCollateral, // solhint-disable-line no-unused-vars\n    |         ^^^^^^^^^^^^^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":25008,"file":"@venusprotocol/isolated-pools/contracts/Comptroller.sol","start":24984},"type":"Warning"},{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> @venusprotocol/isolated-pools/contracts/Comptroller.sol:542:9:\n    |\n542 |         uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\n    |         ^^^^^^^^^^^^^^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":25136,"file":"@venusprotocol/isolated-pools/contracts/Comptroller.sol","start":25111},"type":"Warning"},{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> @venusprotocol/isolated-pools/contracts/Comptroller.sol:543:9:\n    |\n543 |         uint256 seizeTokens // solhint-disable-line no-unused-vars\n    |         ^^^^^^^^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":25204,"file":"@venusprotocol/isolated-pools/contracts/Comptroller.sol","start":25185},"type":"Warning"},{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> @venusprotocol/isolated-pools/contracts/Comptroller.sol:561:9:\n    |\n561 |         address vTokenBorrowed, // solhint-disable-line no-unused-vars\n    |         ^^^^^^^^^^^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":26049,"file":"@venusprotocol/isolated-pools/contracts/Comptroller.sol","start":26027},"type":"Warning"},{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> @venusprotocol/isolated-pools/contracts/Comptroller.sol:564:9:\n    |\n564 |         uint256 seizeTokens // solhint-disable-line no-unused-vars\n    |         ^^^^^^^^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":26171,"file":"@venusprotocol/isolated-pools/contracts/Comptroller.sol","start":26152},"type":"Warning"},{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> @venusprotocol/isolated-pools/contracts/Comptroller.sol:580:71:\n    |\n580 |     function transferVerify(address vToken, address src, address dst, uint256 transferTokens) external {\n    |                                                                       ^^^^^^^^^^^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":26935,"file":"@venusprotocol/isolated-pools/contracts/Comptroller.sol","start":26913},"type":"Warning"},{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> @venusprotocol/isolated-pools/contracts/Comptroller.sol:665:61:\n    |\n665 |     function borrowVerify(address vToken, address borrower, uint256 borrowAmount) external {\n    |                                                             ^^^^^^^^^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":30712,"file":"@venusprotocol/isolated-pools/contracts/Comptroller.sol","start":30692},"type":"Warning"},{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n   --> contracts/ERC4626/VenusERC4626.sol:431:73:\n    |\n431 |     function _deposit(address caller, address receiver, uint256 assets, uint256 shares) internal override {\n    |                                                                         ^^^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":19925,"file":"contracts/ERC4626/VenusERC4626.sol","start":19911},"type":"Warning"},{"component":"general","errorCode":"5574","formattedMessage":"Warning: Contract code size is 24929 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low \"runs\" value!), turning off revert strings, or using libraries.\n  --> @venusprotocol/isolated-pools/contracts/Comptroller.sol:40:1:\n   |\n40 | contract Comptroller is\n   | ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"Contract code size is 24929 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low \"runs\" value!), turning off revert strings, or using libraries.","severity":"warning","sourceLocation":{"end":79842,"file":"@venusprotocol/isolated-pools/contracts/Comptroller.sol","start":3223},"type":"Warning"}],"sources":{"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol","exportedSymbols":{"ContextUpgradeable":[2821],"Initializable":[576],"Ownable2StepUpgradeable":[106],"OwnableUpgradeable":[239]},"id":107,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"107:23:0"},{"absolutePath":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","file":"./OwnableUpgradeable.sol","id":2,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":107,"sourceUnit":240,"src":"132:34:0","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"../proxy/utils/Initializable.sol","id":4,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":107,"sourceUnit":577,"src":"167:63:0","symbolAliases":[{"foreign":{"id":3,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":576,"src":"175:13:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":6,"name":"Initializable","nameLocations":["719:13:0"],"nodeType":"IdentifierPath","referencedDeclaration":576,"src":"719:13:0"},"id":7,"nodeType":"InheritanceSpecifier","src":"719:13:0"},{"baseName":{"id":8,"name":"OwnableUpgradeable","nameLocations":["734:18:0"],"nodeType":"IdentifierPath","referencedDeclaration":239,"src":"734:18:0"},"id":9,"nodeType":"InheritanceSpecifier","src":"734:18:0"}],"canonicalName":"Ownable2StepUpgradeable","contractDependencies":[],"contractKind":"contract","documentation":{"id":5,"nodeType":"StructuredDocumentation","src":"232:441:0","text":" @dev Contract module which provides access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n By default, the owner account will be the one that deploys the contract. This\n can later be changed with {transferOwnership} and {acceptOwnership}.\n This module is used through inheritance. It will make available all functions\n from parent (Ownable)."},"fullyImplemented":true,"id":106,"linearizedBaseContracts":[106,239,2821,576],"name":"Ownable2StepUpgradeable","nameLocation":"692:23:0","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":11,"mutability":"mutable","name":"_pendingOwner","nameLocation":"775:13:0","nodeType":"VariableDeclaration","scope":106,"src":"759:29:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10,"name":"address","nodeType":"ElementaryTypeName","src":"759:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"eventSelector":"38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700","id":17,"name":"OwnershipTransferStarted","nameLocation":"801:24:0","nodeType":"EventDefinition","parameters":{"id":16,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"842:13:0","nodeType":"VariableDeclaration","scope":17,"src":"826:29:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12,"name":"address","nodeType":"ElementaryTypeName","src":"826:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"873:8:0","nodeType":"VariableDeclaration","scope":17,"src":"857:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14,"name":"address","nodeType":"ElementaryTypeName","src":"857:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"825:57:0"},"src":"795:88:0"},{"body":{"id":25,"nodeType":"Block","src":"946:43:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":22,"name":"__Ownable_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":145,"src":"956:24:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":23,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"956:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24,"nodeType":"ExpressionStatement","src":"956:26:0"}]},"id":26,"implemented":true,"kind":"function","modifiers":[{"id":20,"kind":"modifierInvocation","modifierName":{"id":19,"name":"onlyInitializing","nameLocations":["929:16:0"],"nodeType":"IdentifierPath","referencedDeclaration":521,"src":"929:16:0"},"nodeType":"ModifierInvocation","src":"929:16:0"}],"name":"__Ownable2Step_init","nameLocation":"898:19:0","nodeType":"FunctionDefinition","parameters":{"id":18,"nodeType":"ParameterList","parameters":[],"src":"917:2:0"},"returnParameters":{"id":21,"nodeType":"ParameterList","parameters":[],"src":"946:0:0"},"scope":106,"src":"889:100:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":31,"nodeType":"Block","src":"1062:7:0","statements":[]},"id":32,"implemented":true,"kind":"function","modifiers":[{"id":29,"kind":"modifierInvocation","modifierName":{"id":28,"name":"onlyInitializing","nameLocations":["1045:16:0"],"nodeType":"IdentifierPath","referencedDeclaration":521,"src":"1045:16:0"},"nodeType":"ModifierInvocation","src":"1045:16:0"}],"name":"__Ownable2Step_init_unchained","nameLocation":"1004:29:0","nodeType":"FunctionDefinition","parameters":{"id":27,"nodeType":"ParameterList","parameters":[],"src":"1033:2:0"},"returnParameters":{"id":30,"nodeType":"ParameterList","parameters":[],"src":"1062:0:0"},"scope":106,"src":"995:74:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":40,"nodeType":"Block","src":"1206:37:0","statements":[{"expression":{"id":38,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11,"src":"1223:13:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":37,"id":39,"nodeType":"Return","src":"1216:20:0"}]},"documentation":{"id":33,"nodeType":"StructuredDocumentation","src":"1074:65:0","text":" @dev Returns the address of the pending owner."},"functionSelector":"e30c3978","id":41,"implemented":true,"kind":"function","modifiers":[],"name":"pendingOwner","nameLocation":"1153:12:0","nodeType":"FunctionDefinition","parameters":{"id":34,"nodeType":"ParameterList","parameters":[],"src":"1165:2:0"},"returnParameters":{"id":37,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41,"src":"1197:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35,"name":"address","nodeType":"ElementaryTypeName","src":"1197:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1196:9:0"},"scope":106,"src":"1144:99:0","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[213],"body":{"id":60,"nodeType":"Block","src":"1515:99:0","statements":[{"expression":{"id":52,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11,"src":"1525:13:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":51,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44,"src":"1541:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1525:24:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":53,"nodeType":"ExpressionStatement","src":"1525:24:0"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":55,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":162,"src":"1589:5:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":56,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1589:7:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":57,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44,"src":"1598:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54,"name":"OwnershipTransferStarted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17,"src":"1564:24:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":58,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1564:43:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59,"nodeType":"EmitStatement","src":"1559:48:0"}]},"documentation":{"id":42,"nodeType":"StructuredDocumentation","src":"1249:182:0","text":" @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":61,"implemented":true,"kind":"function","modifiers":[{"id":48,"kind":"modifierInvocation","modifierName":{"id":47,"name":"onlyOwner","nameLocations":["1505:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":153,"src":"1505:9:0"},"nodeType":"ModifierInvocation","src":"1505:9:0"}],"name":"transferOwnership","nameLocation":"1445:17:0","nodeType":"FunctionDefinition","overrides":{"id":46,"nodeType":"OverrideSpecifier","overrides":[],"src":"1496:8:0"},"parameters":{"id":45,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44,"mutability":"mutable","name":"newOwner","nameLocation":"1471:8:0","nodeType":"VariableDeclaration","scope":61,"src":"1463:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43,"name":"address","nodeType":"ElementaryTypeName","src":"1463:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1462:18:0"},"returnParameters":{"id":49,"nodeType":"ParameterList","parameters":[],"src":"1515:0:0"},"scope":106,"src":"1436:178:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[233],"body":{"id":77,"nodeType":"Block","src":"1870:81:0","statements":[{"expression":{"id":69,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"1880:20:0","subExpression":{"id":68,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11,"src":"1887:13:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":70,"nodeType":"ExpressionStatement","src":"1880:20:0"},{"expression":{"arguments":[{"id":74,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64,"src":"1935:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":71,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"1910:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_Ownable2StepUpgradeable_$106_$","typeString":"type(contract super Ownable2StepUpgradeable)"}},"id":73,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1916:18:0","memberName":"_transferOwnership","nodeType":"MemberAccess","referencedDeclaration":233,"src":"1910:24:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":75,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1910:34:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76,"nodeType":"ExpressionStatement","src":"1910:34:0"}]},"documentation":{"id":62,"nodeType":"StructuredDocumentation","src":"1620:173:0","text":" @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\n Internal function without access restriction."},"id":78,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"1807:18:0","nodeType":"FunctionDefinition","overrides":{"id":66,"nodeType":"OverrideSpecifier","overrides":[],"src":"1861:8:0"},"parameters":{"id":65,"nodeType":"ParameterList","parameters":[{"constant":false,"id":64,"mutability":"mutable","name":"newOwner","nameLocation":"1834:8:0","nodeType":"VariableDeclaration","scope":78,"src":"1826:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63,"name":"address","nodeType":"ElementaryTypeName","src":"1826:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1825:18:0"},"returnParameters":{"id":67,"nodeType":"ParameterList","parameters":[],"src":"1870:0:0"},"scope":106,"src":"1798:153:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":99,"nodeType":"Block","src":"2073:170:0","statements":[{"assignments":[83],"declarations":[{"constant":false,"id":83,"mutability":"mutable","name":"sender","nameLocation":"2091:6:0","nodeType":"VariableDeclaration","scope":99,"src":"2083:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":82,"name":"address","nodeType":"ElementaryTypeName","src":"2083:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":86,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":84,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2798,"src":"2100:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":85,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2100:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2083:29:0"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":91,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":88,"name":"pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41,"src":"2130:12:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":89,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2130:14:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":90,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":83,"src":"2148:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2130:24:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206e6577206f776e6572","id":92,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2156:43:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc","typeString":"literal_string \"Ownable2Step: caller is not the new owner\""},"value":"Ownable2Step: caller is not the new owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc","typeString":"literal_string \"Ownable2Step: caller is not the new owner\""}],"id":87,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2122:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":93,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2122:78:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":94,"nodeType":"ExpressionStatement","src":"2122:78:0"},{"expression":{"arguments":[{"id":96,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":83,"src":"2229:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":95,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[78],"referencedDeclaration":78,"src":"2210:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":97,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2210:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98,"nodeType":"ExpressionStatement","src":"2210:26:0"}]},"documentation":{"id":79,"nodeType":"StructuredDocumentation","src":"1957:69:0","text":" @dev The new owner accepts the ownership transfer."},"functionSelector":"79ba5097","id":100,"implemented":true,"kind":"function","modifiers":[],"name":"acceptOwnership","nameLocation":"2040:15:0","nodeType":"FunctionDefinition","parameters":{"id":80,"nodeType":"ParameterList","parameters":[],"src":"2055:2:0"},"returnParameters":{"id":81,"nodeType":"ParameterList","parameters":[],"src":"2073:0:0"},"scope":106,"src":"2031:212:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"constant":false,"documentation":{"id":101,"nodeType":"StructuredDocumentation","src":"2249:254:0","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":105,"mutability":"mutable","name":"__gap","nameLocation":"2528:5:0","nodeType":"VariableDeclaration","scope":106,"src":"2508:25:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage","typeString":"uint256[49]"},"typeName":{"baseType":{"id":102,"name":"uint256","nodeType":"ElementaryTypeName","src":"2508:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":104,"length":{"hexValue":"3439","id":103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2516:2:0","typeDescriptions":{"typeIdentifier":"t_rational_49_by_1","typeString":"int_const 49"},"value":"49"},"nodeType":"ArrayTypeName","src":"2508:11:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage_ptr","typeString":"uint256[49]"}},"visibility":"private"}],"scope":107,"src":"674:1862:0","usedErrors":[],"usedEvents":[17,124,422]}],"src":"107:2430:0"},"id":0},"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","exportedSymbols":{"ContextUpgradeable":[2821],"Initializable":[576],"OwnableUpgradeable":[239]},"id":240,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":108,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"102:23:1"},{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol","file":"../utils/ContextUpgradeable.sol","id":109,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":240,"sourceUnit":2822,"src":"127:41:1","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"../proxy/utils/Initializable.sol","id":111,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":240,"sourceUnit":577,"src":"169:63:1","symbolAliases":[{"foreign":{"id":110,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":576,"src":"177:13:1","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":113,"name":"Initializable","nameLocations":["769:13:1"],"nodeType":"IdentifierPath","referencedDeclaration":576,"src":"769:13:1"},"id":114,"nodeType":"InheritanceSpecifier","src":"769:13:1"},{"baseName":{"id":115,"name":"ContextUpgradeable","nameLocations":["784:18:1"],"nodeType":"IdentifierPath","referencedDeclaration":2821,"src":"784:18:1"},"id":116,"nodeType":"InheritanceSpecifier","src":"784:18:1"}],"canonicalName":"OwnableUpgradeable","contractDependencies":[],"contractKind":"contract","documentation":{"id":112,"nodeType":"StructuredDocumentation","src":"234:494:1","text":" @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n By default, the owner account will be the one that deploys the contract. This\n can later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."},"fullyImplemented":true,"id":239,"linearizedBaseContracts":[239,2821,576],"name":"OwnableUpgradeable","nameLocation":"747:18:1","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":118,"mutability":"mutable","name":"_owner","nameLocation":"825:6:1","nodeType":"VariableDeclaration","scope":239,"src":"809:22:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":117,"name":"address","nodeType":"ElementaryTypeName","src":"809:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":124,"name":"OwnershipTransferred","nameLocation":"844:20:1","nodeType":"EventDefinition","parameters":{"id":123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":120,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"881:13:1","nodeType":"VariableDeclaration","scope":124,"src":"865:29:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":119,"name":"address","nodeType":"ElementaryTypeName","src":"865:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":122,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"912:8:1","nodeType":"VariableDeclaration","scope":124,"src":"896:24:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":121,"name":"address","nodeType":"ElementaryTypeName","src":"896:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"864:57:1"},"src":"838:84:1"},{"body":{"id":133,"nodeType":"Block","src":"1076:43:1","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":130,"name":"__Ownable_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":145,"src":"1086:24:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":131,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1086:26:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":132,"nodeType":"ExpressionStatement","src":"1086:26:1"}]},"documentation":{"id":125,"nodeType":"StructuredDocumentation","src":"928:91:1","text":" @dev Initializes the contract setting the deployer as the initial owner."},"id":134,"implemented":true,"kind":"function","modifiers":[{"id":128,"kind":"modifierInvocation","modifierName":{"id":127,"name":"onlyInitializing","nameLocations":["1059:16:1"],"nodeType":"IdentifierPath","referencedDeclaration":521,"src":"1059:16:1"},"nodeType":"ModifierInvocation","src":"1059:16:1"}],"name":"__Ownable_init","nameLocation":"1033:14:1","nodeType":"FunctionDefinition","parameters":{"id":126,"nodeType":"ParameterList","parameters":[],"src":"1047:2:1"},"returnParameters":{"id":129,"nodeType":"ParameterList","parameters":[],"src":"1076:0:1"},"scope":239,"src":"1024:95:1","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":144,"nodeType":"Block","src":"1187:49:1","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":140,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2798,"src":"1216:10:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1216:12:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":139,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":233,"src":"1197:18:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1197:32:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":143,"nodeType":"ExpressionStatement","src":"1197:32:1"}]},"id":145,"implemented":true,"kind":"function","modifiers":[{"id":137,"kind":"modifierInvocation","modifierName":{"id":136,"name":"onlyInitializing","nameLocations":["1170:16:1"],"nodeType":"IdentifierPath","referencedDeclaration":521,"src":"1170:16:1"},"nodeType":"ModifierInvocation","src":"1170:16:1"}],"name":"__Ownable_init_unchained","nameLocation":"1134:24:1","nodeType":"FunctionDefinition","parameters":{"id":135,"nodeType":"ParameterList","parameters":[],"src":"1158:2:1"},"returnParameters":{"id":138,"nodeType":"ParameterList","parameters":[],"src":"1187:0:1"},"scope":239,"src":"1125:111:1","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":152,"nodeType":"Block","src":"1345:41:1","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":148,"name":"_checkOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":176,"src":"1355:11:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1355:13:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":150,"nodeType":"ExpressionStatement","src":"1355:13:1"},{"id":151,"nodeType":"PlaceholderStatement","src":"1378:1:1"}]},"documentation":{"id":146,"nodeType":"StructuredDocumentation","src":"1242:77:1","text":" @dev Throws if called by any account other than the owner."},"id":153,"name":"onlyOwner","nameLocation":"1333:9:1","nodeType":"ModifierDefinition","parameters":{"id":147,"nodeType":"ParameterList","parameters":[],"src":"1342:2:1"},"src":"1324:62:1","virtual":false,"visibility":"internal"},{"body":{"id":161,"nodeType":"Block","src":"1517:30:1","statements":[{"expression":{"id":159,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":118,"src":"1534:6:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":158,"id":160,"nodeType":"Return","src":"1527:13:1"}]},"documentation":{"id":154,"nodeType":"StructuredDocumentation","src":"1392:65:1","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":162,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"1471:5:1","nodeType":"FunctionDefinition","parameters":{"id":155,"nodeType":"ParameterList","parameters":[],"src":"1476:2:1"},"returnParameters":{"id":158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":157,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":162,"src":"1508:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":156,"name":"address","nodeType":"ElementaryTypeName","src":"1508:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1507:9:1"},"scope":239,"src":"1462:85:1","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":175,"nodeType":"Block","src":"1665:85:1","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":167,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":162,"src":"1683:5:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1683:7:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":169,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2798,"src":"1694:10:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1694:12:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1683:23:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","id":172,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1708:34:1","typeDescriptions":{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""},"value":"Ownable: caller is not the owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""}],"id":166,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1675:7:1","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1675:68:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":174,"nodeType":"ExpressionStatement","src":"1675:68:1"}]},"documentation":{"id":163,"nodeType":"StructuredDocumentation","src":"1553:62:1","text":" @dev Throws if the sender is not the owner."},"id":176,"implemented":true,"kind":"function","modifiers":[],"name":"_checkOwner","nameLocation":"1629:11:1","nodeType":"FunctionDefinition","parameters":{"id":164,"nodeType":"ParameterList","parameters":[],"src":"1640:2:1"},"returnParameters":{"id":165,"nodeType":"ParameterList","parameters":[],"src":"1665:0:1"},"scope":239,"src":"1620:130:1","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":189,"nodeType":"Block","src":"2139:47:1","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":185,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2176:1:1","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":184,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2168:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":183,"name":"address","nodeType":"ElementaryTypeName","src":"2168:7:1","typeDescriptions":{}}},"id":186,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2168:10:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":182,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":233,"src":"2149:18:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2149:30:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":188,"nodeType":"ExpressionStatement","src":"2149:30:1"}]},"documentation":{"id":177,"nodeType":"StructuredDocumentation","src":"1756:324:1","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby disabling any functionality that is only available to the owner."},"functionSelector":"715018a6","id":190,"implemented":true,"kind":"function","modifiers":[{"id":180,"kind":"modifierInvocation","modifierName":{"id":179,"name":"onlyOwner","nameLocations":["2129:9:1"],"nodeType":"IdentifierPath","referencedDeclaration":153,"src":"2129:9:1"},"nodeType":"ModifierInvocation","src":"2129:9:1"}],"name":"renounceOwnership","nameLocation":"2094:17:1","nodeType":"FunctionDefinition","parameters":{"id":178,"nodeType":"ParameterList","parameters":[],"src":"2111:2:1"},"returnParameters":{"id":181,"nodeType":"ParameterList","parameters":[],"src":"2139:0:1"},"scope":239,"src":"2085:101:1","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":212,"nodeType":"Block","src":"2405:128:1","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":199,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":193,"src":"2423:8:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":202,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2443:1:1","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":201,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2435:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":200,"name":"address","nodeType":"ElementaryTypeName","src":"2435:7:1","typeDescriptions":{}}},"id":203,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2435:10:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2423:22:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373","id":205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2447:40:1","typeDescriptions":{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""},"value":"Ownable: new owner is the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""}],"id":198,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2415:7:1","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2415:73:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":207,"nodeType":"ExpressionStatement","src":"2415:73:1"},{"expression":{"arguments":[{"id":209,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":193,"src":"2517:8:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":208,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":233,"src":"2498:18:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2498:28:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":211,"nodeType":"ExpressionStatement","src":"2498:28:1"}]},"documentation":{"id":191,"nodeType":"StructuredDocumentation","src":"2192:138:1","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":213,"implemented":true,"kind":"function","modifiers":[{"id":196,"kind":"modifierInvocation","modifierName":{"id":195,"name":"onlyOwner","nameLocations":["2395:9:1"],"nodeType":"IdentifierPath","referencedDeclaration":153,"src":"2395:9:1"},"nodeType":"ModifierInvocation","src":"2395:9:1"}],"name":"transferOwnership","nameLocation":"2344:17:1","nodeType":"FunctionDefinition","parameters":{"id":194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":193,"mutability":"mutable","name":"newOwner","nameLocation":"2370:8:1","nodeType":"VariableDeclaration","scope":213,"src":"2362:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":192,"name":"address","nodeType":"ElementaryTypeName","src":"2362:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2361:18:1"},"returnParameters":{"id":197,"nodeType":"ParameterList","parameters":[],"src":"2405:0:1"},"scope":239,"src":"2335:198:1","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":232,"nodeType":"Block","src":"2750:124:1","statements":[{"assignments":[220],"declarations":[{"constant":false,"id":220,"mutability":"mutable","name":"oldOwner","nameLocation":"2768:8:1","nodeType":"VariableDeclaration","scope":232,"src":"2760:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":219,"name":"address","nodeType":"ElementaryTypeName","src":"2760:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":222,"initialValue":{"id":221,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":118,"src":"2779:6:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2760:25:1"},{"expression":{"id":225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":223,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":118,"src":"2795:6:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":224,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":216,"src":"2804:8:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2795:17:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":226,"nodeType":"ExpressionStatement","src":"2795:17:1"},{"eventCall":{"arguments":[{"id":228,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":220,"src":"2848:8:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":229,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":216,"src":"2858:8:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":227,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":124,"src":"2827:20:1","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":230,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2827:40:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":231,"nodeType":"EmitStatement","src":"2822:45:1"}]},"documentation":{"id":214,"nodeType":"StructuredDocumentation","src":"2539:143:1","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction."},"id":233,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"2696:18:1","nodeType":"FunctionDefinition","parameters":{"id":217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":216,"mutability":"mutable","name":"newOwner","nameLocation":"2723:8:1","nodeType":"VariableDeclaration","scope":233,"src":"2715:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":215,"name":"address","nodeType":"ElementaryTypeName","src":"2715:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2714:18:1"},"returnParameters":{"id":218,"nodeType":"ParameterList","parameters":[],"src":"2750:0:1"},"scope":239,"src":"2687:187:1","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"constant":false,"documentation":{"id":234,"nodeType":"StructuredDocumentation","src":"2880:254:1","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":238,"mutability":"mutable","name":"__gap","nameLocation":"3159:5:1","nodeType":"VariableDeclaration","scope":239,"src":"3139:25:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage","typeString":"uint256[49]"},"typeName":{"baseType":{"id":235,"name":"uint256","nodeType":"ElementaryTypeName","src":"3139:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":237,"length":{"hexValue":"3439","id":236,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3147:2:1","typeDescriptions":{"typeIdentifier":"t_rational_49_by_1","typeString":"int_const 49"},"value":"49"},"nodeType":"ArrayTypeName","src":"3139:11:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage_ptr","typeString":"uint256[49]"}},"visibility":"private"}],"scope":240,"src":"729:2438:1","usedErrors":[],"usedEvents":[124,422]}],"src":"102:3066:1"},"id":1},"@openzeppelin/contracts-upgradeable/interfaces/IERC4626Upgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/interfaces/IERC4626Upgradeable.sol","exportedSymbols":{"IERC20MetadataUpgradeable":[2028],"IERC20Upgradeable":[1352],"IERC4626Upgradeable":[407]},"id":408,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":241,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"107:23:2"},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","file":"../token/ERC20/IERC20Upgradeable.sol","id":242,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":408,"sourceUnit":1353,"src":"132:46:2","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol","file":"../token/ERC20/extensions/IERC20MetadataUpgradeable.sol","id":243,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":408,"sourceUnit":2029,"src":"179:65:2","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":245,"name":"IERC20Upgradeable","nameLocations":["446:17:2"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"446:17:2"},"id":246,"nodeType":"InheritanceSpecifier","src":"446:17:2"},{"baseName":{"id":247,"name":"IERC20MetadataUpgradeable","nameLocations":["465:25:2"],"nodeType":"IdentifierPath","referencedDeclaration":2028,"src":"465:25:2"},"id":248,"nodeType":"InheritanceSpecifier","src":"465:25:2"}],"canonicalName":"IERC4626Upgradeable","contractDependencies":[],"contractKind":"interface","documentation":{"id":244,"nodeType":"StructuredDocumentation","src":"246:166:2","text":" @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\n _Available since v4.7._"},"fullyImplemented":false,"id":407,"linearizedBaseContracts":[407,2028,1352],"name":"IERC4626Upgradeable","nameLocation":"423:19:2","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"dcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7","id":258,"name":"Deposit","nameLocation":"503:7:2","nodeType":"EventDefinition","parameters":{"id":257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":250,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"527:6:2","nodeType":"VariableDeclaration","scope":258,"src":"511:22:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":249,"name":"address","nodeType":"ElementaryTypeName","src":"511:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":252,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"551:5:2","nodeType":"VariableDeclaration","scope":258,"src":"535:21:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":251,"name":"address","nodeType":"ElementaryTypeName","src":"535:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":254,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"566:6:2","nodeType":"VariableDeclaration","scope":258,"src":"558:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":253,"name":"uint256","nodeType":"ElementaryTypeName","src":"558:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":256,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"582:6:2","nodeType":"VariableDeclaration","scope":258,"src":"574:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":255,"name":"uint256","nodeType":"ElementaryTypeName","src":"574:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"510:79:2"},"src":"497:93:2"},{"anonymous":false,"eventSelector":"fbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db","id":270,"name":"Withdraw","nameLocation":"602:8:2","nodeType":"EventDefinition","parameters":{"id":269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":260,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"636:6:2","nodeType":"VariableDeclaration","scope":270,"src":"620:22:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":259,"name":"address","nodeType":"ElementaryTypeName","src":"620:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":262,"indexed":true,"mutability":"mutable","name":"receiver","nameLocation":"668:8:2","nodeType":"VariableDeclaration","scope":270,"src":"652:24:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":261,"name":"address","nodeType":"ElementaryTypeName","src":"652:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":264,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"702:5:2","nodeType":"VariableDeclaration","scope":270,"src":"686:21:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":263,"name":"address","nodeType":"ElementaryTypeName","src":"686:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":266,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"725:6:2","nodeType":"VariableDeclaration","scope":270,"src":"717:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":265,"name":"uint256","nodeType":"ElementaryTypeName","src":"717:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":268,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"749:6:2","nodeType":"VariableDeclaration","scope":270,"src":"741:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":267,"name":"uint256","nodeType":"ElementaryTypeName","src":"741:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"610:151:2"},"src":"596:166:2"},{"documentation":{"id":271,"nodeType":"StructuredDocumentation","src":"768:207:2","text":" @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n - MUST be an ERC-20 token contract.\n - MUST NOT revert."},"functionSelector":"38d52e0f","id":276,"implemented":false,"kind":"function","modifiers":[],"name":"asset","nameLocation":"989:5:2","nodeType":"FunctionDefinition","parameters":{"id":272,"nodeType":"ParameterList","parameters":[],"src":"994:2:2"},"returnParameters":{"id":275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":274,"mutability":"mutable","name":"assetTokenAddress","nameLocation":"1028:17:2","nodeType":"VariableDeclaration","scope":276,"src":"1020:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":273,"name":"address","nodeType":"ElementaryTypeName","src":"1020:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1019:27:2"},"scope":407,"src":"980:67:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":277,"nodeType":"StructuredDocumentation","src":"1053:286:2","text":" @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n - SHOULD include any compounding that occurs from yield.\n - MUST be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT revert."},"functionSelector":"01e1d114","id":282,"implemented":false,"kind":"function","modifiers":[],"name":"totalAssets","nameLocation":"1353:11:2","nodeType":"FunctionDefinition","parameters":{"id":278,"nodeType":"ParameterList","parameters":[],"src":"1364:2:2"},"returnParameters":{"id":281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":280,"mutability":"mutable","name":"totalManagedAssets","nameLocation":"1398:18:2","nodeType":"VariableDeclaration","scope":282,"src":"1390:26:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":279,"name":"uint256","nodeType":"ElementaryTypeName","src":"1390:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1389:28:2"},"scope":407,"src":"1344:74:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":283,"nodeType":"StructuredDocumentation","src":"1424:720:2","text":" @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"c6e6f592","id":290,"implemented":false,"kind":"function","modifiers":[],"name":"convertToShares","nameLocation":"2158:15:2","nodeType":"FunctionDefinition","parameters":{"id":286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":285,"mutability":"mutable","name":"assets","nameLocation":"2182:6:2","nodeType":"VariableDeclaration","scope":290,"src":"2174:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":284,"name":"uint256","nodeType":"ElementaryTypeName","src":"2174:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2173:16:2"},"returnParameters":{"id":289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":288,"mutability":"mutable","name":"shares","nameLocation":"2221:6:2","nodeType":"VariableDeclaration","scope":290,"src":"2213:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":287,"name":"uint256","nodeType":"ElementaryTypeName","src":"2213:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2212:16:2"},"scope":407,"src":"2149:80:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":291,"nodeType":"StructuredDocumentation","src":"2235:720:2","text":" @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"07a2d13a","id":298,"implemented":false,"kind":"function","modifiers":[],"name":"convertToAssets","nameLocation":"2969:15:2","nodeType":"FunctionDefinition","parameters":{"id":294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":293,"mutability":"mutable","name":"shares","nameLocation":"2993:6:2","nodeType":"VariableDeclaration","scope":298,"src":"2985:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":292,"name":"uint256","nodeType":"ElementaryTypeName","src":"2985:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2984:16:2"},"returnParameters":{"id":297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":296,"mutability":"mutable","name":"assets","nameLocation":"3032:6:2","nodeType":"VariableDeclaration","scope":298,"src":"3024:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":295,"name":"uint256","nodeType":"ElementaryTypeName","src":"3024:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3023:16:2"},"scope":407,"src":"2960:80:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":299,"nodeType":"StructuredDocumentation","src":"3046:386:2","text":" @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n through a deposit call.\n - MUST return a limited value if receiver is subject to some deposit limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n - MUST NOT revert."},"functionSelector":"402d267d","id":306,"implemented":false,"kind":"function","modifiers":[],"name":"maxDeposit","nameLocation":"3446:10:2","nodeType":"FunctionDefinition","parameters":{"id":302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":301,"mutability":"mutable","name":"receiver","nameLocation":"3465:8:2","nodeType":"VariableDeclaration","scope":306,"src":"3457:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":300,"name":"address","nodeType":"ElementaryTypeName","src":"3457:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3456:18:2"},"returnParameters":{"id":305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":304,"mutability":"mutable","name":"maxAssets","nameLocation":"3506:9:2","nodeType":"VariableDeclaration","scope":306,"src":"3498:17:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":303,"name":"uint256","nodeType":"ElementaryTypeName","src":"3498:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3497:19:2"},"scope":407,"src":"3437:80:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":307,"nodeType":"StructuredDocumentation","src":"3523:1012:2","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n current on-chain conditions.\n - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n   call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n   in the same transaction.\n - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n   deposit would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"ef8b30f7","id":314,"implemented":false,"kind":"function","modifiers":[],"name":"previewDeposit","nameLocation":"4549:14:2","nodeType":"FunctionDefinition","parameters":{"id":310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":309,"mutability":"mutable","name":"assets","nameLocation":"4572:6:2","nodeType":"VariableDeclaration","scope":314,"src":"4564:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":308,"name":"uint256","nodeType":"ElementaryTypeName","src":"4564:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4563:16:2"},"returnParameters":{"id":313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":312,"mutability":"mutable","name":"shares","nameLocation":"4611:6:2","nodeType":"VariableDeclaration","scope":314,"src":"4603:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":311,"name":"uint256","nodeType":"ElementaryTypeName","src":"4603:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4602:16:2"},"scope":407,"src":"4540:79:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":315,"nodeType":"StructuredDocumentation","src":"4625:651:2","text":" @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n   deposit execution, and are accounted for during deposit.\n - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n   approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"6e553f65","id":324,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"5290:7:2","nodeType":"FunctionDefinition","parameters":{"id":320,"nodeType":"ParameterList","parameters":[{"constant":false,"id":317,"mutability":"mutable","name":"assets","nameLocation":"5306:6:2","nodeType":"VariableDeclaration","scope":324,"src":"5298:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":316,"name":"uint256","nodeType":"ElementaryTypeName","src":"5298:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":319,"mutability":"mutable","name":"receiver","nameLocation":"5322:8:2","nodeType":"VariableDeclaration","scope":324,"src":"5314:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":318,"name":"address","nodeType":"ElementaryTypeName","src":"5314:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5297:34:2"},"returnParameters":{"id":323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":322,"mutability":"mutable","name":"shares","nameLocation":"5358:6:2","nodeType":"VariableDeclaration","scope":324,"src":"5350:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":321,"name":"uint256","nodeType":"ElementaryTypeName","src":"5350:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5349:16:2"},"scope":407,"src":"5281:85:2","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":325,"nodeType":"StructuredDocumentation","src":"5372:341:2","text":" @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n - MUST return a limited value if receiver is subject to some mint limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n - MUST NOT revert."},"functionSelector":"c63d75b6","id":332,"implemented":false,"kind":"function","modifiers":[],"name":"maxMint","nameLocation":"5727:7:2","nodeType":"FunctionDefinition","parameters":{"id":328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":327,"mutability":"mutable","name":"receiver","nameLocation":"5743:8:2","nodeType":"VariableDeclaration","scope":332,"src":"5735:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":326,"name":"address","nodeType":"ElementaryTypeName","src":"5735:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5734:18:2"},"returnParameters":{"id":331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":330,"mutability":"mutable","name":"maxShares","nameLocation":"5784:9:2","nodeType":"VariableDeclaration","scope":332,"src":"5776:17:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":329,"name":"uint256","nodeType":"ElementaryTypeName","src":"5776:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5775:19:2"},"scope":407,"src":"5718:77:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":333,"nodeType":"StructuredDocumentation","src":"5801:984:2","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n   in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n   same transaction.\n - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n   would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by minting."},"functionSelector":"b3d7f6b9","id":340,"implemented":false,"kind":"function","modifiers":[],"name":"previewMint","nameLocation":"6799:11:2","nodeType":"FunctionDefinition","parameters":{"id":336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":335,"mutability":"mutable","name":"shares","nameLocation":"6819:6:2","nodeType":"VariableDeclaration","scope":340,"src":"6811:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":334,"name":"uint256","nodeType":"ElementaryTypeName","src":"6811:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6810:16:2"},"returnParameters":{"id":339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":338,"mutability":"mutable","name":"assets","nameLocation":"6858:6:2","nodeType":"VariableDeclaration","scope":340,"src":"6850:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":337,"name":"uint256","nodeType":"ElementaryTypeName","src":"6850:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6849:16:2"},"scope":407,"src":"6790:76:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":341,"nodeType":"StructuredDocumentation","src":"6872:642:2","text":" @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n   execution, and are accounted for during mint.\n - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n   approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"94bf804d","id":350,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"7528:4:2","nodeType":"FunctionDefinition","parameters":{"id":346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":343,"mutability":"mutable","name":"shares","nameLocation":"7541:6:2","nodeType":"VariableDeclaration","scope":350,"src":"7533:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":342,"name":"uint256","nodeType":"ElementaryTypeName","src":"7533:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":345,"mutability":"mutable","name":"receiver","nameLocation":"7557:8:2","nodeType":"VariableDeclaration","scope":350,"src":"7549:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":344,"name":"address","nodeType":"ElementaryTypeName","src":"7549:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7532:34:2"},"returnParameters":{"id":349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":348,"mutability":"mutable","name":"assets","nameLocation":"7593:6:2","nodeType":"VariableDeclaration","scope":350,"src":"7585:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":347,"name":"uint256","nodeType":"ElementaryTypeName","src":"7585:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7584:16:2"},"scope":407,"src":"7519:82:2","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":351,"nodeType":"StructuredDocumentation","src":"7607:293:2","text":" @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n Vault, through a withdraw call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"ce96cb77","id":358,"implemented":false,"kind":"function","modifiers":[],"name":"maxWithdraw","nameLocation":"7914:11:2","nodeType":"FunctionDefinition","parameters":{"id":354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":353,"mutability":"mutable","name":"owner","nameLocation":"7934:5:2","nodeType":"VariableDeclaration","scope":358,"src":"7926:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":352,"name":"address","nodeType":"ElementaryTypeName","src":"7926:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7925:15:2"},"returnParameters":{"id":357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":356,"mutability":"mutable","name":"maxAssets","nameLocation":"7972:9:2","nodeType":"VariableDeclaration","scope":358,"src":"7964:17:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":355,"name":"uint256","nodeType":"ElementaryTypeName","src":"7964:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7963:19:2"},"scope":407,"src":"7905:78:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":359,"nodeType":"StructuredDocumentation","src":"7989:1034:2","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n given current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n   call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n   called\n   in the same transaction.\n - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n   the withdrawal would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"0a28a477","id":366,"implemented":false,"kind":"function","modifiers":[],"name":"previewWithdraw","nameLocation":"9037:15:2","nodeType":"FunctionDefinition","parameters":{"id":362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":361,"mutability":"mutable","name":"assets","nameLocation":"9061:6:2","nodeType":"VariableDeclaration","scope":366,"src":"9053:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":360,"name":"uint256","nodeType":"ElementaryTypeName","src":"9053:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9052:16:2"},"returnParameters":{"id":365,"nodeType":"ParameterList","parameters":[{"constant":false,"id":364,"mutability":"mutable","name":"shares","nameLocation":"9100:6:2","nodeType":"VariableDeclaration","scope":366,"src":"9092:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":363,"name":"uint256","nodeType":"ElementaryTypeName","src":"9092:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9091:16:2"},"scope":407,"src":"9028:80:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":367,"nodeType":"StructuredDocumentation","src":"9114:670:2","text":" @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n   withdraw execution, and are accounted for during withdraw.\n - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n   not having enough shares, etc).\n Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"b460af94","id":378,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"9798:8:2","nodeType":"FunctionDefinition","parameters":{"id":374,"nodeType":"ParameterList","parameters":[{"constant":false,"id":369,"mutability":"mutable","name":"assets","nameLocation":"9815:6:2","nodeType":"VariableDeclaration","scope":378,"src":"9807:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":368,"name":"uint256","nodeType":"ElementaryTypeName","src":"9807:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":371,"mutability":"mutable","name":"receiver","nameLocation":"9831:8:2","nodeType":"VariableDeclaration","scope":378,"src":"9823:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":370,"name":"address","nodeType":"ElementaryTypeName","src":"9823:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":373,"mutability":"mutable","name":"owner","nameLocation":"9849:5:2","nodeType":"VariableDeclaration","scope":378,"src":"9841:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":372,"name":"address","nodeType":"ElementaryTypeName","src":"9841:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9806:49:2"},"returnParameters":{"id":377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":376,"mutability":"mutable","name":"shares","nameLocation":"9882:6:2","nodeType":"VariableDeclaration","scope":378,"src":"9874:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":375,"name":"uint256","nodeType":"ElementaryTypeName","src":"9874:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9873:16:2"},"scope":407,"src":"9789:101:2","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":379,"nodeType":"StructuredDocumentation","src":"9896:381:2","text":" @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n through a redeem call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"d905777e","id":386,"implemented":false,"kind":"function","modifiers":[],"name":"maxRedeem","nameLocation":"10291:9:2","nodeType":"FunctionDefinition","parameters":{"id":382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":381,"mutability":"mutable","name":"owner","nameLocation":"10309:5:2","nodeType":"VariableDeclaration","scope":386,"src":"10301:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":380,"name":"address","nodeType":"ElementaryTypeName","src":"10301:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10300:15:2"},"returnParameters":{"id":385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":384,"mutability":"mutable","name":"maxShares","nameLocation":"10347:9:2","nodeType":"VariableDeclaration","scope":386,"src":"10339:17:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":383,"name":"uint256","nodeType":"ElementaryTypeName","src":"10339:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10338:19:2"},"scope":407,"src":"10282:76:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":387,"nodeType":"StructuredDocumentation","src":"10364:1010:2","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n given current on-chain conditions.\n - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n   in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n   same transaction.\n - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n   redemption would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by redeeming."},"functionSelector":"4cdad506","id":394,"implemented":false,"kind":"function","modifiers":[],"name":"previewRedeem","nameLocation":"11388:13:2","nodeType":"FunctionDefinition","parameters":{"id":390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":389,"mutability":"mutable","name":"shares","nameLocation":"11410:6:2","nodeType":"VariableDeclaration","scope":394,"src":"11402:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":388,"name":"uint256","nodeType":"ElementaryTypeName","src":"11402:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11401:16:2"},"returnParameters":{"id":393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":392,"mutability":"mutable","name":"assets","nameLocation":"11449:6:2","nodeType":"VariableDeclaration","scope":394,"src":"11441:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":391,"name":"uint256","nodeType":"ElementaryTypeName","src":"11441:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11440:16:2"},"scope":407,"src":"11379:78:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":395,"nodeType":"StructuredDocumentation","src":"11463:661:2","text":" @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n   redeem execution, and are accounted for during redeem.\n - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n   not having enough shares, etc).\n NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"ba087652","id":406,"implemented":false,"kind":"function","modifiers":[],"name":"redeem","nameLocation":"12138:6:2","nodeType":"FunctionDefinition","parameters":{"id":402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":397,"mutability":"mutable","name":"shares","nameLocation":"12153:6:2","nodeType":"VariableDeclaration","scope":406,"src":"12145:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":396,"name":"uint256","nodeType":"ElementaryTypeName","src":"12145:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":399,"mutability":"mutable","name":"receiver","nameLocation":"12169:8:2","nodeType":"VariableDeclaration","scope":406,"src":"12161:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":398,"name":"address","nodeType":"ElementaryTypeName","src":"12161:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":401,"mutability":"mutable","name":"owner","nameLocation":"12187:5:2","nodeType":"VariableDeclaration","scope":406,"src":"12179:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":400,"name":"address","nodeType":"ElementaryTypeName","src":"12179:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12144:49:2"},"returnParameters":{"id":405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":404,"mutability":"mutable","name":"assets","nameLocation":"12220:6:2","nodeType":"VariableDeclaration","scope":406,"src":"12212:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":403,"name":"uint256","nodeType":"ElementaryTypeName","src":"12212:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12211:16:2"},"scope":407,"src":"12129:99:2","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":408,"src":"413:11817:2","usedErrors":[],"usedEvents":[258,270,1286,1295]}],"src":"107:12124:2"},"id":2},"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","exportedSymbols":{"AddressUpgradeable":[2770],"Initializable":[576]},"id":577,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":409,"literals":["solidity","^","0.8",".2"],"nodeType":"PragmaDirective","src":"113:23:3"},{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol","file":"../../utils/AddressUpgradeable.sol","id":410,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":577,"sourceUnit":2771,"src":"138:44:3","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"Initializable","contractDependencies":[],"contractKind":"contract","documentation":{"id":411,"nodeType":"StructuredDocumentation","src":"184:2209:3","text":" @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n case an upgrade adds a module that needs to be initialized.\n For example:\n [.hljs-theme-light.nopadding]\n ```solidity\n contract MyToken is ERC20Upgradeable {\n     function initialize() initializer public {\n         __ERC20_init(\"MyToken\", \"MTK\");\n     }\n }\n contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n     function initializeV2() reinitializer(2) public {\n         __ERC20Permit_init(\"MyToken\");\n     }\n }\n ```\n TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n [CAUTION]\n ====\n Avoid leaving a contract uninitialized.\n An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n [.hljs-theme-light.nopadding]\n ```\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor() {\n     _disableInitializers();\n }\n ```\n ===="},"fullyImplemented":true,"id":576,"linearizedBaseContracts":[576],"name":"Initializable","nameLocation":"2412:13:3","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":412,"nodeType":"StructuredDocumentation","src":"2432:109:3","text":" @dev Indicates that the contract has been initialized.\n @custom:oz-retyped-from bool"},"id":414,"mutability":"mutable","name":"_initialized","nameLocation":"2560:12:3","nodeType":"VariableDeclaration","scope":576,"src":"2546:26:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":413,"name":"uint8","nodeType":"ElementaryTypeName","src":"2546:5:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"private"},{"constant":false,"documentation":{"id":415,"nodeType":"StructuredDocumentation","src":"2579:91:3","text":" @dev Indicates that the contract is in the process of being initialized."},"id":417,"mutability":"mutable","name":"_initializing","nameLocation":"2688:13:3","nodeType":"VariableDeclaration","scope":576,"src":"2675:26:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":416,"name":"bool","nodeType":"ElementaryTypeName","src":"2675:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"anonymous":false,"documentation":{"id":418,"nodeType":"StructuredDocumentation","src":"2708:90:3","text":" @dev Triggered when the contract has been initialized or reinitialized."},"eventSelector":"7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498","id":422,"name":"Initialized","nameLocation":"2809:11:3","nodeType":"EventDefinition","parameters":{"id":421,"nodeType":"ParameterList","parameters":[{"constant":false,"id":420,"indexed":false,"mutability":"mutable","name":"version","nameLocation":"2827:7:3","nodeType":"VariableDeclaration","scope":422,"src":"2821:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":419,"name":"uint8","nodeType":"ElementaryTypeName","src":"2821:5:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"2820:15:3"},"src":"2803:33:3"},{"body":{"id":477,"nodeType":"Block","src":"3269:483:3","statements":[{"assignments":[426],"declarations":[{"constant":false,"id":426,"mutability":"mutable","name":"isTopLevelCall","nameLocation":"3284:14:3","nodeType":"VariableDeclaration","scope":477,"src":"3279:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":425,"name":"bool","nodeType":"ElementaryTypeName","src":"3279:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":429,"initialValue":{"id":428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3301:14:3","subExpression":{"id":427,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":417,"src":"3302:13:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3279:36:3"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":431,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":426,"src":"3347:14:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":432,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":414,"src":"3365:12:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"31","id":433,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3380:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3365:16:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3347:34:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":436,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3346:36:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3387:45:3","subExpression":{"arguments":[{"arguments":[{"id":441,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3426:4:3","typeDescriptions":{"typeIdentifier":"t_contract$_Initializable_$576","typeString":"contract Initializable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Initializable_$576","typeString":"contract Initializable"}],"id":440,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3418:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":439,"name":"address","nodeType":"ElementaryTypeName","src":"3418:7:3","typeDescriptions":{}}},"id":442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3418:13:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":437,"name":"AddressUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2770,"src":"3388:18:3","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AddressUpgradeable_$2770_$","typeString":"type(library AddressUpgradeable)"}},"id":438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3407:10:3","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":2458,"src":"3388:29:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3388:44:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":445,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":414,"src":"3436:12:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":446,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3452:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3436:17:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3387:66:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":449,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3386:68:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3346:108:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564","id":451,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3468:48:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","typeString":"literal_string \"Initializable: contract is already initialized\""},"value":"Initializable: contract is already initialized"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","typeString":"literal_string \"Initializable: contract is already initialized\""}],"id":430,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3325:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3325:201:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":453,"nodeType":"ExpressionStatement","src":"3325:201:3"},{"expression":{"id":456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":454,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":414,"src":"3536:12:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":455,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3551:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3536:16:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":457,"nodeType":"ExpressionStatement","src":"3536:16:3"},{"condition":{"id":458,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":426,"src":"3566:14:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":464,"nodeType":"IfStatement","src":"3562:65:3","trueBody":{"id":463,"nodeType":"Block","src":"3582:45:3","statements":[{"expression":{"id":461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":459,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":417,"src":"3596:13:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":460,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3612:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"3596:20:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":462,"nodeType":"ExpressionStatement","src":"3596:20:3"}]}},{"id":465,"nodeType":"PlaceholderStatement","src":"3636:1:3"},{"condition":{"id":466,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":426,"src":"3651:14:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":476,"nodeType":"IfStatement","src":"3647:99:3","trueBody":{"id":475,"nodeType":"Block","src":"3667:79:3","statements":[{"expression":{"id":469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":467,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":417,"src":"3681:13:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":468,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3697:5:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"3681:21:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":470,"nodeType":"ExpressionStatement","src":"3681:21:3"},{"eventCall":{"arguments":[{"hexValue":"31","id":472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3733:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":471,"name":"Initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":422,"src":"3721:11:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint8_$returns$__$","typeString":"function (uint8)"}},"id":473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3721:14:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":474,"nodeType":"EmitStatement","src":"3716:19:3"}]}}]},"documentation":{"id":423,"nodeType":"StructuredDocumentation","src":"2842:399:3","text":" @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n `onlyInitializing` functions can be used to initialize parent contracts.\n Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\n constructor.\n Emits an {Initialized} event."},"id":478,"name":"initializer","nameLocation":"3255:11:3","nodeType":"ModifierDefinition","parameters":{"id":424,"nodeType":"ParameterList","parameters":[],"src":"3266:2:3"},"src":"3246:506:3","virtual":false,"visibility":"internal"},{"body":{"id":510,"nodeType":"Block","src":"4863:255:3","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4881:14:3","subExpression":{"id":484,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":417,"src":"4882:13:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":486,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":414,"src":"4899:12:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":487,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":481,"src":"4914:7:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"4899:22:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4881:40:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564","id":490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4923:48:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","typeString":"literal_string \"Initializable: contract is already initialized\""},"value":"Initializable: contract is already initialized"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","typeString":"literal_string \"Initializable: contract is already initialized\""}],"id":483,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4873:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4873:99:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":492,"nodeType":"ExpressionStatement","src":"4873:99:3"},{"expression":{"id":495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":493,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":414,"src":"4982:12:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":494,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":481,"src":"4997:7:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"4982:22:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":496,"nodeType":"ExpressionStatement","src":"4982:22:3"},{"expression":{"id":499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":497,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":417,"src":"5014:13:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":498,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5030:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"5014:20:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":500,"nodeType":"ExpressionStatement","src":"5014:20:3"},{"id":501,"nodeType":"PlaceholderStatement","src":"5044:1:3"},{"expression":{"id":504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":502,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":417,"src":"5055:13:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":503,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5071:5:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"5055:21:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":505,"nodeType":"ExpressionStatement","src":"5055:21:3"},{"eventCall":{"arguments":[{"id":507,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":481,"src":"5103:7:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":506,"name":"Initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":422,"src":"5091:11:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint8_$returns$__$","typeString":"function (uint8)"}},"id":508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5091:20:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":509,"nodeType":"EmitStatement","src":"5086:25:3"}]},"documentation":{"id":479,"nodeType":"StructuredDocumentation","src":"3758:1062:3","text":" @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n used to initialize parent contracts.\n A reinitializer may be used after the original initialization step. This is essential to configure modules that\n are added through upgrades and that require initialization.\n When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n cannot be nested. If one is invoked in the context of another, execution will revert.\n Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n a contract, executing them in the right order is up to the developer or operator.\n WARNING: setting the version to 255 will prevent any future reinitialization.\n Emits an {Initialized} event."},"id":511,"name":"reinitializer","nameLocation":"4834:13:3","nodeType":"ModifierDefinition","parameters":{"id":482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":481,"mutability":"mutable","name":"version","nameLocation":"4854:7:3","nodeType":"VariableDeclaration","scope":511,"src":"4848:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":480,"name":"uint8","nodeType":"ElementaryTypeName","src":"4848:5:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"4847:15:3"},"src":"4825:293:3","virtual":false,"visibility":"internal"},{"body":{"id":520,"nodeType":"Block","src":"5356:97:3","statements":[{"expression":{"arguments":[{"id":515,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":417,"src":"5374:13:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420696e697469616c697a696e67","id":516,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5389:45:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b","typeString":"literal_string \"Initializable: contract is not initializing\""},"value":"Initializable: contract is not initializing"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b","typeString":"literal_string \"Initializable: contract is not initializing\""}],"id":514,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5366:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5366:69:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":518,"nodeType":"ExpressionStatement","src":"5366:69:3"},{"id":519,"nodeType":"PlaceholderStatement","src":"5445:1:3"}]},"documentation":{"id":512,"nodeType":"StructuredDocumentation","src":"5124:199:3","text":" @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n {initializer} and {reinitializer} modifiers, directly or indirectly."},"id":521,"name":"onlyInitializing","nameLocation":"5337:16:3","nodeType":"ModifierDefinition","parameters":{"id":513,"nodeType":"ParameterList","parameters":[],"src":"5353:2:3"},"src":"5328:125:3","virtual":false,"visibility":"internal"},{"body":{"id":556,"nodeType":"Block","src":"5988:231:3","statements":[{"expression":{"arguments":[{"id":527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6006:14:3","subExpression":{"id":526,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":417,"src":"6007:13:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320696e697469616c697a696e67","id":528,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6022:41:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a","typeString":"literal_string \"Initializable: contract is initializing\""},"value":"Initializable: contract is initializing"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a","typeString":"literal_string \"Initializable: contract is initializing\""}],"id":525,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5998:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5998:66:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":530,"nodeType":"ExpressionStatement","src":"5998:66:3"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":531,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":414,"src":"6078:12:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"arguments":[{"id":534,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6099:5:3","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":533,"name":"uint8","nodeType":"ElementaryTypeName","src":"6099:5:3","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":532,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6094:4:3","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6094:11:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":536,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6106:3:3","memberName":"max","nodeType":"MemberAccess","src":"6094:15:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"6078:31:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":555,"nodeType":"IfStatement","src":"6074:139:3","trueBody":{"id":554,"nodeType":"Block","src":"6111:102:3","statements":[{"expression":{"id":544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":538,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":414,"src":"6125:12:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"id":541,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6145:5:3","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":540,"name":"uint8","nodeType":"ElementaryTypeName","src":"6145:5:3","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":539,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6140:4:3","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":542,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6140:11:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":543,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6152:3:3","memberName":"max","nodeType":"MemberAccess","src":"6140:15:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"6125:30:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":545,"nodeType":"ExpressionStatement","src":"6125:30:3"},{"eventCall":{"arguments":[{"expression":{"arguments":[{"id":549,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6191:5:3","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":548,"name":"uint8","nodeType":"ElementaryTypeName","src":"6191:5:3","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":547,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6186:4:3","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":550,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6186:11:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":551,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6198:3:3","memberName":"max","nodeType":"MemberAccess","src":"6186:15:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":546,"name":"Initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":422,"src":"6174:11:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint8_$returns$__$","typeString":"function (uint8)"}},"id":552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6174:28:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":553,"nodeType":"EmitStatement","src":"6169:33:3"}]}}]},"documentation":{"id":522,"nodeType":"StructuredDocumentation","src":"5459:475:3","text":" @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n through proxies.\n Emits an {Initialized} event the first time it is successfully executed."},"id":557,"implemented":true,"kind":"function","modifiers":[],"name":"_disableInitializers","nameLocation":"5948:20:3","nodeType":"FunctionDefinition","parameters":{"id":523,"nodeType":"ParameterList","parameters":[],"src":"5968:2:3"},"returnParameters":{"id":524,"nodeType":"ParameterList","parameters":[],"src":"5988:0:3"},"scope":576,"src":"5939:280:3","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":565,"nodeType":"Block","src":"6393:36:3","statements":[{"expression":{"id":563,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":414,"src":"6410:12:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":562,"id":564,"nodeType":"Return","src":"6403:19:3"}]},"documentation":{"id":558,"nodeType":"StructuredDocumentation","src":"6225:99:3","text":" @dev Returns the highest version that has been initialized. See {reinitializer}."},"id":566,"implemented":true,"kind":"function","modifiers":[],"name":"_getInitializedVersion","nameLocation":"6338:22:3","nodeType":"FunctionDefinition","parameters":{"id":559,"nodeType":"ParameterList","parameters":[],"src":"6360:2:3"},"returnParameters":{"id":562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":561,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":566,"src":"6386:5:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":560,"name":"uint8","nodeType":"ElementaryTypeName","src":"6386:5:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"6385:7:3"},"scope":576,"src":"6329:100:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":574,"nodeType":"Block","src":"6601:37:3","statements":[{"expression":{"id":572,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":417,"src":"6618:13:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":571,"id":573,"nodeType":"Return","src":"6611:20:3"}]},"documentation":{"id":567,"nodeType":"StructuredDocumentation","src":"6435:105:3","text":" @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}."},"id":575,"implemented":true,"kind":"function","modifiers":[],"name":"_isInitializing","nameLocation":"6554:15:3","nodeType":"FunctionDefinition","parameters":{"id":568,"nodeType":"ParameterList","parameters":[],"src":"6569:2:3"},"returnParameters":{"id":571,"nodeType":"ParameterList","parameters":[{"constant":false,"id":570,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":575,"src":"6595:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":569,"name":"bool","nodeType":"ElementaryTypeName","src":"6595:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6594:6:3"},"scope":576,"src":"6545:93:3","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":577,"src":"2394:4246:3","usedErrors":[],"usedEvents":[422]}],"src":"113:6528:3"},"id":3},"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol","exportedSymbols":{"Initializable":[576],"ReentrancyGuardUpgradeable":[661]},"id":662,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":578,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"112:23:4"},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"../proxy/utils/Initializable.sol","id":580,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":662,"sourceUnit":577,"src":"136:63:4","symbolAliases":[{"foreign":{"id":579,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":576,"src":"144:13:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":582,"name":"Initializable","nameLocations":["1000:13:4"],"nodeType":"IdentifierPath","referencedDeclaration":576,"src":"1000:13:4"},"id":583,"nodeType":"InheritanceSpecifier","src":"1000:13:4"}],"canonicalName":"ReentrancyGuardUpgradeable","contractDependencies":[],"contractKind":"contract","documentation":{"id":581,"nodeType":"StructuredDocumentation","src":"201:750:4","text":" @dev Contract module that helps prevent reentrant calls to a function.\n Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n available, which can be applied to functions to make sure there are no nested\n (reentrant) calls to them.\n Note that because there is a single `nonReentrant` guard, functions marked as\n `nonReentrant` may not call one another. This can be worked around by making\n those functions `private`, and then adding `external` `nonReentrant` entry\n points to them.\n TIP: If you would like to learn more about reentrancy and alternative ways\n to protect against it, check out our blog post\n https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]."},"fullyImplemented":true,"id":661,"linearizedBaseContracts":[661,576],"name":"ReentrancyGuardUpgradeable","nameLocation":"970:26:4","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":586,"mutability":"constant","name":"_NOT_ENTERED","nameLocation":"1793:12:4","nodeType":"VariableDeclaration","scope":661,"src":"1768:41:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":584,"name":"uint256","nodeType":"ElementaryTypeName","src":"1768:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":585,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1808:1:4","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"private"},{"constant":true,"id":589,"mutability":"constant","name":"_ENTERED","nameLocation":"1840:8:4","nodeType":"VariableDeclaration","scope":661,"src":"1815:37:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":587,"name":"uint256","nodeType":"ElementaryTypeName","src":"1815:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":588,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1851:1:4","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"private"},{"constant":false,"id":591,"mutability":"mutable","name":"_status","nameLocation":"1875:7:4","nodeType":"VariableDeclaration","scope":661,"src":"1859:23:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":590,"name":"uint256","nodeType":"ElementaryTypeName","src":"1859:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"body":{"id":599,"nodeType":"Block","src":"1949:51:4","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":596,"name":"__ReentrancyGuard_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":610,"src":"1959:32:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1959:34:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":598,"nodeType":"ExpressionStatement","src":"1959:34:4"}]},"id":600,"implemented":true,"kind":"function","modifiers":[{"id":594,"kind":"modifierInvocation","modifierName":{"id":593,"name":"onlyInitializing","nameLocations":["1932:16:4"],"nodeType":"IdentifierPath","referencedDeclaration":521,"src":"1932:16:4"},"nodeType":"ModifierInvocation","src":"1932:16:4"}],"name":"__ReentrancyGuard_init","nameLocation":"1898:22:4","nodeType":"FunctionDefinition","parameters":{"id":592,"nodeType":"ParameterList","parameters":[],"src":"1920:2:4"},"returnParameters":{"id":595,"nodeType":"ParameterList","parameters":[],"src":"1949:0:4"},"scope":661,"src":"1889:111:4","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":609,"nodeType":"Block","src":"2076:39:4","statements":[{"expression":{"id":607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":605,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":591,"src":"2086:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":606,"name":"_NOT_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":586,"src":"2096:12:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2086:22:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":608,"nodeType":"ExpressionStatement","src":"2086:22:4"}]},"id":610,"implemented":true,"kind":"function","modifiers":[{"id":603,"kind":"modifierInvocation","modifierName":{"id":602,"name":"onlyInitializing","nameLocations":["2059:16:4"],"nodeType":"IdentifierPath","referencedDeclaration":521,"src":"2059:16:4"},"nodeType":"ModifierInvocation","src":"2059:16:4"}],"name":"__ReentrancyGuard_init_unchained","nameLocation":"2015:32:4","nodeType":"FunctionDefinition","parameters":{"id":601,"nodeType":"ParameterList","parameters":[],"src":"2047:2:4"},"returnParameters":{"id":604,"nodeType":"ParameterList","parameters":[],"src":"2076:0:4"},"scope":661,"src":"2006:109:4","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":620,"nodeType":"Block","src":"2516:79:4","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":613,"name":"_nonReentrantBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":636,"src":"2526:19:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2526:21:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":615,"nodeType":"ExpressionStatement","src":"2526:21:4"},{"id":616,"nodeType":"PlaceholderStatement","src":"2557:1:4"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":617,"name":"_nonReentrantAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":644,"src":"2568:18:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2568:20:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":619,"nodeType":"ExpressionStatement","src":"2568:20:4"}]},"documentation":{"id":611,"nodeType":"StructuredDocumentation","src":"2121:366:4","text":" @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work."},"id":621,"name":"nonReentrant","nameLocation":"2501:12:4","nodeType":"ModifierDefinition","parameters":{"id":612,"nodeType":"ParameterList","parameters":[],"src":"2513:2:4"},"src":"2492:103:4","virtual":false,"visibility":"internal"},{"body":{"id":635,"nodeType":"Block","src":"2640:248:4","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":625,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":591,"src":"2733:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":626,"name":"_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":589,"src":"2744:8:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2733:19:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","id":628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2754:33:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619","typeString":"literal_string \"ReentrancyGuard: reentrant call\""},"value":"ReentrancyGuard: reentrant call"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619","typeString":"literal_string \"ReentrancyGuard: reentrant call\""}],"id":624,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2725:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2725:63:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":630,"nodeType":"ExpressionStatement","src":"2725:63:4"},{"expression":{"id":633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":631,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":591,"src":"2863:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":632,"name":"_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":589,"src":"2873:8:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2863:18:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":634,"nodeType":"ExpressionStatement","src":"2863:18:4"}]},"id":636,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantBefore","nameLocation":"2610:19:4","nodeType":"FunctionDefinition","parameters":{"id":622,"nodeType":"ParameterList","parameters":[],"src":"2629:2:4"},"returnParameters":{"id":623,"nodeType":"ParameterList","parameters":[],"src":"2640:0:4"},"scope":661,"src":"2601:287:4","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":643,"nodeType":"Block","src":"2932:171:4","statements":[{"expression":{"id":641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":639,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":591,"src":"3074:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":640,"name":"_NOT_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":586,"src":"3084:12:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3074:22:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":642,"nodeType":"ExpressionStatement","src":"3074:22:4"}]},"id":644,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantAfter","nameLocation":"2903:18:4","nodeType":"FunctionDefinition","parameters":{"id":637,"nodeType":"ParameterList","parameters":[],"src":"2921:2:4"},"returnParameters":{"id":638,"nodeType":"ParameterList","parameters":[],"src":"2932:0:4"},"scope":661,"src":"2894:209:4","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":654,"nodeType":"Block","src":"3346:43:4","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":650,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":591,"src":"3363:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":651,"name":"_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":589,"src":"3374:8:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3363:19:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":649,"id":653,"nodeType":"Return","src":"3356:26:4"}]},"documentation":{"id":645,"nodeType":"StructuredDocumentation","src":"3109:168:4","text":" @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n `nonReentrant` function in the call stack."},"id":655,"implemented":true,"kind":"function","modifiers":[],"name":"_reentrancyGuardEntered","nameLocation":"3291:23:4","nodeType":"FunctionDefinition","parameters":{"id":646,"nodeType":"ParameterList","parameters":[],"src":"3314:2:4"},"returnParameters":{"id":649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":648,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":655,"src":"3340:4:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":647,"name":"bool","nodeType":"ElementaryTypeName","src":"3340:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3339:6:4"},"scope":661,"src":"3282:107:4","stateMutability":"view","virtual":false,"visibility":"internal"},{"constant":false,"documentation":{"id":656,"nodeType":"StructuredDocumentation","src":"3395:254:4","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":660,"mutability":"mutable","name":"__gap","nameLocation":"3674:5:4","nodeType":"VariableDeclaration","scope":661,"src":"3654:25:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage","typeString":"uint256[49]"},"typeName":{"baseType":{"id":657,"name":"uint256","nodeType":"ElementaryTypeName","src":"3654:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":659,"length":{"hexValue":"3439","id":658,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3662:2:4","typeDescriptions":{"typeIdentifier":"t_rational_49_by_1","typeString":"int_const 49"},"value":"49"},"nodeType":"ArrayTypeName","src":"3654:11:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage_ptr","typeString":"uint256[49]"}},"visibility":"private"}],"scope":662,"src":"952:2730:4","usedErrors":[],"usedEvents":[422]}],"src":"112:3571:4"},"id":4},"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol","exportedSymbols":{"ContextUpgradeable":[2821],"ERC20Upgradeable":[1274],"IERC20MetadataUpgradeable":[2028],"IERC20Upgradeable":[1352],"Initializable":[576]},"id":1275,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":663,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"105:23:5"},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","file":"./IERC20Upgradeable.sol","id":664,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1275,"sourceUnit":1353,"src":"130:33:5","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol","file":"./extensions/IERC20MetadataUpgradeable.sol","id":665,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1275,"sourceUnit":2029,"src":"164:52:5","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol","file":"../../utils/ContextUpgradeable.sol","id":666,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1275,"sourceUnit":2822,"src":"217:44:5","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"../../proxy/utils/Initializable.sol","id":668,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1275,"sourceUnit":577,"src":"262:66:5","symbolAliases":[{"foreign":{"id":667,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":576,"src":"270:13:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":670,"name":"Initializable","nameLocations":["1661:13:5"],"nodeType":"IdentifierPath","referencedDeclaration":576,"src":"1661:13:5"},"id":671,"nodeType":"InheritanceSpecifier","src":"1661:13:5"},{"baseName":{"id":672,"name":"ContextUpgradeable","nameLocations":["1676:18:5"],"nodeType":"IdentifierPath","referencedDeclaration":2821,"src":"1676:18:5"},"id":673,"nodeType":"InheritanceSpecifier","src":"1676:18:5"},{"baseName":{"id":674,"name":"IERC20Upgradeable","nameLocations":["1696:17:5"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"1696:17:5"},"id":675,"nodeType":"InheritanceSpecifier","src":"1696:17:5"},{"baseName":{"id":676,"name":"IERC20MetadataUpgradeable","nameLocations":["1715:25:5"],"nodeType":"IdentifierPath","referencedDeclaration":2028,"src":"1715:25:5"},"id":677,"nodeType":"InheritanceSpecifier","src":"1715:25:5"}],"canonicalName":"ERC20Upgradeable","contractDependencies":[],"contractKind":"contract","documentation":{"id":669,"nodeType":"StructuredDocumentation","src":"330:1301:5","text":" @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n For a generic mechanism see {ERC20PresetMinterPauser}.\n TIP: For a detailed writeup see our guide\n https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n The default value of {decimals} is 18. To change this, you should override\n this function so it returns a different value.\n We have followed general OpenZeppelin Contracts guidelines: functions revert\n instead returning `false` on failure. This behavior is nonetheless\n conventional and does not conflict with the expectations of ERC20\n applications.\n Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n This allows applications to reconstruct the allowance for all accounts just\n by listening to said events. Other implementations of the EIP may not emit\n these events, as it isn't required by the specification.\n Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n functions have been added to mitigate the well-known issues around setting\n allowances. See {IERC20-approve}."},"fullyImplemented":true,"id":1274,"linearizedBaseContracts":[1274,2028,1352,2821,576],"name":"ERC20Upgradeable","nameLocation":"1641:16:5","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":681,"mutability":"mutable","name":"_balances","nameLocation":"1783:9:5","nodeType":"VariableDeclaration","scope":1274,"src":"1747:45:5","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":680,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":678,"name":"address","nodeType":"ElementaryTypeName","src":"1755:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1747:27:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":679,"name":"uint256","nodeType":"ElementaryTypeName","src":"1766:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"id":687,"mutability":"mutable","name":"_allowances","nameLocation":"1855:11:5","nodeType":"VariableDeclaration","scope":1274,"src":"1799:67:5","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":686,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":682,"name":"address","nodeType":"ElementaryTypeName","src":"1807:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1799:47:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":685,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":683,"name":"address","nodeType":"ElementaryTypeName","src":"1826:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1818:27:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":684,"name":"uint256","nodeType":"ElementaryTypeName","src":"1837:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"constant":false,"id":689,"mutability":"mutable","name":"_totalSupply","nameLocation":"1889:12:5","nodeType":"VariableDeclaration","scope":1274,"src":"1873:28:5","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":688,"name":"uint256","nodeType":"ElementaryTypeName","src":"1873:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":691,"mutability":"mutable","name":"_name","nameLocation":"1923:5:5","nodeType":"VariableDeclaration","scope":1274,"src":"1908:20:5","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":690,"name":"string","nodeType":"ElementaryTypeName","src":"1908:6:5","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":693,"mutability":"mutable","name":"_symbol","nameLocation":"1949:7:5","nodeType":"VariableDeclaration","scope":1274,"src":"1934:22:5","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":692,"name":"string","nodeType":"ElementaryTypeName","src":"1934:6:5","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":708,"nodeType":"Block","src":"2231:55:5","statements":[{"expression":{"arguments":[{"id":704,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":696,"src":"2264:5:5","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":705,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":698,"src":"2271:7:5","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":703,"name":"__ERC20_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":727,"src":"2241:22:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2241:38:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":707,"nodeType":"ExpressionStatement","src":"2241:38:5"}]},"documentation":{"id":694,"nodeType":"StructuredDocumentation","src":"1963:171:5","text":" @dev Sets the values for {name} and {symbol}.\n All two of these values are immutable: they can only be set once during\n construction."},"id":709,"implemented":true,"kind":"function","modifiers":[{"id":701,"kind":"modifierInvocation","modifierName":{"id":700,"name":"onlyInitializing","nameLocations":["2214:16:5"],"nodeType":"IdentifierPath","referencedDeclaration":521,"src":"2214:16:5"},"nodeType":"ModifierInvocation","src":"2214:16:5"}],"name":"__ERC20_init","nameLocation":"2148:12:5","nodeType":"FunctionDefinition","parameters":{"id":699,"nodeType":"ParameterList","parameters":[{"constant":false,"id":696,"mutability":"mutable","name":"name_","nameLocation":"2175:5:5","nodeType":"VariableDeclaration","scope":709,"src":"2161:19:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":695,"name":"string","nodeType":"ElementaryTypeName","src":"2161:6:5","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":698,"mutability":"mutable","name":"symbol_","nameLocation":"2196:7:5","nodeType":"VariableDeclaration","scope":709,"src":"2182:21:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":697,"name":"string","nodeType":"ElementaryTypeName","src":"2182:6:5","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2160:44:5"},"returnParameters":{"id":702,"nodeType":"ParameterList","parameters":[],"src":"2231:0:5"},"scope":1274,"src":"2139:147:5","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":726,"nodeType":"Block","src":"2394:57:5","statements":[{"expression":{"id":720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":718,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":691,"src":"2404:5:5","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":719,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":711,"src":"2412:5:5","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2404:13:5","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":721,"nodeType":"ExpressionStatement","src":"2404:13:5"},{"expression":{"id":724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":722,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":693,"src":"2427:7:5","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":723,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":713,"src":"2437:7:5","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2427:17:5","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":725,"nodeType":"ExpressionStatement","src":"2427:17:5"}]},"id":727,"implemented":true,"kind":"function","modifiers":[{"id":716,"kind":"modifierInvocation","modifierName":{"id":715,"name":"onlyInitializing","nameLocations":["2377:16:5"],"nodeType":"IdentifierPath","referencedDeclaration":521,"src":"2377:16:5"},"nodeType":"ModifierInvocation","src":"2377:16:5"}],"name":"__ERC20_init_unchained","nameLocation":"2301:22:5","nodeType":"FunctionDefinition","parameters":{"id":714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":711,"mutability":"mutable","name":"name_","nameLocation":"2338:5:5","nodeType":"VariableDeclaration","scope":727,"src":"2324:19:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":710,"name":"string","nodeType":"ElementaryTypeName","src":"2324:6:5","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":713,"mutability":"mutable","name":"symbol_","nameLocation":"2359:7:5","nodeType":"VariableDeclaration","scope":727,"src":"2345:21:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":712,"name":"string","nodeType":"ElementaryTypeName","src":"2345:6:5","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2323:44:5"},"returnParameters":{"id":717,"nodeType":"ParameterList","parameters":[],"src":"2394:0:5"},"scope":1274,"src":"2292:159:5","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[2015],"body":{"id":736,"nodeType":"Block","src":"2585:29:5","statements":[{"expression":{"id":734,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":691,"src":"2602:5:5","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":733,"id":735,"nodeType":"Return","src":"2595:12:5"}]},"documentation":{"id":728,"nodeType":"StructuredDocumentation","src":"2457:54:5","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":737,"implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"2525:4:5","nodeType":"FunctionDefinition","overrides":{"id":730,"nodeType":"OverrideSpecifier","overrides":[],"src":"2552:8:5"},"parameters":{"id":729,"nodeType":"ParameterList","parameters":[],"src":"2529:2:5"},"returnParameters":{"id":733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":732,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":737,"src":"2570:13:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":731,"name":"string","nodeType":"ElementaryTypeName","src":"2570:6:5","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2569:15:5"},"scope":1274,"src":"2516:98:5","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[2021],"body":{"id":746,"nodeType":"Block","src":"2798:31:5","statements":[{"expression":{"id":744,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":693,"src":"2815:7:5","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":743,"id":745,"nodeType":"Return","src":"2808:14:5"}]},"documentation":{"id":738,"nodeType":"StructuredDocumentation","src":"2620:102:5","text":" @dev Returns the symbol of the token, usually a shorter version of the\n name."},"functionSelector":"95d89b41","id":747,"implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"2736:6:5","nodeType":"FunctionDefinition","overrides":{"id":740,"nodeType":"OverrideSpecifier","overrides":[],"src":"2765:8:5"},"parameters":{"id":739,"nodeType":"ParameterList","parameters":[],"src":"2742:2:5"},"returnParameters":{"id":743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":742,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":747,"src":"2783:13:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":741,"name":"string","nodeType":"ElementaryTypeName","src":"2783:6:5","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2782:15:5"},"scope":1274,"src":"2727:102:5","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[2027],"body":{"id":756,"nodeType":"Block","src":"3527:26:5","statements":[{"expression":{"hexValue":"3138","id":754,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3544:2:5","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"functionReturnParameters":753,"id":755,"nodeType":"Return","src":"3537:9:5"}]},"documentation":{"id":748,"nodeType":"StructuredDocumentation","src":"2835:622:5","text":" @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5.05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the default value returned by this function, unless\n it's overridden.\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."},"functionSelector":"313ce567","id":757,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"3471:8:5","nodeType":"FunctionDefinition","overrides":{"id":750,"nodeType":"OverrideSpecifier","overrides":[],"src":"3502:8:5"},"parameters":{"id":749,"nodeType":"ParameterList","parameters":[],"src":"3479:2:5"},"returnParameters":{"id":753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":752,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":757,"src":"3520:5:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":751,"name":"uint8","nodeType":"ElementaryTypeName","src":"3520:5:5","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"3519:7:5"},"scope":1274,"src":"3462:91:5","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1301],"body":{"id":766,"nodeType":"Block","src":"3683:36:5","statements":[{"expression":{"id":764,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":689,"src":"3700:12:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":763,"id":765,"nodeType":"Return","src":"3693:19:5"}]},"documentation":{"id":758,"nodeType":"StructuredDocumentation","src":"3559:49:5","text":" @dev See {IERC20-totalSupply}."},"functionSelector":"18160ddd","id":767,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"3622:11:5","nodeType":"FunctionDefinition","overrides":{"id":760,"nodeType":"OverrideSpecifier","overrides":[],"src":"3656:8:5"},"parameters":{"id":759,"nodeType":"ParameterList","parameters":[],"src":"3633:2:5"},"returnParameters":{"id":763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":762,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":767,"src":"3674:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":761,"name":"uint256","nodeType":"ElementaryTypeName","src":"3674:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3673:9:5"},"scope":1274,"src":"3613:106:5","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1309],"body":{"id":780,"nodeType":"Block","src":"3860:42:5","statements":[{"expression":{"baseExpression":{"id":776,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":681,"src":"3877:9:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":778,"indexExpression":{"id":777,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":770,"src":"3887:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3877:18:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":775,"id":779,"nodeType":"Return","src":"3870:25:5"}]},"documentation":{"id":768,"nodeType":"StructuredDocumentation","src":"3725:47:5","text":" @dev See {IERC20-balanceOf}."},"functionSelector":"70a08231","id":781,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"3786:9:5","nodeType":"FunctionDefinition","overrides":{"id":772,"nodeType":"OverrideSpecifier","overrides":[],"src":"3833:8:5"},"parameters":{"id":771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":770,"mutability":"mutable","name":"account","nameLocation":"3804:7:5","nodeType":"VariableDeclaration","scope":781,"src":"3796:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":769,"name":"address","nodeType":"ElementaryTypeName","src":"3796:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3795:17:5"},"returnParameters":{"id":775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":774,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":781,"src":"3851:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":773,"name":"uint256","nodeType":"ElementaryTypeName","src":"3851:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3850:9:5"},"scope":1274,"src":"3777:125:5","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1319],"body":{"id":805,"nodeType":"Block","src":"4183:104:5","statements":[{"assignments":[793],"declarations":[{"constant":false,"id":793,"mutability":"mutable","name":"owner","nameLocation":"4201:5:5","nodeType":"VariableDeclaration","scope":805,"src":"4193:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":792,"name":"address","nodeType":"ElementaryTypeName","src":"4193:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":796,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":794,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2798,"src":"4209:10:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4209:12:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4193:28:5"},{"expression":{"arguments":[{"id":798,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":793,"src":"4241:5:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":799,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":784,"src":"4248:2:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":800,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":786,"src":"4252:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":797,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1029,"src":"4231:9:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4231:28:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":802,"nodeType":"ExpressionStatement","src":"4231:28:5"},{"expression":{"hexValue":"74727565","id":803,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4276:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":791,"id":804,"nodeType":"Return","src":"4269:11:5"}]},"documentation":{"id":782,"nodeType":"StructuredDocumentation","src":"3908:185:5","text":" @dev See {IERC20-transfer}.\n Requirements:\n - `to` cannot be the zero address.\n - the caller must have a balance of at least `amount`."},"functionSelector":"a9059cbb","id":806,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"4107:8:5","nodeType":"FunctionDefinition","overrides":{"id":788,"nodeType":"OverrideSpecifier","overrides":[],"src":"4159:8:5"},"parameters":{"id":787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":784,"mutability":"mutable","name":"to","nameLocation":"4124:2:5","nodeType":"VariableDeclaration","scope":806,"src":"4116:10:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":783,"name":"address","nodeType":"ElementaryTypeName","src":"4116:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":786,"mutability":"mutable","name":"amount","nameLocation":"4136:6:5","nodeType":"VariableDeclaration","scope":806,"src":"4128:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":785,"name":"uint256","nodeType":"ElementaryTypeName","src":"4128:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4115:28:5"},"returnParameters":{"id":791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":790,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":806,"src":"4177:4:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":789,"name":"bool","nodeType":"ElementaryTypeName","src":"4177:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4176:6:5"},"scope":1274,"src":"4098:189:5","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1329],"body":{"id":823,"nodeType":"Block","src":"4443:51:5","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":817,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":687,"src":"4460:11:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":819,"indexExpression":{"id":818,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":809,"src":"4472:5:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4460:18:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":821,"indexExpression":{"id":820,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":811,"src":"4479:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4460:27:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":816,"id":822,"nodeType":"Return","src":"4453:34:5"}]},"documentation":{"id":807,"nodeType":"StructuredDocumentation","src":"4293:47:5","text":" @dev See {IERC20-allowance}."},"functionSelector":"dd62ed3e","id":824,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"4354:9:5","nodeType":"FunctionDefinition","overrides":{"id":813,"nodeType":"OverrideSpecifier","overrides":[],"src":"4416:8:5"},"parameters":{"id":812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":809,"mutability":"mutable","name":"owner","nameLocation":"4372:5:5","nodeType":"VariableDeclaration","scope":824,"src":"4364:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":808,"name":"address","nodeType":"ElementaryTypeName","src":"4364:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":811,"mutability":"mutable","name":"spender","nameLocation":"4387:7:5","nodeType":"VariableDeclaration","scope":824,"src":"4379:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":810,"name":"address","nodeType":"ElementaryTypeName","src":"4379:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4363:32:5"},"returnParameters":{"id":816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":815,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":824,"src":"4434:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":814,"name":"uint256","nodeType":"ElementaryTypeName","src":"4434:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4433:9:5"},"scope":1274,"src":"4345:149:5","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1339],"body":{"id":848,"nodeType":"Block","src":"4891:108:5","statements":[{"assignments":[836],"declarations":[{"constant":false,"id":836,"mutability":"mutable","name":"owner","nameLocation":"4909:5:5","nodeType":"VariableDeclaration","scope":848,"src":"4901:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":835,"name":"address","nodeType":"ElementaryTypeName","src":"4901:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":839,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":837,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2798,"src":"4917:10:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4917:12:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4901:28:5"},{"expression":{"arguments":[{"id":841,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":836,"src":"4948:5:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":842,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":827,"src":"4955:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":843,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":829,"src":"4964:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":840,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1203,"src":"4939:8:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4939:32:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":845,"nodeType":"ExpressionStatement","src":"4939:32:5"},{"expression":{"hexValue":"74727565","id":846,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4988:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":834,"id":847,"nodeType":"Return","src":"4981:11:5"}]},"documentation":{"id":825,"nodeType":"StructuredDocumentation","src":"4500:297:5","text":" @dev See {IERC20-approve}.\n NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\n `transferFrom`. This is semantically equivalent to an infinite approval.\n Requirements:\n - `spender` cannot be the zero address."},"functionSelector":"095ea7b3","id":849,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"4811:7:5","nodeType":"FunctionDefinition","overrides":{"id":831,"nodeType":"OverrideSpecifier","overrides":[],"src":"4867:8:5"},"parameters":{"id":830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":827,"mutability":"mutable","name":"spender","nameLocation":"4827:7:5","nodeType":"VariableDeclaration","scope":849,"src":"4819:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":826,"name":"address","nodeType":"ElementaryTypeName","src":"4819:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":829,"mutability":"mutable","name":"amount","nameLocation":"4844:6:5","nodeType":"VariableDeclaration","scope":849,"src":"4836:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":828,"name":"uint256","nodeType":"ElementaryTypeName","src":"4836:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4818:33:5"},"returnParameters":{"id":834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":833,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":849,"src":"4885:4:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":832,"name":"bool","nodeType":"ElementaryTypeName","src":"4885:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4884:6:5"},"scope":1274,"src":"4802:197:5","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1351],"body":{"id":881,"nodeType":"Block","src":"5664:153:5","statements":[{"assignments":[863],"declarations":[{"constant":false,"id":863,"mutability":"mutable","name":"spender","nameLocation":"5682:7:5","nodeType":"VariableDeclaration","scope":881,"src":"5674:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":862,"name":"address","nodeType":"ElementaryTypeName","src":"5674:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":866,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":864,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2798,"src":"5692:10:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5692:12:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5674:30:5"},{"expression":{"arguments":[{"id":868,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":852,"src":"5730:4:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":869,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":863,"src":"5736:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":870,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":856,"src":"5745:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":867,"name":"_spendAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1246,"src":"5714:15:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5714:38:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":872,"nodeType":"ExpressionStatement","src":"5714:38:5"},{"expression":{"arguments":[{"id":874,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":852,"src":"5772:4:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":875,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":854,"src":"5778:2:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":876,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":856,"src":"5782:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":873,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1029,"src":"5762:9:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5762:27:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":878,"nodeType":"ExpressionStatement","src":"5762:27:5"},{"expression":{"hexValue":"74727565","id":879,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5806:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":861,"id":880,"nodeType":"Return","src":"5799:11:5"}]},"documentation":{"id":850,"nodeType":"StructuredDocumentation","src":"5005:551:5","text":" @dev See {IERC20-transferFrom}.\n Emits an {Approval} event indicating the updated allowance. This is not\n required by the EIP. See the note at the beginning of {ERC20}.\n NOTE: Does not update the allowance if the current allowance\n is the maximum `uint256`.\n Requirements:\n - `from` and `to` cannot be the zero address.\n - `from` must have a balance of at least `amount`.\n - the caller must have allowance for ``from``'s tokens of at least\n `amount`."},"functionSelector":"23b872dd","id":882,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"5570:12:5","nodeType":"FunctionDefinition","overrides":{"id":858,"nodeType":"OverrideSpecifier","overrides":[],"src":"5640:8:5"},"parameters":{"id":857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":852,"mutability":"mutable","name":"from","nameLocation":"5591:4:5","nodeType":"VariableDeclaration","scope":882,"src":"5583:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":851,"name":"address","nodeType":"ElementaryTypeName","src":"5583:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":854,"mutability":"mutable","name":"to","nameLocation":"5605:2:5","nodeType":"VariableDeclaration","scope":882,"src":"5597:10:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":853,"name":"address","nodeType":"ElementaryTypeName","src":"5597:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":856,"mutability":"mutable","name":"amount","nameLocation":"5617:6:5","nodeType":"VariableDeclaration","scope":882,"src":"5609:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":855,"name":"uint256","nodeType":"ElementaryTypeName","src":"5609:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5582:42:5"},"returnParameters":{"id":861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":860,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":882,"src":"5658:4:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":859,"name":"bool","nodeType":"ElementaryTypeName","src":"5658:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5657:6:5"},"scope":1274,"src":"5561:256:5","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":910,"nodeType":"Block","src":"6306:140:5","statements":[{"assignments":[893],"declarations":[{"constant":false,"id":893,"mutability":"mutable","name":"owner","nameLocation":"6324:5:5","nodeType":"VariableDeclaration","scope":910,"src":"6316:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":892,"name":"address","nodeType":"ElementaryTypeName","src":"6316:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":896,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":894,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2798,"src":"6332:10:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6332:12:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6316:28:5"},{"expression":{"arguments":[{"id":898,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":893,"src":"6363:5:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":899,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"6370:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":901,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":893,"src":"6389:5:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":902,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":885,"src":"6396:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":900,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":824,"src":"6379:9:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6379:25:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":904,"name":"addedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":887,"src":"6407:10:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6379:38:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":897,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1203,"src":"6354:8:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6354:64:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":907,"nodeType":"ExpressionStatement","src":"6354:64:5"},{"expression":{"hexValue":"74727565","id":908,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6435:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":891,"id":909,"nodeType":"Return","src":"6428:11:5"}]},"documentation":{"id":883,"nodeType":"StructuredDocumentation","src":"5823:384:5","text":" @dev Atomically increases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address."},"functionSelector":"39509351","id":911,"implemented":true,"kind":"function","modifiers":[],"name":"increaseAllowance","nameLocation":"6221:17:5","nodeType":"FunctionDefinition","parameters":{"id":888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":885,"mutability":"mutable","name":"spender","nameLocation":"6247:7:5","nodeType":"VariableDeclaration","scope":911,"src":"6239:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":884,"name":"address","nodeType":"ElementaryTypeName","src":"6239:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":887,"mutability":"mutable","name":"addedValue","nameLocation":"6264:10:5","nodeType":"VariableDeclaration","scope":911,"src":"6256:18:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":886,"name":"uint256","nodeType":"ElementaryTypeName","src":"6256:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6238:37:5"},"returnParameters":{"id":891,"nodeType":"ParameterList","parameters":[{"constant":false,"id":890,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":911,"src":"6300:4:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":889,"name":"bool","nodeType":"ElementaryTypeName","src":"6300:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6299:6:5"},"scope":1274,"src":"6212:234:5","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":951,"nodeType":"Block","src":"7032:328:5","statements":[{"assignments":[922],"declarations":[{"constant":false,"id":922,"mutability":"mutable","name":"owner","nameLocation":"7050:5:5","nodeType":"VariableDeclaration","scope":951,"src":"7042:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":921,"name":"address","nodeType":"ElementaryTypeName","src":"7042:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":925,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":923,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2798,"src":"7058:10:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7058:12:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"7042:28:5"},{"assignments":[927],"declarations":[{"constant":false,"id":927,"mutability":"mutable","name":"currentAllowance","nameLocation":"7088:16:5","nodeType":"VariableDeclaration","scope":951,"src":"7080:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":926,"name":"uint256","nodeType":"ElementaryTypeName","src":"7080:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":932,"initialValue":{"arguments":[{"id":929,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":922,"src":"7117:5:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":930,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":914,"src":"7124:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":928,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":824,"src":"7107:9:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7107:25:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7080:52:5"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":934,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":927,"src":"7150:16:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":935,"name":"subtractedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":916,"src":"7170:15:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7150:35:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f","id":937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7187:39:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8","typeString":"literal_string \"ERC20: decreased allowance below zero\""},"value":"ERC20: decreased allowance below zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8","typeString":"literal_string \"ERC20: decreased allowance below zero\""}],"id":933,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7142:7:5","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7142:85:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":939,"nodeType":"ExpressionStatement","src":"7142:85:5"},{"id":948,"nodeType":"UncheckedBlock","src":"7237:95:5","statements":[{"expression":{"arguments":[{"id":941,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":922,"src":"7270:5:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":942,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":914,"src":"7277:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":943,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":927,"src":"7286:16:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":944,"name":"subtractedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":916,"src":"7305:15:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7286:34:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":940,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1203,"src":"7261:8:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7261:60:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":947,"nodeType":"ExpressionStatement","src":"7261:60:5"}]},{"expression":{"hexValue":"74727565","id":949,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7349:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":920,"id":950,"nodeType":"Return","src":"7342:11:5"}]},"documentation":{"id":912,"nodeType":"StructuredDocumentation","src":"6452:476:5","text":" @dev Atomically decreases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address.\n - `spender` must have allowance for the caller of at least\n `subtractedValue`."},"functionSelector":"a457c2d7","id":952,"implemented":true,"kind":"function","modifiers":[],"name":"decreaseAllowance","nameLocation":"6942:17:5","nodeType":"FunctionDefinition","parameters":{"id":917,"nodeType":"ParameterList","parameters":[{"constant":false,"id":914,"mutability":"mutable","name":"spender","nameLocation":"6968:7:5","nodeType":"VariableDeclaration","scope":952,"src":"6960:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":913,"name":"address","nodeType":"ElementaryTypeName","src":"6960:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":916,"mutability":"mutable","name":"subtractedValue","nameLocation":"6985:15:5","nodeType":"VariableDeclaration","scope":952,"src":"6977:23:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":915,"name":"uint256","nodeType":"ElementaryTypeName","src":"6977:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6959:42:5"},"returnParameters":{"id":920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":919,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":952,"src":"7026:4:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":918,"name":"bool","nodeType":"ElementaryTypeName","src":"7026:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7025:6:5"},"scope":1274,"src":"6933:427:5","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1028,"nodeType":"Block","src":"7892:710:5","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":963,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":955,"src":"7910:4:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":966,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7926:1:5","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":965,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7918:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":964,"name":"address","nodeType":"ElementaryTypeName","src":"7918:7:5","typeDescriptions":{}}},"id":967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7918:10:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7910:18:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373","id":969,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7930:39:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea","typeString":"literal_string \"ERC20: transfer from the zero address\""},"value":"ERC20: transfer from the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea","typeString":"literal_string \"ERC20: transfer from the zero address\""}],"id":962,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7902:7:5","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7902:68:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":971,"nodeType":"ExpressionStatement","src":"7902:68:5"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":973,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":957,"src":"7988:2:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":976,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8002:1:5","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":975,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7994:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":974,"name":"address","nodeType":"ElementaryTypeName","src":"7994:7:5","typeDescriptions":{}}},"id":977,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7994:10:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7988:16:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472657373","id":979,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8006:37:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f","typeString":"literal_string \"ERC20: transfer to the zero address\""},"value":"ERC20: transfer to the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f","typeString":"literal_string \"ERC20: transfer to the zero address\""}],"id":972,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7980:7:5","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7980:64:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":981,"nodeType":"ExpressionStatement","src":"7980:64:5"},{"expression":{"arguments":[{"id":983,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":955,"src":"8076:4:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":984,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":957,"src":"8082:2:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":985,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":959,"src":"8086:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":982,"name":"_beforeTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1257,"src":"8055:20:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8055:38:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":987,"nodeType":"ExpressionStatement","src":"8055:38:5"},{"assignments":[989],"declarations":[{"constant":false,"id":989,"mutability":"mutable","name":"fromBalance","nameLocation":"8112:11:5","nodeType":"VariableDeclaration","scope":1028,"src":"8104:19:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":988,"name":"uint256","nodeType":"ElementaryTypeName","src":"8104:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":993,"initialValue":{"baseExpression":{"id":990,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":681,"src":"8126:9:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":992,"indexExpression":{"id":991,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":955,"src":"8136:4:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8126:15:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8104:37:5"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":995,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":989,"src":"8159:11:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":996,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":959,"src":"8174:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8159:21:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365","id":998,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8182:40:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6","typeString":"literal_string \"ERC20: transfer amount exceeds balance\""},"value":"ERC20: transfer amount exceeds balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6","typeString":"literal_string \"ERC20: transfer amount exceeds balance\""}],"id":994,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8151:7:5","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8151:72:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1000,"nodeType":"ExpressionStatement","src":"8151:72:5"},{"id":1015,"nodeType":"UncheckedBlock","src":"8233:273:5","statements":[{"expression":{"id":1007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1001,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":681,"src":"8257:9:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1003,"indexExpression":{"id":1002,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":955,"src":"8267:4:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8257:15:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1004,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":989,"src":"8275:11:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":1005,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":959,"src":"8289:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8275:20:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8257:38:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1008,"nodeType":"ExpressionStatement","src":"8257:38:5"},{"expression":{"id":1013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1009,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":681,"src":"8472:9:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1011,"indexExpression":{"id":1010,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":957,"src":"8482:2:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8472:13:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":1012,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":959,"src":"8489:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8472:23:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1014,"nodeType":"ExpressionStatement","src":"8472:23:5"}]},{"eventCall":{"arguments":[{"id":1017,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":955,"src":"8530:4:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1018,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":957,"src":"8536:2:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1019,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":959,"src":"8540:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1016,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1286,"src":"8521:8:5","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8521:26:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1021,"nodeType":"EmitStatement","src":"8516:31:5"},{"expression":{"arguments":[{"id":1023,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":955,"src":"8578:4:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1024,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":957,"src":"8584:2:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1025,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":959,"src":"8588:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1022,"name":"_afterTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1268,"src":"8558:19:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8558:37:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1027,"nodeType":"ExpressionStatement","src":"8558:37:5"}]},"documentation":{"id":953,"nodeType":"StructuredDocumentation","src":"7366:443:5","text":" @dev Moves `amount` of tokens from `from` to `to`.\n This internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `from` must have a balance of at least `amount`."},"id":1029,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"7823:9:5","nodeType":"FunctionDefinition","parameters":{"id":960,"nodeType":"ParameterList","parameters":[{"constant":false,"id":955,"mutability":"mutable","name":"from","nameLocation":"7841:4:5","nodeType":"VariableDeclaration","scope":1029,"src":"7833:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":954,"name":"address","nodeType":"ElementaryTypeName","src":"7833:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":957,"mutability":"mutable","name":"to","nameLocation":"7855:2:5","nodeType":"VariableDeclaration","scope":1029,"src":"7847:10:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":956,"name":"address","nodeType":"ElementaryTypeName","src":"7847:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":959,"mutability":"mutable","name":"amount","nameLocation":"7867:6:5","nodeType":"VariableDeclaration","scope":1029,"src":"7859:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":958,"name":"uint256","nodeType":"ElementaryTypeName","src":"7859:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7832:42:5"},"returnParameters":{"id":961,"nodeType":"ParameterList","parameters":[],"src":"7892:0:5"},"scope":1274,"src":"7814:788:5","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1085,"nodeType":"Block","src":"8943:470:5","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1038,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1032,"src":"8961:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8980:1:5","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":1040,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8972:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1039,"name":"address","nodeType":"ElementaryTypeName","src":"8972:7:5","typeDescriptions":{}}},"id":1042,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8972:10:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8961:21:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a206d696e7420746f20746865207a65726f2061646472657373","id":1044,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8984:33:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e","typeString":"literal_string \"ERC20: mint to the zero address\""},"value":"ERC20: mint to the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e","typeString":"literal_string \"ERC20: mint to the zero address\""}],"id":1037,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8953:7:5","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8953:65:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1046,"nodeType":"ExpressionStatement","src":"8953:65:5"},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":1050,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9058:1:5","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":1049,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9050:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1048,"name":"address","nodeType":"ElementaryTypeName","src":"9050:7:5","typeDescriptions":{}}},"id":1051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9050:10:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1052,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1032,"src":"9062:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1053,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1034,"src":"9071:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1047,"name":"_beforeTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1257,"src":"9029:20:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9029:49:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1055,"nodeType":"ExpressionStatement","src":"9029:49:5"},{"expression":{"id":1058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1056,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":689,"src":"9089:12:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":1057,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1034,"src":"9105:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9089:22:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1059,"nodeType":"ExpressionStatement","src":"9089:22:5"},{"id":1066,"nodeType":"UncheckedBlock","src":"9121:175:5","statements":[{"expression":{"id":1064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1060,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":681,"src":"9257:9:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1062,"indexExpression":{"id":1061,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1032,"src":"9267:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9257:18:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":1063,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1034,"src":"9279:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9257:28:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1065,"nodeType":"ExpressionStatement","src":"9257:28:5"}]},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":1070,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9327:1:5","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":1069,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9319:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1068,"name":"address","nodeType":"ElementaryTypeName","src":"9319:7:5","typeDescriptions":{}}},"id":1071,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9319:10:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1072,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1032,"src":"9331:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1073,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1034,"src":"9340:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1067,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1286,"src":"9310:8:5","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9310:37:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1075,"nodeType":"EmitStatement","src":"9305:42:5"},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":1079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9386:1:5","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":1078,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9378:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1077,"name":"address","nodeType":"ElementaryTypeName","src":"9378:7:5","typeDescriptions":{}}},"id":1080,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9378:10:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1081,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1032,"src":"9390:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1082,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1034,"src":"9399:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1076,"name":"_afterTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1268,"src":"9358:19:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9358:48:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1084,"nodeType":"ExpressionStatement","src":"9358:48:5"}]},"documentation":{"id":1030,"nodeType":"StructuredDocumentation","src":"8608:265:5","text":"@dev Creates `amount` tokens and assigns them to `account`, increasing\n the total supply.\n Emits a {Transfer} event with `from` set to the zero address.\n Requirements:\n - `account` cannot be the zero address."},"id":1086,"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"8887:5:5","nodeType":"FunctionDefinition","parameters":{"id":1035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1032,"mutability":"mutable","name":"account","nameLocation":"8901:7:5","nodeType":"VariableDeclaration","scope":1086,"src":"8893:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1031,"name":"address","nodeType":"ElementaryTypeName","src":"8893:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1034,"mutability":"mutable","name":"amount","nameLocation":"8918:6:5","nodeType":"VariableDeclaration","scope":1086,"src":"8910:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1033,"name":"uint256","nodeType":"ElementaryTypeName","src":"8910:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8892:33:5"},"returnParameters":{"id":1036,"nodeType":"ParameterList","parameters":[],"src":"8943:0:5"},"scope":1274,"src":"8878:535:5","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1157,"nodeType":"Block","src":"9798:594:5","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1095,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1089,"src":"9816:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9835:1:5","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":1097,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9827:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1096,"name":"address","nodeType":"ElementaryTypeName","src":"9827:7:5","typeDescriptions":{}}},"id":1099,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9827:10:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9816:21:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a206275726e2066726f6d20746865207a65726f2061646472657373","id":1101,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9839:35:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f","typeString":"literal_string \"ERC20: burn from the zero address\""},"value":"ERC20: burn from the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f","typeString":"literal_string \"ERC20: burn from the zero address\""}],"id":1094,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9808:7:5","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9808:67:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1103,"nodeType":"ExpressionStatement","src":"9808:67:5"},{"expression":{"arguments":[{"id":1105,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1089,"src":"9907:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":1108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9924:1:5","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":1107,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9916:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1106,"name":"address","nodeType":"ElementaryTypeName","src":"9916:7:5","typeDescriptions":{}}},"id":1109,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9916:10:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1110,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1091,"src":"9928:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1104,"name":"_beforeTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1257,"src":"9886:20:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9886:49:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1112,"nodeType":"ExpressionStatement","src":"9886:49:5"},{"assignments":[1114],"declarations":[{"constant":false,"id":1114,"mutability":"mutable","name":"accountBalance","nameLocation":"9954:14:5","nodeType":"VariableDeclaration","scope":1157,"src":"9946:22:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1113,"name":"uint256","nodeType":"ElementaryTypeName","src":"9946:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1118,"initialValue":{"baseExpression":{"id":1115,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":681,"src":"9971:9:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1117,"indexExpression":{"id":1116,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1089,"src":"9981:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9971:18:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9946:43:5"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1120,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1114,"src":"10007:14:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":1121,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1091,"src":"10025:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10007:24:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365","id":1123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10033:36:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd","typeString":"literal_string \"ERC20: burn amount exceeds balance\""},"value":"ERC20: burn amount exceeds balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd","typeString":"literal_string \"ERC20: burn amount exceeds balance\""}],"id":1119,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9999:7:5","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9999:71:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1125,"nodeType":"ExpressionStatement","src":"9999:71:5"},{"id":1138,"nodeType":"UncheckedBlock","src":"10080:194:5","statements":[{"expression":{"id":1132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1126,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":681,"src":"10104:9:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1128,"indexExpression":{"id":1127,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1089,"src":"10114:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10104:18:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1129,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1114,"src":"10125:14:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":1130,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1091,"src":"10142:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10125:23:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10104:44:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1133,"nodeType":"ExpressionStatement","src":"10104:44:5"},{"expression":{"id":1136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1134,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":689,"src":"10241:12:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":1135,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1091,"src":"10257:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10241:22:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1137,"nodeType":"ExpressionStatement","src":"10241:22:5"}]},{"eventCall":{"arguments":[{"id":1140,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1089,"src":"10298:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":1143,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10315:1:5","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":1142,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10307:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1141,"name":"address","nodeType":"ElementaryTypeName","src":"10307:7:5","typeDescriptions":{}}},"id":1144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10307:10:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1145,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1091,"src":"10319:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1139,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1286,"src":"10289:8:5","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10289:37:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1147,"nodeType":"EmitStatement","src":"10284:42:5"},{"expression":{"arguments":[{"id":1149,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1089,"src":"10357:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":1152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10374:1:5","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":1151,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10366:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1150,"name":"address","nodeType":"ElementaryTypeName","src":"10366:7:5","typeDescriptions":{}}},"id":1153,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10366:10:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1154,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1091,"src":"10378:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1148,"name":"_afterTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1268,"src":"10337:19:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10337:48:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1156,"nodeType":"ExpressionStatement","src":"10337:48:5"}]},"documentation":{"id":1087,"nodeType":"StructuredDocumentation","src":"9419:309:5","text":" @dev Destroys `amount` tokens from `account`, reducing the\n total supply.\n Emits a {Transfer} event with `to` set to the zero address.\n Requirements:\n - `account` cannot be the zero address.\n - `account` must have at least `amount` tokens."},"id":1158,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"9742:5:5","nodeType":"FunctionDefinition","parameters":{"id":1092,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1089,"mutability":"mutable","name":"account","nameLocation":"9756:7:5","nodeType":"VariableDeclaration","scope":1158,"src":"9748:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1088,"name":"address","nodeType":"ElementaryTypeName","src":"9748:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1091,"mutability":"mutable","name":"amount","nameLocation":"9773:6:5","nodeType":"VariableDeclaration","scope":1158,"src":"9765:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1090,"name":"uint256","nodeType":"ElementaryTypeName","src":"9765:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9747:33:5"},"returnParameters":{"id":1093,"nodeType":"ParameterList","parameters":[],"src":"9798:0:5"},"scope":1274,"src":"9733:659:5","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1202,"nodeType":"Block","src":"10898:257:5","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1169,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1161,"src":"10916:5:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1172,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10933:1:5","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":1171,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10925:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1170,"name":"address","nodeType":"ElementaryTypeName","src":"10925:7:5","typeDescriptions":{}}},"id":1173,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10925:10:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10916:19:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373","id":1175,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10937:38:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208","typeString":"literal_string \"ERC20: approve from the zero address\""},"value":"ERC20: approve from the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208","typeString":"literal_string \"ERC20: approve from the zero address\""}],"id":1168,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10908:7:5","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10908:68:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1177,"nodeType":"ExpressionStatement","src":"10908:68:5"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1179,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1163,"src":"10994:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1182,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11013:1:5","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":1181,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11005:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1180,"name":"address","nodeType":"ElementaryTypeName","src":"11005:7:5","typeDescriptions":{}}},"id":1183,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11005:10:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10994:21:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f2061646472657373","id":1185,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11017:36:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029","typeString":"literal_string \"ERC20: approve to the zero address\""},"value":"ERC20: approve to the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029","typeString":"literal_string \"ERC20: approve to the zero address\""}],"id":1178,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10986:7:5","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10986:68:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1187,"nodeType":"ExpressionStatement","src":"10986:68:5"},{"expression":{"id":1194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":1188,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":687,"src":"11065:11:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":1191,"indexExpression":{"id":1189,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1161,"src":"11077:5:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11065:18:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1192,"indexExpression":{"id":1190,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1163,"src":"11084:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11065:27:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1193,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1165,"src":"11095:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11065:36:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1195,"nodeType":"ExpressionStatement","src":"11065:36:5"},{"eventCall":{"arguments":[{"id":1197,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1161,"src":"11125:5:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1198,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1163,"src":"11132:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1199,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1165,"src":"11141:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1196,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1295,"src":"11116:8:5","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11116:32:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1201,"nodeType":"EmitStatement","src":"11111:37:5"}]},"documentation":{"id":1159,"nodeType":"StructuredDocumentation","src":"10398:412:5","text":" @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address."},"id":1203,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"10824:8:5","nodeType":"FunctionDefinition","parameters":{"id":1166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1161,"mutability":"mutable","name":"owner","nameLocation":"10841:5:5","nodeType":"VariableDeclaration","scope":1203,"src":"10833:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1160,"name":"address","nodeType":"ElementaryTypeName","src":"10833:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1163,"mutability":"mutable","name":"spender","nameLocation":"10856:7:5","nodeType":"VariableDeclaration","scope":1203,"src":"10848:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1162,"name":"address","nodeType":"ElementaryTypeName","src":"10848:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1165,"mutability":"mutable","name":"amount","nameLocation":"10873:6:5","nodeType":"VariableDeclaration","scope":1203,"src":"10865:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1164,"name":"uint256","nodeType":"ElementaryTypeName","src":"10865:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10832:48:5"},"returnParameters":{"id":1167,"nodeType":"ParameterList","parameters":[],"src":"10898:0:5"},"scope":1274,"src":"10815:340:5","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1245,"nodeType":"Block","src":"11526:321:5","statements":[{"assignments":[1214],"declarations":[{"constant":false,"id":1214,"mutability":"mutable","name":"currentAllowance","nameLocation":"11544:16:5","nodeType":"VariableDeclaration","scope":1245,"src":"11536:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1213,"name":"uint256","nodeType":"ElementaryTypeName","src":"11536:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1219,"initialValue":{"arguments":[{"id":1216,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1206,"src":"11573:5:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1217,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1208,"src":"11580:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1215,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":824,"src":"11563:9:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":1218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11563:25:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11536:52:5"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1220,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1214,"src":"11602:16:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"arguments":[{"id":1223,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11627:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1222,"name":"uint256","nodeType":"ElementaryTypeName","src":"11627:7:5","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":1221,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11622:4:5","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1224,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11622:13:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":1225,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11636:3:5","memberName":"max","nodeType":"MemberAccess","src":"11622:17:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11602:37:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1244,"nodeType":"IfStatement","src":"11598:243:5","trueBody":{"id":1243,"nodeType":"Block","src":"11641:200:5","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1228,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1214,"src":"11663:16:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":1229,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1210,"src":"11683:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11663:26:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a20696e73756666696369656e7420616c6c6f77616e6365","id":1231,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11691:31:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe","typeString":"literal_string \"ERC20: insufficient allowance\""},"value":"ERC20: insufficient allowance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe","typeString":"literal_string \"ERC20: insufficient allowance\""}],"id":1227,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11655:7:5","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11655:68:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1233,"nodeType":"ExpressionStatement","src":"11655:68:5"},{"id":1242,"nodeType":"UncheckedBlock","src":"11737:94:5","statements":[{"expression":{"arguments":[{"id":1235,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1206,"src":"11774:5:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1236,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1208,"src":"11781:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1237,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1214,"src":"11790:16:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":1238,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1210,"src":"11809:6:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11790:25:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1234,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1203,"src":"11765:8:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11765:51:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1241,"nodeType":"ExpressionStatement","src":"11765:51:5"}]}]}}]},"documentation":{"id":1204,"nodeType":"StructuredDocumentation","src":"11161:270:5","text":" @dev Updates `owner` s allowance for `spender` based on spent `amount`.\n Does not update the allowance amount in case of infinite allowance.\n Revert if not enough allowance is available.\n Might emit an {Approval} event."},"id":1246,"implemented":true,"kind":"function","modifiers":[],"name":"_spendAllowance","nameLocation":"11445:15:5","nodeType":"FunctionDefinition","parameters":{"id":1211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1206,"mutability":"mutable","name":"owner","nameLocation":"11469:5:5","nodeType":"VariableDeclaration","scope":1246,"src":"11461:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1205,"name":"address","nodeType":"ElementaryTypeName","src":"11461:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1208,"mutability":"mutable","name":"spender","nameLocation":"11484:7:5","nodeType":"VariableDeclaration","scope":1246,"src":"11476:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1207,"name":"address","nodeType":"ElementaryTypeName","src":"11476:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1210,"mutability":"mutable","name":"amount","nameLocation":"11501:6:5","nodeType":"VariableDeclaration","scope":1246,"src":"11493:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1209,"name":"uint256","nodeType":"ElementaryTypeName","src":"11493:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11460:48:5"},"returnParameters":{"id":1212,"nodeType":"ParameterList","parameters":[],"src":"11526:0:5"},"scope":1274,"src":"11436:411:5","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1256,"nodeType":"Block","src":"12520:2:5","statements":[]},"documentation":{"id":1247,"nodeType":"StructuredDocumentation","src":"11853:573:5","text":" @dev Hook that is called before any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n will be transferred to `to`.\n - when `from` is zero, `amount` tokens will be minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."},"id":1257,"implemented":true,"kind":"function","modifiers":[],"name":"_beforeTokenTransfer","nameLocation":"12440:20:5","nodeType":"FunctionDefinition","parameters":{"id":1254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1249,"mutability":"mutable","name":"from","nameLocation":"12469:4:5","nodeType":"VariableDeclaration","scope":1257,"src":"12461:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1248,"name":"address","nodeType":"ElementaryTypeName","src":"12461:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1251,"mutability":"mutable","name":"to","nameLocation":"12483:2:5","nodeType":"VariableDeclaration","scope":1257,"src":"12475:10:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1250,"name":"address","nodeType":"ElementaryTypeName","src":"12475:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1253,"mutability":"mutable","name":"amount","nameLocation":"12495:6:5","nodeType":"VariableDeclaration","scope":1257,"src":"12487:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1252,"name":"uint256","nodeType":"ElementaryTypeName","src":"12487:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12460:42:5"},"returnParameters":{"id":1255,"nodeType":"ParameterList","parameters":[],"src":"12520:0:5"},"scope":1274,"src":"12431:91:5","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1267,"nodeType":"Block","src":"13198:2:5","statements":[]},"documentation":{"id":1258,"nodeType":"StructuredDocumentation","src":"12528:577:5","text":" @dev Hook that is called after any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n has been transferred to `to`.\n - when `from` is zero, `amount` tokens have been minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens have been burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."},"id":1268,"implemented":true,"kind":"function","modifiers":[],"name":"_afterTokenTransfer","nameLocation":"13119:19:5","nodeType":"FunctionDefinition","parameters":{"id":1265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1260,"mutability":"mutable","name":"from","nameLocation":"13147:4:5","nodeType":"VariableDeclaration","scope":1268,"src":"13139:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1259,"name":"address","nodeType":"ElementaryTypeName","src":"13139:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1262,"mutability":"mutable","name":"to","nameLocation":"13161:2:5","nodeType":"VariableDeclaration","scope":1268,"src":"13153:10:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1261,"name":"address","nodeType":"ElementaryTypeName","src":"13153:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1264,"mutability":"mutable","name":"amount","nameLocation":"13173:6:5","nodeType":"VariableDeclaration","scope":1268,"src":"13165:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1263,"name":"uint256","nodeType":"ElementaryTypeName","src":"13165:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13138:42:5"},"returnParameters":{"id":1266,"nodeType":"ParameterList","parameters":[],"src":"13198:0:5"},"scope":1274,"src":"13110:90:5","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"constant":false,"documentation":{"id":1269,"nodeType":"StructuredDocumentation","src":"13206:254:5","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":1273,"mutability":"mutable","name":"__gap","nameLocation":"13485:5:5","nodeType":"VariableDeclaration","scope":1274,"src":"13465:25:5","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$45_storage","typeString":"uint256[45]"},"typeName":{"baseType":{"id":1270,"name":"uint256","nodeType":"ElementaryTypeName","src":"13465:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1272,"length":{"hexValue":"3435","id":1271,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13473:2:5","typeDescriptions":{"typeIdentifier":"t_rational_45_by_1","typeString":"int_const 45"},"value":"45"},"nodeType":"ArrayTypeName","src":"13465:11:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$45_storage_ptr","typeString":"uint256[45]"}},"visibility":"private"}],"scope":1275,"src":"1632:11861:5","usedErrors":[],"usedEvents":[422,1286,1295]}],"src":"105:13389:5"},"id":5},"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","exportedSymbols":{"IERC20Upgradeable":[1352]},"id":1353,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1276,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"106:23:6"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20Upgradeable","contractDependencies":[],"contractKind":"interface","documentation":{"id":1277,"nodeType":"StructuredDocumentation","src":"131:70:6","text":" @dev Interface of the ERC20 standard as defined in the EIP."},"fullyImplemented":false,"id":1352,"linearizedBaseContracts":[1352],"name":"IERC20Upgradeable","nameLocation":"212:17:6","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1278,"nodeType":"StructuredDocumentation","src":"236:158:6","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":1286,"name":"Transfer","nameLocation":"405:8:6","nodeType":"EventDefinition","parameters":{"id":1285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1280,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"430:4:6","nodeType":"VariableDeclaration","scope":1286,"src":"414:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1279,"name":"address","nodeType":"ElementaryTypeName","src":"414:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1282,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"452:2:6","nodeType":"VariableDeclaration","scope":1286,"src":"436:18:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1281,"name":"address","nodeType":"ElementaryTypeName","src":"436:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1284,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"464:5:6","nodeType":"VariableDeclaration","scope":1286,"src":"456:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1283,"name":"uint256","nodeType":"ElementaryTypeName","src":"456:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"413:57:6"},"src":"399:72:6"},{"anonymous":false,"documentation":{"id":1287,"nodeType":"StructuredDocumentation","src":"477:148:6","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":1295,"name":"Approval","nameLocation":"636:8:6","nodeType":"EventDefinition","parameters":{"id":1294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1289,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"661:5:6","nodeType":"VariableDeclaration","scope":1295,"src":"645:21:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1288,"name":"address","nodeType":"ElementaryTypeName","src":"645:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1291,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"684:7:6","nodeType":"VariableDeclaration","scope":1295,"src":"668:23:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1290,"name":"address","nodeType":"ElementaryTypeName","src":"668:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1293,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"701:5:6","nodeType":"VariableDeclaration","scope":1295,"src":"693:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1292,"name":"uint256","nodeType":"ElementaryTypeName","src":"693:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"644:63:6"},"src":"630:78:6"},{"documentation":{"id":1296,"nodeType":"StructuredDocumentation","src":"714:66:6","text":" @dev Returns the amount of tokens in existence."},"functionSelector":"18160ddd","id":1301,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"794:11:6","nodeType":"FunctionDefinition","parameters":{"id":1297,"nodeType":"ParameterList","parameters":[],"src":"805:2:6"},"returnParameters":{"id":1300,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1299,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1301,"src":"831:7:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1298,"name":"uint256","nodeType":"ElementaryTypeName","src":"831:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"830:9:6"},"scope":1352,"src":"785:55:6","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1302,"nodeType":"StructuredDocumentation","src":"846:72:6","text":" @dev Returns the amount of tokens owned by `account`."},"functionSelector":"70a08231","id":1309,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"932:9:6","nodeType":"FunctionDefinition","parameters":{"id":1305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1304,"mutability":"mutable","name":"account","nameLocation":"950:7:6","nodeType":"VariableDeclaration","scope":1309,"src":"942:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1303,"name":"address","nodeType":"ElementaryTypeName","src":"942:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"941:17:6"},"returnParameters":{"id":1308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1307,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1309,"src":"982:7:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1306,"name":"uint256","nodeType":"ElementaryTypeName","src":"982:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"981:9:6"},"scope":1352,"src":"923:68:6","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1310,"nodeType":"StructuredDocumentation","src":"997:202:6","text":" @dev Moves `amount` tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":1319,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1213:8:6","nodeType":"FunctionDefinition","parameters":{"id":1315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1312,"mutability":"mutable","name":"to","nameLocation":"1230:2:6","nodeType":"VariableDeclaration","scope":1319,"src":"1222:10:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1311,"name":"address","nodeType":"ElementaryTypeName","src":"1222:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1314,"mutability":"mutable","name":"amount","nameLocation":"1242:6:6","nodeType":"VariableDeclaration","scope":1319,"src":"1234:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1313,"name":"uint256","nodeType":"ElementaryTypeName","src":"1234:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1221:28:6"},"returnParameters":{"id":1318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1317,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1319,"src":"1268:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1316,"name":"bool","nodeType":"ElementaryTypeName","src":"1268:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1267:6:6"},"scope":1352,"src":"1204:70:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1320,"nodeType":"StructuredDocumentation","src":"1280:264:6","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":1329,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1558:9:6","nodeType":"FunctionDefinition","parameters":{"id":1325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1322,"mutability":"mutable","name":"owner","nameLocation":"1576:5:6","nodeType":"VariableDeclaration","scope":1329,"src":"1568:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1321,"name":"address","nodeType":"ElementaryTypeName","src":"1568:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1324,"mutability":"mutable","name":"spender","nameLocation":"1591:7:6","nodeType":"VariableDeclaration","scope":1329,"src":"1583:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1323,"name":"address","nodeType":"ElementaryTypeName","src":"1583:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1567:32:6"},"returnParameters":{"id":1328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1327,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1329,"src":"1623:7:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1326,"name":"uint256","nodeType":"ElementaryTypeName","src":"1623:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1622:9:6"},"scope":1352,"src":"1549:83:6","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1330,"nodeType":"StructuredDocumentation","src":"1638:642:6","text":" @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":1339,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2294:7:6","nodeType":"FunctionDefinition","parameters":{"id":1335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1332,"mutability":"mutable","name":"spender","nameLocation":"2310:7:6","nodeType":"VariableDeclaration","scope":1339,"src":"2302:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1331,"name":"address","nodeType":"ElementaryTypeName","src":"2302:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1334,"mutability":"mutable","name":"amount","nameLocation":"2327:6:6","nodeType":"VariableDeclaration","scope":1339,"src":"2319:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1333,"name":"uint256","nodeType":"ElementaryTypeName","src":"2319:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2301:33:6"},"returnParameters":{"id":1338,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1337,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1339,"src":"2353:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1336,"name":"bool","nodeType":"ElementaryTypeName","src":"2353:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2352:6:6"},"scope":1352,"src":"2285:74:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1340,"nodeType":"StructuredDocumentation","src":"2365:287:6","text":" @dev Moves `amount` tokens from `from` to `to` using the\n allowance mechanism. `amount` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":1351,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2666:12:6","nodeType":"FunctionDefinition","parameters":{"id":1347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1342,"mutability":"mutable","name":"from","nameLocation":"2687:4:6","nodeType":"VariableDeclaration","scope":1351,"src":"2679:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1341,"name":"address","nodeType":"ElementaryTypeName","src":"2679:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1344,"mutability":"mutable","name":"to","nameLocation":"2701:2:6","nodeType":"VariableDeclaration","scope":1351,"src":"2693:10:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1343,"name":"address","nodeType":"ElementaryTypeName","src":"2693:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1346,"mutability":"mutable","name":"amount","nameLocation":"2713:6:6","nodeType":"VariableDeclaration","scope":1351,"src":"2705:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1345,"name":"uint256","nodeType":"ElementaryTypeName","src":"2705:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2678:42:6"},"returnParameters":{"id":1350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1349,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1351,"src":"2739:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1348,"name":"bool","nodeType":"ElementaryTypeName","src":"2739:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2738:6:6"},"scope":1352,"src":"2657:88:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1353,"src":"202:2545:6","usedErrors":[],"usedEvents":[1286,1295]}],"src":"106:2642:6"},"id":6},"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol","exportedSymbols":{"AddressUpgradeable":[2770],"ContextUpgradeable":[2821],"ERC20Upgradeable":[1274],"ERC4626Upgradeable":[2003],"IERC20MetadataUpgradeable":[2028],"IERC20PermitUpgradeable":[2064],"IERC20Upgradeable":[1352],"IERC4626Upgradeable":[407],"Initializable":[576],"MathUpgradeable":[3687],"SafeERC20Upgradeable":[2440]},"id":2004,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1354,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"118:23:7"},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol","file":"../ERC20Upgradeable.sol","id":1355,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2004,"sourceUnit":1275,"src":"143:33:7","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol","file":"../utils/SafeERC20Upgradeable.sol","id":1356,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2004,"sourceUnit":2441,"src":"177:43:7","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/interfaces/IERC4626Upgradeable.sol","file":"../../../interfaces/IERC4626Upgradeable.sol","id":1357,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2004,"sourceUnit":408,"src":"221:53:7","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol","file":"../../../utils/math/MathUpgradeable.sol","id":1358,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2004,"sourceUnit":3688,"src":"275:49:7","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"../../../proxy/utils/Initializable.sol","id":1360,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2004,"sourceUnit":577,"src":"325:69:7","symbolAliases":[{"foreign":{"id":1359,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":576,"src":"333:13:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":1362,"name":"Initializable","nameLocations":["3259:13:7"],"nodeType":"IdentifierPath","referencedDeclaration":576,"src":"3259:13:7"},"id":1363,"nodeType":"InheritanceSpecifier","src":"3259:13:7"},{"baseName":{"id":1364,"name":"ERC20Upgradeable","nameLocations":["3274:16:7"],"nodeType":"IdentifierPath","referencedDeclaration":1274,"src":"3274:16:7"},"id":1365,"nodeType":"InheritanceSpecifier","src":"3274:16:7"},{"baseName":{"id":1366,"name":"IERC4626Upgradeable","nameLocations":["3292:19:7"],"nodeType":"IdentifierPath","referencedDeclaration":407,"src":"3292:19:7"},"id":1367,"nodeType":"InheritanceSpecifier","src":"3292:19:7"}],"canonicalName":"ERC4626Upgradeable","contractDependencies":[],"contractKind":"contract","documentation":{"id":1361,"nodeType":"StructuredDocumentation","src":"396:2822:7","text":" @dev Implementation of the ERC4626 \"Tokenized Vault Standard\" as defined in\n https://eips.ethereum.org/EIPS/eip-4626[EIP-4626].\n This extension allows the minting and burning of \"shares\" (represented using the ERC20 inheritance) in exchange for\n underlying \"assets\" through standardized {deposit}, {mint}, {redeem} and {burn} workflows. This contract extends\n the ERC20 standard. Any additional extensions included along it would affect the \"shares\" token represented by this\n contract and not the \"assets\" token which is an independent contract.\n [CAUTION]\n ====\n In empty (or nearly empty) ERC-4626 vaults, deposits are at high risk of being stolen through frontrunning\n with a \"donation\" to the vault that inflates the price of a share. This is variously known as a donation or inflation\n attack and is essentially a problem of slippage. Vault deployers can protect against this attack by making an initial\n deposit of a non-trivial amount of the asset, such that price manipulation becomes infeasible. Withdrawals may\n similarly be affected by slippage. Users can protect against this attack as well as unexpected slippage in general by\n verifying the amount received is as expected, using a wrapper that performs these checks such as\n https://github.com/fei-protocol/ERC4626#erc4626router-and-base[ERC4626Router].\n Since v4.9, this implementation uses virtual assets and shares to mitigate that risk. The `_decimalsOffset()`\n corresponds to an offset in the decimal representation between the underlying asset's decimals and the vault\n decimals. This offset also determines the rate of virtual shares to virtual assets in the vault, which itself\n determines the initial exchange rate. While not fully preventing the attack, analysis shows that the default offset\n (0) makes it non-profitable, as a result of the value being captured by the virtual shares (out of the attacker's\n donation) matching the attacker's expected gains. With a larger offset, the attack becomes orders of magnitude more\n expensive than it is profitable. More details about the underlying math can be found\n xref:erc4626.adoc#inflation-attack[here].\n The drawback of this approach is that the virtual shares do capture (a very small) part of the value being accrued\n to the vault. Also, if the vault experiences losses, the users try to exit the vault, the virtual shares and assets\n will cause the first user to exit to experience reduced losses in detriment to the last users that will experience\n bigger losses. Developers willing to revert back to the pre-v4.9 behavior just need to override the\n `_convertToShares` and `_convertToAssets` functions.\n To learn more, check out our xref:ROOT:erc4626.adoc[ERC-4626 guide].\n ====\n _Available since v4.7._"},"fullyImplemented":true,"id":2003,"linearizedBaseContracts":[2003,407,1274,2028,1352,2821,576],"name":"ERC4626Upgradeable","nameLocation":"3237:18:7","nodeType":"ContractDefinition","nodes":[{"global":false,"id":1370,"libraryName":{"id":1368,"name":"MathUpgradeable","nameLocations":["3324:15:7"],"nodeType":"IdentifierPath","referencedDeclaration":3687,"src":"3324:15:7"},"nodeType":"UsingForDirective","src":"3318:34:7","typeName":{"id":1369,"name":"uint256","nodeType":"ElementaryTypeName","src":"3344:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":false,"id":1373,"mutability":"mutable","name":"_asset","nameLocation":"3384:6:7","nodeType":"VariableDeclaration","scope":2003,"src":"3358:32:7","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":1372,"nodeType":"UserDefinedTypeName","pathNode":{"id":1371,"name":"IERC20Upgradeable","nameLocations":["3358:17:7"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"3358:17:7"},"referencedDeclaration":1352,"src":"3358:17:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"private"},{"constant":false,"id":1375,"mutability":"mutable","name":"_underlyingDecimals","nameLocation":"3410:19:7","nodeType":"VariableDeclaration","scope":2003,"src":"3396:33:7","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1374,"name":"uint8","nodeType":"ElementaryTypeName","src":"3396:5:7","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"private"},{"body":{"id":1388,"nodeType":"Block","src":"3636:49:7","statements":[{"expression":{"arguments":[{"id":1385,"name":"asset_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1379,"src":"3671:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}],"id":1384,"name":"__ERC4626_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1417,"src":"3646:24:7","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$1352_$returns$__$","typeString":"function (contract IERC20Upgradeable)"}},"id":1386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3646:32:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1387,"nodeType":"ExpressionStatement","src":"3646:32:7"}]},"documentation":{"id":1376,"nodeType":"StructuredDocumentation","src":"3436:119:7","text":" @dev Set the underlying asset contract. This must be an ERC20-compatible contract (ERC20 or ERC777)."},"id":1389,"implemented":true,"kind":"function","modifiers":[{"id":1382,"kind":"modifierInvocation","modifierName":{"id":1381,"name":"onlyInitializing","nameLocations":["3619:16:7"],"nodeType":"IdentifierPath","referencedDeclaration":521,"src":"3619:16:7"},"nodeType":"ModifierInvocation","src":"3619:16:7"}],"name":"__ERC4626_init","nameLocation":"3569:14:7","nodeType":"FunctionDefinition","parameters":{"id":1380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1379,"mutability":"mutable","name":"asset_","nameLocation":"3602:6:7","nodeType":"VariableDeclaration","scope":1389,"src":"3584:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":1378,"nodeType":"UserDefinedTypeName","pathNode":{"id":1377,"name":"IERC20Upgradeable","nameLocations":["3584:17:7"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"3584:17:7"},"referencedDeclaration":1352,"src":"3584:17:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"internal"}],"src":"3583:26:7"},"returnParameters":{"id":1383,"nodeType":"ParameterList","parameters":[],"src":"3636:0:7"},"scope":2003,"src":"3560:125:7","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1416,"nodeType":"Block","src":"3777:168:7","statements":[{"assignments":[1398,1400],"declarations":[{"constant":false,"id":1398,"mutability":"mutable","name":"success","nameLocation":"3793:7:7","nodeType":"VariableDeclaration","scope":1416,"src":"3788:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1397,"name":"bool","nodeType":"ElementaryTypeName","src":"3788:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1400,"mutability":"mutable","name":"assetDecimals","nameLocation":"3808:13:7","nodeType":"VariableDeclaration","scope":1416,"src":"3802:19:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1399,"name":"uint8","nodeType":"ElementaryTypeName","src":"3802:5:7","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":1404,"initialValue":{"arguments":[{"id":1402,"name":"asset_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1392,"src":"3846:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}],"id":1401,"name":"_tryGetAssetDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1484,"src":"3825:20:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20Upgradeable_$1352_$returns$_t_bool_$_t_uint8_$","typeString":"function (contract IERC20Upgradeable) view returns (bool,uint8)"}},"id":1403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3825:28:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint8_$","typeString":"tuple(bool,uint8)"}},"nodeType":"VariableDeclarationStatement","src":"3787:66:7"},{"expression":{"id":1410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1405,"name":"_underlyingDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1375,"src":"3863:19:7","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":1406,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1398,"src":"3885:7:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"3138","id":1408,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3911:2:7","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"id":1409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"3885:28:7","trueExpression":{"id":1407,"name":"assetDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1400,"src":"3895:13:7","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"3863:50:7","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":1411,"nodeType":"ExpressionStatement","src":"3863:50:7"},{"expression":{"id":1414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1412,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1373,"src":"3923:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1413,"name":"asset_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1392,"src":"3932:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"src":"3923:15:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":1415,"nodeType":"ExpressionStatement","src":"3923:15:7"}]},"id":1417,"implemented":true,"kind":"function","modifiers":[{"id":1395,"kind":"modifierInvocation","modifierName":{"id":1394,"name":"onlyInitializing","nameLocations":["3760:16:7"],"nodeType":"IdentifierPath","referencedDeclaration":521,"src":"3760:16:7"},"nodeType":"ModifierInvocation","src":"3760:16:7"}],"name":"__ERC4626_init_unchained","nameLocation":"3700:24:7","nodeType":"FunctionDefinition","parameters":{"id":1393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1392,"mutability":"mutable","name":"asset_","nameLocation":"3743:6:7","nodeType":"VariableDeclaration","scope":1417,"src":"3725:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":1391,"nodeType":"UserDefinedTypeName","pathNode":{"id":1390,"name":"IERC20Upgradeable","nameLocations":["3725:17:7"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"3725:17:7"},"referencedDeclaration":1352,"src":"3725:17:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"internal"}],"src":"3724:26:7"},"returnParameters":{"id":1396,"nodeType":"ParameterList","parameters":[],"src":"3777:0:7"},"scope":2003,"src":"3691:254:7","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1483,"nodeType":"Block","src":"4179:477:7","statements":[{"assignments":[1429,1431],"declarations":[{"constant":false,"id":1429,"mutability":"mutable","name":"success","nameLocation":"4195:7:7","nodeType":"VariableDeclaration","scope":1483,"src":"4190:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1428,"name":"bool","nodeType":"ElementaryTypeName","src":"4190:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1431,"mutability":"mutable","name":"encodedDecimals","nameLocation":"4217:15:7","nodeType":"VariableDeclaration","scope":1483,"src":"4204:28:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1430,"name":"bytes","nodeType":"ElementaryTypeName","src":"4204:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1444,"initialValue":{"arguments":[{"arguments":[{"expression":{"expression":{"id":1439,"name":"IERC20MetadataUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2028,"src":"4299:25:7","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20MetadataUpgradeable_$2028_$","typeString":"type(contract IERC20MetadataUpgradeable)"}},"id":1440,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4325:8:7","memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":2027,"src":"4299:34:7","typeDescriptions":{"typeIdentifier":"t_function_declaration_view$__$returns$_t_uint8_$","typeString":"function IERC20MetadataUpgradeable.decimals() view returns (uint8)"}},"id":1441,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4334:8:7","memberName":"selector","nodeType":"MemberAccess","src":"4299:43:7","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":1437,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4276:3:7","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1438,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4280:18:7","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"4276:22:7","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":1442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4276:67:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":1434,"name":"asset_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1421,"src":"4244:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}],"id":1433,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4236:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1432,"name":"address","nodeType":"ElementaryTypeName","src":"4236:7:7","typeDescriptions":{}}},"id":1435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4236:15:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4252:10:7","memberName":"staticcall","nodeType":"MemberAccess","src":"4236:26:7","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":1443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4236:117:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4189:164:7"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1445,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1429,"src":"4367:7:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":1446,"name":"encodedDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1431,"src":"4378:15:7","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4394:6:7","memberName":"length","nodeType":"MemberAccess","src":"4378:22:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"3332","id":1448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4404:2:7","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"4378:28:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4367:39:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1478,"nodeType":"IfStatement","src":"4363:260:7","trueBody":{"id":1477,"nodeType":"Block","src":"4408:215:7","statements":[{"assignments":[1452],"declarations":[{"constant":false,"id":1452,"mutability":"mutable","name":"returnedDecimals","nameLocation":"4430:16:7","nodeType":"VariableDeclaration","scope":1477,"src":"4422:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1451,"name":"uint256","nodeType":"ElementaryTypeName","src":"4422:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1460,"initialValue":{"arguments":[{"id":1455,"name":"encodedDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1431,"src":"4460:15:7","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":1457,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4478:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1456,"name":"uint256","nodeType":"ElementaryTypeName","src":"4478:7:7","typeDescriptions":{}}}],"id":1458,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4477:9:7","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":1453,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4449:3:7","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1454,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4453:6:7","memberName":"decode","nodeType":"MemberAccess","src":"4449:10:7","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":1459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4449:38:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4422:65:7"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1461,"name":"returnedDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1452,"src":"4505:16:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1464,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4530:5:7","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":1463,"name":"uint8","nodeType":"ElementaryTypeName","src":"4530:5:7","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":1462,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4525:4:7","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1465,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4525:11:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":1466,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4537:3:7","memberName":"max","nodeType":"MemberAccess","src":"4525:15:7","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"4505:35:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1476,"nodeType":"IfStatement","src":"4501:112:7","trueBody":{"id":1475,"nodeType":"Block","src":"4542:71:7","statements":[{"expression":{"components":[{"hexValue":"74727565","id":1468,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4568:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"arguments":[{"id":1471,"name":"returnedDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1452,"src":"4580:16:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1470,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4574:5:7","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":1469,"name":"uint8","nodeType":"ElementaryTypeName","src":"4574:5:7","typeDescriptions":{}}},"id":1472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4574:23:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":1473,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4567:31:7","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint8_$","typeString":"tuple(bool,uint8)"}},"functionReturnParameters":1427,"id":1474,"nodeType":"Return","src":"4560:38:7"}]}}]}},{"expression":{"components":[{"hexValue":"66616c7365","id":1479,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4640:5:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":1480,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4647:1:7","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":1481,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4639:10:7","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":1427,"id":1482,"nodeType":"Return","src":"4632:17:7"}]},"documentation":{"id":1418,"nodeType":"StructuredDocumentation","src":"3951:132:7","text":" @dev Attempts to fetch the asset decimals. A return value of false indicates that the attempt failed in some way."},"id":1484,"implemented":true,"kind":"function","modifiers":[],"name":"_tryGetAssetDecimals","nameLocation":"4097:20:7","nodeType":"FunctionDefinition","parameters":{"id":1422,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1421,"mutability":"mutable","name":"asset_","nameLocation":"4136:6:7","nodeType":"VariableDeclaration","scope":1484,"src":"4118:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":1420,"nodeType":"UserDefinedTypeName","pathNode":{"id":1419,"name":"IERC20Upgradeable","nameLocations":["4118:17:7"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"4118:17:7"},"referencedDeclaration":1352,"src":"4118:17:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"internal"}],"src":"4117:26:7"},"returnParameters":{"id":1427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1424,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1484,"src":"4166:4:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1423,"name":"bool","nodeType":"ElementaryTypeName","src":"4166:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1426,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1484,"src":"4172:5:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1425,"name":"uint8","nodeType":"ElementaryTypeName","src":"4172:5:7","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"4165:13:7"},"scope":2003,"src":"4088:568:7","stateMutability":"view","virtual":false,"visibility":"private"},{"baseFunctions":[757,2027],"body":{"id":1498,"nodeType":"Block","src":"5171:63:7","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":1496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1493,"name":"_underlyingDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1375,"src":"5188:19:7","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":1494,"name":"_decimalsOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1997,"src":"5210:15:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint8_$","typeString":"function () view returns (uint8)"}},"id":1495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5210:17:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"5188:39:7","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":1492,"id":1497,"nodeType":"Return","src":"5181:46:7"}]},"documentation":{"id":1485,"nodeType":"StructuredDocumentation","src":"4662:394:7","text":" @dev Decimals are computed by adding the decimal offset on top of the underlying asset's decimals. This\n \"original\" value is cached during construction of the vault contract. If this read operation fails (e.g., the\n asset has not been created yet), a default of 18 is used to represent the underlying asset's decimals.\n See {IERC20Metadata-decimals}."},"functionSelector":"313ce567","id":1499,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"5070:8:7","nodeType":"FunctionDefinition","overrides":{"id":1489,"nodeType":"OverrideSpecifier","overrides":[{"id":1487,"name":"IERC20MetadataUpgradeable","nameLocations":["5110:25:7"],"nodeType":"IdentifierPath","referencedDeclaration":2028,"src":"5110:25:7"},{"id":1488,"name":"ERC20Upgradeable","nameLocations":["5137:16:7"],"nodeType":"IdentifierPath","referencedDeclaration":1274,"src":"5137:16:7"}],"src":"5101:53:7"},"parameters":{"id":1486,"nodeType":"ParameterList","parameters":[],"src":"5078:2:7"},"returnParameters":{"id":1492,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1491,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1499,"src":"5164:5:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1490,"name":"uint8","nodeType":"ElementaryTypeName","src":"5164:5:7","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"5163:7:7"},"scope":2003,"src":"5061:173:7","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[276],"body":{"id":1511,"nodeType":"Block","src":"5342:39:7","statements":[{"expression":{"arguments":[{"id":1508,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1373,"src":"5367:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}],"id":1507,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5359:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1506,"name":"address","nodeType":"ElementaryTypeName","src":"5359:7:7","typeDescriptions":{}}},"id":1509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5359:15:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":1505,"id":1510,"nodeType":"Return","src":"5352:22:7"}]},"documentation":{"id":1500,"nodeType":"StructuredDocumentation","src":"5240:33:7","text":"@dev See {IERC4626-asset}. "},"functionSelector":"38d52e0f","id":1512,"implemented":true,"kind":"function","modifiers":[],"name":"asset","nameLocation":"5287:5:7","nodeType":"FunctionDefinition","overrides":{"id":1502,"nodeType":"OverrideSpecifier","overrides":[],"src":"5315:8:7"},"parameters":{"id":1501,"nodeType":"ParameterList","parameters":[],"src":"5292:2:7"},"returnParameters":{"id":1505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1504,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1512,"src":"5333:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1503,"name":"address","nodeType":"ElementaryTypeName","src":"5333:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5332:9:7"},"scope":2003,"src":"5278:103:7","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[282],"body":{"id":1527,"nodeType":"Block","src":"5501:55:7","statements":[{"expression":{"arguments":[{"arguments":[{"id":1523,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5543:4:7","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626Upgradeable_$2003","typeString":"contract ERC4626Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626Upgradeable_$2003","typeString":"contract ERC4626Upgradeable"}],"id":1522,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5535:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1521,"name":"address","nodeType":"ElementaryTypeName","src":"5535:7:7","typeDescriptions":{}}},"id":1524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5535:13:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":1519,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1373,"src":"5518:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":1520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5525:9:7","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1309,"src":"5518:16:7","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":1525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5518:31:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1518,"id":1526,"nodeType":"Return","src":"5511:38:7"}]},"documentation":{"id":1513,"nodeType":"StructuredDocumentation","src":"5387:39:7","text":"@dev See {IERC4626-totalAssets}. "},"functionSelector":"01e1d114","id":1528,"implemented":true,"kind":"function","modifiers":[],"name":"totalAssets","nameLocation":"5440:11:7","nodeType":"FunctionDefinition","overrides":{"id":1515,"nodeType":"OverrideSpecifier","overrides":[],"src":"5474:8:7"},"parameters":{"id":1514,"nodeType":"ParameterList","parameters":[],"src":"5451:2:7"},"returnParameters":{"id":1518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1517,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1528,"src":"5492:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1516,"name":"uint256","nodeType":"ElementaryTypeName","src":"5492:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5491:9:7"},"scope":2003,"src":"5431:125:7","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[290],"body":{"id":1544,"nodeType":"Block","src":"5698:79:7","statements":[{"expression":{"arguments":[{"id":1538,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1531,"src":"5732:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":1539,"name":"MathUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3687,"src":"5740:15:7","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUpgradeable_$3687_$","typeString":"type(library MathUpgradeable)"}},"id":1540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5756:8:7","memberName":"Rounding","nodeType":"MemberAccess","referencedDeclaration":2828,"src":"5740:24:7","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2828_$","typeString":"type(enum MathUpgradeable.Rounding)"}},"id":1541,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5765:4:7","memberName":"Down","nodeType":"MemberAccess","referencedDeclaration":2825,"src":"5740:29:7","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}],"id":1537,"name":"_convertToShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1877,"src":"5715:16:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_enum$_Rounding_$2828_$returns$_t_uint256_$","typeString":"function (uint256,enum MathUpgradeable.Rounding) view returns (uint256)"}},"id":1542,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5715:55:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1536,"id":1543,"nodeType":"Return","src":"5708:62:7"}]},"documentation":{"id":1529,"nodeType":"StructuredDocumentation","src":"5562:43:7","text":"@dev See {IERC4626-convertToShares}. "},"functionSelector":"c6e6f592","id":1545,"implemented":true,"kind":"function","modifiers":[],"name":"convertToShares","nameLocation":"5619:15:7","nodeType":"FunctionDefinition","overrides":{"id":1533,"nodeType":"OverrideSpecifier","overrides":[],"src":"5671:8:7"},"parameters":{"id":1532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1531,"mutability":"mutable","name":"assets","nameLocation":"5643:6:7","nodeType":"VariableDeclaration","scope":1545,"src":"5635:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1530,"name":"uint256","nodeType":"ElementaryTypeName","src":"5635:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5634:16:7"},"returnParameters":{"id":1536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1535,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1545,"src":"5689:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1534,"name":"uint256","nodeType":"ElementaryTypeName","src":"5689:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5688:9:7"},"scope":2003,"src":"5610:167:7","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[298],"body":{"id":1561,"nodeType":"Block","src":"5919:79:7","statements":[{"expression":{"arguments":[{"id":1555,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1548,"src":"5953:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":1556,"name":"MathUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3687,"src":"5961:15:7","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUpgradeable_$3687_$","typeString":"type(library MathUpgradeable)"}},"id":1557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5977:8:7","memberName":"Rounding","nodeType":"MemberAccess","referencedDeclaration":2828,"src":"5961:24:7","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2828_$","typeString":"type(enum MathUpgradeable.Rounding)"}},"id":1558,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5986:4:7","memberName":"Down","nodeType":"MemberAccess","referencedDeclaration":2825,"src":"5961:29:7","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}],"id":1554,"name":"_convertToAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1905,"src":"5936:16:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_enum$_Rounding_$2828_$returns$_t_uint256_$","typeString":"function (uint256,enum MathUpgradeable.Rounding) view returns (uint256)"}},"id":1559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5936:55:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1553,"id":1560,"nodeType":"Return","src":"5929:62:7"}]},"documentation":{"id":1546,"nodeType":"StructuredDocumentation","src":"5783:43:7","text":"@dev See {IERC4626-convertToAssets}. "},"functionSelector":"07a2d13a","id":1562,"implemented":true,"kind":"function","modifiers":[],"name":"convertToAssets","nameLocation":"5840:15:7","nodeType":"FunctionDefinition","overrides":{"id":1550,"nodeType":"OverrideSpecifier","overrides":[],"src":"5892:8:7"},"parameters":{"id":1549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1548,"mutability":"mutable","name":"shares","nameLocation":"5864:6:7","nodeType":"VariableDeclaration","scope":1562,"src":"5856:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1547,"name":"uint256","nodeType":"ElementaryTypeName","src":"5856:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5855:16:7"},"returnParameters":{"id":1553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1552,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1562,"src":"5910:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1551,"name":"uint256","nodeType":"ElementaryTypeName","src":"5910:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5909:9:7"},"scope":2003,"src":"5831:167:7","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[306],"body":{"id":1577,"nodeType":"Block","src":"6123:41:7","statements":[{"expression":{"expression":{"arguments":[{"id":1573,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6145:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1572,"name":"uint256","nodeType":"ElementaryTypeName","src":"6145:7:7","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":1571,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6140:4:7","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6140:13:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":1575,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6154:3:7","memberName":"max","nodeType":"MemberAccess","src":"6140:17:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1570,"id":1576,"nodeType":"Return","src":"6133:24:7"}]},"documentation":{"id":1563,"nodeType":"StructuredDocumentation","src":"6004:38:7","text":"@dev See {IERC4626-maxDeposit}. "},"functionSelector":"402d267d","id":1578,"implemented":true,"kind":"function","modifiers":[],"name":"maxDeposit","nameLocation":"6056:10:7","nodeType":"FunctionDefinition","overrides":{"id":1567,"nodeType":"OverrideSpecifier","overrides":[],"src":"6096:8:7"},"parameters":{"id":1566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1565,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1578,"src":"6067:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1564,"name":"address","nodeType":"ElementaryTypeName","src":"6067:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6066:9:7"},"returnParameters":{"id":1570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1569,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1578,"src":"6114:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1568,"name":"uint256","nodeType":"ElementaryTypeName","src":"6114:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6113:9:7"},"scope":2003,"src":"6047:117:7","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[332],"body":{"id":1593,"nodeType":"Block","src":"6283:41:7","statements":[{"expression":{"expression":{"arguments":[{"id":1589,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6305:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1588,"name":"uint256","nodeType":"ElementaryTypeName","src":"6305:7:7","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":1587,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6300:4:7","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1590,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6300:13:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":1591,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6314:3:7","memberName":"max","nodeType":"MemberAccess","src":"6300:17:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1586,"id":1592,"nodeType":"Return","src":"6293:24:7"}]},"documentation":{"id":1579,"nodeType":"StructuredDocumentation","src":"6170:35:7","text":"@dev See {IERC4626-maxMint}. "},"functionSelector":"c63d75b6","id":1594,"implemented":true,"kind":"function","modifiers":[],"name":"maxMint","nameLocation":"6219:7:7","nodeType":"FunctionDefinition","overrides":{"id":1583,"nodeType":"OverrideSpecifier","overrides":[],"src":"6256:8:7"},"parameters":{"id":1582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1581,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1594,"src":"6227:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1580,"name":"address","nodeType":"ElementaryTypeName","src":"6227:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6226:9:7"},"returnParameters":{"id":1586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1585,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1594,"src":"6274:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1584,"name":"uint256","nodeType":"ElementaryTypeName","src":"6274:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6273:9:7"},"scope":2003,"src":"6210:114:7","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[358],"body":{"id":1612,"nodeType":"Block","src":"6457:89:7","statements":[{"expression":{"arguments":[{"arguments":[{"id":1605,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1597,"src":"6501:5:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1604,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":781,"src":"6491:9:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":1606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6491:16:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":1607,"name":"MathUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3687,"src":"6509:15:7","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUpgradeable_$3687_$","typeString":"type(library MathUpgradeable)"}},"id":1608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6525:8:7","memberName":"Rounding","nodeType":"MemberAccess","referencedDeclaration":2828,"src":"6509:24:7","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2828_$","typeString":"type(enum MathUpgradeable.Rounding)"}},"id":1609,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6534:4:7","memberName":"Down","nodeType":"MemberAccess","referencedDeclaration":2825,"src":"6509:29:7","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}],"id":1603,"name":"_convertToAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1905,"src":"6474:16:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_enum$_Rounding_$2828_$returns$_t_uint256_$","typeString":"function (uint256,enum MathUpgradeable.Rounding) view returns (uint256)"}},"id":1610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6474:65:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1602,"id":1611,"nodeType":"Return","src":"6467:72:7"}]},"documentation":{"id":1595,"nodeType":"StructuredDocumentation","src":"6330:39:7","text":"@dev See {IERC4626-maxWithdraw}. "},"functionSelector":"ce96cb77","id":1613,"implemented":true,"kind":"function","modifiers":[],"name":"maxWithdraw","nameLocation":"6383:11:7","nodeType":"FunctionDefinition","overrides":{"id":1599,"nodeType":"OverrideSpecifier","overrides":[],"src":"6430:8:7"},"parameters":{"id":1598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1597,"mutability":"mutable","name":"owner","nameLocation":"6403:5:7","nodeType":"VariableDeclaration","scope":1613,"src":"6395:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1596,"name":"address","nodeType":"ElementaryTypeName","src":"6395:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6394:15:7"},"returnParameters":{"id":1602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1601,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1613,"src":"6448:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1600,"name":"uint256","nodeType":"ElementaryTypeName","src":"6448:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6447:9:7"},"scope":2003,"src":"6374:172:7","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[386],"body":{"id":1626,"nodeType":"Block","src":"6675:40:7","statements":[{"expression":{"arguments":[{"id":1623,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1616,"src":"6702:5:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1622,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":781,"src":"6692:9:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":1624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6692:16:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1621,"id":1625,"nodeType":"Return","src":"6685:23:7"}]},"documentation":{"id":1614,"nodeType":"StructuredDocumentation","src":"6552:37:7","text":"@dev See {IERC4626-maxRedeem}. "},"functionSelector":"d905777e","id":1627,"implemented":true,"kind":"function","modifiers":[],"name":"maxRedeem","nameLocation":"6603:9:7","nodeType":"FunctionDefinition","overrides":{"id":1618,"nodeType":"OverrideSpecifier","overrides":[],"src":"6648:8:7"},"parameters":{"id":1617,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1616,"mutability":"mutable","name":"owner","nameLocation":"6621:5:7","nodeType":"VariableDeclaration","scope":1627,"src":"6613:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1615,"name":"address","nodeType":"ElementaryTypeName","src":"6613:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6612:15:7"},"returnParameters":{"id":1621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1620,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1627,"src":"6666:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1619,"name":"uint256","nodeType":"ElementaryTypeName","src":"6666:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6665:9:7"},"scope":2003,"src":"6594:121:7","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[314],"body":{"id":1643,"nodeType":"Block","src":"6855:79:7","statements":[{"expression":{"arguments":[{"id":1637,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1630,"src":"6889:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":1638,"name":"MathUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3687,"src":"6897:15:7","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUpgradeable_$3687_$","typeString":"type(library MathUpgradeable)"}},"id":1639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6913:8:7","memberName":"Rounding","nodeType":"MemberAccess","referencedDeclaration":2828,"src":"6897:24:7","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2828_$","typeString":"type(enum MathUpgradeable.Rounding)"}},"id":1640,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6922:4:7","memberName":"Down","nodeType":"MemberAccess","referencedDeclaration":2825,"src":"6897:29:7","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}],"id":1636,"name":"_convertToShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1877,"src":"6872:16:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_enum$_Rounding_$2828_$returns$_t_uint256_$","typeString":"function (uint256,enum MathUpgradeable.Rounding) view returns (uint256)"}},"id":1641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6872:55:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1635,"id":1642,"nodeType":"Return","src":"6865:62:7"}]},"documentation":{"id":1628,"nodeType":"StructuredDocumentation","src":"6721:42:7","text":"@dev See {IERC4626-previewDeposit}. "},"functionSelector":"ef8b30f7","id":1644,"implemented":true,"kind":"function","modifiers":[],"name":"previewDeposit","nameLocation":"6777:14:7","nodeType":"FunctionDefinition","overrides":{"id":1632,"nodeType":"OverrideSpecifier","overrides":[],"src":"6828:8:7"},"parameters":{"id":1631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1630,"mutability":"mutable","name":"assets","nameLocation":"6800:6:7","nodeType":"VariableDeclaration","scope":1644,"src":"6792:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1629,"name":"uint256","nodeType":"ElementaryTypeName","src":"6792:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6791:16:7"},"returnParameters":{"id":1635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1634,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1644,"src":"6846:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1633,"name":"uint256","nodeType":"ElementaryTypeName","src":"6846:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6845:9:7"},"scope":2003,"src":"6768:166:7","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[340],"body":{"id":1660,"nodeType":"Block","src":"7068:77:7","statements":[{"expression":{"arguments":[{"id":1654,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1647,"src":"7102:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":1655,"name":"MathUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3687,"src":"7110:15:7","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUpgradeable_$3687_$","typeString":"type(library MathUpgradeable)"}},"id":1656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7126:8:7","memberName":"Rounding","nodeType":"MemberAccess","referencedDeclaration":2828,"src":"7110:24:7","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2828_$","typeString":"type(enum MathUpgradeable.Rounding)"}},"id":1657,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7135:2:7","memberName":"Up","nodeType":"MemberAccess","referencedDeclaration":2826,"src":"7110:27:7","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}],"id":1653,"name":"_convertToAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1905,"src":"7085:16:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_enum$_Rounding_$2828_$returns$_t_uint256_$","typeString":"function (uint256,enum MathUpgradeable.Rounding) view returns (uint256)"}},"id":1658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7085:53:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1652,"id":1659,"nodeType":"Return","src":"7078:60:7"}]},"documentation":{"id":1645,"nodeType":"StructuredDocumentation","src":"6940:39:7","text":"@dev See {IERC4626-previewMint}. "},"functionSelector":"b3d7f6b9","id":1661,"implemented":true,"kind":"function","modifiers":[],"name":"previewMint","nameLocation":"6993:11:7","nodeType":"FunctionDefinition","overrides":{"id":1649,"nodeType":"OverrideSpecifier","overrides":[],"src":"7041:8:7"},"parameters":{"id":1648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1647,"mutability":"mutable","name":"shares","nameLocation":"7013:6:7","nodeType":"VariableDeclaration","scope":1661,"src":"7005:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1646,"name":"uint256","nodeType":"ElementaryTypeName","src":"7005:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7004:16:7"},"returnParameters":{"id":1652,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1651,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1661,"src":"7059:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1650,"name":"uint256","nodeType":"ElementaryTypeName","src":"7059:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7058:9:7"},"scope":2003,"src":"6984:161:7","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[366],"body":{"id":1677,"nodeType":"Block","src":"7287:77:7","statements":[{"expression":{"arguments":[{"id":1671,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1664,"src":"7321:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":1672,"name":"MathUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3687,"src":"7329:15:7","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUpgradeable_$3687_$","typeString":"type(library MathUpgradeable)"}},"id":1673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7345:8:7","memberName":"Rounding","nodeType":"MemberAccess","referencedDeclaration":2828,"src":"7329:24:7","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2828_$","typeString":"type(enum MathUpgradeable.Rounding)"}},"id":1674,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7354:2:7","memberName":"Up","nodeType":"MemberAccess","referencedDeclaration":2826,"src":"7329:27:7","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}],"id":1670,"name":"_convertToShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1877,"src":"7304:16:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_enum$_Rounding_$2828_$returns$_t_uint256_$","typeString":"function (uint256,enum MathUpgradeable.Rounding) view returns (uint256)"}},"id":1675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7304:53:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1669,"id":1676,"nodeType":"Return","src":"7297:60:7"}]},"documentation":{"id":1662,"nodeType":"StructuredDocumentation","src":"7151:43:7","text":"@dev See {IERC4626-previewWithdraw}. "},"functionSelector":"0a28a477","id":1678,"implemented":true,"kind":"function","modifiers":[],"name":"previewWithdraw","nameLocation":"7208:15:7","nodeType":"FunctionDefinition","overrides":{"id":1666,"nodeType":"OverrideSpecifier","overrides":[],"src":"7260:8:7"},"parameters":{"id":1665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1664,"mutability":"mutable","name":"assets","nameLocation":"7232:6:7","nodeType":"VariableDeclaration","scope":1678,"src":"7224:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1663,"name":"uint256","nodeType":"ElementaryTypeName","src":"7224:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7223:16:7"},"returnParameters":{"id":1669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1668,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1678,"src":"7278:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1667,"name":"uint256","nodeType":"ElementaryTypeName","src":"7278:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7277:9:7"},"scope":2003,"src":"7199:165:7","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[394],"body":{"id":1694,"nodeType":"Block","src":"7502:79:7","statements":[{"expression":{"arguments":[{"id":1688,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1681,"src":"7536:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":1689,"name":"MathUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3687,"src":"7544:15:7","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUpgradeable_$3687_$","typeString":"type(library MathUpgradeable)"}},"id":1690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7560:8:7","memberName":"Rounding","nodeType":"MemberAccess","referencedDeclaration":2828,"src":"7544:24:7","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2828_$","typeString":"type(enum MathUpgradeable.Rounding)"}},"id":1691,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7569:4:7","memberName":"Down","nodeType":"MemberAccess","referencedDeclaration":2825,"src":"7544:29:7","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}],"id":1687,"name":"_convertToAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1905,"src":"7519:16:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_enum$_Rounding_$2828_$returns$_t_uint256_$","typeString":"function (uint256,enum MathUpgradeable.Rounding) view returns (uint256)"}},"id":1692,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7519:55:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1686,"id":1693,"nodeType":"Return","src":"7512:62:7"}]},"documentation":{"id":1679,"nodeType":"StructuredDocumentation","src":"7370:41:7","text":"@dev See {IERC4626-previewRedeem}. "},"functionSelector":"4cdad506","id":1695,"implemented":true,"kind":"function","modifiers":[],"name":"previewRedeem","nameLocation":"7425:13:7","nodeType":"FunctionDefinition","overrides":{"id":1683,"nodeType":"OverrideSpecifier","overrides":[],"src":"7475:8:7"},"parameters":{"id":1682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1681,"mutability":"mutable","name":"shares","nameLocation":"7447:6:7","nodeType":"VariableDeclaration","scope":1695,"src":"7439:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1680,"name":"uint256","nodeType":"ElementaryTypeName","src":"7439:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7438:16:7"},"returnParameters":{"id":1686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1685,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1695,"src":"7493:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1684,"name":"uint256","nodeType":"ElementaryTypeName","src":"7493:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7492:9:7"},"scope":2003,"src":"7416:165:7","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[324],"body":{"id":1731,"nodeType":"Block","src":"7720:222:7","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1707,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1698,"src":"7738:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"id":1709,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1700,"src":"7759:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1708,"name":"maxDeposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1578,"src":"7748:10:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":1710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7748:20:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7738:30:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243343632363a206465706f736974206d6f7265207468616e206d6178","id":1712,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7770:32:7","typeDescriptions":{"typeIdentifier":"t_stringliteral_942dfdb1d5d5ae526782b9f85d1470d0ba794a7c694ad01b5b8d1ba2521ed1a1","typeString":"literal_string \"ERC4626: deposit more than max\""},"value":"ERC4626: deposit more than max"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_942dfdb1d5d5ae526782b9f85d1470d0ba794a7c694ad01b5b8d1ba2521ed1a1","typeString":"literal_string \"ERC4626: deposit more than max\""}],"id":1706,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7730:7:7","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7730:73:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1714,"nodeType":"ExpressionStatement","src":"7730:73:7"},{"assignments":[1716],"declarations":[{"constant":false,"id":1716,"mutability":"mutable","name":"shares","nameLocation":"7822:6:7","nodeType":"VariableDeclaration","scope":1731,"src":"7814:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1715,"name":"uint256","nodeType":"ElementaryTypeName","src":"7814:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1720,"initialValue":{"arguments":[{"id":1718,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1698,"src":"7846:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1717,"name":"previewDeposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1644,"src":"7831:14:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":1719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7831:22:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7814:39:7"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":1722,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2798,"src":"7872:10:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7872:12:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1724,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1700,"src":"7886:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1725,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1698,"src":"7896:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1726,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1716,"src":"7904:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1721,"name":"_deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1942,"src":"7863:8:7","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":1727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7863:48:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1728,"nodeType":"ExpressionStatement","src":"7863:48:7"},{"expression":{"id":1729,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1716,"src":"7929:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1705,"id":1730,"nodeType":"Return","src":"7922:13:7"}]},"documentation":{"id":1696,"nodeType":"StructuredDocumentation","src":"7587:35:7","text":"@dev See {IERC4626-deposit}. "},"functionSelector":"6e553f65","id":1732,"implemented":true,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"7636:7:7","nodeType":"FunctionDefinition","overrides":{"id":1702,"nodeType":"OverrideSpecifier","overrides":[],"src":"7693:8:7"},"parameters":{"id":1701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1698,"mutability":"mutable","name":"assets","nameLocation":"7652:6:7","nodeType":"VariableDeclaration","scope":1732,"src":"7644:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1697,"name":"uint256","nodeType":"ElementaryTypeName","src":"7644:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1700,"mutability":"mutable","name":"receiver","nameLocation":"7668:8:7","nodeType":"VariableDeclaration","scope":1732,"src":"7660:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1699,"name":"address","nodeType":"ElementaryTypeName","src":"7660:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7643:34:7"},"returnParameters":{"id":1705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1704,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1732,"src":"7711:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1703,"name":"uint256","nodeType":"ElementaryTypeName","src":"7711:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7710:9:7"},"scope":2003,"src":"7627:315:7","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[350],"body":{"id":1768,"nodeType":"Block","src":"8299:213:7","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1744,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1735,"src":"8317:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"id":1746,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1737,"src":"8335:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1745,"name":"maxMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1594,"src":"8327:7:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":1747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8327:17:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8317:27:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243343632363a206d696e74206d6f7265207468616e206d6178","id":1749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8346:29:7","typeDescriptions":{"typeIdentifier":"t_stringliteral_a4a897ed07dc1191e15e1ac5726d86067d87f89bebeded2b310bdf1e25a3dac3","typeString":"literal_string \"ERC4626: mint more than max\""},"value":"ERC4626: mint more than max"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a4a897ed07dc1191e15e1ac5726d86067d87f89bebeded2b310bdf1e25a3dac3","typeString":"literal_string \"ERC4626: mint more than max\""}],"id":1743,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8309:7:7","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8309:67:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1751,"nodeType":"ExpressionStatement","src":"8309:67:7"},{"assignments":[1753],"declarations":[{"constant":false,"id":1753,"mutability":"mutable","name":"assets","nameLocation":"8395:6:7","nodeType":"VariableDeclaration","scope":1768,"src":"8387:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1752,"name":"uint256","nodeType":"ElementaryTypeName","src":"8387:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1757,"initialValue":{"arguments":[{"id":1755,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1735,"src":"8416:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1754,"name":"previewMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1661,"src":"8404:11:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":1756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8404:19:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8387:36:7"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":1759,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2798,"src":"8442:10:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8442:12:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1761,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1737,"src":"8456:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1762,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1753,"src":"8466:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1763,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1735,"src":"8474:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1758,"name":"_deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1942,"src":"8433:8:7","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":1764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8433:48:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1765,"nodeType":"ExpressionStatement","src":"8433:48:7"},{"expression":{"id":1766,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1753,"src":"8499:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1742,"id":1767,"nodeType":"Return","src":"8492:13:7"}]},"documentation":{"id":1733,"nodeType":"StructuredDocumentation","src":"7948:256:7","text":"@dev See {IERC4626-mint}.\n As opposed to {deposit}, minting is allowed even if the vault is in a state where the price of a share is zero.\n In this case, the shares will be minted without requiring any assets to be deposited."},"functionSelector":"94bf804d","id":1769,"implemented":true,"kind":"function","modifiers":[],"name":"mint","nameLocation":"8218:4:7","nodeType":"FunctionDefinition","overrides":{"id":1739,"nodeType":"OverrideSpecifier","overrides":[],"src":"8272:8:7"},"parameters":{"id":1738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1735,"mutability":"mutable","name":"shares","nameLocation":"8231:6:7","nodeType":"VariableDeclaration","scope":1769,"src":"8223:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1734,"name":"uint256","nodeType":"ElementaryTypeName","src":"8223:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1737,"mutability":"mutable","name":"receiver","nameLocation":"8247:8:7","nodeType":"VariableDeclaration","scope":1769,"src":"8239:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1736,"name":"address","nodeType":"ElementaryTypeName","src":"8239:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8222:34:7"},"returnParameters":{"id":1742,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1741,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1769,"src":"8290:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1740,"name":"uint256","nodeType":"ElementaryTypeName","src":"8290:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8289:9:7"},"scope":2003,"src":"8209:303:7","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[378],"body":{"id":1808,"nodeType":"Block","src":"8668:230:7","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1783,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1772,"src":"8686:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"id":1785,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1776,"src":"8708:5:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1784,"name":"maxWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1613,"src":"8696:11:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":1786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8696:18:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8686:28:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243343632363a207769746864726177206d6f7265207468616e206d6178","id":1788,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8716:33:7","typeDescriptions":{"typeIdentifier":"t_stringliteral_6d33bd82b6352ef75960e453c6162657943d72f718df3c8a607eeb1427f0aa42","typeString":"literal_string \"ERC4626: withdraw more than max\""},"value":"ERC4626: withdraw more than max"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6d33bd82b6352ef75960e453c6162657943d72f718df3c8a607eeb1427f0aa42","typeString":"literal_string \"ERC4626: withdraw more than max\""}],"id":1782,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8678:7:7","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8678:72:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1790,"nodeType":"ExpressionStatement","src":"8678:72:7"},{"assignments":[1792],"declarations":[{"constant":false,"id":1792,"mutability":"mutable","name":"shares","nameLocation":"8769:6:7","nodeType":"VariableDeclaration","scope":1808,"src":"8761:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1791,"name":"uint256","nodeType":"ElementaryTypeName","src":"8761:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1796,"initialValue":{"arguments":[{"id":1794,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1772,"src":"8794:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1793,"name":"previewWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1678,"src":"8778:15:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":1795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8778:23:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8761:40:7"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":1798,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2798,"src":"8821:10:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8821:12:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1800,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1774,"src":"8835:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1801,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1776,"src":"8845:5:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1802,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1772,"src":"8852:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1803,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1792,"src":"8860:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1797,"name":"_withdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1989,"src":"8811:9:7","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256,uint256)"}},"id":1804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8811:56:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1805,"nodeType":"ExpressionStatement","src":"8811:56:7"},{"expression":{"id":1806,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1792,"src":"8885:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1781,"id":1807,"nodeType":"Return","src":"8878:13:7"}]},"documentation":{"id":1770,"nodeType":"StructuredDocumentation","src":"8518:36:7","text":"@dev See {IERC4626-withdraw}. "},"functionSelector":"b460af94","id":1809,"implemented":true,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"8568:8:7","nodeType":"FunctionDefinition","overrides":{"id":1778,"nodeType":"OverrideSpecifier","overrides":[],"src":"8641:8:7"},"parameters":{"id":1777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1772,"mutability":"mutable","name":"assets","nameLocation":"8585:6:7","nodeType":"VariableDeclaration","scope":1809,"src":"8577:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1771,"name":"uint256","nodeType":"ElementaryTypeName","src":"8577:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1774,"mutability":"mutable","name":"receiver","nameLocation":"8601:8:7","nodeType":"VariableDeclaration","scope":1809,"src":"8593:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1773,"name":"address","nodeType":"ElementaryTypeName","src":"8593:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1776,"mutability":"mutable","name":"owner","nameLocation":"8619:5:7","nodeType":"VariableDeclaration","scope":1809,"src":"8611:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1775,"name":"address","nodeType":"ElementaryTypeName","src":"8611:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8576:49:7"},"returnParameters":{"id":1781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1780,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1809,"src":"8659:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1779,"name":"uint256","nodeType":"ElementaryTypeName","src":"8659:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8658:9:7"},"scope":2003,"src":"8559:339:7","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[406],"body":{"id":1848,"nodeType":"Block","src":"9050:224:7","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1823,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1812,"src":"9068:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"id":1825,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1816,"src":"9088:5:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1824,"name":"maxRedeem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"9078:9:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":1826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9078:16:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9068:26:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243343632363a2072656465656d206d6f7265207468616e206d6178","id":1828,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9096:31:7","typeDescriptions":{"typeIdentifier":"t_stringliteral_3cf75848883fee8cd3a46e6e14bbbd331bc8d0caaef08fbe607c62e5fba35c6d","typeString":"literal_string \"ERC4626: redeem more than max\""},"value":"ERC4626: redeem more than max"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3cf75848883fee8cd3a46e6e14bbbd331bc8d0caaef08fbe607c62e5fba35c6d","typeString":"literal_string \"ERC4626: redeem more than max\""}],"id":1822,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9060:7:7","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9060:68:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1830,"nodeType":"ExpressionStatement","src":"9060:68:7"},{"assignments":[1832],"declarations":[{"constant":false,"id":1832,"mutability":"mutable","name":"assets","nameLocation":"9147:6:7","nodeType":"VariableDeclaration","scope":1848,"src":"9139:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1831,"name":"uint256","nodeType":"ElementaryTypeName","src":"9139:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1836,"initialValue":{"arguments":[{"id":1834,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1812,"src":"9170:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1833,"name":"previewRedeem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1695,"src":"9156:13:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":1835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9156:21:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9139:38:7"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":1838,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2798,"src":"9197:10:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9197:12:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1840,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1814,"src":"9211:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1841,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1816,"src":"9221:5:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1842,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1832,"src":"9228:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1843,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1812,"src":"9236:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1837,"name":"_withdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1989,"src":"9187:9:7","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256,uint256)"}},"id":1844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9187:56:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1845,"nodeType":"ExpressionStatement","src":"9187:56:7"},{"expression":{"id":1846,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1832,"src":"9261:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1821,"id":1847,"nodeType":"Return","src":"9254:13:7"}]},"documentation":{"id":1810,"nodeType":"StructuredDocumentation","src":"8904:34:7","text":"@dev See {IERC4626-redeem}. "},"functionSelector":"ba087652","id":1849,"implemented":true,"kind":"function","modifiers":[],"name":"redeem","nameLocation":"8952:6:7","nodeType":"FunctionDefinition","overrides":{"id":1818,"nodeType":"OverrideSpecifier","overrides":[],"src":"9023:8:7"},"parameters":{"id":1817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1812,"mutability":"mutable","name":"shares","nameLocation":"8967:6:7","nodeType":"VariableDeclaration","scope":1849,"src":"8959:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1811,"name":"uint256","nodeType":"ElementaryTypeName","src":"8959:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1814,"mutability":"mutable","name":"receiver","nameLocation":"8983:8:7","nodeType":"VariableDeclaration","scope":1849,"src":"8975:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1813,"name":"address","nodeType":"ElementaryTypeName","src":"8975:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1816,"mutability":"mutable","name":"owner","nameLocation":"9001:5:7","nodeType":"VariableDeclaration","scope":1849,"src":"8993:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1815,"name":"address","nodeType":"ElementaryTypeName","src":"8993:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8958:49:7"},"returnParameters":{"id":1821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1820,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1849,"src":"9041:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1819,"name":"uint256","nodeType":"ElementaryTypeName","src":"9041:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9040:9:7"},"scope":2003,"src":"8943:331:7","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1876,"nodeType":"Block","src":"9515:107:7","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":1862,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":767,"src":"9546:11:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":1863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9546:13:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":1864,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9562:2:7","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":1865,"name":"_decimalsOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1997,"src":"9568:15:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint8_$","typeString":"function () view returns (uint8)"}},"id":1866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9568:17:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"9562:23:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9546:39:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":1869,"name":"totalAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1528,"src":"9587:11:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":1870,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9587:13:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":1871,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9603:1:7","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9587:17:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1873,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1855,"src":"9606:8:7","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}],"expression":{"id":1860,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1852,"src":"9532:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9539:6:7","memberName":"mulDiv","nodeType":"MemberAccess","referencedDeclaration":3079,"src":"9532:13:7","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$2828_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256,enum MathUpgradeable.Rounding) pure returns (uint256)"}},"id":1874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9532:83:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1859,"id":1875,"nodeType":"Return","src":"9525:90:7"}]},"documentation":{"id":1850,"nodeType":"StructuredDocumentation","src":"9280:113:7","text":" @dev Internal conversion function (from assets to shares) with support for rounding direction."},"id":1877,"implemented":true,"kind":"function","modifiers":[],"name":"_convertToShares","nameLocation":"9407:16:7","nodeType":"FunctionDefinition","parameters":{"id":1856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1852,"mutability":"mutable","name":"assets","nameLocation":"9432:6:7","nodeType":"VariableDeclaration","scope":1877,"src":"9424:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1851,"name":"uint256","nodeType":"ElementaryTypeName","src":"9424:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1855,"mutability":"mutable","name":"rounding","nameLocation":"9465:8:7","nodeType":"VariableDeclaration","scope":1877,"src":"9440:33:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"},"typeName":{"id":1854,"nodeType":"UserDefinedTypeName","pathNode":{"id":1853,"name":"MathUpgradeable.Rounding","nameLocations":["9440:15:7","9456:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":2828,"src":"9440:24:7"},"referencedDeclaration":2828,"src":"9440:24:7","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}},"visibility":"internal"}],"src":"9423:51:7"},"returnParameters":{"id":1859,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1858,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1877,"src":"9506:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1857,"name":"uint256","nodeType":"ElementaryTypeName","src":"9506:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9505:9:7"},"scope":2003,"src":"9398:224:7","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":1904,"nodeType":"Block","src":"9863:107:7","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":1890,"name":"totalAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1528,"src":"9894:11:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":1891,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9894:13:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":1892,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9910:1:7","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9894:17:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":1894,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":767,"src":"9913:11:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":1895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9913:13:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":1896,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9929:2:7","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":1897,"name":"_decimalsOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1997,"src":"9935:15:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint8_$","typeString":"function () view returns (uint8)"}},"id":1898,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9935:17:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"9929:23:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9913:39:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1901,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1883,"src":"9954:8:7","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}],"expression":{"id":1888,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1880,"src":"9880:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9887:6:7","memberName":"mulDiv","nodeType":"MemberAccess","referencedDeclaration":3079,"src":"9880:13:7","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$2828_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256,enum MathUpgradeable.Rounding) pure returns (uint256)"}},"id":1902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9880:83:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1887,"id":1903,"nodeType":"Return","src":"9873:90:7"}]},"documentation":{"id":1878,"nodeType":"StructuredDocumentation","src":"9628:113:7","text":" @dev Internal conversion function (from shares to assets) with support for rounding direction."},"id":1905,"implemented":true,"kind":"function","modifiers":[],"name":"_convertToAssets","nameLocation":"9755:16:7","nodeType":"FunctionDefinition","parameters":{"id":1884,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1880,"mutability":"mutable","name":"shares","nameLocation":"9780:6:7","nodeType":"VariableDeclaration","scope":1905,"src":"9772:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1879,"name":"uint256","nodeType":"ElementaryTypeName","src":"9772:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1883,"mutability":"mutable","name":"rounding","nameLocation":"9813:8:7","nodeType":"VariableDeclaration","scope":1905,"src":"9788:33:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"},"typeName":{"id":1882,"nodeType":"UserDefinedTypeName","pathNode":{"id":1881,"name":"MathUpgradeable.Rounding","nameLocations":["9788:15:7","9804:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":2828,"src":"9788:24:7"},"referencedDeclaration":2828,"src":"9788:24:7","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}},"visibility":"internal"}],"src":"9771:51:7"},"returnParameters":{"id":1887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1886,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1905,"src":"9854:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1885,"name":"uint256","nodeType":"ElementaryTypeName","src":"9854:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9853:9:7"},"scope":2003,"src":"9746:224:7","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":1941,"nodeType":"Block","src":"10135:740:7","statements":[{"expression":{"arguments":[{"id":1920,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1373,"src":"10740:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},{"id":1921,"name":"caller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1908,"src":"10748:6:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":1924,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10764:4:7","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626Upgradeable_$2003","typeString":"contract ERC4626Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626Upgradeable_$2003","typeString":"contract ERC4626Upgradeable"}],"id":1923,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10756:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1922,"name":"address","nodeType":"ElementaryTypeName","src":"10756:7:7","typeDescriptions":{}}},"id":1925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10756:13:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1926,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1912,"src":"10771:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1917,"name":"SafeERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2440,"src":"10702:20:7","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeERC20Upgradeable_$2440_$","typeString":"type(library SafeERC20Upgradeable)"}},"id":1919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10723:16:7","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":2124,"src":"10702:37:7","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$1352_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20Upgradeable,address,address,uint256)"}},"id":1927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10702:76:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1928,"nodeType":"ExpressionStatement","src":"10702:76:7"},{"expression":{"arguments":[{"id":1930,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1910,"src":"10794:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1931,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1914,"src":"10804:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1929,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1086,"src":"10788:5:7","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":1932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10788:23:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1933,"nodeType":"ExpressionStatement","src":"10788:23:7"},{"eventCall":{"arguments":[{"id":1935,"name":"caller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1908,"src":"10835:6:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1936,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1910,"src":"10843:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1937,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1912,"src":"10853:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1938,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1914,"src":"10861:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1934,"name":"Deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":258,"src":"10827:7:7","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":1939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10827:41:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1940,"nodeType":"EmitStatement","src":"10822:46:7"}]},"documentation":{"id":1906,"nodeType":"StructuredDocumentation","src":"9976:53:7","text":" @dev Deposit/mint common workflow."},"id":1942,"implemented":true,"kind":"function","modifiers":[],"name":"_deposit","nameLocation":"10043:8:7","nodeType":"FunctionDefinition","parameters":{"id":1915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1908,"mutability":"mutable","name":"caller","nameLocation":"10060:6:7","nodeType":"VariableDeclaration","scope":1942,"src":"10052:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1907,"name":"address","nodeType":"ElementaryTypeName","src":"10052:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1910,"mutability":"mutable","name":"receiver","nameLocation":"10076:8:7","nodeType":"VariableDeclaration","scope":1942,"src":"10068:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1909,"name":"address","nodeType":"ElementaryTypeName","src":"10068:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1912,"mutability":"mutable","name":"assets","nameLocation":"10094:6:7","nodeType":"VariableDeclaration","scope":1942,"src":"10086:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1911,"name":"uint256","nodeType":"ElementaryTypeName","src":"10086:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1914,"mutability":"mutable","name":"shares","nameLocation":"10110:6:7","nodeType":"VariableDeclaration","scope":1942,"src":"10102:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1913,"name":"uint256","nodeType":"ElementaryTypeName","src":"10102:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10051:66:7"},"returnParameters":{"id":1916,"nodeType":"ParameterList","parameters":[],"src":"10135:0:7"},"scope":2003,"src":"10034:841:7","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1988,"nodeType":"Block","src":"11105:762:7","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1956,"name":"caller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1945,"src":"11119:6:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":1957,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1949,"src":"11129:5:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11119:15:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1966,"nodeType":"IfStatement","src":"11115:84:7","trueBody":{"id":1965,"nodeType":"Block","src":"11136:63:7","statements":[{"expression":{"arguments":[{"id":1960,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1949,"src":"11166:5:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1961,"name":"caller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1945,"src":"11173:6:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1962,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1953,"src":"11181:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1959,"name":"_spendAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1246,"src":"11150:15:7","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11150:38:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1964,"nodeType":"ExpressionStatement","src":"11150:38:7"}]}},{"expression":{"arguments":[{"id":1968,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1949,"src":"11712:5:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1969,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1953,"src":"11719:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1967,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1158,"src":"11706:5:7","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":1970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11706:20:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1971,"nodeType":"ExpressionStatement","src":"11706:20:7"},{"expression":{"arguments":[{"id":1975,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1373,"src":"11770:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},{"id":1976,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1947,"src":"11778:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1977,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1951,"src":"11788:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1972,"name":"SafeERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2440,"src":"11736:20:7","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeERC20Upgradeable_$2440_$","typeString":"type(library SafeERC20Upgradeable)"}},"id":1974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11757:12:7","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":2097,"src":"11736:33:7","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$1352_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20Upgradeable,address,uint256)"}},"id":1978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11736:59:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1979,"nodeType":"ExpressionStatement","src":"11736:59:7"},{"eventCall":{"arguments":[{"id":1981,"name":"caller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1945,"src":"11820:6:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1982,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1947,"src":"11828:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1983,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1949,"src":"11838:5:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1984,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1951,"src":"11845:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1985,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1953,"src":"11853:6:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1980,"name":"Withdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"11811:8:7","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256,uint256)"}},"id":1986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11811:49:7","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1987,"nodeType":"EmitStatement","src":"11806:54:7"}]},"documentation":{"id":1943,"nodeType":"StructuredDocumentation","src":"10881:56:7","text":" @dev Withdraw/redeem common workflow."},"id":1989,"implemented":true,"kind":"function","modifiers":[],"name":"_withdraw","nameLocation":"10951:9:7","nodeType":"FunctionDefinition","parameters":{"id":1954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1945,"mutability":"mutable","name":"caller","nameLocation":"10978:6:7","nodeType":"VariableDeclaration","scope":1989,"src":"10970:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1944,"name":"address","nodeType":"ElementaryTypeName","src":"10970:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1947,"mutability":"mutable","name":"receiver","nameLocation":"11002:8:7","nodeType":"VariableDeclaration","scope":1989,"src":"10994:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1946,"name":"address","nodeType":"ElementaryTypeName","src":"10994:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1949,"mutability":"mutable","name":"owner","nameLocation":"11028:5:7","nodeType":"VariableDeclaration","scope":1989,"src":"11020:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1948,"name":"address","nodeType":"ElementaryTypeName","src":"11020:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1951,"mutability":"mutable","name":"assets","nameLocation":"11051:6:7","nodeType":"VariableDeclaration","scope":1989,"src":"11043:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1950,"name":"uint256","nodeType":"ElementaryTypeName","src":"11043:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1953,"mutability":"mutable","name":"shares","nameLocation":"11075:6:7","nodeType":"VariableDeclaration","scope":1989,"src":"11067:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1952,"name":"uint256","nodeType":"ElementaryTypeName","src":"11067:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10960:127:7"},"returnParameters":{"id":1955,"nodeType":"ParameterList","parameters":[],"src":"11105:0:7"},"scope":2003,"src":"10942:925:7","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1996,"nodeType":"Block","src":"11938:25:7","statements":[{"expression":{"hexValue":"30","id":1994,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11955:1:7","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":1993,"id":1995,"nodeType":"Return","src":"11948:8:7"}]},"id":1997,"implemented":true,"kind":"function","modifiers":[],"name":"_decimalsOffset","nameLocation":"11882:15:7","nodeType":"FunctionDefinition","parameters":{"id":1990,"nodeType":"ParameterList","parameters":[],"src":"11897:2:7"},"returnParameters":{"id":1993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1992,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1997,"src":"11931:5:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1991,"name":"uint8","nodeType":"ElementaryTypeName","src":"11931:5:7","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"11930:7:7"},"scope":2003,"src":"11873:90:7","stateMutability":"view","virtual":true,"visibility":"internal"},{"constant":false,"documentation":{"id":1998,"nodeType":"StructuredDocumentation","src":"11969:254:7","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":2002,"mutability":"mutable","name":"__gap","nameLocation":"12248:5:7","nodeType":"VariableDeclaration","scope":2003,"src":"12228:25:7","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage","typeString":"uint256[49]"},"typeName":{"baseType":{"id":1999,"name":"uint256","nodeType":"ElementaryTypeName","src":"12228:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2001,"length":{"hexValue":"3439","id":2000,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12236:2:7","typeDescriptions":{"typeIdentifier":"t_rational_49_by_1","typeString":"int_const 49"},"value":"49"},"nodeType":"ArrayTypeName","src":"12228:11:7","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage_ptr","typeString":"uint256[49]"}},"visibility":"private"}],"scope":2004,"src":"3219:9037:7","usedErrors":[],"usedEvents":[258,270,422,1286,1295]}],"src":"118:12139:7"},"id":7},"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol","exportedSymbols":{"IERC20MetadataUpgradeable":[2028],"IERC20Upgradeable":[1352]},"id":2029,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2005,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"110:23:8"},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","file":"../IERC20Upgradeable.sol","id":2006,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2029,"sourceUnit":1353,"src":"135:34:8","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2008,"name":"IERC20Upgradeable","nameLocations":["327:17:8"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"327:17:8"},"id":2009,"nodeType":"InheritanceSpecifier","src":"327:17:8"}],"canonicalName":"IERC20MetadataUpgradeable","contractDependencies":[],"contractKind":"interface","documentation":{"id":2007,"nodeType":"StructuredDocumentation","src":"171:116:8","text":" @dev Interface for the optional metadata functions from the ERC20 standard.\n _Available since v4.1._"},"fullyImplemented":false,"id":2028,"linearizedBaseContracts":[2028,1352],"name":"IERC20MetadataUpgradeable","nameLocation":"298:25:8","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2010,"nodeType":"StructuredDocumentation","src":"351:54:8","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":2015,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"419:4:8","nodeType":"FunctionDefinition","parameters":{"id":2011,"nodeType":"ParameterList","parameters":[],"src":"423:2:8"},"returnParameters":{"id":2014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2013,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2015,"src":"449:13:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2012,"name":"string","nodeType":"ElementaryTypeName","src":"449:6:8","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"448:15:8"},"scope":2028,"src":"410:54:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2016,"nodeType":"StructuredDocumentation","src":"470:56:8","text":" @dev Returns the symbol of the token."},"functionSelector":"95d89b41","id":2021,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"540:6:8","nodeType":"FunctionDefinition","parameters":{"id":2017,"nodeType":"ParameterList","parameters":[],"src":"546:2:8"},"returnParameters":{"id":2020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2019,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2021,"src":"572:13:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2018,"name":"string","nodeType":"ElementaryTypeName","src":"572:6:8","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"571:15:8"},"scope":2028,"src":"531:56:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2022,"nodeType":"StructuredDocumentation","src":"593:65:8","text":" @dev Returns the decimals places of the token."},"functionSelector":"313ce567","id":2027,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"672:8:8","nodeType":"FunctionDefinition","parameters":{"id":2023,"nodeType":"ParameterList","parameters":[],"src":"680:2:8"},"returnParameters":{"id":2026,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2025,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2027,"src":"706:5:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":2024,"name":"uint8","nodeType":"ElementaryTypeName","src":"706:5:8","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"705:7:8"},"scope":2028,"src":"663:50:8","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2029,"src":"288:427:8","usedErrors":[],"usedEvents":[1286,1295]}],"src":"110:606:8"},"id":8},"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol","exportedSymbols":{"IERC20PermitUpgradeable":[2064]},"id":2065,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2030,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"123:23:9"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20PermitUpgradeable","contractDependencies":[],"contractKind":"interface","documentation":{"id":2031,"nodeType":"StructuredDocumentation","src":"148:1963:9","text":" @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n need to send a transaction, and thus is not required to hold Ether at all.\n ==== Security Considerations\n There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\n expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\n considered as an intention to spend the allowance in any specific way. The second is that because permits have\n built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\n take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\n generally recommended is:\n ```solidity\n function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\n     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\n     doThing(..., value);\n }\n function doThing(..., uint256 value) public {\n     token.safeTransferFrom(msg.sender, address(this), value);\n     ...\n }\n ```\n Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\n `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\n {SafeERC20-safeTransferFrom}).\n Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\n contracts should have entry points that don't rely on permit."},"fullyImplemented":false,"id":2064,"linearizedBaseContracts":[2064],"name":"IERC20PermitUpgradeable","nameLocation":"2122:23:9","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2032,"nodeType":"StructuredDocumentation","src":"2152:850:9","text":" @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n given ``owner``'s signed approval.\n IMPORTANT: The same issues {IERC20-approve} has related to transaction\n ordering also apply here.\n Emits an {Approval} event.\n Requirements:\n - `spender` cannot be the zero address.\n - `deadline` must be a timestamp in the future.\n - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n over the EIP712-formatted function arguments.\n - the signature must use ``owner``'s current nonce (see {nonces}).\n For more information on the signature format, see the\n https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n section].\n CAUTION: See Security Considerations above."},"functionSelector":"d505accf","id":2049,"implemented":false,"kind":"function","modifiers":[],"name":"permit","nameLocation":"3016:6:9","nodeType":"FunctionDefinition","parameters":{"id":2047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2034,"mutability":"mutable","name":"owner","nameLocation":"3040:5:9","nodeType":"VariableDeclaration","scope":2049,"src":"3032:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2033,"name":"address","nodeType":"ElementaryTypeName","src":"3032:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2036,"mutability":"mutable","name":"spender","nameLocation":"3063:7:9","nodeType":"VariableDeclaration","scope":2049,"src":"3055:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2035,"name":"address","nodeType":"ElementaryTypeName","src":"3055:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2038,"mutability":"mutable","name":"value","nameLocation":"3088:5:9","nodeType":"VariableDeclaration","scope":2049,"src":"3080:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2037,"name":"uint256","nodeType":"ElementaryTypeName","src":"3080:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2040,"mutability":"mutable","name":"deadline","nameLocation":"3111:8:9","nodeType":"VariableDeclaration","scope":2049,"src":"3103:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2039,"name":"uint256","nodeType":"ElementaryTypeName","src":"3103:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2042,"mutability":"mutable","name":"v","nameLocation":"3135:1:9","nodeType":"VariableDeclaration","scope":2049,"src":"3129:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":2041,"name":"uint8","nodeType":"ElementaryTypeName","src":"3129:5:9","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":2044,"mutability":"mutable","name":"r","nameLocation":"3154:1:9","nodeType":"VariableDeclaration","scope":2049,"src":"3146:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2043,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3146:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2046,"mutability":"mutable","name":"s","nameLocation":"3173:1:9","nodeType":"VariableDeclaration","scope":2049,"src":"3165:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2045,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3165:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3022:158:9"},"returnParameters":{"id":2048,"nodeType":"ParameterList","parameters":[],"src":"3189:0:9"},"scope":2064,"src":"3007:183:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2050,"nodeType":"StructuredDocumentation","src":"3196:294:9","text":" @dev Returns the current nonce for `owner`. This value must be\n included whenever a signature is generated for {permit}.\n Every successful call to {permit} increases ``owner``'s nonce by one. This\n prevents a signature from being used multiple times."},"functionSelector":"7ecebe00","id":2057,"implemented":false,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"3504:6:9","nodeType":"FunctionDefinition","parameters":{"id":2053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2052,"mutability":"mutable","name":"owner","nameLocation":"3519:5:9","nodeType":"VariableDeclaration","scope":2057,"src":"3511:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2051,"name":"address","nodeType":"ElementaryTypeName","src":"3511:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3510:15:9"},"returnParameters":{"id":2056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2055,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2057,"src":"3549:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2054,"name":"uint256","nodeType":"ElementaryTypeName","src":"3549:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3548:9:9"},"scope":2064,"src":"3495:63:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2058,"nodeType":"StructuredDocumentation","src":"3564:128:9","text":" @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"functionSelector":"3644e515","id":2063,"implemented":false,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"3759:16:9","nodeType":"FunctionDefinition","parameters":{"id":2059,"nodeType":"ParameterList","parameters":[],"src":"3775:2:9"},"returnParameters":{"id":2062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2061,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2063,"src":"3801:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2060,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3801:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3800:9:9"},"scope":2064,"src":"3750:60:9","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2065,"src":"2112:1700:9","usedErrors":[],"usedEvents":[]}],"src":"123:3690:9"},"id":9},"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol","exportedSymbols":{"AddressUpgradeable":[2770],"IERC20PermitUpgradeable":[2064],"IERC20Upgradeable":[1352],"SafeERC20Upgradeable":[2440]},"id":2441,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2066,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"115:23:10"},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","file":"../IERC20Upgradeable.sol","id":2067,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2441,"sourceUnit":1353,"src":"140:34:10","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol","file":"../extensions/IERC20PermitUpgradeable.sol","id":2068,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2441,"sourceUnit":2065,"src":"175:51:10","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol","file":"../../../utils/AddressUpgradeable.sol","id":2069,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2441,"sourceUnit":2771,"src":"227:47:10","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SafeERC20Upgradeable","contractDependencies":[],"contractKind":"library","documentation":{"id":2070,"nodeType":"StructuredDocumentation","src":"276:457:10","text":" @title SafeERC20\n @dev Wrappers around ERC20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc."},"fullyImplemented":true,"id":2440,"linearizedBaseContracts":[2440],"name":"SafeERC20Upgradeable","nameLocation":"742:20:10","nodeType":"ContractDefinition","nodes":[{"global":false,"id":2073,"libraryName":{"id":2071,"name":"AddressUpgradeable","nameLocations":["775:18:10"],"nodeType":"IdentifierPath","referencedDeclaration":2770,"src":"775:18:10"},"nodeType":"UsingForDirective","src":"769:37:10","typeName":{"id":2072,"name":"address","nodeType":"ElementaryTypeName","src":"798:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"body":{"id":2096,"nodeType":"Block","src":"1079:103:10","statements":[{"expression":{"arguments":[{"id":2085,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2077,"src":"1109:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},{"arguments":[{"expression":{"expression":{"id":2088,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2077,"src":"1139:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":2089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1145:8:10","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":1319,"src":"1139:14:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":2090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1154:8:10","memberName":"selector","nodeType":"MemberAccess","src":"1139:23:10","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":2091,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2079,"src":"1164:2:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2092,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2081,"src":"1168:5:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2086,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1116:3:10","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2087,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1120:18:10","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"1116:22:10","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1116:58:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2084,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2391,"src":"1089:19:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$1352_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20Upgradeable,bytes memory)"}},"id":2094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1089:86:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2095,"nodeType":"ExpressionStatement","src":"1089:86:10"}]},"documentation":{"id":2074,"nodeType":"StructuredDocumentation","src":"812:179:10","text":" @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":2097,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"1005:12:10","nodeType":"FunctionDefinition","parameters":{"id":2082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2077,"mutability":"mutable","name":"token","nameLocation":"1036:5:10","nodeType":"VariableDeclaration","scope":2097,"src":"1018:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":2076,"nodeType":"UserDefinedTypeName","pathNode":{"id":2075,"name":"IERC20Upgradeable","nameLocations":["1018:17:10"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"1018:17:10"},"referencedDeclaration":1352,"src":"1018:17:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"internal"},{"constant":false,"id":2079,"mutability":"mutable","name":"to","nameLocation":"1051:2:10","nodeType":"VariableDeclaration","scope":2097,"src":"1043:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2078,"name":"address","nodeType":"ElementaryTypeName","src":"1043:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2081,"mutability":"mutable","name":"value","nameLocation":"1063:5:10","nodeType":"VariableDeclaration","scope":2097,"src":"1055:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2080,"name":"uint256","nodeType":"ElementaryTypeName","src":"1055:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1017:52:10"},"returnParameters":{"id":2083,"nodeType":"ParameterList","parameters":[],"src":"1079:0:10"},"scope":2440,"src":"996:186:10","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2123,"nodeType":"Block","src":"1522:113:10","statements":[{"expression":{"arguments":[{"id":2111,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2101,"src":"1552:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},{"arguments":[{"expression":{"expression":{"id":2114,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2101,"src":"1582:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":2115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1588:12:10","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":1351,"src":"1582:18:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":2116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1601:8:10","memberName":"selector","nodeType":"MemberAccess","src":"1582:27:10","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":2117,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2103,"src":"1611:4:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2118,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2105,"src":"1617:2:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2119,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2107,"src":"1621:5:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2112,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1559:3:10","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2113,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1563:18:10","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"1559:22:10","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1559:68:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2110,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2391,"src":"1532:19:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$1352_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20Upgradeable,bytes memory)"}},"id":2121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1532:96:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2122,"nodeType":"ExpressionStatement","src":"1532:96:10"}]},"documentation":{"id":2098,"nodeType":"StructuredDocumentation","src":"1188:228:10","text":" @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n calling contract. If `token` returns no value, non-reverting calls are assumed to be successful."},"id":2124,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"1430:16:10","nodeType":"FunctionDefinition","parameters":{"id":2108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2101,"mutability":"mutable","name":"token","nameLocation":"1465:5:10","nodeType":"VariableDeclaration","scope":2124,"src":"1447:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":2100,"nodeType":"UserDefinedTypeName","pathNode":{"id":2099,"name":"IERC20Upgradeable","nameLocations":["1447:17:10"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"1447:17:10"},"referencedDeclaration":1352,"src":"1447:17:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"internal"},{"constant":false,"id":2103,"mutability":"mutable","name":"from","nameLocation":"1480:4:10","nodeType":"VariableDeclaration","scope":2124,"src":"1472:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2102,"name":"address","nodeType":"ElementaryTypeName","src":"1472:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2105,"mutability":"mutable","name":"to","nameLocation":"1494:2:10","nodeType":"VariableDeclaration","scope":2124,"src":"1486:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2104,"name":"address","nodeType":"ElementaryTypeName","src":"1486:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2107,"mutability":"mutable","name":"value","nameLocation":"1506:5:10","nodeType":"VariableDeclaration","scope":2124,"src":"1498:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2106,"name":"uint256","nodeType":"ElementaryTypeName","src":"1498:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1446:66:10"},"returnParameters":{"id":2109,"nodeType":"ParameterList","parameters":[],"src":"1522:0:10"},"scope":2440,"src":"1421:214:10","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2167,"nodeType":"Block","src":"1982:497:10","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2136,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2132,"src":"2231:5:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2240:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2231:10:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2139,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2230:12:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":2144,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2271:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20Upgradeable_$2440","typeString":"library SafeERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20Upgradeable_$2440","typeString":"library SafeERC20Upgradeable"}],"id":2143,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2263:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2142,"name":"address","nodeType":"ElementaryTypeName","src":"2263:7:10","typeDescriptions":{}}},"id":2145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2263:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2146,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2130,"src":"2278:7:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2140,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2128,"src":"2247:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":2141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2253:9:10","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":1329,"src":"2247:15:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":2147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2247:39:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2148,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2290:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2247:44:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2150,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2246:46:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2230:62:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365","id":2152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2306:56:10","typeDescriptions":{"typeIdentifier":"t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25","typeString":"literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""},"value":"SafeERC20: approve from non-zero to non-zero allowance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25","typeString":"literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""}],"id":2135,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2209:7:10","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2209:163:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2154,"nodeType":"ExpressionStatement","src":"2209:163:10"},{"expression":{"arguments":[{"id":2156,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2128,"src":"2402:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},{"arguments":[{"expression":{"expression":{"id":2159,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2128,"src":"2432:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":2160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2438:7:10","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1339,"src":"2432:13:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":2161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2446:8:10","memberName":"selector","nodeType":"MemberAccess","src":"2432:22:10","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":2162,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2130,"src":"2456:7:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2163,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2132,"src":"2465:5:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2157,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2409:3:10","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2158,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2413:18:10","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"2409:22:10","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2409:62:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2155,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2391,"src":"2382:19:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$1352_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20Upgradeable,bytes memory)"}},"id":2165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2382:90:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2166,"nodeType":"ExpressionStatement","src":"2382:90:10"}]},"documentation":{"id":2125,"nodeType":"StructuredDocumentation","src":"1641:249:10","text":" @dev Deprecated. This function has issues similar to the ones found in\n {IERC20-approve}, and its usage is discouraged.\n Whenever possible, use {safeIncreaseAllowance} and\n {safeDecreaseAllowance} instead."},"id":2168,"implemented":true,"kind":"function","modifiers":[],"name":"safeApprove","nameLocation":"1904:11:10","nodeType":"FunctionDefinition","parameters":{"id":2133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2128,"mutability":"mutable","name":"token","nameLocation":"1934:5:10","nodeType":"VariableDeclaration","scope":2168,"src":"1916:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":2127,"nodeType":"UserDefinedTypeName","pathNode":{"id":2126,"name":"IERC20Upgradeable","nameLocations":["1916:17:10"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"1916:17:10"},"referencedDeclaration":1352,"src":"1916:17:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"internal"},{"constant":false,"id":2130,"mutability":"mutable","name":"spender","nameLocation":"1949:7:10","nodeType":"VariableDeclaration","scope":2168,"src":"1941:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2129,"name":"address","nodeType":"ElementaryTypeName","src":"1941:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2132,"mutability":"mutable","name":"value","nameLocation":"1966:5:10","nodeType":"VariableDeclaration","scope":2168,"src":"1958:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2131,"name":"uint256","nodeType":"ElementaryTypeName","src":"1958:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1915:57:10"},"returnParameters":{"id":2134,"nodeType":"ParameterList","parameters":[],"src":"1982:0:10"},"scope":2440,"src":"1895:584:10","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2204,"nodeType":"Block","src":"2767:194:10","statements":[{"assignments":[2180],"declarations":[{"constant":false,"id":2180,"mutability":"mutable","name":"oldAllowance","nameLocation":"2785:12:10","nodeType":"VariableDeclaration","scope":2204,"src":"2777:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2179,"name":"uint256","nodeType":"ElementaryTypeName","src":"2777:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2189,"initialValue":{"arguments":[{"arguments":[{"id":2185,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2824:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20Upgradeable_$2440","typeString":"library SafeERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20Upgradeable_$2440","typeString":"library SafeERC20Upgradeable"}],"id":2184,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2816:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2183,"name":"address","nodeType":"ElementaryTypeName","src":"2816:7:10","typeDescriptions":{}}},"id":2186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2816:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2187,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2174,"src":"2831:7:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2181,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2172,"src":"2800:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":2182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2806:9:10","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":1329,"src":"2800:15:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":2188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2800:39:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2777:62:10"},{"expression":{"arguments":[{"id":2191,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2172,"src":"2869:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},{"arguments":[{"expression":{"expression":{"id":2194,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2172,"src":"2899:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":2195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2905:7:10","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1339,"src":"2899:13:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":2196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2913:8:10","memberName":"selector","nodeType":"MemberAccess","src":"2899:22:10","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":2197,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2174,"src":"2923:7:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2198,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2180,"src":"2932:12:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":2199,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2176,"src":"2947:5:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2932:20:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2192,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2876:3:10","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2193,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2880:18:10","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"2876:22:10","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2876:77:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2190,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2391,"src":"2849:19:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$1352_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20Upgradeable,bytes memory)"}},"id":2202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2849:105:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2203,"nodeType":"ExpressionStatement","src":"2849:105:10"}]},"documentation":{"id":2169,"nodeType":"StructuredDocumentation","src":"2485:180:10","text":" @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":2205,"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nameLocation":"2679:21:10","nodeType":"FunctionDefinition","parameters":{"id":2177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2172,"mutability":"mutable","name":"token","nameLocation":"2719:5:10","nodeType":"VariableDeclaration","scope":2205,"src":"2701:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":2171,"nodeType":"UserDefinedTypeName","pathNode":{"id":2170,"name":"IERC20Upgradeable","nameLocations":["2701:17:10"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"2701:17:10"},"referencedDeclaration":1352,"src":"2701:17:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"internal"},{"constant":false,"id":2174,"mutability":"mutable","name":"spender","nameLocation":"2734:7:10","nodeType":"VariableDeclaration","scope":2205,"src":"2726:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2173,"name":"address","nodeType":"ElementaryTypeName","src":"2726:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2176,"mutability":"mutable","name":"value","nameLocation":"2751:5:10","nodeType":"VariableDeclaration","scope":2205,"src":"2743:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2175,"name":"uint256","nodeType":"ElementaryTypeName","src":"2743:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2700:57:10"},"returnParameters":{"id":2178,"nodeType":"ParameterList","parameters":[],"src":"2767:0:10"},"scope":2440,"src":"2670:291:10","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2249,"nodeType":"Block","src":"3249:321:10","statements":[{"id":2248,"nodeType":"UncheckedBlock","src":"3259:305:10","statements":[{"assignments":[2217],"declarations":[{"constant":false,"id":2217,"mutability":"mutable","name":"oldAllowance","nameLocation":"3291:12:10","nodeType":"VariableDeclaration","scope":2248,"src":"3283:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2216,"name":"uint256","nodeType":"ElementaryTypeName","src":"3283:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2226,"initialValue":{"arguments":[{"arguments":[{"id":2222,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3330:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20Upgradeable_$2440","typeString":"library SafeERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20Upgradeable_$2440","typeString":"library SafeERC20Upgradeable"}],"id":2221,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3322:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2220,"name":"address","nodeType":"ElementaryTypeName","src":"3322:7:10","typeDescriptions":{}}},"id":2223,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3322:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2224,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2211,"src":"3337:7:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2218,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2209,"src":"3306:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":2219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3312:9:10","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":1329,"src":"3306:15:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":2225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3306:39:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3283:62:10"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2228,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2217,"src":"3367:12:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2229,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2213,"src":"3383:5:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3367:21:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5361666545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f","id":2231,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3390:43:10","typeDescriptions":{"typeIdentifier":"t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a","typeString":"literal_string \"SafeERC20: decreased allowance below zero\""},"value":"SafeERC20: decreased allowance below zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a","typeString":"literal_string \"SafeERC20: decreased allowance below zero\""}],"id":2227,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3359:7:10","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3359:75:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2233,"nodeType":"ExpressionStatement","src":"3359:75:10"},{"expression":{"arguments":[{"id":2235,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2209,"src":"3468:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},{"arguments":[{"expression":{"expression":{"id":2238,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2209,"src":"3498:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":2239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3504:7:10","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1339,"src":"3498:13:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":2240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3512:8:10","memberName":"selector","nodeType":"MemberAccess","src":"3498:22:10","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":2241,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2211,"src":"3522:7:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2242,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2217,"src":"3531:12:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":2243,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2213,"src":"3546:5:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3531:20:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2236,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3475:3:10","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2237,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3479:18:10","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"3475:22:10","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3475:77:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2234,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2391,"src":"3448:19:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$1352_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20Upgradeable,bytes memory)"}},"id":2246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3448:105:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2247,"nodeType":"ExpressionStatement","src":"3448:105:10"}]}]},"documentation":{"id":2206,"nodeType":"StructuredDocumentation","src":"2967:180:10","text":" @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":2250,"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nameLocation":"3161:21:10","nodeType":"FunctionDefinition","parameters":{"id":2214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2209,"mutability":"mutable","name":"token","nameLocation":"3201:5:10","nodeType":"VariableDeclaration","scope":2250,"src":"3183:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":2208,"nodeType":"UserDefinedTypeName","pathNode":{"id":2207,"name":"IERC20Upgradeable","nameLocations":["3183:17:10"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"3183:17:10"},"referencedDeclaration":1352,"src":"3183:17:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"internal"},{"constant":false,"id":2211,"mutability":"mutable","name":"spender","nameLocation":"3216:7:10","nodeType":"VariableDeclaration","scope":2250,"src":"3208:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2210,"name":"address","nodeType":"ElementaryTypeName","src":"3208:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2213,"mutability":"mutable","name":"value","nameLocation":"3233:5:10","nodeType":"VariableDeclaration","scope":2250,"src":"3225:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2212,"name":"uint256","nodeType":"ElementaryTypeName","src":"3225:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3182:57:10"},"returnParameters":{"id":2215,"nodeType":"ParameterList","parameters":[],"src":"3249:0:10"},"scope":2440,"src":"3152:418:10","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2296,"nodeType":"Block","src":"3977:333:10","statements":[{"assignments":[2262],"declarations":[{"constant":false,"id":2262,"mutability":"mutable","name":"approvalCall","nameLocation":"4000:12:10","nodeType":"VariableDeclaration","scope":2296,"src":"3987:25:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2261,"name":"bytes","nodeType":"ElementaryTypeName","src":"3987:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2271,"initialValue":{"arguments":[{"expression":{"expression":{"id":2265,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2254,"src":"4038:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":2266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4044:7:10","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1339,"src":"4038:13:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":2267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4052:8:10","memberName":"selector","nodeType":"MemberAccess","src":"4038:22:10","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":2268,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2256,"src":"4062:7:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2269,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2258,"src":"4071:5:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2263,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4015:3:10","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2264,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4019:18:10","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"4015:22:10","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4015:62:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3987:90:10"},{"condition":{"id":2276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4092:45:10","subExpression":{"arguments":[{"id":2273,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2254,"src":"4117:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},{"id":2274,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2262,"src":"4124:12:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2272,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2439,"src":"4093:23:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$1352_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20Upgradeable,bytes memory) returns (bool)"}},"id":2275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4093:44:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2295,"nodeType":"IfStatement","src":"4088:216:10","trueBody":{"id":2294,"nodeType":"Block","src":"4139:165:10","statements":[{"expression":{"arguments":[{"id":2278,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2254,"src":"4173:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},{"arguments":[{"expression":{"expression":{"id":2281,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2254,"src":"4203:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":2282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4209:7:10","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1339,"src":"4203:13:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":2283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4217:8:10","memberName":"selector","nodeType":"MemberAccess","src":"4203:22:10","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":2284,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2256,"src":"4227:7:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":2285,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4236:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":2279,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4180:3:10","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2280,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4184:18:10","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"4180:22:10","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4180:58:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2277,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2391,"src":"4153:19:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$1352_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20Upgradeable,bytes memory)"}},"id":2287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4153:86:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2288,"nodeType":"ExpressionStatement","src":"4153:86:10"},{"expression":{"arguments":[{"id":2290,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2254,"src":"4273:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},{"id":2291,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2262,"src":"4280:12:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2289,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2391,"src":"4253:19:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$1352_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20Upgradeable,bytes memory)"}},"id":2292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4253:40:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2293,"nodeType":"ExpressionStatement","src":"4253:40:10"}]}}]},"documentation":{"id":2251,"nodeType":"StructuredDocumentation","src":"3576:308:10","text":" @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n to be set to zero before setting it to a non-zero value, such as USDT."},"id":2297,"implemented":true,"kind":"function","modifiers":[],"name":"forceApprove","nameLocation":"3898:12:10","nodeType":"FunctionDefinition","parameters":{"id":2259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2254,"mutability":"mutable","name":"token","nameLocation":"3929:5:10","nodeType":"VariableDeclaration","scope":2297,"src":"3911:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":2253,"nodeType":"UserDefinedTypeName","pathNode":{"id":2252,"name":"IERC20Upgradeable","nameLocations":["3911:17:10"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"3911:17:10"},"referencedDeclaration":1352,"src":"3911:17:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"internal"},{"constant":false,"id":2256,"mutability":"mutable","name":"spender","nameLocation":"3944:7:10","nodeType":"VariableDeclaration","scope":2297,"src":"3936:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2255,"name":"address","nodeType":"ElementaryTypeName","src":"3936:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2258,"mutability":"mutable","name":"value","nameLocation":"3961:5:10","nodeType":"VariableDeclaration","scope":2297,"src":"3953:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2257,"name":"uint256","nodeType":"ElementaryTypeName","src":"3953:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3910:57:10"},"returnParameters":{"id":2260,"nodeType":"ParameterList","parameters":[],"src":"3977:0:10"},"scope":2440,"src":"3889:421:10","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2353,"nodeType":"Block","src":"4688:257:10","statements":[{"assignments":[2319],"declarations":[{"constant":false,"id":2319,"mutability":"mutable","name":"nonceBefore","nameLocation":"4706:11:10","nodeType":"VariableDeclaration","scope":2353,"src":"4698:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2318,"name":"uint256","nodeType":"ElementaryTypeName","src":"4698:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2324,"initialValue":{"arguments":[{"id":2322,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2303,"src":"4733:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2320,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2301,"src":"4720:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20PermitUpgradeable_$2064","typeString":"contract IERC20PermitUpgradeable"}},"id":2321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4726:6:10","memberName":"nonces","nodeType":"MemberAccess","referencedDeclaration":2057,"src":"4720:12:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":2323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4720:19:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4698:41:10"},{"expression":{"arguments":[{"id":2328,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2303,"src":"4762:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2329,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2305,"src":"4769:7:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2330,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2307,"src":"4778:5:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2331,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2309,"src":"4785:8:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2332,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2311,"src":"4795:1:10","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":2333,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2313,"src":"4798:1:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2334,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2315,"src":"4801:1:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":2325,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2301,"src":"4749:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20PermitUpgradeable_$2064","typeString":"contract IERC20PermitUpgradeable"}},"id":2327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4755:6:10","memberName":"permit","nodeType":"MemberAccess","referencedDeclaration":2049,"src":"4749:12:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (address,address,uint256,uint256,uint8,bytes32,bytes32) external"}},"id":2335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4749:54:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2336,"nodeType":"ExpressionStatement","src":"4749:54:10"},{"assignments":[2338],"declarations":[{"constant":false,"id":2338,"mutability":"mutable","name":"nonceAfter","nameLocation":"4821:10:10","nodeType":"VariableDeclaration","scope":2353,"src":"4813:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2337,"name":"uint256","nodeType":"ElementaryTypeName","src":"4813:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2343,"initialValue":{"arguments":[{"id":2341,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2303,"src":"4847:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2339,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2301,"src":"4834:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20PermitUpgradeable_$2064","typeString":"contract IERC20PermitUpgradeable"}},"id":2340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4840:6:10","memberName":"nonces","nodeType":"MemberAccess","referencedDeclaration":2057,"src":"4834:12:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":2342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4834:19:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4813:40:10"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2345,"name":"nonceAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2338,"src":"4871:10:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2346,"name":"nonceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"4885:11:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2347,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4899:1:10","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4885:15:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4871:29:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5361666545524332303a207065726d697420646964206e6f742073756363656564","id":2350,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4902:35:10","typeDescriptions":{"typeIdentifier":"t_stringliteral_cde8e927812a7a656f8f04e89ac4f4113d47940dd2125d11fcb8e0bd36bfc59d","typeString":"literal_string \"SafeERC20: permit did not succeed\""},"value":"SafeERC20: permit did not succeed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cde8e927812a7a656f8f04e89ac4f4113d47940dd2125d11fcb8e0bd36bfc59d","typeString":"literal_string \"SafeERC20: permit did not succeed\""}],"id":2344,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4863:7:10","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4863:75:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2352,"nodeType":"ExpressionStatement","src":"4863:75:10"}]},"documentation":{"id":2298,"nodeType":"StructuredDocumentation","src":"4316:141:10","text":" @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.\n Revert on invalid signature."},"id":2354,"implemented":true,"kind":"function","modifiers":[],"name":"safePermit","nameLocation":"4471:10:10","nodeType":"FunctionDefinition","parameters":{"id":2316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2301,"mutability":"mutable","name":"token","nameLocation":"4515:5:10","nodeType":"VariableDeclaration","scope":2354,"src":"4491:29:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20PermitUpgradeable_$2064","typeString":"contract IERC20PermitUpgradeable"},"typeName":{"id":2300,"nodeType":"UserDefinedTypeName","pathNode":{"id":2299,"name":"IERC20PermitUpgradeable","nameLocations":["4491:23:10"],"nodeType":"IdentifierPath","referencedDeclaration":2064,"src":"4491:23:10"},"referencedDeclaration":2064,"src":"4491:23:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20PermitUpgradeable_$2064","typeString":"contract IERC20PermitUpgradeable"}},"visibility":"internal"},{"constant":false,"id":2303,"mutability":"mutable","name":"owner","nameLocation":"4538:5:10","nodeType":"VariableDeclaration","scope":2354,"src":"4530:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2302,"name":"address","nodeType":"ElementaryTypeName","src":"4530:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2305,"mutability":"mutable","name":"spender","nameLocation":"4561:7:10","nodeType":"VariableDeclaration","scope":2354,"src":"4553:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2304,"name":"address","nodeType":"ElementaryTypeName","src":"4553:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2307,"mutability":"mutable","name":"value","nameLocation":"4586:5:10","nodeType":"VariableDeclaration","scope":2354,"src":"4578:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2306,"name":"uint256","nodeType":"ElementaryTypeName","src":"4578:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2309,"mutability":"mutable","name":"deadline","nameLocation":"4609:8:10","nodeType":"VariableDeclaration","scope":2354,"src":"4601:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2308,"name":"uint256","nodeType":"ElementaryTypeName","src":"4601:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2311,"mutability":"mutable","name":"v","nameLocation":"4633:1:10","nodeType":"VariableDeclaration","scope":2354,"src":"4627:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":2310,"name":"uint8","nodeType":"ElementaryTypeName","src":"4627:5:10","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":2313,"mutability":"mutable","name":"r","nameLocation":"4652:1:10","nodeType":"VariableDeclaration","scope":2354,"src":"4644:9:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2312,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4644:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2315,"mutability":"mutable","name":"s","nameLocation":"4671:1:10","nodeType":"VariableDeclaration","scope":2354,"src":"4663:9:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2314,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4663:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4481:197:10"},"returnParameters":{"id":2317,"nodeType":"ParameterList","parameters":[],"src":"4688:0:10"},"scope":2440,"src":"4462:483:10","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2390,"nodeType":"Block","src":"5409:572:10","statements":[{"assignments":[2364],"declarations":[{"constant":false,"id":2364,"mutability":"mutable","name":"returndata","nameLocation":"5771:10:10","nodeType":"VariableDeclaration","scope":2390,"src":"5758:23:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2363,"name":"bytes","nodeType":"ElementaryTypeName","src":"5758:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2373,"initialValue":{"arguments":[{"id":2370,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2360,"src":"5812:4:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564","id":2371,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5818:34:10","typeDescriptions":{"typeIdentifier":"t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b","typeString":"literal_string \"SafeERC20: low-level call failed\""},"value":"SafeERC20: low-level call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b","typeString":"literal_string \"SafeERC20: low-level call failed\""}],"expression":{"arguments":[{"id":2367,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2358,"src":"5792:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}],"id":2366,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5784:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2365,"name":"address","nodeType":"ElementaryTypeName","src":"5784:7:10","typeDescriptions":{}}},"id":2368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5784:14:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5799:12:10","memberName":"functionCall","nodeType":"MemberAccess","referencedDeclaration":2530,"src":"5784:27:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$attached_to$_t_address_$","typeString":"function (address,bytes memory,string memory) returns (bytes memory)"}},"id":2372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5784:69:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"5758:95:10"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2375,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2364,"src":"5871:10:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5882:6:10","memberName":"length","nodeType":"MemberAccess","src":"5871:17:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2377,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5892:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5871:22:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":2381,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2364,"src":"5908:10:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":2383,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5921:4:10","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":2382,"name":"bool","nodeType":"ElementaryTypeName","src":"5921:4:10","typeDescriptions":{}}}],"id":2384,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5920:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":2379,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5897:3:10","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2380,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5901:6:10","memberName":"decode","nodeType":"MemberAccess","src":"5897:10:10","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":2385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5897:30:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5871:56:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564","id":2387,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5929:44:10","typeDescriptions":{"typeIdentifier":"t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd","typeString":"literal_string \"SafeERC20: ERC20 operation did not succeed\""},"value":"SafeERC20: ERC20 operation did not succeed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd","typeString":"literal_string \"SafeERC20: ERC20 operation did not succeed\""}],"id":2374,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5863:7:10","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5863:111:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2389,"nodeType":"ExpressionStatement","src":"5863:111:10"}]},"documentation":{"id":2355,"nodeType":"StructuredDocumentation","src":"4951:372:10","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants)."},"id":2391,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturn","nameLocation":"5337:19:10","nodeType":"FunctionDefinition","parameters":{"id":2361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2358,"mutability":"mutable","name":"token","nameLocation":"5375:5:10","nodeType":"VariableDeclaration","scope":2391,"src":"5357:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":2357,"nodeType":"UserDefinedTypeName","pathNode":{"id":2356,"name":"IERC20Upgradeable","nameLocations":["5357:17:10"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"5357:17:10"},"referencedDeclaration":1352,"src":"5357:17:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"internal"},{"constant":false,"id":2360,"mutability":"mutable","name":"data","nameLocation":"5395:4:10","nodeType":"VariableDeclaration","scope":2391,"src":"5382:17:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2359,"name":"bytes","nodeType":"ElementaryTypeName","src":"5382:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5356:44:10"},"returnParameters":{"id":2362,"nodeType":"ParameterList","parameters":[],"src":"5409:0:10"},"scope":2440,"src":"5328:653:10","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":2438,"nodeType":"Block","src":"6582:516:10","statements":[{"assignments":[2403,2405],"declarations":[{"constant":false,"id":2403,"mutability":"mutable","name":"success","nameLocation":"6883:7:10","nodeType":"VariableDeclaration","scope":2438,"src":"6878:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2402,"name":"bool","nodeType":"ElementaryTypeName","src":"6878:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2405,"mutability":"mutable","name":"returndata","nameLocation":"6905:10:10","nodeType":"VariableDeclaration","scope":2438,"src":"6892:23:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2404,"name":"bytes","nodeType":"ElementaryTypeName","src":"6892:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2413,"initialValue":{"arguments":[{"id":2411,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2397,"src":"6939:4:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":2408,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2395,"src":"6927:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}],"id":2407,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6919:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2406,"name":"address","nodeType":"ElementaryTypeName","src":"6919:7:10","typeDescriptions":{}}},"id":2409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6919:14:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6934:4:10","memberName":"call","nodeType":"MemberAccess","src":"6919:19:10","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6919:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6877:67:10"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2414,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2403,"src":"6973:7:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2415,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2405,"src":"6985:10:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6996:6:10","memberName":"length","nodeType":"MemberAccess","src":"6985:17:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2417,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7006:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6985:22:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":2421,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2405,"src":"7022:10:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":2423,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7035:4:10","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":2422,"name":"bool","nodeType":"ElementaryTypeName","src":"7035:4:10","typeDescriptions":{}}}],"id":2424,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"7034:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":2419,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7011:3:10","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2420,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7015:6:10","memberName":"decode","nodeType":"MemberAccess","src":"7011:10:10","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":2425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7011:30:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6985:56:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2427,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6984:58:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6973:69:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"arguments":[{"arguments":[{"id":2433,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2395,"src":"7084:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}],"id":2432,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7076:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2431,"name":"address","nodeType":"ElementaryTypeName","src":"7076:7:10","typeDescriptions":{}}},"id":2434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7076:14:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2429,"name":"AddressUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2770,"src":"7046:18:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AddressUpgradeable_$2770_$","typeString":"type(library AddressUpgradeable)"}},"id":2430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7065:10:10","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":2458,"src":"7046:29:10","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":2435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7046:45:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6973:118:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2401,"id":2437,"nodeType":"Return","src":"6954:137:10"}]},"documentation":{"id":2392,"nodeType":"StructuredDocumentation","src":"5987:490:10","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead."},"id":2439,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturnBool","nameLocation":"6491:23:10","nodeType":"FunctionDefinition","parameters":{"id":2398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2395,"mutability":"mutable","name":"token","nameLocation":"6533:5:10","nodeType":"VariableDeclaration","scope":2439,"src":"6515:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":2394,"nodeType":"UserDefinedTypeName","pathNode":{"id":2393,"name":"IERC20Upgradeable","nameLocations":["6515:17:10"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"6515:17:10"},"referencedDeclaration":1352,"src":"6515:17:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"internal"},{"constant":false,"id":2397,"mutability":"mutable","name":"data","nameLocation":"6553:4:10","nodeType":"VariableDeclaration","scope":2439,"src":"6540:17:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2396,"name":"bytes","nodeType":"ElementaryTypeName","src":"6540:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6514:44:10"},"returnParameters":{"id":2401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2400,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2439,"src":"6576:4:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2399,"name":"bool","nodeType":"ElementaryTypeName","src":"6576:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6575:6:10"},"scope":2440,"src":"6482:616:10","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":2441,"src":"734:6366:10","usedErrors":[],"usedEvents":[]}],"src":"115:6986:10"},"id":10},"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol","exportedSymbols":{"AddressUpgradeable":[2770]},"id":2771,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2442,"literals":["solidity","^","0.8",".1"],"nodeType":"PragmaDirective","src":"101:23:11"},{"abstract":false,"baseContracts":[],"canonicalName":"AddressUpgradeable","contractDependencies":[],"contractKind":"library","documentation":{"id":2443,"nodeType":"StructuredDocumentation","src":"126:67:11","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":2770,"linearizedBaseContracts":[2770],"name":"AddressUpgradeable","nameLocation":"202:18:11","nodeType":"ContractDefinition","nodes":[{"body":{"id":2457,"nodeType":"Block","src":"1489:254:11","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":2451,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2446,"src":"1713:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1721:4:11","memberName":"code","nodeType":"MemberAccess","src":"1713:12:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1726:6:11","memberName":"length","nodeType":"MemberAccess","src":"1713:19:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2454,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1735:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1713:23:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2450,"id":2456,"nodeType":"Return","src":"1706:30:11"}]},"documentation":{"id":2444,"nodeType":"StructuredDocumentation","src":"227:1191:11","text":" @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n  - an externally-owned account\n  - a contract in construction\n  - an address where a contract will be created\n  - an address where a contract lived, but was destroyed\n Furthermore, `isContract` will also return true if the target contract within\n the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\n which only has an effect at the end of a transaction.\n ====\n [IMPORTANT]\n ====\n You shouldn't rely on `isContract` to protect against flash loan attacks!\n Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n constructor.\n ===="},"id":2458,"implemented":true,"kind":"function","modifiers":[],"name":"isContract","nameLocation":"1432:10:11","nodeType":"FunctionDefinition","parameters":{"id":2447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2446,"mutability":"mutable","name":"account","nameLocation":"1451:7:11","nodeType":"VariableDeclaration","scope":2458,"src":"1443:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2445,"name":"address","nodeType":"ElementaryTypeName","src":"1443:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1442:17:11"},"returnParameters":{"id":2450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2449,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2458,"src":"1483:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2448,"name":"bool","nodeType":"ElementaryTypeName","src":"1483:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1482:6:11"},"scope":2770,"src":"1423:320:11","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2491,"nodeType":"Block","src":"2729:241:11","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":2469,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2755:4:11","typeDescriptions":{"typeIdentifier":"t_contract$_AddressUpgradeable_$2770","typeString":"library AddressUpgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AddressUpgradeable_$2770","typeString":"library AddressUpgradeable"}],"id":2468,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2747:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2467,"name":"address","nodeType":"ElementaryTypeName","src":"2747:7:11","typeDescriptions":{}}},"id":2470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2747:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2761:7:11","memberName":"balance","nodeType":"MemberAccess","src":"2747:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2472,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2463,"src":"2772:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2747:31:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","id":2474,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2780:31:11","typeDescriptions":{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""},"value":"Address: insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""}],"id":2466,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2739:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2739:73:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2476,"nodeType":"ExpressionStatement","src":"2739:73:11"},{"assignments":[2478,null],"declarations":[{"constant":false,"id":2478,"mutability":"mutable","name":"success","nameLocation":"2829:7:11","nodeType":"VariableDeclaration","scope":2491,"src":"2824:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2477,"name":"bool","nodeType":"ElementaryTypeName","src":"2824:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":2485,"initialValue":{"arguments":[{"hexValue":"","id":2483,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2872:2:11","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":2479,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2461,"src":"2842:9:11","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":2480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2852:4:11","memberName":"call","nodeType":"MemberAccess","src":"2842:14:11","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":2481,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2463,"src":"2864:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"2842:29:11","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2842:33:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"2823:52:11"},{"expression":{"arguments":[{"id":2487,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2478,"src":"2893:7:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564","id":2488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2902:60:11","typeDescriptions":{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""},"value":"Address: unable to send value, recipient may have reverted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""}],"id":2486,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2885:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2885:78:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2490,"nodeType":"ExpressionStatement","src":"2885:78:11"}]},"documentation":{"id":2459,"nodeType":"StructuredDocumentation","src":"1749:904:11","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":2492,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"2667:9:11","nodeType":"FunctionDefinition","parameters":{"id":2464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2461,"mutability":"mutable","name":"recipient","nameLocation":"2693:9:11","nodeType":"VariableDeclaration","scope":2492,"src":"2677:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2460,"name":"address","nodeType":"ElementaryTypeName","src":"2677:15:11","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2463,"mutability":"mutable","name":"amount","nameLocation":"2712:6:11","nodeType":"VariableDeclaration","scope":2492,"src":"2704:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2462,"name":"uint256","nodeType":"ElementaryTypeName","src":"2704:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2676:43:11"},"returnParameters":{"id":2465,"nodeType":"ParameterList","parameters":[],"src":"2729:0:11"},"scope":2770,"src":"2658:312:11","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2509,"nodeType":"Block","src":"3801:96:11","statements":[{"expression":{"arguments":[{"id":2503,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2495,"src":"3840:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2504,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2497,"src":"3848:4:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":2505,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3854:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564","id":2506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3857:32:11","typeDescriptions":{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""},"value":"Address: low-level call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""}],"id":2502,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[2550,2594],"referencedDeclaration":2594,"src":"3818:21:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":2507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3818:72:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2501,"id":2508,"nodeType":"Return","src":"3811:79:11"}]},"documentation":{"id":2493,"nodeType":"StructuredDocumentation","src":"2976:731:11","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"},"id":2510,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"3721:12:11","nodeType":"FunctionDefinition","parameters":{"id":2498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2495,"mutability":"mutable","name":"target","nameLocation":"3742:6:11","nodeType":"VariableDeclaration","scope":2510,"src":"3734:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2494,"name":"address","nodeType":"ElementaryTypeName","src":"3734:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2497,"mutability":"mutable","name":"data","nameLocation":"3763:4:11","nodeType":"VariableDeclaration","scope":2510,"src":"3750:17:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2496,"name":"bytes","nodeType":"ElementaryTypeName","src":"3750:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3733:35:11"},"returnParameters":{"id":2501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2500,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2510,"src":"3787:12:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2499,"name":"bytes","nodeType":"ElementaryTypeName","src":"3787:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3786:14:11"},"scope":2770,"src":"3712:185:11","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2529,"nodeType":"Block","src":"4266:76:11","statements":[{"expression":{"arguments":[{"id":2523,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2513,"src":"4305:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2524,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"4313:4:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":2525,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4319:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":2526,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2517,"src":"4322:12:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2522,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[2550,2594],"referencedDeclaration":2594,"src":"4283:21:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":2527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4283:52:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2521,"id":2528,"nodeType":"Return","src":"4276:59:11"}]},"documentation":{"id":2511,"nodeType":"StructuredDocumentation","src":"3903:211:11","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":2530,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"4128:12:11","nodeType":"FunctionDefinition","parameters":{"id":2518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2513,"mutability":"mutable","name":"target","nameLocation":"4158:6:11","nodeType":"VariableDeclaration","scope":2530,"src":"4150:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2512,"name":"address","nodeType":"ElementaryTypeName","src":"4150:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2515,"mutability":"mutable","name":"data","nameLocation":"4187:4:11","nodeType":"VariableDeclaration","scope":2530,"src":"4174:17:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2514,"name":"bytes","nodeType":"ElementaryTypeName","src":"4174:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2517,"mutability":"mutable","name":"errorMessage","nameLocation":"4215:12:11","nodeType":"VariableDeclaration","scope":2530,"src":"4201:26:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2516,"name":"string","nodeType":"ElementaryTypeName","src":"4201:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4140:93:11"},"returnParameters":{"id":2521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2520,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2530,"src":"4252:12:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2519,"name":"bytes","nodeType":"ElementaryTypeName","src":"4252:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4251:14:11"},"scope":2770,"src":"4119:223:11","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2549,"nodeType":"Block","src":"4817:111:11","statements":[{"expression":{"arguments":[{"id":2543,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2533,"src":"4856:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2544,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2535,"src":"4864:4:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2545,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2537,"src":"4870:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564","id":2546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4877:43:11","typeDescriptions":{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""},"value":"Address: low-level call with value failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""}],"id":2542,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[2550,2594],"referencedDeclaration":2594,"src":"4834:21:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":2547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4834:87:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2541,"id":2548,"nodeType":"Return","src":"4827:94:11"}]},"documentation":{"id":2531,"nodeType":"StructuredDocumentation","src":"4348:351:11","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"},"id":2550,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"4713:21:11","nodeType":"FunctionDefinition","parameters":{"id":2538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2533,"mutability":"mutable","name":"target","nameLocation":"4743:6:11","nodeType":"VariableDeclaration","scope":2550,"src":"4735:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2532,"name":"address","nodeType":"ElementaryTypeName","src":"4735:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2535,"mutability":"mutable","name":"data","nameLocation":"4764:4:11","nodeType":"VariableDeclaration","scope":2550,"src":"4751:17:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2534,"name":"bytes","nodeType":"ElementaryTypeName","src":"4751:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2537,"mutability":"mutable","name":"value","nameLocation":"4778:5:11","nodeType":"VariableDeclaration","scope":2550,"src":"4770:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2536,"name":"uint256","nodeType":"ElementaryTypeName","src":"4770:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4734:50:11"},"returnParameters":{"id":2541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2540,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2550,"src":"4803:12:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2539,"name":"bytes","nodeType":"ElementaryTypeName","src":"4803:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4802:14:11"},"scope":2770,"src":"4704:224:11","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2593,"nodeType":"Block","src":"5355:267:11","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":2567,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5381:4:11","typeDescriptions":{"typeIdentifier":"t_contract$_AddressUpgradeable_$2770","typeString":"library AddressUpgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AddressUpgradeable_$2770","typeString":"library AddressUpgradeable"}],"id":2566,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5373:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2565,"name":"address","nodeType":"ElementaryTypeName","src":"5373:7:11","typeDescriptions":{}}},"id":2568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5373:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5387:7:11","memberName":"balance","nodeType":"MemberAccess","src":"5373:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2570,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2557,"src":"5398:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5373:30:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c","id":2572,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5405:40:11","typeDescriptions":{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""},"value":"Address: insufficient balance for call"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""}],"id":2564,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5365:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5365:81:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2574,"nodeType":"ExpressionStatement","src":"5365:81:11"},{"assignments":[2576,2578],"declarations":[{"constant":false,"id":2576,"mutability":"mutable","name":"success","nameLocation":"5462:7:11","nodeType":"VariableDeclaration","scope":2593,"src":"5457:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2575,"name":"bool","nodeType":"ElementaryTypeName","src":"5457:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2578,"mutability":"mutable","name":"returndata","nameLocation":"5484:10:11","nodeType":"VariableDeclaration","scope":2593,"src":"5471:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2577,"name":"bytes","nodeType":"ElementaryTypeName","src":"5471:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2585,"initialValue":{"arguments":[{"id":2583,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2555,"src":"5524:4:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2579,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2553,"src":"5498:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5505:4:11","memberName":"call","nodeType":"MemberAccess","src":"5498:11:11","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":2581,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2557,"src":"5517:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"5498:25:11","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5498:31:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5456:73:11"},{"expression":{"arguments":[{"id":2587,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2553,"src":"5573:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2588,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2576,"src":"5581:7:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":2589,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2578,"src":"5590:10:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2590,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2559,"src":"5602:12:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2586,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2725,"src":"5546:26:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":2591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5546:69:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2563,"id":2592,"nodeType":"Return","src":"5539:76:11"}]},"documentation":{"id":2551,"nodeType":"StructuredDocumentation","src":"4934:237:11","text":" @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":2594,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"5185:21:11","nodeType":"FunctionDefinition","parameters":{"id":2560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2553,"mutability":"mutable","name":"target","nameLocation":"5224:6:11","nodeType":"VariableDeclaration","scope":2594,"src":"5216:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2552,"name":"address","nodeType":"ElementaryTypeName","src":"5216:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2555,"mutability":"mutable","name":"data","nameLocation":"5253:4:11","nodeType":"VariableDeclaration","scope":2594,"src":"5240:17:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2554,"name":"bytes","nodeType":"ElementaryTypeName","src":"5240:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2557,"mutability":"mutable","name":"value","nameLocation":"5275:5:11","nodeType":"VariableDeclaration","scope":2594,"src":"5267:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2556,"name":"uint256","nodeType":"ElementaryTypeName","src":"5267:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2559,"mutability":"mutable","name":"errorMessage","nameLocation":"5304:12:11","nodeType":"VariableDeclaration","scope":2594,"src":"5290:26:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2558,"name":"string","nodeType":"ElementaryTypeName","src":"5290:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5206:116:11"},"returnParameters":{"id":2563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2562,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2594,"src":"5341:12:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2561,"name":"bytes","nodeType":"ElementaryTypeName","src":"5341:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5340:14:11"},"scope":2770,"src":"5176:446:11","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2610,"nodeType":"Block","src":"5899:97:11","statements":[{"expression":{"arguments":[{"id":2605,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2597,"src":"5935:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2606,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2599,"src":"5943:4:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564","id":2607,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5949:39:11","typeDescriptions":{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""},"value":"Address: low-level static call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""}],"id":2604,"name":"functionStaticCall","nodeType":"Identifier","overloadedDeclarations":[2611,2640],"referencedDeclaration":2640,"src":"5916:18:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) view returns (bytes memory)"}},"id":2608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5916:73:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2603,"id":2609,"nodeType":"Return","src":"5909:80:11"}]},"documentation":{"id":2595,"nodeType":"StructuredDocumentation","src":"5628:166:11","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":2611,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"5808:18:11","nodeType":"FunctionDefinition","parameters":{"id":2600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2597,"mutability":"mutable","name":"target","nameLocation":"5835:6:11","nodeType":"VariableDeclaration","scope":2611,"src":"5827:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2596,"name":"address","nodeType":"ElementaryTypeName","src":"5827:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2599,"mutability":"mutable","name":"data","nameLocation":"5856:4:11","nodeType":"VariableDeclaration","scope":2611,"src":"5843:17:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2598,"name":"bytes","nodeType":"ElementaryTypeName","src":"5843:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5826:35:11"},"returnParameters":{"id":2603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2602,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2611,"src":"5885:12:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2601,"name":"bytes","nodeType":"ElementaryTypeName","src":"5885:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5884:14:11"},"scope":2770,"src":"5799:197:11","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2639,"nodeType":"Block","src":"6338:168:11","statements":[{"assignments":[2624,2626],"declarations":[{"constant":false,"id":2624,"mutability":"mutable","name":"success","nameLocation":"6354:7:11","nodeType":"VariableDeclaration","scope":2639,"src":"6349:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2623,"name":"bool","nodeType":"ElementaryTypeName","src":"6349:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2626,"mutability":"mutable","name":"returndata","nameLocation":"6376:10:11","nodeType":"VariableDeclaration","scope":2639,"src":"6363:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2625,"name":"bytes","nodeType":"ElementaryTypeName","src":"6363:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2631,"initialValue":{"arguments":[{"id":2629,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2616,"src":"6408:4:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2627,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2614,"src":"6390:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6397:10:11","memberName":"staticcall","nodeType":"MemberAccess","src":"6390:17:11","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":2630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6390:23:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6348:65:11"},{"expression":{"arguments":[{"id":2633,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2614,"src":"6457:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2634,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2624,"src":"6465:7:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":2635,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2626,"src":"6474:10:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2636,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2618,"src":"6486:12:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2632,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2725,"src":"6430:26:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":2637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6430:69:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2622,"id":2638,"nodeType":"Return","src":"6423:76:11"}]},"documentation":{"id":2612,"nodeType":"StructuredDocumentation","src":"6002:173:11","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":2640,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"6189:18:11","nodeType":"FunctionDefinition","parameters":{"id":2619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2614,"mutability":"mutable","name":"target","nameLocation":"6225:6:11","nodeType":"VariableDeclaration","scope":2640,"src":"6217:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2613,"name":"address","nodeType":"ElementaryTypeName","src":"6217:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2616,"mutability":"mutable","name":"data","nameLocation":"6254:4:11","nodeType":"VariableDeclaration","scope":2640,"src":"6241:17:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2615,"name":"bytes","nodeType":"ElementaryTypeName","src":"6241:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2618,"mutability":"mutable","name":"errorMessage","nameLocation":"6282:12:11","nodeType":"VariableDeclaration","scope":2640,"src":"6268:26:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2617,"name":"string","nodeType":"ElementaryTypeName","src":"6268:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6207:93:11"},"returnParameters":{"id":2622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2621,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2640,"src":"6324:12:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2620,"name":"bytes","nodeType":"ElementaryTypeName","src":"6324:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6323:14:11"},"scope":2770,"src":"6180:326:11","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2656,"nodeType":"Block","src":"6782:101:11","statements":[{"expression":{"arguments":[{"id":2651,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2643,"src":"6820:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2652,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2645,"src":"6828:4:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564","id":2653,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6834:41:11","typeDescriptions":{"typeIdentifier":"t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398","typeString":"literal_string \"Address: low-level delegate call failed\""},"value":"Address: low-level delegate call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398","typeString":"literal_string \"Address: low-level delegate call failed\""}],"id":2650,"name":"functionDelegateCall","nodeType":"Identifier","overloadedDeclarations":[2657,2686],"referencedDeclaration":2686,"src":"6799:20:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) returns (bytes memory)"}},"id":2654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6799:77:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2649,"id":2655,"nodeType":"Return","src":"6792:84:11"}]},"documentation":{"id":2641,"nodeType":"StructuredDocumentation","src":"6512:168:11","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"},"id":2657,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"6694:20:11","nodeType":"FunctionDefinition","parameters":{"id":2646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2643,"mutability":"mutable","name":"target","nameLocation":"6723:6:11","nodeType":"VariableDeclaration","scope":2657,"src":"6715:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2642,"name":"address","nodeType":"ElementaryTypeName","src":"6715:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2645,"mutability":"mutable","name":"data","nameLocation":"6744:4:11","nodeType":"VariableDeclaration","scope":2657,"src":"6731:17:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2644,"name":"bytes","nodeType":"ElementaryTypeName","src":"6731:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6714:35:11"},"returnParameters":{"id":2649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2648,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2657,"src":"6768:12:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2647,"name":"bytes","nodeType":"ElementaryTypeName","src":"6768:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6767:14:11"},"scope":2770,"src":"6685:198:11","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2685,"nodeType":"Block","src":"7224:170:11","statements":[{"assignments":[2670,2672],"declarations":[{"constant":false,"id":2670,"mutability":"mutable","name":"success","nameLocation":"7240:7:11","nodeType":"VariableDeclaration","scope":2685,"src":"7235:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2669,"name":"bool","nodeType":"ElementaryTypeName","src":"7235:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2672,"mutability":"mutable","name":"returndata","nameLocation":"7262:10:11","nodeType":"VariableDeclaration","scope":2685,"src":"7249:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2671,"name":"bytes","nodeType":"ElementaryTypeName","src":"7249:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2677,"initialValue":{"arguments":[{"id":2675,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2662,"src":"7296:4:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2673,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2660,"src":"7276:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7283:12:11","memberName":"delegatecall","nodeType":"MemberAccess","src":"7276:19:11","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":2676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7276:25:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"7234:67:11"},{"expression":{"arguments":[{"id":2679,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2660,"src":"7345:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2680,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2670,"src":"7353:7:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":2681,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2672,"src":"7362:10:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2682,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2664,"src":"7374:12:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2678,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2725,"src":"7318:26:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":2683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7318:69:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2668,"id":2684,"nodeType":"Return","src":"7311:76:11"}]},"documentation":{"id":2658,"nodeType":"StructuredDocumentation","src":"6889:175:11","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"},"id":2686,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"7078:20:11","nodeType":"FunctionDefinition","parameters":{"id":2665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2660,"mutability":"mutable","name":"target","nameLocation":"7116:6:11","nodeType":"VariableDeclaration","scope":2686,"src":"7108:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2659,"name":"address","nodeType":"ElementaryTypeName","src":"7108:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2662,"mutability":"mutable","name":"data","nameLocation":"7145:4:11","nodeType":"VariableDeclaration","scope":2686,"src":"7132:17:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2661,"name":"bytes","nodeType":"ElementaryTypeName","src":"7132:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2664,"mutability":"mutable","name":"errorMessage","nameLocation":"7173:12:11","nodeType":"VariableDeclaration","scope":2686,"src":"7159:26:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2663,"name":"string","nodeType":"ElementaryTypeName","src":"7159:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7098:93:11"},"returnParameters":{"id":2668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2667,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2686,"src":"7210:12:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2666,"name":"bytes","nodeType":"ElementaryTypeName","src":"7210:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7209:14:11"},"scope":2770,"src":"7069:325:11","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2724,"nodeType":"Block","src":"7876:434:11","statements":[{"condition":{"id":2700,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2691,"src":"7890:7:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2722,"nodeType":"Block","src":"8246:58:11","statements":[{"expression":{"arguments":[{"id":2718,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2693,"src":"8268:10:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2719,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2695,"src":"8280:12:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2717,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2769,"src":"8260:7:11","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (bytes memory,string memory) pure"}},"id":2720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8260:33:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2721,"nodeType":"ExpressionStatement","src":"8260:33:11"}]},"id":2723,"nodeType":"IfStatement","src":"7886:418:11","trueBody":{"id":2716,"nodeType":"Block","src":"7899:341:11","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2701,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2693,"src":"7917:10:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7928:6:11","memberName":"length","nodeType":"MemberAccess","src":"7917:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2703,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7938:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7917:22:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2713,"nodeType":"IfStatement","src":"7913:286:11","trueBody":{"id":2712,"nodeType":"Block","src":"7941:258:11","statements":[{"expression":{"arguments":[{"arguments":[{"id":2707,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2689,"src":"8143:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2706,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2458,"src":"8132:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":2708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8132:18:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","id":2709,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8152:31:11","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""},"value":"Address: call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""}],"id":2705,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8124:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8124:60:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2711,"nodeType":"ExpressionStatement","src":"8124:60:11"}]}},{"expression":{"id":2714,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2693,"src":"8219:10:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2699,"id":2715,"nodeType":"Return","src":"8212:17:11"}]}}]},"documentation":{"id":2687,"nodeType":"StructuredDocumentation","src":"7400:277:11","text":" @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n _Available since v4.8._"},"id":2725,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"7691:26:11","nodeType":"FunctionDefinition","parameters":{"id":2696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2689,"mutability":"mutable","name":"target","nameLocation":"7735:6:11","nodeType":"VariableDeclaration","scope":2725,"src":"7727:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2688,"name":"address","nodeType":"ElementaryTypeName","src":"7727:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2691,"mutability":"mutable","name":"success","nameLocation":"7756:7:11","nodeType":"VariableDeclaration","scope":2725,"src":"7751:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2690,"name":"bool","nodeType":"ElementaryTypeName","src":"7751:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2693,"mutability":"mutable","name":"returndata","nameLocation":"7786:10:11","nodeType":"VariableDeclaration","scope":2725,"src":"7773:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2692,"name":"bytes","nodeType":"ElementaryTypeName","src":"7773:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2695,"mutability":"mutable","name":"errorMessage","nameLocation":"7820:12:11","nodeType":"VariableDeclaration","scope":2725,"src":"7806:26:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2694,"name":"string","nodeType":"ElementaryTypeName","src":"7806:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7717:121:11"},"returnParameters":{"id":2699,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2698,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2725,"src":"7862:12:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2697,"name":"bytes","nodeType":"ElementaryTypeName","src":"7862:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7861:14:11"},"scope":2770,"src":"7682:628:11","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2748,"nodeType":"Block","src":"8691:135:11","statements":[{"condition":{"id":2737,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2728,"src":"8705:7:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2746,"nodeType":"Block","src":"8762:58:11","statements":[{"expression":{"arguments":[{"id":2742,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2730,"src":"8784:10:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2743,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2732,"src":"8796:12:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2741,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2769,"src":"8776:7:11","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (bytes memory,string memory) pure"}},"id":2744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8776:33:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2745,"nodeType":"ExpressionStatement","src":"8776:33:11"}]},"id":2747,"nodeType":"IfStatement","src":"8701:119:11","trueBody":{"id":2740,"nodeType":"Block","src":"8714:42:11","statements":[{"expression":{"id":2738,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2730,"src":"8735:10:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2736,"id":2739,"nodeType":"Return","src":"8728:17:11"}]}}]},"documentation":{"id":2726,"nodeType":"StructuredDocumentation","src":"8316:210:11","text":" @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason or using the provided one.\n _Available since v4.3._"},"id":2749,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"8540:16:11","nodeType":"FunctionDefinition","parameters":{"id":2733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2728,"mutability":"mutable","name":"success","nameLocation":"8571:7:11","nodeType":"VariableDeclaration","scope":2749,"src":"8566:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2727,"name":"bool","nodeType":"ElementaryTypeName","src":"8566:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2730,"mutability":"mutable","name":"returndata","nameLocation":"8601:10:11","nodeType":"VariableDeclaration","scope":2749,"src":"8588:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2729,"name":"bytes","nodeType":"ElementaryTypeName","src":"8588:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2732,"mutability":"mutable","name":"errorMessage","nameLocation":"8635:12:11","nodeType":"VariableDeclaration","scope":2749,"src":"8621:26:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2731,"name":"string","nodeType":"ElementaryTypeName","src":"8621:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"8556:97:11"},"returnParameters":{"id":2736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2735,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2749,"src":"8677:12:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2734,"name":"bytes","nodeType":"ElementaryTypeName","src":"8677:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8676:14:11"},"scope":2770,"src":"8531:295:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2768,"nodeType":"Block","src":"8915:457:11","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2756,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2751,"src":"8991:10:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9002:6:11","memberName":"length","nodeType":"MemberAccess","src":"8991:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9011:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8991:21:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2766,"nodeType":"Block","src":"9321:45:11","statements":[{"expression":{"arguments":[{"id":2763,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2753,"src":"9342:12:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2762,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"9335:6:11","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":2764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9335:20:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2765,"nodeType":"ExpressionStatement","src":"9335:20:11"}]},"id":2767,"nodeType":"IfStatement","src":"8987:379:11","trueBody":{"id":2761,"nodeType":"Block","src":"9014:301:11","statements":[{"AST":{"nativeSrc":"9172:133:11","nodeType":"YulBlock","src":"9172:133:11","statements":[{"nativeSrc":"9190:40:11","nodeType":"YulVariableDeclaration","src":"9190:40:11","value":{"arguments":[{"name":"returndata","nativeSrc":"9219:10:11","nodeType":"YulIdentifier","src":"9219:10:11"}],"functionName":{"name":"mload","nativeSrc":"9213:5:11","nodeType":"YulIdentifier","src":"9213:5:11"},"nativeSrc":"9213:17:11","nodeType":"YulFunctionCall","src":"9213:17:11"},"variables":[{"name":"returndata_size","nativeSrc":"9194:15:11","nodeType":"YulTypedName","src":"9194:15:11","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"9258:2:11","nodeType":"YulLiteral","src":"9258:2:11","type":"","value":"32"},{"name":"returndata","nativeSrc":"9262:10:11","nodeType":"YulIdentifier","src":"9262:10:11"}],"functionName":{"name":"add","nativeSrc":"9254:3:11","nodeType":"YulIdentifier","src":"9254:3:11"},"nativeSrc":"9254:19:11","nodeType":"YulFunctionCall","src":"9254:19:11"},{"name":"returndata_size","nativeSrc":"9275:15:11","nodeType":"YulIdentifier","src":"9275:15:11"}],"functionName":{"name":"revert","nativeSrc":"9247:6:11","nodeType":"YulIdentifier","src":"9247:6:11"},"nativeSrc":"9247:44:11","nodeType":"YulFunctionCall","src":"9247:44:11"},"nativeSrc":"9247:44:11","nodeType":"YulExpressionStatement","src":"9247:44:11"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":2751,"isOffset":false,"isSlot":false,"src":"9219:10:11","valueSize":1},{"declaration":2751,"isOffset":false,"isSlot":false,"src":"9262:10:11","valueSize":1}],"id":2760,"nodeType":"InlineAssembly","src":"9163:142:11"}]}}]},"id":2769,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"8841:7:11","nodeType":"FunctionDefinition","parameters":{"id":2754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2751,"mutability":"mutable","name":"returndata","nameLocation":"8862:10:11","nodeType":"VariableDeclaration","scope":2769,"src":"8849:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2750,"name":"bytes","nodeType":"ElementaryTypeName","src":"8849:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2753,"mutability":"mutable","name":"errorMessage","nameLocation":"8888:12:11","nodeType":"VariableDeclaration","scope":2769,"src":"8874:26:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2752,"name":"string","nodeType":"ElementaryTypeName","src":"8874:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"8848:53:11"},"returnParameters":{"id":2755,"nodeType":"ParameterList","parameters":[],"src":"8915:0:11"},"scope":2770,"src":"8832:540:11","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":2771,"src":"194:9180:11","usedErrors":[],"usedEvents":[]}],"src":"101:9274:11"},"id":11},"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol","exportedSymbols":{"ContextUpgradeable":[2821],"Initializable":[576]},"id":2822,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2772,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"101:23:12"},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"../proxy/utils/Initializable.sol","id":2774,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2822,"sourceUnit":577,"src":"125:63:12","symbolAliases":[{"foreign":{"id":2773,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":576,"src":"133:13:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":2776,"name":"Initializable","nameLocations":["727:13:12"],"nodeType":"IdentifierPath","referencedDeclaration":576,"src":"727:13:12"},"id":2777,"nodeType":"InheritanceSpecifier","src":"727:13:12"}],"canonicalName":"ContextUpgradeable","contractDependencies":[],"contractKind":"contract","documentation":{"id":2775,"nodeType":"StructuredDocumentation","src":"190:496:12","text":" @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."},"fullyImplemented":true,"id":2821,"linearizedBaseContracts":[2821,576],"name":"ContextUpgradeable","nameLocation":"705:18:12","nodeType":"ContractDefinition","nodes":[{"body":{"id":2782,"nodeType":"Block","src":"799:7:12","statements":[]},"id":2783,"implemented":true,"kind":"function","modifiers":[{"id":2780,"kind":"modifierInvocation","modifierName":{"id":2779,"name":"onlyInitializing","nameLocations":["782:16:12"],"nodeType":"IdentifierPath","referencedDeclaration":521,"src":"782:16:12"},"nodeType":"ModifierInvocation","src":"782:16:12"}],"name":"__Context_init","nameLocation":"756:14:12","nodeType":"FunctionDefinition","parameters":{"id":2778,"nodeType":"ParameterList","parameters":[],"src":"770:2:12"},"returnParameters":{"id":2781,"nodeType":"ParameterList","parameters":[],"src":"799:0:12"},"scope":2821,"src":"747:59:12","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2788,"nodeType":"Block","src":"874:7:12","statements":[]},"id":2789,"implemented":true,"kind":"function","modifiers":[{"id":2786,"kind":"modifierInvocation","modifierName":{"id":2785,"name":"onlyInitializing","nameLocations":["857:16:12"],"nodeType":"IdentifierPath","referencedDeclaration":521,"src":"857:16:12"},"nodeType":"ModifierInvocation","src":"857:16:12"}],"name":"__Context_init_unchained","nameLocation":"821:24:12","nodeType":"FunctionDefinition","parameters":{"id":2784,"nodeType":"ParameterList","parameters":[],"src":"845:2:12"},"returnParameters":{"id":2787,"nodeType":"ParameterList","parameters":[],"src":"874:0:12"},"scope":2821,"src":"812:69:12","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2797,"nodeType":"Block","src":"948:34:12","statements":[{"expression":{"expression":{"id":2794,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"965:3:12","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"969:6:12","memberName":"sender","nodeType":"MemberAccess","src":"965:10:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":2793,"id":2796,"nodeType":"Return","src":"958:17:12"}]},"id":2798,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"895:10:12","nodeType":"FunctionDefinition","parameters":{"id":2790,"nodeType":"ParameterList","parameters":[],"src":"905:2:12"},"returnParameters":{"id":2793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2792,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2798,"src":"939:7:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2791,"name":"address","nodeType":"ElementaryTypeName","src":"939:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"938:9:12"},"scope":2821,"src":"886:96:12","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":2806,"nodeType":"Block","src":"1055:32:12","statements":[{"expression":{"expression":{"id":2803,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1072:3:12","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1076:4:12","memberName":"data","nodeType":"MemberAccess","src":"1072:8:12","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":2802,"id":2805,"nodeType":"Return","src":"1065:15:12"}]},"id":2807,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"997:8:12","nodeType":"FunctionDefinition","parameters":{"id":2799,"nodeType":"ParameterList","parameters":[],"src":"1005:2:12"},"returnParameters":{"id":2802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2801,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2807,"src":"1039:14:12","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2800,"name":"bytes","nodeType":"ElementaryTypeName","src":"1039:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1038:16:12"},"scope":2821,"src":"988:99:12","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":2814,"nodeType":"Block","src":"1165:25:12","statements":[{"expression":{"hexValue":"30","id":2812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1182:1:12","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":2811,"id":2813,"nodeType":"Return","src":"1175:8:12"}]},"id":2815,"implemented":true,"kind":"function","modifiers":[],"name":"_contextSuffixLength","nameLocation":"1102:20:12","nodeType":"FunctionDefinition","parameters":{"id":2808,"nodeType":"ParameterList","parameters":[],"src":"1122:2:12"},"returnParameters":{"id":2811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2810,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2815,"src":"1156:7:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2809,"name":"uint256","nodeType":"ElementaryTypeName","src":"1156:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1155:9:12"},"scope":2821,"src":"1093:97:12","stateMutability":"view","virtual":true,"visibility":"internal"},{"constant":false,"documentation":{"id":2816,"nodeType":"StructuredDocumentation","src":"1196:254:12","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":2820,"mutability":"mutable","name":"__gap","nameLocation":"1475:5:12","nodeType":"VariableDeclaration","scope":2821,"src":"1455:25:12","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage","typeString":"uint256[50]"},"typeName":{"baseType":{"id":2817,"name":"uint256","nodeType":"ElementaryTypeName","src":"1455:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2819,"length":{"hexValue":"3530","id":2818,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1463:2:12","typeDescriptions":{"typeIdentifier":"t_rational_50_by_1","typeString":"int_const 50"},"value":"50"},"nodeType":"ArrayTypeName","src":"1455:11:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage_ptr","typeString":"uint256[50]"}},"visibility":"private"}],"scope":2822,"src":"687:796:12","usedErrors":[],"usedEvents":[422]}],"src":"101:1383:12"},"id":12},"@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol","exportedSymbols":{"MathUpgradeable":[3687]},"id":3688,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2823,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"103:23:13"},{"abstract":false,"baseContracts":[],"canonicalName":"MathUpgradeable","contractDependencies":[],"contractKind":"library","documentation":{"id":2824,"nodeType":"StructuredDocumentation","src":"128:73:13","text":" @dev Standard math utilities missing in the Solidity language."},"fullyImplemented":true,"id":3687,"linearizedBaseContracts":[3687],"name":"MathUpgradeable","nameLocation":"210:15:13","nodeType":"ContractDefinition","nodes":[{"canonicalName":"MathUpgradeable.Rounding","id":2828,"members":[{"id":2825,"name":"Down","nameLocation":"256:4:13","nodeType":"EnumValue","src":"256:4:13"},{"id":2826,"name":"Up","nameLocation":"298:2:13","nodeType":"EnumValue","src":"298:2:13"},{"id":2827,"name":"Zero","nameLocation":"329:4:13","nodeType":"EnumValue","src":"329:4:13"}],"name":"Rounding","nameLocation":"237:8:13","nodeType":"EnumDefinition","src":"232:122:13"},{"body":{"id":2845,"nodeType":"Block","src":"491:37:13","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2838,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2831,"src":"508:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":2839,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2833,"src":"512:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"508:5:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":2842,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2833,"src":"520:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"508:13:13","trueExpression":{"id":2841,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2831,"src":"516:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2837,"id":2844,"nodeType":"Return","src":"501:20:13"}]},"documentation":{"id":2829,"nodeType":"StructuredDocumentation","src":"360:59:13","text":" @dev Returns the largest of two numbers."},"id":2846,"implemented":true,"kind":"function","modifiers":[],"name":"max","nameLocation":"433:3:13","nodeType":"FunctionDefinition","parameters":{"id":2834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2831,"mutability":"mutable","name":"a","nameLocation":"445:1:13","nodeType":"VariableDeclaration","scope":2846,"src":"437:9:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2830,"name":"uint256","nodeType":"ElementaryTypeName","src":"437:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2833,"mutability":"mutable","name":"b","nameLocation":"456:1:13","nodeType":"VariableDeclaration","scope":2846,"src":"448:9:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2832,"name":"uint256","nodeType":"ElementaryTypeName","src":"448:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"436:22:13"},"returnParameters":{"id":2837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2836,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2846,"src":"482:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2835,"name":"uint256","nodeType":"ElementaryTypeName","src":"482:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"481:9:13"},"scope":3687,"src":"424:104:13","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2863,"nodeType":"Block","src":"666:37:13","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2856,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2849,"src":"683:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":2857,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2851,"src":"687:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"683:5:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":2860,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2851,"src":"695:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"683:13:13","trueExpression":{"id":2859,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2849,"src":"691:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2855,"id":2862,"nodeType":"Return","src":"676:20:13"}]},"documentation":{"id":2847,"nodeType":"StructuredDocumentation","src":"534:60:13","text":" @dev Returns the smallest of two numbers."},"id":2864,"implemented":true,"kind":"function","modifiers":[],"name":"min","nameLocation":"608:3:13","nodeType":"FunctionDefinition","parameters":{"id":2852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2849,"mutability":"mutable","name":"a","nameLocation":"620:1:13","nodeType":"VariableDeclaration","scope":2864,"src":"612:9:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2848,"name":"uint256","nodeType":"ElementaryTypeName","src":"612:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2851,"mutability":"mutable","name":"b","nameLocation":"631:1:13","nodeType":"VariableDeclaration","scope":2864,"src":"623:9:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2850,"name":"uint256","nodeType":"ElementaryTypeName","src":"623:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"611:22:13"},"returnParameters":{"id":2855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2854,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2864,"src":"657:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2853,"name":"uint256","nodeType":"ElementaryTypeName","src":"657:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"656:9:13"},"scope":3687,"src":"599:104:13","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2886,"nodeType":"Block","src":"887:82:13","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2874,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2867,"src":"942:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":2875,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2869,"src":"946:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"942:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2877,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"941:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2878,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2867,"src":"952:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":2879,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2869,"src":"956:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"952:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2881,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"951:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":2882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"961:1:13","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"951:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"941:21:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2873,"id":2885,"nodeType":"Return","src":"934:28:13"}]},"documentation":{"id":2865,"nodeType":"StructuredDocumentation","src":"709:102:13","text":" @dev Returns the average of two numbers. The result is rounded towards\n zero."},"id":2887,"implemented":true,"kind":"function","modifiers":[],"name":"average","nameLocation":"825:7:13","nodeType":"FunctionDefinition","parameters":{"id":2870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2867,"mutability":"mutable","name":"a","nameLocation":"841:1:13","nodeType":"VariableDeclaration","scope":2887,"src":"833:9:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2866,"name":"uint256","nodeType":"ElementaryTypeName","src":"833:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2869,"mutability":"mutable","name":"b","nameLocation":"852:1:13","nodeType":"VariableDeclaration","scope":2887,"src":"844:9:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2868,"name":"uint256","nodeType":"ElementaryTypeName","src":"844:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"832:22:13"},"returnParameters":{"id":2873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2872,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2887,"src":"878:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2871,"name":"uint256","nodeType":"ElementaryTypeName","src":"878:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"877:9:13"},"scope":3687,"src":"816:153:13","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2911,"nodeType":"Block","src":"1239:123:13","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2897,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2890,"src":"1327:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2898,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1332:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1327:6:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2901,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2890,"src":"1341:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2902,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1345:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1341:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2904,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1340:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":2905,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2892,"src":"1350:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1340:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2907,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1354:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1340:15:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"1327:28:13","trueExpression":{"hexValue":"30","id":2900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1336:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2896,"id":2910,"nodeType":"Return","src":"1320:35:13"}]},"documentation":{"id":2888,"nodeType":"StructuredDocumentation","src":"975:188:13","text":" @dev Returns the ceiling of the division of two numbers.\n This differs from standard division with `/` in that it rounds up instead\n of rounding down."},"id":2912,"implemented":true,"kind":"function","modifiers":[],"name":"ceilDiv","nameLocation":"1177:7:13","nodeType":"FunctionDefinition","parameters":{"id":2893,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2890,"mutability":"mutable","name":"a","nameLocation":"1193:1:13","nodeType":"VariableDeclaration","scope":2912,"src":"1185:9:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2889,"name":"uint256","nodeType":"ElementaryTypeName","src":"1185:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2892,"mutability":"mutable","name":"b","nameLocation":"1204:1:13","nodeType":"VariableDeclaration","scope":2912,"src":"1196:9:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2891,"name":"uint256","nodeType":"ElementaryTypeName","src":"1196:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1184:22:13"},"returnParameters":{"id":2896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2895,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2912,"src":"1230:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2894,"name":"uint256","nodeType":"ElementaryTypeName","src":"1230:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1229:9:13"},"scope":3687,"src":"1168:194:13","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3034,"nodeType":"Block","src":"1776:4115:13","statements":[{"id":3033,"nodeType":"UncheckedBlock","src":"1786:4099:13","statements":[{"assignments":[2925],"declarations":[{"constant":false,"id":2925,"mutability":"mutable","name":"prod0","nameLocation":"2115:5:13","nodeType":"VariableDeclaration","scope":3033,"src":"2107:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2924,"name":"uint256","nodeType":"ElementaryTypeName","src":"2107:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2926,"nodeType":"VariableDeclarationStatement","src":"2107:13:13"},{"assignments":[2928],"declarations":[{"constant":false,"id":2928,"mutability":"mutable","name":"prod1","nameLocation":"2187:5:13","nodeType":"VariableDeclaration","scope":3033,"src":"2179:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2927,"name":"uint256","nodeType":"ElementaryTypeName","src":"2179:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2929,"nodeType":"VariableDeclarationStatement","src":"2179:13:13"},{"AST":{"nativeSrc":"2259:157:13","nodeType":"YulBlock","src":"2259:157:13","statements":[{"nativeSrc":"2277:30:13","nodeType":"YulVariableDeclaration","src":"2277:30:13","value":{"arguments":[{"name":"x","nativeSrc":"2294:1:13","nodeType":"YulIdentifier","src":"2294:1:13"},{"name":"y","nativeSrc":"2297:1:13","nodeType":"YulIdentifier","src":"2297:1:13"},{"arguments":[{"kind":"number","nativeSrc":"2304:1:13","nodeType":"YulLiteral","src":"2304:1:13","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"2300:3:13","nodeType":"YulIdentifier","src":"2300:3:13"},"nativeSrc":"2300:6:13","nodeType":"YulFunctionCall","src":"2300:6:13"}],"functionName":{"name":"mulmod","nativeSrc":"2287:6:13","nodeType":"YulIdentifier","src":"2287:6:13"},"nativeSrc":"2287:20:13","nodeType":"YulFunctionCall","src":"2287:20:13"},"variables":[{"name":"mm","nativeSrc":"2281:2:13","nodeType":"YulTypedName","src":"2281:2:13","type":""}]},{"nativeSrc":"2324:18:13","nodeType":"YulAssignment","src":"2324:18:13","value":{"arguments":[{"name":"x","nativeSrc":"2337:1:13","nodeType":"YulIdentifier","src":"2337:1:13"},{"name":"y","nativeSrc":"2340:1:13","nodeType":"YulIdentifier","src":"2340:1:13"}],"functionName":{"name":"mul","nativeSrc":"2333:3:13","nodeType":"YulIdentifier","src":"2333:3:13"},"nativeSrc":"2333:9:13","nodeType":"YulFunctionCall","src":"2333:9:13"},"variableNames":[{"name":"prod0","nativeSrc":"2324:5:13","nodeType":"YulIdentifier","src":"2324:5:13"}]},{"nativeSrc":"2359:43:13","nodeType":"YulAssignment","src":"2359:43:13","value":{"arguments":[{"arguments":[{"name":"mm","nativeSrc":"2376:2:13","nodeType":"YulIdentifier","src":"2376:2:13"},{"name":"prod0","nativeSrc":"2380:5:13","nodeType":"YulIdentifier","src":"2380:5:13"}],"functionName":{"name":"sub","nativeSrc":"2372:3:13","nodeType":"YulIdentifier","src":"2372:3:13"},"nativeSrc":"2372:14:13","nodeType":"YulFunctionCall","src":"2372:14:13"},{"arguments":[{"name":"mm","nativeSrc":"2391:2:13","nodeType":"YulIdentifier","src":"2391:2:13"},{"name":"prod0","nativeSrc":"2395:5:13","nodeType":"YulIdentifier","src":"2395:5:13"}],"functionName":{"name":"lt","nativeSrc":"2388:2:13","nodeType":"YulIdentifier","src":"2388:2:13"},"nativeSrc":"2388:13:13","nodeType":"YulFunctionCall","src":"2388:13:13"}],"functionName":{"name":"sub","nativeSrc":"2368:3:13","nodeType":"YulIdentifier","src":"2368:3:13"},"nativeSrc":"2368:34:13","nodeType":"YulFunctionCall","src":"2368:34:13"},"variableNames":[{"name":"prod1","nativeSrc":"2359:5:13","nodeType":"YulIdentifier","src":"2359:5:13"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":2925,"isOffset":false,"isSlot":false,"src":"2324:5:13","valueSize":1},{"declaration":2925,"isOffset":false,"isSlot":false,"src":"2380:5:13","valueSize":1},{"declaration":2925,"isOffset":false,"isSlot":false,"src":"2395:5:13","valueSize":1},{"declaration":2928,"isOffset":false,"isSlot":false,"src":"2359:5:13","valueSize":1},{"declaration":2915,"isOffset":false,"isSlot":false,"src":"2294:1:13","valueSize":1},{"declaration":2915,"isOffset":false,"isSlot":false,"src":"2337:1:13","valueSize":1},{"declaration":2917,"isOffset":false,"isSlot":false,"src":"2297:1:13","valueSize":1},{"declaration":2917,"isOffset":false,"isSlot":false,"src":"2340:1:13","valueSize":1}],"id":2930,"nodeType":"InlineAssembly","src":"2250:166:13"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2931,"name":"prod1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2928,"src":"2497:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2932,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2506:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2497:10:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2939,"nodeType":"IfStatement","src":"2493:368:13","trueBody":{"id":2938,"nodeType":"Block","src":"2509:352:13","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2934,"name":"prod0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2925,"src":"2827:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":2935,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2919,"src":"2835:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2827:19:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2923,"id":2937,"nodeType":"Return","src":"2820:26:13"}]}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2941,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2919,"src":"2971:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":2942,"name":"prod1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2928,"src":"2985:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2971:19:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d6174683a206d756c446976206f766572666c6f77","id":2944,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2992:23:13","typeDescriptions":{"typeIdentifier":"t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851","typeString":"literal_string \"Math: mulDiv overflow\""},"value":"Math: mulDiv overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851","typeString":"literal_string \"Math: mulDiv overflow\""}],"id":2940,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2963:7:13","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2963:53:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2946,"nodeType":"ExpressionStatement","src":"2963:53:13"},{"assignments":[2948],"declarations":[{"constant":false,"id":2948,"mutability":"mutable","name":"remainder","nameLocation":"3280:9:13","nodeType":"VariableDeclaration","scope":3033,"src":"3272:17:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2947,"name":"uint256","nodeType":"ElementaryTypeName","src":"3272:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2949,"nodeType":"VariableDeclarationStatement","src":"3272:17:13"},{"AST":{"nativeSrc":"3312:291:13","nodeType":"YulBlock","src":"3312:291:13","statements":[{"nativeSrc":"3381:38:13","nodeType":"YulAssignment","src":"3381:38:13","value":{"arguments":[{"name":"x","nativeSrc":"3401:1:13","nodeType":"YulIdentifier","src":"3401:1:13"},{"name":"y","nativeSrc":"3404:1:13","nodeType":"YulIdentifier","src":"3404:1:13"},{"name":"denominator","nativeSrc":"3407:11:13","nodeType":"YulIdentifier","src":"3407:11:13"}],"functionName":{"name":"mulmod","nativeSrc":"3394:6:13","nodeType":"YulIdentifier","src":"3394:6:13"},"nativeSrc":"3394:25:13","nodeType":"YulFunctionCall","src":"3394:25:13"},"variableNames":[{"name":"remainder","nativeSrc":"3381:9:13","nodeType":"YulIdentifier","src":"3381:9:13"}]},{"nativeSrc":"3501:41:13","nodeType":"YulAssignment","src":"3501:41:13","value":{"arguments":[{"name":"prod1","nativeSrc":"3514:5:13","nodeType":"YulIdentifier","src":"3514:5:13"},{"arguments":[{"name":"remainder","nativeSrc":"3524:9:13","nodeType":"YulIdentifier","src":"3524:9:13"},{"name":"prod0","nativeSrc":"3535:5:13","nodeType":"YulIdentifier","src":"3535:5:13"}],"functionName":{"name":"gt","nativeSrc":"3521:2:13","nodeType":"YulIdentifier","src":"3521:2:13"},"nativeSrc":"3521:20:13","nodeType":"YulFunctionCall","src":"3521:20:13"}],"functionName":{"name":"sub","nativeSrc":"3510:3:13","nodeType":"YulIdentifier","src":"3510:3:13"},"nativeSrc":"3510:32:13","nodeType":"YulFunctionCall","src":"3510:32:13"},"variableNames":[{"name":"prod1","nativeSrc":"3501:5:13","nodeType":"YulIdentifier","src":"3501:5:13"}]},{"nativeSrc":"3559:30:13","nodeType":"YulAssignment","src":"3559:30:13","value":{"arguments":[{"name":"prod0","nativeSrc":"3572:5:13","nodeType":"YulIdentifier","src":"3572:5:13"},{"name":"remainder","nativeSrc":"3579:9:13","nodeType":"YulIdentifier","src":"3579:9:13"}],"functionName":{"name":"sub","nativeSrc":"3568:3:13","nodeType":"YulIdentifier","src":"3568:3:13"},"nativeSrc":"3568:21:13","nodeType":"YulFunctionCall","src":"3568:21:13"},"variableNames":[{"name":"prod0","nativeSrc":"3559:5:13","nodeType":"YulIdentifier","src":"3559:5:13"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":2919,"isOffset":false,"isSlot":false,"src":"3407:11:13","valueSize":1},{"declaration":2925,"isOffset":false,"isSlot":false,"src":"3535:5:13","valueSize":1},{"declaration":2925,"isOffset":false,"isSlot":false,"src":"3559:5:13","valueSize":1},{"declaration":2925,"isOffset":false,"isSlot":false,"src":"3572:5:13","valueSize":1},{"declaration":2928,"isOffset":false,"isSlot":false,"src":"3501:5:13","valueSize":1},{"declaration":2928,"isOffset":false,"isSlot":false,"src":"3514:5:13","valueSize":1},{"declaration":2948,"isOffset":false,"isSlot":false,"src":"3381:9:13","valueSize":1},{"declaration":2948,"isOffset":false,"isSlot":false,"src":"3524:9:13","valueSize":1},{"declaration":2948,"isOffset":false,"isSlot":false,"src":"3579:9:13","valueSize":1},{"declaration":2915,"isOffset":false,"isSlot":false,"src":"3401:1:13","valueSize":1},{"declaration":2917,"isOffset":false,"isSlot":false,"src":"3404:1:13","valueSize":1}],"id":2950,"nodeType":"InlineAssembly","src":"3303:300:13"},{"assignments":[2952],"declarations":[{"constant":false,"id":2952,"mutability":"mutable","name":"twos","nameLocation":"3918:4:13","nodeType":"VariableDeclaration","scope":3033,"src":"3910:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2951,"name":"uint256","nodeType":"ElementaryTypeName","src":"3910:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2960,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2953,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2919,"src":"3925:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"3940:12:13","subExpression":{"id":2954,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2919,"src":"3941:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2956,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3955:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3940:16:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2958,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3939:18:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3925:32:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3910:47:13"},{"AST":{"nativeSrc":"3980:362:13","nodeType":"YulBlock","src":"3980:362:13","statements":[{"nativeSrc":"4045:37:13","nodeType":"YulAssignment","src":"4045:37:13","value":{"arguments":[{"name":"denominator","nativeSrc":"4064:11:13","nodeType":"YulIdentifier","src":"4064:11:13"},{"name":"twos","nativeSrc":"4077:4:13","nodeType":"YulIdentifier","src":"4077:4:13"}],"functionName":{"name":"div","nativeSrc":"4060:3:13","nodeType":"YulIdentifier","src":"4060:3:13"},"nativeSrc":"4060:22:13","nodeType":"YulFunctionCall","src":"4060:22:13"},"variableNames":[{"name":"denominator","nativeSrc":"4045:11:13","nodeType":"YulIdentifier","src":"4045:11:13"}]},{"nativeSrc":"4149:25:13","nodeType":"YulAssignment","src":"4149:25:13","value":{"arguments":[{"name":"prod0","nativeSrc":"4162:5:13","nodeType":"YulIdentifier","src":"4162:5:13"},{"name":"twos","nativeSrc":"4169:4:13","nodeType":"YulIdentifier","src":"4169:4:13"}],"functionName":{"name":"div","nativeSrc":"4158:3:13","nodeType":"YulIdentifier","src":"4158:3:13"},"nativeSrc":"4158:16:13","nodeType":"YulFunctionCall","src":"4158:16:13"},"variableNames":[{"name":"prod0","nativeSrc":"4149:5:13","nodeType":"YulIdentifier","src":"4149:5:13"}]},{"nativeSrc":"4289:39:13","nodeType":"YulAssignment","src":"4289:39:13","value":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"4309:1:13","nodeType":"YulLiteral","src":"4309:1:13","type":"","value":"0"},{"name":"twos","nativeSrc":"4312:4:13","nodeType":"YulIdentifier","src":"4312:4:13"}],"functionName":{"name":"sub","nativeSrc":"4305:3:13","nodeType":"YulIdentifier","src":"4305:3:13"},"nativeSrc":"4305:12:13","nodeType":"YulFunctionCall","src":"4305:12:13"},{"name":"twos","nativeSrc":"4319:4:13","nodeType":"YulIdentifier","src":"4319:4:13"}],"functionName":{"name":"div","nativeSrc":"4301:3:13","nodeType":"YulIdentifier","src":"4301:3:13"},"nativeSrc":"4301:23:13","nodeType":"YulFunctionCall","src":"4301:23:13"},{"kind":"number","nativeSrc":"4326:1:13","nodeType":"YulLiteral","src":"4326:1:13","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"4297:3:13","nodeType":"YulIdentifier","src":"4297:3:13"},"nativeSrc":"4297:31:13","nodeType":"YulFunctionCall","src":"4297:31:13"},"variableNames":[{"name":"twos","nativeSrc":"4289:4:13","nodeType":"YulIdentifier","src":"4289:4:13"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":2919,"isOffset":false,"isSlot":false,"src":"4045:11:13","valueSize":1},{"declaration":2919,"isOffset":false,"isSlot":false,"src":"4064:11:13","valueSize":1},{"declaration":2925,"isOffset":false,"isSlot":false,"src":"4149:5:13","valueSize":1},{"declaration":2925,"isOffset":false,"isSlot":false,"src":"4162:5:13","valueSize":1},{"declaration":2952,"isOffset":false,"isSlot":false,"src":"4077:4:13","valueSize":1},{"declaration":2952,"isOffset":false,"isSlot":false,"src":"4169:4:13","valueSize":1},{"declaration":2952,"isOffset":false,"isSlot":false,"src":"4289:4:13","valueSize":1},{"declaration":2952,"isOffset":false,"isSlot":false,"src":"4312:4:13","valueSize":1},{"declaration":2952,"isOffset":false,"isSlot":false,"src":"4319:4:13","valueSize":1}],"id":2961,"nodeType":"InlineAssembly","src":"3971:371:13"},{"expression":{"id":2966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2962,"name":"prod0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2925,"src":"4408:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2963,"name":"prod1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2928,"src":"4417:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2964,"name":"twos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2952,"src":"4425:4:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4417:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4408:21:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2967,"nodeType":"ExpressionStatement","src":"4408:21:13"},{"assignments":[2969],"declarations":[{"constant":false,"id":2969,"mutability":"mutable","name":"inverse","nameLocation":"4755:7:13","nodeType":"VariableDeclaration","scope":3033,"src":"4747:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2968,"name":"uint256","nodeType":"ElementaryTypeName","src":"4747:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2976,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"33","id":2970,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4766:1:13","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2971,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2919,"src":"4770:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4766:15:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2973,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4765:17:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"hexValue":"32","id":2974,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4785:1:13","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4765:21:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4747:39:13"},{"expression":{"id":2983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2977,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2969,"src":"5003:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":2978,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5014:1:13","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2979,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2919,"src":"5018:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2980,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2969,"src":"5032:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5018:21:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5014:25:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5003:36:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2984,"nodeType":"ExpressionStatement","src":"5003:36:13"},{"expression":{"id":2991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2985,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2969,"src":"5072:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":2986,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5083:1:13","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2987,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2919,"src":"5087:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2988,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2969,"src":"5101:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5087:21:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5083:25:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5072:36:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2992,"nodeType":"ExpressionStatement","src":"5072:36:13"},{"expression":{"id":2999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2993,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2969,"src":"5142:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":2994,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5153:1:13","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2995,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2919,"src":"5157:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2996,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2969,"src":"5171:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5157:21:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5153:25:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5142:36:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3000,"nodeType":"ExpressionStatement","src":"5142:36:13"},{"expression":{"id":3007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3001,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2969,"src":"5212:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":3002,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5223:1:13","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3003,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2919,"src":"5227:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3004,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2969,"src":"5241:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5227:21:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5223:25:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5212:36:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3008,"nodeType":"ExpressionStatement","src":"5212:36:13"},{"expression":{"id":3015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3009,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2969,"src":"5282:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":3010,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5293:1:13","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3011,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2919,"src":"5297:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3012,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2969,"src":"5311:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5297:21:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5293:25:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5282:36:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3016,"nodeType":"ExpressionStatement","src":"5282:36:13"},{"expression":{"id":3023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3017,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2969,"src":"5353:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":3018,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5364:1:13","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3019,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2919,"src":"5368:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3020,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2969,"src":"5382:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5368:21:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5364:25:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5353:36:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3024,"nodeType":"ExpressionStatement","src":"5353:36:13"},{"expression":{"id":3029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3025,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2922,"src":"5823:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3026,"name":"prod0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2925,"src":"5832:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3027,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2969,"src":"5840:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5832:15:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5823:24:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3030,"nodeType":"ExpressionStatement","src":"5823:24:13"},{"expression":{"id":3031,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2922,"src":"5868:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2923,"id":3032,"nodeType":"Return","src":"5861:13:13"}]}]},"documentation":{"id":2913,"nodeType":"StructuredDocumentation","src":"1368:305:13","text":" @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n with further edits by Uniswap Labs also under MIT license."},"id":3035,"implemented":true,"kind":"function","modifiers":[],"name":"mulDiv","nameLocation":"1687:6:13","nodeType":"FunctionDefinition","parameters":{"id":2920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2915,"mutability":"mutable","name":"x","nameLocation":"1702:1:13","nodeType":"VariableDeclaration","scope":3035,"src":"1694:9:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2914,"name":"uint256","nodeType":"ElementaryTypeName","src":"1694:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2917,"mutability":"mutable","name":"y","nameLocation":"1713:1:13","nodeType":"VariableDeclaration","scope":3035,"src":"1705:9:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2916,"name":"uint256","nodeType":"ElementaryTypeName","src":"1705:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2919,"mutability":"mutable","name":"denominator","nameLocation":"1724:11:13","nodeType":"VariableDeclaration","scope":3035,"src":"1716:19:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2918,"name":"uint256","nodeType":"ElementaryTypeName","src":"1716:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1693:43:13"},"returnParameters":{"id":2923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2922,"mutability":"mutable","name":"result","nameLocation":"1768:6:13","nodeType":"VariableDeclaration","scope":3035,"src":"1760:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2921,"name":"uint256","nodeType":"ElementaryTypeName","src":"1760:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1759:16:13"},"scope":3687,"src":"1678:4213:13","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3078,"nodeType":"Block","src":"6133:189:13","statements":[{"assignments":[3051],"declarations":[{"constant":false,"id":3051,"mutability":"mutable","name":"result","nameLocation":"6151:6:13","nodeType":"VariableDeclaration","scope":3078,"src":"6143:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3050,"name":"uint256","nodeType":"ElementaryTypeName","src":"6143:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3057,"initialValue":{"arguments":[{"id":3053,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3038,"src":"6167:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3054,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3040,"src":"6170:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3055,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3042,"src":"6173:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3052,"name":"mulDiv","nodeType":"Identifier","overloadedDeclarations":[3035,3079],"referencedDeclaration":3035,"src":"6160:6:13","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":3056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6160:25:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6143:42:13"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"},"id":3061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3058,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3045,"src":"6199:8:13","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":3059,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2828,"src":"6211:8:13","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2828_$","typeString":"type(enum MathUpgradeable.Rounding)"}},"id":3060,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6220:2:13","memberName":"Up","nodeType":"MemberAccess","referencedDeclaration":2826,"src":"6211:11:13","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}},"src":"6199:23:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3063,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3038,"src":"6233:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3064,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3040,"src":"6236:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3065,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3042,"src":"6239:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3062,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"6226:6:13","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":3066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6226:25:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3067,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6254:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6226:29:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6199:56:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3075,"nodeType":"IfStatement","src":"6195:98:13","trueBody":{"id":3074,"nodeType":"Block","src":"6257:36:13","statements":[{"expression":{"id":3072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3070,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3051,"src":"6271:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":3071,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6281:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6271:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3073,"nodeType":"ExpressionStatement","src":"6271:11:13"}]}},{"expression":{"id":3076,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3051,"src":"6309:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3049,"id":3077,"nodeType":"Return","src":"6302:13:13"}]},"documentation":{"id":3036,"nodeType":"StructuredDocumentation","src":"5897:121:13","text":" @notice Calculates x * y / denominator with full precision, following the selected rounding direction."},"id":3079,"implemented":true,"kind":"function","modifiers":[],"name":"mulDiv","nameLocation":"6032:6:13","nodeType":"FunctionDefinition","parameters":{"id":3046,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3038,"mutability":"mutable","name":"x","nameLocation":"6047:1:13","nodeType":"VariableDeclaration","scope":3079,"src":"6039:9:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3037,"name":"uint256","nodeType":"ElementaryTypeName","src":"6039:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3040,"mutability":"mutable","name":"y","nameLocation":"6058:1:13","nodeType":"VariableDeclaration","scope":3079,"src":"6050:9:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3039,"name":"uint256","nodeType":"ElementaryTypeName","src":"6050:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3042,"mutability":"mutable","name":"denominator","nameLocation":"6069:11:13","nodeType":"VariableDeclaration","scope":3079,"src":"6061:19:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3041,"name":"uint256","nodeType":"ElementaryTypeName","src":"6061:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3045,"mutability":"mutable","name":"rounding","nameLocation":"6091:8:13","nodeType":"VariableDeclaration","scope":3079,"src":"6082:17:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"},"typeName":{"id":3044,"nodeType":"UserDefinedTypeName","pathNode":{"id":3043,"name":"Rounding","nameLocations":["6082:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":2828,"src":"6082:8:13"},"referencedDeclaration":2828,"src":"6082:8:13","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}},"visibility":"internal"}],"src":"6038:62:13"},"returnParameters":{"id":3049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3048,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3079,"src":"6124:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3047,"name":"uint256","nodeType":"ElementaryTypeName","src":"6124:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6123:9:13"},"scope":3687,"src":"6023:299:13","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3190,"nodeType":"Block","src":"6598:1585:13","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3087,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3082,"src":"6612:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3088,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6617:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6612:6:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3093,"nodeType":"IfStatement","src":"6608:45:13","trueBody":{"id":3092,"nodeType":"Block","src":"6620:33:13","statements":[{"expression":{"hexValue":"30","id":3090,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6641:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":3086,"id":3091,"nodeType":"Return","src":"6634:8:13"}]}},{"assignments":[3095],"declarations":[{"constant":false,"id":3095,"mutability":"mutable","name":"result","nameLocation":"7340:6:13","nodeType":"VariableDeclaration","scope":3190,"src":"7332:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3094,"name":"uint256","nodeType":"ElementaryTypeName","src":"7332:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3104,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":3096,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7349:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3098,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3082,"src":"7360:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3097,"name":"log2","nodeType":"Identifier","overloadedDeclarations":[3359,3395],"referencedDeclaration":3359,"src":"7355:4:13","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":3099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7355:7:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":3100,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7366:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7355:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3102,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7354:14:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7349:19:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7332:36:13"},{"id":3189,"nodeType":"UncheckedBlock","src":"7769:408:13","statements":[{"expression":{"id":3114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3105,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"7793:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3106,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"7803:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3107,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3082,"src":"7812:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3108,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"7816:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7812:10:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7803:19:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3111,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7802:21:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":3112,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7827:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7802:26:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7793:35:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3115,"nodeType":"ExpressionStatement","src":"7793:35:13"},{"expression":{"id":3125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3116,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"7842:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3117,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"7852:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3118,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3082,"src":"7861:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3119,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"7865:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7861:10:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7852:19:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3122,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7851:21:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":3123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7876:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7851:26:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7842:35:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3126,"nodeType":"ExpressionStatement","src":"7842:35:13"},{"expression":{"id":3136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3127,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"7891:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3128,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"7901:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3129,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3082,"src":"7910:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3130,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"7914:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7910:10:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7901:19:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3133,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7900:21:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":3134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7925:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7900:26:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7891:35:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3137,"nodeType":"ExpressionStatement","src":"7891:35:13"},{"expression":{"id":3147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3138,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"7940:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3139,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"7950:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3140,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3082,"src":"7959:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3141,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"7963:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7959:10:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7950:19:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3144,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7949:21:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":3145,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7974:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7949:26:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7940:35:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3148,"nodeType":"ExpressionStatement","src":"7940:35:13"},{"expression":{"id":3158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3149,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"7989:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3154,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3150,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"7999:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3151,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3082,"src":"8008:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3152,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"8012:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8008:10:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7999:19:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3155,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7998:21:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":3156,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8023:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7998:26:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7989:35:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3159,"nodeType":"ExpressionStatement","src":"7989:35:13"},{"expression":{"id":3169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3160,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"8038:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3161,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"8048:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3162,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3082,"src":"8057:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3163,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"8061:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8057:10:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8048:19:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3166,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8047:21:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":3167,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8072:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8047:26:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8038:35:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3170,"nodeType":"ExpressionStatement","src":"8038:35:13"},{"expression":{"id":3180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3171,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"8087:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3172,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"8097:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3173,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3082,"src":"8106:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3174,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"8110:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8106:10:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8097:19:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3177,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8096:21:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":3178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8121:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8096:26:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8087:35:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3181,"nodeType":"ExpressionStatement","src":"8087:35:13"},{"expression":{"arguments":[{"id":3183,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"8147:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3184,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3082,"src":"8155:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3185,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3095,"src":"8159:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8155:10:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3182,"name":"min","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2864,"src":"8143:3:13","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8143:23:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3086,"id":3188,"nodeType":"Return","src":"8136:30:13"}]}]},"documentation":{"id":3080,"nodeType":"StructuredDocumentation","src":"6328:208:13","text":" @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11)."},"id":3191,"implemented":true,"kind":"function","modifiers":[],"name":"sqrt","nameLocation":"6550:4:13","nodeType":"FunctionDefinition","parameters":{"id":3083,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3082,"mutability":"mutable","name":"a","nameLocation":"6563:1:13","nodeType":"VariableDeclaration","scope":3191,"src":"6555:9:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3081,"name":"uint256","nodeType":"ElementaryTypeName","src":"6555:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6554:11:13"},"returnParameters":{"id":3086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3085,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3191,"src":"6589:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3084,"name":"uint256","nodeType":"ElementaryTypeName","src":"6589:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6588:9:13"},"scope":3687,"src":"6541:1642:13","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3226,"nodeType":"Block","src":"8359:161:13","statements":[{"id":3225,"nodeType":"UncheckedBlock","src":"8369:145:13","statements":[{"assignments":[3203],"declarations":[{"constant":false,"id":3203,"mutability":"mutable","name":"result","nameLocation":"8401:6:13","nodeType":"VariableDeclaration","scope":3225,"src":"8393:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3202,"name":"uint256","nodeType":"ElementaryTypeName","src":"8393:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3207,"initialValue":{"arguments":[{"id":3205,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3194,"src":"8415:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3204,"name":"sqrt","nodeType":"Identifier","overloadedDeclarations":[3191,3227],"referencedDeclaration":3191,"src":"8410:4:13","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":3206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8410:7:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8393:24:13"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3208,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3203,"src":"8438:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"},"id":3212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3209,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3197,"src":"8448:8:13","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":3210,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2828,"src":"8460:8:13","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2828_$","typeString":"type(enum MathUpgradeable.Rounding)"}},"id":3211,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8469:2:13","memberName":"Up","nodeType":"MemberAccess","referencedDeclaration":2826,"src":"8460:11:13","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}},"src":"8448:23:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3213,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3203,"src":"8475:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3214,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3203,"src":"8484:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8475:15:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3216,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3194,"src":"8493:1:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8475:19:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8448:46:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":3220,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8501:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":3221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8448:54:13","trueExpression":{"hexValue":"31","id":3219,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8497:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":3222,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8447:56:13","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8438:65:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3201,"id":3224,"nodeType":"Return","src":"8431:72:13"}]}]},"documentation":{"id":3192,"nodeType":"StructuredDocumentation","src":"8189:89:13","text":" @notice Calculates sqrt(a), following the selected rounding direction."},"id":3227,"implemented":true,"kind":"function","modifiers":[],"name":"sqrt","nameLocation":"8292:4:13","nodeType":"FunctionDefinition","parameters":{"id":3198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3194,"mutability":"mutable","name":"a","nameLocation":"8305:1:13","nodeType":"VariableDeclaration","scope":3227,"src":"8297:9:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3193,"name":"uint256","nodeType":"ElementaryTypeName","src":"8297:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3197,"mutability":"mutable","name":"rounding","nameLocation":"8317:8:13","nodeType":"VariableDeclaration","scope":3227,"src":"8308:17:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"},"typeName":{"id":3196,"nodeType":"UserDefinedTypeName","pathNode":{"id":3195,"name":"Rounding","nameLocations":["8308:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":2828,"src":"8308:8:13"},"referencedDeclaration":2828,"src":"8308:8:13","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}},"visibility":"internal"}],"src":"8296:30:13"},"returnParameters":{"id":3201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3200,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3227,"src":"8350:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3199,"name":"uint256","nodeType":"ElementaryTypeName","src":"8350:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8349:9:13"},"scope":3687,"src":"8283:237:13","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3358,"nodeType":"Block","src":"8705:922:13","statements":[{"assignments":[3236],"declarations":[{"constant":false,"id":3236,"mutability":"mutable","name":"result","nameLocation":"8723:6:13","nodeType":"VariableDeclaration","scope":3358,"src":"8715:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3235,"name":"uint256","nodeType":"ElementaryTypeName","src":"8715:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3238,"initialValue":{"hexValue":"30","id":3237,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8732:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8715:18:13"},{"id":3355,"nodeType":"UncheckedBlock","src":"8743:855:13","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3239,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3230,"src":"8771:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"313238","id":3240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8780:3:13","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"8771:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8786:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8771:16:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3253,"nodeType":"IfStatement","src":"8767:99:13","trueBody":{"id":3252,"nodeType":"Block","src":"8789:77:13","statements":[{"expression":{"id":3246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3244,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3230,"src":"8807:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"313238","id":3245,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8817:3:13","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"8807:13:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3247,"nodeType":"ExpressionStatement","src":"8807:13:13"},{"expression":{"id":3250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3248,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3236,"src":"8838:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"313238","id":3249,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8848:3:13","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"8838:13:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3251,"nodeType":"ExpressionStatement","src":"8838:13:13"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3254,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3230,"src":"8883:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3634","id":3255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8892:2:13","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"8883:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3257,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8897:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8883:15:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3268,"nodeType":"IfStatement","src":"8879:96:13","trueBody":{"id":3267,"nodeType":"Block","src":"8900:75:13","statements":[{"expression":{"id":3261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3259,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3230,"src":"8918:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3634","id":3260,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8928:2:13","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"8918:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3262,"nodeType":"ExpressionStatement","src":"8918:12:13"},{"expression":{"id":3265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3263,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3236,"src":"8948:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3634","id":3264,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8958:2:13","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"8948:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3266,"nodeType":"ExpressionStatement","src":"8948:12:13"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3269,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3230,"src":"8992:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3332","id":3270,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9001:2:13","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"8992:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3272,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9006:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8992:15:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3283,"nodeType":"IfStatement","src":"8988:96:13","trueBody":{"id":3282,"nodeType":"Block","src":"9009:75:13","statements":[{"expression":{"id":3276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3274,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3230,"src":"9027:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3332","id":3275,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9037:2:13","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"9027:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3277,"nodeType":"ExpressionStatement","src":"9027:12:13"},{"expression":{"id":3280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3278,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3236,"src":"9057:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3332","id":3279,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9067:2:13","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"9057:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3281,"nodeType":"ExpressionStatement","src":"9057:12:13"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3284,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3230,"src":"9101:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3136","id":3285,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9110:2:13","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"9101:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3287,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9115:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9101:15:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3298,"nodeType":"IfStatement","src":"9097:96:13","trueBody":{"id":3297,"nodeType":"Block","src":"9118:75:13","statements":[{"expression":{"id":3291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3289,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3230,"src":"9136:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3136","id":3290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9146:2:13","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"9136:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3292,"nodeType":"ExpressionStatement","src":"9136:12:13"},{"expression":{"id":3295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3293,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3236,"src":"9166:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":3294,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9176:2:13","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"9166:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3296,"nodeType":"ExpressionStatement","src":"9166:12:13"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3299,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3230,"src":"9210:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"38","id":3300,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9219:1:13","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"9210:10:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3302,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9223:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9210:14:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3313,"nodeType":"IfStatement","src":"9206:93:13","trueBody":{"id":3312,"nodeType":"Block","src":"9226:73:13","statements":[{"expression":{"id":3306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3304,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3230,"src":"9244:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"38","id":3305,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9254:1:13","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"9244:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3307,"nodeType":"ExpressionStatement","src":"9244:11:13"},{"expression":{"id":3310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3308,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3236,"src":"9273:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"38","id":3309,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9283:1:13","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"9273:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3311,"nodeType":"ExpressionStatement","src":"9273:11:13"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3314,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3230,"src":"9316:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"34","id":3315,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9325:1:13","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"9316:10:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9329:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9316:14:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3328,"nodeType":"IfStatement","src":"9312:93:13","trueBody":{"id":3327,"nodeType":"Block","src":"9332:73:13","statements":[{"expression":{"id":3321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3319,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3230,"src":"9350:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"34","id":3320,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9360:1:13","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"9350:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3322,"nodeType":"ExpressionStatement","src":"9350:11:13"},{"expression":{"id":3325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3323,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3236,"src":"9379:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":3324,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9389:1:13","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"9379:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3326,"nodeType":"ExpressionStatement","src":"9379:11:13"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3329,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3230,"src":"9422:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"32","id":3330,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9431:1:13","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"9422:10:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3332,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9435:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9422:14:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3343,"nodeType":"IfStatement","src":"9418:93:13","trueBody":{"id":3342,"nodeType":"Block","src":"9438:73:13","statements":[{"expression":{"id":3336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3334,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3230,"src":"9456:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"32","id":3335,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9466:1:13","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"9456:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3337,"nodeType":"ExpressionStatement","src":"9456:11:13"},{"expression":{"id":3340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3338,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3236,"src":"9485:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"32","id":3339,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9495:1:13","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"9485:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3341,"nodeType":"ExpressionStatement","src":"9485:11:13"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3344,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3230,"src":"9528:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":3345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9537:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9528:10:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3347,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9541:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9528:14:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3354,"nodeType":"IfStatement","src":"9524:64:13","trueBody":{"id":3353,"nodeType":"Block","src":"9544:44:13","statements":[{"expression":{"id":3351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3349,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3236,"src":"9562:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":3350,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9572:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9562:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3352,"nodeType":"ExpressionStatement","src":"9562:11:13"}]}}]},{"expression":{"id":3356,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3236,"src":"9614:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3234,"id":3357,"nodeType":"Return","src":"9607:13:13"}]},"documentation":{"id":3228,"nodeType":"StructuredDocumentation","src":"8526:113:13","text":" @dev Return the log in base 2, rounded down, of a positive value.\n Returns 0 if given 0."},"id":3359,"implemented":true,"kind":"function","modifiers":[],"name":"log2","nameLocation":"8653:4:13","nodeType":"FunctionDefinition","parameters":{"id":3231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3230,"mutability":"mutable","name":"value","nameLocation":"8666:5:13","nodeType":"VariableDeclaration","scope":3359,"src":"8658:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3229,"name":"uint256","nodeType":"ElementaryTypeName","src":"8658:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8657:15:13"},"returnParameters":{"id":3234,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3233,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3359,"src":"8696:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3232,"name":"uint256","nodeType":"ElementaryTypeName","src":"8696:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8695:9:13"},"scope":3687,"src":"8644:983:13","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3394,"nodeType":"Block","src":"9860:165:13","statements":[{"id":3393,"nodeType":"UncheckedBlock","src":"9870:149:13","statements":[{"assignments":[3371],"declarations":[{"constant":false,"id":3371,"mutability":"mutable","name":"result","nameLocation":"9902:6:13","nodeType":"VariableDeclaration","scope":3393,"src":"9894:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3370,"name":"uint256","nodeType":"ElementaryTypeName","src":"9894:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3375,"initialValue":{"arguments":[{"id":3373,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3362,"src":"9916:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3372,"name":"log2","nodeType":"Identifier","overloadedDeclarations":[3359,3395],"referencedDeclaration":3359,"src":"9911:4:13","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":3374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9911:11:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9894:28:13"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3376,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3371,"src":"9943:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"},"id":3380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3377,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3365,"src":"9953:8:13","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":3378,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2828,"src":"9965:8:13","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2828_$","typeString":"type(enum MathUpgradeable.Rounding)"}},"id":3379,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9974:2:13","memberName":"Up","nodeType":"MemberAccess","referencedDeclaration":2826,"src":"9965:11:13","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}},"src":"9953:23:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":3381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9980:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":3382,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3371,"src":"9985:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9980:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3384,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3362,"src":"9994:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9980:19:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9953:46:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":3388,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10006:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":3389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"9953:54:13","trueExpression":{"hexValue":"31","id":3387,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10002:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":3390,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9952:56:13","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"9943:65:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3369,"id":3392,"nodeType":"Return","src":"9936:72:13"}]}]},"documentation":{"id":3360,"nodeType":"StructuredDocumentation","src":"9633:142:13","text":" @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":3395,"implemented":true,"kind":"function","modifiers":[],"name":"log2","nameLocation":"9789:4:13","nodeType":"FunctionDefinition","parameters":{"id":3366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3362,"mutability":"mutable","name":"value","nameLocation":"9802:5:13","nodeType":"VariableDeclaration","scope":3395,"src":"9794:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3361,"name":"uint256","nodeType":"ElementaryTypeName","src":"9794:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3365,"mutability":"mutable","name":"rounding","nameLocation":"9818:8:13","nodeType":"VariableDeclaration","scope":3395,"src":"9809:17:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"},"typeName":{"id":3364,"nodeType":"UserDefinedTypeName","pathNode":{"id":3363,"name":"Rounding","nameLocations":["9809:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":2828,"src":"9809:8:13"},"referencedDeclaration":2828,"src":"9809:8:13","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}},"visibility":"internal"}],"src":"9793:34:13"},"returnParameters":{"id":3369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3368,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3395,"src":"9851:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3367,"name":"uint256","nodeType":"ElementaryTypeName","src":"9851:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9850:9:13"},"scope":3687,"src":"9780:245:13","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3523,"nodeType":"Block","src":"10212:854:13","statements":[{"assignments":[3404],"declarations":[{"constant":false,"id":3404,"mutability":"mutable","name":"result","nameLocation":"10230:6:13","nodeType":"VariableDeclaration","scope":3523,"src":"10222:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3403,"name":"uint256","nodeType":"ElementaryTypeName","src":"10222:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3406,"initialValue":{"hexValue":"30","id":3405,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10239:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10222:18:13"},{"id":3520,"nodeType":"UncheckedBlock","src":"10250:787:13","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3407,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3398,"src":"10278:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"},"id":3410,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3408,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10287:2:13","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":3409,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10293:2:13","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"10287:8:13","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"}},"src":"10278:17:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3423,"nodeType":"IfStatement","src":"10274:103:13","trueBody":{"id":3422,"nodeType":"Block","src":"10297:80:13","statements":[{"expression":{"id":3416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3412,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3398,"src":"10315:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"},"id":3415,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10324:2:13","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":3414,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10330:2:13","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"10324:8:13","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"}},"src":"10315:17:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3417,"nodeType":"ExpressionStatement","src":"10315:17:13"},{"expression":{"id":3420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3418,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3404,"src":"10350:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3634","id":3419,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10360:2:13","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"10350:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3421,"nodeType":"ExpressionStatement","src":"10350:12:13"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3424,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3398,"src":"10394:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"},"id":3427,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3425,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10403:2:13","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":3426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10409:2:13","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"10403:8:13","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"}},"src":"10394:17:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3440,"nodeType":"IfStatement","src":"10390:103:13","trueBody":{"id":3439,"nodeType":"Block","src":"10413:80:13","statements":[{"expression":{"id":3433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3429,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3398,"src":"10431:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"},"id":3432,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3430,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10440:2:13","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":3431,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10446:2:13","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"10440:8:13","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"}},"src":"10431:17:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3434,"nodeType":"ExpressionStatement","src":"10431:17:13"},{"expression":{"id":3437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3435,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3404,"src":"10466:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3332","id":3436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10476:2:13","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"10466:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3438,"nodeType":"ExpressionStatement","src":"10466:12:13"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3441,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3398,"src":"10510:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"id":3444,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10519:2:13","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":3443,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10525:2:13","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"10519:8:13","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"}},"src":"10510:17:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3457,"nodeType":"IfStatement","src":"10506:103:13","trueBody":{"id":3456,"nodeType":"Block","src":"10529:80:13","statements":[{"expression":{"id":3450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3446,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3398,"src":"10547:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"id":3449,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3447,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10556:2:13","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":3448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10562:2:13","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"10556:8:13","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"}},"src":"10547:17:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3451,"nodeType":"ExpressionStatement","src":"10547:17:13"},{"expression":{"id":3454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3452,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3404,"src":"10582:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":3453,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10592:2:13","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"10582:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3455,"nodeType":"ExpressionStatement","src":"10582:12:13"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3458,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3398,"src":"10626:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":3461,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3459,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10635:2:13","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":3460,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10641:1:13","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"10635:7:13","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"10626:16:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3474,"nodeType":"IfStatement","src":"10622:100:13","trueBody":{"id":3473,"nodeType":"Block","src":"10644:78:13","statements":[{"expression":{"id":3467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3463,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3398,"src":"10662:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":3466,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3464,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10671:2:13","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":3465,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10677:1:13","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"10671:7:13","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"10662:16:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3468,"nodeType":"ExpressionStatement","src":"10662:16:13"},{"expression":{"id":3471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3469,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3404,"src":"10696:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"38","id":3470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10706:1:13","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"10696:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3472,"nodeType":"ExpressionStatement","src":"10696:11:13"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3475,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3398,"src":"10739:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"id":3478,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10748:2:13","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"34","id":3477,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10754:1:13","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"10748:7:13","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"}},"src":"10739:16:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3491,"nodeType":"IfStatement","src":"10735:100:13","trueBody":{"id":3490,"nodeType":"Block","src":"10757:78:13","statements":[{"expression":{"id":3484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3480,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3398,"src":"10775:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"id":3483,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3481,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10784:2:13","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"34","id":3482,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10790:1:13","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"10784:7:13","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"}},"src":"10775:16:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3485,"nodeType":"ExpressionStatement","src":"10775:16:13"},{"expression":{"id":3488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3486,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3404,"src":"10809:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":3487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10819:1:13","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"10809:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3489,"nodeType":"ExpressionStatement","src":"10809:11:13"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3492,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3398,"src":"10852:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"id":3495,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3493,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10861:2:13","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"32","id":3494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10867:1:13","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"10861:7:13","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"}},"src":"10852:16:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3508,"nodeType":"IfStatement","src":"10848:100:13","trueBody":{"id":3507,"nodeType":"Block","src":"10870:78:13","statements":[{"expression":{"id":3501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3497,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3398,"src":"10888:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"id":3500,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3498,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10897:2:13","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"32","id":3499,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10903:1:13","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"10897:7:13","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"}},"src":"10888:16:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3502,"nodeType":"ExpressionStatement","src":"10888:16:13"},{"expression":{"id":3505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3503,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3404,"src":"10922:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"32","id":3504,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10932:1:13","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"10922:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3506,"nodeType":"ExpressionStatement","src":"10922:11:13"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3509,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3398,"src":"10965:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"id":3512,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3510,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10974:2:13","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"31","id":3511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10980:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10974:7:13","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"}},"src":"10965:16:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3519,"nodeType":"IfStatement","src":"10961:66:13","trueBody":{"id":3518,"nodeType":"Block","src":"10983:44:13","statements":[{"expression":{"id":3516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3514,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3404,"src":"11001:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":3515,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11011:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11001:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3517,"nodeType":"ExpressionStatement","src":"11001:11:13"}]}}]},{"expression":{"id":3521,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3404,"src":"11053:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3402,"id":3522,"nodeType":"Return","src":"11046:13:13"}]},"documentation":{"id":3396,"nodeType":"StructuredDocumentation","src":"10031:114:13","text":" @dev Return the log in base 10, rounded down, of a positive value.\n Returns 0 if given 0."},"id":3524,"implemented":true,"kind":"function","modifiers":[],"name":"log10","nameLocation":"10159:5:13","nodeType":"FunctionDefinition","parameters":{"id":3399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3398,"mutability":"mutable","name":"value","nameLocation":"10173:5:13","nodeType":"VariableDeclaration","scope":3524,"src":"10165:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3397,"name":"uint256","nodeType":"ElementaryTypeName","src":"10165:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10164:15:13"},"returnParameters":{"id":3402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3401,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3524,"src":"10203:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3400,"name":"uint256","nodeType":"ElementaryTypeName","src":"10203:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10202:9:13"},"scope":3687,"src":"10150:916:13","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3559,"nodeType":"Block","src":"11301:167:13","statements":[{"id":3558,"nodeType":"UncheckedBlock","src":"11311:151:13","statements":[{"assignments":[3536],"declarations":[{"constant":false,"id":3536,"mutability":"mutable","name":"result","nameLocation":"11343:6:13","nodeType":"VariableDeclaration","scope":3558,"src":"11335:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3535,"name":"uint256","nodeType":"ElementaryTypeName","src":"11335:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3540,"initialValue":{"arguments":[{"id":3538,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3527,"src":"11358:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3537,"name":"log10","nodeType":"Identifier","overloadedDeclarations":[3524,3560],"referencedDeclaration":3524,"src":"11352:5:13","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":3539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11352:12:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11335:29:13"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3541,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3536,"src":"11385:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"},"id":3545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3542,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3530,"src":"11395:8:13","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":3543,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2828,"src":"11407:8:13","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2828_$","typeString":"type(enum MathUpgradeable.Rounding)"}},"id":3544,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11416:2:13","memberName":"Up","nodeType":"MemberAccess","referencedDeclaration":2826,"src":"11407:11:13","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}},"src":"11395:23:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11422:2:13","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":3547,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3536,"src":"11428:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11422:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3549,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3527,"src":"11437:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11422:20:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11395:47:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":3553,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11449:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":3554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11395:55:13","trueExpression":{"hexValue":"31","id":3552,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11445:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":3555,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11394:57:13","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11385:66:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3534,"id":3557,"nodeType":"Return","src":"11378:73:13"}]}]},"documentation":{"id":3525,"nodeType":"StructuredDocumentation","src":"11072:143:13","text":" @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":3560,"implemented":true,"kind":"function","modifiers":[],"name":"log10","nameLocation":"11229:5:13","nodeType":"FunctionDefinition","parameters":{"id":3531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3527,"mutability":"mutable","name":"value","nameLocation":"11243:5:13","nodeType":"VariableDeclaration","scope":3560,"src":"11235:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3526,"name":"uint256","nodeType":"ElementaryTypeName","src":"11235:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3530,"mutability":"mutable","name":"rounding","nameLocation":"11259:8:13","nodeType":"VariableDeclaration","scope":3560,"src":"11250:17:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"},"typeName":{"id":3529,"nodeType":"UserDefinedTypeName","pathNode":{"id":3528,"name":"Rounding","nameLocations":["11250:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":2828,"src":"11250:8:13"},"referencedDeclaration":2828,"src":"11250:8:13","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}},"visibility":"internal"}],"src":"11234:34:13"},"returnParameters":{"id":3534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3533,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3560,"src":"11292:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3532,"name":"uint256","nodeType":"ElementaryTypeName","src":"11292:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11291:9:13"},"scope":3687,"src":"11220:248:13","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3646,"nodeType":"Block","src":"11782:600:13","statements":[{"assignments":[3569],"declarations":[{"constant":false,"id":3569,"mutability":"mutable","name":"result","nameLocation":"11800:6:13","nodeType":"VariableDeclaration","scope":3646,"src":"11792:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3568,"name":"uint256","nodeType":"ElementaryTypeName","src":"11792:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3571,"initialValue":{"hexValue":"30","id":3570,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11809:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11792:18:13"},{"id":3643,"nodeType":"UncheckedBlock","src":"11820:533:13","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3572,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"11848:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"313238","id":3573,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11857:3:13","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"11848:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11863:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11848:16:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3586,"nodeType":"IfStatement","src":"11844:98:13","trueBody":{"id":3585,"nodeType":"Block","src":"11866:76:13","statements":[{"expression":{"id":3579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3577,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"11884:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"313238","id":3578,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11894:3:13","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"11884:13:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3580,"nodeType":"ExpressionStatement","src":"11884:13:13"},{"expression":{"id":3583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3581,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3569,"src":"11915:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":3582,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11925:2:13","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"11915:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3584,"nodeType":"ExpressionStatement","src":"11915:12:13"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3587,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"11959:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3634","id":3588,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11968:2:13","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"11959:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3590,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11973:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11959:15:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3601,"nodeType":"IfStatement","src":"11955:95:13","trueBody":{"id":3600,"nodeType":"Block","src":"11976:74:13","statements":[{"expression":{"id":3594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3592,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"11994:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3634","id":3593,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12004:2:13","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"11994:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3595,"nodeType":"ExpressionStatement","src":"11994:12:13"},{"expression":{"id":3598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3596,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3569,"src":"12024:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"38","id":3597,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12034:1:13","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12024:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3599,"nodeType":"ExpressionStatement","src":"12024:11:13"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3602,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"12067:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3332","id":3603,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12076:2:13","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"12067:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3605,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12081:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12067:15:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3616,"nodeType":"IfStatement","src":"12063:95:13","trueBody":{"id":3615,"nodeType":"Block","src":"12084:74:13","statements":[{"expression":{"id":3609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3607,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"12102:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3332","id":3608,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12112:2:13","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"12102:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3610,"nodeType":"ExpressionStatement","src":"12102:12:13"},{"expression":{"id":3613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3611,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3569,"src":"12132:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":3612,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12142:1:13","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"12132:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3614,"nodeType":"ExpressionStatement","src":"12132:11:13"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3617,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"12175:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3136","id":3618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12184:2:13","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"12175:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3620,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12189:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12175:15:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3631,"nodeType":"IfStatement","src":"12171:95:13","trueBody":{"id":3630,"nodeType":"Block","src":"12192:74:13","statements":[{"expression":{"id":3624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3622,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"12210:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3136","id":3623,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12220:2:13","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"12210:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3625,"nodeType":"ExpressionStatement","src":"12210:12:13"},{"expression":{"id":3628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3626,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3569,"src":"12240:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"32","id":3627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12250:1:13","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"12240:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3629,"nodeType":"ExpressionStatement","src":"12240:11:13"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3632,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"12283:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"38","id":3633,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12292:1:13","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12283:10:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3635,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12296:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12283:14:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3642,"nodeType":"IfStatement","src":"12279:64:13","trueBody":{"id":3641,"nodeType":"Block","src":"12299:44:13","statements":[{"expression":{"id":3639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3637,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3569,"src":"12317:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":3638,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12327:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12317:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3640,"nodeType":"ExpressionStatement","src":"12317:11:13"}]}}]},{"expression":{"id":3644,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3569,"src":"12369:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3567,"id":3645,"nodeType":"Return","src":"12362:13:13"}]},"documentation":{"id":3561,"nodeType":"StructuredDocumentation","src":"11474:240:13","text":" @dev Return the log in base 256, rounded down, of a positive value.\n Returns 0 if given 0.\n Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string."},"id":3647,"implemented":true,"kind":"function","modifiers":[],"name":"log256","nameLocation":"11728:6:13","nodeType":"FunctionDefinition","parameters":{"id":3564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3563,"mutability":"mutable","name":"value","nameLocation":"11743:5:13","nodeType":"VariableDeclaration","scope":3647,"src":"11735:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3562,"name":"uint256","nodeType":"ElementaryTypeName","src":"11735:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11734:15:13"},"returnParameters":{"id":3567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3566,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3647,"src":"11773:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3565,"name":"uint256","nodeType":"ElementaryTypeName","src":"11773:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11772:9:13"},"scope":3687,"src":"11719:663:13","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3685,"nodeType":"Block","src":"12619:174:13","statements":[{"id":3684,"nodeType":"UncheckedBlock","src":"12629:158:13","statements":[{"assignments":[3659],"declarations":[{"constant":false,"id":3659,"mutability":"mutable","name":"result","nameLocation":"12661:6:13","nodeType":"VariableDeclaration","scope":3684,"src":"12653:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3658,"name":"uint256","nodeType":"ElementaryTypeName","src":"12653:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3663,"initialValue":{"arguments":[{"id":3661,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3650,"src":"12677:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3660,"name":"log256","nodeType":"Identifier","overloadedDeclarations":[3647,3686],"referencedDeclaration":3647,"src":"12670:6:13","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":3662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12670:13:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12653:30:13"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3664,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3659,"src":"12704:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"},"id":3668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3665,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3653,"src":"12714:8:13","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":3666,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2828,"src":"12726:8:13","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2828_$","typeString":"type(enum MathUpgradeable.Rounding)"}},"id":3667,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12735:2:13","memberName":"Up","nodeType":"MemberAccess","referencedDeclaration":2826,"src":"12726:11:13","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}},"src":"12714:23:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":3669,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12741:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3670,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3659,"src":"12747:6:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"33","id":3671,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12757:1:13","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"12747:11:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3673,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12746:13:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12741:18:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3675,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3650,"src":"12762:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12741:26:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12714:53:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":3679,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12774:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":3680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"12714:61:13","trueExpression":{"hexValue":"31","id":3678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12770:1:13","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":3681,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12713:63:13","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"12704:72:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3657,"id":3683,"nodeType":"Return","src":"12697:79:13"}]}]},"documentation":{"id":3648,"nodeType":"StructuredDocumentation","src":"12388:144:13","text":" @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":3686,"implemented":true,"kind":"function","modifiers":[],"name":"log256","nameLocation":"12546:6:13","nodeType":"FunctionDefinition","parameters":{"id":3654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3650,"mutability":"mutable","name":"value","nameLocation":"12561:5:13","nodeType":"VariableDeclaration","scope":3686,"src":"12553:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3649,"name":"uint256","nodeType":"ElementaryTypeName","src":"12553:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3653,"mutability":"mutable","name":"rounding","nameLocation":"12577:8:13","nodeType":"VariableDeclaration","scope":3686,"src":"12568:17:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"},"typeName":{"id":3652,"nodeType":"UserDefinedTypeName","pathNode":{"id":3651,"name":"Rounding","nameLocations":["12568:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":2828,"src":"12568:8:13"},"referencedDeclaration":2828,"src":"12568:8:13","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}},"visibility":"internal"}],"src":"12552:34:13"},"returnParameters":{"id":3657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3656,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3686,"src":"12610:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3655,"name":"uint256","nodeType":"ElementaryTypeName","src":"12610:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12609:9:13"},"scope":3687,"src":"12537:256:13","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":3688,"src":"202:12593:13","usedErrors":[],"usedEvents":[]}],"src":"103:12693:13"},"id":13},"@openzeppelin/contracts/access/IAccessControl.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/IAccessControl.sol","exportedSymbols":{"IAccessControl":[3760]},"id":3761,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3689,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"94:23:14"},{"abstract":false,"baseContracts":[],"canonicalName":"IAccessControl","contractDependencies":[],"contractKind":"interface","documentation":{"id":3690,"nodeType":"StructuredDocumentation","src":"119:89:14","text":" @dev External interface of AccessControl declared to support ERC165 detection."},"fullyImplemented":false,"id":3760,"linearizedBaseContracts":[3760],"name":"IAccessControl","nameLocation":"219:14:14","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":3691,"nodeType":"StructuredDocumentation","src":"240:292:14","text":" @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\n `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\n {RoleAdminChanged} not being emitted signaling this.\n _Available since v3.1._"},"eventSelector":"bd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff","id":3699,"name":"RoleAdminChanged","nameLocation":"543:16:14","nodeType":"EventDefinition","parameters":{"id":3698,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3693,"indexed":true,"mutability":"mutable","name":"role","nameLocation":"576:4:14","nodeType":"VariableDeclaration","scope":3699,"src":"560:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3692,"name":"bytes32","nodeType":"ElementaryTypeName","src":"560:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3695,"indexed":true,"mutability":"mutable","name":"previousAdminRole","nameLocation":"598:17:14","nodeType":"VariableDeclaration","scope":3699,"src":"582:33:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3694,"name":"bytes32","nodeType":"ElementaryTypeName","src":"582:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3697,"indexed":true,"mutability":"mutable","name":"newAdminRole","nameLocation":"633:12:14","nodeType":"VariableDeclaration","scope":3699,"src":"617:28:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3696,"name":"bytes32","nodeType":"ElementaryTypeName","src":"617:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"559:87:14"},"src":"537:110:14"},{"anonymous":false,"documentation":{"id":3700,"nodeType":"StructuredDocumentation","src":"653:212:14","text":" @dev Emitted when `account` is granted `role`.\n `sender` is the account that originated the contract call, an admin role\n bearer except when using {AccessControl-_setupRole}."},"eventSelector":"2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d","id":3708,"name":"RoleGranted","nameLocation":"876:11:14","nodeType":"EventDefinition","parameters":{"id":3707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3702,"indexed":true,"mutability":"mutable","name":"role","nameLocation":"904:4:14","nodeType":"VariableDeclaration","scope":3708,"src":"888:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3701,"name":"bytes32","nodeType":"ElementaryTypeName","src":"888:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3704,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"926:7:14","nodeType":"VariableDeclaration","scope":3708,"src":"910:23:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3703,"name":"address","nodeType":"ElementaryTypeName","src":"910:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3706,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"951:6:14","nodeType":"VariableDeclaration","scope":3708,"src":"935:22:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3705,"name":"address","nodeType":"ElementaryTypeName","src":"935:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"887:71:14"},"src":"870:89:14"},{"anonymous":false,"documentation":{"id":3709,"nodeType":"StructuredDocumentation","src":"965:275:14","text":" @dev Emitted when `account` is revoked `role`.\n `sender` is the account that originated the contract call:\n   - if using `revokeRole`, it is the admin role bearer\n   - if using `renounceRole`, it is the role bearer (i.e. `account`)"},"eventSelector":"f6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b","id":3717,"name":"RoleRevoked","nameLocation":"1251:11:14","nodeType":"EventDefinition","parameters":{"id":3716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3711,"indexed":true,"mutability":"mutable","name":"role","nameLocation":"1279:4:14","nodeType":"VariableDeclaration","scope":3717,"src":"1263:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3710,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1263:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3713,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"1301:7:14","nodeType":"VariableDeclaration","scope":3717,"src":"1285:23:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3712,"name":"address","nodeType":"ElementaryTypeName","src":"1285:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3715,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"1326:6:14","nodeType":"VariableDeclaration","scope":3717,"src":"1310:22:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3714,"name":"address","nodeType":"ElementaryTypeName","src":"1310:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1262:71:14"},"src":"1245:89:14"},{"documentation":{"id":3718,"nodeType":"StructuredDocumentation","src":"1340:76:14","text":" @dev Returns `true` if `account` has been granted `role`."},"functionSelector":"91d14854","id":3727,"implemented":false,"kind":"function","modifiers":[],"name":"hasRole","nameLocation":"1430:7:14","nodeType":"FunctionDefinition","parameters":{"id":3723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3720,"mutability":"mutable","name":"role","nameLocation":"1446:4:14","nodeType":"VariableDeclaration","scope":3727,"src":"1438:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3719,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1438:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3722,"mutability":"mutable","name":"account","nameLocation":"1460:7:14","nodeType":"VariableDeclaration","scope":3727,"src":"1452:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3721,"name":"address","nodeType":"ElementaryTypeName","src":"1452:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1437:31:14"},"returnParameters":{"id":3726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3725,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3727,"src":"1492:4:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3724,"name":"bool","nodeType":"ElementaryTypeName","src":"1492:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1491:6:14"},"scope":3760,"src":"1421:77:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3728,"nodeType":"StructuredDocumentation","src":"1504:184:14","text":" @dev Returns the admin role that controls `role`. See {grantRole} and\n {revokeRole}.\n To change a role's admin, use {AccessControl-_setRoleAdmin}."},"functionSelector":"248a9ca3","id":3735,"implemented":false,"kind":"function","modifiers":[],"name":"getRoleAdmin","nameLocation":"1702:12:14","nodeType":"FunctionDefinition","parameters":{"id":3731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3730,"mutability":"mutable","name":"role","nameLocation":"1723:4:14","nodeType":"VariableDeclaration","scope":3735,"src":"1715:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3729,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1715:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1714:14:14"},"returnParameters":{"id":3734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3733,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3735,"src":"1752:7:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3732,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1752:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1751:9:14"},"scope":3760,"src":"1693:68:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3736,"nodeType":"StructuredDocumentation","src":"1767:239:14","text":" @dev Grants `role` to `account`.\n If `account` had not been already granted `role`, emits a {RoleGranted}\n event.\n Requirements:\n - the caller must have ``role``'s admin role."},"functionSelector":"2f2ff15d","id":3743,"implemented":false,"kind":"function","modifiers":[],"name":"grantRole","nameLocation":"2020:9:14","nodeType":"FunctionDefinition","parameters":{"id":3741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3738,"mutability":"mutable","name":"role","nameLocation":"2038:4:14","nodeType":"VariableDeclaration","scope":3743,"src":"2030:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3737,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2030:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3740,"mutability":"mutable","name":"account","nameLocation":"2052:7:14","nodeType":"VariableDeclaration","scope":3743,"src":"2044:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3739,"name":"address","nodeType":"ElementaryTypeName","src":"2044:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2029:31:14"},"returnParameters":{"id":3742,"nodeType":"ParameterList","parameters":[],"src":"2069:0:14"},"scope":3760,"src":"2011:59:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3744,"nodeType":"StructuredDocumentation","src":"2076:223:14","text":" @dev Revokes `role` from `account`.\n If `account` had been granted `role`, emits a {RoleRevoked} event.\n Requirements:\n - the caller must have ``role``'s admin role."},"functionSelector":"d547741f","id":3751,"implemented":false,"kind":"function","modifiers":[],"name":"revokeRole","nameLocation":"2313:10:14","nodeType":"FunctionDefinition","parameters":{"id":3749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3746,"mutability":"mutable","name":"role","nameLocation":"2332:4:14","nodeType":"VariableDeclaration","scope":3751,"src":"2324:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3745,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2324:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3748,"mutability":"mutable","name":"account","nameLocation":"2346:7:14","nodeType":"VariableDeclaration","scope":3751,"src":"2338:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3747,"name":"address","nodeType":"ElementaryTypeName","src":"2338:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2323:31:14"},"returnParameters":{"id":3750,"nodeType":"ParameterList","parameters":[],"src":"2363:0:14"},"scope":3760,"src":"2304:60:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3752,"nodeType":"StructuredDocumentation","src":"2370:480:14","text":" @dev Revokes `role` from the calling account.\n Roles are often managed via {grantRole} and {revokeRole}: this function's\n purpose is to provide a mechanism for accounts to lose their privileges\n if they are compromised (such as when a trusted device is misplaced).\n If the calling account had been granted `role`, emits a {RoleRevoked}\n event.\n Requirements:\n - the caller must be `account`."},"functionSelector":"36568abe","id":3759,"implemented":false,"kind":"function","modifiers":[],"name":"renounceRole","nameLocation":"2864:12:14","nodeType":"FunctionDefinition","parameters":{"id":3757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3754,"mutability":"mutable","name":"role","nameLocation":"2885:4:14","nodeType":"VariableDeclaration","scope":3759,"src":"2877:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3753,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2877:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3756,"mutability":"mutable","name":"account","nameLocation":"2899:7:14","nodeType":"VariableDeclaration","scope":3759,"src":"2891:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3755,"name":"address","nodeType":"ElementaryTypeName","src":"2891:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2876:31:14"},"returnParameters":{"id":3758,"nodeType":"ParameterList","parameters":[],"src":"2916:0:14"},"scope":3760,"src":"2855:62:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3761,"src":"209:2710:14","usedErrors":[],"usedEvents":[3699,3708,3717]}],"src":"94:2826:14"},"id":14},"@openzeppelin/contracts/access/Ownable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","exportedSymbols":{"Context":[4771],"Ownable":[3873]},"id":3874,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3762,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"102:23:15"},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../utils/Context.sol","id":3763,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3874,"sourceUnit":4772,"src":"127:30:15","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":3765,"name":"Context","nameLocations":["683:7:15"],"nodeType":"IdentifierPath","referencedDeclaration":4771,"src":"683:7:15"},"id":3766,"nodeType":"InheritanceSpecifier","src":"683:7:15"}],"canonicalName":"Ownable","contractDependencies":[],"contractKind":"contract","documentation":{"id":3764,"nodeType":"StructuredDocumentation","src":"159:494:15","text":" @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n By default, the owner account will be the one that deploys the contract. This\n can later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."},"fullyImplemented":true,"id":3873,"linearizedBaseContracts":[3873,4771],"name":"Ownable","nameLocation":"672:7:15","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":3768,"mutability":"mutable","name":"_owner","nameLocation":"713:6:15","nodeType":"VariableDeclaration","scope":3873,"src":"697:22:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3767,"name":"address","nodeType":"ElementaryTypeName","src":"697:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":3774,"name":"OwnershipTransferred","nameLocation":"732:20:15","nodeType":"EventDefinition","parameters":{"id":3773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3770,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"769:13:15","nodeType":"VariableDeclaration","scope":3774,"src":"753:29:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3769,"name":"address","nodeType":"ElementaryTypeName","src":"753:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3772,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"800:8:15","nodeType":"VariableDeclaration","scope":3774,"src":"784:24:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3771,"name":"address","nodeType":"ElementaryTypeName","src":"784:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"752:57:15"},"src":"726:84:15"},{"body":{"id":3783,"nodeType":"Block","src":"926:49:15","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":3779,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4753,"src":"955:10:15","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"955:12:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3778,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3872,"src":"936:18:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":3781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"936:32:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3782,"nodeType":"ExpressionStatement","src":"936:32:15"}]},"documentation":{"id":3775,"nodeType":"StructuredDocumentation","src":"816:91:15","text":" @dev Initializes the contract setting the deployer as the initial owner."},"id":3784,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3776,"nodeType":"ParameterList","parameters":[],"src":"923:2:15"},"returnParameters":{"id":3777,"nodeType":"ParameterList","parameters":[],"src":"926:0:15"},"scope":3873,"src":"912:63:15","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3791,"nodeType":"Block","src":"1084:41:15","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":3787,"name":"_checkOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3815,"src":"1094:11:15","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":3788,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1094:13:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3789,"nodeType":"ExpressionStatement","src":"1094:13:15"},{"id":3790,"nodeType":"PlaceholderStatement","src":"1117:1:15"}]},"documentation":{"id":3785,"nodeType":"StructuredDocumentation","src":"981:77:15","text":" @dev Throws if called by any account other than the owner."},"id":3792,"name":"onlyOwner","nameLocation":"1072:9:15","nodeType":"ModifierDefinition","parameters":{"id":3786,"nodeType":"ParameterList","parameters":[],"src":"1081:2:15"},"src":"1063:62:15","virtual":false,"visibility":"internal"},{"body":{"id":3800,"nodeType":"Block","src":"1256:30:15","statements":[{"expression":{"id":3798,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"1273:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":3797,"id":3799,"nodeType":"Return","src":"1266:13:15"}]},"documentation":{"id":3793,"nodeType":"StructuredDocumentation","src":"1131:65:15","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":3801,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"1210:5:15","nodeType":"FunctionDefinition","parameters":{"id":3794,"nodeType":"ParameterList","parameters":[],"src":"1215:2:15"},"returnParameters":{"id":3797,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3796,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3801,"src":"1247:7:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3795,"name":"address","nodeType":"ElementaryTypeName","src":"1247:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1246:9:15"},"scope":3873,"src":"1201:85:15","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":3814,"nodeType":"Block","src":"1404:85:15","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":3806,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3801,"src":"1422:5:15","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1422:7:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":3808,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4753,"src":"1433:10:15","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1433:12:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1422:23:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","id":3811,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1447:34:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""},"value":"Ownable: caller is not the owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""}],"id":3805,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1414:7:15","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1414:68:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3813,"nodeType":"ExpressionStatement","src":"1414:68:15"}]},"documentation":{"id":3802,"nodeType":"StructuredDocumentation","src":"1292:62:15","text":" @dev Throws if the sender is not the owner."},"id":3815,"implemented":true,"kind":"function","modifiers":[],"name":"_checkOwner","nameLocation":"1368:11:15","nodeType":"FunctionDefinition","parameters":{"id":3803,"nodeType":"ParameterList","parameters":[],"src":"1379:2:15"},"returnParameters":{"id":3804,"nodeType":"ParameterList","parameters":[],"src":"1404:0:15"},"scope":3873,"src":"1359:130:15","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":3828,"nodeType":"Block","src":"1878:47:15","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":3824,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1915:1:15","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":3823,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1907:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3822,"name":"address","nodeType":"ElementaryTypeName","src":"1907:7:15","typeDescriptions":{}}},"id":3825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1907:10:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3821,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3872,"src":"1888:18:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":3826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1888:30:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3827,"nodeType":"ExpressionStatement","src":"1888:30:15"}]},"documentation":{"id":3816,"nodeType":"StructuredDocumentation","src":"1495:324:15","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby disabling any functionality that is only available to the owner."},"functionSelector":"715018a6","id":3829,"implemented":true,"kind":"function","modifiers":[{"id":3819,"kind":"modifierInvocation","modifierName":{"id":3818,"name":"onlyOwner","nameLocations":["1868:9:15"],"nodeType":"IdentifierPath","referencedDeclaration":3792,"src":"1868:9:15"},"nodeType":"ModifierInvocation","src":"1868:9:15"}],"name":"renounceOwnership","nameLocation":"1833:17:15","nodeType":"FunctionDefinition","parameters":{"id":3817,"nodeType":"ParameterList","parameters":[],"src":"1850:2:15"},"returnParameters":{"id":3820,"nodeType":"ParameterList","parameters":[],"src":"1878:0:15"},"scope":3873,"src":"1824:101:15","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":3851,"nodeType":"Block","src":"2144:128:15","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3838,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3832,"src":"2162:8:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2182:1:15","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":3840,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2174:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3839,"name":"address","nodeType":"ElementaryTypeName","src":"2174:7:15","typeDescriptions":{}}},"id":3842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2174:10:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2162:22:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373","id":3844,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2186:40:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""},"value":"Ownable: new owner is the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""}],"id":3837,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2154:7:15","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2154:73:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3846,"nodeType":"ExpressionStatement","src":"2154:73:15"},{"expression":{"arguments":[{"id":3848,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3832,"src":"2256:8:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3847,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3872,"src":"2237:18:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":3849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2237:28:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3850,"nodeType":"ExpressionStatement","src":"2237:28:15"}]},"documentation":{"id":3830,"nodeType":"StructuredDocumentation","src":"1931:138:15","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":3852,"implemented":true,"kind":"function","modifiers":[{"id":3835,"kind":"modifierInvocation","modifierName":{"id":3834,"name":"onlyOwner","nameLocations":["2134:9:15"],"nodeType":"IdentifierPath","referencedDeclaration":3792,"src":"2134:9:15"},"nodeType":"ModifierInvocation","src":"2134:9:15"}],"name":"transferOwnership","nameLocation":"2083:17:15","nodeType":"FunctionDefinition","parameters":{"id":3833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3832,"mutability":"mutable","name":"newOwner","nameLocation":"2109:8:15","nodeType":"VariableDeclaration","scope":3852,"src":"2101:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3831,"name":"address","nodeType":"ElementaryTypeName","src":"2101:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2100:18:15"},"returnParameters":{"id":3836,"nodeType":"ParameterList","parameters":[],"src":"2144:0:15"},"scope":3873,"src":"2074:198:15","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":3871,"nodeType":"Block","src":"2489:124:15","statements":[{"assignments":[3859],"declarations":[{"constant":false,"id":3859,"mutability":"mutable","name":"oldOwner","nameLocation":"2507:8:15","nodeType":"VariableDeclaration","scope":3871,"src":"2499:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3858,"name":"address","nodeType":"ElementaryTypeName","src":"2499:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":3861,"initialValue":{"id":3860,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"2518:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2499:25:15"},{"expression":{"id":3864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3862,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"2534:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3863,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3855,"src":"2543:8:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2534:17:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3865,"nodeType":"ExpressionStatement","src":"2534:17:15"},{"eventCall":{"arguments":[{"id":3867,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3859,"src":"2587:8:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3868,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3855,"src":"2597:8:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3866,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3774,"src":"2566:20:15","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":3869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2566:40:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3870,"nodeType":"EmitStatement","src":"2561:45:15"}]},"documentation":{"id":3853,"nodeType":"StructuredDocumentation","src":"2278:143:15","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction."},"id":3872,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"2435:18:15","nodeType":"FunctionDefinition","parameters":{"id":3856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3855,"mutability":"mutable","name":"newOwner","nameLocation":"2462:8:15","nodeType":"VariableDeclaration","scope":3872,"src":"2454:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3854,"name":"address","nodeType":"ElementaryTypeName","src":"2454:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2453:18:15"},"returnParameters":{"id":3857,"nodeType":"ParameterList","parameters":[],"src":"2489:0:15"},"scope":3873,"src":"2426:187:15","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":3874,"src":"654:1961:15","usedErrors":[],"usedEvents":[3774]}],"src":"102:2514:15"},"id":15},"@openzeppelin/contracts/interfaces/IERC1967.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1967.sol","exportedSymbols":{"IERC1967":[3894]},"id":3895,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3875,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"107:23:16"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1967","contractDependencies":[],"contractKind":"interface","documentation":{"id":3876,"nodeType":"StructuredDocumentation","src":"132:133:16","text":" @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\n _Available since v4.8.3._"},"fullyImplemented":true,"id":3894,"linearizedBaseContracts":[3894],"name":"IERC1967","nameLocation":"276:8:16","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":3877,"nodeType":"StructuredDocumentation","src":"291:68:16","text":" @dev Emitted when the implementation is upgraded."},"eventSelector":"bc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","id":3881,"name":"Upgraded","nameLocation":"370:8:16","nodeType":"EventDefinition","parameters":{"id":3880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3879,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"395:14:16","nodeType":"VariableDeclaration","scope":3881,"src":"379:30:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3878,"name":"address","nodeType":"ElementaryTypeName","src":"379:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"378:32:16"},"src":"364:47:16"},{"anonymous":false,"documentation":{"id":3882,"nodeType":"StructuredDocumentation","src":"417:67:16","text":" @dev Emitted when the admin account has changed."},"eventSelector":"7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f","id":3888,"name":"AdminChanged","nameLocation":"495:12:16","nodeType":"EventDefinition","parameters":{"id":3887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3884,"indexed":false,"mutability":"mutable","name":"previousAdmin","nameLocation":"516:13:16","nodeType":"VariableDeclaration","scope":3888,"src":"508:21:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3883,"name":"address","nodeType":"ElementaryTypeName","src":"508:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3886,"indexed":false,"mutability":"mutable","name":"newAdmin","nameLocation":"539:8:16","nodeType":"VariableDeclaration","scope":3888,"src":"531:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3885,"name":"address","nodeType":"ElementaryTypeName","src":"531:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"507:41:16"},"src":"489:60:16"},{"anonymous":false,"documentation":{"id":3889,"nodeType":"StructuredDocumentation","src":"555:59:16","text":" @dev Emitted when the beacon is changed."},"eventSelector":"1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e","id":3893,"name":"BeaconUpgraded","nameLocation":"625:14:16","nodeType":"EventDefinition","parameters":{"id":3892,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3891,"indexed":true,"mutability":"mutable","name":"beacon","nameLocation":"656:6:16","nodeType":"VariableDeclaration","scope":3893,"src":"640:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3890,"name":"address","nodeType":"ElementaryTypeName","src":"640:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"639:24:16"},"src":"619:45:16"}],"scope":3895,"src":"266:400:16","usedErrors":[],"usedEvents":[3881,3888,3893]}],"src":"107:560:16"},"id":16},"@openzeppelin/contracts/interfaces/draft-IERC1822.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC1822.sol","exportedSymbols":{"IERC1822Proxiable":[3904]},"id":3905,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3896,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"113:23:17"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1822Proxiable","contractDependencies":[],"contractKind":"interface","documentation":{"id":3897,"nodeType":"StructuredDocumentation","src":"138:203:17","text":" @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n proxy whose upgrades are fully controlled by the current implementation."},"fullyImplemented":false,"id":3904,"linearizedBaseContracts":[3904],"name":"IERC1822Proxiable","nameLocation":"352:17:17","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3898,"nodeType":"StructuredDocumentation","src":"376:438:17","text":" @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n address.\n IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n function revert if invoked through a proxy."},"functionSelector":"52d1902d","id":3903,"implemented":false,"kind":"function","modifiers":[],"name":"proxiableUUID","nameLocation":"828:13:17","nodeType":"FunctionDefinition","parameters":{"id":3899,"nodeType":"ParameterList","parameters":[],"src":"841:2:17"},"returnParameters":{"id":3902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3901,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3903,"src":"867:7:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3900,"name":"bytes32","nodeType":"ElementaryTypeName","src":"867:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"866:9:17"},"scope":3904,"src":"819:57:17","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3905,"src":"342:536:17","usedErrors":[],"usedEvents":[]}],"src":"113:766:17"},"id":17},"@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol","exportedSymbols":{"Address":[4741],"ERC1967Upgrade":[4208],"IBeacon":[4336],"IERC1822Proxiable":[3904],"IERC1967":[3894],"StorageSlot":[4881]},"id":4209,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3906,"literals":["solidity","^","0.8",".2"],"nodeType":"PragmaDirective","src":"116:23:18"},{"absolutePath":"@openzeppelin/contracts/proxy/beacon/IBeacon.sol","file":"../beacon/IBeacon.sol","id":3907,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4209,"sourceUnit":4337,"src":"141:31:18","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1967.sol","file":"../../interfaces/IERC1967.sol","id":3908,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4209,"sourceUnit":3895,"src":"173:39:18","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC1822.sol","file":"../../interfaces/draft-IERC1822.sol","id":3909,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4209,"sourceUnit":3905,"src":"213:45:18","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"../../utils/Address.sol","id":3910,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4209,"sourceUnit":4742,"src":"259:33:18","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/StorageSlot.sol","file":"../../utils/StorageSlot.sol","id":3911,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4209,"sourceUnit":4882,"src":"293:37:18","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":3913,"name":"IERC1967","nameLocations":["553:8:18"],"nodeType":"IdentifierPath","referencedDeclaration":3894,"src":"553:8:18"},"id":3914,"nodeType":"InheritanceSpecifier","src":"553:8:18"}],"canonicalName":"ERC1967Upgrade","contractDependencies":[],"contractKind":"contract","documentation":{"id":3912,"nodeType":"StructuredDocumentation","src":"332:184:18","text":" @dev This abstract contract provides getters and event emitting update functions for\n https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n _Available since v4.1._"},"fullyImplemented":true,"id":4208,"linearizedBaseContracts":[4208,3894],"name":"ERC1967Upgrade","nameLocation":"535:14:18","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":3917,"mutability":"constant","name":"_ROLLBACK_SLOT","nameLocation":"672:14:18","nodeType":"VariableDeclaration","scope":4208,"src":"647:108:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3915,"name":"bytes32","nodeType":"ElementaryTypeName","src":"647:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307834393130666466613136666564333236306564306537313437663763633664613131613630323038623562393430366431326136333536313466666439313433","id":3916,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"689:66:18","typeDescriptions":{"typeIdentifier":"t_rational_33048860383849004559742813297059419343339852917517107368639918720169455489347_by_1","typeString":"int_const 3304...(69 digits omitted)...9347"},"value":"0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143"},"visibility":"private"},{"constant":true,"documentation":{"id":3918,"nodeType":"StructuredDocumentation","src":"762:214:18","text":" @dev Storage slot with the address of the current implementation.\n This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n validated in the constructor."},"id":3921,"mutability":"constant","name":"_IMPLEMENTATION_SLOT","nameLocation":"1007:20:18","nodeType":"VariableDeclaration","scope":4208,"src":"981:115:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3919,"name":"bytes32","nodeType":"ElementaryTypeName","src":"981:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307833363038393461313362613161333231303636376338323834393264623938646361336532303736636333373335613932306133636135303564333832626263","id":3920,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1030:66:18","typeDescriptions":{"typeIdentifier":"t_rational_24440054405305269366569402256811496959409073762505157381672968839269610695612_by_1","typeString":"int_const 2444...(69 digits omitted)...5612"},"value":"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"},"visibility":"internal"},{"body":{"id":3933,"nodeType":"Block","src":"1237:78:18","statements":[{"expression":{"expression":{"arguments":[{"id":3929,"name":"_IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3921,"src":"1281:20:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":3927,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4881,"src":"1254:11:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$4881_$","typeString":"type(library StorageSlot)"}},"id":3928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1266:14:18","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":4803,"src":"1254:26:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$4777_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":3930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1254:48:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$4777_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":3931,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1303:5:18","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":4776,"src":"1254:54:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":3926,"id":3932,"nodeType":"Return","src":"1247:61:18"}]},"documentation":{"id":3922,"nodeType":"StructuredDocumentation","src":"1103:67:18","text":" @dev Returns the current implementation address."},"id":3934,"implemented":true,"kind":"function","modifiers":[],"name":"_getImplementation","nameLocation":"1184:18:18","nodeType":"FunctionDefinition","parameters":{"id":3923,"nodeType":"ParameterList","parameters":[],"src":"1202:2:18"},"returnParameters":{"id":3926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3925,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3934,"src":"1228:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3924,"name":"address","nodeType":"ElementaryTypeName","src":"1228:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1227:9:18"},"scope":4208,"src":"1175:140:18","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":3957,"nodeType":"Block","src":"1469:196:18","statements":[{"expression":{"arguments":[{"arguments":[{"id":3943,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3937,"src":"1506:17:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3941,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4741,"src":"1487:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$4741_$","typeString":"type(library Address)"}},"id":3942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1495:10:18","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":4429,"src":"1487:18:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":3944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1487:37:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313936373a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374","id":3945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1526:47:18","typeDescriptions":{"typeIdentifier":"t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65","typeString":"literal_string \"ERC1967: new implementation is not a contract\""},"value":"ERC1967: new implementation is not a contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65","typeString":"literal_string \"ERC1967: new implementation is not a contract\""}],"id":3940,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1479:7:18","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1479:95:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3947,"nodeType":"ExpressionStatement","src":"1479:95:18"},{"expression":{"id":3955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":3951,"name":"_IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3921,"src":"1611:20:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":3948,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4881,"src":"1584:11:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$4881_$","typeString":"type(library StorageSlot)"}},"id":3950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1596:14:18","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":4803,"src":"1584:26:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$4777_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":3952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1584:48:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$4777_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":3953,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1633:5:18","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":4776,"src":"1584:54:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3954,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3937,"src":"1641:17:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1584:74:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3956,"nodeType":"ExpressionStatement","src":"1584:74:18"}]},"documentation":{"id":3935,"nodeType":"StructuredDocumentation","src":"1321:80:18","text":" @dev Stores a new address in the EIP1967 implementation slot."},"id":3958,"implemented":true,"kind":"function","modifiers":[],"name":"_setImplementation","nameLocation":"1415:18:18","nodeType":"FunctionDefinition","parameters":{"id":3938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3937,"mutability":"mutable","name":"newImplementation","nameLocation":"1442:17:18","nodeType":"VariableDeclaration","scope":3958,"src":"1434:25:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3936,"name":"address","nodeType":"ElementaryTypeName","src":"1434:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1433:27:18"},"returnParameters":{"id":3939,"nodeType":"ParameterList","parameters":[],"src":"1469:0:18"},"scope":4208,"src":"1406:259:18","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":3972,"nodeType":"Block","src":"1827:96:18","statements":[{"expression":{"arguments":[{"id":3965,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3961,"src":"1856:17:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3964,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3958,"src":"1837:18:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":3966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1837:37:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3967,"nodeType":"ExpressionStatement","src":"1837:37:18"},{"eventCall":{"arguments":[{"id":3969,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3961,"src":"1898:17:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3968,"name":"Upgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3881,"src":"1889:8:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":3970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1889:27:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3971,"nodeType":"EmitStatement","src":"1884:32:18"}]},"documentation":{"id":3959,"nodeType":"StructuredDocumentation","src":"1671:95:18","text":" @dev Perform implementation upgrade\n Emits an {Upgraded} event."},"id":3973,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeTo","nameLocation":"1780:10:18","nodeType":"FunctionDefinition","parameters":{"id":3962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3961,"mutability":"mutable","name":"newImplementation","nameLocation":"1799:17:18","nodeType":"VariableDeclaration","scope":3973,"src":"1791:25:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3960,"name":"address","nodeType":"ElementaryTypeName","src":"1791:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1790:27:18"},"returnParameters":{"id":3963,"nodeType":"ParameterList","parameters":[],"src":"1827:0:18"},"scope":4208,"src":"1771:152:18","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4002,"nodeType":"Block","src":"2155:167:18","statements":[{"expression":{"arguments":[{"id":3984,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3976,"src":"2176:17:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3983,"name":"_upgradeTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3973,"src":"2165:10:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":3985,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2165:29:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3986,"nodeType":"ExpressionStatement","src":"2165:29:18"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3987,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3978,"src":"2208:4:18","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2213:6:18","memberName":"length","nodeType":"MemberAccess","src":"2208:11:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2222:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2208:15:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"id":3991,"name":"forceCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3980,"src":"2227:9:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2208:28:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4001,"nodeType":"IfStatement","src":"2204:112:18","trueBody":{"id":4000,"nodeType":"Block","src":"2238:78:18","statements":[{"expression":{"arguments":[{"id":3996,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3976,"src":"2281:17:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3997,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3978,"src":"2300:4:18","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":3993,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4741,"src":"2252:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$4741_$","typeString":"type(library Address)"}},"id":3995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2260:20:18","memberName":"functionDelegateCall","nodeType":"MemberAccess","referencedDeclaration":4628,"src":"2252:28:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":3998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2252:53:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3999,"nodeType":"ExpressionStatement","src":"2252:53:18"}]}}]},"documentation":{"id":3974,"nodeType":"StructuredDocumentation","src":"1929:123:18","text":" @dev Perform implementation upgrade with additional setup call.\n Emits an {Upgraded} event."},"id":4003,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeToAndCall","nameLocation":"2066:17:18","nodeType":"FunctionDefinition","parameters":{"id":3981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3976,"mutability":"mutable","name":"newImplementation","nameLocation":"2092:17:18","nodeType":"VariableDeclaration","scope":4003,"src":"2084:25:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3975,"name":"address","nodeType":"ElementaryTypeName","src":"2084:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3978,"mutability":"mutable","name":"data","nameLocation":"2124:4:18","nodeType":"VariableDeclaration","scope":4003,"src":"2111:17:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3977,"name":"bytes","nodeType":"ElementaryTypeName","src":"2111:5:18","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3980,"mutability":"mutable","name":"forceCall","nameLocation":"2135:9:18","nodeType":"VariableDeclaration","scope":4003,"src":"2130:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3979,"name":"bool","nodeType":"ElementaryTypeName","src":"2130:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2083:62:18"},"returnParameters":{"id":3982,"nodeType":"ParameterList","parameters":[],"src":"2155:0:18"},"scope":4208,"src":"2057:265:18","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4055,"nodeType":"Block","src":"2596:820:18","statements":[{"condition":{"expression":{"arguments":[{"id":4015,"name":"_ROLLBACK_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3917,"src":"2937:14:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4013,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4881,"src":"2910:11:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$4881_$","typeString":"type(library StorageSlot)"}},"id":4014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2922:14:18","memberName":"getBooleanSlot","nodeType":"MemberAccess","referencedDeclaration":4814,"src":"2910:26:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_BooleanSlot_$4780_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.BooleanSlot storage pointer)"}},"id":4016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2910:42:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$4780_storage_ptr","typeString":"struct StorageSlot.BooleanSlot storage pointer"}},"id":4017,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2953:5:18","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":4779,"src":"2910:48:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4053,"nodeType":"Block","src":"3028:382:18","statements":[{"clauses":[{"block":{"id":4038,"nodeType":"Block","src":"3122:115:18","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":4034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4032,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4029,"src":"3148:4:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4033,"name":"_IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3921,"src":"3156:20:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3148:28:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524331393637557067726164653a20756e737570706f727465642070726f786961626c6555554944","id":4035,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3178:43:18","typeDescriptions":{"typeIdentifier":"t_stringliteral_76b6b6debfc5febf101145a79ecf0b0d2e89e397dfdab2bca99888370411152c","typeString":"literal_string \"ERC1967Upgrade: unsupported proxiableUUID\""},"value":"ERC1967Upgrade: unsupported proxiableUUID"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_76b6b6debfc5febf101145a79ecf0b0d2e89e397dfdab2bca99888370411152c","typeString":"literal_string \"ERC1967Upgrade: unsupported proxiableUUID\""}],"id":4031,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3140:7:18","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4036,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3140:82:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4037,"nodeType":"ExpressionStatement","src":"3140:82:18"}]},"errorName":"","id":4039,"nodeType":"TryCatchClause","parameters":{"id":4030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4029,"mutability":"mutable","name":"slot","nameLocation":"3116:4:18","nodeType":"VariableDeclaration","scope":4039,"src":"3108:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4028,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3108:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3107:14:18"},"src":"3099:138:18"},{"block":{"id":4044,"nodeType":"Block","src":"3244:89:18","statements":[{"expression":{"arguments":[{"hexValue":"45524331393637557067726164653a206e657720696d706c656d656e746174696f6e206973206e6f742055555053","id":4041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3269:48:18","typeDescriptions":{"typeIdentifier":"t_stringliteral_8e8e2fbcb586f700b5b14e2c4a650c8d83b9773c31c5fe8962070ea544e11f24","typeString":"literal_string \"ERC1967Upgrade: new implementation is not UUPS\""},"value":"ERC1967Upgrade: new implementation is not UUPS"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_8e8e2fbcb586f700b5b14e2c4a650c8d83b9773c31c5fe8962070ea544e11f24","typeString":"literal_string \"ERC1967Upgrade: new implementation is not UUPS\""}],"id":4040,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"3262:6:18","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":4042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3262:56:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4043,"nodeType":"ExpressionStatement","src":"3262:56:18"}]},"errorName":"","id":4045,"nodeType":"TryCatchClause","src":"3238:95:18"}],"externalCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":4024,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4006,"src":"3064:17:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4023,"name":"IERC1822Proxiable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3904,"src":"3046:17:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC1822Proxiable_$3904_$","typeString":"type(contract IERC1822Proxiable)"}},"id":4025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3046:36:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC1822Proxiable_$3904","typeString":"contract IERC1822Proxiable"}},"id":4026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3083:13:18","memberName":"proxiableUUID","nodeType":"MemberAccess","referencedDeclaration":3903,"src":"3046:50:18","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":4027,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3046:52:18","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4046,"nodeType":"TryStatement","src":"3042:291:18"},{"expression":{"arguments":[{"id":4048,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4006,"src":"3364:17:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4049,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4008,"src":"3383:4:18","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":4050,"name":"forceCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4010,"src":"3389:9:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":4047,"name":"_upgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4003,"src":"3346:17:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":4051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3346:53:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4052,"nodeType":"ExpressionStatement","src":"3346:53:18"}]},"id":4054,"nodeType":"IfStatement","src":"2906:504:18","trueBody":{"id":4022,"nodeType":"Block","src":"2960:62:18","statements":[{"expression":{"arguments":[{"id":4019,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4006,"src":"2993:17:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4018,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3958,"src":"2974:18:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2974:37:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4021,"nodeType":"ExpressionStatement","src":"2974:37:18"}]}}]},"documentation":{"id":4004,"nodeType":"StructuredDocumentation","src":"2328:161:18","text":" @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n Emits an {Upgraded} event."},"id":4056,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeToAndCallUUPS","nameLocation":"2503:21:18","nodeType":"FunctionDefinition","parameters":{"id":4011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4006,"mutability":"mutable","name":"newImplementation","nameLocation":"2533:17:18","nodeType":"VariableDeclaration","scope":4056,"src":"2525:25:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4005,"name":"address","nodeType":"ElementaryTypeName","src":"2525:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4008,"mutability":"mutable","name":"data","nameLocation":"2565:4:18","nodeType":"VariableDeclaration","scope":4056,"src":"2552:17:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4007,"name":"bytes","nodeType":"ElementaryTypeName","src":"2552:5:18","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4010,"mutability":"mutable","name":"forceCall","nameLocation":"2576:9:18","nodeType":"VariableDeclaration","scope":4056,"src":"2571:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4009,"name":"bool","nodeType":"ElementaryTypeName","src":"2571:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2524:62:18"},"returnParameters":{"id":4012,"nodeType":"ParameterList","parameters":[],"src":"2596:0:18"},"scope":4208,"src":"2494:922:18","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"constant":true,"documentation":{"id":4057,"nodeType":"StructuredDocumentation","src":"3422:189:18","text":" @dev Storage slot with the admin of the contract.\n This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n validated in the constructor."},"id":4060,"mutability":"constant","name":"_ADMIN_SLOT","nameLocation":"3642:11:18","nodeType":"VariableDeclaration","scope":4208,"src":"3616:106:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4058,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3616:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307862353331323736383461353638623331373361653133623966386136303136653234336536336236653865653131373864366137313738353062356436313033","id":4059,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3656:66:18","typeDescriptions":{"typeIdentifier":"t_rational_81955473079516046949633743016697847541294818689821282749996681496272635257091_by_1","typeString":"int_const 8195...(69 digits omitted)...7091"},"value":"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"},"visibility":"internal"},{"body":{"id":4072,"nodeType":"Block","src":"3837:69:18","statements":[{"expression":{"expression":{"arguments":[{"id":4068,"name":"_ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4060,"src":"3881:11:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4066,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4881,"src":"3854:11:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$4881_$","typeString":"type(library StorageSlot)"}},"id":4067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3866:14:18","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":4803,"src":"3854:26:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$4777_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":4069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3854:39:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$4777_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":4070,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3894:5:18","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":4776,"src":"3854:45:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":4065,"id":4071,"nodeType":"Return","src":"3847:52:18"}]},"documentation":{"id":4061,"nodeType":"StructuredDocumentation","src":"3729:50:18","text":" @dev Returns the current admin."},"id":4073,"implemented":true,"kind":"function","modifiers":[],"name":"_getAdmin","nameLocation":"3793:9:18","nodeType":"FunctionDefinition","parameters":{"id":4062,"nodeType":"ParameterList","parameters":[],"src":"3802:2:18"},"returnParameters":{"id":4065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4064,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4073,"src":"3828:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4063,"name":"address","nodeType":"ElementaryTypeName","src":"3828:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3827:9:18"},"scope":4208,"src":"3784:122:18","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4098,"nodeType":"Block","src":"4033:156:18","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4080,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4076,"src":"4051:8:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":4083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4071:1:18","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":4082,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4063:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4081,"name":"address","nodeType":"ElementaryTypeName","src":"4063:7:18","typeDescriptions":{}}},"id":4084,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4063:10:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4051:22:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313936373a206e65772061646d696e20697320746865207a65726f2061646472657373","id":4086,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4075:40:18","typeDescriptions":{"typeIdentifier":"t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5","typeString":"literal_string \"ERC1967: new admin is the zero address\""},"value":"ERC1967: new admin is the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5","typeString":"literal_string \"ERC1967: new admin is the zero address\""}],"id":4079,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4043:7:18","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4043:73:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4088,"nodeType":"ExpressionStatement","src":"4043:73:18"},{"expression":{"id":4096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":4092,"name":"_ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4060,"src":"4153:11:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4089,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4881,"src":"4126:11:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$4881_$","typeString":"type(library StorageSlot)"}},"id":4091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4138:14:18","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":4803,"src":"4126:26:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$4777_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":4093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4126:39:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$4777_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":4094,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4166:5:18","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":4776,"src":"4126:45:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4095,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4076,"src":"4174:8:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4126:56:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4097,"nodeType":"ExpressionStatement","src":"4126:56:18"}]},"documentation":{"id":4074,"nodeType":"StructuredDocumentation","src":"3912:71:18","text":" @dev Stores a new address in the EIP1967 admin slot."},"id":4099,"implemented":true,"kind":"function","modifiers":[],"name":"_setAdmin","nameLocation":"3997:9:18","nodeType":"FunctionDefinition","parameters":{"id":4077,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4076,"mutability":"mutable","name":"newAdmin","nameLocation":"4015:8:18","nodeType":"VariableDeclaration","scope":4099,"src":"4007:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4075,"name":"address","nodeType":"ElementaryTypeName","src":"4007:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4006:18:18"},"returnParameters":{"id":4078,"nodeType":"ParameterList","parameters":[],"src":"4033:0:18"},"scope":4208,"src":"3988:201:18","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":4115,"nodeType":"Block","src":"4349:86:18","statements":[{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":4106,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4073,"src":"4377:9:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":4107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4377:11:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4108,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4102,"src":"4390:8:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":4105,"name":"AdminChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3888,"src":"4364:12:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":4109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4364:35:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4110,"nodeType":"EmitStatement","src":"4359:40:18"},{"expression":{"arguments":[{"id":4112,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4102,"src":"4419:8:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4111,"name":"_setAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4099,"src":"4409:9:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4409:19:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4114,"nodeType":"ExpressionStatement","src":"4409:19:18"}]},"documentation":{"id":4100,"nodeType":"StructuredDocumentation","src":"4195:100:18","text":" @dev Changes the admin of the proxy.\n Emits an {AdminChanged} event."},"id":4116,"implemented":true,"kind":"function","modifiers":[],"name":"_changeAdmin","nameLocation":"4309:12:18","nodeType":"FunctionDefinition","parameters":{"id":4103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4102,"mutability":"mutable","name":"newAdmin","nameLocation":"4330:8:18","nodeType":"VariableDeclaration","scope":4116,"src":"4322:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4101,"name":"address","nodeType":"ElementaryTypeName","src":"4322:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4321:18:18"},"returnParameters":{"id":4104,"nodeType":"ParameterList","parameters":[],"src":"4349:0:18"},"scope":4208,"src":"4300:135:18","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"constant":true,"documentation":{"id":4117,"nodeType":"StructuredDocumentation","src":"4441:232:18","text":" @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor."},"id":4120,"mutability":"constant","name":"_BEACON_SLOT","nameLocation":"4704:12:18","nodeType":"VariableDeclaration","scope":4208,"src":"4678:107:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4118,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4678:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307861336630616437346535343233616562666438306433656634333436353738333335613961373261656165653539666636636233353832623335313333643530","id":4119,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4719:66:18","typeDescriptions":{"typeIdentifier":"t_rational_74152234768234802001998023604048924213078445070507226371336425913862612794704_by_1","typeString":"int_const 7415...(69 digits omitted)...4704"},"value":"0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50"},"visibility":"internal"},{"body":{"id":4132,"nodeType":"Block","src":"4902:70:18","statements":[{"expression":{"expression":{"arguments":[{"id":4128,"name":"_BEACON_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4120,"src":"4946:12:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4126,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4881,"src":"4919:11:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$4881_$","typeString":"type(library StorageSlot)"}},"id":4127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4931:14:18","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":4803,"src":"4919:26:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$4777_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":4129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4919:40:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$4777_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":4130,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4960:5:18","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":4776,"src":"4919:46:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":4125,"id":4131,"nodeType":"Return","src":"4912:53:18"}]},"documentation":{"id":4121,"nodeType":"StructuredDocumentation","src":"4792:51:18","text":" @dev Returns the current beacon."},"id":4133,"implemented":true,"kind":"function","modifiers":[],"name":"_getBeacon","nameLocation":"4857:10:18","nodeType":"FunctionDefinition","parameters":{"id":4122,"nodeType":"ParameterList","parameters":[],"src":"4867:2:18"},"returnParameters":{"id":4125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4124,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4133,"src":"4893:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4123,"name":"address","nodeType":"ElementaryTypeName","src":"4893:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4892:9:18"},"scope":4208,"src":"4848:124:18","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4168,"nodeType":"Block","src":"5101:324:18","statements":[{"expression":{"arguments":[{"arguments":[{"id":4142,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4136,"src":"5138:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":4140,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4741,"src":"5119:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$4741_$","typeString":"type(library Address)"}},"id":4141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5127:10:18","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":4429,"src":"5119:18:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":4143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5119:29:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313936373a206e657720626561636f6e206973206e6f74206120636f6e7472616374","id":4144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5150:39:18","typeDescriptions":{"typeIdentifier":"t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470","typeString":"literal_string \"ERC1967: new beacon is not a contract\""},"value":"ERC1967: new beacon is not a contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470","typeString":"literal_string \"ERC1967: new beacon is not a contract\""}],"id":4139,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5111:7:18","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5111:79:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4146,"nodeType":"ExpressionStatement","src":"5111:79:18"},{"expression":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":4151,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4136,"src":"5248:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4150,"name":"IBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4336,"src":"5240:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBeacon_$4336_$","typeString":"type(contract IBeacon)"}},"id":4152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5240:18:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBeacon_$4336","typeString":"contract IBeacon"}},"id":4153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5259:14:18","memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":4335,"src":"5240:33:18","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":4154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5240:35:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":4148,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4741,"src":"5221:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$4741_$","typeString":"type(library Address)"}},"id":4149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5229:10:18","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":4429,"src":"5221:18:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":4155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5221:55:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313936373a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374","id":4156,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5290:50:18","typeDescriptions":{"typeIdentifier":"t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8","typeString":"literal_string \"ERC1967: beacon implementation is not a contract\""},"value":"ERC1967: beacon implementation is not a contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8","typeString":"literal_string \"ERC1967: beacon implementation is not a contract\""}],"id":4147,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5200:7:18","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5200:150:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4158,"nodeType":"ExpressionStatement","src":"5200:150:18"},{"expression":{"id":4166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":4162,"name":"_BEACON_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4120,"src":"5387:12:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4159,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4881,"src":"5360:11:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$4881_$","typeString":"type(library StorageSlot)"}},"id":4161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5372:14:18","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":4803,"src":"5360:26:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$4777_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":4163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5360:40:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$4777_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":4164,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5401:5:18","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":4776,"src":"5360:46:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4165,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4136,"src":"5409:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5360:58:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4167,"nodeType":"ExpressionStatement","src":"5360:58:18"}]},"documentation":{"id":4134,"nodeType":"StructuredDocumentation","src":"4978:71:18","text":" @dev Stores a new beacon in the EIP1967 beacon slot."},"id":4169,"implemented":true,"kind":"function","modifiers":[],"name":"_setBeacon","nameLocation":"5063:10:18","nodeType":"FunctionDefinition","parameters":{"id":4137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4136,"mutability":"mutable","name":"newBeacon","nameLocation":"5082:9:18","nodeType":"VariableDeclaration","scope":4169,"src":"5074:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4135,"name":"address","nodeType":"ElementaryTypeName","src":"5074:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5073:19:18"},"returnParameters":{"id":4138,"nodeType":"ParameterList","parameters":[],"src":"5101:0:18"},"scope":4208,"src":"5054:371:18","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":4206,"nodeType":"Block","src":"5824:217:18","statements":[{"expression":{"arguments":[{"id":4180,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4172,"src":"5845:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4179,"name":"_setBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4169,"src":"5834:10:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5834:21:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4182,"nodeType":"ExpressionStatement","src":"5834:21:18"},{"eventCall":{"arguments":[{"id":4184,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4172,"src":"5885:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4183,"name":"BeaconUpgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3893,"src":"5870:14:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5870:25:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4186,"nodeType":"EmitStatement","src":"5865:30:18"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4187,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4174,"src":"5909:4:18","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5914:6:18","memberName":"length","nodeType":"MemberAccess","src":"5909:11:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":4189,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5923:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5909:15:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"id":4191,"name":"forceCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4176,"src":"5928:9:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5909:28:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4205,"nodeType":"IfStatement","src":"5905:130:18","trueBody":{"id":4204,"nodeType":"Block","src":"5939:96:18","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":4197,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4172,"src":"5990:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4196,"name":"IBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4336,"src":"5982:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBeacon_$4336_$","typeString":"type(contract IBeacon)"}},"id":4198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5982:18:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBeacon_$4336","typeString":"contract IBeacon"}},"id":4199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6001:14:18","memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":4335,"src":"5982:33:18","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":4200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5982:35:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4201,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4174,"src":"6019:4:18","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":4193,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4741,"src":"5953:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$4741_$","typeString":"type(library Address)"}},"id":4195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5961:20:18","memberName":"functionDelegateCall","nodeType":"MemberAccess","referencedDeclaration":4628,"src":"5953:28:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":4202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5953:71:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4203,"nodeType":"ExpressionStatement","src":"5953:71:18"}]}}]},"documentation":{"id":4170,"nodeType":"StructuredDocumentation","src":"5431:292:18","text":" @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n Emits a {BeaconUpgraded} event."},"id":4207,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeBeaconToAndCall","nameLocation":"5737:23:18","nodeType":"FunctionDefinition","parameters":{"id":4177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4172,"mutability":"mutable","name":"newBeacon","nameLocation":"5769:9:18","nodeType":"VariableDeclaration","scope":4207,"src":"5761:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4171,"name":"address","nodeType":"ElementaryTypeName","src":"5761:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4174,"mutability":"mutable","name":"data","nameLocation":"5793:4:18","nodeType":"VariableDeclaration","scope":4207,"src":"5780:17:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4173,"name":"bytes","nodeType":"ElementaryTypeName","src":"5780:5:18","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4176,"mutability":"mutable","name":"forceCall","nameLocation":"5804:9:18","nodeType":"VariableDeclaration","scope":4207,"src":"5799:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4175,"name":"bool","nodeType":"ElementaryTypeName","src":"5799:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5760:54:18"},"returnParameters":{"id":4178,"nodeType":"ParameterList","parameters":[],"src":"5824:0:18"},"scope":4208,"src":"5728:313:18","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":4209,"src":"517:5526:18","usedErrors":[],"usedEvents":[3881,3888,3893]}],"src":"116:5928:18"},"id":18},"@openzeppelin/contracts/proxy/Proxy.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/proxy/Proxy.sol","exportedSymbols":{"Proxy":[4260]},"id":4261,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4210,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"99:23:19"},{"abstract":true,"baseContracts":[],"canonicalName":"Proxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":4211,"nodeType":"StructuredDocumentation","src":"124:598:19","text":" @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n be specified by overriding the virtual {_implementation} function.\n Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n different contract through the {_delegate} function.\n The success and return data of the delegated call will be returned back to the caller of the proxy."},"fullyImplemented":false,"id":4260,"linearizedBaseContracts":[4260],"name":"Proxy","nameLocation":"741:5:19","nodeType":"ContractDefinition","nodes":[{"body":{"id":4218,"nodeType":"Block","src":"1008:835:19","statements":[{"AST":{"nativeSrc":"1027:810:19","nodeType":"YulBlock","src":"1027:810:19","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1280:1:19","nodeType":"YulLiteral","src":"1280:1:19","type":"","value":"0"},{"kind":"number","nativeSrc":"1283:1:19","nodeType":"YulLiteral","src":"1283:1:19","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nativeSrc":"1286:12:19","nodeType":"YulIdentifier","src":"1286:12:19"},"nativeSrc":"1286:14:19","nodeType":"YulFunctionCall","src":"1286:14:19"}],"functionName":{"name":"calldatacopy","nativeSrc":"1267:12:19","nodeType":"YulIdentifier","src":"1267:12:19"},"nativeSrc":"1267:34:19","nodeType":"YulFunctionCall","src":"1267:34:19"},"nativeSrc":"1267:34:19","nodeType":"YulExpressionStatement","src":"1267:34:19"},{"nativeSrc":"1428:74:19","nodeType":"YulVariableDeclaration","src":"1428:74:19","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"1455:3:19","nodeType":"YulIdentifier","src":"1455:3:19"},"nativeSrc":"1455:5:19","nodeType":"YulFunctionCall","src":"1455:5:19"},{"name":"implementation","nativeSrc":"1462:14:19","nodeType":"YulIdentifier","src":"1462:14:19"},{"kind":"number","nativeSrc":"1478:1:19","nodeType":"YulLiteral","src":"1478:1:19","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nativeSrc":"1481:12:19","nodeType":"YulIdentifier","src":"1481:12:19"},"nativeSrc":"1481:14:19","nodeType":"YulFunctionCall","src":"1481:14:19"},{"kind":"number","nativeSrc":"1497:1:19","nodeType":"YulLiteral","src":"1497:1:19","type":"","value":"0"},{"kind":"number","nativeSrc":"1500:1:19","nodeType":"YulLiteral","src":"1500:1:19","type":"","value":"0"}],"functionName":{"name":"delegatecall","nativeSrc":"1442:12:19","nodeType":"YulIdentifier","src":"1442:12:19"},"nativeSrc":"1442:60:19","nodeType":"YulFunctionCall","src":"1442:60:19"},"variables":[{"name":"result","nativeSrc":"1432:6:19","nodeType":"YulTypedName","src":"1432:6:19","type":""}]},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1570:1:19","nodeType":"YulLiteral","src":"1570:1:19","type":"","value":"0"},{"kind":"number","nativeSrc":"1573:1:19","nodeType":"YulLiteral","src":"1573:1:19","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"1576:14:19","nodeType":"YulIdentifier","src":"1576:14:19"},"nativeSrc":"1576:16:19","nodeType":"YulFunctionCall","src":"1576:16:19"}],"functionName":{"name":"returndatacopy","nativeSrc":"1555:14:19","nodeType":"YulIdentifier","src":"1555:14:19"},"nativeSrc":"1555:38:19","nodeType":"YulFunctionCall","src":"1555:38:19"},"nativeSrc":"1555:38:19","nodeType":"YulExpressionStatement","src":"1555:38:19"},{"cases":[{"body":{"nativeSrc":"1688:59:19","nodeType":"YulBlock","src":"1688:59:19","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1713:1:19","nodeType":"YulLiteral","src":"1713:1:19","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"1716:14:19","nodeType":"YulIdentifier","src":"1716:14:19"},"nativeSrc":"1716:16:19","nodeType":"YulFunctionCall","src":"1716:16:19"}],"functionName":{"name":"revert","nativeSrc":"1706:6:19","nodeType":"YulIdentifier","src":"1706:6:19"},"nativeSrc":"1706:27:19","nodeType":"YulFunctionCall","src":"1706:27:19"},"nativeSrc":"1706:27:19","nodeType":"YulExpressionStatement","src":"1706:27:19"}]},"nativeSrc":"1681:66:19","nodeType":"YulCase","src":"1681:66:19","value":{"kind":"number","nativeSrc":"1686:1:19","nodeType":"YulLiteral","src":"1686:1:19","type":"","value":"0"}},{"body":{"nativeSrc":"1768:59:19","nodeType":"YulBlock","src":"1768:59:19","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1793:1:19","nodeType":"YulLiteral","src":"1793:1:19","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"1796:14:19","nodeType":"YulIdentifier","src":"1796:14:19"},"nativeSrc":"1796:16:19","nodeType":"YulFunctionCall","src":"1796:16:19"}],"functionName":{"name":"return","nativeSrc":"1786:6:19","nodeType":"YulIdentifier","src":"1786:6:19"},"nativeSrc":"1786:27:19","nodeType":"YulFunctionCall","src":"1786:27:19"},"nativeSrc":"1786:27:19","nodeType":"YulExpressionStatement","src":"1786:27:19"}]},"nativeSrc":"1760:67:19","nodeType":"YulCase","src":"1760:67:19","value":"default"}],"expression":{"name":"result","nativeSrc":"1614:6:19","nodeType":"YulIdentifier","src":"1614:6:19"},"nativeSrc":"1607:220:19","nodeType":"YulSwitch","src":"1607:220:19"}]},"evmVersion":"paris","externalReferences":[{"declaration":4214,"isOffset":false,"isSlot":false,"src":"1462:14:19","valueSize":1}],"id":4217,"nodeType":"InlineAssembly","src":"1018:819:19"}]},"documentation":{"id":4212,"nodeType":"StructuredDocumentation","src":"753:190:19","text":" @dev Delegates the current call to `implementation`.\n This function does not return to its internal call site, it will return directly to the external caller."},"id":4219,"implemented":true,"kind":"function","modifiers":[],"name":"_delegate","nameLocation":"957:9:19","nodeType":"FunctionDefinition","parameters":{"id":4215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4214,"mutability":"mutable","name":"implementation","nameLocation":"975:14:19","nodeType":"VariableDeclaration","scope":4219,"src":"967:22:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4213,"name":"address","nodeType":"ElementaryTypeName","src":"967:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"966:24:19"},"returnParameters":{"id":4216,"nodeType":"ParameterList","parameters":[],"src":"1008:0:19"},"scope":4260,"src":"948:895:19","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"documentation":{"id":4220,"nodeType":"StructuredDocumentation","src":"1849:173:19","text":" @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\n and {_fallback} should delegate."},"id":4225,"implemented":false,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"2036:15:19","nodeType":"FunctionDefinition","parameters":{"id":4221,"nodeType":"ParameterList","parameters":[],"src":"2051:2:19"},"returnParameters":{"id":4224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4223,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4225,"src":"2085:7:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4222,"name":"address","nodeType":"ElementaryTypeName","src":"2085:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2084:9:19"},"scope":4260,"src":"2027:67:19","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":4237,"nodeType":"Block","src":"2360:72:19","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4229,"name":"_beforeFallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4259,"src":"2370:15:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":4230,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2370:17:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4231,"nodeType":"ExpressionStatement","src":"2370:17:19"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":4233,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4225,"src":"2407:15:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":4234,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2407:17:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4232,"name":"_delegate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"2397:9:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2397:28:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4236,"nodeType":"ExpressionStatement","src":"2397:28:19"}]},"documentation":{"id":4226,"nodeType":"StructuredDocumentation","src":"2100:217:19","text":" @dev Delegates the current call to the address returned by `_implementation()`.\n This function does not return to its internal call site, it will return directly to the external caller."},"id":4238,"implemented":true,"kind":"function","modifiers":[],"name":"_fallback","nameLocation":"2331:9:19","nodeType":"FunctionDefinition","parameters":{"id":4227,"nodeType":"ParameterList","parameters":[],"src":"2340:2:19"},"returnParameters":{"id":4228,"nodeType":"ParameterList","parameters":[],"src":"2360:0:19"},"scope":4260,"src":"2322:110:19","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":4245,"nodeType":"Block","src":"2665:28:19","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4242,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4238,"src":"2675:9:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":4243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2675:11:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4244,"nodeType":"ExpressionStatement","src":"2675:11:19"}]},"documentation":{"id":4239,"nodeType":"StructuredDocumentation","src":"2438:186:19","text":" @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n function in the contract matches the call data."},"id":4246,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":4240,"nodeType":"ParameterList","parameters":[],"src":"2637:2:19"},"returnParameters":{"id":4241,"nodeType":"ParameterList","parameters":[],"src":"2665:0:19"},"scope":4260,"src":"2629:64:19","stateMutability":"payable","virtual":true,"visibility":"external"},{"body":{"id":4253,"nodeType":"Block","src":"2888:28:19","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4250,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4238,"src":"2898:9:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":4251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2898:11:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4252,"nodeType":"ExpressionStatement","src":"2898:11:19"}]},"documentation":{"id":4247,"nodeType":"StructuredDocumentation","src":"2699:149:19","text":" @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n is empty."},"id":4254,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":4248,"nodeType":"ParameterList","parameters":[],"src":"2860:2:19"},"returnParameters":{"id":4249,"nodeType":"ParameterList","parameters":[],"src":"2888:0:19"},"scope":4260,"src":"2853:63:19","stateMutability":"payable","virtual":true,"visibility":"external"},{"body":{"id":4258,"nodeType":"Block","src":"3242:2:19","statements":[]},"documentation":{"id":4255,"nodeType":"StructuredDocumentation","src":"2922:271:19","text":" @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n call, or as part of the Solidity `fallback` or `receive` functions.\n If overridden should call `super._beforeFallback()`."},"id":4259,"implemented":true,"kind":"function","modifiers":[],"name":"_beforeFallback","nameLocation":"3207:15:19","nodeType":"FunctionDefinition","parameters":{"id":4256,"nodeType":"ParameterList","parameters":[],"src":"3222:2:19"},"returnParameters":{"id":4257,"nodeType":"ParameterList","parameters":[],"src":"3242:0:19"},"scope":4260,"src":"3198:46:19","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":4261,"src":"723:2523:19","usedErrors":[],"usedEvents":[]}],"src":"99:3148:19"},"id":19},"@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol","exportedSymbols":{"Address":[4741],"BeaconProxy":[4326],"ERC1967Upgrade":[4208],"IBeacon":[4336],"IERC1822Proxiable":[3904],"IERC1967":[3894],"Proxy":[4260],"StorageSlot":[4881]},"id":4327,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4262,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"112:23:20"},{"absolutePath":"@openzeppelin/contracts/proxy/beacon/IBeacon.sol","file":"./IBeacon.sol","id":4263,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4327,"sourceUnit":4337,"src":"137:23:20","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/proxy/Proxy.sol","file":"../Proxy.sol","id":4264,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4327,"sourceUnit":4261,"src":"161:22:20","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol","file":"../ERC1967/ERC1967Upgrade.sol","id":4265,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4327,"sourceUnit":4209,"src":"184:39:20","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4267,"name":"Proxy","nameLocations":["604:5:20"],"nodeType":"IdentifierPath","referencedDeclaration":4260,"src":"604:5:20"},"id":4268,"nodeType":"InheritanceSpecifier","src":"604:5:20"},{"baseName":{"id":4269,"name":"ERC1967Upgrade","nameLocations":["611:14:20"],"nodeType":"IdentifierPath","referencedDeclaration":4208,"src":"611:14:20"},"id":4270,"nodeType":"InheritanceSpecifier","src":"611:14:20"}],"canonicalName":"BeaconProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":4266,"nodeType":"StructuredDocumentation","src":"225:354:20","text":" @dev This contract implements a proxy that gets the implementation address for each call from an {UpgradeableBeacon}.\n The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n conflict with the storage layout of the implementation behind the proxy.\n _Available since v3.4._"},"fullyImplemented":true,"id":4326,"linearizedBaseContracts":[4326,4208,3894,4260],"name":"BeaconProxy","nameLocation":"589:11:20","nodeType":"ContractDefinition","nodes":[{"body":{"id":4284,"nodeType":"Block","src":"1115:61:20","statements":[{"expression":{"arguments":[{"id":4279,"name":"beacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4273,"src":"1149:6:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4280,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4275,"src":"1157:4:20","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"66616c7365","id":4281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1163:5:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":4278,"name":"_upgradeBeaconToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4207,"src":"1125:23:20","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":4282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1125:44:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4283,"nodeType":"ExpressionStatement","src":"1125:44:20"}]},"documentation":{"id":4271,"nodeType":"StructuredDocumentation","src":"632:423:20","text":" @dev Initializes the proxy with `beacon`.\n If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity\n constructor.\n Requirements:\n - `beacon` must be a contract with the interface {IBeacon}."},"id":4285,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":4276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4273,"mutability":"mutable","name":"beacon","nameLocation":"1080:6:20","nodeType":"VariableDeclaration","scope":4285,"src":"1072:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4272,"name":"address","nodeType":"ElementaryTypeName","src":"1072:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4275,"mutability":"mutable","name":"data","nameLocation":"1101:4:20","nodeType":"VariableDeclaration","scope":4285,"src":"1088:17:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4274,"name":"bytes","nodeType":"ElementaryTypeName","src":"1088:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1071:35:20"},"returnParameters":{"id":4277,"nodeType":"ParameterList","parameters":[],"src":"1115:0:20"},"scope":4326,"src":"1060:116:20","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":4294,"nodeType":"Block","src":"1305:36:20","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4291,"name":"_getBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4133,"src":"1322:10:20","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":4292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1322:12:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":4290,"id":4293,"nodeType":"Return","src":"1315:19:20"}]},"documentation":{"id":4286,"nodeType":"StructuredDocumentation","src":"1182:59:20","text":" @dev Returns the current beacon address."},"id":4295,"implemented":true,"kind":"function","modifiers":[],"name":"_beacon","nameLocation":"1255:7:20","nodeType":"FunctionDefinition","parameters":{"id":4287,"nodeType":"ParameterList","parameters":[],"src":"1262:2:20"},"returnParameters":{"id":4290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4289,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4295,"src":"1296:7:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4288,"name":"address","nodeType":"ElementaryTypeName","src":"1296:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1295:9:20"},"scope":4326,"src":"1246:95:20","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[4225],"body":{"id":4309,"nodeType":"Block","src":"1520:62:20","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":4303,"name":"_getBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4133,"src":"1545:10:20","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":4304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1545:12:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4302,"name":"IBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4336,"src":"1537:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBeacon_$4336_$","typeString":"type(contract IBeacon)"}},"id":4305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1537:21:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBeacon_$4336","typeString":"contract IBeacon"}},"id":4306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1559:14:20","memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":4335,"src":"1537:36:20","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":4307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1537:38:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":4301,"id":4308,"nodeType":"Return","src":"1530:45:20"}]},"documentation":{"id":4296,"nodeType":"StructuredDocumentation","src":"1347:92:20","text":" @dev Returns the current implementation address of the associated beacon."},"id":4310,"implemented":true,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"1453:15:20","nodeType":"FunctionDefinition","overrides":{"id":4298,"nodeType":"OverrideSpecifier","overrides":[],"src":"1493:8:20"},"parameters":{"id":4297,"nodeType":"ParameterList","parameters":[],"src":"1468:2:20"},"returnParameters":{"id":4301,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4300,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4310,"src":"1511:7:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4299,"name":"address","nodeType":"ElementaryTypeName","src":"1511:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1510:9:20"},"scope":4326,"src":"1444:138:20","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":4324,"nodeType":"Block","src":"2032:61:20","statements":[{"expression":{"arguments":[{"id":4319,"name":"beacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4313,"src":"2066:6:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4320,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4315,"src":"2074:4:20","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"66616c7365","id":4321,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2080:5:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":4318,"name":"_upgradeBeaconToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4207,"src":"2042:23:20","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":4322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2042:44:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4323,"nodeType":"ExpressionStatement","src":"2042:44:20"}]},"documentation":{"id":4311,"nodeType":"StructuredDocumentation","src":"1588:367:20","text":" @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n Requirements:\n - `beacon` must be a contract.\n - The implementation returned by `beacon` must be a contract."},"id":4325,"implemented":true,"kind":"function","modifiers":[],"name":"_setBeacon","nameLocation":"1969:10:20","nodeType":"FunctionDefinition","parameters":{"id":4316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4313,"mutability":"mutable","name":"beacon","nameLocation":"1988:6:20","nodeType":"VariableDeclaration","scope":4325,"src":"1980:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4312,"name":"address","nodeType":"ElementaryTypeName","src":"1980:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4315,"mutability":"mutable","name":"data","nameLocation":"2009:4:20","nodeType":"VariableDeclaration","scope":4325,"src":"1996:17:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4314,"name":"bytes","nodeType":"ElementaryTypeName","src":"1996:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1979:35:20"},"returnParameters":{"id":4317,"nodeType":"ParameterList","parameters":[],"src":"2032:0:20"},"scope":4326,"src":"1960:133:20","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":4327,"src":"580:1515:20","usedErrors":[],"usedEvents":[3881,3888,3893]}],"src":"112:1984:20"},"id":20},"@openzeppelin/contracts/proxy/beacon/IBeacon.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/proxy/beacon/IBeacon.sol","exportedSymbols":{"IBeacon":[4336]},"id":4337,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4328,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"93:23:21"},{"abstract":false,"baseContracts":[],"canonicalName":"IBeacon","contractDependencies":[],"contractKind":"interface","documentation":{"id":4329,"nodeType":"StructuredDocumentation","src":"118:79:21","text":" @dev This is the interface that {BeaconProxy} expects of its beacon."},"fullyImplemented":false,"id":4336,"linearizedBaseContracts":[4336],"name":"IBeacon","nameLocation":"208:7:21","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4330,"nodeType":"StructuredDocumentation","src":"222:162:21","text":" @dev Must return an address that can be used as a delegate call target.\n {BeaconProxy} will check that this address is a contract."},"functionSelector":"5c60da1b","id":4335,"implemented":false,"kind":"function","modifiers":[],"name":"implementation","nameLocation":"398:14:21","nodeType":"FunctionDefinition","parameters":{"id":4331,"nodeType":"ParameterList","parameters":[],"src":"412:2:21"},"returnParameters":{"id":4334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4333,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4335,"src":"438:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4332,"name":"address","nodeType":"ElementaryTypeName","src":"438:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"437:9:21"},"scope":4336,"src":"389:58:21","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":4337,"src":"198:251:21","usedErrors":[],"usedEvents":[]}],"src":"93:357:21"},"id":21},"@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol","exportedSymbols":{"Address":[4741],"Context":[4771],"IBeacon":[4336],"Ownable":[3873],"UpgradeableBeacon":[4411]},"id":4412,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4338,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"103:23:22"},{"absolutePath":"@openzeppelin/contracts/proxy/beacon/IBeacon.sol","file":"./IBeacon.sol","id":4339,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4412,"sourceUnit":4337,"src":"128:23:22","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"../../access/Ownable.sol","id":4340,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4412,"sourceUnit":3874,"src":"152:34:22","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"../../utils/Address.sol","id":4341,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4412,"sourceUnit":4742,"src":"187:33:22","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4343,"name":"IBeacon","nameLocations":["573:7:22"],"nodeType":"IdentifierPath","referencedDeclaration":4336,"src":"573:7:22"},"id":4344,"nodeType":"InheritanceSpecifier","src":"573:7:22"},{"baseName":{"id":4345,"name":"Ownable","nameLocations":["582:7:22"],"nodeType":"IdentifierPath","referencedDeclaration":3873,"src":"582:7:22"},"id":4346,"nodeType":"InheritanceSpecifier","src":"582:7:22"}],"canonicalName":"UpgradeableBeacon","contractDependencies":[],"contractKind":"contract","documentation":{"id":4342,"nodeType":"StructuredDocumentation","src":"222:320:22","text":" @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n implementation contract, which is where they will delegate all function calls.\n An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon."},"fullyImplemented":true,"id":4411,"linearizedBaseContracts":[4411,3873,4771,4336],"name":"UpgradeableBeacon","nameLocation":"552:17:22","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":4348,"mutability":"mutable","name":"_implementation","nameLocation":"612:15:22","nodeType":"VariableDeclaration","scope":4411,"src":"596:31:22","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4347,"name":"address","nodeType":"ElementaryTypeName","src":"596:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"documentation":{"id":4349,"nodeType":"StructuredDocumentation","src":"634:90:22","text":" @dev Emitted when the implementation returned by the beacon is changed."},"eventSelector":"bc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","id":4353,"name":"Upgraded","nameLocation":"735:8:22","nodeType":"EventDefinition","parameters":{"id":4352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4351,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"760:14:22","nodeType":"VariableDeclaration","scope":4353,"src":"744:30:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4350,"name":"address","nodeType":"ElementaryTypeName","src":"744:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"743:32:22"},"src":"729:47:22"},{"body":{"id":4363,"nodeType":"Block","src":"968:52:22","statements":[{"expression":{"arguments":[{"id":4360,"name":"implementation_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4356,"src":"997:15:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4359,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4410,"src":"978:18:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"978:35:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4362,"nodeType":"ExpressionStatement","src":"978:35:22"}]},"documentation":{"id":4354,"nodeType":"StructuredDocumentation","src":"782:144:22","text":" @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n beacon."},"id":4364,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":4357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4356,"mutability":"mutable","name":"implementation_","nameLocation":"951:15:22","nodeType":"VariableDeclaration","scope":4364,"src":"943:23:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4355,"name":"address","nodeType":"ElementaryTypeName","src":"943:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"942:25:22"},"returnParameters":{"id":4358,"nodeType":"ParameterList","parameters":[],"src":"968:0:22"},"scope":4411,"src":"931:89:22","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[4335],"body":{"id":4373,"nodeType":"Block","src":"1171:39:22","statements":[{"expression":{"id":4371,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4348,"src":"1188:15:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":4370,"id":4372,"nodeType":"Return","src":"1181:22:22"}]},"documentation":{"id":4365,"nodeType":"StructuredDocumentation","src":"1026:67:22","text":" @dev Returns the current implementation address."},"functionSelector":"5c60da1b","id":4374,"implemented":true,"kind":"function","modifiers":[],"name":"implementation","nameLocation":"1107:14:22","nodeType":"FunctionDefinition","overrides":{"id":4367,"nodeType":"OverrideSpecifier","overrides":[],"src":"1144:8:22"},"parameters":{"id":4366,"nodeType":"ParameterList","parameters":[],"src":"1121:2:22"},"returnParameters":{"id":4370,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4369,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4374,"src":"1162:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4368,"name":"address","nodeType":"ElementaryTypeName","src":"1162:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1161:9:22"},"scope":4411,"src":"1098:112:22","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":4390,"nodeType":"Block","src":"1540:96:22","statements":[{"expression":{"arguments":[{"id":4383,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4377,"src":"1569:17:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4382,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4410,"src":"1550:18:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4384,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1550:37:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4385,"nodeType":"ExpressionStatement","src":"1550:37:22"},{"eventCall":{"arguments":[{"id":4387,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4377,"src":"1611:17:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4386,"name":"Upgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4353,"src":"1602:8:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1602:27:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4389,"nodeType":"EmitStatement","src":"1597:32:22"}]},"documentation":{"id":4375,"nodeType":"StructuredDocumentation","src":"1216:248:22","text":" @dev Upgrades the beacon to a new implementation.\n Emits an {Upgraded} event.\n Requirements:\n - msg.sender must be the owner of the contract.\n - `newImplementation` must be a contract."},"functionSelector":"3659cfe6","id":4391,"implemented":true,"kind":"function","modifiers":[{"id":4380,"kind":"modifierInvocation","modifierName":{"id":4379,"name":"onlyOwner","nameLocations":["1530:9:22"],"nodeType":"IdentifierPath","referencedDeclaration":3792,"src":"1530:9:22"},"nodeType":"ModifierInvocation","src":"1530:9:22"}],"name":"upgradeTo","nameLocation":"1478:9:22","nodeType":"FunctionDefinition","parameters":{"id":4378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4377,"mutability":"mutable","name":"newImplementation","nameLocation":"1496:17:22","nodeType":"VariableDeclaration","scope":4391,"src":"1488:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4376,"name":"address","nodeType":"ElementaryTypeName","src":"1488:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1487:27:22"},"returnParameters":{"id":4381,"nodeType":"ParameterList","parameters":[],"src":"1540:0:22"},"scope":4411,"src":"1469:167:22","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":4409,"nodeType":"Block","src":"1874:163:22","statements":[{"expression":{"arguments":[{"arguments":[{"id":4400,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4394,"src":"1911:17:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":4398,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4741,"src":"1892:7:22","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$4741_$","typeString":"type(library Address)"}},"id":4399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1900:10:22","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":4429,"src":"1892:18:22","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":4401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1892:37:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374","id":4402,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1931:53:22","typeDescriptions":{"typeIdentifier":"t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6","typeString":"literal_string \"UpgradeableBeacon: implementation is not a contract\""},"value":"UpgradeableBeacon: implementation is not a contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6","typeString":"literal_string \"UpgradeableBeacon: implementation is not a contract\""}],"id":4397,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1884:7:22","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1884:101:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4404,"nodeType":"ExpressionStatement","src":"1884:101:22"},{"expression":{"id":4407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4405,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4348,"src":"1995:15:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4406,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4394,"src":"2013:17:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1995:35:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4408,"nodeType":"ExpressionStatement","src":"1995:35:22"}]},"documentation":{"id":4392,"nodeType":"StructuredDocumentation","src":"1642:164:22","text":" @dev Sets the implementation contract address for this beacon\n Requirements:\n - `newImplementation` must be a contract."},"id":4410,"implemented":true,"kind":"function","modifiers":[],"name":"_setImplementation","nameLocation":"1820:18:22","nodeType":"FunctionDefinition","parameters":{"id":4395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4394,"mutability":"mutable","name":"newImplementation","nameLocation":"1847:17:22","nodeType":"VariableDeclaration","scope":4410,"src":"1839:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4393,"name":"address","nodeType":"ElementaryTypeName","src":"1839:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1838:27:22"},"returnParameters":{"id":4396,"nodeType":"ParameterList","parameters":[],"src":"1874:0:22"},"scope":4411,"src":"1811:226:22","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":4412,"src":"543:1496:22","usedErrors":[],"usedEvents":[3774,4353]}],"src":"103:1937:22"},"id":22},"@openzeppelin/contracts/utils/Address.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","exportedSymbols":{"Address":[4741]},"id":4742,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4413,"literals":["solidity","^","0.8",".1"],"nodeType":"PragmaDirective","src":"101:23:23"},{"abstract":false,"baseContracts":[],"canonicalName":"Address","contractDependencies":[],"contractKind":"library","documentation":{"id":4414,"nodeType":"StructuredDocumentation","src":"126:67:23","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":4741,"linearizedBaseContracts":[4741],"name":"Address","nameLocation":"202:7:23","nodeType":"ContractDefinition","nodes":[{"body":{"id":4428,"nodeType":"Block","src":"1478:254:23","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":4422,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4417,"src":"1702:7:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1710:4:23","memberName":"code","nodeType":"MemberAccess","src":"1702:12:23","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1715:6:23","memberName":"length","nodeType":"MemberAccess","src":"1702:19:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":4425,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1724:1:23","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1702:23:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":4421,"id":4427,"nodeType":"Return","src":"1695:30:23"}]},"documentation":{"id":4415,"nodeType":"StructuredDocumentation","src":"216:1191:23","text":" @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n  - an externally-owned account\n  - a contract in construction\n  - an address where a contract will be created\n  - an address where a contract lived, but was destroyed\n Furthermore, `isContract` will also return true if the target contract within\n the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\n which only has an effect at the end of a transaction.\n ====\n [IMPORTANT]\n ====\n You shouldn't rely on `isContract` to protect against flash loan attacks!\n Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n constructor.\n ===="},"id":4429,"implemented":true,"kind":"function","modifiers":[],"name":"isContract","nameLocation":"1421:10:23","nodeType":"FunctionDefinition","parameters":{"id":4418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4417,"mutability":"mutable","name":"account","nameLocation":"1440:7:23","nodeType":"VariableDeclaration","scope":4429,"src":"1432:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4416,"name":"address","nodeType":"ElementaryTypeName","src":"1432:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1431:17:23"},"returnParameters":{"id":4421,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4420,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4429,"src":"1472:4:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4419,"name":"bool","nodeType":"ElementaryTypeName","src":"1472:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1471:6:23"},"scope":4741,"src":"1412:320:23","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4462,"nodeType":"Block","src":"2718:241:23","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":4440,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2744:4:23","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$4741","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$4741","typeString":"library Address"}],"id":4439,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2736:7:23","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4438,"name":"address","nodeType":"ElementaryTypeName","src":"2736:7:23","typeDescriptions":{}}},"id":4441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2736:13:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2750:7:23","memberName":"balance","nodeType":"MemberAccess","src":"2736:21:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4443,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4434,"src":"2761:6:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2736:31:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","id":4445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2769:31:23","typeDescriptions":{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""},"value":"Address: insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""}],"id":4437,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2728:7:23","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2728:73:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4447,"nodeType":"ExpressionStatement","src":"2728:73:23"},{"assignments":[4449,null],"declarations":[{"constant":false,"id":4449,"mutability":"mutable","name":"success","nameLocation":"2818:7:23","nodeType":"VariableDeclaration","scope":4462,"src":"2813:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4448,"name":"bool","nodeType":"ElementaryTypeName","src":"2813:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":4456,"initialValue":{"arguments":[{"hexValue":"","id":4454,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2861:2:23","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":4450,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4432,"src":"2831:9:23","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":4451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2841:4:23","memberName":"call","nodeType":"MemberAccess","src":"2831:14:23","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":4453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":4452,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4434,"src":"2853:6:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"2831:29:23","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":4455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2831:33:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"2812:52:23"},{"expression":{"arguments":[{"id":4458,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4449,"src":"2882:7:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564","id":4459,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2891:60:23","typeDescriptions":{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""},"value":"Address: unable to send value, recipient may have reverted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""}],"id":4457,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2874:7:23","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2874:78:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4461,"nodeType":"ExpressionStatement","src":"2874:78:23"}]},"documentation":{"id":4430,"nodeType":"StructuredDocumentation","src":"1738:904:23","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":4463,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"2656:9:23","nodeType":"FunctionDefinition","parameters":{"id":4435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4432,"mutability":"mutable","name":"recipient","nameLocation":"2682:9:23","nodeType":"VariableDeclaration","scope":4463,"src":"2666:25:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":4431,"name":"address","nodeType":"ElementaryTypeName","src":"2666:15:23","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":4434,"mutability":"mutable","name":"amount","nameLocation":"2701:6:23","nodeType":"VariableDeclaration","scope":4463,"src":"2693:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4433,"name":"uint256","nodeType":"ElementaryTypeName","src":"2693:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2665:43:23"},"returnParameters":{"id":4436,"nodeType":"ParameterList","parameters":[],"src":"2718:0:23"},"scope":4741,"src":"2647:312:23","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4480,"nodeType":"Block","src":"3790:96:23","statements":[{"expression":{"arguments":[{"id":4474,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4466,"src":"3829:6:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4475,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4468,"src":"3837:4:23","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":4476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3843:1:23","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564","id":4477,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3846:32:23","typeDescriptions":{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""},"value":"Address: low-level call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""}],"id":4473,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[4521,4565],"referencedDeclaration":4565,"src":"3807:21:23","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":4478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3807:72:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":4472,"id":4479,"nodeType":"Return","src":"3800:79:23"}]},"documentation":{"id":4464,"nodeType":"StructuredDocumentation","src":"2965:731:23","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"},"id":4481,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"3710:12:23","nodeType":"FunctionDefinition","parameters":{"id":4469,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4466,"mutability":"mutable","name":"target","nameLocation":"3731:6:23","nodeType":"VariableDeclaration","scope":4481,"src":"3723:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4465,"name":"address","nodeType":"ElementaryTypeName","src":"3723:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4468,"mutability":"mutable","name":"data","nameLocation":"3752:4:23","nodeType":"VariableDeclaration","scope":4481,"src":"3739:17:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4467,"name":"bytes","nodeType":"ElementaryTypeName","src":"3739:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3722:35:23"},"returnParameters":{"id":4472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4471,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4481,"src":"3776:12:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4470,"name":"bytes","nodeType":"ElementaryTypeName","src":"3776:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3775:14:23"},"scope":4741,"src":"3701:185:23","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4500,"nodeType":"Block","src":"4255:76:23","statements":[{"expression":{"arguments":[{"id":4494,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4484,"src":"4294:6:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4495,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4486,"src":"4302:4:23","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":4496,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4308:1:23","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":4497,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4488,"src":"4311:12:23","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4493,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[4521,4565],"referencedDeclaration":4565,"src":"4272:21:23","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":4498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4272:52:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":4492,"id":4499,"nodeType":"Return","src":"4265:59:23"}]},"documentation":{"id":4482,"nodeType":"StructuredDocumentation","src":"3892:211:23","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":4501,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"4117:12:23","nodeType":"FunctionDefinition","parameters":{"id":4489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4484,"mutability":"mutable","name":"target","nameLocation":"4147:6:23","nodeType":"VariableDeclaration","scope":4501,"src":"4139:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4483,"name":"address","nodeType":"ElementaryTypeName","src":"4139:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4486,"mutability":"mutable","name":"data","nameLocation":"4176:4:23","nodeType":"VariableDeclaration","scope":4501,"src":"4163:17:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4485,"name":"bytes","nodeType":"ElementaryTypeName","src":"4163:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4488,"mutability":"mutable","name":"errorMessage","nameLocation":"4204:12:23","nodeType":"VariableDeclaration","scope":4501,"src":"4190:26:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4487,"name":"string","nodeType":"ElementaryTypeName","src":"4190:6:23","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4129:93:23"},"returnParameters":{"id":4492,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4491,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4501,"src":"4241:12:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4490,"name":"bytes","nodeType":"ElementaryTypeName","src":"4241:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4240:14:23"},"scope":4741,"src":"4108:223:23","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4520,"nodeType":"Block","src":"4806:111:23","statements":[{"expression":{"arguments":[{"id":4514,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4504,"src":"4845:6:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4515,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4506,"src":"4853:4:23","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":4516,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4508,"src":"4859:5:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564","id":4517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4866:43:23","typeDescriptions":{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""},"value":"Address: low-level call with value failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""}],"id":4513,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[4521,4565],"referencedDeclaration":4565,"src":"4823:21:23","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":4518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4823:87:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":4512,"id":4519,"nodeType":"Return","src":"4816:94:23"}]},"documentation":{"id":4502,"nodeType":"StructuredDocumentation","src":"4337:351:23","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"},"id":4521,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"4702:21:23","nodeType":"FunctionDefinition","parameters":{"id":4509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4504,"mutability":"mutable","name":"target","nameLocation":"4732:6:23","nodeType":"VariableDeclaration","scope":4521,"src":"4724:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4503,"name":"address","nodeType":"ElementaryTypeName","src":"4724:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4506,"mutability":"mutable","name":"data","nameLocation":"4753:4:23","nodeType":"VariableDeclaration","scope":4521,"src":"4740:17:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4505,"name":"bytes","nodeType":"ElementaryTypeName","src":"4740:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4508,"mutability":"mutable","name":"value","nameLocation":"4767:5:23","nodeType":"VariableDeclaration","scope":4521,"src":"4759:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4507,"name":"uint256","nodeType":"ElementaryTypeName","src":"4759:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4723:50:23"},"returnParameters":{"id":4512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4511,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4521,"src":"4792:12:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4510,"name":"bytes","nodeType":"ElementaryTypeName","src":"4792:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4791:14:23"},"scope":4741,"src":"4693:224:23","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4564,"nodeType":"Block","src":"5344:267:23","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":4538,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5370:4:23","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$4741","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$4741","typeString":"library Address"}],"id":4537,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5362:7:23","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4536,"name":"address","nodeType":"ElementaryTypeName","src":"5362:7:23","typeDescriptions":{}}},"id":4539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5362:13:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5376:7:23","memberName":"balance","nodeType":"MemberAccess","src":"5362:21:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4541,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4528,"src":"5387:5:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5362:30:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c","id":4543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5394:40:23","typeDescriptions":{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""},"value":"Address: insufficient balance for call"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""}],"id":4535,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5354:7:23","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5354:81:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4545,"nodeType":"ExpressionStatement","src":"5354:81:23"},{"assignments":[4547,4549],"declarations":[{"constant":false,"id":4547,"mutability":"mutable","name":"success","nameLocation":"5451:7:23","nodeType":"VariableDeclaration","scope":4564,"src":"5446:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4546,"name":"bool","nodeType":"ElementaryTypeName","src":"5446:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4549,"mutability":"mutable","name":"returndata","nameLocation":"5473:10:23","nodeType":"VariableDeclaration","scope":4564,"src":"5460:23:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4548,"name":"bytes","nodeType":"ElementaryTypeName","src":"5460:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":4556,"initialValue":{"arguments":[{"id":4554,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4526,"src":"5513:4:23","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":4550,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4524,"src":"5487:6:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5494:4:23","memberName":"call","nodeType":"MemberAccess","src":"5487:11:23","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":4553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":4552,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4528,"src":"5506:5:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"5487:25:23","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":4555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5487:31:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5445:73:23"},{"expression":{"arguments":[{"id":4558,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4524,"src":"5562:6:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4559,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4547,"src":"5570:7:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":4560,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4549,"src":"5579:10:23","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":4561,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4530,"src":"5591:12:23","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4557,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4696,"src":"5535:26:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":4562,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5535:69:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":4534,"id":4563,"nodeType":"Return","src":"5528:76:23"}]},"documentation":{"id":4522,"nodeType":"StructuredDocumentation","src":"4923:237:23","text":" @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":4565,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"5174:21:23","nodeType":"FunctionDefinition","parameters":{"id":4531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4524,"mutability":"mutable","name":"target","nameLocation":"5213:6:23","nodeType":"VariableDeclaration","scope":4565,"src":"5205:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4523,"name":"address","nodeType":"ElementaryTypeName","src":"5205:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4526,"mutability":"mutable","name":"data","nameLocation":"5242:4:23","nodeType":"VariableDeclaration","scope":4565,"src":"5229:17:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4525,"name":"bytes","nodeType":"ElementaryTypeName","src":"5229:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4528,"mutability":"mutable","name":"value","nameLocation":"5264:5:23","nodeType":"VariableDeclaration","scope":4565,"src":"5256:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4527,"name":"uint256","nodeType":"ElementaryTypeName","src":"5256:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4530,"mutability":"mutable","name":"errorMessage","nameLocation":"5293:12:23","nodeType":"VariableDeclaration","scope":4565,"src":"5279:26:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4529,"name":"string","nodeType":"ElementaryTypeName","src":"5279:6:23","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5195:116:23"},"returnParameters":{"id":4534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4533,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4565,"src":"5330:12:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4532,"name":"bytes","nodeType":"ElementaryTypeName","src":"5330:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5329:14:23"},"scope":4741,"src":"5165:446:23","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4581,"nodeType":"Block","src":"5888:97:23","statements":[{"expression":{"arguments":[{"id":4576,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4568,"src":"5924:6:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4577,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4570,"src":"5932:4:23","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564","id":4578,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5938:39:23","typeDescriptions":{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""},"value":"Address: low-level static call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""}],"id":4575,"name":"functionStaticCall","nodeType":"Identifier","overloadedDeclarations":[4582,4611],"referencedDeclaration":4611,"src":"5905:18:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) view returns (bytes memory)"}},"id":4579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5905:73:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":4574,"id":4580,"nodeType":"Return","src":"5898:80:23"}]},"documentation":{"id":4566,"nodeType":"StructuredDocumentation","src":"5617:166:23","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":4582,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"5797:18:23","nodeType":"FunctionDefinition","parameters":{"id":4571,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4568,"mutability":"mutable","name":"target","nameLocation":"5824:6:23","nodeType":"VariableDeclaration","scope":4582,"src":"5816:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4567,"name":"address","nodeType":"ElementaryTypeName","src":"5816:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4570,"mutability":"mutable","name":"data","nameLocation":"5845:4:23","nodeType":"VariableDeclaration","scope":4582,"src":"5832:17:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4569,"name":"bytes","nodeType":"ElementaryTypeName","src":"5832:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5815:35:23"},"returnParameters":{"id":4574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4573,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4582,"src":"5874:12:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4572,"name":"bytes","nodeType":"ElementaryTypeName","src":"5874:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5873:14:23"},"scope":4741,"src":"5788:197:23","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4610,"nodeType":"Block","src":"6327:168:23","statements":[{"assignments":[4595,4597],"declarations":[{"constant":false,"id":4595,"mutability":"mutable","name":"success","nameLocation":"6343:7:23","nodeType":"VariableDeclaration","scope":4610,"src":"6338:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4594,"name":"bool","nodeType":"ElementaryTypeName","src":"6338:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4597,"mutability":"mutable","name":"returndata","nameLocation":"6365:10:23","nodeType":"VariableDeclaration","scope":4610,"src":"6352:23:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4596,"name":"bytes","nodeType":"ElementaryTypeName","src":"6352:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":4602,"initialValue":{"arguments":[{"id":4600,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4587,"src":"6397:4:23","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":4598,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4585,"src":"6379:6:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6386:10:23","memberName":"staticcall","nodeType":"MemberAccess","src":"6379:17:23","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":4601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6379:23:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6337:65:23"},{"expression":{"arguments":[{"id":4604,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4585,"src":"6446:6:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4605,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4595,"src":"6454:7:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":4606,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4597,"src":"6463:10:23","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":4607,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4589,"src":"6475:12:23","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4603,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4696,"src":"6419:26:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":4608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6419:69:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":4593,"id":4609,"nodeType":"Return","src":"6412:76:23"}]},"documentation":{"id":4583,"nodeType":"StructuredDocumentation","src":"5991:173:23","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":4611,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"6178:18:23","nodeType":"FunctionDefinition","parameters":{"id":4590,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4585,"mutability":"mutable","name":"target","nameLocation":"6214:6:23","nodeType":"VariableDeclaration","scope":4611,"src":"6206:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4584,"name":"address","nodeType":"ElementaryTypeName","src":"6206:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4587,"mutability":"mutable","name":"data","nameLocation":"6243:4:23","nodeType":"VariableDeclaration","scope":4611,"src":"6230:17:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4586,"name":"bytes","nodeType":"ElementaryTypeName","src":"6230:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4589,"mutability":"mutable","name":"errorMessage","nameLocation":"6271:12:23","nodeType":"VariableDeclaration","scope":4611,"src":"6257:26:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4588,"name":"string","nodeType":"ElementaryTypeName","src":"6257:6:23","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6196:93:23"},"returnParameters":{"id":4593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4592,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4611,"src":"6313:12:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4591,"name":"bytes","nodeType":"ElementaryTypeName","src":"6313:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6312:14:23"},"scope":4741,"src":"6169:326:23","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4627,"nodeType":"Block","src":"6771:101:23","statements":[{"expression":{"arguments":[{"id":4622,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4614,"src":"6809:6:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4623,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4616,"src":"6817:4:23","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564","id":4624,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6823:41:23","typeDescriptions":{"typeIdentifier":"t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398","typeString":"literal_string \"Address: low-level delegate call failed\""},"value":"Address: low-level delegate call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398","typeString":"literal_string \"Address: low-level delegate call failed\""}],"id":4621,"name":"functionDelegateCall","nodeType":"Identifier","overloadedDeclarations":[4628,4657],"referencedDeclaration":4657,"src":"6788:20:23","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) returns (bytes memory)"}},"id":4625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6788:77:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":4620,"id":4626,"nodeType":"Return","src":"6781:84:23"}]},"documentation":{"id":4612,"nodeType":"StructuredDocumentation","src":"6501:168:23","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"},"id":4628,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"6683:20:23","nodeType":"FunctionDefinition","parameters":{"id":4617,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4614,"mutability":"mutable","name":"target","nameLocation":"6712:6:23","nodeType":"VariableDeclaration","scope":4628,"src":"6704:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4613,"name":"address","nodeType":"ElementaryTypeName","src":"6704:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4616,"mutability":"mutable","name":"data","nameLocation":"6733:4:23","nodeType":"VariableDeclaration","scope":4628,"src":"6720:17:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4615,"name":"bytes","nodeType":"ElementaryTypeName","src":"6720:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6703:35:23"},"returnParameters":{"id":4620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4619,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4628,"src":"6757:12:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4618,"name":"bytes","nodeType":"ElementaryTypeName","src":"6757:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6756:14:23"},"scope":4741,"src":"6674:198:23","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4656,"nodeType":"Block","src":"7213:170:23","statements":[{"assignments":[4641,4643],"declarations":[{"constant":false,"id":4641,"mutability":"mutable","name":"success","nameLocation":"7229:7:23","nodeType":"VariableDeclaration","scope":4656,"src":"7224:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4640,"name":"bool","nodeType":"ElementaryTypeName","src":"7224:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4643,"mutability":"mutable","name":"returndata","nameLocation":"7251:10:23","nodeType":"VariableDeclaration","scope":4656,"src":"7238:23:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4642,"name":"bytes","nodeType":"ElementaryTypeName","src":"7238:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":4648,"initialValue":{"arguments":[{"id":4646,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4633,"src":"7285:4:23","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":4644,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4631,"src":"7265:6:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7272:12:23","memberName":"delegatecall","nodeType":"MemberAccess","src":"7265:19:23","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":4647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7265:25:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"7223:67:23"},{"expression":{"arguments":[{"id":4650,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4631,"src":"7334:6:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4651,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4641,"src":"7342:7:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":4652,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4643,"src":"7351:10:23","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":4653,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4635,"src":"7363:12:23","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4649,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4696,"src":"7307:26:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":4654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7307:69:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":4639,"id":4655,"nodeType":"Return","src":"7300:76:23"}]},"documentation":{"id":4629,"nodeType":"StructuredDocumentation","src":"6878:175:23","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"},"id":4657,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"7067:20:23","nodeType":"FunctionDefinition","parameters":{"id":4636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4631,"mutability":"mutable","name":"target","nameLocation":"7105:6:23","nodeType":"VariableDeclaration","scope":4657,"src":"7097:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4630,"name":"address","nodeType":"ElementaryTypeName","src":"7097:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4633,"mutability":"mutable","name":"data","nameLocation":"7134:4:23","nodeType":"VariableDeclaration","scope":4657,"src":"7121:17:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4632,"name":"bytes","nodeType":"ElementaryTypeName","src":"7121:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4635,"mutability":"mutable","name":"errorMessage","nameLocation":"7162:12:23","nodeType":"VariableDeclaration","scope":4657,"src":"7148:26:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4634,"name":"string","nodeType":"ElementaryTypeName","src":"7148:6:23","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7087:93:23"},"returnParameters":{"id":4639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4638,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4657,"src":"7199:12:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4637,"name":"bytes","nodeType":"ElementaryTypeName","src":"7199:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7198:14:23"},"scope":4741,"src":"7058:325:23","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4695,"nodeType":"Block","src":"7865:434:23","statements":[{"condition":{"id":4671,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4662,"src":"7879:7:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4693,"nodeType":"Block","src":"8235:58:23","statements":[{"expression":{"arguments":[{"id":4689,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4664,"src":"8257:10:23","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":4690,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4666,"src":"8269:12:23","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4688,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4740,"src":"8249:7:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (bytes memory,string memory) pure"}},"id":4691,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8249:33:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4692,"nodeType":"ExpressionStatement","src":"8249:33:23"}]},"id":4694,"nodeType":"IfStatement","src":"7875:418:23","trueBody":{"id":4687,"nodeType":"Block","src":"7888:341:23","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4672,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4664,"src":"7906:10:23","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7917:6:23","memberName":"length","nodeType":"MemberAccess","src":"7906:17:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4674,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7927:1:23","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7906:22:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4684,"nodeType":"IfStatement","src":"7902:286:23","trueBody":{"id":4683,"nodeType":"Block","src":"7930:258:23","statements":[{"expression":{"arguments":[{"arguments":[{"id":4678,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4660,"src":"8132:6:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4677,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4429,"src":"8121:10:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":4679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8121:18:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","id":4680,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8141:31:23","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""},"value":"Address: call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""}],"id":4676,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8113:7:23","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8113:60:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4682,"nodeType":"ExpressionStatement","src":"8113:60:23"}]}},{"expression":{"id":4685,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4664,"src":"8208:10:23","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":4670,"id":4686,"nodeType":"Return","src":"8201:17:23"}]}}]},"documentation":{"id":4658,"nodeType":"StructuredDocumentation","src":"7389:277:23","text":" @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n _Available since v4.8._"},"id":4696,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"7680:26:23","nodeType":"FunctionDefinition","parameters":{"id":4667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4660,"mutability":"mutable","name":"target","nameLocation":"7724:6:23","nodeType":"VariableDeclaration","scope":4696,"src":"7716:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4659,"name":"address","nodeType":"ElementaryTypeName","src":"7716:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4662,"mutability":"mutable","name":"success","nameLocation":"7745:7:23","nodeType":"VariableDeclaration","scope":4696,"src":"7740:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4661,"name":"bool","nodeType":"ElementaryTypeName","src":"7740:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4664,"mutability":"mutable","name":"returndata","nameLocation":"7775:10:23","nodeType":"VariableDeclaration","scope":4696,"src":"7762:23:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4663,"name":"bytes","nodeType":"ElementaryTypeName","src":"7762:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4666,"mutability":"mutable","name":"errorMessage","nameLocation":"7809:12:23","nodeType":"VariableDeclaration","scope":4696,"src":"7795:26:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4665,"name":"string","nodeType":"ElementaryTypeName","src":"7795:6:23","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7706:121:23"},"returnParameters":{"id":4670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4669,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4696,"src":"7851:12:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4668,"name":"bytes","nodeType":"ElementaryTypeName","src":"7851:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7850:14:23"},"scope":4741,"src":"7671:628:23","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4719,"nodeType":"Block","src":"8680:135:23","statements":[{"condition":{"id":4708,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4699,"src":"8694:7:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4717,"nodeType":"Block","src":"8751:58:23","statements":[{"expression":{"arguments":[{"id":4713,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4701,"src":"8773:10:23","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":4714,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4703,"src":"8785:12:23","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4712,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4740,"src":"8765:7:23","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (bytes memory,string memory) pure"}},"id":4715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8765:33:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4716,"nodeType":"ExpressionStatement","src":"8765:33:23"}]},"id":4718,"nodeType":"IfStatement","src":"8690:119:23","trueBody":{"id":4711,"nodeType":"Block","src":"8703:42:23","statements":[{"expression":{"id":4709,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4701,"src":"8724:10:23","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":4707,"id":4710,"nodeType":"Return","src":"8717:17:23"}]}}]},"documentation":{"id":4697,"nodeType":"StructuredDocumentation","src":"8305:210:23","text":" @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason or using the provided one.\n _Available since v4.3._"},"id":4720,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"8529:16:23","nodeType":"FunctionDefinition","parameters":{"id":4704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4699,"mutability":"mutable","name":"success","nameLocation":"8560:7:23","nodeType":"VariableDeclaration","scope":4720,"src":"8555:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4698,"name":"bool","nodeType":"ElementaryTypeName","src":"8555:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4701,"mutability":"mutable","name":"returndata","nameLocation":"8590:10:23","nodeType":"VariableDeclaration","scope":4720,"src":"8577:23:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4700,"name":"bytes","nodeType":"ElementaryTypeName","src":"8577:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4703,"mutability":"mutable","name":"errorMessage","nameLocation":"8624:12:23","nodeType":"VariableDeclaration","scope":4720,"src":"8610:26:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4702,"name":"string","nodeType":"ElementaryTypeName","src":"8610:6:23","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"8545:97:23"},"returnParameters":{"id":4707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4706,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4720,"src":"8666:12:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4705,"name":"bytes","nodeType":"ElementaryTypeName","src":"8666:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8665:14:23"},"scope":4741,"src":"8520:295:23","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4739,"nodeType":"Block","src":"8904:457:23","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4727,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4722,"src":"8980:10:23","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8991:6:23","memberName":"length","nodeType":"MemberAccess","src":"8980:17:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":4729,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9000:1:23","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8980:21:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4737,"nodeType":"Block","src":"9310:45:23","statements":[{"expression":{"arguments":[{"id":4734,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4724,"src":"9331:12:23","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4733,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"9324:6:23","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":4735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9324:20:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4736,"nodeType":"ExpressionStatement","src":"9324:20:23"}]},"id":4738,"nodeType":"IfStatement","src":"8976:379:23","trueBody":{"id":4732,"nodeType":"Block","src":"9003:301:23","statements":[{"AST":{"nativeSrc":"9161:133:23","nodeType":"YulBlock","src":"9161:133:23","statements":[{"nativeSrc":"9179:40:23","nodeType":"YulVariableDeclaration","src":"9179:40:23","value":{"arguments":[{"name":"returndata","nativeSrc":"9208:10:23","nodeType":"YulIdentifier","src":"9208:10:23"}],"functionName":{"name":"mload","nativeSrc":"9202:5:23","nodeType":"YulIdentifier","src":"9202:5:23"},"nativeSrc":"9202:17:23","nodeType":"YulFunctionCall","src":"9202:17:23"},"variables":[{"name":"returndata_size","nativeSrc":"9183:15:23","nodeType":"YulTypedName","src":"9183:15:23","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"9247:2:23","nodeType":"YulLiteral","src":"9247:2:23","type":"","value":"32"},{"name":"returndata","nativeSrc":"9251:10:23","nodeType":"YulIdentifier","src":"9251:10:23"}],"functionName":{"name":"add","nativeSrc":"9243:3:23","nodeType":"YulIdentifier","src":"9243:3:23"},"nativeSrc":"9243:19:23","nodeType":"YulFunctionCall","src":"9243:19:23"},{"name":"returndata_size","nativeSrc":"9264:15:23","nodeType":"YulIdentifier","src":"9264:15:23"}],"functionName":{"name":"revert","nativeSrc":"9236:6:23","nodeType":"YulIdentifier","src":"9236:6:23"},"nativeSrc":"9236:44:23","nodeType":"YulFunctionCall","src":"9236:44:23"},"nativeSrc":"9236:44:23","nodeType":"YulExpressionStatement","src":"9236:44:23"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":4722,"isOffset":false,"isSlot":false,"src":"9208:10:23","valueSize":1},{"declaration":4722,"isOffset":false,"isSlot":false,"src":"9251:10:23","valueSize":1}],"id":4731,"nodeType":"InlineAssembly","src":"9152:142:23"}]}}]},"id":4740,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"8830:7:23","nodeType":"FunctionDefinition","parameters":{"id":4725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4722,"mutability":"mutable","name":"returndata","nameLocation":"8851:10:23","nodeType":"VariableDeclaration","scope":4740,"src":"8838:23:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4721,"name":"bytes","nodeType":"ElementaryTypeName","src":"8838:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4724,"mutability":"mutable","name":"errorMessage","nameLocation":"8877:12:23","nodeType":"VariableDeclaration","scope":4740,"src":"8863:26:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4723,"name":"string","nodeType":"ElementaryTypeName","src":"8863:6:23","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"8837:53:23"},"returnParameters":{"id":4726,"nodeType":"ParameterList","parameters":[],"src":"8904:0:23"},"scope":4741,"src":"8821:540:23","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":4742,"src":"194:9169:23","usedErrors":[],"usedEvents":[]}],"src":"101:9263:23"},"id":23},"@openzeppelin/contracts/utils/Context.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","exportedSymbols":{"Context":[4771]},"id":4772,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4743,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"101:23:24"},{"abstract":true,"baseContracts":[],"canonicalName":"Context","contractDependencies":[],"contractKind":"contract","documentation":{"id":4744,"nodeType":"StructuredDocumentation","src":"126:496:24","text":" @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."},"fullyImplemented":true,"id":4771,"linearizedBaseContracts":[4771],"name":"Context","nameLocation":"641:7:24","nodeType":"ContractDefinition","nodes":[{"body":{"id":4752,"nodeType":"Block","src":"717:34:24","statements":[{"expression":{"expression":{"id":4749,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"734:3:24","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"738:6:24","memberName":"sender","nodeType":"MemberAccess","src":"734:10:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":4748,"id":4751,"nodeType":"Return","src":"727:17:24"}]},"id":4753,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"664:10:24","nodeType":"FunctionDefinition","parameters":{"id":4745,"nodeType":"ParameterList","parameters":[],"src":"674:2:24"},"returnParameters":{"id":4748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4747,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4753,"src":"708:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4746,"name":"address","nodeType":"ElementaryTypeName","src":"708:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"707:9:24"},"scope":4771,"src":"655:96:24","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":4761,"nodeType":"Block","src":"824:32:24","statements":[{"expression":{"expression":{"id":4758,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"841:3:24","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"845:4:24","memberName":"data","nodeType":"MemberAccess","src":"841:8:24","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":4757,"id":4760,"nodeType":"Return","src":"834:15:24"}]},"id":4762,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"766:8:24","nodeType":"FunctionDefinition","parameters":{"id":4754,"nodeType":"ParameterList","parameters":[],"src":"774:2:24"},"returnParameters":{"id":4757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4756,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4762,"src":"808:14:24","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4755,"name":"bytes","nodeType":"ElementaryTypeName","src":"808:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"807:16:24"},"scope":4771,"src":"757:99:24","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":4769,"nodeType":"Block","src":"934:25:24","statements":[{"expression":{"hexValue":"30","id":4767,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"951:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":4766,"id":4768,"nodeType":"Return","src":"944:8:24"}]},"id":4770,"implemented":true,"kind":"function","modifiers":[],"name":"_contextSuffixLength","nameLocation":"871:20:24","nodeType":"FunctionDefinition","parameters":{"id":4763,"nodeType":"ParameterList","parameters":[],"src":"891:2:24"},"returnParameters":{"id":4766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4765,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4770,"src":"925:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4764,"name":"uint256","nodeType":"ElementaryTypeName","src":"925:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"924:9:24"},"scope":4771,"src":"862:97:24","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":4772,"src":"623:338:24","usedErrors":[],"usedEvents":[]}],"src":"101:861:24"},"id":24},"@openzeppelin/contracts/utils/StorageSlot.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/StorageSlot.sol","exportedSymbols":{"StorageSlot":[4881]},"id":4882,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4773,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"193:23:25"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlot","contractDependencies":[],"contractKind":"library","documentation":{"id":4774,"nodeType":"StructuredDocumentation","src":"218:1201:25","text":" @dev Library for reading and writing primitive types to specific storage slots.\n Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n This library helps with reading and writing to such slots without the need for inline assembly.\n The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n Example usage to set ERC1967 implementation slot:\n ```solidity\n contract ERC1967 {\n     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n     function _getImplementation() internal view returns (address) {\n         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n     }\n     function _setImplementation(address newImplementation) internal {\n         require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n     }\n }\n ```\n _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\n _Available since v4.9 for `string`, `bytes`._"},"fullyImplemented":true,"id":4881,"linearizedBaseContracts":[4881],"name":"StorageSlot","nameLocation":"1428:11:25","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlot.AddressSlot","id":4777,"members":[{"constant":false,"id":4776,"mutability":"mutable","name":"value","nameLocation":"1483:5:25","nodeType":"VariableDeclaration","scope":4777,"src":"1475:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4775,"name":"address","nodeType":"ElementaryTypeName","src":"1475:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"AddressSlot","nameLocation":"1453:11:25","nodeType":"StructDefinition","scope":4881,"src":"1446:49:25","visibility":"public"},{"canonicalName":"StorageSlot.BooleanSlot","id":4780,"members":[{"constant":false,"id":4779,"mutability":"mutable","name":"value","nameLocation":"1535:5:25","nodeType":"VariableDeclaration","scope":4780,"src":"1530:10:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4778,"name":"bool","nodeType":"ElementaryTypeName","src":"1530:4:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"BooleanSlot","nameLocation":"1508:11:25","nodeType":"StructDefinition","scope":4881,"src":"1501:46:25","visibility":"public"},{"canonicalName":"StorageSlot.Bytes32Slot","id":4783,"members":[{"constant":false,"id":4782,"mutability":"mutable","name":"value","nameLocation":"1590:5:25","nodeType":"VariableDeclaration","scope":4783,"src":"1582:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4781,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1582:7:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"Bytes32Slot","nameLocation":"1560:11:25","nodeType":"StructDefinition","scope":4881,"src":"1553:49:25","visibility":"public"},{"canonicalName":"StorageSlot.Uint256Slot","id":4786,"members":[{"constant":false,"id":4785,"mutability":"mutable","name":"value","nameLocation":"1645:5:25","nodeType":"VariableDeclaration","scope":4786,"src":"1637:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4784,"name":"uint256","nodeType":"ElementaryTypeName","src":"1637:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Uint256Slot","nameLocation":"1615:11:25","nodeType":"StructDefinition","scope":4881,"src":"1608:49:25","visibility":"public"},{"canonicalName":"StorageSlot.StringSlot","id":4789,"members":[{"constant":false,"id":4788,"mutability":"mutable","name":"value","nameLocation":"1698:5:25","nodeType":"VariableDeclaration","scope":4789,"src":"1691:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":4787,"name":"string","nodeType":"ElementaryTypeName","src":"1691:6:25","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"name":"StringSlot","nameLocation":"1670:10:25","nodeType":"StructDefinition","scope":4881,"src":"1663:47:25","visibility":"public"},{"canonicalName":"StorageSlot.BytesSlot","id":4792,"members":[{"constant":false,"id":4791,"mutability":"mutable","name":"value","nameLocation":"1749:5:25","nodeType":"VariableDeclaration","scope":4792,"src":"1743:11:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4790,"name":"bytes","nodeType":"ElementaryTypeName","src":"1743:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"BytesSlot","nameLocation":"1723:9:25","nodeType":"StructDefinition","scope":4881,"src":"1716:45:25","visibility":"public"},{"body":{"id":4802,"nodeType":"Block","src":"1943:106:25","statements":[{"AST":{"nativeSrc":"2005:38:25","nodeType":"YulBlock","src":"2005:38:25","statements":[{"nativeSrc":"2019:14:25","nodeType":"YulAssignment","src":"2019:14:25","value":{"name":"slot","nativeSrc":"2029:4:25","nodeType":"YulIdentifier","src":"2029:4:25"},"variableNames":[{"name":"r.slot","nativeSrc":"2019:6:25","nodeType":"YulIdentifier","src":"2019:6:25"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":4799,"isOffset":false,"isSlot":true,"src":"2019:6:25","suffix":"slot","valueSize":1},{"declaration":4795,"isOffset":false,"isSlot":false,"src":"2029:4:25","valueSize":1}],"id":4801,"nodeType":"InlineAssembly","src":"1996:47:25"}]},"documentation":{"id":4793,"nodeType":"StructuredDocumentation","src":"1767:87:25","text":" @dev Returns an `AddressSlot` with member `value` located at `slot`."},"id":4803,"implemented":true,"kind":"function","modifiers":[],"name":"getAddressSlot","nameLocation":"1868:14:25","nodeType":"FunctionDefinition","parameters":{"id":4796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4795,"mutability":"mutable","name":"slot","nameLocation":"1891:4:25","nodeType":"VariableDeclaration","scope":4803,"src":"1883:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4794,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1883:7:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1882:14:25"},"returnParameters":{"id":4800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4799,"mutability":"mutable","name":"r","nameLocation":"1940:1:25","nodeType":"VariableDeclaration","scope":4803,"src":"1920:21:25","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$4777_storage_ptr","typeString":"struct StorageSlot.AddressSlot"},"typeName":{"id":4798,"nodeType":"UserDefinedTypeName","pathNode":{"id":4797,"name":"AddressSlot","nameLocations":["1920:11:25"],"nodeType":"IdentifierPath","referencedDeclaration":4777,"src":"1920:11:25"},"referencedDeclaration":4777,"src":"1920:11:25","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$4777_storage_ptr","typeString":"struct StorageSlot.AddressSlot"}},"visibility":"internal"}],"src":"1919:23:25"},"scope":4881,"src":"1859:190:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4813,"nodeType":"Block","src":"2231:106:25","statements":[{"AST":{"nativeSrc":"2293:38:25","nodeType":"YulBlock","src":"2293:38:25","statements":[{"nativeSrc":"2307:14:25","nodeType":"YulAssignment","src":"2307:14:25","value":{"name":"slot","nativeSrc":"2317:4:25","nodeType":"YulIdentifier","src":"2317:4:25"},"variableNames":[{"name":"r.slot","nativeSrc":"2307:6:25","nodeType":"YulIdentifier","src":"2307:6:25"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":4810,"isOffset":false,"isSlot":true,"src":"2307:6:25","suffix":"slot","valueSize":1},{"declaration":4806,"isOffset":false,"isSlot":false,"src":"2317:4:25","valueSize":1}],"id":4812,"nodeType":"InlineAssembly","src":"2284:47:25"}]},"documentation":{"id":4804,"nodeType":"StructuredDocumentation","src":"2055:87:25","text":" @dev Returns an `BooleanSlot` with member `value` located at `slot`."},"id":4814,"implemented":true,"kind":"function","modifiers":[],"name":"getBooleanSlot","nameLocation":"2156:14:25","nodeType":"FunctionDefinition","parameters":{"id":4807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4806,"mutability":"mutable","name":"slot","nameLocation":"2179:4:25","nodeType":"VariableDeclaration","scope":4814,"src":"2171:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4805,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2171:7:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2170:14:25"},"returnParameters":{"id":4811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4810,"mutability":"mutable","name":"r","nameLocation":"2228:1:25","nodeType":"VariableDeclaration","scope":4814,"src":"2208:21:25","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$4780_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"},"typeName":{"id":4809,"nodeType":"UserDefinedTypeName","pathNode":{"id":4808,"name":"BooleanSlot","nameLocations":["2208:11:25"],"nodeType":"IdentifierPath","referencedDeclaration":4780,"src":"2208:11:25"},"referencedDeclaration":4780,"src":"2208:11:25","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$4780_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"}},"visibility":"internal"}],"src":"2207:23:25"},"scope":4881,"src":"2147:190:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4824,"nodeType":"Block","src":"2519:106:25","statements":[{"AST":{"nativeSrc":"2581:38:25","nodeType":"YulBlock","src":"2581:38:25","statements":[{"nativeSrc":"2595:14:25","nodeType":"YulAssignment","src":"2595:14:25","value":{"name":"slot","nativeSrc":"2605:4:25","nodeType":"YulIdentifier","src":"2605:4:25"},"variableNames":[{"name":"r.slot","nativeSrc":"2595:6:25","nodeType":"YulIdentifier","src":"2595:6:25"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":4821,"isOffset":false,"isSlot":true,"src":"2595:6:25","suffix":"slot","valueSize":1},{"declaration":4817,"isOffset":false,"isSlot":false,"src":"2605:4:25","valueSize":1}],"id":4823,"nodeType":"InlineAssembly","src":"2572:47:25"}]},"documentation":{"id":4815,"nodeType":"StructuredDocumentation","src":"2343:87:25","text":" @dev Returns an `Bytes32Slot` with member `value` located at `slot`."},"id":4825,"implemented":true,"kind":"function","modifiers":[],"name":"getBytes32Slot","nameLocation":"2444:14:25","nodeType":"FunctionDefinition","parameters":{"id":4818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4817,"mutability":"mutable","name":"slot","nameLocation":"2467:4:25","nodeType":"VariableDeclaration","scope":4825,"src":"2459:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4816,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2459:7:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2458:14:25"},"returnParameters":{"id":4822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4821,"mutability":"mutable","name":"r","nameLocation":"2516:1:25","nodeType":"VariableDeclaration","scope":4825,"src":"2496:21:25","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$4783_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"},"typeName":{"id":4820,"nodeType":"UserDefinedTypeName","pathNode":{"id":4819,"name":"Bytes32Slot","nameLocations":["2496:11:25"],"nodeType":"IdentifierPath","referencedDeclaration":4783,"src":"2496:11:25"},"referencedDeclaration":4783,"src":"2496:11:25","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$4783_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"}},"visibility":"internal"}],"src":"2495:23:25"},"scope":4881,"src":"2435:190:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4835,"nodeType":"Block","src":"2807:106:25","statements":[{"AST":{"nativeSrc":"2869:38:25","nodeType":"YulBlock","src":"2869:38:25","statements":[{"nativeSrc":"2883:14:25","nodeType":"YulAssignment","src":"2883:14:25","value":{"name":"slot","nativeSrc":"2893:4:25","nodeType":"YulIdentifier","src":"2893:4:25"},"variableNames":[{"name":"r.slot","nativeSrc":"2883:6:25","nodeType":"YulIdentifier","src":"2883:6:25"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":4832,"isOffset":false,"isSlot":true,"src":"2883:6:25","suffix":"slot","valueSize":1},{"declaration":4828,"isOffset":false,"isSlot":false,"src":"2893:4:25","valueSize":1}],"id":4834,"nodeType":"InlineAssembly","src":"2860:47:25"}]},"documentation":{"id":4826,"nodeType":"StructuredDocumentation","src":"2631:87:25","text":" @dev Returns an `Uint256Slot` with member `value` located at `slot`."},"id":4836,"implemented":true,"kind":"function","modifiers":[],"name":"getUint256Slot","nameLocation":"2732:14:25","nodeType":"FunctionDefinition","parameters":{"id":4829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4828,"mutability":"mutable","name":"slot","nameLocation":"2755:4:25","nodeType":"VariableDeclaration","scope":4836,"src":"2747:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4827,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2747:7:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2746:14:25"},"returnParameters":{"id":4833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4832,"mutability":"mutable","name":"r","nameLocation":"2804:1:25","nodeType":"VariableDeclaration","scope":4836,"src":"2784:21:25","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$4786_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"},"typeName":{"id":4831,"nodeType":"UserDefinedTypeName","pathNode":{"id":4830,"name":"Uint256Slot","nameLocations":["2784:11:25"],"nodeType":"IdentifierPath","referencedDeclaration":4786,"src":"2784:11:25"},"referencedDeclaration":4786,"src":"2784:11:25","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$4786_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"}},"visibility":"internal"}],"src":"2783:23:25"},"scope":4881,"src":"2723:190:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4846,"nodeType":"Block","src":"3092:106:25","statements":[{"AST":{"nativeSrc":"3154:38:25","nodeType":"YulBlock","src":"3154:38:25","statements":[{"nativeSrc":"3168:14:25","nodeType":"YulAssignment","src":"3168:14:25","value":{"name":"slot","nativeSrc":"3178:4:25","nodeType":"YulIdentifier","src":"3178:4:25"},"variableNames":[{"name":"r.slot","nativeSrc":"3168:6:25","nodeType":"YulIdentifier","src":"3168:6:25"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":4843,"isOffset":false,"isSlot":true,"src":"3168:6:25","suffix":"slot","valueSize":1},{"declaration":4839,"isOffset":false,"isSlot":false,"src":"3178:4:25","valueSize":1}],"id":4845,"nodeType":"InlineAssembly","src":"3145:47:25"}]},"documentation":{"id":4837,"nodeType":"StructuredDocumentation","src":"2919:86:25","text":" @dev Returns an `StringSlot` with member `value` located at `slot`."},"id":4847,"implemented":true,"kind":"function","modifiers":[],"name":"getStringSlot","nameLocation":"3019:13:25","nodeType":"FunctionDefinition","parameters":{"id":4840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4839,"mutability":"mutable","name":"slot","nameLocation":"3041:4:25","nodeType":"VariableDeclaration","scope":4847,"src":"3033:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4838,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3033:7:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3032:14:25"},"returnParameters":{"id":4844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4843,"mutability":"mutable","name":"r","nameLocation":"3089:1:25","nodeType":"VariableDeclaration","scope":4847,"src":"3070:20:25","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$4789_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":4842,"nodeType":"UserDefinedTypeName","pathNode":{"id":4841,"name":"StringSlot","nameLocations":["3070:10:25"],"nodeType":"IdentifierPath","referencedDeclaration":4789,"src":"3070:10:25"},"referencedDeclaration":4789,"src":"3070:10:25","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$4789_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"3069:22:25"},"scope":4881,"src":"3010:188:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4857,"nodeType":"Block","src":"3400:112:25","statements":[{"AST":{"nativeSrc":"3462:44:25","nodeType":"YulBlock","src":"3462:44:25","statements":[{"nativeSrc":"3476:20:25","nodeType":"YulAssignment","src":"3476:20:25","value":{"name":"store.slot","nativeSrc":"3486:10:25","nodeType":"YulIdentifier","src":"3486:10:25"},"variableNames":[{"name":"r.slot","nativeSrc":"3476:6:25","nodeType":"YulIdentifier","src":"3476:6:25"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":4854,"isOffset":false,"isSlot":true,"src":"3476:6:25","suffix":"slot","valueSize":1},{"declaration":4850,"isOffset":false,"isSlot":true,"src":"3486:10:25","suffix":"slot","valueSize":1}],"id":4856,"nodeType":"InlineAssembly","src":"3453:53:25"}]},"documentation":{"id":4848,"nodeType":"StructuredDocumentation","src":"3204:101:25","text":" @dev Returns an `StringSlot` representation of the string storage pointer `store`."},"id":4858,"implemented":true,"kind":"function","modifiers":[],"name":"getStringSlot","nameLocation":"3319:13:25","nodeType":"FunctionDefinition","parameters":{"id":4851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4850,"mutability":"mutable","name":"store","nameLocation":"3348:5:25","nodeType":"VariableDeclaration","scope":4858,"src":"3333:20:25","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":4849,"name":"string","nodeType":"ElementaryTypeName","src":"3333:6:25","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3332:22:25"},"returnParameters":{"id":4855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4854,"mutability":"mutable","name":"r","nameLocation":"3397:1:25","nodeType":"VariableDeclaration","scope":4858,"src":"3378:20:25","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$4789_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":4853,"nodeType":"UserDefinedTypeName","pathNode":{"id":4852,"name":"StringSlot","nameLocations":["3378:10:25"],"nodeType":"IdentifierPath","referencedDeclaration":4789,"src":"3378:10:25"},"referencedDeclaration":4789,"src":"3378:10:25","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$4789_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"3377:22:25"},"scope":4881,"src":"3310:202:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4868,"nodeType":"Block","src":"3688:106:25","statements":[{"AST":{"nativeSrc":"3750:38:25","nodeType":"YulBlock","src":"3750:38:25","statements":[{"nativeSrc":"3764:14:25","nodeType":"YulAssignment","src":"3764:14:25","value":{"name":"slot","nativeSrc":"3774:4:25","nodeType":"YulIdentifier","src":"3774:4:25"},"variableNames":[{"name":"r.slot","nativeSrc":"3764:6:25","nodeType":"YulIdentifier","src":"3764:6:25"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":4865,"isOffset":false,"isSlot":true,"src":"3764:6:25","suffix":"slot","valueSize":1},{"declaration":4861,"isOffset":false,"isSlot":false,"src":"3774:4:25","valueSize":1}],"id":4867,"nodeType":"InlineAssembly","src":"3741:47:25"}]},"documentation":{"id":4859,"nodeType":"StructuredDocumentation","src":"3518:85:25","text":" @dev Returns an `BytesSlot` with member `value` located at `slot`."},"id":4869,"implemented":true,"kind":"function","modifiers":[],"name":"getBytesSlot","nameLocation":"3617:12:25","nodeType":"FunctionDefinition","parameters":{"id":4862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4861,"mutability":"mutable","name":"slot","nameLocation":"3638:4:25","nodeType":"VariableDeclaration","scope":4869,"src":"3630:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4860,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3630:7:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3629:14:25"},"returnParameters":{"id":4866,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4865,"mutability":"mutable","name":"r","nameLocation":"3685:1:25","nodeType":"VariableDeclaration","scope":4869,"src":"3667:19:25","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$4792_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":4864,"nodeType":"UserDefinedTypeName","pathNode":{"id":4863,"name":"BytesSlot","nameLocations":["3667:9:25"],"nodeType":"IdentifierPath","referencedDeclaration":4792,"src":"3667:9:25"},"referencedDeclaration":4792,"src":"3667:9:25","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$4792_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"3666:21:25"},"scope":4881,"src":"3608:186:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4879,"nodeType":"Block","src":"3991:112:25","statements":[{"AST":{"nativeSrc":"4053:44:25","nodeType":"YulBlock","src":"4053:44:25","statements":[{"nativeSrc":"4067:20:25","nodeType":"YulAssignment","src":"4067:20:25","value":{"name":"store.slot","nativeSrc":"4077:10:25","nodeType":"YulIdentifier","src":"4077:10:25"},"variableNames":[{"name":"r.slot","nativeSrc":"4067:6:25","nodeType":"YulIdentifier","src":"4067:6:25"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":4876,"isOffset":false,"isSlot":true,"src":"4067:6:25","suffix":"slot","valueSize":1},{"declaration":4872,"isOffset":false,"isSlot":true,"src":"4077:10:25","suffix":"slot","valueSize":1}],"id":4878,"nodeType":"InlineAssembly","src":"4044:53:25"}]},"documentation":{"id":4870,"nodeType":"StructuredDocumentation","src":"3800:99:25","text":" @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`."},"id":4880,"implemented":true,"kind":"function","modifiers":[],"name":"getBytesSlot","nameLocation":"3913:12:25","nodeType":"FunctionDefinition","parameters":{"id":4873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4872,"mutability":"mutable","name":"store","nameLocation":"3940:5:25","nodeType":"VariableDeclaration","scope":4880,"src":"3926:19:25","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4871,"name":"bytes","nodeType":"ElementaryTypeName","src":"3926:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3925:21:25"},"returnParameters":{"id":4877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4876,"mutability":"mutable","name":"r","nameLocation":"3988:1:25","nodeType":"VariableDeclaration","scope":4880,"src":"3970:19:25","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$4792_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":4875,"nodeType":"UserDefinedTypeName","pathNode":{"id":4874,"name":"BytesSlot","nameLocations":["3970:9:25"],"nodeType":"IdentifierPath","referencedDeclaration":4792,"src":"3970:9:25"},"referencedDeclaration":4792,"src":"3970:9:25","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$4792_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"3969:21:25"},"scope":4881,"src":"3904:199:25","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":4882,"src":"1420:2685:25","usedErrors":[],"usedEvents":[]}],"src":"193:3913:25"},"id":25},"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol":{"ast":{"absolutePath":"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol","exportedSymbols":{"AccessControlledV8":[5035],"AddressUpgradeable":[2770],"ContextUpgradeable":[2821],"IAccessControl":[3760],"IAccessControlManagerV8":[5080],"Initializable":[576],"Ownable2StepUpgradeable":[106],"OwnableUpgradeable":[239]},"id":5036,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":4883,"literals":["solidity","0.8",".25"],"nodeType":"PragmaDirective","src":"41:23:26"},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","id":4884,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5036,"sourceUnit":577,"src":"66:75:26","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol","id":4885,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5036,"sourceUnit":107,"src":"142:80:26","symbolAliases":[],"unitAlias":""},{"absolutePath":"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol","file":"./IAccessControlManagerV8.sol","id":4886,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5036,"sourceUnit":5081,"src":"224:39:26","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":4888,"name":"Initializable","nameLocations":["626:13:26"],"nodeType":"IdentifierPath","referencedDeclaration":576,"src":"626:13:26"},"id":4889,"nodeType":"InheritanceSpecifier","src":"626:13:26"},{"baseName":{"id":4890,"name":"Ownable2StepUpgradeable","nameLocations":["641:23:26"],"nodeType":"IdentifierPath","referencedDeclaration":106,"src":"641:23:26"},"id":4891,"nodeType":"InheritanceSpecifier","src":"641:23:26"}],"canonicalName":"AccessControlledV8","contractDependencies":[],"contractKind":"contract","documentation":{"id":4887,"nodeType":"StructuredDocumentation","src":"265:320:26","text":" @title AccessControlledV8\n @author Venus\n @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\n to integrate access controlled mechanism. It provides initialise methods and verifying access methods."},"fullyImplemented":true,"id":5035,"linearizedBaseContracts":[5035,106,239,2821,576],"name":"AccessControlledV8","nameLocation":"604:18:26","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":4892,"nodeType":"StructuredDocumentation","src":"671:43:26","text":"@notice Access control manager contract"},"id":4895,"mutability":"mutable","name":"_accessControlManager","nameLocation":"752:21:26","nodeType":"VariableDeclaration","scope":5035,"src":"719:54:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$5080","typeString":"contract IAccessControlManagerV8"},"typeName":{"id":4894,"nodeType":"UserDefinedTypeName","pathNode":{"id":4893,"name":"IAccessControlManagerV8","nameLocations":["719:23:26"],"nodeType":"IdentifierPath","referencedDeclaration":5080,"src":"719:23:26"},"referencedDeclaration":5080,"src":"719:23:26","typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$5080","typeString":"contract IAccessControlManagerV8"}},"visibility":"internal"},{"constant":false,"documentation":{"id":4896,"nodeType":"StructuredDocumentation","src":"780:254:26","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":4900,"mutability":"mutable","name":"__gap","nameLocation":"1059:5:26","nodeType":"VariableDeclaration","scope":5035,"src":"1039:25:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage","typeString":"uint256[49]"},"typeName":{"baseType":{"id":4897,"name":"uint256","nodeType":"ElementaryTypeName","src":"1039:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4899,"length":{"hexValue":"3439","id":4898,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1047:2:26","typeDescriptions":{"typeIdentifier":"t_rational_49_by_1","typeString":"int_const 49"},"value":"49"},"nodeType":"ArrayTypeName","src":"1039:11:26","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage_ptr","typeString":"uint256[49]"}},"visibility":"private"},{"anonymous":false,"documentation":{"id":4901,"nodeType":"StructuredDocumentation","src":"1071:75:26","text":"@notice Emitted when access control manager contract address is changed"},"eventSelector":"66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa0","id":4907,"name":"NewAccessControlManager","nameLocation":"1157:23:26","nodeType":"EventDefinition","parameters":{"id":4906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4903,"indexed":false,"mutability":"mutable","name":"oldAccessControlManager","nameLocation":"1189:23:26","nodeType":"VariableDeclaration","scope":4907,"src":"1181:31:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4902,"name":"address","nodeType":"ElementaryTypeName","src":"1181:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4905,"indexed":false,"mutability":"mutable","name":"newAccessControlManager","nameLocation":"1222:23:26","nodeType":"VariableDeclaration","scope":4907,"src":"1214:31:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4904,"name":"address","nodeType":"ElementaryTypeName","src":"1214:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1180:66:26"},"src":"1151:96:26"},{"documentation":{"id":4908,"nodeType":"StructuredDocumentation","src":"1253:72:26","text":"@notice Thrown when the action is prohibited by AccessControlManager"},"errorSelector":"4a3fa293","id":4916,"name":"Unauthorized","nameLocation":"1336:12:26","nodeType":"ErrorDefinition","parameters":{"id":4915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4910,"mutability":"mutable","name":"sender","nameLocation":"1357:6:26","nodeType":"VariableDeclaration","scope":4916,"src":"1349:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4909,"name":"address","nodeType":"ElementaryTypeName","src":"1349:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4912,"mutability":"mutable","name":"calledContract","nameLocation":"1373:14:26","nodeType":"VariableDeclaration","scope":4916,"src":"1365:22:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4911,"name":"address","nodeType":"ElementaryTypeName","src":"1365:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4914,"mutability":"mutable","name":"methodSignature","nameLocation":"1396:15:26","nodeType":"VariableDeclaration","scope":4916,"src":"1389:22:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4913,"name":"string","nodeType":"ElementaryTypeName","src":"1389:6:26","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1348:64:26"},"src":"1330:83:26"},{"body":{"id":4930,"nodeType":"Block","src":"1509:104:26","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4923,"name":"__Ownable2Step_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26,"src":"1519:19:26","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":4924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1519:21:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4925,"nodeType":"ExpressionStatement","src":"1519:21:26"},{"expression":{"arguments":[{"id":4927,"name":"accessControlManager_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4918,"src":"1584:21:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4926,"name":"__AccessControlled_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4943,"src":"1550:33:26","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1550:56:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4929,"nodeType":"ExpressionStatement","src":"1550:56:26"}]},"id":4931,"implemented":true,"kind":"function","modifiers":[{"id":4921,"kind":"modifierInvocation","modifierName":{"id":4920,"name":"onlyInitializing","nameLocations":["1492:16:26"],"nodeType":"IdentifierPath","referencedDeclaration":521,"src":"1492:16:26"},"nodeType":"ModifierInvocation","src":"1492:16:26"}],"name":"__AccessControlled_init","nameLocation":"1428:23:26","nodeType":"FunctionDefinition","parameters":{"id":4919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4918,"mutability":"mutable","name":"accessControlManager_","nameLocation":"1460:21:26","nodeType":"VariableDeclaration","scope":4931,"src":"1452:29:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4917,"name":"address","nodeType":"ElementaryTypeName","src":"1452:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1451:31:26"},"returnParameters":{"id":4922,"nodeType":"ParameterList","parameters":[],"src":"1509:0:26"},"scope":5035,"src":"1419:194:26","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4942,"nodeType":"Block","src":"1719:64:26","statements":[{"expression":{"arguments":[{"id":4939,"name":"accessControlManager_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4933,"src":"1754:21:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4938,"name":"_setAccessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5004,"src":"1729:24:26","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1729:47:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4941,"nodeType":"ExpressionStatement","src":"1729:47:26"}]},"id":4943,"implemented":true,"kind":"function","modifiers":[{"id":4936,"kind":"modifierInvocation","modifierName":{"id":4935,"name":"onlyInitializing","nameLocations":["1702:16:26"],"nodeType":"IdentifierPath","referencedDeclaration":521,"src":"1702:16:26"},"nodeType":"ModifierInvocation","src":"1702:16:26"}],"name":"__AccessControlled_init_unchained","nameLocation":"1628:33:26","nodeType":"FunctionDefinition","parameters":{"id":4934,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4933,"mutability":"mutable","name":"accessControlManager_","nameLocation":"1670:21:26","nodeType":"VariableDeclaration","scope":4943,"src":"1662:29:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4932,"name":"address","nodeType":"ElementaryTypeName","src":"1662:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1661:31:26"},"returnParameters":{"id":4937,"nodeType":"ParameterList","parameters":[],"src":"1719:0:26"},"scope":5035,"src":"1619:164:26","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4955,"nodeType":"Block","src":"2185:64:26","statements":[{"expression":{"arguments":[{"id":4952,"name":"accessControlManager_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4946,"src":"2220:21:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4951,"name":"_setAccessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5004,"src":"2195:24:26","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2195:47:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4954,"nodeType":"ExpressionStatement","src":"2195:47:26"}]},"documentation":{"id":4944,"nodeType":"StructuredDocumentation","src":"1789:308:26","text":" @notice Sets the address of AccessControlManager\n @dev Admin function to set address of AccessControlManager\n @param accessControlManager_ The new address of the AccessControlManager\n @custom:event Emits NewAccessControlManager event\n @custom:access Only Governance"},"functionSelector":"0e32cb86","id":4956,"implemented":true,"kind":"function","modifiers":[{"id":4949,"kind":"modifierInvocation","modifierName":{"id":4948,"name":"onlyOwner","nameLocations":["2175:9:26"],"nodeType":"IdentifierPath","referencedDeclaration":153,"src":"2175:9:26"},"nodeType":"ModifierInvocation","src":"2175:9:26"}],"name":"setAccessControlManager","nameLocation":"2111:23:26","nodeType":"FunctionDefinition","parameters":{"id":4947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4946,"mutability":"mutable","name":"accessControlManager_","nameLocation":"2143:21:26","nodeType":"VariableDeclaration","scope":4956,"src":"2135:29:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4945,"name":"address","nodeType":"ElementaryTypeName","src":"2135:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2134:31:26"},"returnParameters":{"id":4950,"nodeType":"ParameterList","parameters":[],"src":"2185:0:26"},"scope":5035,"src":"2102:147:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":4965,"nodeType":"Block","src":"2425:45:26","statements":[{"expression":{"id":4963,"name":"_accessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4895,"src":"2442:21:26","typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$5080","typeString":"contract IAccessControlManagerV8"}},"functionReturnParameters":4962,"id":4964,"nodeType":"Return","src":"2435:28:26"}]},"documentation":{"id":4957,"nodeType":"StructuredDocumentation","src":"2255:85:26","text":" @notice Returns the address of the access control manager contract"},"functionSelector":"b4a0bdf3","id":4966,"implemented":true,"kind":"function","modifiers":[],"name":"accessControlManager","nameLocation":"2354:20:26","nodeType":"FunctionDefinition","parameters":{"id":4958,"nodeType":"ParameterList","parameters":[],"src":"2374:2:26"},"returnParameters":{"id":4962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4961,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4966,"src":"2400:23:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$5080","typeString":"contract IAccessControlManagerV8"},"typeName":{"id":4960,"nodeType":"UserDefinedTypeName","pathNode":{"id":4959,"name":"IAccessControlManagerV8","nameLocations":["2400:23:26"],"nodeType":"IdentifierPath","referencedDeclaration":5080,"src":"2400:23:26"},"referencedDeclaration":5080,"src":"2400:23:26","typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$5080","typeString":"contract IAccessControlManagerV8"}},"visibility":"internal"}],"src":"2399:25:26"},"scope":5035,"src":"2345:125:26","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":5003,"nodeType":"Block","src":"2715:351:26","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4975,"name":"accessControlManager_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4969,"src":"2741:21:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4974,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2733:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4973,"name":"address","nodeType":"ElementaryTypeName","src":"2733:7:26","typeDescriptions":{}}},"id":4976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2733:30:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":4979,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2775:1:26","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":4978,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2767:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4977,"name":"address","nodeType":"ElementaryTypeName","src":"2767:7:26","typeDescriptions":{}}},"id":4980,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2767:10:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2733:44:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e76616c696420616365737320636f6e74726f6c206d616e616765722061646472657373","id":4982,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2779:39:26","typeDescriptions":{"typeIdentifier":"t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb","typeString":"literal_string \"invalid acess control manager address\""},"value":"invalid acess control manager address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb","typeString":"literal_string \"invalid acess control manager address\""}],"id":4972,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2725:7:26","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":4983,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2725:94:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4984,"nodeType":"ExpressionStatement","src":"2725:94:26"},{"assignments":[4986],"declarations":[{"constant":false,"id":4986,"mutability":"mutable","name":"oldAccessControlManager","nameLocation":"2837:23:26","nodeType":"VariableDeclaration","scope":5003,"src":"2829:31:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4985,"name":"address","nodeType":"ElementaryTypeName","src":"2829:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":4991,"initialValue":{"arguments":[{"id":4989,"name":"_accessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4895,"src":"2871:21:26","typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$5080","typeString":"contract IAccessControlManagerV8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$5080","typeString":"contract IAccessControlManagerV8"}],"id":4988,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2863:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4987,"name":"address","nodeType":"ElementaryTypeName","src":"2863:7:26","typeDescriptions":{}}},"id":4990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2863:30:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2829:64:26"},{"expression":{"id":4996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4992,"name":"_accessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4895,"src":"2903:21:26","typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$5080","typeString":"contract IAccessControlManagerV8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":4994,"name":"accessControlManager_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4969,"src":"2951:21:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4993,"name":"IAccessControlManagerV8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"2927:23:26","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAccessControlManagerV8_$5080_$","typeString":"type(contract IAccessControlManagerV8)"}},"id":4995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2927:46:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$5080","typeString":"contract IAccessControlManagerV8"}},"src":"2903:70:26","typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$5080","typeString":"contract IAccessControlManagerV8"}},"id":4997,"nodeType":"ExpressionStatement","src":"2903:70:26"},{"eventCall":{"arguments":[{"id":4999,"name":"oldAccessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4986,"src":"3012:23:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5000,"name":"accessControlManager_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4969,"src":"3037:21:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":4998,"name":"NewAccessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4907,"src":"2988:23:26","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":5001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2988:71:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5002,"nodeType":"EmitStatement","src":"2983:76:26"}]},"documentation":{"id":4967,"nodeType":"StructuredDocumentation","src":"2476:160:26","text":" @dev Internal function to set address of AccessControlManager\n @param accessControlManager_ The new address of the AccessControlManager"},"id":5004,"implemented":true,"kind":"function","modifiers":[],"name":"_setAccessControlManager","nameLocation":"2650:24:26","nodeType":"FunctionDefinition","parameters":{"id":4970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4969,"mutability":"mutable","name":"accessControlManager_","nameLocation":"2683:21:26","nodeType":"VariableDeclaration","scope":5004,"src":"2675:29:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4968,"name":"address","nodeType":"ElementaryTypeName","src":"2675:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2674:31:26"},"returnParameters":{"id":4971,"nodeType":"ParameterList","parameters":[],"src":"2715:0:26"},"scope":5035,"src":"2641:425:26","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":5033,"nodeType":"Block","src":"3271:214:26","statements":[{"assignments":[5011],"declarations":[{"constant":false,"id":5011,"mutability":"mutable","name":"isAllowedToCall","nameLocation":"3286:15:26","nodeType":"VariableDeclaration","scope":5033,"src":"3281:20:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5010,"name":"bool","nodeType":"ElementaryTypeName","src":"3281:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5018,"initialValue":{"arguments":[{"expression":{"id":5014,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3342:3:26","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3346:6:26","memberName":"sender","nodeType":"MemberAccess","src":"3342:10:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5016,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5007,"src":"3354:9:26","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":5012,"name":"_accessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4895,"src":"3304:21:26","typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$5080","typeString":"contract IAccessControlManagerV8"}},"id":5013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3326:15:26","memberName":"isAllowedToCall","nodeType":"MemberAccess","referencedDeclaration":5068,"src":"3304:37:26","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_string_memory_ptr_$returns$_t_bool_$","typeString":"function (address,string memory) view external returns (bool)"}},"id":5017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3304:60:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3281:83:26"},{"condition":{"id":5020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3379:16:26","subExpression":{"id":5019,"name":"isAllowedToCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5011,"src":"3380:15:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5032,"nodeType":"IfStatement","src":"3375:104:26","trueBody":{"id":5031,"nodeType":"Block","src":"3397:82:26","statements":[{"errorCall":{"arguments":[{"expression":{"id":5022,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3431:3:26","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3435:6:26","memberName":"sender","nodeType":"MemberAccess","src":"3431:10:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":5026,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3451:4:26","typeDescriptions":{"typeIdentifier":"t_contract$_AccessControlledV8_$5035","typeString":"contract AccessControlledV8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AccessControlledV8_$5035","typeString":"contract AccessControlledV8"}],"id":5025,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3443:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5024,"name":"address","nodeType":"ElementaryTypeName","src":"3443:7:26","typeDescriptions":{}}},"id":5027,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3443:13:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5028,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5007,"src":"3458:9:26","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":5021,"name":"Unauthorized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4916,"src":"3418:12:26","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,address,string memory) pure"}},"id":5029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3418:50:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5030,"nodeType":"RevertStatement","src":"3411:57:26"}]}}]},"documentation":{"id":5005,"nodeType":"StructuredDocumentation","src":"3072:126:26","text":" @notice Reverts if the call is not allowed by AccessControlManager\n @param signature Method signature"},"id":5034,"implemented":true,"kind":"function","modifiers":[],"name":"_checkAccessAllowed","nameLocation":"3212:19:26","nodeType":"FunctionDefinition","parameters":{"id":5008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5007,"mutability":"mutable","name":"signature","nameLocation":"3246:9:26","nodeType":"VariableDeclaration","scope":5034,"src":"3232:23:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":5006,"name":"string","nodeType":"ElementaryTypeName","src":"3232:6:26","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3231:25:26"},"returnParameters":{"id":5009,"nodeType":"ParameterList","parameters":[],"src":"3271:0:26"},"scope":5035,"src":"3203:282:26","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":5036,"src":"586:2901:26","usedErrors":[4916],"usedEvents":[17,124,422,4907]}],"src":"41:3447:26"},"id":26},"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol":{"ast":{"absolutePath":"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol","exportedSymbols":{"IAccessControl":[3760],"IAccessControlManagerV8":[5080]},"id":5081,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":5037,"literals":["solidity","^","0.8",".25"],"nodeType":"PragmaDirective","src":"41:24:27"},{"absolutePath":"@openzeppelin/contracts/access/IAccessControl.sol","file":"@openzeppelin/contracts/access/IAccessControl.sol","id":5038,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5081,"sourceUnit":3761,"src":"67:59:27","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":5040,"name":"IAccessControl","nameLocations":["299:14:27"],"nodeType":"IdentifierPath","referencedDeclaration":3760,"src":"299:14:27"},"id":5041,"nodeType":"InheritanceSpecifier","src":"299:14:27"}],"canonicalName":"IAccessControlManagerV8","contractDependencies":[],"contractKind":"interface","documentation":{"id":5039,"nodeType":"StructuredDocumentation","src":"128:133:27","text":" @title IAccessControlManagerV8\n @author Venus\n @notice Interface implemented by the `AccessControlManagerV8` contract."},"fullyImplemented":false,"id":5080,"linearizedBaseContracts":[5080,3760],"name":"IAccessControlManagerV8","nameLocation":"272:23:27","nodeType":"ContractDefinition","nodes":[{"functionSelector":"584f6b60","id":5050,"implemented":false,"kind":"function","modifiers":[],"name":"giveCallPermission","nameLocation":"329:18:27","nodeType":"FunctionDefinition","parameters":{"id":5048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5043,"mutability":"mutable","name":"contractAddress","nameLocation":"356:15:27","nodeType":"VariableDeclaration","scope":5050,"src":"348:23:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5042,"name":"address","nodeType":"ElementaryTypeName","src":"348:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5045,"mutability":"mutable","name":"functionSig","nameLocation":"389:11:27","nodeType":"VariableDeclaration","scope":5050,"src":"373:27:27","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":5044,"name":"string","nodeType":"ElementaryTypeName","src":"373:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":5047,"mutability":"mutable","name":"accountToPermit","nameLocation":"410:15:27","nodeType":"VariableDeclaration","scope":5050,"src":"402:23:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5046,"name":"address","nodeType":"ElementaryTypeName","src":"402:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"347:79:27"},"returnParameters":{"id":5049,"nodeType":"ParameterList","parameters":[],"src":"435:0:27"},"scope":5080,"src":"320:116:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"545f7a32","id":5059,"implemented":false,"kind":"function","modifiers":[],"name":"revokeCallPermission","nameLocation":"451:20:27","nodeType":"FunctionDefinition","parameters":{"id":5057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5052,"mutability":"mutable","name":"contractAddress","nameLocation":"489:15:27","nodeType":"VariableDeclaration","scope":5059,"src":"481:23:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5051,"name":"address","nodeType":"ElementaryTypeName","src":"481:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5054,"mutability":"mutable","name":"functionSig","nameLocation":"530:11:27","nodeType":"VariableDeclaration","scope":5059,"src":"514:27:27","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":5053,"name":"string","nodeType":"ElementaryTypeName","src":"514:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":5056,"mutability":"mutable","name":"accountToRevoke","nameLocation":"559:15:27","nodeType":"VariableDeclaration","scope":5059,"src":"551:23:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5055,"name":"address","nodeType":"ElementaryTypeName","src":"551:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"471:109:27"},"returnParameters":{"id":5058,"nodeType":"ParameterList","parameters":[],"src":"589:0:27"},"scope":5080,"src":"442:148:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"18c5e8ab","id":5068,"implemented":false,"kind":"function","modifiers":[],"name":"isAllowedToCall","nameLocation":"605:15:27","nodeType":"FunctionDefinition","parameters":{"id":5064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5061,"mutability":"mutable","name":"account","nameLocation":"629:7:27","nodeType":"VariableDeclaration","scope":5068,"src":"621:15:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5060,"name":"address","nodeType":"ElementaryTypeName","src":"621:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5063,"mutability":"mutable","name":"functionSig","nameLocation":"654:11:27","nodeType":"VariableDeclaration","scope":5068,"src":"638:27:27","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":5062,"name":"string","nodeType":"ElementaryTypeName","src":"638:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"620:46:27"},"returnParameters":{"id":5067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5066,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5068,"src":"690:4:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5065,"name":"bool","nodeType":"ElementaryTypeName","src":"690:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"689:6:27"},"scope":5080,"src":"596:100:27","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"82bfd0f0","id":5079,"implemented":false,"kind":"function","modifiers":[],"name":"hasPermission","nameLocation":"711:13:27","nodeType":"FunctionDefinition","parameters":{"id":5075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5070,"mutability":"mutable","name":"account","nameLocation":"742:7:27","nodeType":"VariableDeclaration","scope":5079,"src":"734:15:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5069,"name":"address","nodeType":"ElementaryTypeName","src":"734:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5072,"mutability":"mutable","name":"contractAddress","nameLocation":"767:15:27","nodeType":"VariableDeclaration","scope":5079,"src":"759:23:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5071,"name":"address","nodeType":"ElementaryTypeName","src":"759:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5074,"mutability":"mutable","name":"functionSig","nameLocation":"808:11:27","nodeType":"VariableDeclaration","scope":5079,"src":"792:27:27","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":5073,"name":"string","nodeType":"ElementaryTypeName","src":"792:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"724:101:27"},"returnParameters":{"id":5078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5077,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5079,"src":"849:4:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5076,"name":"bool","nodeType":"ElementaryTypeName","src":"849:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"848:6:27"},"scope":5080,"src":"702:153:27","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":5081,"src":"262:595:27","usedErrors":[],"usedEvents":[3699,3708,3717]}],"src":"41:817:27"},"id":27},"@venusprotocol/isolated-pools/contracts/Comptroller.sol":{"ast":{"absolutePath":"@venusprotocol/isolated-pools/contracts/Comptroller.sol","exportedSymbols":{"AccessControlledV8":[5035],"Action":[9148],"Comptroller":[9130],"ComptrollerInterface":[9353],"ComptrollerStorage":[9575],"ExponentialNoError":[10223],"IPrime":[16613],"MaxLoopsLimitHelper":[10335],"Ownable2StepUpgradeable":[106],"ResilientOracleInterface":[16173],"RewardsDistributor":[12324],"VToken":[15506],"ensureNonzeroAddress":[16143]},"id":9131,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":5082,"literals":["solidity","0.8",".25"],"nodeType":"PragmaDirective","src":"41:23:28"},{"absolutePath":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol","id":5084,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9131,"sourceUnit":107,"src":"66:113:28","symbolAliases":[{"foreign":{"id":5083,"name":"Ownable2StepUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":106,"src":"75:23:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol","file":"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol","id":5086,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9131,"sourceUnit":16196,"src":"180:106:28","symbolAliases":[{"foreign":{"id":5085,"name":"ResilientOracleInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16173,"src":"189:24:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol","file":"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol","id":5088,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9131,"sourceUnit":5036,"src":"287:117:28","symbolAliases":[{"foreign":{"id":5087,"name":"AccessControlledV8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5035,"src":"296:18:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol","file":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol","id":5090,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9131,"sourceUnit":16614,"src":"405:100:28","symbolAliases":[{"foreign":{"id":5089,"name":"IPrime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16613,"src":"414:6:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol","file":"./ComptrollerInterface.sol","id":5093,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9131,"sourceUnit":9432,"src":"507:74:28","symbolAliases":[{"foreign":{"id":5091,"name":"ComptrollerInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9353,"src":"516:20:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":5092,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"538:6:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol","file":"./ComptrollerStorage.sol","id":5095,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9131,"sourceUnit":9576,"src":"582:62:28","symbolAliases":[{"foreign":{"id":5094,"name":"ComptrollerStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9575,"src":"591:18:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol","file":"./ExponentialNoError.sol","id":5097,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9131,"sourceUnit":10224,"src":"645:62:28","symbolAliases":[{"foreign":{"id":5096,"name":"ExponentialNoError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10223,"src":"654:18:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/VToken.sol","file":"./VToken.sol","id":5099,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9131,"sourceUnit":15507,"src":"708:38:28","symbolAliases":[{"foreign":{"id":5098,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"717:6:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol","file":"./Rewards/RewardsDistributor.sol","id":5101,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9131,"sourceUnit":12325,"src":"747:70:28","symbolAliases":[{"foreign":{"id":5100,"name":"RewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12324,"src":"756:18:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol","file":"./MaxLoopsLimitHelper.sol","id":5103,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9131,"sourceUnit":10336,"src":"818:64:28","symbolAliases":[{"foreign":{"id":5102,"name":"MaxLoopsLimitHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10335,"src":"827:19:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/lib/validators.sol","file":"./lib/validators.sol","id":5105,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9131,"sourceUnit":16144,"src":"883:60:28","symbolAliases":[{"foreign":{"id":5104,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16143,"src":"892:20:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":5107,"name":"Ownable2StepUpgradeable","nameLocations":["3251:23:28"],"nodeType":"IdentifierPath","referencedDeclaration":106,"src":"3251:23:28"},"id":5108,"nodeType":"InheritanceSpecifier","src":"3251:23:28"},{"baseName":{"id":5109,"name":"AccessControlledV8","nameLocations":["3280:18:28"],"nodeType":"IdentifierPath","referencedDeclaration":5035,"src":"3280:18:28"},"id":5110,"nodeType":"InheritanceSpecifier","src":"3280:18:28"},{"baseName":{"id":5111,"name":"ComptrollerStorage","nameLocations":["3304:18:28"],"nodeType":"IdentifierPath","referencedDeclaration":9575,"src":"3304:18:28"},"id":5112,"nodeType":"InheritanceSpecifier","src":"3304:18:28"},{"baseName":{"id":5113,"name":"ComptrollerInterface","nameLocations":["3328:20:28"],"nodeType":"IdentifierPath","referencedDeclaration":9353,"src":"3328:20:28"},"id":5114,"nodeType":"InheritanceSpecifier","src":"3328:20:28"},{"baseName":{"id":5115,"name":"ExponentialNoError","nameLocations":["3354:18:28"],"nodeType":"IdentifierPath","referencedDeclaration":10223,"src":"3354:18:28"},"id":5116,"nodeType":"InheritanceSpecifier","src":"3354:18:28"},{"baseName":{"id":5117,"name":"MaxLoopsLimitHelper","nameLocations":["3378:19:28"],"nodeType":"IdentifierPath","referencedDeclaration":10335,"src":"3378:19:28"},"id":5118,"nodeType":"InheritanceSpecifier","src":"3378:19:28"}],"canonicalName":"Comptroller","contractDependencies":[],"contractKind":"contract","documentation":{"id":5106,"nodeType":"StructuredDocumentation","src":"945:2277:28","text":" @title Comptroller\n @author Venus\n @notice The Comptroller is designed to provide checks for all minting, redeeming, transferring, borrowing, lending, repaying, liquidating,\n and seizing done by the `vToken` contract. Each pool has one `Comptroller` checking these interactions across markets. When a user interacts\n with a given market by one of these main actions, a call is made to a corresponding hook in the associated `Comptroller`, which either allows\n or reverts the transaction. These hooks also update supply and borrow rewards as they are called. The comptroller holds the logic for assessing\n liquidity snapshots of an account via the collateral factor and liquidation threshold. This check determines the collateral needed for a borrow,\n as well as how much of a borrow may be liquidated. A user may borrow a portion of their collateral with the maximum amount determined by the\n markets collateral factor. However, if their borrowed amount exceeds an amount calculated using the market’s corresponding liquidation threshold,\n the borrow is eligible for liquidation.\n The `Comptroller` also includes two functions `liquidateAccount()` and `healAccount()`, which are meant to handle accounts that do not exceed\n the `minLiquidatableCollateral` for the `Comptroller`:\n - `healAccount()`: This function is called to seize all of a given user’s collateral, requiring the `msg.sender` repay a certain percentage\n of the debt calculated by `collateral/(borrows*liquidationIncentive)`. The function can only be called if the calculated percentage does not exceed\n 100%, because otherwise no `badDebt` would be created and `liquidateAccount()` should be used instead. The difference in the actual amount of debt\n and debt paid off is recorded as `badDebt` for each market, which can then be auctioned off for the risk reserves of the associated pool.\n - `liquidateAccount()`: This function can only be called if the collateral seized will cover all borrows of an account, as well as the liquidation\n incentive. Otherwise, the pool will incur bad debt, in which case the function `healAccount()` should be used instead. This function skips the logic\n verifying that the repay amount does not exceed the close factor."},"fullyImplemented":true,"id":9130,"internalFunctionIDs":{"9020":1,"9041":2},"linearizedBaseContracts":[9130,10335,10223,9353,9575,5035,106,239,2821,576],"name":"Comptroller","nameLocation":"3232:11:28","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":5119,"nodeType":"StructuredDocumentation","src":"3450:61:28","text":"@custom:oz-upgrades-unsafe-allow state-variable-immutable"},"functionSelector":"afcff50f","id":5121,"mutability":"immutable","name":"poolRegistry","nameLocation":"3541:12:28","nodeType":"VariableDeclaration","scope":9130,"src":"3516:37:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5120,"name":"address","nodeType":"ElementaryTypeName","src":"3516:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"anonymous":false,"documentation":{"id":5122,"nodeType":"StructuredDocumentation","src":"3560:51:28","text":"@notice Emitted when an account enters a market"},"eventSelector":"3ab23ab0d51cccc0c3085aec51f99228625aa1a922b3a8ca89a26b0f2027a1a5","id":5129,"name":"MarketEntered","nameLocation":"3622:13:28","nodeType":"EventDefinition","parameters":{"id":5128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5125,"indexed":true,"mutability":"mutable","name":"vToken","nameLocation":"3651:6:28","nodeType":"VariableDeclaration","scope":5129,"src":"3636:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":5124,"nodeType":"UserDefinedTypeName","pathNode":{"id":5123,"name":"VToken","nameLocations":["3636:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"3636:6:28"},"referencedDeclaration":15506,"src":"3636:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"},{"constant":false,"id":5127,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"3675:7:28","nodeType":"VariableDeclaration","scope":5129,"src":"3659:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5126,"name":"address","nodeType":"ElementaryTypeName","src":"3659:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3635:48:28"},"src":"3616:68:28"},{"anonymous":false,"documentation":{"id":5130,"nodeType":"StructuredDocumentation","src":"3690:50:28","text":"@notice Emitted when an account exits a market"},"eventSelector":"e699a64c18b07ac5b7301aa273f36a2287239eb9501d81950672794afba29a0d","id":5137,"name":"MarketExited","nameLocation":"3751:12:28","nodeType":"EventDefinition","parameters":{"id":5136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5133,"indexed":true,"mutability":"mutable","name":"vToken","nameLocation":"3779:6:28","nodeType":"VariableDeclaration","scope":5137,"src":"3764:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":5132,"nodeType":"UserDefinedTypeName","pathNode":{"id":5131,"name":"VToken","nameLocations":["3764:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"3764:6:28"},"referencedDeclaration":15506,"src":"3764:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"},{"constant":false,"id":5135,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"3803:7:28","nodeType":"VariableDeclaration","scope":5137,"src":"3787:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5134,"name":"address","nodeType":"ElementaryTypeName","src":"3787:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3763:48:28"},"src":"3745:67:28"},{"anonymous":false,"documentation":{"id":5138,"nodeType":"StructuredDocumentation","src":"3818:57:28","text":"@notice Emitted when close factor is changed by admin"},"eventSelector":"3b9670cf975d26958e754b57098eaa2ac914d8d2a31b83257997b9f346110fd9","id":5144,"name":"NewCloseFactor","nameLocation":"3886:14:28","nodeType":"EventDefinition","parameters":{"id":5143,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5140,"indexed":false,"mutability":"mutable","name":"oldCloseFactorMantissa","nameLocation":"3909:22:28","nodeType":"VariableDeclaration","scope":5144,"src":"3901:30:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5139,"name":"uint256","nodeType":"ElementaryTypeName","src":"3901:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5142,"indexed":false,"mutability":"mutable","name":"newCloseFactorMantissa","nameLocation":"3941:22:28","nodeType":"VariableDeclaration","scope":5144,"src":"3933:30:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5141,"name":"uint256","nodeType":"ElementaryTypeName","src":"3933:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3900:64:28"},"src":"3880:85:28"},{"anonymous":false,"documentation":{"id":5145,"nodeType":"StructuredDocumentation","src":"3971:64:28","text":"@notice Emitted when a collateral factor is changed by admin"},"eventSelector":"70483e6592cd5182d45ac970e05bc62cdcc90e9d8ef2c2dbe686cf383bcd7fc5","id":5154,"name":"NewCollateralFactor","nameLocation":"4046:19:28","nodeType":"EventDefinition","parameters":{"id":5153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5148,"indexed":false,"mutability":"mutable","name":"vToken","nameLocation":"4073:6:28","nodeType":"VariableDeclaration","scope":5154,"src":"4066:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":5147,"nodeType":"UserDefinedTypeName","pathNode":{"id":5146,"name":"VToken","nameLocations":["4066:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"4066:6:28"},"referencedDeclaration":15506,"src":"4066:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"},{"constant":false,"id":5150,"indexed":false,"mutability":"mutable","name":"oldCollateralFactorMantissa","nameLocation":"4089:27:28","nodeType":"VariableDeclaration","scope":5154,"src":"4081:35:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5149,"name":"uint256","nodeType":"ElementaryTypeName","src":"4081:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5152,"indexed":false,"mutability":"mutable","name":"newCollateralFactorMantissa","nameLocation":"4126:27:28","nodeType":"VariableDeclaration","scope":5154,"src":"4118:35:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5151,"name":"uint256","nodeType":"ElementaryTypeName","src":"4118:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4065:89:28"},"src":"4040:115:28"},{"anonymous":false,"documentation":{"id":5155,"nodeType":"StructuredDocumentation","src":"4161:66:28","text":"@notice Emitted when liquidation threshold is changed by admin"},"eventSelector":"9e92c7d5fef69846094f3ddcadcb9402c6ba469c461368714f1cabd8ef48b591","id":5164,"name":"NewLiquidationThreshold","nameLocation":"4238:23:28","nodeType":"EventDefinition","parameters":{"id":5163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5158,"indexed":false,"mutability":"mutable","name":"vToken","nameLocation":"4278:6:28","nodeType":"VariableDeclaration","scope":5164,"src":"4271:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":5157,"nodeType":"UserDefinedTypeName","pathNode":{"id":5156,"name":"VToken","nameLocations":["4271:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"4271:6:28"},"referencedDeclaration":15506,"src":"4271:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"},{"constant":false,"id":5160,"indexed":false,"mutability":"mutable","name":"oldLiquidationThresholdMantissa","nameLocation":"4302:31:28","nodeType":"VariableDeclaration","scope":5164,"src":"4294:39:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5159,"name":"uint256","nodeType":"ElementaryTypeName","src":"4294:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5162,"indexed":false,"mutability":"mutable","name":"newLiquidationThresholdMantissa","nameLocation":"4351:31:28","nodeType":"VariableDeclaration","scope":5164,"src":"4343:39:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5161,"name":"uint256","nodeType":"ElementaryTypeName","src":"4343:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4261:127:28"},"src":"4232:157:28"},{"anonymous":false,"documentation":{"id":5165,"nodeType":"StructuredDocumentation","src":"4395:66:28","text":"@notice Emitted when liquidation incentive is changed by admin"},"eventSelector":"aeba5a6c40a8ac138134bff1aaa65debf25971188a58804bad717f82f0ec1316","id":5171,"name":"NewLiquidationIncentive","nameLocation":"4472:23:28","nodeType":"EventDefinition","parameters":{"id":5170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5167,"indexed":false,"mutability":"mutable","name":"oldLiquidationIncentiveMantissa","nameLocation":"4504:31:28","nodeType":"VariableDeclaration","scope":5171,"src":"4496:39:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5166,"name":"uint256","nodeType":"ElementaryTypeName","src":"4496:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5169,"indexed":false,"mutability":"mutable","name":"newLiquidationIncentiveMantissa","nameLocation":"4545:31:28","nodeType":"VariableDeclaration","scope":5171,"src":"4537:39:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5168,"name":"uint256","nodeType":"ElementaryTypeName","src":"4537:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4495:82:28"},"src":"4466:112:28"},{"anonymous":false,"documentation":{"id":5172,"nodeType":"StructuredDocumentation","src":"4584:48:28","text":"@notice Emitted when price oracle is changed"},"eventSelector":"d52b2b9b7e9ee655fcb95d2e5b9e0c9f69e7ef2b8e9d2d0ea78402d576d22e22","id":5180,"name":"NewPriceOracle","nameLocation":"4643:14:28","nodeType":"EventDefinition","parameters":{"id":5179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5175,"indexed":false,"mutability":"mutable","name":"oldPriceOracle","nameLocation":"4683:14:28","nodeType":"VariableDeclaration","scope":5180,"src":"4658:39:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"},"typeName":{"id":5174,"nodeType":"UserDefinedTypeName","pathNode":{"id":5173,"name":"ResilientOracleInterface","nameLocations":["4658:24:28"],"nodeType":"IdentifierPath","referencedDeclaration":16173,"src":"4658:24:28"},"referencedDeclaration":16173,"src":"4658:24:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"visibility":"internal"},{"constant":false,"id":5178,"indexed":false,"mutability":"mutable","name":"newPriceOracle","nameLocation":"4724:14:28","nodeType":"VariableDeclaration","scope":5180,"src":"4699:39:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"},"typeName":{"id":5177,"nodeType":"UserDefinedTypeName","pathNode":{"id":5176,"name":"ResilientOracleInterface","nameLocations":["4699:24:28"],"nodeType":"IdentifierPath","referencedDeclaration":16173,"src":"4699:24:28"},"referencedDeclaration":16173,"src":"4699:24:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"visibility":"internal"}],"src":"4657:82:28"},"src":"4637:103:28"},{"anonymous":false,"documentation":{"id":5181,"nodeType":"StructuredDocumentation","src":"4746:56:28","text":"@notice Emitted when an action is paused on a market"},"eventSelector":"35007a986bcd36d2f73fc7f1b73762e12eadb4406dd163194950fd3b5a6a827d","id":5191,"name":"ActionPausedMarket","nameLocation":"4813:18:28","nodeType":"EventDefinition","parameters":{"id":5190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5184,"indexed":false,"mutability":"mutable","name":"vToken","nameLocation":"4839:6:28","nodeType":"VariableDeclaration","scope":5191,"src":"4832:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":5183,"nodeType":"UserDefinedTypeName","pathNode":{"id":5182,"name":"VToken","nameLocations":["4832:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"4832:6:28"},"referencedDeclaration":15506,"src":"4832:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"},{"constant":false,"id":5187,"indexed":false,"mutability":"mutable","name":"action","nameLocation":"4854:6:28","nodeType":"VariableDeclaration","scope":5191,"src":"4847:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"},"typeName":{"id":5186,"nodeType":"UserDefinedTypeName","pathNode":{"id":5185,"name":"Action","nameLocations":["4847:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":9148,"src":"4847:6:28"},"referencedDeclaration":9148,"src":"4847:6:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}},"visibility":"internal"},{"constant":false,"id":5189,"indexed":false,"mutability":"mutable","name":"pauseState","nameLocation":"4867:10:28","nodeType":"VariableDeclaration","scope":5191,"src":"4862:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5188,"name":"bool","nodeType":"ElementaryTypeName","src":"4862:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4831:47:28"},"src":"4807:72:28"},{"anonymous":false,"documentation":{"id":5192,"nodeType":"StructuredDocumentation","src":"4885:59:28","text":"@notice Emitted when borrow cap for a vToken is changed"},"eventSelector":"6f1951b2aad10f3fc81b86d91105b413a5b3f847a34bbc5ce1904201b14438f6","id":5199,"name":"NewBorrowCap","nameLocation":"4955:12:28","nodeType":"EventDefinition","parameters":{"id":5198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5195,"indexed":true,"mutability":"mutable","name":"vToken","nameLocation":"4983:6:28","nodeType":"VariableDeclaration","scope":5199,"src":"4968:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":5194,"nodeType":"UserDefinedTypeName","pathNode":{"id":5193,"name":"VToken","nameLocations":["4968:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"4968:6:28"},"referencedDeclaration":15506,"src":"4968:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"},{"constant":false,"id":5197,"indexed":false,"mutability":"mutable","name":"newBorrowCap","nameLocation":"4999:12:28","nodeType":"VariableDeclaration","scope":5199,"src":"4991:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5196,"name":"uint256","nodeType":"ElementaryTypeName","src":"4991:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4967:45:28"},"src":"4949:64:28"},{"anonymous":false,"documentation":{"id":5200,"nodeType":"StructuredDocumentation","src":"5019:96:28","text":"@notice Emitted when the collateral threshold (in USD) for non-batch liquidations is changed"},"eventSelector":"00b4f4f153ad7f1397564a8830fef092481e8cf6a2cd3ff04f96d10ba51200a5","id":5206,"name":"NewMinLiquidatableCollateral","nameLocation":"5126:28:28","nodeType":"EventDefinition","parameters":{"id":5205,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5202,"indexed":false,"mutability":"mutable","name":"oldMinLiquidatableCollateral","nameLocation":"5163:28:28","nodeType":"VariableDeclaration","scope":5206,"src":"5155:36:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5201,"name":"uint256","nodeType":"ElementaryTypeName","src":"5155:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5204,"indexed":false,"mutability":"mutable","name":"newMinLiquidatableCollateral","nameLocation":"5201:28:28","nodeType":"VariableDeclaration","scope":5206,"src":"5193:36:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5203,"name":"uint256","nodeType":"ElementaryTypeName","src":"5193:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5154:76:28"},"src":"5120:111:28"},{"anonymous":false,"documentation":{"id":5207,"nodeType":"StructuredDocumentation","src":"5237:59:28","text":"@notice Emitted when supply cap for a vToken is changed"},"eventSelector":"9e0ad9cee10bdf36b7fbd38910c0bdff0f275ace679b45b922381c2723d676f8","id":5214,"name":"NewSupplyCap","nameLocation":"5307:12:28","nodeType":"EventDefinition","parameters":{"id":5213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5210,"indexed":true,"mutability":"mutable","name":"vToken","nameLocation":"5335:6:28","nodeType":"VariableDeclaration","scope":5214,"src":"5320:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":5209,"nodeType":"UserDefinedTypeName","pathNode":{"id":5208,"name":"VToken","nameLocations":["5320:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"5320:6:28"},"referencedDeclaration":15506,"src":"5320:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"},{"constant":false,"id":5212,"indexed":false,"mutability":"mutable","name":"newSupplyCap","nameLocation":"5351:12:28","nodeType":"VariableDeclaration","scope":5214,"src":"5343:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5211,"name":"uint256","nodeType":"ElementaryTypeName","src":"5343:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5319:45:28"},"src":"5301:64:28"},{"anonymous":false,"documentation":{"id":5215,"nodeType":"StructuredDocumentation","src":"5371:55:28","text":"@notice Emitted when a rewards distributor is added"},"eventSelector":"066a44d77db1581603d7d8ca1ca494756c0d359c7ffacd9b2c8f78dab7aceae2","id":5221,"name":"NewRewardsDistributor","nameLocation":"5437:21:28","nodeType":"EventDefinition","parameters":{"id":5220,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5217,"indexed":true,"mutability":"mutable","name":"rewardsDistributor","nameLocation":"5475:18:28","nodeType":"VariableDeclaration","scope":5221,"src":"5459:34:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5216,"name":"address","nodeType":"ElementaryTypeName","src":"5459:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5219,"indexed":true,"mutability":"mutable","name":"rewardToken","nameLocation":"5511:11:28","nodeType":"VariableDeclaration","scope":5221,"src":"5495:27:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5218,"name":"address","nodeType":"ElementaryTypeName","src":"5495:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5458:65:28"},"src":"5431:93:28"},{"anonymous":false,"documentation":{"id":5222,"nodeType":"StructuredDocumentation","src":"5530:46:28","text":"@notice Emitted when a market is supported"},"eventSelector":"af16ad15f9e29d5140e8e81a30a92a755aa8edff3d301053c84392b70c0d09a3","id":5227,"name":"MarketSupported","nameLocation":"5587:15:28","nodeType":"EventDefinition","parameters":{"id":5226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5225,"indexed":false,"mutability":"mutable","name":"vToken","nameLocation":"5610:6:28","nodeType":"VariableDeclaration","scope":5227,"src":"5603:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":5224,"nodeType":"UserDefinedTypeName","pathNode":{"id":5223,"name":"VToken","nameLocations":["5603:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"5603:6:28"},"referencedDeclaration":15506,"src":"5603:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"}],"src":"5602:15:28"},"src":"5581:37:28"},{"anonymous":false,"documentation":{"id":5228,"nodeType":"StructuredDocumentation","src":"5624:64:28","text":"@notice Emitted when prime token contract address is changed"},"eventSelector":"cb20dab7409e4fb972d9adccb39530520b226ce6940d85c9523a499b950b6ea3","id":5236,"name":"NewPrimeToken","nameLocation":"5699:13:28","nodeType":"EventDefinition","parameters":{"id":5235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5231,"indexed":false,"mutability":"mutable","name":"oldPrimeToken","nameLocation":"5720:13:28","nodeType":"VariableDeclaration","scope":5236,"src":"5713:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"},"typeName":{"id":5230,"nodeType":"UserDefinedTypeName","pathNode":{"id":5229,"name":"IPrime","nameLocations":["5713:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":16613,"src":"5713:6:28"},"referencedDeclaration":16613,"src":"5713:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}},"visibility":"internal"},{"constant":false,"id":5234,"indexed":false,"mutability":"mutable","name":"newPrimeToken","nameLocation":"5742:13:28","nodeType":"VariableDeclaration","scope":5236,"src":"5735:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"},"typeName":{"id":5233,"nodeType":"UserDefinedTypeName","pathNode":{"id":5232,"name":"IPrime","nameLocations":["5735:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":16613,"src":"5735:6:28"},"referencedDeclaration":16613,"src":"5735:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}},"visibility":"internal"}],"src":"5712:44:28"},"src":"5693:64:28"},{"anonymous":false,"documentation":{"id":5237,"nodeType":"StructuredDocumentation","src":"5763:79:28","text":"@notice Emitted when forced liquidation is enabled or disabled for a market"},"eventSelector":"03561d5280ebb02280893b1d60978e4a27e7654a149c5d0e7c2cf65389ce1694","id":5243,"name":"IsForcedLiquidationEnabledUpdated","nameLocation":"5853:33:28","nodeType":"EventDefinition","parameters":{"id":5242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5239,"indexed":true,"mutability":"mutable","name":"vToken","nameLocation":"5903:6:28","nodeType":"VariableDeclaration","scope":5243,"src":"5887:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5238,"name":"address","nodeType":"ElementaryTypeName","src":"5887:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5241,"indexed":false,"mutability":"mutable","name":"enable","nameLocation":"5916:6:28","nodeType":"VariableDeclaration","scope":5243,"src":"5911:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5240,"name":"bool","nodeType":"ElementaryTypeName","src":"5911:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5886:37:28"},"src":"5847:77:28"},{"anonymous":false,"documentation":{"id":5244,"nodeType":"StructuredDocumentation","src":"5930:45:28","text":"@notice Emitted when a market is unlisted"},"eventSelector":"302feb03efd5741df80efe7f97f5d93d74d46a542a3d312d0faae64fa1f3e0e9","id":5248,"name":"MarketUnlisted","nameLocation":"5986:14:28","nodeType":"EventDefinition","parameters":{"id":5247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5246,"indexed":true,"mutability":"mutable","name":"vToken","nameLocation":"6017:6:28","nodeType":"VariableDeclaration","scope":5248,"src":"6001:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5245,"name":"address","nodeType":"ElementaryTypeName","src":"6001:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6000:24:28"},"src":"5980:45:28"},{"anonymous":false,"documentation":{"id":5249,"nodeType":"StructuredDocumentation","src":"6030:94:28","text":"@notice Emitted when the borrowing or redeeming delegate rights are updated for an account"},"eventSelector":"cb325b7784f78486e42849c7a50b8c5ee008d00cd90e108a58912c0fcb6288b4","id":5257,"name":"DelegateUpdated","nameLocation":"6135:15:28","nodeType":"EventDefinition","parameters":{"id":5256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5251,"indexed":true,"mutability":"mutable","name":"approver","nameLocation":"6167:8:28","nodeType":"VariableDeclaration","scope":5257,"src":"6151:24:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5250,"name":"address","nodeType":"ElementaryTypeName","src":"6151:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5253,"indexed":true,"mutability":"mutable","name":"delegate","nameLocation":"6193:8:28","nodeType":"VariableDeclaration","scope":5257,"src":"6177:24:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5252,"name":"address","nodeType":"ElementaryTypeName","src":"6177:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5255,"indexed":false,"mutability":"mutable","name":"approved","nameLocation":"6208:8:28","nodeType":"VariableDeclaration","scope":5257,"src":"6203:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5254,"name":"bool","nodeType":"ElementaryTypeName","src":"6203:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6150:67:28"},"src":"6129:89:28"},{"documentation":{"id":5258,"nodeType":"StructuredDocumentation","src":"6224:65:28","text":"@notice Thrown when collateral factor exceeds the upper bound"},"errorSelector":"bc8b2b40","id":5260,"name":"InvalidCollateralFactor","nameLocation":"6300:23:28","nodeType":"ErrorDefinition","parameters":{"id":5259,"nodeType":"ParameterList","parameters":[],"src":"6323:2:28"},"src":"6294:32:28"},{"documentation":{"id":5261,"nodeType":"StructuredDocumentation","src":"6332:75:28","text":"@notice Thrown when liquidation threshold exceeds the collateral factor"},"errorSelector":"3e51d2c0","id":5263,"name":"InvalidLiquidationThreshold","nameLocation":"6418:27:28","nodeType":"ErrorDefinition","parameters":{"id":5262,"nodeType":"ParameterList","parameters":[],"src":"6445:2:28"},"src":"6412:36:28"},{"documentation":{"id":5264,"nodeType":"StructuredDocumentation","src":"6454:106:28","text":"@notice Thrown when the action is only available to specific sender, but the real sender was different"},"errorSelector":"9d2707f6","id":5270,"name":"UnexpectedSender","nameLocation":"6571:16:28","nodeType":"ErrorDefinition","parameters":{"id":5269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5266,"mutability":"mutable","name":"expectedSender","nameLocation":"6596:14:28","nodeType":"VariableDeclaration","scope":5270,"src":"6588:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5265,"name":"address","nodeType":"ElementaryTypeName","src":"6588:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5268,"mutability":"mutable","name":"actualSender","nameLocation":"6620:12:28","nodeType":"VariableDeclaration","scope":5270,"src":"6612:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5267,"name":"address","nodeType":"ElementaryTypeName","src":"6612:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6587:46:28"},"src":"6565:69:28"},{"documentation":{"id":5271,"nodeType":"StructuredDocumentation","src":"6640:74:28","text":"@notice Thrown when the oracle returns an invalid price for some asset"},"errorSelector":"0e52a7d0","id":5275,"name":"PriceError","nameLocation":"6725:10:28","nodeType":"ErrorDefinition","parameters":{"id":5274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5273,"mutability":"mutable","name":"vToken","nameLocation":"6744:6:28","nodeType":"VariableDeclaration","scope":5275,"src":"6736:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5272,"name":"address","nodeType":"ElementaryTypeName","src":"6736:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6735:16:28"},"src":"6719:33:28"},{"documentation":{"id":5276,"nodeType":"StructuredDocumentation","src":"6758:108:28","text":"@notice Thrown if VToken unexpectedly returned a nonzero error code while trying to get account snapshot"},"errorSelector":"578d3640","id":5282,"name":"SnapshotError","nameLocation":"6877:13:28","nodeType":"ErrorDefinition","parameters":{"id":5281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5278,"mutability":"mutable","name":"vToken","nameLocation":"6899:6:28","nodeType":"VariableDeclaration","scope":5282,"src":"6891:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5277,"name":"address","nodeType":"ElementaryTypeName","src":"6891:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5280,"mutability":"mutable","name":"user","nameLocation":"6915:4:28","nodeType":"VariableDeclaration","scope":5282,"src":"6907:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5279,"name":"address","nodeType":"ElementaryTypeName","src":"6907:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6890:30:28"},"src":"6871:50:28"},{"documentation":{"id":5283,"nodeType":"StructuredDocumentation","src":"6927:48:28","text":"@notice Thrown when the market is not listed"},"errorSelector":"b5343d72","id":5287,"name":"MarketNotListed","nameLocation":"6986:15:28","nodeType":"ErrorDefinition","parameters":{"id":5286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5285,"mutability":"mutable","name":"market","nameLocation":"7010:6:28","nodeType":"VariableDeclaration","scope":5287,"src":"7002:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5284,"name":"address","nodeType":"ElementaryTypeName","src":"7002:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7001:16:28"},"src":"6980:38:28"},{"documentation":{"id":5288,"nodeType":"StructuredDocumentation","src":"7024:62:28","text":"@notice Thrown when a market has an unexpected comptroller"},"errorSelector":"0c73eb05","id":5290,"name":"ComptrollerMismatch","nameLocation":"7097:19:28","nodeType":"ErrorDefinition","parameters":{"id":5289,"nodeType":"ParameterList","parameters":[],"src":"7116:2:28"},"src":"7091:28:28"},{"documentation":{"id":5291,"nodeType":"StructuredDocumentation","src":"7125:52:28","text":"@notice Thrown when user is not member of market"},"errorSelector":"66fd96d8","id":5297,"name":"MarketNotCollateral","nameLocation":"7188:19:28","nodeType":"ErrorDefinition","parameters":{"id":5296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5293,"mutability":"mutable","name":"vToken","nameLocation":"7216:6:28","nodeType":"VariableDeclaration","scope":5297,"src":"7208:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5292,"name":"address","nodeType":"ElementaryTypeName","src":"7208:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5295,"mutability":"mutable","name":"user","nameLocation":"7232:4:28","nodeType":"VariableDeclaration","scope":5297,"src":"7224:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5294,"name":"address","nodeType":"ElementaryTypeName","src":"7224:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7207:30:28"},"src":"7182:56:28"},{"documentation":{"id":5298,"nodeType":"StructuredDocumentation","src":"7244:51:28","text":"@notice Thrown when borrow action is not paused"},"errorSelector":"0c26c1d4","id":5300,"name":"BorrowActionNotPaused","nameLocation":"7306:21:28","nodeType":"ErrorDefinition","parameters":{"id":5299,"nodeType":"ParameterList","parameters":[],"src":"7327:2:28"},"src":"7300:30:28"},{"documentation":{"id":5301,"nodeType":"StructuredDocumentation","src":"7336:49:28","text":"@notice Thrown when mint action is not paused"},"errorSelector":"6ed36fb0","id":5303,"name":"MintActionNotPaused","nameLocation":"7396:19:28","nodeType":"ErrorDefinition","parameters":{"id":5302,"nodeType":"ParameterList","parameters":[],"src":"7415:2:28"},"src":"7390:28:28"},{"documentation":{"id":5304,"nodeType":"StructuredDocumentation","src":"7424:51:28","text":"@notice Thrown when redeem action is not paused"},"errorSelector":"9caef6fa","id":5306,"name":"RedeemActionNotPaused","nameLocation":"7486:21:28","nodeType":"ErrorDefinition","parameters":{"id":5305,"nodeType":"ParameterList","parameters":[],"src":"7507:2:28"},"src":"7480:30:28"},{"documentation":{"id":5307,"nodeType":"StructuredDocumentation","src":"7516:50:28","text":"@notice Thrown when repay action is not paused"},"errorSelector":"2b1e3409","id":5309,"name":"RepayActionNotPaused","nameLocation":"7577:20:28","nodeType":"ErrorDefinition","parameters":{"id":5308,"nodeType":"ParameterList","parameters":[],"src":"7597:2:28"},"src":"7571:29:28"},{"documentation":{"id":5310,"nodeType":"StructuredDocumentation","src":"7606:50:28","text":"@notice Thrown when seize action is not paused"},"errorSelector":"bb56e525","id":5312,"name":"SeizeActionNotPaused","nameLocation":"7667:20:28","nodeType":"ErrorDefinition","parameters":{"id":5311,"nodeType":"ParameterList","parameters":[],"src":"7687:2:28"},"src":"7661:29:28"},{"documentation":{"id":5313,"nodeType":"StructuredDocumentation","src":"7696:56:28","text":"@notice Thrown when exit market action is not paused"},"errorSelector":"bd04a954","id":5315,"name":"ExitMarketActionNotPaused","nameLocation":"7763:25:28","nodeType":"ErrorDefinition","parameters":{"id":5314,"nodeType":"ParameterList","parameters":[],"src":"7788:2:28"},"src":"7757:34:28"},{"documentation":{"id":5316,"nodeType":"StructuredDocumentation","src":"7797:53:28","text":"@notice Thrown when transfer action is not paused"},"errorSelector":"21893dc4","id":5318,"name":"TransferActionNotPaused","nameLocation":"7861:23:28","nodeType":"ErrorDefinition","parameters":{"id":5317,"nodeType":"ParameterList","parameters":[],"src":"7884:2:28"},"src":"7855:32:28"},{"documentation":{"id":5319,"nodeType":"StructuredDocumentation","src":"7893:57:28","text":"@notice Thrown when enter market action is not paused"},"errorSelector":"5354d4e8","id":5321,"name":"EnterMarketActionNotPaused","nameLocation":"7961:26:28","nodeType":"ErrorDefinition","parameters":{"id":5320,"nodeType":"ParameterList","parameters":[],"src":"7987:2:28"},"src":"7955:35:28"},{"documentation":{"id":5322,"nodeType":"StructuredDocumentation","src":"7996:54:28","text":"@notice Thrown when liquidate action is not paused"},"errorSelector":"b3cf04ad","id":5324,"name":"LiquidateActionNotPaused","nameLocation":"8061:24:28","nodeType":"ErrorDefinition","parameters":{"id":5323,"nodeType":"ParameterList","parameters":[],"src":"8085:2:28"},"src":"8055:33:28"},{"documentation":{"id":5325,"nodeType":"StructuredDocumentation","src":"8094:46:28","text":"@notice Thrown when borrow cap is not zero"},"errorSelector":"668019b3","id":5327,"name":"BorrowCapIsNotZero","nameLocation":"8151:18:28","nodeType":"ErrorDefinition","parameters":{"id":5326,"nodeType":"ParameterList","parameters":[],"src":"8169:2:28"},"src":"8145:27:28"},{"documentation":{"id":5328,"nodeType":"StructuredDocumentation","src":"8178:46:28","text":"@notice Thrown when supply cap is not zero"},"errorSelector":"8603c8cf","id":5330,"name":"SupplyCapIsNotZero","nameLocation":"8235:18:28","nodeType":"ErrorDefinition","parameters":{"id":5329,"nodeType":"ParameterList","parameters":[],"src":"8253:2:28"},"src":"8229:27:28"},{"documentation":{"id":5331,"nodeType":"StructuredDocumentation","src":"8262:53:28","text":"@notice Thrown when collateral factor is not zero"},"errorSelector":"0e0f30f6","id":5333,"name":"CollateralFactorIsNotZero","nameLocation":"8326:25:28","nodeType":"ErrorDefinition","parameters":{"id":5332,"nodeType":"ParameterList","parameters":[],"src":"8351:2:28"},"src":"8320:34:28"},{"documentation":{"id":5334,"nodeType":"StructuredDocumentation","src":"8360:239:28","text":" @notice Thrown during the liquidation if user's total collateral amount is lower than\n   a predefined threshold. In this case only batch liquidations (either liquidateAccount\n   or healAccount) are available."},"errorSelector":"dcc3760a","id":5340,"name":"MinimalCollateralViolated","nameLocation":"8610:25:28","nodeType":"ErrorDefinition","parameters":{"id":5339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5336,"mutability":"mutable","name":"expectedGreaterThan","nameLocation":"8644:19:28","nodeType":"VariableDeclaration","scope":5340,"src":"8636:27:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5335,"name":"uint256","nodeType":"ElementaryTypeName","src":"8636:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5338,"mutability":"mutable","name":"actual","nameLocation":"8673:6:28","nodeType":"VariableDeclaration","scope":5340,"src":"8665:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5337,"name":"uint256","nodeType":"ElementaryTypeName","src":"8665:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8635:45:28"},"src":"8604:77:28"},{"errorSelector":"6914703c","id":5346,"name":"CollateralExceedsThreshold","nameLocation":"8692:26:28","nodeType":"ErrorDefinition","parameters":{"id":5345,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5342,"mutability":"mutable","name":"expectedLessThanOrEqualTo","nameLocation":"8727:25:28","nodeType":"VariableDeclaration","scope":5346,"src":"8719:33:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5341,"name":"uint256","nodeType":"ElementaryTypeName","src":"8719:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5344,"mutability":"mutable","name":"actual","nameLocation":"8762:6:28","nodeType":"VariableDeclaration","scope":5346,"src":"8754:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5343,"name":"uint256","nodeType":"ElementaryTypeName","src":"8754:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8718:51:28"},"src":"8686:84:28"},{"errorSelector":"b07e3bc4","id":5352,"name":"InsufficientCollateral","nameLocation":"8781:22:28","nodeType":"ErrorDefinition","parameters":{"id":5351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5348,"mutability":"mutable","name":"collateralToSeize","nameLocation":"8812:17:28","nodeType":"VariableDeclaration","scope":5352,"src":"8804:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5347,"name":"uint256","nodeType":"ElementaryTypeName","src":"8804:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5350,"mutability":"mutable","name":"availableCollateral","nameLocation":"8839:19:28","nodeType":"VariableDeclaration","scope":5352,"src":"8831:27:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5349,"name":"uint256","nodeType":"ElementaryTypeName","src":"8831:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8803:56:28"},"src":"8775:85:28"},{"documentation":{"id":5353,"nodeType":"StructuredDocumentation","src":"8866:85:28","text":"@notice Thrown when the account doesn't have enough liquidity to redeem or borrow"},"errorSelector":"bb55fd27","id":5355,"name":"InsufficientLiquidity","nameLocation":"8962:21:28","nodeType":"ErrorDefinition","parameters":{"id":5354,"nodeType":"ParameterList","parameters":[],"src":"8983:2:28"},"src":"8956:30:28"},{"documentation":{"id":5356,"nodeType":"StructuredDocumentation","src":"8992:61:28","text":"@notice Thrown when trying to liquidate a healthy account"},"errorSelector":"095bf333","id":5358,"name":"InsufficientShortfall","nameLocation":"9064:21:28","nodeType":"ErrorDefinition","parameters":{"id":5357,"nodeType":"ParameterList","parameters":[],"src":"9085:2:28"},"src":"9058:30:28"},{"documentation":{"id":5359,"nodeType":"StructuredDocumentation","src":"9094:73:28","text":"@notice Thrown when trying to repay more than allowed by close factor"},"errorSelector":"e46c1559","id":5361,"name":"TooMuchRepay","nameLocation":"9178:12:28","nodeType":"ErrorDefinition","parameters":{"id":5360,"nodeType":"ParameterList","parameters":[],"src":"9190:2:28"},"src":"9172:21:28"},{"documentation":{"id":5362,"nodeType":"StructuredDocumentation","src":"9199:96:28","text":"@notice Thrown if the user is trying to exit a market in which they have an outstanding debt"},"errorSelector":"f8a5d66d","id":5364,"name":"NonzeroBorrowBalance","nameLocation":"9306:20:28","nodeType":"ErrorDefinition","parameters":{"id":5363,"nodeType":"ParameterList","parameters":[],"src":"9326:2:28"},"src":"9300:29:28"},{"documentation":{"id":5365,"nodeType":"StructuredDocumentation","src":"9335:66:28","text":"@notice Thrown when trying to perform an action that is paused"},"errorSelector":"9d9e6588","id":5372,"name":"ActionPaused","nameLocation":"9412:12:28","nodeType":"ErrorDefinition","parameters":{"id":5371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5367,"mutability":"mutable","name":"market","nameLocation":"9433:6:28","nodeType":"VariableDeclaration","scope":5372,"src":"9425:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5366,"name":"address","nodeType":"ElementaryTypeName","src":"9425:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5370,"mutability":"mutable","name":"action","nameLocation":"9448:6:28","nodeType":"VariableDeclaration","scope":5372,"src":"9441:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"},"typeName":{"id":5369,"nodeType":"UserDefinedTypeName","pathNode":{"id":5368,"name":"Action","nameLocations":["9441:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":9148,"src":"9441:6:28"},"referencedDeclaration":9148,"src":"9441:6:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}},"visibility":"internal"}],"src":"9424:31:28"},"src":"9406:50:28"},{"documentation":{"id":5373,"nodeType":"StructuredDocumentation","src":"9462:69:28","text":"@notice Thrown when trying to add a market that is already listed"},"errorSelector":"d005ce47","id":5377,"name":"MarketAlreadyListed","nameLocation":"9542:19:28","nodeType":"ErrorDefinition","parameters":{"id":5376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5375,"mutability":"mutable","name":"market","nameLocation":"9570:6:28","nodeType":"VariableDeclaration","scope":5377,"src":"9562:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5374,"name":"address","nodeType":"ElementaryTypeName","src":"9562:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9561:16:28"},"src":"9536:42:28"},{"documentation":{"id":5378,"nodeType":"StructuredDocumentation","src":"9584:48:28","text":"@notice Thrown if the supply cap is exceeded"},"errorSelector":"db33be3d","id":5384,"name":"SupplyCapExceeded","nameLocation":"9643:17:28","nodeType":"ErrorDefinition","parameters":{"id":5383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5380,"mutability":"mutable","name":"market","nameLocation":"9669:6:28","nodeType":"VariableDeclaration","scope":5384,"src":"9661:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5379,"name":"address","nodeType":"ElementaryTypeName","src":"9661:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5382,"mutability":"mutable","name":"cap","nameLocation":"9685:3:28","nodeType":"VariableDeclaration","scope":5384,"src":"9677:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5381,"name":"uint256","nodeType":"ElementaryTypeName","src":"9677:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9660:29:28"},"src":"9637:53:28"},{"documentation":{"id":5385,"nodeType":"StructuredDocumentation","src":"9696:48:28","text":"@notice Thrown if the borrow cap is exceeded"},"errorSelector":"2e649eed","id":5391,"name":"BorrowCapExceeded","nameLocation":"9755:17:28","nodeType":"ErrorDefinition","parameters":{"id":5390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5387,"mutability":"mutable","name":"market","nameLocation":"9781:6:28","nodeType":"VariableDeclaration","scope":5391,"src":"9773:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5386,"name":"address","nodeType":"ElementaryTypeName","src":"9773:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5389,"mutability":"mutable","name":"cap","nameLocation":"9797:3:28","nodeType":"VariableDeclaration","scope":5391,"src":"9789:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5388,"name":"uint256","nodeType":"ElementaryTypeName","src":"9789:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9772:29:28"},"src":"9749:53:28"},{"documentation":{"id":5392,"nodeType":"StructuredDocumentation","src":"9808:84:28","text":"@notice Thrown if delegate approval status is already set to the requested value"},"errorSelector":"db6c2c83","id":5394,"name":"DelegationStatusUnchanged","nameLocation":"9903:25:28","nodeType":"ErrorDefinition","parameters":{"id":5393,"nodeType":"ParameterList","parameters":[],"src":"9928:2:28"},"src":"9897:34:28"},{"body":{"id":5411,"nodeType":"Block","src":"10165:123:28","statements":[{"expression":{"arguments":[{"id":5401,"name":"poolRegistry_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5397,"src":"10196:13:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5400,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16143,"src":"10175:20:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":5402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10175:35:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5403,"nodeType":"ExpressionStatement","src":"10175:35:28"},{"expression":{"id":5406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5404,"name":"poolRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5121,"src":"10221:12:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5405,"name":"poolRegistry_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5397,"src":"10236:13:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10221:28:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5407,"nodeType":"ExpressionStatement","src":"10221:28:28"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":5408,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":557,"src":"10259:20:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":5409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10259:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5410,"nodeType":"ExpressionStatement","src":"10259:22:28"}]},"documentation":{"id":5395,"nodeType":"StructuredDocumentation","src":"9937:188:28","text":"@param poolRegistry_ Pool registry address\n @custom:oz-upgrades-unsafe-allow constructor\n @custom:error ZeroAddressNotAllowed is thrown when pool registry address is zero"},"id":5412,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":5398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5397,"mutability":"mutable","name":"poolRegistry_","nameLocation":"10150:13:28","nodeType":"VariableDeclaration","scope":5412,"src":"10142:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5396,"name":"address","nodeType":"ElementaryTypeName","src":"10142:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10141:23:28"},"returnParameters":{"id":5399,"nodeType":"ParameterList","parameters":[],"src":"10165:0:28"},"scope":9130,"src":"10130:158:28","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":5433,"nodeType":"Block","src":"10548:142:28","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":5422,"name":"__Ownable2Step_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26,"src":"10558:19:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":5423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10558:21:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5424,"nodeType":"ExpressionStatement","src":"10558:21:28"},{"expression":{"arguments":[{"id":5426,"name":"accessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5417,"src":"10623:20:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5425,"name":"__AccessControlled_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4943,"src":"10589:33:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":5427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10589:55:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5428,"nodeType":"ExpressionStatement","src":"10589:55:28"},{"expression":{"arguments":[{"id":5430,"name":"loopLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5415,"src":"10673:9:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5429,"name":"_setMaxLoopsLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10317,"src":"10655:17:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":5431,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10655:28:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5432,"nodeType":"ExpressionStatement","src":"10655:28:28"}]},"documentation":{"id":5413,"nodeType":"StructuredDocumentation","src":"10294:159:28","text":" @param loopLimit Limit for the loops can iterate to avoid the DOS\n @param accessControlManager Access control manager contract address"},"functionSelector":"da35a26f","id":5434,"implemented":true,"kind":"function","modifiers":[{"id":5420,"kind":"modifierInvocation","modifierName":{"id":5419,"name":"initializer","nameLocations":["10536:11:28"],"nodeType":"IdentifierPath","referencedDeclaration":478,"src":"10536:11:28"},"nodeType":"ModifierInvocation","src":"10536:11:28"}],"name":"initialize","nameLocation":"10467:10:28","nodeType":"FunctionDefinition","parameters":{"id":5418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5415,"mutability":"mutable","name":"loopLimit","nameLocation":"10486:9:28","nodeType":"VariableDeclaration","scope":5434,"src":"10478:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5414,"name":"uint256","nodeType":"ElementaryTypeName","src":"10478:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5417,"mutability":"mutable","name":"accessControlManager","nameLocation":"10505:20:28","nodeType":"VariableDeclaration","scope":5434,"src":"10497:28:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5416,"name":"address","nodeType":"ElementaryTypeName","src":"10497:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10477:49:28"},"returnParameters":{"id":5421,"nodeType":"ParameterList","parameters":[],"src":"10548:0:28"},"scope":9130,"src":"10458:232:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[9158],"body":{"id":5495,"nodeType":"Block","src":"11374:306:28","statements":[{"assignments":[5446],"declarations":[{"constant":false,"id":5446,"mutability":"mutable","name":"len","nameLocation":"11392:3:28","nodeType":"VariableDeclaration","scope":5495,"src":"11384:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5445,"name":"uint256","nodeType":"ElementaryTypeName","src":"11384:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5449,"initialValue":{"expression":{"id":5447,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5438,"src":"11398:7:28","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":5448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11406:6:28","memberName":"length","nodeType":"MemberAccess","src":"11398:14:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11384:28:28"},{"assignments":[5454],"declarations":[{"constant":false,"id":5454,"mutability":"mutable","name":"results","nameLocation":"11440:7:28","nodeType":"VariableDeclaration","scope":5495,"src":"11423:24:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5452,"name":"uint256","nodeType":"ElementaryTypeName","src":"11423:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5453,"nodeType":"ArrayTypeName","src":"11423:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":5460,"initialValue":{"arguments":[{"id":5458,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5446,"src":"11464:3:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5457,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"11450:13:28","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":5455,"name":"uint256","nodeType":"ElementaryTypeName","src":"11454:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5456,"nodeType":"ArrayTypeName","src":"11454:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":5459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11450:18:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"11423:45:28"},{"body":{"id":5491,"nodeType":"Block","src":"11508:141:28","statements":[{"assignments":[5472],"declarations":[{"constant":false,"id":5472,"mutability":"mutable","name":"vToken","nameLocation":"11529:6:28","nodeType":"VariableDeclaration","scope":5491,"src":"11522:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":5471,"nodeType":"UserDefinedTypeName","pathNode":{"id":5470,"name":"VToken","nameLocations":["11522:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"11522:6:28"},"referencedDeclaration":15506,"src":"11522:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"}],"id":5478,"initialValue":{"arguments":[{"baseExpression":{"id":5474,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5438,"src":"11545:7:28","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":5476,"indexExpression":{"id":5475,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5462,"src":"11553:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11545:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5473,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"11538:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":5477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11538:18:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"nodeType":"VariableDeclarationStatement","src":"11522:34:28"},{"expression":{"arguments":[{"id":5480,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5472,"src":"11584:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"expression":{"id":5481,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11592:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11596:6:28","memberName":"sender","nodeType":"MemberAccess","src":"11592:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_address","typeString":"address"}],"id":5479,"name":"_addToMarket","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8572,"src":"11571:12:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_VToken_$15506_$_t_address_$returns$__$","typeString":"function (contract VToken,address)"}},"id":5483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11571:32:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5484,"nodeType":"ExpressionStatement","src":"11571:32:28"},{"expression":{"id":5489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5485,"name":"results","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5454,"src":"11617:7:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5487,"indexExpression":{"id":5486,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5462,"src":"11625:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11617:10:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5488,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9549,"src":"11630:8:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11617:21:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5490,"nodeType":"ExpressionStatement","src":"11617:21:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5464,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5462,"src":"11494:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5465,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5446,"src":"11498:3:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11494:7:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5492,"initializationExpression":{"assignments":[5462],"declarations":[{"constant":false,"id":5462,"mutability":"mutable","name":"i","nameLocation":"11491:1:28","nodeType":"VariableDeclaration","scope":5492,"src":"11483:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5461,"name":"uint256","nodeType":"ElementaryTypeName","src":"11483:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5463,"nodeType":"VariableDeclarationStatement","src":"11483:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11503:3:28","subExpression":{"id":5467,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5462,"src":"11505:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5469,"nodeType":"ExpressionStatement","src":"11503:3:28"},"nodeType":"ForStatement","src":"11478:171:28"},{"expression":{"id":5493,"name":"results","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5454,"src":"11666:7:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":5444,"id":5494,"nodeType":"Return","src":"11659:14:28"}]},"documentation":{"id":5435,"nodeType":"StructuredDocumentation","src":"10696:580:28","text":" @notice Add assets to be included in account liquidity calculation; enabling them to be used as collateral\n @param vTokens The list of addresses of the vToken markets to be enabled\n @return errors An array of NO_ERROR for compatibility with Venus core tooling\n @custom:event MarketEntered is emitted for each market on success\n @custom:error ActionPaused error is thrown if entering any of the markets is paused\n @custom:error MarketNotListed error is thrown if any of the markets is not listed\n @custom:access Not restricted"},"functionSelector":"c2998238","id":5496,"implemented":true,"kind":"function","modifiers":[],"name":"enterMarkets","nameLocation":"11290:12:28","nodeType":"FunctionDefinition","overrides":{"id":5440,"nodeType":"OverrideSpecifier","overrides":[],"src":"11338:8:28"},"parameters":{"id":5439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5438,"mutability":"mutable","name":"vTokens","nameLocation":"11320:7:28","nodeType":"VariableDeclaration","scope":5496,"src":"11303:24:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":5436,"name":"address","nodeType":"ElementaryTypeName","src":"11303:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5437,"nodeType":"ArrayTypeName","src":"11303:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"11302:26:28"},"returnParameters":{"id":5444,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5443,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5496,"src":"11356:16:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5441,"name":"uint256","nodeType":"ElementaryTypeName","src":"11356:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5442,"nodeType":"ArrayTypeName","src":"11356:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11355:18:28"},"scope":9130,"src":"11281:399:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5664,"nodeType":"Block","src":"13033:1577:28","statements":[{"expression":{"arguments":[{"hexValue":"756e6c6973744d61726b6574286164647265737329","id":5505,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13063:23:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_0686dab64fe8d9807e2053931b10b0e7048bd4400bd6932634d4238d831af023","typeString":"literal_string \"unlistMarket(address)\""},"value":"unlistMarket(address)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_0686dab64fe8d9807e2053931b10b0e7048bd4400bd6932634d4238d831af023","typeString":"literal_string \"unlistMarket(address)\""}],"id":5504,"name":"_checkAccessAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5034,"src":"13043:19:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) view"}},"id":5506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13043:44:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5507,"nodeType":"ExpressionStatement","src":"13043:44:28"},{"assignments":[5510],"declarations":[{"constant":false,"id":5510,"mutability":"mutable","name":"_market","nameLocation":"13113:7:28","nodeType":"VariableDeclaration","scope":5664,"src":"13098:22:28","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market"},"typeName":{"id":5509,"nodeType":"UserDefinedTypeName","pathNode":{"id":5508,"name":"Market","nameLocations":["13098:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":9484,"src":"13098:6:28"},"referencedDeclaration":9484,"src":"13098:6:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market"}},"visibility":"internal"}],"id":5514,"initialValue":{"baseExpression":{"id":5511,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"13123:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":5513,"indexExpression":{"id":5512,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5499,"src":"13131:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13123:15:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"nodeType":"VariableDeclarationStatement","src":"13098:40:28"},{"condition":{"id":5517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"13153:17:28","subExpression":{"expression":{"id":5515,"name":"_market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5510,"src":"13154:7:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":5516,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13162:8:28","memberName":"isListed","nodeType":"MemberAccess","referencedDeclaration":9475,"src":"13154:16:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5523,"nodeType":"IfStatement","src":"13149:78:28","trueBody":{"id":5522,"nodeType":"Block","src":"13172:55:28","statements":[{"errorCall":{"arguments":[{"id":5519,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5499,"src":"13209:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5518,"name":"MarketNotListed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5287,"src":"13193:15:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":5520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13193:23:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5521,"nodeType":"RevertStatement","src":"13186:30:28"}]}},{"condition":{"id":5529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"13241:36:28","subExpression":{"arguments":[{"id":5525,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5499,"src":"13255:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5526,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"13263:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":5527,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13270:6:28","memberName":"BORROW","nodeType":"MemberAccess","referencedDeclaration":9141,"src":"13263:13:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"id":5524,"name":"actionPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8423,"src":"13242:12:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Action_$9148_$returns$_t_bool_$","typeString":"function (address,enum Action) view returns (bool)"}},"id":5528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13242:35:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5534,"nodeType":"IfStatement","src":"13237:97:28","trueBody":{"id":5533,"nodeType":"Block","src":"13279:55:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5530,"name":"BorrowActionNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5300,"src":"13300:21:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":5531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13300:23:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5532,"nodeType":"RevertStatement","src":"13293:30:28"}]}},{"condition":{"id":5540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"13348:34:28","subExpression":{"arguments":[{"id":5536,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5499,"src":"13362:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5537,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"13370:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":5538,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13377:4:28","memberName":"MINT","nodeType":"MemberAccess","referencedDeclaration":9139,"src":"13370:11:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"id":5535,"name":"actionPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8423,"src":"13349:12:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Action_$9148_$returns$_t_bool_$","typeString":"function (address,enum Action) view returns (bool)"}},"id":5539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13349:33:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5545,"nodeType":"IfStatement","src":"13344:93:28","trueBody":{"id":5544,"nodeType":"Block","src":"13384:53:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5541,"name":"MintActionNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5303,"src":"13405:19:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":5542,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13405:21:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5543,"nodeType":"RevertStatement","src":"13398:28:28"}]}},{"condition":{"id":5551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"13451:36:28","subExpression":{"arguments":[{"id":5547,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5499,"src":"13465:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5548,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"13473:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":5549,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13480:6:28","memberName":"REDEEM","nodeType":"MemberAccess","referencedDeclaration":9140,"src":"13473:13:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"id":5546,"name":"actionPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8423,"src":"13452:12:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Action_$9148_$returns$_t_bool_$","typeString":"function (address,enum Action) view returns (bool)"}},"id":5550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13452:35:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5556,"nodeType":"IfStatement","src":"13447:97:28","trueBody":{"id":5555,"nodeType":"Block","src":"13489:55:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5552,"name":"RedeemActionNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5306,"src":"13510:21:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":5553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13510:23:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5554,"nodeType":"RevertStatement","src":"13503:30:28"}]}},{"condition":{"id":5562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"13558:35:28","subExpression":{"arguments":[{"id":5558,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5499,"src":"13572:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5559,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"13580:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":5560,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13587:5:28","memberName":"REPAY","nodeType":"MemberAccess","referencedDeclaration":9142,"src":"13580:12:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"id":5557,"name":"actionPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8423,"src":"13559:12:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Action_$9148_$returns$_t_bool_$","typeString":"function (address,enum Action) view returns (bool)"}},"id":5561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13559:34:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5567,"nodeType":"IfStatement","src":"13554:95:28","trueBody":{"id":5566,"nodeType":"Block","src":"13595:54:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5563,"name":"RepayActionNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5309,"src":"13616:20:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":5564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13616:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5565,"nodeType":"RevertStatement","src":"13609:29:28"}]}},{"condition":{"id":5573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"13663:35:28","subExpression":{"arguments":[{"id":5569,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5499,"src":"13677:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5570,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"13685:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":5571,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13692:5:28","memberName":"SEIZE","nodeType":"MemberAccess","referencedDeclaration":9143,"src":"13685:12:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"id":5568,"name":"actionPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8423,"src":"13664:12:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Action_$9148_$returns$_t_bool_$","typeString":"function (address,enum Action) view returns (bool)"}},"id":5572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13664:34:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5578,"nodeType":"IfStatement","src":"13659:95:28","trueBody":{"id":5577,"nodeType":"Block","src":"13700:54:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5574,"name":"SeizeActionNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5312,"src":"13721:20:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":5575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13721:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5576,"nodeType":"RevertStatement","src":"13714:29:28"}]}},{"condition":{"id":5584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"13768:42:28","subExpression":{"arguments":[{"id":5580,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5499,"src":"13782:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5581,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"13790:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":5582,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13797:12:28","memberName":"ENTER_MARKET","nodeType":"MemberAccess","referencedDeclaration":9146,"src":"13790:19:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"id":5579,"name":"actionPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8423,"src":"13769:12:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Action_$9148_$returns$_t_bool_$","typeString":"function (address,enum Action) view returns (bool)"}},"id":5583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13769:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5589,"nodeType":"IfStatement","src":"13764:108:28","trueBody":{"id":5588,"nodeType":"Block","src":"13812:60:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5585,"name":"EnterMarketActionNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5321,"src":"13833:26:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":5586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13833:28:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5587,"nodeType":"RevertStatement","src":"13826:35:28"}]}},{"condition":{"id":5595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"13886:39:28","subExpression":{"arguments":[{"id":5591,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5499,"src":"13900:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5592,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"13908:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":5593,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13915:9:28","memberName":"LIQUIDATE","nodeType":"MemberAccess","referencedDeclaration":9144,"src":"13908:16:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"id":5590,"name":"actionPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8423,"src":"13887:12:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Action_$9148_$returns$_t_bool_$","typeString":"function (address,enum Action) view returns (bool)"}},"id":5594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13887:38:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5600,"nodeType":"IfStatement","src":"13882:103:28","trueBody":{"id":5599,"nodeType":"Block","src":"13927:58:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5596,"name":"LiquidateActionNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5324,"src":"13948:24:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":5597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13948:26:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5598,"nodeType":"RevertStatement","src":"13941:33:28"}]}},{"condition":{"id":5606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"13999:38:28","subExpression":{"arguments":[{"id":5602,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5499,"src":"14013:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5603,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"14021:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":5604,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14028:8:28","memberName":"TRANSFER","nodeType":"MemberAccess","referencedDeclaration":9145,"src":"14021:15:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"id":5601,"name":"actionPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8423,"src":"14000:12:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Action_$9148_$returns$_t_bool_$","typeString":"function (address,enum Action) view returns (bool)"}},"id":5605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14000:37:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5611,"nodeType":"IfStatement","src":"13995:101:28","trueBody":{"id":5610,"nodeType":"Block","src":"14039:57:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5607,"name":"TransferActionNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5318,"src":"14060:23:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":5608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14060:25:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5609,"nodeType":"RevertStatement","src":"14053:32:28"}]}},{"condition":{"id":5617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"14110:41:28","subExpression":{"arguments":[{"id":5613,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5499,"src":"14124:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5614,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"14132:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":5615,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14139:11:28","memberName":"EXIT_MARKET","nodeType":"MemberAccess","referencedDeclaration":9147,"src":"14132:18:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"id":5612,"name":"actionPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8423,"src":"14111:12:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Action_$9148_$returns$_t_bool_$","typeString":"function (address,enum Action) view returns (bool)"}},"id":5616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14111:40:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5622,"nodeType":"IfStatement","src":"14106:106:28","trueBody":{"id":5621,"nodeType":"Block","src":"14153:59:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5618,"name":"ExitMarketActionNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5315,"src":"14174:25:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":5619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14174:27:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5620,"nodeType":"RevertStatement","src":"14167:34:28"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":5623,"name":"borrowCaps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9517,"src":"14226:10:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5625,"indexExpression":{"id":5624,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5499,"src":"14237:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14226:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":5626,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14248:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14226:23:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5632,"nodeType":"IfStatement","src":"14222:81:28","trueBody":{"id":5631,"nodeType":"Block","src":"14251:52:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5628,"name":"BorrowCapIsNotZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5327,"src":"14272:18:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":5629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14272:20:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5630,"nodeType":"RevertStatement","src":"14265:27:28"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":5633,"name":"supplyCaps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9525,"src":"14317:10:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5635,"indexExpression":{"id":5634,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5499,"src":"14328:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14317:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":5636,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14339:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14317:23:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5642,"nodeType":"IfStatement","src":"14313:81:28","trueBody":{"id":5641,"nodeType":"Block","src":"14342:52:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5638,"name":"SupplyCapIsNotZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5330,"src":"14363:18:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":5639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14363:20:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5640,"nodeType":"RevertStatement","src":"14356:27:28"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5643,"name":"_market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5510,"src":"14408:7:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":5644,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14416:24:28","memberName":"collateralFactorMantissa","nodeType":"MemberAccess","referencedDeclaration":9477,"src":"14408:32:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":5645,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14444:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14408:37:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5651,"nodeType":"IfStatement","src":"14404:102:28","trueBody":{"id":5650,"nodeType":"Block","src":"14447:59:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5647,"name":"CollateralFactorIsNotZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5333,"src":"14468:25:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":5648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14468:27:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5649,"nodeType":"RevertStatement","src":"14461:34:28"}]}},{"expression":{"id":5656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":5652,"name":"_market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5510,"src":"14516:7:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":5654,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"14524:8:28","memberName":"isListed","nodeType":"MemberAccess","referencedDeclaration":9475,"src":"14516:16:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":5655,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14535:5:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"14516:24:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5657,"nodeType":"ExpressionStatement","src":"14516:24:28"},{"eventCall":{"arguments":[{"id":5659,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5499,"src":"14570:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5658,"name":"MarketUnlisted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5248,"src":"14555:14:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":5660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14555:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5661,"nodeType":"EmitStatement","src":"14550:27:28"},{"expression":{"id":5662,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9549,"src":"14595:8:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5503,"id":5663,"nodeType":"Return","src":"14588:15:28"}]},"documentation":{"id":5497,"nodeType":"StructuredDocumentation","src":"11686:1277:28","text":" @notice Unlist a market by setting isListed to false\n @dev Checks if all actions are paused, borrow/supply caps is set to 0 and collateral factor is to 0.\n @param market The address of the market (token) to unlist\n @return uint256 Always NO_ERROR for compatibility with Venus core tooling\n @custom:event MarketUnlisted is emitted on success\n @custom:error MarketNotListed error is thrown when the market is not listed\n @custom:error BorrowActionNotPaused error is thrown if borrow action is not paused\n @custom:error MintActionNotPaused error is thrown if mint action is not paused\n @custom:error RedeemActionNotPaused error is thrown if redeem action is not paused\n @custom:error RepayActionNotPaused error is thrown if repay action is not paused\n @custom:error EnterMarketActionNotPaused error is thrown if enter market action is not paused\n @custom:error LiquidateActionNotPaused error is thrown if liquidate action is not paused\n @custom:error BorrowCapIsNotZero error is thrown if borrow cap is not zero\n @custom:error SupplyCapIsNotZero error is thrown if supply cap is not zero\n @custom:error CollateralFactorIsNotZero error is thrown if collateral factor is not zero"},"functionSelector":"0686dab6","id":5665,"implemented":true,"kind":"function","modifiers":[],"name":"unlistMarket","nameLocation":"12977:12:28","nodeType":"FunctionDefinition","parameters":{"id":5500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5499,"mutability":"mutable","name":"market","nameLocation":"12998:6:28","nodeType":"VariableDeclaration","scope":5665,"src":"12990:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5498,"name":"address","nodeType":"ElementaryTypeName","src":"12990:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12989:16:28"},"returnParameters":{"id":5503,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5502,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5665,"src":"13024:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5501,"name":"uint256","nodeType":"ElementaryTypeName","src":"13024:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13023:9:28"},"scope":9130,"src":"12968:1642:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5706,"nodeType":"Block","src":"15605:295:28","statements":[{"expression":{"arguments":[{"id":5674,"name":"delegate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5668,"src":"15636:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5673,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16143,"src":"15615:20:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":5675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15615:30:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5676,"nodeType":"ExpressionStatement","src":"15615:30:28"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":5677,"name":"approvedDelegates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9569,"src":"15659:17:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(address => mapping(address => bool))"}},"id":5680,"indexExpression":{"expression":{"id":5678,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"15677:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15681:6:28","memberName":"sender","nodeType":"MemberAccess","src":"15677:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15659:29:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":5682,"indexExpression":{"id":5681,"name":"delegate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5668,"src":"15689:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15659:39:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5683,"name":"approved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5670,"src":"15702:8:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"15659:51:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5689,"nodeType":"IfStatement","src":"15655:116:28","trueBody":{"id":5688,"nodeType":"Block","src":"15712:59:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5685,"name":"DelegationStatusUnchanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5394,"src":"15733:25:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":5686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15733:27:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5687,"nodeType":"RevertStatement","src":"15726:34:28"}]}},{"expression":{"id":5697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":5690,"name":"approvedDelegates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9569,"src":"15781:17:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(address => mapping(address => bool))"}},"id":5694,"indexExpression":{"expression":{"id":5691,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"15799:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15803:6:28","memberName":"sender","nodeType":"MemberAccess","src":"15799:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15781:29:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":5695,"indexExpression":{"id":5693,"name":"delegate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5668,"src":"15811:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15781:39:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5696,"name":"approved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5670,"src":"15823:8:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"15781:50:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5698,"nodeType":"ExpressionStatement","src":"15781:50:28"},{"eventCall":{"arguments":[{"expression":{"id":5700,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"15862:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15866:6:28","memberName":"sender","nodeType":"MemberAccess","src":"15862:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5702,"name":"delegate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5668,"src":"15874:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5703,"name":"approved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5670,"src":"15884:8:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5699,"name":"DelegateUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5257,"src":"15846:15:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,bool)"}},"id":5704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15846:47:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5705,"nodeType":"EmitStatement","src":"15841:52:28"}]},"documentation":{"id":5666,"nodeType":"StructuredDocumentation","src":"14616:918:28","text":" @notice Grants or revokes the borrowing or redeeming delegate rights to / from an account\n  If allowed, the delegate will be able to borrow funds on behalf of the sender\n  Upon a delegated borrow, the delegate will receive the funds, and the borrower\n  will see the debt on their account\n  Upon a delegated redeem, the delegate will receive the redeemed amount and the approver\n  will see a deduction in his vToken balance\n @param delegate The address to update the rights for\n @param approved Whether to grant (true) or revoke (false) the borrowing or redeeming rights\n @custom:event DelegateUpdated emits on success\n @custom:error ZeroAddressNotAllowed is thrown when delegate address is zero\n @custom:error DelegationStatusUnchanged is thrown if approval status is already set to the requested value\n @custom:access Not restricted"},"functionSelector":"ddbf54fd","id":5707,"implemented":true,"kind":"function","modifiers":[],"name":"updateDelegate","nameLocation":"15548:14:28","nodeType":"FunctionDefinition","parameters":{"id":5671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5668,"mutability":"mutable","name":"delegate","nameLocation":"15571:8:28","nodeType":"VariableDeclaration","scope":5707,"src":"15563:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5667,"name":"address","nodeType":"ElementaryTypeName","src":"15563:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5670,"mutability":"mutable","name":"approved","nameLocation":"15586:8:28","nodeType":"VariableDeclaration","scope":5707,"src":"15581:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5669,"name":"bool","nodeType":"ElementaryTypeName","src":"15581:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15562:33:28"},"returnParameters":{"id":5672,"nodeType":"ParameterList","parameters":[],"src":"15605:0:28"},"scope":9130,"src":"15539:361:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[9165],"body":{"id":5863,"nodeType":"Block","src":"17088:1815:28","statements":[{"expression":{"arguments":[{"id":5717,"name":"vTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5710,"src":"17121:13:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5718,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"17136:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":5719,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17143:11:28","memberName":"EXIT_MARKET","nodeType":"MemberAccess","referencedDeclaration":9147,"src":"17136:18:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"id":5716,"name":"_checkActionPauseState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9129,"src":"17098:22:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Action_$9148_$returns$__$","typeString":"function (address,enum Action) view"}},"id":5720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17098:57:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5721,"nodeType":"ExpressionStatement","src":"17098:57:28"},{"assignments":[5724],"declarations":[{"constant":false,"id":5724,"mutability":"mutable","name":"vToken","nameLocation":"17172:6:28","nodeType":"VariableDeclaration","scope":5863,"src":"17165:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":5723,"nodeType":"UserDefinedTypeName","pathNode":{"id":5722,"name":"VToken","nameLocations":["17165:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"17165:6:28"},"referencedDeclaration":15506,"src":"17165:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"}],"id":5728,"initialValue":{"arguments":[{"id":5726,"name":"vTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5710,"src":"17188:13:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5725,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"17181:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":5727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17181:21:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"nodeType":"VariableDeclarationStatement","src":"17165:37:28"},{"assignments":[5730,5732,null],"declarations":[{"constant":false,"id":5730,"mutability":"mutable","name":"tokensHeld","nameLocation":"17299:10:28","nodeType":"VariableDeclaration","scope":5863,"src":"17291:18:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5729,"name":"uint256","nodeType":"ElementaryTypeName","src":"17291:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5732,"mutability":"mutable","name":"amountOwed","nameLocation":"17319:10:28","nodeType":"VariableDeclaration","scope":5863,"src":"17311:18:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5731,"name":"uint256","nodeType":"ElementaryTypeName","src":"17311:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":5738,"initialValue":{"arguments":[{"id":5734,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5724,"src":"17359:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"expression":{"id":5735,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17367:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17371:6:28","memberName":"sender","nodeType":"MemberAccess","src":"17367:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_address","typeString":"address"}],"id":5733,"name":"_safeGetAccountSnapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9089,"src":"17335:23:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (contract VToken,address) view returns (uint256,uint256,uint256)"}},"id":5737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17335:43:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"17290:88:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5739,"name":"amountOwed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5732,"src":"17447:10:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":5740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17461:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17447:15:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5746,"nodeType":"IfStatement","src":"17443:75:28","trueBody":{"id":5745,"nodeType":"Block","src":"17464:54:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5742,"name":"NonzeroBorrowBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5364,"src":"17485:20:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":5743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17485:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5744,"nodeType":"RevertStatement","src":"17478:29:28"}]}},{"expression":{"arguments":[{"id":5748,"name":"vTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5710,"src":"17628:13:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5749,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17643:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17647:6:28","memberName":"sender","nodeType":"MemberAccess","src":"17643:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5751,"name":"tokensHeld","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5730,"src":"17655:10:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5747,"name":"_checkRedeemAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8725,"src":"17608:19:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":5752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17608:58:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5753,"nodeType":"ExpressionStatement","src":"17608:58:28"},{"assignments":[5756],"declarations":[{"constant":false,"id":5756,"mutability":"mutable","name":"marketToExit","nameLocation":"17692:12:28","nodeType":"VariableDeclaration","scope":5863,"src":"17677:27:28","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market"},"typeName":{"id":5755,"nodeType":"UserDefinedTypeName","pathNode":{"id":5754,"name":"Market","nameLocations":["17677:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":9484,"src":"17677:6:28"},"referencedDeclaration":9484,"src":"17677:6:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market"}},"visibility":"internal"}],"id":5763,"initialValue":{"baseExpression":{"id":5757,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"17707:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":5762,"indexExpression":{"arguments":[{"id":5760,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5724,"src":"17723:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":5759,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17715:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5758,"name":"address","nodeType":"ElementaryTypeName","src":"17715:7:28","typeDescriptions":{}}},"id":5761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17715:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17707:24:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"nodeType":"VariableDeclarationStatement","src":"17677:54:28"},{"condition":{"id":5769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"17821:43:28","subExpression":{"baseExpression":{"expression":{"id":5764,"name":"marketToExit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5756,"src":"17822:12:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":5765,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17835:17:28","memberName":"accountMembership","nodeType":"MemberAccess","referencedDeclaration":9483,"src":"17822:30:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":5768,"indexExpression":{"expression":{"id":5766,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17853:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17857:6:28","memberName":"sender","nodeType":"MemberAccess","src":"17853:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17822:42:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5773,"nodeType":"IfStatement","src":"17817:89:28","trueBody":{"id":5772,"nodeType":"Block","src":"17866:40:28","statements":[{"expression":{"id":5770,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9549,"src":"17887:8:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5715,"id":5771,"nodeType":"Return","src":"17880:15:28"}]}},{"expression":{"id":5779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"17969:49:28","subExpression":{"baseExpression":{"expression":{"id":5774,"name":"marketToExit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5756,"src":"17976:12:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":5775,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17989:17:28","memberName":"accountMembership","nodeType":"MemberAccess","referencedDeclaration":9483,"src":"17976:30:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":5778,"indexExpression":{"expression":{"id":5776,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18007:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18011:6:28","memberName":"sender","nodeType":"MemberAccess","src":"18007:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"17976:42:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5780,"nodeType":"ExpressionStatement","src":"17969:49:28"},{"assignments":[5785],"declarations":[{"constant":false,"id":5785,"mutability":"mutable","name":"userAssetList","nameLocation":"18158:13:28","nodeType":"VariableDeclaration","scope":5863,"src":"18142:29:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":5783,"nodeType":"UserDefinedTypeName","pathNode":{"id":5782,"name":"VToken","nameLocations":["18142:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"18142:6:28"},"referencedDeclaration":15506,"src":"18142:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":5784,"nodeType":"ArrayTypeName","src":"18142:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"}],"id":5790,"initialValue":{"baseExpression":{"id":5786,"name":"accountAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"18174:13:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_VToken_$15506_$dyn_storage_$","typeString":"mapping(address => contract VToken[] storage ref)"}},"id":5789,"indexExpression":{"expression":{"id":5787,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18188:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18192:6:28","memberName":"sender","nodeType":"MemberAccess","src":"18188:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18174:25:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage","typeString":"contract VToken[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"18142:57:28"},{"assignments":[5792],"declarations":[{"constant":false,"id":5792,"mutability":"mutable","name":"len","nameLocation":"18217:3:28","nodeType":"VariableDeclaration","scope":5863,"src":"18209:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5791,"name":"uint256","nodeType":"ElementaryTypeName","src":"18209:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5795,"initialValue":{"expression":{"id":5793,"name":"userAssetList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5785,"src":"18223:13:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":5794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18237:6:28","memberName":"length","nodeType":"MemberAccess","src":"18223:20:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"18209:34:28"},{"assignments":[5797],"declarations":[{"constant":false,"id":5797,"mutability":"mutable","name":"assetIndex","nameLocation":"18262:10:28","nodeType":"VariableDeclaration","scope":5863,"src":"18254:18:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5796,"name":"uint256","nodeType":"ElementaryTypeName","src":"18254:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5799,"initialValue":{"id":5798,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5792,"src":"18275:3:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"18254:24:28"},{"body":{"id":5821,"nodeType":"Block","src":"18318:126:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"id":5813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":5809,"name":"userAssetList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5785,"src":"18336:13:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":5811,"indexExpression":{"id":5810,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5801,"src":"18350:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18336:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5812,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5724,"src":"18356:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"src":"18336:26:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5820,"nodeType":"IfStatement","src":"18332:102:28","trueBody":{"id":5819,"nodeType":"Block","src":"18364:70:28","statements":[{"expression":{"id":5816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5814,"name":"assetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5797,"src":"18382:10:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5815,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5801,"src":"18395:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18382:14:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5817,"nodeType":"ExpressionStatement","src":"18382:14:28"},{"id":5818,"nodeType":"Break","src":"18414:5:28"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5803,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5801,"src":"18304:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5804,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5792,"src":"18308:3:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18304:7:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5822,"initializationExpression":{"assignments":[5801],"declarations":[{"constant":false,"id":5801,"mutability":"mutable","name":"i","nameLocation":"18301:1:28","nodeType":"VariableDeclaration","scope":5822,"src":"18293:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5800,"name":"uint256","nodeType":"ElementaryTypeName","src":"18293:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5802,"nodeType":"VariableDeclarationStatement","src":"18293:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"18313:3:28","subExpression":{"id":5806,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5801,"src":"18315:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5808,"nodeType":"ExpressionStatement","src":"18313:3:28"},"nodeType":"ForStatement","src":"18288:156:28"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5824,"name":"assetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5797,"src":"18557:10:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5825,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5792,"src":"18570:3:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18557:16:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5823,"name":"assert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-3,"src":"18550:6:28","typeDescriptions":{"typeIdentifier":"t_function_assert_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":5827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18550:24:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5828,"nodeType":"ExpressionStatement","src":"18550:24:28"},{"assignments":[5833],"declarations":[{"constant":false,"id":5833,"mutability":"mutable","name":"storedList","nameLocation":"18690:10:28","nodeType":"VariableDeclaration","scope":5863,"src":"18673:27:28","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":5831,"nodeType":"UserDefinedTypeName","pathNode":{"id":5830,"name":"VToken","nameLocations":["18673:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"18673:6:28"},"referencedDeclaration":15506,"src":"18673:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":5832,"nodeType":"ArrayTypeName","src":"18673:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"}],"id":5838,"initialValue":{"baseExpression":{"id":5834,"name":"accountAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"18703:13:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_VToken_$15506_$dyn_storage_$","typeString":"mapping(address => contract VToken[] storage ref)"}},"id":5837,"indexExpression":{"expression":{"id":5835,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18717:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18721:6:28","memberName":"sender","nodeType":"MemberAccess","src":"18717:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18703:25:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage","typeString":"contract VToken[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"18673:55:28"},{"expression":{"id":5848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5839,"name":"storedList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5833,"src":"18738:10:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[] storage pointer"}},"id":5841,"indexExpression":{"id":5840,"name":"assetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5797,"src":"18749:10:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18738:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":5842,"name":"storedList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5833,"src":"18763:10:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[] storage pointer"}},"id":5847,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5843,"name":"storedList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5833,"src":"18774:10:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[] storage pointer"}},"id":5844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18785:6:28","memberName":"length","nodeType":"MemberAccess","src":"18774:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":5845,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18794:1:28","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"18774:21:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18763:33:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"src":"18738:58:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":5849,"nodeType":"ExpressionStatement","src":"18738:58:28"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5850,"name":"storedList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5833,"src":"18806:10:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[] storage pointer"}},"id":5852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18817:3:28","memberName":"pop","nodeType":"MemberAccess","src":"18806:14:28","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr_$","typeString":"function (contract VToken[] storage pointer)"}},"id":5853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18806:16:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5854,"nodeType":"ExpressionStatement","src":"18806:16:28"},{"eventCall":{"arguments":[{"id":5856,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5724,"src":"18851:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"expression":{"id":5857,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18859:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18863:6:28","memberName":"sender","nodeType":"MemberAccess","src":"18859:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_address","typeString":"address"}],"id":5855,"name":"MarketExited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5137,"src":"18838:12:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_VToken_$15506_$_t_address_$returns$__$","typeString":"function (contract VToken,address)"}},"id":5859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18838:32:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5860,"nodeType":"EmitStatement","src":"18833:37:28"},{"expression":{"id":5861,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9549,"src":"18888:8:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5715,"id":5862,"nodeType":"Return","src":"18881:15:28"}]},"documentation":{"id":5708,"nodeType":"StructuredDocumentation","src":"15906:1098:28","text":" @notice Removes asset from sender's account liquidity calculation; disabling them as collateral\n @dev Sender must not have an outstanding borrow balance in the asset,\n  or be providing necessary collateral for an outstanding borrow.\n @param vTokenAddress The address of the asset to be removed\n @return error Always NO_ERROR for compatibility with Venus core tooling\n @custom:event MarketExited is emitted on success\n @custom:error ActionPaused error is thrown if exiting the market is paused\n @custom:error NonzeroBorrowBalance error is thrown if the user has an outstanding borrow in this market\n @custom:error MarketNotListed error is thrown when the market is not listed\n @custom:error InsufficientLiquidity error is thrown if exiting the market would lead to user's insolvency\n @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\n @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\n @custom:access Not restricted"},"functionSelector":"ede4edd0","id":5864,"implemented":true,"kind":"function","modifiers":[],"name":"exitMarket","nameLocation":"17018:10:28","nodeType":"FunctionDefinition","overrides":{"id":5712,"nodeType":"OverrideSpecifier","overrides":[],"src":"17061:8:28"},"parameters":{"id":5711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5710,"mutability":"mutable","name":"vTokenAddress","nameLocation":"17037:13:28","nodeType":"VariableDeclaration","scope":5864,"src":"17029:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5709,"name":"address","nodeType":"ElementaryTypeName","src":"17029:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17028:23:28"},"returnParameters":{"id":5715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5714,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5864,"src":"17079:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5713,"name":"uint256","nodeType":"ElementaryTypeName","src":"17079:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17078:9:28"},"scope":9130,"src":"17009:1894:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[9174],"body":{"id":5983,"nodeType":"Block","src":"19675:1127:28","statements":[{"expression":{"arguments":[{"id":5876,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5867,"src":"19708:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5877,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"19716:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":5878,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"19723:4:28","memberName":"MINT","nodeType":"MemberAccess","referencedDeclaration":9139,"src":"19716:11:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"id":5875,"name":"_checkActionPauseState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9129,"src":"19685:22:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Action_$9148_$returns$__$","typeString":"function (address,enum Action) view"}},"id":5879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19685:43:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5880,"nodeType":"ExpressionStatement","src":"19685:43:28"},{"condition":{"id":5885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"19743:25:28","subExpression":{"expression":{"baseExpression":{"id":5881,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"19744:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":5883,"indexExpression":{"id":5882,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5867,"src":"19752:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19744:15:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"id":5884,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19760:8:28","memberName":"isListed","nodeType":"MemberAccess","referencedDeclaration":9475,"src":"19744:24:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5894,"nodeType":"IfStatement","src":"19739:95:28","trueBody":{"id":5893,"nodeType":"Block","src":"19770:64:28","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":5889,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5867,"src":"19815:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5888,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19807:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5887,"name":"address","nodeType":"ElementaryTypeName","src":"19807:7:28","typeDescriptions":{}}},"id":5890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19807:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5886,"name":"MarketNotListed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5287,"src":"19791:15:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":5891,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19791:32:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5892,"nodeType":"RevertStatement","src":"19784:39:28"}]}},{"assignments":[5896],"declarations":[{"constant":false,"id":5896,"mutability":"mutable","name":"supplyCap","nameLocation":"19852:9:28","nodeType":"VariableDeclaration","scope":5983,"src":"19844:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5895,"name":"uint256","nodeType":"ElementaryTypeName","src":"19844:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5900,"initialValue":{"baseExpression":{"id":5897,"name":"supplyCaps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9525,"src":"19864:10:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5899,"indexExpression":{"id":5898,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5867,"src":"19875:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19864:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19844:38:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5901,"name":"supplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5896,"src":"19966:9:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"arguments":[{"id":5904,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19984:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5903,"name":"uint256","nodeType":"ElementaryTypeName","src":"19984:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":5902,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"19979:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":5905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19979:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":5906,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"19993:3:28","memberName":"max","nodeType":"MemberAccess","src":"19979:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19966:30:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5946,"nodeType":"IfStatement","src":"19962:433:28","trueBody":{"id":5945,"nodeType":"Block","src":"19998:397:28","statements":[{"assignments":[5909],"declarations":[{"constant":false,"id":5909,"mutability":"mutable","name":"vTokenSupply","nameLocation":"20020:12:28","nodeType":"VariableDeclaration","scope":5945,"src":"20012:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5908,"name":"uint256","nodeType":"ElementaryTypeName","src":"20012:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5915,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":5911,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5867,"src":"20042:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5910,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"20035:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":5912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20035:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":5913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20050:11:28","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":15569,"src":"20035:26:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":5914,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20035:28:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"20012:51:28"},{"assignments":[5918],"declarations":[{"constant":false,"id":5918,"mutability":"mutable","name":"exchangeRate","nameLocation":"20088:12:28","nodeType":"VariableDeclaration","scope":5945,"src":"20077:23:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":5917,"nodeType":"UserDefinedTypeName","pathNode":{"id":5916,"name":"Exp","nameLocations":["20077:3:28"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"20077:3:28"},"referencedDeclaration":9645,"src":"20077:3:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":5926,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":5921,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5867,"src":"20126:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5920,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"20119:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":5922,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20119:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":5923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20134:18:28","memberName":"exchangeRateStored","nodeType":"MemberAccess","referencedDeclaration":13739,"src":"20119:33:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":5924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20119:35:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5919,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"20103:3:28","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":5925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["20109:8:28"],"names":["mantissa"],"nodeType":"FunctionCall","src":"20103:54:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"VariableDeclarationStatement","src":"20077:80:28"},{"assignments":[5928],"declarations":[{"constant":false,"id":5928,"mutability":"mutable","name":"nextTotalSupply","nameLocation":"20179:15:28","nodeType":"VariableDeclaration","scope":5945,"src":"20171:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5927,"name":"uint256","nodeType":"ElementaryTypeName","src":"20171:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5934,"initialValue":{"arguments":[{"id":5930,"name":"exchangeRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5918,"src":"20223:12:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":5931,"name":"vTokenSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5909,"src":"20237:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5932,"name":"mintAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5871,"src":"20251:10:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5929,"name":"mul_ScalarTruncateAddUInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9730,"src":"20197:25:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct ExponentialNoError.Exp memory,uint256,uint256) pure returns (uint256)"}},"id":5933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20197:65:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"20171:91:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5935,"name":"nextTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5928,"src":"20280:15:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":5936,"name":"supplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5896,"src":"20298:9:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20280:27:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5944,"nodeType":"IfStatement","src":"20276:109:28","trueBody":{"id":5943,"nodeType":"Block","src":"20309:76:28","statements":[{"errorCall":{"arguments":[{"id":5939,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5867,"src":"20352:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5940,"name":"supplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5896,"src":"20360:9:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5938,"name":"SupplyCapExceeded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5384,"src":"20334:17:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) pure"}},"id":5941,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20334:36:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5942,"nodeType":"RevertStatement","src":"20327:43:28"}]}}]}},{"assignments":[5948],"declarations":[{"constant":false,"id":5948,"mutability":"mutable","name":"rewardDistributorsCount","nameLocation":"20449:23:28","nodeType":"VariableDeclaration","scope":5983,"src":"20441:31:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5947,"name":"uint256","nodeType":"ElementaryTypeName","src":"20441:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5951,"initialValue":{"expression":{"id":5949,"name":"rewardsDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9537,"src":"20475:19:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage","typeString":"contract RewardsDistributor[] storage ref"}},"id":5950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20495:6:28","memberName":"length","nodeType":"MemberAccess","src":"20475:26:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"20441:60:28"},{"body":{"id":5981,"nodeType":"Block","src":"20562:234:28","statements":[{"assignments":[5963],"declarations":[{"constant":false,"id":5963,"mutability":"mutable","name":"rewardsDistributor","nameLocation":"20595:18:28","nodeType":"VariableDeclaration","scope":5981,"src":"20576:37:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"},"typeName":{"id":5962,"nodeType":"UserDefinedTypeName","pathNode":{"id":5961,"name":"RewardsDistributor","nameLocations":["20576:18:28"],"nodeType":"IdentifierPath","referencedDeclaration":12324,"src":"20576:18:28"},"referencedDeclaration":12324,"src":"20576:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"visibility":"internal"}],"id":5967,"initialValue":{"baseExpression":{"id":5964,"name":"rewardsDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9537,"src":"20616:19:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage","typeString":"contract RewardsDistributor[] storage ref"}},"id":5966,"indexExpression":{"id":5965,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5953,"src":"20636:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20616:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"nodeType":"VariableDeclarationStatement","src":"20576:62:28"},{"expression":{"arguments":[{"id":5971,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5867,"src":"20700:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5968,"name":"rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5963,"src":"20652:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":5970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20671:28:28","memberName":"updateRewardTokenSupplyIndex","nodeType":"MemberAccess","referencedDeclaration":10689,"src":"20652:47:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":5972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20652:55:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5973,"nodeType":"ExpressionStatement","src":"20652:55:28"},{"expression":{"arguments":[{"id":5977,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5867,"src":"20770:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5978,"name":"minter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5869,"src":"20778:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5974,"name":"rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5963,"src":"20721:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":5976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20740:29:28","memberName":"distributeSupplierRewardToken","nodeType":"MemberAccess","referencedDeclaration":10987,"src":"20721:48:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":5979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20721:64:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5980,"nodeType":"ExpressionStatement","src":"20721:64:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5955,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5953,"src":"20528:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5956,"name":"rewardDistributorsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5948,"src":"20532:23:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20528:27:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5982,"initializationExpression":{"assignments":[5953],"declarations":[{"constant":false,"id":5953,"mutability":"mutable","name":"i","nameLocation":"20525:1:28","nodeType":"VariableDeclaration","scope":5982,"src":"20517:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5952,"name":"uint256","nodeType":"ElementaryTypeName","src":"20517:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5954,"nodeType":"VariableDeclarationStatement","src":"20517:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"20557:3:28","subExpression":{"id":5958,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5953,"src":"20559:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5960,"nodeType":"ExpressionStatement","src":"20557:3:28"},"nodeType":"ForStatement","src":"20512:284:28"}]},"documentation":{"id":5865,"nodeType":"StructuredDocumentation","src":"18937:642:28","text":" @notice Checks if the account should be allowed to mint tokens in the given market\n @param vToken The market to verify the mint against\n @param minter The account which would get the minted tokens\n @param mintAmount The amount of underlying being supplied to the market in exchange for tokens\n @custom:error ActionPaused error is thrown if supplying to this market is paused\n @custom:error MarketNotListed error is thrown when the market is not listed\n @custom:error SupplyCapExceeded error is thrown if the total supply exceeds the cap after minting\n @custom:access Not restricted"},"functionSelector":"c0891ba9","id":5984,"implemented":true,"kind":"function","modifiers":[],"name":"preMintHook","nameLocation":"19593:11:28","nodeType":"FunctionDefinition","overrides":{"id":5873,"nodeType":"OverrideSpecifier","overrides":[],"src":"19666:8:28"},"parameters":{"id":5872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5867,"mutability":"mutable","name":"vToken","nameLocation":"19613:6:28","nodeType":"VariableDeclaration","scope":5984,"src":"19605:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5866,"name":"address","nodeType":"ElementaryTypeName","src":"19605:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5869,"mutability":"mutable","name":"minter","nameLocation":"19629:6:28","nodeType":"VariableDeclaration","scope":5984,"src":"19621:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5868,"name":"address","nodeType":"ElementaryTypeName","src":"19621:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5871,"mutability":"mutable","name":"mintAmount","nameLocation":"19645:10:28","nodeType":"VariableDeclaration","scope":5984,"src":"19637:18:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5870,"name":"uint256","nodeType":"ElementaryTypeName","src":"19637:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19604:52:28"},"returnParameters":{"id":5874,"nodeType":"ParameterList","parameters":[],"src":"19675:0:28"},"scope":9130,"src":"19584:1218:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[9243],"body":{"id":6014,"nodeType":"Block","src":"21322:125:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5998,"name":"prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9562,"src":"21344:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}],"id":5997,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21336:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5996,"name":"address","nodeType":"ElementaryTypeName","src":"21336:7:28","typeDescriptions":{}}},"id":5999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21336:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":6002,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21362:1:28","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":6001,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21354:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6000,"name":"address","nodeType":"ElementaryTypeName","src":"21354:7:28","typeDescriptions":{}}},"id":6003,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21354:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21336:28:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6013,"nodeType":"IfStatement","src":"21332:109:28","trueBody":{"id":6012,"nodeType":"Block","src":"21366:75:28","statements":[{"expression":{"arguments":[{"id":6008,"name":"minter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5989,"src":"21415:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6009,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5987,"src":"21423:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6005,"name":"prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9562,"src":"21380:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}},"id":6007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21386:28:28","memberName":"accrueInterestAndUpdateScore","nodeType":"MemberAccess","referencedDeclaration":16489,"src":"21380:34:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":6010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21380:50:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6011,"nodeType":"ExpressionStatement","src":"21380:50:28"}]}}]},"documentation":{"id":5985,"nodeType":"StructuredDocumentation","src":"20808:354:28","text":" @notice Validates mint, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\n @param vToken Asset being minted\n @param minter The address minting the tokens\n @param actualMintAmount The amount of the underlying asset being minted\n @param mintTokens The number of tokens being minted"},"functionSelector":"41c728b9","id":6015,"implemented":true,"kind":"function","modifiers":[],"name":"mintVerify","nameLocation":"21224:10:28","nodeType":"FunctionDefinition","parameters":{"id":5994,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5987,"mutability":"mutable","name":"vToken","nameLocation":"21243:6:28","nodeType":"VariableDeclaration","scope":6015,"src":"21235:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5986,"name":"address","nodeType":"ElementaryTypeName","src":"21235:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5989,"mutability":"mutable","name":"minter","nameLocation":"21259:6:28","nodeType":"VariableDeclaration","scope":6015,"src":"21251:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5988,"name":"address","nodeType":"ElementaryTypeName","src":"21251:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5991,"mutability":"mutable","name":"actualMintAmount","nameLocation":"21275:16:28","nodeType":"VariableDeclaration","scope":6015,"src":"21267:24:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5990,"name":"uint256","nodeType":"ElementaryTypeName","src":"21267:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5993,"mutability":"mutable","name":"mintTokens","nameLocation":"21301:10:28","nodeType":"VariableDeclaration","scope":6015,"src":"21293:18:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5992,"name":"uint256","nodeType":"ElementaryTypeName","src":"21293:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21234:78:28"},"returnParameters":{"id":5995,"nodeType":"ParameterList","parameters":[],"src":"21322:0:28"},"scope":9130,"src":"21215:232:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[9183],"body":{"id":6074,"nodeType":"Block","src":"22411:527:28","statements":[{"expression":{"arguments":[{"id":6027,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"22444:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":6028,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"22452:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":6029,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"22459:6:28","memberName":"REDEEM","nodeType":"MemberAccess","referencedDeclaration":9140,"src":"22452:13:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"id":6026,"name":"_checkActionPauseState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9129,"src":"22421:22:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Action_$9148_$returns$__$","typeString":"function (address,enum Action) view"}},"id":6030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22421:45:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6031,"nodeType":"ExpressionStatement","src":"22421:45:28"},{"expression":{"arguments":[{"id":6033,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"22497:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6034,"name":"redeemer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6020,"src":"22505:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6035,"name":"redeemTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6022,"src":"22515:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6032,"name":"_checkRedeemAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8725,"src":"22477:19:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":6036,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22477:51:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6037,"nodeType":"ExpressionStatement","src":"22477:51:28"},{"assignments":[6039],"declarations":[{"constant":false,"id":6039,"mutability":"mutable","name":"rewardDistributorsCount","nameLocation":"22583:23:28","nodeType":"VariableDeclaration","scope":6074,"src":"22575:31:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6038,"name":"uint256","nodeType":"ElementaryTypeName","src":"22575:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6042,"initialValue":{"expression":{"id":6040,"name":"rewardsDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9537,"src":"22609:19:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage","typeString":"contract RewardsDistributor[] storage ref"}},"id":6041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22629:6:28","memberName":"length","nodeType":"MemberAccess","src":"22609:26:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22575:60:28"},{"body":{"id":6072,"nodeType":"Block","src":"22696:236:28","statements":[{"assignments":[6054],"declarations":[{"constant":false,"id":6054,"mutability":"mutable","name":"rewardsDistributor","nameLocation":"22729:18:28","nodeType":"VariableDeclaration","scope":6072,"src":"22710:37:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"},"typeName":{"id":6053,"nodeType":"UserDefinedTypeName","pathNode":{"id":6052,"name":"RewardsDistributor","nameLocations":["22710:18:28"],"nodeType":"IdentifierPath","referencedDeclaration":12324,"src":"22710:18:28"},"referencedDeclaration":12324,"src":"22710:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"visibility":"internal"}],"id":6058,"initialValue":{"baseExpression":{"id":6055,"name":"rewardsDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9537,"src":"22750:19:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage","typeString":"contract RewardsDistributor[] storage ref"}},"id":6057,"indexExpression":{"id":6056,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6044,"src":"22770:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22750:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"nodeType":"VariableDeclarationStatement","src":"22710:62:28"},{"expression":{"arguments":[{"id":6062,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"22834:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6059,"name":"rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6054,"src":"22786:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":6061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22805:28:28","memberName":"updateRewardTokenSupplyIndex","nodeType":"MemberAccess","referencedDeclaration":10689,"src":"22786:47:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":6063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22786:55:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6064,"nodeType":"ExpressionStatement","src":"22786:55:28"},{"expression":{"arguments":[{"id":6068,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"22904:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6069,"name":"redeemer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6020,"src":"22912:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6065,"name":"rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6054,"src":"22855:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":6067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22874:29:28","memberName":"distributeSupplierRewardToken","nodeType":"MemberAccess","referencedDeclaration":10987,"src":"22855:48:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":6070,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22855:66:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6071,"nodeType":"ExpressionStatement","src":"22855:66:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6046,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6044,"src":"22662:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6047,"name":"rewardDistributorsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6039,"src":"22666:23:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22662:27:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6073,"initializationExpression":{"assignments":[6044],"declarations":[{"constant":false,"id":6044,"mutability":"mutable","name":"i","nameLocation":"22659:1:28","nodeType":"VariableDeclaration","scope":6073,"src":"22651:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6043,"name":"uint256","nodeType":"ElementaryTypeName","src":"22651:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6045,"nodeType":"VariableDeclarationStatement","src":"22651:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":6050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"22691:3:28","subExpression":{"id":6049,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6044,"src":"22693:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6051,"nodeType":"ExpressionStatement","src":"22691:3:28"},"nodeType":"ForStatement","src":"22646:286:28"}]},"documentation":{"id":6016,"nodeType":"StructuredDocumentation","src":"21453:856:28","text":" @notice Checks if the account should be allowed to redeem tokens in the given market\n @param vToken The market to verify the redeem against\n @param redeemer The account which would redeem the tokens\n @param redeemTokens The number of vTokens to exchange for the underlying asset in the market\n @custom:error ActionPaused error is thrown if withdrawals are paused in this market\n @custom:error MarketNotListed error is thrown when the market is not listed\n @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\n @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\n @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\n @custom:access Not restricted"},"functionSelector":"8e6470ea","id":6075,"implemented":true,"kind":"function","modifiers":[],"name":"preRedeemHook","nameLocation":"22323:13:28","nodeType":"FunctionDefinition","overrides":{"id":6024,"nodeType":"OverrideSpecifier","overrides":[],"src":"22402:8:28"},"parameters":{"id":6023,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6018,"mutability":"mutable","name":"vToken","nameLocation":"22345:6:28","nodeType":"VariableDeclaration","scope":6075,"src":"22337:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6017,"name":"address","nodeType":"ElementaryTypeName","src":"22337:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6020,"mutability":"mutable","name":"redeemer","nameLocation":"22361:8:28","nodeType":"VariableDeclaration","scope":6075,"src":"22353:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6019,"name":"address","nodeType":"ElementaryTypeName","src":"22353:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6022,"mutability":"mutable","name":"redeemTokens","nameLocation":"22379:12:28","nodeType":"VariableDeclaration","scope":6075,"src":"22371:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6021,"name":"uint256","nodeType":"ElementaryTypeName","src":"22371:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22336:56:28"},"returnParameters":{"id":6025,"nodeType":"ParameterList","parameters":[],"src":"22411:0:28"},"scope":9130,"src":"22314:624:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[9254],"body":{"id":6105,"nodeType":"Block","src":"23422:127:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6089,"name":"prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9562,"src":"23444:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}],"id":6088,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23436:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6087,"name":"address","nodeType":"ElementaryTypeName","src":"23436:7:28","typeDescriptions":{}}},"id":6090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23436:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":6093,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23462:1:28","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":6092,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23454:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6091,"name":"address","nodeType":"ElementaryTypeName","src":"23454:7:28","typeDescriptions":{}}},"id":6094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23454:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23436:28:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6104,"nodeType":"IfStatement","src":"23432:111:28","trueBody":{"id":6103,"nodeType":"Block","src":"23466:77:28","statements":[{"expression":{"arguments":[{"id":6099,"name":"redeemer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6080,"src":"23515:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6100,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6078,"src":"23525:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6096,"name":"prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9562,"src":"23480:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}},"id":6098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23486:28:28","memberName":"accrueInterestAndUpdateScore","nodeType":"MemberAccess","referencedDeclaration":16489,"src":"23480:34:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":6101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23480:52:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6102,"nodeType":"ExpressionStatement","src":"23480:52:28"}]}}]},"documentation":{"id":6076,"nodeType":"StructuredDocumentation","src":"22944:364:28","text":" @notice Validates redeem, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\n @param vToken Asset being redeemed\n @param redeemer The address redeeming the tokens\n @param redeemAmount The amount of the underlying asset being redeemed\n @param redeemTokens The number of tokens being redeemed"},"functionSelector":"51dff989","id":6106,"implemented":true,"kind":"function","modifiers":[],"name":"redeemVerify","nameLocation":"23322:12:28","nodeType":"FunctionDefinition","parameters":{"id":6085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6078,"mutability":"mutable","name":"vToken","nameLocation":"23343:6:28","nodeType":"VariableDeclaration","scope":6106,"src":"23335:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6077,"name":"address","nodeType":"ElementaryTypeName","src":"23335:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6080,"mutability":"mutable","name":"redeemer","nameLocation":"23359:8:28","nodeType":"VariableDeclaration","scope":6106,"src":"23351:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6079,"name":"address","nodeType":"ElementaryTypeName","src":"23351:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6082,"mutability":"mutable","name":"redeemAmount","nameLocation":"23377:12:28","nodeType":"VariableDeclaration","scope":6106,"src":"23369:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6081,"name":"uint256","nodeType":"ElementaryTypeName","src":"23369:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6084,"mutability":"mutable","name":"redeemTokens","nameLocation":"23399:12:28","nodeType":"VariableDeclaration","scope":6106,"src":"23391:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6083,"name":"uint256","nodeType":"ElementaryTypeName","src":"23391:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23334:78:28"},"returnParameters":{"id":6086,"nodeType":"ParameterList","parameters":[],"src":"23422:0:28"},"scope":9130,"src":"23313:236:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[9267],"body":{"id":6138,"nodeType":"Block","src":"24202:127:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6122,"name":"prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9562,"src":"24224:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}],"id":6121,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24216:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6120,"name":"address","nodeType":"ElementaryTypeName","src":"24216:7:28","typeDescriptions":{}}},"id":6123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24216:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":6126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24242:1:28","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":6125,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24234:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6124,"name":"address","nodeType":"ElementaryTypeName","src":"24234:7:28","typeDescriptions":{}}},"id":6127,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24234:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24216:28:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6137,"nodeType":"IfStatement","src":"24212:111:28","trueBody":{"id":6136,"nodeType":"Block","src":"24246:77:28","statements":[{"expression":{"arguments":[{"id":6132,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6113,"src":"24295:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6133,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6109,"src":"24305:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6129,"name":"prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9562,"src":"24260:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}},"id":6131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24266:28:28","memberName":"accrueInterestAndUpdateScore","nodeType":"MemberAccess","referencedDeclaration":16489,"src":"24260:34:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":6134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24260:52:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6135,"nodeType":"ExpressionStatement","src":"24260:52:28"}]}}]},"documentation":{"id":6107,"nodeType":"StructuredDocumentation","src":"23555:344:28","text":" @notice Validates repayBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\n @param vToken Asset being repaid\n @param payer The address repaying the borrow\n @param borrower The address of the borrower\n @param actualRepayAmount The amount of underlying being repaid"},"functionSelector":"1ededc91","id":6139,"implemented":true,"kind":"function","modifiers":[],"name":"repayBorrowVerify","nameLocation":"23913:17:28","nodeType":"FunctionDefinition","parameters":{"id":6118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6109,"mutability":"mutable","name":"vToken","nameLocation":"23948:6:28","nodeType":"VariableDeclaration","scope":6139,"src":"23940:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6108,"name":"address","nodeType":"ElementaryTypeName","src":"23940:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6111,"mutability":"mutable","name":"payer","nameLocation":"23972:5:28","nodeType":"VariableDeclaration","scope":6139,"src":"23964:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6110,"name":"address","nodeType":"ElementaryTypeName","src":"23964:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6113,"mutability":"mutable","name":"borrower","nameLocation":"24034:8:28","nodeType":"VariableDeclaration","scope":6139,"src":"24026:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6112,"name":"address","nodeType":"ElementaryTypeName","src":"24026:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6115,"mutability":"mutable","name":"actualRepayAmount","nameLocation":"24060:17:28","nodeType":"VariableDeclaration","scope":6139,"src":"24052:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6114,"name":"uint256","nodeType":"ElementaryTypeName","src":"24052:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6117,"mutability":"mutable","name":"borrowerIndex","nameLocation":"24134:13:28","nodeType":"VariableDeclaration","scope":6139,"src":"24126:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6116,"name":"uint256","nodeType":"ElementaryTypeName","src":"24126:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23930:262:28"},"returnParameters":{"id":6119,"nodeType":"ParameterList","parameters":[],"src":"24202:0:28"},"scope":9130,"src":"23904:425:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[9282],"body":{"id":6180,"nodeType":"Block","src":"25259:211:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6157,"name":"prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9562,"src":"25281:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}],"id":6156,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25273:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6155,"name":"address","nodeType":"ElementaryTypeName","src":"25273:7:28","typeDescriptions":{}}},"id":6158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25273:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":6161,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25299:1:28","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":6160,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25291:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6159,"name":"address","nodeType":"ElementaryTypeName","src":"25291:7:28","typeDescriptions":{}}},"id":6162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25291:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"25273:28:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6179,"nodeType":"IfStatement","src":"25269:195:28","trueBody":{"id":6178,"nodeType":"Block","src":"25303:161:28","statements":[{"expression":{"arguments":[{"id":6167,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"25352:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6168,"name":"vTokenBorrowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6142,"src":"25362:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6164,"name":"prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9562,"src":"25317:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}},"id":6166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25323:28:28","memberName":"accrueInterestAndUpdateScore","nodeType":"MemberAccess","referencedDeclaration":16489,"src":"25317:34:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":6169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25317:60:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6170,"nodeType":"ExpressionStatement","src":"25317:60:28"},{"expression":{"arguments":[{"id":6174,"name":"liquidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6146,"src":"25426:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6175,"name":"vTokenBorrowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6142,"src":"25438:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6171,"name":"prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9562,"src":"25391:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}},"id":6173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25397:28:28","memberName":"accrueInterestAndUpdateScore","nodeType":"MemberAccess","referencedDeclaration":16489,"src":"25391:34:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":6176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25391:62:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6177,"nodeType":"ExpressionStatement","src":"25391:62:28"}]}}]},"documentation":{"id":6140,"nodeType":"StructuredDocumentation","src":"24335:572:28","text":" @notice Validates liquidateBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\n @param vTokenBorrowed Asset which was borrowed by the borrower\n @param vTokenCollateral Asset which was used as collateral and will be seized\n @param liquidator The address repaying the borrow and seizing the collateral\n @param borrower The address of the borrower\n @param actualRepayAmount The amount of underlying being repaid\n @param seizeTokens The amount of collateral token that will be seized"},"functionSelector":"47ef3b3b","id":6181,"implemented":true,"kind":"function","modifiers":[],"name":"liquidateBorrowVerify","nameLocation":"24921:21:28","nodeType":"FunctionDefinition","parameters":{"id":6153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6142,"mutability":"mutable","name":"vTokenBorrowed","nameLocation":"24960:14:28","nodeType":"VariableDeclaration","scope":6181,"src":"24952:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6141,"name":"address","nodeType":"ElementaryTypeName","src":"24952:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6144,"mutability":"mutable","name":"vTokenCollateral","nameLocation":"24992:16:28","nodeType":"VariableDeclaration","scope":6181,"src":"24984:24:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6143,"name":"address","nodeType":"ElementaryTypeName","src":"24984:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6146,"mutability":"mutable","name":"liquidator","nameLocation":"25065:10:28","nodeType":"VariableDeclaration","scope":6181,"src":"25057:18:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6145,"name":"address","nodeType":"ElementaryTypeName","src":"25057:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6148,"mutability":"mutable","name":"borrower","nameLocation":"25093:8:28","nodeType":"VariableDeclaration","scope":6181,"src":"25085:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6147,"name":"address","nodeType":"ElementaryTypeName","src":"25085:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6150,"mutability":"mutable","name":"actualRepayAmount","nameLocation":"25119:17:28","nodeType":"VariableDeclaration","scope":6181,"src":"25111:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6149,"name":"uint256","nodeType":"ElementaryTypeName","src":"25111:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6152,"mutability":"mutable","name":"seizeTokens","nameLocation":"25193:11:28","nodeType":"VariableDeclaration","scope":6181,"src":"25185:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6151,"name":"uint256","nodeType":"ElementaryTypeName","src":"25185:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24942:307:28"},"returnParameters":{"id":6154,"nodeType":"ParameterList","parameters":[],"src":"25259:0:28"},"scope":9130,"src":"24912:558:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[9295],"body":{"id":6220,"nodeType":"Block","src":"26226:215:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6197,"name":"prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9562,"src":"26248:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}],"id":6196,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26240:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6195,"name":"address","nodeType":"ElementaryTypeName","src":"26240:7:28","typeDescriptions":{}}},"id":6198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26240:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":6201,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26266:1:28","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":6200,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26258:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6199,"name":"address","nodeType":"ElementaryTypeName","src":"26258:7:28","typeDescriptions":{}}},"id":6202,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26258:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"26240:28:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6219,"nodeType":"IfStatement","src":"26236:199:28","trueBody":{"id":6218,"nodeType":"Block","src":"26270:165:28","statements":[{"expression":{"arguments":[{"id":6207,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6190,"src":"26319:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6208,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6184,"src":"26329:16:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6204,"name":"prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9562,"src":"26284:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}},"id":6206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26290:28:28","memberName":"accrueInterestAndUpdateScore","nodeType":"MemberAccess","referencedDeclaration":16489,"src":"26284:34:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":6209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26284:62:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6210,"nodeType":"ExpressionStatement","src":"26284:62:28"},{"expression":{"arguments":[{"id":6214,"name":"liquidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6188,"src":"26395:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6215,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6184,"src":"26407:16:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6211,"name":"prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9562,"src":"26360:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}},"id":6213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26366:28:28","memberName":"accrueInterestAndUpdateScore","nodeType":"MemberAccess","referencedDeclaration":16489,"src":"26360:34:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":6216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26360:64:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6217,"nodeType":"ExpressionStatement","src":"26360:64:28"}]}}]},"documentation":{"id":6182,"nodeType":"StructuredDocumentation","src":"25476:482:28","text":" @notice Validates seize, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\n @param vTokenCollateral Asset which was used as collateral and will be seized\n @param vTokenBorrowed Asset which was borrowed by the borrower\n @param liquidator The address repaying the borrow and seizing the collateral\n @param borrower The address of the borrower\n @param seizeTokens The number of collateral tokens to seize"},"functionSelector":"6d35bf91","id":6221,"implemented":true,"kind":"function","modifiers":[],"name":"seizeVerify","nameLocation":"25972:11:28","nodeType":"FunctionDefinition","parameters":{"id":6193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6184,"mutability":"mutable","name":"vTokenCollateral","nameLocation":"26001:16:28","nodeType":"VariableDeclaration","scope":6221,"src":"25993:24:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6183,"name":"address","nodeType":"ElementaryTypeName","src":"25993:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6186,"mutability":"mutable","name":"vTokenBorrowed","nameLocation":"26035:14:28","nodeType":"VariableDeclaration","scope":6221,"src":"26027:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6185,"name":"address","nodeType":"ElementaryTypeName","src":"26027:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6188,"mutability":"mutable","name":"liquidator","nameLocation":"26106:10:28","nodeType":"VariableDeclaration","scope":6221,"src":"26098:18:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6187,"name":"address","nodeType":"ElementaryTypeName","src":"26098:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6190,"mutability":"mutable","name":"borrower","nameLocation":"26134:8:28","nodeType":"VariableDeclaration","scope":6221,"src":"26126:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6189,"name":"address","nodeType":"ElementaryTypeName","src":"26126:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6192,"mutability":"mutable","name":"seizeTokens","nameLocation":"26160:11:28","nodeType":"VariableDeclaration","scope":6221,"src":"26152:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6191,"name":"uint256","nodeType":"ElementaryTypeName","src":"26152:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25983:233:28"},"returnParameters":{"id":6194,"nodeType":"ParameterList","parameters":[],"src":"26226:0:28"},"scope":9130,"src":"25963:478:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[9306],"body":{"id":6258,"nodeType":"Block","src":"26946:183:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6235,"name":"prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9562,"src":"26968:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}],"id":6234,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26960:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6233,"name":"address","nodeType":"ElementaryTypeName","src":"26960:7:28","typeDescriptions":{}}},"id":6236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26960:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":6239,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26986:1:28","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":6238,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26978:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6237,"name":"address","nodeType":"ElementaryTypeName","src":"26978:7:28","typeDescriptions":{}}},"id":6240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26978:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"26960:28:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6257,"nodeType":"IfStatement","src":"26956:167:28","trueBody":{"id":6256,"nodeType":"Block","src":"26990:133:28","statements":[{"expression":{"arguments":[{"id":6245,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6226,"src":"27039:3:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6246,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6224,"src":"27044:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6242,"name":"prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9562,"src":"27004:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}},"id":6244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27010:28:28","memberName":"accrueInterestAndUpdateScore","nodeType":"MemberAccess","referencedDeclaration":16489,"src":"27004:34:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":6247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27004:47:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6248,"nodeType":"ExpressionStatement","src":"27004:47:28"},{"expression":{"arguments":[{"id":6252,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6228,"src":"27100:3:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6253,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6224,"src":"27105:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6249,"name":"prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9562,"src":"27065:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}},"id":6251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27071:28:28","memberName":"accrueInterestAndUpdateScore","nodeType":"MemberAccess","referencedDeclaration":16489,"src":"27065:34:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":6254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27065:47:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6255,"nodeType":"ExpressionStatement","src":"27065:47:28"}]}}]},"documentation":{"id":6222,"nodeType":"StructuredDocumentation","src":"26447:347:28","text":" @notice Validates transfer, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\n @param vToken Asset being transferred\n @param src The account which sources the tokens\n @param dst The account which receives the tokens\n @param transferTokens The number of vTokens to transfer"},"functionSelector":"6a56947e","id":6259,"implemented":true,"kind":"function","modifiers":[],"name":"transferVerify","nameLocation":"26856:14:28","nodeType":"FunctionDefinition","parameters":{"id":6231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6224,"mutability":"mutable","name":"vToken","nameLocation":"26879:6:28","nodeType":"VariableDeclaration","scope":6259,"src":"26871:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6223,"name":"address","nodeType":"ElementaryTypeName","src":"26871:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6226,"mutability":"mutable","name":"src","nameLocation":"26895:3:28","nodeType":"VariableDeclaration","scope":6259,"src":"26887:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6225,"name":"address","nodeType":"ElementaryTypeName","src":"26887:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6228,"mutability":"mutable","name":"dst","nameLocation":"26908:3:28","nodeType":"VariableDeclaration","scope":6259,"src":"26900:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6227,"name":"address","nodeType":"ElementaryTypeName","src":"26900:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6230,"mutability":"mutable","name":"transferTokens","nameLocation":"26921:14:28","nodeType":"VariableDeclaration","scope":6259,"src":"26913:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6229,"name":"uint256","nodeType":"ElementaryTypeName","src":"26913:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26870:66:28"},"returnParameters":{"id":6232,"nodeType":"ParameterList","parameters":[],"src":"26946:0:28"},"scope":9130,"src":"26847:282:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[9192],"body":{"id":6450,"nodeType":"Block","src":"28266:1981:28","statements":[{"expression":{"arguments":[{"id":6271,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"28299:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":6272,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"28307:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":6273,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28314:6:28","memberName":"BORROW","nodeType":"MemberAccess","referencedDeclaration":9141,"src":"28307:13:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"id":6270,"name":"_checkActionPauseState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9129,"src":"28276:22:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Action_$9148_$returns$__$","typeString":"function (address,enum Action) view"}},"id":6274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28276:45:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6275,"nodeType":"ExpressionStatement","src":"28276:45:28"},{"condition":{"id":6280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"28336:25:28","subExpression":{"expression":{"baseExpression":{"id":6276,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"28337:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":6278,"indexExpression":{"id":6277,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"28345:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28337:15:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"id":6279,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28353:8:28","memberName":"isListed","nodeType":"MemberAccess","referencedDeclaration":9475,"src":"28337:24:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6289,"nodeType":"IfStatement","src":"28332:95:28","trueBody":{"id":6288,"nodeType":"Block","src":"28363:64:28","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":6284,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"28408:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6283,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28400:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6282,"name":"address","nodeType":"ElementaryTypeName","src":"28400:7:28","typeDescriptions":{}}},"id":6285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28400:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6281,"name":"MarketNotListed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5287,"src":"28384:15:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":6286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28384:32:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6287,"nodeType":"RevertStatement","src":"28377:39:28"}]}},{"condition":{"id":6296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"28441:44:28","subExpression":{"baseExpression":{"expression":{"baseExpression":{"id":6290,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"28442:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":6292,"indexExpression":{"id":6291,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"28450:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28442:15:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"id":6293,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28458:17:28","memberName":"accountMembership","nodeType":"MemberAccess","referencedDeclaration":9483,"src":"28442:33:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":6295,"indexExpression":{"id":6294,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6264,"src":"28476:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28442:43:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6310,"nodeType":"IfStatement","src":"28437:294:28","trueBody":{"id":6309,"nodeType":"Block","src":"28487:244:28","statements":[{"expression":{"arguments":[{"id":6298,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"28593:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6297,"name":"_checkSenderIs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9108,"src":"28578:14:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":6299,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28578:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6300,"nodeType":"ExpressionStatement","src":"28578:22:28"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":6303,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"28698:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28702:6:28","memberName":"sender","nodeType":"MemberAccess","src":"28698:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6302,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"28691:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":6305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28691:18:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"id":6306,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6264,"src":"28711:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6301,"name":"_addToMarket","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8572,"src":"28678:12:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_VToken_$15506_$_t_address_$returns$__$","typeString":"function (contract VToken,address)"}},"id":6307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28678:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6308,"nodeType":"ExpressionStatement","src":"28678:42:28"}]}},{"expression":{"arguments":[{"id":6312,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6264,"src":"28793:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6311,"name":"updatePrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8405,"src":"28780:12:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":6313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28780:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6314,"nodeType":"ExpressionStatement","src":"28780:22:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6317,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"28843:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6315,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9488,"src":"28817:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"id":6316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28824:18:28","memberName":"getUnderlyingPrice","nodeType":"MemberAccess","referencedDeclaration":16172,"src":"28817:25:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":6318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28817:33:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6319,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28854:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"28817:38:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6329,"nodeType":"IfStatement","src":"28813:103:28","trueBody":{"id":6328,"nodeType":"Block","src":"28857:59:28","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":6324,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"28897:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6323,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28889:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6322,"name":"address","nodeType":"ElementaryTypeName","src":"28889:7:28","typeDescriptions":{}}},"id":6325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28889:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6321,"name":"PriceError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5275,"src":"28878:10:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":6326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28878:27:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6327,"nodeType":"RevertStatement","src":"28871:34:28"}]}},{"assignments":[6331],"declarations":[{"constant":false,"id":6331,"mutability":"mutable","name":"borrowCap","nameLocation":"28934:9:28","nodeType":"VariableDeclaration","scope":6450,"src":"28926:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6330,"name":"uint256","nodeType":"ElementaryTypeName","src":"28926:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6335,"initialValue":{"baseExpression":{"id":6332,"name":"borrowCaps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9517,"src":"28946:10:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6334,"indexExpression":{"id":6333,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"28957:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28946:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28926:38:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6336,"name":"borrowCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6331,"src":"29048:9:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"arguments":[{"id":6339,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29066:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6338,"name":"uint256","nodeType":"ElementaryTypeName","src":"29066:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":6337,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"29061:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":6340,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29061:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":6341,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"29075:3:28","memberName":"max","nodeType":"MemberAccess","src":"29061:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29048:30:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6378,"nodeType":"IfStatement","src":"29044:370:28","trueBody":{"id":6377,"nodeType":"Block","src":"29080:334:28","statements":[{"assignments":[6344],"declarations":[{"constant":false,"id":6344,"mutability":"mutable","name":"totalBorrows","nameLocation":"29102:12:28","nodeType":"VariableDeclaration","scope":6377,"src":"29094:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6343,"name":"uint256","nodeType":"ElementaryTypeName","src":"29094:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6350,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":6346,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"29124:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6345,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"29117:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":6347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29117:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":6348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29132:12:28","memberName":"totalBorrows","nodeType":"MemberAccess","referencedDeclaration":15563,"src":"29117:27:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":6349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29117:29:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29094:52:28"},{"assignments":[6352],"declarations":[{"constant":false,"id":6352,"mutability":"mutable","name":"badDebt","nameLocation":"29168:7:28","nodeType":"VariableDeclaration","scope":6377,"src":"29160:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6351,"name":"uint256","nodeType":"ElementaryTypeName","src":"29160:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6358,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":6354,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"29185:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6353,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"29178:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":6355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29178:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":6356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29193:7:28","memberName":"badDebt","nodeType":"MemberAccess","referencedDeclaration":15572,"src":"29178:22:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":6357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29178:24:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29160:42:28"},{"assignments":[6360],"declarations":[{"constant":false,"id":6360,"mutability":"mutable","name":"nextTotalBorrows","nameLocation":"29224:16:28","nodeType":"VariableDeclaration","scope":6377,"src":"29216:24:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6359,"name":"uint256","nodeType":"ElementaryTypeName","src":"29216:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6366,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6361,"name":"totalBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"29243:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6362,"name":"borrowAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6266,"src":"29258:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29243:27:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6364,"name":"badDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6352,"src":"29273:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29243:37:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29216:64:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6367,"name":"nextTotalBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6360,"src":"29298:16:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":6368,"name":"borrowCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6331,"src":"29317:9:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29298:28:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6376,"nodeType":"IfStatement","src":"29294:110:28","trueBody":{"id":6375,"nodeType":"Block","src":"29328:76:28","statements":[{"errorCall":{"arguments":[{"id":6371,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"29371:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6372,"name":"borrowCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6331,"src":"29379:9:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6370,"name":"BorrowCapExceeded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5391,"src":"29353:17:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) pure"}},"id":6373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29353:36:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6374,"nodeType":"RevertStatement","src":"29346:43:28"}]}}]}},{"assignments":[6381],"declarations":[{"constant":false,"id":6381,"mutability":"mutable","name":"snapshot","nameLocation":"29456:8:28","nodeType":"VariableDeclaration","scope":6450,"src":"29424:40:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot"},"typeName":{"id":6380,"nodeType":"UserDefinedTypeName","pathNode":{"id":6379,"name":"AccountLiquiditySnapshot","nameLocations":["29424:24:28"],"nodeType":"IdentifierPath","referencedDeclaration":9466,"src":"29424:24:28"},"referencedDeclaration":9466,"src":"29424:24:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_storage_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot"}},"visibility":"internal"}],"id":6391,"initialValue":{"arguments":[{"id":6383,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6264,"src":"29514:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":6385,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"29543:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6384,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"29536:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":6386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29536:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"hexValue":"30","id":6387,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29564:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":6388,"name":"borrowAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6266,"src":"29579:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6389,"name":"_getCollateralFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9020,"src":"29605:20:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp memory)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp memory)"}],"id":6382,"name":"_getHypotheticalLiquiditySnapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8965,"src":"29467:33:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_contract$_VToken_$15506_$_t_uint256_$_t_uint256_$_t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$_$returns$_t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr_$","typeString":"function (address,contract VToken,uint256,uint256,function (contract VToken) view returns (struct ExponentialNoError.Exp memory)) view returns (struct ComptrollerStorage.AccountLiquiditySnapshot memory)"}},"id":6390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29467:168:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"nodeType":"VariableDeclarationStatement","src":"29424:211:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6392,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6381,"src":"29650:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":6393,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29659:9:28","memberName":"shortfall","nodeType":"MemberAccess","referencedDeclaration":9465,"src":"29650:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":6394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29671:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29650:22:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6400,"nodeType":"IfStatement","src":"29646:83:28","trueBody":{"id":6399,"nodeType":"Block","src":"29674:55:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6396,"name":"InsufficientLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5355,"src":"29695:21:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":6397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29695:23:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6398,"nodeType":"RevertStatement","src":"29688:30:28"}]}},{"assignments":[6403],"declarations":[{"constant":false,"id":6403,"mutability":"mutable","name":"borrowIndex","nameLocation":"29750:11:28","nodeType":"VariableDeclaration","scope":6450,"src":"29739:22:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":6402,"nodeType":"UserDefinedTypeName","pathNode":{"id":6401,"name":"Exp","nameLocations":["29739:3:28"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"29739:3:28"},"referencedDeclaration":9645,"src":"29739:3:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":6411,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":6406,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"29787:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6405,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"29780:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":6407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29780:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":6408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29795:11:28","memberName":"borrowIndex","nodeType":"MemberAccess","referencedDeclaration":15560,"src":"29780:26:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":6409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29780:28:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6404,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"29764:3:28","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":6410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["29770:8:28"],"names":["mantissa"],"nodeType":"FunctionCall","src":"29764:47:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"VariableDeclarationStatement","src":"29739:72:28"},{"assignments":[6413],"declarations":[{"constant":false,"id":6413,"mutability":"mutable","name":"rewardDistributorsCount","nameLocation":"29866:23:28","nodeType":"VariableDeclaration","scope":6450,"src":"29858:31:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6412,"name":"uint256","nodeType":"ElementaryTypeName","src":"29858:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6416,"initialValue":{"expression":{"id":6414,"name":"rewardsDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9537,"src":"29892:19:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage","typeString":"contract RewardsDistributor[] storage ref"}},"id":6415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29912:6:28","memberName":"length","nodeType":"MemberAccess","src":"29892:26:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29858:60:28"},{"body":{"id":6448,"nodeType":"Block","src":"29979:262:28","statements":[{"assignments":[6428],"declarations":[{"constant":false,"id":6428,"mutability":"mutable","name":"rewardsDistributor","nameLocation":"30012:18:28","nodeType":"VariableDeclaration","scope":6448,"src":"29993:37:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"},"typeName":{"id":6427,"nodeType":"UserDefinedTypeName","pathNode":{"id":6426,"name":"RewardsDistributor","nameLocations":["29993:18:28"],"nodeType":"IdentifierPath","referencedDeclaration":12324,"src":"29993:18:28"},"referencedDeclaration":12324,"src":"29993:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"visibility":"internal"}],"id":6432,"initialValue":{"baseExpression":{"id":6429,"name":"rewardsDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9537,"src":"30033:19:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage","typeString":"contract RewardsDistributor[] storage ref"}},"id":6431,"indexExpression":{"id":6430,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6418,"src":"30053:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30033:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"nodeType":"VariableDeclarationStatement","src":"29993:62:28"},{"expression":{"arguments":[{"id":6436,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"30117:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6437,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6403,"src":"30125:11:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"expression":{"id":6433,"name":"rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6428,"src":"30069:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":6435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30088:28:28","memberName":"updateRewardTokenBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":10735,"src":"30069:47:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_Exp_$9645_memory_ptr_$returns$__$","typeString":"function (address,struct ExponentialNoError.Exp memory) external"}},"id":6438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30069:68:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6439,"nodeType":"ExpressionStatement","src":"30069:68:28"},{"expression":{"arguments":[{"id":6443,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"30200:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6444,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6264,"src":"30208:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6445,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6403,"src":"30218:11:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"expression":{"id":6440,"name":"rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6428,"src":"30151:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":6442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30170:29:28","memberName":"distributeBorrowerRewardToken","nodeType":"MemberAccess","referencedDeclaration":10677,"src":"30151:48:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_struct$_Exp_$9645_memory_ptr_$returns$__$","typeString":"function (address,address,struct ExponentialNoError.Exp memory) external"}},"id":6446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30151:79:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6447,"nodeType":"ExpressionStatement","src":"30151:79:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6420,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6418,"src":"29945:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6421,"name":"rewardDistributorsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6413,"src":"29949:23:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29945:27:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6449,"initializationExpression":{"assignments":[6418],"declarations":[{"constant":false,"id":6418,"mutability":"mutable","name":"i","nameLocation":"29942:1:28","nodeType":"VariableDeclaration","scope":6449,"src":"29934:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6417,"name":"uint256","nodeType":"ElementaryTypeName","src":"29934:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6419,"nodeType":"VariableDeclarationStatement","src":"29934:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":6424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"29974:3:28","subExpression":{"id":6423,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6418,"src":"29976:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6425,"nodeType":"ExpressionStatement","src":"29974:3:28"},"nodeType":"ForStatement","src":"29929:312:28"}]},"documentation":{"id":6260,"nodeType":"StructuredDocumentation","src":"28146:18:28","text":"disable-eslint"},"functionSelector":"df71403b","id":6451,"implemented":true,"kind":"function","modifiers":[],"name":"preBorrowHook","nameLocation":"28178:13:28","nodeType":"FunctionDefinition","overrides":{"id":6268,"nodeType":"OverrideSpecifier","overrides":[],"src":"28257:8:28"},"parameters":{"id":6267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6262,"mutability":"mutable","name":"vToken","nameLocation":"28200:6:28","nodeType":"VariableDeclaration","scope":6451,"src":"28192:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6261,"name":"address","nodeType":"ElementaryTypeName","src":"28192:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6264,"mutability":"mutable","name":"borrower","nameLocation":"28216:8:28","nodeType":"VariableDeclaration","scope":6451,"src":"28208:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6263,"name":"address","nodeType":"ElementaryTypeName","src":"28208:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6266,"mutability":"mutable","name":"borrowAmount","nameLocation":"28234:12:28","nodeType":"VariableDeclaration","scope":6451,"src":"28226:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6265,"name":"uint256","nodeType":"ElementaryTypeName","src":"28226:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"28191:56:28"},"returnParameters":{"id":6269,"nodeType":"ParameterList","parameters":[],"src":"28266:0:28"},"scope":9130,"src":"28169:2078:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[9232],"body":{"id":6479,"nodeType":"Block","src":"30723:127:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6463,"name":"prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9562,"src":"30745:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}],"id":6462,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30737:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6461,"name":"address","nodeType":"ElementaryTypeName","src":"30737:7:28","typeDescriptions":{}}},"id":6464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30737:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":6467,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30763:1:28","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":6466,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30755:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6465,"name":"address","nodeType":"ElementaryTypeName","src":"30755:7:28","typeDescriptions":{}}},"id":6468,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30755:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"30737:28:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6478,"nodeType":"IfStatement","src":"30733:111:28","trueBody":{"id":6477,"nodeType":"Block","src":"30767:77:28","statements":[{"expression":{"arguments":[{"id":6473,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6456,"src":"30816:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6474,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6454,"src":"30826:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6470,"name":"prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9562,"src":"30781:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}},"id":6472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30787:28:28","memberName":"accrueInterestAndUpdateScore","nodeType":"MemberAccess","referencedDeclaration":16489,"src":"30781:34:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":6475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30781:52:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6476,"nodeType":"ExpressionStatement","src":"30781:52:28"}]}}]},"documentation":{"id":6452,"nodeType":"StructuredDocumentation","src":"30253:330:28","text":" @notice Validates borrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\n @param vToken Asset whose underlying is being borrowed\n @param borrower The address borrowing the underlying\n @param borrowAmount The amount of the underlying asset requested to borrow"},"functionSelector":"5c778605","id":6480,"implemented":true,"kind":"function","modifiers":[],"name":"borrowVerify","nameLocation":"30645:12:28","nodeType":"FunctionDefinition","parameters":{"id":6459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6454,"mutability":"mutable","name":"vToken","nameLocation":"30666:6:28","nodeType":"VariableDeclaration","scope":6480,"src":"30658:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6453,"name":"address","nodeType":"ElementaryTypeName","src":"30658:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6456,"mutability":"mutable","name":"borrower","nameLocation":"30682:8:28","nodeType":"VariableDeclaration","scope":6480,"src":"30674:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6455,"name":"address","nodeType":"ElementaryTypeName","src":"30674:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6458,"mutability":"mutable","name":"borrowAmount","nameLocation":"30700:12:28","nodeType":"VariableDeclaration","scope":6480,"src":"30692:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6457,"name":"uint256","nodeType":"ElementaryTypeName","src":"30692:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30657:56:28"},"returnParameters":{"id":6460,"nodeType":"ParameterList","parameters":[],"src":"30723:0:28"},"scope":9130,"src":"30636:214:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[9199],"body":{"id":6564,"nodeType":"Block","src":"31375:718:28","statements":[{"expression":{"arguments":[{"id":6490,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6483,"src":"31408:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":6491,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"31416:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":6492,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"31423:5:28","memberName":"REPAY","nodeType":"MemberAccess","referencedDeclaration":9142,"src":"31416:12:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"id":6489,"name":"_checkActionPauseState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9129,"src":"31385:22:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Action_$9148_$returns$__$","typeString":"function (address,enum Action) view"}},"id":6493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31385:44:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6494,"nodeType":"ExpressionStatement","src":"31385:44:28"},{"expression":{"arguments":[{"id":6498,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6483,"src":"31459:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6495,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9488,"src":"31440:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"id":6497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31447:11:28","memberName":"updatePrice","nodeType":"MemberAccess","referencedDeclaration":16160,"src":"31440:18:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":6499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31440:26:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6500,"nodeType":"ExpressionStatement","src":"31440:26:28"},{"condition":{"id":6505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"31481:25:28","subExpression":{"expression":{"baseExpression":{"id":6501,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"31482:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":6503,"indexExpression":{"id":6502,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6483,"src":"31490:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31482:15:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"id":6504,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31498:8:28","memberName":"isListed","nodeType":"MemberAccess","referencedDeclaration":9475,"src":"31482:24:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6514,"nodeType":"IfStatement","src":"31477:95:28","trueBody":{"id":6513,"nodeType":"Block","src":"31508:64:28","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":6509,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6483,"src":"31553:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6508,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31545:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6507,"name":"address","nodeType":"ElementaryTypeName","src":"31545:7:28","typeDescriptions":{}}},"id":6510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31545:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6506,"name":"MarketNotListed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5287,"src":"31529:15:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":6511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31529:32:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6512,"nodeType":"RevertStatement","src":"31522:39:28"}]}},{"assignments":[6516],"declarations":[{"constant":false,"id":6516,"mutability":"mutable","name":"rewardDistributorsCount","nameLocation":"31626:23:28","nodeType":"VariableDeclaration","scope":6564,"src":"31618:31:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6515,"name":"uint256","nodeType":"ElementaryTypeName","src":"31618:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6519,"initialValue":{"expression":{"id":6517,"name":"rewardsDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9537,"src":"31652:19:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage","typeString":"contract RewardsDistributor[] storage ref"}},"id":6518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31672:6:28","memberName":"length","nodeType":"MemberAccess","src":"31652:26:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"31618:60:28"},{"body":{"id":6562,"nodeType":"Block","src":"31739:348:28","statements":[{"assignments":[6531],"declarations":[{"constant":false,"id":6531,"mutability":"mutable","name":"borrowIndex","nameLocation":"31764:11:28","nodeType":"VariableDeclaration","scope":6562,"src":"31753:22:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":6530,"nodeType":"UserDefinedTypeName","pathNode":{"id":6529,"name":"Exp","nameLocations":["31753:3:28"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"31753:3:28"},"referencedDeclaration":9645,"src":"31753:3:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":6539,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":6534,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6483,"src":"31801:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6533,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"31794:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":6535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31794:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":6536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31809:11:28","memberName":"borrowIndex","nodeType":"MemberAccess","referencedDeclaration":15560,"src":"31794:26:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":6537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31794:28:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6532,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"31778:3:28","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":6538,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["31784:8:28"],"names":["mantissa"],"nodeType":"FunctionCall","src":"31778:47:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"VariableDeclarationStatement","src":"31753:72:28"},{"assignments":[6542],"declarations":[{"constant":false,"id":6542,"mutability":"mutable","name":"rewardsDistributor","nameLocation":"31858:18:28","nodeType":"VariableDeclaration","scope":6562,"src":"31839:37:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"},"typeName":{"id":6541,"nodeType":"UserDefinedTypeName","pathNode":{"id":6540,"name":"RewardsDistributor","nameLocations":["31839:18:28"],"nodeType":"IdentifierPath","referencedDeclaration":12324,"src":"31839:18:28"},"referencedDeclaration":12324,"src":"31839:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"visibility":"internal"}],"id":6546,"initialValue":{"baseExpression":{"id":6543,"name":"rewardsDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9537,"src":"31879:19:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage","typeString":"contract RewardsDistributor[] storage ref"}},"id":6545,"indexExpression":{"id":6544,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6521,"src":"31899:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31879:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"nodeType":"VariableDeclarationStatement","src":"31839:62:28"},{"expression":{"arguments":[{"id":6550,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6483,"src":"31963:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6551,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6531,"src":"31971:11:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"expression":{"id":6547,"name":"rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6542,"src":"31915:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":6549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31934:28:28","memberName":"updateRewardTokenBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":10735,"src":"31915:47:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_Exp_$9645_memory_ptr_$returns$__$","typeString":"function (address,struct ExponentialNoError.Exp memory) external"}},"id":6552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31915:68:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6553,"nodeType":"ExpressionStatement","src":"31915:68:28"},{"expression":{"arguments":[{"id":6557,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6483,"src":"32046:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6558,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6485,"src":"32054:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6559,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6531,"src":"32064:11:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"expression":{"id":6554,"name":"rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6542,"src":"31997:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":6556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32016:29:28","memberName":"distributeBorrowerRewardToken","nodeType":"MemberAccess","referencedDeclaration":10677,"src":"31997:48:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_struct$_Exp_$9645_memory_ptr_$returns$__$","typeString":"function (address,address,struct ExponentialNoError.Exp memory) external"}},"id":6560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31997:79:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6561,"nodeType":"ExpressionStatement","src":"31997:79:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6523,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6521,"src":"31705:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6524,"name":"rewardDistributorsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6516,"src":"31709:23:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31705:27:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6563,"initializationExpression":{"assignments":[6521],"declarations":[{"constant":false,"id":6521,"mutability":"mutable","name":"i","nameLocation":"31702:1:28","nodeType":"VariableDeclaration","scope":6563,"src":"31694:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6520,"name":"uint256","nodeType":"ElementaryTypeName","src":"31694:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6522,"nodeType":"VariableDeclarationStatement","src":"31694:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":6527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"31734:3:28","subExpression":{"id":6526,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6521,"src":"31736:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6528,"nodeType":"ExpressionStatement","src":"31734:3:28"},"nodeType":"ForStatement","src":"31689:398:28"}]},"documentation":{"id":6481,"nodeType":"StructuredDocumentation","src":"30856:440:28","text":" @notice Checks if the account should be allowed to repay a borrow in the given market\n @param vToken The market to verify the repay against\n @param borrower The account which would borrowed the asset\n @custom:error ActionPaused error is thrown if repayments are paused in this market\n @custom:error MarketNotListed error is thrown when the market is not listed\n @custom:access Not restricted"},"functionSelector":"eade3eed","id":6565,"implemented":true,"kind":"function","modifiers":[],"name":"preRepayHook","nameLocation":"31310:12:28","nodeType":"FunctionDefinition","overrides":{"id":6487,"nodeType":"OverrideSpecifier","overrides":[],"src":"31366:8:28"},"parameters":{"id":6486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6483,"mutability":"mutable","name":"vToken","nameLocation":"31331:6:28","nodeType":"VariableDeclaration","scope":6565,"src":"31323:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6482,"name":"address","nodeType":"ElementaryTypeName","src":"31323:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6485,"mutability":"mutable","name":"borrower","nameLocation":"31347:8:28","nodeType":"VariableDeclaration","scope":6565,"src":"31339:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6484,"name":"address","nodeType":"ElementaryTypeName","src":"31339:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"31322:34:28"},"returnParameters":{"id":6488,"nodeType":"ParameterList","parameters":[],"src":"31375:0:28"},"scope":9130,"src":"31301:792:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[9212],"body":{"id":6689,"nodeType":"Block","src":"33526:1803:28","statements":[{"expression":{"arguments":[{"id":6581,"name":"vTokenBorrowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6568,"src":"33748:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":6582,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"33764:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":6583,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"33771:9:28","memberName":"LIQUIDATE","nodeType":"MemberAccess","referencedDeclaration":9144,"src":"33764:16:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"id":6580,"name":"_checkActionPauseState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9129,"src":"33725:22:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Action_$9148_$returns$__$","typeString":"function (address,enum Action) view"}},"id":6584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33725:56:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6585,"nodeType":"ExpressionStatement","src":"33725:56:28"},{"expression":{"arguments":[{"id":6587,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6572,"src":"33844:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6586,"name":"updatePrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8405,"src":"33831:12:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":6588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33831:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6589,"nodeType":"ExpressionStatement","src":"33831:22:28"},{"condition":{"id":6594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"33868:33:28","subExpression":{"expression":{"baseExpression":{"id":6590,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"33869:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":6592,"indexExpression":{"id":6591,"name":"vTokenBorrowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6568,"src":"33877:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"33869:23:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"id":6593,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33893:8:28","memberName":"isListed","nodeType":"MemberAccess","referencedDeclaration":9475,"src":"33869:32:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6603,"nodeType":"IfStatement","src":"33864:111:28","trueBody":{"id":6602,"nodeType":"Block","src":"33903:72:28","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":6598,"name":"vTokenBorrowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6568,"src":"33948:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6597,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33940:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6596,"name":"address","nodeType":"ElementaryTypeName","src":"33940:7:28","typeDescriptions":{}}},"id":6599,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33940:23:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6595,"name":"MarketNotListed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5287,"src":"33924:15:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":6600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33924:40:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6601,"nodeType":"RevertStatement","src":"33917:47:28"}]}},{"condition":{"id":6608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"33988:35:28","subExpression":{"expression":{"baseExpression":{"id":6604,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"33989:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":6606,"indexExpression":{"id":6605,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6570,"src":"33997:16:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"33989:25:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"id":6607,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34015:8:28","memberName":"isListed","nodeType":"MemberAccess","referencedDeclaration":9475,"src":"33989:34:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6617,"nodeType":"IfStatement","src":"33984:115:28","trueBody":{"id":6616,"nodeType":"Block","src":"34025:74:28","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":6612,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6570,"src":"34070:16:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6611,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34062:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6610,"name":"address","nodeType":"ElementaryTypeName","src":"34062:7:28","typeDescriptions":{}}},"id":6613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34062:25:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6609,"name":"MarketNotListed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5287,"src":"34046:15:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":6614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34046:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6615,"nodeType":"RevertStatement","src":"34039:49:28"}]}},{"assignments":[6619],"declarations":[{"constant":false,"id":6619,"mutability":"mutable","name":"borrowBalance","nameLocation":"34117:13:28","nodeType":"VariableDeclaration","scope":6689,"src":"34109:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6618,"name":"uint256","nodeType":"ElementaryTypeName","src":"34109:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6626,"initialValue":{"arguments":[{"id":6624,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6572,"src":"34176:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":6621,"name":"vTokenBorrowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6568,"src":"34140:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6620,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"34133:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":6622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34133:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":6623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34156:19:28","memberName":"borrowBalanceStored","nodeType":"MemberAccess","referencedDeclaration":13728,"src":"34133:42:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":6625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34133:52:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"34109:76:28"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6627,"name":"skipLiquidityCheck","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6576,"src":"34276:18:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"baseExpression":{"id":6628,"name":"isForcedLiquidationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9546,"src":"34298:26:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":6630,"indexExpression":{"id":6629,"name":"vTokenBorrowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6568,"src":"34325:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34298:42:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"34276:64:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6642,"nodeType":"IfStatement","src":"34272:201:28","trueBody":{"id":6641,"nodeType":"Block","src":"34342:131:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6632,"name":"repayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6574,"src":"34360:11:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":6633,"name":"borrowBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6619,"src":"34374:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34360:27:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6639,"nodeType":"IfStatement","src":"34356:87:28","trueBody":{"id":6638,"nodeType":"Block","src":"34389:54:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6635,"name":"TooMuchRepay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5361,"src":"34414:12:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":6636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34414:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6637,"nodeType":"RevertStatement","src":"34407:21:28"}]}},{"functionReturnParameters":6579,"id":6640,"nodeType":"Return","src":"34456:7:28"}]}},{"assignments":[6645],"declarations":[{"constant":false,"id":6645,"mutability":"mutable","name":"snapshot","nameLocation":"34617:8:28","nodeType":"VariableDeclaration","scope":6689,"src":"34585:40:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot"},"typeName":{"id":6644,"nodeType":"UserDefinedTypeName","pathNode":{"id":6643,"name":"AccountLiquiditySnapshot","nameLocations":["34585:24:28"],"nodeType":"IdentifierPath","referencedDeclaration":9466,"src":"34585:24:28"},"referencedDeclaration":9466,"src":"34585:24:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_storage_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot"}},"visibility":"internal"}],"id":6650,"initialValue":{"arguments":[{"id":6647,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6572,"src":"34657:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6648,"name":"_getLiquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9041,"src":"34667:24:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp memory)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp memory)"}],"id":6646,"name":"_getCurrentLiquiditySnapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8758,"src":"34628:28:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$_$returns$_t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr_$","typeString":"function (address,function (contract VToken) view returns (struct ExponentialNoError.Exp memory)) view returns (struct ComptrollerStorage.AccountLiquiditySnapshot memory)"}},"id":6649,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34628:64:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"nodeType":"VariableDeclarationStatement","src":"34585:107:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6651,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6645,"src":"34707:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":6652,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34716:15:28","memberName":"totalCollateral","nodeType":"MemberAccess","referencedDeclaration":9455,"src":"34707:24:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":6653,"name":"minLiquidatableCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9520,"src":"34735:25:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34707:53:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6662,"nodeType":"IfStatement","src":"34703:252:28","trueBody":{"id":6661,"nodeType":"Block","src":"34762:193:28","statements":[{"errorCall":{"arguments":[{"id":6656,"name":"minLiquidatableCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9520,"src":"34892:25:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6657,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6645,"src":"34919:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":6658,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34928:15:28","memberName":"totalCollateral","nodeType":"MemberAccess","referencedDeclaration":9455,"src":"34919:24:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6655,"name":"MinimalCollateralViolated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5340,"src":"34866:25:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":6659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34866:78:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6660,"nodeType":"RevertStatement","src":"34859:85:28"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6663,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6645,"src":"34969:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":6664,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34978:9:28","memberName":"shortfall","nodeType":"MemberAccess","referencedDeclaration":9465,"src":"34969:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6665,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34991:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"34969:23:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6671,"nodeType":"IfStatement","src":"34965:84:28","trueBody":{"id":6670,"nodeType":"Block","src":"34994:55:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6667,"name":"InsufficientShortfall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5358,"src":"35015:21:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":6668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35015:23:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6669,"nodeType":"RevertStatement","src":"35008:30:28"}]}},{"assignments":[6673],"declarations":[{"constant":false,"id":6673,"mutability":"mutable","name":"maxClose","nameLocation":"35155:8:28","nodeType":"VariableDeclaration","scope":6689,"src":"35147:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6672,"name":"uint256","nodeType":"ElementaryTypeName","src":"35147:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6680,"initialValue":{"arguments":[{"arguments":[{"id":6676,"name":"closeFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9491,"src":"35201:19:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6675,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"35185:3:28","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":6677,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["35191:8:28"],"names":["mantissa"],"nodeType":"FunctionCall","src":"35185:38:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":6678,"name":"borrowBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6619,"src":"35225:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6674,"name":"mul_ScalarTruncate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9701,"src":"35166:18:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct ExponentialNoError.Exp memory,uint256) pure returns (uint256)"}},"id":6679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35166:73:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"35147:92:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6681,"name":"repayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6574,"src":"35253:11:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":6682,"name":"maxClose","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6673,"src":"35267:8:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35253:22:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6688,"nodeType":"IfStatement","src":"35249:74:28","trueBody":{"id":6687,"nodeType":"Block","src":"35277:46:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6684,"name":"TooMuchRepay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5361,"src":"35298:12:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":6685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35298:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6686,"nodeType":"RevertStatement","src":"35291:21:28"}]}}]},"documentation":{"id":6566,"nodeType":"StructuredDocumentation","src":"32099:1218:28","text":" @notice Checks if the liquidation should be allowed to occur\n @param vTokenBorrowed Asset which was borrowed by the borrower\n @param vTokenCollateral Asset which was used as collateral and will be seized\n @param borrower The address of the borrower\n @param repayAmount The amount of underlying being repaid\n @param skipLiquidityCheck Allows the borrow to be liquidated regardless of the account liquidity\n @custom:error ActionPaused error is thrown if liquidations are paused in this market\n @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\n @custom:error TooMuchRepay error is thrown if the liquidator is trying to repay more than allowed by close factor\n @custom:error MinimalCollateralViolated is thrown if the users' total collateral is lower than the threshold for non-batch liquidations\n @custom:error InsufficientShortfall is thrown when trying to liquidate a healthy account\n @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\n @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset"},"functionSelector":"e89d51ad","id":6690,"implemented":true,"kind":"function","modifiers":[],"name":"preLiquidateHook","nameLocation":"33331:16:28","nodeType":"FunctionDefinition","overrides":{"id":6578,"nodeType":"OverrideSpecifier","overrides":[],"src":"33517:8:28"},"parameters":{"id":6577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6568,"mutability":"mutable","name":"vTokenBorrowed","nameLocation":"33365:14:28","nodeType":"VariableDeclaration","scope":6690,"src":"33357:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6567,"name":"address","nodeType":"ElementaryTypeName","src":"33357:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6570,"mutability":"mutable","name":"vTokenCollateral","nameLocation":"33397:16:28","nodeType":"VariableDeclaration","scope":6690,"src":"33389:24:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6569,"name":"address","nodeType":"ElementaryTypeName","src":"33389:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6572,"mutability":"mutable","name":"borrower","nameLocation":"33431:8:28","nodeType":"VariableDeclaration","scope":6690,"src":"33423:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6571,"name":"address","nodeType":"ElementaryTypeName","src":"33423:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6574,"mutability":"mutable","name":"repayAmount","nameLocation":"33457:11:28","nodeType":"VariableDeclaration","scope":6690,"src":"33449:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6573,"name":"uint256","nodeType":"ElementaryTypeName","src":"33449:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6576,"mutability":"mutable","name":"skipLiquidityCheck","nameLocation":"33483:18:28","nodeType":"VariableDeclaration","scope":6690,"src":"33478:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6575,"name":"bool","nodeType":"ElementaryTypeName","src":"33478:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"33347:160:28"},"returnParameters":{"id":6579,"nodeType":"ParameterList","parameters":[],"src":"33526:0:28"},"scope":9130,"src":"33322:2007:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[9223],"body":{"id":6834,"nodeType":"Block","src":"36270:1831:28","statements":[{"expression":{"arguments":[{"id":6704,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6693,"src":"36479:16:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":6705,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"36497:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":6706,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"36504:5:28","memberName":"SEIZE","nodeType":"MemberAccess","referencedDeclaration":9143,"src":"36497:12:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"id":6703,"name":"_checkActionPauseState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9129,"src":"36456:22:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Action_$9148_$returns$__$","typeString":"function (address,enum Action) view"}},"id":6707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36456:54:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6708,"nodeType":"ExpressionStatement","src":"36456:54:28"},{"assignments":[6711],"declarations":[{"constant":false,"id":6711,"mutability":"mutable","name":"market","nameLocation":"36536:6:28","nodeType":"VariableDeclaration","scope":6834,"src":"36521:21:28","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market"},"typeName":{"id":6710,"nodeType":"UserDefinedTypeName","pathNode":{"id":6709,"name":"Market","nameLocations":["36521:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":9484,"src":"36521:6:28"},"referencedDeclaration":9484,"src":"36521:6:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market"}},"visibility":"internal"}],"id":6715,"initialValue":{"baseExpression":{"id":6712,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"36545:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":6714,"indexExpression":{"id":6713,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6693,"src":"36553:16:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"36545:25:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"nodeType":"VariableDeclarationStatement","src":"36521:49:28"},{"condition":{"id":6718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"36585:16:28","subExpression":{"expression":{"id":6716,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6711,"src":"36586:6:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":6717,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36593:8:28","memberName":"isListed","nodeType":"MemberAccess","referencedDeclaration":9475,"src":"36586:15:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6724,"nodeType":"IfStatement","src":"36581:87:28","trueBody":{"id":6723,"nodeType":"Block","src":"36603:65:28","statements":[{"errorCall":{"arguments":[{"id":6720,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6693,"src":"36640:16:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6719,"name":"MarketNotListed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5287,"src":"36624:15:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":6721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36624:33:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6722,"nodeType":"RevertStatement","src":"36617:40:28"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6725,"name":"seizerContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6695,"src":"36682:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":6728,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"36708:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_Comptroller_$9130","typeString":"contract Comptroller"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Comptroller_$9130","typeString":"contract Comptroller"}],"id":6727,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"36700:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6726,"name":"address","nodeType":"ElementaryTypeName","src":"36700:7:28","typeDescriptions":{}}},"id":6729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36700:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"36682:31:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6777,"nodeType":"Block","src":"37007:443:28","statements":[{"condition":{"id":6754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"37176:33:28","subExpression":{"expression":{"baseExpression":{"id":6750,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"37177:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":6752,"indexExpression":{"id":6751,"name":"seizerContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6695,"src":"37185:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"37177:23:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"id":6753,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37201:8:28","memberName":"isListed","nodeType":"MemberAccess","referencedDeclaration":9475,"src":"37177:32:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6760,"nodeType":"IfStatement","src":"37172:110:28","trueBody":{"id":6759,"nodeType":"Block","src":"37211:71:28","statements":[{"errorCall":{"arguments":[{"id":6756,"name":"seizerContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6695,"src":"37252:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6755,"name":"MarketNotListed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5287,"src":"37236:15:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":6757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37236:31:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6758,"nodeType":"RevertStatement","src":"37229:38:28"}]}},{"condition":{"commonType":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"},"id":6771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":6762,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6693,"src":"37306:16:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6761,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"37299:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":6763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37299:24:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":6764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37324:11:28","memberName":"comptroller","nodeType":"MemberAccess","referencedDeclaration":15545,"src":"37299:36:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_ComptrollerInterface_$9353_$","typeString":"function () view external returns (contract ComptrollerInterface)"}},"id":6765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37299:38:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":6767,"name":"seizerContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6695,"src":"37348:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6766,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"37341:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":6768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37341:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":6769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37364:11:28","memberName":"comptroller","nodeType":"MemberAccess","referencedDeclaration":15545,"src":"37341:34:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_ComptrollerInterface_$9353_$","typeString":"function () view external returns (contract ComptrollerInterface)"}},"id":6770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37341:36:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"src":"37299:78:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6776,"nodeType":"IfStatement","src":"37295:145:28","trueBody":{"id":6775,"nodeType":"Block","src":"37379:61:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6772,"name":"ComptrollerMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5290,"src":"37404:19:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":6773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37404:21:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6774,"nodeType":"RevertStatement","src":"37397:28:28"}]}}]},"id":6778,"nodeType":"IfStatement","src":"36678:772:28","trueBody":{"id":6749,"nodeType":"Block","src":"36715:286:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":6734,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6693,"src":"36879:16:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6733,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"36872:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":6735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36872:24:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":6736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"36897:11:28","memberName":"comptroller","nodeType":"MemberAccess","referencedDeclaration":15545,"src":"36872:36:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_ComptrollerInterface_$9353_$","typeString":"function () view external returns (contract ComptrollerInterface)"}},"id":6737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36872:38:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}],"id":6732,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"36864:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6731,"name":"address","nodeType":"ElementaryTypeName","src":"36864:7:28","typeDescriptions":{}}},"id":6738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36864:47:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":6741,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"36923:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_Comptroller_$9130","typeString":"contract Comptroller"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Comptroller_$9130","typeString":"contract Comptroller"}],"id":6740,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"36915:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6739,"name":"address","nodeType":"ElementaryTypeName","src":"36915:7:28","typeDescriptions":{}}},"id":6742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36915:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"36864:64:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6748,"nodeType":"IfStatement","src":"36860:131:28","trueBody":{"id":6747,"nodeType":"Block","src":"36930:61:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6744,"name":"ComptrollerMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5290,"src":"36955:19:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":6745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36955:21:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6746,"nodeType":"RevertStatement","src":"36948:28:28"}]}}]}},{"condition":{"id":6783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"37464:35:28","subExpression":{"baseExpression":{"expression":{"id":6779,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6711,"src":"37465:6:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":6780,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37472:17:28","memberName":"accountMembership","nodeType":"MemberAccess","referencedDeclaration":9483,"src":"37465:24:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":6782,"indexExpression":{"id":6781,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6699,"src":"37490:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"37465:34:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6790,"nodeType":"IfStatement","src":"37460:120:28","trueBody":{"id":6789,"nodeType":"Block","src":"37501:79:28","statements":[{"errorCall":{"arguments":[{"id":6785,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6693,"src":"37542:16:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6786,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6699,"src":"37560:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6784,"name":"MarketNotCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5297,"src":"37522:19:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) pure"}},"id":6787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37522:47:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6788,"nodeType":"RevertStatement","src":"37515:54:28"}]}},{"assignments":[6792],"declarations":[{"constant":false,"id":6792,"mutability":"mutable","name":"rewardDistributorsCount","nameLocation":"37634:23:28","nodeType":"VariableDeclaration","scope":6834,"src":"37626:31:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6791,"name":"uint256","nodeType":"ElementaryTypeName","src":"37626:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6795,"initialValue":{"expression":{"id":6793,"name":"rewardsDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9537,"src":"37660:19:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage","typeString":"contract RewardsDistributor[] storage ref"}},"id":6794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37680:6:28","memberName":"length","nodeType":"MemberAccess","src":"37660:26:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"37626:60:28"},{"body":{"id":6832,"nodeType":"Block","src":"37747:348:28","statements":[{"assignments":[6807],"declarations":[{"constant":false,"id":6807,"mutability":"mutable","name":"rewardsDistributor","nameLocation":"37780:18:28","nodeType":"VariableDeclaration","scope":6832,"src":"37761:37:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"},"typeName":{"id":6806,"nodeType":"UserDefinedTypeName","pathNode":{"id":6805,"name":"RewardsDistributor","nameLocations":["37761:18:28"],"nodeType":"IdentifierPath","referencedDeclaration":12324,"src":"37761:18:28"},"referencedDeclaration":12324,"src":"37761:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"visibility":"internal"}],"id":6811,"initialValue":{"baseExpression":{"id":6808,"name":"rewardsDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9537,"src":"37801:19:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage","typeString":"contract RewardsDistributor[] storage ref"}},"id":6810,"indexExpression":{"id":6809,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6797,"src":"37821:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"37801:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"nodeType":"VariableDeclarationStatement","src":"37761:62:28"},{"expression":{"arguments":[{"id":6815,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6693,"src":"37885:16:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6812,"name":"rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6807,"src":"37837:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":6814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37856:28:28","memberName":"updateRewardTokenSupplyIndex","nodeType":"MemberAccess","referencedDeclaration":10689,"src":"37837:47:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":6816,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37837:65:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6817,"nodeType":"ExpressionStatement","src":"37837:65:28"},{"expression":{"arguments":[{"id":6821,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6693,"src":"37965:16:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6822,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6699,"src":"37983:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6818,"name":"rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6807,"src":"37916:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":6820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37935:29:28","memberName":"distributeSupplierRewardToken","nodeType":"MemberAccess","referencedDeclaration":10987,"src":"37916:48:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":6823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37916:76:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6824,"nodeType":"ExpressionStatement","src":"37916:76:28"},{"expression":{"arguments":[{"id":6828,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6693,"src":"38055:16:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6829,"name":"liquidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6697,"src":"38073:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6825,"name":"rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6807,"src":"38006:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":6827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38025:29:28","memberName":"distributeSupplierRewardToken","nodeType":"MemberAccess","referencedDeclaration":10987,"src":"38006:48:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":6830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38006:78:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6831,"nodeType":"ExpressionStatement","src":"38006:78:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6799,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6797,"src":"37713:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6800,"name":"rewardDistributorsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6792,"src":"37717:23:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37713:27:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6833,"initializationExpression":{"assignments":[6797],"declarations":[{"constant":false,"id":6797,"mutability":"mutable","name":"i","nameLocation":"37710:1:28","nodeType":"VariableDeclaration","scope":6833,"src":"37702:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6796,"name":"uint256","nodeType":"ElementaryTypeName","src":"37702:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6798,"nodeType":"VariableDeclarationStatement","src":"37702:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":6803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"37742:3:28","subExpression":{"id":6802,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6797,"src":"37744:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6804,"nodeType":"ExpressionStatement","src":"37742:3:28"},"nodeType":"ForStatement","src":"37697:398:28"}]},"documentation":{"id":6691,"nodeType":"StructuredDocumentation","src":"35335:764:28","text":" @notice Checks if the seizing of assets should be allowed to occur\n @param vTokenCollateral Asset which was used as collateral and will be seized\n @param seizerContract Contract that tries to seize the asset (either borrowed vToken or Comptroller)\n @param liquidator The address repaying the borrow and seizing the collateral\n @param borrower The address of the borrower\n @custom:error ActionPaused error is thrown if seizing this type of collateral is paused\n @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\n @custom:error ComptrollerMismatch error is when seizer contract or seized asset belong to different pools\n @custom:access Not restricted"},"functionSelector":"1bc41f28","id":6835,"implemented":true,"kind":"function","modifiers":[],"name":"preSeizeHook","nameLocation":"36113:12:28","nodeType":"FunctionDefinition","overrides":{"id":6701,"nodeType":"OverrideSpecifier","overrides":[],"src":"36261:8:28"},"parameters":{"id":6700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6693,"mutability":"mutable","name":"vTokenCollateral","nameLocation":"36143:16:28","nodeType":"VariableDeclaration","scope":6835,"src":"36135:24:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6692,"name":"address","nodeType":"ElementaryTypeName","src":"36135:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6695,"mutability":"mutable","name":"seizerContract","nameLocation":"36177:14:28","nodeType":"VariableDeclaration","scope":6835,"src":"36169:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6694,"name":"address","nodeType":"ElementaryTypeName","src":"36169:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6697,"mutability":"mutable","name":"liquidator","nameLocation":"36209:10:28","nodeType":"VariableDeclaration","scope":6835,"src":"36201:18:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6696,"name":"address","nodeType":"ElementaryTypeName","src":"36201:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6699,"mutability":"mutable","name":"borrower","nameLocation":"36237:8:28","nodeType":"VariableDeclaration","scope":6835,"src":"36229:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6698,"name":"address","nodeType":"ElementaryTypeName","src":"36229:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"36125:126:28"},"returnParameters":{"id":6702,"nodeType":"ParameterList","parameters":[],"src":"36270:0:28"},"scope":9130,"src":"36104:1997:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[9317],"body":{"id":6903,"nodeType":"Block","src":"39090:716:28","statements":[{"expression":{"arguments":[{"id":6849,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6838,"src":"39123:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":6850,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"39131:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":6851,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"39138:8:28","memberName":"TRANSFER","nodeType":"MemberAccess","referencedDeclaration":9145,"src":"39131:15:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"id":6848,"name":"_checkActionPauseState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9129,"src":"39100:22:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Action_$9148_$returns$__$","typeString":"function (address,enum Action) view"}},"id":6852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39100:47:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6853,"nodeType":"ExpressionStatement","src":"39100:47:28"},{"expression":{"arguments":[{"id":6855,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6838,"src":"39298:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6856,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6840,"src":"39306:3:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6857,"name":"transferTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6844,"src":"39311:14:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6854,"name":"_checkRedeemAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8725,"src":"39278:19:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":6858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39278:48:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6859,"nodeType":"ExpressionStatement","src":"39278:48:28"},{"assignments":[6861],"declarations":[{"constant":false,"id":6861,"mutability":"mutable","name":"rewardDistributorsCount","nameLocation":"39381:23:28","nodeType":"VariableDeclaration","scope":6903,"src":"39373:31:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6860,"name":"uint256","nodeType":"ElementaryTypeName","src":"39373:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6864,"initialValue":{"expression":{"id":6862,"name":"rewardsDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9537,"src":"39407:19:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage","typeString":"contract RewardsDistributor[] storage ref"}},"id":6863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39427:6:28","memberName":"length","nodeType":"MemberAccess","src":"39407:26:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"39373:60:28"},{"body":{"id":6901,"nodeType":"Block","src":"39494:306:28","statements":[{"assignments":[6876],"declarations":[{"constant":false,"id":6876,"mutability":"mutable","name":"rewardsDistributor","nameLocation":"39527:18:28","nodeType":"VariableDeclaration","scope":6901,"src":"39508:37:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"},"typeName":{"id":6875,"nodeType":"UserDefinedTypeName","pathNode":{"id":6874,"name":"RewardsDistributor","nameLocations":["39508:18:28"],"nodeType":"IdentifierPath","referencedDeclaration":12324,"src":"39508:18:28"},"referencedDeclaration":12324,"src":"39508:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"visibility":"internal"}],"id":6880,"initialValue":{"baseExpression":{"id":6877,"name":"rewardsDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9537,"src":"39548:19:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage","typeString":"contract RewardsDistributor[] storage ref"}},"id":6879,"indexExpression":{"id":6878,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6866,"src":"39568:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"39548:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"nodeType":"VariableDeclarationStatement","src":"39508:62:28"},{"expression":{"arguments":[{"id":6884,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6838,"src":"39632:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6881,"name":"rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6876,"src":"39584:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":6883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39603:28:28","memberName":"updateRewardTokenSupplyIndex","nodeType":"MemberAccess","referencedDeclaration":10689,"src":"39584:47:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":6885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39584:55:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6886,"nodeType":"ExpressionStatement","src":"39584:55:28"},{"expression":{"arguments":[{"id":6890,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6838,"src":"39702:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6891,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6840,"src":"39710:3:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6887,"name":"rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6876,"src":"39653:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":6889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39672:29:28","memberName":"distributeSupplierRewardToken","nodeType":"MemberAccess","referencedDeclaration":10987,"src":"39653:48:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":6892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39653:61:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6893,"nodeType":"ExpressionStatement","src":"39653:61:28"},{"expression":{"arguments":[{"id":6897,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6838,"src":"39777:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6898,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6842,"src":"39785:3:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6894,"name":"rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6876,"src":"39728:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":6896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39747:29:28","memberName":"distributeSupplierRewardToken","nodeType":"MemberAccess","referencedDeclaration":10987,"src":"39728:48:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":6899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39728:61:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6900,"nodeType":"ExpressionStatement","src":"39728:61:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6868,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6866,"src":"39460:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6869,"name":"rewardDistributorsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6861,"src":"39464:23:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"39460:27:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6902,"initializationExpression":{"assignments":[6866],"declarations":[{"constant":false,"id":6866,"mutability":"mutable","name":"i","nameLocation":"39457:1:28","nodeType":"VariableDeclaration","scope":6902,"src":"39449:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6865,"name":"uint256","nodeType":"ElementaryTypeName","src":"39449:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6867,"nodeType":"VariableDeclarationStatement","src":"39449:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":6872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"39489:3:28","subExpression":{"id":6871,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6866,"src":"39491:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6873,"nodeType":"ExpressionStatement","src":"39489:3:28"},"nodeType":"ForStatement","src":"39444:356:28"}]},"documentation":{"id":6836,"nodeType":"StructuredDocumentation","src":"38107:869:28","text":" @notice Checks if the account should be allowed to transfer tokens in the given market\n @param vToken The market to verify the transfer against\n @param src The account which sources the tokens\n @param dst The account which receives the tokens\n @param transferTokens The number of vTokens to transfer\n @custom:error ActionPaused error is thrown if withdrawals are paused in this market\n @custom:error MarketNotListed error is thrown when the market is not listed\n @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\n @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\n @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\n @custom:access Not restricted"},"functionSelector":"6d0be88d","id":6904,"implemented":true,"kind":"function","modifiers":[],"name":"preTransferHook","nameLocation":"38990:15:28","nodeType":"FunctionDefinition","overrides":{"id":6846,"nodeType":"OverrideSpecifier","overrides":[],"src":"39081:8:28"},"parameters":{"id":6845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6838,"mutability":"mutable","name":"vToken","nameLocation":"39014:6:28","nodeType":"VariableDeclaration","scope":6904,"src":"39006:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6837,"name":"address","nodeType":"ElementaryTypeName","src":"39006:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6840,"mutability":"mutable","name":"src","nameLocation":"39030:3:28","nodeType":"VariableDeclaration","scope":6904,"src":"39022:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6839,"name":"address","nodeType":"ElementaryTypeName","src":"39022:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6842,"mutability":"mutable","name":"dst","nameLocation":"39043:3:28","nodeType":"VariableDeclaration","scope":6904,"src":"39035:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6841,"name":"address","nodeType":"ElementaryTypeName","src":"39035:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6844,"mutability":"mutable","name":"transferTokens","nameLocation":"39056:14:28","nodeType":"VariableDeclaration","scope":6904,"src":"39048:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6843,"name":"uint256","nodeType":"ElementaryTypeName","src":"39048:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"39005:66:28"},"returnParameters":{"id":6847,"nodeType":"ParameterList","parameters":[],"src":"39090:0:28"},"scope":9130,"src":"38981:825:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7096,"nodeType":"Block","src":"40599:2066:28","statements":[{"assignments":[6914],"declarations":[{"constant":false,"id":6914,"mutability":"mutable","name":"userAssets","nameLocation":"40625:10:28","nodeType":"VariableDeclaration","scope":7096,"src":"40609:26:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":6912,"nodeType":"UserDefinedTypeName","pathNode":{"id":6911,"name":"VToken","nameLocations":["40609:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"40609:6:28"},"referencedDeclaration":15506,"src":"40609:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":6913,"nodeType":"ArrayTypeName","src":"40609:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"}],"id":6918,"initialValue":{"arguments":[{"id":6916,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6907,"src":"40650:4:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6915,"name":"getAssetsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8504,"src":"40638:11:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_$","typeString":"function (address) view returns (contract VToken[] memory)"}},"id":6917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40638:17:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"nodeType":"VariableDeclarationStatement","src":"40609:46:28"},{"assignments":[6920],"declarations":[{"constant":false,"id":6920,"mutability":"mutable","name":"userAssetsCount","nameLocation":"40673:15:28","nodeType":"VariableDeclaration","scope":7096,"src":"40665:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6919,"name":"uint256","nodeType":"ElementaryTypeName","src":"40665:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6923,"initialValue":{"expression":{"id":6921,"name":"userAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6914,"src":"40691:10:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":6922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"40702:6:28","memberName":"length","nodeType":"MemberAccess","src":"40691:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"40665:43:28"},{"assignments":[6925],"declarations":[{"constant":false,"id":6925,"mutability":"mutable","name":"liquidator","nameLocation":"40727:10:28","nodeType":"VariableDeclaration","scope":7096,"src":"40719:18:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6924,"name":"address","nodeType":"ElementaryTypeName","src":"40719:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":6928,"initialValue":{"expression":{"id":6926,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"40740:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"40744:6:28","memberName":"sender","nodeType":"MemberAccess","src":"40740:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"40719:31:28"},{"id":6962,"nodeType":"Block","src":"40760:334:28","statements":[{"assignments":[6931],"declarations":[{"constant":false,"id":6931,"mutability":"mutable","name":"oracle_","nameLocation":"40799:7:28","nodeType":"VariableDeclaration","scope":6962,"src":"40774:32:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"},"typeName":{"id":6930,"nodeType":"UserDefinedTypeName","pathNode":{"id":6929,"name":"ResilientOracleInterface","nameLocations":["40774:24:28"],"nodeType":"IdentifierPath","referencedDeclaration":16173,"src":"40774:24:28"},"referencedDeclaration":16173,"src":"40774:24:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"visibility":"internal"}],"id":6933,"initialValue":{"id":6932,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9488,"src":"40809:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"nodeType":"VariableDeclarationStatement","src":"40774:41:28"},{"body":{"id":6960,"nodeType":"Block","src":"40960:124:28","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":6943,"name":"userAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6914,"src":"40978:10:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":6945,"indexExpression":{"id":6944,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6935,"src":"40989:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"40978:13:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":6946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"40992:14:28","memberName":"accrueInterest","nodeType":"MemberAccess","referencedDeclaration":13910,"src":"40978:28:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$_t_uint256_$","typeString":"function () external returns (uint256)"}},"id":6947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40978:30:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6948,"nodeType":"ExpressionStatement","src":"40978:30:28"},{"expression":{"arguments":[{"arguments":[{"baseExpression":{"id":6954,"name":"userAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6914,"src":"41054:10:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":6956,"indexExpression":{"id":6955,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6935,"src":"41065:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"41054:13:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":6953,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"41046:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6952,"name":"address","nodeType":"ElementaryTypeName","src":"41046:7:28","typeDescriptions":{}}},"id":6957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41046:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6949,"name":"oracle_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6931,"src":"41026:7:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"id":6951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"41034:11:28","memberName":"updatePrice","nodeType":"MemberAccess","referencedDeclaration":16160,"src":"41026:19:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":6958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41026:43:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6959,"nodeType":"ExpressionStatement","src":"41026:43:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6937,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6935,"src":"40934:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6938,"name":"userAssetsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6920,"src":"40938:15:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"40934:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6961,"initializationExpression":{"assignments":[6935],"declarations":[{"constant":false,"id":6935,"mutability":"mutable","name":"i","nameLocation":"40931:1:28","nodeType":"VariableDeclaration","scope":6961,"src":"40923:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6934,"name":"uint256","nodeType":"ElementaryTypeName","src":"40923:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6936,"nodeType":"VariableDeclarationStatement","src":"40923:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":6941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"40955:3:28","subExpression":{"id":6940,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6935,"src":"40957:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6942,"nodeType":"ExpressionStatement","src":"40955:3:28"},"nodeType":"ForStatement","src":"40918:166:28"}]},{"assignments":[6965],"declarations":[{"constant":false,"id":6965,"mutability":"mutable","name":"snapshot","nameLocation":"41136:8:28","nodeType":"VariableDeclaration","scope":7096,"src":"41104:40:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot"},"typeName":{"id":6964,"nodeType":"UserDefinedTypeName","pathNode":{"id":6963,"name":"AccountLiquiditySnapshot","nameLocations":["41104:24:28"],"nodeType":"IdentifierPath","referencedDeclaration":9466,"src":"41104:24:28"},"referencedDeclaration":9466,"src":"41104:24:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_storage_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot"}},"visibility":"internal"}],"id":6970,"initialValue":{"arguments":[{"id":6967,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6907,"src":"41176:4:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6968,"name":"_getLiquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9041,"src":"41182:24:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp memory)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp memory)"}],"id":6966,"name":"_getCurrentLiquiditySnapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8758,"src":"41147:28:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$_$returns$_t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr_$","typeString":"function (address,function (contract VToken) view returns (struct ExponentialNoError.Exp memory)) view returns (struct ComptrollerStorage.AccountLiquiditySnapshot memory)"}},"id":6969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41147:60:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"nodeType":"VariableDeclarationStatement","src":"41104:103:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6971,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6965,"src":"41222:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":6972,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"41231:15:28","memberName":"totalCollateral","nodeType":"MemberAccess","referencedDeclaration":9455,"src":"41222:24:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":6973,"name":"minLiquidatableCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9520,"src":"41249:25:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"41222:52:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6982,"nodeType":"IfStatement","src":"41218:169:28","trueBody":{"id":6981,"nodeType":"Block","src":"41276:111:28","statements":[{"errorCall":{"arguments":[{"id":6976,"name":"minLiquidatableCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9520,"src":"41324:25:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6977,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6965,"src":"41351:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":6978,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"41360:15:28","memberName":"totalCollateral","nodeType":"MemberAccess","referencedDeclaration":9455,"src":"41351:24:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6975,"name":"CollateralExceedsThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5346,"src":"41297:26:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":6979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41297:79:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6980,"nodeType":"RevertStatement","src":"41290:86:28"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6983,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6965,"src":"41401:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":6984,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"41410:9:28","memberName":"shortfall","nodeType":"MemberAccess","referencedDeclaration":9465,"src":"41401:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6985,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"41423:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"41401:23:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6991,"nodeType":"IfStatement","src":"41397:84:28","trueBody":{"id":6990,"nodeType":"Block","src":"41426:55:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6987,"name":"InsufficientShortfall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5358,"src":"41447:21:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":6988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41447:23:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6989,"nodeType":"RevertStatement","src":"41440:30:28"}]}},{"assignments":[6994],"declarations":[{"constant":false,"id":6994,"mutability":"mutable","name":"collateral","nameLocation":"41573:10:28","nodeType":"VariableDeclaration","scope":7096,"src":"41562:21:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":6993,"nodeType":"UserDefinedTypeName","pathNode":{"id":6992,"name":"Exp","nameLocations":["41562:3:28"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"41562:3:28"},"referencedDeclaration":9645,"src":"41562:3:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":6999,"initialValue":{"arguments":[{"expression":{"id":6996,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6965,"src":"41602:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":6997,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"41611:15:28","memberName":"totalCollateral","nodeType":"MemberAccess","referencedDeclaration":9455,"src":"41602:24:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6995,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"41586:3:28","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":6998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["41592:8:28"],"names":["mantissa"],"nodeType":"FunctionCall","src":"41586:43:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"VariableDeclarationStatement","src":"41562:67:28"},{"assignments":[7002],"declarations":[{"constant":false,"id":7002,"mutability":"mutable","name":"scaledBorrows","nameLocation":"41650:13:28","nodeType":"VariableDeclaration","scope":7096,"src":"41639:24:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":7001,"nodeType":"UserDefinedTypeName","pathNode":{"id":7000,"name":"Exp","nameLocations":["41639:3:28"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"41639:3:28"},"referencedDeclaration":9645,"src":"41639:3:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":7012,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":7005,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6965,"src":"41700:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":7006,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"41709:7:28","memberName":"borrows","nodeType":"MemberAccess","referencedDeclaration":9459,"src":"41700:16:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7004,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"41684:3:28","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":7007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["41690:8:28"],"names":["mantissa"],"nodeType":"FunctionCall","src":"41684:35:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"arguments":[{"id":7009,"name":"liquidationIncentiveMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9494,"src":"41749:28:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7008,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"41733:3:28","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":7010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["41739:8:28"],"names":["mantissa"],"nodeType":"FunctionCall","src":"41733:47:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":7003,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":9941,"src":"41666:4:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_struct$_Exp_$9645_memory_ptr_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (struct ExponentialNoError.Exp memory,struct ExponentialNoError.Exp memory) pure returns (struct ExponentialNoError.Exp memory)"}},"id":7011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41666:124:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"VariableDeclarationStatement","src":"41639:151:28"},{"assignments":[7015],"declarations":[{"constant":false,"id":7015,"mutability":"mutable","name":"percentage","nameLocation":"41812:10:28","nodeType":"VariableDeclaration","scope":7096,"src":"41801:21:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":7014,"nodeType":"UserDefinedTypeName","pathNode":{"id":7013,"name":"Exp","nameLocations":["41801:3:28"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"41801:3:28"},"referencedDeclaration":9645,"src":"41801:3:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":7020,"initialValue":{"arguments":[{"id":7017,"name":"collateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6994,"src":"41830:10:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":7018,"name":"scaledBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7002,"src":"41842:13:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":7016,"name":"div_","nodeType":"Identifier","overloadedDeclarations":[10082,10102,10122,10147,10167,10187,10201],"referencedDeclaration":10082,"src":"41825:4:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_struct$_Exp_$9645_memory_ptr_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (struct ExponentialNoError.Exp memory,struct ExponentialNoError.Exp memory) pure returns (struct ExponentialNoError.Exp memory)"}},"id":7019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41825:31:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"VariableDeclarationStatement","src":"41801:55:28"},{"condition":{"arguments":[{"arguments":[{"id":7023,"name":"MANTISSA_ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9662,"src":"41898:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7022,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"41882:3:28","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":7024,"isConstant":false,"isLValue":false,"isPure":true,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["41888:8:28"],"names":["mantissa"],"nodeType":"FunctionCall","src":"41882:31:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":7025,"name":"percentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7015,"src":"41915:10:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":7021,"name":"lessThanExp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9749,"src":"41870:11:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_struct$_Exp_$9645_memory_ptr_$returns$_t_bool_$","typeString":"function (struct ExponentialNoError.Exp memory,struct ExponentialNoError.Exp memory) pure returns (bool)"}},"id":7026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41870:56:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7035,"nodeType":"IfStatement","src":"41866:165:28","trueBody":{"id":7034,"nodeType":"Block","src":"41928:103:28","statements":[{"errorCall":{"arguments":[{"expression":{"id":7028,"name":"scaledBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7002,"src":"41976:13:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"id":7029,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"41990:8:28","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9644,"src":"41976:22:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":7030,"name":"collateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6994,"src":"42000:10:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"id":7031,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"42011:8:28","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9644,"src":"42000:19:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7027,"name":"CollateralExceedsThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5346,"src":"41949:26:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":7032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41949:71:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7033,"nodeType":"RevertStatement","src":"41942:78:28"}]}},{"body":{"id":7094,"nodeType":"Block","src":"42083:576:28","statements":[{"assignments":[7047],"declarations":[{"constant":false,"id":7047,"mutability":"mutable","name":"market","nameLocation":"42104:6:28","nodeType":"VariableDeclaration","scope":7094,"src":"42097:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":7046,"nodeType":"UserDefinedTypeName","pathNode":{"id":7045,"name":"VToken","nameLocations":["42097:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"42097:6:28"},"referencedDeclaration":15506,"src":"42097:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"}],"id":7051,"initialValue":{"baseExpression":{"id":7048,"name":"userAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6914,"src":"42113:10:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":7050,"indexExpression":{"id":7049,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7037,"src":"42124:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"42113:13:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"nodeType":"VariableDeclarationStatement","src":"42097:29:28"},{"assignments":[7053,7055,null],"declarations":[{"constant":false,"id":7053,"mutability":"mutable","name":"tokens","nameLocation":"42150:6:28","nodeType":"VariableDeclaration","scope":7094,"src":"42142:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7052,"name":"uint256","nodeType":"ElementaryTypeName","src":"42142:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7055,"mutability":"mutable","name":"borrowBalance","nameLocation":"42166:13:28","nodeType":"VariableDeclaration","scope":7094,"src":"42158:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7054,"name":"uint256","nodeType":"ElementaryTypeName","src":"42158:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":7060,"initialValue":{"arguments":[{"id":7057,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7047,"src":"42209:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"id":7058,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6907,"src":"42217:4:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_address","typeString":"address"}],"id":7056,"name":"_safeGetAccountSnapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9089,"src":"42185:23:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (contract VToken,address) view returns (uint256,uint256,uint256)"}},"id":7059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42185:37:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"42141:81:28"},{"assignments":[7062],"declarations":[{"constant":false,"id":7062,"mutability":"mutable","name":"repaymentAmount","nameLocation":"42244:15:28","nodeType":"VariableDeclaration","scope":7094,"src":"42236:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7061,"name":"uint256","nodeType":"ElementaryTypeName","src":"42236:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7067,"initialValue":{"arguments":[{"id":7064,"name":"percentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7015,"src":"42281:10:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":7065,"name":"borrowBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7055,"src":"42293:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7063,"name":"mul_ScalarTruncate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9701,"src":"42262:18:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct ExponentialNoError.Exp memory,uint256) pure returns (uint256)"}},"id":7066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42262:45:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"42236:71:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7068,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7053,"src":"42369:6:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":7069,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"42379:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"42369:11:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7080,"nodeType":"IfStatement","src":"42365:88:28","trueBody":{"id":7079,"nodeType":"Block","src":"42382:71:28","statements":[{"expression":{"arguments":[{"id":7074,"name":"liquidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6925,"src":"42413:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7075,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6907,"src":"42425:4:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7076,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7053,"src":"42431:6:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7071,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7047,"src":"42400:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":7073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"42407:5:28","memberName":"seize","nodeType":"MemberAccess","referencedDeclaration":13462,"src":"42400:12:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":7077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42400:38:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7078,"nodeType":"ExpressionStatement","src":"42400:38:28"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7081,"name":"borrowBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7055,"src":"42544:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":7082,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"42561:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"42544:18:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7093,"nodeType":"IfStatement","src":"42540:109:28","trueBody":{"id":7092,"nodeType":"Block","src":"42564:85:28","statements":[{"expression":{"arguments":[{"id":7087,"name":"liquidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6925,"src":"42600:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7088,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6907,"src":"42612:4:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7089,"name":"repaymentAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7062,"src":"42618:15:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7084,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7047,"src":"42582:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":7086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"42589:10:28","memberName":"healBorrow","nodeType":"MemberAccess","referencedDeclaration":13403,"src":"42582:17:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":7090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42582:52:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7091,"nodeType":"ExpressionStatement","src":"42582:52:28"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7039,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7037,"src":"42057:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7040,"name":"userAssetsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6920,"src":"42061:15:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"42057:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7095,"initializationExpression":{"assignments":[7037],"declarations":[{"constant":false,"id":7037,"mutability":"mutable","name":"i","nameLocation":"42054:1:28","nodeType":"VariableDeclaration","scope":7095,"src":"42046:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7036,"name":"uint256","nodeType":"ElementaryTypeName","src":"42046:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7038,"nodeType":"VariableDeclarationStatement","src":"42046:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":7043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"42078:3:28","subExpression":{"id":7042,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7037,"src":"42080:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7044,"nodeType":"ExpressionStatement","src":"42078:3:28"},"nodeType":"ForStatement","src":"42041:618:28"}]},"documentation":{"id":6905,"nodeType":"StructuredDocumentation","src":"39849:701:28","text":" @notice Seizes all the remaining collateral, makes msg.sender repay the existing\n   borrows, and treats the rest of the debt as bad debt (for each market).\n   The sender has to repay a certain percentage of the debt, computed as\n   collateral / (borrows * liquidationIncentive).\n @param user account to heal\n @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for healing\n @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\n @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\n @custom:access Not restricted"},"functionSelector":"92136395","id":7097,"implemented":true,"kind":"function","modifiers":[],"name":"healAccount","nameLocation":"40564:11:28","nodeType":"FunctionDefinition","parameters":{"id":6908,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6907,"mutability":"mutable","name":"user","nameLocation":"40584:4:28","nodeType":"VariableDeclaration","scope":7097,"src":"40576:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6906,"name":"address","nodeType":"ElementaryTypeName","src":"40576:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"40575:14:28"},"returnParameters":{"id":6909,"nodeType":"ParameterList","parameters":[],"src":"40599:0:28"},"scope":9130,"src":"40555:2110:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7289,"nodeType":"Block","src":"43726:2132:28","statements":[{"assignments":[7109],"declarations":[{"constant":false,"id":7109,"mutability":"mutable","name":"snapshot","nameLocation":"43862:8:28","nodeType":"VariableDeclaration","scope":7289,"src":"43830:40:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot"},"typeName":{"id":7108,"nodeType":"UserDefinedTypeName","pathNode":{"id":7107,"name":"AccountLiquiditySnapshot","nameLocations":["43830:24:28"],"nodeType":"IdentifierPath","referencedDeclaration":9466,"src":"43830:24:28"},"referencedDeclaration":9466,"src":"43830:24:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_storage_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot"}},"visibility":"internal"}],"id":7114,"initialValue":{"arguments":[{"id":7111,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7100,"src":"43902:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7112,"name":"_getLiquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9041,"src":"43912:24:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp memory)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp memory)"}],"id":7110,"name":"_getCurrentLiquiditySnapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8758,"src":"43873:28:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$_$returns$_t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr_$","typeString":"function (address,function (contract VToken) view returns (struct ExponentialNoError.Exp memory)) view returns (struct ComptrollerStorage.AccountLiquiditySnapshot memory)"}},"id":7113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43873:64:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"nodeType":"VariableDeclarationStatement","src":"43830:107:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7115,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7109,"src":"43952:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":7116,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"43961:15:28","memberName":"totalCollateral","nodeType":"MemberAccess","referencedDeclaration":9455,"src":"43952:24:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":7117,"name":"minLiquidatableCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9520,"src":"43979:25:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"43952:52:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7126,"nodeType":"IfStatement","src":"43948:244:28","trueBody":{"id":7125,"nodeType":"Block","src":"44006:186:28","statements":[{"errorCall":{"arguments":[{"id":7120,"name":"minLiquidatableCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9520,"src":"44129:25:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":7121,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7109,"src":"44156:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":7122,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44165:15:28","memberName":"totalCollateral","nodeType":"MemberAccess","referencedDeclaration":9455,"src":"44156:24:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7119,"name":"CollateralExceedsThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5346,"src":"44102:26:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":7123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44102:79:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7124,"nodeType":"RevertStatement","src":"44095:86:28"}]}},{"assignments":[7128],"declarations":[{"constant":false,"id":7128,"mutability":"mutable","name":"collateralToSeize","nameLocation":"44210:17:28","nodeType":"VariableDeclaration","scope":7289,"src":"44202:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7127,"name":"uint256","nodeType":"ElementaryTypeName","src":"44202:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7136,"initialValue":{"arguments":[{"arguments":[{"id":7131,"name":"liquidationIncentiveMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9494,"src":"44278:28:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7130,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"44262:3:28","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":7132,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["44268:8:28"],"names":["mantissa"],"nodeType":"FunctionCall","src":"44262:47:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"expression":{"id":7133,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7109,"src":"44323:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":7134,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44332:7:28","memberName":"borrows","nodeType":"MemberAccess","referencedDeclaration":9459,"src":"44323:16:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7129,"name":"mul_ScalarTruncate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9701,"src":"44230:18:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct ExponentialNoError.Exp memory,uint256) pure returns (uint256)"}},"id":7135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44230:119:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"44202:147:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7137,"name":"collateralToSeize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7128,"src":"44363:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":7138,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7109,"src":"44384:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":7139,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44393:15:28","memberName":"totalCollateral","nodeType":"MemberAccess","referencedDeclaration":9455,"src":"44384:24:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"44363:45:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7148,"nodeType":"IfStatement","src":"44359:290:28","trueBody":{"id":7147,"nodeType":"Block","src":"44410:239:28","statements":[{"errorCall":{"arguments":[{"id":7142,"name":"collateralToSeize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7128,"src":"44594:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":7143,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7109,"src":"44613:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":7144,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44622:15:28","memberName":"totalCollateral","nodeType":"MemberAccess","referencedDeclaration":9455,"src":"44613:24:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7141,"name":"InsufficientCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5352,"src":"44571:22:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":7145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44571:67:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7146,"nodeType":"RevertStatement","src":"44564:74:28"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7149,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7109,"src":"44663:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":7150,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44672:9:28","memberName":"shortfall","nodeType":"MemberAccess","referencedDeclaration":9465,"src":"44663:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7151,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"44685:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"44663:23:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7157,"nodeType":"IfStatement","src":"44659:84:28","trueBody":{"id":7156,"nodeType":"Block","src":"44688:55:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7153,"name":"InsufficientShortfall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5358,"src":"44709:21:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":7154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44709:23:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7155,"nodeType":"RevertStatement","src":"44702:30:28"}]}},{"assignments":[7159],"declarations":[{"constant":false,"id":7159,"mutability":"mutable","name":"ordersCount","nameLocation":"44761:11:28","nodeType":"VariableDeclaration","scope":7289,"src":"44753:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7158,"name":"uint256","nodeType":"ElementaryTypeName","src":"44753:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7162,"initialValue":{"expression":{"id":7160,"name":"orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7104,"src":"44775:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_LiquidationOrder_$9453_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ComptrollerStorage.LiquidationOrder calldata[] calldata"}},"id":7161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"44782:6:28","memberName":"length","nodeType":"MemberAccess","src":"44775:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"44753:35:28"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7164,"name":"ordersCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7159,"src":"44815:11:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":7165,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"44829:1:28","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"44815:15:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7163,"name":"_ensureMaxLoops","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10334,"src":"44799:15:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":7167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44799:32:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7168,"nodeType":"ExpressionStatement","src":"44799:32:28"},{"body":{"id":7246,"nodeType":"Block","src":"44880:615:28","statements":[{"condition":{"id":7188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"44898:52:28","subExpression":{"expression":{"baseExpression":{"id":7178,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"44899:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":7186,"indexExpression":{"arguments":[{"expression":{"baseExpression":{"id":7181,"name":"orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7104,"src":"44915:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_LiquidationOrder_$9453_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ComptrollerStorage.LiquidationOrder calldata[] calldata"}},"id":7183,"indexExpression":{"id":7182,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7170,"src":"44922:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"44915:9:28","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationOrder_$9453_calldata_ptr","typeString":"struct ComptrollerStorage.LiquidationOrder calldata"}},"id":7184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"44925:14:28","memberName":"vTokenBorrowed","nodeType":"MemberAccess","referencedDeclaration":9450,"src":"44915:24:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":7180,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"44907:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7179,"name":"address","nodeType":"ElementaryTypeName","src":"44907:7:28","typeDescriptions":{}}},"id":7185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44907:33:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"44899:42:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"id":7187,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44942:8:28","memberName":"isListed","nodeType":"MemberAccess","referencedDeclaration":9475,"src":"44899:51:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7200,"nodeType":"IfStatement","src":"44894:148:28","trueBody":{"id":7199,"nodeType":"Block","src":"44952:90:28","statements":[{"errorCall":{"arguments":[{"arguments":[{"expression":{"baseExpression":{"id":7192,"name":"orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7104,"src":"45001:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_LiquidationOrder_$9453_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ComptrollerStorage.LiquidationOrder calldata[] calldata"}},"id":7194,"indexExpression":{"id":7193,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7170,"src":"45008:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"45001:9:28","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationOrder_$9453_calldata_ptr","typeString":"struct ComptrollerStorage.LiquidationOrder calldata"}},"id":7195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"45011:14:28","memberName":"vTokenBorrowed","nodeType":"MemberAccess","referencedDeclaration":9450,"src":"45001:24:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":7191,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"44993:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7190,"name":"address","nodeType":"ElementaryTypeName","src":"44993:7:28","typeDescriptions":{}}},"id":7196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44993:33:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7189,"name":"MarketNotListed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5287,"src":"44977:15:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":7197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44977:50:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7198,"nodeType":"RevertStatement","src":"44970:57:28"}]}},{"condition":{"id":7211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"45059:54:28","subExpression":{"expression":{"baseExpression":{"id":7201,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"45060:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":7209,"indexExpression":{"arguments":[{"expression":{"baseExpression":{"id":7204,"name":"orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7104,"src":"45076:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_LiquidationOrder_$9453_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ComptrollerStorage.LiquidationOrder calldata[] calldata"}},"id":7206,"indexExpression":{"id":7205,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7170,"src":"45083:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"45076:9:28","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationOrder_$9453_calldata_ptr","typeString":"struct ComptrollerStorage.LiquidationOrder calldata"}},"id":7207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"45086:16:28","memberName":"vTokenCollateral","nodeType":"MemberAccess","referencedDeclaration":9447,"src":"45076:26:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":7203,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"45068:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7202,"name":"address","nodeType":"ElementaryTypeName","src":"45068:7:28","typeDescriptions":{}}},"id":7208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45068:35:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"45060:44:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"id":7210,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45105:8:28","memberName":"isListed","nodeType":"MemberAccess","referencedDeclaration":9475,"src":"45060:53:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7223,"nodeType":"IfStatement","src":"45055:152:28","trueBody":{"id":7222,"nodeType":"Block","src":"45115:92:28","statements":[{"errorCall":{"arguments":[{"arguments":[{"expression":{"baseExpression":{"id":7215,"name":"orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7104,"src":"45164:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_LiquidationOrder_$9453_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ComptrollerStorage.LiquidationOrder calldata[] calldata"}},"id":7217,"indexExpression":{"id":7216,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7170,"src":"45171:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"45164:9:28","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationOrder_$9453_calldata_ptr","typeString":"struct ComptrollerStorage.LiquidationOrder calldata"}},"id":7218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"45174:16:28","memberName":"vTokenCollateral","nodeType":"MemberAccess","referencedDeclaration":9447,"src":"45164:26:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":7214,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"45156:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7213,"name":"address","nodeType":"ElementaryTypeName","src":"45156:7:28","typeDescriptions":{}}},"id":7219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45156:35:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7212,"name":"MarketNotListed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5287,"src":"45140:15:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":7220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45140:52:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7221,"nodeType":"RevertStatement","src":"45133:59:28"}]}},{"assignments":[7226],"declarations":[{"constant":false,"id":7226,"mutability":"mutable","name":"order","nameLocation":"45247:5:28","nodeType":"VariableDeclaration","scope":7246,"src":"45221:31:28","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationOrder_$9453_calldata_ptr","typeString":"struct ComptrollerStorage.LiquidationOrder"},"typeName":{"id":7225,"nodeType":"UserDefinedTypeName","pathNode":{"id":7224,"name":"LiquidationOrder","nameLocations":["45221:16:28"],"nodeType":"IdentifierPath","referencedDeclaration":9453,"src":"45221:16:28"},"referencedDeclaration":9453,"src":"45221:16:28","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationOrder_$9453_storage_ptr","typeString":"struct ComptrollerStorage.LiquidationOrder"}},"visibility":"internal"}],"id":7230,"initialValue":{"baseExpression":{"id":7227,"name":"orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7104,"src":"45255:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_LiquidationOrder_$9453_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ComptrollerStorage.LiquidationOrder calldata[] calldata"}},"id":7229,"indexExpression":{"id":7228,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7170,"src":"45262:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"45255:9:28","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationOrder_$9453_calldata_ptr","typeString":"struct ComptrollerStorage.LiquidationOrder calldata"}},"nodeType":"VariableDeclarationStatement","src":"45221:43:28"},{"expression":{"arguments":[{"expression":{"id":7236,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"45337:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"45341:6:28","memberName":"sender","nodeType":"MemberAccess","src":"45337:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7238,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7100,"src":"45365:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":7239,"name":"order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7226,"src":"45391:5:28","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationOrder_$9453_calldata_ptr","typeString":"struct ComptrollerStorage.LiquidationOrder calldata"}},"id":7240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"45397:11:28","memberName":"repayAmount","nodeType":"MemberAccess","referencedDeclaration":9452,"src":"45391:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":7241,"name":"order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7226,"src":"45426:5:28","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationOrder_$9453_calldata_ptr","typeString":"struct ComptrollerStorage.LiquidationOrder calldata"}},"id":7242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"45432:16:28","memberName":"vTokenCollateral","nodeType":"MemberAccess","referencedDeclaration":9447,"src":"45426:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"hexValue":"74727565","id":7243,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"45466:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"expression":{"id":7231,"name":"order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7226,"src":"45278:5:28","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationOrder_$9453_calldata_ptr","typeString":"struct ComptrollerStorage.LiquidationOrder calldata"}},"id":7234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"45284:14:28","memberName":"vTokenBorrowed","nodeType":"MemberAccess","referencedDeclaration":9450,"src":"45278:20:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":7235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"45299:20:28","memberName":"forceLiquidateBorrow","nodeType":"MemberAccess","referencedDeclaration":13440,"src":"45278:41:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_contract$_VTokenInterface_$16106_$_t_bool_$returns$__$","typeString":"function (address,address,uint256,contract VTokenInterface,bool) external"}},"id":7244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45278:206:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7245,"nodeType":"ExpressionStatement","src":"45278:206:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7172,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7170,"src":"44858:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7173,"name":"ordersCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7159,"src":"44862:11:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"44858:15:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7247,"initializationExpression":{"assignments":[7170],"declarations":[{"constant":false,"id":7170,"mutability":"mutable","name":"i","nameLocation":"44855:1:28","nodeType":"VariableDeclaration","scope":7247,"src":"44847:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7169,"name":"uint256","nodeType":"ElementaryTypeName","src":"44847:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7171,"nodeType":"VariableDeclarationStatement","src":"44847:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":7176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"44875:3:28","subExpression":{"id":7175,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7170,"src":"44877:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7177,"nodeType":"ExpressionStatement","src":"44875:3:28"},"nodeType":"ForStatement","src":"44842:653:28"},{"assignments":[7252],"declarations":[{"constant":false,"id":7252,"mutability":"mutable","name":"borrowMarkets","nameLocation":"45521:13:28","nodeType":"VariableDeclaration","scope":7289,"src":"45505:29:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":7250,"nodeType":"UserDefinedTypeName","pathNode":{"id":7249,"name":"VToken","nameLocations":["45505:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"45505:6:28"},"referencedDeclaration":15506,"src":"45505:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":7251,"nodeType":"ArrayTypeName","src":"45505:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"}],"id":7256,"initialValue":{"arguments":[{"id":7254,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7100,"src":"45549:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7253,"name":"getAssetsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8504,"src":"45537:11:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_$","typeString":"function (address) view returns (contract VToken[] memory)"}},"id":7255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45537:21:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"nodeType":"VariableDeclarationStatement","src":"45505:53:28"},{"assignments":[7258],"declarations":[{"constant":false,"id":7258,"mutability":"mutable","name":"marketsCount","nameLocation":"45576:12:28","nodeType":"VariableDeclaration","scope":7289,"src":"45568:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7257,"name":"uint256","nodeType":"ElementaryTypeName","src":"45568:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7261,"initialValue":{"expression":{"id":7259,"name":"borrowMarkets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7252,"src":"45591:13:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":7260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"45605:6:28","memberName":"length","nodeType":"MemberAccess","src":"45591:20:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"45568:43:28"},{"body":{"id":7287,"nodeType":"Block","src":"45661:191:28","statements":[{"assignments":[null,7272,null],"declarations":[null,{"constant":false,"id":7272,"mutability":"mutable","name":"borrowBalance","nameLocation":"45686:13:28","nodeType":"VariableDeclaration","scope":7287,"src":"45678:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7271,"name":"uint256","nodeType":"ElementaryTypeName","src":"45678:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":7279,"initialValue":{"arguments":[{"baseExpression":{"id":7274,"name":"borrowMarkets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7252,"src":"45729:13:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":7276,"indexExpression":{"id":7275,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7263,"src":"45743:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"45729:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"id":7277,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7100,"src":"45747:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_address","typeString":"address"}],"id":7273,"name":"_safeGetAccountSnapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9089,"src":"45705:23:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (contract VToken,address) view returns (uint256,uint256,uint256)"}},"id":7278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45705:51:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"45675:81:28"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7281,"name":"borrowBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7272,"src":"45778:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7282,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"45795:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"45778:18:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4e6f6e7a65726f20626f72726f772062616c616e6365206166746572206c69717569646174696f6e","id":7284,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"45798:42:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_25d05e40227b6f7351f342eb9dac81eb87f63180a86e368f7d41da458d00d16f","typeString":"literal_string \"Nonzero borrow balance after liquidation\""},"value":"Nonzero borrow balance after liquidation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_25d05e40227b6f7351f342eb9dac81eb87f63180a86e368f7d41da458d00d16f","typeString":"literal_string \"Nonzero borrow balance after liquidation\""}],"id":7280,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"45770:7:28","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":7285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45770:71:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7286,"nodeType":"ExpressionStatement","src":"45770:71:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7265,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7263,"src":"45638:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7266,"name":"marketsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7258,"src":"45642:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"45638:16:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7288,"initializationExpression":{"assignments":[7263],"declarations":[{"constant":false,"id":7263,"mutability":"mutable","name":"i","nameLocation":"45635:1:28","nodeType":"VariableDeclaration","scope":7288,"src":"45627:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7262,"name":"uint256","nodeType":"ElementaryTypeName","src":"45627:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7264,"nodeType":"VariableDeclarationStatement","src":"45627:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":7269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"45656:3:28","subExpression":{"id":7268,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7263,"src":"45658:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7270,"nodeType":"ExpressionStatement","src":"45656:3:28"},"nodeType":"ForStatement","src":"45622:230:28"}]},"documentation":{"id":7098,"nodeType":"StructuredDocumentation","src":"42671:961:28","text":" @notice Liquidates all borrows of the borrower. Callable only if the collateral is less than\n   a predefined threshold, and the account collateral can be seized to cover all borrows. If\n   the collateral is higher than the threshold, use regular liquidations. If the collateral is\n   below the threshold, and the account is insolvent, use healAccount.\n @param borrower the borrower address\n @param orders an array of liquidation orders\n @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for a batch liquidation\n @custom:error InsufficientCollateral error is thrown when there is not enough collateral to cover the debt\n @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\n @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\n @custom:access Not restricted"},"functionSelector":"2bce219c","id":7290,"implemented":true,"kind":"function","modifiers":[],"name":"liquidateAccount","nameLocation":"43646:16:28","nodeType":"FunctionDefinition","parameters":{"id":7105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7100,"mutability":"mutable","name":"borrower","nameLocation":"43671:8:28","nodeType":"VariableDeclaration","scope":7290,"src":"43663:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7099,"name":"address","nodeType":"ElementaryTypeName","src":"43663:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7104,"mutability":"mutable","name":"orders","nameLocation":"43709:6:28","nodeType":"VariableDeclaration","scope":7290,"src":"43681:34:28","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_LiquidationOrder_$9453_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ComptrollerStorage.LiquidationOrder[]"},"typeName":{"baseType":{"id":7102,"nodeType":"UserDefinedTypeName","pathNode":{"id":7101,"name":"LiquidationOrder","nameLocations":["43681:16:28"],"nodeType":"IdentifierPath","referencedDeclaration":9453,"src":"43681:16:28"},"referencedDeclaration":9453,"src":"43681:16:28","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationOrder_$9453_storage_ptr","typeString":"struct ComptrollerStorage.LiquidationOrder"}},"id":7103,"nodeType":"ArrayTypeName","src":"43681:18:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_LiquidationOrder_$9453_storage_$dyn_storage_ptr","typeString":"struct ComptrollerStorage.LiquidationOrder[]"}},"visibility":"internal"}],"src":"43662:54:28"},"returnParameters":{"id":7106,"nodeType":"ParameterList","parameters":[],"src":"43726:0:28"},"scope":9130,"src":"43637:2221:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7327,"nodeType":"Block","src":"46193:497:28","statements":[{"expression":{"arguments":[{"hexValue":"736574436c6f7365466163746f722875696e7432353629","id":7297,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"46223:25:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_12348e96032045f6cd9e445cb3bb7479d4f1bd540621886515b72a6cbe2a5e2d","typeString":"literal_string \"setCloseFactor(uint256)\""},"value":"setCloseFactor(uint256)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_12348e96032045f6cd9e445cb3bb7479d4f1bd540621886515b72a6cbe2a5e2d","typeString":"literal_string \"setCloseFactor(uint256)\""}],"id":7296,"name":"_checkAccessAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5034,"src":"46203:19:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) view"}},"id":7298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"46203:46:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7299,"nodeType":"ExpressionStatement","src":"46203:46:28"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7301,"name":"MAX_CLOSE_FACTOR_MANTISSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9555,"src":"46267:25:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":7302,"name":"newCloseFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7293,"src":"46296:22:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"46267:51:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"436c6f736520666163746f722067726561746572207468616e206d6178696d756d20636c6f736520666163746f72","id":7304,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"46320:48:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_3388b29c8ac24f5c232934811c4242553f413844f77f503b8785ba71cd2c4b6f","typeString":"literal_string \"Close factor greater than maximum close factor\""},"value":"Close factor greater than maximum close factor"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3388b29c8ac24f5c232934811c4242553f413844f77f503b8785ba71cd2c4b6f","typeString":"literal_string \"Close factor greater than maximum close factor\""}],"id":7300,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"46259:7:28","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":7305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"46259:110:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7306,"nodeType":"ExpressionStatement","src":"46259:110:28"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7308,"name":"MIN_CLOSE_FACTOR_MANTISSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9552,"src":"46387:25:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":7309,"name":"newCloseFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7293,"src":"46416:22:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"46387:51:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"436c6f736520666163746f7220736d616c6c6572207468616e206d696e696d756d20636c6f736520666163746f72","id":7311,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"46440:48:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_e08258dad66b639434436d0a533127e51effbdd16e4a07ef3fab948963e89ae8","typeString":"literal_string \"Close factor smaller than minimum close factor\""},"value":"Close factor smaller than minimum close factor"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e08258dad66b639434436d0a533127e51effbdd16e4a07ef3fab948963e89ae8","typeString":"literal_string \"Close factor smaller than minimum close factor\""}],"id":7307,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"46379:7:28","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":7312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"46379:110:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7313,"nodeType":"ExpressionStatement","src":"46379:110:28"},{"assignments":[7315],"declarations":[{"constant":false,"id":7315,"mutability":"mutable","name":"oldCloseFactorMantissa","nameLocation":"46508:22:28","nodeType":"VariableDeclaration","scope":7327,"src":"46500:30:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7314,"name":"uint256","nodeType":"ElementaryTypeName","src":"46500:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7317,"initialValue":{"id":7316,"name":"closeFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9491,"src":"46533:19:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"46500:52:28"},{"expression":{"id":7320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7318,"name":"closeFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9491,"src":"46562:19:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7319,"name":"newCloseFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7293,"src":"46584:22:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"46562:44:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7321,"nodeType":"ExpressionStatement","src":"46562:44:28"},{"eventCall":{"arguments":[{"id":7323,"name":"oldCloseFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7315,"src":"46636:22:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7324,"name":"newCloseFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7293,"src":"46660:22:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7322,"name":"NewCloseFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5144,"src":"46621:14:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":7325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"46621:62:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7326,"nodeType":"EmitStatement","src":"46616:67:28"}]},"documentation":{"id":7291,"nodeType":"StructuredDocumentation","src":"45864:259:28","text":" @notice Sets the closeFactor to use when liquidating borrows\n @param newCloseFactorMantissa New close factor, scaled by 1e18\n @custom:event Emits NewCloseFactor on success\n @custom:access Controlled by AccessControlManager"},"functionSelector":"12348e96","id":7328,"implemented":true,"kind":"function","modifiers":[],"name":"setCloseFactor","nameLocation":"46137:14:28","nodeType":"FunctionDefinition","parameters":{"id":7294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7293,"mutability":"mutable","name":"newCloseFactorMantissa","nameLocation":"46160:22:28","nodeType":"VariableDeclaration","scope":7328,"src":"46152:30:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7292,"name":"uint256","nodeType":"ElementaryTypeName","src":"46152:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"46151:32:28"},"returnParameters":{"id":7295,"nodeType":"ParameterList","parameters":[],"src":"46193:0:28"},"scope":9130,"src":"46128:562:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7455,"nodeType":"Block","src":"47838:1747:28","statements":[{"expression":{"arguments":[{"hexValue":"736574436f6c6c61746572616c466163746f7228616464726573732c75696e743235362c75696e7432353629","id":7340,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"47868:46:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_5cc4fdeba8221ff358097fceb1b4cc4a550fe1977b0867336b9df015dd03b143","typeString":"literal_string \"setCollateralFactor(address,uint256,uint256)\""},"value":"setCollateralFactor(address,uint256,uint256)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_5cc4fdeba8221ff358097fceb1b4cc4a550fe1977b0867336b9df015dd03b143","typeString":"literal_string \"setCollateralFactor(address,uint256,uint256)\""}],"id":7339,"name":"_checkAccessAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5034,"src":"47848:19:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) view"}},"id":7341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"47848:67:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7342,"nodeType":"ExpressionStatement","src":"47848:67:28"},{"assignments":[7345],"declarations":[{"constant":false,"id":7345,"mutability":"mutable","name":"market","nameLocation":"47976:6:28","nodeType":"VariableDeclaration","scope":7455,"src":"47961:21:28","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market"},"typeName":{"id":7344,"nodeType":"UserDefinedTypeName","pathNode":{"id":7343,"name":"Market","nameLocations":["47961:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":9484,"src":"47961:6:28"},"referencedDeclaration":9484,"src":"47961:6:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market"}},"visibility":"internal"}],"id":7352,"initialValue":{"baseExpression":{"id":7346,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"47985:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":7351,"indexExpression":{"arguments":[{"id":7349,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7332,"src":"48001:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":7348,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"47993:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7347,"name":"address","nodeType":"ElementaryTypeName","src":"47993:7:28","typeDescriptions":{}}},"id":7350,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"47993:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"47985:24:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"nodeType":"VariableDeclarationStatement","src":"47961:48:28"},{"condition":{"id":7355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"48023:16:28","subExpression":{"expression":{"id":7353,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7345,"src":"48024:6:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":7354,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"48031:8:28","memberName":"isListed","nodeType":"MemberAccess","referencedDeclaration":9475,"src":"48024:15:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7364,"nodeType":"IfStatement","src":"48019:86:28","trueBody":{"id":7363,"nodeType":"Block","src":"48041:64:28","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":7359,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7332,"src":"48086:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":7358,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"48078:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7357,"name":"address","nodeType":"ElementaryTypeName","src":"48078:7:28","typeDescriptions":{}}},"id":7360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48078:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7356,"name":"MarketNotListed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5287,"src":"48062:15:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":7361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48062:32:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7362,"nodeType":"RevertStatement","src":"48055:39:28"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7365,"name":"newCollateralFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7334,"src":"48161:27:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":7366,"name":"MAX_COLLATERAL_FACTOR_MANTISSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9558,"src":"48191:30:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"48161:60:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7372,"nodeType":"IfStatement","src":"48157:123:28","trueBody":{"id":7371,"nodeType":"Block","src":"48223:57:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7368,"name":"InvalidCollateralFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5260,"src":"48244:23:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":7369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48244:25:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7370,"nodeType":"RevertStatement","src":"48237:32:28"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7373,"name":"newLiquidationThresholdMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7336,"src":"48344:31:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":7374,"name":"MANTISSA_ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9662,"src":"48378:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"48344:46:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7380,"nodeType":"IfStatement","src":"48340:113:28","trueBody":{"id":7379,"nodeType":"Block","src":"48392:61:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7376,"name":"InvalidLiquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5263,"src":"48413:27:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":7377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48413:29:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7378,"nodeType":"RevertStatement","src":"48406:36:28"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7381,"name":"newLiquidationThresholdMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7336,"src":"48518:31:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7382,"name":"newCollateralFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7334,"src":"48552:27:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"48518:61:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7388,"nodeType":"IfStatement","src":"48514:128:28","trueBody":{"id":7387,"nodeType":"Block","src":"48581:61:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7384,"name":"InvalidLiquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5263,"src":"48602:27:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":7385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48602:29:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7386,"nodeType":"RevertStatement","src":"48595:36:28"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7389,"name":"newCollateralFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7334,"src":"48713:27:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":7390,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"48744:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"48713:32:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":7396,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7332,"src":"48783:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":7395,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"48775:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7394,"name":"address","nodeType":"ElementaryTypeName","src":"48775:7:28","typeDescriptions":{}}},"id":7397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48775:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7392,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9488,"src":"48749:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"id":7393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"48756:18:28","memberName":"getUnderlyingPrice","nodeType":"MemberAccess","referencedDeclaration":16172,"src":"48749:25:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":7398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48749:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"48795:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"48749:47:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"48713:83:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7410,"nodeType":"IfStatement","src":"48709:148:28","trueBody":{"id":7409,"nodeType":"Block","src":"48798:59:28","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":7405,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7332,"src":"48838:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":7404,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"48830:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7403,"name":"address","nodeType":"ElementaryTypeName","src":"48830:7:28","typeDescriptions":{}}},"id":7406,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48830:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7402,"name":"PriceError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5275,"src":"48819:10:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":7407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48819:27:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7408,"nodeType":"RevertStatement","src":"48812:34:28"}]}},{"assignments":[7412],"declarations":[{"constant":false,"id":7412,"mutability":"mutable","name":"oldCollateralFactorMantissa","nameLocation":"48875:27:28","nodeType":"VariableDeclaration","scope":7455,"src":"48867:35:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7411,"name":"uint256","nodeType":"ElementaryTypeName","src":"48867:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7415,"initialValue":{"expression":{"id":7413,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7345,"src":"48905:6:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":7414,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"48912:24:28","memberName":"collateralFactorMantissa","nodeType":"MemberAccess","referencedDeclaration":9477,"src":"48905:31:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"48867:69:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7416,"name":"newCollateralFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7334,"src":"48950:27:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":7417,"name":"oldCollateralFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7412,"src":"48981:27:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"48950:58:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7432,"nodeType":"IfStatement","src":"48946:254:28","trueBody":{"id":7431,"nodeType":"Block","src":"49010:190:28","statements":[{"expression":{"id":7423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":7419,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7345,"src":"49024:6:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":7421,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"49031:24:28","memberName":"collateralFactorMantissa","nodeType":"MemberAccess","referencedDeclaration":9477,"src":"49024:31:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7422,"name":"newCollateralFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7334,"src":"49058:27:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"49024:61:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7424,"nodeType":"ExpressionStatement","src":"49024:61:28"},{"eventCall":{"arguments":[{"id":7426,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7332,"src":"49124:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"id":7427,"name":"oldCollateralFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7412,"src":"49132:27:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7428,"name":"newCollateralFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7334,"src":"49161:27:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7425,"name":"NewCollateralFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5154,"src":"49104:19:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_VToken_$15506_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (contract VToken,uint256,uint256)"}},"id":7429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"49104:85:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7430,"nodeType":"EmitStatement","src":"49099:90:28"}]}},{"assignments":[7434],"declarations":[{"constant":false,"id":7434,"mutability":"mutable","name":"oldLiquidationThresholdMantissa","nameLocation":"49218:31:28","nodeType":"VariableDeclaration","scope":7455,"src":"49210:39:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7433,"name":"uint256","nodeType":"ElementaryTypeName","src":"49210:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7437,"initialValue":{"expression":{"id":7435,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7345,"src":"49252:6:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":7436,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49259:28:28","memberName":"liquidationThresholdMantissa","nodeType":"MemberAccess","referencedDeclaration":9479,"src":"49252:35:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"49210:77:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7438,"name":"newLiquidationThresholdMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7336,"src":"49301:31:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":7439,"name":"oldLiquidationThresholdMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7434,"src":"49336:31:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"49301:66:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7454,"nodeType":"IfStatement","src":"49297:282:28","trueBody":{"id":7453,"nodeType":"Block","src":"49369:210:28","statements":[{"expression":{"id":7445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":7441,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7345,"src":"49383:6:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":7443,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"49390:28:28","memberName":"liquidationThresholdMantissa","nodeType":"MemberAccess","referencedDeclaration":9479,"src":"49383:35:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7444,"name":"newLiquidationThresholdMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7336,"src":"49421:31:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"49383:69:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7446,"nodeType":"ExpressionStatement","src":"49383:69:28"},{"eventCall":{"arguments":[{"id":7448,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7332,"src":"49495:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"id":7449,"name":"oldLiquidationThresholdMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7434,"src":"49503:31:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7450,"name":"newLiquidationThresholdMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7336,"src":"49536:31:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7447,"name":"NewLiquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5164,"src":"49471:23:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_VToken_$15506_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (contract VToken,uint256,uint256)"}},"id":7451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"49471:97:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7452,"nodeType":"EmitStatement","src":"49466:102:28"}]}}]},"documentation":{"id":7329,"nodeType":"StructuredDocumentation","src":"46696:976:28","text":" @notice Sets the collateralFactor for a market\n @dev This function is restricted by the AccessControlManager\n @param vToken The market to set the factor on\n @param newCollateralFactorMantissa The new collateral factor, scaled by 1e18\n @param newLiquidationThresholdMantissa The new liquidation threshold, scaled by 1e18\n @custom:event Emits NewCollateralFactor when collateral factor is updated\n    and NewLiquidationThreshold when liquidation threshold is updated\n @custom:error MarketNotListed error is thrown when the market is not listed\n @custom:error InvalidCollateralFactor error is thrown when collateral factor is too high\n @custom:error InvalidLiquidationThreshold error is thrown when liquidation threshold is lower than collateral factor\n @custom:error PriceError is thrown when the oracle returns an invalid price for the asset\n @custom:access Controlled by AccessControlManager"},"functionSelector":"5cc4fdeb","id":7456,"implemented":true,"kind":"function","modifiers":[],"name":"setCollateralFactor","nameLocation":"47686:19:28","nodeType":"FunctionDefinition","parameters":{"id":7337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7332,"mutability":"mutable","name":"vToken","nameLocation":"47722:6:28","nodeType":"VariableDeclaration","scope":7456,"src":"47715:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":7331,"nodeType":"UserDefinedTypeName","pathNode":{"id":7330,"name":"VToken","nameLocations":["47715:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"47715:6:28"},"referencedDeclaration":15506,"src":"47715:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"},{"constant":false,"id":7334,"mutability":"mutable","name":"newCollateralFactorMantissa","nameLocation":"47746:27:28","nodeType":"VariableDeclaration","scope":7456,"src":"47738:35:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7333,"name":"uint256","nodeType":"ElementaryTypeName","src":"47738:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7336,"mutability":"mutable","name":"newLiquidationThresholdMantissa","nameLocation":"47791:31:28","nodeType":"VariableDeclaration","scope":7456,"src":"47783:39:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7335,"name":"uint256","nodeType":"ElementaryTypeName","src":"47783:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"47705:123:28"},"returnParameters":{"id":7338,"nodeType":"ParameterList","parameters":[],"src":"47838:0:28"},"scope":9130,"src":"47677:1908:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7486,"nodeType":"Block","src":"50004:606:28","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7463,"name":"newLiquidationIncentiveMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7459,"src":"50022:31:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":7464,"name":"MANTISSA_ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9662,"src":"50057:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"50022:47:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6c69717569646174696f6e20696e63656e746976652073686f756c642062652067726561746572207468616e2031653138","id":7466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"50071:51:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_c058637d38cae682b1632861e7627b9b2faf58bda046e427ad8f294be17a6198","typeString":"literal_string \"liquidation incentive should be greater than 1e18\""},"value":"liquidation incentive should be greater than 1e18"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c058637d38cae682b1632861e7627b9b2faf58bda046e427ad8f294be17a6198","typeString":"literal_string \"liquidation incentive should be greater than 1e18\""}],"id":7462,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"50014:7:28","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":7467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"50014:109:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7468,"nodeType":"ExpressionStatement","src":"50014:109:28"},{"expression":{"arguments":[{"hexValue":"7365744c69717569646174696f6e496e63656e746976652875696e7432353629","id":7470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"50154:34:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_a84310813525f21113cc6e395981036ddd9f5fb37a74b0ec70740c00bf3cfca4","typeString":"literal_string \"setLiquidationIncentive(uint256)\""},"value":"setLiquidationIncentive(uint256)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_a84310813525f21113cc6e395981036ddd9f5fb37a74b0ec70740c00bf3cfca4","typeString":"literal_string \"setLiquidationIncentive(uint256)\""}],"id":7469,"name":"_checkAccessAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5034,"src":"50134:19:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) view"}},"id":7471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"50134:55:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7472,"nodeType":"ExpressionStatement","src":"50134:55:28"},{"assignments":[7474],"declarations":[{"constant":false,"id":7474,"mutability":"mutable","name":"oldLiquidationIncentiveMantissa","nameLocation":"50253:31:28","nodeType":"VariableDeclaration","scope":7486,"src":"50245:39:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7473,"name":"uint256","nodeType":"ElementaryTypeName","src":"50245:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7476,"initialValue":{"id":7475,"name":"liquidationIncentiveMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9494,"src":"50287:28:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"50245:70:28"},{"expression":{"id":7479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7477,"name":"liquidationIncentiveMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9494,"src":"50380:28:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7478,"name":"newLiquidationIncentiveMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7459,"src":"50411:31:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"50380:62:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7480,"nodeType":"ExpressionStatement","src":"50380:62:28"},{"eventCall":{"arguments":[{"id":7482,"name":"oldLiquidationIncentiveMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7474,"src":"50538:31:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7483,"name":"newLiquidationIncentiveMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7459,"src":"50571:31:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7481,"name":"NewLiquidationIncentive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5171,"src":"50514:23:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":7484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"50514:89:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7485,"nodeType":"EmitStatement","src":"50509:94:28"}]},"documentation":{"id":7457,"nodeType":"StructuredDocumentation","src":"49591:325:28","text":" @notice Sets liquidationIncentive\n @dev This function is restricted by the AccessControlManager\n @param newLiquidationIncentiveMantissa New liquidationIncentive scaled by 1e18\n @custom:event Emits NewLiquidationIncentive on success\n @custom:access Controlled by AccessControlManager"},"functionSelector":"a8431081","id":7487,"implemented":true,"kind":"function","modifiers":[],"name":"setLiquidationIncentive","nameLocation":"49930:23:28","nodeType":"FunctionDefinition","parameters":{"id":7460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7459,"mutability":"mutable","name":"newLiquidationIncentiveMantissa","nameLocation":"49962:31:28","nodeType":"VariableDeclaration","scope":7487,"src":"49954:39:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7458,"name":"uint256","nodeType":"ElementaryTypeName","src":"49954:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"49953:41:28"},"returnParameters":{"id":7461,"nodeType":"ParameterList","parameters":[],"src":"50004:0:28"},"scope":9130,"src":"49921:689:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7586,"nodeType":"Block","src":"50998:765:28","statements":[{"expression":{"arguments":[{"id":7495,"name":"poolRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5121,"src":"51023:12:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7494,"name":"_checkSenderIs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9108,"src":"51008:14:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":7496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51008:28:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7497,"nodeType":"ExpressionStatement","src":"51008:28:28"},{"condition":{"expression":{"baseExpression":{"id":7498,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"51051:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":7503,"indexExpression":{"arguments":[{"id":7501,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7491,"src":"51067:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":7500,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"51059:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7499,"name":"address","nodeType":"ElementaryTypeName","src":"51059:7:28","typeDescriptions":{}}},"id":7502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51059:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"51051:24:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"id":7504,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"51076:8:28","memberName":"isListed","nodeType":"MemberAccess","referencedDeclaration":9475,"src":"51051:33:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7513,"nodeType":"IfStatement","src":"51047:107:28","trueBody":{"id":7512,"nodeType":"Block","src":"51086:68:28","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":7508,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7491,"src":"51135:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":7507,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"51127:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7506,"name":"address","nodeType":"ElementaryTypeName","src":"51127:7:28","typeDescriptions":{}}},"id":7509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51127:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7505,"name":"MarketAlreadyListed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5377,"src":"51107:19:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":7510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51107:36:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7511,"nodeType":"RevertStatement","src":"51100:43:28"}]}},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7515,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7491,"src":"51172:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":7516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"51179:8:28","memberName":"isVToken","nodeType":"MemberAccess","referencedDeclaration":16105,"src":"51172:15:28","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_bool_$","typeString":"function () pure external returns (bool)"}},"id":7517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51172:17:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"436f6d7074726f6c6c65723a20496e76616c69642076546f6b656e","id":7518,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"51191:29:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_7cbca09684e568d28239275bedb5f9d8ede90fb19ba1a42a2dd98c07e53733e5","typeString":"literal_string \"Comptroller: Invalid vToken\""},"value":"Comptroller: Invalid vToken"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7cbca09684e568d28239275bedb5f9d8ede90fb19ba1a42a2dd98c07e53733e5","typeString":"literal_string \"Comptroller: Invalid vToken\""}],"id":7514,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"51164:7:28","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":7519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51164:57:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7520,"nodeType":"ExpressionStatement","src":"51164:57:28"},{"assignments":[7523],"declarations":[{"constant":false,"id":7523,"mutability":"mutable","name":"newMarket","nameLocation":"51296:9:28","nodeType":"VariableDeclaration","scope":7586,"src":"51281:24:28","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market"},"typeName":{"id":7522,"nodeType":"UserDefinedTypeName","pathNode":{"id":7521,"name":"Market","nameLocations":["51281:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":9484,"src":"51281:6:28"},"referencedDeclaration":9484,"src":"51281:6:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market"}},"visibility":"internal"}],"id":7530,"initialValue":{"baseExpression":{"id":7524,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"51308:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":7529,"indexExpression":{"arguments":[{"id":7527,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7491,"src":"51324:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":7526,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"51316:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7525,"name":"address","nodeType":"ElementaryTypeName","src":"51316:7:28","typeDescriptions":{}}},"id":7528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51316:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"51308:24:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"nodeType":"VariableDeclarationStatement","src":"51281:51:28"},{"expression":{"id":7535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":7531,"name":"newMarket","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7523,"src":"51342:9:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":7533,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"51352:8:28","memberName":"isListed","nodeType":"MemberAccess","referencedDeclaration":9475,"src":"51342:18:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":7534,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"51363:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"51342:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7536,"nodeType":"ExpressionStatement","src":"51342:25:28"},{"expression":{"id":7541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":7537,"name":"newMarket","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7523,"src":"51377:9:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":7539,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"51387:24:28","memberName":"collateralFactorMantissa","nodeType":"MemberAccess","referencedDeclaration":9477,"src":"51377:34:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":7540,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"51414:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"51377:38:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7542,"nodeType":"ExpressionStatement","src":"51377:38:28"},{"expression":{"id":7547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":7543,"name":"newMarket","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7523,"src":"51425:9:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":7545,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"51435:28:28","memberName":"liquidationThresholdMantissa","nodeType":"MemberAccess","referencedDeclaration":9479,"src":"51425:38:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":7546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"51466:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"51425:42:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7548,"nodeType":"ExpressionStatement","src":"51425:42:28"},{"expression":{"arguments":[{"arguments":[{"id":7552,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7491,"src":"51497:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":7551,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"51489:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7550,"name":"address","nodeType":"ElementaryTypeName","src":"51489:7:28","typeDescriptions":{}}},"id":7553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51489:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7549,"name":"_addMarket","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8625,"src":"51478:10:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":7554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51478:27:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7555,"nodeType":"ExpressionStatement","src":"51478:27:28"},{"assignments":[7557],"declarations":[{"constant":false,"id":7557,"mutability":"mutable","name":"rewardDistributorsCount","nameLocation":"51524:23:28","nodeType":"VariableDeclaration","scope":7586,"src":"51516:31:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7556,"name":"uint256","nodeType":"ElementaryTypeName","src":"51516:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7560,"initialValue":{"expression":{"id":7558,"name":"rewardsDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9537,"src":"51550:19:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage","typeString":"contract RewardsDistributor[] storage ref"}},"id":7559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"51570:6:28","memberName":"length","nodeType":"MemberAccess","src":"51550:26:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"51516:60:28"},{"body":{"id":7580,"nodeType":"Block","src":"51637:81:28","statements":[{"expression":{"arguments":[{"arguments":[{"id":7576,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7491,"src":"51699:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":7575,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"51691:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7574,"name":"address","nodeType":"ElementaryTypeName","src":"51691:7:28","typeDescriptions":{}}},"id":7577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51691:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":7570,"name":"rewardsDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9537,"src":"51651:19:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage","typeString":"contract RewardsDistributor[] storage ref"}},"id":7572,"indexExpression":{"id":7571,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7562,"src":"51671:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"51651:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":7573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"51674:16:28","memberName":"initializeMarket","nodeType":"MemberAccess","referencedDeclaration":10657,"src":"51651:39:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":7578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51651:56:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7579,"nodeType":"ExpressionStatement","src":"51651:56:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7564,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7562,"src":"51603:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7565,"name":"rewardDistributorsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7557,"src":"51607:23:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"51603:27:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7581,"initializationExpression":{"assignments":[7562],"declarations":[{"constant":false,"id":7562,"mutability":"mutable","name":"i","nameLocation":"51600:1:28","nodeType":"VariableDeclaration","scope":7581,"src":"51592:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7561,"name":"uint256","nodeType":"ElementaryTypeName","src":"51592:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7563,"nodeType":"VariableDeclarationStatement","src":"51592:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":7568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"51632:3:28","subExpression":{"id":7567,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7562,"src":"51634:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7569,"nodeType":"ExpressionStatement","src":"51632:3:28"},"nodeType":"ForStatement","src":"51587:131:28"},{"eventCall":{"arguments":[{"id":7583,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7491,"src":"51749:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":7582,"name":"MarketSupported","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5227,"src":"51733:15:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_VToken_$15506_$returns$__$","typeString":"function (contract VToken)"}},"id":7584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51733:23:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7585,"nodeType":"EmitStatement","src":"51728:28:28"}]},"documentation":{"id":7488,"nodeType":"StructuredDocumentation","src":"50616:330:28","text":" @notice Add the market to the markets mapping and set it as listed\n @dev Only callable by the PoolRegistry\n @param vToken The address of the market (token) to list\n @custom:error MarketAlreadyListed is thrown if the market is already listed in this pool\n @custom:access Only PoolRegistry"},"functionSelector":"cab4f84c","id":7587,"implemented":true,"kind":"function","modifiers":[],"name":"supportMarket","nameLocation":"50960:13:28","nodeType":"FunctionDefinition","parameters":{"id":7492,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7491,"mutability":"mutable","name":"vToken","nameLocation":"50981:6:28","nodeType":"VariableDeclaration","scope":7587,"src":"50974:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":7490,"nodeType":"UserDefinedTypeName","pathNode":{"id":7489,"name":"VToken","nameLocations":["50974:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"50974:6:28"},"referencedDeclaration":15506,"src":"50974:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"}],"src":"50973:15:28"},"returnParameters":{"id":7493,"nodeType":"ParameterList","parameters":[],"src":"50998:0:28"},"scope":9130,"src":"50951:812:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7660,"nodeType":"Block","src":"52660:484:28","statements":[{"expression":{"arguments":[{"hexValue":"7365744d61726b6574426f72726f774361707328616464726573735b5d2c75696e743235365b5d29","id":7599,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"52690:42:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_186db48fb0c97610927fb79b7d837b52302ddaf2260be60428158259bf0cb908","typeString":"literal_string \"setMarketBorrowCaps(address[],uint256[])\""},"value":"setMarketBorrowCaps(address[],uint256[])"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_186db48fb0c97610927fb79b7d837b52302ddaf2260be60428158259bf0cb908","typeString":"literal_string \"setMarketBorrowCaps(address[],uint256[])\""}],"id":7598,"name":"_checkAccessAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5034,"src":"52670:19:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) view"}},"id":7600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"52670:63:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7601,"nodeType":"ExpressionStatement","src":"52670:63:28"},{"assignments":[7603],"declarations":[{"constant":false,"id":7603,"mutability":"mutable","name":"numMarkets","nameLocation":"52752:10:28","nodeType":"VariableDeclaration","scope":7660,"src":"52744:18:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7602,"name":"uint256","nodeType":"ElementaryTypeName","src":"52744:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7606,"initialValue":{"expression":{"id":7604,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7592,"src":"52765:7:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","typeString":"contract VToken[] calldata"}},"id":7605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"52773:6:28","memberName":"length","nodeType":"MemberAccess","src":"52765:14:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"52744:35:28"},{"assignments":[7608],"declarations":[{"constant":false,"id":7608,"mutability":"mutable","name":"numBorrowCaps","nameLocation":"52797:13:28","nodeType":"VariableDeclaration","scope":7660,"src":"52789:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7607,"name":"uint256","nodeType":"ElementaryTypeName","src":"52789:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7611,"initialValue":{"expression":{"id":7609,"name":"newBorrowCaps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7595,"src":"52813:13:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":7610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"52827:6:28","memberName":"length","nodeType":"MemberAccess","src":"52813:20:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"52789:44:28"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7613,"name":"numMarkets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7603,"src":"52852:10:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":7614,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"52866:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"52852:15:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7616,"name":"numMarkets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7603,"src":"52871:10:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":7617,"name":"numBorrowCaps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7608,"src":"52885:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"52871:27:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"52852:46:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e76616c696420696e707574","id":7620,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"52900:15:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_dbab81719f15ade78f76dcdbf7cff531fc5f9822fe7e8466ffdd2feb23510f3b","typeString":"literal_string \"invalid input\""},"value":"invalid input"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_dbab81719f15ade78f76dcdbf7cff531fc5f9822fe7e8466ffdd2feb23510f3b","typeString":"literal_string \"invalid input\""}],"id":7612,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"52844:7:28","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":7621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"52844:72:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7622,"nodeType":"ExpressionStatement","src":"52844:72:28"},{"expression":{"arguments":[{"id":7624,"name":"numMarkets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7603,"src":"52943:10:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7623,"name":"_ensureMaxLoops","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10334,"src":"52927:15:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":7625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"52927:27:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7626,"nodeType":"ExpressionStatement","src":"52927:27:28"},{"body":{"id":7658,"nodeType":"Block","src":"53002:136:28","statements":[{"expression":{"id":7647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":7636,"name":"borrowCaps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9517,"src":"53016:10:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":7643,"indexExpression":{"arguments":[{"baseExpression":{"id":7639,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7592,"src":"53035:7:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","typeString":"contract VToken[] calldata"}},"id":7641,"indexExpression":{"id":7640,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7628,"src":"53043:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"53035:10:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":7638,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"53027:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7637,"name":"address","nodeType":"ElementaryTypeName","src":"53027:7:28","typeDescriptions":{}}},"id":7642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"53027:19:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"53016:31:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":7644,"name":"newBorrowCaps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7595,"src":"53050:13:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":7646,"indexExpression":{"id":7645,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7628,"src":"53064:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"53050:16:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"53016:50:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7648,"nodeType":"ExpressionStatement","src":"53016:50:28"},{"eventCall":{"arguments":[{"baseExpression":{"id":7650,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7592,"src":"53098:7:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","typeString":"contract VToken[] calldata"}},"id":7652,"indexExpression":{"id":7651,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7628,"src":"53106:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"53098:10:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"baseExpression":{"id":7653,"name":"newBorrowCaps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7595,"src":"53110:13:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":7655,"indexExpression":{"id":7654,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7628,"src":"53124:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"53110:16:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7649,"name":"NewBorrowCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5199,"src":"53085:12:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_VToken_$15506_$_t_uint256_$returns$__$","typeString":"function (contract VToken,uint256)"}},"id":7656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"53085:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7657,"nodeType":"EmitStatement","src":"53080:47:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7630,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7628,"src":"52981:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7631,"name":"numMarkets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7603,"src":"52985:10:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"52981:14:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7659,"initializationExpression":{"assignments":[7628],"declarations":[{"constant":false,"id":7628,"mutability":"mutable","name":"i","nameLocation":"52978:1:28","nodeType":"VariableDeclaration","scope":7659,"src":"52970:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7627,"name":"uint256","nodeType":"ElementaryTypeName","src":"52970:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7629,"nodeType":"VariableDeclarationStatement","src":"52970:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":7634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"52997:3:28","subExpression":{"id":7633,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7628,"src":"52999:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7635,"nodeType":"ExpressionStatement","src":"52997:3:28"},"nodeType":"ForStatement","src":"52965:173:28"}]},"documentation":{"id":7588,"nodeType":"StructuredDocumentation","src":"51769:787:28","text":" @notice Set the given borrow caps for the given vToken markets. Borrowing that brings total borrows to or above borrow cap will revert.\n @dev This function is restricted by the AccessControlManager\n @dev A borrow cap of type(uint256).max corresponds to unlimited borrowing.\n @dev Borrow caps smaller than the current total borrows are accepted. This way, new borrows will not be allowed\nuntil the total borrows amount goes below the new borrow cap\n @param vTokens The addresses of the markets (tokens) to change the borrow caps for\n @param newBorrowCaps The new borrow cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited borrowing.\n @custom:access Controlled by AccessControlManager"},"functionSelector":"186db48f","id":7661,"implemented":true,"kind":"function","modifiers":[],"name":"setMarketBorrowCaps","nameLocation":"52570:19:28","nodeType":"FunctionDefinition","parameters":{"id":7596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7592,"mutability":"mutable","name":"vTokens","nameLocation":"52608:7:28","nodeType":"VariableDeclaration","scope":7661,"src":"52590:25:28","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":7590,"nodeType":"UserDefinedTypeName","pathNode":{"id":7589,"name":"VToken","nameLocations":["52590:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"52590:6:28"},"referencedDeclaration":15506,"src":"52590:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":7591,"nodeType":"ArrayTypeName","src":"52590:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"},{"constant":false,"id":7595,"mutability":"mutable","name":"newBorrowCaps","nameLocation":"52636:13:28","nodeType":"VariableDeclaration","scope":7661,"src":"52617:32:28","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7593,"name":"uint256","nodeType":"ElementaryTypeName","src":"52617:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7594,"nodeType":"ArrayTypeName","src":"52617:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"52589:61:28"},"returnParameters":{"id":7597,"nodeType":"ParameterList","parameters":[],"src":"52660:0:28"},"scope":9130,"src":"52561:583:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7733,"nodeType":"Block","src":"54034:502:28","statements":[{"expression":{"arguments":[{"hexValue":"7365744d61726b6574537570706c794361707328616464726573735b5d2c75696e743235365b5d29","id":7673,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"54064:42:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_d136af44ab35cbb1a4de86485d429e5d292595c4fc463bb3fc581975d38bb31e","typeString":"literal_string \"setMarketSupplyCaps(address[],uint256[])\""},"value":"setMarketSupplyCaps(address[],uint256[])"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_d136af44ab35cbb1a4de86485d429e5d292595c4fc463bb3fc581975d38bb31e","typeString":"literal_string \"setMarketSupplyCaps(address[],uint256[])\""}],"id":7672,"name":"_checkAccessAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5034,"src":"54044:19:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) view"}},"id":7674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54044:63:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7675,"nodeType":"ExpressionStatement","src":"54044:63:28"},{"assignments":[7677],"declarations":[{"constant":false,"id":7677,"mutability":"mutable","name":"vTokensCount","nameLocation":"54125:12:28","nodeType":"VariableDeclaration","scope":7733,"src":"54117:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7676,"name":"uint256","nodeType":"ElementaryTypeName","src":"54117:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7680,"initialValue":{"expression":{"id":7678,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7666,"src":"54140:7:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","typeString":"contract VToken[] calldata"}},"id":7679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"54148:6:28","memberName":"length","nodeType":"MemberAccess","src":"54140:14:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"54117:37:28"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7682,"name":"vTokensCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7677,"src":"54173:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":7683,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"54189:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"54173:17:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e76616c6964206e756d626572206f66206d61726b657473","id":7685,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"54192:27:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_f260407ad5875ca6920015bd8c4244b00453e8856f69e363e0217c410a4ba389","typeString":"literal_string \"invalid number of markets\""},"value":"invalid number of markets"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f260407ad5875ca6920015bd8c4244b00453e8856f69e363e0217c410a4ba389","typeString":"literal_string \"invalid number of markets\""}],"id":7681,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"54165:7:28","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":7686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54165:55:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7687,"nodeType":"ExpressionStatement","src":"54165:55:28"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7689,"name":"vTokensCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7677,"src":"54238:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":7690,"name":"newSupplyCaps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7669,"src":"54254:13:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":7691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"54268:6:28","memberName":"length","nodeType":"MemberAccess","src":"54254:20:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"54238:36:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e76616c6964206e756d626572206f66206d61726b657473","id":7693,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"54276:27:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_f260407ad5875ca6920015bd8c4244b00453e8856f69e363e0217c410a4ba389","typeString":"literal_string \"invalid number of markets\""},"value":"invalid number of markets"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f260407ad5875ca6920015bd8c4244b00453e8856f69e363e0217c410a4ba389","typeString":"literal_string \"invalid number of markets\""}],"id":7688,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"54230:7:28","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":7694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54230:74:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7695,"nodeType":"ExpressionStatement","src":"54230:74:28"},{"expression":{"arguments":[{"id":7697,"name":"vTokensCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7677,"src":"54331:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7696,"name":"_ensureMaxLoops","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10334,"src":"54315:15:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":7698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54315:29:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7699,"nodeType":"ExpressionStatement","src":"54315:29:28"},{"body":{"id":7731,"nodeType":"Block","src":"54394:136:28","statements":[{"expression":{"id":7720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":7709,"name":"supplyCaps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9525,"src":"54408:10:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":7716,"indexExpression":{"arguments":[{"baseExpression":{"id":7712,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7666,"src":"54427:7:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","typeString":"contract VToken[] calldata"}},"id":7714,"indexExpression":{"id":7713,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7701,"src":"54435:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"54427:10:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":7711,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"54419:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7710,"name":"address","nodeType":"ElementaryTypeName","src":"54419:7:28","typeDescriptions":{}}},"id":7715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54419:19:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"54408:31:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":7717,"name":"newSupplyCaps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7669,"src":"54442:13:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":7719,"indexExpression":{"id":7718,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7701,"src":"54456:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"54442:16:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"54408:50:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7721,"nodeType":"ExpressionStatement","src":"54408:50:28"},{"eventCall":{"arguments":[{"baseExpression":{"id":7723,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7666,"src":"54490:7:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","typeString":"contract VToken[] calldata"}},"id":7725,"indexExpression":{"id":7724,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7701,"src":"54498:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"54490:10:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"baseExpression":{"id":7726,"name":"newSupplyCaps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7669,"src":"54502:13:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":7728,"indexExpression":{"id":7727,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7701,"src":"54516:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"54502:16:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7722,"name":"NewSupplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5214,"src":"54477:12:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_VToken_$15506_$_t_uint256_$returns$__$","typeString":"function (contract VToken,uint256)"}},"id":7729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54477:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7730,"nodeType":"EmitStatement","src":"54472:47:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7703,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7701,"src":"54371:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7704,"name":"vTokensCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7677,"src":"54375:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"54371:16:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7732,"initializationExpression":{"assignments":[7701],"declarations":[{"constant":false,"id":7701,"mutability":"mutable","name":"i","nameLocation":"54368:1:28","nodeType":"VariableDeclaration","scope":7732,"src":"54360:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7700,"name":"uint256","nodeType":"ElementaryTypeName","src":"54360:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7702,"nodeType":"VariableDeclarationStatement","src":"54360:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":7707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"54389:3:28","subExpression":{"id":7706,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7701,"src":"54391:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7708,"nodeType":"ExpressionStatement","src":"54389:3:28"},"nodeType":"ForStatement","src":"54355:175:28"}]},"documentation":{"id":7662,"nodeType":"StructuredDocumentation","src":"53150:780:28","text":" @notice Set the given supply caps for the given vToken markets. Supply that brings total Supply to or above supply cap will revert.\n @dev This function is restricted by the AccessControlManager\n @dev A supply cap of type(uint256).max corresponds to unlimited supply.\n @dev Supply caps smaller than the current total supplies are accepted. This way, new supplies will not be allowed\nuntil the total supplies amount goes below the new supply cap\n @param vTokens The addresses of the markets (tokens) to change the supply caps for\n @param newSupplyCaps The new supply cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited supply.\n @custom:access Controlled by AccessControlManager"},"functionSelector":"d136af44","id":7734,"implemented":true,"kind":"function","modifiers":[],"name":"setMarketSupplyCaps","nameLocation":"53944:19:28","nodeType":"FunctionDefinition","parameters":{"id":7670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7666,"mutability":"mutable","name":"vTokens","nameLocation":"53982:7:28","nodeType":"VariableDeclaration","scope":7734,"src":"53964:25:28","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":7664,"nodeType":"UserDefinedTypeName","pathNode":{"id":7663,"name":"VToken","nameLocations":["53964:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"53964:6:28"},"referencedDeclaration":15506,"src":"53964:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":7665,"nodeType":"ArrayTypeName","src":"53964:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"},{"constant":false,"id":7669,"mutability":"mutable","name":"newSupplyCaps","nameLocation":"54010:13:28","nodeType":"VariableDeclaration","scope":7734,"src":"53991:32:28","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7667,"name":"uint256","nodeType":"ElementaryTypeName","src":"53991:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7668,"nodeType":"ArrayTypeName","src":"53991:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"53963:61:28"},"returnParameters":{"id":7671,"nodeType":"ParameterList","parameters":[],"src":"54034:0:28"},"scope":9130,"src":"53935:601:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7803,"nodeType":"Block","src":"55040:514:28","statements":[{"expression":{"arguments":[{"hexValue":"736574416374696f6e7350617573656428616464726573735b5d2c75696e743235365b5d2c626f6f6c29","id":7749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"55070:44:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_69de6398d77946a8bfdca1e3822e2f147e9f840710e7d641a3173301996f1b44","typeString":"literal_string \"setActionsPaused(address[],uint256[],bool)\""},"value":"setActionsPaused(address[],uint256[],bool)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_69de6398d77946a8bfdca1e3822e2f147e9f840710e7d641a3173301996f1b44","typeString":"literal_string \"setActionsPaused(address[],uint256[],bool)\""}],"id":7748,"name":"_checkAccessAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5034,"src":"55050:19:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) view"}},"id":7750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55050:65:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7751,"nodeType":"ExpressionStatement","src":"55050:65:28"},{"assignments":[7753],"declarations":[{"constant":false,"id":7753,"mutability":"mutable","name":"marketsCount","nameLocation":"55134:12:28","nodeType":"VariableDeclaration","scope":7803,"src":"55126:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7752,"name":"uint256","nodeType":"ElementaryTypeName","src":"55126:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7756,"initialValue":{"expression":{"id":7754,"name":"marketsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7739,"src":"55149:11:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","typeString":"contract VToken[] calldata"}},"id":7755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"55161:6:28","memberName":"length","nodeType":"MemberAccess","src":"55149:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"55126:41:28"},{"assignments":[7758],"declarations":[{"constant":false,"id":7758,"mutability":"mutable","name":"actionsCount","nameLocation":"55185:12:28","nodeType":"VariableDeclaration","scope":7803,"src":"55177:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7757,"name":"uint256","nodeType":"ElementaryTypeName","src":"55177:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7761,"initialValue":{"expression":{"id":7759,"name":"actionsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7743,"src":"55200:11:28","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_Action_$9148_$dyn_calldata_ptr","typeString":"enum Action[] calldata"}},"id":7760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"55212:6:28","memberName":"length","nodeType":"MemberAccess","src":"55200:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"55177:41:28"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7763,"name":"marketsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7753,"src":"55245:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":7764,"name":"actionsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7758,"src":"55260:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"55245:27:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7762,"name":"_ensureMaxLoops","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10334,"src":"55229:15:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":7766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55229:44:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7767,"nodeType":"ExpressionStatement","src":"55229:44:28"},{"body":{"id":7801,"nodeType":"Block","src":"55347:201:28","statements":[{"body":{"id":7799,"nodeType":"Block","src":"55424:114:28","statements":[{"expression":{"arguments":[{"arguments":[{"baseExpression":{"id":7789,"name":"marketsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7739,"src":"55467:11:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","typeString":"contract VToken[] calldata"}},"id":7791,"indexExpression":{"id":7790,"name":"marketIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7769,"src":"55479:9:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"55467:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":7788,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"55459:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7787,"name":"address","nodeType":"ElementaryTypeName","src":"55459:7:28","typeDescriptions":{}}},"id":7792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55459:31:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":7793,"name":"actionsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7743,"src":"55492:11:28","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_Action_$9148_$dyn_calldata_ptr","typeString":"enum Action[] calldata"}},"id":7795,"indexExpression":{"id":7794,"name":"actionIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7778,"src":"55504:9:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"55492:22:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}},{"id":7796,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7745,"src":"55516:6:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":7786,"name":"_setActionPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8661,"src":"55442:16:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_Action_$9148_$_t_bool_$returns$__$","typeString":"function (address,enum Action,bool)"}},"id":7797,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55442:81:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7798,"nodeType":"ExpressionStatement","src":"55442:81:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7780,"name":"actionIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7778,"src":"55385:9:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7781,"name":"actionsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7758,"src":"55397:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"55385:24:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7800,"initializationExpression":{"assignments":[7778],"declarations":[{"constant":false,"id":7778,"mutability":"mutable","name":"actionIdx","nameLocation":"55374:9:28","nodeType":"VariableDeclaration","scope":7800,"src":"55366:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7777,"name":"uint256","nodeType":"ElementaryTypeName","src":"55366:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7779,"nodeType":"VariableDeclarationStatement","src":"55366:17:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":7784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"55411:11:28","subExpression":{"id":7783,"name":"actionIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7778,"src":"55413:9:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7785,"nodeType":"ExpressionStatement","src":"55411:11:28"},"nodeType":"ForStatement","src":"55361:177:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7771,"name":"marketIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7769,"src":"55308:9:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7772,"name":"marketsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7753,"src":"55320:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"55308:24:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7802,"initializationExpression":{"assignments":[7769],"declarations":[{"constant":false,"id":7769,"mutability":"mutable","name":"marketIdx","nameLocation":"55297:9:28","nodeType":"VariableDeclaration","scope":7802,"src":"55289:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7768,"name":"uint256","nodeType":"ElementaryTypeName","src":"55289:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7770,"nodeType":"VariableDeclarationStatement","src":"55289:17:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":7775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"55334:11:28","subExpression":{"id":7774,"name":"marketIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7769,"src":"55336:9:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7776,"nodeType":"ExpressionStatement","src":"55334:11:28"},"nodeType":"ForStatement","src":"55284:264:28"}]},"documentation":{"id":7735,"nodeType":"StructuredDocumentation","src":"54542:383:28","text":" @notice Pause/unpause specified actions\n @dev This function is restricted by the AccessControlManager\n @param marketsList Markets to pause/unpause the actions on\n @param actionsList List of action ids to pause/unpause\n @param paused The new paused state (true=paused, false=unpaused)\n @custom:access Controlled by AccessControlManager"},"functionSelector":"24aaa220","id":7804,"implemented":true,"kind":"function","modifiers":[],"name":"setActionsPaused","nameLocation":"54939:16:28","nodeType":"FunctionDefinition","parameters":{"id":7746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7739,"mutability":"mutable","name":"marketsList","nameLocation":"54974:11:28","nodeType":"VariableDeclaration","scope":7804,"src":"54956:29:28","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":7737,"nodeType":"UserDefinedTypeName","pathNode":{"id":7736,"name":"VToken","nameLocations":["54956:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"54956:6:28"},"referencedDeclaration":15506,"src":"54956:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":7738,"nodeType":"ArrayTypeName","src":"54956:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"},{"constant":false,"id":7743,"mutability":"mutable","name":"actionsList","nameLocation":"55005:11:28","nodeType":"VariableDeclaration","scope":7804,"src":"54987:29:28","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_Action_$9148_$dyn_calldata_ptr","typeString":"enum Action[]"},"typeName":{"baseType":{"id":7741,"nodeType":"UserDefinedTypeName","pathNode":{"id":7740,"name":"Action","nameLocations":["54987:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":9148,"src":"54987:6:28"},"referencedDeclaration":9148,"src":"54987:6:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}},"id":7742,"nodeType":"ArrayTypeName","src":"54987:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_Action_$9148_$dyn_storage_ptr","typeString":"enum Action[]"}},"visibility":"internal"},{"constant":false,"id":7745,"mutability":"mutable","name":"paused","nameLocation":"55023:6:28","nodeType":"VariableDeclaration","scope":7804,"src":"55018:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7744,"name":"bool","nodeType":"ElementaryTypeName","src":"55018:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"54955:75:28"},"returnParameters":{"id":7747,"nodeType":"ParameterList","parameters":[],"src":"55040:0:28"},"scope":9130,"src":"54930:624:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7827,"nodeType":"Block","src":"56134:321:28","statements":[{"expression":{"arguments":[{"hexValue":"7365744d696e4c6971756964617461626c65436f6c6c61746572616c2875696e7432353629","id":7811,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"56164:39:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_520b6c74a7b4318a9a74c0842b24d35fe06934282050f0e9d72fa7b090bc6747","typeString":"literal_string \"setMinLiquidatableCollateral(uint256)\""},"value":"setMinLiquidatableCollateral(uint256)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_520b6c74a7b4318a9a74c0842b24d35fe06934282050f0e9d72fa7b090bc6747","typeString":"literal_string \"setMinLiquidatableCollateral(uint256)\""}],"id":7810,"name":"_checkAccessAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5034,"src":"56144:19:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) view"}},"id":7812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"56144:60:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7813,"nodeType":"ExpressionStatement","src":"56144:60:28"},{"assignments":[7815],"declarations":[{"constant":false,"id":7815,"mutability":"mutable","name":"oldMinLiquidatableCollateral","nameLocation":"56223:28:28","nodeType":"VariableDeclaration","scope":7827,"src":"56215:36:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7814,"name":"uint256","nodeType":"ElementaryTypeName","src":"56215:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7817,"initialValue":{"id":7816,"name":"minLiquidatableCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9520,"src":"56254:25:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"56215:64:28"},{"expression":{"id":7820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7818,"name":"minLiquidatableCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9520,"src":"56289:25:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7819,"name":"newMinLiquidatableCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7807,"src":"56317:28:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"56289:56:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7821,"nodeType":"ExpressionStatement","src":"56289:56:28"},{"eventCall":{"arguments":[{"id":7823,"name":"oldMinLiquidatableCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7815,"src":"56389:28:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7824,"name":"newMinLiquidatableCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7807,"src":"56419:28:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7822,"name":"NewMinLiquidatableCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5206,"src":"56360:28:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":7825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"56360:88:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7826,"nodeType":"EmitStatement","src":"56355:93:28"}]},"documentation":{"id":7805,"nodeType":"StructuredDocumentation","src":"55560:484:28","text":" @notice Set the given collateral threshold for non-batch liquidations. Regular liquidations\n   will fail if the collateral amount is less than this threshold. Liquidators should use batch\n   operations like liquidateAccount or healAccount.\n @dev This function is restricted by the AccessControlManager\n @param newMinLiquidatableCollateral The new min liquidatable collateral (in USD).\n @custom:access Controlled by AccessControlManager"},"functionSelector":"520b6c74","id":7828,"implemented":true,"kind":"function","modifiers":[],"name":"setMinLiquidatableCollateral","nameLocation":"56058:28:28","nodeType":"FunctionDefinition","parameters":{"id":7808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7807,"mutability":"mutable","name":"newMinLiquidatableCollateral","nameLocation":"56095:28:28","nodeType":"VariableDeclaration","scope":7828,"src":"56087:36:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7806,"name":"uint256","nodeType":"ElementaryTypeName","src":"56087:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"56086:38:28"},"returnParameters":{"id":7809,"nodeType":"ParameterList","parameters":[],"src":"56134:0:28"},"scope":9130,"src":"56049:406:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7914,"nodeType":"Block","src":"57055:645:28","statements":[{"expression":{"arguments":[{"id":7844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"57073:55:28","subExpression":{"baseExpression":{"id":7838,"name":"rewardsDistributorExists","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9541,"src":"57074:24:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":7843,"indexExpression":{"arguments":[{"id":7841,"name":"_rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7832,"src":"57107:19:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}],"id":7840,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"57099:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7839,"name":"address","nodeType":"ElementaryTypeName","src":"57099:7:28","typeDescriptions":{}}},"id":7842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57099:28:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"57074:54:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616c726561647920657869737473","id":7845,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"57130:16:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_61ffe8d71e53165b47fbc4657a5b6dca84fa425e33e0a21288981e17a8238fcd","typeString":"literal_string \"already exists\""},"value":"already exists"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_61ffe8d71e53165b47fbc4657a5b6dca84fa425e33e0a21288981e17a8238fcd","typeString":"literal_string \"already exists\""}],"id":7837,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"57065:7:28","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":7846,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57065:82:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7847,"nodeType":"ExpressionStatement","src":"57065:82:28"},{"assignments":[7849],"declarations":[{"constant":false,"id":7849,"mutability":"mutable","name":"rewardsDistributorsLen","nameLocation":"57166:22:28","nodeType":"VariableDeclaration","scope":7914,"src":"57158:30:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7848,"name":"uint256","nodeType":"ElementaryTypeName","src":"57158:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7852,"initialValue":{"expression":{"id":7850,"name":"rewardsDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9537,"src":"57191:19:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage","typeString":"contract RewardsDistributor[] storage ref"}},"id":7851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"57211:6:28","memberName":"length","nodeType":"MemberAccess","src":"57191:26:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"57158:59:28"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7854,"name":"rewardsDistributorsLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7849,"src":"57243:22:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":7855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"57268:1:28","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"57243:26:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7853,"name":"_ensureMaxLoops","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10334,"src":"57227:15:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":7857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57227:43:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7858,"nodeType":"ExpressionStatement","src":"57227:43:28"},{"expression":{"arguments":[{"id":7862,"name":"_rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7832,"src":"57306:19:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}],"expression":{"id":7859,"name":"rewardsDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9537,"src":"57281:19:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage","typeString":"contract RewardsDistributor[] storage ref"}},"id":7861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"57301:4:28","memberName":"push","nodeType":"MemberAccess","src":"57281:24:28","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage_ptr_$_t_contract$_RewardsDistributor_$12324_$returns$__$attached_to$_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage_ptr_$","typeString":"function (contract RewardsDistributor[] storage pointer,contract RewardsDistributor)"}},"id":7863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57281:45:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7864,"nodeType":"ExpressionStatement","src":"57281:45:28"},{"expression":{"id":7872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":7865,"name":"rewardsDistributorExists","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9541,"src":"57336:24:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":7870,"indexExpression":{"arguments":[{"id":7868,"name":"_rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7832,"src":"57369:19:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}],"id":7867,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"57361:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7866,"name":"address","nodeType":"ElementaryTypeName","src":"57361:7:28","typeDescriptions":{}}},"id":7869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57361:28:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"57336:54:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":7871,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"57393:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"57336:61:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7873,"nodeType":"ExpressionStatement","src":"57336:61:28"},{"assignments":[7875],"declarations":[{"constant":false,"id":7875,"mutability":"mutable","name":"marketsCount","nameLocation":"57416:12:28","nodeType":"VariableDeclaration","scope":7914,"src":"57408:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7874,"name":"uint256","nodeType":"ElementaryTypeName","src":"57408:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7878,"initialValue":{"expression":{"id":7876,"name":"allMarkets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9512,"src":"57431:10:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage","typeString":"contract VToken[] storage ref"}},"id":7877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"57442:6:28","memberName":"length","nodeType":"MemberAccess","src":"57431:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"57408:40:28"},{"body":{"id":7899,"nodeType":"Block","src":"57498:85:28","statements":[{"expression":{"arguments":[{"arguments":[{"baseExpression":{"id":7893,"name":"allMarkets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9512,"src":"57557:10:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage","typeString":"contract VToken[] storage ref"}},"id":7895,"indexExpression":{"id":7894,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7880,"src":"57568:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"57557:13:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":7892,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"57549:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7891,"name":"address","nodeType":"ElementaryTypeName","src":"57549:7:28","typeDescriptions":{}}},"id":7896,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57549:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7888,"name":"_rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7832,"src":"57512:19:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":7890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"57532:16:28","memberName":"initializeMarket","nodeType":"MemberAccess","referencedDeclaration":10657,"src":"57512:36:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":7897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57512:60:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7898,"nodeType":"ExpressionStatement","src":"57512:60:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7882,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7880,"src":"57475:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7883,"name":"marketsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7875,"src":"57479:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"57475:16:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7900,"initializationExpression":{"assignments":[7880],"declarations":[{"constant":false,"id":7880,"mutability":"mutable","name":"i","nameLocation":"57472:1:28","nodeType":"VariableDeclaration","scope":7900,"src":"57464:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7879,"name":"uint256","nodeType":"ElementaryTypeName","src":"57464:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7881,"nodeType":"VariableDeclarationStatement","src":"57464:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":7886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"57493:3:28","subExpression":{"id":7885,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7880,"src":"57495:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7887,"nodeType":"ExpressionStatement","src":"57493:3:28"},"nodeType":"ForStatement","src":"57459:124:28"},{"eventCall":{"arguments":[{"arguments":[{"id":7904,"name":"_rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7832,"src":"57628:19:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}],"id":7903,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"57620:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7902,"name":"address","nodeType":"ElementaryTypeName","src":"57620:7:28","typeDescriptions":{}}},"id":7905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57620:28:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7908,"name":"_rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7832,"src":"57658:19:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":7909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"57678:11:28","memberName":"rewardToken","nodeType":"MemberAccess","referencedDeclaration":12402,"src":"57658:31:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IERC20Upgradeable_$1352_$","typeString":"function () view external returns (contract IERC20Upgradeable)"}},"id":7910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57658:33:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}],"id":7907,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"57650:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7906,"name":"address","nodeType":"ElementaryTypeName","src":"57650:7:28","typeDescriptions":{}}},"id":7911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57650:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":7901,"name":"NewRewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5221,"src":"57598:21:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":7912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57598:95:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7913,"nodeType":"EmitStatement","src":"57593:100:28"}]},"documentation":{"id":7829,"nodeType":"StructuredDocumentation","src":"56461:499:28","text":" @notice Add a new RewardsDistributor and initialize it with all markets. We can add several RewardsDistributor\n contracts with the same rewardToken, and there could be overlaping among them considering the last reward slot (block or second)\n @dev Only callable by the admin\n @param _rewardsDistributor Address of the RewardDistributor contract to add\n @custom:access Only Governance\n @custom:event Emits NewRewardsDistributor with distributor address"},"functionSelector":"56aaee2d","id":7915,"implemented":true,"kind":"function","modifiers":[{"id":7835,"kind":"modifierInvocation","modifierName":{"id":7834,"name":"onlyOwner","nameLocations":["57045:9:28"],"nodeType":"IdentifierPath","referencedDeclaration":153,"src":"57045:9:28"},"nodeType":"ModifierInvocation","src":"57045:9:28"}],"name":"addRewardsDistributor","nameLocation":"56974:21:28","nodeType":"FunctionDefinition","parameters":{"id":7833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7832,"mutability":"mutable","name":"_rewardsDistributor","nameLocation":"57015:19:28","nodeType":"VariableDeclaration","scope":7915,"src":"56996:38:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"},"typeName":{"id":7831,"nodeType":"UserDefinedTypeName","pathNode":{"id":7830,"name":"RewardsDistributor","nameLocations":["56996:18:28"],"nodeType":"IdentifierPath","referencedDeclaration":12324,"src":"56996:18:28"},"referencedDeclaration":12324,"src":"56996:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"visibility":"internal"}],"src":"56995:40:28"},"returnParameters":{"id":7836,"nodeType":"ParameterList","parameters":[],"src":"57055:0:28"},"scope":9130,"src":"56965:735:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7945,"nodeType":"Block","src":"58104:190:28","statements":[{"expression":{"arguments":[{"arguments":[{"id":7927,"name":"newOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7919,"src":"58143:9:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}],"id":7926,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"58135:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7925,"name":"address","nodeType":"ElementaryTypeName","src":"58135:7:28","typeDescriptions":{}}},"id":7928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"58135:18:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7924,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16143,"src":"58114:20:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":7929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"58114:40:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7930,"nodeType":"ExpressionStatement","src":"58114:40:28"},{"assignments":[7933],"declarations":[{"constant":false,"id":7933,"mutability":"mutable","name":"oldOracle","nameLocation":"58190:9:28","nodeType":"VariableDeclaration","scope":7945,"src":"58165:34:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"},"typeName":{"id":7932,"nodeType":"UserDefinedTypeName","pathNode":{"id":7931,"name":"ResilientOracleInterface","nameLocations":["58165:24:28"],"nodeType":"IdentifierPath","referencedDeclaration":16173,"src":"58165:24:28"},"referencedDeclaration":16173,"src":"58165:24:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"visibility":"internal"}],"id":7935,"initialValue":{"id":7934,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9488,"src":"58202:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"nodeType":"VariableDeclarationStatement","src":"58165:43:28"},{"expression":{"id":7938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7936,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9488,"src":"58218:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7937,"name":"newOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7919,"src":"58227:9:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"src":"58218:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"id":7939,"nodeType":"ExpressionStatement","src":"58218:18:28"},{"eventCall":{"arguments":[{"id":7941,"name":"oldOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7933,"src":"58266:9:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},{"id":7942,"name":"newOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7919,"src":"58277:9:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"},{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}],"id":7940,"name":"NewPriceOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5180,"src":"58251:14:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_ResilientOracleInterface_$16173_$_t_contract$_ResilientOracleInterface_$16173_$returns$__$","typeString":"function (contract ResilientOracleInterface,contract ResilientOracleInterface)"}},"id":7943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"58251:36:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7944,"nodeType":"EmitStatement","src":"58246:41:28"}]},"documentation":{"id":7916,"nodeType":"StructuredDocumentation","src":"57706:314:28","text":" @notice Sets a new price oracle for the Comptroller\n @dev Only callable by the admin\n @param newOracle Address of the new price oracle to set\n @custom:event Emits NewPriceOracle on success\n @custom:error ZeroAddressNotAllowed is thrown when the new oracle address is zero"},"functionSelector":"530e784f","id":7946,"implemented":true,"kind":"function","modifiers":[{"id":7922,"kind":"modifierInvocation","modifierName":{"id":7921,"name":"onlyOwner","nameLocations":["58094:9:28"],"nodeType":"IdentifierPath","referencedDeclaration":153,"src":"58094:9:28"},"nodeType":"ModifierInvocation","src":"58094:9:28"}],"name":"setPriceOracle","nameLocation":"58034:14:28","nodeType":"FunctionDefinition","parameters":{"id":7920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7919,"mutability":"mutable","name":"newOracle","nameLocation":"58074:9:28","nodeType":"VariableDeclaration","scope":7946,"src":"58049:34:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"},"typeName":{"id":7918,"nodeType":"UserDefinedTypeName","pathNode":{"id":7917,"name":"ResilientOracleInterface","nameLocations":["58049:24:28"],"nodeType":"IdentifierPath","referencedDeclaration":16173,"src":"58049:24:28"},"referencedDeclaration":16173,"src":"58049:24:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"visibility":"internal"}],"src":"58048:36:28"},"returnParameters":{"id":7923,"nodeType":"ParameterList","parameters":[],"src":"58104:0:28"},"scope":9130,"src":"58025:269:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7958,"nodeType":"Block","src":"58503:41:28","statements":[{"expression":{"arguments":[{"id":7955,"name":"limit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7949,"src":"58531:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7954,"name":"_setMaxLoopsLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10317,"src":"58513:17:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":7956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"58513:24:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7957,"nodeType":"ExpressionStatement","src":"58513:24:28"}]},"documentation":{"id":7947,"nodeType":"StructuredDocumentation","src":"58300:138:28","text":" @notice Set the for loop iteration limit to avoid DOS\n @param limit Limit for the max loops can execute at a time"},"functionSelector":"80d45a2d","id":7959,"implemented":true,"kind":"function","modifiers":[{"id":7952,"kind":"modifierInvocation","modifierName":{"id":7951,"name":"onlyOwner","nameLocations":["58493:9:28"],"nodeType":"IdentifierPath","referencedDeclaration":153,"src":"58493:9:28"},"nodeType":"ModifierInvocation","src":"58493:9:28"}],"name":"setMaxLoopsLimit","nameLocation":"58452:16:28","nodeType":"FunctionDefinition","parameters":{"id":7950,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7949,"mutability":"mutable","name":"limit","nameLocation":"58477:5:28","nodeType":"VariableDeclaration","scope":7959,"src":"58469:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7948,"name":"uint256","nodeType":"ElementaryTypeName","src":"58469:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"58468:15:28"},"returnParameters":{"id":7953,"nodeType":"ParameterList","parameters":[],"src":"58503:0:28"},"scope":9130,"src":"58443:101:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7984,"nodeType":"Block","src":"58739:122:28","statements":[{"expression":{"arguments":[{"arguments":[{"id":7971,"name":"_prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7963,"src":"58778:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}],"id":7970,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"58770:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7969,"name":"address","nodeType":"ElementaryTypeName","src":"58770:7:28","typeDescriptions":{}}},"id":7972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"58770:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7968,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16143,"src":"58749:20:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":7973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"58749:37:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7974,"nodeType":"ExpressionStatement","src":"58749:37:28"},{"eventCall":{"arguments":[{"id":7976,"name":"prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9562,"src":"58816:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}},{"id":7977,"name":"_prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7963,"src":"58823:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"},{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}],"id":7975,"name":"NewPrimeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5236,"src":"58802:13:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IPrime_$16613_$_t_contract$_IPrime_$16613_$returns$__$","typeString":"function (contract IPrime,contract IPrime)"}},"id":7978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"58802:28:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7979,"nodeType":"EmitStatement","src":"58797:33:28"},{"expression":{"id":7982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7980,"name":"prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9562,"src":"58840:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7981,"name":"_prime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7963,"src":"58848:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}},"src":"58840:14:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}},"id":7983,"nodeType":"ExpressionStatement","src":"58840:14:28"}]},"documentation":{"id":7960,"nodeType":"StructuredDocumentation","src":"58550:127:28","text":" @notice Sets the prime token contract for the comptroller\n @param _prime Address of the Prime contract"},"functionSelector":"c32094c7","id":7985,"implemented":true,"kind":"function","modifiers":[{"id":7966,"kind":"modifierInvocation","modifierName":{"id":7965,"name":"onlyOwner","nameLocations":["58729:9:28"],"nodeType":"IdentifierPath","referencedDeclaration":153,"src":"58729:9:28"},"nodeType":"ModifierInvocation","src":"58729:9:28"}],"name":"setPrimeToken","nameLocation":"58691:13:28","nodeType":"FunctionDefinition","parameters":{"id":7964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7963,"mutability":"mutable","name":"_prime","nameLocation":"58712:6:28","nodeType":"VariableDeclaration","scope":7985,"src":"58705:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"},"typeName":{"id":7962,"nodeType":"UserDefinedTypeName","pathNode":{"id":7961,"name":"IPrime","nameLocations":["58705:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":16613,"src":"58705:6:28"},"referencedDeclaration":16613,"src":"58705:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}},"visibility":"internal"}],"src":"58704:15:28"},"returnParameters":{"id":7967,"nodeType":"ParameterList","parameters":[],"src":"58739:0:28"},"scope":9130,"src":"58682:179:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8023,"nodeType":"Block","src":"59237:366:28","statements":[{"expression":{"arguments":[{"hexValue":"736574466f726365644c69717569646174696f6e28616464726573732c626f6f6c29","id":7994,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"59267:36:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_8b3113f66e9d5ac55035883d686d8e5180603561cd363213070473fb4e371c42","typeString":"literal_string \"setForcedLiquidation(address,bool)\""},"value":"setForcedLiquidation(address,bool)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_8b3113f66e9d5ac55035883d686d8e5180603561cd363213070473fb4e371c42","typeString":"literal_string \"setForcedLiquidation(address,bool)\""}],"id":7993,"name":"_checkAccessAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5034,"src":"59247:19:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) view"}},"id":7995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"59247:57:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7996,"nodeType":"ExpressionStatement","src":"59247:57:28"},{"expression":{"arguments":[{"id":7998,"name":"vTokenBorrowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7988,"src":"59335:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7997,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16143,"src":"59314:20:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":7999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"59314:36:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8000,"nodeType":"ExpressionStatement","src":"59314:36:28"},{"condition":{"id":8005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"59365:33:28","subExpression":{"expression":{"baseExpression":{"id":8001,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"59366:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":8003,"indexExpression":{"id":8002,"name":"vTokenBorrowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7988,"src":"59374:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"59366:23:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"id":8004,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"59390:8:28","memberName":"isListed","nodeType":"MemberAccess","referencedDeclaration":9475,"src":"59366:32:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8011,"nodeType":"IfStatement","src":"59361:102:28","trueBody":{"id":8010,"nodeType":"Block","src":"59400:63:28","statements":[{"errorCall":{"arguments":[{"id":8007,"name":"vTokenBorrowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7988,"src":"59437:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8006,"name":"MarketNotListed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5287,"src":"59421:15:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":8008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"59421:31:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8009,"nodeType":"RevertStatement","src":"59414:38:28"}]}},{"expression":{"id":8016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8012,"name":"isForcedLiquidationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9546,"src":"59473:26:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":8014,"indexExpression":{"id":8013,"name":"vTokenBorrowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7988,"src":"59500:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"59473:42:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8015,"name":"enable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7990,"src":"59518:6:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"59473:51:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8017,"nodeType":"ExpressionStatement","src":"59473:51:28"},{"eventCall":{"arguments":[{"id":8019,"name":"vTokenBorrowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7988,"src":"59573:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8020,"name":"enable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7990,"src":"59589:6:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8018,"name":"IsForcedLiquidationEnabledUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5243,"src":"59539:33:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":8021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"59539:57:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8022,"nodeType":"EmitStatement","src":"59534:62:28"}]},"documentation":{"id":7986,"nodeType":"StructuredDocumentation","src":"58867:289:28","text":" @notice Enables forced liquidations for a market. If forced liquidation is enabled,\n borrows in the market may be liquidated regardless of the account liquidity\n @param vTokenBorrowed Borrowed vToken\n @param enable Whether to enable forced liquidations"},"functionSelector":"8b3113f6","id":8024,"implemented":true,"kind":"function","modifiers":[],"name":"setForcedLiquidation","nameLocation":"59170:20:28","nodeType":"FunctionDefinition","parameters":{"id":7991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7988,"mutability":"mutable","name":"vTokenBorrowed","nameLocation":"59199:14:28","nodeType":"VariableDeclaration","scope":8024,"src":"59191:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7987,"name":"address","nodeType":"ElementaryTypeName","src":"59191:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7990,"mutability":"mutable","name":"enable","nameLocation":"59220:6:28","nodeType":"VariableDeclaration","scope":8024,"src":"59215:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7989,"name":"bool","nodeType":"ElementaryTypeName","src":"59215:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"59190:37:28"},"returnParameters":{"id":7992,"nodeType":"ParameterList","parameters":[],"src":"59237:0:28"},"scope":9130,"src":"59161:442:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8051,"nodeType":"Block","src":"60279:190:28","statements":[{"assignments":[8038],"declarations":[{"constant":false,"id":8038,"mutability":"mutable","name":"snapshot","nameLocation":"60321:8:28","nodeType":"VariableDeclaration","scope":8051,"src":"60289:40:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot"},"typeName":{"id":8037,"nodeType":"UserDefinedTypeName","pathNode":{"id":8036,"name":"AccountLiquiditySnapshot","nameLocations":["60289:24:28"],"nodeType":"IdentifierPath","referencedDeclaration":9466,"src":"60289:24:28"},"referencedDeclaration":9466,"src":"60289:24:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_storage_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot"}},"visibility":"internal"}],"id":8043,"initialValue":{"arguments":[{"id":8040,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8027,"src":"60361:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8041,"name":"_getLiquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9041,"src":"60370:24:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp memory)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp memory)"}],"id":8039,"name":"_getCurrentLiquiditySnapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8758,"src":"60332:28:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$_$returns$_t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr_$","typeString":"function (address,function (contract VToken) view returns (struct ExponentialNoError.Exp memory)) view returns (struct ComptrollerStorage.AccountLiquiditySnapshot memory)"}},"id":8042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"60332:63:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"nodeType":"VariableDeclarationStatement","src":"60289:106:28"},{"expression":{"components":[{"id":8044,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9549,"src":"60413:8:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8045,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8038,"src":"60423:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8046,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"60432:9:28","memberName":"liquidity","nodeType":"MemberAccess","referencedDeclaration":9463,"src":"60423:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8047,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8038,"src":"60443:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8048,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"60452:9:28","memberName":"shortfall","nodeType":"MemberAccess","referencedDeclaration":9465,"src":"60443:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8049,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"60412:50:28","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"functionReturnParameters":8035,"id":8050,"nodeType":"Return","src":"60405:57:28"}]},"documentation":{"id":8025,"nodeType":"StructuredDocumentation","src":"59609:529:28","text":" @notice Determine the current account liquidity with respect to liquidation threshold requirements\n @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\n @param account The account get liquidity for\n @return error Always NO_ERROR for compatibility with Venus core tooling\n @return liquidity Account liquidity in excess of liquidation threshold requirements,\n @return shortfall Account shortfall below liquidation threshold requirements"},"functionSelector":"5ec88c79","id":8052,"implemented":true,"kind":"function","modifiers":[],"name":"getAccountLiquidity","nameLocation":"60152:19:28","nodeType":"FunctionDefinition","parameters":{"id":8028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8027,"mutability":"mutable","name":"account","nameLocation":"60189:7:28","nodeType":"VariableDeclaration","scope":8052,"src":"60181:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8026,"name":"address","nodeType":"ElementaryTypeName","src":"60181:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"60171:31:28"},"returnParameters":{"id":8035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8030,"mutability":"mutable","name":"error","nameLocation":"60234:5:28","nodeType":"VariableDeclaration","scope":8052,"src":"60226:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8029,"name":"uint256","nodeType":"ElementaryTypeName","src":"60226:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8032,"mutability":"mutable","name":"liquidity","nameLocation":"60249:9:28","nodeType":"VariableDeclaration","scope":8052,"src":"60241:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8031,"name":"uint256","nodeType":"ElementaryTypeName","src":"60241:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8034,"mutability":"mutable","name":"shortfall","nameLocation":"60268:9:28","nodeType":"VariableDeclaration","scope":8052,"src":"60260:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8033,"name":"uint256","nodeType":"ElementaryTypeName","src":"60260:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"60225:53:28"},"scope":9130,"src":"60143:326:28","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8079,"nodeType":"Block","src":"61110:186:28","statements":[{"assignments":[8066],"declarations":[{"constant":false,"id":8066,"mutability":"mutable","name":"snapshot","nameLocation":"61152:8:28","nodeType":"VariableDeclaration","scope":8079,"src":"61120:40:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot"},"typeName":{"id":8065,"nodeType":"UserDefinedTypeName","pathNode":{"id":8064,"name":"AccountLiquiditySnapshot","nameLocations":["61120:24:28"],"nodeType":"IdentifierPath","referencedDeclaration":9466,"src":"61120:24:28"},"referencedDeclaration":9466,"src":"61120:24:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_storage_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot"}},"visibility":"internal"}],"id":8071,"initialValue":{"arguments":[{"id":8068,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8055,"src":"61192:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8069,"name":"_getCollateralFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9020,"src":"61201:20:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp memory)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp memory)"}],"id":8067,"name":"_getCurrentLiquiditySnapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8758,"src":"61163:28:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$_$returns$_t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr_$","typeString":"function (address,function (contract VToken) view returns (struct ExponentialNoError.Exp memory)) view returns (struct ComptrollerStorage.AccountLiquiditySnapshot memory)"}},"id":8070,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"61163:59:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"nodeType":"VariableDeclarationStatement","src":"61120:102:28"},{"expression":{"components":[{"id":8072,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9549,"src":"61240:8:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8073,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8066,"src":"61250:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8074,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"61259:9:28","memberName":"liquidity","nodeType":"MemberAccess","referencedDeclaration":9463,"src":"61250:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8075,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8066,"src":"61270:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8076,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"61279:9:28","memberName":"shortfall","nodeType":"MemberAccess","referencedDeclaration":9465,"src":"61270:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8077,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"61239:50:28","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"functionReturnParameters":8063,"id":8078,"nodeType":"Return","src":"61232:57:28"}]},"documentation":{"id":8053,"nodeType":"StructuredDocumentation","src":"60475:496:28","text":" @notice Determine the current account liquidity with respect to collateral requirements\n @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\n @param account The account get liquidity for\n @return error Always NO_ERROR for compatibility with Venus core tooling\n @return liquidity Account liquidity in excess of collateral requirements,\n @return shortfall Account shortfall below collateral requirements"},"functionSelector":"528a174c","id":8080,"implemented":true,"kind":"function","modifiers":[],"name":"getBorrowingPower","nameLocation":"60985:17:28","nodeType":"FunctionDefinition","parameters":{"id":8056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8055,"mutability":"mutable","name":"account","nameLocation":"61020:7:28","nodeType":"VariableDeclaration","scope":8080,"src":"61012:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8054,"name":"address","nodeType":"ElementaryTypeName","src":"61012:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"61002:31:28"},"returnParameters":{"id":8063,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8058,"mutability":"mutable","name":"error","nameLocation":"61065:5:28","nodeType":"VariableDeclaration","scope":8080,"src":"61057:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8057,"name":"uint256","nodeType":"ElementaryTypeName","src":"61057:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8060,"mutability":"mutable","name":"liquidity","nameLocation":"61080:9:28","nodeType":"VariableDeclaration","scope":8080,"src":"61072:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8059,"name":"uint256","nodeType":"ElementaryTypeName","src":"61072:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8062,"mutability":"mutable","name":"shortfall","nameLocation":"61099:9:28","nodeType":"VariableDeclaration","scope":8080,"src":"61091:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8061,"name":"uint256","nodeType":"ElementaryTypeName","src":"61091:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"61056:53:28"},"scope":9130,"src":"60976:320:28","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8118,"nodeType":"Block","src":"62309:311:28","statements":[{"assignments":[8100],"declarations":[{"constant":false,"id":8100,"mutability":"mutable","name":"snapshot","nameLocation":"62351:8:28","nodeType":"VariableDeclaration","scope":8118,"src":"62319:40:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot"},"typeName":{"id":8099,"nodeType":"UserDefinedTypeName","pathNode":{"id":8098,"name":"AccountLiquiditySnapshot","nameLocations":["62319:24:28"],"nodeType":"IdentifierPath","referencedDeclaration":9466,"src":"62319:24:28"},"referencedDeclaration":9466,"src":"62319:24:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_storage_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot"}},"visibility":"internal"}],"id":8110,"initialValue":{"arguments":[{"id":8102,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8083,"src":"62409:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":8104,"name":"vTokenModify","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8085,"src":"62437:12:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8103,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"62430:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":8105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"62430:20:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"id":8106,"name":"redeemTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8087,"src":"62464:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8107,"name":"borrowAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8089,"src":"62490:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8108,"name":"_getCollateralFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9020,"src":"62516:20:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp memory)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp memory)"}],"id":8101,"name":"_getHypotheticalLiquiditySnapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8965,"src":"62362:33:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_contract$_VToken_$15506_$_t_uint256_$_t_uint256_$_t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$_$returns$_t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr_$","typeString":"function (address,contract VToken,uint256,uint256,function (contract VToken) view returns (struct ExponentialNoError.Exp memory)) view returns (struct ComptrollerStorage.AccountLiquiditySnapshot memory)"}},"id":8109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"62362:184:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"nodeType":"VariableDeclarationStatement","src":"62319:227:28"},{"expression":{"components":[{"id":8111,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9549,"src":"62564:8:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8112,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8100,"src":"62574:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8113,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"62583:9:28","memberName":"liquidity","nodeType":"MemberAccess","referencedDeclaration":9463,"src":"62574:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8114,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8100,"src":"62594:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8115,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"62603:9:28","memberName":"shortfall","nodeType":"MemberAccess","referencedDeclaration":9465,"src":"62594:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8116,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"62563:50:28","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"functionReturnParameters":8097,"id":8117,"nodeType":"Return","src":"62556:57:28"}]},"documentation":{"id":8081,"nodeType":"StructuredDocumentation","src":"61302:764:28","text":" @notice Determine what the account liquidity would be if the given amounts were redeemed/borrowed\n @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\n @param vTokenModify The market to hypothetically redeem/borrow in\n @param account The account to determine liquidity for\n @param redeemTokens The number of tokens to hypothetically redeem\n @param borrowAmount The amount of underlying to hypothetically borrow\n @return error Always NO_ERROR for compatibility with Venus core tooling\n @return liquidity Hypothetical account liquidity in excess of collateral requirements,\n @return shortfall Hypothetical account shortfall below collateral requirements"},"functionSelector":"4e79238f","id":8119,"implemented":true,"kind":"function","modifiers":[],"name":"getHypotheticalAccountLiquidity","nameLocation":"62080:31:28","nodeType":"FunctionDefinition","parameters":{"id":8090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8083,"mutability":"mutable","name":"account","nameLocation":"62129:7:28","nodeType":"VariableDeclaration","scope":8119,"src":"62121:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8082,"name":"address","nodeType":"ElementaryTypeName","src":"62121:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8085,"mutability":"mutable","name":"vTokenModify","nameLocation":"62154:12:28","nodeType":"VariableDeclaration","scope":8119,"src":"62146:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8084,"name":"address","nodeType":"ElementaryTypeName","src":"62146:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8087,"mutability":"mutable","name":"redeemTokens","nameLocation":"62184:12:28","nodeType":"VariableDeclaration","scope":8119,"src":"62176:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8086,"name":"uint256","nodeType":"ElementaryTypeName","src":"62176:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8089,"mutability":"mutable","name":"borrowAmount","nameLocation":"62214:12:28","nodeType":"VariableDeclaration","scope":8119,"src":"62206:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8088,"name":"uint256","nodeType":"ElementaryTypeName","src":"62206:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"62111:121:28"},"returnParameters":{"id":8097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8092,"mutability":"mutable","name":"error","nameLocation":"62264:5:28","nodeType":"VariableDeclaration","scope":8119,"src":"62256:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8091,"name":"uint256","nodeType":"ElementaryTypeName","src":"62256:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8094,"mutability":"mutable","name":"liquidity","nameLocation":"62279:9:28","nodeType":"VariableDeclaration","scope":8119,"src":"62271:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8093,"name":"uint256","nodeType":"ElementaryTypeName","src":"62271:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8096,"mutability":"mutable","name":"shortfall","nameLocation":"62298:9:28","nodeType":"VariableDeclaration","scope":8119,"src":"62290:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8095,"name":"uint256","nodeType":"ElementaryTypeName","src":"62290:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"62255:53:28"},"scope":9130,"src":"62071:549:28","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[9342],"body":{"id":8130,"nodeType":"Block","src":"62886:34:28","statements":[{"expression":{"id":8128,"name":"allMarkets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9512,"src":"62903:10:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage","typeString":"contract VToken[] storage ref"}},"functionReturnParameters":8127,"id":8129,"nodeType":"Return","src":"62896:17:28"}]},"documentation":{"id":8120,"nodeType":"StructuredDocumentation","src":"62626:181:28","text":" @notice Return all of the markets\n @dev The automatic getter may be used to access an individual market.\n @return markets The list of market addresses"},"functionSelector":"b0772d0b","id":8131,"implemented":true,"kind":"function","modifiers":[],"name":"getAllMarkets","nameLocation":"62821:13:28","nodeType":"FunctionDefinition","overrides":{"id":8122,"nodeType":"OverrideSpecifier","overrides":[],"src":"62851:8:28"},"parameters":{"id":8121,"nodeType":"ParameterList","parameters":[],"src":"62834:2:28"},"returnParameters":{"id":8127,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8126,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8131,"src":"62869:15:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":8124,"nodeType":"UserDefinedTypeName","pathNode":{"id":8123,"name":"VToken","nameLocations":["62869:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"62869:6:28"},"referencedDeclaration":15506,"src":"62869:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":8125,"nodeType":"ArrayTypeName","src":"62869:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"}],"src":"62868:17:28"},"scope":9130,"src":"62812:108:28","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8148,"nodeType":"Block","src":"63185:57:28","statements":[{"expression":{"expression":{"baseExpression":{"id":8140,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"63202:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":8145,"indexExpression":{"arguments":[{"id":8143,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8135,"src":"63218:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":8142,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"63210:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8141,"name":"address","nodeType":"ElementaryTypeName","src":"63210:7:28","typeDescriptions":{}}},"id":8144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"63210:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"63202:24:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"id":8146,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"63227:8:28","memberName":"isListed","nodeType":"MemberAccess","referencedDeclaration":9475,"src":"63202:33:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":8139,"id":8147,"nodeType":"Return","src":"63195:40:28"}]},"documentation":{"id":8132,"nodeType":"StructuredDocumentation","src":"62926:186:28","text":" @notice Check if a market is marked as listed (active)\n @param vToken vToken Address for the market to check\n @return listed True if listed otherwise false"},"functionSelector":"3d98a1e5","id":8149,"implemented":true,"kind":"function","modifiers":[],"name":"isMarketListed","nameLocation":"63126:14:28","nodeType":"FunctionDefinition","parameters":{"id":8136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8135,"mutability":"mutable","name":"vToken","nameLocation":"63148:6:28","nodeType":"VariableDeclaration","scope":8149,"src":"63141:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":8134,"nodeType":"UserDefinedTypeName","pathNode":{"id":8133,"name":"VToken","nameLocations":["63141:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"63141:6:28"},"referencedDeclaration":15506,"src":"63141:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"}],"src":"63140:15:28"},"returnParameters":{"id":8139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8138,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8149,"src":"63179:4:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8137,"name":"bool","nodeType":"ElementaryTypeName","src":"63179:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"63178:6:28"},"scope":9130,"src":"63117:125:28","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8170,"nodeType":"Block","src":"63640:75:28","statements":[{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":8160,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"63657:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":8165,"indexExpression":{"arguments":[{"id":8163,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8155,"src":"63673:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":8162,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"63665:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8161,"name":"address","nodeType":"ElementaryTypeName","src":"63665:7:28","typeDescriptions":{}}},"id":8164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"63665:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"63657:24:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"id":8166,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"63682:17:28","memberName":"accountMembership","nodeType":"MemberAccess","referencedDeclaration":9483,"src":"63657:42:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":8168,"indexExpression":{"id":8167,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8152,"src":"63700:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"63657:51:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":8159,"id":8169,"nodeType":"Return","src":"63650:58:28"}]},"documentation":{"id":8150,"nodeType":"StructuredDocumentation","src":"63281:268:28","text":" @notice Returns whether the given account is entered in a given market\n @param account The address of the account to check\n @param vToken The vToken to check\n @return True if the account is in the market specified, otherwise false."},"functionSelector":"929fe9a1","id":8171,"implemented":true,"kind":"function","modifiers":[],"name":"checkMembership","nameLocation":"63563:15:28","nodeType":"FunctionDefinition","parameters":{"id":8156,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8152,"mutability":"mutable","name":"account","nameLocation":"63587:7:28","nodeType":"VariableDeclaration","scope":8171,"src":"63579:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8151,"name":"address","nodeType":"ElementaryTypeName","src":"63579:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8155,"mutability":"mutable","name":"vToken","nameLocation":"63603:6:28","nodeType":"VariableDeclaration","scope":8171,"src":"63596:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":8154,"nodeType":"UserDefinedTypeName","pathNode":{"id":8153,"name":"VToken","nameLocations":["63596:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"63596:6:28"},"referencedDeclaration":15506,"src":"63596:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"}],"src":"63578:32:28"},"returnParameters":{"id":8159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8158,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8171,"src":"63634:4:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8157,"name":"bool","nodeType":"ElementaryTypeName","src":"63634:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"63633:6:28"},"scope":9130,"src":"63554:161:28","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[9335],"body":{"id":8265,"nodeType":"Block","src":"64610:1250:28","statements":[{"assignments":[8187],"declarations":[{"constant":false,"id":8187,"mutability":"mutable","name":"priceBorrowedMantissa","nameLocation":"64697:21:28","nodeType":"VariableDeclaration","scope":8265,"src":"64689:29:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8186,"name":"uint256","nodeType":"ElementaryTypeName","src":"64689:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8193,"initialValue":{"arguments":[{"arguments":[{"id":8190,"name":"vTokenBorrowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8174,"src":"64752:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8189,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"64745:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":8191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"64745:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":8188,"name":"_safeGetUnderlyingPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8999,"src":"64721:23:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_uint256_$","typeString":"function (contract VToken) view returns (uint256)"}},"id":8192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"64721:47:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"64689:79:28"},{"assignments":[8195],"declarations":[{"constant":false,"id":8195,"mutability":"mutable","name":"priceCollateralMantissa","nameLocation":"64786:23:28","nodeType":"VariableDeclaration","scope":8265,"src":"64778:31:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8194,"name":"uint256","nodeType":"ElementaryTypeName","src":"64778:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8201,"initialValue":{"arguments":[{"arguments":[{"id":8198,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8176,"src":"64843:16:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8197,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"64836:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":8199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"64836:24:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":8196,"name":"_safeGetUnderlyingPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8999,"src":"64812:23:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_uint256_$","typeString":"function (contract VToken) view returns (uint256)"}},"id":8200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"64812:49:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"64778:83:28"},{"assignments":[8203],"declarations":[{"constant":false,"id":8203,"mutability":"mutable","name":"exchangeRateMantissa","nameLocation":"65255:20:28","nodeType":"VariableDeclaration","scope":8265,"src":"65247:28:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8202,"name":"uint256","nodeType":"ElementaryTypeName","src":"65247:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8209,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":8205,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8176,"src":"65285:16:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8204,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"65278:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":8206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"65278:24:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":8207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"65303:18:28","memberName":"exchangeRateStored","nodeType":"MemberAccess","referencedDeclaration":13739,"src":"65278:43:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":8208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"65278:45:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"65247:76:28"},{"assignments":[8211],"declarations":[{"constant":false,"id":8211,"mutability":"mutable","name":"seizeTokens","nameLocation":"65367:11:28","nodeType":"VariableDeclaration","scope":8265,"src":"65359:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8210,"name":"uint256","nodeType":"ElementaryTypeName","src":"65359:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8212,"nodeType":"VariableDeclarationStatement","src":"65359:19:28"},{"assignments":[8215],"declarations":[{"constant":false,"id":8215,"mutability":"mutable","name":"numerator","nameLocation":"65399:9:28","nodeType":"VariableDeclaration","scope":8265,"src":"65388:20:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":8214,"nodeType":"UserDefinedTypeName","pathNode":{"id":8213,"name":"Exp","nameLocations":["65388:3:28"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"65388:3:28"},"referencedDeclaration":9645,"src":"65388:3:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":8216,"nodeType":"VariableDeclarationStatement","src":"65388:20:28"},{"assignments":[8219],"declarations":[{"constant":false,"id":8219,"mutability":"mutable","name":"denominator","nameLocation":"65429:11:28","nodeType":"VariableDeclaration","scope":8265,"src":"65418:22:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":8218,"nodeType":"UserDefinedTypeName","pathNode":{"id":8217,"name":"Exp","nameLocations":["65418:3:28"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"65418:3:28"},"referencedDeclaration":9645,"src":"65418:3:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":8220,"nodeType":"VariableDeclarationStatement","src":"65418:22:28"},{"assignments":[8223],"declarations":[{"constant":false,"id":8223,"mutability":"mutable","name":"ratio","nameLocation":"65461:5:28","nodeType":"VariableDeclaration","scope":8265,"src":"65450:16:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":8222,"nodeType":"UserDefinedTypeName","pathNode":{"id":8221,"name":"Exp","nameLocations":["65450:3:28"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"65450:3:28"},"referencedDeclaration":9645,"src":"65450:3:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":8224,"nodeType":"VariableDeclarationStatement","src":"65450:16:28"},{"expression":{"id":8234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8225,"name":"numerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8215,"src":"65477:9:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":8228,"name":"liquidationIncentiveMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9494,"src":"65510:28:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8227,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"65494:3:28","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":8229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["65500:8:28"],"names":["mantissa"],"nodeType":"FunctionCall","src":"65494:47:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"arguments":[{"id":8231,"name":"priceBorrowedMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8187,"src":"65559:21:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8230,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"65543:3:28","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":8232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["65549:8:28"],"names":["mantissa"],"nodeType":"FunctionCall","src":"65543:40:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":8226,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":9941,"src":"65489:4:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_struct$_Exp_$9645_memory_ptr_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (struct ExponentialNoError.Exp memory,struct ExponentialNoError.Exp memory) pure returns (struct ExponentialNoError.Exp memory)"}},"id":8233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"65489:95:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"src":"65477:107:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"id":8235,"nodeType":"ExpressionStatement","src":"65477:107:28"},{"expression":{"id":8245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8236,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8219,"src":"65594:11:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":8239,"name":"priceCollateralMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8195,"src":"65629:23:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8238,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"65613:3:28","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":8240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["65619:8:28"],"names":["mantissa"],"nodeType":"FunctionCall","src":"65613:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"arguments":[{"id":8242,"name":"exchangeRateMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8203,"src":"65673:20:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8241,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"65657:3:28","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":8243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["65663:8:28"],"names":["mantissa"],"nodeType":"FunctionCall","src":"65657:39:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":8237,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":9941,"src":"65608:4:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_struct$_Exp_$9645_memory_ptr_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (struct ExponentialNoError.Exp memory,struct ExponentialNoError.Exp memory) pure returns (struct ExponentialNoError.Exp memory)"}},"id":8244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"65608:89:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"src":"65594:103:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"id":8246,"nodeType":"ExpressionStatement","src":"65594:103:28"},{"expression":{"id":8252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8247,"name":"ratio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8223,"src":"65707:5:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8249,"name":"numerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8215,"src":"65720:9:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":8250,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8219,"src":"65731:11:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":8248,"name":"div_","nodeType":"Identifier","overloadedDeclarations":[10082,10102,10122,10147,10167,10187,10201],"referencedDeclaration":10082,"src":"65715:4:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_struct$_Exp_$9645_memory_ptr_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (struct ExponentialNoError.Exp memory,struct ExponentialNoError.Exp memory) pure returns (struct ExponentialNoError.Exp memory)"}},"id":8251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"65715:28:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"src":"65707:36:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"id":8253,"nodeType":"ExpressionStatement","src":"65707:36:28"},{"expression":{"id":8259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8254,"name":"seizeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8211,"src":"65754:11:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8256,"name":"ratio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8223,"src":"65787:5:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":8257,"name":"actualRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8178,"src":"65794:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8255,"name":"mul_ScalarTruncate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9701,"src":"65768:18:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct ExponentialNoError.Exp memory,uint256) pure returns (uint256)"}},"id":8258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"65768:44:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"65754:58:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8260,"nodeType":"ExpressionStatement","src":"65754:58:28"},{"expression":{"components":[{"id":8261,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9549,"src":"65831:8:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8262,"name":"seizeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8211,"src":"65841:11:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8263,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"65830:23:28","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":8185,"id":8264,"nodeType":"Return","src":"65823:30:28"}]},"documentation":{"id":8172,"nodeType":"StructuredDocumentation","src":"63721:668:28","text":" @notice Calculate number of tokens of collateral asset to seize given an underlying amount\n @dev Used in liquidation (called in vToken.liquidateBorrowFresh)\n @param vTokenBorrowed The address of the borrowed vToken\n @param vTokenCollateral The address of the collateral vToken\n @param actualRepayAmount The amount of vTokenBorrowed underlying to convert into vTokenCollateral tokens\n @return error Always NO_ERROR for compatibility with Venus core tooling\n @return tokensToSeize Number of vTokenCollateral tokens to be seized in a liquidation\n @custom:error PriceError if the oracle returns an invalid price"},"functionSelector":"c488847b","id":8266,"implemented":true,"kind":"function","modifiers":[],"name":"liquidateCalculateSeizeTokens","nameLocation":"64403:29:28","nodeType":"FunctionDefinition","overrides":{"id":8180,"nodeType":"OverrideSpecifier","overrides":[],"src":"64554:8:28"},"parameters":{"id":8179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8174,"mutability":"mutable","name":"vTokenBorrowed","nameLocation":"64450:14:28","nodeType":"VariableDeclaration","scope":8266,"src":"64442:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8173,"name":"address","nodeType":"ElementaryTypeName","src":"64442:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8176,"mutability":"mutable","name":"vTokenCollateral","nameLocation":"64482:16:28","nodeType":"VariableDeclaration","scope":8266,"src":"64474:24:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8175,"name":"address","nodeType":"ElementaryTypeName","src":"64474:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8178,"mutability":"mutable","name":"actualRepayAmount","nameLocation":"64516:17:28","nodeType":"VariableDeclaration","scope":8266,"src":"64508:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8177,"name":"uint256","nodeType":"ElementaryTypeName","src":"64508:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"64432:107:28"},"returnParameters":{"id":8185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8182,"mutability":"mutable","name":"error","nameLocation":"64580:5:28","nodeType":"VariableDeclaration","scope":8266,"src":"64572:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8181,"name":"uint256","nodeType":"ElementaryTypeName","src":"64572:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8184,"mutability":"mutable","name":"tokensToSeize","nameLocation":"64595:13:28","nodeType":"VariableDeclaration","scope":8266,"src":"64587:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8183,"name":"uint256","nodeType":"ElementaryTypeName","src":"64587:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"64571:38:28"},"scope":9130,"src":"64394:1466:28","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8335,"nodeType":"Block","src":"66210:667:28","statements":[{"assignments":[8277],"declarations":[{"constant":false,"id":8277,"mutability":"mutable","name":"rewardsDistributorsLength","nameLocation":"66228:25:28","nodeType":"VariableDeclaration","scope":8335,"src":"66220:33:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8276,"name":"uint256","nodeType":"ElementaryTypeName","src":"66220:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8280,"initialValue":{"expression":{"id":8278,"name":"rewardsDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9537,"src":"66256:19:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage","typeString":"contract RewardsDistributor[] storage ref"}},"id":8279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"66276:6:28","memberName":"length","nodeType":"MemberAccess","src":"66256:26:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"66220:62:28"},{"expression":{"id":8288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8281,"name":"rewardSpeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8274,"src":"66292:12:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr","typeString":"struct ComptrollerStorage.RewardSpeeds memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8286,"name":"rewardsDistributorsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8277,"src":"66326:25:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8285,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"66307:18:28","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct ComptrollerStorage.RewardSpeeds memory[] memory)"},"typeName":{"baseType":{"id":8283,"nodeType":"UserDefinedTypeName","pathNode":{"id":8282,"name":"RewardSpeeds","nameLocations":["66311:12:28"],"nodeType":"IdentifierPath","referencedDeclaration":9473,"src":"66311:12:28"},"referencedDeclaration":9473,"src":"66311:12:28","typeDescriptions":{"typeIdentifier":"t_struct$_RewardSpeeds_$9473_storage_ptr","typeString":"struct ComptrollerStorage.RewardSpeeds"}},"id":8284,"nodeType":"ArrayTypeName","src":"66311:14:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardSpeeds_$9473_storage_$dyn_storage_ptr","typeString":"struct ComptrollerStorage.RewardSpeeds[]"}}},"id":8287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"66307:45:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr","typeString":"struct ComptrollerStorage.RewardSpeeds memory[] memory"}},"src":"66292:60:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr","typeString":"struct ComptrollerStorage.RewardSpeeds memory[] memory"}},"id":8289,"nodeType":"ExpressionStatement","src":"66292:60:28"},{"body":{"id":8331,"nodeType":"Block","src":"66414:428:28","statements":[{"assignments":[8301],"declarations":[{"constant":false,"id":8301,"mutability":"mutable","name":"rewardsDistributor","nameLocation":"66447:18:28","nodeType":"VariableDeclaration","scope":8331,"src":"66428:37:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"},"typeName":{"id":8300,"nodeType":"UserDefinedTypeName","pathNode":{"id":8299,"name":"RewardsDistributor","nameLocations":["66428:18:28"],"nodeType":"IdentifierPath","referencedDeclaration":12324,"src":"66428:18:28"},"referencedDeclaration":12324,"src":"66428:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"visibility":"internal"}],"id":8305,"initialValue":{"baseExpression":{"id":8302,"name":"rewardsDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9537,"src":"66468:19:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage","typeString":"contract RewardsDistributor[] storage ref"}},"id":8304,"indexExpression":{"id":8303,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8291,"src":"66488:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"66468:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"nodeType":"VariableDeclarationStatement","src":"66428:62:28"},{"assignments":[8307],"declarations":[{"constant":false,"id":8307,"mutability":"mutable","name":"rewardToken","nameLocation":"66512:11:28","nodeType":"VariableDeclaration","scope":8331,"src":"66504:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8306,"name":"address","nodeType":"ElementaryTypeName","src":"66504:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":8314,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8310,"name":"rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8301,"src":"66534:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":8311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"66553:11:28","memberName":"rewardToken","nodeType":"MemberAccess","referencedDeclaration":12402,"src":"66534:30:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IERC20Upgradeable_$1352_$","typeString":"function () view external returns (contract IERC20Upgradeable)"}},"id":8312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"66534:32:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}],"id":8309,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"66526:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8308,"name":"address","nodeType":"ElementaryTypeName","src":"66526:7:28","typeDescriptions":{}}},"id":8313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"66526:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"66504:63:28"},{"expression":{"id":8329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8315,"name":"rewardSpeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8274,"src":"66581:12:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr","typeString":"struct ComptrollerStorage.RewardSpeeds memory[] memory"}},"id":8317,"indexExpression":{"id":8316,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8291,"src":"66594:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"66581:15:28","typeDescriptions":{"typeIdentifier":"t_struct$_RewardSpeeds_$9473_memory_ptr","typeString":"struct ComptrollerStorage.RewardSpeeds memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8319,"name":"rewardToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8307,"src":"66643:11:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":8322,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8269,"src":"66728:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8320,"name":"rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8301,"src":"66685:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":8321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"66704:23:28","memberName":"rewardTokenSupplySpeeds","nodeType":"MemberAccess","referencedDeclaration":12373,"src":"66685:42:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":8323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"66685:50:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":8326,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8269,"src":"66809:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8324,"name":"rewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8301,"src":"66766:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":8325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"66785:23:28","memberName":"rewardTokenBorrowSpeeds","nodeType":"MemberAccess","referencedDeclaration":12368,"src":"66766:42:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":8327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"66766:50:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8318,"name":"RewardSpeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9473,"src":"66599:12:28","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RewardSpeeds_$9473_storage_ptr_$","typeString":"type(struct ComptrollerStorage.RewardSpeeds storage pointer)"}},"id":8328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["66630:11:28","66672:11:28","66753:11:28"],"names":["rewardToken","supplySpeed","borrowSpeed"],"nodeType":"FunctionCall","src":"66599:232:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RewardSpeeds_$9473_memory_ptr","typeString":"struct ComptrollerStorage.RewardSpeeds memory"}},"src":"66581:250:28","typeDescriptions":{"typeIdentifier":"t_struct$_RewardSpeeds_$9473_memory_ptr","typeString":"struct ComptrollerStorage.RewardSpeeds memory"}},"id":8330,"nodeType":"ExpressionStatement","src":"66581:250:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8293,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8291,"src":"66378:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8294,"name":"rewardsDistributorsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8277,"src":"66382:25:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"66378:29:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8332,"initializationExpression":{"assignments":[8291],"declarations":[{"constant":false,"id":8291,"mutability":"mutable","name":"i","nameLocation":"66375:1:28","nodeType":"VariableDeclaration","scope":8332,"src":"66367:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8290,"name":"uint256","nodeType":"ElementaryTypeName","src":"66367:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8292,"nodeType":"VariableDeclarationStatement","src":"66367:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":8297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"66409:3:28","subExpression":{"id":8296,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8291,"src":"66411:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8298,"nodeType":"ExpressionStatement","src":"66409:3:28"},"nodeType":"ForStatement","src":"66362:480:28"},{"expression":{"id":8333,"name":"rewardSpeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8274,"src":"66858:12:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr","typeString":"struct ComptrollerStorage.RewardSpeeds memory[] memory"}},"functionReturnParameters":8275,"id":8334,"nodeType":"Return","src":"66851:19:28"}]},"documentation":{"id":8267,"nodeType":"StructuredDocumentation","src":"65866:236:28","text":" @notice Returns reward speed given a vToken\n @param vToken The vToken to get the reward speeds for\n @return rewardSpeeds Array of total supply and borrow speeds and reward token for all reward distributors"},"functionSelector":"b2068e84","id":8336,"implemented":true,"kind":"function","modifiers":[],"name":"getRewardsByMarket","nameLocation":"66116:18:28","nodeType":"FunctionDefinition","parameters":{"id":8270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8269,"mutability":"mutable","name":"vToken","nameLocation":"66143:6:28","nodeType":"VariableDeclaration","scope":8336,"src":"66135:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8268,"name":"address","nodeType":"ElementaryTypeName","src":"66135:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"66134:16:28"},"returnParameters":{"id":8275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8274,"mutability":"mutable","name":"rewardSpeeds","nameLocation":"66196:12:28","nodeType":"VariableDeclaration","scope":8336,"src":"66174:34:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr","typeString":"struct ComptrollerStorage.RewardSpeeds[]"},"typeName":{"baseType":{"id":8272,"nodeType":"UserDefinedTypeName","pathNode":{"id":8271,"name":"RewardSpeeds","nameLocations":["66174:12:28"],"nodeType":"IdentifierPath","referencedDeclaration":9473,"src":"66174:12:28"},"referencedDeclaration":9473,"src":"66174:12:28","typeDescriptions":{"typeIdentifier":"t_struct$_RewardSpeeds_$9473_storage_ptr","typeString":"struct ComptrollerStorage.RewardSpeeds"}},"id":8273,"nodeType":"ArrayTypeName","src":"66174:14:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardSpeeds_$9473_storage_$dyn_storage_ptr","typeString":"struct ComptrollerStorage.RewardSpeeds[]"}},"visibility":"internal"}],"src":"66173:36:28"},"scope":9130,"src":"66107:770:28","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8346,"nodeType":"Block","src":"67096:43:28","statements":[{"expression":{"id":8344,"name":"rewardsDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9537,"src":"67113:19:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage","typeString":"contract RewardsDistributor[] storage ref"}},"functionReturnParameters":8343,"id":8345,"nodeType":"Return","src":"67106:26:28"}]},"documentation":{"id":8337,"nodeType":"StructuredDocumentation","src":"66883:123:28","text":" @notice Return all reward distributors for this pool\n @return Array of RewardDistributor addresses"},"functionSelector":"61252fd1","id":8347,"implemented":true,"kind":"function","modifiers":[],"name":"getRewardDistributors","nameLocation":"67020:21:28","nodeType":"FunctionDefinition","parameters":{"id":8338,"nodeType":"ParameterList","parameters":[],"src":"67041:2:28"},"returnParameters":{"id":8343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8342,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8347,"src":"67067:27:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr","typeString":"contract RewardsDistributor[]"},"typeName":{"baseType":{"id":8340,"nodeType":"UserDefinedTypeName","pathNode":{"id":8339,"name":"RewardsDistributor","nameLocations":["67067:18:28"],"nodeType":"IdentifierPath","referencedDeclaration":12324,"src":"67067:18:28"},"referencedDeclaration":12324,"src":"67067:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":8341,"nodeType":"ArrayTypeName","src":"67067:20:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage_ptr","typeString":"contract RewardsDistributor[]"}},"visibility":"internal"}],"src":"67066:29:28"},"scope":9130,"src":"67011:128:28","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[9322],"body":{"id":8356,"nodeType":"Block","src":"67333:28:28","statements":[{"expression":{"hexValue":"74727565","id":8354,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"67350:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":8353,"id":8355,"nodeType":"Return","src":"67343:11:28"}]},"documentation":{"id":8348,"nodeType":"StructuredDocumentation","src":"67145:120:28","text":" @notice A marker method that returns true for a valid Comptroller contract\n @return Always true"},"functionSelector":"007e3dd2","id":8357,"implemented":true,"kind":"function","modifiers":[],"name":"isComptroller","nameLocation":"67279:13:28","nodeType":"FunctionDefinition","overrides":{"id":8350,"nodeType":"OverrideSpecifier","overrides":[],"src":"67309:8:28"},"parameters":{"id":8349,"nodeType":"ParameterList","parameters":[],"src":"67292:2:28"},"returnParameters":{"id":8353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8352,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8357,"src":"67327:4:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8351,"name":"bool","nodeType":"ElementaryTypeName","src":"67327:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"67326:6:28"},"scope":9130,"src":"67270:91:28","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":8404,"nodeType":"Block","src":"67592:276:28","statements":[{"assignments":[8367],"declarations":[{"constant":false,"id":8367,"mutability":"mutable","name":"vTokens","nameLocation":"67618:7:28","nodeType":"VariableDeclaration","scope":8404,"src":"67602:23:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":8365,"nodeType":"UserDefinedTypeName","pathNode":{"id":8364,"name":"VToken","nameLocations":["67602:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"67602:6:28"},"referencedDeclaration":15506,"src":"67602:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":8366,"nodeType":"ArrayTypeName","src":"67602:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"}],"id":8371,"initialValue":{"arguments":[{"id":8369,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8360,"src":"67640:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8368,"name":"getAssetsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8504,"src":"67628:11:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_$","typeString":"function (address) view returns (contract VToken[] memory)"}},"id":8370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"67628:20:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"nodeType":"VariableDeclarationStatement","src":"67602:46:28"},{"assignments":[8373],"declarations":[{"constant":false,"id":8373,"mutability":"mutable","name":"vTokensCount","nameLocation":"67666:12:28","nodeType":"VariableDeclaration","scope":8404,"src":"67658:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8372,"name":"uint256","nodeType":"ElementaryTypeName","src":"67658:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8376,"initialValue":{"expression":{"id":8374,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8367,"src":"67681:7:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":8375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"67689:6:28","memberName":"length","nodeType":"MemberAccess","src":"67681:14:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"67658:37:28"},{"assignments":[8379],"declarations":[{"constant":false,"id":8379,"mutability":"mutable","name":"oracle_","nameLocation":"67731:7:28","nodeType":"VariableDeclaration","scope":8404,"src":"67706:32:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"},"typeName":{"id":8378,"nodeType":"UserDefinedTypeName","pathNode":{"id":8377,"name":"ResilientOracleInterface","nameLocations":["67706:24:28"],"nodeType":"IdentifierPath","referencedDeclaration":16173,"src":"67706:24:28"},"referencedDeclaration":16173,"src":"67706:24:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"visibility":"internal"}],"id":8381,"initialValue":{"id":8380,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9488,"src":"67741:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"nodeType":"VariableDeclarationStatement","src":"67706:41:28"},{"body":{"id":8402,"nodeType":"Block","src":"67797:65:28","statements":[{"expression":{"arguments":[{"arguments":[{"baseExpression":{"id":8396,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8367,"src":"67839:7:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":8398,"indexExpression":{"id":8397,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8383,"src":"67847:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"67839:10:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":8395,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"67831:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8394,"name":"address","nodeType":"ElementaryTypeName","src":"67831:7:28","typeDescriptions":{}}},"id":8399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"67831:19:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8391,"name":"oracle_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8379,"src":"67811:7:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"id":8393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"67819:11:28","memberName":"updatePrice","nodeType":"MemberAccess","referencedDeclaration":16160,"src":"67811:19:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":8400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"67811:40:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8401,"nodeType":"ExpressionStatement","src":"67811:40:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8385,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8383,"src":"67774:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8386,"name":"vTokensCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8373,"src":"67778:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"67774:16:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8403,"initializationExpression":{"assignments":[8383],"declarations":[{"constant":false,"id":8383,"mutability":"mutable","name":"i","nameLocation":"67771:1:28","nodeType":"VariableDeclaration","scope":8403,"src":"67763:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8382,"name":"uint256","nodeType":"ElementaryTypeName","src":"67763:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8384,"nodeType":"VariableDeclarationStatement","src":"67763:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":8389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"67792:3:28","subExpression":{"id":8388,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8383,"src":"67794:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8390,"nodeType":"ExpressionStatement","src":"67792:3:28"},"nodeType":"ForStatement","src":"67758:104:28"}]},"documentation":{"id":8358,"nodeType":"StructuredDocumentation","src":"67367:174:28","text":" @notice Update the prices of all the tokens associated with the provided account\n @param account Address of the account to get associated tokens with"},"functionSelector":"5c21b6c5","id":8405,"implemented":true,"kind":"function","modifiers":[],"name":"updatePrices","nameLocation":"67555:12:28","nodeType":"FunctionDefinition","parameters":{"id":8361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8360,"mutability":"mutable","name":"account","nameLocation":"67576:7:28","nodeType":"VariableDeclaration","scope":8405,"src":"67568:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8359,"name":"address","nodeType":"ElementaryTypeName","src":"67568:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"67567:17:28"},"returnParameters":{"id":8362,"nodeType":"ParameterList","parameters":[],"src":"67592:0:28"},"scope":9130,"src":"67546:322:28","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[9352],"body":{"id":8422,"nodeType":"Block","src":"68174:53:28","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":8416,"name":"_actionPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9533,"src":"68191:13:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_enum$_Action_$9148_$_t_bool_$_$","typeString":"mapping(address => mapping(enum Action => bool))"}},"id":8418,"indexExpression":{"id":8417,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8408,"src":"68205:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"68191:21:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_enum$_Action_$9148_$_t_bool_$","typeString":"mapping(enum Action => bool)"}},"id":8420,"indexExpression":{"id":8419,"name":"action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8411,"src":"68213:6:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"68191:29:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":8415,"id":8421,"nodeType":"Return","src":"68184:36:28"}]},"documentation":{"id":8406,"nodeType":"StructuredDocumentation","src":"67874:215:28","text":" @notice Checks if a certain action is paused on a market\n @param market vToken address\n @param action Action to check\n @return paused True if the action is paused otherwise false"},"functionSelector":"e85a2960","id":8423,"implemented":true,"kind":"function","modifiers":[],"name":"actionPaused","nameLocation":"68103:12:28","nodeType":"FunctionDefinition","parameters":{"id":8412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8408,"mutability":"mutable","name":"market","nameLocation":"68124:6:28","nodeType":"VariableDeclaration","scope":8423,"src":"68116:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8407,"name":"address","nodeType":"ElementaryTypeName","src":"68116:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8411,"mutability":"mutable","name":"action","nameLocation":"68139:6:28","nodeType":"VariableDeclaration","scope":8423,"src":"68132:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"},"typeName":{"id":8410,"nodeType":"UserDefinedTypeName","pathNode":{"id":8409,"name":"Action","nameLocations":["68132:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":9148,"src":"68132:6:28"},"referencedDeclaration":9148,"src":"68132:6:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}},"visibility":"internal"}],"src":"68115:31:28"},"returnParameters":{"id":8415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8414,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8423,"src":"68168:4:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8413,"name":"bool","nodeType":"ElementaryTypeName","src":"68168:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"68167:6:28"},"scope":9130,"src":"68094:133:28","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":8503,"nodeType":"Block","src":"68512:581:28","statements":[{"assignments":[8434],"declarations":[{"constant":false,"id":8434,"mutability":"mutable","name":"len","nameLocation":"68530:3:28","nodeType":"VariableDeclaration","scope":8503,"src":"68522:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8433,"name":"uint256","nodeType":"ElementaryTypeName","src":"68522:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8435,"nodeType":"VariableDeclarationStatement","src":"68522:11:28"},{"assignments":[8440],"declarations":[{"constant":false,"id":8440,"mutability":"mutable","name":"_accountAssets","nameLocation":"68559:14:28","nodeType":"VariableDeclaration","scope":8503,"src":"68543:30:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":8438,"nodeType":"UserDefinedTypeName","pathNode":{"id":8437,"name":"VToken","nameLocations":["68543:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"68543:6:28"},"referencedDeclaration":15506,"src":"68543:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":8439,"nodeType":"ArrayTypeName","src":"68543:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"}],"id":8444,"initialValue":{"baseExpression":{"id":8441,"name":"accountAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"68576:13:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_VToken_$15506_$dyn_storage_$","typeString":"mapping(address => contract VToken[] storage ref)"}},"id":8443,"indexExpression":{"id":8442,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8426,"src":"68590:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"68576:22:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage","typeString":"contract VToken[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"68543:55:28"},{"assignments":[8446],"declarations":[{"constant":false,"id":8446,"mutability":"mutable","name":"_accountAssetsLength","nameLocation":"68616:20:28","nodeType":"VariableDeclaration","scope":8503,"src":"68608:28:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8445,"name":"uint256","nodeType":"ElementaryTypeName","src":"68608:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8449,"initialValue":{"expression":{"id":8447,"name":"_accountAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8440,"src":"68639:14:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":8448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"68654:6:28","memberName":"length","nodeType":"MemberAccess","src":"68639:21:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"68608:52:28"},{"assignments":[8454],"declarations":[{"constant":false,"id":8454,"mutability":"mutable","name":"assetsIn","nameLocation":"68687:8:28","nodeType":"VariableDeclaration","scope":8503,"src":"68671:24:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":8452,"nodeType":"UserDefinedTypeName","pathNode":{"id":8451,"name":"VToken","nameLocations":["68671:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"68671:6:28"},"referencedDeclaration":15506,"src":"68671:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":8453,"nodeType":"ArrayTypeName","src":"68671:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"}],"id":8461,"initialValue":{"arguments":[{"id":8459,"name":"_accountAssetsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8446,"src":"68711:20:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8458,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"68698:12:28","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (contract VToken[] memory)"},"typeName":{"baseType":{"id":8456,"nodeType":"UserDefinedTypeName","pathNode":{"id":8455,"name":"VToken","nameLocations":["68702:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"68702:6:28"},"referencedDeclaration":15506,"src":"68702:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":8457,"nodeType":"ArrayTypeName","src":"68702:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}}},"id":8460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"68698:34:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"nodeType":"VariableDeclarationStatement","src":"68671:61:28"},{"body":{"id":8498,"nodeType":"Block","src":"68790:207:28","statements":[{"assignments":[8473],"declarations":[{"constant":false,"id":8473,"mutability":"mutable","name":"market","nameLocation":"68819:6:28","nodeType":"VariableDeclaration","scope":8498,"src":"68804:21:28","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market"},"typeName":{"id":8472,"nodeType":"UserDefinedTypeName","pathNode":{"id":8471,"name":"Market","nameLocations":["68804:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":9484,"src":"68804:6:28"},"referencedDeclaration":9484,"src":"68804:6:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market"}},"visibility":"internal"}],"id":8482,"initialValue":{"baseExpression":{"id":8474,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"68828:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":8481,"indexExpression":{"arguments":[{"baseExpression":{"id":8477,"name":"_accountAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8440,"src":"68844:14:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":8479,"indexExpression":{"id":8478,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8463,"src":"68859:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"68844:17:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":8476,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"68836:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8475,"name":"address","nodeType":"ElementaryTypeName","src":"68836:7:28","typeDescriptions":{}}},"id":8480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"68836:26:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"68828:35:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"nodeType":"VariableDeclarationStatement","src":"68804:59:28"},{"condition":{"expression":{"id":8483,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8473,"src":"68881:6:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":8484,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"68888:8:28","memberName":"isListed","nodeType":"MemberAccess","referencedDeclaration":9475,"src":"68881:15:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8497,"nodeType":"IfStatement","src":"68877:110:28","trueBody":{"id":8496,"nodeType":"Block","src":"68898:89:28","statements":[{"expression":{"id":8491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8485,"name":"assetsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8454,"src":"68916:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":8487,"indexExpression":{"id":8486,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8434,"src":"68925:3:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"68916:13:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":8488,"name":"_accountAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8440,"src":"68932:14:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":8490,"indexExpression":{"id":8489,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8463,"src":"68947:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"68932:17:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"src":"68916:33:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":8492,"nodeType":"ExpressionStatement","src":"68916:33:28"},{"expression":{"id":8494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"68967:5:28","subExpression":{"id":8493,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8434,"src":"68969:3:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8495,"nodeType":"ExpressionStatement","src":"68967:5:28"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8465,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8463,"src":"68759:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8466,"name":"_accountAssetsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8446,"src":"68763:20:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"68759:24:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8499,"initializationExpression":{"assignments":[8463],"declarations":[{"constant":false,"id":8463,"mutability":"mutable","name":"i","nameLocation":"68756:1:28","nodeType":"VariableDeclaration","scope":8499,"src":"68748:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8462,"name":"uint256","nodeType":"ElementaryTypeName","src":"68748:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8464,"nodeType":"VariableDeclarationStatement","src":"68748:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":8469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"68785:3:28","subExpression":{"id":8468,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8463,"src":"68787:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8470,"nodeType":"ExpressionStatement","src":"68785:3:28"},"nodeType":"ForStatement","src":"68743:254:28"},{"AST":{"nativeSrc":"69016:45:28","nodeType":"YulBlock","src":"69016:45:28","statements":[{"expression":{"arguments":[{"name":"assetsIn","nativeSrc":"69037:8:28","nodeType":"YulIdentifier","src":"69037:8:28"},{"name":"len","nativeSrc":"69047:3:28","nodeType":"YulIdentifier","src":"69047:3:28"}],"functionName":{"name":"mstore","nativeSrc":"69030:6:28","nodeType":"YulIdentifier","src":"69030:6:28"},"nativeSrc":"69030:21:28","nodeType":"YulFunctionCall","src":"69030:21:28"},"nativeSrc":"69030:21:28","nodeType":"YulExpressionStatement","src":"69030:21:28"}]},"evmVersion":"paris","externalReferences":[{"declaration":8454,"isOffset":false,"isSlot":false,"src":"69037:8:28","valueSize":1},{"declaration":8434,"isOffset":false,"isSlot":false,"src":"69047:3:28","valueSize":1}],"id":8500,"nodeType":"InlineAssembly","src":"69007:54:28"},{"expression":{"id":8501,"name":"assetsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8454,"src":"69078:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"functionReturnParameters":8432,"id":8502,"nodeType":"Return","src":"69071:15:28"}]},"documentation":{"id":8424,"nodeType":"StructuredDocumentation","src":"68233:198:28","text":" @notice Returns the assets an account has entered\n @param account The address of the account to pull assets for\n @return A list with the assets the account has entered"},"functionSelector":"abfceffc","id":8504,"implemented":true,"kind":"function","modifiers":[],"name":"getAssetsIn","nameLocation":"68445:11:28","nodeType":"FunctionDefinition","parameters":{"id":8427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8426,"mutability":"mutable","name":"account","nameLocation":"68465:7:28","nodeType":"VariableDeclaration","scope":8504,"src":"68457:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8425,"name":"address","nodeType":"ElementaryTypeName","src":"68457:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"68456:17:28"},"returnParameters":{"id":8432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8431,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8504,"src":"68495:15:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":8429,"nodeType":"UserDefinedTypeName","pathNode":{"id":8428,"name":"VToken","nameLocations":["68495:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"68495:6:28"},"referencedDeclaration":15506,"src":"68495:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":8430,"nodeType":"ArrayTypeName","src":"68495:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"}],"src":"68494:17:28"},"scope":9130,"src":"68436:657:28","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":8571,"nodeType":"Block","src":"69367:882:28","statements":[{"expression":{"arguments":[{"arguments":[{"id":8516,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8508,"src":"69408:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":8515,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"69400:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8514,"name":"address","nodeType":"ElementaryTypeName","src":"69400:7:28","typeDescriptions":{}}},"id":8517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69400:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":8518,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"69417:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":8519,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"69424:12:28","memberName":"ENTER_MARKET","nodeType":"MemberAccess","referencedDeclaration":9146,"src":"69417:19:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"id":8513,"name":"_checkActionPauseState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9129,"src":"69377:22:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Action_$9148_$returns$__$","typeString":"function (address,enum Action) view"}},"id":8520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69377:60:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8521,"nodeType":"ExpressionStatement","src":"69377:60:28"},{"assignments":[8524],"declarations":[{"constant":false,"id":8524,"mutability":"mutable","name":"marketToJoin","nameLocation":"69462:12:28","nodeType":"VariableDeclaration","scope":8571,"src":"69447:27:28","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market"},"typeName":{"id":8523,"nodeType":"UserDefinedTypeName","pathNode":{"id":8522,"name":"Market","nameLocations":["69447:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":9484,"src":"69447:6:28"},"referencedDeclaration":9484,"src":"69447:6:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market"}},"visibility":"internal"}],"id":8531,"initialValue":{"baseExpression":{"id":8525,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"69477:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":8530,"indexExpression":{"arguments":[{"id":8528,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8508,"src":"69493:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":8527,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"69485:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8526,"name":"address","nodeType":"ElementaryTypeName","src":"69485:7:28","typeDescriptions":{}}},"id":8529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69485:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"69477:24:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"nodeType":"VariableDeclarationStatement","src":"69447:54:28"},{"condition":{"id":8534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"69516:22:28","subExpression":{"expression":{"id":8532,"name":"marketToJoin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8524,"src":"69517:12:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":8533,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"69530:8:28","memberName":"isListed","nodeType":"MemberAccess","referencedDeclaration":9475,"src":"69517:21:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8543,"nodeType":"IfStatement","src":"69512:92:28","trueBody":{"id":8542,"nodeType":"Block","src":"69540:64:28","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":8538,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8508,"src":"69585:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":8537,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"69577:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8536,"name":"address","nodeType":"ElementaryTypeName","src":"69577:7:28","typeDescriptions":{}}},"id":8539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69577:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8535,"name":"MarketNotListed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5287,"src":"69561:15:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":8540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69561:32:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8541,"nodeType":"RevertStatement","src":"69554:39:28"}]}},{"condition":{"baseExpression":{"expression":{"id":8544,"name":"marketToJoin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8524,"src":"69618:12:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":8545,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"69631:17:28","memberName":"accountMembership","nodeType":"MemberAccess","referencedDeclaration":9483,"src":"69618:30:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":8547,"indexExpression":{"id":8546,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8510,"src":"69649:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"69618:40:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8550,"nodeType":"IfStatement","src":"69614:107:28","trueBody":{"id":8549,"nodeType":"Block","src":"69660:61:28","statements":[{"functionReturnParameters":8512,"id":8548,"nodeType":"Return","src":"69704:7:28"}]}},{"expression":{"id":8557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":8551,"name":"marketToJoin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8524,"src":"70102:12:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":8554,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"70115:17:28","memberName":"accountMembership","nodeType":"MemberAccess","referencedDeclaration":9483,"src":"70102:30:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":8555,"indexExpression":{"id":8553,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8510,"src":"70133:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"70102:40:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":8556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"70145:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"70102:47:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8558,"nodeType":"ExpressionStatement","src":"70102:47:28"},{"expression":{"arguments":[{"id":8563,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8508,"src":"70188:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"expression":{"baseExpression":{"id":8559,"name":"accountAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"70159:13:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_VToken_$15506_$dyn_storage_$","typeString":"mapping(address => contract VToken[] storage ref)"}},"id":8561,"indexExpression":{"id":8560,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8510,"src":"70173:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"70159:23:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage","typeString":"contract VToken[] storage ref"}},"id":8562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"70183:4:28","memberName":"push","nodeType":"MemberAccess","src":"70159:28:28","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr_$_t_contract$_VToken_$15506_$returns$__$attached_to$_t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr_$","typeString":"function (contract VToken[] storage pointer,contract VToken)"}},"id":8564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"70159:36:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8565,"nodeType":"ExpressionStatement","src":"70159:36:28"},{"eventCall":{"arguments":[{"id":8567,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8508,"src":"70225:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"id":8568,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8510,"src":"70233:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_address","typeString":"address"}],"id":8566,"name":"MarketEntered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5129,"src":"70211:13:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_VToken_$15506_$_t_address_$returns$__$","typeString":"function (contract VToken,address)"}},"id":8569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"70211:31:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8570,"nodeType":"EmitStatement","src":"70206:36:28"}]},"documentation":{"id":8505,"nodeType":"StructuredDocumentation","src":"69099:199:28","text":" @notice Add the market to the borrower's \"assets in\" for liquidity calculations\n @param vToken The market to enter\n @param borrower The address of the account to modify"},"id":8572,"implemented":true,"kind":"function","modifiers":[],"name":"_addToMarket","nameLocation":"69312:12:28","nodeType":"FunctionDefinition","parameters":{"id":8511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8508,"mutability":"mutable","name":"vToken","nameLocation":"69332:6:28","nodeType":"VariableDeclaration","scope":8572,"src":"69325:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":8507,"nodeType":"UserDefinedTypeName","pathNode":{"id":8506,"name":"VToken","nameLocations":["69325:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"69325:6:28"},"referencedDeclaration":15506,"src":"69325:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"},{"constant":false,"id":8510,"mutability":"mutable","name":"borrower","nameLocation":"69348:8:28","nodeType":"VariableDeclaration","scope":8572,"src":"69340:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8509,"name":"address","nodeType":"ElementaryTypeName","src":"69340:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"69324:33:28"},"returnParameters":{"id":8512,"nodeType":"ParameterList","parameters":[],"src":"69367:0:28"},"scope":9130,"src":"69303:946:28","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":8624,"nodeType":"Block","src":"70476:356:28","statements":[{"assignments":[8579],"declarations":[{"constant":false,"id":8579,"mutability":"mutable","name":"marketsCount","nameLocation":"70494:12:28","nodeType":"VariableDeclaration","scope":8624,"src":"70486:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8578,"name":"uint256","nodeType":"ElementaryTypeName","src":"70486:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8582,"initialValue":{"expression":{"id":8580,"name":"allMarkets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9512,"src":"70509:10:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage","typeString":"contract VToken[] storage ref"}},"id":8581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"70520:6:28","memberName":"length","nodeType":"MemberAccess","src":"70509:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"70486:40:28"},{"body":{"id":8605,"nodeType":"Block","src":"70576:128:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"id":8598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":8592,"name":"allMarkets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9512,"src":"70594:10:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage","typeString":"contract VToken[] storage ref"}},"id":8594,"indexExpression":{"id":8593,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8584,"src":"70605:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"70594:13:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":8596,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8575,"src":"70618:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8595,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"70611:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":8597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"70611:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"src":"70594:31:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8604,"nodeType":"IfStatement","src":"70590:104:28","trueBody":{"id":8603,"nodeType":"Block","src":"70627:67:28","statements":[{"errorCall":{"arguments":[{"id":8600,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8575,"src":"70672:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8599,"name":"MarketAlreadyListed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5377,"src":"70652:19:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":8601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"70652:27:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8602,"nodeType":"RevertStatement","src":"70645:34:28"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8586,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8584,"src":"70553:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8587,"name":"marketsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8579,"src":"70557:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"70553:16:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8606,"initializationExpression":{"assignments":[8584],"declarations":[{"constant":false,"id":8584,"mutability":"mutable","name":"i","nameLocation":"70550:1:28","nodeType":"VariableDeclaration","scope":8606,"src":"70542:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8583,"name":"uint256","nodeType":"ElementaryTypeName","src":"70542:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8585,"nodeType":"VariableDeclarationStatement","src":"70542:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":8590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"70571:3:28","subExpression":{"id":8589,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8584,"src":"70573:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8591,"nodeType":"ExpressionStatement","src":"70571:3:28"},"nodeType":"ForStatement","src":"70537:167:28"},{"expression":{"arguments":[{"arguments":[{"id":8611,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8575,"src":"70736:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8610,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"70729:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":8612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"70729:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"expression":{"id":8607,"name":"allMarkets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9512,"src":"70713:10:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage","typeString":"contract VToken[] storage ref"}},"id":8609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"70724:4:28","memberName":"push","nodeType":"MemberAccess","src":"70713:15:28","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr_$_t_contract$_VToken_$15506_$returns$__$attached_to$_t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr_$","typeString":"function (contract VToken[] storage pointer,contract VToken)"}},"id":8613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"70713:31:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8614,"nodeType":"ExpressionStatement","src":"70713:31:28"},{"expression":{"id":8618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8615,"name":"marketsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8579,"src":"70754:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":8616,"name":"allMarkets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9512,"src":"70769:10:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage","typeString":"contract VToken[] storage ref"}},"id":8617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"70780:6:28","memberName":"length","nodeType":"MemberAccess","src":"70769:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"70754:32:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8619,"nodeType":"ExpressionStatement","src":"70754:32:28"},{"expression":{"arguments":[{"id":8621,"name":"marketsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8579,"src":"70812:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8620,"name":"_ensureMaxLoops","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10334,"src":"70796:15:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":8622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"70796:29:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8623,"nodeType":"ExpressionStatement","src":"70796:29:28"}]},"documentation":{"id":8573,"nodeType":"StructuredDocumentation","src":"70255:171:28","text":" @notice Internal function to validate that a market hasn't already been added\n and if it hasn't adds it\n @param vToken The market to support"},"id":8625,"implemented":true,"kind":"function","modifiers":[],"name":"_addMarket","nameLocation":"70440:10:28","nodeType":"FunctionDefinition","parameters":{"id":8576,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8575,"mutability":"mutable","name":"vToken","nameLocation":"70459:6:28","nodeType":"VariableDeclaration","scope":8625,"src":"70451:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8574,"name":"address","nodeType":"ElementaryTypeName","src":"70451:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"70450:16:28"},"returnParameters":{"id":8577,"nodeType":"ParameterList","parameters":[],"src":"70476:0:28"},"scope":9130,"src":"70431:401:28","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":8660,"nodeType":"Block","src":"71160:207:28","statements":[{"expression":{"arguments":[{"expression":{"baseExpression":{"id":8637,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"71178:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":8639,"indexExpression":{"id":8638,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8628,"src":"71186:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"71178:15:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"id":8640,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"71194:8:28","memberName":"isListed","nodeType":"MemberAccess","referencedDeclaration":9475,"src":"71178:24:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"63616e6e6f742070617573652061206d61726b65742074686174206973206e6f74206c6973746564","id":8641,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"71204:42:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_0ad46837fefc66a37a27d365ae7d6446a39b33a37d743c62daa13796b21a9a61","typeString":"literal_string \"cannot pause a market that is not listed\""},"value":"cannot pause a market that is not listed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0ad46837fefc66a37a27d365ae7d6446a39b33a37d743c62daa13796b21a9a61","typeString":"literal_string \"cannot pause a market that is not listed\""}],"id":8636,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"71170:7:28","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71170:77:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8643,"nodeType":"ExpressionStatement","src":"71170:77:28"},{"expression":{"id":8650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":8644,"name":"_actionPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9533,"src":"71257:13:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_enum$_Action_$9148_$_t_bool_$_$","typeString":"mapping(address => mapping(enum Action => bool))"}},"id":8647,"indexExpression":{"id":8645,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8628,"src":"71271:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"71257:21:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_enum$_Action_$9148_$_t_bool_$","typeString":"mapping(enum Action => bool)"}},"id":8648,"indexExpression":{"id":8646,"name":"action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8631,"src":"71279:6:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"71257:29:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8649,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8633,"src":"71289:6:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"71257:38:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8651,"nodeType":"ExpressionStatement","src":"71257:38:28"},{"eventCall":{"arguments":[{"arguments":[{"id":8654,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8628,"src":"71336:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8653,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"71329:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":8655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71329:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"id":8656,"name":"action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8631,"src":"71345:6:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}},{"id":8657,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8633,"src":"71353:6:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8652,"name":"ActionPausedMarket","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5191,"src":"71310:18:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_VToken_$15506_$_t_enum$_Action_$9148_$_t_bool_$returns$__$","typeString":"function (contract VToken,enum Action,bool)"}},"id":8658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71310:50:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8659,"nodeType":"EmitStatement","src":"71305:55:28"}]},"documentation":{"id":8626,"nodeType":"StructuredDocumentation","src":"70838:238:28","text":" @dev Pause/unpause an action on a market\n @param market Market to pause/unpause the action on\n @param action Action id to pause/unpause\n @param paused The new paused state (true=paused, false=unpaused)"},"id":8661,"implemented":true,"kind":"function","modifiers":[],"name":"_setActionPaused","nameLocation":"71090:16:28","nodeType":"FunctionDefinition","parameters":{"id":8634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8628,"mutability":"mutable","name":"market","nameLocation":"71115:6:28","nodeType":"VariableDeclaration","scope":8661,"src":"71107:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8627,"name":"address","nodeType":"ElementaryTypeName","src":"71107:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8631,"mutability":"mutable","name":"action","nameLocation":"71130:6:28","nodeType":"VariableDeclaration","scope":8661,"src":"71123:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"},"typeName":{"id":8630,"nodeType":"UserDefinedTypeName","pathNode":{"id":8629,"name":"Action","nameLocations":["71123:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":9148,"src":"71123:6:28"},"referencedDeclaration":9148,"src":"71123:6:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}},"visibility":"internal"},{"constant":false,"id":8633,"mutability":"mutable","name":"paused","nameLocation":"71143:6:28","nodeType":"VariableDeclaration","scope":8661,"src":"71138:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8632,"name":"bool","nodeType":"ElementaryTypeName","src":"71138:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"71106:44:28"},"returnParameters":{"id":8635,"nodeType":"ParameterList","parameters":[],"src":"71160:0:28"},"scope":9130,"src":"71081:286:28","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":8724,"nodeType":"Block","src":"71748:804:28","statements":[{"assignments":[8673],"declarations":[{"constant":false,"id":8673,"mutability":"mutable","name":"market","nameLocation":"71773:6:28","nodeType":"VariableDeclaration","scope":8724,"src":"71758:21:28","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market"},"typeName":{"id":8672,"nodeType":"UserDefinedTypeName","pathNode":{"id":8671,"name":"Market","nameLocations":["71758:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":9484,"src":"71758:6:28"},"referencedDeclaration":9484,"src":"71758:6:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market"}},"visibility":"internal"}],"id":8677,"initialValue":{"baseExpression":{"id":8674,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"71782:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":8676,"indexExpression":{"id":8675,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8664,"src":"71790:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"71782:15:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"nodeType":"VariableDeclarationStatement","src":"71758:39:28"},{"condition":{"id":8680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"71812:16:28","subExpression":{"expression":{"id":8678,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8673,"src":"71813:6:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":8679,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"71820:8:28","memberName":"isListed","nodeType":"MemberAccess","referencedDeclaration":9475,"src":"71813:15:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8689,"nodeType":"IfStatement","src":"71808:86:28","trueBody":{"id":8688,"nodeType":"Block","src":"71830:64:28","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":8684,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8664,"src":"71875:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8683,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"71867:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8682,"name":"address","nodeType":"ElementaryTypeName","src":"71867:7:28","typeDescriptions":{}}},"id":8685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71867:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8681,"name":"MarketNotListed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5287,"src":"71851:15:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":8686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71851:32:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8687,"nodeType":"RevertStatement","src":"71844:39:28"}]}},{"condition":{"id":8694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"72001:35:28","subExpression":{"baseExpression":{"expression":{"id":8690,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8673,"src":"72002:6:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market storage pointer"}},"id":8691,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"72009:17:28","memberName":"accountMembership","nodeType":"MemberAccess","referencedDeclaration":9483,"src":"72002:24:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":8693,"indexExpression":{"id":8692,"name":"redeemer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8666,"src":"72027:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"72002:34:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8697,"nodeType":"IfStatement","src":"71997:72:28","trueBody":{"id":8696,"nodeType":"Block","src":"72038:31:28","statements":[{"functionReturnParameters":8670,"id":8695,"nodeType":"Return","src":"72052:7:28"}]}},{"expression":{"arguments":[{"id":8699,"name":"redeemer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8666,"src":"72131:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8698,"name":"updatePrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8405,"src":"72118:12:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":8700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72118:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8701,"nodeType":"ExpressionStatement","src":"72118:22:28"},{"assignments":[8704],"declarations":[{"constant":false,"id":8704,"mutability":"mutable","name":"snapshot","nameLocation":"72274:8:28","nodeType":"VariableDeclaration","scope":8724,"src":"72242:40:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot"},"typeName":{"id":8703,"nodeType":"UserDefinedTypeName","pathNode":{"id":8702,"name":"AccountLiquiditySnapshot","nameLocations":["72242:24:28"],"nodeType":"IdentifierPath","referencedDeclaration":9466,"src":"72242:24:28"},"referencedDeclaration":9466,"src":"72242:24:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_storage_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot"}},"visibility":"internal"}],"id":8714,"initialValue":{"arguments":[{"id":8706,"name":"redeemer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8666,"src":"72332:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":8708,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8664,"src":"72361:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8707,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"72354:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":8709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72354:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"id":8710,"name":"redeemTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8668,"src":"72382:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":8711,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"72408:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":8712,"name":"_getCollateralFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9020,"src":"72423:20:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp memory)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp memory)"}],"id":8705,"name":"_getHypotheticalLiquiditySnapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8965,"src":"72285:33:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_contract$_VToken_$15506_$_t_uint256_$_t_uint256_$_t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$_$returns$_t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr_$","typeString":"function (address,contract VToken,uint256,uint256,function (contract VToken) view returns (struct ExponentialNoError.Exp memory)) view returns (struct ComptrollerStorage.AccountLiquiditySnapshot memory)"}},"id":8713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72285:168:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"nodeType":"VariableDeclarationStatement","src":"72242:211:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":8715,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8704,"src":"72467:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8716,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"72476:9:28","memberName":"shortfall","nodeType":"MemberAccess","referencedDeclaration":9465,"src":"72467:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":8717,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"72488:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"72467:22:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8723,"nodeType":"IfStatement","src":"72463:83:28","trueBody":{"id":8722,"nodeType":"Block","src":"72491:55:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":8719,"name":"InsufficientLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5355,"src":"72512:21:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":8720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72512:23:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8721,"nodeType":"RevertStatement","src":"72505:30:28"}]}}]},"documentation":{"id":8662,"nodeType":"StructuredDocumentation","src":"71373:276:28","text":" @dev Internal function to check that vTokens can be safely redeemed for the underlying asset.\n @param vToken Address of the vTokens to redeem\n @param redeemer Account redeeming the tokens\n @param redeemTokens The number of tokens to redeem"},"id":8725,"implemented":true,"kind":"function","modifiers":[],"name":"_checkRedeemAllowed","nameLocation":"71663:19:28","nodeType":"FunctionDefinition","parameters":{"id":8669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8664,"mutability":"mutable","name":"vToken","nameLocation":"71691:6:28","nodeType":"VariableDeclaration","scope":8725,"src":"71683:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8663,"name":"address","nodeType":"ElementaryTypeName","src":"71683:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8666,"mutability":"mutable","name":"redeemer","nameLocation":"71707:8:28","nodeType":"VariableDeclaration","scope":8725,"src":"71699:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8665,"name":"address","nodeType":"ElementaryTypeName","src":"71699:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8668,"mutability":"mutable","name":"redeemTokens","nameLocation":"71725:12:28","nodeType":"VariableDeclaration","scope":8725,"src":"71717:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8667,"name":"uint256","nodeType":"ElementaryTypeName","src":"71717:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"71682:56:28"},"returnParameters":{"id":8670,"nodeType":"ParameterList","parameters":[],"src":"71748:0:28"},"scope":9130,"src":"71654:898:28","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":8757,"nodeType":"Block","src":"73341:100:28","statements":[{"expression":{"arguments":[{"id":8745,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8728,"src":"73392:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"hexValue":"30","id":8749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"73416:1:28","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":8748,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"73408:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8747,"name":"address","nodeType":"ElementaryTypeName","src":"73408:7:28","typeDescriptions":{}}},"id":8750,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73408:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8746,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"73401:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":8751,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73401:18:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"hexValue":"30","id":8752,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"73421:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":8753,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"73424:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":8754,"name":"weight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8738,"src":"73427:6:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp memory)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp memory)"}],"id":8744,"name":"_getHypotheticalLiquiditySnapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8965,"src":"73358:33:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_contract$_VToken_$15506_$_t_uint256_$_t_uint256_$_t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$_$returns$_t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr_$","typeString":"function (address,contract VToken,uint256,uint256,function (contract VToken) view returns (struct ExponentialNoError.Exp memory)) view returns (struct ComptrollerStorage.AccountLiquiditySnapshot memory)"}},"id":8755,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73358:76:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"functionReturnParameters":8743,"id":8756,"nodeType":"Return","src":"73351:83:28"}]},"documentation":{"id":8726,"nodeType":"StructuredDocumentation","src":"72558:576:28","text":" @notice Get the total collateral, weighted collateral, borrow balance, liquidity, shortfall\n @param account The account to get the snapshot for\n @param weight The function to compute the weight of the collateral – either collateral factor or\n  liquidation threshold. Accepts the address of the vToken and returns the weight as Exp.\n @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\n  without calculating accumulated interest.\n @return snapshot Account liquidity snapshot"},"id":8758,"implemented":true,"kind":"function","modifiers":[],"name":"_getCurrentLiquiditySnapshot","nameLocation":"73148:28:28","nodeType":"FunctionDefinition","parameters":{"id":8739,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8728,"mutability":"mutable","name":"account","nameLocation":"73194:7:28","nodeType":"VariableDeclaration","scope":8758,"src":"73186:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8727,"name":"address","nodeType":"ElementaryTypeName","src":"73186:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8738,"mutability":"mutable","name":"weight","nameLocation":"73263:6:28","nodeType":"VariableDeclaration","scope":8758,"src":"73211:58:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp)"},"typeName":{"id":8737,"nodeType":"FunctionTypeName","parameterTypes":{"id":8732,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8731,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8737,"src":"73220:6:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":8730,"nodeType":"UserDefinedTypeName","pathNode":{"id":8729,"name":"VToken","nameLocations":["73220:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"73220:6:28"},"referencedDeclaration":15506,"src":"73220:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"}],"src":"73219:8:28"},"returnParameterTypes":{"id":8736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8735,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8737,"src":"73251:10:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":8734,"nodeType":"UserDefinedTypeName","pathNode":{"id":8733,"name":"Exp","nameLocations":["73251:3:28"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"73251:3:28"},"referencedDeclaration":9645,"src":"73251:3:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"73250:12:28"},"src":"73211:58:28","stateMutability":"view","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp)"},"visibility":"internal"},"visibility":"internal"}],"src":"73176:99:28"},"returnParameters":{"id":8743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8742,"mutability":"mutable","name":"snapshot","nameLocation":"73331:8:28","nodeType":"VariableDeclaration","scope":8758,"src":"73299:40:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot"},"typeName":{"id":8741,"nodeType":"UserDefinedTypeName","pathNode":{"id":8740,"name":"AccountLiquiditySnapshot","nameLocations":["73299:24:28"],"nodeType":"IdentifierPath","referencedDeclaration":9466,"src":"73299:24:28"},"referencedDeclaration":9466,"src":"73299:24:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_storage_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot"}},"visibility":"internal"}],"src":"73298:42:28"},"scope":9130,"src":"73139:302:28","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":8964,"nodeType":"Block","src":"74554:2573:28","statements":[{"assignments":[8788],"declarations":[{"constant":false,"id":8788,"mutability":"mutable","name":"assets","nameLocation":"74624:6:28","nodeType":"VariableDeclaration","scope":8964,"src":"74608:22:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":8786,"nodeType":"UserDefinedTypeName","pathNode":{"id":8785,"name":"VToken","nameLocations":["74608:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"74608:6:28"},"referencedDeclaration":15506,"src":"74608:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":8787,"nodeType":"ArrayTypeName","src":"74608:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"}],"id":8792,"initialValue":{"arguments":[{"id":8790,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8761,"src":"74645:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8789,"name":"getAssetsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8504,"src":"74633:11:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_$","typeString":"function (address) view returns (contract VToken[] memory)"}},"id":8791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"74633:20:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"nodeType":"VariableDeclarationStatement","src":"74608:45:28"},{"assignments":[8794],"declarations":[{"constant":false,"id":8794,"mutability":"mutable","name":"assetsCount","nameLocation":"74671:11:28","nodeType":"VariableDeclaration","scope":8964,"src":"74663:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8793,"name":"uint256","nodeType":"ElementaryTypeName","src":"74663:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8797,"initialValue":{"expression":{"id":8795,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8788,"src":"74685:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":8796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"74692:6:28","memberName":"length","nodeType":"MemberAccess","src":"74685:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"74663:35:28"},{"body":{"id":8914,"nodeType":"Block","src":"74747:1819:28","statements":[{"assignments":[8809],"declarations":[{"constant":false,"id":8809,"mutability":"mutable","name":"asset","nameLocation":"74768:5:28","nodeType":"VariableDeclaration","scope":8914,"src":"74761:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":8808,"nodeType":"UserDefinedTypeName","pathNode":{"id":8807,"name":"VToken","nameLocations":["74761:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"74761:6:28"},"referencedDeclaration":15506,"src":"74761:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"}],"id":8813,"initialValue":{"baseExpression":{"id":8810,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8788,"src":"74776:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":8812,"indexExpression":{"id":8811,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8799,"src":"74783:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"74776:9:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"nodeType":"VariableDeclarationStatement","src":"74761:24:28"},{"assignments":[8815,8817,8819],"declarations":[{"constant":false,"id":8815,"mutability":"mutable","name":"vTokenBalance","nameLocation":"74876:13:28","nodeType":"VariableDeclaration","scope":8914,"src":"74868:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8814,"name":"uint256","nodeType":"ElementaryTypeName","src":"74868:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8817,"mutability":"mutable","name":"borrowBalance","nameLocation":"74899:13:28","nodeType":"VariableDeclaration","scope":8914,"src":"74891:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8816,"name":"uint256","nodeType":"ElementaryTypeName","src":"74891:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8819,"mutability":"mutable","name":"exchangeRateMantissa","nameLocation":"74922:20:28","nodeType":"VariableDeclaration","scope":8914,"src":"74914:28:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8818,"name":"uint256","nodeType":"ElementaryTypeName","src":"74914:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8824,"initialValue":{"arguments":[{"id":8821,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8809,"src":"74987:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"id":8822,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8761,"src":"75010:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_address","typeString":"address"}],"id":8820,"name":"_safeGetAccountSnapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9089,"src":"74946:23:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (contract VToken,address) view returns (uint256,uint256,uint256)"}},"id":8823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"74946:85:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"74867:164:28"},{"assignments":[8827],"declarations":[{"constant":false,"id":8827,"mutability":"mutable","name":"oraclePrice","nameLocation":"75110:11:28","nodeType":"VariableDeclaration","scope":8914,"src":"75099:22:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":8826,"nodeType":"UserDefinedTypeName","pathNode":{"id":8825,"name":"Exp","nameLocations":["75099:3:28"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"75099:3:28"},"referencedDeclaration":9645,"src":"75099:3:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":8833,"initialValue":{"arguments":[{"arguments":[{"id":8830,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8809,"src":"75164:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":8829,"name":"_safeGetUnderlyingPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8999,"src":"75140:23:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_uint256_$","typeString":"function (contract VToken) view returns (uint256)"}},"id":8831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"75140:30:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8828,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"75124:3:28","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":8832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["75130:8:28"],"names":["mantissa"],"nodeType":"FunctionCall","src":"75124:49:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"VariableDeclarationStatement","src":"75099:74:28"},{"assignments":[8836],"declarations":[{"constant":false,"id":8836,"mutability":"mutable","name":"vTokenPrice","nameLocation":"75265:11:28","nodeType":"VariableDeclaration","scope":8914,"src":"75254:22:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":8835,"nodeType":"UserDefinedTypeName","pathNode":{"id":8834,"name":"Exp","nameLocations":["75254:3:28"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"75254:3:28"},"referencedDeclaration":9645,"src":"75254:3:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":8843,"initialValue":{"arguments":[{"arguments":[{"id":8839,"name":"exchangeRateMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8819,"src":"75300:20:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8838,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"75284:3:28","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":8840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["75290:8:28"],"names":["mantissa"],"nodeType":"FunctionCall","src":"75284:39:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":8841,"name":"oraclePrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8827,"src":"75325:11:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":8837,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":9941,"src":"75279:4:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_struct$_Exp_$9645_memory_ptr_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (struct ExponentialNoError.Exp memory,struct ExponentialNoError.Exp memory) pure returns (struct ExponentialNoError.Exp memory)"}},"id":8842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"75279:58:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"VariableDeclarationStatement","src":"75254:83:28"},{"assignments":[8846],"declarations":[{"constant":false,"id":8846,"mutability":"mutable","name":"weightedVTokenPrice","nameLocation":"75362:19:28","nodeType":"VariableDeclaration","scope":8914,"src":"75351:30:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":8845,"nodeType":"UserDefinedTypeName","pathNode":{"id":8844,"name":"Exp","nameLocations":["75351:3:28"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"75351:3:28"},"referencedDeclaration":9645,"src":"75351:3:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":8853,"initialValue":{"arguments":[{"arguments":[{"id":8849,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8809,"src":"75396:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":8848,"name":"weight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8778,"src":"75389:6:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp memory)"}},"id":8850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"75389:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":8851,"name":"vTokenPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8836,"src":"75404:11:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":8847,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":9941,"src":"75384:4:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_struct$_Exp_$9645_memory_ptr_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (struct ExponentialNoError.Exp memory,struct ExponentialNoError.Exp memory) pure returns (struct ExponentialNoError.Exp memory)"}},"id":8852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"75384:32:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"VariableDeclarationStatement","src":"75351:65:28"},{"expression":{"id":8863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":8854,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8782,"src":"75504:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8856,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"75513:18:28","memberName":"weightedCollateral","nodeType":"MemberAccess","referencedDeclaration":9457,"src":"75504:27:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8858,"name":"weightedVTokenPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8846,"src":"75577:19:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":8859,"name":"vTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8815,"src":"75614:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8860,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8782,"src":"75645:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8861,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"75654:18:28","memberName":"weightedCollateral","nodeType":"MemberAccess","referencedDeclaration":9457,"src":"75645:27:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8857,"name":"mul_ScalarTruncateAddUInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9730,"src":"75534:25:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct ExponentialNoError.Exp memory,uint256,uint256) pure returns (uint256)"}},"id":8862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"75534:152:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"75504:182:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8864,"nodeType":"ExpressionStatement","src":"75504:182:28"},{"expression":{"id":8874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":8865,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8782,"src":"75763:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8867,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"75772:15:28","memberName":"totalCollateral","nodeType":"MemberAccess","referencedDeclaration":9455,"src":"75763:24:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8869,"name":"vTokenPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8836,"src":"75816:11:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":8870,"name":"vTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8815,"src":"75829:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8871,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8782,"src":"75844:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8872,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"75853:15:28","memberName":"totalCollateral","nodeType":"MemberAccess","referencedDeclaration":9455,"src":"75844:24:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8868,"name":"mul_ScalarTruncateAddUInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9730,"src":"75790:25:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct ExponentialNoError.Exp memory,uint256,uint256) pure returns (uint256)"}},"id":8873,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"75790:79:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"75763:106:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8875,"nodeType":"ExpressionStatement","src":"75763:106:28"},{"expression":{"id":8885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":8876,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8782,"src":"75938:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8878,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"75947:7:28","memberName":"borrows","nodeType":"MemberAccess","referencedDeclaration":9459,"src":"75938:16:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8880,"name":"oraclePrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8827,"src":"75983:11:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":8881,"name":"borrowBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8817,"src":"75996:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8882,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8782,"src":"76011:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8883,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"76020:7:28","memberName":"borrows","nodeType":"MemberAccess","referencedDeclaration":9459,"src":"76011:16:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8879,"name":"mul_ScalarTruncateAddUInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9730,"src":"75957:25:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct ExponentialNoError.Exp memory,uint256,uint256) pure returns (uint256)"}},"id":8884,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"75957:71:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"75938:90:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8886,"nodeType":"ExpressionStatement","src":"75938:90:28"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"id":8889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8887,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8809,"src":"76113:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":8888,"name":"vTokenModify","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8764,"src":"76122:12:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"src":"76113:21:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8913,"nodeType":"IfStatement","src":"76109:447:28","trueBody":{"id":8912,"nodeType":"Block","src":"76136:420:28","statements":[{"expression":{"id":8899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":8890,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8782,"src":"76246:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8892,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"76255:7:28","memberName":"effects","nodeType":"MemberAccess","referencedDeclaration":9461,"src":"76246:16:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8894,"name":"weightedVTokenPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8846,"src":"76291:19:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":8895,"name":"redeemTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8766,"src":"76312:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8896,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8782,"src":"76326:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8897,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"76335:7:28","memberName":"effects","nodeType":"MemberAccess","referencedDeclaration":9461,"src":"76326:16:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8893,"name":"mul_ScalarTruncateAddUInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9730,"src":"76265:25:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct ExponentialNoError.Exp memory,uint256,uint256) pure returns (uint256)"}},"id":8898,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"76265:78:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"76246:97:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8900,"nodeType":"ExpressionStatement","src":"76246:97:28"},{"expression":{"id":8910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":8901,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8782,"src":"76452:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8903,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"76461:7:28","memberName":"effects","nodeType":"MemberAccess","referencedDeclaration":9461,"src":"76452:16:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8905,"name":"oraclePrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8827,"src":"76497:11:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":8906,"name":"borrowAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8768,"src":"76510:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8907,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8782,"src":"76524:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8908,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"76533:7:28","memberName":"effects","nodeType":"MemberAccess","referencedDeclaration":9461,"src":"76524:16:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8904,"name":"mul_ScalarTruncateAddUInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9730,"src":"76471:25:28","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct ExponentialNoError.Exp memory,uint256,uint256) pure returns (uint256)"}},"id":8909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"76471:70:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"76452:89:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8911,"nodeType":"ExpressionStatement","src":"76452:89:28"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8801,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8799,"src":"74725:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8802,"name":"assetsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8794,"src":"74729:11:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"74725:15:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8915,"initializationExpression":{"assignments":[8799],"declarations":[{"constant":false,"id":8799,"mutability":"mutable","name":"i","nameLocation":"74722:1:28","nodeType":"VariableDeclaration","scope":8915,"src":"74714:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8798,"name":"uint256","nodeType":"ElementaryTypeName","src":"74714:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8800,"nodeType":"VariableDeclarationStatement","src":"74714:9:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":8805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"74742:3:28","subExpression":{"id":8804,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8799,"src":"74744:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8806,"nodeType":"ExpressionStatement","src":"74742:3:28"},"nodeType":"ForStatement","src":"74709:1857:28"},{"assignments":[8917],"declarations":[{"constant":false,"id":8917,"mutability":"mutable","name":"borrowPlusEffects","nameLocation":"76584:17:28","nodeType":"VariableDeclaration","scope":8964,"src":"76576:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8916,"name":"uint256","nodeType":"ElementaryTypeName","src":"76576:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8923,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":8918,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8782,"src":"76604:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8919,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"76613:7:28","memberName":"borrows","nodeType":"MemberAccess","referencedDeclaration":9459,"src":"76604:16:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":8920,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8782,"src":"76623:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8921,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"76632:7:28","memberName":"effects","nodeType":"MemberAccess","referencedDeclaration":9461,"src":"76623:16:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"76604:35:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"76576:63:28"},{"id":8961,"nodeType":"UncheckedBlock","src":"76720:375:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":8924,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8782,"src":"76748:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8925,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"76757:18:28","memberName":"weightedCollateral","nodeType":"MemberAccess","referencedDeclaration":9457,"src":"76748:27:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":8926,"name":"borrowPlusEffects","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8917,"src":"76778:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"76748:47:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8959,"nodeType":"Block","src":"76944:141:28","statements":[{"expression":{"id":8948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":8944,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8782,"src":"76962:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8946,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"76971:9:28","memberName":"liquidity","nodeType":"MemberAccess","referencedDeclaration":9463,"src":"76962:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":8947,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"76983:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"76962:22:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8949,"nodeType":"ExpressionStatement","src":"76962:22:28"},{"expression":{"id":8957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":8950,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8782,"src":"77002:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8952,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"77011:9:28","memberName":"shortfall","nodeType":"MemberAccess","referencedDeclaration":9465,"src":"77002:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8953,"name":"borrowPlusEffects","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8917,"src":"77023:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":8954,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8782,"src":"77043:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8955,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"77052:18:28","memberName":"weightedCollateral","nodeType":"MemberAccess","referencedDeclaration":9457,"src":"77043:27:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"77023:47:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"77002:68:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8958,"nodeType":"ExpressionStatement","src":"77002:68:28"}]},"id":8960,"nodeType":"IfStatement","src":"76744:341:28","trueBody":{"id":8943,"nodeType":"Block","src":"76797:141:28","statements":[{"expression":{"id":8935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":8928,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8782,"src":"76815:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8930,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"76824:9:28","memberName":"liquidity","nodeType":"MemberAccess","referencedDeclaration":9463,"src":"76815:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":8931,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8782,"src":"76836:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8932,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"76845:18:28","memberName":"weightedCollateral","nodeType":"MemberAccess","referencedDeclaration":9457,"src":"76836:27:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":8933,"name":"borrowPlusEffects","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8917,"src":"76866:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"76836:47:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"76815:68:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8936,"nodeType":"ExpressionStatement","src":"76815:68:28"},{"expression":{"id":8941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":8937,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8782,"src":"76901:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"id":8939,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"76910:9:28","memberName":"shortfall","nodeType":"MemberAccess","referencedDeclaration":9465,"src":"76901:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":8940,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"76922:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"76901:22:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8942,"nodeType":"ExpressionStatement","src":"76901:22:28"}]}}]},{"expression":{"id":8962,"name":"snapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8782,"src":"77112:8:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot memory"}},"functionReturnParameters":8783,"id":8963,"nodeType":"Return","src":"77105:15:28"}]},"documentation":{"id":8759,"nodeType":"StructuredDocumentation","src":"73447:806:28","text":" @notice Determine what the supply/borrow balances would be if the given amounts were redeemed/borrowed\n @param vTokenModify The market to hypothetically redeem/borrow in\n @param account The account to determine liquidity for\n @param redeemTokens The number of tokens to hypothetically redeem\n @param borrowAmount The amount of underlying to hypothetically borrow\n @param weight The function to compute the weight of the collateral – either collateral factor or\nliquidation threshold. Accepts the address of the VToken and returns the weight\n @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\n  without calculating accumulated interest.\n @return snapshot Account liquidity snapshot"},"id":8965,"implemented":true,"kind":"function","modifiers":[],"name":"_getHypotheticalLiquiditySnapshot","nameLocation":"74267:33:28","nodeType":"FunctionDefinition","parameters":{"id":8779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8761,"mutability":"mutable","name":"account","nameLocation":"74318:7:28","nodeType":"VariableDeclaration","scope":8965,"src":"74310:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8760,"name":"address","nodeType":"ElementaryTypeName","src":"74310:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8764,"mutability":"mutable","name":"vTokenModify","nameLocation":"74342:12:28","nodeType":"VariableDeclaration","scope":8965,"src":"74335:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":8763,"nodeType":"UserDefinedTypeName","pathNode":{"id":8762,"name":"VToken","nameLocations":["74335:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"74335:6:28"},"referencedDeclaration":15506,"src":"74335:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"},{"constant":false,"id":8766,"mutability":"mutable","name":"redeemTokens","nameLocation":"74372:12:28","nodeType":"VariableDeclaration","scope":8965,"src":"74364:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8765,"name":"uint256","nodeType":"ElementaryTypeName","src":"74364:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8768,"mutability":"mutable","name":"borrowAmount","nameLocation":"74402:12:28","nodeType":"VariableDeclaration","scope":8965,"src":"74394:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8767,"name":"uint256","nodeType":"ElementaryTypeName","src":"74394:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8778,"mutability":"mutable","name":"weight","nameLocation":"74476:6:28","nodeType":"VariableDeclaration","scope":8965,"src":"74424:58:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp)"},"typeName":{"id":8777,"nodeType":"FunctionTypeName","parameterTypes":{"id":8772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8771,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8777,"src":"74433:6:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":8770,"nodeType":"UserDefinedTypeName","pathNode":{"id":8769,"name":"VToken","nameLocations":["74433:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"74433:6:28"},"referencedDeclaration":15506,"src":"74433:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"}],"src":"74432:8:28"},"returnParameterTypes":{"id":8776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8775,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8777,"src":"74464:10:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":8774,"nodeType":"UserDefinedTypeName","pathNode":{"id":8773,"name":"Exp","nameLocations":["74464:3:28"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"74464:3:28"},"referencedDeclaration":9645,"src":"74464:3:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"74463:12:28"},"src":"74424:58:28","stateMutability":"view","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_VToken_$15506_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (contract VToken) view returns (struct ExponentialNoError.Exp)"},"visibility":"internal"},"visibility":"internal"}],"src":"74300:188:28"},"returnParameters":{"id":8783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8782,"mutability":"mutable","name":"snapshot","nameLocation":"74544:8:28","nodeType":"VariableDeclaration","scope":8965,"src":"74512:40:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_memory_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot"},"typeName":{"id":8781,"nodeType":"UserDefinedTypeName","pathNode":{"id":8780,"name":"AccountLiquiditySnapshot","nameLocations":["74512:24:28"],"nodeType":"IdentifierPath","referencedDeclaration":9466,"src":"74512:24:28"},"referencedDeclaration":9466,"src":"74512:24:28","typeDescriptions":{"typeIdentifier":"t_struct$_AccountLiquiditySnapshot_$9466_storage_ptr","typeString":"struct ComptrollerStorage.AccountLiquiditySnapshot"}},"visibility":"internal"}],"src":"74511:42:28"},"scope":9130,"src":"74258:2869:28","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":8998,"nodeType":"Block","src":"77391:221:28","statements":[{"assignments":[8975],"declarations":[{"constant":false,"id":8975,"mutability":"mutable","name":"oraclePriceMantissa","nameLocation":"77409:19:28","nodeType":"VariableDeclaration","scope":8998,"src":"77401:27:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8974,"name":"uint256","nodeType":"ElementaryTypeName","src":"77401:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8983,"initialValue":{"arguments":[{"arguments":[{"id":8980,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8969,"src":"77465:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":8979,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"77457:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8978,"name":"address","nodeType":"ElementaryTypeName","src":"77457:7:28","typeDescriptions":{}}},"id":8981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"77457:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8976,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9488,"src":"77431:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"id":8977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"77438:18:28","memberName":"getUnderlyingPrice","nodeType":"MemberAccess","referencedDeclaration":16172,"src":"77431:25:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":8982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"77431:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"77401:71:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8984,"name":"oraclePriceMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8975,"src":"77486:19:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":8985,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"77509:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"77486:24:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8995,"nodeType":"IfStatement","src":"77482:88:28","trueBody":{"id":8994,"nodeType":"Block","src":"77512:58:28","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":8990,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8969,"src":"77552:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":8989,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"77544:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8988,"name":"address","nodeType":"ElementaryTypeName","src":"77544:7:28","typeDescriptions":{}}},"id":8991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"77544:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8987,"name":"PriceError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5275,"src":"77533:10:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":8992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"77533:26:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8993,"nodeType":"RevertStatement","src":"77526:33:28"}]}},{"expression":{"id":8996,"name":"oraclePriceMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8975,"src":"77586:19:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8973,"id":8997,"nodeType":"Return","src":"77579:26:28"}]},"documentation":{"id":8966,"nodeType":"StructuredDocumentation","src":"77133:174:28","text":" @dev Retrieves price from oracle for an asset and checks it is nonzero\n @param asset Address for asset to query price\n @return Underlying price"},"id":8999,"implemented":true,"kind":"function","modifiers":[],"name":"_safeGetUnderlyingPrice","nameLocation":"77321:23:28","nodeType":"FunctionDefinition","parameters":{"id":8970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8969,"mutability":"mutable","name":"asset","nameLocation":"77352:5:28","nodeType":"VariableDeclaration","scope":8999,"src":"77345:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":8968,"nodeType":"UserDefinedTypeName","pathNode":{"id":8967,"name":"VToken","nameLocations":["77345:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"77345:6:28"},"referencedDeclaration":15506,"src":"77345:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"}],"src":"77344:14:28"},"returnParameters":{"id":8973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8972,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8999,"src":"77382:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8971,"name":"uint256","nodeType":"ElementaryTypeName","src":"77382:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"77381:9:28"},"scope":9130,"src":"77312:300:28","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":9019,"nodeType":"Block","src":"77849:91:28","statements":[{"expression":{"arguments":[{"expression":{"baseExpression":{"id":9010,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"77882:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":9015,"indexExpression":{"arguments":[{"id":9013,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9003,"src":"77898:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":9012,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"77890:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9011,"name":"address","nodeType":"ElementaryTypeName","src":"77890:7:28","typeDescriptions":{}}},"id":9014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"77890:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"77882:23:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"id":9016,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"77906:24:28","memberName":"collateralFactorMantissa","nodeType":"MemberAccess","referencedDeclaration":9477,"src":"77882:48:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9009,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"77866:3:28","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":9017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["77872:8:28"],"names":["mantissa"],"nodeType":"FunctionCall","src":"77866:67:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"functionReturnParameters":9008,"id":9018,"nodeType":"Return","src":"77859:74:28"}]},"documentation":{"id":9000,"nodeType":"StructuredDocumentation","src":"77618:147:28","text":" @dev Return collateral factor for a market\n @param asset Address for asset\n @return Collateral factor as exponential"},"id":9020,"implemented":true,"kind":"function","modifiers":[],"name":"_getCollateralFactor","nameLocation":"77779:20:28","nodeType":"FunctionDefinition","parameters":{"id":9004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9003,"mutability":"mutable","name":"asset","nameLocation":"77807:5:28","nodeType":"VariableDeclaration","scope":9020,"src":"77800:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":9002,"nodeType":"UserDefinedTypeName","pathNode":{"id":9001,"name":"VToken","nameLocations":["77800:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"77800:6:28"},"referencedDeclaration":15506,"src":"77800:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"}],"src":"77799:14:28"},"returnParameters":{"id":9008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9007,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9020,"src":"77837:10:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9006,"nodeType":"UserDefinedTypeName","pathNode":{"id":9005,"name":"Exp","nameLocations":["77837:3:28"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"77837:3:28"},"referencedDeclaration":9645,"src":"77837:3:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"77836:12:28"},"scope":9130,"src":"77770:170:28","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":9040,"nodeType":"Block","src":"78235:95:28","statements":[{"expression":{"arguments":[{"expression":{"baseExpression":{"id":9031,"name":"markets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9507,"src":"78268:7:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market storage ref)"}},"id":9036,"indexExpression":{"arguments":[{"id":9034,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9024,"src":"78284:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":9033,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"78276:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9032,"name":"address","nodeType":"ElementaryTypeName","src":"78276:7:28","typeDescriptions":{}}},"id":9035,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"78276:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"78268:23:28","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage","typeString":"struct ComptrollerStorage.Market storage ref"}},"id":9037,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"78292:28:28","memberName":"liquidationThresholdMantissa","nodeType":"MemberAccess","referencedDeclaration":9479,"src":"78268:52:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9030,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"78252:3:28","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":9038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["78258:8:28"],"names":["mantissa"],"nodeType":"FunctionCall","src":"78252:71:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"functionReturnParameters":9029,"id":9039,"nodeType":"Return","src":"78245:78:28"}]},"documentation":{"id":9021,"nodeType":"StructuredDocumentation","src":"77946:201:28","text":" @dev Retrieves liquidation threshold for a market as an exponential\n @param asset Address for asset to liquidation threshold\n @return Liquidation threshold as exponential"},"id":9041,"implemented":true,"kind":"function","modifiers":[],"name":"_getLiquidationThreshold","nameLocation":"78161:24:28","nodeType":"FunctionDefinition","parameters":{"id":9025,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9024,"mutability":"mutable","name":"asset","nameLocation":"78193:5:28","nodeType":"VariableDeclaration","scope":9041,"src":"78186:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":9023,"nodeType":"UserDefinedTypeName","pathNode":{"id":9022,"name":"VToken","nameLocations":["78186:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"78186:6:28"},"referencedDeclaration":15506,"src":"78186:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"}],"src":"78185:14:28"},"returnParameters":{"id":9029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9028,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9041,"src":"78223:10:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9027,"nodeType":"UserDefinedTypeName","pathNode":{"id":9026,"name":"Exp","nameLocations":["78223:3:28"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"78223:3:28"},"referencedDeclaration":9645,"src":"78223:3:28","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"78222:12:28"},"scope":9130,"src":"78152:178:28","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":9088,"nodeType":"Block","src":"78902:289:28","statements":[{"assignments":[9057],"declarations":[{"constant":false,"id":9057,"mutability":"mutable","name":"err","nameLocation":"78920:3:28","nodeType":"VariableDeclaration","scope":9088,"src":"78912:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9056,"name":"uint256","nodeType":"ElementaryTypeName","src":"78912:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9058,"nodeType":"VariableDeclarationStatement","src":"78912:11:28"},{"expression":{"id":9068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":9059,"name":"err","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9057,"src":"78934:3:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":9060,"name":"vTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9050,"src":"78939:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":9061,"name":"borrowBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9052,"src":"78954:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":9062,"name":"exchangeRateMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9054,"src":"78969:20:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9063,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"78933:57:28","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9066,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9047,"src":"79019:4:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9064,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9045,"src":"78993:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":9065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"79000:18:28","memberName":"getAccountSnapshot","nodeType":"MemberAccess","referencedDeclaration":13668,"src":"78993:25:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (address) view external returns (uint256,uint256,uint256,uint256)"}},"id":9067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"78993:31:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"src":"78933:91:28","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9069,"nodeType":"ExpressionStatement","src":"78933:91:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9070,"name":"err","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9057,"src":"79038:3:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":9071,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"79045:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"79038:8:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9082,"nodeType":"IfStatement","src":"79034:82:28","trueBody":{"id":9081,"nodeType":"Block","src":"79048:68:28","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":9076,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9045,"src":"79091:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":9075,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"79083:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9074,"name":"address","nodeType":"ElementaryTypeName","src":"79083:7:28","typeDescriptions":{}}},"id":9077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"79083:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9078,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9047,"src":"79100:4:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9073,"name":"SnapshotError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5282,"src":"79069:13:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) pure"}},"id":9079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"79069:36:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9080,"nodeType":"RevertStatement","src":"79062:43:28"}]}},{"expression":{"components":[{"id":9083,"name":"vTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9050,"src":"79133:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":9084,"name":"borrowBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9052,"src":"79148:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":9085,"name":"exchangeRateMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9054,"src":"79163:20:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9086,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"79132:52:28","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"functionReturnParameters":9055,"id":9087,"nodeType":"Return","src":"79125:59:28"}]},"documentation":{"id":9042,"nodeType":"StructuredDocumentation","src":"78336:378:28","text":" @dev Returns supply and borrow balances of user in vToken, reverts on failure\n @param vToken Market to query\n @param user Account address\n @return vTokenBalance Balance of vTokens, the same as vToken.balanceOf(user)\n @return borrowBalance Borrowed amount, including the interest\n @return exchangeRateMantissa Stored exchange rate"},"id":9089,"implemented":true,"kind":"function","modifiers":[],"name":"_safeGetAccountSnapshot","nameLocation":"78728:23:28","nodeType":"FunctionDefinition","parameters":{"id":9048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9045,"mutability":"mutable","name":"vToken","nameLocation":"78768:6:28","nodeType":"VariableDeclaration","scope":9089,"src":"78761:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":9044,"nodeType":"UserDefinedTypeName","pathNode":{"id":9043,"name":"VToken","nameLocations":["78761:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"78761:6:28"},"referencedDeclaration":15506,"src":"78761:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"},{"constant":false,"id":9047,"mutability":"mutable","name":"user","nameLocation":"78792:4:28","nodeType":"VariableDeclaration","scope":9089,"src":"78784:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9046,"name":"address","nodeType":"ElementaryTypeName","src":"78784:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"78751:51:28"},"returnParameters":{"id":9055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9050,"mutability":"mutable","name":"vTokenBalance","nameLocation":"78834:13:28","nodeType":"VariableDeclaration","scope":9089,"src":"78826:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9049,"name":"uint256","nodeType":"ElementaryTypeName","src":"78826:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9052,"mutability":"mutable","name":"borrowBalance","nameLocation":"78857:13:28","nodeType":"VariableDeclaration","scope":9089,"src":"78849:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9051,"name":"uint256","nodeType":"ElementaryTypeName","src":"78849:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9054,"mutability":"mutable","name":"exchangeRateMantissa","nameLocation":"78880:20:28","nodeType":"VariableDeclaration","scope":9089,"src":"78872:28:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9053,"name":"uint256","nodeType":"ElementaryTypeName","src":"78872:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"78825:76:28"},"scope":9130,"src":"78719:472:28","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":9107,"nodeType":"Block","src":"79380:126:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":9095,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"79394:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":9096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"79398:6:28","memberName":"sender","nodeType":"MemberAccess","src":"79394:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9097,"name":"expectedSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9092,"src":"79408:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"79394:28:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9106,"nodeType":"IfStatement","src":"79390:110:28","trueBody":{"id":9105,"nodeType":"Block","src":"79424:76:28","statements":[{"errorCall":{"arguments":[{"id":9100,"name":"expectedSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9092,"src":"79462:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":9101,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"79478:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":9102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"79482:6:28","memberName":"sender","nodeType":"MemberAccess","src":"79478:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9099,"name":"UnexpectedSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5270,"src":"79445:16:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) pure"}},"id":9103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"79445:44:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9104,"nodeType":"RevertStatement","src":"79438:51:28"}]}}]},"documentation":{"id":9090,"nodeType":"StructuredDocumentation","src":"79197:116:28","text":"@notice Reverts if the call is not from expectedSender\n @param expectedSender Expected transaction sender"},"id":9108,"implemented":true,"kind":"function","modifiers":[],"name":"_checkSenderIs","nameLocation":"79327:14:28","nodeType":"FunctionDefinition","parameters":{"id":9093,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9092,"mutability":"mutable","name":"expectedSender","nameLocation":"79350:14:28","nodeType":"VariableDeclaration","scope":9108,"src":"79342:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9091,"name":"address","nodeType":"ElementaryTypeName","src":"79342:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"79341:24:28"},"returnParameters":{"id":9094,"nodeType":"ParameterList","parameters":[],"src":"79380:0:28"},"scope":9130,"src":"79318:188:28","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":9128,"nodeType":"Block","src":"79730:110:28","statements":[{"condition":{"arguments":[{"id":9118,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9111,"src":"79757:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9119,"name":"action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9114,"src":"79765:6:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"id":9117,"name":"actionPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8423,"src":"79744:12:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Action_$9148_$returns$_t_bool_$","typeString":"function (address,enum Action) view returns (bool)"}},"id":9120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"79744:28:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9127,"nodeType":"IfStatement","src":"79740:94:28","trueBody":{"id":9126,"nodeType":"Block","src":"79774:60:28","statements":[{"errorCall":{"arguments":[{"id":9122,"name":"market","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9111,"src":"79808:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9123,"name":"action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9114,"src":"79816:6:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"id":9121,"name":"ActionPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5372,"src":"79795:12:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_enum$_Action_$9148_$returns$__$","typeString":"function (address,enum Action) pure"}},"id":9124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"79795:28:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9125,"nodeType":"RevertStatement","src":"79788:35:28"}]}}]},"documentation":{"id":9109,"nodeType":"StructuredDocumentation","src":"79512:137:28","text":"@notice Reverts if a certain action is paused on a market\n @param market Market to check\n @param action Action to check"},"id":9129,"implemented":true,"kind":"function","modifiers":[],"name":"_checkActionPauseState","nameLocation":"79663:22:28","nodeType":"FunctionDefinition","parameters":{"id":9115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9111,"mutability":"mutable","name":"market","nameLocation":"79694:6:28","nodeType":"VariableDeclaration","scope":9129,"src":"79686:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9110,"name":"address","nodeType":"ElementaryTypeName","src":"79686:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9114,"mutability":"mutable","name":"action","nameLocation":"79709:6:28","nodeType":"VariableDeclaration","scope":9129,"src":"79702:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"},"typeName":{"id":9113,"nodeType":"UserDefinedTypeName","pathNode":{"id":9112,"name":"Action","nameLocations":["79702:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":9148,"src":"79702:6:28"},"referencedDeclaration":9148,"src":"79702:6:28","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}},"visibility":"internal"}],"src":"79685:31:28"},"returnParameters":{"id":9116,"nodeType":"ParameterList","parameters":[],"src":"79730:0:28"},"scope":9130,"src":"79654:186:28","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":9131,"src":"3223:76619:28","usedErrors":[4916,5260,5263,5270,5275,5282,5287,5290,5297,5300,5303,5306,5309,5312,5315,5318,5321,5324,5327,5330,5333,5340,5346,5352,5355,5358,5361,5364,5372,5377,5384,5391,5394,10290,16125],"usedEvents":[17,124,422,4907,5129,5137,5144,5154,5164,5171,5180,5191,5199,5206,5214,5221,5227,5236,5243,5248,5257,10283]}],"src":"41:79802:28"},"id":28},"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol":{"ast":{"absolutePath":"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol","exportedSymbols":{"Action":[9148],"ComptrollerInterface":[9353],"ComptrollerViewInterface":[9431],"ResilientOracleInterface":[16173],"RewardsDistributor":[12324],"VToken":[15506]},"id":9432,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":9132,"literals":["solidity","^","0.8",".25"],"nodeType":"PragmaDirective","src":"41:24:29"},{"absolutePath":"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol","file":"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol","id":9134,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9432,"sourceUnit":16196,"src":"67:106:29","symbolAliases":[{"foreign":{"id":9133,"name":"ResilientOracleInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16173,"src":"76:24:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/VToken.sol","file":"./VToken.sol","id":9136,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9432,"sourceUnit":15507,"src":"175:38:29","symbolAliases":[{"foreign":{"id":9135,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"184:6:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol","file":"./Rewards/RewardsDistributor.sol","id":9138,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9432,"sourceUnit":12325,"src":"214:70:29","symbolAliases":[{"foreign":{"id":9137,"name":"RewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12324,"src":"223:18:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"Action","id":9148,"members":[{"id":9139,"name":"MINT","nameLocation":"304:4:29","nodeType":"EnumValue","src":"304:4:29"},{"id":9140,"name":"REDEEM","nameLocation":"314:6:29","nodeType":"EnumValue","src":"314:6:29"},{"id":9141,"name":"BORROW","nameLocation":"326:6:29","nodeType":"EnumValue","src":"326:6:29"},{"id":9142,"name":"REPAY","nameLocation":"338:5:29","nodeType":"EnumValue","src":"338:5:29"},{"id":9143,"name":"SEIZE","nameLocation":"349:5:29","nodeType":"EnumValue","src":"349:5:29"},{"id":9144,"name":"LIQUIDATE","nameLocation":"360:9:29","nodeType":"EnumValue","src":"360:9:29"},{"id":9145,"name":"TRANSFER","nameLocation":"375:8:29","nodeType":"EnumValue","src":"375:8:29"},{"id":9146,"name":"ENTER_MARKET","nameLocation":"389:12:29","nodeType":"EnumValue","src":"389:12:29"},{"id":9147,"name":"EXIT_MARKET","nameLocation":"407:11:29","nodeType":"EnumValue","src":"407:11:29"}],"name":"Action","nameLocation":"291:6:29","nodeType":"EnumDefinition","src":"286:134:29"},{"abstract":false,"baseContracts":[],"canonicalName":"ComptrollerInterface","contractDependencies":[],"contractKind":"interface","documentation":{"id":9149,"nodeType":"StructuredDocumentation","src":"422:119:29","text":" @title ComptrollerInterface\n @author Venus\n @notice Interface implemented by the `Comptroller` contract."},"fullyImplemented":false,"id":9353,"linearizedBaseContracts":[9353],"name":"ComptrollerInterface","nameLocation":"552:20:29","nodeType":"ContractDefinition","nodes":[{"functionSelector":"c2998238","id":9158,"implemented":false,"kind":"function","modifiers":[],"name":"enterMarkets","nameLocation":"621:12:29","nodeType":"FunctionDefinition","parameters":{"id":9153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9152,"mutability":"mutable","name":"vTokens","nameLocation":"653:7:29","nodeType":"VariableDeclaration","scope":9158,"src":"634:26:29","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":9150,"name":"address","nodeType":"ElementaryTypeName","src":"634:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9151,"nodeType":"ArrayTypeName","src":"634:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"633:28:29"},"returnParameters":{"id":9157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9156,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9158,"src":"680:16:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":9154,"name":"uint256","nodeType":"ElementaryTypeName","src":"680:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9155,"nodeType":"ArrayTypeName","src":"680:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"679:18:29"},"scope":9353,"src":"612:86:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"ede4edd0","id":9165,"implemented":false,"kind":"function","modifiers":[],"name":"exitMarket","nameLocation":"713:10:29","nodeType":"FunctionDefinition","parameters":{"id":9161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9160,"mutability":"mutable","name":"vToken","nameLocation":"732:6:29","nodeType":"VariableDeclaration","scope":9165,"src":"724:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9159,"name":"address","nodeType":"ElementaryTypeName","src":"724:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"723:16:29"},"returnParameters":{"id":9164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9163,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9165,"src":"758:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9162,"name":"uint256","nodeType":"ElementaryTypeName","src":"758:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"757:9:29"},"scope":9353,"src":"704:63:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"c0891ba9","id":9174,"implemented":false,"kind":"function","modifiers":[],"name":"preMintHook","nameLocation":"810:11:29","nodeType":"FunctionDefinition","parameters":{"id":9172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9167,"mutability":"mutable","name":"vToken","nameLocation":"830:6:29","nodeType":"VariableDeclaration","scope":9174,"src":"822:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9166,"name":"address","nodeType":"ElementaryTypeName","src":"822:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9169,"mutability":"mutable","name":"minter","nameLocation":"846:6:29","nodeType":"VariableDeclaration","scope":9174,"src":"838:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9168,"name":"address","nodeType":"ElementaryTypeName","src":"838:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9171,"mutability":"mutable","name":"mintAmount","nameLocation":"862:10:29","nodeType":"VariableDeclaration","scope":9174,"src":"854:18:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9170,"name":"uint256","nodeType":"ElementaryTypeName","src":"854:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"821:52:29"},"returnParameters":{"id":9173,"nodeType":"ParameterList","parameters":[],"src":"882:0:29"},"scope":9353,"src":"801:82:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"8e6470ea","id":9183,"implemented":false,"kind":"function","modifiers":[],"name":"preRedeemHook","nameLocation":"898:13:29","nodeType":"FunctionDefinition","parameters":{"id":9181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9176,"mutability":"mutable","name":"vToken","nameLocation":"920:6:29","nodeType":"VariableDeclaration","scope":9183,"src":"912:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9175,"name":"address","nodeType":"ElementaryTypeName","src":"912:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9178,"mutability":"mutable","name":"redeemer","nameLocation":"936:8:29","nodeType":"VariableDeclaration","scope":9183,"src":"928:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9177,"name":"address","nodeType":"ElementaryTypeName","src":"928:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9180,"mutability":"mutable","name":"redeemTokens","nameLocation":"954:12:29","nodeType":"VariableDeclaration","scope":9183,"src":"946:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9179,"name":"uint256","nodeType":"ElementaryTypeName","src":"946:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"911:56:29"},"returnParameters":{"id":9182,"nodeType":"ParameterList","parameters":[],"src":"976:0:29"},"scope":9353,"src":"889:88:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"df71403b","id":9192,"implemented":false,"kind":"function","modifiers":[],"name":"preBorrowHook","nameLocation":"992:13:29","nodeType":"FunctionDefinition","parameters":{"id":9190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9185,"mutability":"mutable","name":"vToken","nameLocation":"1014:6:29","nodeType":"VariableDeclaration","scope":9192,"src":"1006:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9184,"name":"address","nodeType":"ElementaryTypeName","src":"1006:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9187,"mutability":"mutable","name":"borrower","nameLocation":"1030:8:29","nodeType":"VariableDeclaration","scope":9192,"src":"1022:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9186,"name":"address","nodeType":"ElementaryTypeName","src":"1022:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9189,"mutability":"mutable","name":"borrowAmount","nameLocation":"1048:12:29","nodeType":"VariableDeclaration","scope":9192,"src":"1040:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9188,"name":"uint256","nodeType":"ElementaryTypeName","src":"1040:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1005:56:29"},"returnParameters":{"id":9191,"nodeType":"ParameterList","parameters":[],"src":"1070:0:29"},"scope":9353,"src":"983:88:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"eade3eed","id":9199,"implemented":false,"kind":"function","modifiers":[],"name":"preRepayHook","nameLocation":"1086:12:29","nodeType":"FunctionDefinition","parameters":{"id":9197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9194,"mutability":"mutable","name":"vToken","nameLocation":"1107:6:29","nodeType":"VariableDeclaration","scope":9199,"src":"1099:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9193,"name":"address","nodeType":"ElementaryTypeName","src":"1099:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9196,"mutability":"mutable","name":"borrower","nameLocation":"1123:8:29","nodeType":"VariableDeclaration","scope":9199,"src":"1115:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9195,"name":"address","nodeType":"ElementaryTypeName","src":"1115:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1098:34:29"},"returnParameters":{"id":9198,"nodeType":"ParameterList","parameters":[],"src":"1141:0:29"},"scope":9353,"src":"1077:65:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"e89d51ad","id":9212,"implemented":false,"kind":"function","modifiers":[],"name":"preLiquidateHook","nameLocation":"1157:16:29","nodeType":"FunctionDefinition","parameters":{"id":9210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9201,"mutability":"mutable","name":"vTokenBorrowed","nameLocation":"1191:14:29","nodeType":"VariableDeclaration","scope":9212,"src":"1183:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9200,"name":"address","nodeType":"ElementaryTypeName","src":"1183:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9203,"mutability":"mutable","name":"vTokenCollateral","nameLocation":"1223:16:29","nodeType":"VariableDeclaration","scope":9212,"src":"1215:24:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9202,"name":"address","nodeType":"ElementaryTypeName","src":"1215:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9205,"mutability":"mutable","name":"borrower","nameLocation":"1257:8:29","nodeType":"VariableDeclaration","scope":9212,"src":"1249:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9204,"name":"address","nodeType":"ElementaryTypeName","src":"1249:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9207,"mutability":"mutable","name":"repayAmount","nameLocation":"1283:11:29","nodeType":"VariableDeclaration","scope":9212,"src":"1275:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9206,"name":"uint256","nodeType":"ElementaryTypeName","src":"1275:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9209,"mutability":"mutable","name":"skipLiquidityCheck","nameLocation":"1309:18:29","nodeType":"VariableDeclaration","scope":9212,"src":"1304:23:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9208,"name":"bool","nodeType":"ElementaryTypeName","src":"1304:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1173:160:29"},"returnParameters":{"id":9211,"nodeType":"ParameterList","parameters":[],"src":"1342:0:29"},"scope":9353,"src":"1148:195:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"1bc41f28","id":9223,"implemented":false,"kind":"function","modifiers":[],"name":"preSeizeHook","nameLocation":"1358:12:29","nodeType":"FunctionDefinition","parameters":{"id":9221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9214,"mutability":"mutable","name":"vTokenCollateral","nameLocation":"1388:16:29","nodeType":"VariableDeclaration","scope":9223,"src":"1380:24:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9213,"name":"address","nodeType":"ElementaryTypeName","src":"1380:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9216,"mutability":"mutable","name":"vTokenBorrowed","nameLocation":"1422:14:29","nodeType":"VariableDeclaration","scope":9223,"src":"1414:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9215,"name":"address","nodeType":"ElementaryTypeName","src":"1414:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9218,"mutability":"mutable","name":"liquidator","nameLocation":"1454:10:29","nodeType":"VariableDeclaration","scope":9223,"src":"1446:18:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9217,"name":"address","nodeType":"ElementaryTypeName","src":"1446:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9220,"mutability":"mutable","name":"borrower","nameLocation":"1482:8:29","nodeType":"VariableDeclaration","scope":9223,"src":"1474:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9219,"name":"address","nodeType":"ElementaryTypeName","src":"1474:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1370:126:29"},"returnParameters":{"id":9222,"nodeType":"ParameterList","parameters":[],"src":"1505:0:29"},"scope":9353,"src":"1349:157:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"5c778605","id":9232,"implemented":false,"kind":"function","modifiers":[],"name":"borrowVerify","nameLocation":"1521:12:29","nodeType":"FunctionDefinition","parameters":{"id":9230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9225,"mutability":"mutable","name":"vToken","nameLocation":"1542:6:29","nodeType":"VariableDeclaration","scope":9232,"src":"1534:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9224,"name":"address","nodeType":"ElementaryTypeName","src":"1534:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9227,"mutability":"mutable","name":"borrower","nameLocation":"1558:8:29","nodeType":"VariableDeclaration","scope":9232,"src":"1550:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9226,"name":"address","nodeType":"ElementaryTypeName","src":"1550:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9229,"mutability":"mutable","name":"borrowAmount","nameLocation":"1573:12:29","nodeType":"VariableDeclaration","scope":9232,"src":"1568:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9228,"name":"uint","nodeType":"ElementaryTypeName","src":"1568:4:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1533:53:29"},"returnParameters":{"id":9231,"nodeType":"ParameterList","parameters":[],"src":"1595:0:29"},"scope":9353,"src":"1512:84:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"41c728b9","id":9243,"implemented":false,"kind":"function","modifiers":[],"name":"mintVerify","nameLocation":"1611:10:29","nodeType":"FunctionDefinition","parameters":{"id":9241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9234,"mutability":"mutable","name":"vToken","nameLocation":"1630:6:29","nodeType":"VariableDeclaration","scope":9243,"src":"1622:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9233,"name":"address","nodeType":"ElementaryTypeName","src":"1622:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9236,"mutability":"mutable","name":"minter","nameLocation":"1646:6:29","nodeType":"VariableDeclaration","scope":9243,"src":"1638:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9235,"name":"address","nodeType":"ElementaryTypeName","src":"1638:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9238,"mutability":"mutable","name":"mintAmount","nameLocation":"1659:10:29","nodeType":"VariableDeclaration","scope":9243,"src":"1654:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9237,"name":"uint","nodeType":"ElementaryTypeName","src":"1654:4:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9240,"mutability":"mutable","name":"mintTokens","nameLocation":"1676:10:29","nodeType":"VariableDeclaration","scope":9243,"src":"1671:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9239,"name":"uint","nodeType":"ElementaryTypeName","src":"1671:4:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1621:66:29"},"returnParameters":{"id":9242,"nodeType":"ParameterList","parameters":[],"src":"1696:0:29"},"scope":9353,"src":"1602:95:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"51dff989","id":9254,"implemented":false,"kind":"function","modifiers":[],"name":"redeemVerify","nameLocation":"1712:12:29","nodeType":"FunctionDefinition","parameters":{"id":9252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9245,"mutability":"mutable","name":"vToken","nameLocation":"1733:6:29","nodeType":"VariableDeclaration","scope":9254,"src":"1725:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9244,"name":"address","nodeType":"ElementaryTypeName","src":"1725:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9247,"mutability":"mutable","name":"redeemer","nameLocation":"1749:8:29","nodeType":"VariableDeclaration","scope":9254,"src":"1741:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9246,"name":"address","nodeType":"ElementaryTypeName","src":"1741:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9249,"mutability":"mutable","name":"redeemAmount","nameLocation":"1764:12:29","nodeType":"VariableDeclaration","scope":9254,"src":"1759:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9248,"name":"uint","nodeType":"ElementaryTypeName","src":"1759:4:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9251,"mutability":"mutable","name":"redeemTokens","nameLocation":"1783:12:29","nodeType":"VariableDeclaration","scope":9254,"src":"1778:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9250,"name":"uint","nodeType":"ElementaryTypeName","src":"1778:4:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1724:72:29"},"returnParameters":{"id":9253,"nodeType":"ParameterList","parameters":[],"src":"1805:0:29"},"scope":9353,"src":"1703:103:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"1ededc91","id":9267,"implemented":false,"kind":"function","modifiers":[],"name":"repayBorrowVerify","nameLocation":"1821:17:29","nodeType":"FunctionDefinition","parameters":{"id":9265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9256,"mutability":"mutable","name":"vToken","nameLocation":"1856:6:29","nodeType":"VariableDeclaration","scope":9267,"src":"1848:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9255,"name":"address","nodeType":"ElementaryTypeName","src":"1848:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9258,"mutability":"mutable","name":"payer","nameLocation":"1880:5:29","nodeType":"VariableDeclaration","scope":9267,"src":"1872:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9257,"name":"address","nodeType":"ElementaryTypeName","src":"1872:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9260,"mutability":"mutable","name":"borrower","nameLocation":"1903:8:29","nodeType":"VariableDeclaration","scope":9267,"src":"1895:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9259,"name":"address","nodeType":"ElementaryTypeName","src":"1895:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9262,"mutability":"mutable","name":"repayAmount","nameLocation":"1926:11:29","nodeType":"VariableDeclaration","scope":9267,"src":"1921:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9261,"name":"uint","nodeType":"ElementaryTypeName","src":"1921:4:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9264,"mutability":"mutable","name":"borrowerIndex","nameLocation":"1952:13:29","nodeType":"VariableDeclaration","scope":9267,"src":"1947:18:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9263,"name":"uint","nodeType":"ElementaryTypeName","src":"1947:4:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1838:133:29"},"returnParameters":{"id":9266,"nodeType":"ParameterList","parameters":[],"src":"1980:0:29"},"scope":9353,"src":"1812:169:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"47ef3b3b","id":9282,"implemented":false,"kind":"function","modifiers":[],"name":"liquidateBorrowVerify","nameLocation":"1996:21:29","nodeType":"FunctionDefinition","parameters":{"id":9280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9269,"mutability":"mutable","name":"vTokenBorrowed","nameLocation":"2035:14:29","nodeType":"VariableDeclaration","scope":9282,"src":"2027:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9268,"name":"address","nodeType":"ElementaryTypeName","src":"2027:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9271,"mutability":"mutable","name":"vTokenCollateral","nameLocation":"2067:16:29","nodeType":"VariableDeclaration","scope":9282,"src":"2059:24:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9270,"name":"address","nodeType":"ElementaryTypeName","src":"2059:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9273,"mutability":"mutable","name":"liquidator","nameLocation":"2101:10:29","nodeType":"VariableDeclaration","scope":9282,"src":"2093:18:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9272,"name":"address","nodeType":"ElementaryTypeName","src":"2093:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9275,"mutability":"mutable","name":"borrower","nameLocation":"2129:8:29","nodeType":"VariableDeclaration","scope":9282,"src":"2121:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9274,"name":"address","nodeType":"ElementaryTypeName","src":"2121:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9277,"mutability":"mutable","name":"repayAmount","nameLocation":"2152:11:29","nodeType":"VariableDeclaration","scope":9282,"src":"2147:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9276,"name":"uint","nodeType":"ElementaryTypeName","src":"2147:4:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9279,"mutability":"mutable","name":"seizeTokens","nameLocation":"2178:11:29","nodeType":"VariableDeclaration","scope":9282,"src":"2173:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9278,"name":"uint","nodeType":"ElementaryTypeName","src":"2173:4:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2017:178:29"},"returnParameters":{"id":9281,"nodeType":"ParameterList","parameters":[],"src":"2204:0:29"},"scope":9353,"src":"1987:218:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"6d35bf91","id":9295,"implemented":false,"kind":"function","modifiers":[],"name":"seizeVerify","nameLocation":"2220:11:29","nodeType":"FunctionDefinition","parameters":{"id":9293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9284,"mutability":"mutable","name":"vTokenCollateral","nameLocation":"2249:16:29","nodeType":"VariableDeclaration","scope":9295,"src":"2241:24:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9283,"name":"address","nodeType":"ElementaryTypeName","src":"2241:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9286,"mutability":"mutable","name":"vTokenBorrowed","nameLocation":"2283:14:29","nodeType":"VariableDeclaration","scope":9295,"src":"2275:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9285,"name":"address","nodeType":"ElementaryTypeName","src":"2275:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9288,"mutability":"mutable","name":"liquidator","nameLocation":"2315:10:29","nodeType":"VariableDeclaration","scope":9295,"src":"2307:18:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9287,"name":"address","nodeType":"ElementaryTypeName","src":"2307:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9290,"mutability":"mutable","name":"borrower","nameLocation":"2343:8:29","nodeType":"VariableDeclaration","scope":9295,"src":"2335:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9289,"name":"address","nodeType":"ElementaryTypeName","src":"2335:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9292,"mutability":"mutable","name":"seizeTokens","nameLocation":"2366:11:29","nodeType":"VariableDeclaration","scope":9295,"src":"2361:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9291,"name":"uint","nodeType":"ElementaryTypeName","src":"2361:4:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2231:152:29"},"returnParameters":{"id":9294,"nodeType":"ParameterList","parameters":[],"src":"2392:0:29"},"scope":9353,"src":"2211:182:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"6a56947e","id":9306,"implemented":false,"kind":"function","modifiers":[],"name":"transferVerify","nameLocation":"2408:14:29","nodeType":"FunctionDefinition","parameters":{"id":9304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9297,"mutability":"mutable","name":"vToken","nameLocation":"2431:6:29","nodeType":"VariableDeclaration","scope":9306,"src":"2423:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9296,"name":"address","nodeType":"ElementaryTypeName","src":"2423:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9299,"mutability":"mutable","name":"src","nameLocation":"2447:3:29","nodeType":"VariableDeclaration","scope":9306,"src":"2439:11:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9298,"name":"address","nodeType":"ElementaryTypeName","src":"2439:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9301,"mutability":"mutable","name":"dst","nameLocation":"2460:3:29","nodeType":"VariableDeclaration","scope":9306,"src":"2452:11:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9300,"name":"address","nodeType":"ElementaryTypeName","src":"2452:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9303,"mutability":"mutable","name":"transferTokens","nameLocation":"2470:14:29","nodeType":"VariableDeclaration","scope":9306,"src":"2465:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9302,"name":"uint","nodeType":"ElementaryTypeName","src":"2465:4:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2422:63:29"},"returnParameters":{"id":9305,"nodeType":"ParameterList","parameters":[],"src":"2494:0:29"},"scope":9353,"src":"2399:96:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"6d0be88d","id":9317,"implemented":false,"kind":"function","modifiers":[],"name":"preTransferHook","nameLocation":"2510:15:29","nodeType":"FunctionDefinition","parameters":{"id":9315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9308,"mutability":"mutable","name":"vToken","nameLocation":"2534:6:29","nodeType":"VariableDeclaration","scope":9317,"src":"2526:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9307,"name":"address","nodeType":"ElementaryTypeName","src":"2526:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9310,"mutability":"mutable","name":"src","nameLocation":"2550:3:29","nodeType":"VariableDeclaration","scope":9317,"src":"2542:11:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9309,"name":"address","nodeType":"ElementaryTypeName","src":"2542:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9312,"mutability":"mutable","name":"dst","nameLocation":"2563:3:29","nodeType":"VariableDeclaration","scope":9317,"src":"2555:11:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9311,"name":"address","nodeType":"ElementaryTypeName","src":"2555:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9314,"mutability":"mutable","name":"transferTokens","nameLocation":"2576:14:29","nodeType":"VariableDeclaration","scope":9317,"src":"2568:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9313,"name":"uint256","nodeType":"ElementaryTypeName","src":"2568:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2525:66:29"},"returnParameters":{"id":9316,"nodeType":"ParameterList","parameters":[],"src":"2600:0:29"},"scope":9353,"src":"2501:100:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"007e3dd2","id":9322,"implemented":false,"kind":"function","modifiers":[],"name":"isComptroller","nameLocation":"2616:13:29","nodeType":"FunctionDefinition","parameters":{"id":9318,"nodeType":"ParameterList","parameters":[],"src":"2629:2:29"},"returnParameters":{"id":9321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9320,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9322,"src":"2655:4:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9319,"name":"bool","nodeType":"ElementaryTypeName","src":"2655:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2654:6:29"},"scope":9353,"src":"2607:54:29","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"c488847b","id":9335,"implemented":false,"kind":"function","modifiers":[],"name":"liquidateCalculateSeizeTokens","nameLocation":"2726:29:29","nodeType":"FunctionDefinition","parameters":{"id":9329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9324,"mutability":"mutable","name":"vTokenBorrowed","nameLocation":"2773:14:29","nodeType":"VariableDeclaration","scope":9335,"src":"2765:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9323,"name":"address","nodeType":"ElementaryTypeName","src":"2765:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9326,"mutability":"mutable","name":"vTokenCollateral","nameLocation":"2805:16:29","nodeType":"VariableDeclaration","scope":9335,"src":"2797:24:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9325,"name":"address","nodeType":"ElementaryTypeName","src":"2797:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9328,"mutability":"mutable","name":"repayAmount","nameLocation":"2839:11:29","nodeType":"VariableDeclaration","scope":9335,"src":"2831:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9327,"name":"uint256","nodeType":"ElementaryTypeName","src":"2831:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2755:101:29"},"returnParameters":{"id":9334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9331,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9335,"src":"2880:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9330,"name":"uint256","nodeType":"ElementaryTypeName","src":"2880:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9333,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9335,"src":"2889:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9332,"name":"uint256","nodeType":"ElementaryTypeName","src":"2889:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2879:18:29"},"scope":9353,"src":"2717:181:29","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"b0772d0b","id":9342,"implemented":false,"kind":"function","modifiers":[],"name":"getAllMarkets","nameLocation":"2913:13:29","nodeType":"FunctionDefinition","parameters":{"id":9336,"nodeType":"ParameterList","parameters":[],"src":"2926:2:29"},"returnParameters":{"id":9341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9340,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9342,"src":"2952:15:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":9338,"nodeType":"UserDefinedTypeName","pathNode":{"id":9337,"name":"VToken","nameLocations":["2952:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"2952:6:29"},"referencedDeclaration":15506,"src":"2952:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":9339,"nodeType":"ArrayTypeName","src":"2952:8:29","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"}],"src":"2951:17:29"},"scope":9353,"src":"2904:65:29","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"e85a2960","id":9352,"implemented":false,"kind":"function","modifiers":[],"name":"actionPaused","nameLocation":"2984:12:29","nodeType":"FunctionDefinition","parameters":{"id":9348,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9344,"mutability":"mutable","name":"market","nameLocation":"3005:6:29","nodeType":"VariableDeclaration","scope":9352,"src":"2997:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9343,"name":"address","nodeType":"ElementaryTypeName","src":"2997:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9347,"mutability":"mutable","name":"action","nameLocation":"3020:6:29","nodeType":"VariableDeclaration","scope":9352,"src":"3013:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"},"typeName":{"id":9346,"nodeType":"UserDefinedTypeName","pathNode":{"id":9345,"name":"Action","nameLocations":["3013:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":9148,"src":"3013:6:29"},"referencedDeclaration":9148,"src":"3013:6:29","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}},"visibility":"internal"}],"src":"2996:31:29"},"returnParameters":{"id":9351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9350,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9352,"src":"3051:4:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9349,"name":"bool","nodeType":"ElementaryTypeName","src":"3051:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3050:6:29"},"scope":9353,"src":"2975:82:29","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":9432,"src":"542:2517:29","usedErrors":[],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"ComptrollerViewInterface","contractDependencies":[],"contractKind":"interface","documentation":{"id":9354,"nodeType":"StructuredDocumentation","src":"3061:164:29","text":" @title ComptrollerViewInterface\n @author Venus\n @notice Interface implemented by the `Comptroller` contract, including only some util view functions."},"fullyImplemented":false,"id":9431,"linearizedBaseContracts":[9431],"name":"ComptrollerViewInterface","nameLocation":"3236:24:29","nodeType":"ContractDefinition","nodes":[{"functionSelector":"8e8f294b","id":9363,"implemented":false,"kind":"function","modifiers":[],"name":"markets","nameLocation":"3276:7:29","nodeType":"FunctionDefinition","parameters":{"id":9357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9356,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9363,"src":"3284:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9355,"name":"address","nodeType":"ElementaryTypeName","src":"3284:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3283:9:29"},"returnParameters":{"id":9362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9359,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9363,"src":"3316:4:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9358,"name":"bool","nodeType":"ElementaryTypeName","src":"3316:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9361,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9363,"src":"3322:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9360,"name":"uint256","nodeType":"ElementaryTypeName","src":"3322:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3315:15:29"},"scope":9431,"src":"3267:64:29","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"7dc0d1d0","id":9369,"implemented":false,"kind":"function","modifiers":[],"name":"oracle","nameLocation":"3346:6:29","nodeType":"FunctionDefinition","parameters":{"id":9364,"nodeType":"ParameterList","parameters":[],"src":"3352:2:29"},"returnParameters":{"id":9368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9367,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9369,"src":"3378:24:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"},"typeName":{"id":9366,"nodeType":"UserDefinedTypeName","pathNode":{"id":9365,"name":"ResilientOracleInterface","nameLocations":["3378:24:29"],"nodeType":"IdentifierPath","referencedDeclaration":16173,"src":"3378:24:29"},"referencedDeclaration":16173,"src":"3378:24:29","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"visibility":"internal"}],"src":"3377:26:29"},"scope":9431,"src":"3337:67:29","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"abfceffc","id":9378,"implemented":false,"kind":"function","modifiers":[],"name":"getAssetsIn","nameLocation":"3419:11:29","nodeType":"FunctionDefinition","parameters":{"id":9372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9371,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9378,"src":"3431:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9370,"name":"address","nodeType":"ElementaryTypeName","src":"3431:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3430:9:29"},"returnParameters":{"id":9377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9376,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9378,"src":"3463:15:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":9374,"nodeType":"UserDefinedTypeName","pathNode":{"id":9373,"name":"VToken","nameLocations":["3463:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"3463:6:29"},"referencedDeclaration":15506,"src":"3463:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":9375,"nodeType":"ArrayTypeName","src":"3463:8:29","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"}],"src":"3462:17:29"},"scope":9431,"src":"3410:70:29","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"e8755446","id":9383,"implemented":false,"kind":"function","modifiers":[],"name":"closeFactorMantissa","nameLocation":"3495:19:29","nodeType":"FunctionDefinition","parameters":{"id":9379,"nodeType":"ParameterList","parameters":[],"src":"3514:2:29"},"returnParameters":{"id":9382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9381,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9383,"src":"3540:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9380,"name":"uint256","nodeType":"ElementaryTypeName","src":"3540:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3539:9:29"},"scope":9431,"src":"3486:63:29","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"4ada90af","id":9388,"implemented":false,"kind":"function","modifiers":[],"name":"liquidationIncentiveMantissa","nameLocation":"3564:28:29","nodeType":"FunctionDefinition","parameters":{"id":9384,"nodeType":"ParameterList","parameters":[],"src":"3592:2:29"},"returnParameters":{"id":9387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9386,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9388,"src":"3618:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9385,"name":"uint256","nodeType":"ElementaryTypeName","src":"3618:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3617:9:29"},"scope":9431,"src":"3555:72:29","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"db5c65de","id":9393,"implemented":false,"kind":"function","modifiers":[],"name":"minLiquidatableCollateral","nameLocation":"3642:25:29","nodeType":"FunctionDefinition","parameters":{"id":9389,"nodeType":"ParameterList","parameters":[],"src":"3667:2:29"},"returnParameters":{"id":9392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9391,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9393,"src":"3693:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9390,"name":"uint256","nodeType":"ElementaryTypeName","src":"3693:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3692:9:29"},"scope":9431,"src":"3633:69:29","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"61252fd1","id":9400,"implemented":false,"kind":"function","modifiers":[],"name":"getRewardDistributors","nameLocation":"3717:21:29","nodeType":"FunctionDefinition","parameters":{"id":9394,"nodeType":"ParameterList","parameters":[],"src":"3738:2:29"},"returnParameters":{"id":9399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9398,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9400,"src":"3764:27:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr","typeString":"contract RewardsDistributor[]"},"typeName":{"baseType":{"id":9396,"nodeType":"UserDefinedTypeName","pathNode":{"id":9395,"name":"RewardsDistributor","nameLocations":["3764:18:29"],"nodeType":"IdentifierPath","referencedDeclaration":12324,"src":"3764:18:29"},"referencedDeclaration":12324,"src":"3764:18:29","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":9397,"nodeType":"ArrayTypeName","src":"3764:20:29","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage_ptr","typeString":"contract RewardsDistributor[]"}},"visibility":"internal"}],"src":"3763:29:29"},"scope":9431,"src":"3708:85:29","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"b0772d0b","id":9407,"implemented":false,"kind":"function","modifiers":[],"name":"getAllMarkets","nameLocation":"3808:13:29","nodeType":"FunctionDefinition","parameters":{"id":9401,"nodeType":"ParameterList","parameters":[],"src":"3821:2:29"},"returnParameters":{"id":9406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9405,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9407,"src":"3847:15:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":9403,"nodeType":"UserDefinedTypeName","pathNode":{"id":9402,"name":"VToken","nameLocations":["3847:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"3847:6:29"},"referencedDeclaration":15506,"src":"3847:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":9404,"nodeType":"ArrayTypeName","src":"3847:8:29","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"}],"src":"3846:17:29"},"scope":9431,"src":"3799:65:29","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"4a584432","id":9414,"implemented":false,"kind":"function","modifiers":[],"name":"borrowCaps","nameLocation":"3879:10:29","nodeType":"FunctionDefinition","parameters":{"id":9410,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9409,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9414,"src":"3890:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9408,"name":"address","nodeType":"ElementaryTypeName","src":"3890:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3889:9:29"},"returnParameters":{"id":9413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9412,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9414,"src":"3922:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9411,"name":"uint256","nodeType":"ElementaryTypeName","src":"3922:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3921:9:29"},"scope":9431,"src":"3870:61:29","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"02c3bcbb","id":9421,"implemented":false,"kind":"function","modifiers":[],"name":"supplyCaps","nameLocation":"3946:10:29","nodeType":"FunctionDefinition","parameters":{"id":9417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9416,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9421,"src":"3957:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9415,"name":"address","nodeType":"ElementaryTypeName","src":"3957:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3956:9:29"},"returnParameters":{"id":9420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9419,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9421,"src":"3989:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9418,"name":"uint256","nodeType":"ElementaryTypeName","src":"3989:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3988:9:29"},"scope":9431,"src":"3937:61:29","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"10b98338","id":9430,"implemented":false,"kind":"function","modifiers":[],"name":"approvedDelegates","nameLocation":"4013:17:29","nodeType":"FunctionDefinition","parameters":{"id":9426,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9423,"mutability":"mutable","name":"user","nameLocation":"4039:4:29","nodeType":"VariableDeclaration","scope":9430,"src":"4031:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9422,"name":"address","nodeType":"ElementaryTypeName","src":"4031:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9425,"mutability":"mutable","name":"delegate","nameLocation":"4053:8:29","nodeType":"VariableDeclaration","scope":9430,"src":"4045:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9424,"name":"address","nodeType":"ElementaryTypeName","src":"4045:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4030:32:29"},"returnParameters":{"id":9429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9428,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9430,"src":"4086:4:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9427,"name":"bool","nodeType":"ElementaryTypeName","src":"4086:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4085:6:29"},"scope":9431,"src":"4004:88:29","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":9432,"src":"3226:868:29","usedErrors":[],"usedEvents":[]}],"src":"41:4054:29"},"id":29},"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol":{"ast":{"absolutePath":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol","exportedSymbols":{"Action":[9148],"ComptrollerStorage":[9575],"IPrime":[16613],"ResilientOracleInterface":[16173],"RewardsDistributor":[12324],"VToken":[15506]},"id":9576,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":9433,"literals":["solidity","0.8",".25"],"nodeType":"PragmaDirective","src":"41:23:30"},{"absolutePath":"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol","file":"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol","id":9435,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9576,"sourceUnit":16196,"src":"66:106:30","symbolAliases":[{"foreign":{"id":9434,"name":"ResilientOracleInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16173,"src":"75:24:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/VToken.sol","file":"./VToken.sol","id":9437,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9576,"sourceUnit":15507,"src":"174:38:30","symbolAliases":[{"foreign":{"id":9436,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"183:6:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol","file":"./Rewards/RewardsDistributor.sol","id":9439,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9576,"sourceUnit":12325,"src":"213:70:30","symbolAliases":[{"foreign":{"id":9438,"name":"RewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12324,"src":"222:18:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol","file":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol","id":9441,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9576,"sourceUnit":16614,"src":"284:100:30","symbolAliases":[{"foreign":{"id":9440,"name":"IPrime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16613,"src":"293:6:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol","file":"./ComptrollerInterface.sol","id":9443,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9576,"sourceUnit":9432,"src":"385:52:30","symbolAliases":[{"foreign":{"id":9442,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"394:6:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ComptrollerStorage","contractDependencies":[],"contractKind":"contract","documentation":{"id":9444,"nodeType":"StructuredDocumentation","src":"439:111:30","text":" @title ComptrollerStorage\n @author Venus\n @notice Storage layout for the `Comptroller` contract."},"fullyImplemented":true,"id":9575,"linearizedBaseContracts":[9575],"name":"ComptrollerStorage","nameLocation":"560:18:30","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ComptrollerStorage.LiquidationOrder","id":9453,"members":[{"constant":false,"id":9447,"mutability":"mutable","name":"vTokenCollateral","nameLocation":"626:16:30","nodeType":"VariableDeclaration","scope":9453,"src":"619:23:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":9446,"nodeType":"UserDefinedTypeName","pathNode":{"id":9445,"name":"VToken","nameLocations":["619:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"619:6:30"},"referencedDeclaration":15506,"src":"619:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"},{"constant":false,"id":9450,"mutability":"mutable","name":"vTokenBorrowed","nameLocation":"659:14:30","nodeType":"VariableDeclaration","scope":9453,"src":"652:21:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":9449,"nodeType":"UserDefinedTypeName","pathNode":{"id":9448,"name":"VToken","nameLocations":["652:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"652:6:30"},"referencedDeclaration":15506,"src":"652:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"},{"constant":false,"id":9452,"mutability":"mutable","name":"repayAmount","nameLocation":"691:11:30","nodeType":"VariableDeclaration","scope":9453,"src":"683:19:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9451,"name":"uint256","nodeType":"ElementaryTypeName","src":"683:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"LiquidationOrder","nameLocation":"592:16:30","nodeType":"StructDefinition","scope":9575,"src":"585:124:30","visibility":"public"},{"canonicalName":"ComptrollerStorage.AccountLiquiditySnapshot","id":9466,"members":[{"constant":false,"id":9455,"mutability":"mutable","name":"totalCollateral","nameLocation":"765:15:30","nodeType":"VariableDeclaration","scope":9466,"src":"757:23:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9454,"name":"uint256","nodeType":"ElementaryTypeName","src":"757:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9457,"mutability":"mutable","name":"weightedCollateral","nameLocation":"798:18:30","nodeType":"VariableDeclaration","scope":9466,"src":"790:26:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9456,"name":"uint256","nodeType":"ElementaryTypeName","src":"790:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9459,"mutability":"mutable","name":"borrows","nameLocation":"834:7:30","nodeType":"VariableDeclaration","scope":9466,"src":"826:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9458,"name":"uint256","nodeType":"ElementaryTypeName","src":"826:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9461,"mutability":"mutable","name":"effects","nameLocation":"859:7:30","nodeType":"VariableDeclaration","scope":9466,"src":"851:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9460,"name":"uint256","nodeType":"ElementaryTypeName","src":"851:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9463,"mutability":"mutable","name":"liquidity","nameLocation":"884:9:30","nodeType":"VariableDeclaration","scope":9466,"src":"876:17:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9462,"name":"uint256","nodeType":"ElementaryTypeName","src":"876:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9465,"mutability":"mutable","name":"shortfall","nameLocation":"911:9:30","nodeType":"VariableDeclaration","scope":9466,"src":"903:17:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9464,"name":"uint256","nodeType":"ElementaryTypeName","src":"903:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"AccountLiquiditySnapshot","nameLocation":"722:24:30","nodeType":"StructDefinition","scope":9575,"src":"715:212:30","visibility":"public"},{"canonicalName":"ComptrollerStorage.RewardSpeeds","id":9473,"members":[{"constant":false,"id":9468,"mutability":"mutable","name":"rewardToken","nameLocation":"971:11:30","nodeType":"VariableDeclaration","scope":9473,"src":"963:19:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9467,"name":"address","nodeType":"ElementaryTypeName","src":"963:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9470,"mutability":"mutable","name":"supplySpeed","nameLocation":"1000:11:30","nodeType":"VariableDeclaration","scope":9473,"src":"992:19:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9469,"name":"uint256","nodeType":"ElementaryTypeName","src":"992:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9472,"mutability":"mutable","name":"borrowSpeed","nameLocation":"1029:11:30","nodeType":"VariableDeclaration","scope":9473,"src":"1021:19:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9471,"name":"uint256","nodeType":"ElementaryTypeName","src":"1021:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"RewardSpeeds","nameLocation":"940:12:30","nodeType":"StructDefinition","scope":9575,"src":"933:114:30","visibility":"public"},{"canonicalName":"ComptrollerStorage.Market","id":9484,"members":[{"constant":false,"id":9475,"mutability":"mutable","name":"isListed","nameLocation":"1130:8:30","nodeType":"VariableDeclaration","scope":9484,"src":"1125:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9474,"name":"bool","nodeType":"ElementaryTypeName","src":"1125:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9477,"mutability":"mutable","name":"collateralFactorMantissa","nameLocation":"1394:24:30","nodeType":"VariableDeclaration","scope":9484,"src":"1386:32:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9476,"name":"uint256","nodeType":"ElementaryTypeName","src":"1386:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9479,"mutability":"mutable","name":"liquidationThresholdMantissa","nameLocation":"1705:28:30","nodeType":"VariableDeclaration","scope":9484,"src":"1697:36:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9478,"name":"uint256","nodeType":"ElementaryTypeName","src":"1697:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9483,"mutability":"mutable","name":"accountMembership","nameLocation":"1826:17:30","nodeType":"VariableDeclaration","scope":9484,"src":"1801:42:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":9482,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":9480,"name":"address","nodeType":"ElementaryTypeName","src":"1809:7:30","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1801:24:30","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":9481,"name":"bool","nodeType":"ElementaryTypeName","src":"1820:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"}],"name":"Market","nameLocation":"1060:6:30","nodeType":"StructDefinition","scope":9575,"src":"1053:797:30","visibility":"public"},{"constant":false,"documentation":{"id":9485,"nodeType":"StructuredDocumentation","src":"1856:74:30","text":" @notice Oracle which gives the price of any given asset"},"functionSelector":"7dc0d1d0","id":9488,"mutability":"mutable","name":"oracle","nameLocation":"1967:6:30","nodeType":"VariableDeclaration","scope":9575,"src":"1935:38:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"},"typeName":{"id":9487,"nodeType":"UserDefinedTypeName","pathNode":{"id":9486,"name":"ResilientOracleInterface","nameLocations":["1935:24:30"],"nodeType":"IdentifierPath","referencedDeclaration":16173,"src":"1935:24:30"},"referencedDeclaration":16173,"src":"1935:24:30","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"visibility":"public"},{"constant":false,"documentation":{"id":9489,"nodeType":"StructuredDocumentation","src":"1980:105:30","text":" @notice Multiplier used to calculate the maximum repayAmount when liquidating a borrow"},"functionSelector":"e8755446","id":9491,"mutability":"mutable","name":"closeFactorMantissa","nameLocation":"2105:19:30","nodeType":"VariableDeclaration","scope":9575,"src":"2090:34:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9490,"name":"uint256","nodeType":"ElementaryTypeName","src":"2090:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":9492,"nodeType":"StructuredDocumentation","src":"2131:104:30","text":" @notice Multiplier representing the discount on collateral that a liquidator receives"},"functionSelector":"4ada90af","id":9494,"mutability":"mutable","name":"liquidationIncentiveMantissa","nameLocation":"2255:28:30","nodeType":"VariableDeclaration","scope":9575,"src":"2240:43:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9493,"name":"uint256","nodeType":"ElementaryTypeName","src":"2240:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":9495,"nodeType":"StructuredDocumentation","src":"2290:69:30","text":" @notice Per-account mapping of \"assets you are in\""},"functionSelector":"dce15449","id":9501,"mutability":"mutable","name":"accountAssets","nameLocation":"2400:13:30","nodeType":"VariableDeclaration","scope":9575,"src":"2364:49:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_VToken_$15506_$dyn_storage_$","typeString":"mapping(address => contract VToken[])"},"typeName":{"id":9500,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":9496,"name":"address","nodeType":"ElementaryTypeName","src":"2372:7:30","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2364:28:30","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_VToken_$15506_$dyn_storage_$","typeString":"mapping(address => contract VToken[])"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"baseType":{"id":9498,"nodeType":"UserDefinedTypeName","pathNode":{"id":9497,"name":"VToken","nameLocations":["2383:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"2383:6:30"},"referencedDeclaration":15506,"src":"2383:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":9499,"nodeType":"ArrayTypeName","src":"2383:8:30","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}}},"visibility":"public"},{"constant":false,"documentation":{"id":9502,"nodeType":"StructuredDocumentation","src":"2420:133:30","text":" @notice Official mapping of vTokens -> Market metadata\n @dev Used e.g. to determine if a market is supported"},"functionSelector":"8e8f294b","id":9507,"mutability":"mutable","name":"markets","nameLocation":"2592:7:30","nodeType":"VariableDeclaration","scope":9575,"src":"2558:41:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market)"},"typeName":{"id":9506,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":9503,"name":"address","nodeType":"ElementaryTypeName","src":"2566:7:30","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2558:26:30","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$9484_storage_$","typeString":"mapping(address => struct ComptrollerStorage.Market)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":9505,"nodeType":"UserDefinedTypeName","pathNode":{"id":9504,"name":"Market","nameLocations":["2577:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":9484,"src":"2577:6:30"},"referencedDeclaration":9484,"src":"2577:6:30","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$9484_storage_ptr","typeString":"struct ComptrollerStorage.Market"}}},"visibility":"public"},{"constant":false,"documentation":{"id":9508,"nodeType":"StructuredDocumentation","src":"2606:33:30","text":"@notice A list of all markets"},"functionSelector":"52d84d1e","id":9512,"mutability":"mutable","name":"allMarkets","nameLocation":"2660:10:30","nodeType":"VariableDeclaration","scope":9575,"src":"2644:26:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":9510,"nodeType":"UserDefinedTypeName","pathNode":{"id":9509,"name":"VToken","nameLocations":["2644:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"2644:6:30"},"referencedDeclaration":15506,"src":"2644:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":9511,"nodeType":"ArrayTypeName","src":"2644:8:30","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"public"},{"constant":false,"documentation":{"id":9513,"nodeType":"StructuredDocumentation","src":"2677:118:30","text":"@notice Borrow caps enforced by borrowAllowed for each vToken address. Defaults to zero which restricts borrowing."},"functionSelector":"4a584432","id":9517,"mutability":"mutable","name":"borrowCaps","nameLocation":"2835:10:30","nodeType":"VariableDeclaration","scope":9575,"src":"2800:45:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":9516,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":9514,"name":"address","nodeType":"ElementaryTypeName","src":"2808:7:30","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2800:27:30","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":9515,"name":"uint256","nodeType":"ElementaryTypeName","src":"2819:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"public"},{"constant":false,"documentation":{"id":9518,"nodeType":"StructuredDocumentation","src":"2852:76:30","text":"@notice Minimal collateral required for regular (non-batch) liquidations"},"functionSelector":"db5c65de","id":9520,"mutability":"mutable","name":"minLiquidatableCollateral","nameLocation":"2948:25:30","nodeType":"VariableDeclaration","scope":9575,"src":"2933:40:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9519,"name":"uint256","nodeType":"ElementaryTypeName","src":"2933:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":9521,"nodeType":"StructuredDocumentation","src":"2980:130:30","text":"@notice Supply caps enforced by mintAllowed for each vToken address. Defaults to zero which corresponds to minting not allowed"},"functionSelector":"02c3bcbb","id":9525,"mutability":"mutable","name":"supplyCaps","nameLocation":"3150:10:30","nodeType":"VariableDeclaration","scope":9575,"src":"3115:45:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":9524,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":9522,"name":"address","nodeType":"ElementaryTypeName","src":"3123:7:30","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3115:27:30","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":9523,"name":"uint256","nodeType":"ElementaryTypeName","src":"3134:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"public"},{"constant":false,"documentation":{"id":9526,"nodeType":"StructuredDocumentation","src":"3167:66:30","text":"@notice True if a certain action is paused on a certain market"},"id":9533,"mutability":"mutable","name":"_actionPaused","nameLocation":"3291:13:30","nodeType":"VariableDeclaration","scope":9575,"src":"3238:66:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_enum$_Action_$9148_$_t_bool_$_$","typeString":"mapping(address => mapping(enum Action => bool))"},"typeName":{"id":9532,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":9527,"name":"address","nodeType":"ElementaryTypeName","src":"3246:7:30","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3238:43:30","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_enum$_Action_$9148_$_t_bool_$_$","typeString":"mapping(address => mapping(enum Action => bool))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":9531,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":9529,"nodeType":"UserDefinedTypeName","pathNode":{"id":9528,"name":"Action","nameLocations":["3265:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":9148,"src":"3265:6:30"},"referencedDeclaration":9148,"src":"3265:6:30","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}},"nodeType":"Mapping","src":"3257:23:30","typeDescriptions":{"typeIdentifier":"t_mapping$_t_enum$_Action_$9148_$_t_bool_$","typeString":"mapping(enum Action => bool)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":9530,"name":"bool","nodeType":"ElementaryTypeName","src":"3275:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}}},"visibility":"internal"},{"constant":false,"id":9537,"mutability":"mutable","name":"rewardsDistributors","nameLocation":"3382:19:30","nodeType":"VariableDeclaration","scope":9575,"src":"3352:49:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage","typeString":"contract RewardsDistributor[]"},"typeName":{"baseType":{"id":9535,"nodeType":"UserDefinedTypeName","pathNode":{"id":9534,"name":"RewardsDistributor","nameLocations":["3352:18:30"],"nodeType":"IdentifierPath","referencedDeclaration":12324,"src":"3352:18:30"},"referencedDeclaration":12324,"src":"3352:18:30","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":9536,"nodeType":"ArrayTypeName","src":"3352:20:30","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage_ptr","typeString":"contract RewardsDistributor[]"}},"visibility":"internal"},{"constant":false,"id":9541,"mutability":"mutable","name":"rewardsDistributorExists","nameLocation":"3495:24:30","nodeType":"VariableDeclaration","scope":9575,"src":"3461:58:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":9540,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":9538,"name":"address","nodeType":"ElementaryTypeName","src":"3469:7:30","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3461:24:30","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":9539,"name":"bool","nodeType":"ElementaryTypeName","src":"3480:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"documentation":{"id":9542,"nodeType":"StructuredDocumentation","src":"3526:75:30","text":"@notice Flag indicating whether forced liquidation enabled for a market"},"functionSelector":"8c1ac18a","id":9546,"mutability":"mutable","name":"isForcedLiquidationEnabled","nameLocation":"3638:26:30","nodeType":"VariableDeclaration","scope":9575,"src":"3606:58:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":9545,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":9543,"name":"address","nodeType":"ElementaryTypeName","src":"3614:7:30","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3606:24:30","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":9544,"name":"bool","nodeType":"ElementaryTypeName","src":"3625:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"constant":true,"id":9549,"mutability":"constant","name":"NO_ERROR","nameLocation":"3697:8:30","nodeType":"VariableDeclaration","scope":9575,"src":"3671:38:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9547,"name":"uint256","nodeType":"ElementaryTypeName","src":"3671:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":9548,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3708:1:30","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"internal"},{"constant":true,"id":9552,"mutability":"constant","name":"MIN_CLOSE_FACTOR_MANTISSA","nameLocation":"3810:25:30","nodeType":"VariableDeclaration","scope":9575,"src":"3784:61:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9550,"name":"uint256","nodeType":"ElementaryTypeName","src":"3784:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"302e3035653138","id":9551,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3838:7:30","typeDescriptions":{"typeIdentifier":"t_rational_50000000000000000_by_1","typeString":"int_const 50000000000000000"},"value":"0.05e18"},"visibility":"internal"},{"constant":true,"id":9555,"mutability":"constant","name":"MAX_CLOSE_FACTOR_MANTISSA","nameLocation":"3940:25:30","nodeType":"VariableDeclaration","scope":9575,"src":"3914:60:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9553,"name":"uint256","nodeType":"ElementaryTypeName","src":"3914:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"302e39653138","id":9554,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3968:6:30","typeDescriptions":{"typeIdentifier":"t_rational_900000000000000000_by_1","typeString":"int_const 900000000000000000"},"value":"0.9e18"},"visibility":"internal"},{"constant":true,"id":9558,"mutability":"constant","name":"MAX_COLLATERAL_FACTOR_MANTISSA","nameLocation":"4071:30:30","nodeType":"VariableDeclaration","scope":9575,"src":"4045:66:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9556,"name":"uint256","nodeType":"ElementaryTypeName","src":"4045:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"302e3935653138","id":9557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4104:7:30","typeDescriptions":{"typeIdentifier":"t_rational_950000000000000000_by_1","typeString":"int_const 950000000000000000"},"value":"0.95e18"},"visibility":"internal"},{"constant":false,"documentation":{"id":9559,"nodeType":"StructuredDocumentation","src":"4126:23:30","text":"Prime token address"},"functionSelector":"c7ee005e","id":9562,"mutability":"mutable","name":"prime","nameLocation":"4168:5:30","nodeType":"VariableDeclaration","scope":9575,"src":"4154:19:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"},"typeName":{"id":9561,"nodeType":"UserDefinedTypeName","pathNode":{"id":9560,"name":"IPrime","nameLocations":["4154:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":16613,"src":"4154:6:30"},"referencedDeclaration":16613,"src":"4154:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IPrime_$16613","typeString":"contract IPrime"}},"visibility":"public"},{"constant":false,"documentation":{"id":9563,"nodeType":"StructuredDocumentation","src":"4180:85:30","text":"@notice Whether the delegate is allowed to borrow or redeem on behalf of the user"},"functionSelector":"10b98338","id":9569,"mutability":"mutable","name":"approvedDelegates","nameLocation":"4423:17:30","nodeType":"VariableDeclaration","scope":9575,"src":"4371:69:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(address => mapping(address => bool))"},"typeName":{"id":9568,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":9564,"name":"address","nodeType":"ElementaryTypeName","src":"4379:7:30","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4371:44:30","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(address => mapping(address => bool))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":9567,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":9565,"name":"address","nodeType":"ElementaryTypeName","src":"4398:7:30","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4390:24:30","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":9566,"name":"bool","nodeType":"ElementaryTypeName","src":"4409:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}}},"visibility":"public"},{"constant":false,"documentation":{"id":9570,"nodeType":"StructuredDocumentation","src":"4447:254:30","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":9574,"mutability":"mutable","name":"__gap","nameLocation":"4726:5:30","nodeType":"VariableDeclaration","scope":9575,"src":"4706:25:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$47_storage","typeString":"uint256[47]"},"typeName":{"baseType":{"id":9571,"name":"uint256","nodeType":"ElementaryTypeName","src":"4706:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9573,"length":{"hexValue":"3437","id":9572,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4714:2:30","typeDescriptions":{"typeIdentifier":"t_rational_47_by_1","typeString":"int_const 47"},"value":"47"},"nodeType":"ArrayTypeName","src":"4706:11:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$47_storage_ptr","typeString":"uint256[47]"}},"visibility":"private"}],"scope":9576,"src":"551:4183:30","usedErrors":[],"usedEvents":[]}],"src":"41:4694:30"},"id":30},"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol":{"ast":{"absolutePath":"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol","exportedSymbols":{"TokenErrorReporter":[9636]},"id":9637,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":9577,"literals":["solidity","0.8",".25"],"nodeType":"PragmaDirective","src":"41:23:31"},{"abstract":false,"baseContracts":[],"canonicalName":"TokenErrorReporter","contractDependencies":[],"contractKind":"contract","documentation":{"id":9578,"nodeType":"StructuredDocumentation","src":"66:116:31","text":" @title TokenErrorReporter\n @author Venus\n @notice Errors that can be thrown by the `VToken` contract."},"fullyImplemented":true,"id":9636,"linearizedBaseContracts":[9636],"name":"TokenErrorReporter","nameLocation":"192:18:31","nodeType":"ContractDefinition","nodes":[{"constant":true,"functionSelector":"69ab3250","id":9581,"mutability":"constant","name":"NO_ERROR","nameLocation":"241:8:31","nodeType":"VariableDeclaration","scope":9636,"src":"217:36:31","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9579,"name":"uint256","nodeType":"ElementaryTypeName","src":"217:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":9580,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"252:1:31","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"public"},{"errorSelector":"8cd22d19","id":9583,"name":"TransferNotAllowed","nameLocation":"297:18:31","nodeType":"ErrorDefinition","parameters":{"id":9582,"nodeType":"ParameterList","parameters":[],"src":"315:2:31"},"src":"291:27:31"},{"errorSelector":"38d88597","id":9585,"name":"MintFreshnessCheck","nameLocation":"330:18:31","nodeType":"ErrorDefinition","parameters":{"id":9584,"nodeType":"ParameterList","parameters":[],"src":"348:2:31"},"src":"324:27:31"},{"errorSelector":"97b5cfcd","id":9587,"name":"RedeemFreshnessCheck","nameLocation":"363:20:31","nodeType":"ErrorDefinition","parameters":{"id":9586,"nodeType":"ParameterList","parameters":[],"src":"383:2:31"},"src":"357:29:31"},{"errorSelector":"91240a1b","id":9589,"name":"RedeemTransferOutNotPossible","nameLocation":"397:28:31","nodeType":"ErrorDefinition","parameters":{"id":9588,"nodeType":"ParameterList","parameters":[],"src":"425:2:31"},"src":"391:37:31"},{"errorSelector":"3a363184","id":9591,"name":"BorrowFreshnessCheck","nameLocation":"440:20:31","nodeType":"ErrorDefinition","parameters":{"id":9590,"nodeType":"ParameterList","parameters":[],"src":"460:2:31"},"src":"434:29:31"},{"errorSelector":"48c25881","id":9593,"name":"BorrowCashNotAvailable","nameLocation":"474:22:31","nodeType":"ErrorDefinition","parameters":{"id":9592,"nodeType":"ParameterList","parameters":[],"src":"496:2:31"},"src":"468:31:31"},{"errorSelector":"0cf0b6f5","id":9595,"name":"DelegateNotApproved","nameLocation":"510:19:31","nodeType":"ErrorDefinition","parameters":{"id":9594,"nodeType":"ParameterList","parameters":[],"src":"529:2:31"},"src":"504:28:31"},{"errorSelector":"c9021e2f","id":9597,"name":"RepayBorrowFreshnessCheck","nameLocation":"544:25:31","nodeType":"ErrorDefinition","parameters":{"id":9596,"nodeType":"ParameterList","parameters":[],"src":"569:2:31"},"src":"538:34:31"},{"errorSelector":"2c402925","id":9599,"name":"HealBorrowUnauthorized","nameLocation":"584:22:31","nodeType":"ErrorDefinition","parameters":{"id":9598,"nodeType":"ParameterList","parameters":[],"src":"606:2:31"},"src":"578:31:31"},{"errorSelector":"5c85a5e7","id":9601,"name":"ForceLiquidateBorrowUnauthorized","nameLocation":"620:32:31","nodeType":"ErrorDefinition","parameters":{"id":9600,"nodeType":"ParameterList","parameters":[],"src":"652:2:31"},"src":"614:41:31"},{"errorSelector":"80965b1b","id":9603,"name":"LiquidateFreshnessCheck","nameLocation":"667:23:31","nodeType":"ErrorDefinition","parameters":{"id":9602,"nodeType":"ParameterList","parameters":[],"src":"690:2:31"},"src":"661:32:31"},{"errorSelector":"82379c68","id":9605,"name":"LiquidateCollateralFreshnessCheck","nameLocation":"704:33:31","nodeType":"ErrorDefinition","parameters":{"id":9604,"nodeType":"ParameterList","parameters":[],"src":"737:2:31"},"src":"698:42:31"},{"errorSelector":"7dd4936e","id":9609,"name":"LiquidateAccrueCollateralInterestFailed","nameLocation":"751:39:31","nodeType":"ErrorDefinition","parameters":{"id":9608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9607,"mutability":"mutable","name":"errorCode","nameLocation":"799:9:31","nodeType":"VariableDeclaration","scope":9609,"src":"791:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9606,"name":"uint256","nodeType":"ElementaryTypeName","src":"791:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"790:19:31"},"src":"745:65:31"},{"errorSelector":"6f469884","id":9611,"name":"LiquidateLiquidatorIsBorrower","nameLocation":"821:29:31","nodeType":"ErrorDefinition","parameters":{"id":9610,"nodeType":"ParameterList","parameters":[],"src":"850:2:31"},"src":"815:38:31"},{"errorSelector":"d29da7ef","id":9613,"name":"LiquidateCloseAmountIsZero","nameLocation":"864:26:31","nodeType":"ErrorDefinition","parameters":{"id":9612,"nodeType":"ParameterList","parameters":[],"src":"890:2:31"},"src":"858:35:31"},{"errorSelector":"b3058b76","id":9615,"name":"LiquidateCloseAmountIsUintMax","nameLocation":"904:29:31","nodeType":"ErrorDefinition","parameters":{"id":9614,"nodeType":"ParameterList","parameters":[],"src":"933:2:31"},"src":"898:38:31"},{"errorSelector":"7528c4ce","id":9617,"name":"LiquidateSeizeLiquidatorIsBorrower","nameLocation":"948:34:31","nodeType":"ErrorDefinition","parameters":{"id":9616,"nodeType":"ParameterList","parameters":[],"src":"982:2:31"},"src":"942:43:31"},{"errorSelector":"069ba582","id":9619,"name":"ProtocolSeizeShareTooBig","nameLocation":"997:24:31","nodeType":"ErrorDefinition","parameters":{"id":9618,"nodeType":"ParameterList","parameters":[],"src":"1021:2:31"},"src":"991:33:31"},{"errorSelector":"fbf94d6e","id":9621,"name":"SetReserveFactorFreshCheck","nameLocation":"1036:26:31","nodeType":"ErrorDefinition","parameters":{"id":9620,"nodeType":"ParameterList","parameters":[],"src":"1062:2:31"},"src":"1030:35:31"},{"errorSelector":"e2e441e6","id":9623,"name":"SetReserveFactorBoundsCheck","nameLocation":"1076:27:31","nodeType":"ErrorDefinition","parameters":{"id":9622,"nodeType":"ParameterList","parameters":[],"src":"1103:2:31"},"src":"1070:36:31"},{"errorSelector":"38acf799","id":9627,"name":"AddReservesFactorFreshCheck","nameLocation":"1118:27:31","nodeType":"ErrorDefinition","parameters":{"id":9626,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9625,"mutability":"mutable","name":"actualAddAmount","nameLocation":"1154:15:31","nodeType":"VariableDeclaration","scope":9627,"src":"1146:23:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9624,"name":"uint256","nodeType":"ElementaryTypeName","src":"1146:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1145:25:31"},"src":"1112:59:31"},{"errorSelector":"dff50cb0","id":9629,"name":"ReduceReservesFreshCheck","nameLocation":"1183:24:31","nodeType":"ErrorDefinition","parameters":{"id":9628,"nodeType":"ParameterList","parameters":[],"src":"1207:2:31"},"src":"1177:33:31"},{"errorSelector":"3345e999","id":9631,"name":"ReduceReservesCashNotAvailable","nameLocation":"1221:30:31","nodeType":"ErrorDefinition","parameters":{"id":9630,"nodeType":"ParameterList","parameters":[],"src":"1251:2:31"},"src":"1215:39:31"},{"errorSelector":"f1a5300a","id":9633,"name":"ReduceReservesCashValidation","nameLocation":"1265:28:31","nodeType":"ErrorDefinition","parameters":{"id":9632,"nodeType":"ParameterList","parameters":[],"src":"1293:2:31"},"src":"1259:37:31"},{"errorSelector":"17c54b96","id":9635,"name":"SetInterestRateModelFreshCheck","nameLocation":"1308:30:31","nodeType":"ErrorDefinition","parameters":{"id":9634,"nodeType":"ParameterList","parameters":[],"src":"1338:2:31"},"src":"1302:39:31"}],"scope":9637,"src":"183:1160:31","usedErrors":[9583,9585,9587,9589,9591,9593,9595,9597,9599,9601,9603,9605,9609,9611,9613,9615,9617,9619,9621,9623,9627,9629,9631,9633,9635],"usedEvents":[]}],"src":"41:1303:31"},"id":31},"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol":{"ast":{"absolutePath":"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol","exportedSymbols":{"EXP_SCALE_":[16116],"ExponentialNoError":[10223],"MANTISSA_ONE_":[16120]},"id":10224,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":9638,"literals":["solidity","0.8",".25"],"nodeType":"PragmaDirective","src":"41:23:32"},{"absolutePath":"@venusprotocol/isolated-pools/contracts/lib/constants.sol","file":"./lib/constants.sol","id":9641,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10224,"sourceUnit":16121,"src":"66:93:32","symbolAliases":[{"foreign":{"id":9639,"name":"EXP_SCALE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16116,"src":"75:9:32","typeDescriptions":{}},"local":"EXP_SCALE_","nameLocation":"-1:-1:-1"},{"foreign":{"id":9640,"name":"MANTISSA_ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16120,"src":"100:12:32","typeDescriptions":{}},"local":"MANTISSA_ONE_","nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ExponentialNoError","contractDependencies":[],"contractKind":"contract","documentation":{"id":9642,"nodeType":"StructuredDocumentation","src":"161:324:32","text":" @title Exponential module for storing fixed-precision decimals\n @author Compound\n @notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.\n         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:\n         `Exp({mantissa: 5100000000000000000})`."},"fullyImplemented":true,"id":10223,"linearizedBaseContracts":[10223],"name":"ExponentialNoError","nameLocation":"495:18:32","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ExponentialNoError.Exp","id":9645,"members":[{"constant":false,"id":9644,"mutability":"mutable","name":"mantissa","nameLocation":"549:8:32","nodeType":"VariableDeclaration","scope":9645,"src":"541:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9643,"name":"uint256","nodeType":"ElementaryTypeName","src":"541:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Exp","nameLocation":"527:3:32","nodeType":"StructDefinition","scope":10223,"src":"520:44:32","visibility":"public"},{"canonicalName":"ExponentialNoError.Double","id":9648,"members":[{"constant":false,"id":9647,"mutability":"mutable","name":"mantissa","nameLocation":"602:8:32","nodeType":"VariableDeclaration","scope":9648,"src":"594:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9646,"name":"uint256","nodeType":"ElementaryTypeName","src":"594:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Double","nameLocation":"577:6:32","nodeType":"StructDefinition","scope":10223,"src":"570:47:32","visibility":"public"},{"constant":true,"id":9651,"mutability":"constant","name":"EXP_SCALE","nameLocation":"649:9:32","nodeType":"VariableDeclaration","scope":10223,"src":"623:48:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9649,"name":"uint256","nodeType":"ElementaryTypeName","src":"623:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"id":9650,"name":"EXP_SCALE_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16116,"src":"661:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":9654,"mutability":"constant","name":"DOUBLE_SCALE","nameLocation":"703:12:32","nodeType":"VariableDeclaration","scope":10223,"src":"677:45:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9652,"name":"uint256","nodeType":"ElementaryTypeName","src":"677:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653336","id":9653,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"718:4:32","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(29 digits omitted)...0000"},"value":"1e36"},"visibility":"internal"},{"constant":true,"id":9659,"mutability":"constant","name":"HALF_EXP_SCALE","nameLocation":"754:14:32","nodeType":"VariableDeclaration","scope":10223,"src":"728:56:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9655,"name":"uint256","nodeType":"ElementaryTypeName","src":"728:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9658,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":9656,"name":"EXP_SCALE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9651,"src":"771:9:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":9657,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"783:1:32","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"771:13:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":9662,"mutability":"constant","name":"MANTISSA_ONE","nameLocation":"816:12:32","nodeType":"VariableDeclaration","scope":10223,"src":"790:54:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9660,"name":"uint256","nodeType":"ElementaryTypeName","src":"790:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"id":9661,"name":"MANTISSA_ONE_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16120,"src":"831:13:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"body":{"id":9676,"nodeType":"Block","src":"1064:148:32","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":9671,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9666,"src":"1181:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"id":9672,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1185:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9644,"src":"1181:12:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9673,"name":"EXP_SCALE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9651,"src":"1196:9:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1181:24:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9670,"id":9675,"nodeType":"Return","src":"1174:31:32"}]},"documentation":{"id":9663,"nodeType":"StructuredDocumentation","src":"851:142:32","text":" @dev Truncates the given exp to a whole number value.\n      For example, truncate(Exp{mantissa: 15 * EXP_SCALE}) = 15"},"id":9677,"implemented":true,"kind":"function","modifiers":[],"name":"truncate","nameLocation":"1007:8:32","nodeType":"FunctionDefinition","parameters":{"id":9667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9666,"mutability":"mutable","name":"exp","nameLocation":"1027:3:32","nodeType":"VariableDeclaration","scope":9677,"src":"1016:14:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9665,"nodeType":"UserDefinedTypeName","pathNode":{"id":9664,"name":"Exp","nameLocations":["1016:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"1016:3:32"},"referencedDeclaration":9645,"src":"1016:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"1015:16:32"},"returnParameters":{"id":9670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9669,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9677,"src":"1055:7:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9668,"name":"uint256","nodeType":"ElementaryTypeName","src":"1055:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1054:9:32"},"scope":10223,"src":"998:214:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9700,"nodeType":"Block","src":"1463:87:32","statements":[{"assignments":[9690],"declarations":[{"constant":false,"id":9690,"mutability":"mutable","name":"product","nameLocation":"1484:7:32","nodeType":"VariableDeclaration","scope":9700,"src":"1473:18:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9689,"nodeType":"UserDefinedTypeName","pathNode":{"id":9688,"name":"Exp","nameLocations":["1473:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"1473:3:32"},"referencedDeclaration":9645,"src":"1473:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":9695,"initialValue":{"arguments":[{"id":9692,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9681,"src":"1499:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":9693,"name":"scalar","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9683,"src":"1502:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9691,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":9961,"src":"1494:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_uint256_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (struct ExponentialNoError.Exp memory,uint256) pure returns (struct ExponentialNoError.Exp memory)"}},"id":9694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1494:15:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"VariableDeclarationStatement","src":"1473:36:32"},{"expression":{"arguments":[{"id":9697,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9690,"src":"1535:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":9696,"name":"truncate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9677,"src":"1526:8:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct ExponentialNoError.Exp memory) pure returns (uint256)"}},"id":9698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1526:17:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9687,"id":9699,"nodeType":"Return","src":"1519:24:32"}]},"documentation":{"id":9678,"nodeType":"StructuredDocumentation","src":"1218:97:32","text":" @dev Multiply an Exp by a scalar, then truncate to return an unsigned integer."},"id":9701,"implemented":true,"kind":"function","modifiers":[],"name":"mul_ScalarTruncate","nameLocation":"1382:18:32","nodeType":"FunctionDefinition","parameters":{"id":9684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9681,"mutability":"mutable","name":"a","nameLocation":"1412:1:32","nodeType":"VariableDeclaration","scope":9701,"src":"1401:12:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9680,"nodeType":"UserDefinedTypeName","pathNode":{"id":9679,"name":"Exp","nameLocations":["1401:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"1401:3:32"},"referencedDeclaration":9645,"src":"1401:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"},{"constant":false,"id":9683,"mutability":"mutable","name":"scalar","nameLocation":"1423:6:32","nodeType":"VariableDeclaration","scope":9701,"src":"1415:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9682,"name":"uint256","nodeType":"ElementaryTypeName","src":"1415:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1400:30:32"},"returnParameters":{"id":9687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9686,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9701,"src":"1454:7:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9685,"name":"uint256","nodeType":"ElementaryTypeName","src":"1454:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1453:9:32"},"scope":10223,"src":"1373:177:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9729,"nodeType":"Block","src":"1856:101:32","statements":[{"assignments":[9716],"declarations":[{"constant":false,"id":9716,"mutability":"mutable","name":"product","nameLocation":"1877:7:32","nodeType":"VariableDeclaration","scope":9729,"src":"1866:18:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9715,"nodeType":"UserDefinedTypeName","pathNode":{"id":9714,"name":"Exp","nameLocations":["1866:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"1866:3:32"},"referencedDeclaration":9645,"src":"1866:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":9721,"initialValue":{"arguments":[{"id":9718,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9705,"src":"1892:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":9719,"name":"scalar","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9707,"src":"1895:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9717,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":9961,"src":"1887:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_uint256_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (struct ExponentialNoError.Exp memory,uint256) pure returns (struct ExponentialNoError.Exp memory)"}},"id":9720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1887:15:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"VariableDeclarationStatement","src":"1866:36:32"},{"expression":{"arguments":[{"arguments":[{"id":9724,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9716,"src":"1933:7:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":9723,"name":"truncate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9677,"src":"1924:8:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct ExponentialNoError.Exp memory) pure returns (uint256)"}},"id":9725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1924:17:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":9726,"name":"addend","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9709,"src":"1943:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9722,"name":"add_","nodeType":"Identifier","overloadedDeclarations":[9823,9845,9859],"referencedDeclaration":9859,"src":"1919:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1919:31:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9713,"id":9728,"nodeType":"Return","src":"1912:38:32"}]},"documentation":{"id":9702,"nodeType":"StructuredDocumentation","src":"1556:129:32","text":" @dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer."},"id":9730,"implemented":true,"kind":"function","modifiers":[],"name":"mul_ScalarTruncateAddUInt","nameLocation":"1752:25:32","nodeType":"FunctionDefinition","parameters":{"id":9710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9705,"mutability":"mutable","name":"a","nameLocation":"1789:1:32","nodeType":"VariableDeclaration","scope":9730,"src":"1778:12:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9704,"nodeType":"UserDefinedTypeName","pathNode":{"id":9703,"name":"Exp","nameLocations":["1778:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"1778:3:32"},"referencedDeclaration":9645,"src":"1778:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"},{"constant":false,"id":9707,"mutability":"mutable","name":"scalar","nameLocation":"1800:6:32","nodeType":"VariableDeclaration","scope":9730,"src":"1792:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9706,"name":"uint256","nodeType":"ElementaryTypeName","src":"1792:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9709,"mutability":"mutable","name":"addend","nameLocation":"1816:6:32","nodeType":"VariableDeclaration","scope":9730,"src":"1808:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9708,"name":"uint256","nodeType":"ElementaryTypeName","src":"1808:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1777:46:32"},"returnParameters":{"id":9713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9712,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9730,"src":"1847:7:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9711,"name":"uint256","nodeType":"ElementaryTypeName","src":"1847:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1846:9:32"},"scope":10223,"src":"1743:214:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9748,"nodeType":"Block","src":"2121:54:32","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":9742,"name":"left","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9734,"src":"2138:4:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"id":9743,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2143:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9644,"src":"2138:13:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":9744,"name":"right","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9737,"src":"2154:5:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"id":9745,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2160:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9644,"src":"2154:14:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2138:30:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9741,"id":9747,"nodeType":"Return","src":"2131:37:32"}]},"documentation":{"id":9731,"nodeType":"StructuredDocumentation","src":"1963:68:32","text":" @dev Checks if first Exp is less than second Exp."},"id":9749,"implemented":true,"kind":"function","modifiers":[],"name":"lessThanExp","nameLocation":"2045:11:32","nodeType":"FunctionDefinition","parameters":{"id":9738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9734,"mutability":"mutable","name":"left","nameLocation":"2068:4:32","nodeType":"VariableDeclaration","scope":9749,"src":"2057:15:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9733,"nodeType":"UserDefinedTypeName","pathNode":{"id":9732,"name":"Exp","nameLocations":["2057:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"2057:3:32"},"referencedDeclaration":9645,"src":"2057:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"},{"constant":false,"id":9737,"mutability":"mutable","name":"right","nameLocation":"2085:5:32","nodeType":"VariableDeclaration","scope":9749,"src":"2074:16:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9736,"nodeType":"UserDefinedTypeName","pathNode":{"id":9735,"name":"Exp","nameLocations":["2074:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"2074:3:32"},"referencedDeclaration":9645,"src":"2074:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"2056:35:32"},"returnParameters":{"id":9741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9740,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9749,"src":"2115:4:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9739,"name":"bool","nodeType":"ElementaryTypeName","src":"2115:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2114:6:32"},"scope":10223,"src":"2036:139:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9774,"nodeType":"Block","src":"2269:89:32","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9759,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9751,"src":"2287:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":9762,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2297:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":9761,"name":"uint224","nodeType":"ElementaryTypeName","src":"2297:7:32","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"}],"id":9760,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2292:4:32","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":9763,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2292:13:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint224","typeString":"type(uint224)"}},"id":9764,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2306:3:32","memberName":"max","nodeType":"MemberAccess","src":"2292:17:32","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"2287:22:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":9766,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9753,"src":"2311:12:32","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":9758,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2279:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":9767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2279:45:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9768,"nodeType":"ExpressionStatement","src":"2279:45:32"},{"expression":{"arguments":[{"id":9771,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9751,"src":"2349:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9770,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2341:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":9769,"name":"uint224","nodeType":"ElementaryTypeName","src":"2341:7:32","typeDescriptions":{}}},"id":9772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2341:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"functionReturnParameters":9757,"id":9773,"nodeType":"Return","src":"2334:17:32"}]},"id":9775,"implemented":true,"kind":"function","modifiers":[],"name":"safe224","nameLocation":"2190:7:32","nodeType":"FunctionDefinition","parameters":{"id":9754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9751,"mutability":"mutable","name":"n","nameLocation":"2206:1:32","nodeType":"VariableDeclaration","scope":9775,"src":"2198:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9750,"name":"uint256","nodeType":"ElementaryTypeName","src":"2198:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9753,"mutability":"mutable","name":"errorMessage","nameLocation":"2223:12:32","nodeType":"VariableDeclaration","scope":9775,"src":"2209:26:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9752,"name":"string","nodeType":"ElementaryTypeName","src":"2209:6:32","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2197:39:32"},"returnParameters":{"id":9757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9756,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9775,"src":"2260:7:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":9755,"name":"uint224","nodeType":"ElementaryTypeName","src":"2260:7:32","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"}],"src":"2259:9:32"},"scope":10223,"src":"2181:177:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9800,"nodeType":"Block","src":"2450:87:32","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9785,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9777,"src":"2468:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":9788,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2478:6:32","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":9787,"name":"uint32","nodeType":"ElementaryTypeName","src":"2478:6:32","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"}],"id":9786,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2473:4:32","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":9789,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2473:12:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint32","typeString":"type(uint32)"}},"id":9790,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2486:3:32","memberName":"max","nodeType":"MemberAccess","src":"2473:16:32","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"2468:21:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":9792,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9779,"src":"2491:12:32","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":9784,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2460:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":9793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2460:44:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9794,"nodeType":"ExpressionStatement","src":"2460:44:32"},{"expression":{"arguments":[{"id":9797,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9777,"src":"2528:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9796,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2521:6:32","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":9795,"name":"uint32","nodeType":"ElementaryTypeName","src":"2521:6:32","typeDescriptions":{}}},"id":9798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2521:9:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":9783,"id":9799,"nodeType":"Return","src":"2514:16:32"}]},"id":9801,"implemented":true,"kind":"function","modifiers":[],"name":"safe32","nameLocation":"2373:6:32","nodeType":"FunctionDefinition","parameters":{"id":9780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9777,"mutability":"mutable","name":"n","nameLocation":"2388:1:32","nodeType":"VariableDeclaration","scope":9801,"src":"2380:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9776,"name":"uint256","nodeType":"ElementaryTypeName","src":"2380:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9779,"mutability":"mutable","name":"errorMessage","nameLocation":"2405:12:32","nodeType":"VariableDeclaration","scope":9801,"src":"2391:26:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9778,"name":"string","nodeType":"ElementaryTypeName","src":"2391:6:32","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2379:39:32"},"returnParameters":{"id":9783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9782,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9801,"src":"2442:6:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":9781,"name":"uint32","nodeType":"ElementaryTypeName","src":"2442:6:32","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2441:8:32"},"scope":10223,"src":"2364:173:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9822,"nodeType":"Block","src":"2620:71:32","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":9815,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9804,"src":"2658:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"id":9816,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2660:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9644,"src":"2658:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":9817,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9807,"src":"2670:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"id":9818,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2672:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9644,"src":"2670:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9814,"name":"add_","nodeType":"Identifier","overloadedDeclarations":[9823,9845,9859],"referencedDeclaration":9859,"src":"2653:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2653:28:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9813,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"2637:3:32","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":9820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["2643:8:32"],"names":["mantissa"],"nodeType":"FunctionCall","src":"2637:47:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"functionReturnParameters":9812,"id":9821,"nodeType":"Return","src":"2630:54:32"}]},"id":9823,"implemented":true,"kind":"function","modifiers":[],"name":"add_","nameLocation":"2552:4:32","nodeType":"FunctionDefinition","parameters":{"id":9808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9804,"mutability":"mutable","name":"a","nameLocation":"2568:1:32","nodeType":"VariableDeclaration","scope":9823,"src":"2557:12:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9803,"nodeType":"UserDefinedTypeName","pathNode":{"id":9802,"name":"Exp","nameLocations":["2557:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"2557:3:32"},"referencedDeclaration":9645,"src":"2557:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"},{"constant":false,"id":9807,"mutability":"mutable","name":"b","nameLocation":"2582:1:32","nodeType":"VariableDeclaration","scope":9823,"src":"2571:12:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9806,"nodeType":"UserDefinedTypeName","pathNode":{"id":9805,"name":"Exp","nameLocations":["2571:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"2571:3:32"},"referencedDeclaration":9645,"src":"2571:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"2556:28:32"},"returnParameters":{"id":9812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9811,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9823,"src":"2608:10:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9810,"nodeType":"UserDefinedTypeName","pathNode":{"id":9809,"name":"Exp","nameLocations":["2608:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"2608:3:32"},"referencedDeclaration":9645,"src":"2608:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"2607:12:32"},"scope":10223,"src":"2543:148:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9844,"nodeType":"Block","src":"2783:74:32","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":9837,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9826,"src":"2824:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"id":9838,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2826:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9647,"src":"2824:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":9839,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9829,"src":"2836:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"id":9840,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2838:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9647,"src":"2836:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9836,"name":"add_","nodeType":"Identifier","overloadedDeclarations":[9823,9845,9859],"referencedDeclaration":9859,"src":"2819:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2819:28:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9835,"name":"Double","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9648,"src":"2800:6:32","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Double_$9648_storage_ptr_$","typeString":"type(struct ExponentialNoError.Double storage pointer)"}},"id":9842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["2809:8:32"],"names":["mantissa"],"nodeType":"FunctionCall","src":"2800:50:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"functionReturnParameters":9834,"id":9843,"nodeType":"Return","src":"2793:57:32"}]},"id":9845,"implemented":true,"kind":"function","modifiers":[],"name":"add_","nameLocation":"2706:4:32","nodeType":"FunctionDefinition","parameters":{"id":9830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9826,"mutability":"mutable","name":"a","nameLocation":"2725:1:32","nodeType":"VariableDeclaration","scope":9845,"src":"2711:15:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":9825,"nodeType":"UserDefinedTypeName","pathNode":{"id":9824,"name":"Double","nameLocations":["2711:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"2711:6:32"},"referencedDeclaration":9648,"src":"2711:6:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"},{"constant":false,"id":9829,"mutability":"mutable","name":"b","nameLocation":"2742:1:32","nodeType":"VariableDeclaration","scope":9845,"src":"2728:15:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":9828,"nodeType":"UserDefinedTypeName","pathNode":{"id":9827,"name":"Double","nameLocations":["2728:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"2728:6:32"},"referencedDeclaration":9648,"src":"2728:6:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"}],"src":"2710:34:32"},"returnParameters":{"id":9834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9833,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9845,"src":"2768:13:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":9832,"nodeType":"UserDefinedTypeName","pathNode":{"id":9831,"name":"Double","nameLocations":["2768:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"2768:6:32"},"referencedDeclaration":9648,"src":"2768:6:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"}],"src":"2767:15:32"},"scope":10223,"src":"2697:160:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9858,"nodeType":"Block","src":"2931:29:32","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9854,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9847,"src":"2948:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":9855,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9849,"src":"2952:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2948:5:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9853,"id":9857,"nodeType":"Return","src":"2941:12:32"}]},"id":9859,"implemented":true,"kind":"function","modifiers":[],"name":"add_","nameLocation":"2872:4:32","nodeType":"FunctionDefinition","parameters":{"id":9850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9847,"mutability":"mutable","name":"a","nameLocation":"2885:1:32","nodeType":"VariableDeclaration","scope":9859,"src":"2877:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9846,"name":"uint256","nodeType":"ElementaryTypeName","src":"2877:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9849,"mutability":"mutable","name":"b","nameLocation":"2896:1:32","nodeType":"VariableDeclaration","scope":9859,"src":"2888:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9848,"name":"uint256","nodeType":"ElementaryTypeName","src":"2888:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2876:22:32"},"returnParameters":{"id":9853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9852,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9859,"src":"2922:7:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9851,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2921:9:32"},"scope":10223,"src":"2863:97:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9880,"nodeType":"Block","src":"3043:71:32","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":9873,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9862,"src":"3081:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"id":9874,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3083:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9644,"src":"3081:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":9875,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9865,"src":"3093:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"id":9876,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3095:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9644,"src":"3093:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9872,"name":"sub_","nodeType":"Identifier","overloadedDeclarations":[9881,9903,9917],"referencedDeclaration":9917,"src":"3076:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3076:28:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9871,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"3060:3:32","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":9878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["3066:8:32"],"names":["mantissa"],"nodeType":"FunctionCall","src":"3060:47:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"functionReturnParameters":9870,"id":9879,"nodeType":"Return","src":"3053:54:32"}]},"id":9881,"implemented":true,"kind":"function","modifiers":[],"name":"sub_","nameLocation":"2975:4:32","nodeType":"FunctionDefinition","parameters":{"id":9866,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9862,"mutability":"mutable","name":"a","nameLocation":"2991:1:32","nodeType":"VariableDeclaration","scope":9881,"src":"2980:12:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9861,"nodeType":"UserDefinedTypeName","pathNode":{"id":9860,"name":"Exp","nameLocations":["2980:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"2980:3:32"},"referencedDeclaration":9645,"src":"2980:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"},{"constant":false,"id":9865,"mutability":"mutable","name":"b","nameLocation":"3005:1:32","nodeType":"VariableDeclaration","scope":9881,"src":"2994:12:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9864,"nodeType":"UserDefinedTypeName","pathNode":{"id":9863,"name":"Exp","nameLocations":["2994:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"2994:3:32"},"referencedDeclaration":9645,"src":"2994:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"2979:28:32"},"returnParameters":{"id":9870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9869,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9881,"src":"3031:10:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9868,"nodeType":"UserDefinedTypeName","pathNode":{"id":9867,"name":"Exp","nameLocations":["3031:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"3031:3:32"},"referencedDeclaration":9645,"src":"3031:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"3030:12:32"},"scope":10223,"src":"2966:148:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9902,"nodeType":"Block","src":"3206:74:32","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":9895,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9884,"src":"3247:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"id":9896,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3249:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9647,"src":"3247:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":9897,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9887,"src":"3259:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"id":9898,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3261:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9647,"src":"3259:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9894,"name":"sub_","nodeType":"Identifier","overloadedDeclarations":[9881,9903,9917],"referencedDeclaration":9917,"src":"3242:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3242:28:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9893,"name":"Double","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9648,"src":"3223:6:32","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Double_$9648_storage_ptr_$","typeString":"type(struct ExponentialNoError.Double storage pointer)"}},"id":9900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["3232:8:32"],"names":["mantissa"],"nodeType":"FunctionCall","src":"3223:50:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"functionReturnParameters":9892,"id":9901,"nodeType":"Return","src":"3216:57:32"}]},"id":9903,"implemented":true,"kind":"function","modifiers":[],"name":"sub_","nameLocation":"3129:4:32","nodeType":"FunctionDefinition","parameters":{"id":9888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9884,"mutability":"mutable","name":"a","nameLocation":"3148:1:32","nodeType":"VariableDeclaration","scope":9903,"src":"3134:15:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":9883,"nodeType":"UserDefinedTypeName","pathNode":{"id":9882,"name":"Double","nameLocations":["3134:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"3134:6:32"},"referencedDeclaration":9648,"src":"3134:6:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"},{"constant":false,"id":9887,"mutability":"mutable","name":"b","nameLocation":"3165:1:32","nodeType":"VariableDeclaration","scope":9903,"src":"3151:15:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":9886,"nodeType":"UserDefinedTypeName","pathNode":{"id":9885,"name":"Double","nameLocations":["3151:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"3151:6:32"},"referencedDeclaration":9648,"src":"3151:6:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"}],"src":"3133:34:32"},"returnParameters":{"id":9892,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9891,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9903,"src":"3191:13:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":9890,"nodeType":"UserDefinedTypeName","pathNode":{"id":9889,"name":"Double","nameLocations":["3191:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"3191:6:32"},"referencedDeclaration":9648,"src":"3191:6:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"}],"src":"3190:15:32"},"scope":10223,"src":"3120:160:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9916,"nodeType":"Block","src":"3354:29:32","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9912,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9905,"src":"3371:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":9913,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9907,"src":"3375:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3371:5:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9911,"id":9915,"nodeType":"Return","src":"3364:12:32"}]},"id":9917,"implemented":true,"kind":"function","modifiers":[],"name":"sub_","nameLocation":"3295:4:32","nodeType":"FunctionDefinition","parameters":{"id":9908,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9905,"mutability":"mutable","name":"a","nameLocation":"3308:1:32","nodeType":"VariableDeclaration","scope":9917,"src":"3300:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9904,"name":"uint256","nodeType":"ElementaryTypeName","src":"3300:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9907,"mutability":"mutable","name":"b","nameLocation":"3319:1:32","nodeType":"VariableDeclaration","scope":9917,"src":"3311:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9906,"name":"uint256","nodeType":"ElementaryTypeName","src":"3311:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3299:22:32"},"returnParameters":{"id":9911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9910,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9917,"src":"3345:7:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9909,"name":"uint256","nodeType":"ElementaryTypeName","src":"3345:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3344:9:32"},"scope":10223,"src":"3286:97:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9940,"nodeType":"Block","src":"3466:83:32","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":9931,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9920,"src":"3504:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"id":9932,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3506:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9644,"src":"3504:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":9933,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9923,"src":"3516:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"id":9934,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3518:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9644,"src":"3516:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9930,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":10057,"src":"3499:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9935,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3499:28:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9936,"name":"EXP_SCALE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9651,"src":"3530:9:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3499:40:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9929,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"3483:3:32","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":9938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["3489:8:32"],"names":["mantissa"],"nodeType":"FunctionCall","src":"3483:59:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"functionReturnParameters":9928,"id":9939,"nodeType":"Return","src":"3476:66:32"}]},"id":9941,"implemented":true,"kind":"function","modifiers":[],"name":"mul_","nameLocation":"3398:4:32","nodeType":"FunctionDefinition","parameters":{"id":9924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9920,"mutability":"mutable","name":"a","nameLocation":"3414:1:32","nodeType":"VariableDeclaration","scope":9941,"src":"3403:12:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9919,"nodeType":"UserDefinedTypeName","pathNode":{"id":9918,"name":"Exp","nameLocations":["3403:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"3403:3:32"},"referencedDeclaration":9645,"src":"3403:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"},{"constant":false,"id":9923,"mutability":"mutable","name":"b","nameLocation":"3428:1:32","nodeType":"VariableDeclaration","scope":9941,"src":"3417:12:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9922,"nodeType":"UserDefinedTypeName","pathNode":{"id":9921,"name":"Exp","nameLocations":["3417:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"3417:3:32"},"referencedDeclaration":9645,"src":"3417:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"3402:28:32"},"returnParameters":{"id":9928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9927,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9941,"src":"3454:10:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9926,"nodeType":"UserDefinedTypeName","pathNode":{"id":9925,"name":"Exp","nameLocations":["3454:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"3454:3:32"},"referencedDeclaration":9645,"src":"3454:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"3453:12:32"},"scope":10223,"src":"3389:160:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9960,"nodeType":"Block","src":"3629:62:32","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":9954,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9944,"src":"3667:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"id":9955,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3669:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9644,"src":"3667:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":9956,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9946,"src":"3679:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9953,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":10057,"src":"3662:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3662:19:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9952,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"3646:3:32","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":9958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["3652:8:32"],"names":["mantissa"],"nodeType":"FunctionCall","src":"3646:38:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"functionReturnParameters":9951,"id":9959,"nodeType":"Return","src":"3639:45:32"}]},"id":9961,"implemented":true,"kind":"function","modifiers":[],"name":"mul_","nameLocation":"3564:4:32","nodeType":"FunctionDefinition","parameters":{"id":9947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9944,"mutability":"mutable","name":"a","nameLocation":"3580:1:32","nodeType":"VariableDeclaration","scope":9961,"src":"3569:12:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9943,"nodeType":"UserDefinedTypeName","pathNode":{"id":9942,"name":"Exp","nameLocations":["3569:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"3569:3:32"},"referencedDeclaration":9645,"src":"3569:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"},{"constant":false,"id":9946,"mutability":"mutable","name":"b","nameLocation":"3591:1:32","nodeType":"VariableDeclaration","scope":9961,"src":"3583:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9945,"name":"uint256","nodeType":"ElementaryTypeName","src":"3583:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3568:25:32"},"returnParameters":{"id":9951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9950,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9961,"src":"3617:10:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9949,"nodeType":"UserDefinedTypeName","pathNode":{"id":9948,"name":"Exp","nameLocations":["3617:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"3617:3:32"},"referencedDeclaration":9645,"src":"3617:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"3616:12:32"},"scope":10223,"src":"3555:136:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9979,"nodeType":"Block","src":"3768:55:32","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":9972,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9963,"src":"3790:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":9973,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9966,"src":"3793:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"id":9974,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3795:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9644,"src":"3793:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9971,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":10057,"src":"3785:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3785:19:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9976,"name":"EXP_SCALE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9651,"src":"3807:9:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3785:31:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9970,"id":9978,"nodeType":"Return","src":"3778:38:32"}]},"id":9980,"implemented":true,"kind":"function","modifiers":[],"name":"mul_","nameLocation":"3706:4:32","nodeType":"FunctionDefinition","parameters":{"id":9967,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9963,"mutability":"mutable","name":"a","nameLocation":"3719:1:32","nodeType":"VariableDeclaration","scope":9980,"src":"3711:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9962,"name":"uint256","nodeType":"ElementaryTypeName","src":"3711:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9966,"mutability":"mutable","name":"b","nameLocation":"3733:1:32","nodeType":"VariableDeclaration","scope":9980,"src":"3722:12:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":9965,"nodeType":"UserDefinedTypeName","pathNode":{"id":9964,"name":"Exp","nameLocations":["3722:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"3722:3:32"},"referencedDeclaration":9645,"src":"3722:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"3710:25:32"},"returnParameters":{"id":9970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9969,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9980,"src":"3759:7:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9968,"name":"uint256","nodeType":"ElementaryTypeName","src":"3759:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3758:9:32"},"scope":10223,"src":"3697:126:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10003,"nodeType":"Block","src":"3915:89:32","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":9994,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9983,"src":"3956:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"id":9995,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3958:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9647,"src":"3956:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":9996,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9986,"src":"3968:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"id":9997,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3970:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9647,"src":"3968:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9993,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":10057,"src":"3951:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3951:28:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9999,"name":"DOUBLE_SCALE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9654,"src":"3982:12:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3951:43:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9992,"name":"Double","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9648,"src":"3932:6:32","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Double_$9648_storage_ptr_$","typeString":"type(struct ExponentialNoError.Double storage pointer)"}},"id":10001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["3941:8:32"],"names":["mantissa"],"nodeType":"FunctionCall","src":"3932:65:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"functionReturnParameters":9991,"id":10002,"nodeType":"Return","src":"3925:72:32"}]},"id":10004,"implemented":true,"kind":"function","modifiers":[],"name":"mul_","nameLocation":"3838:4:32","nodeType":"FunctionDefinition","parameters":{"id":9987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9983,"mutability":"mutable","name":"a","nameLocation":"3857:1:32","nodeType":"VariableDeclaration","scope":10004,"src":"3843:15:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":9982,"nodeType":"UserDefinedTypeName","pathNode":{"id":9981,"name":"Double","nameLocations":["3843:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"3843:6:32"},"referencedDeclaration":9648,"src":"3843:6:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"},{"constant":false,"id":9986,"mutability":"mutable","name":"b","nameLocation":"3874:1:32","nodeType":"VariableDeclaration","scope":10004,"src":"3860:15:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":9985,"nodeType":"UserDefinedTypeName","pathNode":{"id":9984,"name":"Double","nameLocations":["3860:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"3860:6:32"},"referencedDeclaration":9648,"src":"3860:6:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"}],"src":"3842:34:32"},"returnParameters":{"id":9991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9990,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10004,"src":"3900:13:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":9989,"nodeType":"UserDefinedTypeName","pathNode":{"id":9988,"name":"Double","nameLocations":["3900:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"3900:6:32"},"referencedDeclaration":9648,"src":"3900:6:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"}],"src":"3899:15:32"},"scope":10223,"src":"3829:175:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10023,"nodeType":"Block","src":"4090:65:32","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":10017,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10007,"src":"4131:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"id":10018,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4133:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9647,"src":"4131:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10019,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10009,"src":"4143:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10016,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":10057,"src":"4126:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":10020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4126:19:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10015,"name":"Double","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9648,"src":"4107:6:32","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Double_$9648_storage_ptr_$","typeString":"type(struct ExponentialNoError.Double storage pointer)"}},"id":10021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["4116:8:32"],"names":["mantissa"],"nodeType":"FunctionCall","src":"4107:41:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"functionReturnParameters":10014,"id":10022,"nodeType":"Return","src":"4100:48:32"}]},"id":10024,"implemented":true,"kind":"function","modifiers":[],"name":"mul_","nameLocation":"4019:4:32","nodeType":"FunctionDefinition","parameters":{"id":10010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10007,"mutability":"mutable","name":"a","nameLocation":"4038:1:32","nodeType":"VariableDeclaration","scope":10024,"src":"4024:15:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":10006,"nodeType":"UserDefinedTypeName","pathNode":{"id":10005,"name":"Double","nameLocations":["4024:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"4024:6:32"},"referencedDeclaration":9648,"src":"4024:6:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"},{"constant":false,"id":10009,"mutability":"mutable","name":"b","nameLocation":"4049:1:32","nodeType":"VariableDeclaration","scope":10024,"src":"4041:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10008,"name":"uint256","nodeType":"ElementaryTypeName","src":"4041:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4023:28:32"},"returnParameters":{"id":10014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10013,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10024,"src":"4075:13:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":10012,"nodeType":"UserDefinedTypeName","pathNode":{"id":10011,"name":"Double","nameLocations":["4075:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"4075:6:32"},"referencedDeclaration":9648,"src":"4075:6:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"}],"src":"4074:15:32"},"scope":10223,"src":"4010:145:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10042,"nodeType":"Block","src":"4235:58:32","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":10035,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10026,"src":"4257:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":10036,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10029,"src":"4260:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"id":10037,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4262:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9647,"src":"4260:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10034,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":10057,"src":"4252:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":10038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4252:19:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":10039,"name":"DOUBLE_SCALE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9654,"src":"4274:12:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4252:34:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10033,"id":10041,"nodeType":"Return","src":"4245:41:32"}]},"id":10043,"implemented":true,"kind":"function","modifiers":[],"name":"mul_","nameLocation":"4170:4:32","nodeType":"FunctionDefinition","parameters":{"id":10030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10026,"mutability":"mutable","name":"a","nameLocation":"4183:1:32","nodeType":"VariableDeclaration","scope":10043,"src":"4175:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10025,"name":"uint256","nodeType":"ElementaryTypeName","src":"4175:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10029,"mutability":"mutable","name":"b","nameLocation":"4200:1:32","nodeType":"VariableDeclaration","scope":10043,"src":"4186:15:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":10028,"nodeType":"UserDefinedTypeName","pathNode":{"id":10027,"name":"Double","nameLocations":["4186:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"4186:6:32"},"referencedDeclaration":9648,"src":"4186:6:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"}],"src":"4174:28:32"},"returnParameters":{"id":10033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10032,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10043,"src":"4226:7:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10031,"name":"uint256","nodeType":"ElementaryTypeName","src":"4226:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4225:9:32"},"scope":10223,"src":"4161:132:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10056,"nodeType":"Block","src":"4367:29:32","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10052,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10045,"src":"4384:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":10053,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10047,"src":"4388:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4384:5:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10051,"id":10055,"nodeType":"Return","src":"4377:12:32"}]},"id":10057,"implemented":true,"kind":"function","modifiers":[],"name":"mul_","nameLocation":"4308:4:32","nodeType":"FunctionDefinition","parameters":{"id":10048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10045,"mutability":"mutable","name":"a","nameLocation":"4321:1:32","nodeType":"VariableDeclaration","scope":10057,"src":"4313:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10044,"name":"uint256","nodeType":"ElementaryTypeName","src":"4313:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10047,"mutability":"mutable","name":"b","nameLocation":"4332:1:32","nodeType":"VariableDeclaration","scope":10057,"src":"4324:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10046,"name":"uint256","nodeType":"ElementaryTypeName","src":"4324:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4312:22:32"},"returnParameters":{"id":10051,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10050,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10057,"src":"4358:7:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10049,"name":"uint256","nodeType":"ElementaryTypeName","src":"4358:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4357:9:32"},"scope":10223,"src":"4299:97:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10081,"nodeType":"Block","src":"4479:88:32","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":10072,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10060,"src":"4522:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"id":10073,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4524:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9644,"src":"4522:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10074,"name":"EXP_SCALE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9651,"src":"4534:9:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10071,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":10057,"src":"4517:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":10075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4517:27:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":10076,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10063,"src":"4546:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"id":10077,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4548:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9644,"src":"4546:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10070,"name":"div_","nodeType":"Identifier","overloadedDeclarations":[10082,10102,10122,10147,10167,10187,10201],"referencedDeclaration":10201,"src":"4512:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":10078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4512:45:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10069,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"4496:3:32","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":10079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["4502:8:32"],"names":["mantissa"],"nodeType":"FunctionCall","src":"4496:64:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"functionReturnParameters":10068,"id":10080,"nodeType":"Return","src":"4489:71:32"}]},"id":10082,"implemented":true,"kind":"function","modifiers":[],"name":"div_","nameLocation":"4411:4:32","nodeType":"FunctionDefinition","parameters":{"id":10064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10060,"mutability":"mutable","name":"a","nameLocation":"4427:1:32","nodeType":"VariableDeclaration","scope":10082,"src":"4416:12:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":10059,"nodeType":"UserDefinedTypeName","pathNode":{"id":10058,"name":"Exp","nameLocations":["4416:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"4416:3:32"},"referencedDeclaration":9645,"src":"4416:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"},{"constant":false,"id":10063,"mutability":"mutable","name":"b","nameLocation":"4441:1:32","nodeType":"VariableDeclaration","scope":10082,"src":"4430:12:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":10062,"nodeType":"UserDefinedTypeName","pathNode":{"id":10061,"name":"Exp","nameLocations":["4430:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"4430:3:32"},"referencedDeclaration":9645,"src":"4430:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"4415:28:32"},"returnParameters":{"id":10068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10067,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10082,"src":"4467:10:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":10066,"nodeType":"UserDefinedTypeName","pathNode":{"id":10065,"name":"Exp","nameLocations":["4467:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"4467:3:32"},"referencedDeclaration":9645,"src":"4467:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"4466:12:32"},"scope":10223,"src":"4402:165:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10101,"nodeType":"Block","src":"4647:62:32","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":10095,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10085,"src":"4685:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"id":10096,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4687:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9644,"src":"4685:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10097,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10087,"src":"4697:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10094,"name":"div_","nodeType":"Identifier","overloadedDeclarations":[10082,10102,10122,10147,10167,10187,10201],"referencedDeclaration":10201,"src":"4680:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":10098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4680:19:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10093,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"4664:3:32","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":10099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["4670:8:32"],"names":["mantissa"],"nodeType":"FunctionCall","src":"4664:38:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"functionReturnParameters":10092,"id":10100,"nodeType":"Return","src":"4657:45:32"}]},"id":10102,"implemented":true,"kind":"function","modifiers":[],"name":"div_","nameLocation":"4582:4:32","nodeType":"FunctionDefinition","parameters":{"id":10088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10085,"mutability":"mutable","name":"a","nameLocation":"4598:1:32","nodeType":"VariableDeclaration","scope":10102,"src":"4587:12:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":10084,"nodeType":"UserDefinedTypeName","pathNode":{"id":10083,"name":"Exp","nameLocations":["4587:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"4587:3:32"},"referencedDeclaration":9645,"src":"4587:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"},{"constant":false,"id":10087,"mutability":"mutable","name":"b","nameLocation":"4609:1:32","nodeType":"VariableDeclaration","scope":10102,"src":"4601:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10086,"name":"uint256","nodeType":"ElementaryTypeName","src":"4601:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4586:25:32"},"returnParameters":{"id":10092,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10091,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10102,"src":"4635:10:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":10090,"nodeType":"UserDefinedTypeName","pathNode":{"id":10089,"name":"Exp","nameLocations":["4635:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"4635:3:32"},"referencedDeclaration":9645,"src":"4635:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"4634:12:32"},"scope":10223,"src":"4573:136:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10121,"nodeType":"Block","src":"4786:60:32","statements":[{"expression":{"arguments":[{"arguments":[{"id":10114,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10104,"src":"4813:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10115,"name":"EXP_SCALE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9651,"src":"4816:9:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10113,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":10057,"src":"4808:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":10116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4808:18:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":10117,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10107,"src":"4828:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"id":10118,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4830:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9644,"src":"4828:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10112,"name":"div_","nodeType":"Identifier","overloadedDeclarations":[10082,10102,10122,10147,10167,10187,10201],"referencedDeclaration":10201,"src":"4803:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":10119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4803:36:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10111,"id":10120,"nodeType":"Return","src":"4796:43:32"}]},"id":10122,"implemented":true,"kind":"function","modifiers":[],"name":"div_","nameLocation":"4724:4:32","nodeType":"FunctionDefinition","parameters":{"id":10108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10104,"mutability":"mutable","name":"a","nameLocation":"4737:1:32","nodeType":"VariableDeclaration","scope":10122,"src":"4729:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10103,"name":"uint256","nodeType":"ElementaryTypeName","src":"4729:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10107,"mutability":"mutable","name":"b","nameLocation":"4751:1:32","nodeType":"VariableDeclaration","scope":10122,"src":"4740:12:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":10106,"nodeType":"UserDefinedTypeName","pathNode":{"id":10105,"name":"Exp","nameLocations":["4740:3:32"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"4740:3:32"},"referencedDeclaration":9645,"src":"4740:3:32","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"4728:25:32"},"returnParameters":{"id":10111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10110,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10122,"src":"4777:7:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10109,"name":"uint256","nodeType":"ElementaryTypeName","src":"4777:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4776:9:32"},"scope":10223,"src":"4715:131:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10146,"nodeType":"Block","src":"4938:94:32","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":10137,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10125,"src":"4984:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"id":10138,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4986:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9647,"src":"4984:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10139,"name":"DOUBLE_SCALE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9654,"src":"4996:12:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10136,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":10057,"src":"4979:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":10140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4979:30:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":10141,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10128,"src":"5011:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"id":10142,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5013:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9647,"src":"5011:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10135,"name":"div_","nodeType":"Identifier","overloadedDeclarations":[10082,10102,10122,10147,10167,10187,10201],"referencedDeclaration":10201,"src":"4974:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":10143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4974:48:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10134,"name":"Double","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9648,"src":"4955:6:32","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Double_$9648_storage_ptr_$","typeString":"type(struct ExponentialNoError.Double storage pointer)"}},"id":10144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["4964:8:32"],"names":["mantissa"],"nodeType":"FunctionCall","src":"4955:70:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"functionReturnParameters":10133,"id":10145,"nodeType":"Return","src":"4948:77:32"}]},"id":10147,"implemented":true,"kind":"function","modifiers":[],"name":"div_","nameLocation":"4861:4:32","nodeType":"FunctionDefinition","parameters":{"id":10129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10125,"mutability":"mutable","name":"a","nameLocation":"4880:1:32","nodeType":"VariableDeclaration","scope":10147,"src":"4866:15:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":10124,"nodeType":"UserDefinedTypeName","pathNode":{"id":10123,"name":"Double","nameLocations":["4866:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"4866:6:32"},"referencedDeclaration":9648,"src":"4866:6:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"},{"constant":false,"id":10128,"mutability":"mutable","name":"b","nameLocation":"4897:1:32","nodeType":"VariableDeclaration","scope":10147,"src":"4883:15:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":10127,"nodeType":"UserDefinedTypeName","pathNode":{"id":10126,"name":"Double","nameLocations":["4883:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"4883:6:32"},"referencedDeclaration":9648,"src":"4883:6:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"}],"src":"4865:34:32"},"returnParameters":{"id":10133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10132,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10147,"src":"4923:13:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":10131,"nodeType":"UserDefinedTypeName","pathNode":{"id":10130,"name":"Double","nameLocations":["4923:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"4923:6:32"},"referencedDeclaration":9648,"src":"4923:6:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"}],"src":"4922:15:32"},"scope":10223,"src":"4852:180:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10166,"nodeType":"Block","src":"5118:65:32","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":10160,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10150,"src":"5159:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"id":10161,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5161:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9647,"src":"5159:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10162,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10152,"src":"5171:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10159,"name":"div_","nodeType":"Identifier","overloadedDeclarations":[10082,10102,10122,10147,10167,10187,10201],"referencedDeclaration":10201,"src":"5154:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":10163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5154:19:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10158,"name":"Double","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9648,"src":"5135:6:32","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Double_$9648_storage_ptr_$","typeString":"type(struct ExponentialNoError.Double storage pointer)"}},"id":10164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["5144:8:32"],"names":["mantissa"],"nodeType":"FunctionCall","src":"5135:41:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"functionReturnParameters":10157,"id":10165,"nodeType":"Return","src":"5128:48:32"}]},"id":10167,"implemented":true,"kind":"function","modifiers":[],"name":"div_","nameLocation":"5047:4:32","nodeType":"FunctionDefinition","parameters":{"id":10153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10150,"mutability":"mutable","name":"a","nameLocation":"5066:1:32","nodeType":"VariableDeclaration","scope":10167,"src":"5052:15:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":10149,"nodeType":"UserDefinedTypeName","pathNode":{"id":10148,"name":"Double","nameLocations":["5052:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"5052:6:32"},"referencedDeclaration":9648,"src":"5052:6:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"},{"constant":false,"id":10152,"mutability":"mutable","name":"b","nameLocation":"5077:1:32","nodeType":"VariableDeclaration","scope":10167,"src":"5069:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10151,"name":"uint256","nodeType":"ElementaryTypeName","src":"5069:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5051:28:32"},"returnParameters":{"id":10157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10156,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10167,"src":"5103:13:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":10155,"nodeType":"UserDefinedTypeName","pathNode":{"id":10154,"name":"Double","nameLocations":["5103:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"5103:6:32"},"referencedDeclaration":9648,"src":"5103:6:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"}],"src":"5102:15:32"},"scope":10223,"src":"5038:145:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10186,"nodeType":"Block","src":"5263:63:32","statements":[{"expression":{"arguments":[{"arguments":[{"id":10179,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10169,"src":"5290:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10180,"name":"DOUBLE_SCALE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9654,"src":"5293:12:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10178,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":10057,"src":"5285:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":10181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5285:21:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":10182,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10172,"src":"5308:1:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"id":10183,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5310:8:32","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9647,"src":"5308:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10177,"name":"div_","nodeType":"Identifier","overloadedDeclarations":[10082,10102,10122,10147,10167,10187,10201],"referencedDeclaration":10201,"src":"5280:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":10184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5280:39:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10176,"id":10185,"nodeType":"Return","src":"5273:46:32"}]},"id":10187,"implemented":true,"kind":"function","modifiers":[],"name":"div_","nameLocation":"5198:4:32","nodeType":"FunctionDefinition","parameters":{"id":10173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10169,"mutability":"mutable","name":"a","nameLocation":"5211:1:32","nodeType":"VariableDeclaration","scope":10187,"src":"5203:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10168,"name":"uint256","nodeType":"ElementaryTypeName","src":"5203:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10172,"mutability":"mutable","name":"b","nameLocation":"5228:1:32","nodeType":"VariableDeclaration","scope":10187,"src":"5214:15:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":10171,"nodeType":"UserDefinedTypeName","pathNode":{"id":10170,"name":"Double","nameLocations":["5214:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"5214:6:32"},"referencedDeclaration":9648,"src":"5214:6:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"}],"src":"5202:28:32"},"returnParameters":{"id":10176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10175,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10187,"src":"5254:7:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10174,"name":"uint256","nodeType":"ElementaryTypeName","src":"5254:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5253:9:32"},"scope":10223,"src":"5189:137:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10200,"nodeType":"Block","src":"5400:29:32","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10196,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10189,"src":"5417:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":10197,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10191,"src":"5421:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5417:5:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10195,"id":10199,"nodeType":"Return","src":"5410:12:32"}]},"id":10201,"implemented":true,"kind":"function","modifiers":[],"name":"div_","nameLocation":"5341:4:32","nodeType":"FunctionDefinition","parameters":{"id":10192,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10189,"mutability":"mutable","name":"a","nameLocation":"5354:1:32","nodeType":"VariableDeclaration","scope":10201,"src":"5346:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10188,"name":"uint256","nodeType":"ElementaryTypeName","src":"5346:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10191,"mutability":"mutable","name":"b","nameLocation":"5365:1:32","nodeType":"VariableDeclaration","scope":10201,"src":"5357:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10190,"name":"uint256","nodeType":"ElementaryTypeName","src":"5357:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5345:22:32"},"returnParameters":{"id":10195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10194,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10201,"src":"5391:7:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10193,"name":"uint256","nodeType":"ElementaryTypeName","src":"5391:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5390:9:32"},"scope":10223,"src":"5332:97:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10221,"nodeType":"Block","src":"5513:76:32","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":10214,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10203,"src":"5559:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10215,"name":"DOUBLE_SCALE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9654,"src":"5562:12:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10213,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":10057,"src":"5554:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":10216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5554:21:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10217,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10205,"src":"5577:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10212,"name":"div_","nodeType":"Identifier","overloadedDeclarations":[10082,10102,10122,10147,10167,10187,10201],"referencedDeclaration":10201,"src":"5549:4:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":10218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5549:30:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10211,"name":"Double","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9648,"src":"5530:6:32","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Double_$9648_storage_ptr_$","typeString":"type(struct ExponentialNoError.Double storage pointer)"}},"id":10219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["5539:8:32"],"names":["mantissa"],"nodeType":"FunctionCall","src":"5530:52:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"functionReturnParameters":10210,"id":10220,"nodeType":"Return","src":"5523:59:32"}]},"id":10222,"implemented":true,"kind":"function","modifiers":[],"name":"fraction","nameLocation":"5444:8:32","nodeType":"FunctionDefinition","parameters":{"id":10206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10203,"mutability":"mutable","name":"a","nameLocation":"5461:1:32","nodeType":"VariableDeclaration","scope":10222,"src":"5453:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10202,"name":"uint256","nodeType":"ElementaryTypeName","src":"5453:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10205,"mutability":"mutable","name":"b","nameLocation":"5472:1:32","nodeType":"VariableDeclaration","scope":10222,"src":"5464:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10204,"name":"uint256","nodeType":"ElementaryTypeName","src":"5464:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5452:22:32"},"returnParameters":{"id":10210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10209,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10222,"src":"5498:13:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":10208,"nodeType":"UserDefinedTypeName","pathNode":{"id":10207,"name":"Double","nameLocations":["5498:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"5498:6:32"},"referencedDeclaration":9648,"src":"5498:6:32","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"}],"src":"5497:15:32"},"scope":10223,"src":"5435:154:32","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":10224,"src":"486:5105:32","usedErrors":[],"usedEvents":[]}],"src":"41:5551:32"},"id":32},"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol":{"ast":{"absolutePath":"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol","exportedSymbols":{"InterestRateModel":[10266]},"id":10267,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":10225,"literals":["solidity","0.8",".25"],"nodeType":"PragmaDirective","src":"41:23:33"},{"abstract":true,"baseContracts":[],"canonicalName":"InterestRateModel","contractDependencies":[],"contractKind":"contract","documentation":{"id":10226,"nodeType":"StructuredDocumentation","src":"66:76:33","text":" @title Compound's InterestRateModel Interface\n @author Compound"},"fullyImplemented":false,"id":10266,"linearizedBaseContracts":[10266],"name":"InterestRateModel","nameLocation":"161:17:33","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":10227,"nodeType":"StructuredDocumentation","src":"185:463:33","text":" @notice Calculates the current borrow interest rate per slot (block or second)\n @param cash The total amount of cash the market has\n @param borrows The total amount of borrows the market has outstanding\n @param reserves The total amount of reserves the market has\n @param badDebt The amount of badDebt in the market\n @return The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)"},"functionSelector":"073b8a74","id":10240,"implemented":false,"kind":"function","modifiers":[],"name":"getBorrowRate","nameLocation":"662:13:33","nodeType":"FunctionDefinition","parameters":{"id":10236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10229,"mutability":"mutable","name":"cash","nameLocation":"693:4:33","nodeType":"VariableDeclaration","scope":10240,"src":"685:12:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10228,"name":"uint256","nodeType":"ElementaryTypeName","src":"685:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10231,"mutability":"mutable","name":"borrows","nameLocation":"715:7:33","nodeType":"VariableDeclaration","scope":10240,"src":"707:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10230,"name":"uint256","nodeType":"ElementaryTypeName","src":"707:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10233,"mutability":"mutable","name":"reserves","nameLocation":"740:8:33","nodeType":"VariableDeclaration","scope":10240,"src":"732:16:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10232,"name":"uint256","nodeType":"ElementaryTypeName","src":"732:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10235,"mutability":"mutable","name":"badDebt","nameLocation":"766:7:33","nodeType":"VariableDeclaration","scope":10240,"src":"758:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10234,"name":"uint256","nodeType":"ElementaryTypeName","src":"758:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"675:104:33"},"returnParameters":{"id":10239,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10238,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10240,"src":"811:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10237,"name":"uint256","nodeType":"ElementaryTypeName","src":"811:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"810:9:33"},"scope":10266,"src":"653:167:33","stateMutability":"view","virtual":true,"visibility":"external"},{"documentation":{"id":10241,"nodeType":"StructuredDocumentation","src":"826:541:33","text":" @notice Calculates the current supply interest rate per slot (block or second)\n @param cash The total amount of cash the market has\n @param borrows The total amount of borrows the market has outstanding\n @param reserves The total amount of reserves the market has\n @param reserveFactorMantissa The current reserve factor the market has\n @param badDebt The amount of badDebt in the market\n @return The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)"},"functionSelector":"0cde8d1c","id":10256,"implemented":false,"kind":"function","modifiers":[],"name":"getSupplyRate","nameLocation":"1381:13:33","nodeType":"FunctionDefinition","parameters":{"id":10252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10243,"mutability":"mutable","name":"cash","nameLocation":"1412:4:33","nodeType":"VariableDeclaration","scope":10256,"src":"1404:12:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10242,"name":"uint256","nodeType":"ElementaryTypeName","src":"1404:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10245,"mutability":"mutable","name":"borrows","nameLocation":"1434:7:33","nodeType":"VariableDeclaration","scope":10256,"src":"1426:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10244,"name":"uint256","nodeType":"ElementaryTypeName","src":"1426:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10247,"mutability":"mutable","name":"reserves","nameLocation":"1459:8:33","nodeType":"VariableDeclaration","scope":10256,"src":"1451:16:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10246,"name":"uint256","nodeType":"ElementaryTypeName","src":"1451:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10249,"mutability":"mutable","name":"reserveFactorMantissa","nameLocation":"1485:21:33","nodeType":"VariableDeclaration","scope":10256,"src":"1477:29:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10248,"name":"uint256","nodeType":"ElementaryTypeName","src":"1477:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10251,"mutability":"mutable","name":"badDebt","nameLocation":"1524:7:33","nodeType":"VariableDeclaration","scope":10256,"src":"1516:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10250,"name":"uint256","nodeType":"ElementaryTypeName","src":"1516:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1394:143:33"},"returnParameters":{"id":10255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10254,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10256,"src":"1569:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10253,"name":"uint256","nodeType":"ElementaryTypeName","src":"1569:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1568:9:33"},"scope":10266,"src":"1372:206:33","stateMutability":"view","virtual":true,"visibility":"external"},{"body":{"id":10264,"nodeType":"Block","src":"1780:28:33","statements":[{"expression":{"hexValue":"74727565","id":10262,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1797:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10261,"id":10263,"nodeType":"Return","src":"1790:11:33"}]},"documentation":{"id":10257,"nodeType":"StructuredDocumentation","src":"1584:123:33","text":" @notice Indicator that this is an InterestRateModel contract (for inspection)\n @return Always true"},"functionSelector":"2191f92a","id":10265,"implemented":true,"kind":"function","modifiers":[],"name":"isInterestRateModel","nameLocation":"1721:19:33","nodeType":"FunctionDefinition","parameters":{"id":10258,"nodeType":"ParameterList","parameters":[],"src":"1740:2:33"},"returnParameters":{"id":10261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10260,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10265,"src":"1774:4:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10259,"name":"bool","nodeType":"ElementaryTypeName","src":"1774:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1773:6:33"},"scope":10266,"src":"1712:96:33","stateMutability":"pure","virtual":true,"visibility":"external"}],"scope":10267,"src":"143:1667:33","usedErrors":[],"usedEvents":[]}],"src":"41:1770:33"},"id":33},"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol":{"ast":{"absolutePath":"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol","exportedSymbols":{"MaxLoopsLimitHelper":[10335]},"id":10336,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":10268,"literals":["solidity","0.8",".25"],"nodeType":"PragmaDirective","src":"41:23:34"},{"abstract":true,"baseContracts":[],"canonicalName":"MaxLoopsLimitHelper","contractDependencies":[],"contractKind":"contract","documentation":{"id":10269,"nodeType":"StructuredDocumentation","src":"66:168:34","text":" @title MaxLoopsLimitHelper\n @author Venus\n @notice Abstract contract used to avoid collection with too many items that would generate gas errors and DoS."},"fullyImplemented":true,"id":10335,"linearizedBaseContracts":[10335],"name":"MaxLoopsLimitHelper","nameLocation":"253:19:34","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"be26317e","id":10271,"mutability":"mutable","name":"maxLoopsLimit","nameLocation":"338:13:34","nodeType":"VariableDeclaration","scope":10335,"src":"323:28:34","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10270,"name":"uint256","nodeType":"ElementaryTypeName","src":"323:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":10272,"nodeType":"StructuredDocumentation","src":"358:254:34","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":10276,"mutability":"mutable","name":"__gap","nameLocation":"637:5:34","nodeType":"VariableDeclaration","scope":10335,"src":"617:25:34","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage","typeString":"uint256[49]"},"typeName":{"baseType":{"id":10273,"name":"uint256","nodeType":"ElementaryTypeName","src":"617:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10275,"length":{"hexValue":"3439","id":10274,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"625:2:34","typeDescriptions":{"typeIdentifier":"t_rational_49_by_1","typeString":"int_const 49"},"value":"49"},"nodeType":"ArrayTypeName","src":"617:11:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage_ptr","typeString":"uint256[49]"}},"visibility":"private"},{"anonymous":false,"documentation":{"id":10277,"nodeType":"StructuredDocumentation","src":"649:47:34","text":"@notice Emitted when max loops limit is set"},"eventSelector":"c2d09fef144f7c8a86f71ea459f8fc17f675768eb1ae369cbd77fb31d467aafa","id":10283,"name":"MaxLoopsLimitUpdated","nameLocation":"707:20:34","nodeType":"EventDefinition","parameters":{"id":10282,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10279,"indexed":false,"mutability":"mutable","name":"oldMaxLoopsLimit","nameLocation":"736:16:34","nodeType":"VariableDeclaration","scope":10283,"src":"728:24:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10278,"name":"uint256","nodeType":"ElementaryTypeName","src":"728:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10281,"indexed":false,"mutability":"mutable","name":"newmaxLoopsLimit","nameLocation":"762:16:34","nodeType":"VariableDeclaration","scope":10283,"src":"754:24:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10280,"name":"uint256","nodeType":"ElementaryTypeName","src":"754:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"727:52:34"},"src":"701:79:34"},{"documentation":{"id":10284,"nodeType":"StructuredDocumentation","src":"786:65:34","text":"@notice Thrown an error on maxLoopsLimit exceeds for any loop"},"errorSelector":"f257f636","id":10290,"name":"MaxLoopsLimitExceeded","nameLocation":"862:21:34","nodeType":"ErrorDefinition","parameters":{"id":10289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10286,"mutability":"mutable","name":"loopsLimit","nameLocation":"892:10:34","nodeType":"VariableDeclaration","scope":10290,"src":"884:18:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10285,"name":"uint256","nodeType":"ElementaryTypeName","src":"884:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10288,"mutability":"mutable","name":"requiredLoops","nameLocation":"912:13:34","nodeType":"VariableDeclaration","scope":10290,"src":"904:21:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10287,"name":"uint256","nodeType":"ElementaryTypeName","src":"904:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"883:43:34"},"src":"856:71:34"},{"body":{"id":10316,"nodeType":"Block","src":"1138:228:34","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10297,"name":"limit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"1156:5:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":10298,"name":"maxLoopsLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10271,"src":"1164:13:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1156:21:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d6974","id":10300,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1179:36:34","typeDescriptions":{"typeIdentifier":"t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032","typeString":"literal_string \"Comptroller: Invalid maxLoopsLimit\""},"value":"Comptroller: Invalid maxLoopsLimit"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032","typeString":"literal_string \"Comptroller: Invalid maxLoopsLimit\""}],"id":10296,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1148:7:34","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1148:68:34","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10302,"nodeType":"ExpressionStatement","src":"1148:68:34"},{"assignments":[10304],"declarations":[{"constant":false,"id":10304,"mutability":"mutable","name":"oldMaxLoopsLimit","nameLocation":"1235:16:34","nodeType":"VariableDeclaration","scope":10316,"src":"1227:24:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10303,"name":"uint256","nodeType":"ElementaryTypeName","src":"1227:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10306,"initialValue":{"id":10305,"name":"maxLoopsLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10271,"src":"1254:13:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1227:40:34"},{"expression":{"id":10309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10307,"name":"maxLoopsLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10271,"src":"1277:13:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10308,"name":"limit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"1293:5:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1277:21:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10310,"nodeType":"ExpressionStatement","src":"1277:21:34"},{"eventCall":{"arguments":[{"id":10312,"name":"oldMaxLoopsLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10304,"src":"1335:16:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10313,"name":"limit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"1353:5:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10311,"name":"MaxLoopsLimitUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10283,"src":"1314:20:34","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":10314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1314:45:34","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10315,"nodeType":"EmitStatement","src":"1309:50:34"}]},"documentation":{"id":10291,"nodeType":"StructuredDocumentation","src":"933:149:34","text":" @notice Set the limit for the loops can iterate to avoid the DOS\n @param limit Limit for the max loops can execute at a time"},"id":10317,"implemented":true,"kind":"function","modifiers":[],"name":"_setMaxLoopsLimit","nameLocation":"1096:17:34","nodeType":"FunctionDefinition","parameters":{"id":10294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10293,"mutability":"mutable","name":"limit","nameLocation":"1122:5:34","nodeType":"VariableDeclaration","scope":10317,"src":"1114:13:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10292,"name":"uint256","nodeType":"ElementaryTypeName","src":"1114:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1113:15:34"},"returnParameters":{"id":10295,"nodeType":"ParameterList","parameters":[],"src":"1138:0:34"},"scope":10335,"src":"1087:279:34","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10333,"nodeType":"Block","src":"1664:114:34","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10323,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10320,"src":"1678:3:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":10324,"name":"maxLoopsLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10271,"src":"1684:13:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1678:19:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10332,"nodeType":"IfStatement","src":"1674:98:34","trueBody":{"id":10331,"nodeType":"Block","src":"1699:73:34","statements":[{"errorCall":{"arguments":[{"id":10327,"name":"maxLoopsLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10271,"src":"1742:13:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10328,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10320,"src":"1757:3:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10326,"name":"MaxLoopsLimitExceeded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10290,"src":"1720:21:34","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":10329,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1720:41:34","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10330,"nodeType":"RevertStatement","src":"1713:48:34"}]}}]},"documentation":{"id":10318,"nodeType":"StructuredDocumentation","src":"1372:235:34","text":" @notice Compare the maxLoopsLimit with number of the times loop iterate\n @param len Length of the loops iterate\n @custom:error MaxLoopsLimitExceeded error is thrown when loops length exceeds maxLoopsLimit"},"id":10334,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureMaxLoops","nameLocation":"1621:15:34","nodeType":"FunctionDefinition","parameters":{"id":10321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10320,"mutability":"mutable","name":"len","nameLocation":"1645:3:34","nodeType":"VariableDeclaration","scope":10334,"src":"1637:11:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10319,"name":"uint256","nodeType":"ElementaryTypeName","src":"1637:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1636:13:34"},"returnParameters":{"id":10322,"nodeType":"ParameterList","parameters":[],"src":"1664:0:34"},"scope":10335,"src":"1612:166:34","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":10336,"src":"235:1545:34","usedErrors":[10290],"usedEvents":[10283]}],"src":"41:1740:34"},"id":34},"@venusprotocol/isolated-pools/contracts/Pool/PoolRegistryInterface.sol":{"ast":{"absolutePath":"@venusprotocol/isolated-pools/contracts/Pool/PoolRegistryInterface.sol","exportedSymbols":{"PoolRegistryInterface":[10404]},"id":10405,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":10337,"literals":["solidity","^","0.8",".25"],"nodeType":"PragmaDirective","src":"41:24:35"},{"abstract":false,"baseContracts":[],"canonicalName":"PoolRegistryInterface","contractDependencies":[],"contractKind":"interface","documentation":{"id":10338,"nodeType":"StructuredDocumentation","src":"67:108:35","text":" @title PoolRegistryInterface\n @author Venus\n @notice Interface implemented by `PoolRegistry`."},"fullyImplemented":false,"id":10404,"linearizedBaseContracts":[10404],"name":"PoolRegistryInterface","nameLocation":"186:21:35","nodeType":"ContractDefinition","nodes":[{"canonicalName":"PoolRegistryInterface.VenusPool","documentation":{"id":10339,"nodeType":"StructuredDocumentation","src":"214:65:35","text":" @notice Struct for a Venus interest rate pool."},"id":10350,"members":[{"constant":false,"id":10341,"mutability":"mutable","name":"name","nameLocation":"318:4:35","nodeType":"VariableDeclaration","scope":10350,"src":"311:11:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":10340,"name":"string","nodeType":"ElementaryTypeName","src":"311:6:35","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":10343,"mutability":"mutable","name":"creator","nameLocation":"340:7:35","nodeType":"VariableDeclaration","scope":10350,"src":"332:15:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10342,"name":"address","nodeType":"ElementaryTypeName","src":"332:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10345,"mutability":"mutable","name":"comptroller","nameLocation":"365:11:35","nodeType":"VariableDeclaration","scope":10350,"src":"357:19:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10344,"name":"address","nodeType":"ElementaryTypeName","src":"357:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10347,"mutability":"mutable","name":"blockPosted","nameLocation":"394:11:35","nodeType":"VariableDeclaration","scope":10350,"src":"386:19:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10346,"name":"uint256","nodeType":"ElementaryTypeName","src":"386:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10349,"mutability":"mutable","name":"timestampPosted","nameLocation":"423:15:35","nodeType":"VariableDeclaration","scope":10350,"src":"415:23:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10348,"name":"uint256","nodeType":"ElementaryTypeName","src":"415:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"VenusPool","nameLocation":"291:9:35","nodeType":"StructDefinition","scope":10404,"src":"284:161:35","visibility":"public"},{"canonicalName":"PoolRegistryInterface.VenusPoolMetaData","documentation":{"id":10351,"nodeType":"StructuredDocumentation","src":"451:74:35","text":" @notice Struct for a Venus interest rate pool metadata."},"id":10358,"members":[{"constant":false,"id":10353,"mutability":"mutable","name":"category","nameLocation":"572:8:35","nodeType":"VariableDeclaration","scope":10358,"src":"565:15:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":10352,"name":"string","nodeType":"ElementaryTypeName","src":"565:6:35","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":10355,"mutability":"mutable","name":"logoURL","nameLocation":"597:7:35","nodeType":"VariableDeclaration","scope":10358,"src":"590:14:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":10354,"name":"string","nodeType":"ElementaryTypeName","src":"590:6:35","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":10357,"mutability":"mutable","name":"description","nameLocation":"621:11:35","nodeType":"VariableDeclaration","scope":10358,"src":"614:18:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":10356,"name":"string","nodeType":"ElementaryTypeName","src":"614:6:35","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"name":"VenusPoolMetaData","nameLocation":"537:17:35","nodeType":"StructDefinition","scope":10404,"src":"530:109:35","visibility":"public"},{"documentation":{"id":10359,"nodeType":"StructuredDocumentation","src":"645:41:35","text":"@notice Get all pools in PoolRegistry"},"functionSelector":"d88ff1f4","id":10366,"implemented":false,"kind":"function","modifiers":[],"name":"getAllPools","nameLocation":"700:11:35","nodeType":"FunctionDefinition","parameters":{"id":10360,"nodeType":"ParameterList","parameters":[],"src":"711:2:35"},"returnParameters":{"id":10365,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10364,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10366,"src":"737:18:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_VenusPool_$10350_memory_ptr_$dyn_memory_ptr","typeString":"struct PoolRegistryInterface.VenusPool[]"},"typeName":{"baseType":{"id":10362,"nodeType":"UserDefinedTypeName","pathNode":{"id":10361,"name":"VenusPool","nameLocations":["737:9:35"],"nodeType":"IdentifierPath","referencedDeclaration":10350,"src":"737:9:35"},"referencedDeclaration":10350,"src":"737:9:35","typeDescriptions":{"typeIdentifier":"t_struct$_VenusPool_$10350_storage_ptr","typeString":"struct PoolRegistryInterface.VenusPool"}},"id":10363,"nodeType":"ArrayTypeName","src":"737:11:35","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_VenusPool_$10350_storage_$dyn_storage_ptr","typeString":"struct PoolRegistryInterface.VenusPool[]"}},"visibility":"internal"}],"src":"736:20:35"},"scope":10404,"src":"691:66:35","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10367,"nodeType":"StructuredDocumentation","src":"763:45:35","text":"@notice Get a pool by comptroller address"},"functionSelector":"7aee632d","id":10375,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolByComptroller","nameLocation":"822:20:35","nodeType":"FunctionDefinition","parameters":{"id":10370,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10369,"mutability":"mutable","name":"comptroller","nameLocation":"851:11:35","nodeType":"VariableDeclaration","scope":10375,"src":"843:19:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10368,"name":"address","nodeType":"ElementaryTypeName","src":"843:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"842:21:35"},"returnParameters":{"id":10374,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10373,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10375,"src":"887:16:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VenusPool_$10350_memory_ptr","typeString":"struct PoolRegistryInterface.VenusPool"},"typeName":{"id":10372,"nodeType":"UserDefinedTypeName","pathNode":{"id":10371,"name":"VenusPool","nameLocations":["887:9:35"],"nodeType":"IdentifierPath","referencedDeclaration":10350,"src":"887:9:35"},"referencedDeclaration":10350,"src":"887:9:35","typeDescriptions":{"typeIdentifier":"t_struct$_VenusPool_$10350_storage_ptr","typeString":"struct PoolRegistryInterface.VenusPool"}},"visibility":"internal"}],"src":"886:18:35"},"scope":10404,"src":"813:92:35","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10376,"nodeType":"StructuredDocumentation","src":"911:111:35","text":"@notice Get the address of the VToken contract in the Pool where the underlying token is the provided asset"},"functionSelector":"266e0a7f","id":10385,"implemented":false,"kind":"function","modifiers":[],"name":"getVTokenForAsset","nameLocation":"1036:17:35","nodeType":"FunctionDefinition","parameters":{"id":10381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10378,"mutability":"mutable","name":"comptroller","nameLocation":"1062:11:35","nodeType":"VariableDeclaration","scope":10385,"src":"1054:19:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10377,"name":"address","nodeType":"ElementaryTypeName","src":"1054:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10380,"mutability":"mutable","name":"asset","nameLocation":"1083:5:35","nodeType":"VariableDeclaration","scope":10385,"src":"1075:13:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10379,"name":"address","nodeType":"ElementaryTypeName","src":"1075:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1053:36:35"},"returnParameters":{"id":10384,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10383,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10385,"src":"1113:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10382,"name":"address","nodeType":"ElementaryTypeName","src":"1113:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1112:9:35"},"scope":10404,"src":"1027:95:35","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10386,"nodeType":"StructuredDocumentation","src":"1128:96:35","text":"@notice Get the addresss of the Pools supported that include a market for the provided asset"},"functionSelector":"f36dba38","id":10394,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolsSupportedByAsset","nameLocation":"1238:24:35","nodeType":"FunctionDefinition","parameters":{"id":10389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10388,"mutability":"mutable","name":"asset","nameLocation":"1271:5:35","nodeType":"VariableDeclaration","scope":10394,"src":"1263:13:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10387,"name":"address","nodeType":"ElementaryTypeName","src":"1263:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1262:15:35"},"returnParameters":{"id":10393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10392,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10394,"src":"1301:16:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":10390,"name":"address","nodeType":"ElementaryTypeName","src":"1301:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10391,"nodeType":"ArrayTypeName","src":"1301:9:35","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1300:18:35"},"scope":10404,"src":"1229:90:35","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10395,"nodeType":"StructuredDocumentation","src":"1325:61:35","text":"@notice Get the metadata of a Pool by comptroller address"},"functionSelector":"a3aefa2c","id":10403,"implemented":false,"kind":"function","modifiers":[],"name":"getVenusPoolMetadata","nameLocation":"1400:20:35","nodeType":"FunctionDefinition","parameters":{"id":10398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10397,"mutability":"mutable","name":"comptroller","nameLocation":"1429:11:35","nodeType":"VariableDeclaration","scope":10403,"src":"1421:19:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10396,"name":"address","nodeType":"ElementaryTypeName","src":"1421:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1420:21:35"},"returnParameters":{"id":10402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10401,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10403,"src":"1465:24:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VenusPoolMetaData_$10358_memory_ptr","typeString":"struct PoolRegistryInterface.VenusPoolMetaData"},"typeName":{"id":10400,"nodeType":"UserDefinedTypeName","pathNode":{"id":10399,"name":"VenusPoolMetaData","nameLocations":["1465:17:35"],"nodeType":"IdentifierPath","referencedDeclaration":10358,"src":"1465:17:35"},"referencedDeclaration":10358,"src":"1465:17:35","typeDescriptions":{"typeIdentifier":"t_struct$_VenusPoolMetaData_$10358_storage_ptr","typeString":"struct PoolRegistryInterface.VenusPoolMetaData"}},"visibility":"internal"}],"src":"1464:26:35"},"scope":10404,"src":"1391:100:35","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":10405,"src":"176:1317:35","usedErrors":[],"usedEvents":[]}],"src":"41:1453:35"},"id":35},"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol":{"ast":{"absolutePath":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol","exportedSymbols":{"AccessControlledV8":[5035],"Comptroller":[9130],"ExponentialNoError":[10223],"IERC20Upgradeable":[1352],"MaxLoopsLimitHelper":[10335],"Ownable2StepUpgradeable":[106],"RewardsDistributor":[12324],"RewardsDistributorStorage":[12420],"SafeERC20Upgradeable":[2440],"TimeManagerV8":[16319],"VToken":[15506]},"id":12325,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":10406,"literals":["solidity","0.8",".25"],"nodeType":"PragmaDirective","src":"41:23:36"},{"absolutePath":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol","id":10408,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12325,"sourceUnit":107,"src":"66:113:36","symbolAliases":[{"foreign":{"id":10407,"name":"Ownable2StepUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":106,"src":"75:23:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","id":10410,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12325,"sourceUnit":1353,"src":"180:106:36","symbolAliases":[{"foreign":{"id":10409,"name":"IERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"189:17:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol","id":10412,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12325,"sourceUnit":2441,"src":"287:118:36","symbolAliases":[{"foreign":{"id":10411,"name":"SafeERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2440,"src":"296:20:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol","file":"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol","id":10414,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12325,"sourceUnit":5036,"src":"406:117:36","symbolAliases":[{"foreign":{"id":10413,"name":"AccessControlledV8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5035,"src":"415:18:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol","file":"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol","id":10416,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12325,"sourceUnit":16320,"src":"524:94:36","symbolAliases":[{"foreign":{"id":10415,"name":"TimeManagerV8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16319,"src":"533:13:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol","file":"../ExponentialNoError.sol","id":10418,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12325,"sourceUnit":10224,"src":"620:63:36","symbolAliases":[{"foreign":{"id":10417,"name":"ExponentialNoError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10223,"src":"629:18:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/VToken.sol","file":"../VToken.sol","id":10420,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12325,"sourceUnit":15507,"src":"684:39:36","symbolAliases":[{"foreign":{"id":10419,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"693:6:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/Comptroller.sol","file":"../Comptroller.sol","id":10422,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12325,"sourceUnit":9131,"src":"724:49:36","symbolAliases":[{"foreign":{"id":10421,"name":"Comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9130,"src":"733:11:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol","file":"../MaxLoopsLimitHelper.sol","id":10424,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12325,"sourceUnit":10336,"src":"774:65:36","symbolAliases":[{"foreign":{"id":10423,"name":"MaxLoopsLimitHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10335,"src":"783:19:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol","file":"./RewardsDistributorStorage.sol","id":10426,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12325,"sourceUnit":12421,"src":"840:76:36","symbolAliases":[{"foreign":{"id":10425,"name":"RewardsDistributorStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12420,"src":"849:25:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":10428,"name":"ExponentialNoError","nameLocations":["2405:18:36"],"nodeType":"IdentifierPath","referencedDeclaration":10223,"src":"2405:18:36"},"id":10429,"nodeType":"InheritanceSpecifier","src":"2405:18:36"},{"baseName":{"id":10430,"name":"Ownable2StepUpgradeable","nameLocations":["2429:23:36"],"nodeType":"IdentifierPath","referencedDeclaration":106,"src":"2429:23:36"},"id":10431,"nodeType":"InheritanceSpecifier","src":"2429:23:36"},{"baseName":{"id":10432,"name":"AccessControlledV8","nameLocations":["2458:18:36"],"nodeType":"IdentifierPath","referencedDeclaration":5035,"src":"2458:18:36"},"id":10433,"nodeType":"InheritanceSpecifier","src":"2458:18:36"},{"baseName":{"id":10434,"name":"MaxLoopsLimitHelper","nameLocations":["2482:19:36"],"nodeType":"IdentifierPath","referencedDeclaration":10335,"src":"2482:19:36"},"id":10435,"nodeType":"InheritanceSpecifier","src":"2482:19:36"},{"baseName":{"id":10436,"name":"RewardsDistributorStorage","nameLocations":["2507:25:36"],"nodeType":"IdentifierPath","referencedDeclaration":12420,"src":"2507:25:36"},"id":10437,"nodeType":"InheritanceSpecifier","src":"2507:25:36"},{"baseName":{"id":10438,"name":"TimeManagerV8","nameLocations":["2538:13:36"],"nodeType":"IdentifierPath","referencedDeclaration":16319,"src":"2538:13:36"},"id":10439,"nodeType":"InheritanceSpecifier","src":"2538:13:36"}],"canonicalName":"RewardsDistributor","contractDependencies":[],"contractKind":"contract","documentation":{"id":10427,"nodeType":"StructuredDocumentation","src":"918:1451:36","text":" @title `RewardsDistributor`\n @author Venus\n @notice Contract used to configure, track and distribute rewards to users based on their actions (borrows and supplies) in the protocol.\n Users can receive additional rewards through a `RewardsDistributor`. Each `RewardsDistributor` proxy is initialized with a specific reward\n token and `Comptroller`, which can then distribute the reward token to users that supply or borrow in the associated pool.\n Authorized users can set the reward token borrow and supply speeds for each market in the pool. This sets a fixed amount of reward\n token to be released each slot (block or second) for borrowers and suppliers, which is distributed based on a user’s percentage of the borrows or supplies\n respectively. The owner can also set up reward distributions to contributor addresses (distinct from suppliers and borrowers) by setting\n their contributor reward token speed, which similarly allocates a fixed amount of reward token per slot (block or second).\n The owner has the ability to transfer any amount of reward tokens held by the contract to any other address. Rewards are not distributed\n automatically and must be claimed by a user calling `claimRewardToken()`. Users should be aware that it is up to the owner and other centralized\n entities to ensure that the `RewardsDistributor` holds enough tokens to distribute the accumulated rewards of users and contributors."},"fullyImplemented":true,"id":12324,"internalFunctionIDs":{"16308":1,"16318":2},"linearizedBaseContracts":[12324,16319,12420,10335,5035,106,239,2821,576,10223],"name":"RewardsDistributor","nameLocation":"2379:18:36","nodeType":"ContractDefinition","nodes":[{"global":false,"id":10443,"libraryName":{"id":10440,"name":"SafeERC20Upgradeable","nameLocations":["2564:20:36"],"nodeType":"IdentifierPath","referencedDeclaration":2440,"src":"2564:20:36"},"nodeType":"UsingForDirective","src":"2558:49:36","typeName":{"id":10442,"nodeType":"UserDefinedTypeName","pathNode":{"id":10441,"name":"IERC20Upgradeable","nameLocations":["2589:17:36"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"2589:17:36"},"referencedDeclaration":1352,"src":"2589:17:36","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}}},{"constant":true,"documentation":{"id":10444,"nodeType":"StructuredDocumentation","src":"2613:55:36","text":"@notice The initial REWARD TOKEN index for a market"},"functionSelector":"160c3a03","id":10447,"mutability":"constant","name":"INITIAL_INDEX","nameLocation":"2697:13:36","nodeType":"VariableDeclaration","scope":12324,"src":"2673:44:36","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":10445,"name":"uint224","nodeType":"ElementaryTypeName","src":"2673:7:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"value":{"hexValue":"31653336","id":10446,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2713:4:36","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(29 digits omitted)...0000"},"value":"1e36"},"visibility":"public"},{"anonymous":false,"documentation":{"id":10448,"nodeType":"StructuredDocumentation","src":"2724:66:36","text":"@notice Emitted when REWARD TOKEN is distributed to a supplier"},"eventSelector":"9563ff6035b973f2e4514ad9315010c220eb74b0c33a782a18118a199a97e442","id":10461,"name":"DistributedSupplierRewardToken","nameLocation":"2801:30:36","nodeType":"EventDefinition","parameters":{"id":10460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10451,"indexed":true,"mutability":"mutable","name":"vToken","nameLocation":"2856:6:36","nodeType":"VariableDeclaration","scope":10461,"src":"2841:21:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":10450,"nodeType":"UserDefinedTypeName","pathNode":{"id":10449,"name":"VToken","nameLocations":["2841:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"2841:6:36"},"referencedDeclaration":15506,"src":"2841:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"},{"constant":false,"id":10453,"indexed":true,"mutability":"mutable","name":"supplier","nameLocation":"2888:8:36","nodeType":"VariableDeclaration","scope":10461,"src":"2872:24:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10452,"name":"address","nodeType":"ElementaryTypeName","src":"2872:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10455,"indexed":false,"mutability":"mutable","name":"rewardTokenDelta","nameLocation":"2914:16:36","nodeType":"VariableDeclaration","scope":10461,"src":"2906:24:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10454,"name":"uint256","nodeType":"ElementaryTypeName","src":"2906:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10457,"indexed":false,"mutability":"mutable","name":"rewardTokenTotal","nameLocation":"2948:16:36","nodeType":"VariableDeclaration","scope":10461,"src":"2940:24:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10456,"name":"uint256","nodeType":"ElementaryTypeName","src":"2940:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10459,"indexed":false,"mutability":"mutable","name":"rewardTokenSupplyIndex","nameLocation":"2982:22:36","nodeType":"VariableDeclaration","scope":10461,"src":"2974:30:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10458,"name":"uint256","nodeType":"ElementaryTypeName","src":"2974:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2831:179:36"},"src":"2795:216:36"},{"anonymous":false,"documentation":{"id":10462,"nodeType":"StructuredDocumentation","src":"3017:66:36","text":"@notice Emitted when REWARD TOKEN is distributed to a borrower"},"eventSelector":"510d7612da9ca257889eabdfbe0366aaea10020be46f7810f4afb2111d80aa93","id":10475,"name":"DistributedBorrowerRewardToken","nameLocation":"3094:30:36","nodeType":"EventDefinition","parameters":{"id":10474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10465,"indexed":true,"mutability":"mutable","name":"vToken","nameLocation":"3149:6:36","nodeType":"VariableDeclaration","scope":10475,"src":"3134:21:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":10464,"nodeType":"UserDefinedTypeName","pathNode":{"id":10463,"name":"VToken","nameLocations":["3134:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"3134:6:36"},"referencedDeclaration":15506,"src":"3134:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"},{"constant":false,"id":10467,"indexed":true,"mutability":"mutable","name":"borrower","nameLocation":"3181:8:36","nodeType":"VariableDeclaration","scope":10475,"src":"3165:24:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10466,"name":"address","nodeType":"ElementaryTypeName","src":"3165:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10469,"indexed":false,"mutability":"mutable","name":"rewardTokenDelta","nameLocation":"3207:16:36","nodeType":"VariableDeclaration","scope":10475,"src":"3199:24:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10468,"name":"uint256","nodeType":"ElementaryTypeName","src":"3199:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10471,"indexed":false,"mutability":"mutable","name":"rewardTokenTotal","nameLocation":"3241:16:36","nodeType":"VariableDeclaration","scope":10475,"src":"3233:24:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10470,"name":"uint256","nodeType":"ElementaryTypeName","src":"3233:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10473,"indexed":false,"mutability":"mutable","name":"rewardTokenBorrowIndex","nameLocation":"3275:22:36","nodeType":"VariableDeclaration","scope":10475,"src":"3267:30:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10472,"name":"uint256","nodeType":"ElementaryTypeName","src":"3267:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3124:179:36"},"src":"3088:216:36"},{"anonymous":false,"documentation":{"id":10476,"nodeType":"StructuredDocumentation","src":"3310:88:36","text":"@notice Emitted when a new supply-side REWARD TOKEN speed is calculated for a market"},"eventSelector":"24741480445e83baea9eb28086e16a4377ebb4f003c773e386496fd90b3ed04e","id":10483,"name":"RewardTokenSupplySpeedUpdated","nameLocation":"3409:29:36","nodeType":"EventDefinition","parameters":{"id":10482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10479,"indexed":true,"mutability":"mutable","name":"vToken","nameLocation":"3454:6:36","nodeType":"VariableDeclaration","scope":10483,"src":"3439:21:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":10478,"nodeType":"UserDefinedTypeName","pathNode":{"id":10477,"name":"VToken","nameLocations":["3439:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"3439:6:36"},"referencedDeclaration":15506,"src":"3439:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"},{"constant":false,"id":10481,"indexed":false,"mutability":"mutable","name":"newSpeed","nameLocation":"3470:8:36","nodeType":"VariableDeclaration","scope":10483,"src":"3462:16:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10480,"name":"uint256","nodeType":"ElementaryTypeName","src":"3462:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3438:41:36"},"src":"3403:77:36"},{"anonymous":false,"documentation":{"id":10484,"nodeType":"StructuredDocumentation","src":"3486:88:36","text":"@notice Emitted when a new borrow-side REWARD TOKEN speed is calculated for a market"},"eventSelector":"2091432bbf4aa40f4785b469e931d32c5f5c6ba66dcf702a99cbe776df729c3c","id":10491,"name":"RewardTokenBorrowSpeedUpdated","nameLocation":"3585:29:36","nodeType":"EventDefinition","parameters":{"id":10490,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10487,"indexed":true,"mutability":"mutable","name":"vToken","nameLocation":"3630:6:36","nodeType":"VariableDeclaration","scope":10491,"src":"3615:21:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":10486,"nodeType":"UserDefinedTypeName","pathNode":{"id":10485,"name":"VToken","nameLocations":["3615:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"3615:6:36"},"referencedDeclaration":15506,"src":"3615:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"},{"constant":false,"id":10489,"indexed":false,"mutability":"mutable","name":"newSpeed","nameLocation":"3646:8:36","nodeType":"VariableDeclaration","scope":10491,"src":"3638:16:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10488,"name":"uint256","nodeType":"ElementaryTypeName","src":"3638:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3614:41:36"},"src":"3579:77:36"},{"anonymous":false,"documentation":{"id":10492,"nodeType":"StructuredDocumentation","src":"3662:57:36","text":"@notice Emitted when REWARD TOKEN is granted by admin"},"eventSelector":"251909abf904fc80eac3f0d4c25e5c800441ea19fda63c6f0df08e4f24f926f9","id":10498,"name":"RewardTokenGranted","nameLocation":"3730:18:36","nodeType":"EventDefinition","parameters":{"id":10497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10494,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"3765:9:36","nodeType":"VariableDeclaration","scope":10498,"src":"3749:25:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10493,"name":"address","nodeType":"ElementaryTypeName","src":"3749:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10496,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"3784:6:36","nodeType":"VariableDeclaration","scope":10498,"src":"3776:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10495,"name":"uint256","nodeType":"ElementaryTypeName","src":"3776:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3748:43:36"},"src":"3724:68:36"},{"anonymous":false,"documentation":{"id":10499,"nodeType":"StructuredDocumentation","src":"3798:74:36","text":"@notice Emitted when a new REWARD TOKEN speed is set for a contributor"},"eventSelector":"4882c0217331870166b5d239c9f7be7801bab4be26560cd2f8789145d0fd3af4","id":10505,"name":"ContributorRewardTokenSpeedUpdated","nameLocation":"3883:34:36","nodeType":"EventDefinition","parameters":{"id":10504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10501,"indexed":true,"mutability":"mutable","name":"contributor","nameLocation":"3934:11:36","nodeType":"VariableDeclaration","scope":10505,"src":"3918:27:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10500,"name":"address","nodeType":"ElementaryTypeName","src":"3918:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10503,"indexed":false,"mutability":"mutable","name":"newSpeed","nameLocation":"3955:8:36","nodeType":"VariableDeclaration","scope":10505,"src":"3947:16:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10502,"name":"uint256","nodeType":"ElementaryTypeName","src":"3947:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3917:47:36"},"src":"3877:88:36"},{"anonymous":false,"documentation":{"id":10506,"nodeType":"StructuredDocumentation","src":"3971:48:36","text":"@notice Emitted when a market is initialized"},"eventSelector":"fe6944646a362be70b0925ea999b3d9f755589a63ffcd89e4fb2b0affd252c71","id":10510,"name":"MarketInitialized","nameLocation":"4030:17:36","nodeType":"EventDefinition","parameters":{"id":10509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10508,"indexed":true,"mutability":"mutable","name":"vToken","nameLocation":"4064:6:36","nodeType":"VariableDeclaration","scope":10510,"src":"4048:22:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10507,"name":"address","nodeType":"ElementaryTypeName","src":"4048:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4047:24:36"},"src":"4024:48:36"},{"anonymous":false,"documentation":{"id":10511,"nodeType":"StructuredDocumentation","src":"4078:63:36","text":"@notice Emitted when a reward token supply index is updated"},"eventSelector":"6a7b996800070d8bc0f9a3ddcb0a4b09bc1653f76381d745444956366afd423a","id":10515,"name":"RewardTokenSupplyIndexUpdated","nameLocation":"4152:29:36","nodeType":"EventDefinition","parameters":{"id":10514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10513,"indexed":true,"mutability":"mutable","name":"vToken","nameLocation":"4198:6:36","nodeType":"VariableDeclaration","scope":10515,"src":"4182:22:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10512,"name":"address","nodeType":"ElementaryTypeName","src":"4182:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4181:24:36"},"src":"4146:60:36"},{"anonymous":false,"documentation":{"id":10516,"nodeType":"StructuredDocumentation","src":"4212:63:36","text":"@notice Emitted when a reward token borrow index is updated"},"eventSelector":"bfeed4eb85c013b0e466fdfdbaa785159ff7986078247dc95f1c717a5bd6bca2","id":10523,"name":"RewardTokenBorrowIndexUpdated","nameLocation":"4286:29:36","nodeType":"EventDefinition","parameters":{"id":10522,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10518,"indexed":true,"mutability":"mutable","name":"vToken","nameLocation":"4332:6:36","nodeType":"VariableDeclaration","scope":10523,"src":"4316:22:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10517,"name":"address","nodeType":"ElementaryTypeName","src":"4316:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10521,"indexed":false,"mutability":"mutable","name":"marketBorrowIndex","nameLocation":"4344:17:36","nodeType":"VariableDeclaration","scope":10523,"src":"4340:21:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":10520,"nodeType":"UserDefinedTypeName","pathNode":{"id":10519,"name":"Exp","nameLocations":["4340:3:36"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"4340:3:36"},"referencedDeclaration":9645,"src":"4340:3:36","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"4315:47:36"},"src":"4280:83:36"},{"anonymous":false,"documentation":{"id":10524,"nodeType":"StructuredDocumentation","src":"4369:60:36","text":"@notice Emitted when a reward for contributor is updated"},"eventSelector":"38fe05baf9dc12e4e3bfda3daba26419e9930bf26ee6227f407ca46f8c9c29bc","id":10530,"name":"ContributorRewardsUpdated","nameLocation":"4440:25:36","nodeType":"EventDefinition","parameters":{"id":10529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10526,"indexed":true,"mutability":"mutable","name":"contributor","nameLocation":"4482:11:36","nodeType":"VariableDeclaration","scope":10530,"src":"4466:27:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10525,"name":"address","nodeType":"ElementaryTypeName","src":"4466:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10528,"indexed":false,"mutability":"mutable","name":"rewardAccrued","nameLocation":"4503:13:36","nodeType":"VariableDeclaration","scope":10530,"src":"4495:21:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10527,"name":"uint256","nodeType":"ElementaryTypeName","src":"4495:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4465:52:36"},"src":"4434:84:36"},{"anonymous":false,"documentation":{"id":10531,"nodeType":"StructuredDocumentation","src":"4524:82:36","text":"@notice Emitted when a reward token last rewarding block for supply is updated"},"eventSelector":"41b697bf2627e0a03f253382759baaab2469897004cc619465a3d8f4bb6b3fec","id":10537,"name":"SupplyLastRewardingBlockUpdated","nameLocation":"4617:31:36","nodeType":"EventDefinition","parameters":{"id":10536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10533,"indexed":true,"mutability":"mutable","name":"vToken","nameLocation":"4665:6:36","nodeType":"VariableDeclaration","scope":10537,"src":"4649:22:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10532,"name":"address","nodeType":"ElementaryTypeName","src":"4649:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10535,"indexed":false,"mutability":"mutable","name":"newBlock","nameLocation":"4680:8:36","nodeType":"VariableDeclaration","scope":10537,"src":"4673:15:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":10534,"name":"uint32","nodeType":"ElementaryTypeName","src":"4673:6:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"4648:41:36"},"src":"4611:79:36"},{"anonymous":false,"documentation":{"id":10538,"nodeType":"StructuredDocumentation","src":"4696:82:36","text":"@notice Emitted when a reward token last rewarding block for borrow is updated"},"eventSelector":"4163eb203170b7facecc8d7307e3f8affa8826d4df30fc722f8f8ce17988eb91","id":10544,"name":"BorrowLastRewardingBlockUpdated","nameLocation":"4789:31:36","nodeType":"EventDefinition","parameters":{"id":10543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10540,"indexed":true,"mutability":"mutable","name":"vToken","nameLocation":"4837:6:36","nodeType":"VariableDeclaration","scope":10544,"src":"4821:22:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10539,"name":"address","nodeType":"ElementaryTypeName","src":"4821:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10542,"indexed":false,"mutability":"mutable","name":"newBlock","nameLocation":"4852:8:36","nodeType":"VariableDeclaration","scope":10544,"src":"4845:15:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":10541,"name":"uint32","nodeType":"ElementaryTypeName","src":"4845:6:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"4820:41:36"},"src":"4783:79:36"},{"anonymous":false,"documentation":{"id":10545,"nodeType":"StructuredDocumentation","src":"4868:86:36","text":"@notice Emitted when a reward token last rewarding timestamp for supply is updated"},"eventSelector":"0e68f65b8654c09acfdc448a42c8a0d72697206fd0c23c357022fa1cd1626861","id":10551,"name":"SupplyLastRewardingBlockTimestampUpdated","nameLocation":"4965:40:36","nodeType":"EventDefinition","parameters":{"id":10550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10547,"indexed":true,"mutability":"mutable","name":"vToken","nameLocation":"5022:6:36","nodeType":"VariableDeclaration","scope":10551,"src":"5006:22:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10546,"name":"address","nodeType":"ElementaryTypeName","src":"5006:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10549,"indexed":false,"mutability":"mutable","name":"newTimestamp","nameLocation":"5038:12:36","nodeType":"VariableDeclaration","scope":10551,"src":"5030:20:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10548,"name":"uint256","nodeType":"ElementaryTypeName","src":"5030:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5005:46:36"},"src":"4959:93:36"},{"anonymous":false,"documentation":{"id":10552,"nodeType":"StructuredDocumentation","src":"5058:86:36","text":"@notice Emitted when a reward token last rewarding timestamp for borrow is updated"},"eventSelector":"7aefe759bc95e5c94c6d919eef378c410527d0d85f409986ec8d54a99ea8395e","id":10558,"name":"BorrowLastRewardingBlockTimestampUpdated","nameLocation":"5155:40:36","nodeType":"EventDefinition","parameters":{"id":10557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10554,"indexed":true,"mutability":"mutable","name":"vToken","nameLocation":"5212:6:36","nodeType":"VariableDeclaration","scope":10558,"src":"5196:22:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10553,"name":"address","nodeType":"ElementaryTypeName","src":"5196:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10556,"indexed":false,"mutability":"mutable","name":"newTimestamp","nameLocation":"5228:12:36","nodeType":"VariableDeclaration","scope":10558,"src":"5220:20:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10555,"name":"uint256","nodeType":"ElementaryTypeName","src":"5220:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5195:46:36"},"src":"5149:93:36"},{"body":{"id":10572,"nodeType":"Block","src":"5275:114:36","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":10563,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12399,"src":"5301:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_Comptroller_$9130","typeString":"contract Comptroller"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Comptroller_$9130","typeString":"contract Comptroller"}],"id":10562,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5293:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10561,"name":"address","nodeType":"ElementaryTypeName","src":"5293:7:36","typeDescriptions":{}}},"id":10564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5293:20:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":10565,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5317:3:36","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":10566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5321:6:36","memberName":"sender","nodeType":"MemberAccess","src":"5317:10:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5293:34:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f6e6c7920636f6d7074726f6c6c65722063616e2063616c6c20746869732066756e6374696f6e","id":10568,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5329:41:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_8ae9d8b8cfc154970c71fdcc07f9eca5337f7fb885232e7023c4ffdc94dd950d","typeString":"literal_string \"Only comptroller can call this function\""},"value":"Only comptroller can call this function"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8ae9d8b8cfc154970c71fdcc07f9eca5337f7fb885232e7023c4ffdc94dd950d","typeString":"literal_string \"Only comptroller can call this function\""}],"id":10560,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5285:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5285:86:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10570,"nodeType":"ExpressionStatement","src":"5285:86:36"},{"id":10571,"nodeType":"PlaceholderStatement","src":"5381:1:36"}]},"id":10573,"name":"onlyComptroller","nameLocation":"5257:15:36","nodeType":"ModifierDefinition","parameters":{"id":10559,"nodeType":"ParameterList","parameters":[],"src":"5272:2:36"},"src":"5248:141:36","virtual":false,"visibility":"internal"},{"body":{"id":10588,"nodeType":"Block","src":"5711:163:36","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":10585,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":557,"src":"5845:20:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":10586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5845:22:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10587,"nodeType":"ExpressionStatement","src":"5845:22:36"}]},"documentation":{"id":10574,"nodeType":"StructuredDocumentation","src":"5395:216:36","text":" @param timeBased_ A boolean indicating whether the contract is based on time or block.\n @param blocksPerYear_ The number of blocks per year\n @custom:oz-upgrades-unsafe-allow constructor"},"id":10589,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":10581,"name":"timeBased_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"5683:10:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":10582,"name":"blocksPerYear_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10578,"src":"5695:14:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10583,"kind":"baseConstructorSpecifier","modifierName":{"id":10580,"name":"TimeManagerV8","nameLocations":["5669:13:36"],"nodeType":"IdentifierPath","referencedDeclaration":16319,"src":"5669:13:36"},"nodeType":"ModifierInvocation","src":"5669:41:36"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":10579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10576,"mutability":"mutable","name":"timeBased_","nameLocation":"5633:10:36","nodeType":"VariableDeclaration","scope":10589,"src":"5628:15:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10575,"name":"bool","nodeType":"ElementaryTypeName","src":"5628:4:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":10578,"mutability":"mutable","name":"blocksPerYear_","nameLocation":"5653:14:36","nodeType":"VariableDeclaration","scope":10589,"src":"5645:22:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10577,"name":"uint256","nodeType":"ElementaryTypeName","src":"5645:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5627:41:36"},"returnParameters":{"id":10584,"nodeType":"ParameterList","parameters":[],"src":"5711:0:36"},"scope":12324,"src":"5616:258:36","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":10624,"nodeType":"Block","src":"6466:217:36","statements":[{"expression":{"id":10607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10605,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12399,"src":"6476:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_Comptroller_$9130","typeString":"contract Comptroller"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10606,"name":"comptroller_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10593,"src":"6490:12:36","typeDescriptions":{"typeIdentifier":"t_contract$_Comptroller_$9130","typeString":"contract Comptroller"}},"src":"6476:26:36","typeDescriptions":{"typeIdentifier":"t_contract$_Comptroller_$9130","typeString":"contract Comptroller"}},"id":10608,"nodeType":"ExpressionStatement","src":"6476:26:36"},{"expression":{"id":10611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10609,"name":"rewardToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"6512:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10610,"name":"rewardToken_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10596,"src":"6526:12:36","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"src":"6512:26:36","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":10612,"nodeType":"ExpressionStatement","src":"6512:26:36"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":10613,"name":"__Ownable2Step_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26,"src":"6548:19:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":10614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6548:21:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10615,"nodeType":"ExpressionStatement","src":"6548:21:36"},{"expression":{"arguments":[{"id":10617,"name":"accessControlManager_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10600,"src":"6613:21:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10616,"name":"__AccessControlled_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4943,"src":"6579:33:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":10618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6579:56:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10619,"nodeType":"ExpressionStatement","src":"6579:56:36"},{"expression":{"arguments":[{"id":10621,"name":"loopsLimit_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10598,"src":"6664:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10620,"name":"_setMaxLoopsLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10317,"src":"6646:17:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":10622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6646:30:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10623,"nodeType":"ExpressionStatement","src":"6646:30:36"}]},"documentation":{"id":10590,"nodeType":"StructuredDocumentation","src":"5880:392:36","text":" @notice RewardsDistributor initializer\n @dev Initializes the deployer to owner\n @param comptroller_ Comptroller to attach the reward distributor to\n @param rewardToken_ Reward token to distribute\n @param loopsLimit_ Maximum number of iterations for the loops in this contract\n @param accessControlManager_ AccessControlManager contract address"},"functionSelector":"be203094","id":10625,"implemented":true,"kind":"function","modifiers":[{"id":10603,"kind":"modifierInvocation","modifierName":{"id":10602,"name":"initializer","nameLocations":["6454:11:36"],"nodeType":"IdentifierPath","referencedDeclaration":478,"src":"6454:11:36"},"nodeType":"ModifierInvocation","src":"6454:11:36"}],"name":"initialize","nameLocation":"6286:10:36","nodeType":"FunctionDefinition","parameters":{"id":10601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10593,"mutability":"mutable","name":"comptroller_","nameLocation":"6318:12:36","nodeType":"VariableDeclaration","scope":10625,"src":"6306:24:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_Comptroller_$9130","typeString":"contract Comptroller"},"typeName":{"id":10592,"nodeType":"UserDefinedTypeName","pathNode":{"id":10591,"name":"Comptroller","nameLocations":["6306:11:36"],"nodeType":"IdentifierPath","referencedDeclaration":9130,"src":"6306:11:36"},"referencedDeclaration":9130,"src":"6306:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_Comptroller_$9130","typeString":"contract Comptroller"}},"visibility":"internal"},{"constant":false,"id":10596,"mutability":"mutable","name":"rewardToken_","nameLocation":"6358:12:36","nodeType":"VariableDeclaration","scope":10625,"src":"6340:30:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":10595,"nodeType":"UserDefinedTypeName","pathNode":{"id":10594,"name":"IERC20Upgradeable","nameLocations":["6340:17:36"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"6340:17:36"},"referencedDeclaration":1352,"src":"6340:17:36","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"internal"},{"constant":false,"id":10598,"mutability":"mutable","name":"loopsLimit_","nameLocation":"6388:11:36","nodeType":"VariableDeclaration","scope":10625,"src":"6380:19:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10597,"name":"uint256","nodeType":"ElementaryTypeName","src":"6380:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10600,"mutability":"mutable","name":"accessControlManager_","nameLocation":"6417:21:36","nodeType":"VariableDeclaration","scope":10625,"src":"6409:29:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10599,"name":"address","nodeType":"ElementaryTypeName","src":"6409:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6296:148:36"},"returnParameters":{"id":10604,"nodeType":"ParameterList","parameters":[],"src":"6466:0:36"},"scope":12324,"src":"6277:406:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10656,"nodeType":"Block","src":"6998:332:36","statements":[{"assignments":[10634],"declarations":[{"constant":false,"id":10634,"mutability":"mutable","name":"blockNumberOrTimestamp","nameLocation":"7016:22:36","nodeType":"VariableDeclaration","scope":10656,"src":"7008:30:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10633,"name":"uint256","nodeType":"ElementaryTypeName","src":"7008:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10637,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":10635,"name":"getBlockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16298,"src":"7041:25:36","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":10636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7041:27:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7008:60:36"},{"expression":{"condition":{"id":10638,"name":"isTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16222,"src":"7079:11:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"id":10644,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10628,"src":"7211:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":10646,"name":"blockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10634,"src":"7226:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"626c6f636b206e756d62657220657863656564732033322062697473","id":10647,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7250:30:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_ff90a699fb9d013b04dce39b46a2e2edfd2bcf181b8611876e2c7b99f8929a06","typeString":"literal_string \"block number exceeds 32 bits\""},"value":"block number exceeds 32 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_ff90a699fb9d013b04dce39b46a2e2edfd2bcf181b8611876e2c7b99f8929a06","typeString":"literal_string \"block number exceeds 32 bits\""}],"id":10645,"name":"safe32","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9801,"src":"7219:6:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint32_$","typeString":"function (uint256,string memory) pure returns (uint32)"}},"id":10648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7219:62:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":10643,"name":"_initializeMarketBlockBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12267,"src":"7183:27:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint32_$returns$__$","typeString":"function (address,uint32)"}},"id":10649,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7183:99:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"7079:203:36","trueExpression":{"arguments":[{"id":10640,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10628,"src":"7137:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10641,"name":"blockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10634,"src":"7145:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10639,"name":"_initializeMarketTimestampBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12323,"src":"7105:31:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":10642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7105:63:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10651,"nodeType":"ExpressionStatement","src":"7079:203:36"},{"eventCall":{"arguments":[{"id":10653,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10628,"src":"7316:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10652,"name":"MarketInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10510,"src":"7298:17:36","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":10654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7298:25:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10655,"nodeType":"EmitStatement","src":"7293:30:36"}]},"documentation":{"id":10626,"nodeType":"StructuredDocumentation","src":"6689:237:36","text":" @notice Initializes the market state for a specific vToken\n @param vToken The address of the vToken to be initialized\n @custom:event MarketInitialized emits on success\n @custom:access Only Comptroller"},"functionSelector":"2a869a4d","id":10657,"implemented":true,"kind":"function","modifiers":[{"id":10631,"kind":"modifierInvocation","modifierName":{"id":10630,"name":"onlyComptroller","nameLocations":["6982:15:36"],"nodeType":"IdentifierPath","referencedDeclaration":10573,"src":"6982:15:36"},"nodeType":"ModifierInvocation","src":"6982:15:36"}],"name":"initializeMarket","nameLocation":"6940:16:36","nodeType":"FunctionDefinition","parameters":{"id":10629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10628,"mutability":"mutable","name":"vToken","nameLocation":"6965:6:36","nodeType":"VariableDeclaration","scope":10657,"src":"6957:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10627,"name":"address","nodeType":"ElementaryTypeName","src":"6957:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6956:16:36"},"returnParameters":{"id":10632,"nodeType":"ParameterList","parameters":[],"src":"6998:0:36"},"scope":12324,"src":"6931:399:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10676,"nodeType":"Block","src":"8266:84:36","statements":[{"expression":{"arguments":[{"id":10671,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10660,"src":"8307:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10672,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10662,"src":"8315:8:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10673,"name":"marketBorrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10665,"src":"8325:17:36","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":10670,"name":"_distributeBorrowerRewardToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11764,"src":"8276:30:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_struct$_Exp_$9645_memory_ptr_$returns$__$","typeString":"function (address,address,struct ExponentialNoError.Exp memory)"}},"id":10674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8276:67:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10675,"nodeType":"ExpressionStatement","src":"8276:67:36"}]},"documentation":{"id":10658,"nodeType":"StructuredDocumentation","src":"7377:726:36","text":" @notice Calculate reward token accrued by a borrower and possibly transfer it to them\n         Borrowers will begin to accrue after the first interaction with the protocol.\n @dev This function should only be called when the user has a borrow position in the market\n      (e.g. Comptroller.preBorrowHook, and Comptroller.preRepayHook)\n      We avoid an external call to check if they are in the market to save gas because this function is called in many places\n @param vToken The market in which the borrower is interacting\n @param borrower The address of the borrower to distribute REWARD TOKEN to\n @param marketBorrowIndex The current global borrow index of vToken"},"functionSelector":"6a95ddef","id":10677,"implemented":true,"kind":"function","modifiers":[{"id":10668,"kind":"modifierInvocation","modifierName":{"id":10667,"name":"onlyComptroller","nameLocations":["8250:15:36"],"nodeType":"IdentifierPath","referencedDeclaration":10573,"src":"8250:15:36"},"nodeType":"ModifierInvocation","src":"8250:15:36"}],"name":"distributeBorrowerRewardToken","nameLocation":"8117:29:36","nodeType":"FunctionDefinition","parameters":{"id":10666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10660,"mutability":"mutable","name":"vToken","nameLocation":"8164:6:36","nodeType":"VariableDeclaration","scope":10677,"src":"8156:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10659,"name":"address","nodeType":"ElementaryTypeName","src":"8156:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10662,"mutability":"mutable","name":"borrower","nameLocation":"8188:8:36","nodeType":"VariableDeclaration","scope":10677,"src":"8180:16:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10661,"name":"address","nodeType":"ElementaryTypeName","src":"8180:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10665,"mutability":"mutable","name":"marketBorrowIndex","nameLocation":"8217:17:36","nodeType":"VariableDeclaration","scope":10677,"src":"8206:28:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":10664,"nodeType":"UserDefinedTypeName","pathNode":{"id":10663,"name":"Exp","nameLocations":["8206:3:36"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"8206:3:36"},"referencedDeclaration":9645,"src":"8206:3:36","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"8146:94:36"},"returnParameters":{"id":10669,"nodeType":"ParameterList","parameters":[],"src":"8266:0:36"},"scope":12324,"src":"8108:242:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10688,"nodeType":"Block","src":"8435:54:36","statements":[{"expression":{"arguments":[{"id":10685,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10679,"src":"8475:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10684,"name":"_updateRewardTokenSupplyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12002,"src":"8445:29:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":10686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8445:37:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10687,"nodeType":"ExpressionStatement","src":"8445:37:36"}]},"functionSelector":"0a3a3a9e","id":10689,"implemented":true,"kind":"function","modifiers":[{"id":10682,"kind":"modifierInvocation","modifierName":{"id":10681,"name":"onlyComptroller","nameLocations":["8419:15:36"],"nodeType":"IdentifierPath","referencedDeclaration":10573,"src":"8419:15:36"},"nodeType":"ModifierInvocation","src":"8419:15:36"}],"name":"updateRewardTokenSupplyIndex","nameLocation":"8365:28:36","nodeType":"FunctionDefinition","parameters":{"id":10680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10679,"mutability":"mutable","name":"vToken","nameLocation":"8402:6:36","nodeType":"VariableDeclaration","scope":10689,"src":"8394:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10678,"name":"address","nodeType":"ElementaryTypeName","src":"8394:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8393:16:36"},"returnParameters":{"id":10683,"nodeType":"ParameterList","parameters":[],"src":"8435:0:36"},"scope":12324,"src":"8356:133:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10718,"nodeType":"Block","src":"8887:198:36","statements":[{"assignments":[10700],"declarations":[{"constant":false,"id":10700,"mutability":"mutable","name":"amountLeft","nameLocation":"8905:10:36","nodeType":"VariableDeclaration","scope":10718,"src":"8897:18:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10699,"name":"uint256","nodeType":"ElementaryTypeName","src":"8897:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10705,"initialValue":{"arguments":[{"id":10702,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10692,"src":"8936:9:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10703,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10694,"src":"8947:6:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10701,"name":"_grantRewardToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11805,"src":"8918:17:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,uint256) returns (uint256)"}},"id":10704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8918:36:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8897:57:36"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10707,"name":"amountLeft","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10700,"src":"8972:10:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10708,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8986:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8972:15:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e73756666696369656e7420726577617264546f6b656e20666f72206772616e74","id":10710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8989:36:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_432fe5c7c43fef719e573b5581c51228a55aa829b1f722b0153e4e929295ba6a","typeString":"literal_string \"insufficient rewardToken for grant\""},"value":"insufficient rewardToken for grant"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_432fe5c7c43fef719e573b5581c51228a55aa829b1f722b0153e4e929295ba6a","typeString":"literal_string \"insufficient rewardToken for grant\""}],"id":10706,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8964:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8964:62:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10712,"nodeType":"ExpressionStatement","src":"8964:62:36"},{"eventCall":{"arguments":[{"id":10714,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10692,"src":"9060:9:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10715,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10694,"src":"9071:6:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10713,"name":"RewardTokenGranted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10498,"src":"9041:18:36","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":10716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9041:37:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10717,"nodeType":"EmitStatement","src":"9036:42:36"}]},"documentation":{"id":10690,"nodeType":"StructuredDocumentation","src":"8495:307:36","text":" @notice Transfer REWARD TOKEN to the recipient\n @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all\n @param recipient The address of the recipient to transfer REWARD TOKEN to\n @param amount The amount of REWARD TOKEN to (possibly) transfer"},"functionSelector":"6d049329","id":10719,"implemented":true,"kind":"function","modifiers":[{"id":10697,"kind":"modifierInvocation","modifierName":{"id":10696,"name":"onlyOwner","nameLocations":["8877:9:36"],"nodeType":"IdentifierPath","referencedDeclaration":153,"src":"8877:9:36"},"nodeType":"ModifierInvocation","src":"8877:9:36"}],"name":"grantRewardToken","nameLocation":"8816:16:36","nodeType":"FunctionDefinition","parameters":{"id":10695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10692,"mutability":"mutable","name":"recipient","nameLocation":"8841:9:36","nodeType":"VariableDeclaration","scope":10719,"src":"8833:17:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10691,"name":"address","nodeType":"ElementaryTypeName","src":"8833:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10694,"mutability":"mutable","name":"amount","nameLocation":"8860:6:36","nodeType":"VariableDeclaration","scope":10719,"src":"8852:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10693,"name":"uint256","nodeType":"ElementaryTypeName","src":"8852:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8832:35:36"},"returnParameters":{"id":10698,"nodeType":"ParameterList","parameters":[],"src":"8887:0:36"},"scope":12324,"src":"8807:278:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10734,"nodeType":"Block","src":"9200:73:36","statements":[{"expression":{"arguments":[{"id":10730,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10721,"src":"9240:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10731,"name":"marketBorrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10724,"src":"9248:17:36","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":10729,"name":"_updateRewardTokenBorrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12211,"src":"9210:29:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_Exp_$9645_memory_ptr_$returns$__$","typeString":"function (address,struct ExponentialNoError.Exp memory)"}},"id":10732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9210:56:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10733,"nodeType":"ExpressionStatement","src":"9210:56:36"}]},"functionSelector":"23526079","id":10735,"implemented":true,"kind":"function","modifiers":[{"id":10727,"kind":"modifierInvocation","modifierName":{"id":10726,"name":"onlyComptroller","nameLocations":["9184:15:36"],"nodeType":"IdentifierPath","referencedDeclaration":10573,"src":"9184:15:36"},"nodeType":"ModifierInvocation","src":"9184:15:36"}],"name":"updateRewardTokenBorrowIndex","nameLocation":"9100:28:36","nodeType":"FunctionDefinition","parameters":{"id":10725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10721,"mutability":"mutable","name":"vToken","nameLocation":"9137:6:36","nodeType":"VariableDeclaration","scope":10735,"src":"9129:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10720,"name":"address","nodeType":"ElementaryTypeName","src":"9129:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10724,"mutability":"mutable","name":"marketBorrowIndex","nameLocation":"9156:17:36","nodeType":"VariableDeclaration","scope":10735,"src":"9145:28:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":10723,"nodeType":"UserDefinedTypeName","pathNode":{"id":10722,"name":"Exp","nameLocations":["9145:3:36"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"9145:3:36"},"referencedDeclaration":9645,"src":"9145:3:36","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"9128:46:36"},"returnParameters":{"id":10728,"nodeType":"ParameterList","parameters":[],"src":"9200:0:36"},"scope":12324,"src":"9091:182:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10794,"nodeType":"Block","src":"9785:391:36","statements":[{"expression":{"arguments":[{"hexValue":"736574526577617264546f6b656e53706565647328616464726573735b5d2c75696e743235365b5d2c75696e743235365b5d29","id":10750,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9815:53:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_8c37dfa33d1c4c556bd17dc93dce53a6b4d649dddd0d2da37f77c3b0dc1f4c03","typeString":"literal_string \"setRewardTokenSpeeds(address[],uint256[],uint256[])\""},"value":"setRewardTokenSpeeds(address[],uint256[],uint256[])"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_8c37dfa33d1c4c556bd17dc93dce53a6b4d649dddd0d2da37f77c3b0dc1f4c03","typeString":"literal_string \"setRewardTokenSpeeds(address[],uint256[],uint256[])\""}],"id":10749,"name":"_checkAccessAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5034,"src":"9795:19:36","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) view"}},"id":10751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9795:74:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10752,"nodeType":"ExpressionStatement","src":"9795:74:36"},{"assignments":[10754],"declarations":[{"constant":false,"id":10754,"mutability":"mutable","name":"numTokens","nameLocation":"9887:9:36","nodeType":"VariableDeclaration","scope":10794,"src":"9879:17:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10753,"name":"uint256","nodeType":"ElementaryTypeName","src":"9879:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10757,"initialValue":{"expression":{"id":10755,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10740,"src":"9899:7:36","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":10756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9907:6:36","memberName":"length","nodeType":"MemberAccess","src":"9899:14:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9879:34:36"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":10767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10759,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10754,"src":"9931:9:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":10760,"name":"supplySpeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10743,"src":"9944:12:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":10761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9957:6:36","memberName":"length","nodeType":"MemberAccess","src":"9944:19:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9931:32:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10763,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10754,"src":"9967:9:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":10764,"name":"borrowSpeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10746,"src":"9980:12:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":10765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9993:6:36","memberName":"length","nodeType":"MemberAccess","src":"9980:19:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9967:32:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9931:68:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e76616c696420736574526577617264546f6b656e537065656473","id":10768,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10001:30:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_322b734cdb73148ce798f463ec44e79da28ef00cb71be8ffb3f7e2a5d1d5194f","typeString":"literal_string \"invalid setRewardTokenSpeeds\""},"value":"invalid setRewardTokenSpeeds"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_322b734cdb73148ce798f463ec44e79da28ef00cb71be8ffb3f7e2a5d1d5194f","typeString":"literal_string \"invalid setRewardTokenSpeeds\""}],"id":10758,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9923:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9923:109:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10770,"nodeType":"ExpressionStatement","src":"9923:109:36"},{"body":{"id":10792,"nodeType":"Block","src":"10079:91:36","statements":[{"expression":{"arguments":[{"baseExpression":{"id":10781,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10740,"src":"10114:7:36","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":10783,"indexExpression":{"id":10782,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10772,"src":"10122:1:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10114:10:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"baseExpression":{"id":10784,"name":"supplySpeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10743,"src":"10126:12:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":10786,"indexExpression":{"id":10785,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10772,"src":"10139:1:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10126:15:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":10787,"name":"borrowSpeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10746,"src":"10143:12:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":10789,"indexExpression":{"id":10788,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10772,"src":"10156:1:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10143:15:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10780,"name":"_setRewardTokenSpeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11529,"src":"10093:20:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_VToken_$15506_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (contract VToken,uint256,uint256)"}},"id":10790,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10093:66:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10791,"nodeType":"ExpressionStatement","src":"10093:66:36"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10774,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10772,"src":"10059:1:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":10775,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10754,"src":"10063:9:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10059:13:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10793,"initializationExpression":{"assignments":[10772],"declarations":[{"constant":false,"id":10772,"mutability":"mutable","name":"i","nameLocation":"10056:1:36","nodeType":"VariableDeclaration","scope":10793,"src":"10048:9:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10771,"name":"uint256","nodeType":"ElementaryTypeName","src":"10048:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10773,"nodeType":"VariableDeclarationStatement","src":"10048:9:36"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":10778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"10074:3:36","subExpression":{"id":10777,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10772,"src":"10076:1:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10779,"nodeType":"ExpressionStatement","src":"10074:3:36"},"nodeType":"ForStatement","src":"10043:127:36"}]},"documentation":{"id":10736,"nodeType":"StructuredDocumentation","src":"9279:345:36","text":" @notice Set REWARD TOKEN borrow and supply speeds for the specified markets\n @param vTokens The markets whose REWARD TOKEN speed to update\n @param supplySpeeds New supply-side REWARD TOKEN speed for the corresponding market\n @param borrowSpeeds New borrow-side REWARD TOKEN speed for the corresponding market"},"functionSelector":"8c37dfa3","id":10795,"implemented":true,"kind":"function","modifiers":[],"name":"setRewardTokenSpeeds","nameLocation":"9638:20:36","nodeType":"FunctionDefinition","parameters":{"id":10747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10740,"mutability":"mutable","name":"vTokens","nameLocation":"9684:7:36","nodeType":"VariableDeclaration","scope":10795,"src":"9668:23:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":10738,"nodeType":"UserDefinedTypeName","pathNode":{"id":10737,"name":"VToken","nameLocations":["9668:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"9668:6:36"},"referencedDeclaration":15506,"src":"9668:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":10739,"nodeType":"ArrayTypeName","src":"9668:8:36","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"},{"constant":false,"id":10743,"mutability":"mutable","name":"supplySpeeds","nameLocation":"9718:12:36","nodeType":"VariableDeclaration","scope":10795,"src":"9701:29:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":10741,"name":"uint256","nodeType":"ElementaryTypeName","src":"9701:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10742,"nodeType":"ArrayTypeName","src":"9701:9:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":10746,"mutability":"mutable","name":"borrowSpeeds","nameLocation":"9757:12:36","nodeType":"VariableDeclaration","scope":10795,"src":"9740:29:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":10744,"name":"uint256","nodeType":"ElementaryTypeName","src":"9740:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10745,"nodeType":"ArrayTypeName","src":"9740:9:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9658:117:36"},"returnParameters":{"id":10748,"nodeType":"ParameterList","parameters":[],"src":"9785:0:36"},"scope":12324,"src":"9629:547:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10861,"nodeType":"Block","src":"10822:625:36","statements":[{"expression":{"arguments":[{"hexValue":"7365744c617374526577617264696e67426c6f636b7328616464726573735b5d2c75696e7433325b5d2c75696e7433325b5d29","id":10810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10852:53:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_856e5e6c331fa09d47710332cfa156c8e78cac951e6bc7fb911d3a0a34edd2c5","typeString":"literal_string \"setLastRewardingBlocks(address[],uint32[],uint32[])\""},"value":"setLastRewardingBlocks(address[],uint32[],uint32[])"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_856e5e6c331fa09d47710332cfa156c8e78cac951e6bc7fb911d3a0a34edd2c5","typeString":"literal_string \"setLastRewardingBlocks(address[],uint32[],uint32[])\""}],"id":10809,"name":"_checkAccessAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5034,"src":"10832:19:36","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) view"}},"id":10811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10832:74:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10812,"nodeType":"ExpressionStatement","src":"10832:74:36"},{"expression":{"arguments":[{"id":10815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"10924:12:36","subExpression":{"id":10814,"name":"isTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16222,"src":"10925:11:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"426c6f636b2d6261736564206f7065726174696f6e206f6e6c79","id":10816,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10938:28:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_deeaa8c519132eb034c6b2645cd03ab274dcabecd79d8fa0dfda871a74f634f1","typeString":"literal_string \"Block-based operation only\""},"value":"Block-based operation only"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_deeaa8c519132eb034c6b2645cd03ab274dcabecd79d8fa0dfda871a74f634f1","typeString":"literal_string \"Block-based operation only\""}],"id":10813,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10916:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10916:51:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10818,"nodeType":"ExpressionStatement","src":"10916:51:36"},{"assignments":[10820],"declarations":[{"constant":false,"id":10820,"mutability":"mutable","name":"numTokens","nameLocation":"10986:9:36","nodeType":"VariableDeclaration","scope":10861,"src":"10978:17:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10819,"name":"uint256","nodeType":"ElementaryTypeName","src":"10978:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10823,"initialValue":{"expression":{"id":10821,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10800,"src":"10998:7:36","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","typeString":"contract VToken[] calldata"}},"id":10822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11006:6:36","memberName":"length","nodeType":"MemberAccess","src":"10998:14:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10978:34:36"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":10833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10825,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10820,"src":"11043:9:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":10826,"name":"supplyLastRewardingBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10803,"src":"11056:25:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_calldata_ptr","typeString":"uint32[] calldata"}},"id":10827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11082:6:36","memberName":"length","nodeType":"MemberAccess","src":"11056:32:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11043:45:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10829,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10820,"src":"11092:9:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":10830,"name":"borrowLastRewardingBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10806,"src":"11105:25:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_calldata_ptr","typeString":"uint32[] calldata"}},"id":10831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11131:6:36","memberName":"length","nodeType":"MemberAccess","src":"11105:32:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11092:45:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11043:94:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"526577617264734469737472696275746f723a3a7365744c617374526577617264696e67426c6f636b7320696e76616c696420696e707574","id":10834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11151:58:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_5cff66c2aa35848a49d268966a8281c7733b409122a8f3eddbea1b1ec033686c","typeString":"literal_string \"RewardsDistributor::setLastRewardingBlocks invalid input\""},"value":"RewardsDistributor::setLastRewardingBlocks invalid input"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5cff66c2aa35848a49d268966a8281c7733b409122a8f3eddbea1b1ec033686c","typeString":"literal_string \"RewardsDistributor::setLastRewardingBlocks invalid input\""}],"id":10824,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11022:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11022:197:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10836,"nodeType":"ExpressionStatement","src":"11022:197:36"},{"body":{"id":10859,"nodeType":"Block","src":"11263:178:36","statements":[{"expression":{"arguments":[{"baseExpression":{"id":10844,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10800,"src":"11300:7:36","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","typeString":"contract VToken[] calldata"}},"id":10846,"indexExpression":{"id":10845,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10838,"src":"11308:1:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11300:10:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"baseExpression":{"id":10847,"name":"supplyLastRewardingBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10803,"src":"11312:25:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_calldata_ptr","typeString":"uint32[] calldata"}},"id":10849,"indexExpression":{"id":10848,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10838,"src":"11338:1:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11312:28:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"baseExpression":{"id":10850,"name":"borrowLastRewardingBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10806,"src":"11342:25:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_calldata_ptr","typeString":"uint32[] calldata"}},"id":10852,"indexExpression":{"id":10851,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10838,"src":"11368:1:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11342:28:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":10843,"name":"_setLastRewardingBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11310,"src":"11277:22:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_VToken_$15506_$_t_uint32_$_t_uint32_$returns$__$","typeString":"function (contract VToken,uint32,uint32)"}},"id":10853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11277:94:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10854,"nodeType":"ExpressionStatement","src":"11277:94:36"},{"id":10858,"nodeType":"UncheckedBlock","src":"11385:46:36","statements":[{"expression":{"id":10856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11413:3:36","subExpression":{"id":10855,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10838,"src":"11415:1:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10857,"nodeType":"ExpressionStatement","src":"11413:3:36"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10840,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10838,"src":"11246:1:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":10841,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10820,"src":"11250:9:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11246:13:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10860,"initializationExpression":{"assignments":[10838],"declarations":[{"constant":false,"id":10838,"mutability":"mutable","name":"i","nameLocation":"11243:1:36","nodeType":"VariableDeclaration","scope":10860,"src":"11235:9:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10837,"name":"uint256","nodeType":"ElementaryTypeName","src":"11235:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10839,"nodeType":"VariableDeclarationStatement","src":"11235:9:36"},"isSimpleCounterLoop":false,"nodeType":"ForStatement","src":"11230:211:36"}]},"documentation":{"id":10796,"nodeType":"StructuredDocumentation","src":"10182:447:36","text":" @notice Set REWARD TOKEN last rewarding block for the specified markets, used when contract is block based\n @param vTokens The markets whose REWARD TOKEN last rewarding block to update\n @param supplyLastRewardingBlocks New supply-side REWARD TOKEN last rewarding block for the corresponding market\n @param borrowLastRewardingBlocks New borrow-side REWARD TOKEN last rewarding block for the corresponding market"},"functionSelector":"856e5e6c","id":10862,"implemented":true,"kind":"function","modifiers":[],"name":"setLastRewardingBlocks","nameLocation":"10643:22:36","nodeType":"FunctionDefinition","parameters":{"id":10807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10800,"mutability":"mutable","name":"vTokens","nameLocation":"10693:7:36","nodeType":"VariableDeclaration","scope":10862,"src":"10675:25:36","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":10798,"nodeType":"UserDefinedTypeName","pathNode":{"id":10797,"name":"VToken","nameLocations":["10675:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"10675:6:36"},"referencedDeclaration":15506,"src":"10675:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":10799,"nodeType":"ArrayTypeName","src":"10675:8:36","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"},{"constant":false,"id":10803,"mutability":"mutable","name":"supplyLastRewardingBlocks","nameLocation":"10728:25:36","nodeType":"VariableDeclaration","scope":10862,"src":"10710:43:36","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_calldata_ptr","typeString":"uint32[]"},"typeName":{"baseType":{"id":10801,"name":"uint32","nodeType":"ElementaryTypeName","src":"10710:6:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":10802,"nodeType":"ArrayTypeName","src":"10710:8:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_storage_ptr","typeString":"uint32[]"}},"visibility":"internal"},{"constant":false,"id":10806,"mutability":"mutable","name":"borrowLastRewardingBlocks","nameLocation":"10781:25:36","nodeType":"VariableDeclaration","scope":10862,"src":"10763:43:36","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_calldata_ptr","typeString":"uint32[]"},"typeName":{"baseType":{"id":10804,"name":"uint32","nodeType":"ElementaryTypeName","src":"10763:6:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":10805,"nodeType":"ArrayTypeName","src":"10763:8:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_storage_ptr","typeString":"uint32[]"}},"visibility":"internal"}],"src":"10665:147:36"},"returnParameters":{"id":10808,"nodeType":"ParameterList","parameters":[],"src":"10822:0:36"},"scope":12324,"src":"10634:813:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10927,"nodeType":"Block","src":"12169:766:36","statements":[{"expression":{"arguments":[{"hexValue":"7365744c617374526577617264696e67426c6f636b54696d657374616d707328616464726573735b5d2c75696e743235365b5d2c75696e743235365b5d29","id":10877,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12199:64:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_5d8441b8e064822a5d0e0dbb15f30909c6c526ab47e7d6b3a7aa43efb898df61","typeString":"literal_string \"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])\""},"value":"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_5d8441b8e064822a5d0e0dbb15f30909c6c526ab47e7d6b3a7aa43efb898df61","typeString":"literal_string \"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])\""}],"id":10876,"name":"_checkAccessAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5034,"src":"12179:19:36","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) view"}},"id":10878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12179:85:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10879,"nodeType":"ExpressionStatement","src":"12179:85:36"},{"expression":{"arguments":[{"id":10881,"name":"isTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16222,"src":"12282:11:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"54696d652d6261736564206f7065726174696f6e206f6e6c79","id":10882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12295:27:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_36bf5156a09fb782d0af3560e4601cbf2cedc5155a8996d8781f3cb033938025","typeString":"literal_string \"Time-based operation only\""},"value":"Time-based operation only"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_36bf5156a09fb782d0af3560e4601cbf2cedc5155a8996d8781f3cb033938025","typeString":"literal_string \"Time-based operation only\""}],"id":10880,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12274:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12274:49:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10884,"nodeType":"ExpressionStatement","src":"12274:49:36"},{"assignments":[10886],"declarations":[{"constant":false,"id":10886,"mutability":"mutable","name":"numTokens","nameLocation":"12342:9:36","nodeType":"VariableDeclaration","scope":10927,"src":"12334:17:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10885,"name":"uint256","nodeType":"ElementaryTypeName","src":"12334:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10889,"initialValue":{"expression":{"id":10887,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10867,"src":"12354:7:36","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","typeString":"contract VToken[] calldata"}},"id":10888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12362:6:36","memberName":"length","nodeType":"MemberAccess","src":"12354:14:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12334:34:36"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":10899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10891,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10886,"src":"12399:9:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":10892,"name":"supplyLastRewardingBlockTimestamps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10870,"src":"12412:34:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":10893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12447:6:36","memberName":"length","nodeType":"MemberAccess","src":"12412:41:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12399:54:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10895,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10886,"src":"12473:9:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":10896,"name":"borrowLastRewardingBlockTimestamps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10873,"src":"12486:34:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":10897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12521:6:36","memberName":"length","nodeType":"MemberAccess","src":"12486:41:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12473:54:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12399:128:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"526577617264734469737472696275746f723a3a7365744c617374526577617264696e67426c6f636b54696d657374616d707320696e76616c696420696e707574","id":10900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12541:67:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_6291c33270cb332e2566d661b37996c9d0d6802836fbd96a9a4623cd553212e4","typeString":"literal_string \"RewardsDistributor::setLastRewardingBlockTimestamps invalid input\""},"value":"RewardsDistributor::setLastRewardingBlockTimestamps invalid input"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6291c33270cb332e2566d661b37996c9d0d6802836fbd96a9a4623cd553212e4","typeString":"literal_string \"RewardsDistributor::setLastRewardingBlockTimestamps invalid input\""}],"id":10890,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12378:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12378:240:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10902,"nodeType":"ExpressionStatement","src":"12378:240:36"},{"body":{"id":10925,"nodeType":"Block","src":"12662:267:36","statements":[{"expression":{"arguments":[{"baseExpression":{"id":10910,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10867,"src":"12725:7:36","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","typeString":"contract VToken[] calldata"}},"id":10912,"indexExpression":{"id":10911,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10904,"src":"12733:1:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12725:10:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"baseExpression":{"id":10913,"name":"supplyLastRewardingBlockTimestamps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10870,"src":"12753:34:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":10915,"indexExpression":{"id":10914,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10904,"src":"12788:1:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12753:37:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":10916,"name":"borrowLastRewardingBlockTimestamps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10873,"src":"12808:34:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":10918,"indexExpression":{"id":10917,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10904,"src":"12843:1:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12808:37:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10909,"name":"_setLastRewardingBlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11437,"src":"12676:31:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_VToken_$15506_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (contract VToken,uint256,uint256)"}},"id":10919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12676:183:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10920,"nodeType":"ExpressionStatement","src":"12676:183:36"},{"id":10924,"nodeType":"UncheckedBlock","src":"12873:46:36","statements":[{"expression":{"id":10922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"12901:3:36","subExpression":{"id":10921,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10904,"src":"12903:1:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10923,"nodeType":"ExpressionStatement","src":"12901:3:36"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10906,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10904,"src":"12645:1:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":10907,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10886,"src":"12649:9:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12645:13:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10926,"initializationExpression":{"assignments":[10904],"declarations":[{"constant":false,"id":10904,"mutability":"mutable","name":"i","nameLocation":"12642:1:36","nodeType":"VariableDeclaration","scope":10926,"src":"12634:9:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10903,"name":"uint256","nodeType":"ElementaryTypeName","src":"12634:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10905,"nodeType":"VariableDeclarationStatement","src":"12634:9:36"},"isSimpleCounterLoop":false,"nodeType":"ForStatement","src":"12629:300:36"}]},"documentation":{"id":10863,"nodeType":"StructuredDocumentation","src":"11453:494:36","text":" @notice Set REWARD TOKEN last rewarding block timestamp for the specified markets, used when contract is time based\n @param vTokens The markets whose REWARD TOKEN last rewarding block to update\n @param supplyLastRewardingBlockTimestamps New supply-side REWARD TOKEN last rewarding block timestamp for the corresponding market\n @param borrowLastRewardingBlockTimestamps New borrow-side REWARD TOKEN last rewarding block timestamp for the corresponding market"},"functionSelector":"5d8441b8","id":10928,"implemented":true,"kind":"function","modifiers":[],"name":"setLastRewardingBlockTimestamps","nameLocation":"11961:31:36","nodeType":"FunctionDefinition","parameters":{"id":10874,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10867,"mutability":"mutable","name":"vTokens","nameLocation":"12020:7:36","nodeType":"VariableDeclaration","scope":10928,"src":"12002:25:36","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":10865,"nodeType":"UserDefinedTypeName","pathNode":{"id":10864,"name":"VToken","nameLocations":["12002:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"12002:6:36"},"referencedDeclaration":15506,"src":"12002:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":10866,"nodeType":"ArrayTypeName","src":"12002:8:36","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"},{"constant":false,"id":10870,"mutability":"mutable","name":"supplyLastRewardingBlockTimestamps","nameLocation":"12056:34:36","nodeType":"VariableDeclaration","scope":10928,"src":"12037:53:36","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":10868,"name":"uint256","nodeType":"ElementaryTypeName","src":"12037:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10869,"nodeType":"ArrayTypeName","src":"12037:9:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":10873,"mutability":"mutable","name":"borrowLastRewardingBlockTimestamps","nameLocation":"12119:34:36","nodeType":"VariableDeclaration","scope":10928,"src":"12100:53:36","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":10871,"name":"uint256","nodeType":"ElementaryTypeName","src":"12100:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10872,"nodeType":"ArrayTypeName","src":"12100:9:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11992:167:36"},"returnParameters":{"id":10875,"nodeType":"ParameterList","parameters":[],"src":"12169:0:36"},"scope":12324,"src":"11952:983:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10971,"nodeType":"Block","src":"13273:533:36","statements":[{"expression":{"arguments":[{"id":10939,"name":"contributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10931,"src":"13410:11:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10938,"name":"updateContributorRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11085,"src":"13385:24:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":10940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13385:37:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10941,"nodeType":"ExpressionStatement","src":"13385:37:36"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10942,"name":"rewardTokenSpeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10933,"src":"13436:16:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13456:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13436:21:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":10958,"nodeType":"Block","src":"13561:88:36","statements":[{"expression":{"id":10956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10951,"name":"lastContributorBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12389,"src":"13575:20:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10953,"indexExpression":{"id":10952,"name":"contributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10931,"src":"13596:11:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13575:33:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":10954,"name":"getBlockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16298,"src":"13611:25:36","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":10955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13611:27:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13575:63:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10957,"nodeType":"ExpressionStatement","src":"13575:63:36"}]},"id":10959,"nodeType":"IfStatement","src":"13432:217:36","trueBody":{"id":10950,"nodeType":"Block","src":"13459:96:36","statements":[{"expression":{"id":10948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"13504:40:36","subExpression":{"baseExpression":{"id":10945,"name":"lastContributorBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12389,"src":"13511:20:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10947,"indexExpression":{"id":10946,"name":"contributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10931,"src":"13532:11:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13511:33:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10949,"nodeType":"ExpressionStatement","src":"13504:40:36"}]}},{"expression":{"id":10964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10960,"name":"rewardTokenContributorSpeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12384,"src":"13658:28:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10962,"indexExpression":{"id":10961,"name":"contributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10931,"src":"13687:11:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13658:41:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10963,"name":"rewardTokenSpeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10933,"src":"13702:16:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13658:60:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10965,"nodeType":"ExpressionStatement","src":"13658:60:36"},{"eventCall":{"arguments":[{"id":10967,"name":"contributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10931,"src":"13769:11:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10968,"name":"rewardTokenSpeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10933,"src":"13782:16:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10966,"name":"ContributorRewardTokenSpeedUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10505,"src":"13734:34:36","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":10969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13734:65:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10970,"nodeType":"EmitStatement","src":"13729:70:36"}]},"documentation":{"id":10929,"nodeType":"StructuredDocumentation","src":"12941:221:36","text":" @notice Set REWARD TOKEN speed for a single contributor\n @param contributor The contributor whose REWARD TOKEN speed to update\n @param rewardTokenSpeed New REWARD TOKEN speed for contributor"},"functionSelector":"2eed6906","id":10972,"implemented":true,"kind":"function","modifiers":[{"id":10936,"kind":"modifierInvocation","modifierName":{"id":10935,"name":"onlyOwner","nameLocations":["13263:9:36"],"nodeType":"IdentifierPath","referencedDeclaration":153,"src":"13263:9:36"},"nodeType":"ModifierInvocation","src":"13263:9:36"}],"name":"setContributorRewardTokenSpeed","nameLocation":"13176:30:36","nodeType":"FunctionDefinition","parameters":{"id":10934,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10931,"mutability":"mutable","name":"contributor","nameLocation":"13215:11:36","nodeType":"VariableDeclaration","scope":10972,"src":"13207:19:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10930,"name":"address","nodeType":"ElementaryTypeName","src":"13207:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10933,"mutability":"mutable","name":"rewardTokenSpeed","nameLocation":"13236:16:36","nodeType":"VariableDeclaration","scope":10972,"src":"13228:24:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10932,"name":"uint256","nodeType":"ElementaryTypeName","src":"13228:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13206:47:36"},"returnParameters":{"id":10937,"nodeType":"ParameterList","parameters":[],"src":"13273:0:36"},"scope":12324,"src":"13167:639:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10986,"nodeType":"Block","src":"13910:65:36","statements":[{"expression":{"arguments":[{"id":10982,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10974,"src":"13951:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10983,"name":"supplier","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10976,"src":"13959:8:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":10981,"name":"_distributeSupplierRewardToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11641,"src":"13920:30:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":10984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13920:48:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10985,"nodeType":"ExpressionStatement","src":"13920:48:36"}]},"functionSelector":"db7954fd","id":10987,"implemented":true,"kind":"function","modifiers":[{"id":10979,"kind":"modifierInvocation","modifierName":{"id":10978,"name":"onlyComptroller","nameLocations":["13894:15:36"],"nodeType":"IdentifierPath","referencedDeclaration":10573,"src":"13894:15:36"},"nodeType":"ModifierInvocation","src":"13894:15:36"}],"name":"distributeSupplierRewardToken","nameLocation":"13821:29:36","nodeType":"FunctionDefinition","parameters":{"id":10977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10974,"mutability":"mutable","name":"vToken","nameLocation":"13859:6:36","nodeType":"VariableDeclaration","scope":10987,"src":"13851:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10973,"name":"address","nodeType":"ElementaryTypeName","src":"13851:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10976,"mutability":"mutable","name":"supplier","nameLocation":"13875:8:36","nodeType":"VariableDeclaration","scope":10987,"src":"13867:16:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10975,"name":"address","nodeType":"ElementaryTypeName","src":"13867:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13850:34:36"},"returnParameters":{"id":10980,"nodeType":"ParameterList","parameters":[],"src":"13910:0:36"},"scope":12324,"src":"13812:163:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":11000,"nodeType":"Block","src":"14181:77:36","statements":[{"expression":{"arguments":[{"id":10994,"name":"holder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10990,"src":"14215:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":10995,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12399,"src":"14223:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_Comptroller_$9130","typeString":"contract Comptroller"}},"id":10996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14235:13:36","memberName":"getAllMarkets","nodeType":"MemberAccess","referencedDeclaration":8131,"src":"14223:25:36","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_$","typeString":"function () view external returns (contract VToken[] memory)"}},"id":10997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14223:27:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}],"id":10993,"name":"claimRewardToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11183,"src":"14198:16:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_$returns$__$","typeString":"function (address,contract VToken[] memory)"}},"id":10998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14198:53:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"functionReturnParameters":10992,"id":10999,"nodeType":"Return","src":"14191:60:36"}]},"documentation":{"id":10988,"nodeType":"StructuredDocumentation","src":"13981:144:36","text":" @notice Claim all the rewardToken accrued by holder in all markets\n @param holder The address to claim REWARD TOKEN for"},"functionSelector":"ca37271b","id":11001,"implemented":true,"kind":"function","modifiers":[],"name":"claimRewardToken","nameLocation":"14139:16:36","nodeType":"FunctionDefinition","parameters":{"id":10991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10990,"mutability":"mutable","name":"holder","nameLocation":"14164:6:36","nodeType":"VariableDeclaration","scope":11001,"src":"14156:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10989,"name":"address","nodeType":"ElementaryTypeName","src":"14156:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14155:16:36"},"returnParameters":{"id":10992,"nodeType":"ParameterList","parameters":[],"src":"14181:0:36"},"scope":12324,"src":"14130:128:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":11013,"nodeType":"Block","src":"14478:41:36","statements":[{"expression":{"arguments":[{"id":11010,"name":"limit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11004,"src":"14506:5:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11009,"name":"_setMaxLoopsLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10317,"src":"14488:17:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":11011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14488:24:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11012,"nodeType":"ExpressionStatement","src":"14488:24:36"}]},"documentation":{"id":11002,"nodeType":"StructuredDocumentation","src":"14264:149:36","text":" @notice Set the limit for the loops can iterate to avoid the DOS\n @param limit Limit for the max loops can execute at a time"},"functionSelector":"80d45a2d","id":11014,"implemented":true,"kind":"function","modifiers":[{"id":11007,"kind":"modifierInvocation","modifierName":{"id":11006,"name":"onlyOwner","nameLocations":["14468:9:36"],"nodeType":"IdentifierPath","referencedDeclaration":153,"src":"14468:9:36"},"nodeType":"ModifierInvocation","src":"14468:9:36"}],"name":"setMaxLoopsLimit","nameLocation":"14427:16:36","nodeType":"FunctionDefinition","parameters":{"id":11005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11004,"mutability":"mutable","name":"limit","nameLocation":"14452:5:36","nodeType":"VariableDeclaration","scope":11014,"src":"14444:13:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11003,"name":"uint256","nodeType":"ElementaryTypeName","src":"14444:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14443:15:36"},"returnParameters":{"id":11008,"nodeType":"ParameterList","parameters":[],"src":"14478:0:36"},"scope":12324,"src":"14418:101:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":11084,"nodeType":"Block","src":"14772:740:36","statements":[{"assignments":[11021],"declarations":[{"constant":false,"id":11021,"mutability":"mutable","name":"rewardTokenSpeed","nameLocation":"14790:16:36","nodeType":"VariableDeclaration","scope":11084,"src":"14782:24:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11020,"name":"uint256","nodeType":"ElementaryTypeName","src":"14782:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11025,"initialValue":{"baseExpression":{"id":11022,"name":"rewardTokenContributorSpeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12384,"src":"14809:28:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11024,"indexExpression":{"id":11023,"name":"contributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11017,"src":"14838:11:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14809:41:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14782:68:36"},{"assignments":[11027],"declarations":[{"constant":false,"id":11027,"mutability":"mutable","name":"blockNumberOrTimestamp","nameLocation":"14868:22:36","nodeType":"VariableDeclaration","scope":11084,"src":"14860:30:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11026,"name":"uint256","nodeType":"ElementaryTypeName","src":"14860:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11030,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":11028,"name":"getBlockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16298,"src":"14893:25:36","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":11029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14893:27:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14860:60:36"},{"assignments":[11032],"declarations":[{"constant":false,"id":11032,"mutability":"mutable","name":"deltaBlocksOrTimestamp","nameLocation":"14938:22:36","nodeType":"VariableDeclaration","scope":11084,"src":"14930:30:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11031,"name":"uint256","nodeType":"ElementaryTypeName","src":"14930:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11039,"initialValue":{"arguments":[{"id":11034,"name":"blockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11027,"src":"14968:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":11035,"name":"lastContributorBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12389,"src":"14992:20:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11037,"indexExpression":{"id":11036,"name":"contributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11017,"src":"15013:11:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14992:33:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11033,"name":"sub_","nodeType":"Identifier","overloadedDeclarations":[9881,9903,9917],"referencedDeclaration":9917,"src":"14963:4:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14963:63:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14930:96:36"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11040,"name":"deltaBlocksOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11032,"src":"15040:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15065:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"15040:26:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11043,"name":"rewardTokenSpeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11021,"src":"15070:16:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11044,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15089:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"15070:20:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"15040:50:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11083,"nodeType":"IfStatement","src":"15036:470:36","trueBody":{"id":11082,"nodeType":"Block","src":"15092:414:36","statements":[{"assignments":[11048],"declarations":[{"constant":false,"id":11048,"mutability":"mutable","name":"newAccrued","nameLocation":"15114:10:36","nodeType":"VariableDeclaration","scope":11082,"src":"15106:18:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11047,"name":"uint256","nodeType":"ElementaryTypeName","src":"15106:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11053,"initialValue":{"arguments":[{"id":11050,"name":"deltaBlocksOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11032,"src":"15132:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11051,"name":"rewardTokenSpeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11021,"src":"15156:16:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11049,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":10057,"src":"15127:4:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15127:46:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15106:67:36"},{"assignments":[11055],"declarations":[{"constant":false,"id":11055,"mutability":"mutable","name":"contributorAccrued","nameLocation":"15195:18:36","nodeType":"VariableDeclaration","scope":11082,"src":"15187:26:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11054,"name":"uint256","nodeType":"ElementaryTypeName","src":"15187:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11062,"initialValue":{"arguments":[{"baseExpression":{"id":11057,"name":"rewardTokenAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12363,"src":"15221:18:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11059,"indexExpression":{"id":11058,"name":"contributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11017,"src":"15240:11:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15221:31:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11060,"name":"newAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11048,"src":"15254:10:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11056,"name":"add_","nodeType":"Identifier","overloadedDeclarations":[9823,9845,9859],"referencedDeclaration":9859,"src":"15216:4:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15216:49:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15187:78:36"},{"expression":{"id":11067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11063,"name":"rewardTokenAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12363,"src":"15280:18:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11065,"indexExpression":{"id":11064,"name":"contributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11017,"src":"15299:11:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15280:31:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11066,"name":"contributorAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11055,"src":"15314:18:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15280:52:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11068,"nodeType":"ExpressionStatement","src":"15280:52:36"},{"expression":{"id":11073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11069,"name":"lastContributorBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12389,"src":"15346:20:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11071,"indexExpression":{"id":11070,"name":"contributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11017,"src":"15367:11:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15346:33:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11072,"name":"blockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11027,"src":"15382:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15346:58:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11074,"nodeType":"ExpressionStatement","src":"15346:58:36"},{"eventCall":{"arguments":[{"id":11076,"name":"contributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11017,"src":"15450:11:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":11077,"name":"rewardTokenAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12363,"src":"15463:18:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11079,"indexExpression":{"id":11078,"name":"contributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11017,"src":"15482:11:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15463:31:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11075,"name":"ContributorRewardsUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10530,"src":"15424:25:36","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":11080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15424:71:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11081,"nodeType":"EmitStatement","src":"15419:76:36"}]}}]},"documentation":{"id":11015,"nodeType":"StructuredDocumentation","src":"14525:180:36","text":" @notice Calculate additional accrued REWARD TOKEN for a contributor since last accrual\n @param contributor The address to calculate contributor rewards for"},"functionSelector":"741b2525","id":11085,"implemented":true,"kind":"function","modifiers":[],"name":"updateContributorRewards","nameLocation":"14719:24:36","nodeType":"FunctionDefinition","parameters":{"id":11018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11017,"mutability":"mutable","name":"contributor","nameLocation":"14752:11:36","nodeType":"VariableDeclaration","scope":11085,"src":"14744:19:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11016,"name":"address","nodeType":"ElementaryTypeName","src":"14744:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14743:21:36"},"returnParameters":{"id":11019,"nodeType":"ParameterList","parameters":[],"src":"14772:0:36"},"scope":12324,"src":"14710:802:36","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":11182,"nodeType":"Block","src":"15818:730:36","statements":[{"assignments":[11096],"declarations":[{"constant":false,"id":11096,"mutability":"mutable","name":"vTokensCount","nameLocation":"15836:12:36","nodeType":"VariableDeclaration","scope":11182,"src":"15828:20:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11095,"name":"uint256","nodeType":"ElementaryTypeName","src":"15828:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11099,"initialValue":{"expression":{"id":11097,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11092,"src":"15851:7:36","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":11098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15859:6:36","memberName":"length","nodeType":"MemberAccess","src":"15851:14:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15828:37:36"},{"expression":{"arguments":[{"id":11101,"name":"vTokensCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11096,"src":"15892:12:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11100,"name":"_ensureMaxLoops","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10334,"src":"15876:15:36","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":11102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15876:29:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11103,"nodeType":"ExpressionStatement","src":"15876:29:36"},{"body":{"id":11169,"nodeType":"Block","src":"15955:495:36","statements":[{"assignments":[11115],"declarations":[{"constant":false,"id":11115,"mutability":"mutable","name":"vToken","nameLocation":"15976:6:36","nodeType":"VariableDeclaration","scope":11169,"src":"15969:13:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":11114,"nodeType":"UserDefinedTypeName","pathNode":{"id":11113,"name":"VToken","nameLocations":["15969:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"15969:6:36"},"referencedDeclaration":15506,"src":"15969:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"}],"id":11119,"initialValue":{"baseExpression":{"id":11116,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11092,"src":"15985:7:36","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":11118,"indexExpression":{"id":11117,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11105,"src":"15993:1:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15985:10:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"nodeType":"VariableDeclarationStatement","src":"15969:26:36"},{"expression":{"arguments":[{"arguments":[{"id":11123,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11115,"src":"16044:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"expression":{"id":11121,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12399,"src":"16017:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_Comptroller_$9130","typeString":"contract Comptroller"}},"id":11122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16029:14:36","memberName":"isMarketListed","nodeType":"MemberAccess","referencedDeclaration":8149,"src":"16017:26:36","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_VToken_$15506_$returns$_t_bool_$","typeString":"function (contract VToken) view external returns (bool)"}},"id":11124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16017:34:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d61726b6574206d757374206265206c6973746564","id":11125,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16053:23:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_8d6cda2e8214bcdab6eb9bde4767020b52a0b58abe9235e475535a272dbeb6e1","typeString":"literal_string \"market must be listed\""},"value":"market must be listed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8d6cda2e8214bcdab6eb9bde4767020b52a0b58abe9235e475535a272dbeb6e1","typeString":"literal_string \"market must be listed\""}],"id":11120,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16009:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16009:68:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11127,"nodeType":"ExpressionStatement","src":"16009:68:36"},{"assignments":[11130],"declarations":[{"constant":false,"id":11130,"mutability":"mutable","name":"borrowIndex","nameLocation":"16102:11:36","nodeType":"VariableDeclaration","scope":11169,"src":"16091:22:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":11129,"nodeType":"UserDefinedTypeName","pathNode":{"id":11128,"name":"Exp","nameLocations":["16091:3:36"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"16091:3:36"},"referencedDeclaration":9645,"src":"16091:3:36","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":11136,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":11132,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11115,"src":"16132:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":11133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16139:11:36","memberName":"borrowIndex","nodeType":"MemberAccess","referencedDeclaration":15560,"src":"16132:18:36","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":11134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16132:20:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11131,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"16116:3:36","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":11135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["16122:8:36"],"names":["mantissa"],"nodeType":"FunctionCall","src":"16116:39:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"VariableDeclarationStatement","src":"16091:64:36"},{"expression":{"arguments":[{"arguments":[{"id":11140,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11115,"src":"16207:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11139,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16199:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11138,"name":"address","nodeType":"ElementaryTypeName","src":"16199:7:36","typeDescriptions":{}}},"id":11141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16199:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11142,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11130,"src":"16216:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":11137,"name":"_updateRewardTokenBorrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12211,"src":"16169:29:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_Exp_$9645_memory_ptr_$returns$__$","typeString":"function (address,struct ExponentialNoError.Exp memory)"}},"id":11143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16169:59:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11144,"nodeType":"ExpressionStatement","src":"16169:59:36"},{"expression":{"arguments":[{"arguments":[{"id":11148,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11115,"src":"16281:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11147,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16273:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11146,"name":"address","nodeType":"ElementaryTypeName","src":"16273:7:36","typeDescriptions":{}}},"id":11149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16273:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11150,"name":"holder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11088,"src":"16290:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11151,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11130,"src":"16298:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":11145,"name":"_distributeBorrowerRewardToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11764,"src":"16242:30:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_struct$_Exp_$9645_memory_ptr_$returns$__$","typeString":"function (address,address,struct ExponentialNoError.Exp memory)"}},"id":11152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16242:68:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11153,"nodeType":"ExpressionStatement","src":"16242:68:36"},{"expression":{"arguments":[{"arguments":[{"id":11157,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11115,"src":"16362:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11156,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16354:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11155,"name":"address","nodeType":"ElementaryTypeName","src":"16354:7:36","typeDescriptions":{}}},"id":11158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16354:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":11154,"name":"_updateRewardTokenSupplyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12002,"src":"16324:29:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":11159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16324:46:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11160,"nodeType":"ExpressionStatement","src":"16324:46:36"},{"expression":{"arguments":[{"arguments":[{"id":11164,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11115,"src":"16423:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11163,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16415:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11162,"name":"address","nodeType":"ElementaryTypeName","src":"16415:7:36","typeDescriptions":{}}},"id":11165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16415:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11166,"name":"holder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11088,"src":"16432:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11161,"name":"_distributeSupplierRewardToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11641,"src":"16384:30:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":11167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16384:55:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11168,"nodeType":"ExpressionStatement","src":"16384:55:36"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11107,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11105,"src":"15932:1:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11108,"name":"vTokensCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11096,"src":"15936:12:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15932:16:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11170,"initializationExpression":{"assignments":[11105],"declarations":[{"constant":false,"id":11105,"mutability":"mutable","name":"i","nameLocation":"15929:1:36","nodeType":"VariableDeclaration","scope":11170,"src":"15921:9:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11104,"name":"uint256","nodeType":"ElementaryTypeName","src":"15921:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11106,"nodeType":"VariableDeclarationStatement","src":"15921:9:36"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":11111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15950:3:36","subExpression":{"id":11110,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11105,"src":"15952:1:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11112,"nodeType":"ExpressionStatement","src":"15950:3:36"},"nodeType":"ForStatement","src":"15916:534:36"},{"expression":{"id":11180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11171,"name":"rewardTokenAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12363,"src":"16459:18:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11173,"indexExpression":{"id":11172,"name":"holder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11088,"src":"16478:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16459:26:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11175,"name":"holder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11088,"src":"16506:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":11176,"name":"rewardTokenAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12363,"src":"16514:18:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11178,"indexExpression":{"id":11177,"name":"holder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11088,"src":"16533:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16514:26:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11174,"name":"_grantRewardToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11805,"src":"16488:17:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,uint256) returns (uint256)"}},"id":11179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16488:53:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16459:82:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11181,"nodeType":"ExpressionStatement","src":"16459:82:36"}]},"documentation":{"id":11086,"nodeType":"StructuredDocumentation","src":"15518:221:36","text":" @notice Claim all the rewardToken accrued by holder in the specified markets\n @param holder The address to claim REWARD TOKEN for\n @param vTokens The list of markets to claim REWARD TOKEN in"},"functionSelector":"04caeb10","id":11183,"implemented":true,"kind":"function","modifiers":[],"name":"claimRewardToken","nameLocation":"15753:16:36","nodeType":"FunctionDefinition","parameters":{"id":11093,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11088,"mutability":"mutable","name":"holder","nameLocation":"15778:6:36","nodeType":"VariableDeclaration","scope":11183,"src":"15770:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11087,"name":"address","nodeType":"ElementaryTypeName","src":"15770:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11092,"mutability":"mutable","name":"vTokens","nameLocation":"15802:7:36","nodeType":"VariableDeclaration","scope":11183,"src":"15786:23:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":11090,"nodeType":"UserDefinedTypeName","pathNode":{"id":11089,"name":"VToken","nameLocations":["15786:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"15786:6:36"},"referencedDeclaration":15506,"src":"15786:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":11091,"nodeType":"ArrayTypeName","src":"15786:8:36","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"}],"src":"15769:41:36"},"returnParameters":{"id":11094,"nodeType":"ParameterList","parameters":[],"src":"15818:0:36"},"scope":12324,"src":"15744:804:36","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":11309,"nodeType":"Block","src":"17080:1531:36","statements":[{"expression":{"arguments":[{"arguments":[{"id":11197,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11187,"src":"17125:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"expression":{"id":11195,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12399,"src":"17098:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_Comptroller_$9130","typeString":"contract Comptroller"}},"id":11196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17110:14:36","memberName":"isMarketListed","nodeType":"MemberAccess","referencedDeclaration":8149,"src":"17098:26:36","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_VToken_$15506_$returns$_t_bool_$","typeString":"function (contract VToken) view external returns (bool)"}},"id":11198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17098:34:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726577617264546f6b656e206d61726b6574206973206e6f74206c6973746564","id":11199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17134:34:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_2f89df7223863f69f86e7052cbcdf68d52d82b51b73f12fa18c8c279407b9f9f","typeString":"literal_string \"rewardToken market is not listed\""},"value":"rewardToken market is not listed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2f89df7223863f69f86e7052cbcdf68d52d82b51b73f12fa18c8c279407b9f9f","typeString":"literal_string \"rewardToken market is not listed\""}],"id":11194,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17090:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17090:79:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11201,"nodeType":"ExpressionStatement","src":"17090:79:36"},{"assignments":[11203],"declarations":[{"constant":false,"id":11203,"mutability":"mutable","name":"blockNumber","nameLocation":"17188:11:36","nodeType":"VariableDeclaration","scope":11309,"src":"17180:19:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11202,"name":"uint256","nodeType":"ElementaryTypeName","src":"17180:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11206,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":11204,"name":"getBlockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16298,"src":"17202:25:36","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":11205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17202:27:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17180:49:36"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11208,"name":"supplyLastRewardingBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11189,"src":"17248:24:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":11209,"name":"blockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11203,"src":"17275:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17248:38:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"73657474696e67206c61737420726577617264696e6720626c6f636b20696e207468652070617374206973206e6f7420616c6c6f776564","id":11211,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17288:57:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_6a6f70ab8717c54cc36616a41f4d2f11a60355fdc239fe328ffb57629cd36805","typeString":"literal_string \"setting last rewarding block in the past is not allowed\""},"value":"setting last rewarding block in the past is not allowed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6a6f70ab8717c54cc36616a41f4d2f11a60355fdc239fe328ffb57629cd36805","typeString":"literal_string \"setting last rewarding block in the past is not allowed\""}],"id":11207,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17240:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17240:106:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11213,"nodeType":"ExpressionStatement","src":"17240:106:36"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11215,"name":"borrowLastRewardingBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11191,"src":"17364:24:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":11216,"name":"blockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11203,"src":"17391:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17364:38:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"73657474696e67206c61737420726577617264696e6720626c6f636b20696e207468652070617374206973206e6f7420616c6c6f776564","id":11218,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17404:57:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_6a6f70ab8717c54cc36616a41f4d2f11a60355fdc239fe328ffb57629cd36805","typeString":"literal_string \"setting last rewarding block in the past is not allowed\""},"value":"setting last rewarding block in the past is not allowed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6a6f70ab8717c54cc36616a41f4d2f11a60355fdc239fe328ffb57629cd36805","typeString":"literal_string \"setting last rewarding block in the past is not allowed\""}],"id":11214,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17356:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17356:106:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11220,"nodeType":"ExpressionStatement","src":"17356:106:36"},{"assignments":[11222],"declarations":[{"constant":false,"id":11222,"mutability":"mutable","name":"currentSupplyLastRewardingBlock","nameLocation":"17480:31:36","nodeType":"VariableDeclaration","scope":11309,"src":"17473:38:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":11221,"name":"uint32","nodeType":"ElementaryTypeName","src":"17473:6:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"id":11230,"initialValue":{"expression":{"baseExpression":{"id":11223,"name":"rewardTokenSupplyState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12351,"src":"17514:22:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardToken_$12338_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.RewardToken storage ref)"}},"id":11228,"indexExpression":{"arguments":[{"id":11226,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11187,"src":"17545:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11225,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17537:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11224,"name":"address","nodeType":"ElementaryTypeName","src":"17537:7:36","typeDescriptions":{}}},"id":11227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17537:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17514:39:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage","typeString":"struct RewardsDistributorStorage.RewardToken storage ref"}},"id":11229,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17554:18:36","memberName":"lastRewardingBlock","nodeType":"MemberAccess","referencedDeclaration":12337,"src":"17514:58:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"17473:99:36"},{"assignments":[11232],"declarations":[{"constant":false,"id":11232,"mutability":"mutable","name":"currentBorrowLastRewardingBlock","nameLocation":"17589:31:36","nodeType":"VariableDeclaration","scope":11309,"src":"17582:38:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":11231,"name":"uint32","nodeType":"ElementaryTypeName","src":"17582:6:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"id":11240,"initialValue":{"expression":{"baseExpression":{"id":11233,"name":"rewardTokenBorrowState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12379,"src":"17623:22:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardToken_$12338_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.RewardToken storage ref)"}},"id":11238,"indexExpression":{"arguments":[{"id":11236,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11187,"src":"17654:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11235,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17646:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11234,"name":"address","nodeType":"ElementaryTypeName","src":"17646:7:36","typeDescriptions":{}}},"id":11237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17646:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17623:39:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage","typeString":"struct RewardsDistributorStorage.RewardToken storage ref"}},"id":11239,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17663:18:36","memberName":"lastRewardingBlock","nodeType":"MemberAccess","referencedDeclaration":12337,"src":"17623:58:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"17582:99:36"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":11244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11242,"name":"currentSupplyLastRewardingBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11222,"src":"17713:31:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11243,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17748:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17713:36:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11245,"name":"currentSupplyLastRewardingBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11222,"src":"17753:31:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":11246,"name":"blockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11203,"src":"17787:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17753:45:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17713:85:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7468697320526577617264734469737472696275746f7220697320616c7265616479206c6f636b6564","id":11249,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17812:43:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8","typeString":"literal_string \"this RewardsDistributor is already locked\""},"value":"this RewardsDistributor is already locked"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8","typeString":"literal_string \"this RewardsDistributor is already locked\""}],"id":11241,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17692:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17692:173:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11251,"nodeType":"ExpressionStatement","src":"17692:173:36"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":11255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11253,"name":"currentBorrowLastRewardingBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11232,"src":"17896:31:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11254,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17931:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17896:36:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11256,"name":"currentBorrowLastRewardingBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11232,"src":"17936:31:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":11257,"name":"blockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11203,"src":"17970:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17936:45:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17896:85:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7468697320526577617264734469737472696275746f7220697320616c7265616479206c6f636b6564","id":11260,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17995:43:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8","typeString":"literal_string \"this RewardsDistributor is already locked\""},"value":"this RewardsDistributor is already locked"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8","typeString":"literal_string \"this RewardsDistributor is already locked\""}],"id":11252,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17875:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17875:173:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11262,"nodeType":"ExpressionStatement","src":"17875:173:36"},{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":11265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11263,"name":"currentSupplyLastRewardingBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11222,"src":"18063:31:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11264,"name":"supplyLastRewardingBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11189,"src":"18098:24:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"18063:59:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11285,"nodeType":"IfStatement","src":"18059:268:36","trueBody":{"id":11284,"nodeType":"Block","src":"18124:203:36","statements":[{"expression":{"id":11274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":11266,"name":"rewardTokenSupplyState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12351,"src":"18138:22:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardToken_$12338_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.RewardToken storage ref)"}},"id":11271,"indexExpression":{"arguments":[{"id":11269,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11187,"src":"18169:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11268,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18161:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11267,"name":"address","nodeType":"ElementaryTypeName","src":"18161:7:36","typeDescriptions":{}}},"id":11270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18161:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18138:39:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage","typeString":"struct RewardsDistributorStorage.RewardToken storage ref"}},"id":11272,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"18178:18:36","memberName":"lastRewardingBlock","nodeType":"MemberAccess","referencedDeclaration":12337,"src":"18138:58:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11273,"name":"supplyLastRewardingBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11189,"src":"18199:24:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"18138:85:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":11275,"nodeType":"ExpressionStatement","src":"18138:85:36"},{"eventCall":{"arguments":[{"arguments":[{"id":11279,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11187,"src":"18282:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11278,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18274:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11277,"name":"address","nodeType":"ElementaryTypeName","src":"18274:7:36","typeDescriptions":{}}},"id":11280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18274:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11281,"name":"supplyLastRewardingBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11189,"src":"18291:24:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":11276,"name":"SupplyLastRewardingBlockUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10537,"src":"18242:31:36","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint32_$returns$__$","typeString":"function (address,uint32)"}},"id":11282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18242:74:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11283,"nodeType":"EmitStatement","src":"18237:79:36"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":11288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11286,"name":"currentBorrowLastRewardingBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11232,"src":"18341:31:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11287,"name":"borrowLastRewardingBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11191,"src":"18376:24:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"18341:59:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11308,"nodeType":"IfStatement","src":"18337:268:36","trueBody":{"id":11307,"nodeType":"Block","src":"18402:203:36","statements":[{"expression":{"id":11297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":11289,"name":"rewardTokenBorrowState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12379,"src":"18416:22:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardToken_$12338_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.RewardToken storage ref)"}},"id":11294,"indexExpression":{"arguments":[{"id":11292,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11187,"src":"18447:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11291,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18439:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11290,"name":"address","nodeType":"ElementaryTypeName","src":"18439:7:36","typeDescriptions":{}}},"id":11293,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18439:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18416:39:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage","typeString":"struct RewardsDistributorStorage.RewardToken storage ref"}},"id":11295,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"18456:18:36","memberName":"lastRewardingBlock","nodeType":"MemberAccess","referencedDeclaration":12337,"src":"18416:58:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11296,"name":"borrowLastRewardingBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11191,"src":"18477:24:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"18416:85:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":11298,"nodeType":"ExpressionStatement","src":"18416:85:36"},{"eventCall":{"arguments":[{"arguments":[{"id":11302,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11187,"src":"18560:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11301,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18552:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11300,"name":"address","nodeType":"ElementaryTypeName","src":"18552:7:36","typeDescriptions":{}}},"id":11303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18552:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11304,"name":"borrowLastRewardingBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11191,"src":"18569:24:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":11299,"name":"BorrowLastRewardingBlockUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10544,"src":"18520:31:36","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint32_$returns$__$","typeString":"function (address,uint32)"}},"id":11305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18520:74:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11306,"nodeType":"EmitStatement","src":"18515:79:36"}]}}]},"documentation":{"id":11184,"nodeType":"StructuredDocumentation","src":"16554:369:36","text":" @notice Set REWARD TOKEN last rewarding block for a single market.\n @param vToken market's whose reward token last rewarding block to be updated\n @param supplyLastRewardingBlock New supply-side REWARD TOKEN last rewarding block for market\n @param borrowLastRewardingBlock New borrow-side REWARD TOKEN last rewarding block for market"},"id":11310,"implemented":true,"kind":"function","modifiers":[],"name":"_setLastRewardingBlock","nameLocation":"16937:22:36","nodeType":"FunctionDefinition","parameters":{"id":11192,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11187,"mutability":"mutable","name":"vToken","nameLocation":"16976:6:36","nodeType":"VariableDeclaration","scope":11310,"src":"16969:13:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":11186,"nodeType":"UserDefinedTypeName","pathNode":{"id":11185,"name":"VToken","nameLocations":["16969:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"16969:6:36"},"referencedDeclaration":15506,"src":"16969:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"},{"constant":false,"id":11189,"mutability":"mutable","name":"supplyLastRewardingBlock","nameLocation":"16999:24:36","nodeType":"VariableDeclaration","scope":11310,"src":"16992:31:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":11188,"name":"uint32","nodeType":"ElementaryTypeName","src":"16992:6:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":11191,"mutability":"mutable","name":"borrowLastRewardingBlock","nameLocation":"17040:24:36","nodeType":"VariableDeclaration","scope":11310,"src":"17033:31:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":11190,"name":"uint32","nodeType":"ElementaryTypeName","src":"17033:6:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"16959:111:36"},"returnParameters":{"id":11193,"nodeType":"ParameterList","parameters":[],"src":"17080:0:36"},"scope":12324,"src":"16928:1683:36","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11436,"nodeType":"Block","src":"19206:1864:36","statements":[{"expression":{"arguments":[{"arguments":[{"id":11324,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11314,"src":"19251:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"expression":{"id":11322,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12399,"src":"19224:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_Comptroller_$9130","typeString":"contract Comptroller"}},"id":11323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19236:14:36","memberName":"isMarketListed","nodeType":"MemberAccess","referencedDeclaration":8149,"src":"19224:26:36","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_VToken_$15506_$returns$_t_bool_$","typeString":"function (contract VToken) view external returns (bool)"}},"id":11325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19224:34:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726577617264546f6b656e206d61726b6574206973206e6f74206c6973746564","id":11326,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19260:34:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_2f89df7223863f69f86e7052cbcdf68d52d82b51b73f12fa18c8c279407b9f9f","typeString":"literal_string \"rewardToken market is not listed\""},"value":"rewardToken market is not listed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2f89df7223863f69f86e7052cbcdf68d52d82b51b73f12fa18c8c279407b9f9f","typeString":"literal_string \"rewardToken market is not listed\""}],"id":11321,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19216:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19216:79:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11328,"nodeType":"ExpressionStatement","src":"19216:79:36"},{"assignments":[11330],"declarations":[{"constant":false,"id":11330,"mutability":"mutable","name":"blockTimestamp","nameLocation":"19314:14:36","nodeType":"VariableDeclaration","scope":11436,"src":"19306:22:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11329,"name":"uint256","nodeType":"ElementaryTypeName","src":"19306:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11333,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":11331,"name":"getBlockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16298,"src":"19331:25:36","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":11332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19331:27:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19306:52:36"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11335,"name":"supplyLastRewardingBlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11316,"src":"19390:33:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":11336,"name":"blockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11330,"src":"19426:14:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19390:50:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"73657474696e67206c61737420726577617264696e672074696d657374616d7020696e207468652070617374206973206e6f7420616c6c6f776564","id":11338,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19454:61:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_133e6bf643465df761ef166e81246dc8f30fd9c0ebeb2ba6af193b3bb30494f8","typeString":"literal_string \"setting last rewarding timestamp in the past is not allowed\""},"value":"setting last rewarding timestamp in the past is not allowed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_133e6bf643465df761ef166e81246dc8f30fd9c0ebeb2ba6af193b3bb30494f8","typeString":"literal_string \"setting last rewarding timestamp in the past is not allowed\""}],"id":11334,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19369:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19369:156:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11340,"nodeType":"ExpressionStatement","src":"19369:156:36"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11342,"name":"borrowLastRewardingBlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11318,"src":"19556:33:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":11343,"name":"blockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11330,"src":"19592:14:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19556:50:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"73657474696e67206c61737420726577617264696e672074696d657374616d7020696e207468652070617374206973206e6f7420616c6c6f776564","id":11345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19620:61:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_133e6bf643465df761ef166e81246dc8f30fd9c0ebeb2ba6af193b3bb30494f8","typeString":"literal_string \"setting last rewarding timestamp in the past is not allowed\""},"value":"setting last rewarding timestamp in the past is not allowed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_133e6bf643465df761ef166e81246dc8f30fd9c0ebeb2ba6af193b3bb30494f8","typeString":"literal_string \"setting last rewarding timestamp in the past is not allowed\""}],"id":11341,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19535:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11346,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19535:156:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11347,"nodeType":"ExpressionStatement","src":"19535:156:36"},{"assignments":[11349],"declarations":[{"constant":false,"id":11349,"mutability":"mutable","name":"currentSupplyLastRewardingBlockTimestamp","nameLocation":"19710:40:36","nodeType":"VariableDeclaration","scope":11436,"src":"19702:48:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11348,"name":"uint256","nodeType":"ElementaryTypeName","src":"19702:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11357,"initialValue":{"expression":{"baseExpression":{"id":11350,"name":"rewardTokenSupplyStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12408,"src":"19753:31:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TimeBasedRewardToken_$12345_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.TimeBasedRewardToken storage ref)"}},"id":11355,"indexExpression":{"arguments":[{"id":11353,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11314,"src":"19793:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11352,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19785:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11351,"name":"address","nodeType":"ElementaryTypeName","src":"19785:7:36","typeDescriptions":{}}},"id":11354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19785:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19753:48:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage ref"}},"id":11356,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19815:22:36","memberName":"lastRewardingTimestamp","nodeType":"MemberAccess","referencedDeclaration":12344,"src":"19753:84:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19702:135:36"},{"assignments":[11359],"declarations":[{"constant":false,"id":11359,"mutability":"mutable","name":"currentBorrowLastRewardingBlockTimestamp","nameLocation":"19855:40:36","nodeType":"VariableDeclaration","scope":11436,"src":"19847:48:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11358,"name":"uint256","nodeType":"ElementaryTypeName","src":"19847:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11367,"initialValue":{"expression":{"baseExpression":{"id":11360,"name":"rewardTokenBorrowStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12414,"src":"19898:31:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TimeBasedRewardToken_$12345_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.TimeBasedRewardToken storage ref)"}},"id":11365,"indexExpression":{"arguments":[{"id":11363,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11314,"src":"19938:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11362,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19930:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11361,"name":"address","nodeType":"ElementaryTypeName","src":"19930:7:36","typeDescriptions":{}}},"id":11364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19930:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19898:48:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage ref"}},"id":11366,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19960:22:36","memberName":"lastRewardingTimestamp","nodeType":"MemberAccess","referencedDeclaration":12344,"src":"19898:84:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19847:135:36"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11369,"name":"currentSupplyLastRewardingBlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11349,"src":"20014:40:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11370,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20058:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20014:45:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11372,"name":"currentSupplyLastRewardingBlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11349,"src":"20063:40:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":11373,"name":"blockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11330,"src":"20106:14:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20063:57:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"20014:106:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7468697320526577617264734469737472696275746f7220697320616c7265616479206c6f636b6564","id":11376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"20134:43:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8","typeString":"literal_string \"this RewardsDistributor is already locked\""},"value":"this RewardsDistributor is already locked"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8","typeString":"literal_string \"this RewardsDistributor is already locked\""}],"id":11368,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19993:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19993:194:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11378,"nodeType":"ExpressionStatement","src":"19993:194:36"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11380,"name":"currentBorrowLastRewardingBlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11359,"src":"20218:40:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20262:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20218:45:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11383,"name":"currentBorrowLastRewardingBlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11359,"src":"20267:40:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":11384,"name":"blockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11330,"src":"20310:14:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20267:57:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"20218:106:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7468697320526577617264734469737472696275746f7220697320616c7265616479206c6f636b6564","id":11387,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"20338:43:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8","typeString":"literal_string \"this RewardsDistributor is already locked\""},"value":"this RewardsDistributor is already locked"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8","typeString":"literal_string \"this RewardsDistributor is already locked\""}],"id":11379,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"20197:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20197:194:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11389,"nodeType":"ExpressionStatement","src":"20197:194:36"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11390,"name":"currentSupplyLastRewardingBlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11349,"src":"20406:40:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11391,"name":"supplyLastRewardingBlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11316,"src":"20450:33:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20406:77:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11412,"nodeType":"IfStatement","src":"20402:326:36","trueBody":{"id":11411,"nodeType":"Block","src":"20485:243:36","statements":[{"expression":{"id":11401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":11393,"name":"rewardTokenSupplyStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12408,"src":"20499:31:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TimeBasedRewardToken_$12345_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.TimeBasedRewardToken storage ref)"}},"id":11398,"indexExpression":{"arguments":[{"id":11396,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11314,"src":"20539:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11395,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20531:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11394,"name":"address","nodeType":"ElementaryTypeName","src":"20531:7:36","typeDescriptions":{}}},"id":11397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20531:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20499:48:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage ref"}},"id":11399,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"20548:22:36","memberName":"lastRewardingTimestamp","nodeType":"MemberAccess","referencedDeclaration":12344,"src":"20499:71:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11400,"name":"supplyLastRewardingBlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11316,"src":"20573:33:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20499:107:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11402,"nodeType":"ExpressionStatement","src":"20499:107:36"},{"eventCall":{"arguments":[{"arguments":[{"id":11406,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11314,"src":"20674:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11405,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20666:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11404,"name":"address","nodeType":"ElementaryTypeName","src":"20666:7:36","typeDescriptions":{}}},"id":11407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20666:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11408,"name":"supplyLastRewardingBlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11316,"src":"20683:33:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11403,"name":"SupplyLastRewardingBlockTimestampUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10551,"src":"20625:40:36","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":11409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20625:92:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11410,"nodeType":"EmitStatement","src":"20620:97:36"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11413,"name":"currentBorrowLastRewardingBlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11359,"src":"20742:40:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11414,"name":"borrowLastRewardingBlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11318,"src":"20786:33:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20742:77:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11435,"nodeType":"IfStatement","src":"20738:326:36","trueBody":{"id":11434,"nodeType":"Block","src":"20821:243:36","statements":[{"expression":{"id":11424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":11416,"name":"rewardTokenBorrowStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12414,"src":"20835:31:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TimeBasedRewardToken_$12345_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.TimeBasedRewardToken storage ref)"}},"id":11421,"indexExpression":{"arguments":[{"id":11419,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11314,"src":"20875:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11418,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20867:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11417,"name":"address","nodeType":"ElementaryTypeName","src":"20867:7:36","typeDescriptions":{}}},"id":11420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20867:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20835:48:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage ref"}},"id":11422,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"20884:22:36","memberName":"lastRewardingTimestamp","nodeType":"MemberAccess","referencedDeclaration":12344,"src":"20835:71:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11423,"name":"borrowLastRewardingBlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11318,"src":"20909:33:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20835:107:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11425,"nodeType":"ExpressionStatement","src":"20835:107:36"},{"eventCall":{"arguments":[{"arguments":[{"id":11429,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11314,"src":"21010:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11428,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21002:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11427,"name":"address","nodeType":"ElementaryTypeName","src":"21002:7:36","typeDescriptions":{}}},"id":11430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21002:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11431,"name":"borrowLastRewardingBlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11318,"src":"21019:33:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11426,"name":"BorrowLastRewardingBlockTimestampUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"20961:40:36","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":11432,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20961:92:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11433,"nodeType":"EmitStatement","src":"20956:97:36"}]}}]},"documentation":{"id":11311,"nodeType":"StructuredDocumentation","src":"18617:403:36","text":" @notice Set REWARD TOKEN last rewarding timestamp for a single market.\n @param vToken market's whose reward token last rewarding timestamp to be updated\n @param supplyLastRewardingBlockTimestamp New supply-side REWARD TOKEN last rewarding timestamp for market\n @param borrowLastRewardingBlockTimestamp New borrow-side REWARD TOKEN last rewarding timestamp for market"},"id":11437,"implemented":true,"kind":"function","modifiers":[],"name":"_setLastRewardingBlockTimestamp","nameLocation":"19034:31:36","nodeType":"FunctionDefinition","parameters":{"id":11319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11314,"mutability":"mutable","name":"vToken","nameLocation":"19082:6:36","nodeType":"VariableDeclaration","scope":11437,"src":"19075:13:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":11313,"nodeType":"UserDefinedTypeName","pathNode":{"id":11312,"name":"VToken","nameLocations":["19075:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"19075:6:36"},"referencedDeclaration":15506,"src":"19075:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"},{"constant":false,"id":11316,"mutability":"mutable","name":"supplyLastRewardingBlockTimestamp","nameLocation":"19106:33:36","nodeType":"VariableDeclaration","scope":11437,"src":"19098:41:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11315,"name":"uint256","nodeType":"ElementaryTypeName","src":"19098:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11318,"mutability":"mutable","name":"borrowLastRewardingBlockTimestamp","nameLocation":"19157:33:36","nodeType":"VariableDeclaration","scope":11437,"src":"19149:41:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11317,"name":"uint256","nodeType":"ElementaryTypeName","src":"19149:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19065:131:36"},"returnParameters":{"id":11320,"nodeType":"ParameterList","parameters":[],"src":"19206:0:36"},"scope":12324,"src":"19025:2045:36","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11528,"nodeType":"Block","src":"21459:1301:36","statements":[{"expression":{"arguments":[{"arguments":[{"id":11451,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11441,"src":"21504:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"expression":{"id":11449,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12399,"src":"21477:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_Comptroller_$9130","typeString":"contract Comptroller"}},"id":11450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21489:14:36","memberName":"isMarketListed","nodeType":"MemberAccess","referencedDeclaration":8149,"src":"21477:26:36","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_VToken_$15506_$returns$_t_bool_$","typeString":"function (contract VToken) view external returns (bool)"}},"id":11452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21477:34:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726577617264546f6b656e206d61726b6574206973206e6f74206c6973746564","id":11453,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"21513:34:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_2f89df7223863f69f86e7052cbcdf68d52d82b51b73f12fa18c8c279407b9f9f","typeString":"literal_string \"rewardToken market is not listed\""},"value":"rewardToken market is not listed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2f89df7223863f69f86e7052cbcdf68d52d82b51b73f12fa18c8c279407b9f9f","typeString":"literal_string \"rewardToken market is not listed\""}],"id":11448,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"21469:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21469:79:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11455,"nodeType":"ExpressionStatement","src":"21469:79:36"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":11456,"name":"rewardTokenSupplySpeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12373,"src":"21563:23:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11461,"indexExpression":{"arguments":[{"id":11459,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11441,"src":"21595:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11458,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21587:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11457,"name":"address","nodeType":"ElementaryTypeName","src":"21587:7:36","typeDescriptions":{}}},"id":11460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21587:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21563:40:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11462,"name":"supplySpeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11443,"src":"21607:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21563:55:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11486,"nodeType":"IfStatement","src":"21559:547:36","trueBody":{"id":11485,"nodeType":"Block","src":"21620:486:36","statements":[{"expression":{"arguments":[{"arguments":[{"id":11467,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11441,"src":"21906:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11466,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21898:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11465,"name":"address","nodeType":"ElementaryTypeName","src":"21898:7:36","typeDescriptions":{}}},"id":11468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21898:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":11464,"name":"_updateRewardTokenSupplyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12002,"src":"21868:29:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":11469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21868:46:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11470,"nodeType":"ExpressionStatement","src":"21868:46:36"},{"expression":{"id":11478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11471,"name":"rewardTokenSupplySpeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12373,"src":"21972:23:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11476,"indexExpression":{"arguments":[{"id":11474,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11441,"src":"22004:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11473,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21996:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11472,"name":"address","nodeType":"ElementaryTypeName","src":"21996:7:36","typeDescriptions":{}}},"id":11475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21996:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21972:40:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11477,"name":"supplySpeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11443,"src":"22015:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21972:54:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11479,"nodeType":"ExpressionStatement","src":"21972:54:36"},{"eventCall":{"arguments":[{"id":11481,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11441,"src":"22075:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"id":11482,"name":"supplySpeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11443,"src":"22083:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11480,"name":"RewardTokenSupplySpeedUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10483,"src":"22045:29:36","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_VToken_$15506_$_t_uint256_$returns$__$","typeString":"function (contract VToken,uint256)"}},"id":11483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22045:50:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11484,"nodeType":"EmitStatement","src":"22040:55:36"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":11487,"name":"rewardTokenBorrowSpeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12368,"src":"22120:23:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11492,"indexExpression":{"arguments":[{"id":11490,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11441,"src":"22152:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11489,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22144:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11488,"name":"address","nodeType":"ElementaryTypeName","src":"22144:7:36","typeDescriptions":{}}},"id":11491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22144:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22120:40:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11493,"name":"borrowSpeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11445,"src":"22164:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22120:55:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11527,"nodeType":"IfStatement","src":"22116:638:36","trueBody":{"id":11526,"nodeType":"Block","src":"22177:577:36","statements":[{"assignments":[11497],"declarations":[{"constant":false,"id":11497,"mutability":"mutable","name":"borrowIndex","nameLocation":"22436:11:36","nodeType":"VariableDeclaration","scope":11526,"src":"22425:22:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":11496,"nodeType":"UserDefinedTypeName","pathNode":{"id":11495,"name":"Exp","nameLocations":["22425:3:36"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"22425:3:36"},"referencedDeclaration":9645,"src":"22425:3:36","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":11503,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":11499,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11441,"src":"22466:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":11500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22473:11:36","memberName":"borrowIndex","nodeType":"MemberAccess","referencedDeclaration":15560,"src":"22466:18:36","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":11501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22466:20:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11498,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"22450:3:36","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":11502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["22456:8:36"],"names":["mantissa"],"nodeType":"FunctionCall","src":"22450:39:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"VariableDeclarationStatement","src":"22425:64:36"},{"expression":{"arguments":[{"arguments":[{"id":11507,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11441,"src":"22541:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11506,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22533:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11505,"name":"address","nodeType":"ElementaryTypeName","src":"22533:7:36","typeDescriptions":{}}},"id":11508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22533:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11509,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11497,"src":"22550:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":11504,"name":"_updateRewardTokenBorrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12211,"src":"22503:29:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_Exp_$9645_memory_ptr_$returns$__$","typeString":"function (address,struct ExponentialNoError.Exp memory)"}},"id":11510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22503:59:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11511,"nodeType":"ExpressionStatement","src":"22503:59:36"},{"expression":{"id":11519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11512,"name":"rewardTokenBorrowSpeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12368,"src":"22620:23:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11517,"indexExpression":{"arguments":[{"id":11515,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11441,"src":"22652:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":11514,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22644:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11513,"name":"address","nodeType":"ElementaryTypeName","src":"22644:7:36","typeDescriptions":{}}},"id":11516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22644:15:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22620:40:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11518,"name":"borrowSpeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11445,"src":"22663:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22620:54:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11520,"nodeType":"ExpressionStatement","src":"22620:54:36"},{"eventCall":{"arguments":[{"id":11522,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11441,"src":"22723:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"id":11523,"name":"borrowSpeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11445,"src":"22731:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11521,"name":"RewardTokenBorrowSpeedUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10491,"src":"22693:29:36","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_VToken_$15506_$_t_uint256_$returns$__$","typeString":"function (contract VToken,uint256)"}},"id":11524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22693:50:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11525,"nodeType":"EmitStatement","src":"22688:55:36"}]}}]},"documentation":{"id":11438,"nodeType":"StructuredDocumentation","src":"21076:282:36","text":" @notice Set REWARD TOKEN speed for a single market.\n @param vToken market's whose reward token rate to be updated\n @param supplySpeed New supply-side REWARD TOKEN speed for market\n @param borrowSpeed New borrow-side REWARD TOKEN speed for market"},"id":11529,"implemented":true,"kind":"function","modifiers":[],"name":"_setRewardTokenSpeed","nameLocation":"21372:20:36","nodeType":"FunctionDefinition","parameters":{"id":11446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11441,"mutability":"mutable","name":"vToken","nameLocation":"21400:6:36","nodeType":"VariableDeclaration","scope":11529,"src":"21393:13:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":11440,"nodeType":"UserDefinedTypeName","pathNode":{"id":11439,"name":"VToken","nameLocations":["21393:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"21393:6:36"},"referencedDeclaration":15506,"src":"21393:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"},{"constant":false,"id":11443,"mutability":"mutable","name":"supplySpeed","nameLocation":"21416:11:36","nodeType":"VariableDeclaration","scope":11529,"src":"21408:19:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11442,"name":"uint256","nodeType":"ElementaryTypeName","src":"21408:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11445,"mutability":"mutable","name":"borrowSpeed","nameLocation":"21437:11:36","nodeType":"VariableDeclaration","scope":11529,"src":"21429:19:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11444,"name":"uint256","nodeType":"ElementaryTypeName","src":"21429:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21392:57:36"},"returnParameters":{"id":11447,"nodeType":"ParameterList","parameters":[],"src":"21459:0:36"},"scope":12324,"src":"21363:1397:36","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11640,"nodeType":"Block","src":"23109:1544:36","statements":[{"assignments":[11539],"declarations":[{"constant":false,"id":11539,"mutability":"mutable","name":"supplyState","nameLocation":"23139:11:36","nodeType":"VariableDeclaration","scope":11640,"src":"23119:31:36","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken"},"typeName":{"id":11538,"nodeType":"UserDefinedTypeName","pathNode":{"id":11537,"name":"RewardToken","nameLocations":["23119:11:36"],"nodeType":"IdentifierPath","referencedDeclaration":12338,"src":"23119:11:36"},"referencedDeclaration":12338,"src":"23119:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken"}},"visibility":"internal"}],"id":11543,"initialValue":{"baseExpression":{"id":11540,"name":"rewardTokenSupplyState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12351,"src":"23153:22:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardToken_$12338_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.RewardToken storage ref)"}},"id":11542,"indexExpression":{"id":11541,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11532,"src":"23176:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23153:30:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage","typeString":"struct RewardsDistributorStorage.RewardToken storage ref"}},"nodeType":"VariableDeclarationStatement","src":"23119:64:36"},{"assignments":[11546],"declarations":[{"constant":false,"id":11546,"mutability":"mutable","name":"supplyStateTimeBased","nameLocation":"23222:20:36","nodeType":"VariableDeclaration","scope":11640,"src":"23193:49:36","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken"},"typeName":{"id":11545,"nodeType":"UserDefinedTypeName","pathNode":{"id":11544,"name":"TimeBasedRewardToken","nameLocations":["23193:20:36"],"nodeType":"IdentifierPath","referencedDeclaration":12345,"src":"23193:20:36"},"referencedDeclaration":12345,"src":"23193:20:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken"}},"visibility":"internal"}],"id":11550,"initialValue":{"baseExpression":{"id":11547,"name":"rewardTokenSupplyStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12408,"src":"23245:31:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TimeBasedRewardToken_$12345_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.TimeBasedRewardToken storage ref)"}},"id":11549,"indexExpression":{"id":11548,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11532,"src":"23277:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23245:39:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage ref"}},"nodeType":"VariableDeclarationStatement","src":"23193:91:36"},{"assignments":[11552],"declarations":[{"constant":false,"id":11552,"mutability":"mutable","name":"supplyIndex","nameLocation":"23303:11:36","nodeType":"VariableDeclaration","scope":11640,"src":"23295:19:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11551,"name":"uint256","nodeType":"ElementaryTypeName","src":"23295:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11559,"initialValue":{"condition":{"id":11553,"name":"isTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16222,"src":"23317:11:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":11556,"name":"supplyState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11539,"src":"23360:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken storage pointer"}},"id":11557,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23372:5:36","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":12333,"src":"23360:17:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"id":11558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"23317:60:36","trueExpression":{"expression":{"id":11554,"name":"supplyStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11546,"src":"23331:20:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage pointer"}},"id":11555,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23352:5:36","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":12340,"src":"23331:26:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"nodeType":"VariableDeclarationStatement","src":"23295:82:36"},{"assignments":[11561],"declarations":[{"constant":false,"id":11561,"mutability":"mutable","name":"supplierIndex","nameLocation":"23395:13:36","nodeType":"VariableDeclaration","scope":11640,"src":"23387:21:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11560,"name":"uint256","nodeType":"ElementaryTypeName","src":"23387:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11567,"initialValue":{"baseExpression":{"baseExpression":{"id":11562,"name":"rewardTokenSupplierIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12358,"src":"23411:24:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":11564,"indexExpression":{"id":11563,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11532,"src":"23436:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23411:32:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11566,"indexExpression":{"id":11565,"name":"supplier","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11534,"src":"23444:8:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23411:42:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23387:66:36"},{"expression":{"id":11574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":11568,"name":"rewardTokenSupplierIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12358,"src":"23567:24:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":11571,"indexExpression":{"id":11569,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11532,"src":"23592:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23567:32:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11572,"indexExpression":{"id":11570,"name":"supplier","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11534,"src":"23600:8:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23567:42:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11573,"name":"supplyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11552,"src":"23612:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23567:56:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11575,"nodeType":"ExpressionStatement","src":"23567:56:36"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11576,"name":"supplierIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11561,"src":"23638:13:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11577,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23655:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"23638:18:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11579,"name":"supplyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11552,"src":"23660:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":11580,"name":"INITIAL_INDEX","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10447,"src":"23675:13:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"23660:28:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"23638:50:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11588,"nodeType":"IfStatement","src":"23634:361:36","trueBody":{"id":11587,"nodeType":"Block","src":"23690:305:36","statements":[{"expression":{"id":11585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11583,"name":"supplierIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11561,"src":"23955:13:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11584,"name":"INITIAL_INDEX","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10447,"src":"23971:13:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"23955:29:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11586,"nodeType":"ExpressionStatement","src":"23955:29:36"}]}},{"assignments":[11591],"declarations":[{"constant":false,"id":11591,"mutability":"mutable","name":"deltaIndex","nameLocation":"24108:10:36","nodeType":"VariableDeclaration","scope":11640,"src":"24094:24:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":11590,"nodeType":"UserDefinedTypeName","pathNode":{"id":11589,"name":"Double","nameLocations":["24094:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"24094:6:36"},"referencedDeclaration":9648,"src":"24094:6:36","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"}],"id":11598,"initialValue":{"arguments":[{"arguments":[{"id":11594,"name":"supplyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11552,"src":"24145:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11595,"name":"supplierIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11561,"src":"24158:13:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11593,"name":"sub_","nodeType":"Identifier","overloadedDeclarations":[9881,9903,9917],"referencedDeclaration":9917,"src":"24140:4:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24140:32:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11592,"name":"Double","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9648,"src":"24121:6:36","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Double_$9648_storage_ptr_$","typeString":"type(struct ExponentialNoError.Double storage pointer)"}},"id":11597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["24130:8:36"],"names":["mantissa"],"nodeType":"FunctionCall","src":"24121:54:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"nodeType":"VariableDeclarationStatement","src":"24094:81:36"},{"assignments":[11600],"declarations":[{"constant":false,"id":11600,"mutability":"mutable","name":"supplierTokens","nameLocation":"24194:14:36","nodeType":"VariableDeclaration","scope":11640,"src":"24186:22:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11599,"name":"uint256","nodeType":"ElementaryTypeName","src":"24186:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11607,"initialValue":{"arguments":[{"id":11605,"name":"supplier","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11534,"src":"24236:8:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":11602,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11532,"src":"24218:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":11601,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"24211:6:36","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":11603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24211:14:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":11604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24226:9:36","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":13641,"src":"24211:24:36","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":11606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24211:34:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"24186:59:36"},{"assignments":[11609],"declarations":[{"constant":false,"id":11609,"mutability":"mutable","name":"supplierDelta","nameLocation":"24339:13:36","nodeType":"VariableDeclaration","scope":11640,"src":"24331:21:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11608,"name":"uint256","nodeType":"ElementaryTypeName","src":"24331:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11614,"initialValue":{"arguments":[{"id":11611,"name":"supplierTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11600,"src":"24360:14:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11612,"name":"deltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11591,"src":"24376:10:36","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}],"id":11610,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":10043,"src":"24355:4:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_struct$_Double_$9648_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,struct ExponentialNoError.Double memory) pure returns (uint256)"}},"id":11613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24355:32:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"24331:56:36"},{"assignments":[11616],"declarations":[{"constant":false,"id":11616,"mutability":"mutable","name":"supplierAccrued","nameLocation":"24406:15:36","nodeType":"VariableDeclaration","scope":11640,"src":"24398:23:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11615,"name":"uint256","nodeType":"ElementaryTypeName","src":"24398:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11623,"initialValue":{"arguments":[{"baseExpression":{"id":11618,"name":"rewardTokenAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12363,"src":"24429:18:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11620,"indexExpression":{"id":11619,"name":"supplier","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11534,"src":"24448:8:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24429:28:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11621,"name":"supplierDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11609,"src":"24459:13:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11617,"name":"add_","nodeType":"Identifier","overloadedDeclarations":[9823,9845,9859],"referencedDeclaration":9859,"src":"24424:4:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24424:49:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"24398:75:36"},{"expression":{"id":11628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11624,"name":"rewardTokenAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12363,"src":"24483:18:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11626,"indexExpression":{"id":11625,"name":"supplier","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11534,"src":"24502:8:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24483:28:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11627,"name":"supplierAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11616,"src":"24514:15:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24483:46:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11629,"nodeType":"ExpressionStatement","src":"24483:46:36"},{"eventCall":{"arguments":[{"arguments":[{"id":11632,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11532,"src":"24583:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":11631,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"24576:6:36","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":11633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24576:14:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"id":11634,"name":"supplier","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11534,"src":"24592:8:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11635,"name":"supplierDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11609,"src":"24602:13:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11636,"name":"supplierAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11616,"src":"24617:15:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11637,"name":"supplyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11552,"src":"24634:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11630,"name":"DistributedSupplierRewardToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10461,"src":"24545:30:36","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_VToken_$15506_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (contract VToken,address,uint256,uint256,uint256)"}},"id":11638,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24545:101:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11639,"nodeType":"EmitStatement","src":"24540:106:36"}]},"documentation":{"id":11530,"nodeType":"StructuredDocumentation","src":"22766:255:36","text":" @notice Calculate REWARD TOKEN accrued by a supplier and possibly transfer it to them.\n @param vToken The market in which the supplier is interacting\n @param supplier The address of the supplier to distribute REWARD TOKEN to"},"id":11641,"implemented":true,"kind":"function","modifiers":[],"name":"_distributeSupplierRewardToken","nameLocation":"23035:30:36","nodeType":"FunctionDefinition","parameters":{"id":11535,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11532,"mutability":"mutable","name":"vToken","nameLocation":"23074:6:36","nodeType":"VariableDeclaration","scope":11641,"src":"23066:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11531,"name":"address","nodeType":"ElementaryTypeName","src":"23066:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11534,"mutability":"mutable","name":"supplier","nameLocation":"23090:8:36","nodeType":"VariableDeclaration","scope":11641,"src":"23082:16:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11533,"name":"address","nodeType":"ElementaryTypeName","src":"23082:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"23065:34:36"},"returnParameters":{"id":11536,"nodeType":"ParameterList","parameters":[],"src":"23109:0:36"},"scope":12324,"src":"23026:1627:36","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11763,"nodeType":"Block","src":"25106:1654:36","statements":[{"assignments":[11654],"declarations":[{"constant":false,"id":11654,"mutability":"mutable","name":"borrowState","nameLocation":"25136:11:36","nodeType":"VariableDeclaration","scope":11763,"src":"25116:31:36","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken"},"typeName":{"id":11653,"nodeType":"UserDefinedTypeName","pathNode":{"id":11652,"name":"RewardToken","nameLocations":["25116:11:36"],"nodeType":"IdentifierPath","referencedDeclaration":12338,"src":"25116:11:36"},"referencedDeclaration":12338,"src":"25116:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken"}},"visibility":"internal"}],"id":11658,"initialValue":{"baseExpression":{"id":11655,"name":"rewardTokenBorrowState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12379,"src":"25150:22:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardToken_$12338_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.RewardToken storage ref)"}},"id":11657,"indexExpression":{"id":11656,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11644,"src":"25173:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25150:30:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage","typeString":"struct RewardsDistributorStorage.RewardToken storage ref"}},"nodeType":"VariableDeclarationStatement","src":"25116:64:36"},{"assignments":[11661],"declarations":[{"constant":false,"id":11661,"mutability":"mutable","name":"borrowStateTimeBased","nameLocation":"25219:20:36","nodeType":"VariableDeclaration","scope":11763,"src":"25190:49:36","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken"},"typeName":{"id":11660,"nodeType":"UserDefinedTypeName","pathNode":{"id":11659,"name":"TimeBasedRewardToken","nameLocations":["25190:20:36"],"nodeType":"IdentifierPath","referencedDeclaration":12345,"src":"25190:20:36"},"referencedDeclaration":12345,"src":"25190:20:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken"}},"visibility":"internal"}],"id":11665,"initialValue":{"baseExpression":{"id":11662,"name":"rewardTokenBorrowStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12414,"src":"25242:31:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TimeBasedRewardToken_$12345_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.TimeBasedRewardToken storage ref)"}},"id":11664,"indexExpression":{"id":11663,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11644,"src":"25274:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25242:39:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage ref"}},"nodeType":"VariableDeclarationStatement","src":"25190:91:36"},{"assignments":[11667],"declarations":[{"constant":false,"id":11667,"mutability":"mutable","name":"borrowIndex","nameLocation":"25300:11:36","nodeType":"VariableDeclaration","scope":11763,"src":"25292:19:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11666,"name":"uint256","nodeType":"ElementaryTypeName","src":"25292:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11674,"initialValue":{"condition":{"id":11668,"name":"isTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16222,"src":"25314:11:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":11671,"name":"borrowState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11654,"src":"25357:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken storage pointer"}},"id":11672,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25369:5:36","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":12333,"src":"25357:17:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"id":11673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"25314:60:36","trueExpression":{"expression":{"id":11669,"name":"borrowStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11661,"src":"25328:20:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage pointer"}},"id":11670,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25349:5:36","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":12340,"src":"25328:26:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"nodeType":"VariableDeclarationStatement","src":"25292:82:36"},{"assignments":[11676],"declarations":[{"constant":false,"id":11676,"mutability":"mutable","name":"borrowerIndex","nameLocation":"25392:13:36","nodeType":"VariableDeclaration","scope":11763,"src":"25384:21:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11675,"name":"uint256","nodeType":"ElementaryTypeName","src":"25384:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11682,"initialValue":{"baseExpression":{"baseExpression":{"id":11677,"name":"rewardTokenBorrowerIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12396,"src":"25408:24:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":11679,"indexExpression":{"id":11678,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11644,"src":"25433:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25408:32:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11681,"indexExpression":{"id":11680,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11646,"src":"25441:8:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25408:42:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"25384:66:36"},{"expression":{"id":11689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":11683,"name":"rewardTokenBorrowerIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12396,"src":"25565:24:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":11686,"indexExpression":{"id":11684,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11644,"src":"25590:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25565:32:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11687,"indexExpression":{"id":11685,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11646,"src":"25598:8:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"25565:42:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11688,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11667,"src":"25610:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25565:56:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11690,"nodeType":"ExpressionStatement","src":"25565:56:36"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11691,"name":"borrowerIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11676,"src":"25636:13:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11692,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25653:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"25636:18:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11694,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11667,"src":"25658:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":11695,"name":"INITIAL_INDEX","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10447,"src":"25673:13:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"25658:28:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"25636:50:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11703,"nodeType":"IfStatement","src":"25632:361:36","trueBody":{"id":11702,"nodeType":"Block","src":"25688:305:36","statements":[{"expression":{"id":11700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11698,"name":"borrowerIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11676,"src":"25953:13:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11699,"name":"INITIAL_INDEX","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10447,"src":"25969:13:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"25953:29:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11701,"nodeType":"ExpressionStatement","src":"25953:29:36"}]}},{"assignments":[11706],"declarations":[{"constant":false,"id":11706,"mutability":"mutable","name":"deltaIndex","nameLocation":"26113:10:36","nodeType":"VariableDeclaration","scope":11763,"src":"26099:24:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":11705,"nodeType":"UserDefinedTypeName","pathNode":{"id":11704,"name":"Double","nameLocations":["26099:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"26099:6:36"},"referencedDeclaration":9648,"src":"26099:6:36","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"}],"id":11713,"initialValue":{"arguments":[{"arguments":[{"id":11709,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11667,"src":"26150:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11710,"name":"borrowerIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11676,"src":"26163:13:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11708,"name":"sub_","nodeType":"Identifier","overloadedDeclarations":[9881,9903,9917],"referencedDeclaration":9917,"src":"26145:4:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26145:32:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11707,"name":"Double","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9648,"src":"26126:6:36","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Double_$9648_storage_ptr_$","typeString":"type(struct ExponentialNoError.Double storage pointer)"}},"id":11712,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["26135:8:36"],"names":["mantissa"],"nodeType":"FunctionCall","src":"26126:54:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"nodeType":"VariableDeclarationStatement","src":"26099:81:36"},{"assignments":[11715],"declarations":[{"constant":false,"id":11715,"mutability":"mutable","name":"borrowerAmount","nameLocation":"26199:14:36","nodeType":"VariableDeclaration","scope":11763,"src":"26191:22:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11714,"name":"uint256","nodeType":"ElementaryTypeName","src":"26191:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11725,"initialValue":{"arguments":[{"arguments":[{"id":11721,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11646,"src":"26256:8:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":11718,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11644,"src":"26228:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":11717,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"26221:6:36","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":11719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26221:14:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":11720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26236:19:36","memberName":"borrowBalanceStored","nodeType":"MemberAccess","referencedDeclaration":13728,"src":"26221:34:36","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":11722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26221:44:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11723,"name":"marketBorrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11649,"src":"26267:17:36","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":11716,"name":"div_","nodeType":"Identifier","overloadedDeclarations":[10082,10102,10122,10147,10167,10187,10201],"referencedDeclaration":10122,"src":"26216:4:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_struct$_Exp_$9645_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,struct ExponentialNoError.Exp memory) pure returns (uint256)"}},"id":11724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26216:69:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"26191:94:36"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11726,"name":"borrowerAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11715,"src":"26381:14:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":11727,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26399:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"26381:19:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11762,"nodeType":"IfStatement","src":"26377:377:36","trueBody":{"id":11761,"nodeType":"Block","src":"26402:352:36","statements":[{"assignments":[11730],"declarations":[{"constant":false,"id":11730,"mutability":"mutable","name":"borrowerDelta","nameLocation":"26424:13:36","nodeType":"VariableDeclaration","scope":11761,"src":"26416:21:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11729,"name":"uint256","nodeType":"ElementaryTypeName","src":"26416:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11735,"initialValue":{"arguments":[{"id":11732,"name":"borrowerAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11715,"src":"26445:14:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11733,"name":"deltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11706,"src":"26461:10:36","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}],"id":11731,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":10043,"src":"26440:4:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_struct$_Double_$9648_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,struct ExponentialNoError.Double memory) pure returns (uint256)"}},"id":11734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26440:32:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"26416:56:36"},{"assignments":[11737],"declarations":[{"constant":false,"id":11737,"mutability":"mutable","name":"borrowerAccrued","nameLocation":"26495:15:36","nodeType":"VariableDeclaration","scope":11761,"src":"26487:23:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11736,"name":"uint256","nodeType":"ElementaryTypeName","src":"26487:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11744,"initialValue":{"arguments":[{"baseExpression":{"id":11739,"name":"rewardTokenAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12363,"src":"26518:18:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11741,"indexExpression":{"id":11740,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11646,"src":"26537:8:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26518:28:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11742,"name":"borrowerDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11730,"src":"26548:13:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11738,"name":"add_","nodeType":"Identifier","overloadedDeclarations":[9823,9845,9859],"referencedDeclaration":9859,"src":"26513:4:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26513:49:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"26487:75:36"},{"expression":{"id":11749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11745,"name":"rewardTokenAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12363,"src":"26576:18:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11747,"indexExpression":{"id":11746,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11646,"src":"26595:8:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26576:28:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11748,"name":"borrowerAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11737,"src":"26607:15:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26576:46:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11750,"nodeType":"ExpressionStatement","src":"26576:46:36"},{"eventCall":{"arguments":[{"arguments":[{"id":11753,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11644,"src":"26680:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":11752,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"26673:6:36","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":11754,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26673:14:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},{"id":11755,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11646,"src":"26689:8:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11756,"name":"borrowerDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11730,"src":"26699:13:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11757,"name":"borrowerAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11737,"src":"26714:15:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11758,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11667,"src":"26731:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11751,"name":"DistributedBorrowerRewardToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10475,"src":"26642:30:36","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_VToken_$15506_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (contract VToken,address,uint256,uint256,uint256)"}},"id":11759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26642:101:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11760,"nodeType":"EmitStatement","src":"26637:106:36"}]}}]},"documentation":{"id":11642,"nodeType":"StructuredDocumentation","src":"24659:329:36","text":" @notice Calculate reward token accrued by a borrower and possibly transfer it to them.\n @param vToken The market in which the borrower is interacting\n @param borrower The address of the borrower to distribute REWARD TOKEN to\n @param marketBorrowIndex The current global borrow index of vToken"},"id":11764,"implemented":true,"kind":"function","modifiers":[],"name":"_distributeBorrowerRewardToken","nameLocation":"25002:30:36","nodeType":"FunctionDefinition","parameters":{"id":11650,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11644,"mutability":"mutable","name":"vToken","nameLocation":"25041:6:36","nodeType":"VariableDeclaration","scope":11764,"src":"25033:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11643,"name":"address","nodeType":"ElementaryTypeName","src":"25033:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11646,"mutability":"mutable","name":"borrower","nameLocation":"25057:8:36","nodeType":"VariableDeclaration","scope":11764,"src":"25049:16:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11645,"name":"address","nodeType":"ElementaryTypeName","src":"25049:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11649,"mutability":"mutable","name":"marketBorrowIndex","nameLocation":"25078:17:36","nodeType":"VariableDeclaration","scope":11764,"src":"25067:28:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":11648,"nodeType":"UserDefinedTypeName","pathNode":{"id":11647,"name":"Exp","nameLocations":["25067:3:36"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"25067:3:36"},"referencedDeclaration":9645,"src":"25067:3:36","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"25032:64:36"},"returnParameters":{"id":11651,"nodeType":"ParameterList","parameters":[],"src":"25106:0:36"},"scope":12324,"src":"24993:1767:36","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11804,"nodeType":"Block","src":"27229:251:36","statements":[{"assignments":[11775],"declarations":[{"constant":false,"id":11775,"mutability":"mutable","name":"rewardTokenRemaining","nameLocation":"27247:20:36","nodeType":"VariableDeclaration","scope":11804,"src":"27239:28:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11774,"name":"uint256","nodeType":"ElementaryTypeName","src":"27239:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11783,"initialValue":{"arguments":[{"arguments":[{"id":11780,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"27300:4:36","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}],"id":11779,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27292:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11778,"name":"address","nodeType":"ElementaryTypeName","src":"27292:7:36","typeDescriptions":{}}},"id":11781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27292:13:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":11776,"name":"rewardToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"27270:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":11777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27282:9:36","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1309,"src":"27270:21:36","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":11782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27270:36:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"27239:67:36"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11784,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11769,"src":"27320:6:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11785,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27329:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"27320:10:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11787,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11769,"src":"27334:6:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":11788,"name":"rewardTokenRemaining","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11775,"src":"27344:20:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27334:30:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"27320:44:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11801,"nodeType":"IfStatement","src":"27316:135:36","trueBody":{"id":11800,"nodeType":"Block","src":"27366:85:36","statements":[{"expression":{"arguments":[{"id":11794,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11767,"src":"27405:4:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11795,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11769,"src":"27411:6:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11791,"name":"rewardToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"27380:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":11793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27392:12:36","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":2097,"src":"27380:24:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$1352_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20Upgradeable_$1352_$","typeString":"function (contract IERC20Upgradeable,address,uint256)"}},"id":11796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27380:38:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11797,"nodeType":"ExpressionStatement","src":"27380:38:36"},{"expression":{"hexValue":"30","id":11798,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27439:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":11773,"id":11799,"nodeType":"Return","src":"27432:8:36"}]}},{"expression":{"id":11802,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11769,"src":"27467:6:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11773,"id":11803,"nodeType":"Return","src":"27460:13:36"}]},"documentation":{"id":11765,"nodeType":"StructuredDocumentation","src":"26766:374:36","text":" @notice Transfer REWARD TOKEN to the user.\n @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all.\n @param user The address of the user to transfer REWARD TOKEN to\n @param amount The amount of REWARD TOKEN to (possibly) transfer\n @return The amount of REWARD TOKEN which was NOT transferred to the user"},"id":11805,"implemented":true,"kind":"function","modifiers":[],"name":"_grantRewardToken","nameLocation":"27154:17:36","nodeType":"FunctionDefinition","parameters":{"id":11770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11767,"mutability":"mutable","name":"user","nameLocation":"27180:4:36","nodeType":"VariableDeclaration","scope":11805,"src":"27172:12:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11766,"name":"address","nodeType":"ElementaryTypeName","src":"27172:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11769,"mutability":"mutable","name":"amount","nameLocation":"27194:6:36","nodeType":"VariableDeclaration","scope":11805,"src":"27186:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11768,"name":"uint256","nodeType":"ElementaryTypeName","src":"27186:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27171:30:36"},"returnParameters":{"id":11773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11772,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11805,"src":"27220:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11771,"name":"uint256","nodeType":"ElementaryTypeName","src":"27220:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27219:9:36"},"scope":12324,"src":"27145:335:36","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12001,"nodeType":"Block","src":"27782:2186:36","statements":[{"assignments":[11813],"declarations":[{"constant":false,"id":11813,"mutability":"mutable","name":"supplyState","nameLocation":"27812:11:36","nodeType":"VariableDeclaration","scope":12001,"src":"27792:31:36","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken"},"typeName":{"id":11812,"nodeType":"UserDefinedTypeName","pathNode":{"id":11811,"name":"RewardToken","nameLocations":["27792:11:36"],"nodeType":"IdentifierPath","referencedDeclaration":12338,"src":"27792:11:36"},"referencedDeclaration":12338,"src":"27792:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken"}},"visibility":"internal"}],"id":11817,"initialValue":{"baseExpression":{"id":11814,"name":"rewardTokenSupplyState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12351,"src":"27826:22:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardToken_$12338_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.RewardToken storage ref)"}},"id":11816,"indexExpression":{"id":11815,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11808,"src":"27849:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27826:30:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage","typeString":"struct RewardsDistributorStorage.RewardToken storage ref"}},"nodeType":"VariableDeclarationStatement","src":"27792:64:36"},{"assignments":[11820],"declarations":[{"constant":false,"id":11820,"mutability":"mutable","name":"supplyStateTimeBased","nameLocation":"27895:20:36","nodeType":"VariableDeclaration","scope":12001,"src":"27866:49:36","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken"},"typeName":{"id":11819,"nodeType":"UserDefinedTypeName","pathNode":{"id":11818,"name":"TimeBasedRewardToken","nameLocations":["27866:20:36"],"nodeType":"IdentifierPath","referencedDeclaration":12345,"src":"27866:20:36"},"referencedDeclaration":12345,"src":"27866:20:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken"}},"visibility":"internal"}],"id":11824,"initialValue":{"baseExpression":{"id":11821,"name":"rewardTokenSupplyStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12408,"src":"27918:31:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TimeBasedRewardToken_$12345_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.TimeBasedRewardToken storage ref)"}},"id":11823,"indexExpression":{"id":11822,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11808,"src":"27950:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27918:39:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage ref"}},"nodeType":"VariableDeclarationStatement","src":"27866:91:36"},{"assignments":[11826],"declarations":[{"constant":false,"id":11826,"mutability":"mutable","name":"supplySpeed","nameLocation":"27976:11:36","nodeType":"VariableDeclaration","scope":12001,"src":"27968:19:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11825,"name":"uint256","nodeType":"ElementaryTypeName","src":"27968:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11830,"initialValue":{"baseExpression":{"id":11827,"name":"rewardTokenSupplySpeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12373,"src":"27990:23:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":11829,"indexExpression":{"id":11828,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11808,"src":"28014:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27990:31:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"27968:53:36"},{"assignments":[11832],"declarations":[{"constant":false,"id":11832,"mutability":"mutable","name":"blockNumberOrTimestamp","nameLocation":"28039:22:36","nodeType":"VariableDeclaration","scope":12001,"src":"28031:30:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11831,"name":"uint256","nodeType":"ElementaryTypeName","src":"28031:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11835,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":11833,"name":"getBlockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16298,"src":"28064:25:36","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":11834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28064:27:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28031:60:36"},{"condition":{"id":11837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"28106:12:36","subExpression":{"id":11836,"name":"isTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16222,"src":"28107:11:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11844,"nodeType":"IfStatement","src":"28102:105:36","trueBody":{"id":11843,"nodeType":"Block","src":"28120:87:36","statements":[{"expression":{"arguments":[{"id":11839,"name":"blockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11832,"src":"28141:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"626c6f636b206e756d62657220657863656564732033322062697473","id":11840,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"28165:30:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_ff90a699fb9d013b04dce39b46a2e2edfd2bcf181b8611876e2c7b99f8929a06","typeString":"literal_string \"block number exceeds 32 bits\""},"value":"block number exceeds 32 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_ff90a699fb9d013b04dce39b46a2e2edfd2bcf181b8611876e2c7b99f8929a06","typeString":"literal_string \"block number exceeds 32 bits\""}],"id":11838,"name":"safe32","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9801,"src":"28134:6:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint32_$","typeString":"function (uint256,string memory) pure returns (uint32)"}},"id":11841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28134:62:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":11842,"nodeType":"ExpressionStatement","src":"28134:62:36"}]}},{"assignments":[11846],"declarations":[{"constant":false,"id":11846,"mutability":"mutable","name":"lastRewardingBlockOrTimestamp","nameLocation":"28225:29:36","nodeType":"VariableDeclaration","scope":12001,"src":"28217:37:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11845,"name":"uint256","nodeType":"ElementaryTypeName","src":"28217:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11856,"initialValue":{"condition":{"id":11847,"name":"isTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16222,"src":"28257:11:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"expression":{"id":11852,"name":"supplyState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11813,"src":"28349:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken storage pointer"}},"id":11853,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28361:18:36","memberName":"lastRewardingBlock","nodeType":"MemberAccess","referencedDeclaration":12337,"src":"28349:30:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":11851,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28341:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":11850,"name":"uint256","nodeType":"ElementaryTypeName","src":"28341:7:36","typeDescriptions":{}}},"id":11854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28341:39:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"28257:123:36","trueExpression":{"expression":{"id":11848,"name":"supplyStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11820,"src":"28283:20:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage pointer"}},"id":11849,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28304:22:36","memberName":"lastRewardingTimestamp","nodeType":"MemberAccess","referencedDeclaration":12344,"src":"28283:43:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28217:163:36"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11857,"name":"lastRewardingBlockOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11846,"src":"28395:29:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11858,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28427:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"28395:33:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11860,"name":"blockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11832,"src":"28432:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":11861,"name":"lastRewardingBlockOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11846,"src":"28457:29:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28432:54:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"28395:91:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11869,"nodeType":"IfStatement","src":"28391:176:36","trueBody":{"id":11868,"nodeType":"Block","src":"28488:79:36","statements":[{"expression":{"id":11866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11864,"name":"blockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11832,"src":"28502:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11865,"name":"lastRewardingBlockOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11846,"src":"28527:29:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28502:54:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11867,"nodeType":"ExpressionStatement","src":"28502:54:36"}]}},{"assignments":[11871],"declarations":[{"constant":false,"id":11871,"mutability":"mutable","name":"deltaBlocksOrTimestamp","nameLocation":"28585:22:36","nodeType":"VariableDeclaration","scope":12001,"src":"28577:30:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11870,"name":"uint256","nodeType":"ElementaryTypeName","src":"28577:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11885,"initialValue":{"arguments":[{"id":11873,"name":"blockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11832,"src":"28628:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"components":[{"condition":{"id":11874,"name":"isTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16222,"src":"28665:11:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"expression":{"id":11879,"name":"supplyState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11813,"src":"28720:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken storage pointer"}},"id":11880,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28732:5:36","memberName":"block","nodeType":"MemberAccess","referencedDeclaration":12335,"src":"28720:17:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":11878,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28712:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":11877,"name":"uint256","nodeType":"ElementaryTypeName","src":"28712:7:36","typeDescriptions":{}}},"id":11881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28712:26:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"28665:73:36","trueExpression":{"expression":{"id":11875,"name":"supplyStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11820,"src":"28679:20:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage pointer"}},"id":11876,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28700:9:36","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":12342,"src":"28679:30:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11883,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28664:75:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11872,"name":"sub_","nodeType":"Identifier","overloadedDeclarations":[9881,9903,9917],"referencedDeclaration":9917,"src":"28610:4:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11884,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28610:139:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28577:172:36"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11886,"name":"deltaBlocksOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11871,"src":"28763:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11887,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28788:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"28763:26:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11889,"name":"supplySpeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11826,"src":"28793:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11890,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28807:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"28793:15:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"28763:45:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11977,"name":"deltaBlocksOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11871,"src":"29704:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11978,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29729:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29704:26:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11995,"nodeType":"IfStatement","src":"29700:209:36","trueBody":{"id":11994,"nodeType":"Block","src":"29732:177:36","statements":[{"expression":{"condition":{"id":11980,"name":"isTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16222,"src":"29746:11:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":11991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11985,"name":"supplyState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11813,"src":"29818:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken storage pointer"}},"id":11986,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"29830:5:36","memberName":"block","nodeType":"MemberAccess","referencedDeclaration":12335,"src":"29818:17:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11989,"name":"blockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11832,"src":"29862:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11988,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29838:6:36","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":11987,"name":"uint32","nodeType":"ElementaryTypeName","src":"29838:6:36","typeDescriptions":{}}},"id":11990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29838:60:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"29818:80:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":11992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"29746:152:36","trueExpression":{"id":11984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11981,"name":"supplyStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11820,"src":"29760:20:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage pointer"}},"id":11982,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"29781:9:36","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":12342,"src":"29760:30:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11983,"name":"blockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11832,"src":"29793:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29760:55:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11993,"nodeType":"ExpressionStatement","src":"29746:152:36"}]}},"id":11996,"nodeType":"IfStatement","src":"28759:1150:36","trueBody":{"id":11976,"nodeType":"Block","src":"28810:884:36","statements":[{"assignments":[11894],"declarations":[{"constant":false,"id":11894,"mutability":"mutable","name":"supplyTokens","nameLocation":"28832:12:36","nodeType":"VariableDeclaration","scope":11976,"src":"28824:20:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11893,"name":"uint256","nodeType":"ElementaryTypeName","src":"28824:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11900,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":11896,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11808,"src":"28854:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":11895,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"28847:6:36","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":11897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28847:14:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":11898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28862:11:36","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":15569,"src":"28847:26:36","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":11899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28847:28:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28824:51:36"},{"assignments":[11902],"declarations":[{"constant":false,"id":11902,"mutability":"mutable","name":"accruedSinceUpdate","nameLocation":"28897:18:36","nodeType":"VariableDeclaration","scope":11976,"src":"28889:26:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11901,"name":"uint256","nodeType":"ElementaryTypeName","src":"28889:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11907,"initialValue":{"arguments":[{"id":11904,"name":"deltaBlocksOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11871,"src":"28923:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11905,"name":"supplySpeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11826,"src":"28947:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11903,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":10057,"src":"28918:4:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28918:41:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28889:70:36"},{"assignments":[11910],"declarations":[{"constant":false,"id":11910,"mutability":"mutable","name":"ratio","nameLocation":"28987:5:36","nodeType":"VariableDeclaration","scope":11976,"src":"28973:19:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":11909,"nodeType":"UserDefinedTypeName","pathNode":{"id":11908,"name":"Double","nameLocations":["28973:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"28973:6:36"},"referencedDeclaration":9648,"src":"28973:6:36","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"}],"id":11922,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11911,"name":"supplyTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11894,"src":"28995:12:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11912,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29010:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"28995:16:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"hexValue":"30","id":11919,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29110:1:36","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":11918,"name":"Double","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9648,"src":"29091:6:36","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Double_$9648_storage_ptr_$","typeString":"type(struct ExponentialNoError.Double storage pointer)"}},"id":11920,"isConstant":false,"isLValue":false,"isPure":true,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["29100:8:36"],"names":["mantissa"],"nodeType":"FunctionCall","src":"29091:23:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"id":11921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"28995:119:36","trueExpression":{"arguments":[{"id":11915,"name":"accruedSinceUpdate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11902,"src":"29039:18:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11916,"name":"supplyTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11894,"src":"29059:12:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11914,"name":"fraction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10222,"src":"29030:8:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_Double_$9648_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct ExponentialNoError.Double memory)"}},"id":11917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29030:42:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"nodeType":"VariableDeclarationStatement","src":"28973:141:36"},{"assignments":[11924],"declarations":[{"constant":false,"id":11924,"mutability":"mutable","name":"supplyIndex","nameLocation":"29136:11:36","nodeType":"VariableDeclaration","scope":11976,"src":"29128:19:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":11923,"name":"uint224","nodeType":"ElementaryTypeName","src":"29128:7:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"}],"id":11931,"initialValue":{"condition":{"id":11925,"name":"isTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16222,"src":"29150:11:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":11928,"name":"supplyState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11813,"src":"29193:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken storage pointer"}},"id":11929,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29205:5:36","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":12333,"src":"29193:17:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"id":11930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"29150:60:36","trueExpression":{"expression":{"id":11926,"name":"supplyStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11820,"src":"29164:20:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage pointer"}},"id":11927,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29185:5:36","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":12340,"src":"29164:26:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"nodeType":"VariableDeclarationStatement","src":"29128:82:36"},{"assignments":[11933],"declarations":[{"constant":false,"id":11933,"mutability":"mutable","name":"index","nameLocation":"29232:5:36","nodeType":"VariableDeclaration","scope":11976,"src":"29224:13:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":11932,"name":"uint224","nodeType":"ElementaryTypeName","src":"29224:7:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"}],"id":11944,"initialValue":{"arguments":[{"expression":{"arguments":[{"arguments":[{"id":11937,"name":"supplyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11924,"src":"29289:11:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint224","typeString":"uint224"}],"id":11936,"name":"Double","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9648,"src":"29270:6:36","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Double_$9648_storage_ptr_$","typeString":"type(struct ExponentialNoError.Double storage pointer)"}},"id":11938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["29279:8:36"],"names":["mantissa"],"nodeType":"FunctionCall","src":"29270:33:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},{"id":11939,"name":"ratio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11910,"src":"29305:5:36","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"},{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}],"id":11935,"name":"add_","nodeType":"Identifier","overloadedDeclarations":[9823,9845,9859],"referencedDeclaration":9845,"src":"29265:4:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Double_$9648_memory_ptr_$_t_struct$_Double_$9648_memory_ptr_$returns$_t_struct$_Double_$9648_memory_ptr_$","typeString":"function (struct ExponentialNoError.Double memory,struct ExponentialNoError.Double memory) pure returns (struct ExponentialNoError.Double memory)"}},"id":11940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29265:46:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"id":11941,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29312:8:36","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9647,"src":"29265:55:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"6e657720696e6465782065786365656473203232342062697473","id":11942,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"29338:28:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_efd912b0a596e6cfa5000021474b053b5acc660c9390ed127f3bb8b2308059db","typeString":"literal_string \"new index exceeds 224 bits\""},"value":"new index exceeds 224 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_efd912b0a596e6cfa5000021474b053b5acc660c9390ed127f3bb8b2308059db","typeString":"literal_string \"new index exceeds 224 bits\""}],"id":11934,"name":"safe224","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9775,"src":"29240:7:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint224_$","typeString":"function (uint256,string memory) pure returns (uint224)"}},"id":11943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29240:140:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"nodeType":"VariableDeclarationStatement","src":"29224:156:36"},{"condition":{"id":11945,"name":"isTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16222,"src":"29399:11:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11974,"nodeType":"Block","src":"29558:126:36","statements":[{"expression":{"id":11963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11959,"name":"supplyState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11813,"src":"29576:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken storage pointer"}},"id":11961,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"29588:5:36","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":12333,"src":"29576:17:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11962,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11933,"src":"29596:5:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"29576:25:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"id":11964,"nodeType":"ExpressionStatement","src":"29576:25:36"},{"expression":{"id":11972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11965,"name":"supplyState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11813,"src":"29619:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken storage pointer"}},"id":11967,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"29631:5:36","memberName":"block","nodeType":"MemberAccess","referencedDeclaration":12335,"src":"29619:17:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11970,"name":"blockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11832,"src":"29646:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11969,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29639:6:36","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":11968,"name":"uint32","nodeType":"ElementaryTypeName","src":"29639:6:36","typeDescriptions":{}}},"id":11971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29639:30:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"29619:50:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":11973,"nodeType":"ExpressionStatement","src":"29619:50:36"}]},"id":11975,"nodeType":"IfStatement","src":"29395:289:36","trueBody":{"id":11958,"nodeType":"Block","src":"29412:140:36","statements":[{"expression":{"id":11950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11946,"name":"supplyStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11820,"src":"29430:20:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage pointer"}},"id":11948,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"29451:5:36","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":12340,"src":"29430:26:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11949,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11933,"src":"29459:5:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"29430:34:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"id":11951,"nodeType":"ExpressionStatement","src":"29430:34:36"},{"expression":{"id":11956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11952,"name":"supplyStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11820,"src":"29482:20:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage pointer"}},"id":11954,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"29503:9:36","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":12342,"src":"29482:30:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11955,"name":"blockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11832,"src":"29515:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29482:55:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11957,"nodeType":"ExpressionStatement","src":"29482:55:36"}]}}]}},{"eventCall":{"arguments":[{"id":11998,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11808,"src":"29954:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":11997,"name":"RewardTokenSupplyIndexUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10515,"src":"29924:29:36","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":11999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29924:37:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12000,"nodeType":"EmitStatement","src":"29919:42:36"}]},"documentation":{"id":11806,"nodeType":"StructuredDocumentation","src":"27486:227:36","text":" @notice Accrue REWARD TOKEN to the market by updating the supply index\n @param vToken The market whose supply index to update\n @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued"},"id":12002,"implemented":true,"kind":"function","modifiers":[],"name":"_updateRewardTokenSupplyIndex","nameLocation":"27727:29:36","nodeType":"FunctionDefinition","parameters":{"id":11809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11808,"mutability":"mutable","name":"vToken","nameLocation":"27765:6:36","nodeType":"VariableDeclaration","scope":12002,"src":"27757:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11807,"name":"address","nodeType":"ElementaryTypeName","src":"27757:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"27756:16:36"},"returnParameters":{"id":11810,"nodeType":"ParameterList","parameters":[],"src":"27782:0:36"},"scope":12324,"src":"27718:2250:36","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12210,"nodeType":"Block","src":"30374:2272:36","statements":[{"assignments":[12013],"declarations":[{"constant":false,"id":12013,"mutability":"mutable","name":"borrowState","nameLocation":"30404:11:36","nodeType":"VariableDeclaration","scope":12210,"src":"30384:31:36","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken"},"typeName":{"id":12012,"nodeType":"UserDefinedTypeName","pathNode":{"id":12011,"name":"RewardToken","nameLocations":["30384:11:36"],"nodeType":"IdentifierPath","referencedDeclaration":12338,"src":"30384:11:36"},"referencedDeclaration":12338,"src":"30384:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken"}},"visibility":"internal"}],"id":12017,"initialValue":{"baseExpression":{"id":12014,"name":"rewardTokenBorrowState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12379,"src":"30418:22:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardToken_$12338_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.RewardToken storage ref)"}},"id":12016,"indexExpression":{"id":12015,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12005,"src":"30441:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30418:30:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage","typeString":"struct RewardsDistributorStorage.RewardToken storage ref"}},"nodeType":"VariableDeclarationStatement","src":"30384:64:36"},{"assignments":[12020],"declarations":[{"constant":false,"id":12020,"mutability":"mutable","name":"borrowStateTimeBased","nameLocation":"30487:20:36","nodeType":"VariableDeclaration","scope":12210,"src":"30458:49:36","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken"},"typeName":{"id":12019,"nodeType":"UserDefinedTypeName","pathNode":{"id":12018,"name":"TimeBasedRewardToken","nameLocations":["30458:20:36"],"nodeType":"IdentifierPath","referencedDeclaration":12345,"src":"30458:20:36"},"referencedDeclaration":12345,"src":"30458:20:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken"}},"visibility":"internal"}],"id":12024,"initialValue":{"baseExpression":{"id":12021,"name":"rewardTokenBorrowStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12414,"src":"30510:31:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TimeBasedRewardToken_$12345_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.TimeBasedRewardToken storage ref)"}},"id":12023,"indexExpression":{"id":12022,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12005,"src":"30542:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30510:39:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage ref"}},"nodeType":"VariableDeclarationStatement","src":"30458:91:36"},{"assignments":[12026],"declarations":[{"constant":false,"id":12026,"mutability":"mutable","name":"borrowSpeed","nameLocation":"30568:11:36","nodeType":"VariableDeclaration","scope":12210,"src":"30560:19:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12025,"name":"uint256","nodeType":"ElementaryTypeName","src":"30560:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12030,"initialValue":{"baseExpression":{"id":12027,"name":"rewardTokenBorrowSpeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12368,"src":"30582:23:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":12029,"indexExpression":{"id":12028,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12005,"src":"30606:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30582:31:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30560:53:36"},{"assignments":[12032],"declarations":[{"constant":false,"id":12032,"mutability":"mutable","name":"blockNumberOrTimestamp","nameLocation":"30631:22:36","nodeType":"VariableDeclaration","scope":12210,"src":"30623:30:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12031,"name":"uint256","nodeType":"ElementaryTypeName","src":"30623:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12035,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":12033,"name":"getBlockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16298,"src":"30656:25:36","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":12034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30656:27:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30623:60:36"},{"condition":{"id":12037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"30698:12:36","subExpression":{"id":12036,"name":"isTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16222,"src":"30699:11:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12044,"nodeType":"IfStatement","src":"30694:105:36","trueBody":{"id":12043,"nodeType":"Block","src":"30712:87:36","statements":[{"expression":{"arguments":[{"id":12039,"name":"blockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12032,"src":"30733:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"626c6f636b206e756d62657220657863656564732033322062697473","id":12040,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"30757:30:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_ff90a699fb9d013b04dce39b46a2e2edfd2bcf181b8611876e2c7b99f8929a06","typeString":"literal_string \"block number exceeds 32 bits\""},"value":"block number exceeds 32 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_ff90a699fb9d013b04dce39b46a2e2edfd2bcf181b8611876e2c7b99f8929a06","typeString":"literal_string \"block number exceeds 32 bits\""}],"id":12038,"name":"safe32","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9801,"src":"30726:6:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint32_$","typeString":"function (uint256,string memory) pure returns (uint32)"}},"id":12041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30726:62:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":12042,"nodeType":"ExpressionStatement","src":"30726:62:36"}]}},{"assignments":[12046],"declarations":[{"constant":false,"id":12046,"mutability":"mutable","name":"lastRewardingBlockOrTimestamp","nameLocation":"30817:29:36","nodeType":"VariableDeclaration","scope":12210,"src":"30809:37:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12045,"name":"uint256","nodeType":"ElementaryTypeName","src":"30809:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12056,"initialValue":{"condition":{"id":12047,"name":"isTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16222,"src":"30849:11:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"expression":{"id":12052,"name":"borrowState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12013,"src":"30941:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken storage pointer"}},"id":12053,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30953:18:36","memberName":"lastRewardingBlock","nodeType":"MemberAccess","referencedDeclaration":12337,"src":"30941:30:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":12051,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30933:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12050,"name":"uint256","nodeType":"ElementaryTypeName","src":"30933:7:36","typeDescriptions":{}}},"id":12054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30933:39:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"30849:123:36","trueExpression":{"expression":{"id":12048,"name":"borrowStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12020,"src":"30875:20:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage pointer"}},"id":12049,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30896:22:36","memberName":"lastRewardingTimestamp","nodeType":"MemberAccess","referencedDeclaration":12344,"src":"30875:43:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30809:163:36"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":12063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12057,"name":"lastRewardingBlockOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12046,"src":"30987:29:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12058,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31019:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30987:33:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12060,"name":"blockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12032,"src":"31024:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":12061,"name":"lastRewardingBlockOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12046,"src":"31049:29:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31024:54:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"30987:91:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12069,"nodeType":"IfStatement","src":"30983:176:36","trueBody":{"id":12068,"nodeType":"Block","src":"31080:79:36","statements":[{"expression":{"id":12066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12064,"name":"blockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12032,"src":"31094:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12065,"name":"lastRewardingBlockOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12046,"src":"31119:29:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31094:54:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12067,"nodeType":"ExpressionStatement","src":"31094:54:36"}]}},{"assignments":[12071],"declarations":[{"constant":false,"id":12071,"mutability":"mutable","name":"deltaBlocksOrTimestamp","nameLocation":"31177:22:36","nodeType":"VariableDeclaration","scope":12210,"src":"31169:30:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12070,"name":"uint256","nodeType":"ElementaryTypeName","src":"31169:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12085,"initialValue":{"arguments":[{"id":12073,"name":"blockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12032,"src":"31220:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"components":[{"condition":{"id":12074,"name":"isTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16222,"src":"31257:11:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"expression":{"id":12079,"name":"borrowState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12013,"src":"31312:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken storage pointer"}},"id":12080,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31324:5:36","memberName":"block","nodeType":"MemberAccess","referencedDeclaration":12335,"src":"31312:17:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":12078,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31304:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12077,"name":"uint256","nodeType":"ElementaryTypeName","src":"31304:7:36","typeDescriptions":{}}},"id":12081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31304:26:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"31257:73:36","trueExpression":{"expression":{"id":12075,"name":"borrowStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12020,"src":"31271:20:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage pointer"}},"id":12076,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31292:9:36","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":12342,"src":"31271:30:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12083,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31256:75:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12072,"name":"sub_","nodeType":"Identifier","overloadedDeclarations":[9881,9903,9917],"referencedDeclaration":9917,"src":"31202:4:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":12084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31202:139:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"31169:172:36"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":12092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12086,"name":"deltaBlocksOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12071,"src":"31355:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12087,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31380:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"31355:26:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12089,"name":"borrowSpeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12026,"src":"31385:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12090,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31399:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"31385:15:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"31355:45:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12180,"name":"deltaBlocksOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12071,"src":"32322:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12181,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32347:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"32322:26:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12203,"nodeType":"IfStatement","src":"32318:250:36","trueBody":{"id":12202,"nodeType":"Block","src":"32350:218:36","statements":[{"condition":{"id":12183,"name":"isTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16222,"src":"32368:11:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":12200,"nodeType":"Block","src":"32475:83:36","statements":[{"expression":{"id":12198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":12191,"name":"borrowState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12013,"src":"32493:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken storage pointer"}},"id":12193,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"32505:5:36","memberName":"block","nodeType":"MemberAccess","referencedDeclaration":12335,"src":"32493:17:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12196,"name":"blockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12032,"src":"32520:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12195,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32513:6:36","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":12194,"name":"uint32","nodeType":"ElementaryTypeName","src":"32513:6:36","typeDescriptions":{}}},"id":12197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32513:30:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"32493:50:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":12199,"nodeType":"ExpressionStatement","src":"32493:50:36"}]},"id":12201,"nodeType":"IfStatement","src":"32364:194:36","trueBody":{"id":12190,"nodeType":"Block","src":"32381:88:36","statements":[{"expression":{"id":12188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":12184,"name":"borrowStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12020,"src":"32399:20:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage pointer"}},"id":12186,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"32420:9:36","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":12342,"src":"32399:30:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12187,"name":"blockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12032,"src":"32432:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32399:55:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12189,"nodeType":"ExpressionStatement","src":"32399:55:36"}]}}]}},"id":12204,"nodeType":"IfStatement","src":"31351:1217:36","trueBody":{"id":12179,"nodeType":"Block","src":"31402:910:36","statements":[{"assignments":[12094],"declarations":[{"constant":false,"id":12094,"mutability":"mutable","name":"borrowAmount","nameLocation":"31424:12:36","nodeType":"VariableDeclaration","scope":12179,"src":"31416:20:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12093,"name":"uint256","nodeType":"ElementaryTypeName","src":"31416:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12103,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":12097,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12005,"src":"31451:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12096,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"31444:6:36","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":12098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31444:14:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":12099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31459:12:36","memberName":"totalBorrows","nodeType":"MemberAccess","referencedDeclaration":15563,"src":"31444:27:36","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":12100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31444:29:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12101,"name":"marketBorrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12008,"src":"31475:17:36","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":12095,"name":"div_","nodeType":"Identifier","overloadedDeclarations":[10082,10102,10122,10147,10167,10187,10201],"referencedDeclaration":10122,"src":"31439:4:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_struct$_Exp_$9645_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,struct ExponentialNoError.Exp memory) pure returns (uint256)"}},"id":12102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31439:54:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"31416:77:36"},{"assignments":[12105],"declarations":[{"constant":false,"id":12105,"mutability":"mutable","name":"accruedSinceUpdate","nameLocation":"31515:18:36","nodeType":"VariableDeclaration","scope":12179,"src":"31507:26:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12104,"name":"uint256","nodeType":"ElementaryTypeName","src":"31507:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12110,"initialValue":{"arguments":[{"id":12107,"name":"deltaBlocksOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12071,"src":"31541:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12108,"name":"borrowSpeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12026,"src":"31565:11:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12106,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":10057,"src":"31536:4:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":12109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31536:41:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"31507:70:36"},{"assignments":[12113],"declarations":[{"constant":false,"id":12113,"mutability":"mutable","name":"ratio","nameLocation":"31605:5:36","nodeType":"VariableDeclaration","scope":12179,"src":"31591:19:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double"},"typeName":{"id":12112,"nodeType":"UserDefinedTypeName","pathNode":{"id":12111,"name":"Double","nameLocations":["31591:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":9648,"src":"31591:6:36"},"referencedDeclaration":9648,"src":"31591:6:36","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_storage_ptr","typeString":"struct ExponentialNoError.Double"}},"visibility":"internal"}],"id":12125,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12114,"name":"borrowAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12094,"src":"31613:12:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31628:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"31613:16:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"hexValue":"30","id":12122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31728:1:36","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":12121,"name":"Double","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9648,"src":"31709:6:36","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Double_$9648_storage_ptr_$","typeString":"type(struct ExponentialNoError.Double storage pointer)"}},"id":12123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["31718:8:36"],"names":["mantissa"],"nodeType":"FunctionCall","src":"31709:23:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"id":12124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"31613:119:36","trueExpression":{"arguments":[{"id":12118,"name":"accruedSinceUpdate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12105,"src":"31657:18:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12119,"name":"borrowAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12094,"src":"31677:12:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12117,"name":"fraction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10222,"src":"31648:8:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_Double_$9648_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct ExponentialNoError.Double memory)"}},"id":12120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31648:42:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"nodeType":"VariableDeclarationStatement","src":"31591:141:36"},{"assignments":[12127],"declarations":[{"constant":false,"id":12127,"mutability":"mutable","name":"borrowIndex","nameLocation":"31754:11:36","nodeType":"VariableDeclaration","scope":12179,"src":"31746:19:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":12126,"name":"uint224","nodeType":"ElementaryTypeName","src":"31746:7:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"}],"id":12134,"initialValue":{"condition":{"id":12128,"name":"isTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16222,"src":"31768:11:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":12131,"name":"borrowState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12013,"src":"31811:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken storage pointer"}},"id":12132,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31823:5:36","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":12333,"src":"31811:17:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"id":12133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"31768:60:36","trueExpression":{"expression":{"id":12129,"name":"borrowStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12020,"src":"31782:20:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage pointer"}},"id":12130,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31803:5:36","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":12340,"src":"31782:26:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"nodeType":"VariableDeclarationStatement","src":"31746:82:36"},{"assignments":[12136],"declarations":[{"constant":false,"id":12136,"mutability":"mutable","name":"index","nameLocation":"31850:5:36","nodeType":"VariableDeclaration","scope":12179,"src":"31842:13:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":12135,"name":"uint224","nodeType":"ElementaryTypeName","src":"31842:7:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"}],"id":12147,"initialValue":{"arguments":[{"expression":{"arguments":[{"arguments":[{"id":12140,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12127,"src":"31907:11:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint224","typeString":"uint224"}],"id":12139,"name":"Double","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9648,"src":"31888:6:36","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Double_$9648_storage_ptr_$","typeString":"type(struct ExponentialNoError.Double storage pointer)"}},"id":12141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["31897:8:36"],"names":["mantissa"],"nodeType":"FunctionCall","src":"31888:33:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},{"id":12142,"name":"ratio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12113,"src":"31923:5:36","typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"},{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}],"id":12138,"name":"add_","nodeType":"Identifier","overloadedDeclarations":[9823,9845,9859],"referencedDeclaration":9845,"src":"31883:4:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Double_$9648_memory_ptr_$_t_struct$_Double_$9648_memory_ptr_$returns$_t_struct$_Double_$9648_memory_ptr_$","typeString":"function (struct ExponentialNoError.Double memory,struct ExponentialNoError.Double memory) pure returns (struct ExponentialNoError.Double memory)"}},"id":12143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31883:46:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Double_$9648_memory_ptr","typeString":"struct ExponentialNoError.Double memory"}},"id":12144,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31930:8:36","memberName":"mantissa","nodeType":"MemberAccess","referencedDeclaration":9647,"src":"31883:55:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"6e657720696e6465782065786365656473203232342062697473","id":12145,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"31956:28:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_efd912b0a596e6cfa5000021474b053b5acc660c9390ed127f3bb8b2308059db","typeString":"literal_string \"new index exceeds 224 bits\""},"value":"new index exceeds 224 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_efd912b0a596e6cfa5000021474b053b5acc660c9390ed127f3bb8b2308059db","typeString":"literal_string \"new index exceeds 224 bits\""}],"id":12137,"name":"safe224","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9775,"src":"31858:7:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint224_$","typeString":"function (uint256,string memory) pure returns (uint224)"}},"id":12146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31858:140:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"nodeType":"VariableDeclarationStatement","src":"31842:156:36"},{"condition":{"id":12148,"name":"isTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16222,"src":"32017:11:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":12177,"nodeType":"Block","src":"32176:126:36","statements":[{"expression":{"id":12166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":12162,"name":"borrowState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12013,"src":"32194:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken storage pointer"}},"id":12164,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"32206:5:36","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":12333,"src":"32194:17:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12165,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12136,"src":"32214:5:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"32194:25:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"id":12167,"nodeType":"ExpressionStatement","src":"32194:25:36"},{"expression":{"id":12175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":12168,"name":"borrowState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12013,"src":"32237:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken storage pointer"}},"id":12170,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"32249:5:36","memberName":"block","nodeType":"MemberAccess","referencedDeclaration":12335,"src":"32237:17:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12173,"name":"blockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12032,"src":"32264:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12172,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32257:6:36","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":12171,"name":"uint32","nodeType":"ElementaryTypeName","src":"32257:6:36","typeDescriptions":{}}},"id":12174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32257:30:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"32237:50:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":12176,"nodeType":"ExpressionStatement","src":"32237:50:36"}]},"id":12178,"nodeType":"IfStatement","src":"32013:289:36","trueBody":{"id":12161,"nodeType":"Block","src":"32030:140:36","statements":[{"expression":{"id":12153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":12149,"name":"borrowStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12020,"src":"32048:20:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage pointer"}},"id":12151,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"32069:5:36","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":12340,"src":"32048:26:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12152,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12136,"src":"32077:5:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"32048:34:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"id":12154,"nodeType":"ExpressionStatement","src":"32048:34:36"},{"expression":{"id":12159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":12155,"name":"borrowStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12020,"src":"32100:20:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage pointer"}},"id":12157,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"32121:9:36","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":12342,"src":"32100:30:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12158,"name":"blockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12032,"src":"32133:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32100:55:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12160,"nodeType":"ExpressionStatement","src":"32100:55:36"}]}}]}},{"eventCall":{"arguments":[{"id":12206,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12005,"src":"32613:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12207,"name":"marketBorrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12008,"src":"32621:17:36","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":12205,"name":"RewardTokenBorrowIndexUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10523,"src":"32583:29:36","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_struct$_Exp_$9645_memory_ptr_$returns$__$","typeString":"function (address,struct ExponentialNoError.Exp memory)"}},"id":12208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32583:56:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12209,"nodeType":"EmitStatement","src":"32578:61:36"}]},"documentation":{"id":12003,"nodeType":"StructuredDocumentation","src":"29974:301:36","text":" @notice Accrue REWARD TOKEN to the market by updating the borrow index\n @param vToken The market whose borrow index to update\n @param marketBorrowIndex The current global borrow index of vToken\n @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued"},"id":12211,"implemented":true,"kind":"function","modifiers":[],"name":"_updateRewardTokenBorrowIndex","nameLocation":"30289:29:36","nodeType":"FunctionDefinition","parameters":{"id":12009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12005,"mutability":"mutable","name":"vToken","nameLocation":"30327:6:36","nodeType":"VariableDeclaration","scope":12211,"src":"30319:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12004,"name":"address","nodeType":"ElementaryTypeName","src":"30319:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12008,"mutability":"mutable","name":"marketBorrowIndex","nameLocation":"30346:17:36","nodeType":"VariableDeclaration","scope":12211,"src":"30335:28:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":12007,"nodeType":"UserDefinedTypeName","pathNode":{"id":12006,"name":"Exp","nameLocations":["30335:3:36"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"30335:3:36"},"referencedDeclaration":9645,"src":"30335:3:36","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"src":"30318:46:36"},"returnParameters":{"id":12010,"nodeType":"ParameterList","parameters":[],"src":"30374:0:36"},"scope":12324,"src":"30280:2366:36","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12266,"nodeType":"Block","src":"32964:667:36","statements":[{"assignments":[12221],"declarations":[{"constant":false,"id":12221,"mutability":"mutable","name":"supplyState","nameLocation":"32994:11:36","nodeType":"VariableDeclaration","scope":12266,"src":"32974:31:36","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken"},"typeName":{"id":12220,"nodeType":"UserDefinedTypeName","pathNode":{"id":12219,"name":"RewardToken","nameLocations":["32974:11:36"],"nodeType":"IdentifierPath","referencedDeclaration":12338,"src":"32974:11:36"},"referencedDeclaration":12338,"src":"32974:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken"}},"visibility":"internal"}],"id":12225,"initialValue":{"baseExpression":{"id":12222,"name":"rewardTokenSupplyState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12351,"src":"33008:22:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardToken_$12338_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.RewardToken storage ref)"}},"id":12224,"indexExpression":{"id":12223,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12214,"src":"33031:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"33008:30:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage","typeString":"struct RewardsDistributorStorage.RewardToken storage ref"}},"nodeType":"VariableDeclarationStatement","src":"32974:64:36"},{"assignments":[12228],"declarations":[{"constant":false,"id":12228,"mutability":"mutable","name":"borrowState","nameLocation":"33068:11:36","nodeType":"VariableDeclaration","scope":12266,"src":"33048:31:36","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken"},"typeName":{"id":12227,"nodeType":"UserDefinedTypeName","pathNode":{"id":12226,"name":"RewardToken","nameLocations":["33048:11:36"],"nodeType":"IdentifierPath","referencedDeclaration":12338,"src":"33048:11:36"},"referencedDeclaration":12338,"src":"33048:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken"}},"visibility":"internal"}],"id":12232,"initialValue":{"baseExpression":{"id":12229,"name":"rewardTokenBorrowState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12379,"src":"33082:22:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardToken_$12338_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.RewardToken storage ref)"}},"id":12231,"indexExpression":{"id":12230,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12214,"src":"33105:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"33082:30:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage","typeString":"struct RewardsDistributorStorage.RewardToken storage ref"}},"nodeType":"VariableDeclarationStatement","src":"33048:64:36"},{"condition":{"commonType":{"typeIdentifier":"t_uint224","typeString":"uint224"},"id":12236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12233,"name":"supplyState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12221,"src":"33189:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken storage pointer"}},"id":12234,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33201:5:36","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":12333,"src":"33189:17:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12235,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33210:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"33189:22:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12244,"nodeType":"IfStatement","src":"33185:150:36","trueBody":{"id":12243,"nodeType":"Block","src":"33213:122:36","statements":[{"expression":{"id":12241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":12237,"name":"supplyState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12221,"src":"33291:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken storage pointer"}},"id":12239,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"33303:5:36","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":12333,"src":"33291:17:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12240,"name":"INITIAL_INDEX","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10447,"src":"33311:13:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"33291:33:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"id":12242,"nodeType":"ExpressionStatement","src":"33291:33:36"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint224","typeString":"uint224"},"id":12248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12245,"name":"borrowState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12228,"src":"33349:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken storage pointer"}},"id":12246,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33361:5:36","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":12333,"src":"33349:17:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12247,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33370:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"33349:22:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12256,"nodeType":"IfStatement","src":"33345:150:36","trueBody":{"id":12255,"nodeType":"Block","src":"33373:122:36","statements":[{"expression":{"id":12253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":12249,"name":"borrowState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12228,"src":"33451:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken storage pointer"}},"id":12251,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"33463:5:36","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":12333,"src":"33451:17:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12252,"name":"INITIAL_INDEX","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10447,"src":"33471:13:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"33451:33:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"id":12254,"nodeType":"ExpressionStatement","src":"33451:33:36"}]}},{"expression":{"id":12264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":12257,"name":"supplyState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12221,"src":"33573:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken storage pointer"}},"id":12259,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"33585:5:36","memberName":"block","nodeType":"MemberAccess","referencedDeclaration":12335,"src":"33573:17:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":12260,"name":"borrowState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12228,"src":"33593:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken storage pointer"}},"id":12261,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"33605:5:36","memberName":"block","nodeType":"MemberAccess","referencedDeclaration":12335,"src":"33593:17:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12262,"name":"blockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12216,"src":"33613:11:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"33593:31:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"33573:51:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":12265,"nodeType":"ExpressionStatement","src":"33573:51:36"}]},"documentation":{"id":12212,"nodeType":"StructuredDocumentation","src":"32652:225:36","text":" @notice Initializes the market state for a specific vToken called when contract is block-based\n @param vToken The address of the vToken to be initialized\n @param blockNumber current block number"},"id":12267,"implemented":true,"kind":"function","modifiers":[],"name":"_initializeMarketBlockBased","nameLocation":"32891:27:36","nodeType":"FunctionDefinition","parameters":{"id":12217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12214,"mutability":"mutable","name":"vToken","nameLocation":"32927:6:36","nodeType":"VariableDeclaration","scope":12267,"src":"32919:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12213,"name":"address","nodeType":"ElementaryTypeName","src":"32919:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12216,"mutability":"mutable","name":"blockNumber","nameLocation":"32942:11:36","nodeType":"VariableDeclaration","scope":12267,"src":"32935:18:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":12215,"name":"uint32","nodeType":"ElementaryTypeName","src":"32935:6:36","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"32918:36:36"},"returnParameters":{"id":12218,"nodeType":"ParameterList","parameters":[],"src":"32964:0:36"},"scope":12324,"src":"32882:749:36","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12322,"nodeType":"Block","src":"33962:716:36","statements":[{"assignments":[12277],"declarations":[{"constant":false,"id":12277,"mutability":"mutable","name":"supplyState","nameLocation":"34001:11:36","nodeType":"VariableDeclaration","scope":12322,"src":"33972:40:36","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken"},"typeName":{"id":12276,"nodeType":"UserDefinedTypeName","pathNode":{"id":12275,"name":"TimeBasedRewardToken","nameLocations":["33972:20:36"],"nodeType":"IdentifierPath","referencedDeclaration":12345,"src":"33972:20:36"},"referencedDeclaration":12345,"src":"33972:20:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken"}},"visibility":"internal"}],"id":12281,"initialValue":{"baseExpression":{"id":12278,"name":"rewardTokenSupplyStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12408,"src":"34015:31:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TimeBasedRewardToken_$12345_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.TimeBasedRewardToken storage ref)"}},"id":12280,"indexExpression":{"id":12279,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12270,"src":"34047:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34015:39:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage ref"}},"nodeType":"VariableDeclarationStatement","src":"33972:82:36"},{"assignments":[12284],"declarations":[{"constant":false,"id":12284,"mutability":"mutable","name":"borrowState","nameLocation":"34093:11:36","nodeType":"VariableDeclaration","scope":12322,"src":"34064:40:36","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken"},"typeName":{"id":12283,"nodeType":"UserDefinedTypeName","pathNode":{"id":12282,"name":"TimeBasedRewardToken","nameLocations":["34064:20:36"],"nodeType":"IdentifierPath","referencedDeclaration":12345,"src":"34064:20:36"},"referencedDeclaration":12345,"src":"34064:20:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken"}},"visibility":"internal"}],"id":12288,"initialValue":{"baseExpression":{"id":12285,"name":"rewardTokenBorrowStateTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12414,"src":"34107:31:36","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TimeBasedRewardToken_$12345_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.TimeBasedRewardToken storage ref)"}},"id":12287,"indexExpression":{"id":12286,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12270,"src":"34139:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34107:39:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage ref"}},"nodeType":"VariableDeclarationStatement","src":"34064:82:36"},{"condition":{"commonType":{"typeIdentifier":"t_uint224","typeString":"uint224"},"id":12292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12289,"name":"supplyState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12277,"src":"34223:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage pointer"}},"id":12290,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34235:5:36","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":12340,"src":"34223:17:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12291,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34244:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"34223:22:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12300,"nodeType":"IfStatement","src":"34219:150:36","trueBody":{"id":12299,"nodeType":"Block","src":"34247:122:36","statements":[{"expression":{"id":12297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":12293,"name":"supplyState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12277,"src":"34325:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage pointer"}},"id":12295,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"34337:5:36","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":12340,"src":"34325:17:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12296,"name":"INITIAL_INDEX","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10447,"src":"34345:13:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"34325:33:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"id":12298,"nodeType":"ExpressionStatement","src":"34325:33:36"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint224","typeString":"uint224"},"id":12304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12301,"name":"borrowState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12284,"src":"34383:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage pointer"}},"id":12302,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34395:5:36","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":12340,"src":"34383:17:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12303,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34404:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"34383:22:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12312,"nodeType":"IfStatement","src":"34379:150:36","trueBody":{"id":12311,"nodeType":"Block","src":"34407:122:36","statements":[{"expression":{"id":12309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":12305,"name":"borrowState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12284,"src":"34485:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage pointer"}},"id":12307,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"34497:5:36","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":12340,"src":"34485:17:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12308,"name":"INITIAL_INDEX","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10447,"src":"34505:13:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"34485:33:36","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"id":12310,"nodeType":"ExpressionStatement","src":"34485:33:36"}]}},{"expression":{"id":12320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":12313,"name":"supplyState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12277,"src":"34609:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage pointer"}},"id":12315,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"34621:9:36","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":12342,"src":"34609:21:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":12316,"name":"borrowState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12284,"src":"34633:11:36","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken storage pointer"}},"id":12317,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"34645:9:36","memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":12342,"src":"34633:21:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12318,"name":"blockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12272,"src":"34657:14:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34633:38:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34609:62:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12321,"nodeType":"ExpressionStatement","src":"34609:62:36"}]},"documentation":{"id":12268,"nodeType":"StructuredDocumentation","src":"33637:230:36","text":" @notice Initializes the market state for a specific vToken called when contract is time-based\n @param vToken The address of the vToken to be initialized\n @param blockTimestamp current block timestamp"},"id":12323,"implemented":true,"kind":"function","modifiers":[],"name":"_initializeMarketTimestampBased","nameLocation":"33881:31:36","nodeType":"FunctionDefinition","parameters":{"id":12273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12270,"mutability":"mutable","name":"vToken","nameLocation":"33921:6:36","nodeType":"VariableDeclaration","scope":12323,"src":"33913:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12269,"name":"address","nodeType":"ElementaryTypeName","src":"33913:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12272,"mutability":"mutable","name":"blockTimestamp","nameLocation":"33937:14:36","nodeType":"VariableDeclaration","scope":12323,"src":"33929:22:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12271,"name":"uint256","nodeType":"ElementaryTypeName","src":"33929:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33912:40:36"},"returnParameters":{"id":12274,"nodeType":"ParameterList","parameters":[],"src":"33962:0:36"},"scope":12324,"src":"33872:806:36","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":12325,"src":"2370:32310:36","usedErrors":[4916,10290,16237,16240],"usedEvents":[17,124,422,4907,10283,10461,10475,10483,10491,10498,10505,10510,10515,10523,10530,10537,10544,10551,10558]}],"src":"41:34640:36"},"id":36},"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol":{"ast":{"absolutePath":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol","exportedSymbols":{"Comptroller":[9130],"IERC20Upgradeable":[1352],"RewardsDistributorStorage":[12420]},"id":12421,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":12326,"literals":["solidity","0.8",".25"],"nodeType":"PragmaDirective","src":"41:23:37"},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","id":12328,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12421,"sourceUnit":1353,"src":"66:106:37","symbolAliases":[{"foreign":{"id":12327,"name":"IERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"75:17:37","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/Comptroller.sol","file":"../Comptroller.sol","id":12330,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12421,"sourceUnit":9131,"src":"174:49:37","symbolAliases":[{"foreign":{"id":12329,"name":"Comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9130,"src":"183:11:37","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"RewardsDistributorStorage","contractDependencies":[],"contractKind":"contract","documentation":{"id":12331,"nodeType":"StructuredDocumentation","src":"225:99:37","text":" @title RewardsDistributorStorage\n @author Venus\n @dev Storage for RewardsDistributor"},"fullyImplemented":true,"id":12420,"linearizedBaseContracts":[12420],"name":"RewardsDistributorStorage","nameLocation":"334:25:37","nodeType":"ContractDefinition","nodes":[{"canonicalName":"RewardsDistributorStorage.RewardToken","id":12338,"members":[{"constant":false,"id":12333,"mutability":"mutable","name":"index","nameLocation":"489:5:37","nodeType":"VariableDeclaration","scope":12338,"src":"481:13:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":12332,"name":"uint224","nodeType":"ElementaryTypeName","src":"481:7:37","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"},{"constant":false,"id":12335,"mutability":"mutable","name":"block","nameLocation":"569:5:37","nodeType":"VariableDeclaration","scope":12338,"src":"562:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":12334,"name":"uint32","nodeType":"ElementaryTypeName","src":"562:6:37","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":12337,"mutability":"mutable","name":"lastRewardingBlock","nameLocation":"644:18:37","nodeType":"VariableDeclaration","scope":12338,"src":"637:25:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":12336,"name":"uint32","nodeType":"ElementaryTypeName","src":"637:6:37","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"name":"RewardToken","nameLocation":"373:11:37","nodeType":"StructDefinition","scope":12420,"src":"366:303:37","visibility":"public"},{"canonicalName":"RewardsDistributorStorage.TimeBasedRewardToken","id":12345,"members":[{"constant":false,"id":12340,"mutability":"mutable","name":"index","nameLocation":"807:5:37","nodeType":"VariableDeclaration","scope":12345,"src":"799:13:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":12339,"name":"uint224","nodeType":"ElementaryTypeName","src":"799:7:37","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"},{"constant":false,"id":12342,"mutability":"mutable","name":"timestamp","nameLocation":"891:9:37","nodeType":"VariableDeclaration","scope":12345,"src":"883:17:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12341,"name":"uint256","nodeType":"ElementaryTypeName","src":"883:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12344,"mutability":"mutable","name":"lastRewardingTimestamp","nameLocation":"974:22:37","nodeType":"VariableDeclaration","scope":12345,"src":"966:30:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12343,"name":"uint256","nodeType":"ElementaryTypeName","src":"966:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"TimeBasedRewardToken","nameLocation":"682:20:37","nodeType":"StructDefinition","scope":12420,"src":"675:328:37","visibility":"public"},{"constant":false,"documentation":{"id":12346,"nodeType":"StructuredDocumentation","src":"1009:64:37","text":"@notice The REWARD TOKEN market supply state for each market"},"functionSelector":"92a18235","id":12351,"mutability":"mutable","name":"rewardTokenSupplyState","nameLocation":"1117:22:37","nodeType":"VariableDeclaration","scope":12420,"src":"1078:61:37","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardToken_$12338_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.RewardToken)"},"typeName":{"id":12350,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":12347,"name":"address","nodeType":"ElementaryTypeName","src":"1086:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1078:31:37","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardToken_$12338_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.RewardToken)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":12349,"nodeType":"UserDefinedTypeName","pathNode":{"id":12348,"name":"RewardToken","nameLocations":["1097:11:37"],"nodeType":"IdentifierPath","referencedDeclaration":12338,"src":"1097:11:37"},"referencedDeclaration":12338,"src":"1097:11:37","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken"}}},"visibility":"public"},{"constant":false,"documentation":{"id":12352,"nodeType":"StructuredDocumentation","src":"1146:121:37","text":"@notice The REWARD TOKEN borrow index for each market for each supplier as of the last time they accrued REWARD TOKEN"},"functionSelector":"552c0971","id":12358,"mutability":"mutable","name":"rewardTokenSupplierIndex","nameLocation":"1327:24:37","nodeType":"VariableDeclaration","scope":12420,"src":"1272:79:37","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":12357,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":12353,"name":"address","nodeType":"ElementaryTypeName","src":"1280:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1272:47:37","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":12356,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":12354,"name":"address","nodeType":"ElementaryTypeName","src":"1299:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1291:27:37","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":12355,"name":"uint256","nodeType":"ElementaryTypeName","src":"1310:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"public"},{"constant":false,"documentation":{"id":12359,"nodeType":"StructuredDocumentation","src":"1358:73:37","text":"@notice The REWARD TOKEN accrued but not yet transferred to each user"},"functionSelector":"1627ee89","id":12363,"mutability":"mutable","name":"rewardTokenAccrued","nameLocation":"1471:18:37","nodeType":"VariableDeclaration","scope":12420,"src":"1436:53:37","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":12362,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":12360,"name":"address","nodeType":"ElementaryTypeName","src":"1444:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1436:27:37","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":12361,"name":"uint256","nodeType":"ElementaryTypeName","src":"1455:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"public"},{"constant":false,"documentation":{"id":12364,"nodeType":"StructuredDocumentation","src":"1496:118:37","text":"@notice The rate at which rewardToken is distributed to the corresponding borrow market per slot (block or second)"},"functionSelector":"7c05a7c5","id":12368,"mutability":"mutable","name":"rewardTokenBorrowSpeeds","nameLocation":"1654:23:37","nodeType":"VariableDeclaration","scope":12420,"src":"1619:58:37","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":12367,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":12365,"name":"address","nodeType":"ElementaryTypeName","src":"1627:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1619:27:37","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":12366,"name":"uint256","nodeType":"ElementaryTypeName","src":"1638:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"public"},{"constant":false,"documentation":{"id":12369,"nodeType":"StructuredDocumentation","src":"1684:118:37","text":"@notice The rate at which rewardToken is distributed to the corresponding supply market per slot (block or second)"},"functionSelector":"74c4c1cc","id":12373,"mutability":"mutable","name":"rewardTokenSupplySpeeds","nameLocation":"1842:23:37","nodeType":"VariableDeclaration","scope":12420,"src":"1807:58:37","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":12372,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":12370,"name":"address","nodeType":"ElementaryTypeName","src":"1815:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1807:27:37","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":12371,"name":"uint256","nodeType":"ElementaryTypeName","src":"1826:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"public"},{"constant":false,"documentation":{"id":12374,"nodeType":"StructuredDocumentation","src":"1872:64:37","text":"@notice The REWARD TOKEN market borrow state for each market"},"functionSelector":"2c427b57","id":12379,"mutability":"mutable","name":"rewardTokenBorrowState","nameLocation":"1980:22:37","nodeType":"VariableDeclaration","scope":12420,"src":"1941:61:37","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardToken_$12338_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.RewardToken)"},"typeName":{"id":12378,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":12375,"name":"address","nodeType":"ElementaryTypeName","src":"1949:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1941:31:37","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardToken_$12338_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.RewardToken)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":12377,"nodeType":"UserDefinedTypeName","pathNode":{"id":12376,"name":"RewardToken","nameLocations":["1960:11:37"],"nodeType":"IdentifierPath","referencedDeclaration":12338,"src":"1960:11:37"},"referencedDeclaration":12338,"src":"1960:11:37","typeDescriptions":{"typeIdentifier":"t_struct$_RewardToken_$12338_storage_ptr","typeString":"struct RewardsDistributorStorage.RewardToken"}}},"visibility":"public"},{"constant":false,"documentation":{"id":12380,"nodeType":"StructuredDocumentation","src":"2009:97:37","text":"@notice The portion of REWARD TOKEN that each contributor receives per slot (block or second)"},"functionSelector":"efc75f24","id":12384,"mutability":"mutable","name":"rewardTokenContributorSpeeds","nameLocation":"2146:28:37","nodeType":"VariableDeclaration","scope":12420,"src":"2111:63:37","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":12383,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":12381,"name":"address","nodeType":"ElementaryTypeName","src":"2119:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2111:27:37","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":12382,"name":"uint256","nodeType":"ElementaryTypeName","src":"2130:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"public"},{"constant":false,"documentation":{"id":12385,"nodeType":"StructuredDocumentation","src":"2181:105:37","text":"@notice Last slot (block or second) at which a contributor's REWARD TOKEN rewards have been allocated"},"functionSelector":"bea6b8b8","id":12389,"mutability":"mutable","name":"lastContributorBlock","nameLocation":"2326:20:37","nodeType":"VariableDeclaration","scope":12420,"src":"2291:55:37","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":12388,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":12386,"name":"address","nodeType":"ElementaryTypeName","src":"2299:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2291:27:37","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":12387,"name":"uint256","nodeType":"ElementaryTypeName","src":"2310:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"public"},{"constant":false,"documentation":{"id":12390,"nodeType":"StructuredDocumentation","src":"2353:121:37","text":"@notice The REWARD TOKEN borrow index for each market for each borrower as of the last time they accrued REWARD TOKEN"},"functionSelector":"6dfd08ca","id":12396,"mutability":"mutable","name":"rewardTokenBorrowerIndex","nameLocation":"2534:24:37","nodeType":"VariableDeclaration","scope":12420,"src":"2479:79:37","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":12395,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":12391,"name":"address","nodeType":"ElementaryTypeName","src":"2487:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2479:47:37","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":12394,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":12392,"name":"address","nodeType":"ElementaryTypeName","src":"2506:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2498:27:37","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":12393,"name":"uint256","nodeType":"ElementaryTypeName","src":"2517:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"public"},{"constant":false,"id":12399,"mutability":"mutable","name":"comptroller","nameLocation":"2586:11:37","nodeType":"VariableDeclaration","scope":12420,"src":"2565:32:37","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_Comptroller_$9130","typeString":"contract Comptroller"},"typeName":{"id":12398,"nodeType":"UserDefinedTypeName","pathNode":{"id":12397,"name":"Comptroller","nameLocations":["2565:11:37"],"nodeType":"IdentifierPath","referencedDeclaration":9130,"src":"2565:11:37"},"referencedDeclaration":9130,"src":"2565:11:37","typeDescriptions":{"typeIdentifier":"t_contract$_Comptroller_$9130","typeString":"contract Comptroller"}},"visibility":"internal"},{"constant":false,"functionSelector":"f7c618c1","id":12402,"mutability":"mutable","name":"rewardToken","nameLocation":"2629:11:37","nodeType":"VariableDeclaration","scope":12420,"src":"2604:36:37","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":12401,"nodeType":"UserDefinedTypeName","pathNode":{"id":12400,"name":"IERC20Upgradeable","nameLocations":["2604:17:37"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"2604:17:37"},"referencedDeclaration":1352,"src":"2604:17:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"public"},{"constant":false,"documentation":{"id":12403,"nodeType":"StructuredDocumentation","src":"2647:64:37","text":"@notice The REWARD TOKEN market supply state for each market"},"functionSelector":"81814945","id":12408,"mutability":"mutable","name":"rewardTokenSupplyStateTimeBased","nameLocation":"2764:31:37","nodeType":"VariableDeclaration","scope":12420,"src":"2716:79:37","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TimeBasedRewardToken_$12345_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.TimeBasedRewardToken)"},"typeName":{"id":12407,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":12404,"name":"address","nodeType":"ElementaryTypeName","src":"2724:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2716:40:37","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TimeBasedRewardToken_$12345_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.TimeBasedRewardToken)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":12406,"nodeType":"UserDefinedTypeName","pathNode":{"id":12405,"name":"TimeBasedRewardToken","nameLocations":["2735:20:37"],"nodeType":"IdentifierPath","referencedDeclaration":12345,"src":"2735:20:37"},"referencedDeclaration":12345,"src":"2735:20:37","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken"}}},"visibility":"public"},{"constant":false,"documentation":{"id":12409,"nodeType":"StructuredDocumentation","src":"2802:64:37","text":"@notice The REWARD TOKEN market borrow state for each market"},"functionSelector":"8f693ec7","id":12414,"mutability":"mutable","name":"rewardTokenBorrowStateTimeBased","nameLocation":"2919:31:37","nodeType":"VariableDeclaration","scope":12420,"src":"2871:79:37","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TimeBasedRewardToken_$12345_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.TimeBasedRewardToken)"},"typeName":{"id":12413,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":12410,"name":"address","nodeType":"ElementaryTypeName","src":"2879:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2871:40:37","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TimeBasedRewardToken_$12345_storage_$","typeString":"mapping(address => struct RewardsDistributorStorage.TimeBasedRewardToken)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":12412,"nodeType":"UserDefinedTypeName","pathNode":{"id":12411,"name":"TimeBasedRewardToken","nameLocations":["2890:20:37"],"nodeType":"IdentifierPath","referencedDeclaration":12345,"src":"2890:20:37"},"referencedDeclaration":12345,"src":"2890:20:37","typeDescriptions":{"typeIdentifier":"t_struct$_TimeBasedRewardToken_$12345_storage_ptr","typeString":"struct RewardsDistributorStorage.TimeBasedRewardToken"}}},"visibility":"public"},{"constant":false,"documentation":{"id":12415,"nodeType":"StructuredDocumentation","src":"2957:253:37","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":12419,"mutability":"mutable","name":"__gap","nameLocation":"3235:5:37","nodeType":"VariableDeclaration","scope":12420,"src":"3215:25:37","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$37_storage","typeString":"uint256[37]"},"typeName":{"baseType":{"id":12416,"name":"uint256","nodeType":"ElementaryTypeName","src":"3215:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12418,"length":{"hexValue":"3337","id":12417,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3223:2:37","typeDescriptions":{"typeIdentifier":"t_rational_37_by_1","typeString":"int_const 37"},"value":"37"},"nodeType":"ArrayTypeName","src":"3215:11:37","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$37_storage_ptr","typeString":"uint256[37]"}},"visibility":"private"}],"scope":12421,"src":"325:2918:37","usedErrors":[],"usedEvents":[]}],"src":"41:3203:37"},"id":37},"@venusprotocol/isolated-pools/contracts/VToken.sol":{"ast":{"absolutePath":"@venusprotocol/isolated-pools/contracts/VToken.sol","exportedSymbols":{"AccessControlledV8":[5035],"ComptrollerInterface":[9353],"ComptrollerViewInterface":[9431],"ExponentialNoError":[10223],"IERC20Upgradeable":[1352],"IProtocolShareReserve":[16212],"InterestRateModel":[10266],"Ownable2StepUpgradeable":[106],"SafeERC20Upgradeable":[2440],"TimeManagerV8":[16319],"TokenErrorReporter":[9636],"VToken":[15506],"VTokenInterface":[16106],"ensureNonzeroAddress":[16143]},"id":15507,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":12422,"literals":["solidity","0.8",".25"],"nodeType":"PragmaDirective","src":"41:23:38"},{"absolutePath":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol","id":12424,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15507,"sourceUnit":107,"src":"66:113:38","symbolAliases":[{"foreign":{"id":12423,"name":"Ownable2StepUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":106,"src":"75:23:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","id":12426,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15507,"sourceUnit":1353,"src":"180:106:38","symbolAliases":[{"foreign":{"id":12425,"name":"IERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"189:17:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol","id":12428,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15507,"sourceUnit":2441,"src":"287:118:38","symbolAliases":[{"foreign":{"id":12427,"name":"SafeERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2440,"src":"296:20:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol","file":"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol","id":12430,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15507,"sourceUnit":5036,"src":"406:117:38","symbolAliases":[{"foreign":{"id":12429,"name":"AccessControlledV8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5035,"src":"415:18:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol","file":"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol","id":12432,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15507,"sourceUnit":16213,"src":"524:119:38","symbolAliases":[{"foreign":{"id":12431,"name":"IProtocolShareReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16212,"src":"533:21:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol","file":"./VTokenInterfaces.sol","id":12434,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15507,"sourceUnit":16107,"src":"645:57:38","symbolAliases":[{"foreign":{"id":12433,"name":"VTokenInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16106,"src":"654:15:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol","file":"./ComptrollerInterface.sol","id":12437,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15507,"sourceUnit":9432,"src":"703:92:38","symbolAliases":[{"foreign":{"id":12435,"name":"ComptrollerInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9353,"src":"712:20:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":12436,"name":"ComptrollerViewInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9431,"src":"734:24:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol","file":"./ErrorReporter.sol","id":12439,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15507,"sourceUnit":9637,"src":"796:57:38","symbolAliases":[{"foreign":{"id":12438,"name":"TokenErrorReporter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9636,"src":"805:18:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol","file":"./InterestRateModel.sol","id":12441,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15507,"sourceUnit":10267,"src":"854:60:38","symbolAliases":[{"foreign":{"id":12440,"name":"InterestRateModel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10266,"src":"863:17:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol","file":"./ExponentialNoError.sol","id":12443,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15507,"sourceUnit":10224,"src":"915:62:38","symbolAliases":[{"foreign":{"id":12442,"name":"ExponentialNoError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10223,"src":"924:18:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol","file":"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol","id":12445,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15507,"sourceUnit":16320,"src":"978:94:38","symbolAliases":[{"foreign":{"id":12444,"name":"TimeManagerV8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16319,"src":"987:13:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/lib/validators.sol","file":"./lib/validators.sol","id":12447,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15507,"sourceUnit":16144,"src":"1073:60:38","symbolAliases":[{"foreign":{"id":12446,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16143,"src":"1082:20:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":12449,"name":"Ownable2StepUpgradeable","nameLocations":["3375:23:38"],"nodeType":"IdentifierPath","referencedDeclaration":106,"src":"3375:23:38"},"id":12450,"nodeType":"InheritanceSpecifier","src":"3375:23:38"},{"baseName":{"id":12451,"name":"AccessControlledV8","nameLocations":["3404:18:38"],"nodeType":"IdentifierPath","referencedDeclaration":5035,"src":"3404:18:38"},"id":12452,"nodeType":"InheritanceSpecifier","src":"3404:18:38"},{"baseName":{"id":12453,"name":"VTokenInterface","nameLocations":["3428:15:38"],"nodeType":"IdentifierPath","referencedDeclaration":16106,"src":"3428:15:38"},"id":12454,"nodeType":"InheritanceSpecifier","src":"3428:15:38"},{"baseName":{"id":12455,"name":"ExponentialNoError","nameLocations":["3449:18:38"],"nodeType":"IdentifierPath","referencedDeclaration":10223,"src":"3449:18:38"},"id":12456,"nodeType":"InheritanceSpecifier","src":"3449:18:38"},{"baseName":{"id":12457,"name":"TokenErrorReporter","nameLocations":["3473:18:38"],"nodeType":"IdentifierPath","referencedDeclaration":9636,"src":"3473:18:38"},"id":12458,"nodeType":"InheritanceSpecifier","src":"3473:18:38"},{"baseName":{"id":12459,"name":"TimeManagerV8","nameLocations":["3497:13:38"],"nodeType":"IdentifierPath","referencedDeclaration":16319,"src":"3497:13:38"},"id":12460,"nodeType":"InheritanceSpecifier","src":"3497:13:38"}],"canonicalName":"VToken","contractDependencies":[],"contractKind":"contract","documentation":{"id":12448,"nodeType":"StructuredDocumentation","src":"1135:2216:38","text":" @title VToken\n @author Venus\n @notice Each asset that is supported by a pool is integrated through an instance of the `VToken` contract. As outlined in the protocol overview,\n each isolated pool creates its own `vToken` corresponding to an asset. Within a given pool, each included `vToken` is referred to as a market of\n the pool. The main actions a user regularly interacts with in a market are:\n- mint/redeem of vTokens;\n- transfer of vTokens;\n- borrow/repay a loan on an underlying asset;\n- liquidate a borrow or liquidate/heal an account.\n A user supplies the underlying asset to a pool by minting `vTokens`, where the corresponding `vToken` amount is determined by the `exchangeRate`.\n The `exchangeRate` will change over time, dependent on a number of factors, some of which accrue interest. Additionally, once users have minted\n `vToken` in a pool, they can borrow any asset in the isolated pool by using their `vToken` as collateral. In order to borrow an asset or use a `vToken`\n as collateral, the user must be entered into each corresponding market (else, the `vToken` will not be considered collateral for a borrow). Note that\n a user may borrow up to a portion of their collateral determined by the market’s collateral factor. However, if their borrowed amount exceeds an amount\n calculated using the market’s corresponding liquidation threshold, the borrow is eligible for liquidation. When a user repays a borrow, they must also\n pay off interest accrued on the borrow.\n \n The Venus protocol includes unique mechanisms for healing an account and liquidating an account. These actions are performed in the `Comptroller`\n and consider all borrows and collateral for which a given account is entered within a market. These functions may only be called on an account with a\n total collateral amount that is no larger than a universal `minLiquidatableCollateral` value, which is used for all markets within a `Comptroller`.\n Both functions settle all of an account’s borrows, but `healAccount()` may add `badDebt` to a vToken. For more detail, see the description of\n `healAccount()` and `liquidateAccount()` in the `Comptroller` summary section below."},"fullyImplemented":true,"id":15506,"internalFunctionIDs":{"16308":1,"16318":2},"linearizedBaseContracts":[15506,16319,9636,10223,16106,15605,5035,106,239,2821,576],"name":"VToken","nameLocation":"3361:6:38","nodeType":"ContractDefinition","nodes":[{"global":false,"id":12464,"libraryName":{"id":12461,"name":"SafeERC20Upgradeable","nameLocations":["3523:20:38"],"nodeType":"IdentifierPath","referencedDeclaration":2440,"src":"3523:20:38"},"nodeType":"UsingForDirective","src":"3517:49:38","typeName":{"id":12463,"nodeType":"UserDefinedTypeName","pathNode":{"id":12462,"name":"IERC20Upgradeable","nameLocations":["3548:17:38"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"3548:17:38"},"referencedDeclaration":1352,"src":"3548:17:38","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}}},{"constant":true,"id":12467,"mutability":"constant","name":"DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA","nameLocation":"3598:37:38","nodeType":"VariableDeclaration","scope":15506,"src":"3572:70:38","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12465,"name":"uint256","nodeType":"ElementaryTypeName","src":"3572:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"35653136","id":12466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3638:4:38","typeDescriptions":{"typeIdentifier":"t_rational_50000000000000000_by_1","typeString":"int_const 50000000000000000"},"value":"5e16"},"visibility":"internal"},{"constant":true,"id":12470,"mutability":"constant","name":"MAX_RESERVE_FACTOR_MANTISSA","nameLocation":"3752:27:38","nodeType":"VariableDeclaration","scope":15506,"src":"3726:60:38","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12468,"name":"uint256","nodeType":"ElementaryTypeName","src":"3726:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653138","id":12469,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3782:4:38","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":false,"documentation":{"id":12471,"nodeType":"StructuredDocumentation","src":"3871:61:38","text":"@custom:oz-upgrades-unsafe-allow state-variable-immutable"},"id":12473,"mutability":"immutable","name":"MAX_BORROW_RATE_MANTISSA","nameLocation":"3964:24:38","nodeType":"VariableDeclaration","scope":15506,"src":"3937:51:38","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12472,"name":"uint256","nodeType":"ElementaryTypeName","src":"3937:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"body":{"id":12490,"nodeType":"Block","src":"4156:153:38","statements":[{"expression":{"arguments":[{"id":12477,"name":"_notEntered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15526,"src":"4174:11:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"72652d656e7465726564","id":12478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4187:12:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_987a3f65bf6c5144d945a7d9587fa166ee3a901eb2b594a0815c3c20bf841a5e","typeString":"literal_string \"re-entered\""},"value":"re-entered"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_987a3f65bf6c5144d945a7d9587fa166ee3a901eb2b594a0815c3c20bf841a5e","typeString":"literal_string \"re-entered\""}],"id":12476,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4166:7:38","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":12479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4166:34:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12480,"nodeType":"ExpressionStatement","src":"4166:34:38"},{"expression":{"id":12483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12481,"name":"_notEntered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15526,"src":"4210:11:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":12482,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4224:5:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"4210:19:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12484,"nodeType":"ExpressionStatement","src":"4210:19:38"},{"id":12485,"nodeType":"PlaceholderStatement","src":"4239:1:38"},{"expression":{"id":12488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12486,"name":"_notEntered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15526,"src":"4250:11:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":12487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4264:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"4250:18:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12489,"nodeType":"ExpressionStatement","src":"4250:18:38"}]},"documentation":{"id":12474,"nodeType":"StructuredDocumentation","src":"4039:88:38","text":" @dev Prevents a contract from calling itself, directly or indirectly."},"id":12491,"name":"nonReentrant","nameLocation":"4141:12:38","nodeType":"ModifierDefinition","parameters":{"id":12475,"nodeType":"ParameterList","parameters":[],"src":"4153:2:38"},"src":"4132:177:38","virtual":false,"visibility":"internal"},{"body":{"id":12519,"nodeType":"Block","src":"4775:307:38","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12506,"name":"maxBorrowRateMantissa_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12498,"src":"4917:22:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"31653138","id":12507,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4943:4:38","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"src":"4917:30:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d617820626f72726f772072617465206d757374206265203c3d2031653138","id":12509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4949:33:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_d49bb63550654b8f0c8136961b13cd7203d45a31b139dcdcb70d95c21dcd6d8d","typeString":"literal_string \"Max borrow rate must be <= 1e18\""},"value":"Max borrow rate must be <= 1e18"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d49bb63550654b8f0c8136961b13cd7203d45a31b139dcdcb70d95c21dcd6d8d","typeString":"literal_string \"Max borrow rate must be <= 1e18\""}],"id":12505,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4909:7:38","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":12510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4909:74:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12511,"nodeType":"ExpressionStatement","src":"4909:74:38"},{"expression":{"id":12514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12512,"name":"MAX_BORROW_RATE_MANTISSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12473,"src":"4994:24:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12513,"name":"maxBorrowRateMantissa_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12498,"src":"5021:22:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4994:49:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12515,"nodeType":"ExpressionStatement","src":"4994:49:38"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12516,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":557,"src":"5053:20:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":12517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5053:22:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12518,"nodeType":"ExpressionStatement","src":"5053:22:38"}]},"documentation":{"id":12492,"nodeType":"StructuredDocumentation","src":"4315:298:38","text":" @param timeBased_ A boolean indicating whether the contract is based on time or block.\n @param blocksPerYear_ The number of blocks per year\n @param maxBorrowRateMantissa_ The maximum value of borrowing rate mantissa\n @custom:oz-upgrades-unsafe-allow constructor"},"id":12520,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":12501,"name":"timeBased_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12494,"src":"4747:10:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":12502,"name":"blocksPerYear_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12496,"src":"4759:14:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12503,"kind":"baseConstructorSpecifier","modifierName":{"id":12500,"name":"TimeManagerV8","nameLocations":["4733:13:38"],"nodeType":"IdentifierPath","referencedDeclaration":16319,"src":"4733:13:38"},"nodeType":"ModifierInvocation","src":"4733:41:38"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":12499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12494,"mutability":"mutable","name":"timeBased_","nameLocation":"4644:10:38","nodeType":"VariableDeclaration","scope":12520,"src":"4639:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12493,"name":"bool","nodeType":"ElementaryTypeName","src":"4639:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12496,"mutability":"mutable","name":"blocksPerYear_","nameLocation":"4672:14:38","nodeType":"VariableDeclaration","scope":12520,"src":"4664:22:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12495,"name":"uint256","nodeType":"ElementaryTypeName","src":"4664:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12498,"mutability":"mutable","name":"maxBorrowRateMantissa_","nameLocation":"4704:22:38","nodeType":"VariableDeclaration","scope":12520,"src":"4696:30:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12497,"name":"uint256","nodeType":"ElementaryTypeName","src":"4696:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4629:103:38"},"returnParameters":{"id":12504,"nodeType":"ParameterList","parameters":[],"src":"4775:0:38"},"scope":15506,"src":"4618:464:38","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":12569,"nodeType":"Block","src":"6621:417:38","statements":[{"expression":{"arguments":[{"id":12552,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12539,"src":"6652:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12551,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16143,"src":"6631:20:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":12553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6631:28:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12554,"nodeType":"ExpressionStatement","src":"6631:28:38"},{"expression":{"arguments":[{"id":12556,"name":"underlying_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12523,"src":"6728:11:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12557,"name":"comptroller_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12526,"src":"6753:12:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},{"id":12558,"name":"interestRateModel_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12529,"src":"6779:18:38","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},{"id":12559,"name":"initialExchangeRateMantissa_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12531,"src":"6811:28:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12560,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12533,"src":"6853:5:38","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":12561,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12535,"src":"6872:7:38","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":12562,"name":"decimals_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12537,"src":"6893:9:38","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":12563,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12539,"src":"6916:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12564,"name":"accessControlManager_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12541,"src":"6936:21:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12565,"name":"riskManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12544,"src":"6971:14:38","typeDescriptions":{"typeIdentifier":"t_struct$_RiskManagementInit_$15613_memory_ptr","typeString":"struct VTokenInterface.RiskManagementInit memory"}},{"id":12566,"name":"reserveFactorMantissa_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12546,"src":"6999:22:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"},{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_RiskManagementInit_$15613_memory_ptr","typeString":"struct VTokenInterface.RiskManagementInit memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12555,"name":"_initialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15333,"src":"6703:11:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_ComptrollerInterface_$9353_$_t_contract$_InterestRateModel_$10266_$_t_uint256_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint8_$_t_address_$_t_address_$_t_struct$_RiskManagementInit_$15613_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (address,contract ComptrollerInterface,contract InterestRateModel,uint256,string memory,string memory,uint8,address,address,struct VTokenInterface.RiskManagementInit memory,uint256)"}},"id":12567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6703:328:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12568,"nodeType":"ExpressionStatement","src":"6703:328:38"}]},"documentation":{"id":12521,"nodeType":"StructuredDocumentation","src":"5088:1079:38","text":" @notice Construct a new money market\n @param underlying_ The address of the underlying asset\n @param comptroller_ The address of the Comptroller\n @param interestRateModel_ The address of the interest rate model\n @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\n @param name_ ERC-20 name of this token\n @param symbol_ ERC-20 symbol of this token\n @param decimals_ ERC-20 decimal precision of this token\n @param admin_ Address of the administrator of this token\n @param accessControlManager_ AccessControlManager contract address\n @param riskManagement Addresses of risk & income related contracts\n @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\n @custom:error ZeroAddressNotAllowed is thrown when admin address is zero\n @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\n @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero"},"functionSelector":"8a42c319","id":12570,"implemented":true,"kind":"function","modifiers":[{"id":12549,"kind":"modifierInvocation","modifierName":{"id":12548,"name":"initializer","nameLocations":["6609:11:38"],"nodeType":"IdentifierPath","referencedDeclaration":478,"src":"6609:11:38"},"nodeType":"ModifierInvocation","src":"6609:11:38"}],"name":"initialize","nameLocation":"6181:10:38","nodeType":"FunctionDefinition","parameters":{"id":12547,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12523,"mutability":"mutable","name":"underlying_","nameLocation":"6209:11:38","nodeType":"VariableDeclaration","scope":12570,"src":"6201:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12522,"name":"address","nodeType":"ElementaryTypeName","src":"6201:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12526,"mutability":"mutable","name":"comptroller_","nameLocation":"6251:12:38","nodeType":"VariableDeclaration","scope":12570,"src":"6230:33:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"},"typeName":{"id":12525,"nodeType":"UserDefinedTypeName","pathNode":{"id":12524,"name":"ComptrollerInterface","nameLocations":["6230:20:38"],"nodeType":"IdentifierPath","referencedDeclaration":9353,"src":"6230:20:38"},"referencedDeclaration":9353,"src":"6230:20:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"visibility":"internal"},{"constant":false,"id":12529,"mutability":"mutable","name":"interestRateModel_","nameLocation":"6291:18:38","nodeType":"VariableDeclaration","scope":12570,"src":"6273:36:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"},"typeName":{"id":12528,"nodeType":"UserDefinedTypeName","pathNode":{"id":12527,"name":"InterestRateModel","nameLocations":["6273:17:38"],"nodeType":"IdentifierPath","referencedDeclaration":10266,"src":"6273:17:38"},"referencedDeclaration":10266,"src":"6273:17:38","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},"visibility":"internal"},{"constant":false,"id":12531,"mutability":"mutable","name":"initialExchangeRateMantissa_","nameLocation":"6327:28:38","nodeType":"VariableDeclaration","scope":12570,"src":"6319:36:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12530,"name":"uint256","nodeType":"ElementaryTypeName","src":"6319:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12533,"mutability":"mutable","name":"name_","nameLocation":"6379:5:38","nodeType":"VariableDeclaration","scope":12570,"src":"6365:19:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12532,"name":"string","nodeType":"ElementaryTypeName","src":"6365:6:38","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":12535,"mutability":"mutable","name":"symbol_","nameLocation":"6408:7:38","nodeType":"VariableDeclaration","scope":12570,"src":"6394:21:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12534,"name":"string","nodeType":"ElementaryTypeName","src":"6394:6:38","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":12537,"mutability":"mutable","name":"decimals_","nameLocation":"6431:9:38","nodeType":"VariableDeclaration","scope":12570,"src":"6425:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":12536,"name":"uint8","nodeType":"ElementaryTypeName","src":"6425:5:38","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":12539,"mutability":"mutable","name":"admin_","nameLocation":"6458:6:38","nodeType":"VariableDeclaration","scope":12570,"src":"6450:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12538,"name":"address","nodeType":"ElementaryTypeName","src":"6450:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12541,"mutability":"mutable","name":"accessControlManager_","nameLocation":"6482:21:38","nodeType":"VariableDeclaration","scope":12570,"src":"6474:29:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12540,"name":"address","nodeType":"ElementaryTypeName","src":"6474:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12544,"mutability":"mutable","name":"riskManagement","nameLocation":"6539:14:38","nodeType":"VariableDeclaration","scope":12570,"src":"6513:40:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RiskManagementInit_$15613_memory_ptr","typeString":"struct VTokenInterface.RiskManagementInit"},"typeName":{"id":12543,"nodeType":"UserDefinedTypeName","pathNode":{"id":12542,"name":"RiskManagementInit","nameLocations":["6513:18:38"],"nodeType":"IdentifierPath","referencedDeclaration":15613,"src":"6513:18:38"},"referencedDeclaration":15613,"src":"6513:18:38","typeDescriptions":{"typeIdentifier":"t_struct$_RiskManagementInit_$15613_storage_ptr","typeString":"struct VTokenInterface.RiskManagementInit"}},"visibility":"internal"},{"constant":false,"id":12546,"mutability":"mutable","name":"reserveFactorMantissa_","nameLocation":"6571:22:38","nodeType":"VariableDeclaration","scope":12570,"src":"6563:30:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12545,"name":"uint256","nodeType":"ElementaryTypeName","src":"6563:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6191:408:38"},"returnParameters":{"id":12550,"nodeType":"ParameterList","parameters":[],"src":"6621:0:38"},"scope":15506,"src":"6172:866:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15946],"body":{"id":12594,"nodeType":"Block","src":"7574:90:38","statements":[{"expression":{"arguments":[{"expression":{"id":12584,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7600:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7604:6:38","memberName":"sender","nodeType":"MemberAccess","src":"7600:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":12586,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7612:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7616:6:38","memberName":"sender","nodeType":"MemberAccess","src":"7612:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12588,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12573,"src":"7624:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12589,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12575,"src":"7629:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12583,"name":"_transferTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15207,"src":"7584:15:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":12590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7584:52:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12591,"nodeType":"ExpressionStatement","src":"7584:52:38"},{"expression":{"hexValue":"74727565","id":12592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7653:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":12582,"id":12593,"nodeType":"Return","src":"7646:11:38"}]},"documentation":{"id":12571,"nodeType":"StructuredDocumentation","src":"7044:432:38","text":" @notice Transfer `amount` tokens from `msg.sender` to `dst`\n @param dst The address of the destination account\n @param amount The number of tokens to transfer\n @return success True if the transfer succeeded, reverts otherwise\n @custom:event Emits Transfer event on success\n @custom:error TransferNotAllowed is thrown if trying to transfer to self\n @custom:access Not restricted"},"functionSelector":"a9059cbb","id":12595,"implemented":true,"kind":"function","modifiers":[{"id":12579,"kind":"modifierInvocation","modifierName":{"id":12578,"name":"nonReentrant","nameLocations":["7546:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":12491,"src":"7546:12:38"},"nodeType":"ModifierInvocation","src":"7546:12:38"}],"name":"transfer","nameLocation":"7490:8:38","nodeType":"FunctionDefinition","overrides":{"id":12577,"nodeType":"OverrideSpecifier","overrides":[],"src":"7537:8:38"},"parameters":{"id":12576,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12573,"mutability":"mutable","name":"dst","nameLocation":"7507:3:38","nodeType":"VariableDeclaration","scope":12595,"src":"7499:11:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12572,"name":"address","nodeType":"ElementaryTypeName","src":"7499:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12575,"mutability":"mutable","name":"amount","nameLocation":"7520:6:38","nodeType":"VariableDeclaration","scope":12595,"src":"7512:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12574,"name":"uint256","nodeType":"ElementaryTypeName","src":"7512:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7498:29:38"},"returnParameters":{"id":12582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12581,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12595,"src":"7568:4:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12580,"name":"bool","nodeType":"ElementaryTypeName","src":"7568:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7567:6:38"},"scope":15506,"src":"7481:183:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15957],"body":{"id":12620,"nodeType":"Block","src":"8262:83:38","statements":[{"expression":{"arguments":[{"expression":{"id":12611,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8288:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8292:6:38","memberName":"sender","nodeType":"MemberAccess","src":"8288:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12613,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12598,"src":"8300:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12614,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12600,"src":"8305:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12615,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12602,"src":"8310:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12610,"name":"_transferTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15207,"src":"8272:15:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":12616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8272:45:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12617,"nodeType":"ExpressionStatement","src":"8272:45:38"},{"expression":{"hexValue":"74727565","id":12618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8334:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":12609,"id":12619,"nodeType":"Return","src":"8327:11:38"}]},"documentation":{"id":12596,"nodeType":"StructuredDocumentation","src":"7670:477:38","text":" @notice Transfer `amount` tokens from `src` to `dst`\n @param src The address of the source account\n @param dst The address of the destination account\n @param amount The number of tokens to transfer\n @return success True if the transfer succeeded, reverts otherwise\n @custom:event Emits Transfer event on success\n @custom:error TransferNotAllowed is thrown if trying to transfer to self\n @custom:access Not restricted"},"functionSelector":"23b872dd","id":12621,"implemented":true,"kind":"function","modifiers":[{"id":12606,"kind":"modifierInvocation","modifierName":{"id":12605,"name":"nonReentrant","nameLocations":["8234:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":12491,"src":"8234:12:38"},"nodeType":"ModifierInvocation","src":"8234:12:38"}],"name":"transferFrom","nameLocation":"8161:12:38","nodeType":"FunctionDefinition","overrides":{"id":12604,"nodeType":"OverrideSpecifier","overrides":[],"src":"8225:8:38"},"parameters":{"id":12603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12598,"mutability":"mutable","name":"src","nameLocation":"8182:3:38","nodeType":"VariableDeclaration","scope":12621,"src":"8174:11:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12597,"name":"address","nodeType":"ElementaryTypeName","src":"8174:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12600,"mutability":"mutable","name":"dst","nameLocation":"8195:3:38","nodeType":"VariableDeclaration","scope":12621,"src":"8187:11:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12599,"name":"address","nodeType":"ElementaryTypeName","src":"8187:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12602,"mutability":"mutable","name":"amount","nameLocation":"8208:6:38","nodeType":"VariableDeclaration","scope":12621,"src":"8200:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12601,"name":"uint256","nodeType":"ElementaryTypeName","src":"8200:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8173:42:38"},"returnParameters":{"id":12609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12608,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12621,"src":"8256:4:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12607,"name":"bool","nodeType":"ElementaryTypeName","src":"8256:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8255:6:38"},"scope":15506,"src":"8152:193:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[16022],"body":{"id":12657,"nodeType":"Block","src":"9066:198:38","statements":[{"expression":{"arguments":[{"id":12633,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12624,"src":"9097:7:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12632,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16143,"src":"9076:20:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":12634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9076:29:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12635,"nodeType":"ExpressionStatement","src":"9076:29:38"},{"assignments":[12637],"declarations":[{"constant":false,"id":12637,"mutability":"mutable","name":"src","nameLocation":"9124:3:38","nodeType":"VariableDeclaration","scope":12657,"src":"9116:11:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12636,"name":"address","nodeType":"ElementaryTypeName","src":"9116:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":12640,"initialValue":{"expression":{"id":12638,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9130:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9134:6:38","memberName":"sender","nodeType":"MemberAccess","src":"9130:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"9116:24:38"},{"expression":{"id":12647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":12641,"name":"transferAllowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15582,"src":"9150:18:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":12644,"indexExpression":{"id":12642,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12637,"src":"9169:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9150:23:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":12645,"indexExpression":{"id":12643,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12624,"src":"9174:7:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9150:32:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12646,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12626,"src":"9185:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9150:41:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12648,"nodeType":"ExpressionStatement","src":"9150:41:38"},{"eventCall":{"arguments":[{"id":12650,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12637,"src":"9215:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12651,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12624,"src":"9220:7:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12652,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12626,"src":"9229:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12649,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15783,"src":"9206:8:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":12653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9206:30:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12654,"nodeType":"EmitStatement","src":"9201:35:38"},{"expression":{"hexValue":"74727565","id":12655,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9253:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":12631,"id":12656,"nodeType":"Return","src":"9246:11:38"}]},"documentation":{"id":12622,"nodeType":"StructuredDocumentation","src":"8351:627:38","text":" @notice Approve `spender` to transfer up to `amount` from `src`\n @dev This will overwrite the approval amount for `spender`\n  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\n @param spender The address of the account which may transfer tokens\n @param amount The number of tokens that are approved (uint256.max means infinite)\n @return success Whether or not the approval succeeded\n @custom:event Emits Approval event\n @custom:access Not restricted\n @custom:error ZeroAddressNotAllowed is thrown when spender address is zero"},"functionSelector":"095ea7b3","id":12658,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"8992:7:38","nodeType":"FunctionDefinition","overrides":{"id":12628,"nodeType":"OverrideSpecifier","overrides":[],"src":"9042:8:38"},"parameters":{"id":12627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12624,"mutability":"mutable","name":"spender","nameLocation":"9008:7:38","nodeType":"VariableDeclaration","scope":12658,"src":"9000:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12623,"name":"address","nodeType":"ElementaryTypeName","src":"9000:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12626,"mutability":"mutable","name":"amount","nameLocation":"9025:6:38","nodeType":"VariableDeclaration","scope":12658,"src":"9017:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12625,"name":"uint256","nodeType":"ElementaryTypeName","src":"9017:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8999:33:38"},"returnParameters":{"id":12631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12630,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12658,"src":"9060:4:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12629,"name":"bool","nodeType":"ElementaryTypeName","src":"9060:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9059:6:38"},"scope":15506,"src":"8983:281:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[16031],"body":{"id":12706,"nodeType":"Block","src":"9805:312:38","statements":[{"expression":{"arguments":[{"id":12670,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12661,"src":"9836:7:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12669,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16143,"src":"9815:20:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":12671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9815:29:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12672,"nodeType":"ExpressionStatement","src":"9815:29:38"},{"assignments":[12674],"declarations":[{"constant":false,"id":12674,"mutability":"mutable","name":"src","nameLocation":"9863:3:38","nodeType":"VariableDeclaration","scope":12706,"src":"9855:11:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12673,"name":"address","nodeType":"ElementaryTypeName","src":"9855:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":12677,"initialValue":{"expression":{"id":12675,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9869:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9873:6:38","memberName":"sender","nodeType":"MemberAccess","src":"9869:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"9855:24:38"},{"assignments":[12679],"declarations":[{"constant":false,"id":12679,"mutability":"mutable","name":"newAllowance","nameLocation":"9897:12:38","nodeType":"VariableDeclaration","scope":12706,"src":"9889:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12678,"name":"uint256","nodeType":"ElementaryTypeName","src":"9889:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12685,"initialValue":{"baseExpression":{"baseExpression":{"id":12680,"name":"transferAllowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15582,"src":"9912:18:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":12682,"indexExpression":{"id":12681,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12674,"src":"9931:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9912:23:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":12684,"indexExpression":{"id":12683,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12661,"src":"9936:7:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9912:32:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9889:55:38"},{"expression":{"id":12688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12686,"name":"newAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12679,"src":"9954:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":12687,"name":"addedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12663,"src":"9970:10:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9954:26:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12689,"nodeType":"ExpressionStatement","src":"9954:26:38"},{"expression":{"id":12696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":12690,"name":"transferAllowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15582,"src":"9990:18:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":12693,"indexExpression":{"id":12691,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12674,"src":"10009:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9990:23:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":12694,"indexExpression":{"id":12692,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12661,"src":"10014:7:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9990:32:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12695,"name":"newAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12679,"src":"10025:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9990:47:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12697,"nodeType":"ExpressionStatement","src":"9990:47:38"},{"eventCall":{"arguments":[{"id":12699,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12674,"src":"10062:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12700,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12661,"src":"10067:7:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12701,"name":"newAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12679,"src":"10076:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12698,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15783,"src":"10053:8:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":12702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10053:36:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12703,"nodeType":"EmitStatement","src":"10048:41:38"},{"expression":{"hexValue":"74727565","id":12704,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10106:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":12668,"id":12705,"nodeType":"Return","src":"10099:11:38"}]},"documentation":{"id":12659,"nodeType":"StructuredDocumentation","src":"9270:433:38","text":" @notice Increase approval for `spender`\n @param spender The address of the account which may transfer tokens\n @param addedValue The number of additional tokens spender can transfer\n @return success Whether or not the approval succeeded\n @custom:event Emits Approval event\n @custom:access Not restricted\n @custom:error ZeroAddressNotAllowed is thrown when spender address is zero"},"functionSelector":"39509351","id":12707,"implemented":true,"kind":"function","modifiers":[],"name":"increaseAllowance","nameLocation":"9717:17:38","nodeType":"FunctionDefinition","overrides":{"id":12665,"nodeType":"OverrideSpecifier","overrides":[],"src":"9781:8:38"},"parameters":{"id":12664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12661,"mutability":"mutable","name":"spender","nameLocation":"9743:7:38","nodeType":"VariableDeclaration","scope":12707,"src":"9735:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12660,"name":"address","nodeType":"ElementaryTypeName","src":"9735:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12663,"mutability":"mutable","name":"addedValue","nameLocation":"9760:10:38","nodeType":"VariableDeclaration","scope":12707,"src":"9752:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12662,"name":"uint256","nodeType":"ElementaryTypeName","src":"9752:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9734:37:38"},"returnParameters":{"id":12668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12667,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12707,"src":"9799:4:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12666,"name":"bool","nodeType":"ElementaryTypeName","src":"9799:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9798:6:38"},"scope":15506,"src":"9708:409:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[16040],"body":{"id":12763,"nodeType":"Block","src":"10667:456:38","statements":[{"expression":{"arguments":[{"id":12719,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12710,"src":"10698:7:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12718,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16143,"src":"10677:20:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":12720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10677:29:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12721,"nodeType":"ExpressionStatement","src":"10677:29:38"},{"assignments":[12723],"declarations":[{"constant":false,"id":12723,"mutability":"mutable","name":"src","nameLocation":"10725:3:38","nodeType":"VariableDeclaration","scope":12763,"src":"10717:11:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12722,"name":"address","nodeType":"ElementaryTypeName","src":"10717:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":12726,"initialValue":{"expression":{"id":12724,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10731:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10735:6:38","memberName":"sender","nodeType":"MemberAccess","src":"10731:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"10717:24:38"},{"assignments":[12728],"declarations":[{"constant":false,"id":12728,"mutability":"mutable","name":"currentAllowance","nameLocation":"10759:16:38","nodeType":"VariableDeclaration","scope":12763,"src":"10751:24:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12727,"name":"uint256","nodeType":"ElementaryTypeName","src":"10751:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12734,"initialValue":{"baseExpression":{"baseExpression":{"id":12729,"name":"transferAllowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15582,"src":"10778:18:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":12731,"indexExpression":{"id":12730,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12723,"src":"10797:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10778:23:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":12733,"indexExpression":{"id":12732,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12710,"src":"10802:7:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10778:32:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10751:59:38"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12736,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12728,"src":"10828:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":12737,"name":"subtractedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12712,"src":"10848:15:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10828:35:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"64656372656173656420616c6c6f77616e63652062656c6f77207a65726f","id":12739,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10865:32:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_500b2609d0ae28daff27dc4a068dcae2171019163b460eb756cfa6b0b62ba48a","typeString":"literal_string \"decreased allowance below zero\""},"value":"decreased allowance below zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_500b2609d0ae28daff27dc4a068dcae2171019163b460eb756cfa6b0b62ba48a","typeString":"literal_string \"decreased allowance below zero\""}],"id":12735,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10820:7:38","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":12740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10820:78:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12741,"nodeType":"ExpressionStatement","src":"10820:78:38"},{"id":12746,"nodeType":"UncheckedBlock","src":"10908:70:38","statements":[{"expression":{"id":12744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12742,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12728,"src":"10932:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":12743,"name":"subtractedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12712,"src":"10952:15:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10932:35:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12745,"nodeType":"ExpressionStatement","src":"10932:35:38"}]},{"expression":{"id":12753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":12747,"name":"transferAllowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15582,"src":"10988:18:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":12750,"indexExpression":{"id":12748,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12723,"src":"11007:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10988:23:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":12751,"indexExpression":{"id":12749,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12710,"src":"11012:7:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10988:32:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12752,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12728,"src":"11023:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10988:51:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12754,"nodeType":"ExpressionStatement","src":"10988:51:38"},{"eventCall":{"arguments":[{"id":12756,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12723,"src":"11064:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12757,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12710,"src":"11069:7:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12758,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12728,"src":"11078:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12755,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15783,"src":"11055:8:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":12759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11055:40:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12760,"nodeType":"EmitStatement","src":"11050:45:38"},{"expression":{"hexValue":"74727565","id":12761,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11112:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":12717,"id":12762,"nodeType":"Return","src":"11105:11:38"}]},"documentation":{"id":12708,"nodeType":"StructuredDocumentation","src":"10123:437:38","text":" @notice Decreases approval for `spender`\n @param spender The address of the account which may transfer tokens\n @param subtractedValue The number of tokens to remove from total approval\n @return success Whether or not the approval succeeded\n @custom:event Emits Approval event\n @custom:access Not restricted\n @custom:error ZeroAddressNotAllowed is thrown when spender address is zero"},"functionSelector":"a457c2d7","id":12764,"implemented":true,"kind":"function","modifiers":[],"name":"decreaseAllowance","nameLocation":"10574:17:38","nodeType":"FunctionDefinition","overrides":{"id":12714,"nodeType":"OverrideSpecifier","overrides":[],"src":"10643:8:38"},"parameters":{"id":12713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12710,"mutability":"mutable","name":"spender","nameLocation":"10600:7:38","nodeType":"VariableDeclaration","scope":12764,"src":"10592:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12709,"name":"address","nodeType":"ElementaryTypeName","src":"10592:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12712,"mutability":"mutable","name":"subtractedValue","nameLocation":"10617:15:38","nodeType":"VariableDeclaration","scope":12764,"src":"10609:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12711,"name":"uint256","nodeType":"ElementaryTypeName","src":"10609:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10591:42:38"},"returnParameters":{"id":12717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12716,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12764,"src":"10661:4:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12715,"name":"bool","nodeType":"ElementaryTypeName","src":"10661:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10660:6:38"},"scope":15506,"src":"10565:558:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[16013],"body":{"id":12788,"nodeType":"Block","src":"11458:154:38","statements":[{"assignments":[12775],"declarations":[{"constant":false,"id":12775,"mutability":"mutable","name":"exchangeRate","nameLocation":"11479:12:38","nodeType":"VariableDeclaration","scope":12788,"src":"11468:23:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":12774,"nodeType":"UserDefinedTypeName","pathNode":{"id":12773,"name":"Exp","nameLocations":["11468:3:38"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"11468:3:38"},"referencedDeclaration":9645,"src":"11468:3:38","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":12780,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":12777,"name":"exchangeRateCurrent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13755,"src":"11510:19:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_uint256_$","typeString":"function () returns (uint256)"}},"id":12778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11510:21:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12776,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"11494:3:38","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":12779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["11500:8:38"],"names":["mantissa"],"nodeType":"FunctionCall","src":"11494:40:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"VariableDeclarationStatement","src":"11468:66:38"},{"expression":{"arguments":[{"id":12782,"name":"exchangeRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12775,"src":"11570:12:38","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"baseExpression":{"id":12783,"name":"accountTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15576,"src":"11584:13:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":12785,"indexExpression":{"id":12784,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12767,"src":"11598:5:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11584:20:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12781,"name":"mul_ScalarTruncate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9701,"src":"11551:18:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct ExponentialNoError.Exp memory,uint256) pure returns (uint256)"}},"id":12786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11551:54:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12772,"id":12787,"nodeType":"Return","src":"11544:61:38"}]},"documentation":{"id":12765,"nodeType":"StructuredDocumentation","src":"11129:244:38","text":" @notice Get the underlying balance of the `owner`\n @dev This also accrues interest in a transaction\n @param owner The address of the account to query\n @return amount The amount of underlying owned by `owner`"},"functionSelector":"3af9e669","id":12789,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOfUnderlying","nameLocation":"11387:19:38","nodeType":"FunctionDefinition","overrides":{"id":12769,"nodeType":"OverrideSpecifier","overrides":[],"src":"11431:8:38"},"parameters":{"id":12768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12767,"mutability":"mutable","name":"owner","nameLocation":"11415:5:38","nodeType":"VariableDeclaration","scope":12789,"src":"11407:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12766,"name":"address","nodeType":"ElementaryTypeName","src":"11407:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11406:15:38"},"returnParameters":{"id":12772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12771,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12789,"src":"11449:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12770,"name":"uint256","nodeType":"ElementaryTypeName","src":"11449:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11448:9:38"},"scope":15506,"src":"11378:234:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[16006],"body":{"id":12803,"nodeType":"Block","src":"11845:62:38","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12798,"name":"accrueInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13910,"src":"11855:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_uint256_$","typeString":"function () returns (uint256)"}},"id":12799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11855:16:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12800,"nodeType":"ExpressionStatement","src":"11855:16:38"},{"expression":{"id":12801,"name":"totalBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15563,"src":"11888:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12797,"id":12802,"nodeType":"Return","src":"11881:19:38"}]},"documentation":{"id":12790,"nodeType":"StructuredDocumentation","src":"11618:142:38","text":" @notice Returns the current total borrows plus accrued interest\n @return totalBorrows The total borrows with interest"},"functionSelector":"73acee98","id":12804,"implemented":true,"kind":"function","modifiers":[{"id":12794,"kind":"modifierInvocation","modifierName":{"id":12793,"name":"nonReentrant","nameLocations":["11814:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":12491,"src":"11814:12:38"},"nodeType":"ModifierInvocation","src":"11814:12:38"}],"name":"totalBorrowsCurrent","nameLocation":"11774:19:38","nodeType":"FunctionDefinition","overrides":{"id":12792,"nodeType":"OverrideSpecifier","overrides":[],"src":"11805:8:38"},"parameters":{"id":12791,"nodeType":"ParameterList","parameters":[],"src":"11793:2:38"},"returnParameters":{"id":12797,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12796,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12804,"src":"11836:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12795,"name":"uint256","nodeType":"ElementaryTypeName","src":"11836:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11835:9:38"},"scope":15506,"src":"11765:142:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15990],"body":{"id":12822,"nodeType":"Block","src":"12301:79:38","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12815,"name":"accrueInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13910,"src":"12311:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_uint256_$","typeString":"function () returns (uint256)"}},"id":12816,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12311:16:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12817,"nodeType":"ExpressionStatement","src":"12311:16:38"},{"expression":{"arguments":[{"id":12819,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12807,"src":"12365:7:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12818,"name":"_borrowBalanceStored","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15461,"src":"12344:20:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":12820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12344:29:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12814,"id":12821,"nodeType":"Return","src":"12337:36:38"}]},"documentation":{"id":12805,"nodeType":"StructuredDocumentation","src":"11913:287:38","text":" @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\n @param account The address whose balance should be calculated after updating borrowIndex\n @return borrowBalance The calculated balance"},"functionSelector":"17bfdfbc","id":12823,"implemented":true,"kind":"function","modifiers":[{"id":12811,"kind":"modifierInvocation","modifierName":{"id":12810,"name":"nonReentrant","nameLocations":["12270:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":12491,"src":"12270:12:38"},"nodeType":"ModifierInvocation","src":"12270:12:38"}],"name":"borrowBalanceCurrent","nameLocation":"12214:20:38","nodeType":"FunctionDefinition","overrides":{"id":12809,"nodeType":"OverrideSpecifier","overrides":[],"src":"12261:8:38"},"parameters":{"id":12808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12807,"mutability":"mutable","name":"account","nameLocation":"12243:7:38","nodeType":"VariableDeclaration","scope":12823,"src":"12235:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12806,"name":"address","nodeType":"ElementaryTypeName","src":"12235:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12234:17:38"},"returnParameters":{"id":12814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12813,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12823,"src":"12292:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12812,"name":"uint256","nodeType":"ElementaryTypeName","src":"12292:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12291:9:38"},"scope":15506,"src":"12205:175:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15820],"body":{"id":12847,"nodeType":"Block","src":"12919:115:38","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12834,"name":"accrueInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13910,"src":"12929:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_uint256_$","typeString":"function () returns (uint256)"}},"id":12835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12929:16:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12836,"nodeType":"ExpressionStatement","src":"12929:16:38"},{"expression":{"arguments":[{"expression":{"id":12838,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12967:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12971:6:38","memberName":"sender","nodeType":"MemberAccess","src":"12967:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":12840,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12979:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12983:6:38","memberName":"sender","nodeType":"MemberAccess","src":"12979:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12842,"name":"mintAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12826,"src":"12991:10:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12837,"name":"_mintFresh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14011,"src":"12956:10:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":12843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12956:46:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12844,"nodeType":"ExpressionStatement","src":"12956:46:38"},{"expression":{"id":12845,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"13019:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12833,"id":12846,"nodeType":"Return","src":"13012:15:38"}]},"documentation":{"id":12824,"nodeType":"StructuredDocumentation","src":"12386:445:38","text":" @notice Sender supplies assets into the market and receives vTokens in exchange\n @dev Accrues interest whether or not the operation succeeds, unless reverted\n @param mintAmount The amount of the underlying asset to supply\n @return error Always NO_ERROR for compatibility with Venus core tooling\n @custom:event Emits Mint and Transfer events; may emit AccrueInterest\n @custom:access Not restricted"},"functionSelector":"a0712d68","id":12848,"implemented":true,"kind":"function","modifiers":[{"id":12830,"kind":"modifierInvocation","modifierName":{"id":12829,"name":"nonReentrant","nameLocations":["12888:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":12491,"src":"12888:12:38"},"nodeType":"ModifierInvocation","src":"12888:12:38"}],"name":"mint","nameLocation":"12845:4:38","nodeType":"FunctionDefinition","overrides":{"id":12828,"nodeType":"OverrideSpecifier","overrides":[],"src":"12879:8:38"},"parameters":{"id":12827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12826,"mutability":"mutable","name":"mintAmount","nameLocation":"12858:10:38","nodeType":"VariableDeclaration","scope":12848,"src":"12850:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12825,"name":"uint256","nodeType":"ElementaryTypeName","src":"12850:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12849:20:38"},"returnParameters":{"id":12833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12832,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12848,"src":"12910:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12831,"name":"uint256","nodeType":"ElementaryTypeName","src":"12910:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12909:9:38"},"scope":15506,"src":"12836:198:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15829],"body":{"id":12877,"nodeType":"Block","src":"13774:150:38","statements":[{"expression":{"arguments":[{"id":12862,"name":"minter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12851,"src":"13805:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12861,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16143,"src":"13784:20:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":12863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13784:28:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12864,"nodeType":"ExpressionStatement","src":"13784:28:38"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12865,"name":"accrueInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13910,"src":"13823:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_uint256_$","typeString":"function () returns (uint256)"}},"id":12866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13823:16:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12867,"nodeType":"ExpressionStatement","src":"13823:16:38"},{"expression":{"arguments":[{"expression":{"id":12869,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13861:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13865:6:38","memberName":"sender","nodeType":"MemberAccess","src":"13861:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12871,"name":"minter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12851,"src":"13873:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12872,"name":"mintAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12853,"src":"13881:10:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12868,"name":"_mintFresh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14011,"src":"13850:10:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":12873,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13850:42:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12874,"nodeType":"ExpressionStatement","src":"13850:42:38"},{"expression":{"id":12875,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"13909:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12860,"id":12876,"nodeType":"Return","src":"13902:15:38"}]},"documentation":{"id":12849,"nodeType":"StructuredDocumentation","src":"13040:624:38","text":" @notice Sender calls on-behalf of minter. minter supplies assets into the market and receives vTokens in exchange\n @dev Accrues interest whether or not the operation succeeds, unless reverted\n @param minter User whom the supply will be attributed to\n @param mintAmount The amount of the underlying asset to supply\n @return error Always NO_ERROR for compatibility with Venus core tooling\n @custom:event Emits Mint and Transfer events; may emit AccrueInterest\n @custom:access Not restricted\n @custom:error ZeroAddressNotAllowed is thrown when minter address is zero"},"functionSelector":"23323e03","id":12878,"implemented":true,"kind":"function","modifiers":[{"id":12857,"kind":"modifierInvocation","modifierName":{"id":12856,"name":"nonReentrant","nameLocations":["13743:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":12491,"src":"13743:12:38"},"nodeType":"ModifierInvocation","src":"13743:12:38"}],"name":"mintBehalf","nameLocation":"13678:10:38","nodeType":"FunctionDefinition","overrides":{"id":12855,"nodeType":"OverrideSpecifier","overrides":[],"src":"13734:8:38"},"parameters":{"id":12854,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12851,"mutability":"mutable","name":"minter","nameLocation":"13697:6:38","nodeType":"VariableDeclaration","scope":12878,"src":"13689:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12850,"name":"address","nodeType":"ElementaryTypeName","src":"13689:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12853,"mutability":"mutable","name":"mintAmount","nameLocation":"13713:10:38","nodeType":"VariableDeclaration","scope":12878,"src":"13705:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12852,"name":"uint256","nodeType":"ElementaryTypeName","src":"13705:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13688:36:38"},"returnParameters":{"id":12860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12859,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12878,"src":"13765:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12858,"name":"uint256","nodeType":"ElementaryTypeName","src":"13765:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13764:9:38"},"scope":15506,"src":"13669:255:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15836],"body":{"id":12903,"nodeType":"Block","src":"14562:122:38","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12889,"name":"accrueInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13910,"src":"14572:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_uint256_$","typeString":"function () returns (uint256)"}},"id":12890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14572:16:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12891,"nodeType":"ExpressionStatement","src":"14572:16:38"},{"expression":{"arguments":[{"expression":{"id":12893,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14612:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14616:6:38","memberName":"sender","nodeType":"MemberAccess","src":"14612:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":12895,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14624:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14628:6:38","memberName":"sender","nodeType":"MemberAccess","src":"14624:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12897,"name":"redeemTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12881,"src":"14636:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":12898,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14650:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":12892,"name":"_redeemFresh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14184,"src":"14599:12:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":12899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14599:53:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12900,"nodeType":"ExpressionStatement","src":"14599:53:38"},{"expression":{"id":12901,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"14669:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12888,"id":12902,"nodeType":"Return","src":"14662:15:38"}]},"documentation":{"id":12879,"nodeType":"StructuredDocumentation","src":"13930:540:38","text":" @notice Sender redeems vTokens in exchange for the underlying asset\n @dev Accrues interest whether or not the operation succeeds, unless reverted\n @param redeemTokens The number of vTokens to redeem into underlying\n @return error Always NO_ERROR for compatibility with Venus core tooling\n @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\n @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\n @custom:access Not restricted"},"functionSelector":"db006a75","id":12904,"implemented":true,"kind":"function","modifiers":[{"id":12885,"kind":"modifierInvocation","modifierName":{"id":12884,"name":"nonReentrant","nameLocations":["14531:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":12491,"src":"14531:12:38"},"nodeType":"ModifierInvocation","src":"14531:12:38"}],"name":"redeem","nameLocation":"14484:6:38","nodeType":"FunctionDefinition","overrides":{"id":12883,"nodeType":"OverrideSpecifier","overrides":[],"src":"14522:8:38"},"parameters":{"id":12882,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12881,"mutability":"mutable","name":"redeemTokens","nameLocation":"14499:12:38","nodeType":"VariableDeclaration","scope":12904,"src":"14491:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12880,"name":"uint256","nodeType":"ElementaryTypeName","src":"14491:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14490:22:38"},"returnParameters":{"id":12888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12887,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12904,"src":"14553:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12886,"name":"uint256","nodeType":"ElementaryTypeName","src":"14553:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14552:9:38"},"scope":15506,"src":"14475:209:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15845],"body":{"id":12934,"nodeType":"Block","src":"15660:166:38","statements":[{"expression":{"arguments":[{"id":12918,"name":"redeemer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12907,"src":"15696:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12917,"name":"_ensureSenderIsDelegateOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15408,"src":"15670:25:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":12919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15670:35:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12920,"nodeType":"ExpressionStatement","src":"15670:35:38"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12921,"name":"accrueInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13910,"src":"15716:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_uint256_$","typeString":"function () returns (uint256)"}},"id":12922,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15716:16:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12923,"nodeType":"ExpressionStatement","src":"15716:16:38"},{"expression":{"arguments":[{"id":12925,"name":"redeemer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12907,"src":"15756:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":12926,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"15766:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15770:6:38","memberName":"sender","nodeType":"MemberAccess","src":"15766:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12928,"name":"redeemTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12909,"src":"15778:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":12929,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15792:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":12924,"name":"_redeemFresh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14184,"src":"15743:12:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":12930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15743:51:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12931,"nodeType":"ExpressionStatement","src":"15743:51:38"},{"expression":{"id":12932,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"15811:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12916,"id":12933,"nodeType":"Return","src":"15804:15:38"}]},"documentation":{"id":12905,"nodeType":"StructuredDocumentation","src":"14690:854:38","text":" @notice Sender redeems assets on behalf of some other address. This function is only available\n   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\n @dev Accrues interest whether or not the operation succeeds, unless reverted\n @param redeemer The user on behalf of whom to redeem\n @param redeemTokens The number of vTokens to redeem into underlying\n @return error Always NO_ERROR for compatibility with Venus core tooling\n @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\n @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\n @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\n @custom:access Not restricted"},"functionSelector":"210bc052","id":12935,"implemented":true,"kind":"function","modifiers":[{"id":12913,"kind":"modifierInvocation","modifierName":{"id":12912,"name":"nonReentrant","nameLocations":["15629:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":12491,"src":"15629:12:38"},"nodeType":"ModifierInvocation","src":"15629:12:38"}],"name":"redeemBehalf","nameLocation":"15558:12:38","nodeType":"FunctionDefinition","overrides":{"id":12911,"nodeType":"OverrideSpecifier","overrides":[],"src":"15620:8:38"},"parameters":{"id":12910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12907,"mutability":"mutable","name":"redeemer","nameLocation":"15579:8:38","nodeType":"VariableDeclaration","scope":12935,"src":"15571:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12906,"name":"address","nodeType":"ElementaryTypeName","src":"15571:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12909,"mutability":"mutable","name":"redeemTokens","nameLocation":"15597:12:38","nodeType":"VariableDeclaration","scope":12935,"src":"15589:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12908,"name":"uint256","nodeType":"ElementaryTypeName","src":"15589:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15570:40:38"},"returnParameters":{"id":12916,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12915,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12935,"src":"15651:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12914,"name":"uint256","nodeType":"ElementaryTypeName","src":"15651:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15650:9:38"},"scope":15506,"src":"15549:277:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15852],"body":{"id":12960,"nodeType":"Block","src":"16287:122:38","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12946,"name":"accrueInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13910,"src":"16297:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_uint256_$","typeString":"function () returns (uint256)"}},"id":12947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16297:16:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12948,"nodeType":"ExpressionStatement","src":"16297:16:38"},{"expression":{"arguments":[{"expression":{"id":12950,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16337:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16341:6:38","memberName":"sender","nodeType":"MemberAccess","src":"16337:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":12952,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16349:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16353:6:38","memberName":"sender","nodeType":"MemberAccess","src":"16349:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":12954,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16361:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":12955,"name":"redeemAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12938,"src":"16364:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12949,"name":"_redeemFresh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14184,"src":"16324:12:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":12956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16324:53:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12957,"nodeType":"ExpressionStatement","src":"16324:53:38"},{"expression":{"id":12958,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"16394:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12945,"id":12959,"nodeType":"Return","src":"16387:15:38"}]},"documentation":{"id":12936,"nodeType":"StructuredDocumentation","src":"15832:353:38","text":" @notice Sender redeems vTokens in exchange for a specified amount of underlying asset\n @dev Accrues interest whether or not the operation succeeds, unless reverted\n @param redeemAmount The amount of underlying to receive from redeeming vTokens\n @return error Always NO_ERROR for compatibility with Venus core tooling"},"functionSelector":"852a12e3","id":12961,"implemented":true,"kind":"function","modifiers":[{"id":12942,"kind":"modifierInvocation","modifierName":{"id":12941,"name":"nonReentrant","nameLocations":["16256:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":12491,"src":"16256:12:38"},"nodeType":"ModifierInvocation","src":"16256:12:38"}],"name":"redeemUnderlying","nameLocation":"16199:16:38","nodeType":"FunctionDefinition","overrides":{"id":12940,"nodeType":"OverrideSpecifier","overrides":[],"src":"16247:8:38"},"parameters":{"id":12939,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12938,"mutability":"mutable","name":"redeemAmount","nameLocation":"16224:12:38","nodeType":"VariableDeclaration","scope":12961,"src":"16216:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12937,"name":"uint256","nodeType":"ElementaryTypeName","src":"16216:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16215:22:38"},"returnParameters":{"id":12945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12944,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12961,"src":"16278:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12943,"name":"uint256","nodeType":"ElementaryTypeName","src":"16278:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16277:9:38"},"scope":15506,"src":"16190:219:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15861],"body":{"id":12991,"nodeType":"Block","src":"17331:166:38","statements":[{"expression":{"arguments":[{"id":12975,"name":"redeemer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12964,"src":"17367:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12974,"name":"_ensureSenderIsDelegateOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15408,"src":"17341:25:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":12976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17341:35:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12977,"nodeType":"ExpressionStatement","src":"17341:35:38"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12978,"name":"accrueInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13910,"src":"17387:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_uint256_$","typeString":"function () returns (uint256)"}},"id":12979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17387:16:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12980,"nodeType":"ExpressionStatement","src":"17387:16:38"},{"expression":{"arguments":[{"id":12982,"name":"redeemer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12964,"src":"17427:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":12983,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17437:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17441:6:38","memberName":"sender","nodeType":"MemberAccess","src":"17437:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":12985,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17449:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":12986,"name":"redeemAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12966,"src":"17452:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12981,"name":"_redeemFresh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14184,"src":"17414:12:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":12987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17414:51:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12988,"nodeType":"ExpressionStatement","src":"17414:51:38"},{"expression":{"id":12989,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"17482:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12973,"id":12990,"nodeType":"Return","src":"17475:15:38"}]},"documentation":{"id":12962,"nodeType":"StructuredDocumentation","src":"16415:768:38","text":" @notice Sender redeems underlying assets on behalf of some other address. This function is only available\n   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\n @dev Accrues interest whether or not the operation succeeds, unless reverted\n @param redeemer, on behalf of whom to redeem\n @param redeemAmount The amount of underlying to receive from redeeming vTokens\n @return error Always NO_ERROR for compatibility with Venus core tooling\n @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\n @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\n @custom:access Not restricted"},"functionSelector":"df3a516e","id":12992,"implemented":true,"kind":"function","modifiers":[{"id":12970,"kind":"modifierInvocation","modifierName":{"id":12969,"name":"nonReentrant","nameLocations":["17300:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":12491,"src":"17300:12:38"},"nodeType":"ModifierInvocation","src":"17300:12:38"}],"name":"redeemUnderlyingBehalf","nameLocation":"17197:22:38","nodeType":"FunctionDefinition","overrides":{"id":12968,"nodeType":"OverrideSpecifier","overrides":[],"src":"17291:8:38"},"parameters":{"id":12967,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12964,"mutability":"mutable","name":"redeemer","nameLocation":"17237:8:38","nodeType":"VariableDeclaration","scope":12992,"src":"17229:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12963,"name":"address","nodeType":"ElementaryTypeName","src":"17229:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12966,"mutability":"mutable","name":"redeemAmount","nameLocation":"17263:12:38","nodeType":"VariableDeclaration","scope":12992,"src":"17255:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12965,"name":"uint256","nodeType":"ElementaryTypeName","src":"17255:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17219:62:38"},"returnParameters":{"id":12973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12972,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12992,"src":"17322:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12971,"name":"uint256","nodeType":"ElementaryTypeName","src":"17322:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17321:9:38"},"scope":15506,"src":"17188:309:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15868],"body":{"id":13016,"nodeType":"Block","src":"18029:119:38","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13003,"name":"accrueInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13910,"src":"18039:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_uint256_$","typeString":"function () returns (uint256)"}},"id":13004,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18039:16:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13005,"nodeType":"ExpressionStatement","src":"18039:16:38"},{"expression":{"arguments":[{"expression":{"id":13007,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18079:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18083:6:38","memberName":"sender","nodeType":"MemberAccess","src":"18079:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13009,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18091:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18095:6:38","memberName":"sender","nodeType":"MemberAccess","src":"18091:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13011,"name":"borrowAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12995,"src":"18103:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13006,"name":"_borrowFresh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14285,"src":"18066:12:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":13012,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18066:50:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13013,"nodeType":"ExpressionStatement","src":"18066:50:38"},{"expression":{"id":13014,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"18133:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13002,"id":13015,"nodeType":"Return","src":"18126:15:38"}]},"documentation":{"id":12993,"nodeType":"StructuredDocumentation","src":"17503:434:38","text":" @notice Sender borrows assets from the protocol to their own address\n @param borrowAmount The amount of the underlying asset to borrow\n @return error Always NO_ERROR for compatibility with Venus core tooling\n @custom:event Emits Borrow event; may emit AccrueInterest\n @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\n @custom:access Not restricted"},"functionSelector":"c5ebeaec","id":13017,"implemented":true,"kind":"function","modifiers":[{"id":12999,"kind":"modifierInvocation","modifierName":{"id":12998,"name":"nonReentrant","nameLocations":["17998:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":12491,"src":"17998:12:38"},"nodeType":"ModifierInvocation","src":"17998:12:38"}],"name":"borrow","nameLocation":"17951:6:38","nodeType":"FunctionDefinition","overrides":{"id":12997,"nodeType":"OverrideSpecifier","overrides":[],"src":"17989:8:38"},"parameters":{"id":12996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12995,"mutability":"mutable","name":"borrowAmount","nameLocation":"17966:12:38","nodeType":"VariableDeclaration","scope":13017,"src":"17958:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12994,"name":"uint256","nodeType":"ElementaryTypeName","src":"17958:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17957:22:38"},"returnParameters":{"id":13002,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13001,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13017,"src":"18020:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13000,"name":"uint256","nodeType":"ElementaryTypeName","src":"18020:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18019:9:38"},"scope":15506,"src":"17942:206:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15877],"body":{"id":13044,"nodeType":"Block","src":"18972:162:38","statements":[{"expression":{"arguments":[{"id":13029,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13020,"src":"19008:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13028,"name":"_ensureSenderIsDelegateOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15408,"src":"18982:25:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":13030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18982:35:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13031,"nodeType":"ExpressionStatement","src":"18982:35:38"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13032,"name":"accrueInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13910,"src":"19027:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_uint256_$","typeString":"function () returns (uint256)"}},"id":13033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19027:16:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13034,"nodeType":"ExpressionStatement","src":"19027:16:38"},{"expression":{"arguments":[{"id":13036,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13020,"src":"19067:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13037,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19077:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19081:6:38","memberName":"sender","nodeType":"MemberAccess","src":"19077:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13039,"name":"borrowAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13022,"src":"19089:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13035,"name":"_borrowFresh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14285,"src":"19054:12:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":13040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19054:48:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13041,"nodeType":"ExpressionStatement","src":"19054:48:38"},{"expression":{"id":13042,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"19119:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13027,"id":13043,"nodeType":"Return","src":"19112:15:38"}]},"documentation":{"id":13018,"nodeType":"StructuredDocumentation","src":"18154:715:38","text":" @notice Sender borrows assets on behalf of some other address. This function is only available\n   for senders, explicitly marked as delegates of the borrower using `comptroller.updateDelegate`\n @param borrower The borrower, on behalf of whom to borrow\n @param borrowAmount The amount of the underlying asset to borrow\n @return error Always NO_ERROR for compatibility with Venus core tooling\n @custom:error DelegateNotApproved is thrown if caller is not approved delegate\n @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\n @custom:event Emits Borrow event; may emit AccrueInterest\n @custom:access Not restricted"},"functionSelector":"856e5bb3","id":13045,"implemented":true,"kind":"function","modifiers":[],"name":"borrowBehalf","nameLocation":"18883:12:38","nodeType":"FunctionDefinition","overrides":{"id":13024,"nodeType":"OverrideSpecifier","overrides":[],"src":"18945:8:38"},"parameters":{"id":13023,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13020,"mutability":"mutable","name":"borrower","nameLocation":"18904:8:38","nodeType":"VariableDeclaration","scope":13045,"src":"18896:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13019,"name":"address","nodeType":"ElementaryTypeName","src":"18896:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13022,"mutability":"mutable","name":"borrowAmount","nameLocation":"18922:12:38","nodeType":"VariableDeclaration","scope":13045,"src":"18914:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13021,"name":"uint256","nodeType":"ElementaryTypeName","src":"18914:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18895:40:38"},"returnParameters":{"id":13027,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13026,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13045,"src":"18963:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13025,"name":"uint256","nodeType":"ElementaryTypeName","src":"18963:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18962:9:38"},"scope":15506,"src":"18874:260:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15884],"body":{"id":13069,"nodeType":"Block","src":"19579:123:38","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13056,"name":"accrueInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13910,"src":"19589:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_uint256_$","typeString":"function () returns (uint256)"}},"id":13057,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19589:16:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13058,"nodeType":"ExpressionStatement","src":"19589:16:38"},{"expression":{"arguments":[{"expression":{"id":13060,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19634:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19638:6:38","memberName":"sender","nodeType":"MemberAccess","src":"19634:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13062,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19646:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19650:6:38","memberName":"sender","nodeType":"MemberAccess","src":"19646:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13064,"name":"repayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13048,"src":"19658:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13059,"name":"_repayBorrowFresh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14392,"src":"19616:17:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,address,uint256) returns (uint256)"}},"id":13065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19616:54:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13066,"nodeType":"ExpressionStatement","src":"19616:54:38"},{"expression":{"id":13067,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"19687:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13055,"id":13068,"nodeType":"Return","src":"19680:15:38"}]},"documentation":{"id":13046,"nodeType":"StructuredDocumentation","src":"19140:343:38","text":" @notice Sender repays their own borrow\n @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\n @return error Always NO_ERROR for compatibility with Venus core tooling\n @custom:event Emits RepayBorrow event; may emit AccrueInterest\n @custom:access Not restricted"},"functionSelector":"0e752702","id":13070,"implemented":true,"kind":"function","modifiers":[{"id":13052,"kind":"modifierInvocation","modifierName":{"id":13051,"name":"nonReentrant","nameLocations":["19548:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":12491,"src":"19548:12:38"},"nodeType":"ModifierInvocation","src":"19548:12:38"}],"name":"repayBorrow","nameLocation":"19497:11:38","nodeType":"FunctionDefinition","overrides":{"id":13050,"nodeType":"OverrideSpecifier","overrides":[],"src":"19539:8:38"},"parameters":{"id":13049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13048,"mutability":"mutable","name":"repayAmount","nameLocation":"19517:11:38","nodeType":"VariableDeclaration","scope":13070,"src":"19509:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13047,"name":"uint256","nodeType":"ElementaryTypeName","src":"19509:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19508:21:38"},"returnParameters":{"id":13055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13054,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13070,"src":"19570:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13053,"name":"uint256","nodeType":"ElementaryTypeName","src":"19570:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19569:9:38"},"scope":15506,"src":"19488:214:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15893],"body":{"id":13095,"nodeType":"Block","src":"20250:121:38","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13083,"name":"accrueInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13910,"src":"20260:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_uint256_$","typeString":"function () returns (uint256)"}},"id":13084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20260:16:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13085,"nodeType":"ExpressionStatement","src":"20260:16:38"},{"expression":{"arguments":[{"expression":{"id":13087,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"20305:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20309:6:38","memberName":"sender","nodeType":"MemberAccess","src":"20305:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13089,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13073,"src":"20317:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13090,"name":"repayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13075,"src":"20327:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13086,"name":"_repayBorrowFresh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14392,"src":"20287:17:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,address,uint256) returns (uint256)"}},"id":13091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20287:52:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13092,"nodeType":"ExpressionStatement","src":"20287:52:38"},{"expression":{"id":13093,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"20356:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13082,"id":13094,"nodeType":"Return","src":"20349:15:38"}]},"documentation":{"id":13071,"nodeType":"StructuredDocumentation","src":"19708:422:38","text":" @notice Sender repays a borrow belonging to borrower\n @param borrower the account with the debt being payed off\n @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\n @return error Always NO_ERROR for compatibility with Venus core tooling\n @custom:event Emits RepayBorrow event; may emit AccrueInterest\n @custom:access Not restricted"},"functionSelector":"2608f818","id":13096,"implemented":true,"kind":"function","modifiers":[{"id":13079,"kind":"modifierInvocation","modifierName":{"id":13078,"name":"nonReentrant","nameLocations":["20219:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":12491,"src":"20219:12:38"},"nodeType":"ModifierInvocation","src":"20219:12:38"}],"name":"repayBorrowBehalf","nameLocation":"20144:17:38","nodeType":"FunctionDefinition","overrides":{"id":13077,"nodeType":"OverrideSpecifier","overrides":[],"src":"20210:8:38"},"parameters":{"id":13076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13073,"mutability":"mutable","name":"borrower","nameLocation":"20170:8:38","nodeType":"VariableDeclaration","scope":13096,"src":"20162:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13072,"name":"address","nodeType":"ElementaryTypeName","src":"20162:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13075,"mutability":"mutable","name":"repayAmount","nameLocation":"20188:11:38","nodeType":"VariableDeclaration","scope":13096,"src":"20180:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13074,"name":"uint256","nodeType":"ElementaryTypeName","src":"20180:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20161:39:38"},"returnParameters":{"id":13082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13081,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13096,"src":"20241:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13080,"name":"uint256","nodeType":"ElementaryTypeName","src":"20241:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20240:9:38"},"scope":15506,"src":"20135:236:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15905],"body":{"id":13121,"nodeType":"Block","src":"21648:118:38","statements":[{"expression":{"arguments":[{"expression":{"id":13111,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"21675:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21679:6:38","memberName":"sender","nodeType":"MemberAccess","src":"21675:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13113,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13099,"src":"21687:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13114,"name":"repayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13101,"src":"21697:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13115,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"21710:16:38","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}},{"hexValue":"66616c7365","id":13116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"21728:5:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":13110,"name":"_liquidateBorrow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14436,"src":"21658:16:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_contract$_VTokenInterface_$16106_$_t_bool_$returns$__$","typeString":"function (address,address,uint256,contract VTokenInterface,bool)"}},"id":13117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21658:76:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13118,"nodeType":"ExpressionStatement","src":"21658:76:38"},{"expression":{"id":13119,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"21751:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13109,"id":13120,"nodeType":"Return","src":"21744:15:38"}]},"documentation":{"id":13097,"nodeType":"StructuredDocumentation","src":"20377:1102:38","text":" @notice The sender liquidates the borrowers collateral.\n  The collateral seized is transferred to the liquidator.\n @param borrower The borrower of this vToken to be liquidated\n @param repayAmount The amount of the underlying borrowed asset to repay\n @param vTokenCollateral The market in which to seize collateral from the borrower\n @return error Always NO_ERROR for compatibility with Venus core tooling\n @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\n @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\n @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\n @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\n @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\n @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\n @custom:access Not restricted"},"functionSelector":"f5e3c462","id":13122,"implemented":true,"kind":"function","modifiers":[],"name":"liquidateBorrow","nameLocation":"21493:15:38","nodeType":"FunctionDefinition","overrides":{"id":13106,"nodeType":"OverrideSpecifier","overrides":[],"src":"21621:8:38"},"parameters":{"id":13105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13099,"mutability":"mutable","name":"borrower","nameLocation":"21526:8:38","nodeType":"VariableDeclaration","scope":13122,"src":"21518:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13098,"name":"address","nodeType":"ElementaryTypeName","src":"21518:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13101,"mutability":"mutable","name":"repayAmount","nameLocation":"21552:11:38","nodeType":"VariableDeclaration","scope":13122,"src":"21544:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13100,"name":"uint256","nodeType":"ElementaryTypeName","src":"21544:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13104,"mutability":"mutable","name":"vTokenCollateral","nameLocation":"21589:16:38","nodeType":"VariableDeclaration","scope":13122,"src":"21573:32:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"},"typeName":{"id":13103,"nodeType":"UserDefinedTypeName","pathNode":{"id":13102,"name":"VTokenInterface","nameLocations":["21573:15:38"],"nodeType":"IdentifierPath","referencedDeclaration":16106,"src":"21573:15:38"},"referencedDeclaration":16106,"src":"21573:15:38","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}},"visibility":"internal"}],"src":"21508:103:38"},"returnParameters":{"id":13109,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13108,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13122,"src":"21639:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13107,"name":"uint256","nodeType":"ElementaryTypeName","src":"21639:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21638:9:38"},"scope":15506,"src":"21484:282:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":13166,"nodeType":"Block","src":"22393:574:38","statements":[{"expression":{"arguments":[{"hexValue":"73657450726f746f636f6c5365697a6553686172652875696e7432353629","id":13129,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"22423:32:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_757212f0ece049a546213ae2600da4df4068a4d85350200c1929790149033458","typeString":"literal_string \"setProtocolSeizeShare(uint256)\""},"value":"setProtocolSeizeShare(uint256)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_757212f0ece049a546213ae2600da4df4068a4d85350200c1929790149033458","typeString":"literal_string \"setProtocolSeizeShare(uint256)\""}],"id":13128,"name":"_checkAccessAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5034,"src":"22403:19:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) view"}},"id":13130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22403:53:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13131,"nodeType":"ExpressionStatement","src":"22403:53:38"},{"assignments":[13133],"declarations":[{"constant":false,"id":13133,"mutability":"mutable","name":"liquidationIncentive","nameLocation":"22474:20:38","nodeType":"VariableDeclaration","scope":13166,"src":"22466:28:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13132,"name":"uint256","nodeType":"ElementaryTypeName","src":"22466:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13142,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":13137,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"22530:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}],"id":13136,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22522:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13135,"name":"address","nodeType":"ElementaryTypeName","src":"22522:7:38","typeDescriptions":{}}},"id":13138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22522:20:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13134,"name":"ComptrollerViewInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9431,"src":"22497:24:38","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ComptrollerViewInterface_$9431_$","typeString":"type(contract ComptrollerViewInterface)"}},"id":13139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22497:46:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerViewInterface_$9431","typeString":"contract ComptrollerViewInterface"}},"id":13140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22544:28:38","memberName":"liquidationIncentiveMantissa","nodeType":"MemberAccess","referencedDeclaration":9388,"src":"22497:75:38","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":13141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22497:77:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22466:108:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13143,"name":"newProtocolSeizeShareMantissa_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13125,"src":"22588:30:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":13144,"name":"MANTISSA_ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9662,"src":"22621:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22588:45:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":13146,"name":"liquidationIncentive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13133,"src":"22636:20:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22588:68:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13152,"nodeType":"IfStatement","src":"22584:132:38","trueBody":{"id":13151,"nodeType":"Block","src":"22658:58:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13148,"name":"ProtocolSeizeShareTooBig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9619,"src":"22679:24:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":13149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22679:26:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13150,"nodeType":"RevertStatement","src":"22672:33:38"}]}},{"assignments":[13154],"declarations":[{"constant":false,"id":13154,"mutability":"mutable","name":"oldProtocolSeizeShareMantissa","nameLocation":"22734:29:38","nodeType":"VariableDeclaration","scope":13166,"src":"22726:37:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13153,"name":"uint256","nodeType":"ElementaryTypeName","src":"22726:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13156,"initialValue":{"id":13155,"name":"protocolSeizeShareMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15590,"src":"22766:26:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22726:66:38"},{"expression":{"id":13159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13157,"name":"protocolSeizeShareMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15590,"src":"22802:26:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13158,"name":"newProtocolSeizeShareMantissa_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13125,"src":"22831:30:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22802:59:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13160,"nodeType":"ExpressionStatement","src":"22802:59:38"},{"eventCall":{"arguments":[{"id":13162,"name":"oldProtocolSeizeShareMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13154,"src":"22898:29:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13163,"name":"newProtocolSeizeShareMantissa_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13125,"src":"22929:30:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13161,"name":"NewProtocolSeizeShare","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15740,"src":"22876:21:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":13164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22876:84:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13165,"nodeType":"EmitStatement","src":"22871:89:38"}]},"documentation":{"id":13123,"nodeType":"StructuredDocumentation","src":"21772:536:38","text":" @notice sets protocol share accumulated from liquidations\n @dev must be equal or less than liquidation incentive - 1\n @param newProtocolSeizeShareMantissa_ new protocol share mantissa\n @custom:event Emits NewProtocolSeizeShare event on success\n @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\n @custom:error ProtocolSeizeShareTooBig is thrown when the new seize share is too high\n @custom:access Controlled by AccessControlManager"},"functionSelector":"757212f0","id":13167,"implemented":true,"kind":"function","modifiers":[],"name":"setProtocolSeizeShare","nameLocation":"22322:21:38","nodeType":"FunctionDefinition","parameters":{"id":13126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13125,"mutability":"mutable","name":"newProtocolSeizeShareMantissa_","nameLocation":"22352:30:38","nodeType":"VariableDeclaration","scope":13167,"src":"22344:38:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13124,"name":"uint256","nodeType":"ElementaryTypeName","src":"22344:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22343:40:38"},"returnParameters":{"id":13127,"nodeType":"ParameterList","parameters":[],"src":"22393:0:38"},"scope":15506,"src":"22313:654:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15973],"body":{"id":13187,"nodeType":"Block","src":"23675:150:38","statements":[{"expression":{"arguments":[{"hexValue":"73657452657365727665466163746f722875696e7432353629","id":13177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23705:27:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_1c4469833b70f1dc91392ae1b0b8601366efea80bd884777158765aecae9d969","typeString":"literal_string \"setReserveFactor(uint256)\""},"value":"setReserveFactor(uint256)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_1c4469833b70f1dc91392ae1b0b8601366efea80bd884777158765aecae9d969","typeString":"literal_string \"setReserveFactor(uint256)\""}],"id":13176,"name":"_checkAccessAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5034,"src":"23685:19:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) view"}},"id":13178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23685:48:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13179,"nodeType":"ExpressionStatement","src":"23685:48:38"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13180,"name":"accrueInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13910,"src":"23744:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_uint256_$","typeString":"function () returns (uint256)"}},"id":13181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23744:16:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13182,"nodeType":"ExpressionStatement","src":"23744:16:38"},{"expression":{"arguments":[{"id":13184,"name":"newReserveFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13170,"src":"23793:24:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13183,"name":"_setReserveFactorFresh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14834,"src":"23770:22:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":13185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23770:48:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13186,"nodeType":"ExpressionStatement","src":"23770:48:38"}]},"documentation":{"id":13168,"nodeType":"StructuredDocumentation","src":"22973:606:38","text":" @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\n @dev Admin function to accrue interest and set a new reserve factor\n @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\n @custom:event Emits NewReserveFactor event; may emit AccrueInterest\n @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\n @custom:error SetReserveFactorBoundsCheck is thrown when the new reserve factor is too high\n @custom:access Controlled by AccessControlManager"},"functionSelector":"1c446983","id":13188,"implemented":true,"kind":"function","modifiers":[{"id":13174,"kind":"modifierInvocation","modifierName":{"id":13173,"name":"nonReentrant","nameLocations":["23662:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":12491,"src":"23662:12:38"},"nodeType":"ModifierInvocation","src":"23662:12:38"}],"name":"setReserveFactor","nameLocation":"23593:16:38","nodeType":"FunctionDefinition","overrides":{"id":13172,"nodeType":"OverrideSpecifier","overrides":[],"src":"23653:8:38"},"parameters":{"id":13171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13170,"mutability":"mutable","name":"newReserveFactorMantissa","nameLocation":"23618:24:38","nodeType":"VariableDeclaration","scope":13188,"src":"23610:32:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13169,"name":"uint256","nodeType":"ElementaryTypeName","src":"23610:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23609:34:38"},"returnParameters":{"id":13175,"nodeType":"ParameterList","parameters":[],"src":"23675:0:38"},"scope":15506,"src":"23584:241:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15978],"body":{"id":13210,"nodeType":"Block","src":"24497:155:38","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13197,"name":"accrueInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13910,"src":"24507:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_uint256_$","typeString":"function () returns (uint256)"}},"id":13198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24507:16:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13199,"nodeType":"ExpressionStatement","src":"24507:16:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13200,"name":"reduceReservesBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15599,"src":"24537:25:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":13201,"name":"getBlockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16298,"src":"24566:25:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":13202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24566:27:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24537:56:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13205,"nodeType":"IfStatement","src":"24533:69:38","trueBody":{"functionReturnParameters":13196,"id":13204,"nodeType":"Return","src":"24595:7:38"}},{"expression":{"arguments":[{"id":13207,"name":"reduceAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13191,"src":"24632:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13206,"name":"_reduceReservesFresh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14963,"src":"24611:20:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":13208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24611:34:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13209,"nodeType":"ExpressionStatement","src":"24611:34:38"}]},"documentation":{"id":13189,"nodeType":"StructuredDocumentation","src":"23831:584:38","text":" @notice Accrues interest and reduces reserves by transferring to the protocol reserve contract\n @dev Gracefully return if reserves already reduced in accrueInterest\n @param reduceAmount Amount of reduction to reserves\n @custom:event Emits ReservesReduced event; may emit AccrueInterest\n @custom:error ReduceReservesCashNotAvailable is thrown when the vToken does not have sufficient cash\n @custom:error ReduceReservesCashValidation is thrown when trying to withdraw more cash than the reserves have\n @custom:access Not restricted"},"functionSelector":"07e27959","id":13211,"implemented":true,"kind":"function","modifiers":[{"id":13195,"kind":"modifierInvocation","modifierName":{"id":13194,"name":"nonReentrant","nameLocations":["24484:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":12491,"src":"24484:12:38"},"nodeType":"ModifierInvocation","src":"24484:12:38"}],"name":"reduceReserves","nameLocation":"24429:14:38","nodeType":"FunctionDefinition","overrides":{"id":13193,"nodeType":"OverrideSpecifier","overrides":[],"src":"24475:8:38"},"parameters":{"id":13192,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13191,"mutability":"mutable","name":"reduceAmount","nameLocation":"24452:12:38","nodeType":"VariableDeclaration","scope":13211,"src":"24444:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13190,"name":"uint256","nodeType":"ElementaryTypeName","src":"24444:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24443:22:38"},"returnParameters":{"id":13196,"nodeType":"ParameterList","parameters":[],"src":"24497:0:38"},"scope":15506,"src":"24420:232:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[16001],"body":{"id":13227,"nodeType":"Block","src":"24972:71:38","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13220,"name":"accrueInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13910,"src":"24982:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_uint256_$","typeString":"function () returns (uint256)"}},"id":13221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24982:16:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13222,"nodeType":"ExpressionStatement","src":"24982:16:38"},{"expression":{"arguments":[{"id":13224,"name":"addAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13214,"src":"25026:9:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13223,"name":"_addReservesFresh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14886,"src":"25008:17:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) returns (uint256)"}},"id":13225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25008:28:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13226,"nodeType":"ExpressionStatement","src":"25008:28:38"}]},"documentation":{"id":13212,"nodeType":"StructuredDocumentation","src":"24658:238:38","text":" @notice The sender adds to reserves.\n @param addAmount The amount of underlying token to add as reserves\n @custom:event Emits ReservesAdded event; may emit AccrueInterest\n @custom:access Not restricted"},"functionSelector":"7821a514","id":13228,"implemented":true,"kind":"function","modifiers":[{"id":13218,"kind":"modifierInvocation","modifierName":{"id":13217,"name":"nonReentrant","nameLocations":["24959:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":12491,"src":"24959:12:38"},"nodeType":"ModifierInvocation","src":"24959:12:38"}],"name":"addReserves","nameLocation":"24910:11:38","nodeType":"FunctionDefinition","overrides":{"id":13216,"nodeType":"OverrideSpecifier","overrides":[],"src":"24950:8:38"},"parameters":{"id":13215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13214,"mutability":"mutable","name":"addAmount","nameLocation":"24930:9:38","nodeType":"VariableDeclaration","scope":13228,"src":"24922:17:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13213,"name":"uint256","nodeType":"ElementaryTypeName","src":"24922:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24921:19:38"},"returnParameters":{"id":13219,"nodeType":"ParameterList","parameters":[],"src":"24972:0:38"},"scope":15506,"src":"24901:142:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15996],"body":{"id":13247,"nodeType":"Block","src":"25653:154:38","statements":[{"expression":{"arguments":[{"hexValue":"736574496e746572657374526174654d6f64656c286164647265737329","id":13237,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"25683:31:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_8bcd4016c0c590b4ee094a111d640141e060929ea4254a2c59233dc742207816","typeString":"literal_string \"setInterestRateModel(address)\""},"value":"setInterestRateModel(address)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_8bcd4016c0c590b4ee094a111d640141e060929ea4254a2c59233dc742207816","typeString":"literal_string \"setInterestRateModel(address)\""}],"id":13236,"name":"_checkAccessAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5034,"src":"25663:19:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) view"}},"id":13238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25663:52:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13239,"nodeType":"ExpressionStatement","src":"25663:52:38"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13240,"name":"accrueInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13910,"src":"25726:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_uint256_$","typeString":"function () returns (uint256)"}},"id":13241,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25726:16:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13242,"nodeType":"ExpressionStatement","src":"25726:16:38"},{"expression":{"arguments":[{"id":13244,"name":"newInterestRateModel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13232,"src":"25779:20:38","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}],"id":13243,"name":"_setInterestRateModelFresh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15004,"src":"25752:26:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_InterestRateModel_$10266_$returns$__$","typeString":"function (contract InterestRateModel)"}},"id":13245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25752:48:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13246,"nodeType":"ExpressionStatement","src":"25752:48:38"}]},"documentation":{"id":13229,"nodeType":"StructuredDocumentation","src":"25049:511:38","text":" @notice accrues interest and updates the interest rate model using _setInterestRateModelFresh\n @dev Admin function to accrue interest and update the interest rate model\n @param newInterestRateModel the new interest rate model to use\n @custom:event Emits NewMarketInterestRateModel event; may emit AccrueInterest\n @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\n @custom:access Controlled by AccessControlManager"},"functionSelector":"8bcd4016","id":13248,"implemented":true,"kind":"function","modifiers":[],"name":"setInterestRateModel","nameLocation":"25574:20:38","nodeType":"FunctionDefinition","overrides":{"id":13234,"nodeType":"OverrideSpecifier","overrides":[],"src":"25644:8:38"},"parameters":{"id":13233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13232,"mutability":"mutable","name":"newInterestRateModel","nameLocation":"25613:20:38","nodeType":"VariableDeclaration","scope":13248,"src":"25595:38:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"},"typeName":{"id":13231,"nodeType":"UserDefinedTypeName","pathNode":{"id":13230,"name":"InterestRateModel","nameLocations":["25595:17:38"],"nodeType":"IdentifierPath","referencedDeclaration":10266,"src":"25595:17:38"},"referencedDeclaration":10266,"src":"25595:17:38","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},"visibility":"internal"}],"src":"25594:40:38"},"returnParameters":{"id":13235,"nodeType":"ParameterList","parameters":[],"src":"25653:0:38"},"scope":15506,"src":"25565:242:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15914],"body":{"id":13402,"nodeType":"Block","src":"26903:1812:38","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13261,"name":"repayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13255,"src":"26917:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13262,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26932:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"26917:16:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13275,"nodeType":"IfStatement","src":"26913:96:38","trueBody":{"id":13274,"nodeType":"Block","src":"26935:74:38","statements":[{"expression":{"arguments":[{"arguments":[{"id":13269,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"26982:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":13268,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26974:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13267,"name":"address","nodeType":"ElementaryTypeName","src":"26974:7:38","typeDescriptions":{}}},"id":13270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26974:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13271,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13253,"src":"26989:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":13264,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"26949:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"id":13266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26961:12:38","memberName":"preRepayHook","nodeType":"MemberAccess","referencedDeclaration":9199,"src":"26949:24:38","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":13272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26949:49:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13273,"nodeType":"ExpressionStatement","src":"26949:49:38"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13276,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"27023:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27027:6:38","memberName":"sender","nodeType":"MemberAccess","src":"27023:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":13280,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"27045:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}],"id":13279,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27037:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13278,"name":"address","nodeType":"ElementaryTypeName","src":"27037:7:38","typeDescriptions":{}}},"id":13281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27037:20:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"27023:34:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13287,"nodeType":"IfStatement","src":"27019:96:38","trueBody":{"id":13286,"nodeType":"Block","src":"27059:56:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13283,"name":"HealBorrowUnauthorized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9599,"src":"27080:22:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":13284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27080:24:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13285,"nodeType":"RevertStatement","src":"27073:31:38"}]}},{"assignments":[13289],"declarations":[{"constant":false,"id":13289,"mutability":"mutable","name":"accountBorrowsPrev","nameLocation":"27133:18:38","nodeType":"VariableDeclaration","scope":13402,"src":"27125:26:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13288,"name":"uint256","nodeType":"ElementaryTypeName","src":"27125:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13293,"initialValue":{"arguments":[{"id":13291,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13253,"src":"27175:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13290,"name":"_borrowBalanceStored","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15461,"src":"27154:20:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":13292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27154:30:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"27125:59:38"},{"assignments":[13295],"declarations":[{"constant":false,"id":13295,"mutability":"mutable","name":"totalBorrowsNew","nameLocation":"27202:15:38","nodeType":"VariableDeclaration","scope":13402,"src":"27194:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13294,"name":"uint256","nodeType":"ElementaryTypeName","src":"27194:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13297,"initialValue":{"id":13296,"name":"totalBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15563,"src":"27220:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"27194:38:38"},{"assignments":[13299],"declarations":[{"constant":false,"id":13299,"mutability":"mutable","name":"actualRepayAmount","nameLocation":"27251:17:38","nodeType":"VariableDeclaration","scope":13402,"src":"27243:25:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13298,"name":"uint256","nodeType":"ElementaryTypeName","src":"27243:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13300,"nodeType":"VariableDeclarationStatement","src":"27243:25:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13301,"name":"repayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13255,"src":"27282:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13302,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27297:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"27282:16:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13328,"nodeType":"IfStatement","src":"27278:599:38","trueBody":{"id":13327,"nodeType":"Block","src":"27300:577:38","statements":[{"expression":{"id":13309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13304,"name":"actualRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13299,"src":"27529:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13306,"name":"payer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13251,"src":"27563:5:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13307,"name":"repayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13255,"src":"27570:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13305,"name":"_doTransferIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15057,"src":"27549:13:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,uint256) returns (uint256)"}},"id":13308,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27549:33:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27529:53:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13310,"nodeType":"ExpressionStatement","src":"27529:53:38"},{"expression":{"id":13315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13311,"name":"totalBorrowsNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13295,"src":"27596:15:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13312,"name":"totalBorrowsNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13295,"src":"27614:15:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":13313,"name":"actualRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13299,"src":"27632:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27614:35:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27596:53:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13316,"nodeType":"ExpressionStatement","src":"27596:53:38"},{"eventCall":{"arguments":[{"id":13318,"name":"payer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13251,"src":"27697:5:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13319,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13253,"src":"27720:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13320,"name":"actualRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13299,"src":"27746:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13321,"name":"accountBorrowsPrev","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13289,"src":"27781:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":13322,"name":"actualRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13299,"src":"27802:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27781:38:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13324,"name":"totalBorrowsNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13295,"src":"27837:15:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13317,"name":"RepayBorrow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15670,"src":"27668:11:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256,uint256)"}},"id":13325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27668:198:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13326,"nodeType":"EmitStatement","src":"27663:203:38"}]}},{"assignments":[13330],"declarations":[{"constant":false,"id":13330,"mutability":"mutable","name":"badDebtDelta","nameLocation":"27960:12:38","nodeType":"VariableDeclaration","scope":13402,"src":"27952:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13329,"name":"uint256","nodeType":"ElementaryTypeName","src":"27952:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13334,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13331,"name":"accountBorrowsPrev","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13289,"src":"27975:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":13332,"name":"actualRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13299,"src":"27996:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27975:38:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"27952:61:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13335,"name":"badDebtDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13330,"src":"28027:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13336,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28043:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"28027:17:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13377,"nodeType":"IfStatement","src":"28023:479:38","trueBody":{"id":13376,"nodeType":"Block","src":"28046:456:38","statements":[{"assignments":[13339],"declarations":[{"constant":false,"id":13339,"mutability":"mutable","name":"badDebtOld","nameLocation":"28068:10:38","nodeType":"VariableDeclaration","scope":13376,"src":"28060:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13338,"name":"uint256","nodeType":"ElementaryTypeName","src":"28060:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13341,"initialValue":{"id":13340,"name":"badDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15572,"src":"28081:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28060:28:38"},{"assignments":[13343],"declarations":[{"constant":false,"id":13343,"mutability":"mutable","name":"badDebtNew","nameLocation":"28110:10:38","nodeType":"VariableDeclaration","scope":13376,"src":"28102:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13342,"name":"uint256","nodeType":"ElementaryTypeName","src":"28102:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13347,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13344,"name":"badDebtOld","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13339,"src":"28123:10:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":13345,"name":"badDebtDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13330,"src":"28136:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28123:25:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28102:46:38"},{"expression":{"id":13352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13348,"name":"totalBorrowsNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13295,"src":"28162:15:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13349,"name":"totalBorrowsNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13295,"src":"28180:15:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":13350,"name":"badDebtDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13330,"src":"28198:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28180:30:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28162:48:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13353,"nodeType":"ExpressionStatement","src":"28162:48:38"},{"expression":{"id":13356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13354,"name":"badDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15572,"src":"28224:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13355,"name":"badDebtNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13343,"src":"28234:10:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28224:20:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13357,"nodeType":"ExpressionStatement","src":"28224:20:38"},{"eventCall":{"arguments":[{"arguments":[{"id":13361,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"28358:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":13360,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28350:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13359,"name":"address","nodeType":"ElementaryTypeName","src":"28350:7:38","typeDescriptions":{}}},"id":13362,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28350:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13363,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13253,"src":"28365:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13364,"name":"badDebtDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13330,"src":"28375:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":13365,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28389:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":13366,"name":"totalBorrowsNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13295,"src":"28392:15:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13358,"name":"RepayBorrow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15670,"src":"28338:11:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256,uint256)"}},"id":13367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28338:70:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13368,"nodeType":"EmitStatement","src":"28333:75:38"},{"eventCall":{"arguments":[{"id":13370,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13253,"src":"28444:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13371,"name":"badDebtDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13330,"src":"28454:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13372,"name":"badDebtOld","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13339,"src":"28468:10:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13373,"name":"badDebtNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13343,"src":"28480:10:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13369,"name":"BadDebtIncreased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15681,"src":"28427:16:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256,uint256)"}},"id":13374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28427:64:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13375,"nodeType":"EmitStatement","src":"28422:69:38"}]}},{"expression":{"id":13383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":13378,"name":"accountBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15587,"src":"28512:14:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$15523_storage_$","typeString":"mapping(address => struct VTokenStorage.BorrowSnapshot storage ref)"}},"id":13380,"indexExpression":{"id":13379,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13253,"src":"28527:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28512:24:38","typeDescriptions":{"typeIdentifier":"t_struct$_BorrowSnapshot_$15523_storage","typeString":"struct VTokenStorage.BorrowSnapshot storage ref"}},"id":13381,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"28537:9:38","memberName":"principal","nodeType":"MemberAccess","referencedDeclaration":15520,"src":"28512:34:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":13382,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28549:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"28512:38:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13384,"nodeType":"ExpressionStatement","src":"28512:38:38"},{"expression":{"id":13390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":13385,"name":"accountBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15587,"src":"28560:14:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$15523_storage_$","typeString":"mapping(address => struct VTokenStorage.BorrowSnapshot storage ref)"}},"id":13387,"indexExpression":{"id":13386,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13253,"src":"28575:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28560:24:38","typeDescriptions":{"typeIdentifier":"t_struct$_BorrowSnapshot_$15523_storage","typeString":"struct VTokenStorage.BorrowSnapshot storage ref"}},"id":13388,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"28585:13:38","memberName":"interestIndex","nodeType":"MemberAccess","referencedDeclaration":15522,"src":"28560:38:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13389,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15560,"src":"28601:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28560:52:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13391,"nodeType":"ExpressionStatement","src":"28560:52:38"},{"expression":{"id":13394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13392,"name":"totalBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15563,"src":"28622:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13393,"name":"totalBorrowsNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13295,"src":"28637:15:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28622:30:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13395,"nodeType":"ExpressionStatement","src":"28622:30:38"},{"eventCall":{"arguments":[{"id":13397,"name":"payer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13251,"src":"28679:5:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13398,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13253,"src":"28686:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13399,"name":"repayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13255,"src":"28696:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13396,"name":"HealBorrow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15792,"src":"28668:10:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":13400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28668:40:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13401,"nodeType":"EmitStatement","src":"28663:45:38"}]},"documentation":{"id":13249,"nodeType":"StructuredDocumentation","src":"25813:980:38","text":" @notice Repays a certain amount of debt, treats the rest of the borrow as bad debt, essentially\n   \"forgiving\" the borrower. Healing is a situation that should rarely happen. However, some pools\n   may list risky assets or be configured improperly – we want to still handle such cases gracefully.\n   We assume that Comptroller does the seizing, so this function is only available to Comptroller.\n @dev This function does not call any Comptroller hooks (like \"healAllowed\"), because we assume\n   the Comptroller does all the necessary checks before calling this function.\n @param payer account who repays the debt\n @param borrower account to heal\n @param repayAmount amount to repay\n @custom:event Emits RepayBorrow, BadDebtIncreased events; may emit AccrueInterest\n @custom:error HealBorrowUnauthorized is thrown when the request does not come from Comptroller\n @custom:access Only Comptroller"},"functionSelector":"44fe6ffe","id":13403,"implemented":true,"kind":"function","modifiers":[{"id":13259,"kind":"modifierInvocation","modifierName":{"id":13258,"name":"nonReentrant","nameLocations":["26890:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":12491,"src":"26890:12:38"},"nodeType":"ModifierInvocation","src":"26890:12:38"}],"name":"healBorrow","nameLocation":"26807:10:38","nodeType":"FunctionDefinition","overrides":{"id":13257,"nodeType":"OverrideSpecifier","overrides":[],"src":"26881:8:38"},"parameters":{"id":13256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13251,"mutability":"mutable","name":"payer","nameLocation":"26826:5:38","nodeType":"VariableDeclaration","scope":13403,"src":"26818:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13250,"name":"address","nodeType":"ElementaryTypeName","src":"26818:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13253,"mutability":"mutable","name":"borrower","nameLocation":"26841:8:38","nodeType":"VariableDeclaration","scope":13403,"src":"26833:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13252,"name":"address","nodeType":"ElementaryTypeName","src":"26833:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13255,"mutability":"mutable","name":"repayAmount","nameLocation":"26859:11:38","nodeType":"VariableDeclaration","scope":13403,"src":"26851:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13254,"name":"uint256","nodeType":"ElementaryTypeName","src":"26851:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26817:54:38"},"returnParameters":{"id":13260,"nodeType":"ParameterList","parameters":[],"src":"26903:0:38"},"scope":15506,"src":"26798:1917:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15928],"body":{"id":13439,"nodeType":"Block","src":"30347:221:38","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13419,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"30361:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30365:6:38","memberName":"sender","nodeType":"MemberAccess","src":"30361:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":13423,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"30383:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}],"id":13422,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30375:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13421,"name":"address","nodeType":"ElementaryTypeName","src":"30375:7:38","typeDescriptions":{}}},"id":13424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30375:20:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"30361:34:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13430,"nodeType":"IfStatement","src":"30357:106:38","trueBody":{"id":13429,"nodeType":"Block","src":"30397:66:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13426,"name":"ForceLiquidateBorrowUnauthorized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9601,"src":"30418:32:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":13427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30418:34:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13428,"nodeType":"RevertStatement","src":"30411:41:38"}]}},{"expression":{"arguments":[{"id":13432,"name":"liquidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13406,"src":"30489:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13433,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13408,"src":"30501:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13434,"name":"repayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13410,"src":"30511:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13435,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13413,"src":"30524:16:38","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}},{"id":13436,"name":"skipLiquidityCheck","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13415,"src":"30542:18:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":13431,"name":"_liquidateBorrow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14436,"src":"30472:16:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_contract$_VTokenInterface_$16106_$_t_bool_$returns$__$","typeString":"function (address,address,uint256,contract VTokenInterface,bool)"}},"id":13437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30472:89:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13438,"nodeType":"ExpressionStatement","src":"30472:89:38"}]},"documentation":{"id":13404,"nodeType":"StructuredDocumentation","src":"28721:1409:38","text":" @notice The extended version of liquidations, callable only by Comptroller. May skip\n  the close factor check. The collateral seized is transferred to the liquidator.\n @param liquidator The address repaying the borrow and seizing collateral\n @param borrower The borrower of this vToken to be liquidated\n @param repayAmount The amount of the underlying borrowed asset to repay\n @param vTokenCollateral The market in which to seize collateral from the borrower\n @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\n   regardless of the account liquidity\n @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\n @custom:error ForceLiquidateBorrowUnauthorized is thrown when the request does not come from Comptroller\n @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\n @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\n @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\n @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\n @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\n @custom:access Only Comptroller"},"functionSelector":"8bbdb6db","id":13440,"implemented":true,"kind":"function","modifiers":[],"name":"forceLiquidateBorrow","nameLocation":"30144:20:38","nodeType":"FunctionDefinition","overrides":{"id":13417,"nodeType":"OverrideSpecifier","overrides":[],"src":"30338:8:38"},"parameters":{"id":13416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13406,"mutability":"mutable","name":"liquidator","nameLocation":"30182:10:38","nodeType":"VariableDeclaration","scope":13440,"src":"30174:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13405,"name":"address","nodeType":"ElementaryTypeName","src":"30174:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13408,"mutability":"mutable","name":"borrower","nameLocation":"30210:8:38","nodeType":"VariableDeclaration","scope":13440,"src":"30202:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13407,"name":"address","nodeType":"ElementaryTypeName","src":"30202:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13410,"mutability":"mutable","name":"repayAmount","nameLocation":"30236:11:38","nodeType":"VariableDeclaration","scope":13440,"src":"30228:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13409,"name":"uint256","nodeType":"ElementaryTypeName","src":"30228:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13413,"mutability":"mutable","name":"vTokenCollateral","nameLocation":"30273:16:38","nodeType":"VariableDeclaration","scope":13440,"src":"30257:32:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"},"typeName":{"id":13412,"nodeType":"UserDefinedTypeName","pathNode":{"id":13411,"name":"VTokenInterface","nameLocations":["30257:15:38"],"nodeType":"IdentifierPath","referencedDeclaration":16106,"src":"30257:15:38"},"referencedDeclaration":16106,"src":"30257:15:38","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}},"visibility":"internal"},{"constant":false,"id":13415,"mutability":"mutable","name":"skipLiquidityCheck","nameLocation":"30304:18:38","nodeType":"VariableDeclaration","scope":13440,"src":"30299:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13414,"name":"bool","nodeType":"ElementaryTypeName","src":"30299:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"30164:164:38"},"returnParameters":{"id":13418,"nodeType":"ParameterList","parameters":[],"src":"30347:0:38"},"scope":15506,"src":"30135:433:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15937],"body":{"id":13461,"nodeType":"Block","src":"31328:70:38","statements":[{"expression":{"arguments":[{"expression":{"id":13454,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"31345:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31349:6:38","memberName":"sender","nodeType":"MemberAccess","src":"31345:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13456,"name":"liquidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13443,"src":"31357:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13457,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13445,"src":"31369:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13458,"name":"seizeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13447,"src":"31379:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13453,"name":"_seize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14769,"src":"31338:6:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":13459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31338:53:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13460,"nodeType":"ExpressionStatement","src":"31338:53:38"}]},"documentation":{"id":13441,"nodeType":"StructuredDocumentation","src":"30574:644:38","text":" @notice Transfers collateral tokens (this market) to the liquidator.\n @dev Will fail unless called by another vToken during the process of liquidation.\n  It's absolutely critical to use msg.sender as the borrowed vToken and not a parameter.\n @param liquidator The account receiving seized collateral\n @param borrower The account having collateral seized\n @param seizeTokens The number of vTokens to seize\n @custom:event Emits Transfer, ReservesAdded events\n @custom:error LiquidateSeizeLiquidatorIsBorrower is thrown when trying to liquidate self\n @custom:access Not restricted"},"functionSelector":"b2a02ff1","id":13462,"implemented":true,"kind":"function","modifiers":[{"id":13451,"kind":"modifierInvocation","modifierName":{"id":13450,"name":"nonReentrant","nameLocations":["31315:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":12491,"src":"31315:12:38"},"nodeType":"ModifierInvocation","src":"31315:12:38"}],"name":"seize","nameLocation":"31232:5:38","nodeType":"FunctionDefinition","overrides":{"id":13449,"nodeType":"OverrideSpecifier","overrides":[],"src":"31306:8:38"},"parameters":{"id":13448,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13443,"mutability":"mutable","name":"liquidator","nameLocation":"31246:10:38","nodeType":"VariableDeclaration","scope":13462,"src":"31238:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13442,"name":"address","nodeType":"ElementaryTypeName","src":"31238:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13445,"mutability":"mutable","name":"borrower","nameLocation":"31266:8:38","nodeType":"VariableDeclaration","scope":13462,"src":"31258:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13444,"name":"address","nodeType":"ElementaryTypeName","src":"31258:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13447,"mutability":"mutable","name":"seizeTokens","nameLocation":"31284:11:38","nodeType":"VariableDeclaration","scope":13462,"src":"31276:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13446,"name":"uint256","nodeType":"ElementaryTypeName","src":"31276:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31237:59:38"},"returnParameters":{"id":13452,"nodeType":"ParameterList","parameters":[],"src":"31328:0:38"},"scope":15506,"src":"31223:175:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":13502,"nodeType":"Block","src":"31737:372:38","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13469,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"31755:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31759:6:38","memberName":"sender","nodeType":"MemberAccess","src":"31755:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":13471,"name":"shortfall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15593,"src":"31769:9:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"31755:23:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6f6e6c792073686f727466616c6c20636f6e74726163742063616e20757064617465206261642064656274","id":13473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"31780:45:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_d4c9546ba1ca6ea1666b690b57d3e7501f0db18dc1e34262166d8300121d27c9","typeString":"literal_string \"only shortfall contract can update bad debt\""},"value":"only shortfall contract can update bad debt"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d4c9546ba1ca6ea1666b690b57d3e7501f0db18dc1e34262166d8300121d27c9","typeString":"literal_string \"only shortfall contract can update bad debt\""}],"id":13468,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"31747:7:38","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":13474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31747:79:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13475,"nodeType":"ExpressionStatement","src":"31747:79:38"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13477,"name":"recoveredAmount_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13465,"src":"31844:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":13478,"name":"badDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15572,"src":"31864:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31844:27:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d6f7265207468616e206261642064656274207265636f76657265642066726f6d2061756374696f6e","id":13480,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"31873:43:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_65583512d4629ad47546f868609492cfe1fd22a35bae5f1962d105953201ab5e","typeString":"literal_string \"more than bad debt recovered from auction\""},"value":"more than bad debt recovered from auction"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_65583512d4629ad47546f868609492cfe1fd22a35bae5f1962d105953201ab5e","typeString":"literal_string \"more than bad debt recovered from auction\""}],"id":13476,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"31836:7:38","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":13481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31836:81:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13482,"nodeType":"ExpressionStatement","src":"31836:81:38"},{"assignments":[13484],"declarations":[{"constant":false,"id":13484,"mutability":"mutable","name":"badDebtOld","nameLocation":"31936:10:38","nodeType":"VariableDeclaration","scope":13502,"src":"31928:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13483,"name":"uint256","nodeType":"ElementaryTypeName","src":"31928:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13486,"initialValue":{"id":13485,"name":"badDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15572,"src":"31949:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"31928:28:38"},{"assignments":[13488],"declarations":[{"constant":false,"id":13488,"mutability":"mutable","name":"badDebtNew","nameLocation":"31974:10:38","nodeType":"VariableDeclaration","scope":13502,"src":"31966:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13487,"name":"uint256","nodeType":"ElementaryTypeName","src":"31966:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13492,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13489,"name":"badDebtOld","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13484,"src":"31987:10:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":13490,"name":"recoveredAmount_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13465,"src":"32000:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31987:29:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"31966:50:38"},{"expression":{"id":13495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13493,"name":"badDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15572,"src":"32026:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13494,"name":"badDebtNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13488,"src":"32036:10:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32026:20:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13496,"nodeType":"ExpressionStatement","src":"32026:20:38"},{"eventCall":{"arguments":[{"id":13498,"name":"badDebtOld","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13484,"src":"32079:10:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13499,"name":"badDebtNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13488,"src":"32091:10:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13497,"name":"BadDebtRecovered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15688,"src":"32062:16:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":13500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32062:40:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13501,"nodeType":"EmitStatement","src":"32057:45:38"}]},"documentation":{"id":13463,"nodeType":"StructuredDocumentation","src":"31404:267:38","text":" @notice Updates bad debt\n @dev Called only when bad debt is recovered from auction\n @param recoveredAmount_ The amount of bad debt recovered\n @custom:event Emits BadDebtRecovered event\n @custom:access Only Shortfall contract"},"functionSelector":"ef60450c","id":13503,"implemented":true,"kind":"function","modifiers":[],"name":"badDebtRecovered","nameLocation":"31685:16:38","nodeType":"FunctionDefinition","parameters":{"id":13466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13465,"mutability":"mutable","name":"recoveredAmount_","nameLocation":"31710:16:38","nodeType":"VariableDeclaration","scope":13503,"src":"31702:24:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13464,"name":"uint256","nodeType":"ElementaryTypeName","src":"31702:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31701:26:38"},"returnParameters":{"id":13467,"nodeType":"ParameterList","parameters":[],"src":"31737:0:38"},"scope":15506,"src":"31676:433:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":13515,"nodeType":"Block","src":"32504:64:38","statements":[{"expression":{"arguments":[{"id":13512,"name":"protocolShareReserve_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13506,"src":"32539:21:38","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":13511,"name":"_setProtocolShareReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15385,"src":"32514:24:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_payable_$returns$__$","typeString":"function (address payable)"}},"id":13513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32514:47:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13514,"nodeType":"ExpressionStatement","src":"32514:47:38"}]},"documentation":{"id":13504,"nodeType":"StructuredDocumentation","src":"32115:293:38","text":" @notice Sets protocol share reserve contract address\n @param protocolShareReserve_ The address of the protocol share reserve contract\n @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\n @custom:access Only Governance"},"functionSelector":"107568df","id":13516,"implemented":true,"kind":"function","modifiers":[{"id":13509,"kind":"modifierInvocation","modifierName":{"id":13508,"name":"onlyOwner","nameLocations":["32494:9:38"],"nodeType":"IdentifierPath","referencedDeclaration":153,"src":"32494:9:38"},"nodeType":"ModifierInvocation","src":"32494:9:38"}],"name":"setProtocolShareReserve","nameLocation":"32422:23:38","nodeType":"FunctionDefinition","parameters":{"id":13507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13506,"mutability":"mutable","name":"protocolShareReserve_","nameLocation":"32462:21:38","nodeType":"VariableDeclaration","scope":13516,"src":"32446:37:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":13505,"name":"address","nodeType":"ElementaryTypeName","src":"32446:15:38","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"32445:39:38"},"returnParameters":{"id":13510,"nodeType":"ParameterList","parameters":[],"src":"32504:0:38"},"scope":15506,"src":"32413:155:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":13528,"nodeType":"Block","src":"32900:50:38","statements":[{"expression":{"arguments":[{"id":13525,"name":"shortfall_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13519,"src":"32932:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13524,"name":"_setShortfallContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15356,"src":"32910:21:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":13526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32910:33:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13527,"nodeType":"ExpressionStatement","src":"32910:33:38"}]},"documentation":{"id":13517,"nodeType":"StructuredDocumentation","src":"32574:252:38","text":" @notice Sets shortfall contract address\n @param shortfall_ The address of the shortfall contract\n @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\n @custom:access Only Governance"},"functionSelector":"41f641ee","id":13529,"implemented":true,"kind":"function","modifiers":[{"id":13522,"kind":"modifierInvocation","modifierName":{"id":13521,"name":"onlyOwner","nameLocations":["32890:9:38"],"nodeType":"IdentifierPath","referencedDeclaration":153,"src":"32890:9:38"},"nodeType":"ModifierInvocation","src":"32890:9:38"}],"name":"setShortfallContract","nameLocation":"32840:20:38","nodeType":"FunctionDefinition","parameters":{"id":13520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13519,"mutability":"mutable","name":"shortfall_","nameLocation":"32869:10:38","nodeType":"VariableDeclaration","scope":13529,"src":"32861:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13518,"name":"address","nodeType":"ElementaryTypeName","src":"32861:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"32860:20:38"},"returnParameters":{"id":13523,"nodeType":"ParameterList","parameters":[],"src":"32900:0:38"},"scope":15506,"src":"32831:119:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[15968],"body":{"id":13581,"nodeType":"Block","src":"33258:345:38","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13538,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"33276:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33280:6:38","memberName":"sender","nodeType":"MemberAccess","src":"33276:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":13540,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":162,"src":"33290:5:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":13541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33290:7:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"33276:21:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"56546f6b656e3a3a7377656570546f6b656e3a206f6e6c792061646d696e2063616e20737765657020746f6b656e73","id":13543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"33299:49:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_02b93ba8f3ff373adacf808c6433da448d23929cf304a4f44f1f328895f6c896","typeString":"literal_string \"VToken::sweepToken: only admin can sweep tokens\""},"value":"VToken::sweepToken: only admin can sweep tokens"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_02b93ba8f3ff373adacf808c6433da448d23929cf304a4f44f1f328895f6c896","typeString":"literal_string \"VToken::sweepToken: only admin can sweep tokens\""}],"id":13537,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"33268:7:38","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":13544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33268:81:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13545,"nodeType":"ExpressionStatement","src":"33268:81:38"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13549,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13533,"src":"33375:5:38","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}],"id":13548,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33367:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13547,"name":"address","nodeType":"ElementaryTypeName","src":"33367:7:38","typeDescriptions":{}}},"id":13550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33367:14:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":13551,"name":"underlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15529,"src":"33385:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"33367:28:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"56546f6b656e3a3a7377656570546f6b656e3a2063616e206e6f7420737765657020756e6465726c79696e6720746f6b656e","id":13553,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"33397:52:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_a09eed6cffa426a240963a23cca18c0902c7833c31318eeb460f5ddbd7830a32","typeString":"literal_string \"VToken::sweepToken: can not sweep underlying token\""},"value":"VToken::sweepToken: can not sweep underlying token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a09eed6cffa426a240963a23cca18c0902c7833c31318eeb460f5ddbd7830a32","typeString":"literal_string \"VToken::sweepToken: can not sweep underlying token\""}],"id":13546,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"33359:7:38","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":13554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33359:91:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13555,"nodeType":"ExpressionStatement","src":"33359:91:38"},{"assignments":[13557],"declarations":[{"constant":false,"id":13557,"mutability":"mutable","name":"balance","nameLocation":"33468:7:38","nodeType":"VariableDeclaration","scope":13581,"src":"33460:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13556,"name":"uint256","nodeType":"ElementaryTypeName","src":"33460:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13565,"initialValue":{"arguments":[{"arguments":[{"id":13562,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"33502:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":13561,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33494:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13560,"name":"address","nodeType":"ElementaryTypeName","src":"33494:7:38","typeDescriptions":{}}},"id":13563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33494:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":13558,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13533,"src":"33478:5:38","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":13559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33484:9:38","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1309,"src":"33478:15:38","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":13564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33478:30:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"33460:48:38"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":13569,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":162,"src":"33537:5:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":13570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33537:7:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13571,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13557,"src":"33546:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13566,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13533,"src":"33518:5:38","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":13568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33524:12:38","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":2097,"src":"33518:18:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$1352_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20Upgradeable_$1352_$","typeString":"function (contract IERC20Upgradeable,address,uint256)"}},"id":13572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33518:36:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13573,"nodeType":"ExpressionStatement","src":"33518:36:38"},{"eventCall":{"arguments":[{"arguments":[{"id":13577,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13533,"src":"33589:5:38","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}],"id":13576,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33581:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13575,"name":"address","nodeType":"ElementaryTypeName","src":"33581:7:38","typeDescriptions":{}}},"id":13578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33581:14:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13574,"name":"SweepToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15797,"src":"33570:10:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":13579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33570:26:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13580,"nodeType":"EmitStatement","src":"33565:31:38"}]},"documentation":{"id":13530,"nodeType":"StructuredDocumentation","src":"32956:234:38","text":" @notice A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)\n @param token The address of the ERC-20 token to sweep\n @custom:access Only Governance"},"functionSelector":"1be19560","id":13582,"implemented":true,"kind":"function","modifiers":[],"name":"sweepToken","nameLocation":"33204:10:38","nodeType":"FunctionDefinition","overrides":{"id":13535,"nodeType":"OverrideSpecifier","overrides":[],"src":"33249:8:38"},"parameters":{"id":13534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13533,"mutability":"mutable","name":"token","nameLocation":"33233:5:38","nodeType":"VariableDeclaration","scope":13582,"src":"33215:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":13532,"nodeType":"UserDefinedTypeName","pathNode":{"id":13531,"name":"IERC20Upgradeable","nameLocations":["33215:17:38"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"33215:17:38"},"referencedDeclaration":1352,"src":"33215:17:38","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"internal"}],"src":"33214:25:38"},"returnParameters":{"id":13536,"nodeType":"ParameterList","parameters":[],"src":"33258:0:38"},"scope":15506,"src":"33195:408:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":13608,"nodeType":"Block","src":"34002:340:38","statements":[{"expression":{"arguments":[{"hexValue":"7365745265647563655265736572766573426c6f636b44656c74612875696e7432353629","id":13589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"34032:38:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_2464176b54ae14b8a928557e1e8b0eaba8f2db6f9a3a81fba49a388c243ed7e3","typeString":"literal_string \"setReduceReservesBlockDelta(uint256)\""},"value":"setReduceReservesBlockDelta(uint256)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_2464176b54ae14b8a928557e1e8b0eaba8f2db6f9a3a81fba49a388c243ed7e3","typeString":"literal_string \"setReduceReservesBlockDelta(uint256)\""}],"id":13588,"name":"_checkAccessAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5034,"src":"34012:19:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) view"}},"id":13590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34012:59:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13591,"nodeType":"ExpressionStatement","src":"34012:59:38"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13593,"name":"_newReduceReservesBlockOrTimestampDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13585,"src":"34089:39:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":13594,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34131:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"34089:43:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c696420496e707574","id":13596,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"34134:15:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_9404501c113e486e0697e27bc7935ec4eb29770a945d28921aff00cee17e3fed","typeString":"literal_string \"Invalid Input\""},"value":"Invalid Input"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9404501c113e486e0697e27bc7935ec4eb29770a945d28921aff00cee17e3fed","typeString":"literal_string \"Invalid Input\""}],"id":13592,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"34081:7:38","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":13597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34081:69:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13598,"nodeType":"ExpressionStatement","src":"34081:69:38"},{"eventCall":{"arguments":[{"id":13600,"name":"reduceReservesBlockDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15596,"src":"34193:24:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13601,"name":"_newReduceReservesBlockOrTimestampDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13585,"src":"34219:39:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13599,"name":"NewReduceReservesBlockDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15804,"src":"34165:27:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":13602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34165:94:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13603,"nodeType":"EmitStatement","src":"34160:99:38"},{"expression":{"id":13606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13604,"name":"reduceReservesBlockDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15596,"src":"34269:24:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13605,"name":"_newReduceReservesBlockOrTimestampDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13585,"src":"34296:39:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34269:66:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13607,"nodeType":"ExpressionStatement","src":"34269:66:38"}]},"documentation":{"id":13583,"nodeType":"StructuredDocumentation","src":"33609:293:38","text":" @notice A public function to set new threshold of slot(block or second) difference after which funds will be sent to the protocol share reserve\n @param _newReduceReservesBlockOrTimestampDelta slot(block or second) difference value\n @custom:access Only Governance"},"functionSelector":"2464176b","id":13609,"implemented":true,"kind":"function","modifiers":[],"name":"setReduceReservesBlockDelta","nameLocation":"33916:27:38","nodeType":"FunctionDefinition","parameters":{"id":13586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13585,"mutability":"mutable","name":"_newReduceReservesBlockOrTimestampDelta","nameLocation":"33952:39:38","nodeType":"VariableDeclaration","scope":13609,"src":"33944:47:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13584,"name":"uint256","nodeType":"ElementaryTypeName","src":"33944:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33943:49:38"},"returnParameters":{"id":13587,"nodeType":"ParameterList","parameters":[],"src":"34002:0:38"},"scope":15506,"src":"33907:435:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[16049],"body":{"id":13626,"nodeType":"Block","src":"34778:58:38","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":13620,"name":"transferAllowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15582,"src":"34795:18:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":13622,"indexExpression":{"id":13621,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13612,"src":"34814:5:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34795:25:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":13624,"indexExpression":{"id":13623,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13614,"src":"34821:7:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34795:34:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13619,"id":13625,"nodeType":"Return","src":"34788:41:38"}]},"documentation":{"id":13610,"nodeType":"StructuredDocumentation","src":"34348:333:38","text":" @notice Get the current allowance from `owner` for `spender`\n @param owner The address of the account which owns the tokens to be spent\n @param spender The address of the account which may transfer tokens\n @return amount The number of tokens allowed to be spent (type(uint256).max means infinite)"},"functionSelector":"dd62ed3e","id":13627,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"34695:9:38","nodeType":"FunctionDefinition","overrides":{"id":13616,"nodeType":"OverrideSpecifier","overrides":[],"src":"34751:8:38"},"parameters":{"id":13615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13612,"mutability":"mutable","name":"owner","nameLocation":"34713:5:38","nodeType":"VariableDeclaration","scope":13627,"src":"34705:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13611,"name":"address","nodeType":"ElementaryTypeName","src":"34705:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13614,"mutability":"mutable","name":"spender","nameLocation":"34728:7:38","nodeType":"VariableDeclaration","scope":13627,"src":"34720:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13613,"name":"address","nodeType":"ElementaryTypeName","src":"34720:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"34704:32:38"},"returnParameters":{"id":13619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13618,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13627,"src":"34769:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13617,"name":"uint256","nodeType":"ElementaryTypeName","src":"34769:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34768:9:38"},"scope":15506,"src":"34686:150:38","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16056],"body":{"id":13640,"nodeType":"Block","src":"35101:44:38","statements":[{"expression":{"baseExpression":{"id":13636,"name":"accountTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15576,"src":"35118:13:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":13638,"indexExpression":{"id":13637,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13630,"src":"35132:5:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35118:20:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13635,"id":13639,"nodeType":"Return","src":"35111:27:38"}]},"documentation":{"id":13628,"nodeType":"StructuredDocumentation","src":"34842:179:38","text":" @notice Get the token balance of the `owner`\n @param owner The address of the account to query\n @return amount The number of tokens owned by `owner`"},"functionSelector":"70a08231","id":13641,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"35035:9:38","nodeType":"FunctionDefinition","overrides":{"id":13632,"nodeType":"OverrideSpecifier","overrides":[],"src":"35074:8:38"},"parameters":{"id":13631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13630,"mutability":"mutable","name":"owner","nameLocation":"35053:5:38","nodeType":"VariableDeclaration","scope":13641,"src":"35045:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13629,"name":"address","nodeType":"ElementaryTypeName","src":"35045:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"35044:15:38"},"returnParameters":{"id":13635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13634,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13641,"src":"35092:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13633,"name":"uint256","nodeType":"ElementaryTypeName","src":"35092:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"35091:9:38"},"scope":15506,"src":"35026:119:38","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16069],"body":{"id":13667,"nodeType":"Block","src":"35853:112:38","statements":[{"expression":{"components":[{"id":13656,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"35871:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":13657,"name":"accountTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15576,"src":"35881:13:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":13659,"indexExpression":{"id":13658,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13644,"src":"35895:7:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35881:22:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":13661,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13644,"src":"35926:7:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13660,"name":"_borrowBalanceStored","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15461,"src":"35905:20:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":13662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35905:29:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"id":13663,"name":"_exchangeRateStored","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15505,"src":"35936:19:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":13664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35936:21:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13665,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"35870:88:38","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"functionReturnParameters":13655,"id":13666,"nodeType":"Return","src":"35863:95:38"}]},"documentation":{"id":13642,"nodeType":"StructuredDocumentation","src":"35151:487:38","text":" @notice Get a snapshot of the account's balances, and the cached exchange rate\n @dev This is used by comptroller to more efficiently perform liquidity checks.\n @param account Address of the account to snapshot\n @return error Always NO_ERROR for compatibility with Venus core tooling\n @return vTokenBalance User's balance of vTokens\n @return borrowBalance Amount owed in terms of underlying\n @return exchangeRate Stored exchange rate"},"functionSelector":"c37f68e2","id":13668,"implemented":true,"kind":"function","modifiers":[],"name":"getAccountSnapshot","nameLocation":"35652:18:38","nodeType":"FunctionDefinition","overrides":{"id":13646,"nodeType":"OverrideSpecifier","overrides":[],"src":"35740:8:38"},"parameters":{"id":13645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13644,"mutability":"mutable","name":"account","nameLocation":"35688:7:38","nodeType":"VariableDeclaration","scope":13668,"src":"35680:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13643,"name":"address","nodeType":"ElementaryTypeName","src":"35680:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"35670:31:38"},"returnParameters":{"id":13655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13648,"mutability":"mutable","name":"error","nameLocation":"35774:5:38","nodeType":"VariableDeclaration","scope":13668,"src":"35766:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13647,"name":"uint256","nodeType":"ElementaryTypeName","src":"35766:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13650,"mutability":"mutable","name":"vTokenBalance","nameLocation":"35789:13:38","nodeType":"VariableDeclaration","scope":13668,"src":"35781:21:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13649,"name":"uint256","nodeType":"ElementaryTypeName","src":"35781:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13652,"mutability":"mutable","name":"borrowBalance","nameLocation":"35812:13:38","nodeType":"VariableDeclaration","scope":13668,"src":"35804:21:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13651,"name":"uint256","nodeType":"ElementaryTypeName","src":"35804:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13654,"mutability":"mutable","name":"exchangeRate","nameLocation":"35835:12:38","nodeType":"VariableDeclaration","scope":13668,"src":"35827:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13653,"name":"uint256","nodeType":"ElementaryTypeName","src":"35827:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"35765:83:38"},"scope":15506,"src":"35643:322:38","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16096],"body":{"id":13678,"nodeType":"Block","src":"36194:39:38","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13675,"name":"_getCashPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15425,"src":"36211:13:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":13676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36211:15:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13674,"id":13677,"nodeType":"Return","src":"36204:22:38"}]},"documentation":{"id":13669,"nodeType":"StructuredDocumentation","src":"35971:158:38","text":" @notice Get cash balance of this vToken in the underlying asset\n @return cash The quantity of underlying asset owned by this contract"},"functionSelector":"3b1d21a2","id":13679,"implemented":true,"kind":"function","modifiers":[],"name":"getCash","nameLocation":"36143:7:38","nodeType":"FunctionDefinition","overrides":{"id":13671,"nodeType":"OverrideSpecifier","overrides":[],"src":"36167:8:38"},"parameters":{"id":13670,"nodeType":"ParameterList","parameters":[],"src":"36150:2:38"},"returnParameters":{"id":13674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13673,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13679,"src":"36185:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13672,"name":"uint256","nodeType":"ElementaryTypeName","src":"36185:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"36184:9:38"},"scope":15506,"src":"36134:99:38","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16074],"body":{"id":13695,"nodeType":"Block","src":"36511:110:38","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":13688,"name":"_getCashPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15425,"src":"36560:13:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":13689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36560:15:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13690,"name":"totalBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15563,"src":"36577:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13691,"name":"totalReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15566,"src":"36591:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13692,"name":"badDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15572,"src":"36606:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13686,"name":"interestRateModel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15549,"src":"36528:17:38","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},"id":13687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"36546:13:38","memberName":"getBorrowRate","nodeType":"MemberAccess","referencedDeclaration":10240,"src":"36528:31:38","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view external returns (uint256)"}},"id":13693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36528:86:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13685,"id":13694,"nodeType":"Return","src":"36521:93:38"}]},"documentation":{"id":13680,"nodeType":"StructuredDocumentation","src":"36239:196:38","text":" @notice Returns the current per slot(block or second) borrow interest rate for this vToken\n @return rate The borrow interest rate per slot(block or second), scaled by 1e18"},"functionSelector":"f8f9da28","id":13696,"implemented":true,"kind":"function","modifiers":[],"name":"borrowRatePerBlock","nameLocation":"36449:18:38","nodeType":"FunctionDefinition","overrides":{"id":13682,"nodeType":"OverrideSpecifier","overrides":[],"src":"36484:8:38"},"parameters":{"id":13681,"nodeType":"ParameterList","parameters":[],"src":"36467:2:38"},"returnParameters":{"id":13685,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13684,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13696,"src":"36502:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13683,"name":"uint256","nodeType":"ElementaryTypeName","src":"36502:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"36501:9:38"},"scope":15506,"src":"36440:181:38","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16079],"body":{"id":13713,"nodeType":"Block","src":"36894:239:38","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":13705,"name":"_getCashPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15425,"src":"36972:13:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":13706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36972:15:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13707,"name":"totalBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15563,"src":"37005:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13708,"name":"totalReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15566,"src":"37035:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13709,"name":"reserveFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15554,"src":"37066:21:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13710,"name":"badDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15572,"src":"37105:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13703,"name":"interestRateModel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15549,"src":"36923:17:38","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},"id":13704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"36941:13:38","memberName":"getSupplyRate","nodeType":"MemberAccess","referencedDeclaration":10256,"src":"36923:31:38","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256,uint256) view external returns (uint256)"}},"id":13711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36923:203:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13702,"id":13712,"nodeType":"Return","src":"36904:222:38"}]},"documentation":{"id":13697,"nodeType":"StructuredDocumentation","src":"36627:191:38","text":" @notice Returns the current per-slot(block or second) supply interest rate for this v\n @return rate The supply interest rate per slot(block or second), scaled by 1e18"},"functionSelector":"ae9d70b0","id":13714,"implemented":true,"kind":"function","modifiers":[],"name":"supplyRatePerBlock","nameLocation":"36832:18:38","nodeType":"FunctionDefinition","overrides":{"id":13699,"nodeType":"OverrideSpecifier","overrides":[],"src":"36867:8:38"},"parameters":{"id":13698,"nodeType":"ParameterList","parameters":[],"src":"36850:2:38"},"returnParameters":{"id":13702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13701,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13714,"src":"36885:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13700,"name":"uint256","nodeType":"ElementaryTypeName","src":"36885:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"36884:9:38"},"scope":15506,"src":"36823:310:38","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16086],"body":{"id":13727,"nodeType":"Block","src":"37436:53:38","statements":[{"expression":{"arguments":[{"id":13724,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13717,"src":"37474:7:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13723,"name":"_borrowBalanceStored","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15461,"src":"37453:20:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":13725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37453:29:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13722,"id":13726,"nodeType":"Return","src":"37446:36:38"}]},"documentation":{"id":13715,"nodeType":"StructuredDocumentation","src":"37139:205:38","text":" @notice Return the borrow balance of account based on stored data\n @param account The address whose balance should be calculated\n @return borrowBalance The calculated balance"},"functionSelector":"95dd9193","id":13728,"implemented":true,"kind":"function","modifiers":[],"name":"borrowBalanceStored","nameLocation":"37358:19:38","nodeType":"FunctionDefinition","overrides":{"id":13719,"nodeType":"OverrideSpecifier","overrides":[],"src":"37409:8:38"},"parameters":{"id":13718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13717,"mutability":"mutable","name":"account","nameLocation":"37386:7:38","nodeType":"VariableDeclaration","scope":13728,"src":"37378:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13716,"name":"address","nodeType":"ElementaryTypeName","src":"37378:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"37377:17:38"},"returnParameters":{"id":13722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13721,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13728,"src":"37427:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13720,"name":"uint256","nodeType":"ElementaryTypeName","src":"37427:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"37426:9:38"},"scope":15506,"src":"37349:140:38","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16091],"body":{"id":13738,"nodeType":"Block","src":"37816:45:38","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13735,"name":"_exchangeRateStored","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15505,"src":"37833:19:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":13736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37833:21:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13734,"id":13737,"nodeType":"Return","src":"37826:28:38"}]},"documentation":{"id":13729,"nodeType":"StructuredDocumentation","src":"37495:245:38","text":" @notice Calculates the exchange rate from the underlying to the VToken\n @dev This function does not accrue interest before calculating the exchange rate\n @return exchangeRate Calculated exchange rate scaled by 1e18"},"functionSelector":"182df0f5","id":13739,"implemented":true,"kind":"function","modifiers":[],"name":"exchangeRateStored","nameLocation":"37754:18:38","nodeType":"FunctionDefinition","overrides":{"id":13731,"nodeType":"OverrideSpecifier","overrides":[],"src":"37789:8:38"},"parameters":{"id":13730,"nodeType":"ParameterList","parameters":[],"src":"37772:2:38"},"returnParameters":{"id":13734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13733,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13739,"src":"37807:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13732,"name":"uint256","nodeType":"ElementaryTypeName","src":"37807:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"37806:9:38"},"scope":15506,"src":"37745:116:38","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[15983],"body":{"id":13754,"nodeType":"Block","src":"38101:71:38","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13748,"name":"accrueInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13910,"src":"38111:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_uint256_$","typeString":"function () returns (uint256)"}},"id":13749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38111:16:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13750,"nodeType":"ExpressionStatement","src":"38111:16:38"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13751,"name":"_exchangeRateStored","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15505,"src":"38144:19:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":13752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38144:21:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13747,"id":13753,"nodeType":"Return","src":"38137:28:38"}]},"documentation":{"id":13740,"nodeType":"StructuredDocumentation","src":"37867:151:38","text":" @notice Accrue interest then return the up-to-date exchange rate\n @return exchangeRate Calculated exchange rate scaled by 1e18"},"functionSelector":"bd6d894d","id":13755,"implemented":true,"kind":"function","modifiers":[{"id":13744,"kind":"modifierInvocation","modifierName":{"id":13743,"name":"nonReentrant","nameLocations":["38070:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":12491,"src":"38070:12:38"},"nodeType":"ModifierInvocation","src":"38070:12:38"}],"name":"exchangeRateCurrent","nameLocation":"38032:19:38","nodeType":"FunctionDefinition","overrides":{"id":13742,"nodeType":"OverrideSpecifier","overrides":[],"src":"38061:8:38"},"parameters":{"id":13741,"nodeType":"ParameterList","parameters":[],"src":"38051:2:38"},"returnParameters":{"id":13747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13746,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13755,"src":"38092:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13745,"name":"uint256","nodeType":"ElementaryTypeName","src":"38092:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"38091:9:38"},"scope":15506,"src":"38023:149:38","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[15962],"body":{"id":13909,"nodeType":"Block","src":"38763:2912:38","statements":[{"assignments":[13763],"declarations":[{"constant":false,"id":13763,"mutability":"mutable","name":"currentSlotNumber","nameLocation":"38842:17:38","nodeType":"VariableDeclaration","scope":13909,"src":"38834:25:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13762,"name":"uint256","nodeType":"ElementaryTypeName","src":"38834:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13766,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":13764,"name":"getBlockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16298,"src":"38862:25:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":13765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38862:27:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"38834:55:38"},{"assignments":[13768],"declarations":[{"constant":false,"id":13768,"mutability":"mutable","name":"accrualSlotNumberPrior","nameLocation":"38907:22:38","nodeType":"VariableDeclaration","scope":13909,"src":"38899:30:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13767,"name":"uint256","nodeType":"ElementaryTypeName","src":"38899:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13770,"initialValue":{"id":13769,"name":"accrualBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15557,"src":"38932:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"38899:51:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13771,"name":"accrualSlotNumberPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13768,"src":"39017:22:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":13772,"name":"currentSlotNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13763,"src":"39043:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"39017:43:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13777,"nodeType":"IfStatement","src":"39013:89:38","trueBody":{"id":13776,"nodeType":"Block","src":"39062:40:38","statements":[{"expression":{"id":13774,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"39083:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13761,"id":13775,"nodeType":"Return","src":"39076:15:38"}]}},{"assignments":[13779],"declarations":[{"constant":false,"id":13779,"mutability":"mutable","name":"cashPrior","nameLocation":"39174:9:38","nodeType":"VariableDeclaration","scope":13909,"src":"39166:17:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13778,"name":"uint256","nodeType":"ElementaryTypeName","src":"39166:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13782,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":13780,"name":"_getCashPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15425,"src":"39186:13:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":13781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39186:15:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"39166:35:38"},{"assignments":[13784],"declarations":[{"constant":false,"id":13784,"mutability":"mutable","name":"borrowsPrior","nameLocation":"39219:12:38","nodeType":"VariableDeclaration","scope":13909,"src":"39211:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13783,"name":"uint256","nodeType":"ElementaryTypeName","src":"39211:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13786,"initialValue":{"id":13785,"name":"totalBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15563,"src":"39234:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"39211:35:38"},{"assignments":[13788],"declarations":[{"constant":false,"id":13788,"mutability":"mutable","name":"reservesPrior","nameLocation":"39264:13:38","nodeType":"VariableDeclaration","scope":13909,"src":"39256:21:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13787,"name":"uint256","nodeType":"ElementaryTypeName","src":"39256:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13790,"initialValue":{"id":13789,"name":"totalReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15566,"src":"39280:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"39256:37:38"},{"assignments":[13792],"declarations":[{"constant":false,"id":13792,"mutability":"mutable","name":"borrowIndexPrior","nameLocation":"39311:16:38","nodeType":"VariableDeclaration","scope":13909,"src":"39303:24:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13791,"name":"uint256","nodeType":"ElementaryTypeName","src":"39303:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13794,"initialValue":{"id":13793,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15560,"src":"39330:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"39303:38:38"},{"assignments":[13796],"declarations":[{"constant":false,"id":13796,"mutability":"mutable","name":"borrowRateMantissa","nameLocation":"39417:18:38","nodeType":"VariableDeclaration","scope":13909,"src":"39409:26:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13795,"name":"uint256","nodeType":"ElementaryTypeName","src":"39409:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13804,"initialValue":{"arguments":[{"id":13799,"name":"cashPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13779,"src":"39470:9:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13800,"name":"borrowsPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13784,"src":"39481:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13801,"name":"reservesPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13788,"src":"39495:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13802,"name":"badDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15572,"src":"39510:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13797,"name":"interestRateModel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15549,"src":"39438:17:38","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},"id":13798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39456:13:38","memberName":"getBorrowRate","nodeType":"MemberAccess","referencedDeclaration":10240,"src":"39438:31:38","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view external returns (uint256)"}},"id":13803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39438:80:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"39409:109:38"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13806,"name":"borrowRateMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13796,"src":"39536:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":13807,"name":"MAX_BORROW_RATE_MANTISSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12473,"src":"39558:24:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"39536:46:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"626f72726f772072617465206973206162737572646c792068696768","id":13809,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"39584:30:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_9ab90068dc5fe9f7def6aab4ae887ed8eff65c4b83c1b9ba6beb99101f1ae8ea","typeString":"literal_string \"borrow rate is absurdly high\""},"value":"borrow rate is absurdly high"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9ab90068dc5fe9f7def6aab4ae887ed8eff65c4b83c1b9ba6beb99101f1ae8ea","typeString":"literal_string \"borrow rate is absurdly high\""}],"id":13805,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"39528:7:38","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":13810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39528:87:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13811,"nodeType":"ExpressionStatement","src":"39528:87:38"},{"assignments":[13813],"declarations":[{"constant":false,"id":13813,"mutability":"mutable","name":"slotDelta","nameLocation":"39709:9:38","nodeType":"VariableDeclaration","scope":13909,"src":"39701:17:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13812,"name":"uint256","nodeType":"ElementaryTypeName","src":"39701:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13817,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13814,"name":"currentSlotNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13763,"src":"39721:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":13815,"name":"accrualSlotNumberPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13768,"src":"39741:22:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"39721:42:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"39701:62:38"},{"assignments":[13820],"declarations":[{"constant":false,"id":13820,"mutability":"mutable","name":"simpleInterestFactor","nameLocation":"40254:20:38","nodeType":"VariableDeclaration","scope":13909,"src":"40243:31:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":13819,"nodeType":"UserDefinedTypeName","pathNode":{"id":13818,"name":"Exp","nameLocations":["40243:3:38"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"40243:3:38"},"referencedDeclaration":9645,"src":"40243:3:38","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":13827,"initialValue":{"arguments":[{"arguments":[{"id":13823,"name":"borrowRateMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13796,"src":"40298:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13822,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"40282:3:38","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":13824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["40288:8:38"],"names":["mantissa"],"nodeType":"FunctionCall","src":"40282:37:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":13825,"name":"slotDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13813,"src":"40321:9:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13821,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":9961,"src":"40277:4:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_uint256_$returns$_t_struct$_Exp_$9645_memory_ptr_$","typeString":"function (struct ExponentialNoError.Exp memory,uint256) pure returns (struct ExponentialNoError.Exp memory)"}},"id":13826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40277:54:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"VariableDeclarationStatement","src":"40243:88:38"},{"assignments":[13829],"declarations":[{"constant":false,"id":13829,"mutability":"mutable","name":"interestAccumulated","nameLocation":"40349:19:38","nodeType":"VariableDeclaration","scope":13909,"src":"40341:27:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13828,"name":"uint256","nodeType":"ElementaryTypeName","src":"40341:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13834,"initialValue":{"arguments":[{"id":13831,"name":"simpleInterestFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13820,"src":"40390:20:38","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":13832,"name":"borrowsPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13784,"src":"40412:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13830,"name":"mul_ScalarTruncate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9701,"src":"40371:18:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct ExponentialNoError.Exp memory,uint256) pure returns (uint256)"}},"id":13833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40371:54:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"40341:84:38"},{"assignments":[13836],"declarations":[{"constant":false,"id":13836,"mutability":"mutable","name":"totalBorrowsNew","nameLocation":"40443:15:38","nodeType":"VariableDeclaration","scope":13909,"src":"40435:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13835,"name":"uint256","nodeType":"ElementaryTypeName","src":"40435:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13840,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13837,"name":"interestAccumulated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13829,"src":"40461:19:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":13838,"name":"borrowsPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13784,"src":"40483:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"40461:34:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"40435:60:38"},{"assignments":[13842],"declarations":[{"constant":false,"id":13842,"mutability":"mutable","name":"totalReservesNew","nameLocation":"40513:16:38","nodeType":"VariableDeclaration","scope":13909,"src":"40505:24:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13841,"name":"uint256","nodeType":"ElementaryTypeName","src":"40505:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13850,"initialValue":{"arguments":[{"arguments":[{"id":13845,"name":"reserveFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15554,"src":"40587:21:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13844,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"40571:3:38","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":13846,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["40577:8:38"],"names":["mantissa"],"nodeType":"FunctionCall","src":"40571:40:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":13847,"name":"interestAccumulated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13829,"src":"40625:19:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13848,"name":"reservesPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13788,"src":"40658:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13843,"name":"mul_ScalarTruncateAddUInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9730,"src":"40532:25:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct ExponentialNoError.Exp memory,uint256,uint256) pure returns (uint256)"}},"id":13849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40532:149:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"40505:176:38"},{"assignments":[13852],"declarations":[{"constant":false,"id":13852,"mutability":"mutable","name":"borrowIndexNew","nameLocation":"40699:14:38","nodeType":"VariableDeclaration","scope":13909,"src":"40691:22:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13851,"name":"uint256","nodeType":"ElementaryTypeName","src":"40691:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13858,"initialValue":{"arguments":[{"id":13854,"name":"simpleInterestFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13820,"src":"40742:20:38","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":13855,"name":"borrowIndexPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13792,"src":"40764:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13856,"name":"borrowIndexPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13792,"src":"40782:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13853,"name":"mul_ScalarTruncateAddUInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9730,"src":"40716:25:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct ExponentialNoError.Exp memory,uint256,uint256) pure returns (uint256)"}},"id":13857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40716:83:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"40691:108:38"},{"expression":{"id":13861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13859,"name":"accrualBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15557,"src":"40996:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13860,"name":"currentSlotNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13763,"src":"41017:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"40996:38:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13862,"nodeType":"ExpressionStatement","src":"40996:38:38"},{"expression":{"id":13865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13863,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15560,"src":"41044:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13864,"name":"borrowIndexNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13852,"src":"41058:14:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"41044:28:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13866,"nodeType":"ExpressionStatement","src":"41044:28:38"},{"expression":{"id":13869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13867,"name":"totalBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15563,"src":"41082:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13868,"name":"totalBorrowsNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13836,"src":"41097:15:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"41082:30:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13870,"nodeType":"ExpressionStatement","src":"41082:30:38"},{"expression":{"id":13873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13871,"name":"totalReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15566,"src":"41122:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13872,"name":"totalReservesNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13842,"src":"41138:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"41122:32:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13874,"nodeType":"ExpressionStatement","src":"41122:32:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13875,"name":"currentSlotNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13763,"src":"41169:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":13876,"name":"reduceReservesBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15599,"src":"41189:25:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"41169:45:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":13878,"name":"reduceReservesBlockDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15596,"src":"41218:24:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"41169:73:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13899,"nodeType":"IfStatement","src":"41165:337:38","trueBody":{"id":13898,"nodeType":"Block","src":"41244:258:38","statements":[{"expression":{"id":13882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13880,"name":"reduceReservesBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15599,"src":"41258:25:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13881,"name":"currentSlotNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13763,"src":"41286:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"41258:45:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13883,"nodeType":"ExpressionStatement","src":"41258:45:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13884,"name":"cashPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13779,"src":"41321:9:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":13885,"name":"totalReservesNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13842,"src":"41333:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"41321:28:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":13896,"nodeType":"Block","src":"41421:71:38","statements":[{"expression":{"arguments":[{"id":13893,"name":"totalReservesNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13842,"src":"41460:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13892,"name":"_reduceReservesFresh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14963,"src":"41439:20:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":13894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41439:38:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13895,"nodeType":"ExpressionStatement","src":"41439:38:38"}]},"id":13897,"nodeType":"IfStatement","src":"41317:175:38","trueBody":{"id":13891,"nodeType":"Block","src":"41351:64:38","statements":[{"expression":{"arguments":[{"id":13888,"name":"cashPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13779,"src":"41390:9:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13887,"name":"_reduceReservesFresh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14963,"src":"41369:20:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":13889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41369:31:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13890,"nodeType":"ExpressionStatement","src":"41369:31:38"}]}}]}},{"eventCall":{"arguments":[{"id":13901,"name":"cashPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13779,"src":"41578:9:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13902,"name":"interestAccumulated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13829,"src":"41589:19:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13903,"name":"borrowIndexNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13852,"src":"41610:14:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13904,"name":"totalBorrowsNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13836,"src":"41626:15:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13900,"name":"AccrueInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15624,"src":"41563:14:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256,uint256)"}},"id":13905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41563:79:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13906,"nodeType":"EmitStatement","src":"41558:84:38"},{"expression":{"id":13907,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"41660:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13761,"id":13908,"nodeType":"Return","src":"41653:15:38"}]},"documentation":{"id":13756,"nodeType":"StructuredDocumentation","src":"38178:512:38","text":" @notice Applies accrued interest to total borrows and reserves\n @dev This calculates interest accrued from the last checkpointed slot(block or second)\n  up to the current slot(block or second) and writes new checkpoint to storage and\n  reduce spread reserves to protocol share reserve\n  if currentSlot - reduceReservesBlockNumber >= slotDelta\n @return Always NO_ERROR\n @custom:event Emits AccrueInterest event on success\n @custom:access Not restricted"},"functionSelector":"a6afed95","id":13910,"implemented":true,"kind":"function","modifiers":[],"name":"accrueInterest","nameLocation":"38704:14:38","nodeType":"FunctionDefinition","overrides":{"id":13758,"nodeType":"OverrideSpecifier","overrides":[],"src":"38736:8:38"},"parameters":{"id":13757,"nodeType":"ParameterList","parameters":[],"src":"38718:2:38"},"returnParameters":{"id":13761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13760,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13910,"src":"38754:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13759,"name":"uint256","nodeType":"ElementaryTypeName","src":"38754:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"38753:9:38"},"scope":15506,"src":"38695:2980:38","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":14010,"nodeType":"Block","src":"42187:2007:38","statements":[{"expression":{"arguments":[{"arguments":[{"id":13925,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"42268:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":13924,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"42260:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13923,"name":"address","nodeType":"ElementaryTypeName","src":"42260:7:38","typeDescriptions":{}}},"id":13926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42260:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13927,"name":"minter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13915,"src":"42275:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13928,"name":"mintAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13917,"src":"42283:10:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13920,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"42236:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"id":13922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"42248:11:38","memberName":"preMintHook","nodeType":"MemberAccess","referencedDeclaration":9174,"src":"42236:23:38","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":13929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42236:58:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13930,"nodeType":"ExpressionStatement","src":"42236:58:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13931,"name":"accrualBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15557,"src":"42412:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":13932,"name":"getBlockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16298,"src":"42434:25:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":13933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42434:27:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"42412:49:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13939,"nodeType":"IfStatement","src":"42408:107:38","trueBody":{"id":13938,"nodeType":"Block","src":"42463:52:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13935,"name":"MintFreshnessCheck","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9585,"src":"42484:18:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":13936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42484:20:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13937,"nodeType":"RevertStatement","src":"42477:27:38"}]}},{"assignments":[13942],"declarations":[{"constant":false,"id":13942,"mutability":"mutable","name":"exchangeRate","nameLocation":"42536:12:38","nodeType":"VariableDeclaration","scope":14010,"src":"42525:23:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":13941,"nodeType":"UserDefinedTypeName","pathNode":{"id":13940,"name":"Exp","nameLocations":["42525:3:38"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"42525:3:38"},"referencedDeclaration":9645,"src":"42525:3:38","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":13947,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":13944,"name":"_exchangeRateStored","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15505,"src":"42567:19:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":13945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42567:21:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13943,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"42551:3:38","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":13946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["42557:8:38"],"names":["mantissa"],"nodeType":"FunctionCall","src":"42551:40:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"VariableDeclarationStatement","src":"42525:66:38"},{"assignments":[13949],"declarations":[{"constant":false,"id":13949,"mutability":"mutable","name":"actualMintAmount","nameLocation":"43109:16:38","nodeType":"VariableDeclaration","scope":14010,"src":"43101:24:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13948,"name":"uint256","nodeType":"ElementaryTypeName","src":"43101:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13954,"initialValue":{"arguments":[{"id":13951,"name":"payer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13913,"src":"43142:5:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13952,"name":"mintAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13917,"src":"43149:10:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13950,"name":"_doTransferIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15057,"src":"43128:13:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,uint256) returns (uint256)"}},"id":13953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43128:32:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"43101:59:38"},{"assignments":[13956],"declarations":[{"constant":false,"id":13956,"mutability":"mutable","name":"mintTokens","nameLocation":"43354:10:38","nodeType":"VariableDeclaration","scope":14010,"src":"43346:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13955,"name":"uint256","nodeType":"ElementaryTypeName","src":"43346:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13961,"initialValue":{"arguments":[{"id":13958,"name":"actualMintAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13949,"src":"43372:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13959,"name":"exchangeRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13942,"src":"43390:12:38","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":13957,"name":"div_","nodeType":"Identifier","overloadedDeclarations":[10082,10102,10122,10147,10167,10187,10201],"referencedDeclaration":10122,"src":"43367:4:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_struct$_Exp_$9645_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,struct ExponentialNoError.Exp memory) pure returns (uint256)"}},"id":13960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43367:36:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"43346:57:38"},{"expression":{"id":13966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13962,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15569,"src":"43701:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13963,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15569,"src":"43715:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":13964,"name":"mintTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13956,"src":"43729:10:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"43715:24:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"43701:38:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13967,"nodeType":"ExpressionStatement","src":"43701:38:38"},{"assignments":[13969],"declarations":[{"constant":false,"id":13969,"mutability":"mutable","name":"balanceAfter","nameLocation":"43757:12:38","nodeType":"VariableDeclaration","scope":14010,"src":"43749:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13968,"name":"uint256","nodeType":"ElementaryTypeName","src":"43749:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13975,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":13970,"name":"accountTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15576,"src":"43772:13:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":13972,"indexExpression":{"id":13971,"name":"minter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13915,"src":"43786:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"43772:21:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":13973,"name":"mintTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13956,"src":"43796:10:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"43772:34:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"43749:57:38"},{"expression":{"id":13980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":13976,"name":"accountTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15576,"src":"43816:13:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":13978,"indexExpression":{"id":13977,"name":"minter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13915,"src":"43830:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"43816:21:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13979,"name":"balanceAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13969,"src":"43840:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"43816:36:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13981,"nodeType":"ExpressionStatement","src":"43816:36:38"},{"eventCall":{"arguments":[{"id":13983,"name":"minter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13915,"src":"43930:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13984,"name":"actualMintAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13949,"src":"43938:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13985,"name":"mintTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13956,"src":"43956:10:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13986,"name":"balanceAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13969,"src":"43968:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13982,"name":"Mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15635,"src":"43925:4:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256,uint256)"}},"id":13987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43925:56:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13988,"nodeType":"EmitStatement","src":"43920:61:38"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":13992,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"44013:1:38","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":13991,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"44005:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13990,"name":"address","nodeType":"ElementaryTypeName","src":"44005:7:38","typeDescriptions":{}}},"id":13993,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44005:10:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13994,"name":"minter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13915,"src":"44017:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13995,"name":"mintTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13956,"src":"44025:10:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13989,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15774,"src":"43996:8:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":13996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43996:40:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13997,"nodeType":"EmitStatement","src":"43991:45:38"},{"expression":{"arguments":[{"arguments":[{"id":14003,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"44143:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":14002,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"44135:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14001,"name":"address","nodeType":"ElementaryTypeName","src":"44135:7:38","typeDescriptions":{}}},"id":14004,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44135:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14005,"name":"minter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13915,"src":"44150:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14006,"name":"actualMintAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13949,"src":"44158:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14007,"name":"mintTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13956,"src":"44176:10:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13998,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"44112:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"id":14000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"44124:10:38","memberName":"mintVerify","nodeType":"MemberAccess","referencedDeclaration":9243,"src":"44112:22:38","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256) external"}},"id":14008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44112:75:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14009,"nodeType":"ExpressionStatement","src":"44112:75:38"}]},"documentation":{"id":13911,"nodeType":"StructuredDocumentation","src":"41681:421:38","text":" @notice User supplies assets into the market and receives vTokens in exchange\n @dev Assumes interest has already been accrued up to the current block or timestamp\n @param payer The address of the account which is sending the assets for supply\n @param minter The address of the account which is supplying the assets\n @param mintAmount The amount of the underlying asset to supply"},"id":14011,"implemented":true,"kind":"function","modifiers":[],"name":"_mintFresh","nameLocation":"42116:10:38","nodeType":"FunctionDefinition","parameters":{"id":13918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13913,"mutability":"mutable","name":"payer","nameLocation":"42135:5:38","nodeType":"VariableDeclaration","scope":14011,"src":"42127:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13912,"name":"address","nodeType":"ElementaryTypeName","src":"42127:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13915,"mutability":"mutable","name":"minter","nameLocation":"42150:6:38","nodeType":"VariableDeclaration","scope":14011,"src":"42142:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13914,"name":"address","nodeType":"ElementaryTypeName","src":"42142:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13917,"mutability":"mutable","name":"mintAmount","nameLocation":"42166:10:38","nodeType":"VariableDeclaration","scope":14011,"src":"42158:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13916,"name":"uint256","nodeType":"ElementaryTypeName","src":"42158:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"42126:51:38"},"returnParameters":{"id":13919,"nodeType":"ParameterList","parameters":[],"src":"42187:0:38"},"scope":15506,"src":"42107:2087:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":14183,"nodeType":"Block","src":"45160:2968:38","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14024,"name":"redeemTokensIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14018,"src":"45178:14:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":14025,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"45196:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"45178:19:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14027,"name":"redeemAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14020,"src":"45201:14:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":14028,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"45219:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"45201:19:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"45178:42:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6f6e65206f662072656465656d546f6b656e73496e206f722072656465656d416d6f756e74496e206d757374206265207a65726f","id":14031,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"45222:54:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_e7cef2e7b515a83b650bc43dbe7230ede3601779d8be25fbf237261dccd3d9f2","typeString":"literal_string \"one of redeemTokensIn or redeemAmountIn must be zero\""},"value":"one of redeemTokensIn or redeemAmountIn must be zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e7cef2e7b515a83b650bc43dbe7230ede3601779d8be25fbf237261dccd3d9f2","typeString":"literal_string \"one of redeemTokensIn or redeemAmountIn must be zero\""}],"id":14023,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"45170:7:38","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":14032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45170:107:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14033,"nodeType":"ExpressionStatement","src":"45170:107:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14034,"name":"accrualBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15557,"src":"45395:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":14035,"name":"getBlockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16298,"src":"45417:25:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":14036,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45417:27:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"45395:49:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14042,"nodeType":"IfStatement","src":"45391:109:38","trueBody":{"id":14041,"nodeType":"Block","src":"45446:54:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14038,"name":"RedeemFreshnessCheck","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9587,"src":"45467:20:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45467:22:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14040,"nodeType":"RevertStatement","src":"45460:29:38"}]}},{"assignments":[14045],"declarations":[{"constant":false,"id":14045,"mutability":"mutable","name":"exchangeRate","nameLocation":"45580:12:38","nodeType":"VariableDeclaration","scope":14183,"src":"45569:23:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":14044,"nodeType":"UserDefinedTypeName","pathNode":{"id":14043,"name":"Exp","nameLocations":["45569:3:38"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"45569:3:38"},"referencedDeclaration":9645,"src":"45569:3:38","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":14050,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":14047,"name":"_exchangeRateStored","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15505,"src":"45611:19:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":14048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45611:21:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14046,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"45595:3:38","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":14049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["45601:8:38"],"names":["mantissa"],"nodeType":"FunctionCall","src":"45595:40:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"VariableDeclarationStatement","src":"45569:66:38"},{"assignments":[14052],"declarations":[{"constant":false,"id":14052,"mutability":"mutable","name":"redeemTokens","nameLocation":"45654:12:38","nodeType":"VariableDeclaration","scope":14183,"src":"45646:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14051,"name":"uint256","nodeType":"ElementaryTypeName","src":"45646:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14053,"nodeType":"VariableDeclarationStatement","src":"45646:20:38"},{"assignments":[14055],"declarations":[{"constant":false,"id":14055,"mutability":"mutable","name":"redeemAmount","nameLocation":"45684:12:38","nodeType":"VariableDeclaration","scope":14183,"src":"45676:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14054,"name":"uint256","nodeType":"ElementaryTypeName","src":"45676:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14056,"nodeType":"VariableDeclarationStatement","src":"45676:20:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14057,"name":"redeemTokensIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14018,"src":"45748:14:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":14058,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"45765:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"45748:18:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":14090,"nodeType":"Block","src":"45996:425:38","statements":[{"expression":{"id":14070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14065,"name":"redeemTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14052,"src":"46191:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":14067,"name":"redeemAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14020,"src":"46211:14:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14068,"name":"exchangeRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14045,"src":"46227:12:38","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":14066,"name":"div_","nodeType":"Identifier","overloadedDeclarations":[10082,10102,10122,10147,10167,10187,10201],"referencedDeclaration":10122,"src":"46206:4:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_struct$_Exp_$9645_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,struct ExponentialNoError.Exp memory) pure returns (uint256)"}},"id":14069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"46206:34:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"46191:49:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14071,"nodeType":"ExpressionStatement","src":"46191:49:38"},{"assignments":[14073],"declarations":[{"constant":false,"id":14073,"mutability":"mutable","name":"_redeemAmount","nameLocation":"46263:13:38","nodeType":"VariableDeclaration","scope":14090,"src":"46255:21:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14072,"name":"uint256","nodeType":"ElementaryTypeName","src":"46255:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14078,"initialValue":{"arguments":[{"id":14075,"name":"redeemTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14052,"src":"46284:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14076,"name":"exchangeRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14045,"src":"46298:12:38","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":14074,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":9980,"src":"46279:4:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_struct$_Exp_$9645_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,struct ExponentialNoError.Exp memory) pure returns (uint256)"}},"id":14077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"46279:32:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"46255:56:38"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14079,"name":"_redeemAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14073,"src":"46329:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":14080,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"46346:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"46329:18:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14082,"name":"_redeemAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14073,"src":"46351:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":14083,"name":"redeemAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14020,"src":"46368:14:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"46351:31:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"46329:53:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14089,"nodeType":"IfStatement","src":"46325:73:38","trueBody":{"expression":{"id":14087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"46384:14:38","subExpression":{"id":14086,"name":"redeemTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14052,"src":"46384:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14088,"nodeType":"ExpressionStatement","src":"46384:14:38"}}]},"id":14091,"nodeType":"IfStatement","src":"45744:677:38","trueBody":{"id":14064,"nodeType":"Block","src":"45768:222:38","statements":[{"expression":{"id":14062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14060,"name":"redeemTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14052,"src":"45950:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14061,"name":"redeemTokensIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14018,"src":"45965:14:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"45950:29:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14063,"nodeType":"ExpressionStatement","src":"45950:29:38"}]}},{"expression":{"id":14097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14092,"name":"redeemAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14055,"src":"46485:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":14094,"name":"exchangeRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14045,"src":"46519:12:38","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":14095,"name":"redeemTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14052,"src":"46533:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14093,"name":"mul_ScalarTruncate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9701,"src":"46500:18:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct ExponentialNoError.Exp memory,uint256) pure returns (uint256)"}},"id":14096,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"46500:46:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"46485:61:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14098,"nodeType":"ExpressionStatement","src":"46485:61:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14099,"name":"redeemAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14055,"src":"46597:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":14100,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"46613:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"46597:17:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14107,"nodeType":"IfStatement","src":"46593:78:38","trueBody":{"id":14106,"nodeType":"Block","src":"46616:55:38","statements":[{"expression":{"arguments":[{"hexValue":"72656465656d416d6f756e74206973207a65726f","id":14103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"46637:22:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_4a73c8aa35e7317ade5f993a0242f1c31eb3c6b8eb0e0c438aee70e953928ca6","typeString":"literal_string \"redeemAmount is zero\""},"value":"redeemAmount is zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_4a73c8aa35e7317ade5f993a0242f1c31eb3c6b8eb0e0c438aee70e953928ca6","typeString":"literal_string \"redeemAmount is zero\""}],"id":14102,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"46630:6:38","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":14104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"46630:30:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14105,"nodeType":"ExpressionStatement","src":"46630:30:38"}]}},{"expression":{"arguments":[{"arguments":[{"id":14113,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"46756:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":14112,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"46748:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14111,"name":"address","nodeType":"ElementaryTypeName","src":"46748:7:38","typeDescriptions":{}}},"id":14114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"46748:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14115,"name":"redeemer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14014,"src":"46763:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14116,"name":"redeemTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14052,"src":"46773:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14108,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"46722:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"id":14110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"46734:13:38","memberName":"preRedeemHook","nodeType":"MemberAccess","referencedDeclaration":9183,"src":"46722:25:38","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":14117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"46722:64:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14118,"nodeType":"ExpressionStatement","src":"46722:64:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":14119,"name":"_getCashPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15425,"src":"46865:13:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":14120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"46865:15:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":14121,"name":"totalReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15566,"src":"46883:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"46865:31:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":14123,"name":"redeemAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14055,"src":"46899:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"46865:46:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14129,"nodeType":"IfStatement","src":"46861:114:38","trueBody":{"id":14128,"nodeType":"Block","src":"46913:62:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14125,"name":"RedeemTransferOutNotPossible","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9589,"src":"46934:28:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"46934:30:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14127,"nodeType":"RevertStatement","src":"46927:37:38"}]}},{"expression":{"id":14134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14130,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15569,"src":"47293:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14131,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15569,"src":"47307:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":14132,"name":"redeemTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14052,"src":"47321:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"47307:26:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"47293:40:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14135,"nodeType":"ExpressionStatement","src":"47293:40:38"},{"assignments":[14137],"declarations":[{"constant":false,"id":14137,"mutability":"mutable","name":"balanceAfter","nameLocation":"47351:12:38","nodeType":"VariableDeclaration","scope":14183,"src":"47343:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14136,"name":"uint256","nodeType":"ElementaryTypeName","src":"47343:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14143,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":14138,"name":"accountTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15576,"src":"47366:13:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":14140,"indexExpression":{"id":14139,"name":"redeemer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14014,"src":"47380:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"47366:23:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":14141,"name":"redeemTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14052,"src":"47392:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"47366:38:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"47343:61:38"},{"expression":{"id":14148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":14144,"name":"accountTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15576,"src":"47414:13:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":14146,"indexExpression":{"id":14145,"name":"redeemer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14014,"src":"47428:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"47414:23:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14147,"name":"balanceAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14137,"src":"47440:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"47414:38:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14149,"nodeType":"ExpressionStatement","src":"47414:38:38"},{"expression":{"arguments":[{"id":14151,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14016,"src":"47750:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14152,"name":"redeemAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14055,"src":"47760:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14150,"name":"_doTransferOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15080,"src":"47735:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":14153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"47735:38:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14154,"nodeType":"ExpressionStatement","src":"47735:38:38"},{"eventCall":{"arguments":[{"id":14156,"name":"redeemer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14014,"src":"47857:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":14159,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"47875:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":14158,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"47867:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14157,"name":"address","nodeType":"ElementaryTypeName","src":"47867:7:38","typeDescriptions":{}}},"id":14160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"47867:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14161,"name":"redeemTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14052,"src":"47882:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14155,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15774,"src":"47848:8:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":14162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"47848:47:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14163,"nodeType":"EmitStatement","src":"47843:52:38"},{"eventCall":{"arguments":[{"id":14165,"name":"redeemer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14014,"src":"47917:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14166,"name":"redeemAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14055,"src":"47927:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14167,"name":"redeemTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14052,"src":"47941:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14168,"name":"balanceAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14137,"src":"47955:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14164,"name":"Redeem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15646,"src":"47910:6:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256,uint256)"}},"id":14169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"47910:58:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14170,"nodeType":"EmitStatement","src":"47905:63:38"},{"expression":{"arguments":[{"arguments":[{"id":14176,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"48077:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":14175,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"48069:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14174,"name":"address","nodeType":"ElementaryTypeName","src":"48069:7:38","typeDescriptions":{}}},"id":14177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48069:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14178,"name":"redeemer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14014,"src":"48084:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14179,"name":"redeemAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14055,"src":"48094:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14180,"name":"redeemTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14052,"src":"48108:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14171,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"48044:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"id":14173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"48056:12:38","memberName":"redeemVerify","nodeType":"MemberAccess","referencedDeclaration":9254,"src":"48044:24:38","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256) external"}},"id":14181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48044:77:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14182,"nodeType":"ExpressionStatement","src":"48044:77:38"}]},"documentation":{"id":14012,"nodeType":"StructuredDocumentation","src":"44200:840:38","text":" @notice Redeemer redeems vTokens in exchange for the underlying assets, transferred to the receiver. Redeemer and receiver can be the same\n   address, or different addresses if the receiver was previously approved by the redeemer as a valid delegate (see Comptroller.updateDelegate)\n @dev Assumes interest has already been accrued up to the current slot(block or second)\n @param redeemer The address of the account which is redeeming the tokens\n @param receiver The receiver of the underlying tokens\n @param redeemTokensIn The number of vTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be non-zero)\n @param redeemAmountIn The number of underlying tokens to receive from redeeming vTokens (only one of redeemTokensIn or redeemAmountIn may be non-zero)"},"id":14184,"implemented":true,"kind":"function","modifiers":[],"name":"_redeemFresh","nameLocation":"45054:12:38","nodeType":"FunctionDefinition","parameters":{"id":14021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14014,"mutability":"mutable","name":"redeemer","nameLocation":"45075:8:38","nodeType":"VariableDeclaration","scope":14184,"src":"45067:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14013,"name":"address","nodeType":"ElementaryTypeName","src":"45067:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14016,"mutability":"mutable","name":"receiver","nameLocation":"45093:8:38","nodeType":"VariableDeclaration","scope":14184,"src":"45085:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14015,"name":"address","nodeType":"ElementaryTypeName","src":"45085:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14018,"mutability":"mutable","name":"redeemTokensIn","nameLocation":"45111:14:38","nodeType":"VariableDeclaration","scope":14184,"src":"45103:22:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14017,"name":"uint256","nodeType":"ElementaryTypeName","src":"45103:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14020,"mutability":"mutable","name":"redeemAmountIn","nameLocation":"45135:14:38","nodeType":"VariableDeclaration","scope":14184,"src":"45127:22:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14019,"name":"uint256","nodeType":"ElementaryTypeName","src":"45127:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"45066:84:38"},"returnParameters":{"id":14022,"nodeType":"ParameterList","parameters":[],"src":"45160:0:38"},"scope":15506,"src":"45045:3083:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":14284,"nodeType":"Block","src":"48509:2023:38","statements":[{"expression":{"arguments":[{"arguments":[{"id":14199,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"48594:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":14198,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"48586:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14197,"name":"address","nodeType":"ElementaryTypeName","src":"48586:7:38","typeDescriptions":{}}},"id":14200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48586:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14201,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14187,"src":"48601:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14202,"name":"borrowAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14191,"src":"48611:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14194,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"48560:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"id":14196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"48572:13:38","memberName":"preBorrowHook","nodeType":"MemberAccess","referencedDeclaration":9192,"src":"48560:25:38","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":14203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48560:64:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14204,"nodeType":"ExpressionStatement","src":"48560:64:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14205,"name":"accrualBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15557,"src":"48742:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":14206,"name":"getBlockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16298,"src":"48764:25:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":14207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48764:27:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"48742:49:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14213,"nodeType":"IfStatement","src":"48738:109:38","trueBody":{"id":14212,"nodeType":"Block","src":"48793:54:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14209,"name":"BorrowFreshnessCheck","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9591,"src":"48814:20:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48814:22:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14211,"nodeType":"RevertStatement","src":"48807:29:38"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":14214,"name":"_getCashPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15425,"src":"48936:13:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":14215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48936:15:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":14216,"name":"totalReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15566,"src":"48954:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"48936:31:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":14218,"name":"borrowAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14191,"src":"48970:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"48936:46:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14224,"nodeType":"IfStatement","src":"48932:108:38","trueBody":{"id":14223,"nodeType":"Block","src":"48984:56:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14220,"name":"BorrowCashNotAvailable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9593,"src":"49005:22:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"49005:24:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14222,"nodeType":"RevertStatement","src":"48998:31:38"}]}},{"assignments":[14226],"declarations":[{"constant":false,"id":14226,"mutability":"mutable","name":"accountBorrowsPrev","nameLocation":"49288:18:38","nodeType":"VariableDeclaration","scope":14284,"src":"49280:26:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14225,"name":"uint256","nodeType":"ElementaryTypeName","src":"49280:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14230,"initialValue":{"arguments":[{"id":14228,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14187,"src":"49330:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14227,"name":"_borrowBalanceStored","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15461,"src":"49309:20:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":14229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"49309:30:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"49280:59:38"},{"assignments":[14232],"declarations":[{"constant":false,"id":14232,"mutability":"mutable","name":"accountBorrowsNew","nameLocation":"49357:17:38","nodeType":"VariableDeclaration","scope":14284,"src":"49349:25:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14231,"name":"uint256","nodeType":"ElementaryTypeName","src":"49349:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14236,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14233,"name":"accountBorrowsPrev","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14226,"src":"49377:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":14234,"name":"borrowAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14191,"src":"49398:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"49377:33:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"49349:61:38"},{"assignments":[14238],"declarations":[{"constant":false,"id":14238,"mutability":"mutable","name":"totalBorrowsNew","nameLocation":"49428:15:38","nodeType":"VariableDeclaration","scope":14284,"src":"49420:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14237,"name":"uint256","nodeType":"ElementaryTypeName","src":"49420:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14242,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14239,"name":"totalBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15563,"src":"49446:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":14240,"name":"borrowAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14191,"src":"49461:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"49446:27:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"49420:53:38"},{"expression":{"id":14248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":14243,"name":"accountBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15587,"src":"49794:14:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$15523_storage_$","typeString":"mapping(address => struct VTokenStorage.BorrowSnapshot storage ref)"}},"id":14245,"indexExpression":{"id":14244,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14187,"src":"49809:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"49794:24:38","typeDescriptions":{"typeIdentifier":"t_struct$_BorrowSnapshot_$15523_storage","typeString":"struct VTokenStorage.BorrowSnapshot storage ref"}},"id":14246,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"49819:9:38","memberName":"principal","nodeType":"MemberAccess","referencedDeclaration":15520,"src":"49794:34:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14247,"name":"accountBorrowsNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14232,"src":"49831:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"49794:54:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14249,"nodeType":"ExpressionStatement","src":"49794:54:38"},{"expression":{"id":14255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":14250,"name":"accountBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15587,"src":"49858:14:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$15523_storage_$","typeString":"mapping(address => struct VTokenStorage.BorrowSnapshot storage ref)"}},"id":14252,"indexExpression":{"id":14251,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14187,"src":"49873:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"49858:24:38","typeDescriptions":{"typeIdentifier":"t_struct$_BorrowSnapshot_$15523_storage","typeString":"struct VTokenStorage.BorrowSnapshot storage ref"}},"id":14253,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"49883:13:38","memberName":"interestIndex","nodeType":"MemberAccess","referencedDeclaration":15522,"src":"49858:38:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14254,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15560,"src":"49899:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"49858:52:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14256,"nodeType":"ExpressionStatement","src":"49858:52:38"},{"expression":{"id":14259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14257,"name":"totalBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15563,"src":"49920:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14258,"name":"totalBorrowsNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14238,"src":"49935:15:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"49920:30:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14260,"nodeType":"ExpressionStatement","src":"49920:30:38"},{"expression":{"arguments":[{"id":14262,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14189,"src":"50244:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14263,"name":"borrowAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14191,"src":"50254:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14261,"name":"_doTransferOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15080,"src":"50229:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":14264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"50229:38:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14265,"nodeType":"ExpressionStatement","src":"50229:38:38"},{"eventCall":{"arguments":[{"id":14267,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14187,"src":"50327:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14268,"name":"borrowAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14191,"src":"50337:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14269,"name":"accountBorrowsNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14232,"src":"50351:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14270,"name":"totalBorrowsNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14238,"src":"50370:15:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14266,"name":"Borrow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15657,"src":"50320:6:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256,uint256)"}},"id":14271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"50320:66:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14272,"nodeType":"EmitStatement","src":"50315:71:38"},{"expression":{"arguments":[{"arguments":[{"id":14278,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"50495:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":14277,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"50487:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14276,"name":"address","nodeType":"ElementaryTypeName","src":"50487:7:38","typeDescriptions":{}}},"id":14279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"50487:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14280,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14187,"src":"50502:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14281,"name":"borrowAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14191,"src":"50512:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14273,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"50462:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"id":14275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"50474:12:38","memberName":"borrowVerify","nodeType":"MemberAccess","referencedDeclaration":9232,"src":"50462:24:38","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":14282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"50462:63:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14283,"nodeType":"ExpressionStatement","src":"50462:63:38"}]},"documentation":{"id":14185,"nodeType":"StructuredDocumentation","src":"48134:281:38","text":" @notice Users or their delegates borrow assets from the protocol\n @param borrower User who borrows the assets\n @param receiver The receiver of the tokens, if called by a delegate\n @param borrowAmount The amount of the underlying asset to borrow"},"id":14285,"implemented":true,"kind":"function","modifiers":[],"name":"_borrowFresh","nameLocation":"48429:12:38","nodeType":"FunctionDefinition","parameters":{"id":14192,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14187,"mutability":"mutable","name":"borrower","nameLocation":"48450:8:38","nodeType":"VariableDeclaration","scope":14285,"src":"48442:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14186,"name":"address","nodeType":"ElementaryTypeName","src":"48442:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14189,"mutability":"mutable","name":"receiver","nameLocation":"48468:8:38","nodeType":"VariableDeclaration","scope":14285,"src":"48460:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14188,"name":"address","nodeType":"ElementaryTypeName","src":"48460:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14191,"mutability":"mutable","name":"borrowAmount","nameLocation":"48486:12:38","nodeType":"VariableDeclaration","scope":14285,"src":"48478:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14190,"name":"uint256","nodeType":"ElementaryTypeName","src":"48478:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"48441:58:38"},"returnParameters":{"id":14193,"nodeType":"ParameterList","parameters":[],"src":"48509:0:38"},"scope":15506,"src":"48420:2112:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":14391,"nodeType":"Block","src":"51034:2105:38","statements":[{"expression":{"arguments":[{"arguments":[{"id":14302,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"51123:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":14301,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"51115:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14300,"name":"address","nodeType":"ElementaryTypeName","src":"51115:7:38","typeDescriptions":{}}},"id":14303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51115:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14304,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14290,"src":"51130:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14297,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"51090:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"id":14299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"51102:12:38","memberName":"preRepayHook","nodeType":"MemberAccess","referencedDeclaration":9199,"src":"51090:24:38","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":14305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51090:49:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14306,"nodeType":"ExpressionStatement","src":"51090:49:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14307,"name":"accrualBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15557,"src":"51257:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":14308,"name":"getBlockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16298,"src":"51279:25:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":14309,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51279:27:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"51257:49:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14315,"nodeType":"IfStatement","src":"51253:114:38","trueBody":{"id":14314,"nodeType":"Block","src":"51308:59:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14311,"name":"RepayBorrowFreshnessCheck","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9597,"src":"51329:25:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51329:27:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14313,"nodeType":"RevertStatement","src":"51322:34:38"}]}},{"assignments":[14317],"declarations":[{"constant":false,"id":14317,"mutability":"mutable","name":"accountBorrowsPrev","nameLocation":"51464:18:38","nodeType":"VariableDeclaration","scope":14391,"src":"51456:26:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14316,"name":"uint256","nodeType":"ElementaryTypeName","src":"51456:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14321,"initialValue":{"arguments":[{"id":14319,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14290,"src":"51506:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14318,"name":"_borrowBalanceStored","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15461,"src":"51485:20:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":14320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51485:30:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"51456:59:38"},{"assignments":[14323],"declarations":[{"constant":false,"id":14323,"mutability":"mutable","name":"repayAmountFinal","nameLocation":"51534:16:38","nodeType":"VariableDeclaration","scope":14391,"src":"51526:24:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14322,"name":"uint256","nodeType":"ElementaryTypeName","src":"51526:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14330,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14324,"name":"repayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14292,"src":"51553:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":14325,"name":"accountBorrowsPrev","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14317,"src":"51568:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"51553:33:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":14328,"name":"repayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14292,"src":"51610:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"51553:68:38","trueExpression":{"id":14327,"name":"accountBorrowsPrev","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14317,"src":"51589:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"51526:95:38"},{"assignments":[14332],"declarations":[{"constant":false,"id":14332,"mutability":"mutable","name":"actualRepayAmount","nameLocation":"52105:17:38","nodeType":"VariableDeclaration","scope":14391,"src":"52097:25:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14331,"name":"uint256","nodeType":"ElementaryTypeName","src":"52097:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14337,"initialValue":{"arguments":[{"id":14334,"name":"payer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14288,"src":"52139:5:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14335,"name":"repayAmountFinal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14323,"src":"52146:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14333,"name":"_doTransferIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15057,"src":"52125:13:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,uint256) returns (uint256)"}},"id":14336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"52125:38:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"52097:66:38"},{"assignments":[14339],"declarations":[{"constant":false,"id":14339,"mutability":"mutable","name":"accountBorrowsNew","nameLocation":"52425:17:38","nodeType":"VariableDeclaration","scope":14391,"src":"52417:25:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14338,"name":"uint256","nodeType":"ElementaryTypeName","src":"52417:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14343,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14340,"name":"accountBorrowsPrev","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14317,"src":"52445:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":14341,"name":"actualRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14332,"src":"52466:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"52445:38:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"52417:66:38"},{"assignments":[14345],"declarations":[{"constant":false,"id":14345,"mutability":"mutable","name":"totalBorrowsNew","nameLocation":"52501:15:38","nodeType":"VariableDeclaration","scope":14391,"src":"52493:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14344,"name":"uint256","nodeType":"ElementaryTypeName","src":"52493:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14349,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14346,"name":"totalBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15563,"src":"52519:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":14347,"name":"actualRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14332,"src":"52534:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"52519:32:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"52493:58:38"},{"expression":{"id":14355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":14350,"name":"accountBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15587,"src":"52631:14:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$15523_storage_$","typeString":"mapping(address => struct VTokenStorage.BorrowSnapshot storage ref)"}},"id":14352,"indexExpression":{"id":14351,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14290,"src":"52646:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"52631:24:38","typeDescriptions":{"typeIdentifier":"t_struct$_BorrowSnapshot_$15523_storage","typeString":"struct VTokenStorage.BorrowSnapshot storage ref"}},"id":14353,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"52656:9:38","memberName":"principal","nodeType":"MemberAccess","referencedDeclaration":15520,"src":"52631:34:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14354,"name":"accountBorrowsNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14339,"src":"52668:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"52631:54:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14356,"nodeType":"ExpressionStatement","src":"52631:54:38"},{"expression":{"id":14362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":14357,"name":"accountBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15587,"src":"52695:14:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$15523_storage_$","typeString":"mapping(address => struct VTokenStorage.BorrowSnapshot storage ref)"}},"id":14359,"indexExpression":{"id":14358,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14290,"src":"52710:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"52695:24:38","typeDescriptions":{"typeIdentifier":"t_struct$_BorrowSnapshot_$15523_storage","typeString":"struct VTokenStorage.BorrowSnapshot storage ref"}},"id":14360,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"52720:13:38","memberName":"interestIndex","nodeType":"MemberAccess","referencedDeclaration":15522,"src":"52695:38:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14361,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15560,"src":"52736:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"52695:52:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14363,"nodeType":"ExpressionStatement","src":"52695:52:38"},{"expression":{"id":14366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14364,"name":"totalBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15563,"src":"52757:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14365,"name":"totalBorrowsNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14345,"src":"52772:15:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"52757:30:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14367,"nodeType":"ExpressionStatement","src":"52757:30:38"},{"eventCall":{"arguments":[{"id":14369,"name":"payer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14288,"src":"52857:5:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14370,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14290,"src":"52864:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14371,"name":"actualRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14332,"src":"52874:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14372,"name":"accountBorrowsNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14339,"src":"52893:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14373,"name":"totalBorrowsNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14345,"src":"52912:15:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14368,"name":"RepayBorrow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15670,"src":"52845:11:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256,uint256)"}},"id":14374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"52845:83:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14375,"nodeType":"EmitStatement","src":"52840:88:38"},{"expression":{"arguments":[{"arguments":[{"id":14381,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"53042:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":14380,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"53034:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14379,"name":"address","nodeType":"ElementaryTypeName","src":"53034:7:38","typeDescriptions":{}}},"id":14382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"53034:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14383,"name":"payer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14288,"src":"53049:5:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14384,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14290,"src":"53056:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14385,"name":"actualRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14332,"src":"53066:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14386,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15560,"src":"53085:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14376,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"53004:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"id":14378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"53016:17:38","memberName":"repayBorrowVerify","nodeType":"MemberAccess","referencedDeclaration":9267,"src":"53004:29:38","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256,uint256) external"}},"id":14387,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"53004:93:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14388,"nodeType":"ExpressionStatement","src":"53004:93:38"},{"expression":{"id":14389,"name":"actualRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14332,"src":"53115:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14296,"id":14390,"nodeType":"Return","src":"53108:24:38"}]},"documentation":{"id":14286,"nodeType":"StructuredDocumentation","src":"50538:383:38","text":" @notice Borrows are repaid by another user (possibly the borrower).\n @param payer the account paying off the borrow\n @param borrower the account with the debt being payed off\n @param repayAmount the amount of underlying tokens being returned, or type(uint256).max for the full outstanding amount\n @return (uint) the actual repayment amount."},"id":14392,"implemented":true,"kind":"function","modifiers":[],"name":"_repayBorrowFresh","nameLocation":"50935:17:38","nodeType":"FunctionDefinition","parameters":{"id":14293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14288,"mutability":"mutable","name":"payer","nameLocation":"50961:5:38","nodeType":"VariableDeclaration","scope":14392,"src":"50953:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14287,"name":"address","nodeType":"ElementaryTypeName","src":"50953:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14290,"mutability":"mutable","name":"borrower","nameLocation":"50976:8:38","nodeType":"VariableDeclaration","scope":14392,"src":"50968:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14289,"name":"address","nodeType":"ElementaryTypeName","src":"50968:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14292,"mutability":"mutable","name":"repayAmount","nameLocation":"50994:11:38","nodeType":"VariableDeclaration","scope":14392,"src":"50986:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14291,"name":"uint256","nodeType":"ElementaryTypeName","src":"50986:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"50952:54:38"},"returnParameters":{"id":14296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14295,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14392,"src":"51025:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14294,"name":"uint256","nodeType":"ElementaryTypeName","src":"51025:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"51024:9:38"},"scope":15506,"src":"50926:2213:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":14435,"nodeType":"Block","src":"53955:431:38","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14409,"name":"accrueInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13910,"src":"53965:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_uint256_$","typeString":"function () returns (uint256)"}},"id":14410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"53965:16:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14411,"nodeType":"ExpressionStatement","src":"53965:16:38"},{"assignments":[14413],"declarations":[{"constant":false,"id":14413,"mutability":"mutable","name":"error","nameLocation":"54000:5:38","nodeType":"VariableDeclaration","scope":14435,"src":"53992:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14412,"name":"uint256","nodeType":"ElementaryTypeName","src":"53992:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14417,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":14414,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14402,"src":"54008:16:38","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}},"id":14415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"54025:14:38","memberName":"accrueInterest","nodeType":"MemberAccess","referencedDeclaration":15962,"src":"54008:31:38","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$_t_uint256_$","typeString":"function () external returns (uint256)"}},"id":14416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54008:33:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"53992:49:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14418,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14413,"src":"54055:5:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":14419,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"54064:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"54055:17:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14426,"nodeType":"IfStatement","src":"54051:224:38","trueBody":{"id":14425,"nodeType":"Block","src":"54074:201:38","statements":[{"errorCall":{"arguments":[{"id":14422,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14413,"src":"54258:5:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14421,"name":"LiquidateAccrueCollateralInterestFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9609,"src":"54218:39:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":14423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54218:46:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14424,"nodeType":"RevertStatement","src":"54211:53:38"}]}},{"expression":{"arguments":[{"id":14428,"name":"liquidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14395,"src":"54307:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14429,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14397,"src":"54319:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14430,"name":"repayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14399,"src":"54329:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14431,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14402,"src":"54342:16:38","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}},{"id":14432,"name":"skipLiquidityCheck","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14404,"src":"54360:18:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":14427,"name":"_liquidateBorrowFresh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14616,"src":"54285:21:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_contract$_VTokenInterface_$16106_$_t_bool_$returns$__$","typeString":"function (address,address,uint256,contract VTokenInterface,bool)"}},"id":14433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54285:94:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14434,"nodeType":"ExpressionStatement","src":"54285:94:38"}]},"documentation":{"id":14393,"nodeType":"StructuredDocumentation","src":"53145:593:38","text":" @notice The sender liquidates the borrowers collateral.\n  The collateral seized is transferred to the liquidator.\n @param liquidator The address repaying the borrow and seizing collateral\n @param borrower The borrower of this vToken to be liquidated\n @param vTokenCollateral The market in which to seize collateral from the borrower\n @param repayAmount The amount of the underlying borrowed asset to repay\n @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\n   regardless of the account liquidity"},"id":14436,"implemented":true,"kind":"function","modifiers":[{"id":14407,"kind":"modifierInvocation","modifierName":{"id":14406,"name":"nonReentrant","nameLocations":["53942:12:38"],"nodeType":"IdentifierPath","referencedDeclaration":12491,"src":"53942:12:38"},"nodeType":"ModifierInvocation","src":"53942:12:38"}],"name":"_liquidateBorrow","nameLocation":"53752:16:38","nodeType":"FunctionDefinition","parameters":{"id":14405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14395,"mutability":"mutable","name":"liquidator","nameLocation":"53786:10:38","nodeType":"VariableDeclaration","scope":14436,"src":"53778:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14394,"name":"address","nodeType":"ElementaryTypeName","src":"53778:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14397,"mutability":"mutable","name":"borrower","nameLocation":"53814:8:38","nodeType":"VariableDeclaration","scope":14436,"src":"53806:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14396,"name":"address","nodeType":"ElementaryTypeName","src":"53806:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14399,"mutability":"mutable","name":"repayAmount","nameLocation":"53840:11:38","nodeType":"VariableDeclaration","scope":14436,"src":"53832:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14398,"name":"uint256","nodeType":"ElementaryTypeName","src":"53832:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14402,"mutability":"mutable","name":"vTokenCollateral","nameLocation":"53877:16:38","nodeType":"VariableDeclaration","scope":14436,"src":"53861:32:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"},"typeName":{"id":14401,"nodeType":"UserDefinedTypeName","pathNode":{"id":14400,"name":"VTokenInterface","nameLocations":["53861:15:38"],"nodeType":"IdentifierPath","referencedDeclaration":16106,"src":"53861:15:38"},"referencedDeclaration":16106,"src":"53861:15:38","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}},"visibility":"internal"},{"constant":false,"id":14404,"mutability":"mutable","name":"skipLiquidityCheck","nameLocation":"53908:18:38","nodeType":"VariableDeclaration","scope":14436,"src":"53903:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14403,"name":"bool","nodeType":"ElementaryTypeName","src":"53903:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"53768:164:38"},"returnParameters":{"id":14408,"nodeType":"ParameterList","parameters":[],"src":"53955:0:38"},"scope":15506,"src":"53743:643:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":14615,"nodeType":"Block","src":"55198:2781:38","statements":[{"expression":{"arguments":[{"arguments":[{"id":14456,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"55302:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":14455,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"55294:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14454,"name":"address","nodeType":"ElementaryTypeName","src":"55294:7:38","typeDescriptions":{}}},"id":14457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55294:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":14460,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14446,"src":"55329:16:38","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}],"id":14459,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"55321:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14458,"name":"address","nodeType":"ElementaryTypeName","src":"55321:7:38","typeDescriptions":{}}},"id":14461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55321:25:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14462,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14441,"src":"55360:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14463,"name":"repayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14443,"src":"55382:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14464,"name":"skipLiquidityCheck","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14448,"src":"55407:18:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14451,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"55252:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"id":14453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"55264:16:38","memberName":"preLiquidateHook","nodeType":"MemberAccess","referencedDeclaration":9212,"src":"55252:28:38","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,address,address,uint256,bool) external"}},"id":14465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55252:183:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14466,"nodeType":"ExpressionStatement","src":"55252:183:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14467,"name":"accrualBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15557,"src":"55553:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":14468,"name":"getBlockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16298,"src":"55575:25:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":14469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55575:27:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"55553:49:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14475,"nodeType":"IfStatement","src":"55549:112:38","trueBody":{"id":14474,"nodeType":"Block","src":"55604:57:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14471,"name":"LiquidateFreshnessCheck","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9603,"src":"55625:23:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55625:25:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14473,"nodeType":"RevertStatement","src":"55618:32:38"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":14476,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14446,"src":"55795:16:38","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}},"id":14477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"55812:18:38","memberName":"accrualBlockNumber","nodeType":"MemberAccess","referencedDeclaration":15557,"src":"55795:35:38","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":14478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55795:37:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":14479,"name":"getBlockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16298,"src":"55836:25:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":14480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55836:27:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"55795:68:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14486,"nodeType":"IfStatement","src":"55791:141:38","trueBody":{"id":14485,"nodeType":"Block","src":"55865:67:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14482,"name":"LiquidateCollateralFreshnessCheck","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9605,"src":"55886:33:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55886:35:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14484,"nodeType":"RevertStatement","src":"55879:42:38"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":14489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14487,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14441,"src":"55990:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":14488,"name":"liquidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14439,"src":"56002:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"55990:22:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14494,"nodeType":"IfStatement","src":"55986:91:38","trueBody":{"id":14493,"nodeType":"Block","src":"56014:63:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14490,"name":"LiquidateLiquidatorIsBorrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9611,"src":"56035:29:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"56035:31:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14492,"nodeType":"RevertStatement","src":"56028:38:38"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14495,"name":"repayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14443,"src":"56129:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":14496,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"56144:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"56129:16:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14502,"nodeType":"IfStatement","src":"56125:82:38","trueBody":{"id":14501,"nodeType":"Block","src":"56147:60:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14498,"name":"LiquidateCloseAmountIsZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9613,"src":"56168:26:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"56168:28:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14500,"nodeType":"RevertStatement","src":"56161:35:38"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14503,"name":"repayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14443,"src":"56275:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":14506,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"56295:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":14505,"name":"uint256","nodeType":"ElementaryTypeName","src":"56295:7:38","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":14504,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"56290:4:38","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14507,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"56290:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":14508,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"56304:3:38","memberName":"max","nodeType":"MemberAccess","src":"56290:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"56275:32:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14514,"nodeType":"IfStatement","src":"56271:101:38","trueBody":{"id":14513,"nodeType":"Block","src":"56309:63:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14510,"name":"LiquidateCloseAmountIsUintMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9615,"src":"56330:29:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"56330:31:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14512,"nodeType":"RevertStatement","src":"56323:38:38"}]}},{"assignments":[14516],"declarations":[{"constant":false,"id":14516,"mutability":"mutable","name":"actualRepayAmount","nameLocation":"56430:17:38","nodeType":"VariableDeclaration","scope":14615,"src":"56422:25:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14515,"name":"uint256","nodeType":"ElementaryTypeName","src":"56422:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14522,"initialValue":{"arguments":[{"id":14518,"name":"liquidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14439,"src":"56468:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14519,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14441,"src":"56480:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14520,"name":"repayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14443,"src":"56490:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14517,"name":"_repayBorrowFresh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14392,"src":"56450:17:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,address,uint256) returns (uint256)"}},"id":14521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"56450:52:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"56422:80:38"},{"assignments":[14524,14526],"declarations":[{"constant":false,"id":14524,"mutability":"mutable","name":"amountSeizeError","nameLocation":"56718:16:38","nodeType":"VariableDeclaration","scope":14615,"src":"56710:24:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14523,"name":"uint256","nodeType":"ElementaryTypeName","src":"56710:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14526,"mutability":"mutable","name":"seizeTokens","nameLocation":"56744:11:38","nodeType":"VariableDeclaration","scope":14615,"src":"56736:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14525,"name":"uint256","nodeType":"ElementaryTypeName","src":"56736:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14539,"initialValue":{"arguments":[{"arguments":[{"id":14531,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"56822:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":14530,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"56814:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14529,"name":"address","nodeType":"ElementaryTypeName","src":"56814:7:38","typeDescriptions":{}}},"id":14532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"56814:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":14535,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14446,"src":"56849:16:38","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}],"id":14534,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"56841:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14533,"name":"address","nodeType":"ElementaryTypeName","src":"56841:7:38","typeDescriptions":{}}},"id":14536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"56841:25:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14537,"name":"actualRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14516,"src":"56880:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14527,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"56759:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"id":14528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"56771:29:38","memberName":"liquidateCalculateSeizeTokens","nodeType":"MemberAccess","referencedDeclaration":9335,"src":"56759:41:38","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,address,uint256) view external returns (uint256,uint256)"}},"id":14538,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"56759:148:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"56709:198:38"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14541,"name":"amountSeizeError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14524,"src":"56925:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":14542,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"56945:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"56925:28:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f414d4f554e545f5345495a455f4641494c4544","id":14544,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"56955:53:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_b1c7e90880e9fbdf9aa93d626a842fbb127521a1492c295dbd98c98157e1e4f7","typeString":"literal_string \"LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED\""},"value":"LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b1c7e90880e9fbdf9aa93d626a842fbb127521a1492c295dbd98c98157e1e4f7","typeString":"literal_string \"LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED\""}],"id":14540,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"56917:7:38","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":14545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"56917:92:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14546,"nodeType":"ExpressionStatement","src":"56917:92:38"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":14550,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14441,"src":"57127:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14548,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14446,"src":"57100:16:38","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}},"id":14549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"57117:9:38","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":16056,"src":"57100:26:38","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":14551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57100:36:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":14552,"name":"seizeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14526,"src":"57140:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"57100:51:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c49515549444154455f5345495a455f544f4f5f4d554348","id":14554,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"57153:26:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_bffc2aa76a1b975ca5ba1defccc66ee3d6e80e3f510ac216baa6baef4008863e","typeString":"literal_string \"LIQUIDATE_SEIZE_TOO_MUCH\""},"value":"LIQUIDATE_SEIZE_TOO_MUCH"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bffc2aa76a1b975ca5ba1defccc66ee3d6e80e3f510ac216baa6baef4008863e","typeString":"literal_string \"LIQUIDATE_SEIZE_TOO_MUCH\""}],"id":14547,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"57092:7:38","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":14555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57092:88:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14556,"nodeType":"ExpressionStatement","src":"57092:88:38"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":14565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":14559,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14446,"src":"57323:16:38","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}],"id":14558,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"57315:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14557,"name":"address","nodeType":"ElementaryTypeName","src":"57315:7:38","typeDescriptions":{}}},"id":14560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57315:25:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":14563,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"57352:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":14562,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"57344:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14561,"name":"address","nodeType":"ElementaryTypeName","src":"57344:7:38","typeDescriptions":{}}},"id":14564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57344:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"57315:42:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":14585,"nodeType":"Block","src":"57446:82:38","statements":[{"expression":{"arguments":[{"id":14580,"name":"liquidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14439,"src":"57483:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14581,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14441,"src":"57495:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14582,"name":"seizeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14526,"src":"57505:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14577,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14446,"src":"57460:16:38","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}},"id":14579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"57477:5:38","memberName":"seize","nodeType":"MemberAccess","referencedDeclaration":15937,"src":"57460:22:38","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":14583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57460:57:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14584,"nodeType":"ExpressionStatement","src":"57460:57:38"}]},"id":14586,"nodeType":"IfStatement","src":"57311:217:38","trueBody":{"id":14576,"nodeType":"Block","src":"57359:81:38","statements":[{"expression":{"arguments":[{"arguments":[{"id":14569,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"57388:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":14568,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"57380:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14567,"name":"address","nodeType":"ElementaryTypeName","src":"57380:7:38","typeDescriptions":{}}},"id":14570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57380:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14571,"name":"liquidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14439,"src":"57395:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14572,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14441,"src":"57407:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14573,"name":"seizeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14526,"src":"57417:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14566,"name":"_seize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14769,"src":"57373:6:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":14574,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57373:56:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14575,"nodeType":"ExpressionStatement","src":"57373:56:38"}]}},{"eventCall":{"arguments":[{"id":14588,"name":"liquidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14439,"src":"57605:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14589,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14441,"src":"57617:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14590,"name":"actualRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14516,"src":"57627:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":14593,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14446,"src":"57654:16:38","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}],"id":14592,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"57646:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14591,"name":"address","nodeType":"ElementaryTypeName","src":"57646:7:38","typeDescriptions":{}}},"id":14594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57646:25:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14595,"name":"seizeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14526,"src":"57673:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14587,"name":"LiquidateBorrow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15701,"src":"57589:15:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,address,uint256)"}},"id":14596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57589:96:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14597,"nodeType":"EmitStatement","src":"57584:101:38"},{"expression":{"arguments":[{"arguments":[{"id":14603,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"57816:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":14602,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"57808:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14601,"name":"address","nodeType":"ElementaryTypeName","src":"57808:7:38","typeDescriptions":{}}},"id":14604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57808:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":14607,"name":"vTokenCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14446,"src":"57843:16:38","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}],"id":14606,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"57835:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14605,"name":"address","nodeType":"ElementaryTypeName","src":"57835:7:38","typeDescriptions":{}}},"id":14608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57835:25:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14609,"name":"liquidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14439,"src":"57874:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14610,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14441,"src":"57898:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14611,"name":"actualRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14516,"src":"57920:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14612,"name":"seizeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14526,"src":"57951:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14598,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"57761:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"id":14600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"57773:21:38","memberName":"liquidateBorrowVerify","nodeType":"MemberAccess","referencedDeclaration":9282,"src":"57761:33:38","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,address,address,uint256,uint256) external"}},"id":14613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57761:211:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14614,"nodeType":"ExpressionStatement","src":"57761:211:38"}]},"documentation":{"id":14437,"nodeType":"StructuredDocumentation","src":"54392:597:38","text":" @notice The liquidator liquidates the borrowers collateral.\n  The collateral seized is transferred to the liquidator.\n @param liquidator The address repaying the borrow and seizing collateral\n @param borrower The borrower of this vToken to be liquidated\n @param vTokenCollateral The market in which to seize collateral from the borrower\n @param repayAmount The amount of the underlying borrowed asset to repay\n @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\n   regardless of the account liquidity"},"id":14616,"implemented":true,"kind":"function","modifiers":[],"name":"_liquidateBorrowFresh","nameLocation":"55003:21:38","nodeType":"FunctionDefinition","parameters":{"id":14449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14439,"mutability":"mutable","name":"liquidator","nameLocation":"55042:10:38","nodeType":"VariableDeclaration","scope":14616,"src":"55034:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14438,"name":"address","nodeType":"ElementaryTypeName","src":"55034:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14441,"mutability":"mutable","name":"borrower","nameLocation":"55070:8:38","nodeType":"VariableDeclaration","scope":14616,"src":"55062:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14440,"name":"address","nodeType":"ElementaryTypeName","src":"55062:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14443,"mutability":"mutable","name":"repayAmount","nameLocation":"55096:11:38","nodeType":"VariableDeclaration","scope":14616,"src":"55088:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14442,"name":"uint256","nodeType":"ElementaryTypeName","src":"55088:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14446,"mutability":"mutable","name":"vTokenCollateral","nameLocation":"55133:16:38","nodeType":"VariableDeclaration","scope":14616,"src":"55117:32:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"},"typeName":{"id":14445,"nodeType":"UserDefinedTypeName","pathNode":{"id":14444,"name":"VTokenInterface","nameLocations":["55117:15:38"],"nodeType":"IdentifierPath","referencedDeclaration":16106,"src":"55117:15:38"},"referencedDeclaration":16106,"src":"55117:15:38","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}},"visibility":"internal"},{"constant":false,"id":14448,"mutability":"mutable","name":"skipLiquidityCheck","nameLocation":"55164:18:38","nodeType":"VariableDeclaration","scope":14616,"src":"55159:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14447,"name":"bool","nodeType":"ElementaryTypeName","src":"55159:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"55024:164:38"},"returnParameters":{"id":14450,"nodeType":"ParameterList","parameters":[],"src":"55198:0:38"},"scope":15506,"src":"54994:2985:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":14768,"nodeType":"Block","src":"58684:2469:38","statements":[{"expression":{"arguments":[{"arguments":[{"id":14633,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"58767:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":14632,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"58759:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14631,"name":"address","nodeType":"ElementaryTypeName","src":"58759:7:38","typeDescriptions":{}}},"id":14634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"58759:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14635,"name":"seizerContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14619,"src":"58774:14:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14636,"name":"liquidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14621,"src":"58790:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14637,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14623,"src":"58802:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14628,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"58734:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"id":14630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"58746:12:38","memberName":"preSeizeHook","nodeType":"MemberAccess","referencedDeclaration":9223,"src":"58734:24:38","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address,address) external"}},"id":14638,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"58734:77:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14639,"nodeType":"ExpressionStatement","src":"58734:77:38"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":14642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14640,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14623,"src":"58870:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":14641,"name":"liquidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14621,"src":"58882:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"58870:22:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14647,"nodeType":"IfStatement","src":"58866:96:38","trueBody":{"id":14646,"nodeType":"Block","src":"58894:68:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14643,"name":"LiquidateSeizeLiquidatorIsBorrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9617,"src":"58915:34:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"58915:36:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14645,"nodeType":"RevertStatement","src":"58908:43:38"}]}},{"assignments":[14649],"declarations":[{"constant":false,"id":14649,"mutability":"mutable","name":"liquidationIncentiveMantissa","nameLocation":"59250:28:38","nodeType":"VariableDeclaration","scope":14768,"src":"59242:36:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14648,"name":"uint256","nodeType":"ElementaryTypeName","src":"59242:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14658,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":14653,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"59314:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}],"id":14652,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"59306:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14651,"name":"address","nodeType":"ElementaryTypeName","src":"59306:7:38","typeDescriptions":{}}},"id":14654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"59306:20:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14650,"name":"ComptrollerViewInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9431,"src":"59281:24:38","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ComptrollerViewInterface_$9431_$","typeString":"type(contract ComptrollerViewInterface)"}},"id":14655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"59281:46:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerViewInterface_$9431","typeString":"contract ComptrollerViewInterface"}},"id":14656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"59341:28:38","memberName":"liquidationIncentiveMantissa","nodeType":"MemberAccess","referencedDeclaration":9388,"src":"59281:88:38","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":14657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"59281:90:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"59242:129:38"},{"assignments":[14660],"declarations":[{"constant":false,"id":14660,"mutability":"mutable","name":"numerator","nameLocation":"59389:9:38","nodeType":"VariableDeclaration","scope":14768,"src":"59381:17:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14659,"name":"uint256","nodeType":"ElementaryTypeName","src":"59381:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14667,"initialValue":{"arguments":[{"id":14662,"name":"seizeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14625,"src":"59406:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":14664,"name":"protocolSeizeShareMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15590,"src":"59435:26:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14663,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"59419:3:38","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":14665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["59425:8:38"],"names":["mantissa"],"nodeType":"FunctionCall","src":"59419:45:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":14661,"name":"mul_","nodeType":"Identifier","overloadedDeclarations":[9941,9961,9980,10004,10024,10043,10057],"referencedDeclaration":9980,"src":"59401:4:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_struct$_Exp_$9645_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,struct ExponentialNoError.Exp memory) pure returns (uint256)"}},"id":14666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"59401:64:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"59381:84:38"},{"assignments":[14669],"declarations":[{"constant":false,"id":14669,"mutability":"mutable","name":"protocolSeizeTokens","nameLocation":"59483:19:38","nodeType":"VariableDeclaration","scope":14768,"src":"59475:27:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14668,"name":"uint256","nodeType":"ElementaryTypeName","src":"59475:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14676,"initialValue":{"arguments":[{"id":14671,"name":"numerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14660,"src":"59510:9:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":14673,"name":"liquidationIncentiveMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14649,"src":"59537:28:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14672,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"59521:3:38","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":14674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["59527:8:38"],"names":["mantissa"],"nodeType":"FunctionCall","src":"59521:47:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}],"id":14670,"name":"div_","nodeType":"Identifier","overloadedDeclarations":[10082,10102,10122,10147,10167,10187,10201],"referencedDeclaration":10122,"src":"59505:4:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_struct$_Exp_$9645_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,struct ExponentialNoError.Exp memory) pure returns (uint256)"}},"id":14675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"59505:64:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"59475:94:38"},{"assignments":[14678],"declarations":[{"constant":false,"id":14678,"mutability":"mutable","name":"liquidatorSeizeTokens","nameLocation":"59587:21:38","nodeType":"VariableDeclaration","scope":14768,"src":"59579:29:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14677,"name":"uint256","nodeType":"ElementaryTypeName","src":"59579:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14682,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14679,"name":"seizeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14625,"src":"59611:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":14680,"name":"protocolSeizeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14669,"src":"59625:19:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"59611:33:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"59579:65:38"},{"assignments":[14685],"declarations":[{"constant":false,"id":14685,"mutability":"mutable","name":"exchangeRate","nameLocation":"59665:12:38","nodeType":"VariableDeclaration","scope":14768,"src":"59654:23:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp"},"typeName":{"id":14684,"nodeType":"UserDefinedTypeName","pathNode":{"id":14683,"name":"Exp","nameLocations":["59654:3:38"],"nodeType":"IdentifierPath","referencedDeclaration":9645,"src":"59654:3:38"},"referencedDeclaration":9645,"src":"59654:3:38","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_storage_ptr","typeString":"struct ExponentialNoError.Exp"}},"visibility":"internal"}],"id":14690,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":14687,"name":"_exchangeRateStored","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15505,"src":"59696:19:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":14688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"59696:21:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14686,"name":"Exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9645,"src":"59680:3:38","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Exp_$9645_storage_ptr_$","typeString":"type(struct ExponentialNoError.Exp storage pointer)"}},"id":14689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["59686:8:38"],"names":["mantissa"],"nodeType":"FunctionCall","src":"59680:40:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},"nodeType":"VariableDeclarationStatement","src":"59654:66:38"},{"assignments":[14692],"declarations":[{"constant":false,"id":14692,"mutability":"mutable","name":"protocolSeizeAmount","nameLocation":"59738:19:38","nodeType":"VariableDeclaration","scope":14768,"src":"59730:27:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14691,"name":"uint256","nodeType":"ElementaryTypeName","src":"59730:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14697,"initialValue":{"arguments":[{"id":14694,"name":"exchangeRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14685,"src":"59779:12:38","typeDescriptions":{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"}},{"id":14695,"name":"protocolSeizeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14669,"src":"59793:19:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Exp_$9645_memory_ptr","typeString":"struct ExponentialNoError.Exp memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14693,"name":"mul_ScalarTruncate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9701,"src":"59760:18:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Exp_$9645_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct ExponentialNoError.Exp memory,uint256) pure returns (uint256)"}},"id":14696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"59760:53:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"59730:83:38"},{"expression":{"id":14702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14698,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15569,"src":"59999:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14699,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15569,"src":"60013:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":14700,"name":"protocolSeizeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14669,"src":"60027:19:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"60013:33:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"59999:47:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14703,"nodeType":"ExpressionStatement","src":"59999:47:38"},{"expression":{"id":14712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":14704,"name":"accountTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15576,"src":"60056:13:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":14706,"indexExpression":{"id":14705,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14623,"src":"60070:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"60056:23:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":14707,"name":"accountTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15576,"src":"60082:13:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":14709,"indexExpression":{"id":14708,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14623,"src":"60096:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"60082:23:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":14710,"name":"seizeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14625,"src":"60108:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"60082:37:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"60056:63:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14713,"nodeType":"ExpressionStatement","src":"60056:63:38"},{"expression":{"id":14722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":14714,"name":"accountTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15576,"src":"60129:13:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":14716,"indexExpression":{"id":14715,"name":"liquidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14621,"src":"60143:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"60129:25:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":14717,"name":"accountTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15576,"src":"60157:13:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":14719,"indexExpression":{"id":14718,"name":"liquidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14621,"src":"60171:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"60157:25:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":14720,"name":"liquidatorSeizeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14678,"src":"60185:21:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"60157:49:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"60129:77:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14723,"nodeType":"ExpressionStatement","src":"60129:77:38"},{"expression":{"arguments":[{"id":14725,"name":"protocolShareReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15541,"src":"60460:20:38","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":14726,"name":"protocolSeizeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14692,"src":"60482:19:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14724,"name":"_doTransferOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15080,"src":"60445:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":14727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"60445:57:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14728,"nodeType":"ExpressionStatement","src":"60445:57:38"},{"expression":{"arguments":[{"arguments":[{"id":14735,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"60691:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}],"id":14734,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"60683:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14733,"name":"address","nodeType":"ElementaryTypeName","src":"60683:7:38","typeDescriptions":{}}},"id":14736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"60683:20:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14737,"name":"underlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15529,"src":"60717:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"expression":{"id":14738,"name":"IProtocolShareReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16212,"src":"60741:21:38","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolShareReserve_$16212_$","typeString":"type(contract IProtocolShareReserve)"}},"id":14739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"60763:10:38","memberName":"IncomeType","nodeType":"MemberAccess","referencedDeclaration":16201,"src":"60741:32:38","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_IncomeType_$16201_$","typeString":"type(enum IProtocolShareReserve.IncomeType)"}},"id":14740,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"60774:11:38","memberName":"LIQUIDATION","nodeType":"MemberAccess","referencedDeclaration":16200,"src":"60741:44:38","typeDescriptions":{"typeIdentifier":"t_enum$_IncomeType_$16201","typeString":"enum IProtocolShareReserve.IncomeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_IncomeType_$16201","typeString":"enum IProtocolShareReserve.IncomeType"}],"expression":{"arguments":[{"id":14730,"name":"protocolShareReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15541,"src":"60630:20:38","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":14729,"name":"IProtocolShareReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16212,"src":"60608:21:38","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolShareReserve_$16212_$","typeString":"type(contract IProtocolShareReserve)"}},"id":14731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"60608:43:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolShareReserve_$16212","typeString":"contract IProtocolShareReserve"}},"id":14732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"60652:17:38","memberName":"updateAssetsState","nodeType":"MemberAccess","referencedDeclaration":16211,"src":"60608:61:38","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_enum$_IncomeType_$16201_$returns$__$","typeString":"function (address,address,enum IProtocolShareReserve.IncomeType) external"}},"id":14741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"60608:187:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14742,"nodeType":"ExpressionStatement","src":"60608:187:38"},{"eventCall":{"arguments":[{"id":14744,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14623,"src":"60856:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14745,"name":"liquidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14621,"src":"60866:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14746,"name":"liquidatorSeizeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14678,"src":"60878:21:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14743,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15774,"src":"60847:8:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":14747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"60847:53:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14748,"nodeType":"EmitStatement","src":"60842:58:38"},{"eventCall":{"arguments":[{"id":14750,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14623,"src":"60929:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14751,"name":"protocolShareReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15541,"src":"60939:20:38","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":14752,"name":"protocolSeizeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14692,"src":"60961:19:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14749,"name":"ProtocolSeize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15813,"src":"60915:13:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":14753,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"60915:66:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14754,"nodeType":"EmitStatement","src":"60910:71:38"},{"expression":{"arguments":[{"arguments":[{"id":14760,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"61089:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":14759,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"61081:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14758,"name":"address","nodeType":"ElementaryTypeName","src":"61081:7:38","typeDescriptions":{}}},"id":14761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"61081:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14762,"name":"seizerContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14619,"src":"61096:14:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14763,"name":"liquidator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14621,"src":"61112:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14764,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14623,"src":"61124:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14765,"name":"seizeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14625,"src":"61134:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14755,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"61057:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"id":14757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"61069:11:38","memberName":"seizeVerify","nodeType":"MemberAccess","referencedDeclaration":9295,"src":"61057:23:38","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,address,uint256) external"}},"id":14766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"61057:89:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14767,"nodeType":"ExpressionStatement","src":"61057:89:38"}]},"documentation":{"id":14617,"nodeType":"StructuredDocumentation","src":"57985:586:38","text":" @notice Transfers collateral tokens (this market) to the liquidator.\n @dev Called only during an in-kind liquidation, or by liquidateBorrow during the liquidation of another VToken.\n  It's absolutely critical to use msg.sender as the seizer vToken and not a parameter.\n @param seizerContract The contract seizing the collateral (either borrowed vToken or Comptroller)\n @param liquidator The account receiving seized collateral\n @param borrower The account having collateral seized\n @param seizeTokens The number of vTokens to seize"},"id":14769,"implemented":true,"kind":"function","modifiers":[],"name":"_seize","nameLocation":"58585:6:38","nodeType":"FunctionDefinition","parameters":{"id":14626,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14619,"mutability":"mutable","name":"seizerContract","nameLocation":"58600:14:38","nodeType":"VariableDeclaration","scope":14769,"src":"58592:22:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14618,"name":"address","nodeType":"ElementaryTypeName","src":"58592:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14621,"mutability":"mutable","name":"liquidator","nameLocation":"58624:10:38","nodeType":"VariableDeclaration","scope":14769,"src":"58616:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14620,"name":"address","nodeType":"ElementaryTypeName","src":"58616:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14623,"mutability":"mutable","name":"borrower","nameLocation":"58644:8:38","nodeType":"VariableDeclaration","scope":14769,"src":"58636:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14622,"name":"address","nodeType":"ElementaryTypeName","src":"58636:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14625,"mutability":"mutable","name":"seizeTokens","nameLocation":"58662:11:38","nodeType":"VariableDeclaration","scope":14769,"src":"58654:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14624,"name":"uint256","nodeType":"ElementaryTypeName","src":"58654:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"58591:83:38"},"returnParameters":{"id":14627,"nodeType":"ParameterList","parameters":[],"src":"58684:0:38"},"scope":15506,"src":"58576:2577:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":14796,"nodeType":"Block","src":"61230:431:38","statements":[{"assignments":[14777],"declarations":[{"constant":false,"id":14777,"mutability":"mutable","name":"oldComptroller","nameLocation":"61261:14:38","nodeType":"VariableDeclaration","scope":14796,"src":"61240:35:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"},"typeName":{"id":14776,"nodeType":"UserDefinedTypeName","pathNode":{"id":14775,"name":"ComptrollerInterface","nameLocations":["61240:20:38"],"nodeType":"IdentifierPath","referencedDeclaration":9353,"src":"61240:20:38"},"referencedDeclaration":9353,"src":"61240:20:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"visibility":"internal"}],"id":14779,"initialValue":{"id":14778,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"61278:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"nodeType":"VariableDeclarationStatement","src":"61240:49:38"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":14781,"name":"newComptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14772,"src":"61373:14:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"id":14782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"61388:13:38","memberName":"isComptroller","nodeType":"MemberAccess","referencedDeclaration":9322,"src":"61373:28:38","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bool_$","typeString":"function () view external returns (bool)"}},"id":14783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"61373:30:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d61726b6572206d6574686f642072657475726e65642066616c7365","id":14784,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"61405:30:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637","typeString":"literal_string \"marker method returned false\""},"value":"marker method returned false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637","typeString":"literal_string \"marker method returned false\""}],"id":14780,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"61365:7:38","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":14785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"61365:71:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14786,"nodeType":"ExpressionStatement","src":"61365:71:38"},{"expression":{"id":14789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14787,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"61501:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14788,"name":"newComptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14772,"src":"61515:14:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"src":"61501:28:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"id":14790,"nodeType":"ExpressionStatement","src":"61501:28:38"},{"eventCall":{"arguments":[{"id":14792,"name":"oldComptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14777,"src":"61623:14:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},{"id":14793,"name":"newComptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14772,"src":"61639:14:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"},{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}],"id":14791,"name":"NewComptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15710,"src":"61608:14:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_ComptrollerInterface_$9353_$_t_contract$_ComptrollerInterface_$9353_$returns$__$","typeString":"function (contract ComptrollerInterface,contract ComptrollerInterface)"}},"id":14794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"61608:46:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14795,"nodeType":"EmitStatement","src":"61603:51:38"}]},"id":14797,"implemented":true,"kind":"function","modifiers":[],"name":"_setComptroller","nameLocation":"61168:15:38","nodeType":"FunctionDefinition","parameters":{"id":14773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14772,"mutability":"mutable","name":"newComptroller","nameLocation":"61205:14:38","nodeType":"VariableDeclaration","scope":14797,"src":"61184:35:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"},"typeName":{"id":14771,"nodeType":"UserDefinedTypeName","pathNode":{"id":14770,"name":"ComptrollerInterface","nameLocations":["61184:20:38"],"nodeType":"IdentifierPath","referencedDeclaration":9353,"src":"61184:20:38"},"referencedDeclaration":9353,"src":"61184:20:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"visibility":"internal"}],"src":"61183:37:38"},"returnParameters":{"id":14774,"nodeType":"ParameterList","parameters":[],"src":"61230:0:38"},"scope":15506,"src":"61159:502:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":14833,"nodeType":"Block","src":"61981:626:38","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14803,"name":"accrualBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15557,"src":"62095:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":14804,"name":"getBlockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16298,"src":"62117:25:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":14805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"62117:27:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"62095:49:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14811,"nodeType":"IfStatement","src":"62091:115:38","trueBody":{"id":14810,"nodeType":"Block","src":"62146:60:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14807,"name":"SetReserveFactorFreshCheck","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9621,"src":"62167:26:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"62167:28:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14809,"nodeType":"RevertStatement","src":"62160:35:38"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14812,"name":"newReserveFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14800,"src":"62275:24:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":14813,"name":"MAX_RESERVE_FACTOR_MANTISSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12470,"src":"62302:27:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"62275:54:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14819,"nodeType":"IfStatement","src":"62271:121:38","trueBody":{"id":14818,"nodeType":"Block","src":"62331:61:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14815,"name":"SetReserveFactorBoundsCheck","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9623,"src":"62352:27:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14816,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"62352:29:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14817,"nodeType":"RevertStatement","src":"62345:36:38"}]}},{"assignments":[14821],"declarations":[{"constant":false,"id":14821,"mutability":"mutable","name":"oldReserveFactorMantissa","nameLocation":"62410:24:38","nodeType":"VariableDeclaration","scope":14833,"src":"62402:32:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14820,"name":"uint256","nodeType":"ElementaryTypeName","src":"62402:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14823,"initialValue":{"id":14822,"name":"reserveFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15554,"src":"62437:21:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"62402:56:38"},{"expression":{"id":14826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14824,"name":"reserveFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15554,"src":"62468:21:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14825,"name":"newReserveFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14800,"src":"62492:24:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"62468:48:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14827,"nodeType":"ExpressionStatement","src":"62468:48:38"},{"eventCall":{"arguments":[{"id":14829,"name":"oldReserveFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14821,"src":"62549:24:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14830,"name":"newReserveFactorMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14800,"src":"62575:24:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14828,"name":"NewReserveFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15747,"src":"62532:16:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":14831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"62532:68:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14832,"nodeType":"EmitStatement","src":"62527:73:38"}]},"documentation":{"id":14798,"nodeType":"StructuredDocumentation","src":"61667:234:38","text":" @notice Sets a new reserve factor for the protocol (*requires fresh interest accrual)\n @dev Admin function to set a new reserve factor\n @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)"},"id":14834,"implemented":true,"kind":"function","modifiers":[],"name":"_setReserveFactorFresh","nameLocation":"61915:22:38","nodeType":"FunctionDefinition","parameters":{"id":14801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14800,"mutability":"mutable","name":"newReserveFactorMantissa","nameLocation":"61946:24:38","nodeType":"VariableDeclaration","scope":14834,"src":"61938:32:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14799,"name":"uint256","nodeType":"ElementaryTypeName","src":"61938:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"61937:34:38"},"returnParameters":{"id":14802,"nodeType":"ParameterList","parameters":[],"src":"61981:0:38"},"scope":15506,"src":"61906:701:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":14885,"nodeType":"Block","src":"62948:652:38","statements":[{"assignments":[14843],"declarations":[{"constant":false,"id":14843,"mutability":"mutable","name":"totalReservesNew","nameLocation":"63009:16:38","nodeType":"VariableDeclaration","scope":14885,"src":"63001:24:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14842,"name":"uint256","nodeType":"ElementaryTypeName","src":"63001:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14844,"nodeType":"VariableDeclarationStatement","src":"63001:24:38"},{"assignments":[14846],"declarations":[{"constant":false,"id":14846,"mutability":"mutable","name":"actualAddAmount","nameLocation":"63043:15:38","nodeType":"VariableDeclaration","scope":14885,"src":"63035:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14845,"name":"uint256","nodeType":"ElementaryTypeName","src":"63035:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14847,"nodeType":"VariableDeclarationStatement","src":"63035:23:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14848,"name":"accrualBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15557,"src":"63192:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":14849,"name":"getBlockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16298,"src":"63214:25:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":14850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"63214:27:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"63192:49:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14857,"nodeType":"IfStatement","src":"63188:131:38","trueBody":{"id":14856,"nodeType":"Block","src":"63243:76:38","statements":[{"errorCall":{"arguments":[{"id":14853,"name":"actualAddAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14846,"src":"63292:15:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14852,"name":"AddReservesFactorFreshCheck","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9627,"src":"63264:27:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":14854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"63264:44:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14855,"nodeType":"RevertStatement","src":"63257:51:38"}]}},{"expression":{"id":14864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14858,"name":"actualAddAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14846,"src":"63329:15:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14860,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"63361:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"63365:6:38","memberName":"sender","nodeType":"MemberAccess","src":"63361:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14862,"name":"addAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14837,"src":"63373:9:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14859,"name":"_doTransferIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15057,"src":"63347:13:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,uint256) returns (uint256)"}},"id":14863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"63347:36:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"63329:54:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14865,"nodeType":"ExpressionStatement","src":"63329:54:38"},{"expression":{"id":14870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14866,"name":"totalReservesNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14843,"src":"63393:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14867,"name":"totalReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15566,"src":"63412:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":14868,"name":"actualAddAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14846,"src":"63428:15:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"63412:31:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"63393:50:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14871,"nodeType":"ExpressionStatement","src":"63393:50:38"},{"expression":{"id":14874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14872,"name":"totalReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15566,"src":"63453:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14873,"name":"totalReservesNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14843,"src":"63469:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"63453:32:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14875,"nodeType":"ExpressionStatement","src":"63453:32:38"},{"eventCall":{"arguments":[{"expression":{"id":14877,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"63514:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"63518:6:38","memberName":"sender","nodeType":"MemberAccess","src":"63514:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14879,"name":"actualAddAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14846,"src":"63526:15:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14880,"name":"totalReservesNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14843,"src":"63543:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14876,"name":"ReservesAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15756,"src":"63500:13:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":14881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"63500:60:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14882,"nodeType":"EmitStatement","src":"63495:65:38"},{"expression":{"id":14883,"name":"actualAddAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14846,"src":"63578:15:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14841,"id":14884,"nodeType":"Return","src":"63571:22:38"}]},"documentation":{"id":14835,"nodeType":"StructuredDocumentation","src":"62613:257:38","text":" @notice Add reserves by transferring from caller\n @dev Requires fresh interest accrual\n @param addAmount Amount of addition to reserves\n @return actualAddAmount The actual amount added, excluding the potential token fees"},"id":14886,"implemented":true,"kind":"function","modifiers":[],"name":"_addReservesFresh","nameLocation":"62884:17:38","nodeType":"FunctionDefinition","parameters":{"id":14838,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14837,"mutability":"mutable","name":"addAmount","nameLocation":"62910:9:38","nodeType":"VariableDeclaration","scope":14886,"src":"62902:17:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14836,"name":"uint256","nodeType":"ElementaryTypeName","src":"62902:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"62901:19:38"},"returnParameters":{"id":14841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14840,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14886,"src":"62939:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14839,"name":"uint256","nodeType":"ElementaryTypeName","src":"62939:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"62938:9:38"},"scope":15506,"src":"62875:725:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":14962,"nodeType":"Block","src":"63867:1682:38","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14892,"name":"reduceAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14889,"src":"63881:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":14893,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"63897:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"63881:17:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14897,"nodeType":"IfStatement","src":"63877:54:38","trueBody":{"id":14896,"nodeType":"Block","src":"63900:31:38","statements":[{"functionReturnParameters":14891,"id":14895,"nodeType":"Return","src":"63914:7:38"}]}},{"assignments":[14899],"declarations":[{"constant":false,"id":14899,"mutability":"mutable","name":"totalReservesNew","nameLocation":"63988:16:38","nodeType":"VariableDeclaration","scope":14962,"src":"63980:24:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14898,"name":"uint256","nodeType":"ElementaryTypeName","src":"63980:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14900,"nodeType":"VariableDeclarationStatement","src":"63980:24:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14901,"name":"accrualBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15557,"src":"64138:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":14902,"name":"getBlockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16298,"src":"64160:25:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":14903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"64160:27:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"64138:49:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14909,"nodeType":"IfStatement","src":"64134:113:38","trueBody":{"id":14908,"nodeType":"Block","src":"64189:58:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14905,"name":"ReduceReservesFreshCheck","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9629,"src":"64210:24:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"64210:26:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14907,"nodeType":"RevertStatement","src":"64203:33:38"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":14910,"name":"_getCashPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15425,"src":"64333:13:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":14911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"64333:15:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":14912,"name":"reduceAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14889,"src":"64351:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"64333:30:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14918,"nodeType":"IfStatement","src":"64329:100:38","trueBody":{"id":14917,"nodeType":"Block","src":"64365:64:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14914,"name":"ReduceReservesCashNotAvailable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9631,"src":"64386:30:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"64386:32:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14916,"nodeType":"RevertStatement","src":"64379:39:38"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14919,"name":"reduceAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14889,"src":"64505:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":14920,"name":"totalReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15566,"src":"64520:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"64505:28:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14926,"nodeType":"IfStatement","src":"64501:96:38","trueBody":{"id":14925,"nodeType":"Block","src":"64535:62:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14922,"name":"ReduceReservesCashValidation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9633,"src":"64556:28:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14923,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"64556:30:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14924,"nodeType":"RevertStatement","src":"64549:37:38"}]}},{"expression":{"id":14931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14927,"name":"totalReservesNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14899,"src":"64724:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14928,"name":"totalReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15566,"src":"64743:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":14929,"name":"reduceAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14889,"src":"64759:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"64743:28:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"64724:47:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14932,"nodeType":"ExpressionStatement","src":"64724:47:38"},{"expression":{"id":14935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14933,"name":"totalReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15566,"src":"64842:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14934,"name":"totalReservesNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14899,"src":"64858:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"64842:32:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14936,"nodeType":"ExpressionStatement","src":"64842:32:38"},{"expression":{"arguments":[{"id":14938,"name":"protocolShareReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15541,"src":"65128:20:38","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":14939,"name":"reduceAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14889,"src":"65150:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14937,"name":"_doTransferOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15080,"src":"65113:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":14940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"65113:50:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14941,"nodeType":"ExpressionStatement","src":"65113:50:38"},{"expression":{"arguments":[{"arguments":[{"id":14948,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"65352:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}],"id":14947,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"65344:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14946,"name":"address","nodeType":"ElementaryTypeName","src":"65344:7:38","typeDescriptions":{}}},"id":14949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"65344:20:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14950,"name":"underlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15529,"src":"65378:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"expression":{"id":14951,"name":"IProtocolShareReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16212,"src":"65402:21:38","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolShareReserve_$16212_$","typeString":"type(contract IProtocolShareReserve)"}},"id":14952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"65424:10:38","memberName":"IncomeType","nodeType":"MemberAccess","referencedDeclaration":16201,"src":"65402:32:38","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_IncomeType_$16201_$","typeString":"type(enum IProtocolShareReserve.IncomeType)"}},"id":14953,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"65435:6:38","memberName":"SPREAD","nodeType":"MemberAccess","referencedDeclaration":16199,"src":"65402:39:38","typeDescriptions":{"typeIdentifier":"t_enum$_IncomeType_$16201","typeString":"enum IProtocolShareReserve.IncomeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_IncomeType_$16201","typeString":"enum IProtocolShareReserve.IncomeType"}],"expression":{"arguments":[{"id":14943,"name":"protocolShareReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15541,"src":"65291:20:38","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":14942,"name":"IProtocolShareReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16212,"src":"65269:21:38","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolShareReserve_$16212_$","typeString":"type(contract IProtocolShareReserve)"}},"id":14944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"65269:43:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolShareReserve_$16212","typeString":"contract IProtocolShareReserve"}},"id":14945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"65313:17:38","memberName":"updateAssetsState","nodeType":"MemberAccess","referencedDeclaration":16211,"src":"65269:61:38","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_enum$_IncomeType_$16201_$returns$__$","typeString":"function (address,address,enum IProtocolShareReserve.IncomeType) external"}},"id":14954,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"65269:182:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14955,"nodeType":"ExpressionStatement","src":"65269:182:38"},{"eventCall":{"arguments":[{"id":14957,"name":"protocolShareReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15541,"src":"65489:20:38","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":14958,"name":"reduceAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14889,"src":"65511:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14959,"name":"totalReservesNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14899,"src":"65525:16:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14956,"name":"SpreadReservesReduced","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15765,"src":"65467:21:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":14960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"65467:75:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14961,"nodeType":"EmitStatement","src":"65462:80:38"}]},"documentation":{"id":14887,"nodeType":"StructuredDocumentation","src":"63606:195:38","text":" @notice Reduces reserves by transferring to the protocol reserve contract\n @dev Requires fresh interest accrual\n @param reduceAmount Amount of reduction to reserves"},"id":14963,"implemented":true,"kind":"function","modifiers":[],"name":"_reduceReservesFresh","nameLocation":"63815:20:38","nodeType":"FunctionDefinition","parameters":{"id":14890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14889,"mutability":"mutable","name":"reduceAmount","nameLocation":"63844:12:38","nodeType":"VariableDeclaration","scope":14963,"src":"63836:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14888,"name":"uint256","nodeType":"ElementaryTypeName","src":"63836:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"63835:22:38"},"returnParameters":{"id":14891,"nodeType":"ParameterList","parameters":[],"src":"63867:0:38"},"scope":15506,"src":"63806:1743:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15003,"nodeType":"Block","src":"65869:957:38","statements":[{"assignments":[14972],"declarations":[{"constant":false,"id":14972,"mutability":"mutable","name":"oldInterestRateModel","nameLocation":"65980:20:38","nodeType":"VariableDeclaration","scope":15003,"src":"65962:38:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"},"typeName":{"id":14971,"nodeType":"UserDefinedTypeName","pathNode":{"id":14970,"name":"InterestRateModel","nameLocations":["65962:17:38"],"nodeType":"IdentifierPath","referencedDeclaration":10266,"src":"65962:17:38"},"referencedDeclaration":10266,"src":"65962:17:38","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},"visibility":"internal"}],"id":14973,"nodeType":"VariableDeclarationStatement","src":"65962:38:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14974,"name":"accrualBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15557,"src":"66134:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":14975,"name":"getBlockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16298,"src":"66156:25:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":14976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"66156:27:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"66134:49:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14982,"nodeType":"IfStatement","src":"66130:119:38","trueBody":{"id":14981,"nodeType":"Block","src":"66185:64:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14978,"name":"SetInterestRateModelFreshCheck","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9635,"src":"66206:30:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"66206:32:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14980,"nodeType":"RevertStatement","src":"66199:39:38"}]}},{"expression":{"id":14985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14983,"name":"oldInterestRateModel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14972,"src":"66317:20:38","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14984,"name":"interestRateModel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15549,"src":"66340:17:38","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},"src":"66317:40:38","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},"id":14986,"nodeType":"ExpressionStatement","src":"66317:40:38"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":14988,"name":"newInterestRateModel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14967,"src":"66457:20:38","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},"id":14989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"66478:19:38","memberName":"isInterestRateModel","nodeType":"MemberAccess","referencedDeclaration":10265,"src":"66457:40:38","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_bool_$","typeString":"function () pure external returns (bool)"}},"id":14990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"66457:42:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d61726b6572206d6574686f642072657475726e65642066616c7365","id":14991,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"66501:30:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637","typeString":"literal_string \"marker method returned false\""},"value":"marker method returned false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637","typeString":"literal_string \"marker method returned false\""}],"id":14987,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"66449:7:38","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":14992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"66449:83:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14993,"nodeType":"ExpressionStatement","src":"66449:83:38"},{"expression":{"id":14996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14994,"name":"interestRateModel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15549,"src":"66606:17:38","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14995,"name":"newInterestRateModel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14967,"src":"66626:20:38","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},"src":"66606:40:38","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},"id":14997,"nodeType":"ExpressionStatement","src":"66606:40:38"},{"eventCall":{"arguments":[{"id":14999,"name":"oldInterestRateModel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14972,"src":"66776:20:38","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},{"id":15000,"name":"newInterestRateModel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14967,"src":"66798:20:38","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"},{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}],"id":14998,"name":"NewMarketInterestRateModel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15733,"src":"66749:26:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_InterestRateModel_$10266_$_t_contract$_InterestRateModel_$10266_$returns$__$","typeString":"function (contract InterestRateModel,contract InterestRateModel)"}},"id":15001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"66749:70:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15002,"nodeType":"EmitStatement","src":"66744:75:38"}]},"documentation":{"id":14964,"nodeType":"StructuredDocumentation","src":"65555:224:38","text":" @notice updates the interest rate model (*requires fresh interest accrual)\n @dev Admin function to update the interest rate model\n @param newInterestRateModel the new interest rate model to use"},"id":15004,"implemented":true,"kind":"function","modifiers":[],"name":"_setInterestRateModelFresh","nameLocation":"65793:26:38","nodeType":"FunctionDefinition","parameters":{"id":14968,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14967,"mutability":"mutable","name":"newInterestRateModel","nameLocation":"65838:20:38","nodeType":"VariableDeclaration","scope":15004,"src":"65820:38:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"},"typeName":{"id":14966,"nodeType":"UserDefinedTypeName","pathNode":{"id":14965,"name":"InterestRateModel","nameLocations":["65820:17:38"],"nodeType":"IdentifierPath","referencedDeclaration":10266,"src":"65820:17:38"},"referencedDeclaration":10266,"src":"65820:17:38","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},"visibility":"internal"}],"src":"65819:40:38"},"returnParameters":{"id":14969,"nodeType":"ParameterList","parameters":[],"src":"65869:0:38"},"scope":15506,"src":"65784:1042:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15056,"nodeType":"Block","src":"67351:366:38","statements":[{"assignments":[15016],"declarations":[{"constant":false,"id":15016,"mutability":"mutable","name":"token","nameLocation":"67379:5:38","nodeType":"VariableDeclaration","scope":15056,"src":"67361:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":15015,"nodeType":"UserDefinedTypeName","pathNode":{"id":15014,"name":"IERC20Upgradeable","nameLocations":["67361:17:38"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"67361:17:38"},"referencedDeclaration":1352,"src":"67361:17:38","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"internal"}],"id":15020,"initialValue":{"arguments":[{"id":15018,"name":"underlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15529,"src":"67405:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15017,"name":"IERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"67387:17:38","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Upgradeable_$1352_$","typeString":"type(contract IERC20Upgradeable)"}},"id":15019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"67387:29:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"nodeType":"VariableDeclarationStatement","src":"67361:55:38"},{"assignments":[15022],"declarations":[{"constant":false,"id":15022,"mutability":"mutable","name":"balanceBefore","nameLocation":"67434:13:38","nodeType":"VariableDeclaration","scope":15056,"src":"67426:21:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15021,"name":"uint256","nodeType":"ElementaryTypeName","src":"67426:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15030,"initialValue":{"arguments":[{"arguments":[{"id":15027,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"67474:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":15026,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"67466:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15025,"name":"address","nodeType":"ElementaryTypeName","src":"67466:7:38","typeDescriptions":{}}},"id":15028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"67466:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":15023,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15016,"src":"67450:5:38","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":15024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"67456:9:38","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1309,"src":"67450:15:38","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":15029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"67450:30:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"67426:54:38"},{"expression":{"arguments":[{"id":15034,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15007,"src":"67513:4:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":15037,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"67527:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":15036,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"67519:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15035,"name":"address","nodeType":"ElementaryTypeName","src":"67519:7:38","typeDescriptions":{}}},"id":15038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"67519:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15039,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15009,"src":"67534:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15031,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15016,"src":"67490:5:38","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":15033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"67496:16:38","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":2124,"src":"67490:22:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$1352_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20Upgradeable_$1352_$","typeString":"function (contract IERC20Upgradeable,address,address,uint256)"}},"id":15040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"67490:51:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15041,"nodeType":"ExpressionStatement","src":"67490:51:38"},{"assignments":[15043],"declarations":[{"constant":false,"id":15043,"mutability":"mutable","name":"balanceAfter","nameLocation":"67559:12:38","nodeType":"VariableDeclaration","scope":15056,"src":"67551:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15042,"name":"uint256","nodeType":"ElementaryTypeName","src":"67551:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15051,"initialValue":{"arguments":[{"arguments":[{"id":15048,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"67598:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":15047,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"67590:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15046,"name":"address","nodeType":"ElementaryTypeName","src":"67590:7:38","typeDescriptions":{}}},"id":15049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"67590:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":15044,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15016,"src":"67574:5:38","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":15045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"67580:9:38","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1309,"src":"67574:15:38","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":15050,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"67574:30:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"67551:53:38"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15052,"name":"balanceAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15043,"src":"67682:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":15053,"name":"balanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15022,"src":"67697:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"67682:28:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15013,"id":15055,"nodeType":"Return","src":"67675:35:38"}]},"documentation":{"id":15005,"nodeType":"StructuredDocumentation","src":"66870:388:38","text":" @dev Similar to ERC-20 transfer, but handles tokens that have transfer fees.\n      This function returns the actual amount received,\n      which may be less than `amount` if there is a fee attached to the transfer.\n @param from Sender of the underlying tokens\n @param amount Amount of underlying to transfer\n @return Actual amount received"},"id":15057,"implemented":true,"kind":"function","modifiers":[],"name":"_doTransferIn","nameLocation":"67272:13:38","nodeType":"FunctionDefinition","parameters":{"id":15010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15007,"mutability":"mutable","name":"from","nameLocation":"67294:4:38","nodeType":"VariableDeclaration","scope":15057,"src":"67286:12:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15006,"name":"address","nodeType":"ElementaryTypeName","src":"67286:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15009,"mutability":"mutable","name":"amount","nameLocation":"67308:6:38","nodeType":"VariableDeclaration","scope":15057,"src":"67300:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15008,"name":"uint256","nodeType":"ElementaryTypeName","src":"67300:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"67285:30:38"},"returnParameters":{"id":15013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15012,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15057,"src":"67342:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15011,"name":"uint256","nodeType":"ElementaryTypeName","src":"67342:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"67341:9:38"},"scope":15506,"src":"67263:454:38","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":15079,"nodeType":"Block","src":"67976:112:38","statements":[{"assignments":[15067],"declarations":[{"constant":false,"id":15067,"mutability":"mutable","name":"token","nameLocation":"68004:5:38","nodeType":"VariableDeclaration","scope":15079,"src":"67986:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":15066,"nodeType":"UserDefinedTypeName","pathNode":{"id":15065,"name":"IERC20Upgradeable","nameLocations":["67986:17:38"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"67986:17:38"},"referencedDeclaration":1352,"src":"67986:17:38","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"internal"}],"id":15071,"initialValue":{"arguments":[{"id":15069,"name":"underlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15529,"src":"68030:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15068,"name":"IERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"68012:17:38","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Upgradeable_$1352_$","typeString":"type(contract IERC20Upgradeable)"}},"id":15070,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"68012:29:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"nodeType":"VariableDeclarationStatement","src":"67986:55:38"},{"expression":{"arguments":[{"id":15075,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15060,"src":"68070:2:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15076,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15062,"src":"68074:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15072,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15067,"src":"68051:5:38","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":15074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"68057:12:38","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":2097,"src":"68051:18:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$1352_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20Upgradeable_$1352_$","typeString":"function (contract IERC20Upgradeable,address,uint256)"}},"id":15077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"68051:30:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15078,"nodeType":"ExpressionStatement","src":"68051:30:38"}]},"documentation":{"id":15058,"nodeType":"StructuredDocumentation","src":"67723:179:38","text":" @dev Just a regular ERC-20 transfer, reverts on failure\n @param to Receiver of the underlying tokens\n @param amount Amount of underlying to transfer"},"id":15080,"implemented":true,"kind":"function","modifiers":[],"name":"_doTransferOut","nameLocation":"67916:14:38","nodeType":"FunctionDefinition","parameters":{"id":15063,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15060,"mutability":"mutable","name":"to","nameLocation":"67939:2:38","nodeType":"VariableDeclaration","scope":15080,"src":"67931:10:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15059,"name":"address","nodeType":"ElementaryTypeName","src":"67931:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15062,"mutability":"mutable","name":"amount","nameLocation":"67951:6:38","nodeType":"VariableDeclaration","scope":15080,"src":"67943:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15061,"name":"uint256","nodeType":"ElementaryTypeName","src":"67943:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"67930:28:38"},"returnParameters":{"id":15064,"nodeType":"ParameterList","parameters":[],"src":"67976:0:38"},"scope":15506,"src":"67907:181:38","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":15206,"nodeType":"Block","src":"68580:1247:38","statements":[{"expression":{"arguments":[{"arguments":[{"id":15097,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"68669:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":15096,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"68661:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15095,"name":"address","nodeType":"ElementaryTypeName","src":"68661:7:38","typeDescriptions":{}}},"id":15098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"68661:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15099,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15085,"src":"68676:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15100,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15087,"src":"68681:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15101,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15089,"src":"68686:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15092,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"68633:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"id":15094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"68645:15:38","memberName":"preTransferHook","nodeType":"MemberAccess","referencedDeclaration":9317,"src":"68633:27:38","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256) external"}},"id":15102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"68633:60:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15103,"nodeType":"ExpressionStatement","src":"68633:60:38"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":15106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15104,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15085,"src":"68750:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":15105,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15087,"src":"68757:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"68750:10:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15111,"nodeType":"IfStatement","src":"68746:68:38","trueBody":{"id":15110,"nodeType":"Block","src":"68762:52:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15107,"name":"TransferNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9583,"src":"68783:18:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":15108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"68783:20:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15109,"nodeType":"RevertStatement","src":"68776:27:38"}]}},{"assignments":[15113],"declarations":[{"constant":false,"id":15113,"mutability":"mutable","name":"startingAllowance","nameLocation":"68896:17:38","nodeType":"VariableDeclaration","scope":15206,"src":"68888:25:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15112,"name":"uint256","nodeType":"ElementaryTypeName","src":"68888:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15114,"nodeType":"VariableDeclarationStatement","src":"68888:25:38"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":15117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15115,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15083,"src":"68927:7:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":15116,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15085,"src":"68938:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"68927:14:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15135,"nodeType":"Block","src":"69011:77:38","statements":[{"expression":{"id":15133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15127,"name":"startingAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15113,"src":"69025:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":15128,"name":"transferAllowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15582,"src":"69045:18:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":15130,"indexExpression":{"id":15129,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15085,"src":"69064:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"69045:23:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":15132,"indexExpression":{"id":15131,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15083,"src":"69069:7:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"69045:32:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"69025:52:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15134,"nodeType":"ExpressionStatement","src":"69025:52:38"}]},"id":15136,"nodeType":"IfStatement","src":"68923:165:38","trueBody":{"id":15126,"nodeType":"Block","src":"68943:62:38","statements":[{"expression":{"id":15124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15118,"name":"startingAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15113,"src":"68957:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"id":15121,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"68982:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":15120,"name":"uint256","nodeType":"ElementaryTypeName","src":"68982:7:38","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":15119,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"68977:4:38","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"68977:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":15123,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"68991:3:38","memberName":"max","nodeType":"MemberAccess","src":"68977:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"68957:37:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15125,"nodeType":"ExpressionStatement","src":"68957:37:38"}]}},{"assignments":[15138],"declarations":[{"constant":false,"id":15138,"mutability":"mutable","name":"allowanceNew","nameLocation":"69171:12:38","nodeType":"VariableDeclaration","scope":15206,"src":"69163:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15137,"name":"uint256","nodeType":"ElementaryTypeName","src":"69163:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15142,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15139,"name":"startingAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15113,"src":"69186:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":15140,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15089,"src":"69206:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"69186:26:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"69163:49:38"},{"assignments":[15144],"declarations":[{"constant":false,"id":15144,"mutability":"mutable","name":"srcTokensNew","nameLocation":"69230:12:38","nodeType":"VariableDeclaration","scope":15206,"src":"69222:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15143,"name":"uint256","nodeType":"ElementaryTypeName","src":"69222:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15150,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":15145,"name":"accountTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15576,"src":"69245:13:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":15147,"indexExpression":{"id":15146,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15085,"src":"69259:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"69245:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":15148,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15089,"src":"69266:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"69245:27:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"69222:50:38"},{"assignments":[15152],"declarations":[{"constant":false,"id":15152,"mutability":"mutable","name":"dstTokensNew","nameLocation":"69290:12:38","nodeType":"VariableDeclaration","scope":15206,"src":"69282:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15151,"name":"uint256","nodeType":"ElementaryTypeName","src":"69282:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15158,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":15153,"name":"accountTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15576,"src":"69305:13:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":15155,"indexExpression":{"id":15154,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15087,"src":"69319:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"69305:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":15156,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15089,"src":"69326:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"69305:27:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"69282:50:38"},{"expression":{"id":15163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15159,"name":"accountTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15576,"src":"69412:13:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":15161,"indexExpression":{"id":15160,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15085,"src":"69426:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"69412:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15162,"name":"srcTokensNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15144,"src":"69433:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"69412:33:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15164,"nodeType":"ExpressionStatement","src":"69412:33:38"},{"expression":{"id":15169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15165,"name":"accountTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15576,"src":"69455:13:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":15167,"indexExpression":{"id":15166,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15087,"src":"69469:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"69455:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15168,"name":"dstTokensNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15152,"src":"69476:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"69455:33:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15170,"nodeType":"ExpressionStatement","src":"69455:33:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15171,"name":"startingAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15113,"src":"69558:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"arguments":[{"id":15174,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"69584:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":15173,"name":"uint256","nodeType":"ElementaryTypeName","src":"69584:7:38","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":15172,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"69579:4:38","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15175,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69579:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":15176,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"69593:3:38","memberName":"max","nodeType":"MemberAccess","src":"69579:17:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"69558:38:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15187,"nodeType":"IfStatement","src":"69554:116:38","trueBody":{"id":15186,"nodeType":"Block","src":"69598:72:38","statements":[{"expression":{"id":15184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":15178,"name":"transferAllowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15582,"src":"69612:18:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":15181,"indexExpression":{"id":15179,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15085,"src":"69631:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"69612:23:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":15182,"indexExpression":{"id":15180,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15083,"src":"69636:7:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"69612:32:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15183,"name":"allowanceNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15138,"src":"69647:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"69612:47:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15185,"nodeType":"ExpressionStatement","src":"69612:47:38"}]}},{"eventCall":{"arguments":[{"id":15189,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15085,"src":"69733:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15190,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15087,"src":"69738:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15191,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15089,"src":"69743:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15188,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15774,"src":"69724:8:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":15192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69724:26:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15193,"nodeType":"EmitStatement","src":"69719:31:38"},{"expression":{"arguments":[{"arguments":[{"id":15199,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"69796:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":15198,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"69788:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15197,"name":"address","nodeType":"ElementaryTypeName","src":"69788:7:38","typeDescriptions":{}}},"id":15200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69788:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15201,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15085,"src":"69803:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15202,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15087,"src":"69808:3:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15203,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15089,"src":"69813:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15194,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"69761:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"id":15196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"69773:14:38","memberName":"transferVerify","nodeType":"MemberAccess","referencedDeclaration":9306,"src":"69761:26:38","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256) external"}},"id":15204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69761:59:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15205,"nodeType":"ExpressionStatement","src":"69761:59:38"}]},"documentation":{"id":15081,"nodeType":"StructuredDocumentation","src":"68094:388:38","text":" @notice Transfer `tokens` tokens from `src` to `dst` by `spender`\n @dev Called by both `transfer` and `transferFrom` internally\n @param spender The address of the account performing the transfer\n @param src The address of the source account\n @param dst The address of the destination account\n @param tokens The number of tokens to transfer"},"id":15207,"implemented":true,"kind":"function","modifiers":[],"name":"_transferTokens","nameLocation":"68496:15:38","nodeType":"FunctionDefinition","parameters":{"id":15090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15083,"mutability":"mutable","name":"spender","nameLocation":"68520:7:38","nodeType":"VariableDeclaration","scope":15207,"src":"68512:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15082,"name":"address","nodeType":"ElementaryTypeName","src":"68512:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15085,"mutability":"mutable","name":"src","nameLocation":"68537:3:38","nodeType":"VariableDeclaration","scope":15207,"src":"68529:11:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15084,"name":"address","nodeType":"ElementaryTypeName","src":"68529:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15087,"mutability":"mutable","name":"dst","nameLocation":"68550:3:38","nodeType":"VariableDeclaration","scope":15207,"src":"68542:11:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15086,"name":"address","nodeType":"ElementaryTypeName","src":"68542:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15089,"mutability":"mutable","name":"tokens","nameLocation":"68563:6:38","nodeType":"VariableDeclaration","scope":15207,"src":"68555:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15088,"name":"uint256","nodeType":"ElementaryTypeName","src":"68555:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"68511:59:38"},"returnParameters":{"id":15091,"nodeType":"ParameterList","parameters":[],"src":"68580:0:38"},"scope":15506,"src":"68487:1340:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15332,"nodeType":"Block","src":"71101:1484:38","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":15238,"name":"__Ownable2Step_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26,"src":"71111:19:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":15239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71111:21:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15240,"nodeType":"ExpressionStatement","src":"71111:21:38"},{"expression":{"arguments":[{"id":15242,"name":"accessControlManager_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15228,"src":"71176:21:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15241,"name":"__AccessControlled_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4943,"src":"71142:33:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":15243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71142:56:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15244,"nodeType":"ExpressionStatement","src":"71142:56:38"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15246,"name":"accrualBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15557,"src":"71216:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":15247,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"71238:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"71216:23:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15249,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15560,"src":"71243:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":15250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"71258:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"71243:16:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"71216:43:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d61726b6574206d6179206f6e6c7920626520696e697469616c697a6564206f6e6365","id":15253,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"71261:37:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_1bebca39b478e42a6b88dcff87467d0e08b422ebc72c3d074bd236265624e814","typeString":"literal_string \"market may only be initialized once\""},"value":"market may only be initialized once"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1bebca39b478e42a6b88dcff87467d0e08b422ebc72c3d074bd236265624e814","typeString":"literal_string \"market may only be initialized once\""}],"id":15245,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"71208:7:38","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":15254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71208:91:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15255,"nodeType":"ExpressionStatement","src":"71208:91:38"},{"expression":{"id":15258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15256,"name":"initialExchangeRateMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15551,"src":"71347:27:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15257,"name":"initialExchangeRateMantissa_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15218,"src":"71377:28:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"71347:58:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15259,"nodeType":"ExpressionStatement","src":"71347:58:38"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15261,"name":"initialExchangeRateMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15551,"src":"71423:27:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":15262,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"71453:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"71423:31:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e697469616c2065786368616e67652072617465206d7573742062652067726561746572207468616e207a65726f2e","id":15264,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"71456:50:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_427426a02e699ec0d6d6d22f3254c7e686696e18d2de7af9416d6b5cc786ff6c","typeString":"literal_string \"initial exchange rate must be greater than zero.\""},"value":"initial exchange rate must be greater than zero."}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_427426a02e699ec0d6d6d22f3254c7e686696e18d2de7af9416d6b5cc786ff6c","typeString":"literal_string \"initial exchange rate must be greater than zero.\""}],"id":15260,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"71415:7:38","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":15265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71415:92:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15266,"nodeType":"ExpressionStatement","src":"71415:92:38"},{"expression":{"arguments":[{"id":15268,"name":"comptroller_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15213,"src":"71534:12:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}],"id":15267,"name":"_setComptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14797,"src":"71518:15:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_ComptrollerInterface_$9353_$returns$__$","typeString":"function (contract ComptrollerInterface)"}},"id":15269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71518:29:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15270,"nodeType":"ExpressionStatement","src":"71518:29:38"},{"expression":{"id":15274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15271,"name":"accrualBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15557,"src":"71695:18:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":15272,"name":"getBlockNumberOrTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16298,"src":"71716:25:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":15273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71716:27:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"71695:48:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15275,"nodeType":"ExpressionStatement","src":"71695:48:38"},{"expression":{"id":15278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15276,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15560,"src":"71753:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15277,"name":"MANTISSA_ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9662,"src":"71767:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"71753:26:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15279,"nodeType":"ExpressionStatement","src":"71753:26:38"},{"expression":{"arguments":[{"id":15281,"name":"interestRateModel_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15216,"src":"71913:18:38","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}],"id":15280,"name":"_setInterestRateModelFresh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15004,"src":"71886:26:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_InterestRateModel_$10266_$returns$__$","typeString":"function (contract InterestRateModel)"}},"id":15282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71886:46:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15283,"nodeType":"ExpressionStatement","src":"71886:46:38"},{"expression":{"arguments":[{"id":15285,"name":"reserveFactorMantissa_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15233,"src":"71966:22:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15284,"name":"_setReserveFactorFresh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14834,"src":"71943:22:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":15286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71943:46:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15287,"nodeType":"ExpressionStatement","src":"71943:46:38"},{"expression":{"id":15290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15288,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15532,"src":"72000:4:38","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15289,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15220,"src":"72007:5:38","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"72000:12:38","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":15291,"nodeType":"ExpressionStatement","src":"72000:12:38"},{"expression":{"id":15294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15292,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15535,"src":"72022:6:38","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15293,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15222,"src":"72031:7:38","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"72022:16:38","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":15295,"nodeType":"ExpressionStatement","src":"72022:16:38"},{"expression":{"id":15298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15296,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15538,"src":"72048:8:38","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15297,"name":"decimals_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15224,"src":"72059:9:38","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"72048:20:38","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":15299,"nodeType":"ExpressionStatement","src":"72048:20:38"},{"expression":{"arguments":[{"expression":{"id":15301,"name":"riskManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15231,"src":"72100:14:38","typeDescriptions":{"typeIdentifier":"t_struct$_RiskManagementInit_$15613_memory_ptr","typeString":"struct VTokenInterface.RiskManagementInit memory"}},"id":15302,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"72115:9:38","memberName":"shortfall","nodeType":"MemberAccess","referencedDeclaration":15610,"src":"72100:24:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15300,"name":"_setShortfallContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15356,"src":"72078:21:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":15303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72078:47:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15304,"nodeType":"ExpressionStatement","src":"72078:47:38"},{"expression":{"arguments":[{"expression":{"id":15306,"name":"riskManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15231,"src":"72160:14:38","typeDescriptions":{"typeIdentifier":"t_struct$_RiskManagementInit_$15613_memory_ptr","typeString":"struct VTokenInterface.RiskManagementInit memory"}},"id":15307,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"72175:20:38","memberName":"protocolShareReserve","nodeType":"MemberAccess","referencedDeclaration":15612,"src":"72160:35:38","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":15305,"name":"_setProtocolShareReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15385,"src":"72135:24:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_payable_$returns$__$","typeString":"function (address payable)"}},"id":15308,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72135:61:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15309,"nodeType":"ExpressionStatement","src":"72135:61:38"},{"expression":{"id":15312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15310,"name":"protocolSeizeShareMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15590,"src":"72206:26:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15311,"name":"DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12467,"src":"72235:37:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"72206:66:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15313,"nodeType":"ExpressionStatement","src":"72206:66:38"},{"expression":{"id":15316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15314,"name":"underlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15529,"src":"72329:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15315,"name":"underlying_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15210,"src":"72342:11:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"72329:24:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":15317,"nodeType":"ExpressionStatement","src":"72329:24:38"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":15319,"name":"underlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15529,"src":"72381:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15318,"name":"IERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"72363:17:38","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Upgradeable_$1352_$","typeString":"type(contract IERC20Upgradeable)"}},"id":15320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72363:29:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":15321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"72393:11:38","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1301,"src":"72363:41:38","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":15322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72363:43:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15323,"nodeType":"ExpressionStatement","src":"72363:43:38"},{"expression":{"id":15326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15324,"name":"_notEntered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15526,"src":"72524:11:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":15325,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"72538:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"72524:18:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15327,"nodeType":"ExpressionStatement","src":"72524:18:38"},{"expression":{"arguments":[{"id":15329,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15226,"src":"72571:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15328,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[78],"referencedDeclaration":78,"src":"72552:18:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":15330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72552:26:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15331,"nodeType":"ExpressionStatement","src":"72552:26:38"}]},"documentation":{"id":15208,"nodeType":"StructuredDocumentation","src":"69833:808:38","text":" @notice Initialize the money market\n @param underlying_ The address of the underlying asset\n @param comptroller_ The address of the Comptroller\n @param interestRateModel_ The address of the interest rate model\n @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\n @param name_ ERC-20 name of this token\n @param symbol_ ERC-20 symbol of this token\n @param decimals_ ERC-20 decimal precision of this token\n @param admin_ Address of the administrator of this token\n @param accessControlManager_ AccessControlManager contract address\n @param riskManagement Addresses of risk & income related contracts\n @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)"},"id":15333,"implemented":true,"kind":"function","modifiers":[{"id":15236,"kind":"modifierInvocation","modifierName":{"id":15235,"name":"onlyInitializing","nameLocations":["71084:16:38"],"nodeType":"IdentifierPath","referencedDeclaration":521,"src":"71084:16:38"},"nodeType":"ModifierInvocation","src":"71084:16:38"}],"name":"_initialize","nameLocation":"70655:11:38","nodeType":"FunctionDefinition","parameters":{"id":15234,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15210,"mutability":"mutable","name":"underlying_","nameLocation":"70684:11:38","nodeType":"VariableDeclaration","scope":15333,"src":"70676:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15209,"name":"address","nodeType":"ElementaryTypeName","src":"70676:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15213,"mutability":"mutable","name":"comptroller_","nameLocation":"70726:12:38","nodeType":"VariableDeclaration","scope":15333,"src":"70705:33:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"},"typeName":{"id":15212,"nodeType":"UserDefinedTypeName","pathNode":{"id":15211,"name":"ComptrollerInterface","nameLocations":["70705:20:38"],"nodeType":"IdentifierPath","referencedDeclaration":9353,"src":"70705:20:38"},"referencedDeclaration":9353,"src":"70705:20:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"visibility":"internal"},{"constant":false,"id":15216,"mutability":"mutable","name":"interestRateModel_","nameLocation":"70766:18:38","nodeType":"VariableDeclaration","scope":15333,"src":"70748:36:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"},"typeName":{"id":15215,"nodeType":"UserDefinedTypeName","pathNode":{"id":15214,"name":"InterestRateModel","nameLocations":["70748:17:38"],"nodeType":"IdentifierPath","referencedDeclaration":10266,"src":"70748:17:38"},"referencedDeclaration":10266,"src":"70748:17:38","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},"visibility":"internal"},{"constant":false,"id":15218,"mutability":"mutable","name":"initialExchangeRateMantissa_","nameLocation":"70802:28:38","nodeType":"VariableDeclaration","scope":15333,"src":"70794:36:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15217,"name":"uint256","nodeType":"ElementaryTypeName","src":"70794:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15220,"mutability":"mutable","name":"name_","nameLocation":"70854:5:38","nodeType":"VariableDeclaration","scope":15333,"src":"70840:19:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":15219,"name":"string","nodeType":"ElementaryTypeName","src":"70840:6:38","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":15222,"mutability":"mutable","name":"symbol_","nameLocation":"70883:7:38","nodeType":"VariableDeclaration","scope":15333,"src":"70869:21:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":15221,"name":"string","nodeType":"ElementaryTypeName","src":"70869:6:38","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":15224,"mutability":"mutable","name":"decimals_","nameLocation":"70906:9:38","nodeType":"VariableDeclaration","scope":15333,"src":"70900:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":15223,"name":"uint8","nodeType":"ElementaryTypeName","src":"70900:5:38","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":15226,"mutability":"mutable","name":"admin_","nameLocation":"70933:6:38","nodeType":"VariableDeclaration","scope":15333,"src":"70925:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15225,"name":"address","nodeType":"ElementaryTypeName","src":"70925:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15228,"mutability":"mutable","name":"accessControlManager_","nameLocation":"70957:21:38","nodeType":"VariableDeclaration","scope":15333,"src":"70949:29:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15227,"name":"address","nodeType":"ElementaryTypeName","src":"70949:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15231,"mutability":"mutable","name":"riskManagement","nameLocation":"71014:14:38","nodeType":"VariableDeclaration","scope":15333,"src":"70988:40:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RiskManagementInit_$15613_memory_ptr","typeString":"struct VTokenInterface.RiskManagementInit"},"typeName":{"id":15230,"nodeType":"UserDefinedTypeName","pathNode":{"id":15229,"name":"RiskManagementInit","nameLocations":["70988:18:38"],"nodeType":"IdentifierPath","referencedDeclaration":15613,"src":"70988:18:38"},"referencedDeclaration":15613,"src":"70988:18:38","typeDescriptions":{"typeIdentifier":"t_struct$_RiskManagementInit_$15613_storage_ptr","typeString":"struct VTokenInterface.RiskManagementInit"}},"visibility":"internal"},{"constant":false,"id":15233,"mutability":"mutable","name":"reserveFactorMantissa_","nameLocation":"71046:22:38","nodeType":"VariableDeclaration","scope":15333,"src":"71038:30:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15232,"name":"uint256","nodeType":"ElementaryTypeName","src":"71038:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"70666:408:38"},"returnParameters":{"id":15237,"nodeType":"ParameterList","parameters":[],"src":"71101:0:38"},"scope":15506,"src":"70646:1939:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15355,"nodeType":"Block","src":"72651:184:38","statements":[{"expression":{"arguments":[{"id":15339,"name":"shortfall_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15335,"src":"72682:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15338,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16143,"src":"72661:20:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":15340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72661:32:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15341,"nodeType":"ExpressionStatement","src":"72661:32:38"},{"assignments":[15343],"declarations":[{"constant":false,"id":15343,"mutability":"mutable","name":"oldShortfall","nameLocation":"72711:12:38","nodeType":"VariableDeclaration","scope":15355,"src":"72703:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15342,"name":"address","nodeType":"ElementaryTypeName","src":"72703:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":15345,"initialValue":{"id":15344,"name":"shortfall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15593,"src":"72726:9:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"72703:32:38"},{"expression":{"id":15348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15346,"name":"shortfall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15593,"src":"72745:9:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15347,"name":"shortfall_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15335,"src":"72757:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"72745:22:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":15349,"nodeType":"ExpressionStatement","src":"72745:22:38"},{"eventCall":{"arguments":[{"id":15351,"name":"oldShortfall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15343,"src":"72803:12:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15352,"name":"shortfall_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15335,"src":"72817:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":15350,"name":"NewShortfallContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15717,"src":"72782:20:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":15353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72782:46:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15354,"nodeType":"EmitStatement","src":"72777:51:38"}]},"id":15356,"implemented":true,"kind":"function","modifiers":[],"name":"_setShortfallContract","nameLocation":"72600:21:38","nodeType":"FunctionDefinition","parameters":{"id":15336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15335,"mutability":"mutable","name":"shortfall_","nameLocation":"72630:10:38","nodeType":"VariableDeclaration","scope":15356,"src":"72622:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15334,"name":"address","nodeType":"ElementaryTypeName","src":"72622:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"72621:20:38"},"returnParameters":{"id":15337,"nodeType":"ParameterList","parameters":[],"src":"72651:0:38"},"scope":15506,"src":"72591:244:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15384,"nodeType":"Block","src":"72923:282:38","statements":[{"expression":{"arguments":[{"id":15362,"name":"protocolShareReserve_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15358,"src":"72954:21:38","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":15361,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16143,"src":"72933:20:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":15363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72933:43:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15364,"nodeType":"ExpressionStatement","src":"72933:43:38"},{"assignments":[15366],"declarations":[{"constant":false,"id":15366,"mutability":"mutable","name":"oldProtocolShareReserve","nameLocation":"72994:23:38","nodeType":"VariableDeclaration","scope":15384,"src":"72986:31:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15365,"name":"address","nodeType":"ElementaryTypeName","src":"72986:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":15371,"initialValue":{"arguments":[{"id":15369,"name":"protocolShareReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15541,"src":"73028:20:38","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":15368,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"73020:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15367,"name":"address","nodeType":"ElementaryTypeName","src":"73020:7:38","typeDescriptions":{}}},"id":15370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73020:29:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"72986:63:38"},{"expression":{"id":15374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15372,"name":"protocolShareReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15541,"src":"73059:20:38","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15373,"name":"protocolShareReserve_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15358,"src":"73082:21:38","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"73059:44:38","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":15375,"nodeType":"ExpressionStatement","src":"73059:44:38"},{"eventCall":{"arguments":[{"id":15377,"name":"oldProtocolShareReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15366,"src":"73142:23:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":15380,"name":"protocolShareReserve_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15358,"src":"73175:21:38","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":15379,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"73167:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15378,"name":"address","nodeType":"ElementaryTypeName","src":"73167:7:38","typeDescriptions":{}}},"id":15381,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73167:30:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":15376,"name":"NewProtocolShareReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15724,"src":"73118:23:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":15382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73118:80:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15383,"nodeType":"EmitStatement","src":"73113:85:38"}]},"id":15385,"implemented":true,"kind":"function","modifiers":[],"name":"_setProtocolShareReserve","nameLocation":"72850:24:38","nodeType":"FunctionDefinition","parameters":{"id":15359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15358,"mutability":"mutable","name":"protocolShareReserve_","nameLocation":"72891:21:38","nodeType":"VariableDeclaration","scope":15385,"src":"72875:37:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":15357,"name":"address","nodeType":"ElementaryTypeName","src":"72875:15:38","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"72874:39:38"},"returnParameters":{"id":15360,"nodeType":"ParameterList","parameters":[],"src":"72923:0:38"},"scope":15506,"src":"72841:364:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15407,"nodeType":"Block","src":"73274:158:38","statements":[{"condition":{"id":15401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"73288:83:38","subExpression":{"arguments":[{"id":15397,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15387,"src":"73354:4:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15398,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"73360:3:38","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"73364:6:38","memberName":"sender","nodeType":"MemberAccess","src":"73360:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[{"id":15393,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"73322:11:38","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}],"id":15392,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"73314:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15391,"name":"address","nodeType":"ElementaryTypeName","src":"73314:7:38","typeDescriptions":{}}},"id":15394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73314:20:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15390,"name":"ComptrollerViewInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9431,"src":"73289:24:38","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ComptrollerViewInterface_$9431_$","typeString":"type(contract ComptrollerViewInterface)"}},"id":15395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73289:46:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerViewInterface_$9431","typeString":"contract ComptrollerViewInterface"}},"id":15396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"73336:17:38","memberName":"approvedDelegates","nodeType":"MemberAccess","referencedDeclaration":9430,"src":"73289:64:38","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) view external returns (bool)"}},"id":15400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73289:82:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15406,"nodeType":"IfStatement","src":"73284:142:38","trueBody":{"id":15405,"nodeType":"Block","src":"73373:53:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15402,"name":"DelegateNotApproved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9595,"src":"73394:19:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":15403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73394:21:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15404,"nodeType":"RevertStatement","src":"73387:28:38"}]}}]},"id":15408,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureSenderIsDelegateOf","nameLocation":"73220:25:38","nodeType":"FunctionDefinition","parameters":{"id":15388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15387,"mutability":"mutable","name":"user","nameLocation":"73254:4:38","nodeType":"VariableDeclaration","scope":15408,"src":"73246:12:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15386,"name":"address","nodeType":"ElementaryTypeName","src":"73246:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"73245:14:38"},"returnParameters":{"id":15389,"nodeType":"ParameterList","parameters":[],"src":"73274:0:38"},"scope":15506,"src":"73211:221:38","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":15424,"nodeType":"Block","src":"73730:78:38","statements":[{"expression":{"arguments":[{"arguments":[{"id":15420,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"73795:4:38","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":15419,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"73787:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15418,"name":"address","nodeType":"ElementaryTypeName","src":"73787:7:38","typeDescriptions":{}}},"id":15421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73787:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":15415,"name":"underlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15529,"src":"73765:10:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15414,"name":"IERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"73747:17:38","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Upgradeable_$1352_$","typeString":"type(contract IERC20Upgradeable)"}},"id":15416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73747:29:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":15417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"73777:9:38","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1309,"src":"73747:39:38","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":15422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73747:54:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15413,"id":15423,"nodeType":"Return","src":"73740:61:38"}]},"documentation":{"id":15409,"nodeType":"StructuredDocumentation","src":"73438:222:38","text":" @notice Gets balance of this contract in terms of the underlying\n @dev This excludes the value of the current message, if any\n @return The quantity of underlying tokens owned by this contract"},"id":15425,"implemented":true,"kind":"function","modifiers":[],"name":"_getCashPrior","nameLocation":"73674:13:38","nodeType":"FunctionDefinition","parameters":{"id":15410,"nodeType":"ParameterList","parameters":[],"src":"73687:2:38"},"returnParameters":{"id":15413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15412,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15425,"src":"73721:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15411,"name":"uint256","nodeType":"ElementaryTypeName","src":"73721:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"73720:9:38"},"scope":15506,"src":"73665:143:38","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":15460,"nodeType":"Block","src":"74103:717:38","statements":[{"assignments":[15435],"declarations":[{"constant":false,"id":15435,"mutability":"mutable","name":"borrowSnapshot","nameLocation":"74183:14:38","nodeType":"VariableDeclaration","scope":15460,"src":"74161:36:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BorrowSnapshot_$15523_memory_ptr","typeString":"struct VTokenStorage.BorrowSnapshot"},"typeName":{"id":15434,"nodeType":"UserDefinedTypeName","pathNode":{"id":15433,"name":"BorrowSnapshot","nameLocations":["74161:14:38"],"nodeType":"IdentifierPath","referencedDeclaration":15523,"src":"74161:14:38"},"referencedDeclaration":15523,"src":"74161:14:38","typeDescriptions":{"typeIdentifier":"t_struct$_BorrowSnapshot_$15523_storage_ptr","typeString":"struct VTokenStorage.BorrowSnapshot"}},"visibility":"internal"}],"id":15439,"initialValue":{"baseExpression":{"id":15436,"name":"accountBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15587,"src":"74200:14:38","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$15523_storage_$","typeString":"mapping(address => struct VTokenStorage.BorrowSnapshot storage ref)"}},"id":15438,"indexExpression":{"id":15437,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15428,"src":"74215:7:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"74200:23:38","typeDescriptions":{"typeIdentifier":"t_struct$_BorrowSnapshot_$15523_storage","typeString":"struct VTokenStorage.BorrowSnapshot storage ref"}},"nodeType":"VariableDeclarationStatement","src":"74161:62:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15440,"name":"borrowSnapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15435,"src":"74424:14:38","typeDescriptions":{"typeIdentifier":"t_struct$_BorrowSnapshot_$15523_memory_ptr","typeString":"struct VTokenStorage.BorrowSnapshot memory"}},"id":15441,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"74439:9:38","memberName":"principal","nodeType":"MemberAccess","referencedDeclaration":15520,"src":"74424:24:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":15442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"74452:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"74424:29:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15447,"nodeType":"IfStatement","src":"74420:68:38","trueBody":{"id":15446,"nodeType":"Block","src":"74455:33:38","statements":[{"expression":{"hexValue":"30","id":15444,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"74476:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":15432,"id":15445,"nodeType":"Return","src":"74469:8:38"}]}},{"assignments":[15449],"declarations":[{"constant":false,"id":15449,"mutability":"mutable","name":"principalTimesIndex","nameLocation":"74685:19:38","nodeType":"VariableDeclaration","scope":15460,"src":"74677:27:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15448,"name":"uint256","nodeType":"ElementaryTypeName","src":"74677:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15454,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15450,"name":"borrowSnapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15435,"src":"74707:14:38","typeDescriptions":{"typeIdentifier":"t_struct$_BorrowSnapshot_$15523_memory_ptr","typeString":"struct VTokenStorage.BorrowSnapshot memory"}},"id":15451,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"74722:9:38","memberName":"principal","nodeType":"MemberAccess","referencedDeclaration":15520,"src":"74707:24:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":15452,"name":"borrowIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15560,"src":"74734:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"74707:38:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"74677:68:38"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15455,"name":"principalTimesIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15449,"src":"74763:19:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":15456,"name":"borrowSnapshot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15435,"src":"74785:14:38","typeDescriptions":{"typeIdentifier":"t_struct$_BorrowSnapshot_$15523_memory_ptr","typeString":"struct VTokenStorage.BorrowSnapshot memory"}},"id":15457,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"74800:13:38","memberName":"interestIndex","nodeType":"MemberAccess","referencedDeclaration":15522,"src":"74785:28:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"74763:50:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15432,"id":15459,"nodeType":"Return","src":"74756:57:38"}]},"documentation":{"id":15426,"nodeType":"StructuredDocumentation","src":"73814:205:38","text":" @notice Return the borrow balance of account based on stored data\n @param account The address whose balance should be calculated\n @return borrowBalance the calculated balance"},"id":15461,"implemented":true,"kind":"function","modifiers":[],"name":"_borrowBalanceStored","nameLocation":"74033:20:38","nodeType":"FunctionDefinition","parameters":{"id":15429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15428,"mutability":"mutable","name":"account","nameLocation":"74062:7:38","nodeType":"VariableDeclaration","scope":15461,"src":"74054:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15427,"name":"address","nodeType":"ElementaryTypeName","src":"74054:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"74053:17:38"},"returnParameters":{"id":15432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15431,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15461,"src":"74094:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15430,"name":"uint256","nodeType":"ElementaryTypeName","src":"74094:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"74093:9:38"},"scope":15506,"src":"74024:796:38","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":15504,"nodeType":"Block","src":"75147:673:38","statements":[{"assignments":[15468],"declarations":[{"constant":false,"id":15468,"mutability":"mutable","name":"_totalSupply","nameLocation":"75165:12:38","nodeType":"VariableDeclaration","scope":15504,"src":"75157:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15467,"name":"uint256","nodeType":"ElementaryTypeName","src":"75157:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15470,"initialValue":{"id":15469,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15569,"src":"75180:11:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"75157:34:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15471,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15468,"src":"75205:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":15472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"75221:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"75205:17:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15477,"nodeType":"IfStatement","src":"75201:210:38","trueBody":{"id":15476,"nodeType":"Block","src":"75224:187:38","statements":[{"expression":{"id":15474,"name":"initialExchangeRateMantissa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15551,"src":"75373:27:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15466,"id":15475,"nodeType":"Return","src":"75366:34:38"}]}},{"assignments":[15479],"declarations":[{"constant":false,"id":15479,"mutability":"mutable","name":"totalCash","nameLocation":"75567:9:38","nodeType":"VariableDeclaration","scope":15504,"src":"75559:17:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15478,"name":"uint256","nodeType":"ElementaryTypeName","src":"75559:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15482,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":15480,"name":"_getCashPrior","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15425,"src":"75579:13:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":15481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"75579:15:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"75559:35:38"},{"assignments":[15484],"declarations":[{"constant":false,"id":15484,"mutability":"mutable","name":"cashPlusBorrowsMinusReserves","nameLocation":"75612:28:38","nodeType":"VariableDeclaration","scope":15504,"src":"75604:36:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15483,"name":"uint256","nodeType":"ElementaryTypeName","src":"75604:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15492,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15485,"name":"totalCash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15479,"src":"75643:9:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":15486,"name":"totalBorrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15563,"src":"75655:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"75643:24:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":15488,"name":"badDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15572,"src":"75670:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"75643:34:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":15490,"name":"totalReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15566,"src":"75680:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"75643:50:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"75604:89:38"},{"assignments":[15494],"declarations":[{"constant":false,"id":15494,"mutability":"mutable","name":"exchangeRate","nameLocation":"75711:12:38","nodeType":"VariableDeclaration","scope":15504,"src":"75703:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15493,"name":"uint256","nodeType":"ElementaryTypeName","src":"75703:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15501,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15495,"name":"cashPlusBorrowsMinusReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15484,"src":"75727:28:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":15496,"name":"EXP_SCALE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9651,"src":"75758:9:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"75727:40:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15498,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"75726:42:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":15499,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15468,"src":"75771:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"75726:57:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"75703:80:38"},{"expression":{"id":15502,"name":"exchangeRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15494,"src":"75801:12:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15466,"id":15503,"nodeType":"Return","src":"75794:19:38"}]},"documentation":{"id":15462,"nodeType":"StructuredDocumentation","src":"74826:245:38","text":" @notice Calculates the exchange rate from the underlying to the VToken\n @dev This function does not accrue interest before calculating the exchange rate\n @return exchangeRate Calculated exchange rate scaled by 1e18"},"id":15505,"implemented":true,"kind":"function","modifiers":[],"name":"_exchangeRateStored","nameLocation":"75085:19:38","nodeType":"FunctionDefinition","parameters":{"id":15463,"nodeType":"ParameterList","parameters":[],"src":"75104:2:38"},"returnParameters":{"id":15466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15465,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15505,"src":"75138:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15464,"name":"uint256","nodeType":"ElementaryTypeName","src":"75138:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"75137:9:38"},"scope":15506,"src":"75076:744:38","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":15507,"src":"3352:72470:38","usedErrors":[4916,9583,9585,9587,9589,9591,9593,9595,9597,9599,9601,9603,9605,9609,9611,9613,9615,9617,9619,9621,9623,9627,9629,9631,9633,9635,16125,16237,16240],"usedEvents":[17,124,422,4907,15624,15635,15646,15657,15670,15681,15688,15701,15710,15717,15724,15733,15740,15747,15756,15765,15774,15783,15792,15797,15804,15813]}],"src":"41:75782:38"},"id":38},"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol":{"ast":{"absolutePath":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol","exportedSymbols":{"ComptrollerInterface":[9353],"IERC20Upgradeable":[1352],"InterestRateModel":[10266],"ResilientOracleInterface":[16173],"VTokenInterface":[16106],"VTokenStorage":[15605]},"id":16107,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":15508,"literals":["solidity","0.8",".25"],"nodeType":"PragmaDirective","src":"41:23:39"},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","id":15510,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16107,"sourceUnit":1353,"src":"66:106:39","symbolAliases":[{"foreign":{"id":15509,"name":"IERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"75:17:39","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol","file":"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol","id":15512,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16107,"sourceUnit":16196,"src":"173:106:39","symbolAliases":[{"foreign":{"id":15511,"name":"ResilientOracleInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16173,"src":"182:24:39","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol","file":"./ComptrollerInterface.sol","id":15514,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16107,"sourceUnit":9432,"src":"281:66:39","symbolAliases":[{"foreign":{"id":15513,"name":"ComptrollerInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9353,"src":"290:20:39","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol","file":"./InterestRateModel.sol","id":15516,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16107,"sourceUnit":10267,"src":"348:60:39","symbolAliases":[{"foreign":{"id":15515,"name":"InterestRateModel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10266,"src":"357:17:39","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"VTokenStorage","contractDependencies":[],"contractKind":"contract","documentation":{"id":15517,"nodeType":"StructuredDocumentation","src":"410:104:39","text":" @title VTokenStorage\n @author Venus\n @notice Storage layout used by the `VToken` contract"},"fullyImplemented":true,"id":15605,"linearizedBaseContracts":[15605],"name":"VTokenStorage","nameLocation":"570:13:39","nodeType":"ContractDefinition","nodes":[{"canonicalName":"VTokenStorage.BorrowSnapshot","documentation":{"id":15518,"nodeType":"StructuredDocumentation","src":"590:280:39","text":" @notice Container for borrow balance information\n @member principal Total balance (with accrued interest), after applying the most recent balance-changing action\n @member interestIndex Global borrowIndex as of the most recent balance-changing action"},"id":15523,"members":[{"constant":false,"id":15520,"mutability":"mutable","name":"principal","nameLocation":"915:9:39","nodeType":"VariableDeclaration","scope":15523,"src":"907:17:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15519,"name":"uint256","nodeType":"ElementaryTypeName","src":"907:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15522,"mutability":"mutable","name":"interestIndex","nameLocation":"942:13:39","nodeType":"VariableDeclaration","scope":15523,"src":"934:21:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15521,"name":"uint256","nodeType":"ElementaryTypeName","src":"934:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"BorrowSnapshot","nameLocation":"882:14:39","nodeType":"StructDefinition","scope":15605,"src":"875:87:39","visibility":"public"},{"constant":false,"documentation":{"id":15524,"nodeType":"StructuredDocumentation","src":"968:61:39","text":" @dev Guard variable for re-entrancy checks"},"id":15526,"mutability":"mutable","name":"_notEntered","nameLocation":"1048:11:39","nodeType":"VariableDeclaration","scope":15605,"src":"1034:25:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15525,"name":"bool","nodeType":"ElementaryTypeName","src":"1034:4:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"documentation":{"id":15527,"nodeType":"StructuredDocumentation","src":"1066:59:39","text":" @notice Underlying asset for this VToken"},"functionSelector":"6f307dc3","id":15529,"mutability":"mutable","name":"underlying","nameLocation":"1145:10:39","nodeType":"VariableDeclaration","scope":15605,"src":"1130:25:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15528,"name":"address","nodeType":"ElementaryTypeName","src":"1130:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"documentation":{"id":15530,"nodeType":"StructuredDocumentation","src":"1162:59:39","text":" @notice EIP-20 token name for this token"},"functionSelector":"06fdde03","id":15532,"mutability":"mutable","name":"name","nameLocation":"1240:4:39","nodeType":"VariableDeclaration","scope":15605,"src":"1226:18:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":15531,"name":"string","nodeType":"ElementaryTypeName","src":"1226:6:39","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"public"},{"constant":false,"documentation":{"id":15533,"nodeType":"StructuredDocumentation","src":"1251:61:39","text":" @notice EIP-20 token symbol for this token"},"functionSelector":"95d89b41","id":15535,"mutability":"mutable","name":"symbol","nameLocation":"1331:6:39","nodeType":"VariableDeclaration","scope":15605,"src":"1317:20:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":15534,"name":"string","nodeType":"ElementaryTypeName","src":"1317:6:39","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"public"},{"constant":false,"documentation":{"id":15536,"nodeType":"StructuredDocumentation","src":"1344:63:39","text":" @notice EIP-20 token decimals for this token"},"functionSelector":"313ce567","id":15538,"mutability":"mutable","name":"decimals","nameLocation":"1425:8:39","nodeType":"VariableDeclaration","scope":15605,"src":"1412:21:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":15537,"name":"uint8","nodeType":"ElementaryTypeName","src":"1412:5:39","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":false,"documentation":{"id":15539,"nodeType":"StructuredDocumentation","src":"1440:66:39","text":" @notice Protocol share Reserve contract address"},"functionSelector":"e9a44fd9","id":15541,"mutability":"mutable","name":"protocolShareReserve","nameLocation":"1534:20:39","nodeType":"VariableDeclaration","scope":15605,"src":"1511:43:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":15540,"name":"address","nodeType":"ElementaryTypeName","src":"1511:15:39","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"public"},{"constant":false,"documentation":{"id":15542,"nodeType":"StructuredDocumentation","src":"1561:74:39","text":" @notice Contract which oversees inter-vToken operations"},"functionSelector":"5fe3b567","id":15545,"mutability":"mutable","name":"comptroller","nameLocation":"1668:11:39","nodeType":"VariableDeclaration","scope":15605,"src":"1640:39:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"},"typeName":{"id":15544,"nodeType":"UserDefinedTypeName","pathNode":{"id":15543,"name":"ComptrollerInterface","nameLocations":["1640:20:39"],"nodeType":"IdentifierPath","referencedDeclaration":9353,"src":"1640:20:39"},"referencedDeclaration":9353,"src":"1640:20:39","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"visibility":"public"},{"constant":false,"documentation":{"id":15546,"nodeType":"StructuredDocumentation","src":"1686:85:39","text":" @notice Model which tells what the current interest rate should be"},"functionSelector":"f3fdb15a","id":15549,"mutability":"mutable","name":"interestRateModel","nameLocation":"1801:17:39","nodeType":"VariableDeclaration","scope":15605,"src":"1776:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"},"typeName":{"id":15548,"nodeType":"UserDefinedTypeName","pathNode":{"id":15547,"name":"InterestRateModel","nameLocations":["1776:17:39"],"nodeType":"IdentifierPath","referencedDeclaration":10266,"src":"1776:17:39"},"referencedDeclaration":10266,"src":"1776:17:39","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},"visibility":"public"},{"constant":false,"id":15551,"mutability":"mutable","name":"initialExchangeRateMantissa","nameLocation":"1935:27:39","nodeType":"VariableDeclaration","scope":15605,"src":"1918:44:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15550,"name":"uint256","nodeType":"ElementaryTypeName","src":"1918:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"documentation":{"id":15552,"nodeType":"StructuredDocumentation","src":"1969:80:39","text":" @notice Fraction of interest currently set aside for reserves"},"functionSelector":"173b9904","id":15554,"mutability":"mutable","name":"reserveFactorMantissa","nameLocation":"2069:21:39","nodeType":"VariableDeclaration","scope":15605,"src":"2054:36:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15553,"name":"uint256","nodeType":"ElementaryTypeName","src":"2054:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":15555,"nodeType":"StructuredDocumentation","src":"2097:89:39","text":" @notice Slot(block or second) number that interest was last accrued at"},"functionSelector":"6c540baf","id":15557,"mutability":"mutable","name":"accrualBlockNumber","nameLocation":"2206:18:39","nodeType":"VariableDeclaration","scope":15605,"src":"2191:33:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15556,"name":"uint256","nodeType":"ElementaryTypeName","src":"2191:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":15558,"nodeType":"StructuredDocumentation","src":"2231:104:39","text":" @notice Accumulator of the total earned interest rate since the opening of the market"},"functionSelector":"aa5af0fd","id":15560,"mutability":"mutable","name":"borrowIndex","nameLocation":"2355:11:39","nodeType":"VariableDeclaration","scope":15605,"src":"2340:26:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15559,"name":"uint256","nodeType":"ElementaryTypeName","src":"2340:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":15561,"nodeType":"StructuredDocumentation","src":"2373:95:39","text":" @notice Total amount of outstanding borrows of the underlying in this market"},"functionSelector":"47bd3718","id":15563,"mutability":"mutable","name":"totalBorrows","nameLocation":"2488:12:39","nodeType":"VariableDeclaration","scope":15605,"src":"2473:27:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15562,"name":"uint256","nodeType":"ElementaryTypeName","src":"2473:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":15564,"nodeType":"StructuredDocumentation","src":"2507:89:39","text":" @notice Total amount of reserves of the underlying held in this market"},"functionSelector":"8f840ddd","id":15566,"mutability":"mutable","name":"totalReserves","nameLocation":"2616:13:39","nodeType":"VariableDeclaration","scope":15605,"src":"2601:28:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15565,"name":"uint256","nodeType":"ElementaryTypeName","src":"2601:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":15567,"nodeType":"StructuredDocumentation","src":"2636:64:39","text":" @notice Total number of tokens in circulation"},"functionSelector":"18160ddd","id":15569,"mutability":"mutable","name":"totalSupply","nameLocation":"2720:11:39","nodeType":"VariableDeclaration","scope":15605,"src":"2705:26:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15568,"name":"uint256","nodeType":"ElementaryTypeName","src":"2705:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":15570,"nodeType":"StructuredDocumentation","src":"2738:55:39","text":" @notice Total bad debt of the market"},"functionSelector":"bbcac557","id":15572,"mutability":"mutable","name":"badDebt","nameLocation":"2813:7:39","nodeType":"VariableDeclaration","scope":15605,"src":"2798:22:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15571,"name":"uint256","nodeType":"ElementaryTypeName","src":"2798:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"id":15576,"mutability":"mutable","name":"accountTokens","nameLocation":"2922:13:39","nodeType":"VariableDeclaration","scope":15605,"src":"2885:50:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":15575,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":15573,"name":"address","nodeType":"ElementaryTypeName","src":"2893:7:39","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2885:27:39","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":15574,"name":"uint256","nodeType":"ElementaryTypeName","src":"2904:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":15582,"mutability":"mutable","name":"transferAllowances","nameLocation":"3058:18:39","nodeType":"VariableDeclaration","scope":15605,"src":"3001:75:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":15581,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":15577,"name":"address","nodeType":"ElementaryTypeName","src":"3009:7:39","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3001:47:39","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":15580,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":15578,"name":"address","nodeType":"ElementaryTypeName","src":"3028:7:39","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3020:27:39","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":15579,"name":"uint256","nodeType":"ElementaryTypeName","src":"3039:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"constant":false,"id":15587,"mutability":"mutable","name":"accountBorrows","nameLocation":"3194:14:39","nodeType":"VariableDeclaration","scope":15605,"src":"3150:58:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$15523_storage_$","typeString":"mapping(address => struct VTokenStorage.BorrowSnapshot)"},"typeName":{"id":15586,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":15583,"name":"address","nodeType":"ElementaryTypeName","src":"3158:7:39","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3150:34:39","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$15523_storage_$","typeString":"mapping(address => struct VTokenStorage.BorrowSnapshot)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":15585,"nodeType":"UserDefinedTypeName","pathNode":{"id":15584,"name":"BorrowSnapshot","nameLocations":["3169:14:39"],"nodeType":"IdentifierPath","referencedDeclaration":15523,"src":"3169:14:39"},"referencedDeclaration":15523,"src":"3169:14:39","typeDescriptions":{"typeIdentifier":"t_struct$_BorrowSnapshot_$15523_storage_ptr","typeString":"struct VTokenStorage.BorrowSnapshot"}}},"visibility":"internal"},{"constant":false,"documentation":{"id":15588,"nodeType":"StructuredDocumentation","src":"3215:79:39","text":" @notice Share of seized collateral that is added to reserves"},"functionSelector":"6752e702","id":15590,"mutability":"mutable","name":"protocolSeizeShareMantissa","nameLocation":"3314:26:39","nodeType":"VariableDeclaration","scope":15605,"src":"3299:41:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15589,"name":"uint256","nodeType":"ElementaryTypeName","src":"3299:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":15591,"nodeType":"StructuredDocumentation","src":"3347:64:39","text":" @notice Storage of Shortfall contract address"},"functionSelector":"19b1faef","id":15593,"mutability":"mutable","name":"shortfall","nameLocation":"3431:9:39","nodeType":"VariableDeclaration","scope":15605,"src":"3416:24:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15592,"name":"address","nodeType":"ElementaryTypeName","src":"3416:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"documentation":{"id":15594,"nodeType":"StructuredDocumentation","src":"3447:92:39","text":" @notice delta slot (block or second) after which reserves will be reduced"},"functionSelector":"d1109c2f","id":15596,"mutability":"mutable","name":"reduceReservesBlockDelta","nameLocation":"3559:24:39","nodeType":"VariableDeclaration","scope":15605,"src":"3544:39:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15595,"name":"uint256","nodeType":"ElementaryTypeName","src":"3544:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":15597,"nodeType":"StructuredDocumentation","src":"3590:92:39","text":" @notice last slot (block or second) number at which reserves were reduced"},"functionSelector":"ae96f141","id":15599,"mutability":"mutable","name":"reduceReservesBlockNumber","nameLocation":"3702:25:39","nodeType":"VariableDeclaration","scope":15605,"src":"3687:40:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15598,"name":"uint256","nodeType":"ElementaryTypeName","src":"3687:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":15600,"nodeType":"StructuredDocumentation","src":"3734:254:39","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":15604,"mutability":"mutable","name":"__gap","nameLocation":"4013:5:39","nodeType":"VariableDeclaration","scope":15605,"src":"3993:25:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$48_storage","typeString":"uint256[48]"},"typeName":{"baseType":{"id":15601,"name":"uint256","nodeType":"ElementaryTypeName","src":"3993:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15603,"length":{"hexValue":"3438","id":15602,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4001:2:39","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},"nodeType":"ArrayTypeName","src":"3993:11:39","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$48_storage_ptr","typeString":"uint256[48]"}},"visibility":"private"}],"scope":16107,"src":"561:3460:39","usedErrors":[],"usedEvents":[]},{"abstract":true,"baseContracts":[{"baseName":{"id":15607,"name":"VTokenStorage","nameLocations":["4169:13:39"],"nodeType":"IdentifierPath","referencedDeclaration":15605,"src":"4169:13:39"},"id":15608,"nodeType":"InheritanceSpecifier","src":"4169:13:39"}],"canonicalName":"VTokenInterface","contractDependencies":[],"contractKind":"contract","documentation":{"id":15606,"nodeType":"StructuredDocumentation","src":"4023:108:39","text":" @title VTokenInterface\n @author Venus\n @notice Interface implemented by the `VToken` contract"},"fullyImplemented":false,"id":16106,"linearizedBaseContracts":[16106,15605],"name":"VTokenInterface","nameLocation":"4150:15:39","nodeType":"ContractDefinition","nodes":[{"canonicalName":"VTokenInterface.RiskManagementInit","id":15613,"members":[{"constant":false,"id":15610,"mutability":"mutable","name":"shortfall","nameLocation":"4233:9:39","nodeType":"VariableDeclaration","scope":15613,"src":"4225:17:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15609,"name":"address","nodeType":"ElementaryTypeName","src":"4225:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15612,"mutability":"mutable","name":"protocolShareReserve","nameLocation":"4268:20:39","nodeType":"VariableDeclaration","scope":15613,"src":"4252:36:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":15611,"name":"address","nodeType":"ElementaryTypeName","src":"4252:15:39","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"name":"RiskManagementInit","nameLocation":"4196:18:39","nodeType":"StructDefinition","scope":16106,"src":"4189:106:39","visibility":"public"},{"anonymous":false,"documentation":{"id":15614,"nodeType":"StructuredDocumentation","src":"4330:65:39","text":" @notice Event emitted when interest is accrued"},"eventSelector":"4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc04","id":15624,"name":"AccrueInterest","nameLocation":"4406:14:39","nodeType":"EventDefinition","parameters":{"id":15623,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15616,"indexed":false,"mutability":"mutable","name":"cashPrior","nameLocation":"4429:9:39","nodeType":"VariableDeclaration","scope":15624,"src":"4421:17:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15615,"name":"uint256","nodeType":"ElementaryTypeName","src":"4421:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15618,"indexed":false,"mutability":"mutable","name":"interestAccumulated","nameLocation":"4448:19:39","nodeType":"VariableDeclaration","scope":15624,"src":"4440:27:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15617,"name":"uint256","nodeType":"ElementaryTypeName","src":"4440:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15620,"indexed":false,"mutability":"mutable","name":"borrowIndex","nameLocation":"4477:11:39","nodeType":"VariableDeclaration","scope":15624,"src":"4469:19:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15619,"name":"uint256","nodeType":"ElementaryTypeName","src":"4469:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15622,"indexed":false,"mutability":"mutable","name":"totalBorrows","nameLocation":"4498:12:39","nodeType":"VariableDeclaration","scope":15624,"src":"4490:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15621,"name":"uint256","nodeType":"ElementaryTypeName","src":"4490:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4420:91:39"},"src":"4400:112:39"},{"anonymous":false,"documentation":{"id":15625,"nodeType":"StructuredDocumentation","src":"4518:63:39","text":" @notice Event emitted when tokens are minted"},"eventSelector":"b4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb","id":15635,"name":"Mint","nameLocation":"4592:4:39","nodeType":"EventDefinition","parameters":{"id":15634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15627,"indexed":true,"mutability":"mutable","name":"minter","nameLocation":"4613:6:39","nodeType":"VariableDeclaration","scope":15635,"src":"4597:22:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15626,"name":"address","nodeType":"ElementaryTypeName","src":"4597:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15629,"indexed":false,"mutability":"mutable","name":"mintAmount","nameLocation":"4629:10:39","nodeType":"VariableDeclaration","scope":15635,"src":"4621:18:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15628,"name":"uint256","nodeType":"ElementaryTypeName","src":"4621:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15631,"indexed":false,"mutability":"mutable","name":"mintTokens","nameLocation":"4649:10:39","nodeType":"VariableDeclaration","scope":15635,"src":"4641:18:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15630,"name":"uint256","nodeType":"ElementaryTypeName","src":"4641:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15633,"indexed":false,"mutability":"mutable","name":"accountBalance","nameLocation":"4669:14:39","nodeType":"VariableDeclaration","scope":15635,"src":"4661:22:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15632,"name":"uint256","nodeType":"ElementaryTypeName","src":"4661:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4596:88:39"},"src":"4586:99:39"},{"anonymous":false,"documentation":{"id":15636,"nodeType":"StructuredDocumentation","src":"4691:65:39","text":" @notice Event emitted when tokens are redeemed"},"eventSelector":"bd5034ffbd47e4e72a94baa2cdb74c6fad73cb3bcdc13036b72ec8306f5a7646","id":15646,"name":"Redeem","nameLocation":"4767:6:39","nodeType":"EventDefinition","parameters":{"id":15645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15638,"indexed":true,"mutability":"mutable","name":"redeemer","nameLocation":"4790:8:39","nodeType":"VariableDeclaration","scope":15646,"src":"4774:24:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15637,"name":"address","nodeType":"ElementaryTypeName","src":"4774:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15640,"indexed":false,"mutability":"mutable","name":"redeemAmount","nameLocation":"4808:12:39","nodeType":"VariableDeclaration","scope":15646,"src":"4800:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15639,"name":"uint256","nodeType":"ElementaryTypeName","src":"4800:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15642,"indexed":false,"mutability":"mutable","name":"redeemTokens","nameLocation":"4830:12:39","nodeType":"VariableDeclaration","scope":15646,"src":"4822:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15641,"name":"uint256","nodeType":"ElementaryTypeName","src":"4822:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15644,"indexed":false,"mutability":"mutable","name":"accountBalance","nameLocation":"4852:14:39","nodeType":"VariableDeclaration","scope":15646,"src":"4844:22:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15643,"name":"uint256","nodeType":"ElementaryTypeName","src":"4844:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4773:94:39"},"src":"4761:107:39"},{"anonymous":false,"documentation":{"id":15647,"nodeType":"StructuredDocumentation","src":"4874:68:39","text":" @notice Event emitted when underlying is borrowed"},"eventSelector":"13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab80","id":15657,"name":"Borrow","nameLocation":"4953:6:39","nodeType":"EventDefinition","parameters":{"id":15656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15649,"indexed":true,"mutability":"mutable","name":"borrower","nameLocation":"4976:8:39","nodeType":"VariableDeclaration","scope":15657,"src":"4960:24:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15648,"name":"address","nodeType":"ElementaryTypeName","src":"4960:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15651,"indexed":false,"mutability":"mutable","name":"borrowAmount","nameLocation":"4994:12:39","nodeType":"VariableDeclaration","scope":15657,"src":"4986:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15650,"name":"uint256","nodeType":"ElementaryTypeName","src":"4986:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15653,"indexed":false,"mutability":"mutable","name":"accountBorrows","nameLocation":"5016:14:39","nodeType":"VariableDeclaration","scope":15657,"src":"5008:22:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15652,"name":"uint256","nodeType":"ElementaryTypeName","src":"5008:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15655,"indexed":false,"mutability":"mutable","name":"totalBorrows","nameLocation":"5040:12:39","nodeType":"VariableDeclaration","scope":15657,"src":"5032:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15654,"name":"uint256","nodeType":"ElementaryTypeName","src":"5032:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4959:94:39"},"src":"4947:107:39"},{"anonymous":false,"documentation":{"id":15658,"nodeType":"StructuredDocumentation","src":"5060:64:39","text":" @notice Event emitted when a borrow is repaid"},"eventSelector":"1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1","id":15670,"name":"RepayBorrow","nameLocation":"5135:11:39","nodeType":"EventDefinition","parameters":{"id":15669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15660,"indexed":true,"mutability":"mutable","name":"payer","nameLocation":"5172:5:39","nodeType":"VariableDeclaration","scope":15670,"src":"5156:21:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15659,"name":"address","nodeType":"ElementaryTypeName","src":"5156:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15662,"indexed":true,"mutability":"mutable","name":"borrower","nameLocation":"5203:8:39","nodeType":"VariableDeclaration","scope":15670,"src":"5187:24:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15661,"name":"address","nodeType":"ElementaryTypeName","src":"5187:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15664,"indexed":false,"mutability":"mutable","name":"repayAmount","nameLocation":"5229:11:39","nodeType":"VariableDeclaration","scope":15670,"src":"5221:19:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15663,"name":"uint256","nodeType":"ElementaryTypeName","src":"5221:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15666,"indexed":false,"mutability":"mutable","name":"accountBorrows","nameLocation":"5258:14:39","nodeType":"VariableDeclaration","scope":15670,"src":"5250:22:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15665,"name":"uint256","nodeType":"ElementaryTypeName","src":"5250:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15668,"indexed":false,"mutability":"mutable","name":"totalBorrows","nameLocation":"5290:12:39","nodeType":"VariableDeclaration","scope":15670,"src":"5282:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15667,"name":"uint256","nodeType":"ElementaryTypeName","src":"5282:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5146:162:39"},"src":"5129:180:39"},{"anonymous":false,"documentation":{"id":15671,"nodeType":"StructuredDocumentation","src":"5315:278:39","text":" @notice Event emitted when bad debt is accumulated on a market\n @param borrower borrower to \"forgive\"\n @param badDebtDelta amount of new bad debt recorded\n @param badDebtOld previous bad debt value\n @param badDebtNew new bad debt value"},"eventSelector":"90125ffdb441e57c4f6bf69789206424859f206bea5727f2d81ad2470826ef6a","id":15681,"name":"BadDebtIncreased","nameLocation":"5604:16:39","nodeType":"EventDefinition","parameters":{"id":15680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15673,"indexed":true,"mutability":"mutable","name":"borrower","nameLocation":"5637:8:39","nodeType":"VariableDeclaration","scope":15681,"src":"5621:24:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15672,"name":"address","nodeType":"ElementaryTypeName","src":"5621:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15675,"indexed":false,"mutability":"mutable","name":"badDebtDelta","nameLocation":"5655:12:39","nodeType":"VariableDeclaration","scope":15681,"src":"5647:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15674,"name":"uint256","nodeType":"ElementaryTypeName","src":"5647:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15677,"indexed":false,"mutability":"mutable","name":"badDebtOld","nameLocation":"5677:10:39","nodeType":"VariableDeclaration","scope":15681,"src":"5669:18:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15676,"name":"uint256","nodeType":"ElementaryTypeName","src":"5669:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15679,"indexed":false,"mutability":"mutable","name":"badDebtNew","nameLocation":"5697:10:39","nodeType":"VariableDeclaration","scope":15681,"src":"5689:18:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15678,"name":"uint256","nodeType":"ElementaryTypeName","src":"5689:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5620:88:39"},"src":"5598:111:39"},{"anonymous":false,"documentation":{"id":15682,"nodeType":"StructuredDocumentation","src":"5715:175:39","text":" @notice Event emitted when bad debt is recovered via an auction\n @param badDebtOld previous bad debt value\n @param badDebtNew new bad debt value"},"eventSelector":"9e19ec7d2b8f8a94df8cc0072453ace318d221e3cbb2731d0eaa0baac856520f","id":15688,"name":"BadDebtRecovered","nameLocation":"5901:16:39","nodeType":"EventDefinition","parameters":{"id":15687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15684,"indexed":false,"mutability":"mutable","name":"badDebtOld","nameLocation":"5926:10:39","nodeType":"VariableDeclaration","scope":15688,"src":"5918:18:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15683,"name":"uint256","nodeType":"ElementaryTypeName","src":"5918:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15686,"indexed":false,"mutability":"mutable","name":"badDebtNew","nameLocation":"5946:10:39","nodeType":"VariableDeclaration","scope":15688,"src":"5938:18:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15685,"name":"uint256","nodeType":"ElementaryTypeName","src":"5938:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5917:40:39"},"src":"5895:63:39"},{"anonymous":false,"documentation":{"id":15689,"nodeType":"StructuredDocumentation","src":"5964:68:39","text":" @notice Event emitted when a borrow is liquidated"},"eventSelector":"298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb52","id":15701,"name":"LiquidateBorrow","nameLocation":"6043:15:39","nodeType":"EventDefinition","parameters":{"id":15700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15691,"indexed":true,"mutability":"mutable","name":"liquidator","nameLocation":"6084:10:39","nodeType":"VariableDeclaration","scope":15701,"src":"6068:26:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15690,"name":"address","nodeType":"ElementaryTypeName","src":"6068:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15693,"indexed":true,"mutability":"mutable","name":"borrower","nameLocation":"6120:8:39","nodeType":"VariableDeclaration","scope":15701,"src":"6104:24:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15692,"name":"address","nodeType":"ElementaryTypeName","src":"6104:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15695,"indexed":false,"mutability":"mutable","name":"repayAmount","nameLocation":"6146:11:39","nodeType":"VariableDeclaration","scope":15701,"src":"6138:19:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15694,"name":"uint256","nodeType":"ElementaryTypeName","src":"6138:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15697,"indexed":true,"mutability":"mutable","name":"vTokenCollateral","nameLocation":"6183:16:39","nodeType":"VariableDeclaration","scope":15701,"src":"6167:32:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15696,"name":"address","nodeType":"ElementaryTypeName","src":"6167:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15699,"indexed":false,"mutability":"mutable","name":"seizeTokens","nameLocation":"6217:11:39","nodeType":"VariableDeclaration","scope":15701,"src":"6209:19:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15698,"name":"uint256","nodeType":"ElementaryTypeName","src":"6209:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6058:176:39"},"src":"6037:198:39"},{"anonymous":false,"documentation":{"id":15702,"nodeType":"StructuredDocumentation","src":"6269:68:39","text":" @notice Event emitted when comptroller is changed"},"eventSelector":"7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d","id":15710,"name":"NewComptroller","nameLocation":"6348:14:39","nodeType":"EventDefinition","parameters":{"id":15709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15705,"indexed":true,"mutability":"mutable","name":"oldComptroller","nameLocation":"6392:14:39","nodeType":"VariableDeclaration","scope":15710,"src":"6363:43:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"},"typeName":{"id":15704,"nodeType":"UserDefinedTypeName","pathNode":{"id":15703,"name":"ComptrollerInterface","nameLocations":["6363:20:39"],"nodeType":"IdentifierPath","referencedDeclaration":9353,"src":"6363:20:39"},"referencedDeclaration":9353,"src":"6363:20:39","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"visibility":"internal"},{"constant":false,"id":15708,"indexed":true,"mutability":"mutable","name":"newComptroller","nameLocation":"6437:14:39","nodeType":"VariableDeclaration","scope":15710,"src":"6408:43:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"},"typeName":{"id":15707,"nodeType":"UserDefinedTypeName","pathNode":{"id":15706,"name":"ComptrollerInterface","nameLocations":["6408:20:39"],"nodeType":"IdentifierPath","referencedDeclaration":9353,"src":"6408:20:39"},"referencedDeclaration":9353,"src":"6408:20:39","typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}},"visibility":"internal"}],"src":"6362:90:39"},"src":"6342:111:39"},{"anonymous":false,"documentation":{"id":15711,"nodeType":"StructuredDocumentation","src":"6459:83:39","text":" @notice Event emitted when shortfall contract address is changed"},"eventSelector":"6dbf1ff28f860de5edafa4c6505e37c0aba213288cc4166c5352b6d3776c79ef","id":15717,"name":"NewShortfallContract","nameLocation":"6553:20:39","nodeType":"EventDefinition","parameters":{"id":15716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15713,"indexed":true,"mutability":"mutable","name":"oldShortfall","nameLocation":"6590:12:39","nodeType":"VariableDeclaration","scope":15717,"src":"6574:28:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15712,"name":"address","nodeType":"ElementaryTypeName","src":"6574:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15715,"indexed":true,"mutability":"mutable","name":"newShortfall","nameLocation":"6620:12:39","nodeType":"VariableDeclaration","scope":15717,"src":"6604:28:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15714,"name":"address","nodeType":"ElementaryTypeName","src":"6604:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6573:60:39"},"src":"6547:87:39"},{"anonymous":false,"documentation":{"id":15718,"nodeType":"StructuredDocumentation","src":"6640:96:39","text":" @notice Event emitted when protocol share reserve contract address is changed"},"eventSelector":"afec95c8612496c3ecf5dddc71e393528fe29bd145fbaf9c6b496d78d7e2d79b","id":15724,"name":"NewProtocolShareReserve","nameLocation":"6747:23:39","nodeType":"EventDefinition","parameters":{"id":15723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15720,"indexed":true,"mutability":"mutable","name":"oldProtocolShareReserve","nameLocation":"6787:23:39","nodeType":"VariableDeclaration","scope":15724,"src":"6771:39:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15719,"name":"address","nodeType":"ElementaryTypeName","src":"6771:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15722,"indexed":true,"mutability":"mutable","name":"newProtocolShareReserve","nameLocation":"6828:23:39","nodeType":"VariableDeclaration","scope":15724,"src":"6812:39:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15721,"name":"address","nodeType":"ElementaryTypeName","src":"6812:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6770:82:39"},"src":"6741:112:39"},{"anonymous":false,"documentation":{"id":15725,"nodeType":"StructuredDocumentation","src":"6859:74:39","text":" @notice Event emitted when interestRateModel is changed"},"eventSelector":"edffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f926","id":15733,"name":"NewMarketInterestRateModel","nameLocation":"6944:26:39","nodeType":"EventDefinition","parameters":{"id":15732,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15728,"indexed":true,"mutability":"mutable","name":"oldInterestRateModel","nameLocation":"7006:20:39","nodeType":"VariableDeclaration","scope":15733,"src":"6980:46:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"},"typeName":{"id":15727,"nodeType":"UserDefinedTypeName","pathNode":{"id":15726,"name":"InterestRateModel","nameLocations":["6980:17:39"],"nodeType":"IdentifierPath","referencedDeclaration":10266,"src":"6980:17:39"},"referencedDeclaration":10266,"src":"6980:17:39","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},"visibility":"internal"},{"constant":false,"id":15731,"indexed":true,"mutability":"mutable","name":"newInterestRateModel","nameLocation":"7062:20:39","nodeType":"VariableDeclaration","scope":15733,"src":"7036:46:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"},"typeName":{"id":15730,"nodeType":"UserDefinedTypeName","pathNode":{"id":15729,"name":"InterestRateModel","nameLocations":["7036:17:39"],"nodeType":"IdentifierPath","referencedDeclaration":10266,"src":"7036:17:39"},"referencedDeclaration":10266,"src":"7036:17:39","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},"visibility":"internal"}],"src":"6970:118:39"},"src":"6938:151:39"},{"anonymous":false,"documentation":{"id":15734,"nodeType":"StructuredDocumentation","src":"7095:77:39","text":" @notice Event emitted when protocol seize share is changed"},"eventSelector":"f5815f353a60e815cce7553e4f60c533a59d26b1b5504ea4b6db8d60da3e4da2","id":15740,"name":"NewProtocolSeizeShare","nameLocation":"7183:21:39","nodeType":"EventDefinition","parameters":{"id":15739,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15736,"indexed":false,"mutability":"mutable","name":"oldProtocolSeizeShareMantissa","nameLocation":"7213:29:39","nodeType":"VariableDeclaration","scope":15740,"src":"7205:37:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15735,"name":"uint256","nodeType":"ElementaryTypeName","src":"7205:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15738,"indexed":false,"mutability":"mutable","name":"newProtocolSeizeShareMantissa","nameLocation":"7252:29:39","nodeType":"VariableDeclaration","scope":15740,"src":"7244:37:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15737,"name":"uint256","nodeType":"ElementaryTypeName","src":"7244:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7204:78:39"},"src":"7177:106:39"},{"anonymous":false,"documentation":{"id":15741,"nodeType":"StructuredDocumentation","src":"7289:75:39","text":" @notice Event emitted when the reserve factor is changed"},"eventSelector":"aaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460","id":15747,"name":"NewReserveFactor","nameLocation":"7375:16:39","nodeType":"EventDefinition","parameters":{"id":15746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15743,"indexed":false,"mutability":"mutable","name":"oldReserveFactorMantissa","nameLocation":"7400:24:39","nodeType":"VariableDeclaration","scope":15747,"src":"7392:32:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15742,"name":"uint256","nodeType":"ElementaryTypeName","src":"7392:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15745,"indexed":false,"mutability":"mutable","name":"newReserveFactorMantissa","nameLocation":"7434:24:39","nodeType":"VariableDeclaration","scope":15747,"src":"7426:32:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15744,"name":"uint256","nodeType":"ElementaryTypeName","src":"7426:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7391:68:39"},"src":"7369:91:39"},{"anonymous":false,"documentation":{"id":15748,"nodeType":"StructuredDocumentation","src":"7466:68:39","text":" @notice Event emitted when the reserves are added"},"eventSelector":"a91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc5","id":15756,"name":"ReservesAdded","nameLocation":"7545:13:39","nodeType":"EventDefinition","parameters":{"id":15755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15750,"indexed":true,"mutability":"mutable","name":"benefactor","nameLocation":"7575:10:39","nodeType":"VariableDeclaration","scope":15756,"src":"7559:26:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15749,"name":"address","nodeType":"ElementaryTypeName","src":"7559:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15752,"indexed":false,"mutability":"mutable","name":"addAmount","nameLocation":"7595:9:39","nodeType":"VariableDeclaration","scope":15756,"src":"7587:17:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15751,"name":"uint256","nodeType":"ElementaryTypeName","src":"7587:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15754,"indexed":false,"mutability":"mutable","name":"newTotalReserves","nameLocation":"7614:16:39","nodeType":"VariableDeclaration","scope":15756,"src":"7606:24:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15753,"name":"uint256","nodeType":"ElementaryTypeName","src":"7606:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7558:73:39"},"src":"7539:93:39"},{"anonymous":false,"documentation":{"id":15757,"nodeType":"StructuredDocumentation","src":"7638:77:39","text":" @notice Event emitted when the spread reserves are reduced"},"eventSelector":"9cc63bb4ef37ad6a5f5f657dfaf94865531d4234acbc431cc8ac035468f62720","id":15765,"name":"SpreadReservesReduced","nameLocation":"7726:21:39","nodeType":"EventDefinition","parameters":{"id":15764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15759,"indexed":true,"mutability":"mutable","name":"protocolShareReserve","nameLocation":"7764:20:39","nodeType":"VariableDeclaration","scope":15765,"src":"7748:36:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15758,"name":"address","nodeType":"ElementaryTypeName","src":"7748:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15761,"indexed":false,"mutability":"mutable","name":"reduceAmount","nameLocation":"7794:12:39","nodeType":"VariableDeclaration","scope":15765,"src":"7786:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15760,"name":"uint256","nodeType":"ElementaryTypeName","src":"7786:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15763,"indexed":false,"mutability":"mutable","name":"newTotalReserves","nameLocation":"7816:16:39","nodeType":"VariableDeclaration","scope":15765,"src":"7808:24:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15762,"name":"uint256","nodeType":"ElementaryTypeName","src":"7808:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7747:86:39"},"src":"7720:114:39"},{"anonymous":false,"documentation":{"id":15766,"nodeType":"StructuredDocumentation","src":"7840:47:39","text":" @notice EIP20 Transfer event"},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":15774,"name":"Transfer","nameLocation":"7898:8:39","nodeType":"EventDefinition","parameters":{"id":15773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15768,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"7923:4:39","nodeType":"VariableDeclaration","scope":15774,"src":"7907:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15767,"name":"address","nodeType":"ElementaryTypeName","src":"7907:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15770,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"7945:2:39","nodeType":"VariableDeclaration","scope":15774,"src":"7929:18:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15769,"name":"address","nodeType":"ElementaryTypeName","src":"7929:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15772,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"7957:6:39","nodeType":"VariableDeclaration","scope":15774,"src":"7949:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15771,"name":"uint256","nodeType":"ElementaryTypeName","src":"7949:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7906:58:39"},"src":"7892:73:39"},{"anonymous":false,"documentation":{"id":15775,"nodeType":"StructuredDocumentation","src":"7971:47:39","text":" @notice EIP20 Approval event"},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":15783,"name":"Approval","nameLocation":"8029:8:39","nodeType":"EventDefinition","parameters":{"id":15782,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15777,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"8054:5:39","nodeType":"VariableDeclaration","scope":15783,"src":"8038:21:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15776,"name":"address","nodeType":"ElementaryTypeName","src":"8038:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15779,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"8077:7:39","nodeType":"VariableDeclaration","scope":15783,"src":"8061:23:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15778,"name":"address","nodeType":"ElementaryTypeName","src":"8061:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15781,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"8094:6:39","nodeType":"VariableDeclaration","scope":15783,"src":"8086:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15780,"name":"uint256","nodeType":"ElementaryTypeName","src":"8086:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8037:64:39"},"src":"8023:79:39"},{"anonymous":false,"documentation":{"id":15784,"nodeType":"StructuredDocumentation","src":"8108:64:39","text":" @notice Event emitted when healing the borrow"},"eventSelector":"9fe0294717a8efbc6ace1c151b73a4c89982339b2228a27d1ca21394e348986f","id":15792,"name":"HealBorrow","nameLocation":"8183:10:39","nodeType":"EventDefinition","parameters":{"id":15791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15786,"indexed":true,"mutability":"mutable","name":"payer","nameLocation":"8210:5:39","nodeType":"VariableDeclaration","scope":15792,"src":"8194:21:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15785,"name":"address","nodeType":"ElementaryTypeName","src":"8194:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15788,"indexed":true,"mutability":"mutable","name":"borrower","nameLocation":"8233:8:39","nodeType":"VariableDeclaration","scope":15792,"src":"8217:24:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15787,"name":"address","nodeType":"ElementaryTypeName","src":"8217:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15790,"indexed":false,"mutability":"mutable","name":"repayAmount","nameLocation":"8251:11:39","nodeType":"VariableDeclaration","scope":15792,"src":"8243:19:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15789,"name":"uint256","nodeType":"ElementaryTypeName","src":"8243:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8193:70:39"},"src":"8177:87:39"},{"anonymous":false,"documentation":{"id":15793,"nodeType":"StructuredDocumentation","src":"8270:62:39","text":" @notice Event emitted when tokens are swept"},"eventSelector":"35ce4c546a473796a8e70ec2d4af4f2031afe357afa7057b6ea7fa340730e1b2","id":15797,"name":"SweepToken","nameLocation":"8343:10:39","nodeType":"EventDefinition","parameters":{"id":15796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15795,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"8370:5:39","nodeType":"VariableDeclaration","scope":15797,"src":"8354:21:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15794,"name":"address","nodeType":"ElementaryTypeName","src":"8354:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8353:23:39"},"src":"8337:40:39"},{"anonymous":false,"documentation":{"id":15798,"nodeType":"StructuredDocumentation","src":"8383:101:39","text":" @notice Event emitted when reduce reserves slot (block or second) delta is changed"},"eventSelector":"c2ac513cdb57f91eb2bef4db918c285829524f549682b99717c6cb06cc011183","id":15804,"name":"NewReduceReservesBlockDelta","nameLocation":"8495:27:39","nodeType":"EventDefinition","parameters":{"id":15803,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15800,"indexed":false,"mutability":"mutable","name":"oldReduceReservesBlockOrTimestampDelta","nameLocation":"8540:38:39","nodeType":"VariableDeclaration","scope":15804,"src":"8532:46:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15799,"name":"uint256","nodeType":"ElementaryTypeName","src":"8532:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15802,"indexed":false,"mutability":"mutable","name":"newReduceReservesBlockOrTimestampDelta","nameLocation":"8596:38:39","nodeType":"VariableDeclaration","scope":15804,"src":"8588:46:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15801,"name":"uint256","nodeType":"ElementaryTypeName","src":"8588:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8522:118:39"},"src":"8489:152:39"},{"anonymous":false,"documentation":{"id":15805,"nodeType":"StructuredDocumentation","src":"8647:78:39","text":" @notice Event emitted when liquidation reserves are reduced"},"eventSelector":"3ac0548d62d3fa3c9a817cd33899b9acacd57e8958ebe51bc7d9a79f26a8a5db","id":15813,"name":"ProtocolSeize","nameLocation":"8736:13:39","nodeType":"EventDefinition","parameters":{"id":15812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15807,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"8766:4:39","nodeType":"VariableDeclaration","scope":15813,"src":"8750:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15806,"name":"address","nodeType":"ElementaryTypeName","src":"8750:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15809,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"8788:2:39","nodeType":"VariableDeclaration","scope":15813,"src":"8772:18:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15808,"name":"address","nodeType":"ElementaryTypeName","src":"8772:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15811,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"8800:6:39","nodeType":"VariableDeclaration","scope":15813,"src":"8792:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15810,"name":"uint256","nodeType":"ElementaryTypeName","src":"8792:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8749:58:39"},"src":"8730:78:39"},{"functionSelector":"a0712d68","id":15820,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"8853:4:39","nodeType":"FunctionDefinition","parameters":{"id":15816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15815,"mutability":"mutable","name":"mintAmount","nameLocation":"8866:10:39","nodeType":"VariableDeclaration","scope":15820,"src":"8858:18:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15814,"name":"uint256","nodeType":"ElementaryTypeName","src":"8858:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8857:20:39"},"returnParameters":{"id":15819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15818,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15820,"src":"8904:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15817,"name":"uint256","nodeType":"ElementaryTypeName","src":"8904:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8903:9:39"},"scope":16106,"src":"8844:69:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"23323e03","id":15829,"implemented":false,"kind":"function","modifiers":[],"name":"mintBehalf","nameLocation":"8928:10:39","nodeType":"FunctionDefinition","parameters":{"id":15825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15822,"mutability":"mutable","name":"minter","nameLocation":"8947:6:39","nodeType":"VariableDeclaration","scope":15829,"src":"8939:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15821,"name":"address","nodeType":"ElementaryTypeName","src":"8939:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15824,"mutability":"mutable","name":"mintAllowed","nameLocation":"8963:11:39","nodeType":"VariableDeclaration","scope":15829,"src":"8955:19:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15823,"name":"uint256","nodeType":"ElementaryTypeName","src":"8955:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8938:37:39"},"returnParameters":{"id":15828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15827,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15829,"src":"9002:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15826,"name":"uint256","nodeType":"ElementaryTypeName","src":"9002:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9001:9:39"},"scope":16106,"src":"8919:92:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"db006a75","id":15836,"implemented":false,"kind":"function","modifiers":[],"name":"redeem","nameLocation":"9026:6:39","nodeType":"FunctionDefinition","parameters":{"id":15832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15831,"mutability":"mutable","name":"redeemTokens","nameLocation":"9041:12:39","nodeType":"VariableDeclaration","scope":15836,"src":"9033:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15830,"name":"uint256","nodeType":"ElementaryTypeName","src":"9033:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9032:22:39"},"returnParameters":{"id":15835,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15834,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15836,"src":"9081:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15833,"name":"uint256","nodeType":"ElementaryTypeName","src":"9081:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9080:9:39"},"scope":16106,"src":"9017:73:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"210bc052","id":15845,"implemented":false,"kind":"function","modifiers":[],"name":"redeemBehalf","nameLocation":"9105:12:39","nodeType":"FunctionDefinition","parameters":{"id":15841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15838,"mutability":"mutable","name":"redeemer","nameLocation":"9126:8:39","nodeType":"VariableDeclaration","scope":15845,"src":"9118:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15837,"name":"address","nodeType":"ElementaryTypeName","src":"9118:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15840,"mutability":"mutable","name":"redeemTokens","nameLocation":"9144:12:39","nodeType":"VariableDeclaration","scope":15845,"src":"9136:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15839,"name":"uint256","nodeType":"ElementaryTypeName","src":"9136:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9117:40:39"},"returnParameters":{"id":15844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15843,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15845,"src":"9184:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15842,"name":"uint256","nodeType":"ElementaryTypeName","src":"9184:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9183:9:39"},"scope":16106,"src":"9096:97:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"852a12e3","id":15852,"implemented":false,"kind":"function","modifiers":[],"name":"redeemUnderlying","nameLocation":"9208:16:39","nodeType":"FunctionDefinition","parameters":{"id":15848,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15847,"mutability":"mutable","name":"redeemAmount","nameLocation":"9233:12:39","nodeType":"VariableDeclaration","scope":15852,"src":"9225:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15846,"name":"uint256","nodeType":"ElementaryTypeName","src":"9225:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9224:22:39"},"returnParameters":{"id":15851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15850,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15852,"src":"9273:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15849,"name":"uint256","nodeType":"ElementaryTypeName","src":"9273:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9272:9:39"},"scope":16106,"src":"9199:83:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"df3a516e","id":15861,"implemented":false,"kind":"function","modifiers":[],"name":"redeemUnderlyingBehalf","nameLocation":"9297:22:39","nodeType":"FunctionDefinition","parameters":{"id":15857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15854,"mutability":"mutable","name":"redeemer","nameLocation":"9328:8:39","nodeType":"VariableDeclaration","scope":15861,"src":"9320:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15853,"name":"address","nodeType":"ElementaryTypeName","src":"9320:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15856,"mutability":"mutable","name":"redeemAmount","nameLocation":"9346:12:39","nodeType":"VariableDeclaration","scope":15861,"src":"9338:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15855,"name":"uint256","nodeType":"ElementaryTypeName","src":"9338:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9319:40:39"},"returnParameters":{"id":15860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15859,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15861,"src":"9386:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15858,"name":"uint256","nodeType":"ElementaryTypeName","src":"9386:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9385:9:39"},"scope":16106,"src":"9288:107:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"c5ebeaec","id":15868,"implemented":false,"kind":"function","modifiers":[],"name":"borrow","nameLocation":"9410:6:39","nodeType":"FunctionDefinition","parameters":{"id":15864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15863,"mutability":"mutable","name":"borrowAmount","nameLocation":"9425:12:39","nodeType":"VariableDeclaration","scope":15868,"src":"9417:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15862,"name":"uint256","nodeType":"ElementaryTypeName","src":"9417:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9416:22:39"},"returnParameters":{"id":15867,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15866,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15868,"src":"9465:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15865,"name":"uint256","nodeType":"ElementaryTypeName","src":"9465:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9464:9:39"},"scope":16106,"src":"9401:73:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"856e5bb3","id":15877,"implemented":false,"kind":"function","modifiers":[],"name":"borrowBehalf","nameLocation":"9489:12:39","nodeType":"FunctionDefinition","parameters":{"id":15873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15870,"mutability":"mutable","name":"borrwwer","nameLocation":"9510:8:39","nodeType":"VariableDeclaration","scope":15877,"src":"9502:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15869,"name":"address","nodeType":"ElementaryTypeName","src":"9502:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15872,"mutability":"mutable","name":"borrowAmount","nameLocation":"9528:12:39","nodeType":"VariableDeclaration","scope":15877,"src":"9520:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15871,"name":"uint256","nodeType":"ElementaryTypeName","src":"9520:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9501:40:39"},"returnParameters":{"id":15876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15875,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15877,"src":"9568:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15874,"name":"uint256","nodeType":"ElementaryTypeName","src":"9568:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9567:9:39"},"scope":16106,"src":"9480:97:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"0e752702","id":15884,"implemented":false,"kind":"function","modifiers":[],"name":"repayBorrow","nameLocation":"9592:11:39","nodeType":"FunctionDefinition","parameters":{"id":15880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15879,"mutability":"mutable","name":"repayAmount","nameLocation":"9612:11:39","nodeType":"VariableDeclaration","scope":15884,"src":"9604:19:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15878,"name":"uint256","nodeType":"ElementaryTypeName","src":"9604:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9603:21:39"},"returnParameters":{"id":15883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15882,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15884,"src":"9651:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15881,"name":"uint256","nodeType":"ElementaryTypeName","src":"9651:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9650:9:39"},"scope":16106,"src":"9583:77:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"2608f818","id":15893,"implemented":false,"kind":"function","modifiers":[],"name":"repayBorrowBehalf","nameLocation":"9675:17:39","nodeType":"FunctionDefinition","parameters":{"id":15889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15886,"mutability":"mutable","name":"borrower","nameLocation":"9701:8:39","nodeType":"VariableDeclaration","scope":15893,"src":"9693:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15885,"name":"address","nodeType":"ElementaryTypeName","src":"9693:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15888,"mutability":"mutable","name":"repayAmount","nameLocation":"9719:11:39","nodeType":"VariableDeclaration","scope":15893,"src":"9711:19:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15887,"name":"uint256","nodeType":"ElementaryTypeName","src":"9711:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9692:39:39"},"returnParameters":{"id":15892,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15891,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15893,"src":"9758:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15890,"name":"uint256","nodeType":"ElementaryTypeName","src":"9758:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9757:9:39"},"scope":16106,"src":"9666:101:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"f5e3c462","id":15905,"implemented":false,"kind":"function","modifiers":[],"name":"liquidateBorrow","nameLocation":"9782:15:39","nodeType":"FunctionDefinition","parameters":{"id":15901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15895,"mutability":"mutable","name":"borrower","nameLocation":"9815:8:39","nodeType":"VariableDeclaration","scope":15905,"src":"9807:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15894,"name":"address","nodeType":"ElementaryTypeName","src":"9807:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15897,"mutability":"mutable","name":"repayAmount","nameLocation":"9841:11:39","nodeType":"VariableDeclaration","scope":15905,"src":"9833:19:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15896,"name":"uint256","nodeType":"ElementaryTypeName","src":"9833:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15900,"mutability":"mutable","name":"vTokenCollateral","nameLocation":"9878:16:39","nodeType":"VariableDeclaration","scope":15905,"src":"9862:32:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"},"typeName":{"id":15899,"nodeType":"UserDefinedTypeName","pathNode":{"id":15898,"name":"VTokenInterface","nameLocations":["9862:15:39"],"nodeType":"IdentifierPath","referencedDeclaration":16106,"src":"9862:15:39"},"referencedDeclaration":16106,"src":"9862:15:39","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}},"visibility":"internal"}],"src":"9797:103:39"},"returnParameters":{"id":15904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15903,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15905,"src":"9927:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15902,"name":"uint256","nodeType":"ElementaryTypeName","src":"9927:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9926:9:39"},"scope":16106,"src":"9773:163:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"44fe6ffe","id":15914,"implemented":false,"kind":"function","modifiers":[],"name":"healBorrow","nameLocation":"9951:10:39","nodeType":"FunctionDefinition","parameters":{"id":15912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15907,"mutability":"mutable","name":"payer","nameLocation":"9970:5:39","nodeType":"VariableDeclaration","scope":15914,"src":"9962:13:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15906,"name":"address","nodeType":"ElementaryTypeName","src":"9962:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15909,"mutability":"mutable","name":"borrower","nameLocation":"9985:8:39","nodeType":"VariableDeclaration","scope":15914,"src":"9977:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15908,"name":"address","nodeType":"ElementaryTypeName","src":"9977:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15911,"mutability":"mutable","name":"repayAmount","nameLocation":"10003:11:39","nodeType":"VariableDeclaration","scope":15914,"src":"9995:19:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15910,"name":"uint256","nodeType":"ElementaryTypeName","src":"9995:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9961:54:39"},"returnParameters":{"id":15913,"nodeType":"ParameterList","parameters":[],"src":"10032:0:39"},"scope":16106,"src":"9942:91:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"8bbdb6db","id":15928,"implemented":false,"kind":"function","modifiers":[],"name":"forceLiquidateBorrow","nameLocation":"10048:20:39","nodeType":"FunctionDefinition","parameters":{"id":15926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15916,"mutability":"mutable","name":"liquidator","nameLocation":"10086:10:39","nodeType":"VariableDeclaration","scope":15928,"src":"10078:18:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15915,"name":"address","nodeType":"ElementaryTypeName","src":"10078:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15918,"mutability":"mutable","name":"borrower","nameLocation":"10114:8:39","nodeType":"VariableDeclaration","scope":15928,"src":"10106:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15917,"name":"address","nodeType":"ElementaryTypeName","src":"10106:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15920,"mutability":"mutable","name":"repayAmount","nameLocation":"10140:11:39","nodeType":"VariableDeclaration","scope":15928,"src":"10132:19:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15919,"name":"uint256","nodeType":"ElementaryTypeName","src":"10132:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15923,"mutability":"mutable","name":"vTokenCollateral","nameLocation":"10177:16:39","nodeType":"VariableDeclaration","scope":15928,"src":"10161:32:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"},"typeName":{"id":15922,"nodeType":"UserDefinedTypeName","pathNode":{"id":15921,"name":"VTokenInterface","nameLocations":["10161:15:39"],"nodeType":"IdentifierPath","referencedDeclaration":16106,"src":"10161:15:39"},"referencedDeclaration":16106,"src":"10161:15:39","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}},"visibility":"internal"},{"constant":false,"id":15925,"mutability":"mutable","name":"skipCloseFactorCheck","nameLocation":"10208:20:39","nodeType":"VariableDeclaration","scope":15928,"src":"10203:25:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15924,"name":"bool","nodeType":"ElementaryTypeName","src":"10203:4:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10068:166:39"},"returnParameters":{"id":15927,"nodeType":"ParameterList","parameters":[],"src":"10251:0:39"},"scope":16106,"src":"10039:213:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"b2a02ff1","id":15937,"implemented":false,"kind":"function","modifiers":[],"name":"seize","nameLocation":"10267:5:39","nodeType":"FunctionDefinition","parameters":{"id":15935,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15930,"mutability":"mutable","name":"liquidator","nameLocation":"10281:10:39","nodeType":"VariableDeclaration","scope":15937,"src":"10273:18:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15929,"name":"address","nodeType":"ElementaryTypeName","src":"10273:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15932,"mutability":"mutable","name":"borrower","nameLocation":"10301:8:39","nodeType":"VariableDeclaration","scope":15937,"src":"10293:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15931,"name":"address","nodeType":"ElementaryTypeName","src":"10293:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15934,"mutability":"mutable","name":"seizeTokens","nameLocation":"10319:11:39","nodeType":"VariableDeclaration","scope":15937,"src":"10311:19:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15933,"name":"uint256","nodeType":"ElementaryTypeName","src":"10311:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10272:59:39"},"returnParameters":{"id":15936,"nodeType":"ParameterList","parameters":[],"src":"10348:0:39"},"scope":16106,"src":"10258:91:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"a9059cbb","id":15946,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"10364:8:39","nodeType":"FunctionDefinition","parameters":{"id":15942,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15939,"mutability":"mutable","name":"dst","nameLocation":"10381:3:39","nodeType":"VariableDeclaration","scope":15946,"src":"10373:11:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15938,"name":"address","nodeType":"ElementaryTypeName","src":"10373:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15941,"mutability":"mutable","name":"amount","nameLocation":"10394:6:39","nodeType":"VariableDeclaration","scope":15946,"src":"10386:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15940,"name":"uint256","nodeType":"ElementaryTypeName","src":"10386:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10372:29:39"},"returnParameters":{"id":15945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15944,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15946,"src":"10428:4:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15943,"name":"bool","nodeType":"ElementaryTypeName","src":"10428:4:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10427:6:39"},"scope":16106,"src":"10355:79:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"23b872dd","id":15957,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"10449:12:39","nodeType":"FunctionDefinition","parameters":{"id":15953,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15948,"mutability":"mutable","name":"src","nameLocation":"10470:3:39","nodeType":"VariableDeclaration","scope":15957,"src":"10462:11:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15947,"name":"address","nodeType":"ElementaryTypeName","src":"10462:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15950,"mutability":"mutable","name":"dst","nameLocation":"10483:3:39","nodeType":"VariableDeclaration","scope":15957,"src":"10475:11:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15949,"name":"address","nodeType":"ElementaryTypeName","src":"10475:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15952,"mutability":"mutable","name":"amount","nameLocation":"10496:6:39","nodeType":"VariableDeclaration","scope":15957,"src":"10488:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15951,"name":"uint256","nodeType":"ElementaryTypeName","src":"10488:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10461:42:39"},"returnParameters":{"id":15956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15955,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15957,"src":"10530:4:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15954,"name":"bool","nodeType":"ElementaryTypeName","src":"10530:4:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10529:6:39"},"scope":16106,"src":"10440:96:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"a6afed95","id":15962,"implemented":false,"kind":"function","modifiers":[],"name":"accrueInterest","nameLocation":"10551:14:39","nodeType":"FunctionDefinition","parameters":{"id":15958,"nodeType":"ParameterList","parameters":[],"src":"10565:2:39"},"returnParameters":{"id":15961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15960,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15962,"src":"10594:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15959,"name":"uint256","nodeType":"ElementaryTypeName","src":"10594:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10593:9:39"},"scope":16106,"src":"10542:61:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"1be19560","id":15968,"implemented":false,"kind":"function","modifiers":[],"name":"sweepToken","nameLocation":"10618:10:39","nodeType":"FunctionDefinition","parameters":{"id":15966,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15965,"mutability":"mutable","name":"token","nameLocation":"10647:5:39","nodeType":"VariableDeclaration","scope":15968,"src":"10629:23:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":15964,"nodeType":"UserDefinedTypeName","pathNode":{"id":15963,"name":"IERC20Upgradeable","nameLocations":["10629:17:39"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"10629:17:39"},"referencedDeclaration":1352,"src":"10629:17:39","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"internal"}],"src":"10628:25:39"},"returnParameters":{"id":15967,"nodeType":"ParameterList","parameters":[],"src":"10670:0:39"},"scope":16106,"src":"10609:62:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"1c446983","id":15973,"implemented":false,"kind":"function","modifiers":[],"name":"setReserveFactor","nameLocation":"10717:16:39","nodeType":"FunctionDefinition","parameters":{"id":15971,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15970,"mutability":"mutable","name":"newReserveFactorMantissa","nameLocation":"10742:24:39","nodeType":"VariableDeclaration","scope":15973,"src":"10734:32:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15969,"name":"uint256","nodeType":"ElementaryTypeName","src":"10734:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10733:34:39"},"returnParameters":{"id":15972,"nodeType":"ParameterList","parameters":[],"src":"10784:0:39"},"scope":16106,"src":"10708:77:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"07e27959","id":15978,"implemented":false,"kind":"function","modifiers":[],"name":"reduceReserves","nameLocation":"10800:14:39","nodeType":"FunctionDefinition","parameters":{"id":15976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15975,"mutability":"mutable","name":"reduceAmount","nameLocation":"10823:12:39","nodeType":"VariableDeclaration","scope":15978,"src":"10815:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15974,"name":"uint256","nodeType":"ElementaryTypeName","src":"10815:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10814:22:39"},"returnParameters":{"id":15977,"nodeType":"ParameterList","parameters":[],"src":"10853:0:39"},"scope":16106,"src":"10791:63:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"bd6d894d","id":15983,"implemented":false,"kind":"function","modifiers":[],"name":"exchangeRateCurrent","nameLocation":"10869:19:39","nodeType":"FunctionDefinition","parameters":{"id":15979,"nodeType":"ParameterList","parameters":[],"src":"10888:2:39"},"returnParameters":{"id":15982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15981,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15983,"src":"10917:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15980,"name":"uint256","nodeType":"ElementaryTypeName","src":"10917:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10916:9:39"},"scope":16106,"src":"10860:66:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"17bfdfbc","id":15990,"implemented":false,"kind":"function","modifiers":[],"name":"borrowBalanceCurrent","nameLocation":"10941:20:39","nodeType":"FunctionDefinition","parameters":{"id":15986,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15985,"mutability":"mutable","name":"account","nameLocation":"10970:7:39","nodeType":"VariableDeclaration","scope":15990,"src":"10962:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15984,"name":"address","nodeType":"ElementaryTypeName","src":"10962:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10961:17:39"},"returnParameters":{"id":15989,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15988,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15990,"src":"11005:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15987,"name":"uint256","nodeType":"ElementaryTypeName","src":"11005:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11004:9:39"},"scope":16106,"src":"10932:82:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"8bcd4016","id":15996,"implemented":false,"kind":"function","modifiers":[],"name":"setInterestRateModel","nameLocation":"11029:20:39","nodeType":"FunctionDefinition","parameters":{"id":15994,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15993,"mutability":"mutable","name":"newInterestRateModel","nameLocation":"11068:20:39","nodeType":"VariableDeclaration","scope":15996,"src":"11050:38:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"},"typeName":{"id":15992,"nodeType":"UserDefinedTypeName","pathNode":{"id":15991,"name":"InterestRateModel","nameLocations":["11050:17:39"],"nodeType":"IdentifierPath","referencedDeclaration":10266,"src":"11050:17:39"},"referencedDeclaration":10266,"src":"11050:17:39","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$10266","typeString":"contract InterestRateModel"}},"visibility":"internal"}],"src":"11049:40:39"},"returnParameters":{"id":15995,"nodeType":"ParameterList","parameters":[],"src":"11106:0:39"},"scope":16106,"src":"11020:87:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"7821a514","id":16001,"implemented":false,"kind":"function","modifiers":[],"name":"addReserves","nameLocation":"11122:11:39","nodeType":"FunctionDefinition","parameters":{"id":15999,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15998,"mutability":"mutable","name":"addAmount","nameLocation":"11142:9:39","nodeType":"VariableDeclaration","scope":16001,"src":"11134:17:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15997,"name":"uint256","nodeType":"ElementaryTypeName","src":"11134:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11133:19:39"},"returnParameters":{"id":16000,"nodeType":"ParameterList","parameters":[],"src":"11169:0:39"},"scope":16106,"src":"11113:57:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"73acee98","id":16006,"implemented":false,"kind":"function","modifiers":[],"name":"totalBorrowsCurrent","nameLocation":"11185:19:39","nodeType":"FunctionDefinition","parameters":{"id":16002,"nodeType":"ParameterList","parameters":[],"src":"11204:2:39"},"returnParameters":{"id":16005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16004,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16006,"src":"11233:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16003,"name":"uint256","nodeType":"ElementaryTypeName","src":"11233:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11232:9:39"},"scope":16106,"src":"11176:66:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"3af9e669","id":16013,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOfUnderlying","nameLocation":"11257:19:39","nodeType":"FunctionDefinition","parameters":{"id":16009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16008,"mutability":"mutable","name":"owner","nameLocation":"11285:5:39","nodeType":"VariableDeclaration","scope":16013,"src":"11277:13:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16007,"name":"address","nodeType":"ElementaryTypeName","src":"11277:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11276:15:39"},"returnParameters":{"id":16012,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16011,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16013,"src":"11318:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16010,"name":"uint256","nodeType":"ElementaryTypeName","src":"11318:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11317:9:39"},"scope":16106,"src":"11248:79:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"095ea7b3","id":16022,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"11342:7:39","nodeType":"FunctionDefinition","parameters":{"id":16018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16015,"mutability":"mutable","name":"spender","nameLocation":"11358:7:39","nodeType":"VariableDeclaration","scope":16022,"src":"11350:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16014,"name":"address","nodeType":"ElementaryTypeName","src":"11350:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16017,"mutability":"mutable","name":"amount","nameLocation":"11375:6:39","nodeType":"VariableDeclaration","scope":16022,"src":"11367:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16016,"name":"uint256","nodeType":"ElementaryTypeName","src":"11367:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11349:33:39"},"returnParameters":{"id":16021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16020,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16022,"src":"11409:4:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16019,"name":"bool","nodeType":"ElementaryTypeName","src":"11409:4:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11408:6:39"},"scope":16106,"src":"11333:82:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"39509351","id":16031,"implemented":false,"kind":"function","modifiers":[],"name":"increaseAllowance","nameLocation":"11430:17:39","nodeType":"FunctionDefinition","parameters":{"id":16027,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16024,"mutability":"mutable","name":"spender","nameLocation":"11456:7:39","nodeType":"VariableDeclaration","scope":16031,"src":"11448:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16023,"name":"address","nodeType":"ElementaryTypeName","src":"11448:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16026,"mutability":"mutable","name":"addedValue","nameLocation":"11473:10:39","nodeType":"VariableDeclaration","scope":16031,"src":"11465:18:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16025,"name":"uint256","nodeType":"ElementaryTypeName","src":"11465:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11447:37:39"},"returnParameters":{"id":16030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16029,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16031,"src":"11511:4:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16028,"name":"bool","nodeType":"ElementaryTypeName","src":"11511:4:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11510:6:39"},"scope":16106,"src":"11421:96:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"a457c2d7","id":16040,"implemented":false,"kind":"function","modifiers":[],"name":"decreaseAllowance","nameLocation":"11532:17:39","nodeType":"FunctionDefinition","parameters":{"id":16036,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16033,"mutability":"mutable","name":"spender","nameLocation":"11558:7:39","nodeType":"VariableDeclaration","scope":16040,"src":"11550:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16032,"name":"address","nodeType":"ElementaryTypeName","src":"11550:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16035,"mutability":"mutable","name":"subtractedValue","nameLocation":"11575:15:39","nodeType":"VariableDeclaration","scope":16040,"src":"11567:23:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16034,"name":"uint256","nodeType":"ElementaryTypeName","src":"11567:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11549:42:39"},"returnParameters":{"id":16039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16038,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16040,"src":"11618:4:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16037,"name":"bool","nodeType":"ElementaryTypeName","src":"11618:4:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11617:6:39"},"scope":16106,"src":"11523:101:39","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"functionSelector":"dd62ed3e","id":16049,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"11639:9:39","nodeType":"FunctionDefinition","parameters":{"id":16045,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16042,"mutability":"mutable","name":"owner","nameLocation":"11657:5:39","nodeType":"VariableDeclaration","scope":16049,"src":"11649:13:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16041,"name":"address","nodeType":"ElementaryTypeName","src":"11649:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16044,"mutability":"mutable","name":"spender","nameLocation":"11672:7:39","nodeType":"VariableDeclaration","scope":16049,"src":"11664:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16043,"name":"address","nodeType":"ElementaryTypeName","src":"11664:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11648:32:39"},"returnParameters":{"id":16048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16047,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16049,"src":"11712:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16046,"name":"uint256","nodeType":"ElementaryTypeName","src":"11712:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11711:9:39"},"scope":16106,"src":"11630:91:39","stateMutability":"view","virtual":true,"visibility":"external"},{"functionSelector":"70a08231","id":16056,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"11736:9:39","nodeType":"FunctionDefinition","parameters":{"id":16052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16051,"mutability":"mutable","name":"owner","nameLocation":"11754:5:39","nodeType":"VariableDeclaration","scope":16056,"src":"11746:13:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16050,"name":"address","nodeType":"ElementaryTypeName","src":"11746:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11745:15:39"},"returnParameters":{"id":16055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16054,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16056,"src":"11792:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16053,"name":"uint256","nodeType":"ElementaryTypeName","src":"11792:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11791:9:39"},"scope":16106,"src":"11727:74:39","stateMutability":"view","virtual":true,"visibility":"external"},{"functionSelector":"c37f68e2","id":16069,"implemented":false,"kind":"function","modifiers":[],"name":"getAccountSnapshot","nameLocation":"11816:18:39","nodeType":"FunctionDefinition","parameters":{"id":16059,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16058,"mutability":"mutable","name":"account","nameLocation":"11843:7:39","nodeType":"VariableDeclaration","scope":16069,"src":"11835:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16057,"name":"address","nodeType":"ElementaryTypeName","src":"11835:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11834:17:39"},"returnParameters":{"id":16068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16061,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16069,"src":"11883:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16060,"name":"uint256","nodeType":"ElementaryTypeName","src":"11883:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16063,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16069,"src":"11892:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16062,"name":"uint256","nodeType":"ElementaryTypeName","src":"11892:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16065,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16069,"src":"11901:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16064,"name":"uint256","nodeType":"ElementaryTypeName","src":"11901:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16067,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16069,"src":"11910:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16066,"name":"uint256","nodeType":"ElementaryTypeName","src":"11910:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11882:36:39"},"scope":16106,"src":"11807:112:39","stateMutability":"view","virtual":true,"visibility":"external"},{"functionSelector":"f8f9da28","id":16074,"implemented":false,"kind":"function","modifiers":[],"name":"borrowRatePerBlock","nameLocation":"11934:18:39","nodeType":"FunctionDefinition","parameters":{"id":16070,"nodeType":"ParameterList","parameters":[],"src":"11952:2:39"},"returnParameters":{"id":16073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16072,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16074,"src":"11986:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16071,"name":"uint256","nodeType":"ElementaryTypeName","src":"11986:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11985:9:39"},"scope":16106,"src":"11925:70:39","stateMutability":"view","virtual":true,"visibility":"external"},{"functionSelector":"ae9d70b0","id":16079,"implemented":false,"kind":"function","modifiers":[],"name":"supplyRatePerBlock","nameLocation":"12010:18:39","nodeType":"FunctionDefinition","parameters":{"id":16075,"nodeType":"ParameterList","parameters":[],"src":"12028:2:39"},"returnParameters":{"id":16078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16077,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16079,"src":"12062:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16076,"name":"uint256","nodeType":"ElementaryTypeName","src":"12062:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12061:9:39"},"scope":16106,"src":"12001:70:39","stateMutability":"view","virtual":true,"visibility":"external"},{"functionSelector":"95dd9193","id":16086,"implemented":false,"kind":"function","modifiers":[],"name":"borrowBalanceStored","nameLocation":"12086:19:39","nodeType":"FunctionDefinition","parameters":{"id":16082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16081,"mutability":"mutable","name":"account","nameLocation":"12114:7:39","nodeType":"VariableDeclaration","scope":16086,"src":"12106:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16080,"name":"address","nodeType":"ElementaryTypeName","src":"12106:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12105:17:39"},"returnParameters":{"id":16085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16084,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16086,"src":"12154:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16083,"name":"uint256","nodeType":"ElementaryTypeName","src":"12154:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12153:9:39"},"scope":16106,"src":"12077:86:39","stateMutability":"view","virtual":true,"visibility":"external"},{"functionSelector":"182df0f5","id":16091,"implemented":false,"kind":"function","modifiers":[],"name":"exchangeRateStored","nameLocation":"12178:18:39","nodeType":"FunctionDefinition","parameters":{"id":16087,"nodeType":"ParameterList","parameters":[],"src":"12196:2:39"},"returnParameters":{"id":16090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16089,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16091,"src":"12230:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16088,"name":"uint256","nodeType":"ElementaryTypeName","src":"12230:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12229:9:39"},"scope":16106,"src":"12169:70:39","stateMutability":"view","virtual":true,"visibility":"external"},{"functionSelector":"3b1d21a2","id":16096,"implemented":false,"kind":"function","modifiers":[],"name":"getCash","nameLocation":"12254:7:39","nodeType":"FunctionDefinition","parameters":{"id":16092,"nodeType":"ParameterList","parameters":[],"src":"12261:2:39"},"returnParameters":{"id":16095,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16094,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16096,"src":"12295:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16093,"name":"uint256","nodeType":"ElementaryTypeName","src":"12295:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12294:9:39"},"scope":16106,"src":"12245:59:39","stateMutability":"view","virtual":true,"visibility":"external"},{"body":{"id":16104,"nodeType":"Block","src":"12483:28:39","statements":[{"expression":{"hexValue":"74727565","id":16102,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12500:4:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":16101,"id":16103,"nodeType":"Return","src":"12493:11:39"}]},"documentation":{"id":16097,"nodeType":"StructuredDocumentation","src":"12310:111:39","text":" @notice Indicator that this is a VToken contract (for inspection)\n @return Always true"},"functionSelector":"3d9ea3a1","id":16105,"implemented":true,"kind":"function","modifiers":[],"name":"isVToken","nameLocation":"12435:8:39","nodeType":"FunctionDefinition","parameters":{"id":16098,"nodeType":"ParameterList","parameters":[],"src":"12443:2:39"},"returnParameters":{"id":16101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16100,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16105,"src":"12477:4:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16099,"name":"bool","nodeType":"ElementaryTypeName","src":"12477:4:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12476:6:39"},"scope":16106,"src":"12426:85:39","stateMutability":"pure","virtual":true,"visibility":"external"}],"scope":16107,"src":"4132:8381:39","usedErrors":[],"usedEvents":[15624,15635,15646,15657,15670,15681,15688,15701,15710,15717,15724,15733,15740,15747,15756,15765,15774,15783,15792,15797,15804,15813]}],"src":"41:12473:39"},"id":39},"@venusprotocol/isolated-pools/contracts/lib/constants.sol":{"ast":{"absolutePath":"@venusprotocol/isolated-pools/contracts/lib/constants.sol","exportedSymbols":{"EXP_SCALE":[16116],"MANTISSA_ONE":[16120],"SECONDS_PER_YEAR":[16112]},"id":16121,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":16108,"literals":["solidity","^","0.8",".25"],"nodeType":"PragmaDirective","src":"41:24:40"},{"constant":true,"id":16112,"mutability":"constant","name":"SECONDS_PER_YEAR","nameLocation":"136:16:40","nodeType":"VariableDeclaration","scope":16121,"src":"119:46:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16110,"name":"uint256","nodeType":"ElementaryTypeName","src":"119:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"33315f3533365f303030","id":16111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"155:10:40","typeDescriptions":{"typeIdentifier":"t_rational_31536000_by_1","typeString":"int_const 31536000"},"value":"31_536_000"},"visibility":"internal"},{"constant":true,"id":16116,"mutability":"constant","name":"EXP_SCALE","nameLocation":"275:9:40","nodeType":"VariableDeclaration","scope":16121,"src":"258:33:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16114,"name":"uint256","nodeType":"ElementaryTypeName","src":"258:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653138","id":16115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"287:4:40","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":16120,"mutability":"constant","name":"MANTISSA_ONE","nameLocation":"394:12:40","nodeType":"VariableDeclaration","scope":16121,"src":"377:41:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16118,"name":"uint256","nodeType":"ElementaryTypeName","src":"377:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"id":16119,"name":"EXP_SCALE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16116,"src":"409:9:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"41:379:40"},"id":40},"@venusprotocol/isolated-pools/contracts/lib/validators.sol":{"ast":{"absolutePath":"@venusprotocol/isolated-pools/contracts/lib/validators.sol","exportedSymbols":{"ZeroAddressNotAllowed":[16125],"ensureNonzeroAddress":[16143]},"id":16144,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":16122,"literals":["solidity","0.8",".25"],"nodeType":"PragmaDirective","src":"41:23:41"},{"documentation":{"id":16123,"nodeType":"StructuredDocumentation","src":"66:85:41","text":"@notice Thrown if the supplied address is a zero address where it is not allowed"},"errorSelector":"8579befe","id":16125,"name":"ZeroAddressNotAllowed","nameLocation":"157:21:41","nodeType":"ErrorDefinition","parameters":{"id":16124,"nodeType":"ParameterList","parameters":[],"src":"178:2:41"},"src":"151:30:41"},{"body":{"id":16142,"nodeType":"Block","src":"438:83:41","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":16136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16131,"name":"address_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16128,"src":"448:8:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":16134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"468:1:41","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":16133,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"460:7:41","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16132,"name":"address","nodeType":"ElementaryTypeName","src":"460:7:41","typeDescriptions":{}}},"id":16135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"460:10:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"448:22:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16141,"nodeType":"IfStatement","src":"444:75:41","trueBody":{"id":16140,"nodeType":"Block","src":"472:47:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16137,"name":"ZeroAddressNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16125,"src":"489:21:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":16138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"489:23:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16139,"nodeType":"RevertStatement","src":"482:30:41"}]}}]},"documentation":{"id":16126,"nodeType":"StructuredDocumentation","src":"183:202:41","text":"@notice Checks if the provided address is nonzero, reverts otherwise\n @param address_ Address to check\n @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address"},"id":16143,"implemented":true,"kind":"freeFunction","modifiers":[],"name":"ensureNonzeroAddress","nameLocation":"394:20:41","nodeType":"FunctionDefinition","parameters":{"id":16129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16128,"mutability":"mutable","name":"address_","nameLocation":"423:8:41","nodeType":"VariableDeclaration","scope":16143,"src":"415:16:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16127,"name":"address","nodeType":"ElementaryTypeName","src":"415:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"414:18:41"},"returnParameters":{"id":16130,"nodeType":"ParameterList","parameters":[],"src":"438:0:41"},"scope":16144,"src":"385:136:41","stateMutability":"pure","virtual":false,"visibility":"internal"}],"src":"41:481:41"},"id":41},"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol":{"ast":{"absolutePath":"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol","exportedSymbols":{"BoundValidatorInterface":[16195],"OracleInterface":[16153],"ResilientOracleInterface":[16173],"TwapInterface":[16183]},"id":16196,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":16145,"literals":["solidity","^","0.8",".25"],"nodeType":"PragmaDirective","src":"41:24:42"},{"abstract":false,"baseContracts":[],"canonicalName":"OracleInterface","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":16153,"linearizedBaseContracts":[16153],"name":"OracleInterface","nameLocation":"77:15:42","nodeType":"ContractDefinition","nodes":[{"functionSelector":"41976e09","id":16152,"implemented":false,"kind":"function","modifiers":[],"name":"getPrice","nameLocation":"108:8:42","nodeType":"FunctionDefinition","parameters":{"id":16148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16147,"mutability":"mutable","name":"asset","nameLocation":"125:5:42","nodeType":"VariableDeclaration","scope":16152,"src":"117:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16146,"name":"address","nodeType":"ElementaryTypeName","src":"117:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"116:15:42"},"returnParameters":{"id":16151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16150,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16152,"src":"155:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16149,"name":"uint256","nodeType":"ElementaryTypeName","src":"155:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"154:9:42"},"scope":16153,"src":"99:65:42","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":16196,"src":"67:99:42","usedErrors":[],"usedEvents":[]},{"abstract":false,"baseContracts":[{"baseName":{"id":16154,"name":"OracleInterface","nameLocations":["206:15:42"],"nodeType":"IdentifierPath","referencedDeclaration":16153,"src":"206:15:42"},"id":16155,"nodeType":"InheritanceSpecifier","src":"206:15:42"}],"canonicalName":"ResilientOracleInterface","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":16173,"linearizedBaseContracts":[16173,16153],"name":"ResilientOracleInterface","nameLocation":"178:24:42","nodeType":"ContractDefinition","nodes":[{"functionSelector":"96e85ced","id":16160,"implemented":false,"kind":"function","modifiers":[],"name":"updatePrice","nameLocation":"237:11:42","nodeType":"FunctionDefinition","parameters":{"id":16158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16157,"mutability":"mutable","name":"vToken","nameLocation":"257:6:42","nodeType":"VariableDeclaration","scope":16160,"src":"249:14:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16156,"name":"address","nodeType":"ElementaryTypeName","src":"249:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"248:16:42"},"returnParameters":{"id":16159,"nodeType":"ParameterList","parameters":[],"src":"273:0:42"},"scope":16173,"src":"228:46:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"b62cad69","id":16165,"implemented":false,"kind":"function","modifiers":[],"name":"updateAssetPrice","nameLocation":"289:16:42","nodeType":"FunctionDefinition","parameters":{"id":16163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16162,"mutability":"mutable","name":"asset","nameLocation":"314:5:42","nodeType":"VariableDeclaration","scope":16165,"src":"306:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16161,"name":"address","nodeType":"ElementaryTypeName","src":"306:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"305:15:42"},"returnParameters":{"id":16164,"nodeType":"ParameterList","parameters":[],"src":"329:0:42"},"scope":16173,"src":"280:50:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"fc57d4df","id":16172,"implemented":false,"kind":"function","modifiers":[],"name":"getUnderlyingPrice","nameLocation":"345:18:42","nodeType":"FunctionDefinition","parameters":{"id":16168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16167,"mutability":"mutable","name":"vToken","nameLocation":"372:6:42","nodeType":"VariableDeclaration","scope":16172,"src":"364:14:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16166,"name":"address","nodeType":"ElementaryTypeName","src":"364:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"363:16:42"},"returnParameters":{"id":16171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16170,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16172,"src":"403:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16169,"name":"uint256","nodeType":"ElementaryTypeName","src":"403:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"402:9:42"},"scope":16173,"src":"336:76:42","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":16196,"src":"168:246:42","usedErrors":[],"usedEvents":[]},{"abstract":false,"baseContracts":[{"baseName":{"id":16174,"name":"OracleInterface","nameLocations":["443:15:42"],"nodeType":"IdentifierPath","referencedDeclaration":16153,"src":"443:15:42"},"id":16175,"nodeType":"InheritanceSpecifier","src":"443:15:42"}],"canonicalName":"TwapInterface","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":16183,"linearizedBaseContracts":[16183,16153],"name":"TwapInterface","nameLocation":"426:13:42","nodeType":"ContractDefinition","nodes":[{"functionSelector":"725068a5","id":16182,"implemented":false,"kind":"function","modifiers":[],"name":"updateTwap","nameLocation":"474:10:42","nodeType":"FunctionDefinition","parameters":{"id":16178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16177,"mutability":"mutable","name":"asset","nameLocation":"493:5:42","nodeType":"VariableDeclaration","scope":16182,"src":"485:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16176,"name":"address","nodeType":"ElementaryTypeName","src":"485:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"484:15:42"},"returnParameters":{"id":16181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16180,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16182,"src":"518:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16179,"name":"uint256","nodeType":"ElementaryTypeName","src":"518:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"517:9:42"},"scope":16183,"src":"465:62:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":16196,"src":"416:113:42","usedErrors":[],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"BoundValidatorInterface","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":16195,"linearizedBaseContracts":[16195],"name":"BoundValidatorInterface","nameLocation":"541:23:42","nodeType":"ContractDefinition","nodes":[{"functionSelector":"97c7033e","id":16194,"implemented":false,"kind":"function","modifiers":[],"name":"validatePriceWithAnchorPrice","nameLocation":"580:28:42","nodeType":"FunctionDefinition","parameters":{"id":16190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16185,"mutability":"mutable","name":"asset","nameLocation":"626:5:42","nodeType":"VariableDeclaration","scope":16194,"src":"618:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16184,"name":"address","nodeType":"ElementaryTypeName","src":"618:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16187,"mutability":"mutable","name":"reporterPrice","nameLocation":"649:13:42","nodeType":"VariableDeclaration","scope":16194,"src":"641:21:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16186,"name":"uint256","nodeType":"ElementaryTypeName","src":"641:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16189,"mutability":"mutable","name":"anchorPrice","nameLocation":"680:11:42","nodeType":"VariableDeclaration","scope":16194,"src":"672:19:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16188,"name":"uint256","nodeType":"ElementaryTypeName","src":"672:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"608:89:42"},"returnParameters":{"id":16193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16192,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16194,"src":"721:4:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16191,"name":"bool","nodeType":"ElementaryTypeName","src":"721:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"720:6:42"},"scope":16195,"src":"571:156:42","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":16196,"src":"531:198:42","usedErrors":[],"usedEvents":[]}],"src":"41:689:42"},"id":42},"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol":{"ast":{"absolutePath":"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol","exportedSymbols":{"IProtocolShareReserve":[16212]},"id":16213,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":16197,"literals":["solidity","^","0.8",".25"],"nodeType":"PragmaDirective","src":"41:24:43"},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolShareReserve","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":16212,"linearizedBaseContracts":[16212],"name":"IProtocolShareReserve","nameLocation":"77:21:43","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IProtocolShareReserve.IncomeType","documentation":{"id":16198,"nodeType":"StructuredDocumentation","src":"105:51:43","text":"@notice it represents the type of vToken income"},"id":16201,"members":[{"id":16199,"name":"SPREAD","nameLocation":"187:6:43","nodeType":"EnumValue","src":"187:6:43"},{"id":16200,"name":"LIQUIDATION","nameLocation":"203:11:43","nodeType":"EnumValue","src":"203:11:43"}],"name":"IncomeType","nameLocation":"166:10:43","nodeType":"EnumDefinition","src":"161:59:43"},{"functionSelector":"16faecec","id":16211,"implemented":false,"kind":"function","modifiers":[],"name":"updateAssetsState","nameLocation":"235:17:43","nodeType":"FunctionDefinition","parameters":{"id":16209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16203,"mutability":"mutable","name":"comptroller","nameLocation":"270:11:43","nodeType":"VariableDeclaration","scope":16211,"src":"262:19:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16202,"name":"address","nodeType":"ElementaryTypeName","src":"262:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16205,"mutability":"mutable","name":"asset","nameLocation":"299:5:43","nodeType":"VariableDeclaration","scope":16211,"src":"291:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16204,"name":"address","nodeType":"ElementaryTypeName","src":"291:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16208,"mutability":"mutable","name":"incomeType","nameLocation":"325:10:43","nodeType":"VariableDeclaration","scope":16211,"src":"314:21:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_IncomeType_$16201","typeString":"enum IProtocolShareReserve.IncomeType"},"typeName":{"id":16207,"nodeType":"UserDefinedTypeName","pathNode":{"id":16206,"name":"IncomeType","nameLocations":["314:10:43"],"nodeType":"IdentifierPath","referencedDeclaration":16201,"src":"314:10:43"},"referencedDeclaration":16201,"src":"314:10:43","typeDescriptions":{"typeIdentifier":"t_enum$_IncomeType_$16201","typeString":"enum IProtocolShareReserve.IncomeType"}},"visibility":"internal"}],"src":"252:89:43"},"returnParameters":{"id":16210,"nodeType":"ParameterList","parameters":[],"src":"350:0:43"},"scope":16212,"src":"226:125:43","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":16213,"src":"67:286:43","usedErrors":[],"usedEvents":[]}],"src":"41:313:43"},"id":43},"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol":{"ast":{"absolutePath":"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol","exportedSymbols":{"SECONDS_PER_YEAR":[16333],"TimeManagerV8":[16319]},"id":16320,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":16214,"literals":["solidity","0.8",".25"],"nodeType":"PragmaDirective","src":"41:23:44"},{"absolutePath":"@venusprotocol/solidity-utilities/contracts/constants.sol","file":"./constants.sol","id":16216,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16320,"sourceUnit":16334,"src":"66:51:44","symbolAliases":[{"foreign":{"id":16215,"name":"SECONDS_PER_YEAR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16333,"src":"75:16:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"TimeManagerV8","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":16319,"internalFunctionIDs":{"16308":1,"16318":2},"linearizedBaseContracts":[16319],"name":"TimeManagerV8","nameLocation":"137:13:44","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":16217,"nodeType":"StructuredDocumentation","src":"157:151:44","text":"@notice Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored\n @custom:oz-upgrades-unsafe-allow state-variable-immutable"},"functionSelector":"6857249c","id":16219,"mutability":"immutable","name":"blocksOrSecondsPerYear","nameLocation":"338:22:44","nodeType":"VariableDeclaration","scope":16319,"src":"313:47:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16218,"name":"uint256","nodeType":"ElementaryTypeName","src":"313:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":16220,"nodeType":"StructuredDocumentation","src":"367:125:44","text":"@notice Acknowledges if a contract is time based or not\n @custom:oz-upgrades-unsafe-allow state-variable-immutable"},"functionSelector":"c7ad0895","id":16222,"mutability":"immutable","name":"isTimeBased","nameLocation":"519:11:44","nodeType":"VariableDeclaration","scope":16319,"src":"497:33:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16221,"name":"bool","nodeType":"ElementaryTypeName","src":"497:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"documentation":{"id":16223,"nodeType":"StructuredDocumentation","src":"537:153:44","text":"@notice Stores the current block timestamp or block number depending on isTimeBased\n @custom:oz-upgrades-unsafe-allow state-variable-immutable"},"id":16229,"mutability":"immutable","name":"_getCurrentSlot","nameLocation":"747:15:44","nodeType":"VariableDeclaration","scope":16319,"src":"695:67:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"},"typeName":{"id":16228,"nodeType":"FunctionTypeName","parameterTypes":{"id":16224,"nodeType":"ParameterList","parameters":[],"src":"703:2:44"},"returnParameterTypes":{"id":16227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16226,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16228,"src":"720:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16225,"name":"uint256","nodeType":"ElementaryTypeName","src":"720:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"719:9:44"},"src":"695:41:44","stateMutability":"view","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"},"visibility":"internal"},"visibility":"private"},{"constant":false,"documentation":{"id":16230,"nodeType":"StructuredDocumentation","src":"769:253:44","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":16234,"mutability":"mutable","name":"__gap","nameLocation":"1047:5:44","nodeType":"VariableDeclaration","scope":16319,"src":"1027:25:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$48_storage","typeString":"uint256[48]"},"typeName":{"baseType":{"id":16231,"name":"uint256","nodeType":"ElementaryTypeName","src":"1027:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16233,"length":{"hexValue":"3438","id":16232,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1035:2:44","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},"nodeType":"ArrayTypeName","src":"1027:11:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$48_storage_ptr","typeString":"uint256[48]"}},"visibility":"private"},{"documentation":{"id":16235,"nodeType":"StructuredDocumentation","src":"1059:50:44","text":"@notice Thrown when blocks per year is invalid"},"errorSelector":"09c8f7ec","id":16237,"name":"InvalidBlocksPerYear","nameLocation":"1120:20:44","nodeType":"ErrorDefinition","parameters":{"id":16236,"nodeType":"ParameterList","parameters":[],"src":"1140:2:44"},"src":"1114:29:44"},{"documentation":{"id":16238,"nodeType":"StructuredDocumentation","src":"1149:66:44","text":"@notice Thrown when time based but blocks per year is provided"},"errorSelector":"ae0fcab3","id":16240,"name":"InvalidTimeBasedConfiguration","nameLocation":"1226:29:44","nodeType":"ErrorDefinition","parameters":{"id":16239,"nodeType":"ParameterList","parameters":[],"src":"1255:2:44"},"src":"1220:38:44"},{"body":{"id":16287,"nodeType":"Block","src":"1883:415:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":16253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1897:11:44","subExpression":{"id":16248,"name":"timeBased_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16243,"src":"1898:10:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16250,"name":"blocksPerYear_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16245,"src":"1912:14:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":16251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1930:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1912:19:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1897:34:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16258,"nodeType":"IfStatement","src":"1893:94:44","trueBody":{"id":16257,"nodeType":"Block","src":"1933:54:44","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16254,"name":"InvalidBlocksPerYear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16237,"src":"1954:20:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":16255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1954:22:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16256,"nodeType":"RevertStatement","src":"1947:29:44"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":16263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16259,"name":"timeBased_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16243,"src":"2001:10:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16260,"name":"blocksPerYear_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16245,"src":"2015:14:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":16261,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2033:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2015:19:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2001:33:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16268,"nodeType":"IfStatement","src":"1997:102:44","trueBody":{"id":16267,"nodeType":"Block","src":"2036:63:44","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16264,"name":"InvalidTimeBasedConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16240,"src":"2057:29:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":16265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2057:31:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16266,"nodeType":"RevertStatement","src":"2050:38:44"}]}},{"expression":{"id":16271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16269,"name":"isTimeBased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16222,"src":"2109:11:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16270,"name":"timeBased_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16243,"src":"2123:10:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2109:24:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16272,"nodeType":"ExpressionStatement","src":"2109:24:44"},{"expression":{"id":16278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16273,"name":"blocksOrSecondsPerYear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16219,"src":"2143:22:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":16274,"name":"timeBased_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16243,"src":"2168:10:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":16276,"name":"blocksPerYear_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16245,"src":"2200:14:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"2168:46:44","trueExpression":{"id":16275,"name":"SECONDS_PER_YEAR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16333,"src":"2181:16:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2143:71:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16279,"nodeType":"ExpressionStatement","src":"2143:71:44"},{"expression":{"id":16285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16280,"name":"_getCurrentSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16229,"src":"2224:15:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":16281,"name":"timeBased_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16243,"src":"2242:10:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":16283,"name":"_getBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16318,"src":"2276:15:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":16284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"2242:49:44","trueExpression":{"id":16282,"name":"_getBlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16308,"src":"2255:18:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"src":"2224:67:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":16286,"nodeType":"ExpressionStatement","src":"2224:67:44"}]},"documentation":{"id":16241,"nodeType":"StructuredDocumentation","src":"1264:561:44","text":" @param timeBased_ A boolean indicating whether the contract is based on time or block\n If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\n @param blocksPerYear_ The number of blocks per year\n @custom:error InvalidBlocksPerYear is thrown if blocksPerYear entered is zero and timeBased is false\n @custom:error InvalidTimeBasedConfiguration is thrown if blocksPerYear entered is non zero and timeBased is true\n @custom:oz-upgrades-unsafe-allow constructor"},"id":16288,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":16246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16243,"mutability":"mutable","name":"timeBased_","nameLocation":"1847:10:44","nodeType":"VariableDeclaration","scope":16288,"src":"1842:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16242,"name":"bool","nodeType":"ElementaryTypeName","src":"1842:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":16245,"mutability":"mutable","name":"blocksPerYear_","nameLocation":"1867:14:44","nodeType":"VariableDeclaration","scope":16288,"src":"1859:22:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16244,"name":"uint256","nodeType":"ElementaryTypeName","src":"1859:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1841:41:44"},"returnParameters":{"id":16247,"nodeType":"ParameterList","parameters":[],"src":"1883:0:44"},"scope":16319,"src":"1830:468:44","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16297,"nodeType":"Block","src":"2522:41:44","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":16294,"name":"_getCurrentSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16229,"src":"2539:15:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":16295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2539:17:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16293,"id":16296,"nodeType":"Return","src":"2532:24:44"}]},"documentation":{"id":16289,"nodeType":"StructuredDocumentation","src":"2304:138:44","text":" @dev Function to simply retrieve block number or block timestamp\n @return Current block number or block timestamp"},"functionSelector":"e1d146fb","id":16298,"implemented":true,"kind":"function","modifiers":[],"name":"getBlockNumberOrTimestamp","nameLocation":"2456:25:44","nodeType":"FunctionDefinition","parameters":{"id":16290,"nodeType":"ParameterList","parameters":[],"src":"2481:2:44"},"returnParameters":{"id":16293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16292,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16298,"src":"2513:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16291,"name":"uint256","nodeType":"ElementaryTypeName","src":"2513:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2512:9:44"},"scope":16319,"src":"2447:116:44","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":16307,"nodeType":"Block","src":"2736:39:44","statements":[{"expression":{"expression":{"id":16304,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2753:5:44","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":16305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2759:9:44","memberName":"timestamp","nodeType":"MemberAccess","src":"2753:15:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16303,"id":16306,"nodeType":"Return","src":"2746:22:44"}]},"documentation":{"id":16299,"nodeType":"StructuredDocumentation","src":"2569:101:44","text":" @dev Returns the current timestamp in seconds\n @return The current timestamp"},"id":16308,"implemented":true,"kind":"function","modifiers":[],"name":"_getBlockTimestamp","nameLocation":"2684:18:44","nodeType":"FunctionDefinition","parameters":{"id":16300,"nodeType":"ParameterList","parameters":[],"src":"2702:2:44"},"returnParameters":{"id":16303,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16302,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16308,"src":"2727:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16301,"name":"uint256","nodeType":"ElementaryTypeName","src":"2727:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2726:9:44"},"scope":16319,"src":"2675:100:44","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":16317,"nodeType":"Block","src":"2940:36:44","statements":[{"expression":{"expression":{"id":16314,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2957:5:44","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":16315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2963:6:44","memberName":"number","nodeType":"MemberAccess","src":"2957:12:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16313,"id":16316,"nodeType":"Return","src":"2950:19:44"}]},"documentation":{"id":16309,"nodeType":"StructuredDocumentation","src":"2781:96:44","text":" @dev Returns the current block number\n @return The current block number"},"id":16318,"implemented":true,"kind":"function","modifiers":[],"name":"_getBlockNumber","nameLocation":"2891:15:44","nodeType":"FunctionDefinition","parameters":{"id":16310,"nodeType":"ParameterList","parameters":[],"src":"2906:2:44"},"returnParameters":{"id":16313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16312,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16318,"src":"2931:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16311,"name":"uint256","nodeType":"ElementaryTypeName","src":"2931:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2930:9:44"},"scope":16319,"src":"2882:94:44","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":16320,"src":"119:2859:44","usedErrors":[16237,16240],"usedEvents":[]}],"src":"41:2938:44"},"id":44},"@venusprotocol/solidity-utilities/contracts/constants.sol":{"ast":{"absolutePath":"@venusprotocol/solidity-utilities/contracts/constants.sol","exportedSymbols":{"EXP_SCALE":[16325],"MANTISSA_ONE":[16329],"SECONDS_PER_YEAR":[16333]},"id":16334,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":16321,"literals":["solidity","^","0.8",".25"],"nodeType":"PragmaDirective","src":"41:24:45"},{"constant":true,"id":16325,"mutability":"constant","name":"EXP_SCALE","nameLocation":"174:9:45","nodeType":"VariableDeclaration","scope":16334,"src":"157:33:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16323,"name":"uint256","nodeType":"ElementaryTypeName","src":"157:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653138","id":16324,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"186:4:45","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":16329,"mutability":"constant","name":"MANTISSA_ONE","nameLocation":"293:12:45","nodeType":"VariableDeclaration","scope":16334,"src":"276:41:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16327,"name":"uint256","nodeType":"ElementaryTypeName","src":"276:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"id":16328,"name":"EXP_SCALE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16325,"src":"308:9:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":16333,"mutability":"constant","name":"SECONDS_PER_YEAR","nameLocation":"389:16:45","nodeType":"VariableDeclaration","scope":16334,"src":"372:46:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16331,"name":"uint256","nodeType":"ElementaryTypeName","src":"372:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"33315f3533365f303030","id":16332,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"408:10:45","typeDescriptions":{"typeIdentifier":"t_rational_31536000_by_1","typeString":"int_const 31536000"},"value":"31_536_000"},"visibility":"internal"}],"src":"41:379:45"},"id":45},"@venusprotocol/solidity-utilities/contracts/validators.sol":{"ast":{"absolutePath":"@venusprotocol/solidity-utilities/contracts/validators.sol","exportedSymbols":{"ZeroAddressNotAllowed":[16338],"ZeroValueNotAllowed":[16341],"ensureNonzeroAddress":[16359],"ensureNonzeroValue":[16374]},"id":16375,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":16335,"literals":["solidity","0.8",".25"],"nodeType":"PragmaDirective","src":"41:23:46"},{"documentation":{"id":16336,"nodeType":"StructuredDocumentation","src":"66:85:46","text":"@notice Thrown if the supplied address is a zero address where it is not allowed"},"errorSelector":"8579befe","id":16338,"name":"ZeroAddressNotAllowed","nameLocation":"157:21:46","nodeType":"ErrorDefinition","parameters":{"id":16337,"nodeType":"ParameterList","parameters":[],"src":"178:2:46"},"src":"151:30:46"},{"documentation":{"id":16339,"nodeType":"StructuredDocumentation","src":"183:70:46","text":"@notice Thrown if the supplied value is 0 where it is not allowed"},"errorSelector":"9cf8540c","id":16341,"name":"ZeroValueNotAllowed","nameLocation":"259:19:46","nodeType":"ErrorDefinition","parameters":{"id":16340,"nodeType":"ParameterList","parameters":[],"src":"278:2:46"},"src":"253:28:46"},{"body":{"id":16358,"nodeType":"Block","src":"538:83:46","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":16352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16347,"name":"address_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16344,"src":"548:8:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":16350,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"568:1:46","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":16349,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"560:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16348,"name":"address","nodeType":"ElementaryTypeName","src":"560:7:46","typeDescriptions":{}}},"id":16351,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"560:10:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"548:22:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16357,"nodeType":"IfStatement","src":"544:75:46","trueBody":{"id":16356,"nodeType":"Block","src":"572:47:46","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16353,"name":"ZeroAddressNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16338,"src":"589:21:46","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":16354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"589:23:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16355,"nodeType":"RevertStatement","src":"582:30:46"}]}}]},"documentation":{"id":16342,"nodeType":"StructuredDocumentation","src":"283:202:46","text":"@notice Checks if the provided address is nonzero, reverts otherwise\n @param address_ Address to check\n @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address"},"id":16359,"implemented":true,"kind":"freeFunction","modifiers":[],"name":"ensureNonzeroAddress","nameLocation":"494:20:46","nodeType":"FunctionDefinition","parameters":{"id":16345,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16344,"mutability":"mutable","name":"address_","nameLocation":"523:8:46","nodeType":"VariableDeclaration","scope":16359,"src":"515:16:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16343,"name":"address","nodeType":"ElementaryTypeName","src":"515:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"514:18:46"},"returnParameters":{"id":16346,"nodeType":"ParameterList","parameters":[],"src":"538:0:46"},"scope":16375,"src":"485:136:46","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":16373,"nodeType":"Block","src":"851:70:46","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16365,"name":"value_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16362,"src":"861:6:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":16366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"871:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"861:11:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16372,"nodeType":"IfStatement","src":"857:62:46","trueBody":{"id":16371,"nodeType":"Block","src":"874:45:46","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16368,"name":"ZeroValueNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16341,"src":"891:19:46","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":16369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"891:21:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16370,"nodeType":"RevertStatement","src":"884:28:46"}]}}]},"documentation":{"id":16360,"nodeType":"StructuredDocumentation","src":"623:179:46","text":"@notice Checks if the provided value is nonzero, reverts otherwise\n @param value_ Value to check\n @custom:error ZeroValueNotAllowed is thrown if the provided value is 0"},"id":16374,"implemented":true,"kind":"freeFunction","modifiers":[],"name":"ensureNonzeroValue","nameLocation":"811:18:46","nodeType":"FunctionDefinition","parameters":{"id":16363,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16362,"mutability":"mutable","name":"value_","nameLocation":"838:6:46","nodeType":"VariableDeclaration","scope":16374,"src":"830:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16361,"name":"uint256","nodeType":"ElementaryTypeName","src":"830:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"829:16:46"},"returnParameters":{"id":16364,"nodeType":"ParameterList","parameters":[],"src":"851:0:46"},"scope":16375,"src":"802:119:46","stateMutability":"pure","virtual":false,"visibility":"internal"}],"src":"41:881:46"},"id":46},"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol":{"ast":{"absolutePath":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol","exportedSymbols":{"IPrime":[16613],"PrimeStorageV1":[16757]},"id":16614,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":16376,"literals":["solidity","^","0.8",".25"],"nodeType":"PragmaDirective","src":"41:24:47"},{"absolutePath":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol","file":"../PrimeStorage.sol","id":16378,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16614,"sourceUnit":16758,"src":"67:53:47","symbolAliases":[{"foreign":{"id":16377,"name":"PrimeStorageV1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16757,"src":"76:14:47","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IPrime","contractDependencies":[],"contractKind":"interface","documentation":{"id":16379,"nodeType":"StructuredDocumentation","src":"122:78:47","text":" @title IPrime\n @author Venus\n @notice Interface for Prime Token"},"fullyImplemented":false,"id":16613,"linearizedBaseContracts":[16613],"name":"IPrime","nameLocation":"211:6:47","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IPrime.APRInfo","id":16400,"members":[{"constant":false,"id":16381,"mutability":"mutable","name":"supplyAPR","nameLocation":"298:9:47","nodeType":"VariableDeclaration","scope":16400,"src":"290:17:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16380,"name":"uint256","nodeType":"ElementaryTypeName","src":"290:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16383,"mutability":"mutable","name":"borrowAPR","nameLocation":"366:9:47","nodeType":"VariableDeclaration","scope":16400,"src":"358:17:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16382,"name":"uint256","nodeType":"ElementaryTypeName","src":"358:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16385,"mutability":"mutable","name":"totalScore","nameLocation":"430:10:47","nodeType":"VariableDeclaration","scope":16400,"src":"422:18:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16384,"name":"uint256","nodeType":"ElementaryTypeName","src":"422:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16387,"mutability":"mutable","name":"userScore","nameLocation":"487:9:47","nodeType":"VariableDeclaration","scope":16400,"src":"479:17:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16386,"name":"uint256","nodeType":"ElementaryTypeName","src":"479:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16389,"mutability":"mutable","name":"xvsBalanceForScore","nameLocation":"556:18:47","nodeType":"VariableDeclaration","scope":16400,"src":"548:26:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16388,"name":"uint256","nodeType":"ElementaryTypeName","src":"548:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16391,"mutability":"mutable","name":"capital","nameLocation":"623:7:47","nodeType":"VariableDeclaration","scope":16400,"src":"615:15:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16390,"name":"uint256","nodeType":"ElementaryTypeName","src":"615:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16393,"mutability":"mutable","name":"cappedSupply","nameLocation":"685:12:47","nodeType":"VariableDeclaration","scope":16400,"src":"677:20:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16392,"name":"uint256","nodeType":"ElementaryTypeName","src":"677:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16395,"mutability":"mutable","name":"cappedBorrow","nameLocation":"752:12:47","nodeType":"VariableDeclaration","scope":16400,"src":"744:20:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16394,"name":"uint256","nodeType":"ElementaryTypeName","src":"744:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16397,"mutability":"mutable","name":"supplyCapUSD","nameLocation":"822:12:47","nodeType":"VariableDeclaration","scope":16400,"src":"814:20:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16396,"name":"uint256","nodeType":"ElementaryTypeName","src":"814:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16399,"mutability":"mutable","name":"borrowCapUSD","nameLocation":"892:12:47","nodeType":"VariableDeclaration","scope":16400,"src":"884:20:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16398,"name":"uint256","nodeType":"ElementaryTypeName","src":"884:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"APRInfo","nameLocation":"231:7:47","nodeType":"StructDefinition","scope":16613,"src":"224:687:47","visibility":"public"},{"canonicalName":"IPrime.Capital","id":16411,"members":[{"constant":false,"id":16402,"mutability":"mutable","name":"capital","nameLocation":"981:7:47","nodeType":"VariableDeclaration","scope":16411,"src":"973:15:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16401,"name":"uint256","nodeType":"ElementaryTypeName","src":"973:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16404,"mutability":"mutable","name":"cappedSupply","nameLocation":"1043:12:47","nodeType":"VariableDeclaration","scope":16411,"src":"1035:20:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16403,"name":"uint256","nodeType":"ElementaryTypeName","src":"1035:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16406,"mutability":"mutable","name":"cappedBorrow","nameLocation":"1110:12:47","nodeType":"VariableDeclaration","scope":16411,"src":"1102:20:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16405,"name":"uint256","nodeType":"ElementaryTypeName","src":"1102:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16408,"mutability":"mutable","name":"supplyCapUSD","nameLocation":"1180:12:47","nodeType":"VariableDeclaration","scope":16411,"src":"1172:20:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16407,"name":"uint256","nodeType":"ElementaryTypeName","src":"1172:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16410,"mutability":"mutable","name":"borrowCapUSD","nameLocation":"1250:12:47","nodeType":"VariableDeclaration","scope":16411,"src":"1242:20:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16409,"name":"uint256","nodeType":"ElementaryTypeName","src":"1242:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Capital","nameLocation":"924:7:47","nodeType":"StructDefinition","scope":16613,"src":"917:352:47","visibility":"public"},{"documentation":{"id":16412,"nodeType":"StructuredDocumentation","src":"1275:262:47","text":" @notice Returns boosted pending interest accrued for a user for all markets\n @param user the account for which to get the accrued interests\n @return pendingRewards the number of underlying tokens accrued by the user for all markets"},"functionSelector":"f6ed2017","id":16421,"implemented":false,"kind":"function","modifiers":[],"name":"getPendingRewards","nameLocation":"1551:17:47","nodeType":"FunctionDefinition","parameters":{"id":16415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16414,"mutability":"mutable","name":"user","nameLocation":"1577:4:47","nodeType":"VariableDeclaration","scope":16421,"src":"1569:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16413,"name":"address","nodeType":"ElementaryTypeName","src":"1569:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1568:14:47"},"returnParameters":{"id":16420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16419,"mutability":"mutable","name":"pendingRewards","nameLocation":"1639:14:47","nodeType":"VariableDeclaration","scope":16421,"src":"1601:52:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_PendingReward_$16648_memory_ptr_$dyn_memory_ptr","typeString":"struct PrimeStorageV1.PendingReward[]"},"typeName":{"baseType":{"id":16417,"nodeType":"UserDefinedTypeName","pathNode":{"id":16416,"name":"PrimeStorageV1.PendingReward","nameLocations":["1601:14:47","1616:13:47"],"nodeType":"IdentifierPath","referencedDeclaration":16648,"src":"1601:28:47"},"referencedDeclaration":16648,"src":"1601:28:47","typeDescriptions":{"typeIdentifier":"t_struct$_PendingReward_$16648_storage_ptr","typeString":"struct PrimeStorageV1.PendingReward"}},"id":16418,"nodeType":"ArrayTypeName","src":"1601:30:47","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_PendingReward_$16648_storage_$dyn_storage_ptr","typeString":"struct PrimeStorageV1.PendingReward[]"}},"visibility":"internal"}],"src":"1600:54:47"},"scope":16613,"src":"1542:113:47","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":16422,"nodeType":"StructuredDocumentation","src":"1661:137:47","text":" @notice Update total score of multiple users and market\n @param users accounts for which we need to update score"},"functionSelector":"24e6baf2","id":16428,"implemented":false,"kind":"function","modifiers":[],"name":"updateScores","nameLocation":"1812:12:47","nodeType":"FunctionDefinition","parameters":{"id":16426,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16425,"mutability":"mutable","name":"users","nameLocation":"1842:5:47","nodeType":"VariableDeclaration","scope":16428,"src":"1825:22:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":16423,"name":"address","nodeType":"ElementaryTypeName","src":"1825:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16424,"nodeType":"ArrayTypeName","src":"1825:9:47","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1824:24:47"},"returnParameters":{"id":16427,"nodeType":"ParameterList","parameters":[],"src":"1857:0:47"},"scope":16613,"src":"1803:55:47","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":16429,"nodeType":"StructuredDocumentation","src":"1864:226:47","text":" @notice Update value of alpha\n @param _alphaNumerator numerator of alpha. If alpha is 0.5 then numerator is 1\n @param _alphaDenominator denominator of alpha. If alpha is 0.5 then denominator is 2"},"functionSelector":"e18f8822","id":16436,"implemented":false,"kind":"function","modifiers":[],"name":"updateAlpha","nameLocation":"2104:11:47","nodeType":"FunctionDefinition","parameters":{"id":16434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16431,"mutability":"mutable","name":"_alphaNumerator","nameLocation":"2124:15:47","nodeType":"VariableDeclaration","scope":16436,"src":"2116:23:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":16430,"name":"uint128","nodeType":"ElementaryTypeName","src":"2116:7:47","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":16433,"mutability":"mutable","name":"_alphaDenominator","nameLocation":"2149:17:47","nodeType":"VariableDeclaration","scope":16436,"src":"2141:25:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":16432,"name":"uint128","nodeType":"ElementaryTypeName","src":"2141:7:47","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"2115:52:47"},"returnParameters":{"id":16435,"nodeType":"ParameterList","parameters":[],"src":"2176:0:47"},"scope":16613,"src":"2095:82:47","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":16437,"nodeType":"StructuredDocumentation","src":"2183:276:47","text":" @notice Update multipliers for a market\n @param market address of the market vToken\n @param supplyMultiplier new supply multiplier for the market, scaled by 1e18\n @param borrowMultiplier new borrow multiplier for the market, scaled by 1e18"},"functionSelector":"55d36c98","id":16446,"implemented":false,"kind":"function","modifiers":[],"name":"updateMultipliers","nameLocation":"2473:17:47","nodeType":"FunctionDefinition","parameters":{"id":16444,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16439,"mutability":"mutable","name":"market","nameLocation":"2499:6:47","nodeType":"VariableDeclaration","scope":16446,"src":"2491:14:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16438,"name":"address","nodeType":"ElementaryTypeName","src":"2491:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16441,"mutability":"mutable","name":"supplyMultiplier","nameLocation":"2515:16:47","nodeType":"VariableDeclaration","scope":16446,"src":"2507:24:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16440,"name":"uint256","nodeType":"ElementaryTypeName","src":"2507:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16443,"mutability":"mutable","name":"borrowMultiplier","nameLocation":"2541:16:47","nodeType":"VariableDeclaration","scope":16446,"src":"2533:24:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16442,"name":"uint256","nodeType":"ElementaryTypeName","src":"2533:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2490:68:47"},"returnParameters":{"id":16445,"nodeType":"ParameterList","parameters":[],"src":"2567:0:47"},"scope":16613,"src":"2464:104:47","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":16447,"nodeType":"StructuredDocumentation","src":"2574:345:47","text":" @notice Add a market to prime program\n @param comptroller address of the comptroller\n @param market address of the market vToken\n @param supplyMultiplier the multiplier for supply cap. It should be converted to 1e18\n @param borrowMultiplier the multiplier for borrow cap. It should be converted to 1e18"},"functionSelector":"bc5dc4c3","id":16458,"implemented":false,"kind":"function","modifiers":[],"name":"addMarket","nameLocation":"2933:9:47","nodeType":"FunctionDefinition","parameters":{"id":16456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16449,"mutability":"mutable","name":"comptroller","nameLocation":"2960:11:47","nodeType":"VariableDeclaration","scope":16458,"src":"2952:19:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16448,"name":"address","nodeType":"ElementaryTypeName","src":"2952:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16451,"mutability":"mutable","name":"market","nameLocation":"2989:6:47","nodeType":"VariableDeclaration","scope":16458,"src":"2981:14:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16450,"name":"address","nodeType":"ElementaryTypeName","src":"2981:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16453,"mutability":"mutable","name":"supplyMultiplier","nameLocation":"3013:16:47","nodeType":"VariableDeclaration","scope":16458,"src":"3005:24:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16452,"name":"uint256","nodeType":"ElementaryTypeName","src":"3005:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16455,"mutability":"mutable","name":"borrowMultiplier","nameLocation":"3047:16:47","nodeType":"VariableDeclaration","scope":16458,"src":"3039:24:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16454,"name":"uint256","nodeType":"ElementaryTypeName","src":"3039:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2942:127:47"},"returnParameters":{"id":16457,"nodeType":"ParameterList","parameters":[],"src":"3078:0:47"},"scope":16613,"src":"2924:155:47","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":16459,"nodeType":"StructuredDocumentation","src":"3085:241:47","text":" @notice Set limits for total tokens that can be minted\n @param _irrevocableLimit total number of irrevocable tokens that can be minted\n @param _revocableLimit total number of revocable tokens that can be minted"},"functionSelector":"207add91","id":16466,"implemented":false,"kind":"function","modifiers":[],"name":"setLimit","nameLocation":"3340:8:47","nodeType":"FunctionDefinition","parameters":{"id":16464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16461,"mutability":"mutable","name":"_irrevocableLimit","nameLocation":"3357:17:47","nodeType":"VariableDeclaration","scope":16466,"src":"3349:25:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16460,"name":"uint256","nodeType":"ElementaryTypeName","src":"3349:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16463,"mutability":"mutable","name":"_revocableLimit","nameLocation":"3384:15:47","nodeType":"VariableDeclaration","scope":16466,"src":"3376:23:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16462,"name":"uint256","nodeType":"ElementaryTypeName","src":"3376:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3348:52:47"},"returnParameters":{"id":16465,"nodeType":"ParameterList","parameters":[],"src":"3409:0:47"},"scope":16613,"src":"3331:79:47","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":16467,"nodeType":"StructuredDocumentation","src":"3416:174:47","text":" @notice Directly issue prime tokens to users\n @param isIrrevocable are the tokens being issued\n @param users list of address to issue tokens to"},"functionSelector":"7dafcd89","id":16475,"implemented":false,"kind":"function","modifiers":[],"name":"issue","nameLocation":"3604:5:47","nodeType":"FunctionDefinition","parameters":{"id":16473,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16469,"mutability":"mutable","name":"isIrrevocable","nameLocation":"3615:13:47","nodeType":"VariableDeclaration","scope":16475,"src":"3610:18:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16468,"name":"bool","nodeType":"ElementaryTypeName","src":"3610:4:47","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":16472,"mutability":"mutable","name":"users","nameLocation":"3649:5:47","nodeType":"VariableDeclaration","scope":16475,"src":"3630:24:47","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":16470,"name":"address","nodeType":"ElementaryTypeName","src":"3630:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16471,"nodeType":"ArrayTypeName","src":"3630:9:47","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3609:46:47"},"returnParameters":{"id":16474,"nodeType":"ParameterList","parameters":[],"src":"3664:0:47"},"scope":16613,"src":"3595:70:47","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":16476,"nodeType":"StructuredDocumentation","src":"3671:153:47","text":" @notice Executed by XVSVault whenever user's XVSVault balance changes\n @param user the account address whose balance was updated"},"functionSelector":"37f23cd3","id":16481,"implemented":false,"kind":"function","modifiers":[],"name":"xvsUpdated","nameLocation":"3838:10:47","nodeType":"FunctionDefinition","parameters":{"id":16479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16478,"mutability":"mutable","name":"user","nameLocation":"3857:4:47","nodeType":"VariableDeclaration","scope":16481,"src":"3849:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16477,"name":"address","nodeType":"ElementaryTypeName","src":"3849:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3848:14:47"},"returnParameters":{"id":16480,"nodeType":"ParameterList","parameters":[],"src":"3871:0:47"},"scope":16613,"src":"3829:43:47","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":16482,"nodeType":"StructuredDocumentation","src":"3878:258:47","text":" @notice accrues interest and updates score for an user for a specific market\n @param user the account address for which to accrue interest and update score\n @param market the market for which to accrue interest and update score"},"functionSelector":"cf329d16","id":16489,"implemented":false,"kind":"function","modifiers":[],"name":"accrueInterestAndUpdateScore","nameLocation":"4150:28:47","nodeType":"FunctionDefinition","parameters":{"id":16487,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16484,"mutability":"mutable","name":"user","nameLocation":"4187:4:47","nodeType":"VariableDeclaration","scope":16489,"src":"4179:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16483,"name":"address","nodeType":"ElementaryTypeName","src":"4179:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16486,"mutability":"mutable","name":"market","nameLocation":"4201:6:47","nodeType":"VariableDeclaration","scope":16489,"src":"4193:14:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16485,"name":"address","nodeType":"ElementaryTypeName","src":"4193:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4178:30:47"},"returnParameters":{"id":16488,"nodeType":"ParameterList","parameters":[],"src":"4217:0:47"},"scope":16613,"src":"4141:77:47","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":16490,"nodeType":"StructuredDocumentation","src":"4224:84:47","text":" @notice For claiming prime token when staking period is completed"},"functionSelector":"4e71d92d","id":16493,"implemented":false,"kind":"function","modifiers":[],"name":"claim","nameLocation":"4322:5:47","nodeType":"FunctionDefinition","parameters":{"id":16491,"nodeType":"ParameterList","parameters":[],"src":"4327:2:47"},"returnParameters":{"id":16492,"nodeType":"ParameterList","parameters":[],"src":"4338:0:47"},"scope":16613,"src":"4313:26:47","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":16494,"nodeType":"StructuredDocumentation","src":"4345:134:47","text":" @notice For burning any prime token\n @param user the account address for which the prime token will be burned"},"functionSelector":"89afcb44","id":16499,"implemented":false,"kind":"function","modifiers":[],"name":"burn","nameLocation":"4493:4:47","nodeType":"FunctionDefinition","parameters":{"id":16497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16496,"mutability":"mutable","name":"user","nameLocation":"4506:4:47","nodeType":"VariableDeclaration","scope":16499,"src":"4498:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16495,"name":"address","nodeType":"ElementaryTypeName","src":"4498:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4497:14:47"},"returnParameters":{"id":16498,"nodeType":"ParameterList","parameters":[],"src":"4520:0:47"},"scope":16613,"src":"4484:37:47","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":16500,"nodeType":"StructuredDocumentation","src":"4527:67:47","text":" @notice To pause or unpause claiming of interest"},"functionSelector":"c4ae3168","id":16503,"implemented":false,"kind":"function","modifiers":[],"name":"togglePause","nameLocation":"4608:11:47","nodeType":"FunctionDefinition","parameters":{"id":16501,"nodeType":"ParameterList","parameters":[],"src":"4619:2:47"},"returnParameters":{"id":16502,"nodeType":"ParameterList","parameters":[],"src":"4630:0:47"},"scope":16613,"src":"4599:32:47","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":16504,"nodeType":"StructuredDocumentation","src":"4637:194:47","text":" @notice For user to claim boosted yield\n @param vToken the market for which claim the accrued interest\n @return amount the amount of tokens transferred to the user"},"functionSelector":"88d742c2","id":16511,"implemented":false,"kind":"function","modifiers":[],"name":"claimInterest","nameLocation":"4845:13:47","nodeType":"FunctionDefinition","parameters":{"id":16507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16506,"mutability":"mutable","name":"vToken","nameLocation":"4867:6:47","nodeType":"VariableDeclaration","scope":16511,"src":"4859:14:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16505,"name":"address","nodeType":"ElementaryTypeName","src":"4859:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4858:16:47"},"returnParameters":{"id":16510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16509,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16511,"src":"4893:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16508,"name":"uint256","nodeType":"ElementaryTypeName","src":"4893:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4892:9:47"},"scope":16613,"src":"4836:66:47","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":16512,"nodeType":"StructuredDocumentation","src":"4908:262:47","text":" @notice For user to claim boosted yield\n @param vToken the market for which claim the accrued interest\n @param user the user for which to claim the accrued interest\n @return amount the amount of tokens transferred to the user"},"functionSelector":"ba437c68","id":16521,"implemented":false,"kind":"function","modifiers":[],"name":"claimInterest","nameLocation":"5184:13:47","nodeType":"FunctionDefinition","parameters":{"id":16517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16514,"mutability":"mutable","name":"vToken","nameLocation":"5206:6:47","nodeType":"VariableDeclaration","scope":16521,"src":"5198:14:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16513,"name":"address","nodeType":"ElementaryTypeName","src":"5198:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16516,"mutability":"mutable","name":"user","nameLocation":"5222:4:47","nodeType":"VariableDeclaration","scope":16521,"src":"5214:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16515,"name":"address","nodeType":"ElementaryTypeName","src":"5214:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5197:30:47"},"returnParameters":{"id":16520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16519,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16521,"src":"5246:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16518,"name":"uint256","nodeType":"ElementaryTypeName","src":"5246:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5245:9:47"},"scope":16613,"src":"5175:80:47","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":16522,"nodeType":"StructuredDocumentation","src":"5261:148:47","text":" @notice Distributes income from market since last distribution\n @param vToken the market for which to distribute the income"},"functionSelector":"9198e515","id":16527,"implemented":false,"kind":"function","modifiers":[],"name":"accrueInterest","nameLocation":"5423:14:47","nodeType":"FunctionDefinition","parameters":{"id":16525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16524,"mutability":"mutable","name":"vToken","nameLocation":"5446:6:47","nodeType":"VariableDeclaration","scope":16527,"src":"5438:14:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16523,"name":"address","nodeType":"ElementaryTypeName","src":"5438:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5437:16:47"},"returnParameters":{"id":16526,"nodeType":"ParameterList","parameters":[],"src":"5462:0:47"},"scope":16613,"src":"5414:49:47","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":16528,"nodeType":"StructuredDocumentation","src":"5469:317:47","text":" @notice Returns boosted interest accrued for a user\n @param vToken the market for which to fetch the accrued interest\n @param user the account for which to get the accrued interest\n @return interestAccrued the number of underlying tokens accrued by the user since the last accrual"},"functionSelector":"d65bd241","id":16537,"implemented":false,"kind":"function","modifiers":[],"name":"getInterestAccrued","nameLocation":"5800:18:47","nodeType":"FunctionDefinition","parameters":{"id":16533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16530,"mutability":"mutable","name":"vToken","nameLocation":"5827:6:47","nodeType":"VariableDeclaration","scope":16537,"src":"5819:14:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16529,"name":"address","nodeType":"ElementaryTypeName","src":"5819:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16532,"mutability":"mutable","name":"user","nameLocation":"5843:4:47","nodeType":"VariableDeclaration","scope":16537,"src":"5835:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16531,"name":"address","nodeType":"ElementaryTypeName","src":"5835:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5818:30:47"},"returnParameters":{"id":16536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16535,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16537,"src":"5867:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16534,"name":"uint256","nodeType":"ElementaryTypeName","src":"5867:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5866:9:47"},"scope":16613,"src":"5791:85:47","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":16538,"nodeType":"StructuredDocumentation","src":"5882:142:47","text":" @notice Retrieves an array of all available markets\n @return an array of addresses representing all available markets"},"functionSelector":"b0772d0b","id":16544,"implemented":false,"kind":"function","modifiers":[],"name":"getAllMarkets","nameLocation":"6038:13:47","nodeType":"FunctionDefinition","parameters":{"id":16539,"nodeType":"ParameterList","parameters":[],"src":"6051:2:47"},"returnParameters":{"id":16543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16542,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16544,"src":"6077:16:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":16540,"name":"address","nodeType":"ElementaryTypeName","src":"6077:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16541,"nodeType":"ArrayTypeName","src":"6077:9:47","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"6076:18:47"},"scope":16613,"src":"6029:66:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16545,"nodeType":"StructuredDocumentation","src":"6101:275:47","text":" @notice fetch the numbers of seconds remaining for staking period to complete\n @param user the account address for which we are checking the remaining time\n @return timeRemaining the number of seconds the user needs to wait to claim prime token"},"functionSelector":"e4676f37","id":16552,"implemented":false,"kind":"function","modifiers":[],"name":"claimTimeRemaining","nameLocation":"6390:18:47","nodeType":"FunctionDefinition","parameters":{"id":16548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16547,"mutability":"mutable","name":"user","nameLocation":"6417:4:47","nodeType":"VariableDeclaration","scope":16552,"src":"6409:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16546,"name":"address","nodeType":"ElementaryTypeName","src":"6409:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6408:14:47"},"returnParameters":{"id":16551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16550,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16552,"src":"6446:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16549,"name":"uint256","nodeType":"ElementaryTypeName","src":"6446:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6445:9:47"},"scope":16613,"src":"6381:74:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16553,"nodeType":"StructuredDocumentation","src":"6461:272:47","text":" @notice Returns supply and borrow APR for user for a given market\n @param market the market for which to fetch the APR\n @param user the account for which to get the APR\n @return aprInfo APR information for the user for the given market"},"functionSelector":"fa6d5f18","id":16563,"implemented":false,"kind":"function","modifiers":[],"name":"calculateAPR","nameLocation":"6747:12:47","nodeType":"FunctionDefinition","parameters":{"id":16558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16555,"mutability":"mutable","name":"market","nameLocation":"6768:6:47","nodeType":"VariableDeclaration","scope":16563,"src":"6760:14:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16554,"name":"address","nodeType":"ElementaryTypeName","src":"6760:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16557,"mutability":"mutable","name":"user","nameLocation":"6784:4:47","nodeType":"VariableDeclaration","scope":16563,"src":"6776:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16556,"name":"address","nodeType":"ElementaryTypeName","src":"6776:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6759:30:47"},"returnParameters":{"id":16562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16561,"mutability":"mutable","name":"aprInfo","nameLocation":"6828:7:47","nodeType":"VariableDeclaration","scope":16563,"src":"6813:22:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_APRInfo_$16400_memory_ptr","typeString":"struct IPrime.APRInfo"},"typeName":{"id":16560,"nodeType":"UserDefinedTypeName","pathNode":{"id":16559,"name":"APRInfo","nameLocations":["6813:7:47"],"nodeType":"IdentifierPath","referencedDeclaration":16400,"src":"6813:7:47"},"referencedDeclaration":16400,"src":"6813:7:47","typeDescriptions":{"typeIdentifier":"t_struct$_APRInfo_$16400_storage_ptr","typeString":"struct IPrime.APRInfo"}},"visibility":"internal"}],"src":"6812:24:47"},"scope":16613,"src":"6738:99:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16564,"nodeType":"StructuredDocumentation","src":"6843:439:47","text":" @notice Returns supply and borrow APR for estimated supply, borrow and XVS staked\n @param market the market for which to fetch the APR\n @param user the account for which to get the APR\n @param borrow hypothetical borrow amount\n @param supply hypothetical supply amount\n @param xvsStaked hypothetical staked XVS amount\n @return aprInfo APR information for the user for the given market"},"functionSelector":"b7f2d258","id":16580,"implemented":false,"kind":"function","modifiers":[],"name":"estimateAPR","nameLocation":"7296:11:47","nodeType":"FunctionDefinition","parameters":{"id":16575,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16566,"mutability":"mutable","name":"market","nameLocation":"7325:6:47","nodeType":"VariableDeclaration","scope":16580,"src":"7317:14:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16565,"name":"address","nodeType":"ElementaryTypeName","src":"7317:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16568,"mutability":"mutable","name":"user","nameLocation":"7349:4:47","nodeType":"VariableDeclaration","scope":16580,"src":"7341:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16567,"name":"address","nodeType":"ElementaryTypeName","src":"7341:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16570,"mutability":"mutable","name":"borrow","nameLocation":"7371:6:47","nodeType":"VariableDeclaration","scope":16580,"src":"7363:14:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16569,"name":"uint256","nodeType":"ElementaryTypeName","src":"7363:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16572,"mutability":"mutable","name":"supply","nameLocation":"7395:6:47","nodeType":"VariableDeclaration","scope":16580,"src":"7387:14:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16571,"name":"uint256","nodeType":"ElementaryTypeName","src":"7387:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16574,"mutability":"mutable","name":"xvsStaked","nameLocation":"7419:9:47","nodeType":"VariableDeclaration","scope":16580,"src":"7411:17:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16573,"name":"uint256","nodeType":"ElementaryTypeName","src":"7411:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7307:127:47"},"returnParameters":{"id":16579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16578,"mutability":"mutable","name":"aprInfo","nameLocation":"7473:7:47","nodeType":"VariableDeclaration","scope":16580,"src":"7458:22:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_APRInfo_$16400_memory_ptr","typeString":"struct IPrime.APRInfo"},"typeName":{"id":16577,"nodeType":"UserDefinedTypeName","pathNode":{"id":16576,"name":"APRInfo","nameLocations":["7458:7:47"],"nodeType":"IdentifierPath","referencedDeclaration":16400,"src":"7458:7:47"},"referencedDeclaration":16400,"src":"7458:7:47","typeDescriptions":{"typeIdentifier":"t_struct$_APRInfo_$16400_storage_ptr","typeString":"struct IPrime.APRInfo"}},"visibility":"internal"}],"src":"7457:24:47"},"scope":16613,"src":"7287:195:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16581,"nodeType":"StructuredDocumentation","src":"7488:252:47","text":" @notice the total income that's going to be distributed in a year to prime token holders\n @param vToken the market for which to fetch the total income that's going to distributed in a year\n @return amount the total income"},"functionSelector":"5d536d30","id":16588,"implemented":false,"kind":"function","modifiers":[],"name":"incomeDistributionYearly","nameLocation":"7754:24:47","nodeType":"FunctionDefinition","parameters":{"id":16584,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16583,"mutability":"mutable","name":"vToken","nameLocation":"7787:6:47","nodeType":"VariableDeclaration","scope":16588,"src":"7779:14:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16582,"name":"address","nodeType":"ElementaryTypeName","src":"7779:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7778:16:47"},"returnParameters":{"id":16587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16586,"mutability":"mutable","name":"amount","nameLocation":"7826:6:47","nodeType":"VariableDeclaration","scope":16588,"src":"7818:14:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16585,"name":"uint256","nodeType":"ElementaryTypeName","src":"7818:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7817:16:47"},"scope":16613,"src":"7745:89:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16589,"nodeType":"StructuredDocumentation","src":"7840:120:47","text":" @notice Returns if user is a prime holder\n @return isPrimeHolder true if user is a prime holder"},"functionSelector":"38f6a434","id":16596,"implemented":false,"kind":"function","modifiers":[],"name":"isUserPrimeHolder","nameLocation":"7974:17:47","nodeType":"FunctionDefinition","parameters":{"id":16592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16591,"mutability":"mutable","name":"user","nameLocation":"8000:4:47","nodeType":"VariableDeclaration","scope":16596,"src":"7992:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16590,"name":"address","nodeType":"ElementaryTypeName","src":"7992:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7991:14:47"},"returnParameters":{"id":16595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16594,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16596,"src":"8029:4:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16593,"name":"bool","nodeType":"ElementaryTypeName","src":"8029:4:47","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8028:6:47"},"scope":16613,"src":"7965:70:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16597,"nodeType":"StructuredDocumentation","src":"8041:130:47","text":" @notice Set the limit for the loops can iterate to avoid the DOS\n @param loopsLimit Number of loops limit"},"functionSelector":"80d45a2d","id":16602,"implemented":false,"kind":"function","modifiers":[],"name":"setMaxLoopsLimit","nameLocation":"8185:16:47","nodeType":"FunctionDefinition","parameters":{"id":16600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16599,"mutability":"mutable","name":"loopsLimit","nameLocation":"8210:10:47","nodeType":"VariableDeclaration","scope":16602,"src":"8202:18:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16598,"name":"uint256","nodeType":"ElementaryTypeName","src":"8202:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8201:20:47"},"returnParameters":{"id":16601,"nodeType":"ParameterList","parameters":[],"src":"8230:0:47"},"scope":16613,"src":"8176:55:47","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":16603,"nodeType":"StructuredDocumentation","src":"8237:212:47","text":" @notice Update staked at timestamp for multiple users\n @param users accounts for which we need to update staked at timestamp\n @param timestamps new staked at timestamp for the users"},"functionSelector":"594a67ee","id":16612,"implemented":false,"kind":"function","modifiers":[],"name":"setStakedAt","nameLocation":"8463:11:47","nodeType":"FunctionDefinition","parameters":{"id":16610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16606,"mutability":"mutable","name":"users","nameLocation":"8494:5:47","nodeType":"VariableDeclaration","scope":16612,"src":"8475:24:47","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":16604,"name":"address","nodeType":"ElementaryTypeName","src":"8475:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16605,"nodeType":"ArrayTypeName","src":"8475:9:47","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":16609,"mutability":"mutable","name":"timestamps","nameLocation":"8520:10:47","nodeType":"VariableDeclaration","scope":16612,"src":"8501:29:47","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16607,"name":"uint256","nodeType":"ElementaryTypeName","src":"8501:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16608,"nodeType":"ArrayTypeName","src":"8501:9:47","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8474:57:47"},"returnParameters":{"id":16611,"nodeType":"ParameterList","parameters":[],"src":"8540:0:47"},"scope":16613,"src":"8454:87:47","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":16614,"src":"201:8342:47","usedErrors":[],"usedEvents":[]}],"src":"41:8503:47"},"id":47},"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol":{"ast":{"absolutePath":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol","exportedSymbols":{"PrimeStorageV1":[16757],"ResilientOracleInterface":[16173]},"id":16758,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":16615,"literals":["solidity","0.8",".25"],"nodeType":"PragmaDirective","src":"41:23:48"},{"absolutePath":"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol","file":"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol","id":16617,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16758,"sourceUnit":16196,"src":"66:106:48","symbolAliases":[{"foreign":{"id":16616,"name":"ResilientOracleInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16173,"src":"75:24:48","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"PrimeStorageV1","contractDependencies":[],"contractKind":"contract","documentation":{"id":16618,"nodeType":"StructuredDocumentation","src":"174:84:48","text":" @title PrimeStorageV1\n @author Venus\n @notice Storage for Prime Token"},"fullyImplemented":true,"id":16757,"linearizedBaseContracts":[16757],"name":"PrimeStorageV1","nameLocation":"268:14:48","nodeType":"ContractDefinition","nodes":[{"canonicalName":"PrimeStorageV1.Token","id":16623,"members":[{"constant":false,"id":16620,"mutability":"mutable","name":"exists","nameLocation":"317:6:48","nodeType":"VariableDeclaration","scope":16623,"src":"312:11:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16619,"name":"bool","nodeType":"ElementaryTypeName","src":"312:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":16622,"mutability":"mutable","name":"isIrrevocable","nameLocation":"338:13:48","nodeType":"VariableDeclaration","scope":16623,"src":"333:18:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16621,"name":"bool","nodeType":"ElementaryTypeName","src":"333:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"Token","nameLocation":"296:5:48","nodeType":"StructDefinition","scope":16757,"src":"289:69:48","visibility":"public"},{"canonicalName":"PrimeStorageV1.Market","id":16634,"members":[{"constant":false,"id":16625,"mutability":"mutable","name":"supplyMultiplier","nameLocation":"396:16:48","nodeType":"VariableDeclaration","scope":16634,"src":"388:24:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16624,"name":"uint256","nodeType":"ElementaryTypeName","src":"388:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16627,"mutability":"mutable","name":"borrowMultiplier","nameLocation":"430:16:48","nodeType":"VariableDeclaration","scope":16634,"src":"422:24:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16626,"name":"uint256","nodeType":"ElementaryTypeName","src":"422:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16629,"mutability":"mutable","name":"rewardIndex","nameLocation":"464:11:48","nodeType":"VariableDeclaration","scope":16634,"src":"456:19:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16628,"name":"uint256","nodeType":"ElementaryTypeName","src":"456:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16631,"mutability":"mutable","name":"sumOfMembersScore","nameLocation":"493:17:48","nodeType":"VariableDeclaration","scope":16634,"src":"485:25:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16630,"name":"uint256","nodeType":"ElementaryTypeName","src":"485:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16633,"mutability":"mutable","name":"exists","nameLocation":"525:6:48","nodeType":"VariableDeclaration","scope":16634,"src":"520:11:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16632,"name":"bool","nodeType":"ElementaryTypeName","src":"520:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"Market","nameLocation":"371:6:48","nodeType":"StructDefinition","scope":16757,"src":"364:174:48","visibility":"public"},{"canonicalName":"PrimeStorageV1.Interest","id":16641,"members":[{"constant":false,"id":16636,"mutability":"mutable","name":"accrued","nameLocation":"578:7:48","nodeType":"VariableDeclaration","scope":16641,"src":"570:15:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16635,"name":"uint256","nodeType":"ElementaryTypeName","src":"570:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16638,"mutability":"mutable","name":"score","nameLocation":"603:5:48","nodeType":"VariableDeclaration","scope":16641,"src":"595:13:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16637,"name":"uint256","nodeType":"ElementaryTypeName","src":"595:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16640,"mutability":"mutable","name":"rewardIndex","nameLocation":"626:11:48","nodeType":"VariableDeclaration","scope":16641,"src":"618:19:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16639,"name":"uint256","nodeType":"ElementaryTypeName","src":"618:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Interest","nameLocation":"551:8:48","nodeType":"StructDefinition","scope":16757,"src":"544:100:48","visibility":"public"},{"canonicalName":"PrimeStorageV1.PendingReward","id":16648,"members":[{"constant":false,"id":16643,"mutability":"mutable","name":"vToken","nameLocation":"689:6:48","nodeType":"VariableDeclaration","scope":16648,"src":"681:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16642,"name":"address","nodeType":"ElementaryTypeName","src":"681:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16645,"mutability":"mutable","name":"rewardToken","nameLocation":"713:11:48","nodeType":"VariableDeclaration","scope":16648,"src":"705:19:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16644,"name":"address","nodeType":"ElementaryTypeName","src":"705:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16647,"mutability":"mutable","name":"amount","nameLocation":"742:6:48","nodeType":"VariableDeclaration","scope":16648,"src":"734:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16646,"name":"uint256","nodeType":"ElementaryTypeName","src":"734:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"PendingReward","nameLocation":"657:13:48","nodeType":"StructDefinition","scope":16757,"src":"650:105:48","visibility":"public"},{"constant":true,"documentation":{"id":16649,"nodeType":"StructuredDocumentation","src":"761:92:48","text":"@notice Base unit for computations, usually used in scaling (multiplications, divisions)"},"id":16652,"mutability":"constant","name":"EXP_SCALE","nameLocation":"884:9:48","nodeType":"VariableDeclaration","scope":16757,"src":"858:42:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16650,"name":"uint256","nodeType":"ElementaryTypeName","src":"858:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653138","id":16651,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"896:4:48","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"documentation":{"id":16653,"nodeType":"StructuredDocumentation","src":"907:30:48","text":"@notice maximum BPS = 100%"},"id":16656,"mutability":"constant","name":"MAXIMUM_BPS","nameLocation":"968:11:48","nodeType":"VariableDeclaration","scope":16757,"src":"942:43:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16654,"name":"uint256","nodeType":"ElementaryTypeName","src":"942:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"316534","id":16655,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"982:3:48","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"1e4"},"visibility":"internal"},{"constant":false,"documentation":{"id":16657,"nodeType":"StructuredDocumentation","src":"992:49:48","text":"@notice Mapping to get prime token's metadata"},"functionSelector":"e4860339","id":16662,"mutability":"mutable","name":"tokens","nameLocation":"1079:6:48","nodeType":"VariableDeclaration","scope":16757,"src":"1046:39:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Token_$16623_storage_$","typeString":"mapping(address => struct PrimeStorageV1.Token)"},"typeName":{"id":16661,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":16658,"name":"address","nodeType":"ElementaryTypeName","src":"1054:7:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1046:25:48","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Token_$16623_storage_$","typeString":"mapping(address => struct PrimeStorageV1.Token)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":16660,"nodeType":"UserDefinedTypeName","pathNode":{"id":16659,"name":"Token","nameLocations":["1065:5:48"],"nodeType":"IdentifierPath","referencedDeclaration":16623,"src":"1065:5:48"},"referencedDeclaration":16623,"src":"1065:5:48","typeDescriptions":{"typeIdentifier":"t_struct$_Token_$16623_storage_ptr","typeString":"struct PrimeStorageV1.Token"}}},"visibility":"public"},{"constant":false,"documentation":{"id":16663,"nodeType":"StructuredDocumentation","src":"1092:51:48","text":"@notice  Tracks total irrevocable tokens minted"},"functionSelector":"d88b9d2e","id":16665,"mutability":"mutable","name":"totalIrrevocable","nameLocation":"1163:16:48","nodeType":"VariableDeclaration","scope":16757,"src":"1148:31:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16664,"name":"uint256","nodeType":"ElementaryTypeName","src":"1148:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":16666,"nodeType":"StructuredDocumentation","src":"1186:49:48","text":"@notice  Tracks total revocable tokens minted"},"functionSelector":"9f6506ce","id":16668,"mutability":"mutable","name":"totalRevocable","nameLocation":"1255:14:48","nodeType":"VariableDeclaration","scope":16757,"src":"1240:29:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16667,"name":"uint256","nodeType":"ElementaryTypeName","src":"1240:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":16669,"nodeType":"StructuredDocumentation","src":"1276:66:48","text":"@notice  Indicates maximum revocable tokens that can be minted"},"functionSelector":"da6ab4f8","id":16671,"mutability":"mutable","name":"revocableLimit","nameLocation":"1362:14:48","nodeType":"VariableDeclaration","scope":16757,"src":"1347:29:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16670,"name":"uint256","nodeType":"ElementaryTypeName","src":"1347:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":16672,"nodeType":"StructuredDocumentation","src":"1383:68:48","text":"@notice  Indicates maximum irrevocable tokens that can be minted"},"functionSelector":"856c3aa4","id":16674,"mutability":"mutable","name":"irrevocableLimit","nameLocation":"1471:16:48","nodeType":"VariableDeclaration","scope":16757,"src":"1456:31:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16673,"name":"uint256","nodeType":"ElementaryTypeName","src":"1456:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":16675,"nodeType":"StructuredDocumentation","src":"1494:91:48","text":"@notice Tracks when prime token eligible users started staking for claiming prime token"},"functionSelector":"ef36bbde","id":16679,"mutability":"mutable","name":"stakedAt","nameLocation":"1625:8:48","nodeType":"VariableDeclaration","scope":16757,"src":"1590:43:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":16678,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":16676,"name":"address","nodeType":"ElementaryTypeName","src":"1598:7:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1590:27:48","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":16677,"name":"uint256","nodeType":"ElementaryTypeName","src":"1609:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"public"},{"constant":false,"documentation":{"id":16680,"nodeType":"StructuredDocumentation","src":"1640:42:48","text":"@notice vToken to market configuration"},"functionSelector":"8e8f294b","id":16685,"mutability":"mutable","name":"markets","nameLocation":"1721:7:48","nodeType":"VariableDeclaration","scope":16757,"src":"1687:41:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$16634_storage_$","typeString":"mapping(address => struct PrimeStorageV1.Market)"},"typeName":{"id":16684,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":16681,"name":"address","nodeType":"ElementaryTypeName","src":"1695:7:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1687:26:48","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Market_$16634_storage_$","typeString":"mapping(address => struct PrimeStorageV1.Market)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":16683,"nodeType":"UserDefinedTypeName","pathNode":{"id":16682,"name":"Market","nameLocations":["1706:6:48"],"nodeType":"IdentifierPath","referencedDeclaration":16634,"src":"1706:6:48"},"referencedDeclaration":16634,"src":"1706:6:48","typeDescriptions":{"typeIdentifier":"t_struct$_Market_$16634_storage_ptr","typeString":"struct PrimeStorageV1.Market"}}},"visibility":"public"},{"constant":false,"documentation":{"id":16686,"nodeType":"StructuredDocumentation","src":"1735:40:48","text":"@notice vToken to user to user index"},"functionSelector":"b9eb69f6","id":16693,"mutability":"mutable","name":"interests","nameLocation":"1836:9:48","nodeType":"VariableDeclaration","scope":16757,"src":"1780:65:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_Interest_$16641_storage_$_$","typeString":"mapping(address => mapping(address => struct PrimeStorageV1.Interest))"},"typeName":{"id":16692,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":16687,"name":"address","nodeType":"ElementaryTypeName","src":"1788:7:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1780:48:48","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_Interest_$16641_storage_$_$","typeString":"mapping(address => mapping(address => struct PrimeStorageV1.Interest))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":16691,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":16688,"name":"address","nodeType":"ElementaryTypeName","src":"1807:7:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1799:28:48","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Interest_$16641_storage_$","typeString":"mapping(address => struct PrimeStorageV1.Interest)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":16690,"nodeType":"UserDefinedTypeName","pathNode":{"id":16689,"name":"Interest","nameLocations":["1818:8:48"],"nodeType":"IdentifierPath","referencedDeclaration":16641,"src":"1818:8:48"},"referencedDeclaration":16641,"src":"1818:8:48","typeDescriptions":{"typeIdentifier":"t_struct$_Interest_$16641_storage_ptr","typeString":"struct PrimeStorageV1.Interest"}}}},"visibility":"public"},{"constant":false,"documentation":{"id":16694,"nodeType":"StructuredDocumentation","src":"1852:37:48","text":"@notice A list of boosted markets"},"id":16697,"mutability":"mutable","name":"_allMarkets","nameLocation":"1913:11:48","nodeType":"VariableDeclaration","scope":16757,"src":"1894:30:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[]"},"typeName":{"baseType":{"id":16695,"name":"address","nodeType":"ElementaryTypeName","src":"1894:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16696,"nodeType":"ArrayTypeName","src":"1894:9:48","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"documentation":{"id":16698,"nodeType":"StructuredDocumentation","src":"1931:71:48","text":"@notice numerator of alpha. Ex: if alpha is 0.5 then this will be 1"},"functionSelector":"7ef82070","id":16700,"mutability":"mutable","name":"alphaNumerator","nameLocation":"2022:14:48","nodeType":"VariableDeclaration","scope":16757,"src":"2007:29:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":16699,"name":"uint128","nodeType":"ElementaryTypeName","src":"2007:7:48","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"public"},{"constant":false,"documentation":{"id":16701,"nodeType":"StructuredDocumentation","src":"2043:73:48","text":"@notice denominator of alpha. Ex: if alpha is 0.5 then this will be 2"},"functionSelector":"ce853613","id":16703,"mutability":"mutable","name":"alphaDenominator","nameLocation":"2136:16:48","nodeType":"VariableDeclaration","scope":16757,"src":"2121:31:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":16702,"name":"uint128","nodeType":"ElementaryTypeName","src":"2121:7:48","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"public"},{"constant":false,"documentation":{"id":16704,"nodeType":"StructuredDocumentation","src":"2159:32:48","text":"@notice address of XVS vault"},"functionSelector":"1b9ce575","id":16706,"mutability":"mutable","name":"xvsVault","nameLocation":"2211:8:48","nodeType":"VariableDeclaration","scope":16757,"src":"2196:23:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16705,"name":"address","nodeType":"ElementaryTypeName","src":"2196:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"documentation":{"id":16707,"nodeType":"StructuredDocumentation","src":"2226:45:48","text":"@notice address of XVS vault reward token"},"functionSelector":"88bead73","id":16709,"mutability":"mutable","name":"xvsVaultRewardToken","nameLocation":"2291:19:48","nodeType":"VariableDeclaration","scope":16757,"src":"2276:34:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16708,"name":"address","nodeType":"ElementaryTypeName","src":"2276:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"documentation":{"id":16710,"nodeType":"StructuredDocumentation","src":"2317:40:48","text":"@notice address of XVS vault pool id"},"functionSelector":"487b0dfb","id":16712,"mutability":"mutable","name":"xvsVaultPoolId","nameLocation":"2377:14:48","nodeType":"VariableDeclaration","scope":16757,"src":"2362:29:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16711,"name":"uint256","nodeType":"ElementaryTypeName","src":"2362:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":16713,"nodeType":"StructuredDocumentation","src":"2398:74:48","text":"@notice mapping to check if a account's score was updated in the round"},"functionSelector":"9565d3d2","id":16719,"mutability":"mutable","name":"isScoreUpdated","nameLocation":"2529:14:48","nodeType":"VariableDeclaration","scope":16757,"src":"2477:66:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(uint256 => mapping(address => bool))"},"typeName":{"id":16718,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":16714,"name":"uint256","nodeType":"ElementaryTypeName","src":"2485:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"2477:44:48","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(uint256 => mapping(address => bool))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":16717,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":16715,"name":"address","nodeType":"ElementaryTypeName","src":"2504:7:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2496:24:48","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":16716,"name":"bool","nodeType":"ElementaryTypeName","src":"2515:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}}},"visibility":"public"},{"constant":false,"documentation":{"id":16720,"nodeType":"StructuredDocumentation","src":"2550:36:48","text":"@notice unique id for next round"},"functionSelector":"a15753dc","id":16722,"mutability":"mutable","name":"nextScoreUpdateRoundId","nameLocation":"2606:22:48","nodeType":"VariableDeclaration","scope":16757,"src":"2591:37:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16721,"name":"uint256","nodeType":"ElementaryTypeName","src":"2591:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":16723,"nodeType":"StructuredDocumentation","src":"2635:68:48","text":"@notice total number of accounts whose score needs to be updated"},"functionSelector":"bd212c0e","id":16725,"mutability":"mutable","name":"totalScoreUpdatesRequired","nameLocation":"2723:25:48","nodeType":"VariableDeclaration","scope":16757,"src":"2708:40:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16724,"name":"uint256","nodeType":"ElementaryTypeName","src":"2708:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":16726,"nodeType":"StructuredDocumentation","src":"2755:69:48","text":"@notice total number of accounts whose score is yet to be updated"},"functionSelector":"c3db3c36","id":16728,"mutability":"mutable","name":"pendingScoreUpdates","nameLocation":"2844:19:48","nodeType":"VariableDeclaration","scope":16757,"src":"2829:34:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16727,"name":"uint256","nodeType":"ElementaryTypeName","src":"2829:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":16729,"nodeType":"StructuredDocumentation","src":"2870:69:48","text":"@notice mapping used to find if an asset is part of prime markets"},"functionSelector":"ee6b13fc","id":16733,"mutability":"mutable","name":"vTokenForAsset","nameLocation":"2979:14:48","nodeType":"VariableDeclaration","scope":16757,"src":"2944:49:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"},"typeName":{"id":16732,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":16730,"name":"address","nodeType":"ElementaryTypeName","src":"2952:7:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2944:27:48","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":16731,"name":"address","nodeType":"ElementaryTypeName","src":"2963:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"public"},{"constant":false,"documentation":{"id":16734,"nodeType":"StructuredDocumentation","src":"3000:53:48","text":"@notice Address of core pool comptroller contract"},"id":16736,"mutability":"mutable","name":"corePoolComptroller","nameLocation":"3075:19:48","nodeType":"VariableDeclaration","scope":16757,"src":"3058:36:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16735,"name":"address","nodeType":"ElementaryTypeName","src":"3058:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"documentation":{"id":16737,"nodeType":"StructuredDocumentation","src":"3101:130:48","text":"@notice unreleased income from PLP that's already distributed to prime holders\n @dev mapping of asset address => amount"},"functionSelector":"1bffac89","id":16741,"mutability":"mutable","name":"unreleasedPLPIncome","nameLocation":"3271:19:48","nodeType":"VariableDeclaration","scope":16757,"src":"3236:54:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":16740,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":16738,"name":"address","nodeType":"ElementaryTypeName","src":"3244:7:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3236:27:48","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":16739,"name":"uint256","nodeType":"ElementaryTypeName","src":"3255:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"public"},{"constant":false,"documentation":{"id":16742,"nodeType":"StructuredDocumentation","src":"3297:39:48","text":"@notice The address of PLP contract"},"functionSelector":"c86d1a78","id":16744,"mutability":"mutable","name":"primeLiquidityProvider","nameLocation":"3356:22:48","nodeType":"VariableDeclaration","scope":16757,"src":"3341:37:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16743,"name":"address","nodeType":"ElementaryTypeName","src":"3341:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"documentation":{"id":16745,"nodeType":"StructuredDocumentation","src":"3385:51:48","text":"@notice The address of ResilientOracle contract"},"functionSelector":"7dc0d1d0","id":16748,"mutability":"mutable","name":"oracle","nameLocation":"3473:6:48","nodeType":"VariableDeclaration","scope":16757,"src":"3441:38:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"},"typeName":{"id":16747,"nodeType":"UserDefinedTypeName","pathNode":{"id":16746,"name":"ResilientOracleInterface","nameLocations":["3441:24:48"],"nodeType":"IdentifierPath","referencedDeclaration":16173,"src":"3441:24:48"},"referencedDeclaration":16173,"src":"3441:24:48","typeDescriptions":{"typeIdentifier":"t_contract$_ResilientOracleInterface_$16173","typeString":"contract ResilientOracleInterface"}},"visibility":"public"},{"constant":false,"documentation":{"id":16749,"nodeType":"StructuredDocumentation","src":"3486:48:48","text":"@notice The address of PoolRegistry contract"},"functionSelector":"afcff50f","id":16751,"mutability":"mutable","name":"poolRegistry","nameLocation":"3554:12:48","nodeType":"VariableDeclaration","scope":16757,"src":"3539:27:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16750,"name":"address","nodeType":"ElementaryTypeName","src":"3539:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"documentation":{"id":16752,"nodeType":"StructuredDocumentation","src":"3573:160:48","text":"@dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain."},"id":16756,"mutability":"mutable","name":"__gap","nameLocation":"3758:5:48","nodeType":"VariableDeclaration","scope":16757,"src":"3738:25:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$26_storage","typeString":"uint256[26]"},"typeName":{"baseType":{"id":16753,"name":"uint256","nodeType":"ElementaryTypeName","src":"3738:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16755,"length":{"hexValue":"3236","id":16754,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3746:2:48","typeDescriptions":{"typeIdentifier":"t_rational_26_by_1","typeString":"int_const 26"},"value":"26"},"nodeType":"ArrayTypeName","src":"3738:11:48","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$26_storage_ptr","typeString":"uint256[26]"}},"visibility":"private"}],"scope":16758,"src":"259:3507:48","usedErrors":[],"usedEvents":[]}],"src":"41:3726:48"},"id":48},"contracts/ERC4626/Interfaces/IComptroller.sol":{"ast":{"absolutePath":"contracts/ERC4626/Interfaces/IComptroller.sol","exportedSymbols":{"Action":[9148],"IComptroller":[16789],"RewardsDistributor":[12324]},"id":16790,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":16759,"literals":["solidity","0.8",".25"],"nodeType":"PragmaDirective","src":"41:23:49"},{"absolutePath":"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol","file":"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol","id":16761,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16790,"sourceUnit":9432,"src":"66:90:49","symbolAliases":[{"foreign":{"id":16760,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"75:6:49","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol","file":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol","id":16763,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16790,"sourceUnit":12325,"src":"157:108:49","symbolAliases":[{"foreign":{"id":16762,"name":"RewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12324,"src":"166:18:49","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IComptroller","contractDependencies":[],"contractKind":"interface","documentation":{"id":16764,"nodeType":"StructuredDocumentation","src":"267:149:49","text":" @title IComptroller\n @author Venus\n @notice Combined interface for the `Comptroller` contract, including both core and view functions."},"fullyImplemented":false,"id":16789,"linearizedBaseContracts":[16789],"name":"IComptroller","nameLocation":"427:12:49","nodeType":"ContractDefinition","nodes":[{"functionSelector":"e85a2960","id":16774,"implemented":false,"kind":"function","modifiers":[],"name":"actionPaused","nameLocation":"455:12:49","nodeType":"FunctionDefinition","parameters":{"id":16770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16766,"mutability":"mutable","name":"market","nameLocation":"476:6:49","nodeType":"VariableDeclaration","scope":16774,"src":"468:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16765,"name":"address","nodeType":"ElementaryTypeName","src":"468:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16769,"mutability":"mutable","name":"action","nameLocation":"491:6:49","nodeType":"VariableDeclaration","scope":16774,"src":"484:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"},"typeName":{"id":16768,"nodeType":"UserDefinedTypeName","pathNode":{"id":16767,"name":"Action","nameLocations":["484:6:49"],"nodeType":"IdentifierPath","referencedDeclaration":9148,"src":"484:6:49"},"referencedDeclaration":9148,"src":"484:6:49","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}},"visibility":"internal"}],"src":"467:31:49"},"returnParameters":{"id":16773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16772,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16774,"src":"522:4:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16771,"name":"bool","nodeType":"ElementaryTypeName","src":"522:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"521:6:49"},"scope":16789,"src":"446:82:49","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"61252fd1","id":16781,"implemented":false,"kind":"function","modifiers":[],"name":"getRewardDistributors","nameLocation":"543:21:49","nodeType":"FunctionDefinition","parameters":{"id":16775,"nodeType":"ParameterList","parameters":[],"src":"564:2:49"},"returnParameters":{"id":16780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16779,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16781,"src":"590:27:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr","typeString":"contract RewardsDistributor[]"},"typeName":{"baseType":{"id":16777,"nodeType":"UserDefinedTypeName","pathNode":{"id":16776,"name":"RewardsDistributor","nameLocations":["590:18:49"],"nodeType":"IdentifierPath","referencedDeclaration":12324,"src":"590:18:49"},"referencedDeclaration":12324,"src":"590:18:49","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":16778,"nodeType":"ArrayTypeName","src":"590:20:49","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage_ptr","typeString":"contract RewardsDistributor[]"}},"visibility":"internal"}],"src":"589:29:49"},"scope":16789,"src":"534:85:49","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"02c3bcbb","id":16788,"implemented":false,"kind":"function","modifiers":[],"name":"supplyCaps","nameLocation":"634:10:49","nodeType":"FunctionDefinition","parameters":{"id":16784,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16783,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16788,"src":"645:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16782,"name":"address","nodeType":"ElementaryTypeName","src":"645:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"644:9:49"},"returnParameters":{"id":16787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16786,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16788,"src":"677:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16785,"name":"uint256","nodeType":"ElementaryTypeName","src":"677:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"676:9:49"},"scope":16789,"src":"625:61:49","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":16790,"src":"417:271:49","usedErrors":[],"usedEvents":[]}],"src":"41:648:49"},"id":49},"contracts/ERC4626/Interfaces/IProtocolShareReserve.sol":{"ast":{"absolutePath":"contracts/ERC4626/Interfaces/IProtocolShareReserve.sol","exportedSymbols":{"IProtocolShareReserve":[16808]},"id":16809,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":16791,"literals":["solidity","^","0.8",".25"],"nodeType":"PragmaDirective","src":"41:24:50"},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolShareReserve","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":16808,"linearizedBaseContracts":[16808],"name":"IProtocolShareReserve","nameLocation":"77:21:50","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IProtocolShareReserve.IncomeType","documentation":{"id":16792,"nodeType":"StructuredDocumentation","src":"105:51:50","text":"@notice it represents the type of vToken income"},"id":16797,"members":[{"id":16793,"name":"SPREAD","nameLocation":"187:6:50","nodeType":"EnumValue","src":"187:6:50"},{"id":16794,"name":"LIQUIDATION","nameLocation":"203:11:50","nodeType":"EnumValue","src":"203:11:50"},{"id":16795,"name":"ERC4626_WRAPPER_REWARDS","nameLocation":"224:23:50","nodeType":"EnumValue","src":"224:23:50"},{"id":16796,"name":"FLASHLOAN","nameLocation":"257:9:50","nodeType":"EnumValue","src":"257:9:50"}],"name":"IncomeType","nameLocation":"166:10:50","nodeType":"EnumDefinition","src":"161:111:50"},{"functionSelector":"16faecec","id":16807,"implemented":false,"kind":"function","modifiers":[],"name":"updateAssetsState","nameLocation":"287:17:50","nodeType":"FunctionDefinition","parameters":{"id":16805,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16799,"mutability":"mutable","name":"comptroller","nameLocation":"313:11:50","nodeType":"VariableDeclaration","scope":16807,"src":"305:19:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16798,"name":"address","nodeType":"ElementaryTypeName","src":"305:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16801,"mutability":"mutable","name":"asset","nameLocation":"334:5:50","nodeType":"VariableDeclaration","scope":16807,"src":"326:13:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16800,"name":"address","nodeType":"ElementaryTypeName","src":"326:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16804,"mutability":"mutable","name":"incomeType","nameLocation":"352:10:50","nodeType":"VariableDeclaration","scope":16807,"src":"341:21:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_IncomeType_$16797","typeString":"enum IProtocolShareReserve.IncomeType"},"typeName":{"id":16803,"nodeType":"UserDefinedTypeName","pathNode":{"id":16802,"name":"IncomeType","nameLocations":["341:10:50"],"nodeType":"IdentifierPath","referencedDeclaration":16797,"src":"341:10:50"},"referencedDeclaration":16797,"src":"341:10:50","typeDescriptions":{"typeIdentifier":"t_enum$_IncomeType_$16797","typeString":"enum IProtocolShareReserve.IncomeType"}},"visibility":"internal"}],"src":"304:59:50"},"returnParameters":{"id":16806,"nodeType":"ParameterList","parameters":[],"src":"372:0:50"},"scope":16808,"src":"278:95:50","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":16809,"src":"67:308:50","usedErrors":[],"usedEvents":[]}],"src":"41:335:50"},"id":50},"contracts/ERC4626/Interfaces/IRewardsDistributor.sol":{"ast":{"absolutePath":"contracts/ERC4626/Interfaces/IRewardsDistributor.sol","exportedSymbols":{"IERC20Upgradeable":[1352],"IRewardsDistributor":[16834],"VToken":[15506]},"id":16835,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":16810,"literals":["solidity","0.8",".25"],"nodeType":"PragmaDirective","src":"41:23:51"},{"absolutePath":"@venusprotocol/isolated-pools/contracts/VToken.sol","file":"@venusprotocol/isolated-pools/contracts/VToken.sol","id":16812,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16835,"sourceUnit":15507,"src":"66:76:51","symbolAliases":[{"foreign":{"id":16811,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"75:6:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","id":16814,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16835,"sourceUnit":1353,"src":"143:106:51","symbolAliases":[{"foreign":{"id":16813,"name":"IERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"152:17:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"IRewardsDistributor","contractDependencies":[],"contractKind":"contract","fullyImplemented":false,"id":16834,"linearizedBaseContracts":[16834],"name":"IRewardsDistributor","nameLocation":"269:19:51","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IRewardsDistributor.RewardToken","id":16821,"members":[{"constant":false,"id":16816,"mutability":"mutable","name":"index","nameLocation":"418:5:51","nodeType":"VariableDeclaration","scope":16821,"src":"410:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":16815,"name":"uint224","nodeType":"ElementaryTypeName","src":"410:7:51","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"},{"constant":false,"id":16818,"mutability":"mutable","name":"block","nameLocation":"498:5:51","nodeType":"VariableDeclaration","scope":16821,"src":"491:12:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16817,"name":"uint32","nodeType":"ElementaryTypeName","src":"491:6:51","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":16820,"mutability":"mutable","name":"lastRewardingBlock","nameLocation":"573:18:51","nodeType":"VariableDeclaration","scope":16821,"src":"566:25:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16819,"name":"uint32","nodeType":"ElementaryTypeName","src":"566:6:51","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"name":"RewardToken","nameLocation":"302:11:51","nodeType":"StructDefinition","scope":16834,"src":"295:303:51","visibility":"public"},{"constant":false,"functionSelector":"f7c618c1","id":16824,"mutability":"mutable","name":"rewardToken","nameLocation":"629:11:51","nodeType":"VariableDeclaration","scope":16834,"src":"604:36:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":16823,"nodeType":"UserDefinedTypeName","pathNode":{"id":16822,"name":"IERC20Upgradeable","nameLocations":["604:17:51"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"604:17:51"},"referencedDeclaration":1352,"src":"604:17:51","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"public"},{"functionSelector":"04caeb10","id":16833,"implemented":false,"kind":"function","modifiers":[],"name":"claimRewardToken","nameLocation":"656:16:51","nodeType":"FunctionDefinition","parameters":{"id":16831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16826,"mutability":"mutable","name":"holder","nameLocation":"681:6:51","nodeType":"VariableDeclaration","scope":16833,"src":"673:14:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16825,"name":"address","nodeType":"ElementaryTypeName","src":"673:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16830,"mutability":"mutable","name":"vTokens","nameLocation":"705:7:51","nodeType":"VariableDeclaration","scope":16833,"src":"689:23:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":16828,"nodeType":"UserDefinedTypeName","pathNode":{"id":16827,"name":"VToken","nameLocations":["689:6:51"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"689:6:51"},"referencedDeclaration":15506,"src":"689:6:51","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":16829,"nodeType":"ArrayTypeName","src":"689:8:51","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"}],"src":"672:41:51"},"returnParameters":{"id":16832,"nodeType":"ParameterList","parameters":[],"src":"730:0:51"},"scope":16834,"src":"647:84:51","stateMutability":"nonpayable","virtual":true,"visibility":"external"}],"scope":16835,"src":"251:482:51","usedErrors":[],"usedEvents":[]}],"src":"41:693:51"},"id":51},"contracts/ERC4626/VenusERC4626.sol":{"ast":{"absolutePath":"contracts/ERC4626/VenusERC4626.sol","exportedSymbols":{"AccessControlledV8":[5035],"Action":[9148],"ERC20Upgradeable":[1274],"ERC4626Upgradeable":[2003],"EXP_SCALE":[16116],"IComptroller":[16789],"IERC20Upgradeable":[1352],"IProtocolShareReserve":[16808],"MathUpgradeable":[3687],"MaxLoopsLimitHelper":[10335],"ReentrancyGuardUpgradeable":[661],"RewardsDistributor":[12324],"SafeERC20Upgradeable":[2440],"VToken":[15506],"VenusERC4626":[18217],"ensureNonzeroAddress":[16359]},"id":18218,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":16836,"literals":["solidity","0.8",".25"],"nodeType":"PragmaDirective","src":"41:23:52"},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol","id":16838,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18218,"sourceUnit":2004,"src":"66:119:52","symbolAliases":[{"foreign":{"id":16837,"name":"ERC4626Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2003,"src":"75:18:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol","id":16840,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18218,"sourceUnit":2441,"src":"186:118:52","symbolAliases":[{"foreign":{"id":16839,"name":"SafeERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2440,"src":"195:20:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","id":16842,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18218,"sourceUnit":1353,"src":"305:106:52","symbolAliases":[{"foreign":{"id":16841,"name":"IERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"314:17:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol","id":16844,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18218,"sourceUnit":1275,"src":"412:104:52","symbolAliases":[{"foreign":{"id":16843,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1274,"src":"421:16:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol","id":16846,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18218,"sourceUnit":662,"src":"517:121:52","symbolAliases":[{"foreign":{"id":16845,"name":"ReentrancyGuardUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":661,"src":"526:26:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol","id":16848,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18218,"sourceUnit":3688,"src":"639:101:52","symbolAliases":[{"foreign":{"id":16847,"name":"MathUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3687,"src":"648:15:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol","file":"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol","id":16850,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18218,"sourceUnit":5036,"src":"741:117:52","symbolAliases":[{"foreign":{"id":16849,"name":"AccessControlledV8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5035,"src":"750:18:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/ERC4626/Interfaces/IProtocolShareReserve.sol","file":"./Interfaces/IProtocolShareReserve.sol","id":16852,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18218,"sourceUnit":16809,"src":"860:79:52","symbolAliases":[{"foreign":{"id":16851,"name":"IProtocolShareReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16808,"src":"869:21:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol","file":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol","id":16854,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18218,"sourceUnit":12325,"src":"940:108:52","symbolAliases":[{"foreign":{"id":16853,"name":"RewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12324,"src":"949:18:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol","file":"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol","id":16856,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18218,"sourceUnit":10336,"src":"1049:102:52","symbolAliases":[{"foreign":{"id":16855,"name":"MaxLoopsLimitHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10335,"src":"1058:19:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/ERC4626/Interfaces/IComptroller.sol","file":"./Interfaces/IComptroller.sol","id":16858,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18218,"sourceUnit":16790,"src":"1152:61:52","symbolAliases":[{"foreign":{"id":16857,"name":"IComptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16789,"src":"1161:12:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/solidity-utilities/contracts/validators.sol","file":"@venusprotocol/solidity-utilities/contracts/validators.sol","id":16860,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18218,"sourceUnit":16375,"src":"1214:98:52","symbolAliases":[{"foreign":{"id":16859,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16359,"src":"1223:20:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol","file":"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol","id":16862,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18218,"sourceUnit":9432,"src":"1314:90:52","symbolAliases":[{"foreign":{"id":16861,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"1323:6:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/lib/constants.sol","file":"@venusprotocol/isolated-pools/contracts/lib/constants.sol","id":16864,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18218,"sourceUnit":16121,"src":"1405:86:52","symbolAliases":[{"foreign":{"id":16863,"name":"EXP_SCALE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16116,"src":"1414:9:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/VToken.sol","file":"@venusprotocol/isolated-pools/contracts/VToken.sol","id":16866,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18218,"sourceUnit":15507,"src":"1492:76:52","symbolAliases":[{"foreign":{"id":16865,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"1501:6:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":16868,"name":"ERC4626Upgradeable","nameLocations":["1732:18:52"],"nodeType":"IdentifierPath","referencedDeclaration":2003,"src":"1732:18:52"},"id":16869,"nodeType":"InheritanceSpecifier","src":"1732:18:52"},{"baseName":{"id":16870,"name":"AccessControlledV8","nameLocations":["1752:18:52"],"nodeType":"IdentifierPath","referencedDeclaration":5035,"src":"1752:18:52"},"id":16871,"nodeType":"InheritanceSpecifier","src":"1752:18:52"},{"baseName":{"id":16872,"name":"MaxLoopsLimitHelper","nameLocations":["1772:19:52"],"nodeType":"IdentifierPath","referencedDeclaration":10335,"src":"1772:19:52"},"id":16873,"nodeType":"InheritanceSpecifier","src":"1772:19:52"},{"baseName":{"id":16874,"name":"ReentrancyGuardUpgradeable","nameLocations":["1793:26:52"],"nodeType":"IdentifierPath","referencedDeclaration":661,"src":"1793:26:52"},"id":16875,"nodeType":"InheritanceSpecifier","src":"1793:26:52"}],"canonicalName":"VenusERC4626","contractDependencies":[],"contractKind":"contract","documentation":{"id":16867,"nodeType":"StructuredDocumentation","src":"1570:137:52","text":"@title VenusERC4626\n @notice ERC4626 wrapper for Venus vTokens, enabling standard ERC4626 vault interactions with Venus Protocol."},"fullyImplemented":true,"id":18217,"linearizedBaseContracts":[18217,661,10335,5035,106,239,2003,407,1274,2028,1352,2821,576],"name":"VenusERC4626","nameLocation":"1716:12:52","nodeType":"ContractDefinition","nodes":[{"global":false,"id":16878,"libraryName":{"id":16876,"name":"MathUpgradeable","nameLocations":["1832:15:52"],"nodeType":"IdentifierPath","referencedDeclaration":3687,"src":"1832:15:52"},"nodeType":"UsingForDirective","src":"1826:34:52","typeName":{"id":16877,"name":"uint256","nodeType":"ElementaryTypeName","src":"1852:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":16882,"libraryName":{"id":16879,"name":"SafeERC20Upgradeable","nameLocations":["1871:20:52"],"nodeType":"IdentifierPath","referencedDeclaration":2440,"src":"1871:20:52"},"nodeType":"UsingForDirective","src":"1865:48:52","typeName":{"id":16881,"nodeType":"UserDefinedTypeName","pathNode":{"id":16880,"name":"ERC20Upgradeable","nameLocations":["1896:16:52"],"nodeType":"IdentifierPath","referencedDeclaration":1274,"src":"1896:16:52"},"referencedDeclaration":1274,"src":"1896:16:52","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$1274","typeString":"contract ERC20Upgradeable"}}},{"constant":true,"documentation":{"id":16883,"nodeType":"StructuredDocumentation","src":"1919:66:52","text":"@notice Error code representing no errors in Venus operations."},"id":16886,"mutability":"constant","name":"NO_ERROR","nameLocation":"2016:8:52","nodeType":"VariableDeclaration","scope":18217,"src":"1990:38:52","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16884,"name":"uint256","nodeType":"ElementaryTypeName","src":"1990:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":16885,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2027:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"internal"},{"constant":false,"documentation":{"id":16887,"nodeType":"StructuredDocumentation","src":"2035:64:52","text":"@notice The Venus vToken associated with this ERC4626 vault."},"functionSelector":"9bb1a99c","id":16890,"mutability":"mutable","name":"vToken","nameLocation":"2118:6:52","nodeType":"VariableDeclaration","scope":18217,"src":"2104:20:52","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":16889,"nodeType":"UserDefinedTypeName","pathNode":{"id":16888,"name":"VToken","nameLocations":["2104:6:52"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"2104:6:52"},"referencedDeclaration":15506,"src":"2104:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"public"},{"constant":false,"documentation":{"id":16891,"nodeType":"StructuredDocumentation","src":"2131:78:52","text":"@notice The Venus Comptroller contract, responsible for market operations."},"functionSelector":"5fe3b567","id":16894,"mutability":"mutable","name":"comptroller","nameLocation":"2234:11:52","nodeType":"VariableDeclaration","scope":18217,"src":"2214:31:52","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IComptroller_$16789","typeString":"contract IComptroller"},"typeName":{"id":16893,"nodeType":"UserDefinedTypeName","pathNode":{"id":16892,"name":"IComptroller","nameLocations":["2214:12:52"],"nodeType":"IdentifierPath","referencedDeclaration":16789,"src":"2214:12:52"},"referencedDeclaration":16789,"src":"2214:12:52","typeDescriptions":{"typeIdentifier":"t_contract$_IComptroller_$16789","typeString":"contract IComptroller"}},"visibility":"public"},{"constant":false,"documentation":{"id":16895,"nodeType":"StructuredDocumentation","src":"2252:71:52","text":"@notice The recipient of rewards distributed by the Venus Protocol."},"functionSelector":"17f33340","id":16897,"mutability":"mutable","name":"rewardRecipient","nameLocation":"2343:15:52","nodeType":"VariableDeclaration","scope":18217,"src":"2328:30:52","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16896,"name":"address","nodeType":"ElementaryTypeName","src":"2328:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"anonymous":false,"documentation":{"id":16898,"nodeType":"StructuredDocumentation","src":"2365:172:52","text":"@notice Emitted when rewards are claimed.\n @param amount The amount of reward tokens claimed.\n @param rewardToken The address of the reward token claimed."},"eventSelector":"ba56c3ab1f752776eef60db959a4e6b643e89595315edbbd945e104623fa03ba","id":16904,"name":"ClaimRewards","nameLocation":"2548:12:52","nodeType":"EventDefinition","parameters":{"id":16903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16900,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2569:6:52","nodeType":"VariableDeclaration","scope":16904,"src":"2561:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16899,"name":"uint256","nodeType":"ElementaryTypeName","src":"2561:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16902,"indexed":true,"mutability":"mutable","name":"rewardToken","nameLocation":"2593:11:52","nodeType":"VariableDeclaration","scope":16904,"src":"2577:27:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16901,"name":"address","nodeType":"ElementaryTypeName","src":"2577:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2560:45:52"},"src":"2542:64:52"},{"anonymous":false,"documentation":{"id":16905,"nodeType":"StructuredDocumentation","src":"2612:194:52","text":"@notice Emitted when the reward recipient address is updated.\n @param oldRecipient The previous reward recipient address.\n @param newRecipient The new reward recipient address."},"eventSelector":"c8c11bb97ac2ffa10ce2e2a98f4c1fd8df84cfa2e1a15e013ed2383ab1f527ad","id":16911,"name":"RewardRecipientUpdated","nameLocation":"2817:22:52","nodeType":"EventDefinition","parameters":{"id":16910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16907,"indexed":true,"mutability":"mutable","name":"oldRecipient","nameLocation":"2856:12:52","nodeType":"VariableDeclaration","scope":16911,"src":"2840:28:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16906,"name":"address","nodeType":"ElementaryTypeName","src":"2840:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16909,"indexed":true,"mutability":"mutable","name":"newRecipient","nameLocation":"2886:12:52","nodeType":"VariableDeclaration","scope":16911,"src":"2870:28:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16908,"name":"address","nodeType":"ElementaryTypeName","src":"2870:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2839:60:52"},"src":"2811:89:52"},{"anonymous":false,"documentation":{"id":16912,"nodeType":"StructuredDocumentation","src":"2906:47:52","text":"@notice Event emitted when tokens are swept"},"eventSelector":"6d25be279134f4ecaa4770aff0c3d916d9e7c5ef37b65ed95dbdba411f5d54d5","id":16920,"name":"SweepToken","nameLocation":"2964:10:52","nodeType":"EventDefinition","parameters":{"id":16919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16914,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"2991:5:52","nodeType":"VariableDeclaration","scope":16920,"src":"2975:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16913,"name":"address","nodeType":"ElementaryTypeName","src":"2975:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16916,"indexed":true,"mutability":"mutable","name":"receiver","nameLocation":"3014:8:52","nodeType":"VariableDeclaration","scope":16920,"src":"2998:24:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16915,"name":"address","nodeType":"ElementaryTypeName","src":"2998:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16918,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"3032:6:52","nodeType":"VariableDeclaration","scope":16920,"src":"3024:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16917,"name":"uint256","nodeType":"ElementaryTypeName","src":"3024:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2974:65:52"},"src":"2958:82:52"},{"documentation":{"id":16921,"nodeType":"StructuredDocumentation","src":"3046:239:52","text":"@notice Thrown when a Venus protocol call returns an error.\n @dev This error is triggered if a Venus operation (such as minting or redeeming vTokens) fails.\n @param errorCode The error code returned by the Venus protocol."},"errorSelector":"219195dc","id":16925,"name":"VenusERC4626__VenusError","nameLocation":"3296:24:52","nodeType":"ErrorDefinition","parameters":{"id":16924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16923,"mutability":"mutable","name":"errorCode","nameLocation":"3329:9:52","nodeType":"VariableDeclaration","scope":16925,"src":"3321:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16922,"name":"uint256","nodeType":"ElementaryTypeName","src":"3321:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3320:19:52"},"src":"3290:50:52"},{"documentation":{"id":16926,"nodeType":"StructuredDocumentation","src":"3346:167:52","text":"@notice Thrown when a deposit exceeds the maximum allowed limit.\n @dev This error is triggered if the deposit amount is greater than `maxDeposit(receiver)`."},"errorSelector":"26ac6ee1","id":16928,"name":"ERC4626__DepositMoreThanMax","nameLocation":"3524:27:52","nodeType":"ErrorDefinition","parameters":{"id":16927,"nodeType":"ParameterList","parameters":[],"src":"3551:2:52"},"src":"3518:36:52"},{"documentation":{"id":16929,"nodeType":"StructuredDocumentation","src":"3560:168:52","text":"@notice Thrown when a mint operation exceeds the maximum allowed limit.\n @dev This error is triggered if the mint amount is greater than `maxMint(receiver)`."},"errorSelector":"40868f79","id":16931,"name":"ERC4626__MintMoreThanMax","nameLocation":"3739:24:52","nodeType":"ErrorDefinition","parameters":{"id":16930,"nodeType":"ParameterList","parameters":[],"src":"3763:2:52"},"src":"3733:33:52"},{"documentation":{"id":16932,"nodeType":"StructuredDocumentation","src":"3772:174:52","text":"@notice Thrown when a withdrawal exceeds the maximum available assets.\n @dev This error is triggered if the withdrawal amount is greater than `maxWithdraw(owner)`."},"errorSelector":"e9ed9515","id":16934,"name":"ERC4626__WithdrawMoreThanMax","nameLocation":"3957:28:52","nodeType":"ErrorDefinition","parameters":{"id":16933,"nodeType":"ParameterList","parameters":[],"src":"3985:2:52"},"src":"3951:37:52"},{"documentation":{"id":16935,"nodeType":"StructuredDocumentation","src":"3994:173:52","text":"@notice Thrown when a redemption exceeds the maximum redeemable shares.\n @dev This error is triggered if the redemption amount is greater than `maxRedeem(owner)`."},"errorSelector":"88902479","id":16937,"name":"ERC4626__RedeemMoreThanMax","nameLocation":"4178:26:52","nodeType":"ErrorDefinition","parameters":{"id":16936,"nodeType":"ParameterList","parameters":[],"src":"4204:2:52"},"src":"4172:35:52"},{"documentation":{"id":16938,"nodeType":"StructuredDocumentation","src":"4213:305:52","text":"@notice Thrown when attempting an operation with a zero amount.\n @dev This error prevents unnecessary transactions with zero amounts in deposit, withdraw, mint, or redeem operations.\n @param operation The name of the operation that failed (e.g., \"deposit\", \"withdraw\", \"mint\", \"redeem\")."},"errorSelector":"09ba658a","id":16942,"name":"ERC4626__ZeroAmount","nameLocation":"4529:19:52","nodeType":"ErrorDefinition","parameters":{"id":16941,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16940,"mutability":"mutable","name":"operation","nameLocation":"4556:9:52","nodeType":"VariableDeclaration","scope":16942,"src":"4549:16:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":16939,"name":"string","nodeType":"ElementaryTypeName","src":"4549:6:52","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4548:18:52"},"src":"4523:44:52"},{"body":{"id":16949,"nodeType":"Block","src":"4640:163:52","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":16946,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":557,"src":"4774:20:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":16947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4774:22:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16948,"nodeType":"ExpressionStatement","src":"4774:22:52"}]},"documentation":{"id":16943,"nodeType":"StructuredDocumentation","src":"4573:48:52","text":"@custom:oz-upgrades-unsafe-allow constructor"},"id":16950,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":16944,"nodeType":"ParameterList","parameters":[],"src":"4637:2:52"},"returnParameters":{"id":16945,"nodeType":"ParameterList","parameters":[],"src":"4640:0:52"},"scope":18217,"src":"4626:177:52","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":17004,"nodeType":"Block","src":"5157:364:52","statements":[{"expression":{"arguments":[{"id":16959,"name":"vToken_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16953,"src":"5188:7:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16958,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16359,"src":"5167:20:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":16960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5167:29:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16961,"nodeType":"ExpressionStatement","src":"5167:29:52"},{"expression":{"id":16966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16962,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"5207:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16964,"name":"vToken_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16953,"src":"5223:7:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16963,"name":"VToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15506,"src":"5216:6:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VToken_$15506_$","typeString":"type(contract VToken)"}},"id":16965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5216:15:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"src":"5207:24:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":16967,"nodeType":"ExpressionStatement","src":"5207:24:52"},{"expression":{"id":16977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16968,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16894,"src":"5241:11:52","typeDescriptions":{"typeIdentifier":"t_contract$_IComptroller_$16789","typeString":"contract IComptroller"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16972,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"5276:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":16973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5283:11:52","memberName":"comptroller","nodeType":"MemberAccess","referencedDeclaration":15545,"src":"5276:18:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_ComptrollerInterface_$9353_$","typeString":"function () view external returns (contract ComptrollerInterface)"}},"id":16974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5276:20:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}],"id":16971,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5268:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16970,"name":"address","nodeType":"ElementaryTypeName","src":"5268:7:52","typeDescriptions":{}}},"id":16975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5268:29:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16969,"name":"IComptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16789,"src":"5255:12:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IComptroller_$16789_$","typeString":"type(contract IComptroller)"}},"id":16976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5255:43:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IComptroller_$16789","typeString":"contract IComptroller"}},"src":"5241:57:52","typeDescriptions":{"typeIdentifier":"t_contract$_IComptroller_$16789","typeString":"contract IComptroller"}},"id":16978,"nodeType":"ExpressionStatement","src":"5241:57:52"},{"assignments":[16981],"declarations":[{"constant":false,"id":16981,"mutability":"mutable","name":"asset","nameLocation":"5325:5:52","nodeType":"VariableDeclaration","scope":17004,"src":"5308:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$1274","typeString":"contract ERC20Upgradeable"},"typeName":{"id":16980,"nodeType":"UserDefinedTypeName","pathNode":{"id":16979,"name":"ERC20Upgradeable","nameLocations":["5308:16:52"],"nodeType":"IdentifierPath","referencedDeclaration":1274,"src":"5308:16:52"},"referencedDeclaration":1274,"src":"5308:16:52","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$1274","typeString":"contract ERC20Upgradeable"}},"visibility":"internal"}],"id":16987,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16983,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"5350:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":16984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5357:10:52","memberName":"underlying","nodeType":"MemberAccess","referencedDeclaration":15529,"src":"5350:17:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":16985,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5350:19:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16982,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1274,"src":"5333:16:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC20Upgradeable_$1274_$","typeString":"type(contract ERC20Upgradeable)"}},"id":16986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5333:37:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$1274","typeString":"contract ERC20Upgradeable"}},"nodeType":"VariableDeclarationStatement","src":"5308:62:52"},{"expression":{"arguments":[{"arguments":[{"id":16990,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16981,"src":"5413:5:52","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$1274","typeString":"contract ERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC20Upgradeable_$1274","typeString":"contract ERC20Upgradeable"}],"id":16989,"name":"_generateVaultName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18195,"src":"5394:18:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_ERC20Upgradeable_$1274_$returns$_t_string_memory_ptr_$","typeString":"function (contract ERC20Upgradeable) view returns (string memory)"}},"id":16991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5394:25:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"arguments":[{"id":16993,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16981,"src":"5442:5:52","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$1274","typeString":"contract ERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC20Upgradeable_$1274","typeString":"contract ERC20Upgradeable"}],"id":16992,"name":"_generateVaultSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18216,"src":"5421:20:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_ERC20Upgradeable_$1274_$returns$_t_string_memory_ptr_$","typeString":"function (contract ERC20Upgradeable) view returns (string memory)"}},"id":16994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5421:27:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":16988,"name":"__ERC20_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":709,"src":"5381:12:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":16995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5381:68:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16996,"nodeType":"ExpressionStatement","src":"5381:68:52"},{"expression":{"arguments":[{"id":16998,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16981,"src":"5474:5:52","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$1274","typeString":"contract ERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC20Upgradeable_$1274","typeString":"contract ERC20Upgradeable"}],"id":16997,"name":"__ERC4626_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1389,"src":"5459:14:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$1352_$returns$__$","typeString":"function (contract IERC20Upgradeable)"}},"id":16999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5459:21:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17000,"nodeType":"ExpressionStatement","src":"5459:21:52"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":17001,"name":"__ReentrancyGuard_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":600,"src":"5490:22:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":17002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5490:24:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17003,"nodeType":"ExpressionStatement","src":"5490:24:52"}]},"documentation":{"id":16951,"nodeType":"StructuredDocumentation","src":"4809:287:52","text":"@notice Initializes the VenusERC4626 vault, only with the VToken address associated to the vault\n @dev `initialize2` should be invoked to complete the configuration of the vault\n @param vToken_ The VToken associated with the vault, representing the yield-bearing asset."},"functionSelector":"c4d66de8","id":17005,"implemented":true,"kind":"function","modifiers":[{"id":16956,"kind":"modifierInvocation","modifierName":{"id":16955,"name":"initializer","nameLocations":["5145:11:52"],"nodeType":"IdentifierPath","referencedDeclaration":478,"src":"5145:11:52"},"nodeType":"ModifierInvocation","src":"5145:11:52"}],"name":"initialize","nameLocation":"5110:10:52","nodeType":"FunctionDefinition","parameters":{"id":16954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16953,"mutability":"mutable","name":"vToken_","nameLocation":"5129:7:52","nodeType":"VariableDeclaration","scope":17005,"src":"5121:15:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16952,"name":"address","nodeType":"ElementaryTypeName","src":"5121:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5120:17:52"},"returnParameters":{"id":16957,"nodeType":"ParameterList","parameters":[],"src":"5157:0:52"},"scope":18217,"src":"5101:420:52","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":17019,"nodeType":"Block","src":"5822:104:52","statements":[{"expression":{"arguments":[{"hexValue":"7365744d61784c6f6f70734c696d69742875696e7432353629","id":17012,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5852:27:52","typeDescriptions":{"typeIdentifier":"t_stringliteral_80d45a2de849ace9c5a366489970546423576c27326767c434019efa63aabc4c","typeString":"literal_string \"setMaxLoopsLimit(uint256)\""},"value":"setMaxLoopsLimit(uint256)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_80d45a2de849ace9c5a366489970546423576c27326767c434019efa63aabc4c","typeString":"literal_string \"setMaxLoopsLimit(uint256)\""}],"id":17011,"name":"_checkAccessAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5034,"src":"5832:19:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) view"}},"id":17013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5832:48:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17014,"nodeType":"ExpressionStatement","src":"5832:48:52"},{"expression":{"arguments":[{"id":17016,"name":"loopsLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17008,"src":"5908:10:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17015,"name":"_setMaxLoopsLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10317,"src":"5890:17:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":17017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5890:29:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17018,"nodeType":"ExpressionStatement","src":"5890:29:52"}]},"documentation":{"id":17006,"nodeType":"StructuredDocumentation","src":"5527:235:52","text":" @notice Set the limit for the loops can iterate to avoid the DOS\n @param loopsLimit Number of loops limit\n @custom:event Emits MaxLoopsLimitUpdated event on success\n @custom:access Controlled by ACM"},"functionSelector":"80d45a2d","id":17020,"implemented":true,"kind":"function","modifiers":[],"name":"setMaxLoopsLimit","nameLocation":"5776:16:52","nodeType":"FunctionDefinition","parameters":{"id":17009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17008,"mutability":"mutable","name":"loopsLimit","nameLocation":"5801:10:52","nodeType":"VariableDeclaration","scope":17020,"src":"5793:18:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17007,"name":"uint256","nodeType":"ElementaryTypeName","src":"5793:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5792:20:52"},"returnParameters":{"id":17010,"nodeType":"ParameterList","parameters":[],"src":"5822:0:52"},"scope":18217,"src":"5767:159:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17034,"nodeType":"Block","src":"6152:110:52","statements":[{"expression":{"arguments":[{"hexValue":"736574526577617264526563697069656e74286164647265737329","id":17027,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6182:29:52","typeDescriptions":{"typeIdentifier":"t_stringliteral_e521136fd60ae7909bbd484f4511b149016910c16de89b916d13c21ed8d27952","typeString":"literal_string \"setRewardRecipient(address)\""},"value":"setRewardRecipient(address)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_e521136fd60ae7909bbd484f4511b149016910c16de89b916d13c21ed8d27952","typeString":"literal_string \"setRewardRecipient(address)\""}],"id":17026,"name":"_checkAccessAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5034,"src":"6162:19:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) view"}},"id":17028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6162:50:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17029,"nodeType":"ExpressionStatement","src":"6162:50:52"},{"expression":{"arguments":[{"id":17031,"name":"newRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17023,"src":"6242:12:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17030,"name":"_setRewardRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18020,"src":"6222:19:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":17032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6222:33:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17033,"nodeType":"ExpressionStatement","src":"6222:33:52"}]},"documentation":{"id":17021,"nodeType":"StructuredDocumentation","src":"5932:156:52","text":"@notice Sets a new reward recipient address\n @param newRecipient The address of the new reward recipient\n @custom:access Controlled by ACM"},"functionSelector":"e521136f","id":17035,"implemented":true,"kind":"function","modifiers":[],"name":"setRewardRecipient","nameLocation":"6102:18:52","nodeType":"FunctionDefinition","parameters":{"id":17024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17023,"mutability":"mutable","name":"newRecipient","nameLocation":"6129:12:52","nodeType":"VariableDeclaration","scope":17035,"src":"6121:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17022,"name":"address","nodeType":"ElementaryTypeName","src":"6121:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6120:22:52"},"returnParameters":{"id":17025,"nodeType":"ParameterList","parameters":[],"src":"6152:0:52"},"scope":18217,"src":"6093:169:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17081,"nodeType":"Block","src":"6558:274:52","statements":[{"assignments":[17045],"declarations":[{"constant":false,"id":17045,"mutability":"mutable","name":"balance","nameLocation":"6576:7:52","nodeType":"VariableDeclaration","scope":17081,"src":"6568:15:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17044,"name":"uint256","nodeType":"ElementaryTypeName","src":"6568:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17053,"initialValue":{"arguments":[{"arguments":[{"id":17050,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6610:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}],"id":17049,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6602:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17048,"name":"address","nodeType":"ElementaryTypeName","src":"6602:7:52","typeDescriptions":{}}},"id":17051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6602:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17046,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17039,"src":"6586:5:52","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":17047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6592:9:52","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1309,"src":"6586:15:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":17052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6586:30:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6568:48:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17054,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17045,"src":"6631:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":17055,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6641:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6631:11:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17080,"nodeType":"IfStatement","src":"6627:199:52","trueBody":{"id":17079,"nodeType":"Block","src":"6644:182:52","statements":[{"assignments":[17058],"declarations":[{"constant":false,"id":17058,"mutability":"mutable","name":"owner_","nameLocation":"6666:6:52","nodeType":"VariableDeclaration","scope":17079,"src":"6658:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17057,"name":"address","nodeType":"ElementaryTypeName","src":"6658:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17061,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":17059,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":162,"src":"6675:5:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":17060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6675:7:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6658:24:52"},{"expression":{"arguments":[{"id":17065,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17039,"src":"6730:5:52","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},{"id":17066,"name":"owner_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17058,"src":"6737:6:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17067,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17045,"src":"6745:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17062,"name":"SafeERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2440,"src":"6696:20:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeERC20Upgradeable_$2440_$","typeString":"type(library SafeERC20Upgradeable)"}},"id":17064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6717:12:52","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":2097,"src":"6696:33:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$1352_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20Upgradeable,address,uint256)"}},"id":17068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6696:57:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17069,"nodeType":"ExpressionStatement","src":"6696:57:52"},{"eventCall":{"arguments":[{"arguments":[{"id":17073,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17039,"src":"6791:5:52","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}],"id":17072,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6783:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17071,"name":"address","nodeType":"ElementaryTypeName","src":"6783:7:52","typeDescriptions":{}}},"id":17074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6783:14:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17075,"name":"owner_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17058,"src":"6799:6:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17076,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17045,"src":"6807:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17070,"name":"SweepToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16920,"src":"6772:10:52","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":17077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6772:43:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17078,"nodeType":"EmitStatement","src":"6767:48:52"}]}}]},"documentation":{"id":17036,"nodeType":"StructuredDocumentation","src":"6268:221:52","text":"@notice Sweeps the input token address tokens from the contract and sends them to the owner\n @param token Address of the token\n @custom:event SweepToken emits on success\n @custom:access Only owner"},"functionSelector":"1be19560","id":17082,"implemented":true,"kind":"function","modifiers":[{"id":17042,"kind":"modifierInvocation","modifierName":{"id":17041,"name":"onlyOwner","nameLocations":["6548:9:52"],"nodeType":"IdentifierPath","referencedDeclaration":153,"src":"6548:9:52"},"nodeType":"ModifierInvocation","src":"6548:9:52"}],"name":"sweepToken","nameLocation":"6503:10:52","nodeType":"FunctionDefinition","parameters":{"id":17040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17039,"mutability":"mutable","name":"token","nameLocation":"6532:5:52","nodeType":"VariableDeclaration","scope":17082,"src":"6514:23:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":17038,"nodeType":"UserDefinedTypeName","pathNode":{"id":17037,"name":"IERC20Upgradeable","nameLocations":["6514:17:52"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"6514:17:52"},"referencedDeclaration":1352,"src":"6514:17:52","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"internal"}],"src":"6513:25:52"},"returnParameters":{"id":17043,"nodeType":"ParameterList","parameters":[],"src":"6558:0:52"},"scope":18217,"src":"6494:338:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17227,"nodeType":"Block","src":"7135:1510:52","statements":[{"assignments":[17088],"declarations":[{"constant":false,"id":17088,"mutability":"mutable","name":"_comptroller","nameLocation":"7158:12:52","nodeType":"VariableDeclaration","scope":17227,"src":"7145:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IComptroller_$16789","typeString":"contract IComptroller"},"typeName":{"id":17087,"nodeType":"UserDefinedTypeName","pathNode":{"id":17086,"name":"IComptroller","nameLocations":["7145:12:52"],"nodeType":"IdentifierPath","referencedDeclaration":16789,"src":"7145:12:52"},"referencedDeclaration":16789,"src":"7145:12:52","typeDescriptions":{"typeIdentifier":"t_contract$_IComptroller_$16789","typeString":"contract IComptroller"}},"visibility":"internal"}],"id":17090,"initialValue":{"id":17089,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16894,"src":"7173:11:52","typeDescriptions":{"typeIdentifier":"t_contract$_IComptroller_$16789","typeString":"contract IComptroller"}},"nodeType":"VariableDeclarationStatement","src":"7145:39:52"},{"assignments":[17093],"declarations":[{"constant":false,"id":17093,"mutability":"mutable","name":"_vToken","nameLocation":"7201:7:52","nodeType":"VariableDeclaration","scope":17227,"src":"7194:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"},"typeName":{"id":17092,"nodeType":"UserDefinedTypeName","pathNode":{"id":17091,"name":"VToken","nameLocations":["7194:6:52"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"7194:6:52"},"referencedDeclaration":15506,"src":"7194:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"visibility":"internal"}],"id":17095,"initialValue":{"id":17094,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"7211:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"nodeType":"VariableDeclarationStatement","src":"7194:23:52"},{"assignments":[17097],"declarations":[{"constant":false,"id":17097,"mutability":"mutable","name":"_rewardRecipient","nameLocation":"7235:16:52","nodeType":"VariableDeclaration","scope":17227,"src":"7227:24:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17096,"name":"address","nodeType":"ElementaryTypeName","src":"7227:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17099,"initialValue":{"id":17098,"name":"rewardRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16897,"src":"7254:15:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"7227:42:52"},{"assignments":[17104],"declarations":[{"constant":false,"id":17104,"mutability":"mutable","name":"rewardDistributors","nameLocation":"7308:18:52","nodeType":"VariableDeclaration","scope":17227,"src":"7280:46:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr","typeString":"contract RewardsDistributor[]"},"typeName":{"baseType":{"id":17102,"nodeType":"UserDefinedTypeName","pathNode":{"id":17101,"name":"RewardsDistributor","nameLocations":["7280:18:52"],"nodeType":"IdentifierPath","referencedDeclaration":12324,"src":"7280:18:52"},"referencedDeclaration":12324,"src":"7280:18:52","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":17103,"nodeType":"ArrayTypeName","src":"7280:20:52","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_storage_ptr","typeString":"contract RewardsDistributor[]"}},"visibility":"internal"}],"id":17108,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17105,"name":"_comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17088,"src":"7329:12:52","typeDescriptions":{"typeIdentifier":"t_contract$_IComptroller_$16789","typeString":"contract IComptroller"}},"id":17106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7342:21:52","memberName":"getRewardDistributors","nodeType":"MemberAccess","referencedDeclaration":16781,"src":"7329:34:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_$","typeString":"function () view external returns (contract RewardsDistributor[] memory)"}},"id":17107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7329:36:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr","typeString":"contract RewardsDistributor[] memory"}},"nodeType":"VariableDeclarationStatement","src":"7280:85:52"},{"expression":{"arguments":[{"expression":{"id":17110,"name":"rewardDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17104,"src":"7392:18:52","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr","typeString":"contract RewardsDistributor[] memory"}},"id":17111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7411:6:52","memberName":"length","nodeType":"MemberAccess","src":"7392:25:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17109,"name":"_ensureMaxLoops","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10334,"src":"7376:15:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":17112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7376:42:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17113,"nodeType":"ExpressionStatement","src":"7376:42:52"},{"body":{"id":17225,"nodeType":"Block","src":"7485:1154:52","statements":[{"assignments":[17127],"declarations":[{"constant":false,"id":17127,"mutability":"mutable","name":"rewardDistributor","nameLocation":"7518:17:52","nodeType":"VariableDeclaration","scope":17225,"src":"7499:36:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"},"typeName":{"id":17126,"nodeType":"UserDefinedTypeName","pathNode":{"id":17125,"name":"RewardsDistributor","nameLocations":["7499:18:52"],"nodeType":"IdentifierPath","referencedDeclaration":12324,"src":"7499:18:52"},"referencedDeclaration":12324,"src":"7499:18:52","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"visibility":"internal"}],"id":17131,"initialValue":{"baseExpression":{"id":17128,"name":"rewardDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17104,"src":"7538:18:52","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr","typeString":"contract RewardsDistributor[] memory"}},"id":17130,"indexExpression":{"id":17129,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17115,"src":"7557:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7538:21:52","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"nodeType":"VariableDeclarationStatement","src":"7499:60:52"},{"assignments":[17134],"declarations":[{"constant":false,"id":17134,"mutability":"mutable","name":"rewardToken","nameLocation":"7591:11:52","nodeType":"VariableDeclaration","scope":17225,"src":"7573:29:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":17133,"nodeType":"UserDefinedTypeName","pathNode":{"id":17132,"name":"IERC20Upgradeable","nameLocations":["7573:17:52"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"7573:17:52"},"referencedDeclaration":1352,"src":"7573:17:52","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"internal"}],"id":17143,"initialValue":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17138,"name":"rewardDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17127,"src":"7631:17:52","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":17139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7649:11:52","memberName":"rewardToken","nodeType":"MemberAccess","referencedDeclaration":12402,"src":"7631:29:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IERC20Upgradeable_$1352_$","typeString":"function () view external returns (contract IERC20Upgradeable)"}},"id":17140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7631:31:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}],"id":17137,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7623:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17136,"name":"address","nodeType":"ElementaryTypeName","src":"7623:7:52","typeDescriptions":{}}},"id":17141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7623:40:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17135,"name":"IERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"7605:17:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Upgradeable_$1352_$","typeString":"type(contract IERC20Upgradeable)"}},"id":17142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7605:59:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"nodeType":"VariableDeclarationStatement","src":"7573:91:52"},{"assignments":[17148],"declarations":[{"constant":false,"id":17148,"mutability":"mutable","name":"vTokens","nameLocation":"7695:7:52","nodeType":"VariableDeclaration","scope":17225,"src":"7679:23:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[]"},"typeName":{"baseType":{"id":17146,"nodeType":"UserDefinedTypeName","pathNode":{"id":17145,"name":"VToken","nameLocations":["7679:6:52"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"7679:6:52"},"referencedDeclaration":15506,"src":"7679:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17147,"nodeType":"ArrayTypeName","src":"7679:8:52","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}},"visibility":"internal"}],"id":17155,"initialValue":{"arguments":[{"hexValue":"31","id":17153,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7718:1:52","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":17152,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"7705:12:52","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (contract VToken[] memory)"},"typeName":{"baseType":{"id":17150,"nodeType":"UserDefinedTypeName","pathNode":{"id":17149,"name":"VToken","nameLocations":["7709:6:52"],"nodeType":"IdentifierPath","referencedDeclaration":15506,"src":"7709:6:52"},"referencedDeclaration":15506,"src":"7709:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17151,"nodeType":"ArrayTypeName","src":"7709:8:52","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_storage_ptr","typeString":"contract VToken[]"}}},"id":17154,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7705:15:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"nodeType":"VariableDeclarationStatement","src":"7679:41:52"},{"expression":{"id":17160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17156,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17148,"src":"7734:7:52","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}},"id":17158,"indexExpression":{"hexValue":"30","id":17157,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7742:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7734:10:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17159,"name":"_vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17093,"src":"7747:7:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"src":"7734:20:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17161,"nodeType":"ExpressionStatement","src":"7734:20:52"},{"expression":{"arguments":[{"arguments":[{"id":17168,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7831:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}],"id":17167,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7823:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17166,"name":"address","nodeType":"ElementaryTypeName","src":"7823:7:52","typeDescriptions":{}}},"id":17169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7823:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17170,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17148,"src":"7838:7:52","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","typeString":"contract VToken[] memory"}],"expression":{"arguments":[{"id":17163,"name":"rewardDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17127,"src":"7787:17:52","typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}],"id":17162,"name":"RewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12324,"src":"7768:18:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RewardsDistributor_$12324_$","typeString":"type(contract RewardsDistributor)"}},"id":17164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7768:37:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_RewardsDistributor_$12324","typeString":"contract RewardsDistributor"}},"id":17165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7806:16:52","memberName":"claimRewardToken","nodeType":"MemberAccess","referencedDeclaration":11183,"src":"7768:54:52","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_$returns$__$","typeString":"function (address,contract VToken[] memory) external"}},"id":17171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7768:78:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17172,"nodeType":"ExpressionStatement","src":"7768:78:52"},{"assignments":[17174],"declarations":[{"constant":false,"id":17174,"mutability":"mutable","name":"rewardBalance","nameLocation":"7868:13:52","nodeType":"VariableDeclaration","scope":17225,"src":"7860:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17173,"name":"uint256","nodeType":"ElementaryTypeName","src":"7860:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17182,"initialValue":{"arguments":[{"arguments":[{"id":17179,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7914:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}],"id":17178,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7906:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17177,"name":"address","nodeType":"ElementaryTypeName","src":"7906:7:52","typeDescriptions":{}}},"id":17180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7906:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17175,"name":"rewardToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17134,"src":"7884:11:52","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":17176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7896:9:52","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1309,"src":"7884:21:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":17181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7884:36:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7860:60:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17183,"name":"rewardBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17174,"src":"7939:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":17184,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7955:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7939:17:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17216,"nodeType":"IfStatement","src":"7935:626:52","trueBody":{"id":17215,"nodeType":"Block","src":"7958:603:52","statements":[{"expression":{"arguments":[{"id":17189,"name":"rewardToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17134,"src":"8010:11:52","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},{"id":17190,"name":"_rewardRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17097,"src":"8023:16:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17191,"name":"rewardBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17174,"src":"8041:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17186,"name":"SafeERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2440,"src":"7976:20:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeERC20Upgradeable_$2440_$","typeString":"type(library SafeERC20Upgradeable)"}},"id":17188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7997:12:52","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":2097,"src":"7976:33:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$1352_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20Upgradeable,address,uint256)"}},"id":17192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7976:79:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17193,"nodeType":"ExpressionStatement","src":"7976:79:52"},{"clauses":[{"block":{"id":17210,"nodeType":"Block","src":"8536:2:52","statements":[]},"errorName":"","id":17211,"nodeType":"TryCatchClause","src":"8536:2:52"},{"block":{"id":17212,"nodeType":"Block","src":"8545:2:52","statements":[]},"errorName":"","id":17213,"nodeType":"TryCatchClause","src":"8539:8:52"}],"externalCall":{"arguments":[{"arguments":[{"id":17200,"name":"_comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17088,"src":"8356:12:52","typeDescriptions":{"typeIdentifier":"t_contract$_IComptroller_$16789","typeString":"contract IComptroller"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IComptroller_$16789","typeString":"contract IComptroller"}],"id":17199,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8348:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17198,"name":"address","nodeType":"ElementaryTypeName","src":"8348:7:52","typeDescriptions":{}}},"id":17201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8348:21:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":17204,"name":"rewardToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17134,"src":"8403:11:52","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}],"id":17203,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8395:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17202,"name":"address","nodeType":"ElementaryTypeName","src":"8395:7:52","typeDescriptions":{}}},"id":17205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8395:20:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"expression":{"id":17206,"name":"IProtocolShareReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16808,"src":"8441:21:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolShareReserve_$16808_$","typeString":"type(contract IProtocolShareReserve)"}},"id":17207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8463:10:52","memberName":"IncomeType","nodeType":"MemberAccess","referencedDeclaration":16797,"src":"8441:32:52","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_IncomeType_$16797_$","typeString":"type(enum IProtocolShareReserve.IncomeType)"}},"id":17208,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8474:23:52","memberName":"ERC4626_WRAPPER_REWARDS","nodeType":"MemberAccess","referencedDeclaration":16795,"src":"8441:56:52","typeDescriptions":{"typeIdentifier":"t_enum$_IncomeType_$16797","typeString":"enum IProtocolShareReserve.IncomeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_IncomeType_$16797","typeString":"enum IProtocolShareReserve.IncomeType"}],"expression":{"arguments":[{"id":17195,"name":"_rewardRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17097,"src":"8287:16:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17194,"name":"IProtocolShareReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16808,"src":"8265:21:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolShareReserve_$16808_$","typeString":"type(contract IProtocolShareReserve)"}},"id":17196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8265:39:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolShareReserve_$16808","typeString":"contract IProtocolShareReserve"}},"id":17197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8305:17:52","memberName":"updateAssetsState","nodeType":"MemberAccess","referencedDeclaration":16807,"src":"8265:57:52","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_enum$_IncomeType_$16797_$returns$__$","typeString":"function (address,address,enum IProtocolShareReserve.IncomeType) external"}},"id":17209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8265:254:52","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17214,"nodeType":"TryStatement","src":"8241:306:52"}]}},{"eventCall":{"arguments":[{"id":17218,"name":"rewardBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17174,"src":"8592:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":17221,"name":"rewardToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17134,"src":"8615:11:52","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}],"id":17220,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8607:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17219,"name":"address","nodeType":"ElementaryTypeName","src":"8607:7:52","typeDescriptions":{}}},"id":17222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8607:20:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17217,"name":"ClaimRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16904,"src":"8579:12:52","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":17223,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8579:49:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17224,"nodeType":"EmitStatement","src":"8574:54:52"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17118,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17115,"src":"7449:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":17119,"name":"rewardDistributors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17104,"src":"7453:18:52","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr","typeString":"contract RewardsDistributor[] memory"}},"id":17120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7472:6:52","memberName":"length","nodeType":"MemberAccess","src":"7453:25:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7449:29:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17226,"initializationExpression":{"assignments":[17115],"declarations":[{"constant":false,"id":17115,"mutability":"mutable","name":"i","nameLocation":"7442:1:52","nodeType":"VariableDeclaration","scope":17226,"src":"7434:9:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17114,"name":"uint256","nodeType":"ElementaryTypeName","src":"7434:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17117,"initialValue":{"hexValue":"30","id":17116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7446:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7434:13:52"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":17123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"7480:3:52","subExpression":{"id":17122,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17115,"src":"7480:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17124,"nodeType":"ExpressionStatement","src":"7480:3:52"},"nodeType":"ForStatement","src":"7429:1210:52"}]},"documentation":{"id":17083,"nodeType":"StructuredDocumentation","src":"6838:259:52","text":"@notice Claims rewards from all reward distributors associated with the VToken and transfers them to the reward recipient.\n @dev Iterates through all reward distributors fetched from the comptroller, claims rewards, and transfers them if available."},"functionSelector":"372500ab","id":17228,"implemented":true,"kind":"function","modifiers":[],"name":"claimRewards","nameLocation":"7111:12:52","nodeType":"FunctionDefinition","parameters":{"id":17084,"nodeType":"ParameterList","parameters":[],"src":"7123:2:52"},"returnParameters":{"id":17085,"nodeType":"ParameterList","parameters":[],"src":"7135:0:52"},"scope":18217,"src":"7102:1543:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17263,"nodeType":"Block","src":"9277:235:52","statements":[{"expression":{"arguments":[{"id":17244,"name":"vaultOwner_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17237,"src":"9308:11:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17243,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16359,"src":"9287:20:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":17245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9287:33:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17246,"nodeType":"ExpressionStatement","src":"9287:33:52"},{"expression":{"arguments":[{"id":17248,"name":"accessControlManager_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17231,"src":"9355:21:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17247,"name":"__AccessControlled_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4931,"src":"9331:23:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":17249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9331:46:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17250,"nodeType":"ExpressionStatement","src":"9331:46:52"},{"expression":{"arguments":[{"id":17252,"name":"loopsLimit_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17235,"src":"9405:11:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17251,"name":"_setMaxLoopsLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10317,"src":"9387:17:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":17253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9387:30:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17254,"nodeType":"ExpressionStatement","src":"9387:30:52"},{"expression":{"arguments":[{"id":17256,"name":"rewardRecipient_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17233,"src":"9447:16:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17255,"name":"_setRewardRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18020,"src":"9427:19:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":17257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9427:37:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17258,"nodeType":"ExpressionStatement","src":"9427:37:52"},{"expression":{"arguments":[{"id":17260,"name":"vaultOwner_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17237,"src":"9493:11:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17259,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[78],"referencedDeclaration":78,"src":"9474:18:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":17261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9474:31:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17262,"nodeType":"ExpressionStatement","src":"9474:31:52"}]},"documentation":{"id":17229,"nodeType":"StructuredDocumentation","src":"8651:439:52","text":"@notice Second function to invoke to complete the configuration of the vault, setting the rest of the attributes\n @param accessControlManager_ Address of the ACM contract\n @param rewardRecipient_ The address that will receive rewards generated by the vault.\n @param loopsLimit_ The maximum number of loops allowed for reward distribution.\n @param vaultOwner_ The owner that will be set for the created vault"},"functionSelector":"41e11a5a","id":17264,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"hexValue":"32","id":17240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9274:1:52","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":17241,"kind":"modifierInvocation","modifierName":{"id":17239,"name":"reinitializer","nameLocations":["9260:13:52"],"nodeType":"IdentifierPath","referencedDeclaration":511,"src":"9260:13:52"},"nodeType":"ModifierInvocation","src":"9260:16:52"}],"name":"initialize2","nameLocation":"9104:11:52","nodeType":"FunctionDefinition","parameters":{"id":17238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17231,"mutability":"mutable","name":"accessControlManager_","nameLocation":"9133:21:52","nodeType":"VariableDeclaration","scope":17264,"src":"9125:29:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17230,"name":"address","nodeType":"ElementaryTypeName","src":"9125:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17233,"mutability":"mutable","name":"rewardRecipient_","nameLocation":"9172:16:52","nodeType":"VariableDeclaration","scope":17264,"src":"9164:24:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17232,"name":"address","nodeType":"ElementaryTypeName","src":"9164:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17235,"mutability":"mutable","name":"loopsLimit_","nameLocation":"9206:11:52","nodeType":"VariableDeclaration","scope":17264,"src":"9198:19:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17234,"name":"uint256","nodeType":"ElementaryTypeName","src":"9198:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17237,"mutability":"mutable","name":"vaultOwner_","nameLocation":"9235:11:52","nodeType":"VariableDeclaration","scope":17264,"src":"9227:19:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17236,"name":"address","nodeType":"ElementaryTypeName","src":"9227:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9115:137:52"},"returnParameters":{"id":17242,"nodeType":"ParameterList","parameters":[],"src":"9277:0:52"},"scope":18217,"src":"9095:417:52","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1732],"body":{"id":17342,"nodeType":"Block","src":"9655:618:52","statements":[{"expression":{"arguments":[{"id":17278,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17269,"src":"9686:8:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17277,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16359,"src":"9665:20:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":17279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9665:30:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17280,"nodeType":"ExpressionStatement","src":"9665:30:52"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17281,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"9706:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9713:14:52","memberName":"accrueInterest","nodeType":"MemberAccess","referencedDeclaration":13910,"src":"9706:21:52","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$_t_uint256_$","typeString":"function () external returns (uint256)"}},"id":17284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9706:23:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17285,"nodeType":"ExpressionStatement","src":"9706:23:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17286,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17267,"src":"9743:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17287,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9753:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9743:11:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17294,"nodeType":"IfStatement","src":"9739:79:52","trueBody":{"id":17293,"nodeType":"Block","src":"9756:62:52","statements":[{"errorCall":{"arguments":[{"hexValue":"6465706f736974","id":17290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9797:9:52","typeDescriptions":{"typeIdentifier":"t_stringliteral_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01","typeString":"literal_string \"deposit\""},"value":"deposit"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01","typeString":"literal_string \"deposit\""}],"id":17289,"name":"ERC4626__ZeroAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16942,"src":"9777:19:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":17291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9777:30:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17292,"nodeType":"RevertStatement","src":"9770:37:52"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17295,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17267,"src":"9831:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"id":17297,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17269,"src":"9851:8:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17296,"name":"maxDeposit","nodeType":"Identifier","overloadedDeclarations":[17629],"referencedDeclaration":17629,"src":"9840:10:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":17298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9840:20:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9831:29:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17304,"nodeType":"IfStatement","src":"9827:96:52","trueBody":{"id":17303,"nodeType":"Block","src":"9862:61:52","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17300,"name":"ERC4626__DepositMoreThanMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16928,"src":"9883:27:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9883:29:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17302,"nodeType":"RevertStatement","src":"9876:36:52"}]}},{"assignments":[17306],"declarations":[{"constant":false,"id":17306,"mutability":"mutable","name":"shares","nameLocation":"9941:6:52","nodeType":"VariableDeclaration","scope":17342,"src":"9933:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17305,"name":"uint256","nodeType":"ElementaryTypeName","src":"9933:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17310,"initialValue":{"arguments":[{"id":17308,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17267,"src":"9965:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17307,"name":"previewDeposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1644,"src":"9950:14:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":17309,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9950:22:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9933:39:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17311,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17306,"src":"9986:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9996:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9986:11:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17319,"nodeType":"IfStatement","src":"9982:79:52","trueBody":{"id":17318,"nodeType":"Block","src":"9999:62:52","statements":[{"errorCall":{"arguments":[{"hexValue":"6465706f736974","id":17315,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10040:9:52","typeDescriptions":{"typeIdentifier":"t_stringliteral_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01","typeString":"literal_string \"deposit\""},"value":"deposit"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01","typeString":"literal_string \"deposit\""}],"id":17314,"name":"ERC4626__ZeroAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16942,"src":"10020:19:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":17316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10020:30:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17317,"nodeType":"RevertStatement","src":"10013:37:52"}]}},{"assignments":[17321],"declarations":[{"constant":false,"id":17321,"mutability":"mutable","name":"totalSupplyBefore","nameLocation":"10079:17:52","nodeType":"VariableDeclaration","scope":17342,"src":"10071:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17320,"name":"uint256","nodeType":"ElementaryTypeName","src":"10071:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17324,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":17322,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":767,"src":"10099:11:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":17323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10099:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10071:41:52"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":17326,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2798,"src":"10131:10:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":17327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10131:12:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17328,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17269,"src":"10145:8:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17329,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17267,"src":"10155:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17330,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17306,"src":"10163:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17325,"name":"_deposit","nodeType":"Identifier","overloadedDeclarations":[18157],"referencedDeclaration":18157,"src":"10122:8:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":17331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10122:48:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17332,"nodeType":"ExpressionStatement","src":"10122:48:52"},{"assignments":[17334],"declarations":[{"constant":false,"id":17334,"mutability":"mutable","name":"actualShares","nameLocation":"10188:12:52","nodeType":"VariableDeclaration","scope":17342,"src":"10180:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17333,"name":"uint256","nodeType":"ElementaryTypeName","src":"10180:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17339,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":17335,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":767,"src":"10203:11:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":17336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10203:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17337,"name":"totalSupplyBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17321,"src":"10219:17:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10203:33:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10180:56:52"},{"expression":{"id":17340,"name":"actualShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17334,"src":"10254:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17276,"id":17341,"nodeType":"Return","src":"10247:19:52"}]},"documentation":{"id":17265,"nodeType":"StructuredDocumentation","src":"9518:34:52","text":"@inheritdoc ERC4626Upgradeable"},"functionSelector":"6e553f65","id":17343,"implemented":true,"kind":"function","modifiers":[{"id":17273,"kind":"modifierInvocation","modifierName":{"id":17272,"name":"nonReentrant","nameLocations":["9624:12:52"],"nodeType":"IdentifierPath","referencedDeclaration":621,"src":"9624:12:52"},"nodeType":"ModifierInvocation","src":"9624:12:52"}],"name":"deposit","nameLocation":"9566:7:52","nodeType":"FunctionDefinition","overrides":{"id":17271,"nodeType":"OverrideSpecifier","overrides":[],"src":"9615:8:52"},"parameters":{"id":17270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17267,"mutability":"mutable","name":"assets","nameLocation":"9582:6:52","nodeType":"VariableDeclaration","scope":17343,"src":"9574:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17266,"name":"uint256","nodeType":"ElementaryTypeName","src":"9574:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17269,"mutability":"mutable","name":"receiver","nameLocation":"9598:8:52","nodeType":"VariableDeclaration","scope":17343,"src":"9590:16:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17268,"name":"address","nodeType":"ElementaryTypeName","src":"9590:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9573:34:52"},"returnParameters":{"id":17276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17275,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17343,"src":"9646:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17274,"name":"uint256","nodeType":"ElementaryTypeName","src":"9646:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9645:9:52"},"scope":18217,"src":"9557:716:52","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1769],"body":{"id":17409,"nodeType":"Block","src":"10585:477:52","statements":[{"expression":{"arguments":[{"id":17357,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17348,"src":"10616:8:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17356,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16359,"src":"10595:20:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":17358,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10595:30:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17359,"nodeType":"ExpressionStatement","src":"10595:30:52"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17360,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"10636:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10643:14:52","memberName":"accrueInterest","nodeType":"MemberAccess","referencedDeclaration":13910,"src":"10636:21:52","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$_t_uint256_$","typeString":"function () external returns (uint256)"}},"id":17363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10636:23:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17364,"nodeType":"ExpressionStatement","src":"10636:23:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17365,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17346,"src":"10673:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10683:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10673:11:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17373,"nodeType":"IfStatement","src":"10669:76:52","trueBody":{"id":17372,"nodeType":"Block","src":"10686:59:52","statements":[{"errorCall":{"arguments":[{"hexValue":"6d696e74","id":17369,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10727:6:52","typeDescriptions":{"typeIdentifier":"t_stringliteral_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354","typeString":"literal_string \"mint\""},"value":"mint"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354","typeString":"literal_string \"mint\""}],"id":17368,"name":"ERC4626__ZeroAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16942,"src":"10707:19:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":17370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10707:27:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17371,"nodeType":"RevertStatement","src":"10700:34:52"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17374,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17346,"src":"10758:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"id":17376,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17348,"src":"10775:8:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17375,"name":"maxMint","nodeType":"Identifier","overloadedDeclarations":[17648],"referencedDeclaration":17648,"src":"10767:7:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":17377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10767:17:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10758:26:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17383,"nodeType":"IfStatement","src":"10754:90:52","trueBody":{"id":17382,"nodeType":"Block","src":"10786:58:52","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17379,"name":"ERC4626__MintMoreThanMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16931,"src":"10807:24:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10807:26:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17381,"nodeType":"RevertStatement","src":"10800:33:52"}]}},{"assignments":[17385],"declarations":[{"constant":false,"id":17385,"mutability":"mutable","name":"assets","nameLocation":"10861:6:52","nodeType":"VariableDeclaration","scope":17409,"src":"10853:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17384,"name":"uint256","nodeType":"ElementaryTypeName","src":"10853:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17389,"initialValue":{"arguments":[{"id":17387,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17346,"src":"10882:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17386,"name":"previewMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1661,"src":"10870:11:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":17388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10870:19:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10853:36:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17390,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17385,"src":"10903:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17391,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10913:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10903:11:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17398,"nodeType":"IfStatement","src":"10899:76:52","trueBody":{"id":17397,"nodeType":"Block","src":"10916:59:52","statements":[{"errorCall":{"arguments":[{"hexValue":"6d696e74","id":17394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10957:6:52","typeDescriptions":{"typeIdentifier":"t_stringliteral_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354","typeString":"literal_string \"mint\""},"value":"mint"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354","typeString":"literal_string \"mint\""}],"id":17393,"name":"ERC4626__ZeroAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16942,"src":"10937:19:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":17395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10937:27:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17396,"nodeType":"RevertStatement","src":"10930:34:52"}]}},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":17400,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2798,"src":"10993:10:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":17401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10993:12:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17402,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17348,"src":"11007:8:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17403,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17385,"src":"11017:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17404,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17346,"src":"11025:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17399,"name":"_deposit","nodeType":"Identifier","overloadedDeclarations":[18157],"referencedDeclaration":18157,"src":"10984:8:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":17405,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10984:48:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17406,"nodeType":"ExpressionStatement","src":"10984:48:52"},{"expression":{"id":17407,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17385,"src":"11049:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17355,"id":17408,"nodeType":"Return","src":"11042:13:52"}]},"documentation":{"id":17344,"nodeType":"StructuredDocumentation","src":"10279:206:52","text":"@dev The minted shares are calculated considering the minted VTokens\n @dev It can mint slightly fewer shares than requested, because VToken.mint rounds down\n @inheritdoc ERC4626Upgradeable"},"functionSelector":"94bf804d","id":17410,"implemented":true,"kind":"function","modifiers":[{"id":17352,"kind":"modifierInvocation","modifierName":{"id":17351,"name":"nonReentrant","nameLocations":["10554:12:52"],"nodeType":"IdentifierPath","referencedDeclaration":621,"src":"10554:12:52"},"nodeType":"ModifierInvocation","src":"10554:12:52"}],"name":"mint","nameLocation":"10499:4:52","nodeType":"FunctionDefinition","overrides":{"id":17350,"nodeType":"OverrideSpecifier","overrides":[],"src":"10545:8:52"},"parameters":{"id":17349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17346,"mutability":"mutable","name":"shares","nameLocation":"10512:6:52","nodeType":"VariableDeclaration","scope":17410,"src":"10504:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17345,"name":"uint256","nodeType":"ElementaryTypeName","src":"10504:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17348,"mutability":"mutable","name":"receiver","nameLocation":"10528:8:52","nodeType":"VariableDeclaration","scope":17410,"src":"10520:16:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17347,"name":"address","nodeType":"ElementaryTypeName","src":"10520:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10503:34:52"},"returnParameters":{"id":17355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17354,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17410,"src":"10576:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17353,"name":"uint256","nodeType":"ElementaryTypeName","src":"10576:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10575:9:52"},"scope":18217,"src":"10490:572:52","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1809],"body":{"id":17476,"nodeType":"Block","src":"11447:500:52","statements":[{"expression":{"arguments":[{"id":17426,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17415,"src":"11478:8:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17425,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16359,"src":"11457:20:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":17427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11457:30:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17428,"nodeType":"ExpressionStatement","src":"11457:30:52"},{"expression":{"arguments":[{"id":17430,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17417,"src":"11518:5:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17429,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16359,"src":"11497:20:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":17431,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11497:27:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17432,"nodeType":"ExpressionStatement","src":"11497:27:52"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17433,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"11535:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11542:14:52","memberName":"accrueInterest","nodeType":"MemberAccess","referencedDeclaration":13910,"src":"11535:21:52","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$_t_uint256_$","typeString":"function () external returns (uint256)"}},"id":17436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11535:23:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17437,"nodeType":"ExpressionStatement","src":"11535:23:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17438,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17413,"src":"11572:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17439,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11582:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11572:11:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17446,"nodeType":"IfStatement","src":"11568:80:52","trueBody":{"id":17445,"nodeType":"Block","src":"11585:63:52","statements":[{"errorCall":{"arguments":[{"hexValue":"7769746864726177","id":17442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11626:10:52","typeDescriptions":{"typeIdentifier":"t_stringliteral_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77","typeString":"literal_string \"withdraw\""},"value":"withdraw"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77","typeString":"literal_string \"withdraw\""}],"id":17441,"name":"ERC4626__ZeroAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16942,"src":"11606:19:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":17443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11606:31:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17444,"nodeType":"RevertStatement","src":"11599:38:52"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17447,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17413,"src":"11661:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"id":17449,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17417,"src":"11682:5:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17448,"name":"maxWithdraw","nodeType":"Identifier","overloadedDeclarations":[17712],"referencedDeclaration":17712,"src":"11670:11:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":17450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11670:18:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11661:27:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17456,"nodeType":"IfStatement","src":"11657:95:52","trueBody":{"id":17455,"nodeType":"Block","src":"11690:62:52","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17452,"name":"ERC4626__WithdrawMoreThanMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16934,"src":"11711:28:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11711:30:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17454,"nodeType":"RevertStatement","src":"11704:37:52"}]}},{"assignments":[17458,17460],"declarations":[{"constant":false,"id":17458,"mutability":"mutable","name":"actualAssets","nameLocation":"11771:12:52","nodeType":"VariableDeclaration","scope":17476,"src":"11763:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17457,"name":"uint256","nodeType":"ElementaryTypeName","src":"11763:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17460,"mutability":"mutable","name":"actualShares","nameLocation":"11793:12:52","nodeType":"VariableDeclaration","scope":17476,"src":"11785:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17459,"name":"uint256","nodeType":"ElementaryTypeName","src":"11785:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17464,"initialValue":{"arguments":[{"id":17462,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17413,"src":"11825:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17461,"name":"_beforeWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17965,"src":"11809:15:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256) returns (uint256,uint256)"}},"id":17463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11809:23:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11762:70:52"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":17466,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2798,"src":"11852:10:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":17467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11852:12:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17468,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17415,"src":"11866:8:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17469,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17417,"src":"11876:5:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17470,"name":"actualAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17458,"src":"11883:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17471,"name":"actualShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17460,"src":"11897:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17465,"name":"_withdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1989,"src":"11842:9:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256,uint256)"}},"id":17472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11842:68:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17473,"nodeType":"ExpressionStatement","src":"11842:68:52"},{"expression":{"id":17474,"name":"actualShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17460,"src":"11928:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17424,"id":17475,"nodeType":"Return","src":"11921:19:52"}]},"documentation":{"id":17411,"nodeType":"StructuredDocumentation","src":"11068:260:52","text":"@dev Receiver can receive slightly more assets than requested, because VToken.redeemUnderlying rounds up\n @dev The shares to burn are calculated considering the actual transferred assets, not the requested ones\n @inheritdoc ERC4626Upgradeable"},"functionSelector":"b460af94","id":17477,"implemented":true,"kind":"function","modifiers":[{"id":17421,"kind":"modifierInvocation","modifierName":{"id":17420,"name":"nonReentrant","nameLocations":["11416:12:52"],"nodeType":"IdentifierPath","referencedDeclaration":621,"src":"11416:12:52"},"nodeType":"ModifierInvocation","src":"11416:12:52"}],"name":"withdraw","nameLocation":"11342:8:52","nodeType":"FunctionDefinition","overrides":{"id":17419,"nodeType":"OverrideSpecifier","overrides":[],"src":"11407:8:52"},"parameters":{"id":17418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17413,"mutability":"mutable","name":"assets","nameLocation":"11359:6:52","nodeType":"VariableDeclaration","scope":17477,"src":"11351:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17412,"name":"uint256","nodeType":"ElementaryTypeName","src":"11351:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17415,"mutability":"mutable","name":"receiver","nameLocation":"11375:8:52","nodeType":"VariableDeclaration","scope":17477,"src":"11367:16:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17414,"name":"address","nodeType":"ElementaryTypeName","src":"11367:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17417,"mutability":"mutable","name":"owner","nameLocation":"11393:5:52","nodeType":"VariableDeclaration","scope":17477,"src":"11385:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17416,"name":"address","nodeType":"ElementaryTypeName","src":"11385:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11350:49:52"},"returnParameters":{"id":17424,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17423,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17477,"src":"11438:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17422,"name":"uint256","nodeType":"ElementaryTypeName","src":"11438:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11437:9:52"},"scope":18217,"src":"11333:614:52","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1849],"body":{"id":17550,"nodeType":"Block","src":"12104:555:52","statements":[{"expression":{"arguments":[{"id":17493,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17482,"src":"12135:8:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17492,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16359,"src":"12114:20:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":17494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12114:30:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17495,"nodeType":"ExpressionStatement","src":"12114:30:52"},{"expression":{"arguments":[{"id":17497,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17484,"src":"12175:5:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17496,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16359,"src":"12154:20:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":17498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12154:27:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17499,"nodeType":"ExpressionStatement","src":"12154:27:52"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17500,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"12192:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12199:14:52","memberName":"accrueInterest","nodeType":"MemberAccess","referencedDeclaration":13910,"src":"12192:21:52","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$_t_uint256_$","typeString":"function () external returns (uint256)"}},"id":17503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12192:23:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17504,"nodeType":"ExpressionStatement","src":"12192:23:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17505,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17480,"src":"12229:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12239:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12229:11:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17513,"nodeType":"IfStatement","src":"12225:78:52","trueBody":{"id":17512,"nodeType":"Block","src":"12242:61:52","statements":[{"errorCall":{"arguments":[{"hexValue":"72656465656d","id":17509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12283:8:52","typeDescriptions":{"typeIdentifier":"t_stringliteral_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609","typeString":"literal_string \"redeem\""},"value":"redeem"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609","typeString":"literal_string \"redeem\""}],"id":17508,"name":"ERC4626__ZeroAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16942,"src":"12263:19:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":17510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12263:29:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17511,"nodeType":"RevertStatement","src":"12256:36:52"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17514,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17480,"src":"12316:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"id":17516,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17484,"src":"12335:5:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17515,"name":"maxRedeem","nodeType":"Identifier","overloadedDeclarations":[17780],"referencedDeclaration":17780,"src":"12325:9:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":17517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12325:16:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12316:25:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17523,"nodeType":"IfStatement","src":"12312:91:52","trueBody":{"id":17522,"nodeType":"Block","src":"12343:60:52","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17519,"name":"ERC4626__RedeemMoreThanMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16937,"src":"12364:26:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12364:28:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17521,"nodeType":"RevertStatement","src":"12357:35:52"}]}},{"assignments":[17525],"declarations":[{"constant":false,"id":17525,"mutability":"mutable","name":"actualAssets","nameLocation":"12421:12:52","nodeType":"VariableDeclaration","scope":17550,"src":"12413:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17524,"name":"uint256","nodeType":"ElementaryTypeName","src":"12413:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17529,"initialValue":{"arguments":[{"id":17527,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17480,"src":"12450:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17526,"name":"_beforeRedeem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17860,"src":"12436:13:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) returns (uint256)"}},"id":17528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12436:21:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12413:44:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17530,"name":"actualAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17525,"src":"12471:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17531,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12487:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12471:17:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17538,"nodeType":"IfStatement","src":"12467:84:52","trueBody":{"id":17537,"nodeType":"Block","src":"12490:61:52","statements":[{"errorCall":{"arguments":[{"hexValue":"72656465656d","id":17534,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12531:8:52","typeDescriptions":{"typeIdentifier":"t_stringliteral_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609","typeString":"literal_string \"redeem\""},"value":"redeem"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609","typeString":"literal_string \"redeem\""}],"id":17533,"name":"ERC4626__ZeroAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16942,"src":"12511:19:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":17535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12511:29:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17536,"nodeType":"RevertStatement","src":"12504:36:52"}]}},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":17540,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2798,"src":"12571:10:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":17541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12571:12:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17542,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17482,"src":"12585:8:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17543,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17484,"src":"12595:5:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17544,"name":"actualAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17525,"src":"12602:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17545,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17480,"src":"12616:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17539,"name":"_withdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1989,"src":"12561:9:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256,uint256)"}},"id":17546,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12561:62:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17547,"nodeType":"ExpressionStatement","src":"12561:62:52"},{"expression":{"id":17548,"name":"actualAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17525,"src":"12640:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17491,"id":17549,"nodeType":"Return","src":"12633:19:52"}]},"documentation":{"id":17478,"nodeType":"StructuredDocumentation","src":"11953:34:52","text":"@inheritdoc ERC4626Upgradeable"},"functionSelector":"ba087652","id":17551,"implemented":true,"kind":"function","modifiers":[{"id":17488,"kind":"modifierInvocation","modifierName":{"id":17487,"name":"nonReentrant","nameLocations":["12073:12:52"],"nodeType":"IdentifierPath","referencedDeclaration":621,"src":"12073:12:52"},"nodeType":"ModifierInvocation","src":"12073:12:52"}],"name":"redeem","nameLocation":"12001:6:52","nodeType":"FunctionDefinition","overrides":{"id":17486,"nodeType":"OverrideSpecifier","overrides":[],"src":"12064:8:52"},"parameters":{"id":17485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17480,"mutability":"mutable","name":"shares","nameLocation":"12016:6:52","nodeType":"VariableDeclaration","scope":17551,"src":"12008:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17479,"name":"uint256","nodeType":"ElementaryTypeName","src":"12008:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17482,"mutability":"mutable","name":"receiver","nameLocation":"12032:8:52","nodeType":"VariableDeclaration","scope":17551,"src":"12024:16:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17481,"name":"address","nodeType":"ElementaryTypeName","src":"12024:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17484,"mutability":"mutable","name":"owner","nameLocation":"12050:5:52","nodeType":"VariableDeclaration","scope":17551,"src":"12042:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17483,"name":"address","nodeType":"ElementaryTypeName","src":"12042:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12007:49:52"},"returnParameters":{"id":17491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17490,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17551,"src":"12095:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17489,"name":"uint256","nodeType":"ElementaryTypeName","src":"12095:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12094:9:52"},"scope":18217,"src":"11992:667:52","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1528],"body":{"id":17573,"nodeType":"Block","src":"12839:99:52","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":17562,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12882:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}],"id":17561,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12874:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17560,"name":"address","nodeType":"ElementaryTypeName","src":"12874:7:52","typeDescriptions":{}}},"id":17563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12874:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17558,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"12857:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12864:9:52","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":13641,"src":"12857:16:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":17564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12857:31:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17565,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"12891:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12898:18:52","memberName":"exchangeRateStored","nodeType":"MemberAccess","referencedDeclaration":13739,"src":"12891:25:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":17567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12891:27:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12857:61:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17569,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12856:63:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":17570,"name":"EXP_SCALE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16116,"src":"12922:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12856:75:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17557,"id":17572,"nodeType":"Return","src":"12849:82:52"}]},"documentation":{"id":17552,"nodeType":"StructuredDocumentation","src":"12665:99:52","text":"@notice Returns the total amount of assets deposited\n @return Amount of assets deposited"},"functionSelector":"01e1d114","id":17574,"implemented":true,"kind":"function","modifiers":[],"name":"totalAssets","nameLocation":"12778:11:52","nodeType":"FunctionDefinition","overrides":{"id":17554,"nodeType":"OverrideSpecifier","overrides":[],"src":"12812:8:52"},"parameters":{"id":17553,"nodeType":"ParameterList","parameters":[],"src":"12789:2:52"},"returnParameters":{"id":17557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17556,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17574,"src":"12830:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17555,"name":"uint256","nodeType":"ElementaryTypeName","src":"12830:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12829:9:52"},"scope":18217,"src":"12769:169:52","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1578],"body":{"id":17628,"nodeType":"Block","src":"13310:348:52","statements":[{"condition":{"arguments":[{"arguments":[{"id":17587,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"13357:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":17586,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13349:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17585,"name":"address","nodeType":"ElementaryTypeName","src":"13349:7:52","typeDescriptions":{}}},"id":17588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13349:15:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17589,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"13366:6:52","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":17590,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13373:4:52","memberName":"MINT","nodeType":"MemberAccess","referencedDeclaration":9139,"src":"13366:11:52","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"expression":{"id":17583,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16894,"src":"13324:11:52","typeDescriptions":{"typeIdentifier":"t_contract$_IComptroller_$16789","typeString":"contract IComptroller"}},"id":17584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13336:12:52","memberName":"actionPaused","nodeType":"MemberAccess","referencedDeclaration":16774,"src":"13324:24:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_enum$_Action_$9148_$returns$_t_bool_$","typeString":"function (address,enum Action) view external returns (bool)"}},"id":17591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13324:54:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17595,"nodeType":"IfStatement","src":"13320:93:52","trueBody":{"id":17594,"nodeType":"Block","src":"13380:33:52","statements":[{"expression":{"hexValue":"30","id":17592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13401:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":17582,"id":17593,"nodeType":"Return","src":"13394:8:52"}]}},{"assignments":[17597],"declarations":[{"constant":false,"id":17597,"mutability":"mutable","name":"supplyCap","nameLocation":"13431:9:52","nodeType":"VariableDeclaration","scope":17628,"src":"13423:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17596,"name":"uint256","nodeType":"ElementaryTypeName","src":"13423:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17605,"initialValue":{"arguments":[{"arguments":[{"id":17602,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"13474:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":17601,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13466:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17600,"name":"address","nodeType":"ElementaryTypeName","src":"13466:7:52","typeDescriptions":{}}},"id":17603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13466:15:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17598,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16894,"src":"13443:11:52","typeDescriptions":{"typeIdentifier":"t_contract$_IComptroller_$16789","typeString":"contract IComptroller"}},"id":17599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13455:10:52","memberName":"supplyCaps","nodeType":"MemberAccess","referencedDeclaration":16788,"src":"13443:22:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":17604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13443:39:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13423:59:52"},{"assignments":[17607],"declarations":[{"constant":false,"id":17607,"mutability":"mutable","name":"totalSupply_","nameLocation":"13500:12:52","nodeType":"VariableDeclaration","scope":17628,"src":"13492:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17606,"name":"uint256","nodeType":"ElementaryTypeName","src":"13492:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17618,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17608,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"13516:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13523:11:52","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":15569,"src":"13516:18:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":17610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13516:20:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17611,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"13539:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13546:18:52","memberName":"exchangeRateStored","nodeType":"MemberAccess","referencedDeclaration":13739,"src":"13539:25:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":17613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13539:27:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13516:50:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17615,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13515:52:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":17616,"name":"EXP_SCALE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16116,"src":"13570:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13515:64:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13492:87:52"},{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17619,"name":"supplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17597,"src":"13596:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":17620,"name":"totalSupply_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17607,"src":"13608:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13596:24:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":17625,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13650:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":17626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"13596:55:52","trueExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17622,"name":"supplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17597,"src":"13623:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17623,"name":"totalSupply_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17607,"src":"13635:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13623:24:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17582,"id":17627,"nodeType":"Return","src":"13589:62:52"}]},"documentation":{"id":17575,"nodeType":"StructuredDocumentation","src":"12944:273:52","text":"@notice Returns the maximum deposit allowed based on Venus supply caps.\n @dev If minting is paused or the supply cap is reached, returns 0.\n @param /*account*/ The address of the account.\n @return The maximum amount of assets that can be deposited."},"functionSelector":"402d267d","id":17629,"implemented":true,"kind":"function","modifiers":[],"name":"maxDeposit","nameLocation":"13231:10:52","nodeType":"FunctionDefinition","overrides":{"id":17579,"nodeType":"OverrideSpecifier","overrides":[],"src":"13283:8:52"},"parameters":{"id":17578,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17577,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17629,"src":"13242:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17576,"name":"address","nodeType":"ElementaryTypeName","src":"13242:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13241:21:52"},"returnParameters":{"id":17582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17581,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17629,"src":"13301:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17580,"name":"uint256","nodeType":"ElementaryTypeName","src":"13301:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13300:9:52"},"scope":18217,"src":"13222:436:52","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1594],"body":{"id":17647,"nodeType":"Block","src":"14024:63:52","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"hexValue":"30","id":17642,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14076:1:52","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":17641,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14068:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17640,"name":"address","nodeType":"ElementaryTypeName","src":"14068:7:52","typeDescriptions":{}}},"id":17643,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14068:10:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17639,"name":"maxDeposit","nodeType":"Identifier","overloadedDeclarations":[17629],"referencedDeclaration":17629,"src":"14057:10:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":17644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14057:22:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17638,"name":"convertToShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1545,"src":"14041:15:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":17645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14041:39:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17637,"id":17646,"nodeType":"Return","src":"14034:46:52"}]},"documentation":{"id":17630,"nodeType":"StructuredDocumentation","src":"13664:270:52","text":"@notice Returns the maximum amount of shares that can be minted.\n @dev This is derived from the maximum deposit amount converted to shares.\n @param /*account*/ The address of the account.\n @return The maximum number of shares that can be minted."},"functionSelector":"c63d75b6","id":17648,"implemented":true,"kind":"function","modifiers":[],"name":"maxMint","nameLocation":"13948:7:52","nodeType":"FunctionDefinition","overrides":{"id":17634,"nodeType":"OverrideSpecifier","overrides":[],"src":"13997:8:52"},"parameters":{"id":17633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17632,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17648,"src":"13956:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17631,"name":"address","nodeType":"ElementaryTypeName","src":"13956:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13955:21:52"},"returnParameters":{"id":17637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17636,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17648,"src":"14015:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17635,"name":"uint256","nodeType":"ElementaryTypeName","src":"14015:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14014:9:52"},"scope":18217,"src":"13939:148:52","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1613],"body":{"id":17711,"nodeType":"Block","src":"14461:505:52","statements":[{"condition":{"arguments":[{"arguments":[{"id":17661,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"14508:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":17660,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14500:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17659,"name":"address","nodeType":"ElementaryTypeName","src":"14500:7:52","typeDescriptions":{}}},"id":17662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14500:15:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17663,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"14517:6:52","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":17664,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14524:6:52","memberName":"REDEEM","nodeType":"MemberAccess","referencedDeclaration":9140,"src":"14517:13:52","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"expression":{"id":17657,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16894,"src":"14475:11:52","typeDescriptions":{"typeIdentifier":"t_contract$_IComptroller_$16789","typeString":"contract IComptroller"}},"id":17658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14487:12:52","memberName":"actionPaused","nodeType":"MemberAccess","referencedDeclaration":16774,"src":"14475:24:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_enum$_Action_$9148_$returns$_t_bool_$","typeString":"function (address,enum Action) view external returns (bool)"}},"id":17665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14475:56:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17669,"nodeType":"IfStatement","src":"14471:95:52","trueBody":{"id":17668,"nodeType":"Block","src":"14533:33:52","statements":[{"expression":{"hexValue":"30","id":17666,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14554:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":17656,"id":17667,"nodeType":"Return","src":"14547:8:52"}]}},{"assignments":[17671],"declarations":[{"constant":false,"id":17671,"mutability":"mutable","name":"cash","nameLocation":"14584:4:52","nodeType":"VariableDeclaration","scope":17711,"src":"14576:12:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17670,"name":"uint256","nodeType":"ElementaryTypeName","src":"14576:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17675,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17672,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"14591:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14598:7:52","memberName":"getCash","nodeType":"MemberAccess","referencedDeclaration":13679,"src":"14591:14:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":17674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14591:16:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14576:31:52"},{"assignments":[17677],"declarations":[{"constant":false,"id":17677,"mutability":"mutable","name":"totalReserves","nameLocation":"14625:13:52","nodeType":"VariableDeclaration","scope":17711,"src":"14617:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17676,"name":"uint256","nodeType":"ElementaryTypeName","src":"14617:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17681,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17678,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"14641:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14648:13:52","memberName":"totalReserves","nodeType":"MemberAccess","referencedDeclaration":15566,"src":"14641:20:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":17680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14641:22:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14617:46:52"},{"assignments":[17683],"declarations":[{"constant":false,"id":17683,"mutability":"mutable","name":"assetsBalance","nameLocation":"14681:13:52","nodeType":"VariableDeclaration","scope":17711,"src":"14673:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17682,"name":"uint256","nodeType":"ElementaryTypeName","src":"14673:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17689,"initialValue":{"arguments":[{"arguments":[{"id":17686,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17651,"src":"14723:8:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17685,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":781,"src":"14713:9:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":17687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14713:19:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17684,"name":"convertToAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1562,"src":"14697:15:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":17688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14697:36:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14673:60:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17690,"name":"cash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17671,"src":"14748:4:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17691,"name":"totalReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17677,"src":"14755:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14748:20:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17709,"nodeType":"Block","src":"14809:151:52","statements":[{"assignments":[17697],"declarations":[{"constant":false,"id":17697,"mutability":"mutable","name":"availableCash","nameLocation":"14831:13:52","nodeType":"VariableDeclaration","scope":17709,"src":"14823:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17696,"name":"uint256","nodeType":"ElementaryTypeName","src":"14823:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17701,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17698,"name":"cash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17671,"src":"14847:4:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17699,"name":"totalReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17677,"src":"14854:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14847:20:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14823:44:52"},{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17702,"name":"availableCash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17697,"src":"14888:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17703,"name":"assetsBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17683,"src":"14904:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14888:29:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":17706,"name":"assetsBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17683,"src":"14936:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"14888:61:52","trueExpression":{"id":17705,"name":"availableCash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17697,"src":"14920:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17656,"id":17708,"nodeType":"Return","src":"14881:68:52"}]},"id":17710,"nodeType":"IfStatement","src":"14744:216:52","trueBody":{"id":17695,"nodeType":"Block","src":"14770:33:52","statements":[{"expression":{"hexValue":"30","id":17693,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14791:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":17656,"id":17694,"nodeType":"Return","src":"14784:8:52"}]}}]},"documentation":{"id":17649,"nodeType":"StructuredDocumentation","src":"14093:277:52","text":"@notice Returns the maximum amount that can be withdrawn.\n @dev The withdrawable amount is limited by the available cash in the vault.\n @param receiver The address of the account withdrawing.\n @return The maximum amount of assets that can be withdrawn."},"functionSelector":"ce96cb77","id":17712,"implemented":true,"kind":"function","modifiers":[],"name":"maxWithdraw","nameLocation":"14384:11:52","nodeType":"FunctionDefinition","overrides":{"id":17653,"nodeType":"OverrideSpecifier","overrides":[],"src":"14434:8:52"},"parameters":{"id":17652,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17651,"mutability":"mutable","name":"receiver","nameLocation":"14404:8:52","nodeType":"VariableDeclaration","scope":17712,"src":"14396:16:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17650,"name":"address","nodeType":"ElementaryTypeName","src":"14396:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14395:18:52"},"returnParameters":{"id":17656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17655,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17712,"src":"14452:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17654,"name":"uint256","nodeType":"ElementaryTypeName","src":"14452:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14451:9:52"},"scope":18217,"src":"14375:591:52","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1627],"body":{"id":17779,"nodeType":"Block","src":"15331:580:52","statements":[{"condition":{"arguments":[{"arguments":[{"id":17725,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"15378:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":17724,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15370:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17723,"name":"address","nodeType":"ElementaryTypeName","src":"15370:7:52","typeDescriptions":{}}},"id":17726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15370:15:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17727,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9148,"src":"15387:6:52","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$9148_$","typeString":"type(enum Action)"}},"id":17728,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15394:6:52","memberName":"REDEEM","nodeType":"MemberAccess","referencedDeclaration":9140,"src":"15387:13:52","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Action_$9148","typeString":"enum Action"}],"expression":{"id":17721,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16894,"src":"15345:11:52","typeDescriptions":{"typeIdentifier":"t_contract$_IComptroller_$16789","typeString":"contract IComptroller"}},"id":17722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15357:12:52","memberName":"actionPaused","nodeType":"MemberAccess","referencedDeclaration":16774,"src":"15345:24:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_enum$_Action_$9148_$returns$_t_bool_$","typeString":"function (address,enum Action) view external returns (bool)"}},"id":17729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15345:56:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17733,"nodeType":"IfStatement","src":"15341:95:52","trueBody":{"id":17732,"nodeType":"Block","src":"15403:33:52","statements":[{"expression":{"hexValue":"30","id":17730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15424:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":17720,"id":17731,"nodeType":"Return","src":"15417:8:52"}]}},{"assignments":[17735],"declarations":[{"constant":false,"id":17735,"mutability":"mutable","name":"cash","nameLocation":"15454:4:52","nodeType":"VariableDeclaration","scope":17779,"src":"15446:12:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17734,"name":"uint256","nodeType":"ElementaryTypeName","src":"15446:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17739,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17736,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"15461:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15468:7:52","memberName":"getCash","nodeType":"MemberAccess","referencedDeclaration":13679,"src":"15461:14:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":17738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15461:16:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15446:31:52"},{"assignments":[17741],"declarations":[{"constant":false,"id":17741,"mutability":"mutable","name":"totalReserves","nameLocation":"15495:13:52","nodeType":"VariableDeclaration","scope":17779,"src":"15487:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17740,"name":"uint256","nodeType":"ElementaryTypeName","src":"15487:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17745,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17742,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"15511:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15518:13:52","memberName":"totalReserves","nodeType":"MemberAccess","referencedDeclaration":15566,"src":"15511:20:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":17744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15511:22:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15487:46:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17746,"name":"cash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17735,"src":"15547:4:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17747,"name":"totalReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17741,"src":"15554:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15547:20:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17777,"nodeType":"Block","src":"15608:297:52","statements":[{"assignments":[17753],"declarations":[{"constant":false,"id":17753,"mutability":"mutable","name":"availableCash","nameLocation":"15630:13:52","nodeType":"VariableDeclaration","scope":17777,"src":"15622:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17752,"name":"uint256","nodeType":"ElementaryTypeName","src":"15622:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17757,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17754,"name":"cash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17735,"src":"15646:4:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17755,"name":"totalReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17741,"src":"15653:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15646:20:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15622:44:52"},{"assignments":[17759],"declarations":[{"constant":false,"id":17759,"mutability":"mutable","name":"availableCashInShares","nameLocation":"15688:21:52","nodeType":"VariableDeclaration","scope":17777,"src":"15680:29:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17758,"name":"uint256","nodeType":"ElementaryTypeName","src":"15680:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17763,"initialValue":{"arguments":[{"id":17761,"name":"availableCash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17753,"src":"15728:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17760,"name":"convertToShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1545,"src":"15712:15:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":17762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15712:30:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15680:62:52"},{"assignments":[17765],"declarations":[{"constant":false,"id":17765,"mutability":"mutable","name":"shareBalance","nameLocation":"15764:12:52","nodeType":"VariableDeclaration","scope":17777,"src":"15756:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17764,"name":"uint256","nodeType":"ElementaryTypeName","src":"15756:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17769,"initialValue":{"arguments":[{"id":17767,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17715,"src":"15789:8:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17766,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":781,"src":"15779:9:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":17768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15779:19:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15756:42:52"},{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17770,"name":"availableCashInShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17759,"src":"15819:21:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17771,"name":"shareBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17765,"src":"15843:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15819:36:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":17774,"name":"shareBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17765,"src":"15882:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"15819:75:52","trueExpression":{"id":17773,"name":"availableCashInShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17759,"src":"15858:21:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17720,"id":17776,"nodeType":"Return","src":"15812:82:52"}]},"id":17778,"nodeType":"IfStatement","src":"15543:362:52","trueBody":{"id":17751,"nodeType":"Block","src":"15569:33:52","statements":[{"expression":{"hexValue":"30","id":17749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15590:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":17720,"id":17750,"nodeType":"Return","src":"15583:8:52"}]}}]},"documentation":{"id":17713,"nodeType":"StructuredDocumentation","src":"14972:270:52","text":"@notice Returns the maximum amount of shares that can be redeemed.\n @dev Redemption is limited by the available cash in the vault.\n @param receiver The address of the account redeeming.\n @return The maximum number of shares that can be redeemed."},"functionSelector":"d905777e","id":17780,"implemented":true,"kind":"function","modifiers":[],"name":"maxRedeem","nameLocation":"15256:9:52","nodeType":"FunctionDefinition","overrides":{"id":17717,"nodeType":"OverrideSpecifier","overrides":[],"src":"15304:8:52"},"parameters":{"id":17716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17715,"mutability":"mutable","name":"receiver","nameLocation":"15274:8:52","nodeType":"VariableDeclaration","scope":17780,"src":"15266:16:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17714,"name":"address","nodeType":"ElementaryTypeName","src":"15266:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15265:18:52"},"returnParameters":{"id":17720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17719,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17780,"src":"15322:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17718,"name":"uint256","nodeType":"ElementaryTypeName","src":"15322:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15321:9:52"},"scope":18217,"src":"15247:664:52","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":17859,"nodeType":"Block","src":"16240:762:52","statements":[{"assignments":[17790],"declarations":[{"constant":false,"id":17790,"mutability":"mutable","name":"token","nameLocation":"16268:5:52","nodeType":"VariableDeclaration","scope":17859,"src":"16250:23:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":17789,"nodeType":"UserDefinedTypeName","pathNode":{"id":17788,"name":"IERC20Upgradeable","nameLocations":["16250:17:52"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"16250:17:52"},"referencedDeclaration":1352,"src":"16250:17:52","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"internal"}],"id":17795,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":17792,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1512,"src":"16294:5:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":17793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16294:7:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17791,"name":"IERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"16276:17:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Upgradeable_$1352_$","typeString":"type(contract IERC20Upgradeable)"}},"id":17794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16276:26:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"nodeType":"VariableDeclarationStatement","src":"16250:52:52"},{"assignments":[17797],"declarations":[{"constant":false,"id":17797,"mutability":"mutable","name":"balanceBefore","nameLocation":"16320:13:52","nodeType":"VariableDeclaration","scope":17859,"src":"16312:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17796,"name":"uint256","nodeType":"ElementaryTypeName","src":"16312:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17805,"initialValue":{"arguments":[{"arguments":[{"id":17802,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"16360:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}],"id":17801,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16352:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17800,"name":"address","nodeType":"ElementaryTypeName","src":"16352:7:52","typeDescriptions":{}}},"id":17803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16352:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17798,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17790,"src":"16336:5:52","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":17799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16342:9:52","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1309,"src":"16336:15:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":17804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16336:30:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16312:54:52"},{"assignments":[17807],"declarations":[{"constant":false,"id":17807,"mutability":"mutable","name":"vTokens","nameLocation":"16481:7:52","nodeType":"VariableDeclaration","scope":17859,"src":"16473:15:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17806,"name":"uint256","nodeType":"ElementaryTypeName","src":"16473:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17828,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":17814,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"16543:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}],"id":17813,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16535:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17812,"name":"address","nodeType":"ElementaryTypeName","src":"16535:7:52","typeDescriptions":{}}},"id":17815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16535:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17810,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"16518:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16525:9:52","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":13641,"src":"16518:16:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":17816,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16518:31:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":17817,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":767,"src":"16563:11:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":17818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16563:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":17819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16579:2:52","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":17820,"name":"_decimalsOffset","nodeType":"Identifier","overloadedDeclarations":[18174],"referencedDeclaration":18174,"src":"16585:15:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint8_$","typeString":"function () view returns (uint8)"}},"id":17821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16585:17:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"16579:23:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16563:39:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":17824,"name":"MathUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3687,"src":"16616:15:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUpgradeable_$3687_$","typeString":"type(library MathUpgradeable)"}},"id":17825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16632:8:52","memberName":"Rounding","nodeType":"MemberAccess","referencedDeclaration":2828,"src":"16616:24:52","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2828_$","typeString":"type(enum MathUpgradeable.Rounding)"}},"id":17826,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16641:4:52","memberName":"Down","nodeType":"MemberAccess","referencedDeclaration":2825,"src":"16616:29:52","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}],"expression":{"id":17808,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17783,"src":"16491:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16498:6:52","memberName":"mulDiv","nodeType":"MemberAccess","referencedDeclaration":3079,"src":"16491:13:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$2828_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256,enum MathUpgradeable.Rounding) pure returns (uint256)"}},"id":17827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16491:164:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16473:182:52"},{"assignments":[17830],"declarations":[{"constant":false,"id":17830,"mutability":"mutable","name":"errorCode","nameLocation":"16674:9:52","nodeType":"VariableDeclaration","scope":17859,"src":"16666:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17829,"name":"uint256","nodeType":"ElementaryTypeName","src":"16666:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17835,"initialValue":{"arguments":[{"id":17833,"name":"vTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17807,"src":"16700:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17831,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"16686:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16693:6:52","memberName":"redeem","nodeType":"MemberAccess","referencedDeclaration":12904,"src":"16686:13:52","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) external returns (uint256)"}},"id":17834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16686:22:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16666:42:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17836,"name":"errorCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17830,"src":"16722:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":17837,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16886,"src":"16735:8:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16722:21:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17844,"nodeType":"IfStatement","src":"16718:94:52","trueBody":{"id":17843,"nodeType":"Block","src":"16745:67:52","statements":[{"errorCall":{"arguments":[{"id":17840,"name":"errorCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17830,"src":"16791:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17839,"name":"VenusERC4626__VenusError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16925,"src":"16766:24:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":17841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16766:35:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17842,"nodeType":"RevertStatement","src":"16759:42:52"}]}},{"assignments":[17846],"declarations":[{"constant":false,"id":17846,"mutability":"mutable","name":"balanceAfter","nameLocation":"16830:12:52","nodeType":"VariableDeclaration","scope":17859,"src":"16822:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17845,"name":"uint256","nodeType":"ElementaryTypeName","src":"16822:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17854,"initialValue":{"arguments":[{"arguments":[{"id":17851,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"16869:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}],"id":17850,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16861:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17849,"name":"address","nodeType":"ElementaryTypeName","src":"16861:7:52","typeDescriptions":{}}},"id":17852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16861:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17847,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17790,"src":"16845:5:52","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":17848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16851:9:52","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1309,"src":"16845:15:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":17853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16845:30:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16822:53:52"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17855,"name":"balanceAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17846,"src":"16967:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17856,"name":"balanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17797,"src":"16982:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16967:28:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17787,"id":17858,"nodeType":"Return","src":"16960:35:52"}]},"documentation":{"id":17781,"nodeType":"StructuredDocumentation","src":"15917:252:52","text":"@notice Redeems the amount of vTokens equivalent to the provided shares.\n @dev Calls `redeem` on the vToken contract. Reverts on error.\n @param shares The amount of shares to redeem.\n @return The amount of assets transferred in"},"id":17860,"implemented":true,"kind":"function","modifiers":[],"name":"_beforeRedeem","nameLocation":"16183:13:52","nodeType":"FunctionDefinition","parameters":{"id":17784,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17783,"mutability":"mutable","name":"shares","nameLocation":"16205:6:52","nodeType":"VariableDeclaration","scope":17860,"src":"16197:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17782,"name":"uint256","nodeType":"ElementaryTypeName","src":"16197:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16196:16:52"},"returnParameters":{"id":17787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17786,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17860,"src":"16231:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17785,"name":"uint256","nodeType":"ElementaryTypeName","src":"16231:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16230:9:52"},"scope":18217,"src":"16174:828:52","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17964,"nodeType":"Block","src":"17580:958:52","statements":[{"assignments":[17872],"declarations":[{"constant":false,"id":17872,"mutability":"mutable","name":"token","nameLocation":"17608:5:52","nodeType":"VariableDeclaration","scope":17964,"src":"17590:23:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},"typeName":{"id":17871,"nodeType":"UserDefinedTypeName","pathNode":{"id":17870,"name":"IERC20Upgradeable","nameLocations":["17590:17:52"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"17590:17:52"},"referencedDeclaration":1352,"src":"17590:17:52","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"visibility":"internal"}],"id":17877,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":17874,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1512,"src":"17634:5:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":17875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17634:7:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17873,"name":"IERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"17616:17:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Upgradeable_$1352_$","typeString":"type(contract IERC20Upgradeable)"}},"id":17876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17616:26:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"nodeType":"VariableDeclarationStatement","src":"17590:52:52"},{"assignments":[17879],"declarations":[{"constant":false,"id":17879,"mutability":"mutable","name":"balanceBefore","nameLocation":"17660:13:52","nodeType":"VariableDeclaration","scope":17964,"src":"17652:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17878,"name":"uint256","nodeType":"ElementaryTypeName","src":"17652:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17887,"initialValue":{"arguments":[{"arguments":[{"id":17884,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"17700:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}],"id":17883,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17692:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17882,"name":"address","nodeType":"ElementaryTypeName","src":"17692:7:52","typeDescriptions":{}}},"id":17885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17692:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17880,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17872,"src":"17676:5:52","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":17881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17682:9:52","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1309,"src":"17676:15:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":17886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17676:30:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17652:54:52"},{"assignments":[17889],"declarations":[{"constant":false,"id":17889,"mutability":"mutable","name":"vTokenBalanceBefore","nameLocation":"17724:19:52","nodeType":"VariableDeclaration","scope":17964,"src":"17716:27:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17888,"name":"uint256","nodeType":"ElementaryTypeName","src":"17716:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17897,"initialValue":{"arguments":[{"arguments":[{"id":17894,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"17771:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}],"id":17893,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17763:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17892,"name":"address","nodeType":"ElementaryTypeName","src":"17763:7:52","typeDescriptions":{}}},"id":17895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17763:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17890,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"17746:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17753:9:52","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":13641,"src":"17746:16:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":17896,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17746:31:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17716:61:52"},{"assignments":[17899],"declarations":[{"constant":false,"id":17899,"mutability":"mutable","name":"errorCode","nameLocation":"17796:9:52","nodeType":"VariableDeclaration","scope":17964,"src":"17788:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17898,"name":"uint256","nodeType":"ElementaryTypeName","src":"17788:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17904,"initialValue":{"arguments":[{"id":17902,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17863,"src":"17832:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17900,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"17808:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17815:16:52","memberName":"redeemUnderlying","nodeType":"MemberAccess","referencedDeclaration":12961,"src":"17808:23:52","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) external returns (uint256)"}},"id":17903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17808:31:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17788:51:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17905,"name":"errorCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17899,"src":"17853:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":17906,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16886,"src":"17866:8:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17853:21:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17913,"nodeType":"IfStatement","src":"17849:94:52","trueBody":{"id":17912,"nodeType":"Block","src":"17876:67:52","statements":[{"errorCall":{"arguments":[{"id":17909,"name":"errorCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17899,"src":"17922:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17908,"name":"VenusERC4626__VenusError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16925,"src":"17897:24:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":17910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17897:35:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17911,"nodeType":"RevertStatement","src":"17890:42:52"}]}},{"expression":{"id":17924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17914,"name":"actualAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17866,"src":"18018:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":17919,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"18057:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}],"id":17918,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18049:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17917,"name":"address","nodeType":"ElementaryTypeName","src":"18049:7:52","typeDescriptions":{}}},"id":17920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18049:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17915,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17872,"src":"18033:5:52","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":17916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18039:9:52","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1309,"src":"18033:15:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":17921,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18033:30:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17922,"name":"balanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17879,"src":"18066:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18033:46:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18018:61:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17925,"nodeType":"ExpressionStatement","src":"18018:61:52"},{"assignments":[17927],"declarations":[{"constant":false,"id":17927,"mutability":"mutable","name":"actualVTokens","nameLocation":"18098:13:52","nodeType":"VariableDeclaration","scope":17964,"src":"18090:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17926,"name":"uint256","nodeType":"ElementaryTypeName","src":"18090:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17937,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17928,"name":"vTokenBalanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17889,"src":"18114:19:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"arguments":[{"id":17933,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"18161:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}],"id":17932,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18153:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17931,"name":"address","nodeType":"ElementaryTypeName","src":"18153:7:52","typeDescriptions":{}}},"id":17934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18153:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17929,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"18136:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18143:9:52","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":13641,"src":"18136:16:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":17935,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18136:31:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18114:53:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"18090:77:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17938,"name":"actualVTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17927,"src":"18181:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17939,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18198:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18181:18:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17946,"nodeType":"IfStatement","src":"18177:111:52","trueBody":{"id":17945,"nodeType":"Block","src":"18201:87:52","statements":[{"errorCall":{"arguments":[{"hexValue":"61637475616c56546f6b656e73206174205f6265666f72655769746864726177","id":17942,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18242:34:52","typeDescriptions":{"typeIdentifier":"t_stringliteral_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e","typeString":"literal_string \"actualVTokens at _beforeWithdraw\""},"value":"actualVTokens at _beforeWithdraw"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e","typeString":"literal_string \"actualVTokens at _beforeWithdraw\""}],"id":17941,"name":"ERC4626__ZeroAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16942,"src":"18222:19:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":17943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18222:55:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17944,"nodeType":"RevertStatement","src":"18215:62:52"}]}},{"expression":{"id":17962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17947,"name":"actualShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17868,"src":"18359:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":17950,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":767,"src":"18408:11:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":17951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18408:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":17952,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18424:2:52","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":17953,"name":"_decimalsOffset","nodeType":"Identifier","overloadedDeclarations":[18174],"referencedDeclaration":18174,"src":"18430:15:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint8_$","typeString":"function () view returns (uint8)"}},"id":17954,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18430:17:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"18424:23:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18408:39:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17957,"name":"vTokenBalanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17889,"src":"18461:19:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":17958,"name":"MathUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3687,"src":"18494:15:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUpgradeable_$3687_$","typeString":"type(library MathUpgradeable)"}},"id":17959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18510:8:52","memberName":"Rounding","nodeType":"MemberAccess","referencedDeclaration":2828,"src":"18494:24:52","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2828_$","typeString":"type(enum MathUpgradeable.Rounding)"}},"id":17960,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"18519:2:52","memberName":"Up","nodeType":"MemberAccess","referencedDeclaration":2826,"src":"18494:27:52","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}],"expression":{"id":17948,"name":"actualVTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17927,"src":"18374:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18388:6:52","memberName":"mulDiv","nodeType":"MemberAccess","referencedDeclaration":3079,"src":"18374:20:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$2828_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256,enum MathUpgradeable.Rounding) pure returns (uint256)"}},"id":17961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18374:157:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18359:172:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17963,"nodeType":"ExpressionStatement","src":"18359:172:52"}]},"documentation":{"id":17861,"nodeType":"StructuredDocumentation","src":"17008:464:52","text":"@notice Redeems underlying assets before withdrawing from the vault.\n @dev Calls `redeemUnderlying` on the vToken contract. Reverts on error.\n @param assets The amount of underlying assets to redeem.\n @return actualAssets The amount of assets transferred in\n @return actualShares The shares equivalent to `actualAssets`, to be burned, rounded up\n @custom:error ERC4626__ZeroAmount is thrown when the redeemed VTokens are zero"},"id":17965,"implemented":true,"kind":"function","modifiers":[],"name":"_beforeWithdraw","nameLocation":"17486:15:52","nodeType":"FunctionDefinition","parameters":{"id":17864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17863,"mutability":"mutable","name":"assets","nameLocation":"17510:6:52","nodeType":"VariableDeclaration","scope":17965,"src":"17502:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17862,"name":"uint256","nodeType":"ElementaryTypeName","src":"17502:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17501:16:52"},"returnParameters":{"id":17869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17866,"mutability":"mutable","name":"actualAssets","nameLocation":"17544:12:52","nodeType":"VariableDeclaration","scope":17965,"src":"17536:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17865,"name":"uint256","nodeType":"ElementaryTypeName","src":"17536:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17868,"mutability":"mutable","name":"actualShares","nameLocation":"17566:12:52","nodeType":"VariableDeclaration","scope":17965,"src":"17558:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17867,"name":"uint256","nodeType":"ElementaryTypeName","src":"17558:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17535:44:52"},"scope":18217,"src":"17477:1061:52","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17999,"nodeType":"Block","src":"18780:231:52","statements":[{"expression":{"arguments":[{"arguments":[{"id":17978,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"18836:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}],"id":17977,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18828:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17976,"name":"address","nodeType":"ElementaryTypeName","src":"18828:7:52","typeDescriptions":{}}},"id":17979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18828:15:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17980,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17968,"src":"18845:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":17972,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1512,"src":"18807:5:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":17973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18807:7:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17971,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1274,"src":"18790:16:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC20Upgradeable_$1274_$","typeString":"type(contract ERC20Upgradeable)"}},"id":17974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18790:25:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$1274","typeString":"contract ERC20Upgradeable"}},"id":17975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18816:11:52","memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":2168,"src":"18790:37:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$1352_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20Upgradeable_$1352_$","typeString":"function (contract IERC20Upgradeable,address,uint256)"}},"id":17981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18790:62:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17982,"nodeType":"ExpressionStatement","src":"18790:62:52"},{"assignments":[17984],"declarations":[{"constant":false,"id":17984,"mutability":"mutable","name":"errorCode","nameLocation":"18870:9:52","nodeType":"VariableDeclaration","scope":17999,"src":"18862:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17983,"name":"uint256","nodeType":"ElementaryTypeName","src":"18862:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17989,"initialValue":{"arguments":[{"id":17987,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17968,"src":"18894:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17985,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"18882:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":17986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18889:4:52","memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":12848,"src":"18882:11:52","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) external returns (uint256)"}},"id":17988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18882:19:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"18862:39:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17990,"name":"errorCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17984,"src":"18915:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":17991,"name":"NO_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16886,"src":"18928:8:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18915:21:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17998,"nodeType":"IfStatement","src":"18911:94:52","trueBody":{"id":17997,"nodeType":"Block","src":"18938:67:52","statements":[{"errorCall":{"arguments":[{"id":17994,"name":"errorCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17984,"src":"18984:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17993,"name":"VenusERC4626__VenusError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16925,"src":"18959:24:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":17995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18959:35:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17996,"nodeType":"RevertStatement","src":"18952:42:52"}]}}]},"documentation":{"id":17966,"nodeType":"StructuredDocumentation","src":"18544:184:52","text":"@notice Mints vTokens after depositing assets.\n @dev Calls `mint` on the vToken contract. Reverts on error.\n @param assets The amount of underlying assets to deposit."},"id":18000,"implemented":true,"kind":"function","modifiers":[],"name":"_mintVTokens","nameLocation":"18742:12:52","nodeType":"FunctionDefinition","parameters":{"id":17969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17968,"mutability":"mutable","name":"assets","nameLocation":"18763:6:52","nodeType":"VariableDeclaration","scope":18000,"src":"18755:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17967,"name":"uint256","nodeType":"ElementaryTypeName","src":"18755:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18754:16:52"},"returnParameters":{"id":17970,"nodeType":"ParameterList","parameters":[],"src":"18780:0:52"},"scope":18217,"src":"18733:278:52","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":18019,"nodeType":"Block","src":"19391:160:52","statements":[{"expression":{"arguments":[{"id":18007,"name":"newRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18003,"src":"19422:12:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18006,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16359,"src":"19401:20:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":18008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19401:34:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18009,"nodeType":"ExpressionStatement","src":"19401:34:52"},{"eventCall":{"arguments":[{"id":18011,"name":"rewardRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16897,"src":"19474:15:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18012,"name":"newRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18003,"src":"19491:12:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18010,"name":"RewardRecipientUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16911,"src":"19451:22:52","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":18013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19451:53:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18014,"nodeType":"EmitStatement","src":"19446:58:52"},{"expression":{"id":18017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18015,"name":"rewardRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16897,"src":"19514:15:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18016,"name":"newRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18003,"src":"19532:12:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19514:30:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18018,"nodeType":"ExpressionStatement","src":"19514:30:52"}]},"documentation":{"id":18001,"nodeType":"StructuredDocumentation","src":"19017:309:52","text":"@notice Sets a new reward recipient address\n @param newRecipient The address of the new reward recipient\n @custom:error ZeroAddressNotAllowed is thrown when the new recipient address is zero\n @custom:event RewardRecipientUpdated is emitted when the reward recipient address is updated"},"id":18020,"implemented":true,"kind":"function","modifiers":[],"name":"_setRewardRecipient","nameLocation":"19340:19:52","nodeType":"FunctionDefinition","parameters":{"id":18004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18003,"mutability":"mutable","name":"newRecipient","nameLocation":"19368:12:52","nodeType":"VariableDeclaration","scope":18020,"src":"19360:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18002,"name":"address","nodeType":"ElementaryTypeName","src":"19360:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19359:22:52"},"returnParameters":{"id":18005,"nodeType":"ParameterList","parameters":[],"src":"19391:0:52"},"scope":18217,"src":"19331:220:52","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1942],"body":{"id":18156,"nodeType":"Block","src":"19945:1594:52","statements":[{"assignments":[18034],"declarations":[{"constant":false,"id":18034,"mutability":"mutable","name":"assetBalanceBefore","nameLocation":"20005:18:52","nodeType":"VariableDeclaration","scope":18156,"src":"19997:26:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18033,"name":"uint256","nodeType":"ElementaryTypeName","src":"19997:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18045,"initialValue":{"arguments":[{"arguments":[{"id":18042,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"20071:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}],"id":18041,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20063:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18040,"name":"address","nodeType":"ElementaryTypeName","src":"20063:7:52","typeDescriptions":{}}},"id":18043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20063:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":18036,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1512,"src":"20044:5:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":18037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20044:7:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18035,"name":"IERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"20026:17:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Upgradeable_$1352_$","typeString":"type(contract IERC20Upgradeable)"}},"id":18038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20026:26:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":18039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20053:9:52","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1309,"src":"20026:36:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":18044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20026:51:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19997:80:52"},{"assignments":[18047],"declarations":[{"constant":false,"id":18047,"mutability":"mutable","name":"vTokenBalanceBefore","nameLocation":"20095:19:52","nodeType":"VariableDeclaration","scope":18156,"src":"20087:27:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18046,"name":"uint256","nodeType":"ElementaryTypeName","src":"20087:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18055,"initialValue":{"arguments":[{"arguments":[{"id":18052,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"20142:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}],"id":18051,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20134:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18050,"name":"address","nodeType":"ElementaryTypeName","src":"20134:7:52","typeDescriptions":{}}},"id":18053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20134:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":18048,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"20117:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":18049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20124:9:52","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":13641,"src":"20117:16:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":18054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20117:31:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"20087:61:52"},{"expression":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":18060,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1512,"src":"20277:5:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":18061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20277:7:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18059,"name":"IERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"20259:17:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Upgradeable_$1352_$","typeString":"type(contract IERC20Upgradeable)"}},"id":18062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20259:26:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},{"id":18063,"name":"caller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18023,"src":"20287:6:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":18066,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"20303:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}],"id":18065,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20295:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18064,"name":"address","nodeType":"ElementaryTypeName","src":"20295:7:52","typeDescriptions":{}}},"id":18067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20295:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18068,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18027,"src":"20310:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18056,"name":"SafeERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2440,"src":"20221:20:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeERC20Upgradeable_$2440_$","typeString":"type(library SafeERC20Upgradeable)"}},"id":18058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20242:16:52","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":2124,"src":"20221:37:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$1352_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20Upgradeable,address,address,uint256)"}},"id":18069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20221:96:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18070,"nodeType":"ExpressionStatement","src":"20221:96:52"},{"assignments":[18072],"declarations":[{"constant":false,"id":18072,"mutability":"mutable","name":"assetsReceived","nameLocation":"20418:14:52","nodeType":"VariableDeclaration","scope":18156,"src":"20410:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18071,"name":"uint256","nodeType":"ElementaryTypeName","src":"20410:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18085,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":18080,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"20480:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}],"id":18079,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20472:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18078,"name":"address","nodeType":"ElementaryTypeName","src":"20472:7:52","typeDescriptions":{}}},"id":18081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20472:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":18074,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1512,"src":"20453:5:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":18075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20453:7:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18073,"name":"IERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"20435:17:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Upgradeable_$1352_$","typeString":"type(contract IERC20Upgradeable)"}},"id":18076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20435:26:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Upgradeable_$1352","typeString":"contract IERC20Upgradeable"}},"id":18077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20462:9:52","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1309,"src":"20435:36:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":18082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20435:51:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":18083,"name":"assetBalanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18034,"src":"20489:18:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20435:72:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"20410:97:52"},{"expression":{"arguments":[{"id":18087,"name":"assetsReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18072,"src":"20579:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18086,"name":"_mintVTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18000,"src":"20566:12:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":18088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20566:28:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18089,"nodeType":"ExpressionStatement","src":"20566:28:52"},{"assignments":[18091],"declarations":[{"constant":false,"id":18091,"mutability":"mutable","name":"vTokensReceived","nameLocation":"20658:15:52","nodeType":"VariableDeclaration","scope":18156,"src":"20650:23:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18090,"name":"uint256","nodeType":"ElementaryTypeName","src":"20650:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18101,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":18096,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"20701:4:52","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}],"id":18095,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20693:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18094,"name":"address","nodeType":"ElementaryTypeName","src":"20693:7:52","typeDescriptions":{}}},"id":18097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20693:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":18092,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"20676:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":18093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20683:9:52","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":13641,"src":"20676:16:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":18098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20676:31:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":18099,"name":"vTokenBalanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18047,"src":"20710:19:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20676:53:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"20650:79:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18102,"name":"vTokensReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18091,"src":"20743:15:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":18103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20762:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20743:20:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18110,"nodeType":"IfStatement","src":"20739:108:52","trueBody":{"id":18109,"nodeType":"Block","src":"20765:82:52","statements":[{"errorCall":{"arguments":[{"hexValue":"76546f6b656e735265636569766564206174205f6465706f736974","id":18106,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"20806:29:52","typeDescriptions":{"typeIdentifier":"t_stringliteral_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137","typeString":"literal_string \"vTokensReceived at _deposit\""},"value":"vTokensReceived at _deposit"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137","typeString":"literal_string \"vTokensReceived at _deposit\""}],"id":18105,"name":"ERC4626__ZeroAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16942,"src":"20786:19:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":18107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20786:50:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18108,"nodeType":"RevertStatement","src":"20779:57:52"}]}},{"assignments":[18112],"declarations":[{"constant":false,"id":18112,"mutability":"mutable","name":"actualAssetsValue","nameLocation":"20864:17:52","nodeType":"VariableDeclaration","scope":18156,"src":"20856:25:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18111,"name":"uint256","nodeType":"ElementaryTypeName","src":"20856:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18121,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18113,"name":"vTokensReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18091,"src":"20885:15:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18114,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16890,"src":"20903:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_VToken_$15506","typeString":"contract VToken"}},"id":18115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20910:18:52","memberName":"exchangeRateStored","nodeType":"MemberAccess","referencedDeclaration":13739,"src":"20903:25:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":18116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20903:27:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20885:45:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":18118,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20884:47:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":18119,"name":"EXP_SCALE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16116,"src":"20934:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20884:59:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"20856:87:52"},{"assignments":[18123],"declarations":[{"constant":false,"id":18123,"mutability":"mutable","name":"actualShares","nameLocation":"21120:12:52","nodeType":"VariableDeclaration","scope":18156,"src":"21112:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18122,"name":"uint256","nodeType":"ElementaryTypeName","src":"21112:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18143,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":18126,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":767,"src":"21173:11:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":18127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21173:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":18128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21189:2:52","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":18129,"name":"_decimalsOffset","nodeType":"Identifier","overloadedDeclarations":[18174],"referencedDeclaration":18174,"src":"21195:15:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint8_$","typeString":"function () view returns (uint8)"}},"id":18130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21195:17:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"21189:23:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21173:39:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":18133,"name":"totalAssets","nodeType":"Identifier","overloadedDeclarations":[17574],"referencedDeclaration":17574,"src":"21226:11:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":18134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21226:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":18135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21242:1:52","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"21226:17:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":18137,"name":"actualAssetsValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18112,"src":"21246:17:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21226:37:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":18139,"name":"MathUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3687,"src":"21344:15:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUpgradeable_$3687_$","typeString":"type(library MathUpgradeable)"}},"id":18140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21360:8:52","memberName":"Rounding","nodeType":"MemberAccess","referencedDeclaration":2828,"src":"21344:24:52","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2828_$","typeString":"type(enum MathUpgradeable.Rounding)"}},"id":18141,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"21369:4:52","memberName":"Down","nodeType":"MemberAccess","referencedDeclaration":2825,"src":"21344:29:52","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2828","typeString":"enum MathUpgradeable.Rounding"}],"expression":{"id":18124,"name":"actualAssetsValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18112,"src":"21135:17:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21153:6:52","memberName":"mulDiv","nodeType":"MemberAccess","referencedDeclaration":3079,"src":"21135:24:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$2828_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256,enum MathUpgradeable.Rounding) pure returns (uint256)"}},"id":18142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21135:248:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21112:271:52"},{"expression":{"arguments":[{"id":18145,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18025,"src":"21446:8:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18146,"name":"actualShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18123,"src":"21456:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18144,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1086,"src":"21440:5:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":18147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21440:29:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18148,"nodeType":"ExpressionStatement","src":"21440:29:52"},{"eventCall":{"arguments":[{"id":18150,"name":"caller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18023,"src":"21493:6:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18151,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18025,"src":"21501:8:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18152,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18027,"src":"21511:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18153,"name":"actualShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18123,"src":"21519:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18149,"name":"Deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":258,"src":"21485:7:52","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":18154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21485:47:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18155,"nodeType":"EmitStatement","src":"21480:52:52"}]},"documentation":{"id":18021,"nodeType":"StructuredDocumentation","src":"19557:281:52","text":"@notice Deposits the assets into the VToken and calculates the shares to mint based on the\n underlying assets equivalent to the new VTokens minted\n @custom:error ERC4626__ZeroAmount is thrown when the minted VTokens are zero\n @inheritdoc ERC4626Upgradeable"},"id":18157,"implemented":true,"kind":"function","modifiers":[],"name":"_deposit","nameLocation":"19852:8:52","nodeType":"FunctionDefinition","overrides":{"id":18031,"nodeType":"OverrideSpecifier","overrides":[],"src":"19936:8:52"},"parameters":{"id":18030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18023,"mutability":"mutable","name":"caller","nameLocation":"19869:6:52","nodeType":"VariableDeclaration","scope":18157,"src":"19861:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18022,"name":"address","nodeType":"ElementaryTypeName","src":"19861:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18025,"mutability":"mutable","name":"receiver","nameLocation":"19885:8:52","nodeType":"VariableDeclaration","scope":18157,"src":"19877:16:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18024,"name":"address","nodeType":"ElementaryTypeName","src":"19877:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18027,"mutability":"mutable","name":"assets","nameLocation":"19903:6:52","nodeType":"VariableDeclaration","scope":18157,"src":"19895:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18026,"name":"uint256","nodeType":"ElementaryTypeName","src":"19895:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18029,"mutability":"mutable","name":"shares","nameLocation":"19919:6:52","nodeType":"VariableDeclaration","scope":18157,"src":"19911:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18028,"name":"uint256","nodeType":"ElementaryTypeName","src":"19911:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19860:66:52"},"returnParameters":{"id":18032,"nodeType":"ParameterList","parameters":[],"src":"19945:0:52"},"scope":18217,"src":"19843:1696:52","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1997],"body":{"id":18173,"nodeType":"Block","src":"21786:65:52","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":18171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3138","id":18164,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21803:2:52","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":18166,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1512,"src":"21825:5:52","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":18167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21825:7:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18165,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1274,"src":"21808:16:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC20Upgradeable_$1274_$","typeString":"type(contract ERC20Upgradeable)"}},"id":18168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21808:25:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$1274","typeString":"contract ERC20Upgradeable"}},"id":18169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21834:8:52","memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":757,"src":"21808:34:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":18170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21808:36:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"21803:41:52","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":18163,"id":18172,"nodeType":"Return","src":"21796:48:52"}]},"documentation":{"id":18158,"nodeType":"StructuredDocumentation","src":"21545:162:52","text":"@notice Override `_decimalsOffset` to normalize decimals to 18 for all VenusERC4626 vaults.\n @return Gap between 18 and the decimals of the asset token"},"id":18174,"implemented":true,"kind":"function","modifiers":[],"name":"_decimalsOffset","nameLocation":"21721:15:52","nodeType":"FunctionDefinition","overrides":{"id":18160,"nodeType":"OverrideSpecifier","overrides":[],"src":"21761:8:52"},"parameters":{"id":18159,"nodeType":"ParameterList","parameters":[],"src":"21736:2:52"},"returnParameters":{"id":18163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18162,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18174,"src":"21779:5:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18161,"name":"uint8","nodeType":"ElementaryTypeName","src":"21779:5:52","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"21778:7:52"},"scope":18217,"src":"21712:139:52","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":18194,"nodeType":"Block","src":"22197:89:52","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"455243343632362d577261707065642056656e757320","id":18187,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"22238:24:52","typeDescriptions":{"typeIdentifier":"t_stringliteral_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f","typeString":"literal_string \"ERC4626-Wrapped Venus \""},"value":"ERC4626-Wrapped Venus "},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18188,"name":"asset_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18178,"src":"22264:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$1274","typeString":"contract ERC20Upgradeable"}},"id":18189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22271:4:52","memberName":"name","nodeType":"MemberAccess","referencedDeclaration":737,"src":"22264:11:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":18190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22264:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f","typeString":"literal_string \"ERC4626-Wrapped Venus \""},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":18185,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"22221:3:52","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18186,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"22225:12:52","memberName":"encodePacked","nodeType":"MemberAccess","src":"22221:16:52","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":18191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22221:57:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":18184,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22214:6:52","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":18183,"name":"string","nodeType":"ElementaryTypeName","src":"22214:6:52","typeDescriptions":{}}},"id":18192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22214:65:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":18182,"id":18193,"nodeType":"Return","src":"22207:72:52"}]},"documentation":{"id":18175,"nodeType":"StructuredDocumentation","src":"21857:244:52","text":"@notice Generates and returns the derived name of the vault considering the asset name\n @param asset_ Asset to be accepted in the vault whose name this function will return\n @return Name of the vault considering the asset name"},"id":18195,"implemented":true,"kind":"function","modifiers":[],"name":"_generateVaultName","nameLocation":"22115:18:52","nodeType":"FunctionDefinition","parameters":{"id":18179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18178,"mutability":"mutable","name":"asset_","nameLocation":"22151:6:52","nodeType":"VariableDeclaration","scope":18195,"src":"22134:23:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$1274","typeString":"contract ERC20Upgradeable"},"typeName":{"id":18177,"nodeType":"UserDefinedTypeName","pathNode":{"id":18176,"name":"ERC20Upgradeable","nameLocations":["22134:16:52"],"nodeType":"IdentifierPath","referencedDeclaration":1274,"src":"22134:16:52"},"referencedDeclaration":1274,"src":"22134:16:52","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$1274","typeString":"contract ERC20Upgradeable"}},"visibility":"internal"}],"src":"22133:25:52"},"returnParameters":{"id":18182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18181,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18195,"src":"22182:13:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":18180,"name":"string","nodeType":"ElementaryTypeName","src":"22182:6:52","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"22181:15:52"},"scope":18217,"src":"22106:180:52","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":18215,"nodeType":"Block","src":"22642:74:52","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"7634363236","id":18208,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"22683:7:52","typeDescriptions":{"typeIdentifier":"t_stringliteral_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526","typeString":"literal_string \"v4626\""},"value":"v4626"},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18209,"name":"asset_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18199,"src":"22692:6:52","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$1274","typeString":"contract ERC20Upgradeable"}},"id":18210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22699:6:52","memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":747,"src":"22692:13:52","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":18211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22692:15:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526","typeString":"literal_string \"v4626\""},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":18206,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"22666:3:52","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18207,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"22670:12:52","memberName":"encodePacked","nodeType":"MemberAccess","src":"22666:16:52","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":18212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22666:42:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":18205,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22659:6:52","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":18204,"name":"string","nodeType":"ElementaryTypeName","src":"22659:6:52","typeDescriptions":{}}},"id":18213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22659:50:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":18203,"id":18214,"nodeType":"Return","src":"22652:57:52"}]},"documentation":{"id":18196,"nodeType":"StructuredDocumentation","src":"22292:252:52","text":"@notice Generates and returns the derived symbol of the vault considering the asset symbol\n @param asset_ Asset to be accepted in the vault whose symbol this function will return\n @return Symbol of the vault considering the asset name"},"id":18216,"implemented":true,"kind":"function","modifiers":[],"name":"_generateVaultSymbol","nameLocation":"22558:20:52","nodeType":"FunctionDefinition","parameters":{"id":18200,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18199,"mutability":"mutable","name":"asset_","nameLocation":"22596:6:52","nodeType":"VariableDeclaration","scope":18216,"src":"22579:23:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$1274","typeString":"contract ERC20Upgradeable"},"typeName":{"id":18198,"nodeType":"UserDefinedTypeName","pathNode":{"id":18197,"name":"ERC20Upgradeable","nameLocations":["22579:16:52"],"nodeType":"IdentifierPath","referencedDeclaration":1274,"src":"22579:16:52"},"referencedDeclaration":1274,"src":"22579:16:52","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$1274","typeString":"contract ERC20Upgradeable"}},"visibility":"internal"}],"src":"22578:25:52"},"returnParameters":{"id":18203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18202,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18216,"src":"22627:13:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":18201,"name":"string","nodeType":"ElementaryTypeName","src":"22627:6:52","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"22626:15:52"},"scope":18217,"src":"22549:167:52","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":18218,"src":"1707:21011:52","usedErrors":[4916,10290,16338,16925,16928,16931,16934,16937,16942],"usedEvents":[17,124,258,270,422,1286,1295,4907,10283,16904,16911,16920]}],"src":"41:22678:52"},"id":52},"contracts/ERC4626/VenusERC4626Factory.sol":{"ast":{"absolutePath":"contracts/ERC4626/VenusERC4626Factory.sol","exportedSymbols":{"AccessControlledV8":[5035],"BeaconProxy":[4326],"ERC4626Upgradeable":[2003],"MaxLoopsLimitHelper":[10335],"PoolRegistryInterface":[10404],"UpgradeableBeacon":[4411],"VTokenInterface":[16106],"VenusERC4626":[18217],"VenusERC4626Factory":[18575],"ensureNonzeroAddress":[16359]},"id":18576,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":18219,"literals":["solidity","0.8",".25"],"nodeType":"PragmaDirective","src":"41:23:53"},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol","id":18221,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18576,"sourceUnit":2004,"src":"66:119:53","symbolAliases":[{"foreign":{"id":18220,"name":"ERC4626Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2003,"src":"75:18:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol","file":"@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol","id":18223,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18576,"sourceUnit":4412,"src":"186:95:53","symbolAliases":[{"foreign":{"id":18222,"name":"UpgradeableBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4411,"src":"195:17:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol","file":"@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol","id":18225,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18576,"sourceUnit":4327,"src":"282:83:53","symbolAliases":[{"foreign":{"id":18224,"name":"BeaconProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4326,"src":"291:11:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol","file":"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol","id":18227,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18576,"sourceUnit":5036,"src":"367:117:53","symbolAliases":[{"foreign":{"id":18226,"name":"AccessControlledV8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5035,"src":"376:18:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/Pool/PoolRegistryInterface.sol","file":"@venusprotocol/isolated-pools/contracts/Pool/PoolRegistryInterface.sol","id":18229,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18576,"sourceUnit":10405,"src":"485:111:53","symbolAliases":[{"foreign":{"id":18228,"name":"PoolRegistryInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10404,"src":"494:21:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol","file":"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol","id":18231,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18576,"sourceUnit":10336,"src":"597:102:53","symbolAliases":[{"foreign":{"id":18230,"name":"MaxLoopsLimitHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10335,"src":"606:19:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol","file":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol","id":18233,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18576,"sourceUnit":16107,"src":"700:95:53","symbolAliases":[{"foreign":{"id":18232,"name":"VTokenInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16106,"src":"709:15:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/ERC4626/VenusERC4626.sol","file":"./VenusERC4626.sol","id":18235,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18576,"sourceUnit":18218,"src":"796:50:53","symbolAliases":[{"foreign":{"id":18234,"name":"VenusERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18217,"src":"805:12:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@venusprotocol/solidity-utilities/contracts/validators.sol","file":"@venusprotocol/solidity-utilities/contracts/validators.sol","id":18237,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18576,"sourceUnit":16375,"src":"847:98:53","symbolAliases":[{"foreign":{"id":18236,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16359,"src":"856:20:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":18239,"name":"AccessControlledV8","nameLocations":["1066:18:53"],"nodeType":"IdentifierPath","referencedDeclaration":5035,"src":"1066:18:53"},"id":18240,"nodeType":"InheritanceSpecifier","src":"1066:18:53"},{"baseName":{"id":18241,"name":"MaxLoopsLimitHelper","nameLocations":["1086:19:53"],"nodeType":"IdentifierPath","referencedDeclaration":10335,"src":"1086:19:53"},"id":18242,"nodeType":"InheritanceSpecifier","src":"1086:19:53"}],"canonicalName":"VenusERC4626Factory","contractDependencies":[4326,4411],"contractKind":"contract","documentation":{"id":18238,"nodeType":"StructuredDocumentation","src":"947:87:53","text":"@title VenusERC4626Factory\n @notice Factory for creating VenusERC4626 contracts"},"fullyImplemented":true,"id":18575,"linearizedBaseContracts":[18575,10335,5035,106,239,2821,576],"name":"VenusERC4626Factory","nameLocation":"1043:19:53","nodeType":"ContractDefinition","nodes":[{"constant":true,"documentation":{"id":18243,"nodeType":"StructuredDocumentation","src":"1112:76:53","text":"@notice A constant salt value used for deterministic contract deployment"},"functionSelector":"ba9a91a5","id":18248,"mutability":"constant","name":"SALT","nameLocation":"1217:4:53","nodeType":"VariableDeclaration","scope":18575,"src":"1193:63:53","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18244,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1193:7:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"56656e75732d45524334363236205661756c74","id":18246,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1234:21:53","typeDescriptions":{"typeIdentifier":"t_stringliteral_1991af52b18eb46fa8c9d75910fd649338d33ba3882cfe1e1afbc13a3b4df5b9","typeString":"literal_string \"Venus-ERC4626 Vault\""},"value":"Venus-ERC4626 Vault"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_1991af52b18eb46fa8c9d75910fd649338d33ba3882cfe1e1afbc13a3b4df5b9","typeString":"literal_string \"Venus-ERC4626 Vault\""}],"id":18245,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1224:9:53","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":18247,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1224:32:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"constant":false,"documentation":{"id":18249,"nodeType":"StructuredDocumentation","src":"1263:56:53","text":"@notice The beacon contract for VenusERC4626 proxies"},"functionSelector":"59659e90","id":18252,"mutability":"mutable","name":"beacon","nameLocation":"1349:6:53","nodeType":"VariableDeclaration","scope":18575,"src":"1324:31:53","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_UpgradeableBeacon_$4411","typeString":"contract UpgradeableBeacon"},"typeName":{"id":18251,"nodeType":"UserDefinedTypeName","pathNode":{"id":18250,"name":"UpgradeableBeacon","nameLocations":["1324:17:53"],"nodeType":"IdentifierPath","referencedDeclaration":4411,"src":"1324:17:53"},"referencedDeclaration":4411,"src":"1324:17:53","typeDescriptions":{"typeIdentifier":"t_contract$_UpgradeableBeacon_$4411","typeString":"contract UpgradeableBeacon"}},"visibility":"public"},{"constant":false,"documentation":{"id":18253,"nodeType":"StructuredDocumentation","src":"1362:38:53","text":"@notice The Pool Registry contract"},"functionSelector":"afcff50f","id":18256,"mutability":"mutable","name":"poolRegistry","nameLocation":"1434:12:53","nodeType":"VariableDeclaration","scope":18575,"src":"1405:41:53","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_PoolRegistryInterface_$10404","typeString":"contract PoolRegistryInterface"},"typeName":{"id":18255,"nodeType":"UserDefinedTypeName","pathNode":{"id":18254,"name":"PoolRegistryInterface","nameLocations":["1405:21:53"],"nodeType":"IdentifierPath","referencedDeclaration":10404,"src":"1405:21:53"},"referencedDeclaration":10404,"src":"1405:21:53","typeDescriptions":{"typeIdentifier":"t_contract$_PoolRegistryInterface_$10404","typeString":"contract PoolRegistryInterface"}},"visibility":"public"},{"constant":false,"documentation":{"id":18257,"nodeType":"StructuredDocumentation","src":"1453:70:53","text":"@notice The address that will receive the liquidity mining rewards"},"functionSelector":"17f33340","id":18259,"mutability":"mutable","name":"rewardRecipient","nameLocation":"1543:15:53","nodeType":"VariableDeclaration","scope":18575,"src":"1528:30:53","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18258,"name":"address","nodeType":"ElementaryTypeName","src":"1528:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"b599410a","id":18264,"mutability":"mutable","name":"createdVaults","nameLocation":"1677:13:53","nodeType":"VariableDeclaration","scope":18575,"src":"1618:72:53","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_ERC4626Upgradeable_$2003_$","typeString":"mapping(address => contract ERC4626Upgradeable)"},"typeName":{"id":18263,"keyName":"vToken","keyNameLocation":"1634:6:53","keyType":{"id":18260,"name":"address","nodeType":"ElementaryTypeName","src":"1626:7:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1618:51:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_ERC4626Upgradeable_$2003_$","typeString":"mapping(address => contract ERC4626Upgradeable)"},"valueName":"vault","valueNameLocation":"1663:5:53","valueType":{"id":18262,"nodeType":"UserDefinedTypeName","pathNode":{"id":18261,"name":"ERC4626Upgradeable","nameLocations":["1644:18:53"],"nodeType":"IdentifierPath","referencedDeclaration":2003,"src":"1644:18:53"},"referencedDeclaration":2003,"src":"1644:18:53","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626Upgradeable_$2003","typeString":"contract ERC4626Upgradeable"}}},"visibility":"public"},{"anonymous":false,"documentation":{"id":18265,"nodeType":"StructuredDocumentation","src":"1697:160:53","text":"@notice Emitted when a new ERC4626 vault has been created\n @param vToken The vToken used by the vault\n @param vault The vault that was created"},"eventSelector":"cbd4e5d1362721c7fd10daaabb1a046344447d4798be55684b8a6b4fc1765d72","id":18273,"name":"CreateERC4626","nameLocation":"1868:13:53","nodeType":"EventDefinition","parameters":{"id":18272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18268,"indexed":true,"mutability":"mutable","name":"vToken","nameLocation":"1906:6:53","nodeType":"VariableDeclaration","scope":18273,"src":"1882:30:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"},"typeName":{"id":18267,"nodeType":"UserDefinedTypeName","pathNode":{"id":18266,"name":"VTokenInterface","nameLocations":["1882:15:53"],"nodeType":"IdentifierPath","referencedDeclaration":16106,"src":"1882:15:53"},"referencedDeclaration":16106,"src":"1882:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}},"visibility":"internal"},{"constant":false,"id":18271,"indexed":true,"mutability":"mutable","name":"vault","nameLocation":"1941:5:53","nodeType":"VariableDeclaration","scope":18273,"src":"1914:32:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626Upgradeable_$2003","typeString":"contract ERC4626Upgradeable"},"typeName":{"id":18270,"nodeType":"UserDefinedTypeName","pathNode":{"id":18269,"name":"ERC4626Upgradeable","nameLocations":["1914:18:53"],"nodeType":"IdentifierPath","referencedDeclaration":2003,"src":"1914:18:53"},"referencedDeclaration":2003,"src":"1914:18:53","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626Upgradeable_$2003","typeString":"contract ERC4626Upgradeable"}},"visibility":"internal"}],"src":"1881:66:53"},"src":"1862:86:53"},{"anonymous":false,"documentation":{"id":18274,"nodeType":"StructuredDocumentation","src":"1954:194:53","text":"@notice Emitted when the reward recipient address is updated.\n @param oldRecipient The previous reward recipient address.\n @param newRecipient The new reward recipient address."},"eventSelector":"c8c11bb97ac2ffa10ce2e2a98f4c1fd8df84cfa2e1a15e013ed2383ab1f527ad","id":18280,"name":"RewardRecipientUpdated","nameLocation":"2159:22:53","nodeType":"EventDefinition","parameters":{"id":18279,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18276,"indexed":true,"mutability":"mutable","name":"oldRecipient","nameLocation":"2198:12:53","nodeType":"VariableDeclaration","scope":18280,"src":"2182:28:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18275,"name":"address","nodeType":"ElementaryTypeName","src":"2182:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18278,"indexed":true,"mutability":"mutable","name":"newRecipient","nameLocation":"2228:12:53","nodeType":"VariableDeclaration","scope":18280,"src":"2212:28:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18277,"name":"address","nodeType":"ElementaryTypeName","src":"2212:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2181:60:53"},"src":"2153:89:53"},{"documentation":{"id":18281,"nodeType":"StructuredDocumentation","src":"2248:77:53","text":"@notice Thrown when the provided vToken is not registered in PoolRegistry"},"errorSelector":"29d0c8ec","id":18283,"name":"VenusERC4626Factory__InvalidVToken","nameLocation":"2336:34:53","nodeType":"ErrorDefinition","parameters":{"id":18282,"nodeType":"ParameterList","parameters":[],"src":"2370:2:53"},"src":"2330:43:53"},{"documentation":{"id":18284,"nodeType":"StructuredDocumentation","src":"2379:77:53","text":"@notice Thrown when a VenusERC4626 already exists for the provided vToken"},"errorSelector":"4fa32ea7","id":18286,"name":"VenusERC4626Factory__ERC4626AlreadyExists","nameLocation":"2467:41:53","nodeType":"ErrorDefinition","parameters":{"id":18285,"nodeType":"ParameterList","parameters":[],"src":"2508:2:53"},"src":"2461:50:53"},{"body":{"id":18293,"nodeType":"Block","src":"2584:163:53","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":18290,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":557,"src":"2718:20:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":18291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2718:22:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18292,"nodeType":"ExpressionStatement","src":"2718:22:53"}]},"documentation":{"id":18287,"nodeType":"StructuredDocumentation","src":"2517:48:53","text":"@custom:oz-upgrades-unsafe-allow constructor"},"id":18294,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":18288,"nodeType":"ParameterList","parameters":[],"src":"2581:2:53"},"returnParameters":{"id":18289,"nodeType":"ParameterList","parameters":[],"src":"2584:0:53"},"scope":18575,"src":"2570:177:53","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":18359,"nodeType":"Block","src":"3405:705:53","statements":[{"expression":{"arguments":[{"id":18311,"name":"accessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18297,"src":"3436:20:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18310,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16359,"src":"3415:20:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":18312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3415:42:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18313,"nodeType":"ExpressionStatement","src":"3415:42:53"},{"expression":{"arguments":[{"id":18315,"name":"poolRegistryAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18299,"src":"3488:19:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18314,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16359,"src":"3467:20:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":18316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3467:41:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18317,"nodeType":"ExpressionStatement","src":"3467:41:53"},{"expression":{"arguments":[{"id":18319,"name":"rewardRecipientAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18301,"src":"3539:22:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18318,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16359,"src":"3518:20:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":18320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3518:44:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18321,"nodeType":"ExpressionStatement","src":"3518:44:53"},{"expression":{"arguments":[{"id":18323,"name":"venusERC4626Implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18303,"src":"3593:26:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18322,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16359,"src":"3572:20:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":18324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3572:48:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18325,"nodeType":"ExpressionStatement","src":"3572:48:53"},{"expression":{"arguments":[{"id":18327,"name":"accessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18297,"src":"3655:20:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18326,"name":"__AccessControlled_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4931,"src":"3631:23:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":18328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3631:45:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18329,"nodeType":"ExpressionStatement","src":"3631:45:53"},{"expression":{"id":18334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18330,"name":"poolRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18256,"src":"3687:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_PoolRegistryInterface_$10404","typeString":"contract PoolRegistryInterface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":18332,"name":"poolRegistryAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18299,"src":"3724:19:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18331,"name":"PoolRegistryInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10404,"src":"3702:21:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolRegistryInterface_$10404_$","typeString":"type(contract PoolRegistryInterface)"}},"id":18333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3702:42:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_PoolRegistryInterface_$10404","typeString":"contract PoolRegistryInterface"}},"src":"3687:57:53","typeDescriptions":{"typeIdentifier":"t_contract$_PoolRegistryInterface_$10404","typeString":"contract PoolRegistryInterface"}},"id":18335,"nodeType":"ExpressionStatement","src":"3687:57:53"},{"expression":{"id":18338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18336,"name":"rewardRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18259,"src":"3754:15:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18337,"name":"rewardRecipientAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18301,"src":"3772:22:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3754:40:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18339,"nodeType":"ExpressionStatement","src":"3754:40:53"},{"expression":{"arguments":[{"id":18341,"name":"loopsLimitNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18305,"src":"3822:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18340,"name":"_setMaxLoopsLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10317,"src":"3804:17:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":18342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3804:35:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18343,"nodeType":"ExpressionStatement","src":"3804:35:53"},{"expression":{"id":18350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18344,"name":"beacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18252,"src":"3923:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_UpgradeableBeacon_$4411","typeString":"contract UpgradeableBeacon"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":18348,"name":"venusERC4626Implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18303,"src":"3954:26:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"3932:21:53","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$_t_address_$returns$_t_contract$_UpgradeableBeacon_$4411_$","typeString":"function (address) returns (contract UpgradeableBeacon)"},"typeName":{"id":18346,"nodeType":"UserDefinedTypeName","pathNode":{"id":18345,"name":"UpgradeableBeacon","nameLocations":["3936:17:53"],"nodeType":"IdentifierPath","referencedDeclaration":4411,"src":"3936:17:53"},"referencedDeclaration":4411,"src":"3936:17:53","typeDescriptions":{"typeIdentifier":"t_contract$_UpgradeableBeacon_$4411","typeString":"contract UpgradeableBeacon"}}},"id":18349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3932:49:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_UpgradeableBeacon_$4411","typeString":"contract UpgradeableBeacon"}},"src":"3923:58:53","typeDescriptions":{"typeIdentifier":"t_contract$_UpgradeableBeacon_$4411","typeString":"contract UpgradeableBeacon"}},"id":18351,"nodeType":"ExpressionStatement","src":"3923:58:53"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":18355,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":162,"src":"4095:5:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":18356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4095:7:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":18352,"name":"beacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18252,"src":"4070:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_UpgradeableBeacon_$4411","typeString":"contract UpgradeableBeacon"}},"id":18354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4077:17:53","memberName":"transferOwnership","nodeType":"MemberAccess","referencedDeclaration":3852,"src":"4070:24:53","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":18357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4070:33:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18358,"nodeType":"ExpressionStatement","src":"4070:33:53"}]},"documentation":{"id":18295,"nodeType":"StructuredDocumentation","src":"2753:407:53","text":"@notice Initializes the contract\n @param accessControlManager Address of the ACM contract\n @param poolRegistryAddress Address of the Pool Registry contract\n @param rewardRecipientAddress Reward recipient address\n @param venusERC4626Implementation Address of the VenusERC4626 implementation contract\n @param loopsLimitNumber The loops limit for the MaxLoopsLimit helper"},"functionSelector":"f7013ef6","id":18360,"implemented":true,"kind":"function","modifiers":[{"id":18308,"kind":"modifierInvocation","modifierName":{"id":18307,"name":"initializer","nameLocations":["3393:11:53"],"nodeType":"IdentifierPath","referencedDeclaration":478,"src":"3393:11:53"},"nodeType":"ModifierInvocation","src":"3393:11:53"}],"name":"initialize","nameLocation":"3174:10:53","nodeType":"FunctionDefinition","parameters":{"id":18306,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18297,"mutability":"mutable","name":"accessControlManager","nameLocation":"3202:20:53","nodeType":"VariableDeclaration","scope":18360,"src":"3194:28:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18296,"name":"address","nodeType":"ElementaryTypeName","src":"3194:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18299,"mutability":"mutable","name":"poolRegistryAddress","nameLocation":"3240:19:53","nodeType":"VariableDeclaration","scope":18360,"src":"3232:27:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18298,"name":"address","nodeType":"ElementaryTypeName","src":"3232:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18301,"mutability":"mutable","name":"rewardRecipientAddress","nameLocation":"3277:22:53","nodeType":"VariableDeclaration","scope":18360,"src":"3269:30:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18300,"name":"address","nodeType":"ElementaryTypeName","src":"3269:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18303,"mutability":"mutable","name":"venusERC4626Implementation","nameLocation":"3317:26:53","nodeType":"VariableDeclaration","scope":18360,"src":"3309:34:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18302,"name":"address","nodeType":"ElementaryTypeName","src":"3309:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18305,"mutability":"mutable","name":"loopsLimitNumber","nameLocation":"3361:16:53","nodeType":"VariableDeclaration","scope":18360,"src":"3353:24:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18304,"name":"uint256","nodeType":"ElementaryTypeName","src":"3353:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3184:199:53"},"returnParameters":{"id":18309,"nodeType":"ParameterList","parameters":[],"src":"3405:0:53"},"scope":18575,"src":"3165:945:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18383,"nodeType":"Block","src":"4530:220:53","statements":[{"expression":{"arguments":[{"hexValue":"736574526577617264526563697069656e74286164647265737329","id":18367,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4560:29:53","typeDescriptions":{"typeIdentifier":"t_stringliteral_e521136fd60ae7909bbd484f4511b149016910c16de89b916d13c21ed8d27952","typeString":"literal_string \"setRewardRecipient(address)\""},"value":"setRewardRecipient(address)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_e521136fd60ae7909bbd484f4511b149016910c16de89b916d13c21ed8d27952","typeString":"literal_string \"setRewardRecipient(address)\""}],"id":18366,"name":"_checkAccessAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5034,"src":"4540:19:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) view"}},"id":18368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4540:50:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18369,"nodeType":"ExpressionStatement","src":"4540:50:53"},{"expression":{"arguments":[{"id":18371,"name":"newRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18363,"src":"4621:12:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18370,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16359,"src":"4600:20:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":18372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4600:34:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18373,"nodeType":"ExpressionStatement","src":"4600:34:53"},{"eventCall":{"arguments":[{"id":18375,"name":"rewardRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18259,"src":"4673:15:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18376,"name":"newRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18363,"src":"4690:12:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18374,"name":"RewardRecipientUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18280,"src":"4650:22:53","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":18377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4650:53:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18378,"nodeType":"EmitStatement","src":"4645:58:53"},{"expression":{"id":18381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18379,"name":"rewardRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18259,"src":"4713:15:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18380,"name":"newRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18363,"src":"4731:12:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4713:30:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18382,"nodeType":"ExpressionStatement","src":"4713:30:53"}]},"documentation":{"id":18361,"nodeType":"StructuredDocumentation","src":"4116:350:53","text":"@notice Sets a new reward recipient address\n @param newRecipient The address of the new reward recipient\n @custom:access Controlled by ACM\n @custom:error ZeroAddressNotAllowed is thrown when the new recipient address is zero\n @custom:event RewardRecipientUpdated is emitted when the reward recipient address is updated"},"functionSelector":"e521136f","id":18384,"implemented":true,"kind":"function","modifiers":[],"name":"setRewardRecipient","nameLocation":"4480:18:53","nodeType":"FunctionDefinition","parameters":{"id":18364,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18363,"mutability":"mutable","name":"newRecipient","nameLocation":"4507:12:53","nodeType":"VariableDeclaration","scope":18384,"src":"4499:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18362,"name":"address","nodeType":"ElementaryTypeName","src":"4499:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4498:22:53"},"returnParameters":{"id":18365,"nodeType":"ParameterList","parameters":[],"src":"4530:0:53"},"scope":18575,"src":"4471:279:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18398,"nodeType":"Block","src":"5051:104:53","statements":[{"expression":{"arguments":[{"hexValue":"7365744d61784c6f6f70734c696d69742875696e7432353629","id":18391,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5081:27:53","typeDescriptions":{"typeIdentifier":"t_stringliteral_80d45a2de849ace9c5a366489970546423576c27326767c434019efa63aabc4c","typeString":"literal_string \"setMaxLoopsLimit(uint256)\""},"value":"setMaxLoopsLimit(uint256)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_80d45a2de849ace9c5a366489970546423576c27326767c434019efa63aabc4c","typeString":"literal_string \"setMaxLoopsLimit(uint256)\""}],"id":18390,"name":"_checkAccessAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5034,"src":"5061:19:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) view"}},"id":18392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5061:48:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18393,"nodeType":"ExpressionStatement","src":"5061:48:53"},{"expression":{"arguments":[{"id":18395,"name":"loopsLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18387,"src":"5137:10:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18394,"name":"_setMaxLoopsLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10317,"src":"5119:17:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":18396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5119:29:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18397,"nodeType":"ExpressionStatement","src":"5119:29:53"}]},"documentation":{"id":18385,"nodeType":"StructuredDocumentation","src":"4756:235:53","text":" @notice Set the limit for the loops can iterate to avoid the DOS\n @param loopsLimit Number of loops limit\n @custom:event Emits MaxLoopsLimitUpdated event on success\n @custom:access Controlled by ACM"},"functionSelector":"80d45a2d","id":18399,"implemented":true,"kind":"function","modifiers":[],"name":"setMaxLoopsLimit","nameLocation":"5005:16:53","nodeType":"FunctionDefinition","parameters":{"id":18388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18387,"mutability":"mutable","name":"loopsLimit","nameLocation":"5030:10:53","nodeType":"VariableDeclaration","scope":18399,"src":"5022:18:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18386,"name":"uint256","nodeType":"ElementaryTypeName","src":"5022:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5021:20:53"},"returnParameters":{"id":18389,"nodeType":"ParameterList","parameters":[],"src":"5051:0:53"},"scope":18575,"src":"4996:159:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18517,"nodeType":"Block","src":"5883:999:53","statements":[{"expression":{"arguments":[{"id":18409,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18402,"src":"5914:6:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18408,"name":"ensureNonzeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16359,"src":"5893:20:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":18410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5893:28:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18411,"nodeType":"ExpressionStatement","src":"5893:28:53"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"id":18414,"name":"createdVaults","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18264,"src":"5944:13:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_ERC4626Upgradeable_$2003_$","typeString":"mapping(address => contract ERC4626Upgradeable)"}},"id":18416,"indexExpression":{"id":18415,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18402,"src":"5958:6:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5944:21:53","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626Upgradeable_$2003","typeString":"contract ERC4626Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626Upgradeable_$2003","typeString":"contract ERC4626Upgradeable"}],"id":18413,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5936:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18412,"name":"address","nodeType":"ElementaryTypeName","src":"5936:7:53","typeDescriptions":{}}},"id":18417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5936:30:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":18420,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5978:1:53","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":18419,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5970:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18418,"name":"address","nodeType":"ElementaryTypeName","src":"5970:7:53","typeDescriptions":{}}},"id":18421,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5970:10:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5936:44:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18427,"nodeType":"IfStatement","src":"5932:125:53","trueBody":{"id":18426,"nodeType":"Block","src":"5982:75:53","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18423,"name":"VenusERC4626Factory__ERC4626AlreadyExists","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18286,"src":"6003:41:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6003:43:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18425,"nodeType":"RevertStatement","src":"5996:50:53"}]}},{"assignments":[18430],"declarations":[{"constant":false,"id":18430,"mutability":"mutable","name":"vToken_","nameLocation":"6083:7:53","nodeType":"VariableDeclaration","scope":18517,"src":"6067:23:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"},"typeName":{"id":18429,"nodeType":"UserDefinedTypeName","pathNode":{"id":18428,"name":"VTokenInterface","nameLocations":["6067:15:53"],"nodeType":"IdentifierPath","referencedDeclaration":16106,"src":"6067:15:53"},"referencedDeclaration":16106,"src":"6067:15:53","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}},"visibility":"internal"}],"id":18434,"initialValue":{"arguments":[{"id":18432,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18402,"src":"6109:6:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18431,"name":"VTokenInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16106,"src":"6093:15:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VTokenInterface_$16106_$","typeString":"type(contract VTokenInterface)"}},"id":18433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6093:23:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}},"nodeType":"VariableDeclarationStatement","src":"6067:49:53"},{"assignments":[18436],"declarations":[{"constant":false,"id":18436,"mutability":"mutable","name":"comptroller","nameLocation":"6135:11:53","nodeType":"VariableDeclaration","scope":18517,"src":"6127:19:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18435,"name":"address","nodeType":"ElementaryTypeName","src":"6127:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":18443,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18439,"name":"vToken_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18430,"src":"6157:7:53","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}},"id":18440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6165:11:53","memberName":"comptroller","nodeType":"MemberAccess","referencedDeclaration":15545,"src":"6157:19:53","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_ComptrollerInterface_$9353_$","typeString":"function () view external returns (contract ComptrollerInterface)"}},"id":18441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6157:21:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ComptrollerInterface_$9353","typeString":"contract ComptrollerInterface"}],"id":18438,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6149:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18437,"name":"address","nodeType":"ElementaryTypeName","src":"6149:7:53","typeDescriptions":{}}},"id":18442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6149:30:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6127:52:53"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18444,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18402,"src":"6194:6:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":18447,"name":"comptroller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18436,"src":"6235:11:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18448,"name":"vToken_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18430,"src":"6248:7:53","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}},"id":18449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6256:10:53","memberName":"underlying","nodeType":"MemberAccess","referencedDeclaration":15529,"src":"6248:18:53","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":18450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6248:20:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":18445,"name":"poolRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18256,"src":"6204:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_PoolRegistryInterface_$10404","typeString":"contract PoolRegistryInterface"}},"id":18446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6217:17:53","memberName":"getVTokenForAsset","nodeType":"MemberAccess","referencedDeclaration":10385,"src":"6204:30:53","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_address_$","typeString":"function (address,address) view external returns (address)"}},"id":18451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6204:65:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6194:75:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18457,"nodeType":"IfStatement","src":"6190:149:53","trueBody":{"id":18456,"nodeType":"Block","src":"6271:68:53","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18453,"name":"VenusERC4626Factory__InvalidVToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18283,"src":"6292:34:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6292:36:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18455,"nodeType":"RevertStatement","src":"6285:43:53"}]}},{"assignments":[18460],"declarations":[{"constant":false,"id":18460,"mutability":"mutable","name":"venusERC4626","nameLocation":"6362:12:53","nodeType":"VariableDeclaration","scope":18517,"src":"6349:25:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"},"typeName":{"id":18459,"nodeType":"UserDefinedTypeName","pathNode":{"id":18458,"name":"VenusERC4626","nameLocations":["6349:12:53"],"nodeType":"IdentifierPath","referencedDeclaration":18217,"src":"6349:12:53"},"referencedDeclaration":18217,"src":"6349:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}},"visibility":"internal"}],"id":18483,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":18471,"name":"beacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18252,"src":"6487:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_UpgradeableBeacon_$4411","typeString":"contract UpgradeableBeacon"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_UpgradeableBeacon_$4411","typeString":"contract UpgradeableBeacon"}],"id":18470,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6479:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18469,"name":"address","nodeType":"ElementaryTypeName","src":"6479:7:53","typeDescriptions":{}}},"id":18472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6479:15:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":18475,"name":"VenusERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18217,"src":"6539:12:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VenusERC4626_$18217_$","typeString":"type(contract VenusERC4626)"}},"id":18476,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6552:10:53","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":17005,"src":"6539:23:53","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function VenusERC4626.initialize(address)"}},"id":18477,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6563:8:53","memberName":"selector","nodeType":"MemberAccess","src":"6539:32:53","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":18478,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18402,"src":"6573:6:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":18473,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6516:3:53","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18474,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6520:18:53","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"6516:22:53","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":18479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6516:64:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":18466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"6428:15:53","typeDescriptions":{"typeIdentifier":"t_function_creation_payable$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_BeaconProxy_$4326_$","typeString":"function (address,bytes memory) payable returns (contract BeaconProxy)"},"typeName":{"id":18465,"nodeType":"UserDefinedTypeName","pathNode":{"id":18464,"name":"BeaconProxy","nameLocations":["6432:11:53"],"nodeType":"IdentifierPath","referencedDeclaration":4326,"src":"6432:11:53"},"referencedDeclaration":4326,"src":"6432:11:53","typeDescriptions":{"typeIdentifier":"t_contract$_BeaconProxy_$4326","typeString":"contract BeaconProxy"}}},"id":18468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["salt"],"nodeType":"FunctionCallOptions","options":[{"id":18467,"name":"SALT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18248,"src":"6451:4:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"src":"6428:29:53","typeDescriptions":{"typeIdentifier":"t_function_creation_payable$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_BeaconProxy_$4326_$salt","typeString":"function (address,bytes memory) payable returns (contract BeaconProxy)"}},"id":18480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6428:170:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_BeaconProxy_$4326","typeString":"contract BeaconProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BeaconProxy_$4326","typeString":"contract BeaconProxy"}],"id":18463,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6403:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18462,"name":"address","nodeType":"ElementaryTypeName","src":"6403:7:53","typeDescriptions":{}}},"id":18481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6403:209:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18461,"name":"VenusERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18217,"src":"6377:12:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VenusERC4626_$18217_$","typeString":"type(contract VenusERC4626)"}},"id":18482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6377:245:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}},"nodeType":"VariableDeclarationStatement","src":"6349:273:53"},{"expression":{"arguments":[{"arguments":[{"id":18489,"name":"_accessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4895,"src":"6666:21:53","typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$5080","typeString":"contract IAccessControlManagerV8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$5080","typeString":"contract IAccessControlManagerV8"}],"id":18488,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6658:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18487,"name":"address","nodeType":"ElementaryTypeName","src":"6658:7:53","typeDescriptions":{}}},"id":18490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6658:30:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18491,"name":"rewardRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18259,"src":"6690:15:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18492,"name":"maxLoopsLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10271,"src":"6707:13:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"id":18493,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":162,"src":"6722:5:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":18494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6722:7:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":18484,"name":"venusERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18460,"src":"6633:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}},"id":18486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6646:11:53","memberName":"initialize2","nodeType":"MemberAccess","referencedDeclaration":17264,"src":"6633:24:53","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,address,uint256,address) external"}},"id":18495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6633:97:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18496,"nodeType":"ExpressionStatement","src":"6633:97:53"},{"expression":{"id":18504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18497,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18406,"src":"6741:5:53","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626Upgradeable_$2003","typeString":"contract ERC4626Upgradeable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":18501,"name":"venusERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18460,"src":"6776:12:53","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VenusERC4626_$18217","typeString":"contract VenusERC4626"}],"id":18500,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6768:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18499,"name":"address","nodeType":"ElementaryTypeName","src":"6768:7:53","typeDescriptions":{}}},"id":18502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6768:21:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18498,"name":"ERC4626Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2003,"src":"6749:18:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC4626Upgradeable_$2003_$","typeString":"type(contract ERC4626Upgradeable)"}},"id":18503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6749:41:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626Upgradeable_$2003","typeString":"contract ERC4626Upgradeable"}},"src":"6741:49:53","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626Upgradeable_$2003","typeString":"contract ERC4626Upgradeable"}},"id":18505,"nodeType":"ExpressionStatement","src":"6741:49:53"},{"expression":{"id":18510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":18506,"name":"createdVaults","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18264,"src":"6801:13:53","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_ERC4626Upgradeable_$2003_$","typeString":"mapping(address => contract ERC4626Upgradeable)"}},"id":18508,"indexExpression":{"id":18507,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18402,"src":"6815:6:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6801:21:53","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626Upgradeable_$2003","typeString":"contract ERC4626Upgradeable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18509,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18406,"src":"6825:5:53","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626Upgradeable_$2003","typeString":"contract ERC4626Upgradeable"}},"src":"6801:29:53","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626Upgradeable_$2003","typeString":"contract ERC4626Upgradeable"}},"id":18511,"nodeType":"ExpressionStatement","src":"6801:29:53"},{"eventCall":{"arguments":[{"id":18513,"name":"vToken_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18430,"src":"6860:7:53","typeDescriptions":{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"}},{"id":18514,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18406,"src":"6869:5:53","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626Upgradeable_$2003","typeString":"contract ERC4626Upgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VTokenInterface_$16106","typeString":"contract VTokenInterface"},{"typeIdentifier":"t_contract$_ERC4626Upgradeable_$2003","typeString":"contract ERC4626Upgradeable"}],"id":18512,"name":"CreateERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18273,"src":"6846:13:53","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_VTokenInterface_$16106_$_t_contract$_ERC4626Upgradeable_$2003_$returns$__$","typeString":"function (contract VTokenInterface,contract ERC4626Upgradeable)"}},"id":18515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6846:29:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18516,"nodeType":"EmitStatement","src":"6841:34:53"}]},"documentation":{"id":18400,"nodeType":"StructuredDocumentation","src":"5161:634:53","text":"@notice Creates a VenusERC4626 vault for a given asset and comptroller\n @param vToken The vToken address to create the vault\n @return vault The deployed VenusERC4626 vault\n @custom:error ZeroAddressNotAllowed is thrown when the vToken address is zero\n @custom:error VenusERC4626Factory__InvalidVToken is thrown when the provided vToken is not supported by the poolRegistry\n @custom:error VenusERC4626Factory__ERC4626AlreadyExists is thrown when this factory already created a VenusERC4626 for the provided vToken\n @custom:event CreateERC4626 is emitted when the ERC4626 wrapper is created"},"functionSelector":"abeccaa4","id":18518,"implemented":true,"kind":"function","modifiers":[],"name":"createERC4626","nameLocation":"5809:13:53","nodeType":"FunctionDefinition","parameters":{"id":18403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18402,"mutability":"mutable","name":"vToken","nameLocation":"5831:6:53","nodeType":"VariableDeclaration","scope":18518,"src":"5823:14:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18401,"name":"address","nodeType":"ElementaryTypeName","src":"5823:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5822:16:53"},"returnParameters":{"id":18407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18406,"mutability":"mutable","name":"vault","nameLocation":"5876:5:53","nodeType":"VariableDeclaration","scope":18518,"src":"5857:24:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626Upgradeable_$2003","typeString":"contract ERC4626Upgradeable"},"typeName":{"id":18405,"nodeType":"UserDefinedTypeName","pathNode":{"id":18404,"name":"ERC4626Upgradeable","nameLocations":["5857:18:53"],"nodeType":"IdentifierPath","referencedDeclaration":2003,"src":"5857:18:53"},"referencedDeclaration":2003,"src":"5857:18:53","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626Upgradeable_$2003","typeString":"contract ERC4626Upgradeable"}},"visibility":"internal"}],"src":"5856:26:53"},"scope":18575,"src":"5800:1082:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18573,"nodeType":"Block","src":"7112:925:53","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"hexValue":"30786666","id":18537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7324:4:53","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"}],"id":18536,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7317:6:53","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":18535,"name":"bytes1","nodeType":"ElementaryTypeName","src":"7317:6:53","typeDescriptions":{}}},"id":18538,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7317:12:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},{"arguments":[{"id":18541,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7371:4:53","typeDescriptions":{"typeIdentifier":"t_contract$_VenusERC4626Factory_$18575","typeString":"contract VenusERC4626Factory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VenusERC4626Factory_$18575","typeString":"contract VenusERC4626Factory"}],"id":18540,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7363:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18539,"name":"address","nodeType":"ElementaryTypeName","src":"7363:7:53","typeDescriptions":{}}},"id":18542,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7363:13:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18543,"name":"SALT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18248,"src":"7410:4:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"arguments":[{"expression":{"arguments":[{"id":18548,"name":"BeaconProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4326,"src":"7558:11:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BeaconProxy_$4326_$","typeString":"type(contract BeaconProxy)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_BeaconProxy_$4326_$","typeString":"type(contract BeaconProxy)"}],"id":18547,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7553:4:53","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":18549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7553:17:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_BeaconProxy_$4326","typeString":"type(contract BeaconProxy)"}},"id":18550,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7571:12:53","memberName":"creationCode","nodeType":"MemberAccess","src":"7553:30:53","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"arguments":[{"id":18555,"name":"beacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18252,"src":"7689:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_UpgradeableBeacon_$4411","typeString":"contract UpgradeableBeacon"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_UpgradeableBeacon_$4411","typeString":"contract UpgradeableBeacon"}],"id":18554,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7681:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18553,"name":"address","nodeType":"ElementaryTypeName","src":"7681:7:53","typeDescriptions":{}}},"id":18556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7681:15:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":18559,"name":"VenusERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18217,"src":"7765:12:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VenusERC4626_$18217_$","typeString":"type(contract VenusERC4626)"}},"id":18560,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7778:10:53","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":17005,"src":"7765:23:53","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function VenusERC4626.initialize(address)"}},"id":18561,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7789:8:53","memberName":"selector","nodeType":"MemberAccess","src":"7765:32:53","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":18562,"name":"vToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18521,"src":"7799:6:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":18557,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7742:3:53","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18558,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7746:18:53","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"7742:22:53","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":18563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7742:64:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18551,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7625:3:53","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18552,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7629:6:53","memberName":"encode","nodeType":"MemberAccess","src":"7625:10:53","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":18564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7625:223:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18545,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7495:3:53","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18546,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7499:12:53","memberName":"encodePacked","nodeType":"MemberAccess","src":"7495:16:53","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":18565,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7495:391:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":18544,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"7448:9:53","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":18566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7448:472:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":18533,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7267:3:53","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18534,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7271:12:53","memberName":"encodePacked","nodeType":"MemberAccess","src":"7267:16:53","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":18567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7267:683:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":18532,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"7228:9:53","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":18568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7228:748:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":18531,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7195:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":18530,"name":"uint256","nodeType":"ElementaryTypeName","src":"7195:7:53","typeDescriptions":{}}},"id":18569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7195:803:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18529,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7166:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":18528,"name":"uint160","nodeType":"ElementaryTypeName","src":"7166:7:53","typeDescriptions":{}}},"id":18570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7166:850:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":18527,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7141:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18526,"name":"address","nodeType":"ElementaryTypeName","src":"7141:7:53","typeDescriptions":{}}},"id":18571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7141:889:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":18525,"id":18572,"nodeType":"Return","src":"7122:908:53"}]},"documentation":{"id":18519,"nodeType":"StructuredDocumentation","src":"6888:144:53","text":"@notice Predicts the vault address for a given vToken\n @param vToken The vToken address\n @return The precomputed vault address"},"functionSelector":"a9e50471","id":18574,"implemented":true,"kind":"function","modifiers":[],"name":"computeVaultAddress","nameLocation":"7046:19:53","nodeType":"FunctionDefinition","parameters":{"id":18522,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18521,"mutability":"mutable","name":"vToken","nameLocation":"7074:6:53","nodeType":"VariableDeclaration","scope":18574,"src":"7066:14:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18520,"name":"address","nodeType":"ElementaryTypeName","src":"7066:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7065:16:53"},"returnParameters":{"id":18525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18524,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18574,"src":"7103:7:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18523,"name":"address","nodeType":"ElementaryTypeName","src":"7103:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7102:9:53"},"scope":18575,"src":"7037:1000:53","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":18576,"src":"1034:7005:53","usedErrors":[4916,10290,16338,18283,18286],"usedEvents":[17,124,422,4907,10283,18273,18280]}],"src":"41:7999:53"},"id":53},"contracts/hardhat-dependency-compiler/hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol","exportedSymbols":{"Address":[19951],"Context":[19973],"ERC1967Proxy":[18967],"ERC1967Upgrade":[19285],"IBeacon":[19347],"IERC1822Proxiable":[18914],"Ownable":[18904],"Proxy":[19337],"ProxyAdmin":[19492],"StorageSlot":[20033],"TransparentUpgradeableProxy":[19656]},"id":18579,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":18577,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:54"},{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol","file":"hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol","id":18578,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18579,"sourceUnit":19493,"src":"63:79:54","symbolAliases":[],"unitAlias":""}],"src":"39:104:54"},"id":54},"contracts/hardhat-dependency-compiler/hardhat-deploy/solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/hardhat-deploy/solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol","exportedSymbols":{"Address":[19951],"ERC1967Proxy":[18967],"ERC1967Upgrade":[19285],"IBeacon":[19347],"IERC1822Proxiable":[18914],"OptimizedTransparentUpgradeableProxy":[20208],"Proxy":[19337],"StorageSlot":[20033]},"id":18582,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":18580,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:55"},{"absolutePath":"hardhat-deploy/solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol","file":"hardhat-deploy/solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol","id":18581,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18582,"sourceUnit":20209,"src":"63:80:55","symbolAliases":[],"unitAlias":""}],"src":"39:105:55"},"id":55},"contracts/test/Mocks/MockVenusERC4626.sol":{"ast":{"absolutePath":"contracts/test/Mocks/MockVenusERC4626.sol","exportedSymbols":{"ERC20Upgradeable":[1274],"IERC20Upgradeable":[1352],"MockVenusERC4626":[18798],"VenusERC4626":[18217]},"id":18799,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":18583,"literals":["solidity","0.8",".25"],"nodeType":"PragmaDirective","src":"41:23:56"},{"absolutePath":"contracts/ERC4626/VenusERC4626.sol","file":"../../ERC4626/VenusERC4626.sol","id":18585,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18799,"sourceUnit":18218,"src":"66:62:56","symbolAliases":[{"foreign":{"id":18584,"name":"VenusERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18217,"src":"75:12:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","id":18587,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18799,"sourceUnit":1353,"src":"129:106:56","symbolAliases":[{"foreign":{"id":18586,"name":"IERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"138:17:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol","id":18589,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18799,"sourceUnit":1275,"src":"236:104:56","symbolAliases":[{"foreign":{"id":18588,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1274,"src":"245:16:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":18590,"name":"VenusERC4626","nameLocations":["371:12:56"],"nodeType":"IdentifierPath","referencedDeclaration":18217,"src":"371:12:56"},"id":18591,"nodeType":"InheritanceSpecifier","src":"371:12:56"}],"canonicalName":"MockVenusERC4626","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":18798,"linearizedBaseContracts":[18798,18217,661,10335,5035,106,239,2003,407,1274,2028,1352,2821,576],"name":"MockVenusERC4626","nameLocation":"351:16:56","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":18595,"mutability":"mutable","name":"_balances","nameLocation":"426:9:56","nodeType":"VariableDeclaration","scope":18798,"src":"390:45:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":18594,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":18592,"name":"address","nodeType":"ElementaryTypeName","src":"398:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"390:27:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":18593,"name":"uint256","nodeType":"ElementaryTypeName","src":"409:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"id":18597,"mutability":"mutable","name":"mockTotalAssets","nameLocation":"457:15:56","nodeType":"VariableDeclaration","scope":18798,"src":"441:31:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18596,"name":"uint256","nodeType":"ElementaryTypeName","src":"441:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":18599,"mutability":"mutable","name":"mockMaxDeposit","nameLocation":"494:14:56","nodeType":"VariableDeclaration","scope":18798,"src":"478:30:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18598,"name":"uint256","nodeType":"ElementaryTypeName","src":"478:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":18601,"mutability":"mutable","name":"mockMaxWithdraw","nameLocation":"530:15:56","nodeType":"VariableDeclaration","scope":18798,"src":"514:31:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18600,"name":"uint256","nodeType":"ElementaryTypeName","src":"514:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":18603,"mutability":"mutable","name":"mockMaxMint","nameLocation":"567:11:56","nodeType":"VariableDeclaration","scope":18798,"src":"551:27:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18602,"name":"uint256","nodeType":"ElementaryTypeName","src":"551:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":18605,"mutability":"mutable","name":"mockMaxRedeem","nameLocation":"600:13:56","nodeType":"VariableDeclaration","scope":18798,"src":"584:29:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18604,"name":"uint256","nodeType":"ElementaryTypeName","src":"584:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":18607,"mutability":"mutable","name":"mockTotalSupply","nameLocation":"635:15:56","nodeType":"VariableDeclaration","scope":18798,"src":"619:31:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18606,"name":"uint256","nodeType":"ElementaryTypeName","src":"619:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"body":{"id":18616,"nodeType":"Block","src":"746:47:56","statements":[{"expression":{"id":18614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18612,"name":"mockTotalAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18597,"src":"756:15:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18613,"name":"_totalAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18609,"src":"774:12:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"756:30:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18615,"nodeType":"ExpressionStatement","src":"756:30:56"}]},"functionSelector":"1765b313","id":18617,"implemented":true,"kind":"function","modifiers":[],"name":"setTotalAssets","nameLocation":"700:14:56","nodeType":"FunctionDefinition","parameters":{"id":18610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18609,"mutability":"mutable","name":"_totalAssets","nameLocation":"723:12:56","nodeType":"VariableDeclaration","scope":18617,"src":"715:20:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18608,"name":"uint256","nodeType":"ElementaryTypeName","src":"715:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"714:22:56"},"returnParameters":{"id":18611,"nodeType":"ParameterList","parameters":[],"src":"746:0:56"},"scope":18798,"src":"691:102:56","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18626,"nodeType":"Block","src":"854:47:56","statements":[{"expression":{"id":18624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18622,"name":"mockMaxWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18601,"src":"864:15:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18623,"name":"_maxWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18619,"src":"882:12:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"864:30:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18625,"nodeType":"ExpressionStatement","src":"864:30:56"}]},"functionSelector":"dcd9bb42","id":18627,"implemented":true,"kind":"function","modifiers":[],"name":"setMaxWithdraw","nameLocation":"808:14:56","nodeType":"FunctionDefinition","parameters":{"id":18620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18619,"mutability":"mutable","name":"_maxWithdraw","nameLocation":"831:12:56","nodeType":"VariableDeclaration","scope":18627,"src":"823:20:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18618,"name":"uint256","nodeType":"ElementaryTypeName","src":"823:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"822:22:56"},"returnParameters":{"id":18621,"nodeType":"ParameterList","parameters":[],"src":"854:0:56"},"scope":18798,"src":"799:102:56","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18636,"nodeType":"Block","src":"960:45:56","statements":[{"expression":{"id":18634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18632,"name":"mockMaxDeposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18599,"src":"970:14:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18633,"name":"_maxDeposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18629,"src":"987:11:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"970:28:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18635,"nodeType":"ExpressionStatement","src":"970:28:56"}]},"functionSelector":"bb371fdd","id":18637,"implemented":true,"kind":"function","modifiers":[],"name":"setMaxDeposit","nameLocation":"916:13:56","nodeType":"FunctionDefinition","parameters":{"id":18630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18629,"mutability":"mutable","name":"_maxDeposit","nameLocation":"938:11:56","nodeType":"VariableDeclaration","scope":18637,"src":"930:19:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18628,"name":"uint256","nodeType":"ElementaryTypeName","src":"930:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"929:21:56"},"returnParameters":{"id":18631,"nodeType":"ParameterList","parameters":[],"src":"960:0:56"},"scope":18798,"src":"907:98:56","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18646,"nodeType":"Block","src":"1062:43:56","statements":[{"expression":{"id":18644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18642,"name":"mockMaxRedeem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18605,"src":"1072:13:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18643,"name":"_maxRedeem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18639,"src":"1088:10:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1072:26:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18645,"nodeType":"ExpressionStatement","src":"1072:26:56"}]},"functionSelector":"20f4af43","id":18647,"implemented":true,"kind":"function","modifiers":[],"name":"setMaxRedeem","nameLocation":"1020:12:56","nodeType":"FunctionDefinition","parameters":{"id":18640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18639,"mutability":"mutable","name":"_maxRedeem","nameLocation":"1041:10:56","nodeType":"VariableDeclaration","scope":18647,"src":"1033:18:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18638,"name":"uint256","nodeType":"ElementaryTypeName","src":"1033:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1032:20:56"},"returnParameters":{"id":18641,"nodeType":"ParameterList","parameters":[],"src":"1062:0:56"},"scope":18798,"src":"1011:94:56","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18656,"nodeType":"Block","src":"1158:39:56","statements":[{"expression":{"id":18654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18652,"name":"mockMaxMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18603,"src":"1168:11:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18653,"name":"_maxMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18649,"src":"1182:8:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1168:22:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18655,"nodeType":"ExpressionStatement","src":"1168:22:56"}]},"functionSelector":"547520fe","id":18657,"implemented":true,"kind":"function","modifiers":[],"name":"setMaxMint","nameLocation":"1120:10:56","nodeType":"FunctionDefinition","parameters":{"id":18650,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18649,"mutability":"mutable","name":"_maxMint","nameLocation":"1139:8:56","nodeType":"VariableDeclaration","scope":18657,"src":"1131:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18648,"name":"uint256","nodeType":"ElementaryTypeName","src":"1131:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1130:18:56"},"returnParameters":{"id":18651,"nodeType":"ParameterList","parameters":[],"src":"1158:0:56"},"scope":18798,"src":"1111:86:56","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18666,"nodeType":"Block","src":"1258:47:56","statements":[{"expression":{"id":18664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18662,"name":"mockTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18607,"src":"1268:15:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18663,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18659,"src":"1286:12:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1268:30:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18665,"nodeType":"ExpressionStatement","src":"1268:30:56"}]},"functionSelector":"f7ea7a3d","id":18667,"implemented":true,"kind":"function","modifiers":[],"name":"setTotalSupply","nameLocation":"1212:14:56","nodeType":"FunctionDefinition","parameters":{"id":18660,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18659,"mutability":"mutable","name":"_totalSupply","nameLocation":"1235:12:56","nodeType":"VariableDeclaration","scope":18667,"src":"1227:20:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18658,"name":"uint256","nodeType":"ElementaryTypeName","src":"1227:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1226:22:56"},"returnParameters":{"id":18661,"nodeType":"ParameterList","parameters":[],"src":"1258:0:56"},"scope":18798,"src":"1203:102:56","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18680,"nodeType":"Block","src":"1379:45:56","statements":[{"expression":{"id":18678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":18674,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18595,"src":"1389:9:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":18676,"indexExpression":{"id":18675,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18669,"src":"1399:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1389:18:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18677,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18671,"src":"1410:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1389:28:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18679,"nodeType":"ExpressionStatement","src":"1389:28:56"}]},"functionSelector":"46ddb7db","id":18681,"implemented":true,"kind":"function","modifiers":[],"name":"setAccountBalance","nameLocation":"1320:17:56","nodeType":"FunctionDefinition","parameters":{"id":18672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18669,"mutability":"mutable","name":"account","nameLocation":"1346:7:56","nodeType":"VariableDeclaration","scope":18681,"src":"1338:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18668,"name":"address","nodeType":"ElementaryTypeName","src":"1338:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18671,"mutability":"mutable","name":"balance","nameLocation":"1363:7:56","nodeType":"VariableDeclaration","scope":18681,"src":"1355:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18670,"name":"uint256","nodeType":"ElementaryTypeName","src":"1355:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1337:34:56"},"returnParameters":{"id":18673,"nodeType":"ParameterList","parameters":[],"src":"1379:0:56"},"scope":18798,"src":"1311:113:56","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[17574],"body":{"id":18689,"nodeType":"Block","src":"1547:39:56","statements":[{"expression":{"id":18687,"name":"mockTotalAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18597,"src":"1564:15:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18686,"id":18688,"nodeType":"Return","src":"1557:22:56"}]},"functionSelector":"01e1d114","id":18690,"implemented":true,"kind":"function","modifiers":[],"name":"totalAssets","nameLocation":"1494:11:56","nodeType":"FunctionDefinition","overrides":{"id":18683,"nodeType":"OverrideSpecifier","overrides":[],"src":"1520:8:56"},"parameters":{"id":18682,"nodeType":"ParameterList","parameters":[],"src":"1505:2:56"},"returnParameters":{"id":18686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18685,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18690,"src":"1538:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18684,"name":"uint256","nodeType":"ElementaryTypeName","src":"1538:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1537:9:56"},"scope":18798,"src":"1485:101:56","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[17629],"body":{"id":18700,"nodeType":"Block","src":"1714:38:56","statements":[{"expression":{"id":18698,"name":"mockMaxDeposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18599,"src":"1731:14:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18697,"id":18699,"nodeType":"Return","src":"1724:21:56"}]},"functionSelector":"402d267d","id":18701,"implemented":true,"kind":"function","modifiers":[],"name":"maxDeposit","nameLocation":"1655:10:56","nodeType":"FunctionDefinition","overrides":{"id":18694,"nodeType":"OverrideSpecifier","overrides":[],"src":"1687:8:56"},"parameters":{"id":18693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18692,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18701,"src":"1666:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18691,"name":"address","nodeType":"ElementaryTypeName","src":"1666:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1665:9:56"},"returnParameters":{"id":18697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18696,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18701,"src":"1705:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18695,"name":"uint256","nodeType":"ElementaryTypeName","src":"1705:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1704:9:56"},"scope":18798,"src":"1646:106:56","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[17712],"body":{"id":18711,"nodeType":"Block","src":"1882:39:56","statements":[{"expression":{"id":18709,"name":"mockMaxWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18601,"src":"1899:15:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18708,"id":18710,"nodeType":"Return","src":"1892:22:56"}]},"functionSelector":"ce96cb77","id":18712,"implemented":true,"kind":"function","modifiers":[],"name":"maxWithdraw","nameLocation":"1822:11:56","nodeType":"FunctionDefinition","overrides":{"id":18705,"nodeType":"OverrideSpecifier","overrides":[],"src":"1855:8:56"},"parameters":{"id":18704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18703,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18712,"src":"1834:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18702,"name":"address","nodeType":"ElementaryTypeName","src":"1834:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1833:9:56"},"returnParameters":{"id":18708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18707,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18712,"src":"1873:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18706,"name":"uint256","nodeType":"ElementaryTypeName","src":"1873:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1872:9:56"},"scope":18798,"src":"1813:108:56","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[17648],"body":{"id":18722,"nodeType":"Block","src":"1992:35:56","statements":[{"expression":{"id":18720,"name":"mockMaxMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18603,"src":"2009:11:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18719,"id":18721,"nodeType":"Return","src":"2002:18:56"}]},"functionSelector":"c63d75b6","id":18723,"implemented":true,"kind":"function","modifiers":[],"name":"maxMint","nameLocation":"1936:7:56","nodeType":"FunctionDefinition","overrides":{"id":18716,"nodeType":"OverrideSpecifier","overrides":[],"src":"1965:8:56"},"parameters":{"id":18715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18714,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18723,"src":"1944:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18713,"name":"address","nodeType":"ElementaryTypeName","src":"1944:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1943:9:56"},"returnParameters":{"id":18719,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18718,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18723,"src":"1983:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18717,"name":"uint256","nodeType":"ElementaryTypeName","src":"1983:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1982:9:56"},"scope":18798,"src":"1927:100:56","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[17780],"body":{"id":18733,"nodeType":"Block","src":"2100:37:56","statements":[{"expression":{"id":18731,"name":"mockMaxRedeem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18605,"src":"2117:13:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18730,"id":18732,"nodeType":"Return","src":"2110:20:56"}]},"functionSelector":"d905777e","id":18734,"implemented":true,"kind":"function","modifiers":[],"name":"maxRedeem","nameLocation":"2042:9:56","nodeType":"FunctionDefinition","overrides":{"id":18727,"nodeType":"OverrideSpecifier","overrides":[],"src":"2073:8:56"},"parameters":{"id":18726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18725,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18734,"src":"2052:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18724,"name":"address","nodeType":"ElementaryTypeName","src":"2052:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2051:9:56"},"returnParameters":{"id":18730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18729,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18734,"src":"2091:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18728,"name":"uint256","nodeType":"ElementaryTypeName","src":"2091:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2090:9:56"},"scope":18798,"src":"2033:104:56","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[767,1301],"body":{"id":18744,"nodeType":"Block","src":"2242:39:56","statements":[{"expression":{"id":18742,"name":"mockTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18607,"src":"2259:15:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18741,"id":18743,"nodeType":"Return","src":"2252:22:56"}]},"functionSelector":"18160ddd","id":18745,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"2152:11:56","nodeType":"FunctionDefinition","overrides":{"id":18738,"nodeType":"OverrideSpecifier","overrides":[{"id":18736,"name":"ERC20Upgradeable","nameLocations":["2187:16:56"],"nodeType":"IdentifierPath","referencedDeclaration":1274,"src":"2187:16:56"},{"id":18737,"name":"IERC20Upgradeable","nameLocations":["2205:17:56"],"nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"2205:17:56"}],"src":"2178:45:56"},"parameters":{"id":18735,"nodeType":"ParameterList","parameters":[],"src":"2163:2:56"},"returnParameters":{"id":18741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18740,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18745,"src":"2233:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18739,"name":"uint256","nodeType":"ElementaryTypeName","src":"2233:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2232:9:56"},"scope":18798,"src":"2143:138:56","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1086],"body":{"id":18770,"nodeType":"Block","src":"2353:118:56","statements":[{"expression":{"id":18755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18753,"name":"mockTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18607,"src":"2363:15:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":18754,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18749,"src":"2382:6:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2363:25:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18756,"nodeType":"ExpressionStatement","src":"2363:25:56"},{"expression":{"id":18761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":18757,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18595,"src":"2398:9:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":18759,"indexExpression":{"id":18758,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18747,"src":"2408:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2398:18:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":18760,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18749,"src":"2420:6:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2398:28:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18762,"nodeType":"ExpressionStatement","src":"2398:28:56"},{"expression":{"arguments":[{"id":18766,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18747,"src":"2448:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18767,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18749,"src":"2457:6:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18763,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2436:5:56","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_MockVenusERC4626_$18798_$","typeString":"type(contract super MockVenusERC4626)"}},"id":18765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2442:5:56","memberName":"_mint","nodeType":"MemberAccess","referencedDeclaration":1086,"src":"2436:11:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":18768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2436:28:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18769,"nodeType":"ExpressionStatement","src":"2436:28:56"}]},"id":18771,"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"2296:5:56","nodeType":"FunctionDefinition","overrides":{"id":18751,"nodeType":"OverrideSpecifier","overrides":[],"src":"2344:8:56"},"parameters":{"id":18750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18747,"mutability":"mutable","name":"account","nameLocation":"2310:7:56","nodeType":"VariableDeclaration","scope":18771,"src":"2302:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18746,"name":"address","nodeType":"ElementaryTypeName","src":"2302:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18749,"mutability":"mutable","name":"amount","nameLocation":"2327:6:56","nodeType":"VariableDeclaration","scope":18771,"src":"2319:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18748,"name":"uint256","nodeType":"ElementaryTypeName","src":"2319:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2301:33:56"},"returnParameters":{"id":18752,"nodeType":"ParameterList","parameters":[],"src":"2353:0:56"},"scope":18798,"src":"2287:184:56","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1158],"body":{"id":18796,"nodeType":"Block","src":"2543:118:56","statements":[{"expression":{"id":18781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18779,"name":"mockTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18607,"src":"2553:15:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":18780,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18775,"src":"2572:6:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2553:25:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18782,"nodeType":"ExpressionStatement","src":"2553:25:56"},{"expression":{"id":18787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":18783,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18595,"src":"2588:9:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":18785,"indexExpression":{"id":18784,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18773,"src":"2598:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2588:18:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":18786,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18775,"src":"2610:6:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2588:28:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18788,"nodeType":"ExpressionStatement","src":"2588:28:56"},{"expression":{"arguments":[{"id":18792,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18773,"src":"2638:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18793,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18775,"src":"2647:6:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18789,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2626:5:56","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_MockVenusERC4626_$18798_$","typeString":"type(contract super MockVenusERC4626)"}},"id":18791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2632:5:56","memberName":"_burn","nodeType":"MemberAccess","referencedDeclaration":1158,"src":"2626:11:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":18794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2626:28:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18795,"nodeType":"ExpressionStatement","src":"2626:28:56"}]},"id":18797,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"2486:5:56","nodeType":"FunctionDefinition","overrides":{"id":18777,"nodeType":"OverrideSpecifier","overrides":[],"src":"2534:8:56"},"parameters":{"id":18776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18773,"mutability":"mutable","name":"account","nameLocation":"2500:7:56","nodeType":"VariableDeclaration","scope":18797,"src":"2492:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18772,"name":"address","nodeType":"ElementaryTypeName","src":"2492:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18775,"mutability":"mutable","name":"amount","nameLocation":"2517:6:56","nodeType":"VariableDeclaration","scope":18797,"src":"2509:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18774,"name":"uint256","nodeType":"ElementaryTypeName","src":"2509:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2491:33:56"},"returnParameters":{"id":18778,"nodeType":"ParameterList","parameters":[],"src":"2543:0:56"},"scope":18798,"src":"2477:184:56","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":18799,"src":"342:2321:56","usedErrors":[4916,10290,16338,16925,16928,16931,16934,16937,16942],"usedEvents":[17,124,258,270,422,1286,1295,4907,10283,16904,16911,16920]}],"src":"41:2623:56"},"id":56},"hardhat-deploy/solc_0.8/openzeppelin/access/Ownable.sol":{"ast":{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/access/Ownable.sol","exportedSymbols":{"Context":[19973],"Ownable":[18904]},"id":18905,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":18800,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"87:23:57"},{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/utils/Context.sol","file":"../utils/Context.sol","id":18801,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18905,"sourceUnit":19974,"src":"112:30:57","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":18803,"name":"Context","nameLocations":["668:7:57"],"nodeType":"IdentifierPath","referencedDeclaration":19973,"src":"668:7:57"},"id":18804,"nodeType":"InheritanceSpecifier","src":"668:7:57"}],"canonicalName":"Ownable","contractDependencies":[],"contractKind":"contract","documentation":{"id":18802,"nodeType":"StructuredDocumentation","src":"144:494:57","text":" @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n By default, the owner account will be the one that deploys the contract. This\n can later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."},"fullyImplemented":true,"id":18904,"linearizedBaseContracts":[18904,19973],"name":"Ownable","nameLocation":"657:7:57","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":18806,"mutability":"mutable","name":"_owner","nameLocation":"698:6:57","nodeType":"VariableDeclaration","scope":18904,"src":"682:22:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18805,"name":"address","nodeType":"ElementaryTypeName","src":"682:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":18812,"name":"OwnershipTransferred","nameLocation":"717:20:57","nodeType":"EventDefinition","parameters":{"id":18811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18808,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"754:13:57","nodeType":"VariableDeclaration","scope":18812,"src":"738:29:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18807,"name":"address","nodeType":"ElementaryTypeName","src":"738:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18810,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"785:8:57","nodeType":"VariableDeclaration","scope":18812,"src":"769:24:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18809,"name":"address","nodeType":"ElementaryTypeName","src":"769:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"737:57:57"},"src":"711:84:57"},{"body":{"id":18822,"nodeType":"Block","src":"932:49:57","statements":[{"expression":{"arguments":[{"id":18819,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18815,"src":"961:12:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18818,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18903,"src":"942:18:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":18820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"942:32:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18821,"nodeType":"ExpressionStatement","src":"942:32:57"}]},"documentation":{"id":18813,"nodeType":"StructuredDocumentation","src":"801:91:57","text":" @dev Initializes the contract setting the deployer as the initial owner."},"id":18823,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":18816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18815,"mutability":"mutable","name":"initialOwner","nameLocation":"918:12:57","nodeType":"VariableDeclaration","scope":18823,"src":"910:20:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18814,"name":"address","nodeType":"ElementaryTypeName","src":"910:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"909:22:57"},"returnParameters":{"id":18817,"nodeType":"ParameterList","parameters":[],"src":"932:0:57"},"scope":18904,"src":"897:84:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":18831,"nodeType":"Block","src":"1112:30:57","statements":[{"expression":{"id":18829,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18806,"src":"1129:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":18828,"id":18830,"nodeType":"Return","src":"1122:13:57"}]},"documentation":{"id":18824,"nodeType":"StructuredDocumentation","src":"987:65:57","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":18832,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"1066:5:57","nodeType":"FunctionDefinition","parameters":{"id":18825,"nodeType":"ParameterList","parameters":[],"src":"1071:2:57"},"returnParameters":{"id":18828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18827,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18832,"src":"1103:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18826,"name":"address","nodeType":"ElementaryTypeName","src":"1103:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1102:9:57"},"scope":18904,"src":"1057:85:57","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":18845,"nodeType":"Block","src":"1251:96:57","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":18836,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18832,"src":"1269:5:57","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":18837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1269:7:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":18838,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19963,"src":"1280:10:57","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":18839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1280:12:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1269:23:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","id":18841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1294:34:57","typeDescriptions":{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""},"value":"Ownable: caller is not the owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""}],"id":18835,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1261:7:57","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":18842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1261:68:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18843,"nodeType":"ExpressionStatement","src":"1261:68:57"},{"id":18844,"nodeType":"PlaceholderStatement","src":"1339:1:57"}]},"documentation":{"id":18833,"nodeType":"StructuredDocumentation","src":"1148:77:57","text":" @dev Throws if called by any account other than the owner."},"id":18846,"name":"onlyOwner","nameLocation":"1239:9:57","nodeType":"ModifierDefinition","parameters":{"id":18834,"nodeType":"ParameterList","parameters":[],"src":"1248:2:57"},"src":"1230:117:57","virtual":false,"visibility":"internal"},{"body":{"id":18859,"nodeType":"Block","src":"1743:47:57","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":18855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1780:1:57","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":18854,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1772:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18853,"name":"address","nodeType":"ElementaryTypeName","src":"1772:7:57","typeDescriptions":{}}},"id":18856,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1772:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18852,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18903,"src":"1753:18:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":18857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1753:30:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18858,"nodeType":"ExpressionStatement","src":"1753:30:57"}]},"documentation":{"id":18847,"nodeType":"StructuredDocumentation","src":"1353:331:57","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions anymore. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby removing any functionality that is only available to the owner."},"functionSelector":"715018a6","id":18860,"implemented":true,"kind":"function","modifiers":[{"id":18850,"kind":"modifierInvocation","modifierName":{"id":18849,"name":"onlyOwner","nameLocations":["1733:9:57"],"nodeType":"IdentifierPath","referencedDeclaration":18846,"src":"1733:9:57"},"nodeType":"ModifierInvocation","src":"1733:9:57"}],"name":"renounceOwnership","nameLocation":"1698:17:57","nodeType":"FunctionDefinition","parameters":{"id":18848,"nodeType":"ParameterList","parameters":[],"src":"1715:2:57"},"returnParameters":{"id":18851,"nodeType":"ParameterList","parameters":[],"src":"1743:0:57"},"scope":18904,"src":"1689:101:57","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":18882,"nodeType":"Block","src":"2009:128:57","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18869,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18863,"src":"2027:8:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":18872,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2047:1:57","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":18871,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2039:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18870,"name":"address","nodeType":"ElementaryTypeName","src":"2039:7:57","typeDescriptions":{}}},"id":18873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2039:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2027:22:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373","id":18875,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2051:40:57","typeDescriptions":{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""},"value":"Ownable: new owner is the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""}],"id":18868,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2019:7:57","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":18876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2019:73:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18877,"nodeType":"ExpressionStatement","src":"2019:73:57"},{"expression":{"arguments":[{"id":18879,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18863,"src":"2121:8:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18878,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18903,"src":"2102:18:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":18880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2102:28:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18881,"nodeType":"ExpressionStatement","src":"2102:28:57"}]},"documentation":{"id":18861,"nodeType":"StructuredDocumentation","src":"1796:138:57","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":18883,"implemented":true,"kind":"function","modifiers":[{"id":18866,"kind":"modifierInvocation","modifierName":{"id":18865,"name":"onlyOwner","nameLocations":["1999:9:57"],"nodeType":"IdentifierPath","referencedDeclaration":18846,"src":"1999:9:57"},"nodeType":"ModifierInvocation","src":"1999:9:57"}],"name":"transferOwnership","nameLocation":"1948:17:57","nodeType":"FunctionDefinition","parameters":{"id":18864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18863,"mutability":"mutable","name":"newOwner","nameLocation":"1974:8:57","nodeType":"VariableDeclaration","scope":18883,"src":"1966:16:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18862,"name":"address","nodeType":"ElementaryTypeName","src":"1966:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1965:18:57"},"returnParameters":{"id":18867,"nodeType":"ParameterList","parameters":[],"src":"2009:0:57"},"scope":18904,"src":"1939:198:57","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":18902,"nodeType":"Block","src":"2354:124:57","statements":[{"assignments":[18890],"declarations":[{"constant":false,"id":18890,"mutability":"mutable","name":"oldOwner","nameLocation":"2372:8:57","nodeType":"VariableDeclaration","scope":18902,"src":"2364:16:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18889,"name":"address","nodeType":"ElementaryTypeName","src":"2364:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":18892,"initialValue":{"id":18891,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18806,"src":"2383:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2364:25:57"},{"expression":{"id":18895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18893,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18806,"src":"2399:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18894,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18886,"src":"2408:8:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2399:17:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18896,"nodeType":"ExpressionStatement","src":"2399:17:57"},{"eventCall":{"arguments":[{"id":18898,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18890,"src":"2452:8:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18899,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18886,"src":"2462:8:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18897,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18812,"src":"2431:20:57","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":18900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2431:40:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18901,"nodeType":"EmitStatement","src":"2426:45:57"}]},"documentation":{"id":18884,"nodeType":"StructuredDocumentation","src":"2143:143:57","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction."},"id":18903,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"2300:18:57","nodeType":"FunctionDefinition","parameters":{"id":18887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18886,"mutability":"mutable","name":"newOwner","nameLocation":"2327:8:57","nodeType":"VariableDeclaration","scope":18903,"src":"2319:16:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18885,"name":"address","nodeType":"ElementaryTypeName","src":"2319:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2318:18:57"},"returnParameters":{"id":18888,"nodeType":"ParameterList","parameters":[],"src":"2354:0:57"},"scope":18904,"src":"2291:187:57","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":18905,"src":"639:1841:57","usedErrors":[],"usedEvents":[18812]}],"src":"87:2394:57"},"id":57},"hardhat-deploy/solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol":{"ast":{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol","exportedSymbols":{"IERC1822Proxiable":[18914]},"id":18915,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":18906,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"118:23:58"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1822Proxiable","contractDependencies":[],"contractKind":"interface","documentation":{"id":18907,"nodeType":"StructuredDocumentation","src":"143:203:58","text":" @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n proxy whose upgrades are fully controlled by the current implementation."},"fullyImplemented":false,"id":18914,"linearizedBaseContracts":[18914],"name":"IERC1822Proxiable","nameLocation":"357:17:58","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":18908,"nodeType":"StructuredDocumentation","src":"381:438:58","text":" @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n address.\n IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n function revert if invoked through a proxy."},"functionSelector":"52d1902d","id":18913,"implemented":false,"kind":"function","modifiers":[],"name":"proxiableUUID","nameLocation":"833:13:58","nodeType":"FunctionDefinition","parameters":{"id":18909,"nodeType":"ParameterList","parameters":[],"src":"846:2:58"},"returnParameters":{"id":18912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18911,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18913,"src":"872:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18910,"name":"bytes32","nodeType":"ElementaryTypeName","src":"872:7:58","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"871:9:58"},"scope":18914,"src":"824:57:58","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":18915,"src":"347:536:58","usedErrors":[],"usedEvents":[]}],"src":"118:766:58"},"id":58},"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol":{"ast":{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol","exportedSymbols":{"Address":[19951],"ERC1967Proxy":[18967],"ERC1967Upgrade":[19285],"IBeacon":[19347],"IERC1822Proxiable":[18914],"Proxy":[19337],"StorageSlot":[20033]},"id":18968,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":18916,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"99:23:59"},{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/proxy/Proxy.sol","file":"../Proxy.sol","id":18917,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18968,"sourceUnit":19338,"src":"124:22:59","symbolAliases":[],"unitAlias":""},{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol","file":"./ERC1967Upgrade.sol","id":18918,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18968,"sourceUnit":19286,"src":"147:30:59","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":18920,"name":"Proxy","nameLocations":["577:5:59"],"nodeType":"IdentifierPath","referencedDeclaration":19337,"src":"577:5:59"},"id":18921,"nodeType":"InheritanceSpecifier","src":"577:5:59"},{"baseName":{"id":18922,"name":"ERC1967Upgrade","nameLocations":["584:14:59"],"nodeType":"IdentifierPath","referencedDeclaration":19285,"src":"584:14:59"},"id":18923,"nodeType":"InheritanceSpecifier","src":"584:14:59"}],"canonicalName":"ERC1967Proxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":18919,"nodeType":"StructuredDocumentation","src":"179:372:59","text":" @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n implementation address that can be changed. This address is stored in storage in the location specified by\n https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n implementation behind the proxy."},"fullyImplemented":true,"id":18967,"linearizedBaseContracts":[18967,19285,19337],"name":"ERC1967Proxy","nameLocation":"561:12:59","nodeType":"ContractDefinition","nodes":[{"body":{"id":18953,"nodeType":"Block","src":"1001:161:59","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":18944,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":18932,"name":"_IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18981,"src":"1018:20:59","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18942,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"hexValue":"656970313936372e70726f78792e696d706c656d656e746174696f6e","id":18938,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1068:30:59","typeDescriptions":{"typeIdentifier":"t_stringliteral_360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd","typeString":"literal_string \"eip1967.proxy.implementation\""},"value":"eip1967.proxy.implementation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd","typeString":"literal_string \"eip1967.proxy.implementation\""}],"id":18937,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1058:9:59","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":18939,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1058:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":18936,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1050:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":18935,"name":"uint256","nodeType":"ElementaryTypeName","src":"1050:7:59","typeDescriptions":{}}},"id":18940,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1050:50:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":18941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1103:1:59","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1050:54:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18934,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1042:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":18933,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1042:7:59","typeDescriptions":{}}},"id":18943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1042:63:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1018:87:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":18931,"name":"assert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-3,"src":"1011:6:59","typeDescriptions":{"typeIdentifier":"t_function_assert_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":18945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1011:95:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18946,"nodeType":"ExpressionStatement","src":"1011:95:59"},{"expression":{"arguments":[{"id":18948,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18926,"src":"1134:6:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18949,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18928,"src":"1142:5:59","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"66616c7365","id":18950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1149:5:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":18947,"name":"_upgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19068,"src":"1116:17:59","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":18951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1116:39:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18952,"nodeType":"ExpressionStatement","src":"1116:39:59"}]},"documentation":{"id":18924,"nodeType":"StructuredDocumentation","src":"605:335:59","text":" @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n function call, and allows initializating the storage of the proxy like a Solidity constructor."},"id":18954,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":18929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18926,"mutability":"mutable","name":"_logic","nameLocation":"965:6:59","nodeType":"VariableDeclaration","scope":18954,"src":"957:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18925,"name":"address","nodeType":"ElementaryTypeName","src":"957:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18928,"mutability":"mutable","name":"_data","nameLocation":"986:5:59","nodeType":"VariableDeclaration","scope":18954,"src":"973:18:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18927,"name":"bytes","nodeType":"ElementaryTypeName","src":"973:5:59","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"956:36:59"},"returnParameters":{"id":18930,"nodeType":"ParameterList","parameters":[],"src":"1001:0:59"},"scope":18967,"src":"945:217:59","stateMutability":"payable","virtual":false,"visibility":"public"},{"baseFunctions":[19302],"body":{"id":18965,"nodeType":"Block","src":"1321:59:59","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18961,"name":"ERC1967Upgrade","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19285,"src":"1338:14:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Upgrade_$19285_$","typeString":"type(contract ERC1967Upgrade)"}},"id":18962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1353:18:59","memberName":"_getImplementation","nodeType":"MemberAccess","referencedDeclaration":18999,"src":"1338:33:59","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":18963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1338:35:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":18960,"id":18964,"nodeType":"Return","src":"1331:42:59"}]},"documentation":{"id":18955,"nodeType":"StructuredDocumentation","src":"1168:67:59","text":" @dev Returns the current implementation address."},"id":18966,"implemented":true,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"1249:15:59","nodeType":"FunctionDefinition","overrides":{"id":18957,"nodeType":"OverrideSpecifier","overrides":[],"src":"1289:8:59"},"parameters":{"id":18956,"nodeType":"ParameterList","parameters":[],"src":"1264:2:59"},"returnParameters":{"id":18960,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18959,"mutability":"mutable","name":"impl","nameLocation":"1315:4:59","nodeType":"VariableDeclaration","scope":18966,"src":"1307:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18958,"name":"address","nodeType":"ElementaryTypeName","src":"1307:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1306:14:59"},"scope":18967,"src":"1240:140:59","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":18968,"src":"552:830:59","usedErrors":[],"usedEvents":[18986,19132,19197]}],"src":"99:1284:59"},"id":59},"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol":{"ast":{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol","exportedSymbols":{"Address":[19951],"ERC1967Upgrade":[19285],"IBeacon":[19347],"IERC1822Proxiable":[18914],"StorageSlot":[20033]},"id":19286,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":18969,"literals":["solidity","^","0.8",".2"],"nodeType":"PragmaDirective","src":"121:23:60"},{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol","file":"../beacon/IBeacon.sol","id":18970,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19286,"sourceUnit":19348,"src":"146:31:60","symbolAliases":[],"unitAlias":""},{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol","file":"../../interfaces/draft-IERC1822.sol","id":18971,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19286,"sourceUnit":18915,"src":"178:45:60","symbolAliases":[],"unitAlias":""},{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/utils/Address.sol","file":"../../utils/Address.sol","id":18972,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19286,"sourceUnit":19952,"src":"224:33:60","symbolAliases":[],"unitAlias":""},{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/utils/StorageSlot.sol","file":"../../utils/StorageSlot.sol","id":18973,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19286,"sourceUnit":20034,"src":"258:37:60","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"ERC1967Upgrade","contractDependencies":[],"contractKind":"contract","documentation":{"id":18974,"nodeType":"StructuredDocumentation","src":"297:236:60","text":" @dev This abstract contract provides getters and event emitting update functions for\n https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n _Available since v4.1._\n @custom:oz-upgrades-unsafe-allow delegatecall"},"fullyImplemented":true,"id":19285,"linearizedBaseContracts":[19285],"name":"ERC1967Upgrade","nameLocation":"552:14:60","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":18977,"mutability":"constant","name":"_ROLLBACK_SLOT","nameLocation":"677:14:60","nodeType":"VariableDeclaration","scope":19285,"src":"652:108:60","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18975,"name":"bytes32","nodeType":"ElementaryTypeName","src":"652:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307834393130666466613136666564333236306564306537313437663763633664613131613630323038623562393430366431326136333536313466666439313433","id":18976,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"694:66:60","typeDescriptions":{"typeIdentifier":"t_rational_33048860383849004559742813297059419343339852917517107368639918720169455489347_by_1","typeString":"int_const 3304...(69 digits omitted)...9347"},"value":"0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143"},"visibility":"private"},{"constant":true,"documentation":{"id":18978,"nodeType":"StructuredDocumentation","src":"767:214:60","text":" @dev Storage slot with the address of the current implementation.\n This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n validated in the constructor."},"id":18981,"mutability":"constant","name":"_IMPLEMENTATION_SLOT","nameLocation":"1012:20:60","nodeType":"VariableDeclaration","scope":19285,"src":"986:115:60","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18979,"name":"bytes32","nodeType":"ElementaryTypeName","src":"986:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307833363038393461313362613161333231303636376338323834393264623938646361336532303736636333373335613932306133636135303564333832626263","id":18980,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1035:66:60","typeDescriptions":{"typeIdentifier":"t_rational_24440054405305269366569402256811496959409073762505157381672968839269610695612_by_1","typeString":"int_const 2444...(69 digits omitted)...5612"},"value":"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"},"visibility":"internal"},{"anonymous":false,"documentation":{"id":18982,"nodeType":"StructuredDocumentation","src":"1108:68:60","text":" @dev Emitted when the implementation is upgraded."},"eventSelector":"bc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","id":18986,"name":"Upgraded","nameLocation":"1187:8:60","nodeType":"EventDefinition","parameters":{"id":18985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18984,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"1212:14:60","nodeType":"VariableDeclaration","scope":18986,"src":"1196:30:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18983,"name":"address","nodeType":"ElementaryTypeName","src":"1196:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1195:32:60"},"src":"1181:47:60"},{"body":{"id":18998,"nodeType":"Block","src":"1368:78:60","statements":[{"expression":{"expression":{"arguments":[{"id":18994,"name":"_IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18981,"src":"1412:20:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":18992,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20033,"src":"1385:11:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$20033_$","typeString":"type(library StorageSlot)"}},"id":18993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1397:14:60","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":19999,"src":"1385:26:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$19979_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":18995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1385:48:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$19979_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":18996,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1434:5:60","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":19978,"src":"1385:54:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":18991,"id":18997,"nodeType":"Return","src":"1378:61:60"}]},"documentation":{"id":18987,"nodeType":"StructuredDocumentation","src":"1234:67:60","text":" @dev Returns the current implementation address."},"id":18999,"implemented":true,"kind":"function","modifiers":[],"name":"_getImplementation","nameLocation":"1315:18:60","nodeType":"FunctionDefinition","parameters":{"id":18988,"nodeType":"ParameterList","parameters":[],"src":"1333:2:60"},"returnParameters":{"id":18991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18990,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18999,"src":"1359:7:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18989,"name":"address","nodeType":"ElementaryTypeName","src":"1359:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1358:9:60"},"scope":19285,"src":"1306:140:60","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":19022,"nodeType":"Block","src":"1600:196:60","statements":[{"expression":{"arguments":[{"arguments":[{"id":19008,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19002,"src":"1637:17:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19006,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19951,"src":"1618:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$19951_$","typeString":"type(library Address)"}},"id":19007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1626:10:60","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":19674,"src":"1618:18:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":19009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1618:37:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313936373a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374","id":19010,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1657:47:60","typeDescriptions":{"typeIdentifier":"t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65","typeString":"literal_string \"ERC1967: new implementation is not a contract\""},"value":"ERC1967: new implementation is not a contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65","typeString":"literal_string \"ERC1967: new implementation is not a contract\""}],"id":19005,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1610:7:60","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1610:95:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19012,"nodeType":"ExpressionStatement","src":"1610:95:60"},{"expression":{"id":19020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":19016,"name":"_IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18981,"src":"1742:20:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":19013,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20033,"src":"1715:11:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$20033_$","typeString":"type(library StorageSlot)"}},"id":19015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1727:14:60","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":19999,"src":"1715:26:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$19979_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":19017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1715:48:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$19979_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":19018,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1764:5:60","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":19978,"src":"1715:54:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19019,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19002,"src":"1772:17:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1715:74:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19021,"nodeType":"ExpressionStatement","src":"1715:74:60"}]},"documentation":{"id":19000,"nodeType":"StructuredDocumentation","src":"1452:80:60","text":" @dev Stores a new address in the EIP1967 implementation slot."},"id":19023,"implemented":true,"kind":"function","modifiers":[],"name":"_setImplementation","nameLocation":"1546:18:60","nodeType":"FunctionDefinition","parameters":{"id":19003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19002,"mutability":"mutable","name":"newImplementation","nameLocation":"1573:17:60","nodeType":"VariableDeclaration","scope":19023,"src":"1565:25:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19001,"name":"address","nodeType":"ElementaryTypeName","src":"1565:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1564:27:60"},"returnParameters":{"id":19004,"nodeType":"ParameterList","parameters":[],"src":"1600:0:60"},"scope":19285,"src":"1537:259:60","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":19037,"nodeType":"Block","src":"1958:96:60","statements":[{"expression":{"arguments":[{"id":19030,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19026,"src":"1987:17:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19029,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19023,"src":"1968:18:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":19031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1968:37:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19032,"nodeType":"ExpressionStatement","src":"1968:37:60"},{"eventCall":{"arguments":[{"id":19034,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19026,"src":"2029:17:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19033,"name":"Upgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18986,"src":"2020:8:60","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":19035,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2020:27:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19036,"nodeType":"EmitStatement","src":"2015:32:60"}]},"documentation":{"id":19024,"nodeType":"StructuredDocumentation","src":"1802:95:60","text":" @dev Perform implementation upgrade\n Emits an {Upgraded} event."},"id":19038,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeTo","nameLocation":"1911:10:60","nodeType":"FunctionDefinition","parameters":{"id":19027,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19026,"mutability":"mutable","name":"newImplementation","nameLocation":"1930:17:60","nodeType":"VariableDeclaration","scope":19038,"src":"1922:25:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19025,"name":"address","nodeType":"ElementaryTypeName","src":"1922:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1921:27:60"},"returnParameters":{"id":19028,"nodeType":"ParameterList","parameters":[],"src":"1958:0:60"},"scope":19285,"src":"1902:152:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19067,"nodeType":"Block","src":"2316:167:60","statements":[{"expression":{"arguments":[{"id":19049,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19041,"src":"2337:17:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19048,"name":"_upgradeTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19038,"src":"2326:10:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":19050,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2326:29:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19051,"nodeType":"ExpressionStatement","src":"2326:29:60"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19052,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19043,"src":"2369:4:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":19053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2374:6:60","memberName":"length","nodeType":"MemberAccess","src":"2369:11:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":19054,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2383:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2369:15:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"id":19056,"name":"forceCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19045,"src":"2388:9:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2369:28:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19066,"nodeType":"IfStatement","src":"2365:112:60","trueBody":{"id":19065,"nodeType":"Block","src":"2399:78:60","statements":[{"expression":{"arguments":[{"id":19061,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19041,"src":"2442:17:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19062,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19043,"src":"2461:4:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":19058,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19951,"src":"2413:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$19951_$","typeString":"type(library Address)"}},"id":19060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2421:20:60","memberName":"functionDelegateCall","nodeType":"MemberAccess","referencedDeclaration":19884,"src":"2413:28:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":19063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2413:53:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":19064,"nodeType":"ExpressionStatement","src":"2413:53:60"}]}}]},"documentation":{"id":19039,"nodeType":"StructuredDocumentation","src":"2060:123:60","text":" @dev Perform implementation upgrade with additional setup call.\n Emits an {Upgraded} event."},"id":19068,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeToAndCall","nameLocation":"2197:17:60","nodeType":"FunctionDefinition","parameters":{"id":19046,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19041,"mutability":"mutable","name":"newImplementation","nameLocation":"2232:17:60","nodeType":"VariableDeclaration","scope":19068,"src":"2224:25:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19040,"name":"address","nodeType":"ElementaryTypeName","src":"2224:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19043,"mutability":"mutable","name":"data","nameLocation":"2272:4:60","nodeType":"VariableDeclaration","scope":19068,"src":"2259:17:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19042,"name":"bytes","nodeType":"ElementaryTypeName","src":"2259:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":19045,"mutability":"mutable","name":"forceCall","nameLocation":"2291:9:60","nodeType":"VariableDeclaration","scope":19068,"src":"2286:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19044,"name":"bool","nodeType":"ElementaryTypeName","src":"2286:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2214:92:60"},"returnParameters":{"id":19047,"nodeType":"ParameterList","parameters":[],"src":"2316:0:60"},"scope":19285,"src":"2188:295:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19120,"nodeType":"Block","src":"2787:820:60","statements":[{"condition":{"expression":{"arguments":[{"id":19080,"name":"_ROLLBACK_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18977,"src":"3128:14:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":19078,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20033,"src":"3101:11:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$20033_$","typeString":"type(library StorageSlot)"}},"id":19079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3113:14:60","memberName":"getBooleanSlot","nodeType":"MemberAccess","referencedDeclaration":20010,"src":"3101:26:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_BooleanSlot_$19982_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.BooleanSlot storage pointer)"}},"id":19081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3101:42:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$19982_storage_ptr","typeString":"struct StorageSlot.BooleanSlot storage pointer"}},"id":19082,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3144:5:60","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":19981,"src":"3101:48:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":19118,"nodeType":"Block","src":"3219:382:60","statements":[{"clauses":[{"block":{"id":19103,"nodeType":"Block","src":"3313:115:60","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":19099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19097,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19094,"src":"3339:4:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":19098,"name":"_IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18981,"src":"3347:20:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3339:28:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524331393637557067726164653a20756e737570706f727465642070726f786961626c6555554944","id":19100,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3369:43:60","typeDescriptions":{"typeIdentifier":"t_stringliteral_76b6b6debfc5febf101145a79ecf0b0d2e89e397dfdab2bca99888370411152c","typeString":"literal_string \"ERC1967Upgrade: unsupported proxiableUUID\""},"value":"ERC1967Upgrade: unsupported proxiableUUID"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_76b6b6debfc5febf101145a79ecf0b0d2e89e397dfdab2bca99888370411152c","typeString":"literal_string \"ERC1967Upgrade: unsupported proxiableUUID\""}],"id":19096,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3331:7:60","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3331:82:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19102,"nodeType":"ExpressionStatement","src":"3331:82:60"}]},"errorName":"","id":19104,"nodeType":"TryCatchClause","parameters":{"id":19095,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19094,"mutability":"mutable","name":"slot","nameLocation":"3307:4:60","nodeType":"VariableDeclaration","scope":19104,"src":"3299:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19093,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3299:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3298:14:60"},"src":"3290:138:60"},{"block":{"id":19109,"nodeType":"Block","src":"3435:89:60","statements":[{"expression":{"arguments":[{"hexValue":"45524331393637557067726164653a206e657720696d706c656d656e746174696f6e206973206e6f742055555053","id":19106,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3460:48:60","typeDescriptions":{"typeIdentifier":"t_stringliteral_8e8e2fbcb586f700b5b14e2c4a650c8d83b9773c31c5fe8962070ea544e11f24","typeString":"literal_string \"ERC1967Upgrade: new implementation is not UUPS\""},"value":"ERC1967Upgrade: new implementation is not UUPS"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_8e8e2fbcb586f700b5b14e2c4a650c8d83b9773c31c5fe8962070ea544e11f24","typeString":"literal_string \"ERC1967Upgrade: new implementation is not UUPS\""}],"id":19105,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"3453:6:60","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":19107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3453:56:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19108,"nodeType":"ExpressionStatement","src":"3453:56:60"}]},"errorName":"","id":19110,"nodeType":"TryCatchClause","src":"3429:95:60"}],"externalCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":19089,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19071,"src":"3255:17:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19088,"name":"IERC1822Proxiable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18914,"src":"3237:17:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC1822Proxiable_$18914_$","typeString":"type(contract IERC1822Proxiable)"}},"id":19090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3237:36:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC1822Proxiable_$18914","typeString":"contract IERC1822Proxiable"}},"id":19091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3274:13:60","memberName":"proxiableUUID","nodeType":"MemberAccess","referencedDeclaration":18913,"src":"3237:50:60","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":19092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3237:52:60","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19111,"nodeType":"TryStatement","src":"3233:291:60"},{"expression":{"arguments":[{"id":19113,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19071,"src":"3555:17:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19114,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19073,"src":"3574:4:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":19115,"name":"forceCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19075,"src":"3580:9:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":19112,"name":"_upgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19068,"src":"3537:17:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":19116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3537:53:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19117,"nodeType":"ExpressionStatement","src":"3537:53:60"}]},"id":19119,"nodeType":"IfStatement","src":"3097:504:60","trueBody":{"id":19087,"nodeType":"Block","src":"3151:62:60","statements":[{"expression":{"arguments":[{"id":19084,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19071,"src":"3184:17:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19083,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19023,"src":"3165:18:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":19085,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3165:37:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19086,"nodeType":"ExpressionStatement","src":"3165:37:60"}]}}]},"documentation":{"id":19069,"nodeType":"StructuredDocumentation","src":"2489:161:60","text":" @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n Emits an {Upgraded} event."},"id":19121,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeToAndCallUUPS","nameLocation":"2664:21:60","nodeType":"FunctionDefinition","parameters":{"id":19076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19071,"mutability":"mutable","name":"newImplementation","nameLocation":"2703:17:60","nodeType":"VariableDeclaration","scope":19121,"src":"2695:25:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19070,"name":"address","nodeType":"ElementaryTypeName","src":"2695:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19073,"mutability":"mutable","name":"data","nameLocation":"2743:4:60","nodeType":"VariableDeclaration","scope":19121,"src":"2730:17:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19072,"name":"bytes","nodeType":"ElementaryTypeName","src":"2730:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":19075,"mutability":"mutable","name":"forceCall","nameLocation":"2762:9:60","nodeType":"VariableDeclaration","scope":19121,"src":"2757:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19074,"name":"bool","nodeType":"ElementaryTypeName","src":"2757:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2685:92:60"},"returnParameters":{"id":19077,"nodeType":"ParameterList","parameters":[],"src":"2787:0:60"},"scope":19285,"src":"2655:952:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"constant":true,"documentation":{"id":19122,"nodeType":"StructuredDocumentation","src":"3613:189:60","text":" @dev Storage slot with the admin of the contract.\n This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n validated in the constructor."},"id":19125,"mutability":"constant","name":"_ADMIN_SLOT","nameLocation":"3833:11:60","nodeType":"VariableDeclaration","scope":19285,"src":"3807:106:60","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19123,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3807:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307862353331323736383461353638623331373361653133623966386136303136653234336536336236653865653131373864366137313738353062356436313033","id":19124,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3847:66:60","typeDescriptions":{"typeIdentifier":"t_rational_81955473079516046949633743016697847541294818689821282749996681496272635257091_by_1","typeString":"int_const 8195...(69 digits omitted)...7091"},"value":"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"},"visibility":"internal"},{"anonymous":false,"documentation":{"id":19126,"nodeType":"StructuredDocumentation","src":"3920:67:60","text":" @dev Emitted when the admin account has changed."},"eventSelector":"7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f","id":19132,"name":"AdminChanged","nameLocation":"3998:12:60","nodeType":"EventDefinition","parameters":{"id":19131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19128,"indexed":false,"mutability":"mutable","name":"previousAdmin","nameLocation":"4019:13:60","nodeType":"VariableDeclaration","scope":19132,"src":"4011:21:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19127,"name":"address","nodeType":"ElementaryTypeName","src":"4011:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19130,"indexed":false,"mutability":"mutable","name":"newAdmin","nameLocation":"4042:8:60","nodeType":"VariableDeclaration","scope":19132,"src":"4034:16:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19129,"name":"address","nodeType":"ElementaryTypeName","src":"4034:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4010:41:60"},"src":"3992:60:60"},{"body":{"id":19144,"nodeType":"Block","src":"4174:69:60","statements":[{"expression":{"expression":{"arguments":[{"id":19140,"name":"_ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19125,"src":"4218:11:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":19138,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20033,"src":"4191:11:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$20033_$","typeString":"type(library StorageSlot)"}},"id":19139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4203:14:60","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":19999,"src":"4191:26:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$19979_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":19141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4191:39:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$19979_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":19142,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4231:5:60","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":19978,"src":"4191:45:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":19137,"id":19143,"nodeType":"Return","src":"4184:52:60"}]},"documentation":{"id":19133,"nodeType":"StructuredDocumentation","src":"4058:50:60","text":" @dev Returns the current admin."},"id":19145,"implemented":true,"kind":"function","modifiers":[],"name":"_getAdmin","nameLocation":"4122:9:60","nodeType":"FunctionDefinition","parameters":{"id":19134,"nodeType":"ParameterList","parameters":[],"src":"4131:2:60"},"returnParameters":{"id":19137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19136,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19145,"src":"4165:7:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19135,"name":"address","nodeType":"ElementaryTypeName","src":"4165:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4164:9:60"},"scope":19285,"src":"4113:130:60","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":19170,"nodeType":"Block","src":"4370:156:60","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19152,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19148,"src":"4388:8:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":19155,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4408:1:60","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":19154,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4400:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19153,"name":"address","nodeType":"ElementaryTypeName","src":"4400:7:60","typeDescriptions":{}}},"id":19156,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4400:10:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4388:22:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313936373a206e65772061646d696e20697320746865207a65726f2061646472657373","id":19158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4412:40:60","typeDescriptions":{"typeIdentifier":"t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5","typeString":"literal_string \"ERC1967: new admin is the zero address\""},"value":"ERC1967: new admin is the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5","typeString":"literal_string \"ERC1967: new admin is the zero address\""}],"id":19151,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4380:7:60","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4380:73:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19160,"nodeType":"ExpressionStatement","src":"4380:73:60"},{"expression":{"id":19168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":19164,"name":"_ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19125,"src":"4490:11:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":19161,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20033,"src":"4463:11:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$20033_$","typeString":"type(library StorageSlot)"}},"id":19163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4475:14:60","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":19999,"src":"4463:26:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$19979_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":19165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4463:39:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$19979_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":19166,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4503:5:60","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":19978,"src":"4463:45:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19167,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19148,"src":"4511:8:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4463:56:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19169,"nodeType":"ExpressionStatement","src":"4463:56:60"}]},"documentation":{"id":19146,"nodeType":"StructuredDocumentation","src":"4249:71:60","text":" @dev Stores a new address in the EIP1967 admin slot."},"id":19171,"implemented":true,"kind":"function","modifiers":[],"name":"_setAdmin","nameLocation":"4334:9:60","nodeType":"FunctionDefinition","parameters":{"id":19149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19148,"mutability":"mutable","name":"newAdmin","nameLocation":"4352:8:60","nodeType":"VariableDeclaration","scope":19171,"src":"4344:16:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19147,"name":"address","nodeType":"ElementaryTypeName","src":"4344:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4343:18:60"},"returnParameters":{"id":19150,"nodeType":"ParameterList","parameters":[],"src":"4370:0:60"},"scope":19285,"src":"4325:201:60","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":19187,"nodeType":"Block","src":"4686:86:60","statements":[{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":19178,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19145,"src":"4714:9:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":19179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4714:11:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19180,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19174,"src":"4727:8:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":19177,"name":"AdminChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19132,"src":"4701:12:60","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":19181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4701:35:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19182,"nodeType":"EmitStatement","src":"4696:40:60"},{"expression":{"arguments":[{"id":19184,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19174,"src":"4756:8:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19183,"name":"_setAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19171,"src":"4746:9:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":19185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4746:19:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19186,"nodeType":"ExpressionStatement","src":"4746:19:60"}]},"documentation":{"id":19172,"nodeType":"StructuredDocumentation","src":"4532:100:60","text":" @dev Changes the admin of the proxy.\n Emits an {AdminChanged} event."},"id":19188,"implemented":true,"kind":"function","modifiers":[],"name":"_changeAdmin","nameLocation":"4646:12:60","nodeType":"FunctionDefinition","parameters":{"id":19175,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19174,"mutability":"mutable","name":"newAdmin","nameLocation":"4667:8:60","nodeType":"VariableDeclaration","scope":19188,"src":"4659:16:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19173,"name":"address","nodeType":"ElementaryTypeName","src":"4659:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4658:18:60"},"returnParameters":{"id":19176,"nodeType":"ParameterList","parameters":[],"src":"4686:0:60"},"scope":19285,"src":"4637:135:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"constant":true,"documentation":{"id":19189,"nodeType":"StructuredDocumentation","src":"4778:232:60","text":" @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor."},"id":19192,"mutability":"constant","name":"_BEACON_SLOT","nameLocation":"5041:12:60","nodeType":"VariableDeclaration","scope":19285,"src":"5015:107:60","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19190,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5015:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307861336630616437346535343233616562666438306433656634333436353738333335613961373261656165653539666636636233353832623335313333643530","id":19191,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5056:66:60","typeDescriptions":{"typeIdentifier":"t_rational_74152234768234802001998023604048924213078445070507226371336425913862612794704_by_1","typeString":"int_const 7415...(69 digits omitted)...4704"},"value":"0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50"},"visibility":"internal"},{"anonymous":false,"documentation":{"id":19193,"nodeType":"StructuredDocumentation","src":"5129:60:60","text":" @dev Emitted when the beacon is upgraded."},"eventSelector":"1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e","id":19197,"name":"BeaconUpgraded","nameLocation":"5200:14:60","nodeType":"EventDefinition","parameters":{"id":19196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19195,"indexed":true,"mutability":"mutable","name":"beacon","nameLocation":"5231:6:60","nodeType":"VariableDeclaration","scope":19197,"src":"5215:22:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19194,"name":"address","nodeType":"ElementaryTypeName","src":"5215:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5214:24:60"},"src":"5194:45:60"},{"body":{"id":19209,"nodeType":"Block","src":"5355:70:60","statements":[{"expression":{"expression":{"arguments":[{"id":19205,"name":"_BEACON_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19192,"src":"5399:12:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":19203,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20033,"src":"5372:11:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$20033_$","typeString":"type(library StorageSlot)"}},"id":19204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5384:14:60","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":19999,"src":"5372:26:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$19979_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":19206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5372:40:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$19979_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":19207,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5413:5:60","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":19978,"src":"5372:46:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":19202,"id":19208,"nodeType":"Return","src":"5365:53:60"}]},"documentation":{"id":19198,"nodeType":"StructuredDocumentation","src":"5245:51:60","text":" @dev Returns the current beacon."},"id":19210,"implemented":true,"kind":"function","modifiers":[],"name":"_getBeacon","nameLocation":"5310:10:60","nodeType":"FunctionDefinition","parameters":{"id":19199,"nodeType":"ParameterList","parameters":[],"src":"5320:2:60"},"returnParameters":{"id":19202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19201,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19210,"src":"5346:7:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19200,"name":"address","nodeType":"ElementaryTypeName","src":"5346:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5345:9:60"},"scope":19285,"src":"5301:124:60","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":19245,"nodeType":"Block","src":"5554:290:60","statements":[{"expression":{"arguments":[{"arguments":[{"id":19219,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19213,"src":"5591:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19217,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19951,"src":"5572:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$19951_$","typeString":"type(library Address)"}},"id":19218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5580:10:60","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":19674,"src":"5572:18:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":19220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5572:29:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313936373a206e657720626561636f6e206973206e6f74206120636f6e7472616374","id":19221,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5603:39:60","typeDescriptions":{"typeIdentifier":"t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470","typeString":"literal_string \"ERC1967: new beacon is not a contract\""},"value":"ERC1967: new beacon is not a contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470","typeString":"literal_string \"ERC1967: new beacon is not a contract\""}],"id":19216,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5564:7:60","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5564:79:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19223,"nodeType":"ExpressionStatement","src":"5564:79:60"},{"expression":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":19228,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19213,"src":"5688:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19227,"name":"IBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19347,"src":"5680:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBeacon_$19347_$","typeString":"type(contract IBeacon)"}},"id":19229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5680:18:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBeacon_$19347","typeString":"contract IBeacon"}},"id":19230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5699:14:60","memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":19346,"src":"5680:33:60","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":19231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5680:35:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19225,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19951,"src":"5661:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$19951_$","typeString":"type(library Address)"}},"id":19226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5669:10:60","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":19674,"src":"5661:18:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":19232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5661:55:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313936373a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374","id":19233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5718:50:60","typeDescriptions":{"typeIdentifier":"t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8","typeString":"literal_string \"ERC1967: beacon implementation is not a contract\""},"value":"ERC1967: beacon implementation is not a contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8","typeString":"literal_string \"ERC1967: beacon implementation is not a contract\""}],"id":19224,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5653:7:60","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19234,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5653:116:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19235,"nodeType":"ExpressionStatement","src":"5653:116:60"},{"expression":{"id":19243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":19239,"name":"_BEACON_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19192,"src":"5806:12:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":19236,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20033,"src":"5779:11:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$20033_$","typeString":"type(library StorageSlot)"}},"id":19238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5791:14:60","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":19999,"src":"5779:26:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$19979_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":19240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5779:40:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$19979_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":19241,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5820:5:60","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":19978,"src":"5779:46:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19242,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19213,"src":"5828:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5779:58:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19244,"nodeType":"ExpressionStatement","src":"5779:58:60"}]},"documentation":{"id":19211,"nodeType":"StructuredDocumentation","src":"5431:71:60","text":" @dev Stores a new beacon in the EIP1967 beacon slot."},"id":19246,"implemented":true,"kind":"function","modifiers":[],"name":"_setBeacon","nameLocation":"5516:10:60","nodeType":"FunctionDefinition","parameters":{"id":19214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19213,"mutability":"mutable","name":"newBeacon","nameLocation":"5535:9:60","nodeType":"VariableDeclaration","scope":19246,"src":"5527:17:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19212,"name":"address","nodeType":"ElementaryTypeName","src":"5527:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5526:19:60"},"returnParameters":{"id":19215,"nodeType":"ParameterList","parameters":[],"src":"5554:0:60"},"scope":19285,"src":"5507:337:60","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":19283,"nodeType":"Block","src":"6273:217:60","statements":[{"expression":{"arguments":[{"id":19257,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19249,"src":"6294:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19256,"name":"_setBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19246,"src":"6283:10:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":19258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6283:21:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19259,"nodeType":"ExpressionStatement","src":"6283:21:60"},{"eventCall":{"arguments":[{"id":19261,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19249,"src":"6334:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19260,"name":"BeaconUpgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19197,"src":"6319:14:60","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":19262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6319:25:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19263,"nodeType":"EmitStatement","src":"6314:30:60"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19264,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19251,"src":"6358:4:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":19265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6363:6:60","memberName":"length","nodeType":"MemberAccess","src":"6358:11:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":19266,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6372:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6358:15:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"id":19268,"name":"forceCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19253,"src":"6377:9:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6358:28:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19282,"nodeType":"IfStatement","src":"6354:130:60","trueBody":{"id":19281,"nodeType":"Block","src":"6388:96:60","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":19274,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19249,"src":"6439:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19273,"name":"IBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19347,"src":"6431:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBeacon_$19347_$","typeString":"type(contract IBeacon)"}},"id":19275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6431:18:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBeacon_$19347","typeString":"contract IBeacon"}},"id":19276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6450:14:60","memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":19346,"src":"6431:33:60","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":19277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6431:35:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19278,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19251,"src":"6468:4:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":19270,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19951,"src":"6402:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$19951_$","typeString":"type(library Address)"}},"id":19272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6410:20:60","memberName":"functionDelegateCall","nodeType":"MemberAccess","referencedDeclaration":19884,"src":"6402:28:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":19279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6402:71:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":19280,"nodeType":"ExpressionStatement","src":"6402:71:60"}]}}]},"documentation":{"id":19247,"nodeType":"StructuredDocumentation","src":"5850:292:60","text":" @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n Emits a {BeaconUpgraded} event."},"id":19284,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeBeaconToAndCall","nameLocation":"6156:23:60","nodeType":"FunctionDefinition","parameters":{"id":19254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19249,"mutability":"mutable","name":"newBeacon","nameLocation":"6197:9:60","nodeType":"VariableDeclaration","scope":19284,"src":"6189:17:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19248,"name":"address","nodeType":"ElementaryTypeName","src":"6189:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19251,"mutability":"mutable","name":"data","nameLocation":"6229:4:60","nodeType":"VariableDeclaration","scope":19284,"src":"6216:17:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19250,"name":"bytes","nodeType":"ElementaryTypeName","src":"6216:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":19253,"mutability":"mutable","name":"forceCall","nameLocation":"6248:9:60","nodeType":"VariableDeclaration","scope":19284,"src":"6243:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19252,"name":"bool","nodeType":"ElementaryTypeName","src":"6243:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6179:84:60"},"returnParameters":{"id":19255,"nodeType":"ParameterList","parameters":[],"src":"6273:0:60"},"scope":19285,"src":"6147:343:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":19286,"src":"534:5958:60","usedErrors":[],"usedEvents":[18986,19132,19197]}],"src":"121:6372:60"},"id":60},"hardhat-deploy/solc_0.8/openzeppelin/proxy/Proxy.sol":{"ast":{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/proxy/Proxy.sol","exportedSymbols":{"Proxy":[19337]},"id":19338,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":19287,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"104:23:61"},{"abstract":true,"baseContracts":[],"canonicalName":"Proxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":19288,"nodeType":"StructuredDocumentation","src":"129:598:61","text":" @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n be specified by overriding the virtual {_implementation} function.\n Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n different contract through the {_delegate} function.\n The success and return data of the delegated call will be returned back to the caller of the proxy."},"fullyImplemented":false,"id":19337,"linearizedBaseContracts":[19337],"name":"Proxy","nameLocation":"746:5:61","nodeType":"ContractDefinition","nodes":[{"body":{"id":19295,"nodeType":"Block","src":"1013:835:61","statements":[{"AST":{"nativeSrc":"1032:810:61","nodeType":"YulBlock","src":"1032:810:61","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1285:1:61","nodeType":"YulLiteral","src":"1285:1:61","type":"","value":"0"},{"kind":"number","nativeSrc":"1288:1:61","nodeType":"YulLiteral","src":"1288:1:61","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nativeSrc":"1291:12:61","nodeType":"YulIdentifier","src":"1291:12:61"},"nativeSrc":"1291:14:61","nodeType":"YulFunctionCall","src":"1291:14:61"}],"functionName":{"name":"calldatacopy","nativeSrc":"1272:12:61","nodeType":"YulIdentifier","src":"1272:12:61"},"nativeSrc":"1272:34:61","nodeType":"YulFunctionCall","src":"1272:34:61"},"nativeSrc":"1272:34:61","nodeType":"YulExpressionStatement","src":"1272:34:61"},{"nativeSrc":"1433:74:61","nodeType":"YulVariableDeclaration","src":"1433:74:61","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"1460:3:61","nodeType":"YulIdentifier","src":"1460:3:61"},"nativeSrc":"1460:5:61","nodeType":"YulFunctionCall","src":"1460:5:61"},{"name":"implementation","nativeSrc":"1467:14:61","nodeType":"YulIdentifier","src":"1467:14:61"},{"kind":"number","nativeSrc":"1483:1:61","nodeType":"YulLiteral","src":"1483:1:61","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nativeSrc":"1486:12:61","nodeType":"YulIdentifier","src":"1486:12:61"},"nativeSrc":"1486:14:61","nodeType":"YulFunctionCall","src":"1486:14:61"},{"kind":"number","nativeSrc":"1502:1:61","nodeType":"YulLiteral","src":"1502:1:61","type":"","value":"0"},{"kind":"number","nativeSrc":"1505:1:61","nodeType":"YulLiteral","src":"1505:1:61","type":"","value":"0"}],"functionName":{"name":"delegatecall","nativeSrc":"1447:12:61","nodeType":"YulIdentifier","src":"1447:12:61"},"nativeSrc":"1447:60:61","nodeType":"YulFunctionCall","src":"1447:60:61"},"variables":[{"name":"result","nativeSrc":"1437:6:61","nodeType":"YulTypedName","src":"1437:6:61","type":""}]},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1575:1:61","nodeType":"YulLiteral","src":"1575:1:61","type":"","value":"0"},{"kind":"number","nativeSrc":"1578:1:61","nodeType":"YulLiteral","src":"1578:1:61","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"1581:14:61","nodeType":"YulIdentifier","src":"1581:14:61"},"nativeSrc":"1581:16:61","nodeType":"YulFunctionCall","src":"1581:16:61"}],"functionName":{"name":"returndatacopy","nativeSrc":"1560:14:61","nodeType":"YulIdentifier","src":"1560:14:61"},"nativeSrc":"1560:38:61","nodeType":"YulFunctionCall","src":"1560:38:61"},"nativeSrc":"1560:38:61","nodeType":"YulExpressionStatement","src":"1560:38:61"},{"cases":[{"body":{"nativeSrc":"1693:59:61","nodeType":"YulBlock","src":"1693:59:61","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1718:1:61","nodeType":"YulLiteral","src":"1718:1:61","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"1721:14:61","nodeType":"YulIdentifier","src":"1721:14:61"},"nativeSrc":"1721:16:61","nodeType":"YulFunctionCall","src":"1721:16:61"}],"functionName":{"name":"revert","nativeSrc":"1711:6:61","nodeType":"YulIdentifier","src":"1711:6:61"},"nativeSrc":"1711:27:61","nodeType":"YulFunctionCall","src":"1711:27:61"},"nativeSrc":"1711:27:61","nodeType":"YulExpressionStatement","src":"1711:27:61"}]},"nativeSrc":"1686:66:61","nodeType":"YulCase","src":"1686:66:61","value":{"kind":"number","nativeSrc":"1691:1:61","nodeType":"YulLiteral","src":"1691:1:61","type":"","value":"0"}},{"body":{"nativeSrc":"1773:59:61","nodeType":"YulBlock","src":"1773:59:61","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1798:1:61","nodeType":"YulLiteral","src":"1798:1:61","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"1801:14:61","nodeType":"YulIdentifier","src":"1801:14:61"},"nativeSrc":"1801:16:61","nodeType":"YulFunctionCall","src":"1801:16:61"}],"functionName":{"name":"return","nativeSrc":"1791:6:61","nodeType":"YulIdentifier","src":"1791:6:61"},"nativeSrc":"1791:27:61","nodeType":"YulFunctionCall","src":"1791:27:61"},"nativeSrc":"1791:27:61","nodeType":"YulExpressionStatement","src":"1791:27:61"}]},"nativeSrc":"1765:67:61","nodeType":"YulCase","src":"1765:67:61","value":"default"}],"expression":{"name":"result","nativeSrc":"1619:6:61","nodeType":"YulIdentifier","src":"1619:6:61"},"nativeSrc":"1612:220:61","nodeType":"YulSwitch","src":"1612:220:61"}]},"evmVersion":"paris","externalReferences":[{"declaration":19291,"isOffset":false,"isSlot":false,"src":"1467:14:61","valueSize":1}],"id":19294,"nodeType":"InlineAssembly","src":"1023:819:61"}]},"documentation":{"id":19289,"nodeType":"StructuredDocumentation","src":"758:190:61","text":" @dev Delegates the current call to `implementation`.\n This function does not return to its internal call site, it will return directly to the external caller."},"id":19296,"implemented":true,"kind":"function","modifiers":[],"name":"_delegate","nameLocation":"962:9:61","nodeType":"FunctionDefinition","parameters":{"id":19292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19291,"mutability":"mutable","name":"implementation","nameLocation":"980:14:61","nodeType":"VariableDeclaration","scope":19296,"src":"972:22:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19290,"name":"address","nodeType":"ElementaryTypeName","src":"972:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"971:24:61"},"returnParameters":{"id":19293,"nodeType":"ParameterList","parameters":[],"src":"1013:0:61"},"scope":19337,"src":"953:895:61","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"documentation":{"id":19297,"nodeType":"StructuredDocumentation","src":"1854:172:61","text":" @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n and {_fallback} should delegate."},"id":19302,"implemented":false,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"2040:15:61","nodeType":"FunctionDefinition","parameters":{"id":19298,"nodeType":"ParameterList","parameters":[],"src":"2055:2:61"},"returnParameters":{"id":19301,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19300,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19302,"src":"2089:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19299,"name":"address","nodeType":"ElementaryTypeName","src":"2089:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2088:9:61"},"scope":19337,"src":"2031:67:61","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":19314,"nodeType":"Block","src":"2365:72:61","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":19306,"name":"_beforeFallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19336,"src":"2375:15:61","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":19307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2375:17:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19308,"nodeType":"ExpressionStatement","src":"2375:17:61"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":19310,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19302,"src":"2412:15:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":19311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2412:17:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19309,"name":"_delegate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19296,"src":"2402:9:61","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":19312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2402:28:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19313,"nodeType":"ExpressionStatement","src":"2402:28:61"}]},"documentation":{"id":19303,"nodeType":"StructuredDocumentation","src":"2104:218:61","text":" @dev Delegates the current call to the address returned by `_implementation()`.\n This function does not return to its internall call site, it will return directly to the external caller."},"id":19315,"implemented":true,"kind":"function","modifiers":[],"name":"_fallback","nameLocation":"2336:9:61","nodeType":"FunctionDefinition","parameters":{"id":19304,"nodeType":"ParameterList","parameters":[],"src":"2345:2:61"},"returnParameters":{"id":19305,"nodeType":"ParameterList","parameters":[],"src":"2365:0:61"},"scope":19337,"src":"2327:110:61","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":19322,"nodeType":"Block","src":"2670:28:61","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":19319,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19315,"src":"2680:9:61","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":19320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2680:11:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19321,"nodeType":"ExpressionStatement","src":"2680:11:61"}]},"documentation":{"id":19316,"nodeType":"StructuredDocumentation","src":"2443:186:61","text":" @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n function in the contract matches the call data."},"id":19323,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":19317,"nodeType":"ParameterList","parameters":[],"src":"2642:2:61"},"returnParameters":{"id":19318,"nodeType":"ParameterList","parameters":[],"src":"2670:0:61"},"scope":19337,"src":"2634:64:61","stateMutability":"payable","virtual":true,"visibility":"external"},{"body":{"id":19330,"nodeType":"Block","src":"2893:28:61","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":19327,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19315,"src":"2903:9:61","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":19328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2903:11:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19329,"nodeType":"ExpressionStatement","src":"2903:11:61"}]},"documentation":{"id":19324,"nodeType":"StructuredDocumentation","src":"2704:149:61","text":" @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n is empty."},"id":19331,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":19325,"nodeType":"ParameterList","parameters":[],"src":"2865:2:61"},"returnParameters":{"id":19326,"nodeType":"ParameterList","parameters":[],"src":"2893:0:61"},"scope":19337,"src":"2858:63:61","stateMutability":"payable","virtual":true,"visibility":"external"},{"body":{"id":19335,"nodeType":"Block","src":"3246:2:61","statements":[]},"documentation":{"id":19332,"nodeType":"StructuredDocumentation","src":"2927:270:61","text":" @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n call, or as part of the Solidity `fallback` or `receive` functions.\n If overriden should call `super._beforeFallback()`."},"id":19336,"implemented":true,"kind":"function","modifiers":[],"name":"_beforeFallback","nameLocation":"3211:15:61","nodeType":"FunctionDefinition","parameters":{"id":19333,"nodeType":"ParameterList","parameters":[],"src":"3226:2:61"},"returnParameters":{"id":19334,"nodeType":"ParameterList","parameters":[],"src":"3246:0:61"},"scope":19337,"src":"3202:46:61","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":19338,"src":"728:2522:61","usedErrors":[],"usedEvents":[]}],"src":"104:3147:61"},"id":61},"hardhat-deploy/solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol":{"ast":{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol","exportedSymbols":{"IBeacon":[19347]},"id":19348,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":19339,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"93:23:62"},{"abstract":false,"baseContracts":[],"canonicalName":"IBeacon","contractDependencies":[],"contractKind":"interface","documentation":{"id":19340,"nodeType":"StructuredDocumentation","src":"118:79:62","text":" @dev This is the interface that {BeaconProxy} expects of its beacon."},"fullyImplemented":false,"id":19347,"linearizedBaseContracts":[19347],"name":"IBeacon","nameLocation":"208:7:62","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":19341,"nodeType":"StructuredDocumentation","src":"222:162:62","text":" @dev Must return an address that can be used as a delegate call target.\n {BeaconProxy} will check that this address is a contract."},"functionSelector":"5c60da1b","id":19346,"implemented":false,"kind":"function","modifiers":[],"name":"implementation","nameLocation":"398:14:62","nodeType":"FunctionDefinition","parameters":{"id":19342,"nodeType":"ParameterList","parameters":[],"src":"412:2:62"},"returnParameters":{"id":19345,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19344,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19346,"src":"438:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19343,"name":"address","nodeType":"ElementaryTypeName","src":"438:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"437:9:62"},"scope":19347,"src":"389:58:62","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":19348,"src":"198:251:62","usedErrors":[],"usedEvents":[]}],"src":"93:357:62"},"id":62},"hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol":{"ast":{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol","exportedSymbols":{"Address":[19951],"Context":[19973],"ERC1967Proxy":[18967],"ERC1967Upgrade":[19285],"IBeacon":[19347],"IERC1822Proxiable":[18914],"Ownable":[18904],"Proxy":[19337],"ProxyAdmin":[19492],"StorageSlot":[20033],"TransparentUpgradeableProxy":[19656]},"id":19493,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":19349,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"101:23:63"},{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol","file":"./TransparentUpgradeableProxy.sol","id":19350,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19493,"sourceUnit":19657,"src":"126:43:63","symbolAliases":[],"unitAlias":""},{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/access/Ownable.sol","file":"../../access/Ownable.sol","id":19351,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19493,"sourceUnit":18905,"src":"170:34:63","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":19353,"name":"Ownable","nameLocations":["458:7:63"],"nodeType":"IdentifierPath","referencedDeclaration":18904,"src":"458:7:63"},"id":19354,"nodeType":"InheritanceSpecifier","src":"458:7:63"}],"canonicalName":"ProxyAdmin","contractDependencies":[],"contractKind":"contract","documentation":{"id":19352,"nodeType":"StructuredDocumentation","src":"206:228:63","text":" @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}."},"fullyImplemented":true,"id":19492,"linearizedBaseContracts":[19492,18904,19973],"name":"ProxyAdmin","nameLocation":"444:10:63","nodeType":"ContractDefinition","nodes":[{"body":{"id":19362,"nodeType":"Block","src":"530:2:63","statements":[]},"id":19363,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":19359,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19356,"src":"516:12:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":19360,"kind":"baseConstructorSpecifier","modifierName":{"id":19358,"name":"Ownable","nameLocations":["508:7:63"],"nodeType":"IdentifierPath","referencedDeclaration":18904,"src":"508:7:63"},"nodeType":"ModifierInvocation","src":"508:21:63"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":19357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19356,"mutability":"mutable","name":"initialOwner","nameLocation":"494:12:63","nodeType":"VariableDeclaration","scope":19363,"src":"486:20:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19355,"name":"address","nodeType":"ElementaryTypeName","src":"486:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"485:22:63"},"returnParameters":{"id":19361,"nodeType":"ParameterList","parameters":[],"src":"530:0:63"},"scope":19492,"src":"473:59:63","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":19396,"nodeType":"Block","src":"806:332:63","statements":[{"assignments":[19373,19375],"declarations":[{"constant":false,"id":19373,"mutability":"mutable","name":"success","nameLocation":"979:7:63","nodeType":"VariableDeclaration","scope":19396,"src":"974:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19372,"name":"bool","nodeType":"ElementaryTypeName","src":"974:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":19375,"mutability":"mutable","name":"returndata","nameLocation":"1001:10:63","nodeType":"VariableDeclaration","scope":19396,"src":"988:23:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19374,"name":"bytes","nodeType":"ElementaryTypeName","src":"988:5:63","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":19383,"initialValue":{"arguments":[{"hexValue":"5c60da1b","id":19381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"1041:13:63","typeDescriptions":{"typeIdentifier":"t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29","typeString":"literal_string hex\"5c60da1b\""}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29","typeString":"literal_string hex\"5c60da1b\""}],"expression":{"arguments":[{"id":19378,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19367,"src":"1023:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$19656","typeString":"contract TransparentUpgradeableProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$19656","typeString":"contract TransparentUpgradeableProxy"}],"id":19377,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1015:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19376,"name":"address","nodeType":"ElementaryTypeName","src":"1015:7:63","typeDescriptions":{}}},"id":19379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1015:14:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1030:10:63","memberName":"staticcall","nodeType":"MemberAccess","src":"1015:25:63","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":19382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1015:40:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"973:82:63"},{"expression":{"arguments":[{"id":19385,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19373,"src":"1073:7:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":19384,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1065:7:63","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":19386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1065:16:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19387,"nodeType":"ExpressionStatement","src":"1065:16:63"},{"expression":{"arguments":[{"id":19390,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19375,"src":"1109:10:63","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":19392,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1122:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19391,"name":"address","nodeType":"ElementaryTypeName","src":"1122:7:63","typeDescriptions":{}}}],"id":19393,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1121:9:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}],"expression":{"id":19388,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1098:3:63","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19389,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1102:6:63","memberName":"decode","nodeType":"MemberAccess","src":"1098:10:63","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":19394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1098:33:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":19371,"id":19395,"nodeType":"Return","src":"1091:40:63"}]},"documentation":{"id":19364,"nodeType":"StructuredDocumentation","src":"538:158:63","text":" @dev Returns the current implementation of `proxy`.\n Requirements:\n - This contract must be the admin of `proxy`."},"functionSelector":"204e1c7a","id":19397,"implemented":true,"kind":"function","modifiers":[],"name":"getProxyImplementation","nameLocation":"710:22:63","nodeType":"FunctionDefinition","parameters":{"id":19368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19367,"mutability":"mutable","name":"proxy","nameLocation":"761:5:63","nodeType":"VariableDeclaration","scope":19397,"src":"733:33:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$19656","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":19366,"nodeType":"UserDefinedTypeName","pathNode":{"id":19365,"name":"TransparentUpgradeableProxy","nameLocations":["733:27:63"],"nodeType":"IdentifierPath","referencedDeclaration":19656,"src":"733:27:63"},"referencedDeclaration":19656,"src":"733:27:63","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$19656","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"}],"src":"732:35:63"},"returnParameters":{"id":19371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19370,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19397,"src":"797:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19369,"name":"address","nodeType":"ElementaryTypeName","src":"797:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"796:9:63"},"scope":19492,"src":"701:437:63","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":19430,"nodeType":"Block","src":"1394:323:63","statements":[{"assignments":[19407,19409],"declarations":[{"constant":false,"id":19407,"mutability":"mutable","name":"success","nameLocation":"1558:7:63","nodeType":"VariableDeclaration","scope":19430,"src":"1553:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19406,"name":"bool","nodeType":"ElementaryTypeName","src":"1553:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":19409,"mutability":"mutable","name":"returndata","nameLocation":"1580:10:63","nodeType":"VariableDeclaration","scope":19430,"src":"1567:23:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19408,"name":"bytes","nodeType":"ElementaryTypeName","src":"1567:5:63","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":19417,"initialValue":{"arguments":[{"hexValue":"f851a440","id":19415,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"1620:13:63","typeDescriptions":{"typeIdentifier":"t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7","typeString":"literal_string hex\"f851a440\""}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7","typeString":"literal_string hex\"f851a440\""}],"expression":{"arguments":[{"id":19412,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19401,"src":"1602:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$19656","typeString":"contract TransparentUpgradeableProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$19656","typeString":"contract TransparentUpgradeableProxy"}],"id":19411,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1594:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19410,"name":"address","nodeType":"ElementaryTypeName","src":"1594:7:63","typeDescriptions":{}}},"id":19413,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1594:14:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1609:10:63","memberName":"staticcall","nodeType":"MemberAccess","src":"1594:25:63","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":19416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1594:40:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1552:82:63"},{"expression":{"arguments":[{"id":19419,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19407,"src":"1652:7:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":19418,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1644:7:63","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":19420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1644:16:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19421,"nodeType":"ExpressionStatement","src":"1644:16:63"},{"expression":{"arguments":[{"id":19424,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19409,"src":"1688:10:63","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":19426,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1701:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19425,"name":"address","nodeType":"ElementaryTypeName","src":"1701:7:63","typeDescriptions":{}}}],"id":19427,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1700:9:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}],"expression":{"id":19422,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1677:3:63","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19423,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1681:6:63","memberName":"decode","nodeType":"MemberAccess","src":"1677:10:63","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":19428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1677:33:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":19405,"id":19429,"nodeType":"Return","src":"1670:40:63"}]},"documentation":{"id":19398,"nodeType":"StructuredDocumentation","src":"1144:149:63","text":" @dev Returns the current admin of `proxy`.\n Requirements:\n - This contract must be the admin of `proxy`."},"functionSelector":"f3b7dead","id":19431,"implemented":true,"kind":"function","modifiers":[],"name":"getProxyAdmin","nameLocation":"1307:13:63","nodeType":"FunctionDefinition","parameters":{"id":19402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19401,"mutability":"mutable","name":"proxy","nameLocation":"1349:5:63","nodeType":"VariableDeclaration","scope":19431,"src":"1321:33:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$19656","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":19400,"nodeType":"UserDefinedTypeName","pathNode":{"id":19399,"name":"TransparentUpgradeableProxy","nameLocations":["1321:27:63"],"nodeType":"IdentifierPath","referencedDeclaration":19656,"src":"1321:27:63"},"referencedDeclaration":19656,"src":"1321:27:63","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$19656","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"}],"src":"1320:35:63"},"returnParameters":{"id":19405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19404,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19431,"src":"1385:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19403,"name":"address","nodeType":"ElementaryTypeName","src":"1385:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1384:9:63"},"scope":19492,"src":"1298:419:63","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":19448,"nodeType":"Block","src":"1995:44:63","statements":[{"expression":{"arguments":[{"id":19445,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19437,"src":"2023:8:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19442,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19435,"src":"2005:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$19656","typeString":"contract TransparentUpgradeableProxy"}},"id":19444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2011:11:63","memberName":"changeAdmin","nodeType":"MemberAccess","referencedDeclaration":19590,"src":"2005:17:63","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":19446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2005:27:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19447,"nodeType":"ExpressionStatement","src":"2005:27:63"}]},"documentation":{"id":19432,"nodeType":"StructuredDocumentation","src":"1723:163:63","text":" @dev Changes the admin of `proxy` to `newAdmin`.\n Requirements:\n - This contract must be the current admin of `proxy`."},"functionSelector":"7eff275e","id":19449,"implemented":true,"kind":"function","modifiers":[{"id":19440,"kind":"modifierInvocation","modifierName":{"id":19439,"name":"onlyOwner","nameLocations":["1985:9:63"],"nodeType":"IdentifierPath","referencedDeclaration":18846,"src":"1985:9:63"},"nodeType":"ModifierInvocation","src":"1985:9:63"}],"name":"changeProxyAdmin","nameLocation":"1900:16:63","nodeType":"FunctionDefinition","parameters":{"id":19438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19435,"mutability":"mutable","name":"proxy","nameLocation":"1945:5:63","nodeType":"VariableDeclaration","scope":19449,"src":"1917:33:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$19656","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":19434,"nodeType":"UserDefinedTypeName","pathNode":{"id":19433,"name":"TransparentUpgradeableProxy","nameLocations":["1917:27:63"],"nodeType":"IdentifierPath","referencedDeclaration":19656,"src":"1917:27:63"},"referencedDeclaration":19656,"src":"1917:27:63","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$19656","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"},{"constant":false,"id":19437,"mutability":"mutable","name":"newAdmin","nameLocation":"1960:8:63","nodeType":"VariableDeclaration","scope":19449,"src":"1952:16:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19436,"name":"address","nodeType":"ElementaryTypeName","src":"1952:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1916:53:63"},"returnParameters":{"id":19441,"nodeType":"ParameterList","parameters":[],"src":"1995:0:63"},"scope":19492,"src":"1891:148:63","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":19466,"nodeType":"Block","src":"2345:48:63","statements":[{"expression":{"arguments":[{"id":19463,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19455,"src":"2371:14:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19460,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19453,"src":"2355:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$19656","typeString":"contract TransparentUpgradeableProxy"}},"id":19462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2361:9:63","memberName":"upgradeTo","nodeType":"MemberAccess","referencedDeclaration":19608,"src":"2355:15:63","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":19464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2355:31:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19465,"nodeType":"ExpressionStatement","src":"2355:31:63"}]},"documentation":{"id":19450,"nodeType":"StructuredDocumentation","src":"2045:194:63","text":" @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n Requirements:\n - This contract must be the admin of `proxy`."},"functionSelector":"99a88ec4","id":19467,"implemented":true,"kind":"function","modifiers":[{"id":19458,"kind":"modifierInvocation","modifierName":{"id":19457,"name":"onlyOwner","nameLocations":["2335:9:63"],"nodeType":"IdentifierPath","referencedDeclaration":18846,"src":"2335:9:63"},"nodeType":"ModifierInvocation","src":"2335:9:63"}],"name":"upgrade","nameLocation":"2253:7:63","nodeType":"FunctionDefinition","parameters":{"id":19456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19453,"mutability":"mutable","name":"proxy","nameLocation":"2289:5:63","nodeType":"VariableDeclaration","scope":19467,"src":"2261:33:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$19656","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":19452,"nodeType":"UserDefinedTypeName","pathNode":{"id":19451,"name":"TransparentUpgradeableProxy","nameLocations":["2261:27:63"],"nodeType":"IdentifierPath","referencedDeclaration":19656,"src":"2261:27:63"},"referencedDeclaration":19656,"src":"2261:27:63","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$19656","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"},{"constant":false,"id":19455,"mutability":"mutable","name":"implementation","nameLocation":"2304:14:63","nodeType":"VariableDeclaration","scope":19467,"src":"2296:22:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19454,"name":"address","nodeType":"ElementaryTypeName","src":"2296:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2260:59:63"},"returnParameters":{"id":19459,"nodeType":"ParameterList","parameters":[],"src":"2345:0:63"},"scope":19492,"src":"2244:149:63","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":19490,"nodeType":"Block","src":"2824:79:63","statements":[{"expression":{"arguments":[{"id":19486,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19473,"src":"2875:14:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19487,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19475,"src":"2891:4:63","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":19480,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19471,"src":"2834:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$19656","typeString":"contract TransparentUpgradeableProxy"}},"id":19482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2840:16:63","memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":19625,"src":"2834:22:63","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory) payable external"}},"id":19485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":19483,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2864:3:63","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2868:5:63","memberName":"value","nodeType":"MemberAccess","src":"2864:9:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"2834:40:63","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$value","typeString":"function (address,bytes memory) payable external"}},"id":19488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2834:62:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19489,"nodeType":"ExpressionStatement","src":"2834:62:63"}]},"documentation":{"id":19468,"nodeType":"StructuredDocumentation","src":"2399:255:63","text":" @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n {TransparentUpgradeableProxy-upgradeToAndCall}.\n Requirements:\n - This contract must be the admin of `proxy`."},"functionSelector":"9623609d","id":19491,"implemented":true,"kind":"function","modifiers":[{"id":19478,"kind":"modifierInvocation","modifierName":{"id":19477,"name":"onlyOwner","nameLocations":["2814:9:63"],"nodeType":"IdentifierPath","referencedDeclaration":18846,"src":"2814:9:63"},"nodeType":"ModifierInvocation","src":"2814:9:63"}],"name":"upgradeAndCall","nameLocation":"2668:14:63","nodeType":"FunctionDefinition","parameters":{"id":19476,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19471,"mutability":"mutable","name":"proxy","nameLocation":"2720:5:63","nodeType":"VariableDeclaration","scope":19491,"src":"2692:33:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$19656","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":19470,"nodeType":"UserDefinedTypeName","pathNode":{"id":19469,"name":"TransparentUpgradeableProxy","nameLocations":["2692:27:63"],"nodeType":"IdentifierPath","referencedDeclaration":19656,"src":"2692:27:63"},"referencedDeclaration":19656,"src":"2692:27:63","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$19656","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"},{"constant":false,"id":19473,"mutability":"mutable","name":"implementation","nameLocation":"2743:14:63","nodeType":"VariableDeclaration","scope":19491,"src":"2735:22:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19472,"name":"address","nodeType":"ElementaryTypeName","src":"2735:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19475,"mutability":"mutable","name":"data","nameLocation":"2780:4:63","nodeType":"VariableDeclaration","scope":19491,"src":"2767:17:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19474,"name":"bytes","nodeType":"ElementaryTypeName","src":"2767:5:63","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2682:108:63"},"returnParameters":{"id":19479,"nodeType":"ParameterList","parameters":[],"src":"2824:0:63"},"scope":19492,"src":"2659:244:63","stateMutability":"payable","virtual":true,"visibility":"public"}],"scope":19493,"src":"435:2470:63","usedErrors":[],"usedEvents":[18812]}],"src":"101:2805:63"},"id":63},"hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol":{"ast":{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol","exportedSymbols":{"Address":[19951],"ERC1967Proxy":[18967],"ERC1967Upgrade":[19285],"IBeacon":[19347],"IERC1822Proxiable":[18914],"Proxy":[19337],"StorageSlot":[20033],"TransparentUpgradeableProxy":[19656]},"id":19657,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":19494,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"118:23:64"},{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol","file":"../ERC1967/ERC1967Proxy.sol","id":19495,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19657,"sourceUnit":18968,"src":"143:37:64","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":19497,"name":"ERC1967Proxy","nameLocations":["1674:12:64"],"nodeType":"IdentifierPath","referencedDeclaration":18967,"src":"1674:12:64"},"id":19498,"nodeType":"InheritanceSpecifier","src":"1674:12:64"}],"canonicalName":"TransparentUpgradeableProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":19496,"nodeType":"StructuredDocumentation","src":"182:1451:64","text":" @dev This contract implements a proxy that is upgradeable by an admin.\n To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n clashing], which can potentially be used in an attack, this contract uses the\n https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n things that go hand in hand:\n 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n that call matches one of the admin functions exposed by the proxy itself.\n 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n \"admin cannot fallback to proxy target\".\n These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n to sudden errors when trying to call a function from the proxy implementation.\n Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy."},"fullyImplemented":true,"id":19656,"linearizedBaseContracts":[19656,18967,19285,19337],"name":"TransparentUpgradeableProxy","nameLocation":"1643:27:64","nodeType":"ContractDefinition","nodes":[{"body":{"id":19532,"nodeType":"Block","src":"2038:124:64","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":19525,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":19513,"name":"_ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19125,"src":"2055:11:64","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19523,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"hexValue":"656970313936372e70726f78792e61646d696e","id":19519,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2096:21:64","typeDescriptions":{"typeIdentifier":"t_stringliteral_b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104","typeString":"literal_string \"eip1967.proxy.admin\""},"value":"eip1967.proxy.admin"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104","typeString":"literal_string \"eip1967.proxy.admin\""}],"id":19518,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2086:9:64","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":19520,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2086:32:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":19517,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2078:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":19516,"name":"uint256","nodeType":"ElementaryTypeName","src":"2078:7:64","typeDescriptions":{}}},"id":19521,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2078:41:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":19522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2122:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2078:45:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19515,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2070:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":19514,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2070:7:64","typeDescriptions":{}}},"id":19524,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2070:54:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2055:69:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":19512,"name":"assert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-3,"src":"2048:6:64","typeDescriptions":{"typeIdentifier":"t_function_assert_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":19526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2048:77:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19527,"nodeType":"ExpressionStatement","src":"2048:77:64"},{"expression":{"arguments":[{"id":19529,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19503,"src":"2148:6:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19528,"name":"_changeAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19188,"src":"2135:12:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":19530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2135:20:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19531,"nodeType":"ExpressionStatement","src":"2135:20:64"}]},"documentation":{"id":19499,"nodeType":"StructuredDocumentation","src":"1693:210:64","text":" @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}."},"id":19533,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":19508,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19501,"src":"2023:6:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19509,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19505,"src":"2031:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":19510,"kind":"baseConstructorSpecifier","modifierName":{"id":19507,"name":"ERC1967Proxy","nameLocations":["2010:12:64"],"nodeType":"IdentifierPath","referencedDeclaration":18967,"src":"2010:12:64"},"nodeType":"ModifierInvocation","src":"2010:27:64"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":19506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19501,"mutability":"mutable","name":"_logic","nameLocation":"1937:6:64","nodeType":"VariableDeclaration","scope":19533,"src":"1929:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19500,"name":"address","nodeType":"ElementaryTypeName","src":"1929:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19503,"mutability":"mutable","name":"admin_","nameLocation":"1961:6:64","nodeType":"VariableDeclaration","scope":19533,"src":"1953:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19502,"name":"address","nodeType":"ElementaryTypeName","src":"1953:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19505,"mutability":"mutable","name":"_data","nameLocation":"1990:5:64","nodeType":"VariableDeclaration","scope":19533,"src":"1977:18:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19504,"name":"bytes","nodeType":"ElementaryTypeName","src":"1977:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1919:82:64"},"returnParameters":{"id":19511,"nodeType":"ParameterList","parameters":[],"src":"2038:0:64"},"scope":19656,"src":"1908:254:64","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":19548,"nodeType":"Block","src":"2322:115:64","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19536,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2336:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2340:6:64","memberName":"sender","nodeType":"MemberAccess","src":"2336:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":19538,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19145,"src":"2350:9:64","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":19539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2350:11:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2336:25:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":19546,"nodeType":"Block","src":"2395:36:64","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":19543,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19315,"src":"2409:9:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":19544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2409:11:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19545,"nodeType":"ExpressionStatement","src":"2409:11:64"}]},"id":19547,"nodeType":"IfStatement","src":"2332:99:64","trueBody":{"id":19542,"nodeType":"Block","src":"2363:26:64","statements":[{"id":19541,"nodeType":"PlaceholderStatement","src":"2377:1:64"}]}}]},"documentation":{"id":19534,"nodeType":"StructuredDocumentation","src":"2168:130:64","text":" @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin."},"id":19549,"name":"ifAdmin","nameLocation":"2312:7:64","nodeType":"ModifierDefinition","parameters":{"id":19535,"nodeType":"ParameterList","parameters":[],"src":"2319:2:64"},"src":"2303:134:64","virtual":false,"visibility":"internal"},{"body":{"id":19562,"nodeType":"Block","src":"2938:37:64","statements":[{"expression":{"id":19560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19557,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19555,"src":"2948:6:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":19558,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19145,"src":"2957:9:64","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":19559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2957:11:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2948:20:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19561,"nodeType":"ExpressionStatement","src":"2948:20:64"}]},"documentation":{"id":19550,"nodeType":"StructuredDocumentation","src":"2443:431:64","text":" @dev Returns the current admin.\n NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`"},"functionSelector":"f851a440","id":19563,"implemented":true,"kind":"function","modifiers":[{"id":19553,"kind":"modifierInvocation","modifierName":{"id":19552,"name":"ifAdmin","nameLocations":["2905:7:64"],"nodeType":"IdentifierPath","referencedDeclaration":19549,"src":"2905:7:64"},"nodeType":"ModifierInvocation","src":"2905:7:64"}],"name":"admin","nameLocation":"2888:5:64","nodeType":"FunctionDefinition","parameters":{"id":19551,"nodeType":"ParameterList","parameters":[],"src":"2893:2:64"},"returnParameters":{"id":19556,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19555,"mutability":"mutable","name":"admin_","nameLocation":"2930:6:64","nodeType":"VariableDeclaration","scope":19563,"src":"2922:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19554,"name":"address","nodeType":"ElementaryTypeName","src":"2922:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2921:16:64"},"scope":19656,"src":"2879:96:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":19576,"nodeType":"Block","src":"3512:52:64","statements":[{"expression":{"id":19574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19571,"name":"implementation_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19569,"src":"3522:15:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":19572,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[18966],"referencedDeclaration":18966,"src":"3540:15:64","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":19573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3540:17:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3522:35:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19575,"nodeType":"ExpressionStatement","src":"3522:35:64"}]},"documentation":{"id":19564,"nodeType":"StructuredDocumentation","src":"2981:449:64","text":" @dev Returns the current implementation.\n NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`"},"functionSelector":"5c60da1b","id":19577,"implemented":true,"kind":"function","modifiers":[{"id":19567,"kind":"modifierInvocation","modifierName":{"id":19566,"name":"ifAdmin","nameLocations":["3470:7:64"],"nodeType":"IdentifierPath","referencedDeclaration":19549,"src":"3470:7:64"},"nodeType":"ModifierInvocation","src":"3470:7:64"}],"name":"implementation","nameLocation":"3444:14:64","nodeType":"FunctionDefinition","parameters":{"id":19565,"nodeType":"ParameterList","parameters":[],"src":"3458:2:64"},"returnParameters":{"id":19570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19569,"mutability":"mutable","name":"implementation_","nameLocation":"3495:15:64","nodeType":"VariableDeclaration","scope":19577,"src":"3487:23:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19568,"name":"address","nodeType":"ElementaryTypeName","src":"3487:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3486:25:64"},"scope":19656,"src":"3435:129:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":19589,"nodeType":"Block","src":"3833:39:64","statements":[{"expression":{"arguments":[{"id":19586,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19580,"src":"3856:8:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19585,"name":"_changeAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19188,"src":"3843:12:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":19587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3843:22:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19588,"nodeType":"ExpressionStatement","src":"3843:22:64"}]},"documentation":{"id":19578,"nodeType":"StructuredDocumentation","src":"3570:194:64","text":" @dev Changes the admin of the proxy.\n Emits an {AdminChanged} event.\n NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}."},"functionSelector":"8f283970","id":19590,"implemented":true,"kind":"function","modifiers":[{"id":19583,"kind":"modifierInvocation","modifierName":{"id":19582,"name":"ifAdmin","nameLocations":["3825:7:64"],"nodeType":"IdentifierPath","referencedDeclaration":19549,"src":"3825:7:64"},"nodeType":"ModifierInvocation","src":"3825:7:64"}],"name":"changeAdmin","nameLocation":"3778:11:64","nodeType":"FunctionDefinition","parameters":{"id":19581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19580,"mutability":"mutable","name":"newAdmin","nameLocation":"3798:8:64","nodeType":"VariableDeclaration","scope":19590,"src":"3790:16:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19579,"name":"address","nodeType":"ElementaryTypeName","src":"3790:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3789:18:64"},"returnParameters":{"id":19584,"nodeType":"ParameterList","parameters":[],"src":"3833:0:64"},"scope":19656,"src":"3769:103:64","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":19607,"nodeType":"Block","src":"4095:71:64","statements":[{"expression":{"arguments":[{"id":19599,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19593,"src":"4123:17:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"","id":19602,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4148:2:64","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":19601,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4142:5:64","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":19600,"name":"bytes","nodeType":"ElementaryTypeName","src":"4142:5:64","typeDescriptions":{}}},"id":19603,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4142:9:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"66616c7365","id":19604,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4153:5:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":19598,"name":"_upgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19068,"src":"4105:17:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":19605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4105:54:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19606,"nodeType":"ExpressionStatement","src":"4105:54:64"}]},"documentation":{"id":19591,"nodeType":"StructuredDocumentation","src":"3878:149:64","text":" @dev Upgrade the implementation of the proxy.\n NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}."},"functionSelector":"3659cfe6","id":19608,"implemented":true,"kind":"function","modifiers":[{"id":19596,"kind":"modifierInvocation","modifierName":{"id":19595,"name":"ifAdmin","nameLocations":["4087:7:64"],"nodeType":"IdentifierPath","referencedDeclaration":19549,"src":"4087:7:64"},"nodeType":"ModifierInvocation","src":"4087:7:64"}],"name":"upgradeTo","nameLocation":"4041:9:64","nodeType":"FunctionDefinition","parameters":{"id":19594,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19593,"mutability":"mutable","name":"newImplementation","nameLocation":"4059:17:64","nodeType":"VariableDeclaration","scope":19608,"src":"4051:25:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19592,"name":"address","nodeType":"ElementaryTypeName","src":"4051:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4050:27:64"},"returnParameters":{"id":19597,"nodeType":"ParameterList","parameters":[],"src":"4095:0:64"},"scope":19656,"src":"4032:134:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":19624,"nodeType":"Block","src":"4641:65:64","statements":[{"expression":{"arguments":[{"id":19619,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19611,"src":"4669:17:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19620,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19613,"src":"4688:4:64","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"hexValue":"74727565","id":19621,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4694:4:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":19618,"name":"_upgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19068,"src":"4651:17:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":19622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4651:48:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19623,"nodeType":"ExpressionStatement","src":"4651:48:64"}]},"documentation":{"id":19609,"nodeType":"StructuredDocumentation","src":"4172:365:64","text":" @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n proxied contract.\n NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}."},"functionSelector":"4f1ef286","id":19625,"implemented":true,"kind":"function","modifiers":[{"id":19616,"kind":"modifierInvocation","modifierName":{"id":19615,"name":"ifAdmin","nameLocations":["4633:7:64"],"nodeType":"IdentifierPath","referencedDeclaration":19549,"src":"4633:7:64"},"nodeType":"ModifierInvocation","src":"4633:7:64"}],"name":"upgradeToAndCall","nameLocation":"4551:16:64","nodeType":"FunctionDefinition","parameters":{"id":19614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19611,"mutability":"mutable","name":"newImplementation","nameLocation":"4576:17:64","nodeType":"VariableDeclaration","scope":19625,"src":"4568:25:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19610,"name":"address","nodeType":"ElementaryTypeName","src":"4568:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19613,"mutability":"mutable","name":"data","nameLocation":"4610:4:64","nodeType":"VariableDeclaration","scope":19625,"src":"4595:19:64","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":19612,"name":"bytes","nodeType":"ElementaryTypeName","src":"4595:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4567:48:64"},"returnParameters":{"id":19617,"nodeType":"ParameterList","parameters":[],"src":"4641:0:64"},"scope":19656,"src":"4542:164:64","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":19634,"nodeType":"Block","src":"4825:35:64","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":19631,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19145,"src":"4842:9:64","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":19632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4842:11:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":19630,"id":19633,"nodeType":"Return","src":"4835:18:64"}]},"documentation":{"id":19626,"nodeType":"StructuredDocumentation","src":"4712:50:64","text":" @dev Returns the current admin."},"id":19635,"implemented":true,"kind":"function","modifiers":[],"name":"_admin","nameLocation":"4776:6:64","nodeType":"FunctionDefinition","parameters":{"id":19627,"nodeType":"ParameterList","parameters":[],"src":"4782:2:64"},"returnParameters":{"id":19630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19629,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19635,"src":"4816:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19628,"name":"address","nodeType":"ElementaryTypeName","src":"4816:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4815:9:64"},"scope":19656,"src":"4767:93:64","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[19336],"body":{"id":19654,"nodeType":"Block","src":"5034:154:64","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19641,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5052:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5056:6:64","memberName":"sender","nodeType":"MemberAccess","src":"5052:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":19643,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19145,"src":"5066:9:64","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":19644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5066:11:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5052:25:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574","id":19646,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5079:68:64","typeDescriptions":{"typeIdentifier":"t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d","typeString":"literal_string \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\""},"value":"TransparentUpgradeableProxy: admin cannot fallback to proxy target"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d","typeString":"literal_string \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\""}],"id":19640,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5044:7:64","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5044:104:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19648,"nodeType":"ExpressionStatement","src":"5044:104:64"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19649,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"5158:5:64","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_TransparentUpgradeableProxy_$19656_$","typeString":"type(contract super TransparentUpgradeableProxy)"}},"id":19651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5164:15:64","memberName":"_beforeFallback","nodeType":"MemberAccess","referencedDeclaration":19336,"src":"5158:21:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":19652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5158:23:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19653,"nodeType":"ExpressionStatement","src":"5158:23:64"}]},"documentation":{"id":19636,"nodeType":"StructuredDocumentation","src":"4866:110:64","text":" @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}."},"id":19655,"implemented":true,"kind":"function","modifiers":[],"name":"_beforeFallback","nameLocation":"4990:15:64","nodeType":"FunctionDefinition","overrides":{"id":19638,"nodeType":"OverrideSpecifier","overrides":[],"src":"5025:8:64"},"parameters":{"id":19637,"nodeType":"ParameterList","parameters":[],"src":"5005:2:64"},"returnParameters":{"id":19639,"nodeType":"ParameterList","parameters":[],"src":"5034:0:64"},"scope":19656,"src":"4981:207:64","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":19657,"src":"1634:3556:64","usedErrors":[],"usedEvents":[18986,19132,19197]}],"src":"118:5073:64"},"id":64},"hardhat-deploy/solc_0.8/openzeppelin/utils/Address.sol":{"ast":{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/utils/Address.sol","exportedSymbols":{"Address":[19951]},"id":19952,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":19658,"literals":["solidity","^","0.8",".1"],"nodeType":"PragmaDirective","src":"106:23:65"},{"abstract":false,"baseContracts":[],"canonicalName":"Address","contractDependencies":[],"contractKind":"library","documentation":{"id":19659,"nodeType":"StructuredDocumentation","src":"131:67:65","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":19951,"linearizedBaseContracts":[19951],"name":"Address","nameLocation":"207:7:65","nodeType":"ContractDefinition","nodes":[{"body":{"id":19673,"nodeType":"Block","src":"1246:254:65","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":19667,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19662,"src":"1470:7:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1478:4:65","memberName":"code","nodeType":"MemberAccess","src":"1470:12:65","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":19669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1483:6:65","memberName":"length","nodeType":"MemberAccess","src":"1470:19:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":19670,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1492:1:65","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1470:23:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":19666,"id":19672,"nodeType":"Return","src":"1463:30:65"}]},"documentation":{"id":19660,"nodeType":"StructuredDocumentation","src":"221:954:65","text":" @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n  - an externally-owned account\n  - a contract in construction\n  - an address where a contract will be created\n  - an address where a contract lived, but was destroyed\n ====\n [IMPORTANT]\n ====\n You shouldn't rely on `isContract` to protect against flash loan attacks!\n Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n constructor.\n ===="},"id":19674,"implemented":true,"kind":"function","modifiers":[],"name":"isContract","nameLocation":"1189:10:65","nodeType":"FunctionDefinition","parameters":{"id":19663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19662,"mutability":"mutable","name":"account","nameLocation":"1208:7:65","nodeType":"VariableDeclaration","scope":19674,"src":"1200:15:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19661,"name":"address","nodeType":"ElementaryTypeName","src":"1200:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1199:17:65"},"returnParameters":{"id":19666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19665,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19674,"src":"1240:4:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19664,"name":"bool","nodeType":"ElementaryTypeName","src":"1240:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1239:6:65"},"scope":19951,"src":"1180:320:65","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":19707,"nodeType":"Block","src":"2488:241:65","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":19685,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2514:4:65","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$19951","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$19951","typeString":"library Address"}],"id":19684,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2506:7:65","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19683,"name":"address","nodeType":"ElementaryTypeName","src":"2506:7:65","typeDescriptions":{}}},"id":19686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2506:13:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2520:7:65","memberName":"balance","nodeType":"MemberAccess","src":"2506:21:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":19688,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19679,"src":"2531:6:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2506:31:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","id":19690,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2539:31:65","typeDescriptions":{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""},"value":"Address: insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""}],"id":19682,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2498:7:65","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19691,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2498:73:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19692,"nodeType":"ExpressionStatement","src":"2498:73:65"},{"assignments":[19694,null],"declarations":[{"constant":false,"id":19694,"mutability":"mutable","name":"success","nameLocation":"2588:7:65","nodeType":"VariableDeclaration","scope":19707,"src":"2583:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19693,"name":"bool","nodeType":"ElementaryTypeName","src":"2583:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":19701,"initialValue":{"arguments":[{"hexValue":"","id":19699,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2631:2:65","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":19695,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19677,"src":"2601:9:65","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":19696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2611:4:65","memberName":"call","nodeType":"MemberAccess","src":"2601:14:65","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":19698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":19697,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19679,"src":"2623:6:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"2601:29:65","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":19700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2601:33:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"2582:52:65"},{"expression":{"arguments":[{"id":19703,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19694,"src":"2652:7:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564","id":19704,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2661:60:65","typeDescriptions":{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""},"value":"Address: unable to send value, recipient may have reverted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""}],"id":19702,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2644:7:65","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19705,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2644:78:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19706,"nodeType":"ExpressionStatement","src":"2644:78:65"}]},"documentation":{"id":19675,"nodeType":"StructuredDocumentation","src":"1506:906:65","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":19708,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"2426:9:65","nodeType":"FunctionDefinition","parameters":{"id":19680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19677,"mutability":"mutable","name":"recipient","nameLocation":"2452:9:65","nodeType":"VariableDeclaration","scope":19708,"src":"2436:25:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":19676,"name":"address","nodeType":"ElementaryTypeName","src":"2436:15:65","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":19679,"mutability":"mutable","name":"amount","nameLocation":"2471:6:65","nodeType":"VariableDeclaration","scope":19708,"src":"2463:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19678,"name":"uint256","nodeType":"ElementaryTypeName","src":"2463:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2435:43:65"},"returnParameters":{"id":19681,"nodeType":"ParameterList","parameters":[],"src":"2488:0:65"},"scope":19951,"src":"2417:312:65","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19724,"nodeType":"Block","src":"3560:84:65","statements":[{"expression":{"arguments":[{"id":19719,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19711,"src":"3590:6:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19720,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19713,"src":"3598:4:65","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564","id":19721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3604:32:65","typeDescriptions":{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""},"value":"Address: low-level call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""}],"id":19718,"name":"functionCall","nodeType":"Identifier","overloadedDeclarations":[19725,19745],"referencedDeclaration":19745,"src":"3577:12:65","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) returns (bytes memory)"}},"id":19722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3577:60:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":19717,"id":19723,"nodeType":"Return","src":"3570:67:65"}]},"documentation":{"id":19709,"nodeType":"StructuredDocumentation","src":"2735:731:65","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"},"id":19725,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"3480:12:65","nodeType":"FunctionDefinition","parameters":{"id":19714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19711,"mutability":"mutable","name":"target","nameLocation":"3501:6:65","nodeType":"VariableDeclaration","scope":19725,"src":"3493:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19710,"name":"address","nodeType":"ElementaryTypeName","src":"3493:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19713,"mutability":"mutable","name":"data","nameLocation":"3522:4:65","nodeType":"VariableDeclaration","scope":19725,"src":"3509:17:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19712,"name":"bytes","nodeType":"ElementaryTypeName","src":"3509:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3492:35:65"},"returnParameters":{"id":19717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19716,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19725,"src":"3546:12:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19715,"name":"bytes","nodeType":"ElementaryTypeName","src":"3546:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3545:14:65"},"scope":19951,"src":"3471:173:65","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19744,"nodeType":"Block","src":"4013:76:65","statements":[{"expression":{"arguments":[{"id":19738,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19728,"src":"4052:6:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19739,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19730,"src":"4060:4:65","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":19740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4066:1:65","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":19741,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19732,"src":"4069:12:65","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19737,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[19765,19815],"referencedDeclaration":19815,"src":"4030:21:65","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":19742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4030:52:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":19736,"id":19743,"nodeType":"Return","src":"4023:59:65"}]},"documentation":{"id":19726,"nodeType":"StructuredDocumentation","src":"3650:211:65","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":19745,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"3875:12:65","nodeType":"FunctionDefinition","parameters":{"id":19733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19728,"mutability":"mutable","name":"target","nameLocation":"3905:6:65","nodeType":"VariableDeclaration","scope":19745,"src":"3897:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19727,"name":"address","nodeType":"ElementaryTypeName","src":"3897:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19730,"mutability":"mutable","name":"data","nameLocation":"3934:4:65","nodeType":"VariableDeclaration","scope":19745,"src":"3921:17:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19729,"name":"bytes","nodeType":"ElementaryTypeName","src":"3921:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":19732,"mutability":"mutable","name":"errorMessage","nameLocation":"3962:12:65","nodeType":"VariableDeclaration","scope":19745,"src":"3948:26:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":19731,"name":"string","nodeType":"ElementaryTypeName","src":"3948:6:65","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3887:93:65"},"returnParameters":{"id":19736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19735,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19745,"src":"3999:12:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19734,"name":"bytes","nodeType":"ElementaryTypeName","src":"3999:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3998:14:65"},"scope":19951,"src":"3866:223:65","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19764,"nodeType":"Block","src":"4594:111:65","statements":[{"expression":{"arguments":[{"id":19758,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19748,"src":"4633:6:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19759,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19750,"src":"4641:4:65","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":19760,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19752,"src":"4647:5:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564","id":19761,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4654:43:65","typeDescriptions":{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""},"value":"Address: low-level call with value failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""}],"id":19757,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[19765,19815],"referencedDeclaration":19815,"src":"4611:21:65","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":19762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4611:87:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":19756,"id":19763,"nodeType":"Return","src":"4604:94:65"}]},"documentation":{"id":19746,"nodeType":"StructuredDocumentation","src":"4095:351:65","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"},"id":19765,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"4460:21:65","nodeType":"FunctionDefinition","parameters":{"id":19753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19748,"mutability":"mutable","name":"target","nameLocation":"4499:6:65","nodeType":"VariableDeclaration","scope":19765,"src":"4491:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19747,"name":"address","nodeType":"ElementaryTypeName","src":"4491:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19750,"mutability":"mutable","name":"data","nameLocation":"4528:4:65","nodeType":"VariableDeclaration","scope":19765,"src":"4515:17:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19749,"name":"bytes","nodeType":"ElementaryTypeName","src":"4515:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":19752,"mutability":"mutable","name":"value","nameLocation":"4550:5:65","nodeType":"VariableDeclaration","scope":19765,"src":"4542:13:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19751,"name":"uint256","nodeType":"ElementaryTypeName","src":"4542:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4481:80:65"},"returnParameters":{"id":19756,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19755,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19765,"src":"4580:12:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19754,"name":"bytes","nodeType":"ElementaryTypeName","src":"4580:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4579:14:65"},"scope":19951,"src":"4451:254:65","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19814,"nodeType":"Block","src":"5132:320:65","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":19782,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5158:4:65","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$19951","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$19951","typeString":"library Address"}],"id":19781,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5150:7:65","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19780,"name":"address","nodeType":"ElementaryTypeName","src":"5150:7:65","typeDescriptions":{}}},"id":19783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5150:13:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5164:7:65","memberName":"balance","nodeType":"MemberAccess","src":"5150:21:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":19785,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19772,"src":"5175:5:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5150:30:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c","id":19787,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5182:40:65","typeDescriptions":{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""},"value":"Address: insufficient balance for call"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""}],"id":19779,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5142:7:65","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19788,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5142:81:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19789,"nodeType":"ExpressionStatement","src":"5142:81:65"},{"expression":{"arguments":[{"arguments":[{"id":19792,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19768,"src":"5252:6:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19791,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19674,"src":"5241:10:65","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":19793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5241:18:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","id":19794,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5261:31:65","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""},"value":"Address: call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""}],"id":19790,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5233:7:65","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5233:60:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19796,"nodeType":"ExpressionStatement","src":"5233:60:65"},{"assignments":[19798,19800],"declarations":[{"constant":false,"id":19798,"mutability":"mutable","name":"success","nameLocation":"5310:7:65","nodeType":"VariableDeclaration","scope":19814,"src":"5305:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19797,"name":"bool","nodeType":"ElementaryTypeName","src":"5305:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":19800,"mutability":"mutable","name":"returndata","nameLocation":"5332:10:65","nodeType":"VariableDeclaration","scope":19814,"src":"5319:23:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19799,"name":"bytes","nodeType":"ElementaryTypeName","src":"5319:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":19807,"initialValue":{"arguments":[{"id":19805,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19770,"src":"5372:4:65","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":19801,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19768,"src":"5346:6:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5353:4:65","memberName":"call","nodeType":"MemberAccess","src":"5346:11:65","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":19804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":19803,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19772,"src":"5365:5:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"5346:25:65","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":19806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5346:31:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5304:73:65"},{"expression":{"arguments":[{"id":19809,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19798,"src":"5411:7:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":19810,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19800,"src":"5420:10:65","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":19811,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19774,"src":"5432:12:65","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19808,"name":"verifyCallResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19950,"src":"5394:16:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bool,bytes memory,string memory) pure returns (bytes memory)"}},"id":19812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5394:51:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":19778,"id":19813,"nodeType":"Return","src":"5387:58:65"}]},"documentation":{"id":19766,"nodeType":"StructuredDocumentation","src":"4711:237:65","text":" @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":19815,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"4962:21:65","nodeType":"FunctionDefinition","parameters":{"id":19775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19768,"mutability":"mutable","name":"target","nameLocation":"5001:6:65","nodeType":"VariableDeclaration","scope":19815,"src":"4993:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19767,"name":"address","nodeType":"ElementaryTypeName","src":"4993:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19770,"mutability":"mutable","name":"data","nameLocation":"5030:4:65","nodeType":"VariableDeclaration","scope":19815,"src":"5017:17:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19769,"name":"bytes","nodeType":"ElementaryTypeName","src":"5017:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":19772,"mutability":"mutable","name":"value","nameLocation":"5052:5:65","nodeType":"VariableDeclaration","scope":19815,"src":"5044:13:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19771,"name":"uint256","nodeType":"ElementaryTypeName","src":"5044:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19774,"mutability":"mutable","name":"errorMessage","nameLocation":"5081:12:65","nodeType":"VariableDeclaration","scope":19815,"src":"5067:26:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":19773,"name":"string","nodeType":"ElementaryTypeName","src":"5067:6:65","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4983:116:65"},"returnParameters":{"id":19778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19777,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19815,"src":"5118:12:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19776,"name":"bytes","nodeType":"ElementaryTypeName","src":"5118:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5117:14:65"},"scope":19951,"src":"4953:499:65","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19831,"nodeType":"Block","src":"5729:97:65","statements":[{"expression":{"arguments":[{"id":19826,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19818,"src":"5765:6:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19827,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19820,"src":"5773:4:65","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564","id":19828,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5779:39:65","typeDescriptions":{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""},"value":"Address: low-level static call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""}],"id":19825,"name":"functionStaticCall","nodeType":"Identifier","overloadedDeclarations":[19832,19867],"referencedDeclaration":19867,"src":"5746:18:65","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) view returns (bytes memory)"}},"id":19829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5746:73:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":19824,"id":19830,"nodeType":"Return","src":"5739:80:65"}]},"documentation":{"id":19816,"nodeType":"StructuredDocumentation","src":"5458:166:65","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":19832,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"5638:18:65","nodeType":"FunctionDefinition","parameters":{"id":19821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19818,"mutability":"mutable","name":"target","nameLocation":"5665:6:65","nodeType":"VariableDeclaration","scope":19832,"src":"5657:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19817,"name":"address","nodeType":"ElementaryTypeName","src":"5657:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19820,"mutability":"mutable","name":"data","nameLocation":"5686:4:65","nodeType":"VariableDeclaration","scope":19832,"src":"5673:17:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19819,"name":"bytes","nodeType":"ElementaryTypeName","src":"5673:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5656:35:65"},"returnParameters":{"id":19824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19823,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19832,"src":"5715:12:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19822,"name":"bytes","nodeType":"ElementaryTypeName","src":"5715:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5714:14:65"},"scope":19951,"src":"5629:197:65","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":19866,"nodeType":"Block","src":"6168:228:65","statements":[{"expression":{"arguments":[{"arguments":[{"id":19846,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19835,"src":"6197:6:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19845,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19674,"src":"6186:10:65","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":19847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6186:18:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a207374617469632063616c6c20746f206e6f6e2d636f6e7472616374","id":19848,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6206:38:65","typeDescriptions":{"typeIdentifier":"t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9","typeString":"literal_string \"Address: static call to non-contract\""},"value":"Address: static call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9","typeString":"literal_string \"Address: static call to non-contract\""}],"id":19844,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6178:7:65","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6178:67:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19850,"nodeType":"ExpressionStatement","src":"6178:67:65"},{"assignments":[19852,19854],"declarations":[{"constant":false,"id":19852,"mutability":"mutable","name":"success","nameLocation":"6262:7:65","nodeType":"VariableDeclaration","scope":19866,"src":"6257:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19851,"name":"bool","nodeType":"ElementaryTypeName","src":"6257:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":19854,"mutability":"mutable","name":"returndata","nameLocation":"6284:10:65","nodeType":"VariableDeclaration","scope":19866,"src":"6271:23:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19853,"name":"bytes","nodeType":"ElementaryTypeName","src":"6271:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":19859,"initialValue":{"arguments":[{"id":19857,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19837,"src":"6316:4:65","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":19855,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19835,"src":"6298:6:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6305:10:65","memberName":"staticcall","nodeType":"MemberAccess","src":"6298:17:65","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":19858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6298:23:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6256:65:65"},{"expression":{"arguments":[{"id":19861,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19852,"src":"6355:7:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":19862,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19854,"src":"6364:10:65","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":19863,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19839,"src":"6376:12:65","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19860,"name":"verifyCallResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19950,"src":"6338:16:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bool,bytes memory,string memory) pure returns (bytes memory)"}},"id":19864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6338:51:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":19843,"id":19865,"nodeType":"Return","src":"6331:58:65"}]},"documentation":{"id":19833,"nodeType":"StructuredDocumentation","src":"5832:173:65","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":19867,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"6019:18:65","nodeType":"FunctionDefinition","parameters":{"id":19840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19835,"mutability":"mutable","name":"target","nameLocation":"6055:6:65","nodeType":"VariableDeclaration","scope":19867,"src":"6047:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19834,"name":"address","nodeType":"ElementaryTypeName","src":"6047:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19837,"mutability":"mutable","name":"data","nameLocation":"6084:4:65","nodeType":"VariableDeclaration","scope":19867,"src":"6071:17:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19836,"name":"bytes","nodeType":"ElementaryTypeName","src":"6071:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":19839,"mutability":"mutable","name":"errorMessage","nameLocation":"6112:12:65","nodeType":"VariableDeclaration","scope":19867,"src":"6098:26:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":19838,"name":"string","nodeType":"ElementaryTypeName","src":"6098:6:65","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6037:93:65"},"returnParameters":{"id":19843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19842,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19867,"src":"6154:12:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19841,"name":"bytes","nodeType":"ElementaryTypeName","src":"6154:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6153:14:65"},"scope":19951,"src":"6010:386:65","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":19883,"nodeType":"Block","src":"6672:101:65","statements":[{"expression":{"arguments":[{"id":19878,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19870,"src":"6710:6:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19879,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19872,"src":"6718:4:65","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564","id":19880,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6724:41:65","typeDescriptions":{"typeIdentifier":"t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398","typeString":"literal_string \"Address: low-level delegate call failed\""},"value":"Address: low-level delegate call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398","typeString":"literal_string \"Address: low-level delegate call failed\""}],"id":19877,"name":"functionDelegateCall","nodeType":"Identifier","overloadedDeclarations":[19884,19919],"referencedDeclaration":19919,"src":"6689:20:65","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) returns (bytes memory)"}},"id":19881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6689:77:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":19876,"id":19882,"nodeType":"Return","src":"6682:84:65"}]},"documentation":{"id":19868,"nodeType":"StructuredDocumentation","src":"6402:168:65","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"},"id":19884,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"6584:20:65","nodeType":"FunctionDefinition","parameters":{"id":19873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19870,"mutability":"mutable","name":"target","nameLocation":"6613:6:65","nodeType":"VariableDeclaration","scope":19884,"src":"6605:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19869,"name":"address","nodeType":"ElementaryTypeName","src":"6605:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19872,"mutability":"mutable","name":"data","nameLocation":"6634:4:65","nodeType":"VariableDeclaration","scope":19884,"src":"6621:17:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19871,"name":"bytes","nodeType":"ElementaryTypeName","src":"6621:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6604:35:65"},"returnParameters":{"id":19876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19875,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19884,"src":"6658:12:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19874,"name":"bytes","nodeType":"ElementaryTypeName","src":"6658:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6657:14:65"},"scope":19951,"src":"6575:198:65","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19918,"nodeType":"Block","src":"7114:232:65","statements":[{"expression":{"arguments":[{"arguments":[{"id":19898,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19887,"src":"7143:6:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19897,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19674,"src":"7132:10:65","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":19899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7132:18:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374","id":19900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7152:40:65","typeDescriptions":{"typeIdentifier":"t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520","typeString":"literal_string \"Address: delegate call to non-contract\""},"value":"Address: delegate call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520","typeString":"literal_string \"Address: delegate call to non-contract\""}],"id":19896,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7124:7:65","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7124:69:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19902,"nodeType":"ExpressionStatement","src":"7124:69:65"},{"assignments":[19904,19906],"declarations":[{"constant":false,"id":19904,"mutability":"mutable","name":"success","nameLocation":"7210:7:65","nodeType":"VariableDeclaration","scope":19918,"src":"7205:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19903,"name":"bool","nodeType":"ElementaryTypeName","src":"7205:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":19906,"mutability":"mutable","name":"returndata","nameLocation":"7232:10:65","nodeType":"VariableDeclaration","scope":19918,"src":"7219:23:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19905,"name":"bytes","nodeType":"ElementaryTypeName","src":"7219:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":19911,"initialValue":{"arguments":[{"id":19909,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19889,"src":"7266:4:65","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":19907,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19887,"src":"7246:6:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7253:12:65","memberName":"delegatecall","nodeType":"MemberAccess","src":"7246:19:65","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":19910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7246:25:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"7204:67:65"},{"expression":{"arguments":[{"id":19913,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19904,"src":"7305:7:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":19914,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19906,"src":"7314:10:65","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":19915,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19891,"src":"7326:12:65","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19912,"name":"verifyCallResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19950,"src":"7288:16:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bool,bytes memory,string memory) pure returns (bytes memory)"}},"id":19916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7288:51:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":19895,"id":19917,"nodeType":"Return","src":"7281:58:65"}]},"documentation":{"id":19885,"nodeType":"StructuredDocumentation","src":"6779:175:65","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"},"id":19919,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"6968:20:65","nodeType":"FunctionDefinition","parameters":{"id":19892,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19887,"mutability":"mutable","name":"target","nameLocation":"7006:6:65","nodeType":"VariableDeclaration","scope":19919,"src":"6998:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19886,"name":"address","nodeType":"ElementaryTypeName","src":"6998:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19889,"mutability":"mutable","name":"data","nameLocation":"7035:4:65","nodeType":"VariableDeclaration","scope":19919,"src":"7022:17:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19888,"name":"bytes","nodeType":"ElementaryTypeName","src":"7022:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":19891,"mutability":"mutable","name":"errorMessage","nameLocation":"7063:12:65","nodeType":"VariableDeclaration","scope":19919,"src":"7049:26:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":19890,"name":"string","nodeType":"ElementaryTypeName","src":"7049:6:65","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6988:93:65"},"returnParameters":{"id":19895,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19894,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19919,"src":"7100:12:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19893,"name":"bytes","nodeType":"ElementaryTypeName","src":"7100:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7099:14:65"},"scope":19951,"src":"6959:387:65","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19949,"nodeType":"Block","src":"7726:532:65","statements":[{"condition":{"id":19931,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19922,"src":"7740:7:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":19947,"nodeType":"Block","src":"7797:455:65","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19935,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19924,"src":"7881:10:65","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":19936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7892:6:65","memberName":"length","nodeType":"MemberAccess","src":"7881:17:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":19937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7901:1:65","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7881:21:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":19945,"nodeType":"Block","src":"8189:53:65","statements":[{"expression":{"arguments":[{"id":19942,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19926,"src":"8214:12:65","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19941,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"8207:6:65","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":19943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8207:20:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19944,"nodeType":"ExpressionStatement","src":"8207:20:65"}]},"id":19946,"nodeType":"IfStatement","src":"7877:365:65","trueBody":{"id":19940,"nodeType":"Block","src":"7904:279:65","statements":[{"AST":{"nativeSrc":"8024:145:65","nodeType":"YulBlock","src":"8024:145:65","statements":[{"nativeSrc":"8046:40:65","nodeType":"YulVariableDeclaration","src":"8046:40:65","value":{"arguments":[{"name":"returndata","nativeSrc":"8075:10:65","nodeType":"YulIdentifier","src":"8075:10:65"}],"functionName":{"name":"mload","nativeSrc":"8069:5:65","nodeType":"YulIdentifier","src":"8069:5:65"},"nativeSrc":"8069:17:65","nodeType":"YulFunctionCall","src":"8069:17:65"},"variables":[{"name":"returndata_size","nativeSrc":"8050:15:65","nodeType":"YulTypedName","src":"8050:15:65","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"8118:2:65","nodeType":"YulLiteral","src":"8118:2:65","type":"","value":"32"},{"name":"returndata","nativeSrc":"8122:10:65","nodeType":"YulIdentifier","src":"8122:10:65"}],"functionName":{"name":"add","nativeSrc":"8114:3:65","nodeType":"YulIdentifier","src":"8114:3:65"},"nativeSrc":"8114:19:65","nodeType":"YulFunctionCall","src":"8114:19:65"},{"name":"returndata_size","nativeSrc":"8135:15:65","nodeType":"YulIdentifier","src":"8135:15:65"}],"functionName":{"name":"revert","nativeSrc":"8107:6:65","nodeType":"YulIdentifier","src":"8107:6:65"},"nativeSrc":"8107:44:65","nodeType":"YulFunctionCall","src":"8107:44:65"},"nativeSrc":"8107:44:65","nodeType":"YulExpressionStatement","src":"8107:44:65"}]},"evmVersion":"paris","externalReferences":[{"declaration":19924,"isOffset":false,"isSlot":false,"src":"8075:10:65","valueSize":1},{"declaration":19924,"isOffset":false,"isSlot":false,"src":"8122:10:65","valueSize":1}],"id":19939,"nodeType":"InlineAssembly","src":"8015:154:65"}]}}]},"id":19948,"nodeType":"IfStatement","src":"7736:516:65","trueBody":{"id":19934,"nodeType":"Block","src":"7749:42:65","statements":[{"expression":{"id":19932,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19924,"src":"7770:10:65","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":19930,"id":19933,"nodeType":"Return","src":"7763:17:65"}]}}]},"documentation":{"id":19920,"nodeType":"StructuredDocumentation","src":"7352:209:65","text":" @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason using the provided one.\n _Available since v4.3._"},"id":19950,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"7575:16:65","nodeType":"FunctionDefinition","parameters":{"id":19927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19922,"mutability":"mutable","name":"success","nameLocation":"7606:7:65","nodeType":"VariableDeclaration","scope":19950,"src":"7601:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19921,"name":"bool","nodeType":"ElementaryTypeName","src":"7601:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":19924,"mutability":"mutable","name":"returndata","nameLocation":"7636:10:65","nodeType":"VariableDeclaration","scope":19950,"src":"7623:23:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19923,"name":"bytes","nodeType":"ElementaryTypeName","src":"7623:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":19926,"mutability":"mutable","name":"errorMessage","nameLocation":"7670:12:65","nodeType":"VariableDeclaration","scope":19950,"src":"7656:26:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":19925,"name":"string","nodeType":"ElementaryTypeName","src":"7656:6:65","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7591:97:65"},"returnParameters":{"id":19930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19929,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19950,"src":"7712:12:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19928,"name":"bytes","nodeType":"ElementaryTypeName","src":"7712:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7711:14:65"},"scope":19951,"src":"7566:692:65","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":19952,"src":"199:8061:65","usedErrors":[],"usedEvents":[]}],"src":"106:8155:65"},"id":65},"hardhat-deploy/solc_0.8/openzeppelin/utils/Context.sol":{"ast":{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/utils/Context.sol","exportedSymbols":{"Context":[19973]},"id":19974,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":19953,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"86:23:66"},{"abstract":true,"baseContracts":[],"canonicalName":"Context","contractDependencies":[],"contractKind":"contract","documentation":{"id":19954,"nodeType":"StructuredDocumentation","src":"111:496:66","text":" @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."},"fullyImplemented":true,"id":19973,"linearizedBaseContracts":[19973],"name":"Context","nameLocation":"626:7:66","nodeType":"ContractDefinition","nodes":[{"body":{"id":19962,"nodeType":"Block","src":"702:34:66","statements":[{"expression":{"expression":{"id":19959,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"719:3:66","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"723:6:66","memberName":"sender","nodeType":"MemberAccess","src":"719:10:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":19958,"id":19961,"nodeType":"Return","src":"712:17:66"}]},"id":19963,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"649:10:66","nodeType":"FunctionDefinition","parameters":{"id":19955,"nodeType":"ParameterList","parameters":[],"src":"659:2:66"},"returnParameters":{"id":19958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19957,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19963,"src":"693:7:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19956,"name":"address","nodeType":"ElementaryTypeName","src":"693:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"692:9:66"},"scope":19973,"src":"640:96:66","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":19971,"nodeType":"Block","src":"809:32:66","statements":[{"expression":{"expression":{"id":19968,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"826:3:66","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"830:4:66","memberName":"data","nodeType":"MemberAccess","src":"826:8:66","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":19967,"id":19970,"nodeType":"Return","src":"819:15:66"}]},"id":19972,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"751:8:66","nodeType":"FunctionDefinition","parameters":{"id":19964,"nodeType":"ParameterList","parameters":[],"src":"759:2:66"},"returnParameters":{"id":19967,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19966,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19972,"src":"793:14:66","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":19965,"name":"bytes","nodeType":"ElementaryTypeName","src":"793:5:66","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"792:16:66"},"scope":19973,"src":"742:99:66","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":19974,"src":"608:235:66","usedErrors":[],"usedEvents":[]}],"src":"86:758:66"},"id":66},"hardhat-deploy/solc_0.8/openzeppelin/utils/StorageSlot.sol":{"ast":{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/utils/StorageSlot.sol","exportedSymbols":{"StorageSlot":[20033]},"id":20034,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":19975,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"90:23:67"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlot","contractDependencies":[],"contractKind":"library","documentation":{"id":19976,"nodeType":"StructuredDocumentation","src":"115:1148:67","text":" @dev Library for reading and writing primitive types to specific storage slots.\n Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n This library helps with reading and writing to such slots without the need for inline assembly.\n The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n Example usage to set ERC1967 implementation slot:\n ```\n contract ERC1967 {\n     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n     function _getImplementation() internal view returns (address) {\n         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n     }\n     function _setImplementation(address newImplementation) internal {\n         require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n     }\n }\n ```\n _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._"},"fullyImplemented":true,"id":20033,"linearizedBaseContracts":[20033],"name":"StorageSlot","nameLocation":"1272:11:67","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlot.AddressSlot","id":19979,"members":[{"constant":false,"id":19978,"mutability":"mutable","name":"value","nameLocation":"1327:5:67","nodeType":"VariableDeclaration","scope":19979,"src":"1319:13:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19977,"name":"address","nodeType":"ElementaryTypeName","src":"1319:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"AddressSlot","nameLocation":"1297:11:67","nodeType":"StructDefinition","scope":20033,"src":"1290:49:67","visibility":"public"},{"canonicalName":"StorageSlot.BooleanSlot","id":19982,"members":[{"constant":false,"id":19981,"mutability":"mutable","name":"value","nameLocation":"1379:5:67","nodeType":"VariableDeclaration","scope":19982,"src":"1374:10:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19980,"name":"bool","nodeType":"ElementaryTypeName","src":"1374:4:67","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"BooleanSlot","nameLocation":"1352:11:67","nodeType":"StructDefinition","scope":20033,"src":"1345:46:67","visibility":"public"},{"canonicalName":"StorageSlot.Bytes32Slot","id":19985,"members":[{"constant":false,"id":19984,"mutability":"mutable","name":"value","nameLocation":"1434:5:67","nodeType":"VariableDeclaration","scope":19985,"src":"1426:13:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19983,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1426:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"Bytes32Slot","nameLocation":"1404:11:67","nodeType":"StructDefinition","scope":20033,"src":"1397:49:67","visibility":"public"},{"canonicalName":"StorageSlot.Uint256Slot","id":19988,"members":[{"constant":false,"id":19987,"mutability":"mutable","name":"value","nameLocation":"1489:5:67","nodeType":"VariableDeclaration","scope":19988,"src":"1481:13:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19986,"name":"uint256","nodeType":"ElementaryTypeName","src":"1481:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Uint256Slot","nameLocation":"1459:11:67","nodeType":"StructDefinition","scope":20033,"src":"1452:49:67","visibility":"public"},{"body":{"id":19998,"nodeType":"Block","src":"1683:63:67","statements":[{"AST":{"nativeSrc":"1702:38:67","nodeType":"YulBlock","src":"1702:38:67","statements":[{"nativeSrc":"1716:14:67","nodeType":"YulAssignment","src":"1716:14:67","value":{"name":"slot","nativeSrc":"1726:4:67","nodeType":"YulIdentifier","src":"1726:4:67"},"variableNames":[{"name":"r.slot","nativeSrc":"1716:6:67","nodeType":"YulIdentifier","src":"1716:6:67"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":19995,"isOffset":false,"isSlot":true,"src":"1716:6:67","suffix":"slot","valueSize":1},{"declaration":19991,"isOffset":false,"isSlot":false,"src":"1726:4:67","valueSize":1}],"id":19997,"nodeType":"InlineAssembly","src":"1693:47:67"}]},"documentation":{"id":19989,"nodeType":"StructuredDocumentation","src":"1507:87:67","text":" @dev Returns an `AddressSlot` with member `value` located at `slot`."},"id":19999,"implemented":true,"kind":"function","modifiers":[],"name":"getAddressSlot","nameLocation":"1608:14:67","nodeType":"FunctionDefinition","parameters":{"id":19992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19991,"mutability":"mutable","name":"slot","nameLocation":"1631:4:67","nodeType":"VariableDeclaration","scope":19999,"src":"1623:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19990,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1623:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1622:14:67"},"returnParameters":{"id":19996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19995,"mutability":"mutable","name":"r","nameLocation":"1680:1:67","nodeType":"VariableDeclaration","scope":19999,"src":"1660:21:67","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$19979_storage_ptr","typeString":"struct StorageSlot.AddressSlot"},"typeName":{"id":19994,"nodeType":"UserDefinedTypeName","pathNode":{"id":19993,"name":"AddressSlot","nameLocations":["1660:11:67"],"nodeType":"IdentifierPath","referencedDeclaration":19979,"src":"1660:11:67"},"referencedDeclaration":19979,"src":"1660:11:67","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$19979_storage_ptr","typeString":"struct StorageSlot.AddressSlot"}},"visibility":"internal"}],"src":"1659:23:67"},"scope":20033,"src":"1599:147:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":20009,"nodeType":"Block","src":"1928:63:67","statements":[{"AST":{"nativeSrc":"1947:38:67","nodeType":"YulBlock","src":"1947:38:67","statements":[{"nativeSrc":"1961:14:67","nodeType":"YulAssignment","src":"1961:14:67","value":{"name":"slot","nativeSrc":"1971:4:67","nodeType":"YulIdentifier","src":"1971:4:67"},"variableNames":[{"name":"r.slot","nativeSrc":"1961:6:67","nodeType":"YulIdentifier","src":"1961:6:67"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":20006,"isOffset":false,"isSlot":true,"src":"1961:6:67","suffix":"slot","valueSize":1},{"declaration":20002,"isOffset":false,"isSlot":false,"src":"1971:4:67","valueSize":1}],"id":20008,"nodeType":"InlineAssembly","src":"1938:47:67"}]},"documentation":{"id":20000,"nodeType":"StructuredDocumentation","src":"1752:87:67","text":" @dev Returns an `BooleanSlot` with member `value` located at `slot`."},"id":20010,"implemented":true,"kind":"function","modifiers":[],"name":"getBooleanSlot","nameLocation":"1853:14:67","nodeType":"FunctionDefinition","parameters":{"id":20003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20002,"mutability":"mutable","name":"slot","nameLocation":"1876:4:67","nodeType":"VariableDeclaration","scope":20010,"src":"1868:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20001,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1868:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1867:14:67"},"returnParameters":{"id":20007,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20006,"mutability":"mutable","name":"r","nameLocation":"1925:1:67","nodeType":"VariableDeclaration","scope":20010,"src":"1905:21:67","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$19982_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"},"typeName":{"id":20005,"nodeType":"UserDefinedTypeName","pathNode":{"id":20004,"name":"BooleanSlot","nameLocations":["1905:11:67"],"nodeType":"IdentifierPath","referencedDeclaration":19982,"src":"1905:11:67"},"referencedDeclaration":19982,"src":"1905:11:67","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$19982_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"}},"visibility":"internal"}],"src":"1904:23:67"},"scope":20033,"src":"1844:147:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":20020,"nodeType":"Block","src":"2173:63:67","statements":[{"AST":{"nativeSrc":"2192:38:67","nodeType":"YulBlock","src":"2192:38:67","statements":[{"nativeSrc":"2206:14:67","nodeType":"YulAssignment","src":"2206:14:67","value":{"name":"slot","nativeSrc":"2216:4:67","nodeType":"YulIdentifier","src":"2216:4:67"},"variableNames":[{"name":"r.slot","nativeSrc":"2206:6:67","nodeType":"YulIdentifier","src":"2206:6:67"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":20017,"isOffset":false,"isSlot":true,"src":"2206:6:67","suffix":"slot","valueSize":1},{"declaration":20013,"isOffset":false,"isSlot":false,"src":"2216:4:67","valueSize":1}],"id":20019,"nodeType":"InlineAssembly","src":"2183:47:67"}]},"documentation":{"id":20011,"nodeType":"StructuredDocumentation","src":"1997:87:67","text":" @dev Returns an `Bytes32Slot` with member `value` located at `slot`."},"id":20021,"implemented":true,"kind":"function","modifiers":[],"name":"getBytes32Slot","nameLocation":"2098:14:67","nodeType":"FunctionDefinition","parameters":{"id":20014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20013,"mutability":"mutable","name":"slot","nameLocation":"2121:4:67","nodeType":"VariableDeclaration","scope":20021,"src":"2113:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20012,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2113:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2112:14:67"},"returnParameters":{"id":20018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20017,"mutability":"mutable","name":"r","nameLocation":"2170:1:67","nodeType":"VariableDeclaration","scope":20021,"src":"2150:21:67","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$19985_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"},"typeName":{"id":20016,"nodeType":"UserDefinedTypeName","pathNode":{"id":20015,"name":"Bytes32Slot","nameLocations":["2150:11:67"],"nodeType":"IdentifierPath","referencedDeclaration":19985,"src":"2150:11:67"},"referencedDeclaration":19985,"src":"2150:11:67","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$19985_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"}},"visibility":"internal"}],"src":"2149:23:67"},"scope":20033,"src":"2089:147:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":20031,"nodeType":"Block","src":"2418:63:67","statements":[{"AST":{"nativeSrc":"2437:38:67","nodeType":"YulBlock","src":"2437:38:67","statements":[{"nativeSrc":"2451:14:67","nodeType":"YulAssignment","src":"2451:14:67","value":{"name":"slot","nativeSrc":"2461:4:67","nodeType":"YulIdentifier","src":"2461:4:67"},"variableNames":[{"name":"r.slot","nativeSrc":"2451:6:67","nodeType":"YulIdentifier","src":"2451:6:67"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":20028,"isOffset":false,"isSlot":true,"src":"2451:6:67","suffix":"slot","valueSize":1},{"declaration":20024,"isOffset":false,"isSlot":false,"src":"2461:4:67","valueSize":1}],"id":20030,"nodeType":"InlineAssembly","src":"2428:47:67"}]},"documentation":{"id":20022,"nodeType":"StructuredDocumentation","src":"2242:87:67","text":" @dev Returns an `Uint256Slot` with member `value` located at `slot`."},"id":20032,"implemented":true,"kind":"function","modifiers":[],"name":"getUint256Slot","nameLocation":"2343:14:67","nodeType":"FunctionDefinition","parameters":{"id":20025,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20024,"mutability":"mutable","name":"slot","nameLocation":"2366:4:67","nodeType":"VariableDeclaration","scope":20032,"src":"2358:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20023,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2358:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2357:14:67"},"returnParameters":{"id":20029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20028,"mutability":"mutable","name":"r","nameLocation":"2415:1:67","nodeType":"VariableDeclaration","scope":20032,"src":"2395:21:67","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$19988_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"},"typeName":{"id":20027,"nodeType":"UserDefinedTypeName","pathNode":{"id":20026,"name":"Uint256Slot","nameLocations":["2395:11:67"],"nodeType":"IdentifierPath","referencedDeclaration":19988,"src":"2395:11:67"},"referencedDeclaration":19988,"src":"2395:11:67","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$19988_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"}},"visibility":"internal"}],"src":"2394:23:67"},"scope":20033,"src":"2334:147:67","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":20034,"src":"1264:1219:67","usedErrors":[],"usedEvents":[]}],"src":"90:2394:67"},"id":67},"hardhat-deploy/solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol":{"ast":{"absolutePath":"hardhat-deploy/solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol","exportedSymbols":{"Address":[19951],"ERC1967Proxy":[18967],"ERC1967Upgrade":[19285],"IBeacon":[19347],"IERC1822Proxiable":[18914],"OptimizedTransparentUpgradeableProxy":[20208],"Proxy":[19337],"StorageSlot":[20033]},"id":20209,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":20035,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"118:23:68"},{"absolutePath":"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol","file":"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol","id":20036,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20209,"sourceUnit":18968,"src":"143:56:68","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":20038,"name":"ERC1967Proxy","nameLocations":["1702:12:68"],"nodeType":"IdentifierPath","referencedDeclaration":18967,"src":"1702:12:68"},"id":20039,"nodeType":"InheritanceSpecifier","src":"1702:12:68"}],"canonicalName":"OptimizedTransparentUpgradeableProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":20037,"nodeType":"StructuredDocumentation","src":"201:1451:68","text":" @dev This contract implements a proxy that is upgradeable by an admin.\n To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n clashing], which can potentially be used in an attack, this contract uses the\n https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n things that go hand in hand:\n 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n that call matches one of the admin functions exposed by the proxy itself.\n 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n \"admin cannot fallback to proxy target\".\n These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n to sudden errors when trying to call a function from the proxy implementation.\n Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy."},"fullyImplemented":true,"id":20208,"linearizedBaseContracts":[20208,18967,19285,19337],"name":"OptimizedTransparentUpgradeableProxy","nameLocation":"1662:36:68","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":20041,"mutability":"immutable","name":"_ADMIN","nameLocation":"1748:6:68","nodeType":"VariableDeclaration","scope":20208,"src":"1721:33:68","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20040,"name":"address","nodeType":"ElementaryTypeName","src":"1721:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"body":{"id":20088,"nodeType":"Block","src":"2106:369:68","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":20068,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":20056,"name":"_ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19125,"src":"2123:11:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20066,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"hexValue":"656970313936372e70726f78792e61646d696e","id":20062,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2164:21:68","typeDescriptions":{"typeIdentifier":"t_stringliteral_b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104","typeString":"literal_string \"eip1967.proxy.admin\""},"value":"eip1967.proxy.admin"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104","typeString":"literal_string \"eip1967.proxy.admin\""}],"id":20061,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2154:9:68","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":20063,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2154:32:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":20060,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2146:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":20059,"name":"uint256","nodeType":"ElementaryTypeName","src":"2146:7:68","typeDescriptions":{}}},"id":20064,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2146:41:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":20065,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2190:1:68","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2146:45:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20058,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2138:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":20057,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2138:7:68","typeDescriptions":{}}},"id":20067,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2138:54:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2123:69:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":20055,"name":"assert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-3,"src":"2116:6:68","typeDescriptions":{"typeIdentifier":"t_function_assert_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":20069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2116:77:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20070,"nodeType":"ExpressionStatement","src":"2116:77:68"},{"expression":{"id":20073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20071,"name":"_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20041,"src":"2203:6:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20072,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20046,"src":"2212:6:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2203:15:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20074,"nodeType":"ExpressionStatement","src":"2203:15:68"},{"assignments":[20076],"declarations":[{"constant":false,"id":20076,"mutability":"mutable","name":"slot","nameLocation":"2285:4:68","nodeType":"VariableDeclaration","scope":20088,"src":"2277:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20075,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2277:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":20078,"initialValue":{"id":20077,"name":"_ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19125,"src":"2292:11:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2277:26:68"},{"AST":{"nativeSrc":"2378:44:68","nodeType":"YulBlock","src":"2378:44:68","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"2399:4:68","nodeType":"YulIdentifier","src":"2399:4:68"},{"name":"admin_","nativeSrc":"2405:6:68","nodeType":"YulIdentifier","src":"2405:6:68"}],"functionName":{"name":"sstore","nativeSrc":"2392:6:68","nodeType":"YulIdentifier","src":"2392:6:68"},"nativeSrc":"2392:20:68","nodeType":"YulFunctionCall","src":"2392:20:68"},"nativeSrc":"2392:20:68","nodeType":"YulExpressionStatement","src":"2392:20:68"}]},"evmVersion":"paris","externalReferences":[{"declaration":20046,"isOffset":false,"isSlot":false,"src":"2405:6:68","valueSize":1},{"declaration":20076,"isOffset":false,"isSlot":false,"src":"2399:4:68","valueSize":1}],"id":20079,"nodeType":"InlineAssembly","src":"2369:53:68"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":20083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2457:1:68","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":20082,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2449:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20081,"name":"address","nodeType":"ElementaryTypeName","src":"2449:7:68","typeDescriptions":{}}},"id":20084,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2449:10:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20085,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20046,"src":"2461:6:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20080,"name":"AdminChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19132,"src":"2436:12:68","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":20086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2436:32:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20087,"nodeType":"EmitStatement","src":"2431:37:68"}]},"documentation":{"id":20042,"nodeType":"StructuredDocumentation","src":"1761:210:68","text":" @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}."},"id":20089,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":20051,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20044,"src":"2091:6:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20052,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20048,"src":"2099:5:68","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":20053,"kind":"baseConstructorSpecifier","modifierName":{"id":20050,"name":"ERC1967Proxy","nameLocations":["2078:12:68"],"nodeType":"IdentifierPath","referencedDeclaration":18967,"src":"2078:12:68"},"nodeType":"ModifierInvocation","src":"2078:27:68"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":20049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20044,"mutability":"mutable","name":"_logic","nameLocation":"2005:6:68","nodeType":"VariableDeclaration","scope":20089,"src":"1997:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20043,"name":"address","nodeType":"ElementaryTypeName","src":"1997:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20046,"mutability":"mutable","name":"admin_","nameLocation":"2029:6:68","nodeType":"VariableDeclaration","scope":20089,"src":"2021:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20045,"name":"address","nodeType":"ElementaryTypeName","src":"2021:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20048,"mutability":"mutable","name":"_data","nameLocation":"2058:5:68","nodeType":"VariableDeclaration","scope":20089,"src":"2045:18:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":20047,"name":"bytes","nodeType":"ElementaryTypeName","src":"2045:5:68","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1987:82:68"},"returnParameters":{"id":20054,"nodeType":"ParameterList","parameters":[],"src":"2106:0:68"},"scope":20208,"src":"1976:499:68","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":20104,"nodeType":"Block","src":"2635:115:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20092,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2649:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2653:6:68","memberName":"sender","nodeType":"MemberAccess","src":"2649:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":20094,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[20207],"referencedDeclaration":20207,"src":"2663:9:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":20095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2663:11:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2649:25:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":20102,"nodeType":"Block","src":"2708:36:68","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":20099,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19315,"src":"2722:9:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":20100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2722:11:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20101,"nodeType":"ExpressionStatement","src":"2722:11:68"}]},"id":20103,"nodeType":"IfStatement","src":"2645:99:68","trueBody":{"id":20098,"nodeType":"Block","src":"2676:26:68","statements":[{"id":20097,"nodeType":"PlaceholderStatement","src":"2690:1:68"}]}}]},"documentation":{"id":20090,"nodeType":"StructuredDocumentation","src":"2481:130:68","text":" @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin."},"id":20105,"name":"ifAdmin","nameLocation":"2625:7:68","nodeType":"ModifierDefinition","parameters":{"id":20091,"nodeType":"ParameterList","parameters":[],"src":"2632:2:68"},"src":"2616:134:68","virtual":false,"visibility":"internal"},{"body":{"id":20118,"nodeType":"Block","src":"3251:37:68","statements":[{"expression":{"id":20116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20113,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20111,"src":"3261:6:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":20114,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[20207],"referencedDeclaration":20207,"src":"3270:9:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":20115,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3270:11:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3261:20:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20117,"nodeType":"ExpressionStatement","src":"3261:20:68"}]},"documentation":{"id":20106,"nodeType":"StructuredDocumentation","src":"2756:431:68","text":" @dev Returns the current admin.\n NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`"},"functionSelector":"f851a440","id":20119,"implemented":true,"kind":"function","modifiers":[{"id":20109,"kind":"modifierInvocation","modifierName":{"id":20108,"name":"ifAdmin","nameLocations":["3218:7:68"],"nodeType":"IdentifierPath","referencedDeclaration":20105,"src":"3218:7:68"},"nodeType":"ModifierInvocation","src":"3218:7:68"}],"name":"admin","nameLocation":"3201:5:68","nodeType":"FunctionDefinition","parameters":{"id":20107,"nodeType":"ParameterList","parameters":[],"src":"3206:2:68"},"returnParameters":{"id":20112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20111,"mutability":"mutable","name":"admin_","nameLocation":"3243:6:68","nodeType":"VariableDeclaration","scope":20119,"src":"3235:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20110,"name":"address","nodeType":"ElementaryTypeName","src":"3235:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3234:16:68"},"scope":20208,"src":"3192:96:68","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20132,"nodeType":"Block","src":"3825:52:68","statements":[{"expression":{"id":20130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20127,"name":"implementation_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20125,"src":"3835:15:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":20128,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[18966],"referencedDeclaration":18966,"src":"3853:15:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":20129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3853:17:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3835:35:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20131,"nodeType":"ExpressionStatement","src":"3835:35:68"}]},"documentation":{"id":20120,"nodeType":"StructuredDocumentation","src":"3294:449:68","text":" @dev Returns the current implementation.\n NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`"},"functionSelector":"5c60da1b","id":20133,"implemented":true,"kind":"function","modifiers":[{"id":20123,"kind":"modifierInvocation","modifierName":{"id":20122,"name":"ifAdmin","nameLocations":["3783:7:68"],"nodeType":"IdentifierPath","referencedDeclaration":20105,"src":"3783:7:68"},"nodeType":"ModifierInvocation","src":"3783:7:68"}],"name":"implementation","nameLocation":"3757:14:68","nodeType":"FunctionDefinition","parameters":{"id":20121,"nodeType":"ParameterList","parameters":[],"src":"3771:2:68"},"returnParameters":{"id":20126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20125,"mutability":"mutable","name":"implementation_","nameLocation":"3808:15:68","nodeType":"VariableDeclaration","scope":20133,"src":"3800:23:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20124,"name":"address","nodeType":"ElementaryTypeName","src":"3800:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3799:25:68"},"scope":20208,"src":"3748:129:68","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20150,"nodeType":"Block","src":"4100:71:68","statements":[{"expression":{"arguments":[{"id":20142,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20136,"src":"4128:17:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"","id":20145,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4153:2:68","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":20144,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4147:5:68","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":20143,"name":"bytes","nodeType":"ElementaryTypeName","src":"4147:5:68","typeDescriptions":{}}},"id":20146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4147:9:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"66616c7365","id":20147,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4158:5:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":20141,"name":"_upgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19068,"src":"4110:17:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":20148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4110:54:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20149,"nodeType":"ExpressionStatement","src":"4110:54:68"}]},"documentation":{"id":20134,"nodeType":"StructuredDocumentation","src":"3883:149:68","text":" @dev Upgrade the implementation of the proxy.\n NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}."},"functionSelector":"3659cfe6","id":20151,"implemented":true,"kind":"function","modifiers":[{"id":20139,"kind":"modifierInvocation","modifierName":{"id":20138,"name":"ifAdmin","nameLocations":["4092:7:68"],"nodeType":"IdentifierPath","referencedDeclaration":20105,"src":"4092:7:68"},"nodeType":"ModifierInvocation","src":"4092:7:68"}],"name":"upgradeTo","nameLocation":"4046:9:68","nodeType":"FunctionDefinition","parameters":{"id":20137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20136,"mutability":"mutable","name":"newImplementation","nameLocation":"4064:17:68","nodeType":"VariableDeclaration","scope":20151,"src":"4056:25:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20135,"name":"address","nodeType":"ElementaryTypeName","src":"4056:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4055:27:68"},"returnParameters":{"id":20140,"nodeType":"ParameterList","parameters":[],"src":"4100:0:68"},"scope":20208,"src":"4037:134:68","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20167,"nodeType":"Block","src":"4646:65:68","statements":[{"expression":{"arguments":[{"id":20162,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20154,"src":"4674:17:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20163,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20156,"src":"4693:4:68","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"hexValue":"74727565","id":20164,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4699:4:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":20161,"name":"_upgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19068,"src":"4656:17:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":20165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4656:48:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20166,"nodeType":"ExpressionStatement","src":"4656:48:68"}]},"documentation":{"id":20152,"nodeType":"StructuredDocumentation","src":"4177:365:68","text":" @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n proxied contract.\n NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}."},"functionSelector":"4f1ef286","id":20168,"implemented":true,"kind":"function","modifiers":[{"id":20159,"kind":"modifierInvocation","modifierName":{"id":20158,"name":"ifAdmin","nameLocations":["4638:7:68"],"nodeType":"IdentifierPath","referencedDeclaration":20105,"src":"4638:7:68"},"nodeType":"ModifierInvocation","src":"4638:7:68"}],"name":"upgradeToAndCall","nameLocation":"4556:16:68","nodeType":"FunctionDefinition","parameters":{"id":20157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20154,"mutability":"mutable","name":"newImplementation","nameLocation":"4581:17:68","nodeType":"VariableDeclaration","scope":20168,"src":"4573:25:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20153,"name":"address","nodeType":"ElementaryTypeName","src":"4573:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20156,"mutability":"mutable","name":"data","nameLocation":"4615:4:68","nodeType":"VariableDeclaration","scope":20168,"src":"4600:19:68","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":20155,"name":"bytes","nodeType":"ElementaryTypeName","src":"4600:5:68","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4572:48:68"},"returnParameters":{"id":20160,"nodeType":"ParameterList","parameters":[],"src":"4646:0:68"},"scope":20208,"src":"4547:164:68","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":20177,"nodeType":"Block","src":"4830:35:68","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":20174,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[20207],"referencedDeclaration":20207,"src":"4847:9:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":20175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4847:11:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":20173,"id":20176,"nodeType":"Return","src":"4840:18:68"}]},"documentation":{"id":20169,"nodeType":"StructuredDocumentation","src":"4717:50:68","text":" @dev Returns the current admin."},"id":20178,"implemented":true,"kind":"function","modifiers":[],"name":"_admin","nameLocation":"4781:6:68","nodeType":"FunctionDefinition","parameters":{"id":20170,"nodeType":"ParameterList","parameters":[],"src":"4787:2:68"},"returnParameters":{"id":20173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20172,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20178,"src":"4821:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20171,"name":"address","nodeType":"ElementaryTypeName","src":"4821:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4820:9:68"},"scope":20208,"src":"4772:93:68","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[19336],"body":{"id":20197,"nodeType":"Block","src":"5039:154:68","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20184,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5057:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5061:6:68","memberName":"sender","nodeType":"MemberAccess","src":"5057:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":20186,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[20207],"referencedDeclaration":20207,"src":"5071:9:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":20187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5071:11:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5057:25:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574","id":20189,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5084:68:68","typeDescriptions":{"typeIdentifier":"t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d","typeString":"literal_string \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\""},"value":"TransparentUpgradeableProxy: admin cannot fallback to proxy target"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d","typeString":"literal_string \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\""}],"id":20183,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5049:7:68","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5049:104:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20191,"nodeType":"ExpressionStatement","src":"5049:104:68"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20192,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"5163:5:68","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_OptimizedTransparentUpgradeableProxy_$20208_$","typeString":"type(contract super OptimizedTransparentUpgradeableProxy)"}},"id":20194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5169:15:68","memberName":"_beforeFallback","nodeType":"MemberAccess","referencedDeclaration":19336,"src":"5163:21:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":20195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5163:23:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20196,"nodeType":"ExpressionStatement","src":"5163:23:68"}]},"documentation":{"id":20179,"nodeType":"StructuredDocumentation","src":"4871:110:68","text":" @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}."},"id":20198,"implemented":true,"kind":"function","modifiers":[],"name":"_beforeFallback","nameLocation":"4995:15:68","nodeType":"FunctionDefinition","overrides":{"id":20181,"nodeType":"OverrideSpecifier","overrides":[],"src":"5030:8:68"},"parameters":{"id":20180,"nodeType":"ParameterList","parameters":[],"src":"5010:2:68"},"returnParameters":{"id":20182,"nodeType":"ParameterList","parameters":[],"src":"5039:0:68"},"scope":20208,"src":"4986:207:68","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"baseFunctions":[19145],"body":{"id":20206,"nodeType":"Block","src":"5269:30:68","statements":[{"expression":{"id":20204,"name":"_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20041,"src":"5286:6:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":20203,"id":20205,"nodeType":"Return","src":"5279:13:68"}]},"id":20207,"implemented":true,"kind":"function","modifiers":[],"name":"_getAdmin","nameLocation":"5208:9:68","nodeType":"FunctionDefinition","overrides":{"id":20200,"nodeType":"OverrideSpecifier","overrides":[],"src":"5242:8:68"},"parameters":{"id":20199,"nodeType":"ParameterList","parameters":[],"src":"5217:2:68"},"returnParameters":{"id":20203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20202,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20207,"src":"5260:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20201,"name":"address","nodeType":"ElementaryTypeName","src":"5260:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5259:9:68"},"scope":20208,"src":"5199:100:68","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":20209,"src":"1653:3648:68","usedErrors":[],"usedEvents":[18986,19132,19197]}],"src":"118:5184:68"},"id":68}},"contracts":{"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol":{"Ownable2StepUpgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Contract module which provides access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership} and {acceptOwnership}. This module is used through inheritance. It will make available all functions from parent (Ownable).","events":{"Initialized(uint8)":{"details":"Triggered when the contract has been initialized or reinitialized."}},"kind":"dev","methods":{"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"owner()":{"details":"Returns the address of the current owner."},"pendingOwner()":{"details":"Returns the address of the pending owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."}},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"acceptOwnership()":"79ba5097","owner()":"8da5cb5b","pendingOwner()":"e30c3978","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership} and {acceptOwnership}. This module is used through inheritance. It will make available all functions from parent (Ownable).\",\"events\":{\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"}},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":\"Ownable2StepUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./OwnableUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership} and {acceptOwnership}.\\n *\\n * This module is used through inheritance. It will make available all functions\\n * from parent (Ownable).\\n */\\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\\n    address private _pendingOwner;\\n\\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\\n\\n    function __Ownable2Step_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable2Step_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Returns the address of the pending owner.\\n     */\\n    function pendingOwner() public view virtual returns (address) {\\n        return _pendingOwner;\\n    }\\n\\n    /**\\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\\n        _pendingOwner = newOwner;\\n        emit OwnershipTransferStarted(owner(), newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual override {\\n        delete _pendingOwner;\\n        super._transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev The new owner accepts the ownership transfer.\\n     */\\n    function acceptOwnership() public virtual {\\n        address sender = _msgSender();\\n        require(pendingOwner() == sender, \\\"Ownable2Step: caller is not the new owner\\\");\\n        _transferOwnership(sender);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x9140dabc466abab21b48b72dbda26736b1183a310d0e677d3719d201df026510\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":414,"contract":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:Ownable2StepUpgradeable","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":417,"contract":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:Ownable2StepUpgradeable","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":2820,"contract":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:Ownable2StepUpgradeable","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":118,"contract":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:Ownable2StepUpgradeable","label":"_owner","offset":0,"slot":"51","type":"t_address"},{"astId":238,"contract":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:Ownable2StepUpgradeable","label":"__gap","offset":0,"slot":"52","type":"t_array(t_uint256)49_storage"},{"astId":11,"contract":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:Ownable2StepUpgradeable","label":"_pendingOwner","offset":0,"slot":"101","type":"t_address"},{"astId":105,"contract":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:Ownable2StepUpgradeable","label":"__gap","offset":0,"slot":"102","type":"t_array(t_uint256)49_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol":{"OwnableUpgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.","events":{"Initialized(uint8)":{"details":"Triggered when the contract has been initialized or reinitialized."}},"kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"events\":{\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":\"OwnableUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":414,"contract":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":417,"contract":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":2820,"contract":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":118,"contract":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable","label":"_owner","offset":0,"slot":"51","type":"t_address"},{"astId":238,"contract":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable","label":"__gap","offset":0,"slot":"52","type":"t_array(t_uint256)49_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/interfaces/IERC4626Upgradeable.sol":{"IERC4626Upgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"assetTokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"totalManagedAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in https://eips.ethereum.org/EIPS/eip-4626[ERC-4626]. _Available since v4.7._","events":{"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"kind":"dev","methods":{"allowance(address,address)":{"details":"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."},"approve(address,uint256)":{"details":"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event."},"asset()":{"details":"Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert."},"balanceOf(address)":{"details":"Returns the amount of tokens owned by `account`."},"convertToAssets(uint256)":{"details":"Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and from."},"convertToShares(uint256)":{"details":"Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and from."},"decimals()":{"details":"Returns the decimals places of the token."},"deposit(uint256,address)":{"details":"Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the   deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not   approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"maxDeposit(address)":{"details":"Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert."},"maxMint(address)":{"details":"Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert."},"maxRedeem(address)":{"details":"Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert."},"maxWithdraw(address)":{"details":"Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert."},"mint(uint256,address)":{"details":"Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint   execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not   approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"name()":{"details":"Returns the name of the token."},"previewDeposit(uint256)":{"details":"Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit   call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called   in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the   deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing."},"previewMint(uint256)":{"details":"Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call   in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the   same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint   would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting."},"previewRedeem(uint256)":{"details":"Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call   in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the   same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the   redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming."},"previewWithdraw(uint256)":{"details":"Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw   call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if   called   in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though   the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing."},"redeem(uint256,address,address)":{"details":"Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the   redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner   not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately."},"symbol()":{"details":"Returns the symbol of the token."},"totalAssets()":{"details":"Returns the total amount of the underlying asset that is “managed” by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert."},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"withdraw(uint256,address,address)":{"details":"Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the   withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner   not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","asset()":"38d52e0f","balanceOf(address)":"70a08231","convertToAssets(uint256)":"07a2d13a","convertToShares(uint256)":"c6e6f592","decimals()":"313ce567","deposit(uint256,address)":"6e553f65","maxDeposit(address)":"402d267d","maxMint(address)":"c63d75b6","maxRedeem(address)":"d905777e","maxWithdraw(address)":"ce96cb77","mint(uint256,address)":"94bf804d","name()":"06fdde03","previewDeposit(uint256)":"ef8b30f7","previewMint(uint256)":"b3d7f6b9","previewRedeem(uint256)":"4cdad506","previewWithdraw(uint256)":"0a28a477","redeem(uint256,address,address)":"ba087652","symbol()":"95d89b41","totalAssets()":"01e1d114","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256,address,address)":"b460af94"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"assetTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"convertToAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"convertToShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalManagedAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC4626 \\\"Tokenized Vault Standard\\\", as defined in https://eips.ethereum.org/EIPS/eip-4626[ERC-4626]. _Available since v4.7._\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"asset()\":{\"details\":\"Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"convertToAssets(uint256)\":{\"details\":\"Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"convertToShares(uint256)\":{\"details\":\"Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"deposit(uint256,address)\":{\"details\":\"Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the   deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not   approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"maxDeposit(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert.\"},\"maxMint(address)\":{\"details\":\"Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert.\"},\"maxRedeem(address)\":{\"details\":\"Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert.\"},\"maxWithdraw(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert.\"},\"mint(uint256,address)\":{\"details\":\"Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint   execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not   approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"previewDeposit(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit   call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called   in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the   deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"previewMint(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call   in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the   same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint   would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting.\"},\"previewRedeem(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call   in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the   same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the   redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming.\"},\"previewWithdraw(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw   call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if   called   in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though   the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"redeem(uint256,address,address)\":{\"details\":\"Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the   redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner   not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalAssets()\":{\"details\":\"Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"withdraw(uint256,address,address)\":{\"details\":\"Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the   withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner   not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/interfaces/IERC4626Upgradeable.sol\":\"IERC4626Upgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/interfaces/IERC4626Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC4626.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../token/ERC20/IERC20Upgradeable.sol\\\";\\nimport \\\"../token/ERC20/extensions/IERC20MetadataUpgradeable.sol\\\";\\n\\n/**\\n * @dev Interface of the ERC4626 \\\"Tokenized Vault Standard\\\", as defined in\\n * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\\n *\\n * _Available since v4.7._\\n */\\ninterface IERC4626Upgradeable is IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);\\n\\n    event Withdraw(\\n        address indexed sender,\\n        address indexed receiver,\\n        address indexed owner,\\n        uint256 assets,\\n        uint256 shares\\n    );\\n\\n    /**\\n     * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\\n     *\\n     * - MUST be an ERC-20 token contract.\\n     * - MUST NOT revert.\\n     */\\n    function asset() external view returns (address assetTokenAddress);\\n\\n    /**\\n     * @dev Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault.\\n     *\\n     * - SHOULD include any compounding that occurs from yield.\\n     * - MUST be inclusive of any fees that are charged against assets in the Vault.\\n     * - MUST NOT revert.\\n     */\\n    function totalAssets() external view returns (uint256 totalManagedAssets);\\n\\n    /**\\n     * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\\n     * scenario where all the conditions are met.\\n     *\\n     * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\\n     * - MUST NOT show any variations depending on the caller.\\n     * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the\\n     * \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and\\n     * from.\\n     */\\n    function convertToShares(uint256 assets) external view returns (uint256 shares);\\n\\n    /**\\n     * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\\n     * scenario where all the conditions are met.\\n     *\\n     * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\\n     * - MUST NOT show any variations depending on the caller.\\n     * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the\\n     * \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and\\n     * from.\\n     */\\n    function convertToAssets(uint256 shares) external view returns (uint256 assets);\\n\\n    /**\\n     * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\\n     * through a deposit call.\\n     *\\n     * - MUST return a limited value if receiver is subject to some deposit limit.\\n     * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\\n     * - MUST NOT revert.\\n     */\\n    function maxDeposit(address receiver) external view returns (uint256 maxAssets);\\n\\n    /**\\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\\n     * current on-chain conditions.\\n     *\\n     * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\\n     *   call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\\n     *   in the same transaction.\\n     * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\\n     *   deposit would be accepted, regardless if the user has enough tokens approved, etc.\\n     * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\\n     * share price or some other type of condition, meaning the depositor will lose assets by depositing.\\n     */\\n    function previewDeposit(uint256 assets) external view returns (uint256 shares);\\n\\n    /**\\n     * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\\n     *\\n     * - MUST emit the Deposit event.\\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\\n     *   deposit execution, and are accounted for during deposit.\\n     * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\\n     *   approving enough underlying tokens to the Vault contract, etc).\\n     *\\n     * NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\\n     */\\n    function deposit(uint256 assets, address receiver) external returns (uint256 shares);\\n\\n    /**\\n     * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\\n     * - MUST return a limited value if receiver is subject to some mint limit.\\n     * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\\n     * - MUST NOT revert.\\n     */\\n    function maxMint(address receiver) external view returns (uint256 maxShares);\\n\\n    /**\\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\\n     * current on-chain conditions.\\n     *\\n     * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\\n     *   in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\\n     *   same transaction.\\n     * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\\n     *   would be accepted, regardless if the user has enough tokens approved, etc.\\n     * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\\n     * share price or some other type of condition, meaning the depositor will lose assets by minting.\\n     */\\n    function previewMint(uint256 shares) external view returns (uint256 assets);\\n\\n    /**\\n     * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\\n     *\\n     * - MUST emit the Deposit event.\\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\\n     *   execution, and are accounted for during mint.\\n     * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\\n     *   approving enough underlying tokens to the Vault contract, etc).\\n     *\\n     * NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\\n     */\\n    function mint(uint256 shares, address receiver) external returns (uint256 assets);\\n\\n    /**\\n     * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\\n     * Vault, through a withdraw call.\\n     *\\n     * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\\n     * - MUST NOT revert.\\n     */\\n    function maxWithdraw(address owner) external view returns (uint256 maxAssets);\\n\\n    /**\\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\\n     * given current on-chain conditions.\\n     *\\n     * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\\n     *   call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\\n     *   called\\n     *   in the same transaction.\\n     * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\\n     *   the withdrawal would be accepted, regardless if the user has enough shares, etc.\\n     * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\\n     * share price or some other type of condition, meaning the depositor will lose assets by depositing.\\n     */\\n    function previewWithdraw(uint256 assets) external view returns (uint256 shares);\\n\\n    /**\\n     * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\\n     *\\n     * - MUST emit the Withdraw event.\\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\\n     *   withdraw execution, and are accounted for during withdraw.\\n     * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\\n     *   not having enough shares, etc).\\n     *\\n     * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\\n     * Those methods should be performed separately.\\n     */\\n    function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);\\n\\n    /**\\n     * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\\n     * through a redeem call.\\n     *\\n     * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\\n     * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\\n     * - MUST NOT revert.\\n     */\\n    function maxRedeem(address owner) external view returns (uint256 maxShares);\\n\\n    /**\\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\\n     * given current on-chain conditions.\\n     *\\n     * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\\n     *   in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\\n     *   same transaction.\\n     * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\\n     *   redemption would be accepted, regardless if the user has enough shares, etc.\\n     * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\\n     * share price or some other type of condition, meaning the depositor will lose assets by redeeming.\\n     */\\n    function previewRedeem(uint256 shares) external view returns (uint256 assets);\\n\\n    /**\\n     * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\\n     *\\n     * - MUST emit the Withdraw event.\\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\\n     *   redeem execution, and are accounted for during redeem.\\n     * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\\n     *   not having enough shares, etc).\\n     *\\n     * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\\n     * Those methods should be performed separately.\\n     */\\n    function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);\\n}\\n\",\"keccak256\":\"0xf867351fb48f5c0e3b45f085ce60f374b785417f84370cb2ffb57f421931e7eb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol":{"Initializable":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"}],"devdoc":{"custom:oz-upgrades-unsafe-allow":"constructor constructor() {     _disableInitializers(); } ``` ====","details":"This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. The initialization functions use a version number. Once a version number is used, it is consumed and cannot be reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in case an upgrade adds a module that needs to be initialized. For example: [.hljs-theme-light.nopadding] ```solidity contract MyToken is ERC20Upgradeable {     function initialize() initializer public {         __ERC20_init(\"MyToken\", \"MTK\");     } } contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {     function initializeV2() reinitializer(2) public {         __ERC20Permit_init(\"MyToken\");     } } ``` TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: [.hljs-theme-light.nopadding] ```","events":{"Initialized(uint8)":{"details":"Triggered when the contract has been initialized or reinitialized."}},"kind":"dev","methods":{},"stateVariables":{"_initialized":{"custom:oz-retyped-from":"bool","details":"Indicates that the contract has been initialized."},"_initializing":{"details":"Indicates that the contract is in the process of being initialized."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor constructor() {     _disableInitializers(); } ``` ====\",\"details\":\"This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. The initialization functions use a version number. Once a version number is used, it is consumed and cannot be reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in case an upgrade adds a module that needs to be initialized. For example: [.hljs-theme-light.nopadding] ```solidity contract MyToken is ERC20Upgradeable {     function initialize() initializer public {         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");     } } contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {     function initializeV2() reinitializer(2) public {         __ERC20Permit_init(\\\"MyToken\\\");     } } ``` TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: [.hljs-theme-light.nopadding] ```\",\"events\":{\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"_initialized\":{\"custom:oz-retyped-from\":\"bool\",\"details\":\"Indicates that the contract has been initialized.\"},\"_initializing\":{\"details\":\"Indicates that the contract is in the process of being initialized.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":\"Initializable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":414,"contract":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:Initializable","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":417,"contract":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:Initializable","label":"_initializing","offset":1,"slot":"0","type":"t_bool"}],"types":{"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol":{"ReentrancyGuardUpgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"}],"devdoc":{"details":"Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].","events":{"Initialized(uint8)":{"details":"Triggered when the contract has been initialized or reinitialized."}},"kind":"dev","methods":{},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\",\"events\":{\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol\":\"ReentrancyGuardUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuardUpgradeable is Initializable {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    function __ReentrancyGuard_init() internal onlyInitializing {\\n        __ReentrancyGuard_init_unchained();\\n    }\\n\\n    function __ReentrancyGuard_init_unchained() internal onlyInitializing {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Returns true if the reentrancy guard is currently set to \\\"entered\\\", which indicates there is a\\n     * `nonReentrant` function in the call stack.\\n     */\\n    function _reentrancyGuardEntered() internal view returns (bool) {\\n        return _status == _ENTERED;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2025ccf05f6f1f2fd4e078e552836f525a1864e3854ed555047cd732320ab29b\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":414,"contract":"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:ReentrancyGuardUpgradeable","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":417,"contract":"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:ReentrancyGuardUpgradeable","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":591,"contract":"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:ReentrancyGuardUpgradeable","label":"_status","offset":0,"slot":"1","type":"t_uint256"},{"astId":660,"contract":"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:ReentrancyGuardUpgradeable","label":"__gap","offset":0,"slot":"2","type":"t_array(t_uint256)49_storage"}],"types":{"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol":{"ERC20Upgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detailed writeup see our guide https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. The default value of {decimals} is 18. To change this, you should override this function so it returns a different value. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}.","events":{"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"Initialized(uint8)":{"details":"Triggered when the contract has been initialized or reinitialized."},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"kind":"dev","methods":{"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"decreaseAllowance(address,uint256)":{"details":"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."},"increaseAllowance(address,uint256)":{"details":"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."},"name()":{"details":"Returns the name of the token."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`."}},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080604052348015600f57600080fd5b506109ae8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461011f57806370a082311461013257806395d89b411461015b578063a457c2d714610163578063a9059cbb14610176578063dd62ed3e1461018957600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ec57806323b872dd146100fd578063313ce56714610110575b600080fd5b6100b661019c565b6040516100c39190610560565b60405180910390f35b6100df6100da3660046105bc565b61022e565b6040516100c39190610603565b6035545b6040516100c39190610617565b6100df61010b366004610625565b610248565b60126040516100c3919061067e565b6100df61012d3660046105bc565b61026c565b6100f061014036600461068c565b6001600160a01b031660009081526033602052604090205490565b6100b661028e565b6100df6101713660046105bc565b61029d565b6100df6101843660046105bc565b6102e3565b6100f06101973660046106b5565b6102f1565b6060603680546101ab906106fe565b80601f01602080910402602001604051908101604052809291908181526020018280546101d7906106fe565b80156102245780601f106101f957610100808354040283529160200191610224565b820191906000526020600020905b81548152906001019060200180831161020757829003601f168201915b5050505050905090565b60003361023c81858561031c565b60019150505b92915050565b6000336102568582856103d0565b61026185858561041a565b506001949350505050565b60003361023c81858561027f83836102f1565b6102899190610740565b61031c565b6060603780546101ab906106fe565b600033816102ab82866102f1565b9050838110156102d65760405162461bcd60e51b81526004016102cd90610798565b60405180910390fd5b610261828686840361031c565b60003361023c81858561041a565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166103425760405162461bcd60e51b81526004016102cd906107e9565b6001600160a01b0382166103685760405162461bcd60e51b81526004016102cd90610838565b6001600160a01b0380841660008181526034602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103c3908590610617565b60405180910390a3505050565b60006103dc84846102f1565b9050600019811461041457818110156104075760405162461bcd60e51b81526004016102cd90610848565b610414848484840361031c565b50505050565b6001600160a01b0383166104405760405162461bcd60e51b81526004016102cd906108c5565b6001600160a01b0382166104665760405162461bcd60e51b81526004016102cd90610915565b6001600160a01b0383166000908152603360205260409020548181101561049f5760405162461bcd60e51b81526004016102cd90610968565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104fd908690610617565b60405180910390a3610414565b60005b8381101561052557818101518382015260200161050d565b50506000910152565b6000610538825190565b80845260208401935061054f81856020860161050a565b601f01601f19169290920192915050565b60208082528101610571818461052e565b9392505050565b60006001600160a01b038216610242565b61059281610578565b811461059d57600080fd5b50565b803561024281610589565b80610592565b8035610242816105ab565b600080604083850312156105d2576105d2600080fd5b60006105de85856105a0565b92505060206105ef858286016105b1565b9150509250929050565b8015155b82525050565b6020810161024282846105f9565b806105fd565b602081016102428284610611565b60008060006060848603121561063d5761063d600080fd5b600061064986866105a0565b935050602061065a868287016105a0565b925050604061066b868287016105b1565b9150509250925092565b60ff81166105fd565b602081016102428284610675565b6000602082840312156106a1576106a1600080fd5b60006106ad84846105a0565b949350505050565b600080604083850312156106cb576106cb600080fd5b60006106d785856105a0565b92505060206105ef858286016105a0565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061071257607f821691505b602082108103610724576107246106e8565b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102425761024261072a565b602581526000602082017f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77815264207a65726f60d81b602082015291505b5060400190565b6020808252810161024281610753565b602481526000602082017f45524332303a20617070726f76652066726f6d20746865207a65726f206164648152637265737360e01b60208201529150610791565b60208082528101610242816107a8565b602281526000602082017f45524332303a20617070726f766520746f20746865207a65726f206164647265815261737360f01b60208201529150610791565b60208082528101610242816107f9565b6020808252810161024281601d81527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000602082015260400190565b602581526000602082017f45524332303a207472616e736665722066726f6d20746865207a65726f206164815264647265737360d81b60208201529150610791565b6020808252810161024281610883565b602381526000602082017f45524332303a207472616e7366657220746f20746865207a65726f206164647281526265737360e81b60208201529150610791565b60208082528101610242816108d5565b602681526000602082017f45524332303a207472616e7366657220616d6f756e7420657863656564732062815265616c616e636560d01b60208201529150610791565b602080825281016102428161092556fea2646970667358221220dd279f335dd3279a00c62091413e94606f4e90c7b157d0d8c13632c61854baaa64736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9AE DUP1 PUSH2 0x1F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x11F JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x132 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x15B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x163 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x189 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xEC JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0xFD JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x110 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x19C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0x560 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xDF PUSH2 0xDA CALLDATASIZE PUSH1 0x4 PUSH2 0x5BC JUMP JUMPDEST PUSH2 0x22E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0x603 JUMP JUMPDEST PUSH1 0x35 SLOAD JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0x617 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x10B CALLDATASIZE PUSH1 0x4 PUSH2 0x625 JUMP JUMPDEST PUSH2 0x248 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x40 MLOAD PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0x67E JUMP JUMPDEST PUSH2 0xDF PUSH2 0x12D CALLDATASIZE PUSH1 0x4 PUSH2 0x5BC JUMP JUMPDEST PUSH2 0x26C JUMP JUMPDEST PUSH2 0xF0 PUSH2 0x140 CALLDATASIZE PUSH1 0x4 PUSH2 0x68C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xB6 PUSH2 0x28E JUMP JUMPDEST PUSH2 0xDF PUSH2 0x171 CALLDATASIZE PUSH1 0x4 PUSH2 0x5BC JUMP JUMPDEST PUSH2 0x29D JUMP JUMPDEST PUSH2 0xDF PUSH2 0x184 CALLDATASIZE PUSH1 0x4 PUSH2 0x5BC JUMP JUMPDEST PUSH2 0x2E3 JUMP JUMPDEST PUSH2 0xF0 PUSH2 0x197 CALLDATASIZE PUSH1 0x4 PUSH2 0x6B5 JUMP JUMPDEST PUSH2 0x2F1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x36 DUP1 SLOAD PUSH2 0x1AB SWAP1 PUSH2 0x6FE JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1D7 SWAP1 PUSH2 0x6FE JUMP JUMPDEST DUP1 ISZERO PUSH2 0x224 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1F9 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x224 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x207 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x23C DUP2 DUP6 DUP6 PUSH2 0x31C JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x256 DUP6 DUP3 DUP6 PUSH2 0x3D0 JUMP JUMPDEST PUSH2 0x261 DUP6 DUP6 DUP6 PUSH2 0x41A JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x23C DUP2 DUP6 DUP6 PUSH2 0x27F DUP4 DUP4 PUSH2 0x2F1 JUMP JUMPDEST PUSH2 0x289 SWAP2 SWAP1 PUSH2 0x740 JUMP JUMPDEST PUSH2 0x31C JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x1AB SWAP1 PUSH2 0x6FE JUMP JUMPDEST PUSH1 0x0 CALLER DUP2 PUSH2 0x2AB DUP3 DUP7 PUSH2 0x2F1 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x2D6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2CD SWAP1 PUSH2 0x798 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x261 DUP3 DUP7 DUP7 DUP5 SUB PUSH2 0x31C JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x23C DUP2 DUP6 DUP6 PUSH2 0x41A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x342 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2CD SWAP1 PUSH2 0x7E9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x368 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2CD SWAP1 PUSH2 0x838 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x3C3 SWAP1 DUP6 SWAP1 PUSH2 0x617 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3DC DUP5 DUP5 PUSH2 0x2F1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x414 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x407 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2CD SWAP1 PUSH2 0x848 JUMP JUMPDEST PUSH2 0x414 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x31C JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x440 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2CD SWAP1 PUSH2 0x8C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x466 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2CD SWAP1 PUSH2 0x915 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x49F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2CD SWAP1 PUSH2 0x968 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE SWAP3 DUP7 AND DUP1 DUP3 MSTORE SWAP1 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE SWAP2 MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x4FD SWAP1 DUP7 SWAP1 PUSH2 0x617 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x414 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x525 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x50D JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x538 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x54F DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x50A JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x571 DUP2 DUP5 PUSH2 0x52E JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x242 JUMP JUMPDEST PUSH2 0x592 DUP2 PUSH2 0x578 JUMP JUMPDEST DUP2 EQ PUSH2 0x59D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x242 DUP2 PUSH2 0x589 JUMP JUMPDEST DUP1 PUSH2 0x592 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x242 DUP2 PUSH2 0x5AB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5D2 JUMPI PUSH2 0x5D2 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5DE DUP6 DUP6 PUSH2 0x5A0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x5EF DUP6 DUP3 DUP7 ADD PUSH2 0x5B1 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x242 DUP3 DUP5 PUSH2 0x5F9 JUMP JUMPDEST DUP1 PUSH2 0x5FD JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x242 DUP3 DUP5 PUSH2 0x611 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x63D JUMPI PUSH2 0x63D PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x649 DUP7 DUP7 PUSH2 0x5A0 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x65A DUP7 DUP3 DUP8 ADD PUSH2 0x5A0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x66B DUP7 DUP3 DUP8 ADD PUSH2 0x5B1 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0xFF DUP2 AND PUSH2 0x5FD JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x242 DUP3 DUP5 PUSH2 0x675 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6A1 JUMPI PUSH2 0x6A1 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x6AD DUP5 DUP5 PUSH2 0x5A0 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x6CB JUMPI PUSH2 0x6CB PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x6D7 DUP6 DUP6 PUSH2 0x5A0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x5EF DUP6 DUP3 DUP7 ADD PUSH2 0x5A0 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP2 DIV PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x712 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x724 JUMPI PUSH2 0x724 PUSH2 0x6E8 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x242 JUMPI PUSH2 0x242 PUSH2 0x72A JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 DUP2 MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x242 DUP2 PUSH2 0x753 JUMP JUMPDEST PUSH1 0x24 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 DUP2 MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x791 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x242 DUP2 PUSH2 0x7A8 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 DUP2 MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x791 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x242 DUP2 PUSH2 0x7F9 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x242 DUP2 PUSH1 0x1D DUP2 MSTORE PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 DUP2 MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x791 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x242 DUP2 PUSH2 0x883 JUMP JUMPDEST PUSH1 0x23 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 DUP2 MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x791 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x242 DUP2 PUSH2 0x8D5 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 DUP2 MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x791 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x242 DUP2 PUSH2 0x925 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD 0x27 SWAP16 CALLER TSTORE 0xD3 0x27 SWAP11 STOP 0xC6 KECCAK256 SWAP2 COINBASE RETURNDATACOPY SWAP5 PUSH1 0x6F 0x4E SWAP1 0xC7 0xB1 JUMPI 0xD0 0xD8 0xC1 CALLDATASIZE ORIGIN 0xC6 XOR SLOAD 0xBA 0xAA PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ","sourceMap":"1632:11861:5:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_afterTokenTransfer_1268":{"entryPoint":null,"id":1268,"parameterSlots":3,"returnSlots":0},"@_approve_1203":{"entryPoint":796,"id":1203,"parameterSlots":3,"returnSlots":0},"@_beforeTokenTransfer_1257":{"entryPoint":null,"id":1257,"parameterSlots":3,"returnSlots":0},"@_msgSender_2798":{"entryPoint":null,"id":2798,"parameterSlots":0,"returnSlots":1},"@_spendAllowance_1246":{"entryPoint":976,"id":1246,"parameterSlots":3,"returnSlots":0},"@_transfer_1029":{"entryPoint":1050,"id":1029,"parameterSlots":3,"returnSlots":0},"@allowance_824":{"entryPoint":753,"id":824,"parameterSlots":2,"returnSlots":1},"@approve_849":{"entryPoint":558,"id":849,"parameterSlots":2,"returnSlots":1},"@balanceOf_781":{"entryPoint":null,"id":781,"parameterSlots":1,"returnSlots":1},"@decimals_757":{"entryPoint":null,"id":757,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_952":{"entryPoint":669,"id":952,"parameterSlots":2,"returnSlots":1},"@increaseAllowance_911":{"entryPoint":620,"id":911,"parameterSlots":2,"returnSlots":1},"@name_737":{"entryPoint":412,"id":737,"parameterSlots":0,"returnSlots":1},"@symbol_747":{"entryPoint":654,"id":747,"parameterSlots":0,"returnSlots":1},"@totalSupply_767":{"entryPoint":null,"id":767,"parameterSlots":0,"returnSlots":1},"@transferFrom_882":{"entryPoint":584,"id":882,"parameterSlots":3,"returnSlots":1},"@transfer_806":{"entryPoint":739,"id":806,"parameterSlots":2,"returnSlots":1},"abi_decode_t_address":{"entryPoint":1440,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_uint256":{"entryPoint":1457,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":1676,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":1717,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":1573,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":1468,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_t_bool_to_t_bool_fromStack":{"entryPoint":1529,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack":{"entryPoint":1326,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f_to_t_string_memory_ptr_fromStack":{"entryPoint":2261,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029_to_t_string_memory_ptr_fromStack":{"entryPoint":2041,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe_to_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6_to_t_string_memory_ptr_fromStack":{"entryPoint":2341,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea_to_t_string_memory_ptr_fromStack":{"entryPoint":2179,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208_to_t_string_memory_ptr_fromStack":{"entryPoint":1960,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8_to_t_string_memory_ptr_fromStack":{"entryPoint":1875,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_uint256_to_t_uint256_fromStack":{"entryPoint":1553,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_uint8_to_t_uint8_fromStack":{"entryPoint":1653,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":1539,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1376,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":2325,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":2104,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":2120,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":2408,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":2245,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":2025,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1944,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":1559,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":1662,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_length_t_string_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":1856,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_address":{"entryPoint":1400,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_bool":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":1290,"id":null,"parameterSlots":3,"returnSlots":0},"extract_byte_array_length":{"entryPoint":1790,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":1834,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x22":{"entryPoint":1768,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"round_up_to_mul_of_32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"store_literal_in_memory_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_address":{"entryPoint":1417,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_uint256":{"entryPoint":1451,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:13701:69","nodeType":"YulBlock","src":"0:13701:69","statements":[{"body":{"nativeSrc":"66:40:69","nodeType":"YulBlock","src":"66:40:69","statements":[{"nativeSrc":"77:22:69","nodeType":"YulAssignment","src":"77:22:69","value":{"arguments":[{"name":"value","nativeSrc":"93:5:69","nodeType":"YulIdentifier","src":"93:5:69"}],"functionName":{"name":"mload","nativeSrc":"87:5:69","nodeType":"YulIdentifier","src":"87:5:69"},"nativeSrc":"87:12:69","nodeType":"YulFunctionCall","src":"87:12:69"},"variableNames":[{"name":"length","nativeSrc":"77:6:69","nodeType":"YulIdentifier","src":"77:6:69"}]}]},"name":"array_length_t_string_memory_ptr","nativeSrc":"7:99:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"49:5:69","nodeType":"YulTypedName","src":"49:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"59:6:69","nodeType":"YulTypedName","src":"59:6:69","type":""}],"src":"7:99:69"},{"body":{"nativeSrc":"208:73:69","nodeType":"YulBlock","src":"208:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"225:3:69","nodeType":"YulIdentifier","src":"225:3:69"},{"name":"length","nativeSrc":"230:6:69","nodeType":"YulIdentifier","src":"230:6:69"}],"functionName":{"name":"mstore","nativeSrc":"218:6:69","nodeType":"YulIdentifier","src":"218:6:69"},"nativeSrc":"218:19:69","nodeType":"YulFunctionCall","src":"218:19:69"},"nativeSrc":"218:19:69","nodeType":"YulExpressionStatement","src":"218:19:69"},{"nativeSrc":"246:29:69","nodeType":"YulAssignment","src":"246:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"265:3:69","nodeType":"YulIdentifier","src":"265:3:69"},{"kind":"number","nativeSrc":"270:4:69","nodeType":"YulLiteral","src":"270:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"261:3:69","nodeType":"YulIdentifier","src":"261:3:69"},"nativeSrc":"261:14:69","nodeType":"YulFunctionCall","src":"261:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"246:11:69","nodeType":"YulIdentifier","src":"246:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"112:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"180:3:69","nodeType":"YulTypedName","src":"180:3:69","type":""},{"name":"length","nativeSrc":"185:6:69","nodeType":"YulTypedName","src":"185:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"196:11:69","nodeType":"YulTypedName","src":"196:11:69","type":""}],"src":"112:169:69"},{"body":{"nativeSrc":"349:186:69","nodeType":"YulBlock","src":"349:186:69","statements":[{"nativeSrc":"360:10:69","nodeType":"YulVariableDeclaration","src":"360:10:69","value":{"kind":"number","nativeSrc":"369:1:69","nodeType":"YulLiteral","src":"369:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"364:1:69","nodeType":"YulTypedName","src":"364:1:69","type":""}]},{"body":{"nativeSrc":"429:63:69","nodeType":"YulBlock","src":"429:63:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"454:3:69","nodeType":"YulIdentifier","src":"454:3:69"},{"name":"i","nativeSrc":"459:1:69","nodeType":"YulIdentifier","src":"459:1:69"}],"functionName":{"name":"add","nativeSrc":"450:3:69","nodeType":"YulIdentifier","src":"450:3:69"},"nativeSrc":"450:11:69","nodeType":"YulFunctionCall","src":"450:11:69"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"473:3:69","nodeType":"YulIdentifier","src":"473:3:69"},{"name":"i","nativeSrc":"478:1:69","nodeType":"YulIdentifier","src":"478:1:69"}],"functionName":{"name":"add","nativeSrc":"469:3:69","nodeType":"YulIdentifier","src":"469:3:69"},"nativeSrc":"469:11:69","nodeType":"YulFunctionCall","src":"469:11:69"}],"functionName":{"name":"mload","nativeSrc":"463:5:69","nodeType":"YulIdentifier","src":"463:5:69"},"nativeSrc":"463:18:69","nodeType":"YulFunctionCall","src":"463:18:69"}],"functionName":{"name":"mstore","nativeSrc":"443:6:69","nodeType":"YulIdentifier","src":"443:6:69"},"nativeSrc":"443:39:69","nodeType":"YulFunctionCall","src":"443:39:69"},"nativeSrc":"443:39:69","nodeType":"YulExpressionStatement","src":"443:39:69"}]},"condition":{"arguments":[{"name":"i","nativeSrc":"390:1:69","nodeType":"YulIdentifier","src":"390:1:69"},{"name":"length","nativeSrc":"393:6:69","nodeType":"YulIdentifier","src":"393:6:69"}],"functionName":{"name":"lt","nativeSrc":"387:2:69","nodeType":"YulIdentifier","src":"387:2:69"},"nativeSrc":"387:13:69","nodeType":"YulFunctionCall","src":"387:13:69"},"nativeSrc":"379:113:69","nodeType":"YulForLoop","post":{"nativeSrc":"401:19:69","nodeType":"YulBlock","src":"401:19:69","statements":[{"nativeSrc":"403:15:69","nodeType":"YulAssignment","src":"403:15:69","value":{"arguments":[{"name":"i","nativeSrc":"412:1:69","nodeType":"YulIdentifier","src":"412:1:69"},{"kind":"number","nativeSrc":"415:2:69","nodeType":"YulLiteral","src":"415:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"408:3:69","nodeType":"YulIdentifier","src":"408:3:69"},"nativeSrc":"408:10:69","nodeType":"YulFunctionCall","src":"408:10:69"},"variableNames":[{"name":"i","nativeSrc":"403:1:69","nodeType":"YulIdentifier","src":"403:1:69"}]}]},"pre":{"nativeSrc":"383:3:69","nodeType":"YulBlock","src":"383:3:69","statements":[]},"src":"379:113:69"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"512:3:69","nodeType":"YulIdentifier","src":"512:3:69"},{"name":"length","nativeSrc":"517:6:69","nodeType":"YulIdentifier","src":"517:6:69"}],"functionName":{"name":"add","nativeSrc":"508:3:69","nodeType":"YulIdentifier","src":"508:3:69"},"nativeSrc":"508:16:69","nodeType":"YulFunctionCall","src":"508:16:69"},{"kind":"number","nativeSrc":"526:1:69","nodeType":"YulLiteral","src":"526:1:69","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"501:6:69","nodeType":"YulIdentifier","src":"501:6:69"},"nativeSrc":"501:27:69","nodeType":"YulFunctionCall","src":"501:27:69"},"nativeSrc":"501:27:69","nodeType":"YulExpressionStatement","src":"501:27:69"}]},"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"287:248:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"331:3:69","nodeType":"YulTypedName","src":"331:3:69","type":""},{"name":"dst","nativeSrc":"336:3:69","nodeType":"YulTypedName","src":"336:3:69","type":""},{"name":"length","nativeSrc":"341:6:69","nodeType":"YulTypedName","src":"341:6:69","type":""}],"src":"287:248:69"},{"body":{"nativeSrc":"589:54:69","nodeType":"YulBlock","src":"589:54:69","statements":[{"nativeSrc":"599:38:69","nodeType":"YulAssignment","src":"599:38:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"617:5:69","nodeType":"YulIdentifier","src":"617:5:69"},{"kind":"number","nativeSrc":"624:2:69","nodeType":"YulLiteral","src":"624:2:69","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"613:3:69","nodeType":"YulIdentifier","src":"613:3:69"},"nativeSrc":"613:14:69","nodeType":"YulFunctionCall","src":"613:14:69"},{"arguments":[{"kind":"number","nativeSrc":"633:2:69","nodeType":"YulLiteral","src":"633:2:69","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"629:3:69","nodeType":"YulIdentifier","src":"629:3:69"},"nativeSrc":"629:7:69","nodeType":"YulFunctionCall","src":"629:7:69"}],"functionName":{"name":"and","nativeSrc":"609:3:69","nodeType":"YulIdentifier","src":"609:3:69"},"nativeSrc":"609:28:69","nodeType":"YulFunctionCall","src":"609:28:69"},"variableNames":[{"name":"result","nativeSrc":"599:6:69","nodeType":"YulIdentifier","src":"599:6:69"}]}]},"name":"round_up_to_mul_of_32","nativeSrc":"541:102:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"572:5:69","nodeType":"YulTypedName","src":"572:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"582:6:69","nodeType":"YulTypedName","src":"582:6:69","type":""}],"src":"541:102:69"},{"body":{"nativeSrc":"741:285:69","nodeType":"YulBlock","src":"741:285:69","statements":[{"nativeSrc":"751:53:69","nodeType":"YulVariableDeclaration","src":"751:53:69","value":{"arguments":[{"name":"value","nativeSrc":"798:5:69","nodeType":"YulIdentifier","src":"798:5:69"}],"functionName":{"name":"array_length_t_string_memory_ptr","nativeSrc":"765:32:69","nodeType":"YulIdentifier","src":"765:32:69"},"nativeSrc":"765:39:69","nodeType":"YulFunctionCall","src":"765:39:69"},"variables":[{"name":"length","nativeSrc":"755:6:69","nodeType":"YulTypedName","src":"755:6:69","type":""}]},{"nativeSrc":"813:78:69","nodeType":"YulAssignment","src":"813:78:69","value":{"arguments":[{"name":"pos","nativeSrc":"879:3:69","nodeType":"YulIdentifier","src":"879:3:69"},{"name":"length","nativeSrc":"884:6:69","nodeType":"YulIdentifier","src":"884:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"820:58:69","nodeType":"YulIdentifier","src":"820:58:69"},"nativeSrc":"820:71:69","nodeType":"YulFunctionCall","src":"820:71:69"},"variableNames":[{"name":"pos","nativeSrc":"813:3:69","nodeType":"YulIdentifier","src":"813:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"939:5:69","nodeType":"YulIdentifier","src":"939:5:69"},{"kind":"number","nativeSrc":"946:4:69","nodeType":"YulLiteral","src":"946:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"935:3:69","nodeType":"YulIdentifier","src":"935:3:69"},"nativeSrc":"935:16:69","nodeType":"YulFunctionCall","src":"935:16:69"},{"name":"pos","nativeSrc":"953:3:69","nodeType":"YulIdentifier","src":"953:3:69"},{"name":"length","nativeSrc":"958:6:69","nodeType":"YulIdentifier","src":"958:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"900:34:69","nodeType":"YulIdentifier","src":"900:34:69"},"nativeSrc":"900:65:69","nodeType":"YulFunctionCall","src":"900:65:69"},"nativeSrc":"900:65:69","nodeType":"YulExpressionStatement","src":"900:65:69"},{"nativeSrc":"974:46:69","nodeType":"YulAssignment","src":"974:46:69","value":{"arguments":[{"name":"pos","nativeSrc":"985:3:69","nodeType":"YulIdentifier","src":"985:3:69"},{"arguments":[{"name":"length","nativeSrc":"1012:6:69","nodeType":"YulIdentifier","src":"1012:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"990:21:69","nodeType":"YulIdentifier","src":"990:21:69"},"nativeSrc":"990:29:69","nodeType":"YulFunctionCall","src":"990:29:69"}],"functionName":{"name":"add","nativeSrc":"981:3:69","nodeType":"YulIdentifier","src":"981:3:69"},"nativeSrc":"981:39:69","nodeType":"YulFunctionCall","src":"981:39:69"},"variableNames":[{"name":"end","nativeSrc":"974:3:69","nodeType":"YulIdentifier","src":"974:3:69"}]}]},"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"649:377:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"722:5:69","nodeType":"YulTypedName","src":"722:5:69","type":""},{"name":"pos","nativeSrc":"729:3:69","nodeType":"YulTypedName","src":"729:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"737:3:69","nodeType":"YulTypedName","src":"737:3:69","type":""}],"src":"649:377:69"},{"body":{"nativeSrc":"1150:195:69","nodeType":"YulBlock","src":"1150:195:69","statements":[{"nativeSrc":"1160:26:69","nodeType":"YulAssignment","src":"1160:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"1172:9:69","nodeType":"YulIdentifier","src":"1172:9:69"},{"kind":"number","nativeSrc":"1183:2:69","nodeType":"YulLiteral","src":"1183:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1168:3:69","nodeType":"YulIdentifier","src":"1168:3:69"},"nativeSrc":"1168:18:69","nodeType":"YulFunctionCall","src":"1168:18:69"},"variableNames":[{"name":"tail","nativeSrc":"1160:4:69","nodeType":"YulIdentifier","src":"1160:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1207:9:69","nodeType":"YulIdentifier","src":"1207:9:69"},{"kind":"number","nativeSrc":"1218:1:69","nodeType":"YulLiteral","src":"1218:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1203:3:69","nodeType":"YulIdentifier","src":"1203:3:69"},"nativeSrc":"1203:17:69","nodeType":"YulFunctionCall","src":"1203:17:69"},{"arguments":[{"name":"tail","nativeSrc":"1226:4:69","nodeType":"YulIdentifier","src":"1226:4:69"},{"name":"headStart","nativeSrc":"1232:9:69","nodeType":"YulIdentifier","src":"1232:9:69"}],"functionName":{"name":"sub","nativeSrc":"1222:3:69","nodeType":"YulIdentifier","src":"1222:3:69"},"nativeSrc":"1222:20:69","nodeType":"YulFunctionCall","src":"1222:20:69"}],"functionName":{"name":"mstore","nativeSrc":"1196:6:69","nodeType":"YulIdentifier","src":"1196:6:69"},"nativeSrc":"1196:47:69","nodeType":"YulFunctionCall","src":"1196:47:69"},"nativeSrc":"1196:47:69","nodeType":"YulExpressionStatement","src":"1196:47:69"},{"nativeSrc":"1252:86:69","nodeType":"YulAssignment","src":"1252:86:69","value":{"arguments":[{"name":"value0","nativeSrc":"1324:6:69","nodeType":"YulIdentifier","src":"1324:6:69"},{"name":"tail","nativeSrc":"1333:4:69","nodeType":"YulIdentifier","src":"1333:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"1260:63:69","nodeType":"YulIdentifier","src":"1260:63:69"},"nativeSrc":"1260:78:69","nodeType":"YulFunctionCall","src":"1260:78:69"},"variableNames":[{"name":"tail","nativeSrc":"1252:4:69","nodeType":"YulIdentifier","src":"1252:4:69"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"1032:313:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1122:9:69","nodeType":"YulTypedName","src":"1122:9:69","type":""},{"name":"value0","nativeSrc":"1134:6:69","nodeType":"YulTypedName","src":"1134:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1145:4:69","nodeType":"YulTypedName","src":"1145:4:69","type":""}],"src":"1032:313:69"},{"body":{"nativeSrc":"1391:35:69","nodeType":"YulBlock","src":"1391:35:69","statements":[{"nativeSrc":"1401:19:69","nodeType":"YulAssignment","src":"1401:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"1417:2:69","nodeType":"YulLiteral","src":"1417:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"1411:5:69","nodeType":"YulIdentifier","src":"1411:5:69"},"nativeSrc":"1411:9:69","nodeType":"YulFunctionCall","src":"1411:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"1401:6:69","nodeType":"YulIdentifier","src":"1401:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"1351:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"1384:6:69","nodeType":"YulTypedName","src":"1384:6:69","type":""}],"src":"1351:75:69"},{"body":{"nativeSrc":"1521:28:69","nodeType":"YulBlock","src":"1521:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1538:1:69","nodeType":"YulLiteral","src":"1538:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1541:1:69","nodeType":"YulLiteral","src":"1541:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1531:6:69","nodeType":"YulIdentifier","src":"1531:6:69"},"nativeSrc":"1531:12:69","nodeType":"YulFunctionCall","src":"1531:12:69"},"nativeSrc":"1531:12:69","nodeType":"YulExpressionStatement","src":"1531:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"1432:117:69","nodeType":"YulFunctionDefinition","src":"1432:117:69"},{"body":{"nativeSrc":"1644:28:69","nodeType":"YulBlock","src":"1644:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1661:1:69","nodeType":"YulLiteral","src":"1661:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1664:1:69","nodeType":"YulLiteral","src":"1664:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1654:6:69","nodeType":"YulIdentifier","src":"1654:6:69"},"nativeSrc":"1654:12:69","nodeType":"YulFunctionCall","src":"1654:12:69"},"nativeSrc":"1654:12:69","nodeType":"YulExpressionStatement","src":"1654:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"1555:117:69","nodeType":"YulFunctionDefinition","src":"1555:117:69"},{"body":{"nativeSrc":"1723:81:69","nodeType":"YulBlock","src":"1723:81:69","statements":[{"nativeSrc":"1733:65:69","nodeType":"YulAssignment","src":"1733:65:69","value":{"arguments":[{"name":"value","nativeSrc":"1748:5:69","nodeType":"YulIdentifier","src":"1748:5:69"},{"kind":"number","nativeSrc":"1755:42:69","nodeType":"YulLiteral","src":"1755:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"1744:3:69","nodeType":"YulIdentifier","src":"1744:3:69"},"nativeSrc":"1744:54:69","nodeType":"YulFunctionCall","src":"1744:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"1733:7:69","nodeType":"YulIdentifier","src":"1733:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"1678:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1705:5:69","nodeType":"YulTypedName","src":"1705:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"1715:7:69","nodeType":"YulTypedName","src":"1715:7:69","type":""}],"src":"1678:126:69"},{"body":{"nativeSrc":"1855:51:69","nodeType":"YulBlock","src":"1855:51:69","statements":[{"nativeSrc":"1865:35:69","nodeType":"YulAssignment","src":"1865:35:69","value":{"arguments":[{"name":"value","nativeSrc":"1894:5:69","nodeType":"YulIdentifier","src":"1894:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"1876:17:69","nodeType":"YulIdentifier","src":"1876:17:69"},"nativeSrc":"1876:24:69","nodeType":"YulFunctionCall","src":"1876:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"1865:7:69","nodeType":"YulIdentifier","src":"1865:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"1810:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1837:5:69","nodeType":"YulTypedName","src":"1837:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"1847:7:69","nodeType":"YulTypedName","src":"1847:7:69","type":""}],"src":"1810:96:69"},{"body":{"nativeSrc":"1955:79:69","nodeType":"YulBlock","src":"1955:79:69","statements":[{"body":{"nativeSrc":"2012:16:69","nodeType":"YulBlock","src":"2012:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2021:1:69","nodeType":"YulLiteral","src":"2021:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"2024:1:69","nodeType":"YulLiteral","src":"2024:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2014:6:69","nodeType":"YulIdentifier","src":"2014:6:69"},"nativeSrc":"2014:12:69","nodeType":"YulFunctionCall","src":"2014:12:69"},"nativeSrc":"2014:12:69","nodeType":"YulExpressionStatement","src":"2014:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1978:5:69","nodeType":"YulIdentifier","src":"1978:5:69"},{"arguments":[{"name":"value","nativeSrc":"2003:5:69","nodeType":"YulIdentifier","src":"2003:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"1985:17:69","nodeType":"YulIdentifier","src":"1985:17:69"},"nativeSrc":"1985:24:69","nodeType":"YulFunctionCall","src":"1985:24:69"}],"functionName":{"name":"eq","nativeSrc":"1975:2:69","nodeType":"YulIdentifier","src":"1975:2:69"},"nativeSrc":"1975:35:69","nodeType":"YulFunctionCall","src":"1975:35:69"}],"functionName":{"name":"iszero","nativeSrc":"1968:6:69","nodeType":"YulIdentifier","src":"1968:6:69"},"nativeSrc":"1968:43:69","nodeType":"YulFunctionCall","src":"1968:43:69"},"nativeSrc":"1965:63:69","nodeType":"YulIf","src":"1965:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"1912:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1948:5:69","nodeType":"YulTypedName","src":"1948:5:69","type":""}],"src":"1912:122:69"},{"body":{"nativeSrc":"2092:87:69","nodeType":"YulBlock","src":"2092:87:69","statements":[{"nativeSrc":"2102:29:69","nodeType":"YulAssignment","src":"2102:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"2124:6:69","nodeType":"YulIdentifier","src":"2124:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"2111:12:69","nodeType":"YulIdentifier","src":"2111:12:69"},"nativeSrc":"2111:20:69","nodeType":"YulFunctionCall","src":"2111:20:69"},"variableNames":[{"name":"value","nativeSrc":"2102:5:69","nodeType":"YulIdentifier","src":"2102:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"2167:5:69","nodeType":"YulIdentifier","src":"2167:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"2140:26:69","nodeType":"YulIdentifier","src":"2140:26:69"},"nativeSrc":"2140:33:69","nodeType":"YulFunctionCall","src":"2140:33:69"},"nativeSrc":"2140:33:69","nodeType":"YulExpressionStatement","src":"2140:33:69"}]},"name":"abi_decode_t_address","nativeSrc":"2040:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"2070:6:69","nodeType":"YulTypedName","src":"2070:6:69","type":""},{"name":"end","nativeSrc":"2078:3:69","nodeType":"YulTypedName","src":"2078:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"2086:5:69","nodeType":"YulTypedName","src":"2086:5:69","type":""}],"src":"2040:139:69"},{"body":{"nativeSrc":"2230:32:69","nodeType":"YulBlock","src":"2230:32:69","statements":[{"nativeSrc":"2240:16:69","nodeType":"YulAssignment","src":"2240:16:69","value":{"name":"value","nativeSrc":"2251:5:69","nodeType":"YulIdentifier","src":"2251:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"2240:7:69","nodeType":"YulIdentifier","src":"2240:7:69"}]}]},"name":"cleanup_t_uint256","nativeSrc":"2185:77:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2212:5:69","nodeType":"YulTypedName","src":"2212:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"2222:7:69","nodeType":"YulTypedName","src":"2222:7:69","type":""}],"src":"2185:77:69"},{"body":{"nativeSrc":"2311:79:69","nodeType":"YulBlock","src":"2311:79:69","statements":[{"body":{"nativeSrc":"2368:16:69","nodeType":"YulBlock","src":"2368:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2377:1:69","nodeType":"YulLiteral","src":"2377:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"2380:1:69","nodeType":"YulLiteral","src":"2380:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2370:6:69","nodeType":"YulIdentifier","src":"2370:6:69"},"nativeSrc":"2370:12:69","nodeType":"YulFunctionCall","src":"2370:12:69"},"nativeSrc":"2370:12:69","nodeType":"YulExpressionStatement","src":"2370:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"2334:5:69","nodeType":"YulIdentifier","src":"2334:5:69"},{"arguments":[{"name":"value","nativeSrc":"2359:5:69","nodeType":"YulIdentifier","src":"2359:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"2341:17:69","nodeType":"YulIdentifier","src":"2341:17:69"},"nativeSrc":"2341:24:69","nodeType":"YulFunctionCall","src":"2341:24:69"}],"functionName":{"name":"eq","nativeSrc":"2331:2:69","nodeType":"YulIdentifier","src":"2331:2:69"},"nativeSrc":"2331:35:69","nodeType":"YulFunctionCall","src":"2331:35:69"}],"functionName":{"name":"iszero","nativeSrc":"2324:6:69","nodeType":"YulIdentifier","src":"2324:6:69"},"nativeSrc":"2324:43:69","nodeType":"YulFunctionCall","src":"2324:43:69"},"nativeSrc":"2321:63:69","nodeType":"YulIf","src":"2321:63:69"}]},"name":"validator_revert_t_uint256","nativeSrc":"2268:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2304:5:69","nodeType":"YulTypedName","src":"2304:5:69","type":""}],"src":"2268:122:69"},{"body":{"nativeSrc":"2448:87:69","nodeType":"YulBlock","src":"2448:87:69","statements":[{"nativeSrc":"2458:29:69","nodeType":"YulAssignment","src":"2458:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"2480:6:69","nodeType":"YulIdentifier","src":"2480:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"2467:12:69","nodeType":"YulIdentifier","src":"2467:12:69"},"nativeSrc":"2467:20:69","nodeType":"YulFunctionCall","src":"2467:20:69"},"variableNames":[{"name":"value","nativeSrc":"2458:5:69","nodeType":"YulIdentifier","src":"2458:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"2523:5:69","nodeType":"YulIdentifier","src":"2523:5:69"}],"functionName":{"name":"validator_revert_t_uint256","nativeSrc":"2496:26:69","nodeType":"YulIdentifier","src":"2496:26:69"},"nativeSrc":"2496:33:69","nodeType":"YulFunctionCall","src":"2496:33:69"},"nativeSrc":"2496:33:69","nodeType":"YulExpressionStatement","src":"2496:33:69"}]},"name":"abi_decode_t_uint256","nativeSrc":"2396:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"2426:6:69","nodeType":"YulTypedName","src":"2426:6:69","type":""},{"name":"end","nativeSrc":"2434:3:69","nodeType":"YulTypedName","src":"2434:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"2442:5:69","nodeType":"YulTypedName","src":"2442:5:69","type":""}],"src":"2396:139:69"},{"body":{"nativeSrc":"2624:391:69","nodeType":"YulBlock","src":"2624:391:69","statements":[{"body":{"nativeSrc":"2670:83:69","nodeType":"YulBlock","src":"2670:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"2672:77:69","nodeType":"YulIdentifier","src":"2672:77:69"},"nativeSrc":"2672:79:69","nodeType":"YulFunctionCall","src":"2672:79:69"},"nativeSrc":"2672:79:69","nodeType":"YulExpressionStatement","src":"2672:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"2645:7:69","nodeType":"YulIdentifier","src":"2645:7:69"},{"name":"headStart","nativeSrc":"2654:9:69","nodeType":"YulIdentifier","src":"2654:9:69"}],"functionName":{"name":"sub","nativeSrc":"2641:3:69","nodeType":"YulIdentifier","src":"2641:3:69"},"nativeSrc":"2641:23:69","nodeType":"YulFunctionCall","src":"2641:23:69"},{"kind":"number","nativeSrc":"2666:2:69","nodeType":"YulLiteral","src":"2666:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"2637:3:69","nodeType":"YulIdentifier","src":"2637:3:69"},"nativeSrc":"2637:32:69","nodeType":"YulFunctionCall","src":"2637:32:69"},"nativeSrc":"2634:119:69","nodeType":"YulIf","src":"2634:119:69"},{"nativeSrc":"2763:117:69","nodeType":"YulBlock","src":"2763:117:69","statements":[{"nativeSrc":"2778:15:69","nodeType":"YulVariableDeclaration","src":"2778:15:69","value":{"kind":"number","nativeSrc":"2792:1:69","nodeType":"YulLiteral","src":"2792:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"2782:6:69","nodeType":"YulTypedName","src":"2782:6:69","type":""}]},{"nativeSrc":"2807:63:69","nodeType":"YulAssignment","src":"2807:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2842:9:69","nodeType":"YulIdentifier","src":"2842:9:69"},{"name":"offset","nativeSrc":"2853:6:69","nodeType":"YulIdentifier","src":"2853:6:69"}],"functionName":{"name":"add","nativeSrc":"2838:3:69","nodeType":"YulIdentifier","src":"2838:3:69"},"nativeSrc":"2838:22:69","nodeType":"YulFunctionCall","src":"2838:22:69"},{"name":"dataEnd","nativeSrc":"2862:7:69","nodeType":"YulIdentifier","src":"2862:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"2817:20:69","nodeType":"YulIdentifier","src":"2817:20:69"},"nativeSrc":"2817:53:69","nodeType":"YulFunctionCall","src":"2817:53:69"},"variableNames":[{"name":"value0","nativeSrc":"2807:6:69","nodeType":"YulIdentifier","src":"2807:6:69"}]}]},{"nativeSrc":"2890:118:69","nodeType":"YulBlock","src":"2890:118:69","statements":[{"nativeSrc":"2905:16:69","nodeType":"YulVariableDeclaration","src":"2905:16:69","value":{"kind":"number","nativeSrc":"2919:2:69","nodeType":"YulLiteral","src":"2919:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"2909:6:69","nodeType":"YulTypedName","src":"2909:6:69","type":""}]},{"nativeSrc":"2935:63:69","nodeType":"YulAssignment","src":"2935:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2970:9:69","nodeType":"YulIdentifier","src":"2970:9:69"},{"name":"offset","nativeSrc":"2981:6:69","nodeType":"YulIdentifier","src":"2981:6:69"}],"functionName":{"name":"add","nativeSrc":"2966:3:69","nodeType":"YulIdentifier","src":"2966:3:69"},"nativeSrc":"2966:22:69","nodeType":"YulFunctionCall","src":"2966:22:69"},{"name":"dataEnd","nativeSrc":"2990:7:69","nodeType":"YulIdentifier","src":"2990:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"2945:20:69","nodeType":"YulIdentifier","src":"2945:20:69"},"nativeSrc":"2945:53:69","nodeType":"YulFunctionCall","src":"2945:53:69"},"variableNames":[{"name":"value1","nativeSrc":"2935:6:69","nodeType":"YulIdentifier","src":"2935:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nativeSrc":"2541:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2586:9:69","nodeType":"YulTypedName","src":"2586:9:69","type":""},{"name":"dataEnd","nativeSrc":"2597:7:69","nodeType":"YulTypedName","src":"2597:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"2609:6:69","nodeType":"YulTypedName","src":"2609:6:69","type":""},{"name":"value1","nativeSrc":"2617:6:69","nodeType":"YulTypedName","src":"2617:6:69","type":""}],"src":"2541:474:69"},{"body":{"nativeSrc":"3063:48:69","nodeType":"YulBlock","src":"3063:48:69","statements":[{"nativeSrc":"3073:32:69","nodeType":"YulAssignment","src":"3073:32:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"3098:5:69","nodeType":"YulIdentifier","src":"3098:5:69"}],"functionName":{"name":"iszero","nativeSrc":"3091:6:69","nodeType":"YulIdentifier","src":"3091:6:69"},"nativeSrc":"3091:13:69","nodeType":"YulFunctionCall","src":"3091:13:69"}],"functionName":{"name":"iszero","nativeSrc":"3084:6:69","nodeType":"YulIdentifier","src":"3084:6:69"},"nativeSrc":"3084:21:69","nodeType":"YulFunctionCall","src":"3084:21:69"},"variableNames":[{"name":"cleaned","nativeSrc":"3073:7:69","nodeType":"YulIdentifier","src":"3073:7:69"}]}]},"name":"cleanup_t_bool","nativeSrc":"3021:90:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3045:5:69","nodeType":"YulTypedName","src":"3045:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"3055:7:69","nodeType":"YulTypedName","src":"3055:7:69","type":""}],"src":"3021:90:69"},{"body":{"nativeSrc":"3176:50:69","nodeType":"YulBlock","src":"3176:50:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"3193:3:69","nodeType":"YulIdentifier","src":"3193:3:69"},{"arguments":[{"name":"value","nativeSrc":"3213:5:69","nodeType":"YulIdentifier","src":"3213:5:69"}],"functionName":{"name":"cleanup_t_bool","nativeSrc":"3198:14:69","nodeType":"YulIdentifier","src":"3198:14:69"},"nativeSrc":"3198:21:69","nodeType":"YulFunctionCall","src":"3198:21:69"}],"functionName":{"name":"mstore","nativeSrc":"3186:6:69","nodeType":"YulIdentifier","src":"3186:6:69"},"nativeSrc":"3186:34:69","nodeType":"YulFunctionCall","src":"3186:34:69"},"nativeSrc":"3186:34:69","nodeType":"YulExpressionStatement","src":"3186:34:69"}]},"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"3117:109:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3164:5:69","nodeType":"YulTypedName","src":"3164:5:69","type":""},{"name":"pos","nativeSrc":"3171:3:69","nodeType":"YulTypedName","src":"3171:3:69","type":""}],"src":"3117:109:69"},{"body":{"nativeSrc":"3324:118:69","nodeType":"YulBlock","src":"3324:118:69","statements":[{"nativeSrc":"3334:26:69","nodeType":"YulAssignment","src":"3334:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"3346:9:69","nodeType":"YulIdentifier","src":"3346:9:69"},{"kind":"number","nativeSrc":"3357:2:69","nodeType":"YulLiteral","src":"3357:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3342:3:69","nodeType":"YulIdentifier","src":"3342:3:69"},"nativeSrc":"3342:18:69","nodeType":"YulFunctionCall","src":"3342:18:69"},"variableNames":[{"name":"tail","nativeSrc":"3334:4:69","nodeType":"YulIdentifier","src":"3334:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"3408:6:69","nodeType":"YulIdentifier","src":"3408:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"3421:9:69","nodeType":"YulIdentifier","src":"3421:9:69"},{"kind":"number","nativeSrc":"3432:1:69","nodeType":"YulLiteral","src":"3432:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"3417:3:69","nodeType":"YulIdentifier","src":"3417:3:69"},"nativeSrc":"3417:17:69","nodeType":"YulFunctionCall","src":"3417:17:69"}],"functionName":{"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"3370:37:69","nodeType":"YulIdentifier","src":"3370:37:69"},"nativeSrc":"3370:65:69","nodeType":"YulFunctionCall","src":"3370:65:69"},"nativeSrc":"3370:65:69","nodeType":"YulExpressionStatement","src":"3370:65:69"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nativeSrc":"3232:210:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3296:9:69","nodeType":"YulTypedName","src":"3296:9:69","type":""},{"name":"value0","nativeSrc":"3308:6:69","nodeType":"YulTypedName","src":"3308:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3319:4:69","nodeType":"YulTypedName","src":"3319:4:69","type":""}],"src":"3232:210:69"},{"body":{"nativeSrc":"3513:53:69","nodeType":"YulBlock","src":"3513:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"3530:3:69","nodeType":"YulIdentifier","src":"3530:3:69"},{"arguments":[{"name":"value","nativeSrc":"3553:5:69","nodeType":"YulIdentifier","src":"3553:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"3535:17:69","nodeType":"YulIdentifier","src":"3535:17:69"},"nativeSrc":"3535:24:69","nodeType":"YulFunctionCall","src":"3535:24:69"}],"functionName":{"name":"mstore","nativeSrc":"3523:6:69","nodeType":"YulIdentifier","src":"3523:6:69"},"nativeSrc":"3523:37:69","nodeType":"YulFunctionCall","src":"3523:37:69"},"nativeSrc":"3523:37:69","nodeType":"YulExpressionStatement","src":"3523:37:69"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"3448:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3501:5:69","nodeType":"YulTypedName","src":"3501:5:69","type":""},{"name":"pos","nativeSrc":"3508:3:69","nodeType":"YulTypedName","src":"3508:3:69","type":""}],"src":"3448:118:69"},{"body":{"nativeSrc":"3670:124:69","nodeType":"YulBlock","src":"3670:124:69","statements":[{"nativeSrc":"3680:26:69","nodeType":"YulAssignment","src":"3680:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"3692:9:69","nodeType":"YulIdentifier","src":"3692:9:69"},{"kind":"number","nativeSrc":"3703:2:69","nodeType":"YulLiteral","src":"3703:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3688:3:69","nodeType":"YulIdentifier","src":"3688:3:69"},"nativeSrc":"3688:18:69","nodeType":"YulFunctionCall","src":"3688:18:69"},"variableNames":[{"name":"tail","nativeSrc":"3680:4:69","nodeType":"YulIdentifier","src":"3680:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"3760:6:69","nodeType":"YulIdentifier","src":"3760:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"3773:9:69","nodeType":"YulIdentifier","src":"3773:9:69"},{"kind":"number","nativeSrc":"3784:1:69","nodeType":"YulLiteral","src":"3784:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"3769:3:69","nodeType":"YulIdentifier","src":"3769:3:69"},"nativeSrc":"3769:17:69","nodeType":"YulFunctionCall","src":"3769:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"3716:43:69","nodeType":"YulIdentifier","src":"3716:43:69"},"nativeSrc":"3716:71:69","nodeType":"YulFunctionCall","src":"3716:71:69"},"nativeSrc":"3716:71:69","nodeType":"YulExpressionStatement","src":"3716:71:69"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nativeSrc":"3572:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3642:9:69","nodeType":"YulTypedName","src":"3642:9:69","type":""},{"name":"value0","nativeSrc":"3654:6:69","nodeType":"YulTypedName","src":"3654:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3665:4:69","nodeType":"YulTypedName","src":"3665:4:69","type":""}],"src":"3572:222:69"},{"body":{"nativeSrc":"3900:519:69","nodeType":"YulBlock","src":"3900:519:69","statements":[{"body":{"nativeSrc":"3946:83:69","nodeType":"YulBlock","src":"3946:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"3948:77:69","nodeType":"YulIdentifier","src":"3948:77:69"},"nativeSrc":"3948:79:69","nodeType":"YulFunctionCall","src":"3948:79:69"},"nativeSrc":"3948:79:69","nodeType":"YulExpressionStatement","src":"3948:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"3921:7:69","nodeType":"YulIdentifier","src":"3921:7:69"},{"name":"headStart","nativeSrc":"3930:9:69","nodeType":"YulIdentifier","src":"3930:9:69"}],"functionName":{"name":"sub","nativeSrc":"3917:3:69","nodeType":"YulIdentifier","src":"3917:3:69"},"nativeSrc":"3917:23:69","nodeType":"YulFunctionCall","src":"3917:23:69"},{"kind":"number","nativeSrc":"3942:2:69","nodeType":"YulLiteral","src":"3942:2:69","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"3913:3:69","nodeType":"YulIdentifier","src":"3913:3:69"},"nativeSrc":"3913:32:69","nodeType":"YulFunctionCall","src":"3913:32:69"},"nativeSrc":"3910:119:69","nodeType":"YulIf","src":"3910:119:69"},{"nativeSrc":"4039:117:69","nodeType":"YulBlock","src":"4039:117:69","statements":[{"nativeSrc":"4054:15:69","nodeType":"YulVariableDeclaration","src":"4054:15:69","value":{"kind":"number","nativeSrc":"4068:1:69","nodeType":"YulLiteral","src":"4068:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"4058:6:69","nodeType":"YulTypedName","src":"4058:6:69","type":""}]},{"nativeSrc":"4083:63:69","nodeType":"YulAssignment","src":"4083:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4118:9:69","nodeType":"YulIdentifier","src":"4118:9:69"},{"name":"offset","nativeSrc":"4129:6:69","nodeType":"YulIdentifier","src":"4129:6:69"}],"functionName":{"name":"add","nativeSrc":"4114:3:69","nodeType":"YulIdentifier","src":"4114:3:69"},"nativeSrc":"4114:22:69","nodeType":"YulFunctionCall","src":"4114:22:69"},{"name":"dataEnd","nativeSrc":"4138:7:69","nodeType":"YulIdentifier","src":"4138:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"4093:20:69","nodeType":"YulIdentifier","src":"4093:20:69"},"nativeSrc":"4093:53:69","nodeType":"YulFunctionCall","src":"4093:53:69"},"variableNames":[{"name":"value0","nativeSrc":"4083:6:69","nodeType":"YulIdentifier","src":"4083:6:69"}]}]},{"nativeSrc":"4166:118:69","nodeType":"YulBlock","src":"4166:118:69","statements":[{"nativeSrc":"4181:16:69","nodeType":"YulVariableDeclaration","src":"4181:16:69","value":{"kind":"number","nativeSrc":"4195:2:69","nodeType":"YulLiteral","src":"4195:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"4185:6:69","nodeType":"YulTypedName","src":"4185:6:69","type":""}]},{"nativeSrc":"4211:63:69","nodeType":"YulAssignment","src":"4211:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4246:9:69","nodeType":"YulIdentifier","src":"4246:9:69"},{"name":"offset","nativeSrc":"4257:6:69","nodeType":"YulIdentifier","src":"4257:6:69"}],"functionName":{"name":"add","nativeSrc":"4242:3:69","nodeType":"YulIdentifier","src":"4242:3:69"},"nativeSrc":"4242:22:69","nodeType":"YulFunctionCall","src":"4242:22:69"},{"name":"dataEnd","nativeSrc":"4266:7:69","nodeType":"YulIdentifier","src":"4266:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"4221:20:69","nodeType":"YulIdentifier","src":"4221:20:69"},"nativeSrc":"4221:53:69","nodeType":"YulFunctionCall","src":"4221:53:69"},"variableNames":[{"name":"value1","nativeSrc":"4211:6:69","nodeType":"YulIdentifier","src":"4211:6:69"}]}]},{"nativeSrc":"4294:118:69","nodeType":"YulBlock","src":"4294:118:69","statements":[{"nativeSrc":"4309:16:69","nodeType":"YulVariableDeclaration","src":"4309:16:69","value":{"kind":"number","nativeSrc":"4323:2:69","nodeType":"YulLiteral","src":"4323:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"4313:6:69","nodeType":"YulTypedName","src":"4313:6:69","type":""}]},{"nativeSrc":"4339:63:69","nodeType":"YulAssignment","src":"4339:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4374:9:69","nodeType":"YulIdentifier","src":"4374:9:69"},{"name":"offset","nativeSrc":"4385:6:69","nodeType":"YulIdentifier","src":"4385:6:69"}],"functionName":{"name":"add","nativeSrc":"4370:3:69","nodeType":"YulIdentifier","src":"4370:3:69"},"nativeSrc":"4370:22:69","nodeType":"YulFunctionCall","src":"4370:22:69"},{"name":"dataEnd","nativeSrc":"4394:7:69","nodeType":"YulIdentifier","src":"4394:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"4349:20:69","nodeType":"YulIdentifier","src":"4349:20:69"},"nativeSrc":"4349:53:69","nodeType":"YulFunctionCall","src":"4349:53:69"},"variableNames":[{"name":"value2","nativeSrc":"4339:6:69","nodeType":"YulIdentifier","src":"4339:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nativeSrc":"3800:619:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3854:9:69","nodeType":"YulTypedName","src":"3854:9:69","type":""},{"name":"dataEnd","nativeSrc":"3865:7:69","nodeType":"YulTypedName","src":"3865:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"3877:6:69","nodeType":"YulTypedName","src":"3877:6:69","type":""},{"name":"value1","nativeSrc":"3885:6:69","nodeType":"YulTypedName","src":"3885:6:69","type":""},{"name":"value2","nativeSrc":"3893:6:69","nodeType":"YulTypedName","src":"3893:6:69","type":""}],"src":"3800:619:69"},{"body":{"nativeSrc":"4468:43:69","nodeType":"YulBlock","src":"4468:43:69","statements":[{"nativeSrc":"4478:27:69","nodeType":"YulAssignment","src":"4478:27:69","value":{"arguments":[{"name":"value","nativeSrc":"4493:5:69","nodeType":"YulIdentifier","src":"4493:5:69"},{"kind":"number","nativeSrc":"4500:4:69","nodeType":"YulLiteral","src":"4500:4:69","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"4489:3:69","nodeType":"YulIdentifier","src":"4489:3:69"},"nativeSrc":"4489:16:69","nodeType":"YulFunctionCall","src":"4489:16:69"},"variableNames":[{"name":"cleaned","nativeSrc":"4478:7:69","nodeType":"YulIdentifier","src":"4478:7:69"}]}]},"name":"cleanup_t_uint8","nativeSrc":"4425:86:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4450:5:69","nodeType":"YulTypedName","src":"4450:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"4460:7:69","nodeType":"YulTypedName","src":"4460:7:69","type":""}],"src":"4425:86:69"},{"body":{"nativeSrc":"4578:51:69","nodeType":"YulBlock","src":"4578:51:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"4595:3:69","nodeType":"YulIdentifier","src":"4595:3:69"},{"arguments":[{"name":"value","nativeSrc":"4616:5:69","nodeType":"YulIdentifier","src":"4616:5:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"4600:15:69","nodeType":"YulIdentifier","src":"4600:15:69"},"nativeSrc":"4600:22:69","nodeType":"YulFunctionCall","src":"4600:22:69"}],"functionName":{"name":"mstore","nativeSrc":"4588:6:69","nodeType":"YulIdentifier","src":"4588:6:69"},"nativeSrc":"4588:35:69","nodeType":"YulFunctionCall","src":"4588:35:69"},"nativeSrc":"4588:35:69","nodeType":"YulExpressionStatement","src":"4588:35:69"}]},"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"4517:112:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4566:5:69","nodeType":"YulTypedName","src":"4566:5:69","type":""},{"name":"pos","nativeSrc":"4573:3:69","nodeType":"YulTypedName","src":"4573:3:69","type":""}],"src":"4517:112:69"},{"body":{"nativeSrc":"4729:120:69","nodeType":"YulBlock","src":"4729:120:69","statements":[{"nativeSrc":"4739:26:69","nodeType":"YulAssignment","src":"4739:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"4751:9:69","nodeType":"YulIdentifier","src":"4751:9:69"},{"kind":"number","nativeSrc":"4762:2:69","nodeType":"YulLiteral","src":"4762:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4747:3:69","nodeType":"YulIdentifier","src":"4747:3:69"},"nativeSrc":"4747:18:69","nodeType":"YulFunctionCall","src":"4747:18:69"},"variableNames":[{"name":"tail","nativeSrc":"4739:4:69","nodeType":"YulIdentifier","src":"4739:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"4815:6:69","nodeType":"YulIdentifier","src":"4815:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"4828:9:69","nodeType":"YulIdentifier","src":"4828:9:69"},{"kind":"number","nativeSrc":"4839:1:69","nodeType":"YulLiteral","src":"4839:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4824:3:69","nodeType":"YulIdentifier","src":"4824:3:69"},"nativeSrc":"4824:17:69","nodeType":"YulFunctionCall","src":"4824:17:69"}],"functionName":{"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"4775:39:69","nodeType":"YulIdentifier","src":"4775:39:69"},"nativeSrc":"4775:67:69","nodeType":"YulFunctionCall","src":"4775:67:69"},"nativeSrc":"4775:67:69","nodeType":"YulExpressionStatement","src":"4775:67:69"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nativeSrc":"4635:214:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4701:9:69","nodeType":"YulTypedName","src":"4701:9:69","type":""},{"name":"value0","nativeSrc":"4713:6:69","nodeType":"YulTypedName","src":"4713:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4724:4:69","nodeType":"YulTypedName","src":"4724:4:69","type":""}],"src":"4635:214:69"},{"body":{"nativeSrc":"4921:263:69","nodeType":"YulBlock","src":"4921:263:69","statements":[{"body":{"nativeSrc":"4967:83:69","nodeType":"YulBlock","src":"4967:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"4969:77:69","nodeType":"YulIdentifier","src":"4969:77:69"},"nativeSrc":"4969:79:69","nodeType":"YulFunctionCall","src":"4969:79:69"},"nativeSrc":"4969:79:69","nodeType":"YulExpressionStatement","src":"4969:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"4942:7:69","nodeType":"YulIdentifier","src":"4942:7:69"},{"name":"headStart","nativeSrc":"4951:9:69","nodeType":"YulIdentifier","src":"4951:9:69"}],"functionName":{"name":"sub","nativeSrc":"4938:3:69","nodeType":"YulIdentifier","src":"4938:3:69"},"nativeSrc":"4938:23:69","nodeType":"YulFunctionCall","src":"4938:23:69"},{"kind":"number","nativeSrc":"4963:2:69","nodeType":"YulLiteral","src":"4963:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"4934:3:69","nodeType":"YulIdentifier","src":"4934:3:69"},"nativeSrc":"4934:32:69","nodeType":"YulFunctionCall","src":"4934:32:69"},"nativeSrc":"4931:119:69","nodeType":"YulIf","src":"4931:119:69"},{"nativeSrc":"5060:117:69","nodeType":"YulBlock","src":"5060:117:69","statements":[{"nativeSrc":"5075:15:69","nodeType":"YulVariableDeclaration","src":"5075:15:69","value":{"kind":"number","nativeSrc":"5089:1:69","nodeType":"YulLiteral","src":"5089:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"5079:6:69","nodeType":"YulTypedName","src":"5079:6:69","type":""}]},{"nativeSrc":"5104:63:69","nodeType":"YulAssignment","src":"5104:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5139:9:69","nodeType":"YulIdentifier","src":"5139:9:69"},{"name":"offset","nativeSrc":"5150:6:69","nodeType":"YulIdentifier","src":"5150:6:69"}],"functionName":{"name":"add","nativeSrc":"5135:3:69","nodeType":"YulIdentifier","src":"5135:3:69"},"nativeSrc":"5135:22:69","nodeType":"YulFunctionCall","src":"5135:22:69"},{"name":"dataEnd","nativeSrc":"5159:7:69","nodeType":"YulIdentifier","src":"5159:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"5114:20:69","nodeType":"YulIdentifier","src":"5114:20:69"},"nativeSrc":"5114:53:69","nodeType":"YulFunctionCall","src":"5114:53:69"},"variableNames":[{"name":"value0","nativeSrc":"5104:6:69","nodeType":"YulIdentifier","src":"5104:6:69"}]}]}]},"name":"abi_decode_tuple_t_address","nativeSrc":"4855:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4891:9:69","nodeType":"YulTypedName","src":"4891:9:69","type":""},{"name":"dataEnd","nativeSrc":"4902:7:69","nodeType":"YulTypedName","src":"4902:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"4914:6:69","nodeType":"YulTypedName","src":"4914:6:69","type":""}],"src":"4855:329:69"},{"body":{"nativeSrc":"5273:391:69","nodeType":"YulBlock","src":"5273:391:69","statements":[{"body":{"nativeSrc":"5319:83:69","nodeType":"YulBlock","src":"5319:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"5321:77:69","nodeType":"YulIdentifier","src":"5321:77:69"},"nativeSrc":"5321:79:69","nodeType":"YulFunctionCall","src":"5321:79:69"},"nativeSrc":"5321:79:69","nodeType":"YulExpressionStatement","src":"5321:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"5294:7:69","nodeType":"YulIdentifier","src":"5294:7:69"},{"name":"headStart","nativeSrc":"5303:9:69","nodeType":"YulIdentifier","src":"5303:9:69"}],"functionName":{"name":"sub","nativeSrc":"5290:3:69","nodeType":"YulIdentifier","src":"5290:3:69"},"nativeSrc":"5290:23:69","nodeType":"YulFunctionCall","src":"5290:23:69"},{"kind":"number","nativeSrc":"5315:2:69","nodeType":"YulLiteral","src":"5315:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"5286:3:69","nodeType":"YulIdentifier","src":"5286:3:69"},"nativeSrc":"5286:32:69","nodeType":"YulFunctionCall","src":"5286:32:69"},"nativeSrc":"5283:119:69","nodeType":"YulIf","src":"5283:119:69"},{"nativeSrc":"5412:117:69","nodeType":"YulBlock","src":"5412:117:69","statements":[{"nativeSrc":"5427:15:69","nodeType":"YulVariableDeclaration","src":"5427:15:69","value":{"kind":"number","nativeSrc":"5441:1:69","nodeType":"YulLiteral","src":"5441:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"5431:6:69","nodeType":"YulTypedName","src":"5431:6:69","type":""}]},{"nativeSrc":"5456:63:69","nodeType":"YulAssignment","src":"5456:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5491:9:69","nodeType":"YulIdentifier","src":"5491:9:69"},{"name":"offset","nativeSrc":"5502:6:69","nodeType":"YulIdentifier","src":"5502:6:69"}],"functionName":{"name":"add","nativeSrc":"5487:3:69","nodeType":"YulIdentifier","src":"5487:3:69"},"nativeSrc":"5487:22:69","nodeType":"YulFunctionCall","src":"5487:22:69"},{"name":"dataEnd","nativeSrc":"5511:7:69","nodeType":"YulIdentifier","src":"5511:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"5466:20:69","nodeType":"YulIdentifier","src":"5466:20:69"},"nativeSrc":"5466:53:69","nodeType":"YulFunctionCall","src":"5466:53:69"},"variableNames":[{"name":"value0","nativeSrc":"5456:6:69","nodeType":"YulIdentifier","src":"5456:6:69"}]}]},{"nativeSrc":"5539:118:69","nodeType":"YulBlock","src":"5539:118:69","statements":[{"nativeSrc":"5554:16:69","nodeType":"YulVariableDeclaration","src":"5554:16:69","value":{"kind":"number","nativeSrc":"5568:2:69","nodeType":"YulLiteral","src":"5568:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"5558:6:69","nodeType":"YulTypedName","src":"5558:6:69","type":""}]},{"nativeSrc":"5584:63:69","nodeType":"YulAssignment","src":"5584:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5619:9:69","nodeType":"YulIdentifier","src":"5619:9:69"},{"name":"offset","nativeSrc":"5630:6:69","nodeType":"YulIdentifier","src":"5630:6:69"}],"functionName":{"name":"add","nativeSrc":"5615:3:69","nodeType":"YulIdentifier","src":"5615:3:69"},"nativeSrc":"5615:22:69","nodeType":"YulFunctionCall","src":"5615:22:69"},{"name":"dataEnd","nativeSrc":"5639:7:69","nodeType":"YulIdentifier","src":"5639:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"5594:20:69","nodeType":"YulIdentifier","src":"5594:20:69"},"nativeSrc":"5594:53:69","nodeType":"YulFunctionCall","src":"5594:53:69"},"variableNames":[{"name":"value1","nativeSrc":"5584:6:69","nodeType":"YulIdentifier","src":"5584:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_address","nativeSrc":"5190:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5235:9:69","nodeType":"YulTypedName","src":"5235:9:69","type":""},{"name":"dataEnd","nativeSrc":"5246:7:69","nodeType":"YulTypedName","src":"5246:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"5258:6:69","nodeType":"YulTypedName","src":"5258:6:69","type":""},{"name":"value1","nativeSrc":"5266:6:69","nodeType":"YulTypedName","src":"5266:6:69","type":""}],"src":"5190:474:69"},{"body":{"nativeSrc":"5698:152:69","nodeType":"YulBlock","src":"5698:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"5715:1:69","nodeType":"YulLiteral","src":"5715:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"5718:77:69","nodeType":"YulLiteral","src":"5718:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"5708:6:69","nodeType":"YulIdentifier","src":"5708:6:69"},"nativeSrc":"5708:88:69","nodeType":"YulFunctionCall","src":"5708:88:69"},"nativeSrc":"5708:88:69","nodeType":"YulExpressionStatement","src":"5708:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"5812:1:69","nodeType":"YulLiteral","src":"5812:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"5815:4:69","nodeType":"YulLiteral","src":"5815:4:69","type":"","value":"0x22"}],"functionName":{"name":"mstore","nativeSrc":"5805:6:69","nodeType":"YulIdentifier","src":"5805:6:69"},"nativeSrc":"5805:15:69","nodeType":"YulFunctionCall","src":"5805:15:69"},"nativeSrc":"5805:15:69","nodeType":"YulExpressionStatement","src":"5805:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"5836:1:69","nodeType":"YulLiteral","src":"5836:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"5839:4:69","nodeType":"YulLiteral","src":"5839:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"5829:6:69","nodeType":"YulIdentifier","src":"5829:6:69"},"nativeSrc":"5829:15:69","nodeType":"YulFunctionCall","src":"5829:15:69"},"nativeSrc":"5829:15:69","nodeType":"YulExpressionStatement","src":"5829:15:69"}]},"name":"panic_error_0x22","nativeSrc":"5670:180:69","nodeType":"YulFunctionDefinition","src":"5670:180:69"},{"body":{"nativeSrc":"5907:269:69","nodeType":"YulBlock","src":"5907:269:69","statements":[{"nativeSrc":"5917:22:69","nodeType":"YulAssignment","src":"5917:22:69","value":{"arguments":[{"name":"data","nativeSrc":"5931:4:69","nodeType":"YulIdentifier","src":"5931:4:69"},{"kind":"number","nativeSrc":"5937:1:69","nodeType":"YulLiteral","src":"5937:1:69","type":"","value":"2"}],"functionName":{"name":"div","nativeSrc":"5927:3:69","nodeType":"YulIdentifier","src":"5927:3:69"},"nativeSrc":"5927:12:69","nodeType":"YulFunctionCall","src":"5927:12:69"},"variableNames":[{"name":"length","nativeSrc":"5917:6:69","nodeType":"YulIdentifier","src":"5917:6:69"}]},{"nativeSrc":"5948:38:69","nodeType":"YulVariableDeclaration","src":"5948:38:69","value":{"arguments":[{"name":"data","nativeSrc":"5978:4:69","nodeType":"YulIdentifier","src":"5978:4:69"},{"kind":"number","nativeSrc":"5984:1:69","nodeType":"YulLiteral","src":"5984:1:69","type":"","value":"1"}],"functionName":{"name":"and","nativeSrc":"5974:3:69","nodeType":"YulIdentifier","src":"5974:3:69"},"nativeSrc":"5974:12:69","nodeType":"YulFunctionCall","src":"5974:12:69"},"variables":[{"name":"outOfPlaceEncoding","nativeSrc":"5952:18:69","nodeType":"YulTypedName","src":"5952:18:69","type":""}]},{"body":{"nativeSrc":"6025:51:69","nodeType":"YulBlock","src":"6025:51:69","statements":[{"nativeSrc":"6039:27:69","nodeType":"YulAssignment","src":"6039:27:69","value":{"arguments":[{"name":"length","nativeSrc":"6053:6:69","nodeType":"YulIdentifier","src":"6053:6:69"},{"kind":"number","nativeSrc":"6061:4:69","nodeType":"YulLiteral","src":"6061:4:69","type":"","value":"0x7f"}],"functionName":{"name":"and","nativeSrc":"6049:3:69","nodeType":"YulIdentifier","src":"6049:3:69"},"nativeSrc":"6049:17:69","nodeType":"YulFunctionCall","src":"6049:17:69"},"variableNames":[{"name":"length","nativeSrc":"6039:6:69","nodeType":"YulIdentifier","src":"6039:6:69"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nativeSrc":"6005:18:69","nodeType":"YulIdentifier","src":"6005:18:69"}],"functionName":{"name":"iszero","nativeSrc":"5998:6:69","nodeType":"YulIdentifier","src":"5998:6:69"},"nativeSrc":"5998:26:69","nodeType":"YulFunctionCall","src":"5998:26:69"},"nativeSrc":"5995:81:69","nodeType":"YulIf","src":"5995:81:69"},{"body":{"nativeSrc":"6128:42:69","nodeType":"YulBlock","src":"6128:42:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x22","nativeSrc":"6142:16:69","nodeType":"YulIdentifier","src":"6142:16:69"},"nativeSrc":"6142:18:69","nodeType":"YulFunctionCall","src":"6142:18:69"},"nativeSrc":"6142:18:69","nodeType":"YulExpressionStatement","src":"6142:18:69"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nativeSrc":"6092:18:69","nodeType":"YulIdentifier","src":"6092:18:69"},{"arguments":[{"name":"length","nativeSrc":"6115:6:69","nodeType":"YulIdentifier","src":"6115:6:69"},{"kind":"number","nativeSrc":"6123:2:69","nodeType":"YulLiteral","src":"6123:2:69","type":"","value":"32"}],"functionName":{"name":"lt","nativeSrc":"6112:2:69","nodeType":"YulIdentifier","src":"6112:2:69"},"nativeSrc":"6112:14:69","nodeType":"YulFunctionCall","src":"6112:14:69"}],"functionName":{"name":"eq","nativeSrc":"6089:2:69","nodeType":"YulIdentifier","src":"6089:2:69"},"nativeSrc":"6089:38:69","nodeType":"YulFunctionCall","src":"6089:38:69"},"nativeSrc":"6086:84:69","nodeType":"YulIf","src":"6086:84:69"}]},"name":"extract_byte_array_length","nativeSrc":"5856:320:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nativeSrc":"5891:4:69","nodeType":"YulTypedName","src":"5891:4:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"5900:6:69","nodeType":"YulTypedName","src":"5900:6:69","type":""}],"src":"5856:320:69"},{"body":{"nativeSrc":"6210:152:69","nodeType":"YulBlock","src":"6210:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"6227:1:69","nodeType":"YulLiteral","src":"6227:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"6230:77:69","nodeType":"YulLiteral","src":"6230:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"6220:6:69","nodeType":"YulIdentifier","src":"6220:6:69"},"nativeSrc":"6220:88:69","nodeType":"YulFunctionCall","src":"6220:88:69"},"nativeSrc":"6220:88:69","nodeType":"YulExpressionStatement","src":"6220:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"6324:1:69","nodeType":"YulLiteral","src":"6324:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"6327:4:69","nodeType":"YulLiteral","src":"6327:4:69","type":"","value":"0x11"}],"functionName":{"name":"mstore","nativeSrc":"6317:6:69","nodeType":"YulIdentifier","src":"6317:6:69"},"nativeSrc":"6317:15:69","nodeType":"YulFunctionCall","src":"6317:15:69"},"nativeSrc":"6317:15:69","nodeType":"YulExpressionStatement","src":"6317:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"6348:1:69","nodeType":"YulLiteral","src":"6348:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"6351:4:69","nodeType":"YulLiteral","src":"6351:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"6341:6:69","nodeType":"YulIdentifier","src":"6341:6:69"},"nativeSrc":"6341:15:69","nodeType":"YulFunctionCall","src":"6341:15:69"},"nativeSrc":"6341:15:69","nodeType":"YulExpressionStatement","src":"6341:15:69"}]},"name":"panic_error_0x11","nativeSrc":"6182:180:69","nodeType":"YulFunctionDefinition","src":"6182:180:69"},{"body":{"nativeSrc":"6412:147:69","nodeType":"YulBlock","src":"6412:147:69","statements":[{"nativeSrc":"6422:25:69","nodeType":"YulAssignment","src":"6422:25:69","value":{"arguments":[{"name":"x","nativeSrc":"6445:1:69","nodeType":"YulIdentifier","src":"6445:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"6427:17:69","nodeType":"YulIdentifier","src":"6427:17:69"},"nativeSrc":"6427:20:69","nodeType":"YulFunctionCall","src":"6427:20:69"},"variableNames":[{"name":"x","nativeSrc":"6422:1:69","nodeType":"YulIdentifier","src":"6422:1:69"}]},{"nativeSrc":"6456:25:69","nodeType":"YulAssignment","src":"6456:25:69","value":{"arguments":[{"name":"y","nativeSrc":"6479:1:69","nodeType":"YulIdentifier","src":"6479:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"6461:17:69","nodeType":"YulIdentifier","src":"6461:17:69"},"nativeSrc":"6461:20:69","nodeType":"YulFunctionCall","src":"6461:20:69"},"variableNames":[{"name":"y","nativeSrc":"6456:1:69","nodeType":"YulIdentifier","src":"6456:1:69"}]},{"nativeSrc":"6490:16:69","nodeType":"YulAssignment","src":"6490:16:69","value":{"arguments":[{"name":"x","nativeSrc":"6501:1:69","nodeType":"YulIdentifier","src":"6501:1:69"},{"name":"y","nativeSrc":"6504:1:69","nodeType":"YulIdentifier","src":"6504:1:69"}],"functionName":{"name":"add","nativeSrc":"6497:3:69","nodeType":"YulIdentifier","src":"6497:3:69"},"nativeSrc":"6497:9:69","nodeType":"YulFunctionCall","src":"6497:9:69"},"variableNames":[{"name":"sum","nativeSrc":"6490:3:69","nodeType":"YulIdentifier","src":"6490:3:69"}]},{"body":{"nativeSrc":"6530:22:69","nodeType":"YulBlock","src":"6530:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"6532:16:69","nodeType":"YulIdentifier","src":"6532:16:69"},"nativeSrc":"6532:18:69","nodeType":"YulFunctionCall","src":"6532:18:69"},"nativeSrc":"6532:18:69","nodeType":"YulExpressionStatement","src":"6532:18:69"}]},"condition":{"arguments":[{"name":"x","nativeSrc":"6522:1:69","nodeType":"YulIdentifier","src":"6522:1:69"},{"name":"sum","nativeSrc":"6525:3:69","nodeType":"YulIdentifier","src":"6525:3:69"}],"functionName":{"name":"gt","nativeSrc":"6519:2:69","nodeType":"YulIdentifier","src":"6519:2:69"},"nativeSrc":"6519:10:69","nodeType":"YulFunctionCall","src":"6519:10:69"},"nativeSrc":"6516:36:69","nodeType":"YulIf","src":"6516:36:69"}]},"name":"checked_add_t_uint256","nativeSrc":"6368:191:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"6399:1:69","nodeType":"YulTypedName","src":"6399:1:69","type":""},{"name":"y","nativeSrc":"6402:1:69","nodeType":"YulTypedName","src":"6402:1:69","type":""}],"returnVariables":[{"name":"sum","nativeSrc":"6408:3:69","nodeType":"YulTypedName","src":"6408:3:69","type":""}],"src":"6368:191:69"},{"body":{"nativeSrc":"6671:118:69","nodeType":"YulBlock","src":"6671:118:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"6693:6:69","nodeType":"YulIdentifier","src":"6693:6:69"},{"kind":"number","nativeSrc":"6701:1:69","nodeType":"YulLiteral","src":"6701:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"6689:3:69","nodeType":"YulIdentifier","src":"6689:3:69"},"nativeSrc":"6689:14:69","nodeType":"YulFunctionCall","src":"6689:14:69"},{"hexValue":"45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77","kind":"string","nativeSrc":"6705:34:69","nodeType":"YulLiteral","src":"6705:34:69","type":"","value":"ERC20: decreased allowance below"}],"functionName":{"name":"mstore","nativeSrc":"6682:6:69","nodeType":"YulIdentifier","src":"6682:6:69"},"nativeSrc":"6682:58:69","nodeType":"YulFunctionCall","src":"6682:58:69"},"nativeSrc":"6682:58:69","nodeType":"YulExpressionStatement","src":"6682:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"6761:6:69","nodeType":"YulIdentifier","src":"6761:6:69"},{"kind":"number","nativeSrc":"6769:2:69","nodeType":"YulLiteral","src":"6769:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"6757:3:69","nodeType":"YulIdentifier","src":"6757:3:69"},"nativeSrc":"6757:15:69","nodeType":"YulFunctionCall","src":"6757:15:69"},{"hexValue":"207a65726f","kind":"string","nativeSrc":"6774:7:69","nodeType":"YulLiteral","src":"6774:7:69","type":"","value":" zero"}],"functionName":{"name":"mstore","nativeSrc":"6750:6:69","nodeType":"YulIdentifier","src":"6750:6:69"},"nativeSrc":"6750:32:69","nodeType":"YulFunctionCall","src":"6750:32:69"},"nativeSrc":"6750:32:69","nodeType":"YulExpressionStatement","src":"6750:32:69"}]},"name":"store_literal_in_memory_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8","nativeSrc":"6565:224:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"6663:6:69","nodeType":"YulTypedName","src":"6663:6:69","type":""}],"src":"6565:224:69"},{"body":{"nativeSrc":"6941:220:69","nodeType":"YulBlock","src":"6941:220:69","statements":[{"nativeSrc":"6951:74:69","nodeType":"YulAssignment","src":"6951:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"7017:3:69","nodeType":"YulIdentifier","src":"7017:3:69"},{"kind":"number","nativeSrc":"7022:2:69","nodeType":"YulLiteral","src":"7022:2:69","type":"","value":"37"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"6958:58:69","nodeType":"YulIdentifier","src":"6958:58:69"},"nativeSrc":"6958:67:69","nodeType":"YulFunctionCall","src":"6958:67:69"},"variableNames":[{"name":"pos","nativeSrc":"6951:3:69","nodeType":"YulIdentifier","src":"6951:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"7123:3:69","nodeType":"YulIdentifier","src":"7123:3:69"}],"functionName":{"name":"store_literal_in_memory_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8","nativeSrc":"7034:88:69","nodeType":"YulIdentifier","src":"7034:88:69"},"nativeSrc":"7034:93:69","nodeType":"YulFunctionCall","src":"7034:93:69"},"nativeSrc":"7034:93:69","nodeType":"YulExpressionStatement","src":"7034:93:69"},{"nativeSrc":"7136:19:69","nodeType":"YulAssignment","src":"7136:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"7147:3:69","nodeType":"YulIdentifier","src":"7147:3:69"},{"kind":"number","nativeSrc":"7152:2:69","nodeType":"YulLiteral","src":"7152:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"7143:3:69","nodeType":"YulIdentifier","src":"7143:3:69"},"nativeSrc":"7143:12:69","nodeType":"YulFunctionCall","src":"7143:12:69"},"variableNames":[{"name":"end","nativeSrc":"7136:3:69","nodeType":"YulIdentifier","src":"7136:3:69"}]}]},"name":"abi_encode_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8_to_t_string_memory_ptr_fromStack","nativeSrc":"6795:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"6929:3:69","nodeType":"YulTypedName","src":"6929:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"6937:3:69","nodeType":"YulTypedName","src":"6937:3:69","type":""}],"src":"6795:366:69"},{"body":{"nativeSrc":"7338:248:69","nodeType":"YulBlock","src":"7338:248:69","statements":[{"nativeSrc":"7348:26:69","nodeType":"YulAssignment","src":"7348:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"7360:9:69","nodeType":"YulIdentifier","src":"7360:9:69"},{"kind":"number","nativeSrc":"7371:2:69","nodeType":"YulLiteral","src":"7371:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7356:3:69","nodeType":"YulIdentifier","src":"7356:3:69"},"nativeSrc":"7356:18:69","nodeType":"YulFunctionCall","src":"7356:18:69"},"variableNames":[{"name":"tail","nativeSrc":"7348:4:69","nodeType":"YulIdentifier","src":"7348:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7395:9:69","nodeType":"YulIdentifier","src":"7395:9:69"},{"kind":"number","nativeSrc":"7406:1:69","nodeType":"YulLiteral","src":"7406:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"7391:3:69","nodeType":"YulIdentifier","src":"7391:3:69"},"nativeSrc":"7391:17:69","nodeType":"YulFunctionCall","src":"7391:17:69"},{"arguments":[{"name":"tail","nativeSrc":"7414:4:69","nodeType":"YulIdentifier","src":"7414:4:69"},{"name":"headStart","nativeSrc":"7420:9:69","nodeType":"YulIdentifier","src":"7420:9:69"}],"functionName":{"name":"sub","nativeSrc":"7410:3:69","nodeType":"YulIdentifier","src":"7410:3:69"},"nativeSrc":"7410:20:69","nodeType":"YulFunctionCall","src":"7410:20:69"}],"functionName":{"name":"mstore","nativeSrc":"7384:6:69","nodeType":"YulIdentifier","src":"7384:6:69"},"nativeSrc":"7384:47:69","nodeType":"YulFunctionCall","src":"7384:47:69"},"nativeSrc":"7384:47:69","nodeType":"YulExpressionStatement","src":"7384:47:69"},{"nativeSrc":"7440:139:69","nodeType":"YulAssignment","src":"7440:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"7574:4:69","nodeType":"YulIdentifier","src":"7574:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8_to_t_string_memory_ptr_fromStack","nativeSrc":"7448:124:69","nodeType":"YulIdentifier","src":"7448:124:69"},"nativeSrc":"7448:131:69","nodeType":"YulFunctionCall","src":"7448:131:69"},"variableNames":[{"name":"tail","nativeSrc":"7440:4:69","nodeType":"YulIdentifier","src":"7440:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"7167:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"7318:9:69","nodeType":"YulTypedName","src":"7318:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"7333:4:69","nodeType":"YulTypedName","src":"7333:4:69","type":""}],"src":"7167:419:69"},{"body":{"nativeSrc":"7698:117:69","nodeType":"YulBlock","src":"7698:117:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"7720:6:69","nodeType":"YulIdentifier","src":"7720:6:69"},{"kind":"number","nativeSrc":"7728:1:69","nodeType":"YulLiteral","src":"7728:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"7716:3:69","nodeType":"YulIdentifier","src":"7716:3:69"},"nativeSrc":"7716:14:69","nodeType":"YulFunctionCall","src":"7716:14:69"},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f20616464","kind":"string","nativeSrc":"7732:34:69","nodeType":"YulLiteral","src":"7732:34:69","type":"","value":"ERC20: approve from the zero add"}],"functionName":{"name":"mstore","nativeSrc":"7709:6:69","nodeType":"YulIdentifier","src":"7709:6:69"},"nativeSrc":"7709:58:69","nodeType":"YulFunctionCall","src":"7709:58:69"},"nativeSrc":"7709:58:69","nodeType":"YulExpressionStatement","src":"7709:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"7788:6:69","nodeType":"YulIdentifier","src":"7788:6:69"},{"kind":"number","nativeSrc":"7796:2:69","nodeType":"YulLiteral","src":"7796:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7784:3:69","nodeType":"YulIdentifier","src":"7784:3:69"},"nativeSrc":"7784:15:69","nodeType":"YulFunctionCall","src":"7784:15:69"},{"hexValue":"72657373","kind":"string","nativeSrc":"7801:6:69","nodeType":"YulLiteral","src":"7801:6:69","type":"","value":"ress"}],"functionName":{"name":"mstore","nativeSrc":"7777:6:69","nodeType":"YulIdentifier","src":"7777:6:69"},"nativeSrc":"7777:31:69","nodeType":"YulFunctionCall","src":"7777:31:69"},"nativeSrc":"7777:31:69","nodeType":"YulExpressionStatement","src":"7777:31:69"}]},"name":"store_literal_in_memory_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208","nativeSrc":"7592:223:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"7690:6:69","nodeType":"YulTypedName","src":"7690:6:69","type":""}],"src":"7592:223:69"},{"body":{"nativeSrc":"7967:220:69","nodeType":"YulBlock","src":"7967:220:69","statements":[{"nativeSrc":"7977:74:69","nodeType":"YulAssignment","src":"7977:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"8043:3:69","nodeType":"YulIdentifier","src":"8043:3:69"},{"kind":"number","nativeSrc":"8048:2:69","nodeType":"YulLiteral","src":"8048:2:69","type":"","value":"36"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"7984:58:69","nodeType":"YulIdentifier","src":"7984:58:69"},"nativeSrc":"7984:67:69","nodeType":"YulFunctionCall","src":"7984:67:69"},"variableNames":[{"name":"pos","nativeSrc":"7977:3:69","nodeType":"YulIdentifier","src":"7977:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"8149:3:69","nodeType":"YulIdentifier","src":"8149:3:69"}],"functionName":{"name":"store_literal_in_memory_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208","nativeSrc":"8060:88:69","nodeType":"YulIdentifier","src":"8060:88:69"},"nativeSrc":"8060:93:69","nodeType":"YulFunctionCall","src":"8060:93:69"},"nativeSrc":"8060:93:69","nodeType":"YulExpressionStatement","src":"8060:93:69"},{"nativeSrc":"8162:19:69","nodeType":"YulAssignment","src":"8162:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"8173:3:69","nodeType":"YulIdentifier","src":"8173:3:69"},{"kind":"number","nativeSrc":"8178:2:69","nodeType":"YulLiteral","src":"8178:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"8169:3:69","nodeType":"YulIdentifier","src":"8169:3:69"},"nativeSrc":"8169:12:69","nodeType":"YulFunctionCall","src":"8169:12:69"},"variableNames":[{"name":"end","nativeSrc":"8162:3:69","nodeType":"YulIdentifier","src":"8162:3:69"}]}]},"name":"abi_encode_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208_to_t_string_memory_ptr_fromStack","nativeSrc":"7821:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"7955:3:69","nodeType":"YulTypedName","src":"7955:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"7963:3:69","nodeType":"YulTypedName","src":"7963:3:69","type":""}],"src":"7821:366:69"},{"body":{"nativeSrc":"8364:248:69","nodeType":"YulBlock","src":"8364:248:69","statements":[{"nativeSrc":"8374:26:69","nodeType":"YulAssignment","src":"8374:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"8386:9:69","nodeType":"YulIdentifier","src":"8386:9:69"},{"kind":"number","nativeSrc":"8397:2:69","nodeType":"YulLiteral","src":"8397:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8382:3:69","nodeType":"YulIdentifier","src":"8382:3:69"},"nativeSrc":"8382:18:69","nodeType":"YulFunctionCall","src":"8382:18:69"},"variableNames":[{"name":"tail","nativeSrc":"8374:4:69","nodeType":"YulIdentifier","src":"8374:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8421:9:69","nodeType":"YulIdentifier","src":"8421:9:69"},{"kind":"number","nativeSrc":"8432:1:69","nodeType":"YulLiteral","src":"8432:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"8417:3:69","nodeType":"YulIdentifier","src":"8417:3:69"},"nativeSrc":"8417:17:69","nodeType":"YulFunctionCall","src":"8417:17:69"},{"arguments":[{"name":"tail","nativeSrc":"8440:4:69","nodeType":"YulIdentifier","src":"8440:4:69"},{"name":"headStart","nativeSrc":"8446:9:69","nodeType":"YulIdentifier","src":"8446:9:69"}],"functionName":{"name":"sub","nativeSrc":"8436:3:69","nodeType":"YulIdentifier","src":"8436:3:69"},"nativeSrc":"8436:20:69","nodeType":"YulFunctionCall","src":"8436:20:69"}],"functionName":{"name":"mstore","nativeSrc":"8410:6:69","nodeType":"YulIdentifier","src":"8410:6:69"},"nativeSrc":"8410:47:69","nodeType":"YulFunctionCall","src":"8410:47:69"},"nativeSrc":"8410:47:69","nodeType":"YulExpressionStatement","src":"8410:47:69"},{"nativeSrc":"8466:139:69","nodeType":"YulAssignment","src":"8466:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"8600:4:69","nodeType":"YulIdentifier","src":"8600:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208_to_t_string_memory_ptr_fromStack","nativeSrc":"8474:124:69","nodeType":"YulIdentifier","src":"8474:124:69"},"nativeSrc":"8474:131:69","nodeType":"YulFunctionCall","src":"8474:131:69"},"variableNames":[{"name":"tail","nativeSrc":"8466:4:69","nodeType":"YulIdentifier","src":"8466:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"8193:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8344:9:69","nodeType":"YulTypedName","src":"8344:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"8359:4:69","nodeType":"YulTypedName","src":"8359:4:69","type":""}],"src":"8193:419:69"},{"body":{"nativeSrc":"8724:115:69","nodeType":"YulBlock","src":"8724:115:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"8746:6:69","nodeType":"YulIdentifier","src":"8746:6:69"},{"kind":"number","nativeSrc":"8754:1:69","nodeType":"YulLiteral","src":"8754:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"8742:3:69","nodeType":"YulIdentifier","src":"8742:3:69"},"nativeSrc":"8742:14:69","nodeType":"YulFunctionCall","src":"8742:14:69"},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f206164647265","kind":"string","nativeSrc":"8758:34:69","nodeType":"YulLiteral","src":"8758:34:69","type":"","value":"ERC20: approve to the zero addre"}],"functionName":{"name":"mstore","nativeSrc":"8735:6:69","nodeType":"YulIdentifier","src":"8735:6:69"},"nativeSrc":"8735:58:69","nodeType":"YulFunctionCall","src":"8735:58:69"},"nativeSrc":"8735:58:69","nodeType":"YulExpressionStatement","src":"8735:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"8814:6:69","nodeType":"YulIdentifier","src":"8814:6:69"},{"kind":"number","nativeSrc":"8822:2:69","nodeType":"YulLiteral","src":"8822:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8810:3:69","nodeType":"YulIdentifier","src":"8810:3:69"},"nativeSrc":"8810:15:69","nodeType":"YulFunctionCall","src":"8810:15:69"},{"hexValue":"7373","kind":"string","nativeSrc":"8827:4:69","nodeType":"YulLiteral","src":"8827:4:69","type":"","value":"ss"}],"functionName":{"name":"mstore","nativeSrc":"8803:6:69","nodeType":"YulIdentifier","src":"8803:6:69"},"nativeSrc":"8803:29:69","nodeType":"YulFunctionCall","src":"8803:29:69"},"nativeSrc":"8803:29:69","nodeType":"YulExpressionStatement","src":"8803:29:69"}]},"name":"store_literal_in_memory_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029","nativeSrc":"8618:221:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"8716:6:69","nodeType":"YulTypedName","src":"8716:6:69","type":""}],"src":"8618:221:69"},{"body":{"nativeSrc":"8991:220:69","nodeType":"YulBlock","src":"8991:220:69","statements":[{"nativeSrc":"9001:74:69","nodeType":"YulAssignment","src":"9001:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"9067:3:69","nodeType":"YulIdentifier","src":"9067:3:69"},{"kind":"number","nativeSrc":"9072:2:69","nodeType":"YulLiteral","src":"9072:2:69","type":"","value":"34"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"9008:58:69","nodeType":"YulIdentifier","src":"9008:58:69"},"nativeSrc":"9008:67:69","nodeType":"YulFunctionCall","src":"9008:67:69"},"variableNames":[{"name":"pos","nativeSrc":"9001:3:69","nodeType":"YulIdentifier","src":"9001:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"9173:3:69","nodeType":"YulIdentifier","src":"9173:3:69"}],"functionName":{"name":"store_literal_in_memory_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029","nativeSrc":"9084:88:69","nodeType":"YulIdentifier","src":"9084:88:69"},"nativeSrc":"9084:93:69","nodeType":"YulFunctionCall","src":"9084:93:69"},"nativeSrc":"9084:93:69","nodeType":"YulExpressionStatement","src":"9084:93:69"},{"nativeSrc":"9186:19:69","nodeType":"YulAssignment","src":"9186:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"9197:3:69","nodeType":"YulIdentifier","src":"9197:3:69"},{"kind":"number","nativeSrc":"9202:2:69","nodeType":"YulLiteral","src":"9202:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"9193:3:69","nodeType":"YulIdentifier","src":"9193:3:69"},"nativeSrc":"9193:12:69","nodeType":"YulFunctionCall","src":"9193:12:69"},"variableNames":[{"name":"end","nativeSrc":"9186:3:69","nodeType":"YulIdentifier","src":"9186:3:69"}]}]},"name":"abi_encode_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029_to_t_string_memory_ptr_fromStack","nativeSrc":"8845:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"8979:3:69","nodeType":"YulTypedName","src":"8979:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"8987:3:69","nodeType":"YulTypedName","src":"8987:3:69","type":""}],"src":"8845:366:69"},{"body":{"nativeSrc":"9388:248:69","nodeType":"YulBlock","src":"9388:248:69","statements":[{"nativeSrc":"9398:26:69","nodeType":"YulAssignment","src":"9398:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"9410:9:69","nodeType":"YulIdentifier","src":"9410:9:69"},{"kind":"number","nativeSrc":"9421:2:69","nodeType":"YulLiteral","src":"9421:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"9406:3:69","nodeType":"YulIdentifier","src":"9406:3:69"},"nativeSrc":"9406:18:69","nodeType":"YulFunctionCall","src":"9406:18:69"},"variableNames":[{"name":"tail","nativeSrc":"9398:4:69","nodeType":"YulIdentifier","src":"9398:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"9445:9:69","nodeType":"YulIdentifier","src":"9445:9:69"},{"kind":"number","nativeSrc":"9456:1:69","nodeType":"YulLiteral","src":"9456:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"9441:3:69","nodeType":"YulIdentifier","src":"9441:3:69"},"nativeSrc":"9441:17:69","nodeType":"YulFunctionCall","src":"9441:17:69"},{"arguments":[{"name":"tail","nativeSrc":"9464:4:69","nodeType":"YulIdentifier","src":"9464:4:69"},{"name":"headStart","nativeSrc":"9470:9:69","nodeType":"YulIdentifier","src":"9470:9:69"}],"functionName":{"name":"sub","nativeSrc":"9460:3:69","nodeType":"YulIdentifier","src":"9460:3:69"},"nativeSrc":"9460:20:69","nodeType":"YulFunctionCall","src":"9460:20:69"}],"functionName":{"name":"mstore","nativeSrc":"9434:6:69","nodeType":"YulIdentifier","src":"9434:6:69"},"nativeSrc":"9434:47:69","nodeType":"YulFunctionCall","src":"9434:47:69"},"nativeSrc":"9434:47:69","nodeType":"YulExpressionStatement","src":"9434:47:69"},{"nativeSrc":"9490:139:69","nodeType":"YulAssignment","src":"9490:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"9624:4:69","nodeType":"YulIdentifier","src":"9624:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029_to_t_string_memory_ptr_fromStack","nativeSrc":"9498:124:69","nodeType":"YulIdentifier","src":"9498:124:69"},"nativeSrc":"9498:131:69","nodeType":"YulFunctionCall","src":"9498:131:69"},"variableNames":[{"name":"tail","nativeSrc":"9490:4:69","nodeType":"YulIdentifier","src":"9490:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"9217:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"9368:9:69","nodeType":"YulTypedName","src":"9368:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"9383:4:69","nodeType":"YulTypedName","src":"9383:4:69","type":""}],"src":"9217:419:69"},{"body":{"nativeSrc":"9748:73:69","nodeType":"YulBlock","src":"9748:73:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"9770:6:69","nodeType":"YulIdentifier","src":"9770:6:69"},{"kind":"number","nativeSrc":"9778:1:69","nodeType":"YulLiteral","src":"9778:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"9766:3:69","nodeType":"YulIdentifier","src":"9766:3:69"},"nativeSrc":"9766:14:69","nodeType":"YulFunctionCall","src":"9766:14:69"},{"hexValue":"45524332303a20696e73756666696369656e7420616c6c6f77616e6365","kind":"string","nativeSrc":"9782:31:69","nodeType":"YulLiteral","src":"9782:31:69","type":"","value":"ERC20: insufficient allowance"}],"functionName":{"name":"mstore","nativeSrc":"9759:6:69","nodeType":"YulIdentifier","src":"9759:6:69"},"nativeSrc":"9759:55:69","nodeType":"YulFunctionCall","src":"9759:55:69"},"nativeSrc":"9759:55:69","nodeType":"YulExpressionStatement","src":"9759:55:69"}]},"name":"store_literal_in_memory_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe","nativeSrc":"9642:179:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"9740:6:69","nodeType":"YulTypedName","src":"9740:6:69","type":""}],"src":"9642:179:69"},{"body":{"nativeSrc":"9973:220:69","nodeType":"YulBlock","src":"9973:220:69","statements":[{"nativeSrc":"9983:74:69","nodeType":"YulAssignment","src":"9983:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"10049:3:69","nodeType":"YulIdentifier","src":"10049:3:69"},{"kind":"number","nativeSrc":"10054:2:69","nodeType":"YulLiteral","src":"10054:2:69","type":"","value":"29"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"9990:58:69","nodeType":"YulIdentifier","src":"9990:58:69"},"nativeSrc":"9990:67:69","nodeType":"YulFunctionCall","src":"9990:67:69"},"variableNames":[{"name":"pos","nativeSrc":"9983:3:69","nodeType":"YulIdentifier","src":"9983:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"10155:3:69","nodeType":"YulIdentifier","src":"10155:3:69"}],"functionName":{"name":"store_literal_in_memory_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe","nativeSrc":"10066:88:69","nodeType":"YulIdentifier","src":"10066:88:69"},"nativeSrc":"10066:93:69","nodeType":"YulFunctionCall","src":"10066:93:69"},"nativeSrc":"10066:93:69","nodeType":"YulExpressionStatement","src":"10066:93:69"},{"nativeSrc":"10168:19:69","nodeType":"YulAssignment","src":"10168:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"10179:3:69","nodeType":"YulIdentifier","src":"10179:3:69"},{"kind":"number","nativeSrc":"10184:2:69","nodeType":"YulLiteral","src":"10184:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"10175:3:69","nodeType":"YulIdentifier","src":"10175:3:69"},"nativeSrc":"10175:12:69","nodeType":"YulFunctionCall","src":"10175:12:69"},"variableNames":[{"name":"end","nativeSrc":"10168:3:69","nodeType":"YulIdentifier","src":"10168:3:69"}]}]},"name":"abi_encode_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe_to_t_string_memory_ptr_fromStack","nativeSrc":"9827:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"9961:3:69","nodeType":"YulTypedName","src":"9961:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"9969:3:69","nodeType":"YulTypedName","src":"9969:3:69","type":""}],"src":"9827:366:69"},{"body":{"nativeSrc":"10370:248:69","nodeType":"YulBlock","src":"10370:248:69","statements":[{"nativeSrc":"10380:26:69","nodeType":"YulAssignment","src":"10380:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"10392:9:69","nodeType":"YulIdentifier","src":"10392:9:69"},{"kind":"number","nativeSrc":"10403:2:69","nodeType":"YulLiteral","src":"10403:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"10388:3:69","nodeType":"YulIdentifier","src":"10388:3:69"},"nativeSrc":"10388:18:69","nodeType":"YulFunctionCall","src":"10388:18:69"},"variableNames":[{"name":"tail","nativeSrc":"10380:4:69","nodeType":"YulIdentifier","src":"10380:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10427:9:69","nodeType":"YulIdentifier","src":"10427:9:69"},{"kind":"number","nativeSrc":"10438:1:69","nodeType":"YulLiteral","src":"10438:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"10423:3:69","nodeType":"YulIdentifier","src":"10423:3:69"},"nativeSrc":"10423:17:69","nodeType":"YulFunctionCall","src":"10423:17:69"},{"arguments":[{"name":"tail","nativeSrc":"10446:4:69","nodeType":"YulIdentifier","src":"10446:4:69"},{"name":"headStart","nativeSrc":"10452:9:69","nodeType":"YulIdentifier","src":"10452:9:69"}],"functionName":{"name":"sub","nativeSrc":"10442:3:69","nodeType":"YulIdentifier","src":"10442:3:69"},"nativeSrc":"10442:20:69","nodeType":"YulFunctionCall","src":"10442:20:69"}],"functionName":{"name":"mstore","nativeSrc":"10416:6:69","nodeType":"YulIdentifier","src":"10416:6:69"},"nativeSrc":"10416:47:69","nodeType":"YulFunctionCall","src":"10416:47:69"},"nativeSrc":"10416:47:69","nodeType":"YulExpressionStatement","src":"10416:47:69"},{"nativeSrc":"10472:139:69","nodeType":"YulAssignment","src":"10472:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"10606:4:69","nodeType":"YulIdentifier","src":"10606:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe_to_t_string_memory_ptr_fromStack","nativeSrc":"10480:124:69","nodeType":"YulIdentifier","src":"10480:124:69"},"nativeSrc":"10480:131:69","nodeType":"YulFunctionCall","src":"10480:131:69"},"variableNames":[{"name":"tail","nativeSrc":"10472:4:69","nodeType":"YulIdentifier","src":"10472:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"10199:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"10350:9:69","nodeType":"YulTypedName","src":"10350:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"10365:4:69","nodeType":"YulTypedName","src":"10365:4:69","type":""}],"src":"10199:419:69"},{"body":{"nativeSrc":"10730:118:69","nodeType":"YulBlock","src":"10730:118:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"10752:6:69","nodeType":"YulIdentifier","src":"10752:6:69"},{"kind":"number","nativeSrc":"10760:1:69","nodeType":"YulLiteral","src":"10760:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"10748:3:69","nodeType":"YulIdentifier","src":"10748:3:69"},"nativeSrc":"10748:14:69","nodeType":"YulFunctionCall","src":"10748:14:69"},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f206164","kind":"string","nativeSrc":"10764:34:69","nodeType":"YulLiteral","src":"10764:34:69","type":"","value":"ERC20: transfer from the zero ad"}],"functionName":{"name":"mstore","nativeSrc":"10741:6:69","nodeType":"YulIdentifier","src":"10741:6:69"},"nativeSrc":"10741:58:69","nodeType":"YulFunctionCall","src":"10741:58:69"},"nativeSrc":"10741:58:69","nodeType":"YulExpressionStatement","src":"10741:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"10820:6:69","nodeType":"YulIdentifier","src":"10820:6:69"},{"kind":"number","nativeSrc":"10828:2:69","nodeType":"YulLiteral","src":"10828:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"10816:3:69","nodeType":"YulIdentifier","src":"10816:3:69"},"nativeSrc":"10816:15:69","nodeType":"YulFunctionCall","src":"10816:15:69"},{"hexValue":"6472657373","kind":"string","nativeSrc":"10833:7:69","nodeType":"YulLiteral","src":"10833:7:69","type":"","value":"dress"}],"functionName":{"name":"mstore","nativeSrc":"10809:6:69","nodeType":"YulIdentifier","src":"10809:6:69"},"nativeSrc":"10809:32:69","nodeType":"YulFunctionCall","src":"10809:32:69"},"nativeSrc":"10809:32:69","nodeType":"YulExpressionStatement","src":"10809:32:69"}]},"name":"store_literal_in_memory_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea","nativeSrc":"10624:224:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"10722:6:69","nodeType":"YulTypedName","src":"10722:6:69","type":""}],"src":"10624:224:69"},{"body":{"nativeSrc":"11000:220:69","nodeType":"YulBlock","src":"11000:220:69","statements":[{"nativeSrc":"11010:74:69","nodeType":"YulAssignment","src":"11010:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"11076:3:69","nodeType":"YulIdentifier","src":"11076:3:69"},{"kind":"number","nativeSrc":"11081:2:69","nodeType":"YulLiteral","src":"11081:2:69","type":"","value":"37"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"11017:58:69","nodeType":"YulIdentifier","src":"11017:58:69"},"nativeSrc":"11017:67:69","nodeType":"YulFunctionCall","src":"11017:67:69"},"variableNames":[{"name":"pos","nativeSrc":"11010:3:69","nodeType":"YulIdentifier","src":"11010:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"11182:3:69","nodeType":"YulIdentifier","src":"11182:3:69"}],"functionName":{"name":"store_literal_in_memory_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea","nativeSrc":"11093:88:69","nodeType":"YulIdentifier","src":"11093:88:69"},"nativeSrc":"11093:93:69","nodeType":"YulFunctionCall","src":"11093:93:69"},"nativeSrc":"11093:93:69","nodeType":"YulExpressionStatement","src":"11093:93:69"},{"nativeSrc":"11195:19:69","nodeType":"YulAssignment","src":"11195:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"11206:3:69","nodeType":"YulIdentifier","src":"11206:3:69"},{"kind":"number","nativeSrc":"11211:2:69","nodeType":"YulLiteral","src":"11211:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"11202:3:69","nodeType":"YulIdentifier","src":"11202:3:69"},"nativeSrc":"11202:12:69","nodeType":"YulFunctionCall","src":"11202:12:69"},"variableNames":[{"name":"end","nativeSrc":"11195:3:69","nodeType":"YulIdentifier","src":"11195:3:69"}]}]},"name":"abi_encode_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea_to_t_string_memory_ptr_fromStack","nativeSrc":"10854:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"10988:3:69","nodeType":"YulTypedName","src":"10988:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"10996:3:69","nodeType":"YulTypedName","src":"10996:3:69","type":""}],"src":"10854:366:69"},{"body":{"nativeSrc":"11397:248:69","nodeType":"YulBlock","src":"11397:248:69","statements":[{"nativeSrc":"11407:26:69","nodeType":"YulAssignment","src":"11407:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"11419:9:69","nodeType":"YulIdentifier","src":"11419:9:69"},{"kind":"number","nativeSrc":"11430:2:69","nodeType":"YulLiteral","src":"11430:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"11415:3:69","nodeType":"YulIdentifier","src":"11415:3:69"},"nativeSrc":"11415:18:69","nodeType":"YulFunctionCall","src":"11415:18:69"},"variableNames":[{"name":"tail","nativeSrc":"11407:4:69","nodeType":"YulIdentifier","src":"11407:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"11454:9:69","nodeType":"YulIdentifier","src":"11454:9:69"},{"kind":"number","nativeSrc":"11465:1:69","nodeType":"YulLiteral","src":"11465:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"11450:3:69","nodeType":"YulIdentifier","src":"11450:3:69"},"nativeSrc":"11450:17:69","nodeType":"YulFunctionCall","src":"11450:17:69"},{"arguments":[{"name":"tail","nativeSrc":"11473:4:69","nodeType":"YulIdentifier","src":"11473:4:69"},{"name":"headStart","nativeSrc":"11479:9:69","nodeType":"YulIdentifier","src":"11479:9:69"}],"functionName":{"name":"sub","nativeSrc":"11469:3:69","nodeType":"YulIdentifier","src":"11469:3:69"},"nativeSrc":"11469:20:69","nodeType":"YulFunctionCall","src":"11469:20:69"}],"functionName":{"name":"mstore","nativeSrc":"11443:6:69","nodeType":"YulIdentifier","src":"11443:6:69"},"nativeSrc":"11443:47:69","nodeType":"YulFunctionCall","src":"11443:47:69"},"nativeSrc":"11443:47:69","nodeType":"YulExpressionStatement","src":"11443:47:69"},{"nativeSrc":"11499:139:69","nodeType":"YulAssignment","src":"11499:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"11633:4:69","nodeType":"YulIdentifier","src":"11633:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea_to_t_string_memory_ptr_fromStack","nativeSrc":"11507:124:69","nodeType":"YulIdentifier","src":"11507:124:69"},"nativeSrc":"11507:131:69","nodeType":"YulFunctionCall","src":"11507:131:69"},"variableNames":[{"name":"tail","nativeSrc":"11499:4:69","nodeType":"YulIdentifier","src":"11499:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"11226:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"11377:9:69","nodeType":"YulTypedName","src":"11377:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"11392:4:69","nodeType":"YulTypedName","src":"11392:4:69","type":""}],"src":"11226:419:69"},{"body":{"nativeSrc":"11757:116:69","nodeType":"YulBlock","src":"11757:116:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"11779:6:69","nodeType":"YulIdentifier","src":"11779:6:69"},{"kind":"number","nativeSrc":"11787:1:69","nodeType":"YulLiteral","src":"11787:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"11775:3:69","nodeType":"YulIdentifier","src":"11775:3:69"},"nativeSrc":"11775:14:69","nodeType":"YulFunctionCall","src":"11775:14:69"},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472","kind":"string","nativeSrc":"11791:34:69","nodeType":"YulLiteral","src":"11791:34:69","type":"","value":"ERC20: transfer to the zero addr"}],"functionName":{"name":"mstore","nativeSrc":"11768:6:69","nodeType":"YulIdentifier","src":"11768:6:69"},"nativeSrc":"11768:58:69","nodeType":"YulFunctionCall","src":"11768:58:69"},"nativeSrc":"11768:58:69","nodeType":"YulExpressionStatement","src":"11768:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"11847:6:69","nodeType":"YulIdentifier","src":"11847:6:69"},{"kind":"number","nativeSrc":"11855:2:69","nodeType":"YulLiteral","src":"11855:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"11843:3:69","nodeType":"YulIdentifier","src":"11843:3:69"},"nativeSrc":"11843:15:69","nodeType":"YulFunctionCall","src":"11843:15:69"},{"hexValue":"657373","kind":"string","nativeSrc":"11860:5:69","nodeType":"YulLiteral","src":"11860:5:69","type":"","value":"ess"}],"functionName":{"name":"mstore","nativeSrc":"11836:6:69","nodeType":"YulIdentifier","src":"11836:6:69"},"nativeSrc":"11836:30:69","nodeType":"YulFunctionCall","src":"11836:30:69"},"nativeSrc":"11836:30:69","nodeType":"YulExpressionStatement","src":"11836:30:69"}]},"name":"store_literal_in_memory_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f","nativeSrc":"11651:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"11749:6:69","nodeType":"YulTypedName","src":"11749:6:69","type":""}],"src":"11651:222:69"},{"body":{"nativeSrc":"12025:220:69","nodeType":"YulBlock","src":"12025:220:69","statements":[{"nativeSrc":"12035:74:69","nodeType":"YulAssignment","src":"12035:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"12101:3:69","nodeType":"YulIdentifier","src":"12101:3:69"},{"kind":"number","nativeSrc":"12106:2:69","nodeType":"YulLiteral","src":"12106:2:69","type":"","value":"35"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"12042:58:69","nodeType":"YulIdentifier","src":"12042:58:69"},"nativeSrc":"12042:67:69","nodeType":"YulFunctionCall","src":"12042:67:69"},"variableNames":[{"name":"pos","nativeSrc":"12035:3:69","nodeType":"YulIdentifier","src":"12035:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"12207:3:69","nodeType":"YulIdentifier","src":"12207:3:69"}],"functionName":{"name":"store_literal_in_memory_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f","nativeSrc":"12118:88:69","nodeType":"YulIdentifier","src":"12118:88:69"},"nativeSrc":"12118:93:69","nodeType":"YulFunctionCall","src":"12118:93:69"},"nativeSrc":"12118:93:69","nodeType":"YulExpressionStatement","src":"12118:93:69"},{"nativeSrc":"12220:19:69","nodeType":"YulAssignment","src":"12220:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"12231:3:69","nodeType":"YulIdentifier","src":"12231:3:69"},{"kind":"number","nativeSrc":"12236:2:69","nodeType":"YulLiteral","src":"12236:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"12227:3:69","nodeType":"YulIdentifier","src":"12227:3:69"},"nativeSrc":"12227:12:69","nodeType":"YulFunctionCall","src":"12227:12:69"},"variableNames":[{"name":"end","nativeSrc":"12220:3:69","nodeType":"YulIdentifier","src":"12220:3:69"}]}]},"name":"abi_encode_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f_to_t_string_memory_ptr_fromStack","nativeSrc":"11879:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"12013:3:69","nodeType":"YulTypedName","src":"12013:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"12021:3:69","nodeType":"YulTypedName","src":"12021:3:69","type":""}],"src":"11879:366:69"},{"body":{"nativeSrc":"12422:248:69","nodeType":"YulBlock","src":"12422:248:69","statements":[{"nativeSrc":"12432:26:69","nodeType":"YulAssignment","src":"12432:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"12444:9:69","nodeType":"YulIdentifier","src":"12444:9:69"},{"kind":"number","nativeSrc":"12455:2:69","nodeType":"YulLiteral","src":"12455:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"12440:3:69","nodeType":"YulIdentifier","src":"12440:3:69"},"nativeSrc":"12440:18:69","nodeType":"YulFunctionCall","src":"12440:18:69"},"variableNames":[{"name":"tail","nativeSrc":"12432:4:69","nodeType":"YulIdentifier","src":"12432:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"12479:9:69","nodeType":"YulIdentifier","src":"12479:9:69"},{"kind":"number","nativeSrc":"12490:1:69","nodeType":"YulLiteral","src":"12490:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"12475:3:69","nodeType":"YulIdentifier","src":"12475:3:69"},"nativeSrc":"12475:17:69","nodeType":"YulFunctionCall","src":"12475:17:69"},{"arguments":[{"name":"tail","nativeSrc":"12498:4:69","nodeType":"YulIdentifier","src":"12498:4:69"},{"name":"headStart","nativeSrc":"12504:9:69","nodeType":"YulIdentifier","src":"12504:9:69"}],"functionName":{"name":"sub","nativeSrc":"12494:3:69","nodeType":"YulIdentifier","src":"12494:3:69"},"nativeSrc":"12494:20:69","nodeType":"YulFunctionCall","src":"12494:20:69"}],"functionName":{"name":"mstore","nativeSrc":"12468:6:69","nodeType":"YulIdentifier","src":"12468:6:69"},"nativeSrc":"12468:47:69","nodeType":"YulFunctionCall","src":"12468:47:69"},"nativeSrc":"12468:47:69","nodeType":"YulExpressionStatement","src":"12468:47:69"},{"nativeSrc":"12524:139:69","nodeType":"YulAssignment","src":"12524:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"12658:4:69","nodeType":"YulIdentifier","src":"12658:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f_to_t_string_memory_ptr_fromStack","nativeSrc":"12532:124:69","nodeType":"YulIdentifier","src":"12532:124:69"},"nativeSrc":"12532:131:69","nodeType":"YulFunctionCall","src":"12532:131:69"},"variableNames":[{"name":"tail","nativeSrc":"12524:4:69","nodeType":"YulIdentifier","src":"12524:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"12251:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"12402:9:69","nodeType":"YulTypedName","src":"12402:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"12417:4:69","nodeType":"YulTypedName","src":"12417:4:69","type":""}],"src":"12251:419:69"},{"body":{"nativeSrc":"12782:119:69","nodeType":"YulBlock","src":"12782:119:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"12804:6:69","nodeType":"YulIdentifier","src":"12804:6:69"},{"kind":"number","nativeSrc":"12812:1:69","nodeType":"YulLiteral","src":"12812:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"12800:3:69","nodeType":"YulIdentifier","src":"12800:3:69"},"nativeSrc":"12800:14:69","nodeType":"YulFunctionCall","src":"12800:14:69"},{"hexValue":"45524332303a207472616e7366657220616d6f756e7420657863656564732062","kind":"string","nativeSrc":"12816:34:69","nodeType":"YulLiteral","src":"12816:34:69","type":"","value":"ERC20: transfer amount exceeds b"}],"functionName":{"name":"mstore","nativeSrc":"12793:6:69","nodeType":"YulIdentifier","src":"12793:6:69"},"nativeSrc":"12793:58:69","nodeType":"YulFunctionCall","src":"12793:58:69"},"nativeSrc":"12793:58:69","nodeType":"YulExpressionStatement","src":"12793:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"12872:6:69","nodeType":"YulIdentifier","src":"12872:6:69"},{"kind":"number","nativeSrc":"12880:2:69","nodeType":"YulLiteral","src":"12880:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"12868:3:69","nodeType":"YulIdentifier","src":"12868:3:69"},"nativeSrc":"12868:15:69","nodeType":"YulFunctionCall","src":"12868:15:69"},{"hexValue":"616c616e6365","kind":"string","nativeSrc":"12885:8:69","nodeType":"YulLiteral","src":"12885:8:69","type":"","value":"alance"}],"functionName":{"name":"mstore","nativeSrc":"12861:6:69","nodeType":"YulIdentifier","src":"12861:6:69"},"nativeSrc":"12861:33:69","nodeType":"YulFunctionCall","src":"12861:33:69"},"nativeSrc":"12861:33:69","nodeType":"YulExpressionStatement","src":"12861:33:69"}]},"name":"store_literal_in_memory_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6","nativeSrc":"12676:225:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"12774:6:69","nodeType":"YulTypedName","src":"12774:6:69","type":""}],"src":"12676:225:69"},{"body":{"nativeSrc":"13053:220:69","nodeType":"YulBlock","src":"13053:220:69","statements":[{"nativeSrc":"13063:74:69","nodeType":"YulAssignment","src":"13063:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"13129:3:69","nodeType":"YulIdentifier","src":"13129:3:69"},{"kind":"number","nativeSrc":"13134:2:69","nodeType":"YulLiteral","src":"13134:2:69","type":"","value":"38"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"13070:58:69","nodeType":"YulIdentifier","src":"13070:58:69"},"nativeSrc":"13070:67:69","nodeType":"YulFunctionCall","src":"13070:67:69"},"variableNames":[{"name":"pos","nativeSrc":"13063:3:69","nodeType":"YulIdentifier","src":"13063:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"13235:3:69","nodeType":"YulIdentifier","src":"13235:3:69"}],"functionName":{"name":"store_literal_in_memory_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6","nativeSrc":"13146:88:69","nodeType":"YulIdentifier","src":"13146:88:69"},"nativeSrc":"13146:93:69","nodeType":"YulFunctionCall","src":"13146:93:69"},"nativeSrc":"13146:93:69","nodeType":"YulExpressionStatement","src":"13146:93:69"},{"nativeSrc":"13248:19:69","nodeType":"YulAssignment","src":"13248:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"13259:3:69","nodeType":"YulIdentifier","src":"13259:3:69"},{"kind":"number","nativeSrc":"13264:2:69","nodeType":"YulLiteral","src":"13264:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"13255:3:69","nodeType":"YulIdentifier","src":"13255:3:69"},"nativeSrc":"13255:12:69","nodeType":"YulFunctionCall","src":"13255:12:69"},"variableNames":[{"name":"end","nativeSrc":"13248:3:69","nodeType":"YulIdentifier","src":"13248:3:69"}]}]},"name":"abi_encode_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6_to_t_string_memory_ptr_fromStack","nativeSrc":"12907:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"13041:3:69","nodeType":"YulTypedName","src":"13041:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"13049:3:69","nodeType":"YulTypedName","src":"13049:3:69","type":""}],"src":"12907:366:69"},{"body":{"nativeSrc":"13450:248:69","nodeType":"YulBlock","src":"13450:248:69","statements":[{"nativeSrc":"13460:26:69","nodeType":"YulAssignment","src":"13460:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"13472:9:69","nodeType":"YulIdentifier","src":"13472:9:69"},{"kind":"number","nativeSrc":"13483:2:69","nodeType":"YulLiteral","src":"13483:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"13468:3:69","nodeType":"YulIdentifier","src":"13468:3:69"},"nativeSrc":"13468:18:69","nodeType":"YulFunctionCall","src":"13468:18:69"},"variableNames":[{"name":"tail","nativeSrc":"13460:4:69","nodeType":"YulIdentifier","src":"13460:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"13507:9:69","nodeType":"YulIdentifier","src":"13507:9:69"},{"kind":"number","nativeSrc":"13518:1:69","nodeType":"YulLiteral","src":"13518:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"13503:3:69","nodeType":"YulIdentifier","src":"13503:3:69"},"nativeSrc":"13503:17:69","nodeType":"YulFunctionCall","src":"13503:17:69"},{"arguments":[{"name":"tail","nativeSrc":"13526:4:69","nodeType":"YulIdentifier","src":"13526:4:69"},{"name":"headStart","nativeSrc":"13532:9:69","nodeType":"YulIdentifier","src":"13532:9:69"}],"functionName":{"name":"sub","nativeSrc":"13522:3:69","nodeType":"YulIdentifier","src":"13522:3:69"},"nativeSrc":"13522:20:69","nodeType":"YulFunctionCall","src":"13522:20:69"}],"functionName":{"name":"mstore","nativeSrc":"13496:6:69","nodeType":"YulIdentifier","src":"13496:6:69"},"nativeSrc":"13496:47:69","nodeType":"YulFunctionCall","src":"13496:47:69"},"nativeSrc":"13496:47:69","nodeType":"YulExpressionStatement","src":"13496:47:69"},{"nativeSrc":"13552:139:69","nodeType":"YulAssignment","src":"13552:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"13686:4:69","nodeType":"YulIdentifier","src":"13686:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6_to_t_string_memory_ptr_fromStack","nativeSrc":"13560:124:69","nodeType":"YulIdentifier","src":"13560:124:69"},"nativeSrc":"13560:131:69","nodeType":"YulFunctionCall","src":"13560:131:69"},"variableNames":[{"name":"tail","nativeSrc":"13552:4:69","nodeType":"YulIdentifier","src":"13552:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"13279:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"13430:9:69","nodeType":"YulTypedName","src":"13430:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"13445:4:69","nodeType":"YulTypedName","src":"13445:4:69","type":""}],"src":"13279:419:69"}]},"contents":"{\n\n    function array_length_t_string_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function copy_memory_to_memory_with_cleanup(src, dst, length) {\n\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n        let length := array_length_t_string_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0,  tail)\n\n    }\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function validator_revert_t_uint256(value) {\n        if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_uint256(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_bool(value) -> cleaned {\n        cleaned := iszero(iszero(value))\n    }\n\n    function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n        mstore(pos, cleanup_t_bool(value))\n    }\n\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_bool_to_t_bool_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint256(value))\n    }\n\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_uint8(value) -> cleaned {\n        cleaned := and(value, 0xff)\n    }\n\n    function abi_encode_t_uint8_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint8_to_t_uint8_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function panic_error_0x22() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x22)\n        revert(0, 0x24)\n    }\n\n    function extract_byte_array_length(data) -> length {\n        length := div(data, 2)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) {\n            length := and(length, 0x7f)\n        }\n\n        if eq(outOfPlaceEncoding, lt(length, 32)) {\n            panic_error_0x22()\n        }\n    }\n\n    function panic_error_0x11() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n\n    function checked_add_t_uint256(x, y) -> sum {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        sum := add(x, y)\n\n        if gt(x, sum) { panic_error_0x11() }\n\n    }\n\n    function store_literal_in_memory_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: decreased allowance below\")\n\n        mstore(add(memPtr, 32), \" zero\")\n\n    }\n\n    function abi_encode_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 37)\n        store_literal_in_memory_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: approve from the zero add\")\n\n        mstore(add(memPtr, 32), \"ress\")\n\n    }\n\n    function abi_encode_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 36)\n        store_literal_in_memory_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: approve to the zero addre\")\n\n        mstore(add(memPtr, 32), \"ss\")\n\n    }\n\n    function abi_encode_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 34)\n        store_literal_in_memory_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: insufficient allowance\")\n\n    }\n\n    function abi_encode_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 29)\n        store_literal_in_memory_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: transfer from the zero ad\")\n\n        mstore(add(memPtr, 32), \"dress\")\n\n    }\n\n    function abi_encode_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 37)\n        store_literal_in_memory_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: transfer to the zero addr\")\n\n        mstore(add(memPtr, 32), \"ess\")\n\n    }\n\n    function abi_encode_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 35)\n        store_literal_in_memory_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: transfer amount exceeds b\")\n\n        mstore(add(memPtr, 32), \"alance\")\n\n    }\n\n    function abi_encode_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 38)\n        store_literal_in_memory_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461011f57806370a082311461013257806395d89b411461015b578063a457c2d714610163578063a9059cbb14610176578063dd62ed3e1461018957600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ec57806323b872dd146100fd578063313ce56714610110575b600080fd5b6100b661019c565b6040516100c39190610560565b60405180910390f35b6100df6100da3660046105bc565b61022e565b6040516100c39190610603565b6035545b6040516100c39190610617565b6100df61010b366004610625565b610248565b60126040516100c3919061067e565b6100df61012d3660046105bc565b61026c565b6100f061014036600461068c565b6001600160a01b031660009081526033602052604090205490565b6100b661028e565b6100df6101713660046105bc565b61029d565b6100df6101843660046105bc565b6102e3565b6100f06101973660046106b5565b6102f1565b6060603680546101ab906106fe565b80601f01602080910402602001604051908101604052809291908181526020018280546101d7906106fe565b80156102245780601f106101f957610100808354040283529160200191610224565b820191906000526020600020905b81548152906001019060200180831161020757829003601f168201915b5050505050905090565b60003361023c81858561031c565b60019150505b92915050565b6000336102568582856103d0565b61026185858561041a565b506001949350505050565b60003361023c81858561027f83836102f1565b6102899190610740565b61031c565b6060603780546101ab906106fe565b600033816102ab82866102f1565b9050838110156102d65760405162461bcd60e51b81526004016102cd90610798565b60405180910390fd5b610261828686840361031c565b60003361023c81858561041a565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166103425760405162461bcd60e51b81526004016102cd906107e9565b6001600160a01b0382166103685760405162461bcd60e51b81526004016102cd90610838565b6001600160a01b0380841660008181526034602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103c3908590610617565b60405180910390a3505050565b60006103dc84846102f1565b9050600019811461041457818110156104075760405162461bcd60e51b81526004016102cd90610848565b610414848484840361031c565b50505050565b6001600160a01b0383166104405760405162461bcd60e51b81526004016102cd906108c5565b6001600160a01b0382166104665760405162461bcd60e51b81526004016102cd90610915565b6001600160a01b0383166000908152603360205260409020548181101561049f5760405162461bcd60e51b81526004016102cd90610968565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104fd908690610617565b60405180910390a3610414565b60005b8381101561052557818101518382015260200161050d565b50506000910152565b6000610538825190565b80845260208401935061054f81856020860161050a565b601f01601f19169290920192915050565b60208082528101610571818461052e565b9392505050565b60006001600160a01b038216610242565b61059281610578565b811461059d57600080fd5b50565b803561024281610589565b80610592565b8035610242816105ab565b600080604083850312156105d2576105d2600080fd5b60006105de85856105a0565b92505060206105ef858286016105b1565b9150509250929050565b8015155b82525050565b6020810161024282846105f9565b806105fd565b602081016102428284610611565b60008060006060848603121561063d5761063d600080fd5b600061064986866105a0565b935050602061065a868287016105a0565b925050604061066b868287016105b1565b9150509250925092565b60ff81166105fd565b602081016102428284610675565b6000602082840312156106a1576106a1600080fd5b60006106ad84846105a0565b949350505050565b600080604083850312156106cb576106cb600080fd5b60006106d785856105a0565b92505060206105ef858286016105a0565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061071257607f821691505b602082108103610724576107246106e8565b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102425761024261072a565b602581526000602082017f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77815264207a65726f60d81b602082015291505b5060400190565b6020808252810161024281610753565b602481526000602082017f45524332303a20617070726f76652066726f6d20746865207a65726f206164648152637265737360e01b60208201529150610791565b60208082528101610242816107a8565b602281526000602082017f45524332303a20617070726f766520746f20746865207a65726f206164647265815261737360f01b60208201529150610791565b60208082528101610242816107f9565b6020808252810161024281601d81527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000602082015260400190565b602581526000602082017f45524332303a207472616e736665722066726f6d20746865207a65726f206164815264647265737360d81b60208201529150610791565b6020808252810161024281610883565b602381526000602082017f45524332303a207472616e7366657220746f20746865207a65726f206164647281526265737360e81b60208201529150610791565b60208082528101610242816108d5565b602681526000602082017f45524332303a207472616e7366657220616d6f756e7420657863656564732062815265616c616e636560d01b60208201529150610791565b602080825281016102428161092556fea2646970667358221220dd279f335dd3279a00c62091413e94606f4e90c7b157d0d8c13632c61854baaa64736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x11F JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x132 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x15B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x163 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x189 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xEC JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0xFD JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x110 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x19C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0x560 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xDF PUSH2 0xDA CALLDATASIZE PUSH1 0x4 PUSH2 0x5BC JUMP JUMPDEST PUSH2 0x22E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0x603 JUMP JUMPDEST PUSH1 0x35 SLOAD JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0x617 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x10B CALLDATASIZE PUSH1 0x4 PUSH2 0x625 JUMP JUMPDEST PUSH2 0x248 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x40 MLOAD PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0x67E JUMP JUMPDEST PUSH2 0xDF PUSH2 0x12D CALLDATASIZE PUSH1 0x4 PUSH2 0x5BC JUMP JUMPDEST PUSH2 0x26C JUMP JUMPDEST PUSH2 0xF0 PUSH2 0x140 CALLDATASIZE PUSH1 0x4 PUSH2 0x68C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xB6 PUSH2 0x28E JUMP JUMPDEST PUSH2 0xDF PUSH2 0x171 CALLDATASIZE PUSH1 0x4 PUSH2 0x5BC JUMP JUMPDEST PUSH2 0x29D JUMP JUMPDEST PUSH2 0xDF PUSH2 0x184 CALLDATASIZE PUSH1 0x4 PUSH2 0x5BC JUMP JUMPDEST PUSH2 0x2E3 JUMP JUMPDEST PUSH2 0xF0 PUSH2 0x197 CALLDATASIZE PUSH1 0x4 PUSH2 0x6B5 JUMP JUMPDEST PUSH2 0x2F1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x36 DUP1 SLOAD PUSH2 0x1AB SWAP1 PUSH2 0x6FE JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1D7 SWAP1 PUSH2 0x6FE JUMP JUMPDEST DUP1 ISZERO PUSH2 0x224 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1F9 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x224 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x207 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x23C DUP2 DUP6 DUP6 PUSH2 0x31C JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x256 DUP6 DUP3 DUP6 PUSH2 0x3D0 JUMP JUMPDEST PUSH2 0x261 DUP6 DUP6 DUP6 PUSH2 0x41A JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x23C DUP2 DUP6 DUP6 PUSH2 0x27F DUP4 DUP4 PUSH2 0x2F1 JUMP JUMPDEST PUSH2 0x289 SWAP2 SWAP1 PUSH2 0x740 JUMP JUMPDEST PUSH2 0x31C JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x1AB SWAP1 PUSH2 0x6FE JUMP JUMPDEST PUSH1 0x0 CALLER DUP2 PUSH2 0x2AB DUP3 DUP7 PUSH2 0x2F1 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x2D6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2CD SWAP1 PUSH2 0x798 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x261 DUP3 DUP7 DUP7 DUP5 SUB PUSH2 0x31C JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x23C DUP2 DUP6 DUP6 PUSH2 0x41A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x342 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2CD SWAP1 PUSH2 0x7E9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x368 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2CD SWAP1 PUSH2 0x838 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x3C3 SWAP1 DUP6 SWAP1 PUSH2 0x617 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3DC DUP5 DUP5 PUSH2 0x2F1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x414 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x407 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2CD SWAP1 PUSH2 0x848 JUMP JUMPDEST PUSH2 0x414 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x31C JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x440 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2CD SWAP1 PUSH2 0x8C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x466 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2CD SWAP1 PUSH2 0x915 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x49F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2CD SWAP1 PUSH2 0x968 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE SWAP3 DUP7 AND DUP1 DUP3 MSTORE SWAP1 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE SWAP2 MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x4FD SWAP1 DUP7 SWAP1 PUSH2 0x617 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x414 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x525 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x50D JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x538 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x54F DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x50A JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x571 DUP2 DUP5 PUSH2 0x52E JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x242 JUMP JUMPDEST PUSH2 0x592 DUP2 PUSH2 0x578 JUMP JUMPDEST DUP2 EQ PUSH2 0x59D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x242 DUP2 PUSH2 0x589 JUMP JUMPDEST DUP1 PUSH2 0x592 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x242 DUP2 PUSH2 0x5AB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5D2 JUMPI PUSH2 0x5D2 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5DE DUP6 DUP6 PUSH2 0x5A0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x5EF DUP6 DUP3 DUP7 ADD PUSH2 0x5B1 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x242 DUP3 DUP5 PUSH2 0x5F9 JUMP JUMPDEST DUP1 PUSH2 0x5FD JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x242 DUP3 DUP5 PUSH2 0x611 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x63D JUMPI PUSH2 0x63D PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x649 DUP7 DUP7 PUSH2 0x5A0 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x65A DUP7 DUP3 DUP8 ADD PUSH2 0x5A0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x66B DUP7 DUP3 DUP8 ADD PUSH2 0x5B1 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0xFF DUP2 AND PUSH2 0x5FD JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x242 DUP3 DUP5 PUSH2 0x675 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6A1 JUMPI PUSH2 0x6A1 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x6AD DUP5 DUP5 PUSH2 0x5A0 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x6CB JUMPI PUSH2 0x6CB PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x6D7 DUP6 DUP6 PUSH2 0x5A0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x5EF DUP6 DUP3 DUP7 ADD PUSH2 0x5A0 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP2 DIV PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x712 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x724 JUMPI PUSH2 0x724 PUSH2 0x6E8 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x242 JUMPI PUSH2 0x242 PUSH2 0x72A JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 DUP2 MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x242 DUP2 PUSH2 0x753 JUMP JUMPDEST PUSH1 0x24 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 DUP2 MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x791 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x242 DUP2 PUSH2 0x7A8 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 DUP2 MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x791 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x242 DUP2 PUSH2 0x7F9 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x242 DUP2 PUSH1 0x1D DUP2 MSTORE PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 DUP2 MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x791 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x242 DUP2 PUSH2 0x883 JUMP JUMPDEST PUSH1 0x23 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 DUP2 MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x791 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x242 DUP2 PUSH2 0x8D5 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 DUP2 MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x791 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x242 DUP2 PUSH2 0x925 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD 0x27 SWAP16 CALLER TSTORE 0xD3 0x27 SWAP11 STOP 0xC6 KECCAK256 SWAP2 COINBASE RETURNDATACOPY SWAP5 PUSH1 0x6F 0x4E SWAP1 0xC7 0xB1 JUMPI 0xD0 0xD8 0xC1 CALLDATASIZE ORIGIN 0xC6 XOR SLOAD 0xBA 0xAA PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ","sourceMap":"1632:11861:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2516:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4802:197;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3613:106::-;3700:12;;3613:106;;;;;;;:::i;5561:256::-;;;;;;:::i;:::-;;:::i;3462:91::-;3544:2;3462:91;;;;;;:::i;6212:234::-;;;;;;:::i;:::-;;:::i;3777:125::-;;;;;;:::i;:::-;-1:-1:-1;;;;;3877:18:5;3851:7;3877:18;;;:9;:18;;;;;;;3777:125;2727:102;;;:::i;6933:427::-;;;;;;:::i;:::-;;:::i;4098:189::-;;;;;;:::i;:::-;;:::i;4345:149::-;;;;;;:::i;:::-;;:::i;2516:98::-;2570:13;2602:5;2595:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2516:98;:::o;4802:197::-;4885:4;965:10:12;4939:32:5;965:10:12;4955:7:5;4964:6;4939:8;:32::i;:::-;4988:4;4981:11;;;4802:197;;;;;:::o;5561:256::-;5658:4;965:10:12;5714:38:5;5730:4;965:10:12;5745:6:5;5714:15;:38::i;:::-;5762:27;5772:4;5778:2;5782:6;5762:9;:27::i;:::-;-1:-1:-1;5806:4:5;;5561:256;-1:-1:-1;;;;5561:256:5:o;6212:234::-;6300:4;965:10:12;6354:64:5;965:10:12;6370:7:5;6407:10;6379:25;965:10:12;6370:7:5;6379:9;:25::i;:::-;:38;;;;:::i;:::-;6354:8;:64::i;2727:102::-;2783:13;2815:7;2808:14;;;;;:::i;6933:427::-;7026:4;965:10:12;7026:4:5;7107:25;965:10:12;7124:7:5;7107:9;:25::i;:::-;7080:52;;7170:15;7150:16;:35;;7142:85;;;;-1:-1:-1;;;7142:85:5;;;;;;;:::i;:::-;;;;;;;;;7261:60;7270:5;7277:7;7305:15;7286:16;:34;7261:8;:60::i;4098:189::-;4177:4;965:10:12;4231:28:5;965:10:12;4248:2:5;4252:6;4231:9;:28::i;4345:149::-;-1:-1:-1;;;;;4460:18:5;;;4434:7;4460:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4345:149::o;10815:340::-;-1:-1:-1;;;;;10916:19:5;;10908:68;;;;-1:-1:-1;;;10908:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;10994:21:5;;10986:68;;;;-1:-1:-1;;;10986:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;11065:18:5;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;11116:32;;;;;11095:6;;11116:32;:::i;:::-;;;;;;;;10815:340;;;:::o;11436:411::-;11536:24;11563:25;11573:5;11580:7;11563:9;:25::i;:::-;11536:52;;-1:-1:-1;;11602:16:5;:37;11598:243;;11683:6;11663:16;:26;;11655:68;;;;-1:-1:-1;;;11655:68:5;;;;;;;:::i;:::-;11765:51;11774:5;11781:7;11809:6;11790:16;:25;11765:8;:51::i;:::-;11526:321;11436:411;;;:::o;7814:788::-;-1:-1:-1;;;;;7910:18:5;;7902:68;;;;-1:-1:-1;;;7902:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;7988:16:5;;7980:64;;;;-1:-1:-1;;;7980:64:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;8126:15:5;;8104:19;8126:15;;;:9;:15;;;;;;8159:21;;;;8151:72;;;;-1:-1:-1;;;8151:72:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;8257:15:5;;;;;;;:9;:15;;;;;;8275:20;;;8257:38;;8472:13;;;;;;;;;;:23;;;;;;8521:26;;;;;;8289:6;;8521:26;:::i;:::-;;;;;;;;8558:37;12431:91;287:248:69;369:1;379:113;393:6;390:1;387:13;379:113;;;469:11;;;463:18;450:11;;;443:39;415:2;408:10;379:113;;;-1:-1:-1;;526:1:69;508:16;;501:27;287:248::o;649:377::-;737:3;765:39;798:5;87:12;;7:99;765:39;218:19;;;270:4;261:14;;813:78;;900:65;958:6;953:3;946:4;939:5;935:16;900:65;:::i;:::-;633:2;613:14;-1:-1:-1;;609:28:69;981:39;;;;;;-1:-1:-1;;649:377:69:o;1032:313::-;1183:2;1196:47;;;1168:18;;1260:78;1168:18;1324:6;1260:78;:::i;:::-;1252:86;1032:313;-1:-1:-1;;;1032:313:69:o;1810:96::-;1847:7;-1:-1:-1;;;;;1744:54:69;;1876:24;1678:126;1912:122;1985:24;2003:5;1985:24;:::i;:::-;1978:5;1975:35;1965:63;;2024:1;2021;2014:12;1965:63;1912:122;:::o;2040:139::-;2111:20;;2140:33;2111:20;2140:33;:::i;2268:122::-;2359:5;2341:24;2185:77;2396:139;2467:20;;2496:33;2467:20;2496:33;:::i;2541:474::-;2609:6;2617;2666:2;2654:9;2645:7;2641:23;2637:32;2634:119;;;2672:79;1632:11861:5;;;2672:79:69;2792:1;2817:53;2862:7;2842:9;2817:53;:::i;:::-;2807:63;;2763:117;2919:2;2945:53;2990:7;2981:6;2970:9;2966:22;2945:53;:::i;:::-;2935:63;;2890:118;2541:474;;;;;:::o;3117:109::-;3091:13;;3084:21;3198;3193:3;3186:34;3117:109;;:::o;3232:210::-;3357:2;3342:18;;3370:65;3346:9;3408:6;3370:65;:::i;3448:118::-;3553:5;3535:24;2185:77;3572:222;3703:2;3688:18;;3716:71;3692:9;3760:6;3716:71;:::i;3800:619::-;3877:6;3885;3893;3942:2;3930:9;3921:7;3917:23;3913:32;3910:119;;;3948:79;1632:11861:5;;;3948:79:69;4068:1;4093:53;4138:7;4118:9;4093:53;:::i;:::-;4083:63;;4039:117;4195:2;4221:53;4266:7;4257:6;4246:9;4242:22;4221:53;:::i;:::-;4211:63;;4166:118;4323:2;4349:53;4394:7;4385:6;4374:9;4370:22;4349:53;:::i;:::-;4339:63;;4294:118;3800:619;;;;;:::o;4517:112::-;4500:4;4489:16;;4600:22;4425:86;4635:214;4762:2;4747:18;;4775:67;4751:9;4815:6;4775:67;:::i;4855:329::-;4914:6;4963:2;4951:9;4942:7;4938:23;4934:32;4931:119;;;4969:79;1632:11861:5;;;4969:79:69;5089:1;5114:53;5159:7;5139:9;5114:53;:::i;:::-;5104:63;4855:329;-1:-1:-1;;;;4855:329:69:o;5190:474::-;5258:6;5266;5315:2;5303:9;5294:7;5290:23;5286:32;5283:119;;;5321:79;1632:11861:5;;;5321:79:69;5441:1;5466:53;5511:7;5491:9;5466:53;:::i;:::-;5456:63;;5412:117;5568:2;5594:53;5639:7;5630:6;5619:9;5615:22;5594:53;:::i;5670:180::-;-1:-1:-1;;;5715:1:69;5708:88;5815:4;5812:1;5805:15;5839:4;5836:1;5829:15;5856:320;5937:1;5927:12;;5984:1;5974:12;;;5995:81;;6061:4;6053:6;6049:17;6039:27;;5995:81;6123:2;6115:6;6112:14;6092:18;6089:38;6086:84;;6142:18;;:::i;:::-;5907:269;5856:320;;;:::o;6182:180::-;-1:-1:-1;;;6227:1:69;6220:88;6327:4;6324:1;6317:15;6351:4;6348:1;6341:15;6368:191;6497:9;;;6519:10;;;6516:36;;;6532:18;;:::i;6795:366::-;7022:2;218:19;;6937:3;270:4;261:14;;6705:34;6682:58;;-1:-1:-1;;;6769:2:69;6757:15;;6750:32;6951:74;-1:-1:-1;7034:93:69;-1:-1:-1;7152:2:69;7143:12;;6795:366::o;7167:419::-;7371:2;7384:47;;;7356:18;;7448:131;7356:18;7448:131;:::i;7821:366::-;8048:2;218:19;;7963:3;270:4;261:14;;7732:34;7709:58;;-1:-1:-1;;;7796:2:69;7784:15;;7777:31;7977:74;-1:-1:-1;8060:93:69;7592:223;8193:419;8397:2;8410:47;;;8382:18;;8474:131;8382:18;8474:131;:::i;8845:366::-;9072:2;218:19;;8987:3;270:4;261:14;;8758:34;8735:58;;-1:-1:-1;;;8822:2:69;8810:15;;8803:29;9001:74;-1:-1:-1;9084:93:69;8618:221;9217:419;9421:2;9434:47;;;9406:18;;9498:131;9406:18;9498:131;:::i;10199:419::-;10403:2;10416:47;;;10388:18;;10480:131;10388:18;10054:2;218:19;;9782:31;270:4;261:14;;9759:55;10175:12;;;9827:366;10854;11081:2;218:19;;10996:3;270:4;261:14;;10764:34;10741:58;;-1:-1:-1;;;10828:2:69;10816:15;;10809:32;11010:74;-1:-1:-1;11093:93:69;10624:224;11226:419;11430:2;11443:47;;;11415:18;;11507:131;11415:18;11507:131;:::i;11879:366::-;12106:2;218:19;;12021:3;270:4;261:14;;11791:34;11768:58;;-1:-1:-1;;;11855:2:69;11843:15;;11836:30;12035:74;-1:-1:-1;12118:93:69;11651:222;12251:419;12455:2;12468:47;;;12440:18;;12532:131;12440:18;12532:131;:::i;12907:366::-;13134:2;218:19;;13049:3;270:4;261:14;;12816:34;12793:58;;-1:-1:-1;;;12880:2:69;12868:15;;12861:33;13063:74;-1:-1:-1;13146:93:69;12676:225;13279:419;13483:2;13496:47;;;13468:18;;13560:131;13468:18;13560:131;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"495600","executionCost":"530","totalCost":"496130"},"external":{"allowance(address,address)":"infinite","approve(address,uint256)":"infinite","balanceOf(address)":"infinite","decimals()":"352","decreaseAllowance(address,uint256)":"infinite","increaseAllowance(address,uint256)":"infinite","name()":"infinite","symbol()":"infinite","totalSupply()":"2403","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"},"internal":{"__ERC20_init(string memory,string memory)":"infinite","__ERC20_init_unchained(string memory,string memory)":"infinite","_afterTokenTransfer(address,address,uint256)":"infinite","_approve(address,address,uint256)":"infinite","_beforeTokenTransfer(address,address,uint256)":"infinite","_burn(address,uint256)":"infinite","_mint(address,uint256)":"infinite","_spendAllowance(address,address,uint256)":"infinite","_transfer(address,address,uint256)":"infinite"}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","increaseAllowance(address,uint256)":"39509351","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detailed writeup see our guide https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. The default value of {decimals} is 18. To change this, you should override this function so it returns a different value. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"}},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":\"ERC20Upgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xa9311aeb22f459e57d4dac77ee76cf43fb28ad3215278456211b5852b0e9e970\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":414,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":417,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":2820,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":681,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable","label":"_balances","offset":0,"slot":"51","type":"t_mapping(t_address,t_uint256)"},{"astId":687,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable","label":"_allowances","offset":0,"slot":"52","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":689,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable","label":"_totalSupply","offset":0,"slot":"53","type":"t_uint256"},{"astId":691,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable","label":"_name","offset":0,"slot":"54","type":"t_string_storage"},{"astId":693,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable","label":"_symbol","offset":0,"slot":"55","type":"t_string_storage"},{"astId":1273,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable","label":"__gap","offset":0,"slot":"56","type":"t_array(t_uint256)45_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)45_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[45]","numberOfBytes":"1440"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol":{"IERC20Upgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Interface of the ERC20 standard as defined in the EIP.","events":{"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"kind":"dev","methods":{"allowance(address,address)":{"details":"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."},"approve(address,uint256)":{"details":"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event."},"balanceOf(address)":{"details":"Returns the amount of tokens owned by `account`."},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":\"IERC20Upgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol":{"ERC4626Upgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Implementation of the ERC4626 \"Tokenized Vault Standard\" as defined in https://eips.ethereum.org/EIPS/eip-4626[EIP-4626]. This extension allows the minting and burning of \"shares\" (represented using the ERC20 inheritance) in exchange for underlying \"assets\" through standardized {deposit}, {mint}, {redeem} and {burn} workflows. This contract extends the ERC20 standard. Any additional extensions included along it would affect the \"shares\" token represented by this contract and not the \"assets\" token which is an independent contract. [CAUTION] ==== In empty (or nearly empty) ERC-4626 vaults, deposits are at high risk of being stolen through frontrunning with a \"donation\" to the vault that inflates the price of a share. This is variously known as a donation or inflation attack and is essentially a problem of slippage. Vault deployers can protect against this attack by making an initial deposit of a non-trivial amount of the asset, such that price manipulation becomes infeasible. Withdrawals may similarly be affected by slippage. Users can protect against this attack as well as unexpected slippage in general by verifying the amount received is as expected, using a wrapper that performs these checks such as https://github.com/fei-protocol/ERC4626#erc4626router-and-base[ERC4626Router]. Since v4.9, this implementation uses virtual assets and shares to mitigate that risk. The `_decimalsOffset()` corresponds to an offset in the decimal representation between the underlying asset's decimals and the vault decimals. This offset also determines the rate of virtual shares to virtual assets in the vault, which itself determines the initial exchange rate. While not fully preventing the attack, analysis shows that the default offset (0) makes it non-profitable, as a result of the value being captured by the virtual shares (out of the attacker's donation) matching the attacker's expected gains. With a larger offset, the attack becomes orders of magnitude more expensive than it is profitable. More details about the underlying math can be found xref:erc4626.adoc#inflation-attack[here]. The drawback of this approach is that the virtual shares do capture (a very small) part of the value being accrued to the vault. Also, if the vault experiences losses, the users try to exit the vault, the virtual shares and assets will cause the first user to exit to experience reduced losses in detriment to the last users that will experience bigger losses. Developers willing to revert back to the pre-v4.9 behavior just need to override the `_convertToShares` and `_convertToAssets` functions. To learn more, check out our xref:ROOT:erc4626.adoc[ERC-4626 guide]. ==== _Available since v4.7._","events":{"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"Initialized(uint8)":{"details":"Triggered when the contract has been initialized or reinitialized."},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"kind":"dev","methods":{"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"asset()":{"details":"See {IERC4626-asset}. "},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"convertToAssets(uint256)":{"details":"See {IERC4626-convertToAssets}. "},"convertToShares(uint256)":{"details":"See {IERC4626-convertToShares}. "},"decimals()":{"details":"Decimals are computed by adding the decimal offset on top of the underlying asset's decimals. This \"original\" value is cached during construction of the vault contract. If this read operation fails (e.g., the asset has not been created yet), a default of 18 is used to represent the underlying asset's decimals. See {IERC20Metadata-decimals}."},"decreaseAllowance(address,uint256)":{"details":"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."},"deposit(uint256,address)":{"details":"See {IERC4626-deposit}. "},"increaseAllowance(address,uint256)":{"details":"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."},"maxDeposit(address)":{"details":"See {IERC4626-maxDeposit}. "},"maxMint(address)":{"details":"See {IERC4626-maxMint}. "},"maxRedeem(address)":{"details":"See {IERC4626-maxRedeem}. "},"maxWithdraw(address)":{"details":"See {IERC4626-maxWithdraw}. "},"mint(uint256,address)":{"details":"See {IERC4626-mint}. As opposed to {deposit}, minting is allowed even if the vault is in a state where the price of a share is zero. In this case, the shares will be minted without requiring any assets to be deposited."},"name()":{"details":"Returns the name of the token."},"previewDeposit(uint256)":{"details":"See {IERC4626-previewDeposit}. "},"previewMint(uint256)":{"details":"See {IERC4626-previewMint}. "},"previewRedeem(uint256)":{"details":"See {IERC4626-previewRedeem}. "},"previewWithdraw(uint256)":{"details":"See {IERC4626-previewWithdraw}. "},"redeem(uint256,address,address)":{"details":"See {IERC4626-redeem}. "},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalAssets()":{"details":"See {IERC4626-totalAssets}. "},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`."},"withdraw(uint256,address,address)":{"details":"See {IERC4626-withdraw}. "}},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","asset()":"38d52e0f","balanceOf(address)":"70a08231","convertToAssets(uint256)":"07a2d13a","convertToShares(uint256)":"c6e6f592","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","deposit(uint256,address)":"6e553f65","increaseAllowance(address,uint256)":"39509351","maxDeposit(address)":"402d267d","maxMint(address)":"c63d75b6","maxRedeem(address)":"d905777e","maxWithdraw(address)":"ce96cb77","mint(uint256,address)":"94bf804d","name()":"06fdde03","previewDeposit(uint256)":"ef8b30f7","previewMint(uint256)":"b3d7f6b9","previewRedeem(uint256)":"4cdad506","previewWithdraw(uint256)":"0a28a477","redeem(uint256,address,address)":"ba087652","symbol()":"95d89b41","totalAssets()":"01e1d114","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256,address,address)":"b460af94"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"convertToAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"convertToShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"maxMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the ERC4626 \\\"Tokenized Vault Standard\\\" as defined in https://eips.ethereum.org/EIPS/eip-4626[EIP-4626]. This extension allows the minting and burning of \\\"shares\\\" (represented using the ERC20 inheritance) in exchange for underlying \\\"assets\\\" through standardized {deposit}, {mint}, {redeem} and {burn} workflows. This contract extends the ERC20 standard. Any additional extensions included along it would affect the \\\"shares\\\" token represented by this contract and not the \\\"assets\\\" token which is an independent contract. [CAUTION] ==== In empty (or nearly empty) ERC-4626 vaults, deposits are at high risk of being stolen through frontrunning with a \\\"donation\\\" to the vault that inflates the price of a share. This is variously known as a donation or inflation attack and is essentially a problem of slippage. Vault deployers can protect against this attack by making an initial deposit of a non-trivial amount of the asset, such that price manipulation becomes infeasible. Withdrawals may similarly be affected by slippage. Users can protect against this attack as well as unexpected slippage in general by verifying the amount received is as expected, using a wrapper that performs these checks such as https://github.com/fei-protocol/ERC4626#erc4626router-and-base[ERC4626Router]. Since v4.9, this implementation uses virtual assets and shares to mitigate that risk. The `_decimalsOffset()` corresponds to an offset in the decimal representation between the underlying asset's decimals and the vault decimals. This offset also determines the rate of virtual shares to virtual assets in the vault, which itself determines the initial exchange rate. While not fully preventing the attack, analysis shows that the default offset (0) makes it non-profitable, as a result of the value being captured by the virtual shares (out of the attacker's donation) matching the attacker's expected gains. With a larger offset, the attack becomes orders of magnitude more expensive than it is profitable. More details about the underlying math can be found xref:erc4626.adoc#inflation-attack[here]. The drawback of this approach is that the virtual shares do capture (a very small) part of the value being accrued to the vault. Also, if the vault experiences losses, the users try to exit the vault, the virtual shares and assets will cause the first user to exit to experience reduced losses in detriment to the last users that will experience bigger losses. Developers willing to revert back to the pre-v4.9 behavior just need to override the `_convertToShares` and `_convertToAssets` functions. To learn more, check out our xref:ROOT:erc4626.adoc[ERC-4626 guide]. ==== _Available since v4.7._\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"asset()\":{\"details\":\"See {IERC4626-asset}. \"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"convertToAssets(uint256)\":{\"details\":\"See {IERC4626-convertToAssets}. \"},\"convertToShares(uint256)\":{\"details\":\"See {IERC4626-convertToShares}. \"},\"decimals()\":{\"details\":\"Decimals are computed by adding the decimal offset on top of the underlying asset's decimals. This \\\"original\\\" value is cached during construction of the vault contract. If this read operation fails (e.g., the asset has not been created yet), a default of 18 is used to represent the underlying asset's decimals. See {IERC20Metadata-decimals}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"deposit(uint256,address)\":{\"details\":\"See {IERC4626-deposit}. \"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"maxDeposit(address)\":{\"details\":\"See {IERC4626-maxDeposit}. \"},\"maxMint(address)\":{\"details\":\"See {IERC4626-maxMint}. \"},\"maxRedeem(address)\":{\"details\":\"See {IERC4626-maxRedeem}. \"},\"maxWithdraw(address)\":{\"details\":\"See {IERC4626-maxWithdraw}. \"},\"mint(uint256,address)\":{\"details\":\"See {IERC4626-mint}. As opposed to {deposit}, minting is allowed even if the vault is in a state where the price of a share is zero. In this case, the shares will be minted without requiring any assets to be deposited.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"previewDeposit(uint256)\":{\"details\":\"See {IERC4626-previewDeposit}. \"},\"previewMint(uint256)\":{\"details\":\"See {IERC4626-previewMint}. \"},\"previewRedeem(uint256)\":{\"details\":\"See {IERC4626-previewRedeem}. \"},\"previewWithdraw(uint256)\":{\"details\":\"See {IERC4626-previewWithdraw}. \"},\"redeem(uint256,address,address)\":{\"details\":\"See {IERC4626-redeem}. \"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalAssets()\":{\"details\":\"See {IERC4626-totalAssets}. \"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"},\"withdraw(uint256,address,address)\":{\"details\":\"See {IERC4626-withdraw}. \"}},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol\":\"ERC4626Upgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/interfaces/IERC4626Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC4626.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../token/ERC20/IERC20Upgradeable.sol\\\";\\nimport \\\"../token/ERC20/extensions/IERC20MetadataUpgradeable.sol\\\";\\n\\n/**\\n * @dev Interface of the ERC4626 \\\"Tokenized Vault Standard\\\", as defined in\\n * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\\n *\\n * _Available since v4.7._\\n */\\ninterface IERC4626Upgradeable is IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);\\n\\n    event Withdraw(\\n        address indexed sender,\\n        address indexed receiver,\\n        address indexed owner,\\n        uint256 assets,\\n        uint256 shares\\n    );\\n\\n    /**\\n     * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\\n     *\\n     * - MUST be an ERC-20 token contract.\\n     * - MUST NOT revert.\\n     */\\n    function asset() external view returns (address assetTokenAddress);\\n\\n    /**\\n     * @dev Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault.\\n     *\\n     * - SHOULD include any compounding that occurs from yield.\\n     * - MUST be inclusive of any fees that are charged against assets in the Vault.\\n     * - MUST NOT revert.\\n     */\\n    function totalAssets() external view returns (uint256 totalManagedAssets);\\n\\n    /**\\n     * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\\n     * scenario where all the conditions are met.\\n     *\\n     * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\\n     * - MUST NOT show any variations depending on the caller.\\n     * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the\\n     * \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and\\n     * from.\\n     */\\n    function convertToShares(uint256 assets) external view returns (uint256 shares);\\n\\n    /**\\n     * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\\n     * scenario where all the conditions are met.\\n     *\\n     * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\\n     * - MUST NOT show any variations depending on the caller.\\n     * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the\\n     * \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and\\n     * from.\\n     */\\n    function convertToAssets(uint256 shares) external view returns (uint256 assets);\\n\\n    /**\\n     * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\\n     * through a deposit call.\\n     *\\n     * - MUST return a limited value if receiver is subject to some deposit limit.\\n     * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\\n     * - MUST NOT revert.\\n     */\\n    function maxDeposit(address receiver) external view returns (uint256 maxAssets);\\n\\n    /**\\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\\n     * current on-chain conditions.\\n     *\\n     * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\\n     *   call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\\n     *   in the same transaction.\\n     * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\\n     *   deposit would be accepted, regardless if the user has enough tokens approved, etc.\\n     * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\\n     * share price or some other type of condition, meaning the depositor will lose assets by depositing.\\n     */\\n    function previewDeposit(uint256 assets) external view returns (uint256 shares);\\n\\n    /**\\n     * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\\n     *\\n     * - MUST emit the Deposit event.\\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\\n     *   deposit execution, and are accounted for during deposit.\\n     * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\\n     *   approving enough underlying tokens to the Vault contract, etc).\\n     *\\n     * NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\\n     */\\n    function deposit(uint256 assets, address receiver) external returns (uint256 shares);\\n\\n    /**\\n     * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\\n     * - MUST return a limited value if receiver is subject to some mint limit.\\n     * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\\n     * - MUST NOT revert.\\n     */\\n    function maxMint(address receiver) external view returns (uint256 maxShares);\\n\\n    /**\\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\\n     * current on-chain conditions.\\n     *\\n     * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\\n     *   in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\\n     *   same transaction.\\n     * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\\n     *   would be accepted, regardless if the user has enough tokens approved, etc.\\n     * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\\n     * share price or some other type of condition, meaning the depositor will lose assets by minting.\\n     */\\n    function previewMint(uint256 shares) external view returns (uint256 assets);\\n\\n    /**\\n     * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\\n     *\\n     * - MUST emit the Deposit event.\\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\\n     *   execution, and are accounted for during mint.\\n     * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\\n     *   approving enough underlying tokens to the Vault contract, etc).\\n     *\\n     * NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\\n     */\\n    function mint(uint256 shares, address receiver) external returns (uint256 assets);\\n\\n    /**\\n     * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\\n     * Vault, through a withdraw call.\\n     *\\n     * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\\n     * - MUST NOT revert.\\n     */\\n    function maxWithdraw(address owner) external view returns (uint256 maxAssets);\\n\\n    /**\\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\\n     * given current on-chain conditions.\\n     *\\n     * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\\n     *   call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\\n     *   called\\n     *   in the same transaction.\\n     * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\\n     *   the withdrawal would be accepted, regardless if the user has enough shares, etc.\\n     * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\\n     * share price or some other type of condition, meaning the depositor will lose assets by depositing.\\n     */\\n    function previewWithdraw(uint256 assets) external view returns (uint256 shares);\\n\\n    /**\\n     * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\\n     *\\n     * - MUST emit the Withdraw event.\\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\\n     *   withdraw execution, and are accounted for during withdraw.\\n     * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\\n     *   not having enough shares, etc).\\n     *\\n     * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\\n     * Those methods should be performed separately.\\n     */\\n    function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);\\n\\n    /**\\n     * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\\n     * through a redeem call.\\n     *\\n     * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\\n     * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\\n     * - MUST NOT revert.\\n     */\\n    function maxRedeem(address owner) external view returns (uint256 maxShares);\\n\\n    /**\\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\\n     * given current on-chain conditions.\\n     *\\n     * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\\n     *   in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\\n     *   same transaction.\\n     * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\\n     *   redemption would be accepted, regardless if the user has enough shares, etc.\\n     * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\\n     * share price or some other type of condition, meaning the depositor will lose assets by redeeming.\\n     */\\n    function previewRedeem(uint256 shares) external view returns (uint256 assets);\\n\\n    /**\\n     * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\\n     *\\n     * - MUST emit the Withdraw event.\\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\\n     *   redeem execution, and are accounted for during redeem.\\n     * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\\n     *   not having enough shares, etc).\\n     *\\n     * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\\n     * Those methods should be performed separately.\\n     */\\n    function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);\\n}\\n\",\"keccak256\":\"0xf867351fb48f5c0e3b45f085ce60f374b785417f84370cb2ffb57f421931e7eb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xa9311aeb22f459e57d4dac77ee76cf43fb28ad3215278456211b5852b0e9e970\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/ERC4626.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../utils/SafeERC20Upgradeable.sol\\\";\\nimport \\\"../../../interfaces/IERC4626Upgradeable.sol\\\";\\nimport \\\"../../../utils/math/MathUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the ERC4626 \\\"Tokenized Vault Standard\\\" as defined in\\n * https://eips.ethereum.org/EIPS/eip-4626[EIP-4626].\\n *\\n * This extension allows the minting and burning of \\\"shares\\\" (represented using the ERC20 inheritance) in exchange for\\n * underlying \\\"assets\\\" through standardized {deposit}, {mint}, {redeem} and {burn} workflows. This contract extends\\n * the ERC20 standard. Any additional extensions included along it would affect the \\\"shares\\\" token represented by this\\n * contract and not the \\\"assets\\\" token which is an independent contract.\\n *\\n * [CAUTION]\\n * ====\\n * In empty (or nearly empty) ERC-4626 vaults, deposits are at high risk of being stolen through frontrunning\\n * with a \\\"donation\\\" to the vault that inflates the price of a share. This is variously known as a donation or inflation\\n * attack and is essentially a problem of slippage. Vault deployers can protect against this attack by making an initial\\n * deposit of a non-trivial amount of the asset, such that price manipulation becomes infeasible. Withdrawals may\\n * similarly be affected by slippage. Users can protect against this attack as well as unexpected slippage in general by\\n * verifying the amount received is as expected, using a wrapper that performs these checks such as\\n * https://github.com/fei-protocol/ERC4626#erc4626router-and-base[ERC4626Router].\\n *\\n * Since v4.9, this implementation uses virtual assets and shares to mitigate that risk. The `_decimalsOffset()`\\n * corresponds to an offset in the decimal representation between the underlying asset's decimals and the vault\\n * decimals. This offset also determines the rate of virtual shares to virtual assets in the vault, which itself\\n * determines the initial exchange rate. While not fully preventing the attack, analysis shows that the default offset\\n * (0) makes it non-profitable, as a result of the value being captured by the virtual shares (out of the attacker's\\n * donation) matching the attacker's expected gains. With a larger offset, the attack becomes orders of magnitude more\\n * expensive than it is profitable. More details about the underlying math can be found\\n * xref:erc4626.adoc#inflation-attack[here].\\n *\\n * The drawback of this approach is that the virtual shares do capture (a very small) part of the value being accrued\\n * to the vault. Also, if the vault experiences losses, the users try to exit the vault, the virtual shares and assets\\n * will cause the first user to exit to experience reduced losses in detriment to the last users that will experience\\n * bigger losses. Developers willing to revert back to the pre-v4.9 behavior just need to override the\\n * `_convertToShares` and `_convertToAssets` functions.\\n *\\n * To learn more, check out our xref:ROOT:erc4626.adoc[ERC-4626 guide].\\n * ====\\n *\\n * _Available since v4.7._\\n */\\nabstract contract ERC4626Upgradeable is Initializable, ERC20Upgradeable, IERC4626Upgradeable {\\n    using MathUpgradeable for uint256;\\n\\n    IERC20Upgradeable private _asset;\\n    uint8 private _underlyingDecimals;\\n\\n    /**\\n     * @dev Set the underlying asset contract. This must be an ERC20-compatible contract (ERC20 or ERC777).\\n     */\\n    function __ERC4626_init(IERC20Upgradeable asset_) internal onlyInitializing {\\n        __ERC4626_init_unchained(asset_);\\n    }\\n\\n    function __ERC4626_init_unchained(IERC20Upgradeable asset_) internal onlyInitializing {\\n        (bool success, uint8 assetDecimals) = _tryGetAssetDecimals(asset_);\\n        _underlyingDecimals = success ? assetDecimals : 18;\\n        _asset = asset_;\\n    }\\n\\n    /**\\n     * @dev Attempts to fetch the asset decimals. A return value of false indicates that the attempt failed in some way.\\n     */\\n    function _tryGetAssetDecimals(IERC20Upgradeable asset_) private view returns (bool, uint8) {\\n        (bool success, bytes memory encodedDecimals) = address(asset_).staticcall(\\n            abi.encodeWithSelector(IERC20MetadataUpgradeable.decimals.selector)\\n        );\\n        if (success && encodedDecimals.length >= 32) {\\n            uint256 returnedDecimals = abi.decode(encodedDecimals, (uint256));\\n            if (returnedDecimals <= type(uint8).max) {\\n                return (true, uint8(returnedDecimals));\\n            }\\n        }\\n        return (false, 0);\\n    }\\n\\n    /**\\n     * @dev Decimals are computed by adding the decimal offset on top of the underlying asset's decimals. This\\n     * \\\"original\\\" value is cached during construction of the vault contract. If this read operation fails (e.g., the\\n     * asset has not been created yet), a default of 18 is used to represent the underlying asset's decimals.\\n     *\\n     * See {IERC20Metadata-decimals}.\\n     */\\n    function decimals() public view virtual override(IERC20MetadataUpgradeable, ERC20Upgradeable) returns (uint8) {\\n        return _underlyingDecimals + _decimalsOffset();\\n    }\\n\\n    /** @dev See {IERC4626-asset}. */\\n    function asset() public view virtual override returns (address) {\\n        return address(_asset);\\n    }\\n\\n    /** @dev See {IERC4626-totalAssets}. */\\n    function totalAssets() public view virtual override returns (uint256) {\\n        return _asset.balanceOf(address(this));\\n    }\\n\\n    /** @dev See {IERC4626-convertToShares}. */\\n    function convertToShares(uint256 assets) public view virtual override returns (uint256) {\\n        return _convertToShares(assets, MathUpgradeable.Rounding.Down);\\n    }\\n\\n    /** @dev See {IERC4626-convertToAssets}. */\\n    function convertToAssets(uint256 shares) public view virtual override returns (uint256) {\\n        return _convertToAssets(shares, MathUpgradeable.Rounding.Down);\\n    }\\n\\n    /** @dev See {IERC4626-maxDeposit}. */\\n    function maxDeposit(address) public view virtual override returns (uint256) {\\n        return type(uint256).max;\\n    }\\n\\n    /** @dev See {IERC4626-maxMint}. */\\n    function maxMint(address) public view virtual override returns (uint256) {\\n        return type(uint256).max;\\n    }\\n\\n    /** @dev See {IERC4626-maxWithdraw}. */\\n    function maxWithdraw(address owner) public view virtual override returns (uint256) {\\n        return _convertToAssets(balanceOf(owner), MathUpgradeable.Rounding.Down);\\n    }\\n\\n    /** @dev See {IERC4626-maxRedeem}. */\\n    function maxRedeem(address owner) public view virtual override returns (uint256) {\\n        return balanceOf(owner);\\n    }\\n\\n    /** @dev See {IERC4626-previewDeposit}. */\\n    function previewDeposit(uint256 assets) public view virtual override returns (uint256) {\\n        return _convertToShares(assets, MathUpgradeable.Rounding.Down);\\n    }\\n\\n    /** @dev See {IERC4626-previewMint}. */\\n    function previewMint(uint256 shares) public view virtual override returns (uint256) {\\n        return _convertToAssets(shares, MathUpgradeable.Rounding.Up);\\n    }\\n\\n    /** @dev See {IERC4626-previewWithdraw}. */\\n    function previewWithdraw(uint256 assets) public view virtual override returns (uint256) {\\n        return _convertToShares(assets, MathUpgradeable.Rounding.Up);\\n    }\\n\\n    /** @dev See {IERC4626-previewRedeem}. */\\n    function previewRedeem(uint256 shares) public view virtual override returns (uint256) {\\n        return _convertToAssets(shares, MathUpgradeable.Rounding.Down);\\n    }\\n\\n    /** @dev See {IERC4626-deposit}. */\\n    function deposit(uint256 assets, address receiver) public virtual override returns (uint256) {\\n        require(assets <= maxDeposit(receiver), \\\"ERC4626: deposit more than max\\\");\\n\\n        uint256 shares = previewDeposit(assets);\\n        _deposit(_msgSender(), receiver, assets, shares);\\n\\n        return shares;\\n    }\\n\\n    /** @dev See {IERC4626-mint}.\\n     *\\n     * As opposed to {deposit}, minting is allowed even if the vault is in a state where the price of a share is zero.\\n     * In this case, the shares will be minted without requiring any assets to be deposited.\\n     */\\n    function mint(uint256 shares, address receiver) public virtual override returns (uint256) {\\n        require(shares <= maxMint(receiver), \\\"ERC4626: mint more than max\\\");\\n\\n        uint256 assets = previewMint(shares);\\n        _deposit(_msgSender(), receiver, assets, shares);\\n\\n        return assets;\\n    }\\n\\n    /** @dev See {IERC4626-withdraw}. */\\n    function withdraw(uint256 assets, address receiver, address owner) public virtual override returns (uint256) {\\n        require(assets <= maxWithdraw(owner), \\\"ERC4626: withdraw more than max\\\");\\n\\n        uint256 shares = previewWithdraw(assets);\\n        _withdraw(_msgSender(), receiver, owner, assets, shares);\\n\\n        return shares;\\n    }\\n\\n    /** @dev See {IERC4626-redeem}. */\\n    function redeem(uint256 shares, address receiver, address owner) public virtual override returns (uint256) {\\n        require(shares <= maxRedeem(owner), \\\"ERC4626: redeem more than max\\\");\\n\\n        uint256 assets = previewRedeem(shares);\\n        _withdraw(_msgSender(), receiver, owner, assets, shares);\\n\\n        return assets;\\n    }\\n\\n    /**\\n     * @dev Internal conversion function (from assets to shares) with support for rounding direction.\\n     */\\n    function _convertToShares(uint256 assets, MathUpgradeable.Rounding rounding) internal view virtual returns (uint256) {\\n        return assets.mulDiv(totalSupply() + 10 ** _decimalsOffset(), totalAssets() + 1, rounding);\\n    }\\n\\n    /**\\n     * @dev Internal conversion function (from shares to assets) with support for rounding direction.\\n     */\\n    function _convertToAssets(uint256 shares, MathUpgradeable.Rounding rounding) internal view virtual returns (uint256) {\\n        return shares.mulDiv(totalAssets() + 1, totalSupply() + 10 ** _decimalsOffset(), rounding);\\n    }\\n\\n    /**\\n     * @dev Deposit/mint common workflow.\\n     */\\n    function _deposit(address caller, address receiver, uint256 assets, uint256 shares) internal virtual {\\n        // If _asset is ERC777, `transferFrom` can trigger a reentrancy BEFORE the transfer happens through the\\n        // `tokensToSend` hook. On the other hand, the `tokenReceived` hook, that is triggered after the transfer,\\n        // calls the vault, which is assumed not malicious.\\n        //\\n        // Conclusion: we need to do the transfer before we mint so that any reentrancy would happen before the\\n        // assets are transferred and before the shares are minted, which is a valid state.\\n        // slither-disable-next-line reentrancy-no-eth\\n        SafeERC20Upgradeable.safeTransferFrom(_asset, caller, address(this), assets);\\n        _mint(receiver, shares);\\n\\n        emit Deposit(caller, receiver, assets, shares);\\n    }\\n\\n    /**\\n     * @dev Withdraw/redeem common workflow.\\n     */\\n    function _withdraw(\\n        address caller,\\n        address receiver,\\n        address owner,\\n        uint256 assets,\\n        uint256 shares\\n    ) internal virtual {\\n        if (caller != owner) {\\n            _spendAllowance(owner, caller, shares);\\n        }\\n\\n        // If _asset is ERC777, `transfer` can trigger a reentrancy AFTER the transfer happens through the\\n        // `tokensReceived` hook. On the other hand, the `tokensToSend` hook, that is triggered before the transfer,\\n        // calls the vault, which is assumed not malicious.\\n        //\\n        // Conclusion: we need to do the transfer after the burn so that any reentrancy would happen after the\\n        // shares are burned and after the assets are transferred, which is a valid state.\\n        _burn(owner, shares);\\n        SafeERC20Upgradeable.safeTransfer(_asset, receiver, assets);\\n\\n        emit Withdraw(caller, receiver, owner, assets, shares);\\n    }\\n\\n    function _decimalsOffset() internal view virtual returns (uint8) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x48a2c0285b0ce8bf768b780142e82ccf08208b343439770464f2cc46c0cef3f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * ==== Security Considerations\\n *\\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\\n * generally recommended is:\\n *\\n * ```solidity\\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\\n *     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\\n *     doThing(..., value);\\n * }\\n *\\n * function doThing(..., uint256 value) public {\\n *     token.safeTransferFrom(msg.sender, address(this), value);\\n *     ...\\n * }\\n * ```\\n *\\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\\n * {SafeERC20-safeTransferFrom}).\\n *\\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\\n * contracts should have entry points that don't rely on permit.\\n */\\ninterface IERC20PermitUpgradeable {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     *\\n     * CAUTION: See Security Considerations above.\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x07e881de3b9f6d2c07909f193f24b96c7fe4ea60013260f3f25aecd8bab3c2f8\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\nimport \\\"../extensions/IERC20PermitUpgradeable.sol\\\";\\nimport \\\"../../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20Upgradeable {\\n    using AddressUpgradeable for address;\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransfer(IERC20Upgradeable token, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    /**\\n     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeIncreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        uint256 oldAllowance = token.allowance(address(this), spender);\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));\\n    }\\n\\n    /**\\n     * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeDecreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));\\n        }\\n    }\\n\\n    /**\\n     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n     * to be set to zero before setting it to a non-zero value, such as USDT.\\n     */\\n    function forceApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);\\n\\n        if (!_callOptionalReturnBool(token, approvalCall)) {\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));\\n            _callOptionalReturn(token, approvalCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.\\n     * Revert on invalid signature.\\n     */\\n    function safePermit(\\n        IERC20PermitUpgradeable token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20Upgradeable token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        require(returndata.length == 0 || abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     *\\n     * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\\n     */\\n    function _callOptionalReturnBool(IERC20Upgradeable token, bytes memory data) private returns (bool) {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\\n        // and not revert is the subcall reverts.\\n\\n        (bool success, bytes memory returndata) = address(token).call(data);\\n        return\\n            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && AddressUpgradeable.isContract(address(token));\\n    }\\n}\\n\",\"keccak256\":\"0x23b997be73d3dd46885262704f0f8cfc7273fdadfe303d37969a9561373972b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary MathUpgradeable {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n                // The surrounding unchecked block does not change this fact.\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10 ** 64) {\\n                value /= 10 ** 64;\\n                result += 64;\\n            }\\n            if (value >= 10 ** 32) {\\n                value /= 10 ** 32;\\n                result += 32;\\n            }\\n            if (value >= 10 ** 16) {\\n                value /= 10 ** 16;\\n                result += 16;\\n            }\\n            if (value >= 10 ** 8) {\\n                value /= 10 ** 8;\\n                result += 8;\\n            }\\n            if (value >= 10 ** 4) {\\n                value /= 10 ** 4;\\n                result += 4;\\n            }\\n            if (value >= 10 ** 2) {\\n                value /= 10 ** 2;\\n                result += 2;\\n            }\\n            if (value >= 10 ** 1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2bc0007987c229ae7624eb29be6a9b84f6a6a5872f76248b15208b131ea41c4e\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":414,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol:ERC4626Upgradeable","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":417,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol:ERC4626Upgradeable","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":2820,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol:ERC4626Upgradeable","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":681,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol:ERC4626Upgradeable","label":"_balances","offset":0,"slot":"51","type":"t_mapping(t_address,t_uint256)"},{"astId":687,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol:ERC4626Upgradeable","label":"_allowances","offset":0,"slot":"52","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":689,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol:ERC4626Upgradeable","label":"_totalSupply","offset":0,"slot":"53","type":"t_uint256"},{"astId":691,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol:ERC4626Upgradeable","label":"_name","offset":0,"slot":"54","type":"t_string_storage"},{"astId":693,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol:ERC4626Upgradeable","label":"_symbol","offset":0,"slot":"55","type":"t_string_storage"},{"astId":1273,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol:ERC4626Upgradeable","label":"__gap","offset":0,"slot":"56","type":"t_array(t_uint256)45_storage"},{"astId":1373,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol:ERC4626Upgradeable","label":"_asset","offset":0,"slot":"101","type":"t_contract(IERC20Upgradeable)1352"},{"astId":1375,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol:ERC4626Upgradeable","label":"_underlyingDecimals","offset":20,"slot":"101","type":"t_uint8"},{"astId":2002,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol:ERC4626Upgradeable","label":"__gap","offset":0,"slot":"102","type":"t_array(t_uint256)49_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)45_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[45]","numberOfBytes":"1440"},"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(IERC20Upgradeable)1352":{"encoding":"inplace","label":"contract IERC20Upgradeable","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol":{"IERC20MetadataUpgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Interface for the optional metadata functions from the ERC20 standard. _Available since v4.1._","events":{"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"kind":"dev","methods":{"allowance(address,address)":{"details":"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."},"approve(address,uint256)":{"details":"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event."},"balanceOf(address)":{"details":"Returns the amount of tokens owned by `account`."},"decimals()":{"details":"Returns the decimals places of the token."},"name()":{"details":"Returns the name of the token."},"symbol()":{"details":"Returns the symbol of the token."},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC20 standard. _Available since v4.1._\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":\"IERC20MetadataUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol":{"IERC20PermitUpgradeable":{"abi":[{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all. ==== Security Considerations There are two important considerations concerning the use of `permit`. The first is that a valid permit signature expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be considered as an intention to spend the allowance in any specific way. The second is that because permits have built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be generally recommended is: ```solidity function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}     doThing(..., value); } function doThing(..., uint256 value) public {     token.safeTransferFrom(msg.sender, address(this), value);     ... } ``` Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also {SafeERC20-safeTransferFrom}). Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so contracts should have entry points that don't rely on permit.","kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"nonces(address)":{"details":"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all. ==== Security Considerations There are two important considerations concerning the use of `permit`. The first is that a valid permit signature expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be considered as an intention to spend the allowance in any specific way. The second is that because permits have built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be generally recommended is: ```solidity function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}     doThing(..., value); } function doThing(..., uint256 value) public {     token.safeTransferFrom(msg.sender, address(this), value);     ... } ``` Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also {SafeERC20-safeTransferFrom}). Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so contracts should have entry points that don't rely on permit.\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol\":\"IERC20PermitUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * ==== Security Considerations\\n *\\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\\n * generally recommended is:\\n *\\n * ```solidity\\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\\n *     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\\n *     doThing(..., value);\\n * }\\n *\\n * function doThing(..., uint256 value) public {\\n *     token.safeTransferFrom(msg.sender, address(this), value);\\n *     ...\\n * }\\n * ```\\n *\\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\\n * {SafeERC20-safeTransferFrom}).\\n *\\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\\n * contracts should have entry points that don't rely on permit.\\n */\\ninterface IERC20PermitUpgradeable {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     *\\n     * CAUTION: See Security Considerations above.\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x07e881de3b9f6d2c07909f193f24b96c7fe4ea60013260f3f25aecd8bab3c2f8\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol":{"SafeERC20Upgradeable":{"abi":[],"devdoc":{"details":"Wrappers around ERC20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.","kind":"dev","methods":{},"title":"SafeERC20","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d9f6713c5cbacce800a653e783d9cfba3a975469661353cf35a107d1c6ff026164736f6c63430008190033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD9 0xF6 PUSH18 0x3C5CBACCE800A653E783D9CFBA3A97546966 SGT MSTORE8 0xCF CALLDATALOAD LOG1 SMOD 0xD1 0xC6 SELFDESTRUCT MUL PUSH2 0x6473 PUSH16 0x6C634300081900330000000000000000 ","sourceMap":"734:6366:10:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;734:6366:10;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d9f6713c5cbacce800a653e783d9cfba3a975469661353cf35a107d1c6ff026164736f6c63430008190033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD9 0xF6 PUSH18 0x3C5CBACCE800A653E783D9CFBA3A97546966 SGT MSTORE8 0xCF CALLDATALOAD LOG1 SMOD 0xD1 0xC6 SELFDESTRUCT MUL PUSH2 0x6473 PUSH16 0x6C634300081900330000000000000000 ","sourceMap":"734:6366:10:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_callOptionalReturn(contract IERC20Upgradeable,bytes memory)":"infinite","_callOptionalReturnBool(contract IERC20Upgradeable,bytes memory)":"infinite","forceApprove(contract IERC20Upgradeable,address,uint256)":"infinite","safeApprove(contract IERC20Upgradeable,address,uint256)":"infinite","safeDecreaseAllowance(contract IERC20Upgradeable,address,uint256)":"infinite","safeIncreaseAllowance(contract IERC20Upgradeable,address,uint256)":"infinite","safePermit(contract IERC20PermitUpgradeable,address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","safeTransfer(contract IERC20Upgradeable,address,uint256)":"infinite","safeTransferFrom(contract IERC20Upgradeable,address,address,uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers around ERC20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\":\"SafeERC20Upgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * ==== Security Considerations\\n *\\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\\n * generally recommended is:\\n *\\n * ```solidity\\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\\n *     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\\n *     doThing(..., value);\\n * }\\n *\\n * function doThing(..., uint256 value) public {\\n *     token.safeTransferFrom(msg.sender, address(this), value);\\n *     ...\\n * }\\n * ```\\n *\\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\\n * {SafeERC20-safeTransferFrom}).\\n *\\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\\n * contracts should have entry points that don't rely on permit.\\n */\\ninterface IERC20PermitUpgradeable {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     *\\n     * CAUTION: See Security Considerations above.\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x07e881de3b9f6d2c07909f193f24b96c7fe4ea60013260f3f25aecd8bab3c2f8\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\nimport \\\"../extensions/IERC20PermitUpgradeable.sol\\\";\\nimport \\\"../../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20Upgradeable {\\n    using AddressUpgradeable for address;\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransfer(IERC20Upgradeable token, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    /**\\n     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeIncreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        uint256 oldAllowance = token.allowance(address(this), spender);\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));\\n    }\\n\\n    /**\\n     * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeDecreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));\\n        }\\n    }\\n\\n    /**\\n     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n     * to be set to zero before setting it to a non-zero value, such as USDT.\\n     */\\n    function forceApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);\\n\\n        if (!_callOptionalReturnBool(token, approvalCall)) {\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));\\n            _callOptionalReturn(token, approvalCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.\\n     * Revert on invalid signature.\\n     */\\n    function safePermit(\\n        IERC20PermitUpgradeable token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20Upgradeable token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        require(returndata.length == 0 || abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     *\\n     * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\\n     */\\n    function _callOptionalReturnBool(IERC20Upgradeable token, bytes memory data) private returns (bool) {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\\n        // and not revert is the subcall reverts.\\n\\n        (bool success, bytes memory returndata) = address(token).call(data);\\n        return\\n            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && AddressUpgradeable.isContract(address(token));\\n    }\\n}\\n\",\"keccak256\":\"0x23b997be73d3dd46885262704f0f8cfc7273fdadfe303d37969a9561373972b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol":{"AddressUpgradeable":{"abi":[],"devdoc":{"details":"Collection of functions related to the address type","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220db4defc2e8629387a6ca908a19fa79eb3d0d25667927dad2633bc5f7c5b4eb2764736f6c63430008190033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDB 0x4D 0xEF 0xC2 0xE8 PUSH3 0x9387A6 0xCA SWAP1 DUP11 NOT STATICCALL PUSH26 0xEB3D0D25667927DAD2633BC5F7C5B4EB2764736F6C6343000819 STOP CALLER ","sourceMap":"194:9180:11:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;194:9180:11;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220db4defc2e8629387a6ca908a19fa79eb3d0d25667927dad2633bc5f7c5b4eb2764736f6c63430008190033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDB 0x4D 0xEF 0xC2 0xE8 PUSH3 0x9387A6 0xCA SWAP1 DUP11 NOT STATICCALL PUSH26 0xEB3D0D25667927DAD2633BC5F7C5B4EB2764736F6C6343000819 STOP CALLER ","sourceMap":"194:9180:11:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_revert(bytes memory,string memory)":"infinite","functionCall(address,bytes memory)":"infinite","functionCall(address,bytes memory,string memory)":"infinite","functionCallWithValue(address,bytes memory,uint256)":"infinite","functionCallWithValue(address,bytes memory,uint256,string memory)":"infinite","functionDelegateCall(address,bytes memory)":"infinite","functionDelegateCall(address,bytes memory,string memory)":"infinite","functionStaticCall(address,bytes memory)":"infinite","functionStaticCall(address,bytes memory,string memory)":"infinite","isContract(address)":"infinite","sendValue(address payable,uint256)":"infinite","verifyCallResult(bool,bytes memory,string memory)":"infinite","verifyCallResultFromTarget(address,bool,bytes memory,string memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":\"AddressUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol":{"ContextUpgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"}],"devdoc":{"details":"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.","events":{"Initialized(uint8)":{"details":"Triggered when the contract has been initialized or reinitialized."}},"kind":"dev","methods":{},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"events\":{\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":\"ContextUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":414,"contract":"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":417,"contract":"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":2820,"contract":"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"}],"types":{"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol":{"MathUpgradeable":{"abi":[],"devdoc":{"details":"Standard math utilities missing in the Solidity language.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c409b425f420e8b7a19660cf92f60131b823d0d3b25bef351c9ed230e3ad3ef264736f6c63430008190033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC4 MULMOD 0xB4 0x25 DELEGATECALL KECCAK256 0xE8 0xB7 LOG1 SWAP7 PUSH1 0xCF SWAP3 0xF6 ADD BALANCE 0xB8 0x23 0xD0 0xD3 0xB2 JUMPDEST 0xEF CALLDATALOAD SHR SWAP15 0xD2 ADDRESS 0xE3 0xAD RETURNDATACOPY CALLCODE PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ","sourceMap":"202:12593:13:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;202:12593:13;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c409b425f420e8b7a19660cf92f60131b823d0d3b25bef351c9ed230e3ad3ef264736f6c63430008190033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC4 MULMOD 0xB4 0x25 DELEGATECALL KECCAK256 0xE8 0xB7 LOG1 SWAP7 PUSH1 0xCF SWAP3 0xF6 ADD BALANCE 0xB8 0x23 0xD0 0xD3 0xB2 JUMPDEST 0xEF CALLDATALOAD SHR SWAP15 0xD2 ADDRESS 0xE3 0xAD RETURNDATACOPY CALLCODE PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ","sourceMap":"202:12593:13:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"average(uint256,uint256)":"infinite","ceilDiv(uint256,uint256)":"infinite","log10(uint256)":"infinite","log10(uint256,enum MathUpgradeable.Rounding)":"infinite","log2(uint256)":"infinite","log2(uint256,enum MathUpgradeable.Rounding)":"infinite","log256(uint256)":"infinite","log256(uint256,enum MathUpgradeable.Rounding)":"infinite","max(uint256,uint256)":"infinite","min(uint256,uint256)":"infinite","mulDiv(uint256,uint256,uint256)":"infinite","mulDiv(uint256,uint256,uint256,enum MathUpgradeable.Rounding)":"infinite","sqrt(uint256)":"infinite","sqrt(uint256,enum MathUpgradeable.Rounding)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol\":\"MathUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary MathUpgradeable {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n                // The surrounding unchecked block does not change this fact.\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10 ** 64) {\\n                value /= 10 ** 64;\\n                result += 64;\\n            }\\n            if (value >= 10 ** 32) {\\n                value /= 10 ** 32;\\n                result += 32;\\n            }\\n            if (value >= 10 ** 16) {\\n                value /= 10 ** 16;\\n                result += 16;\\n            }\\n            if (value >= 10 ** 8) {\\n                value /= 10 ** 8;\\n                result += 8;\\n            }\\n            if (value >= 10 ** 4) {\\n                value /= 10 ** 4;\\n                result += 4;\\n            }\\n            if (value >= 10 ** 2) {\\n                value /= 10 ** 2;\\n                result += 2;\\n            }\\n            if (value >= 10 ** 1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2bc0007987c229ae7624eb29be6a9b84f6a6a5872f76248b15208b131ea41c4e\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/access/IAccessControl.sol":{"IAccessControl":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","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":[{"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":"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":"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"}],"devdoc":{"details":"External interface of AccessControl declared to support ERC165 detection.","events":{"RoleAdminChanged(bytes32,bytes32,bytes32)":{"details":"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._"},"RoleGranted(bytes32,address,address)":{"details":"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}."},"RoleRevoked(bytes32,address,address)":{"details":"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call:   - if using `revokeRole`, it is the admin role bearer   - if using `renounceRole`, it is the role bearer (i.e. `account`)"}},"kind":"dev","methods":{"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {AccessControl-_setRoleAdmin}."},"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},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"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\":[{\"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\":\"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\":\"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\"}],\"devdoc\":{\"details\":\"External interface of AccessControl declared to support ERC165 detection.\",\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call:   - if using `revokeRole`, it is the admin role bearer   - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {AccessControl-_setRoleAdmin}.\"},\"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\":{\"@openzeppelin/contracts/access/IAccessControl.sol\":\"IAccessControl\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n    /**\\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n     *\\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n     * {RoleAdminChanged} not being emitted signaling this.\\n     *\\n     * _Available since v3.1._\\n     */\\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n    /**\\n     * @dev Emitted when `account` is granted `role`.\\n     *\\n     * `sender` is the account that originated the contract call, an admin role\\n     * bearer except when using {AccessControl-_setupRole}.\\n     */\\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Emitted when `account` is revoked `role`.\\n     *\\n     * `sender` is the account that originated the contract call:\\n     *   - if using `revokeRole`, it is the admin role bearer\\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n     */\\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Returns `true` if `account` has been granted `role`.\\n     */\\n    function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n    /**\\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\\n     * {revokeRole}.\\n     *\\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n     */\\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n    /**\\n     * @dev Grants `role` to `account`.\\n     *\\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function grantRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from `account`.\\n     *\\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function revokeRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from the calling account.\\n     *\\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n     * purpose is to provide a mechanism for accounts to lose their privileges\\n     * if they are compromised (such as when a trusted device is misplaced).\\n     *\\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must be `account`.\\n     */\\n    function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/access/Ownable.sol":{"Ownable":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.","kind":"dev","methods":{"constructor":{"details":"Initializes the contract setting the deployer as the initial owner."},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\",\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\",\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":3768,"contract":"@openzeppelin/contracts/access/Ownable.sol:Ownable","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/interfaces/IERC1967.sol":{"IERC1967":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"}],"devdoc":{"details":"ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC. _Available since v4.8.3._","events":{"AdminChanged(address,address)":{"details":"Emitted when the admin account has changed."},"BeaconUpgraded(address)":{"details":"Emitted when the beacon is changed."},"Upgraded(address)":{"details":"Emitted when the implementation is upgraded."}},"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC. _Available since v4.8.3._\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC1967.sol\":\"IERC1967\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1967.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC1967.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\\n *\\n * _Available since v4.8.3._\\n */\\ninterface IERC1967 {\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Emitted when the admin account has changed.\\n     */\\n    event AdminChanged(address previousAdmin, address newAdmin);\\n\\n    /**\\n     * @dev Emitted when the beacon is changed.\\n     */\\n    event BeaconUpgraded(address indexed beacon);\\n}\\n\",\"keccak256\":\"0x3cbef5ebc24b415252e2f8c0c9254555d30d9f085603b4b80d9b5ed20ab87e90\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/interfaces/draft-IERC1822.sol":{"IERC1822Proxiable":{"abi":[{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified proxy whose upgrades are fully controlled by the current implementation.","kind":"dev","methods":{"proxiableUUID()":{"details":"Returns the storage slot that the proxiable contract assumes is being used to store the implementation address. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"proxiableUUID()":"52d1902d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified proxy whose upgrades are fully controlled by the current implementation.\",\"kind\":\"dev\",\"methods\":{\"proxiableUUID()\":{\"details\":\"Returns the storage slot that the proxiable contract assumes is being used to store the implementation address. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":\"IERC1822Proxiable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol":{"ERC1967Upgrade":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"}],"devdoc":{"details":"This abstract contract provides getters and event emitting update functions for https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. _Available since v4.1._","events":{"AdminChanged(address,address)":{"details":"Emitted when the admin account has changed."},"BeaconUpgraded(address)":{"details":"Emitted when the beacon is changed."},"Upgraded(address)":{"details":"Emitted when the implementation is upgraded."}},"kind":"dev","methods":{},"stateVariables":{"_ADMIN_SLOT":{"details":"Storage slot with the admin of the contract. This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is validated in the constructor."},"_BEACON_SLOT":{"details":"The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor."},"_IMPLEMENTATION_SLOT":{"details":"Storage slot with the address of the current implementation. This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is validated in the constructor."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"This abstract contract provides getters and event emitting update functions for https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. _Available since v4.1._\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"_ADMIN_SLOT\":{\"details\":\"Storage slot with the admin of the contract. This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is validated in the constructor.\"},\"_BEACON_SLOT\":{\"details\":\"The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\"},\"_IMPLEMENTATION_SLOT\":{\"details\":\"Storage slot with the address of the current implementation. This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is validated in the constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":\"ERC1967Upgrade\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1967.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC1967.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\\n *\\n * _Available since v4.8.3._\\n */\\ninterface IERC1967 {\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Emitted when the admin account has changed.\\n     */\\n    event AdminChanged(address previousAdmin, address newAdmin);\\n\\n    /**\\n     * @dev Emitted when the beacon is changed.\\n     */\\n    event BeaconUpgraded(address indexed beacon);\\n}\\n\",\"keccak256\":\"0x3cbef5ebc24b415252e2f8c0c9254555d30d9f085603b4b80d9b5ed20ab87e90\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/IERC1967.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract ERC1967Upgrade is IERC1967 {\\n    // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n    /**\\n     * @dev Storage slot with the address of the current implementation.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _getImplementation() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 implementation slot.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeTo(address newImplementation) internal {\\n        _setImplementation(newImplementation);\\n        emit Upgraded(newImplementation);\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCall(address newImplementation, bytes memory data, bool forceCall) internal {\\n        _upgradeTo(newImplementation);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(newImplementation, data);\\n        }\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCallUUPS(address newImplementation, bytes memory data, bool forceCall) internal {\\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\\n        if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n            _setImplementation(newImplementation);\\n        } else {\\n            try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n                require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n            } catch {\\n                revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n            }\\n            _upgradeToAndCall(newImplementation, data, forceCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Storage slot with the admin of the contract.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _getAdmin() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 admin slot.\\n     */\\n    function _setAdmin(address newAdmin) private {\\n        require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {AdminChanged} event.\\n     */\\n    function _changeAdmin(address newAdmin) internal {\\n        emit AdminChanged(_getAdmin(), newAdmin);\\n        _setAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n     */\\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n    /**\\n     * @dev Returns the current beacon.\\n     */\\n    function _getBeacon() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\\n     */\\n    function _setBeacon(address newBeacon) private {\\n        require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n        require(\\n            Address.isContract(IBeacon(newBeacon).implementation()),\\n            \\\"ERC1967: beacon implementation is not a contract\\\"\\n        );\\n        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n    }\\n\\n    /**\\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n     *\\n     * Emits a {BeaconUpgraded} event.\\n     */\\n    function _upgradeBeaconToAndCall(address newBeacon, bytes memory data, bool forceCall) internal {\\n        _setBeacon(newBeacon);\\n        emit BeaconUpgraded(newBeacon);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3b21ae06bf5957f73fa16754b0669c77b7abd8ba6c072d35c3281d446fdb86c2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {BeaconProxy} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```solidity\\n * contract ERC1967 {\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\n * _Available since v4.9 for `string`, `bytes`._\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    struct StringSlot {\\n        string value;\\n    }\\n\\n    struct BytesSlot {\\n        bytes value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\n     */\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\n     */\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := store.slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\n     */\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\n     */\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := store.slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/proxy/Proxy.sol":{"Proxy":{"abi":[{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"details":"This abstract contract provides a fallback function that delegates all calls to another contract using the EVM instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to be specified by overriding the virtual {_implementation} function. Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a different contract through the {_delegate} function. The success and return data of the delegated call will be returned back to the caller of the proxy.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This abstract contract provides a fallback function that delegates all calls to another contract using the EVM instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to be specified by overriding the virtual {_implementation} function. Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a different contract through the {_delegate} function. The success and return data of the delegated call will be returned back to the caller of the proxy.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/Proxy.sol\":\"Proxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n    /**\\n     * @dev Delegates the current call to `implementation`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _delegate(address implementation) internal virtual {\\n        assembly {\\n            // Copy msg.data. We take full control of memory in this inline assembly\\n            // block because it will not return to Solidity code. We overwrite the\\n            // Solidity scratch pad at memory position 0.\\n            calldatacopy(0, 0, calldatasize())\\n\\n            // Call the implementation.\\n            // out and outsize are 0 because we don't know the size yet.\\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n            // Copy the returned data.\\n            returndatacopy(0, 0, returndatasize())\\n\\n            switch result\\n            // delegatecall returns 0 on error.\\n            case 0 {\\n                revert(0, returndatasize())\\n            }\\n            default {\\n                return(0, returndatasize())\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n     * and {_fallback} should delegate.\\n     */\\n    function _implementation() internal view virtual returns (address);\\n\\n    /**\\n     * @dev Delegates the current call to the address returned by `_implementation()`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _fallback() internal virtual {\\n        _beforeFallback();\\n        _delegate(_implementation());\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n     * function in the contract matches the call data.\\n     */\\n    fallback() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n     * is empty.\\n     */\\n    receive() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n     * call, or as part of the Solidity `fallback` or `receive` functions.\\n     *\\n     * If overridden should call `super._beforeFallback()`.\\n     */\\n    function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol":{"BeaconProxy":{"abi":[{"inputs":[{"internalType":"address","name":"beacon","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"details":"This contract implements a proxy that gets the implementation address for each call from an {UpgradeableBeacon}. The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't conflict with the storage layout of the implementation behind the proxy. _Available since v3.4._","events":{"AdminChanged(address,address)":{"details":"Emitted when the admin account has changed."},"BeaconUpgraded(address)":{"details":"Emitted when the beacon is changed."},"Upgraded(address)":{"details":"Emitted when the implementation is upgraded."}},"kind":"dev","methods":{"constructor":{"details":"Initializes the proxy with `beacon`. If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - `beacon` must be a contract with the interface {IBeacon}."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_4285":{"entryPoint":null,"id":4285,"parameterSlots":2,"returnSlots":0},"@_revert_4740":{"entryPoint":751,"id":4740,"parameterSlots":2,"returnSlots":0},"@_setBeacon_4169":{"entryPoint":246,"id":4169,"parameterSlots":1,"returnSlots":0},"@_upgradeBeaconToAndCall_4207":{"entryPoint":53,"id":4207,"parameterSlots":3,"returnSlots":0},"@functionDelegateCall_4628":{"entryPoint":503,"id":4628,"parameterSlots":2,"returnSlots":1},"@functionDelegateCall_4657":{"entryPoint":549,"id":4657,"parameterSlots":3,"returnSlots":1},"@getAddressSlot_4803":{"entryPoint":null,"id":4803,"parameterSlots":1,"returnSlots":1},"@isContract_4429":{"entryPoint":null,"id":4429,"parameterSlots":1,"returnSlots":1},"@verifyCallResultFromTarget_4696":{"entryPoint":670,"id":4696,"parameterSlots":4,"returnSlots":1},"abi_decode_available_length_t_bytes_memory_ptr_fromMemory":{"entryPoint":1016,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_t_address_fromMemory":{"entryPoint":833,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_bytes_memory_ptr_fromMemory":{"entryPoint":1081,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":1204,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory":{"entryPoint":1117,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":1415,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack":{"entryPoint":1527,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470_to_t_string_memory_ptr_fromStack":{"entryPoint":1237,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8_to_t_string_memory_ptr_fromStack":{"entryPoint":1322,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":1449,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1577,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1306,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1468,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1399,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory":{"entryPoint":910,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_t_bytes_memory_ptr":{"entryPoint":938,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_bytes_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_string_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_address":{"entryPoint":793,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":980,"id":null,"parameterSlots":3,"returnSlots":0},"finalize_allocation":{"entryPoint":866,"id":null,"parameterSlots":2,"returnSlots":0},"panic_error_0x41":{"entryPoint":844,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"round_up_to_mul_of_32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"store_literal_in_memory_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_address":{"entryPoint":810,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:9177:69","nodeType":"YulBlock","src":"0:9177:69","statements":[{"body":{"nativeSrc":"47:35:69","nodeType":"YulBlock","src":"47:35:69","statements":[{"nativeSrc":"57:19:69","nodeType":"YulAssignment","src":"57:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"73:2:69","nodeType":"YulLiteral","src":"73:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"67:5:69","nodeType":"YulIdentifier","src":"67:5:69"},"nativeSrc":"67:9:69","nodeType":"YulFunctionCall","src":"67:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"57:6:69","nodeType":"YulIdentifier","src":"57:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"7:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"40:6:69","nodeType":"YulTypedName","src":"40:6:69","type":""}],"src":"7:75:69"},{"body":{"nativeSrc":"177:28:69","nodeType":"YulBlock","src":"177:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"194:1:69","nodeType":"YulLiteral","src":"194:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"197:1:69","nodeType":"YulLiteral","src":"197:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"187:6:69","nodeType":"YulIdentifier","src":"187:6:69"},"nativeSrc":"187:12:69","nodeType":"YulFunctionCall","src":"187:12:69"},"nativeSrc":"187:12:69","nodeType":"YulExpressionStatement","src":"187:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"88:117:69","nodeType":"YulFunctionDefinition","src":"88:117:69"},{"body":{"nativeSrc":"300:28:69","nodeType":"YulBlock","src":"300:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"317:1:69","nodeType":"YulLiteral","src":"317:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"320:1:69","nodeType":"YulLiteral","src":"320:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},"nativeSrc":"310:12:69","nodeType":"YulFunctionCall","src":"310:12:69"},"nativeSrc":"310:12:69","nodeType":"YulExpressionStatement","src":"310:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"211:117:69","nodeType":"YulFunctionDefinition","src":"211:117:69"},{"body":{"nativeSrc":"379:81:69","nodeType":"YulBlock","src":"379:81:69","statements":[{"nativeSrc":"389:65:69","nodeType":"YulAssignment","src":"389:65:69","value":{"arguments":[{"name":"value","nativeSrc":"404:5:69","nodeType":"YulIdentifier","src":"404:5:69"},{"kind":"number","nativeSrc":"411:42:69","nodeType":"YulLiteral","src":"411:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"400:3:69","nodeType":"YulIdentifier","src":"400:3:69"},"nativeSrc":"400:54:69","nodeType":"YulFunctionCall","src":"400:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"389:7:69","nodeType":"YulIdentifier","src":"389:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"334:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"361:5:69","nodeType":"YulTypedName","src":"361:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"371:7:69","nodeType":"YulTypedName","src":"371:7:69","type":""}],"src":"334:126:69"},{"body":{"nativeSrc":"511:51:69","nodeType":"YulBlock","src":"511:51:69","statements":[{"nativeSrc":"521:35:69","nodeType":"YulAssignment","src":"521:35:69","value":{"arguments":[{"name":"value","nativeSrc":"550:5:69","nodeType":"YulIdentifier","src":"550:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"532:17:69","nodeType":"YulIdentifier","src":"532:17:69"},"nativeSrc":"532:24:69","nodeType":"YulFunctionCall","src":"532:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"521:7:69","nodeType":"YulIdentifier","src":"521:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"466:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"493:5:69","nodeType":"YulTypedName","src":"493:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"503:7:69","nodeType":"YulTypedName","src":"503:7:69","type":""}],"src":"466:96:69"},{"body":{"nativeSrc":"611:79:69","nodeType":"YulBlock","src":"611:79:69","statements":[{"body":{"nativeSrc":"668:16:69","nodeType":"YulBlock","src":"668:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"677:1:69","nodeType":"YulLiteral","src":"677:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"680:1:69","nodeType":"YulLiteral","src":"680:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"670:6:69","nodeType":"YulIdentifier","src":"670:6:69"},"nativeSrc":"670:12:69","nodeType":"YulFunctionCall","src":"670:12:69"},"nativeSrc":"670:12:69","nodeType":"YulExpressionStatement","src":"670:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"634:5:69","nodeType":"YulIdentifier","src":"634:5:69"},{"arguments":[{"name":"value","nativeSrc":"659:5:69","nodeType":"YulIdentifier","src":"659:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"641:17:69","nodeType":"YulIdentifier","src":"641:17:69"},"nativeSrc":"641:24:69","nodeType":"YulFunctionCall","src":"641:24:69"}],"functionName":{"name":"eq","nativeSrc":"631:2:69","nodeType":"YulIdentifier","src":"631:2:69"},"nativeSrc":"631:35:69","nodeType":"YulFunctionCall","src":"631:35:69"}],"functionName":{"name":"iszero","nativeSrc":"624:6:69","nodeType":"YulIdentifier","src":"624:6:69"},"nativeSrc":"624:43:69","nodeType":"YulFunctionCall","src":"624:43:69"},"nativeSrc":"621:63:69","nodeType":"YulIf","src":"621:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"568:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"604:5:69","nodeType":"YulTypedName","src":"604:5:69","type":""}],"src":"568:122:69"},{"body":{"nativeSrc":"759:80:69","nodeType":"YulBlock","src":"759:80:69","statements":[{"nativeSrc":"769:22:69","nodeType":"YulAssignment","src":"769:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"784:6:69","nodeType":"YulIdentifier","src":"784:6:69"}],"functionName":{"name":"mload","nativeSrc":"778:5:69","nodeType":"YulIdentifier","src":"778:5:69"},"nativeSrc":"778:13:69","nodeType":"YulFunctionCall","src":"778:13:69"},"variableNames":[{"name":"value","nativeSrc":"769:5:69","nodeType":"YulIdentifier","src":"769:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"827:5:69","nodeType":"YulIdentifier","src":"827:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"800:26:69","nodeType":"YulIdentifier","src":"800:26:69"},"nativeSrc":"800:33:69","nodeType":"YulFunctionCall","src":"800:33:69"},"nativeSrc":"800:33:69","nodeType":"YulExpressionStatement","src":"800:33:69"}]},"name":"abi_decode_t_address_fromMemory","nativeSrc":"696:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"737:6:69","nodeType":"YulTypedName","src":"737:6:69","type":""},{"name":"end","nativeSrc":"745:3:69","nodeType":"YulTypedName","src":"745:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"753:5:69","nodeType":"YulTypedName","src":"753:5:69","type":""}],"src":"696:143:69"},{"body":{"nativeSrc":"934:28:69","nodeType":"YulBlock","src":"934:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"951:1:69","nodeType":"YulLiteral","src":"951:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"954:1:69","nodeType":"YulLiteral","src":"954:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"944:6:69","nodeType":"YulIdentifier","src":"944:6:69"},"nativeSrc":"944:12:69","nodeType":"YulFunctionCall","src":"944:12:69"},"nativeSrc":"944:12:69","nodeType":"YulExpressionStatement","src":"944:12:69"}]},"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"845:117:69","nodeType":"YulFunctionDefinition","src":"845:117:69"},{"body":{"nativeSrc":"1057:28:69","nodeType":"YulBlock","src":"1057:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1074:1:69","nodeType":"YulLiteral","src":"1074:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1077:1:69","nodeType":"YulLiteral","src":"1077:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1067:6:69","nodeType":"YulIdentifier","src":"1067:6:69"},"nativeSrc":"1067:12:69","nodeType":"YulFunctionCall","src":"1067:12:69"},"nativeSrc":"1067:12:69","nodeType":"YulExpressionStatement","src":"1067:12:69"}]},"name":"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae","nativeSrc":"968:117:69","nodeType":"YulFunctionDefinition","src":"968:117:69"},{"body":{"nativeSrc":"1139:54:69","nodeType":"YulBlock","src":"1139:54:69","statements":[{"nativeSrc":"1149:38:69","nodeType":"YulAssignment","src":"1149:38:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1167:5:69","nodeType":"YulIdentifier","src":"1167:5:69"},{"kind":"number","nativeSrc":"1174:2:69","nodeType":"YulLiteral","src":"1174:2:69","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"1163:3:69","nodeType":"YulIdentifier","src":"1163:3:69"},"nativeSrc":"1163:14:69","nodeType":"YulFunctionCall","src":"1163:14:69"},{"arguments":[{"kind":"number","nativeSrc":"1183:2:69","nodeType":"YulLiteral","src":"1183:2:69","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"1179:3:69","nodeType":"YulIdentifier","src":"1179:3:69"},"nativeSrc":"1179:7:69","nodeType":"YulFunctionCall","src":"1179:7:69"}],"functionName":{"name":"and","nativeSrc":"1159:3:69","nodeType":"YulIdentifier","src":"1159:3:69"},"nativeSrc":"1159:28:69","nodeType":"YulFunctionCall","src":"1159:28:69"},"variableNames":[{"name":"result","nativeSrc":"1149:6:69","nodeType":"YulIdentifier","src":"1149:6:69"}]}]},"name":"round_up_to_mul_of_32","nativeSrc":"1091:102:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1122:5:69","nodeType":"YulTypedName","src":"1122:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"1132:6:69","nodeType":"YulTypedName","src":"1132:6:69","type":""}],"src":"1091:102:69"},{"body":{"nativeSrc":"1227:152:69","nodeType":"YulBlock","src":"1227:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1244:1:69","nodeType":"YulLiteral","src":"1244:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1247:77:69","nodeType":"YulLiteral","src":"1247:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"1237:6:69","nodeType":"YulIdentifier","src":"1237:6:69"},"nativeSrc":"1237:88:69","nodeType":"YulFunctionCall","src":"1237:88:69"},"nativeSrc":"1237:88:69","nodeType":"YulExpressionStatement","src":"1237:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1341:1:69","nodeType":"YulLiteral","src":"1341:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"1344:4:69","nodeType":"YulLiteral","src":"1344:4:69","type":"","value":"0x41"}],"functionName":{"name":"mstore","nativeSrc":"1334:6:69","nodeType":"YulIdentifier","src":"1334:6:69"},"nativeSrc":"1334:15:69","nodeType":"YulFunctionCall","src":"1334:15:69"},"nativeSrc":"1334:15:69","nodeType":"YulExpressionStatement","src":"1334:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1365:1:69","nodeType":"YulLiteral","src":"1365:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1368:4:69","nodeType":"YulLiteral","src":"1368:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"1358:6:69","nodeType":"YulIdentifier","src":"1358:6:69"},"nativeSrc":"1358:15:69","nodeType":"YulFunctionCall","src":"1358:15:69"},"nativeSrc":"1358:15:69","nodeType":"YulExpressionStatement","src":"1358:15:69"}]},"name":"panic_error_0x41","nativeSrc":"1199:180:69","nodeType":"YulFunctionDefinition","src":"1199:180:69"},{"body":{"nativeSrc":"1428:238:69","nodeType":"YulBlock","src":"1428:238:69","statements":[{"nativeSrc":"1438:58:69","nodeType":"YulVariableDeclaration","src":"1438:58:69","value":{"arguments":[{"name":"memPtr","nativeSrc":"1460:6:69","nodeType":"YulIdentifier","src":"1460:6:69"},{"arguments":[{"name":"size","nativeSrc":"1490:4:69","nodeType":"YulIdentifier","src":"1490:4:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"1468:21:69","nodeType":"YulIdentifier","src":"1468:21:69"},"nativeSrc":"1468:27:69","nodeType":"YulFunctionCall","src":"1468:27:69"}],"functionName":{"name":"add","nativeSrc":"1456:3:69","nodeType":"YulIdentifier","src":"1456:3:69"},"nativeSrc":"1456:40:69","nodeType":"YulFunctionCall","src":"1456:40:69"},"variables":[{"name":"newFreePtr","nativeSrc":"1442:10:69","nodeType":"YulTypedName","src":"1442:10:69","type":""}]},{"body":{"nativeSrc":"1607:22:69","nodeType":"YulBlock","src":"1607:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"1609:16:69","nodeType":"YulIdentifier","src":"1609:16:69"},"nativeSrc":"1609:18:69","nodeType":"YulFunctionCall","src":"1609:18:69"},"nativeSrc":"1609:18:69","nodeType":"YulExpressionStatement","src":"1609:18:69"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nativeSrc":"1550:10:69","nodeType":"YulIdentifier","src":"1550:10:69"},{"kind":"number","nativeSrc":"1562:18:69","nodeType":"YulLiteral","src":"1562:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"1547:2:69","nodeType":"YulIdentifier","src":"1547:2:69"},"nativeSrc":"1547:34:69","nodeType":"YulFunctionCall","src":"1547:34:69"},{"arguments":[{"name":"newFreePtr","nativeSrc":"1586:10:69","nodeType":"YulIdentifier","src":"1586:10:69"},{"name":"memPtr","nativeSrc":"1598:6:69","nodeType":"YulIdentifier","src":"1598:6:69"}],"functionName":{"name":"lt","nativeSrc":"1583:2:69","nodeType":"YulIdentifier","src":"1583:2:69"},"nativeSrc":"1583:22:69","nodeType":"YulFunctionCall","src":"1583:22:69"}],"functionName":{"name":"or","nativeSrc":"1544:2:69","nodeType":"YulIdentifier","src":"1544:2:69"},"nativeSrc":"1544:62:69","nodeType":"YulFunctionCall","src":"1544:62:69"},"nativeSrc":"1541:88:69","nodeType":"YulIf","src":"1541:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1645:2:69","nodeType":"YulLiteral","src":"1645:2:69","type":"","value":"64"},{"name":"newFreePtr","nativeSrc":"1649:10:69","nodeType":"YulIdentifier","src":"1649:10:69"}],"functionName":{"name":"mstore","nativeSrc":"1638:6:69","nodeType":"YulIdentifier","src":"1638:6:69"},"nativeSrc":"1638:22:69","nodeType":"YulFunctionCall","src":"1638:22:69"},"nativeSrc":"1638:22:69","nodeType":"YulExpressionStatement","src":"1638:22:69"}]},"name":"finalize_allocation","nativeSrc":"1385:281:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"1414:6:69","nodeType":"YulTypedName","src":"1414:6:69","type":""},{"name":"size","nativeSrc":"1422:4:69","nodeType":"YulTypedName","src":"1422:4:69","type":""}],"src":"1385:281:69"},{"body":{"nativeSrc":"1713:88:69","nodeType":"YulBlock","src":"1713:88:69","statements":[{"nativeSrc":"1723:30:69","nodeType":"YulAssignment","src":"1723:30:69","value":{"arguments":[],"functionName":{"name":"allocate_unbounded","nativeSrc":"1733:18:69","nodeType":"YulIdentifier","src":"1733:18:69"},"nativeSrc":"1733:20:69","nodeType":"YulFunctionCall","src":"1733:20:69"},"variableNames":[{"name":"memPtr","nativeSrc":"1723:6:69","nodeType":"YulIdentifier","src":"1723:6:69"}]},{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"1782:6:69","nodeType":"YulIdentifier","src":"1782:6:69"},{"name":"size","nativeSrc":"1790:4:69","nodeType":"YulIdentifier","src":"1790:4:69"}],"functionName":{"name":"finalize_allocation","nativeSrc":"1762:19:69","nodeType":"YulIdentifier","src":"1762:19:69"},"nativeSrc":"1762:33:69","nodeType":"YulFunctionCall","src":"1762:33:69"},"nativeSrc":"1762:33:69","nodeType":"YulExpressionStatement","src":"1762:33:69"}]},"name":"allocate_memory","nativeSrc":"1672:129:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nativeSrc":"1697:4:69","nodeType":"YulTypedName","src":"1697:4:69","type":""}],"returnVariables":[{"name":"memPtr","nativeSrc":"1706:6:69","nodeType":"YulTypedName","src":"1706:6:69","type":""}],"src":"1672:129:69"},{"body":{"nativeSrc":"1873:241:69","nodeType":"YulBlock","src":"1873:241:69","statements":[{"body":{"nativeSrc":"1978:22:69","nodeType":"YulBlock","src":"1978:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"1980:16:69","nodeType":"YulIdentifier","src":"1980:16:69"},"nativeSrc":"1980:18:69","nodeType":"YulFunctionCall","src":"1980:18:69"},"nativeSrc":"1980:18:69","nodeType":"YulExpressionStatement","src":"1980:18:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"1950:6:69","nodeType":"YulIdentifier","src":"1950:6:69"},{"kind":"number","nativeSrc":"1958:18:69","nodeType":"YulLiteral","src":"1958:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"1947:2:69","nodeType":"YulIdentifier","src":"1947:2:69"},"nativeSrc":"1947:30:69","nodeType":"YulFunctionCall","src":"1947:30:69"},"nativeSrc":"1944:56:69","nodeType":"YulIf","src":"1944:56:69"},{"nativeSrc":"2010:37:69","nodeType":"YulAssignment","src":"2010:37:69","value":{"arguments":[{"name":"length","nativeSrc":"2040:6:69","nodeType":"YulIdentifier","src":"2040:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"2018:21:69","nodeType":"YulIdentifier","src":"2018:21:69"},"nativeSrc":"2018:29:69","nodeType":"YulFunctionCall","src":"2018:29:69"},"variableNames":[{"name":"size","nativeSrc":"2010:4:69","nodeType":"YulIdentifier","src":"2010:4:69"}]},{"nativeSrc":"2084:23:69","nodeType":"YulAssignment","src":"2084:23:69","value":{"arguments":[{"name":"size","nativeSrc":"2096:4:69","nodeType":"YulIdentifier","src":"2096:4:69"},{"kind":"number","nativeSrc":"2102:4:69","nodeType":"YulLiteral","src":"2102:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2092:3:69","nodeType":"YulIdentifier","src":"2092:3:69"},"nativeSrc":"2092:15:69","nodeType":"YulFunctionCall","src":"2092:15:69"},"variableNames":[{"name":"size","nativeSrc":"2084:4:69","nodeType":"YulIdentifier","src":"2084:4:69"}]}]},"name":"array_allocation_size_t_bytes_memory_ptr","nativeSrc":"1807:307:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nativeSrc":"1857:6:69","nodeType":"YulTypedName","src":"1857:6:69","type":""}],"returnVariables":[{"name":"size","nativeSrc":"1868:4:69","nodeType":"YulTypedName","src":"1868:4:69","type":""}],"src":"1807:307:69"},{"body":{"nativeSrc":"2182:186:69","nodeType":"YulBlock","src":"2182:186:69","statements":[{"nativeSrc":"2193:10:69","nodeType":"YulVariableDeclaration","src":"2193:10:69","value":{"kind":"number","nativeSrc":"2202:1:69","nodeType":"YulLiteral","src":"2202:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"2197:1:69","nodeType":"YulTypedName","src":"2197:1:69","type":""}]},{"body":{"nativeSrc":"2262:63:69","nodeType":"YulBlock","src":"2262:63:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"2287:3:69","nodeType":"YulIdentifier","src":"2287:3:69"},{"name":"i","nativeSrc":"2292:1:69","nodeType":"YulIdentifier","src":"2292:1:69"}],"functionName":{"name":"add","nativeSrc":"2283:3:69","nodeType":"YulIdentifier","src":"2283:3:69"},"nativeSrc":"2283:11:69","nodeType":"YulFunctionCall","src":"2283:11:69"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"2306:3:69","nodeType":"YulIdentifier","src":"2306:3:69"},{"name":"i","nativeSrc":"2311:1:69","nodeType":"YulIdentifier","src":"2311:1:69"}],"functionName":{"name":"add","nativeSrc":"2302:3:69","nodeType":"YulIdentifier","src":"2302:3:69"},"nativeSrc":"2302:11:69","nodeType":"YulFunctionCall","src":"2302:11:69"}],"functionName":{"name":"mload","nativeSrc":"2296:5:69","nodeType":"YulIdentifier","src":"2296:5:69"},"nativeSrc":"2296:18:69","nodeType":"YulFunctionCall","src":"2296:18:69"}],"functionName":{"name":"mstore","nativeSrc":"2276:6:69","nodeType":"YulIdentifier","src":"2276:6:69"},"nativeSrc":"2276:39:69","nodeType":"YulFunctionCall","src":"2276:39:69"},"nativeSrc":"2276:39:69","nodeType":"YulExpressionStatement","src":"2276:39:69"}]},"condition":{"arguments":[{"name":"i","nativeSrc":"2223:1:69","nodeType":"YulIdentifier","src":"2223:1:69"},{"name":"length","nativeSrc":"2226:6:69","nodeType":"YulIdentifier","src":"2226:6:69"}],"functionName":{"name":"lt","nativeSrc":"2220:2:69","nodeType":"YulIdentifier","src":"2220:2:69"},"nativeSrc":"2220:13:69","nodeType":"YulFunctionCall","src":"2220:13:69"},"nativeSrc":"2212:113:69","nodeType":"YulForLoop","post":{"nativeSrc":"2234:19:69","nodeType":"YulBlock","src":"2234:19:69","statements":[{"nativeSrc":"2236:15:69","nodeType":"YulAssignment","src":"2236:15:69","value":{"arguments":[{"name":"i","nativeSrc":"2245:1:69","nodeType":"YulIdentifier","src":"2245:1:69"},{"kind":"number","nativeSrc":"2248:2:69","nodeType":"YulLiteral","src":"2248:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2241:3:69","nodeType":"YulIdentifier","src":"2241:3:69"},"nativeSrc":"2241:10:69","nodeType":"YulFunctionCall","src":"2241:10:69"},"variableNames":[{"name":"i","nativeSrc":"2236:1:69","nodeType":"YulIdentifier","src":"2236:1:69"}]}]},"pre":{"nativeSrc":"2216:3:69","nodeType":"YulBlock","src":"2216:3:69","statements":[]},"src":"2212:113:69"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"2345:3:69","nodeType":"YulIdentifier","src":"2345:3:69"},{"name":"length","nativeSrc":"2350:6:69","nodeType":"YulIdentifier","src":"2350:6:69"}],"functionName":{"name":"add","nativeSrc":"2341:3:69","nodeType":"YulIdentifier","src":"2341:3:69"},"nativeSrc":"2341:16:69","nodeType":"YulFunctionCall","src":"2341:16:69"},{"kind":"number","nativeSrc":"2359:1:69","nodeType":"YulLiteral","src":"2359:1:69","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"2334:6:69","nodeType":"YulIdentifier","src":"2334:6:69"},"nativeSrc":"2334:27:69","nodeType":"YulFunctionCall","src":"2334:27:69"},"nativeSrc":"2334:27:69","nodeType":"YulExpressionStatement","src":"2334:27:69"}]},"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"2120:248:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"2164:3:69","nodeType":"YulTypedName","src":"2164:3:69","type":""},{"name":"dst","nativeSrc":"2169:3:69","nodeType":"YulTypedName","src":"2169:3:69","type":""},{"name":"length","nativeSrc":"2174:6:69","nodeType":"YulTypedName","src":"2174:6:69","type":""}],"src":"2120:248:69"},{"body":{"nativeSrc":"2468:338:69","nodeType":"YulBlock","src":"2468:338:69","statements":[{"nativeSrc":"2478:74:69","nodeType":"YulAssignment","src":"2478:74:69","value":{"arguments":[{"arguments":[{"name":"length","nativeSrc":"2544:6:69","nodeType":"YulIdentifier","src":"2544:6:69"}],"functionName":{"name":"array_allocation_size_t_bytes_memory_ptr","nativeSrc":"2503:40:69","nodeType":"YulIdentifier","src":"2503:40:69"},"nativeSrc":"2503:48:69","nodeType":"YulFunctionCall","src":"2503:48:69"}],"functionName":{"name":"allocate_memory","nativeSrc":"2487:15:69","nodeType":"YulIdentifier","src":"2487:15:69"},"nativeSrc":"2487:65:69","nodeType":"YulFunctionCall","src":"2487:65:69"},"variableNames":[{"name":"array","nativeSrc":"2478:5:69","nodeType":"YulIdentifier","src":"2478:5:69"}]},{"expression":{"arguments":[{"name":"array","nativeSrc":"2568:5:69","nodeType":"YulIdentifier","src":"2568:5:69"},{"name":"length","nativeSrc":"2575:6:69","nodeType":"YulIdentifier","src":"2575:6:69"}],"functionName":{"name":"mstore","nativeSrc":"2561:6:69","nodeType":"YulIdentifier","src":"2561:6:69"},"nativeSrc":"2561:21:69","nodeType":"YulFunctionCall","src":"2561:21:69"},"nativeSrc":"2561:21:69","nodeType":"YulExpressionStatement","src":"2561:21:69"},{"nativeSrc":"2591:27:69","nodeType":"YulVariableDeclaration","src":"2591:27:69","value":{"arguments":[{"name":"array","nativeSrc":"2606:5:69","nodeType":"YulIdentifier","src":"2606:5:69"},{"kind":"number","nativeSrc":"2613:4:69","nodeType":"YulLiteral","src":"2613:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2602:3:69","nodeType":"YulIdentifier","src":"2602:3:69"},"nativeSrc":"2602:16:69","nodeType":"YulFunctionCall","src":"2602:16:69"},"variables":[{"name":"dst","nativeSrc":"2595:3:69","nodeType":"YulTypedName","src":"2595:3:69","type":""}]},{"body":{"nativeSrc":"2656:83:69","nodeType":"YulBlock","src":"2656:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae","nativeSrc":"2658:77:69","nodeType":"YulIdentifier","src":"2658:77:69"},"nativeSrc":"2658:79:69","nodeType":"YulFunctionCall","src":"2658:79:69"},"nativeSrc":"2658:79:69","nodeType":"YulExpressionStatement","src":"2658:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"src","nativeSrc":"2637:3:69","nodeType":"YulIdentifier","src":"2637:3:69"},{"name":"length","nativeSrc":"2642:6:69","nodeType":"YulIdentifier","src":"2642:6:69"}],"functionName":{"name":"add","nativeSrc":"2633:3:69","nodeType":"YulIdentifier","src":"2633:3:69"},"nativeSrc":"2633:16:69","nodeType":"YulFunctionCall","src":"2633:16:69"},{"name":"end","nativeSrc":"2651:3:69","nodeType":"YulIdentifier","src":"2651:3:69"}],"functionName":{"name":"gt","nativeSrc":"2630:2:69","nodeType":"YulIdentifier","src":"2630:2:69"},"nativeSrc":"2630:25:69","nodeType":"YulFunctionCall","src":"2630:25:69"},"nativeSrc":"2627:112:69","nodeType":"YulIf","src":"2627:112:69"},{"expression":{"arguments":[{"name":"src","nativeSrc":"2783:3:69","nodeType":"YulIdentifier","src":"2783:3:69"},{"name":"dst","nativeSrc":"2788:3:69","nodeType":"YulIdentifier","src":"2788:3:69"},{"name":"length","nativeSrc":"2793:6:69","nodeType":"YulIdentifier","src":"2793:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"2748:34:69","nodeType":"YulIdentifier","src":"2748:34:69"},"nativeSrc":"2748:52:69","nodeType":"YulFunctionCall","src":"2748:52:69"},"nativeSrc":"2748:52:69","nodeType":"YulExpressionStatement","src":"2748:52:69"}]},"name":"abi_decode_available_length_t_bytes_memory_ptr_fromMemory","nativeSrc":"2374:432:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"2441:3:69","nodeType":"YulTypedName","src":"2441:3:69","type":""},{"name":"length","nativeSrc":"2446:6:69","nodeType":"YulTypedName","src":"2446:6:69","type":""},{"name":"end","nativeSrc":"2454:3:69","nodeType":"YulTypedName","src":"2454:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"2462:5:69","nodeType":"YulTypedName","src":"2462:5:69","type":""}],"src":"2374:432:69"},{"body":{"nativeSrc":"2897:281:69","nodeType":"YulBlock","src":"2897:281:69","statements":[{"body":{"nativeSrc":"2946:83:69","nodeType":"YulBlock","src":"2946:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"2948:77:69","nodeType":"YulIdentifier","src":"2948:77:69"},"nativeSrc":"2948:79:69","nodeType":"YulFunctionCall","src":"2948:79:69"},"nativeSrc":"2948:79:69","nodeType":"YulExpressionStatement","src":"2948:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"2925:6:69","nodeType":"YulIdentifier","src":"2925:6:69"},{"kind":"number","nativeSrc":"2933:4:69","nodeType":"YulLiteral","src":"2933:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"2921:3:69","nodeType":"YulIdentifier","src":"2921:3:69"},"nativeSrc":"2921:17:69","nodeType":"YulFunctionCall","src":"2921:17:69"},{"name":"end","nativeSrc":"2940:3:69","nodeType":"YulIdentifier","src":"2940:3:69"}],"functionName":{"name":"slt","nativeSrc":"2917:3:69","nodeType":"YulIdentifier","src":"2917:3:69"},"nativeSrc":"2917:27:69","nodeType":"YulFunctionCall","src":"2917:27:69"}],"functionName":{"name":"iszero","nativeSrc":"2910:6:69","nodeType":"YulIdentifier","src":"2910:6:69"},"nativeSrc":"2910:35:69","nodeType":"YulFunctionCall","src":"2910:35:69"},"nativeSrc":"2907:122:69","nodeType":"YulIf","src":"2907:122:69"},{"nativeSrc":"3038:27:69","nodeType":"YulVariableDeclaration","src":"3038:27:69","value":{"arguments":[{"name":"offset","nativeSrc":"3058:6:69","nodeType":"YulIdentifier","src":"3058:6:69"}],"functionName":{"name":"mload","nativeSrc":"3052:5:69","nodeType":"YulIdentifier","src":"3052:5:69"},"nativeSrc":"3052:13:69","nodeType":"YulFunctionCall","src":"3052:13:69"},"variables":[{"name":"length","nativeSrc":"3042:6:69","nodeType":"YulTypedName","src":"3042:6:69","type":""}]},{"nativeSrc":"3074:98:69","nodeType":"YulAssignment","src":"3074:98:69","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"3145:6:69","nodeType":"YulIdentifier","src":"3145:6:69"},{"kind":"number","nativeSrc":"3153:4:69","nodeType":"YulLiteral","src":"3153:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"3141:3:69","nodeType":"YulIdentifier","src":"3141:3:69"},"nativeSrc":"3141:17:69","nodeType":"YulFunctionCall","src":"3141:17:69"},{"name":"length","nativeSrc":"3160:6:69","nodeType":"YulIdentifier","src":"3160:6:69"},{"name":"end","nativeSrc":"3168:3:69","nodeType":"YulIdentifier","src":"3168:3:69"}],"functionName":{"name":"abi_decode_available_length_t_bytes_memory_ptr_fromMemory","nativeSrc":"3083:57:69","nodeType":"YulIdentifier","src":"3083:57:69"},"nativeSrc":"3083:89:69","nodeType":"YulFunctionCall","src":"3083:89:69"},"variableNames":[{"name":"array","nativeSrc":"3074:5:69","nodeType":"YulIdentifier","src":"3074:5:69"}]}]},"name":"abi_decode_t_bytes_memory_ptr_fromMemory","nativeSrc":"2825:353:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"2875:6:69","nodeType":"YulTypedName","src":"2875:6:69","type":""},{"name":"end","nativeSrc":"2883:3:69","nodeType":"YulTypedName","src":"2883:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"2891:5:69","nodeType":"YulTypedName","src":"2891:5:69","type":""}],"src":"2825:353:69"},{"body":{"nativeSrc":"3287:575:69","nodeType":"YulBlock","src":"3287:575:69","statements":[{"body":{"nativeSrc":"3333:83:69","nodeType":"YulBlock","src":"3333:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"3335:77:69","nodeType":"YulIdentifier","src":"3335:77:69"},"nativeSrc":"3335:79:69","nodeType":"YulFunctionCall","src":"3335:79:69"},"nativeSrc":"3335:79:69","nodeType":"YulExpressionStatement","src":"3335:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"3308:7:69","nodeType":"YulIdentifier","src":"3308:7:69"},{"name":"headStart","nativeSrc":"3317:9:69","nodeType":"YulIdentifier","src":"3317:9:69"}],"functionName":{"name":"sub","nativeSrc":"3304:3:69","nodeType":"YulIdentifier","src":"3304:3:69"},"nativeSrc":"3304:23:69","nodeType":"YulFunctionCall","src":"3304:23:69"},{"kind":"number","nativeSrc":"3329:2:69","nodeType":"YulLiteral","src":"3329:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"3300:3:69","nodeType":"YulIdentifier","src":"3300:3:69"},"nativeSrc":"3300:32:69","nodeType":"YulFunctionCall","src":"3300:32:69"},"nativeSrc":"3297:119:69","nodeType":"YulIf","src":"3297:119:69"},{"nativeSrc":"3426:128:69","nodeType":"YulBlock","src":"3426:128:69","statements":[{"nativeSrc":"3441:15:69","nodeType":"YulVariableDeclaration","src":"3441:15:69","value":{"kind":"number","nativeSrc":"3455:1:69","nodeType":"YulLiteral","src":"3455:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"3445:6:69","nodeType":"YulTypedName","src":"3445:6:69","type":""}]},{"nativeSrc":"3470:74:69","nodeType":"YulAssignment","src":"3470:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3516:9:69","nodeType":"YulIdentifier","src":"3516:9:69"},{"name":"offset","nativeSrc":"3527:6:69","nodeType":"YulIdentifier","src":"3527:6:69"}],"functionName":{"name":"add","nativeSrc":"3512:3:69","nodeType":"YulIdentifier","src":"3512:3:69"},"nativeSrc":"3512:22:69","nodeType":"YulFunctionCall","src":"3512:22:69"},{"name":"dataEnd","nativeSrc":"3536:7:69","nodeType":"YulIdentifier","src":"3536:7:69"}],"functionName":{"name":"abi_decode_t_address_fromMemory","nativeSrc":"3480:31:69","nodeType":"YulIdentifier","src":"3480:31:69"},"nativeSrc":"3480:64:69","nodeType":"YulFunctionCall","src":"3480:64:69"},"variableNames":[{"name":"value0","nativeSrc":"3470:6:69","nodeType":"YulIdentifier","src":"3470:6:69"}]}]},{"nativeSrc":"3564:291:69","nodeType":"YulBlock","src":"3564:291:69","statements":[{"nativeSrc":"3579:39:69","nodeType":"YulVariableDeclaration","src":"3579:39:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3603:9:69","nodeType":"YulIdentifier","src":"3603:9:69"},{"kind":"number","nativeSrc":"3614:2:69","nodeType":"YulLiteral","src":"3614:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3599:3:69","nodeType":"YulIdentifier","src":"3599:3:69"},"nativeSrc":"3599:18:69","nodeType":"YulFunctionCall","src":"3599:18:69"}],"functionName":{"name":"mload","nativeSrc":"3593:5:69","nodeType":"YulIdentifier","src":"3593:5:69"},"nativeSrc":"3593:25:69","nodeType":"YulFunctionCall","src":"3593:25:69"},"variables":[{"name":"offset","nativeSrc":"3583:6:69","nodeType":"YulTypedName","src":"3583:6:69","type":""}]},{"body":{"nativeSrc":"3665:83:69","nodeType":"YulBlock","src":"3665:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"3667:77:69","nodeType":"YulIdentifier","src":"3667:77:69"},"nativeSrc":"3667:79:69","nodeType":"YulFunctionCall","src":"3667:79:69"},"nativeSrc":"3667:79:69","nodeType":"YulExpressionStatement","src":"3667:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"3637:6:69","nodeType":"YulIdentifier","src":"3637:6:69"},{"kind":"number","nativeSrc":"3645:18:69","nodeType":"YulLiteral","src":"3645:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"3634:2:69","nodeType":"YulIdentifier","src":"3634:2:69"},"nativeSrc":"3634:30:69","nodeType":"YulFunctionCall","src":"3634:30:69"},"nativeSrc":"3631:117:69","nodeType":"YulIf","src":"3631:117:69"},{"nativeSrc":"3762:83:69","nodeType":"YulAssignment","src":"3762:83:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3817:9:69","nodeType":"YulIdentifier","src":"3817:9:69"},{"name":"offset","nativeSrc":"3828:6:69","nodeType":"YulIdentifier","src":"3828:6:69"}],"functionName":{"name":"add","nativeSrc":"3813:3:69","nodeType":"YulIdentifier","src":"3813:3:69"},"nativeSrc":"3813:22:69","nodeType":"YulFunctionCall","src":"3813:22:69"},{"name":"dataEnd","nativeSrc":"3837:7:69","nodeType":"YulIdentifier","src":"3837:7:69"}],"functionName":{"name":"abi_decode_t_bytes_memory_ptr_fromMemory","nativeSrc":"3772:40:69","nodeType":"YulIdentifier","src":"3772:40:69"},"nativeSrc":"3772:73:69","nodeType":"YulFunctionCall","src":"3772:73:69"},"variableNames":[{"name":"value1","nativeSrc":"3762:6:69","nodeType":"YulIdentifier","src":"3762:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory","nativeSrc":"3184:678:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3249:9:69","nodeType":"YulTypedName","src":"3249:9:69","type":""},{"name":"dataEnd","nativeSrc":"3260:7:69","nodeType":"YulTypedName","src":"3260:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"3272:6:69","nodeType":"YulTypedName","src":"3272:6:69","type":""},{"name":"value1","nativeSrc":"3280:6:69","nodeType":"YulTypedName","src":"3280:6:69","type":""}],"src":"3184:678:69"},{"body":{"nativeSrc":"3945:274:69","nodeType":"YulBlock","src":"3945:274:69","statements":[{"body":{"nativeSrc":"3991:83:69","nodeType":"YulBlock","src":"3991:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"3993:77:69","nodeType":"YulIdentifier","src":"3993:77:69"},"nativeSrc":"3993:79:69","nodeType":"YulFunctionCall","src":"3993:79:69"},"nativeSrc":"3993:79:69","nodeType":"YulExpressionStatement","src":"3993:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"3966:7:69","nodeType":"YulIdentifier","src":"3966:7:69"},{"name":"headStart","nativeSrc":"3975:9:69","nodeType":"YulIdentifier","src":"3975:9:69"}],"functionName":{"name":"sub","nativeSrc":"3962:3:69","nodeType":"YulIdentifier","src":"3962:3:69"},"nativeSrc":"3962:23:69","nodeType":"YulFunctionCall","src":"3962:23:69"},{"kind":"number","nativeSrc":"3987:2:69","nodeType":"YulLiteral","src":"3987:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"3958:3:69","nodeType":"YulIdentifier","src":"3958:3:69"},"nativeSrc":"3958:32:69","nodeType":"YulFunctionCall","src":"3958:32:69"},"nativeSrc":"3955:119:69","nodeType":"YulIf","src":"3955:119:69"},{"nativeSrc":"4084:128:69","nodeType":"YulBlock","src":"4084:128:69","statements":[{"nativeSrc":"4099:15:69","nodeType":"YulVariableDeclaration","src":"4099:15:69","value":{"kind":"number","nativeSrc":"4113:1:69","nodeType":"YulLiteral","src":"4113:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"4103:6:69","nodeType":"YulTypedName","src":"4103:6:69","type":""}]},{"nativeSrc":"4128:74:69","nodeType":"YulAssignment","src":"4128:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4174:9:69","nodeType":"YulIdentifier","src":"4174:9:69"},{"name":"offset","nativeSrc":"4185:6:69","nodeType":"YulIdentifier","src":"4185:6:69"}],"functionName":{"name":"add","nativeSrc":"4170:3:69","nodeType":"YulIdentifier","src":"4170:3:69"},"nativeSrc":"4170:22:69","nodeType":"YulFunctionCall","src":"4170:22:69"},{"name":"dataEnd","nativeSrc":"4194:7:69","nodeType":"YulIdentifier","src":"4194:7:69"}],"functionName":{"name":"abi_decode_t_address_fromMemory","nativeSrc":"4138:31:69","nodeType":"YulIdentifier","src":"4138:31:69"},"nativeSrc":"4138:64:69","nodeType":"YulFunctionCall","src":"4138:64:69"},"variableNames":[{"name":"value0","nativeSrc":"4128:6:69","nodeType":"YulIdentifier","src":"4128:6:69"}]}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nativeSrc":"3868:351:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3915:9:69","nodeType":"YulTypedName","src":"3915:9:69","type":""},{"name":"dataEnd","nativeSrc":"3926:7:69","nodeType":"YulTypedName","src":"3926:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"3938:6:69","nodeType":"YulTypedName","src":"3938:6:69","type":""}],"src":"3868:351:69"},{"body":{"nativeSrc":"4321:73:69","nodeType":"YulBlock","src":"4321:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"4338:3:69","nodeType":"YulIdentifier","src":"4338:3:69"},{"name":"length","nativeSrc":"4343:6:69","nodeType":"YulIdentifier","src":"4343:6:69"}],"functionName":{"name":"mstore","nativeSrc":"4331:6:69","nodeType":"YulIdentifier","src":"4331:6:69"},"nativeSrc":"4331:19:69","nodeType":"YulFunctionCall","src":"4331:19:69"},"nativeSrc":"4331:19:69","nodeType":"YulExpressionStatement","src":"4331:19:69"},{"nativeSrc":"4359:29:69","nodeType":"YulAssignment","src":"4359:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"4378:3:69","nodeType":"YulIdentifier","src":"4378:3:69"},{"kind":"number","nativeSrc":"4383:4:69","nodeType":"YulLiteral","src":"4383:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4374:3:69","nodeType":"YulIdentifier","src":"4374:3:69"},"nativeSrc":"4374:14:69","nodeType":"YulFunctionCall","src":"4374:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"4359:11:69","nodeType":"YulIdentifier","src":"4359:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"4225:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"4293:3:69","nodeType":"YulTypedName","src":"4293:3:69","type":""},{"name":"length","nativeSrc":"4298:6:69","nodeType":"YulTypedName","src":"4298:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"4309:11:69","nodeType":"YulTypedName","src":"4309:11:69","type":""}],"src":"4225:169:69"},{"body":{"nativeSrc":"4506:118:69","nodeType":"YulBlock","src":"4506:118:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"4528:6:69","nodeType":"YulIdentifier","src":"4528:6:69"},{"kind":"number","nativeSrc":"4536:1:69","nodeType":"YulLiteral","src":"4536:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4524:3:69","nodeType":"YulIdentifier","src":"4524:3:69"},"nativeSrc":"4524:14:69","nodeType":"YulFunctionCall","src":"4524:14:69"},{"hexValue":"455243313936373a206e657720626561636f6e206973206e6f74206120636f6e","kind":"string","nativeSrc":"4540:34:69","nodeType":"YulLiteral","src":"4540:34:69","type":"","value":"ERC1967: new beacon is not a con"}],"functionName":{"name":"mstore","nativeSrc":"4517:6:69","nodeType":"YulIdentifier","src":"4517:6:69"},"nativeSrc":"4517:58:69","nodeType":"YulFunctionCall","src":"4517:58:69"},"nativeSrc":"4517:58:69","nodeType":"YulExpressionStatement","src":"4517:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"4596:6:69","nodeType":"YulIdentifier","src":"4596:6:69"},{"kind":"number","nativeSrc":"4604:2:69","nodeType":"YulLiteral","src":"4604:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4592:3:69","nodeType":"YulIdentifier","src":"4592:3:69"},"nativeSrc":"4592:15:69","nodeType":"YulFunctionCall","src":"4592:15:69"},{"hexValue":"7472616374","kind":"string","nativeSrc":"4609:7:69","nodeType":"YulLiteral","src":"4609:7:69","type":"","value":"tract"}],"functionName":{"name":"mstore","nativeSrc":"4585:6:69","nodeType":"YulIdentifier","src":"4585:6:69"},"nativeSrc":"4585:32:69","nodeType":"YulFunctionCall","src":"4585:32:69"},"nativeSrc":"4585:32:69","nodeType":"YulExpressionStatement","src":"4585:32:69"}]},"name":"store_literal_in_memory_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470","nativeSrc":"4400:224:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"4498:6:69","nodeType":"YulTypedName","src":"4498:6:69","type":""}],"src":"4400:224:69"},{"body":{"nativeSrc":"4776:220:69","nodeType":"YulBlock","src":"4776:220:69","statements":[{"nativeSrc":"4786:74:69","nodeType":"YulAssignment","src":"4786:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"4852:3:69","nodeType":"YulIdentifier","src":"4852:3:69"},{"kind":"number","nativeSrc":"4857:2:69","nodeType":"YulLiteral","src":"4857:2:69","type":"","value":"37"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"4793:58:69","nodeType":"YulIdentifier","src":"4793:58:69"},"nativeSrc":"4793:67:69","nodeType":"YulFunctionCall","src":"4793:67:69"},"variableNames":[{"name":"pos","nativeSrc":"4786:3:69","nodeType":"YulIdentifier","src":"4786:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"4958:3:69","nodeType":"YulIdentifier","src":"4958:3:69"}],"functionName":{"name":"store_literal_in_memory_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470","nativeSrc":"4869:88:69","nodeType":"YulIdentifier","src":"4869:88:69"},"nativeSrc":"4869:93:69","nodeType":"YulFunctionCall","src":"4869:93:69"},"nativeSrc":"4869:93:69","nodeType":"YulExpressionStatement","src":"4869:93:69"},{"nativeSrc":"4971:19:69","nodeType":"YulAssignment","src":"4971:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"4982:3:69","nodeType":"YulIdentifier","src":"4982:3:69"},{"kind":"number","nativeSrc":"4987:2:69","nodeType":"YulLiteral","src":"4987:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"4978:3:69","nodeType":"YulIdentifier","src":"4978:3:69"},"nativeSrc":"4978:12:69","nodeType":"YulFunctionCall","src":"4978:12:69"},"variableNames":[{"name":"end","nativeSrc":"4971:3:69","nodeType":"YulIdentifier","src":"4971:3:69"}]}]},"name":"abi_encode_t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470_to_t_string_memory_ptr_fromStack","nativeSrc":"4630:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"4764:3:69","nodeType":"YulTypedName","src":"4764:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"4772:3:69","nodeType":"YulTypedName","src":"4772:3:69","type":""}],"src":"4630:366:69"},{"body":{"nativeSrc":"5173:248:69","nodeType":"YulBlock","src":"5173:248:69","statements":[{"nativeSrc":"5183:26:69","nodeType":"YulAssignment","src":"5183:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"5195:9:69","nodeType":"YulIdentifier","src":"5195:9:69"},{"kind":"number","nativeSrc":"5206:2:69","nodeType":"YulLiteral","src":"5206:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5191:3:69","nodeType":"YulIdentifier","src":"5191:3:69"},"nativeSrc":"5191:18:69","nodeType":"YulFunctionCall","src":"5191:18:69"},"variableNames":[{"name":"tail","nativeSrc":"5183:4:69","nodeType":"YulIdentifier","src":"5183:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5230:9:69","nodeType":"YulIdentifier","src":"5230:9:69"},{"kind":"number","nativeSrc":"5241:1:69","nodeType":"YulLiteral","src":"5241:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5226:3:69","nodeType":"YulIdentifier","src":"5226:3:69"},"nativeSrc":"5226:17:69","nodeType":"YulFunctionCall","src":"5226:17:69"},{"arguments":[{"name":"tail","nativeSrc":"5249:4:69","nodeType":"YulIdentifier","src":"5249:4:69"},{"name":"headStart","nativeSrc":"5255:9:69","nodeType":"YulIdentifier","src":"5255:9:69"}],"functionName":{"name":"sub","nativeSrc":"5245:3:69","nodeType":"YulIdentifier","src":"5245:3:69"},"nativeSrc":"5245:20:69","nodeType":"YulFunctionCall","src":"5245:20:69"}],"functionName":{"name":"mstore","nativeSrc":"5219:6:69","nodeType":"YulIdentifier","src":"5219:6:69"},"nativeSrc":"5219:47:69","nodeType":"YulFunctionCall","src":"5219:47:69"},"nativeSrc":"5219:47:69","nodeType":"YulExpressionStatement","src":"5219:47:69"},{"nativeSrc":"5275:139:69","nodeType":"YulAssignment","src":"5275:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"5409:4:69","nodeType":"YulIdentifier","src":"5409:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470_to_t_string_memory_ptr_fromStack","nativeSrc":"5283:124:69","nodeType":"YulIdentifier","src":"5283:124:69"},"nativeSrc":"5283:131:69","nodeType":"YulFunctionCall","src":"5283:131:69"},"variableNames":[{"name":"tail","nativeSrc":"5275:4:69","nodeType":"YulIdentifier","src":"5275:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"5002:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5153:9:69","nodeType":"YulTypedName","src":"5153:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"5168:4:69","nodeType":"YulTypedName","src":"5168:4:69","type":""}],"src":"5002:419:69"},{"body":{"nativeSrc":"5533:129:69","nodeType":"YulBlock","src":"5533:129:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"5555:6:69","nodeType":"YulIdentifier","src":"5555:6:69"},{"kind":"number","nativeSrc":"5563:1:69","nodeType":"YulLiteral","src":"5563:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5551:3:69","nodeType":"YulIdentifier","src":"5551:3:69"},"nativeSrc":"5551:14:69","nodeType":"YulFunctionCall","src":"5551:14:69"},{"hexValue":"455243313936373a20626561636f6e20696d706c656d656e746174696f6e2069","kind":"string","nativeSrc":"5567:34:69","nodeType":"YulLiteral","src":"5567:34:69","type":"","value":"ERC1967: beacon implementation i"}],"functionName":{"name":"mstore","nativeSrc":"5544:6:69","nodeType":"YulIdentifier","src":"5544:6:69"},"nativeSrc":"5544:58:69","nodeType":"YulFunctionCall","src":"5544:58:69"},"nativeSrc":"5544:58:69","nodeType":"YulExpressionStatement","src":"5544:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"5623:6:69","nodeType":"YulIdentifier","src":"5623:6:69"},{"kind":"number","nativeSrc":"5631:2:69","nodeType":"YulLiteral","src":"5631:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5619:3:69","nodeType":"YulIdentifier","src":"5619:3:69"},"nativeSrc":"5619:15:69","nodeType":"YulFunctionCall","src":"5619:15:69"},{"hexValue":"73206e6f74206120636f6e7472616374","kind":"string","nativeSrc":"5636:18:69","nodeType":"YulLiteral","src":"5636:18:69","type":"","value":"s not a contract"}],"functionName":{"name":"mstore","nativeSrc":"5612:6:69","nodeType":"YulIdentifier","src":"5612:6:69"},"nativeSrc":"5612:43:69","nodeType":"YulFunctionCall","src":"5612:43:69"},"nativeSrc":"5612:43:69","nodeType":"YulExpressionStatement","src":"5612:43:69"}]},"name":"store_literal_in_memory_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8","nativeSrc":"5427:235:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"5525:6:69","nodeType":"YulTypedName","src":"5525:6:69","type":""}],"src":"5427:235:69"},{"body":{"nativeSrc":"5814:220:69","nodeType":"YulBlock","src":"5814:220:69","statements":[{"nativeSrc":"5824:74:69","nodeType":"YulAssignment","src":"5824:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"5890:3:69","nodeType":"YulIdentifier","src":"5890:3:69"},{"kind":"number","nativeSrc":"5895:2:69","nodeType":"YulLiteral","src":"5895:2:69","type":"","value":"48"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"5831:58:69","nodeType":"YulIdentifier","src":"5831:58:69"},"nativeSrc":"5831:67:69","nodeType":"YulFunctionCall","src":"5831:67:69"},"variableNames":[{"name":"pos","nativeSrc":"5824:3:69","nodeType":"YulIdentifier","src":"5824:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"5996:3:69","nodeType":"YulIdentifier","src":"5996:3:69"}],"functionName":{"name":"store_literal_in_memory_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8","nativeSrc":"5907:88:69","nodeType":"YulIdentifier","src":"5907:88:69"},"nativeSrc":"5907:93:69","nodeType":"YulFunctionCall","src":"5907:93:69"},"nativeSrc":"5907:93:69","nodeType":"YulExpressionStatement","src":"5907:93:69"},{"nativeSrc":"6009:19:69","nodeType":"YulAssignment","src":"6009:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"6020:3:69","nodeType":"YulIdentifier","src":"6020:3:69"},{"kind":"number","nativeSrc":"6025:2:69","nodeType":"YulLiteral","src":"6025:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"6016:3:69","nodeType":"YulIdentifier","src":"6016:3:69"},"nativeSrc":"6016:12:69","nodeType":"YulFunctionCall","src":"6016:12:69"},"variableNames":[{"name":"end","nativeSrc":"6009:3:69","nodeType":"YulIdentifier","src":"6009:3:69"}]}]},"name":"abi_encode_t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8_to_t_string_memory_ptr_fromStack","nativeSrc":"5668:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"5802:3:69","nodeType":"YulTypedName","src":"5802:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"5810:3:69","nodeType":"YulTypedName","src":"5810:3:69","type":""}],"src":"5668:366:69"},{"body":{"nativeSrc":"6211:248:69","nodeType":"YulBlock","src":"6211:248:69","statements":[{"nativeSrc":"6221:26:69","nodeType":"YulAssignment","src":"6221:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"6233:9:69","nodeType":"YulIdentifier","src":"6233:9:69"},{"kind":"number","nativeSrc":"6244:2:69","nodeType":"YulLiteral","src":"6244:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"6229:3:69","nodeType":"YulIdentifier","src":"6229:3:69"},"nativeSrc":"6229:18:69","nodeType":"YulFunctionCall","src":"6229:18:69"},"variableNames":[{"name":"tail","nativeSrc":"6221:4:69","nodeType":"YulIdentifier","src":"6221:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6268:9:69","nodeType":"YulIdentifier","src":"6268:9:69"},{"kind":"number","nativeSrc":"6279:1:69","nodeType":"YulLiteral","src":"6279:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"6264:3:69","nodeType":"YulIdentifier","src":"6264:3:69"},"nativeSrc":"6264:17:69","nodeType":"YulFunctionCall","src":"6264:17:69"},{"arguments":[{"name":"tail","nativeSrc":"6287:4:69","nodeType":"YulIdentifier","src":"6287:4:69"},{"name":"headStart","nativeSrc":"6293:9:69","nodeType":"YulIdentifier","src":"6293:9:69"}],"functionName":{"name":"sub","nativeSrc":"6283:3:69","nodeType":"YulIdentifier","src":"6283:3:69"},"nativeSrc":"6283:20:69","nodeType":"YulFunctionCall","src":"6283:20:69"}],"functionName":{"name":"mstore","nativeSrc":"6257:6:69","nodeType":"YulIdentifier","src":"6257:6:69"},"nativeSrc":"6257:47:69","nodeType":"YulFunctionCall","src":"6257:47:69"},"nativeSrc":"6257:47:69","nodeType":"YulExpressionStatement","src":"6257:47:69"},{"nativeSrc":"6313:139:69","nodeType":"YulAssignment","src":"6313:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"6447:4:69","nodeType":"YulIdentifier","src":"6447:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8_to_t_string_memory_ptr_fromStack","nativeSrc":"6321:124:69","nodeType":"YulIdentifier","src":"6321:124:69"},"nativeSrc":"6321:131:69","nodeType":"YulFunctionCall","src":"6321:131:69"},"variableNames":[{"name":"tail","nativeSrc":"6313:4:69","nodeType":"YulIdentifier","src":"6313:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"6040:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6191:9:69","nodeType":"YulTypedName","src":"6191:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"6206:4:69","nodeType":"YulTypedName","src":"6206:4:69","type":""}],"src":"6040:419:69"},{"body":{"nativeSrc":"6523:40:69","nodeType":"YulBlock","src":"6523:40:69","statements":[{"nativeSrc":"6534:22:69","nodeType":"YulAssignment","src":"6534:22:69","value":{"arguments":[{"name":"value","nativeSrc":"6550:5:69","nodeType":"YulIdentifier","src":"6550:5:69"}],"functionName":{"name":"mload","nativeSrc":"6544:5:69","nodeType":"YulIdentifier","src":"6544:5:69"},"nativeSrc":"6544:12:69","nodeType":"YulFunctionCall","src":"6544:12:69"},"variableNames":[{"name":"length","nativeSrc":"6534:6:69","nodeType":"YulIdentifier","src":"6534:6:69"}]}]},"name":"array_length_t_bytes_memory_ptr","nativeSrc":"6465:98:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"6506:5:69","nodeType":"YulTypedName","src":"6506:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"6516:6:69","nodeType":"YulTypedName","src":"6516:6:69","type":""}],"src":"6465:98:69"},{"body":{"nativeSrc":"6682:34:69","nodeType":"YulBlock","src":"6682:34:69","statements":[{"nativeSrc":"6692:18:69","nodeType":"YulAssignment","src":"6692:18:69","value":{"name":"pos","nativeSrc":"6707:3:69","nodeType":"YulIdentifier","src":"6707:3:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"6692:11:69","nodeType":"YulIdentifier","src":"6692:11:69"}]}]},"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"6569:147:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"6654:3:69","nodeType":"YulTypedName","src":"6654:3:69","type":""},{"name":"length","nativeSrc":"6659:6:69","nodeType":"YulTypedName","src":"6659:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"6670:11:69","nodeType":"YulTypedName","src":"6670:11:69","type":""}],"src":"6569:147:69"},{"body":{"nativeSrc":"6830:278:69","nodeType":"YulBlock","src":"6830:278:69","statements":[{"nativeSrc":"6840:52:69","nodeType":"YulVariableDeclaration","src":"6840:52:69","value":{"arguments":[{"name":"value","nativeSrc":"6886:5:69","nodeType":"YulIdentifier","src":"6886:5:69"}],"functionName":{"name":"array_length_t_bytes_memory_ptr","nativeSrc":"6854:31:69","nodeType":"YulIdentifier","src":"6854:31:69"},"nativeSrc":"6854:38:69","nodeType":"YulFunctionCall","src":"6854:38:69"},"variables":[{"name":"length","nativeSrc":"6844:6:69","nodeType":"YulTypedName","src":"6844:6:69","type":""}]},{"nativeSrc":"6901:95:69","nodeType":"YulAssignment","src":"6901:95:69","value":{"arguments":[{"name":"pos","nativeSrc":"6984:3:69","nodeType":"YulIdentifier","src":"6984:3:69"},{"name":"length","nativeSrc":"6989:6:69","nodeType":"YulIdentifier","src":"6989:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"6908:75:69","nodeType":"YulIdentifier","src":"6908:75:69"},"nativeSrc":"6908:88:69","nodeType":"YulFunctionCall","src":"6908:88:69"},"variableNames":[{"name":"pos","nativeSrc":"6901:3:69","nodeType":"YulIdentifier","src":"6901:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"7044:5:69","nodeType":"YulIdentifier","src":"7044:5:69"},{"kind":"number","nativeSrc":"7051:4:69","nodeType":"YulLiteral","src":"7051:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"7040:3:69","nodeType":"YulIdentifier","src":"7040:3:69"},"nativeSrc":"7040:16:69","nodeType":"YulFunctionCall","src":"7040:16:69"},{"name":"pos","nativeSrc":"7058:3:69","nodeType":"YulIdentifier","src":"7058:3:69"},{"name":"length","nativeSrc":"7063:6:69","nodeType":"YulIdentifier","src":"7063:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"7005:34:69","nodeType":"YulIdentifier","src":"7005:34:69"},"nativeSrc":"7005:65:69","nodeType":"YulFunctionCall","src":"7005:65:69"},"nativeSrc":"7005:65:69","nodeType":"YulExpressionStatement","src":"7005:65:69"},{"nativeSrc":"7079:23:69","nodeType":"YulAssignment","src":"7079:23:69","value":{"arguments":[{"name":"pos","nativeSrc":"7090:3:69","nodeType":"YulIdentifier","src":"7090:3:69"},{"name":"length","nativeSrc":"7095:6:69","nodeType":"YulIdentifier","src":"7095:6:69"}],"functionName":{"name":"add","nativeSrc":"7086:3:69","nodeType":"YulIdentifier","src":"7086:3:69"},"nativeSrc":"7086:16:69","nodeType":"YulFunctionCall","src":"7086:16:69"},"variableNames":[{"name":"end","nativeSrc":"7079:3:69","nodeType":"YulIdentifier","src":"7079:3:69"}]}]},"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"6722:386:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"6811:5:69","nodeType":"YulTypedName","src":"6811:5:69","type":""},{"name":"pos","nativeSrc":"6818:3:69","nodeType":"YulTypedName","src":"6818:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"6826:3:69","nodeType":"YulTypedName","src":"6826:3:69","type":""}],"src":"6722:386:69"},{"body":{"nativeSrc":"7248:137:69","nodeType":"YulBlock","src":"7248:137:69","statements":[{"nativeSrc":"7259:100:69","nodeType":"YulAssignment","src":"7259:100:69","value":{"arguments":[{"name":"value0","nativeSrc":"7346:6:69","nodeType":"YulIdentifier","src":"7346:6:69"},{"name":"pos","nativeSrc":"7355:3:69","nodeType":"YulIdentifier","src":"7355:3:69"}],"functionName":{"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"7266:79:69","nodeType":"YulIdentifier","src":"7266:79:69"},"nativeSrc":"7266:93:69","nodeType":"YulFunctionCall","src":"7266:93:69"},"variableNames":[{"name":"pos","nativeSrc":"7259:3:69","nodeType":"YulIdentifier","src":"7259:3:69"}]},{"nativeSrc":"7369:10:69","nodeType":"YulAssignment","src":"7369:10:69","value":{"name":"pos","nativeSrc":"7376:3:69","nodeType":"YulIdentifier","src":"7376:3:69"},"variableNames":[{"name":"end","nativeSrc":"7369:3:69","nodeType":"YulIdentifier","src":"7369:3:69"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nativeSrc":"7114:271:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"7227:3:69","nodeType":"YulTypedName","src":"7227:3:69","type":""},{"name":"value0","nativeSrc":"7233:6:69","nodeType":"YulTypedName","src":"7233:6:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"7244:3:69","nodeType":"YulTypedName","src":"7244:3:69","type":""}],"src":"7114:271:69"},{"body":{"nativeSrc":"7497:73:69","nodeType":"YulBlock","src":"7497:73:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"7519:6:69","nodeType":"YulIdentifier","src":"7519:6:69"},{"kind":"number","nativeSrc":"7527:1:69","nodeType":"YulLiteral","src":"7527:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"7515:3:69","nodeType":"YulIdentifier","src":"7515:3:69"},"nativeSrc":"7515:14:69","nodeType":"YulFunctionCall","src":"7515:14:69"},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","kind":"string","nativeSrc":"7531:31:69","nodeType":"YulLiteral","src":"7531:31:69","type":"","value":"Address: call to non-contract"}],"functionName":{"name":"mstore","nativeSrc":"7508:6:69","nodeType":"YulIdentifier","src":"7508:6:69"},"nativeSrc":"7508:55:69","nodeType":"YulFunctionCall","src":"7508:55:69"},"nativeSrc":"7508:55:69","nodeType":"YulExpressionStatement","src":"7508:55:69"}]},"name":"store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","nativeSrc":"7391:179:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"7489:6:69","nodeType":"YulTypedName","src":"7489:6:69","type":""}],"src":"7391:179:69"},{"body":{"nativeSrc":"7722:220:69","nodeType":"YulBlock","src":"7722:220:69","statements":[{"nativeSrc":"7732:74:69","nodeType":"YulAssignment","src":"7732:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"7798:3:69","nodeType":"YulIdentifier","src":"7798:3:69"},{"kind":"number","nativeSrc":"7803:2:69","nodeType":"YulLiteral","src":"7803:2:69","type":"","value":"29"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"7739:58:69","nodeType":"YulIdentifier","src":"7739:58:69"},"nativeSrc":"7739:67:69","nodeType":"YulFunctionCall","src":"7739:67:69"},"variableNames":[{"name":"pos","nativeSrc":"7732:3:69","nodeType":"YulIdentifier","src":"7732:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"7904:3:69","nodeType":"YulIdentifier","src":"7904:3:69"}],"functionName":{"name":"store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","nativeSrc":"7815:88:69","nodeType":"YulIdentifier","src":"7815:88:69"},"nativeSrc":"7815:93:69","nodeType":"YulFunctionCall","src":"7815:93:69"},"nativeSrc":"7815:93:69","nodeType":"YulExpressionStatement","src":"7815:93:69"},{"nativeSrc":"7917:19:69","nodeType":"YulAssignment","src":"7917:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"7928:3:69","nodeType":"YulIdentifier","src":"7928:3:69"},{"kind":"number","nativeSrc":"7933:2:69","nodeType":"YulLiteral","src":"7933:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7924:3:69","nodeType":"YulIdentifier","src":"7924:3:69"},"nativeSrc":"7924:12:69","nodeType":"YulFunctionCall","src":"7924:12:69"},"variableNames":[{"name":"end","nativeSrc":"7917:3:69","nodeType":"YulIdentifier","src":"7917:3:69"}]}]},"name":"abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack","nativeSrc":"7576:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"7710:3:69","nodeType":"YulTypedName","src":"7710:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"7718:3:69","nodeType":"YulTypedName","src":"7718:3:69","type":""}],"src":"7576:366:69"},{"body":{"nativeSrc":"8119:248:69","nodeType":"YulBlock","src":"8119:248:69","statements":[{"nativeSrc":"8129:26:69","nodeType":"YulAssignment","src":"8129:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"8141:9:69","nodeType":"YulIdentifier","src":"8141:9:69"},{"kind":"number","nativeSrc":"8152:2:69","nodeType":"YulLiteral","src":"8152:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8137:3:69","nodeType":"YulIdentifier","src":"8137:3:69"},"nativeSrc":"8137:18:69","nodeType":"YulFunctionCall","src":"8137:18:69"},"variableNames":[{"name":"tail","nativeSrc":"8129:4:69","nodeType":"YulIdentifier","src":"8129:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8176:9:69","nodeType":"YulIdentifier","src":"8176:9:69"},{"kind":"number","nativeSrc":"8187:1:69","nodeType":"YulLiteral","src":"8187:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"8172:3:69","nodeType":"YulIdentifier","src":"8172:3:69"},"nativeSrc":"8172:17:69","nodeType":"YulFunctionCall","src":"8172:17:69"},{"arguments":[{"name":"tail","nativeSrc":"8195:4:69","nodeType":"YulIdentifier","src":"8195:4:69"},{"name":"headStart","nativeSrc":"8201:9:69","nodeType":"YulIdentifier","src":"8201:9:69"}],"functionName":{"name":"sub","nativeSrc":"8191:3:69","nodeType":"YulIdentifier","src":"8191:3:69"},"nativeSrc":"8191:20:69","nodeType":"YulFunctionCall","src":"8191:20:69"}],"functionName":{"name":"mstore","nativeSrc":"8165:6:69","nodeType":"YulIdentifier","src":"8165:6:69"},"nativeSrc":"8165:47:69","nodeType":"YulFunctionCall","src":"8165:47:69"},"nativeSrc":"8165:47:69","nodeType":"YulExpressionStatement","src":"8165:47:69"},{"nativeSrc":"8221:139:69","nodeType":"YulAssignment","src":"8221:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"8355:4:69","nodeType":"YulIdentifier","src":"8355:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack","nativeSrc":"8229:124:69","nodeType":"YulIdentifier","src":"8229:124:69"},"nativeSrc":"8229:131:69","nodeType":"YulFunctionCall","src":"8229:131:69"},"variableNames":[{"name":"tail","nativeSrc":"8221:4:69","nodeType":"YulIdentifier","src":"8221:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"7948:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8099:9:69","nodeType":"YulTypedName","src":"8099:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"8114:4:69","nodeType":"YulTypedName","src":"8114:4:69","type":""}],"src":"7948:419:69"},{"body":{"nativeSrc":"8432:40:69","nodeType":"YulBlock","src":"8432:40:69","statements":[{"nativeSrc":"8443:22:69","nodeType":"YulAssignment","src":"8443:22:69","value":{"arguments":[{"name":"value","nativeSrc":"8459:5:69","nodeType":"YulIdentifier","src":"8459:5:69"}],"functionName":{"name":"mload","nativeSrc":"8453:5:69","nodeType":"YulIdentifier","src":"8453:5:69"},"nativeSrc":"8453:12:69","nodeType":"YulFunctionCall","src":"8453:12:69"},"variableNames":[{"name":"length","nativeSrc":"8443:6:69","nodeType":"YulIdentifier","src":"8443:6:69"}]}]},"name":"array_length_t_string_memory_ptr","nativeSrc":"8373:99:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"8415:5:69","nodeType":"YulTypedName","src":"8415:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"8425:6:69","nodeType":"YulTypedName","src":"8425:6:69","type":""}],"src":"8373:99:69"},{"body":{"nativeSrc":"8570:285:69","nodeType":"YulBlock","src":"8570:285:69","statements":[{"nativeSrc":"8580:53:69","nodeType":"YulVariableDeclaration","src":"8580:53:69","value":{"arguments":[{"name":"value","nativeSrc":"8627:5:69","nodeType":"YulIdentifier","src":"8627:5:69"}],"functionName":{"name":"array_length_t_string_memory_ptr","nativeSrc":"8594:32:69","nodeType":"YulIdentifier","src":"8594:32:69"},"nativeSrc":"8594:39:69","nodeType":"YulFunctionCall","src":"8594:39:69"},"variables":[{"name":"length","nativeSrc":"8584:6:69","nodeType":"YulTypedName","src":"8584:6:69","type":""}]},{"nativeSrc":"8642:78:69","nodeType":"YulAssignment","src":"8642:78:69","value":{"arguments":[{"name":"pos","nativeSrc":"8708:3:69","nodeType":"YulIdentifier","src":"8708:3:69"},{"name":"length","nativeSrc":"8713:6:69","nodeType":"YulIdentifier","src":"8713:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"8649:58:69","nodeType":"YulIdentifier","src":"8649:58:69"},"nativeSrc":"8649:71:69","nodeType":"YulFunctionCall","src":"8649:71:69"},"variableNames":[{"name":"pos","nativeSrc":"8642:3:69","nodeType":"YulIdentifier","src":"8642:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"8768:5:69","nodeType":"YulIdentifier","src":"8768:5:69"},{"kind":"number","nativeSrc":"8775:4:69","nodeType":"YulLiteral","src":"8775:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"8764:3:69","nodeType":"YulIdentifier","src":"8764:3:69"},"nativeSrc":"8764:16:69","nodeType":"YulFunctionCall","src":"8764:16:69"},{"name":"pos","nativeSrc":"8782:3:69","nodeType":"YulIdentifier","src":"8782:3:69"},{"name":"length","nativeSrc":"8787:6:69","nodeType":"YulIdentifier","src":"8787:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"8729:34:69","nodeType":"YulIdentifier","src":"8729:34:69"},"nativeSrc":"8729:65:69","nodeType":"YulFunctionCall","src":"8729:65:69"},"nativeSrc":"8729:65:69","nodeType":"YulExpressionStatement","src":"8729:65:69"},{"nativeSrc":"8803:46:69","nodeType":"YulAssignment","src":"8803:46:69","value":{"arguments":[{"name":"pos","nativeSrc":"8814:3:69","nodeType":"YulIdentifier","src":"8814:3:69"},{"arguments":[{"name":"length","nativeSrc":"8841:6:69","nodeType":"YulIdentifier","src":"8841:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"8819:21:69","nodeType":"YulIdentifier","src":"8819:21:69"},"nativeSrc":"8819:29:69","nodeType":"YulFunctionCall","src":"8819:29:69"}],"functionName":{"name":"add","nativeSrc":"8810:3:69","nodeType":"YulIdentifier","src":"8810:3:69"},"nativeSrc":"8810:39:69","nodeType":"YulFunctionCall","src":"8810:39:69"},"variableNames":[{"name":"end","nativeSrc":"8803:3:69","nodeType":"YulIdentifier","src":"8803:3:69"}]}]},"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"8478:377:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"8551:5:69","nodeType":"YulTypedName","src":"8551:5:69","type":""},{"name":"pos","nativeSrc":"8558:3:69","nodeType":"YulTypedName","src":"8558:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"8566:3:69","nodeType":"YulTypedName","src":"8566:3:69","type":""}],"src":"8478:377:69"},{"body":{"nativeSrc":"8979:195:69","nodeType":"YulBlock","src":"8979:195:69","statements":[{"nativeSrc":"8989:26:69","nodeType":"YulAssignment","src":"8989:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"9001:9:69","nodeType":"YulIdentifier","src":"9001:9:69"},{"kind":"number","nativeSrc":"9012:2:69","nodeType":"YulLiteral","src":"9012:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8997:3:69","nodeType":"YulIdentifier","src":"8997:3:69"},"nativeSrc":"8997:18:69","nodeType":"YulFunctionCall","src":"8997:18:69"},"variableNames":[{"name":"tail","nativeSrc":"8989:4:69","nodeType":"YulIdentifier","src":"8989:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"9036:9:69","nodeType":"YulIdentifier","src":"9036:9:69"},{"kind":"number","nativeSrc":"9047:1:69","nodeType":"YulLiteral","src":"9047:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"9032:3:69","nodeType":"YulIdentifier","src":"9032:3:69"},"nativeSrc":"9032:17:69","nodeType":"YulFunctionCall","src":"9032:17:69"},{"arguments":[{"name":"tail","nativeSrc":"9055:4:69","nodeType":"YulIdentifier","src":"9055:4:69"},{"name":"headStart","nativeSrc":"9061:9:69","nodeType":"YulIdentifier","src":"9061:9:69"}],"functionName":{"name":"sub","nativeSrc":"9051:3:69","nodeType":"YulIdentifier","src":"9051:3:69"},"nativeSrc":"9051:20:69","nodeType":"YulFunctionCall","src":"9051:20:69"}],"functionName":{"name":"mstore","nativeSrc":"9025:6:69","nodeType":"YulIdentifier","src":"9025:6:69"},"nativeSrc":"9025:47:69","nodeType":"YulFunctionCall","src":"9025:47:69"},"nativeSrc":"9025:47:69","nodeType":"YulExpressionStatement","src":"9025:47:69"},{"nativeSrc":"9081:86:69","nodeType":"YulAssignment","src":"9081:86:69","value":{"arguments":[{"name":"value0","nativeSrc":"9153:6:69","nodeType":"YulIdentifier","src":"9153:6:69"},{"name":"tail","nativeSrc":"9162:4:69","nodeType":"YulIdentifier","src":"9162:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"9089:63:69","nodeType":"YulIdentifier","src":"9089:63:69"},"nativeSrc":"9089:78:69","nodeType":"YulFunctionCall","src":"9089:78:69"},"variableNames":[{"name":"tail","nativeSrc":"9081:4:69","nodeType":"YulIdentifier","src":"9081:4:69"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"8861:313:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8951:9:69","nodeType":"YulTypedName","src":"8951:9:69","type":""},{"name":"value0","nativeSrc":"8963:6:69","nodeType":"YulTypedName","src":"8963:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"8974:4:69","nodeType":"YulTypedName","src":"8974:4:69","type":""}],"src":"8861:313:69"}]},"contents":"{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n        revert(0, 0)\n    }\n\n    function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n        revert(0, 0)\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    function panic_error_0x41() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n\n    function finalize_allocation(memPtr, size) {\n        let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n        // protect against overflow\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n\n    function allocate_memory(size) -> memPtr {\n        memPtr := allocate_unbounded()\n        finalize_allocation(memPtr, size)\n    }\n\n    function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n        // Make sure we can allocate memory without overflow\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n        size := round_up_to_mul_of_32(length)\n\n        // add length slot\n        size := add(size, 0x20)\n\n    }\n\n    function copy_memory_to_memory_with_cleanup(src, dst, length) {\n\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n\n    }\n\n    function abi_decode_available_length_t_bytes_memory_ptr_fromMemory(src, length, end) -> array {\n        array := allocate_memory(array_allocation_size_t_bytes_memory_ptr(length))\n        mstore(array, length)\n        let dst := add(array, 0x20)\n        if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n        copy_memory_to_memory_with_cleanup(src, dst, length)\n    }\n\n    // bytes\n    function abi_decode_t_bytes_memory_ptr_fromMemory(offset, end) -> array {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        let length := mload(offset)\n        array := abi_decode_available_length_t_bytes_memory_ptr_fromMemory(add(offset, 0x20), length, end)\n    }\n\n    function abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := mload(add(headStart, 32))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value1 := abi_decode_t_bytes_memory_ptr_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function store_literal_in_memory_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC1967: new beacon is not a con\")\n\n        mstore(add(memPtr, 32), \"tract\")\n\n    }\n\n    function abi_encode_t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 37)\n        store_literal_in_memory_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC1967: beacon implementation i\")\n\n        mstore(add(memPtr, 32), \"s not a contract\")\n\n    }\n\n    function abi_encode_t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 48)\n        store_literal_in_memory_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function array_length_t_bytes_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n        updated_pos := pos\n    }\n\n    function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n        let length := array_length_t_bytes_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, length)\n    }\n\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n        pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0,  pos)\n\n        end := pos\n    }\n\n    function store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad(memPtr) {\n\n        mstore(add(memPtr, 0), \"Address: call to non-contract\")\n\n    }\n\n    function abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 29)\n        store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function array_length_t_string_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n        let length := array_length_t_string_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0,  tail)\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60806040526040516107ea3803806107ea8339810160408190526100229161045d565b61002e82826000610035565b505061063a565b61003e836100f6565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100f1576100ef836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e991906104b4565b836101f7565b505b505050565b6001600160a01b0381163b6101265760405162461bcd60e51b815260040161011d9061051a565b60405180910390fd5b61019a816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610167573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061018b91906104b4565b6001600160a01b03163b151590565b6101b65760405162461bcd60e51b815260040161011d90610577565b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392909216919091179055565b606061021c83836040518060600160405280602781526020016107c360279139610225565b90505b92915050565b6060600080856001600160a01b03168560405161024291906105a9565b600060405180830381855af49150503d806000811461027d576040519150601f19603f3d011682016040523d82523d6000602084013e610282565b606091505b5090925090506102948683838761029e565b9695505050505050565b606083156102dd5782516000036102d6576001600160a01b0385163b6102d65760405162461bcd60e51b815260040161011d906105bc565b50816102e7565b6102e783836102ef565b949350505050565b8151156102ff5781518083602001fd5b8060405162461bcd60e51b815260040161011d9190610629565b60006001600160a01b03821661021f565b61033381610319565b811461033e57600080fd5b50565b805161021f8161032a565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b03821117156103875761038761034c565b6040525050565b600061039960405190565b90506103a58282610362565b919050565b60006001600160401b038211156103c3576103c361034c565b601f19601f83011660200192915050565b60005b838110156103ef5781810151838201526020016103d7565b50506000910152565b600061040b610406846103aa565b61038e565b90508281526020810184848401111561042657610426600080fd5b6104318482856103d4565b509392505050565b600082601f83011261044d5761044d600080fd5b81516102e78482602086016103f8565b6000806040838503121561047357610473600080fd5b600061047f8585610341565b92505060208301516001600160401b0381111561049e5761049e600080fd5b6104aa85828601610439565b9150509250929050565b6000602082840312156104c9576104c9600080fd5b60006102e78484610341565b602581526000602082017f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e8152641d1c9858dd60da1b602082015291505b5060400190565b6020808252810161021f816104d5565b603081526000602082017f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206981526f1cc81b9bdd08184818dbdb9d1c9858dd60821b60208201529150610513565b6020808252810161021f8161052a565b6000610591825190565b61059f8185602086016103d4565b9290920192915050565b60006105b58284610587565b9392505050565b6020808252810161021f81601d81527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000602082015260400190565b6000610601825190565b8084526020840193506106188185602086016103d4565b601f01601f19169290920192915050565b6020808252810161021c81846105f7565b61017a806106496000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610029565b6100c2565b565b600061005c7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100bd919061011b565b905090565b3660008037600080366000845af43d6000803e8080156100e1573d6000f35b3d6000fd5b60006001600160a01b0382165b92915050565b610102816100e6565b811461010d57600080fd5b50565b80516100f3816100f9565b60006020828403121561013057610130600080fd5b600061013c8484610110565b94935050505056fea2646970667358221220a8191d9194d13b48b6d155765300178c7064de2b6ed3cff4b63bd08ebfc1a49864736f6c63430008190033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x7EA CODESIZE SUB DUP1 PUSH2 0x7EA DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x22 SWAP2 PUSH2 0x45D JUMP JUMPDEST PUSH2 0x2E DUP3 DUP3 PUSH1 0x0 PUSH2 0x35 JUMP JUMPDEST POP POP PUSH2 0x63A JUMP JUMPDEST PUSH2 0x3E DUP4 PUSH2 0xF6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH32 0x1CF3B03A6CF19FA2BABA4DF148E9DCABEDEA7F8A5C07840E207E5C089BE95D3E SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x7F JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0xF1 JUMPI PUSH2 0xEF DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5C60DA1B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE9 SWAP2 SWAP1 PUSH2 0x4B4 JUMP JUMPDEST DUP4 PUSH2 0x1F7 JUMP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x126 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11D SWAP1 PUSH2 0x51A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x19A DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5C60DA1B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x167 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18B SWAP2 SWAP1 PUSH2 0x4B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x1B6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11D SWAP1 PUSH2 0x577 JUMP JUMPDEST PUSH32 0xA3F0AD74E5423AEBFD80D3EF4346578335A9A72AEAEE59FF6CB3582B35133D50 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH2 0x21C DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x7C3 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x225 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x242 SWAP2 SWAP1 PUSH2 0x5A9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x27D JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x282 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x294 DUP7 DUP4 DUP4 DUP8 PUSH2 0x29E JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x2DD JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x2D6 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x2D6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11D SWAP1 PUSH2 0x5BC JUMP JUMPDEST POP DUP2 PUSH2 0x2E7 JUMP JUMPDEST PUSH2 0x2E7 DUP4 DUP4 PUSH2 0x2EF JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x2FF JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11D SWAP2 SWAP1 PUSH2 0x629 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x21F JUMP JUMPDEST PUSH2 0x333 DUP2 PUSH2 0x319 JUMP JUMPDEST DUP2 EQ PUSH2 0x33E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x21F DUP2 PUSH2 0x32A JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x387 JUMPI PUSH2 0x387 PUSH2 0x34C JUMP JUMPDEST PUSH1 0x40 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x399 PUSH1 0x40 MLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x3A5 DUP3 DUP3 PUSH2 0x362 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x3C3 JUMPI PUSH2 0x3C3 PUSH2 0x34C JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3EF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3D7 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x40B PUSH2 0x406 DUP5 PUSH2 0x3AA JUMP JUMPDEST PUSH2 0x38E JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x426 JUMPI PUSH2 0x426 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x431 DUP5 DUP3 DUP6 PUSH2 0x3D4 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x44D JUMPI PUSH2 0x44D PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x2E7 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x3F8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x473 JUMPI PUSH2 0x473 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x47F DUP6 DUP6 PUSH2 0x341 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x49E JUMPI PUSH2 0x49E PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4AA DUP6 DUP3 DUP7 ADD PUSH2 0x439 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4C9 JUMPI PUSH2 0x4C9 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2E7 DUP5 DUP5 PUSH2 0x341 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x455243313936373A206E657720626561636F6E206973206E6F74206120636F6E DUP2 MSTORE PUSH5 0x1D1C9858DD PUSH1 0xDA SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x21F DUP2 PUSH2 0x4D5 JUMP JUMPDEST PUSH1 0x30 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x455243313936373A20626561636F6E20696D706C656D656E746174696F6E2069 DUP2 MSTORE PUSH16 0x1CC81B9BDD08184818DBDB9D1C9858DD PUSH1 0x82 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x513 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x21F DUP2 PUSH2 0x52A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x591 DUP3 MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x59F DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x3D4 JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5B5 DUP3 DUP5 PUSH2 0x587 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x21F DUP2 PUSH1 0x1D DUP2 MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x601 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x618 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x3D4 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x21C DUP2 DUP5 PUSH2 0x5F7 JUMP JUMPDEST PUSH2 0x17A DUP1 PUSH2 0x649 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0x13 JUMPI PUSH2 0x11 PUSH2 0x17 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x11 JUMPDEST PUSH2 0x27 PUSH2 0x22 PUSH2 0x29 JUMP JUMPDEST PUSH2 0xC2 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5C PUSH32 0xA3F0AD74E5423AEBFD80D3EF4346578335A9A72AEAEE59FF6CB3582B35133D50 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5C60DA1B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x99 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBD SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0xE1 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x102 DUP2 PUSH2 0xE6 JUMP JUMPDEST DUP2 EQ PUSH2 0x10D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0xF3 DUP2 PUSH2 0xF9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x130 JUMPI PUSH2 0x130 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x13C DUP5 DUP5 PUSH2 0x110 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 NOT SAR SWAP2 SWAP5 0xD1 EXTCODESIZE BASEFEE 0xB6 0xD1 SSTORE PUSH23 0x5300178C7064DE2B6ED3CFF4B63BD08EBFC1A49864736F PUSH13 0x63430008190033416464726573 PUSH20 0x3A206C6F772D6C6576656C2064656C6567617465 KECCAK256 PUSH4 0x616C6C20 PUSH7 0x61696C65640000 ","sourceMap":"580:1515:20:-:0;;;1060:116;;;;;;;;;;;;;;;;;;:::i;:::-;1125:44;1149:6;1157:4;1163:5;1125:23;:44::i;:::-;1060:116;;580:1515;;5728:313:18;5834:21;5845:9;5834:10;:21::i;:::-;5870:25;;-1:-1:-1;;;;;5870:25:18;;;;;;;;5923:1;5909:4;:11;:15;:28;;;;5928:9;5909:28;5905:130;;;5953:71;5990:9;-1:-1:-1;;;;;5982:33:18;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6019:4;5953:28;:71::i;:::-;;5905:130;5728:313;;;:::o;5054:371::-;-1:-1:-1;;;;;1702:19:23;;;5111:79:18;;;;-1:-1:-1;;;5111:79:18;;;;;;;:::i;:::-;;;;;;;;;5221:55;5248:9;-1:-1:-1;;;;;5240:33:18;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1702:19:23;;:23;;;1412:320;5221:55:18;5200:150;;;;-1:-1:-1;;;5200:150:18;;;;;;;:::i;:::-;4719:66;5360:58;;-1:-1:-1;;;;;;5360:58:18;-1:-1:-1;;;;;5360:58:18;;;;;;;;;;5054:371::o;6674:198:23:-;6757:12;6788:77;6809:6;6817:4;6788:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6781:84;;6674:198;;;;;:::o;7058:325::-;7199:12;7224;7238:23;7265:6;-1:-1:-1;;;;;7265:19:23;7285:4;7265:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7223:67:23;;-1:-1:-1;7223:67:23;-1:-1:-1;7307:69:23;7334:6;7223:67;;7363:12;7307:26;:69::i;:::-;7300:76;7058:325;-1:-1:-1;;;;;;7058:325:23:o;7671:628::-;7851:12;7879:7;7875:418;;;7906:10;:17;7927:1;7906:22;7902:286;;-1:-1:-1;;;;;1702:19:23;;;8113:60;;;;-1:-1:-1;;;8113:60:23;;;;;;;:::i;:::-;-1:-1:-1;8208:10:23;8201:17;;7875:418;8249:33;8257:10;8269:12;8249:7;:33::i;:::-;7671:628;;;;;;:::o;8821:540::-;8980:17;;:21;8976:379;;9208:10;9202:17;9264:15;9251:10;9247:2;9243:19;9236:44;8976:379;9331:12;9324:20;;-1:-1:-1;;;9324:20:23;;;;;;;;:::i;466:96:69:-;503:7;-1:-1:-1;;;;;400:54:69;;532:24;334:126;568:122;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;778:13;;800:33;778:13;800:33;:::i;1199:180::-;-1:-1:-1;;;1244:1:69;1237:88;1344:4;1341:1;1334:15;1368:4;1365:1;1358:15;1385:281;-1:-1:-1;;1183:2:69;1163:14;;1159:28;1460:6;1456:40;1598:6;1586:10;1583:22;-1:-1:-1;;;;;1550:10:69;1547:34;1544:62;1541:88;;;1609:18;;:::i;:::-;1645:2;1638:22;-1:-1:-1;;1385:281:69:o;1672:129::-;1706:6;1733:20;73:2;67:9;;7:75;1733:20;1723:30;;1762:33;1790:4;1782:6;1762:33;:::i;:::-;1672:129;;;:::o;1807:307::-;1868:4;-1:-1:-1;;;;;1950:6:69;1947:30;1944:56;;;1980:18;;:::i;:::-;-1:-1:-1;;1183:2:69;1163:14;;1159:28;2102:4;2092:15;;1807:307;-1:-1:-1;;1807:307:69:o;2120:248::-;2202:1;2212:113;2226:6;2223:1;2220:13;2212:113;;;2302:11;;;2296:18;2283:11;;;2276:39;2248:2;2241:10;2212:113;;;-1:-1:-1;;2359:1:69;2341:16;;2334:27;2120:248::o;2374:432::-;2462:5;2487:65;2503:48;2544:6;2503:48;:::i;:::-;2487:65;:::i;:::-;2478:74;;2575:6;2568:5;2561:21;2613:4;2606:5;2602:16;2651:3;2642:6;2637:3;2633:16;2630:25;2627:112;;;2658:79;197:1;194;187:12;2658:79;2748:52;2793:6;2788:3;2783;2748:52;:::i;:::-;2468:338;2374:432;;;;;:::o;2825:353::-;2891:5;2940:3;2933:4;2925:6;2921:17;2917:27;2907:122;;2948:79;197:1;194;187:12;2948:79;3058:6;3052:13;3083:89;3168:3;3160:6;3153:4;3145:6;3141:17;3083:89;:::i;3184:678::-;3272:6;3280;3329:2;3317:9;3308:7;3304:23;3300:32;3297:119;;;3335:79;197:1;194;187:12;3335:79;3455:1;3480:64;3536:7;3516:9;3480:64;:::i;:::-;3470:74;;3426:128;3614:2;3603:9;3599:18;3593:25;-1:-1:-1;;;;;3637:6:69;3634:30;3631:117;;;3667:79;197:1;194;187:12;3667:79;3772:73;3837:7;3828:6;3817:9;3813:22;3772:73;:::i;:::-;3762:83;;3564:291;3184:678;;;;;:::o;3868:351::-;3938:6;3987:2;3975:9;3966:7;3962:23;3958:32;3955:119;;;3993:79;197:1;194;187:12;3993:79;4113:1;4138:64;4194:7;4174:9;4138:64;:::i;4630:366::-;4857:2;4331:19;;4772:3;4383:4;4374:14;;4540:34;4517:58;;-1:-1:-1;;;4604:2:69;4592:15;;4585:32;4786:74;-1:-1:-1;4869:93:69;-1:-1:-1;4987:2:69;4978:12;;4630:366::o;5002:419::-;5206:2;5219:47;;;5191:18;;5283:131;5191:18;5283:131;:::i;5668:366::-;5895:2;4331:19;;5810:3;4383:4;4374:14;;5567:34;5544:58;;-1:-1:-1;;;5631:2:69;5619:15;;5612:43;5824:74;-1:-1:-1;5907:93:69;5427:235;6040:419;6244:2;6257:47;;;6229:18;;6321:131;6229:18;6321:131;:::i;6722:386::-;6826:3;6854:38;6886:5;6544:12;;6465:98;6854:38;7005:65;7063:6;7058:3;7051:4;7044:5;7040:16;7005:65;:::i;:::-;7086:16;;;;;6722:386;-1:-1:-1;;6722:386:69:o;7114:271::-;7244:3;7266:93;7355:3;7346:6;7266:93;:::i;:::-;7259:100;7114:271;-1:-1:-1;;;7114:271:69:o;7948:419::-;8152:2;8165:47;;;8137:18;;8229:131;8137:18;7803:2;4331:19;;7531:31;4383:4;4374:14;;7508:55;7924:12;;;7576:366;8478:377;8566:3;8594:39;8627:5;6544:12;;6465:98;8594:39;4331:19;;;4383:4;4374:14;;8642:78;;8729:65;8787:6;8782:3;8775:4;8768:5;8764:16;8729:65;:::i;:::-;1183:2;1163:14;-1:-1:-1;;1159:28:69;8810:39;;;;;;-1:-1:-1;;8478:377:69:o;8861:313::-;9012:2;9025:47;;;8997:18;;9089:78;8997:18;9153:6;9089:78;:::i;8861:313::-;580:1515:20;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_4246":{"entryPoint":null,"id":4246,"parameterSlots":0,"returnSlots":0},"@_4254":{"entryPoint":null,"id":4254,"parameterSlots":0,"returnSlots":0},"@_beforeFallback_4259":{"entryPoint":null,"id":4259,"parameterSlots":0,"returnSlots":0},"@_delegate_4219":{"entryPoint":194,"id":4219,"parameterSlots":1,"returnSlots":0},"@_fallback_4238":{"entryPoint":23,"id":4238,"parameterSlots":0,"returnSlots":0},"@_getBeacon_4133":{"entryPoint":null,"id":4133,"parameterSlots":0,"returnSlots":1},"@_implementation_4310":{"entryPoint":41,"id":4310,"parameterSlots":0,"returnSlots":1},"@getAddressSlot_4803":{"entryPoint":null,"id":4803,"parameterSlots":1,"returnSlots":1},"abi_decode_t_address_fromMemory":{"entryPoint":272,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":283,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"cleanup_t_address":{"entryPoint":230,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_t_address":{"entryPoint":249,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:1199:69","nodeType":"YulBlock","src":"0:1199:69","statements":[{"body":{"nativeSrc":"47:35:69","nodeType":"YulBlock","src":"47:35:69","statements":[{"nativeSrc":"57:19:69","nodeType":"YulAssignment","src":"57:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"73:2:69","nodeType":"YulLiteral","src":"73:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"67:5:69","nodeType":"YulIdentifier","src":"67:5:69"},"nativeSrc":"67:9:69","nodeType":"YulFunctionCall","src":"67:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"57:6:69","nodeType":"YulIdentifier","src":"57:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"7:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"40:6:69","nodeType":"YulTypedName","src":"40:6:69","type":""}],"src":"7:75:69"},{"body":{"nativeSrc":"177:28:69","nodeType":"YulBlock","src":"177:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"194:1:69","nodeType":"YulLiteral","src":"194:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"197:1:69","nodeType":"YulLiteral","src":"197:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"187:6:69","nodeType":"YulIdentifier","src":"187:6:69"},"nativeSrc":"187:12:69","nodeType":"YulFunctionCall","src":"187:12:69"},"nativeSrc":"187:12:69","nodeType":"YulExpressionStatement","src":"187:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"88:117:69","nodeType":"YulFunctionDefinition","src":"88:117:69"},{"body":{"nativeSrc":"300:28:69","nodeType":"YulBlock","src":"300:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"317:1:69","nodeType":"YulLiteral","src":"317:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"320:1:69","nodeType":"YulLiteral","src":"320:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},"nativeSrc":"310:12:69","nodeType":"YulFunctionCall","src":"310:12:69"},"nativeSrc":"310:12:69","nodeType":"YulExpressionStatement","src":"310:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"211:117:69","nodeType":"YulFunctionDefinition","src":"211:117:69"},{"body":{"nativeSrc":"379:81:69","nodeType":"YulBlock","src":"379:81:69","statements":[{"nativeSrc":"389:65:69","nodeType":"YulAssignment","src":"389:65:69","value":{"arguments":[{"name":"value","nativeSrc":"404:5:69","nodeType":"YulIdentifier","src":"404:5:69"},{"kind":"number","nativeSrc":"411:42:69","nodeType":"YulLiteral","src":"411:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"400:3:69","nodeType":"YulIdentifier","src":"400:3:69"},"nativeSrc":"400:54:69","nodeType":"YulFunctionCall","src":"400:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"389:7:69","nodeType":"YulIdentifier","src":"389:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"334:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"361:5:69","nodeType":"YulTypedName","src":"361:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"371:7:69","nodeType":"YulTypedName","src":"371:7:69","type":""}],"src":"334:126:69"},{"body":{"nativeSrc":"511:51:69","nodeType":"YulBlock","src":"511:51:69","statements":[{"nativeSrc":"521:35:69","nodeType":"YulAssignment","src":"521:35:69","value":{"arguments":[{"name":"value","nativeSrc":"550:5:69","nodeType":"YulIdentifier","src":"550:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"532:17:69","nodeType":"YulIdentifier","src":"532:17:69"},"nativeSrc":"532:24:69","nodeType":"YulFunctionCall","src":"532:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"521:7:69","nodeType":"YulIdentifier","src":"521:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"466:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"493:5:69","nodeType":"YulTypedName","src":"493:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"503:7:69","nodeType":"YulTypedName","src":"503:7:69","type":""}],"src":"466:96:69"},{"body":{"nativeSrc":"611:79:69","nodeType":"YulBlock","src":"611:79:69","statements":[{"body":{"nativeSrc":"668:16:69","nodeType":"YulBlock","src":"668:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"677:1:69","nodeType":"YulLiteral","src":"677:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"680:1:69","nodeType":"YulLiteral","src":"680:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"670:6:69","nodeType":"YulIdentifier","src":"670:6:69"},"nativeSrc":"670:12:69","nodeType":"YulFunctionCall","src":"670:12:69"},"nativeSrc":"670:12:69","nodeType":"YulExpressionStatement","src":"670:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"634:5:69","nodeType":"YulIdentifier","src":"634:5:69"},{"arguments":[{"name":"value","nativeSrc":"659:5:69","nodeType":"YulIdentifier","src":"659:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"641:17:69","nodeType":"YulIdentifier","src":"641:17:69"},"nativeSrc":"641:24:69","nodeType":"YulFunctionCall","src":"641:24:69"}],"functionName":{"name":"eq","nativeSrc":"631:2:69","nodeType":"YulIdentifier","src":"631:2:69"},"nativeSrc":"631:35:69","nodeType":"YulFunctionCall","src":"631:35:69"}],"functionName":{"name":"iszero","nativeSrc":"624:6:69","nodeType":"YulIdentifier","src":"624:6:69"},"nativeSrc":"624:43:69","nodeType":"YulFunctionCall","src":"624:43:69"},"nativeSrc":"621:63:69","nodeType":"YulIf","src":"621:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"568:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"604:5:69","nodeType":"YulTypedName","src":"604:5:69","type":""}],"src":"568:122:69"},{"body":{"nativeSrc":"759:80:69","nodeType":"YulBlock","src":"759:80:69","statements":[{"nativeSrc":"769:22:69","nodeType":"YulAssignment","src":"769:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"784:6:69","nodeType":"YulIdentifier","src":"784:6:69"}],"functionName":{"name":"mload","nativeSrc":"778:5:69","nodeType":"YulIdentifier","src":"778:5:69"},"nativeSrc":"778:13:69","nodeType":"YulFunctionCall","src":"778:13:69"},"variableNames":[{"name":"value","nativeSrc":"769:5:69","nodeType":"YulIdentifier","src":"769:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"827:5:69","nodeType":"YulIdentifier","src":"827:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"800:26:69","nodeType":"YulIdentifier","src":"800:26:69"},"nativeSrc":"800:33:69","nodeType":"YulFunctionCall","src":"800:33:69"},"nativeSrc":"800:33:69","nodeType":"YulExpressionStatement","src":"800:33:69"}]},"name":"abi_decode_t_address_fromMemory","nativeSrc":"696:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"737:6:69","nodeType":"YulTypedName","src":"737:6:69","type":""},{"name":"end","nativeSrc":"745:3:69","nodeType":"YulTypedName","src":"745:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"753:5:69","nodeType":"YulTypedName","src":"753:5:69","type":""}],"src":"696:143:69"},{"body":{"nativeSrc":"922:274:69","nodeType":"YulBlock","src":"922:274:69","statements":[{"body":{"nativeSrc":"968:83:69","nodeType":"YulBlock","src":"968:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"970:77:69","nodeType":"YulIdentifier","src":"970:77:69"},"nativeSrc":"970:79:69","nodeType":"YulFunctionCall","src":"970:79:69"},"nativeSrc":"970:79:69","nodeType":"YulExpressionStatement","src":"970:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"943:7:69","nodeType":"YulIdentifier","src":"943:7:69"},{"name":"headStart","nativeSrc":"952:9:69","nodeType":"YulIdentifier","src":"952:9:69"}],"functionName":{"name":"sub","nativeSrc":"939:3:69","nodeType":"YulIdentifier","src":"939:3:69"},"nativeSrc":"939:23:69","nodeType":"YulFunctionCall","src":"939:23:69"},{"kind":"number","nativeSrc":"964:2:69","nodeType":"YulLiteral","src":"964:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"935:3:69","nodeType":"YulIdentifier","src":"935:3:69"},"nativeSrc":"935:32:69","nodeType":"YulFunctionCall","src":"935:32:69"},"nativeSrc":"932:119:69","nodeType":"YulIf","src":"932:119:69"},{"nativeSrc":"1061:128:69","nodeType":"YulBlock","src":"1061:128:69","statements":[{"nativeSrc":"1076:15:69","nodeType":"YulVariableDeclaration","src":"1076:15:69","value":{"kind":"number","nativeSrc":"1090:1:69","nodeType":"YulLiteral","src":"1090:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"1080:6:69","nodeType":"YulTypedName","src":"1080:6:69","type":""}]},{"nativeSrc":"1105:74:69","nodeType":"YulAssignment","src":"1105:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1151:9:69","nodeType":"YulIdentifier","src":"1151:9:69"},{"name":"offset","nativeSrc":"1162:6:69","nodeType":"YulIdentifier","src":"1162:6:69"}],"functionName":{"name":"add","nativeSrc":"1147:3:69","nodeType":"YulIdentifier","src":"1147:3:69"},"nativeSrc":"1147:22:69","nodeType":"YulFunctionCall","src":"1147:22:69"},{"name":"dataEnd","nativeSrc":"1171:7:69","nodeType":"YulIdentifier","src":"1171:7:69"}],"functionName":{"name":"abi_decode_t_address_fromMemory","nativeSrc":"1115:31:69","nodeType":"YulIdentifier","src":"1115:31:69"},"nativeSrc":"1115:64:69","nodeType":"YulFunctionCall","src":"1115:64:69"},"variableNames":[{"name":"value0","nativeSrc":"1105:6:69","nodeType":"YulIdentifier","src":"1105:6:69"}]}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nativeSrc":"845:351:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"892:9:69","nodeType":"YulTypedName","src":"892:9:69","type":""},{"name":"dataEnd","nativeSrc":"903:7:69","nodeType":"YulTypedName","src":"903:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"915:6:69","nodeType":"YulTypedName","src":"915:6:69","type":""}],"src":"845:351:69"}]},"contents":"{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"60806040523661001357610011610017565b005b6100115b610027610022610029565b6100c2565b565b600061005c7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100bd919061011b565b905090565b3660008037600080366000845af43d6000803e8080156100e1573d6000f35b3d6000fd5b60006001600160a01b0382165b92915050565b610102816100e6565b811461010d57600080fd5b50565b80516100f3816100f9565b60006020828403121561013057610130600080fd5b600061013c8484610110565b94935050505056fea2646970667358221220a8191d9194d13b48b6d155765300178c7064de2b6ed3cff4b63bd08ebfc1a49864736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0x13 JUMPI PUSH2 0x11 PUSH2 0x17 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x11 JUMPDEST PUSH2 0x27 PUSH2 0x22 PUSH2 0x29 JUMP JUMPDEST PUSH2 0xC2 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5C PUSH32 0xA3F0AD74E5423AEBFD80D3EF4346578335A9A72AEAEE59FF6CB3582B35133D50 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5C60DA1B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x99 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBD SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0xE1 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x102 DUP2 PUSH2 0xE6 JUMP JUMPDEST DUP2 EQ PUSH2 0x10D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0xF3 DUP2 PUSH2 0xF9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x130 JUMPI PUSH2 0x130 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x13C DUP5 DUP5 PUSH2 0x110 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 NOT SAR SWAP2 SWAP5 0xD1 EXTCODESIZE BASEFEE 0xB6 0xD1 SSTORE PUSH23 0x5300178C7064DE2B6ED3CFF4B63BD08EBFC1A49864736F PUSH13 0x63430008190033000000000000 ","sourceMap":"580:1515:20:-:0;;;;;;2898:11:19;:9;:11::i;:::-;580:1515:20;;2675:11:19;2322:110;2397:28;2407:17;:15;:17::i;:::-;2397:9;:28::i;:::-;2322:110::o;1444:138:20:-;1511:7;1545:12;4719:66:18;4919:46;-1:-1:-1;;;;;4919:46:18;;4848:124;1545:12:20;-1:-1:-1;;;;;1537:36:20;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1530:45;;1444:138;:::o;948:895:19:-;1286:14;1283:1;1280;1267:34;1500:1;1497;1481:14;1478:1;1462:14;1455:5;1442:60;1576:16;1573:1;1570;1555:38;1614:6;1681:66;;;;1796:16;1793:1;1786:27;1681:66;1716:16;1713:1;1706:27;466:96:69;503:7;-1:-1:-1;;;;;400:54:69;;532:24;521:35;466:96;-1:-1:-1;;466:96:69:o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;778:13;;800:33;778:13;800:33;:::i;845:351::-;915:6;964:2;952:9;943:7;939:23;935:32;932:119;;;970:79;197:1;194;187:12;970:79;1090:1;1115:64;1171:7;1151:9;1115:64;:::i;:::-;1105:74;845:351;-1:-1:-1;;;;845:351:69:o"},"gasEstimates":{"creation":{"codeDepositCost":"75600","executionCost":"infinite","totalCost":"infinite"},"external":{"":"infinite"},"internal":{"_beacon()":"infinite","_implementation()":"infinite","_setBeacon(address,bytes memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that gets the implementation address for each call from an {UpgradeableBeacon}. The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't conflict with the storage layout of the implementation behind the proxy. _Available since v3.4._\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the proxy with `beacon`. If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - `beacon` must be a contract with the interface {IBeacon}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol\":\"BeaconProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1967.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC1967.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\\n *\\n * _Available since v4.8.3._\\n */\\ninterface IERC1967 {\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Emitted when the admin account has changed.\\n     */\\n    event AdminChanged(address previousAdmin, address newAdmin);\\n\\n    /**\\n     * @dev Emitted when the beacon is changed.\\n     */\\n    event BeaconUpgraded(address indexed beacon);\\n}\\n\",\"keccak256\":\"0x3cbef5ebc24b415252e2f8c0c9254555d30d9f085603b4b80d9b5ed20ab87e90\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/IERC1967.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract ERC1967Upgrade is IERC1967 {\\n    // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n    /**\\n     * @dev Storage slot with the address of the current implementation.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _getImplementation() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 implementation slot.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeTo(address newImplementation) internal {\\n        _setImplementation(newImplementation);\\n        emit Upgraded(newImplementation);\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCall(address newImplementation, bytes memory data, bool forceCall) internal {\\n        _upgradeTo(newImplementation);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(newImplementation, data);\\n        }\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCallUUPS(address newImplementation, bytes memory data, bool forceCall) internal {\\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\\n        if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n            _setImplementation(newImplementation);\\n        } else {\\n            try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n                require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n            } catch {\\n                revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n            }\\n            _upgradeToAndCall(newImplementation, data, forceCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Storage slot with the admin of the contract.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _getAdmin() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 admin slot.\\n     */\\n    function _setAdmin(address newAdmin) private {\\n        require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {AdminChanged} event.\\n     */\\n    function _changeAdmin(address newAdmin) internal {\\n        emit AdminChanged(_getAdmin(), newAdmin);\\n        _setAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n     */\\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n    /**\\n     * @dev Returns the current beacon.\\n     */\\n    function _getBeacon() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\\n     */\\n    function _setBeacon(address newBeacon) private {\\n        require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n        require(\\n            Address.isContract(IBeacon(newBeacon).implementation()),\\n            \\\"ERC1967: beacon implementation is not a contract\\\"\\n        );\\n        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n    }\\n\\n    /**\\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n     *\\n     * Emits a {BeaconUpgraded} event.\\n     */\\n    function _upgradeBeaconToAndCall(address newBeacon, bytes memory data, bool forceCall) internal {\\n        _setBeacon(newBeacon);\\n        emit BeaconUpgraded(newBeacon);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3b21ae06bf5957f73fa16754b0669c77b7abd8ba6c072d35c3281d446fdb86c2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n    /**\\n     * @dev Delegates the current call to `implementation`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _delegate(address implementation) internal virtual {\\n        assembly {\\n            // Copy msg.data. We take full control of memory in this inline assembly\\n            // block because it will not return to Solidity code. We overwrite the\\n            // Solidity scratch pad at memory position 0.\\n            calldatacopy(0, 0, calldatasize())\\n\\n            // Call the implementation.\\n            // out and outsize are 0 because we don't know the size yet.\\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n            // Copy the returned data.\\n            returndatacopy(0, 0, returndatasize())\\n\\n            switch result\\n            // delegatecall returns 0 on error.\\n            case 0 {\\n                revert(0, returndatasize())\\n            }\\n            default {\\n                return(0, returndatasize())\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n     * and {_fallback} should delegate.\\n     */\\n    function _implementation() internal view virtual returns (address);\\n\\n    /**\\n     * @dev Delegates the current call to the address returned by `_implementation()`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _fallback() internal virtual {\\n        _beforeFallback();\\n        _delegate(_implementation());\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n     * function in the contract matches the call data.\\n     */\\n    fallback() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n     * is empty.\\n     */\\n    receive() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n     * call, or as part of the Solidity `fallback` or `receive` functions.\\n     *\\n     * If overridden should call `super._beforeFallback()`.\\n     */\\n    function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from an {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n    /**\\n     * @dev Initializes the proxy with `beacon`.\\n     *\\n     * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n     * will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity\\n     * constructor.\\n     *\\n     * Requirements:\\n     *\\n     * - `beacon` must be a contract with the interface {IBeacon}.\\n     */\\n    constructor(address beacon, bytes memory data) payable {\\n        _upgradeBeaconToAndCall(beacon, data, false);\\n    }\\n\\n    /**\\n     * @dev Returns the current beacon address.\\n     */\\n    function _beacon() internal view virtual returns (address) {\\n        return _getBeacon();\\n    }\\n\\n    /**\\n     * @dev Returns the current implementation address of the associated beacon.\\n     */\\n    function _implementation() internal view virtual override returns (address) {\\n        return IBeacon(_getBeacon()).implementation();\\n    }\\n\\n    /**\\n     * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n     *\\n     * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n     *\\n     * Requirements:\\n     *\\n     * - `beacon` must be a contract.\\n     * - The implementation returned by `beacon` must be a contract.\\n     */\\n    function _setBeacon(address beacon, bytes memory data) internal virtual {\\n        _upgradeBeaconToAndCall(beacon, data, false);\\n    }\\n}\\n\",\"keccak256\":\"0x85439e74ab467b6a23d45d32bdc9506cbc3760320289afd605f11638c4138e95\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {BeaconProxy} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```solidity\\n * contract ERC1967 {\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\n * _Available since v4.9 for `string`, `bytes`._\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    struct StringSlot {\\n        string value;\\n    }\\n\\n    struct BytesSlot {\\n        bytes value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\n     */\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\n     */\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := store.slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\n     */\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\n     */\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := store.slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/proxy/beacon/IBeacon.sol":{"IBeacon":{"abi":[{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"This is the interface that {BeaconProxy} expects of its beacon.","kind":"dev","methods":{"implementation()":{"details":"Must return an address that can be used as a delegate call target. {BeaconProxy} will check that this address is a contract."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"implementation()":"5c60da1b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is the interface that {BeaconProxy} expects of its beacon.\",\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Must return an address that can be used as a delegate call target. {BeaconProxy} will check that this address is a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":\"IBeacon\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {BeaconProxy} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol":{"UpgradeableBeacon":{"abi":[{"inputs":[{"internalType":"address","name":"implementation_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their implementation contract, which is where they will delegate all function calls. An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.","events":{"Upgraded(address)":{"details":"Emitted when the implementation returned by the beacon is changed."}},"kind":"dev","methods":{"constructor":{"details":"Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the beacon."},"implementation()":{"details":"Returns the current implementation address."},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"upgradeTo(address)":{"details":"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_3784":{"entryPoint":null,"id":3784,"parameterSlots":0,"returnSlots":0},"@_4364":{"entryPoint":null,"id":4364,"parameterSlots":1,"returnSlots":0},"@_msgSender_4753":{"entryPoint":null,"id":4753,"parameterSlots":0,"returnSlots":1},"@_setImplementation_4410":{"entryPoint":151,"id":4410,"parameterSlots":1,"returnSlots":0},"@_transferOwnership_3872":{"entryPoint":71,"id":3872,"parameterSlots":1,"returnSlots":0},"@isContract_4429":{"entryPoint":null,"id":4429,"parameterSlots":1,"returnSlots":1},"abi_decode_t_address_fromMemory":{"entryPoint":275,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":286,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6_to_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":327,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_address":{"entryPoint":233,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"store_literal_in_memory_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_address":{"entryPoint":252,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:2415:69","nodeType":"YulBlock","src":"0:2415:69","statements":[{"body":{"nativeSrc":"47:35:69","nodeType":"YulBlock","src":"47:35:69","statements":[{"nativeSrc":"57:19:69","nodeType":"YulAssignment","src":"57:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"73:2:69","nodeType":"YulLiteral","src":"73:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"67:5:69","nodeType":"YulIdentifier","src":"67:5:69"},"nativeSrc":"67:9:69","nodeType":"YulFunctionCall","src":"67:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"57:6:69","nodeType":"YulIdentifier","src":"57:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"7:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"40:6:69","nodeType":"YulTypedName","src":"40:6:69","type":""}],"src":"7:75:69"},{"body":{"nativeSrc":"177:28:69","nodeType":"YulBlock","src":"177:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"194:1:69","nodeType":"YulLiteral","src":"194:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"197:1:69","nodeType":"YulLiteral","src":"197:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"187:6:69","nodeType":"YulIdentifier","src":"187:6:69"},"nativeSrc":"187:12:69","nodeType":"YulFunctionCall","src":"187:12:69"},"nativeSrc":"187:12:69","nodeType":"YulExpressionStatement","src":"187:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"88:117:69","nodeType":"YulFunctionDefinition","src":"88:117:69"},{"body":{"nativeSrc":"300:28:69","nodeType":"YulBlock","src":"300:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"317:1:69","nodeType":"YulLiteral","src":"317:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"320:1:69","nodeType":"YulLiteral","src":"320:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},"nativeSrc":"310:12:69","nodeType":"YulFunctionCall","src":"310:12:69"},"nativeSrc":"310:12:69","nodeType":"YulExpressionStatement","src":"310:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"211:117:69","nodeType":"YulFunctionDefinition","src":"211:117:69"},{"body":{"nativeSrc":"379:81:69","nodeType":"YulBlock","src":"379:81:69","statements":[{"nativeSrc":"389:65:69","nodeType":"YulAssignment","src":"389:65:69","value":{"arguments":[{"name":"value","nativeSrc":"404:5:69","nodeType":"YulIdentifier","src":"404:5:69"},{"kind":"number","nativeSrc":"411:42:69","nodeType":"YulLiteral","src":"411:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"400:3:69","nodeType":"YulIdentifier","src":"400:3:69"},"nativeSrc":"400:54:69","nodeType":"YulFunctionCall","src":"400:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"389:7:69","nodeType":"YulIdentifier","src":"389:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"334:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"361:5:69","nodeType":"YulTypedName","src":"361:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"371:7:69","nodeType":"YulTypedName","src":"371:7:69","type":""}],"src":"334:126:69"},{"body":{"nativeSrc":"511:51:69","nodeType":"YulBlock","src":"511:51:69","statements":[{"nativeSrc":"521:35:69","nodeType":"YulAssignment","src":"521:35:69","value":{"arguments":[{"name":"value","nativeSrc":"550:5:69","nodeType":"YulIdentifier","src":"550:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"532:17:69","nodeType":"YulIdentifier","src":"532:17:69"},"nativeSrc":"532:24:69","nodeType":"YulFunctionCall","src":"532:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"521:7:69","nodeType":"YulIdentifier","src":"521:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"466:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"493:5:69","nodeType":"YulTypedName","src":"493:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"503:7:69","nodeType":"YulTypedName","src":"503:7:69","type":""}],"src":"466:96:69"},{"body":{"nativeSrc":"611:79:69","nodeType":"YulBlock","src":"611:79:69","statements":[{"body":{"nativeSrc":"668:16:69","nodeType":"YulBlock","src":"668:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"677:1:69","nodeType":"YulLiteral","src":"677:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"680:1:69","nodeType":"YulLiteral","src":"680:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"670:6:69","nodeType":"YulIdentifier","src":"670:6:69"},"nativeSrc":"670:12:69","nodeType":"YulFunctionCall","src":"670:12:69"},"nativeSrc":"670:12:69","nodeType":"YulExpressionStatement","src":"670:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"634:5:69","nodeType":"YulIdentifier","src":"634:5:69"},{"arguments":[{"name":"value","nativeSrc":"659:5:69","nodeType":"YulIdentifier","src":"659:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"641:17:69","nodeType":"YulIdentifier","src":"641:17:69"},"nativeSrc":"641:24:69","nodeType":"YulFunctionCall","src":"641:24:69"}],"functionName":{"name":"eq","nativeSrc":"631:2:69","nodeType":"YulIdentifier","src":"631:2:69"},"nativeSrc":"631:35:69","nodeType":"YulFunctionCall","src":"631:35:69"}],"functionName":{"name":"iszero","nativeSrc":"624:6:69","nodeType":"YulIdentifier","src":"624:6:69"},"nativeSrc":"624:43:69","nodeType":"YulFunctionCall","src":"624:43:69"},"nativeSrc":"621:63:69","nodeType":"YulIf","src":"621:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"568:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"604:5:69","nodeType":"YulTypedName","src":"604:5:69","type":""}],"src":"568:122:69"},{"body":{"nativeSrc":"759:80:69","nodeType":"YulBlock","src":"759:80:69","statements":[{"nativeSrc":"769:22:69","nodeType":"YulAssignment","src":"769:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"784:6:69","nodeType":"YulIdentifier","src":"784:6:69"}],"functionName":{"name":"mload","nativeSrc":"778:5:69","nodeType":"YulIdentifier","src":"778:5:69"},"nativeSrc":"778:13:69","nodeType":"YulFunctionCall","src":"778:13:69"},"variableNames":[{"name":"value","nativeSrc":"769:5:69","nodeType":"YulIdentifier","src":"769:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"827:5:69","nodeType":"YulIdentifier","src":"827:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"800:26:69","nodeType":"YulIdentifier","src":"800:26:69"},"nativeSrc":"800:33:69","nodeType":"YulFunctionCall","src":"800:33:69"},"nativeSrc":"800:33:69","nodeType":"YulExpressionStatement","src":"800:33:69"}]},"name":"abi_decode_t_address_fromMemory","nativeSrc":"696:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"737:6:69","nodeType":"YulTypedName","src":"737:6:69","type":""},{"name":"end","nativeSrc":"745:3:69","nodeType":"YulTypedName","src":"745:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"753:5:69","nodeType":"YulTypedName","src":"753:5:69","type":""}],"src":"696:143:69"},{"body":{"nativeSrc":"922:274:69","nodeType":"YulBlock","src":"922:274:69","statements":[{"body":{"nativeSrc":"968:83:69","nodeType":"YulBlock","src":"968:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"970:77:69","nodeType":"YulIdentifier","src":"970:77:69"},"nativeSrc":"970:79:69","nodeType":"YulFunctionCall","src":"970:79:69"},"nativeSrc":"970:79:69","nodeType":"YulExpressionStatement","src":"970:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"943:7:69","nodeType":"YulIdentifier","src":"943:7:69"},{"name":"headStart","nativeSrc":"952:9:69","nodeType":"YulIdentifier","src":"952:9:69"}],"functionName":{"name":"sub","nativeSrc":"939:3:69","nodeType":"YulIdentifier","src":"939:3:69"},"nativeSrc":"939:23:69","nodeType":"YulFunctionCall","src":"939:23:69"},{"kind":"number","nativeSrc":"964:2:69","nodeType":"YulLiteral","src":"964:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"935:3:69","nodeType":"YulIdentifier","src":"935:3:69"},"nativeSrc":"935:32:69","nodeType":"YulFunctionCall","src":"935:32:69"},"nativeSrc":"932:119:69","nodeType":"YulIf","src":"932:119:69"},{"nativeSrc":"1061:128:69","nodeType":"YulBlock","src":"1061:128:69","statements":[{"nativeSrc":"1076:15:69","nodeType":"YulVariableDeclaration","src":"1076:15:69","value":{"kind":"number","nativeSrc":"1090:1:69","nodeType":"YulLiteral","src":"1090:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"1080:6:69","nodeType":"YulTypedName","src":"1080:6:69","type":""}]},{"nativeSrc":"1105:74:69","nodeType":"YulAssignment","src":"1105:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1151:9:69","nodeType":"YulIdentifier","src":"1151:9:69"},{"name":"offset","nativeSrc":"1162:6:69","nodeType":"YulIdentifier","src":"1162:6:69"}],"functionName":{"name":"add","nativeSrc":"1147:3:69","nodeType":"YulIdentifier","src":"1147:3:69"},"nativeSrc":"1147:22:69","nodeType":"YulFunctionCall","src":"1147:22:69"},{"name":"dataEnd","nativeSrc":"1171:7:69","nodeType":"YulIdentifier","src":"1171:7:69"}],"functionName":{"name":"abi_decode_t_address_fromMemory","nativeSrc":"1115:31:69","nodeType":"YulIdentifier","src":"1115:31:69"},"nativeSrc":"1115:64:69","nodeType":"YulFunctionCall","src":"1115:64:69"},"variableNames":[{"name":"value0","nativeSrc":"1105:6:69","nodeType":"YulIdentifier","src":"1105:6:69"}]}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nativeSrc":"845:351:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"892:9:69","nodeType":"YulTypedName","src":"892:9:69","type":""},{"name":"dataEnd","nativeSrc":"903:7:69","nodeType":"YulTypedName","src":"903:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"915:6:69","nodeType":"YulTypedName","src":"915:6:69","type":""}],"src":"845:351:69"},{"body":{"nativeSrc":"1298:73:69","nodeType":"YulBlock","src":"1298:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"1315:3:69","nodeType":"YulIdentifier","src":"1315:3:69"},{"name":"length","nativeSrc":"1320:6:69","nodeType":"YulIdentifier","src":"1320:6:69"}],"functionName":{"name":"mstore","nativeSrc":"1308:6:69","nodeType":"YulIdentifier","src":"1308:6:69"},"nativeSrc":"1308:19:69","nodeType":"YulFunctionCall","src":"1308:19:69"},"nativeSrc":"1308:19:69","nodeType":"YulExpressionStatement","src":"1308:19:69"},{"nativeSrc":"1336:29:69","nodeType":"YulAssignment","src":"1336:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"1355:3:69","nodeType":"YulIdentifier","src":"1355:3:69"},{"kind":"number","nativeSrc":"1360:4:69","nodeType":"YulLiteral","src":"1360:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1351:3:69","nodeType":"YulIdentifier","src":"1351:3:69"},"nativeSrc":"1351:14:69","nodeType":"YulFunctionCall","src":"1351:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"1336:11:69","nodeType":"YulIdentifier","src":"1336:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"1202:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"1270:3:69","nodeType":"YulTypedName","src":"1270:3:69","type":""},{"name":"length","nativeSrc":"1275:6:69","nodeType":"YulTypedName","src":"1275:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"1286:11:69","nodeType":"YulTypedName","src":"1286:11:69","type":""}],"src":"1202:169:69"},{"body":{"nativeSrc":"1483:132:69","nodeType":"YulBlock","src":"1483:132:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"1505:6:69","nodeType":"YulIdentifier","src":"1505:6:69"},{"kind":"number","nativeSrc":"1513:1:69","nodeType":"YulLiteral","src":"1513:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1501:3:69","nodeType":"YulIdentifier","src":"1501:3:69"},"nativeSrc":"1501:14:69","nodeType":"YulFunctionCall","src":"1501:14:69"},{"hexValue":"5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f","kind":"string","nativeSrc":"1517:34:69","nodeType":"YulLiteral","src":"1517:34:69","type":"","value":"UpgradeableBeacon: implementatio"}],"functionName":{"name":"mstore","nativeSrc":"1494:6:69","nodeType":"YulIdentifier","src":"1494:6:69"},"nativeSrc":"1494:58:69","nodeType":"YulFunctionCall","src":"1494:58:69"},"nativeSrc":"1494:58:69","nodeType":"YulExpressionStatement","src":"1494:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"1573:6:69","nodeType":"YulIdentifier","src":"1573:6:69"},{"kind":"number","nativeSrc":"1581:2:69","nodeType":"YulLiteral","src":"1581:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1569:3:69","nodeType":"YulIdentifier","src":"1569:3:69"},"nativeSrc":"1569:15:69","nodeType":"YulFunctionCall","src":"1569:15:69"},{"hexValue":"6e206973206e6f74206120636f6e7472616374","kind":"string","nativeSrc":"1586:21:69","nodeType":"YulLiteral","src":"1586:21:69","type":"","value":"n is not a contract"}],"functionName":{"name":"mstore","nativeSrc":"1562:6:69","nodeType":"YulIdentifier","src":"1562:6:69"},"nativeSrc":"1562:46:69","nodeType":"YulFunctionCall","src":"1562:46:69"},"nativeSrc":"1562:46:69","nodeType":"YulExpressionStatement","src":"1562:46:69"}]},"name":"store_literal_in_memory_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6","nativeSrc":"1377:238:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"1475:6:69","nodeType":"YulTypedName","src":"1475:6:69","type":""}],"src":"1377:238:69"},{"body":{"nativeSrc":"1767:220:69","nodeType":"YulBlock","src":"1767:220:69","statements":[{"nativeSrc":"1777:74:69","nodeType":"YulAssignment","src":"1777:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"1843:3:69","nodeType":"YulIdentifier","src":"1843:3:69"},{"kind":"number","nativeSrc":"1848:2:69","nodeType":"YulLiteral","src":"1848:2:69","type":"","value":"51"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"1784:58:69","nodeType":"YulIdentifier","src":"1784:58:69"},"nativeSrc":"1784:67:69","nodeType":"YulFunctionCall","src":"1784:67:69"},"variableNames":[{"name":"pos","nativeSrc":"1777:3:69","nodeType":"YulIdentifier","src":"1777:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"1949:3:69","nodeType":"YulIdentifier","src":"1949:3:69"}],"functionName":{"name":"store_literal_in_memory_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6","nativeSrc":"1860:88:69","nodeType":"YulIdentifier","src":"1860:88:69"},"nativeSrc":"1860:93:69","nodeType":"YulFunctionCall","src":"1860:93:69"},"nativeSrc":"1860:93:69","nodeType":"YulExpressionStatement","src":"1860:93:69"},{"nativeSrc":"1962:19:69","nodeType":"YulAssignment","src":"1962:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"1973:3:69","nodeType":"YulIdentifier","src":"1973:3:69"},{"kind":"number","nativeSrc":"1978:2:69","nodeType":"YulLiteral","src":"1978:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"1969:3:69","nodeType":"YulIdentifier","src":"1969:3:69"},"nativeSrc":"1969:12:69","nodeType":"YulFunctionCall","src":"1969:12:69"},"variableNames":[{"name":"end","nativeSrc":"1962:3:69","nodeType":"YulIdentifier","src":"1962:3:69"}]}]},"name":"abi_encode_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6_to_t_string_memory_ptr_fromStack","nativeSrc":"1621:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"1755:3:69","nodeType":"YulTypedName","src":"1755:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"1763:3:69","nodeType":"YulTypedName","src":"1763:3:69","type":""}],"src":"1621:366:69"},{"body":{"nativeSrc":"2164:248:69","nodeType":"YulBlock","src":"2164:248:69","statements":[{"nativeSrc":"2174:26:69","nodeType":"YulAssignment","src":"2174:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"2186:9:69","nodeType":"YulIdentifier","src":"2186:9:69"},{"kind":"number","nativeSrc":"2197:2:69","nodeType":"YulLiteral","src":"2197:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2182:3:69","nodeType":"YulIdentifier","src":"2182:3:69"},"nativeSrc":"2182:18:69","nodeType":"YulFunctionCall","src":"2182:18:69"},"variableNames":[{"name":"tail","nativeSrc":"2174:4:69","nodeType":"YulIdentifier","src":"2174:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2221:9:69","nodeType":"YulIdentifier","src":"2221:9:69"},{"kind":"number","nativeSrc":"2232:1:69","nodeType":"YulLiteral","src":"2232:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"2217:3:69","nodeType":"YulIdentifier","src":"2217:3:69"},"nativeSrc":"2217:17:69","nodeType":"YulFunctionCall","src":"2217:17:69"},{"arguments":[{"name":"tail","nativeSrc":"2240:4:69","nodeType":"YulIdentifier","src":"2240:4:69"},{"name":"headStart","nativeSrc":"2246:9:69","nodeType":"YulIdentifier","src":"2246:9:69"}],"functionName":{"name":"sub","nativeSrc":"2236:3:69","nodeType":"YulIdentifier","src":"2236:3:69"},"nativeSrc":"2236:20:69","nodeType":"YulFunctionCall","src":"2236:20:69"}],"functionName":{"name":"mstore","nativeSrc":"2210:6:69","nodeType":"YulIdentifier","src":"2210:6:69"},"nativeSrc":"2210:47:69","nodeType":"YulFunctionCall","src":"2210:47:69"},"nativeSrc":"2210:47:69","nodeType":"YulExpressionStatement","src":"2210:47:69"},{"nativeSrc":"2266:139:69","nodeType":"YulAssignment","src":"2266:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"2400:4:69","nodeType":"YulIdentifier","src":"2400:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6_to_t_string_memory_ptr_fromStack","nativeSrc":"2274:124:69","nodeType":"YulIdentifier","src":"2274:124:69"},"nativeSrc":"2274:131:69","nodeType":"YulFunctionCall","src":"2274:131:69"},"variableNames":[{"name":"tail","nativeSrc":"2266:4:69","nodeType":"YulIdentifier","src":"2266:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"1993:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2144:9:69","nodeType":"YulTypedName","src":"2144:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2159:4:69","nodeType":"YulTypedName","src":"2159:4:69","type":""}],"src":"1993:419:69"}]},"contents":"{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function store_literal_in_memory_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6(memPtr) {\n\n        mstore(add(memPtr, 0), \"UpgradeableBeacon: implementatio\")\n\n        mstore(add(memPtr, 32), \"n is not a contract\")\n\n    }\n\n    function abi_encode_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 51)\n        store_literal_in_memory_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060405161057738038061057783398101604081905261002f9161011e565b61003833610047565b61004181610097565b506101a8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381163b6100c75760405162461bcd60e51b81526004016100be90610147565b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0382165b92915050565b610105816100e9565b811461011057600080fd5b50565b80516100f6816100fc565b60006020828403121561013357610133600080fd5b600061013f8484610113565b949350505050565b602080825281016100f681603381527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60208201527f6e206973206e6f74206120636f6e747261637400000000000000000000000000604082015260600190565b6103c0806101b76000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a6146100945780638da5cb5b1461009c578063f2fde38b146100ad575b600080fd5b61006f61006a366004610254565b6100c0565b005b6001546001600160a01b03165b60405161008b919061028c565b60405180910390f35b61006f610108565b6000546001600160a01b031661007e565b61006f6100bb366004610254565b61011c565b6100c861015f565b6100d181610189565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b61011061015f565b61011a60006101d2565b565b61012461015f565b6001600160a01b0381166101535760405162461bcd60e51b815260040161014a906102e0565b60405180910390fd5b61015c816101d2565b50565b6000546001600160a01b0316331461011a5760405162461bcd60e51b815260040161014a906102f0565b6001600160a01b0381163b6101b05760405162461bcd60e51b815260040161014a9061037a565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b61023e81610222565b811461015c57600080fd5b803561022f81610235565b60006020828403121561026957610269600080fd5b60006102758484610249565b949350505050565b61028681610222565b82525050565b6020810161022f828461027d565b602681526000602082017f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015291505b5060400190565b6020808252810161022f8161029a565b60208082528181019081527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408301526060820161022f565b603381526000602082017f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f8152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b602082015291506102d9565b6020808252810161022f8161032a56fea264697066735822122071a7c74deecc6adc9b45c53947a48e1a9da9734144acfac95c9bc9feeeefd9f364736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x577 CODESIZE SUB DUP1 PUSH2 0x577 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x11E JUMP JUMPDEST PUSH2 0x38 CALLER PUSH2 0x47 JUMP JUMPDEST PUSH2 0x41 DUP2 PUSH2 0x97 JUMP JUMPDEST POP PUSH2 0x1A8 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0xC7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBE SWAP1 PUSH2 0x147 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x105 DUP2 PUSH2 0xE9 JUMP JUMPDEST DUP2 EQ PUSH2 0x110 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0xF6 DUP2 PUSH2 0xFC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x133 JUMPI PUSH2 0x133 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x13F DUP5 DUP5 PUSH2 0x113 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xF6 DUP2 PUSH1 0x33 DUP2 MSTORE PUSH32 0x5570677261646561626C65426561636F6E3A20696D706C656D656E746174696F PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x6E206973206E6F74206120636F6E747261637400000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0x3C0 DUP1 PUSH2 0x1B7 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x71 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x94 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x9C JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xAD JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0x6A CALLDATASIZE PUSH1 0x4 PUSH2 0x254 JUMP JUMPDEST PUSH2 0xC0 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8B SWAP2 SWAP1 PUSH2 0x28C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6F PUSH2 0x108 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7E JUMP JUMPDEST PUSH2 0x6F PUSH2 0xBB CALLDATASIZE PUSH1 0x4 PUSH2 0x254 JUMP JUMPDEST PUSH2 0x11C JUMP JUMPDEST PUSH2 0xC8 PUSH2 0x15F JUMP JUMPDEST PUSH2 0xD1 DUP2 PUSH2 0x189 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x110 PUSH2 0x15F JUMP JUMPDEST PUSH2 0x11A PUSH1 0x0 PUSH2 0x1D2 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x124 PUSH2 0x15F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x153 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x14A SWAP1 PUSH2 0x2E0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x15C DUP2 PUSH2 0x1D2 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x11A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x14A SWAP1 PUSH2 0x2F0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x1B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x14A SWAP1 PUSH2 0x37A JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x23E DUP2 PUSH2 0x222 JUMP JUMPDEST DUP2 EQ PUSH2 0x15C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x22F DUP2 PUSH2 0x235 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x269 JUMPI PUSH2 0x269 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x275 DUP5 DUP5 PUSH2 0x249 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x286 DUP2 PUSH2 0x222 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x22F DUP3 DUP5 PUSH2 0x27D JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 DUP2 MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x22F DUP2 PUSH2 0x29A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD SWAP1 DUP2 MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD PUSH2 0x22F JUMP JUMPDEST PUSH1 0x33 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x5570677261646561626C65426561636F6E3A20696D706C656D656E746174696F DUP2 MSTORE PUSH19 0x1B881A5CC81B9BDD08184818DBDB9D1C9858DD PUSH1 0x6A SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x2D9 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x22F DUP2 PUSH2 0x32A JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH18 0xA7C74DEECC6ADC9B45C53947A48E1A9DA973 COINBASE PREVRANDAO 0xAC STATICCALL 0xC9 TLOAD SWAP12 0xC9 INVALID 0xEE 0xEF 0xD9 RETURN PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ","sourceMap":"543:1496:22:-:0;;;931:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:15;734:10:24;936:18:15;:32::i;:::-;978:35:22;997:15;978:18;:35::i;:::-;931:89;543:1496;;2426:187:15;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:15;;;-1:-1:-1;;;;;;2534:17:15;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;1811:226:22:-;-1:-1:-1;;;;;1702:19:23;;;1884:101:22;;;;-1:-1:-1;;;1884:101:22;;;;;;;:::i;:::-;;;;;;;;;1995:15;:35;;-1:-1:-1;;;;;;1995:35:22;-1:-1:-1;;;;;1995:35:22;;;;;;;;;;1811:226::o;466:96:69:-;503:7;-1:-1:-1;;;;;400:54:69;;532:24;521:35;466:96;-1:-1:-1;;466:96:69:o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;778:13;;800:33;778:13;800:33;:::i;845:351::-;915:6;964:2;952:9;943:7;939:23;935:32;932:119;;;970:79;197:1;194;187:12;970:79;1090:1;1115:64;1171:7;1151:9;1115:64;:::i;:::-;1105:74;845:351;-1:-1:-1;;;;845:351:69:o;1993:419::-;2197:2;2210:47;;;2182:18;;2274:131;2182:18;1848:2;1308:19;;1517:34;1360:4;1351:14;;1494:58;1586:21;1569:15;;;1562:46;1969:12;;;1621:366;1993:419;543:1496:22;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_checkOwner_3815":{"entryPoint":351,"id":3815,"parameterSlots":0,"returnSlots":0},"@_msgSender_4753":{"entryPoint":null,"id":4753,"parameterSlots":0,"returnSlots":1},"@_setImplementation_4410":{"entryPoint":393,"id":4410,"parameterSlots":1,"returnSlots":0},"@_transferOwnership_3872":{"entryPoint":466,"id":3872,"parameterSlots":1,"returnSlots":0},"@implementation_4374":{"entryPoint":null,"id":4374,"parameterSlots":0,"returnSlots":1},"@isContract_4429":{"entryPoint":null,"id":4429,"parameterSlots":1,"returnSlots":1},"@owner_3801":{"entryPoint":null,"id":3801,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_3829":{"entryPoint":264,"id":3829,"parameterSlots":0,"returnSlots":0},"@transferOwnership_3852":{"entryPoint":284,"id":3852,"parameterSlots":1,"returnSlots":0},"@upgradeTo_4391":{"entryPoint":192,"id":4391,"parameterSlots":1,"returnSlots":0},"abi_decode_t_address":{"entryPoint":585,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":596,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_address_to_t_address_fromStack":{"entryPoint":637,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack":{"entryPoint":666,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6_to_t_string_memory_ptr_fromStack":{"entryPoint":810,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":652,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":736,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":890,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":752,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_address":{"entryPoint":546,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_address":{"entryPoint":565,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:4754:69","nodeType":"YulBlock","src":"0:4754:69","statements":[{"body":{"nativeSrc":"47:35:69","nodeType":"YulBlock","src":"47:35:69","statements":[{"nativeSrc":"57:19:69","nodeType":"YulAssignment","src":"57:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"73:2:69","nodeType":"YulLiteral","src":"73:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"67:5:69","nodeType":"YulIdentifier","src":"67:5:69"},"nativeSrc":"67:9:69","nodeType":"YulFunctionCall","src":"67:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"57:6:69","nodeType":"YulIdentifier","src":"57:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"7:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"40:6:69","nodeType":"YulTypedName","src":"40:6:69","type":""}],"src":"7:75:69"},{"body":{"nativeSrc":"177:28:69","nodeType":"YulBlock","src":"177:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"194:1:69","nodeType":"YulLiteral","src":"194:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"197:1:69","nodeType":"YulLiteral","src":"197:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"187:6:69","nodeType":"YulIdentifier","src":"187:6:69"},"nativeSrc":"187:12:69","nodeType":"YulFunctionCall","src":"187:12:69"},"nativeSrc":"187:12:69","nodeType":"YulExpressionStatement","src":"187:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"88:117:69","nodeType":"YulFunctionDefinition","src":"88:117:69"},{"body":{"nativeSrc":"300:28:69","nodeType":"YulBlock","src":"300:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"317:1:69","nodeType":"YulLiteral","src":"317:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"320:1:69","nodeType":"YulLiteral","src":"320:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},"nativeSrc":"310:12:69","nodeType":"YulFunctionCall","src":"310:12:69"},"nativeSrc":"310:12:69","nodeType":"YulExpressionStatement","src":"310:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"211:117:69","nodeType":"YulFunctionDefinition","src":"211:117:69"},{"body":{"nativeSrc":"379:81:69","nodeType":"YulBlock","src":"379:81:69","statements":[{"nativeSrc":"389:65:69","nodeType":"YulAssignment","src":"389:65:69","value":{"arguments":[{"name":"value","nativeSrc":"404:5:69","nodeType":"YulIdentifier","src":"404:5:69"},{"kind":"number","nativeSrc":"411:42:69","nodeType":"YulLiteral","src":"411:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"400:3:69","nodeType":"YulIdentifier","src":"400:3:69"},"nativeSrc":"400:54:69","nodeType":"YulFunctionCall","src":"400:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"389:7:69","nodeType":"YulIdentifier","src":"389:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"334:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"361:5:69","nodeType":"YulTypedName","src":"361:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"371:7:69","nodeType":"YulTypedName","src":"371:7:69","type":""}],"src":"334:126:69"},{"body":{"nativeSrc":"511:51:69","nodeType":"YulBlock","src":"511:51:69","statements":[{"nativeSrc":"521:35:69","nodeType":"YulAssignment","src":"521:35:69","value":{"arguments":[{"name":"value","nativeSrc":"550:5:69","nodeType":"YulIdentifier","src":"550:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"532:17:69","nodeType":"YulIdentifier","src":"532:17:69"},"nativeSrc":"532:24:69","nodeType":"YulFunctionCall","src":"532:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"521:7:69","nodeType":"YulIdentifier","src":"521:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"466:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"493:5:69","nodeType":"YulTypedName","src":"493:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"503:7:69","nodeType":"YulTypedName","src":"503:7:69","type":""}],"src":"466:96:69"},{"body":{"nativeSrc":"611:79:69","nodeType":"YulBlock","src":"611:79:69","statements":[{"body":{"nativeSrc":"668:16:69","nodeType":"YulBlock","src":"668:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"677:1:69","nodeType":"YulLiteral","src":"677:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"680:1:69","nodeType":"YulLiteral","src":"680:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"670:6:69","nodeType":"YulIdentifier","src":"670:6:69"},"nativeSrc":"670:12:69","nodeType":"YulFunctionCall","src":"670:12:69"},"nativeSrc":"670:12:69","nodeType":"YulExpressionStatement","src":"670:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"634:5:69","nodeType":"YulIdentifier","src":"634:5:69"},{"arguments":[{"name":"value","nativeSrc":"659:5:69","nodeType":"YulIdentifier","src":"659:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"641:17:69","nodeType":"YulIdentifier","src":"641:17:69"},"nativeSrc":"641:24:69","nodeType":"YulFunctionCall","src":"641:24:69"}],"functionName":{"name":"eq","nativeSrc":"631:2:69","nodeType":"YulIdentifier","src":"631:2:69"},"nativeSrc":"631:35:69","nodeType":"YulFunctionCall","src":"631:35:69"}],"functionName":{"name":"iszero","nativeSrc":"624:6:69","nodeType":"YulIdentifier","src":"624:6:69"},"nativeSrc":"624:43:69","nodeType":"YulFunctionCall","src":"624:43:69"},"nativeSrc":"621:63:69","nodeType":"YulIf","src":"621:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"568:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"604:5:69","nodeType":"YulTypedName","src":"604:5:69","type":""}],"src":"568:122:69"},{"body":{"nativeSrc":"748:87:69","nodeType":"YulBlock","src":"748:87:69","statements":[{"nativeSrc":"758:29:69","nodeType":"YulAssignment","src":"758:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"780:6:69","nodeType":"YulIdentifier","src":"780:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"767:12:69","nodeType":"YulIdentifier","src":"767:12:69"},"nativeSrc":"767:20:69","nodeType":"YulFunctionCall","src":"767:20:69"},"variableNames":[{"name":"value","nativeSrc":"758:5:69","nodeType":"YulIdentifier","src":"758:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"823:5:69","nodeType":"YulIdentifier","src":"823:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"796:26:69","nodeType":"YulIdentifier","src":"796:26:69"},"nativeSrc":"796:33:69","nodeType":"YulFunctionCall","src":"796:33:69"},"nativeSrc":"796:33:69","nodeType":"YulExpressionStatement","src":"796:33:69"}]},"name":"abi_decode_t_address","nativeSrc":"696:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"726:6:69","nodeType":"YulTypedName","src":"726:6:69","type":""},{"name":"end","nativeSrc":"734:3:69","nodeType":"YulTypedName","src":"734:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"742:5:69","nodeType":"YulTypedName","src":"742:5:69","type":""}],"src":"696:139:69"},{"body":{"nativeSrc":"907:263:69","nodeType":"YulBlock","src":"907:263:69","statements":[{"body":{"nativeSrc":"953:83:69","nodeType":"YulBlock","src":"953:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"955:77:69","nodeType":"YulIdentifier","src":"955:77:69"},"nativeSrc":"955:79:69","nodeType":"YulFunctionCall","src":"955:79:69"},"nativeSrc":"955:79:69","nodeType":"YulExpressionStatement","src":"955:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"928:7:69","nodeType":"YulIdentifier","src":"928:7:69"},{"name":"headStart","nativeSrc":"937:9:69","nodeType":"YulIdentifier","src":"937:9:69"}],"functionName":{"name":"sub","nativeSrc":"924:3:69","nodeType":"YulIdentifier","src":"924:3:69"},"nativeSrc":"924:23:69","nodeType":"YulFunctionCall","src":"924:23:69"},{"kind":"number","nativeSrc":"949:2:69","nodeType":"YulLiteral","src":"949:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"920:3:69","nodeType":"YulIdentifier","src":"920:3:69"},"nativeSrc":"920:32:69","nodeType":"YulFunctionCall","src":"920:32:69"},"nativeSrc":"917:119:69","nodeType":"YulIf","src":"917:119:69"},{"nativeSrc":"1046:117:69","nodeType":"YulBlock","src":"1046:117:69","statements":[{"nativeSrc":"1061:15:69","nodeType":"YulVariableDeclaration","src":"1061:15:69","value":{"kind":"number","nativeSrc":"1075:1:69","nodeType":"YulLiteral","src":"1075:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"1065:6:69","nodeType":"YulTypedName","src":"1065:6:69","type":""}]},{"nativeSrc":"1090:63:69","nodeType":"YulAssignment","src":"1090:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1125:9:69","nodeType":"YulIdentifier","src":"1125:9:69"},{"name":"offset","nativeSrc":"1136:6:69","nodeType":"YulIdentifier","src":"1136:6:69"}],"functionName":{"name":"add","nativeSrc":"1121:3:69","nodeType":"YulIdentifier","src":"1121:3:69"},"nativeSrc":"1121:22:69","nodeType":"YulFunctionCall","src":"1121:22:69"},{"name":"dataEnd","nativeSrc":"1145:7:69","nodeType":"YulIdentifier","src":"1145:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"1100:20:69","nodeType":"YulIdentifier","src":"1100:20:69"},"nativeSrc":"1100:53:69","nodeType":"YulFunctionCall","src":"1100:53:69"},"variableNames":[{"name":"value0","nativeSrc":"1090:6:69","nodeType":"YulIdentifier","src":"1090:6:69"}]}]}]},"name":"abi_decode_tuple_t_address","nativeSrc":"841:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"877:9:69","nodeType":"YulTypedName","src":"877:9:69","type":""},{"name":"dataEnd","nativeSrc":"888:7:69","nodeType":"YulTypedName","src":"888:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"900:6:69","nodeType":"YulTypedName","src":"900:6:69","type":""}],"src":"841:329:69"},{"body":{"nativeSrc":"1241:53:69","nodeType":"YulBlock","src":"1241:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"1258:3:69","nodeType":"YulIdentifier","src":"1258:3:69"},{"arguments":[{"name":"value","nativeSrc":"1281:5:69","nodeType":"YulIdentifier","src":"1281:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"1263:17:69","nodeType":"YulIdentifier","src":"1263:17:69"},"nativeSrc":"1263:24:69","nodeType":"YulFunctionCall","src":"1263:24:69"}],"functionName":{"name":"mstore","nativeSrc":"1251:6:69","nodeType":"YulIdentifier","src":"1251:6:69"},"nativeSrc":"1251:37:69","nodeType":"YulFunctionCall","src":"1251:37:69"},"nativeSrc":"1251:37:69","nodeType":"YulExpressionStatement","src":"1251:37:69"}]},"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"1176:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1229:5:69","nodeType":"YulTypedName","src":"1229:5:69","type":""},{"name":"pos","nativeSrc":"1236:3:69","nodeType":"YulTypedName","src":"1236:3:69","type":""}],"src":"1176:118:69"},{"body":{"nativeSrc":"1398:124:69","nodeType":"YulBlock","src":"1398:124:69","statements":[{"nativeSrc":"1408:26:69","nodeType":"YulAssignment","src":"1408:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"1420:9:69","nodeType":"YulIdentifier","src":"1420:9:69"},{"kind":"number","nativeSrc":"1431:2:69","nodeType":"YulLiteral","src":"1431:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1416:3:69","nodeType":"YulIdentifier","src":"1416:3:69"},"nativeSrc":"1416:18:69","nodeType":"YulFunctionCall","src":"1416:18:69"},"variableNames":[{"name":"tail","nativeSrc":"1408:4:69","nodeType":"YulIdentifier","src":"1408:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"1488:6:69","nodeType":"YulIdentifier","src":"1488:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"1501:9:69","nodeType":"YulIdentifier","src":"1501:9:69"},{"kind":"number","nativeSrc":"1512:1:69","nodeType":"YulLiteral","src":"1512:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1497:3:69","nodeType":"YulIdentifier","src":"1497:3:69"},"nativeSrc":"1497:17:69","nodeType":"YulFunctionCall","src":"1497:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"1444:43:69","nodeType":"YulIdentifier","src":"1444:43:69"},"nativeSrc":"1444:71:69","nodeType":"YulFunctionCall","src":"1444:71:69"},"nativeSrc":"1444:71:69","nodeType":"YulExpressionStatement","src":"1444:71:69"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"1300:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1370:9:69","nodeType":"YulTypedName","src":"1370:9:69","type":""},{"name":"value0","nativeSrc":"1382:6:69","nodeType":"YulTypedName","src":"1382:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1393:4:69","nodeType":"YulTypedName","src":"1393:4:69","type":""}],"src":"1300:222:69"},{"body":{"nativeSrc":"1624:73:69","nodeType":"YulBlock","src":"1624:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"1641:3:69","nodeType":"YulIdentifier","src":"1641:3:69"},{"name":"length","nativeSrc":"1646:6:69","nodeType":"YulIdentifier","src":"1646:6:69"}],"functionName":{"name":"mstore","nativeSrc":"1634:6:69","nodeType":"YulIdentifier","src":"1634:6:69"},"nativeSrc":"1634:19:69","nodeType":"YulFunctionCall","src":"1634:19:69"},"nativeSrc":"1634:19:69","nodeType":"YulExpressionStatement","src":"1634:19:69"},{"nativeSrc":"1662:29:69","nodeType":"YulAssignment","src":"1662:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"1681:3:69","nodeType":"YulIdentifier","src":"1681:3:69"},{"kind":"number","nativeSrc":"1686:4:69","nodeType":"YulLiteral","src":"1686:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1677:3:69","nodeType":"YulIdentifier","src":"1677:3:69"},"nativeSrc":"1677:14:69","nodeType":"YulFunctionCall","src":"1677:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"1662:11:69","nodeType":"YulIdentifier","src":"1662:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"1528:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"1596:3:69","nodeType":"YulTypedName","src":"1596:3:69","type":""},{"name":"length","nativeSrc":"1601:6:69","nodeType":"YulTypedName","src":"1601:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"1612:11:69","nodeType":"YulTypedName","src":"1612:11:69","type":""}],"src":"1528:169:69"},{"body":{"nativeSrc":"1809:119:69","nodeType":"YulBlock","src":"1809:119:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"1831:6:69","nodeType":"YulIdentifier","src":"1831:6:69"},{"kind":"number","nativeSrc":"1839:1:69","nodeType":"YulLiteral","src":"1839:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1827:3:69","nodeType":"YulIdentifier","src":"1827:3:69"},"nativeSrc":"1827:14:69","nodeType":"YulFunctionCall","src":"1827:14:69"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nativeSrc":"1843:34:69","nodeType":"YulLiteral","src":"1843:34:69","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nativeSrc":"1820:6:69","nodeType":"YulIdentifier","src":"1820:6:69"},"nativeSrc":"1820:58:69","nodeType":"YulFunctionCall","src":"1820:58:69"},"nativeSrc":"1820:58:69","nodeType":"YulExpressionStatement","src":"1820:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"1899:6:69","nodeType":"YulIdentifier","src":"1899:6:69"},{"kind":"number","nativeSrc":"1907:2:69","nodeType":"YulLiteral","src":"1907:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1895:3:69","nodeType":"YulIdentifier","src":"1895:3:69"},"nativeSrc":"1895:15:69","nodeType":"YulFunctionCall","src":"1895:15:69"},{"hexValue":"646472657373","kind":"string","nativeSrc":"1912:8:69","nodeType":"YulLiteral","src":"1912:8:69","type":"","value":"ddress"}],"functionName":{"name":"mstore","nativeSrc":"1888:6:69","nodeType":"YulIdentifier","src":"1888:6:69"},"nativeSrc":"1888:33:69","nodeType":"YulFunctionCall","src":"1888:33:69"},"nativeSrc":"1888:33:69","nodeType":"YulExpressionStatement","src":"1888:33:69"}]},"name":"store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","nativeSrc":"1703:225:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"1801:6:69","nodeType":"YulTypedName","src":"1801:6:69","type":""}],"src":"1703:225:69"},{"body":{"nativeSrc":"2080:220:69","nodeType":"YulBlock","src":"2080:220:69","statements":[{"nativeSrc":"2090:74:69","nodeType":"YulAssignment","src":"2090:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"2156:3:69","nodeType":"YulIdentifier","src":"2156:3:69"},{"kind":"number","nativeSrc":"2161:2:69","nodeType":"YulLiteral","src":"2161:2:69","type":"","value":"38"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"2097:58:69","nodeType":"YulIdentifier","src":"2097:58:69"},"nativeSrc":"2097:67:69","nodeType":"YulFunctionCall","src":"2097:67:69"},"variableNames":[{"name":"pos","nativeSrc":"2090:3:69","nodeType":"YulIdentifier","src":"2090:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"2262:3:69","nodeType":"YulIdentifier","src":"2262:3:69"}],"functionName":{"name":"store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","nativeSrc":"2173:88:69","nodeType":"YulIdentifier","src":"2173:88:69"},"nativeSrc":"2173:93:69","nodeType":"YulFunctionCall","src":"2173:93:69"},"nativeSrc":"2173:93:69","nodeType":"YulExpressionStatement","src":"2173:93:69"},{"nativeSrc":"2275:19:69","nodeType":"YulAssignment","src":"2275:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"2286:3:69","nodeType":"YulIdentifier","src":"2286:3:69"},{"kind":"number","nativeSrc":"2291:2:69","nodeType":"YulLiteral","src":"2291:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"2282:3:69","nodeType":"YulIdentifier","src":"2282:3:69"},"nativeSrc":"2282:12:69","nodeType":"YulFunctionCall","src":"2282:12:69"},"variableNames":[{"name":"end","nativeSrc":"2275:3:69","nodeType":"YulIdentifier","src":"2275:3:69"}]}]},"name":"abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack","nativeSrc":"1934:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"2068:3:69","nodeType":"YulTypedName","src":"2068:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"2076:3:69","nodeType":"YulTypedName","src":"2076:3:69","type":""}],"src":"1934:366:69"},{"body":{"nativeSrc":"2477:248:69","nodeType":"YulBlock","src":"2477:248:69","statements":[{"nativeSrc":"2487:26:69","nodeType":"YulAssignment","src":"2487:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"2499:9:69","nodeType":"YulIdentifier","src":"2499:9:69"},{"kind":"number","nativeSrc":"2510:2:69","nodeType":"YulLiteral","src":"2510:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2495:3:69","nodeType":"YulIdentifier","src":"2495:3:69"},"nativeSrc":"2495:18:69","nodeType":"YulFunctionCall","src":"2495:18:69"},"variableNames":[{"name":"tail","nativeSrc":"2487:4:69","nodeType":"YulIdentifier","src":"2487:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2534:9:69","nodeType":"YulIdentifier","src":"2534:9:69"},{"kind":"number","nativeSrc":"2545:1:69","nodeType":"YulLiteral","src":"2545:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"2530:3:69","nodeType":"YulIdentifier","src":"2530:3:69"},"nativeSrc":"2530:17:69","nodeType":"YulFunctionCall","src":"2530:17:69"},{"arguments":[{"name":"tail","nativeSrc":"2553:4:69","nodeType":"YulIdentifier","src":"2553:4:69"},{"name":"headStart","nativeSrc":"2559:9:69","nodeType":"YulIdentifier","src":"2559:9:69"}],"functionName":{"name":"sub","nativeSrc":"2549:3:69","nodeType":"YulIdentifier","src":"2549:3:69"},"nativeSrc":"2549:20:69","nodeType":"YulFunctionCall","src":"2549:20:69"}],"functionName":{"name":"mstore","nativeSrc":"2523:6:69","nodeType":"YulIdentifier","src":"2523:6:69"},"nativeSrc":"2523:47:69","nodeType":"YulFunctionCall","src":"2523:47:69"},"nativeSrc":"2523:47:69","nodeType":"YulExpressionStatement","src":"2523:47:69"},{"nativeSrc":"2579:139:69","nodeType":"YulAssignment","src":"2579:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"2713:4:69","nodeType":"YulIdentifier","src":"2713:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack","nativeSrc":"2587:124:69","nodeType":"YulIdentifier","src":"2587:124:69"},"nativeSrc":"2587:131:69","nodeType":"YulFunctionCall","src":"2587:131:69"},"variableNames":[{"name":"tail","nativeSrc":"2579:4:69","nodeType":"YulIdentifier","src":"2579:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"2306:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2457:9:69","nodeType":"YulTypedName","src":"2457:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2472:4:69","nodeType":"YulTypedName","src":"2472:4:69","type":""}],"src":"2306:419:69"},{"body":{"nativeSrc":"2837:76:69","nodeType":"YulBlock","src":"2837:76:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"2859:6:69","nodeType":"YulIdentifier","src":"2859:6:69"},{"kind":"number","nativeSrc":"2867:1:69","nodeType":"YulLiteral","src":"2867:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"2855:3:69","nodeType":"YulIdentifier","src":"2855:3:69"},"nativeSrc":"2855:14:69","nodeType":"YulFunctionCall","src":"2855:14:69"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nativeSrc":"2871:34:69","nodeType":"YulLiteral","src":"2871:34:69","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nativeSrc":"2848:6:69","nodeType":"YulIdentifier","src":"2848:6:69"},"nativeSrc":"2848:58:69","nodeType":"YulFunctionCall","src":"2848:58:69"},"nativeSrc":"2848:58:69","nodeType":"YulExpressionStatement","src":"2848:58:69"}]},"name":"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","nativeSrc":"2731:182:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"2829:6:69","nodeType":"YulTypedName","src":"2829:6:69","type":""}],"src":"2731:182:69"},{"body":{"nativeSrc":"3065:220:69","nodeType":"YulBlock","src":"3065:220:69","statements":[{"nativeSrc":"3075:74:69","nodeType":"YulAssignment","src":"3075:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"3141:3:69","nodeType":"YulIdentifier","src":"3141:3:69"},{"kind":"number","nativeSrc":"3146:2:69","nodeType":"YulLiteral","src":"3146:2:69","type":"","value":"32"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"3082:58:69","nodeType":"YulIdentifier","src":"3082:58:69"},"nativeSrc":"3082:67:69","nodeType":"YulFunctionCall","src":"3082:67:69"},"variableNames":[{"name":"pos","nativeSrc":"3075:3:69","nodeType":"YulIdentifier","src":"3075:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"3247:3:69","nodeType":"YulIdentifier","src":"3247:3:69"}],"functionName":{"name":"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","nativeSrc":"3158:88:69","nodeType":"YulIdentifier","src":"3158:88:69"},"nativeSrc":"3158:93:69","nodeType":"YulFunctionCall","src":"3158:93:69"},"nativeSrc":"3158:93:69","nodeType":"YulExpressionStatement","src":"3158:93:69"},{"nativeSrc":"3260:19:69","nodeType":"YulAssignment","src":"3260:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"3271:3:69","nodeType":"YulIdentifier","src":"3271:3:69"},{"kind":"number","nativeSrc":"3276:2:69","nodeType":"YulLiteral","src":"3276:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3267:3:69","nodeType":"YulIdentifier","src":"3267:3:69"},"nativeSrc":"3267:12:69","nodeType":"YulFunctionCall","src":"3267:12:69"},"variableNames":[{"name":"end","nativeSrc":"3260:3:69","nodeType":"YulIdentifier","src":"3260:3:69"}]}]},"name":"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack","nativeSrc":"2919:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"3053:3:69","nodeType":"YulTypedName","src":"3053:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"3061:3:69","nodeType":"YulTypedName","src":"3061:3:69","type":""}],"src":"2919:366:69"},{"body":{"nativeSrc":"3462:248:69","nodeType":"YulBlock","src":"3462:248:69","statements":[{"nativeSrc":"3472:26:69","nodeType":"YulAssignment","src":"3472:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"3484:9:69","nodeType":"YulIdentifier","src":"3484:9:69"},{"kind":"number","nativeSrc":"3495:2:69","nodeType":"YulLiteral","src":"3495:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3480:3:69","nodeType":"YulIdentifier","src":"3480:3:69"},"nativeSrc":"3480:18:69","nodeType":"YulFunctionCall","src":"3480:18:69"},"variableNames":[{"name":"tail","nativeSrc":"3472:4:69","nodeType":"YulIdentifier","src":"3472:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3519:9:69","nodeType":"YulIdentifier","src":"3519:9:69"},{"kind":"number","nativeSrc":"3530:1:69","nodeType":"YulLiteral","src":"3530:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"3515:3:69","nodeType":"YulIdentifier","src":"3515:3:69"},"nativeSrc":"3515:17:69","nodeType":"YulFunctionCall","src":"3515:17:69"},{"arguments":[{"name":"tail","nativeSrc":"3538:4:69","nodeType":"YulIdentifier","src":"3538:4:69"},{"name":"headStart","nativeSrc":"3544:9:69","nodeType":"YulIdentifier","src":"3544:9:69"}],"functionName":{"name":"sub","nativeSrc":"3534:3:69","nodeType":"YulIdentifier","src":"3534:3:69"},"nativeSrc":"3534:20:69","nodeType":"YulFunctionCall","src":"3534:20:69"}],"functionName":{"name":"mstore","nativeSrc":"3508:6:69","nodeType":"YulIdentifier","src":"3508:6:69"},"nativeSrc":"3508:47:69","nodeType":"YulFunctionCall","src":"3508:47:69"},"nativeSrc":"3508:47:69","nodeType":"YulExpressionStatement","src":"3508:47:69"},{"nativeSrc":"3564:139:69","nodeType":"YulAssignment","src":"3564:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"3698:4:69","nodeType":"YulIdentifier","src":"3698:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack","nativeSrc":"3572:124:69","nodeType":"YulIdentifier","src":"3572:124:69"},"nativeSrc":"3572:131:69","nodeType":"YulFunctionCall","src":"3572:131:69"},"variableNames":[{"name":"tail","nativeSrc":"3564:4:69","nodeType":"YulIdentifier","src":"3564:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"3291:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3442:9:69","nodeType":"YulTypedName","src":"3442:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3457:4:69","nodeType":"YulTypedName","src":"3457:4:69","type":""}],"src":"3291:419:69"},{"body":{"nativeSrc":"3822:132:69","nodeType":"YulBlock","src":"3822:132:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"3844:6:69","nodeType":"YulIdentifier","src":"3844:6:69"},{"kind":"number","nativeSrc":"3852:1:69","nodeType":"YulLiteral","src":"3852:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"3840:3:69","nodeType":"YulIdentifier","src":"3840:3:69"},"nativeSrc":"3840:14:69","nodeType":"YulFunctionCall","src":"3840:14:69"},{"hexValue":"5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f","kind":"string","nativeSrc":"3856:34:69","nodeType":"YulLiteral","src":"3856:34:69","type":"","value":"UpgradeableBeacon: implementatio"}],"functionName":{"name":"mstore","nativeSrc":"3833:6:69","nodeType":"YulIdentifier","src":"3833:6:69"},"nativeSrc":"3833:58:69","nodeType":"YulFunctionCall","src":"3833:58:69"},"nativeSrc":"3833:58:69","nodeType":"YulExpressionStatement","src":"3833:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"3912:6:69","nodeType":"YulIdentifier","src":"3912:6:69"},{"kind":"number","nativeSrc":"3920:2:69","nodeType":"YulLiteral","src":"3920:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3908:3:69","nodeType":"YulIdentifier","src":"3908:3:69"},"nativeSrc":"3908:15:69","nodeType":"YulFunctionCall","src":"3908:15:69"},{"hexValue":"6e206973206e6f74206120636f6e7472616374","kind":"string","nativeSrc":"3925:21:69","nodeType":"YulLiteral","src":"3925:21:69","type":"","value":"n is not a contract"}],"functionName":{"name":"mstore","nativeSrc":"3901:6:69","nodeType":"YulIdentifier","src":"3901:6:69"},"nativeSrc":"3901:46:69","nodeType":"YulFunctionCall","src":"3901:46:69"},"nativeSrc":"3901:46:69","nodeType":"YulExpressionStatement","src":"3901:46:69"}]},"name":"store_literal_in_memory_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6","nativeSrc":"3716:238:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"3814:6:69","nodeType":"YulTypedName","src":"3814:6:69","type":""}],"src":"3716:238:69"},{"body":{"nativeSrc":"4106:220:69","nodeType":"YulBlock","src":"4106:220:69","statements":[{"nativeSrc":"4116:74:69","nodeType":"YulAssignment","src":"4116:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"4182:3:69","nodeType":"YulIdentifier","src":"4182:3:69"},{"kind":"number","nativeSrc":"4187:2:69","nodeType":"YulLiteral","src":"4187:2:69","type":"","value":"51"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"4123:58:69","nodeType":"YulIdentifier","src":"4123:58:69"},"nativeSrc":"4123:67:69","nodeType":"YulFunctionCall","src":"4123:67:69"},"variableNames":[{"name":"pos","nativeSrc":"4116:3:69","nodeType":"YulIdentifier","src":"4116:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"4288:3:69","nodeType":"YulIdentifier","src":"4288:3:69"}],"functionName":{"name":"store_literal_in_memory_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6","nativeSrc":"4199:88:69","nodeType":"YulIdentifier","src":"4199:88:69"},"nativeSrc":"4199:93:69","nodeType":"YulFunctionCall","src":"4199:93:69"},"nativeSrc":"4199:93:69","nodeType":"YulExpressionStatement","src":"4199:93:69"},{"nativeSrc":"4301:19:69","nodeType":"YulAssignment","src":"4301:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"4312:3:69","nodeType":"YulIdentifier","src":"4312:3:69"},{"kind":"number","nativeSrc":"4317:2:69","nodeType":"YulLiteral","src":"4317:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"4308:3:69","nodeType":"YulIdentifier","src":"4308:3:69"},"nativeSrc":"4308:12:69","nodeType":"YulFunctionCall","src":"4308:12:69"},"variableNames":[{"name":"end","nativeSrc":"4301:3:69","nodeType":"YulIdentifier","src":"4301:3:69"}]}]},"name":"abi_encode_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6_to_t_string_memory_ptr_fromStack","nativeSrc":"3960:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"4094:3:69","nodeType":"YulTypedName","src":"4094:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"4102:3:69","nodeType":"YulTypedName","src":"4102:3:69","type":""}],"src":"3960:366:69"},{"body":{"nativeSrc":"4503:248:69","nodeType":"YulBlock","src":"4503:248:69","statements":[{"nativeSrc":"4513:26:69","nodeType":"YulAssignment","src":"4513:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"4525:9:69","nodeType":"YulIdentifier","src":"4525:9:69"},{"kind":"number","nativeSrc":"4536:2:69","nodeType":"YulLiteral","src":"4536:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4521:3:69","nodeType":"YulIdentifier","src":"4521:3:69"},"nativeSrc":"4521:18:69","nodeType":"YulFunctionCall","src":"4521:18:69"},"variableNames":[{"name":"tail","nativeSrc":"4513:4:69","nodeType":"YulIdentifier","src":"4513:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4560:9:69","nodeType":"YulIdentifier","src":"4560:9:69"},{"kind":"number","nativeSrc":"4571:1:69","nodeType":"YulLiteral","src":"4571:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4556:3:69","nodeType":"YulIdentifier","src":"4556:3:69"},"nativeSrc":"4556:17:69","nodeType":"YulFunctionCall","src":"4556:17:69"},{"arguments":[{"name":"tail","nativeSrc":"4579:4:69","nodeType":"YulIdentifier","src":"4579:4:69"},{"name":"headStart","nativeSrc":"4585:9:69","nodeType":"YulIdentifier","src":"4585:9:69"}],"functionName":{"name":"sub","nativeSrc":"4575:3:69","nodeType":"YulIdentifier","src":"4575:3:69"},"nativeSrc":"4575:20:69","nodeType":"YulFunctionCall","src":"4575:20:69"}],"functionName":{"name":"mstore","nativeSrc":"4549:6:69","nodeType":"YulIdentifier","src":"4549:6:69"},"nativeSrc":"4549:47:69","nodeType":"YulFunctionCall","src":"4549:47:69"},"nativeSrc":"4549:47:69","nodeType":"YulExpressionStatement","src":"4549:47:69"},{"nativeSrc":"4605:139:69","nodeType":"YulAssignment","src":"4605:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"4739:4:69","nodeType":"YulIdentifier","src":"4739:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6_to_t_string_memory_ptr_fromStack","nativeSrc":"4613:124:69","nodeType":"YulIdentifier","src":"4613:124:69"},"nativeSrc":"4613:131:69","nodeType":"YulFunctionCall","src":"4613:131:69"},"variableNames":[{"name":"tail","nativeSrc":"4605:4:69","nodeType":"YulIdentifier","src":"4605:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"4332:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4483:9:69","nodeType":"YulTypedName","src":"4483:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4498:4:69","nodeType":"YulTypedName","src":"4498:4:69","type":""}],"src":"4332:419:69"}]},"contents":"{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe(memPtr) {\n\n        mstore(add(memPtr, 0), \"Ownable: new owner is the zero a\")\n\n        mstore(add(memPtr, 32), \"ddress\")\n\n    }\n\n    function abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 38)\n        store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe(memPtr) {\n\n        mstore(add(memPtr, 0), \"Ownable: caller is not the owner\")\n\n    }\n\n    function abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 32)\n        store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6(memPtr) {\n\n        mstore(add(memPtr, 0), \"UpgradeableBeacon: implementatio\")\n\n        mstore(add(memPtr, 32), \"n is not a contract\")\n\n    }\n\n    function abi_encode_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 51)\n        store_literal_in_memory_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a6146100945780638da5cb5b1461009c578063f2fde38b146100ad575b600080fd5b61006f61006a366004610254565b6100c0565b005b6001546001600160a01b03165b60405161008b919061028c565b60405180910390f35b61006f610108565b6000546001600160a01b031661007e565b61006f6100bb366004610254565b61011c565b6100c861015f565b6100d181610189565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b61011061015f565b61011a60006101d2565b565b61012461015f565b6001600160a01b0381166101535760405162461bcd60e51b815260040161014a906102e0565b60405180910390fd5b61015c816101d2565b50565b6000546001600160a01b0316331461011a5760405162461bcd60e51b815260040161014a906102f0565b6001600160a01b0381163b6101b05760405162461bcd60e51b815260040161014a9061037a565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b61023e81610222565b811461015c57600080fd5b803561022f81610235565b60006020828403121561026957610269600080fd5b60006102758484610249565b949350505050565b61028681610222565b82525050565b6020810161022f828461027d565b602681526000602082017f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015291505b5060400190565b6020808252810161022f8161029a565b60208082528181019081527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408301526060820161022f565b603381526000602082017f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f8152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b602082015291506102d9565b6020808252810161022f8161032a56fea264697066735822122071a7c74deecc6adc9b45c53947a48e1a9da9734144acfac95c9bc9feeeefd9f364736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x71 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x94 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x9C JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xAD JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0x6A CALLDATASIZE PUSH1 0x4 PUSH2 0x254 JUMP JUMPDEST PUSH2 0xC0 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8B SWAP2 SWAP1 PUSH2 0x28C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6F PUSH2 0x108 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7E JUMP JUMPDEST PUSH2 0x6F PUSH2 0xBB CALLDATASIZE PUSH1 0x4 PUSH2 0x254 JUMP JUMPDEST PUSH2 0x11C JUMP JUMPDEST PUSH2 0xC8 PUSH2 0x15F JUMP JUMPDEST PUSH2 0xD1 DUP2 PUSH2 0x189 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x110 PUSH2 0x15F JUMP JUMPDEST PUSH2 0x11A PUSH1 0x0 PUSH2 0x1D2 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x124 PUSH2 0x15F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x153 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x14A SWAP1 PUSH2 0x2E0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x15C DUP2 PUSH2 0x1D2 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x11A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x14A SWAP1 PUSH2 0x2F0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x1B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x14A SWAP1 PUSH2 0x37A JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x23E DUP2 PUSH2 0x222 JUMP JUMPDEST DUP2 EQ PUSH2 0x15C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x22F DUP2 PUSH2 0x235 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x269 JUMPI PUSH2 0x269 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x275 DUP5 DUP5 PUSH2 0x249 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x286 DUP2 PUSH2 0x222 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x22F DUP3 DUP5 PUSH2 0x27D JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 DUP2 MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x22F DUP2 PUSH2 0x29A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD SWAP1 DUP2 MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD PUSH2 0x22F JUMP JUMPDEST PUSH1 0x33 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x5570677261646561626C65426561636F6E3A20696D706C656D656E746174696F DUP2 MSTORE PUSH19 0x1B881A5CC81B9BDD08184818DBDB9D1C9858DD PUSH1 0x6A SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x2D9 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x22F DUP2 PUSH2 0x32A JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH18 0xA7C74DEECC6ADC9B45C53947A48E1A9DA973 COINBASE PREVRANDAO 0xAC STATICCALL 0xC9 TLOAD SWAP12 0xC9 INVALID 0xEE 0xEF 0xD9 RETURN PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ","sourceMap":"543:1496:22:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1469:167;;;;;;:::i;:::-;;:::i;:::-;;1098:112;1188:15;;-1:-1:-1;;;;;1188:15:22;1098:112;;;;;;;:::i;:::-;;;;;;;;1824:101:15;;;:::i;1201:85::-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:15;1201:85;;2074:198;;;;;;:::i;:::-;;:::i;1469:167:22:-;1094:13:15;:11;:13::i;:::-;1550:37:22::1;1569:17;1550:18;:37::i;:::-;1602:27;::::0;-1:-1:-1;;;;;1602:27:22;::::1;::::0;::::1;::::0;;;::::1;1469:167:::0;:::o;1824:101:15:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;2074:198::-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2162:22:15;::::1;2154:73;;;;-1:-1:-1::0;;;2154:73:15::1;;;;;;;:::i;:::-;;;;;;;;;2237:28;2256:8;2237:18;:28::i;:::-;2074:198:::0;:::o;1359:130::-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:15;734:10:24;1422:23:15;1414:68;;;;-1:-1:-1;;;1414:68:15;;;;;;;:::i;1811:226:22:-;-1:-1:-1;;;;;1702:19:23;;;1884:101:22;;;;-1:-1:-1;;;1884:101:22;;;;;;;:::i;:::-;1995:15;:35;;-1:-1:-1;;;;;;1995:35:22;-1:-1:-1;;;;;1995:35:22;;;;;;;;;;1811:226::o;2426:187:15:-;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:15;;;-1:-1:-1;;;;;;2534:17:15;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;466:96:69:-;503:7;-1:-1:-1;;;;;400:54:69;;532:24;521:35;466:96;-1:-1:-1;;466:96:69:o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;696:139;767:20;;796:33;767:20;796:33;:::i;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;543:1496:22;;;955:79:69;1075:1;1100:53;1145:7;1125:9;1100:53;:::i;:::-;1090:63;841:329;-1:-1:-1;;;;841:329:69:o;1176:118::-;1263:24;1281:5;1263:24;:::i;:::-;1258:3;1251:37;1176:118;;:::o;1300:222::-;1431:2;1416:18;;1444:71;1420:9;1488:6;1444:71;:::i;1934:366::-;2161:2;1634:19;;2076:3;1686:4;1677:14;;1843:34;1820:58;;-1:-1:-1;;;1907:2:69;1895:15;;1888:33;2090:74;-1:-1:-1;2173:93:69;-1:-1:-1;2291:2:69;2282:12;;1934:366::o;2306:419::-;2510:2;2523:47;;;2495:18;;2587:131;2495:18;2587:131;:::i;3291:419::-;3495:2;3508:47;;;3480:18;;;1634:19;;;2871:34;1677:14;;;2848:58;3267:12;;;3572:131;2919:366;3960;4187:2;1634:19;;4102:3;1686:4;1677:14;;3856:34;3833:58;;-1:-1:-1;;;3920:2:69;3908:15;;3901:46;4116:74;-1:-1:-1;4199:93:69;3716:238;4332:419;4536:2;4549:47;;;4521:18;;4613:131;4521:18;4613:131;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"192000","executionCost":"infinite","totalCost":"infinite"},"external":{"implementation()":"infinite","owner()":"infinite","renounceOwnership()":"infinite","transferOwnership(address)":"infinite","upgradeTo(address)":"infinite"},"internal":{"_setImplementation(address)":"infinite"}},"methodIdentifiers":{"implementation()":"5c60da1b","owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","upgradeTo(address)":"3659cfe6"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their implementation contract, which is where they will delegate all function calls. An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\",\"events\":{\"Upgraded(address)\":{\"details\":\"Emitted when the implementation returned by the beacon is changed.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the beacon.\"},\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol\":\"UpgradeableBeacon\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\",\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {BeaconProxy} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n    address private _implementation;\\n\\n    /**\\n     * @dev Emitted when the implementation returned by the beacon is changed.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n     * beacon.\\n     */\\n    constructor(address implementation_) {\\n        _setImplementation(implementation_);\\n    }\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function implementation() public view virtual override returns (address) {\\n        return _implementation;\\n    }\\n\\n    /**\\n     * @dev Upgrades the beacon to a new implementation.\\n     *\\n     * Emits an {Upgraded} event.\\n     *\\n     * Requirements:\\n     *\\n     * - msg.sender must be the owner of the contract.\\n     * - `newImplementation` must be a contract.\\n     */\\n    function upgradeTo(address newImplementation) public virtual onlyOwner {\\n        _setImplementation(newImplementation);\\n        emit Upgraded(newImplementation);\\n    }\\n\\n    /**\\n     * @dev Sets the implementation contract address for this beacon\\n     *\\n     * Requirements:\\n     *\\n     * - `newImplementation` must be a contract.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n        _implementation = newImplementation;\\n    }\\n}\\n\",\"keccak256\":\"0x6ec71aef5659f3f74011169948d2fcda8c6599be5bb38f986380a8737f96cc0f\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\",\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":3768,"contract":"@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol:UpgradeableBeacon","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":4348,"contract":"@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol:UpgradeableBeacon","label":"_implementation","offset":0,"slot":"1","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/Address.sol":{"Address":{"abi":[],"devdoc":{"details":"Collection of functions related to the address type","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122034a22e9598db629b061660c9803cc109d0ecfd91a71f27a67e49b9afbdb6d48f64736f6c63430008190033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLVALUE LOG2 0x2E SWAP6 SWAP9 0xDB PUSH3 0x9B0616 PUSH1 0xC9 DUP1 EXTCODECOPY 0xC1 MULMOD 0xD0 0xEC REVERT SWAP2 0xA7 0x1F 0x27 0xA6 PUSH31 0x49B9AFBDB6D48F64736F6C6343000819003300000000000000000000000000 ","sourceMap":"194:9169:23:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;194:9169:23;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122034a22e9598db629b061660c9803cc109d0ecfd91a71f27a67e49b9afbdb6d48f64736f6c63430008190033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLVALUE LOG2 0x2E SWAP6 SWAP9 0xDB PUSH3 0x9B0616 PUSH1 0xC9 DUP1 EXTCODECOPY 0xC1 MULMOD 0xD0 0xEC REVERT SWAP2 0xA7 0x1F 0x27 0xA6 PUSH31 0x49B9AFBDB6D48F64736F6C6343000819003300000000000000000000000000 ","sourceMap":"194:9169:23:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_revert(bytes memory,string memory)":"infinite","functionCall(address,bytes memory)":"infinite","functionCall(address,bytes memory,string memory)":"infinite","functionCallWithValue(address,bytes memory,uint256)":"infinite","functionCallWithValue(address,bytes memory,uint256,string memory)":"infinite","functionDelegateCall(address,bytes memory)":"infinite","functionDelegateCall(address,bytes memory,string memory)":"infinite","functionStaticCall(address,bytes memory)":"infinite","functionStaticCall(address,bytes memory,string memory)":"infinite","isContract(address)":"infinite","sendValue(address payable,uint256)":"infinite","verifyCallResult(bool,bytes memory,string memory)":"infinite","verifyCallResultFromTarget(address,bool,bytes memory,string memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/Context.sol":{"Context":{"abi":[],"devdoc":{"details":"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\",\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/StorageSlot.sol":{"StorageSlot":{"abi":[],"devdoc":{"details":"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC1967 implementation slot: ```solidity contract ERC1967 {     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;     function _getImplementation() internal view returns (address) {         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;     }     function _setImplementation(address newImplementation) internal {         require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;     } } ``` _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._ _Available since v4.9 for `string`, `bytes`._","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b664d69bab591a4c5c7ec5f644b8ef40c8877903bd4ffd1a69a6780b71f5a1c764736f6c63430008190033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB6 PUSH5 0xD69BAB591A 0x4C TLOAD PUSH31 0xC5F644B8EF40C8877903BD4FFD1A69A6780B71F5A1C764736F6C6343000819 STOP CALLER ","sourceMap":"1420:2685:25:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1420:2685:25;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b664d69bab591a4c5c7ec5f644b8ef40c8877903bd4ffd1a69a6780b71f5a1c764736f6c63430008190033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB6 PUSH5 0xD69BAB591A 0x4C TLOAD PUSH31 0xC5F644B8EF40C8877903BD4FFD1A69A6780B71F5A1C764736F6C6343000819 STOP CALLER ","sourceMap":"1420:2685:25:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"getAddressSlot(bytes32)":"infinite","getBooleanSlot(bytes32)":"infinite","getBytes32Slot(bytes32)":"infinite","getBytesSlot(bytes storage pointer)":"infinite","getBytesSlot(bytes32)":"infinite","getStringSlot(bytes32)":"infinite","getStringSlot(string storage pointer)":"infinite","getUint256Slot(bytes32)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC1967 implementation slot: ```solidity contract ERC1967 {     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;     function _getImplementation() internal view returns (address) {         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;     }     function _setImplementation(address newImplementation) internal {         require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;     } } ``` _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._ _Available since v4.9 for `string`, `bytes`._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":\"StorageSlot\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```solidity\\n * contract ERC1967 {\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\n * _Available since v4.9 for `string`, `bytes`._\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    struct StringSlot {\\n        string value;\\n    }\\n\\n    struct BytesSlot {\\n        bytes value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\n     */\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\n     */\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := store.slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\n     */\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\n     */\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := store.slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol":{"AccessControlledV8":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"calledContract","type":"address"},{"internalType":"string","name":"methodSignature","type":"string"}],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAccessControlManager","type":"address"},{"indexed":false,"internalType":"address","name":"newAccessControlManager","type":"address"}],"name":"NewAccessControlManager","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accessControlManager","outputs":[{"internalType":"contract IAccessControlManagerV8","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"accessControlManager_","type":"address"}],"name":"setAccessControlManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Venus","events":{"Initialized(uint8)":{"details":"Triggered when the contract has been initialized or reinitialized."}},"kind":"dev","methods":{"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"owner()":{"details":"Returns the address of the current owner."},"pendingOwner()":{"details":"Returns the address of the pending owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"setAccessControlManager(address)":{"custom:access":"Only Governance","custom:event":"Emits NewAccessControlManager event","details":"Admin function to set address of AccessControlManager","params":{"accessControlManager_":"The new address of the AccessControlManager"}},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."}},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"}},"title":"AccessControlledV8","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"acceptOwnership()":"79ba5097","accessControlManager()":"b4a0bdf3","owner()":"8da5cb5b","pendingOwner()":"e30c3978","renounceOwnership()":"715018a6","setAccessControlManager(address)":"0e32cb86","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"calledContract\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"methodSignature\",\"type\":\"string\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAccessControlManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAccessControlManager\",\"type\":\"address\"}],\"name\":\"NewAccessControlManager\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"accessControlManager\",\"outputs\":[{\"internalType\":\"contract IAccessControlManagerV8\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"accessControlManager_\",\"type\":\"address\"}],\"name\":\"setAccessControlManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"events\":{\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setAccessControlManager(address)\":{\"custom:access\":\"Only Governance\",\"custom:event\":\"Emits NewAccessControlManager event\",\"details\":\"Admin function to set address of AccessControlManager\",\"params\":{\"accessControlManager_\":\"The new address of the AccessControlManager\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"}},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"}},\"title\":\"AccessControlledV8\",\"version\":1},\"userdoc\":{\"errors\":{\"Unauthorized(address,address,string)\":[{\"notice\":\"Thrown when the action is prohibited by AccessControlManager\"}]},\"events\":{\"NewAccessControlManager(address,address)\":{\"notice\":\"Emitted when access control manager contract address is changed\"}},\"kind\":\"user\",\"methods\":{\"accessControlManager()\":{\"notice\":\"Returns the address of the access control manager contract\"},\"setAccessControlManager(address)\":{\"notice\":\"Sets the address of AccessControlManager\"}},\"notice\":\"This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13) to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\":\"AccessControlledV8\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./OwnableUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership} and {acceptOwnership}.\\n *\\n * This module is used through inheritance. It will make available all functions\\n * from parent (Ownable).\\n */\\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\\n    address private _pendingOwner;\\n\\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\\n\\n    function __Ownable2Step_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable2Step_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Returns the address of the pending owner.\\n     */\\n    function pendingOwner() public view virtual returns (address) {\\n        return _pendingOwner;\\n    }\\n\\n    /**\\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\\n        _pendingOwner = newOwner;\\n        emit OwnershipTransferStarted(owner(), newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual override {\\n        delete _pendingOwner;\\n        super._transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev The new owner accepts the ownership transfer.\\n     */\\n    function acceptOwnership() public virtual {\\n        address sender = _msgSender();\\n        require(pendingOwner() == sender, \\\"Ownable2Step: caller is not the new owner\\\");\\n        _transferOwnership(sender);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x9140dabc466abab21b48b72dbda26736b1183a310d0e677d3719d201df026510\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n    /**\\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n     *\\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n     * {RoleAdminChanged} not being emitted signaling this.\\n     *\\n     * _Available since v3.1._\\n     */\\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n    /**\\n     * @dev Emitted when `account` is granted `role`.\\n     *\\n     * `sender` is the account that originated the contract call, an admin role\\n     * bearer except when using {AccessControl-_setupRole}.\\n     */\\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Emitted when `account` is revoked `role`.\\n     *\\n     * `sender` is the account that originated the contract call:\\n     *   - if using `revokeRole`, it is the admin role bearer\\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n     */\\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Returns `true` if `account` has been granted `role`.\\n     */\\n    function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n    /**\\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\\n     * {revokeRole}.\\n     *\\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n     */\\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n    /**\\n     * @dev Grants `role` to `account`.\\n     *\\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function grantRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from `account`.\\n     *\\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function revokeRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from the calling account.\\n     *\\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n     * purpose is to provide a mechanism for accounts to lose their privileges\\n     * if they are compromised (such as when a trusted device is misplaced).\\n     *\\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must be `account`.\\n     */\\n    function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\n\\nimport \\\"./IAccessControlManagerV8.sol\\\";\\n\\n/**\\n * @title AccessControlledV8\\n * @author Venus\\n * @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\\n * to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\\n */\\nabstract contract AccessControlledV8 is Initializable, Ownable2StepUpgradeable {\\n    /// @notice Access control manager contract\\n    IAccessControlManagerV8 internal _accessControlManager;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when access control manager contract address is changed\\n    event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager);\\n\\n    /// @notice Thrown when the action is prohibited by AccessControlManager\\n    error Unauthorized(address sender, address calledContract, string methodSignature);\\n\\n    function __AccessControlled_init(address accessControlManager_) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n    }\\n\\n    function __AccessControlled_init_unchained(address accessControlManager_) internal onlyInitializing {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Sets the address of AccessControlManager\\n     * @dev Admin function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     * @custom:event Emits NewAccessControlManager event\\n     * @custom:access Only Governance\\n     */\\n    function setAccessControlManager(address accessControlManager_) external onlyOwner {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Returns the address of the access control manager contract\\n     */\\n    function accessControlManager() external view returns (IAccessControlManagerV8) {\\n        return _accessControlManager;\\n    }\\n\\n    /**\\n     * @dev Internal function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     */\\n    function _setAccessControlManager(address accessControlManager_) internal {\\n        require(address(accessControlManager_) != address(0), \\\"invalid acess control manager address\\\");\\n        address oldAccessControlManager = address(_accessControlManager);\\n        _accessControlManager = IAccessControlManagerV8(accessControlManager_);\\n        emit NewAccessControlManager(oldAccessControlManager, accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Reverts if the call is not allowed by AccessControlManager\\n     * @param signature Method signature\\n     */\\n    function _checkAccessAllowed(string memory signature) internal view {\\n        bool isAllowedToCall = _accessControlManager.isAllowedToCall(msg.sender, signature);\\n\\n        if (!isAllowedToCall) {\\n            revert Unauthorized(msg.sender, address(this), signature);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe0fd441c84ac907cabc88db69ef04f6d7532d770c7e6a1dfe6e7d6305debb49\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport \\\"@openzeppelin/contracts/access/IAccessControl.sol\\\";\\n\\n/**\\n * @title IAccessControlManagerV8\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\\n */\\ninterface IAccessControlManagerV8 is IAccessControl {\\n    function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n    function revokeCallPermission(\\n        address contractAddress,\\n        string calldata functionSig,\\n        address accountToRevoke\\n    ) external;\\n\\n    function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n    function hasPermission(\\n        address account,\\n        address contractAddress,\\n        string calldata functionSig\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xaa29b098440d0b3a131c5ecdf25ce548790c1b5ac7bf9b5c0264b6af6f7a1e0b\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[{"astId":414,"contract":"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol:AccessControlledV8","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":417,"contract":"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol:AccessControlledV8","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":2820,"contract":"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol:AccessControlledV8","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":118,"contract":"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol:AccessControlledV8","label":"_owner","offset":0,"slot":"51","type":"t_address"},{"astId":238,"contract":"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol:AccessControlledV8","label":"__gap","offset":0,"slot":"52","type":"t_array(t_uint256)49_storage"},{"astId":11,"contract":"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol:AccessControlledV8","label":"_pendingOwner","offset":0,"slot":"101","type":"t_address"},{"astId":105,"contract":"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol:AccessControlledV8","label":"__gap","offset":0,"slot":"102","type":"t_array(t_uint256)49_storage"},{"astId":4895,"contract":"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol:AccessControlledV8","label":"_accessControlManager","offset":0,"slot":"151","type":"t_contract(IAccessControlManagerV8)5080"},{"astId":4900,"contract":"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol:AccessControlledV8","label":"__gap","offset":0,"slot":"152","type":"t_array(t_uint256)49_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(IAccessControlManagerV8)5080":{"encoding":"inplace","label":"contract IAccessControlManagerV8","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"errors":{"Unauthorized(address,address,string)":[{"notice":"Thrown when the action is prohibited by AccessControlManager"}]},"events":{"NewAccessControlManager(address,address)":{"notice":"Emitted when access control manager contract address is changed"}},"kind":"user","methods":{"accessControlManager()":{"notice":"Returns the address of the access control manager contract"},"setAccessControlManager(address)":{"notice":"Sets the address of AccessControlManager"}},"notice":"This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13) to integrate access controlled mechanism. It provides initialise methods and verifying access methods.","version":1}}},"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol":{"IAccessControlManagerV8":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","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":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"string","name":"functionSig","type":"string"},{"internalType":"address","name":"accountToPermit","type":"address"}],"name":"giveCallPermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"string","name":"functionSig","type":"string"}],"name":"hasPermission","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"account","type":"address"},{"internalType":"string","name":"functionSig","type":"string"}],"name":"isAllowedToCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"address","name":"contractAddress","type":"address"},{"internalType":"string","name":"functionSig","type":"string"},{"internalType":"address","name":"accountToRevoke","type":"address"}],"name":"revokeCallPermission","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"}],"devdoc":{"author":"Venus","events":{"RoleAdminChanged(bytes32,bytes32,bytes32)":{"details":"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._"},"RoleGranted(bytes32,address,address)":{"details":"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}."},"RoleRevoked(bytes32,address,address)":{"details":"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call:   - if using `revokeRole`, it is the admin role bearer   - if using `renounceRole`, it is the role bearer (i.e. `account`)"}},"kind":"dev","methods":{"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {AccessControl-_setRoleAdmin}."},"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."}},"title":"IAccessControlManagerV8","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getRoleAdmin(bytes32)":"248a9ca3","giveCallPermission(address,string,address)":"584f6b60","grantRole(bytes32,address)":"2f2ff15d","hasPermission(address,address,string)":"82bfd0f0","hasRole(bytes32,address)":"91d14854","isAllowedToCall(address,string)":"18c5e8ab","renounceRole(bytes32,address)":"36568abe","revokeCallPermission(address,string,address)":"545f7a32","revokeRole(bytes32,address)":"d547741f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"accountToPermit\",\"type\":\"address\"}],\"name\":\"giveCallPermission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"}],\"name\":\"hasPermission\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":\"account\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"}],\"name\":\"isAllowedToCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"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\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"accountToRevoke\",\"type\":\"address\"}],\"name\":\"revokeCallPermission\",\"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\"}],\"devdoc\":{\"author\":\"Venus\",\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call:   - if using `revokeRole`, it is the admin role bearer   - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {AccessControl-_setRoleAdmin}.\"},\"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.\"}},\"title\":\"IAccessControlManagerV8\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Interface implemented by the `AccessControlManagerV8` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol\":\"IAccessControlManagerV8\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n    /**\\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n     *\\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n     * {RoleAdminChanged} not being emitted signaling this.\\n     *\\n     * _Available since v3.1._\\n     */\\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n    /**\\n     * @dev Emitted when `account` is granted `role`.\\n     *\\n     * `sender` is the account that originated the contract call, an admin role\\n     * bearer except when using {AccessControl-_setupRole}.\\n     */\\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Emitted when `account` is revoked `role`.\\n     *\\n     * `sender` is the account that originated the contract call:\\n     *   - if using `revokeRole`, it is the admin role bearer\\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n     */\\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Returns `true` if `account` has been granted `role`.\\n     */\\n    function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n    /**\\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\\n     * {revokeRole}.\\n     *\\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n     */\\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n    /**\\n     * @dev Grants `role` to `account`.\\n     *\\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function grantRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from `account`.\\n     *\\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function revokeRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from the calling account.\\n     *\\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n     * purpose is to provide a mechanism for accounts to lose their privileges\\n     * if they are compromised (such as when a trusted device is misplaced).\\n     *\\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must be `account`.\\n     */\\n    function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport \\\"@openzeppelin/contracts/access/IAccessControl.sol\\\";\\n\\n/**\\n * @title IAccessControlManagerV8\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\\n */\\ninterface IAccessControlManagerV8 is IAccessControl {\\n    function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n    function revokeCallPermission(\\n        address contractAddress,\\n        string calldata functionSig,\\n        address accountToRevoke\\n    ) external;\\n\\n    function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n    function hasPermission(\\n        address account,\\n        address contractAddress,\\n        string calldata functionSig\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xaa29b098440d0b3a131c5ecdf25ce548790c1b5ac7bf9b5c0264b6af6f7a1e0b\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Interface implemented by the `AccessControlManagerV8` contract.","version":1}}},"@venusprotocol/isolated-pools/contracts/Comptroller.sol":{"Comptroller":{"abi":[{"inputs":[{"internalType":"address","name":"poolRegistry_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"market","type":"address"},{"internalType":"enum Action","name":"action","type":"uint8"}],"name":"ActionPaused","type":"error"},{"inputs":[],"name":"BorrowActionNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"market","type":"address"},{"internalType":"uint256","name":"cap","type":"uint256"}],"name":"BorrowCapExceeded","type":"error"},{"inputs":[],"name":"BorrowCapIsNotZero","type":"error"},{"inputs":[{"internalType":"uint256","name":"expectedLessThanOrEqualTo","type":"uint256"},{"internalType":"uint256","name":"actual","type":"uint256"}],"name":"CollateralExceedsThreshold","type":"error"},{"inputs":[],"name":"CollateralFactorIsNotZero","type":"error"},{"inputs":[],"name":"ComptrollerMismatch","type":"error"},{"inputs":[],"name":"DelegationStatusUnchanged","type":"error"},{"inputs":[],"name":"EnterMarketActionNotPaused","type":"error"},{"inputs":[],"name":"ExitMarketActionNotPaused","type":"error"},{"inputs":[{"internalType":"uint256","name":"collateralToSeize","type":"uint256"},{"internalType":"uint256","name":"availableCollateral","type":"uint256"}],"name":"InsufficientCollateral","type":"error"},{"inputs":[],"name":"InsufficientLiquidity","type":"error"},{"inputs":[],"name":"InsufficientShortfall","type":"error"},{"inputs":[],"name":"InvalidCollateralFactor","type":"error"},{"inputs":[],"name":"InvalidLiquidationThreshold","type":"error"},{"inputs":[],"name":"LiquidateActionNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"market","type":"address"}],"name":"MarketAlreadyListed","type":"error"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"MarketNotCollateral","type":"error"},{"inputs":[{"internalType":"address","name":"market","type":"address"}],"name":"MarketNotListed","type":"error"},{"inputs":[{"internalType":"uint256","name":"loopsLimit","type":"uint256"},{"internalType":"uint256","name":"requiredLoops","type":"uint256"}],"name":"MaxLoopsLimitExceeded","type":"error"},{"inputs":[{"internalType":"uint256","name":"expectedGreaterThan","type":"uint256"},{"internalType":"uint256","name":"actual","type":"uint256"}],"name":"MinimalCollateralViolated","type":"error"},{"inputs":[],"name":"MintActionNotPaused","type":"error"},{"inputs":[],"name":"NonzeroBorrowBalance","type":"error"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"}],"name":"PriceError","type":"error"},{"inputs":[],"name":"RedeemActionNotPaused","type":"error"},{"inputs":[],"name":"RepayActionNotPaused","type":"error"},{"inputs":[],"name":"SeizeActionNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"SnapshotError","type":"error"},{"inputs":[{"internalType":"address","name":"market","type":"address"},{"internalType":"uint256","name":"cap","type":"uint256"}],"name":"SupplyCapExceeded","type":"error"},{"inputs":[],"name":"SupplyCapIsNotZero","type":"error"},{"inputs":[],"name":"TooMuchRepay","type":"error"},{"inputs":[],"name":"TransferActionNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"calledContract","type":"address"},{"internalType":"string","name":"methodSignature","type":"string"}],"name":"Unauthorized","type":"error"},{"inputs":[{"internalType":"address","name":"expectedSender","type":"address"},{"internalType":"address","name":"actualSender","type":"address"}],"name":"UnexpectedSender","type":"error"},{"inputs":[],"name":"ZeroAddressNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract VToken","name":"vToken","type":"address"},{"indexed":false,"internalType":"enum Action","name":"action","type":"uint8"},{"indexed":false,"internalType":"bool","name":"pauseState","type":"bool"}],"name":"ActionPausedMarket","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"approver","type":"address"},{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"DelegateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vToken","type":"address"},{"indexed":false,"internalType":"bool","name":"enable","type":"bool"}],"name":"IsForcedLiquidationEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract VToken","name":"vToken","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MarketEntered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract VToken","name":"vToken","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MarketExited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract VToken","name":"vToken","type":"address"}],"name":"MarketSupported","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vToken","type":"address"}],"name":"MarketUnlisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMaxLoopsLimit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newmaxLoopsLimit","type":"uint256"}],"name":"MaxLoopsLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAccessControlManager","type":"address"},{"indexed":false,"internalType":"address","name":"newAccessControlManager","type":"address"}],"name":"NewAccessControlManager","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract VToken","name":"vToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"newBorrowCap","type":"uint256"}],"name":"NewBorrowCap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldCloseFactorMantissa","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newCloseFactorMantissa","type":"uint256"}],"name":"NewCloseFactor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract VToken","name":"vToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldCollateralFactorMantissa","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newCollateralFactorMantissa","type":"uint256"}],"name":"NewCollateralFactor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldLiquidationIncentiveMantissa","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newLiquidationIncentiveMantissa","type":"uint256"}],"name":"NewLiquidationIncentive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract VToken","name":"vToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldLiquidationThresholdMantissa","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newLiquidationThresholdMantissa","type":"uint256"}],"name":"NewLiquidationThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMinLiquidatableCollateral","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMinLiquidatableCollateral","type":"uint256"}],"name":"NewMinLiquidatableCollateral","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract ResilientOracleInterface","name":"oldPriceOracle","type":"address"},{"indexed":false,"internalType":"contract ResilientOracleInterface","name":"newPriceOracle","type":"address"}],"name":"NewPriceOracle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IPrime","name":"oldPrimeToken","type":"address"},{"indexed":false,"internalType":"contract IPrime","name":"newPrimeToken","type":"address"}],"name":"NewPrimeToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rewardsDistributor","type":"address"},{"indexed":true,"internalType":"address","name":"rewardToken","type":"address"}],"name":"NewRewardsDistributor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract VToken","name":"vToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"newSupplyCap","type":"uint256"}],"name":"NewSupplyCap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accessControlManager","outputs":[{"internalType":"contract IAccessControlManagerV8","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"accountAssets","outputs":[{"internalType":"contract VToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"market","type":"address"},{"internalType":"enum Action","name":"action","type":"uint8"}],"name":"actionPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract RewardsDistributor","name":"_rewardsDistributor","type":"address"}],"name":"addRewardsDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allMarkets","outputs":[{"internalType":"contract VToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"approvedDelegates","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"borrowCaps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"borrowAmount","type":"uint256"}],"name":"borrowVerify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"contract VToken","name":"vToken","type":"address"}],"name":"checkMembership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"closeFactorMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"vTokens","type":"address[]"}],"name":"enterMarkets","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vTokenAddress","type":"address"}],"name":"exitMarket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountLiquidity","outputs":[{"internalType":"uint256","name":"error","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"shortfall","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllMarkets","outputs":[{"internalType":"contract VToken[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAssetsIn","outputs":[{"internalType":"contract VToken[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getBorrowingPower","outputs":[{"internalType":"uint256","name":"error","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"shortfall","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"vTokenModify","type":"address"},{"internalType":"uint256","name":"redeemTokens","type":"uint256"},{"internalType":"uint256","name":"borrowAmount","type":"uint256"}],"name":"getHypotheticalAccountLiquidity","outputs":[{"internalType":"uint256","name":"error","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"shortfall","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardDistributors","outputs":[{"internalType":"contract RewardsDistributor[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"}],"name":"getRewardsByMarket","outputs":[{"components":[{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"uint256","name":"supplySpeed","type":"uint256"},{"internalType":"uint256","name":"borrowSpeed","type":"uint256"}],"internalType":"struct ComptrollerStorage.RewardSpeeds[]","name":"rewardSpeeds","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"healAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"loopLimit","type":"uint256"},{"internalType":"address","name":"accessControlManager","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isComptroller","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isForcedLiquidationEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract VToken","name":"vToken","type":"address"}],"name":"isMarketListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"},{"components":[{"internalType":"contract VToken","name":"vTokenCollateral","type":"address"},{"internalType":"contract VToken","name":"vTokenBorrowed","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"}],"internalType":"struct ComptrollerStorage.LiquidationOrder[]","name":"orders","type":"tuple[]"}],"name":"liquidateAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vTokenBorrowed","type":"address"},{"internalType":"address","name":"vTokenCollateral","type":"address"},{"internalType":"address","name":"liquidator","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"actualRepayAmount","type":"uint256"},{"internalType":"uint256","name":"seizeTokens","type":"uint256"}],"name":"liquidateBorrowVerify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vTokenBorrowed","type":"address"},{"internalType":"address","name":"vTokenCollateral","type":"address"},{"internalType":"uint256","name":"actualRepayAmount","type":"uint256"}],"name":"liquidateCalculateSeizeTokens","outputs":[{"internalType":"uint256","name":"error","type":"uint256"},{"internalType":"uint256","name":"tokensToSeize","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidationIncentiveMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"markets","outputs":[{"internalType":"bool","name":"isListed","type":"bool"},{"internalType":"uint256","name":"collateralFactorMantissa","type":"uint256"},{"internalType":"uint256","name":"liquidationThresholdMantissa","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLoopsLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minLiquidatableCollateral","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"minter","type":"address"},{"internalType":"uint256","name":"actualMintAmount","type":"uint256"},{"internalType":"uint256","name":"mintTokens","type":"uint256"}],"name":"mintVerify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"contract ResilientOracleInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"borrowAmount","type":"uint256"}],"name":"preBorrowHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vTokenBorrowed","type":"address"},{"internalType":"address","name":"vTokenCollateral","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"},{"internalType":"bool","name":"skipLiquidityCheck","type":"bool"}],"name":"preLiquidateHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"minter","type":"address"},{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"preMintHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"redeemer","type":"address"},{"internalType":"uint256","name":"redeemTokens","type":"uint256"}],"name":"preRedeemHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"borrower","type":"address"}],"name":"preRepayHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vTokenCollateral","type":"address"},{"internalType":"address","name":"seizerContract","type":"address"},{"internalType":"address","name":"liquidator","type":"address"},{"internalType":"address","name":"borrower","type":"address"}],"name":"preSeizeHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"transferTokens","type":"uint256"}],"name":"preTransferHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"prime","outputs":[{"internalType":"contract IPrime","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"redeemer","type":"address"},{"internalType":"uint256","name":"redeemAmount","type":"uint256"},{"internalType":"uint256","name":"redeemTokens","type":"uint256"}],"name":"redeemVerify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"payer","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"actualRepayAmount","type":"uint256"},{"internalType":"uint256","name":"borrowerIndex","type":"uint256"}],"name":"repayBorrowVerify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vTokenCollateral","type":"address"},{"internalType":"address","name":"vTokenBorrowed","type":"address"},{"internalType":"address","name":"liquidator","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"seizeTokens","type":"uint256"}],"name":"seizeVerify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"accessControlManager_","type":"address"}],"name":"setAccessControlManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract VToken[]","name":"marketsList","type":"address[]"},{"internalType":"enum Action[]","name":"actionsList","type":"uint8[]"},{"internalType":"bool","name":"paused","type":"bool"}],"name":"setActionsPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCloseFactorMantissa","type":"uint256"}],"name":"setCloseFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract VToken","name":"vToken","type":"address"},{"internalType":"uint256","name":"newCollateralFactorMantissa","type":"uint256"},{"internalType":"uint256","name":"newLiquidationThresholdMantissa","type":"uint256"}],"name":"setCollateralFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vTokenBorrowed","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setForcedLiquidation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidationIncentiveMantissa","type":"uint256"}],"name":"setLiquidationIncentive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract VToken[]","name":"vTokens","type":"address[]"},{"internalType":"uint256[]","name":"newBorrowCaps","type":"uint256[]"}],"name":"setMarketBorrowCaps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract VToken[]","name":"vTokens","type":"address[]"},{"internalType":"uint256[]","name":"newSupplyCaps","type":"uint256[]"}],"name":"setMarketSupplyCaps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setMaxLoopsLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinLiquidatableCollateral","type":"uint256"}],"name":"setMinLiquidatableCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ResilientOracleInterface","name":"newOracle","type":"address"}],"name":"setPriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPrime","name":"_prime","type":"address"}],"name":"setPrimeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"supplyCaps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract VToken","name":"vToken","type":"address"}],"name":"supportMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"transferTokens","type":"uint256"}],"name":"transferVerify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"market","type":"address"}],"name":"unlistMarket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegate","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"updateDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"updatePrices","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Venus","events":{"Initialized(uint8)":{"details":"Triggered when the contract has been initialized or reinitialized."}},"kind":"dev","methods":{"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"actionPaused(address,uint8)":{"params":{"action":"Action to check","market":"vToken address"},"returns":{"_0":"paused True if the action is paused otherwise false"}},"addRewardsDistributor(address)":{"custom:access":"Only Governance","custom:event":"Emits NewRewardsDistributor with distributor address","details":"Only callable by the admin","params":{"_rewardsDistributor":"Address of the RewardDistributor contract to add"}},"borrowVerify(address,address,uint256)":{"params":{"borrowAmount":"The amount of the underlying asset requested to borrow","borrower":"The address borrowing the underlying","vToken":"Asset whose underlying is being borrowed"}},"checkMembership(address,address)":{"params":{"account":"The address of the account to check","vToken":"The vToken to check"},"returns":{"_0":"True if the account is in the market specified, otherwise false."}},"constructor":{"custom:error":"ZeroAddressNotAllowed is thrown when pool registry address is zero","custom:oz-upgrades-unsafe-allow":"constructor","params":{"poolRegistry_":"Pool registry address"}},"enterMarkets(address[])":{"custom:access":"Not restricted","custom:error":"ActionPaused error is thrown if entering any of the markets is pausedMarketNotListed error is thrown if any of the markets is not listed","custom:event":"MarketEntered is emitted for each market on success","params":{"vTokens":"The list of addresses of the vToken markets to be enabled"},"returns":{"_0":"errors An array of NO_ERROR for compatibility with Venus core tooling"}},"exitMarket(address)":{"custom:access":"Not restricted","custom:error":"ActionPaused error is thrown if exiting the market is pausedNonzeroBorrowBalance error is thrown if the user has an outstanding borrow in this marketMarketNotListed error is thrown when the market is not listedInsufficientLiquidity error is thrown if exiting the market would lead to user's insolvencySnapshotError is thrown if some vToken fails to return the account's supply and borrowsPriceError is thrown if the oracle returns an incorrect price for some asset","custom:event":"MarketExited is emitted on success","details":"Sender must not have an outstanding borrow balance in the asset,  or be providing necessary collateral for an outstanding borrow.","params":{"vTokenAddress":"The address of the asset to be removed"},"returns":{"_0":"error Always NO_ERROR for compatibility with Venus core tooling"}},"getAccountLiquidity(address)":{"details":"The interface of this function is intentionally kept compatible with Compound and Venus Core","params":{"account":"The account get liquidity for"},"returns":{"error":"Always NO_ERROR for compatibility with Venus core tooling","liquidity":"Account liquidity in excess of liquidation threshold requirements,","shortfall":"Account shortfall below liquidation threshold requirements"}},"getAllMarkets()":{"details":"The automatic getter may be used to access an individual market.","returns":{"_0":"markets The list of market addresses"}},"getAssetsIn(address)":{"params":{"account":"The address of the account to pull assets for"},"returns":{"_0":"A list with the assets the account has entered"}},"getBorrowingPower(address)":{"details":"The interface of this function is intentionally kept compatible with Compound and Venus Core","params":{"account":"The account get liquidity for"},"returns":{"error":"Always NO_ERROR for compatibility with Venus core tooling","liquidity":"Account liquidity in excess of collateral requirements,","shortfall":"Account shortfall below collateral requirements"}},"getHypotheticalAccountLiquidity(address,address,uint256,uint256)":{"details":"The interface of this function is intentionally kept compatible with Compound and Venus Core","params":{"account":"The account to determine liquidity for","borrowAmount":"The amount of underlying to hypothetically borrow","redeemTokens":"The number of tokens to hypothetically redeem","vTokenModify":"The market to hypothetically redeem/borrow in"},"returns":{"error":"Always NO_ERROR for compatibility with Venus core tooling","liquidity":"Hypothetical account liquidity in excess of collateral requirements,","shortfall":"Hypothetical account shortfall below collateral requirements"}},"getRewardDistributors()":{"returns":{"_0":"Array of RewardDistributor addresses"}},"getRewardsByMarket(address)":{"params":{"vToken":"The vToken to get the reward speeds for"},"returns":{"rewardSpeeds":"Array of total supply and borrow speeds and reward token for all reward distributors"}},"healAccount(address)":{"custom:access":"Not restricted","custom:error":"CollateralExceedsThreshold error is thrown when the collateral is too big for healingSnapshotError is thrown if some vToken fails to return the account's supply and borrowsPriceError is thrown if the oracle returns an incorrect price for some asset","params":{"user":"account to heal"}},"initialize(uint256,address)":{"params":{"accessControlManager":"Access control manager contract address","loopLimit":"Limit for the loops can iterate to avoid the DOS"}},"isComptroller()":{"returns":{"_0":"Always true"}},"isMarketListed(address)":{"params":{"vToken":"vToken Address for the market to check"},"returns":{"_0":"listed True if listed otherwise false"}},"liquidateAccount(address,(address,address,uint256)[])":{"custom:access":"Not restricted","custom:error":"CollateralExceedsThreshold error is thrown when the collateral is too big for a batch liquidationInsufficientCollateral error is thrown when there is not enough collateral to cover the debtSnapshotError is thrown if some vToken fails to return the account's supply and borrowsPriceError is thrown if the oracle returns an incorrect price for some asset","params":{"borrower":"the borrower address","orders":"an array of liquidation orders"}},"liquidateBorrowVerify(address,address,address,address,uint256,uint256)":{"params":{"actualRepayAmount":"The amount of underlying being repaid","borrower":"The address of the borrower","liquidator":"The address repaying the borrow and seizing the collateral","seizeTokens":"The amount of collateral token that will be seized","vTokenBorrowed":"Asset which was borrowed by the borrower","vTokenCollateral":"Asset which was used as collateral and will be seized"}},"liquidateCalculateSeizeTokens(address,address,uint256)":{"custom:error":"PriceError if the oracle returns an invalid price","details":"Used in liquidation (called in vToken.liquidateBorrowFresh)","params":{"actualRepayAmount":"The amount of vTokenBorrowed underlying to convert into vTokenCollateral tokens","vTokenBorrowed":"The address of the borrowed vToken","vTokenCollateral":"The address of the collateral vToken"},"returns":{"error":"Always NO_ERROR for compatibility with Venus core tooling","tokensToSeize":"Number of vTokenCollateral tokens to be seized in a liquidation"}},"mintVerify(address,address,uint256,uint256)":{"params":{"actualMintAmount":"The amount of the underlying asset being minted","mintTokens":"The number of tokens being minted","minter":"The address minting the tokens","vToken":"Asset being minted"}},"owner()":{"details":"Returns the address of the current owner."},"pendingOwner()":{"details":"Returns the address of the pending owner."},"preLiquidateHook(address,address,address,uint256,bool)":{"custom:error":"ActionPaused error is thrown if liquidations are paused in this marketMarketNotListed error is thrown if either collateral or borrowed token is not listedTooMuchRepay error is thrown if the liquidator is trying to repay more than allowed by close factorMinimalCollateralViolated is thrown if the users' total collateral is lower than the threshold for non-batch liquidationsInsufficientShortfall is thrown when trying to liquidate a healthy accountSnapshotError is thrown if some vToken fails to return the account's supply and borrowsPriceError is thrown if the oracle returns an incorrect price for some asset","params":{"borrower":"The address of the borrower","repayAmount":"The amount of underlying being repaid","skipLiquidityCheck":"Allows the borrow to be liquidated regardless of the account liquidity","vTokenBorrowed":"Asset which was borrowed by the borrower","vTokenCollateral":"Asset which was used as collateral and will be seized"}},"preMintHook(address,address,uint256)":{"custom:access":"Not restricted","custom:error":"ActionPaused error is thrown if supplying to this market is pausedMarketNotListed error is thrown when the market is not listedSupplyCapExceeded error is thrown if the total supply exceeds the cap after minting","params":{"mintAmount":"The amount of underlying being supplied to the market in exchange for tokens","minter":"The account which would get the minted tokens","vToken":"The market to verify the mint against"}},"preRedeemHook(address,address,uint256)":{"custom:access":"Not restricted","custom:error":"ActionPaused error is thrown if withdrawals are paused in this marketMarketNotListed error is thrown when the market is not listedInsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvencySnapshotError is thrown if some vToken fails to return the account's supply and borrowsPriceError is thrown if the oracle returns an incorrect price for some asset","params":{"redeemTokens":"The number of vTokens to exchange for the underlying asset in the market","redeemer":"The account which would redeem the tokens","vToken":"The market to verify the redeem against"}},"preRepayHook(address,address)":{"custom:access":"Not restricted","custom:error":"ActionPaused error is thrown if repayments are paused in this marketMarketNotListed error is thrown when the market is not listed","params":{"borrower":"The account which would borrowed the asset","vToken":"The market to verify the repay against"}},"preSeizeHook(address,address,address,address)":{"custom:access":"Not restricted","custom:error":"ActionPaused error is thrown if seizing this type of collateral is pausedMarketNotListed error is thrown if either collateral or borrowed token is not listedComptrollerMismatch error is when seizer contract or seized asset belong to different pools","params":{"borrower":"The address of the borrower","liquidator":"The address repaying the borrow and seizing the collateral","seizerContract":"Contract that tries to seize the asset (either borrowed vToken or Comptroller)","vTokenCollateral":"Asset which was used as collateral and will be seized"}},"preTransferHook(address,address,address,uint256)":{"custom:access":"Not restricted","custom:error":"ActionPaused error is thrown if withdrawals are paused in this marketMarketNotListed error is thrown when the market is not listedInsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvencySnapshotError is thrown if some vToken fails to return the account's supply and borrowsPriceError is thrown if the oracle returns an incorrect price for some asset","params":{"dst":"The account which receives the tokens","src":"The account which sources the tokens","transferTokens":"The number of vTokens to transfer","vToken":"The market to verify the transfer against"}},"redeemVerify(address,address,uint256,uint256)":{"params":{"redeemAmount":"The amount of the underlying asset being redeemed","redeemTokens":"The number of tokens being redeemed","redeemer":"The address redeeming the tokens","vToken":"Asset being redeemed"}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"repayBorrowVerify(address,address,address,uint256,uint256)":{"params":{"actualRepayAmount":"The amount of underlying being repaid","borrower":"The address of the borrower","payer":"The address repaying the borrow","vToken":"Asset being repaid"}},"seizeVerify(address,address,address,address,uint256)":{"params":{"borrower":"The address of the borrower","liquidator":"The address repaying the borrow and seizing the collateral","seizeTokens":"The number of collateral tokens to seize","vTokenBorrowed":"Asset which was borrowed by the borrower","vTokenCollateral":"Asset which was used as collateral and will be seized"}},"setAccessControlManager(address)":{"custom:access":"Only Governance","custom:event":"Emits NewAccessControlManager event","details":"Admin function to set address of AccessControlManager","params":{"accessControlManager_":"The new address of the AccessControlManager"}},"setActionsPaused(address[],uint8[],bool)":{"custom:access":"Controlled by AccessControlManager","details":"This function is restricted by the AccessControlManager","params":{"actionsList":"List of action ids to pause/unpause","marketsList":"Markets to pause/unpause the actions on","paused":"The new paused state (true=paused, false=unpaused)"}},"setCloseFactor(uint256)":{"custom:access":"Controlled by AccessControlManager","custom:event":"Emits NewCloseFactor on success","params":{"newCloseFactorMantissa":"New close factor, scaled by 1e18"}},"setCollateralFactor(address,uint256,uint256)":{"custom:access":"Controlled by AccessControlManager","custom:error":"MarketNotListed error is thrown when the market is not listedInvalidCollateralFactor error is thrown when collateral factor is too highInvalidLiquidationThreshold error is thrown when liquidation threshold is lower than collateral factorPriceError is thrown when the oracle returns an invalid price for the asset","custom:event":"Emits NewCollateralFactor when collateral factor is updated    and NewLiquidationThreshold when liquidation threshold is updated","details":"This function is restricted by the AccessControlManager","params":{"newCollateralFactorMantissa":"The new collateral factor, scaled by 1e18","newLiquidationThresholdMantissa":"The new liquidation threshold, scaled by 1e18","vToken":"The market to set the factor on"}},"setForcedLiquidation(address,bool)":{"params":{"enable":"Whether to enable forced liquidations","vTokenBorrowed":"Borrowed vToken"}},"setLiquidationIncentive(uint256)":{"custom:access":"Controlled by AccessControlManager","custom:event":"Emits NewLiquidationIncentive on success","details":"This function is restricted by the AccessControlManager","params":{"newLiquidationIncentiveMantissa":"New liquidationIncentive scaled by 1e18"}},"setMarketBorrowCaps(address[],uint256[])":{"custom:access":"Controlled by AccessControlManager","details":"This function is restricted by the AccessControlManagerA borrow cap of type(uint256).max corresponds to unlimited borrowing.Borrow caps smaller than the current total borrows are accepted. This way, new borrows will not be allowed until the total borrows amount goes below the new borrow cap","params":{"newBorrowCaps":"The new borrow cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited borrowing.","vTokens":"The addresses of the markets (tokens) to change the borrow caps for"}},"setMarketSupplyCaps(address[],uint256[])":{"custom:access":"Controlled by AccessControlManager","details":"This function is restricted by the AccessControlManagerA supply cap of type(uint256).max corresponds to unlimited supply.Supply caps smaller than the current total supplies are accepted. This way, new supplies will not be allowed until the total supplies amount goes below the new supply cap","params":{"newSupplyCaps":"The new supply cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited supply.","vTokens":"The addresses of the markets (tokens) to change the supply caps for"}},"setMaxLoopsLimit(uint256)":{"params":{"limit":"Limit for the max loops can execute at a time"}},"setMinLiquidatableCollateral(uint256)":{"custom:access":"Controlled by AccessControlManager","details":"This function is restricted by the AccessControlManager","params":{"newMinLiquidatableCollateral":"The new min liquidatable collateral (in USD)."}},"setPriceOracle(address)":{"custom:error":"ZeroAddressNotAllowed is thrown when the new oracle address is zero","custom:event":"Emits NewPriceOracle on success","details":"Only callable by the admin","params":{"newOracle":"Address of the new price oracle to set"}},"setPrimeToken(address)":{"params":{"_prime":"Address of the Prime contract"}},"supportMarket(address)":{"custom:access":"Only PoolRegistry","custom:error":"MarketAlreadyListed is thrown if the market is already listed in this pool","details":"Only callable by the PoolRegistry","params":{"vToken":"The address of the market (token) to list"}},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."},"transferVerify(address,address,address,uint256)":{"params":{"dst":"The account which receives the tokens","src":"The account which sources the tokens","transferTokens":"The number of vTokens to transfer","vToken":"Asset being transferred"}},"unlistMarket(address)":{"custom:error":"MarketNotListed error is thrown when the market is not listedBorrowActionNotPaused error is thrown if borrow action is not pausedMintActionNotPaused error is thrown if mint action is not pausedRedeemActionNotPaused error is thrown if redeem action is not pausedRepayActionNotPaused error is thrown if repay action is not pausedEnterMarketActionNotPaused error is thrown if enter market action is not pausedLiquidateActionNotPaused error is thrown if liquidate action is not pausedBorrowCapIsNotZero error is thrown if borrow cap is not zeroSupplyCapIsNotZero error is thrown if supply cap is not zeroCollateralFactorIsNotZero error is thrown if collateral factor is not zero","custom:event":"MarketUnlisted is emitted on success","details":"Checks if all actions are paused, borrow/supply caps is set to 0 and collateral factor is to 0.","params":{"market":"The address of the market (token) to unlist"},"returns":{"_0":"uint256 Always NO_ERROR for compatibility with Venus core tooling"}},"updateDelegate(address,bool)":{"custom:access":"Not restricted","custom:error":"ZeroAddressNotAllowed is thrown when delegate address is zeroDelegationStatusUnchanged is thrown if approval status is already set to the requested value","custom:event":"DelegateUpdated emits on success","params":{"approved":"Whether to grant (true) or revoke (false) the borrowing or redeeming rights","delegate":"The address to update the rights for"}},"updatePrices(address)":{"params":{"account":"Address of the account to get associated tokens with"}}},"stateVariables":{"poolRegistry":{"custom:oz-upgrades-unsafe-allow":"state-variable-immutable"}},"title":"Comptroller","version":1},"evm":{"bytecode":{"functionDebugData":{"@_5412":{"entryPoint":null,"id":5412,"parameterSlots":1,"returnSlots":0},"@_disableInitializers_557":{"entryPoint":125,"id":557,"parameterSlots":0,"returnSlots":0},"@ensureNonzeroAddress_16143":{"entryPoint":83,"id":16143,"parameterSlots":1,"returnSlots":0},"abi_decode_t_address_fromMemory":{"entryPoint":299,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":310,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_uint8_to_t_uint8_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":351,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":426,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_address":{"entryPoint":260,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_address":{"entryPoint":279,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:2833:69","nodeType":"YulBlock","src":"0:2833:69","statements":[{"body":{"nativeSrc":"47:35:69","nodeType":"YulBlock","src":"47:35:69","statements":[{"nativeSrc":"57:19:69","nodeType":"YulAssignment","src":"57:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"73:2:69","nodeType":"YulLiteral","src":"73:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"67:5:69","nodeType":"YulIdentifier","src":"67:5:69"},"nativeSrc":"67:9:69","nodeType":"YulFunctionCall","src":"67:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"57:6:69","nodeType":"YulIdentifier","src":"57:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"7:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"40:6:69","nodeType":"YulTypedName","src":"40:6:69","type":""}],"src":"7:75:69"},{"body":{"nativeSrc":"177:28:69","nodeType":"YulBlock","src":"177:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"194:1:69","nodeType":"YulLiteral","src":"194:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"197:1:69","nodeType":"YulLiteral","src":"197:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"187:6:69","nodeType":"YulIdentifier","src":"187:6:69"},"nativeSrc":"187:12:69","nodeType":"YulFunctionCall","src":"187:12:69"},"nativeSrc":"187:12:69","nodeType":"YulExpressionStatement","src":"187:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"88:117:69","nodeType":"YulFunctionDefinition","src":"88:117:69"},{"body":{"nativeSrc":"300:28:69","nodeType":"YulBlock","src":"300:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"317:1:69","nodeType":"YulLiteral","src":"317:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"320:1:69","nodeType":"YulLiteral","src":"320:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},"nativeSrc":"310:12:69","nodeType":"YulFunctionCall","src":"310:12:69"},"nativeSrc":"310:12:69","nodeType":"YulExpressionStatement","src":"310:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"211:117:69","nodeType":"YulFunctionDefinition","src":"211:117:69"},{"body":{"nativeSrc":"379:81:69","nodeType":"YulBlock","src":"379:81:69","statements":[{"nativeSrc":"389:65:69","nodeType":"YulAssignment","src":"389:65:69","value":{"arguments":[{"name":"value","nativeSrc":"404:5:69","nodeType":"YulIdentifier","src":"404:5:69"},{"kind":"number","nativeSrc":"411:42:69","nodeType":"YulLiteral","src":"411:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"400:3:69","nodeType":"YulIdentifier","src":"400:3:69"},"nativeSrc":"400:54:69","nodeType":"YulFunctionCall","src":"400:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"389:7:69","nodeType":"YulIdentifier","src":"389:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"334:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"361:5:69","nodeType":"YulTypedName","src":"361:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"371:7:69","nodeType":"YulTypedName","src":"371:7:69","type":""}],"src":"334:126:69"},{"body":{"nativeSrc":"511:51:69","nodeType":"YulBlock","src":"511:51:69","statements":[{"nativeSrc":"521:35:69","nodeType":"YulAssignment","src":"521:35:69","value":{"arguments":[{"name":"value","nativeSrc":"550:5:69","nodeType":"YulIdentifier","src":"550:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"532:17:69","nodeType":"YulIdentifier","src":"532:17:69"},"nativeSrc":"532:24:69","nodeType":"YulFunctionCall","src":"532:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"521:7:69","nodeType":"YulIdentifier","src":"521:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"466:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"493:5:69","nodeType":"YulTypedName","src":"493:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"503:7:69","nodeType":"YulTypedName","src":"503:7:69","type":""}],"src":"466:96:69"},{"body":{"nativeSrc":"611:79:69","nodeType":"YulBlock","src":"611:79:69","statements":[{"body":{"nativeSrc":"668:16:69","nodeType":"YulBlock","src":"668:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"677:1:69","nodeType":"YulLiteral","src":"677:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"680:1:69","nodeType":"YulLiteral","src":"680:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"670:6:69","nodeType":"YulIdentifier","src":"670:6:69"},"nativeSrc":"670:12:69","nodeType":"YulFunctionCall","src":"670:12:69"},"nativeSrc":"670:12:69","nodeType":"YulExpressionStatement","src":"670:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"634:5:69","nodeType":"YulIdentifier","src":"634:5:69"},{"arguments":[{"name":"value","nativeSrc":"659:5:69","nodeType":"YulIdentifier","src":"659:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"641:17:69","nodeType":"YulIdentifier","src":"641:17:69"},"nativeSrc":"641:24:69","nodeType":"YulFunctionCall","src":"641:24:69"}],"functionName":{"name":"eq","nativeSrc":"631:2:69","nodeType":"YulIdentifier","src":"631:2:69"},"nativeSrc":"631:35:69","nodeType":"YulFunctionCall","src":"631:35:69"}],"functionName":{"name":"iszero","nativeSrc":"624:6:69","nodeType":"YulIdentifier","src":"624:6:69"},"nativeSrc":"624:43:69","nodeType":"YulFunctionCall","src":"624:43:69"},"nativeSrc":"621:63:69","nodeType":"YulIf","src":"621:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"568:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"604:5:69","nodeType":"YulTypedName","src":"604:5:69","type":""}],"src":"568:122:69"},{"body":{"nativeSrc":"759:80:69","nodeType":"YulBlock","src":"759:80:69","statements":[{"nativeSrc":"769:22:69","nodeType":"YulAssignment","src":"769:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"784:6:69","nodeType":"YulIdentifier","src":"784:6:69"}],"functionName":{"name":"mload","nativeSrc":"778:5:69","nodeType":"YulIdentifier","src":"778:5:69"},"nativeSrc":"778:13:69","nodeType":"YulFunctionCall","src":"778:13:69"},"variableNames":[{"name":"value","nativeSrc":"769:5:69","nodeType":"YulIdentifier","src":"769:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"827:5:69","nodeType":"YulIdentifier","src":"827:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"800:26:69","nodeType":"YulIdentifier","src":"800:26:69"},"nativeSrc":"800:33:69","nodeType":"YulFunctionCall","src":"800:33:69"},"nativeSrc":"800:33:69","nodeType":"YulExpressionStatement","src":"800:33:69"}]},"name":"abi_decode_t_address_fromMemory","nativeSrc":"696:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"737:6:69","nodeType":"YulTypedName","src":"737:6:69","type":""},{"name":"end","nativeSrc":"745:3:69","nodeType":"YulTypedName","src":"745:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"753:5:69","nodeType":"YulTypedName","src":"753:5:69","type":""}],"src":"696:143:69"},{"body":{"nativeSrc":"922:274:69","nodeType":"YulBlock","src":"922:274:69","statements":[{"body":{"nativeSrc":"968:83:69","nodeType":"YulBlock","src":"968:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"970:77:69","nodeType":"YulIdentifier","src":"970:77:69"},"nativeSrc":"970:79:69","nodeType":"YulFunctionCall","src":"970:79:69"},"nativeSrc":"970:79:69","nodeType":"YulExpressionStatement","src":"970:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"943:7:69","nodeType":"YulIdentifier","src":"943:7:69"},{"name":"headStart","nativeSrc":"952:9:69","nodeType":"YulIdentifier","src":"952:9:69"}],"functionName":{"name":"sub","nativeSrc":"939:3:69","nodeType":"YulIdentifier","src":"939:3:69"},"nativeSrc":"939:23:69","nodeType":"YulFunctionCall","src":"939:23:69"},{"kind":"number","nativeSrc":"964:2:69","nodeType":"YulLiteral","src":"964:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"935:3:69","nodeType":"YulIdentifier","src":"935:3:69"},"nativeSrc":"935:32:69","nodeType":"YulFunctionCall","src":"935:32:69"},"nativeSrc":"932:119:69","nodeType":"YulIf","src":"932:119:69"},{"nativeSrc":"1061:128:69","nodeType":"YulBlock","src":"1061:128:69","statements":[{"nativeSrc":"1076:15:69","nodeType":"YulVariableDeclaration","src":"1076:15:69","value":{"kind":"number","nativeSrc":"1090:1:69","nodeType":"YulLiteral","src":"1090:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"1080:6:69","nodeType":"YulTypedName","src":"1080:6:69","type":""}]},{"nativeSrc":"1105:74:69","nodeType":"YulAssignment","src":"1105:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1151:9:69","nodeType":"YulIdentifier","src":"1151:9:69"},{"name":"offset","nativeSrc":"1162:6:69","nodeType":"YulIdentifier","src":"1162:6:69"}],"functionName":{"name":"add","nativeSrc":"1147:3:69","nodeType":"YulIdentifier","src":"1147:3:69"},"nativeSrc":"1147:22:69","nodeType":"YulFunctionCall","src":"1147:22:69"},{"name":"dataEnd","nativeSrc":"1171:7:69","nodeType":"YulIdentifier","src":"1171:7:69"}],"functionName":{"name":"abi_decode_t_address_fromMemory","nativeSrc":"1115:31:69","nodeType":"YulIdentifier","src":"1115:31:69"},"nativeSrc":"1115:64:69","nodeType":"YulFunctionCall","src":"1115:64:69"},"variableNames":[{"name":"value0","nativeSrc":"1105:6:69","nodeType":"YulIdentifier","src":"1105:6:69"}]}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nativeSrc":"845:351:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"892:9:69","nodeType":"YulTypedName","src":"892:9:69","type":""},{"name":"dataEnd","nativeSrc":"903:7:69","nodeType":"YulTypedName","src":"903:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"915:6:69","nodeType":"YulTypedName","src":"915:6:69","type":""}],"src":"845:351:69"},{"body":{"nativeSrc":"1298:73:69","nodeType":"YulBlock","src":"1298:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"1315:3:69","nodeType":"YulIdentifier","src":"1315:3:69"},{"name":"length","nativeSrc":"1320:6:69","nodeType":"YulIdentifier","src":"1320:6:69"}],"functionName":{"name":"mstore","nativeSrc":"1308:6:69","nodeType":"YulIdentifier","src":"1308:6:69"},"nativeSrc":"1308:19:69","nodeType":"YulFunctionCall","src":"1308:19:69"},"nativeSrc":"1308:19:69","nodeType":"YulExpressionStatement","src":"1308:19:69"},{"nativeSrc":"1336:29:69","nodeType":"YulAssignment","src":"1336:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"1355:3:69","nodeType":"YulIdentifier","src":"1355:3:69"},{"kind":"number","nativeSrc":"1360:4:69","nodeType":"YulLiteral","src":"1360:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1351:3:69","nodeType":"YulIdentifier","src":"1351:3:69"},"nativeSrc":"1351:14:69","nodeType":"YulFunctionCall","src":"1351:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"1336:11:69","nodeType":"YulIdentifier","src":"1336:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"1202:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"1270:3:69","nodeType":"YulTypedName","src":"1270:3:69","type":""},{"name":"length","nativeSrc":"1275:6:69","nodeType":"YulTypedName","src":"1275:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"1286:11:69","nodeType":"YulTypedName","src":"1286:11:69","type":""}],"src":"1202:169:69"},{"body":{"nativeSrc":"1483:120:69","nodeType":"YulBlock","src":"1483:120:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"1505:6:69","nodeType":"YulIdentifier","src":"1505:6:69"},{"kind":"number","nativeSrc":"1513:1:69","nodeType":"YulLiteral","src":"1513:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1501:3:69","nodeType":"YulIdentifier","src":"1501:3:69"},"nativeSrc":"1501:14:69","nodeType":"YulFunctionCall","src":"1501:14:69"},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320696e697469","kind":"string","nativeSrc":"1517:34:69","nodeType":"YulLiteral","src":"1517:34:69","type":"","value":"Initializable: contract is initi"}],"functionName":{"name":"mstore","nativeSrc":"1494:6:69","nodeType":"YulIdentifier","src":"1494:6:69"},"nativeSrc":"1494:58:69","nodeType":"YulFunctionCall","src":"1494:58:69"},"nativeSrc":"1494:58:69","nodeType":"YulExpressionStatement","src":"1494:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"1573:6:69","nodeType":"YulIdentifier","src":"1573:6:69"},{"kind":"number","nativeSrc":"1581:2:69","nodeType":"YulLiteral","src":"1581:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1569:3:69","nodeType":"YulIdentifier","src":"1569:3:69"},"nativeSrc":"1569:15:69","nodeType":"YulFunctionCall","src":"1569:15:69"},{"hexValue":"616c697a696e67","kind":"string","nativeSrc":"1586:9:69","nodeType":"YulLiteral","src":"1586:9:69","type":"","value":"alizing"}],"functionName":{"name":"mstore","nativeSrc":"1562:6:69","nodeType":"YulIdentifier","src":"1562:6:69"},"nativeSrc":"1562:34:69","nodeType":"YulFunctionCall","src":"1562:34:69"},"nativeSrc":"1562:34:69","nodeType":"YulExpressionStatement","src":"1562:34:69"}]},"name":"store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a","nativeSrc":"1377:226:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"1475:6:69","nodeType":"YulTypedName","src":"1475:6:69","type":""}],"src":"1377:226:69"},{"body":{"nativeSrc":"1755:220:69","nodeType":"YulBlock","src":"1755:220:69","statements":[{"nativeSrc":"1765:74:69","nodeType":"YulAssignment","src":"1765:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"1831:3:69","nodeType":"YulIdentifier","src":"1831:3:69"},{"kind":"number","nativeSrc":"1836:2:69","nodeType":"YulLiteral","src":"1836:2:69","type":"","value":"39"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"1772:58:69","nodeType":"YulIdentifier","src":"1772:58:69"},"nativeSrc":"1772:67:69","nodeType":"YulFunctionCall","src":"1772:67:69"},"variableNames":[{"name":"pos","nativeSrc":"1765:3:69","nodeType":"YulIdentifier","src":"1765:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"1937:3:69","nodeType":"YulIdentifier","src":"1937:3:69"}],"functionName":{"name":"store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a","nativeSrc":"1848:88:69","nodeType":"YulIdentifier","src":"1848:88:69"},"nativeSrc":"1848:93:69","nodeType":"YulFunctionCall","src":"1848:93:69"},"nativeSrc":"1848:93:69","nodeType":"YulExpressionStatement","src":"1848:93:69"},{"nativeSrc":"1950:19:69","nodeType":"YulAssignment","src":"1950:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"1961:3:69","nodeType":"YulIdentifier","src":"1961:3:69"},{"kind":"number","nativeSrc":"1966:2:69","nodeType":"YulLiteral","src":"1966:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"1957:3:69","nodeType":"YulIdentifier","src":"1957:3:69"},"nativeSrc":"1957:12:69","nodeType":"YulFunctionCall","src":"1957:12:69"},"variableNames":[{"name":"end","nativeSrc":"1950:3:69","nodeType":"YulIdentifier","src":"1950:3:69"}]}]},"name":"abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack","nativeSrc":"1609:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"1743:3:69","nodeType":"YulTypedName","src":"1743:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"1751:3:69","nodeType":"YulTypedName","src":"1751:3:69","type":""}],"src":"1609:366:69"},{"body":{"nativeSrc":"2152:248:69","nodeType":"YulBlock","src":"2152:248:69","statements":[{"nativeSrc":"2162:26:69","nodeType":"YulAssignment","src":"2162:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"2174:9:69","nodeType":"YulIdentifier","src":"2174:9:69"},{"kind":"number","nativeSrc":"2185:2:69","nodeType":"YulLiteral","src":"2185:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2170:3:69","nodeType":"YulIdentifier","src":"2170:3:69"},"nativeSrc":"2170:18:69","nodeType":"YulFunctionCall","src":"2170:18:69"},"variableNames":[{"name":"tail","nativeSrc":"2162:4:69","nodeType":"YulIdentifier","src":"2162:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2209:9:69","nodeType":"YulIdentifier","src":"2209:9:69"},{"kind":"number","nativeSrc":"2220:1:69","nodeType":"YulLiteral","src":"2220:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"2205:3:69","nodeType":"YulIdentifier","src":"2205:3:69"},"nativeSrc":"2205:17:69","nodeType":"YulFunctionCall","src":"2205:17:69"},{"arguments":[{"name":"tail","nativeSrc":"2228:4:69","nodeType":"YulIdentifier","src":"2228:4:69"},{"name":"headStart","nativeSrc":"2234:9:69","nodeType":"YulIdentifier","src":"2234:9:69"}],"functionName":{"name":"sub","nativeSrc":"2224:3:69","nodeType":"YulIdentifier","src":"2224:3:69"},"nativeSrc":"2224:20:69","nodeType":"YulFunctionCall","src":"2224:20:69"}],"functionName":{"name":"mstore","nativeSrc":"2198:6:69","nodeType":"YulIdentifier","src":"2198:6:69"},"nativeSrc":"2198:47:69","nodeType":"YulFunctionCall","src":"2198:47:69"},"nativeSrc":"2198:47:69","nodeType":"YulExpressionStatement","src":"2198:47:69"},{"nativeSrc":"2254:139:69","nodeType":"YulAssignment","src":"2254:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"2388:4:69","nodeType":"YulIdentifier","src":"2388:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack","nativeSrc":"2262:124:69","nodeType":"YulIdentifier","src":"2262:124:69"},"nativeSrc":"2262:131:69","nodeType":"YulFunctionCall","src":"2262:131:69"},"variableNames":[{"name":"tail","nativeSrc":"2254:4:69","nodeType":"YulIdentifier","src":"2254:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"1981:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2132:9:69","nodeType":"YulTypedName","src":"2132:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2147:4:69","nodeType":"YulTypedName","src":"2147:4:69","type":""}],"src":"1981:419:69"},{"body":{"nativeSrc":"2449:43:69","nodeType":"YulBlock","src":"2449:43:69","statements":[{"nativeSrc":"2459:27:69","nodeType":"YulAssignment","src":"2459:27:69","value":{"arguments":[{"name":"value","nativeSrc":"2474:5:69","nodeType":"YulIdentifier","src":"2474:5:69"},{"kind":"number","nativeSrc":"2481:4:69","nodeType":"YulLiteral","src":"2481:4:69","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"2470:3:69","nodeType":"YulIdentifier","src":"2470:3:69"},"nativeSrc":"2470:16:69","nodeType":"YulFunctionCall","src":"2470:16:69"},"variableNames":[{"name":"cleaned","nativeSrc":"2459:7:69","nodeType":"YulIdentifier","src":"2459:7:69"}]}]},"name":"cleanup_t_uint8","nativeSrc":"2406:86:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2431:5:69","nodeType":"YulTypedName","src":"2431:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"2441:7:69","nodeType":"YulTypedName","src":"2441:7:69","type":""}],"src":"2406:86:69"},{"body":{"nativeSrc":"2559:51:69","nodeType":"YulBlock","src":"2559:51:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"2576:3:69","nodeType":"YulIdentifier","src":"2576:3:69"},{"arguments":[{"name":"value","nativeSrc":"2597:5:69","nodeType":"YulIdentifier","src":"2597:5:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"2581:15:69","nodeType":"YulIdentifier","src":"2581:15:69"},"nativeSrc":"2581:22:69","nodeType":"YulFunctionCall","src":"2581:22:69"}],"functionName":{"name":"mstore","nativeSrc":"2569:6:69","nodeType":"YulIdentifier","src":"2569:6:69"},"nativeSrc":"2569:35:69","nodeType":"YulFunctionCall","src":"2569:35:69"},"nativeSrc":"2569:35:69","nodeType":"YulExpressionStatement","src":"2569:35:69"}]},"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"2498:112:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2547:5:69","nodeType":"YulTypedName","src":"2547:5:69","type":""},{"name":"pos","nativeSrc":"2554:3:69","nodeType":"YulTypedName","src":"2554:3:69","type":""}],"src":"2498:112:69"},{"body":{"nativeSrc":"2710:120:69","nodeType":"YulBlock","src":"2710:120:69","statements":[{"nativeSrc":"2720:26:69","nodeType":"YulAssignment","src":"2720:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"2732:9:69","nodeType":"YulIdentifier","src":"2732:9:69"},{"kind":"number","nativeSrc":"2743:2:69","nodeType":"YulLiteral","src":"2743:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2728:3:69","nodeType":"YulIdentifier","src":"2728:3:69"},"nativeSrc":"2728:18:69","nodeType":"YulFunctionCall","src":"2728:18:69"},"variableNames":[{"name":"tail","nativeSrc":"2720:4:69","nodeType":"YulIdentifier","src":"2720:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"2796:6:69","nodeType":"YulIdentifier","src":"2796:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"2809:9:69","nodeType":"YulIdentifier","src":"2809:9:69"},{"kind":"number","nativeSrc":"2820:1:69","nodeType":"YulLiteral","src":"2820:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"2805:3:69","nodeType":"YulIdentifier","src":"2805:3:69"},"nativeSrc":"2805:17:69","nodeType":"YulFunctionCall","src":"2805:17:69"}],"functionName":{"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"2756:39:69","nodeType":"YulIdentifier","src":"2756:39:69"},"nativeSrc":"2756:67:69","nodeType":"YulFunctionCall","src":"2756:67:69"},"nativeSrc":"2756:67:69","nodeType":"YulExpressionStatement","src":"2756:67:69"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nativeSrc":"2616:214:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2682:9:69","nodeType":"YulTypedName","src":"2682:9:69","type":""},{"name":"value0","nativeSrc":"2694:6:69","nodeType":"YulTypedName","src":"2694:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2705:4:69","nodeType":"YulTypedName","src":"2705:4:69","type":""}],"src":"2616:214:69"}]},"contents":"{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a(memPtr) {\n\n        mstore(add(memPtr, 0), \"Initializable: contract is initi\")\n\n        mstore(add(memPtr, 32), \"alizing\")\n\n    }\n\n    function abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 39)\n        store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function cleanup_t_uint8(value) -> cleaned {\n        cleaned := and(value, 0xff)\n    }\n\n    function abi_encode_t_uint8_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint8_to_t_uint8_fromStack(value0,  add(headStart, 0))\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a060405234801561001057600080fd5b5060405161633c38038061633c83398101604081905261002f91610136565b61003881610053565b6001600160a01b03811660805261004d61007d565b506101b9565b6001600160a01b03811661007a576040516342bcdf7f60e11b815260040160405180910390fd5b50565b600054610100900460ff16156100ae5760405162461bcd60e51b81526004016100a59061015f565b60405180910390fd5b60005460ff90811614610102576000805460ff191660ff9081179091556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498916100f9916101aa565b60405180910390a15b565b60006001600160a01b0382165b92915050565b61012081610104565b811461007a57600080fd5b805161011181610117565b60006020828403121561014b5761014b600080fd5b6000610157848461012b565b949350505050565b6020808252810161011181602781527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469602082015266616c697a696e6760c81b604082015260600190565b60ff8216815260208101610111565b6080516161616101db600039600081816107ea01526130c301526161616000f3fe608060405234801561001057600080fd5b50600436106103fb5760003560e01c806380d45a2d11610215578063c32094c711610125578063ddbf54fd116100b8578063e875544611610087578063e875544614610968578063e89d51ad14610971578063eade3eed14610984578063ede4edd014610997578063f2fde38b146109aa57600080fd5b8063ddbf54fd1461091e578063df71403b14610931578063e30c397814610944578063e85a29601461095557600080fd5b8063d136af44116100f4578063d136af44146108dc578063da35a26f146108ef578063db5c65de14610902578063dce154491461090b57600080fd5b8063c32094c714610882578063c488847b14610895578063c7ee005e146108b6578063cab4f84c146108c957600080fd5b8063a8431081116101a8578063b2068e8411610177578063b2068e8414610814578063b4a0bdf314610834578063be26317e14610845578063c0891ba91461084f578063c29982381461086257600080fd5b8063a8431081146107b2578063abfceffc146107c5578063afcff50f146107e5578063b0772d0b1461080c57600080fd5b80638e6470ea116101e45780638e6470ea146107375780638e8f294b1461074a578063921363951461078c578063929fe9a11461079f57600080fd5b806380d45a2d146106d45780638b3113f6146106e75780638c1ac18a146106fa5780638da5cb5b1461071d57600080fd5b806351dff989116103105780635cc4fdeb116102a35780636d0be88d116102725780636d0be88d1461068b5780636d35bf911461069e578063715018a6146106b157806379ba5097146106b95780637dc0d1d0146106c157600080fd5b80635cc4fdeb1461063d5780635ec88c791461065057806361252fd1146106635780636a56947e1461067857600080fd5b8063530e784f116102df578063530e784f146105f157806356aaee2d146106045780635c21b6c5146106175780635c7786051461062a57600080fd5b806351dff9891461053a578063520b6c74146105ab578063528a174c146105be57806352d84d1e146105d157600080fd5b80631ededc911161039357806341c728b91161036257806341c728b91461053a57806347ef3b3b1461054d5780634a584432146105605780634ada90af146105805780634e79238f1461058957600080fd5b80631ededc91146104d557806324aaa220146104e85780632bce219c146104fb5780633d98a1e51461050e57600080fd5b806310b98338116103cf57806310b983381461046e57806312348e961461049c578063186db48f146104af5780631bc41f28146104c257600080fd5b80627e3dd21461040057806302c3bcbb146104195780630686dab6146104465780630e32cb8614610459575b600080fd5b60015b6040516104109190614c74565b60405180910390f35b610439610427366004614cb2565b60d16020526000908152604090205481565b6040516104109190614cd9565b610439610454366004614cb2565b6109bd565b61046c610467366004614cb2565b610c78565b005b61040361047c366004614ce7565b60d760209081526000928352604080842090915290825290205460ff1681565b61046c6104aa366004614d35565b610c8c565b61046c6104bd366004614da7565b610d5f565b61046c6104d0366004614e1e565b610eae565b61046c6104e3366004614e82565b611268565b61046c6104f6366004614f0d565b6112e5565b61046c610509366004614fd7565b6113a2565b61040361051c366004615051565b6001600160a01b0316600090815260cd602052604090205460ff1690565b61046c610548366004615072565b61168b565b61046c61055b3660046150ca565b611702565b61043961056e366004614cb2565b60cf6020526000908152604090205481565b61043960cb5481565b61059c610597366004615072565b6117e4565b60405161041093929190615154565b61046c6105b9366004614d35565b611815565b61059c6105cc366004614cb2565b61186f565b6105e46105df366004614d35565b61189a565b6040516104109190615190565b61046c6105ff366004615051565b6118c4565b61046c610612366004615051565b611928565b61046c610625366004614cb2565b611b27565b61046c61063836600461519e565b611bd1565b61046c61064b3660046151ee565b611c47565b61059c61065e366004614cb2565b611e58565b61066b611e6a565b6040516104109190615280565b61046c610686366004615291565b611ecc565b61046c610699366004615291565b611f73565b61046c6106ac3660046152d8565b6120e6565b61046c61218d565b61046c6121a1565b60c9546105e4906001600160a01b031681565b61046c6106e2366004614d35565b6121d6565b61046c6106f5366004615332565b6121e7565b610403610708366004614cb2565b60d56020526000908152604090205460ff1681565b6033546001600160a01b03165b604051610410919061536e565b61046c61074536600461519e565b6122ac565b61077d610758366004614cb2565b60cd6020526000908152604090208054600182015460029092015460ff909116919083565b6040516104109392919061537c565b61046c61079a366004614cb2565b6123bf565b6104036107ad36600461538a565b612706565b61046c6107c0366004614d35565b61273a565b6107d86107d3366004614cb2565b6127da565b60405161041091906153fb565b61072a7f000000000000000000000000000000000000000000000000000000000000000081565b6107d8612954565b610827610822366004614cb2565b6129b4565b6040516104109190615495565b6097546001600160a01b03166105e4565b6104396101075481565b61046c61085d36600461519e565b612bf5565b6108756108703660046155ab565b612e6b565b604051610410919061562f565b61046c610890366004615051565b612f19565b6108a86108a336600461519e565b612f93565b604051610410929190615640565b60d6546105e4906001600160a01b031681565b61046c6108d7366004615051565b6130be565b61046c6108ea366004614da7565b6132b0565b61046c6108fd36600461565b565b61340b565b61043960d05481565b6105e461091936600461567d565b6134e0565b61046c61092c366004615332565b613518565b61046c61093f36600461519e565b6135dc565b6065546001600160a01b031661072a565b6104036109633660046156c8565b6139de565b61043960ca5481565b61046c61097f3660046156fb565b613a35565b61046c610992366004614ce7565b613c22565b6104396109a5366004614cb2565b613e40565b61046c6109b8366004614cb2565b6140aa565b60006109f560405180604001604052806015815260200174756e6c6973744d61726b657428616464726573732960581b81525061411b565b6001600160a01b038216600090815260cd60205260409020805460ff16610a3a5782604051635a9a1eb960e11b8152600401610a31919061536e565b60405180910390fd5b610a458360026139de565b610a6257604051630309b07560e21b815260040160405180910390fd5b610a6d8360006139de565b610a8a576040516306ed36fb60e41b815260040160405180910390fd5b610a958360016139de565b610ab257604051634e577b7d60e11b815260040160405180910390fd5b610abd8360036139de565b610ada57604051632b1e340960e01b815260040160405180910390fd5b610ae58360046139de565b610b025760405163bb56e52560e01b815260040160405180910390fd5b610b0d8360076139de565b610b2a57604051630a6a9a9d60e31b815260040160405180910390fd5b610b358360056139de565b610b525760405163b3cf04ad60e01b815260040160405180910390fd5b610b5d8360066139de565b610b7a576040516308624f7160e21b815260040160405180910390fd5b610b858360086139de565b610ba257604051632f412a5560e21b815260040160405180910390fd5b6001600160a01b038316600090815260cf602052604090205415610bd95760405163668019b360e01b815260040160405180910390fd5b6001600160a01b038316600090815260d1602052604090205415610c1057604051638603c8cf60e01b815260040160405180910390fd5b600181015415610c3357604051630707987b60e11b815260040160405180910390fd5b805460ff191681556040516001600160a01b038416907f302feb03efd5741df80efe7f97f5d93d74d46a542a3d312d0faae64fa1f3e0e990600090a250600092915050565b610c806141b9565b610c89816141e3565b50565b610cca6040518060400160405280601781526020017f736574436c6f7365466163746f722875696e743235362900000000000000000081525061411b565b80670c7d713b49da00001015610cf25760405162461bcd60e51b8152600401610a31906157b4565b8066b1a2bc2ec500001115610d195760405162461bcd60e51b8152600401610a319061580f565b60ca8054908290556040517f3b9670cf975d26958e754b57098eaa2ac914d8d2a31b83257997b9f346110fd990610d539083908590615640565b60405180910390a15050565b610d8060405180606001604052806028815260200161603f6028913961411b565b82818115801590610d9057508082145b610dac5760405162461bcd60e51b8152600401610a3190615846565b610db58261425c565b60005b82811015610ea557848482818110610dd257610dd2615856565b9050602002013560cf6000898985818110610def57610def615856565b9050602002016020810190610e049190615051565b6001600160a01b03168152602081019190915260400160002055868682818110610e3057610e30615856565b9050602002016020810190610e459190615051565b6001600160a01b03167f6f1951b2aad10f3fc81b86d91105b413a5b3f847a34bbc5ce1904201b14438f6868684818110610e8157610e81615856565b90506020020135604051610e959190614cd9565b60405180910390a2600101610db8565b50505050505050565b610eb9846004614287565b6001600160a01b038416600090815260cd60205260409020805460ff16610ef55784604051635a9a1eb960e11b8152600401610a31919061536e565b306001600160a01b03851603610f9d57306001600160a01b0316856001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f719190615877565b6001600160a01b031614610f9857604051630c73eb0560e01b815260040160405180910390fd5b6110cc565b6001600160a01b038416600090815260cd602052604090205460ff16610fd85783604051635a9a1eb960e11b8152600401610a31919061536e565b836001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611016573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103a9190615877565b6001600160a01b0316856001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a59190615877565b6001600160a01b0316146110cc57604051630c73eb0560e01b815260040160405180910390fd5b6001600160a01b038216600090815260038201602052604090205460ff1661110b578482604051630cdfb2db60e31b8152600401610a31929190615898565b60d35460005b81811015610ea557600060d3828154811061112e5761112e615856565b60009182526020909120015460405163051d1d4f60e11b81526001600160a01b0390911691508190630a3a3a9e9061116a908b9060040161536e565b600060405180830381600087803b15801561118457600080fd5b505af1158015611198573d6000803e3d6000fd5b505060405163db7954fd60e01b81526001600160a01b038416925063db7954fd91506111ca908b908990600401615898565b600060405180830381600087803b1580156111e457600080fd5b505af11580156111f8573d6000803e3d6000fd5b505060405163db7954fd60e01b81526001600160a01b038416925063db7954fd915061122a908b908a90600401615898565b600060405180830381600087803b15801561124457600080fd5b505af1158015611258573d6000803e3d6000fd5b5050505050806001019050611111565b60d6546001600160a01b0316156112de5760d6546040516367994e8b60e11b81526001600160a01b039091169063cf329d16906112ab9086908990600401615898565b600060405180830381600087803b1580156112c557600080fd5b505af11580156112d9573d6000803e3d6000fd5b505050505b5050505050565b6113066040518060600160405280602a81526020016160b8602a913961411b565b838261131a61131582846158c9565b61425c565b60005b828110156113985760005b8281101561138f5761138789898481811061134557611345615856565b905060200201602081019061135a9190615051565b88888481811061136c5761136c615856565b905060200201602081019061138191906158e8565b876142b3565b600101611328565b5060010161131d565b5050505050505050565b60006113b0846143806143b4565b905060d054816000015111156113e05760d0548151604051631a451c0f60e21b8152610a31929190600401615640565b6000611400604051806020016040528060cb548152508360400151614403565b82519091508110611428578151604051632c1f8ef160e21b8152610a31918391600401615640565b8160a0015160000361144d5760405163095bf33360e01b815260040160405180910390fd5b8261145c61131560028361591f565b60005b8181101561161f5760cd600087878481811061147d5761147d615856565b90506060020160200160208101906114959190615051565b6001600160a01b0316815260208101919091526040016000205460ff166114fa578585828181106114c8576114c8615856565b90506060020160200160208101906114e09190615051565b604051635a9a1eb960e11b8152600401610a31919061536e565b60cd600087878481811061151057611510615856565b6115269260206060909202019081019150615051565b6001600160a01b0316815260208101919091526040016000205460ff1661156f5785858281811061155957611559615856565b6114e09260206060909202019081019150615051565b3686868381811061158257611582615856565b905060600201905080602001602081019061159d9190615051565b6001600160a01b0316638bbdb6db338a60408501356115bf6020870187615051565b60016040518663ffffffff1660e01b81526004016115e1959493929190615933565b600060405180830381600087803b1580156115fb57600080fd5b505af115801561160f573d6000803e3d6000fd5b505050505080600101905061145f565b50600061162b876127da565b805190915060005b818110156112d957600061166084838151811061165257611652615856565b60200260200101518b614423565b5091505080156116825760405162461bcd60e51b8152600401610a31906159c4565b50600101611633565b60d6546001600160a01b0316156116fc5760d6546040516367994e8b60e11b81526001600160a01b039091169063cf329d16906116ce9086908890600401615898565b600060405180830381600087803b1580156116e857600080fd5b505af1158015611398573d6000803e3d6000fd5b50505050565b60d6546001600160a01b0316156117dc5760d6546040516367994e8b60e11b81526001600160a01b039091169063cf329d16906117459086908a90600401615898565b600060405180830381600087803b15801561175f57600080fd5b505af1158015611773573d6000803e3d6000fd5b505060d6546040516367994e8b60e11b81526001600160a01b03909116925063cf329d1691506117a99087908a90600401615898565b600060405180830381600087803b1580156117c357600080fd5b505af11580156117d7573d6000803e3d6000fd5b505050505b505050505050565b6000806000806117f9888888886144ca6144fe565b608081015160a09091015160009a919950975095505050505050565b6118366040518060600160405280602581526020016160676025913961411b565b60d08054908290556040517eb4f4f153ad7f1397564a8830fef092481e8cf6a2cd3ff04f96d10ba51200a590610d539083908590615640565b600080600080611881856144ca6143b4565b608081015160a090910151600097919650945092505050565b60ce81815481106118aa57600080fd5b6000918252602090912001546001600160a01b0316905081565b6118cc6141b9565b6118d5816146c8565b60c980546001600160a01b038381166001600160a01b03198316179092556040519116907fd52b2b9b7e9ee655fcb95d2e5b9e0c9f69e7ef2b8e9d2d0ea78402d576d22e2290610d5390839085906159d4565b6119306141b9565b6001600160a01b038116600090815260d4602052604090205460ff16156119695760405162461bcd60e51b8152600401610a3190615a14565b60d35461197a611315826001615a24565b60d3805460018082019092557f915c3eb987b20e1af620c1403197bf687fb7f18513b3a73fde6e78c7072c41a60180546001600160a01b0319166001600160a01b038516908117909155600090815260d460205260408120805460ff191690921790915560ce54905b81811015611a8057836001600160a01b0316632a869a4d60ce8381548110611a0d57611a0d615856565b6000918252602090912001546040516001600160e01b031960e084901b168152611a43916001600160a01b03169060040161536e565b600060405180830381600087803b158015611a5d57600080fd5b505af1158015611a71573d6000803e3d6000fd5b505050508060010190506119e3565b50826001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611abf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae39190615877565b6001600160a01b0316836001600160a01b03167f066a44d77db1581603d7d8ca1ca494756c0d359c7ffacd9b2c8f78dab7aceae260405160405180910390a3505050565b6000611b32826127da565b805160c954919250906001600160a01b031660005b828110156112de57816001600160a01b03166396e85ced858381518110611b7057611b70615856565b60200260200101516040518263ffffffff1660e01b8152600401611b94919061536e565b600060405180830381600087803b158015611bae57600080fd5b505af1158015611bc2573d6000803e3d6000fd5b50505050806001019050611b47565b60d6546001600160a01b031615611c425760d6546040516367994e8b60e11b81526001600160a01b039091169063cf329d1690611c149085908790600401615898565b600060405180830381600087803b158015611c2e57600080fd5b505af1158015610ea5573d6000803e3d6000fd5b505050565b611c686040518060600160405280602c815260200161608c602c913961411b565b6001600160a01b038316600090815260cd60205260409020805460ff16611ca45783604051635a9a1eb960e11b8152600401610a31919061536e565b670d2f13f7789f0000831115611ccd576040516302f22cad60e61b815260040160405180910390fd5b670de0b6b3a7640000821115611cf55760405162f9474b60e61b815260040160405180910390fd5b82821015611d155760405162f9474b60e61b815260040160405180910390fd5b8215801590611d92575060c95460405163fc57d4df60e01b81526001600160a01b039091169063fc57d4df90611d4f90879060040161536e565b602060405180830381865afa158015611d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d909190615a42565b155b15611db1578360405162e52a7d60e41b8152600401610a31919061536e565b6001810154838114611e0157600182018490556040517f70483e6592cd5182d45ac970e05bc62cdcc90e9d8ef2c2dbe686cf383bcd7fc590611df890879084908890615a63565b60405180910390a15b60028201548381146117dc57600283018490556040517f9e92c7d5fef69846094f3ddcadcb9402c6ba469c461368714f1cabd8ef48b59190611e4890889084908890615a63565b60405180910390a1505050505050565b600080600080611881856143806143b4565b606060d3805480602002602001604051908101604052809291908181526020018280548015611ec257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611ea4575b5050505050905090565b60d6546001600160a01b0316156116fc5760d6546040516367994e8b60e11b81526001600160a01b039091169063cf329d1690611f0f9086908890600401615898565b600060405180830381600087803b158015611f2957600080fd5b505af1158015611f3d573d6000803e3d6000fd5b505060d6546040516367994e8b60e11b81526001600160a01b03909116925063cf329d1691506116ce9085908890600401615898565b611f7e846006614287565b611f898484836146ef565b60d35460005b818110156117dc57600060d38281548110611fac57611fac615856565b60009182526020909120015460405163051d1d4f60e11b81526001600160a01b0390911691508190630a3a3a9e90611fe8908a9060040161536e565b600060405180830381600087803b15801561200257600080fd5b505af1158015612016573d6000803e3d6000fd5b505060405163db7954fd60e01b81526001600160a01b038416925063db7954fd9150612048908a908a90600401615898565b600060405180830381600087803b15801561206257600080fd5b505af1158015612076573d6000803e3d6000fd5b505060405163db7954fd60e01b81526001600160a01b038416925063db7954fd91506120a8908a908990600401615898565b600060405180830381600087803b1580156120c257600080fd5b505af11580156120d6573d6000803e3d6000fd5b5050505050806001019050611f8f565b60d6546001600160a01b0316156112de5760d6546040516367994e8b60e11b81526001600160a01b039091169063cf329d16906121299085908990600401615898565b600060405180830381600087803b15801561214357600080fd5b505af1158015612157573d6000803e3d6000fd5b505060d6546040516367994e8b60e11b81526001600160a01b03909116925063cf329d1691506112ab9086908990600401615898565b6121956141b9565b61219f6000614794565b565b60655433906001600160a01b031681146121cd5760405162461bcd60e51b8152600401610a3190615ab7565b610c8981614794565b6121de6141b9565b610c89816147ad565b6122086040518060600160405280602281526020016160e26022913961411b565b612211826146c8565b6001600160a01b038216600090815260cd602052604090205460ff1661224c5781604051635a9a1eb960e11b8152600401610a31919061536e565b6001600160a01b038216600081815260d5602052604090819020805460ff1916841515179055517f03561d5280ebb02280893b1d60978e4a27e7654a149c5d0e7c2cf65389ce1694906122a0908490614c74565b60405180910390a25050565b6122b7836001614287565b6122c28383836146ef565b60d35460005b818110156112de57600060d382815481106122e5576122e5615856565b60009182526020909120015460405163051d1d4f60e11b81526001600160a01b0390911691508190630a3a3a9e9061232190899060040161536e565b600060405180830381600087803b15801561233b57600080fd5b505af115801561234f573d6000803e3d6000fd5b505060405163db7954fd60e01b81526001600160a01b038416925063db7954fd91506123819089908990600401615898565b600060405180830381600087803b15801561239b57600080fd5b505af11580156123af573d6000803e3d6000fd5b50505050508060010190506122c8565b60006123ca826127da565b805160c9549192509033906001600160a01b031660005b838110156124e9578481815181106123fb576123fb615856565b60200260200101516001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124669190615a42565b50816001600160a01b03166396e85ced86838151811061248857612488615856565b60200260200101516040518263ffffffff1660e01b81526004016124ac919061536e565b600060405180830381600087803b1580156124c657600080fd5b505af11580156124da573d6000803e3d6000fd5b505050508060010190506123e1565b505060006124f9856143806143b4565b905060d054816000015111156125295760d0548151604051631a451c0f60e21b8152610a31929190600401615640565b8060a0015160000361254e5760405163095bf33360e01b815260040160405180910390fd5b60408051602080820183528351825282518082018452848401518152835191820190935260cb5481529091600091612586919061480a565b905060006125948383614852565b90506125b86040518060200160405280670de0b6b3a7640000815250825190511090565b156125dc5781518351604051631a451c0f60e21b8152610a31929190600401615640565b60005b868110156112d95760008882815181106125fb576125fb615856565b60200260200101519050600080612612838d614423565b509150915060006126238683614403565b9050821561268e57836001600160a01b031663b2a02ff18b8f866040518463ffffffff1660e01b815260040161265b93929190615ac7565b600060405180830381600087803b15801561267557600080fd5b505af1158015612689573d6000803e3d6000fd5b505050505b81156126f757836001600160a01b03166344fe6ffe8b8f846040518463ffffffff1660e01b81526004016126c493929190615ac7565b600060405180830381600087803b1580156126de57600080fd5b505af11580156126f2573d6000803e3d6000fd5b505050505b505050508060010190506125df565b6001600160a01b03808216600090815260cd60209081526040808320938616835260039093019052205460ff165b92915050565b670de0b6b3a76400008110156127625760405162461bcd60e51b8152600401610a3190615b30565b6127a06040518060400160405280602081526020017f7365744c69717569646174696f6e496e63656e746976652875696e743235362981525061411b565b60cb8054908290556040517faeba5a6c40a8ac138134bff1aaa65debf25971188a58804bad717f82f0ec131690610d539083908590615640565b6001600160a01b038116600090815260cc60209081526040808320805482518185028101850190935280835260609493849392919083018282801561284857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161282a575b505050505090506000815190506000816001600160401b0381111561286f5761286f6154a6565b604051908082528060200260200182016040528015612898578160200160208202803683370190505b50905060005b8281101561294757600060cd60008684815181106128be576128be615856565b6020908102919091018101516001600160a01b03168252810191909152604001600020805490915060ff161561293e5784828151811061290057612900615856565b602002602001015183878151811061291a5761291a615856565b6001600160a01b039092166020928302919091019091015261293b86615b40565b95505b5060010161289e565b5092835250909392505050565b606060ce805480602002602001604051908101604052809291908181526020018280548015611ec2576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611ea4575050505050905090565b60d354606090806001600160401b038111156129d2576129d26154a6565b604051908082528060200260200182016040528015612a3057816020015b612a1d604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b8152602001906001900390816129f05790505b50915060005b81811015612bee57600060d38281548110612a5357612a53615856565b60009182526020808320909101546040805163f7c618c160e01b815290516001600160a01b039092169450849263f7c618c1926004808401938290030181865afa158015612aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac99190615877565b90506040518060600160405280826001600160a01b03168152602001836001600160a01b03166374c4c1cc896040518263ffffffff1660e01b8152600401612b11919061536e565b602060405180830381865afa158015612b2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b529190615a42565b8152602001836001600160a01b0316637c05a7c5896040518263ffffffff1660e01b8152600401612b83919061536e565b602060405180830381865afa158015612ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc49190615a42565b815250858481518110612bd957612bd9615856565b60209081029190910101525050600101612a36565b5050919050565b612c00836000614287565b6001600160a01b038316600090815260cd602052604090205460ff16612c3b5782604051635a9a1eb960e11b8152600401610a31919061536e565b6001600160a01b038316600090815260d160205260409020546000198114612d6e576000846001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc19190615a42565b905060006040518060200160405280876001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d329190615a42565b905290506000612d4382848761488c565b905083811115612d6a57868460405163db33be3d60e01b8152600401610a31929190615b5a565b5050505b60d35460005b818110156117dc57600060d38281548110612d9157612d91615856565b60009182526020909120015460405163051d1d4f60e11b81526001600160a01b0390911691508190630a3a3a9e90612dcd908a9060040161536e565b600060405180830381600087803b158015612de757600080fd5b505af1158015612dfb573d6000803e3d6000fd5b505060405163db7954fd60e01b81526001600160a01b038416925063db7954fd9150612e2d908a908a90600401615898565b600060405180830381600087803b158015612e4757600080fd5b505af1158015612e5b573d6000803e3d6000fd5b5050505050806001019050612d74565b80516060906000816001600160401b03811115612e8a57612e8a6154a6565b604051908082528060200260200182016040528015612eb3578160200160208202803683370190505b50905060005b82811015612f11576000858281518110612ed557612ed5615856565b60200260200101519050612ee981336148b6565b6000838381518110612efd57612efd615856565b602090810291909101015250600101612eb9565b509392505050565b612f216141b9565b612f2a816146c8565b60d6546040517fcb20dab7409e4fb972d9adccb39530520b226ce6940d85c9523a499b950b6ea391612f69916001600160a01b039091169084906159d4565b60405180910390a160d680546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000612fa1866149a9565b90506000612fae866149a9565b90506000866001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130149190615a42565b9050600061302e6040518060200160405280600081525090565b60408051602080820183526000808352835180830185529081528351808301855260cb5481528451928301909452888252919261306a9161480a565b925061309260405180602001604052808881525060405180602001604052808881525061480a565b915061309e8383614852565b90506130aa818b614403565b60009d909c509a5050505050505050505050565b6130e77f0000000000000000000000000000000000000000000000000000000000000000614a43565b6001600160a01b038116600090815260cd602052604090205460ff1615613123578060405163d005ce4760e01b8152600401610a31919061536e565b806001600160a01b0316633d9ea3a16040518163ffffffff1660e01b8152600401602060405180830381865afa158015613161573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131859190615b73565b6131a15760405162461bcd60e51b8152600401610a3190615bc8565b6001600160a01b038116600090815260cd60205260408120805460ff191660019081178255810182905560028101919091556131dc82614a70565b60d35460005b818110156132735760d381815481106131fd576131fd615856565b600091825260209091200154604051632a869a4d60e01b81526001600160a01b0390911690632a869a4d9061323690879060040161536e565b600060405180830381600087803b15801561325057600080fd5b505af1158015613264573d6000803e3d6000fd5b505050508060010190506131e2565b507faf16ad15f9e29d5140e8e81a30a92a755aa8edff3d301053c84392b70c0d09a3836040516132a39190615190565b60405180910390a1505050565b6132d16040518060600160405280602881526020016161046028913961411b565b8260008190036132f35760405162461bcd60e51b8152600401610a3190615c0c565b8082146133125760405162461bcd60e51b8152600401610a3190615c0c565b61331b8161425c565b60005b818110156117dc5783838281811061333857613338615856565b9050602002013560d1600088888581811061335557613355615856565b905060200201602081019061336a9190615051565b6001600160a01b0316815260208101919091526040016000205585858281811061339657613396615856565b90506020020160208101906133ab9190615051565b6001600160a01b03167f9e0ad9cee10bdf36b7fbd38910c0bdff0f275ace679b45b922381c2723d676f88585848181106133e7576133e7615856565b905060200201356040516133fb9190614cd9565b60405180910390a260010161331e565b600054610100900460ff161580801561342b5750600054600160ff909116105b806134455750303b158015613445575060005460ff166001145b6134615760405162461bcd60e51b8152600401610a3190615c67565b6000805460ff191660011790558015613484576000805461ff0019166101001790555b61348c614b2e565b61349582614b5d565b61349e836147ad565b8015611c42576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906132a390600190615c8b565b60cc60205281600052604060002081815481106134fc57600080fd5b6000918252602090912001546001600160a01b03169150829050565b613521826146c8565b33600090815260d7602090815260408083206001600160a01b038616845290915290205481151560ff90911615150361356d5760405163db6c2c8360e01b815260040160405180910390fd5b33600081815260d7602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907fcb325b7784f78486e42849c7a50b8c5ee008d00cd90e108a58912c0fcb6288b4906135d0908590614c74565b60405180910390a35050565b6135e7836002614287565b6001600160a01b038316600090815260cd602052604090205460ff166136225782604051635a9a1eb960e11b8152600401610a31919061536e565b6001600160a01b03808416600090815260cd60209081526040808320938616835260039093019052205460ff166136665761365c83614a43565b61366633836148b6565b61366f82611b27565b60c95460405163fc57d4df60e01b81526001600160a01b039091169063fc57d4df9061369f90869060040161536e565b602060405180830381865afa1580156136bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e09190615a42565b600003613701578260405162e52a7d60e41b8152600401610a31919061536e565b6001600160a01b038316600090815260cf60205260409020546000198114613831576000846001600160a01b03166347bd37186040518163ffffffff1660e01b8152600401602060405180830381865afa158015613763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137879190615a42565b90506000856001600160a01b031663bbcac5576040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137ed9190615a42565b90506000816137fc8685615a24565b6138069190615a24565b90508381111561382d578684604051632e649eed60e01b8152600401610a31929190615b5a565b5050505b600061384384866000866144ca6144fe565b60a0810151909150156138695760405163bb55fd2760e01b815260040160405180910390fd5b60006040518060200160405280876001600160a01b031663aa5af0fd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138d89190615a42565b905260d35490915060005b8181101561139857600060d3828154811061390057613900615856565b600091825260209091200154604051632352607960e01b81526001600160a01b039091169150819063235260799061393e908c908890600401615caa565b600060405180830381600087803b15801561395857600080fd5b505af115801561396c573d6000803e3d6000fd5b5050604051636a95ddef60e01b81526001600160a01b0384169250636a95ddef91506139a0908c908c908990600401615cc5565b600060405180830381600087803b1580156139ba57600080fd5b505af11580156139ce573d6000803e3d6000fd5b50505050508060010190506138e3565b6001600160a01b038216600090815260d26020526040812081836008811115613a0957613a09615ced565b6008811115613a1a57613a1a615ced565b815260208101919091526040016000205460ff169392505050565b613a40856005614287565b613a4983611b27565b6001600160a01b038516600090815260cd602052604090205460ff16613a845784604051635a9a1eb960e11b8152600401610a31919061536e565b6001600160a01b038416600090815260cd602052604090205460ff16613abf5783604051635a9a1eb960e11b8152600401610a31919061536e565b6040516395dd919360e01b81526000906001600160a01b038716906395dd919390613aee90879060040161536e565b602060405180830381865afa158015613b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2f9190615a42565b90508180613b5557506001600160a01b038616600090815260d5602052604090205460ff165b15613b815780831115613b7b5760405163e46c155960e01b815260040160405180910390fd5b506112de565b6000613b8f856143806143b4565b905060d054816000015111613bbe5760d0548151604051636e61bb0560e11b8152610a31929190600401615640565b8060a00151600003613be35760405163095bf33360e01b815260040160405180910390fd5b6000613bff604051806020016040528060ca5481525084614403565b9050808511156113985760405163e46c155960e01b815260040160405180910390fd5b613c2d826003614287565b60c9546040516396e85ced60e01b81526001600160a01b03909116906396e85ced90613c5d90859060040161536e565b600060405180830381600087803b158015613c7757600080fd5b505af1158015613c8b573d6000803e3d6000fd5b505050506001600160a01b038216600090815260cd602052604090205460ff16613cca5781604051635a9a1eb960e11b8152600401610a31919061536e565b60d35460005b818110156116fc5760006040518060200160405280866001600160a01b031663aa5af0fd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d479190615a42565b8152509050600060d38381548110613d6157613d61615856565b600091825260209091200154604051632352607960e01b81526001600160a01b0390911691508190632352607990613d9f9089908690600401615caa565b600060405180830381600087803b158015613db957600080fd5b505af1158015613dcd573d6000803e3d6000fd5b5050604051636a95ddef60e01b81526001600160a01b0384169250636a95ddef9150613e0190899089908790600401615cc5565b600060405180830381600087803b158015613e1b57600080fd5b505af1158015613e2f573d6000803e3d6000fd5b505050505050806001019050613cd0565b6000613e4d826008614287565b81600080613e5b8333614423565b509150915080600014613e815760405163f8a5d66d60e01b815260040160405180910390fd5b613e8c8533846146ef565b6001600160a01b038316600090815260cd60209081526040808320338452600381019092529091205460ff16613ec85750600095945050505050565b3360009081526003820160209081526040808320805460ff1916905560cc825280832080548251818502810185019093528083529192909190830182828015613f3a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613f1c575b5050835193945083925060009150505b82811015613f9457876001600160a01b0316848281518110613f6e57613f6e615856565b60200260200101516001600160a01b031603613f8c57809150613f94565b600101613f4a565b50818110613fa457613fa4615d03565b33600090815260cc6020526040902080548190613fc390600190615d19565b81548110613fd357613fd3615856565b9060005260206000200160009054906101000a90046001600160a01b031681838154811061400357614003615856565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508080548061404157614041615d2c565b600082815260208120820160001990810180546001600160a01b031916905590910190915560405133916001600160a01b038b16917fe699a64c18b07ac5b7301aa273f36a2287239eb9501d81950672794afba29a0d9190a35060009998505050505050505050565b6140b26141b9565b606580546001600160a01b0383166001600160a01b031990911681179091556140e36033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6097546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab9061414e9033908690600401615d98565b602060405180830381865afa15801561416b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061418f9190615b73565b9050806141b557333083604051634a3fa29360e01b8152600401610a3193929190615db8565b5050565b6033546001600160a01b0316331461219f5760405162461bcd60e51b8152600401610a3190615e17565b6001600160a01b0381166142095760405162461bcd60e51b8152600401610a3190615e69565b609780546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa090610d539083908590615898565b61010754811115610c8957610107548160405163792bfb1b60e11b8152600401610a31929190615640565b61429182826139de565b156141b55781816040516313b3ccb160e31b8152600401610a31929190615ea7565b6001600160a01b038316600090815260cd602052604090205460ff166142eb5760405162461bcd60e51b8152600401610a3190615f07565b6001600160a01b038316600090815260d260205260408120829184600881111561431757614317615ced565b600881111561432857614328615ced565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f35007a986bcd36d2f73fc7f1b73762e12eadb4406dd163194950fd3b5a6a827d8383836040516132a393929190615f17565b6040805160208082018352600091829052825180820184526001600160a01b0394909416825260cd90522060020154815290565b6143ed6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6143fc836000806000866144fe565b9392505050565b6000806144108484614b84565b905061441b81614bac565b949350505050565b600080600080856001600160a01b031663c37f68e2866040518263ffffffff1660e01b8152600401614455919061536e565b608060405180830381865afa158015614472573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144969190615f3f565b91965094509250905080156144c257858560405163015e34d960e61b8152600401610a31929190615898565b509250925092565b6040805160208082018352600091829052825180820184526001600160a01b0394909416825260cd90522060010154815290565b6145376040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000614542876127da565b805190915060005b8181101561466a57600083828151811061456657614566615856565b60200260200101519050600080600061457f848e614423565b9250925092506000604051806020016040528061459b876149a9565b815250905060006145ba6040518060200160405280858152508361480a565b905060006145d46145ce888e63ffffffff16565b8361480a565b90506145e581878d6020015161488c565b60208c01528a516145f9908390889061488c565b8b5260408b015161460d908490879061488c565b8b60400181815250508e6001600160a01b0316876001600160a01b0316036146585761463e818f8d6060015161488c565b60608c018190526146529084908f9061488c565b60608c01525b5050505050505080600101905061454a565b506000836060015184604001516146819190615a24565b905080846020015111156146a85760208401518190036080850152600060a08501526146bc565b600060808501526020840151810360a08501525b50505095945050505050565b6001600160a01b038116610c89576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b038316600090815260cd60205260409020805460ff1661472b5783604051635a9a1eb960e11b8152600401610a31919061536e565b6001600160a01b038316600090815260038201602052604090205460ff166147535750505050565b61475c83611b27565b600061476e84868560006144ca6144fe565b60a0810151909150156112de5760405163bb55fd2760e01b815260040160405180910390fd5b606580546001600160a01b0319169055610c8981614bc4565b6101075481116147cf5760405162461bcd60e51b8152600401610a3190615fd6565b6101078054908290556040517fc2d09fef144f7c8a86f71ea459f8fc17f675768eb1ae369cbd77fb31d467aafa90610d539083908590615640565b6040805160208101909152600081526040518060200160405280670de0b6b3a764000061483f86600001518660000151614c16565b614849919061591f565b90529392505050565b60408051602081019091526000815260405180602001604052806148496148858660000151670de0b6b3a7640000614c16565b8551614c22565b6000806148998585614b84565b90506148ad6148a782614bac565b84614c2e565b95945050505050565b6148c1826007614287565b6001600160a01b038216600090815260cd60205260409020805460ff166148fd5782604051635a9a1eb960e11b8152600401610a31919061536e565b6001600160a01b038216600090815260038201602052604090205460ff161561492557505050565b6001600160a01b0380831660008181526003840160209081526040808320805460ff1916600190811790915560cc835281842080549182018155845291832090910180549488166001600160a01b031990951685179055519192917f3ab23ab0d51cccc0c3085aec51f99228625aa1a922b3a8ca89a26b0f2027a1a59190a3505050565b60c95460405163fc57d4df60e01b815260009182916001600160a01b039091169063fc57d4df906149de90869060040161536e565b602060405180830381865afa1580156149fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a1f9190615a42565b905080600003612734578260405162e52a7d60e41b8152600401610a31919061536e565b336001600160a01b03821614610c89578033604051634e9383fb60e11b8152600401610a31929190615898565b60ce5460005b81811015614ad857826001600160a01b031660ce8281548110614a9b57614a9b615856565b6000918252602090912001546001600160a01b031603614ad0578260405163d005ce4760e01b8152600401610a31919061536e565b600101614a76565b505060ce805460018101825560008290527fd36cd1c74ef8d7326d8021b776c18fb5a5724b7f7bc93c2f42e43e10ef27d12a0180546001600160a01b0319166001600160a01b038416179055546141b58161425c565b600054610100900460ff16614b555760405162461bcd60e51b8152600401610a319061602e565b61219f614c3a565b600054610100900460ff16610c805760405162461bcd60e51b8152600401610a319061602e565b6040805160208101909152600081526040518060200160405280614849856000015185614c16565b805160009061273490670de0b6b3a76400009061591f565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006143fc82846158c9565b60006143fc828461591f565b60006143fc8284615a24565b600054610100900460ff16614c615760405162461bcd60e51b8152600401610a319061602e565b61219f33614794565b8015155b82525050565b602081016127348284614c6a565b60006001600160a01b038216612734565b614c9c81614c82565b8114610c8957600080fd5b803561273481614c93565b600060208284031215614cc757614cc7600080fd5b600061441b8484614ca7565b80614c6e565b602081016127348284614cd3565b60008060408385031215614cfd57614cfd600080fd5b6000614d098585614ca7565b9250506020614d1a85828601614ca7565b9150509250929050565b80614c9c565b803561273481614d24565b600060208284031215614d4a57614d4a600080fd5b600061441b8484614d2a565b60008083601f840112614d6b57614d6b600080fd5b5081356001600160401b03811115614d8557614d85600080fd5b602083019150836020820283011115614da057614da0600080fd5b9250929050565b60008060008060408587031215614dc057614dc0600080fd5b84356001600160401b03811115614dd957614dd9600080fd5b614de587828801614d56565b945094505060208501356001600160401b03811115614e0657614e06600080fd5b614e1287828801614d56565b95989497509550505050565b60008060008060808587031215614e3757614e37600080fd5b6000614e438787614ca7565b9450506020614e5487828801614ca7565b9350506040614e6587828801614ca7565b9250506060614e7687828801614ca7565b91505092959194509250565b600080600080600060a08688031215614e9d57614e9d600080fd5b6000614ea98888614ca7565b9550506020614eba88828901614ca7565b9450506040614ecb88828901614ca7565b9350506060614edc88828901614d2a565b9250506080614eed88828901614d2a565b9150509295509295909350565b801515614c9c565b803561273481614efa565b600080600080600060608688031215614f2857614f28600080fd5b85356001600160401b03811115614f4157614f41600080fd5b614f4d88828901614d56565b955095505060208601356001600160401b03811115614f6e57614f6e600080fd5b614f7a88828901614d56565b93509350506040614eed88828901614f02565b60008083601f840112614fa257614fa2600080fd5b5081356001600160401b03811115614fbc57614fbc600080fd5b602083019150836060820283011115614da057614da0600080fd5b600080600060408486031215614fef57614fef600080fd5b6000614ffb8686614ca7565b93505060208401356001600160401b0381111561501a5761501a600080fd5b61502686828701614f8d565b92509250509250925092565b600061273482614c82565b614c9c81615032565b80356127348161503d565b60006020828403121561506657615066600080fd5b600061441b8484615046565b6000806000806080858703121561508b5761508b600080fd5b60006150978787614ca7565b94505060206150a887828801614ca7565b93505060406150b987828801614d2a565b9250506060614e7687828801614d2a565b60008060008060008060c087890312156150e6576150e6600080fd5b60006150f28989614ca7565b965050602061510389828a01614ca7565b955050604061511489828a01614ca7565b945050606061512589828a01614ca7565b935050608061513689828a01614d2a565b92505060a061514789828a01614d2a565b9150509295509295509295565b606081016151628286614cd3565b61516f6020830185614cd3565b61441b6040830184614cd3565b600061273482615032565b614c6e8161517c565b602081016127348284615187565b6000806000606084860312156151b6576151b6600080fd5b60006151c28686614ca7565b93505060206151d386828701614ca7565b92505060406151e486828701614d2a565b9150509250925092565b60008060006060848603121561520657615206600080fd5b60006152128686615046565b93505060206151d386828701614d2a565b600061522f8383615187565b505060200190565b6000615241825190565b80845260209384019383018060005b838110156152755781516152648882615223565b975060208301925050600101615250565b509495945050505050565b602080825281016143fc8184615237565b600080600080608085870312156152aa576152aa600080fd5b60006152b68787614ca7565b94505060206152c787828801614ca7565b93505060406150b987828801614ca7565b600080600080600060a086880312156152f3576152f3600080fd5b60006152ff8888614ca7565b955050602061531088828901614ca7565b945050604061532188828901614ca7565b9350506060614edc88828901614ca7565b6000806040838503121561534857615348600080fd5b60006153548585614ca7565b9250506020614d1a85828601614f02565b614c6e81614c82565b602081016127348284615365565b606081016151628286614c6a565b600080604083850312156153a0576153a0600080fd5b60006153ac8585614ca7565b9250506020614d1a85828601615046565b60006153c7825190565b80845260209384019383018060005b838110156152755781516153ea8882615223565b9750602083019250506001016153d6565b602080825281016143fc81846153bd565b8051606083019061541d8482615365565b5060208201516154306020850182614cd3565b5060408201516116fc6040850182614cd3565b600061544f838361540c565b505060600190565b6000615461825190565b80845260209384019383018060005b838110156152755781516154848882615443565b975060208301925050600101615470565b602080825281016143fc8184615457565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b03821117156154e1576154e16154a6565b6040525050565b60006154f360405190565b90506154ff82826154bc565b919050565b60006001600160401b0382111561551d5761551d6154a6565b5060209081020190565b600061553a61553584615504565b6154e8565b8381529050602080820190840283018581111561555957615559600080fd5b835b8181101561557d578061556e8882614ca7565b8452506020928301920161555b565b5050509392505050565b600082601f83011261559b5761559b600080fd5b813561441b848260208601615527565b6000602082840312156155c0576155c0600080fd5b81356001600160401b038111156155d9576155d9600080fd5b61441b84828501615587565b600061522f8383614cd3565b60006155fb825190565b80845260209384019383018060005b8381101561527557815161561e88826155e5565b97506020830192505060010161560a565b602080825281016143fc81846155f1565b6040810161564e8285614cd3565b6143fc6020830184614cd3565b6000806040838503121561567157615671600080fd5b6000614d098585614d2a565b6000806040838503121561569357615693600080fd5b600061569f8585614ca7565b9250506020614d1a85828601614d2a565b60098110610c8957600080fd5b8035612734816156b0565b600080604083850312156156de576156de600080fd5b60006156ea8585614ca7565b9250506020614d1a858286016156bd565b600080600080600060a0868803121561571657615716600080fd5b60006157228888614ca7565b955050602061573388828901614ca7565b945050604061574488828901614ca7565b935050606061575588828901614d2a565b9250506080614eed88828901614f02565b602e81526000602082017f436c6f736520666163746f722067726561746572207468616e206d6178696d7581526d369031b637b9b2903330b1ba37b960911b602082015291505b5060400190565b6020808252810161273481615766565b602e81526000602082017f436c6f736520666163746f7220736d616c6c6572207468616e206d696e696d7581526d369031b637b9b2903330b1ba37b960911b602082015291506157ad565b60208082528101612734816157c4565b600d81526000602082016c1a5b9d985b1a59081a5b9c1d5d609a1b815291505b5060200190565b602080825281016127348161581f565b634e487b7160e01b600052603260045260246000fd5b80516127348161503d565b60006020828403121561588c5761588c600080fd5b600061441b848461586c565b604081016158a68285615365565b6143fc6020830184615365565b634e487b7160e01b600052601160045260246000fd5b8181028082158382048514176158e1576158e16158b3565b5092915050565b6000602082840312156158fd576158fd600080fd5b600061441b84846156bd565b634e487b7160e01b600052601260045260246000fd5b60008261592e5761592e615909565b500490565b60a081016159418288615365565b61594e6020830187615365565b61595b6040830186614cd3565b6159686060830185615187565b6159756080830184614c6a565b9695505050505050565b602881526000602082017f4e6f6e7a65726f20626f72726f772062616c616e6365206166746572206c69718152673ab4b230ba34b7b760c11b602082015291506157ad565b602080825281016127348161597f565b604081016159e28285615187565b6143fc6020830184615187565b600e81526000602082016d616c72656164792065786973747360901b8152915061583f565b60208082528101612734816159ef565b80820180821115612734576127346158b3565b805161273481614d24565b600060208284031215615a5757615a57600080fd5b600061441b8484615a37565b606081016151628286615187565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b602082015291506157ad565b6020808252810161273481615a71565b60608101615ad58286615365565b61516f6020830185615365565b603181526000602082017f6c69717569646174696f6e20696e63656e746976652073686f756c64206265208152700cee4cac2e8cae440e8d0c2dc4062ca627607b1b602082015291506157ad565b6020808252810161273481615ae2565b60006000198203615b5357615b536158b3565b5060010190565b6040810161564e8285615365565b805161273481614efa565b600060208284031215615b8857615b88600080fd5b600061441b8484615b68565b601b81526000602082017f436f6d7074726f6c6c65723a20496e76616c69642076546f6b656e00000000008152915061583f565b6020808252810161273481615b94565b601981526000602082017f696e76616c6964206e756d626572206f66206d61726b657473000000000000008152915061583f565b6020808252810161273481615bd8565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015291506157ad565b6020808252810161273481615c1c565b600060ff8216612734565b614c6e81615c77565b602081016127348284615c82565b805160208301906116fc8482614cd3565b60408101615cb88285615365565b6143fc6020830184615c99565b60608101615cd38286615365565b615ce06020830185615365565b61441b6040830184615c99565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052600160045260246000fd5b81810381811115612734576127346158b3565b634e487b7160e01b600052603160045260246000fd5b60005b83811015615d5d578181015183820152602001615d45565b50506000910152565b6000615d70825190565b808452602084019350615d87818560208601615d42565b601f01601f19169290920192915050565b60408101615da68285615365565b818103602083015261441b8184615d66565b60608101615dc68286615365565b615dd36020830185615365565b81810360408301526148ad8184615d66565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65729101908152600061583f565b6020808252810161273481615de5565b602581526000602082017f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b602082015291506157ad565b6020808252810161273481615e27565b60098110610c8957610c89615ced565b806154ff81615e79565b600061273482615e89565b614c6e81615e93565b60408101615eb58285615365565b6143fc6020830184615e9e565b602881526000602082017f63616e6e6f742070617573652061206d61726b65742074686174206973206e6f8152671d081b1a5cdd195960c21b602082015291506157ad565b6020808252810161273481615ec2565b60608101615f258286615187565b615f326020830185615e9e565b61441b6040830184614c6a565b60008060008060808587031215615f5857615f58600080fd5b6000615f648787615a37565b9450506020615f7587828801615a37565b9350506040615f8687828801615a37565b9250506060614e7687828801615a37565b602281526000602082017f436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d8152611a5d60f21b602082015291506157ad565b6020808252810161273481615f97565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b602082015291506157ad565b6020808252810161273481615fe656fe7365744d61726b6574426f72726f774361707328616464726573735b5d2c75696e743235365b5d297365744d696e4c6971756964617461626c65436f6c6c61746572616c2875696e7432353629736574436f6c6c61746572616c466163746f7228616464726573732c75696e743235362c75696e7432353629736574416374696f6e7350617573656428616464726573735b5d2c75696e743235365b5d2c626f6f6c29736574466f726365644c69717569646174696f6e28616464726573732c626f6f6c297365744d61726b6574537570706c794361707328616464726573735b5d2c75696e743235365b5d29a2646970667358221220aceaedbcc81d5b354d19e0c90cc25c831276e80151c01a996b576b521c03598464736f6c63430008190033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x633C CODESIZE SUB DUP1 PUSH2 0x633C DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x136 JUMP JUMPDEST PUSH2 0x38 DUP2 PUSH2 0x53 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x80 MSTORE PUSH2 0x4D PUSH2 0x7D JUMP JUMPDEST POP PUSH2 0x1B9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7A JUMPI PUSH1 0x40 MLOAD PUSH4 0x42BCDF7F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xAE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA5 SWAP1 PUSH2 0x15F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF SWAP1 DUP2 AND EQ PUSH2 0x102 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP2 PUSH2 0xF9 SWAP2 PUSH2 0x1AA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x120 DUP2 PUSH2 0x104 JUMP JUMPDEST DUP2 EQ PUSH2 0x7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x111 DUP2 PUSH2 0x117 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x14B JUMPI PUSH2 0x14B PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x157 DUP5 DUP5 PUSH2 0x12B JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x111 DUP2 PUSH1 0x27 DUP2 MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320696E697469 PUSH1 0x20 DUP3 ADD MSTORE PUSH7 0x616C697A696E67 PUSH1 0xC8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP3 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD PUSH2 0x111 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x6161 PUSH2 0x1DB PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x7EA ADD MSTORE PUSH2 0x30C3 ADD MSTORE PUSH2 0x6161 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3FB JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x80D45A2D GT PUSH2 0x215 JUMPI DUP1 PUSH4 0xC32094C7 GT PUSH2 0x125 JUMPI DUP1 PUSH4 0xDDBF54FD GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xE8755446 GT PUSH2 0x87 JUMPI DUP1 PUSH4 0xE8755446 EQ PUSH2 0x968 JUMPI DUP1 PUSH4 0xE89D51AD EQ PUSH2 0x971 JUMPI DUP1 PUSH4 0xEADE3EED EQ PUSH2 0x984 JUMPI DUP1 PUSH4 0xEDE4EDD0 EQ PUSH2 0x997 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x9AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xDDBF54FD EQ PUSH2 0x91E JUMPI DUP1 PUSH4 0xDF71403B EQ PUSH2 0x931 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x944 JUMPI DUP1 PUSH4 0xE85A2960 EQ PUSH2 0x955 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD136AF44 GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0xD136AF44 EQ PUSH2 0x8DC JUMPI DUP1 PUSH4 0xDA35A26F EQ PUSH2 0x8EF JUMPI DUP1 PUSH4 0xDB5C65DE EQ PUSH2 0x902 JUMPI DUP1 PUSH4 0xDCE15449 EQ PUSH2 0x90B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC32094C7 EQ PUSH2 0x882 JUMPI DUP1 PUSH4 0xC488847B EQ PUSH2 0x895 JUMPI DUP1 PUSH4 0xC7EE005E EQ PUSH2 0x8B6 JUMPI DUP1 PUSH4 0xCAB4F84C EQ PUSH2 0x8C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA8431081 GT PUSH2 0x1A8 JUMPI DUP1 PUSH4 0xB2068E84 GT PUSH2 0x177 JUMPI DUP1 PUSH4 0xB2068E84 EQ PUSH2 0x814 JUMPI DUP1 PUSH4 0xB4A0BDF3 EQ PUSH2 0x834 JUMPI DUP1 PUSH4 0xBE26317E EQ PUSH2 0x845 JUMPI DUP1 PUSH4 0xC0891BA9 EQ PUSH2 0x84F JUMPI DUP1 PUSH4 0xC2998238 EQ PUSH2 0x862 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA8431081 EQ PUSH2 0x7B2 JUMPI DUP1 PUSH4 0xABFCEFFC EQ PUSH2 0x7C5 JUMPI DUP1 PUSH4 0xAFCFF50F EQ PUSH2 0x7E5 JUMPI DUP1 PUSH4 0xB0772D0B EQ PUSH2 0x80C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8E6470EA GT PUSH2 0x1E4 JUMPI DUP1 PUSH4 0x8E6470EA EQ PUSH2 0x737 JUMPI DUP1 PUSH4 0x8E8F294B EQ PUSH2 0x74A JUMPI DUP1 PUSH4 0x92136395 EQ PUSH2 0x78C JUMPI DUP1 PUSH4 0x929FE9A1 EQ PUSH2 0x79F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x80D45A2D EQ PUSH2 0x6D4 JUMPI DUP1 PUSH4 0x8B3113F6 EQ PUSH2 0x6E7 JUMPI DUP1 PUSH4 0x8C1AC18A EQ PUSH2 0x6FA JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x71D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x51DFF989 GT PUSH2 0x310 JUMPI DUP1 PUSH4 0x5CC4FDEB GT PUSH2 0x2A3 JUMPI DUP1 PUSH4 0x6D0BE88D GT PUSH2 0x272 JUMPI DUP1 PUSH4 0x6D0BE88D EQ PUSH2 0x68B JUMPI DUP1 PUSH4 0x6D35BF91 EQ PUSH2 0x69E JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x6B1 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x6B9 JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0x6C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5CC4FDEB EQ PUSH2 0x63D JUMPI DUP1 PUSH4 0x5EC88C79 EQ PUSH2 0x650 JUMPI DUP1 PUSH4 0x61252FD1 EQ PUSH2 0x663 JUMPI DUP1 PUSH4 0x6A56947E EQ PUSH2 0x678 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x530E784F GT PUSH2 0x2DF JUMPI DUP1 PUSH4 0x530E784F EQ PUSH2 0x5F1 JUMPI DUP1 PUSH4 0x56AAEE2D EQ PUSH2 0x604 JUMPI DUP1 PUSH4 0x5C21B6C5 EQ PUSH2 0x617 JUMPI DUP1 PUSH4 0x5C778605 EQ PUSH2 0x62A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x51DFF989 EQ PUSH2 0x53A JUMPI DUP1 PUSH4 0x520B6C74 EQ PUSH2 0x5AB JUMPI DUP1 PUSH4 0x528A174C EQ PUSH2 0x5BE JUMPI DUP1 PUSH4 0x52D84D1E EQ PUSH2 0x5D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1EDEDC91 GT PUSH2 0x393 JUMPI DUP1 PUSH4 0x41C728B9 GT PUSH2 0x362 JUMPI DUP1 PUSH4 0x41C728B9 EQ PUSH2 0x53A JUMPI DUP1 PUSH4 0x47EF3B3B EQ PUSH2 0x54D JUMPI DUP1 PUSH4 0x4A584432 EQ PUSH2 0x560 JUMPI DUP1 PUSH4 0x4ADA90AF EQ PUSH2 0x580 JUMPI DUP1 PUSH4 0x4E79238F EQ PUSH2 0x589 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1EDEDC91 EQ PUSH2 0x4D5 JUMPI DUP1 PUSH4 0x24AAA220 EQ PUSH2 0x4E8 JUMPI DUP1 PUSH4 0x2BCE219C EQ PUSH2 0x4FB JUMPI DUP1 PUSH4 0x3D98A1E5 EQ PUSH2 0x50E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x10B98338 GT PUSH2 0x3CF JUMPI DUP1 PUSH4 0x10B98338 EQ PUSH2 0x46E JUMPI DUP1 PUSH4 0x12348E96 EQ PUSH2 0x49C JUMPI DUP1 PUSH4 0x186DB48F EQ PUSH2 0x4AF JUMPI DUP1 PUSH4 0x1BC41F28 EQ PUSH2 0x4C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0x7E3DD2 EQ PUSH2 0x400 JUMPI DUP1 PUSH4 0x2C3BCBB EQ PUSH2 0x419 JUMPI DUP1 PUSH4 0x686DAB6 EQ PUSH2 0x446 JUMPI DUP1 PUSH4 0xE32CB86 EQ PUSH2 0x459 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP2 SWAP1 PUSH2 0x4C74 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x439 PUSH2 0x427 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH1 0xD1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP2 SWAP1 PUSH2 0x4CD9 JUMP JUMPDEST PUSH2 0x439 PUSH2 0x454 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH2 0x9BD JUMP JUMPDEST PUSH2 0x46C PUSH2 0x467 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH2 0xC78 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x403 PUSH2 0x47C CALLDATASIZE PUSH1 0x4 PUSH2 0x4CE7 JUMP JUMPDEST PUSH1 0xD7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x4AA CALLDATASIZE PUSH1 0x4 PUSH2 0x4D35 JUMP JUMPDEST PUSH2 0xC8C JUMP JUMPDEST PUSH2 0x46C PUSH2 0x4BD CALLDATASIZE PUSH1 0x4 PUSH2 0x4DA7 JUMP JUMPDEST PUSH2 0xD5F JUMP JUMPDEST PUSH2 0x46C PUSH2 0x4D0 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E1E JUMP JUMPDEST PUSH2 0xEAE JUMP JUMPDEST PUSH2 0x46C PUSH2 0x4E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E82 JUMP JUMPDEST PUSH2 0x1268 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x4F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F0D JUMP JUMPDEST PUSH2 0x12E5 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x509 CALLDATASIZE PUSH1 0x4 PUSH2 0x4FD7 JUMP JUMPDEST PUSH2 0x13A2 JUMP JUMPDEST PUSH2 0x403 PUSH2 0x51C CALLDATASIZE PUSH1 0x4 PUSH2 0x5051 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x548 CALLDATASIZE PUSH1 0x4 PUSH2 0x5072 JUMP JUMPDEST PUSH2 0x168B JUMP JUMPDEST PUSH2 0x46C PUSH2 0x55B CALLDATASIZE PUSH1 0x4 PUSH2 0x50CA JUMP JUMPDEST PUSH2 0x1702 JUMP JUMPDEST PUSH2 0x439 PUSH2 0x56E CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH1 0xCF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x439 PUSH1 0xCB SLOAD DUP2 JUMP JUMPDEST PUSH2 0x59C PUSH2 0x597 CALLDATASIZE PUSH1 0x4 PUSH2 0x5072 JUMP JUMPDEST PUSH2 0x17E4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5154 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x5B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4D35 JUMP JUMPDEST PUSH2 0x1815 JUMP JUMPDEST PUSH2 0x59C PUSH2 0x5CC CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH2 0x186F JUMP JUMPDEST PUSH2 0x5E4 PUSH2 0x5DF CALLDATASIZE PUSH1 0x4 PUSH2 0x4D35 JUMP JUMPDEST PUSH2 0x189A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP2 SWAP1 PUSH2 0x5190 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x5FF CALLDATASIZE PUSH1 0x4 PUSH2 0x5051 JUMP JUMPDEST PUSH2 0x18C4 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x612 CALLDATASIZE PUSH1 0x4 PUSH2 0x5051 JUMP JUMPDEST PUSH2 0x1928 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x625 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH2 0x1B27 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x638 CALLDATASIZE PUSH1 0x4 PUSH2 0x519E JUMP JUMPDEST PUSH2 0x1BD1 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x64B CALLDATASIZE PUSH1 0x4 PUSH2 0x51EE JUMP JUMPDEST PUSH2 0x1C47 JUMP JUMPDEST PUSH2 0x59C PUSH2 0x65E CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH2 0x1E58 JUMP JUMPDEST PUSH2 0x66B PUSH2 0x1E6A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP2 SWAP1 PUSH2 0x5280 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x686 CALLDATASIZE PUSH1 0x4 PUSH2 0x5291 JUMP JUMPDEST PUSH2 0x1ECC JUMP JUMPDEST PUSH2 0x46C PUSH2 0x699 CALLDATASIZE PUSH1 0x4 PUSH2 0x5291 JUMP JUMPDEST PUSH2 0x1F73 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x6AC CALLDATASIZE PUSH1 0x4 PUSH2 0x52D8 JUMP JUMPDEST PUSH2 0x20E6 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x218D JUMP JUMPDEST PUSH2 0x46C PUSH2 0x21A1 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH2 0x5E4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x6E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4D35 JUMP JUMPDEST PUSH2 0x21D6 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x6F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x5332 JUMP JUMPDEST PUSH2 0x21E7 JUMP JUMPDEST PUSH2 0x403 PUSH2 0x708 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH2 0x46C PUSH2 0x745 CALLDATASIZE PUSH1 0x4 PUSH2 0x519E JUMP JUMPDEST PUSH2 0x22AC JUMP JUMPDEST PUSH2 0x77D PUSH2 0x758 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD PUSH1 0xFF SWAP1 SWAP2 AND SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x537C JUMP JUMPDEST PUSH2 0x46C PUSH2 0x79A CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH2 0x23BF JUMP JUMPDEST PUSH2 0x403 PUSH2 0x7AD CALLDATASIZE PUSH1 0x4 PUSH2 0x538A JUMP JUMPDEST PUSH2 0x2706 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x7C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x4D35 JUMP JUMPDEST PUSH2 0x273A JUMP JUMPDEST PUSH2 0x7D8 PUSH2 0x7D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH2 0x27DA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP2 SWAP1 PUSH2 0x53FB JUMP JUMPDEST PUSH2 0x72A PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x7D8 PUSH2 0x2954 JUMP JUMPDEST PUSH2 0x827 PUSH2 0x822 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH2 0x29B4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP2 SWAP1 PUSH2 0x5495 JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5E4 JUMP JUMPDEST PUSH2 0x439 PUSH2 0x107 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x85D CALLDATASIZE PUSH1 0x4 PUSH2 0x519E JUMP JUMPDEST PUSH2 0x2BF5 JUMP JUMPDEST PUSH2 0x875 PUSH2 0x870 CALLDATASIZE PUSH1 0x4 PUSH2 0x55AB JUMP JUMPDEST PUSH2 0x2E6B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP2 SWAP1 PUSH2 0x562F JUMP JUMPDEST PUSH2 0x46C PUSH2 0x890 CALLDATASIZE PUSH1 0x4 PUSH2 0x5051 JUMP JUMPDEST PUSH2 0x2F19 JUMP JUMPDEST PUSH2 0x8A8 PUSH2 0x8A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x519E JUMP JUMPDEST PUSH2 0x2F93 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP3 SWAP2 SWAP1 PUSH2 0x5640 JUMP JUMPDEST PUSH1 0xD6 SLOAD PUSH2 0x5E4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x8D7 CALLDATASIZE PUSH1 0x4 PUSH2 0x5051 JUMP JUMPDEST PUSH2 0x30BE JUMP JUMPDEST PUSH2 0x46C PUSH2 0x8EA CALLDATASIZE PUSH1 0x4 PUSH2 0x4DA7 JUMP JUMPDEST PUSH2 0x32B0 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x8FD CALLDATASIZE PUSH1 0x4 PUSH2 0x565B JUMP JUMPDEST PUSH2 0x340B JUMP JUMPDEST PUSH2 0x439 PUSH1 0xD0 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x5E4 PUSH2 0x919 CALLDATASIZE PUSH1 0x4 PUSH2 0x567D JUMP JUMPDEST PUSH2 0x34E0 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x92C CALLDATASIZE PUSH1 0x4 PUSH2 0x5332 JUMP JUMPDEST PUSH2 0x3518 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x93F CALLDATASIZE PUSH1 0x4 PUSH2 0x519E JUMP JUMPDEST PUSH2 0x35DC JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x72A JUMP JUMPDEST PUSH2 0x403 PUSH2 0x963 CALLDATASIZE PUSH1 0x4 PUSH2 0x56C8 JUMP JUMPDEST PUSH2 0x39DE JUMP JUMPDEST PUSH2 0x439 PUSH1 0xCA SLOAD DUP2 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x97F CALLDATASIZE PUSH1 0x4 PUSH2 0x56FB JUMP JUMPDEST PUSH2 0x3A35 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x992 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CE7 JUMP JUMPDEST PUSH2 0x3C22 JUMP JUMPDEST PUSH2 0x439 PUSH2 0x9A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH2 0x3E40 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x9B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH2 0x40AA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9F5 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x15 DUP2 MSTORE PUSH1 0x20 ADD PUSH21 0x756E6C6973744D61726B6574286164647265737329 PUSH1 0x58 SHL DUP2 MSTORE POP PUSH2 0x411B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF AND PUSH2 0xA3A JUMPI DUP3 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xA45 DUP4 PUSH1 0x2 PUSH2 0x39DE JUMP JUMPDEST PUSH2 0xA62 JUMPI PUSH1 0x40 MLOAD PUSH4 0x309B075 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xA6D DUP4 PUSH1 0x0 PUSH2 0x39DE JUMP JUMPDEST PUSH2 0xA8A JUMPI PUSH1 0x40 MLOAD PUSH4 0x6ED36FB PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xA95 DUP4 PUSH1 0x1 PUSH2 0x39DE JUMP JUMPDEST PUSH2 0xAB2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4E577B7D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xABD DUP4 PUSH1 0x3 PUSH2 0x39DE JUMP JUMPDEST PUSH2 0xADA JUMPI PUSH1 0x40 MLOAD PUSH4 0x2B1E3409 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xAE5 DUP4 PUSH1 0x4 PUSH2 0x39DE JUMP JUMPDEST PUSH2 0xB02 JUMPI PUSH1 0x40 MLOAD PUSH4 0xBB56E525 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xB0D DUP4 PUSH1 0x7 PUSH2 0x39DE JUMP JUMPDEST PUSH2 0xB2A JUMPI PUSH1 0x40 MLOAD PUSH4 0xA6A9A9D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xB35 DUP4 PUSH1 0x5 PUSH2 0x39DE JUMP JUMPDEST PUSH2 0xB52 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB3CF04AD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xB5D DUP4 PUSH1 0x6 PUSH2 0x39DE JUMP JUMPDEST PUSH2 0xB7A JUMPI PUSH1 0x40 MLOAD PUSH4 0x8624F71 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xB85 DUP4 PUSH1 0x8 PUSH2 0x39DE JUMP JUMPDEST PUSH2 0xBA2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2F412A55 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0xBD9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x668019B3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0xC10 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8603C8CF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD ISZERO PUSH2 0xC33 JUMPI PUSH1 0x40 MLOAD PUSH4 0x707987B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0xFF NOT AND DUP2 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH32 0x302FEB03EFD5741DF80EFE7F97F5D93D74D46A542A3D312D0FAAE64FA1F3E0E9 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xC80 PUSH2 0x41B9 JUMP JUMPDEST PUSH2 0xC89 DUP2 PUSH2 0x41E3 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0xCCA PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x736574436C6F7365466163746F722875696E7432353629000000000000000000 DUP2 MSTORE POP PUSH2 0x411B JUMP JUMPDEST DUP1 PUSH8 0xC7D713B49DA0000 LT ISZERO PUSH2 0xCF2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x57B4 JUMP JUMPDEST DUP1 PUSH7 0xB1A2BC2EC50000 GT ISZERO PUSH2 0xD19 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x580F JUMP JUMPDEST PUSH1 0xCA DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x3B9670CF975D26958E754B57098EAA2AC914D8D2A31B83257997B9F346110FD9 SWAP1 PUSH2 0xD53 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x5640 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0xD80 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x603F PUSH1 0x28 SWAP2 CODECOPY PUSH2 0x411B JUMP JUMPDEST DUP3 DUP2 DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xD90 JUMPI POP DUP1 DUP3 EQ JUMPDEST PUSH2 0xDAC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5846 JUMP JUMPDEST PUSH2 0xDB5 DUP3 PUSH2 0x425C JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xEA5 JUMPI DUP5 DUP5 DUP3 DUP2 DUP2 LT PUSH2 0xDD2 JUMPI PUSH2 0xDD2 PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0xCF PUSH1 0x0 DUP10 DUP10 DUP6 DUP2 DUP2 LT PUSH2 0xDEF JUMPI PUSH2 0xDEF PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE04 SWAP2 SWAP1 PUSH2 0x5051 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SSTORE DUP7 DUP7 DUP3 DUP2 DUP2 LT PUSH2 0xE30 JUMPI PUSH2 0xE30 PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE45 SWAP2 SWAP1 PUSH2 0x5051 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x6F1951B2AAD10F3FC81B86D91105B413A5B3F847A34BBC5CE1904201B14438F6 DUP7 DUP7 DUP5 DUP2 DUP2 LT PUSH2 0xE81 JUMPI PUSH2 0xE81 PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x40 MLOAD PUSH2 0xE95 SWAP2 SWAP1 PUSH2 0x4CD9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x1 ADD PUSH2 0xDB8 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xEB9 DUP5 PUSH1 0x4 PUSH2 0x4287 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF AND PUSH2 0xEF5 JUMPI DUP5 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SUB PUSH2 0xF9D JUMPI ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5FE3B567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF4D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF71 SWAP2 SWAP1 PUSH2 0x5877 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xF98 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC73EB05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x10CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xFD8 JUMPI DUP4 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5FE3B567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1016 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x103A SWAP2 SWAP1 PUSH2 0x5877 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5FE3B567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1081 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10A5 SWAP2 SWAP1 PUSH2 0x5877 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x10CC JUMPI PUSH1 0x40 MLOAD PUSH4 0xC73EB05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x110B JUMPI DUP5 DUP3 PUSH1 0x40 MLOAD PUSH4 0xCDFB2DB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH2 0x5898 JUMP JUMPDEST PUSH1 0xD3 SLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xEA5 JUMPI PUSH1 0x0 PUSH1 0xD3 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x112E JUMPI PUSH2 0x112E PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x51D1D4F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 PUSH4 0xA3A3A9E SWAP1 PUSH2 0x116A SWAP1 DUP12 SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1184 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1198 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0xDB7954FD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP3 POP PUSH4 0xDB7954FD SWAP2 POP PUSH2 0x11CA SWAP1 DUP12 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x11F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0xDB7954FD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP3 POP PUSH4 0xDB7954FD SWAP2 POP PUSH2 0x122A SWAP1 DUP12 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1244 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1258 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x1111 JUMP JUMPDEST PUSH1 0xD6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x12DE JUMPI PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x67994E8B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xCF329D16 SWAP1 PUSH2 0x12AB SWAP1 DUP7 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x12D9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1306 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x60B8 PUSH1 0x2A SWAP2 CODECOPY PUSH2 0x411B JUMP JUMPDEST DUP4 DUP3 PUSH2 0x131A PUSH2 0x1315 DUP3 DUP5 PUSH2 0x58C9 JUMP JUMPDEST PUSH2 0x425C JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1398 JUMPI PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x138F JUMPI PUSH2 0x1387 DUP10 DUP10 DUP5 DUP2 DUP2 LT PUSH2 0x1345 JUMPI PUSH2 0x1345 PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x135A SWAP2 SWAP1 PUSH2 0x5051 JUMP JUMPDEST DUP9 DUP9 DUP5 DUP2 DUP2 LT PUSH2 0x136C JUMPI PUSH2 0x136C PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1381 SWAP2 SWAP1 PUSH2 0x58E8 JUMP JUMPDEST DUP8 PUSH2 0x42B3 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1328 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x131D JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13B0 DUP5 PUSH2 0x4380 PUSH2 0x43B4 JUMP JUMPDEST SWAP1 POP PUSH1 0xD0 SLOAD DUP2 PUSH1 0x0 ADD MLOAD GT ISZERO PUSH2 0x13E0 JUMPI PUSH1 0xD0 SLOAD DUP2 MLOAD PUSH1 0x40 MLOAD PUSH4 0x1A451C0F PUSH1 0xE2 SHL DUP2 MSTORE PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5640 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1400 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xCB SLOAD DUP2 MSTORE POP DUP4 PUSH1 0x40 ADD MLOAD PUSH2 0x4403 JUMP JUMPDEST DUP3 MLOAD SWAP1 SWAP2 POP DUP2 LT PUSH2 0x1428 JUMPI DUP2 MLOAD PUSH1 0x40 MLOAD PUSH4 0x2C1F8EF1 PUSH1 0xE2 SHL DUP2 MSTORE PUSH2 0xA31 SWAP2 DUP4 SWAP2 PUSH1 0x4 ADD PUSH2 0x5640 JUMP JUMPDEST DUP2 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 SUB PUSH2 0x144D JUMPI PUSH1 0x40 MLOAD PUSH4 0x95BF333 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH2 0x145C PUSH2 0x1315 PUSH1 0x2 DUP4 PUSH2 0x591F JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x161F JUMPI PUSH1 0xCD PUSH1 0x0 DUP8 DUP8 DUP5 DUP2 DUP2 LT PUSH2 0x147D JUMPI PUSH2 0x147D PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 MUL ADD PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1495 SWAP2 SWAP1 PUSH2 0x5051 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x14FA JUMPI DUP6 DUP6 DUP3 DUP2 DUP2 LT PUSH2 0x14C8 JUMPI PUSH2 0x14C8 PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 MUL ADD PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x14E0 SWAP2 SWAP1 PUSH2 0x5051 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0xCD PUSH1 0x0 DUP8 DUP8 DUP5 DUP2 DUP2 LT PUSH2 0x1510 JUMPI PUSH2 0x1510 PUSH2 0x5856 JUMP JUMPDEST PUSH2 0x1526 SWAP3 PUSH1 0x20 PUSH1 0x60 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0x5051 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x156F JUMPI DUP6 DUP6 DUP3 DUP2 DUP2 LT PUSH2 0x1559 JUMPI PUSH2 0x1559 PUSH2 0x5856 JUMP JUMPDEST PUSH2 0x14E0 SWAP3 PUSH1 0x20 PUSH1 0x60 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0x5051 JUMP JUMPDEST CALLDATASIZE DUP7 DUP7 DUP4 DUP2 DUP2 LT PUSH2 0x1582 JUMPI PUSH2 0x1582 PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 MUL ADD SWAP1 POP DUP1 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x159D SWAP2 SWAP1 PUSH2 0x5051 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8BBDB6DB CALLER DUP11 PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x15BF PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x5051 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x15E1 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5933 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x160F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x145F JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x162B DUP8 PUSH2 0x27DA JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x12D9 JUMPI PUSH1 0x0 PUSH2 0x1660 DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1652 JUMPI PUSH2 0x1652 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP12 PUSH2 0x4423 JUMP JUMPDEST POP SWAP2 POP POP DUP1 ISZERO PUSH2 0x1682 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x59C4 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x1633 JUMP JUMPDEST PUSH1 0xD6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x16FC JUMPI PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x67994E8B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xCF329D16 SWAP1 PUSH2 0x16CE SWAP1 DUP7 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1398 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0xD6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x17DC JUMPI PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x67994E8B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xCF329D16 SWAP1 PUSH2 0x1745 SWAP1 DUP7 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x175F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1773 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x67994E8B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP3 POP PUSH4 0xCF329D16 SWAP2 POP PUSH2 0x17A9 SWAP1 DUP8 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x17D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x17F9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x44CA PUSH2 0x44FE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 SWAP1 SWAP2 ADD MLOAD PUSH1 0x0 SWAP11 SWAP2 SWAP10 POP SWAP8 POP SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1836 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x6067 PUSH1 0x25 SWAP2 CODECOPY PUSH2 0x411B JUMP JUMPDEST PUSH1 0xD0 DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH31 0xB4F4F153AD7F1397564A8830FEF092481E8CF6A2CD3FF04F96D10BA51200A5 SWAP1 PUSH2 0xD53 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x5640 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x1881 DUP6 PUSH2 0x44CA PUSH2 0x43B4 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 SWAP1 SWAP2 ADD MLOAD PUSH1 0x0 SWAP8 SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xCE DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x18AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH2 0x18CC PUSH2 0x41B9 JUMP JUMPDEST PUSH2 0x18D5 DUP2 PUSH2 0x46C8 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP1 PUSH32 0xD52B2B9B7E9EE655FCB95D2E5B9E0C9F69E7EF2B8E9D2D0EA78402D576D22E22 SWAP1 PUSH2 0xD53 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x59D4 JUMP JUMPDEST PUSH2 0x1930 PUSH2 0x41B9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1969 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5A14 JUMP JUMPDEST PUSH1 0xD3 SLOAD PUSH2 0x197A PUSH2 0x1315 DUP3 PUSH1 0x1 PUSH2 0x5A24 JUMP JUMPDEST PUSH1 0xD3 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE PUSH32 0x915C3EB987B20E1AF620C1403197BF687FB7F18513B3A73FDE6E78C7072C41A6 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0xCE SLOAD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1A80 JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2A869A4D PUSH1 0xCE DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x1A0D JUMPI PUSH2 0x1A0D PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x1A43 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1A71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x19E3 JUMP JUMPDEST POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF7C618C1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1ABF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1AE3 SWAP2 SWAP1 PUSH2 0x5877 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x66A44D77DB1581603D7D8CA1CA494756C0D359C7FFACD9B2C8F78DAB7ACEAE2 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B32 DUP3 PUSH2 0x27DA JUMP JUMPDEST DUP1 MLOAD PUSH1 0xC9 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x12DE JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x96E85CED DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1B70 JUMPI PUSH2 0x1B70 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1B94 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1BC2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x1B47 JUMP JUMPDEST PUSH1 0xD6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x1C42 JUMPI PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x67994E8B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xCF329D16 SWAP1 PUSH2 0x1C14 SWAP1 DUP6 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xEA5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1C68 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2C DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x608C PUSH1 0x2C SWAP2 CODECOPY PUSH2 0x411B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF AND PUSH2 0x1CA4 JUMPI DUP4 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH8 0xD2F13F7789F0000 DUP4 GT ISZERO PUSH2 0x1CCD JUMPI PUSH1 0x40 MLOAD PUSH4 0x2F22CAD PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP3 GT ISZERO PUSH2 0x1CF5 JUMPI PUSH1 0x40 MLOAD PUSH3 0xF9474B PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 DUP3 LT ISZERO PUSH2 0x1D15 JUMPI PUSH1 0x40 MLOAD PUSH3 0xF9474B PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1D92 JUMPI POP PUSH1 0xC9 SLOAD PUSH1 0x40 MLOAD PUSH4 0xFC57D4DF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xFC57D4DF SWAP1 PUSH2 0x1D4F SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D6C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D90 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0x1DB1 JUMPI DUP4 PUSH1 0x40 MLOAD PUSH3 0xE52A7D PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD DUP4 DUP2 EQ PUSH2 0x1E01 JUMPI PUSH1 0x1 DUP3 ADD DUP5 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x70483E6592CD5182D45AC970E05BC62CDCC90E9D8EF2C2DBE686CF383BCD7FC5 SWAP1 PUSH2 0x1DF8 SWAP1 DUP8 SWAP1 DUP5 SWAP1 DUP9 SWAP1 PUSH2 0x5A63 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST PUSH1 0x2 DUP3 ADD SLOAD DUP4 DUP2 EQ PUSH2 0x17DC JUMPI PUSH1 0x2 DUP4 ADD DUP5 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x9E92C7D5FEF69846094F3DDCADCB9402C6BA469C461368714F1CABD8EF48B591 SWAP1 PUSH2 0x1E48 SWAP1 DUP9 SWAP1 DUP5 SWAP1 DUP9 SWAP1 PUSH2 0x5A63 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x1881 DUP6 PUSH2 0x4380 PUSH2 0x43B4 JUMP JUMPDEST PUSH1 0x60 PUSH1 0xD3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1EC2 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1EA4 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0xD6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x16FC JUMPI PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x67994E8B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xCF329D16 SWAP1 PUSH2 0x1F0F SWAP1 DUP7 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1F3D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x67994E8B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP3 POP PUSH4 0xCF329D16 SWAP2 POP PUSH2 0x16CE SWAP1 DUP6 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH2 0x1F7E DUP5 PUSH1 0x6 PUSH2 0x4287 JUMP JUMPDEST PUSH2 0x1F89 DUP5 DUP5 DUP4 PUSH2 0x46EF JUMP JUMPDEST PUSH1 0xD3 SLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x17DC JUMPI PUSH1 0x0 PUSH1 0xD3 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1FAC JUMPI PUSH2 0x1FAC PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x51D1D4F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 PUSH4 0xA3A3A9E SWAP1 PUSH2 0x1FE8 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2002 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2016 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0xDB7954FD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP3 POP PUSH4 0xDB7954FD SWAP2 POP PUSH2 0x2048 SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2062 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2076 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0xDB7954FD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP3 POP PUSH4 0xDB7954FD SWAP2 POP PUSH2 0x20A8 SWAP1 DUP11 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x20D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x1F8F JUMP JUMPDEST PUSH1 0xD6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x12DE JUMPI PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x67994E8B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xCF329D16 SWAP1 PUSH2 0x2129 SWAP1 DUP6 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2157 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x67994E8B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP3 POP PUSH4 0xCF329D16 SWAP2 POP PUSH2 0x12AB SWAP1 DUP7 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH2 0x2195 PUSH2 0x41B9 JUMP JUMPDEST PUSH2 0x219F PUSH1 0x0 PUSH2 0x4794 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x65 SLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 EQ PUSH2 0x21CD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5AB7 JUMP JUMPDEST PUSH2 0xC89 DUP2 PUSH2 0x4794 JUMP JUMPDEST PUSH2 0x21DE PUSH2 0x41B9 JUMP JUMPDEST PUSH2 0xC89 DUP2 PUSH2 0x47AD JUMP JUMPDEST PUSH2 0x2208 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x60E2 PUSH1 0x22 SWAP2 CODECOPY PUSH2 0x411B JUMP JUMPDEST PUSH2 0x2211 DUP3 PUSH2 0x46C8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x224C JUMPI DUP2 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP5 ISZERO ISZERO OR SWAP1 SSTORE MLOAD PUSH32 0x3561D5280EBB02280893B1D60978E4A27E7654A149C5D0E7C2CF65389CE1694 SWAP1 PUSH2 0x22A0 SWAP1 DUP5 SWAP1 PUSH2 0x4C74 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0x22B7 DUP4 PUSH1 0x1 PUSH2 0x4287 JUMP JUMPDEST PUSH2 0x22C2 DUP4 DUP4 DUP4 PUSH2 0x46EF JUMP JUMPDEST PUSH1 0xD3 SLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x12DE JUMPI PUSH1 0x0 PUSH1 0xD3 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x22E5 JUMPI PUSH2 0x22E5 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x51D1D4F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 PUSH4 0xA3A3A9E SWAP1 PUSH2 0x2321 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x233B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x234F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0xDB7954FD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP3 POP PUSH4 0xDB7954FD SWAP2 POP PUSH2 0x2381 SWAP1 DUP10 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x239B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x23AF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x22C8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x23CA DUP3 PUSH2 0x27DA JUMP JUMPDEST DUP1 MLOAD PUSH1 0xC9 SLOAD SWAP2 SWAP3 POP SWAP1 CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x24E9 JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x23FB JUMPI PUSH2 0x23FB PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA6AFED95 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2442 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2466 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x96E85CED DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2488 JUMPI PUSH2 0x2488 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x24AC SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x24DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x23E1 JUMP JUMPDEST POP POP PUSH1 0x0 PUSH2 0x24F9 DUP6 PUSH2 0x4380 PUSH2 0x43B4 JUMP JUMPDEST SWAP1 POP PUSH1 0xD0 SLOAD DUP2 PUSH1 0x0 ADD MLOAD GT ISZERO PUSH2 0x2529 JUMPI PUSH1 0xD0 SLOAD DUP2 MLOAD PUSH1 0x40 MLOAD PUSH4 0x1A451C0F PUSH1 0xE2 SHL DUP2 MSTORE PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5640 JUMP JUMPDEST DUP1 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 SUB PUSH2 0x254E JUMPI PUSH1 0x40 MLOAD PUSH4 0x95BF333 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE DUP4 MLOAD DUP3 MSTORE DUP3 MLOAD DUP1 DUP3 ADD DUP5 MSTORE DUP5 DUP5 ADD MLOAD DUP2 MSTORE DUP4 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP4 MSTORE PUSH1 0xCB SLOAD DUP2 MSTORE SWAP1 SWAP2 PUSH1 0x0 SWAP2 PUSH2 0x2586 SWAP2 SWAP1 PUSH2 0x480A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2594 DUP4 DUP4 PUSH2 0x4852 JUMP JUMPDEST SWAP1 POP PUSH2 0x25B8 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH8 0xDE0B6B3A7640000 DUP2 MSTORE POP DUP3 MLOAD SWAP1 MLOAD LT SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x25DC JUMPI DUP2 MLOAD DUP4 MLOAD PUSH1 0x40 MLOAD PUSH4 0x1A451C0F PUSH1 0xE2 SHL DUP2 MSTORE PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5640 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x12D9 JUMPI PUSH1 0x0 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x25FB JUMPI PUSH2 0x25FB PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x2612 DUP4 DUP14 PUSH2 0x4423 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH2 0x2623 DUP7 DUP4 PUSH2 0x4403 JUMP JUMPDEST SWAP1 POP DUP3 ISZERO PUSH2 0x268E JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB2A02FF1 DUP12 DUP16 DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x265B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5AC7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2675 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2689 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST DUP2 ISZERO PUSH2 0x26F7 JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x44FE6FFE DUP12 DUP16 DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x26C4 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5AC7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x26F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x25DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE PUSH1 0x3 SWAP1 SWAP4 ADD SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 LT ISZERO PUSH2 0x2762 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5B30 JUMP JUMPDEST PUSH2 0x27A0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x7365744C69717569646174696F6E496E63656E746976652875696E7432353629 DUP2 MSTORE POP PUSH2 0x411B JUMP JUMPDEST PUSH1 0xCB DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xAEBA5A6C40A8AC138134BFF1AAA65DEBF25971188A58804BAD717F82F0EC1316 SWAP1 PUSH2 0xD53 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x5640 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCC PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP3 MLOAD DUP2 DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP4 MSTORE DUP1 DUP4 MSTORE PUSH1 0x60 SWAP5 SWAP4 DUP5 SWAP4 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2848 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x282A JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x286F JUMPI PUSH2 0x286F PUSH2 0x54A6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2898 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2947 JUMPI PUSH1 0x0 PUSH1 0xCD PUSH1 0x0 DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x28BE JUMPI PUSH2 0x28BE PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0x293E JUMPI DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2900 JUMPI PUSH2 0x2900 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x291A JUMPI PUSH2 0x291A PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH2 0x293B DUP7 PUSH2 0x5B40 JUMP JUMPDEST SWAP6 POP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x289E JUMP JUMPDEST POP SWAP3 DUP4 MSTORE POP SWAP1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0xCE DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1EC2 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1EA4 JUMPI POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0xD3 SLOAD PUSH1 0x60 SWAP1 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x29D2 JUMPI PUSH2 0x29D2 PUSH2 0x54A6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2A30 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x2A1D PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x29F0 JUMPI SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2BEE JUMPI PUSH1 0x0 PUSH1 0xD3 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x2A53 JUMPI PUSH2 0x2A53 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xF7C618C1 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP5 POP DUP5 SWAP3 PUSH4 0xF7C618C1 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2AA5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2AC9 SWAP2 SWAP1 PUSH2 0x5877 JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x74C4C1CC DUP10 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2B11 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B2E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2B52 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C05A7C5 DUP10 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2B83 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2BA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2BC4 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST DUP2 MSTORE POP DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2BD9 JUMPI PUSH2 0x2BD9 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x2A36 JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2C00 DUP4 PUSH1 0x0 PUSH2 0x4287 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2C3B JUMPI DUP3 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x0 NOT DUP2 EQ PUSH2 0x2D6E JUMPI PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C9D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2CC1 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x182DF0F5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D0E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2D32 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP PUSH1 0x0 PUSH2 0x2D43 DUP3 DUP5 DUP8 PUSH2 0x488C JUMP JUMPDEST SWAP1 POP DUP4 DUP2 GT ISZERO PUSH2 0x2D6A JUMPI DUP7 DUP5 PUSH1 0x40 MLOAD PUSH4 0xDB33BE3D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH2 0x5B5A JUMP JUMPDEST POP POP POP JUMPDEST PUSH1 0xD3 SLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x17DC JUMPI PUSH1 0x0 PUSH1 0xD3 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x2D91 JUMPI PUSH2 0x2D91 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x51D1D4F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 PUSH4 0xA3A3A9E SWAP1 PUSH2 0x2DCD SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2DE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2DFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0xDB7954FD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP3 POP PUSH4 0xDB7954FD SWAP2 POP PUSH2 0x2E2D SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2E5B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x2D74 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2E8A JUMPI PUSH2 0x2E8A PUSH2 0x54A6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2EB3 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2F11 JUMPI PUSH1 0x0 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2ED5 JUMPI PUSH2 0x2ED5 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x2EE9 DUP2 CALLER PUSH2 0x48B6 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2EFD JUMPI PUSH2 0x2EFD PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x2EB9 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2F21 PUSH2 0x41B9 JUMP JUMPDEST PUSH2 0x2F2A DUP2 PUSH2 0x46C8 JUMP JUMPDEST PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH32 0xCB20DAB7409E4FB972D9ADCCB39530520B226CE6940D85C9523A499B950B6EA3 SWAP2 PUSH2 0x2F69 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP5 SWAP1 PUSH2 0x59D4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0xD6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2FA1 DUP7 PUSH2 0x49A9 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2FAE DUP7 PUSH2 0x49A9 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x182DF0F5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2FF0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3014 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x302E PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP4 ADD DUP6 MSTORE SWAP1 DUP2 MSTORE DUP4 MLOAD DUP1 DUP4 ADD DUP6 MSTORE PUSH1 0xCB SLOAD DUP2 MSTORE DUP5 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP5 MSTORE DUP9 DUP3 MSTORE SWAP2 SWAP3 PUSH2 0x306A SWAP2 PUSH2 0x480A JUMP JUMPDEST SWAP3 POP PUSH2 0x3092 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP9 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP9 DUP2 MSTORE POP PUSH2 0x480A JUMP JUMPDEST SWAP2 POP PUSH2 0x309E DUP4 DUP4 PUSH2 0x4852 JUMP JUMPDEST SWAP1 POP PUSH2 0x30AA DUP2 DUP12 PUSH2 0x4403 JUMP JUMPDEST PUSH1 0x0 SWAP14 SWAP1 SWAP13 POP SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x30E7 PUSH32 0x0 PUSH2 0x4A43 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3123 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH4 0xD005CE47 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3D9EA3A1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3161 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3185 SWAP2 SWAP1 PUSH2 0x5B73 JUMP JUMPDEST PUSH2 0x31A1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5BC8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR DUP3 SSTORE DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x31DC DUP3 PUSH2 0x4A70 JUMP JUMPDEST PUSH1 0xD3 SLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3273 JUMPI PUSH1 0xD3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x31FD JUMPI PUSH2 0x31FD PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x2A869A4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x2A869A4D SWAP1 PUSH2 0x3236 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3250 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3264 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x31E2 JUMP JUMPDEST POP PUSH32 0xAF16AD15F9E29D5140E8E81A30A92A755AA8EDFF3D301053C84392B70C0D09A3 DUP4 PUSH1 0x40 MLOAD PUSH2 0x32A3 SWAP2 SWAP1 PUSH2 0x5190 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH2 0x32D1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x6104 PUSH1 0x28 SWAP2 CODECOPY PUSH2 0x411B JUMP JUMPDEST DUP3 PUSH1 0x0 DUP2 SWAP1 SUB PUSH2 0x32F3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5C0C JUMP JUMPDEST DUP1 DUP3 EQ PUSH2 0x3312 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5C0C JUMP JUMPDEST PUSH2 0x331B DUP2 PUSH2 0x425C JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x17DC JUMPI DUP4 DUP4 DUP3 DUP2 DUP2 LT PUSH2 0x3338 JUMPI PUSH2 0x3338 PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0xD1 PUSH1 0x0 DUP9 DUP9 DUP6 DUP2 DUP2 LT PUSH2 0x3355 JUMPI PUSH2 0x3355 PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x336A SWAP2 SWAP1 PUSH2 0x5051 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SSTORE DUP6 DUP6 DUP3 DUP2 DUP2 LT PUSH2 0x3396 JUMPI PUSH2 0x3396 PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x33AB SWAP2 SWAP1 PUSH2 0x5051 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x9E0AD9CEE10BDF36B7FBD38910C0BDFF0F275ACE679B45B922381C2723D676F8 DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0x33E7 JUMPI PUSH2 0x33E7 PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x40 MLOAD PUSH2 0x33FB SWAP2 SWAP1 PUSH2 0x4CD9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x1 ADD PUSH2 0x331E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x342B JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x3445 JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3445 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x3461 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5C67 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x3484 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x348C PUSH2 0x4B2E JUMP JUMPDEST PUSH2 0x3495 DUP3 PUSH2 0x4B5D JUMP JUMPDEST PUSH2 0x349E DUP4 PUSH2 0x47AD JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1C42 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH2 0x32A3 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x5C8B JUMP JUMPDEST PUSH1 0xCC PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x34FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 POP DUP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x3521 DUP3 PUSH2 0x46C8 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP2 ISZERO ISZERO PUSH1 0xFF SWAP1 SWAP2 AND ISZERO ISZERO SUB PUSH2 0x356D JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB6C2C83 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO OR SWAP1 SSTORE SWAP1 MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xCB325B7784F78486E42849C7A50B8C5EE008D00CD90E108A58912C0FCB6288B4 SWAP1 PUSH2 0x35D0 SWAP1 DUP6 SWAP1 PUSH2 0x4C74 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x35E7 DUP4 PUSH1 0x2 PUSH2 0x4287 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3622 JUMPI DUP3 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE PUSH1 0x3 SWAP1 SWAP4 ADD SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3666 JUMPI PUSH2 0x365C DUP4 PUSH2 0x4A43 JUMP JUMPDEST PUSH2 0x3666 CALLER DUP4 PUSH2 0x48B6 JUMP JUMPDEST PUSH2 0x366F DUP3 PUSH2 0x1B27 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x40 MLOAD PUSH4 0xFC57D4DF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xFC57D4DF SWAP1 PUSH2 0x369F SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x36BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x36E0 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST PUSH1 0x0 SUB PUSH2 0x3701 JUMPI DUP3 PUSH1 0x40 MLOAD PUSH3 0xE52A7D PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x0 NOT DUP2 EQ PUSH2 0x3831 JUMPI PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x47BD3718 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3763 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3787 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xBBCAC557 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x37C9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x37ED SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH2 0x37FC DUP7 DUP6 PUSH2 0x5A24 JUMP JUMPDEST PUSH2 0x3806 SWAP2 SWAP1 PUSH2 0x5A24 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 GT ISZERO PUSH2 0x382D JUMPI DUP7 DUP5 PUSH1 0x40 MLOAD PUSH4 0x2E649EED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH2 0x5B5A JUMP JUMPDEST POP POP POP JUMPDEST PUSH1 0x0 PUSH2 0x3843 DUP5 DUP7 PUSH1 0x0 DUP7 PUSH2 0x44CA PUSH2 0x44FE JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x3869 JUMPI PUSH1 0x40 MLOAD PUSH4 0xBB55FD27 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAA5AF0FD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x38B4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x38D8 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST SWAP1 MSTORE PUSH1 0xD3 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1398 JUMPI PUSH1 0x0 PUSH1 0xD3 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x3900 JUMPI PUSH2 0x3900 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x23526079 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 PUSH4 0x23526079 SWAP1 PUSH2 0x393E SWAP1 DUP13 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CAA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3958 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x396C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0x6A95DDEF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP3 POP PUSH4 0x6A95DDEF SWAP2 POP PUSH2 0x39A0 SWAP1 DUP13 SWAP1 DUP13 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CC5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x39BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x39CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x38E3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 DUP4 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x3A09 JUMPI PUSH2 0x3A09 PUSH2 0x5CED JUMP JUMPDEST PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x3A1A JUMPI PUSH2 0x3A1A PUSH2 0x5CED JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x3A40 DUP6 PUSH1 0x5 PUSH2 0x4287 JUMP JUMPDEST PUSH2 0x3A49 DUP4 PUSH2 0x1B27 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3A84 JUMPI DUP5 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3ABF JUMPI DUP4 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x95DD9193 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH4 0x95DD9193 SWAP1 PUSH2 0x3AEE SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B0B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3B2F SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST SWAP1 POP DUP2 DUP1 PUSH2 0x3B55 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x3B81 JUMPI DUP1 DUP4 GT ISZERO PUSH2 0x3B7B JUMPI PUSH1 0x40 MLOAD PUSH4 0xE46C1559 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH2 0x12DE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3B8F DUP6 PUSH2 0x4380 PUSH2 0x43B4 JUMP JUMPDEST SWAP1 POP PUSH1 0xD0 SLOAD DUP2 PUSH1 0x0 ADD MLOAD GT PUSH2 0x3BBE JUMPI PUSH1 0xD0 SLOAD DUP2 MLOAD PUSH1 0x40 MLOAD PUSH4 0x6E61BB05 PUSH1 0xE1 SHL DUP2 MSTORE PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5640 JUMP JUMPDEST DUP1 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 SUB PUSH2 0x3BE3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x95BF333 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3BFF PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xCA SLOAD DUP2 MSTORE POP DUP5 PUSH2 0x4403 JUMP JUMPDEST SWAP1 POP DUP1 DUP6 GT ISZERO PUSH2 0x1398 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE46C1559 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3C2D DUP3 PUSH1 0x3 PUSH2 0x4287 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x40 MLOAD PUSH4 0x96E85CED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x96E85CED SWAP1 PUSH2 0x3C5D SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3C77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3C8B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3CCA JUMPI DUP2 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0xD3 SLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x16FC JUMPI PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAA5AF0FD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3D23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3D47 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST DUP2 MSTORE POP SWAP1 POP PUSH1 0x0 PUSH1 0xD3 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x3D61 JUMPI PUSH2 0x3D61 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x23526079 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 PUSH4 0x23526079 SWAP1 PUSH2 0x3D9F SWAP1 DUP10 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CAA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3DB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3DCD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0x6A95DDEF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP3 POP PUSH4 0x6A95DDEF SWAP2 POP PUSH2 0x3E01 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CC5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3E1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3E2F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x3CD0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E4D DUP3 PUSH1 0x8 PUSH2 0x4287 JUMP JUMPDEST DUP2 PUSH1 0x0 DUP1 PUSH2 0x3E5B DUP4 CALLER PUSH2 0x4423 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP1 PUSH1 0x0 EQ PUSH2 0x3E81 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF8A5D66D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3E8C DUP6 CALLER DUP5 PUSH2 0x46EF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE PUSH1 0x3 DUP2 ADD SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3EC8 JUMPI POP PUSH1 0x0 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 DUP3 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0xCC DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP3 MLOAD DUP2 DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP4 MSTORE DUP1 DUP4 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3F3A JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3F1C JUMPI JUMPDEST POP POP DUP4 MLOAD SWAP4 SWAP5 POP DUP4 SWAP3 POP PUSH1 0x0 SWAP2 POP POP JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3F94 JUMPI DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3F6E JUMPI PUSH2 0x3F6E PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x3F8C JUMPI DUP1 SWAP2 POP PUSH2 0x3F94 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x3F4A JUMP JUMPDEST POP DUP2 DUP2 LT PUSH2 0x3FA4 JUMPI PUSH2 0x3FA4 PUSH2 0x5D03 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP2 SWAP1 PUSH2 0x3FC3 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x5D19 JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0x3FD3 JUMPI PUSH2 0x3FD3 PUSH2 0x5856 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x4003 JUMPI PUSH2 0x4003 PUSH2 0x5856 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP DUP1 DUP1 SLOAD DUP1 PUSH2 0x4041 JUMPI PUSH2 0x4041 PUSH2 0x5D2C JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 DUP3 ADD PUSH1 0x0 NOT SWAP1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE SWAP1 SWAP2 ADD SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD CALLER SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND SWAP2 PUSH32 0xE699A64C18B07AC5B7301AA273F36A2287239EB9501D81950672794AFBA29A0D SWAP2 SWAP1 LOG3 POP PUSH1 0x0 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x40B2 PUSH2 0x41B9 JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH2 0x40E3 PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x40 MLOAD PUSH4 0x18C5E8AB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x18C5E8AB SWAP1 PUSH2 0x414E SWAP1 CALLER SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5D98 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x416B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x418F SWAP2 SWAP1 PUSH2 0x5B73 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x41B5 JUMPI CALLER ADDRESS DUP4 PUSH1 0x40 MLOAD PUSH4 0x4A3FA293 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5DB8 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x219F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5E17 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x4209 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5E69 JUMP JUMPDEST PUSH1 0x97 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP1 PUSH32 0x66FD58E82F7B31A2A5C30E0888F3093EFE4E111B00CD2B0C31FE014601293AA0 SWAP1 PUSH2 0xD53 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x5898 JUMP JUMPDEST PUSH2 0x107 SLOAD DUP2 GT ISZERO PUSH2 0xC89 JUMPI PUSH2 0x107 SLOAD DUP2 PUSH1 0x40 MLOAD PUSH4 0x792BFB1B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH2 0x5640 JUMP JUMPDEST PUSH2 0x4291 DUP3 DUP3 PUSH2 0x39DE JUMP JUMPDEST ISZERO PUSH2 0x41B5 JUMPI DUP2 DUP2 PUSH1 0x40 MLOAD PUSH4 0x13B3CCB1 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH2 0x5EA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x42EB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5F07 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP3 SWAP2 DUP5 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x4317 JUMPI PUSH2 0x4317 PUSH2 0x5CED JUMP JUMPDEST PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x4328 JUMPI PUSH2 0x4328 PUSH2 0x5CED JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH32 0x35007A986BCD36D2F73FC7F1B73762E12EADB4406DD163194950FD3B5A6A827D DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x32A3 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5F17 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP3 ADD DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND DUP3 MSTORE PUSH1 0xCD SWAP1 MSTORE KECCAK256 PUSH1 0x2 ADD SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x43ED PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x43FC DUP4 PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 PUSH2 0x44FE JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4410 DUP5 DUP5 PUSH2 0x4B84 JUMP JUMPDEST SWAP1 POP PUSH2 0x441B DUP2 PUSH2 0x4BAC JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC37F68E2 DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4455 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4472 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4496 SWAP2 SWAP1 PUSH2 0x5F3F JUMP JUMPDEST SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP SWAP1 POP DUP1 ISZERO PUSH2 0x44C2 JUMPI DUP6 DUP6 PUSH1 0x40 MLOAD PUSH4 0x15E34D9 PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH2 0x5898 JUMP JUMPDEST POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP3 ADD DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND DUP3 MSTORE PUSH1 0xCD SWAP1 MSTORE KECCAK256 PUSH1 0x1 ADD SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x4537 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4542 DUP8 PUSH2 0x27DA JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x466A JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4566 JUMPI PUSH2 0x4566 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x457F DUP5 DUP15 PUSH2 0x4423 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x459B DUP8 PUSH2 0x49A9 JUMP JUMPDEST DUP2 MSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0x45BA PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP6 DUP2 MSTORE POP DUP4 PUSH2 0x480A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x45D4 PUSH2 0x45CE DUP9 DUP15 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP4 PUSH2 0x480A JUMP JUMPDEST SWAP1 POP PUSH2 0x45E5 DUP2 DUP8 DUP14 PUSH1 0x20 ADD MLOAD PUSH2 0x488C JUMP JUMPDEST PUSH1 0x20 DUP13 ADD MSTORE DUP11 MLOAD PUSH2 0x45F9 SWAP1 DUP4 SWAP1 DUP9 SWAP1 PUSH2 0x488C JUMP JUMPDEST DUP12 MSTORE PUSH1 0x40 DUP12 ADD MLOAD PUSH2 0x460D SWAP1 DUP5 SWAP1 DUP8 SWAP1 PUSH2 0x488C JUMP JUMPDEST DUP12 PUSH1 0x40 ADD DUP2 DUP2 MSTORE POP POP DUP15 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x4658 JUMPI PUSH2 0x463E DUP2 DUP16 DUP14 PUSH1 0x60 ADD MLOAD PUSH2 0x488C JUMP JUMPDEST PUSH1 0x60 DUP13 ADD DUP2 SWAP1 MSTORE PUSH2 0x4652 SWAP1 DUP5 SWAP1 DUP16 SWAP1 PUSH2 0x488C JUMP JUMPDEST PUSH1 0x60 DUP13 ADD MSTORE JUMPDEST POP POP POP POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x454A JUMP JUMPDEST POP PUSH1 0x0 DUP4 PUSH1 0x60 ADD MLOAD DUP5 PUSH1 0x40 ADD MLOAD PUSH2 0x4681 SWAP2 SWAP1 PUSH2 0x5A24 JUMP JUMPDEST SWAP1 POP DUP1 DUP5 PUSH1 0x20 ADD MLOAD GT ISZERO PUSH2 0x46A8 JUMPI PUSH1 0x20 DUP5 ADD MLOAD DUP2 SWAP1 SUB PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0x0 PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x46BC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD DUP2 SUB PUSH1 0xA0 DUP6 ADD MSTORE JUMPDEST POP POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xC89 JUMPI PUSH1 0x40 MLOAD PUSH4 0x42BCDF7F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF AND PUSH2 0x472B JUMPI DUP4 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4753 JUMPI POP POP POP POP JUMP JUMPDEST PUSH2 0x475C DUP4 PUSH2 0x1B27 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x476E DUP5 DUP7 DUP6 PUSH1 0x0 PUSH2 0x44CA PUSH2 0x44FE JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x12DE JUMPI PUSH1 0x40 MLOAD PUSH4 0xBB55FD27 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH2 0xC89 DUP2 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x107 SLOAD DUP2 GT PUSH2 0x47CF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5FD6 JUMP JUMPDEST PUSH2 0x107 DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC2D09FEF144F7C8A86F71EA459F8FC17F675768EB1AE369CBD77FB31D467AAFA SWAP1 PUSH2 0xD53 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x5640 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x483F DUP7 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x0 ADD MLOAD PUSH2 0x4C16 JUMP JUMPDEST PUSH2 0x4849 SWAP2 SWAP1 PUSH2 0x591F JUMP JUMPDEST SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x4849 PUSH2 0x4885 DUP7 PUSH1 0x0 ADD MLOAD PUSH8 0xDE0B6B3A7640000 PUSH2 0x4C16 JUMP JUMPDEST DUP6 MLOAD PUSH2 0x4C22 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4899 DUP6 DUP6 PUSH2 0x4B84 JUMP JUMPDEST SWAP1 POP PUSH2 0x48AD PUSH2 0x48A7 DUP3 PUSH2 0x4BAC JUMP JUMPDEST DUP5 PUSH2 0x4C2E JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x48C1 DUP3 PUSH1 0x7 PUSH2 0x4287 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF AND PUSH2 0x48FD JUMPI DUP3 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x4925 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 DUP5 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0xCC DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE DUP5 MSTORE SWAP2 DUP4 KECCAK256 SWAP1 SWAP2 ADD DUP1 SLOAD SWAP5 DUP9 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP6 AND DUP6 OR SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP2 PUSH32 0x3AB23AB0D51CCCC0C3085AEC51F99228625AA1A922B3A8CA89A26B0F2027A1A5 SWAP2 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x40 MLOAD PUSH4 0xFC57D4DF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xFC57D4DF SWAP1 PUSH2 0x49DE SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x49FB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4A1F SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x2734 JUMPI DUP3 PUSH1 0x40 MLOAD PUSH3 0xE52A7D PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ PUSH2 0xC89 JUMPI DUP1 CALLER PUSH1 0x40 MLOAD PUSH4 0x4E9383FB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH2 0x5898 JUMP JUMPDEST PUSH1 0xCE SLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4AD8 JUMPI DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xCE DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x4A9B JUMPI PUSH2 0x4A9B PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x4AD0 JUMPI DUP3 PUSH1 0x40 MLOAD PUSH4 0xD005CE47 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x4A76 JUMP JUMPDEST POP POP PUSH1 0xCE DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE PUSH1 0x0 DUP3 SWAP1 MSTORE PUSH32 0xD36CD1C74EF8D7326D8021B776C18FB5A5724B7F7BC93C2F42E43E10EF27D12A ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND OR SWAP1 SSTORE SLOAD PUSH2 0x41B5 DUP2 PUSH2 0x425C JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x4B55 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x602E JUMP JUMPDEST PUSH2 0x219F PUSH2 0x4C3A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xC80 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x602E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x4849 DUP6 PUSH1 0x0 ADD MLOAD DUP6 PUSH2 0x4C16 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x2734 SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 PUSH2 0x591F JUMP JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x43FC DUP3 DUP5 PUSH2 0x58C9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x43FC DUP3 DUP5 PUSH2 0x591F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x43FC DUP3 DUP5 PUSH2 0x5A24 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x4C61 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x602E JUMP JUMPDEST PUSH2 0x219F CALLER PUSH2 0x4794 JUMP JUMPDEST DUP1 ISZERO ISZERO JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2734 DUP3 DUP5 PUSH2 0x4C6A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2734 JUMP JUMPDEST PUSH2 0x4C9C DUP2 PUSH2 0x4C82 JUMP JUMPDEST DUP2 EQ PUSH2 0xC89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2734 DUP2 PUSH2 0x4C93 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4CC7 JUMPI PUSH2 0x4CC7 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x441B DUP5 DUP5 PUSH2 0x4CA7 JUMP JUMPDEST DUP1 PUSH2 0x4C6E JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2734 DUP3 DUP5 PUSH2 0x4CD3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4CFD JUMPI PUSH2 0x4CFD PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4D09 DUP6 DUP6 PUSH2 0x4CA7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x4D1A DUP6 DUP3 DUP7 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 PUSH2 0x4C9C JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2734 DUP2 PUSH2 0x4D24 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4D4A JUMPI PUSH2 0x4D4A PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x441B DUP5 DUP5 PUSH2 0x4D2A JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4D6B JUMPI PUSH2 0x4D6B PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4D85 JUMPI PUSH2 0x4D85 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x4DA0 JUMPI PUSH2 0x4DA0 PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4DC0 JUMPI PUSH2 0x4DC0 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4DD9 JUMPI PUSH2 0x4DD9 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4DE5 DUP8 DUP3 DUP9 ADD PUSH2 0x4D56 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4E06 JUMPI PUSH2 0x4E06 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E12 DUP8 DUP3 DUP9 ADD PUSH2 0x4D56 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4E37 JUMPI PUSH2 0x4E37 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4E43 DUP8 DUP8 PUSH2 0x4CA7 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x4E54 DUP8 DUP3 DUP9 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x4E65 DUP8 DUP3 DUP9 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0x4E76 DUP8 DUP3 DUP9 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4E9D JUMPI PUSH2 0x4E9D PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4EA9 DUP9 DUP9 PUSH2 0x4CA7 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x4EBA DUP9 DUP3 DUP10 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x4ECB DUP9 DUP3 DUP10 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0x4EDC DUP9 DUP3 DUP10 ADD PUSH2 0x4D2A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0x4EED DUP9 DUP3 DUP10 ADD PUSH2 0x4D2A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x4C9C JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2734 DUP2 PUSH2 0x4EFA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4F28 JUMPI PUSH2 0x4F28 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4F41 JUMPI PUSH2 0x4F41 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F4D DUP9 DUP3 DUP10 ADD PUSH2 0x4D56 JUMP JUMPDEST SWAP6 POP SWAP6 POP POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4F6E JUMPI PUSH2 0x4F6E PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F7A DUP9 DUP3 DUP10 ADD PUSH2 0x4D56 JUMP JUMPDEST SWAP4 POP SWAP4 POP POP PUSH1 0x40 PUSH2 0x4EED DUP9 DUP3 DUP10 ADD PUSH2 0x4F02 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4FA2 JUMPI PUSH2 0x4FA2 PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4FBC JUMPI PUSH2 0x4FBC PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x60 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x4DA0 JUMPI PUSH2 0x4DA0 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4FEF JUMPI PUSH2 0x4FEF PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4FFB DUP7 DUP7 PUSH2 0x4CA7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x501A JUMPI PUSH2 0x501A PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5026 DUP7 DUP3 DUP8 ADD PUSH2 0x4F8D JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2734 DUP3 PUSH2 0x4C82 JUMP JUMPDEST PUSH2 0x4C9C DUP2 PUSH2 0x5032 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2734 DUP2 PUSH2 0x503D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5066 JUMPI PUSH2 0x5066 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x441B DUP5 DUP5 PUSH2 0x5046 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x508B JUMPI PUSH2 0x508B PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5097 DUP8 DUP8 PUSH2 0x4CA7 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x50A8 DUP8 DUP3 DUP9 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x50B9 DUP8 DUP3 DUP9 ADD PUSH2 0x4D2A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0x4E76 DUP8 DUP3 DUP9 ADD PUSH2 0x4D2A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x50E6 JUMPI PUSH2 0x50E6 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x50F2 DUP10 DUP10 PUSH2 0x4CA7 JUMP JUMPDEST SWAP7 POP POP PUSH1 0x20 PUSH2 0x5103 DUP10 DUP3 DUP11 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x40 PUSH2 0x5114 DUP10 DUP3 DUP11 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x60 PUSH2 0x5125 DUP10 DUP3 DUP11 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x80 PUSH2 0x5136 DUP10 DUP3 DUP11 ADD PUSH2 0x4D2A JUMP JUMPDEST SWAP3 POP POP PUSH1 0xA0 PUSH2 0x5147 DUP10 DUP3 DUP11 ADD PUSH2 0x4D2A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x5162 DUP3 DUP7 PUSH2 0x4CD3 JUMP JUMPDEST PUSH2 0x516F PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x4CD3 JUMP JUMPDEST PUSH2 0x441B PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x4CD3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2734 DUP3 PUSH2 0x5032 JUMP JUMPDEST PUSH2 0x4C6E DUP2 PUSH2 0x517C JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2734 DUP3 DUP5 PUSH2 0x5187 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x51B6 JUMPI PUSH2 0x51B6 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x51C2 DUP7 DUP7 PUSH2 0x4CA7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x51D3 DUP7 DUP3 DUP8 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x51E4 DUP7 DUP3 DUP8 ADD PUSH2 0x4D2A JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5206 JUMPI PUSH2 0x5206 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5212 DUP7 DUP7 PUSH2 0x5046 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x51D3 DUP7 DUP3 DUP8 ADD PUSH2 0x4D2A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x522F DUP4 DUP4 PUSH2 0x5187 JUMP JUMPDEST POP POP PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5241 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 DUP4 ADD DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5275 JUMPI DUP2 MLOAD PUSH2 0x5264 DUP9 DUP3 PUSH2 0x5223 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x5250 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x43FC DUP2 DUP5 PUSH2 0x5237 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x52AA JUMPI PUSH2 0x52AA PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x52B6 DUP8 DUP8 PUSH2 0x4CA7 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x52C7 DUP8 DUP3 DUP9 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x50B9 DUP8 DUP3 DUP9 ADD PUSH2 0x4CA7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x52F3 JUMPI PUSH2 0x52F3 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x52FF DUP9 DUP9 PUSH2 0x4CA7 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x5310 DUP9 DUP3 DUP10 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x5321 DUP9 DUP3 DUP10 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0x4EDC DUP9 DUP3 DUP10 ADD PUSH2 0x4CA7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5348 JUMPI PUSH2 0x5348 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5354 DUP6 DUP6 PUSH2 0x4CA7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x4D1A DUP6 DUP3 DUP7 ADD PUSH2 0x4F02 JUMP JUMPDEST PUSH2 0x4C6E DUP2 PUSH2 0x4C82 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2734 DUP3 DUP5 PUSH2 0x5365 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x5162 DUP3 DUP7 PUSH2 0x4C6A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x53A0 JUMPI PUSH2 0x53A0 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x53AC DUP6 DUP6 PUSH2 0x4CA7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x4D1A DUP6 DUP3 DUP7 ADD PUSH2 0x5046 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x53C7 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 DUP4 ADD DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5275 JUMPI DUP2 MLOAD PUSH2 0x53EA DUP9 DUP3 PUSH2 0x5223 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x53D6 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x43FC DUP2 DUP5 PUSH2 0x53BD JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x541D DUP5 DUP3 PUSH2 0x5365 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x5430 PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x4CD3 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x16FC PUSH1 0x40 DUP6 ADD DUP3 PUSH2 0x4CD3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x544F DUP4 DUP4 PUSH2 0x540C JUMP JUMPDEST POP POP PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5461 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 DUP4 ADD DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5275 JUMPI DUP2 MLOAD PUSH2 0x5484 DUP9 DUP3 PUSH2 0x5443 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x5470 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x43FC DUP2 DUP5 PUSH2 0x5457 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x54E1 JUMPI PUSH2 0x54E1 PUSH2 0x54A6 JUMP JUMPDEST PUSH1 0x40 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x54F3 PUSH1 0x40 MLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x54FF DUP3 DUP3 PUSH2 0x54BC JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x551D JUMPI PUSH2 0x551D PUSH2 0x54A6 JUMP JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x553A PUSH2 0x5535 DUP5 PUSH2 0x5504 JUMP JUMPDEST PUSH2 0x54E8 JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP1 POP PUSH1 0x20 DUP1 DUP3 ADD SWAP1 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x5559 JUMPI PUSH2 0x5559 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x557D JUMPI DUP1 PUSH2 0x556E DUP9 DUP3 PUSH2 0x4CA7 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x555B JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x559B JUMPI PUSH2 0x559B PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x441B DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x5527 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x55C0 JUMPI PUSH2 0x55C0 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x55D9 JUMPI PUSH2 0x55D9 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x441B DUP5 DUP3 DUP6 ADD PUSH2 0x5587 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x522F DUP4 DUP4 PUSH2 0x4CD3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x55FB DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 DUP4 ADD DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5275 JUMPI DUP2 MLOAD PUSH2 0x561E DUP9 DUP3 PUSH2 0x55E5 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x560A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x43FC DUP2 DUP5 PUSH2 0x55F1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x564E DUP3 DUP6 PUSH2 0x4CD3 JUMP JUMPDEST PUSH2 0x43FC PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x4CD3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5671 JUMPI PUSH2 0x5671 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4D09 DUP6 DUP6 PUSH2 0x4D2A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5693 JUMPI PUSH2 0x5693 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x569F DUP6 DUP6 PUSH2 0x4CA7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x4D1A DUP6 DUP3 DUP7 ADD PUSH2 0x4D2A JUMP JUMPDEST PUSH1 0x9 DUP2 LT PUSH2 0xC89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2734 DUP2 PUSH2 0x56B0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x56DE JUMPI PUSH2 0x56DE PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x56EA DUP6 DUP6 PUSH2 0x4CA7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x4D1A DUP6 DUP3 DUP7 ADD PUSH2 0x56BD JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x5716 JUMPI PUSH2 0x5716 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5722 DUP9 DUP9 PUSH2 0x4CA7 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x5733 DUP9 DUP3 DUP10 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x5744 DUP9 DUP3 DUP10 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0x5755 DUP9 DUP3 DUP10 ADD PUSH2 0x4D2A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0x4EED DUP9 DUP3 DUP10 ADD PUSH2 0x4F02 JUMP JUMPDEST PUSH1 0x2E DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x436C6F736520666163746F722067726561746572207468616E206D6178696D75 DUP2 MSTORE PUSH14 0x369031B637B9B2903330B1BA37B9 PUSH1 0x91 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5766 JUMP JUMPDEST PUSH1 0x2E DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x436C6F736520666163746F7220736D616C6C6572207468616E206D696E696D75 DUP2 MSTORE PUSH14 0x369031B637B9B2903330B1BA37B9 PUSH1 0x91 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x57AD JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x57C4 JUMP JUMPDEST PUSH1 0xD DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH13 0x1A5B9D985B1A59081A5B9C1D5D PUSH1 0x9A SHL DUP2 MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x581F JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x2734 DUP2 PUSH2 0x503D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x588C JUMPI PUSH2 0x588C PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x441B DUP5 DUP5 PUSH2 0x586C JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x58A6 DUP3 DUP6 PUSH2 0x5365 JUMP JUMPDEST PUSH2 0x43FC PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5365 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 MUL DUP1 DUP3 ISZERO DUP4 DUP3 DIV DUP6 EQ OR PUSH2 0x58E1 JUMPI PUSH2 0x58E1 PUSH2 0x58B3 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x58FD JUMPI PUSH2 0x58FD PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x441B DUP5 DUP5 PUSH2 0x56BD JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x592E JUMPI PUSH2 0x592E PUSH2 0x5909 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD PUSH2 0x5941 DUP3 DUP9 PUSH2 0x5365 JUMP JUMPDEST PUSH2 0x594E PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x5365 JUMP JUMPDEST PUSH2 0x595B PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x4CD3 JUMP JUMPDEST PUSH2 0x5968 PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x5187 JUMP JUMPDEST PUSH2 0x5975 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x4C6A JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x28 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4E6F6E7A65726F20626F72726F772062616C616E6365206166746572206C6971 DUP2 MSTORE PUSH8 0x3AB4B230BA34B7B7 PUSH1 0xC1 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x57AD JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x597F JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x59E2 DUP3 DUP6 PUSH2 0x5187 JUMP JUMPDEST PUSH2 0x43FC PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5187 JUMP JUMPDEST PUSH1 0xE DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH14 0x616C726561647920657869737473 PUSH1 0x90 SHL DUP2 MSTORE SWAP2 POP PUSH2 0x583F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x59EF JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x2734 JUMPI PUSH2 0x2734 PUSH2 0x58B3 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2734 DUP2 PUSH2 0x4D24 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5A57 JUMPI PUSH2 0x5A57 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x441B DUP5 DUP5 PUSH2 0x5A37 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x5162 DUP3 DUP7 PUSH2 0x5187 JUMP JUMPDEST PUSH1 0x29 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4F776E61626C6532537465703A2063616C6C6572206973206E6F742074686520 DUP2 MSTORE PUSH9 0x3732BB9037BBB732B9 PUSH1 0xB9 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x57AD JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5A71 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x5AD5 DUP3 DUP7 PUSH2 0x5365 JUMP JUMPDEST PUSH2 0x516F PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x5365 JUMP JUMPDEST PUSH1 0x31 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x6C69717569646174696F6E20696E63656E746976652073686F756C6420626520 DUP2 MSTORE PUSH17 0xCEE4CAC2E8CAE440E8D0C2DC4062CA627 PUSH1 0x7B SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x57AD JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5AE2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 SUB PUSH2 0x5B53 JUMPI PUSH2 0x5B53 PUSH2 0x58B3 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x564E DUP3 DUP6 PUSH2 0x5365 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2734 DUP2 PUSH2 0x4EFA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5B88 JUMPI PUSH2 0x5B88 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x441B DUP5 DUP5 PUSH2 0x5B68 JUMP JUMPDEST PUSH1 0x1B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x436F6D7074726F6C6C65723A20496E76616C69642076546F6B656E0000000000 DUP2 MSTORE SWAP2 POP PUSH2 0x583F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5B94 JUMP JUMPDEST PUSH1 0x19 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x696E76616C6964206E756D626572206F66206D61726B65747300000000000000 DUP2 MSTORE SWAP2 POP PUSH2 0x583F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5BD8 JUMP JUMPDEST PUSH1 0x2E DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 DUP2 MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x57AD JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5C1C JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND PUSH2 0x2734 JUMP JUMPDEST PUSH2 0x4C6E DUP2 PUSH2 0x5C77 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2734 DUP3 DUP5 PUSH2 0x5C82 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x16FC DUP5 DUP3 PUSH2 0x4CD3 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x5CB8 DUP3 DUP6 PUSH2 0x5365 JUMP JUMPDEST PUSH2 0x43FC PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5C99 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x5CD3 DUP3 DUP7 PUSH2 0x5365 JUMP JUMPDEST PUSH2 0x5CE0 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x5365 JUMP JUMPDEST PUSH2 0x441B PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x5C99 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x2734 JUMPI PUSH2 0x2734 PUSH2 0x58B3 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5D5D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5D45 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5D70 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x5D87 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x5D42 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x5DA6 DUP3 DUP6 PUSH2 0x5365 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x441B DUP2 DUP5 PUSH2 0x5D66 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x5DC6 DUP3 DUP7 PUSH2 0x5365 JUMP JUMPDEST PUSH2 0x5DD3 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x5365 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x48AD DUP2 DUP5 PUSH2 0x5D66 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 SWAP2 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 PUSH2 0x583F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5DE5 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x696E76616C696420616365737320636F6E74726F6C206D616E61676572206164 DUP2 MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x57AD JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5E27 JUMP JUMPDEST PUSH1 0x9 DUP2 LT PUSH2 0xC89 JUMPI PUSH2 0xC89 PUSH2 0x5CED JUMP JUMPDEST DUP1 PUSH2 0x54FF DUP2 PUSH2 0x5E79 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2734 DUP3 PUSH2 0x5E89 JUMP JUMPDEST PUSH2 0x4C6E DUP2 PUSH2 0x5E93 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x5EB5 DUP3 DUP6 PUSH2 0x5365 JUMP JUMPDEST PUSH2 0x43FC PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5E9E JUMP JUMPDEST PUSH1 0x28 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x63616E6E6F742070617573652061206D61726B65742074686174206973206E6F DUP2 MSTORE PUSH8 0x1D081B1A5CDD1959 PUSH1 0xC2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x57AD JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5EC2 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x5F25 DUP3 DUP7 PUSH2 0x5187 JUMP JUMPDEST PUSH2 0x5F32 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x5E9E JUMP JUMPDEST PUSH2 0x441B PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x4C6A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5F58 JUMPI PUSH2 0x5F58 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5F64 DUP8 DUP8 PUSH2 0x5A37 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x5F75 DUP8 DUP3 DUP9 ADD PUSH2 0x5A37 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x5F86 DUP8 DUP3 DUP9 ADD PUSH2 0x5A37 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0x4E76 DUP8 DUP3 DUP9 ADD PUSH2 0x5A37 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x436F6D7074726F6C6C65723A20496E76616C6964206D61784C6F6F70734C696D DUP2 MSTORE PUSH2 0x1A5D PUSH1 0xF2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x57AD JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5F97 JUMP JUMPDEST PUSH1 0x2B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 DUP2 MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x57AD JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5FE6 JUMP INVALID PUSH20 0x65744D61726B6574426F72726F77436170732861 PUSH5 0x6472657373 JUMPDEST TSTORE 0x2C PUSH22 0x696E743235365B5D297365744D696E4C697175696461 PUSH21 0x61626C65436F6C6C61746572616C2875696E743235 CALLDATASIZE 0x29 PUSH20 0x6574436F6C6C61746572616C466163746F722861 PUSH5 0x6472657373 0x2C PUSH22 0x696E743235362C75696E743235362973657441637469 PUSH16 0x6E735061757365642861646472657373 JUMPDEST TSTORE 0x2C PUSH22 0x696E743235365B5D2C626F6F6C29736574466F726365 PUSH5 0x4C69717569 PUSH5 0x6174696F6E 0x28 PUSH2 0x6464 PUSH19 0x6573732C626F6F6C297365744D61726B657453 PUSH22 0x70706C794361707328616464726573735B5D2C75696E PUSH21 0x3235365B5D29A2646970667358221220ACEAEDBCC8 SAR JUMPDEST CALLDATALOAD 0x4D NOT 0xE0 0xC9 0xC 0xC2 TLOAD DUP4 SLT PUSH23 0xE80151C01A996B576B521C03598464736F6C6343000819 STOP CALLER ","sourceMap":"3223:76619:28:-:0;;;10130:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10175:35;10196:13;10175:20;:35::i;:::-;-1:-1:-1;;;;;10221:28:28;;;;10259:22;:20;:22::i;:::-;10130:158;3223:76619;;385:136:41;-1:-1:-1;;;;;448:22:41;;444:75;;489:23;;-1:-1:-1;;;489:23:41;;;;;;;;;;;444:75;385:136;:::o;5939:280:3:-;6007:13;;;;;;;6006:14;5998:66;;;;-1:-1:-1;;;5998:66:3;;;;;;;:::i;:::-;;;;;;;;;6078:12;;6094:15;6078:12;;;:31;6074:139;;6125:12;:30;;-1:-1:-1;;6125:30:3;6140:15;6125:30;;;;;;6174:28;;;;;;;:::i;:::-;;;;;;;;6074:139;5939:280::o;466:96:69:-;503:7;-1:-1:-1;;;;;400:54:69;;532:24;521:35;466:96;-1:-1:-1;;466:96:69:o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;696:143;778:13;;800:33;778:13;800:33;:::i;845:351::-;915:6;964:2;952:9;943:7;939:23;935:32;932:119;;;970:79;197:1;194;187:12;970:79;1090:1;1115:64;1171:7;1151:9;1115:64;:::i;:::-;1105:74;845:351;-1:-1:-1;;;;845:351:69:o;1981:419::-;2185:2;2198:47;;;2170:18;;2262:131;2170:18;1836:2;1308:19;;1517:34;1360:4;1351:14;;1494:58;-1:-1:-1;;;1569:15:69;;;1562:34;1957:12;;;1609:366;2616:214;2481:4;2470:16;;2569:35;;2743:2;2728:18;;2756:67;2498:112;2616:214;3223:76619:28;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@__AccessControlled_init_unchained_4943":{"entryPoint":19293,"id":4943,"parameterSlots":1,"returnSlots":0},"@__Ownable2Step_init_26":{"entryPoint":19246,"id":26,"parameterSlots":0,"returnSlots":0},"@__Ownable_init_unchained_145":{"entryPoint":19514,"id":145,"parameterSlots":0,"returnSlots":0},"@_addMarket_8625":{"entryPoint":19056,"id":8625,"parameterSlots":1,"returnSlots":0},"@_addToMarket_8572":{"entryPoint":18614,"id":8572,"parameterSlots":2,"returnSlots":0},"@_checkAccessAllowed_5034":{"entryPoint":16667,"id":5034,"parameterSlots":1,"returnSlots":0},"@_checkActionPauseState_9129":{"entryPoint":17031,"id":9129,"parameterSlots":2,"returnSlots":0},"@_checkOwner_176":{"entryPoint":16825,"id":176,"parameterSlots":0,"returnSlots":0},"@_checkRedeemAllowed_8725":{"entryPoint":18159,"id":8725,"parameterSlots":3,"returnSlots":0},"@_checkSenderIs_9108":{"entryPoint":19011,"id":9108,"parameterSlots":1,"returnSlots":0},"@_ensureMaxLoops_10334":{"entryPoint":16988,"id":10334,"parameterSlots":1,"returnSlots":0},"@_getCollateralFactor_9020":{"entryPoint":17610,"id":9020,"parameterSlots":1,"returnSlots":1},"@_getCurrentLiquiditySnapshot_8758":{"entryPoint":17332,"id":8758,"parameterSlots":2,"returnSlots":1},"@_getHypotheticalLiquiditySnapshot_8965":{"entryPoint":17662,"id":8965,"parameterSlots":5,"returnSlots":1},"@_getLiquidationThreshold_9041":{"entryPoint":17280,"id":9041,"parameterSlots":1,"returnSlots":1},"@_msgSender_2798":{"entryPoint":null,"id":2798,"parameterSlots":0,"returnSlots":1},"@_safeGetAccountSnapshot_9089":{"entryPoint":17443,"id":9089,"parameterSlots":2,"returnSlots":3},"@_safeGetUnderlyingPrice_8999":{"entryPoint":18857,"id":8999,"parameterSlots":1,"returnSlots":1},"@_setAccessControlManager_5004":{"entryPoint":16867,"id":5004,"parameterSlots":1,"returnSlots":0},"@_setActionPaused_8661":{"entryPoint":17075,"id":8661,"parameterSlots":3,"returnSlots":0},"@_setMaxLoopsLimit_10317":{"entryPoint":18349,"id":10317,"parameterSlots":1,"returnSlots":0},"@_transferOwnership_233":{"entryPoint":19396,"id":233,"parameterSlots":1,"returnSlots":0},"@_transferOwnership_78":{"entryPoint":18324,"id":78,"parameterSlots":1,"returnSlots":0},"@acceptOwnership_100":{"entryPoint":8609,"id":100,"parameterSlots":0,"returnSlots":0},"@accessControlManager_4966":{"entryPoint":null,"id":4966,"parameterSlots":0,"returnSlots":1},"@accountAssets_9501":{"entryPoint":13536,"id":9501,"parameterSlots":0,"returnSlots":0},"@actionPaused_8423":{"entryPoint":14814,"id":8423,"parameterSlots":2,"returnSlots":1},"@addRewardsDistributor_7915":{"entryPoint":6440,"id":7915,"parameterSlots":1,"returnSlots":0},"@add__9859":{"entryPoint":19502,"id":9859,"parameterSlots":2,"returnSlots":1},"@allMarkets_9512":{"entryPoint":6298,"id":9512,"parameterSlots":0,"returnSlots":0},"@approvedDelegates_9569":{"entryPoint":null,"id":9569,"parameterSlots":0,"returnSlots":0},"@borrowCaps_9517":{"entryPoint":null,"id":9517,"parameterSlots":0,"returnSlots":0},"@borrowVerify_6480":{"entryPoint":7121,"id":6480,"parameterSlots":3,"returnSlots":0},"@checkMembership_8171":{"entryPoint":9990,"id":8171,"parameterSlots":2,"returnSlots":1},"@closeFactorMantissa_9491":{"entryPoint":null,"id":9491,"parameterSlots":0,"returnSlots":0},"@div__10082":{"entryPoint":18514,"id":10082,"parameterSlots":2,"returnSlots":1},"@div__10201":{"entryPoint":19490,"id":10201,"parameterSlots":2,"returnSlots":1},"@ensureNonzeroAddress_16143":{"entryPoint":18120,"id":16143,"parameterSlots":1,"returnSlots":0},"@enterMarkets_5496":{"entryPoint":11883,"id":5496,"parameterSlots":1,"returnSlots":1},"@exitMarket_5864":{"entryPoint":15936,"id":5864,"parameterSlots":1,"returnSlots":1},"@getAccountLiquidity_8052":{"entryPoint":7768,"id":8052,"parameterSlots":1,"returnSlots":3},"@getAllMarkets_8131":{"entryPoint":10580,"id":8131,"parameterSlots":0,"returnSlots":1},"@getAssetsIn_8504":{"entryPoint":10202,"id":8504,"parameterSlots":1,"returnSlots":1},"@getBorrowingPower_8080":{"entryPoint":6255,"id":8080,"parameterSlots":1,"returnSlots":3},"@getHypotheticalAccountLiquidity_8119":{"entryPoint":6116,"id":8119,"parameterSlots":4,"returnSlots":3},"@getRewardDistributors_8347":{"entryPoint":7786,"id":8347,"parameterSlots":0,"returnSlots":1},"@getRewardsByMarket_8336":{"entryPoint":10676,"id":8336,"parameterSlots":1,"returnSlots":1},"@healAccount_7097":{"entryPoint":9151,"id":7097,"parameterSlots":1,"returnSlots":0},"@initialize_5434":{"entryPoint":13323,"id":5434,"parameterSlots":2,"returnSlots":0},"@isComptroller_8357":{"entryPoint":null,"id":8357,"parameterSlots":0,"returnSlots":1},"@isContract_2458":{"entryPoint":null,"id":2458,"parameterSlots":1,"returnSlots":1},"@isForcedLiquidationEnabled_9546":{"entryPoint":null,"id":9546,"parameterSlots":0,"returnSlots":0},"@isMarketListed_8149":{"entryPoint":null,"id":8149,"parameterSlots":1,"returnSlots":1},"@lessThanExp_9749":{"entryPoint":null,"id":9749,"parameterSlots":2,"returnSlots":1},"@liquidateAccount_7290":{"entryPoint":5026,"id":7290,"parameterSlots":3,"returnSlots":0},"@liquidateBorrowVerify_6181":{"entryPoint":5890,"id":6181,"parameterSlots":6,"returnSlots":0},"@liquidateCalculateSeizeTokens_8266":{"entryPoint":12179,"id":8266,"parameterSlots":3,"returnSlots":2},"@liquidationIncentiveMantissa_9494":{"entryPoint":null,"id":9494,"parameterSlots":0,"returnSlots":0},"@markets_9507":{"entryPoint":null,"id":9507,"parameterSlots":0,"returnSlots":0},"@maxLoopsLimit_10271":{"entryPoint":null,"id":10271,"parameterSlots":0,"returnSlots":0},"@minLiquidatableCollateral_9520":{"entryPoint":null,"id":9520,"parameterSlots":0,"returnSlots":0},"@mintVerify_6015":{"entryPoint":5771,"id":6015,"parameterSlots":4,"returnSlots":0},"@mul_ScalarTruncateAddUInt_9730":{"entryPoint":18572,"id":9730,"parameterSlots":3,"returnSlots":1},"@mul_ScalarTruncate_9701":{"entryPoint":17411,"id":9701,"parameterSlots":2,"returnSlots":1},"@mul__10057":{"entryPoint":19478,"id":10057,"parameterSlots":2,"returnSlots":1},"@mul__9941":{"entryPoint":18442,"id":9941,"parameterSlots":2,"returnSlots":1},"@mul__9961":{"entryPoint":19332,"id":9961,"parameterSlots":2,"returnSlots":1},"@oracle_9488":{"entryPoint":null,"id":9488,"parameterSlots":0,"returnSlots":0},"@owner_162":{"entryPoint":null,"id":162,"parameterSlots":0,"returnSlots":1},"@pendingOwner_41":{"entryPoint":null,"id":41,"parameterSlots":0,"returnSlots":1},"@poolRegistry_5121":{"entryPoint":null,"id":5121,"parameterSlots":0,"returnSlots":0},"@preBorrowHook_6451":{"entryPoint":13788,"id":6451,"parameterSlots":3,"returnSlots":0},"@preLiquidateHook_6690":{"entryPoint":14901,"id":6690,"parameterSlots":5,"returnSlots":0},"@preMintHook_5984":{"entryPoint":11253,"id":5984,"parameterSlots":3,"returnSlots":0},"@preRedeemHook_6075":{"entryPoint":8876,"id":6075,"parameterSlots":3,"returnSlots":0},"@preRepayHook_6565":{"entryPoint":15394,"id":6565,"parameterSlots":2,"returnSlots":0},"@preSeizeHook_6835":{"entryPoint":3758,"id":6835,"parameterSlots":4,"returnSlots":0},"@preTransferHook_6904":{"entryPoint":8051,"id":6904,"parameterSlots":4,"returnSlots":0},"@prime_9562":{"entryPoint":null,"id":9562,"parameterSlots":0,"returnSlots":0},"@redeemVerify_6106":{"entryPoint":null,"id":6106,"parameterSlots":4,"returnSlots":0},"@renounceOwnership_190":{"entryPoint":8589,"id":190,"parameterSlots":0,"returnSlots":0},"@repayBorrowVerify_6139":{"entryPoint":4712,"id":6139,"parameterSlots":5,"returnSlots":0},"@seizeVerify_6221":{"entryPoint":8422,"id":6221,"parameterSlots":5,"returnSlots":0},"@setAccessControlManager_4956":{"entryPoint":3192,"id":4956,"parameterSlots":1,"returnSlots":0},"@setActionsPaused_7804":{"entryPoint":4837,"id":7804,"parameterSlots":5,"returnSlots":0},"@setCloseFactor_7328":{"entryPoint":3212,"id":7328,"parameterSlots":1,"returnSlots":0},"@setCollateralFactor_7456":{"entryPoint":7239,"id":7456,"parameterSlots":3,"returnSlots":0},"@setForcedLiquidation_8024":{"entryPoint":8679,"id":8024,"parameterSlots":2,"returnSlots":0},"@setLiquidationIncentive_7487":{"entryPoint":10042,"id":7487,"parameterSlots":1,"returnSlots":0},"@setMarketBorrowCaps_7661":{"entryPoint":3423,"id":7661,"parameterSlots":4,"returnSlots":0},"@setMarketSupplyCaps_7734":{"entryPoint":12976,"id":7734,"parameterSlots":4,"returnSlots":0},"@setMaxLoopsLimit_7959":{"entryPoint":8662,"id":7959,"parameterSlots":1,"returnSlots":0},"@setMinLiquidatableCollateral_7828":{"entryPoint":6165,"id":7828,"parameterSlots":1,"returnSlots":0},"@setPriceOracle_7946":{"entryPoint":6340,"id":7946,"parameterSlots":1,"returnSlots":0},"@setPrimeToken_7985":{"entryPoint":12057,"id":7985,"parameterSlots":1,"returnSlots":0},"@supplyCaps_9525":{"entryPoint":null,"id":9525,"parameterSlots":0,"returnSlots":0},"@supportMarket_7587":{"entryPoint":12478,"id":7587,"parameterSlots":1,"returnSlots":0},"@transferOwnership_61":{"entryPoint":16554,"id":61,"parameterSlots":1,"returnSlots":0},"@transferVerify_6259":{"entryPoint":7884,"id":6259,"parameterSlots":4,"returnSlots":0},"@truncate_9677":{"entryPoint":19372,"id":9677,"parameterSlots":1,"returnSlots":1},"@unlistMarket_5665":{"entryPoint":2493,"id":5665,"parameterSlots":1,"returnSlots":1},"@updateDelegate_5707":{"entryPoint":13592,"id":5707,"parameterSlots":2,"returnSlots":0},"@updatePrices_8405":{"entryPoint":6951,"id":8405,"parameterSlots":1,"returnSlots":0},"abi_decode_available_length_t_array$_t_address_$dyn_memory_ptr":{"entryPoint":21799,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_t_address":{"entryPoint":19623,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_array$_t_address_$dyn_memory_ptr":{"entryPoint":21895,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr":{"entryPoint":19798,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_t_array$_t_enum$_Action_$9148_$dyn_calldata_ptr":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_t_array$_t_struct$_LiquidationOrder_$9453_calldata_ptr_$dyn_calldata_ptr":{"entryPoint":20365,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_t_array$_t_uint256_$dyn_calldata_ptr":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_t_bool":{"entryPoint":20226,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_bool_fromMemory":{"entryPoint":23400,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_ComptrollerInterface_$9353_fromMemory":{"entryPoint":22636,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_IERC20Upgradeable_$1352_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_IPrime_$16613":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_ResilientOracleInterface_$16173":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_RewardsDistributor_$12324":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_VToken_$15506":{"entryPoint":20550,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_enum$_Action_$9148":{"entryPoint":22205,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_uint256":{"entryPoint":19754,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_uint256_fromMemory":{"entryPoint":23095,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":19634,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":19687,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_addresst_address":{"entryPoint":19998,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_addresst_addresst_addresst_uint256":{"entryPoint":21208,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_addresst_addresst_addresst_addresst_uint256t_uint256":{"entryPoint":20682,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_addresst_addresst_addresst_uint256":{"entryPoint":21137,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool":{"entryPoint":22267,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256":{"entryPoint":20098,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":20894,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256":{"entryPoint":20594,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_array$_t_struct$_LiquidationOrder_$9453_calldata_ptr_$dyn_calldata_ptr":{"entryPoint":20439,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_bool":{"entryPoint":21298,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_contract$_VToken_$15506":{"entryPoint":21386,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_enum$_Action_$9148":{"entryPoint":22216,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":22141,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr":{"entryPoint":21931,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptrt_array$_t_enum$_Action_$9148_$dyn_calldata_ptrt_bool":{"entryPoint":20237,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptr":{"entryPoint":19879,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":23411,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_ComptrollerInterface_$9353_fromMemory":{"entryPoint":22647,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IERC20Upgradeable_$1352_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPrime_$16613":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_ResilientOracleInterface_$16173":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_RewardsDistributor_$12324":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_VToken_$15506":{"entryPoint":20561,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_VToken_$15506t_uint256t_uint256":{"entryPoint":20974,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_enum$_Action_$9148":{"entryPoint":22760,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":19765,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":23106,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_address":{"entryPoint":22107,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":24383,"id":null,"parameterSlots":2,"returnSlots":4},"abi_encodeUpdatedPos_t_contract$_RewardsDistributor_$12324_to_t_address":{"entryPoint":21027,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encodeUpdatedPos_t_contract$_VToken_$15506_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encodeUpdatedPos_t_struct$_RewardSpeeds_$9473_memory_ptr_to_t_struct$_RewardSpeeds_$9473_memory_ptr":{"entryPoint":21571,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encodeUpdatedPos_t_uint256_to_t_uint256":{"entryPoint":21989,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_address_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_address_to_t_address_fromStack":{"entryPoint":21349,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack":{"entryPoint":21047,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack":{"entryPoint":21437,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr_fromStack":{"entryPoint":21591,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_array$_t_uint256_$dyn_memory_ptr_to_t_array$_t_uint256_$dyn_memory_ptr_fromStack":{"entryPoint":22001,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_bool_to_t_bool_fromStack":{"entryPoint":19562,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_IPrime_$16613_to_t_address_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_ResilientOracleInterface_$16173_to_t_address_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_RewardsDistributor_$12324_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_VToken_$15506_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack":{"entryPoint":20871,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_enum$_Action_$9148_to_t_uint8_fromStack":{"entryPoint":24222,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_rational_1_by_1_to_t_uint8_fromStack":{"entryPoint":23682,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack":{"entryPoint":23910,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_stringliteral_0ad46837fefc66a37a27d365ae7d6446a39b33a37d743c62daa13796b21a9a61_to_t_string_memory_ptr_fromStack":{"entryPoint":24258,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack":{"entryPoint":23153,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack":{"entryPoint":24471,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_25d05e40227b6f7351f342eb9dac81eb87f63180a86e368f7d41da458d00d16f_to_t_string_memory_ptr_fromStack":{"entryPoint":22911,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_3388b29c8ac24f5c232934811c4242553f413844f77f503b8785ba71cd2c4b6f_to_t_string_memory_ptr_fromStack":{"entryPoint":22374,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack":{"entryPoint":24103,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_61ffe8d71e53165b47fbc4657a5b6dca84fa425e33e0a21288981e17a8238fcd_to_t_string_memory_ptr_fromStack":{"entryPoint":23023,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack":{"entryPoint":23580,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_7cbca09684e568d28239275bedb5f9d8ede90fb19ba1a42a2dd98c07e53733e5_to_t_string_memory_ptr_fromStack":{"entryPoint":23444,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack":{"entryPoint":24037,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_c058637d38cae682b1632861e7627b9b2faf58bda046e427ad8f294be17a6198_to_t_string_memory_ptr_fromStack":{"entryPoint":23266,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack":{"entryPoint":24550,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_dbab81719f15ade78f76dcdbf7cff531fc5f9822fe7e8466ffdd2feb23510f3b_to_t_string_memory_ptr_fromStack":{"entryPoint":22559,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_e08258dad66b639434436d0a533127e51effbdd16e4a07ef3fab948963e89ae8_to_t_string_memory_ptr_fromStack":{"entryPoint":22468,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_f260407ad5875ca6920015bd8c4244b00453e8856f69e363e0217c410a4ba389_to_t_string_memory_ptr_fromStack":{"entryPoint":23512,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_struct$_Exp_$9645_memory_ptr_to_t_struct$_Exp_$9645_memory_ptr_fromStack":{"entryPoint":23705,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_struct$_RewardSpeeds_$9473_memory_ptr_to_t_struct$_RewardSpeeds_$9473_memory_ptr":{"entryPoint":21516,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_uint256_to_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_uint256_to_t_uint256_fromStack":{"entryPoint":19667,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":21358,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":22680,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_string_memory_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed":{"entryPoint":23992,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_struct$_Exp_$9645_memory_ptr__to_t_address_t_address_t_struct$_Exp_$9645_memory_ptr__fromStack_reversed":{"entryPoint":23749,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":23239,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_contract$_VToken_$15506_t_bool__to_t_address_t_address_t_uint256_t_address_t_bool__fromStack_reversed":{"entryPoint":22835,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_address_t_enum$_Action_$9148__to_t_address_t_uint8__fromStack_reversed":{"entryPoint":24231,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_string_memory_ptr__to_t_address_t_string_memory_ptr__fromStack_reversed":{"entryPoint":23960,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_struct$_Exp_$9645_memory_ptr__to_t_address_t_struct$_Exp_$9645_memory_ptr__fromStack_reversed":{"entryPoint":23722,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":23386,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":21120,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":21499,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":21653,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":22063,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":19572,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool_t_uint256_t_uint256__to_t_bool_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":21372,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_contract$_IAccessControlManagerV8_$5080__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPrime_$16613__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPrime_$16613_t_contract$_IPrime_$16613__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_contract$_ResilientOracleInterface_$16173__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_ResilientOracleInterface_$16173_t_contract$_ResilientOracleInterface_$16173__to_t_address_t_address__fromStack_reversed":{"entryPoint":22996,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_contract$_VToken_$15506__to_t_address__fromStack_reversed":{"entryPoint":20880,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_VToken_$15506_t_enum$_Action_$9148_t_bool__to_t_address_t_uint8_t_bool__fromStack_reversed":{"entryPoint":24343,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_contract$_VToken_$15506_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":23139,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed":{"entryPoint":23691,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0ad46837fefc66a37a27d365ae7d6446a39b33a37d743c62daa13796b21a9a61__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":24327,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":23223,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":24534,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_25d05e40227b6f7351f342eb9dac81eb87f63180a86e368f7d41da458d00d16f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":22980,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3388b29c8ac24f5c232934811c4242553f413844f77f503b8785ba71cd2c4b6f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":22452,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":24169,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_61ffe8d71e53165b47fbc4657a5b6dca84fa425e33e0a21288981e17a8238fcd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":23060,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":23655,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7cbca09684e568d28239275bedb5f9d8ede90fb19ba1a42a2dd98c07e53733e5__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":23496,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":24087,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c058637d38cae682b1632861e7627b9b2faf58bda046e427ad8f294be17a6198__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":23344,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":24622,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_dbab81719f15ade78f76dcdbf7cff531fc5f9822fe7e8466ffdd2feb23510f3b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":22598,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e08258dad66b639434436d0a533127e51effbdd16e4a07ef3fab948963e89ae8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":22543,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f260407ad5875ca6920015bd8c4244b00453e8856f69e363e0217c410a4ba389__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":23564,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":19673,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":22080,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":20820,"id":null,"parameterSlots":4,"returnSlots":1},"allocate_memory":{"entryPoint":21736,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_t_array$_t_address_$dyn_memory_ptr":{"entryPoint":21764,"id":null,"parameterSlots":1,"returnSlots":1},"array_dataslot_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_dataslot_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_dataslot_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_dataslot_t_array$_t_uint256_$dyn_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_array$_t_uint256_$dyn_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_string_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_nextElement_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_nextElement_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_nextElement_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_nextElement_t_array$_t_uint256_$dyn_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_array$_t_uint256_$dyn_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":23076,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":22815,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":22729,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":23833,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_address":{"entryPoint":19586,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_bool":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_ComptrollerInterface_$9353":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_IERC20Upgradeable_$1352":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_IPrime_$16613":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_ResilientOracleInterface_$16173":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_RewardsDistributor_$12324":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_VToken_$15506":{"entryPoint":20530,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_enum$_Action_$9148":{"entryPoint":24201,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_rational_1_by_1":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_IPrime_$16613_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_ResilientOracleInterface_$16173_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_RewardsDistributor_$12324_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_VToken_$15506_to_t_address":{"entryPoint":20860,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_enum$_Action_$9148_to_t_uint8":{"entryPoint":24211,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_rational_1_by_1_to_t_uint8":{"entryPoint":23671,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint160_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint160_to_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":23874,"id":null,"parameterSlots":3,"returnSlots":0},"finalize_allocation":{"entryPoint":21692,"id":null,"parameterSlots":2,"returnSlots":0},"identity":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint256":{"entryPoint":23360,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x01":{"entryPoint":23811,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x11":{"entryPoint":22707,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":22793,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":23789,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x31":{"entryPoint":23852,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":22614,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":21670,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"round_up_to_mul_of_32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"store_literal_in_memory_0ad46837fefc66a37a27d365ae7d6446a39b33a37d743c62daa13796b21a9a61":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_25d05e40227b6f7351f342eb9dac81eb87f63180a86e368f7d41da458d00d16f":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_3388b29c8ac24f5c232934811c4242553f413844f77f503b8785ba71cd2c4b6f":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_61ffe8d71e53165b47fbc4657a5b6dca84fa425e33e0a21288981e17a8238fcd":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_7cbca09684e568d28239275bedb5f9d8ede90fb19ba1a42a2dd98c07e53733e5":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_c058637d38cae682b1632861e7627b9b2faf58bda046e427ad8f294be17a6198":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_dbab81719f15ade78f76dcdbf7cff531fc5f9822fe7e8466ffdd2feb23510f3b":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_e08258dad66b639434436d0a533127e51effbdd16e4a07ef3fab948963e89ae8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_f260407ad5875ca6920015bd8c4244b00453e8856f69e363e0217c410a4ba389":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_assert_t_enum$_Action_$9148":{"entryPoint":24185,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_address":{"entryPoint":19603,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_bool":{"entryPoint":20218,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_ComptrollerInterface_$9353":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_IERC20Upgradeable_$1352":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_IPrime_$16613":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_ResilientOracleInterface_$16173":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_RewardsDistributor_$12324":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_VToken_$15506":{"entryPoint":20541,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_enum$_Action_$9148":{"entryPoint":22192,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_uint256":{"entryPoint":19748,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:70138:69","nodeType":"YulBlock","src":"0:70138:69","statements":[{"body":{"nativeSrc":"49:48:69","nodeType":"YulBlock","src":"49:48:69","statements":[{"nativeSrc":"59:32:69","nodeType":"YulAssignment","src":"59:32:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"84:5:69","nodeType":"YulIdentifier","src":"84:5:69"}],"functionName":{"name":"iszero","nativeSrc":"77:6:69","nodeType":"YulIdentifier","src":"77:6:69"},"nativeSrc":"77:13:69","nodeType":"YulFunctionCall","src":"77:13:69"}],"functionName":{"name":"iszero","nativeSrc":"70:6:69","nodeType":"YulIdentifier","src":"70:6:69"},"nativeSrc":"70:21:69","nodeType":"YulFunctionCall","src":"70:21:69"},"variableNames":[{"name":"cleaned","nativeSrc":"59:7:69","nodeType":"YulIdentifier","src":"59:7:69"}]}]},"name":"cleanup_t_bool","nativeSrc":"7:90:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"31:5:69","nodeType":"YulTypedName","src":"31:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"41:7:69","nodeType":"YulTypedName","src":"41:7:69","type":""}],"src":"7:90:69"},{"body":{"nativeSrc":"162:50:69","nodeType":"YulBlock","src":"162:50:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"179:3:69","nodeType":"YulIdentifier","src":"179:3:69"},{"arguments":[{"name":"value","nativeSrc":"199:5:69","nodeType":"YulIdentifier","src":"199:5:69"}],"functionName":{"name":"cleanup_t_bool","nativeSrc":"184:14:69","nodeType":"YulIdentifier","src":"184:14:69"},"nativeSrc":"184:21:69","nodeType":"YulFunctionCall","src":"184:21:69"}],"functionName":{"name":"mstore","nativeSrc":"172:6:69","nodeType":"YulIdentifier","src":"172:6:69"},"nativeSrc":"172:34:69","nodeType":"YulFunctionCall","src":"172:34:69"},"nativeSrc":"172:34:69","nodeType":"YulExpressionStatement","src":"172:34:69"}]},"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"103:109:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"150:5:69","nodeType":"YulTypedName","src":"150:5:69","type":""},{"name":"pos","nativeSrc":"157:3:69","nodeType":"YulTypedName","src":"157:3:69","type":""}],"src":"103:109:69"},{"body":{"nativeSrc":"310:118:69","nodeType":"YulBlock","src":"310:118:69","statements":[{"nativeSrc":"320:26:69","nodeType":"YulAssignment","src":"320:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"332:9:69","nodeType":"YulIdentifier","src":"332:9:69"},{"kind":"number","nativeSrc":"343:2:69","nodeType":"YulLiteral","src":"343:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"328:3:69","nodeType":"YulIdentifier","src":"328:3:69"},"nativeSrc":"328:18:69","nodeType":"YulFunctionCall","src":"328:18:69"},"variableNames":[{"name":"tail","nativeSrc":"320:4:69","nodeType":"YulIdentifier","src":"320:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"394:6:69","nodeType":"YulIdentifier","src":"394:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"407:9:69","nodeType":"YulIdentifier","src":"407:9:69"},{"kind":"number","nativeSrc":"418:1:69","nodeType":"YulLiteral","src":"418:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"403:3:69","nodeType":"YulIdentifier","src":"403:3:69"},"nativeSrc":"403:17:69","nodeType":"YulFunctionCall","src":"403:17:69"}],"functionName":{"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"356:37:69","nodeType":"YulIdentifier","src":"356:37:69"},"nativeSrc":"356:65:69","nodeType":"YulFunctionCall","src":"356:65:69"},"nativeSrc":"356:65:69","nodeType":"YulExpressionStatement","src":"356:65:69"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nativeSrc":"218:210:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"282:9:69","nodeType":"YulTypedName","src":"282:9:69","type":""},{"name":"value0","nativeSrc":"294:6:69","nodeType":"YulTypedName","src":"294:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"305:4:69","nodeType":"YulTypedName","src":"305:4:69","type":""}],"src":"218:210:69"},{"body":{"nativeSrc":"474:35:69","nodeType":"YulBlock","src":"474:35:69","statements":[{"nativeSrc":"484:19:69","nodeType":"YulAssignment","src":"484:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"500:2:69","nodeType":"YulLiteral","src":"500:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"494:5:69","nodeType":"YulIdentifier","src":"494:5:69"},"nativeSrc":"494:9:69","nodeType":"YulFunctionCall","src":"494:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"484:6:69","nodeType":"YulIdentifier","src":"484:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"434:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"467:6:69","nodeType":"YulTypedName","src":"467:6:69","type":""}],"src":"434:75:69"},{"body":{"nativeSrc":"604:28:69","nodeType":"YulBlock","src":"604:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"621:1:69","nodeType":"YulLiteral","src":"621:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"624:1:69","nodeType":"YulLiteral","src":"624:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"614:6:69","nodeType":"YulIdentifier","src":"614:6:69"},"nativeSrc":"614:12:69","nodeType":"YulFunctionCall","src":"614:12:69"},"nativeSrc":"614:12:69","nodeType":"YulExpressionStatement","src":"614:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"515:117:69","nodeType":"YulFunctionDefinition","src":"515:117:69"},{"body":{"nativeSrc":"727:28:69","nodeType":"YulBlock","src":"727:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"744:1:69","nodeType":"YulLiteral","src":"744:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"747:1:69","nodeType":"YulLiteral","src":"747:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"737:6:69","nodeType":"YulIdentifier","src":"737:6:69"},"nativeSrc":"737:12:69","nodeType":"YulFunctionCall","src":"737:12:69"},"nativeSrc":"737:12:69","nodeType":"YulExpressionStatement","src":"737:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"638:117:69","nodeType":"YulFunctionDefinition","src":"638:117:69"},{"body":{"nativeSrc":"806:81:69","nodeType":"YulBlock","src":"806:81:69","statements":[{"nativeSrc":"816:65:69","nodeType":"YulAssignment","src":"816:65:69","value":{"arguments":[{"name":"value","nativeSrc":"831:5:69","nodeType":"YulIdentifier","src":"831:5:69"},{"kind":"number","nativeSrc":"838:42:69","nodeType":"YulLiteral","src":"838:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"827:3:69","nodeType":"YulIdentifier","src":"827:3:69"},"nativeSrc":"827:54:69","nodeType":"YulFunctionCall","src":"827:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"816:7:69","nodeType":"YulIdentifier","src":"816:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"761:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"788:5:69","nodeType":"YulTypedName","src":"788:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"798:7:69","nodeType":"YulTypedName","src":"798:7:69","type":""}],"src":"761:126:69"},{"body":{"nativeSrc":"938:51:69","nodeType":"YulBlock","src":"938:51:69","statements":[{"nativeSrc":"948:35:69","nodeType":"YulAssignment","src":"948:35:69","value":{"arguments":[{"name":"value","nativeSrc":"977:5:69","nodeType":"YulIdentifier","src":"977:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"959:17:69","nodeType":"YulIdentifier","src":"959:17:69"},"nativeSrc":"959:24:69","nodeType":"YulFunctionCall","src":"959:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"948:7:69","nodeType":"YulIdentifier","src":"948:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"893:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"920:5:69","nodeType":"YulTypedName","src":"920:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"930:7:69","nodeType":"YulTypedName","src":"930:7:69","type":""}],"src":"893:96:69"},{"body":{"nativeSrc":"1038:79:69","nodeType":"YulBlock","src":"1038:79:69","statements":[{"body":{"nativeSrc":"1095:16:69","nodeType":"YulBlock","src":"1095:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1104:1:69","nodeType":"YulLiteral","src":"1104:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1107:1:69","nodeType":"YulLiteral","src":"1107:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1097:6:69","nodeType":"YulIdentifier","src":"1097:6:69"},"nativeSrc":"1097:12:69","nodeType":"YulFunctionCall","src":"1097:12:69"},"nativeSrc":"1097:12:69","nodeType":"YulExpressionStatement","src":"1097:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1061:5:69","nodeType":"YulIdentifier","src":"1061:5:69"},{"arguments":[{"name":"value","nativeSrc":"1086:5:69","nodeType":"YulIdentifier","src":"1086:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"1068:17:69","nodeType":"YulIdentifier","src":"1068:17:69"},"nativeSrc":"1068:24:69","nodeType":"YulFunctionCall","src":"1068:24:69"}],"functionName":{"name":"eq","nativeSrc":"1058:2:69","nodeType":"YulIdentifier","src":"1058:2:69"},"nativeSrc":"1058:35:69","nodeType":"YulFunctionCall","src":"1058:35:69"}],"functionName":{"name":"iszero","nativeSrc":"1051:6:69","nodeType":"YulIdentifier","src":"1051:6:69"},"nativeSrc":"1051:43:69","nodeType":"YulFunctionCall","src":"1051:43:69"},"nativeSrc":"1048:63:69","nodeType":"YulIf","src":"1048:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"995:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1031:5:69","nodeType":"YulTypedName","src":"1031:5:69","type":""}],"src":"995:122:69"},{"body":{"nativeSrc":"1175:87:69","nodeType":"YulBlock","src":"1175:87:69","statements":[{"nativeSrc":"1185:29:69","nodeType":"YulAssignment","src":"1185:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"1207:6:69","nodeType":"YulIdentifier","src":"1207:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"1194:12:69","nodeType":"YulIdentifier","src":"1194:12:69"},"nativeSrc":"1194:20:69","nodeType":"YulFunctionCall","src":"1194:20:69"},"variableNames":[{"name":"value","nativeSrc":"1185:5:69","nodeType":"YulIdentifier","src":"1185:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"1250:5:69","nodeType":"YulIdentifier","src":"1250:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"1223:26:69","nodeType":"YulIdentifier","src":"1223:26:69"},"nativeSrc":"1223:33:69","nodeType":"YulFunctionCall","src":"1223:33:69"},"nativeSrc":"1223:33:69","nodeType":"YulExpressionStatement","src":"1223:33:69"}]},"name":"abi_decode_t_address","nativeSrc":"1123:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"1153:6:69","nodeType":"YulTypedName","src":"1153:6:69","type":""},{"name":"end","nativeSrc":"1161:3:69","nodeType":"YulTypedName","src":"1161:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"1169:5:69","nodeType":"YulTypedName","src":"1169:5:69","type":""}],"src":"1123:139:69"},{"body":{"nativeSrc":"1334:263:69","nodeType":"YulBlock","src":"1334:263:69","statements":[{"body":{"nativeSrc":"1380:83:69","nodeType":"YulBlock","src":"1380:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"1382:77:69","nodeType":"YulIdentifier","src":"1382:77:69"},"nativeSrc":"1382:79:69","nodeType":"YulFunctionCall","src":"1382:79:69"},"nativeSrc":"1382:79:69","nodeType":"YulExpressionStatement","src":"1382:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"1355:7:69","nodeType":"YulIdentifier","src":"1355:7:69"},{"name":"headStart","nativeSrc":"1364:9:69","nodeType":"YulIdentifier","src":"1364:9:69"}],"functionName":{"name":"sub","nativeSrc":"1351:3:69","nodeType":"YulIdentifier","src":"1351:3:69"},"nativeSrc":"1351:23:69","nodeType":"YulFunctionCall","src":"1351:23:69"},{"kind":"number","nativeSrc":"1376:2:69","nodeType":"YulLiteral","src":"1376:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"1347:3:69","nodeType":"YulIdentifier","src":"1347:3:69"},"nativeSrc":"1347:32:69","nodeType":"YulFunctionCall","src":"1347:32:69"},"nativeSrc":"1344:119:69","nodeType":"YulIf","src":"1344:119:69"},{"nativeSrc":"1473:117:69","nodeType":"YulBlock","src":"1473:117:69","statements":[{"nativeSrc":"1488:15:69","nodeType":"YulVariableDeclaration","src":"1488:15:69","value":{"kind":"number","nativeSrc":"1502:1:69","nodeType":"YulLiteral","src":"1502:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"1492:6:69","nodeType":"YulTypedName","src":"1492:6:69","type":""}]},{"nativeSrc":"1517:63:69","nodeType":"YulAssignment","src":"1517:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1552:9:69","nodeType":"YulIdentifier","src":"1552:9:69"},{"name":"offset","nativeSrc":"1563:6:69","nodeType":"YulIdentifier","src":"1563:6:69"}],"functionName":{"name":"add","nativeSrc":"1548:3:69","nodeType":"YulIdentifier","src":"1548:3:69"},"nativeSrc":"1548:22:69","nodeType":"YulFunctionCall","src":"1548:22:69"},{"name":"dataEnd","nativeSrc":"1572:7:69","nodeType":"YulIdentifier","src":"1572:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"1527:20:69","nodeType":"YulIdentifier","src":"1527:20:69"},"nativeSrc":"1527:53:69","nodeType":"YulFunctionCall","src":"1527:53:69"},"variableNames":[{"name":"value0","nativeSrc":"1517:6:69","nodeType":"YulIdentifier","src":"1517:6:69"}]}]}]},"name":"abi_decode_tuple_t_address","nativeSrc":"1268:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1304:9:69","nodeType":"YulTypedName","src":"1304:9:69","type":""},{"name":"dataEnd","nativeSrc":"1315:7:69","nodeType":"YulTypedName","src":"1315:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"1327:6:69","nodeType":"YulTypedName","src":"1327:6:69","type":""}],"src":"1268:329:69"},{"body":{"nativeSrc":"1648:32:69","nodeType":"YulBlock","src":"1648:32:69","statements":[{"nativeSrc":"1658:16:69","nodeType":"YulAssignment","src":"1658:16:69","value":{"name":"value","nativeSrc":"1669:5:69","nodeType":"YulIdentifier","src":"1669:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"1658:7:69","nodeType":"YulIdentifier","src":"1658:7:69"}]}]},"name":"cleanup_t_uint256","nativeSrc":"1603:77:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1630:5:69","nodeType":"YulTypedName","src":"1630:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"1640:7:69","nodeType":"YulTypedName","src":"1640:7:69","type":""}],"src":"1603:77:69"},{"body":{"nativeSrc":"1751:53:69","nodeType":"YulBlock","src":"1751:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"1768:3:69","nodeType":"YulIdentifier","src":"1768:3:69"},{"arguments":[{"name":"value","nativeSrc":"1791:5:69","nodeType":"YulIdentifier","src":"1791:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"1773:17:69","nodeType":"YulIdentifier","src":"1773:17:69"},"nativeSrc":"1773:24:69","nodeType":"YulFunctionCall","src":"1773:24:69"}],"functionName":{"name":"mstore","nativeSrc":"1761:6:69","nodeType":"YulIdentifier","src":"1761:6:69"},"nativeSrc":"1761:37:69","nodeType":"YulFunctionCall","src":"1761:37:69"},"nativeSrc":"1761:37:69","nodeType":"YulExpressionStatement","src":"1761:37:69"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"1686:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1739:5:69","nodeType":"YulTypedName","src":"1739:5:69","type":""},{"name":"pos","nativeSrc":"1746:3:69","nodeType":"YulTypedName","src":"1746:3:69","type":""}],"src":"1686:118:69"},{"body":{"nativeSrc":"1908:124:69","nodeType":"YulBlock","src":"1908:124:69","statements":[{"nativeSrc":"1918:26:69","nodeType":"YulAssignment","src":"1918:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"1930:9:69","nodeType":"YulIdentifier","src":"1930:9:69"},{"kind":"number","nativeSrc":"1941:2:69","nodeType":"YulLiteral","src":"1941:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1926:3:69","nodeType":"YulIdentifier","src":"1926:3:69"},"nativeSrc":"1926:18:69","nodeType":"YulFunctionCall","src":"1926:18:69"},"variableNames":[{"name":"tail","nativeSrc":"1918:4:69","nodeType":"YulIdentifier","src":"1918:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"1998:6:69","nodeType":"YulIdentifier","src":"1998:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"2011:9:69","nodeType":"YulIdentifier","src":"2011:9:69"},{"kind":"number","nativeSrc":"2022:1:69","nodeType":"YulLiteral","src":"2022:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"2007:3:69","nodeType":"YulIdentifier","src":"2007:3:69"},"nativeSrc":"2007:17:69","nodeType":"YulFunctionCall","src":"2007:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"1954:43:69","nodeType":"YulIdentifier","src":"1954:43:69"},"nativeSrc":"1954:71:69","nodeType":"YulFunctionCall","src":"1954:71:69"},"nativeSrc":"1954:71:69","nodeType":"YulExpressionStatement","src":"1954:71:69"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nativeSrc":"1810:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1880:9:69","nodeType":"YulTypedName","src":"1880:9:69","type":""},{"name":"value0","nativeSrc":"1892:6:69","nodeType":"YulTypedName","src":"1892:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1903:4:69","nodeType":"YulTypedName","src":"1903:4:69","type":""}],"src":"1810:222:69"},{"body":{"nativeSrc":"2121:391:69","nodeType":"YulBlock","src":"2121:391:69","statements":[{"body":{"nativeSrc":"2167:83:69","nodeType":"YulBlock","src":"2167:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"2169:77:69","nodeType":"YulIdentifier","src":"2169:77:69"},"nativeSrc":"2169:79:69","nodeType":"YulFunctionCall","src":"2169:79:69"},"nativeSrc":"2169:79:69","nodeType":"YulExpressionStatement","src":"2169:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"2142:7:69","nodeType":"YulIdentifier","src":"2142:7:69"},{"name":"headStart","nativeSrc":"2151:9:69","nodeType":"YulIdentifier","src":"2151:9:69"}],"functionName":{"name":"sub","nativeSrc":"2138:3:69","nodeType":"YulIdentifier","src":"2138:3:69"},"nativeSrc":"2138:23:69","nodeType":"YulFunctionCall","src":"2138:23:69"},{"kind":"number","nativeSrc":"2163:2:69","nodeType":"YulLiteral","src":"2163:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"2134:3:69","nodeType":"YulIdentifier","src":"2134:3:69"},"nativeSrc":"2134:32:69","nodeType":"YulFunctionCall","src":"2134:32:69"},"nativeSrc":"2131:119:69","nodeType":"YulIf","src":"2131:119:69"},{"nativeSrc":"2260:117:69","nodeType":"YulBlock","src":"2260:117:69","statements":[{"nativeSrc":"2275:15:69","nodeType":"YulVariableDeclaration","src":"2275:15:69","value":{"kind":"number","nativeSrc":"2289:1:69","nodeType":"YulLiteral","src":"2289:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"2279:6:69","nodeType":"YulTypedName","src":"2279:6:69","type":""}]},{"nativeSrc":"2304:63:69","nodeType":"YulAssignment","src":"2304:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2339:9:69","nodeType":"YulIdentifier","src":"2339:9:69"},{"name":"offset","nativeSrc":"2350:6:69","nodeType":"YulIdentifier","src":"2350:6:69"}],"functionName":{"name":"add","nativeSrc":"2335:3:69","nodeType":"YulIdentifier","src":"2335:3:69"},"nativeSrc":"2335:22:69","nodeType":"YulFunctionCall","src":"2335:22:69"},{"name":"dataEnd","nativeSrc":"2359:7:69","nodeType":"YulIdentifier","src":"2359:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"2314:20:69","nodeType":"YulIdentifier","src":"2314:20:69"},"nativeSrc":"2314:53:69","nodeType":"YulFunctionCall","src":"2314:53:69"},"variableNames":[{"name":"value0","nativeSrc":"2304:6:69","nodeType":"YulIdentifier","src":"2304:6:69"}]}]},{"nativeSrc":"2387:118:69","nodeType":"YulBlock","src":"2387:118:69","statements":[{"nativeSrc":"2402:16:69","nodeType":"YulVariableDeclaration","src":"2402:16:69","value":{"kind":"number","nativeSrc":"2416:2:69","nodeType":"YulLiteral","src":"2416:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"2406:6:69","nodeType":"YulTypedName","src":"2406:6:69","type":""}]},{"nativeSrc":"2432:63:69","nodeType":"YulAssignment","src":"2432:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2467:9:69","nodeType":"YulIdentifier","src":"2467:9:69"},{"name":"offset","nativeSrc":"2478:6:69","nodeType":"YulIdentifier","src":"2478:6:69"}],"functionName":{"name":"add","nativeSrc":"2463:3:69","nodeType":"YulIdentifier","src":"2463:3:69"},"nativeSrc":"2463:22:69","nodeType":"YulFunctionCall","src":"2463:22:69"},{"name":"dataEnd","nativeSrc":"2487:7:69","nodeType":"YulIdentifier","src":"2487:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"2442:20:69","nodeType":"YulIdentifier","src":"2442:20:69"},"nativeSrc":"2442:53:69","nodeType":"YulFunctionCall","src":"2442:53:69"},"variableNames":[{"name":"value1","nativeSrc":"2432:6:69","nodeType":"YulIdentifier","src":"2432:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_address","nativeSrc":"2038:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2083:9:69","nodeType":"YulTypedName","src":"2083:9:69","type":""},{"name":"dataEnd","nativeSrc":"2094:7:69","nodeType":"YulTypedName","src":"2094:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"2106:6:69","nodeType":"YulTypedName","src":"2106:6:69","type":""},{"name":"value1","nativeSrc":"2114:6:69","nodeType":"YulTypedName","src":"2114:6:69","type":""}],"src":"2038:474:69"},{"body":{"nativeSrc":"2561:79:69","nodeType":"YulBlock","src":"2561:79:69","statements":[{"body":{"nativeSrc":"2618:16:69","nodeType":"YulBlock","src":"2618:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2627:1:69","nodeType":"YulLiteral","src":"2627:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"2630:1:69","nodeType":"YulLiteral","src":"2630:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2620:6:69","nodeType":"YulIdentifier","src":"2620:6:69"},"nativeSrc":"2620:12:69","nodeType":"YulFunctionCall","src":"2620:12:69"},"nativeSrc":"2620:12:69","nodeType":"YulExpressionStatement","src":"2620:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"2584:5:69","nodeType":"YulIdentifier","src":"2584:5:69"},{"arguments":[{"name":"value","nativeSrc":"2609:5:69","nodeType":"YulIdentifier","src":"2609:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"2591:17:69","nodeType":"YulIdentifier","src":"2591:17:69"},"nativeSrc":"2591:24:69","nodeType":"YulFunctionCall","src":"2591:24:69"}],"functionName":{"name":"eq","nativeSrc":"2581:2:69","nodeType":"YulIdentifier","src":"2581:2:69"},"nativeSrc":"2581:35:69","nodeType":"YulFunctionCall","src":"2581:35:69"}],"functionName":{"name":"iszero","nativeSrc":"2574:6:69","nodeType":"YulIdentifier","src":"2574:6:69"},"nativeSrc":"2574:43:69","nodeType":"YulFunctionCall","src":"2574:43:69"},"nativeSrc":"2571:63:69","nodeType":"YulIf","src":"2571:63:69"}]},"name":"validator_revert_t_uint256","nativeSrc":"2518:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2554:5:69","nodeType":"YulTypedName","src":"2554:5:69","type":""}],"src":"2518:122:69"},{"body":{"nativeSrc":"2698:87:69","nodeType":"YulBlock","src":"2698:87:69","statements":[{"nativeSrc":"2708:29:69","nodeType":"YulAssignment","src":"2708:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"2730:6:69","nodeType":"YulIdentifier","src":"2730:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"2717:12:69","nodeType":"YulIdentifier","src":"2717:12:69"},"nativeSrc":"2717:20:69","nodeType":"YulFunctionCall","src":"2717:20:69"},"variableNames":[{"name":"value","nativeSrc":"2708:5:69","nodeType":"YulIdentifier","src":"2708:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"2773:5:69","nodeType":"YulIdentifier","src":"2773:5:69"}],"functionName":{"name":"validator_revert_t_uint256","nativeSrc":"2746:26:69","nodeType":"YulIdentifier","src":"2746:26:69"},"nativeSrc":"2746:33:69","nodeType":"YulFunctionCall","src":"2746:33:69"},"nativeSrc":"2746:33:69","nodeType":"YulExpressionStatement","src":"2746:33:69"}]},"name":"abi_decode_t_uint256","nativeSrc":"2646:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"2676:6:69","nodeType":"YulTypedName","src":"2676:6:69","type":""},{"name":"end","nativeSrc":"2684:3:69","nodeType":"YulTypedName","src":"2684:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"2692:5:69","nodeType":"YulTypedName","src":"2692:5:69","type":""}],"src":"2646:139:69"},{"body":{"nativeSrc":"2857:263:69","nodeType":"YulBlock","src":"2857:263:69","statements":[{"body":{"nativeSrc":"2903:83:69","nodeType":"YulBlock","src":"2903:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"2905:77:69","nodeType":"YulIdentifier","src":"2905:77:69"},"nativeSrc":"2905:79:69","nodeType":"YulFunctionCall","src":"2905:79:69"},"nativeSrc":"2905:79:69","nodeType":"YulExpressionStatement","src":"2905:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"2878:7:69","nodeType":"YulIdentifier","src":"2878:7:69"},{"name":"headStart","nativeSrc":"2887:9:69","nodeType":"YulIdentifier","src":"2887:9:69"}],"functionName":{"name":"sub","nativeSrc":"2874:3:69","nodeType":"YulIdentifier","src":"2874:3:69"},"nativeSrc":"2874:23:69","nodeType":"YulFunctionCall","src":"2874:23:69"},{"kind":"number","nativeSrc":"2899:2:69","nodeType":"YulLiteral","src":"2899:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"2870:3:69","nodeType":"YulIdentifier","src":"2870:3:69"},"nativeSrc":"2870:32:69","nodeType":"YulFunctionCall","src":"2870:32:69"},"nativeSrc":"2867:119:69","nodeType":"YulIf","src":"2867:119:69"},{"nativeSrc":"2996:117:69","nodeType":"YulBlock","src":"2996:117:69","statements":[{"nativeSrc":"3011:15:69","nodeType":"YulVariableDeclaration","src":"3011:15:69","value":{"kind":"number","nativeSrc":"3025:1:69","nodeType":"YulLiteral","src":"3025:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"3015:6:69","nodeType":"YulTypedName","src":"3015:6:69","type":""}]},{"nativeSrc":"3040:63:69","nodeType":"YulAssignment","src":"3040:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3075:9:69","nodeType":"YulIdentifier","src":"3075:9:69"},{"name":"offset","nativeSrc":"3086:6:69","nodeType":"YulIdentifier","src":"3086:6:69"}],"functionName":{"name":"add","nativeSrc":"3071:3:69","nodeType":"YulIdentifier","src":"3071:3:69"},"nativeSrc":"3071:22:69","nodeType":"YulFunctionCall","src":"3071:22:69"},{"name":"dataEnd","nativeSrc":"3095:7:69","nodeType":"YulIdentifier","src":"3095:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"3050:20:69","nodeType":"YulIdentifier","src":"3050:20:69"},"nativeSrc":"3050:53:69","nodeType":"YulFunctionCall","src":"3050:53:69"},"variableNames":[{"name":"value0","nativeSrc":"3040:6:69","nodeType":"YulIdentifier","src":"3040:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint256","nativeSrc":"2791:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2827:9:69","nodeType":"YulTypedName","src":"2827:9:69","type":""},{"name":"dataEnd","nativeSrc":"2838:7:69","nodeType":"YulTypedName","src":"2838:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"2850:6:69","nodeType":"YulTypedName","src":"2850:6:69","type":""}],"src":"2791:329:69"},{"body":{"nativeSrc":"3215:28:69","nodeType":"YulBlock","src":"3215:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3232:1:69","nodeType":"YulLiteral","src":"3232:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"3235:1:69","nodeType":"YulLiteral","src":"3235:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"3225:6:69","nodeType":"YulIdentifier","src":"3225:6:69"},"nativeSrc":"3225:12:69","nodeType":"YulFunctionCall","src":"3225:12:69"},"nativeSrc":"3225:12:69","nodeType":"YulExpressionStatement","src":"3225:12:69"}]},"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"3126:117:69","nodeType":"YulFunctionDefinition","src":"3126:117:69"},{"body":{"nativeSrc":"3338:28:69","nodeType":"YulBlock","src":"3338:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3355:1:69","nodeType":"YulLiteral","src":"3355:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"3358:1:69","nodeType":"YulLiteral","src":"3358:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"3348:6:69","nodeType":"YulIdentifier","src":"3348:6:69"},"nativeSrc":"3348:12:69","nodeType":"YulFunctionCall","src":"3348:12:69"},"nativeSrc":"3348:12:69","nodeType":"YulExpressionStatement","src":"3348:12:69"}]},"name":"revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490","nativeSrc":"3249:117:69","nodeType":"YulFunctionDefinition","src":"3249:117:69"},{"body":{"nativeSrc":"3461:28:69","nodeType":"YulBlock","src":"3461:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3478:1:69","nodeType":"YulLiteral","src":"3478:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"3481:1:69","nodeType":"YulLiteral","src":"3481:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"3471:6:69","nodeType":"YulIdentifier","src":"3471:6:69"},"nativeSrc":"3471:12:69","nodeType":"YulFunctionCall","src":"3471:12:69"},"nativeSrc":"3471:12:69","nodeType":"YulExpressionStatement","src":"3471:12:69"}]},"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"3372:117:69","nodeType":"YulFunctionDefinition","src":"3372:117:69"},{"body":{"nativeSrc":"3626:478:69","nodeType":"YulBlock","src":"3626:478:69","statements":[{"body":{"nativeSrc":"3675:83:69","nodeType":"YulBlock","src":"3675:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"3677:77:69","nodeType":"YulIdentifier","src":"3677:77:69"},"nativeSrc":"3677:79:69","nodeType":"YulFunctionCall","src":"3677:79:69"},"nativeSrc":"3677:79:69","nodeType":"YulExpressionStatement","src":"3677:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"3654:6:69","nodeType":"YulIdentifier","src":"3654:6:69"},{"kind":"number","nativeSrc":"3662:4:69","nodeType":"YulLiteral","src":"3662:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"3650:3:69","nodeType":"YulIdentifier","src":"3650:3:69"},"nativeSrc":"3650:17:69","nodeType":"YulFunctionCall","src":"3650:17:69"},{"name":"end","nativeSrc":"3669:3:69","nodeType":"YulIdentifier","src":"3669:3:69"}],"functionName":{"name":"slt","nativeSrc":"3646:3:69","nodeType":"YulIdentifier","src":"3646:3:69"},"nativeSrc":"3646:27:69","nodeType":"YulFunctionCall","src":"3646:27:69"}],"functionName":{"name":"iszero","nativeSrc":"3639:6:69","nodeType":"YulIdentifier","src":"3639:6:69"},"nativeSrc":"3639:35:69","nodeType":"YulFunctionCall","src":"3639:35:69"},"nativeSrc":"3636:122:69","nodeType":"YulIf","src":"3636:122:69"},{"nativeSrc":"3767:30:69","nodeType":"YulAssignment","src":"3767:30:69","value":{"arguments":[{"name":"offset","nativeSrc":"3790:6:69","nodeType":"YulIdentifier","src":"3790:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"3777:12:69","nodeType":"YulIdentifier","src":"3777:12:69"},"nativeSrc":"3777:20:69","nodeType":"YulFunctionCall","src":"3777:20:69"},"variableNames":[{"name":"length","nativeSrc":"3767:6:69","nodeType":"YulIdentifier","src":"3767:6:69"}]},{"body":{"nativeSrc":"3840:83:69","nodeType":"YulBlock","src":"3840:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490","nativeSrc":"3842:77:69","nodeType":"YulIdentifier","src":"3842:77:69"},"nativeSrc":"3842:79:69","nodeType":"YulFunctionCall","src":"3842:79:69"},"nativeSrc":"3842:79:69","nodeType":"YulExpressionStatement","src":"3842:79:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"3812:6:69","nodeType":"YulIdentifier","src":"3812:6:69"},{"kind":"number","nativeSrc":"3820:18:69","nodeType":"YulLiteral","src":"3820:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"3809:2:69","nodeType":"YulIdentifier","src":"3809:2:69"},"nativeSrc":"3809:30:69","nodeType":"YulFunctionCall","src":"3809:30:69"},"nativeSrc":"3806:117:69","nodeType":"YulIf","src":"3806:117:69"},{"nativeSrc":"3932:29:69","nodeType":"YulAssignment","src":"3932:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"3948:6:69","nodeType":"YulIdentifier","src":"3948:6:69"},{"kind":"number","nativeSrc":"3956:4:69","nodeType":"YulLiteral","src":"3956:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"3944:3:69","nodeType":"YulIdentifier","src":"3944:3:69"},"nativeSrc":"3944:17:69","nodeType":"YulFunctionCall","src":"3944:17:69"},"variableNames":[{"name":"arrayPos","nativeSrc":"3932:8:69","nodeType":"YulIdentifier","src":"3932:8:69"}]},{"body":{"nativeSrc":"4015:83:69","nodeType":"YulBlock","src":"4015:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"4017:77:69","nodeType":"YulIdentifier","src":"4017:77:69"},"nativeSrc":"4017:79:69","nodeType":"YulFunctionCall","src":"4017:79:69"},"nativeSrc":"4017:79:69","nodeType":"YulExpressionStatement","src":"4017:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"arrayPos","nativeSrc":"3980:8:69","nodeType":"YulIdentifier","src":"3980:8:69"},{"arguments":[{"name":"length","nativeSrc":"3994:6:69","nodeType":"YulIdentifier","src":"3994:6:69"},{"kind":"number","nativeSrc":"4002:4:69","nodeType":"YulLiteral","src":"4002:4:69","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"3990:3:69","nodeType":"YulIdentifier","src":"3990:3:69"},"nativeSrc":"3990:17:69","nodeType":"YulFunctionCall","src":"3990:17:69"}],"functionName":{"name":"add","nativeSrc":"3976:3:69","nodeType":"YulIdentifier","src":"3976:3:69"},"nativeSrc":"3976:32:69","nodeType":"YulFunctionCall","src":"3976:32:69"},{"name":"end","nativeSrc":"4010:3:69","nodeType":"YulIdentifier","src":"4010:3:69"}],"functionName":{"name":"gt","nativeSrc":"3973:2:69","nodeType":"YulIdentifier","src":"3973:2:69"},"nativeSrc":"3973:41:69","nodeType":"YulFunctionCall","src":"3973:41:69"},"nativeSrc":"3970:128:69","nodeType":"YulIf","src":"3970:128:69"}]},"name":"abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","nativeSrc":"3520:584:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"3593:6:69","nodeType":"YulTypedName","src":"3593:6:69","type":""},{"name":"end","nativeSrc":"3601:3:69","nodeType":"YulTypedName","src":"3601:3:69","type":""}],"returnVariables":[{"name":"arrayPos","nativeSrc":"3609:8:69","nodeType":"YulTypedName","src":"3609:8:69","type":""},{"name":"length","nativeSrc":"3619:6:69","nodeType":"YulTypedName","src":"3619:6:69","type":""}],"src":"3520:584:69"},{"body":{"nativeSrc":"4217:478:69","nodeType":"YulBlock","src":"4217:478:69","statements":[{"body":{"nativeSrc":"4266:83:69","nodeType":"YulBlock","src":"4266:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"4268:77:69","nodeType":"YulIdentifier","src":"4268:77:69"},"nativeSrc":"4268:79:69","nodeType":"YulFunctionCall","src":"4268:79:69"},"nativeSrc":"4268:79:69","nodeType":"YulExpressionStatement","src":"4268:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"4245:6:69","nodeType":"YulIdentifier","src":"4245:6:69"},{"kind":"number","nativeSrc":"4253:4:69","nodeType":"YulLiteral","src":"4253:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"4241:3:69","nodeType":"YulIdentifier","src":"4241:3:69"},"nativeSrc":"4241:17:69","nodeType":"YulFunctionCall","src":"4241:17:69"},{"name":"end","nativeSrc":"4260:3:69","nodeType":"YulIdentifier","src":"4260:3:69"}],"functionName":{"name":"slt","nativeSrc":"4237:3:69","nodeType":"YulIdentifier","src":"4237:3:69"},"nativeSrc":"4237:27:69","nodeType":"YulFunctionCall","src":"4237:27:69"}],"functionName":{"name":"iszero","nativeSrc":"4230:6:69","nodeType":"YulIdentifier","src":"4230:6:69"},"nativeSrc":"4230:35:69","nodeType":"YulFunctionCall","src":"4230:35:69"},"nativeSrc":"4227:122:69","nodeType":"YulIf","src":"4227:122:69"},{"nativeSrc":"4358:30:69","nodeType":"YulAssignment","src":"4358:30:69","value":{"arguments":[{"name":"offset","nativeSrc":"4381:6:69","nodeType":"YulIdentifier","src":"4381:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"4368:12:69","nodeType":"YulIdentifier","src":"4368:12:69"},"nativeSrc":"4368:20:69","nodeType":"YulFunctionCall","src":"4368:20:69"},"variableNames":[{"name":"length","nativeSrc":"4358:6:69","nodeType":"YulIdentifier","src":"4358:6:69"}]},{"body":{"nativeSrc":"4431:83:69","nodeType":"YulBlock","src":"4431:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490","nativeSrc":"4433:77:69","nodeType":"YulIdentifier","src":"4433:77:69"},"nativeSrc":"4433:79:69","nodeType":"YulFunctionCall","src":"4433:79:69"},"nativeSrc":"4433:79:69","nodeType":"YulExpressionStatement","src":"4433:79:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"4403:6:69","nodeType":"YulIdentifier","src":"4403:6:69"},{"kind":"number","nativeSrc":"4411:18:69","nodeType":"YulLiteral","src":"4411:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"4400:2:69","nodeType":"YulIdentifier","src":"4400:2:69"},"nativeSrc":"4400:30:69","nodeType":"YulFunctionCall","src":"4400:30:69"},"nativeSrc":"4397:117:69","nodeType":"YulIf","src":"4397:117:69"},{"nativeSrc":"4523:29:69","nodeType":"YulAssignment","src":"4523:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"4539:6:69","nodeType":"YulIdentifier","src":"4539:6:69"},{"kind":"number","nativeSrc":"4547:4:69","nodeType":"YulLiteral","src":"4547:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4535:3:69","nodeType":"YulIdentifier","src":"4535:3:69"},"nativeSrc":"4535:17:69","nodeType":"YulFunctionCall","src":"4535:17:69"},"variableNames":[{"name":"arrayPos","nativeSrc":"4523:8:69","nodeType":"YulIdentifier","src":"4523:8:69"}]},{"body":{"nativeSrc":"4606:83:69","nodeType":"YulBlock","src":"4606:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"4608:77:69","nodeType":"YulIdentifier","src":"4608:77:69"},"nativeSrc":"4608:79:69","nodeType":"YulFunctionCall","src":"4608:79:69"},"nativeSrc":"4608:79:69","nodeType":"YulExpressionStatement","src":"4608:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"arrayPos","nativeSrc":"4571:8:69","nodeType":"YulIdentifier","src":"4571:8:69"},{"arguments":[{"name":"length","nativeSrc":"4585:6:69","nodeType":"YulIdentifier","src":"4585:6:69"},{"kind":"number","nativeSrc":"4593:4:69","nodeType":"YulLiteral","src":"4593:4:69","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"4581:3:69","nodeType":"YulIdentifier","src":"4581:3:69"},"nativeSrc":"4581:17:69","nodeType":"YulFunctionCall","src":"4581:17:69"}],"functionName":{"name":"add","nativeSrc":"4567:3:69","nodeType":"YulIdentifier","src":"4567:3:69"},"nativeSrc":"4567:32:69","nodeType":"YulFunctionCall","src":"4567:32:69"},{"name":"end","nativeSrc":"4601:3:69","nodeType":"YulIdentifier","src":"4601:3:69"}],"functionName":{"name":"gt","nativeSrc":"4564:2:69","nodeType":"YulIdentifier","src":"4564:2:69"},"nativeSrc":"4564:41:69","nodeType":"YulFunctionCall","src":"4564:41:69"},"nativeSrc":"4561:128:69","nodeType":"YulIf","src":"4561:128:69"}]},"name":"abi_decode_t_array$_t_uint256_$dyn_calldata_ptr","nativeSrc":"4127:568:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"4184:6:69","nodeType":"YulTypedName","src":"4184:6:69","type":""},{"name":"end","nativeSrc":"4192:3:69","nodeType":"YulTypedName","src":"4192:3:69","type":""}],"returnVariables":[{"name":"arrayPos","nativeSrc":"4200:8:69","nodeType":"YulTypedName","src":"4200:8:69","type":""},{"name":"length","nativeSrc":"4210:6:69","nodeType":"YulTypedName","src":"4210:6:69","type":""}],"src":"4127:568:69"},{"body":{"nativeSrc":"4870:797:69","nodeType":"YulBlock","src":"4870:797:69","statements":[{"body":{"nativeSrc":"4916:83:69","nodeType":"YulBlock","src":"4916:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"4918:77:69","nodeType":"YulIdentifier","src":"4918:77:69"},"nativeSrc":"4918:79:69","nodeType":"YulFunctionCall","src":"4918:79:69"},"nativeSrc":"4918:79:69","nodeType":"YulExpressionStatement","src":"4918:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"4891:7:69","nodeType":"YulIdentifier","src":"4891:7:69"},{"name":"headStart","nativeSrc":"4900:9:69","nodeType":"YulIdentifier","src":"4900:9:69"}],"functionName":{"name":"sub","nativeSrc":"4887:3:69","nodeType":"YulIdentifier","src":"4887:3:69"},"nativeSrc":"4887:23:69","nodeType":"YulFunctionCall","src":"4887:23:69"},{"kind":"number","nativeSrc":"4912:2:69","nodeType":"YulLiteral","src":"4912:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"4883:3:69","nodeType":"YulIdentifier","src":"4883:3:69"},"nativeSrc":"4883:32:69","nodeType":"YulFunctionCall","src":"4883:32:69"},"nativeSrc":"4880:119:69","nodeType":"YulIf","src":"4880:119:69"},{"nativeSrc":"5009:328:69","nodeType":"YulBlock","src":"5009:328:69","statements":[{"nativeSrc":"5024:45:69","nodeType":"YulVariableDeclaration","src":"5024:45:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5055:9:69","nodeType":"YulIdentifier","src":"5055:9:69"},{"kind":"number","nativeSrc":"5066:1:69","nodeType":"YulLiteral","src":"5066:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5051:3:69","nodeType":"YulIdentifier","src":"5051:3:69"},"nativeSrc":"5051:17:69","nodeType":"YulFunctionCall","src":"5051:17:69"}],"functionName":{"name":"calldataload","nativeSrc":"5038:12:69","nodeType":"YulIdentifier","src":"5038:12:69"},"nativeSrc":"5038:31:69","nodeType":"YulFunctionCall","src":"5038:31:69"},"variables":[{"name":"offset","nativeSrc":"5028:6:69","nodeType":"YulTypedName","src":"5028:6:69","type":""}]},{"body":{"nativeSrc":"5116:83:69","nodeType":"YulBlock","src":"5116:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"5118:77:69","nodeType":"YulIdentifier","src":"5118:77:69"},"nativeSrc":"5118:79:69","nodeType":"YulFunctionCall","src":"5118:79:69"},"nativeSrc":"5118:79:69","nodeType":"YulExpressionStatement","src":"5118:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"5088:6:69","nodeType":"YulIdentifier","src":"5088:6:69"},{"kind":"number","nativeSrc":"5096:18:69","nodeType":"YulLiteral","src":"5096:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"5085:2:69","nodeType":"YulIdentifier","src":"5085:2:69"},"nativeSrc":"5085:30:69","nodeType":"YulFunctionCall","src":"5085:30:69"},"nativeSrc":"5082:117:69","nodeType":"YulIf","src":"5082:117:69"},{"nativeSrc":"5213:114:69","nodeType":"YulAssignment","src":"5213:114:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5299:9:69","nodeType":"YulIdentifier","src":"5299:9:69"},{"name":"offset","nativeSrc":"5310:6:69","nodeType":"YulIdentifier","src":"5310:6:69"}],"functionName":{"name":"add","nativeSrc":"5295:3:69","nodeType":"YulIdentifier","src":"5295:3:69"},"nativeSrc":"5295:22:69","nodeType":"YulFunctionCall","src":"5295:22:69"},{"name":"dataEnd","nativeSrc":"5319:7:69","nodeType":"YulIdentifier","src":"5319:7:69"}],"functionName":{"name":"abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","nativeSrc":"5231:63:69","nodeType":"YulIdentifier","src":"5231:63:69"},"nativeSrc":"5231:96:69","nodeType":"YulFunctionCall","src":"5231:96:69"},"variableNames":[{"name":"value0","nativeSrc":"5213:6:69","nodeType":"YulIdentifier","src":"5213:6:69"},{"name":"value1","nativeSrc":"5221:6:69","nodeType":"YulIdentifier","src":"5221:6:69"}]}]},{"nativeSrc":"5347:313:69","nodeType":"YulBlock","src":"5347:313:69","statements":[{"nativeSrc":"5362:46:69","nodeType":"YulVariableDeclaration","src":"5362:46:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5393:9:69","nodeType":"YulIdentifier","src":"5393:9:69"},{"kind":"number","nativeSrc":"5404:2:69","nodeType":"YulLiteral","src":"5404:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5389:3:69","nodeType":"YulIdentifier","src":"5389:3:69"},"nativeSrc":"5389:18:69","nodeType":"YulFunctionCall","src":"5389:18:69"}],"functionName":{"name":"calldataload","nativeSrc":"5376:12:69","nodeType":"YulIdentifier","src":"5376:12:69"},"nativeSrc":"5376:32:69","nodeType":"YulFunctionCall","src":"5376:32:69"},"variables":[{"name":"offset","nativeSrc":"5366:6:69","nodeType":"YulTypedName","src":"5366:6:69","type":""}]},{"body":{"nativeSrc":"5455:83:69","nodeType":"YulBlock","src":"5455:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"5457:77:69","nodeType":"YulIdentifier","src":"5457:77:69"},"nativeSrc":"5457:79:69","nodeType":"YulFunctionCall","src":"5457:79:69"},"nativeSrc":"5457:79:69","nodeType":"YulExpressionStatement","src":"5457:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"5427:6:69","nodeType":"YulIdentifier","src":"5427:6:69"},{"kind":"number","nativeSrc":"5435:18:69","nodeType":"YulLiteral","src":"5435:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"5424:2:69","nodeType":"YulIdentifier","src":"5424:2:69"},"nativeSrc":"5424:30:69","nodeType":"YulFunctionCall","src":"5424:30:69"},"nativeSrc":"5421:117:69","nodeType":"YulIf","src":"5421:117:69"},{"nativeSrc":"5552:98:69","nodeType":"YulAssignment","src":"5552:98:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5622:9:69","nodeType":"YulIdentifier","src":"5622:9:69"},{"name":"offset","nativeSrc":"5633:6:69","nodeType":"YulIdentifier","src":"5633:6:69"}],"functionName":{"name":"add","nativeSrc":"5618:3:69","nodeType":"YulIdentifier","src":"5618:3:69"},"nativeSrc":"5618:22:69","nodeType":"YulFunctionCall","src":"5618:22:69"},{"name":"dataEnd","nativeSrc":"5642:7:69","nodeType":"YulIdentifier","src":"5642:7:69"}],"functionName":{"name":"abi_decode_t_array$_t_uint256_$dyn_calldata_ptr","nativeSrc":"5570:47:69","nodeType":"YulIdentifier","src":"5570:47:69"},"nativeSrc":"5570:80:69","nodeType":"YulFunctionCall","src":"5570:80:69"},"variableNames":[{"name":"value2","nativeSrc":"5552:6:69","nodeType":"YulIdentifier","src":"5552:6:69"},{"name":"value3","nativeSrc":"5560:6:69","nodeType":"YulIdentifier","src":"5560:6:69"}]}]}]},"name":"abi_decode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptr","nativeSrc":"4701:966:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4816:9:69","nodeType":"YulTypedName","src":"4816:9:69","type":""},{"name":"dataEnd","nativeSrc":"4827:7:69","nodeType":"YulTypedName","src":"4827:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"4839:6:69","nodeType":"YulTypedName","src":"4839:6:69","type":""},{"name":"value1","nativeSrc":"4847:6:69","nodeType":"YulTypedName","src":"4847:6:69","type":""},{"name":"value2","nativeSrc":"4855:6:69","nodeType":"YulTypedName","src":"4855:6:69","type":""},{"name":"value3","nativeSrc":"4863:6:69","nodeType":"YulTypedName","src":"4863:6:69","type":""}],"src":"4701:966:69"},{"body":{"nativeSrc":"5790:648:69","nodeType":"YulBlock","src":"5790:648:69","statements":[{"body":{"nativeSrc":"5837:83:69","nodeType":"YulBlock","src":"5837:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"5839:77:69","nodeType":"YulIdentifier","src":"5839:77:69"},"nativeSrc":"5839:79:69","nodeType":"YulFunctionCall","src":"5839:79:69"},"nativeSrc":"5839:79:69","nodeType":"YulExpressionStatement","src":"5839:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"5811:7:69","nodeType":"YulIdentifier","src":"5811:7:69"},{"name":"headStart","nativeSrc":"5820:9:69","nodeType":"YulIdentifier","src":"5820:9:69"}],"functionName":{"name":"sub","nativeSrc":"5807:3:69","nodeType":"YulIdentifier","src":"5807:3:69"},"nativeSrc":"5807:23:69","nodeType":"YulFunctionCall","src":"5807:23:69"},{"kind":"number","nativeSrc":"5832:3:69","nodeType":"YulLiteral","src":"5832:3:69","type":"","value":"128"}],"functionName":{"name":"slt","nativeSrc":"5803:3:69","nodeType":"YulIdentifier","src":"5803:3:69"},"nativeSrc":"5803:33:69","nodeType":"YulFunctionCall","src":"5803:33:69"},"nativeSrc":"5800:120:69","nodeType":"YulIf","src":"5800:120:69"},{"nativeSrc":"5930:117:69","nodeType":"YulBlock","src":"5930:117:69","statements":[{"nativeSrc":"5945:15:69","nodeType":"YulVariableDeclaration","src":"5945:15:69","value":{"kind":"number","nativeSrc":"5959:1:69","nodeType":"YulLiteral","src":"5959:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"5949:6:69","nodeType":"YulTypedName","src":"5949:6:69","type":""}]},{"nativeSrc":"5974:63:69","nodeType":"YulAssignment","src":"5974:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6009:9:69","nodeType":"YulIdentifier","src":"6009:9:69"},{"name":"offset","nativeSrc":"6020:6:69","nodeType":"YulIdentifier","src":"6020:6:69"}],"functionName":{"name":"add","nativeSrc":"6005:3:69","nodeType":"YulIdentifier","src":"6005:3:69"},"nativeSrc":"6005:22:69","nodeType":"YulFunctionCall","src":"6005:22:69"},{"name":"dataEnd","nativeSrc":"6029:7:69","nodeType":"YulIdentifier","src":"6029:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"5984:20:69","nodeType":"YulIdentifier","src":"5984:20:69"},"nativeSrc":"5984:53:69","nodeType":"YulFunctionCall","src":"5984:53:69"},"variableNames":[{"name":"value0","nativeSrc":"5974:6:69","nodeType":"YulIdentifier","src":"5974:6:69"}]}]},{"nativeSrc":"6057:118:69","nodeType":"YulBlock","src":"6057:118:69","statements":[{"nativeSrc":"6072:16:69","nodeType":"YulVariableDeclaration","src":"6072:16:69","value":{"kind":"number","nativeSrc":"6086:2:69","nodeType":"YulLiteral","src":"6086:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"6076:6:69","nodeType":"YulTypedName","src":"6076:6:69","type":""}]},{"nativeSrc":"6102:63:69","nodeType":"YulAssignment","src":"6102:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6137:9:69","nodeType":"YulIdentifier","src":"6137:9:69"},{"name":"offset","nativeSrc":"6148:6:69","nodeType":"YulIdentifier","src":"6148:6:69"}],"functionName":{"name":"add","nativeSrc":"6133:3:69","nodeType":"YulIdentifier","src":"6133:3:69"},"nativeSrc":"6133:22:69","nodeType":"YulFunctionCall","src":"6133:22:69"},{"name":"dataEnd","nativeSrc":"6157:7:69","nodeType":"YulIdentifier","src":"6157:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"6112:20:69","nodeType":"YulIdentifier","src":"6112:20:69"},"nativeSrc":"6112:53:69","nodeType":"YulFunctionCall","src":"6112:53:69"},"variableNames":[{"name":"value1","nativeSrc":"6102:6:69","nodeType":"YulIdentifier","src":"6102:6:69"}]}]},{"nativeSrc":"6185:118:69","nodeType":"YulBlock","src":"6185:118:69","statements":[{"nativeSrc":"6200:16:69","nodeType":"YulVariableDeclaration","src":"6200:16:69","value":{"kind":"number","nativeSrc":"6214:2:69","nodeType":"YulLiteral","src":"6214:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"6204:6:69","nodeType":"YulTypedName","src":"6204:6:69","type":""}]},{"nativeSrc":"6230:63:69","nodeType":"YulAssignment","src":"6230:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6265:9:69","nodeType":"YulIdentifier","src":"6265:9:69"},{"name":"offset","nativeSrc":"6276:6:69","nodeType":"YulIdentifier","src":"6276:6:69"}],"functionName":{"name":"add","nativeSrc":"6261:3:69","nodeType":"YulIdentifier","src":"6261:3:69"},"nativeSrc":"6261:22:69","nodeType":"YulFunctionCall","src":"6261:22:69"},{"name":"dataEnd","nativeSrc":"6285:7:69","nodeType":"YulIdentifier","src":"6285:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"6240:20:69","nodeType":"YulIdentifier","src":"6240:20:69"},"nativeSrc":"6240:53:69","nodeType":"YulFunctionCall","src":"6240:53:69"},"variableNames":[{"name":"value2","nativeSrc":"6230:6:69","nodeType":"YulIdentifier","src":"6230:6:69"}]}]},{"nativeSrc":"6313:118:69","nodeType":"YulBlock","src":"6313:118:69","statements":[{"nativeSrc":"6328:16:69","nodeType":"YulVariableDeclaration","src":"6328:16:69","value":{"kind":"number","nativeSrc":"6342:2:69","nodeType":"YulLiteral","src":"6342:2:69","type":"","value":"96"},"variables":[{"name":"offset","nativeSrc":"6332:6:69","nodeType":"YulTypedName","src":"6332:6:69","type":""}]},{"nativeSrc":"6358:63:69","nodeType":"YulAssignment","src":"6358:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6393:9:69","nodeType":"YulIdentifier","src":"6393:9:69"},{"name":"offset","nativeSrc":"6404:6:69","nodeType":"YulIdentifier","src":"6404:6:69"}],"functionName":{"name":"add","nativeSrc":"6389:3:69","nodeType":"YulIdentifier","src":"6389:3:69"},"nativeSrc":"6389:22:69","nodeType":"YulFunctionCall","src":"6389:22:69"},{"name":"dataEnd","nativeSrc":"6413:7:69","nodeType":"YulIdentifier","src":"6413:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"6368:20:69","nodeType":"YulIdentifier","src":"6368:20:69"},"nativeSrc":"6368:53:69","nodeType":"YulFunctionCall","src":"6368:53:69"},"variableNames":[{"name":"value3","nativeSrc":"6358:6:69","nodeType":"YulIdentifier","src":"6358:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_address","nativeSrc":"5673:765:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5736:9:69","nodeType":"YulTypedName","src":"5736:9:69","type":""},{"name":"dataEnd","nativeSrc":"5747:7:69","nodeType":"YulTypedName","src":"5747:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"5759:6:69","nodeType":"YulTypedName","src":"5759:6:69","type":""},{"name":"value1","nativeSrc":"5767:6:69","nodeType":"YulTypedName","src":"5767:6:69","type":""},{"name":"value2","nativeSrc":"5775:6:69","nodeType":"YulTypedName","src":"5775:6:69","type":""},{"name":"value3","nativeSrc":"5783:6:69","nodeType":"YulTypedName","src":"5783:6:69","type":""}],"src":"5673:765:69"},{"body":{"nativeSrc":"6578:777:69","nodeType":"YulBlock","src":"6578:777:69","statements":[{"body":{"nativeSrc":"6625:83:69","nodeType":"YulBlock","src":"6625:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"6627:77:69","nodeType":"YulIdentifier","src":"6627:77:69"},"nativeSrc":"6627:79:69","nodeType":"YulFunctionCall","src":"6627:79:69"},"nativeSrc":"6627:79:69","nodeType":"YulExpressionStatement","src":"6627:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"6599:7:69","nodeType":"YulIdentifier","src":"6599:7:69"},{"name":"headStart","nativeSrc":"6608:9:69","nodeType":"YulIdentifier","src":"6608:9:69"}],"functionName":{"name":"sub","nativeSrc":"6595:3:69","nodeType":"YulIdentifier","src":"6595:3:69"},"nativeSrc":"6595:23:69","nodeType":"YulFunctionCall","src":"6595:23:69"},{"kind":"number","nativeSrc":"6620:3:69","nodeType":"YulLiteral","src":"6620:3:69","type":"","value":"160"}],"functionName":{"name":"slt","nativeSrc":"6591:3:69","nodeType":"YulIdentifier","src":"6591:3:69"},"nativeSrc":"6591:33:69","nodeType":"YulFunctionCall","src":"6591:33:69"},"nativeSrc":"6588:120:69","nodeType":"YulIf","src":"6588:120:69"},{"nativeSrc":"6718:117:69","nodeType":"YulBlock","src":"6718:117:69","statements":[{"nativeSrc":"6733:15:69","nodeType":"YulVariableDeclaration","src":"6733:15:69","value":{"kind":"number","nativeSrc":"6747:1:69","nodeType":"YulLiteral","src":"6747:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"6737:6:69","nodeType":"YulTypedName","src":"6737:6:69","type":""}]},{"nativeSrc":"6762:63:69","nodeType":"YulAssignment","src":"6762:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6797:9:69","nodeType":"YulIdentifier","src":"6797:9:69"},{"name":"offset","nativeSrc":"6808:6:69","nodeType":"YulIdentifier","src":"6808:6:69"}],"functionName":{"name":"add","nativeSrc":"6793:3:69","nodeType":"YulIdentifier","src":"6793:3:69"},"nativeSrc":"6793:22:69","nodeType":"YulFunctionCall","src":"6793:22:69"},{"name":"dataEnd","nativeSrc":"6817:7:69","nodeType":"YulIdentifier","src":"6817:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"6772:20:69","nodeType":"YulIdentifier","src":"6772:20:69"},"nativeSrc":"6772:53:69","nodeType":"YulFunctionCall","src":"6772:53:69"},"variableNames":[{"name":"value0","nativeSrc":"6762:6:69","nodeType":"YulIdentifier","src":"6762:6:69"}]}]},{"nativeSrc":"6845:118:69","nodeType":"YulBlock","src":"6845:118:69","statements":[{"nativeSrc":"6860:16:69","nodeType":"YulVariableDeclaration","src":"6860:16:69","value":{"kind":"number","nativeSrc":"6874:2:69","nodeType":"YulLiteral","src":"6874:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"6864:6:69","nodeType":"YulTypedName","src":"6864:6:69","type":""}]},{"nativeSrc":"6890:63:69","nodeType":"YulAssignment","src":"6890:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6925:9:69","nodeType":"YulIdentifier","src":"6925:9:69"},{"name":"offset","nativeSrc":"6936:6:69","nodeType":"YulIdentifier","src":"6936:6:69"}],"functionName":{"name":"add","nativeSrc":"6921:3:69","nodeType":"YulIdentifier","src":"6921:3:69"},"nativeSrc":"6921:22:69","nodeType":"YulFunctionCall","src":"6921:22:69"},{"name":"dataEnd","nativeSrc":"6945:7:69","nodeType":"YulIdentifier","src":"6945:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"6900:20:69","nodeType":"YulIdentifier","src":"6900:20:69"},"nativeSrc":"6900:53:69","nodeType":"YulFunctionCall","src":"6900:53:69"},"variableNames":[{"name":"value1","nativeSrc":"6890:6:69","nodeType":"YulIdentifier","src":"6890:6:69"}]}]},{"nativeSrc":"6973:118:69","nodeType":"YulBlock","src":"6973:118:69","statements":[{"nativeSrc":"6988:16:69","nodeType":"YulVariableDeclaration","src":"6988:16:69","value":{"kind":"number","nativeSrc":"7002:2:69","nodeType":"YulLiteral","src":"7002:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"6992:6:69","nodeType":"YulTypedName","src":"6992:6:69","type":""}]},{"nativeSrc":"7018:63:69","nodeType":"YulAssignment","src":"7018:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7053:9:69","nodeType":"YulIdentifier","src":"7053:9:69"},{"name":"offset","nativeSrc":"7064:6:69","nodeType":"YulIdentifier","src":"7064:6:69"}],"functionName":{"name":"add","nativeSrc":"7049:3:69","nodeType":"YulIdentifier","src":"7049:3:69"},"nativeSrc":"7049:22:69","nodeType":"YulFunctionCall","src":"7049:22:69"},{"name":"dataEnd","nativeSrc":"7073:7:69","nodeType":"YulIdentifier","src":"7073:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"7028:20:69","nodeType":"YulIdentifier","src":"7028:20:69"},"nativeSrc":"7028:53:69","nodeType":"YulFunctionCall","src":"7028:53:69"},"variableNames":[{"name":"value2","nativeSrc":"7018:6:69","nodeType":"YulIdentifier","src":"7018:6:69"}]}]},{"nativeSrc":"7101:118:69","nodeType":"YulBlock","src":"7101:118:69","statements":[{"nativeSrc":"7116:16:69","nodeType":"YulVariableDeclaration","src":"7116:16:69","value":{"kind":"number","nativeSrc":"7130:2:69","nodeType":"YulLiteral","src":"7130:2:69","type":"","value":"96"},"variables":[{"name":"offset","nativeSrc":"7120:6:69","nodeType":"YulTypedName","src":"7120:6:69","type":""}]},{"nativeSrc":"7146:63:69","nodeType":"YulAssignment","src":"7146:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7181:9:69","nodeType":"YulIdentifier","src":"7181:9:69"},{"name":"offset","nativeSrc":"7192:6:69","nodeType":"YulIdentifier","src":"7192:6:69"}],"functionName":{"name":"add","nativeSrc":"7177:3:69","nodeType":"YulIdentifier","src":"7177:3:69"},"nativeSrc":"7177:22:69","nodeType":"YulFunctionCall","src":"7177:22:69"},{"name":"dataEnd","nativeSrc":"7201:7:69","nodeType":"YulIdentifier","src":"7201:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"7156:20:69","nodeType":"YulIdentifier","src":"7156:20:69"},"nativeSrc":"7156:53:69","nodeType":"YulFunctionCall","src":"7156:53:69"},"variableNames":[{"name":"value3","nativeSrc":"7146:6:69","nodeType":"YulIdentifier","src":"7146:6:69"}]}]},{"nativeSrc":"7229:119:69","nodeType":"YulBlock","src":"7229:119:69","statements":[{"nativeSrc":"7244:17:69","nodeType":"YulVariableDeclaration","src":"7244:17:69","value":{"kind":"number","nativeSrc":"7258:3:69","nodeType":"YulLiteral","src":"7258:3:69","type":"","value":"128"},"variables":[{"name":"offset","nativeSrc":"7248:6:69","nodeType":"YulTypedName","src":"7248:6:69","type":""}]},{"nativeSrc":"7275:63:69","nodeType":"YulAssignment","src":"7275:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7310:9:69","nodeType":"YulIdentifier","src":"7310:9:69"},{"name":"offset","nativeSrc":"7321:6:69","nodeType":"YulIdentifier","src":"7321:6:69"}],"functionName":{"name":"add","nativeSrc":"7306:3:69","nodeType":"YulIdentifier","src":"7306:3:69"},"nativeSrc":"7306:22:69","nodeType":"YulFunctionCall","src":"7306:22:69"},{"name":"dataEnd","nativeSrc":"7330:7:69","nodeType":"YulIdentifier","src":"7330:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"7285:20:69","nodeType":"YulIdentifier","src":"7285:20:69"},"nativeSrc":"7285:53:69","nodeType":"YulFunctionCall","src":"7285:53:69"},"variableNames":[{"name":"value4","nativeSrc":"7275:6:69","nodeType":"YulIdentifier","src":"7275:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256","nativeSrc":"6444:911:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6516:9:69","nodeType":"YulTypedName","src":"6516:9:69","type":""},{"name":"dataEnd","nativeSrc":"6527:7:69","nodeType":"YulTypedName","src":"6527:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"6539:6:69","nodeType":"YulTypedName","src":"6539:6:69","type":""},{"name":"value1","nativeSrc":"6547:6:69","nodeType":"YulTypedName","src":"6547:6:69","type":""},{"name":"value2","nativeSrc":"6555:6:69","nodeType":"YulTypedName","src":"6555:6:69","type":""},{"name":"value3","nativeSrc":"6563:6:69","nodeType":"YulTypedName","src":"6563:6:69","type":""},{"name":"value4","nativeSrc":"6571:6:69","nodeType":"YulTypedName","src":"6571:6:69","type":""}],"src":"6444:911:69"},{"body":{"nativeSrc":"7483:478:69","nodeType":"YulBlock","src":"7483:478:69","statements":[{"body":{"nativeSrc":"7532:83:69","nodeType":"YulBlock","src":"7532:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"7534:77:69","nodeType":"YulIdentifier","src":"7534:77:69"},"nativeSrc":"7534:79:69","nodeType":"YulFunctionCall","src":"7534:79:69"},"nativeSrc":"7534:79:69","nodeType":"YulExpressionStatement","src":"7534:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"7511:6:69","nodeType":"YulIdentifier","src":"7511:6:69"},{"kind":"number","nativeSrc":"7519:4:69","nodeType":"YulLiteral","src":"7519:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"7507:3:69","nodeType":"YulIdentifier","src":"7507:3:69"},"nativeSrc":"7507:17:69","nodeType":"YulFunctionCall","src":"7507:17:69"},{"name":"end","nativeSrc":"7526:3:69","nodeType":"YulIdentifier","src":"7526:3:69"}],"functionName":{"name":"slt","nativeSrc":"7503:3:69","nodeType":"YulIdentifier","src":"7503:3:69"},"nativeSrc":"7503:27:69","nodeType":"YulFunctionCall","src":"7503:27:69"}],"functionName":{"name":"iszero","nativeSrc":"7496:6:69","nodeType":"YulIdentifier","src":"7496:6:69"},"nativeSrc":"7496:35:69","nodeType":"YulFunctionCall","src":"7496:35:69"},"nativeSrc":"7493:122:69","nodeType":"YulIf","src":"7493:122:69"},{"nativeSrc":"7624:30:69","nodeType":"YulAssignment","src":"7624:30:69","value":{"arguments":[{"name":"offset","nativeSrc":"7647:6:69","nodeType":"YulIdentifier","src":"7647:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"7634:12:69","nodeType":"YulIdentifier","src":"7634:12:69"},"nativeSrc":"7634:20:69","nodeType":"YulFunctionCall","src":"7634:20:69"},"variableNames":[{"name":"length","nativeSrc":"7624:6:69","nodeType":"YulIdentifier","src":"7624:6:69"}]},{"body":{"nativeSrc":"7697:83:69","nodeType":"YulBlock","src":"7697:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490","nativeSrc":"7699:77:69","nodeType":"YulIdentifier","src":"7699:77:69"},"nativeSrc":"7699:79:69","nodeType":"YulFunctionCall","src":"7699:79:69"},"nativeSrc":"7699:79:69","nodeType":"YulExpressionStatement","src":"7699:79:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"7669:6:69","nodeType":"YulIdentifier","src":"7669:6:69"},{"kind":"number","nativeSrc":"7677:18:69","nodeType":"YulLiteral","src":"7677:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"7666:2:69","nodeType":"YulIdentifier","src":"7666:2:69"},"nativeSrc":"7666:30:69","nodeType":"YulFunctionCall","src":"7666:30:69"},"nativeSrc":"7663:117:69","nodeType":"YulIf","src":"7663:117:69"},{"nativeSrc":"7789:29:69","nodeType":"YulAssignment","src":"7789:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"7805:6:69","nodeType":"YulIdentifier","src":"7805:6:69"},{"kind":"number","nativeSrc":"7813:4:69","nodeType":"YulLiteral","src":"7813:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"7801:3:69","nodeType":"YulIdentifier","src":"7801:3:69"},"nativeSrc":"7801:17:69","nodeType":"YulFunctionCall","src":"7801:17:69"},"variableNames":[{"name":"arrayPos","nativeSrc":"7789:8:69","nodeType":"YulIdentifier","src":"7789:8:69"}]},{"body":{"nativeSrc":"7872:83:69","nodeType":"YulBlock","src":"7872:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"7874:77:69","nodeType":"YulIdentifier","src":"7874:77:69"},"nativeSrc":"7874:79:69","nodeType":"YulFunctionCall","src":"7874:79:69"},"nativeSrc":"7874:79:69","nodeType":"YulExpressionStatement","src":"7874:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"arrayPos","nativeSrc":"7837:8:69","nodeType":"YulIdentifier","src":"7837:8:69"},{"arguments":[{"name":"length","nativeSrc":"7851:6:69","nodeType":"YulIdentifier","src":"7851:6:69"},{"kind":"number","nativeSrc":"7859:4:69","nodeType":"YulLiteral","src":"7859:4:69","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"7847:3:69","nodeType":"YulIdentifier","src":"7847:3:69"},"nativeSrc":"7847:17:69","nodeType":"YulFunctionCall","src":"7847:17:69"}],"functionName":{"name":"add","nativeSrc":"7833:3:69","nodeType":"YulIdentifier","src":"7833:3:69"},"nativeSrc":"7833:32:69","nodeType":"YulFunctionCall","src":"7833:32:69"},{"name":"end","nativeSrc":"7867:3:69","nodeType":"YulIdentifier","src":"7867:3:69"}],"functionName":{"name":"gt","nativeSrc":"7830:2:69","nodeType":"YulIdentifier","src":"7830:2:69"},"nativeSrc":"7830:41:69","nodeType":"YulFunctionCall","src":"7830:41:69"},"nativeSrc":"7827:128:69","nodeType":"YulIf","src":"7827:128:69"}]},"name":"abi_decode_t_array$_t_enum$_Action_$9148_$dyn_calldata_ptr","nativeSrc":"7382:579:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"7450:6:69","nodeType":"YulTypedName","src":"7450:6:69","type":""},{"name":"end","nativeSrc":"7458:3:69","nodeType":"YulTypedName","src":"7458:3:69","type":""}],"returnVariables":[{"name":"arrayPos","nativeSrc":"7466:8:69","nodeType":"YulTypedName","src":"7466:8:69","type":""},{"name":"length","nativeSrc":"7476:6:69","nodeType":"YulTypedName","src":"7476:6:69","type":""}],"src":"7382:579:69"},{"body":{"nativeSrc":"8007:76:69","nodeType":"YulBlock","src":"8007:76:69","statements":[{"body":{"nativeSrc":"8061:16:69","nodeType":"YulBlock","src":"8061:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"8070:1:69","nodeType":"YulLiteral","src":"8070:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"8073:1:69","nodeType":"YulLiteral","src":"8073:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"8063:6:69","nodeType":"YulIdentifier","src":"8063:6:69"},"nativeSrc":"8063:12:69","nodeType":"YulFunctionCall","src":"8063:12:69"},"nativeSrc":"8063:12:69","nodeType":"YulExpressionStatement","src":"8063:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"8030:5:69","nodeType":"YulIdentifier","src":"8030:5:69"},{"arguments":[{"name":"value","nativeSrc":"8052:5:69","nodeType":"YulIdentifier","src":"8052:5:69"}],"functionName":{"name":"cleanup_t_bool","nativeSrc":"8037:14:69","nodeType":"YulIdentifier","src":"8037:14:69"},"nativeSrc":"8037:21:69","nodeType":"YulFunctionCall","src":"8037:21:69"}],"functionName":{"name":"eq","nativeSrc":"8027:2:69","nodeType":"YulIdentifier","src":"8027:2:69"},"nativeSrc":"8027:32:69","nodeType":"YulFunctionCall","src":"8027:32:69"}],"functionName":{"name":"iszero","nativeSrc":"8020:6:69","nodeType":"YulIdentifier","src":"8020:6:69"},"nativeSrc":"8020:40:69","nodeType":"YulFunctionCall","src":"8020:40:69"},"nativeSrc":"8017:60:69","nodeType":"YulIf","src":"8017:60:69"}]},"name":"validator_revert_t_bool","nativeSrc":"7967:116:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"8000:5:69","nodeType":"YulTypedName","src":"8000:5:69","type":""}],"src":"7967:116:69"},{"body":{"nativeSrc":"8138:84:69","nodeType":"YulBlock","src":"8138:84:69","statements":[{"nativeSrc":"8148:29:69","nodeType":"YulAssignment","src":"8148:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"8170:6:69","nodeType":"YulIdentifier","src":"8170:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"8157:12:69","nodeType":"YulIdentifier","src":"8157:12:69"},"nativeSrc":"8157:20:69","nodeType":"YulFunctionCall","src":"8157:20:69"},"variableNames":[{"name":"value","nativeSrc":"8148:5:69","nodeType":"YulIdentifier","src":"8148:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"8210:5:69","nodeType":"YulIdentifier","src":"8210:5:69"}],"functionName":{"name":"validator_revert_t_bool","nativeSrc":"8186:23:69","nodeType":"YulIdentifier","src":"8186:23:69"},"nativeSrc":"8186:30:69","nodeType":"YulFunctionCall","src":"8186:30:69"},"nativeSrc":"8186:30:69","nodeType":"YulExpressionStatement","src":"8186:30:69"}]},"name":"abi_decode_t_bool","nativeSrc":"8089:133:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"8116:6:69","nodeType":"YulTypedName","src":"8116:6:69","type":""},{"name":"end","nativeSrc":"8124:3:69","nodeType":"YulTypedName","src":"8124:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"8132:5:69","nodeType":"YulTypedName","src":"8132:5:69","type":""}],"src":"8089:133:69"},{"body":{"nativeSrc":"8422:933:69","nodeType":"YulBlock","src":"8422:933:69","statements":[{"body":{"nativeSrc":"8468:83:69","nodeType":"YulBlock","src":"8468:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"8470:77:69","nodeType":"YulIdentifier","src":"8470:77:69"},"nativeSrc":"8470:79:69","nodeType":"YulFunctionCall","src":"8470:79:69"},"nativeSrc":"8470:79:69","nodeType":"YulExpressionStatement","src":"8470:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"8443:7:69","nodeType":"YulIdentifier","src":"8443:7:69"},{"name":"headStart","nativeSrc":"8452:9:69","nodeType":"YulIdentifier","src":"8452:9:69"}],"functionName":{"name":"sub","nativeSrc":"8439:3:69","nodeType":"YulIdentifier","src":"8439:3:69"},"nativeSrc":"8439:23:69","nodeType":"YulFunctionCall","src":"8439:23:69"},{"kind":"number","nativeSrc":"8464:2:69","nodeType":"YulLiteral","src":"8464:2:69","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"8435:3:69","nodeType":"YulIdentifier","src":"8435:3:69"},"nativeSrc":"8435:32:69","nodeType":"YulFunctionCall","src":"8435:32:69"},"nativeSrc":"8432:119:69","nodeType":"YulIf","src":"8432:119:69"},{"nativeSrc":"8561:328:69","nodeType":"YulBlock","src":"8561:328:69","statements":[{"nativeSrc":"8576:45:69","nodeType":"YulVariableDeclaration","src":"8576:45:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8607:9:69","nodeType":"YulIdentifier","src":"8607:9:69"},{"kind":"number","nativeSrc":"8618:1:69","nodeType":"YulLiteral","src":"8618:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"8603:3:69","nodeType":"YulIdentifier","src":"8603:3:69"},"nativeSrc":"8603:17:69","nodeType":"YulFunctionCall","src":"8603:17:69"}],"functionName":{"name":"calldataload","nativeSrc":"8590:12:69","nodeType":"YulIdentifier","src":"8590:12:69"},"nativeSrc":"8590:31:69","nodeType":"YulFunctionCall","src":"8590:31:69"},"variables":[{"name":"offset","nativeSrc":"8580:6:69","nodeType":"YulTypedName","src":"8580:6:69","type":""}]},{"body":{"nativeSrc":"8668:83:69","nodeType":"YulBlock","src":"8668:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"8670:77:69","nodeType":"YulIdentifier","src":"8670:77:69"},"nativeSrc":"8670:79:69","nodeType":"YulFunctionCall","src":"8670:79:69"},"nativeSrc":"8670:79:69","nodeType":"YulExpressionStatement","src":"8670:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"8640:6:69","nodeType":"YulIdentifier","src":"8640:6:69"},{"kind":"number","nativeSrc":"8648:18:69","nodeType":"YulLiteral","src":"8648:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"8637:2:69","nodeType":"YulIdentifier","src":"8637:2:69"},"nativeSrc":"8637:30:69","nodeType":"YulFunctionCall","src":"8637:30:69"},"nativeSrc":"8634:117:69","nodeType":"YulIf","src":"8634:117:69"},{"nativeSrc":"8765:114:69","nodeType":"YulAssignment","src":"8765:114:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8851:9:69","nodeType":"YulIdentifier","src":"8851:9:69"},{"name":"offset","nativeSrc":"8862:6:69","nodeType":"YulIdentifier","src":"8862:6:69"}],"functionName":{"name":"add","nativeSrc":"8847:3:69","nodeType":"YulIdentifier","src":"8847:3:69"},"nativeSrc":"8847:22:69","nodeType":"YulFunctionCall","src":"8847:22:69"},{"name":"dataEnd","nativeSrc":"8871:7:69","nodeType":"YulIdentifier","src":"8871:7:69"}],"functionName":{"name":"abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","nativeSrc":"8783:63:69","nodeType":"YulIdentifier","src":"8783:63:69"},"nativeSrc":"8783:96:69","nodeType":"YulFunctionCall","src":"8783:96:69"},"variableNames":[{"name":"value0","nativeSrc":"8765:6:69","nodeType":"YulIdentifier","src":"8765:6:69"},{"name":"value1","nativeSrc":"8773:6:69","nodeType":"YulIdentifier","src":"8773:6:69"}]}]},{"nativeSrc":"8899:324:69","nodeType":"YulBlock","src":"8899:324:69","statements":[{"nativeSrc":"8914:46:69","nodeType":"YulVariableDeclaration","src":"8914:46:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8945:9:69","nodeType":"YulIdentifier","src":"8945:9:69"},{"kind":"number","nativeSrc":"8956:2:69","nodeType":"YulLiteral","src":"8956:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8941:3:69","nodeType":"YulIdentifier","src":"8941:3:69"},"nativeSrc":"8941:18:69","nodeType":"YulFunctionCall","src":"8941:18:69"}],"functionName":{"name":"calldataload","nativeSrc":"8928:12:69","nodeType":"YulIdentifier","src":"8928:12:69"},"nativeSrc":"8928:32:69","nodeType":"YulFunctionCall","src":"8928:32:69"},"variables":[{"name":"offset","nativeSrc":"8918:6:69","nodeType":"YulTypedName","src":"8918:6:69","type":""}]},{"body":{"nativeSrc":"9007:83:69","nodeType":"YulBlock","src":"9007:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"9009:77:69","nodeType":"YulIdentifier","src":"9009:77:69"},"nativeSrc":"9009:79:69","nodeType":"YulFunctionCall","src":"9009:79:69"},"nativeSrc":"9009:79:69","nodeType":"YulExpressionStatement","src":"9009:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"8979:6:69","nodeType":"YulIdentifier","src":"8979:6:69"},{"kind":"number","nativeSrc":"8987:18:69","nodeType":"YulLiteral","src":"8987:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"8976:2:69","nodeType":"YulIdentifier","src":"8976:2:69"},"nativeSrc":"8976:30:69","nodeType":"YulFunctionCall","src":"8976:30:69"},"nativeSrc":"8973:117:69","nodeType":"YulIf","src":"8973:117:69"},{"nativeSrc":"9104:109:69","nodeType":"YulAssignment","src":"9104:109:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"9185:9:69","nodeType":"YulIdentifier","src":"9185:9:69"},{"name":"offset","nativeSrc":"9196:6:69","nodeType":"YulIdentifier","src":"9196:6:69"}],"functionName":{"name":"add","nativeSrc":"9181:3:69","nodeType":"YulIdentifier","src":"9181:3:69"},"nativeSrc":"9181:22:69","nodeType":"YulFunctionCall","src":"9181:22:69"},{"name":"dataEnd","nativeSrc":"9205:7:69","nodeType":"YulIdentifier","src":"9205:7:69"}],"functionName":{"name":"abi_decode_t_array$_t_enum$_Action_$9148_$dyn_calldata_ptr","nativeSrc":"9122:58:69","nodeType":"YulIdentifier","src":"9122:58:69"},"nativeSrc":"9122:91:69","nodeType":"YulFunctionCall","src":"9122:91:69"},"variableNames":[{"name":"value2","nativeSrc":"9104:6:69","nodeType":"YulIdentifier","src":"9104:6:69"},{"name":"value3","nativeSrc":"9112:6:69","nodeType":"YulIdentifier","src":"9112:6:69"}]}]},{"nativeSrc":"9233:115:69","nodeType":"YulBlock","src":"9233:115:69","statements":[{"nativeSrc":"9248:16:69","nodeType":"YulVariableDeclaration","src":"9248:16:69","value":{"kind":"number","nativeSrc":"9262:2:69","nodeType":"YulLiteral","src":"9262:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"9252:6:69","nodeType":"YulTypedName","src":"9252:6:69","type":""}]},{"nativeSrc":"9278:60:69","nodeType":"YulAssignment","src":"9278:60:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"9310:9:69","nodeType":"YulIdentifier","src":"9310:9:69"},{"name":"offset","nativeSrc":"9321:6:69","nodeType":"YulIdentifier","src":"9321:6:69"}],"functionName":{"name":"add","nativeSrc":"9306:3:69","nodeType":"YulIdentifier","src":"9306:3:69"},"nativeSrc":"9306:22:69","nodeType":"YulFunctionCall","src":"9306:22:69"},{"name":"dataEnd","nativeSrc":"9330:7:69","nodeType":"YulIdentifier","src":"9330:7:69"}],"functionName":{"name":"abi_decode_t_bool","nativeSrc":"9288:17:69","nodeType":"YulIdentifier","src":"9288:17:69"},"nativeSrc":"9288:50:69","nodeType":"YulFunctionCall","src":"9288:50:69"},"variableNames":[{"name":"value4","nativeSrc":"9278:6:69","nodeType":"YulIdentifier","src":"9278:6:69"}]}]}]},"name":"abi_decode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptrt_array$_t_enum$_Action_$9148_$dyn_calldata_ptrt_bool","nativeSrc":"8228:1127:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8360:9:69","nodeType":"YulTypedName","src":"8360:9:69","type":""},{"name":"dataEnd","nativeSrc":"8371:7:69","nodeType":"YulTypedName","src":"8371:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"8383:6:69","nodeType":"YulTypedName","src":"8383:6:69","type":""},{"name":"value1","nativeSrc":"8391:6:69","nodeType":"YulTypedName","src":"8391:6:69","type":""},{"name":"value2","nativeSrc":"8399:6:69","nodeType":"YulTypedName","src":"8399:6:69","type":""},{"name":"value3","nativeSrc":"8407:6:69","nodeType":"YulTypedName","src":"8407:6:69","type":""},{"name":"value4","nativeSrc":"8415:6:69","nodeType":"YulTypedName","src":"8415:6:69","type":""}],"src":"8228:1127:69"},{"body":{"nativeSrc":"9539:478:69","nodeType":"YulBlock","src":"9539:478:69","statements":[{"body":{"nativeSrc":"9588:83:69","nodeType":"YulBlock","src":"9588:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"9590:77:69","nodeType":"YulIdentifier","src":"9590:77:69"},"nativeSrc":"9590:79:69","nodeType":"YulFunctionCall","src":"9590:79:69"},"nativeSrc":"9590:79:69","nodeType":"YulExpressionStatement","src":"9590:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"9567:6:69","nodeType":"YulIdentifier","src":"9567:6:69"},{"kind":"number","nativeSrc":"9575:4:69","nodeType":"YulLiteral","src":"9575:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"9563:3:69","nodeType":"YulIdentifier","src":"9563:3:69"},"nativeSrc":"9563:17:69","nodeType":"YulFunctionCall","src":"9563:17:69"},{"name":"end","nativeSrc":"9582:3:69","nodeType":"YulIdentifier","src":"9582:3:69"}],"functionName":{"name":"slt","nativeSrc":"9559:3:69","nodeType":"YulIdentifier","src":"9559:3:69"},"nativeSrc":"9559:27:69","nodeType":"YulFunctionCall","src":"9559:27:69"}],"functionName":{"name":"iszero","nativeSrc":"9552:6:69","nodeType":"YulIdentifier","src":"9552:6:69"},"nativeSrc":"9552:35:69","nodeType":"YulFunctionCall","src":"9552:35:69"},"nativeSrc":"9549:122:69","nodeType":"YulIf","src":"9549:122:69"},{"nativeSrc":"9680:30:69","nodeType":"YulAssignment","src":"9680:30:69","value":{"arguments":[{"name":"offset","nativeSrc":"9703:6:69","nodeType":"YulIdentifier","src":"9703:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"9690:12:69","nodeType":"YulIdentifier","src":"9690:12:69"},"nativeSrc":"9690:20:69","nodeType":"YulFunctionCall","src":"9690:20:69"},"variableNames":[{"name":"length","nativeSrc":"9680:6:69","nodeType":"YulIdentifier","src":"9680:6:69"}]},{"body":{"nativeSrc":"9753:83:69","nodeType":"YulBlock","src":"9753:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490","nativeSrc":"9755:77:69","nodeType":"YulIdentifier","src":"9755:77:69"},"nativeSrc":"9755:79:69","nodeType":"YulFunctionCall","src":"9755:79:69"},"nativeSrc":"9755:79:69","nodeType":"YulExpressionStatement","src":"9755:79:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"9725:6:69","nodeType":"YulIdentifier","src":"9725:6:69"},{"kind":"number","nativeSrc":"9733:18:69","nodeType":"YulLiteral","src":"9733:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"9722:2:69","nodeType":"YulIdentifier","src":"9722:2:69"},"nativeSrc":"9722:30:69","nodeType":"YulFunctionCall","src":"9722:30:69"},"nativeSrc":"9719:117:69","nodeType":"YulIf","src":"9719:117:69"},{"nativeSrc":"9845:29:69","nodeType":"YulAssignment","src":"9845:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"9861:6:69","nodeType":"YulIdentifier","src":"9861:6:69"},{"kind":"number","nativeSrc":"9869:4:69","nodeType":"YulLiteral","src":"9869:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"9857:3:69","nodeType":"YulIdentifier","src":"9857:3:69"},"nativeSrc":"9857:17:69","nodeType":"YulFunctionCall","src":"9857:17:69"},"variableNames":[{"name":"arrayPos","nativeSrc":"9845:8:69","nodeType":"YulIdentifier","src":"9845:8:69"}]},{"body":{"nativeSrc":"9928:83:69","nodeType":"YulBlock","src":"9928:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"9930:77:69","nodeType":"YulIdentifier","src":"9930:77:69"},"nativeSrc":"9930:79:69","nodeType":"YulFunctionCall","src":"9930:79:69"},"nativeSrc":"9930:79:69","nodeType":"YulExpressionStatement","src":"9930:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"arrayPos","nativeSrc":"9893:8:69","nodeType":"YulIdentifier","src":"9893:8:69"},{"arguments":[{"name":"length","nativeSrc":"9907:6:69","nodeType":"YulIdentifier","src":"9907:6:69"},{"kind":"number","nativeSrc":"9915:4:69","nodeType":"YulLiteral","src":"9915:4:69","type":"","value":"0x60"}],"functionName":{"name":"mul","nativeSrc":"9903:3:69","nodeType":"YulIdentifier","src":"9903:3:69"},"nativeSrc":"9903:17:69","nodeType":"YulFunctionCall","src":"9903:17:69"}],"functionName":{"name":"add","nativeSrc":"9889:3:69","nodeType":"YulIdentifier","src":"9889:3:69"},"nativeSrc":"9889:32:69","nodeType":"YulFunctionCall","src":"9889:32:69"},{"name":"end","nativeSrc":"9923:3:69","nodeType":"YulIdentifier","src":"9923:3:69"}],"functionName":{"name":"gt","nativeSrc":"9886:2:69","nodeType":"YulIdentifier","src":"9886:2:69"},"nativeSrc":"9886:41:69","nodeType":"YulFunctionCall","src":"9886:41:69"},"nativeSrc":"9883:128:69","nodeType":"YulIf","src":"9883:128:69"}]},"name":"abi_decode_t_array$_t_struct$_LiquidationOrder_$9453_calldata_ptr_$dyn_calldata_ptr","nativeSrc":"9413:604:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"9506:6:69","nodeType":"YulTypedName","src":"9506:6:69","type":""},{"name":"end","nativeSrc":"9514:3:69","nodeType":"YulTypedName","src":"9514:3:69","type":""}],"returnVariables":[{"name":"arrayPos","nativeSrc":"9522:8:69","nodeType":"YulTypedName","src":"9522:8:69","type":""},{"name":"length","nativeSrc":"9532:6:69","nodeType":"YulTypedName","src":"9532:6:69","type":""}],"src":"9413:604:69"},{"body":{"nativeSrc":"10177:622:69","nodeType":"YulBlock","src":"10177:622:69","statements":[{"body":{"nativeSrc":"10223:83:69","nodeType":"YulBlock","src":"10223:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"10225:77:69","nodeType":"YulIdentifier","src":"10225:77:69"},"nativeSrc":"10225:79:69","nodeType":"YulFunctionCall","src":"10225:79:69"},"nativeSrc":"10225:79:69","nodeType":"YulExpressionStatement","src":"10225:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"10198:7:69","nodeType":"YulIdentifier","src":"10198:7:69"},{"name":"headStart","nativeSrc":"10207:9:69","nodeType":"YulIdentifier","src":"10207:9:69"}],"functionName":{"name":"sub","nativeSrc":"10194:3:69","nodeType":"YulIdentifier","src":"10194:3:69"},"nativeSrc":"10194:23:69","nodeType":"YulFunctionCall","src":"10194:23:69"},{"kind":"number","nativeSrc":"10219:2:69","nodeType":"YulLiteral","src":"10219:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"10190:3:69","nodeType":"YulIdentifier","src":"10190:3:69"},"nativeSrc":"10190:32:69","nodeType":"YulFunctionCall","src":"10190:32:69"},"nativeSrc":"10187:119:69","nodeType":"YulIf","src":"10187:119:69"},{"nativeSrc":"10316:117:69","nodeType":"YulBlock","src":"10316:117:69","statements":[{"nativeSrc":"10331:15:69","nodeType":"YulVariableDeclaration","src":"10331:15:69","value":{"kind":"number","nativeSrc":"10345:1:69","nodeType":"YulLiteral","src":"10345:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"10335:6:69","nodeType":"YulTypedName","src":"10335:6:69","type":""}]},{"nativeSrc":"10360:63:69","nodeType":"YulAssignment","src":"10360:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10395:9:69","nodeType":"YulIdentifier","src":"10395:9:69"},{"name":"offset","nativeSrc":"10406:6:69","nodeType":"YulIdentifier","src":"10406:6:69"}],"functionName":{"name":"add","nativeSrc":"10391:3:69","nodeType":"YulIdentifier","src":"10391:3:69"},"nativeSrc":"10391:22:69","nodeType":"YulFunctionCall","src":"10391:22:69"},{"name":"dataEnd","nativeSrc":"10415:7:69","nodeType":"YulIdentifier","src":"10415:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"10370:20:69","nodeType":"YulIdentifier","src":"10370:20:69"},"nativeSrc":"10370:53:69","nodeType":"YulFunctionCall","src":"10370:53:69"},"variableNames":[{"name":"value0","nativeSrc":"10360:6:69","nodeType":"YulIdentifier","src":"10360:6:69"}]}]},{"nativeSrc":"10443:349:69","nodeType":"YulBlock","src":"10443:349:69","statements":[{"nativeSrc":"10458:46:69","nodeType":"YulVariableDeclaration","src":"10458:46:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10489:9:69","nodeType":"YulIdentifier","src":"10489:9:69"},{"kind":"number","nativeSrc":"10500:2:69","nodeType":"YulLiteral","src":"10500:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"10485:3:69","nodeType":"YulIdentifier","src":"10485:3:69"},"nativeSrc":"10485:18:69","nodeType":"YulFunctionCall","src":"10485:18:69"}],"functionName":{"name":"calldataload","nativeSrc":"10472:12:69","nodeType":"YulIdentifier","src":"10472:12:69"},"nativeSrc":"10472:32:69","nodeType":"YulFunctionCall","src":"10472:32:69"},"variables":[{"name":"offset","nativeSrc":"10462:6:69","nodeType":"YulTypedName","src":"10462:6:69","type":""}]},{"body":{"nativeSrc":"10551:83:69","nodeType":"YulBlock","src":"10551:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"10553:77:69","nodeType":"YulIdentifier","src":"10553:77:69"},"nativeSrc":"10553:79:69","nodeType":"YulFunctionCall","src":"10553:79:69"},"nativeSrc":"10553:79:69","nodeType":"YulExpressionStatement","src":"10553:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"10523:6:69","nodeType":"YulIdentifier","src":"10523:6:69"},{"kind":"number","nativeSrc":"10531:18:69","nodeType":"YulLiteral","src":"10531:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"10520:2:69","nodeType":"YulIdentifier","src":"10520:2:69"},"nativeSrc":"10520:30:69","nodeType":"YulFunctionCall","src":"10520:30:69"},"nativeSrc":"10517:117:69","nodeType":"YulIf","src":"10517:117:69"},{"nativeSrc":"10648:134:69","nodeType":"YulAssignment","src":"10648:134:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10754:9:69","nodeType":"YulIdentifier","src":"10754:9:69"},{"name":"offset","nativeSrc":"10765:6:69","nodeType":"YulIdentifier","src":"10765:6:69"}],"functionName":{"name":"add","nativeSrc":"10750:3:69","nodeType":"YulIdentifier","src":"10750:3:69"},"nativeSrc":"10750:22:69","nodeType":"YulFunctionCall","src":"10750:22:69"},{"name":"dataEnd","nativeSrc":"10774:7:69","nodeType":"YulIdentifier","src":"10774:7:69"}],"functionName":{"name":"abi_decode_t_array$_t_struct$_LiquidationOrder_$9453_calldata_ptr_$dyn_calldata_ptr","nativeSrc":"10666:83:69","nodeType":"YulIdentifier","src":"10666:83:69"},"nativeSrc":"10666:116:69","nodeType":"YulFunctionCall","src":"10666:116:69"},"variableNames":[{"name":"value1","nativeSrc":"10648:6:69","nodeType":"YulIdentifier","src":"10648:6:69"},{"name":"value2","nativeSrc":"10656:6:69","nodeType":"YulIdentifier","src":"10656:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_array$_t_struct$_LiquidationOrder_$9453_calldata_ptr_$dyn_calldata_ptr","nativeSrc":"10023:776:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"10131:9:69","nodeType":"YulTypedName","src":"10131:9:69","type":""},{"name":"dataEnd","nativeSrc":"10142:7:69","nodeType":"YulTypedName","src":"10142:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"10154:6:69","nodeType":"YulTypedName","src":"10154:6:69","type":""},{"name":"value1","nativeSrc":"10162:6:69","nodeType":"YulTypedName","src":"10162:6:69","type":""},{"name":"value2","nativeSrc":"10170:6:69","nodeType":"YulTypedName","src":"10170:6:69","type":""}],"src":"10023:776:69"},{"body":{"nativeSrc":"10866:51:69","nodeType":"YulBlock","src":"10866:51:69","statements":[{"nativeSrc":"10876:35:69","nodeType":"YulAssignment","src":"10876:35:69","value":{"arguments":[{"name":"value","nativeSrc":"10905:5:69","nodeType":"YulIdentifier","src":"10905:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"10887:17:69","nodeType":"YulIdentifier","src":"10887:17:69"},"nativeSrc":"10887:24:69","nodeType":"YulFunctionCall","src":"10887:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"10876:7:69","nodeType":"YulIdentifier","src":"10876:7:69"}]}]},"name":"cleanup_t_contract$_VToken_$15506","nativeSrc":"10805:112:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"10848:5:69","nodeType":"YulTypedName","src":"10848:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"10858:7:69","nodeType":"YulTypedName","src":"10858:7:69","type":""}],"src":"10805:112:69"},{"body":{"nativeSrc":"10982:95:69","nodeType":"YulBlock","src":"10982:95:69","statements":[{"body":{"nativeSrc":"11055:16:69","nodeType":"YulBlock","src":"11055:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"11064:1:69","nodeType":"YulLiteral","src":"11064:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"11067:1:69","nodeType":"YulLiteral","src":"11067:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"11057:6:69","nodeType":"YulIdentifier","src":"11057:6:69"},"nativeSrc":"11057:12:69","nodeType":"YulFunctionCall","src":"11057:12:69"},"nativeSrc":"11057:12:69","nodeType":"YulExpressionStatement","src":"11057:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"11005:5:69","nodeType":"YulIdentifier","src":"11005:5:69"},{"arguments":[{"name":"value","nativeSrc":"11046:5:69","nodeType":"YulIdentifier","src":"11046:5:69"}],"functionName":{"name":"cleanup_t_contract$_VToken_$15506","nativeSrc":"11012:33:69","nodeType":"YulIdentifier","src":"11012:33:69"},"nativeSrc":"11012:40:69","nodeType":"YulFunctionCall","src":"11012:40:69"}],"functionName":{"name":"eq","nativeSrc":"11002:2:69","nodeType":"YulIdentifier","src":"11002:2:69"},"nativeSrc":"11002:51:69","nodeType":"YulFunctionCall","src":"11002:51:69"}],"functionName":{"name":"iszero","nativeSrc":"10995:6:69","nodeType":"YulIdentifier","src":"10995:6:69"},"nativeSrc":"10995:59:69","nodeType":"YulFunctionCall","src":"10995:59:69"},"nativeSrc":"10992:79:69","nodeType":"YulIf","src":"10992:79:69"}]},"name":"validator_revert_t_contract$_VToken_$15506","nativeSrc":"10923:154:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"10975:5:69","nodeType":"YulTypedName","src":"10975:5:69","type":""}],"src":"10923:154:69"},{"body":{"nativeSrc":"11151:103:69","nodeType":"YulBlock","src":"11151:103:69","statements":[{"nativeSrc":"11161:29:69","nodeType":"YulAssignment","src":"11161:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"11183:6:69","nodeType":"YulIdentifier","src":"11183:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"11170:12:69","nodeType":"YulIdentifier","src":"11170:12:69"},"nativeSrc":"11170:20:69","nodeType":"YulFunctionCall","src":"11170:20:69"},"variableNames":[{"name":"value","nativeSrc":"11161:5:69","nodeType":"YulIdentifier","src":"11161:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"11242:5:69","nodeType":"YulIdentifier","src":"11242:5:69"}],"functionName":{"name":"validator_revert_t_contract$_VToken_$15506","nativeSrc":"11199:42:69","nodeType":"YulIdentifier","src":"11199:42:69"},"nativeSrc":"11199:49:69","nodeType":"YulFunctionCall","src":"11199:49:69"},"nativeSrc":"11199:49:69","nodeType":"YulExpressionStatement","src":"11199:49:69"}]},"name":"abi_decode_t_contract$_VToken_$15506","nativeSrc":"11083:171:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"11129:6:69","nodeType":"YulTypedName","src":"11129:6:69","type":""},{"name":"end","nativeSrc":"11137:3:69","nodeType":"YulTypedName","src":"11137:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"11145:5:69","nodeType":"YulTypedName","src":"11145:5:69","type":""}],"src":"11083:171:69"},{"body":{"nativeSrc":"11342:279:69","nodeType":"YulBlock","src":"11342:279:69","statements":[{"body":{"nativeSrc":"11388:83:69","nodeType":"YulBlock","src":"11388:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"11390:77:69","nodeType":"YulIdentifier","src":"11390:77:69"},"nativeSrc":"11390:79:69","nodeType":"YulFunctionCall","src":"11390:79:69"},"nativeSrc":"11390:79:69","nodeType":"YulExpressionStatement","src":"11390:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"11363:7:69","nodeType":"YulIdentifier","src":"11363:7:69"},{"name":"headStart","nativeSrc":"11372:9:69","nodeType":"YulIdentifier","src":"11372:9:69"}],"functionName":{"name":"sub","nativeSrc":"11359:3:69","nodeType":"YulIdentifier","src":"11359:3:69"},"nativeSrc":"11359:23:69","nodeType":"YulFunctionCall","src":"11359:23:69"},{"kind":"number","nativeSrc":"11384:2:69","nodeType":"YulLiteral","src":"11384:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"11355:3:69","nodeType":"YulIdentifier","src":"11355:3:69"},"nativeSrc":"11355:32:69","nodeType":"YulFunctionCall","src":"11355:32:69"},"nativeSrc":"11352:119:69","nodeType":"YulIf","src":"11352:119:69"},{"nativeSrc":"11481:133:69","nodeType":"YulBlock","src":"11481:133:69","statements":[{"nativeSrc":"11496:15:69","nodeType":"YulVariableDeclaration","src":"11496:15:69","value":{"kind":"number","nativeSrc":"11510:1:69","nodeType":"YulLiteral","src":"11510:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"11500:6:69","nodeType":"YulTypedName","src":"11500:6:69","type":""}]},{"nativeSrc":"11525:79:69","nodeType":"YulAssignment","src":"11525:79:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"11576:9:69","nodeType":"YulIdentifier","src":"11576:9:69"},{"name":"offset","nativeSrc":"11587:6:69","nodeType":"YulIdentifier","src":"11587:6:69"}],"functionName":{"name":"add","nativeSrc":"11572:3:69","nodeType":"YulIdentifier","src":"11572:3:69"},"nativeSrc":"11572:22:69","nodeType":"YulFunctionCall","src":"11572:22:69"},{"name":"dataEnd","nativeSrc":"11596:7:69","nodeType":"YulIdentifier","src":"11596:7:69"}],"functionName":{"name":"abi_decode_t_contract$_VToken_$15506","nativeSrc":"11535:36:69","nodeType":"YulIdentifier","src":"11535:36:69"},"nativeSrc":"11535:69:69","nodeType":"YulFunctionCall","src":"11535:69:69"},"variableNames":[{"name":"value0","nativeSrc":"11525:6:69","nodeType":"YulIdentifier","src":"11525:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_VToken_$15506","nativeSrc":"11260:361:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"11312:9:69","nodeType":"YulTypedName","src":"11312:9:69","type":""},{"name":"dataEnd","nativeSrc":"11323:7:69","nodeType":"YulTypedName","src":"11323:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"11335:6:69","nodeType":"YulTypedName","src":"11335:6:69","type":""}],"src":"11260:361:69"},{"body":{"nativeSrc":"11744:648:69","nodeType":"YulBlock","src":"11744:648:69","statements":[{"body":{"nativeSrc":"11791:83:69","nodeType":"YulBlock","src":"11791:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"11793:77:69","nodeType":"YulIdentifier","src":"11793:77:69"},"nativeSrc":"11793:79:69","nodeType":"YulFunctionCall","src":"11793:79:69"},"nativeSrc":"11793:79:69","nodeType":"YulExpressionStatement","src":"11793:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"11765:7:69","nodeType":"YulIdentifier","src":"11765:7:69"},{"name":"headStart","nativeSrc":"11774:9:69","nodeType":"YulIdentifier","src":"11774:9:69"}],"functionName":{"name":"sub","nativeSrc":"11761:3:69","nodeType":"YulIdentifier","src":"11761:3:69"},"nativeSrc":"11761:23:69","nodeType":"YulFunctionCall","src":"11761:23:69"},{"kind":"number","nativeSrc":"11786:3:69","nodeType":"YulLiteral","src":"11786:3:69","type":"","value":"128"}],"functionName":{"name":"slt","nativeSrc":"11757:3:69","nodeType":"YulIdentifier","src":"11757:3:69"},"nativeSrc":"11757:33:69","nodeType":"YulFunctionCall","src":"11757:33:69"},"nativeSrc":"11754:120:69","nodeType":"YulIf","src":"11754:120:69"},{"nativeSrc":"11884:117:69","nodeType":"YulBlock","src":"11884:117:69","statements":[{"nativeSrc":"11899:15:69","nodeType":"YulVariableDeclaration","src":"11899:15:69","value":{"kind":"number","nativeSrc":"11913:1:69","nodeType":"YulLiteral","src":"11913:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"11903:6:69","nodeType":"YulTypedName","src":"11903:6:69","type":""}]},{"nativeSrc":"11928:63:69","nodeType":"YulAssignment","src":"11928:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"11963:9:69","nodeType":"YulIdentifier","src":"11963:9:69"},{"name":"offset","nativeSrc":"11974:6:69","nodeType":"YulIdentifier","src":"11974:6:69"}],"functionName":{"name":"add","nativeSrc":"11959:3:69","nodeType":"YulIdentifier","src":"11959:3:69"},"nativeSrc":"11959:22:69","nodeType":"YulFunctionCall","src":"11959:22:69"},{"name":"dataEnd","nativeSrc":"11983:7:69","nodeType":"YulIdentifier","src":"11983:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"11938:20:69","nodeType":"YulIdentifier","src":"11938:20:69"},"nativeSrc":"11938:53:69","nodeType":"YulFunctionCall","src":"11938:53:69"},"variableNames":[{"name":"value0","nativeSrc":"11928:6:69","nodeType":"YulIdentifier","src":"11928:6:69"}]}]},{"nativeSrc":"12011:118:69","nodeType":"YulBlock","src":"12011:118:69","statements":[{"nativeSrc":"12026:16:69","nodeType":"YulVariableDeclaration","src":"12026:16:69","value":{"kind":"number","nativeSrc":"12040:2:69","nodeType":"YulLiteral","src":"12040:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"12030:6:69","nodeType":"YulTypedName","src":"12030:6:69","type":""}]},{"nativeSrc":"12056:63:69","nodeType":"YulAssignment","src":"12056:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"12091:9:69","nodeType":"YulIdentifier","src":"12091:9:69"},{"name":"offset","nativeSrc":"12102:6:69","nodeType":"YulIdentifier","src":"12102:6:69"}],"functionName":{"name":"add","nativeSrc":"12087:3:69","nodeType":"YulIdentifier","src":"12087:3:69"},"nativeSrc":"12087:22:69","nodeType":"YulFunctionCall","src":"12087:22:69"},{"name":"dataEnd","nativeSrc":"12111:7:69","nodeType":"YulIdentifier","src":"12111:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"12066:20:69","nodeType":"YulIdentifier","src":"12066:20:69"},"nativeSrc":"12066:53:69","nodeType":"YulFunctionCall","src":"12066:53:69"},"variableNames":[{"name":"value1","nativeSrc":"12056:6:69","nodeType":"YulIdentifier","src":"12056:6:69"}]}]},{"nativeSrc":"12139:118:69","nodeType":"YulBlock","src":"12139:118:69","statements":[{"nativeSrc":"12154:16:69","nodeType":"YulVariableDeclaration","src":"12154:16:69","value":{"kind":"number","nativeSrc":"12168:2:69","nodeType":"YulLiteral","src":"12168:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"12158:6:69","nodeType":"YulTypedName","src":"12158:6:69","type":""}]},{"nativeSrc":"12184:63:69","nodeType":"YulAssignment","src":"12184:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"12219:9:69","nodeType":"YulIdentifier","src":"12219:9:69"},{"name":"offset","nativeSrc":"12230:6:69","nodeType":"YulIdentifier","src":"12230:6:69"}],"functionName":{"name":"add","nativeSrc":"12215:3:69","nodeType":"YulIdentifier","src":"12215:3:69"},"nativeSrc":"12215:22:69","nodeType":"YulFunctionCall","src":"12215:22:69"},{"name":"dataEnd","nativeSrc":"12239:7:69","nodeType":"YulIdentifier","src":"12239:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"12194:20:69","nodeType":"YulIdentifier","src":"12194:20:69"},"nativeSrc":"12194:53:69","nodeType":"YulFunctionCall","src":"12194:53:69"},"variableNames":[{"name":"value2","nativeSrc":"12184:6:69","nodeType":"YulIdentifier","src":"12184:6:69"}]}]},{"nativeSrc":"12267:118:69","nodeType":"YulBlock","src":"12267:118:69","statements":[{"nativeSrc":"12282:16:69","nodeType":"YulVariableDeclaration","src":"12282:16:69","value":{"kind":"number","nativeSrc":"12296:2:69","nodeType":"YulLiteral","src":"12296:2:69","type":"","value":"96"},"variables":[{"name":"offset","nativeSrc":"12286:6:69","nodeType":"YulTypedName","src":"12286:6:69","type":""}]},{"nativeSrc":"12312:63:69","nodeType":"YulAssignment","src":"12312:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"12347:9:69","nodeType":"YulIdentifier","src":"12347:9:69"},{"name":"offset","nativeSrc":"12358:6:69","nodeType":"YulIdentifier","src":"12358:6:69"}],"functionName":{"name":"add","nativeSrc":"12343:3:69","nodeType":"YulIdentifier","src":"12343:3:69"},"nativeSrc":"12343:22:69","nodeType":"YulFunctionCall","src":"12343:22:69"},{"name":"dataEnd","nativeSrc":"12367:7:69","nodeType":"YulIdentifier","src":"12367:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"12322:20:69","nodeType":"YulIdentifier","src":"12322:20:69"},"nativeSrc":"12322:53:69","nodeType":"YulFunctionCall","src":"12322:53:69"},"variableNames":[{"name":"value3","nativeSrc":"12312:6:69","nodeType":"YulIdentifier","src":"12312:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256","nativeSrc":"11627:765:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"11690:9:69","nodeType":"YulTypedName","src":"11690:9:69","type":""},{"name":"dataEnd","nativeSrc":"11701:7:69","nodeType":"YulTypedName","src":"11701:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"11713:6:69","nodeType":"YulTypedName","src":"11713:6:69","type":""},{"name":"value1","nativeSrc":"11721:6:69","nodeType":"YulTypedName","src":"11721:6:69","type":""},{"name":"value2","nativeSrc":"11729:6:69","nodeType":"YulTypedName","src":"11729:6:69","type":""},{"name":"value3","nativeSrc":"11737:6:69","nodeType":"YulTypedName","src":"11737:6:69","type":""}],"src":"11627:765:69"},{"body":{"nativeSrc":"12549:906:69","nodeType":"YulBlock","src":"12549:906:69","statements":[{"body":{"nativeSrc":"12596:83:69","nodeType":"YulBlock","src":"12596:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"12598:77:69","nodeType":"YulIdentifier","src":"12598:77:69"},"nativeSrc":"12598:79:69","nodeType":"YulFunctionCall","src":"12598:79:69"},"nativeSrc":"12598:79:69","nodeType":"YulExpressionStatement","src":"12598:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"12570:7:69","nodeType":"YulIdentifier","src":"12570:7:69"},{"name":"headStart","nativeSrc":"12579:9:69","nodeType":"YulIdentifier","src":"12579:9:69"}],"functionName":{"name":"sub","nativeSrc":"12566:3:69","nodeType":"YulIdentifier","src":"12566:3:69"},"nativeSrc":"12566:23:69","nodeType":"YulFunctionCall","src":"12566:23:69"},{"kind":"number","nativeSrc":"12591:3:69","nodeType":"YulLiteral","src":"12591:3:69","type":"","value":"192"}],"functionName":{"name":"slt","nativeSrc":"12562:3:69","nodeType":"YulIdentifier","src":"12562:3:69"},"nativeSrc":"12562:33:69","nodeType":"YulFunctionCall","src":"12562:33:69"},"nativeSrc":"12559:120:69","nodeType":"YulIf","src":"12559:120:69"},{"nativeSrc":"12689:117:69","nodeType":"YulBlock","src":"12689:117:69","statements":[{"nativeSrc":"12704:15:69","nodeType":"YulVariableDeclaration","src":"12704:15:69","value":{"kind":"number","nativeSrc":"12718:1:69","nodeType":"YulLiteral","src":"12718:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"12708:6:69","nodeType":"YulTypedName","src":"12708:6:69","type":""}]},{"nativeSrc":"12733:63:69","nodeType":"YulAssignment","src":"12733:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"12768:9:69","nodeType":"YulIdentifier","src":"12768:9:69"},{"name":"offset","nativeSrc":"12779:6:69","nodeType":"YulIdentifier","src":"12779:6:69"}],"functionName":{"name":"add","nativeSrc":"12764:3:69","nodeType":"YulIdentifier","src":"12764:3:69"},"nativeSrc":"12764:22:69","nodeType":"YulFunctionCall","src":"12764:22:69"},{"name":"dataEnd","nativeSrc":"12788:7:69","nodeType":"YulIdentifier","src":"12788:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"12743:20:69","nodeType":"YulIdentifier","src":"12743:20:69"},"nativeSrc":"12743:53:69","nodeType":"YulFunctionCall","src":"12743:53:69"},"variableNames":[{"name":"value0","nativeSrc":"12733:6:69","nodeType":"YulIdentifier","src":"12733:6:69"}]}]},{"nativeSrc":"12816:118:69","nodeType":"YulBlock","src":"12816:118:69","statements":[{"nativeSrc":"12831:16:69","nodeType":"YulVariableDeclaration","src":"12831:16:69","value":{"kind":"number","nativeSrc":"12845:2:69","nodeType":"YulLiteral","src":"12845:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"12835:6:69","nodeType":"YulTypedName","src":"12835:6:69","type":""}]},{"nativeSrc":"12861:63:69","nodeType":"YulAssignment","src":"12861:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"12896:9:69","nodeType":"YulIdentifier","src":"12896:9:69"},{"name":"offset","nativeSrc":"12907:6:69","nodeType":"YulIdentifier","src":"12907:6:69"}],"functionName":{"name":"add","nativeSrc":"12892:3:69","nodeType":"YulIdentifier","src":"12892:3:69"},"nativeSrc":"12892:22:69","nodeType":"YulFunctionCall","src":"12892:22:69"},{"name":"dataEnd","nativeSrc":"12916:7:69","nodeType":"YulIdentifier","src":"12916:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"12871:20:69","nodeType":"YulIdentifier","src":"12871:20:69"},"nativeSrc":"12871:53:69","nodeType":"YulFunctionCall","src":"12871:53:69"},"variableNames":[{"name":"value1","nativeSrc":"12861:6:69","nodeType":"YulIdentifier","src":"12861:6:69"}]}]},{"nativeSrc":"12944:118:69","nodeType":"YulBlock","src":"12944:118:69","statements":[{"nativeSrc":"12959:16:69","nodeType":"YulVariableDeclaration","src":"12959:16:69","value":{"kind":"number","nativeSrc":"12973:2:69","nodeType":"YulLiteral","src":"12973:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"12963:6:69","nodeType":"YulTypedName","src":"12963:6:69","type":""}]},{"nativeSrc":"12989:63:69","nodeType":"YulAssignment","src":"12989:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"13024:9:69","nodeType":"YulIdentifier","src":"13024:9:69"},{"name":"offset","nativeSrc":"13035:6:69","nodeType":"YulIdentifier","src":"13035:6:69"}],"functionName":{"name":"add","nativeSrc":"13020:3:69","nodeType":"YulIdentifier","src":"13020:3:69"},"nativeSrc":"13020:22:69","nodeType":"YulFunctionCall","src":"13020:22:69"},{"name":"dataEnd","nativeSrc":"13044:7:69","nodeType":"YulIdentifier","src":"13044:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"12999:20:69","nodeType":"YulIdentifier","src":"12999:20:69"},"nativeSrc":"12999:53:69","nodeType":"YulFunctionCall","src":"12999:53:69"},"variableNames":[{"name":"value2","nativeSrc":"12989:6:69","nodeType":"YulIdentifier","src":"12989:6:69"}]}]},{"nativeSrc":"13072:118:69","nodeType":"YulBlock","src":"13072:118:69","statements":[{"nativeSrc":"13087:16:69","nodeType":"YulVariableDeclaration","src":"13087:16:69","value":{"kind":"number","nativeSrc":"13101:2:69","nodeType":"YulLiteral","src":"13101:2:69","type":"","value":"96"},"variables":[{"name":"offset","nativeSrc":"13091:6:69","nodeType":"YulTypedName","src":"13091:6:69","type":""}]},{"nativeSrc":"13117:63:69","nodeType":"YulAssignment","src":"13117:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"13152:9:69","nodeType":"YulIdentifier","src":"13152:9:69"},{"name":"offset","nativeSrc":"13163:6:69","nodeType":"YulIdentifier","src":"13163:6:69"}],"functionName":{"name":"add","nativeSrc":"13148:3:69","nodeType":"YulIdentifier","src":"13148:3:69"},"nativeSrc":"13148:22:69","nodeType":"YulFunctionCall","src":"13148:22:69"},{"name":"dataEnd","nativeSrc":"13172:7:69","nodeType":"YulIdentifier","src":"13172:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"13127:20:69","nodeType":"YulIdentifier","src":"13127:20:69"},"nativeSrc":"13127:53:69","nodeType":"YulFunctionCall","src":"13127:53:69"},"variableNames":[{"name":"value3","nativeSrc":"13117:6:69","nodeType":"YulIdentifier","src":"13117:6:69"}]}]},{"nativeSrc":"13200:119:69","nodeType":"YulBlock","src":"13200:119:69","statements":[{"nativeSrc":"13215:17:69","nodeType":"YulVariableDeclaration","src":"13215:17:69","value":{"kind":"number","nativeSrc":"13229:3:69","nodeType":"YulLiteral","src":"13229:3:69","type":"","value":"128"},"variables":[{"name":"offset","nativeSrc":"13219:6:69","nodeType":"YulTypedName","src":"13219:6:69","type":""}]},{"nativeSrc":"13246:63:69","nodeType":"YulAssignment","src":"13246:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"13281:9:69","nodeType":"YulIdentifier","src":"13281:9:69"},{"name":"offset","nativeSrc":"13292:6:69","nodeType":"YulIdentifier","src":"13292:6:69"}],"functionName":{"name":"add","nativeSrc":"13277:3:69","nodeType":"YulIdentifier","src":"13277:3:69"},"nativeSrc":"13277:22:69","nodeType":"YulFunctionCall","src":"13277:22:69"},{"name":"dataEnd","nativeSrc":"13301:7:69","nodeType":"YulIdentifier","src":"13301:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"13256:20:69","nodeType":"YulIdentifier","src":"13256:20:69"},"nativeSrc":"13256:53:69","nodeType":"YulFunctionCall","src":"13256:53:69"},"variableNames":[{"name":"value4","nativeSrc":"13246:6:69","nodeType":"YulIdentifier","src":"13246:6:69"}]}]},{"nativeSrc":"13329:119:69","nodeType":"YulBlock","src":"13329:119:69","statements":[{"nativeSrc":"13344:17:69","nodeType":"YulVariableDeclaration","src":"13344:17:69","value":{"kind":"number","nativeSrc":"13358:3:69","nodeType":"YulLiteral","src":"13358:3:69","type":"","value":"160"},"variables":[{"name":"offset","nativeSrc":"13348:6:69","nodeType":"YulTypedName","src":"13348:6:69","type":""}]},{"nativeSrc":"13375:63:69","nodeType":"YulAssignment","src":"13375:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"13410:9:69","nodeType":"YulIdentifier","src":"13410:9:69"},{"name":"offset","nativeSrc":"13421:6:69","nodeType":"YulIdentifier","src":"13421:6:69"}],"functionName":{"name":"add","nativeSrc":"13406:3:69","nodeType":"YulIdentifier","src":"13406:3:69"},"nativeSrc":"13406:22:69","nodeType":"YulFunctionCall","src":"13406:22:69"},{"name":"dataEnd","nativeSrc":"13430:7:69","nodeType":"YulIdentifier","src":"13430:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"13385:20:69","nodeType":"YulIdentifier","src":"13385:20:69"},"nativeSrc":"13385:53:69","nodeType":"YulFunctionCall","src":"13385:53:69"},"variableNames":[{"name":"value5","nativeSrc":"13375:6:69","nodeType":"YulIdentifier","src":"13375:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_addresst_uint256t_uint256","nativeSrc":"12398:1057:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"12479:9:69","nodeType":"YulTypedName","src":"12479:9:69","type":""},{"name":"dataEnd","nativeSrc":"12490:7:69","nodeType":"YulTypedName","src":"12490:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"12502:6:69","nodeType":"YulTypedName","src":"12502:6:69","type":""},{"name":"value1","nativeSrc":"12510:6:69","nodeType":"YulTypedName","src":"12510:6:69","type":""},{"name":"value2","nativeSrc":"12518:6:69","nodeType":"YulTypedName","src":"12518:6:69","type":""},{"name":"value3","nativeSrc":"12526:6:69","nodeType":"YulTypedName","src":"12526:6:69","type":""},{"name":"value4","nativeSrc":"12534:6:69","nodeType":"YulTypedName","src":"12534:6:69","type":""},{"name":"value5","nativeSrc":"12542:6:69","nodeType":"YulTypedName","src":"12542:6:69","type":""}],"src":"12398:1057:69"},{"body":{"nativeSrc":"13615:288:69","nodeType":"YulBlock","src":"13615:288:69","statements":[{"nativeSrc":"13625:26:69","nodeType":"YulAssignment","src":"13625:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"13637:9:69","nodeType":"YulIdentifier","src":"13637:9:69"},{"kind":"number","nativeSrc":"13648:2:69","nodeType":"YulLiteral","src":"13648:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"13633:3:69","nodeType":"YulIdentifier","src":"13633:3:69"},"nativeSrc":"13633:18:69","nodeType":"YulFunctionCall","src":"13633:18:69"},"variableNames":[{"name":"tail","nativeSrc":"13625:4:69","nodeType":"YulIdentifier","src":"13625:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"13705:6:69","nodeType":"YulIdentifier","src":"13705:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"13718:9:69","nodeType":"YulIdentifier","src":"13718:9:69"},{"kind":"number","nativeSrc":"13729:1:69","nodeType":"YulLiteral","src":"13729:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"13714:3:69","nodeType":"YulIdentifier","src":"13714:3:69"},"nativeSrc":"13714:17:69","nodeType":"YulFunctionCall","src":"13714:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"13661:43:69","nodeType":"YulIdentifier","src":"13661:43:69"},"nativeSrc":"13661:71:69","nodeType":"YulFunctionCall","src":"13661:71:69"},"nativeSrc":"13661:71:69","nodeType":"YulExpressionStatement","src":"13661:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"13786:6:69","nodeType":"YulIdentifier","src":"13786:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"13799:9:69","nodeType":"YulIdentifier","src":"13799:9:69"},{"kind":"number","nativeSrc":"13810:2:69","nodeType":"YulLiteral","src":"13810:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"13795:3:69","nodeType":"YulIdentifier","src":"13795:3:69"},"nativeSrc":"13795:18:69","nodeType":"YulFunctionCall","src":"13795:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"13742:43:69","nodeType":"YulIdentifier","src":"13742:43:69"},"nativeSrc":"13742:72:69","nodeType":"YulFunctionCall","src":"13742:72:69"},"nativeSrc":"13742:72:69","nodeType":"YulExpressionStatement","src":"13742:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"13868:6:69","nodeType":"YulIdentifier","src":"13868:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"13881:9:69","nodeType":"YulIdentifier","src":"13881:9:69"},{"kind":"number","nativeSrc":"13892:2:69","nodeType":"YulLiteral","src":"13892:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"13877:3:69","nodeType":"YulIdentifier","src":"13877:3:69"},"nativeSrc":"13877:18:69","nodeType":"YulFunctionCall","src":"13877:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"13824:43:69","nodeType":"YulIdentifier","src":"13824:43:69"},"nativeSrc":"13824:72:69","nodeType":"YulFunctionCall","src":"13824:72:69"},"nativeSrc":"13824:72:69","nodeType":"YulExpressionStatement","src":"13824:72:69"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"13461:442:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"13571:9:69","nodeType":"YulTypedName","src":"13571:9:69","type":""},{"name":"value2","nativeSrc":"13583:6:69","nodeType":"YulTypedName","src":"13583:6:69","type":""},{"name":"value1","nativeSrc":"13591:6:69","nodeType":"YulTypedName","src":"13591:6:69","type":""},{"name":"value0","nativeSrc":"13599:6:69","nodeType":"YulTypedName","src":"13599:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"13610:4:69","nodeType":"YulTypedName","src":"13610:4:69","type":""}],"src":"13461:442:69"},{"body":{"nativeSrc":"13941:28:69","nodeType":"YulBlock","src":"13941:28:69","statements":[{"nativeSrc":"13951:12:69","nodeType":"YulAssignment","src":"13951:12:69","value":{"name":"value","nativeSrc":"13958:5:69","nodeType":"YulIdentifier","src":"13958:5:69"},"variableNames":[{"name":"ret","nativeSrc":"13951:3:69","nodeType":"YulIdentifier","src":"13951:3:69"}]}]},"name":"identity","nativeSrc":"13909:60:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"13927:5:69","nodeType":"YulTypedName","src":"13927:5:69","type":""}],"returnVariables":[{"name":"ret","nativeSrc":"13937:3:69","nodeType":"YulTypedName","src":"13937:3:69","type":""}],"src":"13909:60:69"},{"body":{"nativeSrc":"14035:82:69","nodeType":"YulBlock","src":"14035:82:69","statements":[{"nativeSrc":"14045:66:69","nodeType":"YulAssignment","src":"14045:66:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"14103:5:69","nodeType":"YulIdentifier","src":"14103:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"14085:17:69","nodeType":"YulIdentifier","src":"14085:17:69"},"nativeSrc":"14085:24:69","nodeType":"YulFunctionCall","src":"14085:24:69"}],"functionName":{"name":"identity","nativeSrc":"14076:8:69","nodeType":"YulIdentifier","src":"14076:8:69"},"nativeSrc":"14076:34:69","nodeType":"YulFunctionCall","src":"14076:34:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"14058:17:69","nodeType":"YulIdentifier","src":"14058:17:69"},"nativeSrc":"14058:53:69","nodeType":"YulFunctionCall","src":"14058:53:69"},"variableNames":[{"name":"converted","nativeSrc":"14045:9:69","nodeType":"YulIdentifier","src":"14045:9:69"}]}]},"name":"convert_t_uint160_to_t_uint160","nativeSrc":"13975:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"14015:5:69","nodeType":"YulTypedName","src":"14015:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"14025:9:69","nodeType":"YulTypedName","src":"14025:9:69","type":""}],"src":"13975:142:69"},{"body":{"nativeSrc":"14183:66:69","nodeType":"YulBlock","src":"14183:66:69","statements":[{"nativeSrc":"14193:50:69","nodeType":"YulAssignment","src":"14193:50:69","value":{"arguments":[{"name":"value","nativeSrc":"14237:5:69","nodeType":"YulIdentifier","src":"14237:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_uint160","nativeSrc":"14206:30:69","nodeType":"YulIdentifier","src":"14206:30:69"},"nativeSrc":"14206:37:69","nodeType":"YulFunctionCall","src":"14206:37:69"},"variableNames":[{"name":"converted","nativeSrc":"14193:9:69","nodeType":"YulIdentifier","src":"14193:9:69"}]}]},"name":"convert_t_uint160_to_t_address","nativeSrc":"14123:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"14163:5:69","nodeType":"YulTypedName","src":"14163:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"14173:9:69","nodeType":"YulTypedName","src":"14173:9:69","type":""}],"src":"14123:126:69"},{"body":{"nativeSrc":"14331:66:69","nodeType":"YulBlock","src":"14331:66:69","statements":[{"nativeSrc":"14341:50:69","nodeType":"YulAssignment","src":"14341:50:69","value":{"arguments":[{"name":"value","nativeSrc":"14385:5:69","nodeType":"YulIdentifier","src":"14385:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"14354:30:69","nodeType":"YulIdentifier","src":"14354:30:69"},"nativeSrc":"14354:37:69","nodeType":"YulFunctionCall","src":"14354:37:69"},"variableNames":[{"name":"converted","nativeSrc":"14341:9:69","nodeType":"YulIdentifier","src":"14341:9:69"}]}]},"name":"convert_t_contract$_VToken_$15506_to_t_address","nativeSrc":"14255:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"14311:5:69","nodeType":"YulTypedName","src":"14311:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"14321:9:69","nodeType":"YulTypedName","src":"14321:9:69","type":""}],"src":"14255:142:69"},{"body":{"nativeSrc":"14484:82:69","nodeType":"YulBlock","src":"14484:82:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"14501:3:69","nodeType":"YulIdentifier","src":"14501:3:69"},{"arguments":[{"name":"value","nativeSrc":"14553:5:69","nodeType":"YulIdentifier","src":"14553:5:69"}],"functionName":{"name":"convert_t_contract$_VToken_$15506_to_t_address","nativeSrc":"14506:46:69","nodeType":"YulIdentifier","src":"14506:46:69"},"nativeSrc":"14506:53:69","nodeType":"YulFunctionCall","src":"14506:53:69"}],"functionName":{"name":"mstore","nativeSrc":"14494:6:69","nodeType":"YulIdentifier","src":"14494:6:69"},"nativeSrc":"14494:66:69","nodeType":"YulFunctionCall","src":"14494:66:69"},"nativeSrc":"14494:66:69","nodeType":"YulExpressionStatement","src":"14494:66:69"}]},"name":"abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack","nativeSrc":"14403:163:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"14472:5:69","nodeType":"YulTypedName","src":"14472:5:69","type":""},{"name":"pos","nativeSrc":"14479:3:69","nodeType":"YulTypedName","src":"14479:3:69","type":""}],"src":"14403:163:69"},{"body":{"nativeSrc":"14686:140:69","nodeType":"YulBlock","src":"14686:140:69","statements":[{"nativeSrc":"14696:26:69","nodeType":"YulAssignment","src":"14696:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"14708:9:69","nodeType":"YulIdentifier","src":"14708:9:69"},{"kind":"number","nativeSrc":"14719:2:69","nodeType":"YulLiteral","src":"14719:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"14704:3:69","nodeType":"YulIdentifier","src":"14704:3:69"},"nativeSrc":"14704:18:69","nodeType":"YulFunctionCall","src":"14704:18:69"},"variableNames":[{"name":"tail","nativeSrc":"14696:4:69","nodeType":"YulIdentifier","src":"14696:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"14792:6:69","nodeType":"YulIdentifier","src":"14792:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"14805:9:69","nodeType":"YulIdentifier","src":"14805:9:69"},{"kind":"number","nativeSrc":"14816:1:69","nodeType":"YulLiteral","src":"14816:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"14801:3:69","nodeType":"YulIdentifier","src":"14801:3:69"},"nativeSrc":"14801:17:69","nodeType":"YulFunctionCall","src":"14801:17:69"}],"functionName":{"name":"abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack","nativeSrc":"14732:59:69","nodeType":"YulIdentifier","src":"14732:59:69"},"nativeSrc":"14732:87:69","nodeType":"YulFunctionCall","src":"14732:87:69"},"nativeSrc":"14732:87:69","nodeType":"YulExpressionStatement","src":"14732:87:69"}]},"name":"abi_encode_tuple_t_contract$_VToken_$15506__to_t_address__fromStack_reversed","nativeSrc":"14572:254:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"14658:9:69","nodeType":"YulTypedName","src":"14658:9:69","type":""},{"name":"value0","nativeSrc":"14670:6:69","nodeType":"YulTypedName","src":"14670:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"14681:4:69","nodeType":"YulTypedName","src":"14681:4:69","type":""}],"src":"14572:254:69"},{"body":{"nativeSrc":"14911:51:69","nodeType":"YulBlock","src":"14911:51:69","statements":[{"nativeSrc":"14921:35:69","nodeType":"YulAssignment","src":"14921:35:69","value":{"arguments":[{"name":"value","nativeSrc":"14950:5:69","nodeType":"YulIdentifier","src":"14950:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"14932:17:69","nodeType":"YulIdentifier","src":"14932:17:69"},"nativeSrc":"14932:24:69","nodeType":"YulFunctionCall","src":"14932:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"14921:7:69","nodeType":"YulIdentifier","src":"14921:7:69"}]}]},"name":"cleanup_t_contract$_ResilientOracleInterface_$16173","nativeSrc":"14832:130:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"14893:5:69","nodeType":"YulTypedName","src":"14893:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"14903:7:69","nodeType":"YulTypedName","src":"14903:7:69","type":""}],"src":"14832:130:69"},{"body":{"nativeSrc":"15045:113:69","nodeType":"YulBlock","src":"15045:113:69","statements":[{"body":{"nativeSrc":"15136:16:69","nodeType":"YulBlock","src":"15136:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"15145:1:69","nodeType":"YulLiteral","src":"15145:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"15148:1:69","nodeType":"YulLiteral","src":"15148:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"15138:6:69","nodeType":"YulIdentifier","src":"15138:6:69"},"nativeSrc":"15138:12:69","nodeType":"YulFunctionCall","src":"15138:12:69"},"nativeSrc":"15138:12:69","nodeType":"YulExpressionStatement","src":"15138:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"15068:5:69","nodeType":"YulIdentifier","src":"15068:5:69"},{"arguments":[{"name":"value","nativeSrc":"15127:5:69","nodeType":"YulIdentifier","src":"15127:5:69"}],"functionName":{"name":"cleanup_t_contract$_ResilientOracleInterface_$16173","nativeSrc":"15075:51:69","nodeType":"YulIdentifier","src":"15075:51:69"},"nativeSrc":"15075:58:69","nodeType":"YulFunctionCall","src":"15075:58:69"}],"functionName":{"name":"eq","nativeSrc":"15065:2:69","nodeType":"YulIdentifier","src":"15065:2:69"},"nativeSrc":"15065:69:69","nodeType":"YulFunctionCall","src":"15065:69:69"}],"functionName":{"name":"iszero","nativeSrc":"15058:6:69","nodeType":"YulIdentifier","src":"15058:6:69"},"nativeSrc":"15058:77:69","nodeType":"YulFunctionCall","src":"15058:77:69"},"nativeSrc":"15055:97:69","nodeType":"YulIf","src":"15055:97:69"}]},"name":"validator_revert_t_contract$_ResilientOracleInterface_$16173","nativeSrc":"14968:190:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"15038:5:69","nodeType":"YulTypedName","src":"15038:5:69","type":""}],"src":"14968:190:69"},{"body":{"nativeSrc":"15250:121:69","nodeType":"YulBlock","src":"15250:121:69","statements":[{"nativeSrc":"15260:29:69","nodeType":"YulAssignment","src":"15260:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"15282:6:69","nodeType":"YulIdentifier","src":"15282:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"15269:12:69","nodeType":"YulIdentifier","src":"15269:12:69"},"nativeSrc":"15269:20:69","nodeType":"YulFunctionCall","src":"15269:20:69"},"variableNames":[{"name":"value","nativeSrc":"15260:5:69","nodeType":"YulIdentifier","src":"15260:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"15359:5:69","nodeType":"YulIdentifier","src":"15359:5:69"}],"functionName":{"name":"validator_revert_t_contract$_ResilientOracleInterface_$16173","nativeSrc":"15298:60:69","nodeType":"YulIdentifier","src":"15298:60:69"},"nativeSrc":"15298:67:69","nodeType":"YulFunctionCall","src":"15298:67:69"},"nativeSrc":"15298:67:69","nodeType":"YulExpressionStatement","src":"15298:67:69"}]},"name":"abi_decode_t_contract$_ResilientOracleInterface_$16173","nativeSrc":"15164:207:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"15228:6:69","nodeType":"YulTypedName","src":"15228:6:69","type":""},{"name":"end","nativeSrc":"15236:3:69","nodeType":"YulTypedName","src":"15236:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"15244:5:69","nodeType":"YulTypedName","src":"15244:5:69","type":""}],"src":"15164:207:69"},{"body":{"nativeSrc":"15477:297:69","nodeType":"YulBlock","src":"15477:297:69","statements":[{"body":{"nativeSrc":"15523:83:69","nodeType":"YulBlock","src":"15523:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"15525:77:69","nodeType":"YulIdentifier","src":"15525:77:69"},"nativeSrc":"15525:79:69","nodeType":"YulFunctionCall","src":"15525:79:69"},"nativeSrc":"15525:79:69","nodeType":"YulExpressionStatement","src":"15525:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"15498:7:69","nodeType":"YulIdentifier","src":"15498:7:69"},{"name":"headStart","nativeSrc":"15507:9:69","nodeType":"YulIdentifier","src":"15507:9:69"}],"functionName":{"name":"sub","nativeSrc":"15494:3:69","nodeType":"YulIdentifier","src":"15494:3:69"},"nativeSrc":"15494:23:69","nodeType":"YulFunctionCall","src":"15494:23:69"},{"kind":"number","nativeSrc":"15519:2:69","nodeType":"YulLiteral","src":"15519:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"15490:3:69","nodeType":"YulIdentifier","src":"15490:3:69"},"nativeSrc":"15490:32:69","nodeType":"YulFunctionCall","src":"15490:32:69"},"nativeSrc":"15487:119:69","nodeType":"YulIf","src":"15487:119:69"},{"nativeSrc":"15616:151:69","nodeType":"YulBlock","src":"15616:151:69","statements":[{"nativeSrc":"15631:15:69","nodeType":"YulVariableDeclaration","src":"15631:15:69","value":{"kind":"number","nativeSrc":"15645:1:69","nodeType":"YulLiteral","src":"15645:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"15635:6:69","nodeType":"YulTypedName","src":"15635:6:69","type":""}]},{"nativeSrc":"15660:97:69","nodeType":"YulAssignment","src":"15660:97:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"15729:9:69","nodeType":"YulIdentifier","src":"15729:9:69"},{"name":"offset","nativeSrc":"15740:6:69","nodeType":"YulIdentifier","src":"15740:6:69"}],"functionName":{"name":"add","nativeSrc":"15725:3:69","nodeType":"YulIdentifier","src":"15725:3:69"},"nativeSrc":"15725:22:69","nodeType":"YulFunctionCall","src":"15725:22:69"},{"name":"dataEnd","nativeSrc":"15749:7:69","nodeType":"YulIdentifier","src":"15749:7:69"}],"functionName":{"name":"abi_decode_t_contract$_ResilientOracleInterface_$16173","nativeSrc":"15670:54:69","nodeType":"YulIdentifier","src":"15670:54:69"},"nativeSrc":"15670:87:69","nodeType":"YulFunctionCall","src":"15670:87:69"},"variableNames":[{"name":"value0","nativeSrc":"15660:6:69","nodeType":"YulIdentifier","src":"15660:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_ResilientOracleInterface_$16173","nativeSrc":"15377:397:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"15447:9:69","nodeType":"YulTypedName","src":"15447:9:69","type":""},{"name":"dataEnd","nativeSrc":"15458:7:69","nodeType":"YulTypedName","src":"15458:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"15470:6:69","nodeType":"YulTypedName","src":"15470:6:69","type":""}],"src":"15377:397:69"},{"body":{"nativeSrc":"15853:51:69","nodeType":"YulBlock","src":"15853:51:69","statements":[{"nativeSrc":"15863:35:69","nodeType":"YulAssignment","src":"15863:35:69","value":{"arguments":[{"name":"value","nativeSrc":"15892:5:69","nodeType":"YulIdentifier","src":"15892:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"15874:17:69","nodeType":"YulIdentifier","src":"15874:17:69"},"nativeSrc":"15874:24:69","nodeType":"YulFunctionCall","src":"15874:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"15863:7:69","nodeType":"YulIdentifier","src":"15863:7:69"}]}]},"name":"cleanup_t_contract$_RewardsDistributor_$12324","nativeSrc":"15780:124:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"15835:5:69","nodeType":"YulTypedName","src":"15835:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"15845:7:69","nodeType":"YulTypedName","src":"15845:7:69","type":""}],"src":"15780:124:69"},{"body":{"nativeSrc":"15981:107:69","nodeType":"YulBlock","src":"15981:107:69","statements":[{"body":{"nativeSrc":"16066:16:69","nodeType":"YulBlock","src":"16066:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"16075:1:69","nodeType":"YulLiteral","src":"16075:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"16078:1:69","nodeType":"YulLiteral","src":"16078:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"16068:6:69","nodeType":"YulIdentifier","src":"16068:6:69"},"nativeSrc":"16068:12:69","nodeType":"YulFunctionCall","src":"16068:12:69"},"nativeSrc":"16068:12:69","nodeType":"YulExpressionStatement","src":"16068:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"16004:5:69","nodeType":"YulIdentifier","src":"16004:5:69"},{"arguments":[{"name":"value","nativeSrc":"16057:5:69","nodeType":"YulIdentifier","src":"16057:5:69"}],"functionName":{"name":"cleanup_t_contract$_RewardsDistributor_$12324","nativeSrc":"16011:45:69","nodeType":"YulIdentifier","src":"16011:45:69"},"nativeSrc":"16011:52:69","nodeType":"YulFunctionCall","src":"16011:52:69"}],"functionName":{"name":"eq","nativeSrc":"16001:2:69","nodeType":"YulIdentifier","src":"16001:2:69"},"nativeSrc":"16001:63:69","nodeType":"YulFunctionCall","src":"16001:63:69"}],"functionName":{"name":"iszero","nativeSrc":"15994:6:69","nodeType":"YulIdentifier","src":"15994:6:69"},"nativeSrc":"15994:71:69","nodeType":"YulFunctionCall","src":"15994:71:69"},"nativeSrc":"15991:91:69","nodeType":"YulIf","src":"15991:91:69"}]},"name":"validator_revert_t_contract$_RewardsDistributor_$12324","nativeSrc":"15910:178:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"15974:5:69","nodeType":"YulTypedName","src":"15974:5:69","type":""}],"src":"15910:178:69"},{"body":{"nativeSrc":"16174:115:69","nodeType":"YulBlock","src":"16174:115:69","statements":[{"nativeSrc":"16184:29:69","nodeType":"YulAssignment","src":"16184:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"16206:6:69","nodeType":"YulIdentifier","src":"16206:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"16193:12:69","nodeType":"YulIdentifier","src":"16193:12:69"},"nativeSrc":"16193:20:69","nodeType":"YulFunctionCall","src":"16193:20:69"},"variableNames":[{"name":"value","nativeSrc":"16184:5:69","nodeType":"YulIdentifier","src":"16184:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"16277:5:69","nodeType":"YulIdentifier","src":"16277:5:69"}],"functionName":{"name":"validator_revert_t_contract$_RewardsDistributor_$12324","nativeSrc":"16222:54:69","nodeType":"YulIdentifier","src":"16222:54:69"},"nativeSrc":"16222:61:69","nodeType":"YulFunctionCall","src":"16222:61:69"},"nativeSrc":"16222:61:69","nodeType":"YulExpressionStatement","src":"16222:61:69"}]},"name":"abi_decode_t_contract$_RewardsDistributor_$12324","nativeSrc":"16094:195:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"16152:6:69","nodeType":"YulTypedName","src":"16152:6:69","type":""},{"name":"end","nativeSrc":"16160:3:69","nodeType":"YulTypedName","src":"16160:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"16168:5:69","nodeType":"YulTypedName","src":"16168:5:69","type":""}],"src":"16094:195:69"},{"body":{"nativeSrc":"16389:291:69","nodeType":"YulBlock","src":"16389:291:69","statements":[{"body":{"nativeSrc":"16435:83:69","nodeType":"YulBlock","src":"16435:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"16437:77:69","nodeType":"YulIdentifier","src":"16437:77:69"},"nativeSrc":"16437:79:69","nodeType":"YulFunctionCall","src":"16437:79:69"},"nativeSrc":"16437:79:69","nodeType":"YulExpressionStatement","src":"16437:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"16410:7:69","nodeType":"YulIdentifier","src":"16410:7:69"},{"name":"headStart","nativeSrc":"16419:9:69","nodeType":"YulIdentifier","src":"16419:9:69"}],"functionName":{"name":"sub","nativeSrc":"16406:3:69","nodeType":"YulIdentifier","src":"16406:3:69"},"nativeSrc":"16406:23:69","nodeType":"YulFunctionCall","src":"16406:23:69"},{"kind":"number","nativeSrc":"16431:2:69","nodeType":"YulLiteral","src":"16431:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"16402:3:69","nodeType":"YulIdentifier","src":"16402:3:69"},"nativeSrc":"16402:32:69","nodeType":"YulFunctionCall","src":"16402:32:69"},"nativeSrc":"16399:119:69","nodeType":"YulIf","src":"16399:119:69"},{"nativeSrc":"16528:145:69","nodeType":"YulBlock","src":"16528:145:69","statements":[{"nativeSrc":"16543:15:69","nodeType":"YulVariableDeclaration","src":"16543:15:69","value":{"kind":"number","nativeSrc":"16557:1:69","nodeType":"YulLiteral","src":"16557:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"16547:6:69","nodeType":"YulTypedName","src":"16547:6:69","type":""}]},{"nativeSrc":"16572:91:69","nodeType":"YulAssignment","src":"16572:91:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"16635:9:69","nodeType":"YulIdentifier","src":"16635:9:69"},{"name":"offset","nativeSrc":"16646:6:69","nodeType":"YulIdentifier","src":"16646:6:69"}],"functionName":{"name":"add","nativeSrc":"16631:3:69","nodeType":"YulIdentifier","src":"16631:3:69"},"nativeSrc":"16631:22:69","nodeType":"YulFunctionCall","src":"16631:22:69"},{"name":"dataEnd","nativeSrc":"16655:7:69","nodeType":"YulIdentifier","src":"16655:7:69"}],"functionName":{"name":"abi_decode_t_contract$_RewardsDistributor_$12324","nativeSrc":"16582:48:69","nodeType":"YulIdentifier","src":"16582:48:69"},"nativeSrc":"16582:81:69","nodeType":"YulFunctionCall","src":"16582:81:69"},"variableNames":[{"name":"value0","nativeSrc":"16572:6:69","nodeType":"YulIdentifier","src":"16572:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_RewardsDistributor_$12324","nativeSrc":"16295:385:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"16359:9:69","nodeType":"YulTypedName","src":"16359:9:69","type":""},{"name":"dataEnd","nativeSrc":"16370:7:69","nodeType":"YulTypedName","src":"16370:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"16382:6:69","nodeType":"YulTypedName","src":"16382:6:69","type":""}],"src":"16295:385:69"},{"body":{"nativeSrc":"16786:519:69","nodeType":"YulBlock","src":"16786:519:69","statements":[{"body":{"nativeSrc":"16832:83:69","nodeType":"YulBlock","src":"16832:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"16834:77:69","nodeType":"YulIdentifier","src":"16834:77:69"},"nativeSrc":"16834:79:69","nodeType":"YulFunctionCall","src":"16834:79:69"},"nativeSrc":"16834:79:69","nodeType":"YulExpressionStatement","src":"16834:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"16807:7:69","nodeType":"YulIdentifier","src":"16807:7:69"},{"name":"headStart","nativeSrc":"16816:9:69","nodeType":"YulIdentifier","src":"16816:9:69"}],"functionName":{"name":"sub","nativeSrc":"16803:3:69","nodeType":"YulIdentifier","src":"16803:3:69"},"nativeSrc":"16803:23:69","nodeType":"YulFunctionCall","src":"16803:23:69"},{"kind":"number","nativeSrc":"16828:2:69","nodeType":"YulLiteral","src":"16828:2:69","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"16799:3:69","nodeType":"YulIdentifier","src":"16799:3:69"},"nativeSrc":"16799:32:69","nodeType":"YulFunctionCall","src":"16799:32:69"},"nativeSrc":"16796:119:69","nodeType":"YulIf","src":"16796:119:69"},{"nativeSrc":"16925:117:69","nodeType":"YulBlock","src":"16925:117:69","statements":[{"nativeSrc":"16940:15:69","nodeType":"YulVariableDeclaration","src":"16940:15:69","value":{"kind":"number","nativeSrc":"16954:1:69","nodeType":"YulLiteral","src":"16954:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"16944:6:69","nodeType":"YulTypedName","src":"16944:6:69","type":""}]},{"nativeSrc":"16969:63:69","nodeType":"YulAssignment","src":"16969:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"17004:9:69","nodeType":"YulIdentifier","src":"17004:9:69"},{"name":"offset","nativeSrc":"17015:6:69","nodeType":"YulIdentifier","src":"17015:6:69"}],"functionName":{"name":"add","nativeSrc":"17000:3:69","nodeType":"YulIdentifier","src":"17000:3:69"},"nativeSrc":"17000:22:69","nodeType":"YulFunctionCall","src":"17000:22:69"},{"name":"dataEnd","nativeSrc":"17024:7:69","nodeType":"YulIdentifier","src":"17024:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"16979:20:69","nodeType":"YulIdentifier","src":"16979:20:69"},"nativeSrc":"16979:53:69","nodeType":"YulFunctionCall","src":"16979:53:69"},"variableNames":[{"name":"value0","nativeSrc":"16969:6:69","nodeType":"YulIdentifier","src":"16969:6:69"}]}]},{"nativeSrc":"17052:118:69","nodeType":"YulBlock","src":"17052:118:69","statements":[{"nativeSrc":"17067:16:69","nodeType":"YulVariableDeclaration","src":"17067:16:69","value":{"kind":"number","nativeSrc":"17081:2:69","nodeType":"YulLiteral","src":"17081:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"17071:6:69","nodeType":"YulTypedName","src":"17071:6:69","type":""}]},{"nativeSrc":"17097:63:69","nodeType":"YulAssignment","src":"17097:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"17132:9:69","nodeType":"YulIdentifier","src":"17132:9:69"},{"name":"offset","nativeSrc":"17143:6:69","nodeType":"YulIdentifier","src":"17143:6:69"}],"functionName":{"name":"add","nativeSrc":"17128:3:69","nodeType":"YulIdentifier","src":"17128:3:69"},"nativeSrc":"17128:22:69","nodeType":"YulFunctionCall","src":"17128:22:69"},{"name":"dataEnd","nativeSrc":"17152:7:69","nodeType":"YulIdentifier","src":"17152:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"17107:20:69","nodeType":"YulIdentifier","src":"17107:20:69"},"nativeSrc":"17107:53:69","nodeType":"YulFunctionCall","src":"17107:53:69"},"variableNames":[{"name":"value1","nativeSrc":"17097:6:69","nodeType":"YulIdentifier","src":"17097:6:69"}]}]},{"nativeSrc":"17180:118:69","nodeType":"YulBlock","src":"17180:118:69","statements":[{"nativeSrc":"17195:16:69","nodeType":"YulVariableDeclaration","src":"17195:16:69","value":{"kind":"number","nativeSrc":"17209:2:69","nodeType":"YulLiteral","src":"17209:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"17199:6:69","nodeType":"YulTypedName","src":"17199:6:69","type":""}]},{"nativeSrc":"17225:63:69","nodeType":"YulAssignment","src":"17225:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"17260:9:69","nodeType":"YulIdentifier","src":"17260:9:69"},{"name":"offset","nativeSrc":"17271:6:69","nodeType":"YulIdentifier","src":"17271:6:69"}],"functionName":{"name":"add","nativeSrc":"17256:3:69","nodeType":"YulIdentifier","src":"17256:3:69"},"nativeSrc":"17256:22:69","nodeType":"YulFunctionCall","src":"17256:22:69"},{"name":"dataEnd","nativeSrc":"17280:7:69","nodeType":"YulIdentifier","src":"17280:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"17235:20:69","nodeType":"YulIdentifier","src":"17235:20:69"},"nativeSrc":"17235:53:69","nodeType":"YulFunctionCall","src":"17235:53:69"},"variableNames":[{"name":"value2","nativeSrc":"17225:6:69","nodeType":"YulIdentifier","src":"17225:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nativeSrc":"16686:619:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"16740:9:69","nodeType":"YulTypedName","src":"16740:9:69","type":""},{"name":"dataEnd","nativeSrc":"16751:7:69","nodeType":"YulTypedName","src":"16751:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"16763:6:69","nodeType":"YulTypedName","src":"16763:6:69","type":""},{"name":"value1","nativeSrc":"16771:6:69","nodeType":"YulTypedName","src":"16771:6:69","type":""},{"name":"value2","nativeSrc":"16779:6:69","nodeType":"YulTypedName","src":"16779:6:69","type":""}],"src":"16686:619:69"},{"body":{"nativeSrc":"17427:535:69","nodeType":"YulBlock","src":"17427:535:69","statements":[{"body":{"nativeSrc":"17473:83:69","nodeType":"YulBlock","src":"17473:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"17475:77:69","nodeType":"YulIdentifier","src":"17475:77:69"},"nativeSrc":"17475:79:69","nodeType":"YulFunctionCall","src":"17475:79:69"},"nativeSrc":"17475:79:69","nodeType":"YulExpressionStatement","src":"17475:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"17448:7:69","nodeType":"YulIdentifier","src":"17448:7:69"},{"name":"headStart","nativeSrc":"17457:9:69","nodeType":"YulIdentifier","src":"17457:9:69"}],"functionName":{"name":"sub","nativeSrc":"17444:3:69","nodeType":"YulIdentifier","src":"17444:3:69"},"nativeSrc":"17444:23:69","nodeType":"YulFunctionCall","src":"17444:23:69"},{"kind":"number","nativeSrc":"17469:2:69","nodeType":"YulLiteral","src":"17469:2:69","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"17440:3:69","nodeType":"YulIdentifier","src":"17440:3:69"},"nativeSrc":"17440:32:69","nodeType":"YulFunctionCall","src":"17440:32:69"},"nativeSrc":"17437:119:69","nodeType":"YulIf","src":"17437:119:69"},{"nativeSrc":"17566:133:69","nodeType":"YulBlock","src":"17566:133:69","statements":[{"nativeSrc":"17581:15:69","nodeType":"YulVariableDeclaration","src":"17581:15:69","value":{"kind":"number","nativeSrc":"17595:1:69","nodeType":"YulLiteral","src":"17595:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"17585:6:69","nodeType":"YulTypedName","src":"17585:6:69","type":""}]},{"nativeSrc":"17610:79:69","nodeType":"YulAssignment","src":"17610:79:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"17661:9:69","nodeType":"YulIdentifier","src":"17661:9:69"},{"name":"offset","nativeSrc":"17672:6:69","nodeType":"YulIdentifier","src":"17672:6:69"}],"functionName":{"name":"add","nativeSrc":"17657:3:69","nodeType":"YulIdentifier","src":"17657:3:69"},"nativeSrc":"17657:22:69","nodeType":"YulFunctionCall","src":"17657:22:69"},{"name":"dataEnd","nativeSrc":"17681:7:69","nodeType":"YulIdentifier","src":"17681:7:69"}],"functionName":{"name":"abi_decode_t_contract$_VToken_$15506","nativeSrc":"17620:36:69","nodeType":"YulIdentifier","src":"17620:36:69"},"nativeSrc":"17620:69:69","nodeType":"YulFunctionCall","src":"17620:69:69"},"variableNames":[{"name":"value0","nativeSrc":"17610:6:69","nodeType":"YulIdentifier","src":"17610:6:69"}]}]},{"nativeSrc":"17709:118:69","nodeType":"YulBlock","src":"17709:118:69","statements":[{"nativeSrc":"17724:16:69","nodeType":"YulVariableDeclaration","src":"17724:16:69","value":{"kind":"number","nativeSrc":"17738:2:69","nodeType":"YulLiteral","src":"17738:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"17728:6:69","nodeType":"YulTypedName","src":"17728:6:69","type":""}]},{"nativeSrc":"17754:63:69","nodeType":"YulAssignment","src":"17754:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"17789:9:69","nodeType":"YulIdentifier","src":"17789:9:69"},{"name":"offset","nativeSrc":"17800:6:69","nodeType":"YulIdentifier","src":"17800:6:69"}],"functionName":{"name":"add","nativeSrc":"17785:3:69","nodeType":"YulIdentifier","src":"17785:3:69"},"nativeSrc":"17785:22:69","nodeType":"YulFunctionCall","src":"17785:22:69"},{"name":"dataEnd","nativeSrc":"17809:7:69","nodeType":"YulIdentifier","src":"17809:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"17764:20:69","nodeType":"YulIdentifier","src":"17764:20:69"},"nativeSrc":"17764:53:69","nodeType":"YulFunctionCall","src":"17764:53:69"},"variableNames":[{"name":"value1","nativeSrc":"17754:6:69","nodeType":"YulIdentifier","src":"17754:6:69"}]}]},{"nativeSrc":"17837:118:69","nodeType":"YulBlock","src":"17837:118:69","statements":[{"nativeSrc":"17852:16:69","nodeType":"YulVariableDeclaration","src":"17852:16:69","value":{"kind":"number","nativeSrc":"17866:2:69","nodeType":"YulLiteral","src":"17866:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"17856:6:69","nodeType":"YulTypedName","src":"17856:6:69","type":""}]},{"nativeSrc":"17882:63:69","nodeType":"YulAssignment","src":"17882:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"17917:9:69","nodeType":"YulIdentifier","src":"17917:9:69"},{"name":"offset","nativeSrc":"17928:6:69","nodeType":"YulIdentifier","src":"17928:6:69"}],"functionName":{"name":"add","nativeSrc":"17913:3:69","nodeType":"YulIdentifier","src":"17913:3:69"},"nativeSrc":"17913:22:69","nodeType":"YulFunctionCall","src":"17913:22:69"},{"name":"dataEnd","nativeSrc":"17937:7:69","nodeType":"YulIdentifier","src":"17937:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"17892:20:69","nodeType":"YulIdentifier","src":"17892:20:69"},"nativeSrc":"17892:53:69","nodeType":"YulFunctionCall","src":"17892:53:69"},"variableNames":[{"name":"value2","nativeSrc":"17882:6:69","nodeType":"YulIdentifier","src":"17882:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_VToken_$15506t_uint256t_uint256","nativeSrc":"17311:651:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"17381:9:69","nodeType":"YulTypedName","src":"17381:9:69","type":""},{"name":"dataEnd","nativeSrc":"17392:7:69","nodeType":"YulTypedName","src":"17392:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"17404:6:69","nodeType":"YulTypedName","src":"17404:6:69","type":""},{"name":"value1","nativeSrc":"17412:6:69","nodeType":"YulTypedName","src":"17412:6:69","type":""},{"name":"value2","nativeSrc":"17420:6:69","nodeType":"YulTypedName","src":"17420:6:69","type":""}],"src":"17311:651:69"},{"body":{"nativeSrc":"18070:40:69","nodeType":"YulBlock","src":"18070:40:69","statements":[{"nativeSrc":"18081:22:69","nodeType":"YulAssignment","src":"18081:22:69","value":{"arguments":[{"name":"value","nativeSrc":"18097:5:69","nodeType":"YulIdentifier","src":"18097:5:69"}],"functionName":{"name":"mload","nativeSrc":"18091:5:69","nodeType":"YulIdentifier","src":"18091:5:69"},"nativeSrc":"18091:12:69","nodeType":"YulFunctionCall","src":"18091:12:69"},"variableNames":[{"name":"length","nativeSrc":"18081:6:69","nodeType":"YulIdentifier","src":"18081:6:69"}]}]},"name":"array_length_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr","nativeSrc":"17968:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"18053:5:69","nodeType":"YulTypedName","src":"18053:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"18063:6:69","nodeType":"YulTypedName","src":"18063:6:69","type":""}],"src":"17968:142:69"},{"body":{"nativeSrc":"18227:73:69","nodeType":"YulBlock","src":"18227:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"18244:3:69","nodeType":"YulIdentifier","src":"18244:3:69"},{"name":"length","nativeSrc":"18249:6:69","nodeType":"YulIdentifier","src":"18249:6:69"}],"functionName":{"name":"mstore","nativeSrc":"18237:6:69","nodeType":"YulIdentifier","src":"18237:6:69"},"nativeSrc":"18237:19:69","nodeType":"YulFunctionCall","src":"18237:19:69"},"nativeSrc":"18237:19:69","nodeType":"YulExpressionStatement","src":"18237:19:69"},{"nativeSrc":"18265:29:69","nodeType":"YulAssignment","src":"18265:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"18284:3:69","nodeType":"YulIdentifier","src":"18284:3:69"},{"kind":"number","nativeSrc":"18289:4:69","nodeType":"YulLiteral","src":"18289:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18280:3:69","nodeType":"YulIdentifier","src":"18280:3:69"},"nativeSrc":"18280:14:69","nodeType":"YulFunctionCall","src":"18280:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"18265:11:69","nodeType":"YulIdentifier","src":"18265:11:69"}]}]},"name":"array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack","nativeSrc":"18116:184:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"18199:3:69","nodeType":"YulTypedName","src":"18199:3:69","type":""},{"name":"length","nativeSrc":"18204:6:69","nodeType":"YulTypedName","src":"18204:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"18215:11:69","nodeType":"YulTypedName","src":"18215:11:69","type":""}],"src":"18116:184:69"},{"body":{"nativeSrc":"18406:60:69","nodeType":"YulBlock","src":"18406:60:69","statements":[{"nativeSrc":"18416:11:69","nodeType":"YulAssignment","src":"18416:11:69","value":{"name":"ptr","nativeSrc":"18424:3:69","nodeType":"YulIdentifier","src":"18424:3:69"},"variableNames":[{"name":"data","nativeSrc":"18416:4:69","nodeType":"YulIdentifier","src":"18416:4:69"}]},{"nativeSrc":"18437:22:69","nodeType":"YulAssignment","src":"18437:22:69","value":{"arguments":[{"name":"ptr","nativeSrc":"18449:3:69","nodeType":"YulIdentifier","src":"18449:3:69"},{"kind":"number","nativeSrc":"18454:4:69","nodeType":"YulLiteral","src":"18454:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18445:3:69","nodeType":"YulIdentifier","src":"18445:3:69"},"nativeSrc":"18445:14:69","nodeType":"YulFunctionCall","src":"18445:14:69"},"variableNames":[{"name":"data","nativeSrc":"18437:4:69","nodeType":"YulIdentifier","src":"18437:4:69"}]}]},"name":"array_dataslot_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr","nativeSrc":"18306:160:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nativeSrc":"18393:3:69","nodeType":"YulTypedName","src":"18393:3:69","type":""}],"returnVariables":[{"name":"data","nativeSrc":"18401:4:69","nodeType":"YulTypedName","src":"18401:4:69","type":""}],"src":"18306:160:69"},{"body":{"nativeSrc":"18560:66:69","nodeType":"YulBlock","src":"18560:66:69","statements":[{"nativeSrc":"18570:50:69","nodeType":"YulAssignment","src":"18570:50:69","value":{"arguments":[{"name":"value","nativeSrc":"18614:5:69","nodeType":"YulIdentifier","src":"18614:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"18583:30:69","nodeType":"YulIdentifier","src":"18583:30:69"},"nativeSrc":"18583:37:69","nodeType":"YulFunctionCall","src":"18583:37:69"},"variableNames":[{"name":"converted","nativeSrc":"18570:9:69","nodeType":"YulIdentifier","src":"18570:9:69"}]}]},"name":"convert_t_contract$_RewardsDistributor_$12324_to_t_address","nativeSrc":"18472:154:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"18540:5:69","nodeType":"YulTypedName","src":"18540:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"18550:9:69","nodeType":"YulTypedName","src":"18550:9:69","type":""}],"src":"18472:154:69"},{"body":{"nativeSrc":"18715:94:69","nodeType":"YulBlock","src":"18715:94:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"18732:3:69","nodeType":"YulIdentifier","src":"18732:3:69"},{"arguments":[{"name":"value","nativeSrc":"18796:5:69","nodeType":"YulIdentifier","src":"18796:5:69"}],"functionName":{"name":"convert_t_contract$_RewardsDistributor_$12324_to_t_address","nativeSrc":"18737:58:69","nodeType":"YulIdentifier","src":"18737:58:69"},"nativeSrc":"18737:65:69","nodeType":"YulFunctionCall","src":"18737:65:69"}],"functionName":{"name":"mstore","nativeSrc":"18725:6:69","nodeType":"YulIdentifier","src":"18725:6:69"},"nativeSrc":"18725:78:69","nodeType":"YulFunctionCall","src":"18725:78:69"},"nativeSrc":"18725:78:69","nodeType":"YulExpressionStatement","src":"18725:78:69"}]},"name":"abi_encode_t_contract$_RewardsDistributor_$12324_to_t_address","nativeSrc":"18632:177:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"18703:5:69","nodeType":"YulTypedName","src":"18703:5:69","type":""},{"name":"pos","nativeSrc":"18710:3:69","nodeType":"YulTypedName","src":"18710:3:69","type":""}],"src":"18632:177:69"},{"body":{"nativeSrc":"18923:127:69","nodeType":"YulBlock","src":"18923:127:69","statements":[{"expression":{"arguments":[{"name":"value0","nativeSrc":"18995:6:69","nodeType":"YulIdentifier","src":"18995:6:69"},{"name":"pos","nativeSrc":"19003:3:69","nodeType":"YulIdentifier","src":"19003:3:69"}],"functionName":{"name":"abi_encode_t_contract$_RewardsDistributor_$12324_to_t_address","nativeSrc":"18933:61:69","nodeType":"YulIdentifier","src":"18933:61:69"},"nativeSrc":"18933:74:69","nodeType":"YulFunctionCall","src":"18933:74:69"},"nativeSrc":"18933:74:69","nodeType":"YulExpressionStatement","src":"18933:74:69"},{"nativeSrc":"19016:28:69","nodeType":"YulAssignment","src":"19016:28:69","value":{"arguments":[{"name":"pos","nativeSrc":"19034:3:69","nodeType":"YulIdentifier","src":"19034:3:69"},{"kind":"number","nativeSrc":"19039:4:69","nodeType":"YulLiteral","src":"19039:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"19030:3:69","nodeType":"YulIdentifier","src":"19030:3:69"},"nativeSrc":"19030:14:69","nodeType":"YulFunctionCall","src":"19030:14:69"},"variableNames":[{"name":"updatedPos","nativeSrc":"19016:10:69","nodeType":"YulIdentifier","src":"19016:10:69"}]}]},"name":"abi_encodeUpdatedPos_t_contract$_RewardsDistributor_$12324_to_t_address","nativeSrc":"18815:235:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value0","nativeSrc":"18896:6:69","nodeType":"YulTypedName","src":"18896:6:69","type":""},{"name":"pos","nativeSrc":"18904:3:69","nodeType":"YulTypedName","src":"18904:3:69","type":""}],"returnVariables":[{"name":"updatedPos","nativeSrc":"18912:10:69","nodeType":"YulTypedName","src":"18912:10:69","type":""}],"src":"18815:235:69"},{"body":{"nativeSrc":"19159:38:69","nodeType":"YulBlock","src":"19159:38:69","statements":[{"nativeSrc":"19169:22:69","nodeType":"YulAssignment","src":"19169:22:69","value":{"arguments":[{"name":"ptr","nativeSrc":"19181:3:69","nodeType":"YulIdentifier","src":"19181:3:69"},{"kind":"number","nativeSrc":"19186:4:69","nodeType":"YulLiteral","src":"19186:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"19177:3:69","nodeType":"YulIdentifier","src":"19177:3:69"},"nativeSrc":"19177:14:69","nodeType":"YulFunctionCall","src":"19177:14:69"},"variableNames":[{"name":"next","nativeSrc":"19169:4:69","nodeType":"YulIdentifier","src":"19169:4:69"}]}]},"name":"array_nextElement_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr","nativeSrc":"19056:141:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nativeSrc":"19146:3:69","nodeType":"YulTypedName","src":"19146:3:69","type":""}],"returnVariables":[{"name":"next","nativeSrc":"19154:4:69","nodeType":"YulTypedName","src":"19154:4:69","type":""}],"src":"19056:141:69"},{"body":{"nativeSrc":"19405:720:69","nodeType":"YulBlock","src":"19405:720:69","statements":[{"nativeSrc":"19415:96:69","nodeType":"YulVariableDeclaration","src":"19415:96:69","value":{"arguments":[{"name":"value","nativeSrc":"19505:5:69","nodeType":"YulIdentifier","src":"19505:5:69"}],"functionName":{"name":"array_length_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr","nativeSrc":"19429:75:69","nodeType":"YulIdentifier","src":"19429:75:69"},"nativeSrc":"19429:82:69","nodeType":"YulFunctionCall","src":"19429:82:69"},"variables":[{"name":"length","nativeSrc":"19419:6:69","nodeType":"YulTypedName","src":"19419:6:69","type":""}]},{"nativeSrc":"19520:93:69","nodeType":"YulAssignment","src":"19520:93:69","value":{"arguments":[{"name":"pos","nativeSrc":"19601:3:69","nodeType":"YulIdentifier","src":"19601:3:69"},{"name":"length","nativeSrc":"19606:6:69","nodeType":"YulIdentifier","src":"19606:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack","nativeSrc":"19527:73:69","nodeType":"YulIdentifier","src":"19527:73:69"},"nativeSrc":"19527:86:69","nodeType":"YulFunctionCall","src":"19527:86:69"},"variableNames":[{"name":"pos","nativeSrc":"19520:3:69","nodeType":"YulIdentifier","src":"19520:3:69"}]},{"nativeSrc":"19622:99:69","nodeType":"YulVariableDeclaration","src":"19622:99:69","value":{"arguments":[{"name":"value","nativeSrc":"19715:5:69","nodeType":"YulIdentifier","src":"19715:5:69"}],"functionName":{"name":"array_dataslot_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr","nativeSrc":"19637:77:69","nodeType":"YulIdentifier","src":"19637:77:69"},"nativeSrc":"19637:84:69","nodeType":"YulFunctionCall","src":"19637:84:69"},"variables":[{"name":"baseRef","nativeSrc":"19626:7:69","nodeType":"YulTypedName","src":"19626:7:69","type":""}]},{"nativeSrc":"19730:21:69","nodeType":"YulVariableDeclaration","src":"19730:21:69","value":{"name":"baseRef","nativeSrc":"19744:7:69","nodeType":"YulIdentifier","src":"19744:7:69"},"variables":[{"name":"srcPtr","nativeSrc":"19734:6:69","nodeType":"YulTypedName","src":"19734:6:69","type":""}]},{"body":{"nativeSrc":"19820:280:69","nodeType":"YulBlock","src":"19820:280:69","statements":[{"nativeSrc":"19834:34:69","nodeType":"YulVariableDeclaration","src":"19834:34:69","value":{"arguments":[{"name":"srcPtr","nativeSrc":"19861:6:69","nodeType":"YulIdentifier","src":"19861:6:69"}],"functionName":{"name":"mload","nativeSrc":"19855:5:69","nodeType":"YulIdentifier","src":"19855:5:69"},"nativeSrc":"19855:13:69","nodeType":"YulFunctionCall","src":"19855:13:69"},"variables":[{"name":"elementValue0","nativeSrc":"19838:13:69","nodeType":"YulTypedName","src":"19838:13:69","type":""}]},{"nativeSrc":"19881:98:69","nodeType":"YulAssignment","src":"19881:98:69","value":{"arguments":[{"name":"elementValue0","nativeSrc":"19960:13:69","nodeType":"YulIdentifier","src":"19960:13:69"},{"name":"pos","nativeSrc":"19975:3:69","nodeType":"YulIdentifier","src":"19975:3:69"}],"functionName":{"name":"abi_encodeUpdatedPos_t_contract$_RewardsDistributor_$12324_to_t_address","nativeSrc":"19888:71:69","nodeType":"YulIdentifier","src":"19888:71:69"},"nativeSrc":"19888:91:69","nodeType":"YulFunctionCall","src":"19888:91:69"},"variableNames":[{"name":"pos","nativeSrc":"19881:3:69","nodeType":"YulIdentifier","src":"19881:3:69"}]},{"nativeSrc":"19992:98:69","nodeType":"YulAssignment","src":"19992:98:69","value":{"arguments":[{"name":"srcPtr","nativeSrc":"20083:6:69","nodeType":"YulIdentifier","src":"20083:6:69"}],"functionName":{"name":"array_nextElement_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr","nativeSrc":"20002:80:69","nodeType":"YulIdentifier","src":"20002:80:69"},"nativeSrc":"20002:88:69","nodeType":"YulFunctionCall","src":"20002:88:69"},"variableNames":[{"name":"srcPtr","nativeSrc":"19992:6:69","nodeType":"YulIdentifier","src":"19992:6:69"}]}]},"condition":{"arguments":[{"name":"i","nativeSrc":"19782:1:69","nodeType":"YulIdentifier","src":"19782:1:69"},{"name":"length","nativeSrc":"19785:6:69","nodeType":"YulIdentifier","src":"19785:6:69"}],"functionName":{"name":"lt","nativeSrc":"19779:2:69","nodeType":"YulIdentifier","src":"19779:2:69"},"nativeSrc":"19779:13:69","nodeType":"YulFunctionCall","src":"19779:13:69"},"nativeSrc":"19760:340:69","nodeType":"YulForLoop","post":{"nativeSrc":"19793:18:69","nodeType":"YulBlock","src":"19793:18:69","statements":[{"nativeSrc":"19795:14:69","nodeType":"YulAssignment","src":"19795:14:69","value":{"arguments":[{"name":"i","nativeSrc":"19804:1:69","nodeType":"YulIdentifier","src":"19804:1:69"},{"kind":"number","nativeSrc":"19807:1:69","nodeType":"YulLiteral","src":"19807:1:69","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"19800:3:69","nodeType":"YulIdentifier","src":"19800:3:69"},"nativeSrc":"19800:9:69","nodeType":"YulFunctionCall","src":"19800:9:69"},"variableNames":[{"name":"i","nativeSrc":"19795:1:69","nodeType":"YulIdentifier","src":"19795:1:69"}]}]},"pre":{"nativeSrc":"19764:14:69","nodeType":"YulBlock","src":"19764:14:69","statements":[{"nativeSrc":"19766:10:69","nodeType":"YulVariableDeclaration","src":"19766:10:69","value":{"kind":"number","nativeSrc":"19775:1:69","nodeType":"YulLiteral","src":"19775:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"19770:1:69","nodeType":"YulTypedName","src":"19770:1:69","type":""}]}]},"src":"19760:340:69"},{"nativeSrc":"20109:10:69","nodeType":"YulAssignment","src":"20109:10:69","value":{"name":"pos","nativeSrc":"20116:3:69","nodeType":"YulIdentifier","src":"20116:3:69"},"variableNames":[{"name":"end","nativeSrc":"20109:3:69","nodeType":"YulIdentifier","src":"20109:3:69"}]}]},"name":"abi_encode_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack","nativeSrc":"19253:872:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"19384:5:69","nodeType":"YulTypedName","src":"19384:5:69","type":""},{"name":"pos","nativeSrc":"19391:3:69","nodeType":"YulTypedName","src":"19391:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"19400:3:69","nodeType":"YulTypedName","src":"19400:3:69","type":""}],"src":"19253:872:69"},{"body":{"nativeSrc":"20307:253:69","nodeType":"YulBlock","src":"20307:253:69","statements":[{"nativeSrc":"20317:26:69","nodeType":"YulAssignment","src":"20317:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"20329:9:69","nodeType":"YulIdentifier","src":"20329:9:69"},{"kind":"number","nativeSrc":"20340:2:69","nodeType":"YulLiteral","src":"20340:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"20325:3:69","nodeType":"YulIdentifier","src":"20325:3:69"},"nativeSrc":"20325:18:69","nodeType":"YulFunctionCall","src":"20325:18:69"},"variableNames":[{"name":"tail","nativeSrc":"20317:4:69","nodeType":"YulIdentifier","src":"20317:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"20364:9:69","nodeType":"YulIdentifier","src":"20364:9:69"},{"kind":"number","nativeSrc":"20375:1:69","nodeType":"YulLiteral","src":"20375:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"20360:3:69","nodeType":"YulIdentifier","src":"20360:3:69"},"nativeSrc":"20360:17:69","nodeType":"YulFunctionCall","src":"20360:17:69"},{"arguments":[{"name":"tail","nativeSrc":"20383:4:69","nodeType":"YulIdentifier","src":"20383:4:69"},{"name":"headStart","nativeSrc":"20389:9:69","nodeType":"YulIdentifier","src":"20389:9:69"}],"functionName":{"name":"sub","nativeSrc":"20379:3:69","nodeType":"YulIdentifier","src":"20379:3:69"},"nativeSrc":"20379:20:69","nodeType":"YulFunctionCall","src":"20379:20:69"}],"functionName":{"name":"mstore","nativeSrc":"20353:6:69","nodeType":"YulIdentifier","src":"20353:6:69"},"nativeSrc":"20353:47:69","nodeType":"YulFunctionCall","src":"20353:47:69"},"nativeSrc":"20353:47:69","nodeType":"YulExpressionStatement","src":"20353:47:69"},{"nativeSrc":"20409:144:69","nodeType":"YulAssignment","src":"20409:144:69","value":{"arguments":[{"name":"value0","nativeSrc":"20539:6:69","nodeType":"YulIdentifier","src":"20539:6:69"},{"name":"tail","nativeSrc":"20548:4:69","nodeType":"YulIdentifier","src":"20548:4:69"}],"functionName":{"name":"abi_encode_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack","nativeSrc":"20417:121:69","nodeType":"YulIdentifier","src":"20417:121:69"},"nativeSrc":"20417:136:69","nodeType":"YulFunctionCall","src":"20417:136:69"},"variableNames":[{"name":"tail","nativeSrc":"20409:4:69","nodeType":"YulIdentifier","src":"20409:4:69"}]}]},"name":"abi_encode_tuple_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nativeSrc":"20131:429:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"20279:9:69","nodeType":"YulTypedName","src":"20279:9:69","type":""},{"name":"value0","nativeSrc":"20291:6:69","nodeType":"YulTypedName","src":"20291:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"20302:4:69","nodeType":"YulTypedName","src":"20302:4:69","type":""}],"src":"20131:429:69"},{"body":{"nativeSrc":"20683:648:69","nodeType":"YulBlock","src":"20683:648:69","statements":[{"body":{"nativeSrc":"20730:83:69","nodeType":"YulBlock","src":"20730:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"20732:77:69","nodeType":"YulIdentifier","src":"20732:77:69"},"nativeSrc":"20732:79:69","nodeType":"YulFunctionCall","src":"20732:79:69"},"nativeSrc":"20732:79:69","nodeType":"YulExpressionStatement","src":"20732:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"20704:7:69","nodeType":"YulIdentifier","src":"20704:7:69"},{"name":"headStart","nativeSrc":"20713:9:69","nodeType":"YulIdentifier","src":"20713:9:69"}],"functionName":{"name":"sub","nativeSrc":"20700:3:69","nodeType":"YulIdentifier","src":"20700:3:69"},"nativeSrc":"20700:23:69","nodeType":"YulFunctionCall","src":"20700:23:69"},{"kind":"number","nativeSrc":"20725:3:69","nodeType":"YulLiteral","src":"20725:3:69","type":"","value":"128"}],"functionName":{"name":"slt","nativeSrc":"20696:3:69","nodeType":"YulIdentifier","src":"20696:3:69"},"nativeSrc":"20696:33:69","nodeType":"YulFunctionCall","src":"20696:33:69"},"nativeSrc":"20693:120:69","nodeType":"YulIf","src":"20693:120:69"},{"nativeSrc":"20823:117:69","nodeType":"YulBlock","src":"20823:117:69","statements":[{"nativeSrc":"20838:15:69","nodeType":"YulVariableDeclaration","src":"20838:15:69","value":{"kind":"number","nativeSrc":"20852:1:69","nodeType":"YulLiteral","src":"20852:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"20842:6:69","nodeType":"YulTypedName","src":"20842:6:69","type":""}]},{"nativeSrc":"20867:63:69","nodeType":"YulAssignment","src":"20867:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"20902:9:69","nodeType":"YulIdentifier","src":"20902:9:69"},{"name":"offset","nativeSrc":"20913:6:69","nodeType":"YulIdentifier","src":"20913:6:69"}],"functionName":{"name":"add","nativeSrc":"20898:3:69","nodeType":"YulIdentifier","src":"20898:3:69"},"nativeSrc":"20898:22:69","nodeType":"YulFunctionCall","src":"20898:22:69"},{"name":"dataEnd","nativeSrc":"20922:7:69","nodeType":"YulIdentifier","src":"20922:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"20877:20:69","nodeType":"YulIdentifier","src":"20877:20:69"},"nativeSrc":"20877:53:69","nodeType":"YulFunctionCall","src":"20877:53:69"},"variableNames":[{"name":"value0","nativeSrc":"20867:6:69","nodeType":"YulIdentifier","src":"20867:6:69"}]}]},{"nativeSrc":"20950:118:69","nodeType":"YulBlock","src":"20950:118:69","statements":[{"nativeSrc":"20965:16:69","nodeType":"YulVariableDeclaration","src":"20965:16:69","value":{"kind":"number","nativeSrc":"20979:2:69","nodeType":"YulLiteral","src":"20979:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"20969:6:69","nodeType":"YulTypedName","src":"20969:6:69","type":""}]},{"nativeSrc":"20995:63:69","nodeType":"YulAssignment","src":"20995:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"21030:9:69","nodeType":"YulIdentifier","src":"21030:9:69"},{"name":"offset","nativeSrc":"21041:6:69","nodeType":"YulIdentifier","src":"21041:6:69"}],"functionName":{"name":"add","nativeSrc":"21026:3:69","nodeType":"YulIdentifier","src":"21026:3:69"},"nativeSrc":"21026:22:69","nodeType":"YulFunctionCall","src":"21026:22:69"},{"name":"dataEnd","nativeSrc":"21050:7:69","nodeType":"YulIdentifier","src":"21050:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"21005:20:69","nodeType":"YulIdentifier","src":"21005:20:69"},"nativeSrc":"21005:53:69","nodeType":"YulFunctionCall","src":"21005:53:69"},"variableNames":[{"name":"value1","nativeSrc":"20995:6:69","nodeType":"YulIdentifier","src":"20995:6:69"}]}]},{"nativeSrc":"21078:118:69","nodeType":"YulBlock","src":"21078:118:69","statements":[{"nativeSrc":"21093:16:69","nodeType":"YulVariableDeclaration","src":"21093:16:69","value":{"kind":"number","nativeSrc":"21107:2:69","nodeType":"YulLiteral","src":"21107:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"21097:6:69","nodeType":"YulTypedName","src":"21097:6:69","type":""}]},{"nativeSrc":"21123:63:69","nodeType":"YulAssignment","src":"21123:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"21158:9:69","nodeType":"YulIdentifier","src":"21158:9:69"},{"name":"offset","nativeSrc":"21169:6:69","nodeType":"YulIdentifier","src":"21169:6:69"}],"functionName":{"name":"add","nativeSrc":"21154:3:69","nodeType":"YulIdentifier","src":"21154:3:69"},"nativeSrc":"21154:22:69","nodeType":"YulFunctionCall","src":"21154:22:69"},{"name":"dataEnd","nativeSrc":"21178:7:69","nodeType":"YulIdentifier","src":"21178:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"21133:20:69","nodeType":"YulIdentifier","src":"21133:20:69"},"nativeSrc":"21133:53:69","nodeType":"YulFunctionCall","src":"21133:53:69"},"variableNames":[{"name":"value2","nativeSrc":"21123:6:69","nodeType":"YulIdentifier","src":"21123:6:69"}]}]},{"nativeSrc":"21206:118:69","nodeType":"YulBlock","src":"21206:118:69","statements":[{"nativeSrc":"21221:16:69","nodeType":"YulVariableDeclaration","src":"21221:16:69","value":{"kind":"number","nativeSrc":"21235:2:69","nodeType":"YulLiteral","src":"21235:2:69","type":"","value":"96"},"variables":[{"name":"offset","nativeSrc":"21225:6:69","nodeType":"YulTypedName","src":"21225:6:69","type":""}]},{"nativeSrc":"21251:63:69","nodeType":"YulAssignment","src":"21251:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"21286:9:69","nodeType":"YulIdentifier","src":"21286:9:69"},{"name":"offset","nativeSrc":"21297:6:69","nodeType":"YulIdentifier","src":"21297:6:69"}],"functionName":{"name":"add","nativeSrc":"21282:3:69","nodeType":"YulIdentifier","src":"21282:3:69"},"nativeSrc":"21282:22:69","nodeType":"YulFunctionCall","src":"21282:22:69"},{"name":"dataEnd","nativeSrc":"21306:7:69","nodeType":"YulIdentifier","src":"21306:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"21261:20:69","nodeType":"YulIdentifier","src":"21261:20:69"},"nativeSrc":"21261:53:69","nodeType":"YulFunctionCall","src":"21261:53:69"},"variableNames":[{"name":"value3","nativeSrc":"21251:6:69","nodeType":"YulIdentifier","src":"21251:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_uint256","nativeSrc":"20566:765:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"20629:9:69","nodeType":"YulTypedName","src":"20629:9:69","type":""},{"name":"dataEnd","nativeSrc":"20640:7:69","nodeType":"YulTypedName","src":"20640:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"20652:6:69","nodeType":"YulTypedName","src":"20652:6:69","type":""},{"name":"value1","nativeSrc":"20660:6:69","nodeType":"YulTypedName","src":"20660:6:69","type":""},{"name":"value2","nativeSrc":"20668:6:69","nodeType":"YulTypedName","src":"20668:6:69","type":""},{"name":"value3","nativeSrc":"20676:6:69","nodeType":"YulTypedName","src":"20676:6:69","type":""}],"src":"20566:765:69"},{"body":{"nativeSrc":"21471:777:69","nodeType":"YulBlock","src":"21471:777:69","statements":[{"body":{"nativeSrc":"21518:83:69","nodeType":"YulBlock","src":"21518:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"21520:77:69","nodeType":"YulIdentifier","src":"21520:77:69"},"nativeSrc":"21520:79:69","nodeType":"YulFunctionCall","src":"21520:79:69"},"nativeSrc":"21520:79:69","nodeType":"YulExpressionStatement","src":"21520:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"21492:7:69","nodeType":"YulIdentifier","src":"21492:7:69"},{"name":"headStart","nativeSrc":"21501:9:69","nodeType":"YulIdentifier","src":"21501:9:69"}],"functionName":{"name":"sub","nativeSrc":"21488:3:69","nodeType":"YulIdentifier","src":"21488:3:69"},"nativeSrc":"21488:23:69","nodeType":"YulFunctionCall","src":"21488:23:69"},{"kind":"number","nativeSrc":"21513:3:69","nodeType":"YulLiteral","src":"21513:3:69","type":"","value":"160"}],"functionName":{"name":"slt","nativeSrc":"21484:3:69","nodeType":"YulIdentifier","src":"21484:3:69"},"nativeSrc":"21484:33:69","nodeType":"YulFunctionCall","src":"21484:33:69"},"nativeSrc":"21481:120:69","nodeType":"YulIf","src":"21481:120:69"},{"nativeSrc":"21611:117:69","nodeType":"YulBlock","src":"21611:117:69","statements":[{"nativeSrc":"21626:15:69","nodeType":"YulVariableDeclaration","src":"21626:15:69","value":{"kind":"number","nativeSrc":"21640:1:69","nodeType":"YulLiteral","src":"21640:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"21630:6:69","nodeType":"YulTypedName","src":"21630:6:69","type":""}]},{"nativeSrc":"21655:63:69","nodeType":"YulAssignment","src":"21655:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"21690:9:69","nodeType":"YulIdentifier","src":"21690:9:69"},{"name":"offset","nativeSrc":"21701:6:69","nodeType":"YulIdentifier","src":"21701:6:69"}],"functionName":{"name":"add","nativeSrc":"21686:3:69","nodeType":"YulIdentifier","src":"21686:3:69"},"nativeSrc":"21686:22:69","nodeType":"YulFunctionCall","src":"21686:22:69"},{"name":"dataEnd","nativeSrc":"21710:7:69","nodeType":"YulIdentifier","src":"21710:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"21665:20:69","nodeType":"YulIdentifier","src":"21665:20:69"},"nativeSrc":"21665:53:69","nodeType":"YulFunctionCall","src":"21665:53:69"},"variableNames":[{"name":"value0","nativeSrc":"21655:6:69","nodeType":"YulIdentifier","src":"21655:6:69"}]}]},{"nativeSrc":"21738:118:69","nodeType":"YulBlock","src":"21738:118:69","statements":[{"nativeSrc":"21753:16:69","nodeType":"YulVariableDeclaration","src":"21753:16:69","value":{"kind":"number","nativeSrc":"21767:2:69","nodeType":"YulLiteral","src":"21767:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"21757:6:69","nodeType":"YulTypedName","src":"21757:6:69","type":""}]},{"nativeSrc":"21783:63:69","nodeType":"YulAssignment","src":"21783:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"21818:9:69","nodeType":"YulIdentifier","src":"21818:9:69"},{"name":"offset","nativeSrc":"21829:6:69","nodeType":"YulIdentifier","src":"21829:6:69"}],"functionName":{"name":"add","nativeSrc":"21814:3:69","nodeType":"YulIdentifier","src":"21814:3:69"},"nativeSrc":"21814:22:69","nodeType":"YulFunctionCall","src":"21814:22:69"},{"name":"dataEnd","nativeSrc":"21838:7:69","nodeType":"YulIdentifier","src":"21838:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"21793:20:69","nodeType":"YulIdentifier","src":"21793:20:69"},"nativeSrc":"21793:53:69","nodeType":"YulFunctionCall","src":"21793:53:69"},"variableNames":[{"name":"value1","nativeSrc":"21783:6:69","nodeType":"YulIdentifier","src":"21783:6:69"}]}]},{"nativeSrc":"21866:118:69","nodeType":"YulBlock","src":"21866:118:69","statements":[{"nativeSrc":"21881:16:69","nodeType":"YulVariableDeclaration","src":"21881:16:69","value":{"kind":"number","nativeSrc":"21895:2:69","nodeType":"YulLiteral","src":"21895:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"21885:6:69","nodeType":"YulTypedName","src":"21885:6:69","type":""}]},{"nativeSrc":"21911:63:69","nodeType":"YulAssignment","src":"21911:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"21946:9:69","nodeType":"YulIdentifier","src":"21946:9:69"},{"name":"offset","nativeSrc":"21957:6:69","nodeType":"YulIdentifier","src":"21957:6:69"}],"functionName":{"name":"add","nativeSrc":"21942:3:69","nodeType":"YulIdentifier","src":"21942:3:69"},"nativeSrc":"21942:22:69","nodeType":"YulFunctionCall","src":"21942:22:69"},{"name":"dataEnd","nativeSrc":"21966:7:69","nodeType":"YulIdentifier","src":"21966:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"21921:20:69","nodeType":"YulIdentifier","src":"21921:20:69"},"nativeSrc":"21921:53:69","nodeType":"YulFunctionCall","src":"21921:53:69"},"variableNames":[{"name":"value2","nativeSrc":"21911:6:69","nodeType":"YulIdentifier","src":"21911:6:69"}]}]},{"nativeSrc":"21994:118:69","nodeType":"YulBlock","src":"21994:118:69","statements":[{"nativeSrc":"22009:16:69","nodeType":"YulVariableDeclaration","src":"22009:16:69","value":{"kind":"number","nativeSrc":"22023:2:69","nodeType":"YulLiteral","src":"22023:2:69","type":"","value":"96"},"variables":[{"name":"offset","nativeSrc":"22013:6:69","nodeType":"YulTypedName","src":"22013:6:69","type":""}]},{"nativeSrc":"22039:63:69","nodeType":"YulAssignment","src":"22039:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"22074:9:69","nodeType":"YulIdentifier","src":"22074:9:69"},{"name":"offset","nativeSrc":"22085:6:69","nodeType":"YulIdentifier","src":"22085:6:69"}],"functionName":{"name":"add","nativeSrc":"22070:3:69","nodeType":"YulIdentifier","src":"22070:3:69"},"nativeSrc":"22070:22:69","nodeType":"YulFunctionCall","src":"22070:22:69"},{"name":"dataEnd","nativeSrc":"22094:7:69","nodeType":"YulIdentifier","src":"22094:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"22049:20:69","nodeType":"YulIdentifier","src":"22049:20:69"},"nativeSrc":"22049:53:69","nodeType":"YulFunctionCall","src":"22049:53:69"},"variableNames":[{"name":"value3","nativeSrc":"22039:6:69","nodeType":"YulIdentifier","src":"22039:6:69"}]}]},{"nativeSrc":"22122:119:69","nodeType":"YulBlock","src":"22122:119:69","statements":[{"nativeSrc":"22137:17:69","nodeType":"YulVariableDeclaration","src":"22137:17:69","value":{"kind":"number","nativeSrc":"22151:3:69","nodeType":"YulLiteral","src":"22151:3:69","type":"","value":"128"},"variables":[{"name":"offset","nativeSrc":"22141:6:69","nodeType":"YulTypedName","src":"22141:6:69","type":""}]},{"nativeSrc":"22168:63:69","nodeType":"YulAssignment","src":"22168:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"22203:9:69","nodeType":"YulIdentifier","src":"22203:9:69"},{"name":"offset","nativeSrc":"22214:6:69","nodeType":"YulIdentifier","src":"22214:6:69"}],"functionName":{"name":"add","nativeSrc":"22199:3:69","nodeType":"YulIdentifier","src":"22199:3:69"},"nativeSrc":"22199:22:69","nodeType":"YulFunctionCall","src":"22199:22:69"},{"name":"dataEnd","nativeSrc":"22223:7:69","nodeType":"YulIdentifier","src":"22223:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"22178:20:69","nodeType":"YulIdentifier","src":"22178:20:69"},"nativeSrc":"22178:53:69","nodeType":"YulFunctionCall","src":"22178:53:69"},"variableNames":[{"name":"value4","nativeSrc":"22168:6:69","nodeType":"YulIdentifier","src":"22168:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_addresst_uint256","nativeSrc":"21337:911:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"21409:9:69","nodeType":"YulTypedName","src":"21409:9:69","type":""},{"name":"dataEnd","nativeSrc":"21420:7:69","nodeType":"YulTypedName","src":"21420:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"21432:6:69","nodeType":"YulTypedName","src":"21432:6:69","type":""},{"name":"value1","nativeSrc":"21440:6:69","nodeType":"YulTypedName","src":"21440:6:69","type":""},{"name":"value2","nativeSrc":"21448:6:69","nodeType":"YulTypedName","src":"21448:6:69","type":""},{"name":"value3","nativeSrc":"21456:6:69","nodeType":"YulTypedName","src":"21456:6:69","type":""},{"name":"value4","nativeSrc":"21464:6:69","nodeType":"YulTypedName","src":"21464:6:69","type":""}],"src":"21337:911:69"},{"body":{"nativeSrc":"22348:66:69","nodeType":"YulBlock","src":"22348:66:69","statements":[{"nativeSrc":"22358:50:69","nodeType":"YulAssignment","src":"22358:50:69","value":{"arguments":[{"name":"value","nativeSrc":"22402:5:69","nodeType":"YulIdentifier","src":"22402:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"22371:30:69","nodeType":"YulIdentifier","src":"22371:30:69"},"nativeSrc":"22371:37:69","nodeType":"YulFunctionCall","src":"22371:37:69"},"variableNames":[{"name":"converted","nativeSrc":"22358:9:69","nodeType":"YulIdentifier","src":"22358:9:69"}]}]},"name":"convert_t_contract$_ResilientOracleInterface_$16173_to_t_address","nativeSrc":"22254:160:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"22328:5:69","nodeType":"YulTypedName","src":"22328:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"22338:9:69","nodeType":"YulTypedName","src":"22338:9:69","type":""}],"src":"22254:160:69"},{"body":{"nativeSrc":"22519:100:69","nodeType":"YulBlock","src":"22519:100:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"22536:3:69","nodeType":"YulIdentifier","src":"22536:3:69"},{"arguments":[{"name":"value","nativeSrc":"22606:5:69","nodeType":"YulIdentifier","src":"22606:5:69"}],"functionName":{"name":"convert_t_contract$_ResilientOracleInterface_$16173_to_t_address","nativeSrc":"22541:64:69","nodeType":"YulIdentifier","src":"22541:64:69"},"nativeSrc":"22541:71:69","nodeType":"YulFunctionCall","src":"22541:71:69"}],"functionName":{"name":"mstore","nativeSrc":"22529:6:69","nodeType":"YulIdentifier","src":"22529:6:69"},"nativeSrc":"22529:84:69","nodeType":"YulFunctionCall","src":"22529:84:69"},"nativeSrc":"22529:84:69","nodeType":"YulExpressionStatement","src":"22529:84:69"}]},"name":"abi_encode_t_contract$_ResilientOracleInterface_$16173_to_t_address_fromStack","nativeSrc":"22420:199:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"22507:5:69","nodeType":"YulTypedName","src":"22507:5:69","type":""},{"name":"pos","nativeSrc":"22514:3:69","nodeType":"YulTypedName","src":"22514:3:69","type":""}],"src":"22420:199:69"},{"body":{"nativeSrc":"22757:158:69","nodeType":"YulBlock","src":"22757:158:69","statements":[{"nativeSrc":"22767:26:69","nodeType":"YulAssignment","src":"22767:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"22779:9:69","nodeType":"YulIdentifier","src":"22779:9:69"},{"kind":"number","nativeSrc":"22790:2:69","nodeType":"YulLiteral","src":"22790:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"22775:3:69","nodeType":"YulIdentifier","src":"22775:3:69"},"nativeSrc":"22775:18:69","nodeType":"YulFunctionCall","src":"22775:18:69"},"variableNames":[{"name":"tail","nativeSrc":"22767:4:69","nodeType":"YulIdentifier","src":"22767:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"22881:6:69","nodeType":"YulIdentifier","src":"22881:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"22894:9:69","nodeType":"YulIdentifier","src":"22894:9:69"},{"kind":"number","nativeSrc":"22905:1:69","nodeType":"YulLiteral","src":"22905:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"22890:3:69","nodeType":"YulIdentifier","src":"22890:3:69"},"nativeSrc":"22890:17:69","nodeType":"YulFunctionCall","src":"22890:17:69"}],"functionName":{"name":"abi_encode_t_contract$_ResilientOracleInterface_$16173_to_t_address_fromStack","nativeSrc":"22803:77:69","nodeType":"YulIdentifier","src":"22803:77:69"},"nativeSrc":"22803:105:69","nodeType":"YulFunctionCall","src":"22803:105:69"},"nativeSrc":"22803:105:69","nodeType":"YulExpressionStatement","src":"22803:105:69"}]},"name":"abi_encode_tuple_t_contract$_ResilientOracleInterface_$16173__to_t_address__fromStack_reversed","nativeSrc":"22625:290:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"22729:9:69","nodeType":"YulTypedName","src":"22729:9:69","type":""},{"name":"value0","nativeSrc":"22741:6:69","nodeType":"YulTypedName","src":"22741:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"22752:4:69","nodeType":"YulTypedName","src":"22752:4:69","type":""}],"src":"22625:290:69"},{"body":{"nativeSrc":"23001:388:69","nodeType":"YulBlock","src":"23001:388:69","statements":[{"body":{"nativeSrc":"23047:83:69","nodeType":"YulBlock","src":"23047:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"23049:77:69","nodeType":"YulIdentifier","src":"23049:77:69"},"nativeSrc":"23049:79:69","nodeType":"YulFunctionCall","src":"23049:79:69"},"nativeSrc":"23049:79:69","nodeType":"YulExpressionStatement","src":"23049:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"23022:7:69","nodeType":"YulIdentifier","src":"23022:7:69"},{"name":"headStart","nativeSrc":"23031:9:69","nodeType":"YulIdentifier","src":"23031:9:69"}],"functionName":{"name":"sub","nativeSrc":"23018:3:69","nodeType":"YulIdentifier","src":"23018:3:69"},"nativeSrc":"23018:23:69","nodeType":"YulFunctionCall","src":"23018:23:69"},{"kind":"number","nativeSrc":"23043:2:69","nodeType":"YulLiteral","src":"23043:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"23014:3:69","nodeType":"YulIdentifier","src":"23014:3:69"},"nativeSrc":"23014:32:69","nodeType":"YulFunctionCall","src":"23014:32:69"},"nativeSrc":"23011:119:69","nodeType":"YulIf","src":"23011:119:69"},{"nativeSrc":"23140:117:69","nodeType":"YulBlock","src":"23140:117:69","statements":[{"nativeSrc":"23155:15:69","nodeType":"YulVariableDeclaration","src":"23155:15:69","value":{"kind":"number","nativeSrc":"23169:1:69","nodeType":"YulLiteral","src":"23169:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"23159:6:69","nodeType":"YulTypedName","src":"23159:6:69","type":""}]},{"nativeSrc":"23184:63:69","nodeType":"YulAssignment","src":"23184:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"23219:9:69","nodeType":"YulIdentifier","src":"23219:9:69"},{"name":"offset","nativeSrc":"23230:6:69","nodeType":"YulIdentifier","src":"23230:6:69"}],"functionName":{"name":"add","nativeSrc":"23215:3:69","nodeType":"YulIdentifier","src":"23215:3:69"},"nativeSrc":"23215:22:69","nodeType":"YulFunctionCall","src":"23215:22:69"},{"name":"dataEnd","nativeSrc":"23239:7:69","nodeType":"YulIdentifier","src":"23239:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"23194:20:69","nodeType":"YulIdentifier","src":"23194:20:69"},"nativeSrc":"23194:53:69","nodeType":"YulFunctionCall","src":"23194:53:69"},"variableNames":[{"name":"value0","nativeSrc":"23184:6:69","nodeType":"YulIdentifier","src":"23184:6:69"}]}]},{"nativeSrc":"23267:115:69","nodeType":"YulBlock","src":"23267:115:69","statements":[{"nativeSrc":"23282:16:69","nodeType":"YulVariableDeclaration","src":"23282:16:69","value":{"kind":"number","nativeSrc":"23296:2:69","nodeType":"YulLiteral","src":"23296:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"23286:6:69","nodeType":"YulTypedName","src":"23286:6:69","type":""}]},{"nativeSrc":"23312:60:69","nodeType":"YulAssignment","src":"23312:60:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"23344:9:69","nodeType":"YulIdentifier","src":"23344:9:69"},{"name":"offset","nativeSrc":"23355:6:69","nodeType":"YulIdentifier","src":"23355:6:69"}],"functionName":{"name":"add","nativeSrc":"23340:3:69","nodeType":"YulIdentifier","src":"23340:3:69"},"nativeSrc":"23340:22:69","nodeType":"YulFunctionCall","src":"23340:22:69"},{"name":"dataEnd","nativeSrc":"23364:7:69","nodeType":"YulIdentifier","src":"23364:7:69"}],"functionName":{"name":"abi_decode_t_bool","nativeSrc":"23322:17:69","nodeType":"YulIdentifier","src":"23322:17:69"},"nativeSrc":"23322:50:69","nodeType":"YulFunctionCall","src":"23322:50:69"},"variableNames":[{"name":"value1","nativeSrc":"23312:6:69","nodeType":"YulIdentifier","src":"23312:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_bool","nativeSrc":"22921:468:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"22963:9:69","nodeType":"YulTypedName","src":"22963:9:69","type":""},{"name":"dataEnd","nativeSrc":"22974:7:69","nodeType":"YulTypedName","src":"22974:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"22986:6:69","nodeType":"YulTypedName","src":"22986:6:69","type":""},{"name":"value1","nativeSrc":"22994:6:69","nodeType":"YulTypedName","src":"22994:6:69","type":""}],"src":"22921:468:69"},{"body":{"nativeSrc":"23460:53:69","nodeType":"YulBlock","src":"23460:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"23477:3:69","nodeType":"YulIdentifier","src":"23477:3:69"},{"arguments":[{"name":"value","nativeSrc":"23500:5:69","nodeType":"YulIdentifier","src":"23500:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"23482:17:69","nodeType":"YulIdentifier","src":"23482:17:69"},"nativeSrc":"23482:24:69","nodeType":"YulFunctionCall","src":"23482:24:69"}],"functionName":{"name":"mstore","nativeSrc":"23470:6:69","nodeType":"YulIdentifier","src":"23470:6:69"},"nativeSrc":"23470:37:69","nodeType":"YulFunctionCall","src":"23470:37:69"},"nativeSrc":"23470:37:69","nodeType":"YulExpressionStatement","src":"23470:37:69"}]},"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"23395:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"23448:5:69","nodeType":"YulTypedName","src":"23448:5:69","type":""},{"name":"pos","nativeSrc":"23455:3:69","nodeType":"YulTypedName","src":"23455:3:69","type":""}],"src":"23395:118:69"},{"body":{"nativeSrc":"23617:124:69","nodeType":"YulBlock","src":"23617:124:69","statements":[{"nativeSrc":"23627:26:69","nodeType":"YulAssignment","src":"23627:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"23639:9:69","nodeType":"YulIdentifier","src":"23639:9:69"},{"kind":"number","nativeSrc":"23650:2:69","nodeType":"YulLiteral","src":"23650:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"23635:3:69","nodeType":"YulIdentifier","src":"23635:3:69"},"nativeSrc":"23635:18:69","nodeType":"YulFunctionCall","src":"23635:18:69"},"variableNames":[{"name":"tail","nativeSrc":"23627:4:69","nodeType":"YulIdentifier","src":"23627:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"23707:6:69","nodeType":"YulIdentifier","src":"23707:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"23720:9:69","nodeType":"YulIdentifier","src":"23720:9:69"},{"kind":"number","nativeSrc":"23731:1:69","nodeType":"YulLiteral","src":"23731:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"23716:3:69","nodeType":"YulIdentifier","src":"23716:3:69"},"nativeSrc":"23716:17:69","nodeType":"YulFunctionCall","src":"23716:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"23663:43:69","nodeType":"YulIdentifier","src":"23663:43:69"},"nativeSrc":"23663:71:69","nodeType":"YulFunctionCall","src":"23663:71:69"},"nativeSrc":"23663:71:69","nodeType":"YulExpressionStatement","src":"23663:71:69"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"23519:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"23589:9:69","nodeType":"YulTypedName","src":"23589:9:69","type":""},{"name":"value0","nativeSrc":"23601:6:69","nodeType":"YulTypedName","src":"23601:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"23612:4:69","nodeType":"YulTypedName","src":"23612:4:69","type":""}],"src":"23519:222:69"},{"body":{"nativeSrc":"23895:282:69","nodeType":"YulBlock","src":"23895:282:69","statements":[{"nativeSrc":"23905:26:69","nodeType":"YulAssignment","src":"23905:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"23917:9:69","nodeType":"YulIdentifier","src":"23917:9:69"},{"kind":"number","nativeSrc":"23928:2:69","nodeType":"YulLiteral","src":"23928:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"23913:3:69","nodeType":"YulIdentifier","src":"23913:3:69"},"nativeSrc":"23913:18:69","nodeType":"YulFunctionCall","src":"23913:18:69"},"variableNames":[{"name":"tail","nativeSrc":"23905:4:69","nodeType":"YulIdentifier","src":"23905:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"23979:6:69","nodeType":"YulIdentifier","src":"23979:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"23992:9:69","nodeType":"YulIdentifier","src":"23992:9:69"},{"kind":"number","nativeSrc":"24003:1:69","nodeType":"YulLiteral","src":"24003:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"23988:3:69","nodeType":"YulIdentifier","src":"23988:3:69"},"nativeSrc":"23988:17:69","nodeType":"YulFunctionCall","src":"23988:17:69"}],"functionName":{"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"23941:37:69","nodeType":"YulIdentifier","src":"23941:37:69"},"nativeSrc":"23941:65:69","nodeType":"YulFunctionCall","src":"23941:65:69"},"nativeSrc":"23941:65:69","nodeType":"YulExpressionStatement","src":"23941:65:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"24060:6:69","nodeType":"YulIdentifier","src":"24060:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"24073:9:69","nodeType":"YulIdentifier","src":"24073:9:69"},{"kind":"number","nativeSrc":"24084:2:69","nodeType":"YulLiteral","src":"24084:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"24069:3:69","nodeType":"YulIdentifier","src":"24069:3:69"},"nativeSrc":"24069:18:69","nodeType":"YulFunctionCall","src":"24069:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"24016:43:69","nodeType":"YulIdentifier","src":"24016:43:69"},"nativeSrc":"24016:72:69","nodeType":"YulFunctionCall","src":"24016:72:69"},"nativeSrc":"24016:72:69","nodeType":"YulExpressionStatement","src":"24016:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"24142:6:69","nodeType":"YulIdentifier","src":"24142:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"24155:9:69","nodeType":"YulIdentifier","src":"24155:9:69"},{"kind":"number","nativeSrc":"24166:2:69","nodeType":"YulLiteral","src":"24166:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"24151:3:69","nodeType":"YulIdentifier","src":"24151:3:69"},"nativeSrc":"24151:18:69","nodeType":"YulFunctionCall","src":"24151:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"24098:43:69","nodeType":"YulIdentifier","src":"24098:43:69"},"nativeSrc":"24098:72:69","nodeType":"YulFunctionCall","src":"24098:72:69"},"nativeSrc":"24098:72:69","nodeType":"YulExpressionStatement","src":"24098:72:69"}]},"name":"abi_encode_tuple_t_bool_t_uint256_t_uint256__to_t_bool_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"23747:430:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"23851:9:69","nodeType":"YulTypedName","src":"23851:9:69","type":""},{"name":"value2","nativeSrc":"23863:6:69","nodeType":"YulTypedName","src":"23863:6:69","type":""},{"name":"value1","nativeSrc":"23871:6:69","nodeType":"YulTypedName","src":"23871:6:69","type":""},{"name":"value0","nativeSrc":"23879:6:69","nodeType":"YulTypedName","src":"23879:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"23890:4:69","nodeType":"YulTypedName","src":"23890:4:69","type":""}],"src":"23747:430:69"},{"body":{"nativeSrc":"24282:407:69","nodeType":"YulBlock","src":"24282:407:69","statements":[{"body":{"nativeSrc":"24328:83:69","nodeType":"YulBlock","src":"24328:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"24330:77:69","nodeType":"YulIdentifier","src":"24330:77:69"},"nativeSrc":"24330:79:69","nodeType":"YulFunctionCall","src":"24330:79:69"},"nativeSrc":"24330:79:69","nodeType":"YulExpressionStatement","src":"24330:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"24303:7:69","nodeType":"YulIdentifier","src":"24303:7:69"},{"name":"headStart","nativeSrc":"24312:9:69","nodeType":"YulIdentifier","src":"24312:9:69"}],"functionName":{"name":"sub","nativeSrc":"24299:3:69","nodeType":"YulIdentifier","src":"24299:3:69"},"nativeSrc":"24299:23:69","nodeType":"YulFunctionCall","src":"24299:23:69"},{"kind":"number","nativeSrc":"24324:2:69","nodeType":"YulLiteral","src":"24324:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"24295:3:69","nodeType":"YulIdentifier","src":"24295:3:69"},"nativeSrc":"24295:32:69","nodeType":"YulFunctionCall","src":"24295:32:69"},"nativeSrc":"24292:119:69","nodeType":"YulIf","src":"24292:119:69"},{"nativeSrc":"24421:117:69","nodeType":"YulBlock","src":"24421:117:69","statements":[{"nativeSrc":"24436:15:69","nodeType":"YulVariableDeclaration","src":"24436:15:69","value":{"kind":"number","nativeSrc":"24450:1:69","nodeType":"YulLiteral","src":"24450:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"24440:6:69","nodeType":"YulTypedName","src":"24440:6:69","type":""}]},{"nativeSrc":"24465:63:69","nodeType":"YulAssignment","src":"24465:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"24500:9:69","nodeType":"YulIdentifier","src":"24500:9:69"},{"name":"offset","nativeSrc":"24511:6:69","nodeType":"YulIdentifier","src":"24511:6:69"}],"functionName":{"name":"add","nativeSrc":"24496:3:69","nodeType":"YulIdentifier","src":"24496:3:69"},"nativeSrc":"24496:22:69","nodeType":"YulFunctionCall","src":"24496:22:69"},{"name":"dataEnd","nativeSrc":"24520:7:69","nodeType":"YulIdentifier","src":"24520:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"24475:20:69","nodeType":"YulIdentifier","src":"24475:20:69"},"nativeSrc":"24475:53:69","nodeType":"YulFunctionCall","src":"24475:53:69"},"variableNames":[{"name":"value0","nativeSrc":"24465:6:69","nodeType":"YulIdentifier","src":"24465:6:69"}]}]},{"nativeSrc":"24548:134:69","nodeType":"YulBlock","src":"24548:134:69","statements":[{"nativeSrc":"24563:16:69","nodeType":"YulVariableDeclaration","src":"24563:16:69","value":{"kind":"number","nativeSrc":"24577:2:69","nodeType":"YulLiteral","src":"24577:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"24567:6:69","nodeType":"YulTypedName","src":"24567:6:69","type":""}]},{"nativeSrc":"24593:79:69","nodeType":"YulAssignment","src":"24593:79:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"24644:9:69","nodeType":"YulIdentifier","src":"24644:9:69"},{"name":"offset","nativeSrc":"24655:6:69","nodeType":"YulIdentifier","src":"24655:6:69"}],"functionName":{"name":"add","nativeSrc":"24640:3:69","nodeType":"YulIdentifier","src":"24640:3:69"},"nativeSrc":"24640:22:69","nodeType":"YulFunctionCall","src":"24640:22:69"},{"name":"dataEnd","nativeSrc":"24664:7:69","nodeType":"YulIdentifier","src":"24664:7:69"}],"functionName":{"name":"abi_decode_t_contract$_VToken_$15506","nativeSrc":"24603:36:69","nodeType":"YulIdentifier","src":"24603:36:69"},"nativeSrc":"24603:69:69","nodeType":"YulFunctionCall","src":"24603:69:69"},"variableNames":[{"name":"value1","nativeSrc":"24593:6:69","nodeType":"YulIdentifier","src":"24593:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_contract$_VToken_$15506","nativeSrc":"24183:506:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"24244:9:69","nodeType":"YulTypedName","src":"24244:9:69","type":""},{"name":"dataEnd","nativeSrc":"24255:7:69","nodeType":"YulTypedName","src":"24255:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"24267:6:69","nodeType":"YulTypedName","src":"24267:6:69","type":""},{"name":"value1","nativeSrc":"24275:6:69","nodeType":"YulTypedName","src":"24275:6:69","type":""}],"src":"24183:506:69"},{"body":{"nativeSrc":"24785:40:69","nodeType":"YulBlock","src":"24785:40:69","statements":[{"nativeSrc":"24796:22:69","nodeType":"YulAssignment","src":"24796:22:69","value":{"arguments":[{"name":"value","nativeSrc":"24812:5:69","nodeType":"YulIdentifier","src":"24812:5:69"}],"functionName":{"name":"mload","nativeSrc":"24806:5:69","nodeType":"YulIdentifier","src":"24806:5:69"},"nativeSrc":"24806:12:69","nodeType":"YulFunctionCall","src":"24806:12:69"},"variableNames":[{"name":"length","nativeSrc":"24796:6:69","nodeType":"YulIdentifier","src":"24796:6:69"}]}]},"name":"array_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"24695:130:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"24768:5:69","nodeType":"YulTypedName","src":"24768:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"24778:6:69","nodeType":"YulTypedName","src":"24778:6:69","type":""}],"src":"24695:130:69"},{"body":{"nativeSrc":"24919:60:69","nodeType":"YulBlock","src":"24919:60:69","statements":[{"nativeSrc":"24929:11:69","nodeType":"YulAssignment","src":"24929:11:69","value":{"name":"ptr","nativeSrc":"24937:3:69","nodeType":"YulIdentifier","src":"24937:3:69"},"variableNames":[{"name":"data","nativeSrc":"24929:4:69","nodeType":"YulIdentifier","src":"24929:4:69"}]},{"nativeSrc":"24950:22:69","nodeType":"YulAssignment","src":"24950:22:69","value":{"arguments":[{"name":"ptr","nativeSrc":"24962:3:69","nodeType":"YulIdentifier","src":"24962:3:69"},{"kind":"number","nativeSrc":"24967:4:69","nodeType":"YulLiteral","src":"24967:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"24958:3:69","nodeType":"YulIdentifier","src":"24958:3:69"},"nativeSrc":"24958:14:69","nodeType":"YulFunctionCall","src":"24958:14:69"},"variableNames":[{"name":"data","nativeSrc":"24950:4:69","nodeType":"YulIdentifier","src":"24950:4:69"}]}]},"name":"array_dataslot_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"24831:148:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nativeSrc":"24906:3:69","nodeType":"YulTypedName","src":"24906:3:69","type":""}],"returnVariables":[{"name":"data","nativeSrc":"24914:4:69","nodeType":"YulTypedName","src":"24914:4:69","type":""}],"src":"24831:148:69"},{"body":{"nativeSrc":"25056:82:69","nodeType":"YulBlock","src":"25056:82:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"25073:3:69","nodeType":"YulIdentifier","src":"25073:3:69"},{"arguments":[{"name":"value","nativeSrc":"25125:5:69","nodeType":"YulIdentifier","src":"25125:5:69"}],"functionName":{"name":"convert_t_contract$_VToken_$15506_to_t_address","nativeSrc":"25078:46:69","nodeType":"YulIdentifier","src":"25078:46:69"},"nativeSrc":"25078:53:69","nodeType":"YulFunctionCall","src":"25078:53:69"}],"functionName":{"name":"mstore","nativeSrc":"25066:6:69","nodeType":"YulIdentifier","src":"25066:6:69"},"nativeSrc":"25066:66:69","nodeType":"YulFunctionCall","src":"25066:66:69"},"nativeSrc":"25066:66:69","nodeType":"YulExpressionStatement","src":"25066:66:69"}]},"name":"abi_encode_t_contract$_VToken_$15506_to_t_address","nativeSrc":"24985:153:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"25044:5:69","nodeType":"YulTypedName","src":"25044:5:69","type":""},{"name":"pos","nativeSrc":"25051:3:69","nodeType":"YulTypedName","src":"25051:3:69","type":""}],"src":"24985:153:69"},{"body":{"nativeSrc":"25240:115:69","nodeType":"YulBlock","src":"25240:115:69","statements":[{"expression":{"arguments":[{"name":"value0","nativeSrc":"25300:6:69","nodeType":"YulIdentifier","src":"25300:6:69"},{"name":"pos","nativeSrc":"25308:3:69","nodeType":"YulIdentifier","src":"25308:3:69"}],"functionName":{"name":"abi_encode_t_contract$_VToken_$15506_to_t_address","nativeSrc":"25250:49:69","nodeType":"YulIdentifier","src":"25250:49:69"},"nativeSrc":"25250:62:69","nodeType":"YulFunctionCall","src":"25250:62:69"},"nativeSrc":"25250:62:69","nodeType":"YulExpressionStatement","src":"25250:62:69"},{"nativeSrc":"25321:28:69","nodeType":"YulAssignment","src":"25321:28:69","value":{"arguments":[{"name":"pos","nativeSrc":"25339:3:69","nodeType":"YulIdentifier","src":"25339:3:69"},{"kind":"number","nativeSrc":"25344:4:69","nodeType":"YulLiteral","src":"25344:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"25335:3:69","nodeType":"YulIdentifier","src":"25335:3:69"},"nativeSrc":"25335:14:69","nodeType":"YulFunctionCall","src":"25335:14:69"},"variableNames":[{"name":"updatedPos","nativeSrc":"25321:10:69","nodeType":"YulIdentifier","src":"25321:10:69"}]}]},"name":"abi_encodeUpdatedPos_t_contract$_VToken_$15506_to_t_address","nativeSrc":"25144:211:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value0","nativeSrc":"25213:6:69","nodeType":"YulTypedName","src":"25213:6:69","type":""},{"name":"pos","nativeSrc":"25221:3:69","nodeType":"YulTypedName","src":"25221:3:69","type":""}],"returnVariables":[{"name":"updatedPos","nativeSrc":"25229:10:69","nodeType":"YulTypedName","src":"25229:10:69","type":""}],"src":"25144:211:69"},{"body":{"nativeSrc":"25452:38:69","nodeType":"YulBlock","src":"25452:38:69","statements":[{"nativeSrc":"25462:22:69","nodeType":"YulAssignment","src":"25462:22:69","value":{"arguments":[{"name":"ptr","nativeSrc":"25474:3:69","nodeType":"YulIdentifier","src":"25474:3:69"},{"kind":"number","nativeSrc":"25479:4:69","nodeType":"YulLiteral","src":"25479:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"25470:3:69","nodeType":"YulIdentifier","src":"25470:3:69"},"nativeSrc":"25470:14:69","nodeType":"YulFunctionCall","src":"25470:14:69"},"variableNames":[{"name":"next","nativeSrc":"25462:4:69","nodeType":"YulIdentifier","src":"25462:4:69"}]}]},"name":"array_nextElement_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"25361:129:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nativeSrc":"25439:3:69","nodeType":"YulTypedName","src":"25439:3:69","type":""}],"returnVariables":[{"name":"next","nativeSrc":"25447:4:69","nodeType":"YulTypedName","src":"25447:4:69","type":""}],"src":"25361:129:69"},{"body":{"nativeSrc":"25674:672:69","nodeType":"YulBlock","src":"25674:672:69","statements":[{"nativeSrc":"25684:84:69","nodeType":"YulVariableDeclaration","src":"25684:84:69","value":{"arguments":[{"name":"value","nativeSrc":"25762:5:69","nodeType":"YulIdentifier","src":"25762:5:69"}],"functionName":{"name":"array_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"25698:63:69","nodeType":"YulIdentifier","src":"25698:63:69"},"nativeSrc":"25698:70:69","nodeType":"YulFunctionCall","src":"25698:70:69"},"variables":[{"name":"length","nativeSrc":"25688:6:69","nodeType":"YulTypedName","src":"25688:6:69","type":""}]},{"nativeSrc":"25777:93:69","nodeType":"YulAssignment","src":"25777:93:69","value":{"arguments":[{"name":"pos","nativeSrc":"25858:3:69","nodeType":"YulIdentifier","src":"25858:3:69"},{"name":"length","nativeSrc":"25863:6:69","nodeType":"YulIdentifier","src":"25863:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack","nativeSrc":"25784:73:69","nodeType":"YulIdentifier","src":"25784:73:69"},"nativeSrc":"25784:86:69","nodeType":"YulFunctionCall","src":"25784:86:69"},"variableNames":[{"name":"pos","nativeSrc":"25777:3:69","nodeType":"YulIdentifier","src":"25777:3:69"}]},{"nativeSrc":"25879:87:69","nodeType":"YulVariableDeclaration","src":"25879:87:69","value":{"arguments":[{"name":"value","nativeSrc":"25960:5:69","nodeType":"YulIdentifier","src":"25960:5:69"}],"functionName":{"name":"array_dataslot_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"25894:65:69","nodeType":"YulIdentifier","src":"25894:65:69"},"nativeSrc":"25894:72:69","nodeType":"YulFunctionCall","src":"25894:72:69"},"variables":[{"name":"baseRef","nativeSrc":"25883:7:69","nodeType":"YulTypedName","src":"25883:7:69","type":""}]},{"nativeSrc":"25975:21:69","nodeType":"YulVariableDeclaration","src":"25975:21:69","value":{"name":"baseRef","nativeSrc":"25989:7:69","nodeType":"YulIdentifier","src":"25989:7:69"},"variables":[{"name":"srcPtr","nativeSrc":"25979:6:69","nodeType":"YulTypedName","src":"25979:6:69","type":""}]},{"body":{"nativeSrc":"26065:256:69","nodeType":"YulBlock","src":"26065:256:69","statements":[{"nativeSrc":"26079:34:69","nodeType":"YulVariableDeclaration","src":"26079:34:69","value":{"arguments":[{"name":"srcPtr","nativeSrc":"26106:6:69","nodeType":"YulIdentifier","src":"26106:6:69"}],"functionName":{"name":"mload","nativeSrc":"26100:5:69","nodeType":"YulIdentifier","src":"26100:5:69"},"nativeSrc":"26100:13:69","nodeType":"YulFunctionCall","src":"26100:13:69"},"variables":[{"name":"elementValue0","nativeSrc":"26083:13:69","nodeType":"YulTypedName","src":"26083:13:69","type":""}]},{"nativeSrc":"26126:86:69","nodeType":"YulAssignment","src":"26126:86:69","value":{"arguments":[{"name":"elementValue0","nativeSrc":"26193:13:69","nodeType":"YulIdentifier","src":"26193:13:69"},{"name":"pos","nativeSrc":"26208:3:69","nodeType":"YulIdentifier","src":"26208:3:69"}],"functionName":{"name":"abi_encodeUpdatedPos_t_contract$_VToken_$15506_to_t_address","nativeSrc":"26133:59:69","nodeType":"YulIdentifier","src":"26133:59:69"},"nativeSrc":"26133:79:69","nodeType":"YulFunctionCall","src":"26133:79:69"},"variableNames":[{"name":"pos","nativeSrc":"26126:3:69","nodeType":"YulIdentifier","src":"26126:3:69"}]},{"nativeSrc":"26225:86:69","nodeType":"YulAssignment","src":"26225:86:69","value":{"arguments":[{"name":"srcPtr","nativeSrc":"26304:6:69","nodeType":"YulIdentifier","src":"26304:6:69"}],"functionName":{"name":"array_nextElement_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"26235:68:69","nodeType":"YulIdentifier","src":"26235:68:69"},"nativeSrc":"26235:76:69","nodeType":"YulFunctionCall","src":"26235:76:69"},"variableNames":[{"name":"srcPtr","nativeSrc":"26225:6:69","nodeType":"YulIdentifier","src":"26225:6:69"}]}]},"condition":{"arguments":[{"name":"i","nativeSrc":"26027:1:69","nodeType":"YulIdentifier","src":"26027:1:69"},{"name":"length","nativeSrc":"26030:6:69","nodeType":"YulIdentifier","src":"26030:6:69"}],"functionName":{"name":"lt","nativeSrc":"26024:2:69","nodeType":"YulIdentifier","src":"26024:2:69"},"nativeSrc":"26024:13:69","nodeType":"YulFunctionCall","src":"26024:13:69"},"nativeSrc":"26005:316:69","nodeType":"YulForLoop","post":{"nativeSrc":"26038:18:69","nodeType":"YulBlock","src":"26038:18:69","statements":[{"nativeSrc":"26040:14:69","nodeType":"YulAssignment","src":"26040:14:69","value":{"arguments":[{"name":"i","nativeSrc":"26049:1:69","nodeType":"YulIdentifier","src":"26049:1:69"},{"kind":"number","nativeSrc":"26052:1:69","nodeType":"YulLiteral","src":"26052:1:69","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"26045:3:69","nodeType":"YulIdentifier","src":"26045:3:69"},"nativeSrc":"26045:9:69","nodeType":"YulFunctionCall","src":"26045:9:69"},"variableNames":[{"name":"i","nativeSrc":"26040:1:69","nodeType":"YulIdentifier","src":"26040:1:69"}]}]},"pre":{"nativeSrc":"26009:14:69","nodeType":"YulBlock","src":"26009:14:69","statements":[{"nativeSrc":"26011:10:69","nodeType":"YulVariableDeclaration","src":"26011:10:69","value":{"kind":"number","nativeSrc":"26020:1:69","nodeType":"YulLiteral","src":"26020:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"26015:1:69","nodeType":"YulTypedName","src":"26015:1:69","type":""}]}]},"src":"26005:316:69"},{"nativeSrc":"26330:10:69","nodeType":"YulAssignment","src":"26330:10:69","value":{"name":"pos","nativeSrc":"26337:3:69","nodeType":"YulIdentifier","src":"26337:3:69"},"variableNames":[{"name":"end","nativeSrc":"26330:3:69","nodeType":"YulIdentifier","src":"26330:3:69"}]}]},"name":"abi_encode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack","nativeSrc":"25534:812:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"25653:5:69","nodeType":"YulTypedName","src":"25653:5:69","type":""},{"name":"pos","nativeSrc":"25660:3:69","nodeType":"YulTypedName","src":"25660:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"25669:3:69","nodeType":"YulTypedName","src":"25669:3:69","type":""}],"src":"25534:812:69"},{"body":{"nativeSrc":"26516:241:69","nodeType":"YulBlock","src":"26516:241:69","statements":[{"nativeSrc":"26526:26:69","nodeType":"YulAssignment","src":"26526:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"26538:9:69","nodeType":"YulIdentifier","src":"26538:9:69"},{"kind":"number","nativeSrc":"26549:2:69","nodeType":"YulLiteral","src":"26549:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"26534:3:69","nodeType":"YulIdentifier","src":"26534:3:69"},"nativeSrc":"26534:18:69","nodeType":"YulFunctionCall","src":"26534:18:69"},"variableNames":[{"name":"tail","nativeSrc":"26526:4:69","nodeType":"YulIdentifier","src":"26526:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"26573:9:69","nodeType":"YulIdentifier","src":"26573:9:69"},{"kind":"number","nativeSrc":"26584:1:69","nodeType":"YulLiteral","src":"26584:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"26569:3:69","nodeType":"YulIdentifier","src":"26569:3:69"},"nativeSrc":"26569:17:69","nodeType":"YulFunctionCall","src":"26569:17:69"},{"arguments":[{"name":"tail","nativeSrc":"26592:4:69","nodeType":"YulIdentifier","src":"26592:4:69"},{"name":"headStart","nativeSrc":"26598:9:69","nodeType":"YulIdentifier","src":"26598:9:69"}],"functionName":{"name":"sub","nativeSrc":"26588:3:69","nodeType":"YulIdentifier","src":"26588:3:69"},"nativeSrc":"26588:20:69","nodeType":"YulFunctionCall","src":"26588:20:69"}],"functionName":{"name":"mstore","nativeSrc":"26562:6:69","nodeType":"YulIdentifier","src":"26562:6:69"},"nativeSrc":"26562:47:69","nodeType":"YulFunctionCall","src":"26562:47:69"},"nativeSrc":"26562:47:69","nodeType":"YulExpressionStatement","src":"26562:47:69"},{"nativeSrc":"26618:132:69","nodeType":"YulAssignment","src":"26618:132:69","value":{"arguments":[{"name":"value0","nativeSrc":"26736:6:69","nodeType":"YulIdentifier","src":"26736:6:69"},{"name":"tail","nativeSrc":"26745:4:69","nodeType":"YulIdentifier","src":"26745:4:69"}],"functionName":{"name":"abi_encode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack","nativeSrc":"26626:109:69","nodeType":"YulIdentifier","src":"26626:109:69"},"nativeSrc":"26626:124:69","nodeType":"YulFunctionCall","src":"26626:124:69"},"variableNames":[{"name":"tail","nativeSrc":"26618:4:69","nodeType":"YulIdentifier","src":"26618:4:69"}]}]},"name":"abi_encode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nativeSrc":"26352:405:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"26488:9:69","nodeType":"YulTypedName","src":"26488:9:69","type":""},{"name":"value0","nativeSrc":"26500:6:69","nodeType":"YulTypedName","src":"26500:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"26511:4:69","nodeType":"YulTypedName","src":"26511:4:69","type":""}],"src":"26352:405:69"},{"body":{"nativeSrc":"26867:40:69","nodeType":"YulBlock","src":"26867:40:69","statements":[{"nativeSrc":"26878:22:69","nodeType":"YulAssignment","src":"26878:22:69","value":{"arguments":[{"name":"value","nativeSrc":"26894:5:69","nodeType":"YulIdentifier","src":"26894:5:69"}],"functionName":{"name":"mload","nativeSrc":"26888:5:69","nodeType":"YulIdentifier","src":"26888:5:69"},"nativeSrc":"26888:12:69","nodeType":"YulFunctionCall","src":"26888:12:69"},"variableNames":[{"name":"length","nativeSrc":"26878:6:69","nodeType":"YulIdentifier","src":"26878:6:69"}]}]},"name":"array_length_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr","nativeSrc":"26763:144:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"26850:5:69","nodeType":"YulTypedName","src":"26850:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"26860:6:69","nodeType":"YulTypedName","src":"26860:6:69","type":""}],"src":"26763:144:69"},{"body":{"nativeSrc":"27054:73:69","nodeType":"YulBlock","src":"27054:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"27071:3:69","nodeType":"YulIdentifier","src":"27071:3:69"},{"name":"length","nativeSrc":"27076:6:69","nodeType":"YulIdentifier","src":"27076:6:69"}],"functionName":{"name":"mstore","nativeSrc":"27064:6:69","nodeType":"YulIdentifier","src":"27064:6:69"},"nativeSrc":"27064:19:69","nodeType":"YulFunctionCall","src":"27064:19:69"},"nativeSrc":"27064:19:69","nodeType":"YulExpressionStatement","src":"27064:19:69"},{"nativeSrc":"27092:29:69","nodeType":"YulAssignment","src":"27092:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"27111:3:69","nodeType":"YulIdentifier","src":"27111:3:69"},{"kind":"number","nativeSrc":"27116:4:69","nodeType":"YulLiteral","src":"27116:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"27107:3:69","nodeType":"YulIdentifier","src":"27107:3:69"},"nativeSrc":"27107:14:69","nodeType":"YulFunctionCall","src":"27107:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"27092:11:69","nodeType":"YulIdentifier","src":"27092:11:69"}]}]},"name":"array_storeLengthForEncoding_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr_fromStack","nativeSrc":"26913:214:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"27026:3:69","nodeType":"YulTypedName","src":"27026:3:69","type":""},{"name":"length","nativeSrc":"27031:6:69","nodeType":"YulTypedName","src":"27031:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"27042:11:69","nodeType":"YulTypedName","src":"27042:11:69","type":""}],"src":"26913:214:69"},{"body":{"nativeSrc":"27235:60:69","nodeType":"YulBlock","src":"27235:60:69","statements":[{"nativeSrc":"27245:11:69","nodeType":"YulAssignment","src":"27245:11:69","value":{"name":"ptr","nativeSrc":"27253:3:69","nodeType":"YulIdentifier","src":"27253:3:69"},"variableNames":[{"name":"data","nativeSrc":"27245:4:69","nodeType":"YulIdentifier","src":"27245:4:69"}]},{"nativeSrc":"27266:22:69","nodeType":"YulAssignment","src":"27266:22:69","value":{"arguments":[{"name":"ptr","nativeSrc":"27278:3:69","nodeType":"YulIdentifier","src":"27278:3:69"},{"kind":"number","nativeSrc":"27283:4:69","nodeType":"YulLiteral","src":"27283:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"27274:3:69","nodeType":"YulIdentifier","src":"27274:3:69"},"nativeSrc":"27274:14:69","nodeType":"YulFunctionCall","src":"27274:14:69"},"variableNames":[{"name":"data","nativeSrc":"27266:4:69","nodeType":"YulIdentifier","src":"27266:4:69"}]}]},"name":"array_dataslot_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr","nativeSrc":"27133:162:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nativeSrc":"27222:3:69","nodeType":"YulTypedName","src":"27222:3:69","type":""}],"returnVariables":[{"name":"data","nativeSrc":"27230:4:69","nodeType":"YulTypedName","src":"27230:4:69","type":""}],"src":"27133:162:69"},{"body":{"nativeSrc":"27356:53:69","nodeType":"YulBlock","src":"27356:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"27373:3:69","nodeType":"YulIdentifier","src":"27373:3:69"},{"arguments":[{"name":"value","nativeSrc":"27396:5:69","nodeType":"YulIdentifier","src":"27396:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"27378:17:69","nodeType":"YulIdentifier","src":"27378:17:69"},"nativeSrc":"27378:24:69","nodeType":"YulFunctionCall","src":"27378:24:69"}],"functionName":{"name":"mstore","nativeSrc":"27366:6:69","nodeType":"YulIdentifier","src":"27366:6:69"},"nativeSrc":"27366:37:69","nodeType":"YulFunctionCall","src":"27366:37:69"},"nativeSrc":"27366:37:69","nodeType":"YulExpressionStatement","src":"27366:37:69"}]},"name":"abi_encode_t_address_to_t_address","nativeSrc":"27301:108:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"27344:5:69","nodeType":"YulTypedName","src":"27344:5:69","type":""},{"name":"pos","nativeSrc":"27351:3:69","nodeType":"YulTypedName","src":"27351:3:69","type":""}],"src":"27301:108:69"},{"body":{"nativeSrc":"27470:53:69","nodeType":"YulBlock","src":"27470:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"27487:3:69","nodeType":"YulIdentifier","src":"27487:3:69"},{"arguments":[{"name":"value","nativeSrc":"27510:5:69","nodeType":"YulIdentifier","src":"27510:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"27492:17:69","nodeType":"YulIdentifier","src":"27492:17:69"},"nativeSrc":"27492:24:69","nodeType":"YulFunctionCall","src":"27492:24:69"}],"functionName":{"name":"mstore","nativeSrc":"27480:6:69","nodeType":"YulIdentifier","src":"27480:6:69"},"nativeSrc":"27480:37:69","nodeType":"YulFunctionCall","src":"27480:37:69"},"nativeSrc":"27480:37:69","nodeType":"YulExpressionStatement","src":"27480:37:69"}]},"name":"abi_encode_t_uint256_to_t_uint256","nativeSrc":"27415:108:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"27458:5:69","nodeType":"YulTypedName","src":"27458:5:69","type":""},{"name":"pos","nativeSrc":"27465:3:69","nodeType":"YulTypedName","src":"27465:3:69","type":""}],"src":"27415:108:69"},{"body":{"nativeSrc":"27733:586:69","nodeType":"YulBlock","src":"27733:586:69","statements":[{"nativeSrc":"27743:26:69","nodeType":"YulVariableDeclaration","src":"27743:26:69","value":{"arguments":[{"name":"pos","nativeSrc":"27759:3:69","nodeType":"YulIdentifier","src":"27759:3:69"},{"kind":"number","nativeSrc":"27764:4:69","nodeType":"YulLiteral","src":"27764:4:69","type":"","value":"0x60"}],"functionName":{"name":"add","nativeSrc":"27755:3:69","nodeType":"YulIdentifier","src":"27755:3:69"},"nativeSrc":"27755:14:69","nodeType":"YulFunctionCall","src":"27755:14:69"},"variables":[{"name":"tail","nativeSrc":"27747:4:69","nodeType":"YulTypedName","src":"27747:4:69","type":""}]},{"nativeSrc":"27779:171:69","nodeType":"YulBlock","src":"27779:171:69","statements":[{"nativeSrc":"27821:43:69","nodeType":"YulVariableDeclaration","src":"27821:43:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"27851:5:69","nodeType":"YulIdentifier","src":"27851:5:69"},{"kind":"number","nativeSrc":"27858:4:69","nodeType":"YulLiteral","src":"27858:4:69","type":"","value":"0x00"}],"functionName":{"name":"add","nativeSrc":"27847:3:69","nodeType":"YulIdentifier","src":"27847:3:69"},"nativeSrc":"27847:16:69","nodeType":"YulFunctionCall","src":"27847:16:69"}],"functionName":{"name":"mload","nativeSrc":"27841:5:69","nodeType":"YulIdentifier","src":"27841:5:69"},"nativeSrc":"27841:23:69","nodeType":"YulFunctionCall","src":"27841:23:69"},"variables":[{"name":"memberValue0","nativeSrc":"27825:12:69","nodeType":"YulTypedName","src":"27825:12:69","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nativeSrc":"27911:12:69","nodeType":"YulIdentifier","src":"27911:12:69"},{"arguments":[{"name":"pos","nativeSrc":"27929:3:69","nodeType":"YulIdentifier","src":"27929:3:69"},{"kind":"number","nativeSrc":"27934:4:69","nodeType":"YulLiteral","src":"27934:4:69","type":"","value":"0x00"}],"functionName":{"name":"add","nativeSrc":"27925:3:69","nodeType":"YulIdentifier","src":"27925:3:69"},"nativeSrc":"27925:14:69","nodeType":"YulFunctionCall","src":"27925:14:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address","nativeSrc":"27877:33:69","nodeType":"YulIdentifier","src":"27877:33:69"},"nativeSrc":"27877:63:69","nodeType":"YulFunctionCall","src":"27877:63:69"},"nativeSrc":"27877:63:69","nodeType":"YulExpressionStatement","src":"27877:63:69"}]},{"nativeSrc":"27960:171:69","nodeType":"YulBlock","src":"27960:171:69","statements":[{"nativeSrc":"28002:43:69","nodeType":"YulVariableDeclaration","src":"28002:43:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"28032:5:69","nodeType":"YulIdentifier","src":"28032:5:69"},{"kind":"number","nativeSrc":"28039:4:69","nodeType":"YulLiteral","src":"28039:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"28028:3:69","nodeType":"YulIdentifier","src":"28028:3:69"},"nativeSrc":"28028:16:69","nodeType":"YulFunctionCall","src":"28028:16:69"}],"functionName":{"name":"mload","nativeSrc":"28022:5:69","nodeType":"YulIdentifier","src":"28022:5:69"},"nativeSrc":"28022:23:69","nodeType":"YulFunctionCall","src":"28022:23:69"},"variables":[{"name":"memberValue0","nativeSrc":"28006:12:69","nodeType":"YulTypedName","src":"28006:12:69","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nativeSrc":"28092:12:69","nodeType":"YulIdentifier","src":"28092:12:69"},{"arguments":[{"name":"pos","nativeSrc":"28110:3:69","nodeType":"YulIdentifier","src":"28110:3:69"},{"kind":"number","nativeSrc":"28115:4:69","nodeType":"YulLiteral","src":"28115:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"28106:3:69","nodeType":"YulIdentifier","src":"28106:3:69"},"nativeSrc":"28106:14:69","nodeType":"YulFunctionCall","src":"28106:14:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256","nativeSrc":"28058:33:69","nodeType":"YulIdentifier","src":"28058:33:69"},"nativeSrc":"28058:63:69","nodeType":"YulFunctionCall","src":"28058:63:69"},"nativeSrc":"28058:63:69","nodeType":"YulExpressionStatement","src":"28058:63:69"}]},{"nativeSrc":"28141:171:69","nodeType":"YulBlock","src":"28141:171:69","statements":[{"nativeSrc":"28183:43:69","nodeType":"YulVariableDeclaration","src":"28183:43:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"28213:5:69","nodeType":"YulIdentifier","src":"28213:5:69"},{"kind":"number","nativeSrc":"28220:4:69","nodeType":"YulLiteral","src":"28220:4:69","type":"","value":"0x40"}],"functionName":{"name":"add","nativeSrc":"28209:3:69","nodeType":"YulIdentifier","src":"28209:3:69"},"nativeSrc":"28209:16:69","nodeType":"YulFunctionCall","src":"28209:16:69"}],"functionName":{"name":"mload","nativeSrc":"28203:5:69","nodeType":"YulIdentifier","src":"28203:5:69"},"nativeSrc":"28203:23:69","nodeType":"YulFunctionCall","src":"28203:23:69"},"variables":[{"name":"memberValue0","nativeSrc":"28187:12:69","nodeType":"YulTypedName","src":"28187:12:69","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nativeSrc":"28273:12:69","nodeType":"YulIdentifier","src":"28273:12:69"},{"arguments":[{"name":"pos","nativeSrc":"28291:3:69","nodeType":"YulIdentifier","src":"28291:3:69"},{"kind":"number","nativeSrc":"28296:4:69","nodeType":"YulLiteral","src":"28296:4:69","type":"","value":"0x40"}],"functionName":{"name":"add","nativeSrc":"28287:3:69","nodeType":"YulIdentifier","src":"28287:3:69"},"nativeSrc":"28287:14:69","nodeType":"YulFunctionCall","src":"28287:14:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256","nativeSrc":"28239:33:69","nodeType":"YulIdentifier","src":"28239:33:69"},"nativeSrc":"28239:63:69","nodeType":"YulFunctionCall","src":"28239:63:69"},"nativeSrc":"28239:63:69","nodeType":"YulExpressionStatement","src":"28239:63:69"}]}]},"name":"abi_encode_t_struct$_RewardSpeeds_$9473_memory_ptr_to_t_struct$_RewardSpeeds_$9473_memory_ptr","nativeSrc":"27617:702:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"27720:5:69","nodeType":"YulTypedName","src":"27720:5:69","type":""},{"name":"pos","nativeSrc":"27727:3:69","nodeType":"YulTypedName","src":"27727:3:69","type":""}],"src":"27617:702:69"},{"body":{"nativeSrc":"28465:159:69","nodeType":"YulBlock","src":"28465:159:69","statements":[{"expression":{"arguments":[{"name":"value0","nativeSrc":"28569:6:69","nodeType":"YulIdentifier","src":"28569:6:69"},{"name":"pos","nativeSrc":"28577:3:69","nodeType":"YulIdentifier","src":"28577:3:69"}],"functionName":{"name":"abi_encode_t_struct$_RewardSpeeds_$9473_memory_ptr_to_t_struct$_RewardSpeeds_$9473_memory_ptr","nativeSrc":"28475:93:69","nodeType":"YulIdentifier","src":"28475:93:69"},"nativeSrc":"28475:106:69","nodeType":"YulFunctionCall","src":"28475:106:69"},"nativeSrc":"28475:106:69","nodeType":"YulExpressionStatement","src":"28475:106:69"},{"nativeSrc":"28590:28:69","nodeType":"YulAssignment","src":"28590:28:69","value":{"arguments":[{"name":"pos","nativeSrc":"28608:3:69","nodeType":"YulIdentifier","src":"28608:3:69"},{"kind":"number","nativeSrc":"28613:4:69","nodeType":"YulLiteral","src":"28613:4:69","type":"","value":"0x60"}],"functionName":{"name":"add","nativeSrc":"28604:3:69","nodeType":"YulIdentifier","src":"28604:3:69"},"nativeSrc":"28604:14:69","nodeType":"YulFunctionCall","src":"28604:14:69"},"variableNames":[{"name":"updatedPos","nativeSrc":"28590:10:69","nodeType":"YulIdentifier","src":"28590:10:69"}]}]},"name":"abi_encodeUpdatedPos_t_struct$_RewardSpeeds_$9473_memory_ptr_to_t_struct$_RewardSpeeds_$9473_memory_ptr","nativeSrc":"28325:299:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value0","nativeSrc":"28438:6:69","nodeType":"YulTypedName","src":"28438:6:69","type":""},{"name":"pos","nativeSrc":"28446:3:69","nodeType":"YulTypedName","src":"28446:3:69","type":""}],"returnVariables":[{"name":"updatedPos","nativeSrc":"28454:10:69","nodeType":"YulTypedName","src":"28454:10:69","type":""}],"src":"28325:299:69"},{"body":{"nativeSrc":"28735:38:69","nodeType":"YulBlock","src":"28735:38:69","statements":[{"nativeSrc":"28745:22:69","nodeType":"YulAssignment","src":"28745:22:69","value":{"arguments":[{"name":"ptr","nativeSrc":"28757:3:69","nodeType":"YulIdentifier","src":"28757:3:69"},{"kind":"number","nativeSrc":"28762:4:69","nodeType":"YulLiteral","src":"28762:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"28753:3:69","nodeType":"YulIdentifier","src":"28753:3:69"},"nativeSrc":"28753:14:69","nodeType":"YulFunctionCall","src":"28753:14:69"},"variableNames":[{"name":"next","nativeSrc":"28745:4:69","nodeType":"YulIdentifier","src":"28745:4:69"}]}]},"name":"array_nextElement_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr","nativeSrc":"28630:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nativeSrc":"28722:3:69","nodeType":"YulTypedName","src":"28722:3:69","type":""}],"returnVariables":[{"name":"next","nativeSrc":"28730:4:69","nodeType":"YulTypedName","src":"28730:4:69","type":""}],"src":"28630:143:69"},{"body":{"nativeSrc":"29055:788:69","nodeType":"YulBlock","src":"29055:788:69","statements":[{"nativeSrc":"29065:98:69","nodeType":"YulVariableDeclaration","src":"29065:98:69","value":{"arguments":[{"name":"value","nativeSrc":"29157:5:69","nodeType":"YulIdentifier","src":"29157:5:69"}],"functionName":{"name":"array_length_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr","nativeSrc":"29079:77:69","nodeType":"YulIdentifier","src":"29079:77:69"},"nativeSrc":"29079:84:69","nodeType":"YulFunctionCall","src":"29079:84:69"},"variables":[{"name":"length","nativeSrc":"29069:6:69","nodeType":"YulTypedName","src":"29069:6:69","type":""}]},{"nativeSrc":"29172:123:69","nodeType":"YulAssignment","src":"29172:123:69","value":{"arguments":[{"name":"pos","nativeSrc":"29283:3:69","nodeType":"YulIdentifier","src":"29283:3:69"},{"name":"length","nativeSrc":"29288:6:69","nodeType":"YulIdentifier","src":"29288:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr_fromStack","nativeSrc":"29179:103:69","nodeType":"YulIdentifier","src":"29179:103:69"},"nativeSrc":"29179:116:69","nodeType":"YulFunctionCall","src":"29179:116:69"},"variableNames":[{"name":"pos","nativeSrc":"29172:3:69","nodeType":"YulIdentifier","src":"29172:3:69"}]},{"nativeSrc":"29304:101:69","nodeType":"YulVariableDeclaration","src":"29304:101:69","value":{"arguments":[{"name":"value","nativeSrc":"29399:5:69","nodeType":"YulIdentifier","src":"29399:5:69"}],"functionName":{"name":"array_dataslot_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr","nativeSrc":"29319:79:69","nodeType":"YulIdentifier","src":"29319:79:69"},"nativeSrc":"29319:86:69","nodeType":"YulFunctionCall","src":"29319:86:69"},"variables":[{"name":"baseRef","nativeSrc":"29308:7:69","nodeType":"YulTypedName","src":"29308:7:69","type":""}]},{"nativeSrc":"29414:21:69","nodeType":"YulVariableDeclaration","src":"29414:21:69","value":{"name":"baseRef","nativeSrc":"29428:7:69","nodeType":"YulIdentifier","src":"29428:7:69"},"variables":[{"name":"srcPtr","nativeSrc":"29418:6:69","nodeType":"YulTypedName","src":"29418:6:69","type":""}]},{"body":{"nativeSrc":"29504:314:69","nodeType":"YulBlock","src":"29504:314:69","statements":[{"nativeSrc":"29518:34:69","nodeType":"YulVariableDeclaration","src":"29518:34:69","value":{"arguments":[{"name":"srcPtr","nativeSrc":"29545:6:69","nodeType":"YulIdentifier","src":"29545:6:69"}],"functionName":{"name":"mload","nativeSrc":"29539:5:69","nodeType":"YulIdentifier","src":"29539:5:69"},"nativeSrc":"29539:13:69","nodeType":"YulFunctionCall","src":"29539:13:69"},"variables":[{"name":"elementValue0","nativeSrc":"29522:13:69","nodeType":"YulTypedName","src":"29522:13:69","type":""}]},{"nativeSrc":"29565:130:69","nodeType":"YulAssignment","src":"29565:130:69","value":{"arguments":[{"name":"elementValue0","nativeSrc":"29676:13:69","nodeType":"YulIdentifier","src":"29676:13:69"},{"name":"pos","nativeSrc":"29691:3:69","nodeType":"YulIdentifier","src":"29691:3:69"}],"functionName":{"name":"abi_encodeUpdatedPos_t_struct$_RewardSpeeds_$9473_memory_ptr_to_t_struct$_RewardSpeeds_$9473_memory_ptr","nativeSrc":"29572:103:69","nodeType":"YulIdentifier","src":"29572:103:69"},"nativeSrc":"29572:123:69","nodeType":"YulFunctionCall","src":"29572:123:69"},"variableNames":[{"name":"pos","nativeSrc":"29565:3:69","nodeType":"YulIdentifier","src":"29565:3:69"}]},{"nativeSrc":"29708:100:69","nodeType":"YulAssignment","src":"29708:100:69","value":{"arguments":[{"name":"srcPtr","nativeSrc":"29801:6:69","nodeType":"YulIdentifier","src":"29801:6:69"}],"functionName":{"name":"array_nextElement_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr","nativeSrc":"29718:82:69","nodeType":"YulIdentifier","src":"29718:82:69"},"nativeSrc":"29718:90:69","nodeType":"YulFunctionCall","src":"29718:90:69"},"variableNames":[{"name":"srcPtr","nativeSrc":"29708:6:69","nodeType":"YulIdentifier","src":"29708:6:69"}]}]},"condition":{"arguments":[{"name":"i","nativeSrc":"29466:1:69","nodeType":"YulIdentifier","src":"29466:1:69"},{"name":"length","nativeSrc":"29469:6:69","nodeType":"YulIdentifier","src":"29469:6:69"}],"functionName":{"name":"lt","nativeSrc":"29463:2:69","nodeType":"YulIdentifier","src":"29463:2:69"},"nativeSrc":"29463:13:69","nodeType":"YulFunctionCall","src":"29463:13:69"},"nativeSrc":"29444:374:69","nodeType":"YulForLoop","post":{"nativeSrc":"29477:18:69","nodeType":"YulBlock","src":"29477:18:69","statements":[{"nativeSrc":"29479:14:69","nodeType":"YulAssignment","src":"29479:14:69","value":{"arguments":[{"name":"i","nativeSrc":"29488:1:69","nodeType":"YulIdentifier","src":"29488:1:69"},{"kind":"number","nativeSrc":"29491:1:69","nodeType":"YulLiteral","src":"29491:1:69","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"29484:3:69","nodeType":"YulIdentifier","src":"29484:3:69"},"nativeSrc":"29484:9:69","nodeType":"YulFunctionCall","src":"29484:9:69"},"variableNames":[{"name":"i","nativeSrc":"29479:1:69","nodeType":"YulIdentifier","src":"29479:1:69"}]}]},"pre":{"nativeSrc":"29448:14:69","nodeType":"YulBlock","src":"29448:14:69","statements":[{"nativeSrc":"29450:10:69","nodeType":"YulVariableDeclaration","src":"29450:10:69","value":{"kind":"number","nativeSrc":"29459:1:69","nodeType":"YulLiteral","src":"29459:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"29454:1:69","nodeType":"YulTypedName","src":"29454:1:69","type":""}]}]},"src":"29444:374:69"},{"nativeSrc":"29827:10:69","nodeType":"YulAssignment","src":"29827:10:69","value":{"name":"pos","nativeSrc":"29834:3:69","nodeType":"YulIdentifier","src":"29834:3:69"},"variableNames":[{"name":"end","nativeSrc":"29827:3:69","nodeType":"YulIdentifier","src":"29827:3:69"}]}]},"name":"abi_encode_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr_fromStack","nativeSrc":"28871:972:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"29034:5:69","nodeType":"YulTypedName","src":"29034:5:69","type":""},{"name":"pos","nativeSrc":"29041:3:69","nodeType":"YulTypedName","src":"29041:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"29050:3:69","nodeType":"YulTypedName","src":"29050:3:69","type":""}],"src":"28871:972:69"},{"body":{"nativeSrc":"30057:285:69","nodeType":"YulBlock","src":"30057:285:69","statements":[{"nativeSrc":"30067:26:69","nodeType":"YulAssignment","src":"30067:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"30079:9:69","nodeType":"YulIdentifier","src":"30079:9:69"},{"kind":"number","nativeSrc":"30090:2:69","nodeType":"YulLiteral","src":"30090:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"30075:3:69","nodeType":"YulIdentifier","src":"30075:3:69"},"nativeSrc":"30075:18:69","nodeType":"YulFunctionCall","src":"30075:18:69"},"variableNames":[{"name":"tail","nativeSrc":"30067:4:69","nodeType":"YulIdentifier","src":"30067:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"30114:9:69","nodeType":"YulIdentifier","src":"30114:9:69"},{"kind":"number","nativeSrc":"30125:1:69","nodeType":"YulLiteral","src":"30125:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"30110:3:69","nodeType":"YulIdentifier","src":"30110:3:69"},"nativeSrc":"30110:17:69","nodeType":"YulFunctionCall","src":"30110:17:69"},{"arguments":[{"name":"tail","nativeSrc":"30133:4:69","nodeType":"YulIdentifier","src":"30133:4:69"},{"name":"headStart","nativeSrc":"30139:9:69","nodeType":"YulIdentifier","src":"30139:9:69"}],"functionName":{"name":"sub","nativeSrc":"30129:3:69","nodeType":"YulIdentifier","src":"30129:3:69"},"nativeSrc":"30129:20:69","nodeType":"YulFunctionCall","src":"30129:20:69"}],"functionName":{"name":"mstore","nativeSrc":"30103:6:69","nodeType":"YulIdentifier","src":"30103:6:69"},"nativeSrc":"30103:47:69","nodeType":"YulFunctionCall","src":"30103:47:69"},"nativeSrc":"30103:47:69","nodeType":"YulExpressionStatement","src":"30103:47:69"},{"nativeSrc":"30159:176:69","nodeType":"YulAssignment","src":"30159:176:69","value":{"arguments":[{"name":"value0","nativeSrc":"30321:6:69","nodeType":"YulIdentifier","src":"30321:6:69"},{"name":"tail","nativeSrc":"30330:4:69","nodeType":"YulIdentifier","src":"30330:4:69"}],"functionName":{"name":"abi_encode_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr_fromStack","nativeSrc":"30167:153:69","nodeType":"YulIdentifier","src":"30167:153:69"},"nativeSrc":"30167:168:69","nodeType":"YulFunctionCall","src":"30167:168:69"},"variableNames":[{"name":"tail","nativeSrc":"30159:4:69","nodeType":"YulIdentifier","src":"30159:4:69"}]}]},"name":"abi_encode_tuple_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr__fromStack_reversed","nativeSrc":"29849:493:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"30029:9:69","nodeType":"YulTypedName","src":"30029:9:69","type":""},{"name":"value0","nativeSrc":"30041:6:69","nodeType":"YulTypedName","src":"30041:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"30052:4:69","nodeType":"YulTypedName","src":"30052:4:69","type":""}],"src":"29849:493:69"},{"body":{"nativeSrc":"30440:66:69","nodeType":"YulBlock","src":"30440:66:69","statements":[{"nativeSrc":"30450:50:69","nodeType":"YulAssignment","src":"30450:50:69","value":{"arguments":[{"name":"value","nativeSrc":"30494:5:69","nodeType":"YulIdentifier","src":"30494:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"30463:30:69","nodeType":"YulIdentifier","src":"30463:30:69"},"nativeSrc":"30463:37:69","nodeType":"YulFunctionCall","src":"30463:37:69"},"variableNames":[{"name":"converted","nativeSrc":"30450:9:69","nodeType":"YulIdentifier","src":"30450:9:69"}]}]},"name":"convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address","nativeSrc":"30348:158:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"30420:5:69","nodeType":"YulTypedName","src":"30420:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"30430:9:69","nodeType":"YulTypedName","src":"30430:9:69","type":""}],"src":"30348:158:69"},{"body":{"nativeSrc":"30609:98:69","nodeType":"YulBlock","src":"30609:98:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"30626:3:69","nodeType":"YulIdentifier","src":"30626:3:69"},{"arguments":[{"name":"value","nativeSrc":"30694:5:69","nodeType":"YulIdentifier","src":"30694:5:69"}],"functionName":{"name":"convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address","nativeSrc":"30631:62:69","nodeType":"YulIdentifier","src":"30631:62:69"},"nativeSrc":"30631:69:69","nodeType":"YulFunctionCall","src":"30631:69:69"}],"functionName":{"name":"mstore","nativeSrc":"30619:6:69","nodeType":"YulIdentifier","src":"30619:6:69"},"nativeSrc":"30619:82:69","nodeType":"YulFunctionCall","src":"30619:82:69"},"nativeSrc":"30619:82:69","nodeType":"YulExpressionStatement","src":"30619:82:69"}]},"name":"abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack","nativeSrc":"30512:195:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"30597:5:69","nodeType":"YulTypedName","src":"30597:5:69","type":""},{"name":"pos","nativeSrc":"30604:3:69","nodeType":"YulTypedName","src":"30604:3:69","type":""}],"src":"30512:195:69"},{"body":{"nativeSrc":"30843:156:69","nodeType":"YulBlock","src":"30843:156:69","statements":[{"nativeSrc":"30853:26:69","nodeType":"YulAssignment","src":"30853:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"30865:9:69","nodeType":"YulIdentifier","src":"30865:9:69"},{"kind":"number","nativeSrc":"30876:2:69","nodeType":"YulLiteral","src":"30876:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"30861:3:69","nodeType":"YulIdentifier","src":"30861:3:69"},"nativeSrc":"30861:18:69","nodeType":"YulFunctionCall","src":"30861:18:69"},"variableNames":[{"name":"tail","nativeSrc":"30853:4:69","nodeType":"YulIdentifier","src":"30853:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"30965:6:69","nodeType":"YulIdentifier","src":"30965:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"30978:9:69","nodeType":"YulIdentifier","src":"30978:9:69"},{"kind":"number","nativeSrc":"30989:1:69","nodeType":"YulLiteral","src":"30989:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"30974:3:69","nodeType":"YulIdentifier","src":"30974:3:69"},"nativeSrc":"30974:17:69","nodeType":"YulFunctionCall","src":"30974:17:69"}],"functionName":{"name":"abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack","nativeSrc":"30889:75:69","nodeType":"YulIdentifier","src":"30889:75:69"},"nativeSrc":"30889:103:69","nodeType":"YulFunctionCall","src":"30889:103:69"},"nativeSrc":"30889:103:69","nodeType":"YulExpressionStatement","src":"30889:103:69"}]},"name":"abi_encode_tuple_t_contract$_IAccessControlManagerV8_$5080__to_t_address__fromStack_reversed","nativeSrc":"30713:286:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"30815:9:69","nodeType":"YulTypedName","src":"30815:9:69","type":""},{"name":"value0","nativeSrc":"30827:6:69","nodeType":"YulTypedName","src":"30827:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"30838:4:69","nodeType":"YulTypedName","src":"30838:4:69","type":""}],"src":"30713:286:69"},{"body":{"nativeSrc":"31053:54:69","nodeType":"YulBlock","src":"31053:54:69","statements":[{"nativeSrc":"31063:38:69","nodeType":"YulAssignment","src":"31063:38:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"31081:5:69","nodeType":"YulIdentifier","src":"31081:5:69"},{"kind":"number","nativeSrc":"31088:2:69","nodeType":"YulLiteral","src":"31088:2:69","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"31077:3:69","nodeType":"YulIdentifier","src":"31077:3:69"},"nativeSrc":"31077:14:69","nodeType":"YulFunctionCall","src":"31077:14:69"},{"arguments":[{"kind":"number","nativeSrc":"31097:2:69","nodeType":"YulLiteral","src":"31097:2:69","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"31093:3:69","nodeType":"YulIdentifier","src":"31093:3:69"},"nativeSrc":"31093:7:69","nodeType":"YulFunctionCall","src":"31093:7:69"}],"functionName":{"name":"and","nativeSrc":"31073:3:69","nodeType":"YulIdentifier","src":"31073:3:69"},"nativeSrc":"31073:28:69","nodeType":"YulFunctionCall","src":"31073:28:69"},"variableNames":[{"name":"result","nativeSrc":"31063:6:69","nodeType":"YulIdentifier","src":"31063:6:69"}]}]},"name":"round_up_to_mul_of_32","nativeSrc":"31005:102:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"31036:5:69","nodeType":"YulTypedName","src":"31036:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"31046:6:69","nodeType":"YulTypedName","src":"31046:6:69","type":""}],"src":"31005:102:69"},{"body":{"nativeSrc":"31141:152:69","nodeType":"YulBlock","src":"31141:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"31158:1:69","nodeType":"YulLiteral","src":"31158:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"31161:77:69","nodeType":"YulLiteral","src":"31161:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"31151:6:69","nodeType":"YulIdentifier","src":"31151:6:69"},"nativeSrc":"31151:88:69","nodeType":"YulFunctionCall","src":"31151:88:69"},"nativeSrc":"31151:88:69","nodeType":"YulExpressionStatement","src":"31151:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"31255:1:69","nodeType":"YulLiteral","src":"31255:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"31258:4:69","nodeType":"YulLiteral","src":"31258:4:69","type":"","value":"0x41"}],"functionName":{"name":"mstore","nativeSrc":"31248:6:69","nodeType":"YulIdentifier","src":"31248:6:69"},"nativeSrc":"31248:15:69","nodeType":"YulFunctionCall","src":"31248:15:69"},"nativeSrc":"31248:15:69","nodeType":"YulExpressionStatement","src":"31248:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"31279:1:69","nodeType":"YulLiteral","src":"31279:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"31282:4:69","nodeType":"YulLiteral","src":"31282:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"31272:6:69","nodeType":"YulIdentifier","src":"31272:6:69"},"nativeSrc":"31272:15:69","nodeType":"YulFunctionCall","src":"31272:15:69"},"nativeSrc":"31272:15:69","nodeType":"YulExpressionStatement","src":"31272:15:69"}]},"name":"panic_error_0x41","nativeSrc":"31113:180:69","nodeType":"YulFunctionDefinition","src":"31113:180:69"},{"body":{"nativeSrc":"31342:238:69","nodeType":"YulBlock","src":"31342:238:69","statements":[{"nativeSrc":"31352:58:69","nodeType":"YulVariableDeclaration","src":"31352:58:69","value":{"arguments":[{"name":"memPtr","nativeSrc":"31374:6:69","nodeType":"YulIdentifier","src":"31374:6:69"},{"arguments":[{"name":"size","nativeSrc":"31404:4:69","nodeType":"YulIdentifier","src":"31404:4:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"31382:21:69","nodeType":"YulIdentifier","src":"31382:21:69"},"nativeSrc":"31382:27:69","nodeType":"YulFunctionCall","src":"31382:27:69"}],"functionName":{"name":"add","nativeSrc":"31370:3:69","nodeType":"YulIdentifier","src":"31370:3:69"},"nativeSrc":"31370:40:69","nodeType":"YulFunctionCall","src":"31370:40:69"},"variables":[{"name":"newFreePtr","nativeSrc":"31356:10:69","nodeType":"YulTypedName","src":"31356:10:69","type":""}]},{"body":{"nativeSrc":"31521:22:69","nodeType":"YulBlock","src":"31521:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"31523:16:69","nodeType":"YulIdentifier","src":"31523:16:69"},"nativeSrc":"31523:18:69","nodeType":"YulFunctionCall","src":"31523:18:69"},"nativeSrc":"31523:18:69","nodeType":"YulExpressionStatement","src":"31523:18:69"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nativeSrc":"31464:10:69","nodeType":"YulIdentifier","src":"31464:10:69"},{"kind":"number","nativeSrc":"31476:18:69","nodeType":"YulLiteral","src":"31476:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"31461:2:69","nodeType":"YulIdentifier","src":"31461:2:69"},"nativeSrc":"31461:34:69","nodeType":"YulFunctionCall","src":"31461:34:69"},{"arguments":[{"name":"newFreePtr","nativeSrc":"31500:10:69","nodeType":"YulIdentifier","src":"31500:10:69"},{"name":"memPtr","nativeSrc":"31512:6:69","nodeType":"YulIdentifier","src":"31512:6:69"}],"functionName":{"name":"lt","nativeSrc":"31497:2:69","nodeType":"YulIdentifier","src":"31497:2:69"},"nativeSrc":"31497:22:69","nodeType":"YulFunctionCall","src":"31497:22:69"}],"functionName":{"name":"or","nativeSrc":"31458:2:69","nodeType":"YulIdentifier","src":"31458:2:69"},"nativeSrc":"31458:62:69","nodeType":"YulFunctionCall","src":"31458:62:69"},"nativeSrc":"31455:88:69","nodeType":"YulIf","src":"31455:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"31559:2:69","nodeType":"YulLiteral","src":"31559:2:69","type":"","value":"64"},{"name":"newFreePtr","nativeSrc":"31563:10:69","nodeType":"YulIdentifier","src":"31563:10:69"}],"functionName":{"name":"mstore","nativeSrc":"31552:6:69","nodeType":"YulIdentifier","src":"31552:6:69"},"nativeSrc":"31552:22:69","nodeType":"YulFunctionCall","src":"31552:22:69"},"nativeSrc":"31552:22:69","nodeType":"YulExpressionStatement","src":"31552:22:69"}]},"name":"finalize_allocation","nativeSrc":"31299:281:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"31328:6:69","nodeType":"YulTypedName","src":"31328:6:69","type":""},{"name":"size","nativeSrc":"31336:4:69","nodeType":"YulTypedName","src":"31336:4:69","type":""}],"src":"31299:281:69"},{"body":{"nativeSrc":"31627:88:69","nodeType":"YulBlock","src":"31627:88:69","statements":[{"nativeSrc":"31637:30:69","nodeType":"YulAssignment","src":"31637:30:69","value":{"arguments":[],"functionName":{"name":"allocate_unbounded","nativeSrc":"31647:18:69","nodeType":"YulIdentifier","src":"31647:18:69"},"nativeSrc":"31647:20:69","nodeType":"YulFunctionCall","src":"31647:20:69"},"variableNames":[{"name":"memPtr","nativeSrc":"31637:6:69","nodeType":"YulIdentifier","src":"31637:6:69"}]},{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"31696:6:69","nodeType":"YulIdentifier","src":"31696:6:69"},{"name":"size","nativeSrc":"31704:4:69","nodeType":"YulIdentifier","src":"31704:4:69"}],"functionName":{"name":"finalize_allocation","nativeSrc":"31676:19:69","nodeType":"YulIdentifier","src":"31676:19:69"},"nativeSrc":"31676:33:69","nodeType":"YulFunctionCall","src":"31676:33:69"},"nativeSrc":"31676:33:69","nodeType":"YulExpressionStatement","src":"31676:33:69"}]},"name":"allocate_memory","nativeSrc":"31586:129:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nativeSrc":"31611:4:69","nodeType":"YulTypedName","src":"31611:4:69","type":""}],"returnVariables":[{"name":"memPtr","nativeSrc":"31620:6:69","nodeType":"YulTypedName","src":"31620:6:69","type":""}],"src":"31586:129:69"},{"body":{"nativeSrc":"31803:229:69","nodeType":"YulBlock","src":"31803:229:69","statements":[{"body":{"nativeSrc":"31908:22:69","nodeType":"YulBlock","src":"31908:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"31910:16:69","nodeType":"YulIdentifier","src":"31910:16:69"},"nativeSrc":"31910:18:69","nodeType":"YulFunctionCall","src":"31910:18:69"},"nativeSrc":"31910:18:69","nodeType":"YulExpressionStatement","src":"31910:18:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"31880:6:69","nodeType":"YulIdentifier","src":"31880:6:69"},{"kind":"number","nativeSrc":"31888:18:69","nodeType":"YulLiteral","src":"31888:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"31877:2:69","nodeType":"YulIdentifier","src":"31877:2:69"},"nativeSrc":"31877:30:69","nodeType":"YulFunctionCall","src":"31877:30:69"},"nativeSrc":"31874:56:69","nodeType":"YulIf","src":"31874:56:69"},{"nativeSrc":"31940:25:69","nodeType":"YulAssignment","src":"31940:25:69","value":{"arguments":[{"name":"length","nativeSrc":"31952:6:69","nodeType":"YulIdentifier","src":"31952:6:69"},{"kind":"number","nativeSrc":"31960:4:69","nodeType":"YulLiteral","src":"31960:4:69","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"31948:3:69","nodeType":"YulIdentifier","src":"31948:3:69"},"nativeSrc":"31948:17:69","nodeType":"YulFunctionCall","src":"31948:17:69"},"variableNames":[{"name":"size","nativeSrc":"31940:4:69","nodeType":"YulIdentifier","src":"31940:4:69"}]},{"nativeSrc":"32002:23:69","nodeType":"YulAssignment","src":"32002:23:69","value":{"arguments":[{"name":"size","nativeSrc":"32014:4:69","nodeType":"YulIdentifier","src":"32014:4:69"},{"kind":"number","nativeSrc":"32020:4:69","nodeType":"YulLiteral","src":"32020:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"32010:3:69","nodeType":"YulIdentifier","src":"32010:3:69"},"nativeSrc":"32010:15:69","nodeType":"YulFunctionCall","src":"32010:15:69"},"variableNames":[{"name":"size","nativeSrc":"32002:4:69","nodeType":"YulIdentifier","src":"32002:4:69"}]}]},"name":"array_allocation_size_t_array$_t_address_$dyn_memory_ptr","nativeSrc":"31721:311:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nativeSrc":"31787:6:69","nodeType":"YulTypedName","src":"31787:6:69","type":""}],"returnVariables":[{"name":"size","nativeSrc":"31798:4:69","nodeType":"YulTypedName","src":"31798:4:69","type":""}],"src":"31721:311:69"},{"body":{"nativeSrc":"32157:608:69","nodeType":"YulBlock","src":"32157:608:69","statements":[{"nativeSrc":"32167:90:69","nodeType":"YulAssignment","src":"32167:90:69","value":{"arguments":[{"arguments":[{"name":"length","nativeSrc":"32249:6:69","nodeType":"YulIdentifier","src":"32249:6:69"}],"functionName":{"name":"array_allocation_size_t_array$_t_address_$dyn_memory_ptr","nativeSrc":"32192:56:69","nodeType":"YulIdentifier","src":"32192:56:69"},"nativeSrc":"32192:64:69","nodeType":"YulFunctionCall","src":"32192:64:69"}],"functionName":{"name":"allocate_memory","nativeSrc":"32176:15:69","nodeType":"YulIdentifier","src":"32176:15:69"},"nativeSrc":"32176:81:69","nodeType":"YulFunctionCall","src":"32176:81:69"},"variableNames":[{"name":"array","nativeSrc":"32167:5:69","nodeType":"YulIdentifier","src":"32167:5:69"}]},{"nativeSrc":"32266:16:69","nodeType":"YulVariableDeclaration","src":"32266:16:69","value":{"name":"array","nativeSrc":"32277:5:69","nodeType":"YulIdentifier","src":"32277:5:69"},"variables":[{"name":"dst","nativeSrc":"32270:3:69","nodeType":"YulTypedName","src":"32270:3:69","type":""}]},{"expression":{"arguments":[{"name":"array","nativeSrc":"32299:5:69","nodeType":"YulIdentifier","src":"32299:5:69"},{"name":"length","nativeSrc":"32306:6:69","nodeType":"YulIdentifier","src":"32306:6:69"}],"functionName":{"name":"mstore","nativeSrc":"32292:6:69","nodeType":"YulIdentifier","src":"32292:6:69"},"nativeSrc":"32292:21:69","nodeType":"YulFunctionCall","src":"32292:21:69"},"nativeSrc":"32292:21:69","nodeType":"YulExpressionStatement","src":"32292:21:69"},{"nativeSrc":"32322:23:69","nodeType":"YulAssignment","src":"32322:23:69","value":{"arguments":[{"name":"array","nativeSrc":"32333:5:69","nodeType":"YulIdentifier","src":"32333:5:69"},{"kind":"number","nativeSrc":"32340:4:69","nodeType":"YulLiteral","src":"32340:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"32329:3:69","nodeType":"YulIdentifier","src":"32329:3:69"},"nativeSrc":"32329:16:69","nodeType":"YulFunctionCall","src":"32329:16:69"},"variableNames":[{"name":"dst","nativeSrc":"32322:3:69","nodeType":"YulIdentifier","src":"32322:3:69"}]},{"nativeSrc":"32355:44:69","nodeType":"YulVariableDeclaration","src":"32355:44:69","value":{"arguments":[{"name":"offset","nativeSrc":"32373:6:69","nodeType":"YulIdentifier","src":"32373:6:69"},{"arguments":[{"name":"length","nativeSrc":"32385:6:69","nodeType":"YulIdentifier","src":"32385:6:69"},{"kind":"number","nativeSrc":"32393:4:69","nodeType":"YulLiteral","src":"32393:4:69","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"32381:3:69","nodeType":"YulIdentifier","src":"32381:3:69"},"nativeSrc":"32381:17:69","nodeType":"YulFunctionCall","src":"32381:17:69"}],"functionName":{"name":"add","nativeSrc":"32369:3:69","nodeType":"YulIdentifier","src":"32369:3:69"},"nativeSrc":"32369:30:69","nodeType":"YulFunctionCall","src":"32369:30:69"},"variables":[{"name":"srcEnd","nativeSrc":"32359:6:69","nodeType":"YulTypedName","src":"32359:6:69","type":""}]},{"body":{"nativeSrc":"32427:103:69","nodeType":"YulBlock","src":"32427:103:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"32441:77:69","nodeType":"YulIdentifier","src":"32441:77:69"},"nativeSrc":"32441:79:69","nodeType":"YulFunctionCall","src":"32441:79:69"},"nativeSrc":"32441:79:69","nodeType":"YulExpressionStatement","src":"32441:79:69"}]},"condition":{"arguments":[{"name":"srcEnd","nativeSrc":"32414:6:69","nodeType":"YulIdentifier","src":"32414:6:69"},{"name":"end","nativeSrc":"32422:3:69","nodeType":"YulIdentifier","src":"32422:3:69"}],"functionName":{"name":"gt","nativeSrc":"32411:2:69","nodeType":"YulIdentifier","src":"32411:2:69"},"nativeSrc":"32411:15:69","nodeType":"YulFunctionCall","src":"32411:15:69"},"nativeSrc":"32408:122:69","nodeType":"YulIf","src":"32408:122:69"},{"body":{"nativeSrc":"32615:144:69","nodeType":"YulBlock","src":"32615:144:69","statements":[{"nativeSrc":"32630:21:69","nodeType":"YulVariableDeclaration","src":"32630:21:69","value":{"name":"src","nativeSrc":"32648:3:69","nodeType":"YulIdentifier","src":"32648:3:69"},"variables":[{"name":"elementPos","nativeSrc":"32634:10:69","nodeType":"YulTypedName","src":"32634:10:69","type":""}]},{"expression":{"arguments":[{"name":"dst","nativeSrc":"32672:3:69","nodeType":"YulIdentifier","src":"32672:3:69"},{"arguments":[{"name":"elementPos","nativeSrc":"32698:10:69","nodeType":"YulIdentifier","src":"32698:10:69"},{"name":"end","nativeSrc":"32710:3:69","nodeType":"YulIdentifier","src":"32710:3:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"32677:20:69","nodeType":"YulIdentifier","src":"32677:20:69"},"nativeSrc":"32677:37:69","nodeType":"YulFunctionCall","src":"32677:37:69"}],"functionName":{"name":"mstore","nativeSrc":"32665:6:69","nodeType":"YulIdentifier","src":"32665:6:69"},"nativeSrc":"32665:50:69","nodeType":"YulFunctionCall","src":"32665:50:69"},"nativeSrc":"32665:50:69","nodeType":"YulExpressionStatement","src":"32665:50:69"},{"nativeSrc":"32728:21:69","nodeType":"YulAssignment","src":"32728:21:69","value":{"arguments":[{"name":"dst","nativeSrc":"32739:3:69","nodeType":"YulIdentifier","src":"32739:3:69"},{"kind":"number","nativeSrc":"32744:4:69","nodeType":"YulLiteral","src":"32744:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"32735:3:69","nodeType":"YulIdentifier","src":"32735:3:69"},"nativeSrc":"32735:14:69","nodeType":"YulFunctionCall","src":"32735:14:69"},"variableNames":[{"name":"dst","nativeSrc":"32728:3:69","nodeType":"YulIdentifier","src":"32728:3:69"}]}]},"condition":{"arguments":[{"name":"src","nativeSrc":"32568:3:69","nodeType":"YulIdentifier","src":"32568:3:69"},{"name":"srcEnd","nativeSrc":"32573:6:69","nodeType":"YulIdentifier","src":"32573:6:69"}],"functionName":{"name":"lt","nativeSrc":"32565:2:69","nodeType":"YulIdentifier","src":"32565:2:69"},"nativeSrc":"32565:15:69","nodeType":"YulFunctionCall","src":"32565:15:69"},"nativeSrc":"32539:220:69","nodeType":"YulForLoop","post":{"nativeSrc":"32581:25:69","nodeType":"YulBlock","src":"32581:25:69","statements":[{"nativeSrc":"32583:21:69","nodeType":"YulAssignment","src":"32583:21:69","value":{"arguments":[{"name":"src","nativeSrc":"32594:3:69","nodeType":"YulIdentifier","src":"32594:3:69"},{"kind":"number","nativeSrc":"32599:4:69","nodeType":"YulLiteral","src":"32599:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"32590:3:69","nodeType":"YulIdentifier","src":"32590:3:69"},"nativeSrc":"32590:14:69","nodeType":"YulFunctionCall","src":"32590:14:69"},"variableNames":[{"name":"src","nativeSrc":"32583:3:69","nodeType":"YulIdentifier","src":"32583:3:69"}]}]},"pre":{"nativeSrc":"32543:21:69","nodeType":"YulBlock","src":"32543:21:69","statements":[{"nativeSrc":"32545:17:69","nodeType":"YulVariableDeclaration","src":"32545:17:69","value":{"name":"offset","nativeSrc":"32556:6:69","nodeType":"YulIdentifier","src":"32556:6:69"},"variables":[{"name":"src","nativeSrc":"32549:3:69","nodeType":"YulTypedName","src":"32549:3:69","type":""}]}]},"src":"32539:220:69"}]},"name":"abi_decode_available_length_t_array$_t_address_$dyn_memory_ptr","nativeSrc":"32055:710:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"32127:6:69","nodeType":"YulTypedName","src":"32127:6:69","type":""},{"name":"length","nativeSrc":"32135:6:69","nodeType":"YulTypedName","src":"32135:6:69","type":""},{"name":"end","nativeSrc":"32143:3:69","nodeType":"YulTypedName","src":"32143:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"32151:5:69","nodeType":"YulTypedName","src":"32151:5:69","type":""}],"src":"32055:710:69"},{"body":{"nativeSrc":"32865:293:69","nodeType":"YulBlock","src":"32865:293:69","statements":[{"body":{"nativeSrc":"32914:83:69","nodeType":"YulBlock","src":"32914:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"32916:77:69","nodeType":"YulIdentifier","src":"32916:77:69"},"nativeSrc":"32916:79:69","nodeType":"YulFunctionCall","src":"32916:79:69"},"nativeSrc":"32916:79:69","nodeType":"YulExpressionStatement","src":"32916:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"32893:6:69","nodeType":"YulIdentifier","src":"32893:6:69"},{"kind":"number","nativeSrc":"32901:4:69","nodeType":"YulLiteral","src":"32901:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"32889:3:69","nodeType":"YulIdentifier","src":"32889:3:69"},"nativeSrc":"32889:17:69","nodeType":"YulFunctionCall","src":"32889:17:69"},{"name":"end","nativeSrc":"32908:3:69","nodeType":"YulIdentifier","src":"32908:3:69"}],"functionName":{"name":"slt","nativeSrc":"32885:3:69","nodeType":"YulIdentifier","src":"32885:3:69"},"nativeSrc":"32885:27:69","nodeType":"YulFunctionCall","src":"32885:27:69"}],"functionName":{"name":"iszero","nativeSrc":"32878:6:69","nodeType":"YulIdentifier","src":"32878:6:69"},"nativeSrc":"32878:35:69","nodeType":"YulFunctionCall","src":"32878:35:69"},"nativeSrc":"32875:122:69","nodeType":"YulIf","src":"32875:122:69"},{"nativeSrc":"33006:34:69","nodeType":"YulVariableDeclaration","src":"33006:34:69","value":{"arguments":[{"name":"offset","nativeSrc":"33033:6:69","nodeType":"YulIdentifier","src":"33033:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"33020:12:69","nodeType":"YulIdentifier","src":"33020:12:69"},"nativeSrc":"33020:20:69","nodeType":"YulFunctionCall","src":"33020:20:69"},"variables":[{"name":"length","nativeSrc":"33010:6:69","nodeType":"YulTypedName","src":"33010:6:69","type":""}]},{"nativeSrc":"33049:103:69","nodeType":"YulAssignment","src":"33049:103:69","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"33125:6:69","nodeType":"YulIdentifier","src":"33125:6:69"},{"kind":"number","nativeSrc":"33133:4:69","nodeType":"YulLiteral","src":"33133:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"33121:3:69","nodeType":"YulIdentifier","src":"33121:3:69"},"nativeSrc":"33121:17:69","nodeType":"YulFunctionCall","src":"33121:17:69"},{"name":"length","nativeSrc":"33140:6:69","nodeType":"YulIdentifier","src":"33140:6:69"},{"name":"end","nativeSrc":"33148:3:69","nodeType":"YulIdentifier","src":"33148:3:69"}],"functionName":{"name":"abi_decode_available_length_t_array$_t_address_$dyn_memory_ptr","nativeSrc":"33058:62:69","nodeType":"YulIdentifier","src":"33058:62:69"},"nativeSrc":"33058:94:69","nodeType":"YulFunctionCall","src":"33058:94:69"},"variableNames":[{"name":"array","nativeSrc":"33049:5:69","nodeType":"YulIdentifier","src":"33049:5:69"}]}]},"name":"abi_decode_t_array$_t_address_$dyn_memory_ptr","nativeSrc":"32788:370:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"32843:6:69","nodeType":"YulTypedName","src":"32843:6:69","type":""},{"name":"end","nativeSrc":"32851:3:69","nodeType":"YulTypedName","src":"32851:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"32859:5:69","nodeType":"YulTypedName","src":"32859:5:69","type":""}],"src":"32788:370:69"},{"body":{"nativeSrc":"33255:448:69","nodeType":"YulBlock","src":"33255:448:69","statements":[{"body":{"nativeSrc":"33301:83:69","nodeType":"YulBlock","src":"33301:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"33303:77:69","nodeType":"YulIdentifier","src":"33303:77:69"},"nativeSrc":"33303:79:69","nodeType":"YulFunctionCall","src":"33303:79:69"},"nativeSrc":"33303:79:69","nodeType":"YulExpressionStatement","src":"33303:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"33276:7:69","nodeType":"YulIdentifier","src":"33276:7:69"},{"name":"headStart","nativeSrc":"33285:9:69","nodeType":"YulIdentifier","src":"33285:9:69"}],"functionName":{"name":"sub","nativeSrc":"33272:3:69","nodeType":"YulIdentifier","src":"33272:3:69"},"nativeSrc":"33272:23:69","nodeType":"YulFunctionCall","src":"33272:23:69"},{"kind":"number","nativeSrc":"33297:2:69","nodeType":"YulLiteral","src":"33297:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"33268:3:69","nodeType":"YulIdentifier","src":"33268:3:69"},"nativeSrc":"33268:32:69","nodeType":"YulFunctionCall","src":"33268:32:69"},"nativeSrc":"33265:119:69","nodeType":"YulIf","src":"33265:119:69"},{"nativeSrc":"33394:302:69","nodeType":"YulBlock","src":"33394:302:69","statements":[{"nativeSrc":"33409:45:69","nodeType":"YulVariableDeclaration","src":"33409:45:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"33440:9:69","nodeType":"YulIdentifier","src":"33440:9:69"},{"kind":"number","nativeSrc":"33451:1:69","nodeType":"YulLiteral","src":"33451:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"33436:3:69","nodeType":"YulIdentifier","src":"33436:3:69"},"nativeSrc":"33436:17:69","nodeType":"YulFunctionCall","src":"33436:17:69"}],"functionName":{"name":"calldataload","nativeSrc":"33423:12:69","nodeType":"YulIdentifier","src":"33423:12:69"},"nativeSrc":"33423:31:69","nodeType":"YulFunctionCall","src":"33423:31:69"},"variables":[{"name":"offset","nativeSrc":"33413:6:69","nodeType":"YulTypedName","src":"33413:6:69","type":""}]},{"body":{"nativeSrc":"33501:83:69","nodeType":"YulBlock","src":"33501:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"33503:77:69","nodeType":"YulIdentifier","src":"33503:77:69"},"nativeSrc":"33503:79:69","nodeType":"YulFunctionCall","src":"33503:79:69"},"nativeSrc":"33503:79:69","nodeType":"YulExpressionStatement","src":"33503:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"33473:6:69","nodeType":"YulIdentifier","src":"33473:6:69"},{"kind":"number","nativeSrc":"33481:18:69","nodeType":"YulLiteral","src":"33481:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"33470:2:69","nodeType":"YulIdentifier","src":"33470:2:69"},"nativeSrc":"33470:30:69","nodeType":"YulFunctionCall","src":"33470:30:69"},"nativeSrc":"33467:117:69","nodeType":"YulIf","src":"33467:117:69"},{"nativeSrc":"33598:88:69","nodeType":"YulAssignment","src":"33598:88:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"33658:9:69","nodeType":"YulIdentifier","src":"33658:9:69"},{"name":"offset","nativeSrc":"33669:6:69","nodeType":"YulIdentifier","src":"33669:6:69"}],"functionName":{"name":"add","nativeSrc":"33654:3:69","nodeType":"YulIdentifier","src":"33654:3:69"},"nativeSrc":"33654:22:69","nodeType":"YulFunctionCall","src":"33654:22:69"},{"name":"dataEnd","nativeSrc":"33678:7:69","nodeType":"YulIdentifier","src":"33678:7:69"}],"functionName":{"name":"abi_decode_t_array$_t_address_$dyn_memory_ptr","nativeSrc":"33608:45:69","nodeType":"YulIdentifier","src":"33608:45:69"},"nativeSrc":"33608:78:69","nodeType":"YulFunctionCall","src":"33608:78:69"},"variableNames":[{"name":"value0","nativeSrc":"33598:6:69","nodeType":"YulIdentifier","src":"33598:6:69"}]}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr","nativeSrc":"33164:539:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"33225:9:69","nodeType":"YulTypedName","src":"33225:9:69","type":""},{"name":"dataEnd","nativeSrc":"33236:7:69","nodeType":"YulTypedName","src":"33236:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"33248:6:69","nodeType":"YulTypedName","src":"33248:6:69","type":""}],"src":"33164:539:69"},{"body":{"nativeSrc":"33783:40:69","nodeType":"YulBlock","src":"33783:40:69","statements":[{"nativeSrc":"33794:22:69","nodeType":"YulAssignment","src":"33794:22:69","value":{"arguments":[{"name":"value","nativeSrc":"33810:5:69","nodeType":"YulIdentifier","src":"33810:5:69"}],"functionName":{"name":"mload","nativeSrc":"33804:5:69","nodeType":"YulIdentifier","src":"33804:5:69"},"nativeSrc":"33804:12:69","nodeType":"YulFunctionCall","src":"33804:12:69"},"variableNames":[{"name":"length","nativeSrc":"33794:6:69","nodeType":"YulIdentifier","src":"33794:6:69"}]}]},"name":"array_length_t_array$_t_uint256_$dyn_memory_ptr","nativeSrc":"33709:114:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"33766:5:69","nodeType":"YulTypedName","src":"33766:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"33776:6:69","nodeType":"YulTypedName","src":"33776:6:69","type":""}],"src":"33709:114:69"},{"body":{"nativeSrc":"33940:73:69","nodeType":"YulBlock","src":"33940:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"33957:3:69","nodeType":"YulIdentifier","src":"33957:3:69"},{"name":"length","nativeSrc":"33962:6:69","nodeType":"YulIdentifier","src":"33962:6:69"}],"functionName":{"name":"mstore","nativeSrc":"33950:6:69","nodeType":"YulIdentifier","src":"33950:6:69"},"nativeSrc":"33950:19:69","nodeType":"YulFunctionCall","src":"33950:19:69"},"nativeSrc":"33950:19:69","nodeType":"YulExpressionStatement","src":"33950:19:69"},{"nativeSrc":"33978:29:69","nodeType":"YulAssignment","src":"33978:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"33997:3:69","nodeType":"YulIdentifier","src":"33997:3:69"},{"kind":"number","nativeSrc":"34002:4:69","nodeType":"YulLiteral","src":"34002:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"33993:3:69","nodeType":"YulIdentifier","src":"33993:3:69"},"nativeSrc":"33993:14:69","nodeType":"YulFunctionCall","src":"33993:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"33978:11:69","nodeType":"YulIdentifier","src":"33978:11:69"}]}]},"name":"array_storeLengthForEncoding_t_array$_t_uint256_$dyn_memory_ptr_fromStack","nativeSrc":"33829:184:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"33912:3:69","nodeType":"YulTypedName","src":"33912:3:69","type":""},{"name":"length","nativeSrc":"33917:6:69","nodeType":"YulTypedName","src":"33917:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"33928:11:69","nodeType":"YulTypedName","src":"33928:11:69","type":""}],"src":"33829:184:69"},{"body":{"nativeSrc":"34091:60:69","nodeType":"YulBlock","src":"34091:60:69","statements":[{"nativeSrc":"34101:11:69","nodeType":"YulAssignment","src":"34101:11:69","value":{"name":"ptr","nativeSrc":"34109:3:69","nodeType":"YulIdentifier","src":"34109:3:69"},"variableNames":[{"name":"data","nativeSrc":"34101:4:69","nodeType":"YulIdentifier","src":"34101:4:69"}]},{"nativeSrc":"34122:22:69","nodeType":"YulAssignment","src":"34122:22:69","value":{"arguments":[{"name":"ptr","nativeSrc":"34134:3:69","nodeType":"YulIdentifier","src":"34134:3:69"},{"kind":"number","nativeSrc":"34139:4:69","nodeType":"YulLiteral","src":"34139:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"34130:3:69","nodeType":"YulIdentifier","src":"34130:3:69"},"nativeSrc":"34130:14:69","nodeType":"YulFunctionCall","src":"34130:14:69"},"variableNames":[{"name":"data","nativeSrc":"34122:4:69","nodeType":"YulIdentifier","src":"34122:4:69"}]}]},"name":"array_dataslot_t_array$_t_uint256_$dyn_memory_ptr","nativeSrc":"34019:132:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nativeSrc":"34078:3:69","nodeType":"YulTypedName","src":"34078:3:69","type":""}],"returnVariables":[{"name":"data","nativeSrc":"34086:4:69","nodeType":"YulTypedName","src":"34086:4:69","type":""}],"src":"34019:132:69"},{"body":{"nativeSrc":"34237:99:69","nodeType":"YulBlock","src":"34237:99:69","statements":[{"expression":{"arguments":[{"name":"value0","nativeSrc":"34281:6:69","nodeType":"YulIdentifier","src":"34281:6:69"},{"name":"pos","nativeSrc":"34289:3:69","nodeType":"YulIdentifier","src":"34289:3:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256","nativeSrc":"34247:33:69","nodeType":"YulIdentifier","src":"34247:33:69"},"nativeSrc":"34247:46:69","nodeType":"YulFunctionCall","src":"34247:46:69"},"nativeSrc":"34247:46:69","nodeType":"YulExpressionStatement","src":"34247:46:69"},{"nativeSrc":"34302:28:69","nodeType":"YulAssignment","src":"34302:28:69","value":{"arguments":[{"name":"pos","nativeSrc":"34320:3:69","nodeType":"YulIdentifier","src":"34320:3:69"},{"kind":"number","nativeSrc":"34325:4:69","nodeType":"YulLiteral","src":"34325:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"34316:3:69","nodeType":"YulIdentifier","src":"34316:3:69"},"nativeSrc":"34316:14:69","nodeType":"YulFunctionCall","src":"34316:14:69"},"variableNames":[{"name":"updatedPos","nativeSrc":"34302:10:69","nodeType":"YulIdentifier","src":"34302:10:69"}]}]},"name":"abi_encodeUpdatedPos_t_uint256_to_t_uint256","nativeSrc":"34157:179:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value0","nativeSrc":"34210:6:69","nodeType":"YulTypedName","src":"34210:6:69","type":""},{"name":"pos","nativeSrc":"34218:3:69","nodeType":"YulTypedName","src":"34218:3:69","type":""}],"returnVariables":[{"name":"updatedPos","nativeSrc":"34226:10:69","nodeType":"YulTypedName","src":"34226:10:69","type":""}],"src":"34157:179:69"},{"body":{"nativeSrc":"34417:38:69","nodeType":"YulBlock","src":"34417:38:69","statements":[{"nativeSrc":"34427:22:69","nodeType":"YulAssignment","src":"34427:22:69","value":{"arguments":[{"name":"ptr","nativeSrc":"34439:3:69","nodeType":"YulIdentifier","src":"34439:3:69"},{"kind":"number","nativeSrc":"34444:4:69","nodeType":"YulLiteral","src":"34444:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"34435:3:69","nodeType":"YulIdentifier","src":"34435:3:69"},"nativeSrc":"34435:14:69","nodeType":"YulFunctionCall","src":"34435:14:69"},"variableNames":[{"name":"next","nativeSrc":"34427:4:69","nodeType":"YulIdentifier","src":"34427:4:69"}]}]},"name":"array_nextElement_t_array$_t_uint256_$dyn_memory_ptr","nativeSrc":"34342:113:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nativeSrc":"34404:3:69","nodeType":"YulTypedName","src":"34404:3:69","type":""}],"returnVariables":[{"name":"next","nativeSrc":"34412:4:69","nodeType":"YulTypedName","src":"34412:4:69","type":""}],"src":"34342:113:69"},{"body":{"nativeSrc":"34615:608:69","nodeType":"YulBlock","src":"34615:608:69","statements":[{"nativeSrc":"34625:68:69","nodeType":"YulVariableDeclaration","src":"34625:68:69","value":{"arguments":[{"name":"value","nativeSrc":"34687:5:69","nodeType":"YulIdentifier","src":"34687:5:69"}],"functionName":{"name":"array_length_t_array$_t_uint256_$dyn_memory_ptr","nativeSrc":"34639:47:69","nodeType":"YulIdentifier","src":"34639:47:69"},"nativeSrc":"34639:54:69","nodeType":"YulFunctionCall","src":"34639:54:69"},"variables":[{"name":"length","nativeSrc":"34629:6:69","nodeType":"YulTypedName","src":"34629:6:69","type":""}]},{"nativeSrc":"34702:93:69","nodeType":"YulAssignment","src":"34702:93:69","value":{"arguments":[{"name":"pos","nativeSrc":"34783:3:69","nodeType":"YulIdentifier","src":"34783:3:69"},{"name":"length","nativeSrc":"34788:6:69","nodeType":"YulIdentifier","src":"34788:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_array$_t_uint256_$dyn_memory_ptr_fromStack","nativeSrc":"34709:73:69","nodeType":"YulIdentifier","src":"34709:73:69"},"nativeSrc":"34709:86:69","nodeType":"YulFunctionCall","src":"34709:86:69"},"variableNames":[{"name":"pos","nativeSrc":"34702:3:69","nodeType":"YulIdentifier","src":"34702:3:69"}]},{"nativeSrc":"34804:71:69","nodeType":"YulVariableDeclaration","src":"34804:71:69","value":{"arguments":[{"name":"value","nativeSrc":"34869:5:69","nodeType":"YulIdentifier","src":"34869:5:69"}],"functionName":{"name":"array_dataslot_t_array$_t_uint256_$dyn_memory_ptr","nativeSrc":"34819:49:69","nodeType":"YulIdentifier","src":"34819:49:69"},"nativeSrc":"34819:56:69","nodeType":"YulFunctionCall","src":"34819:56:69"},"variables":[{"name":"baseRef","nativeSrc":"34808:7:69","nodeType":"YulTypedName","src":"34808:7:69","type":""}]},{"nativeSrc":"34884:21:69","nodeType":"YulVariableDeclaration","src":"34884:21:69","value":{"name":"baseRef","nativeSrc":"34898:7:69","nodeType":"YulIdentifier","src":"34898:7:69"},"variables":[{"name":"srcPtr","nativeSrc":"34888:6:69","nodeType":"YulTypedName","src":"34888:6:69","type":""}]},{"body":{"nativeSrc":"34974:224:69","nodeType":"YulBlock","src":"34974:224:69","statements":[{"nativeSrc":"34988:34:69","nodeType":"YulVariableDeclaration","src":"34988:34:69","value":{"arguments":[{"name":"srcPtr","nativeSrc":"35015:6:69","nodeType":"YulIdentifier","src":"35015:6:69"}],"functionName":{"name":"mload","nativeSrc":"35009:5:69","nodeType":"YulIdentifier","src":"35009:5:69"},"nativeSrc":"35009:13:69","nodeType":"YulFunctionCall","src":"35009:13:69"},"variables":[{"name":"elementValue0","nativeSrc":"34992:13:69","nodeType":"YulTypedName","src":"34992:13:69","type":""}]},{"nativeSrc":"35035:70:69","nodeType":"YulAssignment","src":"35035:70:69","value":{"arguments":[{"name":"elementValue0","nativeSrc":"35086:13:69","nodeType":"YulIdentifier","src":"35086:13:69"},{"name":"pos","nativeSrc":"35101:3:69","nodeType":"YulIdentifier","src":"35101:3:69"}],"functionName":{"name":"abi_encodeUpdatedPos_t_uint256_to_t_uint256","nativeSrc":"35042:43:69","nodeType":"YulIdentifier","src":"35042:43:69"},"nativeSrc":"35042:63:69","nodeType":"YulFunctionCall","src":"35042:63:69"},"variableNames":[{"name":"pos","nativeSrc":"35035:3:69","nodeType":"YulIdentifier","src":"35035:3:69"}]},{"nativeSrc":"35118:70:69","nodeType":"YulAssignment","src":"35118:70:69","value":{"arguments":[{"name":"srcPtr","nativeSrc":"35181:6:69","nodeType":"YulIdentifier","src":"35181:6:69"}],"functionName":{"name":"array_nextElement_t_array$_t_uint256_$dyn_memory_ptr","nativeSrc":"35128:52:69","nodeType":"YulIdentifier","src":"35128:52:69"},"nativeSrc":"35128:60:69","nodeType":"YulFunctionCall","src":"35128:60:69"},"variableNames":[{"name":"srcPtr","nativeSrc":"35118:6:69","nodeType":"YulIdentifier","src":"35118:6:69"}]}]},"condition":{"arguments":[{"name":"i","nativeSrc":"34936:1:69","nodeType":"YulIdentifier","src":"34936:1:69"},{"name":"length","nativeSrc":"34939:6:69","nodeType":"YulIdentifier","src":"34939:6:69"}],"functionName":{"name":"lt","nativeSrc":"34933:2:69","nodeType":"YulIdentifier","src":"34933:2:69"},"nativeSrc":"34933:13:69","nodeType":"YulFunctionCall","src":"34933:13:69"},"nativeSrc":"34914:284:69","nodeType":"YulForLoop","post":{"nativeSrc":"34947:18:69","nodeType":"YulBlock","src":"34947:18:69","statements":[{"nativeSrc":"34949:14:69","nodeType":"YulAssignment","src":"34949:14:69","value":{"arguments":[{"name":"i","nativeSrc":"34958:1:69","nodeType":"YulIdentifier","src":"34958:1:69"},{"kind":"number","nativeSrc":"34961:1:69","nodeType":"YulLiteral","src":"34961:1:69","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"34954:3:69","nodeType":"YulIdentifier","src":"34954:3:69"},"nativeSrc":"34954:9:69","nodeType":"YulFunctionCall","src":"34954:9:69"},"variableNames":[{"name":"i","nativeSrc":"34949:1:69","nodeType":"YulIdentifier","src":"34949:1:69"}]}]},"pre":{"nativeSrc":"34918:14:69","nodeType":"YulBlock","src":"34918:14:69","statements":[{"nativeSrc":"34920:10:69","nodeType":"YulVariableDeclaration","src":"34920:10:69","value":{"kind":"number","nativeSrc":"34929:1:69","nodeType":"YulLiteral","src":"34929:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"34924:1:69","nodeType":"YulTypedName","src":"34924:1:69","type":""}]}]},"src":"34914:284:69"},{"nativeSrc":"35207:10:69","nodeType":"YulAssignment","src":"35207:10:69","value":{"name":"pos","nativeSrc":"35214:3:69","nodeType":"YulIdentifier","src":"35214:3:69"},"variableNames":[{"name":"end","nativeSrc":"35207:3:69","nodeType":"YulIdentifier","src":"35207:3:69"}]}]},"name":"abi_encode_t_array$_t_uint256_$dyn_memory_ptr_to_t_array$_t_uint256_$dyn_memory_ptr_fromStack","nativeSrc":"34491:732:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"34594:5:69","nodeType":"YulTypedName","src":"34594:5:69","type":""},{"name":"pos","nativeSrc":"34601:3:69","nodeType":"YulTypedName","src":"34601:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"34610:3:69","nodeType":"YulTypedName","src":"34610:3:69","type":""}],"src":"34491:732:69"},{"body":{"nativeSrc":"35377:225:69","nodeType":"YulBlock","src":"35377:225:69","statements":[{"nativeSrc":"35387:26:69","nodeType":"YulAssignment","src":"35387:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"35399:9:69","nodeType":"YulIdentifier","src":"35399:9:69"},{"kind":"number","nativeSrc":"35410:2:69","nodeType":"YulLiteral","src":"35410:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"35395:3:69","nodeType":"YulIdentifier","src":"35395:3:69"},"nativeSrc":"35395:18:69","nodeType":"YulFunctionCall","src":"35395:18:69"},"variableNames":[{"name":"tail","nativeSrc":"35387:4:69","nodeType":"YulIdentifier","src":"35387:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"35434:9:69","nodeType":"YulIdentifier","src":"35434:9:69"},{"kind":"number","nativeSrc":"35445:1:69","nodeType":"YulLiteral","src":"35445:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"35430:3:69","nodeType":"YulIdentifier","src":"35430:3:69"},"nativeSrc":"35430:17:69","nodeType":"YulFunctionCall","src":"35430:17:69"},{"arguments":[{"name":"tail","nativeSrc":"35453:4:69","nodeType":"YulIdentifier","src":"35453:4:69"},{"name":"headStart","nativeSrc":"35459:9:69","nodeType":"YulIdentifier","src":"35459:9:69"}],"functionName":{"name":"sub","nativeSrc":"35449:3:69","nodeType":"YulIdentifier","src":"35449:3:69"},"nativeSrc":"35449:20:69","nodeType":"YulFunctionCall","src":"35449:20:69"}],"functionName":{"name":"mstore","nativeSrc":"35423:6:69","nodeType":"YulIdentifier","src":"35423:6:69"},"nativeSrc":"35423:47:69","nodeType":"YulFunctionCall","src":"35423:47:69"},"nativeSrc":"35423:47:69","nodeType":"YulExpressionStatement","src":"35423:47:69"},{"nativeSrc":"35479:116:69","nodeType":"YulAssignment","src":"35479:116:69","value":{"arguments":[{"name":"value0","nativeSrc":"35581:6:69","nodeType":"YulIdentifier","src":"35581:6:69"},{"name":"tail","nativeSrc":"35590:4:69","nodeType":"YulIdentifier","src":"35590:4:69"}],"functionName":{"name":"abi_encode_t_array$_t_uint256_$dyn_memory_ptr_to_t_array$_t_uint256_$dyn_memory_ptr_fromStack","nativeSrc":"35487:93:69","nodeType":"YulIdentifier","src":"35487:93:69"},"nativeSrc":"35487:108:69","nodeType":"YulFunctionCall","src":"35487:108:69"},"variableNames":[{"name":"tail","nativeSrc":"35479:4:69","nodeType":"YulIdentifier","src":"35479:4:69"}]}]},"name":"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed","nativeSrc":"35229:373:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"35349:9:69","nodeType":"YulTypedName","src":"35349:9:69","type":""},{"name":"value0","nativeSrc":"35361:6:69","nodeType":"YulTypedName","src":"35361:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"35372:4:69","nodeType":"YulTypedName","src":"35372:4:69","type":""}],"src":"35229:373:69"},{"body":{"nativeSrc":"35669:51:69","nodeType":"YulBlock","src":"35669:51:69","statements":[{"nativeSrc":"35679:35:69","nodeType":"YulAssignment","src":"35679:35:69","value":{"arguments":[{"name":"value","nativeSrc":"35708:5:69","nodeType":"YulIdentifier","src":"35708:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"35690:17:69","nodeType":"YulIdentifier","src":"35690:17:69"},"nativeSrc":"35690:24:69","nodeType":"YulFunctionCall","src":"35690:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"35679:7:69","nodeType":"YulIdentifier","src":"35679:7:69"}]}]},"name":"cleanup_t_contract$_IPrime_$16613","nativeSrc":"35608:112:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"35651:5:69","nodeType":"YulTypedName","src":"35651:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"35661:7:69","nodeType":"YulTypedName","src":"35661:7:69","type":""}],"src":"35608:112:69"},{"body":{"nativeSrc":"35785:95:69","nodeType":"YulBlock","src":"35785:95:69","statements":[{"body":{"nativeSrc":"35858:16:69","nodeType":"YulBlock","src":"35858:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"35867:1:69","nodeType":"YulLiteral","src":"35867:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"35870:1:69","nodeType":"YulLiteral","src":"35870:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"35860:6:69","nodeType":"YulIdentifier","src":"35860:6:69"},"nativeSrc":"35860:12:69","nodeType":"YulFunctionCall","src":"35860:12:69"},"nativeSrc":"35860:12:69","nodeType":"YulExpressionStatement","src":"35860:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"35808:5:69","nodeType":"YulIdentifier","src":"35808:5:69"},{"arguments":[{"name":"value","nativeSrc":"35849:5:69","nodeType":"YulIdentifier","src":"35849:5:69"}],"functionName":{"name":"cleanup_t_contract$_IPrime_$16613","nativeSrc":"35815:33:69","nodeType":"YulIdentifier","src":"35815:33:69"},"nativeSrc":"35815:40:69","nodeType":"YulFunctionCall","src":"35815:40:69"}],"functionName":{"name":"eq","nativeSrc":"35805:2:69","nodeType":"YulIdentifier","src":"35805:2:69"},"nativeSrc":"35805:51:69","nodeType":"YulFunctionCall","src":"35805:51:69"}],"functionName":{"name":"iszero","nativeSrc":"35798:6:69","nodeType":"YulIdentifier","src":"35798:6:69"},"nativeSrc":"35798:59:69","nodeType":"YulFunctionCall","src":"35798:59:69"},"nativeSrc":"35795:79:69","nodeType":"YulIf","src":"35795:79:69"}]},"name":"validator_revert_t_contract$_IPrime_$16613","nativeSrc":"35726:154:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"35778:5:69","nodeType":"YulTypedName","src":"35778:5:69","type":""}],"src":"35726:154:69"},{"body":{"nativeSrc":"35954:103:69","nodeType":"YulBlock","src":"35954:103:69","statements":[{"nativeSrc":"35964:29:69","nodeType":"YulAssignment","src":"35964:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"35986:6:69","nodeType":"YulIdentifier","src":"35986:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"35973:12:69","nodeType":"YulIdentifier","src":"35973:12:69"},"nativeSrc":"35973:20:69","nodeType":"YulFunctionCall","src":"35973:20:69"},"variableNames":[{"name":"value","nativeSrc":"35964:5:69","nodeType":"YulIdentifier","src":"35964:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"36045:5:69","nodeType":"YulIdentifier","src":"36045:5:69"}],"functionName":{"name":"validator_revert_t_contract$_IPrime_$16613","nativeSrc":"36002:42:69","nodeType":"YulIdentifier","src":"36002:42:69"},"nativeSrc":"36002:49:69","nodeType":"YulFunctionCall","src":"36002:49:69"},"nativeSrc":"36002:49:69","nodeType":"YulExpressionStatement","src":"36002:49:69"}]},"name":"abi_decode_t_contract$_IPrime_$16613","nativeSrc":"35886:171:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"35932:6:69","nodeType":"YulTypedName","src":"35932:6:69","type":""},{"name":"end","nativeSrc":"35940:3:69","nodeType":"YulTypedName","src":"35940:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"35948:5:69","nodeType":"YulTypedName","src":"35948:5:69","type":""}],"src":"35886:171:69"},{"body":{"nativeSrc":"36145:279:69","nodeType":"YulBlock","src":"36145:279:69","statements":[{"body":{"nativeSrc":"36191:83:69","nodeType":"YulBlock","src":"36191:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"36193:77:69","nodeType":"YulIdentifier","src":"36193:77:69"},"nativeSrc":"36193:79:69","nodeType":"YulFunctionCall","src":"36193:79:69"},"nativeSrc":"36193:79:69","nodeType":"YulExpressionStatement","src":"36193:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"36166:7:69","nodeType":"YulIdentifier","src":"36166:7:69"},{"name":"headStart","nativeSrc":"36175:9:69","nodeType":"YulIdentifier","src":"36175:9:69"}],"functionName":{"name":"sub","nativeSrc":"36162:3:69","nodeType":"YulIdentifier","src":"36162:3:69"},"nativeSrc":"36162:23:69","nodeType":"YulFunctionCall","src":"36162:23:69"},{"kind":"number","nativeSrc":"36187:2:69","nodeType":"YulLiteral","src":"36187:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"36158:3:69","nodeType":"YulIdentifier","src":"36158:3:69"},"nativeSrc":"36158:32:69","nodeType":"YulFunctionCall","src":"36158:32:69"},"nativeSrc":"36155:119:69","nodeType":"YulIf","src":"36155:119:69"},{"nativeSrc":"36284:133:69","nodeType":"YulBlock","src":"36284:133:69","statements":[{"nativeSrc":"36299:15:69","nodeType":"YulVariableDeclaration","src":"36299:15:69","value":{"kind":"number","nativeSrc":"36313:1:69","nodeType":"YulLiteral","src":"36313:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"36303:6:69","nodeType":"YulTypedName","src":"36303:6:69","type":""}]},{"nativeSrc":"36328:79:69","nodeType":"YulAssignment","src":"36328:79:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"36379:9:69","nodeType":"YulIdentifier","src":"36379:9:69"},{"name":"offset","nativeSrc":"36390:6:69","nodeType":"YulIdentifier","src":"36390:6:69"}],"functionName":{"name":"add","nativeSrc":"36375:3:69","nodeType":"YulIdentifier","src":"36375:3:69"},"nativeSrc":"36375:22:69","nodeType":"YulFunctionCall","src":"36375:22:69"},{"name":"dataEnd","nativeSrc":"36399:7:69","nodeType":"YulIdentifier","src":"36399:7:69"}],"functionName":{"name":"abi_decode_t_contract$_IPrime_$16613","nativeSrc":"36338:36:69","nodeType":"YulIdentifier","src":"36338:36:69"},"nativeSrc":"36338:69:69","nodeType":"YulFunctionCall","src":"36338:69:69"},"variableNames":[{"name":"value0","nativeSrc":"36328:6:69","nodeType":"YulIdentifier","src":"36328:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_IPrime_$16613","nativeSrc":"36063:361:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"36115:9:69","nodeType":"YulTypedName","src":"36115:9:69","type":""},{"name":"dataEnd","nativeSrc":"36126:7:69","nodeType":"YulTypedName","src":"36126:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"36138:6:69","nodeType":"YulTypedName","src":"36138:6:69","type":""}],"src":"36063:361:69"},{"body":{"nativeSrc":"36556:206:69","nodeType":"YulBlock","src":"36556:206:69","statements":[{"nativeSrc":"36566:26:69","nodeType":"YulAssignment","src":"36566:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"36578:9:69","nodeType":"YulIdentifier","src":"36578:9:69"},{"kind":"number","nativeSrc":"36589:2:69","nodeType":"YulLiteral","src":"36589:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"36574:3:69","nodeType":"YulIdentifier","src":"36574:3:69"},"nativeSrc":"36574:18:69","nodeType":"YulFunctionCall","src":"36574:18:69"},"variableNames":[{"name":"tail","nativeSrc":"36566:4:69","nodeType":"YulIdentifier","src":"36566:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"36646:6:69","nodeType":"YulIdentifier","src":"36646:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"36659:9:69","nodeType":"YulIdentifier","src":"36659:9:69"},{"kind":"number","nativeSrc":"36670:1:69","nodeType":"YulLiteral","src":"36670:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"36655:3:69","nodeType":"YulIdentifier","src":"36655:3:69"},"nativeSrc":"36655:17:69","nodeType":"YulFunctionCall","src":"36655:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"36602:43:69","nodeType":"YulIdentifier","src":"36602:43:69"},"nativeSrc":"36602:71:69","nodeType":"YulFunctionCall","src":"36602:71:69"},"nativeSrc":"36602:71:69","nodeType":"YulExpressionStatement","src":"36602:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"36727:6:69","nodeType":"YulIdentifier","src":"36727:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"36740:9:69","nodeType":"YulIdentifier","src":"36740:9:69"},{"kind":"number","nativeSrc":"36751:2:69","nodeType":"YulLiteral","src":"36751:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"36736:3:69","nodeType":"YulIdentifier","src":"36736:3:69"},"nativeSrc":"36736:18:69","nodeType":"YulFunctionCall","src":"36736:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"36683:43:69","nodeType":"YulIdentifier","src":"36683:43:69"},"nativeSrc":"36683:72:69","nodeType":"YulFunctionCall","src":"36683:72:69"},"nativeSrc":"36683:72:69","nodeType":"YulExpressionStatement","src":"36683:72:69"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"36430:332:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"36520:9:69","nodeType":"YulTypedName","src":"36520:9:69","type":""},{"name":"value1","nativeSrc":"36532:6:69","nodeType":"YulTypedName","src":"36532:6:69","type":""},{"name":"value0","nativeSrc":"36540:6:69","nodeType":"YulTypedName","src":"36540:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"36551:4:69","nodeType":"YulTypedName","src":"36551:4:69","type":""}],"src":"36430:332:69"},{"body":{"nativeSrc":"36844:66:69","nodeType":"YulBlock","src":"36844:66:69","statements":[{"nativeSrc":"36854:50:69","nodeType":"YulAssignment","src":"36854:50:69","value":{"arguments":[{"name":"value","nativeSrc":"36898:5:69","nodeType":"YulIdentifier","src":"36898:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"36867:30:69","nodeType":"YulIdentifier","src":"36867:30:69"},"nativeSrc":"36867:37:69","nodeType":"YulFunctionCall","src":"36867:37:69"},"variableNames":[{"name":"converted","nativeSrc":"36854:9:69","nodeType":"YulIdentifier","src":"36854:9:69"}]}]},"name":"convert_t_contract$_IPrime_$16613_to_t_address","nativeSrc":"36768:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"36824:5:69","nodeType":"YulTypedName","src":"36824:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"36834:9:69","nodeType":"YulTypedName","src":"36834:9:69","type":""}],"src":"36768:142:69"},{"body":{"nativeSrc":"36997:82:69","nodeType":"YulBlock","src":"36997:82:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"37014:3:69","nodeType":"YulIdentifier","src":"37014:3:69"},{"arguments":[{"name":"value","nativeSrc":"37066:5:69","nodeType":"YulIdentifier","src":"37066:5:69"}],"functionName":{"name":"convert_t_contract$_IPrime_$16613_to_t_address","nativeSrc":"37019:46:69","nodeType":"YulIdentifier","src":"37019:46:69"},"nativeSrc":"37019:53:69","nodeType":"YulFunctionCall","src":"37019:53:69"}],"functionName":{"name":"mstore","nativeSrc":"37007:6:69","nodeType":"YulIdentifier","src":"37007:6:69"},"nativeSrc":"37007:66:69","nodeType":"YulFunctionCall","src":"37007:66:69"},"nativeSrc":"37007:66:69","nodeType":"YulExpressionStatement","src":"37007:66:69"}]},"name":"abi_encode_t_contract$_IPrime_$16613_to_t_address_fromStack","nativeSrc":"36916:163:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"36985:5:69","nodeType":"YulTypedName","src":"36985:5:69","type":""},{"name":"pos","nativeSrc":"36992:3:69","nodeType":"YulTypedName","src":"36992:3:69","type":""}],"src":"36916:163:69"},{"body":{"nativeSrc":"37199:140:69","nodeType":"YulBlock","src":"37199:140:69","statements":[{"nativeSrc":"37209:26:69","nodeType":"YulAssignment","src":"37209:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"37221:9:69","nodeType":"YulIdentifier","src":"37221:9:69"},{"kind":"number","nativeSrc":"37232:2:69","nodeType":"YulLiteral","src":"37232:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"37217:3:69","nodeType":"YulIdentifier","src":"37217:3:69"},"nativeSrc":"37217:18:69","nodeType":"YulFunctionCall","src":"37217:18:69"},"variableNames":[{"name":"tail","nativeSrc":"37209:4:69","nodeType":"YulIdentifier","src":"37209:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"37305:6:69","nodeType":"YulIdentifier","src":"37305:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"37318:9:69","nodeType":"YulIdentifier","src":"37318:9:69"},{"kind":"number","nativeSrc":"37329:1:69","nodeType":"YulLiteral","src":"37329:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"37314:3:69","nodeType":"YulIdentifier","src":"37314:3:69"},"nativeSrc":"37314:17:69","nodeType":"YulFunctionCall","src":"37314:17:69"}],"functionName":{"name":"abi_encode_t_contract$_IPrime_$16613_to_t_address_fromStack","nativeSrc":"37245:59:69","nodeType":"YulIdentifier","src":"37245:59:69"},"nativeSrc":"37245:87:69","nodeType":"YulFunctionCall","src":"37245:87:69"},"nativeSrc":"37245:87:69","nodeType":"YulExpressionStatement","src":"37245:87:69"}]},"name":"abi_encode_tuple_t_contract$_IPrime_$16613__to_t_address__fromStack_reversed","nativeSrc":"37085:254:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"37171:9:69","nodeType":"YulTypedName","src":"37171:9:69","type":""},{"name":"value0","nativeSrc":"37183:6:69","nodeType":"YulTypedName","src":"37183:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"37194:4:69","nodeType":"YulTypedName","src":"37194:4:69","type":""}],"src":"37085:254:69"},{"body":{"nativeSrc":"37428:391:69","nodeType":"YulBlock","src":"37428:391:69","statements":[{"body":{"nativeSrc":"37474:83:69","nodeType":"YulBlock","src":"37474:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"37476:77:69","nodeType":"YulIdentifier","src":"37476:77:69"},"nativeSrc":"37476:79:69","nodeType":"YulFunctionCall","src":"37476:79:69"},"nativeSrc":"37476:79:69","nodeType":"YulExpressionStatement","src":"37476:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"37449:7:69","nodeType":"YulIdentifier","src":"37449:7:69"},{"name":"headStart","nativeSrc":"37458:9:69","nodeType":"YulIdentifier","src":"37458:9:69"}],"functionName":{"name":"sub","nativeSrc":"37445:3:69","nodeType":"YulIdentifier","src":"37445:3:69"},"nativeSrc":"37445:23:69","nodeType":"YulFunctionCall","src":"37445:23:69"},{"kind":"number","nativeSrc":"37470:2:69","nodeType":"YulLiteral","src":"37470:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"37441:3:69","nodeType":"YulIdentifier","src":"37441:3:69"},"nativeSrc":"37441:32:69","nodeType":"YulFunctionCall","src":"37441:32:69"},"nativeSrc":"37438:119:69","nodeType":"YulIf","src":"37438:119:69"},{"nativeSrc":"37567:117:69","nodeType":"YulBlock","src":"37567:117:69","statements":[{"nativeSrc":"37582:15:69","nodeType":"YulVariableDeclaration","src":"37582:15:69","value":{"kind":"number","nativeSrc":"37596:1:69","nodeType":"YulLiteral","src":"37596:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"37586:6:69","nodeType":"YulTypedName","src":"37586:6:69","type":""}]},{"nativeSrc":"37611:63:69","nodeType":"YulAssignment","src":"37611:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"37646:9:69","nodeType":"YulIdentifier","src":"37646:9:69"},{"name":"offset","nativeSrc":"37657:6:69","nodeType":"YulIdentifier","src":"37657:6:69"}],"functionName":{"name":"add","nativeSrc":"37642:3:69","nodeType":"YulIdentifier","src":"37642:3:69"},"nativeSrc":"37642:22:69","nodeType":"YulFunctionCall","src":"37642:22:69"},{"name":"dataEnd","nativeSrc":"37666:7:69","nodeType":"YulIdentifier","src":"37666:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"37621:20:69","nodeType":"YulIdentifier","src":"37621:20:69"},"nativeSrc":"37621:53:69","nodeType":"YulFunctionCall","src":"37621:53:69"},"variableNames":[{"name":"value0","nativeSrc":"37611:6:69","nodeType":"YulIdentifier","src":"37611:6:69"}]}]},{"nativeSrc":"37694:118:69","nodeType":"YulBlock","src":"37694:118:69","statements":[{"nativeSrc":"37709:16:69","nodeType":"YulVariableDeclaration","src":"37709:16:69","value":{"kind":"number","nativeSrc":"37723:2:69","nodeType":"YulLiteral","src":"37723:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"37713:6:69","nodeType":"YulTypedName","src":"37713:6:69","type":""}]},{"nativeSrc":"37739:63:69","nodeType":"YulAssignment","src":"37739:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"37774:9:69","nodeType":"YulIdentifier","src":"37774:9:69"},{"name":"offset","nativeSrc":"37785:6:69","nodeType":"YulIdentifier","src":"37785:6:69"}],"functionName":{"name":"add","nativeSrc":"37770:3:69","nodeType":"YulIdentifier","src":"37770:3:69"},"nativeSrc":"37770:22:69","nodeType":"YulFunctionCall","src":"37770:22:69"},{"name":"dataEnd","nativeSrc":"37794:7:69","nodeType":"YulIdentifier","src":"37794:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"37749:20:69","nodeType":"YulIdentifier","src":"37749:20:69"},"nativeSrc":"37749:53:69","nodeType":"YulFunctionCall","src":"37749:53:69"},"variableNames":[{"name":"value1","nativeSrc":"37739:6:69","nodeType":"YulIdentifier","src":"37739:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint256t_address","nativeSrc":"37345:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"37390:9:69","nodeType":"YulTypedName","src":"37390:9:69","type":""},{"name":"dataEnd","nativeSrc":"37401:7:69","nodeType":"YulTypedName","src":"37401:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"37413:6:69","nodeType":"YulTypedName","src":"37413:6:69","type":""},{"name":"value1","nativeSrc":"37421:6:69","nodeType":"YulTypedName","src":"37421:6:69","type":""}],"src":"37345:474:69"},{"body":{"nativeSrc":"37908:391:69","nodeType":"YulBlock","src":"37908:391:69","statements":[{"body":{"nativeSrc":"37954:83:69","nodeType":"YulBlock","src":"37954:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"37956:77:69","nodeType":"YulIdentifier","src":"37956:77:69"},"nativeSrc":"37956:79:69","nodeType":"YulFunctionCall","src":"37956:79:69"},"nativeSrc":"37956:79:69","nodeType":"YulExpressionStatement","src":"37956:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"37929:7:69","nodeType":"YulIdentifier","src":"37929:7:69"},{"name":"headStart","nativeSrc":"37938:9:69","nodeType":"YulIdentifier","src":"37938:9:69"}],"functionName":{"name":"sub","nativeSrc":"37925:3:69","nodeType":"YulIdentifier","src":"37925:3:69"},"nativeSrc":"37925:23:69","nodeType":"YulFunctionCall","src":"37925:23:69"},{"kind":"number","nativeSrc":"37950:2:69","nodeType":"YulLiteral","src":"37950:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"37921:3:69","nodeType":"YulIdentifier","src":"37921:3:69"},"nativeSrc":"37921:32:69","nodeType":"YulFunctionCall","src":"37921:32:69"},"nativeSrc":"37918:119:69","nodeType":"YulIf","src":"37918:119:69"},{"nativeSrc":"38047:117:69","nodeType":"YulBlock","src":"38047:117:69","statements":[{"nativeSrc":"38062:15:69","nodeType":"YulVariableDeclaration","src":"38062:15:69","value":{"kind":"number","nativeSrc":"38076:1:69","nodeType":"YulLiteral","src":"38076:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"38066:6:69","nodeType":"YulTypedName","src":"38066:6:69","type":""}]},{"nativeSrc":"38091:63:69","nodeType":"YulAssignment","src":"38091:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"38126:9:69","nodeType":"YulIdentifier","src":"38126:9:69"},{"name":"offset","nativeSrc":"38137:6:69","nodeType":"YulIdentifier","src":"38137:6:69"}],"functionName":{"name":"add","nativeSrc":"38122:3:69","nodeType":"YulIdentifier","src":"38122:3:69"},"nativeSrc":"38122:22:69","nodeType":"YulFunctionCall","src":"38122:22:69"},{"name":"dataEnd","nativeSrc":"38146:7:69","nodeType":"YulIdentifier","src":"38146:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"38101:20:69","nodeType":"YulIdentifier","src":"38101:20:69"},"nativeSrc":"38101:53:69","nodeType":"YulFunctionCall","src":"38101:53:69"},"variableNames":[{"name":"value0","nativeSrc":"38091:6:69","nodeType":"YulIdentifier","src":"38091:6:69"}]}]},{"nativeSrc":"38174:118:69","nodeType":"YulBlock","src":"38174:118:69","statements":[{"nativeSrc":"38189:16:69","nodeType":"YulVariableDeclaration","src":"38189:16:69","value":{"kind":"number","nativeSrc":"38203:2:69","nodeType":"YulLiteral","src":"38203:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"38193:6:69","nodeType":"YulTypedName","src":"38193:6:69","type":""}]},{"nativeSrc":"38219:63:69","nodeType":"YulAssignment","src":"38219:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"38254:9:69","nodeType":"YulIdentifier","src":"38254:9:69"},{"name":"offset","nativeSrc":"38265:6:69","nodeType":"YulIdentifier","src":"38265:6:69"}],"functionName":{"name":"add","nativeSrc":"38250:3:69","nodeType":"YulIdentifier","src":"38250:3:69"},"nativeSrc":"38250:22:69","nodeType":"YulFunctionCall","src":"38250:22:69"},{"name":"dataEnd","nativeSrc":"38274:7:69","nodeType":"YulIdentifier","src":"38274:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"38229:20:69","nodeType":"YulIdentifier","src":"38229:20:69"},"nativeSrc":"38229:53:69","nodeType":"YulFunctionCall","src":"38229:53:69"},"variableNames":[{"name":"value1","nativeSrc":"38219:6:69","nodeType":"YulIdentifier","src":"38219:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nativeSrc":"37825:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"37870:9:69","nodeType":"YulTypedName","src":"37870:9:69","type":""},{"name":"dataEnd","nativeSrc":"37881:7:69","nodeType":"YulTypedName","src":"37881:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"37893:6:69","nodeType":"YulTypedName","src":"37893:6:69","type":""},{"name":"value1","nativeSrc":"37901:6:69","nodeType":"YulTypedName","src":"37901:6:69","type":""}],"src":"37825:474:69"},{"body":{"nativeSrc":"38359:56:69","nodeType":"YulBlock","src":"38359:56:69","statements":[{"body":{"nativeSrc":"38393:16:69","nodeType":"YulBlock","src":"38393:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"38402:1:69","nodeType":"YulLiteral","src":"38402:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"38405:1:69","nodeType":"YulLiteral","src":"38405:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"38395:6:69","nodeType":"YulIdentifier","src":"38395:6:69"},"nativeSrc":"38395:12:69","nodeType":"YulFunctionCall","src":"38395:12:69"},"nativeSrc":"38395:12:69","nodeType":"YulExpressionStatement","src":"38395:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"38382:5:69","nodeType":"YulIdentifier","src":"38382:5:69"},{"kind":"number","nativeSrc":"38389:1:69","nodeType":"YulLiteral","src":"38389:1:69","type":"","value":"9"}],"functionName":{"name":"lt","nativeSrc":"38379:2:69","nodeType":"YulIdentifier","src":"38379:2:69"},"nativeSrc":"38379:12:69","nodeType":"YulFunctionCall","src":"38379:12:69"}],"functionName":{"name":"iszero","nativeSrc":"38372:6:69","nodeType":"YulIdentifier","src":"38372:6:69"},"nativeSrc":"38372:20:69","nodeType":"YulFunctionCall","src":"38372:20:69"},"nativeSrc":"38369:40:69","nodeType":"YulIf","src":"38369:40:69"}]},"name":"validator_revert_t_enum$_Action_$9148","nativeSrc":"38305:110:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"38352:5:69","nodeType":"YulTypedName","src":"38352:5:69","type":""}],"src":"38305:110:69"},{"body":{"nativeSrc":"38484:98:69","nodeType":"YulBlock","src":"38484:98:69","statements":[{"nativeSrc":"38494:29:69","nodeType":"YulAssignment","src":"38494:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"38516:6:69","nodeType":"YulIdentifier","src":"38516:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"38503:12:69","nodeType":"YulIdentifier","src":"38503:12:69"},"nativeSrc":"38503:20:69","nodeType":"YulFunctionCall","src":"38503:20:69"},"variableNames":[{"name":"value","nativeSrc":"38494:5:69","nodeType":"YulIdentifier","src":"38494:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"38570:5:69","nodeType":"YulIdentifier","src":"38570:5:69"}],"functionName":{"name":"validator_revert_t_enum$_Action_$9148","nativeSrc":"38532:37:69","nodeType":"YulIdentifier","src":"38532:37:69"},"nativeSrc":"38532:44:69","nodeType":"YulFunctionCall","src":"38532:44:69"},"nativeSrc":"38532:44:69","nodeType":"YulExpressionStatement","src":"38532:44:69"}]},"name":"abi_decode_t_enum$_Action_$9148","nativeSrc":"38421:161:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"38462:6:69","nodeType":"YulTypedName","src":"38462:6:69","type":""},{"name":"end","nativeSrc":"38470:3:69","nodeType":"YulTypedName","src":"38470:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"38478:5:69","nodeType":"YulTypedName","src":"38478:5:69","type":""}],"src":"38421:161:69"},{"body":{"nativeSrc":"38682:402:69","nodeType":"YulBlock","src":"38682:402:69","statements":[{"body":{"nativeSrc":"38728:83:69","nodeType":"YulBlock","src":"38728:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"38730:77:69","nodeType":"YulIdentifier","src":"38730:77:69"},"nativeSrc":"38730:79:69","nodeType":"YulFunctionCall","src":"38730:79:69"},"nativeSrc":"38730:79:69","nodeType":"YulExpressionStatement","src":"38730:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"38703:7:69","nodeType":"YulIdentifier","src":"38703:7:69"},{"name":"headStart","nativeSrc":"38712:9:69","nodeType":"YulIdentifier","src":"38712:9:69"}],"functionName":{"name":"sub","nativeSrc":"38699:3:69","nodeType":"YulIdentifier","src":"38699:3:69"},"nativeSrc":"38699:23:69","nodeType":"YulFunctionCall","src":"38699:23:69"},{"kind":"number","nativeSrc":"38724:2:69","nodeType":"YulLiteral","src":"38724:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"38695:3:69","nodeType":"YulIdentifier","src":"38695:3:69"},"nativeSrc":"38695:32:69","nodeType":"YulFunctionCall","src":"38695:32:69"},"nativeSrc":"38692:119:69","nodeType":"YulIf","src":"38692:119:69"},{"nativeSrc":"38821:117:69","nodeType":"YulBlock","src":"38821:117:69","statements":[{"nativeSrc":"38836:15:69","nodeType":"YulVariableDeclaration","src":"38836:15:69","value":{"kind":"number","nativeSrc":"38850:1:69","nodeType":"YulLiteral","src":"38850:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"38840:6:69","nodeType":"YulTypedName","src":"38840:6:69","type":""}]},{"nativeSrc":"38865:63:69","nodeType":"YulAssignment","src":"38865:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"38900:9:69","nodeType":"YulIdentifier","src":"38900:9:69"},{"name":"offset","nativeSrc":"38911:6:69","nodeType":"YulIdentifier","src":"38911:6:69"}],"functionName":{"name":"add","nativeSrc":"38896:3:69","nodeType":"YulIdentifier","src":"38896:3:69"},"nativeSrc":"38896:22:69","nodeType":"YulFunctionCall","src":"38896:22:69"},{"name":"dataEnd","nativeSrc":"38920:7:69","nodeType":"YulIdentifier","src":"38920:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"38875:20:69","nodeType":"YulIdentifier","src":"38875:20:69"},"nativeSrc":"38875:53:69","nodeType":"YulFunctionCall","src":"38875:53:69"},"variableNames":[{"name":"value0","nativeSrc":"38865:6:69","nodeType":"YulIdentifier","src":"38865:6:69"}]}]},{"nativeSrc":"38948:129:69","nodeType":"YulBlock","src":"38948:129:69","statements":[{"nativeSrc":"38963:16:69","nodeType":"YulVariableDeclaration","src":"38963:16:69","value":{"kind":"number","nativeSrc":"38977:2:69","nodeType":"YulLiteral","src":"38977:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"38967:6:69","nodeType":"YulTypedName","src":"38967:6:69","type":""}]},{"nativeSrc":"38993:74:69","nodeType":"YulAssignment","src":"38993:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"39039:9:69","nodeType":"YulIdentifier","src":"39039:9:69"},{"name":"offset","nativeSrc":"39050:6:69","nodeType":"YulIdentifier","src":"39050:6:69"}],"functionName":{"name":"add","nativeSrc":"39035:3:69","nodeType":"YulIdentifier","src":"39035:3:69"},"nativeSrc":"39035:22:69","nodeType":"YulFunctionCall","src":"39035:22:69"},{"name":"dataEnd","nativeSrc":"39059:7:69","nodeType":"YulIdentifier","src":"39059:7:69"}],"functionName":{"name":"abi_decode_t_enum$_Action_$9148","nativeSrc":"39003:31:69","nodeType":"YulIdentifier","src":"39003:31:69"},"nativeSrc":"39003:64:69","nodeType":"YulFunctionCall","src":"39003:64:69"},"variableNames":[{"name":"value1","nativeSrc":"38993:6:69","nodeType":"YulIdentifier","src":"38993:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_enum$_Action_$9148","nativeSrc":"38588:496:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"38644:9:69","nodeType":"YulTypedName","src":"38644:9:69","type":""},{"name":"dataEnd","nativeSrc":"38655:7:69","nodeType":"YulTypedName","src":"38655:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"38667:6:69","nodeType":"YulTypedName","src":"38667:6:69","type":""},{"name":"value1","nativeSrc":"38675:6:69","nodeType":"YulTypedName","src":"38675:6:69","type":""}],"src":"38588:496:69"},{"body":{"nativeSrc":"39221:774:69","nodeType":"YulBlock","src":"39221:774:69","statements":[{"body":{"nativeSrc":"39268:83:69","nodeType":"YulBlock","src":"39268:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"39270:77:69","nodeType":"YulIdentifier","src":"39270:77:69"},"nativeSrc":"39270:79:69","nodeType":"YulFunctionCall","src":"39270:79:69"},"nativeSrc":"39270:79:69","nodeType":"YulExpressionStatement","src":"39270:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"39242:7:69","nodeType":"YulIdentifier","src":"39242:7:69"},{"name":"headStart","nativeSrc":"39251:9:69","nodeType":"YulIdentifier","src":"39251:9:69"}],"functionName":{"name":"sub","nativeSrc":"39238:3:69","nodeType":"YulIdentifier","src":"39238:3:69"},"nativeSrc":"39238:23:69","nodeType":"YulFunctionCall","src":"39238:23:69"},{"kind":"number","nativeSrc":"39263:3:69","nodeType":"YulLiteral","src":"39263:3:69","type":"","value":"160"}],"functionName":{"name":"slt","nativeSrc":"39234:3:69","nodeType":"YulIdentifier","src":"39234:3:69"},"nativeSrc":"39234:33:69","nodeType":"YulFunctionCall","src":"39234:33:69"},"nativeSrc":"39231:120:69","nodeType":"YulIf","src":"39231:120:69"},{"nativeSrc":"39361:117:69","nodeType":"YulBlock","src":"39361:117:69","statements":[{"nativeSrc":"39376:15:69","nodeType":"YulVariableDeclaration","src":"39376:15:69","value":{"kind":"number","nativeSrc":"39390:1:69","nodeType":"YulLiteral","src":"39390:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"39380:6:69","nodeType":"YulTypedName","src":"39380:6:69","type":""}]},{"nativeSrc":"39405:63:69","nodeType":"YulAssignment","src":"39405:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"39440:9:69","nodeType":"YulIdentifier","src":"39440:9:69"},{"name":"offset","nativeSrc":"39451:6:69","nodeType":"YulIdentifier","src":"39451:6:69"}],"functionName":{"name":"add","nativeSrc":"39436:3:69","nodeType":"YulIdentifier","src":"39436:3:69"},"nativeSrc":"39436:22:69","nodeType":"YulFunctionCall","src":"39436:22:69"},{"name":"dataEnd","nativeSrc":"39460:7:69","nodeType":"YulIdentifier","src":"39460:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"39415:20:69","nodeType":"YulIdentifier","src":"39415:20:69"},"nativeSrc":"39415:53:69","nodeType":"YulFunctionCall","src":"39415:53:69"},"variableNames":[{"name":"value0","nativeSrc":"39405:6:69","nodeType":"YulIdentifier","src":"39405:6:69"}]}]},{"nativeSrc":"39488:118:69","nodeType":"YulBlock","src":"39488:118:69","statements":[{"nativeSrc":"39503:16:69","nodeType":"YulVariableDeclaration","src":"39503:16:69","value":{"kind":"number","nativeSrc":"39517:2:69","nodeType":"YulLiteral","src":"39517:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"39507:6:69","nodeType":"YulTypedName","src":"39507:6:69","type":""}]},{"nativeSrc":"39533:63:69","nodeType":"YulAssignment","src":"39533:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"39568:9:69","nodeType":"YulIdentifier","src":"39568:9:69"},{"name":"offset","nativeSrc":"39579:6:69","nodeType":"YulIdentifier","src":"39579:6:69"}],"functionName":{"name":"add","nativeSrc":"39564:3:69","nodeType":"YulIdentifier","src":"39564:3:69"},"nativeSrc":"39564:22:69","nodeType":"YulFunctionCall","src":"39564:22:69"},{"name":"dataEnd","nativeSrc":"39588:7:69","nodeType":"YulIdentifier","src":"39588:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"39543:20:69","nodeType":"YulIdentifier","src":"39543:20:69"},"nativeSrc":"39543:53:69","nodeType":"YulFunctionCall","src":"39543:53:69"},"variableNames":[{"name":"value1","nativeSrc":"39533:6:69","nodeType":"YulIdentifier","src":"39533:6:69"}]}]},{"nativeSrc":"39616:118:69","nodeType":"YulBlock","src":"39616:118:69","statements":[{"nativeSrc":"39631:16:69","nodeType":"YulVariableDeclaration","src":"39631:16:69","value":{"kind":"number","nativeSrc":"39645:2:69","nodeType":"YulLiteral","src":"39645:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"39635:6:69","nodeType":"YulTypedName","src":"39635:6:69","type":""}]},{"nativeSrc":"39661:63:69","nodeType":"YulAssignment","src":"39661:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"39696:9:69","nodeType":"YulIdentifier","src":"39696:9:69"},{"name":"offset","nativeSrc":"39707:6:69","nodeType":"YulIdentifier","src":"39707:6:69"}],"functionName":{"name":"add","nativeSrc":"39692:3:69","nodeType":"YulIdentifier","src":"39692:3:69"},"nativeSrc":"39692:22:69","nodeType":"YulFunctionCall","src":"39692:22:69"},{"name":"dataEnd","nativeSrc":"39716:7:69","nodeType":"YulIdentifier","src":"39716:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"39671:20:69","nodeType":"YulIdentifier","src":"39671:20:69"},"nativeSrc":"39671:53:69","nodeType":"YulFunctionCall","src":"39671:53:69"},"variableNames":[{"name":"value2","nativeSrc":"39661:6:69","nodeType":"YulIdentifier","src":"39661:6:69"}]}]},{"nativeSrc":"39744:118:69","nodeType":"YulBlock","src":"39744:118:69","statements":[{"nativeSrc":"39759:16:69","nodeType":"YulVariableDeclaration","src":"39759:16:69","value":{"kind":"number","nativeSrc":"39773:2:69","nodeType":"YulLiteral","src":"39773:2:69","type":"","value":"96"},"variables":[{"name":"offset","nativeSrc":"39763:6:69","nodeType":"YulTypedName","src":"39763:6:69","type":""}]},{"nativeSrc":"39789:63:69","nodeType":"YulAssignment","src":"39789:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"39824:9:69","nodeType":"YulIdentifier","src":"39824:9:69"},{"name":"offset","nativeSrc":"39835:6:69","nodeType":"YulIdentifier","src":"39835:6:69"}],"functionName":{"name":"add","nativeSrc":"39820:3:69","nodeType":"YulIdentifier","src":"39820:3:69"},"nativeSrc":"39820:22:69","nodeType":"YulFunctionCall","src":"39820:22:69"},{"name":"dataEnd","nativeSrc":"39844:7:69","nodeType":"YulIdentifier","src":"39844:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"39799:20:69","nodeType":"YulIdentifier","src":"39799:20:69"},"nativeSrc":"39799:53:69","nodeType":"YulFunctionCall","src":"39799:53:69"},"variableNames":[{"name":"value3","nativeSrc":"39789:6:69","nodeType":"YulIdentifier","src":"39789:6:69"}]}]},{"nativeSrc":"39872:116:69","nodeType":"YulBlock","src":"39872:116:69","statements":[{"nativeSrc":"39887:17:69","nodeType":"YulVariableDeclaration","src":"39887:17:69","value":{"kind":"number","nativeSrc":"39901:3:69","nodeType":"YulLiteral","src":"39901:3:69","type":"","value":"128"},"variables":[{"name":"offset","nativeSrc":"39891:6:69","nodeType":"YulTypedName","src":"39891:6:69","type":""}]},{"nativeSrc":"39918:60:69","nodeType":"YulAssignment","src":"39918:60:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"39950:9:69","nodeType":"YulIdentifier","src":"39950:9:69"},{"name":"offset","nativeSrc":"39961:6:69","nodeType":"YulIdentifier","src":"39961:6:69"}],"functionName":{"name":"add","nativeSrc":"39946:3:69","nodeType":"YulIdentifier","src":"39946:3:69"},"nativeSrc":"39946:22:69","nodeType":"YulFunctionCall","src":"39946:22:69"},{"name":"dataEnd","nativeSrc":"39970:7:69","nodeType":"YulIdentifier","src":"39970:7:69"}],"functionName":{"name":"abi_decode_t_bool","nativeSrc":"39928:17:69","nodeType":"YulIdentifier","src":"39928:17:69"},"nativeSrc":"39928:50:69","nodeType":"YulFunctionCall","src":"39928:50:69"},"variableNames":[{"name":"value4","nativeSrc":"39918:6:69","nodeType":"YulIdentifier","src":"39918:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool","nativeSrc":"39090:905:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"39159:9:69","nodeType":"YulTypedName","src":"39159:9:69","type":""},{"name":"dataEnd","nativeSrc":"39170:7:69","nodeType":"YulTypedName","src":"39170:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"39182:6:69","nodeType":"YulTypedName","src":"39182:6:69","type":""},{"name":"value1","nativeSrc":"39190:6:69","nodeType":"YulTypedName","src":"39190:6:69","type":""},{"name":"value2","nativeSrc":"39198:6:69","nodeType":"YulTypedName","src":"39198:6:69","type":""},{"name":"value3","nativeSrc":"39206:6:69","nodeType":"YulTypedName","src":"39206:6:69","type":""},{"name":"value4","nativeSrc":"39214:6:69","nodeType":"YulTypedName","src":"39214:6:69","type":""}],"src":"39090:905:69"},{"body":{"nativeSrc":"40097:73:69","nodeType":"YulBlock","src":"40097:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"40114:3:69","nodeType":"YulIdentifier","src":"40114:3:69"},{"name":"length","nativeSrc":"40119:6:69","nodeType":"YulIdentifier","src":"40119:6:69"}],"functionName":{"name":"mstore","nativeSrc":"40107:6:69","nodeType":"YulIdentifier","src":"40107:6:69"},"nativeSrc":"40107:19:69","nodeType":"YulFunctionCall","src":"40107:19:69"},"nativeSrc":"40107:19:69","nodeType":"YulExpressionStatement","src":"40107:19:69"},{"nativeSrc":"40135:29:69","nodeType":"YulAssignment","src":"40135:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"40154:3:69","nodeType":"YulIdentifier","src":"40154:3:69"},{"kind":"number","nativeSrc":"40159:4:69","nodeType":"YulLiteral","src":"40159:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"40150:3:69","nodeType":"YulIdentifier","src":"40150:3:69"},"nativeSrc":"40150:14:69","nodeType":"YulFunctionCall","src":"40150:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"40135:11:69","nodeType":"YulIdentifier","src":"40135:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"40001:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"40069:3:69","nodeType":"YulTypedName","src":"40069:3:69","type":""},{"name":"length","nativeSrc":"40074:6:69","nodeType":"YulTypedName","src":"40074:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"40085:11:69","nodeType":"YulTypedName","src":"40085:11:69","type":""}],"src":"40001:169:69"},{"body":{"nativeSrc":"40282:127:69","nodeType":"YulBlock","src":"40282:127:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"40304:6:69","nodeType":"YulIdentifier","src":"40304:6:69"},{"kind":"number","nativeSrc":"40312:1:69","nodeType":"YulLiteral","src":"40312:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"40300:3:69","nodeType":"YulIdentifier","src":"40300:3:69"},"nativeSrc":"40300:14:69","nodeType":"YulFunctionCall","src":"40300:14:69"},{"hexValue":"436c6f736520666163746f722067726561746572207468616e206d6178696d75","kind":"string","nativeSrc":"40316:34:69","nodeType":"YulLiteral","src":"40316:34:69","type":"","value":"Close factor greater than maximu"}],"functionName":{"name":"mstore","nativeSrc":"40293:6:69","nodeType":"YulIdentifier","src":"40293:6:69"},"nativeSrc":"40293:58:69","nodeType":"YulFunctionCall","src":"40293:58:69"},"nativeSrc":"40293:58:69","nodeType":"YulExpressionStatement","src":"40293:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"40372:6:69","nodeType":"YulIdentifier","src":"40372:6:69"},{"kind":"number","nativeSrc":"40380:2:69","nodeType":"YulLiteral","src":"40380:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"40368:3:69","nodeType":"YulIdentifier","src":"40368:3:69"},"nativeSrc":"40368:15:69","nodeType":"YulFunctionCall","src":"40368:15:69"},{"hexValue":"6d20636c6f736520666163746f72","kind":"string","nativeSrc":"40385:16:69","nodeType":"YulLiteral","src":"40385:16:69","type":"","value":"m close factor"}],"functionName":{"name":"mstore","nativeSrc":"40361:6:69","nodeType":"YulIdentifier","src":"40361:6:69"},"nativeSrc":"40361:41:69","nodeType":"YulFunctionCall","src":"40361:41:69"},"nativeSrc":"40361:41:69","nodeType":"YulExpressionStatement","src":"40361:41:69"}]},"name":"store_literal_in_memory_3388b29c8ac24f5c232934811c4242553f413844f77f503b8785ba71cd2c4b6f","nativeSrc":"40176:233:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"40274:6:69","nodeType":"YulTypedName","src":"40274:6:69","type":""}],"src":"40176:233:69"},{"body":{"nativeSrc":"40561:220:69","nodeType":"YulBlock","src":"40561:220:69","statements":[{"nativeSrc":"40571:74:69","nodeType":"YulAssignment","src":"40571:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"40637:3:69","nodeType":"YulIdentifier","src":"40637:3:69"},{"kind":"number","nativeSrc":"40642:2:69","nodeType":"YulLiteral","src":"40642:2:69","type":"","value":"46"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"40578:58:69","nodeType":"YulIdentifier","src":"40578:58:69"},"nativeSrc":"40578:67:69","nodeType":"YulFunctionCall","src":"40578:67:69"},"variableNames":[{"name":"pos","nativeSrc":"40571:3:69","nodeType":"YulIdentifier","src":"40571:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"40743:3:69","nodeType":"YulIdentifier","src":"40743:3:69"}],"functionName":{"name":"store_literal_in_memory_3388b29c8ac24f5c232934811c4242553f413844f77f503b8785ba71cd2c4b6f","nativeSrc":"40654:88:69","nodeType":"YulIdentifier","src":"40654:88:69"},"nativeSrc":"40654:93:69","nodeType":"YulFunctionCall","src":"40654:93:69"},"nativeSrc":"40654:93:69","nodeType":"YulExpressionStatement","src":"40654:93:69"},{"nativeSrc":"40756:19:69","nodeType":"YulAssignment","src":"40756:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"40767:3:69","nodeType":"YulIdentifier","src":"40767:3:69"},{"kind":"number","nativeSrc":"40772:2:69","nodeType":"YulLiteral","src":"40772:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"40763:3:69","nodeType":"YulIdentifier","src":"40763:3:69"},"nativeSrc":"40763:12:69","nodeType":"YulFunctionCall","src":"40763:12:69"},"variableNames":[{"name":"end","nativeSrc":"40756:3:69","nodeType":"YulIdentifier","src":"40756:3:69"}]}]},"name":"abi_encode_t_stringliteral_3388b29c8ac24f5c232934811c4242553f413844f77f503b8785ba71cd2c4b6f_to_t_string_memory_ptr_fromStack","nativeSrc":"40415:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"40549:3:69","nodeType":"YulTypedName","src":"40549:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"40557:3:69","nodeType":"YulTypedName","src":"40557:3:69","type":""}],"src":"40415:366:69"},{"body":{"nativeSrc":"40958:248:69","nodeType":"YulBlock","src":"40958:248:69","statements":[{"nativeSrc":"40968:26:69","nodeType":"YulAssignment","src":"40968:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"40980:9:69","nodeType":"YulIdentifier","src":"40980:9:69"},{"kind":"number","nativeSrc":"40991:2:69","nodeType":"YulLiteral","src":"40991:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"40976:3:69","nodeType":"YulIdentifier","src":"40976:3:69"},"nativeSrc":"40976:18:69","nodeType":"YulFunctionCall","src":"40976:18:69"},"variableNames":[{"name":"tail","nativeSrc":"40968:4:69","nodeType":"YulIdentifier","src":"40968:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"41015:9:69","nodeType":"YulIdentifier","src":"41015:9:69"},{"kind":"number","nativeSrc":"41026:1:69","nodeType":"YulLiteral","src":"41026:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"41011:3:69","nodeType":"YulIdentifier","src":"41011:3:69"},"nativeSrc":"41011:17:69","nodeType":"YulFunctionCall","src":"41011:17:69"},{"arguments":[{"name":"tail","nativeSrc":"41034:4:69","nodeType":"YulIdentifier","src":"41034:4:69"},{"name":"headStart","nativeSrc":"41040:9:69","nodeType":"YulIdentifier","src":"41040:9:69"}],"functionName":{"name":"sub","nativeSrc":"41030:3:69","nodeType":"YulIdentifier","src":"41030:3:69"},"nativeSrc":"41030:20:69","nodeType":"YulFunctionCall","src":"41030:20:69"}],"functionName":{"name":"mstore","nativeSrc":"41004:6:69","nodeType":"YulIdentifier","src":"41004:6:69"},"nativeSrc":"41004:47:69","nodeType":"YulFunctionCall","src":"41004:47:69"},"nativeSrc":"41004:47:69","nodeType":"YulExpressionStatement","src":"41004:47:69"},{"nativeSrc":"41060:139:69","nodeType":"YulAssignment","src":"41060:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"41194:4:69","nodeType":"YulIdentifier","src":"41194:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_3388b29c8ac24f5c232934811c4242553f413844f77f503b8785ba71cd2c4b6f_to_t_string_memory_ptr_fromStack","nativeSrc":"41068:124:69","nodeType":"YulIdentifier","src":"41068:124:69"},"nativeSrc":"41068:131:69","nodeType":"YulFunctionCall","src":"41068:131:69"},"variableNames":[{"name":"tail","nativeSrc":"41060:4:69","nodeType":"YulIdentifier","src":"41060:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_3388b29c8ac24f5c232934811c4242553f413844f77f503b8785ba71cd2c4b6f__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"40787:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"40938:9:69","nodeType":"YulTypedName","src":"40938:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"40953:4:69","nodeType":"YulTypedName","src":"40953:4:69","type":""}],"src":"40787:419:69"},{"body":{"nativeSrc":"41318:127:69","nodeType":"YulBlock","src":"41318:127:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"41340:6:69","nodeType":"YulIdentifier","src":"41340:6:69"},{"kind":"number","nativeSrc":"41348:1:69","nodeType":"YulLiteral","src":"41348:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"41336:3:69","nodeType":"YulIdentifier","src":"41336:3:69"},"nativeSrc":"41336:14:69","nodeType":"YulFunctionCall","src":"41336:14:69"},{"hexValue":"436c6f736520666163746f7220736d616c6c6572207468616e206d696e696d75","kind":"string","nativeSrc":"41352:34:69","nodeType":"YulLiteral","src":"41352:34:69","type":"","value":"Close factor smaller than minimu"}],"functionName":{"name":"mstore","nativeSrc":"41329:6:69","nodeType":"YulIdentifier","src":"41329:6:69"},"nativeSrc":"41329:58:69","nodeType":"YulFunctionCall","src":"41329:58:69"},"nativeSrc":"41329:58:69","nodeType":"YulExpressionStatement","src":"41329:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"41408:6:69","nodeType":"YulIdentifier","src":"41408:6:69"},{"kind":"number","nativeSrc":"41416:2:69","nodeType":"YulLiteral","src":"41416:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"41404:3:69","nodeType":"YulIdentifier","src":"41404:3:69"},"nativeSrc":"41404:15:69","nodeType":"YulFunctionCall","src":"41404:15:69"},{"hexValue":"6d20636c6f736520666163746f72","kind":"string","nativeSrc":"41421:16:69","nodeType":"YulLiteral","src":"41421:16:69","type":"","value":"m close factor"}],"functionName":{"name":"mstore","nativeSrc":"41397:6:69","nodeType":"YulIdentifier","src":"41397:6:69"},"nativeSrc":"41397:41:69","nodeType":"YulFunctionCall","src":"41397:41:69"},"nativeSrc":"41397:41:69","nodeType":"YulExpressionStatement","src":"41397:41:69"}]},"name":"store_literal_in_memory_e08258dad66b639434436d0a533127e51effbdd16e4a07ef3fab948963e89ae8","nativeSrc":"41212:233:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"41310:6:69","nodeType":"YulTypedName","src":"41310:6:69","type":""}],"src":"41212:233:69"},{"body":{"nativeSrc":"41597:220:69","nodeType":"YulBlock","src":"41597:220:69","statements":[{"nativeSrc":"41607:74:69","nodeType":"YulAssignment","src":"41607:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"41673:3:69","nodeType":"YulIdentifier","src":"41673:3:69"},{"kind":"number","nativeSrc":"41678:2:69","nodeType":"YulLiteral","src":"41678:2:69","type":"","value":"46"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"41614:58:69","nodeType":"YulIdentifier","src":"41614:58:69"},"nativeSrc":"41614:67:69","nodeType":"YulFunctionCall","src":"41614:67:69"},"variableNames":[{"name":"pos","nativeSrc":"41607:3:69","nodeType":"YulIdentifier","src":"41607:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"41779:3:69","nodeType":"YulIdentifier","src":"41779:3:69"}],"functionName":{"name":"store_literal_in_memory_e08258dad66b639434436d0a533127e51effbdd16e4a07ef3fab948963e89ae8","nativeSrc":"41690:88:69","nodeType":"YulIdentifier","src":"41690:88:69"},"nativeSrc":"41690:93:69","nodeType":"YulFunctionCall","src":"41690:93:69"},"nativeSrc":"41690:93:69","nodeType":"YulExpressionStatement","src":"41690:93:69"},{"nativeSrc":"41792:19:69","nodeType":"YulAssignment","src":"41792:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"41803:3:69","nodeType":"YulIdentifier","src":"41803:3:69"},{"kind":"number","nativeSrc":"41808:2:69","nodeType":"YulLiteral","src":"41808:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"41799:3:69","nodeType":"YulIdentifier","src":"41799:3:69"},"nativeSrc":"41799:12:69","nodeType":"YulFunctionCall","src":"41799:12:69"},"variableNames":[{"name":"end","nativeSrc":"41792:3:69","nodeType":"YulIdentifier","src":"41792:3:69"}]}]},"name":"abi_encode_t_stringliteral_e08258dad66b639434436d0a533127e51effbdd16e4a07ef3fab948963e89ae8_to_t_string_memory_ptr_fromStack","nativeSrc":"41451:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"41585:3:69","nodeType":"YulTypedName","src":"41585:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"41593:3:69","nodeType":"YulTypedName","src":"41593:3:69","type":""}],"src":"41451:366:69"},{"body":{"nativeSrc":"41994:248:69","nodeType":"YulBlock","src":"41994:248:69","statements":[{"nativeSrc":"42004:26:69","nodeType":"YulAssignment","src":"42004:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"42016:9:69","nodeType":"YulIdentifier","src":"42016:9:69"},{"kind":"number","nativeSrc":"42027:2:69","nodeType":"YulLiteral","src":"42027:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"42012:3:69","nodeType":"YulIdentifier","src":"42012:3:69"},"nativeSrc":"42012:18:69","nodeType":"YulFunctionCall","src":"42012:18:69"},"variableNames":[{"name":"tail","nativeSrc":"42004:4:69","nodeType":"YulIdentifier","src":"42004:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"42051:9:69","nodeType":"YulIdentifier","src":"42051:9:69"},{"kind":"number","nativeSrc":"42062:1:69","nodeType":"YulLiteral","src":"42062:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"42047:3:69","nodeType":"YulIdentifier","src":"42047:3:69"},"nativeSrc":"42047:17:69","nodeType":"YulFunctionCall","src":"42047:17:69"},{"arguments":[{"name":"tail","nativeSrc":"42070:4:69","nodeType":"YulIdentifier","src":"42070:4:69"},{"name":"headStart","nativeSrc":"42076:9:69","nodeType":"YulIdentifier","src":"42076:9:69"}],"functionName":{"name":"sub","nativeSrc":"42066:3:69","nodeType":"YulIdentifier","src":"42066:3:69"},"nativeSrc":"42066:20:69","nodeType":"YulFunctionCall","src":"42066:20:69"}],"functionName":{"name":"mstore","nativeSrc":"42040:6:69","nodeType":"YulIdentifier","src":"42040:6:69"},"nativeSrc":"42040:47:69","nodeType":"YulFunctionCall","src":"42040:47:69"},"nativeSrc":"42040:47:69","nodeType":"YulExpressionStatement","src":"42040:47:69"},{"nativeSrc":"42096:139:69","nodeType":"YulAssignment","src":"42096:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"42230:4:69","nodeType":"YulIdentifier","src":"42230:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_e08258dad66b639434436d0a533127e51effbdd16e4a07ef3fab948963e89ae8_to_t_string_memory_ptr_fromStack","nativeSrc":"42104:124:69","nodeType":"YulIdentifier","src":"42104:124:69"},"nativeSrc":"42104:131:69","nodeType":"YulFunctionCall","src":"42104:131:69"},"variableNames":[{"name":"tail","nativeSrc":"42096:4:69","nodeType":"YulIdentifier","src":"42096:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_e08258dad66b639434436d0a533127e51effbdd16e4a07ef3fab948963e89ae8__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"41823:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"41974:9:69","nodeType":"YulTypedName","src":"41974:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"41989:4:69","nodeType":"YulTypedName","src":"41989:4:69","type":""}],"src":"41823:419:69"},{"body":{"nativeSrc":"42354:57:69","nodeType":"YulBlock","src":"42354:57:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"42376:6:69","nodeType":"YulIdentifier","src":"42376:6:69"},{"kind":"number","nativeSrc":"42384:1:69","nodeType":"YulLiteral","src":"42384:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"42372:3:69","nodeType":"YulIdentifier","src":"42372:3:69"},"nativeSrc":"42372:14:69","nodeType":"YulFunctionCall","src":"42372:14:69"},{"hexValue":"696e76616c696420696e707574","kind":"string","nativeSrc":"42388:15:69","nodeType":"YulLiteral","src":"42388:15:69","type":"","value":"invalid input"}],"functionName":{"name":"mstore","nativeSrc":"42365:6:69","nodeType":"YulIdentifier","src":"42365:6:69"},"nativeSrc":"42365:39:69","nodeType":"YulFunctionCall","src":"42365:39:69"},"nativeSrc":"42365:39:69","nodeType":"YulExpressionStatement","src":"42365:39:69"}]},"name":"store_literal_in_memory_dbab81719f15ade78f76dcdbf7cff531fc5f9822fe7e8466ffdd2feb23510f3b","nativeSrc":"42248:163:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"42346:6:69","nodeType":"YulTypedName","src":"42346:6:69","type":""}],"src":"42248:163:69"},{"body":{"nativeSrc":"42563:220:69","nodeType":"YulBlock","src":"42563:220:69","statements":[{"nativeSrc":"42573:74:69","nodeType":"YulAssignment","src":"42573:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"42639:3:69","nodeType":"YulIdentifier","src":"42639:3:69"},{"kind":"number","nativeSrc":"42644:2:69","nodeType":"YulLiteral","src":"42644:2:69","type":"","value":"13"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"42580:58:69","nodeType":"YulIdentifier","src":"42580:58:69"},"nativeSrc":"42580:67:69","nodeType":"YulFunctionCall","src":"42580:67:69"},"variableNames":[{"name":"pos","nativeSrc":"42573:3:69","nodeType":"YulIdentifier","src":"42573:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"42745:3:69","nodeType":"YulIdentifier","src":"42745:3:69"}],"functionName":{"name":"store_literal_in_memory_dbab81719f15ade78f76dcdbf7cff531fc5f9822fe7e8466ffdd2feb23510f3b","nativeSrc":"42656:88:69","nodeType":"YulIdentifier","src":"42656:88:69"},"nativeSrc":"42656:93:69","nodeType":"YulFunctionCall","src":"42656:93:69"},"nativeSrc":"42656:93:69","nodeType":"YulExpressionStatement","src":"42656:93:69"},{"nativeSrc":"42758:19:69","nodeType":"YulAssignment","src":"42758:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"42769:3:69","nodeType":"YulIdentifier","src":"42769:3:69"},{"kind":"number","nativeSrc":"42774:2:69","nodeType":"YulLiteral","src":"42774:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"42765:3:69","nodeType":"YulIdentifier","src":"42765:3:69"},"nativeSrc":"42765:12:69","nodeType":"YulFunctionCall","src":"42765:12:69"},"variableNames":[{"name":"end","nativeSrc":"42758:3:69","nodeType":"YulIdentifier","src":"42758:3:69"}]}]},"name":"abi_encode_t_stringliteral_dbab81719f15ade78f76dcdbf7cff531fc5f9822fe7e8466ffdd2feb23510f3b_to_t_string_memory_ptr_fromStack","nativeSrc":"42417:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"42551:3:69","nodeType":"YulTypedName","src":"42551:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"42559:3:69","nodeType":"YulTypedName","src":"42559:3:69","type":""}],"src":"42417:366:69"},{"body":{"nativeSrc":"42960:248:69","nodeType":"YulBlock","src":"42960:248:69","statements":[{"nativeSrc":"42970:26:69","nodeType":"YulAssignment","src":"42970:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"42982:9:69","nodeType":"YulIdentifier","src":"42982:9:69"},{"kind":"number","nativeSrc":"42993:2:69","nodeType":"YulLiteral","src":"42993:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"42978:3:69","nodeType":"YulIdentifier","src":"42978:3:69"},"nativeSrc":"42978:18:69","nodeType":"YulFunctionCall","src":"42978:18:69"},"variableNames":[{"name":"tail","nativeSrc":"42970:4:69","nodeType":"YulIdentifier","src":"42970:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"43017:9:69","nodeType":"YulIdentifier","src":"43017:9:69"},{"kind":"number","nativeSrc":"43028:1:69","nodeType":"YulLiteral","src":"43028:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"43013:3:69","nodeType":"YulIdentifier","src":"43013:3:69"},"nativeSrc":"43013:17:69","nodeType":"YulFunctionCall","src":"43013:17:69"},{"arguments":[{"name":"tail","nativeSrc":"43036:4:69","nodeType":"YulIdentifier","src":"43036:4:69"},{"name":"headStart","nativeSrc":"43042:9:69","nodeType":"YulIdentifier","src":"43042:9:69"}],"functionName":{"name":"sub","nativeSrc":"43032:3:69","nodeType":"YulIdentifier","src":"43032:3:69"},"nativeSrc":"43032:20:69","nodeType":"YulFunctionCall","src":"43032:20:69"}],"functionName":{"name":"mstore","nativeSrc":"43006:6:69","nodeType":"YulIdentifier","src":"43006:6:69"},"nativeSrc":"43006:47:69","nodeType":"YulFunctionCall","src":"43006:47:69"},"nativeSrc":"43006:47:69","nodeType":"YulExpressionStatement","src":"43006:47:69"},{"nativeSrc":"43062:139:69","nodeType":"YulAssignment","src":"43062:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"43196:4:69","nodeType":"YulIdentifier","src":"43196:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_dbab81719f15ade78f76dcdbf7cff531fc5f9822fe7e8466ffdd2feb23510f3b_to_t_string_memory_ptr_fromStack","nativeSrc":"43070:124:69","nodeType":"YulIdentifier","src":"43070:124:69"},"nativeSrc":"43070:131:69","nodeType":"YulFunctionCall","src":"43070:131:69"},"variableNames":[{"name":"tail","nativeSrc":"43062:4:69","nodeType":"YulIdentifier","src":"43062:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_dbab81719f15ade78f76dcdbf7cff531fc5f9822fe7e8466ffdd2feb23510f3b__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"42789:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"42940:9:69","nodeType":"YulTypedName","src":"42940:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"42955:4:69","nodeType":"YulTypedName","src":"42955:4:69","type":""}],"src":"42789:419:69"},{"body":{"nativeSrc":"43242:152:69","nodeType":"YulBlock","src":"43242:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"43259:1:69","nodeType":"YulLiteral","src":"43259:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"43262:77:69","nodeType":"YulLiteral","src":"43262:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"43252:6:69","nodeType":"YulIdentifier","src":"43252:6:69"},"nativeSrc":"43252:88:69","nodeType":"YulFunctionCall","src":"43252:88:69"},"nativeSrc":"43252:88:69","nodeType":"YulExpressionStatement","src":"43252:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"43356:1:69","nodeType":"YulLiteral","src":"43356:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"43359:4:69","nodeType":"YulLiteral","src":"43359:4:69","type":"","value":"0x32"}],"functionName":{"name":"mstore","nativeSrc":"43349:6:69","nodeType":"YulIdentifier","src":"43349:6:69"},"nativeSrc":"43349:15:69","nodeType":"YulFunctionCall","src":"43349:15:69"},"nativeSrc":"43349:15:69","nodeType":"YulExpressionStatement","src":"43349:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"43380:1:69","nodeType":"YulLiteral","src":"43380:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"43383:4:69","nodeType":"YulLiteral","src":"43383:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"43373:6:69","nodeType":"YulIdentifier","src":"43373:6:69"},"nativeSrc":"43373:15:69","nodeType":"YulFunctionCall","src":"43373:15:69"},"nativeSrc":"43373:15:69","nodeType":"YulExpressionStatement","src":"43373:15:69"}]},"name":"panic_error_0x32","nativeSrc":"43214:180:69","nodeType":"YulFunctionDefinition","src":"43214:180:69"},{"body":{"nativeSrc":"43474:51:69","nodeType":"YulBlock","src":"43474:51:69","statements":[{"nativeSrc":"43484:35:69","nodeType":"YulAssignment","src":"43484:35:69","value":{"arguments":[{"name":"value","nativeSrc":"43513:5:69","nodeType":"YulIdentifier","src":"43513:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"43495:17:69","nodeType":"YulIdentifier","src":"43495:17:69"},"nativeSrc":"43495:24:69","nodeType":"YulFunctionCall","src":"43495:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"43484:7:69","nodeType":"YulIdentifier","src":"43484:7:69"}]}]},"name":"cleanup_t_contract$_ComptrollerInterface_$9353","nativeSrc":"43400:125:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"43456:5:69","nodeType":"YulTypedName","src":"43456:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"43466:7:69","nodeType":"YulTypedName","src":"43466:7:69","type":""}],"src":"43400:125:69"},{"body":{"nativeSrc":"43603:108:69","nodeType":"YulBlock","src":"43603:108:69","statements":[{"body":{"nativeSrc":"43689:16:69","nodeType":"YulBlock","src":"43689:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"43698:1:69","nodeType":"YulLiteral","src":"43698:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"43701:1:69","nodeType":"YulLiteral","src":"43701:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"43691:6:69","nodeType":"YulIdentifier","src":"43691:6:69"},"nativeSrc":"43691:12:69","nodeType":"YulFunctionCall","src":"43691:12:69"},"nativeSrc":"43691:12:69","nodeType":"YulExpressionStatement","src":"43691:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"43626:5:69","nodeType":"YulIdentifier","src":"43626:5:69"},{"arguments":[{"name":"value","nativeSrc":"43680:5:69","nodeType":"YulIdentifier","src":"43680:5:69"}],"functionName":{"name":"cleanup_t_contract$_ComptrollerInterface_$9353","nativeSrc":"43633:46:69","nodeType":"YulIdentifier","src":"43633:46:69"},"nativeSrc":"43633:53:69","nodeType":"YulFunctionCall","src":"43633:53:69"}],"functionName":{"name":"eq","nativeSrc":"43623:2:69","nodeType":"YulIdentifier","src":"43623:2:69"},"nativeSrc":"43623:64:69","nodeType":"YulFunctionCall","src":"43623:64:69"}],"functionName":{"name":"iszero","nativeSrc":"43616:6:69","nodeType":"YulIdentifier","src":"43616:6:69"},"nativeSrc":"43616:72:69","nodeType":"YulFunctionCall","src":"43616:72:69"},"nativeSrc":"43613:92:69","nodeType":"YulIf","src":"43613:92:69"}]},"name":"validator_revert_t_contract$_ComptrollerInterface_$9353","nativeSrc":"43531:180:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"43596:5:69","nodeType":"YulTypedName","src":"43596:5:69","type":""}],"src":"43531:180:69"},{"body":{"nativeSrc":"43809:109:69","nodeType":"YulBlock","src":"43809:109:69","statements":[{"nativeSrc":"43819:22:69","nodeType":"YulAssignment","src":"43819:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"43834:6:69","nodeType":"YulIdentifier","src":"43834:6:69"}],"functionName":{"name":"mload","nativeSrc":"43828:5:69","nodeType":"YulIdentifier","src":"43828:5:69"},"nativeSrc":"43828:13:69","nodeType":"YulFunctionCall","src":"43828:13:69"},"variableNames":[{"name":"value","nativeSrc":"43819:5:69","nodeType":"YulIdentifier","src":"43819:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"43906:5:69","nodeType":"YulIdentifier","src":"43906:5:69"}],"functionName":{"name":"validator_revert_t_contract$_ComptrollerInterface_$9353","nativeSrc":"43850:55:69","nodeType":"YulIdentifier","src":"43850:55:69"},"nativeSrc":"43850:62:69","nodeType":"YulFunctionCall","src":"43850:62:69"},"nativeSrc":"43850:62:69","nodeType":"YulExpressionStatement","src":"43850:62:69"}]},"name":"abi_decode_t_contract$_ComptrollerInterface_$9353_fromMemory","nativeSrc":"43717:201:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"43787:6:69","nodeType":"YulTypedName","src":"43787:6:69","type":""},{"name":"end","nativeSrc":"43795:3:69","nodeType":"YulTypedName","src":"43795:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"43803:5:69","nodeType":"YulTypedName","src":"43803:5:69","type":""}],"src":"43717:201:69"},{"body":{"nativeSrc":"44030:303:69","nodeType":"YulBlock","src":"44030:303:69","statements":[{"body":{"nativeSrc":"44076:83:69","nodeType":"YulBlock","src":"44076:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"44078:77:69","nodeType":"YulIdentifier","src":"44078:77:69"},"nativeSrc":"44078:79:69","nodeType":"YulFunctionCall","src":"44078:79:69"},"nativeSrc":"44078:79:69","nodeType":"YulExpressionStatement","src":"44078:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"44051:7:69","nodeType":"YulIdentifier","src":"44051:7:69"},{"name":"headStart","nativeSrc":"44060:9:69","nodeType":"YulIdentifier","src":"44060:9:69"}],"functionName":{"name":"sub","nativeSrc":"44047:3:69","nodeType":"YulIdentifier","src":"44047:3:69"},"nativeSrc":"44047:23:69","nodeType":"YulFunctionCall","src":"44047:23:69"},{"kind":"number","nativeSrc":"44072:2:69","nodeType":"YulLiteral","src":"44072:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"44043:3:69","nodeType":"YulIdentifier","src":"44043:3:69"},"nativeSrc":"44043:32:69","nodeType":"YulFunctionCall","src":"44043:32:69"},"nativeSrc":"44040:119:69","nodeType":"YulIf","src":"44040:119:69"},{"nativeSrc":"44169:157:69","nodeType":"YulBlock","src":"44169:157:69","statements":[{"nativeSrc":"44184:15:69","nodeType":"YulVariableDeclaration","src":"44184:15:69","value":{"kind":"number","nativeSrc":"44198:1:69","nodeType":"YulLiteral","src":"44198:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"44188:6:69","nodeType":"YulTypedName","src":"44188:6:69","type":""}]},{"nativeSrc":"44213:103:69","nodeType":"YulAssignment","src":"44213:103:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"44288:9:69","nodeType":"YulIdentifier","src":"44288:9:69"},{"name":"offset","nativeSrc":"44299:6:69","nodeType":"YulIdentifier","src":"44299:6:69"}],"functionName":{"name":"add","nativeSrc":"44284:3:69","nodeType":"YulIdentifier","src":"44284:3:69"},"nativeSrc":"44284:22:69","nodeType":"YulFunctionCall","src":"44284:22:69"},{"name":"dataEnd","nativeSrc":"44308:7:69","nodeType":"YulIdentifier","src":"44308:7:69"}],"functionName":{"name":"abi_decode_t_contract$_ComptrollerInterface_$9353_fromMemory","nativeSrc":"44223:60:69","nodeType":"YulIdentifier","src":"44223:60:69"},"nativeSrc":"44223:93:69","nodeType":"YulFunctionCall","src":"44223:93:69"},"variableNames":[{"name":"value0","nativeSrc":"44213:6:69","nodeType":"YulIdentifier","src":"44213:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_ComptrollerInterface_$9353_fromMemory","nativeSrc":"43924:409:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"44000:9:69","nodeType":"YulTypedName","src":"44000:9:69","type":""},{"name":"dataEnd","nativeSrc":"44011:7:69","nodeType":"YulTypedName","src":"44011:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"44023:6:69","nodeType":"YulTypedName","src":"44023:6:69","type":""}],"src":"43924:409:69"},{"body":{"nativeSrc":"44465:206:69","nodeType":"YulBlock","src":"44465:206:69","statements":[{"nativeSrc":"44475:26:69","nodeType":"YulAssignment","src":"44475:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"44487:9:69","nodeType":"YulIdentifier","src":"44487:9:69"},{"kind":"number","nativeSrc":"44498:2:69","nodeType":"YulLiteral","src":"44498:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"44483:3:69","nodeType":"YulIdentifier","src":"44483:3:69"},"nativeSrc":"44483:18:69","nodeType":"YulFunctionCall","src":"44483:18:69"},"variableNames":[{"name":"tail","nativeSrc":"44475:4:69","nodeType":"YulIdentifier","src":"44475:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"44555:6:69","nodeType":"YulIdentifier","src":"44555:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"44568:9:69","nodeType":"YulIdentifier","src":"44568:9:69"},{"kind":"number","nativeSrc":"44579:1:69","nodeType":"YulLiteral","src":"44579:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"44564:3:69","nodeType":"YulIdentifier","src":"44564:3:69"},"nativeSrc":"44564:17:69","nodeType":"YulFunctionCall","src":"44564:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"44511:43:69","nodeType":"YulIdentifier","src":"44511:43:69"},"nativeSrc":"44511:71:69","nodeType":"YulFunctionCall","src":"44511:71:69"},"nativeSrc":"44511:71:69","nodeType":"YulExpressionStatement","src":"44511:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"44636:6:69","nodeType":"YulIdentifier","src":"44636:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"44649:9:69","nodeType":"YulIdentifier","src":"44649:9:69"},{"kind":"number","nativeSrc":"44660:2:69","nodeType":"YulLiteral","src":"44660:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"44645:3:69","nodeType":"YulIdentifier","src":"44645:3:69"},"nativeSrc":"44645:18:69","nodeType":"YulFunctionCall","src":"44645:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"44592:43:69","nodeType":"YulIdentifier","src":"44592:43:69"},"nativeSrc":"44592:72:69","nodeType":"YulFunctionCall","src":"44592:72:69"},"nativeSrc":"44592:72:69","nodeType":"YulExpressionStatement","src":"44592:72:69"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nativeSrc":"44339:332:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"44429:9:69","nodeType":"YulTypedName","src":"44429:9:69","type":""},{"name":"value1","nativeSrc":"44441:6:69","nodeType":"YulTypedName","src":"44441:6:69","type":""},{"name":"value0","nativeSrc":"44449:6:69","nodeType":"YulTypedName","src":"44449:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"44460:4:69","nodeType":"YulTypedName","src":"44460:4:69","type":""}],"src":"44339:332:69"},{"body":{"nativeSrc":"44705:152:69","nodeType":"YulBlock","src":"44705:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"44722:1:69","nodeType":"YulLiteral","src":"44722:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"44725:77:69","nodeType":"YulLiteral","src":"44725:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"44715:6:69","nodeType":"YulIdentifier","src":"44715:6:69"},"nativeSrc":"44715:88:69","nodeType":"YulFunctionCall","src":"44715:88:69"},"nativeSrc":"44715:88:69","nodeType":"YulExpressionStatement","src":"44715:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"44819:1:69","nodeType":"YulLiteral","src":"44819:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"44822:4:69","nodeType":"YulLiteral","src":"44822:4:69","type":"","value":"0x11"}],"functionName":{"name":"mstore","nativeSrc":"44812:6:69","nodeType":"YulIdentifier","src":"44812:6:69"},"nativeSrc":"44812:15:69","nodeType":"YulFunctionCall","src":"44812:15:69"},"nativeSrc":"44812:15:69","nodeType":"YulExpressionStatement","src":"44812:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"44843:1:69","nodeType":"YulLiteral","src":"44843:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"44846:4:69","nodeType":"YulLiteral","src":"44846:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"44836:6:69","nodeType":"YulIdentifier","src":"44836:6:69"},"nativeSrc":"44836:15:69","nodeType":"YulFunctionCall","src":"44836:15:69"},"nativeSrc":"44836:15:69","nodeType":"YulExpressionStatement","src":"44836:15:69"}]},"name":"panic_error_0x11","nativeSrc":"44677:180:69","nodeType":"YulFunctionDefinition","src":"44677:180:69"},{"body":{"nativeSrc":"44911:362:69","nodeType":"YulBlock","src":"44911:362:69","statements":[{"nativeSrc":"44921:25:69","nodeType":"YulAssignment","src":"44921:25:69","value":{"arguments":[{"name":"x","nativeSrc":"44944:1:69","nodeType":"YulIdentifier","src":"44944:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"44926:17:69","nodeType":"YulIdentifier","src":"44926:17:69"},"nativeSrc":"44926:20:69","nodeType":"YulFunctionCall","src":"44926:20:69"},"variableNames":[{"name":"x","nativeSrc":"44921:1:69","nodeType":"YulIdentifier","src":"44921:1:69"}]},{"nativeSrc":"44955:25:69","nodeType":"YulAssignment","src":"44955:25:69","value":{"arguments":[{"name":"y","nativeSrc":"44978:1:69","nodeType":"YulIdentifier","src":"44978:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"44960:17:69","nodeType":"YulIdentifier","src":"44960:17:69"},"nativeSrc":"44960:20:69","nodeType":"YulFunctionCall","src":"44960:20:69"},"variableNames":[{"name":"y","nativeSrc":"44955:1:69","nodeType":"YulIdentifier","src":"44955:1:69"}]},{"nativeSrc":"44989:28:69","nodeType":"YulVariableDeclaration","src":"44989:28:69","value":{"arguments":[{"name":"x","nativeSrc":"45012:1:69","nodeType":"YulIdentifier","src":"45012:1:69"},{"name":"y","nativeSrc":"45015:1:69","nodeType":"YulIdentifier","src":"45015:1:69"}],"functionName":{"name":"mul","nativeSrc":"45008:3:69","nodeType":"YulIdentifier","src":"45008:3:69"},"nativeSrc":"45008:9:69","nodeType":"YulFunctionCall","src":"45008:9:69"},"variables":[{"name":"product_raw","nativeSrc":"44993:11:69","nodeType":"YulTypedName","src":"44993:11:69","type":""}]},{"nativeSrc":"45026:41:69","nodeType":"YulAssignment","src":"45026:41:69","value":{"arguments":[{"name":"product_raw","nativeSrc":"45055:11:69","nodeType":"YulIdentifier","src":"45055:11:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"45037:17:69","nodeType":"YulIdentifier","src":"45037:17:69"},"nativeSrc":"45037:30:69","nodeType":"YulFunctionCall","src":"45037:30:69"},"variableNames":[{"name":"product","nativeSrc":"45026:7:69","nodeType":"YulIdentifier","src":"45026:7:69"}]},{"body":{"nativeSrc":"45244:22:69","nodeType":"YulBlock","src":"45244:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"45246:16:69","nodeType":"YulIdentifier","src":"45246:16:69"},"nativeSrc":"45246:18:69","nodeType":"YulFunctionCall","src":"45246:18:69"},"nativeSrc":"45246:18:69","nodeType":"YulExpressionStatement","src":"45246:18:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nativeSrc":"45177:1:69","nodeType":"YulIdentifier","src":"45177:1:69"}],"functionName":{"name":"iszero","nativeSrc":"45170:6:69","nodeType":"YulIdentifier","src":"45170:6:69"},"nativeSrc":"45170:9:69","nodeType":"YulFunctionCall","src":"45170:9:69"},{"arguments":[{"name":"y","nativeSrc":"45200:1:69","nodeType":"YulIdentifier","src":"45200:1:69"},{"arguments":[{"name":"product","nativeSrc":"45207:7:69","nodeType":"YulIdentifier","src":"45207:7:69"},{"name":"x","nativeSrc":"45216:1:69","nodeType":"YulIdentifier","src":"45216:1:69"}],"functionName":{"name":"div","nativeSrc":"45203:3:69","nodeType":"YulIdentifier","src":"45203:3:69"},"nativeSrc":"45203:15:69","nodeType":"YulFunctionCall","src":"45203:15:69"}],"functionName":{"name":"eq","nativeSrc":"45197:2:69","nodeType":"YulIdentifier","src":"45197:2:69"},"nativeSrc":"45197:22:69","nodeType":"YulFunctionCall","src":"45197:22:69"}],"functionName":{"name":"or","nativeSrc":"45150:2:69","nodeType":"YulIdentifier","src":"45150:2:69"},"nativeSrc":"45150:83:69","nodeType":"YulFunctionCall","src":"45150:83:69"}],"functionName":{"name":"iszero","nativeSrc":"45130:6:69","nodeType":"YulIdentifier","src":"45130:6:69"},"nativeSrc":"45130:113:69","nodeType":"YulFunctionCall","src":"45130:113:69"},"nativeSrc":"45127:139:69","nodeType":"YulIf","src":"45127:139:69"}]},"name":"checked_mul_t_uint256","nativeSrc":"44863:410:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"44894:1:69","nodeType":"YulTypedName","src":"44894:1:69","type":""},{"name":"y","nativeSrc":"44897:1:69","nodeType":"YulTypedName","src":"44897:1:69","type":""}],"returnVariables":[{"name":"product","nativeSrc":"44903:7:69","nodeType":"YulTypedName","src":"44903:7:69","type":""}],"src":"44863:410:69"},{"body":{"nativeSrc":"45356:274:69","nodeType":"YulBlock","src":"45356:274:69","statements":[{"body":{"nativeSrc":"45402:83:69","nodeType":"YulBlock","src":"45402:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"45404:77:69","nodeType":"YulIdentifier","src":"45404:77:69"},"nativeSrc":"45404:79:69","nodeType":"YulFunctionCall","src":"45404:79:69"},"nativeSrc":"45404:79:69","nodeType":"YulExpressionStatement","src":"45404:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"45377:7:69","nodeType":"YulIdentifier","src":"45377:7:69"},{"name":"headStart","nativeSrc":"45386:9:69","nodeType":"YulIdentifier","src":"45386:9:69"}],"functionName":{"name":"sub","nativeSrc":"45373:3:69","nodeType":"YulIdentifier","src":"45373:3:69"},"nativeSrc":"45373:23:69","nodeType":"YulFunctionCall","src":"45373:23:69"},{"kind":"number","nativeSrc":"45398:2:69","nodeType":"YulLiteral","src":"45398:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"45369:3:69","nodeType":"YulIdentifier","src":"45369:3:69"},"nativeSrc":"45369:32:69","nodeType":"YulFunctionCall","src":"45369:32:69"},"nativeSrc":"45366:119:69","nodeType":"YulIf","src":"45366:119:69"},{"nativeSrc":"45495:128:69","nodeType":"YulBlock","src":"45495:128:69","statements":[{"nativeSrc":"45510:15:69","nodeType":"YulVariableDeclaration","src":"45510:15:69","value":{"kind":"number","nativeSrc":"45524:1:69","nodeType":"YulLiteral","src":"45524:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"45514:6:69","nodeType":"YulTypedName","src":"45514:6:69","type":""}]},{"nativeSrc":"45539:74:69","nodeType":"YulAssignment","src":"45539:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"45585:9:69","nodeType":"YulIdentifier","src":"45585:9:69"},{"name":"offset","nativeSrc":"45596:6:69","nodeType":"YulIdentifier","src":"45596:6:69"}],"functionName":{"name":"add","nativeSrc":"45581:3:69","nodeType":"YulIdentifier","src":"45581:3:69"},"nativeSrc":"45581:22:69","nodeType":"YulFunctionCall","src":"45581:22:69"},{"name":"dataEnd","nativeSrc":"45605:7:69","nodeType":"YulIdentifier","src":"45605:7:69"}],"functionName":{"name":"abi_decode_t_enum$_Action_$9148","nativeSrc":"45549:31:69","nodeType":"YulIdentifier","src":"45549:31:69"},"nativeSrc":"45549:64:69","nodeType":"YulFunctionCall","src":"45549:64:69"},"variableNames":[{"name":"value0","nativeSrc":"45539:6:69","nodeType":"YulIdentifier","src":"45539:6:69"}]}]}]},"name":"abi_decode_tuple_t_enum$_Action_$9148","nativeSrc":"45279:351:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"45326:9:69","nodeType":"YulTypedName","src":"45326:9:69","type":""},{"name":"dataEnd","nativeSrc":"45337:7:69","nodeType":"YulTypedName","src":"45337:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"45349:6:69","nodeType":"YulTypedName","src":"45349:6:69","type":""}],"src":"45279:351:69"},{"body":{"nativeSrc":"45664:152:69","nodeType":"YulBlock","src":"45664:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"45681:1:69","nodeType":"YulLiteral","src":"45681:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"45684:77:69","nodeType":"YulLiteral","src":"45684:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"45674:6:69","nodeType":"YulIdentifier","src":"45674:6:69"},"nativeSrc":"45674:88:69","nodeType":"YulFunctionCall","src":"45674:88:69"},"nativeSrc":"45674:88:69","nodeType":"YulExpressionStatement","src":"45674:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"45778:1:69","nodeType":"YulLiteral","src":"45778:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"45781:4:69","nodeType":"YulLiteral","src":"45781:4:69","type":"","value":"0x12"}],"functionName":{"name":"mstore","nativeSrc":"45771:6:69","nodeType":"YulIdentifier","src":"45771:6:69"},"nativeSrc":"45771:15:69","nodeType":"YulFunctionCall","src":"45771:15:69"},"nativeSrc":"45771:15:69","nodeType":"YulExpressionStatement","src":"45771:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"45802:1:69","nodeType":"YulLiteral","src":"45802:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"45805:4:69","nodeType":"YulLiteral","src":"45805:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"45795:6:69","nodeType":"YulIdentifier","src":"45795:6:69"},"nativeSrc":"45795:15:69","nodeType":"YulFunctionCall","src":"45795:15:69"},"nativeSrc":"45795:15:69","nodeType":"YulExpressionStatement","src":"45795:15:69"}]},"name":"panic_error_0x12","nativeSrc":"45636:180:69","nodeType":"YulFunctionDefinition","src":"45636:180:69"},{"body":{"nativeSrc":"45864:143:69","nodeType":"YulBlock","src":"45864:143:69","statements":[{"nativeSrc":"45874:25:69","nodeType":"YulAssignment","src":"45874:25:69","value":{"arguments":[{"name":"x","nativeSrc":"45897:1:69","nodeType":"YulIdentifier","src":"45897:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"45879:17:69","nodeType":"YulIdentifier","src":"45879:17:69"},"nativeSrc":"45879:20:69","nodeType":"YulFunctionCall","src":"45879:20:69"},"variableNames":[{"name":"x","nativeSrc":"45874:1:69","nodeType":"YulIdentifier","src":"45874:1:69"}]},{"nativeSrc":"45908:25:69","nodeType":"YulAssignment","src":"45908:25:69","value":{"arguments":[{"name":"y","nativeSrc":"45931:1:69","nodeType":"YulIdentifier","src":"45931:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"45913:17:69","nodeType":"YulIdentifier","src":"45913:17:69"},"nativeSrc":"45913:20:69","nodeType":"YulFunctionCall","src":"45913:20:69"},"variableNames":[{"name":"y","nativeSrc":"45908:1:69","nodeType":"YulIdentifier","src":"45908:1:69"}]},{"body":{"nativeSrc":"45955:22:69","nodeType":"YulBlock","src":"45955:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x12","nativeSrc":"45957:16:69","nodeType":"YulIdentifier","src":"45957:16:69"},"nativeSrc":"45957:18:69","nodeType":"YulFunctionCall","src":"45957:18:69"},"nativeSrc":"45957:18:69","nodeType":"YulExpressionStatement","src":"45957:18:69"}]},"condition":{"arguments":[{"name":"y","nativeSrc":"45952:1:69","nodeType":"YulIdentifier","src":"45952:1:69"}],"functionName":{"name":"iszero","nativeSrc":"45945:6:69","nodeType":"YulIdentifier","src":"45945:6:69"},"nativeSrc":"45945:9:69","nodeType":"YulFunctionCall","src":"45945:9:69"},"nativeSrc":"45942:35:69","nodeType":"YulIf","src":"45942:35:69"},{"nativeSrc":"45987:14:69","nodeType":"YulAssignment","src":"45987:14:69","value":{"arguments":[{"name":"x","nativeSrc":"45996:1:69","nodeType":"YulIdentifier","src":"45996:1:69"},{"name":"y","nativeSrc":"45999:1:69","nodeType":"YulIdentifier","src":"45999:1:69"}],"functionName":{"name":"div","nativeSrc":"45992:3:69","nodeType":"YulIdentifier","src":"45992:3:69"},"nativeSrc":"45992:9:69","nodeType":"YulFunctionCall","src":"45992:9:69"},"variableNames":[{"name":"r","nativeSrc":"45987:1:69","nodeType":"YulIdentifier","src":"45987:1:69"}]}]},"name":"checked_div_t_uint256","nativeSrc":"45822:185:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"45853:1:69","nodeType":"YulTypedName","src":"45853:1:69","type":""},{"name":"y","nativeSrc":"45856:1:69","nodeType":"YulTypedName","src":"45856:1:69","type":""}],"returnVariables":[{"name":"r","nativeSrc":"45862:1:69","nodeType":"YulTypedName","src":"45862:1:69","type":""}],"src":"45822:185:69"},{"body":{"nativeSrc":"46233:464:69","nodeType":"YulBlock","src":"46233:464:69","statements":[{"nativeSrc":"46243:27:69","nodeType":"YulAssignment","src":"46243:27:69","value":{"arguments":[{"name":"headStart","nativeSrc":"46255:9:69","nodeType":"YulIdentifier","src":"46255:9:69"},{"kind":"number","nativeSrc":"46266:3:69","nodeType":"YulLiteral","src":"46266:3:69","type":"","value":"160"}],"functionName":{"name":"add","nativeSrc":"46251:3:69","nodeType":"YulIdentifier","src":"46251:3:69"},"nativeSrc":"46251:19:69","nodeType":"YulFunctionCall","src":"46251:19:69"},"variableNames":[{"name":"tail","nativeSrc":"46243:4:69","nodeType":"YulIdentifier","src":"46243:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"46324:6:69","nodeType":"YulIdentifier","src":"46324:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"46337:9:69","nodeType":"YulIdentifier","src":"46337:9:69"},{"kind":"number","nativeSrc":"46348:1:69","nodeType":"YulLiteral","src":"46348:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"46333:3:69","nodeType":"YulIdentifier","src":"46333:3:69"},"nativeSrc":"46333:17:69","nodeType":"YulFunctionCall","src":"46333:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"46280:43:69","nodeType":"YulIdentifier","src":"46280:43:69"},"nativeSrc":"46280:71:69","nodeType":"YulFunctionCall","src":"46280:71:69"},"nativeSrc":"46280:71:69","nodeType":"YulExpressionStatement","src":"46280:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"46405:6:69","nodeType":"YulIdentifier","src":"46405:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"46418:9:69","nodeType":"YulIdentifier","src":"46418:9:69"},{"kind":"number","nativeSrc":"46429:2:69","nodeType":"YulLiteral","src":"46429:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"46414:3:69","nodeType":"YulIdentifier","src":"46414:3:69"},"nativeSrc":"46414:18:69","nodeType":"YulFunctionCall","src":"46414:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"46361:43:69","nodeType":"YulIdentifier","src":"46361:43:69"},"nativeSrc":"46361:72:69","nodeType":"YulFunctionCall","src":"46361:72:69"},"nativeSrc":"46361:72:69","nodeType":"YulExpressionStatement","src":"46361:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"46487:6:69","nodeType":"YulIdentifier","src":"46487:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"46500:9:69","nodeType":"YulIdentifier","src":"46500:9:69"},{"kind":"number","nativeSrc":"46511:2:69","nodeType":"YulLiteral","src":"46511:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"46496:3:69","nodeType":"YulIdentifier","src":"46496:3:69"},"nativeSrc":"46496:18:69","nodeType":"YulFunctionCall","src":"46496:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"46443:43:69","nodeType":"YulIdentifier","src":"46443:43:69"},"nativeSrc":"46443:72:69","nodeType":"YulFunctionCall","src":"46443:72:69"},"nativeSrc":"46443:72:69","nodeType":"YulExpressionStatement","src":"46443:72:69"},{"expression":{"arguments":[{"name":"value3","nativeSrc":"46585:6:69","nodeType":"YulIdentifier","src":"46585:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"46598:9:69","nodeType":"YulIdentifier","src":"46598:9:69"},{"kind":"number","nativeSrc":"46609:2:69","nodeType":"YulLiteral","src":"46609:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"46594:3:69","nodeType":"YulIdentifier","src":"46594:3:69"},"nativeSrc":"46594:18:69","nodeType":"YulFunctionCall","src":"46594:18:69"}],"functionName":{"name":"abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack","nativeSrc":"46525:59:69","nodeType":"YulIdentifier","src":"46525:59:69"},"nativeSrc":"46525:88:69","nodeType":"YulFunctionCall","src":"46525:88:69"},"nativeSrc":"46525:88:69","nodeType":"YulExpressionStatement","src":"46525:88:69"},{"expression":{"arguments":[{"name":"value4","nativeSrc":"46661:6:69","nodeType":"YulIdentifier","src":"46661:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"46674:9:69","nodeType":"YulIdentifier","src":"46674:9:69"},{"kind":"number","nativeSrc":"46685:3:69","nodeType":"YulLiteral","src":"46685:3:69","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"46670:3:69","nodeType":"YulIdentifier","src":"46670:3:69"},"nativeSrc":"46670:19:69","nodeType":"YulFunctionCall","src":"46670:19:69"}],"functionName":{"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"46623:37:69","nodeType":"YulIdentifier","src":"46623:37:69"},"nativeSrc":"46623:67:69","nodeType":"YulFunctionCall","src":"46623:67:69"},"nativeSrc":"46623:67:69","nodeType":"YulExpressionStatement","src":"46623:67:69"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_contract$_VToken_$15506_t_bool__to_t_address_t_address_t_uint256_t_address_t_bool__fromStack_reversed","nativeSrc":"46013:684:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"46173:9:69","nodeType":"YulTypedName","src":"46173:9:69","type":""},{"name":"value4","nativeSrc":"46185:6:69","nodeType":"YulTypedName","src":"46185:6:69","type":""},{"name":"value3","nativeSrc":"46193:6:69","nodeType":"YulTypedName","src":"46193:6:69","type":""},{"name":"value2","nativeSrc":"46201:6:69","nodeType":"YulTypedName","src":"46201:6:69","type":""},{"name":"value1","nativeSrc":"46209:6:69","nodeType":"YulTypedName","src":"46209:6:69","type":""},{"name":"value0","nativeSrc":"46217:6:69","nodeType":"YulTypedName","src":"46217:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"46228:4:69","nodeType":"YulTypedName","src":"46228:4:69","type":""}],"src":"46013:684:69"},{"body":{"nativeSrc":"46809:121:69","nodeType":"YulBlock","src":"46809:121:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"46831:6:69","nodeType":"YulIdentifier","src":"46831:6:69"},{"kind":"number","nativeSrc":"46839:1:69","nodeType":"YulLiteral","src":"46839:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"46827:3:69","nodeType":"YulIdentifier","src":"46827:3:69"},"nativeSrc":"46827:14:69","nodeType":"YulFunctionCall","src":"46827:14:69"},{"hexValue":"4e6f6e7a65726f20626f72726f772062616c616e6365206166746572206c6971","kind":"string","nativeSrc":"46843:34:69","nodeType":"YulLiteral","src":"46843:34:69","type":"","value":"Nonzero borrow balance after liq"}],"functionName":{"name":"mstore","nativeSrc":"46820:6:69","nodeType":"YulIdentifier","src":"46820:6:69"},"nativeSrc":"46820:58:69","nodeType":"YulFunctionCall","src":"46820:58:69"},"nativeSrc":"46820:58:69","nodeType":"YulExpressionStatement","src":"46820:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"46899:6:69","nodeType":"YulIdentifier","src":"46899:6:69"},{"kind":"number","nativeSrc":"46907:2:69","nodeType":"YulLiteral","src":"46907:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"46895:3:69","nodeType":"YulIdentifier","src":"46895:3:69"},"nativeSrc":"46895:15:69","nodeType":"YulFunctionCall","src":"46895:15:69"},{"hexValue":"7569646174696f6e","kind":"string","nativeSrc":"46912:10:69","nodeType":"YulLiteral","src":"46912:10:69","type":"","value":"uidation"}],"functionName":{"name":"mstore","nativeSrc":"46888:6:69","nodeType":"YulIdentifier","src":"46888:6:69"},"nativeSrc":"46888:35:69","nodeType":"YulFunctionCall","src":"46888:35:69"},"nativeSrc":"46888:35:69","nodeType":"YulExpressionStatement","src":"46888:35:69"}]},"name":"store_literal_in_memory_25d05e40227b6f7351f342eb9dac81eb87f63180a86e368f7d41da458d00d16f","nativeSrc":"46703:227:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"46801:6:69","nodeType":"YulTypedName","src":"46801:6:69","type":""}],"src":"46703:227:69"},{"body":{"nativeSrc":"47082:220:69","nodeType":"YulBlock","src":"47082:220:69","statements":[{"nativeSrc":"47092:74:69","nodeType":"YulAssignment","src":"47092:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"47158:3:69","nodeType":"YulIdentifier","src":"47158:3:69"},{"kind":"number","nativeSrc":"47163:2:69","nodeType":"YulLiteral","src":"47163:2:69","type":"","value":"40"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"47099:58:69","nodeType":"YulIdentifier","src":"47099:58:69"},"nativeSrc":"47099:67:69","nodeType":"YulFunctionCall","src":"47099:67:69"},"variableNames":[{"name":"pos","nativeSrc":"47092:3:69","nodeType":"YulIdentifier","src":"47092:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"47264:3:69","nodeType":"YulIdentifier","src":"47264:3:69"}],"functionName":{"name":"store_literal_in_memory_25d05e40227b6f7351f342eb9dac81eb87f63180a86e368f7d41da458d00d16f","nativeSrc":"47175:88:69","nodeType":"YulIdentifier","src":"47175:88:69"},"nativeSrc":"47175:93:69","nodeType":"YulFunctionCall","src":"47175:93:69"},"nativeSrc":"47175:93:69","nodeType":"YulExpressionStatement","src":"47175:93:69"},{"nativeSrc":"47277:19:69","nodeType":"YulAssignment","src":"47277:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"47288:3:69","nodeType":"YulIdentifier","src":"47288:3:69"},{"kind":"number","nativeSrc":"47293:2:69","nodeType":"YulLiteral","src":"47293:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"47284:3:69","nodeType":"YulIdentifier","src":"47284:3:69"},"nativeSrc":"47284:12:69","nodeType":"YulFunctionCall","src":"47284:12:69"},"variableNames":[{"name":"end","nativeSrc":"47277:3:69","nodeType":"YulIdentifier","src":"47277:3:69"}]}]},"name":"abi_encode_t_stringliteral_25d05e40227b6f7351f342eb9dac81eb87f63180a86e368f7d41da458d00d16f_to_t_string_memory_ptr_fromStack","nativeSrc":"46936:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"47070:3:69","nodeType":"YulTypedName","src":"47070:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"47078:3:69","nodeType":"YulTypedName","src":"47078:3:69","type":""}],"src":"46936:366:69"},{"body":{"nativeSrc":"47479:248:69","nodeType":"YulBlock","src":"47479:248:69","statements":[{"nativeSrc":"47489:26:69","nodeType":"YulAssignment","src":"47489:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"47501:9:69","nodeType":"YulIdentifier","src":"47501:9:69"},{"kind":"number","nativeSrc":"47512:2:69","nodeType":"YulLiteral","src":"47512:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"47497:3:69","nodeType":"YulIdentifier","src":"47497:3:69"},"nativeSrc":"47497:18:69","nodeType":"YulFunctionCall","src":"47497:18:69"},"variableNames":[{"name":"tail","nativeSrc":"47489:4:69","nodeType":"YulIdentifier","src":"47489:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"47536:9:69","nodeType":"YulIdentifier","src":"47536:9:69"},{"kind":"number","nativeSrc":"47547:1:69","nodeType":"YulLiteral","src":"47547:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"47532:3:69","nodeType":"YulIdentifier","src":"47532:3:69"},"nativeSrc":"47532:17:69","nodeType":"YulFunctionCall","src":"47532:17:69"},{"arguments":[{"name":"tail","nativeSrc":"47555:4:69","nodeType":"YulIdentifier","src":"47555:4:69"},{"name":"headStart","nativeSrc":"47561:9:69","nodeType":"YulIdentifier","src":"47561:9:69"}],"functionName":{"name":"sub","nativeSrc":"47551:3:69","nodeType":"YulIdentifier","src":"47551:3:69"},"nativeSrc":"47551:20:69","nodeType":"YulFunctionCall","src":"47551:20:69"}],"functionName":{"name":"mstore","nativeSrc":"47525:6:69","nodeType":"YulIdentifier","src":"47525:6:69"},"nativeSrc":"47525:47:69","nodeType":"YulFunctionCall","src":"47525:47:69"},"nativeSrc":"47525:47:69","nodeType":"YulExpressionStatement","src":"47525:47:69"},{"nativeSrc":"47581:139:69","nodeType":"YulAssignment","src":"47581:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"47715:4:69","nodeType":"YulIdentifier","src":"47715:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_25d05e40227b6f7351f342eb9dac81eb87f63180a86e368f7d41da458d00d16f_to_t_string_memory_ptr_fromStack","nativeSrc":"47589:124:69","nodeType":"YulIdentifier","src":"47589:124:69"},"nativeSrc":"47589:131:69","nodeType":"YulFunctionCall","src":"47589:131:69"},"variableNames":[{"name":"tail","nativeSrc":"47581:4:69","nodeType":"YulIdentifier","src":"47581:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_25d05e40227b6f7351f342eb9dac81eb87f63180a86e368f7d41da458d00d16f__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"47308:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"47459:9:69","nodeType":"YulTypedName","src":"47459:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"47474:4:69","nodeType":"YulTypedName","src":"47474:4:69","type":""}],"src":"47308:419:69"},{"body":{"nativeSrc":"47927:274:69","nodeType":"YulBlock","src":"47927:274:69","statements":[{"nativeSrc":"47937:26:69","nodeType":"YulAssignment","src":"47937:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"47949:9:69","nodeType":"YulIdentifier","src":"47949:9:69"},{"kind":"number","nativeSrc":"47960:2:69","nodeType":"YulLiteral","src":"47960:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"47945:3:69","nodeType":"YulIdentifier","src":"47945:3:69"},"nativeSrc":"47945:18:69","nodeType":"YulFunctionCall","src":"47945:18:69"},"variableNames":[{"name":"tail","nativeSrc":"47937:4:69","nodeType":"YulIdentifier","src":"47937:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"48051:6:69","nodeType":"YulIdentifier","src":"48051:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"48064:9:69","nodeType":"YulIdentifier","src":"48064:9:69"},{"kind":"number","nativeSrc":"48075:1:69","nodeType":"YulLiteral","src":"48075:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"48060:3:69","nodeType":"YulIdentifier","src":"48060:3:69"},"nativeSrc":"48060:17:69","nodeType":"YulFunctionCall","src":"48060:17:69"}],"functionName":{"name":"abi_encode_t_contract$_ResilientOracleInterface_$16173_to_t_address_fromStack","nativeSrc":"47973:77:69","nodeType":"YulIdentifier","src":"47973:77:69"},"nativeSrc":"47973:105:69","nodeType":"YulFunctionCall","src":"47973:105:69"},"nativeSrc":"47973:105:69","nodeType":"YulExpressionStatement","src":"47973:105:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"48166:6:69","nodeType":"YulIdentifier","src":"48166:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"48179:9:69","nodeType":"YulIdentifier","src":"48179:9:69"},{"kind":"number","nativeSrc":"48190:2:69","nodeType":"YulLiteral","src":"48190:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"48175:3:69","nodeType":"YulIdentifier","src":"48175:3:69"},"nativeSrc":"48175:18:69","nodeType":"YulFunctionCall","src":"48175:18:69"}],"functionName":{"name":"abi_encode_t_contract$_ResilientOracleInterface_$16173_to_t_address_fromStack","nativeSrc":"48088:77:69","nodeType":"YulIdentifier","src":"48088:77:69"},"nativeSrc":"48088:106:69","nodeType":"YulFunctionCall","src":"48088:106:69"},"nativeSrc":"48088:106:69","nodeType":"YulExpressionStatement","src":"48088:106:69"}]},"name":"abi_encode_tuple_t_contract$_ResilientOracleInterface_$16173_t_contract$_ResilientOracleInterface_$16173__to_t_address_t_address__fromStack_reversed","nativeSrc":"47733:468:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"47891:9:69","nodeType":"YulTypedName","src":"47891:9:69","type":""},{"name":"value1","nativeSrc":"47903:6:69","nodeType":"YulTypedName","src":"47903:6:69","type":""},{"name":"value0","nativeSrc":"47911:6:69","nodeType":"YulTypedName","src":"47911:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"47922:4:69","nodeType":"YulTypedName","src":"47922:4:69","type":""}],"src":"47733:468:69"},{"body":{"nativeSrc":"48313:58:69","nodeType":"YulBlock","src":"48313:58:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"48335:6:69","nodeType":"YulIdentifier","src":"48335:6:69"},{"kind":"number","nativeSrc":"48343:1:69","nodeType":"YulLiteral","src":"48343:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"48331:3:69","nodeType":"YulIdentifier","src":"48331:3:69"},"nativeSrc":"48331:14:69","nodeType":"YulFunctionCall","src":"48331:14:69"},{"hexValue":"616c726561647920657869737473","kind":"string","nativeSrc":"48347:16:69","nodeType":"YulLiteral","src":"48347:16:69","type":"","value":"already exists"}],"functionName":{"name":"mstore","nativeSrc":"48324:6:69","nodeType":"YulIdentifier","src":"48324:6:69"},"nativeSrc":"48324:40:69","nodeType":"YulFunctionCall","src":"48324:40:69"},"nativeSrc":"48324:40:69","nodeType":"YulExpressionStatement","src":"48324:40:69"}]},"name":"store_literal_in_memory_61ffe8d71e53165b47fbc4657a5b6dca84fa425e33e0a21288981e17a8238fcd","nativeSrc":"48207:164:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"48305:6:69","nodeType":"YulTypedName","src":"48305:6:69","type":""}],"src":"48207:164:69"},{"body":{"nativeSrc":"48523:220:69","nodeType":"YulBlock","src":"48523:220:69","statements":[{"nativeSrc":"48533:74:69","nodeType":"YulAssignment","src":"48533:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"48599:3:69","nodeType":"YulIdentifier","src":"48599:3:69"},{"kind":"number","nativeSrc":"48604:2:69","nodeType":"YulLiteral","src":"48604:2:69","type":"","value":"14"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"48540:58:69","nodeType":"YulIdentifier","src":"48540:58:69"},"nativeSrc":"48540:67:69","nodeType":"YulFunctionCall","src":"48540:67:69"},"variableNames":[{"name":"pos","nativeSrc":"48533:3:69","nodeType":"YulIdentifier","src":"48533:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"48705:3:69","nodeType":"YulIdentifier","src":"48705:3:69"}],"functionName":{"name":"store_literal_in_memory_61ffe8d71e53165b47fbc4657a5b6dca84fa425e33e0a21288981e17a8238fcd","nativeSrc":"48616:88:69","nodeType":"YulIdentifier","src":"48616:88:69"},"nativeSrc":"48616:93:69","nodeType":"YulFunctionCall","src":"48616:93:69"},"nativeSrc":"48616:93:69","nodeType":"YulExpressionStatement","src":"48616:93:69"},{"nativeSrc":"48718:19:69","nodeType":"YulAssignment","src":"48718:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"48729:3:69","nodeType":"YulIdentifier","src":"48729:3:69"},{"kind":"number","nativeSrc":"48734:2:69","nodeType":"YulLiteral","src":"48734:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"48725:3:69","nodeType":"YulIdentifier","src":"48725:3:69"},"nativeSrc":"48725:12:69","nodeType":"YulFunctionCall","src":"48725:12:69"},"variableNames":[{"name":"end","nativeSrc":"48718:3:69","nodeType":"YulIdentifier","src":"48718:3:69"}]}]},"name":"abi_encode_t_stringliteral_61ffe8d71e53165b47fbc4657a5b6dca84fa425e33e0a21288981e17a8238fcd_to_t_string_memory_ptr_fromStack","nativeSrc":"48377:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"48511:3:69","nodeType":"YulTypedName","src":"48511:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"48519:3:69","nodeType":"YulTypedName","src":"48519:3:69","type":""}],"src":"48377:366:69"},{"body":{"nativeSrc":"48920:248:69","nodeType":"YulBlock","src":"48920:248:69","statements":[{"nativeSrc":"48930:26:69","nodeType":"YulAssignment","src":"48930:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"48942:9:69","nodeType":"YulIdentifier","src":"48942:9:69"},{"kind":"number","nativeSrc":"48953:2:69","nodeType":"YulLiteral","src":"48953:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"48938:3:69","nodeType":"YulIdentifier","src":"48938:3:69"},"nativeSrc":"48938:18:69","nodeType":"YulFunctionCall","src":"48938:18:69"},"variableNames":[{"name":"tail","nativeSrc":"48930:4:69","nodeType":"YulIdentifier","src":"48930:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"48977:9:69","nodeType":"YulIdentifier","src":"48977:9:69"},{"kind":"number","nativeSrc":"48988:1:69","nodeType":"YulLiteral","src":"48988:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"48973:3:69","nodeType":"YulIdentifier","src":"48973:3:69"},"nativeSrc":"48973:17:69","nodeType":"YulFunctionCall","src":"48973:17:69"},{"arguments":[{"name":"tail","nativeSrc":"48996:4:69","nodeType":"YulIdentifier","src":"48996:4:69"},{"name":"headStart","nativeSrc":"49002:9:69","nodeType":"YulIdentifier","src":"49002:9:69"}],"functionName":{"name":"sub","nativeSrc":"48992:3:69","nodeType":"YulIdentifier","src":"48992:3:69"},"nativeSrc":"48992:20:69","nodeType":"YulFunctionCall","src":"48992:20:69"}],"functionName":{"name":"mstore","nativeSrc":"48966:6:69","nodeType":"YulIdentifier","src":"48966:6:69"},"nativeSrc":"48966:47:69","nodeType":"YulFunctionCall","src":"48966:47:69"},"nativeSrc":"48966:47:69","nodeType":"YulExpressionStatement","src":"48966:47:69"},{"nativeSrc":"49022:139:69","nodeType":"YulAssignment","src":"49022:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"49156:4:69","nodeType":"YulIdentifier","src":"49156:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_61ffe8d71e53165b47fbc4657a5b6dca84fa425e33e0a21288981e17a8238fcd_to_t_string_memory_ptr_fromStack","nativeSrc":"49030:124:69","nodeType":"YulIdentifier","src":"49030:124:69"},"nativeSrc":"49030:131:69","nodeType":"YulFunctionCall","src":"49030:131:69"},"variableNames":[{"name":"tail","nativeSrc":"49022:4:69","nodeType":"YulIdentifier","src":"49022:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_61ffe8d71e53165b47fbc4657a5b6dca84fa425e33e0a21288981e17a8238fcd__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"48749:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"48900:9:69","nodeType":"YulTypedName","src":"48900:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"48915:4:69","nodeType":"YulTypedName","src":"48915:4:69","type":""}],"src":"48749:419:69"},{"body":{"nativeSrc":"49218:147:69","nodeType":"YulBlock","src":"49218:147:69","statements":[{"nativeSrc":"49228:25:69","nodeType":"YulAssignment","src":"49228:25:69","value":{"arguments":[{"name":"x","nativeSrc":"49251:1:69","nodeType":"YulIdentifier","src":"49251:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"49233:17:69","nodeType":"YulIdentifier","src":"49233:17:69"},"nativeSrc":"49233:20:69","nodeType":"YulFunctionCall","src":"49233:20:69"},"variableNames":[{"name":"x","nativeSrc":"49228:1:69","nodeType":"YulIdentifier","src":"49228:1:69"}]},{"nativeSrc":"49262:25:69","nodeType":"YulAssignment","src":"49262:25:69","value":{"arguments":[{"name":"y","nativeSrc":"49285:1:69","nodeType":"YulIdentifier","src":"49285:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"49267:17:69","nodeType":"YulIdentifier","src":"49267:17:69"},"nativeSrc":"49267:20:69","nodeType":"YulFunctionCall","src":"49267:20:69"},"variableNames":[{"name":"y","nativeSrc":"49262:1:69","nodeType":"YulIdentifier","src":"49262:1:69"}]},{"nativeSrc":"49296:16:69","nodeType":"YulAssignment","src":"49296:16:69","value":{"arguments":[{"name":"x","nativeSrc":"49307:1:69","nodeType":"YulIdentifier","src":"49307:1:69"},{"name":"y","nativeSrc":"49310:1:69","nodeType":"YulIdentifier","src":"49310:1:69"}],"functionName":{"name":"add","nativeSrc":"49303:3:69","nodeType":"YulIdentifier","src":"49303:3:69"},"nativeSrc":"49303:9:69","nodeType":"YulFunctionCall","src":"49303:9:69"},"variableNames":[{"name":"sum","nativeSrc":"49296:3:69","nodeType":"YulIdentifier","src":"49296:3:69"}]},{"body":{"nativeSrc":"49336:22:69","nodeType":"YulBlock","src":"49336:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"49338:16:69","nodeType":"YulIdentifier","src":"49338:16:69"},"nativeSrc":"49338:18:69","nodeType":"YulFunctionCall","src":"49338:18:69"},"nativeSrc":"49338:18:69","nodeType":"YulExpressionStatement","src":"49338:18:69"}]},"condition":{"arguments":[{"name":"x","nativeSrc":"49328:1:69","nodeType":"YulIdentifier","src":"49328:1:69"},{"name":"sum","nativeSrc":"49331:3:69","nodeType":"YulIdentifier","src":"49331:3:69"}],"functionName":{"name":"gt","nativeSrc":"49325:2:69","nodeType":"YulIdentifier","src":"49325:2:69"},"nativeSrc":"49325:10:69","nodeType":"YulFunctionCall","src":"49325:10:69"},"nativeSrc":"49322:36:69","nodeType":"YulIf","src":"49322:36:69"}]},"name":"checked_add_t_uint256","nativeSrc":"49174:191:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"49205:1:69","nodeType":"YulTypedName","src":"49205:1:69","type":""},{"name":"y","nativeSrc":"49208:1:69","nodeType":"YulTypedName","src":"49208:1:69","type":""}],"returnVariables":[{"name":"sum","nativeSrc":"49214:3:69","nodeType":"YulTypedName","src":"49214:3:69","type":""}],"src":"49174:191:69"},{"body":{"nativeSrc":"49442:51:69","nodeType":"YulBlock","src":"49442:51:69","statements":[{"nativeSrc":"49452:35:69","nodeType":"YulAssignment","src":"49452:35:69","value":{"arguments":[{"name":"value","nativeSrc":"49481:5:69","nodeType":"YulIdentifier","src":"49481:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"49463:17:69","nodeType":"YulIdentifier","src":"49463:17:69"},"nativeSrc":"49463:24:69","nodeType":"YulFunctionCall","src":"49463:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"49452:7:69","nodeType":"YulIdentifier","src":"49452:7:69"}]}]},"name":"cleanup_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"49371:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"49424:5:69","nodeType":"YulTypedName","src":"49424:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"49434:7:69","nodeType":"YulTypedName","src":"49434:7:69","type":""}],"src":"49371:122:69"},{"body":{"nativeSrc":"49568:105:69","nodeType":"YulBlock","src":"49568:105:69","statements":[{"body":{"nativeSrc":"49651:16:69","nodeType":"YulBlock","src":"49651:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"49660:1:69","nodeType":"YulLiteral","src":"49660:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"49663:1:69","nodeType":"YulLiteral","src":"49663:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"49653:6:69","nodeType":"YulIdentifier","src":"49653:6:69"},"nativeSrc":"49653:12:69","nodeType":"YulFunctionCall","src":"49653:12:69"},"nativeSrc":"49653:12:69","nodeType":"YulExpressionStatement","src":"49653:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"49591:5:69","nodeType":"YulIdentifier","src":"49591:5:69"},{"arguments":[{"name":"value","nativeSrc":"49642:5:69","nodeType":"YulIdentifier","src":"49642:5:69"}],"functionName":{"name":"cleanup_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"49598:43:69","nodeType":"YulIdentifier","src":"49598:43:69"},"nativeSrc":"49598:50:69","nodeType":"YulFunctionCall","src":"49598:50:69"}],"functionName":{"name":"eq","nativeSrc":"49588:2:69","nodeType":"YulIdentifier","src":"49588:2:69"},"nativeSrc":"49588:61:69","nodeType":"YulFunctionCall","src":"49588:61:69"}],"functionName":{"name":"iszero","nativeSrc":"49581:6:69","nodeType":"YulIdentifier","src":"49581:6:69"},"nativeSrc":"49581:69:69","nodeType":"YulFunctionCall","src":"49581:69:69"},"nativeSrc":"49578:89:69","nodeType":"YulIf","src":"49578:89:69"}]},"name":"validator_revert_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"49499:174:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"49561:5:69","nodeType":"YulTypedName","src":"49561:5:69","type":""}],"src":"49499:174:69"},{"body":{"nativeSrc":"49768:106:69","nodeType":"YulBlock","src":"49768:106:69","statements":[{"nativeSrc":"49778:22:69","nodeType":"YulAssignment","src":"49778:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"49793:6:69","nodeType":"YulIdentifier","src":"49793:6:69"}],"functionName":{"name":"mload","nativeSrc":"49787:5:69","nodeType":"YulIdentifier","src":"49787:5:69"},"nativeSrc":"49787:13:69","nodeType":"YulFunctionCall","src":"49787:13:69"},"variableNames":[{"name":"value","nativeSrc":"49778:5:69","nodeType":"YulIdentifier","src":"49778:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"49862:5:69","nodeType":"YulIdentifier","src":"49862:5:69"}],"functionName":{"name":"validator_revert_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"49809:52:69","nodeType":"YulIdentifier","src":"49809:52:69"},"nativeSrc":"49809:59:69","nodeType":"YulFunctionCall","src":"49809:59:69"},"nativeSrc":"49809:59:69","nodeType":"YulExpressionStatement","src":"49809:59:69"}]},"name":"abi_decode_t_contract$_IERC20Upgradeable_$1352_fromMemory","nativeSrc":"49679:195:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"49746:6:69","nodeType":"YulTypedName","src":"49746:6:69","type":""},{"name":"end","nativeSrc":"49754:3:69","nodeType":"YulTypedName","src":"49754:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"49762:5:69","nodeType":"YulTypedName","src":"49762:5:69","type":""}],"src":"49679:195:69"},{"body":{"nativeSrc":"49983:300:69","nodeType":"YulBlock","src":"49983:300:69","statements":[{"body":{"nativeSrc":"50029:83:69","nodeType":"YulBlock","src":"50029:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"50031:77:69","nodeType":"YulIdentifier","src":"50031:77:69"},"nativeSrc":"50031:79:69","nodeType":"YulFunctionCall","src":"50031:79:69"},"nativeSrc":"50031:79:69","nodeType":"YulExpressionStatement","src":"50031:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"50004:7:69","nodeType":"YulIdentifier","src":"50004:7:69"},{"name":"headStart","nativeSrc":"50013:9:69","nodeType":"YulIdentifier","src":"50013:9:69"}],"functionName":{"name":"sub","nativeSrc":"50000:3:69","nodeType":"YulIdentifier","src":"50000:3:69"},"nativeSrc":"50000:23:69","nodeType":"YulFunctionCall","src":"50000:23:69"},{"kind":"number","nativeSrc":"50025:2:69","nodeType":"YulLiteral","src":"50025:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"49996:3:69","nodeType":"YulIdentifier","src":"49996:3:69"},"nativeSrc":"49996:32:69","nodeType":"YulFunctionCall","src":"49996:32:69"},"nativeSrc":"49993:119:69","nodeType":"YulIf","src":"49993:119:69"},{"nativeSrc":"50122:154:69","nodeType":"YulBlock","src":"50122:154:69","statements":[{"nativeSrc":"50137:15:69","nodeType":"YulVariableDeclaration","src":"50137:15:69","value":{"kind":"number","nativeSrc":"50151:1:69","nodeType":"YulLiteral","src":"50151:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"50141:6:69","nodeType":"YulTypedName","src":"50141:6:69","type":""}]},{"nativeSrc":"50166:100:69","nodeType":"YulAssignment","src":"50166:100:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"50238:9:69","nodeType":"YulIdentifier","src":"50238:9:69"},{"name":"offset","nativeSrc":"50249:6:69","nodeType":"YulIdentifier","src":"50249:6:69"}],"functionName":{"name":"add","nativeSrc":"50234:3:69","nodeType":"YulIdentifier","src":"50234:3:69"},"nativeSrc":"50234:22:69","nodeType":"YulFunctionCall","src":"50234:22:69"},{"name":"dataEnd","nativeSrc":"50258:7:69","nodeType":"YulIdentifier","src":"50258:7:69"}],"functionName":{"name":"abi_decode_t_contract$_IERC20Upgradeable_$1352_fromMemory","nativeSrc":"50176:57:69","nodeType":"YulIdentifier","src":"50176:57:69"},"nativeSrc":"50176:90:69","nodeType":"YulFunctionCall","src":"50176:90:69"},"variableNames":[{"name":"value0","nativeSrc":"50166:6:69","nodeType":"YulIdentifier","src":"50166:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_IERC20Upgradeable_$1352_fromMemory","nativeSrc":"49880:403:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"49953:9:69","nodeType":"YulTypedName","src":"49953:9:69","type":""},{"name":"dataEnd","nativeSrc":"49964:7:69","nodeType":"YulTypedName","src":"49964:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"49976:6:69","nodeType":"YulTypedName","src":"49976:6:69","type":""}],"src":"49880:403:69"},{"body":{"nativeSrc":"50352:80:69","nodeType":"YulBlock","src":"50352:80:69","statements":[{"nativeSrc":"50362:22:69","nodeType":"YulAssignment","src":"50362:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"50377:6:69","nodeType":"YulIdentifier","src":"50377:6:69"}],"functionName":{"name":"mload","nativeSrc":"50371:5:69","nodeType":"YulIdentifier","src":"50371:5:69"},"nativeSrc":"50371:13:69","nodeType":"YulFunctionCall","src":"50371:13:69"},"variableNames":[{"name":"value","nativeSrc":"50362:5:69","nodeType":"YulIdentifier","src":"50362:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"50420:5:69","nodeType":"YulIdentifier","src":"50420:5:69"}],"functionName":{"name":"validator_revert_t_uint256","nativeSrc":"50393:26:69","nodeType":"YulIdentifier","src":"50393:26:69"},"nativeSrc":"50393:33:69","nodeType":"YulFunctionCall","src":"50393:33:69"},"nativeSrc":"50393:33:69","nodeType":"YulExpressionStatement","src":"50393:33:69"}]},"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"50289:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"50330:6:69","nodeType":"YulTypedName","src":"50330:6:69","type":""},{"name":"end","nativeSrc":"50338:3:69","nodeType":"YulTypedName","src":"50338:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"50346:5:69","nodeType":"YulTypedName","src":"50346:5:69","type":""}],"src":"50289:143:69"},{"body":{"nativeSrc":"50515:274:69","nodeType":"YulBlock","src":"50515:274:69","statements":[{"body":{"nativeSrc":"50561:83:69","nodeType":"YulBlock","src":"50561:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"50563:77:69","nodeType":"YulIdentifier","src":"50563:77:69"},"nativeSrc":"50563:79:69","nodeType":"YulFunctionCall","src":"50563:79:69"},"nativeSrc":"50563:79:69","nodeType":"YulExpressionStatement","src":"50563:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"50536:7:69","nodeType":"YulIdentifier","src":"50536:7:69"},{"name":"headStart","nativeSrc":"50545:9:69","nodeType":"YulIdentifier","src":"50545:9:69"}],"functionName":{"name":"sub","nativeSrc":"50532:3:69","nodeType":"YulIdentifier","src":"50532:3:69"},"nativeSrc":"50532:23:69","nodeType":"YulFunctionCall","src":"50532:23:69"},{"kind":"number","nativeSrc":"50557:2:69","nodeType":"YulLiteral","src":"50557:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"50528:3:69","nodeType":"YulIdentifier","src":"50528:3:69"},"nativeSrc":"50528:32:69","nodeType":"YulFunctionCall","src":"50528:32:69"},"nativeSrc":"50525:119:69","nodeType":"YulIf","src":"50525:119:69"},{"nativeSrc":"50654:128:69","nodeType":"YulBlock","src":"50654:128:69","statements":[{"nativeSrc":"50669:15:69","nodeType":"YulVariableDeclaration","src":"50669:15:69","value":{"kind":"number","nativeSrc":"50683:1:69","nodeType":"YulLiteral","src":"50683:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"50673:6:69","nodeType":"YulTypedName","src":"50673:6:69","type":""}]},{"nativeSrc":"50698:74:69","nodeType":"YulAssignment","src":"50698:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"50744:9:69","nodeType":"YulIdentifier","src":"50744:9:69"},{"name":"offset","nativeSrc":"50755:6:69","nodeType":"YulIdentifier","src":"50755:6:69"}],"functionName":{"name":"add","nativeSrc":"50740:3:69","nodeType":"YulIdentifier","src":"50740:3:69"},"nativeSrc":"50740:22:69","nodeType":"YulFunctionCall","src":"50740:22:69"},{"name":"dataEnd","nativeSrc":"50764:7:69","nodeType":"YulIdentifier","src":"50764:7:69"}],"functionName":{"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"50708:31:69","nodeType":"YulIdentifier","src":"50708:31:69"},"nativeSrc":"50708:64:69","nodeType":"YulFunctionCall","src":"50708:64:69"},"variableNames":[{"name":"value0","nativeSrc":"50698:6:69","nodeType":"YulIdentifier","src":"50698:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nativeSrc":"50438:351:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"50485:9:69","nodeType":"YulTypedName","src":"50485:9:69","type":""},{"name":"dataEnd","nativeSrc":"50496:7:69","nodeType":"YulTypedName","src":"50496:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"50508:6:69","nodeType":"YulTypedName","src":"50508:6:69","type":""}],"src":"50438:351:69"},{"body":{"nativeSrc":"50965:304:69","nodeType":"YulBlock","src":"50965:304:69","statements":[{"nativeSrc":"50975:26:69","nodeType":"YulAssignment","src":"50975:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"50987:9:69","nodeType":"YulIdentifier","src":"50987:9:69"},{"kind":"number","nativeSrc":"50998:2:69","nodeType":"YulLiteral","src":"50998:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"50983:3:69","nodeType":"YulIdentifier","src":"50983:3:69"},"nativeSrc":"50983:18:69","nodeType":"YulFunctionCall","src":"50983:18:69"},"variableNames":[{"name":"tail","nativeSrc":"50975:4:69","nodeType":"YulIdentifier","src":"50975:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"51071:6:69","nodeType":"YulIdentifier","src":"51071:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"51084:9:69","nodeType":"YulIdentifier","src":"51084:9:69"},{"kind":"number","nativeSrc":"51095:1:69","nodeType":"YulLiteral","src":"51095:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"51080:3:69","nodeType":"YulIdentifier","src":"51080:3:69"},"nativeSrc":"51080:17:69","nodeType":"YulFunctionCall","src":"51080:17:69"}],"functionName":{"name":"abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack","nativeSrc":"51011:59:69","nodeType":"YulIdentifier","src":"51011:59:69"},"nativeSrc":"51011:87:69","nodeType":"YulFunctionCall","src":"51011:87:69"},"nativeSrc":"51011:87:69","nodeType":"YulExpressionStatement","src":"51011:87:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"51152:6:69","nodeType":"YulIdentifier","src":"51152:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"51165:9:69","nodeType":"YulIdentifier","src":"51165:9:69"},{"kind":"number","nativeSrc":"51176:2:69","nodeType":"YulLiteral","src":"51176:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"51161:3:69","nodeType":"YulIdentifier","src":"51161:3:69"},"nativeSrc":"51161:18:69","nodeType":"YulFunctionCall","src":"51161:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"51108:43:69","nodeType":"YulIdentifier","src":"51108:43:69"},"nativeSrc":"51108:72:69","nodeType":"YulFunctionCall","src":"51108:72:69"},"nativeSrc":"51108:72:69","nodeType":"YulExpressionStatement","src":"51108:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"51234:6:69","nodeType":"YulIdentifier","src":"51234:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"51247:9:69","nodeType":"YulIdentifier","src":"51247:9:69"},{"kind":"number","nativeSrc":"51258:2:69","nodeType":"YulLiteral","src":"51258:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"51243:3:69","nodeType":"YulIdentifier","src":"51243:3:69"},"nativeSrc":"51243:18:69","nodeType":"YulFunctionCall","src":"51243:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"51190:43:69","nodeType":"YulIdentifier","src":"51190:43:69"},"nativeSrc":"51190:72:69","nodeType":"YulFunctionCall","src":"51190:72:69"},"nativeSrc":"51190:72:69","nodeType":"YulExpressionStatement","src":"51190:72:69"}]},"name":"abi_encode_tuple_t_contract$_VToken_$15506_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"50795:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"50921:9:69","nodeType":"YulTypedName","src":"50921:9:69","type":""},{"name":"value2","nativeSrc":"50933:6:69","nodeType":"YulTypedName","src":"50933:6:69","type":""},{"name":"value1","nativeSrc":"50941:6:69","nodeType":"YulTypedName","src":"50941:6:69","type":""},{"name":"value0","nativeSrc":"50949:6:69","nodeType":"YulTypedName","src":"50949:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"50960:4:69","nodeType":"YulTypedName","src":"50960:4:69","type":""}],"src":"50795:474:69"},{"body":{"nativeSrc":"51381:122:69","nodeType":"YulBlock","src":"51381:122:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"51403:6:69","nodeType":"YulIdentifier","src":"51403:6:69"},{"kind":"number","nativeSrc":"51411:1:69","nodeType":"YulLiteral","src":"51411:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"51399:3:69","nodeType":"YulIdentifier","src":"51399:3:69"},"nativeSrc":"51399:14:69","nodeType":"YulFunctionCall","src":"51399:14:69"},{"hexValue":"4f776e61626c6532537465703a2063616c6c6572206973206e6f742074686520","kind":"string","nativeSrc":"51415:34:69","nodeType":"YulLiteral","src":"51415:34:69","type":"","value":"Ownable2Step: caller is not the "}],"functionName":{"name":"mstore","nativeSrc":"51392:6:69","nodeType":"YulIdentifier","src":"51392:6:69"},"nativeSrc":"51392:58:69","nodeType":"YulFunctionCall","src":"51392:58:69"},"nativeSrc":"51392:58:69","nodeType":"YulExpressionStatement","src":"51392:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"51471:6:69","nodeType":"YulIdentifier","src":"51471:6:69"},{"kind":"number","nativeSrc":"51479:2:69","nodeType":"YulLiteral","src":"51479:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"51467:3:69","nodeType":"YulIdentifier","src":"51467:3:69"},"nativeSrc":"51467:15:69","nodeType":"YulFunctionCall","src":"51467:15:69"},{"hexValue":"6e6577206f776e6572","kind":"string","nativeSrc":"51484:11:69","nodeType":"YulLiteral","src":"51484:11:69","type":"","value":"new owner"}],"functionName":{"name":"mstore","nativeSrc":"51460:6:69","nodeType":"YulIdentifier","src":"51460:6:69"},"nativeSrc":"51460:36:69","nodeType":"YulFunctionCall","src":"51460:36:69"},"nativeSrc":"51460:36:69","nodeType":"YulExpressionStatement","src":"51460:36:69"}]},"name":"store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc","nativeSrc":"51275:228:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"51373:6:69","nodeType":"YulTypedName","src":"51373:6:69","type":""}],"src":"51275:228:69"},{"body":{"nativeSrc":"51655:220:69","nodeType":"YulBlock","src":"51655:220:69","statements":[{"nativeSrc":"51665:74:69","nodeType":"YulAssignment","src":"51665:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"51731:3:69","nodeType":"YulIdentifier","src":"51731:3:69"},{"kind":"number","nativeSrc":"51736:2:69","nodeType":"YulLiteral","src":"51736:2:69","type":"","value":"41"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"51672:58:69","nodeType":"YulIdentifier","src":"51672:58:69"},"nativeSrc":"51672:67:69","nodeType":"YulFunctionCall","src":"51672:67:69"},"variableNames":[{"name":"pos","nativeSrc":"51665:3:69","nodeType":"YulIdentifier","src":"51665:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"51837:3:69","nodeType":"YulIdentifier","src":"51837:3:69"}],"functionName":{"name":"store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc","nativeSrc":"51748:88:69","nodeType":"YulIdentifier","src":"51748:88:69"},"nativeSrc":"51748:93:69","nodeType":"YulFunctionCall","src":"51748:93:69"},"nativeSrc":"51748:93:69","nodeType":"YulExpressionStatement","src":"51748:93:69"},{"nativeSrc":"51850:19:69","nodeType":"YulAssignment","src":"51850:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"51861:3:69","nodeType":"YulIdentifier","src":"51861:3:69"},{"kind":"number","nativeSrc":"51866:2:69","nodeType":"YulLiteral","src":"51866:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"51857:3:69","nodeType":"YulIdentifier","src":"51857:3:69"},"nativeSrc":"51857:12:69","nodeType":"YulFunctionCall","src":"51857:12:69"},"variableNames":[{"name":"end","nativeSrc":"51850:3:69","nodeType":"YulIdentifier","src":"51850:3:69"}]}]},"name":"abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack","nativeSrc":"51509:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"51643:3:69","nodeType":"YulTypedName","src":"51643:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"51651:3:69","nodeType":"YulTypedName","src":"51651:3:69","type":""}],"src":"51509:366:69"},{"body":{"nativeSrc":"52052:248:69","nodeType":"YulBlock","src":"52052:248:69","statements":[{"nativeSrc":"52062:26:69","nodeType":"YulAssignment","src":"52062:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"52074:9:69","nodeType":"YulIdentifier","src":"52074:9:69"},{"kind":"number","nativeSrc":"52085:2:69","nodeType":"YulLiteral","src":"52085:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"52070:3:69","nodeType":"YulIdentifier","src":"52070:3:69"},"nativeSrc":"52070:18:69","nodeType":"YulFunctionCall","src":"52070:18:69"},"variableNames":[{"name":"tail","nativeSrc":"52062:4:69","nodeType":"YulIdentifier","src":"52062:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"52109:9:69","nodeType":"YulIdentifier","src":"52109:9:69"},{"kind":"number","nativeSrc":"52120:1:69","nodeType":"YulLiteral","src":"52120:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"52105:3:69","nodeType":"YulIdentifier","src":"52105:3:69"},"nativeSrc":"52105:17:69","nodeType":"YulFunctionCall","src":"52105:17:69"},{"arguments":[{"name":"tail","nativeSrc":"52128:4:69","nodeType":"YulIdentifier","src":"52128:4:69"},{"name":"headStart","nativeSrc":"52134:9:69","nodeType":"YulIdentifier","src":"52134:9:69"}],"functionName":{"name":"sub","nativeSrc":"52124:3:69","nodeType":"YulIdentifier","src":"52124:3:69"},"nativeSrc":"52124:20:69","nodeType":"YulFunctionCall","src":"52124:20:69"}],"functionName":{"name":"mstore","nativeSrc":"52098:6:69","nodeType":"YulIdentifier","src":"52098:6:69"},"nativeSrc":"52098:47:69","nodeType":"YulFunctionCall","src":"52098:47:69"},"nativeSrc":"52098:47:69","nodeType":"YulExpressionStatement","src":"52098:47:69"},{"nativeSrc":"52154:139:69","nodeType":"YulAssignment","src":"52154:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"52288:4:69","nodeType":"YulIdentifier","src":"52288:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack","nativeSrc":"52162:124:69","nodeType":"YulIdentifier","src":"52162:124:69"},"nativeSrc":"52162:131:69","nodeType":"YulFunctionCall","src":"52162:131:69"},"variableNames":[{"name":"tail","nativeSrc":"52154:4:69","nodeType":"YulIdentifier","src":"52154:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"51881:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"52032:9:69","nodeType":"YulTypedName","src":"52032:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"52047:4:69","nodeType":"YulTypedName","src":"52047:4:69","type":""}],"src":"51881:419:69"},{"body":{"nativeSrc":"52460:288:69","nodeType":"YulBlock","src":"52460:288:69","statements":[{"nativeSrc":"52470:26:69","nodeType":"YulAssignment","src":"52470:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"52482:9:69","nodeType":"YulIdentifier","src":"52482:9:69"},{"kind":"number","nativeSrc":"52493:2:69","nodeType":"YulLiteral","src":"52493:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"52478:3:69","nodeType":"YulIdentifier","src":"52478:3:69"},"nativeSrc":"52478:18:69","nodeType":"YulFunctionCall","src":"52478:18:69"},"variableNames":[{"name":"tail","nativeSrc":"52470:4:69","nodeType":"YulIdentifier","src":"52470:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"52550:6:69","nodeType":"YulIdentifier","src":"52550:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"52563:9:69","nodeType":"YulIdentifier","src":"52563:9:69"},{"kind":"number","nativeSrc":"52574:1:69","nodeType":"YulLiteral","src":"52574:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"52559:3:69","nodeType":"YulIdentifier","src":"52559:3:69"},"nativeSrc":"52559:17:69","nodeType":"YulFunctionCall","src":"52559:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"52506:43:69","nodeType":"YulIdentifier","src":"52506:43:69"},"nativeSrc":"52506:71:69","nodeType":"YulFunctionCall","src":"52506:71:69"},"nativeSrc":"52506:71:69","nodeType":"YulExpressionStatement","src":"52506:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"52631:6:69","nodeType":"YulIdentifier","src":"52631:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"52644:9:69","nodeType":"YulIdentifier","src":"52644:9:69"},{"kind":"number","nativeSrc":"52655:2:69","nodeType":"YulLiteral","src":"52655:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"52640:3:69","nodeType":"YulIdentifier","src":"52640:3:69"},"nativeSrc":"52640:18:69","nodeType":"YulFunctionCall","src":"52640:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"52587:43:69","nodeType":"YulIdentifier","src":"52587:43:69"},"nativeSrc":"52587:72:69","nodeType":"YulFunctionCall","src":"52587:72:69"},"nativeSrc":"52587:72:69","nodeType":"YulExpressionStatement","src":"52587:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"52713:6:69","nodeType":"YulIdentifier","src":"52713:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"52726:9:69","nodeType":"YulIdentifier","src":"52726:9:69"},{"kind":"number","nativeSrc":"52737:2:69","nodeType":"YulLiteral","src":"52737:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"52722:3:69","nodeType":"YulIdentifier","src":"52722:3:69"},"nativeSrc":"52722:18:69","nodeType":"YulFunctionCall","src":"52722:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"52669:43:69","nodeType":"YulIdentifier","src":"52669:43:69"},"nativeSrc":"52669:72:69","nodeType":"YulFunctionCall","src":"52669:72:69"},"nativeSrc":"52669:72:69","nodeType":"YulExpressionStatement","src":"52669:72:69"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nativeSrc":"52306:442:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"52416:9:69","nodeType":"YulTypedName","src":"52416:9:69","type":""},{"name":"value2","nativeSrc":"52428:6:69","nodeType":"YulTypedName","src":"52428:6:69","type":""},{"name":"value1","nativeSrc":"52436:6:69","nodeType":"YulTypedName","src":"52436:6:69","type":""},{"name":"value0","nativeSrc":"52444:6:69","nodeType":"YulTypedName","src":"52444:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"52455:4:69","nodeType":"YulTypedName","src":"52455:4:69","type":""}],"src":"52306:442:69"},{"body":{"nativeSrc":"52860:130:69","nodeType":"YulBlock","src":"52860:130:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"52882:6:69","nodeType":"YulIdentifier","src":"52882:6:69"},{"kind":"number","nativeSrc":"52890:1:69","nodeType":"YulLiteral","src":"52890:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"52878:3:69","nodeType":"YulIdentifier","src":"52878:3:69"},"nativeSrc":"52878:14:69","nodeType":"YulFunctionCall","src":"52878:14:69"},{"hexValue":"6c69717569646174696f6e20696e63656e746976652073686f756c6420626520","kind":"string","nativeSrc":"52894:34:69","nodeType":"YulLiteral","src":"52894:34:69","type":"","value":"liquidation incentive should be "}],"functionName":{"name":"mstore","nativeSrc":"52871:6:69","nodeType":"YulIdentifier","src":"52871:6:69"},"nativeSrc":"52871:58:69","nodeType":"YulFunctionCall","src":"52871:58:69"},"nativeSrc":"52871:58:69","nodeType":"YulExpressionStatement","src":"52871:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"52950:6:69","nodeType":"YulIdentifier","src":"52950:6:69"},{"kind":"number","nativeSrc":"52958:2:69","nodeType":"YulLiteral","src":"52958:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"52946:3:69","nodeType":"YulIdentifier","src":"52946:3:69"},"nativeSrc":"52946:15:69","nodeType":"YulFunctionCall","src":"52946:15:69"},{"hexValue":"67726561746572207468616e2031653138","kind":"string","nativeSrc":"52963:19:69","nodeType":"YulLiteral","src":"52963:19:69","type":"","value":"greater than 1e18"}],"functionName":{"name":"mstore","nativeSrc":"52939:6:69","nodeType":"YulIdentifier","src":"52939:6:69"},"nativeSrc":"52939:44:69","nodeType":"YulFunctionCall","src":"52939:44:69"},"nativeSrc":"52939:44:69","nodeType":"YulExpressionStatement","src":"52939:44:69"}]},"name":"store_literal_in_memory_c058637d38cae682b1632861e7627b9b2faf58bda046e427ad8f294be17a6198","nativeSrc":"52754:236:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"52852:6:69","nodeType":"YulTypedName","src":"52852:6:69","type":""}],"src":"52754:236:69"},{"body":{"nativeSrc":"53142:220:69","nodeType":"YulBlock","src":"53142:220:69","statements":[{"nativeSrc":"53152:74:69","nodeType":"YulAssignment","src":"53152:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"53218:3:69","nodeType":"YulIdentifier","src":"53218:3:69"},{"kind":"number","nativeSrc":"53223:2:69","nodeType":"YulLiteral","src":"53223:2:69","type":"","value":"49"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"53159:58:69","nodeType":"YulIdentifier","src":"53159:58:69"},"nativeSrc":"53159:67:69","nodeType":"YulFunctionCall","src":"53159:67:69"},"variableNames":[{"name":"pos","nativeSrc":"53152:3:69","nodeType":"YulIdentifier","src":"53152:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"53324:3:69","nodeType":"YulIdentifier","src":"53324:3:69"}],"functionName":{"name":"store_literal_in_memory_c058637d38cae682b1632861e7627b9b2faf58bda046e427ad8f294be17a6198","nativeSrc":"53235:88:69","nodeType":"YulIdentifier","src":"53235:88:69"},"nativeSrc":"53235:93:69","nodeType":"YulFunctionCall","src":"53235:93:69"},"nativeSrc":"53235:93:69","nodeType":"YulExpressionStatement","src":"53235:93:69"},{"nativeSrc":"53337:19:69","nodeType":"YulAssignment","src":"53337:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"53348:3:69","nodeType":"YulIdentifier","src":"53348:3:69"},{"kind":"number","nativeSrc":"53353:2:69","nodeType":"YulLiteral","src":"53353:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"53344:3:69","nodeType":"YulIdentifier","src":"53344:3:69"},"nativeSrc":"53344:12:69","nodeType":"YulFunctionCall","src":"53344:12:69"},"variableNames":[{"name":"end","nativeSrc":"53337:3:69","nodeType":"YulIdentifier","src":"53337:3:69"}]}]},"name":"abi_encode_t_stringliteral_c058637d38cae682b1632861e7627b9b2faf58bda046e427ad8f294be17a6198_to_t_string_memory_ptr_fromStack","nativeSrc":"52996:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"53130:3:69","nodeType":"YulTypedName","src":"53130:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"53138:3:69","nodeType":"YulTypedName","src":"53138:3:69","type":""}],"src":"52996:366:69"},{"body":{"nativeSrc":"53539:248:69","nodeType":"YulBlock","src":"53539:248:69","statements":[{"nativeSrc":"53549:26:69","nodeType":"YulAssignment","src":"53549:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"53561:9:69","nodeType":"YulIdentifier","src":"53561:9:69"},{"kind":"number","nativeSrc":"53572:2:69","nodeType":"YulLiteral","src":"53572:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"53557:3:69","nodeType":"YulIdentifier","src":"53557:3:69"},"nativeSrc":"53557:18:69","nodeType":"YulFunctionCall","src":"53557:18:69"},"variableNames":[{"name":"tail","nativeSrc":"53549:4:69","nodeType":"YulIdentifier","src":"53549:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"53596:9:69","nodeType":"YulIdentifier","src":"53596:9:69"},{"kind":"number","nativeSrc":"53607:1:69","nodeType":"YulLiteral","src":"53607:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"53592:3:69","nodeType":"YulIdentifier","src":"53592:3:69"},"nativeSrc":"53592:17:69","nodeType":"YulFunctionCall","src":"53592:17:69"},{"arguments":[{"name":"tail","nativeSrc":"53615:4:69","nodeType":"YulIdentifier","src":"53615:4:69"},{"name":"headStart","nativeSrc":"53621:9:69","nodeType":"YulIdentifier","src":"53621:9:69"}],"functionName":{"name":"sub","nativeSrc":"53611:3:69","nodeType":"YulIdentifier","src":"53611:3:69"},"nativeSrc":"53611:20:69","nodeType":"YulFunctionCall","src":"53611:20:69"}],"functionName":{"name":"mstore","nativeSrc":"53585:6:69","nodeType":"YulIdentifier","src":"53585:6:69"},"nativeSrc":"53585:47:69","nodeType":"YulFunctionCall","src":"53585:47:69"},"nativeSrc":"53585:47:69","nodeType":"YulExpressionStatement","src":"53585:47:69"},{"nativeSrc":"53641:139:69","nodeType":"YulAssignment","src":"53641:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"53775:4:69","nodeType":"YulIdentifier","src":"53775:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_c058637d38cae682b1632861e7627b9b2faf58bda046e427ad8f294be17a6198_to_t_string_memory_ptr_fromStack","nativeSrc":"53649:124:69","nodeType":"YulIdentifier","src":"53649:124:69"},"nativeSrc":"53649:131:69","nodeType":"YulFunctionCall","src":"53649:131:69"},"variableNames":[{"name":"tail","nativeSrc":"53641:4:69","nodeType":"YulIdentifier","src":"53641:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_c058637d38cae682b1632861e7627b9b2faf58bda046e427ad8f294be17a6198__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"53368:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"53519:9:69","nodeType":"YulTypedName","src":"53519:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"53534:4:69","nodeType":"YulTypedName","src":"53534:4:69","type":""}],"src":"53368:419:69"},{"body":{"nativeSrc":"53836:190:69","nodeType":"YulBlock","src":"53836:190:69","statements":[{"nativeSrc":"53846:33:69","nodeType":"YulAssignment","src":"53846:33:69","value":{"arguments":[{"name":"value","nativeSrc":"53873:5:69","nodeType":"YulIdentifier","src":"53873:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"53855:17:69","nodeType":"YulIdentifier","src":"53855:17:69"},"nativeSrc":"53855:24:69","nodeType":"YulFunctionCall","src":"53855:24:69"},"variableNames":[{"name":"value","nativeSrc":"53846:5:69","nodeType":"YulIdentifier","src":"53846:5:69"}]},{"body":{"nativeSrc":"53969:22:69","nodeType":"YulBlock","src":"53969:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"53971:16:69","nodeType":"YulIdentifier","src":"53971:16:69"},"nativeSrc":"53971:18:69","nodeType":"YulFunctionCall","src":"53971:18:69"},"nativeSrc":"53971:18:69","nodeType":"YulExpressionStatement","src":"53971:18:69"}]},"condition":{"arguments":[{"name":"value","nativeSrc":"53894:5:69","nodeType":"YulIdentifier","src":"53894:5:69"},{"kind":"number","nativeSrc":"53901:66:69","nodeType":"YulLiteral","src":"53901:66:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nativeSrc":"53891:2:69","nodeType":"YulIdentifier","src":"53891:2:69"},"nativeSrc":"53891:77:69","nodeType":"YulFunctionCall","src":"53891:77:69"},"nativeSrc":"53888:103:69","nodeType":"YulIf","src":"53888:103:69"},{"nativeSrc":"54000:20:69","nodeType":"YulAssignment","src":"54000:20:69","value":{"arguments":[{"name":"value","nativeSrc":"54011:5:69","nodeType":"YulIdentifier","src":"54011:5:69"},{"kind":"number","nativeSrc":"54018:1:69","nodeType":"YulLiteral","src":"54018:1:69","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"54007:3:69","nodeType":"YulIdentifier","src":"54007:3:69"},"nativeSrc":"54007:13:69","nodeType":"YulFunctionCall","src":"54007:13:69"},"variableNames":[{"name":"ret","nativeSrc":"54000:3:69","nodeType":"YulIdentifier","src":"54000:3:69"}]}]},"name":"increment_t_uint256","nativeSrc":"53793:233:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"53822:5:69","nodeType":"YulTypedName","src":"53822:5:69","type":""}],"returnVariables":[{"name":"ret","nativeSrc":"53832:3:69","nodeType":"YulTypedName","src":"53832:3:69","type":""}],"src":"53793:233:69"},{"body":{"nativeSrc":"54158:206:69","nodeType":"YulBlock","src":"54158:206:69","statements":[{"nativeSrc":"54168:26:69","nodeType":"YulAssignment","src":"54168:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"54180:9:69","nodeType":"YulIdentifier","src":"54180:9:69"},{"kind":"number","nativeSrc":"54191:2:69","nodeType":"YulLiteral","src":"54191:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"54176:3:69","nodeType":"YulIdentifier","src":"54176:3:69"},"nativeSrc":"54176:18:69","nodeType":"YulFunctionCall","src":"54176:18:69"},"variableNames":[{"name":"tail","nativeSrc":"54168:4:69","nodeType":"YulIdentifier","src":"54168:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"54248:6:69","nodeType":"YulIdentifier","src":"54248:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"54261:9:69","nodeType":"YulIdentifier","src":"54261:9:69"},{"kind":"number","nativeSrc":"54272:1:69","nodeType":"YulLiteral","src":"54272:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"54257:3:69","nodeType":"YulIdentifier","src":"54257:3:69"},"nativeSrc":"54257:17:69","nodeType":"YulFunctionCall","src":"54257:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"54204:43:69","nodeType":"YulIdentifier","src":"54204:43:69"},"nativeSrc":"54204:71:69","nodeType":"YulFunctionCall","src":"54204:71:69"},"nativeSrc":"54204:71:69","nodeType":"YulExpressionStatement","src":"54204:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"54329:6:69","nodeType":"YulIdentifier","src":"54329:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"54342:9:69","nodeType":"YulIdentifier","src":"54342:9:69"},{"kind":"number","nativeSrc":"54353:2:69","nodeType":"YulLiteral","src":"54353:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"54338:3:69","nodeType":"YulIdentifier","src":"54338:3:69"},"nativeSrc":"54338:18:69","nodeType":"YulFunctionCall","src":"54338:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"54285:43:69","nodeType":"YulIdentifier","src":"54285:43:69"},"nativeSrc":"54285:72:69","nodeType":"YulFunctionCall","src":"54285:72:69"},"nativeSrc":"54285:72:69","nodeType":"YulExpressionStatement","src":"54285:72:69"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nativeSrc":"54032:332:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"54122:9:69","nodeType":"YulTypedName","src":"54122:9:69","type":""},{"name":"value1","nativeSrc":"54134:6:69","nodeType":"YulTypedName","src":"54134:6:69","type":""},{"name":"value0","nativeSrc":"54142:6:69","nodeType":"YulTypedName","src":"54142:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"54153:4:69","nodeType":"YulTypedName","src":"54153:4:69","type":""}],"src":"54032:332:69"},{"body":{"nativeSrc":"54528:238:69","nodeType":"YulBlock","src":"54528:238:69","statements":[{"nativeSrc":"54538:26:69","nodeType":"YulAssignment","src":"54538:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"54550:9:69","nodeType":"YulIdentifier","src":"54550:9:69"},{"kind":"number","nativeSrc":"54561:2:69","nodeType":"YulLiteral","src":"54561:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"54546:3:69","nodeType":"YulIdentifier","src":"54546:3:69"},"nativeSrc":"54546:18:69","nodeType":"YulFunctionCall","src":"54546:18:69"},"variableNames":[{"name":"tail","nativeSrc":"54538:4:69","nodeType":"YulIdentifier","src":"54538:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"54634:6:69","nodeType":"YulIdentifier","src":"54634:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"54647:9:69","nodeType":"YulIdentifier","src":"54647:9:69"},{"kind":"number","nativeSrc":"54658:1:69","nodeType":"YulLiteral","src":"54658:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"54643:3:69","nodeType":"YulIdentifier","src":"54643:3:69"},"nativeSrc":"54643:17:69","nodeType":"YulFunctionCall","src":"54643:17:69"}],"functionName":{"name":"abi_encode_t_contract$_IPrime_$16613_to_t_address_fromStack","nativeSrc":"54574:59:69","nodeType":"YulIdentifier","src":"54574:59:69"},"nativeSrc":"54574:87:69","nodeType":"YulFunctionCall","src":"54574:87:69"},"nativeSrc":"54574:87:69","nodeType":"YulExpressionStatement","src":"54574:87:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"54731:6:69","nodeType":"YulIdentifier","src":"54731:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"54744:9:69","nodeType":"YulIdentifier","src":"54744:9:69"},{"kind":"number","nativeSrc":"54755:2:69","nodeType":"YulLiteral","src":"54755:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"54740:3:69","nodeType":"YulIdentifier","src":"54740:3:69"},"nativeSrc":"54740:18:69","nodeType":"YulFunctionCall","src":"54740:18:69"}],"functionName":{"name":"abi_encode_t_contract$_IPrime_$16613_to_t_address_fromStack","nativeSrc":"54671:59:69","nodeType":"YulIdentifier","src":"54671:59:69"},"nativeSrc":"54671:88:69","nodeType":"YulFunctionCall","src":"54671:88:69"},"nativeSrc":"54671:88:69","nodeType":"YulExpressionStatement","src":"54671:88:69"}]},"name":"abi_encode_tuple_t_contract$_IPrime_$16613_t_contract$_IPrime_$16613__to_t_address_t_address__fromStack_reversed","nativeSrc":"54370:396:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"54492:9:69","nodeType":"YulTypedName","src":"54492:9:69","type":""},{"name":"value1","nativeSrc":"54504:6:69","nodeType":"YulTypedName","src":"54504:6:69","type":""},{"name":"value0","nativeSrc":"54512:6:69","nodeType":"YulTypedName","src":"54512:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"54523:4:69","nodeType":"YulTypedName","src":"54523:4:69","type":""}],"src":"54370:396:69"},{"body":{"nativeSrc":"54832:77:69","nodeType":"YulBlock","src":"54832:77:69","statements":[{"nativeSrc":"54842:22:69","nodeType":"YulAssignment","src":"54842:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"54857:6:69","nodeType":"YulIdentifier","src":"54857:6:69"}],"functionName":{"name":"mload","nativeSrc":"54851:5:69","nodeType":"YulIdentifier","src":"54851:5:69"},"nativeSrc":"54851:13:69","nodeType":"YulFunctionCall","src":"54851:13:69"},"variableNames":[{"name":"value","nativeSrc":"54842:5:69","nodeType":"YulIdentifier","src":"54842:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"54897:5:69","nodeType":"YulIdentifier","src":"54897:5:69"}],"functionName":{"name":"validator_revert_t_bool","nativeSrc":"54873:23:69","nodeType":"YulIdentifier","src":"54873:23:69"},"nativeSrc":"54873:30:69","nodeType":"YulFunctionCall","src":"54873:30:69"},"nativeSrc":"54873:30:69","nodeType":"YulExpressionStatement","src":"54873:30:69"}]},"name":"abi_decode_t_bool_fromMemory","nativeSrc":"54772:137:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"54810:6:69","nodeType":"YulTypedName","src":"54810:6:69","type":""},{"name":"end","nativeSrc":"54818:3:69","nodeType":"YulTypedName","src":"54818:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"54826:5:69","nodeType":"YulTypedName","src":"54826:5:69","type":""}],"src":"54772:137:69"},{"body":{"nativeSrc":"54989:271:69","nodeType":"YulBlock","src":"54989:271:69","statements":[{"body":{"nativeSrc":"55035:83:69","nodeType":"YulBlock","src":"55035:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"55037:77:69","nodeType":"YulIdentifier","src":"55037:77:69"},"nativeSrc":"55037:79:69","nodeType":"YulFunctionCall","src":"55037:79:69"},"nativeSrc":"55037:79:69","nodeType":"YulExpressionStatement","src":"55037:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"55010:7:69","nodeType":"YulIdentifier","src":"55010:7:69"},{"name":"headStart","nativeSrc":"55019:9:69","nodeType":"YulIdentifier","src":"55019:9:69"}],"functionName":{"name":"sub","nativeSrc":"55006:3:69","nodeType":"YulIdentifier","src":"55006:3:69"},"nativeSrc":"55006:23:69","nodeType":"YulFunctionCall","src":"55006:23:69"},{"kind":"number","nativeSrc":"55031:2:69","nodeType":"YulLiteral","src":"55031:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"55002:3:69","nodeType":"YulIdentifier","src":"55002:3:69"},"nativeSrc":"55002:32:69","nodeType":"YulFunctionCall","src":"55002:32:69"},"nativeSrc":"54999:119:69","nodeType":"YulIf","src":"54999:119:69"},{"nativeSrc":"55128:125:69","nodeType":"YulBlock","src":"55128:125:69","statements":[{"nativeSrc":"55143:15:69","nodeType":"YulVariableDeclaration","src":"55143:15:69","value":{"kind":"number","nativeSrc":"55157:1:69","nodeType":"YulLiteral","src":"55157:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"55147:6:69","nodeType":"YulTypedName","src":"55147:6:69","type":""}]},{"nativeSrc":"55172:71:69","nodeType":"YulAssignment","src":"55172:71:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"55215:9:69","nodeType":"YulIdentifier","src":"55215:9:69"},{"name":"offset","nativeSrc":"55226:6:69","nodeType":"YulIdentifier","src":"55226:6:69"}],"functionName":{"name":"add","nativeSrc":"55211:3:69","nodeType":"YulIdentifier","src":"55211:3:69"},"nativeSrc":"55211:22:69","nodeType":"YulFunctionCall","src":"55211:22:69"},{"name":"dataEnd","nativeSrc":"55235:7:69","nodeType":"YulIdentifier","src":"55235:7:69"}],"functionName":{"name":"abi_decode_t_bool_fromMemory","nativeSrc":"55182:28:69","nodeType":"YulIdentifier","src":"55182:28:69"},"nativeSrc":"55182:61:69","nodeType":"YulFunctionCall","src":"55182:61:69"},"variableNames":[{"name":"value0","nativeSrc":"55172:6:69","nodeType":"YulIdentifier","src":"55172:6:69"}]}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nativeSrc":"54915:345:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"54959:9:69","nodeType":"YulTypedName","src":"54959:9:69","type":""},{"name":"dataEnd","nativeSrc":"54970:7:69","nodeType":"YulTypedName","src":"54970:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"54982:6:69","nodeType":"YulTypedName","src":"54982:6:69","type":""}],"src":"54915:345:69"},{"body":{"nativeSrc":"55372:71:69","nodeType":"YulBlock","src":"55372:71:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"55394:6:69","nodeType":"YulIdentifier","src":"55394:6:69"},{"kind":"number","nativeSrc":"55402:1:69","nodeType":"YulLiteral","src":"55402:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"55390:3:69","nodeType":"YulIdentifier","src":"55390:3:69"},"nativeSrc":"55390:14:69","nodeType":"YulFunctionCall","src":"55390:14:69"},{"hexValue":"436f6d7074726f6c6c65723a20496e76616c69642076546f6b656e","kind":"string","nativeSrc":"55406:29:69","nodeType":"YulLiteral","src":"55406:29:69","type":"","value":"Comptroller: Invalid vToken"}],"functionName":{"name":"mstore","nativeSrc":"55383:6:69","nodeType":"YulIdentifier","src":"55383:6:69"},"nativeSrc":"55383:53:69","nodeType":"YulFunctionCall","src":"55383:53:69"},"nativeSrc":"55383:53:69","nodeType":"YulExpressionStatement","src":"55383:53:69"}]},"name":"store_literal_in_memory_7cbca09684e568d28239275bedb5f9d8ede90fb19ba1a42a2dd98c07e53733e5","nativeSrc":"55266:177:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"55364:6:69","nodeType":"YulTypedName","src":"55364:6:69","type":""}],"src":"55266:177:69"},{"body":{"nativeSrc":"55595:220:69","nodeType":"YulBlock","src":"55595:220:69","statements":[{"nativeSrc":"55605:74:69","nodeType":"YulAssignment","src":"55605:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"55671:3:69","nodeType":"YulIdentifier","src":"55671:3:69"},{"kind":"number","nativeSrc":"55676:2:69","nodeType":"YulLiteral","src":"55676:2:69","type":"","value":"27"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"55612:58:69","nodeType":"YulIdentifier","src":"55612:58:69"},"nativeSrc":"55612:67:69","nodeType":"YulFunctionCall","src":"55612:67:69"},"variableNames":[{"name":"pos","nativeSrc":"55605:3:69","nodeType":"YulIdentifier","src":"55605:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"55777:3:69","nodeType":"YulIdentifier","src":"55777:3:69"}],"functionName":{"name":"store_literal_in_memory_7cbca09684e568d28239275bedb5f9d8ede90fb19ba1a42a2dd98c07e53733e5","nativeSrc":"55688:88:69","nodeType":"YulIdentifier","src":"55688:88:69"},"nativeSrc":"55688:93:69","nodeType":"YulFunctionCall","src":"55688:93:69"},"nativeSrc":"55688:93:69","nodeType":"YulExpressionStatement","src":"55688:93:69"},{"nativeSrc":"55790:19:69","nodeType":"YulAssignment","src":"55790:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"55801:3:69","nodeType":"YulIdentifier","src":"55801:3:69"},{"kind":"number","nativeSrc":"55806:2:69","nodeType":"YulLiteral","src":"55806:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"55797:3:69","nodeType":"YulIdentifier","src":"55797:3:69"},"nativeSrc":"55797:12:69","nodeType":"YulFunctionCall","src":"55797:12:69"},"variableNames":[{"name":"end","nativeSrc":"55790:3:69","nodeType":"YulIdentifier","src":"55790:3:69"}]}]},"name":"abi_encode_t_stringliteral_7cbca09684e568d28239275bedb5f9d8ede90fb19ba1a42a2dd98c07e53733e5_to_t_string_memory_ptr_fromStack","nativeSrc":"55449:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"55583:3:69","nodeType":"YulTypedName","src":"55583:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"55591:3:69","nodeType":"YulTypedName","src":"55591:3:69","type":""}],"src":"55449:366:69"},{"body":{"nativeSrc":"55992:248:69","nodeType":"YulBlock","src":"55992:248:69","statements":[{"nativeSrc":"56002:26:69","nodeType":"YulAssignment","src":"56002:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"56014:9:69","nodeType":"YulIdentifier","src":"56014:9:69"},{"kind":"number","nativeSrc":"56025:2:69","nodeType":"YulLiteral","src":"56025:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"56010:3:69","nodeType":"YulIdentifier","src":"56010:3:69"},"nativeSrc":"56010:18:69","nodeType":"YulFunctionCall","src":"56010:18:69"},"variableNames":[{"name":"tail","nativeSrc":"56002:4:69","nodeType":"YulIdentifier","src":"56002:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"56049:9:69","nodeType":"YulIdentifier","src":"56049:9:69"},{"kind":"number","nativeSrc":"56060:1:69","nodeType":"YulLiteral","src":"56060:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"56045:3:69","nodeType":"YulIdentifier","src":"56045:3:69"},"nativeSrc":"56045:17:69","nodeType":"YulFunctionCall","src":"56045:17:69"},{"arguments":[{"name":"tail","nativeSrc":"56068:4:69","nodeType":"YulIdentifier","src":"56068:4:69"},{"name":"headStart","nativeSrc":"56074:9:69","nodeType":"YulIdentifier","src":"56074:9:69"}],"functionName":{"name":"sub","nativeSrc":"56064:3:69","nodeType":"YulIdentifier","src":"56064:3:69"},"nativeSrc":"56064:20:69","nodeType":"YulFunctionCall","src":"56064:20:69"}],"functionName":{"name":"mstore","nativeSrc":"56038:6:69","nodeType":"YulIdentifier","src":"56038:6:69"},"nativeSrc":"56038:47:69","nodeType":"YulFunctionCall","src":"56038:47:69"},"nativeSrc":"56038:47:69","nodeType":"YulExpressionStatement","src":"56038:47:69"},{"nativeSrc":"56094:139:69","nodeType":"YulAssignment","src":"56094:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"56228:4:69","nodeType":"YulIdentifier","src":"56228:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_7cbca09684e568d28239275bedb5f9d8ede90fb19ba1a42a2dd98c07e53733e5_to_t_string_memory_ptr_fromStack","nativeSrc":"56102:124:69","nodeType":"YulIdentifier","src":"56102:124:69"},"nativeSrc":"56102:131:69","nodeType":"YulFunctionCall","src":"56102:131:69"},"variableNames":[{"name":"tail","nativeSrc":"56094:4:69","nodeType":"YulIdentifier","src":"56094:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_7cbca09684e568d28239275bedb5f9d8ede90fb19ba1a42a2dd98c07e53733e5__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"55821:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"55972:9:69","nodeType":"YulTypedName","src":"55972:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"55987:4:69","nodeType":"YulTypedName","src":"55987:4:69","type":""}],"src":"55821:419:69"},{"body":{"nativeSrc":"56352:69:69","nodeType":"YulBlock","src":"56352:69:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"56374:6:69","nodeType":"YulIdentifier","src":"56374:6:69"},{"kind":"number","nativeSrc":"56382:1:69","nodeType":"YulLiteral","src":"56382:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"56370:3:69","nodeType":"YulIdentifier","src":"56370:3:69"},"nativeSrc":"56370:14:69","nodeType":"YulFunctionCall","src":"56370:14:69"},{"hexValue":"696e76616c6964206e756d626572206f66206d61726b657473","kind":"string","nativeSrc":"56386:27:69","nodeType":"YulLiteral","src":"56386:27:69","type":"","value":"invalid number of markets"}],"functionName":{"name":"mstore","nativeSrc":"56363:6:69","nodeType":"YulIdentifier","src":"56363:6:69"},"nativeSrc":"56363:51:69","nodeType":"YulFunctionCall","src":"56363:51:69"},"nativeSrc":"56363:51:69","nodeType":"YulExpressionStatement","src":"56363:51:69"}]},"name":"store_literal_in_memory_f260407ad5875ca6920015bd8c4244b00453e8856f69e363e0217c410a4ba389","nativeSrc":"56246:175:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"56344:6:69","nodeType":"YulTypedName","src":"56344:6:69","type":""}],"src":"56246:175:69"},{"body":{"nativeSrc":"56573:220:69","nodeType":"YulBlock","src":"56573:220:69","statements":[{"nativeSrc":"56583:74:69","nodeType":"YulAssignment","src":"56583:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"56649:3:69","nodeType":"YulIdentifier","src":"56649:3:69"},{"kind":"number","nativeSrc":"56654:2:69","nodeType":"YulLiteral","src":"56654:2:69","type":"","value":"25"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"56590:58:69","nodeType":"YulIdentifier","src":"56590:58:69"},"nativeSrc":"56590:67:69","nodeType":"YulFunctionCall","src":"56590:67:69"},"variableNames":[{"name":"pos","nativeSrc":"56583:3:69","nodeType":"YulIdentifier","src":"56583:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"56755:3:69","nodeType":"YulIdentifier","src":"56755:3:69"}],"functionName":{"name":"store_literal_in_memory_f260407ad5875ca6920015bd8c4244b00453e8856f69e363e0217c410a4ba389","nativeSrc":"56666:88:69","nodeType":"YulIdentifier","src":"56666:88:69"},"nativeSrc":"56666:93:69","nodeType":"YulFunctionCall","src":"56666:93:69"},"nativeSrc":"56666:93:69","nodeType":"YulExpressionStatement","src":"56666:93:69"},{"nativeSrc":"56768:19:69","nodeType":"YulAssignment","src":"56768:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"56779:3:69","nodeType":"YulIdentifier","src":"56779:3:69"},{"kind":"number","nativeSrc":"56784:2:69","nodeType":"YulLiteral","src":"56784:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"56775:3:69","nodeType":"YulIdentifier","src":"56775:3:69"},"nativeSrc":"56775:12:69","nodeType":"YulFunctionCall","src":"56775:12:69"},"variableNames":[{"name":"end","nativeSrc":"56768:3:69","nodeType":"YulIdentifier","src":"56768:3:69"}]}]},"name":"abi_encode_t_stringliteral_f260407ad5875ca6920015bd8c4244b00453e8856f69e363e0217c410a4ba389_to_t_string_memory_ptr_fromStack","nativeSrc":"56427:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"56561:3:69","nodeType":"YulTypedName","src":"56561:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"56569:3:69","nodeType":"YulTypedName","src":"56569:3:69","type":""}],"src":"56427:366:69"},{"body":{"nativeSrc":"56970:248:69","nodeType":"YulBlock","src":"56970:248:69","statements":[{"nativeSrc":"56980:26:69","nodeType":"YulAssignment","src":"56980:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"56992:9:69","nodeType":"YulIdentifier","src":"56992:9:69"},{"kind":"number","nativeSrc":"57003:2:69","nodeType":"YulLiteral","src":"57003:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"56988:3:69","nodeType":"YulIdentifier","src":"56988:3:69"},"nativeSrc":"56988:18:69","nodeType":"YulFunctionCall","src":"56988:18:69"},"variableNames":[{"name":"tail","nativeSrc":"56980:4:69","nodeType":"YulIdentifier","src":"56980:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"57027:9:69","nodeType":"YulIdentifier","src":"57027:9:69"},{"kind":"number","nativeSrc":"57038:1:69","nodeType":"YulLiteral","src":"57038:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"57023:3:69","nodeType":"YulIdentifier","src":"57023:3:69"},"nativeSrc":"57023:17:69","nodeType":"YulFunctionCall","src":"57023:17:69"},{"arguments":[{"name":"tail","nativeSrc":"57046:4:69","nodeType":"YulIdentifier","src":"57046:4:69"},{"name":"headStart","nativeSrc":"57052:9:69","nodeType":"YulIdentifier","src":"57052:9:69"}],"functionName":{"name":"sub","nativeSrc":"57042:3:69","nodeType":"YulIdentifier","src":"57042:3:69"},"nativeSrc":"57042:20:69","nodeType":"YulFunctionCall","src":"57042:20:69"}],"functionName":{"name":"mstore","nativeSrc":"57016:6:69","nodeType":"YulIdentifier","src":"57016:6:69"},"nativeSrc":"57016:47:69","nodeType":"YulFunctionCall","src":"57016:47:69"},"nativeSrc":"57016:47:69","nodeType":"YulExpressionStatement","src":"57016:47:69"},{"nativeSrc":"57072:139:69","nodeType":"YulAssignment","src":"57072:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"57206:4:69","nodeType":"YulIdentifier","src":"57206:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_f260407ad5875ca6920015bd8c4244b00453e8856f69e363e0217c410a4ba389_to_t_string_memory_ptr_fromStack","nativeSrc":"57080:124:69","nodeType":"YulIdentifier","src":"57080:124:69"},"nativeSrc":"57080:131:69","nodeType":"YulFunctionCall","src":"57080:131:69"},"variableNames":[{"name":"tail","nativeSrc":"57072:4:69","nodeType":"YulIdentifier","src":"57072:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_f260407ad5875ca6920015bd8c4244b00453e8856f69e363e0217c410a4ba389__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"56799:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"56950:9:69","nodeType":"YulTypedName","src":"56950:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"56965:4:69","nodeType":"YulTypedName","src":"56965:4:69","type":""}],"src":"56799:419:69"},{"body":{"nativeSrc":"57330:127:69","nodeType":"YulBlock","src":"57330:127:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"57352:6:69","nodeType":"YulIdentifier","src":"57352:6:69"},{"kind":"number","nativeSrc":"57360:1:69","nodeType":"YulLiteral","src":"57360:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"57348:3:69","nodeType":"YulIdentifier","src":"57348:3:69"},"nativeSrc":"57348:14:69","nodeType":"YulFunctionCall","src":"57348:14:69"},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320616c726561","kind":"string","nativeSrc":"57364:34:69","nodeType":"YulLiteral","src":"57364:34:69","type":"","value":"Initializable: contract is alrea"}],"functionName":{"name":"mstore","nativeSrc":"57341:6:69","nodeType":"YulIdentifier","src":"57341:6:69"},"nativeSrc":"57341:58:69","nodeType":"YulFunctionCall","src":"57341:58:69"},"nativeSrc":"57341:58:69","nodeType":"YulExpressionStatement","src":"57341:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"57420:6:69","nodeType":"YulIdentifier","src":"57420:6:69"},{"kind":"number","nativeSrc":"57428:2:69","nodeType":"YulLiteral","src":"57428:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"57416:3:69","nodeType":"YulIdentifier","src":"57416:3:69"},"nativeSrc":"57416:15:69","nodeType":"YulFunctionCall","src":"57416:15:69"},{"hexValue":"647920696e697469616c697a6564","kind":"string","nativeSrc":"57433:16:69","nodeType":"YulLiteral","src":"57433:16:69","type":"","value":"dy initialized"}],"functionName":{"name":"mstore","nativeSrc":"57409:6:69","nodeType":"YulIdentifier","src":"57409:6:69"},"nativeSrc":"57409:41:69","nodeType":"YulFunctionCall","src":"57409:41:69"},"nativeSrc":"57409:41:69","nodeType":"YulExpressionStatement","src":"57409:41:69"}]},"name":"store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","nativeSrc":"57224:233:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"57322:6:69","nodeType":"YulTypedName","src":"57322:6:69","type":""}],"src":"57224:233:69"},{"body":{"nativeSrc":"57609:220:69","nodeType":"YulBlock","src":"57609:220:69","statements":[{"nativeSrc":"57619:74:69","nodeType":"YulAssignment","src":"57619:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"57685:3:69","nodeType":"YulIdentifier","src":"57685:3:69"},{"kind":"number","nativeSrc":"57690:2:69","nodeType":"YulLiteral","src":"57690:2:69","type":"","value":"46"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"57626:58:69","nodeType":"YulIdentifier","src":"57626:58:69"},"nativeSrc":"57626:67:69","nodeType":"YulFunctionCall","src":"57626:67:69"},"variableNames":[{"name":"pos","nativeSrc":"57619:3:69","nodeType":"YulIdentifier","src":"57619:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"57791:3:69","nodeType":"YulIdentifier","src":"57791:3:69"}],"functionName":{"name":"store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","nativeSrc":"57702:88:69","nodeType":"YulIdentifier","src":"57702:88:69"},"nativeSrc":"57702:93:69","nodeType":"YulFunctionCall","src":"57702:93:69"},"nativeSrc":"57702:93:69","nodeType":"YulExpressionStatement","src":"57702:93:69"},{"nativeSrc":"57804:19:69","nodeType":"YulAssignment","src":"57804:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"57815:3:69","nodeType":"YulIdentifier","src":"57815:3:69"},{"kind":"number","nativeSrc":"57820:2:69","nodeType":"YulLiteral","src":"57820:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"57811:3:69","nodeType":"YulIdentifier","src":"57811:3:69"},"nativeSrc":"57811:12:69","nodeType":"YulFunctionCall","src":"57811:12:69"},"variableNames":[{"name":"end","nativeSrc":"57804:3:69","nodeType":"YulIdentifier","src":"57804:3:69"}]}]},"name":"abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack","nativeSrc":"57463:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"57597:3:69","nodeType":"YulTypedName","src":"57597:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"57605:3:69","nodeType":"YulTypedName","src":"57605:3:69","type":""}],"src":"57463:366:69"},{"body":{"nativeSrc":"58006:248:69","nodeType":"YulBlock","src":"58006:248:69","statements":[{"nativeSrc":"58016:26:69","nodeType":"YulAssignment","src":"58016:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"58028:9:69","nodeType":"YulIdentifier","src":"58028:9:69"},{"kind":"number","nativeSrc":"58039:2:69","nodeType":"YulLiteral","src":"58039:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"58024:3:69","nodeType":"YulIdentifier","src":"58024:3:69"},"nativeSrc":"58024:18:69","nodeType":"YulFunctionCall","src":"58024:18:69"},"variableNames":[{"name":"tail","nativeSrc":"58016:4:69","nodeType":"YulIdentifier","src":"58016:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"58063:9:69","nodeType":"YulIdentifier","src":"58063:9:69"},{"kind":"number","nativeSrc":"58074:1:69","nodeType":"YulLiteral","src":"58074:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"58059:3:69","nodeType":"YulIdentifier","src":"58059:3:69"},"nativeSrc":"58059:17:69","nodeType":"YulFunctionCall","src":"58059:17:69"},{"arguments":[{"name":"tail","nativeSrc":"58082:4:69","nodeType":"YulIdentifier","src":"58082:4:69"},{"name":"headStart","nativeSrc":"58088:9:69","nodeType":"YulIdentifier","src":"58088:9:69"}],"functionName":{"name":"sub","nativeSrc":"58078:3:69","nodeType":"YulIdentifier","src":"58078:3:69"},"nativeSrc":"58078:20:69","nodeType":"YulFunctionCall","src":"58078:20:69"}],"functionName":{"name":"mstore","nativeSrc":"58052:6:69","nodeType":"YulIdentifier","src":"58052:6:69"},"nativeSrc":"58052:47:69","nodeType":"YulFunctionCall","src":"58052:47:69"},"nativeSrc":"58052:47:69","nodeType":"YulExpressionStatement","src":"58052:47:69"},{"nativeSrc":"58108:139:69","nodeType":"YulAssignment","src":"58108:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"58242:4:69","nodeType":"YulIdentifier","src":"58242:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack","nativeSrc":"58116:124:69","nodeType":"YulIdentifier","src":"58116:124:69"},"nativeSrc":"58116:131:69","nodeType":"YulFunctionCall","src":"58116:131:69"},"variableNames":[{"name":"tail","nativeSrc":"58108:4:69","nodeType":"YulIdentifier","src":"58108:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"57835:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"57986:9:69","nodeType":"YulTypedName","src":"57986:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"58001:4:69","nodeType":"YulTypedName","src":"58001:4:69","type":""}],"src":"57835:419:69"},{"body":{"nativeSrc":"58313:32:69","nodeType":"YulBlock","src":"58313:32:69","statements":[{"nativeSrc":"58323:16:69","nodeType":"YulAssignment","src":"58323:16:69","value":{"name":"value","nativeSrc":"58334:5:69","nodeType":"YulIdentifier","src":"58334:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"58323:7:69","nodeType":"YulIdentifier","src":"58323:7:69"}]}]},"name":"cleanup_t_rational_1_by_1","nativeSrc":"58260:85:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"58295:5:69","nodeType":"YulTypedName","src":"58295:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"58305:7:69","nodeType":"YulTypedName","src":"58305:7:69","type":""}],"src":"58260:85:69"},{"body":{"nativeSrc":"58394:43:69","nodeType":"YulBlock","src":"58394:43:69","statements":[{"nativeSrc":"58404:27:69","nodeType":"YulAssignment","src":"58404:27:69","value":{"arguments":[{"name":"value","nativeSrc":"58419:5:69","nodeType":"YulIdentifier","src":"58419:5:69"},{"kind":"number","nativeSrc":"58426:4:69","nodeType":"YulLiteral","src":"58426:4:69","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"58415:3:69","nodeType":"YulIdentifier","src":"58415:3:69"},"nativeSrc":"58415:16:69","nodeType":"YulFunctionCall","src":"58415:16:69"},"variableNames":[{"name":"cleaned","nativeSrc":"58404:7:69","nodeType":"YulIdentifier","src":"58404:7:69"}]}]},"name":"cleanup_t_uint8","nativeSrc":"58351:86:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"58376:5:69","nodeType":"YulTypedName","src":"58376:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"58386:7:69","nodeType":"YulTypedName","src":"58386:7:69","type":""}],"src":"58351:86:69"},{"body":{"nativeSrc":"58509:88:69","nodeType":"YulBlock","src":"58509:88:69","statements":[{"nativeSrc":"58519:72:69","nodeType":"YulAssignment","src":"58519:72:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"58583:5:69","nodeType":"YulIdentifier","src":"58583:5:69"}],"functionName":{"name":"cleanup_t_rational_1_by_1","nativeSrc":"58557:25:69","nodeType":"YulIdentifier","src":"58557:25:69"},"nativeSrc":"58557:32:69","nodeType":"YulFunctionCall","src":"58557:32:69"}],"functionName":{"name":"identity","nativeSrc":"58548:8:69","nodeType":"YulIdentifier","src":"58548:8:69"},"nativeSrc":"58548:42:69","nodeType":"YulFunctionCall","src":"58548:42:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"58532:15:69","nodeType":"YulIdentifier","src":"58532:15:69"},"nativeSrc":"58532:59:69","nodeType":"YulFunctionCall","src":"58532:59:69"},"variableNames":[{"name":"converted","nativeSrc":"58519:9:69","nodeType":"YulIdentifier","src":"58519:9:69"}]}]},"name":"convert_t_rational_1_by_1_to_t_uint8","nativeSrc":"58443:154:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"58489:5:69","nodeType":"YulTypedName","src":"58489:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"58499:9:69","nodeType":"YulTypedName","src":"58499:9:69","type":""}],"src":"58443:154:69"},{"body":{"nativeSrc":"58674:72:69","nodeType":"YulBlock","src":"58674:72:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"58691:3:69","nodeType":"YulIdentifier","src":"58691:3:69"},{"arguments":[{"name":"value","nativeSrc":"58733:5:69","nodeType":"YulIdentifier","src":"58733:5:69"}],"functionName":{"name":"convert_t_rational_1_by_1_to_t_uint8","nativeSrc":"58696:36:69","nodeType":"YulIdentifier","src":"58696:36:69"},"nativeSrc":"58696:43:69","nodeType":"YulFunctionCall","src":"58696:43:69"}],"functionName":{"name":"mstore","nativeSrc":"58684:6:69","nodeType":"YulIdentifier","src":"58684:6:69"},"nativeSrc":"58684:56:69","nodeType":"YulFunctionCall","src":"58684:56:69"},"nativeSrc":"58684:56:69","nodeType":"YulExpressionStatement","src":"58684:56:69"}]},"name":"abi_encode_t_rational_1_by_1_to_t_uint8_fromStack","nativeSrc":"58603:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"58662:5:69","nodeType":"YulTypedName","src":"58662:5:69","type":""},{"name":"pos","nativeSrc":"58669:3:69","nodeType":"YulTypedName","src":"58669:3:69","type":""}],"src":"58603:143:69"},{"body":{"nativeSrc":"58856:130:69","nodeType":"YulBlock","src":"58856:130:69","statements":[{"nativeSrc":"58866:26:69","nodeType":"YulAssignment","src":"58866:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"58878:9:69","nodeType":"YulIdentifier","src":"58878:9:69"},{"kind":"number","nativeSrc":"58889:2:69","nodeType":"YulLiteral","src":"58889:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"58874:3:69","nodeType":"YulIdentifier","src":"58874:3:69"},"nativeSrc":"58874:18:69","nodeType":"YulFunctionCall","src":"58874:18:69"},"variableNames":[{"name":"tail","nativeSrc":"58866:4:69","nodeType":"YulIdentifier","src":"58866:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"58952:6:69","nodeType":"YulIdentifier","src":"58952:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"58965:9:69","nodeType":"YulIdentifier","src":"58965:9:69"},{"kind":"number","nativeSrc":"58976:1:69","nodeType":"YulLiteral","src":"58976:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"58961:3:69","nodeType":"YulIdentifier","src":"58961:3:69"},"nativeSrc":"58961:17:69","nodeType":"YulFunctionCall","src":"58961:17:69"}],"functionName":{"name":"abi_encode_t_rational_1_by_1_to_t_uint8_fromStack","nativeSrc":"58902:49:69","nodeType":"YulIdentifier","src":"58902:49:69"},"nativeSrc":"58902:77:69","nodeType":"YulFunctionCall","src":"58902:77:69"},"nativeSrc":"58902:77:69","nodeType":"YulExpressionStatement","src":"58902:77:69"}]},"name":"abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed","nativeSrc":"58752:234:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"58828:9:69","nodeType":"YulTypedName","src":"58828:9:69","type":""},{"name":"value0","nativeSrc":"58840:6:69","nodeType":"YulTypedName","src":"58840:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"58851:4:69","nodeType":"YulTypedName","src":"58851:4:69","type":""}],"src":"58752:234:69"},{"body":{"nativeSrc":"59170:221:69","nodeType":"YulBlock","src":"59170:221:69","statements":[{"nativeSrc":"59180:26:69","nodeType":"YulVariableDeclaration","src":"59180:26:69","value":{"arguments":[{"name":"pos","nativeSrc":"59196:3:69","nodeType":"YulIdentifier","src":"59196:3:69"},{"kind":"number","nativeSrc":"59201:4:69","nodeType":"YulLiteral","src":"59201:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"59192:3:69","nodeType":"YulIdentifier","src":"59192:3:69"},"nativeSrc":"59192:14:69","nodeType":"YulFunctionCall","src":"59192:14:69"},"variables":[{"name":"tail","nativeSrc":"59184:4:69","nodeType":"YulTypedName","src":"59184:4:69","type":""}]},{"nativeSrc":"59216:168:69","nodeType":"YulBlock","src":"59216:168:69","statements":[{"nativeSrc":"59255:43:69","nodeType":"YulVariableDeclaration","src":"59255:43:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"59285:5:69","nodeType":"YulIdentifier","src":"59285:5:69"},{"kind":"number","nativeSrc":"59292:4:69","nodeType":"YulLiteral","src":"59292:4:69","type":"","value":"0x00"}],"functionName":{"name":"add","nativeSrc":"59281:3:69","nodeType":"YulIdentifier","src":"59281:3:69"},"nativeSrc":"59281:16:69","nodeType":"YulFunctionCall","src":"59281:16:69"}],"functionName":{"name":"mload","nativeSrc":"59275:5:69","nodeType":"YulIdentifier","src":"59275:5:69"},"nativeSrc":"59275:23:69","nodeType":"YulFunctionCall","src":"59275:23:69"},"variables":[{"name":"memberValue0","nativeSrc":"59259:12:69","nodeType":"YulTypedName","src":"59259:12:69","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nativeSrc":"59345:12:69","nodeType":"YulIdentifier","src":"59345:12:69"},{"arguments":[{"name":"pos","nativeSrc":"59363:3:69","nodeType":"YulIdentifier","src":"59363:3:69"},{"kind":"number","nativeSrc":"59368:4:69","nodeType":"YulLiteral","src":"59368:4:69","type":"","value":"0x00"}],"functionName":{"name":"add","nativeSrc":"59359:3:69","nodeType":"YulIdentifier","src":"59359:3:69"},"nativeSrc":"59359:14:69","nodeType":"YulFunctionCall","src":"59359:14:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256","nativeSrc":"59311:33:69","nodeType":"YulIdentifier","src":"59311:33:69"},"nativeSrc":"59311:63:69","nodeType":"YulFunctionCall","src":"59311:63:69"},"nativeSrc":"59311:63:69","nodeType":"YulExpressionStatement","src":"59311:63:69"}]}]},"name":"abi_encode_t_struct$_Exp_$9645_memory_ptr_to_t_struct$_Exp_$9645_memory_ptr_fromStack","nativeSrc":"59062:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"59157:5:69","nodeType":"YulTypedName","src":"59157:5:69","type":""},{"name":"pos","nativeSrc":"59164:3:69","nodeType":"YulTypedName","src":"59164:3:69","type":""}],"src":"59062:329:69"},{"body":{"nativeSrc":"59565:248:69","nodeType":"YulBlock","src":"59565:248:69","statements":[{"nativeSrc":"59575:26:69","nodeType":"YulAssignment","src":"59575:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"59587:9:69","nodeType":"YulIdentifier","src":"59587:9:69"},{"kind":"number","nativeSrc":"59598:2:69","nodeType":"YulLiteral","src":"59598:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"59583:3:69","nodeType":"YulIdentifier","src":"59583:3:69"},"nativeSrc":"59583:18:69","nodeType":"YulFunctionCall","src":"59583:18:69"},"variableNames":[{"name":"tail","nativeSrc":"59575:4:69","nodeType":"YulIdentifier","src":"59575:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"59655:6:69","nodeType":"YulIdentifier","src":"59655:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"59668:9:69","nodeType":"YulIdentifier","src":"59668:9:69"},{"kind":"number","nativeSrc":"59679:1:69","nodeType":"YulLiteral","src":"59679:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"59664:3:69","nodeType":"YulIdentifier","src":"59664:3:69"},"nativeSrc":"59664:17:69","nodeType":"YulFunctionCall","src":"59664:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"59611:43:69","nodeType":"YulIdentifier","src":"59611:43:69"},"nativeSrc":"59611:71:69","nodeType":"YulFunctionCall","src":"59611:71:69"},"nativeSrc":"59611:71:69","nodeType":"YulExpressionStatement","src":"59611:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"59778:6:69","nodeType":"YulIdentifier","src":"59778:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"59791:9:69","nodeType":"YulIdentifier","src":"59791:9:69"},{"kind":"number","nativeSrc":"59802:2:69","nodeType":"YulLiteral","src":"59802:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"59787:3:69","nodeType":"YulIdentifier","src":"59787:3:69"},"nativeSrc":"59787:18:69","nodeType":"YulFunctionCall","src":"59787:18:69"}],"functionName":{"name":"abi_encode_t_struct$_Exp_$9645_memory_ptr_to_t_struct$_Exp_$9645_memory_ptr_fromStack","nativeSrc":"59692:85:69","nodeType":"YulIdentifier","src":"59692:85:69"},"nativeSrc":"59692:114:69","nodeType":"YulFunctionCall","src":"59692:114:69"},"nativeSrc":"59692:114:69","nodeType":"YulExpressionStatement","src":"59692:114:69"}]},"name":"abi_encode_tuple_t_address_t_struct$_Exp_$9645_memory_ptr__to_t_address_t_struct$_Exp_$9645_memory_ptr__fromStack_reversed","nativeSrc":"59397:416:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"59529:9:69","nodeType":"YulTypedName","src":"59529:9:69","type":""},{"name":"value1","nativeSrc":"59541:6:69","nodeType":"YulTypedName","src":"59541:6:69","type":""},{"name":"value0","nativeSrc":"59549:6:69","nodeType":"YulTypedName","src":"59549:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"59560:4:69","nodeType":"YulTypedName","src":"59560:4:69","type":""}],"src":"59397:416:69"},{"body":{"nativeSrc":"60015:330:69","nodeType":"YulBlock","src":"60015:330:69","statements":[{"nativeSrc":"60025:26:69","nodeType":"YulAssignment","src":"60025:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"60037:9:69","nodeType":"YulIdentifier","src":"60037:9:69"},{"kind":"number","nativeSrc":"60048:2:69","nodeType":"YulLiteral","src":"60048:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"60033:3:69","nodeType":"YulIdentifier","src":"60033:3:69"},"nativeSrc":"60033:18:69","nodeType":"YulFunctionCall","src":"60033:18:69"},"variableNames":[{"name":"tail","nativeSrc":"60025:4:69","nodeType":"YulIdentifier","src":"60025:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"60105:6:69","nodeType":"YulIdentifier","src":"60105:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"60118:9:69","nodeType":"YulIdentifier","src":"60118:9:69"},{"kind":"number","nativeSrc":"60129:1:69","nodeType":"YulLiteral","src":"60129:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"60114:3:69","nodeType":"YulIdentifier","src":"60114:3:69"},"nativeSrc":"60114:17:69","nodeType":"YulFunctionCall","src":"60114:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"60061:43:69","nodeType":"YulIdentifier","src":"60061:43:69"},"nativeSrc":"60061:71:69","nodeType":"YulFunctionCall","src":"60061:71:69"},"nativeSrc":"60061:71:69","nodeType":"YulExpressionStatement","src":"60061:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"60186:6:69","nodeType":"YulIdentifier","src":"60186:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"60199:9:69","nodeType":"YulIdentifier","src":"60199:9:69"},{"kind":"number","nativeSrc":"60210:2:69","nodeType":"YulLiteral","src":"60210:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"60195:3:69","nodeType":"YulIdentifier","src":"60195:3:69"},"nativeSrc":"60195:18:69","nodeType":"YulFunctionCall","src":"60195:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"60142:43:69","nodeType":"YulIdentifier","src":"60142:43:69"},"nativeSrc":"60142:72:69","nodeType":"YulFunctionCall","src":"60142:72:69"},"nativeSrc":"60142:72:69","nodeType":"YulExpressionStatement","src":"60142:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"60310:6:69","nodeType":"YulIdentifier","src":"60310:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"60323:9:69","nodeType":"YulIdentifier","src":"60323:9:69"},{"kind":"number","nativeSrc":"60334:2:69","nodeType":"YulLiteral","src":"60334:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"60319:3:69","nodeType":"YulIdentifier","src":"60319:3:69"},"nativeSrc":"60319:18:69","nodeType":"YulFunctionCall","src":"60319:18:69"}],"functionName":{"name":"abi_encode_t_struct$_Exp_$9645_memory_ptr_to_t_struct$_Exp_$9645_memory_ptr_fromStack","nativeSrc":"60224:85:69","nodeType":"YulIdentifier","src":"60224:85:69"},"nativeSrc":"60224:114:69","nodeType":"YulFunctionCall","src":"60224:114:69"},"nativeSrc":"60224:114:69","nodeType":"YulExpressionStatement","src":"60224:114:69"}]},"name":"abi_encode_tuple_t_address_t_address_t_struct$_Exp_$9645_memory_ptr__to_t_address_t_address_t_struct$_Exp_$9645_memory_ptr__fromStack_reversed","nativeSrc":"59819:526:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"59971:9:69","nodeType":"YulTypedName","src":"59971:9:69","type":""},{"name":"value2","nativeSrc":"59983:6:69","nodeType":"YulTypedName","src":"59983:6:69","type":""},{"name":"value1","nativeSrc":"59991:6:69","nodeType":"YulTypedName","src":"59991:6:69","type":""},{"name":"value0","nativeSrc":"59999:6:69","nodeType":"YulTypedName","src":"59999:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"60010:4:69","nodeType":"YulTypedName","src":"60010:4:69","type":""}],"src":"59819:526:69"},{"body":{"nativeSrc":"60379:152:69","nodeType":"YulBlock","src":"60379:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"60396:1:69","nodeType":"YulLiteral","src":"60396:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"60399:77:69","nodeType":"YulLiteral","src":"60399:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"60389:6:69","nodeType":"YulIdentifier","src":"60389:6:69"},"nativeSrc":"60389:88:69","nodeType":"YulFunctionCall","src":"60389:88:69"},"nativeSrc":"60389:88:69","nodeType":"YulExpressionStatement","src":"60389:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"60493:1:69","nodeType":"YulLiteral","src":"60493:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"60496:4:69","nodeType":"YulLiteral","src":"60496:4:69","type":"","value":"0x21"}],"functionName":{"name":"mstore","nativeSrc":"60486:6:69","nodeType":"YulIdentifier","src":"60486:6:69"},"nativeSrc":"60486:15:69","nodeType":"YulFunctionCall","src":"60486:15:69"},"nativeSrc":"60486:15:69","nodeType":"YulExpressionStatement","src":"60486:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"60517:1:69","nodeType":"YulLiteral","src":"60517:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"60520:4:69","nodeType":"YulLiteral","src":"60520:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"60510:6:69","nodeType":"YulIdentifier","src":"60510:6:69"},"nativeSrc":"60510:15:69","nodeType":"YulFunctionCall","src":"60510:15:69"},"nativeSrc":"60510:15:69","nodeType":"YulExpressionStatement","src":"60510:15:69"}]},"name":"panic_error_0x21","nativeSrc":"60351:180:69","nodeType":"YulFunctionDefinition","src":"60351:180:69"},{"body":{"nativeSrc":"60565:152:69","nodeType":"YulBlock","src":"60565:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"60582:1:69","nodeType":"YulLiteral","src":"60582:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"60585:77:69","nodeType":"YulLiteral","src":"60585:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"60575:6:69","nodeType":"YulIdentifier","src":"60575:6:69"},"nativeSrc":"60575:88:69","nodeType":"YulFunctionCall","src":"60575:88:69"},"nativeSrc":"60575:88:69","nodeType":"YulExpressionStatement","src":"60575:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"60679:1:69","nodeType":"YulLiteral","src":"60679:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"60682:4:69","nodeType":"YulLiteral","src":"60682:4:69","type":"","value":"0x01"}],"functionName":{"name":"mstore","nativeSrc":"60672:6:69","nodeType":"YulIdentifier","src":"60672:6:69"},"nativeSrc":"60672:15:69","nodeType":"YulFunctionCall","src":"60672:15:69"},"nativeSrc":"60672:15:69","nodeType":"YulExpressionStatement","src":"60672:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"60703:1:69","nodeType":"YulLiteral","src":"60703:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"60706:4:69","nodeType":"YulLiteral","src":"60706:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"60696:6:69","nodeType":"YulIdentifier","src":"60696:6:69"},"nativeSrc":"60696:15:69","nodeType":"YulFunctionCall","src":"60696:15:69"},"nativeSrc":"60696:15:69","nodeType":"YulExpressionStatement","src":"60696:15:69"}]},"name":"panic_error_0x01","nativeSrc":"60537:180:69","nodeType":"YulFunctionDefinition","src":"60537:180:69"},{"body":{"nativeSrc":"60768:149:69","nodeType":"YulBlock","src":"60768:149:69","statements":[{"nativeSrc":"60778:25:69","nodeType":"YulAssignment","src":"60778:25:69","value":{"arguments":[{"name":"x","nativeSrc":"60801:1:69","nodeType":"YulIdentifier","src":"60801:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"60783:17:69","nodeType":"YulIdentifier","src":"60783:17:69"},"nativeSrc":"60783:20:69","nodeType":"YulFunctionCall","src":"60783:20:69"},"variableNames":[{"name":"x","nativeSrc":"60778:1:69","nodeType":"YulIdentifier","src":"60778:1:69"}]},{"nativeSrc":"60812:25:69","nodeType":"YulAssignment","src":"60812:25:69","value":{"arguments":[{"name":"y","nativeSrc":"60835:1:69","nodeType":"YulIdentifier","src":"60835:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"60817:17:69","nodeType":"YulIdentifier","src":"60817:17:69"},"nativeSrc":"60817:20:69","nodeType":"YulFunctionCall","src":"60817:20:69"},"variableNames":[{"name":"y","nativeSrc":"60812:1:69","nodeType":"YulIdentifier","src":"60812:1:69"}]},{"nativeSrc":"60846:17:69","nodeType":"YulAssignment","src":"60846:17:69","value":{"arguments":[{"name":"x","nativeSrc":"60858:1:69","nodeType":"YulIdentifier","src":"60858:1:69"},{"name":"y","nativeSrc":"60861:1:69","nodeType":"YulIdentifier","src":"60861:1:69"}],"functionName":{"name":"sub","nativeSrc":"60854:3:69","nodeType":"YulIdentifier","src":"60854:3:69"},"nativeSrc":"60854:9:69","nodeType":"YulFunctionCall","src":"60854:9:69"},"variableNames":[{"name":"diff","nativeSrc":"60846:4:69","nodeType":"YulIdentifier","src":"60846:4:69"}]},{"body":{"nativeSrc":"60888:22:69","nodeType":"YulBlock","src":"60888:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"60890:16:69","nodeType":"YulIdentifier","src":"60890:16:69"},"nativeSrc":"60890:18:69","nodeType":"YulFunctionCall","src":"60890:18:69"},"nativeSrc":"60890:18:69","nodeType":"YulExpressionStatement","src":"60890:18:69"}]},"condition":{"arguments":[{"name":"diff","nativeSrc":"60879:4:69","nodeType":"YulIdentifier","src":"60879:4:69"},{"name":"x","nativeSrc":"60885:1:69","nodeType":"YulIdentifier","src":"60885:1:69"}],"functionName":{"name":"gt","nativeSrc":"60876:2:69","nodeType":"YulIdentifier","src":"60876:2:69"},"nativeSrc":"60876:11:69","nodeType":"YulFunctionCall","src":"60876:11:69"},"nativeSrc":"60873:37:69","nodeType":"YulIf","src":"60873:37:69"}]},"name":"checked_sub_t_uint256","nativeSrc":"60723:194:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"60754:1:69","nodeType":"YulTypedName","src":"60754:1:69","type":""},{"name":"y","nativeSrc":"60757:1:69","nodeType":"YulTypedName","src":"60757:1:69","type":""}],"returnVariables":[{"name":"diff","nativeSrc":"60763:4:69","nodeType":"YulTypedName","src":"60763:4:69","type":""}],"src":"60723:194:69"},{"body":{"nativeSrc":"60951:152:69","nodeType":"YulBlock","src":"60951:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"60968:1:69","nodeType":"YulLiteral","src":"60968:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"60971:77:69","nodeType":"YulLiteral","src":"60971:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"60961:6:69","nodeType":"YulIdentifier","src":"60961:6:69"},"nativeSrc":"60961:88:69","nodeType":"YulFunctionCall","src":"60961:88:69"},"nativeSrc":"60961:88:69","nodeType":"YulExpressionStatement","src":"60961:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"61065:1:69","nodeType":"YulLiteral","src":"61065:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"61068:4:69","nodeType":"YulLiteral","src":"61068:4:69","type":"","value":"0x31"}],"functionName":{"name":"mstore","nativeSrc":"61058:6:69","nodeType":"YulIdentifier","src":"61058:6:69"},"nativeSrc":"61058:15:69","nodeType":"YulFunctionCall","src":"61058:15:69"},"nativeSrc":"61058:15:69","nodeType":"YulExpressionStatement","src":"61058:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"61089:1:69","nodeType":"YulLiteral","src":"61089:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"61092:4:69","nodeType":"YulLiteral","src":"61092:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"61082:6:69","nodeType":"YulIdentifier","src":"61082:6:69"},"nativeSrc":"61082:15:69","nodeType":"YulFunctionCall","src":"61082:15:69"},"nativeSrc":"61082:15:69","nodeType":"YulExpressionStatement","src":"61082:15:69"}]},"name":"panic_error_0x31","nativeSrc":"60923:180:69","nodeType":"YulFunctionDefinition","src":"60923:180:69"},{"body":{"nativeSrc":"61168:40:69","nodeType":"YulBlock","src":"61168:40:69","statements":[{"nativeSrc":"61179:22:69","nodeType":"YulAssignment","src":"61179:22:69","value":{"arguments":[{"name":"value","nativeSrc":"61195:5:69","nodeType":"YulIdentifier","src":"61195:5:69"}],"functionName":{"name":"mload","nativeSrc":"61189:5:69","nodeType":"YulIdentifier","src":"61189:5:69"},"nativeSrc":"61189:12:69","nodeType":"YulFunctionCall","src":"61189:12:69"},"variableNames":[{"name":"length","nativeSrc":"61179:6:69","nodeType":"YulIdentifier","src":"61179:6:69"}]}]},"name":"array_length_t_string_memory_ptr","nativeSrc":"61109:99:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"61151:5:69","nodeType":"YulTypedName","src":"61151:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"61161:6:69","nodeType":"YulTypedName","src":"61161:6:69","type":""}],"src":"61109:99:69"},{"body":{"nativeSrc":"61276:186:69","nodeType":"YulBlock","src":"61276:186:69","statements":[{"nativeSrc":"61287:10:69","nodeType":"YulVariableDeclaration","src":"61287:10:69","value":{"kind":"number","nativeSrc":"61296:1:69","nodeType":"YulLiteral","src":"61296:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"61291:1:69","nodeType":"YulTypedName","src":"61291:1:69","type":""}]},{"body":{"nativeSrc":"61356:63:69","nodeType":"YulBlock","src":"61356:63:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"61381:3:69","nodeType":"YulIdentifier","src":"61381:3:69"},{"name":"i","nativeSrc":"61386:1:69","nodeType":"YulIdentifier","src":"61386:1:69"}],"functionName":{"name":"add","nativeSrc":"61377:3:69","nodeType":"YulIdentifier","src":"61377:3:69"},"nativeSrc":"61377:11:69","nodeType":"YulFunctionCall","src":"61377:11:69"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"61400:3:69","nodeType":"YulIdentifier","src":"61400:3:69"},{"name":"i","nativeSrc":"61405:1:69","nodeType":"YulIdentifier","src":"61405:1:69"}],"functionName":{"name":"add","nativeSrc":"61396:3:69","nodeType":"YulIdentifier","src":"61396:3:69"},"nativeSrc":"61396:11:69","nodeType":"YulFunctionCall","src":"61396:11:69"}],"functionName":{"name":"mload","nativeSrc":"61390:5:69","nodeType":"YulIdentifier","src":"61390:5:69"},"nativeSrc":"61390:18:69","nodeType":"YulFunctionCall","src":"61390:18:69"}],"functionName":{"name":"mstore","nativeSrc":"61370:6:69","nodeType":"YulIdentifier","src":"61370:6:69"},"nativeSrc":"61370:39:69","nodeType":"YulFunctionCall","src":"61370:39:69"},"nativeSrc":"61370:39:69","nodeType":"YulExpressionStatement","src":"61370:39:69"}]},"condition":{"arguments":[{"name":"i","nativeSrc":"61317:1:69","nodeType":"YulIdentifier","src":"61317:1:69"},{"name":"length","nativeSrc":"61320:6:69","nodeType":"YulIdentifier","src":"61320:6:69"}],"functionName":{"name":"lt","nativeSrc":"61314:2:69","nodeType":"YulIdentifier","src":"61314:2:69"},"nativeSrc":"61314:13:69","nodeType":"YulFunctionCall","src":"61314:13:69"},"nativeSrc":"61306:113:69","nodeType":"YulForLoop","post":{"nativeSrc":"61328:19:69","nodeType":"YulBlock","src":"61328:19:69","statements":[{"nativeSrc":"61330:15:69","nodeType":"YulAssignment","src":"61330:15:69","value":{"arguments":[{"name":"i","nativeSrc":"61339:1:69","nodeType":"YulIdentifier","src":"61339:1:69"},{"kind":"number","nativeSrc":"61342:2:69","nodeType":"YulLiteral","src":"61342:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"61335:3:69","nodeType":"YulIdentifier","src":"61335:3:69"},"nativeSrc":"61335:10:69","nodeType":"YulFunctionCall","src":"61335:10:69"},"variableNames":[{"name":"i","nativeSrc":"61330:1:69","nodeType":"YulIdentifier","src":"61330:1:69"}]}]},"pre":{"nativeSrc":"61310:3:69","nodeType":"YulBlock","src":"61310:3:69","statements":[]},"src":"61306:113:69"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"61439:3:69","nodeType":"YulIdentifier","src":"61439:3:69"},{"name":"length","nativeSrc":"61444:6:69","nodeType":"YulIdentifier","src":"61444:6:69"}],"functionName":{"name":"add","nativeSrc":"61435:3:69","nodeType":"YulIdentifier","src":"61435:3:69"},"nativeSrc":"61435:16:69","nodeType":"YulFunctionCall","src":"61435:16:69"},{"kind":"number","nativeSrc":"61453:1:69","nodeType":"YulLiteral","src":"61453:1:69","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"61428:6:69","nodeType":"YulIdentifier","src":"61428:6:69"},"nativeSrc":"61428:27:69","nodeType":"YulFunctionCall","src":"61428:27:69"},"nativeSrc":"61428:27:69","nodeType":"YulExpressionStatement","src":"61428:27:69"}]},"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"61214:248:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"61258:3:69","nodeType":"YulTypedName","src":"61258:3:69","type":""},{"name":"dst","nativeSrc":"61263:3:69","nodeType":"YulTypedName","src":"61263:3:69","type":""},{"name":"length","nativeSrc":"61268:6:69","nodeType":"YulTypedName","src":"61268:6:69","type":""}],"src":"61214:248:69"},{"body":{"nativeSrc":"61560:285:69","nodeType":"YulBlock","src":"61560:285:69","statements":[{"nativeSrc":"61570:53:69","nodeType":"YulVariableDeclaration","src":"61570:53:69","value":{"arguments":[{"name":"value","nativeSrc":"61617:5:69","nodeType":"YulIdentifier","src":"61617:5:69"}],"functionName":{"name":"array_length_t_string_memory_ptr","nativeSrc":"61584:32:69","nodeType":"YulIdentifier","src":"61584:32:69"},"nativeSrc":"61584:39:69","nodeType":"YulFunctionCall","src":"61584:39:69"},"variables":[{"name":"length","nativeSrc":"61574:6:69","nodeType":"YulTypedName","src":"61574:6:69","type":""}]},{"nativeSrc":"61632:78:69","nodeType":"YulAssignment","src":"61632:78:69","value":{"arguments":[{"name":"pos","nativeSrc":"61698:3:69","nodeType":"YulIdentifier","src":"61698:3:69"},{"name":"length","nativeSrc":"61703:6:69","nodeType":"YulIdentifier","src":"61703:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"61639:58:69","nodeType":"YulIdentifier","src":"61639:58:69"},"nativeSrc":"61639:71:69","nodeType":"YulFunctionCall","src":"61639:71:69"},"variableNames":[{"name":"pos","nativeSrc":"61632:3:69","nodeType":"YulIdentifier","src":"61632:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"61758:5:69","nodeType":"YulIdentifier","src":"61758:5:69"},{"kind":"number","nativeSrc":"61765:4:69","nodeType":"YulLiteral","src":"61765:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"61754:3:69","nodeType":"YulIdentifier","src":"61754:3:69"},"nativeSrc":"61754:16:69","nodeType":"YulFunctionCall","src":"61754:16:69"},{"name":"pos","nativeSrc":"61772:3:69","nodeType":"YulIdentifier","src":"61772:3:69"},{"name":"length","nativeSrc":"61777:6:69","nodeType":"YulIdentifier","src":"61777:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"61719:34:69","nodeType":"YulIdentifier","src":"61719:34:69"},"nativeSrc":"61719:65:69","nodeType":"YulFunctionCall","src":"61719:65:69"},"nativeSrc":"61719:65:69","nodeType":"YulExpressionStatement","src":"61719:65:69"},{"nativeSrc":"61793:46:69","nodeType":"YulAssignment","src":"61793:46:69","value":{"arguments":[{"name":"pos","nativeSrc":"61804:3:69","nodeType":"YulIdentifier","src":"61804:3:69"},{"arguments":[{"name":"length","nativeSrc":"61831:6:69","nodeType":"YulIdentifier","src":"61831:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"61809:21:69","nodeType":"YulIdentifier","src":"61809:21:69"},"nativeSrc":"61809:29:69","nodeType":"YulFunctionCall","src":"61809:29:69"}],"functionName":{"name":"add","nativeSrc":"61800:3:69","nodeType":"YulIdentifier","src":"61800:3:69"},"nativeSrc":"61800:39:69","nodeType":"YulFunctionCall","src":"61800:39:69"},"variableNames":[{"name":"end","nativeSrc":"61793:3:69","nodeType":"YulIdentifier","src":"61793:3:69"}]}]},"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"61468:377:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"61541:5:69","nodeType":"YulTypedName","src":"61541:5:69","type":""},{"name":"pos","nativeSrc":"61548:3:69","nodeType":"YulTypedName","src":"61548:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"61556:3:69","nodeType":"YulTypedName","src":"61556:3:69","type":""}],"src":"61468:377:69"},{"body":{"nativeSrc":"61997:277:69","nodeType":"YulBlock","src":"61997:277:69","statements":[{"nativeSrc":"62007:26:69","nodeType":"YulAssignment","src":"62007:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"62019:9:69","nodeType":"YulIdentifier","src":"62019:9:69"},{"kind":"number","nativeSrc":"62030:2:69","nodeType":"YulLiteral","src":"62030:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"62015:3:69","nodeType":"YulIdentifier","src":"62015:3:69"},"nativeSrc":"62015:18:69","nodeType":"YulFunctionCall","src":"62015:18:69"},"variableNames":[{"name":"tail","nativeSrc":"62007:4:69","nodeType":"YulIdentifier","src":"62007:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"62087:6:69","nodeType":"YulIdentifier","src":"62087:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"62100:9:69","nodeType":"YulIdentifier","src":"62100:9:69"},{"kind":"number","nativeSrc":"62111:1:69","nodeType":"YulLiteral","src":"62111:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"62096:3:69","nodeType":"YulIdentifier","src":"62096:3:69"},"nativeSrc":"62096:17:69","nodeType":"YulFunctionCall","src":"62096:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"62043:43:69","nodeType":"YulIdentifier","src":"62043:43:69"},"nativeSrc":"62043:71:69","nodeType":"YulFunctionCall","src":"62043:71:69"},"nativeSrc":"62043:71:69","nodeType":"YulExpressionStatement","src":"62043:71:69"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"62135:9:69","nodeType":"YulIdentifier","src":"62135:9:69"},{"kind":"number","nativeSrc":"62146:2:69","nodeType":"YulLiteral","src":"62146:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"62131:3:69","nodeType":"YulIdentifier","src":"62131:3:69"},"nativeSrc":"62131:18:69","nodeType":"YulFunctionCall","src":"62131:18:69"},{"arguments":[{"name":"tail","nativeSrc":"62155:4:69","nodeType":"YulIdentifier","src":"62155:4:69"},{"name":"headStart","nativeSrc":"62161:9:69","nodeType":"YulIdentifier","src":"62161:9:69"}],"functionName":{"name":"sub","nativeSrc":"62151:3:69","nodeType":"YulIdentifier","src":"62151:3:69"},"nativeSrc":"62151:20:69","nodeType":"YulFunctionCall","src":"62151:20:69"}],"functionName":{"name":"mstore","nativeSrc":"62124:6:69","nodeType":"YulIdentifier","src":"62124:6:69"},"nativeSrc":"62124:48:69","nodeType":"YulFunctionCall","src":"62124:48:69"},"nativeSrc":"62124:48:69","nodeType":"YulExpressionStatement","src":"62124:48:69"},{"nativeSrc":"62181:86:69","nodeType":"YulAssignment","src":"62181:86:69","value":{"arguments":[{"name":"value1","nativeSrc":"62253:6:69","nodeType":"YulIdentifier","src":"62253:6:69"},{"name":"tail","nativeSrc":"62262:4:69","nodeType":"YulIdentifier","src":"62262:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"62189:63:69","nodeType":"YulIdentifier","src":"62189:63:69"},"nativeSrc":"62189:78:69","nodeType":"YulFunctionCall","src":"62189:78:69"},"variableNames":[{"name":"tail","nativeSrc":"62181:4:69","nodeType":"YulIdentifier","src":"62181:4:69"}]}]},"name":"abi_encode_tuple_t_address_t_string_memory_ptr__to_t_address_t_string_memory_ptr__fromStack_reversed","nativeSrc":"61851:423:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"61961:9:69","nodeType":"YulTypedName","src":"61961:9:69","type":""},{"name":"value1","nativeSrc":"61973:6:69","nodeType":"YulTypedName","src":"61973:6:69","type":""},{"name":"value0","nativeSrc":"61981:6:69","nodeType":"YulTypedName","src":"61981:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"61992:4:69","nodeType":"YulTypedName","src":"61992:4:69","type":""}],"src":"61851:423:69"},{"body":{"nativeSrc":"62454:359:69","nodeType":"YulBlock","src":"62454:359:69","statements":[{"nativeSrc":"62464:26:69","nodeType":"YulAssignment","src":"62464:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"62476:9:69","nodeType":"YulIdentifier","src":"62476:9:69"},{"kind":"number","nativeSrc":"62487:2:69","nodeType":"YulLiteral","src":"62487:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"62472:3:69","nodeType":"YulIdentifier","src":"62472:3:69"},"nativeSrc":"62472:18:69","nodeType":"YulFunctionCall","src":"62472:18:69"},"variableNames":[{"name":"tail","nativeSrc":"62464:4:69","nodeType":"YulIdentifier","src":"62464:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"62544:6:69","nodeType":"YulIdentifier","src":"62544:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"62557:9:69","nodeType":"YulIdentifier","src":"62557:9:69"},{"kind":"number","nativeSrc":"62568:1:69","nodeType":"YulLiteral","src":"62568:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"62553:3:69","nodeType":"YulIdentifier","src":"62553:3:69"},"nativeSrc":"62553:17:69","nodeType":"YulFunctionCall","src":"62553:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"62500:43:69","nodeType":"YulIdentifier","src":"62500:43:69"},"nativeSrc":"62500:71:69","nodeType":"YulFunctionCall","src":"62500:71:69"},"nativeSrc":"62500:71:69","nodeType":"YulExpressionStatement","src":"62500:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"62625:6:69","nodeType":"YulIdentifier","src":"62625:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"62638:9:69","nodeType":"YulIdentifier","src":"62638:9:69"},{"kind":"number","nativeSrc":"62649:2:69","nodeType":"YulLiteral","src":"62649:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"62634:3:69","nodeType":"YulIdentifier","src":"62634:3:69"},"nativeSrc":"62634:18:69","nodeType":"YulFunctionCall","src":"62634:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"62581:43:69","nodeType":"YulIdentifier","src":"62581:43:69"},"nativeSrc":"62581:72:69","nodeType":"YulFunctionCall","src":"62581:72:69"},"nativeSrc":"62581:72:69","nodeType":"YulExpressionStatement","src":"62581:72:69"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"62674:9:69","nodeType":"YulIdentifier","src":"62674:9:69"},{"kind":"number","nativeSrc":"62685:2:69","nodeType":"YulLiteral","src":"62685:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"62670:3:69","nodeType":"YulIdentifier","src":"62670:3:69"},"nativeSrc":"62670:18:69","nodeType":"YulFunctionCall","src":"62670:18:69"},{"arguments":[{"name":"tail","nativeSrc":"62694:4:69","nodeType":"YulIdentifier","src":"62694:4:69"},{"name":"headStart","nativeSrc":"62700:9:69","nodeType":"YulIdentifier","src":"62700:9:69"}],"functionName":{"name":"sub","nativeSrc":"62690:3:69","nodeType":"YulIdentifier","src":"62690:3:69"},"nativeSrc":"62690:20:69","nodeType":"YulFunctionCall","src":"62690:20:69"}],"functionName":{"name":"mstore","nativeSrc":"62663:6:69","nodeType":"YulIdentifier","src":"62663:6:69"},"nativeSrc":"62663:48:69","nodeType":"YulFunctionCall","src":"62663:48:69"},"nativeSrc":"62663:48:69","nodeType":"YulExpressionStatement","src":"62663:48:69"},{"nativeSrc":"62720:86:69","nodeType":"YulAssignment","src":"62720:86:69","value":{"arguments":[{"name":"value2","nativeSrc":"62792:6:69","nodeType":"YulIdentifier","src":"62792:6:69"},{"name":"tail","nativeSrc":"62801:4:69","nodeType":"YulIdentifier","src":"62801:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"62728:63:69","nodeType":"YulIdentifier","src":"62728:63:69"},"nativeSrc":"62728:78:69","nodeType":"YulFunctionCall","src":"62728:78:69"},"variableNames":[{"name":"tail","nativeSrc":"62720:4:69","nodeType":"YulIdentifier","src":"62720:4:69"}]}]},"name":"abi_encode_tuple_t_address_t_address_t_string_memory_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed","nativeSrc":"62280:533:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"62410:9:69","nodeType":"YulTypedName","src":"62410:9:69","type":""},{"name":"value2","nativeSrc":"62422:6:69","nodeType":"YulTypedName","src":"62422:6:69","type":""},{"name":"value1","nativeSrc":"62430:6:69","nodeType":"YulTypedName","src":"62430:6:69","type":""},{"name":"value0","nativeSrc":"62438:6:69","nodeType":"YulTypedName","src":"62438:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"62449:4:69","nodeType":"YulTypedName","src":"62449:4:69","type":""}],"src":"62280:533:69"},{"body":{"nativeSrc":"62925:76:69","nodeType":"YulBlock","src":"62925:76:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"62947:6:69","nodeType":"YulIdentifier","src":"62947:6:69"},{"kind":"number","nativeSrc":"62955:1:69","nodeType":"YulLiteral","src":"62955:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"62943:3:69","nodeType":"YulIdentifier","src":"62943:3:69"},"nativeSrc":"62943:14:69","nodeType":"YulFunctionCall","src":"62943:14:69"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nativeSrc":"62959:34:69","nodeType":"YulLiteral","src":"62959:34:69","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nativeSrc":"62936:6:69","nodeType":"YulIdentifier","src":"62936:6:69"},"nativeSrc":"62936:58:69","nodeType":"YulFunctionCall","src":"62936:58:69"},"nativeSrc":"62936:58:69","nodeType":"YulExpressionStatement","src":"62936:58:69"}]},"name":"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","nativeSrc":"62819:182:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"62917:6:69","nodeType":"YulTypedName","src":"62917:6:69","type":""}],"src":"62819:182:69"},{"body":{"nativeSrc":"63153:220:69","nodeType":"YulBlock","src":"63153:220:69","statements":[{"nativeSrc":"63163:74:69","nodeType":"YulAssignment","src":"63163:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"63229:3:69","nodeType":"YulIdentifier","src":"63229:3:69"},{"kind":"number","nativeSrc":"63234:2:69","nodeType":"YulLiteral","src":"63234:2:69","type":"","value":"32"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"63170:58:69","nodeType":"YulIdentifier","src":"63170:58:69"},"nativeSrc":"63170:67:69","nodeType":"YulFunctionCall","src":"63170:67:69"},"variableNames":[{"name":"pos","nativeSrc":"63163:3:69","nodeType":"YulIdentifier","src":"63163:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"63335:3:69","nodeType":"YulIdentifier","src":"63335:3:69"}],"functionName":{"name":"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","nativeSrc":"63246:88:69","nodeType":"YulIdentifier","src":"63246:88:69"},"nativeSrc":"63246:93:69","nodeType":"YulFunctionCall","src":"63246:93:69"},"nativeSrc":"63246:93:69","nodeType":"YulExpressionStatement","src":"63246:93:69"},{"nativeSrc":"63348:19:69","nodeType":"YulAssignment","src":"63348:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"63359:3:69","nodeType":"YulIdentifier","src":"63359:3:69"},{"kind":"number","nativeSrc":"63364:2:69","nodeType":"YulLiteral","src":"63364:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"63355:3:69","nodeType":"YulIdentifier","src":"63355:3:69"},"nativeSrc":"63355:12:69","nodeType":"YulFunctionCall","src":"63355:12:69"},"variableNames":[{"name":"end","nativeSrc":"63348:3:69","nodeType":"YulIdentifier","src":"63348:3:69"}]}]},"name":"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack","nativeSrc":"63007:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"63141:3:69","nodeType":"YulTypedName","src":"63141:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"63149:3:69","nodeType":"YulTypedName","src":"63149:3:69","type":""}],"src":"63007:366:69"},{"body":{"nativeSrc":"63550:248:69","nodeType":"YulBlock","src":"63550:248:69","statements":[{"nativeSrc":"63560:26:69","nodeType":"YulAssignment","src":"63560:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"63572:9:69","nodeType":"YulIdentifier","src":"63572:9:69"},{"kind":"number","nativeSrc":"63583:2:69","nodeType":"YulLiteral","src":"63583:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"63568:3:69","nodeType":"YulIdentifier","src":"63568:3:69"},"nativeSrc":"63568:18:69","nodeType":"YulFunctionCall","src":"63568:18:69"},"variableNames":[{"name":"tail","nativeSrc":"63560:4:69","nodeType":"YulIdentifier","src":"63560:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"63607:9:69","nodeType":"YulIdentifier","src":"63607:9:69"},{"kind":"number","nativeSrc":"63618:1:69","nodeType":"YulLiteral","src":"63618:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"63603:3:69","nodeType":"YulIdentifier","src":"63603:3:69"},"nativeSrc":"63603:17:69","nodeType":"YulFunctionCall","src":"63603:17:69"},{"arguments":[{"name":"tail","nativeSrc":"63626:4:69","nodeType":"YulIdentifier","src":"63626:4:69"},{"name":"headStart","nativeSrc":"63632:9:69","nodeType":"YulIdentifier","src":"63632:9:69"}],"functionName":{"name":"sub","nativeSrc":"63622:3:69","nodeType":"YulIdentifier","src":"63622:3:69"},"nativeSrc":"63622:20:69","nodeType":"YulFunctionCall","src":"63622:20:69"}],"functionName":{"name":"mstore","nativeSrc":"63596:6:69","nodeType":"YulIdentifier","src":"63596:6:69"},"nativeSrc":"63596:47:69","nodeType":"YulFunctionCall","src":"63596:47:69"},"nativeSrc":"63596:47:69","nodeType":"YulExpressionStatement","src":"63596:47:69"},{"nativeSrc":"63652:139:69","nodeType":"YulAssignment","src":"63652:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"63786:4:69","nodeType":"YulIdentifier","src":"63786:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack","nativeSrc":"63660:124:69","nodeType":"YulIdentifier","src":"63660:124:69"},"nativeSrc":"63660:131:69","nodeType":"YulFunctionCall","src":"63660:131:69"},"variableNames":[{"name":"tail","nativeSrc":"63652:4:69","nodeType":"YulIdentifier","src":"63652:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"63379:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"63530:9:69","nodeType":"YulTypedName","src":"63530:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"63545:4:69","nodeType":"YulTypedName","src":"63545:4:69","type":""}],"src":"63379:419:69"},{"body":{"nativeSrc":"63910:118:69","nodeType":"YulBlock","src":"63910:118:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"63932:6:69","nodeType":"YulIdentifier","src":"63932:6:69"},{"kind":"number","nativeSrc":"63940:1:69","nodeType":"YulLiteral","src":"63940:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"63928:3:69","nodeType":"YulIdentifier","src":"63928:3:69"},"nativeSrc":"63928:14:69","nodeType":"YulFunctionCall","src":"63928:14:69"},{"hexValue":"696e76616c696420616365737320636f6e74726f6c206d616e61676572206164","kind":"string","nativeSrc":"63944:34:69","nodeType":"YulLiteral","src":"63944:34:69","type":"","value":"invalid acess control manager ad"}],"functionName":{"name":"mstore","nativeSrc":"63921:6:69","nodeType":"YulIdentifier","src":"63921:6:69"},"nativeSrc":"63921:58:69","nodeType":"YulFunctionCall","src":"63921:58:69"},"nativeSrc":"63921:58:69","nodeType":"YulExpressionStatement","src":"63921:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"64000:6:69","nodeType":"YulIdentifier","src":"64000:6:69"},{"kind":"number","nativeSrc":"64008:2:69","nodeType":"YulLiteral","src":"64008:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"63996:3:69","nodeType":"YulIdentifier","src":"63996:3:69"},"nativeSrc":"63996:15:69","nodeType":"YulFunctionCall","src":"63996:15:69"},{"hexValue":"6472657373","kind":"string","nativeSrc":"64013:7:69","nodeType":"YulLiteral","src":"64013:7:69","type":"","value":"dress"}],"functionName":{"name":"mstore","nativeSrc":"63989:6:69","nodeType":"YulIdentifier","src":"63989:6:69"},"nativeSrc":"63989:32:69","nodeType":"YulFunctionCall","src":"63989:32:69"},"nativeSrc":"63989:32:69","nodeType":"YulExpressionStatement","src":"63989:32:69"}]},"name":"store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb","nativeSrc":"63804:224:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"63902:6:69","nodeType":"YulTypedName","src":"63902:6:69","type":""}],"src":"63804:224:69"},{"body":{"nativeSrc":"64180:220:69","nodeType":"YulBlock","src":"64180:220:69","statements":[{"nativeSrc":"64190:74:69","nodeType":"YulAssignment","src":"64190:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"64256:3:69","nodeType":"YulIdentifier","src":"64256:3:69"},{"kind":"number","nativeSrc":"64261:2:69","nodeType":"YulLiteral","src":"64261:2:69","type":"","value":"37"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"64197:58:69","nodeType":"YulIdentifier","src":"64197:58:69"},"nativeSrc":"64197:67:69","nodeType":"YulFunctionCall","src":"64197:67:69"},"variableNames":[{"name":"pos","nativeSrc":"64190:3:69","nodeType":"YulIdentifier","src":"64190:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"64362:3:69","nodeType":"YulIdentifier","src":"64362:3:69"}],"functionName":{"name":"store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb","nativeSrc":"64273:88:69","nodeType":"YulIdentifier","src":"64273:88:69"},"nativeSrc":"64273:93:69","nodeType":"YulFunctionCall","src":"64273:93:69"},"nativeSrc":"64273:93:69","nodeType":"YulExpressionStatement","src":"64273:93:69"},{"nativeSrc":"64375:19:69","nodeType":"YulAssignment","src":"64375:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"64386:3:69","nodeType":"YulIdentifier","src":"64386:3:69"},{"kind":"number","nativeSrc":"64391:2:69","nodeType":"YulLiteral","src":"64391:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"64382:3:69","nodeType":"YulIdentifier","src":"64382:3:69"},"nativeSrc":"64382:12:69","nodeType":"YulFunctionCall","src":"64382:12:69"},"variableNames":[{"name":"end","nativeSrc":"64375:3:69","nodeType":"YulIdentifier","src":"64375:3:69"}]}]},"name":"abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack","nativeSrc":"64034:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"64168:3:69","nodeType":"YulTypedName","src":"64168:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"64176:3:69","nodeType":"YulTypedName","src":"64176:3:69","type":""}],"src":"64034:366:69"},{"body":{"nativeSrc":"64577:248:69","nodeType":"YulBlock","src":"64577:248:69","statements":[{"nativeSrc":"64587:26:69","nodeType":"YulAssignment","src":"64587:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"64599:9:69","nodeType":"YulIdentifier","src":"64599:9:69"},{"kind":"number","nativeSrc":"64610:2:69","nodeType":"YulLiteral","src":"64610:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"64595:3:69","nodeType":"YulIdentifier","src":"64595:3:69"},"nativeSrc":"64595:18:69","nodeType":"YulFunctionCall","src":"64595:18:69"},"variableNames":[{"name":"tail","nativeSrc":"64587:4:69","nodeType":"YulIdentifier","src":"64587:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"64634:9:69","nodeType":"YulIdentifier","src":"64634:9:69"},{"kind":"number","nativeSrc":"64645:1:69","nodeType":"YulLiteral","src":"64645:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"64630:3:69","nodeType":"YulIdentifier","src":"64630:3:69"},"nativeSrc":"64630:17:69","nodeType":"YulFunctionCall","src":"64630:17:69"},{"arguments":[{"name":"tail","nativeSrc":"64653:4:69","nodeType":"YulIdentifier","src":"64653:4:69"},{"name":"headStart","nativeSrc":"64659:9:69","nodeType":"YulIdentifier","src":"64659:9:69"}],"functionName":{"name":"sub","nativeSrc":"64649:3:69","nodeType":"YulIdentifier","src":"64649:3:69"},"nativeSrc":"64649:20:69","nodeType":"YulFunctionCall","src":"64649:20:69"}],"functionName":{"name":"mstore","nativeSrc":"64623:6:69","nodeType":"YulIdentifier","src":"64623:6:69"},"nativeSrc":"64623:47:69","nodeType":"YulFunctionCall","src":"64623:47:69"},"nativeSrc":"64623:47:69","nodeType":"YulExpressionStatement","src":"64623:47:69"},{"nativeSrc":"64679:139:69","nodeType":"YulAssignment","src":"64679:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"64813:4:69","nodeType":"YulIdentifier","src":"64813:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack","nativeSrc":"64687:124:69","nodeType":"YulIdentifier","src":"64687:124:69"},"nativeSrc":"64687:131:69","nodeType":"YulFunctionCall","src":"64687:131:69"},"variableNames":[{"name":"tail","nativeSrc":"64679:4:69","nodeType":"YulIdentifier","src":"64679:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"64406:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"64557:9:69","nodeType":"YulTypedName","src":"64557:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"64572:4:69","nodeType":"YulTypedName","src":"64572:4:69","type":""}],"src":"64406:419:69"},{"body":{"nativeSrc":"64885:62:69","nodeType":"YulBlock","src":"64885:62:69","statements":[{"body":{"nativeSrc":"64919:22:69","nodeType":"YulBlock","src":"64919:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x21","nativeSrc":"64921:16:69","nodeType":"YulIdentifier","src":"64921:16:69"},"nativeSrc":"64921:18:69","nodeType":"YulFunctionCall","src":"64921:18:69"},"nativeSrc":"64921:18:69","nodeType":"YulExpressionStatement","src":"64921:18:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"64908:5:69","nodeType":"YulIdentifier","src":"64908:5:69"},{"kind":"number","nativeSrc":"64915:1:69","nodeType":"YulLiteral","src":"64915:1:69","type":"","value":"9"}],"functionName":{"name":"lt","nativeSrc":"64905:2:69","nodeType":"YulIdentifier","src":"64905:2:69"},"nativeSrc":"64905:12:69","nodeType":"YulFunctionCall","src":"64905:12:69"}],"functionName":{"name":"iszero","nativeSrc":"64898:6:69","nodeType":"YulIdentifier","src":"64898:6:69"},"nativeSrc":"64898:20:69","nodeType":"YulFunctionCall","src":"64898:20:69"},"nativeSrc":"64895:46:69","nodeType":"YulIf","src":"64895:46:69"}]},"name":"validator_assert_t_enum$_Action_$9148","nativeSrc":"64831:116:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"64878:5:69","nodeType":"YulTypedName","src":"64878:5:69","type":""}],"src":"64831:116:69"},{"body":{"nativeSrc":"65009:77:69","nodeType":"YulBlock","src":"65009:77:69","statements":[{"nativeSrc":"65019:16:69","nodeType":"YulAssignment","src":"65019:16:69","value":{"name":"value","nativeSrc":"65030:5:69","nodeType":"YulIdentifier","src":"65030:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"65019:7:69","nodeType":"YulIdentifier","src":"65019:7:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"65074:5:69","nodeType":"YulIdentifier","src":"65074:5:69"}],"functionName":{"name":"validator_assert_t_enum$_Action_$9148","nativeSrc":"65036:37:69","nodeType":"YulIdentifier","src":"65036:37:69"},"nativeSrc":"65036:44:69","nodeType":"YulFunctionCall","src":"65036:44:69"},"nativeSrc":"65036:44:69","nodeType":"YulExpressionStatement","src":"65036:44:69"}]},"name":"cleanup_t_enum$_Action_$9148","nativeSrc":"64953:133:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"64991:5:69","nodeType":"YulTypedName","src":"64991:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"65001:7:69","nodeType":"YulTypedName","src":"65001:7:69","type":""}],"src":"64953:133:69"},{"body":{"nativeSrc":"65161:64:69","nodeType":"YulBlock","src":"65161:64:69","statements":[{"nativeSrc":"65171:48:69","nodeType":"YulAssignment","src":"65171:48:69","value":{"arguments":[{"name":"value","nativeSrc":"65213:5:69","nodeType":"YulIdentifier","src":"65213:5:69"}],"functionName":{"name":"cleanup_t_enum$_Action_$9148","nativeSrc":"65184:28:69","nodeType":"YulIdentifier","src":"65184:28:69"},"nativeSrc":"65184:35:69","nodeType":"YulFunctionCall","src":"65184:35:69"},"variableNames":[{"name":"converted","nativeSrc":"65171:9:69","nodeType":"YulIdentifier","src":"65171:9:69"}]}]},"name":"convert_t_enum$_Action_$9148_to_t_uint8","nativeSrc":"65092:133:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"65141:5:69","nodeType":"YulTypedName","src":"65141:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"65151:9:69","nodeType":"YulTypedName","src":"65151:9:69","type":""}],"src":"65092:133:69"},{"body":{"nativeSrc":"65305:75:69","nodeType":"YulBlock","src":"65305:75:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"65322:3:69","nodeType":"YulIdentifier","src":"65322:3:69"},{"arguments":[{"name":"value","nativeSrc":"65367:5:69","nodeType":"YulIdentifier","src":"65367:5:69"}],"functionName":{"name":"convert_t_enum$_Action_$9148_to_t_uint8","nativeSrc":"65327:39:69","nodeType":"YulIdentifier","src":"65327:39:69"},"nativeSrc":"65327:46:69","nodeType":"YulFunctionCall","src":"65327:46:69"}],"functionName":{"name":"mstore","nativeSrc":"65315:6:69","nodeType":"YulIdentifier","src":"65315:6:69"},"nativeSrc":"65315:59:69","nodeType":"YulFunctionCall","src":"65315:59:69"},"nativeSrc":"65315:59:69","nodeType":"YulExpressionStatement","src":"65315:59:69"}]},"name":"abi_encode_t_enum$_Action_$9148_to_t_uint8_fromStack","nativeSrc":"65231:149:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"65293:5:69","nodeType":"YulTypedName","src":"65293:5:69","type":""},{"name":"pos","nativeSrc":"65300:3:69","nodeType":"YulTypedName","src":"65300:3:69","type":""}],"src":"65231:149:69"},{"body":{"nativeSrc":"65521:215:69","nodeType":"YulBlock","src":"65521:215:69","statements":[{"nativeSrc":"65531:26:69","nodeType":"YulAssignment","src":"65531:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"65543:9:69","nodeType":"YulIdentifier","src":"65543:9:69"},{"kind":"number","nativeSrc":"65554:2:69","nodeType":"YulLiteral","src":"65554:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"65539:3:69","nodeType":"YulIdentifier","src":"65539:3:69"},"nativeSrc":"65539:18:69","nodeType":"YulFunctionCall","src":"65539:18:69"},"variableNames":[{"name":"tail","nativeSrc":"65531:4:69","nodeType":"YulIdentifier","src":"65531:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"65611:6:69","nodeType":"YulIdentifier","src":"65611:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"65624:9:69","nodeType":"YulIdentifier","src":"65624:9:69"},{"kind":"number","nativeSrc":"65635:1:69","nodeType":"YulLiteral","src":"65635:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"65620:3:69","nodeType":"YulIdentifier","src":"65620:3:69"},"nativeSrc":"65620:17:69","nodeType":"YulFunctionCall","src":"65620:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"65567:43:69","nodeType":"YulIdentifier","src":"65567:43:69"},"nativeSrc":"65567:71:69","nodeType":"YulFunctionCall","src":"65567:71:69"},"nativeSrc":"65567:71:69","nodeType":"YulExpressionStatement","src":"65567:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"65701:6:69","nodeType":"YulIdentifier","src":"65701:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"65714:9:69","nodeType":"YulIdentifier","src":"65714:9:69"},{"kind":"number","nativeSrc":"65725:2:69","nodeType":"YulLiteral","src":"65725:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"65710:3:69","nodeType":"YulIdentifier","src":"65710:3:69"},"nativeSrc":"65710:18:69","nodeType":"YulFunctionCall","src":"65710:18:69"}],"functionName":{"name":"abi_encode_t_enum$_Action_$9148_to_t_uint8_fromStack","nativeSrc":"65648:52:69","nodeType":"YulIdentifier","src":"65648:52:69"},"nativeSrc":"65648:81:69","nodeType":"YulFunctionCall","src":"65648:81:69"},"nativeSrc":"65648:81:69","nodeType":"YulExpressionStatement","src":"65648:81:69"}]},"name":"abi_encode_tuple_t_address_t_enum$_Action_$9148__to_t_address_t_uint8__fromStack_reversed","nativeSrc":"65386:350:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"65485:9:69","nodeType":"YulTypedName","src":"65485:9:69","type":""},{"name":"value1","nativeSrc":"65497:6:69","nodeType":"YulTypedName","src":"65497:6:69","type":""},{"name":"value0","nativeSrc":"65505:6:69","nodeType":"YulTypedName","src":"65505:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"65516:4:69","nodeType":"YulTypedName","src":"65516:4:69","type":""}],"src":"65386:350:69"},{"body":{"nativeSrc":"65848:121:69","nodeType":"YulBlock","src":"65848:121:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"65870:6:69","nodeType":"YulIdentifier","src":"65870:6:69"},{"kind":"number","nativeSrc":"65878:1:69","nodeType":"YulLiteral","src":"65878:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"65866:3:69","nodeType":"YulIdentifier","src":"65866:3:69"},"nativeSrc":"65866:14:69","nodeType":"YulFunctionCall","src":"65866:14:69"},{"hexValue":"63616e6e6f742070617573652061206d61726b65742074686174206973206e6f","kind":"string","nativeSrc":"65882:34:69","nodeType":"YulLiteral","src":"65882:34:69","type":"","value":"cannot pause a market that is no"}],"functionName":{"name":"mstore","nativeSrc":"65859:6:69","nodeType":"YulIdentifier","src":"65859:6:69"},"nativeSrc":"65859:58:69","nodeType":"YulFunctionCall","src":"65859:58:69"},"nativeSrc":"65859:58:69","nodeType":"YulExpressionStatement","src":"65859:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"65938:6:69","nodeType":"YulIdentifier","src":"65938:6:69"},{"kind":"number","nativeSrc":"65946:2:69","nodeType":"YulLiteral","src":"65946:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"65934:3:69","nodeType":"YulIdentifier","src":"65934:3:69"},"nativeSrc":"65934:15:69","nodeType":"YulFunctionCall","src":"65934:15:69"},{"hexValue":"74206c6973746564","kind":"string","nativeSrc":"65951:10:69","nodeType":"YulLiteral","src":"65951:10:69","type":"","value":"t listed"}],"functionName":{"name":"mstore","nativeSrc":"65927:6:69","nodeType":"YulIdentifier","src":"65927:6:69"},"nativeSrc":"65927:35:69","nodeType":"YulFunctionCall","src":"65927:35:69"},"nativeSrc":"65927:35:69","nodeType":"YulExpressionStatement","src":"65927:35:69"}]},"name":"store_literal_in_memory_0ad46837fefc66a37a27d365ae7d6446a39b33a37d743c62daa13796b21a9a61","nativeSrc":"65742:227:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"65840:6:69","nodeType":"YulTypedName","src":"65840:6:69","type":""}],"src":"65742:227:69"},{"body":{"nativeSrc":"66121:220:69","nodeType":"YulBlock","src":"66121:220:69","statements":[{"nativeSrc":"66131:74:69","nodeType":"YulAssignment","src":"66131:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"66197:3:69","nodeType":"YulIdentifier","src":"66197:3:69"},{"kind":"number","nativeSrc":"66202:2:69","nodeType":"YulLiteral","src":"66202:2:69","type":"","value":"40"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"66138:58:69","nodeType":"YulIdentifier","src":"66138:58:69"},"nativeSrc":"66138:67:69","nodeType":"YulFunctionCall","src":"66138:67:69"},"variableNames":[{"name":"pos","nativeSrc":"66131:3:69","nodeType":"YulIdentifier","src":"66131:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"66303:3:69","nodeType":"YulIdentifier","src":"66303:3:69"}],"functionName":{"name":"store_literal_in_memory_0ad46837fefc66a37a27d365ae7d6446a39b33a37d743c62daa13796b21a9a61","nativeSrc":"66214:88:69","nodeType":"YulIdentifier","src":"66214:88:69"},"nativeSrc":"66214:93:69","nodeType":"YulFunctionCall","src":"66214:93:69"},"nativeSrc":"66214:93:69","nodeType":"YulExpressionStatement","src":"66214:93:69"},{"nativeSrc":"66316:19:69","nodeType":"YulAssignment","src":"66316:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"66327:3:69","nodeType":"YulIdentifier","src":"66327:3:69"},{"kind":"number","nativeSrc":"66332:2:69","nodeType":"YulLiteral","src":"66332:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"66323:3:69","nodeType":"YulIdentifier","src":"66323:3:69"},"nativeSrc":"66323:12:69","nodeType":"YulFunctionCall","src":"66323:12:69"},"variableNames":[{"name":"end","nativeSrc":"66316:3:69","nodeType":"YulIdentifier","src":"66316:3:69"}]}]},"name":"abi_encode_t_stringliteral_0ad46837fefc66a37a27d365ae7d6446a39b33a37d743c62daa13796b21a9a61_to_t_string_memory_ptr_fromStack","nativeSrc":"65975:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"66109:3:69","nodeType":"YulTypedName","src":"66109:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"66117:3:69","nodeType":"YulTypedName","src":"66117:3:69","type":""}],"src":"65975:366:69"},{"body":{"nativeSrc":"66518:248:69","nodeType":"YulBlock","src":"66518:248:69","statements":[{"nativeSrc":"66528:26:69","nodeType":"YulAssignment","src":"66528:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"66540:9:69","nodeType":"YulIdentifier","src":"66540:9:69"},{"kind":"number","nativeSrc":"66551:2:69","nodeType":"YulLiteral","src":"66551:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"66536:3:69","nodeType":"YulIdentifier","src":"66536:3:69"},"nativeSrc":"66536:18:69","nodeType":"YulFunctionCall","src":"66536:18:69"},"variableNames":[{"name":"tail","nativeSrc":"66528:4:69","nodeType":"YulIdentifier","src":"66528:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"66575:9:69","nodeType":"YulIdentifier","src":"66575:9:69"},{"kind":"number","nativeSrc":"66586:1:69","nodeType":"YulLiteral","src":"66586:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"66571:3:69","nodeType":"YulIdentifier","src":"66571:3:69"},"nativeSrc":"66571:17:69","nodeType":"YulFunctionCall","src":"66571:17:69"},{"arguments":[{"name":"tail","nativeSrc":"66594:4:69","nodeType":"YulIdentifier","src":"66594:4:69"},{"name":"headStart","nativeSrc":"66600:9:69","nodeType":"YulIdentifier","src":"66600:9:69"}],"functionName":{"name":"sub","nativeSrc":"66590:3:69","nodeType":"YulIdentifier","src":"66590:3:69"},"nativeSrc":"66590:20:69","nodeType":"YulFunctionCall","src":"66590:20:69"}],"functionName":{"name":"mstore","nativeSrc":"66564:6:69","nodeType":"YulIdentifier","src":"66564:6:69"},"nativeSrc":"66564:47:69","nodeType":"YulFunctionCall","src":"66564:47:69"},"nativeSrc":"66564:47:69","nodeType":"YulExpressionStatement","src":"66564:47:69"},{"nativeSrc":"66620:139:69","nodeType":"YulAssignment","src":"66620:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"66754:4:69","nodeType":"YulIdentifier","src":"66754:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_0ad46837fefc66a37a27d365ae7d6446a39b33a37d743c62daa13796b21a9a61_to_t_string_memory_ptr_fromStack","nativeSrc":"66628:124:69","nodeType":"YulIdentifier","src":"66628:124:69"},"nativeSrc":"66628:131:69","nodeType":"YulFunctionCall","src":"66628:131:69"},"variableNames":[{"name":"tail","nativeSrc":"66620:4:69","nodeType":"YulIdentifier","src":"66620:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_0ad46837fefc66a37a27d365ae7d6446a39b33a37d743c62daa13796b21a9a61__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"66347:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"66498:9:69","nodeType":"YulTypedName","src":"66498:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"66513:4:69","nodeType":"YulTypedName","src":"66513:4:69","type":""}],"src":"66347:419:69"},{"body":{"nativeSrc":"66945:307:69","nodeType":"YulBlock","src":"66945:307:69","statements":[{"nativeSrc":"66955:26:69","nodeType":"YulAssignment","src":"66955:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"66967:9:69","nodeType":"YulIdentifier","src":"66967:9:69"},{"kind":"number","nativeSrc":"66978:2:69","nodeType":"YulLiteral","src":"66978:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"66963:3:69","nodeType":"YulIdentifier","src":"66963:3:69"},"nativeSrc":"66963:18:69","nodeType":"YulFunctionCall","src":"66963:18:69"},"variableNames":[{"name":"tail","nativeSrc":"66955:4:69","nodeType":"YulIdentifier","src":"66955:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"67051:6:69","nodeType":"YulIdentifier","src":"67051:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"67064:9:69","nodeType":"YulIdentifier","src":"67064:9:69"},{"kind":"number","nativeSrc":"67075:1:69","nodeType":"YulLiteral","src":"67075:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"67060:3:69","nodeType":"YulIdentifier","src":"67060:3:69"},"nativeSrc":"67060:17:69","nodeType":"YulFunctionCall","src":"67060:17:69"}],"functionName":{"name":"abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack","nativeSrc":"66991:59:69","nodeType":"YulIdentifier","src":"66991:59:69"},"nativeSrc":"66991:87:69","nodeType":"YulFunctionCall","src":"66991:87:69"},"nativeSrc":"66991:87:69","nodeType":"YulExpressionStatement","src":"66991:87:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"67141:6:69","nodeType":"YulIdentifier","src":"67141:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"67154:9:69","nodeType":"YulIdentifier","src":"67154:9:69"},{"kind":"number","nativeSrc":"67165:2:69","nodeType":"YulLiteral","src":"67165:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"67150:3:69","nodeType":"YulIdentifier","src":"67150:3:69"},"nativeSrc":"67150:18:69","nodeType":"YulFunctionCall","src":"67150:18:69"}],"functionName":{"name":"abi_encode_t_enum$_Action_$9148_to_t_uint8_fromStack","nativeSrc":"67088:52:69","nodeType":"YulIdentifier","src":"67088:52:69"},"nativeSrc":"67088:81:69","nodeType":"YulFunctionCall","src":"67088:81:69"},"nativeSrc":"67088:81:69","nodeType":"YulExpressionStatement","src":"67088:81:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"67217:6:69","nodeType":"YulIdentifier","src":"67217:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"67230:9:69","nodeType":"YulIdentifier","src":"67230:9:69"},{"kind":"number","nativeSrc":"67241:2:69","nodeType":"YulLiteral","src":"67241:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"67226:3:69","nodeType":"YulIdentifier","src":"67226:3:69"},"nativeSrc":"67226:18:69","nodeType":"YulFunctionCall","src":"67226:18:69"}],"functionName":{"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"67179:37:69","nodeType":"YulIdentifier","src":"67179:37:69"},"nativeSrc":"67179:66:69","nodeType":"YulFunctionCall","src":"67179:66:69"},"nativeSrc":"67179:66:69","nodeType":"YulExpressionStatement","src":"67179:66:69"}]},"name":"abi_encode_tuple_t_contract$_VToken_$15506_t_enum$_Action_$9148_t_bool__to_t_address_t_uint8_t_bool__fromStack_reversed","nativeSrc":"66772:480:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"66901:9:69","nodeType":"YulTypedName","src":"66901:9:69","type":""},{"name":"value2","nativeSrc":"66913:6:69","nodeType":"YulTypedName","src":"66913:6:69","type":""},{"name":"value1","nativeSrc":"66921:6:69","nodeType":"YulTypedName","src":"66921:6:69","type":""},{"name":"value0","nativeSrc":"66929:6:69","nodeType":"YulTypedName","src":"66929:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"66940:4:69","nodeType":"YulTypedName","src":"66940:4:69","type":""}],"src":"66772:480:69"},{"body":{"nativeSrc":"67386:692:69","nodeType":"YulBlock","src":"67386:692:69","statements":[{"body":{"nativeSrc":"67433:83:69","nodeType":"YulBlock","src":"67433:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"67435:77:69","nodeType":"YulIdentifier","src":"67435:77:69"},"nativeSrc":"67435:79:69","nodeType":"YulFunctionCall","src":"67435:79:69"},"nativeSrc":"67435:79:69","nodeType":"YulExpressionStatement","src":"67435:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"67407:7:69","nodeType":"YulIdentifier","src":"67407:7:69"},{"name":"headStart","nativeSrc":"67416:9:69","nodeType":"YulIdentifier","src":"67416:9:69"}],"functionName":{"name":"sub","nativeSrc":"67403:3:69","nodeType":"YulIdentifier","src":"67403:3:69"},"nativeSrc":"67403:23:69","nodeType":"YulFunctionCall","src":"67403:23:69"},{"kind":"number","nativeSrc":"67428:3:69","nodeType":"YulLiteral","src":"67428:3:69","type":"","value":"128"}],"functionName":{"name":"slt","nativeSrc":"67399:3:69","nodeType":"YulIdentifier","src":"67399:3:69"},"nativeSrc":"67399:33:69","nodeType":"YulFunctionCall","src":"67399:33:69"},"nativeSrc":"67396:120:69","nodeType":"YulIf","src":"67396:120:69"},{"nativeSrc":"67526:128:69","nodeType":"YulBlock","src":"67526:128:69","statements":[{"nativeSrc":"67541:15:69","nodeType":"YulVariableDeclaration","src":"67541:15:69","value":{"kind":"number","nativeSrc":"67555:1:69","nodeType":"YulLiteral","src":"67555:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"67545:6:69","nodeType":"YulTypedName","src":"67545:6:69","type":""}]},{"nativeSrc":"67570:74:69","nodeType":"YulAssignment","src":"67570:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"67616:9:69","nodeType":"YulIdentifier","src":"67616:9:69"},{"name":"offset","nativeSrc":"67627:6:69","nodeType":"YulIdentifier","src":"67627:6:69"}],"functionName":{"name":"add","nativeSrc":"67612:3:69","nodeType":"YulIdentifier","src":"67612:3:69"},"nativeSrc":"67612:22:69","nodeType":"YulFunctionCall","src":"67612:22:69"},{"name":"dataEnd","nativeSrc":"67636:7:69","nodeType":"YulIdentifier","src":"67636:7:69"}],"functionName":{"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"67580:31:69","nodeType":"YulIdentifier","src":"67580:31:69"},"nativeSrc":"67580:64:69","nodeType":"YulFunctionCall","src":"67580:64:69"},"variableNames":[{"name":"value0","nativeSrc":"67570:6:69","nodeType":"YulIdentifier","src":"67570:6:69"}]}]},{"nativeSrc":"67664:129:69","nodeType":"YulBlock","src":"67664:129:69","statements":[{"nativeSrc":"67679:16:69","nodeType":"YulVariableDeclaration","src":"67679:16:69","value":{"kind":"number","nativeSrc":"67693:2:69","nodeType":"YulLiteral","src":"67693:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"67683:6:69","nodeType":"YulTypedName","src":"67683:6:69","type":""}]},{"nativeSrc":"67709:74:69","nodeType":"YulAssignment","src":"67709:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"67755:9:69","nodeType":"YulIdentifier","src":"67755:9:69"},{"name":"offset","nativeSrc":"67766:6:69","nodeType":"YulIdentifier","src":"67766:6:69"}],"functionName":{"name":"add","nativeSrc":"67751:3:69","nodeType":"YulIdentifier","src":"67751:3:69"},"nativeSrc":"67751:22:69","nodeType":"YulFunctionCall","src":"67751:22:69"},{"name":"dataEnd","nativeSrc":"67775:7:69","nodeType":"YulIdentifier","src":"67775:7:69"}],"functionName":{"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"67719:31:69","nodeType":"YulIdentifier","src":"67719:31:69"},"nativeSrc":"67719:64:69","nodeType":"YulFunctionCall","src":"67719:64:69"},"variableNames":[{"name":"value1","nativeSrc":"67709:6:69","nodeType":"YulIdentifier","src":"67709:6:69"}]}]},{"nativeSrc":"67803:129:69","nodeType":"YulBlock","src":"67803:129:69","statements":[{"nativeSrc":"67818:16:69","nodeType":"YulVariableDeclaration","src":"67818:16:69","value":{"kind":"number","nativeSrc":"67832:2:69","nodeType":"YulLiteral","src":"67832:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"67822:6:69","nodeType":"YulTypedName","src":"67822:6:69","type":""}]},{"nativeSrc":"67848:74:69","nodeType":"YulAssignment","src":"67848:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"67894:9:69","nodeType":"YulIdentifier","src":"67894:9:69"},{"name":"offset","nativeSrc":"67905:6:69","nodeType":"YulIdentifier","src":"67905:6:69"}],"functionName":{"name":"add","nativeSrc":"67890:3:69","nodeType":"YulIdentifier","src":"67890:3:69"},"nativeSrc":"67890:22:69","nodeType":"YulFunctionCall","src":"67890:22:69"},{"name":"dataEnd","nativeSrc":"67914:7:69","nodeType":"YulIdentifier","src":"67914:7:69"}],"functionName":{"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"67858:31:69","nodeType":"YulIdentifier","src":"67858:31:69"},"nativeSrc":"67858:64:69","nodeType":"YulFunctionCall","src":"67858:64:69"},"variableNames":[{"name":"value2","nativeSrc":"67848:6:69","nodeType":"YulIdentifier","src":"67848:6:69"}]}]},{"nativeSrc":"67942:129:69","nodeType":"YulBlock","src":"67942:129:69","statements":[{"nativeSrc":"67957:16:69","nodeType":"YulVariableDeclaration","src":"67957:16:69","value":{"kind":"number","nativeSrc":"67971:2:69","nodeType":"YulLiteral","src":"67971:2:69","type":"","value":"96"},"variables":[{"name":"offset","nativeSrc":"67961:6:69","nodeType":"YulTypedName","src":"67961:6:69","type":""}]},{"nativeSrc":"67987:74:69","nodeType":"YulAssignment","src":"67987:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"68033:9:69","nodeType":"YulIdentifier","src":"68033:9:69"},{"name":"offset","nativeSrc":"68044:6:69","nodeType":"YulIdentifier","src":"68044:6:69"}],"functionName":{"name":"add","nativeSrc":"68029:3:69","nodeType":"YulIdentifier","src":"68029:3:69"},"nativeSrc":"68029:22:69","nodeType":"YulFunctionCall","src":"68029:22:69"},{"name":"dataEnd","nativeSrc":"68053:7:69","nodeType":"YulIdentifier","src":"68053:7:69"}],"functionName":{"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"67997:31:69","nodeType":"YulIdentifier","src":"67997:31:69"},"nativeSrc":"67997:64:69","nodeType":"YulFunctionCall","src":"67997:64:69"},"variableNames":[{"name":"value3","nativeSrc":"67987:6:69","nodeType":"YulIdentifier","src":"67987:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256_fromMemory","nativeSrc":"67258:820:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"67332:9:69","nodeType":"YulTypedName","src":"67332:9:69","type":""},{"name":"dataEnd","nativeSrc":"67343:7:69","nodeType":"YulTypedName","src":"67343:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"67355:6:69","nodeType":"YulTypedName","src":"67355:6:69","type":""},{"name":"value1","nativeSrc":"67363:6:69","nodeType":"YulTypedName","src":"67363:6:69","type":""},{"name":"value2","nativeSrc":"67371:6:69","nodeType":"YulTypedName","src":"67371:6:69","type":""},{"name":"value3","nativeSrc":"67379:6:69","nodeType":"YulTypedName","src":"67379:6:69","type":""}],"src":"67258:820:69"},{"body":{"nativeSrc":"68190:115:69","nodeType":"YulBlock","src":"68190:115:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"68212:6:69","nodeType":"YulIdentifier","src":"68212:6:69"},{"kind":"number","nativeSrc":"68220:1:69","nodeType":"YulLiteral","src":"68220:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"68208:3:69","nodeType":"YulIdentifier","src":"68208:3:69"},"nativeSrc":"68208:14:69","nodeType":"YulFunctionCall","src":"68208:14:69"},{"hexValue":"436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d","kind":"string","nativeSrc":"68224:34:69","nodeType":"YulLiteral","src":"68224:34:69","type":"","value":"Comptroller: Invalid maxLoopsLim"}],"functionName":{"name":"mstore","nativeSrc":"68201:6:69","nodeType":"YulIdentifier","src":"68201:6:69"},"nativeSrc":"68201:58:69","nodeType":"YulFunctionCall","src":"68201:58:69"},"nativeSrc":"68201:58:69","nodeType":"YulExpressionStatement","src":"68201:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"68280:6:69","nodeType":"YulIdentifier","src":"68280:6:69"},{"kind":"number","nativeSrc":"68288:2:69","nodeType":"YulLiteral","src":"68288:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"68276:3:69","nodeType":"YulIdentifier","src":"68276:3:69"},"nativeSrc":"68276:15:69","nodeType":"YulFunctionCall","src":"68276:15:69"},{"hexValue":"6974","kind":"string","nativeSrc":"68293:4:69","nodeType":"YulLiteral","src":"68293:4:69","type":"","value":"it"}],"functionName":{"name":"mstore","nativeSrc":"68269:6:69","nodeType":"YulIdentifier","src":"68269:6:69"},"nativeSrc":"68269:29:69","nodeType":"YulFunctionCall","src":"68269:29:69"},"nativeSrc":"68269:29:69","nodeType":"YulExpressionStatement","src":"68269:29:69"}]},"name":"store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032","nativeSrc":"68084:221:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"68182:6:69","nodeType":"YulTypedName","src":"68182:6:69","type":""}],"src":"68084:221:69"},{"body":{"nativeSrc":"68457:220:69","nodeType":"YulBlock","src":"68457:220:69","statements":[{"nativeSrc":"68467:74:69","nodeType":"YulAssignment","src":"68467:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"68533:3:69","nodeType":"YulIdentifier","src":"68533:3:69"},{"kind":"number","nativeSrc":"68538:2:69","nodeType":"YulLiteral","src":"68538:2:69","type":"","value":"34"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"68474:58:69","nodeType":"YulIdentifier","src":"68474:58:69"},"nativeSrc":"68474:67:69","nodeType":"YulFunctionCall","src":"68474:67:69"},"variableNames":[{"name":"pos","nativeSrc":"68467:3:69","nodeType":"YulIdentifier","src":"68467:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"68639:3:69","nodeType":"YulIdentifier","src":"68639:3:69"}],"functionName":{"name":"store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032","nativeSrc":"68550:88:69","nodeType":"YulIdentifier","src":"68550:88:69"},"nativeSrc":"68550:93:69","nodeType":"YulFunctionCall","src":"68550:93:69"},"nativeSrc":"68550:93:69","nodeType":"YulExpressionStatement","src":"68550:93:69"},{"nativeSrc":"68652:19:69","nodeType":"YulAssignment","src":"68652:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"68663:3:69","nodeType":"YulIdentifier","src":"68663:3:69"},{"kind":"number","nativeSrc":"68668:2:69","nodeType":"YulLiteral","src":"68668:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"68659:3:69","nodeType":"YulIdentifier","src":"68659:3:69"},"nativeSrc":"68659:12:69","nodeType":"YulFunctionCall","src":"68659:12:69"},"variableNames":[{"name":"end","nativeSrc":"68652:3:69","nodeType":"YulIdentifier","src":"68652:3:69"}]}]},"name":"abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack","nativeSrc":"68311:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"68445:3:69","nodeType":"YulTypedName","src":"68445:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"68453:3:69","nodeType":"YulTypedName","src":"68453:3:69","type":""}],"src":"68311:366:69"},{"body":{"nativeSrc":"68854:248:69","nodeType":"YulBlock","src":"68854:248:69","statements":[{"nativeSrc":"68864:26:69","nodeType":"YulAssignment","src":"68864:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"68876:9:69","nodeType":"YulIdentifier","src":"68876:9:69"},{"kind":"number","nativeSrc":"68887:2:69","nodeType":"YulLiteral","src":"68887:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"68872:3:69","nodeType":"YulIdentifier","src":"68872:3:69"},"nativeSrc":"68872:18:69","nodeType":"YulFunctionCall","src":"68872:18:69"},"variableNames":[{"name":"tail","nativeSrc":"68864:4:69","nodeType":"YulIdentifier","src":"68864:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"68911:9:69","nodeType":"YulIdentifier","src":"68911:9:69"},{"kind":"number","nativeSrc":"68922:1:69","nodeType":"YulLiteral","src":"68922:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"68907:3:69","nodeType":"YulIdentifier","src":"68907:3:69"},"nativeSrc":"68907:17:69","nodeType":"YulFunctionCall","src":"68907:17:69"},{"arguments":[{"name":"tail","nativeSrc":"68930:4:69","nodeType":"YulIdentifier","src":"68930:4:69"},{"name":"headStart","nativeSrc":"68936:9:69","nodeType":"YulIdentifier","src":"68936:9:69"}],"functionName":{"name":"sub","nativeSrc":"68926:3:69","nodeType":"YulIdentifier","src":"68926:3:69"},"nativeSrc":"68926:20:69","nodeType":"YulFunctionCall","src":"68926:20:69"}],"functionName":{"name":"mstore","nativeSrc":"68900:6:69","nodeType":"YulIdentifier","src":"68900:6:69"},"nativeSrc":"68900:47:69","nodeType":"YulFunctionCall","src":"68900:47:69"},"nativeSrc":"68900:47:69","nodeType":"YulExpressionStatement","src":"68900:47:69"},{"nativeSrc":"68956:139:69","nodeType":"YulAssignment","src":"68956:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"69090:4:69","nodeType":"YulIdentifier","src":"69090:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack","nativeSrc":"68964:124:69","nodeType":"YulIdentifier","src":"68964:124:69"},"nativeSrc":"68964:131:69","nodeType":"YulFunctionCall","src":"68964:131:69"},"variableNames":[{"name":"tail","nativeSrc":"68956:4:69","nodeType":"YulIdentifier","src":"68956:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"68683:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"68834:9:69","nodeType":"YulTypedName","src":"68834:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"68849:4:69","nodeType":"YulTypedName","src":"68849:4:69","type":""}],"src":"68683:419:69"},{"body":{"nativeSrc":"69214:124:69","nodeType":"YulBlock","src":"69214:124:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"69236:6:69","nodeType":"YulIdentifier","src":"69236:6:69"},{"kind":"number","nativeSrc":"69244:1:69","nodeType":"YulLiteral","src":"69244:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"69232:3:69","nodeType":"YulIdentifier","src":"69232:3:69"},"nativeSrc":"69232:14:69","nodeType":"YulFunctionCall","src":"69232:14:69"},{"hexValue":"496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069","kind":"string","nativeSrc":"69248:34:69","nodeType":"YulLiteral","src":"69248:34:69","type":"","value":"Initializable: contract is not i"}],"functionName":{"name":"mstore","nativeSrc":"69225:6:69","nodeType":"YulIdentifier","src":"69225:6:69"},"nativeSrc":"69225:58:69","nodeType":"YulFunctionCall","src":"69225:58:69"},"nativeSrc":"69225:58:69","nodeType":"YulExpressionStatement","src":"69225:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"69304:6:69","nodeType":"YulIdentifier","src":"69304:6:69"},{"kind":"number","nativeSrc":"69312:2:69","nodeType":"YulLiteral","src":"69312:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"69300:3:69","nodeType":"YulIdentifier","src":"69300:3:69"},"nativeSrc":"69300:15:69","nodeType":"YulFunctionCall","src":"69300:15:69"},{"hexValue":"6e697469616c697a696e67","kind":"string","nativeSrc":"69317:13:69","nodeType":"YulLiteral","src":"69317:13:69","type":"","value":"nitializing"}],"functionName":{"name":"mstore","nativeSrc":"69293:6:69","nodeType":"YulIdentifier","src":"69293:6:69"},"nativeSrc":"69293:38:69","nodeType":"YulFunctionCall","src":"69293:38:69"},"nativeSrc":"69293:38:69","nodeType":"YulExpressionStatement","src":"69293:38:69"}]},"name":"store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b","nativeSrc":"69108:230:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"69206:6:69","nodeType":"YulTypedName","src":"69206:6:69","type":""}],"src":"69108:230:69"},{"body":{"nativeSrc":"69490:220:69","nodeType":"YulBlock","src":"69490:220:69","statements":[{"nativeSrc":"69500:74:69","nodeType":"YulAssignment","src":"69500:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"69566:3:69","nodeType":"YulIdentifier","src":"69566:3:69"},{"kind":"number","nativeSrc":"69571:2:69","nodeType":"YulLiteral","src":"69571:2:69","type":"","value":"43"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"69507:58:69","nodeType":"YulIdentifier","src":"69507:58:69"},"nativeSrc":"69507:67:69","nodeType":"YulFunctionCall","src":"69507:67:69"},"variableNames":[{"name":"pos","nativeSrc":"69500:3:69","nodeType":"YulIdentifier","src":"69500:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"69672:3:69","nodeType":"YulIdentifier","src":"69672:3:69"}],"functionName":{"name":"store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b","nativeSrc":"69583:88:69","nodeType":"YulIdentifier","src":"69583:88:69"},"nativeSrc":"69583:93:69","nodeType":"YulFunctionCall","src":"69583:93:69"},"nativeSrc":"69583:93:69","nodeType":"YulExpressionStatement","src":"69583:93:69"},{"nativeSrc":"69685:19:69","nodeType":"YulAssignment","src":"69685:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"69696:3:69","nodeType":"YulIdentifier","src":"69696:3:69"},{"kind":"number","nativeSrc":"69701:2:69","nodeType":"YulLiteral","src":"69701:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"69692:3:69","nodeType":"YulIdentifier","src":"69692:3:69"},"nativeSrc":"69692:12:69","nodeType":"YulFunctionCall","src":"69692:12:69"},"variableNames":[{"name":"end","nativeSrc":"69685:3:69","nodeType":"YulIdentifier","src":"69685:3:69"}]}]},"name":"abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack","nativeSrc":"69344:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"69478:3:69","nodeType":"YulTypedName","src":"69478:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"69486:3:69","nodeType":"YulTypedName","src":"69486:3:69","type":""}],"src":"69344:366:69"},{"body":{"nativeSrc":"69887:248:69","nodeType":"YulBlock","src":"69887:248:69","statements":[{"nativeSrc":"69897:26:69","nodeType":"YulAssignment","src":"69897:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"69909:9:69","nodeType":"YulIdentifier","src":"69909:9:69"},{"kind":"number","nativeSrc":"69920:2:69","nodeType":"YulLiteral","src":"69920:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"69905:3:69","nodeType":"YulIdentifier","src":"69905:3:69"},"nativeSrc":"69905:18:69","nodeType":"YulFunctionCall","src":"69905:18:69"},"variableNames":[{"name":"tail","nativeSrc":"69897:4:69","nodeType":"YulIdentifier","src":"69897:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"69944:9:69","nodeType":"YulIdentifier","src":"69944:9:69"},{"kind":"number","nativeSrc":"69955:1:69","nodeType":"YulLiteral","src":"69955:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"69940:3:69","nodeType":"YulIdentifier","src":"69940:3:69"},"nativeSrc":"69940:17:69","nodeType":"YulFunctionCall","src":"69940:17:69"},{"arguments":[{"name":"tail","nativeSrc":"69963:4:69","nodeType":"YulIdentifier","src":"69963:4:69"},{"name":"headStart","nativeSrc":"69969:9:69","nodeType":"YulIdentifier","src":"69969:9:69"}],"functionName":{"name":"sub","nativeSrc":"69959:3:69","nodeType":"YulIdentifier","src":"69959:3:69"},"nativeSrc":"69959:20:69","nodeType":"YulFunctionCall","src":"69959:20:69"}],"functionName":{"name":"mstore","nativeSrc":"69933:6:69","nodeType":"YulIdentifier","src":"69933:6:69"},"nativeSrc":"69933:47:69","nodeType":"YulFunctionCall","src":"69933:47:69"},"nativeSrc":"69933:47:69","nodeType":"YulExpressionStatement","src":"69933:47:69"},{"nativeSrc":"69989:139:69","nodeType":"YulAssignment","src":"69989:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"70123:4:69","nodeType":"YulIdentifier","src":"70123:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack","nativeSrc":"69997:124:69","nodeType":"YulIdentifier","src":"69997:124:69"},"nativeSrc":"69997:131:69","nodeType":"YulFunctionCall","src":"69997:131:69"},"variableNames":[{"name":"tail","nativeSrc":"69989:4:69","nodeType":"YulIdentifier","src":"69989:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"69716:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"69867:9:69","nodeType":"YulTypedName","src":"69867:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"69882:4:69","nodeType":"YulTypedName","src":"69882:4:69","type":""}],"src":"69716:419:69"}]},"contents":"{\n\n    function cleanup_t_bool(value) -> cleaned {\n        cleaned := iszero(iszero(value))\n    }\n\n    function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n        mstore(pos, cleanup_t_bool(value))\n    }\n\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_bool_to_t_bool_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint256(value))\n    }\n\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function validator_revert_t_uint256(value) {\n        if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_uint256(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n        revert(0, 0)\n    }\n\n    function revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490() {\n        revert(0, 0)\n    }\n\n    function revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() {\n        revert(0, 0)\n    }\n\n    // contract VToken[]\n    function abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr(offset, end) -> arrayPos, length {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490() }\n        arrayPos := add(offset, 0x20)\n        if gt(add(arrayPos, mul(length, 0x20)), end) { revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() }\n    }\n\n    // uint256[]\n    function abi_decode_t_array$_t_uint256_$dyn_calldata_ptr(offset, end) -> arrayPos, length {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490() }\n        arrayPos := add(offset, 0x20)\n        if gt(add(arrayPos, mul(length, 0x20)), end) { revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() }\n    }\n\n    function abi_decode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := calldataload(add(headStart, 0))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value0, value1 := abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := calldataload(add(headStart, 32))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value2, value3 := abi_decode_t_array$_t_uint256_$dyn_calldata_ptr(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_addresst_address(headStart, dataEnd) -> value0, value1, value2, value3 {\n        if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 96\n\n            value3 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4 {\n        if slt(sub(dataEnd, headStart), 160) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 96\n\n            value3 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 128\n\n            value4 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    // enum Action[]\n    function abi_decode_t_array$_t_enum$_Action_$9148_$dyn_calldata_ptr(offset, end) -> arrayPos, length {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490() }\n        arrayPos := add(offset, 0x20)\n        if gt(add(arrayPos, mul(length, 0x20)), end) { revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() }\n    }\n\n    function validator_revert_t_bool(value) {\n        if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_bool(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_bool(value)\n    }\n\n    function abi_decode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptrt_array$_t_enum$_Action_$9148_$dyn_calldata_ptrt_bool(headStart, dataEnd) -> value0, value1, value2, value3, value4 {\n        if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := calldataload(add(headStart, 0))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value0, value1 := abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := calldataload(add(headStart, 32))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value2, value3 := abi_decode_t_array$_t_enum$_Action_$9148_$dyn_calldata_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value4 := abi_decode_t_bool(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    // struct ComptrollerStorage.LiquidationOrder[]\n    function abi_decode_t_array$_t_struct$_LiquidationOrder_$9453_calldata_ptr_$dyn_calldata_ptr(offset, end) -> arrayPos, length {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490() }\n        arrayPos := add(offset, 0x20)\n        if gt(add(arrayPos, mul(length, 0x60)), end) { revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() }\n    }\n\n    function abi_decode_tuple_t_addresst_array$_t_struct$_LiquidationOrder_$9453_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := calldataload(add(headStart, 32))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value1, value2 := abi_decode_t_array$_t_struct$_LiquidationOrder_$9453_calldata_ptr_$dyn_calldata_ptr(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_contract$_VToken_$15506(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function validator_revert_t_contract$_VToken_$15506(value) {\n        if iszero(eq(value, cleanup_t_contract$_VToken_$15506(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_VToken_$15506(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_contract$_VToken_$15506(value)\n    }\n\n    function abi_decode_tuple_t_contract$_VToken_$15506(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_VToken_$15506(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3 {\n        if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 96\n\n            value3 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5 {\n        if slt(sub(dataEnd, headStart), 192) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 96\n\n            value3 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 128\n\n            value4 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 160\n\n            value5 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function identity(value) -> ret {\n        ret := value\n    }\n\n    function convert_t_uint160_to_t_uint160(value) -> converted {\n        converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n    }\n\n    function convert_t_uint160_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_uint160(value)\n    }\n\n    function convert_t_contract$_VToken_$15506_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_VToken_$15506_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_VToken_$15506__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function cleanup_t_contract$_ResilientOracleInterface_$16173(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function validator_revert_t_contract$_ResilientOracleInterface_$16173(value) {\n        if iszero(eq(value, cleanup_t_contract$_ResilientOracleInterface_$16173(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_ResilientOracleInterface_$16173(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_contract$_ResilientOracleInterface_$16173(value)\n    }\n\n    function abi_decode_tuple_t_contract$_ResilientOracleInterface_$16173(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_ResilientOracleInterface_$16173(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_contract$_RewardsDistributor_$12324(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function validator_revert_t_contract$_RewardsDistributor_$12324(value) {\n        if iszero(eq(value, cleanup_t_contract$_RewardsDistributor_$12324(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_RewardsDistributor_$12324(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_contract$_RewardsDistributor_$12324(value)\n    }\n\n    function abi_decode_tuple_t_contract$_RewardsDistributor_$12324(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_RewardsDistributor_$12324(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_contract$_VToken_$15506t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_VToken_$15506(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function array_length_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function array_dataslot_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr(ptr) -> data {\n        data := ptr\n\n        data := add(ptr, 0x20)\n\n    }\n\n    function convert_t_contract$_RewardsDistributor_$12324_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_RewardsDistributor_$12324_to_t_address(value, pos) {\n        mstore(pos, convert_t_contract$_RewardsDistributor_$12324_to_t_address(value))\n    }\n\n    function abi_encodeUpdatedPos_t_contract$_RewardsDistributor_$12324_to_t_address(value0, pos) -> updatedPos {\n        abi_encode_t_contract$_RewardsDistributor_$12324_to_t_address(value0, pos)\n        updatedPos := add(pos, 0x20)\n    }\n\n    function array_nextElement_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr(ptr) -> next {\n        next := add(ptr, 0x20)\n    }\n\n    // contract RewardsDistributor[] -> address[]\n    function abi_encode_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack(value, pos)  -> end  {\n        let length := array_length_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack(pos, length)\n        let baseRef := array_dataslot_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr(value)\n        let srcPtr := baseRef\n        for { let i := 0 } lt(i, length) { i := add(i, 1) }\n        {\n            let elementValue0 := mload(srcPtr)\n            pos := abi_encodeUpdatedPos_t_contract$_RewardsDistributor_$12324_to_t_address(elementValue0, pos)\n            srcPtr := array_nextElement_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr(srcPtr)\n        }\n        end := pos\n    }\n\n    function abi_encode_tuple_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack(value0,  tail)\n\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2, value3 {\n        if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 96\n\n            value3 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4 {\n        if slt(sub(dataEnd, headStart), 160) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 96\n\n            value3 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 128\n\n            value4 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function convert_t_contract$_ResilientOracleInterface_$16173_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_ResilientOracleInterface_$16173_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_ResilientOracleInterface_$16173_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_ResilientOracleInterface_$16173__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_ResilientOracleInterface_$16173_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_bool(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_encode_tuple_t_bool_t_uint256_t_uint256__to_t_bool_t_uint256_t_uint256__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_bool_to_t_bool_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function abi_decode_tuple_t_addresst_contract$_VToken_$15506(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_contract$_VToken_$15506(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function array_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_dataslot_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(ptr) -> data {\n        data := ptr\n\n        data := add(ptr, 0x20)\n\n    }\n\n    function abi_encode_t_contract$_VToken_$15506_to_t_address(value, pos) {\n        mstore(pos, convert_t_contract$_VToken_$15506_to_t_address(value))\n    }\n\n    function abi_encodeUpdatedPos_t_contract$_VToken_$15506_to_t_address(value0, pos) -> updatedPos {\n        abi_encode_t_contract$_VToken_$15506_to_t_address(value0, pos)\n        updatedPos := add(pos, 0x20)\n    }\n\n    function array_nextElement_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(ptr) -> next {\n        next := add(ptr, 0x20)\n    }\n\n    // contract VToken[] -> address[]\n    function abi_encode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack(value, pos)  -> end  {\n        let length := array_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack(pos, length)\n        let baseRef := array_dataslot_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(value)\n        let srcPtr := baseRef\n        for { let i := 0 } lt(i, length) { i := add(i, 1) }\n        {\n            let elementValue0 := mload(srcPtr)\n            pos := abi_encodeUpdatedPos_t_contract$_VToken_$15506_to_t_address(elementValue0, pos)\n            srcPtr := array_nextElement_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(srcPtr)\n        }\n        end := pos\n    }\n\n    function abi_encode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack(value0,  tail)\n\n    }\n\n    function array_length_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function array_dataslot_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr(ptr) -> data {\n        data := ptr\n\n        data := add(ptr, 0x20)\n\n    }\n\n    function abi_encode_t_address_to_t_address(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function abi_encode_t_uint256_to_t_uint256(value, pos) {\n        mstore(pos, cleanup_t_uint256(value))\n    }\n\n    // struct ComptrollerStorage.RewardSpeeds -> struct ComptrollerStorage.RewardSpeeds\n    function abi_encode_t_struct$_RewardSpeeds_$9473_memory_ptr_to_t_struct$_RewardSpeeds_$9473_memory_ptr(value, pos)  {\n        let tail := add(pos, 0x60)\n\n        {\n            // rewardToken\n\n            let memberValue0 := mload(add(value, 0x00))\n            abi_encode_t_address_to_t_address(memberValue0, add(pos, 0x00))\n        }\n\n        {\n            // supplySpeed\n\n            let memberValue0 := mload(add(value, 0x20))\n            abi_encode_t_uint256_to_t_uint256(memberValue0, add(pos, 0x20))\n        }\n\n        {\n            // borrowSpeed\n\n            let memberValue0 := mload(add(value, 0x40))\n            abi_encode_t_uint256_to_t_uint256(memberValue0, add(pos, 0x40))\n        }\n\n    }\n\n    function abi_encodeUpdatedPos_t_struct$_RewardSpeeds_$9473_memory_ptr_to_t_struct$_RewardSpeeds_$9473_memory_ptr(value0, pos) -> updatedPos {\n        abi_encode_t_struct$_RewardSpeeds_$9473_memory_ptr_to_t_struct$_RewardSpeeds_$9473_memory_ptr(value0, pos)\n        updatedPos := add(pos, 0x60)\n    }\n\n    function array_nextElement_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr(ptr) -> next {\n        next := add(ptr, 0x20)\n    }\n\n    // struct ComptrollerStorage.RewardSpeeds[] -> struct ComptrollerStorage.RewardSpeeds[]\n    function abi_encode_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr_fromStack(value, pos)  -> end  {\n        let length := array_length_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr_fromStack(pos, length)\n        let baseRef := array_dataslot_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr(value)\n        let srcPtr := baseRef\n        for { let i := 0 } lt(i, length) { i := add(i, 1) }\n        {\n            let elementValue0 := mload(srcPtr)\n            pos := abi_encodeUpdatedPos_t_struct$_RewardSpeeds_$9473_memory_ptr_to_t_struct$_RewardSpeeds_$9473_memory_ptr(elementValue0, pos)\n            srcPtr := array_nextElement_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr(srcPtr)\n        }\n        end := pos\n    }\n\n    function abi_encode_tuple_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_RewardSpeeds_$9473_memory_ptr_$dyn_memory_ptr_fromStack(value0,  tail)\n\n    }\n\n    function convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_IAccessControlManagerV8_$5080__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    function panic_error_0x41() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n\n    function finalize_allocation(memPtr, size) {\n        let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n        // protect against overflow\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n\n    function allocate_memory(size) -> memPtr {\n        memPtr := allocate_unbounded()\n        finalize_allocation(memPtr, size)\n    }\n\n    function array_allocation_size_t_array$_t_address_$dyn_memory_ptr(length) -> size {\n        // Make sure we can allocate memory without overflow\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n        size := mul(length, 0x20)\n\n        // add length slot\n        size := add(size, 0x20)\n\n    }\n\n    // address[]\n    function abi_decode_available_length_t_array$_t_address_$dyn_memory_ptr(offset, length, end) -> array {\n        array := allocate_memory(array_allocation_size_t_array$_t_address_$dyn_memory_ptr(length))\n        let dst := array\n\n        mstore(array, length)\n        dst := add(array, 0x20)\n\n        let srcEnd := add(offset, mul(length, 0x20))\n        if gt(srcEnd, end) {\n            revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n        }\n        for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n        {\n\n            let elementPos := src\n\n            mstore(dst, abi_decode_t_address(elementPos, end))\n            dst := add(dst, 0x20)\n        }\n    }\n\n    // address[]\n    function abi_decode_t_array$_t_address_$dyn_memory_ptr(offset, end) -> array {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        let length := calldataload(offset)\n        array := abi_decode_available_length_t_array$_t_address_$dyn_memory_ptr(add(offset, 0x20), length, end)\n    }\n\n    function abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := calldataload(add(headStart, 0))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value0 := abi_decode_t_array$_t_address_$dyn_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function array_length_t_array$_t_uint256_$dyn_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_array$_t_uint256_$dyn_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function array_dataslot_t_array$_t_uint256_$dyn_memory_ptr(ptr) -> data {\n        data := ptr\n\n        data := add(ptr, 0x20)\n\n    }\n\n    function abi_encodeUpdatedPos_t_uint256_to_t_uint256(value0, pos) -> updatedPos {\n        abi_encode_t_uint256_to_t_uint256(value0, pos)\n        updatedPos := add(pos, 0x20)\n    }\n\n    function array_nextElement_t_array$_t_uint256_$dyn_memory_ptr(ptr) -> next {\n        next := add(ptr, 0x20)\n    }\n\n    // uint256[] -> uint256[]\n    function abi_encode_t_array$_t_uint256_$dyn_memory_ptr_to_t_array$_t_uint256_$dyn_memory_ptr_fromStack(value, pos)  -> end  {\n        let length := array_length_t_array$_t_uint256_$dyn_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_array$_t_uint256_$dyn_memory_ptr_fromStack(pos, length)\n        let baseRef := array_dataslot_t_array$_t_uint256_$dyn_memory_ptr(value)\n        let srcPtr := baseRef\n        for { let i := 0 } lt(i, length) { i := add(i, 1) }\n        {\n            let elementValue0 := mload(srcPtr)\n            pos := abi_encodeUpdatedPos_t_uint256_to_t_uint256(elementValue0, pos)\n            srcPtr := array_nextElement_t_array$_t_uint256_$dyn_memory_ptr(srcPtr)\n        }\n        end := pos\n    }\n\n    function abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_array$_t_uint256_$dyn_memory_ptr_to_t_array$_t_uint256_$dyn_memory_ptr_fromStack(value0,  tail)\n\n    }\n\n    function cleanup_t_contract$_IPrime_$16613(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function validator_revert_t_contract$_IPrime_$16613(value) {\n        if iszero(eq(value, cleanup_t_contract$_IPrime_$16613(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_IPrime_$16613(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_contract$_IPrime_$16613(value)\n    }\n\n    function abi_decode_tuple_t_contract$_IPrime_$16613(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_IPrime_$16613(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function convert_t_contract$_IPrime_$16613_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_IPrime_$16613_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_IPrime_$16613_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_IPrime_$16613__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_IPrime_$16613_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_uint256t_address(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function validator_revert_t_enum$_Action_$9148(value) {\n        if iszero(lt(value, 9)) { revert(0, 0) }\n    }\n\n    function abi_decode_t_enum$_Action_$9148(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_enum$_Action_$9148(value)\n    }\n\n    function abi_decode_tuple_t_addresst_enum$_Action_$9148(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_enum$_Action_$9148(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool(headStart, dataEnd) -> value0, value1, value2, value3, value4 {\n        if slt(sub(dataEnd, headStart), 160) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 96\n\n            value3 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 128\n\n            value4 := abi_decode_t_bool(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function store_literal_in_memory_3388b29c8ac24f5c232934811c4242553f413844f77f503b8785ba71cd2c4b6f(memPtr) {\n\n        mstore(add(memPtr, 0), \"Close factor greater than maximu\")\n\n        mstore(add(memPtr, 32), \"m close factor\")\n\n    }\n\n    function abi_encode_t_stringliteral_3388b29c8ac24f5c232934811c4242553f413844f77f503b8785ba71cd2c4b6f_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 46)\n        store_literal_in_memory_3388b29c8ac24f5c232934811c4242553f413844f77f503b8785ba71cd2c4b6f(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_3388b29c8ac24f5c232934811c4242553f413844f77f503b8785ba71cd2c4b6f__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_3388b29c8ac24f5c232934811c4242553f413844f77f503b8785ba71cd2c4b6f_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_e08258dad66b639434436d0a533127e51effbdd16e4a07ef3fab948963e89ae8(memPtr) {\n\n        mstore(add(memPtr, 0), \"Close factor smaller than minimu\")\n\n        mstore(add(memPtr, 32), \"m close factor\")\n\n    }\n\n    function abi_encode_t_stringliteral_e08258dad66b639434436d0a533127e51effbdd16e4a07ef3fab948963e89ae8_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 46)\n        store_literal_in_memory_e08258dad66b639434436d0a533127e51effbdd16e4a07ef3fab948963e89ae8(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_e08258dad66b639434436d0a533127e51effbdd16e4a07ef3fab948963e89ae8__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_e08258dad66b639434436d0a533127e51effbdd16e4a07ef3fab948963e89ae8_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_dbab81719f15ade78f76dcdbf7cff531fc5f9822fe7e8466ffdd2feb23510f3b(memPtr) {\n\n        mstore(add(memPtr, 0), \"invalid input\")\n\n    }\n\n    function abi_encode_t_stringliteral_dbab81719f15ade78f76dcdbf7cff531fc5f9822fe7e8466ffdd2feb23510f3b_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 13)\n        store_literal_in_memory_dbab81719f15ade78f76dcdbf7cff531fc5f9822fe7e8466ffdd2feb23510f3b(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_dbab81719f15ade78f76dcdbf7cff531fc5f9822fe7e8466ffdd2feb23510f3b__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_dbab81719f15ade78f76dcdbf7cff531fc5f9822fe7e8466ffdd2feb23510f3b_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function panic_error_0x32() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n\n    function cleanup_t_contract$_ComptrollerInterface_$9353(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function validator_revert_t_contract$_ComptrollerInterface_$9353(value) {\n        if iszero(eq(value, cleanup_t_contract$_ComptrollerInterface_$9353(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_ComptrollerInterface_$9353_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_contract$_ComptrollerInterface_$9353(value)\n    }\n\n    function abi_decode_tuple_t_contract$_ComptrollerInterface_$9353_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_ComptrollerInterface_$9353_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function panic_error_0x11() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n\n    function checked_mul_t_uint256(x, y) -> product {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        let product_raw := mul(x, y)\n        product := cleanup_t_uint256(product_raw)\n\n        // overflow, if x != 0 and y != product/x\n        if iszero(\n            or(\n                iszero(x),\n                eq(y, div(product, x))\n            )\n        ) { panic_error_0x11() }\n\n    }\n\n    function abi_decode_tuple_t_enum$_Action_$9148(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_enum$_Action_$9148(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function panic_error_0x12() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n\n    function checked_div_t_uint256(x, y) -> r {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        if iszero(y) { panic_error_0x12() }\n\n        r := div(x, y)\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_contract$_VToken_$15506_t_bool__to_t_address_t_address_t_uint256_t_address_t_bool__fromStack_reversed(headStart , value4, value3, value2, value1, value0) -> tail {\n        tail := add(headStart, 160)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n        abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack(value3,  add(headStart, 96))\n\n        abi_encode_t_bool_to_t_bool_fromStack(value4,  add(headStart, 128))\n\n    }\n\n    function store_literal_in_memory_25d05e40227b6f7351f342eb9dac81eb87f63180a86e368f7d41da458d00d16f(memPtr) {\n\n        mstore(add(memPtr, 0), \"Nonzero borrow balance after liq\")\n\n        mstore(add(memPtr, 32), \"uidation\")\n\n    }\n\n    function abi_encode_t_stringliteral_25d05e40227b6f7351f342eb9dac81eb87f63180a86e368f7d41da458d00d16f_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 40)\n        store_literal_in_memory_25d05e40227b6f7351f342eb9dac81eb87f63180a86e368f7d41da458d00d16f(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_25d05e40227b6f7351f342eb9dac81eb87f63180a86e368f7d41da458d00d16f__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_25d05e40227b6f7351f342eb9dac81eb87f63180a86e368f7d41da458d00d16f_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_contract$_ResilientOracleInterface_$16173_t_contract$_ResilientOracleInterface_$16173__to_t_address_t_address__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_contract$_ResilientOracleInterface_$16173_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_contract$_ResilientOracleInterface_$16173_to_t_address_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function store_literal_in_memory_61ffe8d71e53165b47fbc4657a5b6dca84fa425e33e0a21288981e17a8238fcd(memPtr) {\n\n        mstore(add(memPtr, 0), \"already exists\")\n\n    }\n\n    function abi_encode_t_stringliteral_61ffe8d71e53165b47fbc4657a5b6dca84fa425e33e0a21288981e17a8238fcd_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 14)\n        store_literal_in_memory_61ffe8d71e53165b47fbc4657a5b6dca84fa425e33e0a21288981e17a8238fcd(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_61ffe8d71e53165b47fbc4657a5b6dca84fa425e33e0a21288981e17a8238fcd__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_61ffe8d71e53165b47fbc4657a5b6dca84fa425e33e0a21288981e17a8238fcd_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function checked_add_t_uint256(x, y) -> sum {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        sum := add(x, y)\n\n        if gt(x, sum) { panic_error_0x11() }\n\n    }\n\n    function cleanup_t_contract$_IERC20Upgradeable_$1352(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function validator_revert_t_contract$_IERC20Upgradeable_$1352(value) {\n        if iszero(eq(value, cleanup_t_contract$_IERC20Upgradeable_$1352(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_IERC20Upgradeable_$1352_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_contract$_IERC20Upgradeable_$1352(value)\n    }\n\n    function abi_decode_tuple_t_contract$_IERC20Upgradeable_$1352_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_IERC20Upgradeable_$1352_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_tuple_t_contract$_VToken_$15506_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc(memPtr) {\n\n        mstore(add(memPtr, 0), \"Ownable2Step: caller is not the \")\n\n        mstore(add(memPtr, 32), \"new owner\")\n\n    }\n\n    function abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 41)\n        store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function store_literal_in_memory_c058637d38cae682b1632861e7627b9b2faf58bda046e427ad8f294be17a6198(memPtr) {\n\n        mstore(add(memPtr, 0), \"liquidation incentive should be \")\n\n        mstore(add(memPtr, 32), \"greater than 1e18\")\n\n    }\n\n    function abi_encode_t_stringliteral_c058637d38cae682b1632861e7627b9b2faf58bda046e427ad8f294be17a6198_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 49)\n        store_literal_in_memory_c058637d38cae682b1632861e7627b9b2faf58bda046e427ad8f294be17a6198(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_c058637d38cae682b1632861e7627b9b2faf58bda046e427ad8f294be17a6198__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_c058637d38cae682b1632861e7627b9b2faf58bda046e427ad8f294be17a6198_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function increment_t_uint256(value) -> ret {\n        value := cleanup_t_uint256(value)\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function abi_encode_tuple_t_contract$_IPrime_$16613_t_contract$_IPrime_$16613__to_t_address_t_address__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_contract$_IPrime_$16613_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_contract$_IPrime_$16613_to_t_address_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function abi_decode_t_bool_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_bool(value)\n    }\n\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_bool_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function store_literal_in_memory_7cbca09684e568d28239275bedb5f9d8ede90fb19ba1a42a2dd98c07e53733e5(memPtr) {\n\n        mstore(add(memPtr, 0), \"Comptroller: Invalid vToken\")\n\n    }\n\n    function abi_encode_t_stringliteral_7cbca09684e568d28239275bedb5f9d8ede90fb19ba1a42a2dd98c07e53733e5_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 27)\n        store_literal_in_memory_7cbca09684e568d28239275bedb5f9d8ede90fb19ba1a42a2dd98c07e53733e5(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_7cbca09684e568d28239275bedb5f9d8ede90fb19ba1a42a2dd98c07e53733e5__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_7cbca09684e568d28239275bedb5f9d8ede90fb19ba1a42a2dd98c07e53733e5_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_f260407ad5875ca6920015bd8c4244b00453e8856f69e363e0217c410a4ba389(memPtr) {\n\n        mstore(add(memPtr, 0), \"invalid number of markets\")\n\n    }\n\n    function abi_encode_t_stringliteral_f260407ad5875ca6920015bd8c4244b00453e8856f69e363e0217c410a4ba389_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 25)\n        store_literal_in_memory_f260407ad5875ca6920015bd8c4244b00453e8856f69e363e0217c410a4ba389(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_f260407ad5875ca6920015bd8c4244b00453e8856f69e363e0217c410a4ba389__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_f260407ad5875ca6920015bd8c4244b00453e8856f69e363e0217c410a4ba389_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759(memPtr) {\n\n        mstore(add(memPtr, 0), \"Initializable: contract is alrea\")\n\n        mstore(add(memPtr, 32), \"dy initialized\")\n\n    }\n\n    function abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 46)\n        store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function cleanup_t_rational_1_by_1(value) -> cleaned {\n        cleaned := value\n    }\n\n    function cleanup_t_uint8(value) -> cleaned {\n        cleaned := and(value, 0xff)\n    }\n\n    function convert_t_rational_1_by_1_to_t_uint8(value) -> converted {\n        converted := cleanup_t_uint8(identity(cleanup_t_rational_1_by_1(value)))\n    }\n\n    function abi_encode_t_rational_1_by_1_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, convert_t_rational_1_by_1_to_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_rational_1_by_1_to_t_uint8_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    // struct ExponentialNoError.Exp -> struct ExponentialNoError.Exp\n    function abi_encode_t_struct$_Exp_$9645_memory_ptr_to_t_struct$_Exp_$9645_memory_ptr_fromStack(value, pos)  {\n        let tail := add(pos, 0x20)\n\n        {\n            // mantissa\n\n            let memberValue0 := mload(add(value, 0x00))\n            abi_encode_t_uint256_to_t_uint256(memberValue0, add(pos, 0x00))\n        }\n\n    }\n\n    function abi_encode_tuple_t_address_t_struct$_Exp_$9645_memory_ptr__to_t_address_t_struct$_Exp_$9645_memory_ptr__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_struct$_Exp_$9645_memory_ptr_to_t_struct$_Exp_$9645_memory_ptr_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_struct$_Exp_$9645_memory_ptr__to_t_address_t_address_t_struct$_Exp_$9645_memory_ptr__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_struct$_Exp_$9645_memory_ptr_to_t_struct$_Exp_$9645_memory_ptr_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function panic_error_0x21() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n\n    function panic_error_0x01() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x01)\n        revert(0, 0x24)\n    }\n\n    function checked_sub_t_uint256(x, y) -> diff {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        diff := sub(x, y)\n\n        if gt(diff, x) { panic_error_0x11() }\n\n    }\n\n    function panic_error_0x31() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x31)\n        revert(0, 0x24)\n    }\n\n    function array_length_t_string_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function copy_memory_to_memory_with_cleanup(src, dst, length) {\n\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n\n    }\n\n    function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n        let length := array_length_t_string_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_tuple_t_address_t_string_memory_ptr__to_t_address_t_string_memory_ptr__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        mstore(add(headStart, 32), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value1,  tail)\n\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_string_memory_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        mstore(add(headStart, 64), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value2,  tail)\n\n    }\n\n    function store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe(memPtr) {\n\n        mstore(add(memPtr, 0), \"Ownable: caller is not the owner\")\n\n    }\n\n    function abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 32)\n        store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb(memPtr) {\n\n        mstore(add(memPtr, 0), \"invalid acess control manager ad\")\n\n        mstore(add(memPtr, 32), \"dress\")\n\n    }\n\n    function abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 37)\n        store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function validator_assert_t_enum$_Action_$9148(value) {\n        if iszero(lt(value, 9)) { panic_error_0x21() }\n    }\n\n    function cleanup_t_enum$_Action_$9148(value) -> cleaned {\n        cleaned := value validator_assert_t_enum$_Action_$9148(value)\n    }\n\n    function convert_t_enum$_Action_$9148_to_t_uint8(value) -> converted {\n        converted := cleanup_t_enum$_Action_$9148(value)\n    }\n\n    function abi_encode_t_enum$_Action_$9148_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, convert_t_enum$_Action_$9148_to_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_address_t_enum$_Action_$9148__to_t_address_t_uint8__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_enum$_Action_$9148_to_t_uint8_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function store_literal_in_memory_0ad46837fefc66a37a27d365ae7d6446a39b33a37d743c62daa13796b21a9a61(memPtr) {\n\n        mstore(add(memPtr, 0), \"cannot pause a market that is no\")\n\n        mstore(add(memPtr, 32), \"t listed\")\n\n    }\n\n    function abi_encode_t_stringliteral_0ad46837fefc66a37a27d365ae7d6446a39b33a37d743c62daa13796b21a9a61_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 40)\n        store_literal_in_memory_0ad46837fefc66a37a27d365ae7d6446a39b33a37d743c62daa13796b21a9a61(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_0ad46837fefc66a37a27d365ae7d6446a39b33a37d743c62daa13796b21a9a61__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_0ad46837fefc66a37a27d365ae7d6446a39b33a37d743c62daa13796b21a9a61_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_contract$_VToken_$15506_t_enum$_Action_$9148_t_bool__to_t_address_t_uint8_t_bool__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_enum$_Action_$9148_to_t_uint8_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_bool_to_t_bool_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3 {\n        if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 96\n\n            value3 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032(memPtr) {\n\n        mstore(add(memPtr, 0), \"Comptroller: Invalid maxLoopsLim\")\n\n        mstore(add(memPtr, 32), \"it\")\n\n    }\n\n    function abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 34)\n        store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b(memPtr) {\n\n        mstore(add(memPtr, 0), \"Initializable: contract is not i\")\n\n        mstore(add(memPtr, 32), \"nitializing\")\n\n    }\n\n    function abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 43)\n        store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"5121":[{"length":32,"start":2026},{"length":32,"start":12483}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106103fb5760003560e01c806380d45a2d11610215578063c32094c711610125578063ddbf54fd116100b8578063e875544611610087578063e875544614610968578063e89d51ad14610971578063eade3eed14610984578063ede4edd014610997578063f2fde38b146109aa57600080fd5b8063ddbf54fd1461091e578063df71403b14610931578063e30c397814610944578063e85a29601461095557600080fd5b8063d136af44116100f4578063d136af44146108dc578063da35a26f146108ef578063db5c65de14610902578063dce154491461090b57600080fd5b8063c32094c714610882578063c488847b14610895578063c7ee005e146108b6578063cab4f84c146108c957600080fd5b8063a8431081116101a8578063b2068e8411610177578063b2068e8414610814578063b4a0bdf314610834578063be26317e14610845578063c0891ba91461084f578063c29982381461086257600080fd5b8063a8431081146107b2578063abfceffc146107c5578063afcff50f146107e5578063b0772d0b1461080c57600080fd5b80638e6470ea116101e45780638e6470ea146107375780638e8f294b1461074a578063921363951461078c578063929fe9a11461079f57600080fd5b806380d45a2d146106d45780638b3113f6146106e75780638c1ac18a146106fa5780638da5cb5b1461071d57600080fd5b806351dff989116103105780635cc4fdeb116102a35780636d0be88d116102725780636d0be88d1461068b5780636d35bf911461069e578063715018a6146106b157806379ba5097146106b95780637dc0d1d0146106c157600080fd5b80635cc4fdeb1461063d5780635ec88c791461065057806361252fd1146106635780636a56947e1461067857600080fd5b8063530e784f116102df578063530e784f146105f157806356aaee2d146106045780635c21b6c5146106175780635c7786051461062a57600080fd5b806351dff9891461053a578063520b6c74146105ab578063528a174c146105be57806352d84d1e146105d157600080fd5b80631ededc911161039357806341c728b91161036257806341c728b91461053a57806347ef3b3b1461054d5780634a584432146105605780634ada90af146105805780634e79238f1461058957600080fd5b80631ededc91146104d557806324aaa220146104e85780632bce219c146104fb5780633d98a1e51461050e57600080fd5b806310b98338116103cf57806310b983381461046e57806312348e961461049c578063186db48f146104af5780631bc41f28146104c257600080fd5b80627e3dd21461040057806302c3bcbb146104195780630686dab6146104465780630e32cb8614610459575b600080fd5b60015b6040516104109190614c74565b60405180910390f35b610439610427366004614cb2565b60d16020526000908152604090205481565b6040516104109190614cd9565b610439610454366004614cb2565b6109bd565b61046c610467366004614cb2565b610c78565b005b61040361047c366004614ce7565b60d760209081526000928352604080842090915290825290205460ff1681565b61046c6104aa366004614d35565b610c8c565b61046c6104bd366004614da7565b610d5f565b61046c6104d0366004614e1e565b610eae565b61046c6104e3366004614e82565b611268565b61046c6104f6366004614f0d565b6112e5565b61046c610509366004614fd7565b6113a2565b61040361051c366004615051565b6001600160a01b0316600090815260cd602052604090205460ff1690565b61046c610548366004615072565b61168b565b61046c61055b3660046150ca565b611702565b61043961056e366004614cb2565b60cf6020526000908152604090205481565b61043960cb5481565b61059c610597366004615072565b6117e4565b60405161041093929190615154565b61046c6105b9366004614d35565b611815565b61059c6105cc366004614cb2565b61186f565b6105e46105df366004614d35565b61189a565b6040516104109190615190565b61046c6105ff366004615051565b6118c4565b61046c610612366004615051565b611928565b61046c610625366004614cb2565b611b27565b61046c61063836600461519e565b611bd1565b61046c61064b3660046151ee565b611c47565b61059c61065e366004614cb2565b611e58565b61066b611e6a565b6040516104109190615280565b61046c610686366004615291565b611ecc565b61046c610699366004615291565b611f73565b61046c6106ac3660046152d8565b6120e6565b61046c61218d565b61046c6121a1565b60c9546105e4906001600160a01b031681565b61046c6106e2366004614d35565b6121d6565b61046c6106f5366004615332565b6121e7565b610403610708366004614cb2565b60d56020526000908152604090205460ff1681565b6033546001600160a01b03165b604051610410919061536e565b61046c61074536600461519e565b6122ac565b61077d610758366004614cb2565b60cd6020526000908152604090208054600182015460029092015460ff909116919083565b6040516104109392919061537c565b61046c61079a366004614cb2565b6123bf565b6104036107ad36600461538a565b612706565b61046c6107c0366004614d35565b61273a565b6107d86107d3366004614cb2565b6127da565b60405161041091906153fb565b61072a7f000000000000000000000000000000000000000000000000000000000000000081565b6107d8612954565b610827610822366004614cb2565b6129b4565b6040516104109190615495565b6097546001600160a01b03166105e4565b6104396101075481565b61046c61085d36600461519e565b612bf5565b6108756108703660046155ab565b612e6b565b604051610410919061562f565b61046c610890366004615051565b612f19565b6108a86108a336600461519e565b612f93565b604051610410929190615640565b60d6546105e4906001600160a01b031681565b61046c6108d7366004615051565b6130be565b61046c6108ea366004614da7565b6132b0565b61046c6108fd36600461565b565b61340b565b61043960d05481565b6105e461091936600461567d565b6134e0565b61046c61092c366004615332565b613518565b61046c61093f36600461519e565b6135dc565b6065546001600160a01b031661072a565b6104036109633660046156c8565b6139de565b61043960ca5481565b61046c61097f3660046156fb565b613a35565b61046c610992366004614ce7565b613c22565b6104396109a5366004614cb2565b613e40565b61046c6109b8366004614cb2565b6140aa565b60006109f560405180604001604052806015815260200174756e6c6973744d61726b657428616464726573732960581b81525061411b565b6001600160a01b038216600090815260cd60205260409020805460ff16610a3a5782604051635a9a1eb960e11b8152600401610a31919061536e565b60405180910390fd5b610a458360026139de565b610a6257604051630309b07560e21b815260040160405180910390fd5b610a6d8360006139de565b610a8a576040516306ed36fb60e41b815260040160405180910390fd5b610a958360016139de565b610ab257604051634e577b7d60e11b815260040160405180910390fd5b610abd8360036139de565b610ada57604051632b1e340960e01b815260040160405180910390fd5b610ae58360046139de565b610b025760405163bb56e52560e01b815260040160405180910390fd5b610b0d8360076139de565b610b2a57604051630a6a9a9d60e31b815260040160405180910390fd5b610b358360056139de565b610b525760405163b3cf04ad60e01b815260040160405180910390fd5b610b5d8360066139de565b610b7a576040516308624f7160e21b815260040160405180910390fd5b610b858360086139de565b610ba257604051632f412a5560e21b815260040160405180910390fd5b6001600160a01b038316600090815260cf602052604090205415610bd95760405163668019b360e01b815260040160405180910390fd5b6001600160a01b038316600090815260d1602052604090205415610c1057604051638603c8cf60e01b815260040160405180910390fd5b600181015415610c3357604051630707987b60e11b815260040160405180910390fd5b805460ff191681556040516001600160a01b038416907f302feb03efd5741df80efe7f97f5d93d74d46a542a3d312d0faae64fa1f3e0e990600090a250600092915050565b610c806141b9565b610c89816141e3565b50565b610cca6040518060400160405280601781526020017f736574436c6f7365466163746f722875696e743235362900000000000000000081525061411b565b80670c7d713b49da00001015610cf25760405162461bcd60e51b8152600401610a31906157b4565b8066b1a2bc2ec500001115610d195760405162461bcd60e51b8152600401610a319061580f565b60ca8054908290556040517f3b9670cf975d26958e754b57098eaa2ac914d8d2a31b83257997b9f346110fd990610d539083908590615640565b60405180910390a15050565b610d8060405180606001604052806028815260200161603f6028913961411b565b82818115801590610d9057508082145b610dac5760405162461bcd60e51b8152600401610a3190615846565b610db58261425c565b60005b82811015610ea557848482818110610dd257610dd2615856565b9050602002013560cf6000898985818110610def57610def615856565b9050602002016020810190610e049190615051565b6001600160a01b03168152602081019190915260400160002055868682818110610e3057610e30615856565b9050602002016020810190610e459190615051565b6001600160a01b03167f6f1951b2aad10f3fc81b86d91105b413a5b3f847a34bbc5ce1904201b14438f6868684818110610e8157610e81615856565b90506020020135604051610e959190614cd9565b60405180910390a2600101610db8565b50505050505050565b610eb9846004614287565b6001600160a01b038416600090815260cd60205260409020805460ff16610ef55784604051635a9a1eb960e11b8152600401610a31919061536e565b306001600160a01b03851603610f9d57306001600160a01b0316856001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f719190615877565b6001600160a01b031614610f9857604051630c73eb0560e01b815260040160405180910390fd5b6110cc565b6001600160a01b038416600090815260cd602052604090205460ff16610fd85783604051635a9a1eb960e11b8152600401610a31919061536e565b836001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611016573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103a9190615877565b6001600160a01b0316856001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a59190615877565b6001600160a01b0316146110cc57604051630c73eb0560e01b815260040160405180910390fd5b6001600160a01b038216600090815260038201602052604090205460ff1661110b578482604051630cdfb2db60e31b8152600401610a31929190615898565b60d35460005b81811015610ea557600060d3828154811061112e5761112e615856565b60009182526020909120015460405163051d1d4f60e11b81526001600160a01b0390911691508190630a3a3a9e9061116a908b9060040161536e565b600060405180830381600087803b15801561118457600080fd5b505af1158015611198573d6000803e3d6000fd5b505060405163db7954fd60e01b81526001600160a01b038416925063db7954fd91506111ca908b908990600401615898565b600060405180830381600087803b1580156111e457600080fd5b505af11580156111f8573d6000803e3d6000fd5b505060405163db7954fd60e01b81526001600160a01b038416925063db7954fd915061122a908b908a90600401615898565b600060405180830381600087803b15801561124457600080fd5b505af1158015611258573d6000803e3d6000fd5b5050505050806001019050611111565b60d6546001600160a01b0316156112de5760d6546040516367994e8b60e11b81526001600160a01b039091169063cf329d16906112ab9086908990600401615898565b600060405180830381600087803b1580156112c557600080fd5b505af11580156112d9573d6000803e3d6000fd5b505050505b5050505050565b6113066040518060600160405280602a81526020016160b8602a913961411b565b838261131a61131582846158c9565b61425c565b60005b828110156113985760005b8281101561138f5761138789898481811061134557611345615856565b905060200201602081019061135a9190615051565b88888481811061136c5761136c615856565b905060200201602081019061138191906158e8565b876142b3565b600101611328565b5060010161131d565b5050505050505050565b60006113b0846143806143b4565b905060d054816000015111156113e05760d0548151604051631a451c0f60e21b8152610a31929190600401615640565b6000611400604051806020016040528060cb548152508360400151614403565b82519091508110611428578151604051632c1f8ef160e21b8152610a31918391600401615640565b8160a0015160000361144d5760405163095bf33360e01b815260040160405180910390fd5b8261145c61131560028361591f565b60005b8181101561161f5760cd600087878481811061147d5761147d615856565b90506060020160200160208101906114959190615051565b6001600160a01b0316815260208101919091526040016000205460ff166114fa578585828181106114c8576114c8615856565b90506060020160200160208101906114e09190615051565b604051635a9a1eb960e11b8152600401610a31919061536e565b60cd600087878481811061151057611510615856565b6115269260206060909202019081019150615051565b6001600160a01b0316815260208101919091526040016000205460ff1661156f5785858281811061155957611559615856565b6114e09260206060909202019081019150615051565b3686868381811061158257611582615856565b905060600201905080602001602081019061159d9190615051565b6001600160a01b0316638bbdb6db338a60408501356115bf6020870187615051565b60016040518663ffffffff1660e01b81526004016115e1959493929190615933565b600060405180830381600087803b1580156115fb57600080fd5b505af115801561160f573d6000803e3d6000fd5b505050505080600101905061145f565b50600061162b876127da565b805190915060005b818110156112d957600061166084838151811061165257611652615856565b60200260200101518b614423565b5091505080156116825760405162461bcd60e51b8152600401610a31906159c4565b50600101611633565b60d6546001600160a01b0316156116fc5760d6546040516367994e8b60e11b81526001600160a01b039091169063cf329d16906116ce9086908890600401615898565b600060405180830381600087803b1580156116e857600080fd5b505af1158015611398573d6000803e3d6000fd5b50505050565b60d6546001600160a01b0316156117dc5760d6546040516367994e8b60e11b81526001600160a01b039091169063cf329d16906117459086908a90600401615898565b600060405180830381600087803b15801561175f57600080fd5b505af1158015611773573d6000803e3d6000fd5b505060d6546040516367994e8b60e11b81526001600160a01b03909116925063cf329d1691506117a99087908a90600401615898565b600060405180830381600087803b1580156117c357600080fd5b505af11580156117d7573d6000803e3d6000fd5b505050505b505050505050565b6000806000806117f9888888886144ca6144fe565b608081015160a09091015160009a919950975095505050505050565b6118366040518060600160405280602581526020016160676025913961411b565b60d08054908290556040517eb4f4f153ad7f1397564a8830fef092481e8cf6a2cd3ff04f96d10ba51200a590610d539083908590615640565b600080600080611881856144ca6143b4565b608081015160a090910151600097919650945092505050565b60ce81815481106118aa57600080fd5b6000918252602090912001546001600160a01b0316905081565b6118cc6141b9565b6118d5816146c8565b60c980546001600160a01b038381166001600160a01b03198316179092556040519116907fd52b2b9b7e9ee655fcb95d2e5b9e0c9f69e7ef2b8e9d2d0ea78402d576d22e2290610d5390839085906159d4565b6119306141b9565b6001600160a01b038116600090815260d4602052604090205460ff16156119695760405162461bcd60e51b8152600401610a3190615a14565b60d35461197a611315826001615a24565b60d3805460018082019092557f915c3eb987b20e1af620c1403197bf687fb7f18513b3a73fde6e78c7072c41a60180546001600160a01b0319166001600160a01b038516908117909155600090815260d460205260408120805460ff191690921790915560ce54905b81811015611a8057836001600160a01b0316632a869a4d60ce8381548110611a0d57611a0d615856565b6000918252602090912001546040516001600160e01b031960e084901b168152611a43916001600160a01b03169060040161536e565b600060405180830381600087803b158015611a5d57600080fd5b505af1158015611a71573d6000803e3d6000fd5b505050508060010190506119e3565b50826001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611abf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae39190615877565b6001600160a01b0316836001600160a01b03167f066a44d77db1581603d7d8ca1ca494756c0d359c7ffacd9b2c8f78dab7aceae260405160405180910390a3505050565b6000611b32826127da565b805160c954919250906001600160a01b031660005b828110156112de57816001600160a01b03166396e85ced858381518110611b7057611b70615856565b60200260200101516040518263ffffffff1660e01b8152600401611b94919061536e565b600060405180830381600087803b158015611bae57600080fd5b505af1158015611bc2573d6000803e3d6000fd5b50505050806001019050611b47565b60d6546001600160a01b031615611c425760d6546040516367994e8b60e11b81526001600160a01b039091169063cf329d1690611c149085908790600401615898565b600060405180830381600087803b158015611c2e57600080fd5b505af1158015610ea5573d6000803e3d6000fd5b505050565b611c686040518060600160405280602c815260200161608c602c913961411b565b6001600160a01b038316600090815260cd60205260409020805460ff16611ca45783604051635a9a1eb960e11b8152600401610a31919061536e565b670d2f13f7789f0000831115611ccd576040516302f22cad60e61b815260040160405180910390fd5b670de0b6b3a7640000821115611cf55760405162f9474b60e61b815260040160405180910390fd5b82821015611d155760405162f9474b60e61b815260040160405180910390fd5b8215801590611d92575060c95460405163fc57d4df60e01b81526001600160a01b039091169063fc57d4df90611d4f90879060040161536e565b602060405180830381865afa158015611d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d909190615a42565b155b15611db1578360405162e52a7d60e41b8152600401610a31919061536e565b6001810154838114611e0157600182018490556040517f70483e6592cd5182d45ac970e05bc62cdcc90e9d8ef2c2dbe686cf383bcd7fc590611df890879084908890615a63565b60405180910390a15b60028201548381146117dc57600283018490556040517f9e92c7d5fef69846094f3ddcadcb9402c6ba469c461368714f1cabd8ef48b59190611e4890889084908890615a63565b60405180910390a1505050505050565b600080600080611881856143806143b4565b606060d3805480602002602001604051908101604052809291908181526020018280548015611ec257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611ea4575b5050505050905090565b60d6546001600160a01b0316156116fc5760d6546040516367994e8b60e11b81526001600160a01b039091169063cf329d1690611f0f9086908890600401615898565b600060405180830381600087803b158015611f2957600080fd5b505af1158015611f3d573d6000803e3d6000fd5b505060d6546040516367994e8b60e11b81526001600160a01b03909116925063cf329d1691506116ce9085908890600401615898565b611f7e846006614287565b611f898484836146ef565b60d35460005b818110156117dc57600060d38281548110611fac57611fac615856565b60009182526020909120015460405163051d1d4f60e11b81526001600160a01b0390911691508190630a3a3a9e90611fe8908a9060040161536e565b600060405180830381600087803b15801561200257600080fd5b505af1158015612016573d6000803e3d6000fd5b505060405163db7954fd60e01b81526001600160a01b038416925063db7954fd9150612048908a908a90600401615898565b600060405180830381600087803b15801561206257600080fd5b505af1158015612076573d6000803e3d6000fd5b505060405163db7954fd60e01b81526001600160a01b038416925063db7954fd91506120a8908a908990600401615898565b600060405180830381600087803b1580156120c257600080fd5b505af11580156120d6573d6000803e3d6000fd5b5050505050806001019050611f8f565b60d6546001600160a01b0316156112de5760d6546040516367994e8b60e11b81526001600160a01b039091169063cf329d16906121299085908990600401615898565b600060405180830381600087803b15801561214357600080fd5b505af1158015612157573d6000803e3d6000fd5b505060d6546040516367994e8b60e11b81526001600160a01b03909116925063cf329d1691506112ab9086908990600401615898565b6121956141b9565b61219f6000614794565b565b60655433906001600160a01b031681146121cd5760405162461bcd60e51b8152600401610a3190615ab7565b610c8981614794565b6121de6141b9565b610c89816147ad565b6122086040518060600160405280602281526020016160e26022913961411b565b612211826146c8565b6001600160a01b038216600090815260cd602052604090205460ff1661224c5781604051635a9a1eb960e11b8152600401610a31919061536e565b6001600160a01b038216600081815260d5602052604090819020805460ff1916841515179055517f03561d5280ebb02280893b1d60978e4a27e7654a149c5d0e7c2cf65389ce1694906122a0908490614c74565b60405180910390a25050565b6122b7836001614287565b6122c28383836146ef565b60d35460005b818110156112de57600060d382815481106122e5576122e5615856565b60009182526020909120015460405163051d1d4f60e11b81526001600160a01b0390911691508190630a3a3a9e9061232190899060040161536e565b600060405180830381600087803b15801561233b57600080fd5b505af115801561234f573d6000803e3d6000fd5b505060405163db7954fd60e01b81526001600160a01b038416925063db7954fd91506123819089908990600401615898565b600060405180830381600087803b15801561239b57600080fd5b505af11580156123af573d6000803e3d6000fd5b50505050508060010190506122c8565b60006123ca826127da565b805160c9549192509033906001600160a01b031660005b838110156124e9578481815181106123fb576123fb615856565b60200260200101516001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124669190615a42565b50816001600160a01b03166396e85ced86838151811061248857612488615856565b60200260200101516040518263ffffffff1660e01b81526004016124ac919061536e565b600060405180830381600087803b1580156124c657600080fd5b505af11580156124da573d6000803e3d6000fd5b505050508060010190506123e1565b505060006124f9856143806143b4565b905060d054816000015111156125295760d0548151604051631a451c0f60e21b8152610a31929190600401615640565b8060a0015160000361254e5760405163095bf33360e01b815260040160405180910390fd5b60408051602080820183528351825282518082018452848401518152835191820190935260cb5481529091600091612586919061480a565b905060006125948383614852565b90506125b86040518060200160405280670de0b6b3a7640000815250825190511090565b156125dc5781518351604051631a451c0f60e21b8152610a31929190600401615640565b60005b868110156112d95760008882815181106125fb576125fb615856565b60200260200101519050600080612612838d614423565b509150915060006126238683614403565b9050821561268e57836001600160a01b031663b2a02ff18b8f866040518463ffffffff1660e01b815260040161265b93929190615ac7565b600060405180830381600087803b15801561267557600080fd5b505af1158015612689573d6000803e3d6000fd5b505050505b81156126f757836001600160a01b03166344fe6ffe8b8f846040518463ffffffff1660e01b81526004016126c493929190615ac7565b600060405180830381600087803b1580156126de57600080fd5b505af11580156126f2573d6000803e3d6000fd5b505050505b505050508060010190506125df565b6001600160a01b03808216600090815260cd60209081526040808320938616835260039093019052205460ff165b92915050565b670de0b6b3a76400008110156127625760405162461bcd60e51b8152600401610a3190615b30565b6127a06040518060400160405280602081526020017f7365744c69717569646174696f6e496e63656e746976652875696e743235362981525061411b565b60cb8054908290556040517faeba5a6c40a8ac138134bff1aaa65debf25971188a58804bad717f82f0ec131690610d539083908590615640565b6001600160a01b038116600090815260cc60209081526040808320805482518185028101850190935280835260609493849392919083018282801561284857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161282a575b505050505090506000815190506000816001600160401b0381111561286f5761286f6154a6565b604051908082528060200260200182016040528015612898578160200160208202803683370190505b50905060005b8281101561294757600060cd60008684815181106128be576128be615856565b6020908102919091018101516001600160a01b03168252810191909152604001600020805490915060ff161561293e5784828151811061290057612900615856565b602002602001015183878151811061291a5761291a615856565b6001600160a01b039092166020928302919091019091015261293b86615b40565b95505b5060010161289e565b5092835250909392505050565b606060ce805480602002602001604051908101604052809291908181526020018280548015611ec2576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611ea4575050505050905090565b60d354606090806001600160401b038111156129d2576129d26154a6565b604051908082528060200260200182016040528015612a3057816020015b612a1d604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b8152602001906001900390816129f05790505b50915060005b81811015612bee57600060d38281548110612a5357612a53615856565b60009182526020808320909101546040805163f7c618c160e01b815290516001600160a01b039092169450849263f7c618c1926004808401938290030181865afa158015612aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac99190615877565b90506040518060600160405280826001600160a01b03168152602001836001600160a01b03166374c4c1cc896040518263ffffffff1660e01b8152600401612b11919061536e565b602060405180830381865afa158015612b2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b529190615a42565b8152602001836001600160a01b0316637c05a7c5896040518263ffffffff1660e01b8152600401612b83919061536e565b602060405180830381865afa158015612ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc49190615a42565b815250858481518110612bd957612bd9615856565b60209081029190910101525050600101612a36565b5050919050565b612c00836000614287565b6001600160a01b038316600090815260cd602052604090205460ff16612c3b5782604051635a9a1eb960e11b8152600401610a31919061536e565b6001600160a01b038316600090815260d160205260409020546000198114612d6e576000846001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc19190615a42565b905060006040518060200160405280876001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d329190615a42565b905290506000612d4382848761488c565b905083811115612d6a57868460405163db33be3d60e01b8152600401610a31929190615b5a565b5050505b60d35460005b818110156117dc57600060d38281548110612d9157612d91615856565b60009182526020909120015460405163051d1d4f60e11b81526001600160a01b0390911691508190630a3a3a9e90612dcd908a9060040161536e565b600060405180830381600087803b158015612de757600080fd5b505af1158015612dfb573d6000803e3d6000fd5b505060405163db7954fd60e01b81526001600160a01b038416925063db7954fd9150612e2d908a908a90600401615898565b600060405180830381600087803b158015612e4757600080fd5b505af1158015612e5b573d6000803e3d6000fd5b5050505050806001019050612d74565b80516060906000816001600160401b03811115612e8a57612e8a6154a6565b604051908082528060200260200182016040528015612eb3578160200160208202803683370190505b50905060005b82811015612f11576000858281518110612ed557612ed5615856565b60200260200101519050612ee981336148b6565b6000838381518110612efd57612efd615856565b602090810291909101015250600101612eb9565b509392505050565b612f216141b9565b612f2a816146c8565b60d6546040517fcb20dab7409e4fb972d9adccb39530520b226ce6940d85c9523a499b950b6ea391612f69916001600160a01b039091169084906159d4565b60405180910390a160d680546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000612fa1866149a9565b90506000612fae866149a9565b90506000866001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130149190615a42565b9050600061302e6040518060200160405280600081525090565b60408051602080820183526000808352835180830185529081528351808301855260cb5481528451928301909452888252919261306a9161480a565b925061309260405180602001604052808881525060405180602001604052808881525061480a565b915061309e8383614852565b90506130aa818b614403565b60009d909c509a5050505050505050505050565b6130e77f0000000000000000000000000000000000000000000000000000000000000000614a43565b6001600160a01b038116600090815260cd602052604090205460ff1615613123578060405163d005ce4760e01b8152600401610a31919061536e565b806001600160a01b0316633d9ea3a16040518163ffffffff1660e01b8152600401602060405180830381865afa158015613161573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131859190615b73565b6131a15760405162461bcd60e51b8152600401610a3190615bc8565b6001600160a01b038116600090815260cd60205260408120805460ff191660019081178255810182905560028101919091556131dc82614a70565b60d35460005b818110156132735760d381815481106131fd576131fd615856565b600091825260209091200154604051632a869a4d60e01b81526001600160a01b0390911690632a869a4d9061323690879060040161536e565b600060405180830381600087803b15801561325057600080fd5b505af1158015613264573d6000803e3d6000fd5b505050508060010190506131e2565b507faf16ad15f9e29d5140e8e81a30a92a755aa8edff3d301053c84392b70c0d09a3836040516132a39190615190565b60405180910390a1505050565b6132d16040518060600160405280602881526020016161046028913961411b565b8260008190036132f35760405162461bcd60e51b8152600401610a3190615c0c565b8082146133125760405162461bcd60e51b8152600401610a3190615c0c565b61331b8161425c565b60005b818110156117dc5783838281811061333857613338615856565b9050602002013560d1600088888581811061335557613355615856565b905060200201602081019061336a9190615051565b6001600160a01b0316815260208101919091526040016000205585858281811061339657613396615856565b90506020020160208101906133ab9190615051565b6001600160a01b03167f9e0ad9cee10bdf36b7fbd38910c0bdff0f275ace679b45b922381c2723d676f88585848181106133e7576133e7615856565b905060200201356040516133fb9190614cd9565b60405180910390a260010161331e565b600054610100900460ff161580801561342b5750600054600160ff909116105b806134455750303b158015613445575060005460ff166001145b6134615760405162461bcd60e51b8152600401610a3190615c67565b6000805460ff191660011790558015613484576000805461ff0019166101001790555b61348c614b2e565b61349582614b5d565b61349e836147ad565b8015611c42576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906132a390600190615c8b565b60cc60205281600052604060002081815481106134fc57600080fd5b6000918252602090912001546001600160a01b03169150829050565b613521826146c8565b33600090815260d7602090815260408083206001600160a01b038616845290915290205481151560ff90911615150361356d5760405163db6c2c8360e01b815260040160405180910390fd5b33600081815260d7602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907fcb325b7784f78486e42849c7a50b8c5ee008d00cd90e108a58912c0fcb6288b4906135d0908590614c74565b60405180910390a35050565b6135e7836002614287565b6001600160a01b038316600090815260cd602052604090205460ff166136225782604051635a9a1eb960e11b8152600401610a31919061536e565b6001600160a01b03808416600090815260cd60209081526040808320938616835260039093019052205460ff166136665761365c83614a43565b61366633836148b6565b61366f82611b27565b60c95460405163fc57d4df60e01b81526001600160a01b039091169063fc57d4df9061369f90869060040161536e565b602060405180830381865afa1580156136bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e09190615a42565b600003613701578260405162e52a7d60e41b8152600401610a31919061536e565b6001600160a01b038316600090815260cf60205260409020546000198114613831576000846001600160a01b03166347bd37186040518163ffffffff1660e01b8152600401602060405180830381865afa158015613763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137879190615a42565b90506000856001600160a01b031663bbcac5576040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137ed9190615a42565b90506000816137fc8685615a24565b6138069190615a24565b90508381111561382d578684604051632e649eed60e01b8152600401610a31929190615b5a565b5050505b600061384384866000866144ca6144fe565b60a0810151909150156138695760405163bb55fd2760e01b815260040160405180910390fd5b60006040518060200160405280876001600160a01b031663aa5af0fd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138d89190615a42565b905260d35490915060005b8181101561139857600060d3828154811061390057613900615856565b600091825260209091200154604051632352607960e01b81526001600160a01b039091169150819063235260799061393e908c908890600401615caa565b600060405180830381600087803b15801561395857600080fd5b505af115801561396c573d6000803e3d6000fd5b5050604051636a95ddef60e01b81526001600160a01b0384169250636a95ddef91506139a0908c908c908990600401615cc5565b600060405180830381600087803b1580156139ba57600080fd5b505af11580156139ce573d6000803e3d6000fd5b50505050508060010190506138e3565b6001600160a01b038216600090815260d26020526040812081836008811115613a0957613a09615ced565b6008811115613a1a57613a1a615ced565b815260208101919091526040016000205460ff169392505050565b613a40856005614287565b613a4983611b27565b6001600160a01b038516600090815260cd602052604090205460ff16613a845784604051635a9a1eb960e11b8152600401610a31919061536e565b6001600160a01b038416600090815260cd602052604090205460ff16613abf5783604051635a9a1eb960e11b8152600401610a31919061536e565b6040516395dd919360e01b81526000906001600160a01b038716906395dd919390613aee90879060040161536e565b602060405180830381865afa158015613b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2f9190615a42565b90508180613b5557506001600160a01b038616600090815260d5602052604090205460ff165b15613b815780831115613b7b5760405163e46c155960e01b815260040160405180910390fd5b506112de565b6000613b8f856143806143b4565b905060d054816000015111613bbe5760d0548151604051636e61bb0560e11b8152610a31929190600401615640565b8060a00151600003613be35760405163095bf33360e01b815260040160405180910390fd5b6000613bff604051806020016040528060ca5481525084614403565b9050808511156113985760405163e46c155960e01b815260040160405180910390fd5b613c2d826003614287565b60c9546040516396e85ced60e01b81526001600160a01b03909116906396e85ced90613c5d90859060040161536e565b600060405180830381600087803b158015613c7757600080fd5b505af1158015613c8b573d6000803e3d6000fd5b505050506001600160a01b038216600090815260cd602052604090205460ff16613cca5781604051635a9a1eb960e11b8152600401610a31919061536e565b60d35460005b818110156116fc5760006040518060200160405280866001600160a01b031663aa5af0fd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d479190615a42565b8152509050600060d38381548110613d6157613d61615856565b600091825260209091200154604051632352607960e01b81526001600160a01b0390911691508190632352607990613d9f9089908690600401615caa565b600060405180830381600087803b158015613db957600080fd5b505af1158015613dcd573d6000803e3d6000fd5b5050604051636a95ddef60e01b81526001600160a01b0384169250636a95ddef9150613e0190899089908790600401615cc5565b600060405180830381600087803b158015613e1b57600080fd5b505af1158015613e2f573d6000803e3d6000fd5b505050505050806001019050613cd0565b6000613e4d826008614287565b81600080613e5b8333614423565b509150915080600014613e815760405163f8a5d66d60e01b815260040160405180910390fd5b613e8c8533846146ef565b6001600160a01b038316600090815260cd60209081526040808320338452600381019092529091205460ff16613ec85750600095945050505050565b3360009081526003820160209081526040808320805460ff1916905560cc825280832080548251818502810185019093528083529192909190830182828015613f3a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613f1c575b5050835193945083925060009150505b82811015613f9457876001600160a01b0316848281518110613f6e57613f6e615856565b60200260200101516001600160a01b031603613f8c57809150613f94565b600101613f4a565b50818110613fa457613fa4615d03565b33600090815260cc6020526040902080548190613fc390600190615d19565b81548110613fd357613fd3615856565b9060005260206000200160009054906101000a90046001600160a01b031681838154811061400357614003615856565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508080548061404157614041615d2c565b600082815260208120820160001990810180546001600160a01b031916905590910190915560405133916001600160a01b038b16917fe699a64c18b07ac5b7301aa273f36a2287239eb9501d81950672794afba29a0d9190a35060009998505050505050505050565b6140b26141b9565b606580546001600160a01b0383166001600160a01b031990911681179091556140e36033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6097546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab9061414e9033908690600401615d98565b602060405180830381865afa15801561416b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061418f9190615b73565b9050806141b557333083604051634a3fa29360e01b8152600401610a3193929190615db8565b5050565b6033546001600160a01b0316331461219f5760405162461bcd60e51b8152600401610a3190615e17565b6001600160a01b0381166142095760405162461bcd60e51b8152600401610a3190615e69565b609780546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa090610d539083908590615898565b61010754811115610c8957610107548160405163792bfb1b60e11b8152600401610a31929190615640565b61429182826139de565b156141b55781816040516313b3ccb160e31b8152600401610a31929190615ea7565b6001600160a01b038316600090815260cd602052604090205460ff166142eb5760405162461bcd60e51b8152600401610a3190615f07565b6001600160a01b038316600090815260d260205260408120829184600881111561431757614317615ced565b600881111561432857614328615ced565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f35007a986bcd36d2f73fc7f1b73762e12eadb4406dd163194950fd3b5a6a827d8383836040516132a393929190615f17565b6040805160208082018352600091829052825180820184526001600160a01b0394909416825260cd90522060020154815290565b6143ed6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6143fc836000806000866144fe565b9392505050565b6000806144108484614b84565b905061441b81614bac565b949350505050565b600080600080856001600160a01b031663c37f68e2866040518263ffffffff1660e01b8152600401614455919061536e565b608060405180830381865afa158015614472573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144969190615f3f565b91965094509250905080156144c257858560405163015e34d960e61b8152600401610a31929190615898565b509250925092565b6040805160208082018352600091829052825180820184526001600160a01b0394909416825260cd90522060010154815290565b6145376040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000614542876127da565b805190915060005b8181101561466a57600083828151811061456657614566615856565b60200260200101519050600080600061457f848e614423565b9250925092506000604051806020016040528061459b876149a9565b815250905060006145ba6040518060200160405280858152508361480a565b905060006145d46145ce888e63ffffffff16565b8361480a565b90506145e581878d6020015161488c565b60208c01528a516145f9908390889061488c565b8b5260408b015161460d908490879061488c565b8b60400181815250508e6001600160a01b0316876001600160a01b0316036146585761463e818f8d6060015161488c565b60608c018190526146529084908f9061488c565b60608c01525b5050505050505080600101905061454a565b506000836060015184604001516146819190615a24565b905080846020015111156146a85760208401518190036080850152600060a08501526146bc565b600060808501526020840151810360a08501525b50505095945050505050565b6001600160a01b038116610c89576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b038316600090815260cd60205260409020805460ff1661472b5783604051635a9a1eb960e11b8152600401610a31919061536e565b6001600160a01b038316600090815260038201602052604090205460ff166147535750505050565b61475c83611b27565b600061476e84868560006144ca6144fe565b60a0810151909150156112de5760405163bb55fd2760e01b815260040160405180910390fd5b606580546001600160a01b0319169055610c8981614bc4565b6101075481116147cf5760405162461bcd60e51b8152600401610a3190615fd6565b6101078054908290556040517fc2d09fef144f7c8a86f71ea459f8fc17f675768eb1ae369cbd77fb31d467aafa90610d539083908590615640565b6040805160208101909152600081526040518060200160405280670de0b6b3a764000061483f86600001518660000151614c16565b614849919061591f565b90529392505050565b60408051602081019091526000815260405180602001604052806148496148858660000151670de0b6b3a7640000614c16565b8551614c22565b6000806148998585614b84565b90506148ad6148a782614bac565b84614c2e565b95945050505050565b6148c1826007614287565b6001600160a01b038216600090815260cd60205260409020805460ff166148fd5782604051635a9a1eb960e11b8152600401610a31919061536e565b6001600160a01b038216600090815260038201602052604090205460ff161561492557505050565b6001600160a01b0380831660008181526003840160209081526040808320805460ff1916600190811790915560cc835281842080549182018155845291832090910180549488166001600160a01b031990951685179055519192917f3ab23ab0d51cccc0c3085aec51f99228625aa1a922b3a8ca89a26b0f2027a1a59190a3505050565b60c95460405163fc57d4df60e01b815260009182916001600160a01b039091169063fc57d4df906149de90869060040161536e565b602060405180830381865afa1580156149fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a1f9190615a42565b905080600003612734578260405162e52a7d60e41b8152600401610a31919061536e565b336001600160a01b03821614610c89578033604051634e9383fb60e11b8152600401610a31929190615898565b60ce5460005b81811015614ad857826001600160a01b031660ce8281548110614a9b57614a9b615856565b6000918252602090912001546001600160a01b031603614ad0578260405163d005ce4760e01b8152600401610a31919061536e565b600101614a76565b505060ce805460018101825560008290527fd36cd1c74ef8d7326d8021b776c18fb5a5724b7f7bc93c2f42e43e10ef27d12a0180546001600160a01b0319166001600160a01b038416179055546141b58161425c565b600054610100900460ff16614b555760405162461bcd60e51b8152600401610a319061602e565b61219f614c3a565b600054610100900460ff16610c805760405162461bcd60e51b8152600401610a319061602e565b6040805160208101909152600081526040518060200160405280614849856000015185614c16565b805160009061273490670de0b6b3a76400009061591f565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006143fc82846158c9565b60006143fc828461591f565b60006143fc8284615a24565b600054610100900460ff16614c615760405162461bcd60e51b8152600401610a319061602e565b61219f33614794565b8015155b82525050565b602081016127348284614c6a565b60006001600160a01b038216612734565b614c9c81614c82565b8114610c8957600080fd5b803561273481614c93565b600060208284031215614cc757614cc7600080fd5b600061441b8484614ca7565b80614c6e565b602081016127348284614cd3565b60008060408385031215614cfd57614cfd600080fd5b6000614d098585614ca7565b9250506020614d1a85828601614ca7565b9150509250929050565b80614c9c565b803561273481614d24565b600060208284031215614d4a57614d4a600080fd5b600061441b8484614d2a565b60008083601f840112614d6b57614d6b600080fd5b5081356001600160401b03811115614d8557614d85600080fd5b602083019150836020820283011115614da057614da0600080fd5b9250929050565b60008060008060408587031215614dc057614dc0600080fd5b84356001600160401b03811115614dd957614dd9600080fd5b614de587828801614d56565b945094505060208501356001600160401b03811115614e0657614e06600080fd5b614e1287828801614d56565b95989497509550505050565b60008060008060808587031215614e3757614e37600080fd5b6000614e438787614ca7565b9450506020614e5487828801614ca7565b9350506040614e6587828801614ca7565b9250506060614e7687828801614ca7565b91505092959194509250565b600080600080600060a08688031215614e9d57614e9d600080fd5b6000614ea98888614ca7565b9550506020614eba88828901614ca7565b9450506040614ecb88828901614ca7565b9350506060614edc88828901614d2a565b9250506080614eed88828901614d2a565b9150509295509295909350565b801515614c9c565b803561273481614efa565b600080600080600060608688031215614f2857614f28600080fd5b85356001600160401b03811115614f4157614f41600080fd5b614f4d88828901614d56565b955095505060208601356001600160401b03811115614f6e57614f6e600080fd5b614f7a88828901614d56565b93509350506040614eed88828901614f02565b60008083601f840112614fa257614fa2600080fd5b5081356001600160401b03811115614fbc57614fbc600080fd5b602083019150836060820283011115614da057614da0600080fd5b600080600060408486031215614fef57614fef600080fd5b6000614ffb8686614ca7565b93505060208401356001600160401b0381111561501a5761501a600080fd5b61502686828701614f8d565b92509250509250925092565b600061273482614c82565b614c9c81615032565b80356127348161503d565b60006020828403121561506657615066600080fd5b600061441b8484615046565b6000806000806080858703121561508b5761508b600080fd5b60006150978787614ca7565b94505060206150a887828801614ca7565b93505060406150b987828801614d2a565b9250506060614e7687828801614d2a565b60008060008060008060c087890312156150e6576150e6600080fd5b60006150f28989614ca7565b965050602061510389828a01614ca7565b955050604061511489828a01614ca7565b945050606061512589828a01614ca7565b935050608061513689828a01614d2a565b92505060a061514789828a01614d2a565b9150509295509295509295565b606081016151628286614cd3565b61516f6020830185614cd3565b61441b6040830184614cd3565b600061273482615032565b614c6e8161517c565b602081016127348284615187565b6000806000606084860312156151b6576151b6600080fd5b60006151c28686614ca7565b93505060206151d386828701614ca7565b92505060406151e486828701614d2a565b9150509250925092565b60008060006060848603121561520657615206600080fd5b60006152128686615046565b93505060206151d386828701614d2a565b600061522f8383615187565b505060200190565b6000615241825190565b80845260209384019383018060005b838110156152755781516152648882615223565b975060208301925050600101615250565b509495945050505050565b602080825281016143fc8184615237565b600080600080608085870312156152aa576152aa600080fd5b60006152b68787614ca7565b94505060206152c787828801614ca7565b93505060406150b987828801614ca7565b600080600080600060a086880312156152f3576152f3600080fd5b60006152ff8888614ca7565b955050602061531088828901614ca7565b945050604061532188828901614ca7565b9350506060614edc88828901614ca7565b6000806040838503121561534857615348600080fd5b60006153548585614ca7565b9250506020614d1a85828601614f02565b614c6e81614c82565b602081016127348284615365565b606081016151628286614c6a565b600080604083850312156153a0576153a0600080fd5b60006153ac8585614ca7565b9250506020614d1a85828601615046565b60006153c7825190565b80845260209384019383018060005b838110156152755781516153ea8882615223565b9750602083019250506001016153d6565b602080825281016143fc81846153bd565b8051606083019061541d8482615365565b5060208201516154306020850182614cd3565b5060408201516116fc6040850182614cd3565b600061544f838361540c565b505060600190565b6000615461825190565b80845260209384019383018060005b838110156152755781516154848882615443565b975060208301925050600101615470565b602080825281016143fc8184615457565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b03821117156154e1576154e16154a6565b6040525050565b60006154f360405190565b90506154ff82826154bc565b919050565b60006001600160401b0382111561551d5761551d6154a6565b5060209081020190565b600061553a61553584615504565b6154e8565b8381529050602080820190840283018581111561555957615559600080fd5b835b8181101561557d578061556e8882614ca7565b8452506020928301920161555b565b5050509392505050565b600082601f83011261559b5761559b600080fd5b813561441b848260208601615527565b6000602082840312156155c0576155c0600080fd5b81356001600160401b038111156155d9576155d9600080fd5b61441b84828501615587565b600061522f8383614cd3565b60006155fb825190565b80845260209384019383018060005b8381101561527557815161561e88826155e5565b97506020830192505060010161560a565b602080825281016143fc81846155f1565b6040810161564e8285614cd3565b6143fc6020830184614cd3565b6000806040838503121561567157615671600080fd5b6000614d098585614d2a565b6000806040838503121561569357615693600080fd5b600061569f8585614ca7565b9250506020614d1a85828601614d2a565b60098110610c8957600080fd5b8035612734816156b0565b600080604083850312156156de576156de600080fd5b60006156ea8585614ca7565b9250506020614d1a858286016156bd565b600080600080600060a0868803121561571657615716600080fd5b60006157228888614ca7565b955050602061573388828901614ca7565b945050604061574488828901614ca7565b935050606061575588828901614d2a565b9250506080614eed88828901614f02565b602e81526000602082017f436c6f736520666163746f722067726561746572207468616e206d6178696d7581526d369031b637b9b2903330b1ba37b960911b602082015291505b5060400190565b6020808252810161273481615766565b602e81526000602082017f436c6f736520666163746f7220736d616c6c6572207468616e206d696e696d7581526d369031b637b9b2903330b1ba37b960911b602082015291506157ad565b60208082528101612734816157c4565b600d81526000602082016c1a5b9d985b1a59081a5b9c1d5d609a1b815291505b5060200190565b602080825281016127348161581f565b634e487b7160e01b600052603260045260246000fd5b80516127348161503d565b60006020828403121561588c5761588c600080fd5b600061441b848461586c565b604081016158a68285615365565b6143fc6020830184615365565b634e487b7160e01b600052601160045260246000fd5b8181028082158382048514176158e1576158e16158b3565b5092915050565b6000602082840312156158fd576158fd600080fd5b600061441b84846156bd565b634e487b7160e01b600052601260045260246000fd5b60008261592e5761592e615909565b500490565b60a081016159418288615365565b61594e6020830187615365565b61595b6040830186614cd3565b6159686060830185615187565b6159756080830184614c6a565b9695505050505050565b602881526000602082017f4e6f6e7a65726f20626f72726f772062616c616e6365206166746572206c69718152673ab4b230ba34b7b760c11b602082015291506157ad565b602080825281016127348161597f565b604081016159e28285615187565b6143fc6020830184615187565b600e81526000602082016d616c72656164792065786973747360901b8152915061583f565b60208082528101612734816159ef565b80820180821115612734576127346158b3565b805161273481614d24565b600060208284031215615a5757615a57600080fd5b600061441b8484615a37565b606081016151628286615187565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b602082015291506157ad565b6020808252810161273481615a71565b60608101615ad58286615365565b61516f6020830185615365565b603181526000602082017f6c69717569646174696f6e20696e63656e746976652073686f756c64206265208152700cee4cac2e8cae440e8d0c2dc4062ca627607b1b602082015291506157ad565b6020808252810161273481615ae2565b60006000198203615b5357615b536158b3565b5060010190565b6040810161564e8285615365565b805161273481614efa565b600060208284031215615b8857615b88600080fd5b600061441b8484615b68565b601b81526000602082017f436f6d7074726f6c6c65723a20496e76616c69642076546f6b656e00000000008152915061583f565b6020808252810161273481615b94565b601981526000602082017f696e76616c6964206e756d626572206f66206d61726b657473000000000000008152915061583f565b6020808252810161273481615bd8565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015291506157ad565b6020808252810161273481615c1c565b600060ff8216612734565b614c6e81615c77565b602081016127348284615c82565b805160208301906116fc8482614cd3565b60408101615cb88285615365565b6143fc6020830184615c99565b60608101615cd38286615365565b615ce06020830185615365565b61441b6040830184615c99565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052600160045260246000fd5b81810381811115612734576127346158b3565b634e487b7160e01b600052603160045260246000fd5b60005b83811015615d5d578181015183820152602001615d45565b50506000910152565b6000615d70825190565b808452602084019350615d87818560208601615d42565b601f01601f19169290920192915050565b60408101615da68285615365565b818103602083015261441b8184615d66565b60608101615dc68286615365565b615dd36020830185615365565b81810360408301526148ad8184615d66565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65729101908152600061583f565b6020808252810161273481615de5565b602581526000602082017f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b602082015291506157ad565b6020808252810161273481615e27565b60098110610c8957610c89615ced565b806154ff81615e79565b600061273482615e89565b614c6e81615e93565b60408101615eb58285615365565b6143fc6020830184615e9e565b602881526000602082017f63616e6e6f742070617573652061206d61726b65742074686174206973206e6f8152671d081b1a5cdd195960c21b602082015291506157ad565b6020808252810161273481615ec2565b60608101615f258286615187565b615f326020830185615e9e565b61441b6040830184614c6a565b60008060008060808587031215615f5857615f58600080fd5b6000615f648787615a37565b9450506020615f7587828801615a37565b9350506040615f8687828801615a37565b9250506060614e7687828801615a37565b602281526000602082017f436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d8152611a5d60f21b602082015291506157ad565b6020808252810161273481615f97565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b602082015291506157ad565b6020808252810161273481615fe656fe7365744d61726b6574426f72726f774361707328616464726573735b5d2c75696e743235365b5d297365744d696e4c6971756964617461626c65436f6c6c61746572616c2875696e7432353629736574436f6c6c61746572616c466163746f7228616464726573732c75696e743235362c75696e7432353629736574416374696f6e7350617573656428616464726573735b5d2c75696e743235365b5d2c626f6f6c29736574466f726365644c69717569646174696f6e28616464726573732c626f6f6c297365744d61726b6574537570706c794361707328616464726573735b5d2c75696e743235365b5d29a2646970667358221220aceaedbcc81d5b354d19e0c90cc25c831276e80151c01a996b576b521c03598464736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3FB JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x80D45A2D GT PUSH2 0x215 JUMPI DUP1 PUSH4 0xC32094C7 GT PUSH2 0x125 JUMPI DUP1 PUSH4 0xDDBF54FD GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xE8755446 GT PUSH2 0x87 JUMPI DUP1 PUSH4 0xE8755446 EQ PUSH2 0x968 JUMPI DUP1 PUSH4 0xE89D51AD EQ PUSH2 0x971 JUMPI DUP1 PUSH4 0xEADE3EED EQ PUSH2 0x984 JUMPI DUP1 PUSH4 0xEDE4EDD0 EQ PUSH2 0x997 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x9AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xDDBF54FD EQ PUSH2 0x91E JUMPI DUP1 PUSH4 0xDF71403B EQ PUSH2 0x931 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x944 JUMPI DUP1 PUSH4 0xE85A2960 EQ PUSH2 0x955 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD136AF44 GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0xD136AF44 EQ PUSH2 0x8DC JUMPI DUP1 PUSH4 0xDA35A26F EQ PUSH2 0x8EF JUMPI DUP1 PUSH4 0xDB5C65DE EQ PUSH2 0x902 JUMPI DUP1 PUSH4 0xDCE15449 EQ PUSH2 0x90B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC32094C7 EQ PUSH2 0x882 JUMPI DUP1 PUSH4 0xC488847B EQ PUSH2 0x895 JUMPI DUP1 PUSH4 0xC7EE005E EQ PUSH2 0x8B6 JUMPI DUP1 PUSH4 0xCAB4F84C EQ PUSH2 0x8C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA8431081 GT PUSH2 0x1A8 JUMPI DUP1 PUSH4 0xB2068E84 GT PUSH2 0x177 JUMPI DUP1 PUSH4 0xB2068E84 EQ PUSH2 0x814 JUMPI DUP1 PUSH4 0xB4A0BDF3 EQ PUSH2 0x834 JUMPI DUP1 PUSH4 0xBE26317E EQ PUSH2 0x845 JUMPI DUP1 PUSH4 0xC0891BA9 EQ PUSH2 0x84F JUMPI DUP1 PUSH4 0xC2998238 EQ PUSH2 0x862 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA8431081 EQ PUSH2 0x7B2 JUMPI DUP1 PUSH4 0xABFCEFFC EQ PUSH2 0x7C5 JUMPI DUP1 PUSH4 0xAFCFF50F EQ PUSH2 0x7E5 JUMPI DUP1 PUSH4 0xB0772D0B EQ PUSH2 0x80C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8E6470EA GT PUSH2 0x1E4 JUMPI DUP1 PUSH4 0x8E6470EA EQ PUSH2 0x737 JUMPI DUP1 PUSH4 0x8E8F294B EQ PUSH2 0x74A JUMPI DUP1 PUSH4 0x92136395 EQ PUSH2 0x78C JUMPI DUP1 PUSH4 0x929FE9A1 EQ PUSH2 0x79F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x80D45A2D EQ PUSH2 0x6D4 JUMPI DUP1 PUSH4 0x8B3113F6 EQ PUSH2 0x6E7 JUMPI DUP1 PUSH4 0x8C1AC18A EQ PUSH2 0x6FA JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x71D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x51DFF989 GT PUSH2 0x310 JUMPI DUP1 PUSH4 0x5CC4FDEB GT PUSH2 0x2A3 JUMPI DUP1 PUSH4 0x6D0BE88D GT PUSH2 0x272 JUMPI DUP1 PUSH4 0x6D0BE88D EQ PUSH2 0x68B JUMPI DUP1 PUSH4 0x6D35BF91 EQ PUSH2 0x69E JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x6B1 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x6B9 JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0x6C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5CC4FDEB EQ PUSH2 0x63D JUMPI DUP1 PUSH4 0x5EC88C79 EQ PUSH2 0x650 JUMPI DUP1 PUSH4 0x61252FD1 EQ PUSH2 0x663 JUMPI DUP1 PUSH4 0x6A56947E EQ PUSH2 0x678 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x530E784F GT PUSH2 0x2DF JUMPI DUP1 PUSH4 0x530E784F EQ PUSH2 0x5F1 JUMPI DUP1 PUSH4 0x56AAEE2D EQ PUSH2 0x604 JUMPI DUP1 PUSH4 0x5C21B6C5 EQ PUSH2 0x617 JUMPI DUP1 PUSH4 0x5C778605 EQ PUSH2 0x62A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x51DFF989 EQ PUSH2 0x53A JUMPI DUP1 PUSH4 0x520B6C74 EQ PUSH2 0x5AB JUMPI DUP1 PUSH4 0x528A174C EQ PUSH2 0x5BE JUMPI DUP1 PUSH4 0x52D84D1E EQ PUSH2 0x5D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1EDEDC91 GT PUSH2 0x393 JUMPI DUP1 PUSH4 0x41C728B9 GT PUSH2 0x362 JUMPI DUP1 PUSH4 0x41C728B9 EQ PUSH2 0x53A JUMPI DUP1 PUSH4 0x47EF3B3B EQ PUSH2 0x54D JUMPI DUP1 PUSH4 0x4A584432 EQ PUSH2 0x560 JUMPI DUP1 PUSH4 0x4ADA90AF EQ PUSH2 0x580 JUMPI DUP1 PUSH4 0x4E79238F EQ PUSH2 0x589 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1EDEDC91 EQ PUSH2 0x4D5 JUMPI DUP1 PUSH4 0x24AAA220 EQ PUSH2 0x4E8 JUMPI DUP1 PUSH4 0x2BCE219C EQ PUSH2 0x4FB JUMPI DUP1 PUSH4 0x3D98A1E5 EQ PUSH2 0x50E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x10B98338 GT PUSH2 0x3CF JUMPI DUP1 PUSH4 0x10B98338 EQ PUSH2 0x46E JUMPI DUP1 PUSH4 0x12348E96 EQ PUSH2 0x49C JUMPI DUP1 PUSH4 0x186DB48F EQ PUSH2 0x4AF JUMPI DUP1 PUSH4 0x1BC41F28 EQ PUSH2 0x4C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0x7E3DD2 EQ PUSH2 0x400 JUMPI DUP1 PUSH4 0x2C3BCBB EQ PUSH2 0x419 JUMPI DUP1 PUSH4 0x686DAB6 EQ PUSH2 0x446 JUMPI DUP1 PUSH4 0xE32CB86 EQ PUSH2 0x459 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP2 SWAP1 PUSH2 0x4C74 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x439 PUSH2 0x427 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH1 0xD1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP2 SWAP1 PUSH2 0x4CD9 JUMP JUMPDEST PUSH2 0x439 PUSH2 0x454 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH2 0x9BD JUMP JUMPDEST PUSH2 0x46C PUSH2 0x467 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH2 0xC78 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x403 PUSH2 0x47C CALLDATASIZE PUSH1 0x4 PUSH2 0x4CE7 JUMP JUMPDEST PUSH1 0xD7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x4AA CALLDATASIZE PUSH1 0x4 PUSH2 0x4D35 JUMP JUMPDEST PUSH2 0xC8C JUMP JUMPDEST PUSH2 0x46C PUSH2 0x4BD CALLDATASIZE PUSH1 0x4 PUSH2 0x4DA7 JUMP JUMPDEST PUSH2 0xD5F JUMP JUMPDEST PUSH2 0x46C PUSH2 0x4D0 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E1E JUMP JUMPDEST PUSH2 0xEAE JUMP JUMPDEST PUSH2 0x46C PUSH2 0x4E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E82 JUMP JUMPDEST PUSH2 0x1268 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x4F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F0D JUMP JUMPDEST PUSH2 0x12E5 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x509 CALLDATASIZE PUSH1 0x4 PUSH2 0x4FD7 JUMP JUMPDEST PUSH2 0x13A2 JUMP JUMPDEST PUSH2 0x403 PUSH2 0x51C CALLDATASIZE PUSH1 0x4 PUSH2 0x5051 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x548 CALLDATASIZE PUSH1 0x4 PUSH2 0x5072 JUMP JUMPDEST PUSH2 0x168B JUMP JUMPDEST PUSH2 0x46C PUSH2 0x55B CALLDATASIZE PUSH1 0x4 PUSH2 0x50CA JUMP JUMPDEST PUSH2 0x1702 JUMP JUMPDEST PUSH2 0x439 PUSH2 0x56E CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH1 0xCF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x439 PUSH1 0xCB SLOAD DUP2 JUMP JUMPDEST PUSH2 0x59C PUSH2 0x597 CALLDATASIZE PUSH1 0x4 PUSH2 0x5072 JUMP JUMPDEST PUSH2 0x17E4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5154 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x5B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4D35 JUMP JUMPDEST PUSH2 0x1815 JUMP JUMPDEST PUSH2 0x59C PUSH2 0x5CC CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH2 0x186F JUMP JUMPDEST PUSH2 0x5E4 PUSH2 0x5DF CALLDATASIZE PUSH1 0x4 PUSH2 0x4D35 JUMP JUMPDEST PUSH2 0x189A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP2 SWAP1 PUSH2 0x5190 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x5FF CALLDATASIZE PUSH1 0x4 PUSH2 0x5051 JUMP JUMPDEST PUSH2 0x18C4 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x612 CALLDATASIZE PUSH1 0x4 PUSH2 0x5051 JUMP JUMPDEST PUSH2 0x1928 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x625 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH2 0x1B27 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x638 CALLDATASIZE PUSH1 0x4 PUSH2 0x519E JUMP JUMPDEST PUSH2 0x1BD1 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x64B CALLDATASIZE PUSH1 0x4 PUSH2 0x51EE JUMP JUMPDEST PUSH2 0x1C47 JUMP JUMPDEST PUSH2 0x59C PUSH2 0x65E CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH2 0x1E58 JUMP JUMPDEST PUSH2 0x66B PUSH2 0x1E6A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP2 SWAP1 PUSH2 0x5280 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x686 CALLDATASIZE PUSH1 0x4 PUSH2 0x5291 JUMP JUMPDEST PUSH2 0x1ECC JUMP JUMPDEST PUSH2 0x46C PUSH2 0x699 CALLDATASIZE PUSH1 0x4 PUSH2 0x5291 JUMP JUMPDEST PUSH2 0x1F73 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x6AC CALLDATASIZE PUSH1 0x4 PUSH2 0x52D8 JUMP JUMPDEST PUSH2 0x20E6 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x218D JUMP JUMPDEST PUSH2 0x46C PUSH2 0x21A1 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH2 0x5E4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x6E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4D35 JUMP JUMPDEST PUSH2 0x21D6 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x6F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x5332 JUMP JUMPDEST PUSH2 0x21E7 JUMP JUMPDEST PUSH2 0x403 PUSH2 0x708 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH2 0x46C PUSH2 0x745 CALLDATASIZE PUSH1 0x4 PUSH2 0x519E JUMP JUMPDEST PUSH2 0x22AC JUMP JUMPDEST PUSH2 0x77D PUSH2 0x758 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD PUSH1 0xFF SWAP1 SWAP2 AND SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x537C JUMP JUMPDEST PUSH2 0x46C PUSH2 0x79A CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH2 0x23BF JUMP JUMPDEST PUSH2 0x403 PUSH2 0x7AD CALLDATASIZE PUSH1 0x4 PUSH2 0x538A JUMP JUMPDEST PUSH2 0x2706 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x7C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x4D35 JUMP JUMPDEST PUSH2 0x273A JUMP JUMPDEST PUSH2 0x7D8 PUSH2 0x7D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH2 0x27DA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP2 SWAP1 PUSH2 0x53FB JUMP JUMPDEST PUSH2 0x72A PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x7D8 PUSH2 0x2954 JUMP JUMPDEST PUSH2 0x827 PUSH2 0x822 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH2 0x29B4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP2 SWAP1 PUSH2 0x5495 JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5E4 JUMP JUMPDEST PUSH2 0x439 PUSH2 0x107 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x85D CALLDATASIZE PUSH1 0x4 PUSH2 0x519E JUMP JUMPDEST PUSH2 0x2BF5 JUMP JUMPDEST PUSH2 0x875 PUSH2 0x870 CALLDATASIZE PUSH1 0x4 PUSH2 0x55AB JUMP JUMPDEST PUSH2 0x2E6B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP2 SWAP1 PUSH2 0x562F JUMP JUMPDEST PUSH2 0x46C PUSH2 0x890 CALLDATASIZE PUSH1 0x4 PUSH2 0x5051 JUMP JUMPDEST PUSH2 0x2F19 JUMP JUMPDEST PUSH2 0x8A8 PUSH2 0x8A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x519E JUMP JUMPDEST PUSH2 0x2F93 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x410 SWAP3 SWAP2 SWAP1 PUSH2 0x5640 JUMP JUMPDEST PUSH1 0xD6 SLOAD PUSH2 0x5E4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x8D7 CALLDATASIZE PUSH1 0x4 PUSH2 0x5051 JUMP JUMPDEST PUSH2 0x30BE JUMP JUMPDEST PUSH2 0x46C PUSH2 0x8EA CALLDATASIZE PUSH1 0x4 PUSH2 0x4DA7 JUMP JUMPDEST PUSH2 0x32B0 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x8FD CALLDATASIZE PUSH1 0x4 PUSH2 0x565B JUMP JUMPDEST PUSH2 0x340B JUMP JUMPDEST PUSH2 0x439 PUSH1 0xD0 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x5E4 PUSH2 0x919 CALLDATASIZE PUSH1 0x4 PUSH2 0x567D JUMP JUMPDEST PUSH2 0x34E0 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x92C CALLDATASIZE PUSH1 0x4 PUSH2 0x5332 JUMP JUMPDEST PUSH2 0x3518 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x93F CALLDATASIZE PUSH1 0x4 PUSH2 0x519E JUMP JUMPDEST PUSH2 0x35DC JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x72A JUMP JUMPDEST PUSH2 0x403 PUSH2 0x963 CALLDATASIZE PUSH1 0x4 PUSH2 0x56C8 JUMP JUMPDEST PUSH2 0x39DE JUMP JUMPDEST PUSH2 0x439 PUSH1 0xCA SLOAD DUP2 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x97F CALLDATASIZE PUSH1 0x4 PUSH2 0x56FB JUMP JUMPDEST PUSH2 0x3A35 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x992 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CE7 JUMP JUMPDEST PUSH2 0x3C22 JUMP JUMPDEST PUSH2 0x439 PUSH2 0x9A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH2 0x3E40 JUMP JUMPDEST PUSH2 0x46C PUSH2 0x9B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB2 JUMP JUMPDEST PUSH2 0x40AA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9F5 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x15 DUP2 MSTORE PUSH1 0x20 ADD PUSH21 0x756E6C6973744D61726B6574286164647265737329 PUSH1 0x58 SHL DUP2 MSTORE POP PUSH2 0x411B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF AND PUSH2 0xA3A JUMPI DUP3 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xA45 DUP4 PUSH1 0x2 PUSH2 0x39DE JUMP JUMPDEST PUSH2 0xA62 JUMPI PUSH1 0x40 MLOAD PUSH4 0x309B075 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xA6D DUP4 PUSH1 0x0 PUSH2 0x39DE JUMP JUMPDEST PUSH2 0xA8A JUMPI PUSH1 0x40 MLOAD PUSH4 0x6ED36FB PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xA95 DUP4 PUSH1 0x1 PUSH2 0x39DE JUMP JUMPDEST PUSH2 0xAB2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4E577B7D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xABD DUP4 PUSH1 0x3 PUSH2 0x39DE JUMP JUMPDEST PUSH2 0xADA JUMPI PUSH1 0x40 MLOAD PUSH4 0x2B1E3409 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xAE5 DUP4 PUSH1 0x4 PUSH2 0x39DE JUMP JUMPDEST PUSH2 0xB02 JUMPI PUSH1 0x40 MLOAD PUSH4 0xBB56E525 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xB0D DUP4 PUSH1 0x7 PUSH2 0x39DE JUMP JUMPDEST PUSH2 0xB2A JUMPI PUSH1 0x40 MLOAD PUSH4 0xA6A9A9D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xB35 DUP4 PUSH1 0x5 PUSH2 0x39DE JUMP JUMPDEST PUSH2 0xB52 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB3CF04AD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xB5D DUP4 PUSH1 0x6 PUSH2 0x39DE JUMP JUMPDEST PUSH2 0xB7A JUMPI PUSH1 0x40 MLOAD PUSH4 0x8624F71 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xB85 DUP4 PUSH1 0x8 PUSH2 0x39DE JUMP JUMPDEST PUSH2 0xBA2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2F412A55 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0xBD9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x668019B3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0xC10 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8603C8CF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD ISZERO PUSH2 0xC33 JUMPI PUSH1 0x40 MLOAD PUSH4 0x707987B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0xFF NOT AND DUP2 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH32 0x302FEB03EFD5741DF80EFE7F97F5D93D74D46A542A3D312D0FAAE64FA1F3E0E9 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xC80 PUSH2 0x41B9 JUMP JUMPDEST PUSH2 0xC89 DUP2 PUSH2 0x41E3 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0xCCA PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x736574436C6F7365466163746F722875696E7432353629000000000000000000 DUP2 MSTORE POP PUSH2 0x411B JUMP JUMPDEST DUP1 PUSH8 0xC7D713B49DA0000 LT ISZERO PUSH2 0xCF2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x57B4 JUMP JUMPDEST DUP1 PUSH7 0xB1A2BC2EC50000 GT ISZERO PUSH2 0xD19 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x580F JUMP JUMPDEST PUSH1 0xCA DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x3B9670CF975D26958E754B57098EAA2AC914D8D2A31B83257997B9F346110FD9 SWAP1 PUSH2 0xD53 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x5640 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0xD80 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x603F PUSH1 0x28 SWAP2 CODECOPY PUSH2 0x411B JUMP JUMPDEST DUP3 DUP2 DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xD90 JUMPI POP DUP1 DUP3 EQ JUMPDEST PUSH2 0xDAC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5846 JUMP JUMPDEST PUSH2 0xDB5 DUP3 PUSH2 0x425C JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xEA5 JUMPI DUP5 DUP5 DUP3 DUP2 DUP2 LT PUSH2 0xDD2 JUMPI PUSH2 0xDD2 PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0xCF PUSH1 0x0 DUP10 DUP10 DUP6 DUP2 DUP2 LT PUSH2 0xDEF JUMPI PUSH2 0xDEF PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE04 SWAP2 SWAP1 PUSH2 0x5051 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SSTORE DUP7 DUP7 DUP3 DUP2 DUP2 LT PUSH2 0xE30 JUMPI PUSH2 0xE30 PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE45 SWAP2 SWAP1 PUSH2 0x5051 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x6F1951B2AAD10F3FC81B86D91105B413A5B3F847A34BBC5CE1904201B14438F6 DUP7 DUP7 DUP5 DUP2 DUP2 LT PUSH2 0xE81 JUMPI PUSH2 0xE81 PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x40 MLOAD PUSH2 0xE95 SWAP2 SWAP1 PUSH2 0x4CD9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x1 ADD PUSH2 0xDB8 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xEB9 DUP5 PUSH1 0x4 PUSH2 0x4287 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF AND PUSH2 0xEF5 JUMPI DUP5 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SUB PUSH2 0xF9D JUMPI ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5FE3B567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF4D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF71 SWAP2 SWAP1 PUSH2 0x5877 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xF98 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC73EB05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x10CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xFD8 JUMPI DUP4 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5FE3B567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1016 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x103A SWAP2 SWAP1 PUSH2 0x5877 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5FE3B567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1081 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10A5 SWAP2 SWAP1 PUSH2 0x5877 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x10CC JUMPI PUSH1 0x40 MLOAD PUSH4 0xC73EB05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x110B JUMPI DUP5 DUP3 PUSH1 0x40 MLOAD PUSH4 0xCDFB2DB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH2 0x5898 JUMP JUMPDEST PUSH1 0xD3 SLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xEA5 JUMPI PUSH1 0x0 PUSH1 0xD3 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x112E JUMPI PUSH2 0x112E PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x51D1D4F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 PUSH4 0xA3A3A9E SWAP1 PUSH2 0x116A SWAP1 DUP12 SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1184 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1198 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0xDB7954FD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP3 POP PUSH4 0xDB7954FD SWAP2 POP PUSH2 0x11CA SWAP1 DUP12 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x11F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0xDB7954FD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP3 POP PUSH4 0xDB7954FD SWAP2 POP PUSH2 0x122A SWAP1 DUP12 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1244 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1258 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x1111 JUMP JUMPDEST PUSH1 0xD6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x12DE JUMPI PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x67994E8B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xCF329D16 SWAP1 PUSH2 0x12AB SWAP1 DUP7 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x12D9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1306 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x60B8 PUSH1 0x2A SWAP2 CODECOPY PUSH2 0x411B JUMP JUMPDEST DUP4 DUP3 PUSH2 0x131A PUSH2 0x1315 DUP3 DUP5 PUSH2 0x58C9 JUMP JUMPDEST PUSH2 0x425C JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1398 JUMPI PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x138F JUMPI PUSH2 0x1387 DUP10 DUP10 DUP5 DUP2 DUP2 LT PUSH2 0x1345 JUMPI PUSH2 0x1345 PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x135A SWAP2 SWAP1 PUSH2 0x5051 JUMP JUMPDEST DUP9 DUP9 DUP5 DUP2 DUP2 LT PUSH2 0x136C JUMPI PUSH2 0x136C PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1381 SWAP2 SWAP1 PUSH2 0x58E8 JUMP JUMPDEST DUP8 PUSH2 0x42B3 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1328 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x131D JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13B0 DUP5 PUSH2 0x4380 PUSH2 0x43B4 JUMP JUMPDEST SWAP1 POP PUSH1 0xD0 SLOAD DUP2 PUSH1 0x0 ADD MLOAD GT ISZERO PUSH2 0x13E0 JUMPI PUSH1 0xD0 SLOAD DUP2 MLOAD PUSH1 0x40 MLOAD PUSH4 0x1A451C0F PUSH1 0xE2 SHL DUP2 MSTORE PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5640 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1400 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xCB SLOAD DUP2 MSTORE POP DUP4 PUSH1 0x40 ADD MLOAD PUSH2 0x4403 JUMP JUMPDEST DUP3 MLOAD SWAP1 SWAP2 POP DUP2 LT PUSH2 0x1428 JUMPI DUP2 MLOAD PUSH1 0x40 MLOAD PUSH4 0x2C1F8EF1 PUSH1 0xE2 SHL DUP2 MSTORE PUSH2 0xA31 SWAP2 DUP4 SWAP2 PUSH1 0x4 ADD PUSH2 0x5640 JUMP JUMPDEST DUP2 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 SUB PUSH2 0x144D JUMPI PUSH1 0x40 MLOAD PUSH4 0x95BF333 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH2 0x145C PUSH2 0x1315 PUSH1 0x2 DUP4 PUSH2 0x591F JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x161F JUMPI PUSH1 0xCD PUSH1 0x0 DUP8 DUP8 DUP5 DUP2 DUP2 LT PUSH2 0x147D JUMPI PUSH2 0x147D PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 MUL ADD PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1495 SWAP2 SWAP1 PUSH2 0x5051 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x14FA JUMPI DUP6 DUP6 DUP3 DUP2 DUP2 LT PUSH2 0x14C8 JUMPI PUSH2 0x14C8 PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 MUL ADD PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x14E0 SWAP2 SWAP1 PUSH2 0x5051 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0xCD PUSH1 0x0 DUP8 DUP8 DUP5 DUP2 DUP2 LT PUSH2 0x1510 JUMPI PUSH2 0x1510 PUSH2 0x5856 JUMP JUMPDEST PUSH2 0x1526 SWAP3 PUSH1 0x20 PUSH1 0x60 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0x5051 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x156F JUMPI DUP6 DUP6 DUP3 DUP2 DUP2 LT PUSH2 0x1559 JUMPI PUSH2 0x1559 PUSH2 0x5856 JUMP JUMPDEST PUSH2 0x14E0 SWAP3 PUSH1 0x20 PUSH1 0x60 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0x5051 JUMP JUMPDEST CALLDATASIZE DUP7 DUP7 DUP4 DUP2 DUP2 LT PUSH2 0x1582 JUMPI PUSH2 0x1582 PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 MUL ADD SWAP1 POP DUP1 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x159D SWAP2 SWAP1 PUSH2 0x5051 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8BBDB6DB CALLER DUP11 PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x15BF PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x5051 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x15E1 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5933 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x160F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x145F JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x162B DUP8 PUSH2 0x27DA JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x12D9 JUMPI PUSH1 0x0 PUSH2 0x1660 DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1652 JUMPI PUSH2 0x1652 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP12 PUSH2 0x4423 JUMP JUMPDEST POP SWAP2 POP POP DUP1 ISZERO PUSH2 0x1682 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x59C4 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x1633 JUMP JUMPDEST PUSH1 0xD6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x16FC JUMPI PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x67994E8B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xCF329D16 SWAP1 PUSH2 0x16CE SWAP1 DUP7 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1398 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0xD6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x17DC JUMPI PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x67994E8B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xCF329D16 SWAP1 PUSH2 0x1745 SWAP1 DUP7 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x175F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1773 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x67994E8B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP3 POP PUSH4 0xCF329D16 SWAP2 POP PUSH2 0x17A9 SWAP1 DUP8 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x17D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x17F9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x44CA PUSH2 0x44FE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 SWAP1 SWAP2 ADD MLOAD PUSH1 0x0 SWAP11 SWAP2 SWAP10 POP SWAP8 POP SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1836 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x6067 PUSH1 0x25 SWAP2 CODECOPY PUSH2 0x411B JUMP JUMPDEST PUSH1 0xD0 DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH31 0xB4F4F153AD7F1397564A8830FEF092481E8CF6A2CD3FF04F96D10BA51200A5 SWAP1 PUSH2 0xD53 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x5640 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x1881 DUP6 PUSH2 0x44CA PUSH2 0x43B4 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 SWAP1 SWAP2 ADD MLOAD PUSH1 0x0 SWAP8 SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xCE DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x18AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH2 0x18CC PUSH2 0x41B9 JUMP JUMPDEST PUSH2 0x18D5 DUP2 PUSH2 0x46C8 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP1 PUSH32 0xD52B2B9B7E9EE655FCB95D2E5B9E0C9F69E7EF2B8E9D2D0EA78402D576D22E22 SWAP1 PUSH2 0xD53 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x59D4 JUMP JUMPDEST PUSH2 0x1930 PUSH2 0x41B9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1969 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5A14 JUMP JUMPDEST PUSH1 0xD3 SLOAD PUSH2 0x197A PUSH2 0x1315 DUP3 PUSH1 0x1 PUSH2 0x5A24 JUMP JUMPDEST PUSH1 0xD3 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE PUSH32 0x915C3EB987B20E1AF620C1403197BF687FB7F18513B3A73FDE6E78C7072C41A6 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0xCE SLOAD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1A80 JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2A869A4D PUSH1 0xCE DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x1A0D JUMPI PUSH2 0x1A0D PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x1A43 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1A71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x19E3 JUMP JUMPDEST POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF7C618C1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1ABF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1AE3 SWAP2 SWAP1 PUSH2 0x5877 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x66A44D77DB1581603D7D8CA1CA494756C0D359C7FFACD9B2C8F78DAB7ACEAE2 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B32 DUP3 PUSH2 0x27DA JUMP JUMPDEST DUP1 MLOAD PUSH1 0xC9 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x12DE JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x96E85CED DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1B70 JUMPI PUSH2 0x1B70 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1B94 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1BC2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x1B47 JUMP JUMPDEST PUSH1 0xD6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x1C42 JUMPI PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x67994E8B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xCF329D16 SWAP1 PUSH2 0x1C14 SWAP1 DUP6 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xEA5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1C68 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2C DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x608C PUSH1 0x2C SWAP2 CODECOPY PUSH2 0x411B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF AND PUSH2 0x1CA4 JUMPI DUP4 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH8 0xD2F13F7789F0000 DUP4 GT ISZERO PUSH2 0x1CCD JUMPI PUSH1 0x40 MLOAD PUSH4 0x2F22CAD PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP3 GT ISZERO PUSH2 0x1CF5 JUMPI PUSH1 0x40 MLOAD PUSH3 0xF9474B PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 DUP3 LT ISZERO PUSH2 0x1D15 JUMPI PUSH1 0x40 MLOAD PUSH3 0xF9474B PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1D92 JUMPI POP PUSH1 0xC9 SLOAD PUSH1 0x40 MLOAD PUSH4 0xFC57D4DF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xFC57D4DF SWAP1 PUSH2 0x1D4F SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D6C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D90 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0x1DB1 JUMPI DUP4 PUSH1 0x40 MLOAD PUSH3 0xE52A7D PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD DUP4 DUP2 EQ PUSH2 0x1E01 JUMPI PUSH1 0x1 DUP3 ADD DUP5 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x70483E6592CD5182D45AC970E05BC62CDCC90E9D8EF2C2DBE686CF383BCD7FC5 SWAP1 PUSH2 0x1DF8 SWAP1 DUP8 SWAP1 DUP5 SWAP1 DUP9 SWAP1 PUSH2 0x5A63 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST PUSH1 0x2 DUP3 ADD SLOAD DUP4 DUP2 EQ PUSH2 0x17DC JUMPI PUSH1 0x2 DUP4 ADD DUP5 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x9E92C7D5FEF69846094F3DDCADCB9402C6BA469C461368714F1CABD8EF48B591 SWAP1 PUSH2 0x1E48 SWAP1 DUP9 SWAP1 DUP5 SWAP1 DUP9 SWAP1 PUSH2 0x5A63 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x1881 DUP6 PUSH2 0x4380 PUSH2 0x43B4 JUMP JUMPDEST PUSH1 0x60 PUSH1 0xD3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1EC2 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1EA4 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0xD6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x16FC JUMPI PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x67994E8B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xCF329D16 SWAP1 PUSH2 0x1F0F SWAP1 DUP7 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1F3D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x67994E8B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP3 POP PUSH4 0xCF329D16 SWAP2 POP PUSH2 0x16CE SWAP1 DUP6 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH2 0x1F7E DUP5 PUSH1 0x6 PUSH2 0x4287 JUMP JUMPDEST PUSH2 0x1F89 DUP5 DUP5 DUP4 PUSH2 0x46EF JUMP JUMPDEST PUSH1 0xD3 SLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x17DC JUMPI PUSH1 0x0 PUSH1 0xD3 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1FAC JUMPI PUSH2 0x1FAC PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x51D1D4F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 PUSH4 0xA3A3A9E SWAP1 PUSH2 0x1FE8 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2002 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2016 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0xDB7954FD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP3 POP PUSH4 0xDB7954FD SWAP2 POP PUSH2 0x2048 SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2062 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2076 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0xDB7954FD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP3 POP PUSH4 0xDB7954FD SWAP2 POP PUSH2 0x20A8 SWAP1 DUP11 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x20D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x1F8F JUMP JUMPDEST PUSH1 0xD6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x12DE JUMPI PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x67994E8B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xCF329D16 SWAP1 PUSH2 0x2129 SWAP1 DUP6 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2157 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x67994E8B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP3 POP PUSH4 0xCF329D16 SWAP2 POP PUSH2 0x12AB SWAP1 DUP7 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH2 0x2195 PUSH2 0x41B9 JUMP JUMPDEST PUSH2 0x219F PUSH1 0x0 PUSH2 0x4794 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x65 SLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 EQ PUSH2 0x21CD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5AB7 JUMP JUMPDEST PUSH2 0xC89 DUP2 PUSH2 0x4794 JUMP JUMPDEST PUSH2 0x21DE PUSH2 0x41B9 JUMP JUMPDEST PUSH2 0xC89 DUP2 PUSH2 0x47AD JUMP JUMPDEST PUSH2 0x2208 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x60E2 PUSH1 0x22 SWAP2 CODECOPY PUSH2 0x411B JUMP JUMPDEST PUSH2 0x2211 DUP3 PUSH2 0x46C8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x224C JUMPI DUP2 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP5 ISZERO ISZERO OR SWAP1 SSTORE MLOAD PUSH32 0x3561D5280EBB02280893B1D60978E4A27E7654A149C5D0E7C2CF65389CE1694 SWAP1 PUSH2 0x22A0 SWAP1 DUP5 SWAP1 PUSH2 0x4C74 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0x22B7 DUP4 PUSH1 0x1 PUSH2 0x4287 JUMP JUMPDEST PUSH2 0x22C2 DUP4 DUP4 DUP4 PUSH2 0x46EF JUMP JUMPDEST PUSH1 0xD3 SLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x12DE JUMPI PUSH1 0x0 PUSH1 0xD3 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x22E5 JUMPI PUSH2 0x22E5 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x51D1D4F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 PUSH4 0xA3A3A9E SWAP1 PUSH2 0x2321 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x233B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x234F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0xDB7954FD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP3 POP PUSH4 0xDB7954FD SWAP2 POP PUSH2 0x2381 SWAP1 DUP10 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x239B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x23AF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x22C8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x23CA DUP3 PUSH2 0x27DA JUMP JUMPDEST DUP1 MLOAD PUSH1 0xC9 SLOAD SWAP2 SWAP3 POP SWAP1 CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x24E9 JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x23FB JUMPI PUSH2 0x23FB PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA6AFED95 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2442 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2466 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x96E85CED DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2488 JUMPI PUSH2 0x2488 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x24AC SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x24DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x23E1 JUMP JUMPDEST POP POP PUSH1 0x0 PUSH2 0x24F9 DUP6 PUSH2 0x4380 PUSH2 0x43B4 JUMP JUMPDEST SWAP1 POP PUSH1 0xD0 SLOAD DUP2 PUSH1 0x0 ADD MLOAD GT ISZERO PUSH2 0x2529 JUMPI PUSH1 0xD0 SLOAD DUP2 MLOAD PUSH1 0x40 MLOAD PUSH4 0x1A451C0F PUSH1 0xE2 SHL DUP2 MSTORE PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5640 JUMP JUMPDEST DUP1 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 SUB PUSH2 0x254E JUMPI PUSH1 0x40 MLOAD PUSH4 0x95BF333 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE DUP4 MLOAD DUP3 MSTORE DUP3 MLOAD DUP1 DUP3 ADD DUP5 MSTORE DUP5 DUP5 ADD MLOAD DUP2 MSTORE DUP4 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP4 MSTORE PUSH1 0xCB SLOAD DUP2 MSTORE SWAP1 SWAP2 PUSH1 0x0 SWAP2 PUSH2 0x2586 SWAP2 SWAP1 PUSH2 0x480A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2594 DUP4 DUP4 PUSH2 0x4852 JUMP JUMPDEST SWAP1 POP PUSH2 0x25B8 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH8 0xDE0B6B3A7640000 DUP2 MSTORE POP DUP3 MLOAD SWAP1 MLOAD LT SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x25DC JUMPI DUP2 MLOAD DUP4 MLOAD PUSH1 0x40 MLOAD PUSH4 0x1A451C0F PUSH1 0xE2 SHL DUP2 MSTORE PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5640 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x12D9 JUMPI PUSH1 0x0 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x25FB JUMPI PUSH2 0x25FB PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x2612 DUP4 DUP14 PUSH2 0x4423 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH2 0x2623 DUP7 DUP4 PUSH2 0x4403 JUMP JUMPDEST SWAP1 POP DUP3 ISZERO PUSH2 0x268E JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB2A02FF1 DUP12 DUP16 DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x265B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5AC7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2675 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2689 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST DUP2 ISZERO PUSH2 0x26F7 JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x44FE6FFE DUP12 DUP16 DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x26C4 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5AC7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x26F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x25DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE PUSH1 0x3 SWAP1 SWAP4 ADD SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 LT ISZERO PUSH2 0x2762 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5B30 JUMP JUMPDEST PUSH2 0x27A0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x7365744C69717569646174696F6E496E63656E746976652875696E7432353629 DUP2 MSTORE POP PUSH2 0x411B JUMP JUMPDEST PUSH1 0xCB DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xAEBA5A6C40A8AC138134BFF1AAA65DEBF25971188A58804BAD717F82F0EC1316 SWAP1 PUSH2 0xD53 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x5640 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCC PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP3 MLOAD DUP2 DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP4 MSTORE DUP1 DUP4 MSTORE PUSH1 0x60 SWAP5 SWAP4 DUP5 SWAP4 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2848 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x282A JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x286F JUMPI PUSH2 0x286F PUSH2 0x54A6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2898 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2947 JUMPI PUSH1 0x0 PUSH1 0xCD PUSH1 0x0 DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x28BE JUMPI PUSH2 0x28BE PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0x293E JUMPI DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2900 JUMPI PUSH2 0x2900 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x291A JUMPI PUSH2 0x291A PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH2 0x293B DUP7 PUSH2 0x5B40 JUMP JUMPDEST SWAP6 POP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x289E JUMP JUMPDEST POP SWAP3 DUP4 MSTORE POP SWAP1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0xCE DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1EC2 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1EA4 JUMPI POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0xD3 SLOAD PUSH1 0x60 SWAP1 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x29D2 JUMPI PUSH2 0x29D2 PUSH2 0x54A6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2A30 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x2A1D PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x29F0 JUMPI SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2BEE JUMPI PUSH1 0x0 PUSH1 0xD3 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x2A53 JUMPI PUSH2 0x2A53 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xF7C618C1 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP5 POP DUP5 SWAP3 PUSH4 0xF7C618C1 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2AA5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2AC9 SWAP2 SWAP1 PUSH2 0x5877 JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x74C4C1CC DUP10 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2B11 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B2E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2B52 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C05A7C5 DUP10 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2B83 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2BA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2BC4 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST DUP2 MSTORE POP DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2BD9 JUMPI PUSH2 0x2BD9 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x2A36 JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2C00 DUP4 PUSH1 0x0 PUSH2 0x4287 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2C3B JUMPI DUP3 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x0 NOT DUP2 EQ PUSH2 0x2D6E JUMPI PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C9D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2CC1 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x182DF0F5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D0E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2D32 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP PUSH1 0x0 PUSH2 0x2D43 DUP3 DUP5 DUP8 PUSH2 0x488C JUMP JUMPDEST SWAP1 POP DUP4 DUP2 GT ISZERO PUSH2 0x2D6A JUMPI DUP7 DUP5 PUSH1 0x40 MLOAD PUSH4 0xDB33BE3D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH2 0x5B5A JUMP JUMPDEST POP POP POP JUMPDEST PUSH1 0xD3 SLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x17DC JUMPI PUSH1 0x0 PUSH1 0xD3 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x2D91 JUMPI PUSH2 0x2D91 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x51D1D4F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 PUSH4 0xA3A3A9E SWAP1 PUSH2 0x2DCD SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2DE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2DFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0xDB7954FD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP3 POP PUSH4 0xDB7954FD SWAP2 POP PUSH2 0x2E2D SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x5898 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2E5B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x2D74 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2E8A JUMPI PUSH2 0x2E8A PUSH2 0x54A6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2EB3 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2F11 JUMPI PUSH1 0x0 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2ED5 JUMPI PUSH2 0x2ED5 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x2EE9 DUP2 CALLER PUSH2 0x48B6 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2EFD JUMPI PUSH2 0x2EFD PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x2EB9 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2F21 PUSH2 0x41B9 JUMP JUMPDEST PUSH2 0x2F2A DUP2 PUSH2 0x46C8 JUMP JUMPDEST PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH32 0xCB20DAB7409E4FB972D9ADCCB39530520B226CE6940D85C9523A499B950B6EA3 SWAP2 PUSH2 0x2F69 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP5 SWAP1 PUSH2 0x59D4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0xD6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2FA1 DUP7 PUSH2 0x49A9 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2FAE DUP7 PUSH2 0x49A9 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x182DF0F5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2FF0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3014 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x302E PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP4 ADD DUP6 MSTORE SWAP1 DUP2 MSTORE DUP4 MLOAD DUP1 DUP4 ADD DUP6 MSTORE PUSH1 0xCB SLOAD DUP2 MSTORE DUP5 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP5 MSTORE DUP9 DUP3 MSTORE SWAP2 SWAP3 PUSH2 0x306A SWAP2 PUSH2 0x480A JUMP JUMPDEST SWAP3 POP PUSH2 0x3092 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP9 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP9 DUP2 MSTORE POP PUSH2 0x480A JUMP JUMPDEST SWAP2 POP PUSH2 0x309E DUP4 DUP4 PUSH2 0x4852 JUMP JUMPDEST SWAP1 POP PUSH2 0x30AA DUP2 DUP12 PUSH2 0x4403 JUMP JUMPDEST PUSH1 0x0 SWAP14 SWAP1 SWAP13 POP SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x30E7 PUSH32 0x0 PUSH2 0x4A43 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3123 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH4 0xD005CE47 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3D9EA3A1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3161 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3185 SWAP2 SWAP1 PUSH2 0x5B73 JUMP JUMPDEST PUSH2 0x31A1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5BC8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR DUP3 SSTORE DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x31DC DUP3 PUSH2 0x4A70 JUMP JUMPDEST PUSH1 0xD3 SLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3273 JUMPI PUSH1 0xD3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x31FD JUMPI PUSH2 0x31FD PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x2A869A4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x2A869A4D SWAP1 PUSH2 0x3236 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3250 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3264 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x31E2 JUMP JUMPDEST POP PUSH32 0xAF16AD15F9E29D5140E8E81A30A92A755AA8EDFF3D301053C84392B70C0D09A3 DUP4 PUSH1 0x40 MLOAD PUSH2 0x32A3 SWAP2 SWAP1 PUSH2 0x5190 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH2 0x32D1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x6104 PUSH1 0x28 SWAP2 CODECOPY PUSH2 0x411B JUMP JUMPDEST DUP3 PUSH1 0x0 DUP2 SWAP1 SUB PUSH2 0x32F3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5C0C JUMP JUMPDEST DUP1 DUP3 EQ PUSH2 0x3312 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5C0C JUMP JUMPDEST PUSH2 0x331B DUP2 PUSH2 0x425C JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x17DC JUMPI DUP4 DUP4 DUP3 DUP2 DUP2 LT PUSH2 0x3338 JUMPI PUSH2 0x3338 PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0xD1 PUSH1 0x0 DUP9 DUP9 DUP6 DUP2 DUP2 LT PUSH2 0x3355 JUMPI PUSH2 0x3355 PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x336A SWAP2 SWAP1 PUSH2 0x5051 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SSTORE DUP6 DUP6 DUP3 DUP2 DUP2 LT PUSH2 0x3396 JUMPI PUSH2 0x3396 PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x33AB SWAP2 SWAP1 PUSH2 0x5051 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x9E0AD9CEE10BDF36B7FBD38910C0BDFF0F275ACE679B45B922381C2723D676F8 DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0x33E7 JUMPI PUSH2 0x33E7 PUSH2 0x5856 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x40 MLOAD PUSH2 0x33FB SWAP2 SWAP1 PUSH2 0x4CD9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x1 ADD PUSH2 0x331E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x342B JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x3445 JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3445 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x3461 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5C67 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x3484 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x348C PUSH2 0x4B2E JUMP JUMPDEST PUSH2 0x3495 DUP3 PUSH2 0x4B5D JUMP JUMPDEST PUSH2 0x349E DUP4 PUSH2 0x47AD JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1C42 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH2 0x32A3 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x5C8B JUMP JUMPDEST PUSH1 0xCC PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x34FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 POP DUP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x3521 DUP3 PUSH2 0x46C8 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP2 ISZERO ISZERO PUSH1 0xFF SWAP1 SWAP2 AND ISZERO ISZERO SUB PUSH2 0x356D JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB6C2C83 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO OR SWAP1 SSTORE SWAP1 MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xCB325B7784F78486E42849C7A50B8C5EE008D00CD90E108A58912C0FCB6288B4 SWAP1 PUSH2 0x35D0 SWAP1 DUP6 SWAP1 PUSH2 0x4C74 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x35E7 DUP4 PUSH1 0x2 PUSH2 0x4287 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3622 JUMPI DUP3 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE PUSH1 0x3 SWAP1 SWAP4 ADD SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3666 JUMPI PUSH2 0x365C DUP4 PUSH2 0x4A43 JUMP JUMPDEST PUSH2 0x3666 CALLER DUP4 PUSH2 0x48B6 JUMP JUMPDEST PUSH2 0x366F DUP3 PUSH2 0x1B27 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x40 MLOAD PUSH4 0xFC57D4DF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xFC57D4DF SWAP1 PUSH2 0x369F SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x36BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x36E0 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST PUSH1 0x0 SUB PUSH2 0x3701 JUMPI DUP3 PUSH1 0x40 MLOAD PUSH3 0xE52A7D PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x0 NOT DUP2 EQ PUSH2 0x3831 JUMPI PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x47BD3718 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3763 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3787 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xBBCAC557 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x37C9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x37ED SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH2 0x37FC DUP7 DUP6 PUSH2 0x5A24 JUMP JUMPDEST PUSH2 0x3806 SWAP2 SWAP1 PUSH2 0x5A24 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 GT ISZERO PUSH2 0x382D JUMPI DUP7 DUP5 PUSH1 0x40 MLOAD PUSH4 0x2E649EED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH2 0x5B5A JUMP JUMPDEST POP POP POP JUMPDEST PUSH1 0x0 PUSH2 0x3843 DUP5 DUP7 PUSH1 0x0 DUP7 PUSH2 0x44CA PUSH2 0x44FE JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x3869 JUMPI PUSH1 0x40 MLOAD PUSH4 0xBB55FD27 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAA5AF0FD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x38B4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x38D8 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST SWAP1 MSTORE PUSH1 0xD3 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1398 JUMPI PUSH1 0x0 PUSH1 0xD3 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x3900 JUMPI PUSH2 0x3900 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x23526079 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 PUSH4 0x23526079 SWAP1 PUSH2 0x393E SWAP1 DUP13 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CAA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3958 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x396C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0x6A95DDEF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP3 POP PUSH4 0x6A95DDEF SWAP2 POP PUSH2 0x39A0 SWAP1 DUP13 SWAP1 DUP13 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CC5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x39BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x39CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x38E3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 DUP4 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x3A09 JUMPI PUSH2 0x3A09 PUSH2 0x5CED JUMP JUMPDEST PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x3A1A JUMPI PUSH2 0x3A1A PUSH2 0x5CED JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x3A40 DUP6 PUSH1 0x5 PUSH2 0x4287 JUMP JUMPDEST PUSH2 0x3A49 DUP4 PUSH2 0x1B27 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3A84 JUMPI DUP5 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3ABF JUMPI DUP4 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x95DD9193 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH4 0x95DD9193 SWAP1 PUSH2 0x3AEE SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B0B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3B2F SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST SWAP1 POP DUP2 DUP1 PUSH2 0x3B55 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x3B81 JUMPI DUP1 DUP4 GT ISZERO PUSH2 0x3B7B JUMPI PUSH1 0x40 MLOAD PUSH4 0xE46C1559 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH2 0x12DE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3B8F DUP6 PUSH2 0x4380 PUSH2 0x43B4 JUMP JUMPDEST SWAP1 POP PUSH1 0xD0 SLOAD DUP2 PUSH1 0x0 ADD MLOAD GT PUSH2 0x3BBE JUMPI PUSH1 0xD0 SLOAD DUP2 MLOAD PUSH1 0x40 MLOAD PUSH4 0x6E61BB05 PUSH1 0xE1 SHL DUP2 MSTORE PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5640 JUMP JUMPDEST DUP1 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 SUB PUSH2 0x3BE3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x95BF333 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3BFF PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xCA SLOAD DUP2 MSTORE POP DUP5 PUSH2 0x4403 JUMP JUMPDEST SWAP1 POP DUP1 DUP6 GT ISZERO PUSH2 0x1398 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE46C1559 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3C2D DUP3 PUSH1 0x3 PUSH2 0x4287 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x40 MLOAD PUSH4 0x96E85CED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x96E85CED SWAP1 PUSH2 0x3C5D SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3C77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3C8B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3CCA JUMPI DUP2 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0xD3 SLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x16FC JUMPI PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAA5AF0FD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3D23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3D47 SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST DUP2 MSTORE POP SWAP1 POP PUSH1 0x0 PUSH1 0xD3 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x3D61 JUMPI PUSH2 0x3D61 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x23526079 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 PUSH4 0x23526079 SWAP1 PUSH2 0x3D9F SWAP1 DUP10 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CAA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3DB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3DCD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0x6A95DDEF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP3 POP PUSH4 0x6A95DDEF SWAP2 POP PUSH2 0x3E01 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CC5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3E1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3E2F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x3CD0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E4D DUP3 PUSH1 0x8 PUSH2 0x4287 JUMP JUMPDEST DUP2 PUSH1 0x0 DUP1 PUSH2 0x3E5B DUP4 CALLER PUSH2 0x4423 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP1 PUSH1 0x0 EQ PUSH2 0x3E81 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF8A5D66D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3E8C DUP6 CALLER DUP5 PUSH2 0x46EF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE PUSH1 0x3 DUP2 ADD SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3EC8 JUMPI POP PUSH1 0x0 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 DUP3 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0xCC DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP3 MLOAD DUP2 DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP4 MSTORE DUP1 DUP4 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3F3A JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3F1C JUMPI JUMPDEST POP POP DUP4 MLOAD SWAP4 SWAP5 POP DUP4 SWAP3 POP PUSH1 0x0 SWAP2 POP POP JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3F94 JUMPI DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3F6E JUMPI PUSH2 0x3F6E PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x3F8C JUMPI DUP1 SWAP2 POP PUSH2 0x3F94 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x3F4A JUMP JUMPDEST POP DUP2 DUP2 LT PUSH2 0x3FA4 JUMPI PUSH2 0x3FA4 PUSH2 0x5D03 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP2 SWAP1 PUSH2 0x3FC3 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x5D19 JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0x3FD3 JUMPI PUSH2 0x3FD3 PUSH2 0x5856 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x4003 JUMPI PUSH2 0x4003 PUSH2 0x5856 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP DUP1 DUP1 SLOAD DUP1 PUSH2 0x4041 JUMPI PUSH2 0x4041 PUSH2 0x5D2C JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 DUP3 ADD PUSH1 0x0 NOT SWAP1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE SWAP1 SWAP2 ADD SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD CALLER SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND SWAP2 PUSH32 0xE699A64C18B07AC5B7301AA273F36A2287239EB9501D81950672794AFBA29A0D SWAP2 SWAP1 LOG3 POP PUSH1 0x0 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x40B2 PUSH2 0x41B9 JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH2 0x40E3 PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x40 MLOAD PUSH4 0x18C5E8AB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x18C5E8AB SWAP1 PUSH2 0x414E SWAP1 CALLER SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5D98 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x416B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x418F SWAP2 SWAP1 PUSH2 0x5B73 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x41B5 JUMPI CALLER ADDRESS DUP4 PUSH1 0x40 MLOAD PUSH4 0x4A3FA293 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5DB8 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x219F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5E17 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x4209 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5E69 JUMP JUMPDEST PUSH1 0x97 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP1 PUSH32 0x66FD58E82F7B31A2A5C30E0888F3093EFE4E111B00CD2B0C31FE014601293AA0 SWAP1 PUSH2 0xD53 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x5898 JUMP JUMPDEST PUSH2 0x107 SLOAD DUP2 GT ISZERO PUSH2 0xC89 JUMPI PUSH2 0x107 SLOAD DUP2 PUSH1 0x40 MLOAD PUSH4 0x792BFB1B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH2 0x5640 JUMP JUMPDEST PUSH2 0x4291 DUP3 DUP3 PUSH2 0x39DE JUMP JUMPDEST ISZERO PUSH2 0x41B5 JUMPI DUP2 DUP2 PUSH1 0x40 MLOAD PUSH4 0x13B3CCB1 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH2 0x5EA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x42EB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5F07 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP3 SWAP2 DUP5 PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x4317 JUMPI PUSH2 0x4317 PUSH2 0x5CED JUMP JUMPDEST PUSH1 0x8 DUP2 GT ISZERO PUSH2 0x4328 JUMPI PUSH2 0x4328 PUSH2 0x5CED JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH32 0x35007A986BCD36D2F73FC7F1B73762E12EADB4406DD163194950FD3B5A6A827D DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x32A3 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5F17 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP3 ADD DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND DUP3 MSTORE PUSH1 0xCD SWAP1 MSTORE KECCAK256 PUSH1 0x2 ADD SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x43ED PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x43FC DUP4 PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 PUSH2 0x44FE JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4410 DUP5 DUP5 PUSH2 0x4B84 JUMP JUMPDEST SWAP1 POP PUSH2 0x441B DUP2 PUSH2 0x4BAC JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC37F68E2 DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4455 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4472 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4496 SWAP2 SWAP1 PUSH2 0x5F3F JUMP JUMPDEST SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP SWAP1 POP DUP1 ISZERO PUSH2 0x44C2 JUMPI DUP6 DUP6 PUSH1 0x40 MLOAD PUSH4 0x15E34D9 PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH2 0x5898 JUMP JUMPDEST POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP3 ADD DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND DUP3 MSTORE PUSH1 0xCD SWAP1 MSTORE KECCAK256 PUSH1 0x1 ADD SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x4537 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4542 DUP8 PUSH2 0x27DA JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x466A JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4566 JUMPI PUSH2 0x4566 PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x457F DUP5 DUP15 PUSH2 0x4423 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x459B DUP8 PUSH2 0x49A9 JUMP JUMPDEST DUP2 MSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0x45BA PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP6 DUP2 MSTORE POP DUP4 PUSH2 0x480A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x45D4 PUSH2 0x45CE DUP9 DUP15 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP4 PUSH2 0x480A JUMP JUMPDEST SWAP1 POP PUSH2 0x45E5 DUP2 DUP8 DUP14 PUSH1 0x20 ADD MLOAD PUSH2 0x488C JUMP JUMPDEST PUSH1 0x20 DUP13 ADD MSTORE DUP11 MLOAD PUSH2 0x45F9 SWAP1 DUP4 SWAP1 DUP9 SWAP1 PUSH2 0x488C JUMP JUMPDEST DUP12 MSTORE PUSH1 0x40 DUP12 ADD MLOAD PUSH2 0x460D SWAP1 DUP5 SWAP1 DUP8 SWAP1 PUSH2 0x488C JUMP JUMPDEST DUP12 PUSH1 0x40 ADD DUP2 DUP2 MSTORE POP POP DUP15 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x4658 JUMPI PUSH2 0x463E DUP2 DUP16 DUP14 PUSH1 0x60 ADD MLOAD PUSH2 0x488C JUMP JUMPDEST PUSH1 0x60 DUP13 ADD DUP2 SWAP1 MSTORE PUSH2 0x4652 SWAP1 DUP5 SWAP1 DUP16 SWAP1 PUSH2 0x488C JUMP JUMPDEST PUSH1 0x60 DUP13 ADD MSTORE JUMPDEST POP POP POP POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x454A JUMP JUMPDEST POP PUSH1 0x0 DUP4 PUSH1 0x60 ADD MLOAD DUP5 PUSH1 0x40 ADD MLOAD PUSH2 0x4681 SWAP2 SWAP1 PUSH2 0x5A24 JUMP JUMPDEST SWAP1 POP DUP1 DUP5 PUSH1 0x20 ADD MLOAD GT ISZERO PUSH2 0x46A8 JUMPI PUSH1 0x20 DUP5 ADD MLOAD DUP2 SWAP1 SUB PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0x0 PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x46BC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD DUP2 SUB PUSH1 0xA0 DUP6 ADD MSTORE JUMPDEST POP POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xC89 JUMPI PUSH1 0x40 MLOAD PUSH4 0x42BCDF7F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF AND PUSH2 0x472B JUMPI DUP4 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4753 JUMPI POP POP POP POP JUMP JUMPDEST PUSH2 0x475C DUP4 PUSH2 0x1B27 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x476E DUP5 DUP7 DUP6 PUSH1 0x0 PUSH2 0x44CA PUSH2 0x44FE JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x12DE JUMPI PUSH1 0x40 MLOAD PUSH4 0xBB55FD27 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH2 0xC89 DUP2 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x107 SLOAD DUP2 GT PUSH2 0x47CF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x5FD6 JUMP JUMPDEST PUSH2 0x107 DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC2D09FEF144F7C8A86F71EA459F8FC17F675768EB1AE369CBD77FB31D467AAFA SWAP1 PUSH2 0xD53 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x5640 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x483F DUP7 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x0 ADD MLOAD PUSH2 0x4C16 JUMP JUMPDEST PUSH2 0x4849 SWAP2 SWAP1 PUSH2 0x591F JUMP JUMPDEST SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x4849 PUSH2 0x4885 DUP7 PUSH1 0x0 ADD MLOAD PUSH8 0xDE0B6B3A7640000 PUSH2 0x4C16 JUMP JUMPDEST DUP6 MLOAD PUSH2 0x4C22 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4899 DUP6 DUP6 PUSH2 0x4B84 JUMP JUMPDEST SWAP1 POP PUSH2 0x48AD PUSH2 0x48A7 DUP3 PUSH2 0x4BAC JUMP JUMPDEST DUP5 PUSH2 0x4C2E JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x48C1 DUP3 PUSH1 0x7 PUSH2 0x4287 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xCD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF AND PUSH2 0x48FD JUMPI DUP3 PUSH1 0x40 MLOAD PUSH4 0x5A9A1EB9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x4925 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 DUP5 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0xCC DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE DUP5 MSTORE SWAP2 DUP4 KECCAK256 SWAP1 SWAP2 ADD DUP1 SLOAD SWAP5 DUP9 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP6 AND DUP6 OR SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP2 PUSH32 0x3AB23AB0D51CCCC0C3085AEC51F99228625AA1A922B3A8CA89A26B0F2027A1A5 SWAP2 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x40 MLOAD PUSH4 0xFC57D4DF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xFC57D4DF SWAP1 PUSH2 0x49DE SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x536E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x49FB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4A1F SWAP2 SWAP1 PUSH2 0x5A42 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x2734 JUMPI DUP3 PUSH1 0x40 MLOAD PUSH3 0xE52A7D PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ PUSH2 0xC89 JUMPI DUP1 CALLER PUSH1 0x40 MLOAD PUSH4 0x4E9383FB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP3 SWAP2 SWAP1 PUSH2 0x5898 JUMP JUMPDEST PUSH1 0xCE SLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4AD8 JUMPI DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xCE DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x4A9B JUMPI PUSH2 0x4A9B PUSH2 0x5856 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x4AD0 JUMPI DUP3 PUSH1 0x40 MLOAD PUSH4 0xD005CE47 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP2 SWAP1 PUSH2 0x536E JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x4A76 JUMP JUMPDEST POP POP PUSH1 0xCE DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE PUSH1 0x0 DUP3 SWAP1 MSTORE PUSH32 0xD36CD1C74EF8D7326D8021B776C18FB5A5724B7F7BC93C2F42E43E10EF27D12A ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND OR SWAP1 SSTORE SLOAD PUSH2 0x41B5 DUP2 PUSH2 0x425C JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x4B55 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x602E JUMP JUMPDEST PUSH2 0x219F PUSH2 0x4C3A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xC80 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x602E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x4849 DUP6 PUSH1 0x0 ADD MLOAD DUP6 PUSH2 0x4C16 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x2734 SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 PUSH2 0x591F JUMP JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x43FC DUP3 DUP5 PUSH2 0x58C9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x43FC DUP3 DUP5 PUSH2 0x591F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x43FC DUP3 DUP5 PUSH2 0x5A24 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x4C61 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA31 SWAP1 PUSH2 0x602E JUMP JUMPDEST PUSH2 0x219F CALLER PUSH2 0x4794 JUMP JUMPDEST DUP1 ISZERO ISZERO JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2734 DUP3 DUP5 PUSH2 0x4C6A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2734 JUMP JUMPDEST PUSH2 0x4C9C DUP2 PUSH2 0x4C82 JUMP JUMPDEST DUP2 EQ PUSH2 0xC89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2734 DUP2 PUSH2 0x4C93 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4CC7 JUMPI PUSH2 0x4CC7 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x441B DUP5 DUP5 PUSH2 0x4CA7 JUMP JUMPDEST DUP1 PUSH2 0x4C6E JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2734 DUP3 DUP5 PUSH2 0x4CD3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4CFD JUMPI PUSH2 0x4CFD PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4D09 DUP6 DUP6 PUSH2 0x4CA7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x4D1A DUP6 DUP3 DUP7 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 PUSH2 0x4C9C JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2734 DUP2 PUSH2 0x4D24 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4D4A JUMPI PUSH2 0x4D4A PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x441B DUP5 DUP5 PUSH2 0x4D2A JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4D6B JUMPI PUSH2 0x4D6B PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4D85 JUMPI PUSH2 0x4D85 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x4DA0 JUMPI PUSH2 0x4DA0 PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4DC0 JUMPI PUSH2 0x4DC0 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4DD9 JUMPI PUSH2 0x4DD9 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4DE5 DUP8 DUP3 DUP9 ADD PUSH2 0x4D56 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4E06 JUMPI PUSH2 0x4E06 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E12 DUP8 DUP3 DUP9 ADD PUSH2 0x4D56 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4E37 JUMPI PUSH2 0x4E37 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4E43 DUP8 DUP8 PUSH2 0x4CA7 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x4E54 DUP8 DUP3 DUP9 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x4E65 DUP8 DUP3 DUP9 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0x4E76 DUP8 DUP3 DUP9 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4E9D JUMPI PUSH2 0x4E9D PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4EA9 DUP9 DUP9 PUSH2 0x4CA7 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x4EBA DUP9 DUP3 DUP10 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x4ECB DUP9 DUP3 DUP10 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0x4EDC DUP9 DUP3 DUP10 ADD PUSH2 0x4D2A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0x4EED DUP9 DUP3 DUP10 ADD PUSH2 0x4D2A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x4C9C JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2734 DUP2 PUSH2 0x4EFA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4F28 JUMPI PUSH2 0x4F28 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4F41 JUMPI PUSH2 0x4F41 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F4D DUP9 DUP3 DUP10 ADD PUSH2 0x4D56 JUMP JUMPDEST SWAP6 POP SWAP6 POP POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4F6E JUMPI PUSH2 0x4F6E PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F7A DUP9 DUP3 DUP10 ADD PUSH2 0x4D56 JUMP JUMPDEST SWAP4 POP SWAP4 POP POP PUSH1 0x40 PUSH2 0x4EED DUP9 DUP3 DUP10 ADD PUSH2 0x4F02 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4FA2 JUMPI PUSH2 0x4FA2 PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4FBC JUMPI PUSH2 0x4FBC PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x60 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x4DA0 JUMPI PUSH2 0x4DA0 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4FEF JUMPI PUSH2 0x4FEF PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4FFB DUP7 DUP7 PUSH2 0x4CA7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x501A JUMPI PUSH2 0x501A PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5026 DUP7 DUP3 DUP8 ADD PUSH2 0x4F8D JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2734 DUP3 PUSH2 0x4C82 JUMP JUMPDEST PUSH2 0x4C9C DUP2 PUSH2 0x5032 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2734 DUP2 PUSH2 0x503D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5066 JUMPI PUSH2 0x5066 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x441B DUP5 DUP5 PUSH2 0x5046 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x508B JUMPI PUSH2 0x508B PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5097 DUP8 DUP8 PUSH2 0x4CA7 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x50A8 DUP8 DUP3 DUP9 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x50B9 DUP8 DUP3 DUP9 ADD PUSH2 0x4D2A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0x4E76 DUP8 DUP3 DUP9 ADD PUSH2 0x4D2A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x50E6 JUMPI PUSH2 0x50E6 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x50F2 DUP10 DUP10 PUSH2 0x4CA7 JUMP JUMPDEST SWAP7 POP POP PUSH1 0x20 PUSH2 0x5103 DUP10 DUP3 DUP11 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x40 PUSH2 0x5114 DUP10 DUP3 DUP11 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x60 PUSH2 0x5125 DUP10 DUP3 DUP11 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x80 PUSH2 0x5136 DUP10 DUP3 DUP11 ADD PUSH2 0x4D2A JUMP JUMPDEST SWAP3 POP POP PUSH1 0xA0 PUSH2 0x5147 DUP10 DUP3 DUP11 ADD PUSH2 0x4D2A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x5162 DUP3 DUP7 PUSH2 0x4CD3 JUMP JUMPDEST PUSH2 0x516F PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x4CD3 JUMP JUMPDEST PUSH2 0x441B PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x4CD3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2734 DUP3 PUSH2 0x5032 JUMP JUMPDEST PUSH2 0x4C6E DUP2 PUSH2 0x517C JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2734 DUP3 DUP5 PUSH2 0x5187 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x51B6 JUMPI PUSH2 0x51B6 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x51C2 DUP7 DUP7 PUSH2 0x4CA7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x51D3 DUP7 DUP3 DUP8 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x51E4 DUP7 DUP3 DUP8 ADD PUSH2 0x4D2A JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5206 JUMPI PUSH2 0x5206 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5212 DUP7 DUP7 PUSH2 0x5046 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x51D3 DUP7 DUP3 DUP8 ADD PUSH2 0x4D2A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x522F DUP4 DUP4 PUSH2 0x5187 JUMP JUMPDEST POP POP PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5241 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 DUP4 ADD DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5275 JUMPI DUP2 MLOAD PUSH2 0x5264 DUP9 DUP3 PUSH2 0x5223 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x5250 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x43FC DUP2 DUP5 PUSH2 0x5237 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x52AA JUMPI PUSH2 0x52AA PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x52B6 DUP8 DUP8 PUSH2 0x4CA7 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x52C7 DUP8 DUP3 DUP9 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x50B9 DUP8 DUP3 DUP9 ADD PUSH2 0x4CA7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x52F3 JUMPI PUSH2 0x52F3 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x52FF DUP9 DUP9 PUSH2 0x4CA7 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x5310 DUP9 DUP3 DUP10 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x5321 DUP9 DUP3 DUP10 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0x4EDC DUP9 DUP3 DUP10 ADD PUSH2 0x4CA7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5348 JUMPI PUSH2 0x5348 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5354 DUP6 DUP6 PUSH2 0x4CA7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x4D1A DUP6 DUP3 DUP7 ADD PUSH2 0x4F02 JUMP JUMPDEST PUSH2 0x4C6E DUP2 PUSH2 0x4C82 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2734 DUP3 DUP5 PUSH2 0x5365 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x5162 DUP3 DUP7 PUSH2 0x4C6A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x53A0 JUMPI PUSH2 0x53A0 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x53AC DUP6 DUP6 PUSH2 0x4CA7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x4D1A DUP6 DUP3 DUP7 ADD PUSH2 0x5046 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x53C7 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 DUP4 ADD DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5275 JUMPI DUP2 MLOAD PUSH2 0x53EA DUP9 DUP3 PUSH2 0x5223 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x53D6 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x43FC DUP2 DUP5 PUSH2 0x53BD JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x541D DUP5 DUP3 PUSH2 0x5365 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x5430 PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x4CD3 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x16FC PUSH1 0x40 DUP6 ADD DUP3 PUSH2 0x4CD3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x544F DUP4 DUP4 PUSH2 0x540C JUMP JUMPDEST POP POP PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5461 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 DUP4 ADD DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5275 JUMPI DUP2 MLOAD PUSH2 0x5484 DUP9 DUP3 PUSH2 0x5443 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x5470 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x43FC DUP2 DUP5 PUSH2 0x5457 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x54E1 JUMPI PUSH2 0x54E1 PUSH2 0x54A6 JUMP JUMPDEST PUSH1 0x40 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x54F3 PUSH1 0x40 MLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x54FF DUP3 DUP3 PUSH2 0x54BC JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x551D JUMPI PUSH2 0x551D PUSH2 0x54A6 JUMP JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x553A PUSH2 0x5535 DUP5 PUSH2 0x5504 JUMP JUMPDEST PUSH2 0x54E8 JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP1 POP PUSH1 0x20 DUP1 DUP3 ADD SWAP1 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x5559 JUMPI PUSH2 0x5559 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x557D JUMPI DUP1 PUSH2 0x556E DUP9 DUP3 PUSH2 0x4CA7 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x555B JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x559B JUMPI PUSH2 0x559B PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x441B DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x5527 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x55C0 JUMPI PUSH2 0x55C0 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x55D9 JUMPI PUSH2 0x55D9 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x441B DUP5 DUP3 DUP6 ADD PUSH2 0x5587 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x522F DUP4 DUP4 PUSH2 0x4CD3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x55FB DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 DUP4 ADD DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5275 JUMPI DUP2 MLOAD PUSH2 0x561E DUP9 DUP3 PUSH2 0x55E5 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x560A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x43FC DUP2 DUP5 PUSH2 0x55F1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x564E DUP3 DUP6 PUSH2 0x4CD3 JUMP JUMPDEST PUSH2 0x43FC PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x4CD3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5671 JUMPI PUSH2 0x5671 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4D09 DUP6 DUP6 PUSH2 0x4D2A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5693 JUMPI PUSH2 0x5693 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x569F DUP6 DUP6 PUSH2 0x4CA7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x4D1A DUP6 DUP3 DUP7 ADD PUSH2 0x4D2A JUMP JUMPDEST PUSH1 0x9 DUP2 LT PUSH2 0xC89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2734 DUP2 PUSH2 0x56B0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x56DE JUMPI PUSH2 0x56DE PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x56EA DUP6 DUP6 PUSH2 0x4CA7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x4D1A DUP6 DUP3 DUP7 ADD PUSH2 0x56BD JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x5716 JUMPI PUSH2 0x5716 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5722 DUP9 DUP9 PUSH2 0x4CA7 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x5733 DUP9 DUP3 DUP10 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x5744 DUP9 DUP3 DUP10 ADD PUSH2 0x4CA7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0x5755 DUP9 DUP3 DUP10 ADD PUSH2 0x4D2A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0x4EED DUP9 DUP3 DUP10 ADD PUSH2 0x4F02 JUMP JUMPDEST PUSH1 0x2E DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x436C6F736520666163746F722067726561746572207468616E206D6178696D75 DUP2 MSTORE PUSH14 0x369031B637B9B2903330B1BA37B9 PUSH1 0x91 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5766 JUMP JUMPDEST PUSH1 0x2E DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x436C6F736520666163746F7220736D616C6C6572207468616E206D696E696D75 DUP2 MSTORE PUSH14 0x369031B637B9B2903330B1BA37B9 PUSH1 0x91 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x57AD JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x57C4 JUMP JUMPDEST PUSH1 0xD DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH13 0x1A5B9D985B1A59081A5B9C1D5D PUSH1 0x9A SHL DUP2 MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x581F JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x2734 DUP2 PUSH2 0x503D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x588C JUMPI PUSH2 0x588C PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x441B DUP5 DUP5 PUSH2 0x586C JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x58A6 DUP3 DUP6 PUSH2 0x5365 JUMP JUMPDEST PUSH2 0x43FC PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5365 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 MUL DUP1 DUP3 ISZERO DUP4 DUP3 DIV DUP6 EQ OR PUSH2 0x58E1 JUMPI PUSH2 0x58E1 PUSH2 0x58B3 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x58FD JUMPI PUSH2 0x58FD PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x441B DUP5 DUP5 PUSH2 0x56BD JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x592E JUMPI PUSH2 0x592E PUSH2 0x5909 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD PUSH2 0x5941 DUP3 DUP9 PUSH2 0x5365 JUMP JUMPDEST PUSH2 0x594E PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x5365 JUMP JUMPDEST PUSH2 0x595B PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x4CD3 JUMP JUMPDEST PUSH2 0x5968 PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x5187 JUMP JUMPDEST PUSH2 0x5975 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x4C6A JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x28 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4E6F6E7A65726F20626F72726F772062616C616E6365206166746572206C6971 DUP2 MSTORE PUSH8 0x3AB4B230BA34B7B7 PUSH1 0xC1 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x57AD JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x597F JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x59E2 DUP3 DUP6 PUSH2 0x5187 JUMP JUMPDEST PUSH2 0x43FC PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5187 JUMP JUMPDEST PUSH1 0xE DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH14 0x616C726561647920657869737473 PUSH1 0x90 SHL DUP2 MSTORE SWAP2 POP PUSH2 0x583F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x59EF JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x2734 JUMPI PUSH2 0x2734 PUSH2 0x58B3 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2734 DUP2 PUSH2 0x4D24 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5A57 JUMPI PUSH2 0x5A57 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x441B DUP5 DUP5 PUSH2 0x5A37 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x5162 DUP3 DUP7 PUSH2 0x5187 JUMP JUMPDEST PUSH1 0x29 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4F776E61626C6532537465703A2063616C6C6572206973206E6F742074686520 DUP2 MSTORE PUSH9 0x3732BB9037BBB732B9 PUSH1 0xB9 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x57AD JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5A71 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x5AD5 DUP3 DUP7 PUSH2 0x5365 JUMP JUMPDEST PUSH2 0x516F PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x5365 JUMP JUMPDEST PUSH1 0x31 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x6C69717569646174696F6E20696E63656E746976652073686F756C6420626520 DUP2 MSTORE PUSH17 0xCEE4CAC2E8CAE440E8D0C2DC4062CA627 PUSH1 0x7B SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x57AD JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5AE2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 SUB PUSH2 0x5B53 JUMPI PUSH2 0x5B53 PUSH2 0x58B3 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x564E DUP3 DUP6 PUSH2 0x5365 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2734 DUP2 PUSH2 0x4EFA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5B88 JUMPI PUSH2 0x5B88 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x441B DUP5 DUP5 PUSH2 0x5B68 JUMP JUMPDEST PUSH1 0x1B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x436F6D7074726F6C6C65723A20496E76616C69642076546F6B656E0000000000 DUP2 MSTORE SWAP2 POP PUSH2 0x583F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5B94 JUMP JUMPDEST PUSH1 0x19 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x696E76616C6964206E756D626572206F66206D61726B65747300000000000000 DUP2 MSTORE SWAP2 POP PUSH2 0x583F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5BD8 JUMP JUMPDEST PUSH1 0x2E DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 DUP2 MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x57AD JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5C1C JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND PUSH2 0x2734 JUMP JUMPDEST PUSH2 0x4C6E DUP2 PUSH2 0x5C77 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2734 DUP3 DUP5 PUSH2 0x5C82 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x16FC DUP5 DUP3 PUSH2 0x4CD3 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x5CB8 DUP3 DUP6 PUSH2 0x5365 JUMP JUMPDEST PUSH2 0x43FC PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5C99 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x5CD3 DUP3 DUP7 PUSH2 0x5365 JUMP JUMPDEST PUSH2 0x5CE0 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x5365 JUMP JUMPDEST PUSH2 0x441B PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x5C99 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x2734 JUMPI PUSH2 0x2734 PUSH2 0x58B3 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5D5D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5D45 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5D70 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x5D87 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x5D42 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x5DA6 DUP3 DUP6 PUSH2 0x5365 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x441B DUP2 DUP5 PUSH2 0x5D66 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x5DC6 DUP3 DUP7 PUSH2 0x5365 JUMP JUMPDEST PUSH2 0x5DD3 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x5365 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x48AD DUP2 DUP5 PUSH2 0x5D66 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 SWAP2 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 PUSH2 0x583F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5DE5 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x696E76616C696420616365737320636F6E74726F6C206D616E61676572206164 DUP2 MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x57AD JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5E27 JUMP JUMPDEST PUSH1 0x9 DUP2 LT PUSH2 0xC89 JUMPI PUSH2 0xC89 PUSH2 0x5CED JUMP JUMPDEST DUP1 PUSH2 0x54FF DUP2 PUSH2 0x5E79 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2734 DUP3 PUSH2 0x5E89 JUMP JUMPDEST PUSH2 0x4C6E DUP2 PUSH2 0x5E93 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x5EB5 DUP3 DUP6 PUSH2 0x5365 JUMP JUMPDEST PUSH2 0x43FC PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5E9E JUMP JUMPDEST PUSH1 0x28 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x63616E6E6F742070617573652061206D61726B65742074686174206973206E6F DUP2 MSTORE PUSH8 0x1D081B1A5CDD1959 PUSH1 0xC2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x57AD JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5EC2 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x5F25 DUP3 DUP7 PUSH2 0x5187 JUMP JUMPDEST PUSH2 0x5F32 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x5E9E JUMP JUMPDEST PUSH2 0x441B PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x4C6A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5F58 JUMPI PUSH2 0x5F58 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5F64 DUP8 DUP8 PUSH2 0x5A37 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x5F75 DUP8 DUP3 DUP9 ADD PUSH2 0x5A37 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x5F86 DUP8 DUP3 DUP9 ADD PUSH2 0x5A37 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0x4E76 DUP8 DUP3 DUP9 ADD PUSH2 0x5A37 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x436F6D7074726F6C6C65723A20496E76616C6964206D61784C6F6F70734C696D DUP2 MSTORE PUSH2 0x1A5D PUSH1 0xF2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x57AD JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5F97 JUMP JUMPDEST PUSH1 0x2B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 DUP2 MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x57AD JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2734 DUP2 PUSH2 0x5FE6 JUMP INVALID PUSH20 0x65744D61726B6574426F72726F77436170732861 PUSH5 0x6472657373 JUMPDEST TSTORE 0x2C PUSH22 0x696E743235365B5D297365744D696E4C697175696461 PUSH21 0x61626C65436F6C6C61746572616C2875696E743235 CALLDATASIZE 0x29 PUSH20 0x6574436F6C6C61746572616C466163746F722861 PUSH5 0x6472657373 0x2C PUSH22 0x696E743235362C75696E743235362973657441637469 PUSH16 0x6E735061757365642861646472657373 JUMPDEST TSTORE 0x2C PUSH22 0x696E743235365B5D2C626F6F6C29736574466F726365 PUSH5 0x4C69717569 PUSH5 0x6174696F6E 0x28 PUSH2 0x6464 PUSH19 0x6573732C626F6F6C297365744D61726B657453 PUSH22 0x70706C794361707328616464726573735B5D2C75696E PUSH21 0x3235365B5D29A2646970667358221220ACEAEDBCC8 SAR JUMPDEST CALLDATALOAD 0x4D NOT 0xE0 0xC9 0xC 0xC2 TLOAD DUP4 SLT PUSH23 0xE80151C01A996B576B521C03598464736F6C6343000819 STOP CALLER ","sourceMap":"3223:76619:28:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67270:91;67350:4;67270:91;;;;;;;:::i;:::-;;;;;;;;3115:45:30;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;12968:1642:28:-;;;;;;:::i;:::-;;:::i;2102:147:26:-;;;;;;:::i;:::-;;:::i;:::-;;4371:69:30;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;46128:562:28;;;;;;:::i;:::-;;:::i;52561:583::-;;;;;;:::i;:::-;;:::i;36104:1997::-;;;;;;:::i;:::-;;:::i;23904:425::-;;;;;;:::i;:::-;;:::i;54930:624::-;;;;;;:::i;:::-;;:::i;43637:2221::-;;;;;;:::i;:::-;;:::i;63117:125::-;;;;;;:::i;:::-;-1:-1:-1;;;;;63202:24:28;63179:4;63202:24;;;:7;:24;;;;;:33;;;;63117:125;21215:232;;;;;;:::i;:::-;;:::i;24912:558::-;;;;;;:::i;:::-;;:::i;2800:45:30:-;;;;;;:::i;:::-;;;;;;;;;;;;;;2240:43;;;;;;62071:549:28;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;56049:406::-;;;;;;:::i;:::-;;:::i;60976:320::-;;;;;;:::i;:::-;;:::i;2644:26:30:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;58025:269:28:-;;;;;;:::i;:::-;;:::i;56965:735::-;;;;;;:::i;:::-;;:::i;67546:322::-;;;;;;:::i;:::-;;:::i;30636:214::-;;;;;;:::i;:::-;;:::i;47677:1908::-;;;;;;:::i;:::-;;:::i;60143:326::-;;;;;;:::i;:::-;;:::i;67011:128::-;;;:::i;:::-;;;;;;;:::i;26847:282::-;;;;;;:::i;:::-;;:::i;38981:825::-;;;;;;:::i;:::-;;:::i;25963:478::-;;;;;;:::i;:::-;;:::i;2085:101:1:-;;;:::i;2031:212:0:-;;;:::i;1935:38:30:-;;;;;-1:-1:-1;;;;;1935:38:30;;;58443:101:28;;;;;;:::i;:::-;;:::i;59161:442::-;;;;;;:::i;:::-;;:::i;3606:58:30:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1462:85:1;1534:6;;-1:-1:-1;;;;;1534:6:1;1462:85;;;;;;;:::i;22314:624:28:-;;;;;;:::i;:::-;;:::i;2558:41:30:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40555:2110:28:-;;;;;;:::i;:::-;;:::i;63554:161::-;;;;;;:::i;:::-;;:::i;49921:689::-;;;;;;:::i;:::-;;:::i;68436:657::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3516:37::-;;;;;62812:108;;;:::i;66107:770::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2345:125:26:-;2442:21;;-1:-1:-1;;;;;2442:21:26;2345:125;;323:28:34;;;;;;19584:1218:28;;;;;;:::i;:::-;;:::i;11281:399::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;58682:179::-;;;;;;:::i;:::-;;:::i;64394:1466::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;4154:19:30:-;;;;;-1:-1:-1;;;;;4154:19:30;;;50951:812:28;;;;;;:::i;:::-;;:::i;53935:601::-;;;;;;:::i;:::-;;:::i;10458:232::-;;;;;;:::i;:::-;;:::i;2933:40:30:-;;;;;;2364:49;;;;;;:::i;:::-;;:::i;15539:361:28:-;;;;;;:::i;:::-;;:::i;28169:2078::-;;;;;;:::i;:::-;;:::i;1144:99:0:-;1223:13;;-1:-1:-1;;;;;1223:13:0;1144:99;;68094:133:28;;;;;;:::i;:::-;;:::i;2090:34:30:-;;;;;;33322:2007:28;;;;;;:::i;:::-;;:::i;31301:792::-;;;;;;:::i;:::-;;:::i;17009:1894::-;;;;;;:::i;:::-;;:::i;1436:178:0:-;;;;;;:::i;:::-;;:::i;12968:1642:28:-;13024:7;13043:44;;;;;;;;;;;;;;-1:-1:-1;;;13043:44:28;;;:19;:44::i;:::-;-1:-1:-1;;;;;13123:15:28;;13098:22;13123:15;;;:7;:15;;;;;13154:16;;;;13149:78;;13209:6;13193:23;;-1:-1:-1;;;13193:23:28;;;;;;;;:::i;:::-;;;;;;;;13149:78;13242:35;13255:6;13263:13;13242:12;:35::i;:::-;13237:97;;13300:23;;-1:-1:-1;;;13300:23:28;;;;;;;;;;;13237:97;13349:33;13362:6;13370:11;13349:12;:33::i;:::-;13344:93;;13405:21;;-1:-1:-1;;;13405:21:28;;;;;;;;;;;13344:93;13452:35;13465:6;13473:13;13452:12;:35::i;:::-;13447:97;;13510:23;;-1:-1:-1;;;13510:23:28;;;;;;;;;;;13447:97;13559:34;13572:6;13580:12;13559;:34::i;:::-;13554:95;;13616:22;;-1:-1:-1;;;13616:22:28;;;;;;;;;;;13554:95;13664:34;13677:6;13685:12;13664;:34::i;:::-;13659:95;;13721:22;;-1:-1:-1;;;13721:22:28;;;;;;;;;;;13659:95;13769:41;13782:6;13790:19;13769:12;:41::i;:::-;13764:108;;13833:28;;-1:-1:-1;;;13833:28:28;;;;;;;;;;;13764:108;13887:38;13900:6;13908:16;13887:12;:38::i;:::-;13882:103;;13948:26;;-1:-1:-1;;;13948:26:28;;;;;;;;;;;13882:103;14000:37;14013:6;14021:15;14000:12;:37::i;:::-;13995:101;;14060:25;;-1:-1:-1;;;14060:25:28;;;;;;;;;;;13995:101;14111:40;14124:6;14132:18;14111:12;:40::i;:::-;14106:106;;14174:27;;-1:-1:-1;;;14174:27:28;;;;;;;;;;;14106:106;-1:-1:-1;;;;;14226:18:28;;;;;;:10;:18;;;;;;:23;14222:81;;14272:20;;-1:-1:-1;;;14272:20:28;;;;;;;;;;;14222:81;-1:-1:-1;;;;;14317:18:28;;;;;;:10;:18;;;;;;:23;14313:81;;14363:20;;-1:-1:-1;;;14363:20:28;;;;;;;;;;;14313:81;14408:32;;;;:37;14404:102;;14468:27;;-1:-1:-1;;;14468:27:28;;;;;;;;;;;14404:102;14516:24;;-1:-1:-1;;14516:24:28;;;14555:22;;-1:-1:-1;;;;;14555:22:28;;;;;14535:5;;14555:22;-1:-1:-1;3708:1:30;;12968:1642:28;-1:-1:-1;;12968:1642:28:o;2102:147:26:-;1355:13:1;:11;:13::i;:::-;2195:47:26::1;2220:21;2195:24;:47::i;:::-;2102:147:::0;:::o;46128:562:28:-;46203:46;;;;;;;;;;;;;;;;;;:19;:46::i;:::-;46296:22;3968:6:30;46267:51:28;;46259:110;;;;-1:-1:-1;;;46259:110:28;;;;;;;:::i;:::-;46416:22;3838:7:30;46387:51:28;;46379:110;;;;-1:-1:-1;;;46379:110:28;;;;;;;:::i;:::-;46533:19;;;46562:44;;;;46621:62;;;;;;46533:19;;46584:22;;46621:62;:::i;:::-;;;;;;;;46193:497;46128:562;:::o;52561:583::-;52670:63;;;;;;;;;;;;;;;;;;:19;:63::i;:::-;52765:7;52813:13;52852:15;;;;;:46;;;52885:13;52871:10;:27;52852:46;52844:72;;;;-1:-1:-1;;;52844:72:28;;;;;;;:::i;:::-;52927:27;52943:10;52927:15;:27::i;:::-;52970:9;52965:173;52985:10;52981:1;:14;52965:173;;;53050:13;;53064:1;53050:16;;;;;;;:::i;:::-;;;;;;;53016:10;:31;53035:7;;53043:1;53035:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;53016:31:28;;;;;;;;;;;;-1:-1:-1;53016:31:28;:50;53098:7;;53106:1;53098:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;53085:42:28;;53110:13;;53124:1;53110:16;;;;;;;:::i;:::-;;;;;;;53085:42;;;;;;:::i;:::-;;;;;;;;52997:3;;52965:173;;;;52660:484;;52561:583;;;;:::o;36104:1997::-;36456:54;36479:16;36497:12;36456:22;:54::i;:::-;-1:-1:-1;;;;;36545:25:28;;36521:21;36545:25;;;:7;:25;;;;;36586:15;;;;36581:87;;36640:16;36624:33;;-1:-1:-1;;;36624:33:28;;;;;;;;:::i;36581:87::-;36708:4;-1:-1:-1;;;;;36682:31:28;;;36678:772;;36923:4;-1:-1:-1;;;;;36864:64:28;36879:16;-1:-1:-1;;;;;36872:36:28;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36864:64:28;;36860:131;;36955:21;;-1:-1:-1;;;36955:21:28;;;;;;;;;;;36860:131;36678:772;;;-1:-1:-1;;;;;37177:23:28;;;;;;:7;:23;;;;;:32;;;37172:110;;37252:14;37236:31;;-1:-1:-1;;;37236:31:28;;;;;;;;:::i;37172:110::-;37348:14;-1:-1:-1;;;;;37341:34:28;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37299:78:28;37306:16;-1:-1:-1;;;;;37299:36:28;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37299:78:28;;37295:145;;37404:21;;-1:-1:-1;;;37404:21:28;;;;;;;;;;;37295:145;-1:-1:-1;;;;;37465:34:28;;;;;;:24;;;:34;;;;;;;;37460:120;;37542:16;37560:8;37522:47;;-1:-1:-1;;;37522:47:28;;;;;;;;;:::i;37460:120::-;37660:19;:26;37626:31;37697:398;37717:23;37713:1;:27;37697:398;;;37761:37;37801:19;37821:1;37801:22;;;;;;;;:::i;:::-;;;;;;;;;;;37837:65;;-1:-1:-1;;;37837:65:28;;-1:-1:-1;;;;;37801:22:28;;;;-1:-1:-1;37801:22:28;;37837:47;;:65;;37885:16;;37837:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37916:76:28;;-1:-1:-1;;;37916:76:28;;-1:-1:-1;;;;;37916:48:28;;;-1:-1:-1;37916:48:28;;-1:-1:-1;37916:76:28;;37965:16;;37983:8;;37916:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38006:78:28;;-1:-1:-1;;;38006:78:28;;-1:-1:-1;;;;;38006:48:28;;;-1:-1:-1;38006:48:28;;-1:-1:-1;38006:78:28;;38055:16;;38073:10;;38006:78;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37747:348;37742:3;;;;;37697:398;;23904:425;24224:5;;-1:-1:-1;;;;;24224:5:28;24216:28;24212:111;;24260:5;;:52;;-1:-1:-1;;;24260:52:28;;-1:-1:-1;;;;;24260:5:28;;;;:34;;:52;;24295:8;;24305:6;;24260:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24212:111;23904:425;;;;;:::o;54930:624::-;55050:65;;;;;;;;;;;;;;;;;;:19;:65::i;:::-;55149:11;55200;55229:44;55245:27;55200:11;55149;55245:27;:::i;:::-;55229:15;:44::i;:::-;55289:17;55284:264;55320:12;55308:9;:24;55284:264;;;55366:17;55361:177;55397:12;55385:9;:24;55361:177;;;55442:81;55467:11;;55479:9;55467:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;55492:11;;55504:9;55492:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;55516:6;55442:16;:81::i;:::-;55411:11;;55361:177;;;-1:-1:-1;55334:11:28;;55284:264;;;;55040:514;;54930:624;;;;;:::o;43637:2221::-;43830:40;43873:64;43902:8;43912:24;43873:28;:64::i;:::-;43830:107;;43979:25;;43952:8;:24;;;:52;43948:244;;;44129:25;;44156:24;;44102:79;;-1:-1:-1;;;44102:79:28;;;;44129:25;44156:24;44102:79;;;:::i;43948:244::-;44202:25;44230:119;44262:47;;;;;;;;44278:28;;44262:47;;;44323:8;:16;;;44230:18;:119::i;:::-;44384:24;;44202:147;;-1:-1:-1;44363:45:28;;44359:290;;44613:24;;44571:67;;-1:-1:-1;;;44571:67:28;;;;44594:17;;44571:67;;;:::i;44359:290::-;44663:8;:18;;;44685:1;44663:23;44659:84;;44709:23;;-1:-1:-1;;;44709:23:28;;;;;;;;;;;44659:84;44775:6;44799:32;44815:15;44829:1;44775:6;44815:15;:::i;44799:32::-;44847:9;44842:653;44862:11;44858:1;:15;44842:653;;;44899:7;:42;44915:6;;44922:1;44915:9;;;;;;;:::i;:::-;;;;;;:24;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44899:42:28;;;;;;;;;;;;-1:-1:-1;44899:42:28;:51;;;44894:148;;45001:6;;45008:1;45001:9;;;;;;;:::i;:::-;;;;;;:24;;;;;;;;;;:::i;:::-;44977:50;;-1:-1:-1;;;44977:50:28;;;;;;;;:::i;44894:148::-;45060:7;:44;45076:6;;45083:1;45076:9;;;;;;;:::i;:::-;:26;;;:9;;;;;:26;;;;-1:-1:-1;45076:26:28;:::i;:::-;-1:-1:-1;;;;;45060:44:28;;;;;;;;;;;;-1:-1:-1;45060:44:28;:53;;;45055:152;;45164:6;;45171:1;45164:9;;;;;;;:::i;:::-;:26;;;:9;;;;;:26;;;;-1:-1:-1;45164:26:28;:::i;45055:152::-;45221:31;45255:6;;45262:1;45255:9;;;;;;;:::i;:::-;;;;;;45221:43;;45278:5;:20;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45278:41:28;;45337:10;45365:8;45391:17;;;;45426:22;;;;45391:5;45426:22;:::i;:::-;45466:4;45278:206;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44880:615;44875:3;;;;;44842:653;;;;45505:29;45537:21;45549:8;45537:11;:21::i;:::-;45591:20;;45505:53;;-1:-1:-1;45568:20:28;45622:230;45642:12;45638:1;:16;45622:230;;;45678:21;45705:51;45729:13;45743:1;45729:16;;;;;;;;:::i;:::-;;;;;;;45747:8;45705:23;:51::i;:::-;-1:-1:-1;45675:81:28;-1:-1:-1;;45778:18:28;;45770:71;;;;-1:-1:-1;;;45770:71:28;;;;;;;:::i;:::-;-1:-1:-1;45656:3:28;;45622:230;;21215:232;21344:5;;-1:-1:-1;;;;;21344:5:28;21336:28;21332:109;;21380:5;;:50;;-1:-1:-1;;;21380:50:28;;-1:-1:-1;;;;;21380:5:28;;;;:34;;:50;;21415:6;;21423;;21380:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21332:109;21215:232;;;;:::o;24912:558::-;25281:5;;-1:-1:-1;;;;;25281:5:28;25273:28;25269:195;;25317:5;;:60;;-1:-1:-1;;;25317:60:28;;-1:-1:-1;;;;;25317:5:28;;;;:34;;:60;;25352:8;;25362:14;;25317:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25391:5:28;;:62;;-1:-1:-1;;;25391:62:28;;-1:-1:-1;;;;;25391:5:28;;;;-1:-1:-1;25391:34:28;;-1:-1:-1;25391:62:28;;25426:10;;25438:14;;25391:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25269:195;24912:558;;;;;;:::o;62071:549::-;62256:13;62271:17;62290;62319:40;62362:184;62409:7;62437:12;62464;62490;62516:20;62362:33;:184::i;:::-;62574:18;;;;62594;;;;;3708:1:30;;62574:18:28;;-1:-1:-1;62594:18:28;-1:-1:-1;62071:549:28;-1:-1:-1;;;;;;62071:549:28:o;56049:406::-;56144:60;;;;;;;;;;;;;;;;;;:19;:60::i;:::-;56254:25;;;56289:56;;;;56360:88;;;;;;56254:25;;56317:28;;56360:88;:::i;60976:320::-;61057:13;61072:17;61091;61120:40;61163:59;61192:7;61201:20;61163:28;:59::i;:::-;61250:18;;;;61270;;;;;3708:1:30;;61250:18:28;;-1:-1:-1;61270:18:28;-1:-1:-1;60976:320:28;-1:-1:-1;;;60976:320:28:o;2644:26:30:-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2644:26:30;;-1:-1:-1;2644:26:30;:::o;58025:269:28:-;1355:13:1;:11;:13::i;:::-;58114:40:28::1;58143:9;58114:20;:40::i;:::-;58202:6;::::0;;-1:-1:-1;;;;;58218:18:28;;::::1;-1:-1:-1::0;;;;;;58218:18:28;::::1;;::::0;;;58251:36:::1;::::0;58202:6;::::1;::::0;58251:36:::1;::::0;::::1;::::0;58202:6;;58227:9;;58251:36:::1;:::i;56965:735::-:0;1355:13:1;:11;:13::i;:::-;-1:-1:-1;;;;;57074:54:28;::::1;;::::0;;;:24:::1;:54;::::0;;;;;::::1;;57073:55;57065:82;;;;-1:-1:-1::0;;;57065:82:28::1;;;;;;;:::i;:::-;57191:19;:26:::0;57227:43:::1;57243:26;57191::::0;57268:1:::1;57243:26;:::i;57227:43::-;57281:19;:45:::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;;57281:45:28::1;-1:-1:-1::0;;;;;57281:45:28;::::1;::::0;;::::1;::::0;;;-1:-1:-1;57336:54:28;;;:24:::1;57281:45;57336:54:::0;;;;:61;;-1:-1:-1;;57336:61:28::1;::::0;;::::1;::::0;;;57431:10:::1;:17:::0;;57459:124:::1;57479:12;57475:1;:16;57459:124;;;57512:19;-1:-1:-1::0;;;;;57512:36:28::1;;57557:10;57568:1;57557:13;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;57512:60:::1;::::0;-1:-1:-1;;;;;;57512:60:28::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;57557:13:28::1;::::0;57512:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;57493:3;;;;;57459:124;;;;57658:19;-1:-1:-1::0;;;;;57658:31:28::1;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;57598:95:28::1;57628:19;-1:-1:-1::0;;;;;57598:95:28::1;;;;;;;;;;;57055:645;;56965:735:::0;:::o;67546:322::-;67602:23;67628:20;67640:7;67628:11;:20::i;:::-;67681:14;;67741:6;;67602:46;;-1:-1:-1;67681:14:28;-1:-1:-1;;;;;67741:6:28;67658:20;67758:104;67778:12;67774:1;:16;67758:104;;;67811:7;-1:-1:-1;;;;;67811:19:28;;67839:7;67847:1;67839:10;;;;;;;;:::i;:::-;;;;;;;67811:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67792:3;;;;;67758:104;;30636:214;30745:5;;-1:-1:-1;;;;;30745:5:28;30737:28;30733:111;;30781:5;;:52;;-1:-1:-1;;;30781:52:28;;-1:-1:-1;;;;;30781:5:28;;;;:34;;:52;;30816:8;;30826:6;;30781:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30733:111;30636:214;;;:::o;47677:1908::-;47848:67;;;;;;;;;;;;;;;;;;:19;:67::i;:::-;-1:-1:-1;;;;;47985:24:28;;47961:21;47985:24;;;:7;:24;;;;;48024:15;;;;48019:86;;48086:6;48062:32;;-1:-1:-1;;;48062:32:28;;;;;;;;:::i;48019:86::-;4104:7:30;48161:27:28;:60;48157:123;;;48244:25;;-1:-1:-1;;;48244:25:28;;;;;;;;;;;48157:123;287:4:40;48344:31:28;:46;48340:113;;;48413:29;;-1:-1:-1;;;48413:29:28;;;;;;;;;;;48340:113;48552:27;48518:31;:61;48514:128;;;48602:29;;-1:-1:-1;;;48602:29:28;;;;;;;;;;;48514:128;48713:32;;;;;:83;;-1:-1:-1;48749:6:28;;:42;;-1:-1:-1;;;48749:42:28;;-1:-1:-1;;;;;48749:6:28;;;;:25;;:42;;48783:6;;48749:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;48713:83;48709:148;;;48838:6;48819:27;;-1:-1:-1;;;48819:27:28;;;;;;;;:::i;48709:148::-;48905:31;;;;48950:58;;;48946:254;;49024:31;;;:61;;;49104:85;;;;;;49124:6;;49132:27;;49058;;49104:85;:::i;:::-;;;;;;;;48946:254;49252:35;;;;49301:66;;;49297:282;;49383:35;;;:69;;;49471:97;;;;;;49495:6;;49503:31;;49421;;49471:97;:::i;:::-;;;;;;;;47838:1747;;;47677:1908;;;:::o;60143:326::-;60226:13;60241:17;60260;60289:40;60332:63;60361:7;60370:24;60332:28;:63::i;67011:128::-;67067:27;67113:19;67106:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;67106:26:28;;;;;;;;;;;;;;;;;;;;;;;67011:128;:::o;26847:282::-;26968:5;;-1:-1:-1;;;;;26968:5:28;26960:28;26956:167;;27004:5;;:47;;-1:-1:-1;;;27004:47:28;;-1:-1:-1;;;;;27004:5:28;;;;:34;;:47;;27039:3;;27044:6;;27004:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27065:5:28;;:47;;-1:-1:-1;;;27065:47:28;;-1:-1:-1;;;;;27065:5:28;;;;-1:-1:-1;27065:34:28;;-1:-1:-1;27065:47:28;;27100:3;;27105:6;;27065:47;;;:::i;38981:825::-;39100:47;39123:6;39131:15;39100:22;:47::i;:::-;39278:48;39298:6;39306:3;39311:14;39278:19;:48::i;:::-;39407:19;:26;39373:31;39444:356;39464:23;39460:1;:27;39444:356;;;39508:37;39548:19;39568:1;39548:22;;;;;;;;:::i;:::-;;;;;;;;;;;39584:55;;-1:-1:-1;;;39584:55:28;;-1:-1:-1;;;;;39548:22:28;;;;-1:-1:-1;39548:22:28;;39584:47;;:55;;39632:6;;39584:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39653:61:28;;-1:-1:-1;;;39653:61:28;;-1:-1:-1;;;;;39653:48:28;;;-1:-1:-1;39653:48:28;;-1:-1:-1;39653:61:28;;39702:6;;39710:3;;39653:61;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39728:61:28;;-1:-1:-1;;;39728:61:28;;-1:-1:-1;;;;;39728:48:28;;;-1:-1:-1;39728:48:28;;-1:-1:-1;39728:61:28;;39777:6;;39785:3;;39728:61;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39494:306;39489:3;;;;;39444:356;;25963:478;26248:5;;-1:-1:-1;;;;;26248:5:28;26240:28;26236:199;;26284:5;;:62;;-1:-1:-1;;;26284:62:28;;-1:-1:-1;;;;;26284:5:28;;;;:34;;:62;;26319:8;;26329:16;;26284:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26360:5:28;;:64;;-1:-1:-1;;;26360:64:28;;-1:-1:-1;;;;;26360:5:28;;;;-1:-1:-1;26360:34:28;;-1:-1:-1;26360:64:28;;26395:10;;26407:16;;26360:64;;;:::i;2085:101:1:-;1355:13;:11;:13::i;:::-;2149:30:::1;2176:1;2149:18;:30::i;:::-;2085:101::o:0;2031:212:0:-;1223:13;;965:10:12;;-1:-1:-1;;;;;1223:13:0;2130:24;;2122:78;;;;-1:-1:-1;;;2122:78:0;;;;;;;:::i;:::-;2210:26;2229:6;2210:18;:26::i;58443:101:28:-;1355:13:1;:11;:13::i;:::-;58513:24:28::1;58531:5;58513:17;:24::i;59161:442::-:0;59247:57;;;;;;;;;;;;;;;;;;:19;:57::i;:::-;59314:36;59335:14;59314:20;:36::i;:::-;-1:-1:-1;;;;;59366:23:28;;;;;;:7;:23;;;;;:32;;;59361:102;;59437:14;59421:31;;-1:-1:-1;;;59421:31:28;;;;;;;;:::i;59361:102::-;-1:-1:-1;;;;;59473:42:28;;;;;;:26;:42;;;;;;;:51;;-1:-1:-1;;59473:51:28;;;;;;;59539:57;;;;;59473:51;;59539:57;:::i;:::-;;;;;;;;59161:442;;:::o;22314:624::-;22421:45;22444:6;22452:13;22421:22;:45::i;:::-;22477:51;22497:6;22505:8;22515:12;22477:19;:51::i;:::-;22609:19;:26;22575:31;22646:286;22666:23;22662:1;:27;22646:286;;;22710:37;22750:19;22770:1;22750:22;;;;;;;;:::i;:::-;;;;;;;;;;;22786:55;;-1:-1:-1;;;22786:55:28;;-1:-1:-1;;;;;22750:22:28;;;;-1:-1:-1;22750:22:28;;22786:47;;:55;;22834:6;;22786:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22855:66:28;;-1:-1:-1;;;22855:66:28;;-1:-1:-1;;;;;22855:48:28;;;-1:-1:-1;22855:48:28;;-1:-1:-1;22855:66:28;;22904:6;;22912:8;;22855:66;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22696:236;22691:3;;;;;22646:286;;40555:2110;40609:26;40638:17;40650:4;40638:11;:17::i;:::-;40691;;40809:6;;40609:46;;-1:-1:-1;40691:17:28;40740:10;;-1:-1:-1;;;;;40809:6:28;40665:23;40918:166;40938:15;40934:1;:19;40918:166;;;40978:10;40989:1;40978:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;40978:28:28;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41026:7;-1:-1:-1;;;;;41026:19:28;;41054:10;41065:1;41054:13;;;;;;;;:::i;:::-;;;;;;;41026:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40955:3;;;;;40918:166;;;;40760:334;41104:40;41147:60;41176:4;41182:24;41147:28;:60::i;:::-;41104:103;;41249:25;;41222:8;:24;;;:52;41218:169;;;41324:25;;41351:24;;41297:79;;-1:-1:-1;;;41297:79:28;;;;41324:25;41351:24;41297:79;;;:::i;41218:169::-;41401:8;:18;;;41423:1;41401:23;41397:84;;41447:23;;-1:-1:-1;;;41447:23:28;;;;;;;;;;;41397:84;41586:43;;;;;;;;;41602:24;;41586:43;;41684:35;;;;;;;41700:16;;;;41684:35;;41733:47;;;;;;;;41749:28;;41733:47;;41586:43;;41562:21;;41666:124;;41684:35;41666:4;:124::i;:::-;41639:151;;41801:21;41825:31;41830:10;41842:13;41825:4;:31::i;:::-;41801:55;;41870:56;41882:31;;;;;;;;287:4:40;41882:31:28;;;41915:10;2154:14:32;2138:13;;:30;;2036:139;41870:56:28;41866:165;;;41976:22;;42000:19;;41949:71;;-1:-1:-1;;;41949:71:28;;;;41976:22;42000:19;41949:71;;;:::i;41866:165::-;42046:9;42041:618;42061:15;42057:1;:19;42041:618;;;42097:13;42113:10;42124:1;42113:13;;;;;;;;:::i;:::-;;;;;;;42097:29;;42142:14;42158:21;42185:37;42209:6;42217:4;42185:23;:37::i;:::-;42141:81;;;;;42236:23;42262:45;42281:10;42293:13;42262:18;:45::i;:::-;42236:71;-1:-1:-1;42369:11:28;;42365:88;;42400:6;-1:-1:-1;;;;;42400:12:28;;42413:10;42425:4;42431:6;42400:38;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42365:88;42544:18;;42540:109;;42582:6;-1:-1:-1;;;;;42582:17:28;;42600:10;42612:4;42618:15;42582:52;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42540:109;42083:576;;;;42078:3;;;;;42041:618;;63554:161;-1:-1:-1;;;;;63657:24:28;;;63634:4;63657:24;;;:7;:24;;;;;;;;:51;;;;;:42;;;;:51;;;;;;63554:161;;;;;:::o;49921:689::-;287:4:40;50022:31:28;:47;;50014:109;;;;-1:-1:-1;;;50014:109:28;;;;;;;:::i;:::-;50134:55;;;;;;;;;;;;;;;;;;:19;:55::i;:::-;50287:28;;;50380:62;;;;50514:89;;;;;;50287:28;;50411:31;;50514:89;:::i;68436:657::-;-1:-1:-1;;;;;68576:22:28;;68522:11;68576:22;;;:13;:22;;;;;;;;68543:55;;;;;;;;;;;;;;;;;68495:15;;68522:11;;;68543:55;68576:22;68543:55;;;68576:22;68543:55;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;68543:55:28;;;;;;;;;;;;;;;;;;;;;;;68608:28;68639:14;:21;68608:52;;68671:24;68711:20;-1:-1:-1;;;;;68698:34:28;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;68698:34:28;;68671:61;;68748:9;68743:254;68763:20;68759:1;:24;68743:254;;;68804:21;68828:7;:35;68844:14;68859:1;68844:17;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;68828:35:28;;;;;;;;;;;-1:-1:-1;68828:35:28;68881:15;;68828:35;;-1:-1:-1;68881:15:28;;68877:110;;;68932:14;68947:1;68932:17;;;;;;;;:::i;:::-;;;;;;;68916:8;68925:3;68916:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;68916:33:28;;;:13;;;;;;;;;;;:33;68967:5;;;:::i;:::-;;;68877:110;-1:-1:-1;68785:3:28;;68743:254;;;-1:-1:-1;69030:21:28;;;-1:-1:-1;69037:8:28;;68436:657;-1:-1:-1;;;68436:657:28:o;62812:108::-;62869:15;62903:10;62896:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;62896:17:28;;;;;;;;;;;;;;;;;;;;;;62812:108;:::o;66107:770::-;66256:19;:26;66174:34;;66256:26;-1:-1:-1;;;;;66307:45:28;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66307:45:28;;;;;;;;;;;;;;;;;66292:60;;66367:9;66362:480;66382:25;66378:1;:29;66362:480;;;66428:37;66468:19;66488:1;66468:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;66534:32;;;-1:-1:-1;;;66534:32:28;;;;-1:-1:-1;;;;;66468:22:28;;;;-1:-1:-1;66468:22:28;;66534:30;;:32;;;;;;;;;;66468:22;66534:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;66504:63;;66599:232;;;;;;;;66643:11;-1:-1:-1;;;;;66599:232:28;;;;;66685:18;-1:-1:-1;;;;;66685:42:28;;66728:6;66685:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;66599:232;;;;66766:18;-1:-1:-1;;;;;66766:42:28;;66809:6;66766:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;66599:232;;;66581:12;66594:1;66581:15;;;;;;;;:::i;:::-;;;;;;;;;;:250;-1:-1:-1;;66409:3:28;;66362:480;;;;66851:19;66107:770;;;:::o;19584:1218::-;19685:43;19708:6;19716:11;19685:22;:43::i;:::-;-1:-1:-1;;;;;19744:15:28;;;;;;:7;:15;;;;;:24;;;19739:95;;19815:6;19791:32;;-1:-1:-1;;;19791:32:28;;;;;;;;:::i;19739:95::-;-1:-1:-1;;;;;19864:18:28;;19844:17;19864:18;;;:10;:18;;;;;;-1:-1:-1;;19966:30:28;;19962:433;;20012:20;20042:6;-1:-1:-1;;;;;20035:26:28;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20012:51;;20077:23;20103:54;;;;;;;;20126:6;-1:-1:-1;;;;;20119:33:28;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20103:54;;20077:80;-1:-1:-1;20171:23:28;20197:65;20077:80;20237:12;20251:10;20197:25;:65::i;:::-;20171:91;;20298:9;20280:15;:27;20276:109;;;20352:6;20360:9;20334:36;;-1:-1:-1;;;20334:36:28;;;;;;;;;:::i;20276:109::-;19998:397;;;19962:433;20475:19;:26;20441:31;20512:284;20532:23;20528:1;:27;20512:284;;;20576:37;20616:19;20636:1;20616:22;;;;;;;;:::i;:::-;;;;;;;;;;;20652:55;;-1:-1:-1;;;20652:55:28;;-1:-1:-1;;;;;20616:22:28;;;;-1:-1:-1;20616:22:28;;20652:47;;:55;;20700:6;;20652:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20721:64:28;;-1:-1:-1;;;20721:64:28;;-1:-1:-1;;;;;20721:48:28;;;-1:-1:-1;20721:48:28;;-1:-1:-1;20721:64:28;;20770:6;;20778;;20721:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20562:234;20557:3;;;;;20512:284;;11281:399;11398:14;;11356:16;;11384:11;11398:14;-1:-1:-1;;;;;11450:18:28;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11450:18:28;;11423:45;;11483:9;11478:171;11498:3;11494:1;:7;11478:171;;;11522:13;11545:7;11553:1;11545:10;;;;;;;;:::i;:::-;;;;;;;11522:34;;11571:32;11584:6;11592:10;11571:12;:32::i;:::-;3708:1:30;11617:7:28;11625:1;11617:10;;;;;;;;:::i;:::-;;;;;;;;;;:21;-1:-1:-1;11503:3:28;;11478:171;;;-1:-1:-1;11666:7:28;11281:399;-1:-1:-1;;;11281:399:28:o;58682:179::-;1355:13:1;:11;:13::i;:::-;58749:37:28::1;58778:6;58749:20;:37::i;:::-;58816:5;::::0;58802:28:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;58816:5:28;;::::1;::::0;58823:6;;58802:28:::1;:::i;:::-;;;;;;;;58840:5;:14:::0;;-1:-1:-1;;;;;;58840:14:28::1;-1:-1:-1::0;;;;;58840:14:28;;;::::1;::::0;;;::::1;::::0;;58682:179::o;64394:1466::-;64572:13;64587:21;64689:29;64721:47;64752:14;64721:23;:47::i;:::-;64689:79;;64778:31;64812:49;64843:16;64812:23;:49::i;:::-;64778:83;;65247:28;65285:16;-1:-1:-1;;;;;65278:43:28;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;65247:76;;65359:19;65388:20;-1:-1:-1;;;;;;;;;;;;;;65388:20:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;65494:47:28;;;;;;;65510:28;;65494:47;;65543:40;;;;;;;;;;;-1:-1:-1;;65489:95:28;;:4;:95::i;:::-;65477:107;;65608:89;65613:42;;;;;;;;65629:23;65613:42;;;65657:39;;;;;;;;65673:20;65657:39;;;65608:4;:89::i;:::-;65594:103;;65715:28;65720:9;65731:11;65715:4;:28::i;:::-;65707:36;;65768:44;65787:5;65794:17;65768:18;:44::i;:::-;3708:1:30;;65754:58:28;;-1:-1:-1;64394:1466:28;-1:-1:-1;;;;;;;;;;;64394:1466:28:o;50951:812::-;51008:28;51023:12;51008:14;:28::i;:::-;-1:-1:-1;;;;;51051:24:28;;;;;;:7;:24;;;;;:33;;;51047:107;;;51135:6;51107:36;;-1:-1:-1;;;51107:36:28;;;;;;;;:::i;51047:107::-;51172:6;-1:-1:-1;;;;;51172:15:28;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51164:57;;;;-1:-1:-1;;;51164:57:28;;;;;;;:::i;:::-;-1:-1:-1;;;;;51308:24:28;;51281;51308;;;:7;:24;;;;;51342:25;;-1:-1:-1;;51342:25:28;51363:4;51342:25;;;;;51377:34;;:38;;;51425;;;:42;;;;51478:27;51324:6;51478:10;:27::i;:::-;51550:19;:26;51516:31;51587:131;51607:23;51603:1;:27;51587:131;;;51651:19;51671:1;51651:22;;;;;;;;:::i;:::-;;;;;;;;;;;:56;;-1:-1:-1;;;51651:56:28;;-1:-1:-1;;;;;51651:22:28;;;;:39;;:56;;51699:6;;51651:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51632:3;;;;;51587:131;;;;51733:23;51749:6;51733:23;;;;;;:::i;:::-;;;;;;;;50998:765;;50951:812;:::o;53935:601::-;54044:63;;;;;;;;;;;;;;;;;;:19;:63::i;:::-;54140:7;54117:20;54173:17;;;54165:55;;;;-1:-1:-1;;;54165:55:28;;;;;;;:::i;:::-;54238:36;;;54230:74;;;;-1:-1:-1;;;54230:74:28;;;;;;;:::i;:::-;54315:29;54331:12;54315:15;:29::i;:::-;54360:9;54355:175;54375:12;54371:1;:16;54355:175;;;54442:13;;54456:1;54442:16;;;;;;;:::i;:::-;;;;;;;54408:10;:31;54427:7;;54435:1;54427:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;54408:31:28;;;;;;;;;;;;-1:-1:-1;54408:31:28;:50;54490:7;;54498:1;54490:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;54477:42:28;;54502:13;;54516:1;54502:16;;;;;;;:::i;:::-;;;;;;;54477:42;;;;;;:::i;:::-;;;;;;;;54389:3;;54355:175;;10458:232;3279:19:3;3302:13;;;;;;3301:14;;3347:34;;;;-1:-1:-1;3365:12:3;;3380:1;3365:12;;;;:16;3347:34;3346:108;;;-1:-1:-1;3426:4:3;1713:19:11;:23;;;3387:66:3;;-1:-1:-1;3436:12:3;;;;;:17;3387:66;3325:201;;;;-1:-1:-1;;;3325:201:3;;;;;;;:::i;:::-;3536:12;:16;;-1:-1:-1;;3536:16:3;3551:1;3536:16;;;3562:65;;;;3596:13;:20;;-1:-1:-1;;3596:20:3;;;;;3562:65;10558:21:28::1;:19;:21::i;:::-;10589:55;10623:20;10589:33;:55::i;:::-;10655:28;10673:9;10655:17;:28::i;:::-;3651:14:3::0;3647:99;;;3697:5;3681:21;;-1:-1:-1;;3681:21:3;;;3721:14;;;;;;3681:13;;3721:14;:::i;2364:49:30:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2364:49:30;;-1:-1:-1;2364:49:30;;-1:-1:-1;2364:49:30:o;15539:361:28:-;15615:30;15636:8;15615:20;:30::i;:::-;15677:10;15659:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;15659:39:28;;;;;;;;;;:51;;;:39;;;;:51;;;15655:116;;15733:27;;-1:-1:-1;;;15733:27:28;;;;;;;;;;;15655:116;15799:10;15781:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;15781:39:28;;;;;;;;;;;:50;;-1:-1:-1;;15781:50:28;;;;;;;15846:47;;15781:39;;15799:10;15846:47;;;;15781:50;;15846:47;:::i;:::-;;;;;;;;15539:361;;:::o;28169:2078::-;28276:45;28299:6;28307:13;28276:22;:45::i;:::-;-1:-1:-1;;;;;28337:15:28;;;;;;:7;:15;;;;;:24;;;28332:95;;28408:6;28384:32;;-1:-1:-1;;;28384:32:28;;;;;;;;:::i;28332:95::-;-1:-1:-1;;;;;28442:15:28;;;;;;;:7;:15;;;;;;;;:43;;;;;:33;;;;:43;;;;;;28437:294;;28578:22;28593:6;28578:14;:22::i;:::-;28678:42;28698:10;28711:8;28678:12;:42::i;:::-;28780:22;28793:8;28780:12;:22::i;:::-;28817:6;;:33;;-1:-1:-1;;;28817:33:28;;-1:-1:-1;;;;;28817:6:28;;;;:25;;:33;;28843:6;;28817:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28854:1;28817:38;28813:103;;28897:6;28878:27;;-1:-1:-1;;;28878:27:28;;;;;;;;:::i;28813:103::-;-1:-1:-1;;;;;28946:18:28;;28926:17;28946:18;;;:10;:18;;;;;;-1:-1:-1;;29048:30:28;;29044:370;;29094:20;29124:6;-1:-1:-1;;;;;29117:27:28;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29094:52;;29160:15;29185:6;-1:-1:-1;;;;;29178:22:28;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29160:42;-1:-1:-1;29216:24:28;29160:42;29243:27;29258:12;29243;:27;:::i;:::-;:37;;;;:::i;:::-;29216:64;;29317:9;29298:16;:28;29294:110;;;29371:6;29379:9;29353:36;;-1:-1:-1;;;29353:36:28;;;;;;;;;:::i;29294:110::-;29080:334;;;29044:370;29424:40;29467:168;29514:8;29543:6;29564:1;29579:12;29605:20;29467:33;:168::i;:::-;29650:18;;;;29424:211;;-1:-1:-1;29650:22:28;29646:83;;29695:23;;-1:-1:-1;;;29695:23:28;;;;;;;;;;;29646:83;29739:22;29764:47;;;;;;;;29787:6;-1:-1:-1;;;;;29780:26:28;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29764:47;;29892:19;:26;29739:72;;-1:-1:-1;29858:31:28;29929:312;29949:23;29945:1;:27;29929:312;;;29993:37;30033:19;30053:1;30033:22;;;;;;;;:::i;:::-;;;;;;;;;;;30069:68;;-1:-1:-1;;;30069:68:28;;-1:-1:-1;;;;;30033:22:28;;;;-1:-1:-1;30033:22:28;;30069:47;;:68;;30117:6;;30125:11;;30069:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30151:79:28;;-1:-1:-1;;;30151:79:28;;-1:-1:-1;;;;;30151:48:28;;;-1:-1:-1;30151:48:28;;-1:-1:-1;30151:79:28;;30200:6;;30208:8;;30218:11;;30151:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29979:262;29974:3;;;;;29929:312;;68094:133;-1:-1:-1;;;;;68191:21:28;;68168:4;68191:21;;;:13;:21;;;;;68168:4;68213:6;68191:29;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;68191:29:28;;;;;68094:133;-1:-1:-1;;;68094:133:28:o;33322:2007::-;33725:56;33748:14;33764:16;33725:22;:56::i;:::-;33831:22;33844:8;33831:12;:22::i;:::-;-1:-1:-1;;;;;33869:23:28;;;;;;:7;:23;;;;;:32;;;33864:111;;33948:14;33924:40;;-1:-1:-1;;;33924:40:28;;;;;;;;:::i;33864:111::-;-1:-1:-1;;;;;33989:25:28;;;;;;:7;:25;;;;;:34;;;33984:115;;34070:16;34046:42;;-1:-1:-1;;;34046:42:28;;;;;;;;:::i;33984:115::-;34133:52;;-1:-1:-1;;;34133:52:28;;34109:21;;-1:-1:-1;;;;;34133:42:28;;;;;:52;;34176:8;;34133:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34109:76;;34276:18;:64;;;-1:-1:-1;;;;;;34298:42:28;;;;;;:26;:42;;;;;;;;34276:64;34272:201;;;34374:13;34360:11;:27;34356:87;;;34414:14;;-1:-1:-1;;;34414:14:28;;;;;;;;;;;34356:87;34456:7;;;34272:201;34585:40;34628:64;34657:8;34667:24;34628:28;:64::i;:::-;34585:107;;34735:25;;34707:8;:24;;;:53;34703:252;;34892:25;;34919:24;;34866:78;;-1:-1:-1;;;34866:78:28;;;;34892:25;34919:24;34866:78;;;:::i;34703:252::-;34969:8;:18;;;34991:1;34969:23;34965:84;;35015:23;;-1:-1:-1;;;35015:23:28;;;;;;;;;;;34965:84;35147:16;35166:73;35185:38;;;;;;;;35201:19;;35185:38;;;35225:13;35166:18;:73::i;:::-;35147:92;;35267:8;35253:11;:22;35249:74;;;35298:14;;-1:-1:-1;;;35298:14:28;;;;;;;;;;;31301:792;31385:44;31408:6;31416:12;31385:22;:44::i;:::-;31440:6;;:26;;-1:-1:-1;;;31440:26:28;;-1:-1:-1;;;;;31440:6:28;;;;:18;;:26;;31459:6;;31440:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;31482:15:28;;;;;;:7;:15;;;;;:24;;;31477:95;;31553:6;31529:32;;-1:-1:-1;;;31529:32:28;;;;;;;;:::i;31477:95::-;31652:19;:26;31618:31;31689:398;31709:23;31705:1;:27;31689:398;;;31753:22;31778:47;;;;;;;;31801:6;-1:-1:-1;;;;;31794:26:28;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31778:47;;;31753:72;;31839:37;31879:19;31899:1;31879:22;;;;;;;;:::i;:::-;;;;;;;;;;;31915:68;;-1:-1:-1;;;31915:68:28;;-1:-1:-1;;;;;31879:22:28;;;;-1:-1:-1;31879:22:28;;31915:47;;:68;;31963:6;;31971:11;;31915:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31997:79:28;;-1:-1:-1;;;31997:79:28;;-1:-1:-1;;;;;31997:48:28;;;-1:-1:-1;31997:48:28;;-1:-1:-1;31997:79:28;;32046:6;;32054:8;;32064:11;;31997:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31739:348;;31734:3;;;;;31689:398;;17009:1894;17079:7;17098:57;17121:13;17136:18;17098:22;:57::i;:::-;17188:13;17165;;17335:43;17188:13;17367:10;17335:23;:43::i;:::-;17290:88;;;;;17447:10;17461:1;17447:15;17443:75;;17485:22;;-1:-1:-1;;;17485:22:28;;;;;;;;;;;17443:75;17608:58;17628:13;17643:10;17655;17608:19;:58::i;:::-;-1:-1:-1;;;;;17707:24:28;;17677:27;17707:24;;;:7;:24;;;;;;;;17853:10;17822:42;;:30;;;:42;;;;;;;;;17817:89;;-1:-1:-1;3708:1:30;;17009:1894:28;-1:-1:-1;;;;;17009:1894:28:o;17817:89::-;18007:10;17976:42;;;;:30;;;:42;;;;;;;;17969:49;;-1:-1:-1;;17969:49:28;;;18174:13;:25;;;;;18142:57;;;;;;;;;;;;;;;;;;;18174:25;;18142:57;;;18174:25;18142:57;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18142:57:28;;;;;;;;;;;;;;;;-1:-1:-1;;18223:20:28;;18142:57;;-1:-1:-1;18223:20:28;;-1:-1:-1;18209:11:28;;-1:-1:-1;;18288:156:28;18308:3;18304:1;:7;18288:156;;;18356:6;-1:-1:-1;;;;;18336:26:28;:13;18350:1;18336:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;18336:26:28;;18332:102;;18395:1;18382:14;;18414:5;;18332:102;18313:3;;18288:156;;;;18570:3;18557:10;:16;18550:24;;;;:::i;:::-;18717:10;18673:27;18703:25;;;:13;:25;;;;;18774:17;;18703:25;;18774:21;;18794:1;;18774:21;:::i;:::-;18763:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18763:33:28;18738:10;18749;18738:22;;;;;;;;:::i;:::-;;;;;;;;;:58;;;;;-1:-1:-1;;;;;18738:58:28;;;;;-1:-1:-1;;;;;18738:58:28;;;;;;18806:10;:16;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;18806:16:28;;;;;-1:-1:-1;;;;;;18806:16:28;;;;;;;;;18838:32;;18859:10;;-1:-1:-1;;;;;18838:32:28;;;;;18806:16;18838:32;-1:-1:-1;3708:1:30;;17009:1894:28;-1:-1:-1;;;;;;;;;17009:1894:28:o;1436:178:0:-;1355:13:1;:11;:13::i;:::-;1525::0::1;:24:::0;;-1:-1:-1;;;;;1525:24:0;::::1;-1:-1:-1::0;;;;;;1525:24:0;;::::1;::::0;::::1;::::0;;;1589:7:::1;1534:6:1::0;;-1:-1:-1;;;;;1534:6:1;;1462:85;1589:7:0::1;-1:-1:-1::0;;;;;1564:43:0::1;;;;;;;;;;;1436:178:::0;:::o;3203:282:26:-;3304:21;;:60;;-1:-1:-1;;;3304:60:26;;3281:20;;-1:-1:-1;;;;;3304:21:26;;:37;;:60;;3342:10;;3354:9;;3304:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3281:83;;3380:15;3375:104;;3431:10;3451:4;3458:9;3418:50;;-1:-1:-1;;;3418:50:26;;;;;;;;;;:::i;3375:104::-;3271:214;3203:282;:::o;1620:130:1:-;1534:6;;-1:-1:-1;;;;;1534:6:1;965:10:12;1683:23:1;1675:68;;;;-1:-1:-1;;;1675:68:1;;;;;;;:::i;2641:425:26:-;-1:-1:-1;;;;;2733:44:26;;2725:94;;;;-1:-1:-1;;;2725:94:26;;;;;;;:::i;:::-;2871:21;;;-1:-1:-1;;;;;2903:70:26;;;-1:-1:-1;;;;;;2903:70:26;;;;;;2988:71;;2871:21;;;2988:71;;;;2871:21;;2951;;2988:71;:::i;1612:166:34:-;1684:13;;1678:3;:19;1674:98;;;1742:13;;1757:3;1720:41;;-1:-1:-1;;;1720:41:34;;;;;;;;;:::i;79654:186:28:-;79744:28;79757:6;79765;79744:12;:28::i;:::-;79740:94;;;79808:6;79816;79795:28;;-1:-1:-1;;;79795:28:28;;;;;;;;;:::i;71081:286::-;-1:-1:-1;;;;;71178:15:28;;;;;;:7;:15;;;;;:24;;;71170:77;;;;-1:-1:-1;;;71170:77:28;;;;;;;:::i;:::-;-1:-1:-1;;;;;71257:21:28;;;;;;:13;:21;;;;;71289:6;;71279;71257:29;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;71310:50;71336:6;71345;71353;71310:50;;;;;;;;:::i;78152:178::-;-1:-1:-1;;;;;;;;;;;;;;78252:71:28;;;;;;;-1:-1:-1;;;;;78268:23:28;;;;;;:7;:23;;;:52;;;78252:71;;;78152:178::o;73139:302::-;73299:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;73299:40:28;73358:76;73392:7;73416:1;73421;73424;73427:6;73358:33;:76::i;:::-;73351:83;73139:302;-1:-1:-1;;;73139:302:28:o;1373:177:32:-;1454:7;1473:18;1494:15;1499:1;1502:6;1494:4;:15::i;:::-;1473:36;;1526:17;1535:7;1526:8;:17::i;:::-;1519:24;1373:177;-1:-1:-1;;;;1373:177:32:o;78719:472:28:-;78826:21;78849;78872:28;78912:11;78993:6;-1:-1:-1;;;;;78993:25:28;;79019:4;78993:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;78933:91;;-1:-1:-1;78933:91:28;-1:-1:-1;78933:91:28;-1:-1:-1;78933:91:28;-1:-1:-1;79038:8:28;;79034:82;;79091:6;79100:4;79069:36;;-1:-1:-1;;;79069:36:28;;;;;;;;;:::i;79034:82::-;79125:59;78719:472;;;;;:::o;77770:170::-;-1:-1:-1;;;;;;;;;;;;;;77866:67:28;;;;;;;-1:-1:-1;;;;;77882:23:28;;;;;;:7;:23;;;:48;;;77866:67;;;77770:170::o;74258:2869::-;74512:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;74512:40:28;74608:22;74633:20;74645:7;74633:11;:20::i;:::-;74685:13;;74608:45;;-1:-1:-1;74663:19:28;74709:1857;74729:11;74725:1;:15;74709:1857;;;74761:12;74776:6;74783:1;74776:9;;;;;;;;:::i;:::-;;;;;;;74761:24;;74868:21;74891;74914:28;74946:85;74987:5;75010:7;74946:23;:85::i;:::-;74867:164;;;;;;75099:22;75124:49;;;;;;;;75140:30;75164:5;75140:23;:30::i;:::-;75124:49;;;75099:74;;75254:22;75279:58;75284:39;;;;;;;;75300:20;75284:39;;;75325:11;75279:4;:58::i;:::-;75254:83;;75351:30;75384:32;75389:13;75396:5;75389:6;:13;;:::i;:::-;75404:11;75384:4;:32::i;:::-;75351:65;;75534:152;75577:19;75614:13;75645:8;:27;;;75534:25;:152::i;:::-;75504:27;;;:182;75844:24;;75790:79;;75816:11;;75829:13;;75790:25;:79::i;:::-;75763:106;;76011:16;;;;75957:71;;75983:11;;75996:13;;75957:25;:71::i;:::-;75938:8;:16;;:90;;;;;76122:12;-1:-1:-1;;;;;76113:21:28;:5;-1:-1:-1;;;;;76113:21:28;;76109:447;;76265:78;76291:19;76312:12;76326:8;:16;;;76265:25;:78::i;:::-;76246:16;;;:97;;;76471:70;;76497:11;;76510:12;;76471:25;:70::i;:::-;76452:16;;;:89;76109:447;74747:1819;;;;;;;74742:3;;;;;74709:1857;;;;76576:25;76623:8;:16;;;76604:8;:16;;;:35;;;;:::i;:::-;76576:63;;76778:17;76748:8;:27;;;:47;76744:341;;;76836:27;;;;:47;;;76815:18;;;:68;-1:-1:-1;76901:18:28;;;:22;76744:341;;;76983:1;76962:18;;;:22;77043:27;;;;77023:47;;77002:18;;;:68;76744:341;77105:15;;;74258:2869;;;;;;;:::o;385:136:41:-;-1:-1:-1;;;;;448:22:41;;444:75;;489:23;;-1:-1:-1;;;489:23:41;;;;;;;;;;;71654:898:28;-1:-1:-1;;;;;71782:15:28;;71758:21;71782:15;;;:7;:15;;;;;71813;;;;71808:86;;71875:6;71851:32;;-1:-1:-1;;;71851:32:28;;;;;;;;:::i;71808:86::-;-1:-1:-1;;;;;72002:34:28;;;;;;:24;;;:34;;;;;;;;71997:72;;72052:7;71654:898;;;:::o;71997:72::-;72118:22;72131:8;72118:12;:22::i;:::-;72242:40;72285:168;72332:8;72361:6;72382:12;72408:1;72423:20;72285:33;:168::i;:::-;72467:18;;;;72242:211;;-1:-1:-1;72467:22:28;72463:83;;72512:23;;-1:-1:-1;;;72512:23:28;;;;;;;;;;;1798:153:0;1887:13;1880:20;;-1:-1:-1;;;;;;1880:20:0;;;1910:34;1935:8;1910:24;:34::i;1087:279:34:-;1164:13;;1156:5;:21;1148:68;;;;-1:-1:-1;;;1148:68:34;;;;;;;:::i;:::-;1254:13;;;1277:21;;;;1314:45;;;;;;1254:13;;1293:5;;1314:45;:::i;3389:160:32:-;-1:-1:-1;;;;;;;;;;;;3483:59:32;;;;;;;;287:4:40;3499:28:32;3504:1;:10;;;3516:1;:10;;;3499:4;:28::i;:::-;:40;;;;:::i;:::-;3483:59;;3476:66;3389:160;-1:-1:-1;;;3389:160:32:o;4402:165::-;-1:-1:-1;;;;;;;;;;;;4496:64:32;;;;;;;;4512:45;4517:27;4522:1;:10;;;287:4:40;4517::32;:27::i;:::-;4546:10;;4512:4;:45::i;1743:214::-;1847:7;1866:18;1887:15;1892:1;1895:6;1887:4;:15::i;:::-;1866:36;;1919:31;1924:17;1933:7;1924:8;:17::i;:::-;1943:6;1919:4;:31::i;:::-;1912:38;1743:214;-1:-1:-1;;;;;1743:214:32:o;69303:946:28:-;69377:60;69408:6;69417:19;69377:22;:60::i;:::-;-1:-1:-1;;;;;69477:24:28;;69447:27;69477:24;;;:7;:24;;;;;69517:21;;;;69512:92;;69585:6;69561:32;;-1:-1:-1;;;69561:32:28;;;;;;;;:::i;69512:92::-;-1:-1:-1;;;;;69618:40:28;;;;;;:30;;;:40;;;;;;;;69614:107;;;69704:7;69303:946;;:::o;69614:107::-;-1:-1:-1;;;;;70102:40:28;;;;;;;:30;;;:40;;;;;;;;:47;;-1:-1:-1;;70102:47:28;70145:4;70102:47;;;;;;70159:13;:23;;;;;:36;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;70159:36:28;;;;;;;70211:31;70102:40;;70159:36;70211:31;;70102:40;70211:31;69367:882;69303:946;;:::o;77312:300::-;77431:6;;:41;;-1:-1:-1;;;77431:41:28;;77382:7;;;;-1:-1:-1;;;;;77431:6:28;;;;:25;;:41;;77465:5;;77431:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;77401:71;;77486:19;77509:1;77486:24;77482:88;;77552:5;77533:26;;-1:-1:-1;;;77533:26:28;;;;;;;;:::i;79318:188::-;79394:10;-1:-1:-1;;;;;79394:28:28;;;79390:110;;79462:14;79478:10;79445:44;;-1:-1:-1;;;79445:44:28;;;;;;;;;:::i;70431:401::-;70509:10;:17;70486:20;70537:167;70557:12;70553:1;:16;70537:167;;;70618:6;-1:-1:-1;;;;;70594:31:28;:10;70605:1;70594:13;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;70594:13:28;:31;70590:104;;70672:6;70652:27;;-1:-1:-1;;;70652:27:28;;;;;;;;:::i;70590:104::-;70571:3;;70537:167;;;-1:-1:-1;;70713:10:28;:31;;;;;;;-1:-1:-1;70713:31:28;;;;;;;-1:-1:-1;;;;;;70713:31:28;-1:-1:-1;;;;;70713:31:28;;;;;70769:17;70796:29;70769:17;70796:15;:29::i;889:100:0:-;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;956:26:0::1;:24;:26::i;1619:164:26:-:0;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;3555:136:32:-;-1:-1:-1;;;;;;;;;;;;3646:38:32;;;;;;;;3662:19;3667:1;:10;;;3679:1;3662:4;:19::i;998:214::-;1181:12;;1055:7;;1181:24;;287:4:40;;1181:24:32;:::i;2687:187:1:-;2779:6;;;-1:-1:-1;;;;;2795:17:1;;;-1:-1:-1;;;;;;2795:17:1;;;;;;;2827:40;;2779:6;;;2795:17;2779:6;;2827:40;;2760:16;;2827:40;2750:124;2687:187;:::o;4299:97:32:-;4358:7;4384:5;4388:1;4384;:5;:::i;5332:97::-;5391:7;5417:5;5421:1;5417;:5;:::i;2863:97::-;2922:7;2948:5;2952:1;2948;:5;:::i;1125:111:1:-;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;1197:32:1::1;965:10:12::0;1197:18:1::1;:32::i;103:109:69:-:0;77:13;;70:21;184;179:3;172:34;103:109;;:::o;218:210::-;343:2;328:18;;356:65;332:9;394:6;356:65;:::i;893:96::-;930:7;-1:-1:-1;;;;;827:54:69;;959:24;761:126;995:122;1068:24;1086:5;1068:24;:::i;:::-;1061:5;1058:35;1048:63;;1107:1;1104;1097:12;1123:139;1194:20;;1223:33;1194:20;1223:33;:::i;1268:329::-;1327:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:119;;;1382:79;3223:76619:28;;;1382:79:69;1502:1;1527:53;1572:7;1552:9;1527:53;:::i;1686:118::-;1791:5;1773:24;1603:77;1810:222;1941:2;1926:18;;1954:71;1930:9;1998:6;1954:71;:::i;2038:474::-;2106:6;2114;2163:2;2151:9;2142:7;2138:23;2134:32;2131:119;;;2169:79;3223:76619:28;;;2169:79:69;2289:1;2314:53;2359:7;2339:9;2314:53;:::i;:::-;2304:63;;2260:117;2416:2;2442:53;2487:7;2478:6;2467:9;2463:22;2442:53;:::i;:::-;2432:63;;2387:118;2038:474;;;;;:::o;2518:122::-;2609:5;2591:24;1603:77;2646:139;2717:20;;2746:33;2717:20;2746:33;:::i;2791:329::-;2850:6;2899:2;2887:9;2878:7;2874:23;2870:32;2867:119;;;2905:79;3223:76619:28;;;2905:79:69;3025:1;3050:53;3095:7;3075:9;3050:53;:::i;3520:584::-;3609:8;3619:6;3669:3;3662:4;3654:6;3650:17;3646:27;3636:122;;3677:79;3223:76619:28;;;3677:79:69;-1:-1:-1;3777:20:69;;-1:-1:-1;;;;;3809:30:69;;3806:117;;;3842:79;3223:76619:28;;;3842:79:69;3956:4;3948:6;3944:17;3932:29;;4010:3;4002:4;3994:6;3990:17;3980:8;3976:32;3973:41;3970:128;;;4017:79;3223:76619:28;;;4017:79:69;3520:584;;;;;:::o;4701:966::-;4839:6;4847;4855;4863;4912:2;4900:9;4891:7;4887:23;4883:32;4880:119;;;4918:79;3223:76619:28;;;4918:79:69;5038:31;;-1:-1:-1;;;;;5085:30:69;;5082:117;;;5118:79;3223:76619:28;;;5118:79:69;5231:96;5319:7;5310:6;5299:9;5295:22;5231:96;:::i;:::-;5213:114;;;;5009:328;5404:2;5393:9;5389:18;5376:32;-1:-1:-1;;;;;5427:6:69;5424:30;5421:117;;;5457:79;3223:76619:28;;;5457:79:69;5570:80;5642:7;5633:6;5622:9;5618:22;5570:80;:::i;:::-;4701:966;;;;-1:-1:-1;5552:98:69;-1:-1:-1;;;;4701:966:69:o;5673:765::-;5759:6;5767;5775;5783;5832:3;5820:9;5811:7;5807:23;5803:33;5800:120;;;5839:79;3223:76619:28;;;5839:79:69;5959:1;5984:53;6029:7;6009:9;5984:53;:::i;:::-;5974:63;;5930:117;6086:2;6112:53;6157:7;6148:6;6137:9;6133:22;6112:53;:::i;:::-;6102:63;;6057:118;6214:2;6240:53;6285:7;6276:6;6265:9;6261:22;6240:53;:::i;:::-;6230:63;;6185:118;6342:2;6368:53;6413:7;6404:6;6393:9;6389:22;6368:53;:::i;:::-;6358:63;;6313:118;5673:765;;;;;;;:::o;6444:911::-;6539:6;6547;6555;6563;6571;6620:3;6608:9;6599:7;6595:23;6591:33;6588:120;;;6627:79;3223:76619:28;;;6627:79:69;6747:1;6772:53;6817:7;6797:9;6772:53;:::i;:::-;6762:63;;6718:117;6874:2;6900:53;6945:7;6936:6;6925:9;6921:22;6900:53;:::i;:::-;6890:63;;6845:118;7002:2;7028:53;7073:7;7064:6;7053:9;7049:22;7028:53;:::i;:::-;7018:63;;6973:118;7130:2;7156:53;7201:7;7192:6;7181:9;7177:22;7156:53;:::i;:::-;7146:63;;7101:118;7258:3;7285:53;7330:7;7321:6;7310:9;7306:22;7285:53;:::i;:::-;7275:63;;7229:119;6444:911;;;;;;;;:::o;7967:116::-;77:13;;70:21;8037;7:90;8089:133;8157:20;;8186:30;8157:20;8186:30;:::i;8228:1127::-;8383:6;8391;8399;8407;8415;8464:2;8452:9;8443:7;8439:23;8435:32;8432:119;;;8470:79;3223:76619:28;;;8470:79:69;8590:31;;-1:-1:-1;;;;;8637:30:69;;8634:117;;;8670:79;3223:76619:28;;;8670:79:69;8783:96;8871:7;8862:6;8851:9;8847:22;8783:96;:::i;:::-;8765:114;;;;8561:328;8956:2;8945:9;8941:18;8928:32;-1:-1:-1;;;;;8979:6:69;8976:30;8973:117;;;9009:79;3223:76619:28;;;9009:79:69;9122:91;9205:7;9196:6;9185:9;9181:22;9122:91;:::i;:::-;9104:109;;;;8899:324;9262:2;9288:50;9330:7;9321:6;9310:9;9306:22;9288:50;:::i;9413:604::-;9522:8;9532:6;9582:3;9575:4;9567:6;9563:17;9559:27;9549:122;;9590:79;3223:76619:28;;;9590:79:69;-1:-1:-1;9690:20:69;;-1:-1:-1;;;;;9722:30:69;;9719:117;;;9755:79;3223:76619:28;;;9755:79:69;9869:4;9861:6;9857:17;9845:29;;9923:3;9915:4;9907:6;9903:17;9893:8;9889:32;9886:41;9883:128;;;9930:79;3223:76619:28;;;10023:776:69;10154:6;10162;10170;10219:2;10207:9;10198:7;10194:23;10190:32;10187:119;;;10225:79;3223:76619:28;;;10225:79:69;10345:1;10370:53;10415:7;10395:9;10370:53;:::i;:::-;10360:63;;10316:117;10500:2;10489:9;10485:18;10472:32;-1:-1:-1;;;;;10523:6:69;10520:30;10517:117;;;10553:79;3223:76619:28;;;10553:79:69;10666:116;10774:7;10765:6;10754:9;10750:22;10666:116;:::i;:::-;10648:134;;;;10443:349;10023:776;;;;;:::o;10805:112::-;10858:7;10887:24;10905:5;10887:24;:::i;10923:154::-;11012:40;11046:5;11012:40;:::i;11083:171::-;11170:20;;11199:49;11170:20;11199:49;:::i;11260:361::-;11335:6;11384:2;11372:9;11363:7;11359:23;11355:32;11352:119;;;11390:79;3223:76619:28;;;11390:79:69;11510:1;11535:69;11596:7;11576:9;11535:69;:::i;11627:765::-;11713:6;11721;11729;11737;11786:3;11774:9;11765:7;11761:23;11757:33;11754:120;;;11793:79;3223:76619:28;;;11793:79:69;11913:1;11938:53;11983:7;11963:9;11938:53;:::i;:::-;11928:63;;11884:117;12040:2;12066:53;12111:7;12102:6;12091:9;12087:22;12066:53;:::i;:::-;12056:63;;12011:118;12168:2;12194:53;12239:7;12230:6;12219:9;12215:22;12194:53;:::i;:::-;12184:63;;12139:118;12296:2;12322:53;12367:7;12358:6;12347:9;12343:22;12322:53;:::i;12398:1057::-;12502:6;12510;12518;12526;12534;12542;12591:3;12579:9;12570:7;12566:23;12562:33;12559:120;;;12598:79;3223:76619:28;;;12598:79:69;12718:1;12743:53;12788:7;12768:9;12743:53;:::i;:::-;12733:63;;12689:117;12845:2;12871:53;12916:7;12907:6;12896:9;12892:22;12871:53;:::i;:::-;12861:63;;12816:118;12973:2;12999:53;13044:7;13035:6;13024:9;13020:22;12999:53;:::i;:::-;12989:63;;12944:118;13101:2;13127:53;13172:7;13163:6;13152:9;13148:22;13127:53;:::i;:::-;13117:63;;13072:118;13229:3;13256:53;13301:7;13292:6;13281:9;13277:22;13256:53;:::i;:::-;13246:63;;13200:119;13358:3;13385:53;13430:7;13421:6;13410:9;13406:22;13385:53;:::i;:::-;13375:63;;13329:119;12398:1057;;;;;;;;:::o;13461:442::-;13648:2;13633:18;;13661:71;13637:9;13705:6;13661:71;:::i;:::-;13742:72;13810:2;13799:9;13795:18;13786:6;13742:72;:::i;:::-;13824;13892:2;13881:9;13877:18;13868:6;13824:72;:::i;14255:142::-;14321:9;14354:37;14385:5;14354:37;:::i;14403:163::-;14506:53;14553:5;14506:53;:::i;14572:254::-;14719:2;14704:18;;14732:87;14708:9;14792:6;14732:87;:::i;16686:619::-;16763:6;16771;16779;16828:2;16816:9;16807:7;16803:23;16799:32;16796:119;;;16834:79;3223:76619:28;;;16834:79:69;16954:1;16979:53;17024:7;17004:9;16979:53;:::i;:::-;16969:63;;16925:117;17081:2;17107:53;17152:7;17143:6;17132:9;17128:22;17107:53;:::i;:::-;17097:63;;17052:118;17209:2;17235:53;17280:7;17271:6;17260:9;17256:22;17235:53;:::i;:::-;17225:63;;17180:118;16686:619;;;;;:::o;17311:651::-;17404:6;17412;17420;17469:2;17457:9;17448:7;17444:23;17440:32;17437:119;;;17475:79;3223:76619:28;;;17475:79:69;17595:1;17620:69;17681:7;17661:9;17620:69;:::i;:::-;17610:79;;17566:133;17738:2;17764:53;17809:7;17800:6;17789:9;17785:22;17764:53;:::i;18815:235::-;18912:10;18933:74;19003:3;18995:6;18933:74;:::i;:::-;-1:-1:-1;;19039:4:69;19030:14;;18815:235::o;19253:872::-;19400:3;19429:82;19505:5;18091:12;;17968:142;19429:82;18237:19;;;18289:4;18280:14;;;;18445;;;19775:1;19760:340;19785:6;19782:1;19779:13;19760:340;;;19861:6;19855:13;19888:91;19975:3;19960:13;19888:91;:::i;:::-;19881:98;-1:-1:-1;19186:4:69;19177:14;;19992:98;-1:-1:-1;;19807:1:69;19800:9;19760:340;;;-1:-1:-1;20116:3:69;;19253:872;-1:-1:-1;;;;;19253:872:69:o;20131:429::-;20340:2;20353:47;;;20325:18;;20417:136;20325:18;20539:6;20417:136;:::i;20566:765::-;20652:6;20660;20668;20676;20725:3;20713:9;20704:7;20700:23;20696:33;20693:120;;;20732:79;3223:76619:28;;;20732:79:69;20852:1;20877:53;20922:7;20902:9;20877:53;:::i;:::-;20867:63;;20823:117;20979:2;21005:53;21050:7;21041:6;21030:9;21026:22;21005:53;:::i;:::-;20995:63;;20950:118;21107:2;21133:53;21178:7;21169:6;21158:9;21154:22;21133:53;:::i;21337:911::-;21432:6;21440;21448;21456;21464;21513:3;21501:9;21492:7;21488:23;21484:33;21481:120;;;21520:79;3223:76619:28;;;21520:79:69;21640:1;21665:53;21710:7;21690:9;21665:53;:::i;:::-;21655:63;;21611:117;21767:2;21793:53;21838:7;21829:6;21818:9;21814:22;21793:53;:::i;:::-;21783:63;;21738:118;21895:2;21921:53;21966:7;21957:6;21946:9;21942:22;21921:53;:::i;:::-;21911:63;;21866:118;22023:2;22049:53;22094:7;22085:6;22074:9;22070:22;22049:53;:::i;22921:468::-;22986:6;22994;23043:2;23031:9;23022:7;23018:23;23014:32;23011:119;;;23049:79;3223:76619:28;;;23049:79:69;23169:1;23194:53;23239:7;23219:9;23194:53;:::i;:::-;23184:63;;23140:117;23296:2;23322:50;23364:7;23355:6;23344:9;23340:22;23322:50;:::i;23395:118::-;23482:24;23500:5;23482:24;:::i;23519:222::-;23650:2;23635:18;;23663:71;23639:9;23707:6;23663:71;:::i;23747:430::-;23928:2;23913:18;;23941:65;23917:9;23979:6;23941:65;:::i;24183:506::-;24267:6;24275;24324:2;24312:9;24303:7;24299:23;24295:32;24292:119;;;24330:79;3223:76619:28;;;24330:79:69;24450:1;24475:53;24520:7;24500:9;24475:53;:::i;:::-;24465:63;;24421:117;24577:2;24603:69;24664:7;24655:6;24644:9;24640:22;24603:69;:::i;25534:812::-;25669:3;25698:70;25762:5;18091:12;;17968:142;25698:70;18237:19;;;18289:4;18280:14;;;;18445;;;26020:1;26005:316;26030:6;26027:1;26024:13;26005:316;;;26106:6;26100:13;26133:79;26208:3;26193:13;26133:79;:::i;:::-;26126:86;-1:-1:-1;19186:4:69;19177:14;;26225:86;-1:-1:-1;;26052:1:69;26045:9;26005:316;;26352:405;26549:2;26562:47;;;26534:18;;26626:124;26534:18;26736:6;26626:124;:::i;27617:702::-;27841:23;;27764:4;27755:14;;;27877:63;27759:3;27841:23;27877:63;:::i;:::-;27779:171;28039:4;28032:5;28028:16;28022:23;28058:63;28115:4;28110:3;28106:14;28092:12;28058:63;:::i;:::-;27960:171;28220:4;28213:5;28209:16;28203:23;28239:63;28296:4;28291:3;28287:14;28273:12;28239:63;:::i;28325:299::-;28454:10;28475:106;28577:3;28569:6;28475:106;:::i;:::-;-1:-1:-1;;28613:4:69;28604:14;;28325:299::o;28871:972::-;29050:3;29079:84;29157:5;18091:12;;17968:142;29079:84;18237:19;;;18289:4;18280:14;;;;18445;;;29459:1;29444:374;29469:6;29466:1;29463:13;29444:374;;;29545:6;29539:13;29572:123;29691:3;29676:13;29572:123;:::i;:::-;29565:130;-1:-1:-1;19186:4:69;19177:14;;29708:100;-1:-1:-1;;29491:1:69;29484:9;29444:374;;29849:493;30090:2;30103:47;;;30075:18;;30167:168;30075:18;30321:6;30167:168;:::i;31113:180::-;-1:-1:-1;;;31158:1:69;31151:88;31258:4;31255:1;31248:15;31282:4;31279:1;31272:15;31299:281;-1:-1:-1;;31097:2:69;31077:14;;31073:28;31374:6;31370:40;31512:6;31500:10;31497:22;-1:-1:-1;;;;;31464:10:69;31461:34;31458:62;31455:88;;;31523:18;;:::i;:::-;31559:2;31552:22;-1:-1:-1;;31299:281:69:o;31586:129::-;31620:6;31647:20;500:2;494:9;;434:75;31647:20;31637:30;;31676:33;31704:4;31696:6;31676:33;:::i;:::-;31586:129;;;:::o;31721:311::-;31798:4;-1:-1:-1;;;;;31880:6:69;31877:30;31874:56;;;31910:18;;:::i;:::-;-1:-1:-1;31960:4:69;31948:17;;;32010:15;;31721:311::o;32055:710::-;32151:5;32176:81;32192:64;32249:6;32192:64;:::i;:::-;32176:81;:::i;:::-;32292:21;;;32167:90;-1:-1:-1;32340:4:69;32329:16;;;;32381:17;;32369:30;;32411:15;;;32408:122;;;32441:79;3223:76619:28;;;32441:79:69;32556:6;32539:220;32573:6;32568:3;32565:15;32539:220;;;32648:3;32677:37;32710:3;32698:10;32677:37;:::i;:::-;32665:50;;-1:-1:-1;32744:4:69;32735:14;;;;32590;32539:220;;;32543:21;32157:608;;32055:710;;;;;:::o;32788:370::-;32859:5;32908:3;32901:4;32893:6;32889:17;32885:27;32875:122;;32916:79;3223:76619:28;;;32916:79:69;33033:6;33020:20;33058:94;33148:3;33140:6;33133:4;33125:6;33121:17;33058:94;:::i;33164:539::-;33248:6;33297:2;33285:9;33276:7;33272:23;33268:32;33265:119;;;33303:79;3223:76619:28;;;33303:79:69;33423:31;;-1:-1:-1;;;;;33470:30:69;;33467:117;;;33503:79;3223:76619:28;;;33503:79:69;33608:78;33678:7;33669:6;33658:9;33654:22;33608:78;:::i;34157:179::-;34226:10;34247:46;34289:3;34281:6;34247:46;:::i;34491:732::-;34610:3;34639:54;34687:5;18091:12;;17968:142;34639:54;18237:19;;;18289:4;18280:14;;;;18445;;;34929:1;34914:284;34939:6;34936:1;34933:13;34914:284;;;35015:6;35009:13;35042:63;35101:3;35086:13;35042:63;:::i;:::-;35035:70;-1:-1:-1;19186:4:69;19177:14;;35118:70;-1:-1:-1;;34961:1:69;34954:9;34914:284;;35229:373;35410:2;35423:47;;;35395:18;;35487:108;35395:18;35581:6;35487:108;:::i;36430:332::-;36589:2;36574:18;;36602:71;36578:9;36646:6;36602:71;:::i;:::-;36683:72;36751:2;36740:9;36736:18;36727:6;36683:72;:::i;37345:474::-;37413:6;37421;37470:2;37458:9;37449:7;37445:23;37441:32;37438:119;;;37476:79;3223:76619:28;;;37476:79:69;37596:1;37621:53;37666:7;37646:9;37621:53;:::i;37825:474::-;37893:6;37901;37950:2;37938:9;37929:7;37925:23;37921:32;37918:119;;;37956:79;3223:76619:28;;;37956:79:69;38076:1;38101:53;38146:7;38126:9;38101:53;:::i;:::-;38091:63;;38047:117;38203:2;38229:53;38274:7;38265:6;38254:9;38250:22;38229:53;:::i;38305:110::-;38389:1;38382:5;38379:12;38369:40;;38405:1;38402;38395:12;38421:161;38503:20;;38532:44;38503:20;38532:44;:::i;38588:496::-;38667:6;38675;38724:2;38712:9;38703:7;38699:23;38695:32;38692:119;;;38730:79;3223:76619:28;;;38730:79:69;38850:1;38875:53;38920:7;38900:9;38875:53;:::i;:::-;38865:63;;38821:117;38977:2;39003:64;39059:7;39050:6;39039:9;39035:22;39003:64;:::i;39090:905::-;39182:6;39190;39198;39206;39214;39263:3;39251:9;39242:7;39238:23;39234:33;39231:120;;;39270:79;3223:76619:28;;;39270:79:69;39390:1;39415:53;39460:7;39440:9;39415:53;:::i;:::-;39405:63;;39361:117;39517:2;39543:53;39588:7;39579:6;39568:9;39564:22;39543:53;:::i;:::-;39533:63;;39488:118;39645:2;39671:53;39716:7;39707:6;39696:9;39692:22;39671:53;:::i;:::-;39661:63;;39616:118;39773:2;39799:53;39844:7;39835:6;39824:9;39820:22;39799:53;:::i;:::-;39789:63;;39744:118;39901:3;39928:50;39970:7;39961:6;39950:9;39946:22;39928:50;:::i;40415:366::-;40642:2;18237:19;;40557:3;18289:4;18280:14;;40316:34;40293:58;;-1:-1:-1;;;40380:2:69;40368:15;;40361:41;40571:74;-1:-1:-1;40654:93:69;-1:-1:-1;40772:2:69;40763:12;;40415:366::o;40787:419::-;40991:2;41004:47;;;40976:18;;41068:131;40976:18;41068:131;:::i;41451:366::-;41678:2;18237:19;;41593:3;18289:4;18280:14;;41352:34;41329:58;;-1:-1:-1;;;41416:2:69;41404:15;;41397:41;41607:74;-1:-1:-1;41690:93:69;41212:233;41823:419;42027:2;42040:47;;;42012:18;;42104:131;42012:18;42104:131;:::i;42417:366::-;42644:2;18237:19;;42559:3;18289:4;18280:14;;-1:-1:-1;;;42365:39:69;;42573:74;-1:-1:-1;42656:93:69;-1:-1:-1;42774:2:69;42765:12;;42417:366::o;42789:419::-;42993:2;43006:47;;;42978:18;;43070:131;42978:18;43070:131;:::i;43214:180::-;-1:-1:-1;;;43259:1:69;43252:88;43359:4;43356:1;43349:15;43383:4;43380:1;43373:15;43717:201;43828:13;;43850:62;43828:13;43850:62;:::i;43924:409::-;44023:6;44072:2;44060:9;44051:7;44047:23;44043:32;44040:119;;;44078:79;3223:76619:28;;;44078:79:69;44198:1;44223:93;44308:7;44288:9;44223:93;:::i;44339:332::-;44498:2;44483:18;;44511:71;44487:9;44555:6;44511:71;:::i;:::-;44592:72;44660:2;44649:9;44645:18;44636:6;44592:72;:::i;44677:180::-;-1:-1:-1;;;44722:1:69;44715:88;44822:4;44819:1;44812:15;44846:4;44843:1;44836:15;44863:410;45008:9;;;;45170;;45203:15;;;45197:22;;45150:83;45127:139;;45246:18;;:::i;:::-;44911:362;44863:410;;;;:::o;45279:351::-;45349:6;45398:2;45386:9;45377:7;45373:23;45369:32;45366:119;;;45404:79;3223:76619:28;;;45404:79:69;45524:1;45549:64;45605:7;45585:9;45549:64;:::i;45636:180::-;-1:-1:-1;;;45681:1:69;45674:88;45781:4;45778:1;45771:15;45805:4;45802:1;45795:15;45822:185;45862:1;45952;45942:35;;45957:18;;:::i;:::-;-1:-1:-1;45992:9:69;;45822:185::o;46013:684::-;46266:3;46251:19;;46280:71;46255:9;46324:6;46280:71;:::i;:::-;46361:72;46429:2;46418:9;46414:18;46405:6;46361:72;:::i;:::-;46443;46511:2;46500:9;46496:18;46487:6;46443:72;:::i;:::-;46525:88;46609:2;46598:9;46594:18;46585:6;46525:88;:::i;:::-;46623:67;46685:3;46674:9;46670:19;46661:6;46623:67;:::i;:::-;46013:684;;;;;;;;:::o;46936:366::-;47163:2;18237:19;;47078:3;18289:4;18280:14;;46843:34;46820:58;;-1:-1:-1;;;46907:2:69;46895:15;;46888:35;47092:74;-1:-1:-1;47175:93:69;46703:227;47308:419;47512:2;47525:47;;;47497:18;;47589:131;47497:18;47589:131;:::i;47733:468::-;47960:2;47945:18;;47973:105;47949:9;48051:6;47973:105;:::i;:::-;48088:106;48190:2;48179:9;48175:18;48166:6;48088:106;:::i;48377:366::-;48604:2;18237:19;;48519:3;18289:4;18280:14;;-1:-1:-1;;;48324:40:69;;48533:74;-1:-1:-1;48616:93:69;48207:164;48749:419;48953:2;48966:47;;;48938:18;;49030:131;48938:18;49030:131;:::i;49174:191::-;49303:9;;;49325:10;;;49322:36;;;49338:18;;:::i;50289:143::-;50371:13;;50393:33;50371:13;50393:33;:::i;50438:351::-;50508:6;50557:2;50545:9;50536:7;50532:23;50528:32;50525:119;;;50563:79;3223:76619:28;;;50563:79:69;50683:1;50708:64;50764:7;50744:9;50708:64;:::i;50795:474::-;50998:2;50983:18;;51011:87;50987:9;51071:6;51011:87;:::i;51509:366::-;51736:2;18237:19;;51651:3;18289:4;18280:14;;51415:34;51392:58;;-1:-1:-1;;;51479:2:69;51467:15;;51460:36;51665:74;-1:-1:-1;51748:93:69;51275:228;51881:419;52085:2;52098:47;;;52070:18;;52162:131;52070:18;52162:131;:::i;52306:442::-;52493:2;52478:18;;52506:71;52482:9;52550:6;52506:71;:::i;:::-;52587:72;52655:2;52644:9;52640:18;52631:6;52587:72;:::i;52996:366::-;53223:2;18237:19;;53138:3;18289:4;18280:14;;52894:34;52871:58;;-1:-1:-1;;;52958:2:69;52946:15;;52939:44;53152:74;-1:-1:-1;53235:93:69;52754:236;53368:419;53572:2;53585:47;;;53557:18;;53649:131;53557:18;53649:131;:::i;53793:233::-;53832:3;-1:-1:-1;;53894:5:69;53891:77;53888:103;;53971:18;;:::i;:::-;-1:-1:-1;54018:1:69;54007:13;;53793:233::o;54032:332::-;54191:2;54176:18;;54204:71;54180:9;54248:6;54204:71;:::i;54772:137::-;54851:13;;54873:30;54851:13;54873:30;:::i;54915:345::-;54982:6;55031:2;55019:9;55010:7;55006:23;55002:32;54999:119;;;55037:79;3223:76619:28;;;55037:79:69;55157:1;55182:61;55235:7;55215:9;55182:61;:::i;55449:366::-;55676:2;18237:19;;55591:3;18289:4;18280:14;;55406:29;55383:53;;55605:74;-1:-1:-1;55688:93:69;55266:177;55821:419;56025:2;56038:47;;;56010:18;;56102:131;56010:18;56102:131;:::i;56427:366::-;56654:2;18237:19;;56569:3;18289:4;18280:14;;56386:27;56363:51;;56583:74;-1:-1:-1;56666:93:69;56246:175;56799:419;57003:2;57016:47;;;56988:18;;57080:131;56988:18;57080:131;:::i;57463:366::-;57690:2;18237:19;;57605:3;18289:4;18280:14;;57364:34;57341:58;;-1:-1:-1;;;57428:2:69;57416:15;;57409:41;57619:74;-1:-1:-1;57702:93:69;57224:233;57835:419;58039:2;58052:47;;;58024:18;;58116:131;58024:18;58116:131;:::i;58443:154::-;58499:9;58426:4;58415:16;;58532:59;58351:86;58603:143;58696:43;58733:5;58696:43;:::i;58752:234::-;58889:2;58874:18;;58902:77;58878:9;58952:6;58902:77;:::i;59062:329::-;59275:23;;59201:4;59192:14;;;59311:63;59196:3;59275:23;59311:63;:::i;59397:416::-;59598:2;59583:18;;59611:71;59587:9;59655:6;59611:71;:::i;:::-;59692:114;59802:2;59791:9;59787:18;59778:6;59692:114;:::i;59819:526::-;60048:2;60033:18;;60061:71;60037:9;60105:6;60061:71;:::i;:::-;60142:72;60210:2;60199:9;60195:18;60186:6;60142:72;:::i;:::-;60224:114;60334:2;60323:9;60319:18;60310:6;60224:114;:::i;60351:180::-;-1:-1:-1;;;60396:1:69;60389:88;60496:4;60493:1;60486:15;60520:4;60517:1;60510:15;60537:180;-1:-1:-1;;;60582:1:69;60575:88;60682:4;60679:1;60672:15;60706:4;60703:1;60696:15;60723:194;60854:9;;;60876:11;;;60873:37;;;60890:18;;:::i;60923:180::-;-1:-1:-1;;;60968:1:69;60961:88;61068:4;61065:1;61058:15;61092:4;61089:1;61082:15;61214:248;61296:1;61306:113;61320:6;61317:1;61314:13;61306:113;;;61396:11;;;61390:18;61377:11;;;61370:39;61342:2;61335:10;61306:113;;;-1:-1:-1;;61453:1:69;61435:16;;61428:27;61214:248::o;61468:377::-;61556:3;61584:39;61617:5;18091:12;;17968:142;61584:39;18237:19;;;18289:4;18280:14;;61632:78;;61719:65;61777:6;61772:3;61765:4;61758:5;61754:16;61719:65;:::i;:::-;31097:2;31077:14;-1:-1:-1;;31073:28:69;61800:39;;;;;;-1:-1:-1;;61468:377:69:o;61851:423::-;62030:2;62015:18;;62043:71;62019:9;62087:6;62043:71;:::i;:::-;62161:9;62155:4;62151:20;62146:2;62135:9;62131:18;62124:48;62189:78;62262:4;62253:6;62189:78;:::i;62280:533::-;62487:2;62472:18;;62500:71;62476:9;62544:6;62500:71;:::i;:::-;62581:72;62649:2;62638:9;62634:18;62625:6;62581:72;:::i;:::-;62700:9;62694:4;62690:20;62685:2;62674:9;62670:18;62663:48;62728:78;62801:4;62792:6;62728:78;:::i;63007:366::-;63234:2;18237:19;;;62959:34;18280:14;;62936:58;;;63149:3;63246:93;62819:182;63379:419;63583:2;63596:47;;;63568:18;;63660:131;63568:18;63660:131;:::i;64034:366::-;64261:2;18237:19;;64176:3;18289:4;18280:14;;63944:34;63921:58;;-1:-1:-1;;;64008:2:69;63996:15;;63989:32;64190:74;-1:-1:-1;64273:93:69;63804:224;64406:419;64610:2;64623:47;;;64595:18;;64687:131;64595:18;64687:131;:::i;64831:116::-;64915:1;64908:5;64905:12;64895:46;;64921:18;;:::i;64953:133::-;65030:5;65036:44;65030:5;65036:44;:::i;65092:133::-;65151:9;65184:35;65213:5;65184:35;:::i;65231:149::-;65327:46;65367:5;65327:46;:::i;65386:350::-;65554:2;65539:18;;65567:71;65543:9;65611:6;65567:71;:::i;:::-;65648:81;65725:2;65714:9;65710:18;65701:6;65648:81;:::i;65975:366::-;66202:2;18237:19;;66117:3;18289:4;18280:14;;65882:34;65859:58;;-1:-1:-1;;;65946:2:69;65934:15;;65927:35;66131:74;-1:-1:-1;66214:93:69;65742:227;66347:419;66551:2;66564:47;;;66536:18;;66628:131;66536:18;66628:131;:::i;66772:480::-;66978:2;66963:18;;66991:87;66967:9;67051:6;66991:87;:::i;:::-;67088:81;67165:2;67154:9;67150:18;67141:6;67088:81;:::i;:::-;67179:66;67241:2;67230:9;67226:18;67217:6;67179:66;:::i;67258:820::-;67355:6;67363;67371;67379;67428:3;67416:9;67407:7;67403:23;67399:33;67396:120;;;67435:79;3223:76619:28;;;67435:79:69;67555:1;67580:64;67636:7;67616:9;67580:64;:::i;:::-;67570:74;;67526:128;67693:2;67719:64;67775:7;67766:6;67755:9;67751:22;67719:64;:::i;:::-;67709:74;;67664:129;67832:2;67858:64;67914:7;67905:6;67894:9;67890:22;67858:64;:::i;:::-;67848:74;;67803:129;67971:2;67997:64;68053:7;68044:6;68033:9;68029:22;67997:64;:::i;68311:366::-;68538:2;18237:19;;68453:3;18289:4;18280:14;;68224:34;68201:58;;-1:-1:-1;;;68288:2:69;68276:15;;68269:29;68467:74;-1:-1:-1;68550:93:69;68084:221;68683:419;68887:2;68900:47;;;68872:18;;68964:131;68872:18;68964:131;:::i;69344:366::-;69571:2;18237:19;;69486:3;18289:4;18280:14;;69248:34;69225:58;;-1:-1:-1;;;69312:2:69;69300:15;;69293:38;69500:74;-1:-1:-1;69583:93:69;69108:230;69716:419;69920:2;69933:47;;;69905:18;;69997:131;69905:18;69997:131;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"4985800","executionCost":"infinite","totalCost":"infinite"},"external":{"acceptOwnership()":"infinite","accessControlManager()":"infinite","accountAssets(address,uint256)":"infinite","actionPaused(address,uint8)":"infinite","addRewardsDistributor(address)":"infinite","allMarkets(uint256)":"infinite","approvedDelegates(address,address)":"infinite","borrowCaps(address)":"infinite","borrowVerify(address,address,uint256)":"infinite","checkMembership(address,address)":"infinite","closeFactorMantissa()":"2438","enterMarkets(address[])":"infinite","exitMarket(address)":"infinite","getAccountLiquidity(address)":"infinite","getAllMarkets()":"infinite","getAssetsIn(address)":"infinite","getBorrowingPower(address)":"infinite","getHypotheticalAccountLiquidity(address,address,uint256,uint256)":"infinite","getRewardDistributors()":"infinite","getRewardsByMarket(address)":"infinite","healAccount(address)":"infinite","initialize(uint256,address)":"infinite","isComptroller()":"323","isForcedLiquidationEnabled(address)":"infinite","isMarketListed(address)":"infinite","liquidateAccount(address,(address,address,uint256)[])":"infinite","liquidateBorrowVerify(address,address,address,address,uint256,uint256)":"infinite","liquidateCalculateSeizeTokens(address,address,uint256)":"infinite","liquidationIncentiveMantissa()":"2506","markets(address)":"infinite","maxLoopsLimit()":"2483","minLiquidatableCollateral()":"2483","mintVerify(address,address,uint256,uint256)":"infinite","oracle()":"infinite","owner()":"infinite","pendingOwner()":"infinite","poolRegistry()":"infinite","preBorrowHook(address,address,uint256)":"infinite","preLiquidateHook(address,address,address,uint256,bool)":"infinite","preMintHook(address,address,uint256)":"infinite","preRedeemHook(address,address,uint256)":"infinite","preRepayHook(address,address)":"infinite","preSeizeHook(address,address,address,address)":"infinite","preTransferHook(address,address,address,uint256)":"infinite","prime()":"infinite","redeemVerify(address,address,uint256,uint256)":"infinite","renounceOwnership()":"infinite","repayBorrowVerify(address,address,address,uint256,uint256)":"infinite","seizeVerify(address,address,address,address,uint256)":"infinite","setAccessControlManager(address)":"infinite","setActionsPaused(address[],uint8[],bool)":"infinite","setCloseFactor(uint256)":"infinite","setCollateralFactor(address,uint256,uint256)":"infinite","setForcedLiquidation(address,bool)":"infinite","setLiquidationIncentive(uint256)":"infinite","setMarketBorrowCaps(address[],uint256[])":"infinite","setMarketSupplyCaps(address[],uint256[])":"infinite","setMaxLoopsLimit(uint256)":"infinite","setMinLiquidatableCollateral(uint256)":"infinite","setPriceOracle(address)":"infinite","setPrimeToken(address)":"infinite","supplyCaps(address)":"infinite","supportMarket(address)":"infinite","transferOwnership(address)":"infinite","transferVerify(address,address,address,uint256)":"infinite","unlistMarket(address)":"infinite","updateDelegate(address,bool)":"infinite","updatePrices(address)":"infinite"},"internal":{"_addMarket(address)":"infinite","_addToMarket(contract VToken,address)":"infinite","_checkActionPauseState(address,enum Action)":"infinite","_checkRedeemAllowed(address,address,uint256)":"infinite","_checkSenderIs(address)":"infinite","_getCollateralFactor(contract VToken)":"infinite","_getCurrentLiquiditySnapshot(address,function (contract VToken) view returns (struct ExponentialNoError.Exp memory))":"infinite","_getHypotheticalLiquiditySnapshot(address,contract VToken,uint256,uint256,function (contract VToken) view returns (struct ExponentialNoError.Exp memory))":"infinite","_getLiquidationThreshold(contract VToken)":"infinite","_safeGetAccountSnapshot(contract VToken,address)":"infinite","_safeGetUnderlyingPrice(contract VToken)":"infinite","_setActionPaused(address,enum Action,bool)":"infinite"}},"methodIdentifiers":{"acceptOwnership()":"79ba5097","accessControlManager()":"b4a0bdf3","accountAssets(address,uint256)":"dce15449","actionPaused(address,uint8)":"e85a2960","addRewardsDistributor(address)":"56aaee2d","allMarkets(uint256)":"52d84d1e","approvedDelegates(address,address)":"10b98338","borrowCaps(address)":"4a584432","borrowVerify(address,address,uint256)":"5c778605","checkMembership(address,address)":"929fe9a1","closeFactorMantissa()":"e8755446","enterMarkets(address[])":"c2998238","exitMarket(address)":"ede4edd0","getAccountLiquidity(address)":"5ec88c79","getAllMarkets()":"b0772d0b","getAssetsIn(address)":"abfceffc","getBorrowingPower(address)":"528a174c","getHypotheticalAccountLiquidity(address,address,uint256,uint256)":"4e79238f","getRewardDistributors()":"61252fd1","getRewardsByMarket(address)":"b2068e84","healAccount(address)":"92136395","initialize(uint256,address)":"da35a26f","isComptroller()":"007e3dd2","isForcedLiquidationEnabled(address)":"8c1ac18a","isMarketListed(address)":"3d98a1e5","liquidateAccount(address,(address,address,uint256)[])":"2bce219c","liquidateBorrowVerify(address,address,address,address,uint256,uint256)":"47ef3b3b","liquidateCalculateSeizeTokens(address,address,uint256)":"c488847b","liquidationIncentiveMantissa()":"4ada90af","markets(address)":"8e8f294b","maxLoopsLimit()":"be26317e","minLiquidatableCollateral()":"db5c65de","mintVerify(address,address,uint256,uint256)":"41c728b9","oracle()":"7dc0d1d0","owner()":"8da5cb5b","pendingOwner()":"e30c3978","poolRegistry()":"afcff50f","preBorrowHook(address,address,uint256)":"df71403b","preLiquidateHook(address,address,address,uint256,bool)":"e89d51ad","preMintHook(address,address,uint256)":"c0891ba9","preRedeemHook(address,address,uint256)":"8e6470ea","preRepayHook(address,address)":"eade3eed","preSeizeHook(address,address,address,address)":"1bc41f28","preTransferHook(address,address,address,uint256)":"6d0be88d","prime()":"c7ee005e","redeemVerify(address,address,uint256,uint256)":"51dff989","renounceOwnership()":"715018a6","repayBorrowVerify(address,address,address,uint256,uint256)":"1ededc91","seizeVerify(address,address,address,address,uint256)":"6d35bf91","setAccessControlManager(address)":"0e32cb86","setActionsPaused(address[],uint8[],bool)":"24aaa220","setCloseFactor(uint256)":"12348e96","setCollateralFactor(address,uint256,uint256)":"5cc4fdeb","setForcedLiquidation(address,bool)":"8b3113f6","setLiquidationIncentive(uint256)":"a8431081","setMarketBorrowCaps(address[],uint256[])":"186db48f","setMarketSupplyCaps(address[],uint256[])":"d136af44","setMaxLoopsLimit(uint256)":"80d45a2d","setMinLiquidatableCollateral(uint256)":"520b6c74","setPriceOracle(address)":"530e784f","setPrimeToken(address)":"c32094c7","supplyCaps(address)":"02c3bcbb","supportMarket(address)":"cab4f84c","transferOwnership(address)":"f2fde38b","transferVerify(address,address,address,uint256)":"6a56947e","unlistMarket(address)":"0686dab6","updateDelegate(address,bool)":"ddbf54fd","updatePrices(address)":"5c21b6c5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolRegistry_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"},{\"internalType\":\"enum Action\",\"name\":\"action\",\"type\":\"uint8\"}],\"name\":\"ActionPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BorrowActionNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"cap\",\"type\":\"uint256\"}],\"name\":\"BorrowCapExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BorrowCapIsNotZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expectedLessThanOrEqualTo\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"CollateralExceedsThreshold\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CollateralFactorIsNotZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ComptrollerMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DelegationStatusUnchanged\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnterMarketActionNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExitMarketActionNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"collateralToSeize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availableCollateral\",\"type\":\"uint256\"}],\"name\":\"InsufficientCollateral\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientShortfall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidCollateralFactor\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLiquidationThreshold\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidateActionNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"}],\"name\":\"MarketAlreadyListed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"MarketNotCollateral\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"}],\"name\":\"MarketNotListed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loopsLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredLoops\",\"type\":\"uint256\"}],\"name\":\"MaxLoopsLimitExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expectedGreaterThan\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"MinimalCollateralViolated\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MintActionNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonzeroBorrowBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"}],\"name\":\"PriceError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RedeemActionNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepayActionNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SeizeActionNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"SnapshotError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"cap\",\"type\":\"uint256\"}],\"name\":\"SupplyCapExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SupplyCapIsNotZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooMuchRepay\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferActionNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"calledContract\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"methodSignature\",\"type\":\"string\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"expectedSender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualSender\",\"type\":\"address\"}],\"name\":\"UnexpectedSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract VToken\",\"name\":\"vToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"enum Action\",\"name\":\"action\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"pauseState\",\"type\":\"bool\"}],\"name\":\"ActionPausedMarket\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"DelegateUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enable\",\"type\":\"bool\"}],\"name\":\"IsForcedLiquidationEnabledUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract VToken\",\"name\":\"vToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"MarketEntered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract VToken\",\"name\":\"vToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"MarketExited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract VToken\",\"name\":\"vToken\",\"type\":\"address\"}],\"name\":\"MarketSupported\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"}],\"name\":\"MarketUnlisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldMaxLoopsLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newmaxLoopsLimit\",\"type\":\"uint256\"}],\"name\":\"MaxLoopsLimitUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAccessControlManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAccessControlManager\",\"type\":\"address\"}],\"name\":\"NewAccessControlManager\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract VToken\",\"name\":\"vToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBorrowCap\",\"type\":\"uint256\"}],\"name\":\"NewBorrowCap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldCloseFactorMantissa\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newCloseFactorMantissa\",\"type\":\"uint256\"}],\"name\":\"NewCloseFactor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract VToken\",\"name\":\"vToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldCollateralFactorMantissa\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newCollateralFactorMantissa\",\"type\":\"uint256\"}],\"name\":\"NewCollateralFactor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldLiquidationIncentiveMantissa\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newLiquidationIncentiveMantissa\",\"type\":\"uint256\"}],\"name\":\"NewLiquidationIncentive\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract VToken\",\"name\":\"vToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldLiquidationThresholdMantissa\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newLiquidationThresholdMantissa\",\"type\":\"uint256\"}],\"name\":\"NewLiquidationThreshold\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldMinLiquidatableCollateral\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newMinLiquidatableCollateral\",\"type\":\"uint256\"}],\"name\":\"NewMinLiquidatableCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract ResilientOracleInterface\",\"name\":\"oldPriceOracle\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract ResilientOracleInterface\",\"name\":\"newPriceOracle\",\"type\":\"address\"}],\"name\":\"NewPriceOracle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IPrime\",\"name\":\"oldPrimeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IPrime\",\"name\":\"newPrimeToken\",\"type\":\"address\"}],\"name\":\"NewPrimeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardsDistributor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"}],\"name\":\"NewRewardsDistributor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract VToken\",\"name\":\"vToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newSupplyCap\",\"type\":\"uint256\"}],\"name\":\"NewSupplyCap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"accessControlManager\",\"outputs\":[{\"internalType\":\"contract IAccessControlManagerV8\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"accountAssets\",\"outputs\":[{\"internalType\":\"contract VToken\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"},{\"internalType\":\"enum Action\",\"name\":\"action\",\"type\":\"uint8\"}],\"name\":\"actionPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract RewardsDistributor\",\"name\":\"_rewardsDistributor\",\"type\":\"address\"}],\"name\":\"addRewardsDistributor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allMarkets\",\"outputs\":[{\"internalType\":\"contract VToken\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"approvedDelegates\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"borrowCaps\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"}],\"name\":\"borrowVerify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"contract VToken\",\"name\":\"vToken\",\"type\":\"address\"}],\"name\":\"checkMembership\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"closeFactorMantissa\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"vTokens\",\"type\":\"address[]\"}],\"name\":\"enterMarkets\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vTokenAddress\",\"type\":\"address\"}],\"name\":\"exitMarket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getAccountLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"error\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shortfall\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllMarkets\",\"outputs\":[{\"internalType\":\"contract VToken[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getAssetsIn\",\"outputs\":[{\"internalType\":\"contract VToken[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getBorrowingPower\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"error\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shortfall\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vTokenModify\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"}],\"name\":\"getHypotheticalAccountLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"error\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shortfall\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardDistributors\",\"outputs\":[{\"internalType\":\"contract RewardsDistributor[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"}],\"name\":\"getRewardsByMarket\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"supplySpeed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowSpeed\",\"type\":\"uint256\"}],\"internalType\":\"struct ComptrollerStorage.RewardSpeeds[]\",\"name\":\"rewardSpeeds\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"healAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loopLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"accessControlManager\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isComptroller\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isForcedLiquidationEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract VToken\",\"name\":\"vToken\",\"type\":\"address\"}],\"name\":\"isMarketListed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract VToken\",\"name\":\"vTokenCollateral\",\"type\":\"address\"},{\"internalType\":\"contract VToken\",\"name\":\"vTokenBorrowed\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct ComptrollerStorage.LiquidationOrder[]\",\"name\":\"orders\",\"type\":\"tuple[]\"}],\"name\":\"liquidateAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vTokenBorrowed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vTokenCollateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"actualRepayAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"seizeTokens\",\"type\":\"uint256\"}],\"name\":\"liquidateBorrowVerify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vTokenBorrowed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vTokenCollateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"actualRepayAmount\",\"type\":\"uint256\"}],\"name\":\"liquidateCalculateSeizeTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"error\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensToSeize\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidationIncentiveMantissa\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"markets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isListed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"collateralFactorMantissa\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationThresholdMantissa\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxLoopsLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minLiquidatableCollateral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"actualMintAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mintTokens\",\"type\":\"uint256\"}],\"name\":\"mintVerify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contract ResilientOracleInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"}],\"name\":\"preBorrowHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vTokenBorrowed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vTokenCollateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"skipLiquidityCheck\",\"type\":\"bool\"}],\"name\":\"preLiquidateHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"}],\"name\":\"preMintHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"}],\"name\":\"preRedeemHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"preRepayHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vTokenCollateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"seizerContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"preSeizeHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"transferTokens\",\"type\":\"uint256\"}],\"name\":\"preTransferHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"prime\",\"outputs\":[{\"internalType\":\"contract IPrime\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"redeemAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"}],\"name\":\"redeemVerify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"actualRepayAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowerIndex\",\"type\":\"uint256\"}],\"name\":\"repayBorrowVerify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vTokenCollateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vTokenBorrowed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"seizeTokens\",\"type\":\"uint256\"}],\"name\":\"seizeVerify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"accessControlManager_\",\"type\":\"address\"}],\"name\":\"setAccessControlManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract VToken[]\",\"name\":\"marketsList\",\"type\":\"address[]\"},{\"internalType\":\"enum Action[]\",\"name\":\"actionsList\",\"type\":\"uint8[]\"},{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"setActionsPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newCloseFactorMantissa\",\"type\":\"uint256\"}],\"name\":\"setCloseFactor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract VToken\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newCollateralFactorMantissa\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newLiquidationThresholdMantissa\",\"type\":\"uint256\"}],\"name\":\"setCollateralFactor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vTokenBorrowed\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enable\",\"type\":\"bool\"}],\"name\":\"setForcedLiquidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newLiquidationIncentiveMantissa\",\"type\":\"uint256\"}],\"name\":\"setLiquidationIncentive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract VToken[]\",\"name\":\"vTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"newBorrowCaps\",\"type\":\"uint256[]\"}],\"name\":\"setMarketBorrowCaps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract VToken[]\",\"name\":\"vTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"newSupplyCaps\",\"type\":\"uint256[]\"}],\"name\":\"setMarketSupplyCaps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"setMaxLoopsLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMinLiquidatableCollateral\",\"type\":\"uint256\"}],\"name\":\"setMinLiquidatableCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ResilientOracleInterface\",\"name\":\"newOracle\",\"type\":\"address\"}],\"name\":\"setPriceOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPrime\",\"name\":\"_prime\",\"type\":\"address\"}],\"name\":\"setPrimeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"supplyCaps\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract VToken\",\"name\":\"vToken\",\"type\":\"address\"}],\"name\":\"supportMarket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"transferTokens\",\"type\":\"uint256\"}],\"name\":\"transferVerify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"}],\"name\":\"unlistMarket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"updateDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"updatePrices\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"events\":{\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"actionPaused(address,uint8)\":{\"params\":{\"action\":\"Action to check\",\"market\":\"vToken address\"},\"returns\":{\"_0\":\"paused True if the action is paused otherwise false\"}},\"addRewardsDistributor(address)\":{\"custom:access\":\"Only Governance\",\"custom:event\":\"Emits NewRewardsDistributor with distributor address\",\"details\":\"Only callable by the admin\",\"params\":{\"_rewardsDistributor\":\"Address of the RewardDistributor contract to add\"}},\"borrowVerify(address,address,uint256)\":{\"params\":{\"borrowAmount\":\"The amount of the underlying asset requested to borrow\",\"borrower\":\"The address borrowing the underlying\",\"vToken\":\"Asset whose underlying is being borrowed\"}},\"checkMembership(address,address)\":{\"params\":{\"account\":\"The address of the account to check\",\"vToken\":\"The vToken to check\"},\"returns\":{\"_0\":\"True if the account is in the market specified, otherwise false.\"}},\"constructor\":{\"custom:error\":\"ZeroAddressNotAllowed is thrown when pool registry address is zero\",\"custom:oz-upgrades-unsafe-allow\":\"constructor\",\"params\":{\"poolRegistry_\":\"Pool registry address\"}},\"enterMarkets(address[])\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"ActionPaused error is thrown if entering any of the markets is pausedMarketNotListed error is thrown if any of the markets is not listed\",\"custom:event\":\"MarketEntered is emitted for each market on success\",\"params\":{\"vTokens\":\"The list of addresses of the vToken markets to be enabled\"},\"returns\":{\"_0\":\"errors An array of NO_ERROR for compatibility with Venus core tooling\"}},\"exitMarket(address)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"ActionPaused error is thrown if exiting the market is pausedNonzeroBorrowBalance error is thrown if the user has an outstanding borrow in this marketMarketNotListed error is thrown when the market is not listedInsufficientLiquidity error is thrown if exiting the market would lead to user's insolvencySnapshotError is thrown if some vToken fails to return the account's supply and borrowsPriceError is thrown if the oracle returns an incorrect price for some asset\",\"custom:event\":\"MarketExited is emitted on success\",\"details\":\"Sender must not have an outstanding borrow balance in the asset,  or be providing necessary collateral for an outstanding borrow.\",\"params\":{\"vTokenAddress\":\"The address of the asset to be removed\"},\"returns\":{\"_0\":\"error Always NO_ERROR for compatibility with Venus core tooling\"}},\"getAccountLiquidity(address)\":{\"details\":\"The interface of this function is intentionally kept compatible with Compound and Venus Core\",\"params\":{\"account\":\"The account get liquidity for\"},\"returns\":{\"error\":\"Always NO_ERROR for compatibility with Venus core tooling\",\"liquidity\":\"Account liquidity in excess of liquidation threshold requirements,\",\"shortfall\":\"Account shortfall below liquidation threshold requirements\"}},\"getAllMarkets()\":{\"details\":\"The automatic getter may be used to access an individual market.\",\"returns\":{\"_0\":\"markets The list of market addresses\"}},\"getAssetsIn(address)\":{\"params\":{\"account\":\"The address of the account to pull assets for\"},\"returns\":{\"_0\":\"A list with the assets the account has entered\"}},\"getBorrowingPower(address)\":{\"details\":\"The interface of this function is intentionally kept compatible with Compound and Venus Core\",\"params\":{\"account\":\"The account get liquidity for\"},\"returns\":{\"error\":\"Always NO_ERROR for compatibility with Venus core tooling\",\"liquidity\":\"Account liquidity in excess of collateral requirements,\",\"shortfall\":\"Account shortfall below collateral requirements\"}},\"getHypotheticalAccountLiquidity(address,address,uint256,uint256)\":{\"details\":\"The interface of this function is intentionally kept compatible with Compound and Venus Core\",\"params\":{\"account\":\"The account to determine liquidity for\",\"borrowAmount\":\"The amount of underlying to hypothetically borrow\",\"redeemTokens\":\"The number of tokens to hypothetically redeem\",\"vTokenModify\":\"The market to hypothetically redeem/borrow in\"},\"returns\":{\"error\":\"Always NO_ERROR for compatibility with Venus core tooling\",\"liquidity\":\"Hypothetical account liquidity in excess of collateral requirements,\",\"shortfall\":\"Hypothetical account shortfall below collateral requirements\"}},\"getRewardDistributors()\":{\"returns\":{\"_0\":\"Array of RewardDistributor addresses\"}},\"getRewardsByMarket(address)\":{\"params\":{\"vToken\":\"The vToken to get the reward speeds for\"},\"returns\":{\"rewardSpeeds\":\"Array of total supply and borrow speeds and reward token for all reward distributors\"}},\"healAccount(address)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"CollateralExceedsThreshold error is thrown when the collateral is too big for healingSnapshotError is thrown if some vToken fails to return the account's supply and borrowsPriceError is thrown if the oracle returns an incorrect price for some asset\",\"params\":{\"user\":\"account to heal\"}},\"initialize(uint256,address)\":{\"params\":{\"accessControlManager\":\"Access control manager contract address\",\"loopLimit\":\"Limit for the loops can iterate to avoid the DOS\"}},\"isComptroller()\":{\"returns\":{\"_0\":\"Always true\"}},\"isMarketListed(address)\":{\"params\":{\"vToken\":\"vToken Address for the market to check\"},\"returns\":{\"_0\":\"listed True if listed otherwise false\"}},\"liquidateAccount(address,(address,address,uint256)[])\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"CollateralExceedsThreshold error is thrown when the collateral is too big for a batch liquidationInsufficientCollateral error is thrown when there is not enough collateral to cover the debtSnapshotError is thrown if some vToken fails to return the account's supply and borrowsPriceError is thrown if the oracle returns an incorrect price for some asset\",\"params\":{\"borrower\":\"the borrower address\",\"orders\":\"an array of liquidation orders\"}},\"liquidateBorrowVerify(address,address,address,address,uint256,uint256)\":{\"params\":{\"actualRepayAmount\":\"The amount of underlying being repaid\",\"borrower\":\"The address of the borrower\",\"liquidator\":\"The address repaying the borrow and seizing the collateral\",\"seizeTokens\":\"The amount of collateral token that will be seized\",\"vTokenBorrowed\":\"Asset which was borrowed by the borrower\",\"vTokenCollateral\":\"Asset which was used as collateral and will be seized\"}},\"liquidateCalculateSeizeTokens(address,address,uint256)\":{\"custom:error\":\"PriceError if the oracle returns an invalid price\",\"details\":\"Used in liquidation (called in vToken.liquidateBorrowFresh)\",\"params\":{\"actualRepayAmount\":\"The amount of vTokenBorrowed underlying to convert into vTokenCollateral tokens\",\"vTokenBorrowed\":\"The address of the borrowed vToken\",\"vTokenCollateral\":\"The address of the collateral vToken\"},\"returns\":{\"error\":\"Always NO_ERROR for compatibility with Venus core tooling\",\"tokensToSeize\":\"Number of vTokenCollateral tokens to be seized in a liquidation\"}},\"mintVerify(address,address,uint256,uint256)\":{\"params\":{\"actualMintAmount\":\"The amount of the underlying asset being minted\",\"mintTokens\":\"The number of tokens being minted\",\"minter\":\"The address minting the tokens\",\"vToken\":\"Asset being minted\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"preLiquidateHook(address,address,address,uint256,bool)\":{\"custom:error\":\"ActionPaused error is thrown if liquidations are paused in this marketMarketNotListed error is thrown if either collateral or borrowed token is not listedTooMuchRepay error is thrown if the liquidator is trying to repay more than allowed by close factorMinimalCollateralViolated is thrown if the users' total collateral is lower than the threshold for non-batch liquidationsInsufficientShortfall is thrown when trying to liquidate a healthy accountSnapshotError is thrown if some vToken fails to return the account's supply and borrowsPriceError is thrown if the oracle returns an incorrect price for some asset\",\"params\":{\"borrower\":\"The address of the borrower\",\"repayAmount\":\"The amount of underlying being repaid\",\"skipLiquidityCheck\":\"Allows the borrow to be liquidated regardless of the account liquidity\",\"vTokenBorrowed\":\"Asset which was borrowed by the borrower\",\"vTokenCollateral\":\"Asset which was used as collateral and will be seized\"}},\"preMintHook(address,address,uint256)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"ActionPaused error is thrown if supplying to this market is pausedMarketNotListed error is thrown when the market is not listedSupplyCapExceeded error is thrown if the total supply exceeds the cap after minting\",\"params\":{\"mintAmount\":\"The amount of underlying being supplied to the market in exchange for tokens\",\"minter\":\"The account which would get the minted tokens\",\"vToken\":\"The market to verify the mint against\"}},\"preRedeemHook(address,address,uint256)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"ActionPaused error is thrown if withdrawals are paused in this marketMarketNotListed error is thrown when the market is not listedInsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvencySnapshotError is thrown if some vToken fails to return the account's supply and borrowsPriceError is thrown if the oracle returns an incorrect price for some asset\",\"params\":{\"redeemTokens\":\"The number of vTokens to exchange for the underlying asset in the market\",\"redeemer\":\"The account which would redeem the tokens\",\"vToken\":\"The market to verify the redeem against\"}},\"preRepayHook(address,address)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"ActionPaused error is thrown if repayments are paused in this marketMarketNotListed error is thrown when the market is not listed\",\"params\":{\"borrower\":\"The account which would borrowed the asset\",\"vToken\":\"The market to verify the repay against\"}},\"preSeizeHook(address,address,address,address)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"ActionPaused error is thrown if seizing this type of collateral is pausedMarketNotListed error is thrown if either collateral or borrowed token is not listedComptrollerMismatch error is when seizer contract or seized asset belong to different pools\",\"params\":{\"borrower\":\"The address of the borrower\",\"liquidator\":\"The address repaying the borrow and seizing the collateral\",\"seizerContract\":\"Contract that tries to seize the asset (either borrowed vToken or Comptroller)\",\"vTokenCollateral\":\"Asset which was used as collateral and will be seized\"}},\"preTransferHook(address,address,address,uint256)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"ActionPaused error is thrown if withdrawals are paused in this marketMarketNotListed error is thrown when the market is not listedInsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvencySnapshotError is thrown if some vToken fails to return the account's supply and borrowsPriceError is thrown if the oracle returns an incorrect price for some asset\",\"params\":{\"dst\":\"The account which receives the tokens\",\"src\":\"The account which sources the tokens\",\"transferTokens\":\"The number of vTokens to transfer\",\"vToken\":\"The market to verify the transfer against\"}},\"redeemVerify(address,address,uint256,uint256)\":{\"params\":{\"redeemAmount\":\"The amount of the underlying asset being redeemed\",\"redeemTokens\":\"The number of tokens being redeemed\",\"redeemer\":\"The address redeeming the tokens\",\"vToken\":\"Asset being redeemed\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"repayBorrowVerify(address,address,address,uint256,uint256)\":{\"params\":{\"actualRepayAmount\":\"The amount of underlying being repaid\",\"borrower\":\"The address of the borrower\",\"payer\":\"The address repaying the borrow\",\"vToken\":\"Asset being repaid\"}},\"seizeVerify(address,address,address,address,uint256)\":{\"params\":{\"borrower\":\"The address of the borrower\",\"liquidator\":\"The address repaying the borrow and seizing the collateral\",\"seizeTokens\":\"The number of collateral tokens to seize\",\"vTokenBorrowed\":\"Asset which was borrowed by the borrower\",\"vTokenCollateral\":\"Asset which was used as collateral and will be seized\"}},\"setAccessControlManager(address)\":{\"custom:access\":\"Only Governance\",\"custom:event\":\"Emits NewAccessControlManager event\",\"details\":\"Admin function to set address of AccessControlManager\",\"params\":{\"accessControlManager_\":\"The new address of the AccessControlManager\"}},\"setActionsPaused(address[],uint8[],bool)\":{\"custom:access\":\"Controlled by AccessControlManager\",\"details\":\"This function is restricted by the AccessControlManager\",\"params\":{\"actionsList\":\"List of action ids to pause/unpause\",\"marketsList\":\"Markets to pause/unpause the actions on\",\"paused\":\"The new paused state (true=paused, false=unpaused)\"}},\"setCloseFactor(uint256)\":{\"custom:access\":\"Controlled by AccessControlManager\",\"custom:event\":\"Emits NewCloseFactor on success\",\"params\":{\"newCloseFactorMantissa\":\"New close factor, scaled by 1e18\"}},\"setCollateralFactor(address,uint256,uint256)\":{\"custom:access\":\"Controlled by AccessControlManager\",\"custom:error\":\"MarketNotListed error is thrown when the market is not listedInvalidCollateralFactor error is thrown when collateral factor is too highInvalidLiquidationThreshold error is thrown when liquidation threshold is lower than collateral factorPriceError is thrown when the oracle returns an invalid price for the asset\",\"custom:event\":\"Emits NewCollateralFactor when collateral factor is updated    and NewLiquidationThreshold when liquidation threshold is updated\",\"details\":\"This function is restricted by the AccessControlManager\",\"params\":{\"newCollateralFactorMantissa\":\"The new collateral factor, scaled by 1e18\",\"newLiquidationThresholdMantissa\":\"The new liquidation threshold, scaled by 1e18\",\"vToken\":\"The market to set the factor on\"}},\"setForcedLiquidation(address,bool)\":{\"params\":{\"enable\":\"Whether to enable forced liquidations\",\"vTokenBorrowed\":\"Borrowed vToken\"}},\"setLiquidationIncentive(uint256)\":{\"custom:access\":\"Controlled by AccessControlManager\",\"custom:event\":\"Emits NewLiquidationIncentive on success\",\"details\":\"This function is restricted by the AccessControlManager\",\"params\":{\"newLiquidationIncentiveMantissa\":\"New liquidationIncentive scaled by 1e18\"}},\"setMarketBorrowCaps(address[],uint256[])\":{\"custom:access\":\"Controlled by AccessControlManager\",\"details\":\"This function is restricted by the AccessControlManagerA borrow cap of type(uint256).max corresponds to unlimited borrowing.Borrow caps smaller than the current total borrows are accepted. This way, new borrows will not be allowed until the total borrows amount goes below the new borrow cap\",\"params\":{\"newBorrowCaps\":\"The new borrow cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited borrowing.\",\"vTokens\":\"The addresses of the markets (tokens) to change the borrow caps for\"}},\"setMarketSupplyCaps(address[],uint256[])\":{\"custom:access\":\"Controlled by AccessControlManager\",\"details\":\"This function is restricted by the AccessControlManagerA supply cap of type(uint256).max corresponds to unlimited supply.Supply caps smaller than the current total supplies are accepted. This way, new supplies will not be allowed until the total supplies amount goes below the new supply cap\",\"params\":{\"newSupplyCaps\":\"The new supply cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited supply.\",\"vTokens\":\"The addresses of the markets (tokens) to change the supply caps for\"}},\"setMaxLoopsLimit(uint256)\":{\"params\":{\"limit\":\"Limit for the max loops can execute at a time\"}},\"setMinLiquidatableCollateral(uint256)\":{\"custom:access\":\"Controlled by AccessControlManager\",\"details\":\"This function is restricted by the AccessControlManager\",\"params\":{\"newMinLiquidatableCollateral\":\"The new min liquidatable collateral (in USD).\"}},\"setPriceOracle(address)\":{\"custom:error\":\"ZeroAddressNotAllowed is thrown when the new oracle address is zero\",\"custom:event\":\"Emits NewPriceOracle on success\",\"details\":\"Only callable by the admin\",\"params\":{\"newOracle\":\"Address of the new price oracle to set\"}},\"setPrimeToken(address)\":{\"params\":{\"_prime\":\"Address of the Prime contract\"}},\"supportMarket(address)\":{\"custom:access\":\"Only PoolRegistry\",\"custom:error\":\"MarketAlreadyListed is thrown if the market is already listed in this pool\",\"details\":\"Only callable by the PoolRegistry\",\"params\":{\"vToken\":\"The address of the market (token) to list\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"},\"transferVerify(address,address,address,uint256)\":{\"params\":{\"dst\":\"The account which receives the tokens\",\"src\":\"The account which sources the tokens\",\"transferTokens\":\"The number of vTokens to transfer\",\"vToken\":\"Asset being transferred\"}},\"unlistMarket(address)\":{\"custom:error\":\"MarketNotListed error is thrown when the market is not listedBorrowActionNotPaused error is thrown if borrow action is not pausedMintActionNotPaused error is thrown if mint action is not pausedRedeemActionNotPaused error is thrown if redeem action is not pausedRepayActionNotPaused error is thrown if repay action is not pausedEnterMarketActionNotPaused error is thrown if enter market action is not pausedLiquidateActionNotPaused error is thrown if liquidate action is not pausedBorrowCapIsNotZero error is thrown if borrow cap is not zeroSupplyCapIsNotZero error is thrown if supply cap is not zeroCollateralFactorIsNotZero error is thrown if collateral factor is not zero\",\"custom:event\":\"MarketUnlisted is emitted on success\",\"details\":\"Checks if all actions are paused, borrow/supply caps is set to 0 and collateral factor is to 0.\",\"params\":{\"market\":\"The address of the market (token) to unlist\"},\"returns\":{\"_0\":\"uint256 Always NO_ERROR for compatibility with Venus core tooling\"}},\"updateDelegate(address,bool)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"ZeroAddressNotAllowed is thrown when delegate address is zeroDelegationStatusUnchanged is thrown if approval status is already set to the requested value\",\"custom:event\":\"DelegateUpdated emits on success\",\"params\":{\"approved\":\"Whether to grant (true) or revoke (false) the borrowing or redeeming rights\",\"delegate\":\"The address to update the rights for\"}},\"updatePrices(address)\":{\"params\":{\"account\":\"Address of the account to get associated tokens with\"}}},\"stateVariables\":{\"poolRegistry\":{\"custom:oz-upgrades-unsafe-allow\":\"state-variable-immutable\"}},\"title\":\"Comptroller\",\"version\":1},\"userdoc\":{\"errors\":{\"ActionPaused(address,uint8)\":[{\"notice\":\"Thrown when trying to perform an action that is paused\"}],\"BorrowActionNotPaused()\":[{\"notice\":\"Thrown when borrow action is not paused\"}],\"BorrowCapExceeded(address,uint256)\":[{\"notice\":\"Thrown if the borrow cap is exceeded\"}],\"BorrowCapIsNotZero()\":[{\"notice\":\"Thrown when borrow cap is not zero\"}],\"CollateralFactorIsNotZero()\":[{\"notice\":\"Thrown when collateral factor is not zero\"}],\"ComptrollerMismatch()\":[{\"notice\":\"Thrown when a market has an unexpected comptroller\"}],\"DelegationStatusUnchanged()\":[{\"notice\":\"Thrown if delegate approval status is already set to the requested value\"}],\"EnterMarketActionNotPaused()\":[{\"notice\":\"Thrown when enter market action is not paused\"}],\"ExitMarketActionNotPaused()\":[{\"notice\":\"Thrown when exit market action is not paused\"}],\"InsufficientLiquidity()\":[{\"notice\":\"Thrown when the account doesn't have enough liquidity to redeem or borrow\"}],\"InsufficientShortfall()\":[{\"notice\":\"Thrown when trying to liquidate a healthy account\"}],\"InvalidCollateralFactor()\":[{\"notice\":\"Thrown when collateral factor exceeds the upper bound\"}],\"InvalidLiquidationThreshold()\":[{\"notice\":\"Thrown when liquidation threshold exceeds the collateral factor\"}],\"LiquidateActionNotPaused()\":[{\"notice\":\"Thrown when liquidate action is not paused\"}],\"MarketAlreadyListed(address)\":[{\"notice\":\"Thrown when trying to add a market that is already listed\"}],\"MarketNotCollateral(address,address)\":[{\"notice\":\"Thrown when user is not member of market\"}],\"MarketNotListed(address)\":[{\"notice\":\"Thrown when the market is not listed\"}],\"MaxLoopsLimitExceeded(uint256,uint256)\":[{\"notice\":\"Thrown an error on maxLoopsLimit exceeds for any loop\"}],\"MinimalCollateralViolated(uint256,uint256)\":[{\"notice\":\"Thrown during the liquidation if user's total collateral amount is lower than   a predefined threshold. In this case only batch liquidations (either liquidateAccount   or healAccount) are available.\"}],\"MintActionNotPaused()\":[{\"notice\":\"Thrown when mint action is not paused\"}],\"NonzeroBorrowBalance()\":[{\"notice\":\"Thrown if the user is trying to exit a market in which they have an outstanding debt\"}],\"PriceError(address)\":[{\"notice\":\"Thrown when the oracle returns an invalid price for some asset\"}],\"RedeemActionNotPaused()\":[{\"notice\":\"Thrown when redeem action is not paused\"}],\"RepayActionNotPaused()\":[{\"notice\":\"Thrown when repay action is not paused\"}],\"SeizeActionNotPaused()\":[{\"notice\":\"Thrown when seize action is not paused\"}],\"SnapshotError(address,address)\":[{\"notice\":\"Thrown if VToken unexpectedly returned a nonzero error code while trying to get account snapshot\"}],\"SupplyCapExceeded(address,uint256)\":[{\"notice\":\"Thrown if the supply cap is exceeded\"}],\"SupplyCapIsNotZero()\":[{\"notice\":\"Thrown when supply cap is not zero\"}],\"TooMuchRepay()\":[{\"notice\":\"Thrown when trying to repay more than allowed by close factor\"}],\"TransferActionNotPaused()\":[{\"notice\":\"Thrown when transfer action is not paused\"}],\"Unauthorized(address,address,string)\":[{\"notice\":\"Thrown when the action is prohibited by AccessControlManager\"}],\"UnexpectedSender(address,address)\":[{\"notice\":\"Thrown when the action is only available to specific sender, but the real sender was different\"}],\"ZeroAddressNotAllowed()\":[{\"notice\":\"Thrown if the supplied address is a zero address where it is not allowed\"}]},\"events\":{\"ActionPausedMarket(address,uint8,bool)\":{\"notice\":\"Emitted when an action is paused on a market\"},\"DelegateUpdated(address,address,bool)\":{\"notice\":\"Emitted when the borrowing or redeeming delegate rights are updated for an account\"},\"IsForcedLiquidationEnabledUpdated(address,bool)\":{\"notice\":\"Emitted when forced liquidation is enabled or disabled for a market\"},\"MarketEntered(address,address)\":{\"notice\":\"Emitted when an account enters a market\"},\"MarketExited(address,address)\":{\"notice\":\"Emitted when an account exits a market\"},\"MarketSupported(address)\":{\"notice\":\"Emitted when a market is supported\"},\"MarketUnlisted(address)\":{\"notice\":\"Emitted when a market is unlisted\"},\"MaxLoopsLimitUpdated(uint256,uint256)\":{\"notice\":\"Emitted when max loops limit is set\"},\"NewAccessControlManager(address,address)\":{\"notice\":\"Emitted when access control manager contract address is changed\"},\"NewBorrowCap(address,uint256)\":{\"notice\":\"Emitted when borrow cap for a vToken is changed\"},\"NewCloseFactor(uint256,uint256)\":{\"notice\":\"Emitted when close factor is changed by admin\"},\"NewCollateralFactor(address,uint256,uint256)\":{\"notice\":\"Emitted when a collateral factor is changed by admin\"},\"NewLiquidationIncentive(uint256,uint256)\":{\"notice\":\"Emitted when liquidation incentive is changed by admin\"},\"NewLiquidationThreshold(address,uint256,uint256)\":{\"notice\":\"Emitted when liquidation threshold is changed by admin\"},\"NewMinLiquidatableCollateral(uint256,uint256)\":{\"notice\":\"Emitted when the collateral threshold (in USD) for non-batch liquidations is changed\"},\"NewPriceOracle(address,address)\":{\"notice\":\"Emitted when price oracle is changed\"},\"NewPrimeToken(address,address)\":{\"notice\":\"Emitted when prime token contract address is changed\"},\"NewRewardsDistributor(address,address)\":{\"notice\":\"Emitted when a rewards distributor is added\"},\"NewSupplyCap(address,uint256)\":{\"notice\":\"Emitted when supply cap for a vToken is changed\"}},\"kind\":\"user\",\"methods\":{\"accessControlManager()\":{\"notice\":\"Returns the address of the access control manager contract\"},\"accountAssets(address,uint256)\":{\"notice\":\"Per-account mapping of \\\"assets you are in\\\"\"},\"actionPaused(address,uint8)\":{\"notice\":\"Checks if a certain action is paused on a market\"},\"addRewardsDistributor(address)\":{\"notice\":\"Add a new RewardsDistributor and initialize it with all markets. We can add several RewardsDistributor contracts with the same rewardToken, and there could be overlaping among them considering the last reward slot (block or second)\"},\"allMarkets(uint256)\":{\"notice\":\"A list of all markets\"},\"approvedDelegates(address,address)\":{\"notice\":\"Whether the delegate is allowed to borrow or redeem on behalf of the user\"},\"borrowCaps(address)\":{\"notice\":\"Borrow caps enforced by borrowAllowed for each vToken address. Defaults to zero which restricts borrowing.\"},\"borrowVerify(address,address,uint256)\":{\"notice\":\"Validates borrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\"},\"checkMembership(address,address)\":{\"notice\":\"Returns whether the given account is entered in a given market\"},\"closeFactorMantissa()\":{\"notice\":\"Multiplier used to calculate the maximum repayAmount when liquidating a borrow\"},\"enterMarkets(address[])\":{\"notice\":\"Add assets to be included in account liquidity calculation; enabling them to be used as collateral\"},\"exitMarket(address)\":{\"notice\":\"Removes asset from sender's account liquidity calculation; disabling them as collateral\"},\"getAccountLiquidity(address)\":{\"notice\":\"Determine the current account liquidity with respect to liquidation threshold requirements\"},\"getAllMarkets()\":{\"notice\":\"Return all of the markets\"},\"getAssetsIn(address)\":{\"notice\":\"Returns the assets an account has entered\"},\"getBorrowingPower(address)\":{\"notice\":\"Determine the current account liquidity with respect to collateral requirements\"},\"getHypotheticalAccountLiquidity(address,address,uint256,uint256)\":{\"notice\":\"Determine what the account liquidity would be if the given amounts were redeemed/borrowed\"},\"getRewardDistributors()\":{\"notice\":\"Return all reward distributors for this pool\"},\"getRewardsByMarket(address)\":{\"notice\":\"Returns reward speed given a vToken\"},\"healAccount(address)\":{\"notice\":\"Seizes all the remaining collateral, makes msg.sender repay the existing   borrows, and treats the rest of the debt as bad debt (for each market).   The sender has to repay a certain percentage of the debt, computed as   collateral / (borrows * liquidationIncentive).\"},\"isComptroller()\":{\"notice\":\"A marker method that returns true for a valid Comptroller contract\"},\"isForcedLiquidationEnabled(address)\":{\"notice\":\"Flag indicating whether forced liquidation enabled for a market\"},\"isMarketListed(address)\":{\"notice\":\"Check if a market is marked as listed (active)\"},\"liquidateAccount(address,(address,address,uint256)[])\":{\"notice\":\"Liquidates all borrows of the borrower. Callable only if the collateral is less than   a predefined threshold, and the account collateral can be seized to cover all borrows. If   the collateral is higher than the threshold, use regular liquidations. If the collateral is   below the threshold, and the account is insolvent, use healAccount.\"},\"liquidateBorrowVerify(address,address,address,address,uint256,uint256)\":{\"notice\":\"Validates liquidateBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\"},\"liquidateCalculateSeizeTokens(address,address,uint256)\":{\"notice\":\"Calculate number of tokens of collateral asset to seize given an underlying amount\"},\"liquidationIncentiveMantissa()\":{\"notice\":\"Multiplier representing the discount on collateral that a liquidator receives\"},\"markets(address)\":{\"notice\":\"Official mapping of vTokens -> Market metadata\"},\"minLiquidatableCollateral()\":{\"notice\":\"Minimal collateral required for regular (non-batch) liquidations\"},\"mintVerify(address,address,uint256,uint256)\":{\"notice\":\"Validates mint, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\"},\"oracle()\":{\"notice\":\"Oracle which gives the price of any given asset\"},\"preBorrowHook(address,address,uint256)\":{\"notice\":\"disable-eslint\"},\"preLiquidateHook(address,address,address,uint256,bool)\":{\"notice\":\"Checks if the liquidation should be allowed to occur\"},\"preMintHook(address,address,uint256)\":{\"notice\":\"Checks if the account should be allowed to mint tokens in the given market\"},\"preRedeemHook(address,address,uint256)\":{\"notice\":\"Checks if the account should be allowed to redeem tokens in the given market\"},\"preRepayHook(address,address)\":{\"notice\":\"Checks if the account should be allowed to repay a borrow in the given market\"},\"preSeizeHook(address,address,address,address)\":{\"notice\":\"Checks if the seizing of assets should be allowed to occur\"},\"preTransferHook(address,address,address,uint256)\":{\"notice\":\"Checks if the account should be allowed to transfer tokens in the given market\"},\"prime()\":{\"notice\":\"Prime token address\"},\"redeemVerify(address,address,uint256,uint256)\":{\"notice\":\"Validates redeem, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\"},\"repayBorrowVerify(address,address,address,uint256,uint256)\":{\"notice\":\"Validates repayBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\"},\"seizeVerify(address,address,address,address,uint256)\":{\"notice\":\"Validates seize, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\"},\"setAccessControlManager(address)\":{\"notice\":\"Sets the address of AccessControlManager\"},\"setActionsPaused(address[],uint8[],bool)\":{\"notice\":\"Pause/unpause specified actions\"},\"setCloseFactor(uint256)\":{\"notice\":\"Sets the closeFactor to use when liquidating borrows\"},\"setCollateralFactor(address,uint256,uint256)\":{\"notice\":\"Sets the collateralFactor for a market\"},\"setForcedLiquidation(address,bool)\":{\"notice\":\"Enables forced liquidations for a market. If forced liquidation is enabled, borrows in the market may be liquidated regardless of the account liquidity\"},\"setLiquidationIncentive(uint256)\":{\"notice\":\"Sets liquidationIncentive\"},\"setMarketBorrowCaps(address[],uint256[])\":{\"notice\":\"Set the given borrow caps for the given vToken markets. Borrowing that brings total borrows to or above borrow cap will revert.\"},\"setMarketSupplyCaps(address[],uint256[])\":{\"notice\":\"Set the given supply caps for the given vToken markets. Supply that brings total Supply to or above supply cap will revert.\"},\"setMaxLoopsLimit(uint256)\":{\"notice\":\"Set the for loop iteration limit to avoid DOS\"},\"setMinLiquidatableCollateral(uint256)\":{\"notice\":\"Set the given collateral threshold for non-batch liquidations. Regular liquidations   will fail if the collateral amount is less than this threshold. Liquidators should use batch   operations like liquidateAccount or healAccount.\"},\"setPriceOracle(address)\":{\"notice\":\"Sets a new price oracle for the Comptroller\"},\"setPrimeToken(address)\":{\"notice\":\"Sets the prime token contract for the comptroller\"},\"supplyCaps(address)\":{\"notice\":\"Supply caps enforced by mintAllowed for each vToken address. Defaults to zero which corresponds to minting not allowed\"},\"supportMarket(address)\":{\"notice\":\"Add the market to the markets mapping and set it as listed\"},\"transferVerify(address,address,address,uint256)\":{\"notice\":\"Validates transfer, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\"},\"unlistMarket(address)\":{\"notice\":\"Unlist a market by setting isListed to false\"},\"updateDelegate(address,bool)\":{\"notice\":\"Grants or revokes the borrowing or redeeming delegate rights to / from an account  If allowed, the delegate will be able to borrow funds on behalf of the sender  Upon a delegated borrow, the delegate will receive the funds, and the borrower  will see the debt on their account  Upon a delegated redeem, the delegate will receive the redeemed amount and the approver  will see a deduction in his vToken balance\"},\"updatePrices(address)\":{\"notice\":\"Update the prices of all the tokens associated with the provided account\"}},\"notice\":\"The Comptroller is designed to provide checks for all minting, redeeming, transferring, borrowing, lending, repaying, liquidating, and seizing done by the `vToken` contract. Each pool has one `Comptroller` checking these interactions across markets. When a user interacts with a given market by one of these main actions, a call is made to a corresponding hook in the associated `Comptroller`, which either allows or reverts the transaction. These hooks also update supply and borrow rewards as they are called. The comptroller holds the logic for assessing liquidity snapshots of an account via the collateral factor and liquidation threshold. This check determines the collateral needed for a borrow, as well as how much of a borrow may be liquidated. A user may borrow a portion of their collateral with the maximum amount determined by the markets collateral factor. However, if their borrowed amount exceeds an amount calculated using the market\\u2019s corresponding liquidation threshold, the borrow is eligible for liquidation. The `Comptroller` also includes two functions `liquidateAccount()` and `healAccount()`, which are meant to handle accounts that do not exceed the `minLiquidatableCollateral` for the `Comptroller`: - `healAccount()`: This function is called to seize all of a given user\\u2019s collateral, requiring the `msg.sender` repay a certain percentage of the debt calculated by `collateral/(borrows*liquidationIncentive)`. The function can only be called if the calculated percentage does not exceed 100%, because otherwise no `badDebt` would be created and `liquidateAccount()` should be used instead. The difference in the actual amount of debt and debt paid off is recorded as `badDebt` for each market, which can then be auctioned off for the risk reserves of the associated pool. - `liquidateAccount()`: This function can only be called if the collateral seized will cover all borrows of an account, as well as the liquidation incentive. Otherwise, the pool will incur bad debt, in which case the function `healAccount()` should be used instead. This function skips the logic verifying that the repay amount does not exceed the close factor.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/isolated-pools/contracts/Comptroller.sol\":\"Comptroller\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./OwnableUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership} and {acceptOwnership}.\\n *\\n * This module is used through inheritance. It will make available all functions\\n * from parent (Ownable).\\n */\\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\\n    address private _pendingOwner;\\n\\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\\n\\n    function __Ownable2Step_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable2Step_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Returns the address of the pending owner.\\n     */\\n    function pendingOwner() public view virtual returns (address) {\\n        return _pendingOwner;\\n    }\\n\\n    /**\\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\\n        _pendingOwner = newOwner;\\n        emit OwnershipTransferStarted(owner(), newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual override {\\n        delete _pendingOwner;\\n        super._transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev The new owner accepts the ownership transfer.\\n     */\\n    function acceptOwnership() public virtual {\\n        address sender = _msgSender();\\n        require(pendingOwner() == sender, \\\"Ownable2Step: caller is not the new owner\\\");\\n        _transferOwnership(sender);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x9140dabc466abab21b48b72dbda26736b1183a310d0e677d3719d201df026510\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * ==== Security Considerations\\n *\\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\\n * generally recommended is:\\n *\\n * ```solidity\\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\\n *     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\\n *     doThing(..., value);\\n * }\\n *\\n * function doThing(..., uint256 value) public {\\n *     token.safeTransferFrom(msg.sender, address(this), value);\\n *     ...\\n * }\\n * ```\\n *\\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\\n * {SafeERC20-safeTransferFrom}).\\n *\\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\\n * contracts should have entry points that don't rely on permit.\\n */\\ninterface IERC20PermitUpgradeable {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     *\\n     * CAUTION: See Security Considerations above.\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x07e881de3b9f6d2c07909f193f24b96c7fe4ea60013260f3f25aecd8bab3c2f8\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\nimport \\\"../extensions/IERC20PermitUpgradeable.sol\\\";\\nimport \\\"../../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20Upgradeable {\\n    using AddressUpgradeable for address;\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransfer(IERC20Upgradeable token, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    /**\\n     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeIncreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        uint256 oldAllowance = token.allowance(address(this), spender);\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));\\n    }\\n\\n    /**\\n     * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeDecreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));\\n        }\\n    }\\n\\n    /**\\n     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n     * to be set to zero before setting it to a non-zero value, such as USDT.\\n     */\\n    function forceApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);\\n\\n        if (!_callOptionalReturnBool(token, approvalCall)) {\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));\\n            _callOptionalReturn(token, approvalCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.\\n     * Revert on invalid signature.\\n     */\\n    function safePermit(\\n        IERC20PermitUpgradeable token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20Upgradeable token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        require(returndata.length == 0 || abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     *\\n     * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\\n     */\\n    function _callOptionalReturnBool(IERC20Upgradeable token, bytes memory data) private returns (bool) {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\\n        // and not revert is the subcall reverts.\\n\\n        (bool success, bytes memory returndata) = address(token).call(data);\\n        return\\n            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && AddressUpgradeable.isContract(address(token));\\n    }\\n}\\n\",\"keccak256\":\"0x23b997be73d3dd46885262704f0f8cfc7273fdadfe303d37969a9561373972b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n    /**\\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n     *\\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n     * {RoleAdminChanged} not being emitted signaling this.\\n     *\\n     * _Available since v3.1._\\n     */\\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n    /**\\n     * @dev Emitted when `account` is granted `role`.\\n     *\\n     * `sender` is the account that originated the contract call, an admin role\\n     * bearer except when using {AccessControl-_setupRole}.\\n     */\\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Emitted when `account` is revoked `role`.\\n     *\\n     * `sender` is the account that originated the contract call:\\n     *   - if using `revokeRole`, it is the admin role bearer\\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n     */\\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Returns `true` if `account` has been granted `role`.\\n     */\\n    function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n    /**\\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\\n     * {revokeRole}.\\n     *\\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n     */\\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n    /**\\n     * @dev Grants `role` to `account`.\\n     *\\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function grantRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from `account`.\\n     *\\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function revokeRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from the calling account.\\n     *\\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n     * purpose is to provide a mechanism for accounts to lose their privileges\\n     * if they are compromised (such as when a trusted device is misplaced).\\n     *\\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must be `account`.\\n     */\\n    function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\n\\nimport \\\"./IAccessControlManagerV8.sol\\\";\\n\\n/**\\n * @title AccessControlledV8\\n * @author Venus\\n * @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\\n * to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\\n */\\nabstract contract AccessControlledV8 is Initializable, Ownable2StepUpgradeable {\\n    /// @notice Access control manager contract\\n    IAccessControlManagerV8 internal _accessControlManager;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when access control manager contract address is changed\\n    event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager);\\n\\n    /// @notice Thrown when the action is prohibited by AccessControlManager\\n    error Unauthorized(address sender, address calledContract, string methodSignature);\\n\\n    function __AccessControlled_init(address accessControlManager_) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n    }\\n\\n    function __AccessControlled_init_unchained(address accessControlManager_) internal onlyInitializing {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Sets the address of AccessControlManager\\n     * @dev Admin function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     * @custom:event Emits NewAccessControlManager event\\n     * @custom:access Only Governance\\n     */\\n    function setAccessControlManager(address accessControlManager_) external onlyOwner {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Returns the address of the access control manager contract\\n     */\\n    function accessControlManager() external view returns (IAccessControlManagerV8) {\\n        return _accessControlManager;\\n    }\\n\\n    /**\\n     * @dev Internal function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     */\\n    function _setAccessControlManager(address accessControlManager_) internal {\\n        require(address(accessControlManager_) != address(0), \\\"invalid acess control manager address\\\");\\n        address oldAccessControlManager = address(_accessControlManager);\\n        _accessControlManager = IAccessControlManagerV8(accessControlManager_);\\n        emit NewAccessControlManager(oldAccessControlManager, accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Reverts if the call is not allowed by AccessControlManager\\n     * @param signature Method signature\\n     */\\n    function _checkAccessAllowed(string memory signature) internal view {\\n        bool isAllowedToCall = _accessControlManager.isAllowedToCall(msg.sender, signature);\\n\\n        if (!isAllowedToCall) {\\n            revert Unauthorized(msg.sender, address(this), signature);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe0fd441c84ac907cabc88db69ef04f6d7532d770c7e6a1dfe6e7d6305debb49\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport \\\"@openzeppelin/contracts/access/IAccessControl.sol\\\";\\n\\n/**\\n * @title IAccessControlManagerV8\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\\n */\\ninterface IAccessControlManagerV8 is IAccessControl {\\n    function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n    function revokeCallPermission(\\n        address contractAddress,\\n        string calldata functionSig,\\n        address accountToRevoke\\n    ) external;\\n\\n    function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n    function hasPermission(\\n        address account,\\n        address contractAddress,\\n        string calldata functionSig\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xaa29b098440d0b3a131c5ecdf25ce548790c1b5ac7bf9b5c0264b6af6f7a1e0b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Comptroller.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\n\\nimport { ComptrollerInterface, Action } from \\\"./ComptrollerInterface.sol\\\";\\nimport { ComptrollerStorage } from \\\"./ComptrollerStorage.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"./MaxLoopsLimitHelper.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title Comptroller\\n * @author Venus\\n * @notice The Comptroller is designed to provide checks for all minting, redeeming, transferring, borrowing, lending, repaying, liquidating,\\n * and seizing done by the `vToken` contract. Each pool has one `Comptroller` checking these interactions across markets. When a user interacts\\n * with a given market by one of these main actions, a call is made to a corresponding hook in the associated `Comptroller`, which either allows\\n * or reverts the transaction. These hooks also update supply and borrow rewards as they are called. The comptroller holds the logic for assessing\\n * liquidity snapshots of an account via the collateral factor and liquidation threshold. This check determines the collateral needed for a borrow,\\n * as well as how much of a borrow may be liquidated. A user may borrow a portion of their collateral with the maximum amount determined by the\\n * markets collateral factor. However, if their borrowed amount exceeds an amount calculated using the market\\u2019s corresponding liquidation threshold,\\n * the borrow is eligible for liquidation.\\n *\\n * The `Comptroller` also includes two functions `liquidateAccount()` and `healAccount()`, which are meant to handle accounts that do not exceed\\n * the `minLiquidatableCollateral` for the `Comptroller`:\\n *\\n * - `healAccount()`: This function is called to seize all of a given user\\u2019s collateral, requiring the `msg.sender` repay a certain percentage\\n * of the debt calculated by `collateral/(borrows*liquidationIncentive)`. The function can only be called if the calculated percentage does not exceed\\n * 100%, because otherwise no `badDebt` would be created and `liquidateAccount()` should be used instead. The difference in the actual amount of debt\\n * and debt paid off is recorded as `badDebt` for each market, which can then be auctioned off for the risk reserves of the associated pool.\\n * - `liquidateAccount()`: This function can only be called if the collateral seized will cover all borrows of an account, as well as the liquidation\\n * incentive. Otherwise, the pool will incur bad debt, in which case the function `healAccount()` should be used instead. This function skips the logic\\n * verifying that the repay amount does not exceed the close factor.\\n */\\ncontract Comptroller is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    ComptrollerStorage,\\n    ComptrollerInterface,\\n    ExponentialNoError,\\n    MaxLoopsLimitHelper\\n{\\n    // PoolRegistry, immutable to save on gas\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    address public immutable poolRegistry;\\n\\n    /// @notice Emitted when an account enters a market\\n    event MarketEntered(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when an account exits a market\\n    event MarketExited(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when close factor is changed by admin\\n    event NewCloseFactor(uint256 oldCloseFactorMantissa, uint256 newCloseFactorMantissa);\\n\\n    /// @notice Emitted when a collateral factor is changed by admin\\n    event NewCollateralFactor(VToken vToken, uint256 oldCollateralFactorMantissa, uint256 newCollateralFactorMantissa);\\n\\n    /// @notice Emitted when liquidation threshold is changed by admin\\n    event NewLiquidationThreshold(\\n        VToken vToken,\\n        uint256 oldLiquidationThresholdMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    );\\n\\n    /// @notice Emitted when liquidation incentive is changed by admin\\n    event NewLiquidationIncentive(uint256 oldLiquidationIncentiveMantissa, uint256 newLiquidationIncentiveMantissa);\\n\\n    /// @notice Emitted when price oracle is changed\\n    event NewPriceOracle(ResilientOracleInterface oldPriceOracle, ResilientOracleInterface newPriceOracle);\\n\\n    /// @notice Emitted when an action is paused on a market\\n    event ActionPausedMarket(VToken vToken, Action action, bool pauseState);\\n\\n    /// @notice Emitted when borrow cap for a vToken is changed\\n    event NewBorrowCap(VToken indexed vToken, uint256 newBorrowCap);\\n\\n    /// @notice Emitted when the collateral threshold (in USD) for non-batch liquidations is changed\\n    event NewMinLiquidatableCollateral(uint256 oldMinLiquidatableCollateral, uint256 newMinLiquidatableCollateral);\\n\\n    /// @notice Emitted when supply cap for a vToken is changed\\n    event NewSupplyCap(VToken indexed vToken, uint256 newSupplyCap);\\n\\n    /// @notice Emitted when a rewards distributor is added\\n    event NewRewardsDistributor(address indexed rewardsDistributor, address indexed rewardToken);\\n\\n    /// @notice Emitted when a market is supported\\n    event MarketSupported(VToken vToken);\\n\\n    /// @notice Emitted when prime token contract address is changed\\n    event NewPrimeToken(IPrime oldPrimeToken, IPrime newPrimeToken);\\n\\n    /// @notice Emitted when forced liquidation is enabled or disabled for a market\\n    event IsForcedLiquidationEnabledUpdated(address indexed vToken, bool enable);\\n\\n    /// @notice Emitted when a market is unlisted\\n    event MarketUnlisted(address indexed vToken);\\n    /// @notice Emitted when the borrowing or redeeming delegate rights are updated for an account\\n    event DelegateUpdated(address indexed approver, address indexed delegate, bool approved);\\n\\n    /// @notice Thrown when collateral factor exceeds the upper bound\\n    error InvalidCollateralFactor();\\n\\n    /// @notice Thrown when liquidation threshold exceeds the collateral factor\\n    error InvalidLiquidationThreshold();\\n\\n    /// @notice Thrown when the action is only available to specific sender, but the real sender was different\\n    error UnexpectedSender(address expectedSender, address actualSender);\\n\\n    /// @notice Thrown when the oracle returns an invalid price for some asset\\n    error PriceError(address vToken);\\n\\n    /// @notice Thrown if VToken unexpectedly returned a nonzero error code while trying to get account snapshot\\n    error SnapshotError(address vToken, address user);\\n\\n    /// @notice Thrown when the market is not listed\\n    error MarketNotListed(address market);\\n\\n    /// @notice Thrown when a market has an unexpected comptroller\\n    error ComptrollerMismatch();\\n\\n    /// @notice Thrown when user is not member of market\\n    error MarketNotCollateral(address vToken, address user);\\n\\n    /// @notice Thrown when borrow action is not paused\\n    error BorrowActionNotPaused();\\n\\n    /// @notice Thrown when mint action is not paused\\n    error MintActionNotPaused();\\n\\n    /// @notice Thrown when redeem action is not paused\\n    error RedeemActionNotPaused();\\n\\n    /// @notice Thrown when repay action is not paused\\n    error RepayActionNotPaused();\\n\\n    /// @notice Thrown when seize action is not paused\\n    error SeizeActionNotPaused();\\n\\n    /// @notice Thrown when exit market action is not paused\\n    error ExitMarketActionNotPaused();\\n\\n    /// @notice Thrown when transfer action is not paused\\n    error TransferActionNotPaused();\\n\\n    /// @notice Thrown when enter market action is not paused\\n    error EnterMarketActionNotPaused();\\n\\n    /// @notice Thrown when liquidate action is not paused\\n    error LiquidateActionNotPaused();\\n\\n    /// @notice Thrown when borrow cap is not zero\\n    error BorrowCapIsNotZero();\\n\\n    /// @notice Thrown when supply cap is not zero\\n    error SupplyCapIsNotZero();\\n\\n    /// @notice Thrown when collateral factor is not zero\\n    error CollateralFactorIsNotZero();\\n\\n    /**\\n     * @notice Thrown during the liquidation if user's total collateral amount is lower than\\n     *   a predefined threshold. In this case only batch liquidations (either liquidateAccount\\n     *   or healAccount) are available.\\n     */\\n    error MinimalCollateralViolated(uint256 expectedGreaterThan, uint256 actual);\\n    error CollateralExceedsThreshold(uint256 expectedLessThanOrEqualTo, uint256 actual);\\n    error InsufficientCollateral(uint256 collateralToSeize, uint256 availableCollateral);\\n\\n    /// @notice Thrown when the account doesn't have enough liquidity to redeem or borrow\\n    error InsufficientLiquidity();\\n\\n    /// @notice Thrown when trying to liquidate a healthy account\\n    error InsufficientShortfall();\\n\\n    /// @notice Thrown when trying to repay more than allowed by close factor\\n    error TooMuchRepay();\\n\\n    /// @notice Thrown if the user is trying to exit a market in which they have an outstanding debt\\n    error NonzeroBorrowBalance();\\n\\n    /// @notice Thrown when trying to perform an action that is paused\\n    error ActionPaused(address market, Action action);\\n\\n    /// @notice Thrown when trying to add a market that is already listed\\n    error MarketAlreadyListed(address market);\\n\\n    /// @notice Thrown if the supply cap is exceeded\\n    error SupplyCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if the borrow cap is exceeded\\n    error BorrowCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if delegate approval status is already set to the requested value\\n    error DelegationStatusUnchanged();\\n\\n    /// @param poolRegistry_ Pool registry address\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    /// @custom:error ZeroAddressNotAllowed is thrown when pool registry address is zero\\n    constructor(address poolRegistry_) {\\n        ensureNonzeroAddress(poolRegistry_);\\n\\n        poolRegistry = poolRegistry_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @param loopLimit Limit for the loops can iterate to avoid the DOS\\n     * @param accessControlManager Access control manager contract address\\n     */\\n    function initialize(uint256 loopLimit, address accessControlManager) external initializer {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager);\\n\\n        _setMaxLoopsLimit(loopLimit);\\n    }\\n\\n    /**\\n     * @notice Add assets to be included in account liquidity calculation; enabling them to be used as collateral\\n     * @param vTokens The list of addresses of the vToken markets to be enabled\\n     * @return errors An array of NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketEntered is emitted for each market on success\\n     * @custom:error ActionPaused error is thrown if entering any of the markets is paused\\n     * @custom:error MarketNotListed error is thrown if any of the markets is not listed\\n     * @custom:access Not restricted\\n     */\\n    function enterMarkets(address[] memory vTokens) external override returns (uint256[] memory) {\\n        uint256 len = vTokens.length;\\n\\n        uint256[] memory results = new uint256[](len);\\n        for (uint256 i; i < len; ++i) {\\n            VToken vToken = VToken(vTokens[i]);\\n\\n            _addToMarket(vToken, msg.sender);\\n            results[i] = NO_ERROR;\\n        }\\n\\n        return results;\\n    }\\n\\n    /**\\n     * @notice Unlist a market by setting isListed to false\\n     * @dev Checks if all actions are paused, borrow/supply caps is set to 0 and collateral factor is to 0.\\n     * @param market The address of the market (token) to unlist\\n     * @return uint256 Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketUnlisted is emitted on success\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error BorrowActionNotPaused error is thrown if borrow action is not paused\\n     * @custom:error MintActionNotPaused error is thrown if mint action is not paused\\n     * @custom:error RedeemActionNotPaused error is thrown if redeem action is not paused\\n     * @custom:error RepayActionNotPaused error is thrown if repay action is not paused\\n     * @custom:error EnterMarketActionNotPaused error is thrown if enter market action is not paused\\n     * @custom:error LiquidateActionNotPaused error is thrown if liquidate action is not paused\\n     * @custom:error BorrowCapIsNotZero error is thrown if borrow cap is not zero\\n     * @custom:error SupplyCapIsNotZero error is thrown if supply cap is not zero\\n     * @custom:error CollateralFactorIsNotZero error is thrown if collateral factor is not zero\\n     */\\n    function unlistMarket(address market) external returns (uint256) {\\n        _checkAccessAllowed(\\\"unlistMarket(address)\\\");\\n\\n        Market storage _market = markets[market];\\n\\n        if (!_market.isListed) {\\n            revert MarketNotListed(market);\\n        }\\n\\n        if (!actionPaused(market, Action.BORROW)) {\\n            revert BorrowActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.MINT)) {\\n            revert MintActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REDEEM)) {\\n            revert RedeemActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REPAY)) {\\n            revert RepayActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.SEIZE)) {\\n            revert SeizeActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.ENTER_MARKET)) {\\n            revert EnterMarketActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.LIQUIDATE)) {\\n            revert LiquidateActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.TRANSFER)) {\\n            revert TransferActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.EXIT_MARKET)) {\\n            revert ExitMarketActionNotPaused();\\n        }\\n\\n        if (borrowCaps[market] != 0) {\\n            revert BorrowCapIsNotZero();\\n        }\\n\\n        if (supplyCaps[market] != 0) {\\n            revert SupplyCapIsNotZero();\\n        }\\n\\n        if (_market.collateralFactorMantissa != 0) {\\n            revert CollateralFactorIsNotZero();\\n        }\\n\\n        _market.isListed = false;\\n        emit MarketUnlisted(market);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Grants or revokes the borrowing or redeeming delegate rights to / from an account\\n     *  If allowed, the delegate will be able to borrow funds on behalf of the sender\\n     *  Upon a delegated borrow, the delegate will receive the funds, and the borrower\\n     *  will see the debt on their account\\n     *  Upon a delegated redeem, the delegate will receive the redeemed amount and the approver\\n     *  will see a deduction in his vToken balance\\n     * @param delegate The address to update the rights for\\n     * @param approved Whether to grant (true) or revoke (false) the borrowing or redeeming rights\\n     * @custom:event DelegateUpdated emits on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when delegate address is zero\\n     * @custom:error DelegationStatusUnchanged is thrown if approval status is already set to the requested value\\n     * @custom:access Not restricted\\n     */\\n    function updateDelegate(address delegate, bool approved) external {\\n        ensureNonzeroAddress(delegate);\\n        if (approvedDelegates[msg.sender][delegate] == approved) {\\n            revert DelegationStatusUnchanged();\\n        }\\n\\n        approvedDelegates[msg.sender][delegate] = approved;\\n        emit DelegateUpdated(msg.sender, delegate, approved);\\n    }\\n\\n    /**\\n     * @notice Removes asset from sender's account liquidity calculation; disabling them as collateral\\n     * @dev Sender must not have an outstanding borrow balance in the asset,\\n     *  or be providing necessary collateral for an outstanding borrow.\\n     * @param vTokenAddress The address of the asset to be removed\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketExited is emitted on success\\n     * @custom:error ActionPaused error is thrown if exiting the market is paused\\n     * @custom:error NonzeroBorrowBalance error is thrown if the user has an outstanding borrow in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if exiting the market would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function exitMarket(address vTokenAddress) external override returns (uint256) {\\n        _checkActionPauseState(vTokenAddress, Action.EXIT_MARKET);\\n        VToken vToken = VToken(vTokenAddress);\\n        /* Get sender tokensHeld and amountOwed underlying from the vToken */\\n        (uint256 tokensHeld, uint256 amountOwed, ) = _safeGetAccountSnapshot(vToken, msg.sender);\\n\\n        /* Fail if the sender has a borrow balance */\\n        if (amountOwed != 0) {\\n            revert NonzeroBorrowBalance();\\n        }\\n\\n        /* Fail if the sender is not permitted to redeem all of their tokens */\\n        _checkRedeemAllowed(vTokenAddress, msg.sender, tokensHeld);\\n\\n        Market storage marketToExit = markets[address(vToken)];\\n\\n        /* Return true if the sender is not already \\u2018in\\u2019 the market */\\n        if (!marketToExit.accountMembership[msg.sender]) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Set vToken account membership to false */\\n        delete marketToExit.accountMembership[msg.sender];\\n\\n        /* Delete vToken from the account\\u2019s list of assets */\\n        // load into memory for faster iteration\\n        VToken[] memory userAssetList = accountAssets[msg.sender];\\n        uint256 len = userAssetList.length;\\n\\n        uint256 assetIndex = len;\\n        for (uint256 i; i < len; ++i) {\\n            if (userAssetList[i] == vToken) {\\n                assetIndex = i;\\n                break;\\n            }\\n        }\\n\\n        // We *must* have found the asset in the list or our redundant data structure is broken\\n        assert(assetIndex < len);\\n\\n        // copy last item in list to location of item to be removed, reduce length by 1\\n        VToken[] storage storedList = accountAssets[msg.sender];\\n        storedList[assetIndex] = storedList[storedList.length - 1];\\n        storedList.pop();\\n\\n        emit MarketExited(vToken, msg.sender);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /*** Policy Hooks ***/\\n\\n    /**\\n     * @notice Checks if the account should be allowed to mint tokens in the given market\\n     * @param vToken The market to verify the mint against\\n     * @param minter The account which would get the minted tokens\\n     * @param mintAmount The amount of underlying being supplied to the market in exchange for tokens\\n     * @custom:error ActionPaused error is thrown if supplying to this market is paused\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error SupplyCapExceeded error is thrown if the total supply exceeds the cap after minting\\n     * @custom:access Not restricted\\n     */\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external override {\\n        _checkActionPauseState(vToken, Action.MINT);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        uint256 supplyCap = supplyCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (supplyCap != type(uint256).max) {\\n            uint256 vTokenSupply = VToken(vToken).totalSupply();\\n            Exp memory exchangeRate = Exp({ mantissa: VToken(vToken).exchangeRateStored() });\\n            uint256 nextTotalSupply = mul_ScalarTruncateAddUInt(exchangeRate, vTokenSupply, mintAmount);\\n            if (nextTotalSupply > supplyCap) {\\n                revert SupplyCapExceeded(vToken, supplyCap);\\n            }\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, minter);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates mint, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being minted\\n     * @param minter The address minting the tokens\\n     * @param actualMintAmount The amount of the underlying asset being minted\\n     * @param mintTokens The number of tokens being minted\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function mintVerify(address vToken, address minter, uint256 actualMintAmount, uint256 mintTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(minter, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to redeem tokens in the given market\\n     * @param vToken The market to verify the redeem against\\n     * @param redeemer The account which would redeem the tokens\\n     * @param redeemTokens The number of vTokens to exchange for the underlying asset in the market\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external override {\\n        _checkActionPauseState(vToken, Action.REDEEM);\\n\\n        _checkRedeemAllowed(vToken, redeemer, redeemTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, redeemer);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates redeem, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being redeemed\\n     * @param redeemer The address redeeming the tokens\\n     * @param redeemAmount The amount of the underlying asset being redeemed\\n     * @param redeemTokens The number of tokens being redeemed\\n     */\\n    function redeemVerify(address vToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(redeemer, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates repayBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being repaid\\n     * @param payer The address repaying the borrow\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     */\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer, // solhint-disable-line no-unused-vars\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 borrowerIndex // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates liquidateBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     * @param seizeTokens The amount of collateral token that will be seized\\n     */\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenBorrowed);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenBorrowed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates seize, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param seizeTokens The number of collateral tokens to seize\\n     */\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenCollateral);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenCollateral);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates transfer, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being transferred\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function transferVerify(address vToken, address src, address dst, uint256 transferTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(src, vToken);\\n            prime.accrueInterestAndUpdateScore(dst, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to borrow the underlying asset of the given market\\n     * @param vToken The market to verify the borrow against\\n     * @param borrower The account which would borrow the asset\\n     * @param borrowAmount The amount of underlying the account would borrow\\n     * @custom:error ActionPaused error is thrown if borrowing is paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if there is not enough collateral to borrow\\n     * @custom:error BorrowCapExceeded is thrown if the borrow cap will be exceeded should this borrow succeed\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted if vToken is enabled as collateral, otherwise only vToken\\n     */\\n    /// disable-eslint\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external override {\\n        _checkActionPauseState(vToken, Action.BORROW);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (!markets[vToken].accountMembership[borrower]) {\\n            // only vTokens may call borrowAllowed if borrower not in market\\n            _checkSenderIs(vToken);\\n\\n            // attempt to add borrower to the market or revert\\n            _addToMarket(VToken(msg.sender), borrower);\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (oracle.getUnderlyingPrice(vToken) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 borrowCap = borrowCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (borrowCap != type(uint256).max) {\\n            uint256 totalBorrows = VToken(vToken).totalBorrows();\\n            uint256 badDebt = VToken(vToken).badDebt();\\n            uint256 nextTotalBorrows = totalBorrows + borrowAmount + badDebt;\\n            if (nextTotalBorrows > borrowCap) {\\n                revert BorrowCapExceeded(vToken, borrowCap);\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            borrower,\\n            VToken(vToken),\\n            0,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n\\n        Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates borrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset whose underlying is being borrowed\\n     * @param borrower The address borrowing the underlying\\n     * @param borrowAmount The amount of the underlying asset requested to borrow\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function borrowVerify(address vToken, address borrower, uint256 borrowAmount) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to repay a borrow in the given market\\n     * @param vToken The market to verify the repay against\\n     * @param borrower The account which would borrowed the asset\\n     * @custom:error ActionPaused error is thrown if repayments are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:access Not restricted\\n     */\\n    function preRepayHook(address vToken, address borrower) external override {\\n        _checkActionPauseState(vToken, Action.REPAY);\\n\\n        oracle.updatePrice(vToken);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the liquidation should be allowed to occur\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param borrower The address of the borrower\\n     * @param repayAmount The amount of underlying being repaid\\n     * @param skipLiquidityCheck Allows the borrow to be liquidated regardless of the account liquidity\\n     * @custom:error ActionPaused error is thrown if liquidations are paused in this market\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error TooMuchRepay error is thrown if the liquidator is trying to repay more than allowed by close factor\\n     * @custom:error MinimalCollateralViolated is thrown if the users' total collateral is lower than the threshold for non-batch liquidations\\n     * @custom:error InsufficientShortfall is thrown when trying to liquidate a healthy account\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     */\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        // Pause Action.LIQUIDATE on BORROWED TOKEN to prevent liquidating it.\\n        // If we want to pause liquidating to vTokenCollateral, we should pause\\n        // Action.SEIZE on it\\n        _checkActionPauseState(vTokenBorrowed, Action.LIQUIDATE);\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(address(vTokenBorrowed));\\n        }\\n        if (!markets[vTokenCollateral].isListed) {\\n            revert MarketNotListed(address(vTokenCollateral));\\n        }\\n\\n        uint256 borrowBalance = VToken(vTokenBorrowed).borrowBalanceStored(borrower);\\n\\n        /* Allow accounts to be liquidated if it is a forced liquidation */\\n        if (skipLiquidityCheck || isForcedLiquidationEnabled[vTokenBorrowed]) {\\n            if (repayAmount > borrowBalance) {\\n                revert TooMuchRepay();\\n            }\\n            return;\\n        }\\n\\n        /* The borrower must have shortfall and collateral > threshold in order to be liquidatable */\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral <= minLiquidatableCollateral) {\\n            /* The liquidator should use either liquidateAccount or healAccount */\\n            revert MinimalCollateralViolated(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        /* The liquidator may not repay more than what is allowed by the closeFactor */\\n        uint256 maxClose = mul_ScalarTruncate(Exp({ mantissa: closeFactorMantissa }), borrowBalance);\\n        if (repayAmount > maxClose) {\\n            revert TooMuchRepay();\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the seizing of assets should be allowed to occur\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param seizerContract Contract that tries to seize the asset (either borrowed vToken or Comptroller)\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @custom:error ActionPaused error is thrown if seizing this type of collateral is paused\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error ComptrollerMismatch error is when seizer contract or seized asset belong to different pools\\n     * @custom:access Not restricted\\n     */\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address seizerContract,\\n        address liquidator,\\n        address borrower\\n    ) external override {\\n        // Pause Action.SEIZE on COLLATERAL to prevent seizing it.\\n        // If we want to pause liquidating vTokenBorrowed, we should pause\\n        // Action.LIQUIDATE on it\\n        _checkActionPauseState(vTokenCollateral, Action.SEIZE);\\n\\n        Market storage market = markets[vTokenCollateral];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(vTokenCollateral);\\n        }\\n\\n        if (seizerContract == address(this)) {\\n            // If Comptroller is the seizer, just check if collateral's comptroller\\n            // is equal to the current address\\n            if (address(VToken(vTokenCollateral).comptroller()) != address(this)) {\\n                revert ComptrollerMismatch();\\n            }\\n        } else {\\n            // If the seizer is not the Comptroller, check that the seizer is a\\n            // listed market, and that the markets' comptrollers match\\n            if (!markets[seizerContract].isListed) {\\n                revert MarketNotListed(seizerContract);\\n            }\\n            if (VToken(vTokenCollateral).comptroller() != VToken(seizerContract).comptroller()) {\\n                revert ComptrollerMismatch();\\n            }\\n        }\\n\\n        if (!market.accountMembership[borrower]) {\\n            revert MarketNotCollateral(vTokenCollateral, borrower);\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vTokenCollateral);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, borrower);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, liquidator);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to transfer tokens in the given market\\n     * @param vToken The market to verify the transfer against\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external override {\\n        _checkActionPauseState(vToken, Action.TRANSFER);\\n\\n        // Currently the only consideration is whether or not\\n        //  the src is allowed to redeem this many tokens\\n        _checkRedeemAllowed(vToken, src, transferTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, src);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, dst);\\n        }\\n    }\\n\\n    /*** Pool-level operations ***/\\n\\n    /**\\n     * @notice Seizes all the remaining collateral, makes msg.sender repay the existing\\n     *   borrows, and treats the rest of the debt as bad debt (for each market).\\n     *   The sender has to repay a certain percentage of the debt, computed as\\n     *   collateral / (borrows * liquidationIncentive).\\n     * @param user account to heal\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for healing\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function healAccount(address user) external {\\n        VToken[] memory userAssets = getAssetsIn(user);\\n        uint256 userAssetsCount = userAssets.length;\\n\\n        address liquidator = msg.sender;\\n        {\\n            ResilientOracleInterface oracle_ = oracle;\\n            // We need all user's markets to be fresh for the computations to be correct\\n            for (uint256 i; i < userAssetsCount; ++i) {\\n                userAssets[i].accrueInterest();\\n                oracle_.updatePrice(address(userAssets[i]));\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(user, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        // percentage = collateral / (borrows * liquidation incentive)\\n        Exp memory collateral = Exp({ mantissa: snapshot.totalCollateral });\\n        Exp memory scaledBorrows = mul_(\\n            Exp({ mantissa: snapshot.borrows }),\\n            Exp({ mantissa: liquidationIncentiveMantissa })\\n        );\\n\\n        Exp memory percentage = div_(collateral, scaledBorrows);\\n        if (lessThanExp(Exp({ mantissa: MANTISSA_ONE }), percentage)) {\\n            revert CollateralExceedsThreshold(scaledBorrows.mantissa, collateral.mantissa);\\n        }\\n\\n        for (uint256 i; i < userAssetsCount; ++i) {\\n            VToken market = userAssets[i];\\n\\n            (uint256 tokens, uint256 borrowBalance, ) = _safeGetAccountSnapshot(market, user);\\n            uint256 repaymentAmount = mul_ScalarTruncate(percentage, borrowBalance);\\n\\n            // Seize the entire collateral\\n            if (tokens != 0) {\\n                market.seize(liquidator, user, tokens);\\n            }\\n            // Repay a certain percentage of the borrow, forgive the rest\\n            if (borrowBalance != 0) {\\n                market.healBorrow(liquidator, user, repaymentAmount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Liquidates all borrows of the borrower. Callable only if the collateral is less than\\n     *   a predefined threshold, and the account collateral can be seized to cover all borrows. If\\n     *   the collateral is higher than the threshold, use regular liquidations. If the collateral is\\n     *   below the threshold, and the account is insolvent, use healAccount.\\n     * @param borrower the borrower address\\n     * @param orders an array of liquidation orders\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for a batch liquidation\\n     * @custom:error InsufficientCollateral error is thrown when there is not enough collateral to cover the debt\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function liquidateAccount(address borrower, LiquidationOrder[] calldata orders) external {\\n        // We will accrue interest and update the oracle prices later during the liquidation\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            // You should use the regular vToken.liquidateBorrow(...) call\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        uint256 collateralToSeize = mul_ScalarTruncate(\\n            Exp({ mantissa: liquidationIncentiveMantissa }),\\n            snapshot.borrows\\n        );\\n        if (collateralToSeize >= snapshot.totalCollateral) {\\n            // There is not enough collateral to seize. Use healBorrow to repay some part of the borrow\\n            // and record bad debt.\\n            revert InsufficientCollateral(collateralToSeize, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        uint256 ordersCount = orders.length;\\n\\n        _ensureMaxLoops(ordersCount / 2);\\n\\n        for (uint256 i; i < ordersCount; ++i) {\\n            if (!markets[address(orders[i].vTokenBorrowed)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenBorrowed));\\n            }\\n            if (!markets[address(orders[i].vTokenCollateral)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenCollateral));\\n            }\\n\\n            LiquidationOrder calldata order = orders[i];\\n            order.vTokenBorrowed.forceLiquidateBorrow(\\n                msg.sender,\\n                borrower,\\n                order.repayAmount,\\n                order.vTokenCollateral,\\n                true\\n            );\\n        }\\n\\n        VToken[] memory borrowMarkets = getAssetsIn(borrower);\\n        uint256 marketsCount = borrowMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            (, uint256 borrowBalance, ) = _safeGetAccountSnapshot(borrowMarkets[i], borrower);\\n            require(borrowBalance == 0, \\\"Nonzero borrow balance after liquidation\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets the closeFactor to use when liquidating borrows\\n     * @param newCloseFactorMantissa New close factor, scaled by 1e18\\n     * @custom:event Emits NewCloseFactor on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCloseFactor(uint256 newCloseFactorMantissa) external {\\n        _checkAccessAllowed(\\\"setCloseFactor(uint256)\\\");\\n        require(MAX_CLOSE_FACTOR_MANTISSA >= newCloseFactorMantissa, \\\"Close factor greater than maximum close factor\\\");\\n        require(MIN_CLOSE_FACTOR_MANTISSA <= newCloseFactorMantissa, \\\"Close factor smaller than minimum close factor\\\");\\n\\n        uint256 oldCloseFactorMantissa = closeFactorMantissa;\\n        closeFactorMantissa = newCloseFactorMantissa;\\n        emit NewCloseFactor(oldCloseFactorMantissa, newCloseFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Sets the collateralFactor for a market\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param vToken The market to set the factor on\\n     * @param newCollateralFactorMantissa The new collateral factor, scaled by 1e18\\n     * @param newLiquidationThresholdMantissa The new liquidation threshold, scaled by 1e18\\n     * @custom:event Emits NewCollateralFactor when collateral factor is updated\\n     *    and NewLiquidationThreshold when liquidation threshold is updated\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InvalidCollateralFactor error is thrown when collateral factor is too high\\n     * @custom:error InvalidLiquidationThreshold error is thrown when liquidation threshold is lower than collateral factor\\n     * @custom:error PriceError is thrown when the oracle returns an invalid price for the asset\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCollateralFactor(\\n        VToken vToken,\\n        uint256 newCollateralFactorMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    ) external {\\n        _checkAccessAllowed(\\\"setCollateralFactor(address,uint256,uint256)\\\");\\n\\n        // Verify market is listed\\n        Market storage market = markets[address(vToken)];\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Check collateral factor <= 0.9\\n        if (newCollateralFactorMantissa > MAX_COLLATERAL_FACTOR_MANTISSA) {\\n            revert InvalidCollateralFactor();\\n        }\\n\\n        // Ensure that liquidation threshold <= 1\\n        if (newLiquidationThresholdMantissa > MANTISSA_ONE) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // Ensure that liquidation threshold >= CF\\n        if (newLiquidationThresholdMantissa < newCollateralFactorMantissa) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // If collateral factor != 0, fail if price == 0\\n        if (newCollateralFactorMantissa != 0 && oracle.getUnderlyingPrice(address(vToken)) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 oldCollateralFactorMantissa = market.collateralFactorMantissa;\\n        if (newCollateralFactorMantissa != oldCollateralFactorMantissa) {\\n            market.collateralFactorMantissa = newCollateralFactorMantissa;\\n            emit NewCollateralFactor(vToken, oldCollateralFactorMantissa, newCollateralFactorMantissa);\\n        }\\n\\n        uint256 oldLiquidationThresholdMantissa = market.liquidationThresholdMantissa;\\n        if (newLiquidationThresholdMantissa != oldLiquidationThresholdMantissa) {\\n            market.liquidationThresholdMantissa = newLiquidationThresholdMantissa;\\n            emit NewLiquidationThreshold(vToken, oldLiquidationThresholdMantissa, newLiquidationThresholdMantissa);\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets liquidationIncentive\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newLiquidationIncentiveMantissa New liquidationIncentive scaled by 1e18\\n     * @custom:event Emits NewLiquidationIncentive on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setLiquidationIncentive(uint256 newLiquidationIncentiveMantissa) external {\\n        require(newLiquidationIncentiveMantissa >= MANTISSA_ONE, \\\"liquidation incentive should be greater than 1e18\\\");\\n\\n        _checkAccessAllowed(\\\"setLiquidationIncentive(uint256)\\\");\\n\\n        // Save current value for use in log\\n        uint256 oldLiquidationIncentiveMantissa = liquidationIncentiveMantissa;\\n\\n        // Set liquidation incentive to new incentive\\n        liquidationIncentiveMantissa = newLiquidationIncentiveMantissa;\\n\\n        // Emit event with old incentive, new incentive\\n        emit NewLiquidationIncentive(oldLiquidationIncentiveMantissa, newLiquidationIncentiveMantissa);\\n    }\\n\\n    /**\\n     * @notice Add the market to the markets mapping and set it as listed\\n     * @dev Only callable by the PoolRegistry\\n     * @param vToken The address of the market (token) to list\\n     * @custom:error MarketAlreadyListed is thrown if the market is already listed in this pool\\n     * @custom:access Only PoolRegistry\\n     */\\n    function supportMarket(VToken vToken) external {\\n        _checkSenderIs(poolRegistry);\\n\\n        if (markets[address(vToken)].isListed) {\\n            revert MarketAlreadyListed(address(vToken));\\n        }\\n\\n        require(vToken.isVToken(), \\\"Comptroller: Invalid vToken\\\"); // Sanity check to make sure its really a VToken\\n\\n        Market storage newMarket = markets[address(vToken)];\\n        newMarket.isListed = true;\\n        newMarket.collateralFactorMantissa = 0;\\n        newMarket.liquidationThresholdMantissa = 0;\\n\\n        _addMarket(address(vToken));\\n\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            rewardsDistributors[i].initializeMarket(address(vToken));\\n        }\\n\\n        emit MarketSupported(vToken);\\n    }\\n\\n    /**\\n     * @notice Set the given borrow caps for the given vToken markets. Borrowing that brings total borrows to or above borrow cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A borrow cap of type(uint256).max corresponds to unlimited borrowing.\\n     * @dev Borrow caps smaller than the current total borrows are accepted. This way, new borrows will not be allowed\\n            until the total borrows amount goes below the new borrow cap\\n     * @param vTokens The addresses of the markets (tokens) to change the borrow caps for\\n     * @param newBorrowCaps The new borrow cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited borrowing.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketBorrowCaps(VToken[] calldata vTokens, uint256[] calldata newBorrowCaps) external {\\n        _checkAccessAllowed(\\\"setMarketBorrowCaps(address[],uint256[])\\\");\\n\\n        uint256 numMarkets = vTokens.length;\\n        uint256 numBorrowCaps = newBorrowCaps.length;\\n\\n        require(numMarkets != 0 && numMarkets == numBorrowCaps, \\\"invalid input\\\");\\n\\n        _ensureMaxLoops(numMarkets);\\n\\n        for (uint256 i; i < numMarkets; ++i) {\\n            borrowCaps[address(vTokens[i])] = newBorrowCaps[i];\\n            emit NewBorrowCap(vTokens[i], newBorrowCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given supply caps for the given vToken markets. Supply that brings total Supply to or above supply cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A supply cap of type(uint256).max corresponds to unlimited supply.\\n     * @dev Supply caps smaller than the current total supplies are accepted. This way, new supplies will not be allowed\\n            until the total supplies amount goes below the new supply cap\\n     * @param vTokens The addresses of the markets (tokens) to change the supply caps for\\n     * @param newSupplyCaps The new supply cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited supply.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketSupplyCaps(VToken[] calldata vTokens, uint256[] calldata newSupplyCaps) external {\\n        _checkAccessAllowed(\\\"setMarketSupplyCaps(address[],uint256[])\\\");\\n        uint256 vTokensCount = vTokens.length;\\n\\n        require(vTokensCount != 0, \\\"invalid number of markets\\\");\\n        require(vTokensCount == newSupplyCaps.length, \\\"invalid number of markets\\\");\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            supplyCaps[address(vTokens[i])] = newSupplyCaps[i];\\n            emit NewSupplyCap(vTokens[i], newSupplyCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Pause/unpause specified actions\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param marketsList Markets to pause/unpause the actions on\\n     * @param actionsList List of action ids to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setActionsPaused(VToken[] calldata marketsList, Action[] calldata actionsList, bool paused) external {\\n        _checkAccessAllowed(\\\"setActionsPaused(address[],uint256[],bool)\\\");\\n\\n        uint256 marketsCount = marketsList.length;\\n        uint256 actionsCount = actionsList.length;\\n\\n        _ensureMaxLoops(marketsCount * actionsCount);\\n\\n        for (uint256 marketIdx; marketIdx < marketsCount; ++marketIdx) {\\n            for (uint256 actionIdx; actionIdx < actionsCount; ++actionIdx) {\\n                _setActionPaused(address(marketsList[marketIdx]), actionsList[actionIdx], paused);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given collateral threshold for non-batch liquidations. Regular liquidations\\n     *   will fail if the collateral amount is less than this threshold. Liquidators should use batch\\n     *   operations like liquidateAccount or healAccount.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newMinLiquidatableCollateral The new min liquidatable collateral (in USD).\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMinLiquidatableCollateral(uint256 newMinLiquidatableCollateral) external {\\n        _checkAccessAllowed(\\\"setMinLiquidatableCollateral(uint256)\\\");\\n\\n        uint256 oldMinLiquidatableCollateral = minLiquidatableCollateral;\\n        minLiquidatableCollateral = newMinLiquidatableCollateral;\\n        emit NewMinLiquidatableCollateral(oldMinLiquidatableCollateral, newMinLiquidatableCollateral);\\n    }\\n\\n    /**\\n     * @notice Add a new RewardsDistributor and initialize it with all markets. We can add several RewardsDistributor\\n     * contracts with the same rewardToken, and there could be overlaping among them considering the last reward slot (block or second)\\n     * @dev Only callable by the admin\\n     * @param _rewardsDistributor Address of the RewardDistributor contract to add\\n     * @custom:access Only Governance\\n     * @custom:event Emits NewRewardsDistributor with distributor address\\n     */\\n    function addRewardsDistributor(RewardsDistributor _rewardsDistributor) external onlyOwner {\\n        require(!rewardsDistributorExists[address(_rewardsDistributor)], \\\"already exists\\\");\\n\\n        uint256 rewardsDistributorsLen = rewardsDistributors.length;\\n        _ensureMaxLoops(rewardsDistributorsLen + 1);\\n\\n        rewardsDistributors.push(_rewardsDistributor);\\n        rewardsDistributorExists[address(_rewardsDistributor)] = true;\\n\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            _rewardsDistributor.initializeMarket(address(allMarkets[i]));\\n        }\\n\\n        emit NewRewardsDistributor(address(_rewardsDistributor), address(_rewardsDistributor.rewardToken()));\\n    }\\n\\n    /**\\n     * @notice Sets a new price oracle for the Comptroller\\n     * @dev Only callable by the admin\\n     * @param newOracle Address of the new price oracle to set\\n     * @custom:event Emits NewPriceOracle on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when the new oracle address is zero\\n     */\\n    function setPriceOracle(ResilientOracleInterface newOracle) external onlyOwner {\\n        ensureNonzeroAddress(address(newOracle));\\n\\n        ResilientOracleInterface oldOracle = oracle;\\n        oracle = newOracle;\\n        emit NewPriceOracle(oldOracle, newOracle);\\n    }\\n\\n    /**\\n     * @notice Set the for loop iteration limit to avoid DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Sets the prime token contract for the comptroller\\n     * @param _prime Address of the Prime contract\\n     */\\n    function setPrimeToken(IPrime _prime) external onlyOwner {\\n        ensureNonzeroAddress(address(_prime));\\n\\n        emit NewPrimeToken(prime, _prime);\\n        prime = _prime;\\n    }\\n\\n    /**\\n     * @notice Enables forced liquidations for a market. If forced liquidation is enabled,\\n     * borrows in the market may be liquidated regardless of the account liquidity\\n     * @param vTokenBorrowed Borrowed vToken\\n     * @param enable Whether to enable forced liquidations\\n     */\\n    function setForcedLiquidation(address vTokenBorrowed, bool enable) external {\\n        _checkAccessAllowed(\\\"setForcedLiquidation(address,bool)\\\");\\n        ensureNonzeroAddress(vTokenBorrowed);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(vTokenBorrowed);\\n        }\\n\\n        isForcedLiquidationEnabled[vTokenBorrowed] = enable;\\n        emit IsForcedLiquidationEnabledUpdated(vTokenBorrowed, enable);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to liquidation threshold requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of liquidation threshold requirements,\\n     * @return shortfall Account shortfall below liquidation threshold requirements\\n     */\\n    function getAccountLiquidity(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getLiquidationThreshold);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to collateral requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of collateral requirements,\\n     * @return shortfall Account shortfall below collateral requirements\\n     */\\n    function getBorrowingPower(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getCollateralFactor);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine what the account liquidity would be if the given amounts were redeemed/borrowed\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Hypothetical account liquidity in excess of collateral requirements,\\n     * @return shortfall Hypothetical account shortfall below collateral requirements\\n     */\\n    function getHypotheticalAccountLiquidity(\\n        address account,\\n        address vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            account,\\n            VToken(vTokenModify),\\n            redeemTokens,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Return all of the markets\\n     * @dev The automatic getter may be used to access an individual market.\\n     * @return markets The list of market addresses\\n     */\\n    function getAllMarkets() external view override returns (VToken[] memory) {\\n        return allMarkets;\\n    }\\n\\n    /**\\n     * @notice Check if a market is marked as listed (active)\\n     * @param vToken vToken Address for the market to check\\n     * @return listed True if listed otherwise false\\n     */\\n    function isMarketListed(VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].isListed;\\n    }\\n\\n    /*** Assets You Are In ***/\\n\\n    /**\\n     * @notice Returns whether the given account is entered in a given market\\n     * @param account The address of the account to check\\n     * @param vToken The vToken to check\\n     * @return True if the account is in the market specified, otherwise false.\\n     */\\n    function checkMembership(address account, VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].accountMembership[account];\\n    }\\n\\n    /**\\n     * @notice Calculate number of tokens of collateral asset to seize given an underlying amount\\n     * @dev Used in liquidation (called in vToken.liquidateBorrowFresh)\\n     * @param vTokenBorrowed The address of the borrowed vToken\\n     * @param vTokenCollateral The address of the collateral vToken\\n     * @param actualRepayAmount The amount of vTokenBorrowed underlying to convert into vTokenCollateral tokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return tokensToSeize Number of vTokenCollateral tokens to be seized in a liquidation\\n     * @custom:error PriceError if the oracle returns an invalid price\\n     */\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 actualRepayAmount\\n    ) external view override returns (uint256 error, uint256 tokensToSeize) {\\n        /* Read oracle prices for borrowed and collateral markets */\\n        uint256 priceBorrowedMantissa = _safeGetUnderlyingPrice(VToken(vTokenBorrowed));\\n        uint256 priceCollateralMantissa = _safeGetUnderlyingPrice(VToken(vTokenCollateral));\\n\\n        /*\\n         * Get the exchange rate and calculate the number of collateral tokens to seize:\\n         *  seizeAmount = actualRepayAmount * liquidationIncentive * priceBorrowed / priceCollateral\\n         *  seizeTokens = seizeAmount / exchangeRate\\n         *   = actualRepayAmount * (liquidationIncentive * priceBorrowed) / (priceCollateral * exchangeRate)\\n         */\\n        uint256 exchangeRateMantissa = VToken(vTokenCollateral).exchangeRateStored(); // Note: reverts on error\\n        uint256 seizeTokens;\\n        Exp memory numerator;\\n        Exp memory denominator;\\n        Exp memory ratio;\\n\\n        numerator = mul_(Exp({ mantissa: liquidationIncentiveMantissa }), Exp({ mantissa: priceBorrowedMantissa }));\\n        denominator = mul_(Exp({ mantissa: priceCollateralMantissa }), Exp({ mantissa: exchangeRateMantissa }));\\n        ratio = div_(numerator, denominator);\\n\\n        seizeTokens = mul_ScalarTruncate(ratio, actualRepayAmount);\\n\\n        return (NO_ERROR, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Returns reward speed given a vToken\\n     * @param vToken The vToken to get the reward speeds for\\n     * @return rewardSpeeds Array of total supply and borrow speeds and reward token for all reward distributors\\n     */\\n    function getRewardsByMarket(address vToken) external view returns (RewardSpeeds[] memory rewardSpeeds) {\\n        uint256 rewardsDistributorsLength = rewardsDistributors.length;\\n        rewardSpeeds = new RewardSpeeds[](rewardsDistributorsLength);\\n        for (uint256 i; i < rewardsDistributorsLength; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            address rewardToken = address(rewardsDistributor.rewardToken());\\n            rewardSpeeds[i] = RewardSpeeds({\\n                rewardToken: rewardToken,\\n                supplySpeed: rewardsDistributor.rewardTokenSupplySpeeds(vToken),\\n                borrowSpeed: rewardsDistributor.rewardTokenBorrowSpeeds(vToken)\\n            });\\n        }\\n        return rewardSpeeds;\\n    }\\n\\n    /**\\n     * @notice Return all reward distributors for this pool\\n     * @return Array of RewardDistributor addresses\\n     */\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory) {\\n        return rewardsDistributors;\\n    }\\n\\n    /**\\n     * @notice A marker method that returns true for a valid Comptroller contract\\n     * @return Always true\\n     */\\n    function isComptroller() external pure override returns (bool) {\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Update the prices of all the tokens associated with the provided account\\n     * @param account Address of the account to get associated tokens with\\n     */\\n    function updatePrices(address account) public {\\n        VToken[] memory vTokens = getAssetsIn(account);\\n        uint256 vTokensCount = vTokens.length;\\n\\n        ResilientOracleInterface oracle_ = oracle;\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            oracle_.updatePrice(address(vTokens[i]));\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if a certain action is paused on a market\\n     * @param market vToken address\\n     * @param action Action to check\\n     * @return paused True if the action is paused otherwise false\\n     */\\n    function actionPaused(address market, Action action) public view returns (bool) {\\n        return _actionPaused[market][action];\\n    }\\n\\n    /**\\n     * @notice Returns the assets an account has entered\\n     * @param account The address of the account to pull assets for\\n     * @return A list with the assets the account has entered\\n     */\\n    function getAssetsIn(address account) public view returns (VToken[] memory) {\\n        uint256 len;\\n        VToken[] memory _accountAssets = accountAssets[account];\\n        uint256 _accountAssetsLength = _accountAssets.length;\\n\\n        VToken[] memory assetsIn = new VToken[](_accountAssetsLength);\\n\\n        for (uint256 i; i < _accountAssetsLength; ++i) {\\n            Market storage market = markets[address(_accountAssets[i])];\\n            if (market.isListed) {\\n                assetsIn[len] = _accountAssets[i];\\n                ++len;\\n            }\\n        }\\n\\n        assembly {\\n            mstore(assetsIn, len)\\n        }\\n\\n        return assetsIn;\\n    }\\n\\n    /**\\n     * @notice Add the market to the borrower's \\\"assets in\\\" for liquidity calculations\\n     * @param vToken The market to enter\\n     * @param borrower The address of the account to modify\\n     */\\n    function _addToMarket(VToken vToken, address borrower) internal {\\n        _checkActionPauseState(address(vToken), Action.ENTER_MARKET);\\n        Market storage marketToJoin = markets[address(vToken)];\\n\\n        if (!marketToJoin.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (marketToJoin.accountMembership[borrower]) {\\n            // already joined\\n            return;\\n        }\\n\\n        // survived the gauntlet, add to list\\n        // NOTE: we store these somewhat redundantly as a significant optimization\\n        //  this avoids having to iterate through the list for the most common use cases\\n        //  that is, only when we need to perform liquidity checks\\n        //  and not whenever we want to check if an account is in a particular market\\n        marketToJoin.accountMembership[borrower] = true;\\n        accountAssets[borrower].push(vToken);\\n\\n        emit MarketEntered(vToken, borrower);\\n    }\\n\\n    /**\\n     * @notice Internal function to validate that a market hasn't already been added\\n     * and if it hasn't adds it\\n     * @param vToken The market to support\\n     */\\n    function _addMarket(address vToken) internal {\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            if (allMarkets[i] == VToken(vToken)) {\\n                revert MarketAlreadyListed(vToken);\\n            }\\n        }\\n        allMarkets.push(VToken(vToken));\\n        marketsCount = allMarkets.length;\\n        _ensureMaxLoops(marketsCount);\\n    }\\n\\n    /**\\n     * @dev Pause/unpause an action on a market\\n     * @param market Market to pause/unpause the action on\\n     * @param action Action id to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     */\\n    function _setActionPaused(address market, Action action, bool paused) internal {\\n        require(markets[market].isListed, \\\"cannot pause a market that is not listed\\\");\\n        _actionPaused[market][action] = paused;\\n        emit ActionPausedMarket(VToken(market), action, paused);\\n    }\\n\\n    /**\\n     * @dev Internal function to check that vTokens can be safely redeemed for the underlying asset.\\n     * @param vToken Address of the vTokens to redeem\\n     * @param redeemer Account redeeming the tokens\\n     * @param redeemTokens The number of tokens to redeem\\n     */\\n    function _checkRedeemAllowed(address vToken, address redeemer, uint256 redeemTokens) internal {\\n        Market storage market = markets[vToken];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        /* If the redeemer is not 'in' the market, then we can bypass the liquidity check */\\n        if (!market.accountMembership[redeemer]) {\\n            return;\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(redeemer);\\n\\n        /* Otherwise, perform a hypothetical liquidity check to guard against shortfall */\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            redeemer,\\n            VToken(vToken),\\n            redeemTokens,\\n            0,\\n            _getCollateralFactor\\n        );\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n    }\\n\\n    /**\\n     * @notice Get the total collateral, weighted collateral, borrow balance, liquidity, shortfall\\n     * @param account The account to get the snapshot for\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n     *  liquidation threshold. Accepts the address of the vToken and returns the weight as Exp.\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getCurrentLiquiditySnapshot(\\n        address account,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        return _getHypotheticalLiquiditySnapshot(account, VToken(address(0)), 0, 0, weight);\\n    }\\n\\n    /**\\n     * @notice Determine what the supply/borrow balances would be if the given amounts were redeemed/borrowed\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n         liquidation threshold. Accepts the address of the VToken and returns the weight\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getHypotheticalLiquiditySnapshot(\\n        address account,\\n        VToken vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        // For each asset the account is in\\n        VToken[] memory assets = getAssetsIn(account);\\n        uint256 assetsCount = assets.length;\\n\\n        for (uint256 i; i < assetsCount; ++i) {\\n            VToken asset = assets[i];\\n\\n            // Read the balances and exchange rate from the vToken\\n            (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) = _safeGetAccountSnapshot(\\n                asset,\\n                account\\n            );\\n\\n            // Get the normalized price of the asset\\n            Exp memory oraclePrice = Exp({ mantissa: _safeGetUnderlyingPrice(asset) });\\n\\n            // Pre-compute conversion factors from vTokens -> usd\\n            Exp memory vTokenPrice = mul_(Exp({ mantissa: exchangeRateMantissa }), oraclePrice);\\n            Exp memory weightedVTokenPrice = mul_(weight(asset), vTokenPrice);\\n\\n            // weightedCollateral += weightedVTokenPrice * vTokenBalance\\n            snapshot.weightedCollateral = mul_ScalarTruncateAddUInt(\\n                weightedVTokenPrice,\\n                vTokenBalance,\\n                snapshot.weightedCollateral\\n            );\\n\\n            // totalCollateral += vTokenPrice * vTokenBalance\\n            snapshot.totalCollateral = mul_ScalarTruncateAddUInt(vTokenPrice, vTokenBalance, snapshot.totalCollateral);\\n\\n            // borrows += oraclePrice * borrowBalance\\n            snapshot.borrows = mul_ScalarTruncateAddUInt(oraclePrice, borrowBalance, snapshot.borrows);\\n\\n            // Calculate effects of interacting with vTokenModify\\n            if (asset == vTokenModify) {\\n                // redeem effect\\n                // effects += tokensToDenom * redeemTokens\\n                snapshot.effects = mul_ScalarTruncateAddUInt(weightedVTokenPrice, redeemTokens, snapshot.effects);\\n\\n                // borrow effect\\n                // effects += oraclePrice * borrowAmount\\n                snapshot.effects = mul_ScalarTruncateAddUInt(oraclePrice, borrowAmount, snapshot.effects);\\n            }\\n        }\\n\\n        uint256 borrowPlusEffects = snapshot.borrows + snapshot.effects;\\n        // These are safe, as the underflow condition is checked first\\n        unchecked {\\n            if (snapshot.weightedCollateral > borrowPlusEffects) {\\n                snapshot.liquidity = snapshot.weightedCollateral - borrowPlusEffects;\\n                snapshot.shortfall = 0;\\n            } else {\\n                snapshot.liquidity = 0;\\n                snapshot.shortfall = borrowPlusEffects - snapshot.weightedCollateral;\\n            }\\n        }\\n\\n        return snapshot;\\n    }\\n\\n    /**\\n     * @dev Retrieves price from oracle for an asset and checks it is nonzero\\n     * @param asset Address for asset to query price\\n     * @return Underlying price\\n     */\\n    function _safeGetUnderlyingPrice(VToken asset) internal view returns (uint256) {\\n        uint256 oraclePriceMantissa = oracle.getUnderlyingPrice(address(asset));\\n        if (oraclePriceMantissa == 0) {\\n            revert PriceError(address(asset));\\n        }\\n        return oraclePriceMantissa;\\n    }\\n\\n    /**\\n     * @dev Return collateral factor for a market\\n     * @param asset Address for asset\\n     * @return Collateral factor as exponential\\n     */\\n    function _getCollateralFactor(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].collateralFactorMantissa });\\n    }\\n\\n    /**\\n     * @dev Retrieves liquidation threshold for a market as an exponential\\n     * @param asset Address for asset to liquidation threshold\\n     * @return Liquidation threshold as exponential\\n     */\\n    function _getLiquidationThreshold(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].liquidationThresholdMantissa });\\n    }\\n\\n    /**\\n     * @dev Returns supply and borrow balances of user in vToken, reverts on failure\\n     * @param vToken Market to query\\n     * @param user Account address\\n     * @return vTokenBalance Balance of vTokens, the same as vToken.balanceOf(user)\\n     * @return borrowBalance Borrowed amount, including the interest\\n     * @return exchangeRateMantissa Stored exchange rate\\n     */\\n    function _safeGetAccountSnapshot(\\n        VToken vToken,\\n        address user\\n    ) internal view returns (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) {\\n        uint256 err;\\n        (err, vTokenBalance, borrowBalance, exchangeRateMantissa) = vToken.getAccountSnapshot(user);\\n        if (err != 0) {\\n            revert SnapshotError(address(vToken), user);\\n        }\\n        return (vTokenBalance, borrowBalance, exchangeRateMantissa);\\n    }\\n\\n    /// @notice Reverts if the call is not from expectedSender\\n    /// @param expectedSender Expected transaction sender\\n    function _checkSenderIs(address expectedSender) internal view {\\n        if (msg.sender != expectedSender) {\\n            revert UnexpectedSender(expectedSender, msg.sender);\\n        }\\n    }\\n\\n    /// @notice Reverts if a certain action is paused on a market\\n    /// @param market Market to check\\n    /// @param action Action to check\\n    function _checkActionPauseState(address market, Action action) private view {\\n        if (actionPaused(market, action)) {\\n            revert ActionPaused(market, action);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x7c6e1c6264e4681f82a9ac1bcd9155197a930033291ee5561ad97a56006f5e9c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\n\\nenum Action {\\n    MINT,\\n    REDEEM,\\n    BORROW,\\n    REPAY,\\n    SEIZE,\\n    LIQUIDATE,\\n    TRANSFER,\\n    ENTER_MARKET,\\n    EXIT_MARKET\\n}\\n\\n/**\\n * @title ComptrollerInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract.\\n */\\ninterface ComptrollerInterface {\\n    /*** Assets You Are In ***/\\n\\n    function enterMarkets(address[] calldata vTokens) external returns (uint256[] memory);\\n\\n    function exitMarket(address vToken) external returns (uint256);\\n\\n    /*** Policy Hooks ***/\\n\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external;\\n\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external;\\n\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external;\\n\\n    function preRepayHook(address vToken, address borrower) external;\\n\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external;\\n\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower\\n    ) external;\\n\\n    function borrowVerify(address vToken, address borrower, uint borrowAmount) external;\\n\\n    function mintVerify(address vToken, address minter, uint mintAmount, uint mintTokens) external;\\n\\n    function redeemVerify(address vToken, address redeemer, uint redeemAmount, uint redeemTokens) external;\\n\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer,\\n        address borrower,\\n        uint repayAmount,\\n        uint borrowerIndex\\n    ) external;\\n\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address liquidator,\\n        address borrower,\\n        uint repayAmount,\\n        uint seizeTokens\\n    ) external;\\n\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower,\\n        uint seizeTokens\\n    ) external;\\n\\n    function transferVerify(address vToken, address src, address dst, uint transferTokens) external;\\n\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external;\\n\\n    function isComptroller() external view returns (bool);\\n\\n    /*** Liquidity/Liquidation Calculations ***/\\n\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 repayAmount\\n    ) external view returns (uint256, uint256);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function actionPaused(address market, Action action) external view returns (bool);\\n}\\n\\n/**\\n * @title ComptrollerViewInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract, including only some util view functions.\\n */\\ninterface ComptrollerViewInterface {\\n    function markets(address) external view returns (bool, uint256);\\n\\n    function oracle() external view returns (ResilientOracleInterface);\\n\\n    function getAssetsIn(address) external view returns (VToken[] memory);\\n\\n    function closeFactorMantissa() external view returns (uint256);\\n\\n    function liquidationIncentiveMantissa() external view returns (uint256);\\n\\n    function minLiquidatableCollateral() external view returns (uint256);\\n\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function borrowCaps(address) external view returns (uint256);\\n\\n    function supplyCaps(address) external view returns (uint256);\\n\\n    function approvedDelegates(address user, address delegate) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xcbf7f9977472650c61345b7cbde23e81f626e1f8863bab4c6ce3dacfc7604919\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\nimport { Action } from \\\"./ComptrollerInterface.sol\\\";\\n\\n/**\\n * @title ComptrollerStorage\\n * @author Venus\\n * @notice Storage layout for the `Comptroller` contract.\\n */\\ncontract ComptrollerStorage {\\n    struct LiquidationOrder {\\n        VToken vTokenCollateral;\\n        VToken vTokenBorrowed;\\n        uint256 repayAmount;\\n    }\\n\\n    struct AccountLiquiditySnapshot {\\n        uint256 totalCollateral;\\n        uint256 weightedCollateral;\\n        uint256 borrows;\\n        uint256 effects;\\n        uint256 liquidity;\\n        uint256 shortfall;\\n    }\\n\\n    struct RewardSpeeds {\\n        address rewardToken;\\n        uint256 supplySpeed;\\n        uint256 borrowSpeed;\\n    }\\n\\n    struct Market {\\n        // Whether or not this market is listed\\n        bool isListed;\\n        //  Multiplier representing the most one can borrow against their collateral in this market.\\n        //  For instance, 0.9 to allow borrowing 90% of collateral value.\\n        //  Must be between 0 and 1, and stored as a mantissa.\\n        uint256 collateralFactorMantissa;\\n        //  Multiplier representing the collateralization after which the borrow is eligible\\n        //  for liquidation. For instance, 0.8 liquidate when the borrow is 80% of collateral\\n        //  value. Must be between 0 and collateral factor, stored as a mantissa.\\n        uint256 liquidationThresholdMantissa;\\n        // Per-market mapping of \\\"accounts in this asset\\\"\\n        mapping(address => bool) accountMembership;\\n    }\\n\\n    /**\\n     * @notice Oracle which gives the price of any given asset\\n     */\\n    ResilientOracleInterface public oracle;\\n\\n    /**\\n     * @notice Multiplier used to calculate the maximum repayAmount when liquidating a borrow\\n     */\\n    uint256 public closeFactorMantissa;\\n\\n    /**\\n     * @notice Multiplier representing the discount on collateral that a liquidator receives\\n     */\\n    uint256 public liquidationIncentiveMantissa;\\n\\n    /**\\n     * @notice Per-account mapping of \\\"assets you are in\\\"\\n     */\\n    mapping(address => VToken[]) public accountAssets;\\n\\n    /**\\n     * @notice Official mapping of vTokens -> Market metadata\\n     * @dev Used e.g. to determine if a market is supported\\n     */\\n    mapping(address => Market) public markets;\\n\\n    /// @notice A list of all markets\\n    VToken[] public allMarkets;\\n\\n    /// @notice Borrow caps enforced by borrowAllowed for each vToken address. Defaults to zero which restricts borrowing.\\n    mapping(address => uint256) public borrowCaps;\\n\\n    /// @notice Minimal collateral required for regular (non-batch) liquidations\\n    uint256 public minLiquidatableCollateral;\\n\\n    /// @notice Supply caps enforced by mintAllowed for each vToken address. Defaults to zero which corresponds to minting not allowed\\n    mapping(address => uint256) public supplyCaps;\\n\\n    /// @notice True if a certain action is paused on a certain market\\n    mapping(address => mapping(Action => bool)) internal _actionPaused;\\n\\n    // List of Reward Distributors added\\n    RewardsDistributor[] internal rewardsDistributors;\\n\\n    // Used to check if rewards distributor is added\\n    mapping(address => bool) internal rewardsDistributorExists;\\n\\n    /// @notice Flag indicating whether forced liquidation enabled for a market\\n    mapping(address => bool) public isForcedLiquidationEnabled;\\n\\n    uint256 internal constant NO_ERROR = 0;\\n\\n    // closeFactorMantissa must be strictly greater than this value\\n    uint256 internal constant MIN_CLOSE_FACTOR_MANTISSA = 0.05e18; // 0.05\\n\\n    // closeFactorMantissa must not exceed this value\\n    uint256 internal constant MAX_CLOSE_FACTOR_MANTISSA = 0.9e18; // 0.9\\n\\n    // No collateralFactorMantissa may exceed this value\\n    uint256 internal constant MAX_COLLATERAL_FACTOR_MANTISSA = 0.95e18; // 0.95\\n\\n    /// Prime token address\\n    IPrime public prime;\\n\\n    /// @notice Whether the delegate is allowed to borrow or redeem on behalf of the user\\n    //mapping(address user => mapping (address delegate => bool approved)) public approvedDelegates;\\n    mapping(address => mapping(address => bool)) public approvedDelegates;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4df44cb65ac152bac2be4b4545430e703005a74a55b72e144100b16421bd8bfd\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title TokenErrorReporter\\n * @author Venus\\n * @notice Errors that can be thrown by the `VToken` contract.\\n */\\ncontract TokenErrorReporter {\\n    uint256 public constant NO_ERROR = 0; // support legacy return codes\\n\\n    error TransferNotAllowed();\\n\\n    error MintFreshnessCheck();\\n\\n    error RedeemFreshnessCheck();\\n    error RedeemTransferOutNotPossible();\\n\\n    error BorrowFreshnessCheck();\\n    error BorrowCashNotAvailable();\\n    error DelegateNotApproved();\\n\\n    error RepayBorrowFreshnessCheck();\\n\\n    error HealBorrowUnauthorized();\\n    error ForceLiquidateBorrowUnauthorized();\\n\\n    error LiquidateFreshnessCheck();\\n    error LiquidateCollateralFreshnessCheck();\\n    error LiquidateAccrueCollateralInterestFailed(uint256 errorCode);\\n    error LiquidateLiquidatorIsBorrower();\\n    error LiquidateCloseAmountIsZero();\\n    error LiquidateCloseAmountIsUintMax();\\n\\n    error LiquidateSeizeLiquidatorIsBorrower();\\n\\n    error ProtocolSeizeShareTooBig();\\n\\n    error SetReserveFactorFreshCheck();\\n    error SetReserveFactorBoundsCheck();\\n\\n    error AddReservesFactorFreshCheck(uint256 actualAddAmount);\\n\\n    error ReduceReservesFreshCheck();\\n    error ReduceReservesCashNotAvailable();\\n    error ReduceReservesCashValidation();\\n\\n    error SetInterestRateModelFreshCheck();\\n}\\n\",\"keccak256\":\"0x7a7ced1caaac2d9242659ebd50b99f308c725ce958ac9e11f7ada404b1d97a7b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { EXP_SCALE as EXP_SCALE_, MANTISSA_ONE as MANTISSA_ONE_ } from \\\"./lib/constants.sol\\\";\\n\\n/**\\n * @title Exponential module for storing fixed-precision decimals\\n * @author Compound\\n * @notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.\\n *         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:\\n *         `Exp({mantissa: 5100000000000000000})`.\\n */\\ncontract ExponentialNoError {\\n    struct Exp {\\n        uint256 mantissa;\\n    }\\n\\n    struct Double {\\n        uint256 mantissa;\\n    }\\n\\n    uint256 internal constant EXP_SCALE = EXP_SCALE_;\\n    uint256 internal constant DOUBLE_SCALE = 1e36;\\n    uint256 internal constant HALF_EXP_SCALE = EXP_SCALE / 2;\\n    uint256 internal constant MANTISSA_ONE = MANTISSA_ONE_;\\n\\n    /**\\n     * @dev Truncates the given exp to a whole number value.\\n     *      For example, truncate(Exp{mantissa: 15 * EXP_SCALE}) = 15\\n     */\\n    function truncate(Exp memory exp) internal pure returns (uint256) {\\n        // Note: We are not using careful math here as we're performing a division that cannot fail\\n        return exp.mantissa / EXP_SCALE;\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, then truncate to return an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncate(Exp memory a, uint256 scalar) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return truncate(product);\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncateAddUInt(Exp memory a, uint256 scalar, uint256 addend) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return add_(truncate(product), addend);\\n    }\\n\\n    /**\\n     * @dev Checks if first Exp is less than second Exp.\\n     */\\n    function lessThanExp(Exp memory left, Exp memory right) internal pure returns (bool) {\\n        return left.mantissa < right.mantissa;\\n    }\\n\\n    function safe224(uint256 n, string memory errorMessage) internal pure returns (uint224) {\\n        require(n <= type(uint224).max, errorMessage);\\n        return uint224(n);\\n    }\\n\\n    function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) {\\n        require(n <= type(uint32).max, errorMessage);\\n        return uint32(n);\\n    }\\n\\n    function add_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a + b;\\n    }\\n\\n    function sub_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a - b;\\n    }\\n\\n    function mul_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b.mantissa) / EXP_SCALE });\\n    }\\n\\n    function mul_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / EXP_SCALE;\\n    }\\n\\n    function mul_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b.mantissa) / DOUBLE_SCALE });\\n    }\\n\\n    function mul_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / DOUBLE_SCALE;\\n    }\\n\\n    function mul_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a * b;\\n    }\\n\\n    function div_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(mul_(a.mantissa, EXP_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, EXP_SCALE), b.mantissa);\\n    }\\n\\n    function div_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a.mantissa, DOUBLE_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, DOUBLE_SCALE), b.mantissa);\\n    }\\n\\n    function div_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a / b;\\n    }\\n\\n    function fraction(uint256 a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a, DOUBLE_SCALE), b) });\\n    }\\n}\\n\",\"keccak256\":\"0x8afbe8a24fe3539c124e718681ed3dcebd24c40dd53095786c0155998213b9b0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title Compound's InterestRateModel Interface\\n * @author Compound\\n */\\nabstract contract InterestRateModel {\\n    /**\\n     * @notice Calculates the current borrow interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getBorrowRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Calculates the current supply interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param reserveFactorMantissa The current reserve factor the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getSupplyRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 reserveFactorMantissa,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is an InterestRateModel contract (for inspection)\\n     * @return Always true\\n     */\\n    function isInterestRateModel() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0xc4fda1ab75ebe4b187b707c4f10c58780f343cf343c537f641dc75d3cd28ab51\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title MaxLoopsLimitHelper\\n * @author Venus\\n * @notice Abstract contract used to avoid collection with too many items that would generate gas errors and DoS.\\n */\\nabstract contract MaxLoopsLimitHelper {\\n    // Limit for the loops to avoid the DOS\\n    uint256 public maxLoopsLimit;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when max loops limit is set\\n    event MaxLoopsLimitUpdated(uint256 oldMaxLoopsLimit, uint256 newmaxLoopsLimit);\\n\\n    /// @notice Thrown an error on maxLoopsLimit exceeds for any loop\\n    error MaxLoopsLimitExceeded(uint256 loopsLimit, uint256 requiredLoops);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function _setMaxLoopsLimit(uint256 limit) internal {\\n        require(limit > maxLoopsLimit, \\\"Comptroller: Invalid maxLoopsLimit\\\");\\n\\n        uint256 oldMaxLoopsLimit = maxLoopsLimit;\\n        maxLoopsLimit = limit;\\n\\n        emit MaxLoopsLimitUpdated(oldMaxLoopsLimit, limit);\\n    }\\n\\n    /**\\n     * @notice Compare the maxLoopsLimit with number of the times loop iterate\\n     * @param len Length of the loops iterate\\n     * @custom:error MaxLoopsLimitExceeded error is thrown when loops length exceeds maxLoopsLimit\\n     */\\n    function _ensureMaxLoops(uint256 len) internal view {\\n        if (len > maxLoopsLimit) {\\n            revert MaxLoopsLimitExceeded(maxLoopsLimit, len);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x4c25e30635485d162177effa384eee51768b0141a567a0da16ff6ad673274166\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\n\\nimport { ExponentialNoError } from \\\"../ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"../VToken.sol\\\";\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"../MaxLoopsLimitHelper.sol\\\";\\nimport { RewardsDistributorStorage } from \\\"./RewardsDistributorStorage.sol\\\";\\n\\n/**\\n * @title `RewardsDistributor`\\n * @author Venus\\n * @notice Contract used to configure, track and distribute rewards to users based on their actions (borrows and supplies) in the protocol.\\n * Users can receive additional rewards through a `RewardsDistributor`. Each `RewardsDistributor` proxy is initialized with a specific reward\\n * token and `Comptroller`, which can then distribute the reward token to users that supply or borrow in the associated pool.\\n * Authorized users can set the reward token borrow and supply speeds for each market in the pool. This sets a fixed amount of reward\\n * token to be released each slot (block or second) for borrowers and suppliers, which is distributed based on a user\\u2019s percentage of the borrows or supplies\\n * respectively. The owner can also set up reward distributions to contributor addresses (distinct from suppliers and borrowers) by setting\\n * their contributor reward token speed, which similarly allocates a fixed amount of reward token per slot (block or second).\\n *\\n * The owner has the ability to transfer any amount of reward tokens held by the contract to any other address. Rewards are not distributed\\n * automatically and must be claimed by a user calling `claimRewardToken()`. Users should be aware that it is up to the owner and other centralized\\n * entities to ensure that the `RewardsDistributor` holds enough tokens to distribute the accumulated rewards of users and contributors.\\n */\\ncontract RewardsDistributor is\\n    ExponentialNoError,\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    MaxLoopsLimitHelper,\\n    RewardsDistributorStorage,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    /// @notice The initial REWARD TOKEN index for a market\\n    uint224 public constant INITIAL_INDEX = 1e36;\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a supplier\\n    event DistributedSupplierRewardToken(\\n        VToken indexed vToken,\\n        address indexed supplier,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenSupplyIndex\\n    );\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a borrower\\n    event DistributedBorrowerRewardToken(\\n        VToken indexed vToken,\\n        address indexed borrower,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenBorrowIndex\\n    );\\n\\n    /// @notice Emitted when a new supply-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenSupplySpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when a new borrow-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenBorrowSpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when REWARD TOKEN is granted by admin\\n    event RewardTokenGranted(address indexed recipient, uint256 amount);\\n\\n    /// @notice Emitted when a new REWARD TOKEN speed is set for a contributor\\n    event ContributorRewardTokenSpeedUpdated(address indexed contributor, uint256 newSpeed);\\n\\n    /// @notice Emitted when a market is initialized\\n    event MarketInitialized(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token supply index is updated\\n    event RewardTokenSupplyIndexUpdated(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token borrow index is updated\\n    event RewardTokenBorrowIndexUpdated(address indexed vToken, Exp marketBorrowIndex);\\n\\n    /// @notice Emitted when a reward for contributor is updated\\n    event ContributorRewardsUpdated(address indexed contributor, uint256 rewardAccrued);\\n\\n    /// @notice Emitted when a reward token last rewarding block for supply is updated\\n    event SupplyLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding block for borrow is updated\\n    event BorrowLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for supply is updated\\n    event SupplyLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for borrow is updated\\n    event BorrowLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    modifier onlyComptroller() {\\n        require(address(comptroller) == msg.sender, \\\"Only comptroller can call this function\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice RewardsDistributor initializer\\n     * @dev Initializes the deployer to owner\\n     * @param comptroller_ Comptroller to attach the reward distributor to\\n     * @param rewardToken_ Reward token to distribute\\n     * @param loopsLimit_ Maximum number of iterations for the loops in this contract\\n     * @param accessControlManager_ AccessControlManager contract address\\n     */\\n    function initialize(\\n        Comptroller comptroller_,\\n        IERC20Upgradeable rewardToken_,\\n        uint256 loopsLimit_,\\n        address accessControlManager_\\n    ) external initializer {\\n        comptroller = comptroller_;\\n        rewardToken = rewardToken_;\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n\\n        _setMaxLoopsLimit(loopsLimit_);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken\\n     * @param vToken The address of the vToken to be initialized\\n     * @custom:event MarketInitialized emits on success\\n     * @custom:access Only Comptroller\\n     */\\n    function initializeMarket(address vToken) external onlyComptroller {\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        isTimeBased\\n            ? _initializeMarketTimestampBased(vToken, blockNumberOrTimestamp)\\n            : _initializeMarketBlockBased(vToken, safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\"));\\n\\n        emit MarketInitialized(vToken);\\n    }\\n\\n    /*** Reward Token Distribution ***/\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them\\n     *         Borrowers will begin to accrue after the first interaction with the protocol.\\n     * @dev This function should only be called when the user has a borrow position in the market\\n     *      (e.g. Comptroller.preBorrowHook, and Comptroller.preRepayHook)\\n     *      We avoid an external call to check if they are in the market to save gas because this function is called in many places\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function distributeBorrowerRewardToken(\\n        address vToken,\\n        address borrower,\\n        Exp memory marketBorrowIndex\\n    ) external onlyComptroller {\\n        _distributeBorrowerRewardToken(vToken, borrower, marketBorrowIndex);\\n    }\\n\\n    function updateRewardTokenSupplyIndex(address vToken) external onlyComptroller {\\n        _updateRewardTokenSupplyIndex(vToken);\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the recipient\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all\\n     * @param recipient The address of the recipient to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     */\\n    function grantRewardToken(address recipient, uint256 amount) external onlyOwner {\\n        uint256 amountLeft = _grantRewardToken(recipient, amount);\\n        require(amountLeft == 0, \\\"insufficient rewardToken for grant\\\");\\n        emit RewardTokenGranted(recipient, amount);\\n    }\\n\\n    function updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) external onlyComptroller {\\n        _updateRewardTokenBorrowIndex(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN borrow and supply speeds for the specified markets\\n     * @param vTokens The markets whose REWARD TOKEN speed to update\\n     * @param supplySpeeds New supply-side REWARD TOKEN speed for the corresponding market\\n     * @param borrowSpeeds New borrow-side REWARD TOKEN speed for the corresponding market\\n     */\\n    function setRewardTokenSpeeds(\\n        VToken[] memory vTokens,\\n        uint256[] memory supplySpeeds,\\n        uint256[] memory borrowSpeeds\\n    ) external {\\n        _checkAccessAllowed(\\\"setRewardTokenSpeeds(address[],uint256[],uint256[])\\\");\\n        uint256 numTokens = vTokens.length;\\n        require(numTokens == supplySpeeds.length && numTokens == borrowSpeeds.length, \\\"invalid setRewardTokenSpeeds\\\");\\n\\n        for (uint256 i; i < numTokens; ++i) {\\n            _setRewardTokenSpeed(vTokens[i], supplySpeeds[i], borrowSpeeds[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for the specified markets, used when contract is block based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlocks New supply-side REWARD TOKEN last rewarding block for the corresponding market\\n     * @param borrowLastRewardingBlocks New borrow-side REWARD TOKEN last rewarding block for the corresponding market\\n     */\\n    function setLastRewardingBlocks(\\n        VToken[] calldata vTokens,\\n        uint32[] calldata supplyLastRewardingBlocks,\\n        uint32[] calldata borrowLastRewardingBlocks\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlocks(address[],uint32[],uint32[])\\\");\\n        require(!isTimeBased, \\\"Block-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlocks.length && numTokens == borrowLastRewardingBlocks.length,\\n            \\\"RewardsDistributor::setLastRewardingBlocks invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlock(vTokens[i], supplyLastRewardingBlocks[i], borrowLastRewardingBlocks[i]);\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block timestamp for the specified markets, used when contract is time based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlockTimestamps New supply-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     * @param borrowLastRewardingBlockTimestamps New borrow-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     */\\n    function setLastRewardingBlockTimestamps(\\n        VToken[] calldata vTokens,\\n        uint256[] calldata supplyLastRewardingBlockTimestamps,\\n        uint256[] calldata borrowLastRewardingBlockTimestamps\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])\\\");\\n        require(isTimeBased, \\\"Time-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlockTimestamps.length &&\\n                numTokens == borrowLastRewardingBlockTimestamps.length,\\n            \\\"RewardsDistributor::setLastRewardingBlockTimestamps invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlockTimestamp(\\n                vTokens[i],\\n                supplyLastRewardingBlockTimestamps[i],\\n                borrowLastRewardingBlockTimestamps[i]\\n            );\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single contributor\\n     * @param contributor The contributor whose REWARD TOKEN speed to update\\n     * @param rewardTokenSpeed New REWARD TOKEN speed for contributor\\n     */\\n    function setContributorRewardTokenSpeed(address contributor, uint256 rewardTokenSpeed) external onlyOwner {\\n        // note that REWARD TOKEN speed could be set to 0 to halt liquidity rewards for a contributor\\n        updateContributorRewards(contributor);\\n        if (rewardTokenSpeed == 0) {\\n            // release storage\\n            delete lastContributorBlock[contributor];\\n        } else {\\n            lastContributorBlock[contributor] = getBlockNumberOrTimestamp();\\n        }\\n        rewardTokenContributorSpeeds[contributor] = rewardTokenSpeed;\\n\\n        emit ContributorRewardTokenSpeedUpdated(contributor, rewardTokenSpeed);\\n    }\\n\\n    function distributeSupplierRewardToken(address vToken, address supplier) external onlyComptroller {\\n        _distributeSupplierRewardToken(vToken, supplier);\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in all markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     */\\n    function claimRewardToken(address holder) external {\\n        return claimRewardToken(holder, comptroller.getAllMarkets());\\n    }\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Calculate additional accrued REWARD TOKEN for a contributor since last accrual\\n     * @param contributor The address to calculate contributor rewards for\\n     */\\n    function updateContributorRewards(address contributor) public {\\n        uint256 rewardTokenSpeed = rewardTokenContributorSpeeds[contributor];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n        uint256 deltaBlocksOrTimestamp = sub_(blockNumberOrTimestamp, lastContributorBlock[contributor]);\\n        if (deltaBlocksOrTimestamp > 0 && rewardTokenSpeed > 0) {\\n            uint256 newAccrued = mul_(deltaBlocksOrTimestamp, rewardTokenSpeed);\\n            uint256 contributorAccrued = add_(rewardTokenAccrued[contributor], newAccrued);\\n\\n            rewardTokenAccrued[contributor] = contributorAccrued;\\n            lastContributorBlock[contributor] = blockNumberOrTimestamp;\\n\\n            emit ContributorRewardsUpdated(contributor, rewardTokenAccrued[contributor]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in the specified markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     * @param vTokens The list of markets to claim REWARD TOKEN in\\n     */\\n    function claimRewardToken(address holder, VToken[] memory vTokens) public {\\n        uint256 vTokensCount = vTokens.length;\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            VToken vToken = vTokens[i];\\n            require(comptroller.isMarketListed(vToken), \\\"market must be listed\\\");\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n            _distributeBorrowerRewardToken(address(vToken), holder, borrowIndex);\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n            _distributeSupplierRewardToken(address(vToken), holder);\\n        }\\n        rewardTokenAccrued[holder] = _grantRewardToken(holder, rewardTokenAccrued[holder]);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for a single market.\\n     * @param vToken market's whose reward token last rewarding block to be updated\\n     * @param supplyLastRewardingBlock New supply-side REWARD TOKEN last rewarding block for market\\n     * @param borrowLastRewardingBlock New borrow-side REWARD TOKEN last rewarding block for market\\n     */\\n    function _setLastRewardingBlock(\\n        VToken vToken,\\n        uint32 supplyLastRewardingBlock,\\n        uint32 borrowLastRewardingBlock\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockNumber = getBlockNumberOrTimestamp();\\n\\n        require(supplyLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n        require(borrowLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n\\n        uint32 currentSupplyLastRewardingBlock = rewardTokenSupplyState[address(vToken)].lastRewardingBlock;\\n        uint32 currentBorrowLastRewardingBlock = rewardTokenBorrowState[address(vToken)].lastRewardingBlock;\\n\\n        require(\\n            currentSupplyLastRewardingBlock == 0 || currentSupplyLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlock == 0 || currentBorrowLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlock != supplyLastRewardingBlock) {\\n            rewardTokenSupplyState[address(vToken)].lastRewardingBlock = supplyLastRewardingBlock;\\n            emit SupplyLastRewardingBlockUpdated(address(vToken), supplyLastRewardingBlock);\\n        }\\n\\n        if (currentBorrowLastRewardingBlock != borrowLastRewardingBlock) {\\n            rewardTokenBorrowState[address(vToken)].lastRewardingBlock = borrowLastRewardingBlock;\\n            emit BorrowLastRewardingBlockUpdated(address(vToken), borrowLastRewardingBlock);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding timestamp for a single market.\\n     * @param vToken market's whose reward token last rewarding timestamp to be updated\\n     * @param supplyLastRewardingBlockTimestamp New supply-side REWARD TOKEN last rewarding timestamp for market\\n     * @param borrowLastRewardingBlockTimestamp New borrow-side REWARD TOKEN last rewarding timestamp for market\\n     */\\n    function _setLastRewardingBlockTimestamp(\\n        VToken vToken,\\n        uint256 supplyLastRewardingBlockTimestamp,\\n        uint256 borrowLastRewardingBlockTimestamp\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockTimestamp = getBlockNumberOrTimestamp();\\n\\n        require(\\n            supplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n        require(\\n            borrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n\\n        uint256 currentSupplyLastRewardingBlockTimestamp = rewardTokenSupplyStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n        uint256 currentBorrowLastRewardingBlockTimestamp = rewardTokenBorrowStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n\\n        require(\\n            currentSupplyLastRewardingBlockTimestamp == 0 || currentSupplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlockTimestamp == 0 || currentBorrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlockTimestamp != supplyLastRewardingBlockTimestamp) {\\n            rewardTokenSupplyStateTimeBased[address(vToken)].lastRewardingTimestamp = supplyLastRewardingBlockTimestamp;\\n            emit SupplyLastRewardingBlockTimestampUpdated(address(vToken), supplyLastRewardingBlockTimestamp);\\n        }\\n\\n        if (currentBorrowLastRewardingBlockTimestamp != borrowLastRewardingBlockTimestamp) {\\n            rewardTokenBorrowStateTimeBased[address(vToken)].lastRewardingTimestamp = borrowLastRewardingBlockTimestamp;\\n            emit BorrowLastRewardingBlockTimestampUpdated(address(vToken), borrowLastRewardingBlockTimestamp);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single market.\\n     * @param vToken market's whose reward token rate to be updated\\n     * @param supplySpeed New supply-side REWARD TOKEN speed for market\\n     * @param borrowSpeed New borrow-side REWARD TOKEN speed for market\\n     */\\n    function _setRewardTokenSpeed(VToken vToken, uint256 supplySpeed, uint256 borrowSpeed) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        if (rewardTokenSupplySpeeds[address(vToken)] != supplySpeed) {\\n            // Supply speed updated so let's update supply state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n\\n            // Update speed and emit event\\n            rewardTokenSupplySpeeds[address(vToken)] = supplySpeed;\\n            emit RewardTokenSupplySpeedUpdated(vToken, supplySpeed);\\n        }\\n\\n        if (rewardTokenBorrowSpeeds[address(vToken)] != borrowSpeed) {\\n            // Borrow speed updated so let's update borrow state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n\\n            // Update speed and emit event\\n            rewardTokenBorrowSpeeds[address(vToken)] = borrowSpeed;\\n            emit RewardTokenBorrowSpeedUpdated(vToken, borrowSpeed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculate REWARD TOKEN accrued by a supplier and possibly transfer it to them.\\n     * @param vToken The market in which the supplier is interacting\\n     * @param supplier The address of the supplier to distribute REWARD TOKEN to\\n     */\\n    function _distributeSupplierRewardToken(address vToken, address supplier) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n        uint256 supplierIndex = rewardTokenSupplierIndex[vToken][supplier];\\n\\n        // Update supplier's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenSupplierIndex[vToken][supplier] = supplyIndex;\\n\\n        if (supplierIndex == 0 && supplyIndex >= INITIAL_INDEX) {\\n            // Covers the case where users supplied tokens before the market's supply state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when supplier rewards were first\\n            // set for the market.\\n            supplierIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per vToken accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(supplyIndex, supplierIndex) });\\n\\n        uint256 supplierTokens = VToken(vToken).balanceOf(supplier);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerVToken\\n        uint256 supplierDelta = mul_(supplierTokens, deltaIndex);\\n\\n        uint256 supplierAccrued = add_(rewardTokenAccrued[supplier], supplierDelta);\\n        rewardTokenAccrued[supplier] = supplierAccrued;\\n\\n        emit DistributedSupplierRewardToken(VToken(vToken), supplier, supplierDelta, supplierAccrued, supplyIndex);\\n    }\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them.\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function _distributeBorrowerRewardToken(address vToken, address borrower, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n        uint256 borrowerIndex = rewardTokenBorrowerIndex[vToken][borrower];\\n\\n        // Update borrowers's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenBorrowerIndex[vToken][borrower] = borrowIndex;\\n\\n        if (borrowerIndex == 0 && borrowIndex >= INITIAL_INDEX) {\\n            // Covers the case where users borrowed tokens before the market's borrow state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when borrower rewards were first\\n            // set for the market.\\n            borrowerIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per borrowed unit accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(borrowIndex, borrowerIndex) });\\n\\n        uint256 borrowerAmount = div_(VToken(vToken).borrowBalanceStored(borrower), marketBorrowIndex);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerBorrowedUnit\\n        if (borrowerAmount != 0) {\\n            uint256 borrowerDelta = mul_(borrowerAmount, deltaIndex);\\n\\n            uint256 borrowerAccrued = add_(rewardTokenAccrued[borrower], borrowerDelta);\\n            rewardTokenAccrued[borrower] = borrowerAccrued;\\n\\n            emit DistributedBorrowerRewardToken(VToken(vToken), borrower, borrowerDelta, borrowerAccrued, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the user.\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all.\\n     * @param user The address of the user to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     * @return The amount of REWARD TOKEN which was NOT transferred to the user\\n     */\\n    function _grantRewardToken(address user, uint256 amount) internal returns (uint256) {\\n        uint256 rewardTokenRemaining = rewardToken.balanceOf(address(this));\\n        if (amount > 0 && amount <= rewardTokenRemaining) {\\n            rewardToken.safeTransfer(user, amount);\\n            return 0;\\n        }\\n        return amount;\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the supply index\\n     * @param vToken The market whose supply index to update\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenSupplyIndex(address vToken) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplySpeed = rewardTokenSupplySpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? supplyStateTimeBased.lastRewardingTimestamp\\n            : uint256(supplyState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? supplyStateTimeBased.timestamp : uint256(supplyState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && supplySpeed > 0) {\\n            uint256 supplyTokens = VToken(vToken).totalSupply();\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, supplySpeed);\\n            Double memory ratio = supplyTokens > 0\\n                ? fraction(accruedSinceUpdate, supplyTokens)\\n                : Double({ mantissa: 0 });\\n            uint224 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: supplyIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                supplyStateTimeBased.index = index;\\n                supplyStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                supplyState.index = index;\\n                supplyState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            isTimeBased ? supplyStateTimeBased.timestamp = blockNumberOrTimestamp : supplyState.block = uint32(\\n                blockNumberOrTimestamp\\n            );\\n        }\\n\\n        emit RewardTokenSupplyIndexUpdated(vToken);\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the borrow index\\n     * @param vToken The market whose borrow index to update\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowSpeed = rewardTokenBorrowSpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? borrowStateTimeBased.lastRewardingTimestamp\\n            : uint256(borrowState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? borrowStateTimeBased.timestamp : uint256(borrowState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && borrowSpeed > 0) {\\n            uint256 borrowAmount = div_(VToken(vToken).totalBorrows(), marketBorrowIndex);\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, borrowSpeed);\\n            Double memory ratio = borrowAmount > 0\\n                ? fraction(accruedSinceUpdate, borrowAmount)\\n                : Double({ mantissa: 0 });\\n            uint224 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: borrowIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                borrowStateTimeBased.index = index;\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.index = index;\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            if (isTimeBased) {\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        }\\n\\n        emit RewardTokenBorrowIndexUpdated(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is block-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockNumber current block number\\n     */\\n    function _initializeMarketBlockBased(address vToken, uint32 blockNumber) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block numbers\\n         */\\n        supplyState.block = borrowState.block = blockNumber;\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is time-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockTimestamp current block timestamp\\n     */\\n    function _initializeMarketTimestampBased(address vToken, uint256 blockTimestamp) internal {\\n        TimeBasedRewardToken storage supplyState = rewardTokenSupplyStateTimeBased[vToken];\\n        TimeBasedRewardToken storage borrowState = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block timestamp\\n         */\\n        supplyState.timestamp = borrowState.timestamp = blockTimestamp;\\n    }\\n}\\n\",\"keccak256\":\"0x3cc824e59c923cfe25c4f1a875959b7e9410cde8e73cd405de13f301298c697f\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\n\\n/**\\n * @title RewardsDistributorStorage\\n * @author Venus\\n * @dev Storage for RewardsDistributor\\n */\\ncontract RewardsDistributorStorage {\\n    struct RewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block number the index was last updated at\\n        uint32 block;\\n        // The block number at which to stop rewards\\n        uint32 lastRewardingBlock;\\n    }\\n\\n    struct TimeBasedRewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block timestamp the index was last updated at\\n        uint256 timestamp;\\n        // The block timestamp at which to stop rewards\\n        uint256 lastRewardingTimestamp;\\n    }\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => RewardToken) public rewardTokenSupplyState;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each supplier as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenSupplierIndex;\\n\\n    /// @notice The REWARD TOKEN accrued but not yet transferred to each user\\n    mapping(address => uint256) public rewardTokenAccrued;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding borrow market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenBorrowSpeeds;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding supply market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenSupplySpeeds;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => RewardToken) public rewardTokenBorrowState;\\n\\n    /// @notice The portion of REWARD TOKEN that each contributor receives per slot (block or second)\\n    mapping(address => uint256) public rewardTokenContributorSpeeds;\\n\\n    /// @notice Last slot (block or second) at which a contributor's REWARD TOKEN rewards have been allocated\\n    mapping(address => uint256) public lastContributorBlock;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each borrower as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenBorrowerIndex;\\n\\n    Comptroller internal comptroller;\\n\\n    IERC20Upgradeable public rewardToken;\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenSupplyStateTimeBased;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenBorrowStateTimeBased;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[37] private __gap;\\n}\\n\",\"keccak256\":\"0x70e5015a78a2acf95277949c8b4796e10b9ac194130be006d5e5217e158070c0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VToken.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IProtocolShareReserve } from \\\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\\\";\\n\\nimport { VTokenInterface } from \\\"./VTokenInterfaces.sol\\\";\\nimport { ComptrollerInterface, ComptrollerViewInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { TokenErrorReporter } from \\\"./ErrorReporter.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title VToken\\n * @author Venus\\n * @notice Each asset that is supported by a pool is integrated through an instance of the `VToken` contract. As outlined in the protocol overview,\\n * each isolated pool creates its own `vToken` corresponding to an asset. Within a given pool, each included `vToken` is referred to as a market of\\n * the pool. The main actions a user regularly interacts with in a market are:\\n\\n- mint/redeem of vTokens;\\n- transfer of vTokens;\\n- borrow/repay a loan on an underlying asset;\\n- liquidate a borrow or liquidate/heal an account.\\n\\n * A user supplies the underlying asset to a pool by minting `vTokens`, where the corresponding `vToken` amount is determined by the `exchangeRate`.\\n * The `exchangeRate` will change over time, dependent on a number of factors, some of which accrue interest. Additionally, once users have minted\\n * `vToken` in a pool, they can borrow any asset in the isolated pool by using their `vToken` as collateral. In order to borrow an asset or use a `vToken`\\n * as collateral, the user must be entered into each corresponding market (else, the `vToken` will not be considered collateral for a borrow). Note that\\n * a user may borrow up to a portion of their collateral determined by the market\\u2019s collateral factor. However, if their borrowed amount exceeds an amount\\n * calculated using the market\\u2019s corresponding liquidation threshold, the borrow is eligible for liquidation. When a user repays a borrow, they must also\\n * pay off interest accrued on the borrow.\\n * \\n * The Venus protocol includes unique mechanisms for healing an account and liquidating an account. These actions are performed in the `Comptroller`\\n * and consider all borrows and collateral for which a given account is entered within a market. These functions may only be called on an account with a\\n * total collateral amount that is no larger than a universal `minLiquidatableCollateral` value, which is used for all markets within a `Comptroller`.\\n * Both functions settle all of an account\\u2019s borrows, but `healAccount()` may add `badDebt` to a vToken. For more detail, see the description of\\n * `healAccount()` and `liquidateAccount()` in the `Comptroller` summary section below.\\n */\\ncontract VToken is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    VTokenInterface,\\n    ExponentialNoError,\\n    TokenErrorReporter,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    uint256 internal constant DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA = 5e16; // 5%\\n\\n    // Maximum fraction of interest that can be set aside for reserves\\n    uint256 internal constant MAX_RESERVE_FACTOR_MANTISSA = 1e18;\\n\\n    // Maximum borrow rate that can ever be applied per slot(block or second)\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 internal immutable MAX_BORROW_RATE_MANTISSA;\\n\\n    /**\\n     * Reentrancy Guard **\\n     */\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     */\\n    modifier nonReentrant() {\\n        require(_notEntered, \\\"re-entered\\\");\\n        _notEntered = false;\\n        _;\\n        _notEntered = true; // get a gas-refund post-Istanbul\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @param maxBorrowRateMantissa_ The maximum value of borrowing rate mantissa\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(\\n        bool timeBased_,\\n        uint256 blocksPerYear_,\\n        uint256 maxBorrowRateMantissa_\\n    ) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        require(maxBorrowRateMantissa_ <= 1e18, \\\"Max borrow rate must be <= 1e18\\\");\\n\\n        MAX_BORROW_RATE_MANTISSA = maxBorrowRateMantissa_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice Construct a new money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     * @custom:error ZeroAddressNotAllowed is thrown when admin address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     */\\n    function initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) external initializer {\\n        ensureNonzeroAddress(admin_);\\n\\n        // Initialize the market\\n        _initialize(\\n            underlying_,\\n            comptroller_,\\n            interestRateModel_,\\n            initialExchangeRateMantissa_,\\n            name_,\\n            symbol_,\\n            decimals_,\\n            admin_,\\n            accessControlManager_,\\n            riskManagement,\\n            reserveFactorMantissa_\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `msg.sender` to `dst`\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transfer(address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `src` to `dst`\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transferFrom(address src, address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, src, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Approve `spender` to transfer up to `amount` from `src`\\n     * @dev This will overwrite the approval amount for `spender`\\n     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\\n     * @param spender The address of the account which may transfer tokens\\n     * @param amount The number of tokens that are approved (uint256.max means infinite)\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function approve(address spender, uint256 amount) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        transferAllowances[src][spender] = amount;\\n        emit Approval(src, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Increase approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param addedValue The number of additional tokens spender can transfer\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 newAllowance = transferAllowances[src][spender];\\n        newAllowance += addedValue;\\n        transferAllowances[src][spender] = newAllowance;\\n\\n        emit Approval(src, spender, newAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Decreases approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param subtractedValue The number of tokens to remove from total approval\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 currentAllowance = transferAllowances[src][spender];\\n        require(currentAllowance >= subtractedValue, \\\"decreased allowance below zero\\\");\\n        unchecked {\\n            currentAllowance -= subtractedValue;\\n        }\\n\\n        transferAllowances[src][spender] = currentAllowance;\\n\\n        emit Approval(src, spender, currentAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Get the underlying balance of the `owner`\\n     * @dev This also accrues interest in a transaction\\n     * @param owner The address of the account to query\\n     * @return amount The amount of underlying owned by `owner`\\n     */\\n    function balanceOfUnderlying(address owner) external override returns (uint256) {\\n        Exp memory exchangeRate = Exp({ mantissa: exchangeRateCurrent() });\\n        return mul_ScalarTruncate(exchangeRate, accountTokens[owner]);\\n    }\\n\\n    /**\\n     * @notice Returns the current total borrows plus accrued interest\\n     * @return totalBorrows The total borrows with interest\\n     */\\n    function totalBorrowsCurrent() external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return totalBorrows;\\n    }\\n\\n    /**\\n     * @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\\n     * @param account The address whose balance should be calculated after updating borrowIndex\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceCurrent(address account) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Sender supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function mint(uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, msg.sender, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender calls on-behalf of minter. minter supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param minter User whom the supply will be attributed to\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when minter address is zero\\n     */\\n    function mintBehalf(address minter, uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(minter);\\n\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, minter, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for the underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function redeem(uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer The user on behalf of whom to redeem\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for a specified amount of underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     */\\n    function redeemUnderlying(uint256 redeemAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems underlying assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer, on behalf of whom to redeem\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemUnderlyingBehalf(\\n        address redeemer,\\n        uint256 redeemAmount\\n    ) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets from the protocol to their own address\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function borrow(uint256 borrowAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _borrowFresh(msg.sender, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the borrower using `comptroller.updateDelegate`\\n     * @param borrower The borrower, on behalf of whom to borrow\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error DelegateNotApproved is thrown if caller is not approved delegate\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function borrowBehalf(address borrower, uint256 borrowAmount) external override returns (uint256) {\\n        _ensureSenderIsDelegateOf(borrower);\\n        accrueInterest();\\n\\n        _borrowFresh(borrower, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays their own borrow\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrow(uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, msg.sender, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays a borrow belonging to borrower\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, borrower, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Not restricted\\n     */\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external override returns (uint256) {\\n        _liquidateBorrow(msg.sender, borrower, repayAmount, vTokenCollateral, false);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice sets protocol share accumulated from liquidations\\n     * @dev must be equal or less than liquidation incentive - 1\\n     * @param newProtocolSeizeShareMantissa_ new protocol share mantissa\\n     * @custom:event Emits NewProtocolSeizeShare event on success\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error ProtocolSeizeShareTooBig is thrown when the new seize share is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setProtocolSeizeShare(uint256 newProtocolSeizeShareMantissa_) external {\\n        _checkAccessAllowed(\\\"setProtocolSeizeShare(uint256)\\\");\\n        uint256 liquidationIncentive = ComptrollerViewInterface(address(comptroller)).liquidationIncentiveMantissa();\\n        if (newProtocolSeizeShareMantissa_ + MANTISSA_ONE > liquidationIncentive) {\\n            revert ProtocolSeizeShareTooBig();\\n        }\\n\\n        uint256 oldProtocolSeizeShareMantissa = protocolSeizeShareMantissa;\\n        protocolSeizeShareMantissa = newProtocolSeizeShareMantissa_;\\n        emit NewProtocolSeizeShare(oldProtocolSeizeShareMantissa, newProtocolSeizeShareMantissa_);\\n    }\\n\\n    /**\\n     * @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\\n     * @dev Admin function to accrue interest and set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     * @custom:event Emits NewReserveFactor event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error SetReserveFactorBoundsCheck is thrown when the new reserve factor is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external override nonReentrant {\\n        _checkAccessAllowed(\\\"setReserveFactor(uint256)\\\");\\n\\n        accrueInterest();\\n        _setReserveFactorFresh(newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Accrues interest and reduces reserves by transferring to the protocol reserve contract\\n     * @dev Gracefully return if reserves already reduced in accrueInterest\\n     * @param reduceAmount Amount of reduction to reserves\\n     * @custom:event Emits ReservesReduced event; may emit AccrueInterest\\n     * @custom:error ReduceReservesCashNotAvailable is thrown when the vToken does not have sufficient cash\\n     * @custom:error ReduceReservesCashValidation is thrown when trying to withdraw more cash than the reserves have\\n     * @custom:access Not restricted\\n     */\\n    function reduceReserves(uint256 reduceAmount) external override nonReentrant {\\n        accrueInterest();\\n        if (reduceReservesBlockNumber == getBlockNumberOrTimestamp()) return;\\n        _reduceReservesFresh(reduceAmount);\\n    }\\n\\n    /**\\n     * @notice The sender adds to reserves.\\n     * @param addAmount The amount of underlying token to add as reserves\\n     * @custom:event Emits ReservesAdded event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function addReserves(uint256 addAmount) external override nonReentrant {\\n        accrueInterest();\\n        _addReservesFresh(addAmount);\\n    }\\n\\n    /**\\n     * @notice accrues interest and updates the interest rate model using _setInterestRateModelFresh\\n     * @dev Admin function to accrue interest and update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     * @custom:event Emits NewMarketInterestRateModel event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external override {\\n        _checkAccessAllowed(\\\"setInterestRateModel(address)\\\");\\n\\n        accrueInterest();\\n        _setInterestRateModelFresh(newInterestRateModel);\\n    }\\n\\n    /**\\n     * @notice Repays a certain amount of debt, treats the rest of the borrow as bad debt, essentially\\n     *   \\\"forgiving\\\" the borrower. Healing is a situation that should rarely happen. However, some pools\\n     *   may list risky assets or be configured improperly \\u2013 we want to still handle such cases gracefully.\\n     *   We assume that Comptroller does the seizing, so this function is only available to Comptroller.\\n     * @dev This function does not call any Comptroller hooks (like \\\"healAllowed\\\"), because we assume\\n     *   the Comptroller does all the necessary checks before calling this function.\\n     * @param payer account who repays the debt\\n     * @param borrower account to heal\\n     * @param repayAmount amount to repay\\n     * @custom:event Emits RepayBorrow, BadDebtIncreased events; may emit AccrueInterest\\n     * @custom:error HealBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:access Only Comptroller\\n     */\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external override nonReentrant {\\n        if (repayAmount != 0) {\\n            comptroller.preRepayHook(address(this), borrower);\\n        }\\n\\n        if (msg.sender != address(comptroller)) {\\n            revert HealBorrowUnauthorized();\\n        }\\n\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 totalBorrowsNew = totalBorrows;\\n\\n        uint256 actualRepayAmount;\\n        if (repayAmount != 0) {\\n            // _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n            // We violate checks-effects-interactions here to account for tokens that take transfer fees\\n            actualRepayAmount = _doTransferIn(payer, repayAmount);\\n            totalBorrowsNew = totalBorrowsNew - actualRepayAmount;\\n            emit RepayBorrow(\\n                payer,\\n                borrower,\\n                actualRepayAmount,\\n                accountBorrowsPrev - actualRepayAmount,\\n                totalBorrowsNew\\n            );\\n        }\\n\\n        // The transaction will fail if trying to repay too much\\n        uint256 badDebtDelta = accountBorrowsPrev - actualRepayAmount;\\n        if (badDebtDelta != 0) {\\n            uint256 badDebtOld = badDebt;\\n            uint256 badDebtNew = badDebtOld + badDebtDelta;\\n            totalBorrowsNew = totalBorrowsNew - badDebtDelta;\\n            badDebt = badDebtNew;\\n\\n            // We treat healing as \\\"repayment\\\", where vToken is the payer\\n            emit RepayBorrow(address(this), borrower, badDebtDelta, 0, totalBorrowsNew);\\n            emit BadDebtIncreased(borrower, badDebtDelta, badDebtOld, badDebtNew);\\n        }\\n\\n        accountBorrows[borrower].principal = 0;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        emit HealBorrow(payer, borrower, repayAmount);\\n    }\\n\\n    /**\\n     * @notice The extended version of liquidations, callable only by Comptroller. May skip\\n     *  the close factor check. The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error ForceLiquidateBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Only Comptroller\\n     */\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        if (msg.sender != address(comptroller)) {\\n            revert ForceLiquidateBorrowUnauthorized();\\n        }\\n        _liquidateBorrow(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Will fail unless called by another vToken during the process of liquidation.\\n     *  It's absolutely critical to use msg.sender as the borrowed vToken and not a parameter.\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     * @custom:event Emits Transfer, ReservesAdded events\\n     * @custom:error LiquidateSeizeLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:access Not restricted\\n     */\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external override nonReentrant {\\n        _seize(msg.sender, liquidator, borrower, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Updates bad debt\\n     * @dev Called only when bad debt is recovered from auction\\n     * @param recoveredAmount_ The amount of bad debt recovered\\n     * @custom:event Emits BadDebtRecovered event\\n     * @custom:access Only Shortfall contract\\n     */\\n    function badDebtRecovered(uint256 recoveredAmount_) external {\\n        require(msg.sender == shortfall, \\\"only shortfall contract can update bad debt\\\");\\n        require(recoveredAmount_ <= badDebt, \\\"more than bad debt recovered from auction\\\");\\n\\n        uint256 badDebtOld = badDebt;\\n        uint256 badDebtNew = badDebtOld - recoveredAmount_;\\n        badDebt = badDebtNew;\\n\\n        emit BadDebtRecovered(badDebtOld, badDebtNew);\\n    }\\n\\n    /**\\n     * @notice Sets protocol share reserve contract address\\n     * @param protocolShareReserve_ The address of the protocol share reserve contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setProtocolShareReserve(address payable protocolShareReserve_) external onlyOwner {\\n        _setProtocolShareReserve(protocolShareReserve_);\\n    }\\n\\n    /**\\n     * @notice Sets shortfall contract address\\n     * @param shortfall_ The address of the shortfall contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setShortfallContract(address shortfall_) external onlyOwner {\\n        _setShortfallContract(shortfall_);\\n    }\\n\\n    /**\\n     * @notice A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)\\n     * @param token The address of the ERC-20 token to sweep\\n     * @custom:access Only Governance\\n     */\\n    function sweepToken(IERC20Upgradeable token) external override {\\n        require(msg.sender == owner(), \\\"VToken::sweepToken: only admin can sweep tokens\\\");\\n        require(address(token) != underlying, \\\"VToken::sweepToken: can not sweep underlying token\\\");\\n        uint256 balance = token.balanceOf(address(this));\\n        token.safeTransfer(owner(), balance);\\n\\n        emit SweepToken(address(token));\\n    }\\n\\n    /**\\n     * @notice A public function to set new threshold of slot(block or second) difference after which funds will be sent to the protocol share reserve\\n     * @param _newReduceReservesBlockOrTimestampDelta slot(block or second) difference value\\n     * @custom:access Only Governance\\n     */\\n    function setReduceReservesBlockDelta(uint256 _newReduceReservesBlockOrTimestampDelta) external {\\n        _checkAccessAllowed(\\\"setReduceReservesBlockDelta(uint256)\\\");\\n        require(_newReduceReservesBlockOrTimestampDelta > 0, \\\"Invalid Input\\\");\\n        emit NewReduceReservesBlockDelta(reduceReservesBlockDelta, _newReduceReservesBlockOrTimestampDelta);\\n        reduceReservesBlockDelta = _newReduceReservesBlockOrTimestampDelta;\\n    }\\n\\n    /**\\n     * @notice Get the current allowance from `owner` for `spender`\\n     * @param owner The address of the account which owns the tokens to be spent\\n     * @param spender The address of the account which may transfer tokens\\n     * @return amount The number of tokens allowed to be spent (type(uint256).max means infinite)\\n     */\\n    function allowance(address owner, address spender) external view override returns (uint256) {\\n        return transferAllowances[owner][spender];\\n    }\\n\\n    /**\\n     * @notice Get the token balance of the `owner`\\n     * @param owner The address of the account to query\\n     * @return amount The number of tokens owned by `owner`\\n     */\\n    function balanceOf(address owner) external view override returns (uint256) {\\n        return accountTokens[owner];\\n    }\\n\\n    /**\\n     * @notice Get a snapshot of the account's balances, and the cached exchange rate\\n     * @dev This is used by comptroller to more efficiently perform liquidity checks.\\n     * @param account Address of the account to snapshot\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return vTokenBalance User's balance of vTokens\\n     * @return borrowBalance Amount owed in terms of underlying\\n     * @return exchangeRate Stored exchange rate\\n     */\\n    function getAccountSnapshot(\\n        address account\\n    )\\n        external\\n        view\\n        override\\n        returns (uint256 error, uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRate)\\n    {\\n        return (NO_ERROR, accountTokens[account], _borrowBalanceStored(account), _exchangeRateStored());\\n    }\\n\\n    /**\\n     * @notice Get cash balance of this vToken in the underlying asset\\n     * @return cash The quantity of underlying asset owned by this contract\\n     */\\n    function getCash() external view override returns (uint256) {\\n        return _getCashPrior();\\n    }\\n\\n    /**\\n     * @notice Returns the current per slot(block or second) borrow interest rate for this vToken\\n     * @return rate The borrow interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function borrowRatePerBlock() external view override returns (uint256) {\\n        return interestRateModel.getBorrowRate(_getCashPrior(), totalBorrows, totalReserves, badDebt);\\n    }\\n\\n    /**\\n     * @notice Returns the current per-slot(block or second) supply interest rate for this v\\n     * @return rate The supply interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function supplyRatePerBlock() external view override returns (uint256) {\\n        return\\n            interestRateModel.getSupplyRate(\\n                _getCashPrior(),\\n                totalBorrows,\\n                totalReserves,\\n                reserveFactorMantissa,\\n                badDebt\\n            );\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceStored(address account) external view override returns (uint256) {\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateStored() external view override returns (uint256) {\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Accrue interest then return the up-to-date exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateCurrent() public override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Applies accrued interest to total borrows and reserves\\n     * @dev This calculates interest accrued from the last checkpointed slot(block or second)\\n     *  up to the current slot(block or second) and writes new checkpoint to storage and\\n     *  reduce spread reserves to protocol share reserve\\n     *  if currentSlot - reduceReservesBlockNumber >= slotDelta\\n     * @return Always NO_ERROR\\n     * @custom:event Emits AccrueInterest event on success\\n     * @custom:access Not restricted\\n     */\\n    function accrueInterest() public virtual override returns (uint256) {\\n        /* Remember the initial block number or timestamp */\\n        uint256 currentSlotNumber = getBlockNumberOrTimestamp();\\n        uint256 accrualSlotNumberPrior = accrualBlockNumber;\\n\\n        /* Short-circuit accumulating 0 interest */\\n        if (accrualSlotNumberPrior == currentSlotNumber) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Read the previous values out of storage */\\n        uint256 cashPrior = _getCashPrior();\\n        uint256 borrowsPrior = totalBorrows;\\n        uint256 reservesPrior = totalReserves;\\n        uint256 borrowIndexPrior = borrowIndex;\\n\\n        /* Calculate the current borrow interest rate */\\n        uint256 borrowRateMantissa = interestRateModel.getBorrowRate(cashPrior, borrowsPrior, reservesPrior, badDebt);\\n        require(borrowRateMantissa <= MAX_BORROW_RATE_MANTISSA, \\\"borrow rate is absurdly high\\\");\\n\\n        /* Calculate the number of slots elapsed since the last accrual */\\n        uint256 slotDelta = currentSlotNumber - accrualSlotNumberPrior;\\n\\n        /*\\n         * Calculate the interest accumulated into borrows and reserves and the new index:\\n         *  simpleInterestFactor = borrowRate * slotDelta\\n         *  interestAccumulated = simpleInterestFactor * totalBorrows\\n         *  totalBorrowsNew = interestAccumulated + totalBorrows\\n         *  totalReservesNew = interestAccumulated * reserveFactor + totalReserves\\n         *  borrowIndexNew = simpleInterestFactor * borrowIndex + borrowIndex\\n         */\\n\\n        Exp memory simpleInterestFactor = mul_(Exp({ mantissa: borrowRateMantissa }), slotDelta);\\n        uint256 interestAccumulated = mul_ScalarTruncate(simpleInterestFactor, borrowsPrior);\\n        uint256 totalBorrowsNew = interestAccumulated + borrowsPrior;\\n        uint256 totalReservesNew = mul_ScalarTruncateAddUInt(\\n            Exp({ mantissa: reserveFactorMantissa }),\\n            interestAccumulated,\\n            reservesPrior\\n        );\\n        uint256 borrowIndexNew = mul_ScalarTruncateAddUInt(simpleInterestFactor, borrowIndexPrior, borrowIndexPrior);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the previously calculated values into storage */\\n        accrualBlockNumber = currentSlotNumber;\\n        borrowIndex = borrowIndexNew;\\n        totalBorrows = totalBorrowsNew;\\n        totalReserves = totalReservesNew;\\n\\n        if (currentSlotNumber - reduceReservesBlockNumber >= reduceReservesBlockDelta) {\\n            reduceReservesBlockNumber = currentSlotNumber;\\n            if (cashPrior < totalReservesNew) {\\n                _reduceReservesFresh(cashPrior);\\n            } else {\\n                _reduceReservesFresh(totalReservesNew);\\n            }\\n        }\\n\\n        /* We emit an AccrueInterest event */\\n        emit AccrueInterest(cashPrior, interestAccumulated, borrowIndexNew, totalBorrowsNew);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice User supplies assets into the market and receives vTokens in exchange\\n     * @dev Assumes interest has already been accrued up to the current block or timestamp\\n     * @param payer The address of the account which is sending the assets for supply\\n     * @param minter The address of the account which is supplying the assets\\n     * @param mintAmount The amount of the underlying asset to supply\\n     */\\n    function _mintFresh(address payer, address minter, uint256 mintAmount) internal {\\n        /* Fail if mint not allowed */\\n        comptroller.preMintHook(address(this), minter, mintAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert MintFreshnessCheck();\\n        }\\n\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         *  We call `_doTransferIn` for the minter and the mintAmount.\\n         *  `_doTransferIn` reverts if anything goes wrong, since we can't be sure if\\n         *  side-effects occurred. The function returns the amount actually transferred,\\n         *  in case of a fee. On success, the vToken holds an additional `actualMintAmount`\\n         *  of cash.\\n         */\\n        uint256 actualMintAmount = _doTransferIn(payer, mintAmount);\\n\\n        /*\\n         * We get the current exchange rate and calculate the number of vTokens to be minted:\\n         *  mintTokens = actualMintAmount / exchangeRate\\n         */\\n\\n        uint256 mintTokens = div_(actualMintAmount, exchangeRate);\\n\\n        /*\\n         * We calculate the new total supply of vTokens and minter token balance, checking for overflow:\\n         *  totalSupplyNew = totalSupply + mintTokens\\n         *  accountTokensNew = accountTokens[minter] + mintTokens\\n         * And write them into storage\\n         */\\n        totalSupply = totalSupply + mintTokens;\\n        uint256 balanceAfter = accountTokens[minter] + mintTokens;\\n        accountTokens[minter] = balanceAfter;\\n\\n        /* We emit a Mint event, and a Transfer event */\\n        emit Mint(minter, actualMintAmount, mintTokens, balanceAfter);\\n        emit Transfer(address(0), minter, mintTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.mintVerify(address(this), minter, actualMintAmount, mintTokens);\\n    }\\n\\n    /**\\n     * @notice Redeemer redeems vTokens in exchange for the underlying assets, transferred to the receiver. Redeemer and receiver can be the same\\n     *   address, or different addresses if the receiver was previously approved by the redeemer as a valid delegate (see Comptroller.updateDelegate)\\n     * @dev Assumes interest has already been accrued up to the current slot(block or second)\\n     * @param redeemer The address of the account which is redeeming the tokens\\n     * @param receiver The receiver of the underlying tokens\\n     * @param redeemTokensIn The number of vTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     * @param redeemAmountIn The number of underlying tokens to receive from redeeming vTokens (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     */\\n    function _redeemFresh(address redeemer, address receiver, uint256 redeemTokensIn, uint256 redeemAmountIn) internal {\\n        require(redeemTokensIn == 0 || redeemAmountIn == 0, \\\"one of redeemTokensIn or redeemAmountIn must be zero\\\");\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RedeemFreshnessCheck();\\n        }\\n\\n        /* exchangeRate = invoke Exchange Rate Stored() */\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        uint256 redeemTokens;\\n        uint256 redeemAmount;\\n\\n        /* If redeemTokensIn > 0: */\\n        if (redeemTokensIn > 0) {\\n            /*\\n             * We calculate the exchange rate and the amount of underlying to be redeemed:\\n             *  redeemTokens = redeemTokensIn\\n             */\\n            redeemTokens = redeemTokensIn;\\n        } else {\\n            /*\\n             * We get the current exchange rate and calculate the amount to be redeemed:\\n             *  redeemTokens = redeemAmountIn / exchangeRate\\n             */\\n            redeemTokens = div_(redeemAmountIn, exchangeRate);\\n\\n            uint256 _redeemAmount = mul_(redeemTokens, exchangeRate);\\n            if (_redeemAmount != 0 && _redeemAmount != redeemAmountIn) redeemTokens++; // round up\\n        }\\n\\n        // redeemAmount = exchangeRate * redeemTokens\\n        redeemAmount = mul_ScalarTruncate(exchangeRate, redeemTokens);\\n\\n        // Revert if amount is zero\\n        if (redeemAmount == 0) {\\n            revert(\\\"redeemAmount is zero\\\");\\n        }\\n\\n        /* Fail if redeem not allowed */\\n        comptroller.preRedeemHook(address(this), redeemer, redeemTokens);\\n\\n        /* Fail gracefully if protocol has insufficient cash */\\n        if (_getCashPrior() - totalReserves < redeemAmount) {\\n            revert RedeemTransferOutNotPossible();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing reduced supply before external transfer.\\n         */\\n        totalSupply = totalSupply - redeemTokens;\\n        uint256 balanceAfter = accountTokens[redeemer] - redeemTokens;\\n        accountTokens[redeemer] = balanceAfter;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the redeemAmount.\\n         *  On success, the vToken has redeemAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, redeemAmount);\\n\\n        /* We emit a Transfer event, and a Redeem event */\\n        emit Transfer(redeemer, address(this), redeemTokens);\\n        emit Redeem(redeemer, redeemAmount, redeemTokens, balanceAfter);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.redeemVerify(address(this), redeemer, redeemAmount, redeemTokens);\\n    }\\n\\n    /**\\n     * @notice Users or their delegates borrow assets from the protocol\\n     * @param borrower User who borrows the assets\\n     * @param receiver The receiver of the tokens, if called by a delegate\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     */\\n    function _borrowFresh(address borrower, address receiver, uint256 borrowAmount) internal {\\n        /* Fail if borrow not allowed */\\n        comptroller.preBorrowHook(address(this), borrower, borrowAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert BorrowFreshnessCheck();\\n        }\\n\\n        /* Fail gracefully if protocol has insufficient underlying cash */\\n        if (_getCashPrior() - totalReserves < borrowAmount) {\\n            revert BorrowCashNotAvailable();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on overflow:\\n         *  accountBorrowNew = accountBorrow + borrowAmount\\n         *  totalBorrowsNew = totalBorrows + borrowAmount\\n         */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 accountBorrowsNew = accountBorrowsPrev + borrowAmount;\\n        uint256 totalBorrowsNew = totalBorrows + borrowAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing increased borrow before external transfer.\\n        `*/\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the borrowAmount.\\n         *  On success, the vToken borrowAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, borrowAmount);\\n\\n        /* We emit a Borrow event */\\n        emit Borrow(borrower, borrowAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.borrowVerify(address(this), borrower, borrowAmount);\\n    }\\n\\n    /**\\n     * @notice Borrows are repaid by another user (possibly the borrower).\\n     * @param payer the account paying off the borrow\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount the amount of underlying tokens being returned, or type(uint256).max for the full outstanding amount\\n     * @return (uint) the actual repayment amount.\\n     */\\n    function _repayBorrowFresh(address payer, address borrower, uint256 repayAmount) internal returns (uint256) {\\n        /* Fail if repayBorrow not allowed */\\n        comptroller.preRepayHook(address(this), borrower);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RepayBorrowFreshnessCheck();\\n        }\\n\\n        /* We fetch the amount the borrower owes, with accumulated interest */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n\\n        uint256 repayAmountFinal = repayAmount >= accountBorrowsPrev ? accountBorrowsPrev : repayAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We call _doTransferIn for the payer and the repayAmount\\n         *  On success, the vToken holds an additional repayAmount of cash.\\n         *  _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         *   it returns the amount actually transferred, in case of a fee.\\n         */\\n        uint256 actualRepayAmount = _doTransferIn(payer, repayAmountFinal);\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on underflow:\\n         *  accountBorrowsNew = accountBorrows - actualRepayAmount\\n         *  totalBorrowsNew = totalBorrows - actualRepayAmount\\n         */\\n        uint256 accountBorrowsNew = accountBorrowsPrev - actualRepayAmount;\\n        uint256 totalBorrowsNew = totalBorrows - actualRepayAmount;\\n\\n        /* We write the previously calculated values into storage */\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /* We emit a RepayBorrow event */\\n        emit RepayBorrow(payer, borrower, actualRepayAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.repayBorrowVerify(address(this), payer, borrower, actualRepayAmount, borrowIndex);\\n\\n        return actualRepayAmount;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal nonReentrant {\\n        accrueInterest();\\n\\n        uint256 error = vTokenCollateral.accrueInterest();\\n        if (error != NO_ERROR) {\\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted liquidation failed\\n            revert LiquidateAccrueCollateralInterestFailed(error);\\n        }\\n\\n        _liquidateBorrowFresh(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice The liquidator liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrowFresh(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal {\\n        /* Fail if liquidate not allowed */\\n        comptroller.preLiquidateHook(\\n            address(this),\\n            address(vTokenCollateral),\\n            borrower,\\n            repayAmount,\\n            skipLiquidityCheck\\n        );\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert LiquidateFreshnessCheck();\\n        }\\n\\n        /* Verify vTokenCollateral market's slot(block or second) number equals current slot(block or second) number */\\n        if (vTokenCollateral.accrualBlockNumber() != getBlockNumberOrTimestamp()) {\\n            revert LiquidateCollateralFreshnessCheck();\\n        }\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateLiquidatorIsBorrower();\\n        }\\n\\n        /* Fail if repayAmount = 0 */\\n        if (repayAmount == 0) {\\n            revert LiquidateCloseAmountIsZero();\\n        }\\n\\n        /* Fail if repayAmount = type(uint256).max */\\n        if (repayAmount == type(uint256).max) {\\n            revert LiquidateCloseAmountIsUintMax();\\n        }\\n\\n        /* Fail if repayBorrow fails */\\n        uint256 actualRepayAmount = _repayBorrowFresh(liquidator, borrower, repayAmount);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We calculate the number of collateral tokens that will be seized */\\n        (uint256 amountSeizeError, uint256 seizeTokens) = comptroller.liquidateCalculateSeizeTokens(\\n            address(this),\\n            address(vTokenCollateral),\\n            actualRepayAmount\\n        );\\n        require(amountSeizeError == NO_ERROR, \\\"LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED\\\");\\n\\n        /* Revert if borrower collateral token balance < seizeTokens */\\n        require(vTokenCollateral.balanceOf(borrower) >= seizeTokens, \\\"LIQUIDATE_SEIZE_TOO_MUCH\\\");\\n\\n        // If this is also the collateral, call _seize internally to avoid re-entrancy, otherwise make an external call\\n        if (address(vTokenCollateral) == address(this)) {\\n            _seize(address(this), liquidator, borrower, seizeTokens);\\n        } else {\\n            vTokenCollateral.seize(liquidator, borrower, seizeTokens);\\n        }\\n\\n        /* We emit a LiquidateBorrow event */\\n        emit LiquidateBorrow(liquidator, borrower, actualRepayAmount, address(vTokenCollateral), seizeTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.liquidateBorrowVerify(\\n            address(this),\\n            address(vTokenCollateral),\\n            liquidator,\\n            borrower,\\n            actualRepayAmount,\\n            seizeTokens\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Called only during an in-kind liquidation, or by liquidateBorrow during the liquidation of another VToken.\\n     *  It's absolutely critical to use msg.sender as the seizer vToken and not a parameter.\\n     * @param seizerContract The contract seizing the collateral (either borrowed vToken or Comptroller)\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     */\\n    function _seize(address seizerContract, address liquidator, address borrower, uint256 seizeTokens) internal {\\n        /* Fail if seize not allowed */\\n        comptroller.preSeizeHook(address(this), seizerContract, liquidator, borrower);\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateSeizeLiquidatorIsBorrower();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and liquidator token balances, failing on underflow/overflow:\\n         *  borrowerTokensNew = accountTokens[borrower] - seizeTokens\\n         *  liquidatorTokensNew = accountTokens[liquidator] + seizeTokens\\n         */\\n        uint256 liquidationIncentiveMantissa = ComptrollerViewInterface(address(comptroller))\\n            .liquidationIncentiveMantissa();\\n        uint256 numerator = mul_(seizeTokens, Exp({ mantissa: protocolSeizeShareMantissa }));\\n        uint256 protocolSeizeTokens = div_(numerator, Exp({ mantissa: liquidationIncentiveMantissa }));\\n        uint256 liquidatorSeizeTokens = seizeTokens - protocolSeizeTokens;\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n        uint256 protocolSeizeAmount = mul_ScalarTruncate(exchangeRate, protocolSeizeTokens);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the calculated values into storage */\\n        totalSupply = totalSupply - protocolSeizeTokens;\\n        accountTokens[borrower] = accountTokens[borrower] - seizeTokens;\\n        accountTokens[liquidator] = accountTokens[liquidator] + liquidatorSeizeTokens;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, protocolSeizeAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.LIQUIDATION\\n        );\\n\\n        /* Emit a Transfer event */\\n        emit Transfer(borrower, liquidator, liquidatorSeizeTokens);\\n        emit ProtocolSeize(borrower, protocolShareReserve, protocolSeizeAmount);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.seizeVerify(address(this), seizerContract, liquidator, borrower, seizeTokens);\\n    }\\n\\n    function _setComptroller(ComptrollerInterface newComptroller) internal {\\n        ComptrollerInterface oldComptroller = comptroller;\\n        // Ensure invoke comptroller.isComptroller() returns true\\n        require(newComptroller.isComptroller(), \\\"marker method returned false\\\");\\n\\n        // Set market's comptroller to newComptroller\\n        comptroller = newComptroller;\\n\\n        // Emit NewComptroller(oldComptroller, newComptroller)\\n        emit NewComptroller(oldComptroller, newComptroller);\\n    }\\n\\n    /**\\n     * @notice Sets a new reserve factor for the protocol (*requires fresh interest accrual)\\n     * @dev Admin function to set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     */\\n    function _setReserveFactorFresh(uint256 newReserveFactorMantissa) internal {\\n        // Verify market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetReserveFactorFreshCheck();\\n        }\\n\\n        // Check newReserveFactor \\u2264 maxReserveFactor\\n        if (newReserveFactorMantissa > MAX_RESERVE_FACTOR_MANTISSA) {\\n            revert SetReserveFactorBoundsCheck();\\n        }\\n\\n        uint256 oldReserveFactorMantissa = reserveFactorMantissa;\\n        reserveFactorMantissa = newReserveFactorMantissa;\\n\\n        emit NewReserveFactor(oldReserveFactorMantissa, newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Add reserves by transferring from caller\\n     * @dev Requires fresh interest accrual\\n     * @param addAmount Amount of addition to reserves\\n     * @return actualAddAmount The actual amount added, excluding the potential token fees\\n     */\\n    function _addReservesFresh(uint256 addAmount) internal returns (uint256) {\\n        // totalReserves + actualAddAmount\\n        uint256 totalReservesNew;\\n        uint256 actualAddAmount;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert AddReservesFactorFreshCheck(actualAddAmount);\\n        }\\n\\n        actualAddAmount = _doTransferIn(msg.sender, addAmount);\\n        totalReservesNew = totalReserves + actualAddAmount;\\n        totalReserves = totalReservesNew;\\n        emit ReservesAdded(msg.sender, actualAddAmount, totalReservesNew);\\n\\n        return actualAddAmount;\\n    }\\n\\n    /**\\n     * @notice Reduces reserves by transferring to the protocol reserve contract\\n     * @dev Requires fresh interest accrual\\n     * @param reduceAmount Amount of reduction to reserves\\n     */\\n    function _reduceReservesFresh(uint256 reduceAmount) internal {\\n        if (reduceAmount == 0) {\\n            return;\\n        }\\n        // totalReserves - reduceAmount\\n        uint256 totalReservesNew;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert ReduceReservesFreshCheck();\\n        }\\n\\n        // Fail gracefully if protocol has insufficient underlying cash\\n        if (_getCashPrior() < reduceAmount) {\\n            revert ReduceReservesCashNotAvailable();\\n        }\\n\\n        // Check reduceAmount \\u2264 reserves[n] (totalReserves)\\n        if (reduceAmount > totalReserves) {\\n            revert ReduceReservesCashValidation();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        totalReservesNew = totalReserves - reduceAmount;\\n\\n        // Store reserves[n+1] = reserves[n] - reduceAmount\\n        totalReserves = totalReservesNew;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, reduceAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.SPREAD\\n        );\\n\\n        emit SpreadReservesReduced(protocolShareReserve, reduceAmount, totalReservesNew);\\n    }\\n\\n    /**\\n     * @notice updates the interest rate model (*requires fresh interest accrual)\\n     * @dev Admin function to update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     */\\n    function _setInterestRateModelFresh(InterestRateModel newInterestRateModel) internal {\\n        // Used to store old model for use in the event that is emitted on success\\n        InterestRateModel oldInterestRateModel;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetInterestRateModelFreshCheck();\\n        }\\n\\n        // Track the market's current interest rate model\\n        oldInterestRateModel = interestRateModel;\\n\\n        // Ensure invoke newInterestRateModel.isInterestRateModel() returns true\\n        require(newInterestRateModel.isInterestRateModel(), \\\"marker method returned false\\\");\\n\\n        // Set the interest rate model to newInterestRateModel\\n        interestRateModel = newInterestRateModel;\\n\\n        // Emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel)\\n        emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel);\\n    }\\n\\n    /**\\n     * Safe Token **\\n     */\\n\\n    /**\\n     * @dev Similar to ERC-20 transfer, but handles tokens that have transfer fees.\\n     *      This function returns the actual amount received,\\n     *      which may be less than `amount` if there is a fee attached to the transfer.\\n     * @param from Sender of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     * @return Actual amount received\\n     */\\n    function _doTransferIn(address from, uint256 amount) internal virtual returns (uint256) {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        uint256 balanceBefore = token.balanceOf(address(this));\\n        token.safeTransferFrom(from, address(this), amount);\\n        uint256 balanceAfter = token.balanceOf(address(this));\\n        // Return the amount that was *actually* transferred\\n        return balanceAfter - balanceBefore;\\n    }\\n\\n    /**\\n     * @dev Just a regular ERC-20 transfer, reverts on failure\\n     * @param to Receiver of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     */\\n    function _doTransferOut(address to, uint256 amount) internal virtual {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        token.safeTransfer(to, amount);\\n    }\\n\\n    /**\\n     * @notice Transfer `tokens` tokens from `src` to `dst` by `spender`\\n     * @dev Called by both `transfer` and `transferFrom` internally\\n     * @param spender The address of the account performing the transfer\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param tokens The number of tokens to transfer\\n     */\\n    function _transferTokens(address spender, address src, address dst, uint256 tokens) internal {\\n        /* Fail if transfer not allowed */\\n        comptroller.preTransferHook(address(this), src, dst, tokens);\\n\\n        /* Do not allow self-transfers */\\n        if (src == dst) {\\n            revert TransferNotAllowed();\\n        }\\n\\n        /* Get the allowance, infinite for the account owner */\\n        uint256 startingAllowance;\\n        if (spender == src) {\\n            startingAllowance = type(uint256).max;\\n        } else {\\n            startingAllowance = transferAllowances[src][spender];\\n        }\\n\\n        /* Do the calculations, checking for {under,over}flow */\\n        uint256 allowanceNew = startingAllowance - tokens;\\n        uint256 srcTokensNew = accountTokens[src] - tokens;\\n        uint256 dstTokensNew = accountTokens[dst] + tokens;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n\\n        accountTokens[src] = srcTokensNew;\\n        accountTokens[dst] = dstTokensNew;\\n\\n        /* Eat some of the allowance (if necessary) */\\n        if (startingAllowance != type(uint256).max) {\\n            transferAllowances[src][spender] = allowanceNew;\\n        }\\n\\n        /* We emit a Transfer event */\\n        emit Transfer(src, dst, tokens);\\n\\n        comptroller.transferVerify(address(this), src, dst, tokens);\\n    }\\n\\n    /**\\n     * @notice Initialize the money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     */\\n    function _initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n        require(accrualBlockNumber == 0 && borrowIndex == 0, \\\"market may only be initialized once\\\");\\n\\n        // Set initial exchange rate\\n        initialExchangeRateMantissa = initialExchangeRateMantissa_;\\n        require(initialExchangeRateMantissa > 0, \\\"initial exchange rate must be greater than zero.\\\");\\n\\n        _setComptroller(comptroller_);\\n\\n        // Initialize slot(block or second) number and borrow index (slot(block or second) number mocks depend on comptroller being set)\\n        accrualBlockNumber = getBlockNumberOrTimestamp();\\n        borrowIndex = MANTISSA_ONE;\\n\\n        // Set the interest rate model (depends on slot(block or second) number / borrow index)\\n        _setInterestRateModelFresh(interestRateModel_);\\n\\n        _setReserveFactorFresh(reserveFactorMantissa_);\\n\\n        name = name_;\\n        symbol = symbol_;\\n        decimals = decimals_;\\n        _setShortfallContract(riskManagement.shortfall);\\n        _setProtocolShareReserve(riskManagement.protocolShareReserve);\\n        protocolSeizeShareMantissa = DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA;\\n\\n        // Set underlying and sanity check it\\n        underlying = underlying_;\\n        IERC20Upgradeable(underlying).totalSupply();\\n\\n        // The counter starts true to prevent changing it from zero to non-zero (i.e. smaller cost/refund)\\n        _notEntered = true;\\n        _transferOwnership(admin_);\\n    }\\n\\n    function _setShortfallContract(address shortfall_) internal {\\n        ensureNonzeroAddress(shortfall_);\\n        address oldShortfall = shortfall;\\n        shortfall = shortfall_;\\n        emit NewShortfallContract(oldShortfall, shortfall_);\\n    }\\n\\n    function _setProtocolShareReserve(address payable protocolShareReserve_) internal {\\n        ensureNonzeroAddress(protocolShareReserve_);\\n        address oldProtocolShareReserve = address(protocolShareReserve);\\n        protocolShareReserve = protocolShareReserve_;\\n        emit NewProtocolShareReserve(oldProtocolShareReserve, address(protocolShareReserve_));\\n    }\\n\\n    function _ensureSenderIsDelegateOf(address user) internal view {\\n        if (!ComptrollerViewInterface(address(comptroller)).approvedDelegates(user, msg.sender)) {\\n            revert DelegateNotApproved();\\n        }\\n    }\\n\\n    /**\\n     * @notice Gets balance of this contract in terms of the underlying\\n     * @dev This excludes the value of the current message, if any\\n     * @return The quantity of underlying tokens owned by this contract\\n     */\\n    function _getCashPrior() internal view virtual returns (uint256) {\\n        return IERC20Upgradeable(underlying).balanceOf(address(this));\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance the calculated balance\\n     */\\n    function _borrowBalanceStored(address account) internal view returns (uint256) {\\n        /* Get borrowBalance and borrowIndex */\\n        BorrowSnapshot memory borrowSnapshot = accountBorrows[account];\\n\\n        /* If borrowBalance = 0 then borrowIndex is likely also 0.\\n         * Rather than failing the calculation with a division by 0, we immediately return 0 in this case.\\n         */\\n        if (borrowSnapshot.principal == 0) {\\n            return 0;\\n        }\\n\\n        /* Calculate new borrow balance using the interest index:\\n         *  recentBorrowBalance = borrower.borrowBalance * market.borrowIndex / borrower.borrowIndex\\n         */\\n        uint256 principalTimesIndex = borrowSnapshot.principal * borrowIndex;\\n\\n        return principalTimesIndex / borrowSnapshot.interestIndex;\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function _exchangeRateStored() internal view virtual returns (uint256) {\\n        uint256 _totalSupply = totalSupply;\\n        if (_totalSupply == 0) {\\n            /*\\n             * If there are no tokens minted:\\n             *  exchangeRate = initialExchangeRate\\n             */\\n            return initialExchangeRateMantissa;\\n        }\\n        /*\\n         * Otherwise:\\n         *  exchangeRate = (totalCash + totalBorrows + badDebt - totalReserves) / totalSupply\\n         */\\n        uint256 totalCash = _getCashPrior();\\n        uint256 cashPlusBorrowsMinusReserves = totalCash + totalBorrows + badDebt - totalReserves;\\n        uint256 exchangeRate = (cashPlusBorrowsMinusReserves * EXP_SCALE) / _totalSupply;\\n\\n        return exchangeRate;\\n    }\\n}\\n\",\"keccak256\":\"0xa220ca317fe69b920b86e43f054c43b5f891f12160fd312c9a21668f969ee056\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { ComptrollerInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\n\\n/**\\n * @title VTokenStorage\\n * @author Venus\\n * @notice Storage layout used by the `VToken` contract\\n */\\n// solhint-disable-next-line max-states-count\\ncontract VTokenStorage {\\n    /**\\n     * @notice Container for borrow balance information\\n     * @member principal Total balance (with accrued interest), after applying the most recent balance-changing action\\n     * @member interestIndex Global borrowIndex as of the most recent balance-changing action\\n     */\\n    struct BorrowSnapshot {\\n        uint256 principal;\\n        uint256 interestIndex;\\n    }\\n\\n    /**\\n     * @dev Guard variable for re-entrancy checks\\n     */\\n    bool internal _notEntered;\\n\\n    /**\\n     * @notice Underlying asset for this VToken\\n     */\\n    address public underlying;\\n\\n    /**\\n     * @notice EIP-20 token name for this token\\n     */\\n    string public name;\\n\\n    /**\\n     * @notice EIP-20 token symbol for this token\\n     */\\n    string public symbol;\\n\\n    /**\\n     * @notice EIP-20 token decimals for this token\\n     */\\n    uint8 public decimals;\\n\\n    /**\\n     * @notice Protocol share Reserve contract address\\n     */\\n    address payable public protocolShareReserve;\\n\\n    /**\\n     * @notice Contract which oversees inter-vToken operations\\n     */\\n    ComptrollerInterface public comptroller;\\n\\n    /**\\n     * @notice Model which tells what the current interest rate should be\\n     */\\n    InterestRateModel public interestRateModel;\\n\\n    // Initial exchange rate used when minting the first VTokens (used when totalSupply = 0)\\n    uint256 internal initialExchangeRateMantissa;\\n\\n    /**\\n     * @notice Fraction of interest currently set aside for reserves\\n     */\\n    uint256 public reserveFactorMantissa;\\n\\n    /**\\n     * @notice Slot(block or second) number that interest was last accrued at\\n     */\\n    uint256 public accrualBlockNumber;\\n\\n    /**\\n     * @notice Accumulator of the total earned interest rate since the opening of the market\\n     */\\n    uint256 public borrowIndex;\\n\\n    /**\\n     * @notice Total amount of outstanding borrows of the underlying in this market\\n     */\\n    uint256 public totalBorrows;\\n\\n    /**\\n     * @notice Total amount of reserves of the underlying held in this market\\n     */\\n    uint256 public totalReserves;\\n\\n    /**\\n     * @notice Total number of tokens in circulation\\n     */\\n    uint256 public totalSupply;\\n\\n    /**\\n     * @notice Total bad debt of the market\\n     */\\n    uint256 public badDebt;\\n\\n    // Official record of token balances for each account\\n    mapping(address => uint256) internal accountTokens;\\n\\n    // Approved token transfer amounts on behalf of others\\n    mapping(address => mapping(address => uint256)) internal transferAllowances;\\n\\n    // Mapping of account addresses to outstanding borrow balances\\n    mapping(address => BorrowSnapshot) internal accountBorrows;\\n\\n    /**\\n     * @notice Share of seized collateral that is added to reserves\\n     */\\n    uint256 public protocolSeizeShareMantissa;\\n\\n    /**\\n     * @notice Storage of Shortfall contract address\\n     */\\n    address public shortfall;\\n\\n    /**\\n     * @notice delta slot (block or second) after which reserves will be reduced\\n     */\\n    uint256 public reduceReservesBlockDelta;\\n\\n    /**\\n     * @notice last slot (block or second) number at which reserves were reduced\\n     */\\n    uint256 public reduceReservesBlockNumber;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n}\\n\\n/**\\n * @title VTokenInterface\\n * @author Venus\\n * @notice Interface implemented by the `VToken` contract\\n */\\nabstract contract VTokenInterface is VTokenStorage {\\n    struct RiskManagementInit {\\n        address shortfall;\\n        address payable protocolShareReserve;\\n    }\\n\\n    /*** Market Events ***/\\n\\n    /**\\n     * @notice Event emitted when interest is accrued\\n     */\\n    event AccrueInterest(uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when tokens are minted\\n     */\\n    event Mint(address indexed minter, uint256 mintAmount, uint256 mintTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when tokens are redeemed\\n     */\\n    event Redeem(address indexed redeemer, uint256 redeemAmount, uint256 redeemTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when underlying is borrowed\\n     */\\n    event Borrow(address indexed borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when a borrow is repaid\\n     */\\n    event RepayBorrow(\\n        address indexed payer,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        uint256 accountBorrows,\\n        uint256 totalBorrows\\n    );\\n\\n    /**\\n     * @notice Event emitted when bad debt is accumulated on a market\\n     * @param borrower borrower to \\\"forgive\\\"\\n     * @param badDebtDelta amount of new bad debt recorded\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtIncreased(address indexed borrower, uint256 badDebtDelta, uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when bad debt is recovered via an auction\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtRecovered(uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when a borrow is liquidated\\n     */\\n    event LiquidateBorrow(\\n        address indexed liquidator,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        address indexed vTokenCollateral,\\n        uint256 seizeTokens\\n    );\\n\\n    /*** Admin Events ***/\\n\\n    /**\\n     * @notice Event emitted when comptroller is changed\\n     */\\n    event NewComptroller(ComptrollerInterface indexed oldComptroller, ComptrollerInterface indexed newComptroller);\\n\\n    /**\\n     * @notice Event emitted when shortfall contract address is changed\\n     */\\n    event NewShortfallContract(address indexed oldShortfall, address indexed newShortfall);\\n\\n    /**\\n     * @notice Event emitted when protocol share reserve contract address is changed\\n     */\\n    event NewProtocolShareReserve(address indexed oldProtocolShareReserve, address indexed newProtocolShareReserve);\\n\\n    /**\\n     * @notice Event emitted when interestRateModel is changed\\n     */\\n    event NewMarketInterestRateModel(\\n        InterestRateModel indexed oldInterestRateModel,\\n        InterestRateModel indexed newInterestRateModel\\n    );\\n\\n    /**\\n     * @notice Event emitted when protocol seize share is changed\\n     */\\n    event NewProtocolSeizeShare(uint256 oldProtocolSeizeShareMantissa, uint256 newProtocolSeizeShareMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserve factor is changed\\n     */\\n    event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserves are added\\n     */\\n    event ReservesAdded(address indexed benefactor, uint256 addAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice Event emitted when the spread reserves are reduced\\n     */\\n    event SpreadReservesReduced(address indexed protocolShareReserve, uint256 reduceAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice EIP20 Transfer event\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 amount);\\n\\n    /**\\n     * @notice EIP20 Approval event\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\\n\\n    /**\\n     * @notice Event emitted when healing the borrow\\n     */\\n    event HealBorrow(address indexed payer, address indexed borrower, uint256 repayAmount);\\n\\n    /**\\n     * @notice Event emitted when tokens are swept\\n     */\\n    event SweepToken(address indexed token);\\n\\n    /**\\n     * @notice Event emitted when reduce reserves slot (block or second) delta is changed\\n     */\\n    event NewReduceReservesBlockDelta(\\n        uint256 oldReduceReservesBlockOrTimestampDelta,\\n        uint256 newReduceReservesBlockOrTimestampDelta\\n    );\\n\\n    /**\\n     * @notice Event emitted when liquidation reserves are reduced\\n     */\\n    event ProtocolSeize(address indexed from, address indexed to, uint256 amount);\\n\\n    /*** User Interface ***/\\n\\n    function mint(uint256 mintAmount) external virtual returns (uint256);\\n\\n    function mintBehalf(address minter, uint256 mintAllowed) external virtual returns (uint256);\\n\\n    function redeem(uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemUnderlying(uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function redeemUnderlyingBehalf(address redeemer, uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function borrow(uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function borrowBehalf(address borrwwer, uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function repayBorrow(uint256 repayAmount) external virtual returns (uint256);\\n\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external virtual returns (uint256);\\n\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external virtual returns (uint256);\\n\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external virtual;\\n\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipCloseFactorCheck\\n    ) external virtual;\\n\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external virtual;\\n\\n    function transfer(address dst, uint256 amount) external virtual returns (bool);\\n\\n    function transferFrom(address src, address dst, uint256 amount) external virtual returns (bool);\\n\\n    function accrueInterest() external virtual returns (uint256);\\n\\n    function sweepToken(IERC20Upgradeable token) external virtual;\\n\\n    /*** Admin Functions ***/\\n\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external virtual;\\n\\n    function reduceReserves(uint256 reduceAmount) external virtual;\\n\\n    function exchangeRateCurrent() external virtual returns (uint256);\\n\\n    function borrowBalanceCurrent(address account) external virtual returns (uint256);\\n\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external virtual;\\n\\n    function addReserves(uint256 addAmount) external virtual;\\n\\n    function totalBorrowsCurrent() external virtual returns (uint256);\\n\\n    function balanceOfUnderlying(address owner) external virtual returns (uint256);\\n\\n    function approve(address spender, uint256 amount) external virtual returns (bool);\\n\\n    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool);\\n\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool);\\n\\n    function allowance(address owner, address spender) external view virtual returns (uint256);\\n\\n    function balanceOf(address owner) external view virtual returns (uint256);\\n\\n    function getAccountSnapshot(address account) external view virtual returns (uint256, uint256, uint256, uint256);\\n\\n    function borrowRatePerBlock() external view virtual returns (uint256);\\n\\n    function supplyRatePerBlock() external view virtual returns (uint256);\\n\\n    function borrowBalanceStored(address account) external view virtual returns (uint256);\\n\\n    function exchangeRateStored() external view virtual returns (uint256);\\n\\n    function getCash() external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is a VToken contract (for inspection)\\n     * @return Always true\\n     */\\n    function isVToken() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7c4cbb879e3a931cfee4fa7a9eb1978eddff18087a1c4f56decedb84c2479f1e\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\",\"keccak256\":\"0x54ab3a6f3bc87569ed12370f3470a1ec84cea9796d4d0ccf3d07dd4280c044aa\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/validators.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\\nerror ZeroAddressNotAllowed();\\n\\n/// @notice Checks if the provided address is nonzero, reverts otherwise\\n/// @param address_ Address to check\\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\\nfunction ensureNonzeroAddress(address address_) pure {\\n    if (address_ == address(0)) {\\n        revert ZeroAddressNotAllowed();\\n    }\\n}\\n\",\"keccak256\":\"0x93bdd5cfb100f0f9a1d446857e23c3633df6ab12c266333c978428edd96b1367\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface IProtocolShareReserve {\\n    /// @notice it represents the type of vToken income\\n    enum IncomeType {\\n        SPREAD,\\n        LIQUIDATION\\n    }\\n\\n    function updateAssetsState(\\n        address comptroller,\\n        address asset,\\n        IncomeType incomeType\\n    ) external;\\n}\\n\",\"keccak256\":\"0x5fddc5b63fdd850b3b5c83576cda50dcb27a205dbb1a23af17d9da0d9f04fa0a\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { SECONDS_PER_YEAR } from \\\"./constants.sol\\\";\\n\\nabstract contract TimeManagerV8 {\\n    /// @notice Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 public immutable blocksOrSecondsPerYear;\\n\\n    /// @notice Acknowledges if a contract is time based or not\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    bool public immutable isTimeBased;\\n\\n    /// @notice Stores the current block timestamp or block number depending on isTimeBased\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    function() view returns (uint256) private immutable _getCurrentSlot;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n\\n    /// @notice Thrown when blocks per year is invalid\\n    error InvalidBlocksPerYear();\\n\\n    /// @notice Thrown when time based but blocks per year is provided\\n    error InvalidTimeBasedConfiguration();\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block\\n     * If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:error InvalidBlocksPerYear is thrown if blocksPerYear entered is zero and timeBased is false\\n     * @custom:error InvalidTimeBasedConfiguration is thrown if blocksPerYear entered is non zero and timeBased is true\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) {\\n        if (!timeBased_ && blocksPerYear_ == 0) {\\n            revert InvalidBlocksPerYear();\\n        }\\n\\n        if (timeBased_ && blocksPerYear_ != 0) {\\n            revert InvalidTimeBasedConfiguration();\\n        }\\n\\n        isTimeBased = timeBased_;\\n        blocksOrSecondsPerYear = timeBased_ ? SECONDS_PER_YEAR : blocksPerYear_;\\n        _getCurrentSlot = timeBased_ ? _getBlockTimestamp : _getBlockNumber;\\n    }\\n\\n    /**\\n     * @dev Function to simply retrieve block number or block timestamp\\n     * @return Current block number or block timestamp\\n     */\\n    function getBlockNumberOrTimestamp() public view virtual returns (uint256) {\\n        return _getCurrentSlot();\\n    }\\n\\n    /**\\n     * @dev Returns the current timestamp in seconds\\n     * @return The current timestamp\\n     */\\n    function _getBlockTimestamp() private view returns (uint256) {\\n        return block.timestamp;\\n    }\\n\\n    /**\\n     * @dev Returns the current block number\\n     * @return The current block number\\n     */\\n    function _getBlockNumber() private view returns (uint256) {\\n        return block.number;\\n    }\\n}\\n\",\"keccak256\":\"0x57a2bbb9b8e02b1c0a5c0e305fef1328a22db56c3d4b148c362010a6e767243c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\",\"keccak256\":\"0x14de93ead464da249af31bea0e3bcfb62ec693bea3475fb4d90f055ac81dc5eb\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { PrimeStorageV1 } from \\\"../PrimeStorage.sol\\\";\\n\\n/**\\n * @title IPrime\\n * @author Venus\\n * @notice Interface for Prime Token\\n */\\ninterface IPrime {\\n    struct APRInfo {\\n        // supply APR of the user in BPS\\n        uint256 supplyAPR;\\n        // borrow APR of the user in BPS\\n        uint256 borrowAPR;\\n        // total score of the market\\n        uint256 totalScore;\\n        // score of the user\\n        uint256 userScore;\\n        // capped XVS balance of the user\\n        uint256 xvsBalanceForScore;\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    struct Capital {\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    /**\\n     * @notice Returns boosted pending interest accrued for a user for all markets\\n     * @param user the account for which to get the accrued interests\\n     * @return pendingRewards the number of underlying tokens accrued by the user for all markets\\n     */\\n    function getPendingRewards(address user) external returns (PrimeStorageV1.PendingReward[] memory pendingRewards);\\n\\n    /**\\n     * @notice Update total score of multiple users and market\\n     * @param users accounts for which we need to update score\\n     */\\n    function updateScores(address[] memory users) external;\\n\\n    /**\\n     * @notice Update value of alpha\\n     * @param _alphaNumerator numerator of alpha. If alpha is 0.5 then numerator is 1\\n     * @param _alphaDenominator denominator of alpha. If alpha is 0.5 then denominator is 2\\n     */\\n    function updateAlpha(uint128 _alphaNumerator, uint128 _alphaDenominator) external;\\n\\n    /**\\n     * @notice Update multipliers for a market\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier new supply multiplier for the market, scaled by 1e18\\n     * @param borrowMultiplier new borrow multiplier for the market, scaled by 1e18\\n     */\\n    function updateMultipliers(address market, uint256 supplyMultiplier, uint256 borrowMultiplier) external;\\n\\n    /**\\n     * @notice Add a market to prime program\\n     * @param comptroller address of the comptroller\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier the multiplier for supply cap. It should be converted to 1e18\\n     * @param borrowMultiplier the multiplier for borrow cap. It should be converted to 1e18\\n     */\\n    function addMarket(\\n        address comptroller,\\n        address market,\\n        uint256 supplyMultiplier,\\n        uint256 borrowMultiplier\\n    ) external;\\n\\n    /**\\n     * @notice Set limits for total tokens that can be minted\\n     * @param _irrevocableLimit total number of irrevocable tokens that can be minted\\n     * @param _revocableLimit total number of revocable tokens that can be minted\\n     */\\n    function setLimit(uint256 _irrevocableLimit, uint256 _revocableLimit) external;\\n\\n    /**\\n     * @notice Directly issue prime tokens to users\\n     * @param isIrrevocable are the tokens being issued\\n     * @param users list of address to issue tokens to\\n     */\\n    function issue(bool isIrrevocable, address[] calldata users) external;\\n\\n    /**\\n     * @notice Executed by XVSVault whenever user's XVSVault balance changes\\n     * @param user the account address whose balance was updated\\n     */\\n    function xvsUpdated(address user) external;\\n\\n    /**\\n     * @notice accrues interest and updates score for an user for a specific market\\n     * @param user the account address for which to accrue interest and update score\\n     * @param market the market for which to accrue interest and update score\\n     */\\n    function accrueInterestAndUpdateScore(address user, address market) external;\\n\\n    /**\\n     * @notice For claiming prime token when staking period is completed\\n     */\\n    function claim() external;\\n\\n    /**\\n     * @notice For burning any prime token\\n     * @param user the account address for which the prime token will be burned\\n     */\\n    function burn(address user) external;\\n\\n    /**\\n     * @notice To pause or unpause claiming of interest\\n     */\\n    function togglePause() external;\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken) external returns (uint256);\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @param user the user for which to claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Distributes income from market since last distribution\\n     * @param vToken the market for which to distribute the income\\n     */\\n    function accrueInterest(address vToken) external;\\n\\n    /**\\n     * @notice Returns boosted interest accrued for a user\\n     * @param vToken the market for which to fetch the accrued interest\\n     * @param user the account for which to get the accrued interest\\n     * @return interestAccrued the number of underlying tokens accrued by the user since the last accrual\\n     */\\n    function getInterestAccrued(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Retrieves an array of all available markets\\n     * @return an array of addresses representing all available markets\\n     */\\n    function getAllMarkets() external view returns (address[] memory);\\n\\n    /**\\n     * @notice fetch the numbers of seconds remaining for staking period to complete\\n     * @param user the account address for which we are checking the remaining time\\n     * @return timeRemaining the number of seconds the user needs to wait to claim prime token\\n     */\\n    function claimTimeRemaining(address user) external view returns (uint256);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for user for a given market\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function calculateAPR(address market, address user) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for estimated supply, borrow and XVS staked\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @param borrow hypothetical borrow amount\\n     * @param supply hypothetical supply amount\\n     * @param xvsStaked hypothetical staked XVS amount\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function estimateAPR(\\n        address market,\\n        address user,\\n        uint256 borrow,\\n        uint256 supply,\\n        uint256 xvsStaked\\n    ) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice the total income that's going to be distributed in a year to prime token holders\\n     * @param vToken the market for which to fetch the total income that's going to distributed in a year\\n     * @return amount the total income\\n     */\\n    function incomeDistributionYearly(address vToken) external view returns (uint256 amount);\\n\\n    /**\\n     * @notice Returns if user is a prime holder\\n     * @return isPrimeHolder true if user is a prime holder\\n     */\\n    function isUserPrimeHolder(address user) external view returns (bool);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param loopsLimit Number of loops limit\\n     */\\n    function setMaxLoopsLimit(uint256 loopsLimit) external;\\n\\n    /**\\n     * @notice Update staked at timestamp for multiple users\\n     * @param users accounts for which we need to update staked at timestamp\\n     * @param timestamps new staked at timestamp for the users\\n     */\\n    function setStakedAt(address[] calldata users, uint256[] calldata timestamps) external;\\n}\\n\",\"keccak256\":\"0xd112f60183416ad796093b4a83a80ddc1b8b655965f02ae55ca82e2a0c68f97d\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\n/**\\n * @title PrimeStorageV1\\n * @author Venus\\n * @notice Storage for Prime Token\\n */\\ncontract PrimeStorageV1 {\\n    struct Token {\\n        bool exists;\\n        bool isIrrevocable;\\n    }\\n\\n    struct Market {\\n        uint256 supplyMultiplier;\\n        uint256 borrowMultiplier;\\n        uint256 rewardIndex;\\n        uint256 sumOfMembersScore;\\n        bool exists;\\n    }\\n\\n    struct Interest {\\n        uint256 accrued;\\n        uint256 score;\\n        uint256 rewardIndex;\\n    }\\n\\n    struct PendingReward {\\n        address vToken;\\n        address rewardToken;\\n        uint256 amount;\\n    }\\n\\n    /// @notice Base unit for computations, usually used in scaling (multiplications, divisions)\\n    uint256 internal constant EXP_SCALE = 1e18;\\n\\n    /// @notice maximum BPS = 100%\\n    uint256 internal constant MAXIMUM_BPS = 1e4;\\n\\n    /// @notice Mapping to get prime token's metadata\\n    mapping(address => Token) public tokens;\\n\\n    /// @notice  Tracks total irrevocable tokens minted\\n    uint256 public totalIrrevocable;\\n\\n    /// @notice  Tracks total revocable tokens minted\\n    uint256 public totalRevocable;\\n\\n    /// @notice  Indicates maximum revocable tokens that can be minted\\n    uint256 public revocableLimit;\\n\\n    /// @notice  Indicates maximum irrevocable tokens that can be minted\\n    uint256 public irrevocableLimit;\\n\\n    /// @notice Tracks when prime token eligible users started staking for claiming prime token\\n    mapping(address => uint256) public stakedAt;\\n\\n    /// @notice vToken to market configuration\\n    mapping(address => Market) public markets;\\n\\n    /// @notice vToken to user to user index\\n    mapping(address => mapping(address => Interest)) public interests;\\n\\n    /// @notice A list of boosted markets\\n    address[] internal _allMarkets;\\n\\n    /// @notice numerator of alpha. Ex: if alpha is 0.5 then this will be 1\\n    uint128 public alphaNumerator;\\n\\n    /// @notice denominator of alpha. Ex: if alpha is 0.5 then this will be 2\\n    uint128 public alphaDenominator;\\n\\n    /// @notice address of XVS vault\\n    address public xvsVault;\\n\\n    /// @notice address of XVS vault reward token\\n    address public xvsVaultRewardToken;\\n\\n    /// @notice address of XVS vault pool id\\n    uint256 public xvsVaultPoolId;\\n\\n    /// @notice mapping to check if a account's score was updated in the round\\n    mapping(uint256 => mapping(address => bool)) public isScoreUpdated;\\n\\n    /// @notice unique id for next round\\n    uint256 public nextScoreUpdateRoundId;\\n\\n    /// @notice total number of accounts whose score needs to be updated\\n    uint256 public totalScoreUpdatesRequired;\\n\\n    /// @notice total number of accounts whose score is yet to be updated\\n    uint256 public pendingScoreUpdates;\\n\\n    /// @notice mapping used to find if an asset is part of prime markets\\n    mapping(address => address) public vTokenForAsset;\\n\\n    /// @notice Address of core pool comptroller contract\\n    address internal corePoolComptroller;\\n\\n    /// @notice unreleased income from PLP that's already distributed to prime holders\\n    /// @dev mapping of asset address => amount\\n    mapping(address => uint256) public unreleasedPLPIncome;\\n\\n    /// @notice The address of PLP contract\\n    address public primeLiquidityProvider;\\n\\n    /// @notice The address of ResilientOracle contract\\n    ResilientOracleInterface public oracle;\\n\\n    /// @notice The address of PoolRegistry contract\\n    address public poolRegistry;\\n\\n    /// @dev This empty reserved space is put in place to allow future versions to add new\\n    /// variables without shifting down storage in the inheritance chain.\\n    uint256[26] private __gap;\\n}\\n\",\"keccak256\":\"0x5285c875114db2ea2be0b81b65722d5761806217022db733323c4e03365a95e7\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[{"astId":414,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":417,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":2820,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":118,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"_owner","offset":0,"slot":"51","type":"t_address"},{"astId":238,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"__gap","offset":0,"slot":"52","type":"t_array(t_uint256)49_storage"},{"astId":11,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"_pendingOwner","offset":0,"slot":"101","type":"t_address"},{"astId":105,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"__gap","offset":0,"slot":"102","type":"t_array(t_uint256)49_storage"},{"astId":4895,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"_accessControlManager","offset":0,"slot":"151","type":"t_contract(IAccessControlManagerV8)5080"},{"astId":4900,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"__gap","offset":0,"slot":"152","type":"t_array(t_uint256)49_storage"},{"astId":9488,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"oracle","offset":0,"slot":"201","type":"t_contract(ResilientOracleInterface)16173"},{"astId":9491,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"closeFactorMantissa","offset":0,"slot":"202","type":"t_uint256"},{"astId":9494,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"liquidationIncentiveMantissa","offset":0,"slot":"203","type":"t_uint256"},{"astId":9501,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"accountAssets","offset":0,"slot":"204","type":"t_mapping(t_address,t_array(t_contract(VToken)15506)dyn_storage)"},{"astId":9507,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"markets","offset":0,"slot":"205","type":"t_mapping(t_address,t_struct(Market)9484_storage)"},{"astId":9512,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"allMarkets","offset":0,"slot":"206","type":"t_array(t_contract(VToken)15506)dyn_storage"},{"astId":9517,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"borrowCaps","offset":0,"slot":"207","type":"t_mapping(t_address,t_uint256)"},{"astId":9520,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"minLiquidatableCollateral","offset":0,"slot":"208","type":"t_uint256"},{"astId":9525,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"supplyCaps","offset":0,"slot":"209","type":"t_mapping(t_address,t_uint256)"},{"astId":9533,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"_actionPaused","offset":0,"slot":"210","type":"t_mapping(t_address,t_mapping(t_enum(Action)9148,t_bool))"},{"astId":9537,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"rewardsDistributors","offset":0,"slot":"211","type":"t_array(t_contract(RewardsDistributor)12324)dyn_storage"},{"astId":9541,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"rewardsDistributorExists","offset":0,"slot":"212","type":"t_mapping(t_address,t_bool)"},{"astId":9546,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"isForcedLiquidationEnabled","offset":0,"slot":"213","type":"t_mapping(t_address,t_bool)"},{"astId":9562,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"prime","offset":0,"slot":"214","type":"t_contract(IPrime)16613"},{"astId":9569,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"approvedDelegates","offset":0,"slot":"215","type":"t_mapping(t_address,t_mapping(t_address,t_bool))"},{"astId":9574,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"__gap","offset":0,"slot":"216","type":"t_array(t_uint256)47_storage"},{"astId":10271,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"maxLoopsLimit","offset":0,"slot":"263","type":"t_uint256"},{"astId":10276,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"__gap","offset":0,"slot":"264","type":"t_array(t_uint256)49_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_contract(RewardsDistributor)12324)dyn_storage":{"base":"t_contract(RewardsDistributor)12324","encoding":"dynamic_array","label":"contract RewardsDistributor[]","numberOfBytes":"32"},"t_array(t_contract(VToken)15506)dyn_storage":{"base":"t_contract(VToken)15506","encoding":"dynamic_array","label":"contract VToken[]","numberOfBytes":"32"},"t_array(t_uint256)47_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[47]","numberOfBytes":"1504"},"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(IAccessControlManagerV8)5080":{"encoding":"inplace","label":"contract IAccessControlManagerV8","numberOfBytes":"20"},"t_contract(IPrime)16613":{"encoding":"inplace","label":"contract IPrime","numberOfBytes":"20"},"t_contract(ResilientOracleInterface)16173":{"encoding":"inplace","label":"contract ResilientOracleInterface","numberOfBytes":"20"},"t_contract(RewardsDistributor)12324":{"encoding":"inplace","label":"contract RewardsDistributor","numberOfBytes":"20"},"t_contract(VToken)15506":{"encoding":"inplace","label":"contract VToken","numberOfBytes":"20"},"t_enum(Action)9148":{"encoding":"inplace","label":"enum Action","numberOfBytes":"1"},"t_mapping(t_address,t_array(t_contract(VToken)15506)dyn_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => contract VToken[])","numberOfBytes":"32","value":"t_array(t_contract(VToken)15506)dyn_storage"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_mapping(t_address,t_bool))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => bool))","numberOfBytes":"32","value":"t_mapping(t_address,t_bool)"},"t_mapping(t_address,t_mapping(t_enum(Action)9148,t_bool))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(enum Action => bool))","numberOfBytes":"32","value":"t_mapping(t_enum(Action)9148,t_bool)"},"t_mapping(t_address,t_struct(Market)9484_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct ComptrollerStorage.Market)","numberOfBytes":"32","value":"t_struct(Market)9484_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_enum(Action)9148,t_bool)":{"encoding":"mapping","key":"t_enum(Action)9148","label":"mapping(enum Action => bool)","numberOfBytes":"32","value":"t_bool"},"t_struct(Market)9484_storage":{"encoding":"inplace","label":"struct ComptrollerStorage.Market","members":[{"astId":9475,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"isListed","offset":0,"slot":"0","type":"t_bool"},{"astId":9477,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"collateralFactorMantissa","offset":0,"slot":"1","type":"t_uint256"},{"astId":9479,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"liquidationThresholdMantissa","offset":0,"slot":"2","type":"t_uint256"},{"astId":9483,"contract":"@venusprotocol/isolated-pools/contracts/Comptroller.sol:Comptroller","label":"accountMembership","offset":0,"slot":"3","type":"t_mapping(t_address,t_bool)"}],"numberOfBytes":"128"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"errors":{"ActionPaused(address,uint8)":[{"notice":"Thrown when trying to perform an action that is paused"}],"BorrowActionNotPaused()":[{"notice":"Thrown when borrow action is not paused"}],"BorrowCapExceeded(address,uint256)":[{"notice":"Thrown if the borrow cap is exceeded"}],"BorrowCapIsNotZero()":[{"notice":"Thrown when borrow cap is not zero"}],"CollateralFactorIsNotZero()":[{"notice":"Thrown when collateral factor is not zero"}],"ComptrollerMismatch()":[{"notice":"Thrown when a market has an unexpected comptroller"}],"DelegationStatusUnchanged()":[{"notice":"Thrown if delegate approval status is already set to the requested value"}],"EnterMarketActionNotPaused()":[{"notice":"Thrown when enter market action is not paused"}],"ExitMarketActionNotPaused()":[{"notice":"Thrown when exit market action is not paused"}],"InsufficientLiquidity()":[{"notice":"Thrown when the account doesn't have enough liquidity to redeem or borrow"}],"InsufficientShortfall()":[{"notice":"Thrown when trying to liquidate a healthy account"}],"InvalidCollateralFactor()":[{"notice":"Thrown when collateral factor exceeds the upper bound"}],"InvalidLiquidationThreshold()":[{"notice":"Thrown when liquidation threshold exceeds the collateral factor"}],"LiquidateActionNotPaused()":[{"notice":"Thrown when liquidate action is not paused"}],"MarketAlreadyListed(address)":[{"notice":"Thrown when trying to add a market that is already listed"}],"MarketNotCollateral(address,address)":[{"notice":"Thrown when user is not member of market"}],"MarketNotListed(address)":[{"notice":"Thrown when the market is not listed"}],"MaxLoopsLimitExceeded(uint256,uint256)":[{"notice":"Thrown an error on maxLoopsLimit exceeds for any loop"}],"MinimalCollateralViolated(uint256,uint256)":[{"notice":"Thrown during the liquidation if user's total collateral amount is lower than   a predefined threshold. In this case only batch liquidations (either liquidateAccount   or healAccount) are available."}],"MintActionNotPaused()":[{"notice":"Thrown when mint action is not paused"}],"NonzeroBorrowBalance()":[{"notice":"Thrown if the user is trying to exit a market in which they have an outstanding debt"}],"PriceError(address)":[{"notice":"Thrown when the oracle returns an invalid price for some asset"}],"RedeemActionNotPaused()":[{"notice":"Thrown when redeem action is not paused"}],"RepayActionNotPaused()":[{"notice":"Thrown when repay action is not paused"}],"SeizeActionNotPaused()":[{"notice":"Thrown when seize action is not paused"}],"SnapshotError(address,address)":[{"notice":"Thrown if VToken unexpectedly returned a nonzero error code while trying to get account snapshot"}],"SupplyCapExceeded(address,uint256)":[{"notice":"Thrown if the supply cap is exceeded"}],"SupplyCapIsNotZero()":[{"notice":"Thrown when supply cap is not zero"}],"TooMuchRepay()":[{"notice":"Thrown when trying to repay more than allowed by close factor"}],"TransferActionNotPaused()":[{"notice":"Thrown when transfer action is not paused"}],"Unauthorized(address,address,string)":[{"notice":"Thrown when the action is prohibited by AccessControlManager"}],"UnexpectedSender(address,address)":[{"notice":"Thrown when the action is only available to specific sender, but the real sender was different"}],"ZeroAddressNotAllowed()":[{"notice":"Thrown if the supplied address is a zero address where it is not allowed"}]},"events":{"ActionPausedMarket(address,uint8,bool)":{"notice":"Emitted when an action is paused on a market"},"DelegateUpdated(address,address,bool)":{"notice":"Emitted when the borrowing or redeeming delegate rights are updated for an account"},"IsForcedLiquidationEnabledUpdated(address,bool)":{"notice":"Emitted when forced liquidation is enabled or disabled for a market"},"MarketEntered(address,address)":{"notice":"Emitted when an account enters a market"},"MarketExited(address,address)":{"notice":"Emitted when an account exits a market"},"MarketSupported(address)":{"notice":"Emitted when a market is supported"},"MarketUnlisted(address)":{"notice":"Emitted when a market is unlisted"},"MaxLoopsLimitUpdated(uint256,uint256)":{"notice":"Emitted when max loops limit is set"},"NewAccessControlManager(address,address)":{"notice":"Emitted when access control manager contract address is changed"},"NewBorrowCap(address,uint256)":{"notice":"Emitted when borrow cap for a vToken is changed"},"NewCloseFactor(uint256,uint256)":{"notice":"Emitted when close factor is changed by admin"},"NewCollateralFactor(address,uint256,uint256)":{"notice":"Emitted when a collateral factor is changed by admin"},"NewLiquidationIncentive(uint256,uint256)":{"notice":"Emitted when liquidation incentive is changed by admin"},"NewLiquidationThreshold(address,uint256,uint256)":{"notice":"Emitted when liquidation threshold is changed by admin"},"NewMinLiquidatableCollateral(uint256,uint256)":{"notice":"Emitted when the collateral threshold (in USD) for non-batch liquidations is changed"},"NewPriceOracle(address,address)":{"notice":"Emitted when price oracle is changed"},"NewPrimeToken(address,address)":{"notice":"Emitted when prime token contract address is changed"},"NewRewardsDistributor(address,address)":{"notice":"Emitted when a rewards distributor is added"},"NewSupplyCap(address,uint256)":{"notice":"Emitted when supply cap for a vToken is changed"}},"kind":"user","methods":{"accessControlManager()":{"notice":"Returns the address of the access control manager contract"},"accountAssets(address,uint256)":{"notice":"Per-account mapping of \"assets you are in\""},"actionPaused(address,uint8)":{"notice":"Checks if a certain action is paused on a market"},"addRewardsDistributor(address)":{"notice":"Add a new RewardsDistributor and initialize it with all markets. We can add several RewardsDistributor contracts with the same rewardToken, and there could be overlaping among them considering the last reward slot (block or second)"},"allMarkets(uint256)":{"notice":"A list of all markets"},"approvedDelegates(address,address)":{"notice":"Whether the delegate is allowed to borrow or redeem on behalf of the user"},"borrowCaps(address)":{"notice":"Borrow caps enforced by borrowAllowed for each vToken address. Defaults to zero which restricts borrowing."},"borrowVerify(address,address,uint256)":{"notice":"Validates borrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs."},"checkMembership(address,address)":{"notice":"Returns whether the given account is entered in a given market"},"closeFactorMantissa()":{"notice":"Multiplier used to calculate the maximum repayAmount when liquidating a borrow"},"enterMarkets(address[])":{"notice":"Add assets to be included in account liquidity calculation; enabling them to be used as collateral"},"exitMarket(address)":{"notice":"Removes asset from sender's account liquidity calculation; disabling them as collateral"},"getAccountLiquidity(address)":{"notice":"Determine the current account liquidity with respect to liquidation threshold requirements"},"getAllMarkets()":{"notice":"Return all of the markets"},"getAssetsIn(address)":{"notice":"Returns the assets an account has entered"},"getBorrowingPower(address)":{"notice":"Determine the current account liquidity with respect to collateral requirements"},"getHypotheticalAccountLiquidity(address,address,uint256,uint256)":{"notice":"Determine what the account liquidity would be if the given amounts were redeemed/borrowed"},"getRewardDistributors()":{"notice":"Return all reward distributors for this pool"},"getRewardsByMarket(address)":{"notice":"Returns reward speed given a vToken"},"healAccount(address)":{"notice":"Seizes all the remaining collateral, makes msg.sender repay the existing   borrows, and treats the rest of the debt as bad debt (for each market).   The sender has to repay a certain percentage of the debt, computed as   collateral / (borrows * liquidationIncentive)."},"isComptroller()":{"notice":"A marker method that returns true for a valid Comptroller contract"},"isForcedLiquidationEnabled(address)":{"notice":"Flag indicating whether forced liquidation enabled for a market"},"isMarketListed(address)":{"notice":"Check if a market is marked as listed (active)"},"liquidateAccount(address,(address,address,uint256)[])":{"notice":"Liquidates all borrows of the borrower. Callable only if the collateral is less than   a predefined threshold, and the account collateral can be seized to cover all borrows. If   the collateral is higher than the threshold, use regular liquidations. If the collateral is   below the threshold, and the account is insolvent, use healAccount."},"liquidateBorrowVerify(address,address,address,address,uint256,uint256)":{"notice":"Validates liquidateBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs."},"liquidateCalculateSeizeTokens(address,address,uint256)":{"notice":"Calculate number of tokens of collateral asset to seize given an underlying amount"},"liquidationIncentiveMantissa()":{"notice":"Multiplier representing the discount on collateral that a liquidator receives"},"markets(address)":{"notice":"Official mapping of vTokens -> Market metadata"},"minLiquidatableCollateral()":{"notice":"Minimal collateral required for regular (non-batch) liquidations"},"mintVerify(address,address,uint256,uint256)":{"notice":"Validates mint, accrues interest and updates score in prime. Reverts on rejection. May emit logs."},"oracle()":{"notice":"Oracle which gives the price of any given asset"},"preBorrowHook(address,address,uint256)":{"notice":"disable-eslint"},"preLiquidateHook(address,address,address,uint256,bool)":{"notice":"Checks if the liquidation should be allowed to occur"},"preMintHook(address,address,uint256)":{"notice":"Checks if the account should be allowed to mint tokens in the given market"},"preRedeemHook(address,address,uint256)":{"notice":"Checks if the account should be allowed to redeem tokens in the given market"},"preRepayHook(address,address)":{"notice":"Checks if the account should be allowed to repay a borrow in the given market"},"preSeizeHook(address,address,address,address)":{"notice":"Checks if the seizing of assets should be allowed to occur"},"preTransferHook(address,address,address,uint256)":{"notice":"Checks if the account should be allowed to transfer tokens in the given market"},"prime()":{"notice":"Prime token address"},"redeemVerify(address,address,uint256,uint256)":{"notice":"Validates redeem, accrues interest and updates score in prime. Reverts on rejection. May emit logs."},"repayBorrowVerify(address,address,address,uint256,uint256)":{"notice":"Validates repayBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs."},"seizeVerify(address,address,address,address,uint256)":{"notice":"Validates seize, accrues interest and updates score in prime. Reverts on rejection. May emit logs."},"setAccessControlManager(address)":{"notice":"Sets the address of AccessControlManager"},"setActionsPaused(address[],uint8[],bool)":{"notice":"Pause/unpause specified actions"},"setCloseFactor(uint256)":{"notice":"Sets the closeFactor to use when liquidating borrows"},"setCollateralFactor(address,uint256,uint256)":{"notice":"Sets the collateralFactor for a market"},"setForcedLiquidation(address,bool)":{"notice":"Enables forced liquidations for a market. If forced liquidation is enabled, borrows in the market may be liquidated regardless of the account liquidity"},"setLiquidationIncentive(uint256)":{"notice":"Sets liquidationIncentive"},"setMarketBorrowCaps(address[],uint256[])":{"notice":"Set the given borrow caps for the given vToken markets. Borrowing that brings total borrows to or above borrow cap will revert."},"setMarketSupplyCaps(address[],uint256[])":{"notice":"Set the given supply caps for the given vToken markets. Supply that brings total Supply to or above supply cap will revert."},"setMaxLoopsLimit(uint256)":{"notice":"Set the for loop iteration limit to avoid DOS"},"setMinLiquidatableCollateral(uint256)":{"notice":"Set the given collateral threshold for non-batch liquidations. Regular liquidations   will fail if the collateral amount is less than this threshold. Liquidators should use batch   operations like liquidateAccount or healAccount."},"setPriceOracle(address)":{"notice":"Sets a new price oracle for the Comptroller"},"setPrimeToken(address)":{"notice":"Sets the prime token contract for the comptroller"},"supplyCaps(address)":{"notice":"Supply caps enforced by mintAllowed for each vToken address. Defaults to zero which corresponds to minting not allowed"},"supportMarket(address)":{"notice":"Add the market to the markets mapping and set it as listed"},"transferVerify(address,address,address,uint256)":{"notice":"Validates transfer, accrues interest and updates score in prime. Reverts on rejection. May emit logs."},"unlistMarket(address)":{"notice":"Unlist a market by setting isListed to false"},"updateDelegate(address,bool)":{"notice":"Grants or revokes the borrowing or redeeming delegate rights to / from an account  If allowed, the delegate will be able to borrow funds on behalf of the sender  Upon a delegated borrow, the delegate will receive the funds, and the borrower  will see the debt on their account  Upon a delegated redeem, the delegate will receive the redeemed amount and the approver  will see a deduction in his vToken balance"},"updatePrices(address)":{"notice":"Update the prices of all the tokens associated with the provided account"}},"notice":"The Comptroller is designed to provide checks for all minting, redeeming, transferring, borrowing, lending, repaying, liquidating, and seizing done by the `vToken` contract. Each pool has one `Comptroller` checking these interactions across markets. When a user interacts with a given market by one of these main actions, a call is made to a corresponding hook in the associated `Comptroller`, which either allows or reverts the transaction. These hooks also update supply and borrow rewards as they are called. The comptroller holds the logic for assessing liquidity snapshots of an account via the collateral factor and liquidation threshold. This check determines the collateral needed for a borrow, as well as how much of a borrow may be liquidated. A user may borrow a portion of their collateral with the maximum amount determined by the markets collateral factor. However, if their borrowed amount exceeds an amount calculated using the market’s corresponding liquidation threshold, the borrow is eligible for liquidation. The `Comptroller` also includes two functions `liquidateAccount()` and `healAccount()`, which are meant to handle accounts that do not exceed the `minLiquidatableCollateral` for the `Comptroller`: - `healAccount()`: This function is called to seize all of a given user’s collateral, requiring the `msg.sender` repay a certain percentage of the debt calculated by `collateral/(borrows*liquidationIncentive)`. The function can only be called if the calculated percentage does not exceed 100%, because otherwise no `badDebt` would be created and `liquidateAccount()` should be used instead. The difference in the actual amount of debt and debt paid off is recorded as `badDebt` for each market, which can then be auctioned off for the risk reserves of the associated pool. - `liquidateAccount()`: This function can only be called if the collateral seized will cover all borrows of an account, as well as the liquidation incentive. Otherwise, the pool will incur bad debt, in which case the function `healAccount()` should be used instead. This function skips the logic verifying that the repay amount does not exceed the close factor.","version":1}}},"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol":{"ComptrollerInterface":{"abi":[{"inputs":[{"internalType":"address","name":"market","type":"address"},{"internalType":"enum Action","name":"action","type":"uint8"}],"name":"actionPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"borrowAmount","type":"uint256"}],"name":"borrowVerify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"vTokens","type":"address[]"}],"name":"enterMarkets","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"}],"name":"exitMarket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllMarkets","outputs":[{"internalType":"contract VToken[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isComptroller","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vTokenBorrowed","type":"address"},{"internalType":"address","name":"vTokenCollateral","type":"address"},{"internalType":"address","name":"liquidator","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"},{"internalType":"uint256","name":"seizeTokens","type":"uint256"}],"name":"liquidateBorrowVerify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vTokenBorrowed","type":"address"},{"internalType":"address","name":"vTokenCollateral","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"}],"name":"liquidateCalculateSeizeTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"minter","type":"address"},{"internalType":"uint256","name":"mintAmount","type":"uint256"},{"internalType":"uint256","name":"mintTokens","type":"uint256"}],"name":"mintVerify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"borrowAmount","type":"uint256"}],"name":"preBorrowHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vTokenBorrowed","type":"address"},{"internalType":"address","name":"vTokenCollateral","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"},{"internalType":"bool","name":"skipLiquidityCheck","type":"bool"}],"name":"preLiquidateHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"minter","type":"address"},{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"preMintHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"redeemer","type":"address"},{"internalType":"uint256","name":"redeemTokens","type":"uint256"}],"name":"preRedeemHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"borrower","type":"address"}],"name":"preRepayHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vTokenCollateral","type":"address"},{"internalType":"address","name":"vTokenBorrowed","type":"address"},{"internalType":"address","name":"liquidator","type":"address"},{"internalType":"address","name":"borrower","type":"address"}],"name":"preSeizeHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"transferTokens","type":"uint256"}],"name":"preTransferHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"redeemer","type":"address"},{"internalType":"uint256","name":"redeemAmount","type":"uint256"},{"internalType":"uint256","name":"redeemTokens","type":"uint256"}],"name":"redeemVerify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"payer","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"},{"internalType":"uint256","name":"borrowerIndex","type":"uint256"}],"name":"repayBorrowVerify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vTokenCollateral","type":"address"},{"internalType":"address","name":"vTokenBorrowed","type":"address"},{"internalType":"address","name":"liquidator","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"seizeTokens","type":"uint256"}],"name":"seizeVerify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"transferTokens","type":"uint256"}],"name":"transferVerify","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Venus","kind":"dev","methods":{},"title":"ComptrollerInterface","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"actionPaused(address,uint8)":"e85a2960","borrowVerify(address,address,uint256)":"5c778605","enterMarkets(address[])":"c2998238","exitMarket(address)":"ede4edd0","getAllMarkets()":"b0772d0b","isComptroller()":"007e3dd2","liquidateBorrowVerify(address,address,address,address,uint256,uint256)":"47ef3b3b","liquidateCalculateSeizeTokens(address,address,uint256)":"c488847b","mintVerify(address,address,uint256,uint256)":"41c728b9","preBorrowHook(address,address,uint256)":"df71403b","preLiquidateHook(address,address,address,uint256,bool)":"e89d51ad","preMintHook(address,address,uint256)":"c0891ba9","preRedeemHook(address,address,uint256)":"8e6470ea","preRepayHook(address,address)":"eade3eed","preSeizeHook(address,address,address,address)":"1bc41f28","preTransferHook(address,address,address,uint256)":"6d0be88d","redeemVerify(address,address,uint256,uint256)":"51dff989","repayBorrowVerify(address,address,address,uint256,uint256)":"1ededc91","seizeVerify(address,address,address,address,uint256)":"6d35bf91","transferVerify(address,address,address,uint256)":"6a56947e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"},{\"internalType\":\"enum Action\",\"name\":\"action\",\"type\":\"uint8\"}],\"name\":\"actionPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"}],\"name\":\"borrowVerify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"vTokens\",\"type\":\"address[]\"}],\"name\":\"enterMarkets\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"}],\"name\":\"exitMarket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllMarkets\",\"outputs\":[{\"internalType\":\"contract VToken[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isComptroller\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vTokenBorrowed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vTokenCollateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"seizeTokens\",\"type\":\"uint256\"}],\"name\":\"liquidateBorrowVerify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vTokenBorrowed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vTokenCollateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"}],\"name\":\"liquidateCalculateSeizeTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mintTokens\",\"type\":\"uint256\"}],\"name\":\"mintVerify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"}],\"name\":\"preBorrowHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vTokenBorrowed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vTokenCollateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"skipLiquidityCheck\",\"type\":\"bool\"}],\"name\":\"preLiquidateHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"}],\"name\":\"preMintHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"}],\"name\":\"preRedeemHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"preRepayHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vTokenCollateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vTokenBorrowed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"preSeizeHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"transferTokens\",\"type\":\"uint256\"}],\"name\":\"preTransferHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"redeemAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"}],\"name\":\"redeemVerify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowerIndex\",\"type\":\"uint256\"}],\"name\":\"repayBorrowVerify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vTokenCollateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vTokenBorrowed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"seizeTokens\",\"type\":\"uint256\"}],\"name\":\"seizeVerify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"transferTokens\",\"type\":\"uint256\"}],\"name\":\"transferVerify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"kind\":\"dev\",\"methods\":{},\"title\":\"ComptrollerInterface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Interface implemented by the `Comptroller` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\":\"ComptrollerInterface\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./OwnableUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership} and {acceptOwnership}.\\n *\\n * This module is used through inheritance. It will make available all functions\\n * from parent (Ownable).\\n */\\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\\n    address private _pendingOwner;\\n\\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\\n\\n    function __Ownable2Step_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable2Step_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Returns the address of the pending owner.\\n     */\\n    function pendingOwner() public view virtual returns (address) {\\n        return _pendingOwner;\\n    }\\n\\n    /**\\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\\n        _pendingOwner = newOwner;\\n        emit OwnershipTransferStarted(owner(), newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual override {\\n        delete _pendingOwner;\\n        super._transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev The new owner accepts the ownership transfer.\\n     */\\n    function acceptOwnership() public virtual {\\n        address sender = _msgSender();\\n        require(pendingOwner() == sender, \\\"Ownable2Step: caller is not the new owner\\\");\\n        _transferOwnership(sender);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x9140dabc466abab21b48b72dbda26736b1183a310d0e677d3719d201df026510\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * ==== Security Considerations\\n *\\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\\n * generally recommended is:\\n *\\n * ```solidity\\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\\n *     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\\n *     doThing(..., value);\\n * }\\n *\\n * function doThing(..., uint256 value) public {\\n *     token.safeTransferFrom(msg.sender, address(this), value);\\n *     ...\\n * }\\n * ```\\n *\\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\\n * {SafeERC20-safeTransferFrom}).\\n *\\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\\n * contracts should have entry points that don't rely on permit.\\n */\\ninterface IERC20PermitUpgradeable {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     *\\n     * CAUTION: See Security Considerations above.\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x07e881de3b9f6d2c07909f193f24b96c7fe4ea60013260f3f25aecd8bab3c2f8\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\nimport \\\"../extensions/IERC20PermitUpgradeable.sol\\\";\\nimport \\\"../../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20Upgradeable {\\n    using AddressUpgradeable for address;\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransfer(IERC20Upgradeable token, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    /**\\n     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeIncreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        uint256 oldAllowance = token.allowance(address(this), spender);\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));\\n    }\\n\\n    /**\\n     * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeDecreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));\\n        }\\n    }\\n\\n    /**\\n     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n     * to be set to zero before setting it to a non-zero value, such as USDT.\\n     */\\n    function forceApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);\\n\\n        if (!_callOptionalReturnBool(token, approvalCall)) {\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));\\n            _callOptionalReturn(token, approvalCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.\\n     * Revert on invalid signature.\\n     */\\n    function safePermit(\\n        IERC20PermitUpgradeable token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20Upgradeable token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        require(returndata.length == 0 || abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     *\\n     * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\\n     */\\n    function _callOptionalReturnBool(IERC20Upgradeable token, bytes memory data) private returns (bool) {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\\n        // and not revert is the subcall reverts.\\n\\n        (bool success, bytes memory returndata) = address(token).call(data);\\n        return\\n            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && AddressUpgradeable.isContract(address(token));\\n    }\\n}\\n\",\"keccak256\":\"0x23b997be73d3dd46885262704f0f8cfc7273fdadfe303d37969a9561373972b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n    /**\\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n     *\\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n     * {RoleAdminChanged} not being emitted signaling this.\\n     *\\n     * _Available since v3.1._\\n     */\\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n    /**\\n     * @dev Emitted when `account` is granted `role`.\\n     *\\n     * `sender` is the account that originated the contract call, an admin role\\n     * bearer except when using {AccessControl-_setupRole}.\\n     */\\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Emitted when `account` is revoked `role`.\\n     *\\n     * `sender` is the account that originated the contract call:\\n     *   - if using `revokeRole`, it is the admin role bearer\\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n     */\\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Returns `true` if `account` has been granted `role`.\\n     */\\n    function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n    /**\\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\\n     * {revokeRole}.\\n     *\\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n     */\\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n    /**\\n     * @dev Grants `role` to `account`.\\n     *\\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function grantRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from `account`.\\n     *\\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function revokeRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from the calling account.\\n     *\\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n     * purpose is to provide a mechanism for accounts to lose their privileges\\n     * if they are compromised (such as when a trusted device is misplaced).\\n     *\\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must be `account`.\\n     */\\n    function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\n\\nimport \\\"./IAccessControlManagerV8.sol\\\";\\n\\n/**\\n * @title AccessControlledV8\\n * @author Venus\\n * @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\\n * to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\\n */\\nabstract contract AccessControlledV8 is Initializable, Ownable2StepUpgradeable {\\n    /// @notice Access control manager contract\\n    IAccessControlManagerV8 internal _accessControlManager;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when access control manager contract address is changed\\n    event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager);\\n\\n    /// @notice Thrown when the action is prohibited by AccessControlManager\\n    error Unauthorized(address sender, address calledContract, string methodSignature);\\n\\n    function __AccessControlled_init(address accessControlManager_) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n    }\\n\\n    function __AccessControlled_init_unchained(address accessControlManager_) internal onlyInitializing {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Sets the address of AccessControlManager\\n     * @dev Admin function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     * @custom:event Emits NewAccessControlManager event\\n     * @custom:access Only Governance\\n     */\\n    function setAccessControlManager(address accessControlManager_) external onlyOwner {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Returns the address of the access control manager contract\\n     */\\n    function accessControlManager() external view returns (IAccessControlManagerV8) {\\n        return _accessControlManager;\\n    }\\n\\n    /**\\n     * @dev Internal function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     */\\n    function _setAccessControlManager(address accessControlManager_) internal {\\n        require(address(accessControlManager_) != address(0), \\\"invalid acess control manager address\\\");\\n        address oldAccessControlManager = address(_accessControlManager);\\n        _accessControlManager = IAccessControlManagerV8(accessControlManager_);\\n        emit NewAccessControlManager(oldAccessControlManager, accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Reverts if the call is not allowed by AccessControlManager\\n     * @param signature Method signature\\n     */\\n    function _checkAccessAllowed(string memory signature) internal view {\\n        bool isAllowedToCall = _accessControlManager.isAllowedToCall(msg.sender, signature);\\n\\n        if (!isAllowedToCall) {\\n            revert Unauthorized(msg.sender, address(this), signature);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe0fd441c84ac907cabc88db69ef04f6d7532d770c7e6a1dfe6e7d6305debb49\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport \\\"@openzeppelin/contracts/access/IAccessControl.sol\\\";\\n\\n/**\\n * @title IAccessControlManagerV8\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\\n */\\ninterface IAccessControlManagerV8 is IAccessControl {\\n    function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n    function revokeCallPermission(\\n        address contractAddress,\\n        string calldata functionSig,\\n        address accountToRevoke\\n    ) external;\\n\\n    function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n    function hasPermission(\\n        address account,\\n        address contractAddress,\\n        string calldata functionSig\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xaa29b098440d0b3a131c5ecdf25ce548790c1b5ac7bf9b5c0264b6af6f7a1e0b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Comptroller.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\n\\nimport { ComptrollerInterface, Action } from \\\"./ComptrollerInterface.sol\\\";\\nimport { ComptrollerStorage } from \\\"./ComptrollerStorage.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"./MaxLoopsLimitHelper.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title Comptroller\\n * @author Venus\\n * @notice The Comptroller is designed to provide checks for all minting, redeeming, transferring, borrowing, lending, repaying, liquidating,\\n * and seizing done by the `vToken` contract. Each pool has one `Comptroller` checking these interactions across markets. When a user interacts\\n * with a given market by one of these main actions, a call is made to a corresponding hook in the associated `Comptroller`, which either allows\\n * or reverts the transaction. These hooks also update supply and borrow rewards as they are called. The comptroller holds the logic for assessing\\n * liquidity snapshots of an account via the collateral factor and liquidation threshold. This check determines the collateral needed for a borrow,\\n * as well as how much of a borrow may be liquidated. A user may borrow a portion of their collateral with the maximum amount determined by the\\n * markets collateral factor. However, if their borrowed amount exceeds an amount calculated using the market\\u2019s corresponding liquidation threshold,\\n * the borrow is eligible for liquidation.\\n *\\n * The `Comptroller` also includes two functions `liquidateAccount()` and `healAccount()`, which are meant to handle accounts that do not exceed\\n * the `minLiquidatableCollateral` for the `Comptroller`:\\n *\\n * - `healAccount()`: This function is called to seize all of a given user\\u2019s collateral, requiring the `msg.sender` repay a certain percentage\\n * of the debt calculated by `collateral/(borrows*liquidationIncentive)`. The function can only be called if the calculated percentage does not exceed\\n * 100%, because otherwise no `badDebt` would be created and `liquidateAccount()` should be used instead. The difference in the actual amount of debt\\n * and debt paid off is recorded as `badDebt` for each market, which can then be auctioned off for the risk reserves of the associated pool.\\n * - `liquidateAccount()`: This function can only be called if the collateral seized will cover all borrows of an account, as well as the liquidation\\n * incentive. Otherwise, the pool will incur bad debt, in which case the function `healAccount()` should be used instead. This function skips the logic\\n * verifying that the repay amount does not exceed the close factor.\\n */\\ncontract Comptroller is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    ComptrollerStorage,\\n    ComptrollerInterface,\\n    ExponentialNoError,\\n    MaxLoopsLimitHelper\\n{\\n    // PoolRegistry, immutable to save on gas\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    address public immutable poolRegistry;\\n\\n    /// @notice Emitted when an account enters a market\\n    event MarketEntered(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when an account exits a market\\n    event MarketExited(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when close factor is changed by admin\\n    event NewCloseFactor(uint256 oldCloseFactorMantissa, uint256 newCloseFactorMantissa);\\n\\n    /// @notice Emitted when a collateral factor is changed by admin\\n    event NewCollateralFactor(VToken vToken, uint256 oldCollateralFactorMantissa, uint256 newCollateralFactorMantissa);\\n\\n    /// @notice Emitted when liquidation threshold is changed by admin\\n    event NewLiquidationThreshold(\\n        VToken vToken,\\n        uint256 oldLiquidationThresholdMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    );\\n\\n    /// @notice Emitted when liquidation incentive is changed by admin\\n    event NewLiquidationIncentive(uint256 oldLiquidationIncentiveMantissa, uint256 newLiquidationIncentiveMantissa);\\n\\n    /// @notice Emitted when price oracle is changed\\n    event NewPriceOracle(ResilientOracleInterface oldPriceOracle, ResilientOracleInterface newPriceOracle);\\n\\n    /// @notice Emitted when an action is paused on a market\\n    event ActionPausedMarket(VToken vToken, Action action, bool pauseState);\\n\\n    /// @notice Emitted when borrow cap for a vToken is changed\\n    event NewBorrowCap(VToken indexed vToken, uint256 newBorrowCap);\\n\\n    /// @notice Emitted when the collateral threshold (in USD) for non-batch liquidations is changed\\n    event NewMinLiquidatableCollateral(uint256 oldMinLiquidatableCollateral, uint256 newMinLiquidatableCollateral);\\n\\n    /// @notice Emitted when supply cap for a vToken is changed\\n    event NewSupplyCap(VToken indexed vToken, uint256 newSupplyCap);\\n\\n    /// @notice Emitted when a rewards distributor is added\\n    event NewRewardsDistributor(address indexed rewardsDistributor, address indexed rewardToken);\\n\\n    /// @notice Emitted when a market is supported\\n    event MarketSupported(VToken vToken);\\n\\n    /// @notice Emitted when prime token contract address is changed\\n    event NewPrimeToken(IPrime oldPrimeToken, IPrime newPrimeToken);\\n\\n    /// @notice Emitted when forced liquidation is enabled or disabled for a market\\n    event IsForcedLiquidationEnabledUpdated(address indexed vToken, bool enable);\\n\\n    /// @notice Emitted when a market is unlisted\\n    event MarketUnlisted(address indexed vToken);\\n    /// @notice Emitted when the borrowing or redeeming delegate rights are updated for an account\\n    event DelegateUpdated(address indexed approver, address indexed delegate, bool approved);\\n\\n    /// @notice Thrown when collateral factor exceeds the upper bound\\n    error InvalidCollateralFactor();\\n\\n    /// @notice Thrown when liquidation threshold exceeds the collateral factor\\n    error InvalidLiquidationThreshold();\\n\\n    /// @notice Thrown when the action is only available to specific sender, but the real sender was different\\n    error UnexpectedSender(address expectedSender, address actualSender);\\n\\n    /// @notice Thrown when the oracle returns an invalid price for some asset\\n    error PriceError(address vToken);\\n\\n    /// @notice Thrown if VToken unexpectedly returned a nonzero error code while trying to get account snapshot\\n    error SnapshotError(address vToken, address user);\\n\\n    /// @notice Thrown when the market is not listed\\n    error MarketNotListed(address market);\\n\\n    /// @notice Thrown when a market has an unexpected comptroller\\n    error ComptrollerMismatch();\\n\\n    /// @notice Thrown when user is not member of market\\n    error MarketNotCollateral(address vToken, address user);\\n\\n    /// @notice Thrown when borrow action is not paused\\n    error BorrowActionNotPaused();\\n\\n    /// @notice Thrown when mint action is not paused\\n    error MintActionNotPaused();\\n\\n    /// @notice Thrown when redeem action is not paused\\n    error RedeemActionNotPaused();\\n\\n    /// @notice Thrown when repay action is not paused\\n    error RepayActionNotPaused();\\n\\n    /// @notice Thrown when seize action is not paused\\n    error SeizeActionNotPaused();\\n\\n    /// @notice Thrown when exit market action is not paused\\n    error ExitMarketActionNotPaused();\\n\\n    /// @notice Thrown when transfer action is not paused\\n    error TransferActionNotPaused();\\n\\n    /// @notice Thrown when enter market action is not paused\\n    error EnterMarketActionNotPaused();\\n\\n    /// @notice Thrown when liquidate action is not paused\\n    error LiquidateActionNotPaused();\\n\\n    /// @notice Thrown when borrow cap is not zero\\n    error BorrowCapIsNotZero();\\n\\n    /// @notice Thrown when supply cap is not zero\\n    error SupplyCapIsNotZero();\\n\\n    /// @notice Thrown when collateral factor is not zero\\n    error CollateralFactorIsNotZero();\\n\\n    /**\\n     * @notice Thrown during the liquidation if user's total collateral amount is lower than\\n     *   a predefined threshold. In this case only batch liquidations (either liquidateAccount\\n     *   or healAccount) are available.\\n     */\\n    error MinimalCollateralViolated(uint256 expectedGreaterThan, uint256 actual);\\n    error CollateralExceedsThreshold(uint256 expectedLessThanOrEqualTo, uint256 actual);\\n    error InsufficientCollateral(uint256 collateralToSeize, uint256 availableCollateral);\\n\\n    /// @notice Thrown when the account doesn't have enough liquidity to redeem or borrow\\n    error InsufficientLiquidity();\\n\\n    /// @notice Thrown when trying to liquidate a healthy account\\n    error InsufficientShortfall();\\n\\n    /// @notice Thrown when trying to repay more than allowed by close factor\\n    error TooMuchRepay();\\n\\n    /// @notice Thrown if the user is trying to exit a market in which they have an outstanding debt\\n    error NonzeroBorrowBalance();\\n\\n    /// @notice Thrown when trying to perform an action that is paused\\n    error ActionPaused(address market, Action action);\\n\\n    /// @notice Thrown when trying to add a market that is already listed\\n    error MarketAlreadyListed(address market);\\n\\n    /// @notice Thrown if the supply cap is exceeded\\n    error SupplyCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if the borrow cap is exceeded\\n    error BorrowCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if delegate approval status is already set to the requested value\\n    error DelegationStatusUnchanged();\\n\\n    /// @param poolRegistry_ Pool registry address\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    /// @custom:error ZeroAddressNotAllowed is thrown when pool registry address is zero\\n    constructor(address poolRegistry_) {\\n        ensureNonzeroAddress(poolRegistry_);\\n\\n        poolRegistry = poolRegistry_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @param loopLimit Limit for the loops can iterate to avoid the DOS\\n     * @param accessControlManager Access control manager contract address\\n     */\\n    function initialize(uint256 loopLimit, address accessControlManager) external initializer {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager);\\n\\n        _setMaxLoopsLimit(loopLimit);\\n    }\\n\\n    /**\\n     * @notice Add assets to be included in account liquidity calculation; enabling them to be used as collateral\\n     * @param vTokens The list of addresses of the vToken markets to be enabled\\n     * @return errors An array of NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketEntered is emitted for each market on success\\n     * @custom:error ActionPaused error is thrown if entering any of the markets is paused\\n     * @custom:error MarketNotListed error is thrown if any of the markets is not listed\\n     * @custom:access Not restricted\\n     */\\n    function enterMarkets(address[] memory vTokens) external override returns (uint256[] memory) {\\n        uint256 len = vTokens.length;\\n\\n        uint256[] memory results = new uint256[](len);\\n        for (uint256 i; i < len; ++i) {\\n            VToken vToken = VToken(vTokens[i]);\\n\\n            _addToMarket(vToken, msg.sender);\\n            results[i] = NO_ERROR;\\n        }\\n\\n        return results;\\n    }\\n\\n    /**\\n     * @notice Unlist a market by setting isListed to false\\n     * @dev Checks if all actions are paused, borrow/supply caps is set to 0 and collateral factor is to 0.\\n     * @param market The address of the market (token) to unlist\\n     * @return uint256 Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketUnlisted is emitted on success\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error BorrowActionNotPaused error is thrown if borrow action is not paused\\n     * @custom:error MintActionNotPaused error is thrown if mint action is not paused\\n     * @custom:error RedeemActionNotPaused error is thrown if redeem action is not paused\\n     * @custom:error RepayActionNotPaused error is thrown if repay action is not paused\\n     * @custom:error EnterMarketActionNotPaused error is thrown if enter market action is not paused\\n     * @custom:error LiquidateActionNotPaused error is thrown if liquidate action is not paused\\n     * @custom:error BorrowCapIsNotZero error is thrown if borrow cap is not zero\\n     * @custom:error SupplyCapIsNotZero error is thrown if supply cap is not zero\\n     * @custom:error CollateralFactorIsNotZero error is thrown if collateral factor is not zero\\n     */\\n    function unlistMarket(address market) external returns (uint256) {\\n        _checkAccessAllowed(\\\"unlistMarket(address)\\\");\\n\\n        Market storage _market = markets[market];\\n\\n        if (!_market.isListed) {\\n            revert MarketNotListed(market);\\n        }\\n\\n        if (!actionPaused(market, Action.BORROW)) {\\n            revert BorrowActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.MINT)) {\\n            revert MintActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REDEEM)) {\\n            revert RedeemActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REPAY)) {\\n            revert RepayActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.SEIZE)) {\\n            revert SeizeActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.ENTER_MARKET)) {\\n            revert EnterMarketActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.LIQUIDATE)) {\\n            revert LiquidateActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.TRANSFER)) {\\n            revert TransferActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.EXIT_MARKET)) {\\n            revert ExitMarketActionNotPaused();\\n        }\\n\\n        if (borrowCaps[market] != 0) {\\n            revert BorrowCapIsNotZero();\\n        }\\n\\n        if (supplyCaps[market] != 0) {\\n            revert SupplyCapIsNotZero();\\n        }\\n\\n        if (_market.collateralFactorMantissa != 0) {\\n            revert CollateralFactorIsNotZero();\\n        }\\n\\n        _market.isListed = false;\\n        emit MarketUnlisted(market);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Grants or revokes the borrowing or redeeming delegate rights to / from an account\\n     *  If allowed, the delegate will be able to borrow funds on behalf of the sender\\n     *  Upon a delegated borrow, the delegate will receive the funds, and the borrower\\n     *  will see the debt on their account\\n     *  Upon a delegated redeem, the delegate will receive the redeemed amount and the approver\\n     *  will see a deduction in his vToken balance\\n     * @param delegate The address to update the rights for\\n     * @param approved Whether to grant (true) or revoke (false) the borrowing or redeeming rights\\n     * @custom:event DelegateUpdated emits on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when delegate address is zero\\n     * @custom:error DelegationStatusUnchanged is thrown if approval status is already set to the requested value\\n     * @custom:access Not restricted\\n     */\\n    function updateDelegate(address delegate, bool approved) external {\\n        ensureNonzeroAddress(delegate);\\n        if (approvedDelegates[msg.sender][delegate] == approved) {\\n            revert DelegationStatusUnchanged();\\n        }\\n\\n        approvedDelegates[msg.sender][delegate] = approved;\\n        emit DelegateUpdated(msg.sender, delegate, approved);\\n    }\\n\\n    /**\\n     * @notice Removes asset from sender's account liquidity calculation; disabling them as collateral\\n     * @dev Sender must not have an outstanding borrow balance in the asset,\\n     *  or be providing necessary collateral for an outstanding borrow.\\n     * @param vTokenAddress The address of the asset to be removed\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketExited is emitted on success\\n     * @custom:error ActionPaused error is thrown if exiting the market is paused\\n     * @custom:error NonzeroBorrowBalance error is thrown if the user has an outstanding borrow in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if exiting the market would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function exitMarket(address vTokenAddress) external override returns (uint256) {\\n        _checkActionPauseState(vTokenAddress, Action.EXIT_MARKET);\\n        VToken vToken = VToken(vTokenAddress);\\n        /* Get sender tokensHeld and amountOwed underlying from the vToken */\\n        (uint256 tokensHeld, uint256 amountOwed, ) = _safeGetAccountSnapshot(vToken, msg.sender);\\n\\n        /* Fail if the sender has a borrow balance */\\n        if (amountOwed != 0) {\\n            revert NonzeroBorrowBalance();\\n        }\\n\\n        /* Fail if the sender is not permitted to redeem all of their tokens */\\n        _checkRedeemAllowed(vTokenAddress, msg.sender, tokensHeld);\\n\\n        Market storage marketToExit = markets[address(vToken)];\\n\\n        /* Return true if the sender is not already \\u2018in\\u2019 the market */\\n        if (!marketToExit.accountMembership[msg.sender]) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Set vToken account membership to false */\\n        delete marketToExit.accountMembership[msg.sender];\\n\\n        /* Delete vToken from the account\\u2019s list of assets */\\n        // load into memory for faster iteration\\n        VToken[] memory userAssetList = accountAssets[msg.sender];\\n        uint256 len = userAssetList.length;\\n\\n        uint256 assetIndex = len;\\n        for (uint256 i; i < len; ++i) {\\n            if (userAssetList[i] == vToken) {\\n                assetIndex = i;\\n                break;\\n            }\\n        }\\n\\n        // We *must* have found the asset in the list or our redundant data structure is broken\\n        assert(assetIndex < len);\\n\\n        // copy last item in list to location of item to be removed, reduce length by 1\\n        VToken[] storage storedList = accountAssets[msg.sender];\\n        storedList[assetIndex] = storedList[storedList.length - 1];\\n        storedList.pop();\\n\\n        emit MarketExited(vToken, msg.sender);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /*** Policy Hooks ***/\\n\\n    /**\\n     * @notice Checks if the account should be allowed to mint tokens in the given market\\n     * @param vToken The market to verify the mint against\\n     * @param minter The account which would get the minted tokens\\n     * @param mintAmount The amount of underlying being supplied to the market in exchange for tokens\\n     * @custom:error ActionPaused error is thrown if supplying to this market is paused\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error SupplyCapExceeded error is thrown if the total supply exceeds the cap after minting\\n     * @custom:access Not restricted\\n     */\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external override {\\n        _checkActionPauseState(vToken, Action.MINT);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        uint256 supplyCap = supplyCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (supplyCap != type(uint256).max) {\\n            uint256 vTokenSupply = VToken(vToken).totalSupply();\\n            Exp memory exchangeRate = Exp({ mantissa: VToken(vToken).exchangeRateStored() });\\n            uint256 nextTotalSupply = mul_ScalarTruncateAddUInt(exchangeRate, vTokenSupply, mintAmount);\\n            if (nextTotalSupply > supplyCap) {\\n                revert SupplyCapExceeded(vToken, supplyCap);\\n            }\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, minter);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates mint, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being minted\\n     * @param minter The address minting the tokens\\n     * @param actualMintAmount The amount of the underlying asset being minted\\n     * @param mintTokens The number of tokens being minted\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function mintVerify(address vToken, address minter, uint256 actualMintAmount, uint256 mintTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(minter, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to redeem tokens in the given market\\n     * @param vToken The market to verify the redeem against\\n     * @param redeemer The account which would redeem the tokens\\n     * @param redeemTokens The number of vTokens to exchange for the underlying asset in the market\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external override {\\n        _checkActionPauseState(vToken, Action.REDEEM);\\n\\n        _checkRedeemAllowed(vToken, redeemer, redeemTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, redeemer);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates redeem, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being redeemed\\n     * @param redeemer The address redeeming the tokens\\n     * @param redeemAmount The amount of the underlying asset being redeemed\\n     * @param redeemTokens The number of tokens being redeemed\\n     */\\n    function redeemVerify(address vToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(redeemer, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates repayBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being repaid\\n     * @param payer The address repaying the borrow\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     */\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer, // solhint-disable-line no-unused-vars\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 borrowerIndex // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates liquidateBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     * @param seizeTokens The amount of collateral token that will be seized\\n     */\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenBorrowed);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenBorrowed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates seize, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param seizeTokens The number of collateral tokens to seize\\n     */\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenCollateral);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenCollateral);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates transfer, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being transferred\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function transferVerify(address vToken, address src, address dst, uint256 transferTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(src, vToken);\\n            prime.accrueInterestAndUpdateScore(dst, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to borrow the underlying asset of the given market\\n     * @param vToken The market to verify the borrow against\\n     * @param borrower The account which would borrow the asset\\n     * @param borrowAmount The amount of underlying the account would borrow\\n     * @custom:error ActionPaused error is thrown if borrowing is paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if there is not enough collateral to borrow\\n     * @custom:error BorrowCapExceeded is thrown if the borrow cap will be exceeded should this borrow succeed\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted if vToken is enabled as collateral, otherwise only vToken\\n     */\\n    /// disable-eslint\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external override {\\n        _checkActionPauseState(vToken, Action.BORROW);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (!markets[vToken].accountMembership[borrower]) {\\n            // only vTokens may call borrowAllowed if borrower not in market\\n            _checkSenderIs(vToken);\\n\\n            // attempt to add borrower to the market or revert\\n            _addToMarket(VToken(msg.sender), borrower);\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (oracle.getUnderlyingPrice(vToken) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 borrowCap = borrowCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (borrowCap != type(uint256).max) {\\n            uint256 totalBorrows = VToken(vToken).totalBorrows();\\n            uint256 badDebt = VToken(vToken).badDebt();\\n            uint256 nextTotalBorrows = totalBorrows + borrowAmount + badDebt;\\n            if (nextTotalBorrows > borrowCap) {\\n                revert BorrowCapExceeded(vToken, borrowCap);\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            borrower,\\n            VToken(vToken),\\n            0,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n\\n        Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates borrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset whose underlying is being borrowed\\n     * @param borrower The address borrowing the underlying\\n     * @param borrowAmount The amount of the underlying asset requested to borrow\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function borrowVerify(address vToken, address borrower, uint256 borrowAmount) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to repay a borrow in the given market\\n     * @param vToken The market to verify the repay against\\n     * @param borrower The account which would borrowed the asset\\n     * @custom:error ActionPaused error is thrown if repayments are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:access Not restricted\\n     */\\n    function preRepayHook(address vToken, address borrower) external override {\\n        _checkActionPauseState(vToken, Action.REPAY);\\n\\n        oracle.updatePrice(vToken);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the liquidation should be allowed to occur\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param borrower The address of the borrower\\n     * @param repayAmount The amount of underlying being repaid\\n     * @param skipLiquidityCheck Allows the borrow to be liquidated regardless of the account liquidity\\n     * @custom:error ActionPaused error is thrown if liquidations are paused in this market\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error TooMuchRepay error is thrown if the liquidator is trying to repay more than allowed by close factor\\n     * @custom:error MinimalCollateralViolated is thrown if the users' total collateral is lower than the threshold for non-batch liquidations\\n     * @custom:error InsufficientShortfall is thrown when trying to liquidate a healthy account\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     */\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        // Pause Action.LIQUIDATE on BORROWED TOKEN to prevent liquidating it.\\n        // If we want to pause liquidating to vTokenCollateral, we should pause\\n        // Action.SEIZE on it\\n        _checkActionPauseState(vTokenBorrowed, Action.LIQUIDATE);\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(address(vTokenBorrowed));\\n        }\\n        if (!markets[vTokenCollateral].isListed) {\\n            revert MarketNotListed(address(vTokenCollateral));\\n        }\\n\\n        uint256 borrowBalance = VToken(vTokenBorrowed).borrowBalanceStored(borrower);\\n\\n        /* Allow accounts to be liquidated if it is a forced liquidation */\\n        if (skipLiquidityCheck || isForcedLiquidationEnabled[vTokenBorrowed]) {\\n            if (repayAmount > borrowBalance) {\\n                revert TooMuchRepay();\\n            }\\n            return;\\n        }\\n\\n        /* The borrower must have shortfall and collateral > threshold in order to be liquidatable */\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral <= minLiquidatableCollateral) {\\n            /* The liquidator should use either liquidateAccount or healAccount */\\n            revert MinimalCollateralViolated(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        /* The liquidator may not repay more than what is allowed by the closeFactor */\\n        uint256 maxClose = mul_ScalarTruncate(Exp({ mantissa: closeFactorMantissa }), borrowBalance);\\n        if (repayAmount > maxClose) {\\n            revert TooMuchRepay();\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the seizing of assets should be allowed to occur\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param seizerContract Contract that tries to seize the asset (either borrowed vToken or Comptroller)\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @custom:error ActionPaused error is thrown if seizing this type of collateral is paused\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error ComptrollerMismatch error is when seizer contract or seized asset belong to different pools\\n     * @custom:access Not restricted\\n     */\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address seizerContract,\\n        address liquidator,\\n        address borrower\\n    ) external override {\\n        // Pause Action.SEIZE on COLLATERAL to prevent seizing it.\\n        // If we want to pause liquidating vTokenBorrowed, we should pause\\n        // Action.LIQUIDATE on it\\n        _checkActionPauseState(vTokenCollateral, Action.SEIZE);\\n\\n        Market storage market = markets[vTokenCollateral];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(vTokenCollateral);\\n        }\\n\\n        if (seizerContract == address(this)) {\\n            // If Comptroller is the seizer, just check if collateral's comptroller\\n            // is equal to the current address\\n            if (address(VToken(vTokenCollateral).comptroller()) != address(this)) {\\n                revert ComptrollerMismatch();\\n            }\\n        } else {\\n            // If the seizer is not the Comptroller, check that the seizer is a\\n            // listed market, and that the markets' comptrollers match\\n            if (!markets[seizerContract].isListed) {\\n                revert MarketNotListed(seizerContract);\\n            }\\n            if (VToken(vTokenCollateral).comptroller() != VToken(seizerContract).comptroller()) {\\n                revert ComptrollerMismatch();\\n            }\\n        }\\n\\n        if (!market.accountMembership[borrower]) {\\n            revert MarketNotCollateral(vTokenCollateral, borrower);\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vTokenCollateral);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, borrower);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, liquidator);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to transfer tokens in the given market\\n     * @param vToken The market to verify the transfer against\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external override {\\n        _checkActionPauseState(vToken, Action.TRANSFER);\\n\\n        // Currently the only consideration is whether or not\\n        //  the src is allowed to redeem this many tokens\\n        _checkRedeemAllowed(vToken, src, transferTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, src);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, dst);\\n        }\\n    }\\n\\n    /*** Pool-level operations ***/\\n\\n    /**\\n     * @notice Seizes all the remaining collateral, makes msg.sender repay the existing\\n     *   borrows, and treats the rest of the debt as bad debt (for each market).\\n     *   The sender has to repay a certain percentage of the debt, computed as\\n     *   collateral / (borrows * liquidationIncentive).\\n     * @param user account to heal\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for healing\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function healAccount(address user) external {\\n        VToken[] memory userAssets = getAssetsIn(user);\\n        uint256 userAssetsCount = userAssets.length;\\n\\n        address liquidator = msg.sender;\\n        {\\n            ResilientOracleInterface oracle_ = oracle;\\n            // We need all user's markets to be fresh for the computations to be correct\\n            for (uint256 i; i < userAssetsCount; ++i) {\\n                userAssets[i].accrueInterest();\\n                oracle_.updatePrice(address(userAssets[i]));\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(user, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        // percentage = collateral / (borrows * liquidation incentive)\\n        Exp memory collateral = Exp({ mantissa: snapshot.totalCollateral });\\n        Exp memory scaledBorrows = mul_(\\n            Exp({ mantissa: snapshot.borrows }),\\n            Exp({ mantissa: liquidationIncentiveMantissa })\\n        );\\n\\n        Exp memory percentage = div_(collateral, scaledBorrows);\\n        if (lessThanExp(Exp({ mantissa: MANTISSA_ONE }), percentage)) {\\n            revert CollateralExceedsThreshold(scaledBorrows.mantissa, collateral.mantissa);\\n        }\\n\\n        for (uint256 i; i < userAssetsCount; ++i) {\\n            VToken market = userAssets[i];\\n\\n            (uint256 tokens, uint256 borrowBalance, ) = _safeGetAccountSnapshot(market, user);\\n            uint256 repaymentAmount = mul_ScalarTruncate(percentage, borrowBalance);\\n\\n            // Seize the entire collateral\\n            if (tokens != 0) {\\n                market.seize(liquidator, user, tokens);\\n            }\\n            // Repay a certain percentage of the borrow, forgive the rest\\n            if (borrowBalance != 0) {\\n                market.healBorrow(liquidator, user, repaymentAmount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Liquidates all borrows of the borrower. Callable only if the collateral is less than\\n     *   a predefined threshold, and the account collateral can be seized to cover all borrows. If\\n     *   the collateral is higher than the threshold, use regular liquidations. If the collateral is\\n     *   below the threshold, and the account is insolvent, use healAccount.\\n     * @param borrower the borrower address\\n     * @param orders an array of liquidation orders\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for a batch liquidation\\n     * @custom:error InsufficientCollateral error is thrown when there is not enough collateral to cover the debt\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function liquidateAccount(address borrower, LiquidationOrder[] calldata orders) external {\\n        // We will accrue interest and update the oracle prices later during the liquidation\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            // You should use the regular vToken.liquidateBorrow(...) call\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        uint256 collateralToSeize = mul_ScalarTruncate(\\n            Exp({ mantissa: liquidationIncentiveMantissa }),\\n            snapshot.borrows\\n        );\\n        if (collateralToSeize >= snapshot.totalCollateral) {\\n            // There is not enough collateral to seize. Use healBorrow to repay some part of the borrow\\n            // and record bad debt.\\n            revert InsufficientCollateral(collateralToSeize, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        uint256 ordersCount = orders.length;\\n\\n        _ensureMaxLoops(ordersCount / 2);\\n\\n        for (uint256 i; i < ordersCount; ++i) {\\n            if (!markets[address(orders[i].vTokenBorrowed)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenBorrowed));\\n            }\\n            if (!markets[address(orders[i].vTokenCollateral)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenCollateral));\\n            }\\n\\n            LiquidationOrder calldata order = orders[i];\\n            order.vTokenBorrowed.forceLiquidateBorrow(\\n                msg.sender,\\n                borrower,\\n                order.repayAmount,\\n                order.vTokenCollateral,\\n                true\\n            );\\n        }\\n\\n        VToken[] memory borrowMarkets = getAssetsIn(borrower);\\n        uint256 marketsCount = borrowMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            (, uint256 borrowBalance, ) = _safeGetAccountSnapshot(borrowMarkets[i], borrower);\\n            require(borrowBalance == 0, \\\"Nonzero borrow balance after liquidation\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets the closeFactor to use when liquidating borrows\\n     * @param newCloseFactorMantissa New close factor, scaled by 1e18\\n     * @custom:event Emits NewCloseFactor on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCloseFactor(uint256 newCloseFactorMantissa) external {\\n        _checkAccessAllowed(\\\"setCloseFactor(uint256)\\\");\\n        require(MAX_CLOSE_FACTOR_MANTISSA >= newCloseFactorMantissa, \\\"Close factor greater than maximum close factor\\\");\\n        require(MIN_CLOSE_FACTOR_MANTISSA <= newCloseFactorMantissa, \\\"Close factor smaller than minimum close factor\\\");\\n\\n        uint256 oldCloseFactorMantissa = closeFactorMantissa;\\n        closeFactorMantissa = newCloseFactorMantissa;\\n        emit NewCloseFactor(oldCloseFactorMantissa, newCloseFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Sets the collateralFactor for a market\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param vToken The market to set the factor on\\n     * @param newCollateralFactorMantissa The new collateral factor, scaled by 1e18\\n     * @param newLiquidationThresholdMantissa The new liquidation threshold, scaled by 1e18\\n     * @custom:event Emits NewCollateralFactor when collateral factor is updated\\n     *    and NewLiquidationThreshold when liquidation threshold is updated\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InvalidCollateralFactor error is thrown when collateral factor is too high\\n     * @custom:error InvalidLiquidationThreshold error is thrown when liquidation threshold is lower than collateral factor\\n     * @custom:error PriceError is thrown when the oracle returns an invalid price for the asset\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCollateralFactor(\\n        VToken vToken,\\n        uint256 newCollateralFactorMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    ) external {\\n        _checkAccessAllowed(\\\"setCollateralFactor(address,uint256,uint256)\\\");\\n\\n        // Verify market is listed\\n        Market storage market = markets[address(vToken)];\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Check collateral factor <= 0.9\\n        if (newCollateralFactorMantissa > MAX_COLLATERAL_FACTOR_MANTISSA) {\\n            revert InvalidCollateralFactor();\\n        }\\n\\n        // Ensure that liquidation threshold <= 1\\n        if (newLiquidationThresholdMantissa > MANTISSA_ONE) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // Ensure that liquidation threshold >= CF\\n        if (newLiquidationThresholdMantissa < newCollateralFactorMantissa) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // If collateral factor != 0, fail if price == 0\\n        if (newCollateralFactorMantissa != 0 && oracle.getUnderlyingPrice(address(vToken)) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 oldCollateralFactorMantissa = market.collateralFactorMantissa;\\n        if (newCollateralFactorMantissa != oldCollateralFactorMantissa) {\\n            market.collateralFactorMantissa = newCollateralFactorMantissa;\\n            emit NewCollateralFactor(vToken, oldCollateralFactorMantissa, newCollateralFactorMantissa);\\n        }\\n\\n        uint256 oldLiquidationThresholdMantissa = market.liquidationThresholdMantissa;\\n        if (newLiquidationThresholdMantissa != oldLiquidationThresholdMantissa) {\\n            market.liquidationThresholdMantissa = newLiquidationThresholdMantissa;\\n            emit NewLiquidationThreshold(vToken, oldLiquidationThresholdMantissa, newLiquidationThresholdMantissa);\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets liquidationIncentive\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newLiquidationIncentiveMantissa New liquidationIncentive scaled by 1e18\\n     * @custom:event Emits NewLiquidationIncentive on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setLiquidationIncentive(uint256 newLiquidationIncentiveMantissa) external {\\n        require(newLiquidationIncentiveMantissa >= MANTISSA_ONE, \\\"liquidation incentive should be greater than 1e18\\\");\\n\\n        _checkAccessAllowed(\\\"setLiquidationIncentive(uint256)\\\");\\n\\n        // Save current value for use in log\\n        uint256 oldLiquidationIncentiveMantissa = liquidationIncentiveMantissa;\\n\\n        // Set liquidation incentive to new incentive\\n        liquidationIncentiveMantissa = newLiquidationIncentiveMantissa;\\n\\n        // Emit event with old incentive, new incentive\\n        emit NewLiquidationIncentive(oldLiquidationIncentiveMantissa, newLiquidationIncentiveMantissa);\\n    }\\n\\n    /**\\n     * @notice Add the market to the markets mapping and set it as listed\\n     * @dev Only callable by the PoolRegistry\\n     * @param vToken The address of the market (token) to list\\n     * @custom:error MarketAlreadyListed is thrown if the market is already listed in this pool\\n     * @custom:access Only PoolRegistry\\n     */\\n    function supportMarket(VToken vToken) external {\\n        _checkSenderIs(poolRegistry);\\n\\n        if (markets[address(vToken)].isListed) {\\n            revert MarketAlreadyListed(address(vToken));\\n        }\\n\\n        require(vToken.isVToken(), \\\"Comptroller: Invalid vToken\\\"); // Sanity check to make sure its really a VToken\\n\\n        Market storage newMarket = markets[address(vToken)];\\n        newMarket.isListed = true;\\n        newMarket.collateralFactorMantissa = 0;\\n        newMarket.liquidationThresholdMantissa = 0;\\n\\n        _addMarket(address(vToken));\\n\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            rewardsDistributors[i].initializeMarket(address(vToken));\\n        }\\n\\n        emit MarketSupported(vToken);\\n    }\\n\\n    /**\\n     * @notice Set the given borrow caps for the given vToken markets. Borrowing that brings total borrows to or above borrow cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A borrow cap of type(uint256).max corresponds to unlimited borrowing.\\n     * @dev Borrow caps smaller than the current total borrows are accepted. This way, new borrows will not be allowed\\n            until the total borrows amount goes below the new borrow cap\\n     * @param vTokens The addresses of the markets (tokens) to change the borrow caps for\\n     * @param newBorrowCaps The new borrow cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited borrowing.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketBorrowCaps(VToken[] calldata vTokens, uint256[] calldata newBorrowCaps) external {\\n        _checkAccessAllowed(\\\"setMarketBorrowCaps(address[],uint256[])\\\");\\n\\n        uint256 numMarkets = vTokens.length;\\n        uint256 numBorrowCaps = newBorrowCaps.length;\\n\\n        require(numMarkets != 0 && numMarkets == numBorrowCaps, \\\"invalid input\\\");\\n\\n        _ensureMaxLoops(numMarkets);\\n\\n        for (uint256 i; i < numMarkets; ++i) {\\n            borrowCaps[address(vTokens[i])] = newBorrowCaps[i];\\n            emit NewBorrowCap(vTokens[i], newBorrowCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given supply caps for the given vToken markets. Supply that brings total Supply to or above supply cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A supply cap of type(uint256).max corresponds to unlimited supply.\\n     * @dev Supply caps smaller than the current total supplies are accepted. This way, new supplies will not be allowed\\n            until the total supplies amount goes below the new supply cap\\n     * @param vTokens The addresses of the markets (tokens) to change the supply caps for\\n     * @param newSupplyCaps The new supply cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited supply.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketSupplyCaps(VToken[] calldata vTokens, uint256[] calldata newSupplyCaps) external {\\n        _checkAccessAllowed(\\\"setMarketSupplyCaps(address[],uint256[])\\\");\\n        uint256 vTokensCount = vTokens.length;\\n\\n        require(vTokensCount != 0, \\\"invalid number of markets\\\");\\n        require(vTokensCount == newSupplyCaps.length, \\\"invalid number of markets\\\");\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            supplyCaps[address(vTokens[i])] = newSupplyCaps[i];\\n            emit NewSupplyCap(vTokens[i], newSupplyCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Pause/unpause specified actions\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param marketsList Markets to pause/unpause the actions on\\n     * @param actionsList List of action ids to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setActionsPaused(VToken[] calldata marketsList, Action[] calldata actionsList, bool paused) external {\\n        _checkAccessAllowed(\\\"setActionsPaused(address[],uint256[],bool)\\\");\\n\\n        uint256 marketsCount = marketsList.length;\\n        uint256 actionsCount = actionsList.length;\\n\\n        _ensureMaxLoops(marketsCount * actionsCount);\\n\\n        for (uint256 marketIdx; marketIdx < marketsCount; ++marketIdx) {\\n            for (uint256 actionIdx; actionIdx < actionsCount; ++actionIdx) {\\n                _setActionPaused(address(marketsList[marketIdx]), actionsList[actionIdx], paused);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given collateral threshold for non-batch liquidations. Regular liquidations\\n     *   will fail if the collateral amount is less than this threshold. Liquidators should use batch\\n     *   operations like liquidateAccount or healAccount.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newMinLiquidatableCollateral The new min liquidatable collateral (in USD).\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMinLiquidatableCollateral(uint256 newMinLiquidatableCollateral) external {\\n        _checkAccessAllowed(\\\"setMinLiquidatableCollateral(uint256)\\\");\\n\\n        uint256 oldMinLiquidatableCollateral = minLiquidatableCollateral;\\n        minLiquidatableCollateral = newMinLiquidatableCollateral;\\n        emit NewMinLiquidatableCollateral(oldMinLiquidatableCollateral, newMinLiquidatableCollateral);\\n    }\\n\\n    /**\\n     * @notice Add a new RewardsDistributor and initialize it with all markets. We can add several RewardsDistributor\\n     * contracts with the same rewardToken, and there could be overlaping among them considering the last reward slot (block or second)\\n     * @dev Only callable by the admin\\n     * @param _rewardsDistributor Address of the RewardDistributor contract to add\\n     * @custom:access Only Governance\\n     * @custom:event Emits NewRewardsDistributor with distributor address\\n     */\\n    function addRewardsDistributor(RewardsDistributor _rewardsDistributor) external onlyOwner {\\n        require(!rewardsDistributorExists[address(_rewardsDistributor)], \\\"already exists\\\");\\n\\n        uint256 rewardsDistributorsLen = rewardsDistributors.length;\\n        _ensureMaxLoops(rewardsDistributorsLen + 1);\\n\\n        rewardsDistributors.push(_rewardsDistributor);\\n        rewardsDistributorExists[address(_rewardsDistributor)] = true;\\n\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            _rewardsDistributor.initializeMarket(address(allMarkets[i]));\\n        }\\n\\n        emit NewRewardsDistributor(address(_rewardsDistributor), address(_rewardsDistributor.rewardToken()));\\n    }\\n\\n    /**\\n     * @notice Sets a new price oracle for the Comptroller\\n     * @dev Only callable by the admin\\n     * @param newOracle Address of the new price oracle to set\\n     * @custom:event Emits NewPriceOracle on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when the new oracle address is zero\\n     */\\n    function setPriceOracle(ResilientOracleInterface newOracle) external onlyOwner {\\n        ensureNonzeroAddress(address(newOracle));\\n\\n        ResilientOracleInterface oldOracle = oracle;\\n        oracle = newOracle;\\n        emit NewPriceOracle(oldOracle, newOracle);\\n    }\\n\\n    /**\\n     * @notice Set the for loop iteration limit to avoid DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Sets the prime token contract for the comptroller\\n     * @param _prime Address of the Prime contract\\n     */\\n    function setPrimeToken(IPrime _prime) external onlyOwner {\\n        ensureNonzeroAddress(address(_prime));\\n\\n        emit NewPrimeToken(prime, _prime);\\n        prime = _prime;\\n    }\\n\\n    /**\\n     * @notice Enables forced liquidations for a market. If forced liquidation is enabled,\\n     * borrows in the market may be liquidated regardless of the account liquidity\\n     * @param vTokenBorrowed Borrowed vToken\\n     * @param enable Whether to enable forced liquidations\\n     */\\n    function setForcedLiquidation(address vTokenBorrowed, bool enable) external {\\n        _checkAccessAllowed(\\\"setForcedLiquidation(address,bool)\\\");\\n        ensureNonzeroAddress(vTokenBorrowed);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(vTokenBorrowed);\\n        }\\n\\n        isForcedLiquidationEnabled[vTokenBorrowed] = enable;\\n        emit IsForcedLiquidationEnabledUpdated(vTokenBorrowed, enable);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to liquidation threshold requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of liquidation threshold requirements,\\n     * @return shortfall Account shortfall below liquidation threshold requirements\\n     */\\n    function getAccountLiquidity(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getLiquidationThreshold);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to collateral requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of collateral requirements,\\n     * @return shortfall Account shortfall below collateral requirements\\n     */\\n    function getBorrowingPower(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getCollateralFactor);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine what the account liquidity would be if the given amounts were redeemed/borrowed\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Hypothetical account liquidity in excess of collateral requirements,\\n     * @return shortfall Hypothetical account shortfall below collateral requirements\\n     */\\n    function getHypotheticalAccountLiquidity(\\n        address account,\\n        address vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            account,\\n            VToken(vTokenModify),\\n            redeemTokens,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Return all of the markets\\n     * @dev The automatic getter may be used to access an individual market.\\n     * @return markets The list of market addresses\\n     */\\n    function getAllMarkets() external view override returns (VToken[] memory) {\\n        return allMarkets;\\n    }\\n\\n    /**\\n     * @notice Check if a market is marked as listed (active)\\n     * @param vToken vToken Address for the market to check\\n     * @return listed True if listed otherwise false\\n     */\\n    function isMarketListed(VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].isListed;\\n    }\\n\\n    /*** Assets You Are In ***/\\n\\n    /**\\n     * @notice Returns whether the given account is entered in a given market\\n     * @param account The address of the account to check\\n     * @param vToken The vToken to check\\n     * @return True if the account is in the market specified, otherwise false.\\n     */\\n    function checkMembership(address account, VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].accountMembership[account];\\n    }\\n\\n    /**\\n     * @notice Calculate number of tokens of collateral asset to seize given an underlying amount\\n     * @dev Used in liquidation (called in vToken.liquidateBorrowFresh)\\n     * @param vTokenBorrowed The address of the borrowed vToken\\n     * @param vTokenCollateral The address of the collateral vToken\\n     * @param actualRepayAmount The amount of vTokenBorrowed underlying to convert into vTokenCollateral tokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return tokensToSeize Number of vTokenCollateral tokens to be seized in a liquidation\\n     * @custom:error PriceError if the oracle returns an invalid price\\n     */\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 actualRepayAmount\\n    ) external view override returns (uint256 error, uint256 tokensToSeize) {\\n        /* Read oracle prices for borrowed and collateral markets */\\n        uint256 priceBorrowedMantissa = _safeGetUnderlyingPrice(VToken(vTokenBorrowed));\\n        uint256 priceCollateralMantissa = _safeGetUnderlyingPrice(VToken(vTokenCollateral));\\n\\n        /*\\n         * Get the exchange rate and calculate the number of collateral tokens to seize:\\n         *  seizeAmount = actualRepayAmount * liquidationIncentive * priceBorrowed / priceCollateral\\n         *  seizeTokens = seizeAmount / exchangeRate\\n         *   = actualRepayAmount * (liquidationIncentive * priceBorrowed) / (priceCollateral * exchangeRate)\\n         */\\n        uint256 exchangeRateMantissa = VToken(vTokenCollateral).exchangeRateStored(); // Note: reverts on error\\n        uint256 seizeTokens;\\n        Exp memory numerator;\\n        Exp memory denominator;\\n        Exp memory ratio;\\n\\n        numerator = mul_(Exp({ mantissa: liquidationIncentiveMantissa }), Exp({ mantissa: priceBorrowedMantissa }));\\n        denominator = mul_(Exp({ mantissa: priceCollateralMantissa }), Exp({ mantissa: exchangeRateMantissa }));\\n        ratio = div_(numerator, denominator);\\n\\n        seizeTokens = mul_ScalarTruncate(ratio, actualRepayAmount);\\n\\n        return (NO_ERROR, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Returns reward speed given a vToken\\n     * @param vToken The vToken to get the reward speeds for\\n     * @return rewardSpeeds Array of total supply and borrow speeds and reward token for all reward distributors\\n     */\\n    function getRewardsByMarket(address vToken) external view returns (RewardSpeeds[] memory rewardSpeeds) {\\n        uint256 rewardsDistributorsLength = rewardsDistributors.length;\\n        rewardSpeeds = new RewardSpeeds[](rewardsDistributorsLength);\\n        for (uint256 i; i < rewardsDistributorsLength; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            address rewardToken = address(rewardsDistributor.rewardToken());\\n            rewardSpeeds[i] = RewardSpeeds({\\n                rewardToken: rewardToken,\\n                supplySpeed: rewardsDistributor.rewardTokenSupplySpeeds(vToken),\\n                borrowSpeed: rewardsDistributor.rewardTokenBorrowSpeeds(vToken)\\n            });\\n        }\\n        return rewardSpeeds;\\n    }\\n\\n    /**\\n     * @notice Return all reward distributors for this pool\\n     * @return Array of RewardDistributor addresses\\n     */\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory) {\\n        return rewardsDistributors;\\n    }\\n\\n    /**\\n     * @notice A marker method that returns true for a valid Comptroller contract\\n     * @return Always true\\n     */\\n    function isComptroller() external pure override returns (bool) {\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Update the prices of all the tokens associated with the provided account\\n     * @param account Address of the account to get associated tokens with\\n     */\\n    function updatePrices(address account) public {\\n        VToken[] memory vTokens = getAssetsIn(account);\\n        uint256 vTokensCount = vTokens.length;\\n\\n        ResilientOracleInterface oracle_ = oracle;\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            oracle_.updatePrice(address(vTokens[i]));\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if a certain action is paused on a market\\n     * @param market vToken address\\n     * @param action Action to check\\n     * @return paused True if the action is paused otherwise false\\n     */\\n    function actionPaused(address market, Action action) public view returns (bool) {\\n        return _actionPaused[market][action];\\n    }\\n\\n    /**\\n     * @notice Returns the assets an account has entered\\n     * @param account The address of the account to pull assets for\\n     * @return A list with the assets the account has entered\\n     */\\n    function getAssetsIn(address account) public view returns (VToken[] memory) {\\n        uint256 len;\\n        VToken[] memory _accountAssets = accountAssets[account];\\n        uint256 _accountAssetsLength = _accountAssets.length;\\n\\n        VToken[] memory assetsIn = new VToken[](_accountAssetsLength);\\n\\n        for (uint256 i; i < _accountAssetsLength; ++i) {\\n            Market storage market = markets[address(_accountAssets[i])];\\n            if (market.isListed) {\\n                assetsIn[len] = _accountAssets[i];\\n                ++len;\\n            }\\n        }\\n\\n        assembly {\\n            mstore(assetsIn, len)\\n        }\\n\\n        return assetsIn;\\n    }\\n\\n    /**\\n     * @notice Add the market to the borrower's \\\"assets in\\\" for liquidity calculations\\n     * @param vToken The market to enter\\n     * @param borrower The address of the account to modify\\n     */\\n    function _addToMarket(VToken vToken, address borrower) internal {\\n        _checkActionPauseState(address(vToken), Action.ENTER_MARKET);\\n        Market storage marketToJoin = markets[address(vToken)];\\n\\n        if (!marketToJoin.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (marketToJoin.accountMembership[borrower]) {\\n            // already joined\\n            return;\\n        }\\n\\n        // survived the gauntlet, add to list\\n        // NOTE: we store these somewhat redundantly as a significant optimization\\n        //  this avoids having to iterate through the list for the most common use cases\\n        //  that is, only when we need to perform liquidity checks\\n        //  and not whenever we want to check if an account is in a particular market\\n        marketToJoin.accountMembership[borrower] = true;\\n        accountAssets[borrower].push(vToken);\\n\\n        emit MarketEntered(vToken, borrower);\\n    }\\n\\n    /**\\n     * @notice Internal function to validate that a market hasn't already been added\\n     * and if it hasn't adds it\\n     * @param vToken The market to support\\n     */\\n    function _addMarket(address vToken) internal {\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            if (allMarkets[i] == VToken(vToken)) {\\n                revert MarketAlreadyListed(vToken);\\n            }\\n        }\\n        allMarkets.push(VToken(vToken));\\n        marketsCount = allMarkets.length;\\n        _ensureMaxLoops(marketsCount);\\n    }\\n\\n    /**\\n     * @dev Pause/unpause an action on a market\\n     * @param market Market to pause/unpause the action on\\n     * @param action Action id to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     */\\n    function _setActionPaused(address market, Action action, bool paused) internal {\\n        require(markets[market].isListed, \\\"cannot pause a market that is not listed\\\");\\n        _actionPaused[market][action] = paused;\\n        emit ActionPausedMarket(VToken(market), action, paused);\\n    }\\n\\n    /**\\n     * @dev Internal function to check that vTokens can be safely redeemed for the underlying asset.\\n     * @param vToken Address of the vTokens to redeem\\n     * @param redeemer Account redeeming the tokens\\n     * @param redeemTokens The number of tokens to redeem\\n     */\\n    function _checkRedeemAllowed(address vToken, address redeemer, uint256 redeemTokens) internal {\\n        Market storage market = markets[vToken];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        /* If the redeemer is not 'in' the market, then we can bypass the liquidity check */\\n        if (!market.accountMembership[redeemer]) {\\n            return;\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(redeemer);\\n\\n        /* Otherwise, perform a hypothetical liquidity check to guard against shortfall */\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            redeemer,\\n            VToken(vToken),\\n            redeemTokens,\\n            0,\\n            _getCollateralFactor\\n        );\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n    }\\n\\n    /**\\n     * @notice Get the total collateral, weighted collateral, borrow balance, liquidity, shortfall\\n     * @param account The account to get the snapshot for\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n     *  liquidation threshold. Accepts the address of the vToken and returns the weight as Exp.\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getCurrentLiquiditySnapshot(\\n        address account,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        return _getHypotheticalLiquiditySnapshot(account, VToken(address(0)), 0, 0, weight);\\n    }\\n\\n    /**\\n     * @notice Determine what the supply/borrow balances would be if the given amounts were redeemed/borrowed\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n         liquidation threshold. Accepts the address of the VToken and returns the weight\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getHypotheticalLiquiditySnapshot(\\n        address account,\\n        VToken vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        // For each asset the account is in\\n        VToken[] memory assets = getAssetsIn(account);\\n        uint256 assetsCount = assets.length;\\n\\n        for (uint256 i; i < assetsCount; ++i) {\\n            VToken asset = assets[i];\\n\\n            // Read the balances and exchange rate from the vToken\\n            (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) = _safeGetAccountSnapshot(\\n                asset,\\n                account\\n            );\\n\\n            // Get the normalized price of the asset\\n            Exp memory oraclePrice = Exp({ mantissa: _safeGetUnderlyingPrice(asset) });\\n\\n            // Pre-compute conversion factors from vTokens -> usd\\n            Exp memory vTokenPrice = mul_(Exp({ mantissa: exchangeRateMantissa }), oraclePrice);\\n            Exp memory weightedVTokenPrice = mul_(weight(asset), vTokenPrice);\\n\\n            // weightedCollateral += weightedVTokenPrice * vTokenBalance\\n            snapshot.weightedCollateral = mul_ScalarTruncateAddUInt(\\n                weightedVTokenPrice,\\n                vTokenBalance,\\n                snapshot.weightedCollateral\\n            );\\n\\n            // totalCollateral += vTokenPrice * vTokenBalance\\n            snapshot.totalCollateral = mul_ScalarTruncateAddUInt(vTokenPrice, vTokenBalance, snapshot.totalCollateral);\\n\\n            // borrows += oraclePrice * borrowBalance\\n            snapshot.borrows = mul_ScalarTruncateAddUInt(oraclePrice, borrowBalance, snapshot.borrows);\\n\\n            // Calculate effects of interacting with vTokenModify\\n            if (asset == vTokenModify) {\\n                // redeem effect\\n                // effects += tokensToDenom * redeemTokens\\n                snapshot.effects = mul_ScalarTruncateAddUInt(weightedVTokenPrice, redeemTokens, snapshot.effects);\\n\\n                // borrow effect\\n                // effects += oraclePrice * borrowAmount\\n                snapshot.effects = mul_ScalarTruncateAddUInt(oraclePrice, borrowAmount, snapshot.effects);\\n            }\\n        }\\n\\n        uint256 borrowPlusEffects = snapshot.borrows + snapshot.effects;\\n        // These are safe, as the underflow condition is checked first\\n        unchecked {\\n            if (snapshot.weightedCollateral > borrowPlusEffects) {\\n                snapshot.liquidity = snapshot.weightedCollateral - borrowPlusEffects;\\n                snapshot.shortfall = 0;\\n            } else {\\n                snapshot.liquidity = 0;\\n                snapshot.shortfall = borrowPlusEffects - snapshot.weightedCollateral;\\n            }\\n        }\\n\\n        return snapshot;\\n    }\\n\\n    /**\\n     * @dev Retrieves price from oracle for an asset and checks it is nonzero\\n     * @param asset Address for asset to query price\\n     * @return Underlying price\\n     */\\n    function _safeGetUnderlyingPrice(VToken asset) internal view returns (uint256) {\\n        uint256 oraclePriceMantissa = oracle.getUnderlyingPrice(address(asset));\\n        if (oraclePriceMantissa == 0) {\\n            revert PriceError(address(asset));\\n        }\\n        return oraclePriceMantissa;\\n    }\\n\\n    /**\\n     * @dev Return collateral factor for a market\\n     * @param asset Address for asset\\n     * @return Collateral factor as exponential\\n     */\\n    function _getCollateralFactor(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].collateralFactorMantissa });\\n    }\\n\\n    /**\\n     * @dev Retrieves liquidation threshold for a market as an exponential\\n     * @param asset Address for asset to liquidation threshold\\n     * @return Liquidation threshold as exponential\\n     */\\n    function _getLiquidationThreshold(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].liquidationThresholdMantissa });\\n    }\\n\\n    /**\\n     * @dev Returns supply and borrow balances of user in vToken, reverts on failure\\n     * @param vToken Market to query\\n     * @param user Account address\\n     * @return vTokenBalance Balance of vTokens, the same as vToken.balanceOf(user)\\n     * @return borrowBalance Borrowed amount, including the interest\\n     * @return exchangeRateMantissa Stored exchange rate\\n     */\\n    function _safeGetAccountSnapshot(\\n        VToken vToken,\\n        address user\\n    ) internal view returns (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) {\\n        uint256 err;\\n        (err, vTokenBalance, borrowBalance, exchangeRateMantissa) = vToken.getAccountSnapshot(user);\\n        if (err != 0) {\\n            revert SnapshotError(address(vToken), user);\\n        }\\n        return (vTokenBalance, borrowBalance, exchangeRateMantissa);\\n    }\\n\\n    /// @notice Reverts if the call is not from expectedSender\\n    /// @param expectedSender Expected transaction sender\\n    function _checkSenderIs(address expectedSender) internal view {\\n        if (msg.sender != expectedSender) {\\n            revert UnexpectedSender(expectedSender, msg.sender);\\n        }\\n    }\\n\\n    /// @notice Reverts if a certain action is paused on a market\\n    /// @param market Market to check\\n    /// @param action Action to check\\n    function _checkActionPauseState(address market, Action action) private view {\\n        if (actionPaused(market, action)) {\\n            revert ActionPaused(market, action);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x7c6e1c6264e4681f82a9ac1bcd9155197a930033291ee5561ad97a56006f5e9c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\n\\nenum Action {\\n    MINT,\\n    REDEEM,\\n    BORROW,\\n    REPAY,\\n    SEIZE,\\n    LIQUIDATE,\\n    TRANSFER,\\n    ENTER_MARKET,\\n    EXIT_MARKET\\n}\\n\\n/**\\n * @title ComptrollerInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract.\\n */\\ninterface ComptrollerInterface {\\n    /*** Assets You Are In ***/\\n\\n    function enterMarkets(address[] calldata vTokens) external returns (uint256[] memory);\\n\\n    function exitMarket(address vToken) external returns (uint256);\\n\\n    /*** Policy Hooks ***/\\n\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external;\\n\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external;\\n\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external;\\n\\n    function preRepayHook(address vToken, address borrower) external;\\n\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external;\\n\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower\\n    ) external;\\n\\n    function borrowVerify(address vToken, address borrower, uint borrowAmount) external;\\n\\n    function mintVerify(address vToken, address minter, uint mintAmount, uint mintTokens) external;\\n\\n    function redeemVerify(address vToken, address redeemer, uint redeemAmount, uint redeemTokens) external;\\n\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer,\\n        address borrower,\\n        uint repayAmount,\\n        uint borrowerIndex\\n    ) external;\\n\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address liquidator,\\n        address borrower,\\n        uint repayAmount,\\n        uint seizeTokens\\n    ) external;\\n\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower,\\n        uint seizeTokens\\n    ) external;\\n\\n    function transferVerify(address vToken, address src, address dst, uint transferTokens) external;\\n\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external;\\n\\n    function isComptroller() external view returns (bool);\\n\\n    /*** Liquidity/Liquidation Calculations ***/\\n\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 repayAmount\\n    ) external view returns (uint256, uint256);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function actionPaused(address market, Action action) external view returns (bool);\\n}\\n\\n/**\\n * @title ComptrollerViewInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract, including only some util view functions.\\n */\\ninterface ComptrollerViewInterface {\\n    function markets(address) external view returns (bool, uint256);\\n\\n    function oracle() external view returns (ResilientOracleInterface);\\n\\n    function getAssetsIn(address) external view returns (VToken[] memory);\\n\\n    function closeFactorMantissa() external view returns (uint256);\\n\\n    function liquidationIncentiveMantissa() external view returns (uint256);\\n\\n    function minLiquidatableCollateral() external view returns (uint256);\\n\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function borrowCaps(address) external view returns (uint256);\\n\\n    function supplyCaps(address) external view returns (uint256);\\n\\n    function approvedDelegates(address user, address delegate) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xcbf7f9977472650c61345b7cbde23e81f626e1f8863bab4c6ce3dacfc7604919\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\nimport { Action } from \\\"./ComptrollerInterface.sol\\\";\\n\\n/**\\n * @title ComptrollerStorage\\n * @author Venus\\n * @notice Storage layout for the `Comptroller` contract.\\n */\\ncontract ComptrollerStorage {\\n    struct LiquidationOrder {\\n        VToken vTokenCollateral;\\n        VToken vTokenBorrowed;\\n        uint256 repayAmount;\\n    }\\n\\n    struct AccountLiquiditySnapshot {\\n        uint256 totalCollateral;\\n        uint256 weightedCollateral;\\n        uint256 borrows;\\n        uint256 effects;\\n        uint256 liquidity;\\n        uint256 shortfall;\\n    }\\n\\n    struct RewardSpeeds {\\n        address rewardToken;\\n        uint256 supplySpeed;\\n        uint256 borrowSpeed;\\n    }\\n\\n    struct Market {\\n        // Whether or not this market is listed\\n        bool isListed;\\n        //  Multiplier representing the most one can borrow against their collateral in this market.\\n        //  For instance, 0.9 to allow borrowing 90% of collateral value.\\n        //  Must be between 0 and 1, and stored as a mantissa.\\n        uint256 collateralFactorMantissa;\\n        //  Multiplier representing the collateralization after which the borrow is eligible\\n        //  for liquidation. For instance, 0.8 liquidate when the borrow is 80% of collateral\\n        //  value. Must be between 0 and collateral factor, stored as a mantissa.\\n        uint256 liquidationThresholdMantissa;\\n        // Per-market mapping of \\\"accounts in this asset\\\"\\n        mapping(address => bool) accountMembership;\\n    }\\n\\n    /**\\n     * @notice Oracle which gives the price of any given asset\\n     */\\n    ResilientOracleInterface public oracle;\\n\\n    /**\\n     * @notice Multiplier used to calculate the maximum repayAmount when liquidating a borrow\\n     */\\n    uint256 public closeFactorMantissa;\\n\\n    /**\\n     * @notice Multiplier representing the discount on collateral that a liquidator receives\\n     */\\n    uint256 public liquidationIncentiveMantissa;\\n\\n    /**\\n     * @notice Per-account mapping of \\\"assets you are in\\\"\\n     */\\n    mapping(address => VToken[]) public accountAssets;\\n\\n    /**\\n     * @notice Official mapping of vTokens -> Market metadata\\n     * @dev Used e.g. to determine if a market is supported\\n     */\\n    mapping(address => Market) public markets;\\n\\n    /// @notice A list of all markets\\n    VToken[] public allMarkets;\\n\\n    /// @notice Borrow caps enforced by borrowAllowed for each vToken address. Defaults to zero which restricts borrowing.\\n    mapping(address => uint256) public borrowCaps;\\n\\n    /// @notice Minimal collateral required for regular (non-batch) liquidations\\n    uint256 public minLiquidatableCollateral;\\n\\n    /// @notice Supply caps enforced by mintAllowed for each vToken address. Defaults to zero which corresponds to minting not allowed\\n    mapping(address => uint256) public supplyCaps;\\n\\n    /// @notice True if a certain action is paused on a certain market\\n    mapping(address => mapping(Action => bool)) internal _actionPaused;\\n\\n    // List of Reward Distributors added\\n    RewardsDistributor[] internal rewardsDistributors;\\n\\n    // Used to check if rewards distributor is added\\n    mapping(address => bool) internal rewardsDistributorExists;\\n\\n    /// @notice Flag indicating whether forced liquidation enabled for a market\\n    mapping(address => bool) public isForcedLiquidationEnabled;\\n\\n    uint256 internal constant NO_ERROR = 0;\\n\\n    // closeFactorMantissa must be strictly greater than this value\\n    uint256 internal constant MIN_CLOSE_FACTOR_MANTISSA = 0.05e18; // 0.05\\n\\n    // closeFactorMantissa must not exceed this value\\n    uint256 internal constant MAX_CLOSE_FACTOR_MANTISSA = 0.9e18; // 0.9\\n\\n    // No collateralFactorMantissa may exceed this value\\n    uint256 internal constant MAX_COLLATERAL_FACTOR_MANTISSA = 0.95e18; // 0.95\\n\\n    /// Prime token address\\n    IPrime public prime;\\n\\n    /// @notice Whether the delegate is allowed to borrow or redeem on behalf of the user\\n    //mapping(address user => mapping (address delegate => bool approved)) public approvedDelegates;\\n    mapping(address => mapping(address => bool)) public approvedDelegates;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4df44cb65ac152bac2be4b4545430e703005a74a55b72e144100b16421bd8bfd\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title TokenErrorReporter\\n * @author Venus\\n * @notice Errors that can be thrown by the `VToken` contract.\\n */\\ncontract TokenErrorReporter {\\n    uint256 public constant NO_ERROR = 0; // support legacy return codes\\n\\n    error TransferNotAllowed();\\n\\n    error MintFreshnessCheck();\\n\\n    error RedeemFreshnessCheck();\\n    error RedeemTransferOutNotPossible();\\n\\n    error BorrowFreshnessCheck();\\n    error BorrowCashNotAvailable();\\n    error DelegateNotApproved();\\n\\n    error RepayBorrowFreshnessCheck();\\n\\n    error HealBorrowUnauthorized();\\n    error ForceLiquidateBorrowUnauthorized();\\n\\n    error LiquidateFreshnessCheck();\\n    error LiquidateCollateralFreshnessCheck();\\n    error LiquidateAccrueCollateralInterestFailed(uint256 errorCode);\\n    error LiquidateLiquidatorIsBorrower();\\n    error LiquidateCloseAmountIsZero();\\n    error LiquidateCloseAmountIsUintMax();\\n\\n    error LiquidateSeizeLiquidatorIsBorrower();\\n\\n    error ProtocolSeizeShareTooBig();\\n\\n    error SetReserveFactorFreshCheck();\\n    error SetReserveFactorBoundsCheck();\\n\\n    error AddReservesFactorFreshCheck(uint256 actualAddAmount);\\n\\n    error ReduceReservesFreshCheck();\\n    error ReduceReservesCashNotAvailable();\\n    error ReduceReservesCashValidation();\\n\\n    error SetInterestRateModelFreshCheck();\\n}\\n\",\"keccak256\":\"0x7a7ced1caaac2d9242659ebd50b99f308c725ce958ac9e11f7ada404b1d97a7b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { EXP_SCALE as EXP_SCALE_, MANTISSA_ONE as MANTISSA_ONE_ } from \\\"./lib/constants.sol\\\";\\n\\n/**\\n * @title Exponential module for storing fixed-precision decimals\\n * @author Compound\\n * @notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.\\n *         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:\\n *         `Exp({mantissa: 5100000000000000000})`.\\n */\\ncontract ExponentialNoError {\\n    struct Exp {\\n        uint256 mantissa;\\n    }\\n\\n    struct Double {\\n        uint256 mantissa;\\n    }\\n\\n    uint256 internal constant EXP_SCALE = EXP_SCALE_;\\n    uint256 internal constant DOUBLE_SCALE = 1e36;\\n    uint256 internal constant HALF_EXP_SCALE = EXP_SCALE / 2;\\n    uint256 internal constant MANTISSA_ONE = MANTISSA_ONE_;\\n\\n    /**\\n     * @dev Truncates the given exp to a whole number value.\\n     *      For example, truncate(Exp{mantissa: 15 * EXP_SCALE}) = 15\\n     */\\n    function truncate(Exp memory exp) internal pure returns (uint256) {\\n        // Note: We are not using careful math here as we're performing a division that cannot fail\\n        return exp.mantissa / EXP_SCALE;\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, then truncate to return an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncate(Exp memory a, uint256 scalar) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return truncate(product);\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncateAddUInt(Exp memory a, uint256 scalar, uint256 addend) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return add_(truncate(product), addend);\\n    }\\n\\n    /**\\n     * @dev Checks if first Exp is less than second Exp.\\n     */\\n    function lessThanExp(Exp memory left, Exp memory right) internal pure returns (bool) {\\n        return left.mantissa < right.mantissa;\\n    }\\n\\n    function safe224(uint256 n, string memory errorMessage) internal pure returns (uint224) {\\n        require(n <= type(uint224).max, errorMessage);\\n        return uint224(n);\\n    }\\n\\n    function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) {\\n        require(n <= type(uint32).max, errorMessage);\\n        return uint32(n);\\n    }\\n\\n    function add_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a + b;\\n    }\\n\\n    function sub_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a - b;\\n    }\\n\\n    function mul_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b.mantissa) / EXP_SCALE });\\n    }\\n\\n    function mul_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / EXP_SCALE;\\n    }\\n\\n    function mul_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b.mantissa) / DOUBLE_SCALE });\\n    }\\n\\n    function mul_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / DOUBLE_SCALE;\\n    }\\n\\n    function mul_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a * b;\\n    }\\n\\n    function div_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(mul_(a.mantissa, EXP_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, EXP_SCALE), b.mantissa);\\n    }\\n\\n    function div_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a.mantissa, DOUBLE_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, DOUBLE_SCALE), b.mantissa);\\n    }\\n\\n    function div_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a / b;\\n    }\\n\\n    function fraction(uint256 a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a, DOUBLE_SCALE), b) });\\n    }\\n}\\n\",\"keccak256\":\"0x8afbe8a24fe3539c124e718681ed3dcebd24c40dd53095786c0155998213b9b0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title Compound's InterestRateModel Interface\\n * @author Compound\\n */\\nabstract contract InterestRateModel {\\n    /**\\n     * @notice Calculates the current borrow interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getBorrowRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Calculates the current supply interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param reserveFactorMantissa The current reserve factor the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getSupplyRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 reserveFactorMantissa,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is an InterestRateModel contract (for inspection)\\n     * @return Always true\\n     */\\n    function isInterestRateModel() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0xc4fda1ab75ebe4b187b707c4f10c58780f343cf343c537f641dc75d3cd28ab51\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title MaxLoopsLimitHelper\\n * @author Venus\\n * @notice Abstract contract used to avoid collection with too many items that would generate gas errors and DoS.\\n */\\nabstract contract MaxLoopsLimitHelper {\\n    // Limit for the loops to avoid the DOS\\n    uint256 public maxLoopsLimit;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when max loops limit is set\\n    event MaxLoopsLimitUpdated(uint256 oldMaxLoopsLimit, uint256 newmaxLoopsLimit);\\n\\n    /// @notice Thrown an error on maxLoopsLimit exceeds for any loop\\n    error MaxLoopsLimitExceeded(uint256 loopsLimit, uint256 requiredLoops);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function _setMaxLoopsLimit(uint256 limit) internal {\\n        require(limit > maxLoopsLimit, \\\"Comptroller: Invalid maxLoopsLimit\\\");\\n\\n        uint256 oldMaxLoopsLimit = maxLoopsLimit;\\n        maxLoopsLimit = limit;\\n\\n        emit MaxLoopsLimitUpdated(oldMaxLoopsLimit, limit);\\n    }\\n\\n    /**\\n     * @notice Compare the maxLoopsLimit with number of the times loop iterate\\n     * @param len Length of the loops iterate\\n     * @custom:error MaxLoopsLimitExceeded error is thrown when loops length exceeds maxLoopsLimit\\n     */\\n    function _ensureMaxLoops(uint256 len) internal view {\\n        if (len > maxLoopsLimit) {\\n            revert MaxLoopsLimitExceeded(maxLoopsLimit, len);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x4c25e30635485d162177effa384eee51768b0141a567a0da16ff6ad673274166\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\n\\nimport { ExponentialNoError } from \\\"../ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"../VToken.sol\\\";\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"../MaxLoopsLimitHelper.sol\\\";\\nimport { RewardsDistributorStorage } from \\\"./RewardsDistributorStorage.sol\\\";\\n\\n/**\\n * @title `RewardsDistributor`\\n * @author Venus\\n * @notice Contract used to configure, track and distribute rewards to users based on their actions (borrows and supplies) in the protocol.\\n * Users can receive additional rewards through a `RewardsDistributor`. Each `RewardsDistributor` proxy is initialized with a specific reward\\n * token and `Comptroller`, which can then distribute the reward token to users that supply or borrow in the associated pool.\\n * Authorized users can set the reward token borrow and supply speeds for each market in the pool. This sets a fixed amount of reward\\n * token to be released each slot (block or second) for borrowers and suppliers, which is distributed based on a user\\u2019s percentage of the borrows or supplies\\n * respectively. The owner can also set up reward distributions to contributor addresses (distinct from suppliers and borrowers) by setting\\n * their contributor reward token speed, which similarly allocates a fixed amount of reward token per slot (block or second).\\n *\\n * The owner has the ability to transfer any amount of reward tokens held by the contract to any other address. Rewards are not distributed\\n * automatically and must be claimed by a user calling `claimRewardToken()`. Users should be aware that it is up to the owner and other centralized\\n * entities to ensure that the `RewardsDistributor` holds enough tokens to distribute the accumulated rewards of users and contributors.\\n */\\ncontract RewardsDistributor is\\n    ExponentialNoError,\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    MaxLoopsLimitHelper,\\n    RewardsDistributorStorage,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    /// @notice The initial REWARD TOKEN index for a market\\n    uint224 public constant INITIAL_INDEX = 1e36;\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a supplier\\n    event DistributedSupplierRewardToken(\\n        VToken indexed vToken,\\n        address indexed supplier,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenSupplyIndex\\n    );\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a borrower\\n    event DistributedBorrowerRewardToken(\\n        VToken indexed vToken,\\n        address indexed borrower,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenBorrowIndex\\n    );\\n\\n    /// @notice Emitted when a new supply-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenSupplySpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when a new borrow-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenBorrowSpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when REWARD TOKEN is granted by admin\\n    event RewardTokenGranted(address indexed recipient, uint256 amount);\\n\\n    /// @notice Emitted when a new REWARD TOKEN speed is set for a contributor\\n    event ContributorRewardTokenSpeedUpdated(address indexed contributor, uint256 newSpeed);\\n\\n    /// @notice Emitted when a market is initialized\\n    event MarketInitialized(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token supply index is updated\\n    event RewardTokenSupplyIndexUpdated(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token borrow index is updated\\n    event RewardTokenBorrowIndexUpdated(address indexed vToken, Exp marketBorrowIndex);\\n\\n    /// @notice Emitted when a reward for contributor is updated\\n    event ContributorRewardsUpdated(address indexed contributor, uint256 rewardAccrued);\\n\\n    /// @notice Emitted when a reward token last rewarding block for supply is updated\\n    event SupplyLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding block for borrow is updated\\n    event BorrowLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for supply is updated\\n    event SupplyLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for borrow is updated\\n    event BorrowLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    modifier onlyComptroller() {\\n        require(address(comptroller) == msg.sender, \\\"Only comptroller can call this function\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice RewardsDistributor initializer\\n     * @dev Initializes the deployer to owner\\n     * @param comptroller_ Comptroller to attach the reward distributor to\\n     * @param rewardToken_ Reward token to distribute\\n     * @param loopsLimit_ Maximum number of iterations for the loops in this contract\\n     * @param accessControlManager_ AccessControlManager contract address\\n     */\\n    function initialize(\\n        Comptroller comptroller_,\\n        IERC20Upgradeable rewardToken_,\\n        uint256 loopsLimit_,\\n        address accessControlManager_\\n    ) external initializer {\\n        comptroller = comptroller_;\\n        rewardToken = rewardToken_;\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n\\n        _setMaxLoopsLimit(loopsLimit_);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken\\n     * @param vToken The address of the vToken to be initialized\\n     * @custom:event MarketInitialized emits on success\\n     * @custom:access Only Comptroller\\n     */\\n    function initializeMarket(address vToken) external onlyComptroller {\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        isTimeBased\\n            ? _initializeMarketTimestampBased(vToken, blockNumberOrTimestamp)\\n            : _initializeMarketBlockBased(vToken, safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\"));\\n\\n        emit MarketInitialized(vToken);\\n    }\\n\\n    /*** Reward Token Distribution ***/\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them\\n     *         Borrowers will begin to accrue after the first interaction with the protocol.\\n     * @dev This function should only be called when the user has a borrow position in the market\\n     *      (e.g. Comptroller.preBorrowHook, and Comptroller.preRepayHook)\\n     *      We avoid an external call to check if they are in the market to save gas because this function is called in many places\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function distributeBorrowerRewardToken(\\n        address vToken,\\n        address borrower,\\n        Exp memory marketBorrowIndex\\n    ) external onlyComptroller {\\n        _distributeBorrowerRewardToken(vToken, borrower, marketBorrowIndex);\\n    }\\n\\n    function updateRewardTokenSupplyIndex(address vToken) external onlyComptroller {\\n        _updateRewardTokenSupplyIndex(vToken);\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the recipient\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all\\n     * @param recipient The address of the recipient to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     */\\n    function grantRewardToken(address recipient, uint256 amount) external onlyOwner {\\n        uint256 amountLeft = _grantRewardToken(recipient, amount);\\n        require(amountLeft == 0, \\\"insufficient rewardToken for grant\\\");\\n        emit RewardTokenGranted(recipient, amount);\\n    }\\n\\n    function updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) external onlyComptroller {\\n        _updateRewardTokenBorrowIndex(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN borrow and supply speeds for the specified markets\\n     * @param vTokens The markets whose REWARD TOKEN speed to update\\n     * @param supplySpeeds New supply-side REWARD TOKEN speed for the corresponding market\\n     * @param borrowSpeeds New borrow-side REWARD TOKEN speed for the corresponding market\\n     */\\n    function setRewardTokenSpeeds(\\n        VToken[] memory vTokens,\\n        uint256[] memory supplySpeeds,\\n        uint256[] memory borrowSpeeds\\n    ) external {\\n        _checkAccessAllowed(\\\"setRewardTokenSpeeds(address[],uint256[],uint256[])\\\");\\n        uint256 numTokens = vTokens.length;\\n        require(numTokens == supplySpeeds.length && numTokens == borrowSpeeds.length, \\\"invalid setRewardTokenSpeeds\\\");\\n\\n        for (uint256 i; i < numTokens; ++i) {\\n            _setRewardTokenSpeed(vTokens[i], supplySpeeds[i], borrowSpeeds[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for the specified markets, used when contract is block based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlocks New supply-side REWARD TOKEN last rewarding block for the corresponding market\\n     * @param borrowLastRewardingBlocks New borrow-side REWARD TOKEN last rewarding block for the corresponding market\\n     */\\n    function setLastRewardingBlocks(\\n        VToken[] calldata vTokens,\\n        uint32[] calldata supplyLastRewardingBlocks,\\n        uint32[] calldata borrowLastRewardingBlocks\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlocks(address[],uint32[],uint32[])\\\");\\n        require(!isTimeBased, \\\"Block-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlocks.length && numTokens == borrowLastRewardingBlocks.length,\\n            \\\"RewardsDistributor::setLastRewardingBlocks invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlock(vTokens[i], supplyLastRewardingBlocks[i], borrowLastRewardingBlocks[i]);\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block timestamp for the specified markets, used when contract is time based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlockTimestamps New supply-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     * @param borrowLastRewardingBlockTimestamps New borrow-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     */\\n    function setLastRewardingBlockTimestamps(\\n        VToken[] calldata vTokens,\\n        uint256[] calldata supplyLastRewardingBlockTimestamps,\\n        uint256[] calldata borrowLastRewardingBlockTimestamps\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])\\\");\\n        require(isTimeBased, \\\"Time-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlockTimestamps.length &&\\n                numTokens == borrowLastRewardingBlockTimestamps.length,\\n            \\\"RewardsDistributor::setLastRewardingBlockTimestamps invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlockTimestamp(\\n                vTokens[i],\\n                supplyLastRewardingBlockTimestamps[i],\\n                borrowLastRewardingBlockTimestamps[i]\\n            );\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single contributor\\n     * @param contributor The contributor whose REWARD TOKEN speed to update\\n     * @param rewardTokenSpeed New REWARD TOKEN speed for contributor\\n     */\\n    function setContributorRewardTokenSpeed(address contributor, uint256 rewardTokenSpeed) external onlyOwner {\\n        // note that REWARD TOKEN speed could be set to 0 to halt liquidity rewards for a contributor\\n        updateContributorRewards(contributor);\\n        if (rewardTokenSpeed == 0) {\\n            // release storage\\n            delete lastContributorBlock[contributor];\\n        } else {\\n            lastContributorBlock[contributor] = getBlockNumberOrTimestamp();\\n        }\\n        rewardTokenContributorSpeeds[contributor] = rewardTokenSpeed;\\n\\n        emit ContributorRewardTokenSpeedUpdated(contributor, rewardTokenSpeed);\\n    }\\n\\n    function distributeSupplierRewardToken(address vToken, address supplier) external onlyComptroller {\\n        _distributeSupplierRewardToken(vToken, supplier);\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in all markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     */\\n    function claimRewardToken(address holder) external {\\n        return claimRewardToken(holder, comptroller.getAllMarkets());\\n    }\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Calculate additional accrued REWARD TOKEN for a contributor since last accrual\\n     * @param contributor The address to calculate contributor rewards for\\n     */\\n    function updateContributorRewards(address contributor) public {\\n        uint256 rewardTokenSpeed = rewardTokenContributorSpeeds[contributor];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n        uint256 deltaBlocksOrTimestamp = sub_(blockNumberOrTimestamp, lastContributorBlock[contributor]);\\n        if (deltaBlocksOrTimestamp > 0 && rewardTokenSpeed > 0) {\\n            uint256 newAccrued = mul_(deltaBlocksOrTimestamp, rewardTokenSpeed);\\n            uint256 contributorAccrued = add_(rewardTokenAccrued[contributor], newAccrued);\\n\\n            rewardTokenAccrued[contributor] = contributorAccrued;\\n            lastContributorBlock[contributor] = blockNumberOrTimestamp;\\n\\n            emit ContributorRewardsUpdated(contributor, rewardTokenAccrued[contributor]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in the specified markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     * @param vTokens The list of markets to claim REWARD TOKEN in\\n     */\\n    function claimRewardToken(address holder, VToken[] memory vTokens) public {\\n        uint256 vTokensCount = vTokens.length;\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            VToken vToken = vTokens[i];\\n            require(comptroller.isMarketListed(vToken), \\\"market must be listed\\\");\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n            _distributeBorrowerRewardToken(address(vToken), holder, borrowIndex);\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n            _distributeSupplierRewardToken(address(vToken), holder);\\n        }\\n        rewardTokenAccrued[holder] = _grantRewardToken(holder, rewardTokenAccrued[holder]);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for a single market.\\n     * @param vToken market's whose reward token last rewarding block to be updated\\n     * @param supplyLastRewardingBlock New supply-side REWARD TOKEN last rewarding block for market\\n     * @param borrowLastRewardingBlock New borrow-side REWARD TOKEN last rewarding block for market\\n     */\\n    function _setLastRewardingBlock(\\n        VToken vToken,\\n        uint32 supplyLastRewardingBlock,\\n        uint32 borrowLastRewardingBlock\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockNumber = getBlockNumberOrTimestamp();\\n\\n        require(supplyLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n        require(borrowLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n\\n        uint32 currentSupplyLastRewardingBlock = rewardTokenSupplyState[address(vToken)].lastRewardingBlock;\\n        uint32 currentBorrowLastRewardingBlock = rewardTokenBorrowState[address(vToken)].lastRewardingBlock;\\n\\n        require(\\n            currentSupplyLastRewardingBlock == 0 || currentSupplyLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlock == 0 || currentBorrowLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlock != supplyLastRewardingBlock) {\\n            rewardTokenSupplyState[address(vToken)].lastRewardingBlock = supplyLastRewardingBlock;\\n            emit SupplyLastRewardingBlockUpdated(address(vToken), supplyLastRewardingBlock);\\n        }\\n\\n        if (currentBorrowLastRewardingBlock != borrowLastRewardingBlock) {\\n            rewardTokenBorrowState[address(vToken)].lastRewardingBlock = borrowLastRewardingBlock;\\n            emit BorrowLastRewardingBlockUpdated(address(vToken), borrowLastRewardingBlock);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding timestamp for a single market.\\n     * @param vToken market's whose reward token last rewarding timestamp to be updated\\n     * @param supplyLastRewardingBlockTimestamp New supply-side REWARD TOKEN last rewarding timestamp for market\\n     * @param borrowLastRewardingBlockTimestamp New borrow-side REWARD TOKEN last rewarding timestamp for market\\n     */\\n    function _setLastRewardingBlockTimestamp(\\n        VToken vToken,\\n        uint256 supplyLastRewardingBlockTimestamp,\\n        uint256 borrowLastRewardingBlockTimestamp\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockTimestamp = getBlockNumberOrTimestamp();\\n\\n        require(\\n            supplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n        require(\\n            borrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n\\n        uint256 currentSupplyLastRewardingBlockTimestamp = rewardTokenSupplyStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n        uint256 currentBorrowLastRewardingBlockTimestamp = rewardTokenBorrowStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n\\n        require(\\n            currentSupplyLastRewardingBlockTimestamp == 0 || currentSupplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlockTimestamp == 0 || currentBorrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlockTimestamp != supplyLastRewardingBlockTimestamp) {\\n            rewardTokenSupplyStateTimeBased[address(vToken)].lastRewardingTimestamp = supplyLastRewardingBlockTimestamp;\\n            emit SupplyLastRewardingBlockTimestampUpdated(address(vToken), supplyLastRewardingBlockTimestamp);\\n        }\\n\\n        if (currentBorrowLastRewardingBlockTimestamp != borrowLastRewardingBlockTimestamp) {\\n            rewardTokenBorrowStateTimeBased[address(vToken)].lastRewardingTimestamp = borrowLastRewardingBlockTimestamp;\\n            emit BorrowLastRewardingBlockTimestampUpdated(address(vToken), borrowLastRewardingBlockTimestamp);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single market.\\n     * @param vToken market's whose reward token rate to be updated\\n     * @param supplySpeed New supply-side REWARD TOKEN speed for market\\n     * @param borrowSpeed New borrow-side REWARD TOKEN speed for market\\n     */\\n    function _setRewardTokenSpeed(VToken vToken, uint256 supplySpeed, uint256 borrowSpeed) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        if (rewardTokenSupplySpeeds[address(vToken)] != supplySpeed) {\\n            // Supply speed updated so let's update supply state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n\\n            // Update speed and emit event\\n            rewardTokenSupplySpeeds[address(vToken)] = supplySpeed;\\n            emit RewardTokenSupplySpeedUpdated(vToken, supplySpeed);\\n        }\\n\\n        if (rewardTokenBorrowSpeeds[address(vToken)] != borrowSpeed) {\\n            // Borrow speed updated so let's update borrow state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n\\n            // Update speed and emit event\\n            rewardTokenBorrowSpeeds[address(vToken)] = borrowSpeed;\\n            emit RewardTokenBorrowSpeedUpdated(vToken, borrowSpeed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculate REWARD TOKEN accrued by a supplier and possibly transfer it to them.\\n     * @param vToken The market in which the supplier is interacting\\n     * @param supplier The address of the supplier to distribute REWARD TOKEN to\\n     */\\n    function _distributeSupplierRewardToken(address vToken, address supplier) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n        uint256 supplierIndex = rewardTokenSupplierIndex[vToken][supplier];\\n\\n        // Update supplier's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenSupplierIndex[vToken][supplier] = supplyIndex;\\n\\n        if (supplierIndex == 0 && supplyIndex >= INITIAL_INDEX) {\\n            // Covers the case where users supplied tokens before the market's supply state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when supplier rewards were first\\n            // set for the market.\\n            supplierIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per vToken accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(supplyIndex, supplierIndex) });\\n\\n        uint256 supplierTokens = VToken(vToken).balanceOf(supplier);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerVToken\\n        uint256 supplierDelta = mul_(supplierTokens, deltaIndex);\\n\\n        uint256 supplierAccrued = add_(rewardTokenAccrued[supplier], supplierDelta);\\n        rewardTokenAccrued[supplier] = supplierAccrued;\\n\\n        emit DistributedSupplierRewardToken(VToken(vToken), supplier, supplierDelta, supplierAccrued, supplyIndex);\\n    }\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them.\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function _distributeBorrowerRewardToken(address vToken, address borrower, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n        uint256 borrowerIndex = rewardTokenBorrowerIndex[vToken][borrower];\\n\\n        // Update borrowers's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenBorrowerIndex[vToken][borrower] = borrowIndex;\\n\\n        if (borrowerIndex == 0 && borrowIndex >= INITIAL_INDEX) {\\n            // Covers the case where users borrowed tokens before the market's borrow state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when borrower rewards were first\\n            // set for the market.\\n            borrowerIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per borrowed unit accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(borrowIndex, borrowerIndex) });\\n\\n        uint256 borrowerAmount = div_(VToken(vToken).borrowBalanceStored(borrower), marketBorrowIndex);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerBorrowedUnit\\n        if (borrowerAmount != 0) {\\n            uint256 borrowerDelta = mul_(borrowerAmount, deltaIndex);\\n\\n            uint256 borrowerAccrued = add_(rewardTokenAccrued[borrower], borrowerDelta);\\n            rewardTokenAccrued[borrower] = borrowerAccrued;\\n\\n            emit DistributedBorrowerRewardToken(VToken(vToken), borrower, borrowerDelta, borrowerAccrued, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the user.\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all.\\n     * @param user The address of the user to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     * @return The amount of REWARD TOKEN which was NOT transferred to the user\\n     */\\n    function _grantRewardToken(address user, uint256 amount) internal returns (uint256) {\\n        uint256 rewardTokenRemaining = rewardToken.balanceOf(address(this));\\n        if (amount > 0 && amount <= rewardTokenRemaining) {\\n            rewardToken.safeTransfer(user, amount);\\n            return 0;\\n        }\\n        return amount;\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the supply index\\n     * @param vToken The market whose supply index to update\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenSupplyIndex(address vToken) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplySpeed = rewardTokenSupplySpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? supplyStateTimeBased.lastRewardingTimestamp\\n            : uint256(supplyState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? supplyStateTimeBased.timestamp : uint256(supplyState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && supplySpeed > 0) {\\n            uint256 supplyTokens = VToken(vToken).totalSupply();\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, supplySpeed);\\n            Double memory ratio = supplyTokens > 0\\n                ? fraction(accruedSinceUpdate, supplyTokens)\\n                : Double({ mantissa: 0 });\\n            uint224 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: supplyIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                supplyStateTimeBased.index = index;\\n                supplyStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                supplyState.index = index;\\n                supplyState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            isTimeBased ? supplyStateTimeBased.timestamp = blockNumberOrTimestamp : supplyState.block = uint32(\\n                blockNumberOrTimestamp\\n            );\\n        }\\n\\n        emit RewardTokenSupplyIndexUpdated(vToken);\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the borrow index\\n     * @param vToken The market whose borrow index to update\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowSpeed = rewardTokenBorrowSpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? borrowStateTimeBased.lastRewardingTimestamp\\n            : uint256(borrowState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? borrowStateTimeBased.timestamp : uint256(borrowState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && borrowSpeed > 0) {\\n            uint256 borrowAmount = div_(VToken(vToken).totalBorrows(), marketBorrowIndex);\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, borrowSpeed);\\n            Double memory ratio = borrowAmount > 0\\n                ? fraction(accruedSinceUpdate, borrowAmount)\\n                : Double({ mantissa: 0 });\\n            uint224 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: borrowIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                borrowStateTimeBased.index = index;\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.index = index;\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            if (isTimeBased) {\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        }\\n\\n        emit RewardTokenBorrowIndexUpdated(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is block-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockNumber current block number\\n     */\\n    function _initializeMarketBlockBased(address vToken, uint32 blockNumber) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block numbers\\n         */\\n        supplyState.block = borrowState.block = blockNumber;\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is time-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockTimestamp current block timestamp\\n     */\\n    function _initializeMarketTimestampBased(address vToken, uint256 blockTimestamp) internal {\\n        TimeBasedRewardToken storage supplyState = rewardTokenSupplyStateTimeBased[vToken];\\n        TimeBasedRewardToken storage borrowState = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block timestamp\\n         */\\n        supplyState.timestamp = borrowState.timestamp = blockTimestamp;\\n    }\\n}\\n\",\"keccak256\":\"0x3cc824e59c923cfe25c4f1a875959b7e9410cde8e73cd405de13f301298c697f\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\n\\n/**\\n * @title RewardsDistributorStorage\\n * @author Venus\\n * @dev Storage for RewardsDistributor\\n */\\ncontract RewardsDistributorStorage {\\n    struct RewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block number the index was last updated at\\n        uint32 block;\\n        // The block number at which to stop rewards\\n        uint32 lastRewardingBlock;\\n    }\\n\\n    struct TimeBasedRewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block timestamp the index was last updated at\\n        uint256 timestamp;\\n        // The block timestamp at which to stop rewards\\n        uint256 lastRewardingTimestamp;\\n    }\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => RewardToken) public rewardTokenSupplyState;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each supplier as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenSupplierIndex;\\n\\n    /// @notice The REWARD TOKEN accrued but not yet transferred to each user\\n    mapping(address => uint256) public rewardTokenAccrued;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding borrow market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenBorrowSpeeds;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding supply market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenSupplySpeeds;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => RewardToken) public rewardTokenBorrowState;\\n\\n    /// @notice The portion of REWARD TOKEN that each contributor receives per slot (block or second)\\n    mapping(address => uint256) public rewardTokenContributorSpeeds;\\n\\n    /// @notice Last slot (block or second) at which a contributor's REWARD TOKEN rewards have been allocated\\n    mapping(address => uint256) public lastContributorBlock;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each borrower as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenBorrowerIndex;\\n\\n    Comptroller internal comptroller;\\n\\n    IERC20Upgradeable public rewardToken;\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenSupplyStateTimeBased;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenBorrowStateTimeBased;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[37] private __gap;\\n}\\n\",\"keccak256\":\"0x70e5015a78a2acf95277949c8b4796e10b9ac194130be006d5e5217e158070c0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VToken.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IProtocolShareReserve } from \\\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\\\";\\n\\nimport { VTokenInterface } from \\\"./VTokenInterfaces.sol\\\";\\nimport { ComptrollerInterface, ComptrollerViewInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { TokenErrorReporter } from \\\"./ErrorReporter.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title VToken\\n * @author Venus\\n * @notice Each asset that is supported by a pool is integrated through an instance of the `VToken` contract. As outlined in the protocol overview,\\n * each isolated pool creates its own `vToken` corresponding to an asset. Within a given pool, each included `vToken` is referred to as a market of\\n * the pool. The main actions a user regularly interacts with in a market are:\\n\\n- mint/redeem of vTokens;\\n- transfer of vTokens;\\n- borrow/repay a loan on an underlying asset;\\n- liquidate a borrow or liquidate/heal an account.\\n\\n * A user supplies the underlying asset to a pool by minting `vTokens`, where the corresponding `vToken` amount is determined by the `exchangeRate`.\\n * The `exchangeRate` will change over time, dependent on a number of factors, some of which accrue interest. Additionally, once users have minted\\n * `vToken` in a pool, they can borrow any asset in the isolated pool by using their `vToken` as collateral. In order to borrow an asset or use a `vToken`\\n * as collateral, the user must be entered into each corresponding market (else, the `vToken` will not be considered collateral for a borrow). Note that\\n * a user may borrow up to a portion of their collateral determined by the market\\u2019s collateral factor. However, if their borrowed amount exceeds an amount\\n * calculated using the market\\u2019s corresponding liquidation threshold, the borrow is eligible for liquidation. When a user repays a borrow, they must also\\n * pay off interest accrued on the borrow.\\n * \\n * The Venus protocol includes unique mechanisms for healing an account and liquidating an account. These actions are performed in the `Comptroller`\\n * and consider all borrows and collateral for which a given account is entered within a market. These functions may only be called on an account with a\\n * total collateral amount that is no larger than a universal `minLiquidatableCollateral` value, which is used for all markets within a `Comptroller`.\\n * Both functions settle all of an account\\u2019s borrows, but `healAccount()` may add `badDebt` to a vToken. For more detail, see the description of\\n * `healAccount()` and `liquidateAccount()` in the `Comptroller` summary section below.\\n */\\ncontract VToken is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    VTokenInterface,\\n    ExponentialNoError,\\n    TokenErrorReporter,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    uint256 internal constant DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA = 5e16; // 5%\\n\\n    // Maximum fraction of interest that can be set aside for reserves\\n    uint256 internal constant MAX_RESERVE_FACTOR_MANTISSA = 1e18;\\n\\n    // Maximum borrow rate that can ever be applied per slot(block or second)\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 internal immutable MAX_BORROW_RATE_MANTISSA;\\n\\n    /**\\n     * Reentrancy Guard **\\n     */\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     */\\n    modifier nonReentrant() {\\n        require(_notEntered, \\\"re-entered\\\");\\n        _notEntered = false;\\n        _;\\n        _notEntered = true; // get a gas-refund post-Istanbul\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @param maxBorrowRateMantissa_ The maximum value of borrowing rate mantissa\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(\\n        bool timeBased_,\\n        uint256 blocksPerYear_,\\n        uint256 maxBorrowRateMantissa_\\n    ) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        require(maxBorrowRateMantissa_ <= 1e18, \\\"Max borrow rate must be <= 1e18\\\");\\n\\n        MAX_BORROW_RATE_MANTISSA = maxBorrowRateMantissa_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice Construct a new money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     * @custom:error ZeroAddressNotAllowed is thrown when admin address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     */\\n    function initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) external initializer {\\n        ensureNonzeroAddress(admin_);\\n\\n        // Initialize the market\\n        _initialize(\\n            underlying_,\\n            comptroller_,\\n            interestRateModel_,\\n            initialExchangeRateMantissa_,\\n            name_,\\n            symbol_,\\n            decimals_,\\n            admin_,\\n            accessControlManager_,\\n            riskManagement,\\n            reserveFactorMantissa_\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `msg.sender` to `dst`\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transfer(address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `src` to `dst`\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transferFrom(address src, address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, src, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Approve `spender` to transfer up to `amount` from `src`\\n     * @dev This will overwrite the approval amount for `spender`\\n     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\\n     * @param spender The address of the account which may transfer tokens\\n     * @param amount The number of tokens that are approved (uint256.max means infinite)\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function approve(address spender, uint256 amount) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        transferAllowances[src][spender] = amount;\\n        emit Approval(src, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Increase approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param addedValue The number of additional tokens spender can transfer\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 newAllowance = transferAllowances[src][spender];\\n        newAllowance += addedValue;\\n        transferAllowances[src][spender] = newAllowance;\\n\\n        emit Approval(src, spender, newAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Decreases approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param subtractedValue The number of tokens to remove from total approval\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 currentAllowance = transferAllowances[src][spender];\\n        require(currentAllowance >= subtractedValue, \\\"decreased allowance below zero\\\");\\n        unchecked {\\n            currentAllowance -= subtractedValue;\\n        }\\n\\n        transferAllowances[src][spender] = currentAllowance;\\n\\n        emit Approval(src, spender, currentAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Get the underlying balance of the `owner`\\n     * @dev This also accrues interest in a transaction\\n     * @param owner The address of the account to query\\n     * @return amount The amount of underlying owned by `owner`\\n     */\\n    function balanceOfUnderlying(address owner) external override returns (uint256) {\\n        Exp memory exchangeRate = Exp({ mantissa: exchangeRateCurrent() });\\n        return mul_ScalarTruncate(exchangeRate, accountTokens[owner]);\\n    }\\n\\n    /**\\n     * @notice Returns the current total borrows plus accrued interest\\n     * @return totalBorrows The total borrows with interest\\n     */\\n    function totalBorrowsCurrent() external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return totalBorrows;\\n    }\\n\\n    /**\\n     * @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\\n     * @param account The address whose balance should be calculated after updating borrowIndex\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceCurrent(address account) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Sender supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function mint(uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, msg.sender, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender calls on-behalf of minter. minter supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param minter User whom the supply will be attributed to\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when minter address is zero\\n     */\\n    function mintBehalf(address minter, uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(minter);\\n\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, minter, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for the underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function redeem(uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer The user on behalf of whom to redeem\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for a specified amount of underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     */\\n    function redeemUnderlying(uint256 redeemAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems underlying assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer, on behalf of whom to redeem\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemUnderlyingBehalf(\\n        address redeemer,\\n        uint256 redeemAmount\\n    ) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets from the protocol to their own address\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function borrow(uint256 borrowAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _borrowFresh(msg.sender, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the borrower using `comptroller.updateDelegate`\\n     * @param borrower The borrower, on behalf of whom to borrow\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error DelegateNotApproved is thrown if caller is not approved delegate\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function borrowBehalf(address borrower, uint256 borrowAmount) external override returns (uint256) {\\n        _ensureSenderIsDelegateOf(borrower);\\n        accrueInterest();\\n\\n        _borrowFresh(borrower, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays their own borrow\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrow(uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, msg.sender, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays a borrow belonging to borrower\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, borrower, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Not restricted\\n     */\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external override returns (uint256) {\\n        _liquidateBorrow(msg.sender, borrower, repayAmount, vTokenCollateral, false);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice sets protocol share accumulated from liquidations\\n     * @dev must be equal or less than liquidation incentive - 1\\n     * @param newProtocolSeizeShareMantissa_ new protocol share mantissa\\n     * @custom:event Emits NewProtocolSeizeShare event on success\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error ProtocolSeizeShareTooBig is thrown when the new seize share is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setProtocolSeizeShare(uint256 newProtocolSeizeShareMantissa_) external {\\n        _checkAccessAllowed(\\\"setProtocolSeizeShare(uint256)\\\");\\n        uint256 liquidationIncentive = ComptrollerViewInterface(address(comptroller)).liquidationIncentiveMantissa();\\n        if (newProtocolSeizeShareMantissa_ + MANTISSA_ONE > liquidationIncentive) {\\n            revert ProtocolSeizeShareTooBig();\\n        }\\n\\n        uint256 oldProtocolSeizeShareMantissa = protocolSeizeShareMantissa;\\n        protocolSeizeShareMantissa = newProtocolSeizeShareMantissa_;\\n        emit NewProtocolSeizeShare(oldProtocolSeizeShareMantissa, newProtocolSeizeShareMantissa_);\\n    }\\n\\n    /**\\n     * @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\\n     * @dev Admin function to accrue interest and set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     * @custom:event Emits NewReserveFactor event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error SetReserveFactorBoundsCheck is thrown when the new reserve factor is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external override nonReentrant {\\n        _checkAccessAllowed(\\\"setReserveFactor(uint256)\\\");\\n\\n        accrueInterest();\\n        _setReserveFactorFresh(newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Accrues interest and reduces reserves by transferring to the protocol reserve contract\\n     * @dev Gracefully return if reserves already reduced in accrueInterest\\n     * @param reduceAmount Amount of reduction to reserves\\n     * @custom:event Emits ReservesReduced event; may emit AccrueInterest\\n     * @custom:error ReduceReservesCashNotAvailable is thrown when the vToken does not have sufficient cash\\n     * @custom:error ReduceReservesCashValidation is thrown when trying to withdraw more cash than the reserves have\\n     * @custom:access Not restricted\\n     */\\n    function reduceReserves(uint256 reduceAmount) external override nonReentrant {\\n        accrueInterest();\\n        if (reduceReservesBlockNumber == getBlockNumberOrTimestamp()) return;\\n        _reduceReservesFresh(reduceAmount);\\n    }\\n\\n    /**\\n     * @notice The sender adds to reserves.\\n     * @param addAmount The amount of underlying token to add as reserves\\n     * @custom:event Emits ReservesAdded event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function addReserves(uint256 addAmount) external override nonReentrant {\\n        accrueInterest();\\n        _addReservesFresh(addAmount);\\n    }\\n\\n    /**\\n     * @notice accrues interest and updates the interest rate model using _setInterestRateModelFresh\\n     * @dev Admin function to accrue interest and update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     * @custom:event Emits NewMarketInterestRateModel event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external override {\\n        _checkAccessAllowed(\\\"setInterestRateModel(address)\\\");\\n\\n        accrueInterest();\\n        _setInterestRateModelFresh(newInterestRateModel);\\n    }\\n\\n    /**\\n     * @notice Repays a certain amount of debt, treats the rest of the borrow as bad debt, essentially\\n     *   \\\"forgiving\\\" the borrower. Healing is a situation that should rarely happen. However, some pools\\n     *   may list risky assets or be configured improperly \\u2013 we want to still handle such cases gracefully.\\n     *   We assume that Comptroller does the seizing, so this function is only available to Comptroller.\\n     * @dev This function does not call any Comptroller hooks (like \\\"healAllowed\\\"), because we assume\\n     *   the Comptroller does all the necessary checks before calling this function.\\n     * @param payer account who repays the debt\\n     * @param borrower account to heal\\n     * @param repayAmount amount to repay\\n     * @custom:event Emits RepayBorrow, BadDebtIncreased events; may emit AccrueInterest\\n     * @custom:error HealBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:access Only Comptroller\\n     */\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external override nonReentrant {\\n        if (repayAmount != 0) {\\n            comptroller.preRepayHook(address(this), borrower);\\n        }\\n\\n        if (msg.sender != address(comptroller)) {\\n            revert HealBorrowUnauthorized();\\n        }\\n\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 totalBorrowsNew = totalBorrows;\\n\\n        uint256 actualRepayAmount;\\n        if (repayAmount != 0) {\\n            // _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n            // We violate checks-effects-interactions here to account for tokens that take transfer fees\\n            actualRepayAmount = _doTransferIn(payer, repayAmount);\\n            totalBorrowsNew = totalBorrowsNew - actualRepayAmount;\\n            emit RepayBorrow(\\n                payer,\\n                borrower,\\n                actualRepayAmount,\\n                accountBorrowsPrev - actualRepayAmount,\\n                totalBorrowsNew\\n            );\\n        }\\n\\n        // The transaction will fail if trying to repay too much\\n        uint256 badDebtDelta = accountBorrowsPrev - actualRepayAmount;\\n        if (badDebtDelta != 0) {\\n            uint256 badDebtOld = badDebt;\\n            uint256 badDebtNew = badDebtOld + badDebtDelta;\\n            totalBorrowsNew = totalBorrowsNew - badDebtDelta;\\n            badDebt = badDebtNew;\\n\\n            // We treat healing as \\\"repayment\\\", where vToken is the payer\\n            emit RepayBorrow(address(this), borrower, badDebtDelta, 0, totalBorrowsNew);\\n            emit BadDebtIncreased(borrower, badDebtDelta, badDebtOld, badDebtNew);\\n        }\\n\\n        accountBorrows[borrower].principal = 0;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        emit HealBorrow(payer, borrower, repayAmount);\\n    }\\n\\n    /**\\n     * @notice The extended version of liquidations, callable only by Comptroller. May skip\\n     *  the close factor check. The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error ForceLiquidateBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Only Comptroller\\n     */\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        if (msg.sender != address(comptroller)) {\\n            revert ForceLiquidateBorrowUnauthorized();\\n        }\\n        _liquidateBorrow(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Will fail unless called by another vToken during the process of liquidation.\\n     *  It's absolutely critical to use msg.sender as the borrowed vToken and not a parameter.\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     * @custom:event Emits Transfer, ReservesAdded events\\n     * @custom:error LiquidateSeizeLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:access Not restricted\\n     */\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external override nonReentrant {\\n        _seize(msg.sender, liquidator, borrower, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Updates bad debt\\n     * @dev Called only when bad debt is recovered from auction\\n     * @param recoveredAmount_ The amount of bad debt recovered\\n     * @custom:event Emits BadDebtRecovered event\\n     * @custom:access Only Shortfall contract\\n     */\\n    function badDebtRecovered(uint256 recoveredAmount_) external {\\n        require(msg.sender == shortfall, \\\"only shortfall contract can update bad debt\\\");\\n        require(recoveredAmount_ <= badDebt, \\\"more than bad debt recovered from auction\\\");\\n\\n        uint256 badDebtOld = badDebt;\\n        uint256 badDebtNew = badDebtOld - recoveredAmount_;\\n        badDebt = badDebtNew;\\n\\n        emit BadDebtRecovered(badDebtOld, badDebtNew);\\n    }\\n\\n    /**\\n     * @notice Sets protocol share reserve contract address\\n     * @param protocolShareReserve_ The address of the protocol share reserve contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setProtocolShareReserve(address payable protocolShareReserve_) external onlyOwner {\\n        _setProtocolShareReserve(protocolShareReserve_);\\n    }\\n\\n    /**\\n     * @notice Sets shortfall contract address\\n     * @param shortfall_ The address of the shortfall contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setShortfallContract(address shortfall_) external onlyOwner {\\n        _setShortfallContract(shortfall_);\\n    }\\n\\n    /**\\n     * @notice A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)\\n     * @param token The address of the ERC-20 token to sweep\\n     * @custom:access Only Governance\\n     */\\n    function sweepToken(IERC20Upgradeable token) external override {\\n        require(msg.sender == owner(), \\\"VToken::sweepToken: only admin can sweep tokens\\\");\\n        require(address(token) != underlying, \\\"VToken::sweepToken: can not sweep underlying token\\\");\\n        uint256 balance = token.balanceOf(address(this));\\n        token.safeTransfer(owner(), balance);\\n\\n        emit SweepToken(address(token));\\n    }\\n\\n    /**\\n     * @notice A public function to set new threshold of slot(block or second) difference after which funds will be sent to the protocol share reserve\\n     * @param _newReduceReservesBlockOrTimestampDelta slot(block or second) difference value\\n     * @custom:access Only Governance\\n     */\\n    function setReduceReservesBlockDelta(uint256 _newReduceReservesBlockOrTimestampDelta) external {\\n        _checkAccessAllowed(\\\"setReduceReservesBlockDelta(uint256)\\\");\\n        require(_newReduceReservesBlockOrTimestampDelta > 0, \\\"Invalid Input\\\");\\n        emit NewReduceReservesBlockDelta(reduceReservesBlockDelta, _newReduceReservesBlockOrTimestampDelta);\\n        reduceReservesBlockDelta = _newReduceReservesBlockOrTimestampDelta;\\n    }\\n\\n    /**\\n     * @notice Get the current allowance from `owner` for `spender`\\n     * @param owner The address of the account which owns the tokens to be spent\\n     * @param spender The address of the account which may transfer tokens\\n     * @return amount The number of tokens allowed to be spent (type(uint256).max means infinite)\\n     */\\n    function allowance(address owner, address spender) external view override returns (uint256) {\\n        return transferAllowances[owner][spender];\\n    }\\n\\n    /**\\n     * @notice Get the token balance of the `owner`\\n     * @param owner The address of the account to query\\n     * @return amount The number of tokens owned by `owner`\\n     */\\n    function balanceOf(address owner) external view override returns (uint256) {\\n        return accountTokens[owner];\\n    }\\n\\n    /**\\n     * @notice Get a snapshot of the account's balances, and the cached exchange rate\\n     * @dev This is used by comptroller to more efficiently perform liquidity checks.\\n     * @param account Address of the account to snapshot\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return vTokenBalance User's balance of vTokens\\n     * @return borrowBalance Amount owed in terms of underlying\\n     * @return exchangeRate Stored exchange rate\\n     */\\n    function getAccountSnapshot(\\n        address account\\n    )\\n        external\\n        view\\n        override\\n        returns (uint256 error, uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRate)\\n    {\\n        return (NO_ERROR, accountTokens[account], _borrowBalanceStored(account), _exchangeRateStored());\\n    }\\n\\n    /**\\n     * @notice Get cash balance of this vToken in the underlying asset\\n     * @return cash The quantity of underlying asset owned by this contract\\n     */\\n    function getCash() external view override returns (uint256) {\\n        return _getCashPrior();\\n    }\\n\\n    /**\\n     * @notice Returns the current per slot(block or second) borrow interest rate for this vToken\\n     * @return rate The borrow interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function borrowRatePerBlock() external view override returns (uint256) {\\n        return interestRateModel.getBorrowRate(_getCashPrior(), totalBorrows, totalReserves, badDebt);\\n    }\\n\\n    /**\\n     * @notice Returns the current per-slot(block or second) supply interest rate for this v\\n     * @return rate The supply interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function supplyRatePerBlock() external view override returns (uint256) {\\n        return\\n            interestRateModel.getSupplyRate(\\n                _getCashPrior(),\\n                totalBorrows,\\n                totalReserves,\\n                reserveFactorMantissa,\\n                badDebt\\n            );\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceStored(address account) external view override returns (uint256) {\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateStored() external view override returns (uint256) {\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Accrue interest then return the up-to-date exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateCurrent() public override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Applies accrued interest to total borrows and reserves\\n     * @dev This calculates interest accrued from the last checkpointed slot(block or second)\\n     *  up to the current slot(block or second) and writes new checkpoint to storage and\\n     *  reduce spread reserves to protocol share reserve\\n     *  if currentSlot - reduceReservesBlockNumber >= slotDelta\\n     * @return Always NO_ERROR\\n     * @custom:event Emits AccrueInterest event on success\\n     * @custom:access Not restricted\\n     */\\n    function accrueInterest() public virtual override returns (uint256) {\\n        /* Remember the initial block number or timestamp */\\n        uint256 currentSlotNumber = getBlockNumberOrTimestamp();\\n        uint256 accrualSlotNumberPrior = accrualBlockNumber;\\n\\n        /* Short-circuit accumulating 0 interest */\\n        if (accrualSlotNumberPrior == currentSlotNumber) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Read the previous values out of storage */\\n        uint256 cashPrior = _getCashPrior();\\n        uint256 borrowsPrior = totalBorrows;\\n        uint256 reservesPrior = totalReserves;\\n        uint256 borrowIndexPrior = borrowIndex;\\n\\n        /* Calculate the current borrow interest rate */\\n        uint256 borrowRateMantissa = interestRateModel.getBorrowRate(cashPrior, borrowsPrior, reservesPrior, badDebt);\\n        require(borrowRateMantissa <= MAX_BORROW_RATE_MANTISSA, \\\"borrow rate is absurdly high\\\");\\n\\n        /* Calculate the number of slots elapsed since the last accrual */\\n        uint256 slotDelta = currentSlotNumber - accrualSlotNumberPrior;\\n\\n        /*\\n         * Calculate the interest accumulated into borrows and reserves and the new index:\\n         *  simpleInterestFactor = borrowRate * slotDelta\\n         *  interestAccumulated = simpleInterestFactor * totalBorrows\\n         *  totalBorrowsNew = interestAccumulated + totalBorrows\\n         *  totalReservesNew = interestAccumulated * reserveFactor + totalReserves\\n         *  borrowIndexNew = simpleInterestFactor * borrowIndex + borrowIndex\\n         */\\n\\n        Exp memory simpleInterestFactor = mul_(Exp({ mantissa: borrowRateMantissa }), slotDelta);\\n        uint256 interestAccumulated = mul_ScalarTruncate(simpleInterestFactor, borrowsPrior);\\n        uint256 totalBorrowsNew = interestAccumulated + borrowsPrior;\\n        uint256 totalReservesNew = mul_ScalarTruncateAddUInt(\\n            Exp({ mantissa: reserveFactorMantissa }),\\n            interestAccumulated,\\n            reservesPrior\\n        );\\n        uint256 borrowIndexNew = mul_ScalarTruncateAddUInt(simpleInterestFactor, borrowIndexPrior, borrowIndexPrior);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the previously calculated values into storage */\\n        accrualBlockNumber = currentSlotNumber;\\n        borrowIndex = borrowIndexNew;\\n        totalBorrows = totalBorrowsNew;\\n        totalReserves = totalReservesNew;\\n\\n        if (currentSlotNumber - reduceReservesBlockNumber >= reduceReservesBlockDelta) {\\n            reduceReservesBlockNumber = currentSlotNumber;\\n            if (cashPrior < totalReservesNew) {\\n                _reduceReservesFresh(cashPrior);\\n            } else {\\n                _reduceReservesFresh(totalReservesNew);\\n            }\\n        }\\n\\n        /* We emit an AccrueInterest event */\\n        emit AccrueInterest(cashPrior, interestAccumulated, borrowIndexNew, totalBorrowsNew);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice User supplies assets into the market and receives vTokens in exchange\\n     * @dev Assumes interest has already been accrued up to the current block or timestamp\\n     * @param payer The address of the account which is sending the assets for supply\\n     * @param minter The address of the account which is supplying the assets\\n     * @param mintAmount The amount of the underlying asset to supply\\n     */\\n    function _mintFresh(address payer, address minter, uint256 mintAmount) internal {\\n        /* Fail if mint not allowed */\\n        comptroller.preMintHook(address(this), minter, mintAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert MintFreshnessCheck();\\n        }\\n\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         *  We call `_doTransferIn` for the minter and the mintAmount.\\n         *  `_doTransferIn` reverts if anything goes wrong, since we can't be sure if\\n         *  side-effects occurred. The function returns the amount actually transferred,\\n         *  in case of a fee. On success, the vToken holds an additional `actualMintAmount`\\n         *  of cash.\\n         */\\n        uint256 actualMintAmount = _doTransferIn(payer, mintAmount);\\n\\n        /*\\n         * We get the current exchange rate and calculate the number of vTokens to be minted:\\n         *  mintTokens = actualMintAmount / exchangeRate\\n         */\\n\\n        uint256 mintTokens = div_(actualMintAmount, exchangeRate);\\n\\n        /*\\n         * We calculate the new total supply of vTokens and minter token balance, checking for overflow:\\n         *  totalSupplyNew = totalSupply + mintTokens\\n         *  accountTokensNew = accountTokens[minter] + mintTokens\\n         * And write them into storage\\n         */\\n        totalSupply = totalSupply + mintTokens;\\n        uint256 balanceAfter = accountTokens[minter] + mintTokens;\\n        accountTokens[minter] = balanceAfter;\\n\\n        /* We emit a Mint event, and a Transfer event */\\n        emit Mint(minter, actualMintAmount, mintTokens, balanceAfter);\\n        emit Transfer(address(0), minter, mintTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.mintVerify(address(this), minter, actualMintAmount, mintTokens);\\n    }\\n\\n    /**\\n     * @notice Redeemer redeems vTokens in exchange for the underlying assets, transferred to the receiver. Redeemer and receiver can be the same\\n     *   address, or different addresses if the receiver was previously approved by the redeemer as a valid delegate (see Comptroller.updateDelegate)\\n     * @dev Assumes interest has already been accrued up to the current slot(block or second)\\n     * @param redeemer The address of the account which is redeeming the tokens\\n     * @param receiver The receiver of the underlying tokens\\n     * @param redeemTokensIn The number of vTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     * @param redeemAmountIn The number of underlying tokens to receive from redeeming vTokens (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     */\\n    function _redeemFresh(address redeemer, address receiver, uint256 redeemTokensIn, uint256 redeemAmountIn) internal {\\n        require(redeemTokensIn == 0 || redeemAmountIn == 0, \\\"one of redeemTokensIn or redeemAmountIn must be zero\\\");\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RedeemFreshnessCheck();\\n        }\\n\\n        /* exchangeRate = invoke Exchange Rate Stored() */\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        uint256 redeemTokens;\\n        uint256 redeemAmount;\\n\\n        /* If redeemTokensIn > 0: */\\n        if (redeemTokensIn > 0) {\\n            /*\\n             * We calculate the exchange rate and the amount of underlying to be redeemed:\\n             *  redeemTokens = redeemTokensIn\\n             */\\n            redeemTokens = redeemTokensIn;\\n        } else {\\n            /*\\n             * We get the current exchange rate and calculate the amount to be redeemed:\\n             *  redeemTokens = redeemAmountIn / exchangeRate\\n             */\\n            redeemTokens = div_(redeemAmountIn, exchangeRate);\\n\\n            uint256 _redeemAmount = mul_(redeemTokens, exchangeRate);\\n            if (_redeemAmount != 0 && _redeemAmount != redeemAmountIn) redeemTokens++; // round up\\n        }\\n\\n        // redeemAmount = exchangeRate * redeemTokens\\n        redeemAmount = mul_ScalarTruncate(exchangeRate, redeemTokens);\\n\\n        // Revert if amount is zero\\n        if (redeemAmount == 0) {\\n            revert(\\\"redeemAmount is zero\\\");\\n        }\\n\\n        /* Fail if redeem not allowed */\\n        comptroller.preRedeemHook(address(this), redeemer, redeemTokens);\\n\\n        /* Fail gracefully if protocol has insufficient cash */\\n        if (_getCashPrior() - totalReserves < redeemAmount) {\\n            revert RedeemTransferOutNotPossible();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing reduced supply before external transfer.\\n         */\\n        totalSupply = totalSupply - redeemTokens;\\n        uint256 balanceAfter = accountTokens[redeemer] - redeemTokens;\\n        accountTokens[redeemer] = balanceAfter;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the redeemAmount.\\n         *  On success, the vToken has redeemAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, redeemAmount);\\n\\n        /* We emit a Transfer event, and a Redeem event */\\n        emit Transfer(redeemer, address(this), redeemTokens);\\n        emit Redeem(redeemer, redeemAmount, redeemTokens, balanceAfter);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.redeemVerify(address(this), redeemer, redeemAmount, redeemTokens);\\n    }\\n\\n    /**\\n     * @notice Users or their delegates borrow assets from the protocol\\n     * @param borrower User who borrows the assets\\n     * @param receiver The receiver of the tokens, if called by a delegate\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     */\\n    function _borrowFresh(address borrower, address receiver, uint256 borrowAmount) internal {\\n        /* Fail if borrow not allowed */\\n        comptroller.preBorrowHook(address(this), borrower, borrowAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert BorrowFreshnessCheck();\\n        }\\n\\n        /* Fail gracefully if protocol has insufficient underlying cash */\\n        if (_getCashPrior() - totalReserves < borrowAmount) {\\n            revert BorrowCashNotAvailable();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on overflow:\\n         *  accountBorrowNew = accountBorrow + borrowAmount\\n         *  totalBorrowsNew = totalBorrows + borrowAmount\\n         */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 accountBorrowsNew = accountBorrowsPrev + borrowAmount;\\n        uint256 totalBorrowsNew = totalBorrows + borrowAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing increased borrow before external transfer.\\n        `*/\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the borrowAmount.\\n         *  On success, the vToken borrowAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, borrowAmount);\\n\\n        /* We emit a Borrow event */\\n        emit Borrow(borrower, borrowAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.borrowVerify(address(this), borrower, borrowAmount);\\n    }\\n\\n    /**\\n     * @notice Borrows are repaid by another user (possibly the borrower).\\n     * @param payer the account paying off the borrow\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount the amount of underlying tokens being returned, or type(uint256).max for the full outstanding amount\\n     * @return (uint) the actual repayment amount.\\n     */\\n    function _repayBorrowFresh(address payer, address borrower, uint256 repayAmount) internal returns (uint256) {\\n        /* Fail if repayBorrow not allowed */\\n        comptroller.preRepayHook(address(this), borrower);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RepayBorrowFreshnessCheck();\\n        }\\n\\n        /* We fetch the amount the borrower owes, with accumulated interest */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n\\n        uint256 repayAmountFinal = repayAmount >= accountBorrowsPrev ? accountBorrowsPrev : repayAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We call _doTransferIn for the payer and the repayAmount\\n         *  On success, the vToken holds an additional repayAmount of cash.\\n         *  _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         *   it returns the amount actually transferred, in case of a fee.\\n         */\\n        uint256 actualRepayAmount = _doTransferIn(payer, repayAmountFinal);\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on underflow:\\n         *  accountBorrowsNew = accountBorrows - actualRepayAmount\\n         *  totalBorrowsNew = totalBorrows - actualRepayAmount\\n         */\\n        uint256 accountBorrowsNew = accountBorrowsPrev - actualRepayAmount;\\n        uint256 totalBorrowsNew = totalBorrows - actualRepayAmount;\\n\\n        /* We write the previously calculated values into storage */\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /* We emit a RepayBorrow event */\\n        emit RepayBorrow(payer, borrower, actualRepayAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.repayBorrowVerify(address(this), payer, borrower, actualRepayAmount, borrowIndex);\\n\\n        return actualRepayAmount;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal nonReentrant {\\n        accrueInterest();\\n\\n        uint256 error = vTokenCollateral.accrueInterest();\\n        if (error != NO_ERROR) {\\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted liquidation failed\\n            revert LiquidateAccrueCollateralInterestFailed(error);\\n        }\\n\\n        _liquidateBorrowFresh(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice The liquidator liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrowFresh(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal {\\n        /* Fail if liquidate not allowed */\\n        comptroller.preLiquidateHook(\\n            address(this),\\n            address(vTokenCollateral),\\n            borrower,\\n            repayAmount,\\n            skipLiquidityCheck\\n        );\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert LiquidateFreshnessCheck();\\n        }\\n\\n        /* Verify vTokenCollateral market's slot(block or second) number equals current slot(block or second) number */\\n        if (vTokenCollateral.accrualBlockNumber() != getBlockNumberOrTimestamp()) {\\n            revert LiquidateCollateralFreshnessCheck();\\n        }\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateLiquidatorIsBorrower();\\n        }\\n\\n        /* Fail if repayAmount = 0 */\\n        if (repayAmount == 0) {\\n            revert LiquidateCloseAmountIsZero();\\n        }\\n\\n        /* Fail if repayAmount = type(uint256).max */\\n        if (repayAmount == type(uint256).max) {\\n            revert LiquidateCloseAmountIsUintMax();\\n        }\\n\\n        /* Fail if repayBorrow fails */\\n        uint256 actualRepayAmount = _repayBorrowFresh(liquidator, borrower, repayAmount);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We calculate the number of collateral tokens that will be seized */\\n        (uint256 amountSeizeError, uint256 seizeTokens) = comptroller.liquidateCalculateSeizeTokens(\\n            address(this),\\n            address(vTokenCollateral),\\n            actualRepayAmount\\n        );\\n        require(amountSeizeError == NO_ERROR, \\\"LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED\\\");\\n\\n        /* Revert if borrower collateral token balance < seizeTokens */\\n        require(vTokenCollateral.balanceOf(borrower) >= seizeTokens, \\\"LIQUIDATE_SEIZE_TOO_MUCH\\\");\\n\\n        // If this is also the collateral, call _seize internally to avoid re-entrancy, otherwise make an external call\\n        if (address(vTokenCollateral) == address(this)) {\\n            _seize(address(this), liquidator, borrower, seizeTokens);\\n        } else {\\n            vTokenCollateral.seize(liquidator, borrower, seizeTokens);\\n        }\\n\\n        /* We emit a LiquidateBorrow event */\\n        emit LiquidateBorrow(liquidator, borrower, actualRepayAmount, address(vTokenCollateral), seizeTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.liquidateBorrowVerify(\\n            address(this),\\n            address(vTokenCollateral),\\n            liquidator,\\n            borrower,\\n            actualRepayAmount,\\n            seizeTokens\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Called only during an in-kind liquidation, or by liquidateBorrow during the liquidation of another VToken.\\n     *  It's absolutely critical to use msg.sender as the seizer vToken and not a parameter.\\n     * @param seizerContract The contract seizing the collateral (either borrowed vToken or Comptroller)\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     */\\n    function _seize(address seizerContract, address liquidator, address borrower, uint256 seizeTokens) internal {\\n        /* Fail if seize not allowed */\\n        comptroller.preSeizeHook(address(this), seizerContract, liquidator, borrower);\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateSeizeLiquidatorIsBorrower();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and liquidator token balances, failing on underflow/overflow:\\n         *  borrowerTokensNew = accountTokens[borrower] - seizeTokens\\n         *  liquidatorTokensNew = accountTokens[liquidator] + seizeTokens\\n         */\\n        uint256 liquidationIncentiveMantissa = ComptrollerViewInterface(address(comptroller))\\n            .liquidationIncentiveMantissa();\\n        uint256 numerator = mul_(seizeTokens, Exp({ mantissa: protocolSeizeShareMantissa }));\\n        uint256 protocolSeizeTokens = div_(numerator, Exp({ mantissa: liquidationIncentiveMantissa }));\\n        uint256 liquidatorSeizeTokens = seizeTokens - protocolSeizeTokens;\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n        uint256 protocolSeizeAmount = mul_ScalarTruncate(exchangeRate, protocolSeizeTokens);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the calculated values into storage */\\n        totalSupply = totalSupply - protocolSeizeTokens;\\n        accountTokens[borrower] = accountTokens[borrower] - seizeTokens;\\n        accountTokens[liquidator] = accountTokens[liquidator] + liquidatorSeizeTokens;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, protocolSeizeAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.LIQUIDATION\\n        );\\n\\n        /* Emit a Transfer event */\\n        emit Transfer(borrower, liquidator, liquidatorSeizeTokens);\\n        emit ProtocolSeize(borrower, protocolShareReserve, protocolSeizeAmount);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.seizeVerify(address(this), seizerContract, liquidator, borrower, seizeTokens);\\n    }\\n\\n    function _setComptroller(ComptrollerInterface newComptroller) internal {\\n        ComptrollerInterface oldComptroller = comptroller;\\n        // Ensure invoke comptroller.isComptroller() returns true\\n        require(newComptroller.isComptroller(), \\\"marker method returned false\\\");\\n\\n        // Set market's comptroller to newComptroller\\n        comptroller = newComptroller;\\n\\n        // Emit NewComptroller(oldComptroller, newComptroller)\\n        emit NewComptroller(oldComptroller, newComptroller);\\n    }\\n\\n    /**\\n     * @notice Sets a new reserve factor for the protocol (*requires fresh interest accrual)\\n     * @dev Admin function to set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     */\\n    function _setReserveFactorFresh(uint256 newReserveFactorMantissa) internal {\\n        // Verify market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetReserveFactorFreshCheck();\\n        }\\n\\n        // Check newReserveFactor \\u2264 maxReserveFactor\\n        if (newReserveFactorMantissa > MAX_RESERVE_FACTOR_MANTISSA) {\\n            revert SetReserveFactorBoundsCheck();\\n        }\\n\\n        uint256 oldReserveFactorMantissa = reserveFactorMantissa;\\n        reserveFactorMantissa = newReserveFactorMantissa;\\n\\n        emit NewReserveFactor(oldReserveFactorMantissa, newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Add reserves by transferring from caller\\n     * @dev Requires fresh interest accrual\\n     * @param addAmount Amount of addition to reserves\\n     * @return actualAddAmount The actual amount added, excluding the potential token fees\\n     */\\n    function _addReservesFresh(uint256 addAmount) internal returns (uint256) {\\n        // totalReserves + actualAddAmount\\n        uint256 totalReservesNew;\\n        uint256 actualAddAmount;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert AddReservesFactorFreshCheck(actualAddAmount);\\n        }\\n\\n        actualAddAmount = _doTransferIn(msg.sender, addAmount);\\n        totalReservesNew = totalReserves + actualAddAmount;\\n        totalReserves = totalReservesNew;\\n        emit ReservesAdded(msg.sender, actualAddAmount, totalReservesNew);\\n\\n        return actualAddAmount;\\n    }\\n\\n    /**\\n     * @notice Reduces reserves by transferring to the protocol reserve contract\\n     * @dev Requires fresh interest accrual\\n     * @param reduceAmount Amount of reduction to reserves\\n     */\\n    function _reduceReservesFresh(uint256 reduceAmount) internal {\\n        if (reduceAmount == 0) {\\n            return;\\n        }\\n        // totalReserves - reduceAmount\\n        uint256 totalReservesNew;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert ReduceReservesFreshCheck();\\n        }\\n\\n        // Fail gracefully if protocol has insufficient underlying cash\\n        if (_getCashPrior() < reduceAmount) {\\n            revert ReduceReservesCashNotAvailable();\\n        }\\n\\n        // Check reduceAmount \\u2264 reserves[n] (totalReserves)\\n        if (reduceAmount > totalReserves) {\\n            revert ReduceReservesCashValidation();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        totalReservesNew = totalReserves - reduceAmount;\\n\\n        // Store reserves[n+1] = reserves[n] - reduceAmount\\n        totalReserves = totalReservesNew;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, reduceAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.SPREAD\\n        );\\n\\n        emit SpreadReservesReduced(protocolShareReserve, reduceAmount, totalReservesNew);\\n    }\\n\\n    /**\\n     * @notice updates the interest rate model (*requires fresh interest accrual)\\n     * @dev Admin function to update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     */\\n    function _setInterestRateModelFresh(InterestRateModel newInterestRateModel) internal {\\n        // Used to store old model for use in the event that is emitted on success\\n        InterestRateModel oldInterestRateModel;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetInterestRateModelFreshCheck();\\n        }\\n\\n        // Track the market's current interest rate model\\n        oldInterestRateModel = interestRateModel;\\n\\n        // Ensure invoke newInterestRateModel.isInterestRateModel() returns true\\n        require(newInterestRateModel.isInterestRateModel(), \\\"marker method returned false\\\");\\n\\n        // Set the interest rate model to newInterestRateModel\\n        interestRateModel = newInterestRateModel;\\n\\n        // Emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel)\\n        emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel);\\n    }\\n\\n    /**\\n     * Safe Token **\\n     */\\n\\n    /**\\n     * @dev Similar to ERC-20 transfer, but handles tokens that have transfer fees.\\n     *      This function returns the actual amount received,\\n     *      which may be less than `amount` if there is a fee attached to the transfer.\\n     * @param from Sender of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     * @return Actual amount received\\n     */\\n    function _doTransferIn(address from, uint256 amount) internal virtual returns (uint256) {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        uint256 balanceBefore = token.balanceOf(address(this));\\n        token.safeTransferFrom(from, address(this), amount);\\n        uint256 balanceAfter = token.balanceOf(address(this));\\n        // Return the amount that was *actually* transferred\\n        return balanceAfter - balanceBefore;\\n    }\\n\\n    /**\\n     * @dev Just a regular ERC-20 transfer, reverts on failure\\n     * @param to Receiver of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     */\\n    function _doTransferOut(address to, uint256 amount) internal virtual {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        token.safeTransfer(to, amount);\\n    }\\n\\n    /**\\n     * @notice Transfer `tokens` tokens from `src` to `dst` by `spender`\\n     * @dev Called by both `transfer` and `transferFrom` internally\\n     * @param spender The address of the account performing the transfer\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param tokens The number of tokens to transfer\\n     */\\n    function _transferTokens(address spender, address src, address dst, uint256 tokens) internal {\\n        /* Fail if transfer not allowed */\\n        comptroller.preTransferHook(address(this), src, dst, tokens);\\n\\n        /* Do not allow self-transfers */\\n        if (src == dst) {\\n            revert TransferNotAllowed();\\n        }\\n\\n        /* Get the allowance, infinite for the account owner */\\n        uint256 startingAllowance;\\n        if (spender == src) {\\n            startingAllowance = type(uint256).max;\\n        } else {\\n            startingAllowance = transferAllowances[src][spender];\\n        }\\n\\n        /* Do the calculations, checking for {under,over}flow */\\n        uint256 allowanceNew = startingAllowance - tokens;\\n        uint256 srcTokensNew = accountTokens[src] - tokens;\\n        uint256 dstTokensNew = accountTokens[dst] + tokens;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n\\n        accountTokens[src] = srcTokensNew;\\n        accountTokens[dst] = dstTokensNew;\\n\\n        /* Eat some of the allowance (if necessary) */\\n        if (startingAllowance != type(uint256).max) {\\n            transferAllowances[src][spender] = allowanceNew;\\n        }\\n\\n        /* We emit a Transfer event */\\n        emit Transfer(src, dst, tokens);\\n\\n        comptroller.transferVerify(address(this), src, dst, tokens);\\n    }\\n\\n    /**\\n     * @notice Initialize the money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     */\\n    function _initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n        require(accrualBlockNumber == 0 && borrowIndex == 0, \\\"market may only be initialized once\\\");\\n\\n        // Set initial exchange rate\\n        initialExchangeRateMantissa = initialExchangeRateMantissa_;\\n        require(initialExchangeRateMantissa > 0, \\\"initial exchange rate must be greater than zero.\\\");\\n\\n        _setComptroller(comptroller_);\\n\\n        // Initialize slot(block or second) number and borrow index (slot(block or second) number mocks depend on comptroller being set)\\n        accrualBlockNumber = getBlockNumberOrTimestamp();\\n        borrowIndex = MANTISSA_ONE;\\n\\n        // Set the interest rate model (depends on slot(block or second) number / borrow index)\\n        _setInterestRateModelFresh(interestRateModel_);\\n\\n        _setReserveFactorFresh(reserveFactorMantissa_);\\n\\n        name = name_;\\n        symbol = symbol_;\\n        decimals = decimals_;\\n        _setShortfallContract(riskManagement.shortfall);\\n        _setProtocolShareReserve(riskManagement.protocolShareReserve);\\n        protocolSeizeShareMantissa = DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA;\\n\\n        // Set underlying and sanity check it\\n        underlying = underlying_;\\n        IERC20Upgradeable(underlying).totalSupply();\\n\\n        // The counter starts true to prevent changing it from zero to non-zero (i.e. smaller cost/refund)\\n        _notEntered = true;\\n        _transferOwnership(admin_);\\n    }\\n\\n    function _setShortfallContract(address shortfall_) internal {\\n        ensureNonzeroAddress(shortfall_);\\n        address oldShortfall = shortfall;\\n        shortfall = shortfall_;\\n        emit NewShortfallContract(oldShortfall, shortfall_);\\n    }\\n\\n    function _setProtocolShareReserve(address payable protocolShareReserve_) internal {\\n        ensureNonzeroAddress(protocolShareReserve_);\\n        address oldProtocolShareReserve = address(protocolShareReserve);\\n        protocolShareReserve = protocolShareReserve_;\\n        emit NewProtocolShareReserve(oldProtocolShareReserve, address(protocolShareReserve_));\\n    }\\n\\n    function _ensureSenderIsDelegateOf(address user) internal view {\\n        if (!ComptrollerViewInterface(address(comptroller)).approvedDelegates(user, msg.sender)) {\\n            revert DelegateNotApproved();\\n        }\\n    }\\n\\n    /**\\n     * @notice Gets balance of this contract in terms of the underlying\\n     * @dev This excludes the value of the current message, if any\\n     * @return The quantity of underlying tokens owned by this contract\\n     */\\n    function _getCashPrior() internal view virtual returns (uint256) {\\n        return IERC20Upgradeable(underlying).balanceOf(address(this));\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance the calculated balance\\n     */\\n    function _borrowBalanceStored(address account) internal view returns (uint256) {\\n        /* Get borrowBalance and borrowIndex */\\n        BorrowSnapshot memory borrowSnapshot = accountBorrows[account];\\n\\n        /* If borrowBalance = 0 then borrowIndex is likely also 0.\\n         * Rather than failing the calculation with a division by 0, we immediately return 0 in this case.\\n         */\\n        if (borrowSnapshot.principal == 0) {\\n            return 0;\\n        }\\n\\n        /* Calculate new borrow balance using the interest index:\\n         *  recentBorrowBalance = borrower.borrowBalance * market.borrowIndex / borrower.borrowIndex\\n         */\\n        uint256 principalTimesIndex = borrowSnapshot.principal * borrowIndex;\\n\\n        return principalTimesIndex / borrowSnapshot.interestIndex;\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function _exchangeRateStored() internal view virtual returns (uint256) {\\n        uint256 _totalSupply = totalSupply;\\n        if (_totalSupply == 0) {\\n            /*\\n             * If there are no tokens minted:\\n             *  exchangeRate = initialExchangeRate\\n             */\\n            return initialExchangeRateMantissa;\\n        }\\n        /*\\n         * Otherwise:\\n         *  exchangeRate = (totalCash + totalBorrows + badDebt - totalReserves) / totalSupply\\n         */\\n        uint256 totalCash = _getCashPrior();\\n        uint256 cashPlusBorrowsMinusReserves = totalCash + totalBorrows + badDebt - totalReserves;\\n        uint256 exchangeRate = (cashPlusBorrowsMinusReserves * EXP_SCALE) / _totalSupply;\\n\\n        return exchangeRate;\\n    }\\n}\\n\",\"keccak256\":\"0xa220ca317fe69b920b86e43f054c43b5f891f12160fd312c9a21668f969ee056\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { ComptrollerInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\n\\n/**\\n * @title VTokenStorage\\n * @author Venus\\n * @notice Storage layout used by the `VToken` contract\\n */\\n// solhint-disable-next-line max-states-count\\ncontract VTokenStorage {\\n    /**\\n     * @notice Container for borrow balance information\\n     * @member principal Total balance (with accrued interest), after applying the most recent balance-changing action\\n     * @member interestIndex Global borrowIndex as of the most recent balance-changing action\\n     */\\n    struct BorrowSnapshot {\\n        uint256 principal;\\n        uint256 interestIndex;\\n    }\\n\\n    /**\\n     * @dev Guard variable for re-entrancy checks\\n     */\\n    bool internal _notEntered;\\n\\n    /**\\n     * @notice Underlying asset for this VToken\\n     */\\n    address public underlying;\\n\\n    /**\\n     * @notice EIP-20 token name for this token\\n     */\\n    string public name;\\n\\n    /**\\n     * @notice EIP-20 token symbol for this token\\n     */\\n    string public symbol;\\n\\n    /**\\n     * @notice EIP-20 token decimals for this token\\n     */\\n    uint8 public decimals;\\n\\n    /**\\n     * @notice Protocol share Reserve contract address\\n     */\\n    address payable public protocolShareReserve;\\n\\n    /**\\n     * @notice Contract which oversees inter-vToken operations\\n     */\\n    ComptrollerInterface public comptroller;\\n\\n    /**\\n     * @notice Model which tells what the current interest rate should be\\n     */\\n    InterestRateModel public interestRateModel;\\n\\n    // Initial exchange rate used when minting the first VTokens (used when totalSupply = 0)\\n    uint256 internal initialExchangeRateMantissa;\\n\\n    /**\\n     * @notice Fraction of interest currently set aside for reserves\\n     */\\n    uint256 public reserveFactorMantissa;\\n\\n    /**\\n     * @notice Slot(block or second) number that interest was last accrued at\\n     */\\n    uint256 public accrualBlockNumber;\\n\\n    /**\\n     * @notice Accumulator of the total earned interest rate since the opening of the market\\n     */\\n    uint256 public borrowIndex;\\n\\n    /**\\n     * @notice Total amount of outstanding borrows of the underlying in this market\\n     */\\n    uint256 public totalBorrows;\\n\\n    /**\\n     * @notice Total amount of reserves of the underlying held in this market\\n     */\\n    uint256 public totalReserves;\\n\\n    /**\\n     * @notice Total number of tokens in circulation\\n     */\\n    uint256 public totalSupply;\\n\\n    /**\\n     * @notice Total bad debt of the market\\n     */\\n    uint256 public badDebt;\\n\\n    // Official record of token balances for each account\\n    mapping(address => uint256) internal accountTokens;\\n\\n    // Approved token transfer amounts on behalf of others\\n    mapping(address => mapping(address => uint256)) internal transferAllowances;\\n\\n    // Mapping of account addresses to outstanding borrow balances\\n    mapping(address => BorrowSnapshot) internal accountBorrows;\\n\\n    /**\\n     * @notice Share of seized collateral that is added to reserves\\n     */\\n    uint256 public protocolSeizeShareMantissa;\\n\\n    /**\\n     * @notice Storage of Shortfall contract address\\n     */\\n    address public shortfall;\\n\\n    /**\\n     * @notice delta slot (block or second) after which reserves will be reduced\\n     */\\n    uint256 public reduceReservesBlockDelta;\\n\\n    /**\\n     * @notice last slot (block or second) number at which reserves were reduced\\n     */\\n    uint256 public reduceReservesBlockNumber;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n}\\n\\n/**\\n * @title VTokenInterface\\n * @author Venus\\n * @notice Interface implemented by the `VToken` contract\\n */\\nabstract contract VTokenInterface is VTokenStorage {\\n    struct RiskManagementInit {\\n        address shortfall;\\n        address payable protocolShareReserve;\\n    }\\n\\n    /*** Market Events ***/\\n\\n    /**\\n     * @notice Event emitted when interest is accrued\\n     */\\n    event AccrueInterest(uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when tokens are minted\\n     */\\n    event Mint(address indexed minter, uint256 mintAmount, uint256 mintTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when tokens are redeemed\\n     */\\n    event Redeem(address indexed redeemer, uint256 redeemAmount, uint256 redeemTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when underlying is borrowed\\n     */\\n    event Borrow(address indexed borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when a borrow is repaid\\n     */\\n    event RepayBorrow(\\n        address indexed payer,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        uint256 accountBorrows,\\n        uint256 totalBorrows\\n    );\\n\\n    /**\\n     * @notice Event emitted when bad debt is accumulated on a market\\n     * @param borrower borrower to \\\"forgive\\\"\\n     * @param badDebtDelta amount of new bad debt recorded\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtIncreased(address indexed borrower, uint256 badDebtDelta, uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when bad debt is recovered via an auction\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtRecovered(uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when a borrow is liquidated\\n     */\\n    event LiquidateBorrow(\\n        address indexed liquidator,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        address indexed vTokenCollateral,\\n        uint256 seizeTokens\\n    );\\n\\n    /*** Admin Events ***/\\n\\n    /**\\n     * @notice Event emitted when comptroller is changed\\n     */\\n    event NewComptroller(ComptrollerInterface indexed oldComptroller, ComptrollerInterface indexed newComptroller);\\n\\n    /**\\n     * @notice Event emitted when shortfall contract address is changed\\n     */\\n    event NewShortfallContract(address indexed oldShortfall, address indexed newShortfall);\\n\\n    /**\\n     * @notice Event emitted when protocol share reserve contract address is changed\\n     */\\n    event NewProtocolShareReserve(address indexed oldProtocolShareReserve, address indexed newProtocolShareReserve);\\n\\n    /**\\n     * @notice Event emitted when interestRateModel is changed\\n     */\\n    event NewMarketInterestRateModel(\\n        InterestRateModel indexed oldInterestRateModel,\\n        InterestRateModel indexed newInterestRateModel\\n    );\\n\\n    /**\\n     * @notice Event emitted when protocol seize share is changed\\n     */\\n    event NewProtocolSeizeShare(uint256 oldProtocolSeizeShareMantissa, uint256 newProtocolSeizeShareMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserve factor is changed\\n     */\\n    event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserves are added\\n     */\\n    event ReservesAdded(address indexed benefactor, uint256 addAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice Event emitted when the spread reserves are reduced\\n     */\\n    event SpreadReservesReduced(address indexed protocolShareReserve, uint256 reduceAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice EIP20 Transfer event\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 amount);\\n\\n    /**\\n     * @notice EIP20 Approval event\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\\n\\n    /**\\n     * @notice Event emitted when healing the borrow\\n     */\\n    event HealBorrow(address indexed payer, address indexed borrower, uint256 repayAmount);\\n\\n    /**\\n     * @notice Event emitted when tokens are swept\\n     */\\n    event SweepToken(address indexed token);\\n\\n    /**\\n     * @notice Event emitted when reduce reserves slot (block or second) delta is changed\\n     */\\n    event NewReduceReservesBlockDelta(\\n        uint256 oldReduceReservesBlockOrTimestampDelta,\\n        uint256 newReduceReservesBlockOrTimestampDelta\\n    );\\n\\n    /**\\n     * @notice Event emitted when liquidation reserves are reduced\\n     */\\n    event ProtocolSeize(address indexed from, address indexed to, uint256 amount);\\n\\n    /*** User Interface ***/\\n\\n    function mint(uint256 mintAmount) external virtual returns (uint256);\\n\\n    function mintBehalf(address minter, uint256 mintAllowed) external virtual returns (uint256);\\n\\n    function redeem(uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemUnderlying(uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function redeemUnderlyingBehalf(address redeemer, uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function borrow(uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function borrowBehalf(address borrwwer, uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function repayBorrow(uint256 repayAmount) external virtual returns (uint256);\\n\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external virtual returns (uint256);\\n\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external virtual returns (uint256);\\n\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external virtual;\\n\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipCloseFactorCheck\\n    ) external virtual;\\n\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external virtual;\\n\\n    function transfer(address dst, uint256 amount) external virtual returns (bool);\\n\\n    function transferFrom(address src, address dst, uint256 amount) external virtual returns (bool);\\n\\n    function accrueInterest() external virtual returns (uint256);\\n\\n    function sweepToken(IERC20Upgradeable token) external virtual;\\n\\n    /*** Admin Functions ***/\\n\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external virtual;\\n\\n    function reduceReserves(uint256 reduceAmount) external virtual;\\n\\n    function exchangeRateCurrent() external virtual returns (uint256);\\n\\n    function borrowBalanceCurrent(address account) external virtual returns (uint256);\\n\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external virtual;\\n\\n    function addReserves(uint256 addAmount) external virtual;\\n\\n    function totalBorrowsCurrent() external virtual returns (uint256);\\n\\n    function balanceOfUnderlying(address owner) external virtual returns (uint256);\\n\\n    function approve(address spender, uint256 amount) external virtual returns (bool);\\n\\n    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool);\\n\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool);\\n\\n    function allowance(address owner, address spender) external view virtual returns (uint256);\\n\\n    function balanceOf(address owner) external view virtual returns (uint256);\\n\\n    function getAccountSnapshot(address account) external view virtual returns (uint256, uint256, uint256, uint256);\\n\\n    function borrowRatePerBlock() external view virtual returns (uint256);\\n\\n    function supplyRatePerBlock() external view virtual returns (uint256);\\n\\n    function borrowBalanceStored(address account) external view virtual returns (uint256);\\n\\n    function exchangeRateStored() external view virtual returns (uint256);\\n\\n    function getCash() external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is a VToken contract (for inspection)\\n     * @return Always true\\n     */\\n    function isVToken() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7c4cbb879e3a931cfee4fa7a9eb1978eddff18087a1c4f56decedb84c2479f1e\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\",\"keccak256\":\"0x54ab3a6f3bc87569ed12370f3470a1ec84cea9796d4d0ccf3d07dd4280c044aa\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/validators.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\\nerror ZeroAddressNotAllowed();\\n\\n/// @notice Checks if the provided address is nonzero, reverts otherwise\\n/// @param address_ Address to check\\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\\nfunction ensureNonzeroAddress(address address_) pure {\\n    if (address_ == address(0)) {\\n        revert ZeroAddressNotAllowed();\\n    }\\n}\\n\",\"keccak256\":\"0x93bdd5cfb100f0f9a1d446857e23c3633df6ab12c266333c978428edd96b1367\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface IProtocolShareReserve {\\n    /// @notice it represents the type of vToken income\\n    enum IncomeType {\\n        SPREAD,\\n        LIQUIDATION\\n    }\\n\\n    function updateAssetsState(\\n        address comptroller,\\n        address asset,\\n        IncomeType incomeType\\n    ) external;\\n}\\n\",\"keccak256\":\"0x5fddc5b63fdd850b3b5c83576cda50dcb27a205dbb1a23af17d9da0d9f04fa0a\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { SECONDS_PER_YEAR } from \\\"./constants.sol\\\";\\n\\nabstract contract TimeManagerV8 {\\n    /// @notice Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 public immutable blocksOrSecondsPerYear;\\n\\n    /// @notice Acknowledges if a contract is time based or not\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    bool public immutable isTimeBased;\\n\\n    /// @notice Stores the current block timestamp or block number depending on isTimeBased\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    function() view returns (uint256) private immutable _getCurrentSlot;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n\\n    /// @notice Thrown when blocks per year is invalid\\n    error InvalidBlocksPerYear();\\n\\n    /// @notice Thrown when time based but blocks per year is provided\\n    error InvalidTimeBasedConfiguration();\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block\\n     * If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:error InvalidBlocksPerYear is thrown if blocksPerYear entered is zero and timeBased is false\\n     * @custom:error InvalidTimeBasedConfiguration is thrown if blocksPerYear entered is non zero and timeBased is true\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) {\\n        if (!timeBased_ && blocksPerYear_ == 0) {\\n            revert InvalidBlocksPerYear();\\n        }\\n\\n        if (timeBased_ && blocksPerYear_ != 0) {\\n            revert InvalidTimeBasedConfiguration();\\n        }\\n\\n        isTimeBased = timeBased_;\\n        blocksOrSecondsPerYear = timeBased_ ? SECONDS_PER_YEAR : blocksPerYear_;\\n        _getCurrentSlot = timeBased_ ? _getBlockTimestamp : _getBlockNumber;\\n    }\\n\\n    /**\\n     * @dev Function to simply retrieve block number or block timestamp\\n     * @return Current block number or block timestamp\\n     */\\n    function getBlockNumberOrTimestamp() public view virtual returns (uint256) {\\n        return _getCurrentSlot();\\n    }\\n\\n    /**\\n     * @dev Returns the current timestamp in seconds\\n     * @return The current timestamp\\n     */\\n    function _getBlockTimestamp() private view returns (uint256) {\\n        return block.timestamp;\\n    }\\n\\n    /**\\n     * @dev Returns the current block number\\n     * @return The current block number\\n     */\\n    function _getBlockNumber() private view returns (uint256) {\\n        return block.number;\\n    }\\n}\\n\",\"keccak256\":\"0x57a2bbb9b8e02b1c0a5c0e305fef1328a22db56c3d4b148c362010a6e767243c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\",\"keccak256\":\"0x14de93ead464da249af31bea0e3bcfb62ec693bea3475fb4d90f055ac81dc5eb\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { PrimeStorageV1 } from \\\"../PrimeStorage.sol\\\";\\n\\n/**\\n * @title IPrime\\n * @author Venus\\n * @notice Interface for Prime Token\\n */\\ninterface IPrime {\\n    struct APRInfo {\\n        // supply APR of the user in BPS\\n        uint256 supplyAPR;\\n        // borrow APR of the user in BPS\\n        uint256 borrowAPR;\\n        // total score of the market\\n        uint256 totalScore;\\n        // score of the user\\n        uint256 userScore;\\n        // capped XVS balance of the user\\n        uint256 xvsBalanceForScore;\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    struct Capital {\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    /**\\n     * @notice Returns boosted pending interest accrued for a user for all markets\\n     * @param user the account for which to get the accrued interests\\n     * @return pendingRewards the number of underlying tokens accrued by the user for all markets\\n     */\\n    function getPendingRewards(address user) external returns (PrimeStorageV1.PendingReward[] memory pendingRewards);\\n\\n    /**\\n     * @notice Update total score of multiple users and market\\n     * @param users accounts for which we need to update score\\n     */\\n    function updateScores(address[] memory users) external;\\n\\n    /**\\n     * @notice Update value of alpha\\n     * @param _alphaNumerator numerator of alpha. If alpha is 0.5 then numerator is 1\\n     * @param _alphaDenominator denominator of alpha. If alpha is 0.5 then denominator is 2\\n     */\\n    function updateAlpha(uint128 _alphaNumerator, uint128 _alphaDenominator) external;\\n\\n    /**\\n     * @notice Update multipliers for a market\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier new supply multiplier for the market, scaled by 1e18\\n     * @param borrowMultiplier new borrow multiplier for the market, scaled by 1e18\\n     */\\n    function updateMultipliers(address market, uint256 supplyMultiplier, uint256 borrowMultiplier) external;\\n\\n    /**\\n     * @notice Add a market to prime program\\n     * @param comptroller address of the comptroller\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier the multiplier for supply cap. It should be converted to 1e18\\n     * @param borrowMultiplier the multiplier for borrow cap. It should be converted to 1e18\\n     */\\n    function addMarket(\\n        address comptroller,\\n        address market,\\n        uint256 supplyMultiplier,\\n        uint256 borrowMultiplier\\n    ) external;\\n\\n    /**\\n     * @notice Set limits for total tokens that can be minted\\n     * @param _irrevocableLimit total number of irrevocable tokens that can be minted\\n     * @param _revocableLimit total number of revocable tokens that can be minted\\n     */\\n    function setLimit(uint256 _irrevocableLimit, uint256 _revocableLimit) external;\\n\\n    /**\\n     * @notice Directly issue prime tokens to users\\n     * @param isIrrevocable are the tokens being issued\\n     * @param users list of address to issue tokens to\\n     */\\n    function issue(bool isIrrevocable, address[] calldata users) external;\\n\\n    /**\\n     * @notice Executed by XVSVault whenever user's XVSVault balance changes\\n     * @param user the account address whose balance was updated\\n     */\\n    function xvsUpdated(address user) external;\\n\\n    /**\\n     * @notice accrues interest and updates score for an user for a specific market\\n     * @param user the account address for which to accrue interest and update score\\n     * @param market the market for which to accrue interest and update score\\n     */\\n    function accrueInterestAndUpdateScore(address user, address market) external;\\n\\n    /**\\n     * @notice For claiming prime token when staking period is completed\\n     */\\n    function claim() external;\\n\\n    /**\\n     * @notice For burning any prime token\\n     * @param user the account address for which the prime token will be burned\\n     */\\n    function burn(address user) external;\\n\\n    /**\\n     * @notice To pause or unpause claiming of interest\\n     */\\n    function togglePause() external;\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken) external returns (uint256);\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @param user the user for which to claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Distributes income from market since last distribution\\n     * @param vToken the market for which to distribute the income\\n     */\\n    function accrueInterest(address vToken) external;\\n\\n    /**\\n     * @notice Returns boosted interest accrued for a user\\n     * @param vToken the market for which to fetch the accrued interest\\n     * @param user the account for which to get the accrued interest\\n     * @return interestAccrued the number of underlying tokens accrued by the user since the last accrual\\n     */\\n    function getInterestAccrued(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Retrieves an array of all available markets\\n     * @return an array of addresses representing all available markets\\n     */\\n    function getAllMarkets() external view returns (address[] memory);\\n\\n    /**\\n     * @notice fetch the numbers of seconds remaining for staking period to complete\\n     * @param user the account address for which we are checking the remaining time\\n     * @return timeRemaining the number of seconds the user needs to wait to claim prime token\\n     */\\n    function claimTimeRemaining(address user) external view returns (uint256);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for user for a given market\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function calculateAPR(address market, address user) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for estimated supply, borrow and XVS staked\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @param borrow hypothetical borrow amount\\n     * @param supply hypothetical supply amount\\n     * @param xvsStaked hypothetical staked XVS amount\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function estimateAPR(\\n        address market,\\n        address user,\\n        uint256 borrow,\\n        uint256 supply,\\n        uint256 xvsStaked\\n    ) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice the total income that's going to be distributed in a year to prime token holders\\n     * @param vToken the market for which to fetch the total income that's going to distributed in a year\\n     * @return amount the total income\\n     */\\n    function incomeDistributionYearly(address vToken) external view returns (uint256 amount);\\n\\n    /**\\n     * @notice Returns if user is a prime holder\\n     * @return isPrimeHolder true if user is a prime holder\\n     */\\n    function isUserPrimeHolder(address user) external view returns (bool);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param loopsLimit Number of loops limit\\n     */\\n    function setMaxLoopsLimit(uint256 loopsLimit) external;\\n\\n    /**\\n     * @notice Update staked at timestamp for multiple users\\n     * @param users accounts for which we need to update staked at timestamp\\n     * @param timestamps new staked at timestamp for the users\\n     */\\n    function setStakedAt(address[] calldata users, uint256[] calldata timestamps) external;\\n}\\n\",\"keccak256\":\"0xd112f60183416ad796093b4a83a80ddc1b8b655965f02ae55ca82e2a0c68f97d\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\n/**\\n * @title PrimeStorageV1\\n * @author Venus\\n * @notice Storage for Prime Token\\n */\\ncontract PrimeStorageV1 {\\n    struct Token {\\n        bool exists;\\n        bool isIrrevocable;\\n    }\\n\\n    struct Market {\\n        uint256 supplyMultiplier;\\n        uint256 borrowMultiplier;\\n        uint256 rewardIndex;\\n        uint256 sumOfMembersScore;\\n        bool exists;\\n    }\\n\\n    struct Interest {\\n        uint256 accrued;\\n        uint256 score;\\n        uint256 rewardIndex;\\n    }\\n\\n    struct PendingReward {\\n        address vToken;\\n        address rewardToken;\\n        uint256 amount;\\n    }\\n\\n    /// @notice Base unit for computations, usually used in scaling (multiplications, divisions)\\n    uint256 internal constant EXP_SCALE = 1e18;\\n\\n    /// @notice maximum BPS = 100%\\n    uint256 internal constant MAXIMUM_BPS = 1e4;\\n\\n    /// @notice Mapping to get prime token's metadata\\n    mapping(address => Token) public tokens;\\n\\n    /// @notice  Tracks total irrevocable tokens minted\\n    uint256 public totalIrrevocable;\\n\\n    /// @notice  Tracks total revocable tokens minted\\n    uint256 public totalRevocable;\\n\\n    /// @notice  Indicates maximum revocable tokens that can be minted\\n    uint256 public revocableLimit;\\n\\n    /// @notice  Indicates maximum irrevocable tokens that can be minted\\n    uint256 public irrevocableLimit;\\n\\n    /// @notice Tracks when prime token eligible users started staking for claiming prime token\\n    mapping(address => uint256) public stakedAt;\\n\\n    /// @notice vToken to market configuration\\n    mapping(address => Market) public markets;\\n\\n    /// @notice vToken to user to user index\\n    mapping(address => mapping(address => Interest)) public interests;\\n\\n    /// @notice A list of boosted markets\\n    address[] internal _allMarkets;\\n\\n    /// @notice numerator of alpha. Ex: if alpha is 0.5 then this will be 1\\n    uint128 public alphaNumerator;\\n\\n    /// @notice denominator of alpha. Ex: if alpha is 0.5 then this will be 2\\n    uint128 public alphaDenominator;\\n\\n    /// @notice address of XVS vault\\n    address public xvsVault;\\n\\n    /// @notice address of XVS vault reward token\\n    address public xvsVaultRewardToken;\\n\\n    /// @notice address of XVS vault pool id\\n    uint256 public xvsVaultPoolId;\\n\\n    /// @notice mapping to check if a account's score was updated in the round\\n    mapping(uint256 => mapping(address => bool)) public isScoreUpdated;\\n\\n    /// @notice unique id for next round\\n    uint256 public nextScoreUpdateRoundId;\\n\\n    /// @notice total number of accounts whose score needs to be updated\\n    uint256 public totalScoreUpdatesRequired;\\n\\n    /// @notice total number of accounts whose score is yet to be updated\\n    uint256 public pendingScoreUpdates;\\n\\n    /// @notice mapping used to find if an asset is part of prime markets\\n    mapping(address => address) public vTokenForAsset;\\n\\n    /// @notice Address of core pool comptroller contract\\n    address internal corePoolComptroller;\\n\\n    /// @notice unreleased income from PLP that's already distributed to prime holders\\n    /// @dev mapping of asset address => amount\\n    mapping(address => uint256) public unreleasedPLPIncome;\\n\\n    /// @notice The address of PLP contract\\n    address public primeLiquidityProvider;\\n\\n    /// @notice The address of ResilientOracle contract\\n    ResilientOracleInterface public oracle;\\n\\n    /// @notice The address of PoolRegistry contract\\n    address public poolRegistry;\\n\\n    /// @dev This empty reserved space is put in place to allow future versions to add new\\n    /// variables without shifting down storage in the inheritance chain.\\n    uint256[26] private __gap;\\n}\\n\",\"keccak256\":\"0x5285c875114db2ea2be0b81b65722d5761806217022db733323c4e03365a95e7\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Interface implemented by the `Comptroller` contract.","version":1}},"ComptrollerViewInterface":{"abi":[{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"delegate","type":"address"}],"name":"approvedDelegates","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"borrowCaps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"closeFactorMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllMarkets","outputs":[{"internalType":"contract VToken[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"getAssetsIn","outputs":[{"internalType":"contract VToken[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardDistributors","outputs":[{"internalType":"contract RewardsDistributor[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidationIncentiveMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"markets","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minLiquidatableCollateral","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"contract ResilientOracleInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"supplyCaps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Venus","kind":"dev","methods":{},"title":"ComptrollerViewInterface","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"approvedDelegates(address,address)":"10b98338","borrowCaps(address)":"4a584432","closeFactorMantissa()":"e8755446","getAllMarkets()":"b0772d0b","getAssetsIn(address)":"abfceffc","getRewardDistributors()":"61252fd1","liquidationIncentiveMantissa()":"4ada90af","markets(address)":"8e8f294b","minLiquidatableCollateral()":"db5c65de","oracle()":"7dc0d1d0","supplyCaps(address)":"02c3bcbb"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"}],\"name\":\"approvedDelegates\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"borrowCaps\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"closeFactorMantissa\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllMarkets\",\"outputs\":[{\"internalType\":\"contract VToken[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"getAssetsIn\",\"outputs\":[{\"internalType\":\"contract VToken[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardDistributors\",\"outputs\":[{\"internalType\":\"contract RewardsDistributor[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidationIncentiveMantissa\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"markets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minLiquidatableCollateral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contract ResilientOracleInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"supplyCaps\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"kind\":\"dev\",\"methods\":{},\"title\":\"ComptrollerViewInterface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Interface implemented by the `Comptroller` contract, including only some util view functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\":\"ComptrollerViewInterface\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./OwnableUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership} and {acceptOwnership}.\\n *\\n * This module is used through inheritance. It will make available all functions\\n * from parent (Ownable).\\n */\\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\\n    address private _pendingOwner;\\n\\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\\n\\n    function __Ownable2Step_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable2Step_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Returns the address of the pending owner.\\n     */\\n    function pendingOwner() public view virtual returns (address) {\\n        return _pendingOwner;\\n    }\\n\\n    /**\\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\\n        _pendingOwner = newOwner;\\n        emit OwnershipTransferStarted(owner(), newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual override {\\n        delete _pendingOwner;\\n        super._transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev The new owner accepts the ownership transfer.\\n     */\\n    function acceptOwnership() public virtual {\\n        address sender = _msgSender();\\n        require(pendingOwner() == sender, \\\"Ownable2Step: caller is not the new owner\\\");\\n        _transferOwnership(sender);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x9140dabc466abab21b48b72dbda26736b1183a310d0e677d3719d201df026510\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * ==== Security Considerations\\n *\\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\\n * generally recommended is:\\n *\\n * ```solidity\\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\\n *     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\\n *     doThing(..., value);\\n * }\\n *\\n * function doThing(..., uint256 value) public {\\n *     token.safeTransferFrom(msg.sender, address(this), value);\\n *     ...\\n * }\\n * ```\\n *\\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\\n * {SafeERC20-safeTransferFrom}).\\n *\\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\\n * contracts should have entry points that don't rely on permit.\\n */\\ninterface IERC20PermitUpgradeable {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     *\\n     * CAUTION: See Security Considerations above.\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x07e881de3b9f6d2c07909f193f24b96c7fe4ea60013260f3f25aecd8bab3c2f8\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\nimport \\\"../extensions/IERC20PermitUpgradeable.sol\\\";\\nimport \\\"../../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20Upgradeable {\\n    using AddressUpgradeable for address;\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransfer(IERC20Upgradeable token, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    /**\\n     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeIncreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        uint256 oldAllowance = token.allowance(address(this), spender);\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));\\n    }\\n\\n    /**\\n     * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeDecreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));\\n        }\\n    }\\n\\n    /**\\n     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n     * to be set to zero before setting it to a non-zero value, such as USDT.\\n     */\\n    function forceApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);\\n\\n        if (!_callOptionalReturnBool(token, approvalCall)) {\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));\\n            _callOptionalReturn(token, approvalCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.\\n     * Revert on invalid signature.\\n     */\\n    function safePermit(\\n        IERC20PermitUpgradeable token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20Upgradeable token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        require(returndata.length == 0 || abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     *\\n     * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\\n     */\\n    function _callOptionalReturnBool(IERC20Upgradeable token, bytes memory data) private returns (bool) {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\\n        // and not revert is the subcall reverts.\\n\\n        (bool success, bytes memory returndata) = address(token).call(data);\\n        return\\n            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && AddressUpgradeable.isContract(address(token));\\n    }\\n}\\n\",\"keccak256\":\"0x23b997be73d3dd46885262704f0f8cfc7273fdadfe303d37969a9561373972b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n    /**\\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n     *\\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n     * {RoleAdminChanged} not being emitted signaling this.\\n     *\\n     * _Available since v3.1._\\n     */\\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n    /**\\n     * @dev Emitted when `account` is granted `role`.\\n     *\\n     * `sender` is the account that originated the contract call, an admin role\\n     * bearer except when using {AccessControl-_setupRole}.\\n     */\\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Emitted when `account` is revoked `role`.\\n     *\\n     * `sender` is the account that originated the contract call:\\n     *   - if using `revokeRole`, it is the admin role bearer\\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n     */\\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Returns `true` if `account` has been granted `role`.\\n     */\\n    function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n    /**\\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\\n     * {revokeRole}.\\n     *\\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n     */\\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n    /**\\n     * @dev Grants `role` to `account`.\\n     *\\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function grantRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from `account`.\\n     *\\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function revokeRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from the calling account.\\n     *\\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n     * purpose is to provide a mechanism for accounts to lose their privileges\\n     * if they are compromised (such as when a trusted device is misplaced).\\n     *\\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must be `account`.\\n     */\\n    function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\n\\nimport \\\"./IAccessControlManagerV8.sol\\\";\\n\\n/**\\n * @title AccessControlledV8\\n * @author Venus\\n * @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\\n * to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\\n */\\nabstract contract AccessControlledV8 is Initializable, Ownable2StepUpgradeable {\\n    /// @notice Access control manager contract\\n    IAccessControlManagerV8 internal _accessControlManager;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when access control manager contract address is changed\\n    event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager);\\n\\n    /// @notice Thrown when the action is prohibited by AccessControlManager\\n    error Unauthorized(address sender, address calledContract, string methodSignature);\\n\\n    function __AccessControlled_init(address accessControlManager_) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n    }\\n\\n    function __AccessControlled_init_unchained(address accessControlManager_) internal onlyInitializing {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Sets the address of AccessControlManager\\n     * @dev Admin function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     * @custom:event Emits NewAccessControlManager event\\n     * @custom:access Only Governance\\n     */\\n    function setAccessControlManager(address accessControlManager_) external onlyOwner {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Returns the address of the access control manager contract\\n     */\\n    function accessControlManager() external view returns (IAccessControlManagerV8) {\\n        return _accessControlManager;\\n    }\\n\\n    /**\\n     * @dev Internal function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     */\\n    function _setAccessControlManager(address accessControlManager_) internal {\\n        require(address(accessControlManager_) != address(0), \\\"invalid acess control manager address\\\");\\n        address oldAccessControlManager = address(_accessControlManager);\\n        _accessControlManager = IAccessControlManagerV8(accessControlManager_);\\n        emit NewAccessControlManager(oldAccessControlManager, accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Reverts if the call is not allowed by AccessControlManager\\n     * @param signature Method signature\\n     */\\n    function _checkAccessAllowed(string memory signature) internal view {\\n        bool isAllowedToCall = _accessControlManager.isAllowedToCall(msg.sender, signature);\\n\\n        if (!isAllowedToCall) {\\n            revert Unauthorized(msg.sender, address(this), signature);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe0fd441c84ac907cabc88db69ef04f6d7532d770c7e6a1dfe6e7d6305debb49\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport \\\"@openzeppelin/contracts/access/IAccessControl.sol\\\";\\n\\n/**\\n * @title IAccessControlManagerV8\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\\n */\\ninterface IAccessControlManagerV8 is IAccessControl {\\n    function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n    function revokeCallPermission(\\n        address contractAddress,\\n        string calldata functionSig,\\n        address accountToRevoke\\n    ) external;\\n\\n    function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n    function hasPermission(\\n        address account,\\n        address contractAddress,\\n        string calldata functionSig\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xaa29b098440d0b3a131c5ecdf25ce548790c1b5ac7bf9b5c0264b6af6f7a1e0b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Comptroller.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\n\\nimport { ComptrollerInterface, Action } from \\\"./ComptrollerInterface.sol\\\";\\nimport { ComptrollerStorage } from \\\"./ComptrollerStorage.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"./MaxLoopsLimitHelper.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title Comptroller\\n * @author Venus\\n * @notice The Comptroller is designed to provide checks for all minting, redeeming, transferring, borrowing, lending, repaying, liquidating,\\n * and seizing done by the `vToken` contract. Each pool has one `Comptroller` checking these interactions across markets. When a user interacts\\n * with a given market by one of these main actions, a call is made to a corresponding hook in the associated `Comptroller`, which either allows\\n * or reverts the transaction. These hooks also update supply and borrow rewards as they are called. The comptroller holds the logic for assessing\\n * liquidity snapshots of an account via the collateral factor and liquidation threshold. This check determines the collateral needed for a borrow,\\n * as well as how much of a borrow may be liquidated. A user may borrow a portion of their collateral with the maximum amount determined by the\\n * markets collateral factor. However, if their borrowed amount exceeds an amount calculated using the market\\u2019s corresponding liquidation threshold,\\n * the borrow is eligible for liquidation.\\n *\\n * The `Comptroller` also includes two functions `liquidateAccount()` and `healAccount()`, which are meant to handle accounts that do not exceed\\n * the `minLiquidatableCollateral` for the `Comptroller`:\\n *\\n * - `healAccount()`: This function is called to seize all of a given user\\u2019s collateral, requiring the `msg.sender` repay a certain percentage\\n * of the debt calculated by `collateral/(borrows*liquidationIncentive)`. The function can only be called if the calculated percentage does not exceed\\n * 100%, because otherwise no `badDebt` would be created and `liquidateAccount()` should be used instead. The difference in the actual amount of debt\\n * and debt paid off is recorded as `badDebt` for each market, which can then be auctioned off for the risk reserves of the associated pool.\\n * - `liquidateAccount()`: This function can only be called if the collateral seized will cover all borrows of an account, as well as the liquidation\\n * incentive. Otherwise, the pool will incur bad debt, in which case the function `healAccount()` should be used instead. This function skips the logic\\n * verifying that the repay amount does not exceed the close factor.\\n */\\ncontract Comptroller is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    ComptrollerStorage,\\n    ComptrollerInterface,\\n    ExponentialNoError,\\n    MaxLoopsLimitHelper\\n{\\n    // PoolRegistry, immutable to save on gas\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    address public immutable poolRegistry;\\n\\n    /// @notice Emitted when an account enters a market\\n    event MarketEntered(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when an account exits a market\\n    event MarketExited(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when close factor is changed by admin\\n    event NewCloseFactor(uint256 oldCloseFactorMantissa, uint256 newCloseFactorMantissa);\\n\\n    /// @notice Emitted when a collateral factor is changed by admin\\n    event NewCollateralFactor(VToken vToken, uint256 oldCollateralFactorMantissa, uint256 newCollateralFactorMantissa);\\n\\n    /// @notice Emitted when liquidation threshold is changed by admin\\n    event NewLiquidationThreshold(\\n        VToken vToken,\\n        uint256 oldLiquidationThresholdMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    );\\n\\n    /// @notice Emitted when liquidation incentive is changed by admin\\n    event NewLiquidationIncentive(uint256 oldLiquidationIncentiveMantissa, uint256 newLiquidationIncentiveMantissa);\\n\\n    /// @notice Emitted when price oracle is changed\\n    event NewPriceOracle(ResilientOracleInterface oldPriceOracle, ResilientOracleInterface newPriceOracle);\\n\\n    /// @notice Emitted when an action is paused on a market\\n    event ActionPausedMarket(VToken vToken, Action action, bool pauseState);\\n\\n    /// @notice Emitted when borrow cap for a vToken is changed\\n    event NewBorrowCap(VToken indexed vToken, uint256 newBorrowCap);\\n\\n    /// @notice Emitted when the collateral threshold (in USD) for non-batch liquidations is changed\\n    event NewMinLiquidatableCollateral(uint256 oldMinLiquidatableCollateral, uint256 newMinLiquidatableCollateral);\\n\\n    /// @notice Emitted when supply cap for a vToken is changed\\n    event NewSupplyCap(VToken indexed vToken, uint256 newSupplyCap);\\n\\n    /// @notice Emitted when a rewards distributor is added\\n    event NewRewardsDistributor(address indexed rewardsDistributor, address indexed rewardToken);\\n\\n    /// @notice Emitted when a market is supported\\n    event MarketSupported(VToken vToken);\\n\\n    /// @notice Emitted when prime token contract address is changed\\n    event NewPrimeToken(IPrime oldPrimeToken, IPrime newPrimeToken);\\n\\n    /// @notice Emitted when forced liquidation is enabled or disabled for a market\\n    event IsForcedLiquidationEnabledUpdated(address indexed vToken, bool enable);\\n\\n    /// @notice Emitted when a market is unlisted\\n    event MarketUnlisted(address indexed vToken);\\n    /// @notice Emitted when the borrowing or redeeming delegate rights are updated for an account\\n    event DelegateUpdated(address indexed approver, address indexed delegate, bool approved);\\n\\n    /// @notice Thrown when collateral factor exceeds the upper bound\\n    error InvalidCollateralFactor();\\n\\n    /// @notice Thrown when liquidation threshold exceeds the collateral factor\\n    error InvalidLiquidationThreshold();\\n\\n    /// @notice Thrown when the action is only available to specific sender, but the real sender was different\\n    error UnexpectedSender(address expectedSender, address actualSender);\\n\\n    /// @notice Thrown when the oracle returns an invalid price for some asset\\n    error PriceError(address vToken);\\n\\n    /// @notice Thrown if VToken unexpectedly returned a nonzero error code while trying to get account snapshot\\n    error SnapshotError(address vToken, address user);\\n\\n    /// @notice Thrown when the market is not listed\\n    error MarketNotListed(address market);\\n\\n    /// @notice Thrown when a market has an unexpected comptroller\\n    error ComptrollerMismatch();\\n\\n    /// @notice Thrown when user is not member of market\\n    error MarketNotCollateral(address vToken, address user);\\n\\n    /// @notice Thrown when borrow action is not paused\\n    error BorrowActionNotPaused();\\n\\n    /// @notice Thrown when mint action is not paused\\n    error MintActionNotPaused();\\n\\n    /// @notice Thrown when redeem action is not paused\\n    error RedeemActionNotPaused();\\n\\n    /// @notice Thrown when repay action is not paused\\n    error RepayActionNotPaused();\\n\\n    /// @notice Thrown when seize action is not paused\\n    error SeizeActionNotPaused();\\n\\n    /// @notice Thrown when exit market action is not paused\\n    error ExitMarketActionNotPaused();\\n\\n    /// @notice Thrown when transfer action is not paused\\n    error TransferActionNotPaused();\\n\\n    /// @notice Thrown when enter market action is not paused\\n    error EnterMarketActionNotPaused();\\n\\n    /// @notice Thrown when liquidate action is not paused\\n    error LiquidateActionNotPaused();\\n\\n    /// @notice Thrown when borrow cap is not zero\\n    error BorrowCapIsNotZero();\\n\\n    /// @notice Thrown when supply cap is not zero\\n    error SupplyCapIsNotZero();\\n\\n    /// @notice Thrown when collateral factor is not zero\\n    error CollateralFactorIsNotZero();\\n\\n    /**\\n     * @notice Thrown during the liquidation if user's total collateral amount is lower than\\n     *   a predefined threshold. In this case only batch liquidations (either liquidateAccount\\n     *   or healAccount) are available.\\n     */\\n    error MinimalCollateralViolated(uint256 expectedGreaterThan, uint256 actual);\\n    error CollateralExceedsThreshold(uint256 expectedLessThanOrEqualTo, uint256 actual);\\n    error InsufficientCollateral(uint256 collateralToSeize, uint256 availableCollateral);\\n\\n    /// @notice Thrown when the account doesn't have enough liquidity to redeem or borrow\\n    error InsufficientLiquidity();\\n\\n    /// @notice Thrown when trying to liquidate a healthy account\\n    error InsufficientShortfall();\\n\\n    /// @notice Thrown when trying to repay more than allowed by close factor\\n    error TooMuchRepay();\\n\\n    /// @notice Thrown if the user is trying to exit a market in which they have an outstanding debt\\n    error NonzeroBorrowBalance();\\n\\n    /// @notice Thrown when trying to perform an action that is paused\\n    error ActionPaused(address market, Action action);\\n\\n    /// @notice Thrown when trying to add a market that is already listed\\n    error MarketAlreadyListed(address market);\\n\\n    /// @notice Thrown if the supply cap is exceeded\\n    error SupplyCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if the borrow cap is exceeded\\n    error BorrowCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if delegate approval status is already set to the requested value\\n    error DelegationStatusUnchanged();\\n\\n    /// @param poolRegistry_ Pool registry address\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    /// @custom:error ZeroAddressNotAllowed is thrown when pool registry address is zero\\n    constructor(address poolRegistry_) {\\n        ensureNonzeroAddress(poolRegistry_);\\n\\n        poolRegistry = poolRegistry_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @param loopLimit Limit for the loops can iterate to avoid the DOS\\n     * @param accessControlManager Access control manager contract address\\n     */\\n    function initialize(uint256 loopLimit, address accessControlManager) external initializer {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager);\\n\\n        _setMaxLoopsLimit(loopLimit);\\n    }\\n\\n    /**\\n     * @notice Add assets to be included in account liquidity calculation; enabling them to be used as collateral\\n     * @param vTokens The list of addresses of the vToken markets to be enabled\\n     * @return errors An array of NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketEntered is emitted for each market on success\\n     * @custom:error ActionPaused error is thrown if entering any of the markets is paused\\n     * @custom:error MarketNotListed error is thrown if any of the markets is not listed\\n     * @custom:access Not restricted\\n     */\\n    function enterMarkets(address[] memory vTokens) external override returns (uint256[] memory) {\\n        uint256 len = vTokens.length;\\n\\n        uint256[] memory results = new uint256[](len);\\n        for (uint256 i; i < len; ++i) {\\n            VToken vToken = VToken(vTokens[i]);\\n\\n            _addToMarket(vToken, msg.sender);\\n            results[i] = NO_ERROR;\\n        }\\n\\n        return results;\\n    }\\n\\n    /**\\n     * @notice Unlist a market by setting isListed to false\\n     * @dev Checks if all actions are paused, borrow/supply caps is set to 0 and collateral factor is to 0.\\n     * @param market The address of the market (token) to unlist\\n     * @return uint256 Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketUnlisted is emitted on success\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error BorrowActionNotPaused error is thrown if borrow action is not paused\\n     * @custom:error MintActionNotPaused error is thrown if mint action is not paused\\n     * @custom:error RedeemActionNotPaused error is thrown if redeem action is not paused\\n     * @custom:error RepayActionNotPaused error is thrown if repay action is not paused\\n     * @custom:error EnterMarketActionNotPaused error is thrown if enter market action is not paused\\n     * @custom:error LiquidateActionNotPaused error is thrown if liquidate action is not paused\\n     * @custom:error BorrowCapIsNotZero error is thrown if borrow cap is not zero\\n     * @custom:error SupplyCapIsNotZero error is thrown if supply cap is not zero\\n     * @custom:error CollateralFactorIsNotZero error is thrown if collateral factor is not zero\\n     */\\n    function unlistMarket(address market) external returns (uint256) {\\n        _checkAccessAllowed(\\\"unlistMarket(address)\\\");\\n\\n        Market storage _market = markets[market];\\n\\n        if (!_market.isListed) {\\n            revert MarketNotListed(market);\\n        }\\n\\n        if (!actionPaused(market, Action.BORROW)) {\\n            revert BorrowActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.MINT)) {\\n            revert MintActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REDEEM)) {\\n            revert RedeemActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REPAY)) {\\n            revert RepayActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.SEIZE)) {\\n            revert SeizeActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.ENTER_MARKET)) {\\n            revert EnterMarketActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.LIQUIDATE)) {\\n            revert LiquidateActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.TRANSFER)) {\\n            revert TransferActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.EXIT_MARKET)) {\\n            revert ExitMarketActionNotPaused();\\n        }\\n\\n        if (borrowCaps[market] != 0) {\\n            revert BorrowCapIsNotZero();\\n        }\\n\\n        if (supplyCaps[market] != 0) {\\n            revert SupplyCapIsNotZero();\\n        }\\n\\n        if (_market.collateralFactorMantissa != 0) {\\n            revert CollateralFactorIsNotZero();\\n        }\\n\\n        _market.isListed = false;\\n        emit MarketUnlisted(market);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Grants or revokes the borrowing or redeeming delegate rights to / from an account\\n     *  If allowed, the delegate will be able to borrow funds on behalf of the sender\\n     *  Upon a delegated borrow, the delegate will receive the funds, and the borrower\\n     *  will see the debt on their account\\n     *  Upon a delegated redeem, the delegate will receive the redeemed amount and the approver\\n     *  will see a deduction in his vToken balance\\n     * @param delegate The address to update the rights for\\n     * @param approved Whether to grant (true) or revoke (false) the borrowing or redeeming rights\\n     * @custom:event DelegateUpdated emits on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when delegate address is zero\\n     * @custom:error DelegationStatusUnchanged is thrown if approval status is already set to the requested value\\n     * @custom:access Not restricted\\n     */\\n    function updateDelegate(address delegate, bool approved) external {\\n        ensureNonzeroAddress(delegate);\\n        if (approvedDelegates[msg.sender][delegate] == approved) {\\n            revert DelegationStatusUnchanged();\\n        }\\n\\n        approvedDelegates[msg.sender][delegate] = approved;\\n        emit DelegateUpdated(msg.sender, delegate, approved);\\n    }\\n\\n    /**\\n     * @notice Removes asset from sender's account liquidity calculation; disabling them as collateral\\n     * @dev Sender must not have an outstanding borrow balance in the asset,\\n     *  or be providing necessary collateral for an outstanding borrow.\\n     * @param vTokenAddress The address of the asset to be removed\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketExited is emitted on success\\n     * @custom:error ActionPaused error is thrown if exiting the market is paused\\n     * @custom:error NonzeroBorrowBalance error is thrown if the user has an outstanding borrow in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if exiting the market would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function exitMarket(address vTokenAddress) external override returns (uint256) {\\n        _checkActionPauseState(vTokenAddress, Action.EXIT_MARKET);\\n        VToken vToken = VToken(vTokenAddress);\\n        /* Get sender tokensHeld and amountOwed underlying from the vToken */\\n        (uint256 tokensHeld, uint256 amountOwed, ) = _safeGetAccountSnapshot(vToken, msg.sender);\\n\\n        /* Fail if the sender has a borrow balance */\\n        if (amountOwed != 0) {\\n            revert NonzeroBorrowBalance();\\n        }\\n\\n        /* Fail if the sender is not permitted to redeem all of their tokens */\\n        _checkRedeemAllowed(vTokenAddress, msg.sender, tokensHeld);\\n\\n        Market storage marketToExit = markets[address(vToken)];\\n\\n        /* Return true if the sender is not already \\u2018in\\u2019 the market */\\n        if (!marketToExit.accountMembership[msg.sender]) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Set vToken account membership to false */\\n        delete marketToExit.accountMembership[msg.sender];\\n\\n        /* Delete vToken from the account\\u2019s list of assets */\\n        // load into memory for faster iteration\\n        VToken[] memory userAssetList = accountAssets[msg.sender];\\n        uint256 len = userAssetList.length;\\n\\n        uint256 assetIndex = len;\\n        for (uint256 i; i < len; ++i) {\\n            if (userAssetList[i] == vToken) {\\n                assetIndex = i;\\n                break;\\n            }\\n        }\\n\\n        // We *must* have found the asset in the list or our redundant data structure is broken\\n        assert(assetIndex < len);\\n\\n        // copy last item in list to location of item to be removed, reduce length by 1\\n        VToken[] storage storedList = accountAssets[msg.sender];\\n        storedList[assetIndex] = storedList[storedList.length - 1];\\n        storedList.pop();\\n\\n        emit MarketExited(vToken, msg.sender);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /*** Policy Hooks ***/\\n\\n    /**\\n     * @notice Checks if the account should be allowed to mint tokens in the given market\\n     * @param vToken The market to verify the mint against\\n     * @param minter The account which would get the minted tokens\\n     * @param mintAmount The amount of underlying being supplied to the market in exchange for tokens\\n     * @custom:error ActionPaused error is thrown if supplying to this market is paused\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error SupplyCapExceeded error is thrown if the total supply exceeds the cap after minting\\n     * @custom:access Not restricted\\n     */\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external override {\\n        _checkActionPauseState(vToken, Action.MINT);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        uint256 supplyCap = supplyCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (supplyCap != type(uint256).max) {\\n            uint256 vTokenSupply = VToken(vToken).totalSupply();\\n            Exp memory exchangeRate = Exp({ mantissa: VToken(vToken).exchangeRateStored() });\\n            uint256 nextTotalSupply = mul_ScalarTruncateAddUInt(exchangeRate, vTokenSupply, mintAmount);\\n            if (nextTotalSupply > supplyCap) {\\n                revert SupplyCapExceeded(vToken, supplyCap);\\n            }\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, minter);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates mint, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being minted\\n     * @param minter The address minting the tokens\\n     * @param actualMintAmount The amount of the underlying asset being minted\\n     * @param mintTokens The number of tokens being minted\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function mintVerify(address vToken, address minter, uint256 actualMintAmount, uint256 mintTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(minter, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to redeem tokens in the given market\\n     * @param vToken The market to verify the redeem against\\n     * @param redeemer The account which would redeem the tokens\\n     * @param redeemTokens The number of vTokens to exchange for the underlying asset in the market\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external override {\\n        _checkActionPauseState(vToken, Action.REDEEM);\\n\\n        _checkRedeemAllowed(vToken, redeemer, redeemTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, redeemer);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates redeem, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being redeemed\\n     * @param redeemer The address redeeming the tokens\\n     * @param redeemAmount The amount of the underlying asset being redeemed\\n     * @param redeemTokens The number of tokens being redeemed\\n     */\\n    function redeemVerify(address vToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(redeemer, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates repayBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being repaid\\n     * @param payer The address repaying the borrow\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     */\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer, // solhint-disable-line no-unused-vars\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 borrowerIndex // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates liquidateBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     * @param seizeTokens The amount of collateral token that will be seized\\n     */\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenBorrowed);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenBorrowed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates seize, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param seizeTokens The number of collateral tokens to seize\\n     */\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenCollateral);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenCollateral);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates transfer, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being transferred\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function transferVerify(address vToken, address src, address dst, uint256 transferTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(src, vToken);\\n            prime.accrueInterestAndUpdateScore(dst, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to borrow the underlying asset of the given market\\n     * @param vToken The market to verify the borrow against\\n     * @param borrower The account which would borrow the asset\\n     * @param borrowAmount The amount of underlying the account would borrow\\n     * @custom:error ActionPaused error is thrown if borrowing is paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if there is not enough collateral to borrow\\n     * @custom:error BorrowCapExceeded is thrown if the borrow cap will be exceeded should this borrow succeed\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted if vToken is enabled as collateral, otherwise only vToken\\n     */\\n    /// disable-eslint\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external override {\\n        _checkActionPauseState(vToken, Action.BORROW);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (!markets[vToken].accountMembership[borrower]) {\\n            // only vTokens may call borrowAllowed if borrower not in market\\n            _checkSenderIs(vToken);\\n\\n            // attempt to add borrower to the market or revert\\n            _addToMarket(VToken(msg.sender), borrower);\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (oracle.getUnderlyingPrice(vToken) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 borrowCap = borrowCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (borrowCap != type(uint256).max) {\\n            uint256 totalBorrows = VToken(vToken).totalBorrows();\\n            uint256 badDebt = VToken(vToken).badDebt();\\n            uint256 nextTotalBorrows = totalBorrows + borrowAmount + badDebt;\\n            if (nextTotalBorrows > borrowCap) {\\n                revert BorrowCapExceeded(vToken, borrowCap);\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            borrower,\\n            VToken(vToken),\\n            0,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n\\n        Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates borrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset whose underlying is being borrowed\\n     * @param borrower The address borrowing the underlying\\n     * @param borrowAmount The amount of the underlying asset requested to borrow\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function borrowVerify(address vToken, address borrower, uint256 borrowAmount) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to repay a borrow in the given market\\n     * @param vToken The market to verify the repay against\\n     * @param borrower The account which would borrowed the asset\\n     * @custom:error ActionPaused error is thrown if repayments are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:access Not restricted\\n     */\\n    function preRepayHook(address vToken, address borrower) external override {\\n        _checkActionPauseState(vToken, Action.REPAY);\\n\\n        oracle.updatePrice(vToken);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the liquidation should be allowed to occur\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param borrower The address of the borrower\\n     * @param repayAmount The amount of underlying being repaid\\n     * @param skipLiquidityCheck Allows the borrow to be liquidated regardless of the account liquidity\\n     * @custom:error ActionPaused error is thrown if liquidations are paused in this market\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error TooMuchRepay error is thrown if the liquidator is trying to repay more than allowed by close factor\\n     * @custom:error MinimalCollateralViolated is thrown if the users' total collateral is lower than the threshold for non-batch liquidations\\n     * @custom:error InsufficientShortfall is thrown when trying to liquidate a healthy account\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     */\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        // Pause Action.LIQUIDATE on BORROWED TOKEN to prevent liquidating it.\\n        // If we want to pause liquidating to vTokenCollateral, we should pause\\n        // Action.SEIZE on it\\n        _checkActionPauseState(vTokenBorrowed, Action.LIQUIDATE);\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(address(vTokenBorrowed));\\n        }\\n        if (!markets[vTokenCollateral].isListed) {\\n            revert MarketNotListed(address(vTokenCollateral));\\n        }\\n\\n        uint256 borrowBalance = VToken(vTokenBorrowed).borrowBalanceStored(borrower);\\n\\n        /* Allow accounts to be liquidated if it is a forced liquidation */\\n        if (skipLiquidityCheck || isForcedLiquidationEnabled[vTokenBorrowed]) {\\n            if (repayAmount > borrowBalance) {\\n                revert TooMuchRepay();\\n            }\\n            return;\\n        }\\n\\n        /* The borrower must have shortfall and collateral > threshold in order to be liquidatable */\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral <= minLiquidatableCollateral) {\\n            /* The liquidator should use either liquidateAccount or healAccount */\\n            revert MinimalCollateralViolated(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        /* The liquidator may not repay more than what is allowed by the closeFactor */\\n        uint256 maxClose = mul_ScalarTruncate(Exp({ mantissa: closeFactorMantissa }), borrowBalance);\\n        if (repayAmount > maxClose) {\\n            revert TooMuchRepay();\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the seizing of assets should be allowed to occur\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param seizerContract Contract that tries to seize the asset (either borrowed vToken or Comptroller)\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @custom:error ActionPaused error is thrown if seizing this type of collateral is paused\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error ComptrollerMismatch error is when seizer contract or seized asset belong to different pools\\n     * @custom:access Not restricted\\n     */\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address seizerContract,\\n        address liquidator,\\n        address borrower\\n    ) external override {\\n        // Pause Action.SEIZE on COLLATERAL to prevent seizing it.\\n        // If we want to pause liquidating vTokenBorrowed, we should pause\\n        // Action.LIQUIDATE on it\\n        _checkActionPauseState(vTokenCollateral, Action.SEIZE);\\n\\n        Market storage market = markets[vTokenCollateral];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(vTokenCollateral);\\n        }\\n\\n        if (seizerContract == address(this)) {\\n            // If Comptroller is the seizer, just check if collateral's comptroller\\n            // is equal to the current address\\n            if (address(VToken(vTokenCollateral).comptroller()) != address(this)) {\\n                revert ComptrollerMismatch();\\n            }\\n        } else {\\n            // If the seizer is not the Comptroller, check that the seizer is a\\n            // listed market, and that the markets' comptrollers match\\n            if (!markets[seizerContract].isListed) {\\n                revert MarketNotListed(seizerContract);\\n            }\\n            if (VToken(vTokenCollateral).comptroller() != VToken(seizerContract).comptroller()) {\\n                revert ComptrollerMismatch();\\n            }\\n        }\\n\\n        if (!market.accountMembership[borrower]) {\\n            revert MarketNotCollateral(vTokenCollateral, borrower);\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vTokenCollateral);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, borrower);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, liquidator);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to transfer tokens in the given market\\n     * @param vToken The market to verify the transfer against\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external override {\\n        _checkActionPauseState(vToken, Action.TRANSFER);\\n\\n        // Currently the only consideration is whether or not\\n        //  the src is allowed to redeem this many tokens\\n        _checkRedeemAllowed(vToken, src, transferTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, src);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, dst);\\n        }\\n    }\\n\\n    /*** Pool-level operations ***/\\n\\n    /**\\n     * @notice Seizes all the remaining collateral, makes msg.sender repay the existing\\n     *   borrows, and treats the rest of the debt as bad debt (for each market).\\n     *   The sender has to repay a certain percentage of the debt, computed as\\n     *   collateral / (borrows * liquidationIncentive).\\n     * @param user account to heal\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for healing\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function healAccount(address user) external {\\n        VToken[] memory userAssets = getAssetsIn(user);\\n        uint256 userAssetsCount = userAssets.length;\\n\\n        address liquidator = msg.sender;\\n        {\\n            ResilientOracleInterface oracle_ = oracle;\\n            // We need all user's markets to be fresh for the computations to be correct\\n            for (uint256 i; i < userAssetsCount; ++i) {\\n                userAssets[i].accrueInterest();\\n                oracle_.updatePrice(address(userAssets[i]));\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(user, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        // percentage = collateral / (borrows * liquidation incentive)\\n        Exp memory collateral = Exp({ mantissa: snapshot.totalCollateral });\\n        Exp memory scaledBorrows = mul_(\\n            Exp({ mantissa: snapshot.borrows }),\\n            Exp({ mantissa: liquidationIncentiveMantissa })\\n        );\\n\\n        Exp memory percentage = div_(collateral, scaledBorrows);\\n        if (lessThanExp(Exp({ mantissa: MANTISSA_ONE }), percentage)) {\\n            revert CollateralExceedsThreshold(scaledBorrows.mantissa, collateral.mantissa);\\n        }\\n\\n        for (uint256 i; i < userAssetsCount; ++i) {\\n            VToken market = userAssets[i];\\n\\n            (uint256 tokens, uint256 borrowBalance, ) = _safeGetAccountSnapshot(market, user);\\n            uint256 repaymentAmount = mul_ScalarTruncate(percentage, borrowBalance);\\n\\n            // Seize the entire collateral\\n            if (tokens != 0) {\\n                market.seize(liquidator, user, tokens);\\n            }\\n            // Repay a certain percentage of the borrow, forgive the rest\\n            if (borrowBalance != 0) {\\n                market.healBorrow(liquidator, user, repaymentAmount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Liquidates all borrows of the borrower. Callable only if the collateral is less than\\n     *   a predefined threshold, and the account collateral can be seized to cover all borrows. If\\n     *   the collateral is higher than the threshold, use regular liquidations. If the collateral is\\n     *   below the threshold, and the account is insolvent, use healAccount.\\n     * @param borrower the borrower address\\n     * @param orders an array of liquidation orders\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for a batch liquidation\\n     * @custom:error InsufficientCollateral error is thrown when there is not enough collateral to cover the debt\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function liquidateAccount(address borrower, LiquidationOrder[] calldata orders) external {\\n        // We will accrue interest and update the oracle prices later during the liquidation\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            // You should use the regular vToken.liquidateBorrow(...) call\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        uint256 collateralToSeize = mul_ScalarTruncate(\\n            Exp({ mantissa: liquidationIncentiveMantissa }),\\n            snapshot.borrows\\n        );\\n        if (collateralToSeize >= snapshot.totalCollateral) {\\n            // There is not enough collateral to seize. Use healBorrow to repay some part of the borrow\\n            // and record bad debt.\\n            revert InsufficientCollateral(collateralToSeize, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        uint256 ordersCount = orders.length;\\n\\n        _ensureMaxLoops(ordersCount / 2);\\n\\n        for (uint256 i; i < ordersCount; ++i) {\\n            if (!markets[address(orders[i].vTokenBorrowed)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenBorrowed));\\n            }\\n            if (!markets[address(orders[i].vTokenCollateral)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenCollateral));\\n            }\\n\\n            LiquidationOrder calldata order = orders[i];\\n            order.vTokenBorrowed.forceLiquidateBorrow(\\n                msg.sender,\\n                borrower,\\n                order.repayAmount,\\n                order.vTokenCollateral,\\n                true\\n            );\\n        }\\n\\n        VToken[] memory borrowMarkets = getAssetsIn(borrower);\\n        uint256 marketsCount = borrowMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            (, uint256 borrowBalance, ) = _safeGetAccountSnapshot(borrowMarkets[i], borrower);\\n            require(borrowBalance == 0, \\\"Nonzero borrow balance after liquidation\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets the closeFactor to use when liquidating borrows\\n     * @param newCloseFactorMantissa New close factor, scaled by 1e18\\n     * @custom:event Emits NewCloseFactor on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCloseFactor(uint256 newCloseFactorMantissa) external {\\n        _checkAccessAllowed(\\\"setCloseFactor(uint256)\\\");\\n        require(MAX_CLOSE_FACTOR_MANTISSA >= newCloseFactorMantissa, \\\"Close factor greater than maximum close factor\\\");\\n        require(MIN_CLOSE_FACTOR_MANTISSA <= newCloseFactorMantissa, \\\"Close factor smaller than minimum close factor\\\");\\n\\n        uint256 oldCloseFactorMantissa = closeFactorMantissa;\\n        closeFactorMantissa = newCloseFactorMantissa;\\n        emit NewCloseFactor(oldCloseFactorMantissa, newCloseFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Sets the collateralFactor for a market\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param vToken The market to set the factor on\\n     * @param newCollateralFactorMantissa The new collateral factor, scaled by 1e18\\n     * @param newLiquidationThresholdMantissa The new liquidation threshold, scaled by 1e18\\n     * @custom:event Emits NewCollateralFactor when collateral factor is updated\\n     *    and NewLiquidationThreshold when liquidation threshold is updated\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InvalidCollateralFactor error is thrown when collateral factor is too high\\n     * @custom:error InvalidLiquidationThreshold error is thrown when liquidation threshold is lower than collateral factor\\n     * @custom:error PriceError is thrown when the oracle returns an invalid price for the asset\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCollateralFactor(\\n        VToken vToken,\\n        uint256 newCollateralFactorMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    ) external {\\n        _checkAccessAllowed(\\\"setCollateralFactor(address,uint256,uint256)\\\");\\n\\n        // Verify market is listed\\n        Market storage market = markets[address(vToken)];\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Check collateral factor <= 0.9\\n        if (newCollateralFactorMantissa > MAX_COLLATERAL_FACTOR_MANTISSA) {\\n            revert InvalidCollateralFactor();\\n        }\\n\\n        // Ensure that liquidation threshold <= 1\\n        if (newLiquidationThresholdMantissa > MANTISSA_ONE) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // Ensure that liquidation threshold >= CF\\n        if (newLiquidationThresholdMantissa < newCollateralFactorMantissa) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // If collateral factor != 0, fail if price == 0\\n        if (newCollateralFactorMantissa != 0 && oracle.getUnderlyingPrice(address(vToken)) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 oldCollateralFactorMantissa = market.collateralFactorMantissa;\\n        if (newCollateralFactorMantissa != oldCollateralFactorMantissa) {\\n            market.collateralFactorMantissa = newCollateralFactorMantissa;\\n            emit NewCollateralFactor(vToken, oldCollateralFactorMantissa, newCollateralFactorMantissa);\\n        }\\n\\n        uint256 oldLiquidationThresholdMantissa = market.liquidationThresholdMantissa;\\n        if (newLiquidationThresholdMantissa != oldLiquidationThresholdMantissa) {\\n            market.liquidationThresholdMantissa = newLiquidationThresholdMantissa;\\n            emit NewLiquidationThreshold(vToken, oldLiquidationThresholdMantissa, newLiquidationThresholdMantissa);\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets liquidationIncentive\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newLiquidationIncentiveMantissa New liquidationIncentive scaled by 1e18\\n     * @custom:event Emits NewLiquidationIncentive on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setLiquidationIncentive(uint256 newLiquidationIncentiveMantissa) external {\\n        require(newLiquidationIncentiveMantissa >= MANTISSA_ONE, \\\"liquidation incentive should be greater than 1e18\\\");\\n\\n        _checkAccessAllowed(\\\"setLiquidationIncentive(uint256)\\\");\\n\\n        // Save current value for use in log\\n        uint256 oldLiquidationIncentiveMantissa = liquidationIncentiveMantissa;\\n\\n        // Set liquidation incentive to new incentive\\n        liquidationIncentiveMantissa = newLiquidationIncentiveMantissa;\\n\\n        // Emit event with old incentive, new incentive\\n        emit NewLiquidationIncentive(oldLiquidationIncentiveMantissa, newLiquidationIncentiveMantissa);\\n    }\\n\\n    /**\\n     * @notice Add the market to the markets mapping and set it as listed\\n     * @dev Only callable by the PoolRegistry\\n     * @param vToken The address of the market (token) to list\\n     * @custom:error MarketAlreadyListed is thrown if the market is already listed in this pool\\n     * @custom:access Only PoolRegistry\\n     */\\n    function supportMarket(VToken vToken) external {\\n        _checkSenderIs(poolRegistry);\\n\\n        if (markets[address(vToken)].isListed) {\\n            revert MarketAlreadyListed(address(vToken));\\n        }\\n\\n        require(vToken.isVToken(), \\\"Comptroller: Invalid vToken\\\"); // Sanity check to make sure its really a VToken\\n\\n        Market storage newMarket = markets[address(vToken)];\\n        newMarket.isListed = true;\\n        newMarket.collateralFactorMantissa = 0;\\n        newMarket.liquidationThresholdMantissa = 0;\\n\\n        _addMarket(address(vToken));\\n\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            rewardsDistributors[i].initializeMarket(address(vToken));\\n        }\\n\\n        emit MarketSupported(vToken);\\n    }\\n\\n    /**\\n     * @notice Set the given borrow caps for the given vToken markets. Borrowing that brings total borrows to or above borrow cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A borrow cap of type(uint256).max corresponds to unlimited borrowing.\\n     * @dev Borrow caps smaller than the current total borrows are accepted. This way, new borrows will not be allowed\\n            until the total borrows amount goes below the new borrow cap\\n     * @param vTokens The addresses of the markets (tokens) to change the borrow caps for\\n     * @param newBorrowCaps The new borrow cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited borrowing.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketBorrowCaps(VToken[] calldata vTokens, uint256[] calldata newBorrowCaps) external {\\n        _checkAccessAllowed(\\\"setMarketBorrowCaps(address[],uint256[])\\\");\\n\\n        uint256 numMarkets = vTokens.length;\\n        uint256 numBorrowCaps = newBorrowCaps.length;\\n\\n        require(numMarkets != 0 && numMarkets == numBorrowCaps, \\\"invalid input\\\");\\n\\n        _ensureMaxLoops(numMarkets);\\n\\n        for (uint256 i; i < numMarkets; ++i) {\\n            borrowCaps[address(vTokens[i])] = newBorrowCaps[i];\\n            emit NewBorrowCap(vTokens[i], newBorrowCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given supply caps for the given vToken markets. Supply that brings total Supply to or above supply cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A supply cap of type(uint256).max corresponds to unlimited supply.\\n     * @dev Supply caps smaller than the current total supplies are accepted. This way, new supplies will not be allowed\\n            until the total supplies amount goes below the new supply cap\\n     * @param vTokens The addresses of the markets (tokens) to change the supply caps for\\n     * @param newSupplyCaps The new supply cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited supply.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketSupplyCaps(VToken[] calldata vTokens, uint256[] calldata newSupplyCaps) external {\\n        _checkAccessAllowed(\\\"setMarketSupplyCaps(address[],uint256[])\\\");\\n        uint256 vTokensCount = vTokens.length;\\n\\n        require(vTokensCount != 0, \\\"invalid number of markets\\\");\\n        require(vTokensCount == newSupplyCaps.length, \\\"invalid number of markets\\\");\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            supplyCaps[address(vTokens[i])] = newSupplyCaps[i];\\n            emit NewSupplyCap(vTokens[i], newSupplyCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Pause/unpause specified actions\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param marketsList Markets to pause/unpause the actions on\\n     * @param actionsList List of action ids to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setActionsPaused(VToken[] calldata marketsList, Action[] calldata actionsList, bool paused) external {\\n        _checkAccessAllowed(\\\"setActionsPaused(address[],uint256[],bool)\\\");\\n\\n        uint256 marketsCount = marketsList.length;\\n        uint256 actionsCount = actionsList.length;\\n\\n        _ensureMaxLoops(marketsCount * actionsCount);\\n\\n        for (uint256 marketIdx; marketIdx < marketsCount; ++marketIdx) {\\n            for (uint256 actionIdx; actionIdx < actionsCount; ++actionIdx) {\\n                _setActionPaused(address(marketsList[marketIdx]), actionsList[actionIdx], paused);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given collateral threshold for non-batch liquidations. Regular liquidations\\n     *   will fail if the collateral amount is less than this threshold. Liquidators should use batch\\n     *   operations like liquidateAccount or healAccount.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newMinLiquidatableCollateral The new min liquidatable collateral (in USD).\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMinLiquidatableCollateral(uint256 newMinLiquidatableCollateral) external {\\n        _checkAccessAllowed(\\\"setMinLiquidatableCollateral(uint256)\\\");\\n\\n        uint256 oldMinLiquidatableCollateral = minLiquidatableCollateral;\\n        minLiquidatableCollateral = newMinLiquidatableCollateral;\\n        emit NewMinLiquidatableCollateral(oldMinLiquidatableCollateral, newMinLiquidatableCollateral);\\n    }\\n\\n    /**\\n     * @notice Add a new RewardsDistributor and initialize it with all markets. We can add several RewardsDistributor\\n     * contracts with the same rewardToken, and there could be overlaping among them considering the last reward slot (block or second)\\n     * @dev Only callable by the admin\\n     * @param _rewardsDistributor Address of the RewardDistributor contract to add\\n     * @custom:access Only Governance\\n     * @custom:event Emits NewRewardsDistributor with distributor address\\n     */\\n    function addRewardsDistributor(RewardsDistributor _rewardsDistributor) external onlyOwner {\\n        require(!rewardsDistributorExists[address(_rewardsDistributor)], \\\"already exists\\\");\\n\\n        uint256 rewardsDistributorsLen = rewardsDistributors.length;\\n        _ensureMaxLoops(rewardsDistributorsLen + 1);\\n\\n        rewardsDistributors.push(_rewardsDistributor);\\n        rewardsDistributorExists[address(_rewardsDistributor)] = true;\\n\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            _rewardsDistributor.initializeMarket(address(allMarkets[i]));\\n        }\\n\\n        emit NewRewardsDistributor(address(_rewardsDistributor), address(_rewardsDistributor.rewardToken()));\\n    }\\n\\n    /**\\n     * @notice Sets a new price oracle for the Comptroller\\n     * @dev Only callable by the admin\\n     * @param newOracle Address of the new price oracle to set\\n     * @custom:event Emits NewPriceOracle on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when the new oracle address is zero\\n     */\\n    function setPriceOracle(ResilientOracleInterface newOracle) external onlyOwner {\\n        ensureNonzeroAddress(address(newOracle));\\n\\n        ResilientOracleInterface oldOracle = oracle;\\n        oracle = newOracle;\\n        emit NewPriceOracle(oldOracle, newOracle);\\n    }\\n\\n    /**\\n     * @notice Set the for loop iteration limit to avoid DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Sets the prime token contract for the comptroller\\n     * @param _prime Address of the Prime contract\\n     */\\n    function setPrimeToken(IPrime _prime) external onlyOwner {\\n        ensureNonzeroAddress(address(_prime));\\n\\n        emit NewPrimeToken(prime, _prime);\\n        prime = _prime;\\n    }\\n\\n    /**\\n     * @notice Enables forced liquidations for a market. If forced liquidation is enabled,\\n     * borrows in the market may be liquidated regardless of the account liquidity\\n     * @param vTokenBorrowed Borrowed vToken\\n     * @param enable Whether to enable forced liquidations\\n     */\\n    function setForcedLiquidation(address vTokenBorrowed, bool enable) external {\\n        _checkAccessAllowed(\\\"setForcedLiquidation(address,bool)\\\");\\n        ensureNonzeroAddress(vTokenBorrowed);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(vTokenBorrowed);\\n        }\\n\\n        isForcedLiquidationEnabled[vTokenBorrowed] = enable;\\n        emit IsForcedLiquidationEnabledUpdated(vTokenBorrowed, enable);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to liquidation threshold requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of liquidation threshold requirements,\\n     * @return shortfall Account shortfall below liquidation threshold requirements\\n     */\\n    function getAccountLiquidity(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getLiquidationThreshold);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to collateral requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of collateral requirements,\\n     * @return shortfall Account shortfall below collateral requirements\\n     */\\n    function getBorrowingPower(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getCollateralFactor);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine what the account liquidity would be if the given amounts were redeemed/borrowed\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Hypothetical account liquidity in excess of collateral requirements,\\n     * @return shortfall Hypothetical account shortfall below collateral requirements\\n     */\\n    function getHypotheticalAccountLiquidity(\\n        address account,\\n        address vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            account,\\n            VToken(vTokenModify),\\n            redeemTokens,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Return all of the markets\\n     * @dev The automatic getter may be used to access an individual market.\\n     * @return markets The list of market addresses\\n     */\\n    function getAllMarkets() external view override returns (VToken[] memory) {\\n        return allMarkets;\\n    }\\n\\n    /**\\n     * @notice Check if a market is marked as listed (active)\\n     * @param vToken vToken Address for the market to check\\n     * @return listed True if listed otherwise false\\n     */\\n    function isMarketListed(VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].isListed;\\n    }\\n\\n    /*** Assets You Are In ***/\\n\\n    /**\\n     * @notice Returns whether the given account is entered in a given market\\n     * @param account The address of the account to check\\n     * @param vToken The vToken to check\\n     * @return True if the account is in the market specified, otherwise false.\\n     */\\n    function checkMembership(address account, VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].accountMembership[account];\\n    }\\n\\n    /**\\n     * @notice Calculate number of tokens of collateral asset to seize given an underlying amount\\n     * @dev Used in liquidation (called in vToken.liquidateBorrowFresh)\\n     * @param vTokenBorrowed The address of the borrowed vToken\\n     * @param vTokenCollateral The address of the collateral vToken\\n     * @param actualRepayAmount The amount of vTokenBorrowed underlying to convert into vTokenCollateral tokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return tokensToSeize Number of vTokenCollateral tokens to be seized in a liquidation\\n     * @custom:error PriceError if the oracle returns an invalid price\\n     */\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 actualRepayAmount\\n    ) external view override returns (uint256 error, uint256 tokensToSeize) {\\n        /* Read oracle prices for borrowed and collateral markets */\\n        uint256 priceBorrowedMantissa = _safeGetUnderlyingPrice(VToken(vTokenBorrowed));\\n        uint256 priceCollateralMantissa = _safeGetUnderlyingPrice(VToken(vTokenCollateral));\\n\\n        /*\\n         * Get the exchange rate and calculate the number of collateral tokens to seize:\\n         *  seizeAmount = actualRepayAmount * liquidationIncentive * priceBorrowed / priceCollateral\\n         *  seizeTokens = seizeAmount / exchangeRate\\n         *   = actualRepayAmount * (liquidationIncentive * priceBorrowed) / (priceCollateral * exchangeRate)\\n         */\\n        uint256 exchangeRateMantissa = VToken(vTokenCollateral).exchangeRateStored(); // Note: reverts on error\\n        uint256 seizeTokens;\\n        Exp memory numerator;\\n        Exp memory denominator;\\n        Exp memory ratio;\\n\\n        numerator = mul_(Exp({ mantissa: liquidationIncentiveMantissa }), Exp({ mantissa: priceBorrowedMantissa }));\\n        denominator = mul_(Exp({ mantissa: priceCollateralMantissa }), Exp({ mantissa: exchangeRateMantissa }));\\n        ratio = div_(numerator, denominator);\\n\\n        seizeTokens = mul_ScalarTruncate(ratio, actualRepayAmount);\\n\\n        return (NO_ERROR, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Returns reward speed given a vToken\\n     * @param vToken The vToken to get the reward speeds for\\n     * @return rewardSpeeds Array of total supply and borrow speeds and reward token for all reward distributors\\n     */\\n    function getRewardsByMarket(address vToken) external view returns (RewardSpeeds[] memory rewardSpeeds) {\\n        uint256 rewardsDistributorsLength = rewardsDistributors.length;\\n        rewardSpeeds = new RewardSpeeds[](rewardsDistributorsLength);\\n        for (uint256 i; i < rewardsDistributorsLength; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            address rewardToken = address(rewardsDistributor.rewardToken());\\n            rewardSpeeds[i] = RewardSpeeds({\\n                rewardToken: rewardToken,\\n                supplySpeed: rewardsDistributor.rewardTokenSupplySpeeds(vToken),\\n                borrowSpeed: rewardsDistributor.rewardTokenBorrowSpeeds(vToken)\\n            });\\n        }\\n        return rewardSpeeds;\\n    }\\n\\n    /**\\n     * @notice Return all reward distributors for this pool\\n     * @return Array of RewardDistributor addresses\\n     */\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory) {\\n        return rewardsDistributors;\\n    }\\n\\n    /**\\n     * @notice A marker method that returns true for a valid Comptroller contract\\n     * @return Always true\\n     */\\n    function isComptroller() external pure override returns (bool) {\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Update the prices of all the tokens associated with the provided account\\n     * @param account Address of the account to get associated tokens with\\n     */\\n    function updatePrices(address account) public {\\n        VToken[] memory vTokens = getAssetsIn(account);\\n        uint256 vTokensCount = vTokens.length;\\n\\n        ResilientOracleInterface oracle_ = oracle;\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            oracle_.updatePrice(address(vTokens[i]));\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if a certain action is paused on a market\\n     * @param market vToken address\\n     * @param action Action to check\\n     * @return paused True if the action is paused otherwise false\\n     */\\n    function actionPaused(address market, Action action) public view returns (bool) {\\n        return _actionPaused[market][action];\\n    }\\n\\n    /**\\n     * @notice Returns the assets an account has entered\\n     * @param account The address of the account to pull assets for\\n     * @return A list with the assets the account has entered\\n     */\\n    function getAssetsIn(address account) public view returns (VToken[] memory) {\\n        uint256 len;\\n        VToken[] memory _accountAssets = accountAssets[account];\\n        uint256 _accountAssetsLength = _accountAssets.length;\\n\\n        VToken[] memory assetsIn = new VToken[](_accountAssetsLength);\\n\\n        for (uint256 i; i < _accountAssetsLength; ++i) {\\n            Market storage market = markets[address(_accountAssets[i])];\\n            if (market.isListed) {\\n                assetsIn[len] = _accountAssets[i];\\n                ++len;\\n            }\\n        }\\n\\n        assembly {\\n            mstore(assetsIn, len)\\n        }\\n\\n        return assetsIn;\\n    }\\n\\n    /**\\n     * @notice Add the market to the borrower's \\\"assets in\\\" for liquidity calculations\\n     * @param vToken The market to enter\\n     * @param borrower The address of the account to modify\\n     */\\n    function _addToMarket(VToken vToken, address borrower) internal {\\n        _checkActionPauseState(address(vToken), Action.ENTER_MARKET);\\n        Market storage marketToJoin = markets[address(vToken)];\\n\\n        if (!marketToJoin.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (marketToJoin.accountMembership[borrower]) {\\n            // already joined\\n            return;\\n        }\\n\\n        // survived the gauntlet, add to list\\n        // NOTE: we store these somewhat redundantly as a significant optimization\\n        //  this avoids having to iterate through the list for the most common use cases\\n        //  that is, only when we need to perform liquidity checks\\n        //  and not whenever we want to check if an account is in a particular market\\n        marketToJoin.accountMembership[borrower] = true;\\n        accountAssets[borrower].push(vToken);\\n\\n        emit MarketEntered(vToken, borrower);\\n    }\\n\\n    /**\\n     * @notice Internal function to validate that a market hasn't already been added\\n     * and if it hasn't adds it\\n     * @param vToken The market to support\\n     */\\n    function _addMarket(address vToken) internal {\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            if (allMarkets[i] == VToken(vToken)) {\\n                revert MarketAlreadyListed(vToken);\\n            }\\n        }\\n        allMarkets.push(VToken(vToken));\\n        marketsCount = allMarkets.length;\\n        _ensureMaxLoops(marketsCount);\\n    }\\n\\n    /**\\n     * @dev Pause/unpause an action on a market\\n     * @param market Market to pause/unpause the action on\\n     * @param action Action id to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     */\\n    function _setActionPaused(address market, Action action, bool paused) internal {\\n        require(markets[market].isListed, \\\"cannot pause a market that is not listed\\\");\\n        _actionPaused[market][action] = paused;\\n        emit ActionPausedMarket(VToken(market), action, paused);\\n    }\\n\\n    /**\\n     * @dev Internal function to check that vTokens can be safely redeemed for the underlying asset.\\n     * @param vToken Address of the vTokens to redeem\\n     * @param redeemer Account redeeming the tokens\\n     * @param redeemTokens The number of tokens to redeem\\n     */\\n    function _checkRedeemAllowed(address vToken, address redeemer, uint256 redeemTokens) internal {\\n        Market storage market = markets[vToken];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        /* If the redeemer is not 'in' the market, then we can bypass the liquidity check */\\n        if (!market.accountMembership[redeemer]) {\\n            return;\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(redeemer);\\n\\n        /* Otherwise, perform a hypothetical liquidity check to guard against shortfall */\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            redeemer,\\n            VToken(vToken),\\n            redeemTokens,\\n            0,\\n            _getCollateralFactor\\n        );\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n    }\\n\\n    /**\\n     * @notice Get the total collateral, weighted collateral, borrow balance, liquidity, shortfall\\n     * @param account The account to get the snapshot for\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n     *  liquidation threshold. Accepts the address of the vToken and returns the weight as Exp.\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getCurrentLiquiditySnapshot(\\n        address account,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        return _getHypotheticalLiquiditySnapshot(account, VToken(address(0)), 0, 0, weight);\\n    }\\n\\n    /**\\n     * @notice Determine what the supply/borrow balances would be if the given amounts were redeemed/borrowed\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n         liquidation threshold. Accepts the address of the VToken and returns the weight\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getHypotheticalLiquiditySnapshot(\\n        address account,\\n        VToken vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        // For each asset the account is in\\n        VToken[] memory assets = getAssetsIn(account);\\n        uint256 assetsCount = assets.length;\\n\\n        for (uint256 i; i < assetsCount; ++i) {\\n            VToken asset = assets[i];\\n\\n            // Read the balances and exchange rate from the vToken\\n            (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) = _safeGetAccountSnapshot(\\n                asset,\\n                account\\n            );\\n\\n            // Get the normalized price of the asset\\n            Exp memory oraclePrice = Exp({ mantissa: _safeGetUnderlyingPrice(asset) });\\n\\n            // Pre-compute conversion factors from vTokens -> usd\\n            Exp memory vTokenPrice = mul_(Exp({ mantissa: exchangeRateMantissa }), oraclePrice);\\n            Exp memory weightedVTokenPrice = mul_(weight(asset), vTokenPrice);\\n\\n            // weightedCollateral += weightedVTokenPrice * vTokenBalance\\n            snapshot.weightedCollateral = mul_ScalarTruncateAddUInt(\\n                weightedVTokenPrice,\\n                vTokenBalance,\\n                snapshot.weightedCollateral\\n            );\\n\\n            // totalCollateral += vTokenPrice * vTokenBalance\\n            snapshot.totalCollateral = mul_ScalarTruncateAddUInt(vTokenPrice, vTokenBalance, snapshot.totalCollateral);\\n\\n            // borrows += oraclePrice * borrowBalance\\n            snapshot.borrows = mul_ScalarTruncateAddUInt(oraclePrice, borrowBalance, snapshot.borrows);\\n\\n            // Calculate effects of interacting with vTokenModify\\n            if (asset == vTokenModify) {\\n                // redeem effect\\n                // effects += tokensToDenom * redeemTokens\\n                snapshot.effects = mul_ScalarTruncateAddUInt(weightedVTokenPrice, redeemTokens, snapshot.effects);\\n\\n                // borrow effect\\n                // effects += oraclePrice * borrowAmount\\n                snapshot.effects = mul_ScalarTruncateAddUInt(oraclePrice, borrowAmount, snapshot.effects);\\n            }\\n        }\\n\\n        uint256 borrowPlusEffects = snapshot.borrows + snapshot.effects;\\n        // These are safe, as the underflow condition is checked first\\n        unchecked {\\n            if (snapshot.weightedCollateral > borrowPlusEffects) {\\n                snapshot.liquidity = snapshot.weightedCollateral - borrowPlusEffects;\\n                snapshot.shortfall = 0;\\n            } else {\\n                snapshot.liquidity = 0;\\n                snapshot.shortfall = borrowPlusEffects - snapshot.weightedCollateral;\\n            }\\n        }\\n\\n        return snapshot;\\n    }\\n\\n    /**\\n     * @dev Retrieves price from oracle for an asset and checks it is nonzero\\n     * @param asset Address for asset to query price\\n     * @return Underlying price\\n     */\\n    function _safeGetUnderlyingPrice(VToken asset) internal view returns (uint256) {\\n        uint256 oraclePriceMantissa = oracle.getUnderlyingPrice(address(asset));\\n        if (oraclePriceMantissa == 0) {\\n            revert PriceError(address(asset));\\n        }\\n        return oraclePriceMantissa;\\n    }\\n\\n    /**\\n     * @dev Return collateral factor for a market\\n     * @param asset Address for asset\\n     * @return Collateral factor as exponential\\n     */\\n    function _getCollateralFactor(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].collateralFactorMantissa });\\n    }\\n\\n    /**\\n     * @dev Retrieves liquidation threshold for a market as an exponential\\n     * @param asset Address for asset to liquidation threshold\\n     * @return Liquidation threshold as exponential\\n     */\\n    function _getLiquidationThreshold(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].liquidationThresholdMantissa });\\n    }\\n\\n    /**\\n     * @dev Returns supply and borrow balances of user in vToken, reverts on failure\\n     * @param vToken Market to query\\n     * @param user Account address\\n     * @return vTokenBalance Balance of vTokens, the same as vToken.balanceOf(user)\\n     * @return borrowBalance Borrowed amount, including the interest\\n     * @return exchangeRateMantissa Stored exchange rate\\n     */\\n    function _safeGetAccountSnapshot(\\n        VToken vToken,\\n        address user\\n    ) internal view returns (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) {\\n        uint256 err;\\n        (err, vTokenBalance, borrowBalance, exchangeRateMantissa) = vToken.getAccountSnapshot(user);\\n        if (err != 0) {\\n            revert SnapshotError(address(vToken), user);\\n        }\\n        return (vTokenBalance, borrowBalance, exchangeRateMantissa);\\n    }\\n\\n    /// @notice Reverts if the call is not from expectedSender\\n    /// @param expectedSender Expected transaction sender\\n    function _checkSenderIs(address expectedSender) internal view {\\n        if (msg.sender != expectedSender) {\\n            revert UnexpectedSender(expectedSender, msg.sender);\\n        }\\n    }\\n\\n    /// @notice Reverts if a certain action is paused on a market\\n    /// @param market Market to check\\n    /// @param action Action to check\\n    function _checkActionPauseState(address market, Action action) private view {\\n        if (actionPaused(market, action)) {\\n            revert ActionPaused(market, action);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x7c6e1c6264e4681f82a9ac1bcd9155197a930033291ee5561ad97a56006f5e9c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\n\\nenum Action {\\n    MINT,\\n    REDEEM,\\n    BORROW,\\n    REPAY,\\n    SEIZE,\\n    LIQUIDATE,\\n    TRANSFER,\\n    ENTER_MARKET,\\n    EXIT_MARKET\\n}\\n\\n/**\\n * @title ComptrollerInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract.\\n */\\ninterface ComptrollerInterface {\\n    /*** Assets You Are In ***/\\n\\n    function enterMarkets(address[] calldata vTokens) external returns (uint256[] memory);\\n\\n    function exitMarket(address vToken) external returns (uint256);\\n\\n    /*** Policy Hooks ***/\\n\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external;\\n\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external;\\n\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external;\\n\\n    function preRepayHook(address vToken, address borrower) external;\\n\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external;\\n\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower\\n    ) external;\\n\\n    function borrowVerify(address vToken, address borrower, uint borrowAmount) external;\\n\\n    function mintVerify(address vToken, address minter, uint mintAmount, uint mintTokens) external;\\n\\n    function redeemVerify(address vToken, address redeemer, uint redeemAmount, uint redeemTokens) external;\\n\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer,\\n        address borrower,\\n        uint repayAmount,\\n        uint borrowerIndex\\n    ) external;\\n\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address liquidator,\\n        address borrower,\\n        uint repayAmount,\\n        uint seizeTokens\\n    ) external;\\n\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower,\\n        uint seizeTokens\\n    ) external;\\n\\n    function transferVerify(address vToken, address src, address dst, uint transferTokens) external;\\n\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external;\\n\\n    function isComptroller() external view returns (bool);\\n\\n    /*** Liquidity/Liquidation Calculations ***/\\n\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 repayAmount\\n    ) external view returns (uint256, uint256);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function actionPaused(address market, Action action) external view returns (bool);\\n}\\n\\n/**\\n * @title ComptrollerViewInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract, including only some util view functions.\\n */\\ninterface ComptrollerViewInterface {\\n    function markets(address) external view returns (bool, uint256);\\n\\n    function oracle() external view returns (ResilientOracleInterface);\\n\\n    function getAssetsIn(address) external view returns (VToken[] memory);\\n\\n    function closeFactorMantissa() external view returns (uint256);\\n\\n    function liquidationIncentiveMantissa() external view returns (uint256);\\n\\n    function minLiquidatableCollateral() external view returns (uint256);\\n\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function borrowCaps(address) external view returns (uint256);\\n\\n    function supplyCaps(address) external view returns (uint256);\\n\\n    function approvedDelegates(address user, address delegate) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xcbf7f9977472650c61345b7cbde23e81f626e1f8863bab4c6ce3dacfc7604919\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\nimport { Action } from \\\"./ComptrollerInterface.sol\\\";\\n\\n/**\\n * @title ComptrollerStorage\\n * @author Venus\\n * @notice Storage layout for the `Comptroller` contract.\\n */\\ncontract ComptrollerStorage {\\n    struct LiquidationOrder {\\n        VToken vTokenCollateral;\\n        VToken vTokenBorrowed;\\n        uint256 repayAmount;\\n    }\\n\\n    struct AccountLiquiditySnapshot {\\n        uint256 totalCollateral;\\n        uint256 weightedCollateral;\\n        uint256 borrows;\\n        uint256 effects;\\n        uint256 liquidity;\\n        uint256 shortfall;\\n    }\\n\\n    struct RewardSpeeds {\\n        address rewardToken;\\n        uint256 supplySpeed;\\n        uint256 borrowSpeed;\\n    }\\n\\n    struct Market {\\n        // Whether or not this market is listed\\n        bool isListed;\\n        //  Multiplier representing the most one can borrow against their collateral in this market.\\n        //  For instance, 0.9 to allow borrowing 90% of collateral value.\\n        //  Must be between 0 and 1, and stored as a mantissa.\\n        uint256 collateralFactorMantissa;\\n        //  Multiplier representing the collateralization after which the borrow is eligible\\n        //  for liquidation. For instance, 0.8 liquidate when the borrow is 80% of collateral\\n        //  value. Must be between 0 and collateral factor, stored as a mantissa.\\n        uint256 liquidationThresholdMantissa;\\n        // Per-market mapping of \\\"accounts in this asset\\\"\\n        mapping(address => bool) accountMembership;\\n    }\\n\\n    /**\\n     * @notice Oracle which gives the price of any given asset\\n     */\\n    ResilientOracleInterface public oracle;\\n\\n    /**\\n     * @notice Multiplier used to calculate the maximum repayAmount when liquidating a borrow\\n     */\\n    uint256 public closeFactorMantissa;\\n\\n    /**\\n     * @notice Multiplier representing the discount on collateral that a liquidator receives\\n     */\\n    uint256 public liquidationIncentiveMantissa;\\n\\n    /**\\n     * @notice Per-account mapping of \\\"assets you are in\\\"\\n     */\\n    mapping(address => VToken[]) public accountAssets;\\n\\n    /**\\n     * @notice Official mapping of vTokens -> Market metadata\\n     * @dev Used e.g. to determine if a market is supported\\n     */\\n    mapping(address => Market) public markets;\\n\\n    /// @notice A list of all markets\\n    VToken[] public allMarkets;\\n\\n    /// @notice Borrow caps enforced by borrowAllowed for each vToken address. Defaults to zero which restricts borrowing.\\n    mapping(address => uint256) public borrowCaps;\\n\\n    /// @notice Minimal collateral required for regular (non-batch) liquidations\\n    uint256 public minLiquidatableCollateral;\\n\\n    /// @notice Supply caps enforced by mintAllowed for each vToken address. Defaults to zero which corresponds to minting not allowed\\n    mapping(address => uint256) public supplyCaps;\\n\\n    /// @notice True if a certain action is paused on a certain market\\n    mapping(address => mapping(Action => bool)) internal _actionPaused;\\n\\n    // List of Reward Distributors added\\n    RewardsDistributor[] internal rewardsDistributors;\\n\\n    // Used to check if rewards distributor is added\\n    mapping(address => bool) internal rewardsDistributorExists;\\n\\n    /// @notice Flag indicating whether forced liquidation enabled for a market\\n    mapping(address => bool) public isForcedLiquidationEnabled;\\n\\n    uint256 internal constant NO_ERROR = 0;\\n\\n    // closeFactorMantissa must be strictly greater than this value\\n    uint256 internal constant MIN_CLOSE_FACTOR_MANTISSA = 0.05e18; // 0.05\\n\\n    // closeFactorMantissa must not exceed this value\\n    uint256 internal constant MAX_CLOSE_FACTOR_MANTISSA = 0.9e18; // 0.9\\n\\n    // No collateralFactorMantissa may exceed this value\\n    uint256 internal constant MAX_COLLATERAL_FACTOR_MANTISSA = 0.95e18; // 0.95\\n\\n    /// Prime token address\\n    IPrime public prime;\\n\\n    /// @notice Whether the delegate is allowed to borrow or redeem on behalf of the user\\n    //mapping(address user => mapping (address delegate => bool approved)) public approvedDelegates;\\n    mapping(address => mapping(address => bool)) public approvedDelegates;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4df44cb65ac152bac2be4b4545430e703005a74a55b72e144100b16421bd8bfd\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title TokenErrorReporter\\n * @author Venus\\n * @notice Errors that can be thrown by the `VToken` contract.\\n */\\ncontract TokenErrorReporter {\\n    uint256 public constant NO_ERROR = 0; // support legacy return codes\\n\\n    error TransferNotAllowed();\\n\\n    error MintFreshnessCheck();\\n\\n    error RedeemFreshnessCheck();\\n    error RedeemTransferOutNotPossible();\\n\\n    error BorrowFreshnessCheck();\\n    error BorrowCashNotAvailable();\\n    error DelegateNotApproved();\\n\\n    error RepayBorrowFreshnessCheck();\\n\\n    error HealBorrowUnauthorized();\\n    error ForceLiquidateBorrowUnauthorized();\\n\\n    error LiquidateFreshnessCheck();\\n    error LiquidateCollateralFreshnessCheck();\\n    error LiquidateAccrueCollateralInterestFailed(uint256 errorCode);\\n    error LiquidateLiquidatorIsBorrower();\\n    error LiquidateCloseAmountIsZero();\\n    error LiquidateCloseAmountIsUintMax();\\n\\n    error LiquidateSeizeLiquidatorIsBorrower();\\n\\n    error ProtocolSeizeShareTooBig();\\n\\n    error SetReserveFactorFreshCheck();\\n    error SetReserveFactorBoundsCheck();\\n\\n    error AddReservesFactorFreshCheck(uint256 actualAddAmount);\\n\\n    error ReduceReservesFreshCheck();\\n    error ReduceReservesCashNotAvailable();\\n    error ReduceReservesCashValidation();\\n\\n    error SetInterestRateModelFreshCheck();\\n}\\n\",\"keccak256\":\"0x7a7ced1caaac2d9242659ebd50b99f308c725ce958ac9e11f7ada404b1d97a7b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { EXP_SCALE as EXP_SCALE_, MANTISSA_ONE as MANTISSA_ONE_ } from \\\"./lib/constants.sol\\\";\\n\\n/**\\n * @title Exponential module for storing fixed-precision decimals\\n * @author Compound\\n * @notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.\\n *         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:\\n *         `Exp({mantissa: 5100000000000000000})`.\\n */\\ncontract ExponentialNoError {\\n    struct Exp {\\n        uint256 mantissa;\\n    }\\n\\n    struct Double {\\n        uint256 mantissa;\\n    }\\n\\n    uint256 internal constant EXP_SCALE = EXP_SCALE_;\\n    uint256 internal constant DOUBLE_SCALE = 1e36;\\n    uint256 internal constant HALF_EXP_SCALE = EXP_SCALE / 2;\\n    uint256 internal constant MANTISSA_ONE = MANTISSA_ONE_;\\n\\n    /**\\n     * @dev Truncates the given exp to a whole number value.\\n     *      For example, truncate(Exp{mantissa: 15 * EXP_SCALE}) = 15\\n     */\\n    function truncate(Exp memory exp) internal pure returns (uint256) {\\n        // Note: We are not using careful math here as we're performing a division that cannot fail\\n        return exp.mantissa / EXP_SCALE;\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, then truncate to return an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncate(Exp memory a, uint256 scalar) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return truncate(product);\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncateAddUInt(Exp memory a, uint256 scalar, uint256 addend) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return add_(truncate(product), addend);\\n    }\\n\\n    /**\\n     * @dev Checks if first Exp is less than second Exp.\\n     */\\n    function lessThanExp(Exp memory left, Exp memory right) internal pure returns (bool) {\\n        return left.mantissa < right.mantissa;\\n    }\\n\\n    function safe224(uint256 n, string memory errorMessage) internal pure returns (uint224) {\\n        require(n <= type(uint224).max, errorMessage);\\n        return uint224(n);\\n    }\\n\\n    function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) {\\n        require(n <= type(uint32).max, errorMessage);\\n        return uint32(n);\\n    }\\n\\n    function add_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a + b;\\n    }\\n\\n    function sub_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a - b;\\n    }\\n\\n    function mul_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b.mantissa) / EXP_SCALE });\\n    }\\n\\n    function mul_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / EXP_SCALE;\\n    }\\n\\n    function mul_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b.mantissa) / DOUBLE_SCALE });\\n    }\\n\\n    function mul_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / DOUBLE_SCALE;\\n    }\\n\\n    function mul_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a * b;\\n    }\\n\\n    function div_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(mul_(a.mantissa, EXP_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, EXP_SCALE), b.mantissa);\\n    }\\n\\n    function div_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a.mantissa, DOUBLE_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, DOUBLE_SCALE), b.mantissa);\\n    }\\n\\n    function div_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a / b;\\n    }\\n\\n    function fraction(uint256 a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a, DOUBLE_SCALE), b) });\\n    }\\n}\\n\",\"keccak256\":\"0x8afbe8a24fe3539c124e718681ed3dcebd24c40dd53095786c0155998213b9b0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title Compound's InterestRateModel Interface\\n * @author Compound\\n */\\nabstract contract InterestRateModel {\\n    /**\\n     * @notice Calculates the current borrow interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getBorrowRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Calculates the current supply interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param reserveFactorMantissa The current reserve factor the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getSupplyRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 reserveFactorMantissa,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is an InterestRateModel contract (for inspection)\\n     * @return Always true\\n     */\\n    function isInterestRateModel() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0xc4fda1ab75ebe4b187b707c4f10c58780f343cf343c537f641dc75d3cd28ab51\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title MaxLoopsLimitHelper\\n * @author Venus\\n * @notice Abstract contract used to avoid collection with too many items that would generate gas errors and DoS.\\n */\\nabstract contract MaxLoopsLimitHelper {\\n    // Limit for the loops to avoid the DOS\\n    uint256 public maxLoopsLimit;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when max loops limit is set\\n    event MaxLoopsLimitUpdated(uint256 oldMaxLoopsLimit, uint256 newmaxLoopsLimit);\\n\\n    /// @notice Thrown an error on maxLoopsLimit exceeds for any loop\\n    error MaxLoopsLimitExceeded(uint256 loopsLimit, uint256 requiredLoops);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function _setMaxLoopsLimit(uint256 limit) internal {\\n        require(limit > maxLoopsLimit, \\\"Comptroller: Invalid maxLoopsLimit\\\");\\n\\n        uint256 oldMaxLoopsLimit = maxLoopsLimit;\\n        maxLoopsLimit = limit;\\n\\n        emit MaxLoopsLimitUpdated(oldMaxLoopsLimit, limit);\\n    }\\n\\n    /**\\n     * @notice Compare the maxLoopsLimit with number of the times loop iterate\\n     * @param len Length of the loops iterate\\n     * @custom:error MaxLoopsLimitExceeded error is thrown when loops length exceeds maxLoopsLimit\\n     */\\n    function _ensureMaxLoops(uint256 len) internal view {\\n        if (len > maxLoopsLimit) {\\n            revert MaxLoopsLimitExceeded(maxLoopsLimit, len);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x4c25e30635485d162177effa384eee51768b0141a567a0da16ff6ad673274166\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\n\\nimport { ExponentialNoError } from \\\"../ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"../VToken.sol\\\";\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"../MaxLoopsLimitHelper.sol\\\";\\nimport { RewardsDistributorStorage } from \\\"./RewardsDistributorStorage.sol\\\";\\n\\n/**\\n * @title `RewardsDistributor`\\n * @author Venus\\n * @notice Contract used to configure, track and distribute rewards to users based on their actions (borrows and supplies) in the protocol.\\n * Users can receive additional rewards through a `RewardsDistributor`. Each `RewardsDistributor` proxy is initialized with a specific reward\\n * token and `Comptroller`, which can then distribute the reward token to users that supply or borrow in the associated pool.\\n * Authorized users can set the reward token borrow and supply speeds for each market in the pool. This sets a fixed amount of reward\\n * token to be released each slot (block or second) for borrowers and suppliers, which is distributed based on a user\\u2019s percentage of the borrows or supplies\\n * respectively. The owner can also set up reward distributions to contributor addresses (distinct from suppliers and borrowers) by setting\\n * their contributor reward token speed, which similarly allocates a fixed amount of reward token per slot (block or second).\\n *\\n * The owner has the ability to transfer any amount of reward tokens held by the contract to any other address. Rewards are not distributed\\n * automatically and must be claimed by a user calling `claimRewardToken()`. Users should be aware that it is up to the owner and other centralized\\n * entities to ensure that the `RewardsDistributor` holds enough tokens to distribute the accumulated rewards of users and contributors.\\n */\\ncontract RewardsDistributor is\\n    ExponentialNoError,\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    MaxLoopsLimitHelper,\\n    RewardsDistributorStorage,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    /// @notice The initial REWARD TOKEN index for a market\\n    uint224 public constant INITIAL_INDEX = 1e36;\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a supplier\\n    event DistributedSupplierRewardToken(\\n        VToken indexed vToken,\\n        address indexed supplier,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenSupplyIndex\\n    );\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a borrower\\n    event DistributedBorrowerRewardToken(\\n        VToken indexed vToken,\\n        address indexed borrower,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenBorrowIndex\\n    );\\n\\n    /// @notice Emitted when a new supply-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenSupplySpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when a new borrow-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenBorrowSpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when REWARD TOKEN is granted by admin\\n    event RewardTokenGranted(address indexed recipient, uint256 amount);\\n\\n    /// @notice Emitted when a new REWARD TOKEN speed is set for a contributor\\n    event ContributorRewardTokenSpeedUpdated(address indexed contributor, uint256 newSpeed);\\n\\n    /// @notice Emitted when a market is initialized\\n    event MarketInitialized(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token supply index is updated\\n    event RewardTokenSupplyIndexUpdated(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token borrow index is updated\\n    event RewardTokenBorrowIndexUpdated(address indexed vToken, Exp marketBorrowIndex);\\n\\n    /// @notice Emitted when a reward for contributor is updated\\n    event ContributorRewardsUpdated(address indexed contributor, uint256 rewardAccrued);\\n\\n    /// @notice Emitted when a reward token last rewarding block for supply is updated\\n    event SupplyLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding block for borrow is updated\\n    event BorrowLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for supply is updated\\n    event SupplyLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for borrow is updated\\n    event BorrowLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    modifier onlyComptroller() {\\n        require(address(comptroller) == msg.sender, \\\"Only comptroller can call this function\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice RewardsDistributor initializer\\n     * @dev Initializes the deployer to owner\\n     * @param comptroller_ Comptroller to attach the reward distributor to\\n     * @param rewardToken_ Reward token to distribute\\n     * @param loopsLimit_ Maximum number of iterations for the loops in this contract\\n     * @param accessControlManager_ AccessControlManager contract address\\n     */\\n    function initialize(\\n        Comptroller comptroller_,\\n        IERC20Upgradeable rewardToken_,\\n        uint256 loopsLimit_,\\n        address accessControlManager_\\n    ) external initializer {\\n        comptroller = comptroller_;\\n        rewardToken = rewardToken_;\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n\\n        _setMaxLoopsLimit(loopsLimit_);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken\\n     * @param vToken The address of the vToken to be initialized\\n     * @custom:event MarketInitialized emits on success\\n     * @custom:access Only Comptroller\\n     */\\n    function initializeMarket(address vToken) external onlyComptroller {\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        isTimeBased\\n            ? _initializeMarketTimestampBased(vToken, blockNumberOrTimestamp)\\n            : _initializeMarketBlockBased(vToken, safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\"));\\n\\n        emit MarketInitialized(vToken);\\n    }\\n\\n    /*** Reward Token Distribution ***/\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them\\n     *         Borrowers will begin to accrue after the first interaction with the protocol.\\n     * @dev This function should only be called when the user has a borrow position in the market\\n     *      (e.g. Comptroller.preBorrowHook, and Comptroller.preRepayHook)\\n     *      We avoid an external call to check if they are in the market to save gas because this function is called in many places\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function distributeBorrowerRewardToken(\\n        address vToken,\\n        address borrower,\\n        Exp memory marketBorrowIndex\\n    ) external onlyComptroller {\\n        _distributeBorrowerRewardToken(vToken, borrower, marketBorrowIndex);\\n    }\\n\\n    function updateRewardTokenSupplyIndex(address vToken) external onlyComptroller {\\n        _updateRewardTokenSupplyIndex(vToken);\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the recipient\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all\\n     * @param recipient The address of the recipient to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     */\\n    function grantRewardToken(address recipient, uint256 amount) external onlyOwner {\\n        uint256 amountLeft = _grantRewardToken(recipient, amount);\\n        require(amountLeft == 0, \\\"insufficient rewardToken for grant\\\");\\n        emit RewardTokenGranted(recipient, amount);\\n    }\\n\\n    function updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) external onlyComptroller {\\n        _updateRewardTokenBorrowIndex(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN borrow and supply speeds for the specified markets\\n     * @param vTokens The markets whose REWARD TOKEN speed to update\\n     * @param supplySpeeds New supply-side REWARD TOKEN speed for the corresponding market\\n     * @param borrowSpeeds New borrow-side REWARD TOKEN speed for the corresponding market\\n     */\\n    function setRewardTokenSpeeds(\\n        VToken[] memory vTokens,\\n        uint256[] memory supplySpeeds,\\n        uint256[] memory borrowSpeeds\\n    ) external {\\n        _checkAccessAllowed(\\\"setRewardTokenSpeeds(address[],uint256[],uint256[])\\\");\\n        uint256 numTokens = vTokens.length;\\n        require(numTokens == supplySpeeds.length && numTokens == borrowSpeeds.length, \\\"invalid setRewardTokenSpeeds\\\");\\n\\n        for (uint256 i; i < numTokens; ++i) {\\n            _setRewardTokenSpeed(vTokens[i], supplySpeeds[i], borrowSpeeds[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for the specified markets, used when contract is block based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlocks New supply-side REWARD TOKEN last rewarding block for the corresponding market\\n     * @param borrowLastRewardingBlocks New borrow-side REWARD TOKEN last rewarding block for the corresponding market\\n     */\\n    function setLastRewardingBlocks(\\n        VToken[] calldata vTokens,\\n        uint32[] calldata supplyLastRewardingBlocks,\\n        uint32[] calldata borrowLastRewardingBlocks\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlocks(address[],uint32[],uint32[])\\\");\\n        require(!isTimeBased, \\\"Block-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlocks.length && numTokens == borrowLastRewardingBlocks.length,\\n            \\\"RewardsDistributor::setLastRewardingBlocks invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlock(vTokens[i], supplyLastRewardingBlocks[i], borrowLastRewardingBlocks[i]);\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block timestamp for the specified markets, used when contract is time based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlockTimestamps New supply-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     * @param borrowLastRewardingBlockTimestamps New borrow-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     */\\n    function setLastRewardingBlockTimestamps(\\n        VToken[] calldata vTokens,\\n        uint256[] calldata supplyLastRewardingBlockTimestamps,\\n        uint256[] calldata borrowLastRewardingBlockTimestamps\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])\\\");\\n        require(isTimeBased, \\\"Time-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlockTimestamps.length &&\\n                numTokens == borrowLastRewardingBlockTimestamps.length,\\n            \\\"RewardsDistributor::setLastRewardingBlockTimestamps invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlockTimestamp(\\n                vTokens[i],\\n                supplyLastRewardingBlockTimestamps[i],\\n                borrowLastRewardingBlockTimestamps[i]\\n            );\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single contributor\\n     * @param contributor The contributor whose REWARD TOKEN speed to update\\n     * @param rewardTokenSpeed New REWARD TOKEN speed for contributor\\n     */\\n    function setContributorRewardTokenSpeed(address contributor, uint256 rewardTokenSpeed) external onlyOwner {\\n        // note that REWARD TOKEN speed could be set to 0 to halt liquidity rewards for a contributor\\n        updateContributorRewards(contributor);\\n        if (rewardTokenSpeed == 0) {\\n            // release storage\\n            delete lastContributorBlock[contributor];\\n        } else {\\n            lastContributorBlock[contributor] = getBlockNumberOrTimestamp();\\n        }\\n        rewardTokenContributorSpeeds[contributor] = rewardTokenSpeed;\\n\\n        emit ContributorRewardTokenSpeedUpdated(contributor, rewardTokenSpeed);\\n    }\\n\\n    function distributeSupplierRewardToken(address vToken, address supplier) external onlyComptroller {\\n        _distributeSupplierRewardToken(vToken, supplier);\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in all markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     */\\n    function claimRewardToken(address holder) external {\\n        return claimRewardToken(holder, comptroller.getAllMarkets());\\n    }\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Calculate additional accrued REWARD TOKEN for a contributor since last accrual\\n     * @param contributor The address to calculate contributor rewards for\\n     */\\n    function updateContributorRewards(address contributor) public {\\n        uint256 rewardTokenSpeed = rewardTokenContributorSpeeds[contributor];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n        uint256 deltaBlocksOrTimestamp = sub_(blockNumberOrTimestamp, lastContributorBlock[contributor]);\\n        if (deltaBlocksOrTimestamp > 0 && rewardTokenSpeed > 0) {\\n            uint256 newAccrued = mul_(deltaBlocksOrTimestamp, rewardTokenSpeed);\\n            uint256 contributorAccrued = add_(rewardTokenAccrued[contributor], newAccrued);\\n\\n            rewardTokenAccrued[contributor] = contributorAccrued;\\n            lastContributorBlock[contributor] = blockNumberOrTimestamp;\\n\\n            emit ContributorRewardsUpdated(contributor, rewardTokenAccrued[contributor]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in the specified markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     * @param vTokens The list of markets to claim REWARD TOKEN in\\n     */\\n    function claimRewardToken(address holder, VToken[] memory vTokens) public {\\n        uint256 vTokensCount = vTokens.length;\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            VToken vToken = vTokens[i];\\n            require(comptroller.isMarketListed(vToken), \\\"market must be listed\\\");\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n            _distributeBorrowerRewardToken(address(vToken), holder, borrowIndex);\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n            _distributeSupplierRewardToken(address(vToken), holder);\\n        }\\n        rewardTokenAccrued[holder] = _grantRewardToken(holder, rewardTokenAccrued[holder]);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for a single market.\\n     * @param vToken market's whose reward token last rewarding block to be updated\\n     * @param supplyLastRewardingBlock New supply-side REWARD TOKEN last rewarding block for market\\n     * @param borrowLastRewardingBlock New borrow-side REWARD TOKEN last rewarding block for market\\n     */\\n    function _setLastRewardingBlock(\\n        VToken vToken,\\n        uint32 supplyLastRewardingBlock,\\n        uint32 borrowLastRewardingBlock\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockNumber = getBlockNumberOrTimestamp();\\n\\n        require(supplyLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n        require(borrowLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n\\n        uint32 currentSupplyLastRewardingBlock = rewardTokenSupplyState[address(vToken)].lastRewardingBlock;\\n        uint32 currentBorrowLastRewardingBlock = rewardTokenBorrowState[address(vToken)].lastRewardingBlock;\\n\\n        require(\\n            currentSupplyLastRewardingBlock == 0 || currentSupplyLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlock == 0 || currentBorrowLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlock != supplyLastRewardingBlock) {\\n            rewardTokenSupplyState[address(vToken)].lastRewardingBlock = supplyLastRewardingBlock;\\n            emit SupplyLastRewardingBlockUpdated(address(vToken), supplyLastRewardingBlock);\\n        }\\n\\n        if (currentBorrowLastRewardingBlock != borrowLastRewardingBlock) {\\n            rewardTokenBorrowState[address(vToken)].lastRewardingBlock = borrowLastRewardingBlock;\\n            emit BorrowLastRewardingBlockUpdated(address(vToken), borrowLastRewardingBlock);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding timestamp for a single market.\\n     * @param vToken market's whose reward token last rewarding timestamp to be updated\\n     * @param supplyLastRewardingBlockTimestamp New supply-side REWARD TOKEN last rewarding timestamp for market\\n     * @param borrowLastRewardingBlockTimestamp New borrow-side REWARD TOKEN last rewarding timestamp for market\\n     */\\n    function _setLastRewardingBlockTimestamp(\\n        VToken vToken,\\n        uint256 supplyLastRewardingBlockTimestamp,\\n        uint256 borrowLastRewardingBlockTimestamp\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockTimestamp = getBlockNumberOrTimestamp();\\n\\n        require(\\n            supplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n        require(\\n            borrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n\\n        uint256 currentSupplyLastRewardingBlockTimestamp = rewardTokenSupplyStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n        uint256 currentBorrowLastRewardingBlockTimestamp = rewardTokenBorrowStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n\\n        require(\\n            currentSupplyLastRewardingBlockTimestamp == 0 || currentSupplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlockTimestamp == 0 || currentBorrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlockTimestamp != supplyLastRewardingBlockTimestamp) {\\n            rewardTokenSupplyStateTimeBased[address(vToken)].lastRewardingTimestamp = supplyLastRewardingBlockTimestamp;\\n            emit SupplyLastRewardingBlockTimestampUpdated(address(vToken), supplyLastRewardingBlockTimestamp);\\n        }\\n\\n        if (currentBorrowLastRewardingBlockTimestamp != borrowLastRewardingBlockTimestamp) {\\n            rewardTokenBorrowStateTimeBased[address(vToken)].lastRewardingTimestamp = borrowLastRewardingBlockTimestamp;\\n            emit BorrowLastRewardingBlockTimestampUpdated(address(vToken), borrowLastRewardingBlockTimestamp);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single market.\\n     * @param vToken market's whose reward token rate to be updated\\n     * @param supplySpeed New supply-side REWARD TOKEN speed for market\\n     * @param borrowSpeed New borrow-side REWARD TOKEN speed for market\\n     */\\n    function _setRewardTokenSpeed(VToken vToken, uint256 supplySpeed, uint256 borrowSpeed) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        if (rewardTokenSupplySpeeds[address(vToken)] != supplySpeed) {\\n            // Supply speed updated so let's update supply state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n\\n            // Update speed and emit event\\n            rewardTokenSupplySpeeds[address(vToken)] = supplySpeed;\\n            emit RewardTokenSupplySpeedUpdated(vToken, supplySpeed);\\n        }\\n\\n        if (rewardTokenBorrowSpeeds[address(vToken)] != borrowSpeed) {\\n            // Borrow speed updated so let's update borrow state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n\\n            // Update speed and emit event\\n            rewardTokenBorrowSpeeds[address(vToken)] = borrowSpeed;\\n            emit RewardTokenBorrowSpeedUpdated(vToken, borrowSpeed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculate REWARD TOKEN accrued by a supplier and possibly transfer it to them.\\n     * @param vToken The market in which the supplier is interacting\\n     * @param supplier The address of the supplier to distribute REWARD TOKEN to\\n     */\\n    function _distributeSupplierRewardToken(address vToken, address supplier) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n        uint256 supplierIndex = rewardTokenSupplierIndex[vToken][supplier];\\n\\n        // Update supplier's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenSupplierIndex[vToken][supplier] = supplyIndex;\\n\\n        if (supplierIndex == 0 && supplyIndex >= INITIAL_INDEX) {\\n            // Covers the case where users supplied tokens before the market's supply state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when supplier rewards were first\\n            // set for the market.\\n            supplierIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per vToken accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(supplyIndex, supplierIndex) });\\n\\n        uint256 supplierTokens = VToken(vToken).balanceOf(supplier);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerVToken\\n        uint256 supplierDelta = mul_(supplierTokens, deltaIndex);\\n\\n        uint256 supplierAccrued = add_(rewardTokenAccrued[supplier], supplierDelta);\\n        rewardTokenAccrued[supplier] = supplierAccrued;\\n\\n        emit DistributedSupplierRewardToken(VToken(vToken), supplier, supplierDelta, supplierAccrued, supplyIndex);\\n    }\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them.\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function _distributeBorrowerRewardToken(address vToken, address borrower, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n        uint256 borrowerIndex = rewardTokenBorrowerIndex[vToken][borrower];\\n\\n        // Update borrowers's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenBorrowerIndex[vToken][borrower] = borrowIndex;\\n\\n        if (borrowerIndex == 0 && borrowIndex >= INITIAL_INDEX) {\\n            // Covers the case where users borrowed tokens before the market's borrow state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when borrower rewards were first\\n            // set for the market.\\n            borrowerIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per borrowed unit accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(borrowIndex, borrowerIndex) });\\n\\n        uint256 borrowerAmount = div_(VToken(vToken).borrowBalanceStored(borrower), marketBorrowIndex);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerBorrowedUnit\\n        if (borrowerAmount != 0) {\\n            uint256 borrowerDelta = mul_(borrowerAmount, deltaIndex);\\n\\n            uint256 borrowerAccrued = add_(rewardTokenAccrued[borrower], borrowerDelta);\\n            rewardTokenAccrued[borrower] = borrowerAccrued;\\n\\n            emit DistributedBorrowerRewardToken(VToken(vToken), borrower, borrowerDelta, borrowerAccrued, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the user.\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all.\\n     * @param user The address of the user to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     * @return The amount of REWARD TOKEN which was NOT transferred to the user\\n     */\\n    function _grantRewardToken(address user, uint256 amount) internal returns (uint256) {\\n        uint256 rewardTokenRemaining = rewardToken.balanceOf(address(this));\\n        if (amount > 0 && amount <= rewardTokenRemaining) {\\n            rewardToken.safeTransfer(user, amount);\\n            return 0;\\n        }\\n        return amount;\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the supply index\\n     * @param vToken The market whose supply index to update\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenSupplyIndex(address vToken) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplySpeed = rewardTokenSupplySpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? supplyStateTimeBased.lastRewardingTimestamp\\n            : uint256(supplyState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? supplyStateTimeBased.timestamp : uint256(supplyState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && supplySpeed > 0) {\\n            uint256 supplyTokens = VToken(vToken).totalSupply();\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, supplySpeed);\\n            Double memory ratio = supplyTokens > 0\\n                ? fraction(accruedSinceUpdate, supplyTokens)\\n                : Double({ mantissa: 0 });\\n            uint224 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: supplyIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                supplyStateTimeBased.index = index;\\n                supplyStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                supplyState.index = index;\\n                supplyState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            isTimeBased ? supplyStateTimeBased.timestamp = blockNumberOrTimestamp : supplyState.block = uint32(\\n                blockNumberOrTimestamp\\n            );\\n        }\\n\\n        emit RewardTokenSupplyIndexUpdated(vToken);\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the borrow index\\n     * @param vToken The market whose borrow index to update\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowSpeed = rewardTokenBorrowSpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? borrowStateTimeBased.lastRewardingTimestamp\\n            : uint256(borrowState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? borrowStateTimeBased.timestamp : uint256(borrowState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && borrowSpeed > 0) {\\n            uint256 borrowAmount = div_(VToken(vToken).totalBorrows(), marketBorrowIndex);\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, borrowSpeed);\\n            Double memory ratio = borrowAmount > 0\\n                ? fraction(accruedSinceUpdate, borrowAmount)\\n                : Double({ mantissa: 0 });\\n            uint224 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: borrowIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                borrowStateTimeBased.index = index;\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.index = index;\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            if (isTimeBased) {\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        }\\n\\n        emit RewardTokenBorrowIndexUpdated(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is block-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockNumber current block number\\n     */\\n    function _initializeMarketBlockBased(address vToken, uint32 blockNumber) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block numbers\\n         */\\n        supplyState.block = borrowState.block = blockNumber;\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is time-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockTimestamp current block timestamp\\n     */\\n    function _initializeMarketTimestampBased(address vToken, uint256 blockTimestamp) internal {\\n        TimeBasedRewardToken storage supplyState = rewardTokenSupplyStateTimeBased[vToken];\\n        TimeBasedRewardToken storage borrowState = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block timestamp\\n         */\\n        supplyState.timestamp = borrowState.timestamp = blockTimestamp;\\n    }\\n}\\n\",\"keccak256\":\"0x3cc824e59c923cfe25c4f1a875959b7e9410cde8e73cd405de13f301298c697f\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\n\\n/**\\n * @title RewardsDistributorStorage\\n * @author Venus\\n * @dev Storage for RewardsDistributor\\n */\\ncontract RewardsDistributorStorage {\\n    struct RewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block number the index was last updated at\\n        uint32 block;\\n        // The block number at which to stop rewards\\n        uint32 lastRewardingBlock;\\n    }\\n\\n    struct TimeBasedRewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block timestamp the index was last updated at\\n        uint256 timestamp;\\n        // The block timestamp at which to stop rewards\\n        uint256 lastRewardingTimestamp;\\n    }\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => RewardToken) public rewardTokenSupplyState;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each supplier as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenSupplierIndex;\\n\\n    /// @notice The REWARD TOKEN accrued but not yet transferred to each user\\n    mapping(address => uint256) public rewardTokenAccrued;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding borrow market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenBorrowSpeeds;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding supply market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenSupplySpeeds;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => RewardToken) public rewardTokenBorrowState;\\n\\n    /// @notice The portion of REWARD TOKEN that each contributor receives per slot (block or second)\\n    mapping(address => uint256) public rewardTokenContributorSpeeds;\\n\\n    /// @notice Last slot (block or second) at which a contributor's REWARD TOKEN rewards have been allocated\\n    mapping(address => uint256) public lastContributorBlock;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each borrower as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenBorrowerIndex;\\n\\n    Comptroller internal comptroller;\\n\\n    IERC20Upgradeable public rewardToken;\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenSupplyStateTimeBased;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenBorrowStateTimeBased;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[37] private __gap;\\n}\\n\",\"keccak256\":\"0x70e5015a78a2acf95277949c8b4796e10b9ac194130be006d5e5217e158070c0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VToken.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IProtocolShareReserve } from \\\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\\\";\\n\\nimport { VTokenInterface } from \\\"./VTokenInterfaces.sol\\\";\\nimport { ComptrollerInterface, ComptrollerViewInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { TokenErrorReporter } from \\\"./ErrorReporter.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title VToken\\n * @author Venus\\n * @notice Each asset that is supported by a pool is integrated through an instance of the `VToken` contract. As outlined in the protocol overview,\\n * each isolated pool creates its own `vToken` corresponding to an asset. Within a given pool, each included `vToken` is referred to as a market of\\n * the pool. The main actions a user regularly interacts with in a market are:\\n\\n- mint/redeem of vTokens;\\n- transfer of vTokens;\\n- borrow/repay a loan on an underlying asset;\\n- liquidate a borrow or liquidate/heal an account.\\n\\n * A user supplies the underlying asset to a pool by minting `vTokens`, where the corresponding `vToken` amount is determined by the `exchangeRate`.\\n * The `exchangeRate` will change over time, dependent on a number of factors, some of which accrue interest. Additionally, once users have minted\\n * `vToken` in a pool, they can borrow any asset in the isolated pool by using their `vToken` as collateral. In order to borrow an asset or use a `vToken`\\n * as collateral, the user must be entered into each corresponding market (else, the `vToken` will not be considered collateral for a borrow). Note that\\n * a user may borrow up to a portion of their collateral determined by the market\\u2019s collateral factor. However, if their borrowed amount exceeds an amount\\n * calculated using the market\\u2019s corresponding liquidation threshold, the borrow is eligible for liquidation. When a user repays a borrow, they must also\\n * pay off interest accrued on the borrow.\\n * \\n * The Venus protocol includes unique mechanisms for healing an account and liquidating an account. These actions are performed in the `Comptroller`\\n * and consider all borrows and collateral for which a given account is entered within a market. These functions may only be called on an account with a\\n * total collateral amount that is no larger than a universal `minLiquidatableCollateral` value, which is used for all markets within a `Comptroller`.\\n * Both functions settle all of an account\\u2019s borrows, but `healAccount()` may add `badDebt` to a vToken. For more detail, see the description of\\n * `healAccount()` and `liquidateAccount()` in the `Comptroller` summary section below.\\n */\\ncontract VToken is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    VTokenInterface,\\n    ExponentialNoError,\\n    TokenErrorReporter,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    uint256 internal constant DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA = 5e16; // 5%\\n\\n    // Maximum fraction of interest that can be set aside for reserves\\n    uint256 internal constant MAX_RESERVE_FACTOR_MANTISSA = 1e18;\\n\\n    // Maximum borrow rate that can ever be applied per slot(block or second)\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 internal immutable MAX_BORROW_RATE_MANTISSA;\\n\\n    /**\\n     * Reentrancy Guard **\\n     */\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     */\\n    modifier nonReentrant() {\\n        require(_notEntered, \\\"re-entered\\\");\\n        _notEntered = false;\\n        _;\\n        _notEntered = true; // get a gas-refund post-Istanbul\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @param maxBorrowRateMantissa_ The maximum value of borrowing rate mantissa\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(\\n        bool timeBased_,\\n        uint256 blocksPerYear_,\\n        uint256 maxBorrowRateMantissa_\\n    ) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        require(maxBorrowRateMantissa_ <= 1e18, \\\"Max borrow rate must be <= 1e18\\\");\\n\\n        MAX_BORROW_RATE_MANTISSA = maxBorrowRateMantissa_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice Construct a new money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     * @custom:error ZeroAddressNotAllowed is thrown when admin address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     */\\n    function initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) external initializer {\\n        ensureNonzeroAddress(admin_);\\n\\n        // Initialize the market\\n        _initialize(\\n            underlying_,\\n            comptroller_,\\n            interestRateModel_,\\n            initialExchangeRateMantissa_,\\n            name_,\\n            symbol_,\\n            decimals_,\\n            admin_,\\n            accessControlManager_,\\n            riskManagement,\\n            reserveFactorMantissa_\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `msg.sender` to `dst`\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transfer(address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `src` to `dst`\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transferFrom(address src, address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, src, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Approve `spender` to transfer up to `amount` from `src`\\n     * @dev This will overwrite the approval amount for `spender`\\n     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\\n     * @param spender The address of the account which may transfer tokens\\n     * @param amount The number of tokens that are approved (uint256.max means infinite)\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function approve(address spender, uint256 amount) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        transferAllowances[src][spender] = amount;\\n        emit Approval(src, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Increase approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param addedValue The number of additional tokens spender can transfer\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 newAllowance = transferAllowances[src][spender];\\n        newAllowance += addedValue;\\n        transferAllowances[src][spender] = newAllowance;\\n\\n        emit Approval(src, spender, newAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Decreases approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param subtractedValue The number of tokens to remove from total approval\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 currentAllowance = transferAllowances[src][spender];\\n        require(currentAllowance >= subtractedValue, \\\"decreased allowance below zero\\\");\\n        unchecked {\\n            currentAllowance -= subtractedValue;\\n        }\\n\\n        transferAllowances[src][spender] = currentAllowance;\\n\\n        emit Approval(src, spender, currentAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Get the underlying balance of the `owner`\\n     * @dev This also accrues interest in a transaction\\n     * @param owner The address of the account to query\\n     * @return amount The amount of underlying owned by `owner`\\n     */\\n    function balanceOfUnderlying(address owner) external override returns (uint256) {\\n        Exp memory exchangeRate = Exp({ mantissa: exchangeRateCurrent() });\\n        return mul_ScalarTruncate(exchangeRate, accountTokens[owner]);\\n    }\\n\\n    /**\\n     * @notice Returns the current total borrows plus accrued interest\\n     * @return totalBorrows The total borrows with interest\\n     */\\n    function totalBorrowsCurrent() external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return totalBorrows;\\n    }\\n\\n    /**\\n     * @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\\n     * @param account The address whose balance should be calculated after updating borrowIndex\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceCurrent(address account) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Sender supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function mint(uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, msg.sender, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender calls on-behalf of minter. minter supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param minter User whom the supply will be attributed to\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when minter address is zero\\n     */\\n    function mintBehalf(address minter, uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(minter);\\n\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, minter, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for the underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function redeem(uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer The user on behalf of whom to redeem\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for a specified amount of underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     */\\n    function redeemUnderlying(uint256 redeemAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems underlying assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer, on behalf of whom to redeem\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemUnderlyingBehalf(\\n        address redeemer,\\n        uint256 redeemAmount\\n    ) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets from the protocol to their own address\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function borrow(uint256 borrowAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _borrowFresh(msg.sender, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the borrower using `comptroller.updateDelegate`\\n     * @param borrower The borrower, on behalf of whom to borrow\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error DelegateNotApproved is thrown if caller is not approved delegate\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function borrowBehalf(address borrower, uint256 borrowAmount) external override returns (uint256) {\\n        _ensureSenderIsDelegateOf(borrower);\\n        accrueInterest();\\n\\n        _borrowFresh(borrower, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays their own borrow\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrow(uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, msg.sender, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays a borrow belonging to borrower\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, borrower, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Not restricted\\n     */\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external override returns (uint256) {\\n        _liquidateBorrow(msg.sender, borrower, repayAmount, vTokenCollateral, false);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice sets protocol share accumulated from liquidations\\n     * @dev must be equal or less than liquidation incentive - 1\\n     * @param newProtocolSeizeShareMantissa_ new protocol share mantissa\\n     * @custom:event Emits NewProtocolSeizeShare event on success\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error ProtocolSeizeShareTooBig is thrown when the new seize share is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setProtocolSeizeShare(uint256 newProtocolSeizeShareMantissa_) external {\\n        _checkAccessAllowed(\\\"setProtocolSeizeShare(uint256)\\\");\\n        uint256 liquidationIncentive = ComptrollerViewInterface(address(comptroller)).liquidationIncentiveMantissa();\\n        if (newProtocolSeizeShareMantissa_ + MANTISSA_ONE > liquidationIncentive) {\\n            revert ProtocolSeizeShareTooBig();\\n        }\\n\\n        uint256 oldProtocolSeizeShareMantissa = protocolSeizeShareMantissa;\\n        protocolSeizeShareMantissa = newProtocolSeizeShareMantissa_;\\n        emit NewProtocolSeizeShare(oldProtocolSeizeShareMantissa, newProtocolSeizeShareMantissa_);\\n    }\\n\\n    /**\\n     * @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\\n     * @dev Admin function to accrue interest and set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     * @custom:event Emits NewReserveFactor event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error SetReserveFactorBoundsCheck is thrown when the new reserve factor is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external override nonReentrant {\\n        _checkAccessAllowed(\\\"setReserveFactor(uint256)\\\");\\n\\n        accrueInterest();\\n        _setReserveFactorFresh(newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Accrues interest and reduces reserves by transferring to the protocol reserve contract\\n     * @dev Gracefully return if reserves already reduced in accrueInterest\\n     * @param reduceAmount Amount of reduction to reserves\\n     * @custom:event Emits ReservesReduced event; may emit AccrueInterest\\n     * @custom:error ReduceReservesCashNotAvailable is thrown when the vToken does not have sufficient cash\\n     * @custom:error ReduceReservesCashValidation is thrown when trying to withdraw more cash than the reserves have\\n     * @custom:access Not restricted\\n     */\\n    function reduceReserves(uint256 reduceAmount) external override nonReentrant {\\n        accrueInterest();\\n        if (reduceReservesBlockNumber == getBlockNumberOrTimestamp()) return;\\n        _reduceReservesFresh(reduceAmount);\\n    }\\n\\n    /**\\n     * @notice The sender adds to reserves.\\n     * @param addAmount The amount of underlying token to add as reserves\\n     * @custom:event Emits ReservesAdded event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function addReserves(uint256 addAmount) external override nonReentrant {\\n        accrueInterest();\\n        _addReservesFresh(addAmount);\\n    }\\n\\n    /**\\n     * @notice accrues interest and updates the interest rate model using _setInterestRateModelFresh\\n     * @dev Admin function to accrue interest and update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     * @custom:event Emits NewMarketInterestRateModel event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external override {\\n        _checkAccessAllowed(\\\"setInterestRateModel(address)\\\");\\n\\n        accrueInterest();\\n        _setInterestRateModelFresh(newInterestRateModel);\\n    }\\n\\n    /**\\n     * @notice Repays a certain amount of debt, treats the rest of the borrow as bad debt, essentially\\n     *   \\\"forgiving\\\" the borrower. Healing is a situation that should rarely happen. However, some pools\\n     *   may list risky assets or be configured improperly \\u2013 we want to still handle such cases gracefully.\\n     *   We assume that Comptroller does the seizing, so this function is only available to Comptroller.\\n     * @dev This function does not call any Comptroller hooks (like \\\"healAllowed\\\"), because we assume\\n     *   the Comptroller does all the necessary checks before calling this function.\\n     * @param payer account who repays the debt\\n     * @param borrower account to heal\\n     * @param repayAmount amount to repay\\n     * @custom:event Emits RepayBorrow, BadDebtIncreased events; may emit AccrueInterest\\n     * @custom:error HealBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:access Only Comptroller\\n     */\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external override nonReentrant {\\n        if (repayAmount != 0) {\\n            comptroller.preRepayHook(address(this), borrower);\\n        }\\n\\n        if (msg.sender != address(comptroller)) {\\n            revert HealBorrowUnauthorized();\\n        }\\n\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 totalBorrowsNew = totalBorrows;\\n\\n        uint256 actualRepayAmount;\\n        if (repayAmount != 0) {\\n            // _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n            // We violate checks-effects-interactions here to account for tokens that take transfer fees\\n            actualRepayAmount = _doTransferIn(payer, repayAmount);\\n            totalBorrowsNew = totalBorrowsNew - actualRepayAmount;\\n            emit RepayBorrow(\\n                payer,\\n                borrower,\\n                actualRepayAmount,\\n                accountBorrowsPrev - actualRepayAmount,\\n                totalBorrowsNew\\n            );\\n        }\\n\\n        // The transaction will fail if trying to repay too much\\n        uint256 badDebtDelta = accountBorrowsPrev - actualRepayAmount;\\n        if (badDebtDelta != 0) {\\n            uint256 badDebtOld = badDebt;\\n            uint256 badDebtNew = badDebtOld + badDebtDelta;\\n            totalBorrowsNew = totalBorrowsNew - badDebtDelta;\\n            badDebt = badDebtNew;\\n\\n            // We treat healing as \\\"repayment\\\", where vToken is the payer\\n            emit RepayBorrow(address(this), borrower, badDebtDelta, 0, totalBorrowsNew);\\n            emit BadDebtIncreased(borrower, badDebtDelta, badDebtOld, badDebtNew);\\n        }\\n\\n        accountBorrows[borrower].principal = 0;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        emit HealBorrow(payer, borrower, repayAmount);\\n    }\\n\\n    /**\\n     * @notice The extended version of liquidations, callable only by Comptroller. May skip\\n     *  the close factor check. The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error ForceLiquidateBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Only Comptroller\\n     */\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        if (msg.sender != address(comptroller)) {\\n            revert ForceLiquidateBorrowUnauthorized();\\n        }\\n        _liquidateBorrow(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Will fail unless called by another vToken during the process of liquidation.\\n     *  It's absolutely critical to use msg.sender as the borrowed vToken and not a parameter.\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     * @custom:event Emits Transfer, ReservesAdded events\\n     * @custom:error LiquidateSeizeLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:access Not restricted\\n     */\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external override nonReentrant {\\n        _seize(msg.sender, liquidator, borrower, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Updates bad debt\\n     * @dev Called only when bad debt is recovered from auction\\n     * @param recoveredAmount_ The amount of bad debt recovered\\n     * @custom:event Emits BadDebtRecovered event\\n     * @custom:access Only Shortfall contract\\n     */\\n    function badDebtRecovered(uint256 recoveredAmount_) external {\\n        require(msg.sender == shortfall, \\\"only shortfall contract can update bad debt\\\");\\n        require(recoveredAmount_ <= badDebt, \\\"more than bad debt recovered from auction\\\");\\n\\n        uint256 badDebtOld = badDebt;\\n        uint256 badDebtNew = badDebtOld - recoveredAmount_;\\n        badDebt = badDebtNew;\\n\\n        emit BadDebtRecovered(badDebtOld, badDebtNew);\\n    }\\n\\n    /**\\n     * @notice Sets protocol share reserve contract address\\n     * @param protocolShareReserve_ The address of the protocol share reserve contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setProtocolShareReserve(address payable protocolShareReserve_) external onlyOwner {\\n        _setProtocolShareReserve(protocolShareReserve_);\\n    }\\n\\n    /**\\n     * @notice Sets shortfall contract address\\n     * @param shortfall_ The address of the shortfall contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setShortfallContract(address shortfall_) external onlyOwner {\\n        _setShortfallContract(shortfall_);\\n    }\\n\\n    /**\\n     * @notice A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)\\n     * @param token The address of the ERC-20 token to sweep\\n     * @custom:access Only Governance\\n     */\\n    function sweepToken(IERC20Upgradeable token) external override {\\n        require(msg.sender == owner(), \\\"VToken::sweepToken: only admin can sweep tokens\\\");\\n        require(address(token) != underlying, \\\"VToken::sweepToken: can not sweep underlying token\\\");\\n        uint256 balance = token.balanceOf(address(this));\\n        token.safeTransfer(owner(), balance);\\n\\n        emit SweepToken(address(token));\\n    }\\n\\n    /**\\n     * @notice A public function to set new threshold of slot(block or second) difference after which funds will be sent to the protocol share reserve\\n     * @param _newReduceReservesBlockOrTimestampDelta slot(block or second) difference value\\n     * @custom:access Only Governance\\n     */\\n    function setReduceReservesBlockDelta(uint256 _newReduceReservesBlockOrTimestampDelta) external {\\n        _checkAccessAllowed(\\\"setReduceReservesBlockDelta(uint256)\\\");\\n        require(_newReduceReservesBlockOrTimestampDelta > 0, \\\"Invalid Input\\\");\\n        emit NewReduceReservesBlockDelta(reduceReservesBlockDelta, _newReduceReservesBlockOrTimestampDelta);\\n        reduceReservesBlockDelta = _newReduceReservesBlockOrTimestampDelta;\\n    }\\n\\n    /**\\n     * @notice Get the current allowance from `owner` for `spender`\\n     * @param owner The address of the account which owns the tokens to be spent\\n     * @param spender The address of the account which may transfer tokens\\n     * @return amount The number of tokens allowed to be spent (type(uint256).max means infinite)\\n     */\\n    function allowance(address owner, address spender) external view override returns (uint256) {\\n        return transferAllowances[owner][spender];\\n    }\\n\\n    /**\\n     * @notice Get the token balance of the `owner`\\n     * @param owner The address of the account to query\\n     * @return amount The number of tokens owned by `owner`\\n     */\\n    function balanceOf(address owner) external view override returns (uint256) {\\n        return accountTokens[owner];\\n    }\\n\\n    /**\\n     * @notice Get a snapshot of the account's balances, and the cached exchange rate\\n     * @dev This is used by comptroller to more efficiently perform liquidity checks.\\n     * @param account Address of the account to snapshot\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return vTokenBalance User's balance of vTokens\\n     * @return borrowBalance Amount owed in terms of underlying\\n     * @return exchangeRate Stored exchange rate\\n     */\\n    function getAccountSnapshot(\\n        address account\\n    )\\n        external\\n        view\\n        override\\n        returns (uint256 error, uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRate)\\n    {\\n        return (NO_ERROR, accountTokens[account], _borrowBalanceStored(account), _exchangeRateStored());\\n    }\\n\\n    /**\\n     * @notice Get cash balance of this vToken in the underlying asset\\n     * @return cash The quantity of underlying asset owned by this contract\\n     */\\n    function getCash() external view override returns (uint256) {\\n        return _getCashPrior();\\n    }\\n\\n    /**\\n     * @notice Returns the current per slot(block or second) borrow interest rate for this vToken\\n     * @return rate The borrow interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function borrowRatePerBlock() external view override returns (uint256) {\\n        return interestRateModel.getBorrowRate(_getCashPrior(), totalBorrows, totalReserves, badDebt);\\n    }\\n\\n    /**\\n     * @notice Returns the current per-slot(block or second) supply interest rate for this v\\n     * @return rate The supply interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function supplyRatePerBlock() external view override returns (uint256) {\\n        return\\n            interestRateModel.getSupplyRate(\\n                _getCashPrior(),\\n                totalBorrows,\\n                totalReserves,\\n                reserveFactorMantissa,\\n                badDebt\\n            );\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceStored(address account) external view override returns (uint256) {\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateStored() external view override returns (uint256) {\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Accrue interest then return the up-to-date exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateCurrent() public override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Applies accrued interest to total borrows and reserves\\n     * @dev This calculates interest accrued from the last checkpointed slot(block or second)\\n     *  up to the current slot(block or second) and writes new checkpoint to storage and\\n     *  reduce spread reserves to protocol share reserve\\n     *  if currentSlot - reduceReservesBlockNumber >= slotDelta\\n     * @return Always NO_ERROR\\n     * @custom:event Emits AccrueInterest event on success\\n     * @custom:access Not restricted\\n     */\\n    function accrueInterest() public virtual override returns (uint256) {\\n        /* Remember the initial block number or timestamp */\\n        uint256 currentSlotNumber = getBlockNumberOrTimestamp();\\n        uint256 accrualSlotNumberPrior = accrualBlockNumber;\\n\\n        /* Short-circuit accumulating 0 interest */\\n        if (accrualSlotNumberPrior == currentSlotNumber) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Read the previous values out of storage */\\n        uint256 cashPrior = _getCashPrior();\\n        uint256 borrowsPrior = totalBorrows;\\n        uint256 reservesPrior = totalReserves;\\n        uint256 borrowIndexPrior = borrowIndex;\\n\\n        /* Calculate the current borrow interest rate */\\n        uint256 borrowRateMantissa = interestRateModel.getBorrowRate(cashPrior, borrowsPrior, reservesPrior, badDebt);\\n        require(borrowRateMantissa <= MAX_BORROW_RATE_MANTISSA, \\\"borrow rate is absurdly high\\\");\\n\\n        /* Calculate the number of slots elapsed since the last accrual */\\n        uint256 slotDelta = currentSlotNumber - accrualSlotNumberPrior;\\n\\n        /*\\n         * Calculate the interest accumulated into borrows and reserves and the new index:\\n         *  simpleInterestFactor = borrowRate * slotDelta\\n         *  interestAccumulated = simpleInterestFactor * totalBorrows\\n         *  totalBorrowsNew = interestAccumulated + totalBorrows\\n         *  totalReservesNew = interestAccumulated * reserveFactor + totalReserves\\n         *  borrowIndexNew = simpleInterestFactor * borrowIndex + borrowIndex\\n         */\\n\\n        Exp memory simpleInterestFactor = mul_(Exp({ mantissa: borrowRateMantissa }), slotDelta);\\n        uint256 interestAccumulated = mul_ScalarTruncate(simpleInterestFactor, borrowsPrior);\\n        uint256 totalBorrowsNew = interestAccumulated + borrowsPrior;\\n        uint256 totalReservesNew = mul_ScalarTruncateAddUInt(\\n            Exp({ mantissa: reserveFactorMantissa }),\\n            interestAccumulated,\\n            reservesPrior\\n        );\\n        uint256 borrowIndexNew = mul_ScalarTruncateAddUInt(simpleInterestFactor, borrowIndexPrior, borrowIndexPrior);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the previously calculated values into storage */\\n        accrualBlockNumber = currentSlotNumber;\\n        borrowIndex = borrowIndexNew;\\n        totalBorrows = totalBorrowsNew;\\n        totalReserves = totalReservesNew;\\n\\n        if (currentSlotNumber - reduceReservesBlockNumber >= reduceReservesBlockDelta) {\\n            reduceReservesBlockNumber = currentSlotNumber;\\n            if (cashPrior < totalReservesNew) {\\n                _reduceReservesFresh(cashPrior);\\n            } else {\\n                _reduceReservesFresh(totalReservesNew);\\n            }\\n        }\\n\\n        /* We emit an AccrueInterest event */\\n        emit AccrueInterest(cashPrior, interestAccumulated, borrowIndexNew, totalBorrowsNew);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice User supplies assets into the market and receives vTokens in exchange\\n     * @dev Assumes interest has already been accrued up to the current block or timestamp\\n     * @param payer The address of the account which is sending the assets for supply\\n     * @param minter The address of the account which is supplying the assets\\n     * @param mintAmount The amount of the underlying asset to supply\\n     */\\n    function _mintFresh(address payer, address minter, uint256 mintAmount) internal {\\n        /* Fail if mint not allowed */\\n        comptroller.preMintHook(address(this), minter, mintAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert MintFreshnessCheck();\\n        }\\n\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         *  We call `_doTransferIn` for the minter and the mintAmount.\\n         *  `_doTransferIn` reverts if anything goes wrong, since we can't be sure if\\n         *  side-effects occurred. The function returns the amount actually transferred,\\n         *  in case of a fee. On success, the vToken holds an additional `actualMintAmount`\\n         *  of cash.\\n         */\\n        uint256 actualMintAmount = _doTransferIn(payer, mintAmount);\\n\\n        /*\\n         * We get the current exchange rate and calculate the number of vTokens to be minted:\\n         *  mintTokens = actualMintAmount / exchangeRate\\n         */\\n\\n        uint256 mintTokens = div_(actualMintAmount, exchangeRate);\\n\\n        /*\\n         * We calculate the new total supply of vTokens and minter token balance, checking for overflow:\\n         *  totalSupplyNew = totalSupply + mintTokens\\n         *  accountTokensNew = accountTokens[minter] + mintTokens\\n         * And write them into storage\\n         */\\n        totalSupply = totalSupply + mintTokens;\\n        uint256 balanceAfter = accountTokens[minter] + mintTokens;\\n        accountTokens[minter] = balanceAfter;\\n\\n        /* We emit a Mint event, and a Transfer event */\\n        emit Mint(minter, actualMintAmount, mintTokens, balanceAfter);\\n        emit Transfer(address(0), minter, mintTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.mintVerify(address(this), minter, actualMintAmount, mintTokens);\\n    }\\n\\n    /**\\n     * @notice Redeemer redeems vTokens in exchange for the underlying assets, transferred to the receiver. Redeemer and receiver can be the same\\n     *   address, or different addresses if the receiver was previously approved by the redeemer as a valid delegate (see Comptroller.updateDelegate)\\n     * @dev Assumes interest has already been accrued up to the current slot(block or second)\\n     * @param redeemer The address of the account which is redeeming the tokens\\n     * @param receiver The receiver of the underlying tokens\\n     * @param redeemTokensIn The number of vTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     * @param redeemAmountIn The number of underlying tokens to receive from redeeming vTokens (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     */\\n    function _redeemFresh(address redeemer, address receiver, uint256 redeemTokensIn, uint256 redeemAmountIn) internal {\\n        require(redeemTokensIn == 0 || redeemAmountIn == 0, \\\"one of redeemTokensIn or redeemAmountIn must be zero\\\");\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RedeemFreshnessCheck();\\n        }\\n\\n        /* exchangeRate = invoke Exchange Rate Stored() */\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        uint256 redeemTokens;\\n        uint256 redeemAmount;\\n\\n        /* If redeemTokensIn > 0: */\\n        if (redeemTokensIn > 0) {\\n            /*\\n             * We calculate the exchange rate and the amount of underlying to be redeemed:\\n             *  redeemTokens = redeemTokensIn\\n             */\\n            redeemTokens = redeemTokensIn;\\n        } else {\\n            /*\\n             * We get the current exchange rate and calculate the amount to be redeemed:\\n             *  redeemTokens = redeemAmountIn / exchangeRate\\n             */\\n            redeemTokens = div_(redeemAmountIn, exchangeRate);\\n\\n            uint256 _redeemAmount = mul_(redeemTokens, exchangeRate);\\n            if (_redeemAmount != 0 && _redeemAmount != redeemAmountIn) redeemTokens++; // round up\\n        }\\n\\n        // redeemAmount = exchangeRate * redeemTokens\\n        redeemAmount = mul_ScalarTruncate(exchangeRate, redeemTokens);\\n\\n        // Revert if amount is zero\\n        if (redeemAmount == 0) {\\n            revert(\\\"redeemAmount is zero\\\");\\n        }\\n\\n        /* Fail if redeem not allowed */\\n        comptroller.preRedeemHook(address(this), redeemer, redeemTokens);\\n\\n        /* Fail gracefully if protocol has insufficient cash */\\n        if (_getCashPrior() - totalReserves < redeemAmount) {\\n            revert RedeemTransferOutNotPossible();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing reduced supply before external transfer.\\n         */\\n        totalSupply = totalSupply - redeemTokens;\\n        uint256 balanceAfter = accountTokens[redeemer] - redeemTokens;\\n        accountTokens[redeemer] = balanceAfter;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the redeemAmount.\\n         *  On success, the vToken has redeemAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, redeemAmount);\\n\\n        /* We emit a Transfer event, and a Redeem event */\\n        emit Transfer(redeemer, address(this), redeemTokens);\\n        emit Redeem(redeemer, redeemAmount, redeemTokens, balanceAfter);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.redeemVerify(address(this), redeemer, redeemAmount, redeemTokens);\\n    }\\n\\n    /**\\n     * @notice Users or their delegates borrow assets from the protocol\\n     * @param borrower User who borrows the assets\\n     * @param receiver The receiver of the tokens, if called by a delegate\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     */\\n    function _borrowFresh(address borrower, address receiver, uint256 borrowAmount) internal {\\n        /* Fail if borrow not allowed */\\n        comptroller.preBorrowHook(address(this), borrower, borrowAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert BorrowFreshnessCheck();\\n        }\\n\\n        /* Fail gracefully if protocol has insufficient underlying cash */\\n        if (_getCashPrior() - totalReserves < borrowAmount) {\\n            revert BorrowCashNotAvailable();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on overflow:\\n         *  accountBorrowNew = accountBorrow + borrowAmount\\n         *  totalBorrowsNew = totalBorrows + borrowAmount\\n         */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 accountBorrowsNew = accountBorrowsPrev + borrowAmount;\\n        uint256 totalBorrowsNew = totalBorrows + borrowAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing increased borrow before external transfer.\\n        `*/\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the borrowAmount.\\n         *  On success, the vToken borrowAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, borrowAmount);\\n\\n        /* We emit a Borrow event */\\n        emit Borrow(borrower, borrowAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.borrowVerify(address(this), borrower, borrowAmount);\\n    }\\n\\n    /**\\n     * @notice Borrows are repaid by another user (possibly the borrower).\\n     * @param payer the account paying off the borrow\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount the amount of underlying tokens being returned, or type(uint256).max for the full outstanding amount\\n     * @return (uint) the actual repayment amount.\\n     */\\n    function _repayBorrowFresh(address payer, address borrower, uint256 repayAmount) internal returns (uint256) {\\n        /* Fail if repayBorrow not allowed */\\n        comptroller.preRepayHook(address(this), borrower);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RepayBorrowFreshnessCheck();\\n        }\\n\\n        /* We fetch the amount the borrower owes, with accumulated interest */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n\\n        uint256 repayAmountFinal = repayAmount >= accountBorrowsPrev ? accountBorrowsPrev : repayAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We call _doTransferIn for the payer and the repayAmount\\n         *  On success, the vToken holds an additional repayAmount of cash.\\n         *  _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         *   it returns the amount actually transferred, in case of a fee.\\n         */\\n        uint256 actualRepayAmount = _doTransferIn(payer, repayAmountFinal);\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on underflow:\\n         *  accountBorrowsNew = accountBorrows - actualRepayAmount\\n         *  totalBorrowsNew = totalBorrows - actualRepayAmount\\n         */\\n        uint256 accountBorrowsNew = accountBorrowsPrev - actualRepayAmount;\\n        uint256 totalBorrowsNew = totalBorrows - actualRepayAmount;\\n\\n        /* We write the previously calculated values into storage */\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /* We emit a RepayBorrow event */\\n        emit RepayBorrow(payer, borrower, actualRepayAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.repayBorrowVerify(address(this), payer, borrower, actualRepayAmount, borrowIndex);\\n\\n        return actualRepayAmount;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal nonReentrant {\\n        accrueInterest();\\n\\n        uint256 error = vTokenCollateral.accrueInterest();\\n        if (error != NO_ERROR) {\\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted liquidation failed\\n            revert LiquidateAccrueCollateralInterestFailed(error);\\n        }\\n\\n        _liquidateBorrowFresh(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice The liquidator liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrowFresh(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal {\\n        /* Fail if liquidate not allowed */\\n        comptroller.preLiquidateHook(\\n            address(this),\\n            address(vTokenCollateral),\\n            borrower,\\n            repayAmount,\\n            skipLiquidityCheck\\n        );\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert LiquidateFreshnessCheck();\\n        }\\n\\n        /* Verify vTokenCollateral market's slot(block or second) number equals current slot(block or second) number */\\n        if (vTokenCollateral.accrualBlockNumber() != getBlockNumberOrTimestamp()) {\\n            revert LiquidateCollateralFreshnessCheck();\\n        }\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateLiquidatorIsBorrower();\\n        }\\n\\n        /* Fail if repayAmount = 0 */\\n        if (repayAmount == 0) {\\n            revert LiquidateCloseAmountIsZero();\\n        }\\n\\n        /* Fail if repayAmount = type(uint256).max */\\n        if (repayAmount == type(uint256).max) {\\n            revert LiquidateCloseAmountIsUintMax();\\n        }\\n\\n        /* Fail if repayBorrow fails */\\n        uint256 actualRepayAmount = _repayBorrowFresh(liquidator, borrower, repayAmount);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We calculate the number of collateral tokens that will be seized */\\n        (uint256 amountSeizeError, uint256 seizeTokens) = comptroller.liquidateCalculateSeizeTokens(\\n            address(this),\\n            address(vTokenCollateral),\\n            actualRepayAmount\\n        );\\n        require(amountSeizeError == NO_ERROR, \\\"LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED\\\");\\n\\n        /* Revert if borrower collateral token balance < seizeTokens */\\n        require(vTokenCollateral.balanceOf(borrower) >= seizeTokens, \\\"LIQUIDATE_SEIZE_TOO_MUCH\\\");\\n\\n        // If this is also the collateral, call _seize internally to avoid re-entrancy, otherwise make an external call\\n        if (address(vTokenCollateral) == address(this)) {\\n            _seize(address(this), liquidator, borrower, seizeTokens);\\n        } else {\\n            vTokenCollateral.seize(liquidator, borrower, seizeTokens);\\n        }\\n\\n        /* We emit a LiquidateBorrow event */\\n        emit LiquidateBorrow(liquidator, borrower, actualRepayAmount, address(vTokenCollateral), seizeTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.liquidateBorrowVerify(\\n            address(this),\\n            address(vTokenCollateral),\\n            liquidator,\\n            borrower,\\n            actualRepayAmount,\\n            seizeTokens\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Called only during an in-kind liquidation, or by liquidateBorrow during the liquidation of another VToken.\\n     *  It's absolutely critical to use msg.sender as the seizer vToken and not a parameter.\\n     * @param seizerContract The contract seizing the collateral (either borrowed vToken or Comptroller)\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     */\\n    function _seize(address seizerContract, address liquidator, address borrower, uint256 seizeTokens) internal {\\n        /* Fail if seize not allowed */\\n        comptroller.preSeizeHook(address(this), seizerContract, liquidator, borrower);\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateSeizeLiquidatorIsBorrower();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and liquidator token balances, failing on underflow/overflow:\\n         *  borrowerTokensNew = accountTokens[borrower] - seizeTokens\\n         *  liquidatorTokensNew = accountTokens[liquidator] + seizeTokens\\n         */\\n        uint256 liquidationIncentiveMantissa = ComptrollerViewInterface(address(comptroller))\\n            .liquidationIncentiveMantissa();\\n        uint256 numerator = mul_(seizeTokens, Exp({ mantissa: protocolSeizeShareMantissa }));\\n        uint256 protocolSeizeTokens = div_(numerator, Exp({ mantissa: liquidationIncentiveMantissa }));\\n        uint256 liquidatorSeizeTokens = seizeTokens - protocolSeizeTokens;\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n        uint256 protocolSeizeAmount = mul_ScalarTruncate(exchangeRate, protocolSeizeTokens);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the calculated values into storage */\\n        totalSupply = totalSupply - protocolSeizeTokens;\\n        accountTokens[borrower] = accountTokens[borrower] - seizeTokens;\\n        accountTokens[liquidator] = accountTokens[liquidator] + liquidatorSeizeTokens;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, protocolSeizeAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.LIQUIDATION\\n        );\\n\\n        /* Emit a Transfer event */\\n        emit Transfer(borrower, liquidator, liquidatorSeizeTokens);\\n        emit ProtocolSeize(borrower, protocolShareReserve, protocolSeizeAmount);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.seizeVerify(address(this), seizerContract, liquidator, borrower, seizeTokens);\\n    }\\n\\n    function _setComptroller(ComptrollerInterface newComptroller) internal {\\n        ComptrollerInterface oldComptroller = comptroller;\\n        // Ensure invoke comptroller.isComptroller() returns true\\n        require(newComptroller.isComptroller(), \\\"marker method returned false\\\");\\n\\n        // Set market's comptroller to newComptroller\\n        comptroller = newComptroller;\\n\\n        // Emit NewComptroller(oldComptroller, newComptroller)\\n        emit NewComptroller(oldComptroller, newComptroller);\\n    }\\n\\n    /**\\n     * @notice Sets a new reserve factor for the protocol (*requires fresh interest accrual)\\n     * @dev Admin function to set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     */\\n    function _setReserveFactorFresh(uint256 newReserveFactorMantissa) internal {\\n        // Verify market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetReserveFactorFreshCheck();\\n        }\\n\\n        // Check newReserveFactor \\u2264 maxReserveFactor\\n        if (newReserveFactorMantissa > MAX_RESERVE_FACTOR_MANTISSA) {\\n            revert SetReserveFactorBoundsCheck();\\n        }\\n\\n        uint256 oldReserveFactorMantissa = reserveFactorMantissa;\\n        reserveFactorMantissa = newReserveFactorMantissa;\\n\\n        emit NewReserveFactor(oldReserveFactorMantissa, newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Add reserves by transferring from caller\\n     * @dev Requires fresh interest accrual\\n     * @param addAmount Amount of addition to reserves\\n     * @return actualAddAmount The actual amount added, excluding the potential token fees\\n     */\\n    function _addReservesFresh(uint256 addAmount) internal returns (uint256) {\\n        // totalReserves + actualAddAmount\\n        uint256 totalReservesNew;\\n        uint256 actualAddAmount;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert AddReservesFactorFreshCheck(actualAddAmount);\\n        }\\n\\n        actualAddAmount = _doTransferIn(msg.sender, addAmount);\\n        totalReservesNew = totalReserves + actualAddAmount;\\n        totalReserves = totalReservesNew;\\n        emit ReservesAdded(msg.sender, actualAddAmount, totalReservesNew);\\n\\n        return actualAddAmount;\\n    }\\n\\n    /**\\n     * @notice Reduces reserves by transferring to the protocol reserve contract\\n     * @dev Requires fresh interest accrual\\n     * @param reduceAmount Amount of reduction to reserves\\n     */\\n    function _reduceReservesFresh(uint256 reduceAmount) internal {\\n        if (reduceAmount == 0) {\\n            return;\\n        }\\n        // totalReserves - reduceAmount\\n        uint256 totalReservesNew;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert ReduceReservesFreshCheck();\\n        }\\n\\n        // Fail gracefully if protocol has insufficient underlying cash\\n        if (_getCashPrior() < reduceAmount) {\\n            revert ReduceReservesCashNotAvailable();\\n        }\\n\\n        // Check reduceAmount \\u2264 reserves[n] (totalReserves)\\n        if (reduceAmount > totalReserves) {\\n            revert ReduceReservesCashValidation();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        totalReservesNew = totalReserves - reduceAmount;\\n\\n        // Store reserves[n+1] = reserves[n] - reduceAmount\\n        totalReserves = totalReservesNew;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, reduceAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.SPREAD\\n        );\\n\\n        emit SpreadReservesReduced(protocolShareReserve, reduceAmount, totalReservesNew);\\n    }\\n\\n    /**\\n     * @notice updates the interest rate model (*requires fresh interest accrual)\\n     * @dev Admin function to update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     */\\n    function _setInterestRateModelFresh(InterestRateModel newInterestRateModel) internal {\\n        // Used to store old model for use in the event that is emitted on success\\n        InterestRateModel oldInterestRateModel;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetInterestRateModelFreshCheck();\\n        }\\n\\n        // Track the market's current interest rate model\\n        oldInterestRateModel = interestRateModel;\\n\\n        // Ensure invoke newInterestRateModel.isInterestRateModel() returns true\\n        require(newInterestRateModel.isInterestRateModel(), \\\"marker method returned false\\\");\\n\\n        // Set the interest rate model to newInterestRateModel\\n        interestRateModel = newInterestRateModel;\\n\\n        // Emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel)\\n        emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel);\\n    }\\n\\n    /**\\n     * Safe Token **\\n     */\\n\\n    /**\\n     * @dev Similar to ERC-20 transfer, but handles tokens that have transfer fees.\\n     *      This function returns the actual amount received,\\n     *      which may be less than `amount` if there is a fee attached to the transfer.\\n     * @param from Sender of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     * @return Actual amount received\\n     */\\n    function _doTransferIn(address from, uint256 amount) internal virtual returns (uint256) {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        uint256 balanceBefore = token.balanceOf(address(this));\\n        token.safeTransferFrom(from, address(this), amount);\\n        uint256 balanceAfter = token.balanceOf(address(this));\\n        // Return the amount that was *actually* transferred\\n        return balanceAfter - balanceBefore;\\n    }\\n\\n    /**\\n     * @dev Just a regular ERC-20 transfer, reverts on failure\\n     * @param to Receiver of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     */\\n    function _doTransferOut(address to, uint256 amount) internal virtual {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        token.safeTransfer(to, amount);\\n    }\\n\\n    /**\\n     * @notice Transfer `tokens` tokens from `src` to `dst` by `spender`\\n     * @dev Called by both `transfer` and `transferFrom` internally\\n     * @param spender The address of the account performing the transfer\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param tokens The number of tokens to transfer\\n     */\\n    function _transferTokens(address spender, address src, address dst, uint256 tokens) internal {\\n        /* Fail if transfer not allowed */\\n        comptroller.preTransferHook(address(this), src, dst, tokens);\\n\\n        /* Do not allow self-transfers */\\n        if (src == dst) {\\n            revert TransferNotAllowed();\\n        }\\n\\n        /* Get the allowance, infinite for the account owner */\\n        uint256 startingAllowance;\\n        if (spender == src) {\\n            startingAllowance = type(uint256).max;\\n        } else {\\n            startingAllowance = transferAllowances[src][spender];\\n        }\\n\\n        /* Do the calculations, checking for {under,over}flow */\\n        uint256 allowanceNew = startingAllowance - tokens;\\n        uint256 srcTokensNew = accountTokens[src] - tokens;\\n        uint256 dstTokensNew = accountTokens[dst] + tokens;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n\\n        accountTokens[src] = srcTokensNew;\\n        accountTokens[dst] = dstTokensNew;\\n\\n        /* Eat some of the allowance (if necessary) */\\n        if (startingAllowance != type(uint256).max) {\\n            transferAllowances[src][spender] = allowanceNew;\\n        }\\n\\n        /* We emit a Transfer event */\\n        emit Transfer(src, dst, tokens);\\n\\n        comptroller.transferVerify(address(this), src, dst, tokens);\\n    }\\n\\n    /**\\n     * @notice Initialize the money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     */\\n    function _initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n        require(accrualBlockNumber == 0 && borrowIndex == 0, \\\"market may only be initialized once\\\");\\n\\n        // Set initial exchange rate\\n        initialExchangeRateMantissa = initialExchangeRateMantissa_;\\n        require(initialExchangeRateMantissa > 0, \\\"initial exchange rate must be greater than zero.\\\");\\n\\n        _setComptroller(comptroller_);\\n\\n        // Initialize slot(block or second) number and borrow index (slot(block or second) number mocks depend on comptroller being set)\\n        accrualBlockNumber = getBlockNumberOrTimestamp();\\n        borrowIndex = MANTISSA_ONE;\\n\\n        // Set the interest rate model (depends on slot(block or second) number / borrow index)\\n        _setInterestRateModelFresh(interestRateModel_);\\n\\n        _setReserveFactorFresh(reserveFactorMantissa_);\\n\\n        name = name_;\\n        symbol = symbol_;\\n        decimals = decimals_;\\n        _setShortfallContract(riskManagement.shortfall);\\n        _setProtocolShareReserve(riskManagement.protocolShareReserve);\\n        protocolSeizeShareMantissa = DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA;\\n\\n        // Set underlying and sanity check it\\n        underlying = underlying_;\\n        IERC20Upgradeable(underlying).totalSupply();\\n\\n        // The counter starts true to prevent changing it from zero to non-zero (i.e. smaller cost/refund)\\n        _notEntered = true;\\n        _transferOwnership(admin_);\\n    }\\n\\n    function _setShortfallContract(address shortfall_) internal {\\n        ensureNonzeroAddress(shortfall_);\\n        address oldShortfall = shortfall;\\n        shortfall = shortfall_;\\n        emit NewShortfallContract(oldShortfall, shortfall_);\\n    }\\n\\n    function _setProtocolShareReserve(address payable protocolShareReserve_) internal {\\n        ensureNonzeroAddress(protocolShareReserve_);\\n        address oldProtocolShareReserve = address(protocolShareReserve);\\n        protocolShareReserve = protocolShareReserve_;\\n        emit NewProtocolShareReserve(oldProtocolShareReserve, address(protocolShareReserve_));\\n    }\\n\\n    function _ensureSenderIsDelegateOf(address user) internal view {\\n        if (!ComptrollerViewInterface(address(comptroller)).approvedDelegates(user, msg.sender)) {\\n            revert DelegateNotApproved();\\n        }\\n    }\\n\\n    /**\\n     * @notice Gets balance of this contract in terms of the underlying\\n     * @dev This excludes the value of the current message, if any\\n     * @return The quantity of underlying tokens owned by this contract\\n     */\\n    function _getCashPrior() internal view virtual returns (uint256) {\\n        return IERC20Upgradeable(underlying).balanceOf(address(this));\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance the calculated balance\\n     */\\n    function _borrowBalanceStored(address account) internal view returns (uint256) {\\n        /* Get borrowBalance and borrowIndex */\\n        BorrowSnapshot memory borrowSnapshot = accountBorrows[account];\\n\\n        /* If borrowBalance = 0 then borrowIndex is likely also 0.\\n         * Rather than failing the calculation with a division by 0, we immediately return 0 in this case.\\n         */\\n        if (borrowSnapshot.principal == 0) {\\n            return 0;\\n        }\\n\\n        /* Calculate new borrow balance using the interest index:\\n         *  recentBorrowBalance = borrower.borrowBalance * market.borrowIndex / borrower.borrowIndex\\n         */\\n        uint256 principalTimesIndex = borrowSnapshot.principal * borrowIndex;\\n\\n        return principalTimesIndex / borrowSnapshot.interestIndex;\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function _exchangeRateStored() internal view virtual returns (uint256) {\\n        uint256 _totalSupply = totalSupply;\\n        if (_totalSupply == 0) {\\n            /*\\n             * If there are no tokens minted:\\n             *  exchangeRate = initialExchangeRate\\n             */\\n            return initialExchangeRateMantissa;\\n        }\\n        /*\\n         * Otherwise:\\n         *  exchangeRate = (totalCash + totalBorrows + badDebt - totalReserves) / totalSupply\\n         */\\n        uint256 totalCash = _getCashPrior();\\n        uint256 cashPlusBorrowsMinusReserves = totalCash + totalBorrows + badDebt - totalReserves;\\n        uint256 exchangeRate = (cashPlusBorrowsMinusReserves * EXP_SCALE) / _totalSupply;\\n\\n        return exchangeRate;\\n    }\\n}\\n\",\"keccak256\":\"0xa220ca317fe69b920b86e43f054c43b5f891f12160fd312c9a21668f969ee056\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { ComptrollerInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\n\\n/**\\n * @title VTokenStorage\\n * @author Venus\\n * @notice Storage layout used by the `VToken` contract\\n */\\n// solhint-disable-next-line max-states-count\\ncontract VTokenStorage {\\n    /**\\n     * @notice Container for borrow balance information\\n     * @member principal Total balance (with accrued interest), after applying the most recent balance-changing action\\n     * @member interestIndex Global borrowIndex as of the most recent balance-changing action\\n     */\\n    struct BorrowSnapshot {\\n        uint256 principal;\\n        uint256 interestIndex;\\n    }\\n\\n    /**\\n     * @dev Guard variable for re-entrancy checks\\n     */\\n    bool internal _notEntered;\\n\\n    /**\\n     * @notice Underlying asset for this VToken\\n     */\\n    address public underlying;\\n\\n    /**\\n     * @notice EIP-20 token name for this token\\n     */\\n    string public name;\\n\\n    /**\\n     * @notice EIP-20 token symbol for this token\\n     */\\n    string public symbol;\\n\\n    /**\\n     * @notice EIP-20 token decimals for this token\\n     */\\n    uint8 public decimals;\\n\\n    /**\\n     * @notice Protocol share Reserve contract address\\n     */\\n    address payable public protocolShareReserve;\\n\\n    /**\\n     * @notice Contract which oversees inter-vToken operations\\n     */\\n    ComptrollerInterface public comptroller;\\n\\n    /**\\n     * @notice Model which tells what the current interest rate should be\\n     */\\n    InterestRateModel public interestRateModel;\\n\\n    // Initial exchange rate used when minting the first VTokens (used when totalSupply = 0)\\n    uint256 internal initialExchangeRateMantissa;\\n\\n    /**\\n     * @notice Fraction of interest currently set aside for reserves\\n     */\\n    uint256 public reserveFactorMantissa;\\n\\n    /**\\n     * @notice Slot(block or second) number that interest was last accrued at\\n     */\\n    uint256 public accrualBlockNumber;\\n\\n    /**\\n     * @notice Accumulator of the total earned interest rate since the opening of the market\\n     */\\n    uint256 public borrowIndex;\\n\\n    /**\\n     * @notice Total amount of outstanding borrows of the underlying in this market\\n     */\\n    uint256 public totalBorrows;\\n\\n    /**\\n     * @notice Total amount of reserves of the underlying held in this market\\n     */\\n    uint256 public totalReserves;\\n\\n    /**\\n     * @notice Total number of tokens in circulation\\n     */\\n    uint256 public totalSupply;\\n\\n    /**\\n     * @notice Total bad debt of the market\\n     */\\n    uint256 public badDebt;\\n\\n    // Official record of token balances for each account\\n    mapping(address => uint256) internal accountTokens;\\n\\n    // Approved token transfer amounts on behalf of others\\n    mapping(address => mapping(address => uint256)) internal transferAllowances;\\n\\n    // Mapping of account addresses to outstanding borrow balances\\n    mapping(address => BorrowSnapshot) internal accountBorrows;\\n\\n    /**\\n     * @notice Share of seized collateral that is added to reserves\\n     */\\n    uint256 public protocolSeizeShareMantissa;\\n\\n    /**\\n     * @notice Storage of Shortfall contract address\\n     */\\n    address public shortfall;\\n\\n    /**\\n     * @notice delta slot (block or second) after which reserves will be reduced\\n     */\\n    uint256 public reduceReservesBlockDelta;\\n\\n    /**\\n     * @notice last slot (block or second) number at which reserves were reduced\\n     */\\n    uint256 public reduceReservesBlockNumber;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n}\\n\\n/**\\n * @title VTokenInterface\\n * @author Venus\\n * @notice Interface implemented by the `VToken` contract\\n */\\nabstract contract VTokenInterface is VTokenStorage {\\n    struct RiskManagementInit {\\n        address shortfall;\\n        address payable protocolShareReserve;\\n    }\\n\\n    /*** Market Events ***/\\n\\n    /**\\n     * @notice Event emitted when interest is accrued\\n     */\\n    event AccrueInterest(uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when tokens are minted\\n     */\\n    event Mint(address indexed minter, uint256 mintAmount, uint256 mintTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when tokens are redeemed\\n     */\\n    event Redeem(address indexed redeemer, uint256 redeemAmount, uint256 redeemTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when underlying is borrowed\\n     */\\n    event Borrow(address indexed borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when a borrow is repaid\\n     */\\n    event RepayBorrow(\\n        address indexed payer,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        uint256 accountBorrows,\\n        uint256 totalBorrows\\n    );\\n\\n    /**\\n     * @notice Event emitted when bad debt is accumulated on a market\\n     * @param borrower borrower to \\\"forgive\\\"\\n     * @param badDebtDelta amount of new bad debt recorded\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtIncreased(address indexed borrower, uint256 badDebtDelta, uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when bad debt is recovered via an auction\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtRecovered(uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when a borrow is liquidated\\n     */\\n    event LiquidateBorrow(\\n        address indexed liquidator,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        address indexed vTokenCollateral,\\n        uint256 seizeTokens\\n    );\\n\\n    /*** Admin Events ***/\\n\\n    /**\\n     * @notice Event emitted when comptroller is changed\\n     */\\n    event NewComptroller(ComptrollerInterface indexed oldComptroller, ComptrollerInterface indexed newComptroller);\\n\\n    /**\\n     * @notice Event emitted when shortfall contract address is changed\\n     */\\n    event NewShortfallContract(address indexed oldShortfall, address indexed newShortfall);\\n\\n    /**\\n     * @notice Event emitted when protocol share reserve contract address is changed\\n     */\\n    event NewProtocolShareReserve(address indexed oldProtocolShareReserve, address indexed newProtocolShareReserve);\\n\\n    /**\\n     * @notice Event emitted when interestRateModel is changed\\n     */\\n    event NewMarketInterestRateModel(\\n        InterestRateModel indexed oldInterestRateModel,\\n        InterestRateModel indexed newInterestRateModel\\n    );\\n\\n    /**\\n     * @notice Event emitted when protocol seize share is changed\\n     */\\n    event NewProtocolSeizeShare(uint256 oldProtocolSeizeShareMantissa, uint256 newProtocolSeizeShareMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserve factor is changed\\n     */\\n    event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserves are added\\n     */\\n    event ReservesAdded(address indexed benefactor, uint256 addAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice Event emitted when the spread reserves are reduced\\n     */\\n    event SpreadReservesReduced(address indexed protocolShareReserve, uint256 reduceAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice EIP20 Transfer event\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 amount);\\n\\n    /**\\n     * @notice EIP20 Approval event\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\\n\\n    /**\\n     * @notice Event emitted when healing the borrow\\n     */\\n    event HealBorrow(address indexed payer, address indexed borrower, uint256 repayAmount);\\n\\n    /**\\n     * @notice Event emitted when tokens are swept\\n     */\\n    event SweepToken(address indexed token);\\n\\n    /**\\n     * @notice Event emitted when reduce reserves slot (block or second) delta is changed\\n     */\\n    event NewReduceReservesBlockDelta(\\n        uint256 oldReduceReservesBlockOrTimestampDelta,\\n        uint256 newReduceReservesBlockOrTimestampDelta\\n    );\\n\\n    /**\\n     * @notice Event emitted when liquidation reserves are reduced\\n     */\\n    event ProtocolSeize(address indexed from, address indexed to, uint256 amount);\\n\\n    /*** User Interface ***/\\n\\n    function mint(uint256 mintAmount) external virtual returns (uint256);\\n\\n    function mintBehalf(address minter, uint256 mintAllowed) external virtual returns (uint256);\\n\\n    function redeem(uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemUnderlying(uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function redeemUnderlyingBehalf(address redeemer, uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function borrow(uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function borrowBehalf(address borrwwer, uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function repayBorrow(uint256 repayAmount) external virtual returns (uint256);\\n\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external virtual returns (uint256);\\n\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external virtual returns (uint256);\\n\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external virtual;\\n\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipCloseFactorCheck\\n    ) external virtual;\\n\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external virtual;\\n\\n    function transfer(address dst, uint256 amount) external virtual returns (bool);\\n\\n    function transferFrom(address src, address dst, uint256 amount) external virtual returns (bool);\\n\\n    function accrueInterest() external virtual returns (uint256);\\n\\n    function sweepToken(IERC20Upgradeable token) external virtual;\\n\\n    /*** Admin Functions ***/\\n\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external virtual;\\n\\n    function reduceReserves(uint256 reduceAmount) external virtual;\\n\\n    function exchangeRateCurrent() external virtual returns (uint256);\\n\\n    function borrowBalanceCurrent(address account) external virtual returns (uint256);\\n\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external virtual;\\n\\n    function addReserves(uint256 addAmount) external virtual;\\n\\n    function totalBorrowsCurrent() external virtual returns (uint256);\\n\\n    function balanceOfUnderlying(address owner) external virtual returns (uint256);\\n\\n    function approve(address spender, uint256 amount) external virtual returns (bool);\\n\\n    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool);\\n\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool);\\n\\n    function allowance(address owner, address spender) external view virtual returns (uint256);\\n\\n    function balanceOf(address owner) external view virtual returns (uint256);\\n\\n    function getAccountSnapshot(address account) external view virtual returns (uint256, uint256, uint256, uint256);\\n\\n    function borrowRatePerBlock() external view virtual returns (uint256);\\n\\n    function supplyRatePerBlock() external view virtual returns (uint256);\\n\\n    function borrowBalanceStored(address account) external view virtual returns (uint256);\\n\\n    function exchangeRateStored() external view virtual returns (uint256);\\n\\n    function getCash() external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is a VToken contract (for inspection)\\n     * @return Always true\\n     */\\n    function isVToken() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7c4cbb879e3a931cfee4fa7a9eb1978eddff18087a1c4f56decedb84c2479f1e\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\",\"keccak256\":\"0x54ab3a6f3bc87569ed12370f3470a1ec84cea9796d4d0ccf3d07dd4280c044aa\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/validators.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\\nerror ZeroAddressNotAllowed();\\n\\n/// @notice Checks if the provided address is nonzero, reverts otherwise\\n/// @param address_ Address to check\\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\\nfunction ensureNonzeroAddress(address address_) pure {\\n    if (address_ == address(0)) {\\n        revert ZeroAddressNotAllowed();\\n    }\\n}\\n\",\"keccak256\":\"0x93bdd5cfb100f0f9a1d446857e23c3633df6ab12c266333c978428edd96b1367\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface IProtocolShareReserve {\\n    /// @notice it represents the type of vToken income\\n    enum IncomeType {\\n        SPREAD,\\n        LIQUIDATION\\n    }\\n\\n    function updateAssetsState(\\n        address comptroller,\\n        address asset,\\n        IncomeType incomeType\\n    ) external;\\n}\\n\",\"keccak256\":\"0x5fddc5b63fdd850b3b5c83576cda50dcb27a205dbb1a23af17d9da0d9f04fa0a\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { SECONDS_PER_YEAR } from \\\"./constants.sol\\\";\\n\\nabstract contract TimeManagerV8 {\\n    /// @notice Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 public immutable blocksOrSecondsPerYear;\\n\\n    /// @notice Acknowledges if a contract is time based or not\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    bool public immutable isTimeBased;\\n\\n    /// @notice Stores the current block timestamp or block number depending on isTimeBased\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    function() view returns (uint256) private immutable _getCurrentSlot;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n\\n    /// @notice Thrown when blocks per year is invalid\\n    error InvalidBlocksPerYear();\\n\\n    /// @notice Thrown when time based but blocks per year is provided\\n    error InvalidTimeBasedConfiguration();\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block\\n     * If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:error InvalidBlocksPerYear is thrown if blocksPerYear entered is zero and timeBased is false\\n     * @custom:error InvalidTimeBasedConfiguration is thrown if blocksPerYear entered is non zero and timeBased is true\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) {\\n        if (!timeBased_ && blocksPerYear_ == 0) {\\n            revert InvalidBlocksPerYear();\\n        }\\n\\n        if (timeBased_ && blocksPerYear_ != 0) {\\n            revert InvalidTimeBasedConfiguration();\\n        }\\n\\n        isTimeBased = timeBased_;\\n        blocksOrSecondsPerYear = timeBased_ ? SECONDS_PER_YEAR : blocksPerYear_;\\n        _getCurrentSlot = timeBased_ ? _getBlockTimestamp : _getBlockNumber;\\n    }\\n\\n    /**\\n     * @dev Function to simply retrieve block number or block timestamp\\n     * @return Current block number or block timestamp\\n     */\\n    function getBlockNumberOrTimestamp() public view virtual returns (uint256) {\\n        return _getCurrentSlot();\\n    }\\n\\n    /**\\n     * @dev Returns the current timestamp in seconds\\n     * @return The current timestamp\\n     */\\n    function _getBlockTimestamp() private view returns (uint256) {\\n        return block.timestamp;\\n    }\\n\\n    /**\\n     * @dev Returns the current block number\\n     * @return The current block number\\n     */\\n    function _getBlockNumber() private view returns (uint256) {\\n        return block.number;\\n    }\\n}\\n\",\"keccak256\":\"0x57a2bbb9b8e02b1c0a5c0e305fef1328a22db56c3d4b148c362010a6e767243c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\",\"keccak256\":\"0x14de93ead464da249af31bea0e3bcfb62ec693bea3475fb4d90f055ac81dc5eb\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { PrimeStorageV1 } from \\\"../PrimeStorage.sol\\\";\\n\\n/**\\n * @title IPrime\\n * @author Venus\\n * @notice Interface for Prime Token\\n */\\ninterface IPrime {\\n    struct APRInfo {\\n        // supply APR of the user in BPS\\n        uint256 supplyAPR;\\n        // borrow APR of the user in BPS\\n        uint256 borrowAPR;\\n        // total score of the market\\n        uint256 totalScore;\\n        // score of the user\\n        uint256 userScore;\\n        // capped XVS balance of the user\\n        uint256 xvsBalanceForScore;\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    struct Capital {\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    /**\\n     * @notice Returns boosted pending interest accrued for a user for all markets\\n     * @param user the account for which to get the accrued interests\\n     * @return pendingRewards the number of underlying tokens accrued by the user for all markets\\n     */\\n    function getPendingRewards(address user) external returns (PrimeStorageV1.PendingReward[] memory pendingRewards);\\n\\n    /**\\n     * @notice Update total score of multiple users and market\\n     * @param users accounts for which we need to update score\\n     */\\n    function updateScores(address[] memory users) external;\\n\\n    /**\\n     * @notice Update value of alpha\\n     * @param _alphaNumerator numerator of alpha. If alpha is 0.5 then numerator is 1\\n     * @param _alphaDenominator denominator of alpha. If alpha is 0.5 then denominator is 2\\n     */\\n    function updateAlpha(uint128 _alphaNumerator, uint128 _alphaDenominator) external;\\n\\n    /**\\n     * @notice Update multipliers for a market\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier new supply multiplier for the market, scaled by 1e18\\n     * @param borrowMultiplier new borrow multiplier for the market, scaled by 1e18\\n     */\\n    function updateMultipliers(address market, uint256 supplyMultiplier, uint256 borrowMultiplier) external;\\n\\n    /**\\n     * @notice Add a market to prime program\\n     * @param comptroller address of the comptroller\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier the multiplier for supply cap. It should be converted to 1e18\\n     * @param borrowMultiplier the multiplier for borrow cap. It should be converted to 1e18\\n     */\\n    function addMarket(\\n        address comptroller,\\n        address market,\\n        uint256 supplyMultiplier,\\n        uint256 borrowMultiplier\\n    ) external;\\n\\n    /**\\n     * @notice Set limits for total tokens that can be minted\\n     * @param _irrevocableLimit total number of irrevocable tokens that can be minted\\n     * @param _revocableLimit total number of revocable tokens that can be minted\\n     */\\n    function setLimit(uint256 _irrevocableLimit, uint256 _revocableLimit) external;\\n\\n    /**\\n     * @notice Directly issue prime tokens to users\\n     * @param isIrrevocable are the tokens being issued\\n     * @param users list of address to issue tokens to\\n     */\\n    function issue(bool isIrrevocable, address[] calldata users) external;\\n\\n    /**\\n     * @notice Executed by XVSVault whenever user's XVSVault balance changes\\n     * @param user the account address whose balance was updated\\n     */\\n    function xvsUpdated(address user) external;\\n\\n    /**\\n     * @notice accrues interest and updates score for an user for a specific market\\n     * @param user the account address for which to accrue interest and update score\\n     * @param market the market for which to accrue interest and update score\\n     */\\n    function accrueInterestAndUpdateScore(address user, address market) external;\\n\\n    /**\\n     * @notice For claiming prime token when staking period is completed\\n     */\\n    function claim() external;\\n\\n    /**\\n     * @notice For burning any prime token\\n     * @param user the account address for which the prime token will be burned\\n     */\\n    function burn(address user) external;\\n\\n    /**\\n     * @notice To pause or unpause claiming of interest\\n     */\\n    function togglePause() external;\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken) external returns (uint256);\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @param user the user for which to claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Distributes income from market since last distribution\\n     * @param vToken the market for which to distribute the income\\n     */\\n    function accrueInterest(address vToken) external;\\n\\n    /**\\n     * @notice Returns boosted interest accrued for a user\\n     * @param vToken the market for which to fetch the accrued interest\\n     * @param user the account for which to get the accrued interest\\n     * @return interestAccrued the number of underlying tokens accrued by the user since the last accrual\\n     */\\n    function getInterestAccrued(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Retrieves an array of all available markets\\n     * @return an array of addresses representing all available markets\\n     */\\n    function getAllMarkets() external view returns (address[] memory);\\n\\n    /**\\n     * @notice fetch the numbers of seconds remaining for staking period to complete\\n     * @param user the account address for which we are checking the remaining time\\n     * @return timeRemaining the number of seconds the user needs to wait to claim prime token\\n     */\\n    function claimTimeRemaining(address user) external view returns (uint256);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for user for a given market\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function calculateAPR(address market, address user) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for estimated supply, borrow and XVS staked\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @param borrow hypothetical borrow amount\\n     * @param supply hypothetical supply amount\\n     * @param xvsStaked hypothetical staked XVS amount\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function estimateAPR(\\n        address market,\\n        address user,\\n        uint256 borrow,\\n        uint256 supply,\\n        uint256 xvsStaked\\n    ) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice the total income that's going to be distributed in a year to prime token holders\\n     * @param vToken the market for which to fetch the total income that's going to distributed in a year\\n     * @return amount the total income\\n     */\\n    function incomeDistributionYearly(address vToken) external view returns (uint256 amount);\\n\\n    /**\\n     * @notice Returns if user is a prime holder\\n     * @return isPrimeHolder true if user is a prime holder\\n     */\\n    function isUserPrimeHolder(address user) external view returns (bool);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param loopsLimit Number of loops limit\\n     */\\n    function setMaxLoopsLimit(uint256 loopsLimit) external;\\n\\n    /**\\n     * @notice Update staked at timestamp for multiple users\\n     * @param users accounts for which we need to update staked at timestamp\\n     * @param timestamps new staked at timestamp for the users\\n     */\\n    function setStakedAt(address[] calldata users, uint256[] calldata timestamps) external;\\n}\\n\",\"keccak256\":\"0xd112f60183416ad796093b4a83a80ddc1b8b655965f02ae55ca82e2a0c68f97d\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\n/**\\n * @title PrimeStorageV1\\n * @author Venus\\n * @notice Storage for Prime Token\\n */\\ncontract PrimeStorageV1 {\\n    struct Token {\\n        bool exists;\\n        bool isIrrevocable;\\n    }\\n\\n    struct Market {\\n        uint256 supplyMultiplier;\\n        uint256 borrowMultiplier;\\n        uint256 rewardIndex;\\n        uint256 sumOfMembersScore;\\n        bool exists;\\n    }\\n\\n    struct Interest {\\n        uint256 accrued;\\n        uint256 score;\\n        uint256 rewardIndex;\\n    }\\n\\n    struct PendingReward {\\n        address vToken;\\n        address rewardToken;\\n        uint256 amount;\\n    }\\n\\n    /// @notice Base unit for computations, usually used in scaling (multiplications, divisions)\\n    uint256 internal constant EXP_SCALE = 1e18;\\n\\n    /// @notice maximum BPS = 100%\\n    uint256 internal constant MAXIMUM_BPS = 1e4;\\n\\n    /// @notice Mapping to get prime token's metadata\\n    mapping(address => Token) public tokens;\\n\\n    /// @notice  Tracks total irrevocable tokens minted\\n    uint256 public totalIrrevocable;\\n\\n    /// @notice  Tracks total revocable tokens minted\\n    uint256 public totalRevocable;\\n\\n    /// @notice  Indicates maximum revocable tokens that can be minted\\n    uint256 public revocableLimit;\\n\\n    /// @notice  Indicates maximum irrevocable tokens that can be minted\\n    uint256 public irrevocableLimit;\\n\\n    /// @notice Tracks when prime token eligible users started staking for claiming prime token\\n    mapping(address => uint256) public stakedAt;\\n\\n    /// @notice vToken to market configuration\\n    mapping(address => Market) public markets;\\n\\n    /// @notice vToken to user to user index\\n    mapping(address => mapping(address => Interest)) public interests;\\n\\n    /// @notice A list of boosted markets\\n    address[] internal _allMarkets;\\n\\n    /// @notice numerator of alpha. Ex: if alpha is 0.5 then this will be 1\\n    uint128 public alphaNumerator;\\n\\n    /// @notice denominator of alpha. Ex: if alpha is 0.5 then this will be 2\\n    uint128 public alphaDenominator;\\n\\n    /// @notice address of XVS vault\\n    address public xvsVault;\\n\\n    /// @notice address of XVS vault reward token\\n    address public xvsVaultRewardToken;\\n\\n    /// @notice address of XVS vault pool id\\n    uint256 public xvsVaultPoolId;\\n\\n    /// @notice mapping to check if a account's score was updated in the round\\n    mapping(uint256 => mapping(address => bool)) public isScoreUpdated;\\n\\n    /// @notice unique id for next round\\n    uint256 public nextScoreUpdateRoundId;\\n\\n    /// @notice total number of accounts whose score needs to be updated\\n    uint256 public totalScoreUpdatesRequired;\\n\\n    /// @notice total number of accounts whose score is yet to be updated\\n    uint256 public pendingScoreUpdates;\\n\\n    /// @notice mapping used to find if an asset is part of prime markets\\n    mapping(address => address) public vTokenForAsset;\\n\\n    /// @notice Address of core pool comptroller contract\\n    address internal corePoolComptroller;\\n\\n    /// @notice unreleased income from PLP that's already distributed to prime holders\\n    /// @dev mapping of asset address => amount\\n    mapping(address => uint256) public unreleasedPLPIncome;\\n\\n    /// @notice The address of PLP contract\\n    address public primeLiquidityProvider;\\n\\n    /// @notice The address of ResilientOracle contract\\n    ResilientOracleInterface public oracle;\\n\\n    /// @notice The address of PoolRegistry contract\\n    address public poolRegistry;\\n\\n    /// @dev This empty reserved space is put in place to allow future versions to add new\\n    /// variables without shifting down storage in the inheritance chain.\\n    uint256[26] private __gap;\\n}\\n\",\"keccak256\":\"0x5285c875114db2ea2be0b81b65722d5761806217022db733323c4e03365a95e7\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Interface implemented by the `Comptroller` contract, including only some util view functions.","version":1}}},"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol":{"ComptrollerStorage":{"abi":[{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"accountAssets","outputs":[{"internalType":"contract VToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allMarkets","outputs":[{"internalType":"contract VToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"approvedDelegates","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"borrowCaps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"closeFactorMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isForcedLiquidationEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidationIncentiveMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"markets","outputs":[{"internalType":"bool","name":"isListed","type":"bool"},{"internalType":"uint256","name":"collateralFactorMantissa","type":"uint256"},{"internalType":"uint256","name":"liquidationThresholdMantissa","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minLiquidatableCollateral","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"contract ResilientOracleInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prime","outputs":[{"internalType":"contract IPrime","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"supplyCaps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Venus","kind":"dev","methods":{},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"markets":{"details":"Used e.g. to determine if a market is supported"}},"title":"ComptrollerStorage","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080604052348015600f57600080fd5b5061044d8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80638c1ac18a116100715780638c1ac18a146101865780638e8f294b146101a9578063c7ee005e146101eb578063db5c65de146101fe578063dce1544914610207578063e87554461461021a57600080fd5b806302c3bcbb146100b957806310b98338146100ef5780634a5844321461012a5780634ada90af1461014a57806352d84d1e146101535780637dc0d1d014610173575b600080fd5b6100d96100c73660046102ba565b60086020526000908152604090205481565b6040516100e691906102eb565b60405180910390f35b61011d6100fd3660046102f9565b600e60209081526000928352604080842090915290825290205460ff1681565b6040516100e6919061033e565b6100d96101383660046102ba565b60066020526000908152604090205481565b6100d960025481565b61016661016136600461035d565b610223565b6040516100e691906103ae565b600054610166906001600160a01b031681565b61011d6101943660046102ba565b600c6020526000908152604090205460ff1681565b6101dc6101b73660046102ba565b60046020526000908152604090208054600182015460029092015460ff909116919083565b6040516100e6939291906103bc565b600d54610166906001600160a01b031681565b6100d960075481565b6101666102153660046103e4565b61024d565b6100d960015481565b6005818154811061023357600080fd5b6000918252602090912001546001600160a01b0316905081565b6003602052816000526040600020818154811061026957600080fd5b6000918252602090912001546001600160a01b03169150829050565b60006001600160a01b0382165b92915050565b6102a181610285565b81146102ac57600080fd5b50565b803561029281610298565b6000602082840312156102cf576102cf600080fd5b60006102db84846102af565b949350505050565b805b82525050565b6020810161029282846102e3565b6000806040838503121561030f5761030f600080fd5b600061031b85856102af565b925050602061032c858286016102af565b9150509250929050565b8015156102e5565b602081016102928284610336565b806102a1565b80356102928161034c565b60006020828403121561037257610372600080fd5b60006102db8484610352565b60006001600160a01b038216610292565b60006102928261037e565b60006102928261038f565b6102e58161039a565b6020810161029282846103a5565b606081016103ca8286610336565b6103d760208301856102e3565b6102db60408301846102e3565b600080604083850312156103fa576103fa600080fd5b600061040685856102af565b925050602061032c8582860161035256fea2646970667358221220ab487bf284a369f03e126053242435439ac81e76e027d30f34bb1f1de8e62b1764736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x44D DUP1 PUSH2 0x1F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8C1AC18A GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x8C1AC18A EQ PUSH2 0x186 JUMPI DUP1 PUSH4 0x8E8F294B EQ PUSH2 0x1A9 JUMPI DUP1 PUSH4 0xC7EE005E EQ PUSH2 0x1EB JUMPI DUP1 PUSH4 0xDB5C65DE EQ PUSH2 0x1FE JUMPI DUP1 PUSH4 0xDCE15449 EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0xE8755446 EQ PUSH2 0x21A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2C3BCBB EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x10B98338 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x4A584432 EQ PUSH2 0x12A JUMPI DUP1 PUSH4 0x4ADA90AF EQ PUSH2 0x14A JUMPI DUP1 PUSH4 0x52D84D1E EQ PUSH2 0x153 JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0x173 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD9 PUSH2 0xC7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2BA JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE6 SWAP2 SWAP1 PUSH2 0x2EB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x11D PUSH2 0xFD CALLDATASIZE PUSH1 0x4 PUSH2 0x2F9 JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE6 SWAP2 SWAP1 PUSH2 0x33E JUMP JUMPDEST PUSH2 0xD9 PUSH2 0x138 CALLDATASIZE PUSH1 0x4 PUSH2 0x2BA JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xD9 PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x166 PUSH2 0x161 CALLDATASIZE PUSH1 0x4 PUSH2 0x35D JUMP JUMPDEST PUSH2 0x223 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE6 SWAP2 SWAP1 PUSH2 0x3AE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x166 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x11D PUSH2 0x194 CALLDATASIZE PUSH1 0x4 PUSH2 0x2BA JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x1DC PUSH2 0x1B7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2BA JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD PUSH1 0xFF SWAP1 SWAP2 AND SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE6 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3BC JUMP JUMPDEST PUSH1 0xD SLOAD PUSH2 0x166 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0xD9 PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x166 PUSH2 0x215 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E4 JUMP JUMPDEST PUSH2 0x24D JUMP JUMPDEST PUSH2 0xD9 PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x269 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 POP DUP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2A1 DUP2 PUSH2 0x285 JUMP JUMPDEST DUP2 EQ PUSH2 0x2AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x292 DUP2 PUSH2 0x298 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2CF JUMPI PUSH2 0x2CF PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2DB DUP5 DUP5 PUSH2 0x2AF JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x292 DUP3 DUP5 PUSH2 0x2E3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x30F JUMPI PUSH2 0x30F PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x31B DUP6 DUP6 PUSH2 0x2AF JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x32C DUP6 DUP3 DUP7 ADD PUSH2 0x2AF JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x2E5 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x292 DUP3 DUP5 PUSH2 0x336 JUMP JUMPDEST DUP1 PUSH2 0x2A1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x292 DUP2 PUSH2 0x34C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x372 JUMPI PUSH2 0x372 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2DB DUP5 DUP5 PUSH2 0x352 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x292 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x292 DUP3 PUSH2 0x37E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x292 DUP3 PUSH2 0x38F JUMP JUMPDEST PUSH2 0x2E5 DUP2 PUSH2 0x39A JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x292 DUP3 DUP5 PUSH2 0x3A5 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x3CA DUP3 DUP7 PUSH2 0x336 JUMP JUMPDEST PUSH2 0x3D7 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x2E3 JUMP JUMPDEST PUSH2 0x2DB PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2E3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3FA JUMPI PUSH2 0x3FA PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x406 DUP6 DUP6 PUSH2 0x2AF JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x32C DUP6 DUP3 DUP7 ADD PUSH2 0x352 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAB BASEFEE PUSH28 0xF284A369F03E126053242435439AC81E76E027D30F34BB1F1DE8E62B OR PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ","sourceMap":"551:4183:30:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@accountAssets_9501":{"entryPoint":589,"id":9501,"parameterSlots":0,"returnSlots":0},"@allMarkets_9512":{"entryPoint":547,"id":9512,"parameterSlots":0,"returnSlots":0},"@approvedDelegates_9569":{"entryPoint":null,"id":9569,"parameterSlots":0,"returnSlots":0},"@borrowCaps_9517":{"entryPoint":null,"id":9517,"parameterSlots":0,"returnSlots":0},"@closeFactorMantissa_9491":{"entryPoint":null,"id":9491,"parameterSlots":0,"returnSlots":0},"@isForcedLiquidationEnabled_9546":{"entryPoint":null,"id":9546,"parameterSlots":0,"returnSlots":0},"@liquidationIncentiveMantissa_9494":{"entryPoint":null,"id":9494,"parameterSlots":0,"returnSlots":0},"@markets_9507":{"entryPoint":null,"id":9507,"parameterSlots":0,"returnSlots":0},"@minLiquidatableCollateral_9520":{"entryPoint":null,"id":9520,"parameterSlots":0,"returnSlots":0},"@oracle_9488":{"entryPoint":null,"id":9488,"parameterSlots":0,"returnSlots":0},"@prime_9562":{"entryPoint":null,"id":9562,"parameterSlots":0,"returnSlots":0},"@supplyCaps_9525":{"entryPoint":null,"id":9525,"parameterSlots":0,"returnSlots":0},"abi_decode_t_address":{"entryPoint":687,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_uint256":{"entryPoint":850,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":698,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":761,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":996,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":861,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_bool_to_t_bool_fromStack":{"entryPoint":822,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_IPrime_$16613_to_t_address_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_ResilientOracleInterface_$16173_to_t_address_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack":{"entryPoint":933,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_uint256_to_t_uint256_fromStack":{"entryPoint":739,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":830,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool_t_uint256_t_uint256__to_t_bool_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":956,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_contract$_IPrime_$16613__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_ResilientOracleInterface_$16173__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_VToken_$15506__to_t_address__fromStack_reversed":{"entryPoint":942,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":747,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"cleanup_t_address":{"entryPoint":645,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_bool":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_IPrime_$16613_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_ResilientOracleInterface_$16173_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_VToken_$15506_to_t_address":{"entryPoint":922,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint160_to_t_address":{"entryPoint":911,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint160_to_t_uint160":{"entryPoint":894,"id":null,"parameterSlots":1,"returnSlots":1},"identity":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_t_address":{"entryPoint":664,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_uint256":{"entryPoint":844,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:6206:69","nodeType":"YulBlock","src":"0:6206:69","statements":[{"body":{"nativeSrc":"47:35:69","nodeType":"YulBlock","src":"47:35:69","statements":[{"nativeSrc":"57:19:69","nodeType":"YulAssignment","src":"57:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"73:2:69","nodeType":"YulLiteral","src":"73:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"67:5:69","nodeType":"YulIdentifier","src":"67:5:69"},"nativeSrc":"67:9:69","nodeType":"YulFunctionCall","src":"67:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"57:6:69","nodeType":"YulIdentifier","src":"57:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"7:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"40:6:69","nodeType":"YulTypedName","src":"40:6:69","type":""}],"src":"7:75:69"},{"body":{"nativeSrc":"177:28:69","nodeType":"YulBlock","src":"177:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"194:1:69","nodeType":"YulLiteral","src":"194:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"197:1:69","nodeType":"YulLiteral","src":"197:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"187:6:69","nodeType":"YulIdentifier","src":"187:6:69"},"nativeSrc":"187:12:69","nodeType":"YulFunctionCall","src":"187:12:69"},"nativeSrc":"187:12:69","nodeType":"YulExpressionStatement","src":"187:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"88:117:69","nodeType":"YulFunctionDefinition","src":"88:117:69"},{"body":{"nativeSrc":"300:28:69","nodeType":"YulBlock","src":"300:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"317:1:69","nodeType":"YulLiteral","src":"317:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"320:1:69","nodeType":"YulLiteral","src":"320:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},"nativeSrc":"310:12:69","nodeType":"YulFunctionCall","src":"310:12:69"},"nativeSrc":"310:12:69","nodeType":"YulExpressionStatement","src":"310:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"211:117:69","nodeType":"YulFunctionDefinition","src":"211:117:69"},{"body":{"nativeSrc":"379:81:69","nodeType":"YulBlock","src":"379:81:69","statements":[{"nativeSrc":"389:65:69","nodeType":"YulAssignment","src":"389:65:69","value":{"arguments":[{"name":"value","nativeSrc":"404:5:69","nodeType":"YulIdentifier","src":"404:5:69"},{"kind":"number","nativeSrc":"411:42:69","nodeType":"YulLiteral","src":"411:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"400:3:69","nodeType":"YulIdentifier","src":"400:3:69"},"nativeSrc":"400:54:69","nodeType":"YulFunctionCall","src":"400:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"389:7:69","nodeType":"YulIdentifier","src":"389:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"334:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"361:5:69","nodeType":"YulTypedName","src":"361:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"371:7:69","nodeType":"YulTypedName","src":"371:7:69","type":""}],"src":"334:126:69"},{"body":{"nativeSrc":"511:51:69","nodeType":"YulBlock","src":"511:51:69","statements":[{"nativeSrc":"521:35:69","nodeType":"YulAssignment","src":"521:35:69","value":{"arguments":[{"name":"value","nativeSrc":"550:5:69","nodeType":"YulIdentifier","src":"550:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"532:17:69","nodeType":"YulIdentifier","src":"532:17:69"},"nativeSrc":"532:24:69","nodeType":"YulFunctionCall","src":"532:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"521:7:69","nodeType":"YulIdentifier","src":"521:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"466:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"493:5:69","nodeType":"YulTypedName","src":"493:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"503:7:69","nodeType":"YulTypedName","src":"503:7:69","type":""}],"src":"466:96:69"},{"body":{"nativeSrc":"611:79:69","nodeType":"YulBlock","src":"611:79:69","statements":[{"body":{"nativeSrc":"668:16:69","nodeType":"YulBlock","src":"668:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"677:1:69","nodeType":"YulLiteral","src":"677:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"680:1:69","nodeType":"YulLiteral","src":"680:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"670:6:69","nodeType":"YulIdentifier","src":"670:6:69"},"nativeSrc":"670:12:69","nodeType":"YulFunctionCall","src":"670:12:69"},"nativeSrc":"670:12:69","nodeType":"YulExpressionStatement","src":"670:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"634:5:69","nodeType":"YulIdentifier","src":"634:5:69"},{"arguments":[{"name":"value","nativeSrc":"659:5:69","nodeType":"YulIdentifier","src":"659:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"641:17:69","nodeType":"YulIdentifier","src":"641:17:69"},"nativeSrc":"641:24:69","nodeType":"YulFunctionCall","src":"641:24:69"}],"functionName":{"name":"eq","nativeSrc":"631:2:69","nodeType":"YulIdentifier","src":"631:2:69"},"nativeSrc":"631:35:69","nodeType":"YulFunctionCall","src":"631:35:69"}],"functionName":{"name":"iszero","nativeSrc":"624:6:69","nodeType":"YulIdentifier","src":"624:6:69"},"nativeSrc":"624:43:69","nodeType":"YulFunctionCall","src":"624:43:69"},"nativeSrc":"621:63:69","nodeType":"YulIf","src":"621:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"568:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"604:5:69","nodeType":"YulTypedName","src":"604:5:69","type":""}],"src":"568:122:69"},{"body":{"nativeSrc":"748:87:69","nodeType":"YulBlock","src":"748:87:69","statements":[{"nativeSrc":"758:29:69","nodeType":"YulAssignment","src":"758:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"780:6:69","nodeType":"YulIdentifier","src":"780:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"767:12:69","nodeType":"YulIdentifier","src":"767:12:69"},"nativeSrc":"767:20:69","nodeType":"YulFunctionCall","src":"767:20:69"},"variableNames":[{"name":"value","nativeSrc":"758:5:69","nodeType":"YulIdentifier","src":"758:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"823:5:69","nodeType":"YulIdentifier","src":"823:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"796:26:69","nodeType":"YulIdentifier","src":"796:26:69"},"nativeSrc":"796:33:69","nodeType":"YulFunctionCall","src":"796:33:69"},"nativeSrc":"796:33:69","nodeType":"YulExpressionStatement","src":"796:33:69"}]},"name":"abi_decode_t_address","nativeSrc":"696:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"726:6:69","nodeType":"YulTypedName","src":"726:6:69","type":""},{"name":"end","nativeSrc":"734:3:69","nodeType":"YulTypedName","src":"734:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"742:5:69","nodeType":"YulTypedName","src":"742:5:69","type":""}],"src":"696:139:69"},{"body":{"nativeSrc":"907:263:69","nodeType":"YulBlock","src":"907:263:69","statements":[{"body":{"nativeSrc":"953:83:69","nodeType":"YulBlock","src":"953:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"955:77:69","nodeType":"YulIdentifier","src":"955:77:69"},"nativeSrc":"955:79:69","nodeType":"YulFunctionCall","src":"955:79:69"},"nativeSrc":"955:79:69","nodeType":"YulExpressionStatement","src":"955:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"928:7:69","nodeType":"YulIdentifier","src":"928:7:69"},{"name":"headStart","nativeSrc":"937:9:69","nodeType":"YulIdentifier","src":"937:9:69"}],"functionName":{"name":"sub","nativeSrc":"924:3:69","nodeType":"YulIdentifier","src":"924:3:69"},"nativeSrc":"924:23:69","nodeType":"YulFunctionCall","src":"924:23:69"},{"kind":"number","nativeSrc":"949:2:69","nodeType":"YulLiteral","src":"949:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"920:3:69","nodeType":"YulIdentifier","src":"920:3:69"},"nativeSrc":"920:32:69","nodeType":"YulFunctionCall","src":"920:32:69"},"nativeSrc":"917:119:69","nodeType":"YulIf","src":"917:119:69"},{"nativeSrc":"1046:117:69","nodeType":"YulBlock","src":"1046:117:69","statements":[{"nativeSrc":"1061:15:69","nodeType":"YulVariableDeclaration","src":"1061:15:69","value":{"kind":"number","nativeSrc":"1075:1:69","nodeType":"YulLiteral","src":"1075:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"1065:6:69","nodeType":"YulTypedName","src":"1065:6:69","type":""}]},{"nativeSrc":"1090:63:69","nodeType":"YulAssignment","src":"1090:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1125:9:69","nodeType":"YulIdentifier","src":"1125:9:69"},{"name":"offset","nativeSrc":"1136:6:69","nodeType":"YulIdentifier","src":"1136:6:69"}],"functionName":{"name":"add","nativeSrc":"1121:3:69","nodeType":"YulIdentifier","src":"1121:3:69"},"nativeSrc":"1121:22:69","nodeType":"YulFunctionCall","src":"1121:22:69"},{"name":"dataEnd","nativeSrc":"1145:7:69","nodeType":"YulIdentifier","src":"1145:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"1100:20:69","nodeType":"YulIdentifier","src":"1100:20:69"},"nativeSrc":"1100:53:69","nodeType":"YulFunctionCall","src":"1100:53:69"},"variableNames":[{"name":"value0","nativeSrc":"1090:6:69","nodeType":"YulIdentifier","src":"1090:6:69"}]}]}]},"name":"abi_decode_tuple_t_address","nativeSrc":"841:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"877:9:69","nodeType":"YulTypedName","src":"877:9:69","type":""},{"name":"dataEnd","nativeSrc":"888:7:69","nodeType":"YulTypedName","src":"888:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"900:6:69","nodeType":"YulTypedName","src":"900:6:69","type":""}],"src":"841:329:69"},{"body":{"nativeSrc":"1221:32:69","nodeType":"YulBlock","src":"1221:32:69","statements":[{"nativeSrc":"1231:16:69","nodeType":"YulAssignment","src":"1231:16:69","value":{"name":"value","nativeSrc":"1242:5:69","nodeType":"YulIdentifier","src":"1242:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"1231:7:69","nodeType":"YulIdentifier","src":"1231:7:69"}]}]},"name":"cleanup_t_uint256","nativeSrc":"1176:77:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1203:5:69","nodeType":"YulTypedName","src":"1203:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"1213:7:69","nodeType":"YulTypedName","src":"1213:7:69","type":""}],"src":"1176:77:69"},{"body":{"nativeSrc":"1324:53:69","nodeType":"YulBlock","src":"1324:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"1341:3:69","nodeType":"YulIdentifier","src":"1341:3:69"},{"arguments":[{"name":"value","nativeSrc":"1364:5:69","nodeType":"YulIdentifier","src":"1364:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"1346:17:69","nodeType":"YulIdentifier","src":"1346:17:69"},"nativeSrc":"1346:24:69","nodeType":"YulFunctionCall","src":"1346:24:69"}],"functionName":{"name":"mstore","nativeSrc":"1334:6:69","nodeType":"YulIdentifier","src":"1334:6:69"},"nativeSrc":"1334:37:69","nodeType":"YulFunctionCall","src":"1334:37:69"},"nativeSrc":"1334:37:69","nodeType":"YulExpressionStatement","src":"1334:37:69"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"1259:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1312:5:69","nodeType":"YulTypedName","src":"1312:5:69","type":""},{"name":"pos","nativeSrc":"1319:3:69","nodeType":"YulTypedName","src":"1319:3:69","type":""}],"src":"1259:118:69"},{"body":{"nativeSrc":"1481:124:69","nodeType":"YulBlock","src":"1481:124:69","statements":[{"nativeSrc":"1491:26:69","nodeType":"YulAssignment","src":"1491:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"1503:9:69","nodeType":"YulIdentifier","src":"1503:9:69"},{"kind":"number","nativeSrc":"1514:2:69","nodeType":"YulLiteral","src":"1514:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1499:3:69","nodeType":"YulIdentifier","src":"1499:3:69"},"nativeSrc":"1499:18:69","nodeType":"YulFunctionCall","src":"1499:18:69"},"variableNames":[{"name":"tail","nativeSrc":"1491:4:69","nodeType":"YulIdentifier","src":"1491:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"1571:6:69","nodeType":"YulIdentifier","src":"1571:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"1584:9:69","nodeType":"YulIdentifier","src":"1584:9:69"},{"kind":"number","nativeSrc":"1595:1:69","nodeType":"YulLiteral","src":"1595:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1580:3:69","nodeType":"YulIdentifier","src":"1580:3:69"},"nativeSrc":"1580:17:69","nodeType":"YulFunctionCall","src":"1580:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"1527:43:69","nodeType":"YulIdentifier","src":"1527:43:69"},"nativeSrc":"1527:71:69","nodeType":"YulFunctionCall","src":"1527:71:69"},"nativeSrc":"1527:71:69","nodeType":"YulExpressionStatement","src":"1527:71:69"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nativeSrc":"1383:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1453:9:69","nodeType":"YulTypedName","src":"1453:9:69","type":""},{"name":"value0","nativeSrc":"1465:6:69","nodeType":"YulTypedName","src":"1465:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1476:4:69","nodeType":"YulTypedName","src":"1476:4:69","type":""}],"src":"1383:222:69"},{"body":{"nativeSrc":"1694:391:69","nodeType":"YulBlock","src":"1694:391:69","statements":[{"body":{"nativeSrc":"1740:83:69","nodeType":"YulBlock","src":"1740:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"1742:77:69","nodeType":"YulIdentifier","src":"1742:77:69"},"nativeSrc":"1742:79:69","nodeType":"YulFunctionCall","src":"1742:79:69"},"nativeSrc":"1742:79:69","nodeType":"YulExpressionStatement","src":"1742:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"1715:7:69","nodeType":"YulIdentifier","src":"1715:7:69"},{"name":"headStart","nativeSrc":"1724:9:69","nodeType":"YulIdentifier","src":"1724:9:69"}],"functionName":{"name":"sub","nativeSrc":"1711:3:69","nodeType":"YulIdentifier","src":"1711:3:69"},"nativeSrc":"1711:23:69","nodeType":"YulFunctionCall","src":"1711:23:69"},{"kind":"number","nativeSrc":"1736:2:69","nodeType":"YulLiteral","src":"1736:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"1707:3:69","nodeType":"YulIdentifier","src":"1707:3:69"},"nativeSrc":"1707:32:69","nodeType":"YulFunctionCall","src":"1707:32:69"},"nativeSrc":"1704:119:69","nodeType":"YulIf","src":"1704:119:69"},{"nativeSrc":"1833:117:69","nodeType":"YulBlock","src":"1833:117:69","statements":[{"nativeSrc":"1848:15:69","nodeType":"YulVariableDeclaration","src":"1848:15:69","value":{"kind":"number","nativeSrc":"1862:1:69","nodeType":"YulLiteral","src":"1862:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"1852:6:69","nodeType":"YulTypedName","src":"1852:6:69","type":""}]},{"nativeSrc":"1877:63:69","nodeType":"YulAssignment","src":"1877:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1912:9:69","nodeType":"YulIdentifier","src":"1912:9:69"},{"name":"offset","nativeSrc":"1923:6:69","nodeType":"YulIdentifier","src":"1923:6:69"}],"functionName":{"name":"add","nativeSrc":"1908:3:69","nodeType":"YulIdentifier","src":"1908:3:69"},"nativeSrc":"1908:22:69","nodeType":"YulFunctionCall","src":"1908:22:69"},{"name":"dataEnd","nativeSrc":"1932:7:69","nodeType":"YulIdentifier","src":"1932:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"1887:20:69","nodeType":"YulIdentifier","src":"1887:20:69"},"nativeSrc":"1887:53:69","nodeType":"YulFunctionCall","src":"1887:53:69"},"variableNames":[{"name":"value0","nativeSrc":"1877:6:69","nodeType":"YulIdentifier","src":"1877:6:69"}]}]},{"nativeSrc":"1960:118:69","nodeType":"YulBlock","src":"1960:118:69","statements":[{"nativeSrc":"1975:16:69","nodeType":"YulVariableDeclaration","src":"1975:16:69","value":{"kind":"number","nativeSrc":"1989:2:69","nodeType":"YulLiteral","src":"1989:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"1979:6:69","nodeType":"YulTypedName","src":"1979:6:69","type":""}]},{"nativeSrc":"2005:63:69","nodeType":"YulAssignment","src":"2005:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2040:9:69","nodeType":"YulIdentifier","src":"2040:9:69"},{"name":"offset","nativeSrc":"2051:6:69","nodeType":"YulIdentifier","src":"2051:6:69"}],"functionName":{"name":"add","nativeSrc":"2036:3:69","nodeType":"YulIdentifier","src":"2036:3:69"},"nativeSrc":"2036:22:69","nodeType":"YulFunctionCall","src":"2036:22:69"},{"name":"dataEnd","nativeSrc":"2060:7:69","nodeType":"YulIdentifier","src":"2060:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"2015:20:69","nodeType":"YulIdentifier","src":"2015:20:69"},"nativeSrc":"2015:53:69","nodeType":"YulFunctionCall","src":"2015:53:69"},"variableNames":[{"name":"value1","nativeSrc":"2005:6:69","nodeType":"YulIdentifier","src":"2005:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_address","nativeSrc":"1611:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1656:9:69","nodeType":"YulTypedName","src":"1656:9:69","type":""},{"name":"dataEnd","nativeSrc":"1667:7:69","nodeType":"YulTypedName","src":"1667:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"1679:6:69","nodeType":"YulTypedName","src":"1679:6:69","type":""},{"name":"value1","nativeSrc":"1687:6:69","nodeType":"YulTypedName","src":"1687:6:69","type":""}],"src":"1611:474:69"},{"body":{"nativeSrc":"2133:48:69","nodeType":"YulBlock","src":"2133:48:69","statements":[{"nativeSrc":"2143:32:69","nodeType":"YulAssignment","src":"2143:32:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"2168:5:69","nodeType":"YulIdentifier","src":"2168:5:69"}],"functionName":{"name":"iszero","nativeSrc":"2161:6:69","nodeType":"YulIdentifier","src":"2161:6:69"},"nativeSrc":"2161:13:69","nodeType":"YulFunctionCall","src":"2161:13:69"}],"functionName":{"name":"iszero","nativeSrc":"2154:6:69","nodeType":"YulIdentifier","src":"2154:6:69"},"nativeSrc":"2154:21:69","nodeType":"YulFunctionCall","src":"2154:21:69"},"variableNames":[{"name":"cleaned","nativeSrc":"2143:7:69","nodeType":"YulIdentifier","src":"2143:7:69"}]}]},"name":"cleanup_t_bool","nativeSrc":"2091:90:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2115:5:69","nodeType":"YulTypedName","src":"2115:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"2125:7:69","nodeType":"YulTypedName","src":"2125:7:69","type":""}],"src":"2091:90:69"},{"body":{"nativeSrc":"2246:50:69","nodeType":"YulBlock","src":"2246:50:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"2263:3:69","nodeType":"YulIdentifier","src":"2263:3:69"},{"arguments":[{"name":"value","nativeSrc":"2283:5:69","nodeType":"YulIdentifier","src":"2283:5:69"}],"functionName":{"name":"cleanup_t_bool","nativeSrc":"2268:14:69","nodeType":"YulIdentifier","src":"2268:14:69"},"nativeSrc":"2268:21:69","nodeType":"YulFunctionCall","src":"2268:21:69"}],"functionName":{"name":"mstore","nativeSrc":"2256:6:69","nodeType":"YulIdentifier","src":"2256:6:69"},"nativeSrc":"2256:34:69","nodeType":"YulFunctionCall","src":"2256:34:69"},"nativeSrc":"2256:34:69","nodeType":"YulExpressionStatement","src":"2256:34:69"}]},"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"2187:109:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2234:5:69","nodeType":"YulTypedName","src":"2234:5:69","type":""},{"name":"pos","nativeSrc":"2241:3:69","nodeType":"YulTypedName","src":"2241:3:69","type":""}],"src":"2187:109:69"},{"body":{"nativeSrc":"2394:118:69","nodeType":"YulBlock","src":"2394:118:69","statements":[{"nativeSrc":"2404:26:69","nodeType":"YulAssignment","src":"2404:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"2416:9:69","nodeType":"YulIdentifier","src":"2416:9:69"},{"kind":"number","nativeSrc":"2427:2:69","nodeType":"YulLiteral","src":"2427:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2412:3:69","nodeType":"YulIdentifier","src":"2412:3:69"},"nativeSrc":"2412:18:69","nodeType":"YulFunctionCall","src":"2412:18:69"},"variableNames":[{"name":"tail","nativeSrc":"2404:4:69","nodeType":"YulIdentifier","src":"2404:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"2478:6:69","nodeType":"YulIdentifier","src":"2478:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"2491:9:69","nodeType":"YulIdentifier","src":"2491:9:69"},{"kind":"number","nativeSrc":"2502:1:69","nodeType":"YulLiteral","src":"2502:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"2487:3:69","nodeType":"YulIdentifier","src":"2487:3:69"},"nativeSrc":"2487:17:69","nodeType":"YulFunctionCall","src":"2487:17:69"}],"functionName":{"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"2440:37:69","nodeType":"YulIdentifier","src":"2440:37:69"},"nativeSrc":"2440:65:69","nodeType":"YulFunctionCall","src":"2440:65:69"},"nativeSrc":"2440:65:69","nodeType":"YulExpressionStatement","src":"2440:65:69"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nativeSrc":"2302:210:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2366:9:69","nodeType":"YulTypedName","src":"2366:9:69","type":""},{"name":"value0","nativeSrc":"2378:6:69","nodeType":"YulTypedName","src":"2378:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2389:4:69","nodeType":"YulTypedName","src":"2389:4:69","type":""}],"src":"2302:210:69"},{"body":{"nativeSrc":"2561:79:69","nodeType":"YulBlock","src":"2561:79:69","statements":[{"body":{"nativeSrc":"2618:16:69","nodeType":"YulBlock","src":"2618:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2627:1:69","nodeType":"YulLiteral","src":"2627:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"2630:1:69","nodeType":"YulLiteral","src":"2630:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2620:6:69","nodeType":"YulIdentifier","src":"2620:6:69"},"nativeSrc":"2620:12:69","nodeType":"YulFunctionCall","src":"2620:12:69"},"nativeSrc":"2620:12:69","nodeType":"YulExpressionStatement","src":"2620:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"2584:5:69","nodeType":"YulIdentifier","src":"2584:5:69"},{"arguments":[{"name":"value","nativeSrc":"2609:5:69","nodeType":"YulIdentifier","src":"2609:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"2591:17:69","nodeType":"YulIdentifier","src":"2591:17:69"},"nativeSrc":"2591:24:69","nodeType":"YulFunctionCall","src":"2591:24:69"}],"functionName":{"name":"eq","nativeSrc":"2581:2:69","nodeType":"YulIdentifier","src":"2581:2:69"},"nativeSrc":"2581:35:69","nodeType":"YulFunctionCall","src":"2581:35:69"}],"functionName":{"name":"iszero","nativeSrc":"2574:6:69","nodeType":"YulIdentifier","src":"2574:6:69"},"nativeSrc":"2574:43:69","nodeType":"YulFunctionCall","src":"2574:43:69"},"nativeSrc":"2571:63:69","nodeType":"YulIf","src":"2571:63:69"}]},"name":"validator_revert_t_uint256","nativeSrc":"2518:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2554:5:69","nodeType":"YulTypedName","src":"2554:5:69","type":""}],"src":"2518:122:69"},{"body":{"nativeSrc":"2698:87:69","nodeType":"YulBlock","src":"2698:87:69","statements":[{"nativeSrc":"2708:29:69","nodeType":"YulAssignment","src":"2708:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"2730:6:69","nodeType":"YulIdentifier","src":"2730:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"2717:12:69","nodeType":"YulIdentifier","src":"2717:12:69"},"nativeSrc":"2717:20:69","nodeType":"YulFunctionCall","src":"2717:20:69"},"variableNames":[{"name":"value","nativeSrc":"2708:5:69","nodeType":"YulIdentifier","src":"2708:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"2773:5:69","nodeType":"YulIdentifier","src":"2773:5:69"}],"functionName":{"name":"validator_revert_t_uint256","nativeSrc":"2746:26:69","nodeType":"YulIdentifier","src":"2746:26:69"},"nativeSrc":"2746:33:69","nodeType":"YulFunctionCall","src":"2746:33:69"},"nativeSrc":"2746:33:69","nodeType":"YulExpressionStatement","src":"2746:33:69"}]},"name":"abi_decode_t_uint256","nativeSrc":"2646:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"2676:6:69","nodeType":"YulTypedName","src":"2676:6:69","type":""},{"name":"end","nativeSrc":"2684:3:69","nodeType":"YulTypedName","src":"2684:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"2692:5:69","nodeType":"YulTypedName","src":"2692:5:69","type":""}],"src":"2646:139:69"},{"body":{"nativeSrc":"2857:263:69","nodeType":"YulBlock","src":"2857:263:69","statements":[{"body":{"nativeSrc":"2903:83:69","nodeType":"YulBlock","src":"2903:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"2905:77:69","nodeType":"YulIdentifier","src":"2905:77:69"},"nativeSrc":"2905:79:69","nodeType":"YulFunctionCall","src":"2905:79:69"},"nativeSrc":"2905:79:69","nodeType":"YulExpressionStatement","src":"2905:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"2878:7:69","nodeType":"YulIdentifier","src":"2878:7:69"},{"name":"headStart","nativeSrc":"2887:9:69","nodeType":"YulIdentifier","src":"2887:9:69"}],"functionName":{"name":"sub","nativeSrc":"2874:3:69","nodeType":"YulIdentifier","src":"2874:3:69"},"nativeSrc":"2874:23:69","nodeType":"YulFunctionCall","src":"2874:23:69"},{"kind":"number","nativeSrc":"2899:2:69","nodeType":"YulLiteral","src":"2899:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"2870:3:69","nodeType":"YulIdentifier","src":"2870:3:69"},"nativeSrc":"2870:32:69","nodeType":"YulFunctionCall","src":"2870:32:69"},"nativeSrc":"2867:119:69","nodeType":"YulIf","src":"2867:119:69"},{"nativeSrc":"2996:117:69","nodeType":"YulBlock","src":"2996:117:69","statements":[{"nativeSrc":"3011:15:69","nodeType":"YulVariableDeclaration","src":"3011:15:69","value":{"kind":"number","nativeSrc":"3025:1:69","nodeType":"YulLiteral","src":"3025:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"3015:6:69","nodeType":"YulTypedName","src":"3015:6:69","type":""}]},{"nativeSrc":"3040:63:69","nodeType":"YulAssignment","src":"3040:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3075:9:69","nodeType":"YulIdentifier","src":"3075:9:69"},{"name":"offset","nativeSrc":"3086:6:69","nodeType":"YulIdentifier","src":"3086:6:69"}],"functionName":{"name":"add","nativeSrc":"3071:3:69","nodeType":"YulIdentifier","src":"3071:3:69"},"nativeSrc":"3071:22:69","nodeType":"YulFunctionCall","src":"3071:22:69"},{"name":"dataEnd","nativeSrc":"3095:7:69","nodeType":"YulIdentifier","src":"3095:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"3050:20:69","nodeType":"YulIdentifier","src":"3050:20:69"},"nativeSrc":"3050:53:69","nodeType":"YulFunctionCall","src":"3050:53:69"},"variableNames":[{"name":"value0","nativeSrc":"3040:6:69","nodeType":"YulIdentifier","src":"3040:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint256","nativeSrc":"2791:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2827:9:69","nodeType":"YulTypedName","src":"2827:9:69","type":""},{"name":"dataEnd","nativeSrc":"2838:7:69","nodeType":"YulTypedName","src":"2838:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"2850:6:69","nodeType":"YulTypedName","src":"2850:6:69","type":""}],"src":"2791:329:69"},{"body":{"nativeSrc":"3158:28:69","nodeType":"YulBlock","src":"3158:28:69","statements":[{"nativeSrc":"3168:12:69","nodeType":"YulAssignment","src":"3168:12:69","value":{"name":"value","nativeSrc":"3175:5:69","nodeType":"YulIdentifier","src":"3175:5:69"},"variableNames":[{"name":"ret","nativeSrc":"3168:3:69","nodeType":"YulIdentifier","src":"3168:3:69"}]}]},"name":"identity","nativeSrc":"3126:60:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3144:5:69","nodeType":"YulTypedName","src":"3144:5:69","type":""}],"returnVariables":[{"name":"ret","nativeSrc":"3154:3:69","nodeType":"YulTypedName","src":"3154:3:69","type":""}],"src":"3126:60:69"},{"body":{"nativeSrc":"3252:82:69","nodeType":"YulBlock","src":"3252:82:69","statements":[{"nativeSrc":"3262:66:69","nodeType":"YulAssignment","src":"3262:66:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"3320:5:69","nodeType":"YulIdentifier","src":"3320:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"3302:17:69","nodeType":"YulIdentifier","src":"3302:17:69"},"nativeSrc":"3302:24:69","nodeType":"YulFunctionCall","src":"3302:24:69"}],"functionName":{"name":"identity","nativeSrc":"3293:8:69","nodeType":"YulIdentifier","src":"3293:8:69"},"nativeSrc":"3293:34:69","nodeType":"YulFunctionCall","src":"3293:34:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"3275:17:69","nodeType":"YulIdentifier","src":"3275:17:69"},"nativeSrc":"3275:53:69","nodeType":"YulFunctionCall","src":"3275:53:69"},"variableNames":[{"name":"converted","nativeSrc":"3262:9:69","nodeType":"YulIdentifier","src":"3262:9:69"}]}]},"name":"convert_t_uint160_to_t_uint160","nativeSrc":"3192:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3232:5:69","nodeType":"YulTypedName","src":"3232:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"3242:9:69","nodeType":"YulTypedName","src":"3242:9:69","type":""}],"src":"3192:142:69"},{"body":{"nativeSrc":"3400:66:69","nodeType":"YulBlock","src":"3400:66:69","statements":[{"nativeSrc":"3410:50:69","nodeType":"YulAssignment","src":"3410:50:69","value":{"arguments":[{"name":"value","nativeSrc":"3454:5:69","nodeType":"YulIdentifier","src":"3454:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_uint160","nativeSrc":"3423:30:69","nodeType":"YulIdentifier","src":"3423:30:69"},"nativeSrc":"3423:37:69","nodeType":"YulFunctionCall","src":"3423:37:69"},"variableNames":[{"name":"converted","nativeSrc":"3410:9:69","nodeType":"YulIdentifier","src":"3410:9:69"}]}]},"name":"convert_t_uint160_to_t_address","nativeSrc":"3340:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3380:5:69","nodeType":"YulTypedName","src":"3380:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"3390:9:69","nodeType":"YulTypedName","src":"3390:9:69","type":""}],"src":"3340:126:69"},{"body":{"nativeSrc":"3548:66:69","nodeType":"YulBlock","src":"3548:66:69","statements":[{"nativeSrc":"3558:50:69","nodeType":"YulAssignment","src":"3558:50:69","value":{"arguments":[{"name":"value","nativeSrc":"3602:5:69","nodeType":"YulIdentifier","src":"3602:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"3571:30:69","nodeType":"YulIdentifier","src":"3571:30:69"},"nativeSrc":"3571:37:69","nodeType":"YulFunctionCall","src":"3571:37:69"},"variableNames":[{"name":"converted","nativeSrc":"3558:9:69","nodeType":"YulIdentifier","src":"3558:9:69"}]}]},"name":"convert_t_contract$_VToken_$15506_to_t_address","nativeSrc":"3472:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3528:5:69","nodeType":"YulTypedName","src":"3528:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"3538:9:69","nodeType":"YulTypedName","src":"3538:9:69","type":""}],"src":"3472:142:69"},{"body":{"nativeSrc":"3701:82:69","nodeType":"YulBlock","src":"3701:82:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"3718:3:69","nodeType":"YulIdentifier","src":"3718:3:69"},{"arguments":[{"name":"value","nativeSrc":"3770:5:69","nodeType":"YulIdentifier","src":"3770:5:69"}],"functionName":{"name":"convert_t_contract$_VToken_$15506_to_t_address","nativeSrc":"3723:46:69","nodeType":"YulIdentifier","src":"3723:46:69"},"nativeSrc":"3723:53:69","nodeType":"YulFunctionCall","src":"3723:53:69"}],"functionName":{"name":"mstore","nativeSrc":"3711:6:69","nodeType":"YulIdentifier","src":"3711:6:69"},"nativeSrc":"3711:66:69","nodeType":"YulFunctionCall","src":"3711:66:69"},"nativeSrc":"3711:66:69","nodeType":"YulExpressionStatement","src":"3711:66:69"}]},"name":"abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack","nativeSrc":"3620:163:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3689:5:69","nodeType":"YulTypedName","src":"3689:5:69","type":""},{"name":"pos","nativeSrc":"3696:3:69","nodeType":"YulTypedName","src":"3696:3:69","type":""}],"src":"3620:163:69"},{"body":{"nativeSrc":"3903:140:69","nodeType":"YulBlock","src":"3903:140:69","statements":[{"nativeSrc":"3913:26:69","nodeType":"YulAssignment","src":"3913:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"3925:9:69","nodeType":"YulIdentifier","src":"3925:9:69"},{"kind":"number","nativeSrc":"3936:2:69","nodeType":"YulLiteral","src":"3936:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3921:3:69","nodeType":"YulIdentifier","src":"3921:3:69"},"nativeSrc":"3921:18:69","nodeType":"YulFunctionCall","src":"3921:18:69"},"variableNames":[{"name":"tail","nativeSrc":"3913:4:69","nodeType":"YulIdentifier","src":"3913:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"4009:6:69","nodeType":"YulIdentifier","src":"4009:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"4022:9:69","nodeType":"YulIdentifier","src":"4022:9:69"},{"kind":"number","nativeSrc":"4033:1:69","nodeType":"YulLiteral","src":"4033:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4018:3:69","nodeType":"YulIdentifier","src":"4018:3:69"},"nativeSrc":"4018:17:69","nodeType":"YulFunctionCall","src":"4018:17:69"}],"functionName":{"name":"abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack","nativeSrc":"3949:59:69","nodeType":"YulIdentifier","src":"3949:59:69"},"nativeSrc":"3949:87:69","nodeType":"YulFunctionCall","src":"3949:87:69"},"nativeSrc":"3949:87:69","nodeType":"YulExpressionStatement","src":"3949:87:69"}]},"name":"abi_encode_tuple_t_contract$_VToken_$15506__to_t_address__fromStack_reversed","nativeSrc":"3789:254:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3875:9:69","nodeType":"YulTypedName","src":"3875:9:69","type":""},{"name":"value0","nativeSrc":"3887:6:69","nodeType":"YulTypedName","src":"3887:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3898:4:69","nodeType":"YulTypedName","src":"3898:4:69","type":""}],"src":"3789:254:69"},{"body":{"nativeSrc":"4143:66:69","nodeType":"YulBlock","src":"4143:66:69","statements":[{"nativeSrc":"4153:50:69","nodeType":"YulAssignment","src":"4153:50:69","value":{"arguments":[{"name":"value","nativeSrc":"4197:5:69","nodeType":"YulIdentifier","src":"4197:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"4166:30:69","nodeType":"YulIdentifier","src":"4166:30:69"},"nativeSrc":"4166:37:69","nodeType":"YulFunctionCall","src":"4166:37:69"},"variableNames":[{"name":"converted","nativeSrc":"4153:9:69","nodeType":"YulIdentifier","src":"4153:9:69"}]}]},"name":"convert_t_contract$_ResilientOracleInterface_$16173_to_t_address","nativeSrc":"4049:160:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4123:5:69","nodeType":"YulTypedName","src":"4123:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"4133:9:69","nodeType":"YulTypedName","src":"4133:9:69","type":""}],"src":"4049:160:69"},{"body":{"nativeSrc":"4314:100:69","nodeType":"YulBlock","src":"4314:100:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"4331:3:69","nodeType":"YulIdentifier","src":"4331:3:69"},{"arguments":[{"name":"value","nativeSrc":"4401:5:69","nodeType":"YulIdentifier","src":"4401:5:69"}],"functionName":{"name":"convert_t_contract$_ResilientOracleInterface_$16173_to_t_address","nativeSrc":"4336:64:69","nodeType":"YulIdentifier","src":"4336:64:69"},"nativeSrc":"4336:71:69","nodeType":"YulFunctionCall","src":"4336:71:69"}],"functionName":{"name":"mstore","nativeSrc":"4324:6:69","nodeType":"YulIdentifier","src":"4324:6:69"},"nativeSrc":"4324:84:69","nodeType":"YulFunctionCall","src":"4324:84:69"},"nativeSrc":"4324:84:69","nodeType":"YulExpressionStatement","src":"4324:84:69"}]},"name":"abi_encode_t_contract$_ResilientOracleInterface_$16173_to_t_address_fromStack","nativeSrc":"4215:199:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4302:5:69","nodeType":"YulTypedName","src":"4302:5:69","type":""},{"name":"pos","nativeSrc":"4309:3:69","nodeType":"YulTypedName","src":"4309:3:69","type":""}],"src":"4215:199:69"},{"body":{"nativeSrc":"4552:158:69","nodeType":"YulBlock","src":"4552:158:69","statements":[{"nativeSrc":"4562:26:69","nodeType":"YulAssignment","src":"4562:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"4574:9:69","nodeType":"YulIdentifier","src":"4574:9:69"},{"kind":"number","nativeSrc":"4585:2:69","nodeType":"YulLiteral","src":"4585:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4570:3:69","nodeType":"YulIdentifier","src":"4570:3:69"},"nativeSrc":"4570:18:69","nodeType":"YulFunctionCall","src":"4570:18:69"},"variableNames":[{"name":"tail","nativeSrc":"4562:4:69","nodeType":"YulIdentifier","src":"4562:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"4676:6:69","nodeType":"YulIdentifier","src":"4676:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"4689:9:69","nodeType":"YulIdentifier","src":"4689:9:69"},{"kind":"number","nativeSrc":"4700:1:69","nodeType":"YulLiteral","src":"4700:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4685:3:69","nodeType":"YulIdentifier","src":"4685:3:69"},"nativeSrc":"4685:17:69","nodeType":"YulFunctionCall","src":"4685:17:69"}],"functionName":{"name":"abi_encode_t_contract$_ResilientOracleInterface_$16173_to_t_address_fromStack","nativeSrc":"4598:77:69","nodeType":"YulIdentifier","src":"4598:77:69"},"nativeSrc":"4598:105:69","nodeType":"YulFunctionCall","src":"4598:105:69"},"nativeSrc":"4598:105:69","nodeType":"YulExpressionStatement","src":"4598:105:69"}]},"name":"abi_encode_tuple_t_contract$_ResilientOracleInterface_$16173__to_t_address__fromStack_reversed","nativeSrc":"4420:290:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4524:9:69","nodeType":"YulTypedName","src":"4524:9:69","type":""},{"name":"value0","nativeSrc":"4536:6:69","nodeType":"YulTypedName","src":"4536:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4547:4:69","nodeType":"YulTypedName","src":"4547:4:69","type":""}],"src":"4420:290:69"},{"body":{"nativeSrc":"4864:282:69","nodeType":"YulBlock","src":"4864:282:69","statements":[{"nativeSrc":"4874:26:69","nodeType":"YulAssignment","src":"4874:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"4886:9:69","nodeType":"YulIdentifier","src":"4886:9:69"},{"kind":"number","nativeSrc":"4897:2:69","nodeType":"YulLiteral","src":"4897:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"4882:3:69","nodeType":"YulIdentifier","src":"4882:3:69"},"nativeSrc":"4882:18:69","nodeType":"YulFunctionCall","src":"4882:18:69"},"variableNames":[{"name":"tail","nativeSrc":"4874:4:69","nodeType":"YulIdentifier","src":"4874:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"4948:6:69","nodeType":"YulIdentifier","src":"4948:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"4961:9:69","nodeType":"YulIdentifier","src":"4961:9:69"},{"kind":"number","nativeSrc":"4972:1:69","nodeType":"YulLiteral","src":"4972:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4957:3:69","nodeType":"YulIdentifier","src":"4957:3:69"},"nativeSrc":"4957:17:69","nodeType":"YulFunctionCall","src":"4957:17:69"}],"functionName":{"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"4910:37:69","nodeType":"YulIdentifier","src":"4910:37:69"},"nativeSrc":"4910:65:69","nodeType":"YulFunctionCall","src":"4910:65:69"},"nativeSrc":"4910:65:69","nodeType":"YulExpressionStatement","src":"4910:65:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"5029:6:69","nodeType":"YulIdentifier","src":"5029:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"5042:9:69","nodeType":"YulIdentifier","src":"5042:9:69"},{"kind":"number","nativeSrc":"5053:2:69","nodeType":"YulLiteral","src":"5053:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5038:3:69","nodeType":"YulIdentifier","src":"5038:3:69"},"nativeSrc":"5038:18:69","nodeType":"YulFunctionCall","src":"5038:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"4985:43:69","nodeType":"YulIdentifier","src":"4985:43:69"},"nativeSrc":"4985:72:69","nodeType":"YulFunctionCall","src":"4985:72:69"},"nativeSrc":"4985:72:69","nodeType":"YulExpressionStatement","src":"4985:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"5111:6:69","nodeType":"YulIdentifier","src":"5111:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"5124:9:69","nodeType":"YulIdentifier","src":"5124:9:69"},{"kind":"number","nativeSrc":"5135:2:69","nodeType":"YulLiteral","src":"5135:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"5120:3:69","nodeType":"YulIdentifier","src":"5120:3:69"},"nativeSrc":"5120:18:69","nodeType":"YulFunctionCall","src":"5120:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"5067:43:69","nodeType":"YulIdentifier","src":"5067:43:69"},"nativeSrc":"5067:72:69","nodeType":"YulFunctionCall","src":"5067:72:69"},"nativeSrc":"5067:72:69","nodeType":"YulExpressionStatement","src":"5067:72:69"}]},"name":"abi_encode_tuple_t_bool_t_uint256_t_uint256__to_t_bool_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"4716:430:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4820:9:69","nodeType":"YulTypedName","src":"4820:9:69","type":""},{"name":"value2","nativeSrc":"4832:6:69","nodeType":"YulTypedName","src":"4832:6:69","type":""},{"name":"value1","nativeSrc":"4840:6:69","nodeType":"YulTypedName","src":"4840:6:69","type":""},{"name":"value0","nativeSrc":"4848:6:69","nodeType":"YulTypedName","src":"4848:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4859:4:69","nodeType":"YulTypedName","src":"4859:4:69","type":""}],"src":"4716:430:69"},{"body":{"nativeSrc":"5228:66:69","nodeType":"YulBlock","src":"5228:66:69","statements":[{"nativeSrc":"5238:50:69","nodeType":"YulAssignment","src":"5238:50:69","value":{"arguments":[{"name":"value","nativeSrc":"5282:5:69","nodeType":"YulIdentifier","src":"5282:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"5251:30:69","nodeType":"YulIdentifier","src":"5251:30:69"},"nativeSrc":"5251:37:69","nodeType":"YulFunctionCall","src":"5251:37:69"},"variableNames":[{"name":"converted","nativeSrc":"5238:9:69","nodeType":"YulIdentifier","src":"5238:9:69"}]}]},"name":"convert_t_contract$_IPrime_$16613_to_t_address","nativeSrc":"5152:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"5208:5:69","nodeType":"YulTypedName","src":"5208:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"5218:9:69","nodeType":"YulTypedName","src":"5218:9:69","type":""}],"src":"5152:142:69"},{"body":{"nativeSrc":"5381:82:69","nodeType":"YulBlock","src":"5381:82:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"5398:3:69","nodeType":"YulIdentifier","src":"5398:3:69"},{"arguments":[{"name":"value","nativeSrc":"5450:5:69","nodeType":"YulIdentifier","src":"5450:5:69"}],"functionName":{"name":"convert_t_contract$_IPrime_$16613_to_t_address","nativeSrc":"5403:46:69","nodeType":"YulIdentifier","src":"5403:46:69"},"nativeSrc":"5403:53:69","nodeType":"YulFunctionCall","src":"5403:53:69"}],"functionName":{"name":"mstore","nativeSrc":"5391:6:69","nodeType":"YulIdentifier","src":"5391:6:69"},"nativeSrc":"5391:66:69","nodeType":"YulFunctionCall","src":"5391:66:69"},"nativeSrc":"5391:66:69","nodeType":"YulExpressionStatement","src":"5391:66:69"}]},"name":"abi_encode_t_contract$_IPrime_$16613_to_t_address_fromStack","nativeSrc":"5300:163:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"5369:5:69","nodeType":"YulTypedName","src":"5369:5:69","type":""},{"name":"pos","nativeSrc":"5376:3:69","nodeType":"YulTypedName","src":"5376:3:69","type":""}],"src":"5300:163:69"},{"body":{"nativeSrc":"5583:140:69","nodeType":"YulBlock","src":"5583:140:69","statements":[{"nativeSrc":"5593:26:69","nodeType":"YulAssignment","src":"5593:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"5605:9:69","nodeType":"YulIdentifier","src":"5605:9:69"},{"kind":"number","nativeSrc":"5616:2:69","nodeType":"YulLiteral","src":"5616:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5601:3:69","nodeType":"YulIdentifier","src":"5601:3:69"},"nativeSrc":"5601:18:69","nodeType":"YulFunctionCall","src":"5601:18:69"},"variableNames":[{"name":"tail","nativeSrc":"5593:4:69","nodeType":"YulIdentifier","src":"5593:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"5689:6:69","nodeType":"YulIdentifier","src":"5689:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"5702:9:69","nodeType":"YulIdentifier","src":"5702:9:69"},{"kind":"number","nativeSrc":"5713:1:69","nodeType":"YulLiteral","src":"5713:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5698:3:69","nodeType":"YulIdentifier","src":"5698:3:69"},"nativeSrc":"5698:17:69","nodeType":"YulFunctionCall","src":"5698:17:69"}],"functionName":{"name":"abi_encode_t_contract$_IPrime_$16613_to_t_address_fromStack","nativeSrc":"5629:59:69","nodeType":"YulIdentifier","src":"5629:59:69"},"nativeSrc":"5629:87:69","nodeType":"YulFunctionCall","src":"5629:87:69"},"nativeSrc":"5629:87:69","nodeType":"YulExpressionStatement","src":"5629:87:69"}]},"name":"abi_encode_tuple_t_contract$_IPrime_$16613__to_t_address__fromStack_reversed","nativeSrc":"5469:254:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5555:9:69","nodeType":"YulTypedName","src":"5555:9:69","type":""},{"name":"value0","nativeSrc":"5567:6:69","nodeType":"YulTypedName","src":"5567:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"5578:4:69","nodeType":"YulTypedName","src":"5578:4:69","type":""}],"src":"5469:254:69"},{"body":{"nativeSrc":"5812:391:69","nodeType":"YulBlock","src":"5812:391:69","statements":[{"body":{"nativeSrc":"5858:83:69","nodeType":"YulBlock","src":"5858:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"5860:77:69","nodeType":"YulIdentifier","src":"5860:77:69"},"nativeSrc":"5860:79:69","nodeType":"YulFunctionCall","src":"5860:79:69"},"nativeSrc":"5860:79:69","nodeType":"YulExpressionStatement","src":"5860:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"5833:7:69","nodeType":"YulIdentifier","src":"5833:7:69"},{"name":"headStart","nativeSrc":"5842:9:69","nodeType":"YulIdentifier","src":"5842:9:69"}],"functionName":{"name":"sub","nativeSrc":"5829:3:69","nodeType":"YulIdentifier","src":"5829:3:69"},"nativeSrc":"5829:23:69","nodeType":"YulFunctionCall","src":"5829:23:69"},{"kind":"number","nativeSrc":"5854:2:69","nodeType":"YulLiteral","src":"5854:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"5825:3:69","nodeType":"YulIdentifier","src":"5825:3:69"},"nativeSrc":"5825:32:69","nodeType":"YulFunctionCall","src":"5825:32:69"},"nativeSrc":"5822:119:69","nodeType":"YulIf","src":"5822:119:69"},{"nativeSrc":"5951:117:69","nodeType":"YulBlock","src":"5951:117:69","statements":[{"nativeSrc":"5966:15:69","nodeType":"YulVariableDeclaration","src":"5966:15:69","value":{"kind":"number","nativeSrc":"5980:1:69","nodeType":"YulLiteral","src":"5980:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"5970:6:69","nodeType":"YulTypedName","src":"5970:6:69","type":""}]},{"nativeSrc":"5995:63:69","nodeType":"YulAssignment","src":"5995:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6030:9:69","nodeType":"YulIdentifier","src":"6030:9:69"},{"name":"offset","nativeSrc":"6041:6:69","nodeType":"YulIdentifier","src":"6041:6:69"}],"functionName":{"name":"add","nativeSrc":"6026:3:69","nodeType":"YulIdentifier","src":"6026:3:69"},"nativeSrc":"6026:22:69","nodeType":"YulFunctionCall","src":"6026:22:69"},{"name":"dataEnd","nativeSrc":"6050:7:69","nodeType":"YulIdentifier","src":"6050:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"6005:20:69","nodeType":"YulIdentifier","src":"6005:20:69"},"nativeSrc":"6005:53:69","nodeType":"YulFunctionCall","src":"6005:53:69"},"variableNames":[{"name":"value0","nativeSrc":"5995:6:69","nodeType":"YulIdentifier","src":"5995:6:69"}]}]},{"nativeSrc":"6078:118:69","nodeType":"YulBlock","src":"6078:118:69","statements":[{"nativeSrc":"6093:16:69","nodeType":"YulVariableDeclaration","src":"6093:16:69","value":{"kind":"number","nativeSrc":"6107:2:69","nodeType":"YulLiteral","src":"6107:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"6097:6:69","nodeType":"YulTypedName","src":"6097:6:69","type":""}]},{"nativeSrc":"6123:63:69","nodeType":"YulAssignment","src":"6123:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6158:9:69","nodeType":"YulIdentifier","src":"6158:9:69"},{"name":"offset","nativeSrc":"6169:6:69","nodeType":"YulIdentifier","src":"6169:6:69"}],"functionName":{"name":"add","nativeSrc":"6154:3:69","nodeType":"YulIdentifier","src":"6154:3:69"},"nativeSrc":"6154:22:69","nodeType":"YulFunctionCall","src":"6154:22:69"},{"name":"dataEnd","nativeSrc":"6178:7:69","nodeType":"YulIdentifier","src":"6178:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"6133:20:69","nodeType":"YulIdentifier","src":"6133:20:69"},"nativeSrc":"6133:53:69","nodeType":"YulFunctionCall","src":"6133:53:69"},"variableNames":[{"name":"value1","nativeSrc":"6123:6:69","nodeType":"YulIdentifier","src":"6123:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nativeSrc":"5729:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5774:9:69","nodeType":"YulTypedName","src":"5774:9:69","type":""},{"name":"dataEnd","nativeSrc":"5785:7:69","nodeType":"YulTypedName","src":"5785:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"5797:6:69","nodeType":"YulTypedName","src":"5797:6:69","type":""},{"name":"value1","nativeSrc":"5805:6:69","nodeType":"YulTypedName","src":"5805:6:69","type":""}],"src":"5729:474:69"}]},"contents":"{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint256(value))\n    }\n\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_bool(value) -> cleaned {\n        cleaned := iszero(iszero(value))\n    }\n\n    function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n        mstore(pos, cleanup_t_bool(value))\n    }\n\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_bool_to_t_bool_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function validator_revert_t_uint256(value) {\n        if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_uint256(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function identity(value) -> ret {\n        ret := value\n    }\n\n    function convert_t_uint160_to_t_uint160(value) -> converted {\n        converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n    }\n\n    function convert_t_uint160_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_uint160(value)\n    }\n\n    function convert_t_contract$_VToken_$15506_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_VToken_$15506_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_VToken_$15506__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function convert_t_contract$_ResilientOracleInterface_$16173_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_ResilientOracleInterface_$16173_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_ResilientOracleInterface_$16173_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_ResilientOracleInterface_$16173__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_ResilientOracleInterface_$16173_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_encode_tuple_t_bool_t_uint256_t_uint256__to_t_bool_t_uint256_t_uint256__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_bool_to_t_bool_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function convert_t_contract$_IPrime_$16613_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_IPrime_$16613_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_IPrime_$16613_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_IPrime_$16613__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_IPrime_$16613_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100b45760003560e01c80638c1ac18a116100715780638c1ac18a146101865780638e8f294b146101a9578063c7ee005e146101eb578063db5c65de146101fe578063dce1544914610207578063e87554461461021a57600080fd5b806302c3bcbb146100b957806310b98338146100ef5780634a5844321461012a5780634ada90af1461014a57806352d84d1e146101535780637dc0d1d014610173575b600080fd5b6100d96100c73660046102ba565b60086020526000908152604090205481565b6040516100e691906102eb565b60405180910390f35b61011d6100fd3660046102f9565b600e60209081526000928352604080842090915290825290205460ff1681565b6040516100e6919061033e565b6100d96101383660046102ba565b60066020526000908152604090205481565b6100d960025481565b61016661016136600461035d565b610223565b6040516100e691906103ae565b600054610166906001600160a01b031681565b61011d6101943660046102ba565b600c6020526000908152604090205460ff1681565b6101dc6101b73660046102ba565b60046020526000908152604090208054600182015460029092015460ff909116919083565b6040516100e6939291906103bc565b600d54610166906001600160a01b031681565b6100d960075481565b6101666102153660046103e4565b61024d565b6100d960015481565b6005818154811061023357600080fd5b6000918252602090912001546001600160a01b0316905081565b6003602052816000526040600020818154811061026957600080fd5b6000918252602090912001546001600160a01b03169150829050565b60006001600160a01b0382165b92915050565b6102a181610285565b81146102ac57600080fd5b50565b803561029281610298565b6000602082840312156102cf576102cf600080fd5b60006102db84846102af565b949350505050565b805b82525050565b6020810161029282846102e3565b6000806040838503121561030f5761030f600080fd5b600061031b85856102af565b925050602061032c858286016102af565b9150509250929050565b8015156102e5565b602081016102928284610336565b806102a1565b80356102928161034c565b60006020828403121561037257610372600080fd5b60006102db8484610352565b60006001600160a01b038216610292565b60006102928261037e565b60006102928261038f565b6102e58161039a565b6020810161029282846103a5565b606081016103ca8286610336565b6103d760208301856102e3565b6102db60408301846102e3565b600080604083850312156103fa576103fa600080fd5b600061040685856102af565b925050602061032c8582860161035256fea2646970667358221220ab487bf284a369f03e126053242435439ac81e76e027d30f34bb1f1de8e62b1764736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8C1AC18A GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x8C1AC18A EQ PUSH2 0x186 JUMPI DUP1 PUSH4 0x8E8F294B EQ PUSH2 0x1A9 JUMPI DUP1 PUSH4 0xC7EE005E EQ PUSH2 0x1EB JUMPI DUP1 PUSH4 0xDB5C65DE EQ PUSH2 0x1FE JUMPI DUP1 PUSH4 0xDCE15449 EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0xE8755446 EQ PUSH2 0x21A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2C3BCBB EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x10B98338 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x4A584432 EQ PUSH2 0x12A JUMPI DUP1 PUSH4 0x4ADA90AF EQ PUSH2 0x14A JUMPI DUP1 PUSH4 0x52D84D1E EQ PUSH2 0x153 JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0x173 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD9 PUSH2 0xC7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2BA JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE6 SWAP2 SWAP1 PUSH2 0x2EB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x11D PUSH2 0xFD CALLDATASIZE PUSH1 0x4 PUSH2 0x2F9 JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE6 SWAP2 SWAP1 PUSH2 0x33E JUMP JUMPDEST PUSH2 0xD9 PUSH2 0x138 CALLDATASIZE PUSH1 0x4 PUSH2 0x2BA JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xD9 PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x166 PUSH2 0x161 CALLDATASIZE PUSH1 0x4 PUSH2 0x35D JUMP JUMPDEST PUSH2 0x223 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE6 SWAP2 SWAP1 PUSH2 0x3AE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x166 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x11D PUSH2 0x194 CALLDATASIZE PUSH1 0x4 PUSH2 0x2BA JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x1DC PUSH2 0x1B7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2BA JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD PUSH1 0xFF SWAP1 SWAP2 AND SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE6 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3BC JUMP JUMPDEST PUSH1 0xD SLOAD PUSH2 0x166 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0xD9 PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x166 PUSH2 0x215 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E4 JUMP JUMPDEST PUSH2 0x24D JUMP JUMPDEST PUSH2 0xD9 PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE DUP2 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x269 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 POP DUP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2A1 DUP2 PUSH2 0x285 JUMP JUMPDEST DUP2 EQ PUSH2 0x2AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x292 DUP2 PUSH2 0x298 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2CF JUMPI PUSH2 0x2CF PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2DB DUP5 DUP5 PUSH2 0x2AF JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x292 DUP3 DUP5 PUSH2 0x2E3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x30F JUMPI PUSH2 0x30F PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x31B DUP6 DUP6 PUSH2 0x2AF JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x32C DUP6 DUP3 DUP7 ADD PUSH2 0x2AF JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x2E5 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x292 DUP3 DUP5 PUSH2 0x336 JUMP JUMPDEST DUP1 PUSH2 0x2A1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x292 DUP2 PUSH2 0x34C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x372 JUMPI PUSH2 0x372 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2DB DUP5 DUP5 PUSH2 0x352 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x292 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x292 DUP3 PUSH2 0x37E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x292 DUP3 PUSH2 0x38F JUMP JUMPDEST PUSH2 0x2E5 DUP2 PUSH2 0x39A JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x292 DUP3 DUP5 PUSH2 0x3A5 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x3CA DUP3 DUP7 PUSH2 0x336 JUMP JUMPDEST PUSH2 0x3D7 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x2E3 JUMP JUMPDEST PUSH2 0x2DB PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2E3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3FA JUMPI PUSH2 0x3FA PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x406 DUP6 DUP6 PUSH2 0x2AF JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x32C DUP6 DUP3 DUP7 ADD PUSH2 0x352 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAB BASEFEE PUSH28 0xF284A369F03E126053242435439AC81E76E027D30F34BB1F1DE8E62B OR PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ","sourceMap":"551:4183:30:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3115:45;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;4371:69;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2800:45::-;;;;;;:::i;:::-;;;;;;;;;;;;;;2240:43;;;;;;2644:26;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1935:38::-;;;;;-1:-1:-1;;;;;1935:38:30;;;3606:58;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2558:41;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4154:19::-;;;;;-1:-1:-1;;;;;4154:19:30;;;2933:40;;;;;;2364:49;;;;;;:::i;:::-;;:::i;2090:34::-;;;;;;2644:26;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2644:26:30;;-1:-1:-1;2644:26:30;:::o;2364:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2364:49:30;;-1:-1:-1;2364:49:30;;-1:-1:-1;2364:49:30:o;466:96:69:-;503:7;-1:-1:-1;;;;;400:54:69;;532:24;521:35;466:96;-1:-1:-1;;466:96:69:o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;767:20;;796:33;767:20;796:33;:::i;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;551:4183:30;;;955:79:69;1075:1;1100:53;1145:7;1125:9;1100:53;:::i;:::-;1090:63;841:329;-1:-1:-1;;;;841:329:69:o;1259:118::-;1364:5;1346:24;1341:3;1334:37;1259:118;;:::o;1383:222::-;1514:2;1499:18;;1527:71;1503:9;1571:6;1527:71;:::i;1611:474::-;1679:6;1687;1736:2;1724:9;1715:7;1711:23;1707:32;1704:119;;;1742:79;551:4183:30;;;1742:79:69;1862:1;1887:53;1932:7;1912:9;1887:53;:::i;:::-;1877:63;;1833:117;1989:2;2015:53;2060:7;2051:6;2040:9;2036:22;2015:53;:::i;:::-;2005:63;;1960:118;1611:474;;;;;:::o;2187:109::-;2161:13;;2154:21;2268;2091:90;2302:210;2427:2;2412:18;;2440:65;2416:9;2478:6;2440:65;:::i;2518:122::-;2609:5;2591:24;1176:77;2646:139;2717:20;;2746:33;2717:20;2746:33;:::i;2791:329::-;2850:6;2899:2;2887:9;2878:7;2874:23;2870:32;2867:119;;;2905:79;551:4183:30;;;2905:79:69;3025:1;3050:53;3095:7;3075:9;3050:53;:::i;3192:142::-;3242:9;-1:-1:-1;;;;;400:54:69;;3275:53;334:126;3340;3390:9;3423:37;3454:5;3423:37;:::i;3472:142::-;3538:9;3571:37;3602:5;3571:37;:::i;3620:163::-;3723:53;3770:5;3723:53;:::i;3789:254::-;3936:2;3921:18;;3949:87;3925:9;4009:6;3949:87;:::i;4716:430::-;4897:2;4882:18;;4910:65;4886:9;4948:6;4910:65;:::i;:::-;4985:72;5053:2;5042:9;5038:18;5029:6;4985:72;:::i;:::-;5067;5135:2;5124:9;5120:18;5111:6;5067:72;:::i;5729:474::-;5797:6;5805;5854:2;5842:9;5833:7;5829:23;5825:32;5822:119;;;5860:79;551:4183:30;;;5860:79:69;5980:1;6005:53;6050:7;6030:9;6005:53;:::i;:::-;5995:63;;5951:117;6107:2;6133:53;6178:7;6169:6;6158:9;6154:22;6133:53;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"220200","executionCost":"263","totalCost":"220463"},"external":{"accountAssets(address,uint256)":"infinite","allMarkets(uint256)":"infinite","approvedDelegates(address,address)":"infinite","borrowCaps(address)":"infinite","closeFactorMantissa()":"2471","isForcedLiquidationEnabled(address)":"infinite","liquidationIncentiveMantissa()":"2428","markets(address)":"infinite","minLiquidatableCollateral()":"2427","oracle()":"infinite","prime()":"infinite","supplyCaps(address)":"infinite"}},"methodIdentifiers":{"accountAssets(address,uint256)":"dce15449","allMarkets(uint256)":"52d84d1e","approvedDelegates(address,address)":"10b98338","borrowCaps(address)":"4a584432","closeFactorMantissa()":"e8755446","isForcedLiquidationEnabled(address)":"8c1ac18a","liquidationIncentiveMantissa()":"4ada90af","markets(address)":"8e8f294b","minLiquidatableCollateral()":"db5c65de","oracle()":"7dc0d1d0","prime()":"c7ee005e","supplyCaps(address)":"02c3bcbb"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"accountAssets\",\"outputs\":[{\"internalType\":\"contract VToken\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allMarkets\",\"outputs\":[{\"internalType\":\"contract VToken\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"approvedDelegates\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"borrowCaps\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"closeFactorMantissa\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isForcedLiquidationEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidationIncentiveMantissa\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"markets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isListed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"collateralFactorMantissa\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationThresholdMantissa\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minLiquidatableCollateral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contract ResilientOracleInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"prime\",\"outputs\":[{\"internalType\":\"contract IPrime\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"supplyCaps\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"},\"markets\":{\"details\":\"Used e.g. to determine if a market is supported\"}},\"title\":\"ComptrollerStorage\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"accountAssets(address,uint256)\":{\"notice\":\"Per-account mapping of \\\"assets you are in\\\"\"},\"allMarkets(uint256)\":{\"notice\":\"A list of all markets\"},\"approvedDelegates(address,address)\":{\"notice\":\"Whether the delegate is allowed to borrow or redeem on behalf of the user\"},\"borrowCaps(address)\":{\"notice\":\"Borrow caps enforced by borrowAllowed for each vToken address. Defaults to zero which restricts borrowing.\"},\"closeFactorMantissa()\":{\"notice\":\"Multiplier used to calculate the maximum repayAmount when liquidating a borrow\"},\"isForcedLiquidationEnabled(address)\":{\"notice\":\"Flag indicating whether forced liquidation enabled for a market\"},\"liquidationIncentiveMantissa()\":{\"notice\":\"Multiplier representing the discount on collateral that a liquidator receives\"},\"markets(address)\":{\"notice\":\"Official mapping of vTokens -> Market metadata\"},\"minLiquidatableCollateral()\":{\"notice\":\"Minimal collateral required for regular (non-batch) liquidations\"},\"oracle()\":{\"notice\":\"Oracle which gives the price of any given asset\"},\"prime()\":{\"notice\":\"Prime token address\"},\"supplyCaps(address)\":{\"notice\":\"Supply caps enforced by mintAllowed for each vToken address. Defaults to zero which corresponds to minting not allowed\"}},\"notice\":\"Storage layout for the `Comptroller` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol\":\"ComptrollerStorage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./OwnableUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership} and {acceptOwnership}.\\n *\\n * This module is used through inheritance. It will make available all functions\\n * from parent (Ownable).\\n */\\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\\n    address private _pendingOwner;\\n\\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\\n\\n    function __Ownable2Step_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable2Step_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Returns the address of the pending owner.\\n     */\\n    function pendingOwner() public view virtual returns (address) {\\n        return _pendingOwner;\\n    }\\n\\n    /**\\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\\n        _pendingOwner = newOwner;\\n        emit OwnershipTransferStarted(owner(), newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual override {\\n        delete _pendingOwner;\\n        super._transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev The new owner accepts the ownership transfer.\\n     */\\n    function acceptOwnership() public virtual {\\n        address sender = _msgSender();\\n        require(pendingOwner() == sender, \\\"Ownable2Step: caller is not the new owner\\\");\\n        _transferOwnership(sender);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x9140dabc466abab21b48b72dbda26736b1183a310d0e677d3719d201df026510\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * ==== Security Considerations\\n *\\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\\n * generally recommended is:\\n *\\n * ```solidity\\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\\n *     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\\n *     doThing(..., value);\\n * }\\n *\\n * function doThing(..., uint256 value) public {\\n *     token.safeTransferFrom(msg.sender, address(this), value);\\n *     ...\\n * }\\n * ```\\n *\\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\\n * {SafeERC20-safeTransferFrom}).\\n *\\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\\n * contracts should have entry points that don't rely on permit.\\n */\\ninterface IERC20PermitUpgradeable {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     *\\n     * CAUTION: See Security Considerations above.\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x07e881de3b9f6d2c07909f193f24b96c7fe4ea60013260f3f25aecd8bab3c2f8\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\nimport \\\"../extensions/IERC20PermitUpgradeable.sol\\\";\\nimport \\\"../../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20Upgradeable {\\n    using AddressUpgradeable for address;\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransfer(IERC20Upgradeable token, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    /**\\n     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeIncreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        uint256 oldAllowance = token.allowance(address(this), spender);\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));\\n    }\\n\\n    /**\\n     * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeDecreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));\\n        }\\n    }\\n\\n    /**\\n     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n     * to be set to zero before setting it to a non-zero value, such as USDT.\\n     */\\n    function forceApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);\\n\\n        if (!_callOptionalReturnBool(token, approvalCall)) {\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));\\n            _callOptionalReturn(token, approvalCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.\\n     * Revert on invalid signature.\\n     */\\n    function safePermit(\\n        IERC20PermitUpgradeable token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20Upgradeable token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        require(returndata.length == 0 || abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     *\\n     * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\\n     */\\n    function _callOptionalReturnBool(IERC20Upgradeable token, bytes memory data) private returns (bool) {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\\n        // and not revert is the subcall reverts.\\n\\n        (bool success, bytes memory returndata) = address(token).call(data);\\n        return\\n            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && AddressUpgradeable.isContract(address(token));\\n    }\\n}\\n\",\"keccak256\":\"0x23b997be73d3dd46885262704f0f8cfc7273fdadfe303d37969a9561373972b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n    /**\\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n     *\\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n     * {RoleAdminChanged} not being emitted signaling this.\\n     *\\n     * _Available since v3.1._\\n     */\\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n    /**\\n     * @dev Emitted when `account` is granted `role`.\\n     *\\n     * `sender` is the account that originated the contract call, an admin role\\n     * bearer except when using {AccessControl-_setupRole}.\\n     */\\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Emitted when `account` is revoked `role`.\\n     *\\n     * `sender` is the account that originated the contract call:\\n     *   - if using `revokeRole`, it is the admin role bearer\\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n     */\\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Returns `true` if `account` has been granted `role`.\\n     */\\n    function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n    /**\\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\\n     * {revokeRole}.\\n     *\\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n     */\\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n    /**\\n     * @dev Grants `role` to `account`.\\n     *\\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function grantRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from `account`.\\n     *\\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function revokeRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from the calling account.\\n     *\\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n     * purpose is to provide a mechanism for accounts to lose their privileges\\n     * if they are compromised (such as when a trusted device is misplaced).\\n     *\\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must be `account`.\\n     */\\n    function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\n\\nimport \\\"./IAccessControlManagerV8.sol\\\";\\n\\n/**\\n * @title AccessControlledV8\\n * @author Venus\\n * @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\\n * to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\\n */\\nabstract contract AccessControlledV8 is Initializable, Ownable2StepUpgradeable {\\n    /// @notice Access control manager contract\\n    IAccessControlManagerV8 internal _accessControlManager;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when access control manager contract address is changed\\n    event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager);\\n\\n    /// @notice Thrown when the action is prohibited by AccessControlManager\\n    error Unauthorized(address sender, address calledContract, string methodSignature);\\n\\n    function __AccessControlled_init(address accessControlManager_) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n    }\\n\\n    function __AccessControlled_init_unchained(address accessControlManager_) internal onlyInitializing {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Sets the address of AccessControlManager\\n     * @dev Admin function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     * @custom:event Emits NewAccessControlManager event\\n     * @custom:access Only Governance\\n     */\\n    function setAccessControlManager(address accessControlManager_) external onlyOwner {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Returns the address of the access control manager contract\\n     */\\n    function accessControlManager() external view returns (IAccessControlManagerV8) {\\n        return _accessControlManager;\\n    }\\n\\n    /**\\n     * @dev Internal function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     */\\n    function _setAccessControlManager(address accessControlManager_) internal {\\n        require(address(accessControlManager_) != address(0), \\\"invalid acess control manager address\\\");\\n        address oldAccessControlManager = address(_accessControlManager);\\n        _accessControlManager = IAccessControlManagerV8(accessControlManager_);\\n        emit NewAccessControlManager(oldAccessControlManager, accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Reverts if the call is not allowed by AccessControlManager\\n     * @param signature Method signature\\n     */\\n    function _checkAccessAllowed(string memory signature) internal view {\\n        bool isAllowedToCall = _accessControlManager.isAllowedToCall(msg.sender, signature);\\n\\n        if (!isAllowedToCall) {\\n            revert Unauthorized(msg.sender, address(this), signature);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe0fd441c84ac907cabc88db69ef04f6d7532d770c7e6a1dfe6e7d6305debb49\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport \\\"@openzeppelin/contracts/access/IAccessControl.sol\\\";\\n\\n/**\\n * @title IAccessControlManagerV8\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\\n */\\ninterface IAccessControlManagerV8 is IAccessControl {\\n    function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n    function revokeCallPermission(\\n        address contractAddress,\\n        string calldata functionSig,\\n        address accountToRevoke\\n    ) external;\\n\\n    function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n    function hasPermission(\\n        address account,\\n        address contractAddress,\\n        string calldata functionSig\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xaa29b098440d0b3a131c5ecdf25ce548790c1b5ac7bf9b5c0264b6af6f7a1e0b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Comptroller.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\n\\nimport { ComptrollerInterface, Action } from \\\"./ComptrollerInterface.sol\\\";\\nimport { ComptrollerStorage } from \\\"./ComptrollerStorage.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"./MaxLoopsLimitHelper.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title Comptroller\\n * @author Venus\\n * @notice The Comptroller is designed to provide checks for all minting, redeeming, transferring, borrowing, lending, repaying, liquidating,\\n * and seizing done by the `vToken` contract. Each pool has one `Comptroller` checking these interactions across markets. When a user interacts\\n * with a given market by one of these main actions, a call is made to a corresponding hook in the associated `Comptroller`, which either allows\\n * or reverts the transaction. These hooks also update supply and borrow rewards as they are called. The comptroller holds the logic for assessing\\n * liquidity snapshots of an account via the collateral factor and liquidation threshold. This check determines the collateral needed for a borrow,\\n * as well as how much of a borrow may be liquidated. A user may borrow a portion of their collateral with the maximum amount determined by the\\n * markets collateral factor. However, if their borrowed amount exceeds an amount calculated using the market\\u2019s corresponding liquidation threshold,\\n * the borrow is eligible for liquidation.\\n *\\n * The `Comptroller` also includes two functions `liquidateAccount()` and `healAccount()`, which are meant to handle accounts that do not exceed\\n * the `minLiquidatableCollateral` for the `Comptroller`:\\n *\\n * - `healAccount()`: This function is called to seize all of a given user\\u2019s collateral, requiring the `msg.sender` repay a certain percentage\\n * of the debt calculated by `collateral/(borrows*liquidationIncentive)`. The function can only be called if the calculated percentage does not exceed\\n * 100%, because otherwise no `badDebt` would be created and `liquidateAccount()` should be used instead. The difference in the actual amount of debt\\n * and debt paid off is recorded as `badDebt` for each market, which can then be auctioned off for the risk reserves of the associated pool.\\n * - `liquidateAccount()`: This function can only be called if the collateral seized will cover all borrows of an account, as well as the liquidation\\n * incentive. Otherwise, the pool will incur bad debt, in which case the function `healAccount()` should be used instead. This function skips the logic\\n * verifying that the repay amount does not exceed the close factor.\\n */\\ncontract Comptroller is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    ComptrollerStorage,\\n    ComptrollerInterface,\\n    ExponentialNoError,\\n    MaxLoopsLimitHelper\\n{\\n    // PoolRegistry, immutable to save on gas\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    address public immutable poolRegistry;\\n\\n    /// @notice Emitted when an account enters a market\\n    event MarketEntered(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when an account exits a market\\n    event MarketExited(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when close factor is changed by admin\\n    event NewCloseFactor(uint256 oldCloseFactorMantissa, uint256 newCloseFactorMantissa);\\n\\n    /// @notice Emitted when a collateral factor is changed by admin\\n    event NewCollateralFactor(VToken vToken, uint256 oldCollateralFactorMantissa, uint256 newCollateralFactorMantissa);\\n\\n    /// @notice Emitted when liquidation threshold is changed by admin\\n    event NewLiquidationThreshold(\\n        VToken vToken,\\n        uint256 oldLiquidationThresholdMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    );\\n\\n    /// @notice Emitted when liquidation incentive is changed by admin\\n    event NewLiquidationIncentive(uint256 oldLiquidationIncentiveMantissa, uint256 newLiquidationIncentiveMantissa);\\n\\n    /// @notice Emitted when price oracle is changed\\n    event NewPriceOracle(ResilientOracleInterface oldPriceOracle, ResilientOracleInterface newPriceOracle);\\n\\n    /// @notice Emitted when an action is paused on a market\\n    event ActionPausedMarket(VToken vToken, Action action, bool pauseState);\\n\\n    /// @notice Emitted when borrow cap for a vToken is changed\\n    event NewBorrowCap(VToken indexed vToken, uint256 newBorrowCap);\\n\\n    /// @notice Emitted when the collateral threshold (in USD) for non-batch liquidations is changed\\n    event NewMinLiquidatableCollateral(uint256 oldMinLiquidatableCollateral, uint256 newMinLiquidatableCollateral);\\n\\n    /// @notice Emitted when supply cap for a vToken is changed\\n    event NewSupplyCap(VToken indexed vToken, uint256 newSupplyCap);\\n\\n    /// @notice Emitted when a rewards distributor is added\\n    event NewRewardsDistributor(address indexed rewardsDistributor, address indexed rewardToken);\\n\\n    /// @notice Emitted when a market is supported\\n    event MarketSupported(VToken vToken);\\n\\n    /// @notice Emitted when prime token contract address is changed\\n    event NewPrimeToken(IPrime oldPrimeToken, IPrime newPrimeToken);\\n\\n    /// @notice Emitted when forced liquidation is enabled or disabled for a market\\n    event IsForcedLiquidationEnabledUpdated(address indexed vToken, bool enable);\\n\\n    /// @notice Emitted when a market is unlisted\\n    event MarketUnlisted(address indexed vToken);\\n    /// @notice Emitted when the borrowing or redeeming delegate rights are updated for an account\\n    event DelegateUpdated(address indexed approver, address indexed delegate, bool approved);\\n\\n    /// @notice Thrown when collateral factor exceeds the upper bound\\n    error InvalidCollateralFactor();\\n\\n    /// @notice Thrown when liquidation threshold exceeds the collateral factor\\n    error InvalidLiquidationThreshold();\\n\\n    /// @notice Thrown when the action is only available to specific sender, but the real sender was different\\n    error UnexpectedSender(address expectedSender, address actualSender);\\n\\n    /// @notice Thrown when the oracle returns an invalid price for some asset\\n    error PriceError(address vToken);\\n\\n    /// @notice Thrown if VToken unexpectedly returned a nonzero error code while trying to get account snapshot\\n    error SnapshotError(address vToken, address user);\\n\\n    /// @notice Thrown when the market is not listed\\n    error MarketNotListed(address market);\\n\\n    /// @notice Thrown when a market has an unexpected comptroller\\n    error ComptrollerMismatch();\\n\\n    /// @notice Thrown when user is not member of market\\n    error MarketNotCollateral(address vToken, address user);\\n\\n    /// @notice Thrown when borrow action is not paused\\n    error BorrowActionNotPaused();\\n\\n    /// @notice Thrown when mint action is not paused\\n    error MintActionNotPaused();\\n\\n    /// @notice Thrown when redeem action is not paused\\n    error RedeemActionNotPaused();\\n\\n    /// @notice Thrown when repay action is not paused\\n    error RepayActionNotPaused();\\n\\n    /// @notice Thrown when seize action is not paused\\n    error SeizeActionNotPaused();\\n\\n    /// @notice Thrown when exit market action is not paused\\n    error ExitMarketActionNotPaused();\\n\\n    /// @notice Thrown when transfer action is not paused\\n    error TransferActionNotPaused();\\n\\n    /// @notice Thrown when enter market action is not paused\\n    error EnterMarketActionNotPaused();\\n\\n    /// @notice Thrown when liquidate action is not paused\\n    error LiquidateActionNotPaused();\\n\\n    /// @notice Thrown when borrow cap is not zero\\n    error BorrowCapIsNotZero();\\n\\n    /// @notice Thrown when supply cap is not zero\\n    error SupplyCapIsNotZero();\\n\\n    /// @notice Thrown when collateral factor is not zero\\n    error CollateralFactorIsNotZero();\\n\\n    /**\\n     * @notice Thrown during the liquidation if user's total collateral amount is lower than\\n     *   a predefined threshold. In this case only batch liquidations (either liquidateAccount\\n     *   or healAccount) are available.\\n     */\\n    error MinimalCollateralViolated(uint256 expectedGreaterThan, uint256 actual);\\n    error CollateralExceedsThreshold(uint256 expectedLessThanOrEqualTo, uint256 actual);\\n    error InsufficientCollateral(uint256 collateralToSeize, uint256 availableCollateral);\\n\\n    /// @notice Thrown when the account doesn't have enough liquidity to redeem or borrow\\n    error InsufficientLiquidity();\\n\\n    /// @notice Thrown when trying to liquidate a healthy account\\n    error InsufficientShortfall();\\n\\n    /// @notice Thrown when trying to repay more than allowed by close factor\\n    error TooMuchRepay();\\n\\n    /// @notice Thrown if the user is trying to exit a market in which they have an outstanding debt\\n    error NonzeroBorrowBalance();\\n\\n    /// @notice Thrown when trying to perform an action that is paused\\n    error ActionPaused(address market, Action action);\\n\\n    /// @notice Thrown when trying to add a market that is already listed\\n    error MarketAlreadyListed(address market);\\n\\n    /// @notice Thrown if the supply cap is exceeded\\n    error SupplyCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if the borrow cap is exceeded\\n    error BorrowCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if delegate approval status is already set to the requested value\\n    error DelegationStatusUnchanged();\\n\\n    /// @param poolRegistry_ Pool registry address\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    /// @custom:error ZeroAddressNotAllowed is thrown when pool registry address is zero\\n    constructor(address poolRegistry_) {\\n        ensureNonzeroAddress(poolRegistry_);\\n\\n        poolRegistry = poolRegistry_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @param loopLimit Limit for the loops can iterate to avoid the DOS\\n     * @param accessControlManager Access control manager contract address\\n     */\\n    function initialize(uint256 loopLimit, address accessControlManager) external initializer {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager);\\n\\n        _setMaxLoopsLimit(loopLimit);\\n    }\\n\\n    /**\\n     * @notice Add assets to be included in account liquidity calculation; enabling them to be used as collateral\\n     * @param vTokens The list of addresses of the vToken markets to be enabled\\n     * @return errors An array of NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketEntered is emitted for each market on success\\n     * @custom:error ActionPaused error is thrown if entering any of the markets is paused\\n     * @custom:error MarketNotListed error is thrown if any of the markets is not listed\\n     * @custom:access Not restricted\\n     */\\n    function enterMarkets(address[] memory vTokens) external override returns (uint256[] memory) {\\n        uint256 len = vTokens.length;\\n\\n        uint256[] memory results = new uint256[](len);\\n        for (uint256 i; i < len; ++i) {\\n            VToken vToken = VToken(vTokens[i]);\\n\\n            _addToMarket(vToken, msg.sender);\\n            results[i] = NO_ERROR;\\n        }\\n\\n        return results;\\n    }\\n\\n    /**\\n     * @notice Unlist a market by setting isListed to false\\n     * @dev Checks if all actions are paused, borrow/supply caps is set to 0 and collateral factor is to 0.\\n     * @param market The address of the market (token) to unlist\\n     * @return uint256 Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketUnlisted is emitted on success\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error BorrowActionNotPaused error is thrown if borrow action is not paused\\n     * @custom:error MintActionNotPaused error is thrown if mint action is not paused\\n     * @custom:error RedeemActionNotPaused error is thrown if redeem action is not paused\\n     * @custom:error RepayActionNotPaused error is thrown if repay action is not paused\\n     * @custom:error EnterMarketActionNotPaused error is thrown if enter market action is not paused\\n     * @custom:error LiquidateActionNotPaused error is thrown if liquidate action is not paused\\n     * @custom:error BorrowCapIsNotZero error is thrown if borrow cap is not zero\\n     * @custom:error SupplyCapIsNotZero error is thrown if supply cap is not zero\\n     * @custom:error CollateralFactorIsNotZero error is thrown if collateral factor is not zero\\n     */\\n    function unlistMarket(address market) external returns (uint256) {\\n        _checkAccessAllowed(\\\"unlistMarket(address)\\\");\\n\\n        Market storage _market = markets[market];\\n\\n        if (!_market.isListed) {\\n            revert MarketNotListed(market);\\n        }\\n\\n        if (!actionPaused(market, Action.BORROW)) {\\n            revert BorrowActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.MINT)) {\\n            revert MintActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REDEEM)) {\\n            revert RedeemActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REPAY)) {\\n            revert RepayActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.SEIZE)) {\\n            revert SeizeActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.ENTER_MARKET)) {\\n            revert EnterMarketActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.LIQUIDATE)) {\\n            revert LiquidateActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.TRANSFER)) {\\n            revert TransferActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.EXIT_MARKET)) {\\n            revert ExitMarketActionNotPaused();\\n        }\\n\\n        if (borrowCaps[market] != 0) {\\n            revert BorrowCapIsNotZero();\\n        }\\n\\n        if (supplyCaps[market] != 0) {\\n            revert SupplyCapIsNotZero();\\n        }\\n\\n        if (_market.collateralFactorMantissa != 0) {\\n            revert CollateralFactorIsNotZero();\\n        }\\n\\n        _market.isListed = false;\\n        emit MarketUnlisted(market);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Grants or revokes the borrowing or redeeming delegate rights to / from an account\\n     *  If allowed, the delegate will be able to borrow funds on behalf of the sender\\n     *  Upon a delegated borrow, the delegate will receive the funds, and the borrower\\n     *  will see the debt on their account\\n     *  Upon a delegated redeem, the delegate will receive the redeemed amount and the approver\\n     *  will see a deduction in his vToken balance\\n     * @param delegate The address to update the rights for\\n     * @param approved Whether to grant (true) or revoke (false) the borrowing or redeeming rights\\n     * @custom:event DelegateUpdated emits on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when delegate address is zero\\n     * @custom:error DelegationStatusUnchanged is thrown if approval status is already set to the requested value\\n     * @custom:access Not restricted\\n     */\\n    function updateDelegate(address delegate, bool approved) external {\\n        ensureNonzeroAddress(delegate);\\n        if (approvedDelegates[msg.sender][delegate] == approved) {\\n            revert DelegationStatusUnchanged();\\n        }\\n\\n        approvedDelegates[msg.sender][delegate] = approved;\\n        emit DelegateUpdated(msg.sender, delegate, approved);\\n    }\\n\\n    /**\\n     * @notice Removes asset from sender's account liquidity calculation; disabling them as collateral\\n     * @dev Sender must not have an outstanding borrow balance in the asset,\\n     *  or be providing necessary collateral for an outstanding borrow.\\n     * @param vTokenAddress The address of the asset to be removed\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketExited is emitted on success\\n     * @custom:error ActionPaused error is thrown if exiting the market is paused\\n     * @custom:error NonzeroBorrowBalance error is thrown if the user has an outstanding borrow in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if exiting the market would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function exitMarket(address vTokenAddress) external override returns (uint256) {\\n        _checkActionPauseState(vTokenAddress, Action.EXIT_MARKET);\\n        VToken vToken = VToken(vTokenAddress);\\n        /* Get sender tokensHeld and amountOwed underlying from the vToken */\\n        (uint256 tokensHeld, uint256 amountOwed, ) = _safeGetAccountSnapshot(vToken, msg.sender);\\n\\n        /* Fail if the sender has a borrow balance */\\n        if (amountOwed != 0) {\\n            revert NonzeroBorrowBalance();\\n        }\\n\\n        /* Fail if the sender is not permitted to redeem all of their tokens */\\n        _checkRedeemAllowed(vTokenAddress, msg.sender, tokensHeld);\\n\\n        Market storage marketToExit = markets[address(vToken)];\\n\\n        /* Return true if the sender is not already \\u2018in\\u2019 the market */\\n        if (!marketToExit.accountMembership[msg.sender]) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Set vToken account membership to false */\\n        delete marketToExit.accountMembership[msg.sender];\\n\\n        /* Delete vToken from the account\\u2019s list of assets */\\n        // load into memory for faster iteration\\n        VToken[] memory userAssetList = accountAssets[msg.sender];\\n        uint256 len = userAssetList.length;\\n\\n        uint256 assetIndex = len;\\n        for (uint256 i; i < len; ++i) {\\n            if (userAssetList[i] == vToken) {\\n                assetIndex = i;\\n                break;\\n            }\\n        }\\n\\n        // We *must* have found the asset in the list or our redundant data structure is broken\\n        assert(assetIndex < len);\\n\\n        // copy last item in list to location of item to be removed, reduce length by 1\\n        VToken[] storage storedList = accountAssets[msg.sender];\\n        storedList[assetIndex] = storedList[storedList.length - 1];\\n        storedList.pop();\\n\\n        emit MarketExited(vToken, msg.sender);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /*** Policy Hooks ***/\\n\\n    /**\\n     * @notice Checks if the account should be allowed to mint tokens in the given market\\n     * @param vToken The market to verify the mint against\\n     * @param minter The account which would get the minted tokens\\n     * @param mintAmount The amount of underlying being supplied to the market in exchange for tokens\\n     * @custom:error ActionPaused error is thrown if supplying to this market is paused\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error SupplyCapExceeded error is thrown if the total supply exceeds the cap after minting\\n     * @custom:access Not restricted\\n     */\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external override {\\n        _checkActionPauseState(vToken, Action.MINT);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        uint256 supplyCap = supplyCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (supplyCap != type(uint256).max) {\\n            uint256 vTokenSupply = VToken(vToken).totalSupply();\\n            Exp memory exchangeRate = Exp({ mantissa: VToken(vToken).exchangeRateStored() });\\n            uint256 nextTotalSupply = mul_ScalarTruncateAddUInt(exchangeRate, vTokenSupply, mintAmount);\\n            if (nextTotalSupply > supplyCap) {\\n                revert SupplyCapExceeded(vToken, supplyCap);\\n            }\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, minter);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates mint, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being minted\\n     * @param minter The address minting the tokens\\n     * @param actualMintAmount The amount of the underlying asset being minted\\n     * @param mintTokens The number of tokens being minted\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function mintVerify(address vToken, address minter, uint256 actualMintAmount, uint256 mintTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(minter, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to redeem tokens in the given market\\n     * @param vToken The market to verify the redeem against\\n     * @param redeemer The account which would redeem the tokens\\n     * @param redeemTokens The number of vTokens to exchange for the underlying asset in the market\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external override {\\n        _checkActionPauseState(vToken, Action.REDEEM);\\n\\n        _checkRedeemAllowed(vToken, redeemer, redeemTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, redeemer);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates redeem, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being redeemed\\n     * @param redeemer The address redeeming the tokens\\n     * @param redeemAmount The amount of the underlying asset being redeemed\\n     * @param redeemTokens The number of tokens being redeemed\\n     */\\n    function redeemVerify(address vToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(redeemer, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates repayBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being repaid\\n     * @param payer The address repaying the borrow\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     */\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer, // solhint-disable-line no-unused-vars\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 borrowerIndex // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates liquidateBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     * @param seizeTokens The amount of collateral token that will be seized\\n     */\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenBorrowed);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenBorrowed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates seize, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param seizeTokens The number of collateral tokens to seize\\n     */\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenCollateral);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenCollateral);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates transfer, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being transferred\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function transferVerify(address vToken, address src, address dst, uint256 transferTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(src, vToken);\\n            prime.accrueInterestAndUpdateScore(dst, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to borrow the underlying asset of the given market\\n     * @param vToken The market to verify the borrow against\\n     * @param borrower The account which would borrow the asset\\n     * @param borrowAmount The amount of underlying the account would borrow\\n     * @custom:error ActionPaused error is thrown if borrowing is paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if there is not enough collateral to borrow\\n     * @custom:error BorrowCapExceeded is thrown if the borrow cap will be exceeded should this borrow succeed\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted if vToken is enabled as collateral, otherwise only vToken\\n     */\\n    /// disable-eslint\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external override {\\n        _checkActionPauseState(vToken, Action.BORROW);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (!markets[vToken].accountMembership[borrower]) {\\n            // only vTokens may call borrowAllowed if borrower not in market\\n            _checkSenderIs(vToken);\\n\\n            // attempt to add borrower to the market or revert\\n            _addToMarket(VToken(msg.sender), borrower);\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (oracle.getUnderlyingPrice(vToken) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 borrowCap = borrowCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (borrowCap != type(uint256).max) {\\n            uint256 totalBorrows = VToken(vToken).totalBorrows();\\n            uint256 badDebt = VToken(vToken).badDebt();\\n            uint256 nextTotalBorrows = totalBorrows + borrowAmount + badDebt;\\n            if (nextTotalBorrows > borrowCap) {\\n                revert BorrowCapExceeded(vToken, borrowCap);\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            borrower,\\n            VToken(vToken),\\n            0,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n\\n        Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates borrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset whose underlying is being borrowed\\n     * @param borrower The address borrowing the underlying\\n     * @param borrowAmount The amount of the underlying asset requested to borrow\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function borrowVerify(address vToken, address borrower, uint256 borrowAmount) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to repay a borrow in the given market\\n     * @param vToken The market to verify the repay against\\n     * @param borrower The account which would borrowed the asset\\n     * @custom:error ActionPaused error is thrown if repayments are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:access Not restricted\\n     */\\n    function preRepayHook(address vToken, address borrower) external override {\\n        _checkActionPauseState(vToken, Action.REPAY);\\n\\n        oracle.updatePrice(vToken);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the liquidation should be allowed to occur\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param borrower The address of the borrower\\n     * @param repayAmount The amount of underlying being repaid\\n     * @param skipLiquidityCheck Allows the borrow to be liquidated regardless of the account liquidity\\n     * @custom:error ActionPaused error is thrown if liquidations are paused in this market\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error TooMuchRepay error is thrown if the liquidator is trying to repay more than allowed by close factor\\n     * @custom:error MinimalCollateralViolated is thrown if the users' total collateral is lower than the threshold for non-batch liquidations\\n     * @custom:error InsufficientShortfall is thrown when trying to liquidate a healthy account\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     */\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        // Pause Action.LIQUIDATE on BORROWED TOKEN to prevent liquidating it.\\n        // If we want to pause liquidating to vTokenCollateral, we should pause\\n        // Action.SEIZE on it\\n        _checkActionPauseState(vTokenBorrowed, Action.LIQUIDATE);\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(address(vTokenBorrowed));\\n        }\\n        if (!markets[vTokenCollateral].isListed) {\\n            revert MarketNotListed(address(vTokenCollateral));\\n        }\\n\\n        uint256 borrowBalance = VToken(vTokenBorrowed).borrowBalanceStored(borrower);\\n\\n        /* Allow accounts to be liquidated if it is a forced liquidation */\\n        if (skipLiquidityCheck || isForcedLiquidationEnabled[vTokenBorrowed]) {\\n            if (repayAmount > borrowBalance) {\\n                revert TooMuchRepay();\\n            }\\n            return;\\n        }\\n\\n        /* The borrower must have shortfall and collateral > threshold in order to be liquidatable */\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral <= minLiquidatableCollateral) {\\n            /* The liquidator should use either liquidateAccount or healAccount */\\n            revert MinimalCollateralViolated(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        /* The liquidator may not repay more than what is allowed by the closeFactor */\\n        uint256 maxClose = mul_ScalarTruncate(Exp({ mantissa: closeFactorMantissa }), borrowBalance);\\n        if (repayAmount > maxClose) {\\n            revert TooMuchRepay();\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the seizing of assets should be allowed to occur\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param seizerContract Contract that tries to seize the asset (either borrowed vToken or Comptroller)\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @custom:error ActionPaused error is thrown if seizing this type of collateral is paused\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error ComptrollerMismatch error is when seizer contract or seized asset belong to different pools\\n     * @custom:access Not restricted\\n     */\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address seizerContract,\\n        address liquidator,\\n        address borrower\\n    ) external override {\\n        // Pause Action.SEIZE on COLLATERAL to prevent seizing it.\\n        // If we want to pause liquidating vTokenBorrowed, we should pause\\n        // Action.LIQUIDATE on it\\n        _checkActionPauseState(vTokenCollateral, Action.SEIZE);\\n\\n        Market storage market = markets[vTokenCollateral];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(vTokenCollateral);\\n        }\\n\\n        if (seizerContract == address(this)) {\\n            // If Comptroller is the seizer, just check if collateral's comptroller\\n            // is equal to the current address\\n            if (address(VToken(vTokenCollateral).comptroller()) != address(this)) {\\n                revert ComptrollerMismatch();\\n            }\\n        } else {\\n            // If the seizer is not the Comptroller, check that the seizer is a\\n            // listed market, and that the markets' comptrollers match\\n            if (!markets[seizerContract].isListed) {\\n                revert MarketNotListed(seizerContract);\\n            }\\n            if (VToken(vTokenCollateral).comptroller() != VToken(seizerContract).comptroller()) {\\n                revert ComptrollerMismatch();\\n            }\\n        }\\n\\n        if (!market.accountMembership[borrower]) {\\n            revert MarketNotCollateral(vTokenCollateral, borrower);\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vTokenCollateral);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, borrower);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, liquidator);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to transfer tokens in the given market\\n     * @param vToken The market to verify the transfer against\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external override {\\n        _checkActionPauseState(vToken, Action.TRANSFER);\\n\\n        // Currently the only consideration is whether or not\\n        //  the src is allowed to redeem this many tokens\\n        _checkRedeemAllowed(vToken, src, transferTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, src);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, dst);\\n        }\\n    }\\n\\n    /*** Pool-level operations ***/\\n\\n    /**\\n     * @notice Seizes all the remaining collateral, makes msg.sender repay the existing\\n     *   borrows, and treats the rest of the debt as bad debt (for each market).\\n     *   The sender has to repay a certain percentage of the debt, computed as\\n     *   collateral / (borrows * liquidationIncentive).\\n     * @param user account to heal\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for healing\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function healAccount(address user) external {\\n        VToken[] memory userAssets = getAssetsIn(user);\\n        uint256 userAssetsCount = userAssets.length;\\n\\n        address liquidator = msg.sender;\\n        {\\n            ResilientOracleInterface oracle_ = oracle;\\n            // We need all user's markets to be fresh for the computations to be correct\\n            for (uint256 i; i < userAssetsCount; ++i) {\\n                userAssets[i].accrueInterest();\\n                oracle_.updatePrice(address(userAssets[i]));\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(user, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        // percentage = collateral / (borrows * liquidation incentive)\\n        Exp memory collateral = Exp({ mantissa: snapshot.totalCollateral });\\n        Exp memory scaledBorrows = mul_(\\n            Exp({ mantissa: snapshot.borrows }),\\n            Exp({ mantissa: liquidationIncentiveMantissa })\\n        );\\n\\n        Exp memory percentage = div_(collateral, scaledBorrows);\\n        if (lessThanExp(Exp({ mantissa: MANTISSA_ONE }), percentage)) {\\n            revert CollateralExceedsThreshold(scaledBorrows.mantissa, collateral.mantissa);\\n        }\\n\\n        for (uint256 i; i < userAssetsCount; ++i) {\\n            VToken market = userAssets[i];\\n\\n            (uint256 tokens, uint256 borrowBalance, ) = _safeGetAccountSnapshot(market, user);\\n            uint256 repaymentAmount = mul_ScalarTruncate(percentage, borrowBalance);\\n\\n            // Seize the entire collateral\\n            if (tokens != 0) {\\n                market.seize(liquidator, user, tokens);\\n            }\\n            // Repay a certain percentage of the borrow, forgive the rest\\n            if (borrowBalance != 0) {\\n                market.healBorrow(liquidator, user, repaymentAmount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Liquidates all borrows of the borrower. Callable only if the collateral is less than\\n     *   a predefined threshold, and the account collateral can be seized to cover all borrows. If\\n     *   the collateral is higher than the threshold, use regular liquidations. If the collateral is\\n     *   below the threshold, and the account is insolvent, use healAccount.\\n     * @param borrower the borrower address\\n     * @param orders an array of liquidation orders\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for a batch liquidation\\n     * @custom:error InsufficientCollateral error is thrown when there is not enough collateral to cover the debt\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function liquidateAccount(address borrower, LiquidationOrder[] calldata orders) external {\\n        // We will accrue interest and update the oracle prices later during the liquidation\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            // You should use the regular vToken.liquidateBorrow(...) call\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        uint256 collateralToSeize = mul_ScalarTruncate(\\n            Exp({ mantissa: liquidationIncentiveMantissa }),\\n            snapshot.borrows\\n        );\\n        if (collateralToSeize >= snapshot.totalCollateral) {\\n            // There is not enough collateral to seize. Use healBorrow to repay some part of the borrow\\n            // and record bad debt.\\n            revert InsufficientCollateral(collateralToSeize, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        uint256 ordersCount = orders.length;\\n\\n        _ensureMaxLoops(ordersCount / 2);\\n\\n        for (uint256 i; i < ordersCount; ++i) {\\n            if (!markets[address(orders[i].vTokenBorrowed)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenBorrowed));\\n            }\\n            if (!markets[address(orders[i].vTokenCollateral)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenCollateral));\\n            }\\n\\n            LiquidationOrder calldata order = orders[i];\\n            order.vTokenBorrowed.forceLiquidateBorrow(\\n                msg.sender,\\n                borrower,\\n                order.repayAmount,\\n                order.vTokenCollateral,\\n                true\\n            );\\n        }\\n\\n        VToken[] memory borrowMarkets = getAssetsIn(borrower);\\n        uint256 marketsCount = borrowMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            (, uint256 borrowBalance, ) = _safeGetAccountSnapshot(borrowMarkets[i], borrower);\\n            require(borrowBalance == 0, \\\"Nonzero borrow balance after liquidation\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets the closeFactor to use when liquidating borrows\\n     * @param newCloseFactorMantissa New close factor, scaled by 1e18\\n     * @custom:event Emits NewCloseFactor on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCloseFactor(uint256 newCloseFactorMantissa) external {\\n        _checkAccessAllowed(\\\"setCloseFactor(uint256)\\\");\\n        require(MAX_CLOSE_FACTOR_MANTISSA >= newCloseFactorMantissa, \\\"Close factor greater than maximum close factor\\\");\\n        require(MIN_CLOSE_FACTOR_MANTISSA <= newCloseFactorMantissa, \\\"Close factor smaller than minimum close factor\\\");\\n\\n        uint256 oldCloseFactorMantissa = closeFactorMantissa;\\n        closeFactorMantissa = newCloseFactorMantissa;\\n        emit NewCloseFactor(oldCloseFactorMantissa, newCloseFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Sets the collateralFactor for a market\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param vToken The market to set the factor on\\n     * @param newCollateralFactorMantissa The new collateral factor, scaled by 1e18\\n     * @param newLiquidationThresholdMantissa The new liquidation threshold, scaled by 1e18\\n     * @custom:event Emits NewCollateralFactor when collateral factor is updated\\n     *    and NewLiquidationThreshold when liquidation threshold is updated\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InvalidCollateralFactor error is thrown when collateral factor is too high\\n     * @custom:error InvalidLiquidationThreshold error is thrown when liquidation threshold is lower than collateral factor\\n     * @custom:error PriceError is thrown when the oracle returns an invalid price for the asset\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCollateralFactor(\\n        VToken vToken,\\n        uint256 newCollateralFactorMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    ) external {\\n        _checkAccessAllowed(\\\"setCollateralFactor(address,uint256,uint256)\\\");\\n\\n        // Verify market is listed\\n        Market storage market = markets[address(vToken)];\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Check collateral factor <= 0.9\\n        if (newCollateralFactorMantissa > MAX_COLLATERAL_FACTOR_MANTISSA) {\\n            revert InvalidCollateralFactor();\\n        }\\n\\n        // Ensure that liquidation threshold <= 1\\n        if (newLiquidationThresholdMantissa > MANTISSA_ONE) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // Ensure that liquidation threshold >= CF\\n        if (newLiquidationThresholdMantissa < newCollateralFactorMantissa) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // If collateral factor != 0, fail if price == 0\\n        if (newCollateralFactorMantissa != 0 && oracle.getUnderlyingPrice(address(vToken)) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 oldCollateralFactorMantissa = market.collateralFactorMantissa;\\n        if (newCollateralFactorMantissa != oldCollateralFactorMantissa) {\\n            market.collateralFactorMantissa = newCollateralFactorMantissa;\\n            emit NewCollateralFactor(vToken, oldCollateralFactorMantissa, newCollateralFactorMantissa);\\n        }\\n\\n        uint256 oldLiquidationThresholdMantissa = market.liquidationThresholdMantissa;\\n        if (newLiquidationThresholdMantissa != oldLiquidationThresholdMantissa) {\\n            market.liquidationThresholdMantissa = newLiquidationThresholdMantissa;\\n            emit NewLiquidationThreshold(vToken, oldLiquidationThresholdMantissa, newLiquidationThresholdMantissa);\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets liquidationIncentive\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newLiquidationIncentiveMantissa New liquidationIncentive scaled by 1e18\\n     * @custom:event Emits NewLiquidationIncentive on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setLiquidationIncentive(uint256 newLiquidationIncentiveMantissa) external {\\n        require(newLiquidationIncentiveMantissa >= MANTISSA_ONE, \\\"liquidation incentive should be greater than 1e18\\\");\\n\\n        _checkAccessAllowed(\\\"setLiquidationIncentive(uint256)\\\");\\n\\n        // Save current value for use in log\\n        uint256 oldLiquidationIncentiveMantissa = liquidationIncentiveMantissa;\\n\\n        // Set liquidation incentive to new incentive\\n        liquidationIncentiveMantissa = newLiquidationIncentiveMantissa;\\n\\n        // Emit event with old incentive, new incentive\\n        emit NewLiquidationIncentive(oldLiquidationIncentiveMantissa, newLiquidationIncentiveMantissa);\\n    }\\n\\n    /**\\n     * @notice Add the market to the markets mapping and set it as listed\\n     * @dev Only callable by the PoolRegistry\\n     * @param vToken The address of the market (token) to list\\n     * @custom:error MarketAlreadyListed is thrown if the market is already listed in this pool\\n     * @custom:access Only PoolRegistry\\n     */\\n    function supportMarket(VToken vToken) external {\\n        _checkSenderIs(poolRegistry);\\n\\n        if (markets[address(vToken)].isListed) {\\n            revert MarketAlreadyListed(address(vToken));\\n        }\\n\\n        require(vToken.isVToken(), \\\"Comptroller: Invalid vToken\\\"); // Sanity check to make sure its really a VToken\\n\\n        Market storage newMarket = markets[address(vToken)];\\n        newMarket.isListed = true;\\n        newMarket.collateralFactorMantissa = 0;\\n        newMarket.liquidationThresholdMantissa = 0;\\n\\n        _addMarket(address(vToken));\\n\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            rewardsDistributors[i].initializeMarket(address(vToken));\\n        }\\n\\n        emit MarketSupported(vToken);\\n    }\\n\\n    /**\\n     * @notice Set the given borrow caps for the given vToken markets. Borrowing that brings total borrows to or above borrow cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A borrow cap of type(uint256).max corresponds to unlimited borrowing.\\n     * @dev Borrow caps smaller than the current total borrows are accepted. This way, new borrows will not be allowed\\n            until the total borrows amount goes below the new borrow cap\\n     * @param vTokens The addresses of the markets (tokens) to change the borrow caps for\\n     * @param newBorrowCaps The new borrow cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited borrowing.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketBorrowCaps(VToken[] calldata vTokens, uint256[] calldata newBorrowCaps) external {\\n        _checkAccessAllowed(\\\"setMarketBorrowCaps(address[],uint256[])\\\");\\n\\n        uint256 numMarkets = vTokens.length;\\n        uint256 numBorrowCaps = newBorrowCaps.length;\\n\\n        require(numMarkets != 0 && numMarkets == numBorrowCaps, \\\"invalid input\\\");\\n\\n        _ensureMaxLoops(numMarkets);\\n\\n        for (uint256 i; i < numMarkets; ++i) {\\n            borrowCaps[address(vTokens[i])] = newBorrowCaps[i];\\n            emit NewBorrowCap(vTokens[i], newBorrowCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given supply caps for the given vToken markets. Supply that brings total Supply to or above supply cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A supply cap of type(uint256).max corresponds to unlimited supply.\\n     * @dev Supply caps smaller than the current total supplies are accepted. This way, new supplies will not be allowed\\n            until the total supplies amount goes below the new supply cap\\n     * @param vTokens The addresses of the markets (tokens) to change the supply caps for\\n     * @param newSupplyCaps The new supply cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited supply.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketSupplyCaps(VToken[] calldata vTokens, uint256[] calldata newSupplyCaps) external {\\n        _checkAccessAllowed(\\\"setMarketSupplyCaps(address[],uint256[])\\\");\\n        uint256 vTokensCount = vTokens.length;\\n\\n        require(vTokensCount != 0, \\\"invalid number of markets\\\");\\n        require(vTokensCount == newSupplyCaps.length, \\\"invalid number of markets\\\");\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            supplyCaps[address(vTokens[i])] = newSupplyCaps[i];\\n            emit NewSupplyCap(vTokens[i], newSupplyCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Pause/unpause specified actions\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param marketsList Markets to pause/unpause the actions on\\n     * @param actionsList List of action ids to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setActionsPaused(VToken[] calldata marketsList, Action[] calldata actionsList, bool paused) external {\\n        _checkAccessAllowed(\\\"setActionsPaused(address[],uint256[],bool)\\\");\\n\\n        uint256 marketsCount = marketsList.length;\\n        uint256 actionsCount = actionsList.length;\\n\\n        _ensureMaxLoops(marketsCount * actionsCount);\\n\\n        for (uint256 marketIdx; marketIdx < marketsCount; ++marketIdx) {\\n            for (uint256 actionIdx; actionIdx < actionsCount; ++actionIdx) {\\n                _setActionPaused(address(marketsList[marketIdx]), actionsList[actionIdx], paused);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given collateral threshold for non-batch liquidations. Regular liquidations\\n     *   will fail if the collateral amount is less than this threshold. Liquidators should use batch\\n     *   operations like liquidateAccount or healAccount.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newMinLiquidatableCollateral The new min liquidatable collateral (in USD).\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMinLiquidatableCollateral(uint256 newMinLiquidatableCollateral) external {\\n        _checkAccessAllowed(\\\"setMinLiquidatableCollateral(uint256)\\\");\\n\\n        uint256 oldMinLiquidatableCollateral = minLiquidatableCollateral;\\n        minLiquidatableCollateral = newMinLiquidatableCollateral;\\n        emit NewMinLiquidatableCollateral(oldMinLiquidatableCollateral, newMinLiquidatableCollateral);\\n    }\\n\\n    /**\\n     * @notice Add a new RewardsDistributor and initialize it with all markets. We can add several RewardsDistributor\\n     * contracts with the same rewardToken, and there could be overlaping among them considering the last reward slot (block or second)\\n     * @dev Only callable by the admin\\n     * @param _rewardsDistributor Address of the RewardDistributor contract to add\\n     * @custom:access Only Governance\\n     * @custom:event Emits NewRewardsDistributor with distributor address\\n     */\\n    function addRewardsDistributor(RewardsDistributor _rewardsDistributor) external onlyOwner {\\n        require(!rewardsDistributorExists[address(_rewardsDistributor)], \\\"already exists\\\");\\n\\n        uint256 rewardsDistributorsLen = rewardsDistributors.length;\\n        _ensureMaxLoops(rewardsDistributorsLen + 1);\\n\\n        rewardsDistributors.push(_rewardsDistributor);\\n        rewardsDistributorExists[address(_rewardsDistributor)] = true;\\n\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            _rewardsDistributor.initializeMarket(address(allMarkets[i]));\\n        }\\n\\n        emit NewRewardsDistributor(address(_rewardsDistributor), address(_rewardsDistributor.rewardToken()));\\n    }\\n\\n    /**\\n     * @notice Sets a new price oracle for the Comptroller\\n     * @dev Only callable by the admin\\n     * @param newOracle Address of the new price oracle to set\\n     * @custom:event Emits NewPriceOracle on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when the new oracle address is zero\\n     */\\n    function setPriceOracle(ResilientOracleInterface newOracle) external onlyOwner {\\n        ensureNonzeroAddress(address(newOracle));\\n\\n        ResilientOracleInterface oldOracle = oracle;\\n        oracle = newOracle;\\n        emit NewPriceOracle(oldOracle, newOracle);\\n    }\\n\\n    /**\\n     * @notice Set the for loop iteration limit to avoid DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Sets the prime token contract for the comptroller\\n     * @param _prime Address of the Prime contract\\n     */\\n    function setPrimeToken(IPrime _prime) external onlyOwner {\\n        ensureNonzeroAddress(address(_prime));\\n\\n        emit NewPrimeToken(prime, _prime);\\n        prime = _prime;\\n    }\\n\\n    /**\\n     * @notice Enables forced liquidations for a market. If forced liquidation is enabled,\\n     * borrows in the market may be liquidated regardless of the account liquidity\\n     * @param vTokenBorrowed Borrowed vToken\\n     * @param enable Whether to enable forced liquidations\\n     */\\n    function setForcedLiquidation(address vTokenBorrowed, bool enable) external {\\n        _checkAccessAllowed(\\\"setForcedLiquidation(address,bool)\\\");\\n        ensureNonzeroAddress(vTokenBorrowed);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(vTokenBorrowed);\\n        }\\n\\n        isForcedLiquidationEnabled[vTokenBorrowed] = enable;\\n        emit IsForcedLiquidationEnabledUpdated(vTokenBorrowed, enable);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to liquidation threshold requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of liquidation threshold requirements,\\n     * @return shortfall Account shortfall below liquidation threshold requirements\\n     */\\n    function getAccountLiquidity(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getLiquidationThreshold);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to collateral requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of collateral requirements,\\n     * @return shortfall Account shortfall below collateral requirements\\n     */\\n    function getBorrowingPower(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getCollateralFactor);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine what the account liquidity would be if the given amounts were redeemed/borrowed\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Hypothetical account liquidity in excess of collateral requirements,\\n     * @return shortfall Hypothetical account shortfall below collateral requirements\\n     */\\n    function getHypotheticalAccountLiquidity(\\n        address account,\\n        address vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            account,\\n            VToken(vTokenModify),\\n            redeemTokens,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Return all of the markets\\n     * @dev The automatic getter may be used to access an individual market.\\n     * @return markets The list of market addresses\\n     */\\n    function getAllMarkets() external view override returns (VToken[] memory) {\\n        return allMarkets;\\n    }\\n\\n    /**\\n     * @notice Check if a market is marked as listed (active)\\n     * @param vToken vToken Address for the market to check\\n     * @return listed True if listed otherwise false\\n     */\\n    function isMarketListed(VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].isListed;\\n    }\\n\\n    /*** Assets You Are In ***/\\n\\n    /**\\n     * @notice Returns whether the given account is entered in a given market\\n     * @param account The address of the account to check\\n     * @param vToken The vToken to check\\n     * @return True if the account is in the market specified, otherwise false.\\n     */\\n    function checkMembership(address account, VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].accountMembership[account];\\n    }\\n\\n    /**\\n     * @notice Calculate number of tokens of collateral asset to seize given an underlying amount\\n     * @dev Used in liquidation (called in vToken.liquidateBorrowFresh)\\n     * @param vTokenBorrowed The address of the borrowed vToken\\n     * @param vTokenCollateral The address of the collateral vToken\\n     * @param actualRepayAmount The amount of vTokenBorrowed underlying to convert into vTokenCollateral tokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return tokensToSeize Number of vTokenCollateral tokens to be seized in a liquidation\\n     * @custom:error PriceError if the oracle returns an invalid price\\n     */\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 actualRepayAmount\\n    ) external view override returns (uint256 error, uint256 tokensToSeize) {\\n        /* Read oracle prices for borrowed and collateral markets */\\n        uint256 priceBorrowedMantissa = _safeGetUnderlyingPrice(VToken(vTokenBorrowed));\\n        uint256 priceCollateralMantissa = _safeGetUnderlyingPrice(VToken(vTokenCollateral));\\n\\n        /*\\n         * Get the exchange rate and calculate the number of collateral tokens to seize:\\n         *  seizeAmount = actualRepayAmount * liquidationIncentive * priceBorrowed / priceCollateral\\n         *  seizeTokens = seizeAmount / exchangeRate\\n         *   = actualRepayAmount * (liquidationIncentive * priceBorrowed) / (priceCollateral * exchangeRate)\\n         */\\n        uint256 exchangeRateMantissa = VToken(vTokenCollateral).exchangeRateStored(); // Note: reverts on error\\n        uint256 seizeTokens;\\n        Exp memory numerator;\\n        Exp memory denominator;\\n        Exp memory ratio;\\n\\n        numerator = mul_(Exp({ mantissa: liquidationIncentiveMantissa }), Exp({ mantissa: priceBorrowedMantissa }));\\n        denominator = mul_(Exp({ mantissa: priceCollateralMantissa }), Exp({ mantissa: exchangeRateMantissa }));\\n        ratio = div_(numerator, denominator);\\n\\n        seizeTokens = mul_ScalarTruncate(ratio, actualRepayAmount);\\n\\n        return (NO_ERROR, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Returns reward speed given a vToken\\n     * @param vToken The vToken to get the reward speeds for\\n     * @return rewardSpeeds Array of total supply and borrow speeds and reward token for all reward distributors\\n     */\\n    function getRewardsByMarket(address vToken) external view returns (RewardSpeeds[] memory rewardSpeeds) {\\n        uint256 rewardsDistributorsLength = rewardsDistributors.length;\\n        rewardSpeeds = new RewardSpeeds[](rewardsDistributorsLength);\\n        for (uint256 i; i < rewardsDistributorsLength; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            address rewardToken = address(rewardsDistributor.rewardToken());\\n            rewardSpeeds[i] = RewardSpeeds({\\n                rewardToken: rewardToken,\\n                supplySpeed: rewardsDistributor.rewardTokenSupplySpeeds(vToken),\\n                borrowSpeed: rewardsDistributor.rewardTokenBorrowSpeeds(vToken)\\n            });\\n        }\\n        return rewardSpeeds;\\n    }\\n\\n    /**\\n     * @notice Return all reward distributors for this pool\\n     * @return Array of RewardDistributor addresses\\n     */\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory) {\\n        return rewardsDistributors;\\n    }\\n\\n    /**\\n     * @notice A marker method that returns true for a valid Comptroller contract\\n     * @return Always true\\n     */\\n    function isComptroller() external pure override returns (bool) {\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Update the prices of all the tokens associated with the provided account\\n     * @param account Address of the account to get associated tokens with\\n     */\\n    function updatePrices(address account) public {\\n        VToken[] memory vTokens = getAssetsIn(account);\\n        uint256 vTokensCount = vTokens.length;\\n\\n        ResilientOracleInterface oracle_ = oracle;\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            oracle_.updatePrice(address(vTokens[i]));\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if a certain action is paused on a market\\n     * @param market vToken address\\n     * @param action Action to check\\n     * @return paused True if the action is paused otherwise false\\n     */\\n    function actionPaused(address market, Action action) public view returns (bool) {\\n        return _actionPaused[market][action];\\n    }\\n\\n    /**\\n     * @notice Returns the assets an account has entered\\n     * @param account The address of the account to pull assets for\\n     * @return A list with the assets the account has entered\\n     */\\n    function getAssetsIn(address account) public view returns (VToken[] memory) {\\n        uint256 len;\\n        VToken[] memory _accountAssets = accountAssets[account];\\n        uint256 _accountAssetsLength = _accountAssets.length;\\n\\n        VToken[] memory assetsIn = new VToken[](_accountAssetsLength);\\n\\n        for (uint256 i; i < _accountAssetsLength; ++i) {\\n            Market storage market = markets[address(_accountAssets[i])];\\n            if (market.isListed) {\\n                assetsIn[len] = _accountAssets[i];\\n                ++len;\\n            }\\n        }\\n\\n        assembly {\\n            mstore(assetsIn, len)\\n        }\\n\\n        return assetsIn;\\n    }\\n\\n    /**\\n     * @notice Add the market to the borrower's \\\"assets in\\\" for liquidity calculations\\n     * @param vToken The market to enter\\n     * @param borrower The address of the account to modify\\n     */\\n    function _addToMarket(VToken vToken, address borrower) internal {\\n        _checkActionPauseState(address(vToken), Action.ENTER_MARKET);\\n        Market storage marketToJoin = markets[address(vToken)];\\n\\n        if (!marketToJoin.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (marketToJoin.accountMembership[borrower]) {\\n            // already joined\\n            return;\\n        }\\n\\n        // survived the gauntlet, add to list\\n        // NOTE: we store these somewhat redundantly as a significant optimization\\n        //  this avoids having to iterate through the list for the most common use cases\\n        //  that is, only when we need to perform liquidity checks\\n        //  and not whenever we want to check if an account is in a particular market\\n        marketToJoin.accountMembership[borrower] = true;\\n        accountAssets[borrower].push(vToken);\\n\\n        emit MarketEntered(vToken, borrower);\\n    }\\n\\n    /**\\n     * @notice Internal function to validate that a market hasn't already been added\\n     * and if it hasn't adds it\\n     * @param vToken The market to support\\n     */\\n    function _addMarket(address vToken) internal {\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            if (allMarkets[i] == VToken(vToken)) {\\n                revert MarketAlreadyListed(vToken);\\n            }\\n        }\\n        allMarkets.push(VToken(vToken));\\n        marketsCount = allMarkets.length;\\n        _ensureMaxLoops(marketsCount);\\n    }\\n\\n    /**\\n     * @dev Pause/unpause an action on a market\\n     * @param market Market to pause/unpause the action on\\n     * @param action Action id to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     */\\n    function _setActionPaused(address market, Action action, bool paused) internal {\\n        require(markets[market].isListed, \\\"cannot pause a market that is not listed\\\");\\n        _actionPaused[market][action] = paused;\\n        emit ActionPausedMarket(VToken(market), action, paused);\\n    }\\n\\n    /**\\n     * @dev Internal function to check that vTokens can be safely redeemed for the underlying asset.\\n     * @param vToken Address of the vTokens to redeem\\n     * @param redeemer Account redeeming the tokens\\n     * @param redeemTokens The number of tokens to redeem\\n     */\\n    function _checkRedeemAllowed(address vToken, address redeemer, uint256 redeemTokens) internal {\\n        Market storage market = markets[vToken];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        /* If the redeemer is not 'in' the market, then we can bypass the liquidity check */\\n        if (!market.accountMembership[redeemer]) {\\n            return;\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(redeemer);\\n\\n        /* Otherwise, perform a hypothetical liquidity check to guard against shortfall */\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            redeemer,\\n            VToken(vToken),\\n            redeemTokens,\\n            0,\\n            _getCollateralFactor\\n        );\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n    }\\n\\n    /**\\n     * @notice Get the total collateral, weighted collateral, borrow balance, liquidity, shortfall\\n     * @param account The account to get the snapshot for\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n     *  liquidation threshold. Accepts the address of the vToken and returns the weight as Exp.\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getCurrentLiquiditySnapshot(\\n        address account,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        return _getHypotheticalLiquiditySnapshot(account, VToken(address(0)), 0, 0, weight);\\n    }\\n\\n    /**\\n     * @notice Determine what the supply/borrow balances would be if the given amounts were redeemed/borrowed\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n         liquidation threshold. Accepts the address of the VToken and returns the weight\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getHypotheticalLiquiditySnapshot(\\n        address account,\\n        VToken vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        // For each asset the account is in\\n        VToken[] memory assets = getAssetsIn(account);\\n        uint256 assetsCount = assets.length;\\n\\n        for (uint256 i; i < assetsCount; ++i) {\\n            VToken asset = assets[i];\\n\\n            // Read the balances and exchange rate from the vToken\\n            (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) = _safeGetAccountSnapshot(\\n                asset,\\n                account\\n            );\\n\\n            // Get the normalized price of the asset\\n            Exp memory oraclePrice = Exp({ mantissa: _safeGetUnderlyingPrice(asset) });\\n\\n            // Pre-compute conversion factors from vTokens -> usd\\n            Exp memory vTokenPrice = mul_(Exp({ mantissa: exchangeRateMantissa }), oraclePrice);\\n            Exp memory weightedVTokenPrice = mul_(weight(asset), vTokenPrice);\\n\\n            // weightedCollateral += weightedVTokenPrice * vTokenBalance\\n            snapshot.weightedCollateral = mul_ScalarTruncateAddUInt(\\n                weightedVTokenPrice,\\n                vTokenBalance,\\n                snapshot.weightedCollateral\\n            );\\n\\n            // totalCollateral += vTokenPrice * vTokenBalance\\n            snapshot.totalCollateral = mul_ScalarTruncateAddUInt(vTokenPrice, vTokenBalance, snapshot.totalCollateral);\\n\\n            // borrows += oraclePrice * borrowBalance\\n            snapshot.borrows = mul_ScalarTruncateAddUInt(oraclePrice, borrowBalance, snapshot.borrows);\\n\\n            // Calculate effects of interacting with vTokenModify\\n            if (asset == vTokenModify) {\\n                // redeem effect\\n                // effects += tokensToDenom * redeemTokens\\n                snapshot.effects = mul_ScalarTruncateAddUInt(weightedVTokenPrice, redeemTokens, snapshot.effects);\\n\\n                // borrow effect\\n                // effects += oraclePrice * borrowAmount\\n                snapshot.effects = mul_ScalarTruncateAddUInt(oraclePrice, borrowAmount, snapshot.effects);\\n            }\\n        }\\n\\n        uint256 borrowPlusEffects = snapshot.borrows + snapshot.effects;\\n        // These are safe, as the underflow condition is checked first\\n        unchecked {\\n            if (snapshot.weightedCollateral > borrowPlusEffects) {\\n                snapshot.liquidity = snapshot.weightedCollateral - borrowPlusEffects;\\n                snapshot.shortfall = 0;\\n            } else {\\n                snapshot.liquidity = 0;\\n                snapshot.shortfall = borrowPlusEffects - snapshot.weightedCollateral;\\n            }\\n        }\\n\\n        return snapshot;\\n    }\\n\\n    /**\\n     * @dev Retrieves price from oracle for an asset and checks it is nonzero\\n     * @param asset Address for asset to query price\\n     * @return Underlying price\\n     */\\n    function _safeGetUnderlyingPrice(VToken asset) internal view returns (uint256) {\\n        uint256 oraclePriceMantissa = oracle.getUnderlyingPrice(address(asset));\\n        if (oraclePriceMantissa == 0) {\\n            revert PriceError(address(asset));\\n        }\\n        return oraclePriceMantissa;\\n    }\\n\\n    /**\\n     * @dev Return collateral factor for a market\\n     * @param asset Address for asset\\n     * @return Collateral factor as exponential\\n     */\\n    function _getCollateralFactor(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].collateralFactorMantissa });\\n    }\\n\\n    /**\\n     * @dev Retrieves liquidation threshold for a market as an exponential\\n     * @param asset Address for asset to liquidation threshold\\n     * @return Liquidation threshold as exponential\\n     */\\n    function _getLiquidationThreshold(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].liquidationThresholdMantissa });\\n    }\\n\\n    /**\\n     * @dev Returns supply and borrow balances of user in vToken, reverts on failure\\n     * @param vToken Market to query\\n     * @param user Account address\\n     * @return vTokenBalance Balance of vTokens, the same as vToken.balanceOf(user)\\n     * @return borrowBalance Borrowed amount, including the interest\\n     * @return exchangeRateMantissa Stored exchange rate\\n     */\\n    function _safeGetAccountSnapshot(\\n        VToken vToken,\\n        address user\\n    ) internal view returns (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) {\\n        uint256 err;\\n        (err, vTokenBalance, borrowBalance, exchangeRateMantissa) = vToken.getAccountSnapshot(user);\\n        if (err != 0) {\\n            revert SnapshotError(address(vToken), user);\\n        }\\n        return (vTokenBalance, borrowBalance, exchangeRateMantissa);\\n    }\\n\\n    /// @notice Reverts if the call is not from expectedSender\\n    /// @param expectedSender Expected transaction sender\\n    function _checkSenderIs(address expectedSender) internal view {\\n        if (msg.sender != expectedSender) {\\n            revert UnexpectedSender(expectedSender, msg.sender);\\n        }\\n    }\\n\\n    /// @notice Reverts if a certain action is paused on a market\\n    /// @param market Market to check\\n    /// @param action Action to check\\n    function _checkActionPauseState(address market, Action action) private view {\\n        if (actionPaused(market, action)) {\\n            revert ActionPaused(market, action);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x7c6e1c6264e4681f82a9ac1bcd9155197a930033291ee5561ad97a56006f5e9c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\n\\nenum Action {\\n    MINT,\\n    REDEEM,\\n    BORROW,\\n    REPAY,\\n    SEIZE,\\n    LIQUIDATE,\\n    TRANSFER,\\n    ENTER_MARKET,\\n    EXIT_MARKET\\n}\\n\\n/**\\n * @title ComptrollerInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract.\\n */\\ninterface ComptrollerInterface {\\n    /*** Assets You Are In ***/\\n\\n    function enterMarkets(address[] calldata vTokens) external returns (uint256[] memory);\\n\\n    function exitMarket(address vToken) external returns (uint256);\\n\\n    /*** Policy Hooks ***/\\n\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external;\\n\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external;\\n\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external;\\n\\n    function preRepayHook(address vToken, address borrower) external;\\n\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external;\\n\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower\\n    ) external;\\n\\n    function borrowVerify(address vToken, address borrower, uint borrowAmount) external;\\n\\n    function mintVerify(address vToken, address minter, uint mintAmount, uint mintTokens) external;\\n\\n    function redeemVerify(address vToken, address redeemer, uint redeemAmount, uint redeemTokens) external;\\n\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer,\\n        address borrower,\\n        uint repayAmount,\\n        uint borrowerIndex\\n    ) external;\\n\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address liquidator,\\n        address borrower,\\n        uint repayAmount,\\n        uint seizeTokens\\n    ) external;\\n\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower,\\n        uint seizeTokens\\n    ) external;\\n\\n    function transferVerify(address vToken, address src, address dst, uint transferTokens) external;\\n\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external;\\n\\n    function isComptroller() external view returns (bool);\\n\\n    /*** Liquidity/Liquidation Calculations ***/\\n\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 repayAmount\\n    ) external view returns (uint256, uint256);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function actionPaused(address market, Action action) external view returns (bool);\\n}\\n\\n/**\\n * @title ComptrollerViewInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract, including only some util view functions.\\n */\\ninterface ComptrollerViewInterface {\\n    function markets(address) external view returns (bool, uint256);\\n\\n    function oracle() external view returns (ResilientOracleInterface);\\n\\n    function getAssetsIn(address) external view returns (VToken[] memory);\\n\\n    function closeFactorMantissa() external view returns (uint256);\\n\\n    function liquidationIncentiveMantissa() external view returns (uint256);\\n\\n    function minLiquidatableCollateral() external view returns (uint256);\\n\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function borrowCaps(address) external view returns (uint256);\\n\\n    function supplyCaps(address) external view returns (uint256);\\n\\n    function approvedDelegates(address user, address delegate) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xcbf7f9977472650c61345b7cbde23e81f626e1f8863bab4c6ce3dacfc7604919\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\nimport { Action } from \\\"./ComptrollerInterface.sol\\\";\\n\\n/**\\n * @title ComptrollerStorage\\n * @author Venus\\n * @notice Storage layout for the `Comptroller` contract.\\n */\\ncontract ComptrollerStorage {\\n    struct LiquidationOrder {\\n        VToken vTokenCollateral;\\n        VToken vTokenBorrowed;\\n        uint256 repayAmount;\\n    }\\n\\n    struct AccountLiquiditySnapshot {\\n        uint256 totalCollateral;\\n        uint256 weightedCollateral;\\n        uint256 borrows;\\n        uint256 effects;\\n        uint256 liquidity;\\n        uint256 shortfall;\\n    }\\n\\n    struct RewardSpeeds {\\n        address rewardToken;\\n        uint256 supplySpeed;\\n        uint256 borrowSpeed;\\n    }\\n\\n    struct Market {\\n        // Whether or not this market is listed\\n        bool isListed;\\n        //  Multiplier representing the most one can borrow against their collateral in this market.\\n        //  For instance, 0.9 to allow borrowing 90% of collateral value.\\n        //  Must be between 0 and 1, and stored as a mantissa.\\n        uint256 collateralFactorMantissa;\\n        //  Multiplier representing the collateralization after which the borrow is eligible\\n        //  for liquidation. For instance, 0.8 liquidate when the borrow is 80% of collateral\\n        //  value. Must be between 0 and collateral factor, stored as a mantissa.\\n        uint256 liquidationThresholdMantissa;\\n        // Per-market mapping of \\\"accounts in this asset\\\"\\n        mapping(address => bool) accountMembership;\\n    }\\n\\n    /**\\n     * @notice Oracle which gives the price of any given asset\\n     */\\n    ResilientOracleInterface public oracle;\\n\\n    /**\\n     * @notice Multiplier used to calculate the maximum repayAmount when liquidating a borrow\\n     */\\n    uint256 public closeFactorMantissa;\\n\\n    /**\\n     * @notice Multiplier representing the discount on collateral that a liquidator receives\\n     */\\n    uint256 public liquidationIncentiveMantissa;\\n\\n    /**\\n     * @notice Per-account mapping of \\\"assets you are in\\\"\\n     */\\n    mapping(address => VToken[]) public accountAssets;\\n\\n    /**\\n     * @notice Official mapping of vTokens -> Market metadata\\n     * @dev Used e.g. to determine if a market is supported\\n     */\\n    mapping(address => Market) public markets;\\n\\n    /// @notice A list of all markets\\n    VToken[] public allMarkets;\\n\\n    /// @notice Borrow caps enforced by borrowAllowed for each vToken address. Defaults to zero which restricts borrowing.\\n    mapping(address => uint256) public borrowCaps;\\n\\n    /// @notice Minimal collateral required for regular (non-batch) liquidations\\n    uint256 public minLiquidatableCollateral;\\n\\n    /// @notice Supply caps enforced by mintAllowed for each vToken address. Defaults to zero which corresponds to minting not allowed\\n    mapping(address => uint256) public supplyCaps;\\n\\n    /// @notice True if a certain action is paused on a certain market\\n    mapping(address => mapping(Action => bool)) internal _actionPaused;\\n\\n    // List of Reward Distributors added\\n    RewardsDistributor[] internal rewardsDistributors;\\n\\n    // Used to check if rewards distributor is added\\n    mapping(address => bool) internal rewardsDistributorExists;\\n\\n    /// @notice Flag indicating whether forced liquidation enabled for a market\\n    mapping(address => bool) public isForcedLiquidationEnabled;\\n\\n    uint256 internal constant NO_ERROR = 0;\\n\\n    // closeFactorMantissa must be strictly greater than this value\\n    uint256 internal constant MIN_CLOSE_FACTOR_MANTISSA = 0.05e18; // 0.05\\n\\n    // closeFactorMantissa must not exceed this value\\n    uint256 internal constant MAX_CLOSE_FACTOR_MANTISSA = 0.9e18; // 0.9\\n\\n    // No collateralFactorMantissa may exceed this value\\n    uint256 internal constant MAX_COLLATERAL_FACTOR_MANTISSA = 0.95e18; // 0.95\\n\\n    /// Prime token address\\n    IPrime public prime;\\n\\n    /// @notice Whether the delegate is allowed to borrow or redeem on behalf of the user\\n    //mapping(address user => mapping (address delegate => bool approved)) public approvedDelegates;\\n    mapping(address => mapping(address => bool)) public approvedDelegates;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4df44cb65ac152bac2be4b4545430e703005a74a55b72e144100b16421bd8bfd\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title TokenErrorReporter\\n * @author Venus\\n * @notice Errors that can be thrown by the `VToken` contract.\\n */\\ncontract TokenErrorReporter {\\n    uint256 public constant NO_ERROR = 0; // support legacy return codes\\n\\n    error TransferNotAllowed();\\n\\n    error MintFreshnessCheck();\\n\\n    error RedeemFreshnessCheck();\\n    error RedeemTransferOutNotPossible();\\n\\n    error BorrowFreshnessCheck();\\n    error BorrowCashNotAvailable();\\n    error DelegateNotApproved();\\n\\n    error RepayBorrowFreshnessCheck();\\n\\n    error HealBorrowUnauthorized();\\n    error ForceLiquidateBorrowUnauthorized();\\n\\n    error LiquidateFreshnessCheck();\\n    error LiquidateCollateralFreshnessCheck();\\n    error LiquidateAccrueCollateralInterestFailed(uint256 errorCode);\\n    error LiquidateLiquidatorIsBorrower();\\n    error LiquidateCloseAmountIsZero();\\n    error LiquidateCloseAmountIsUintMax();\\n\\n    error LiquidateSeizeLiquidatorIsBorrower();\\n\\n    error ProtocolSeizeShareTooBig();\\n\\n    error SetReserveFactorFreshCheck();\\n    error SetReserveFactorBoundsCheck();\\n\\n    error AddReservesFactorFreshCheck(uint256 actualAddAmount);\\n\\n    error ReduceReservesFreshCheck();\\n    error ReduceReservesCashNotAvailable();\\n    error ReduceReservesCashValidation();\\n\\n    error SetInterestRateModelFreshCheck();\\n}\\n\",\"keccak256\":\"0x7a7ced1caaac2d9242659ebd50b99f308c725ce958ac9e11f7ada404b1d97a7b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { EXP_SCALE as EXP_SCALE_, MANTISSA_ONE as MANTISSA_ONE_ } from \\\"./lib/constants.sol\\\";\\n\\n/**\\n * @title Exponential module for storing fixed-precision decimals\\n * @author Compound\\n * @notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.\\n *         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:\\n *         `Exp({mantissa: 5100000000000000000})`.\\n */\\ncontract ExponentialNoError {\\n    struct Exp {\\n        uint256 mantissa;\\n    }\\n\\n    struct Double {\\n        uint256 mantissa;\\n    }\\n\\n    uint256 internal constant EXP_SCALE = EXP_SCALE_;\\n    uint256 internal constant DOUBLE_SCALE = 1e36;\\n    uint256 internal constant HALF_EXP_SCALE = EXP_SCALE / 2;\\n    uint256 internal constant MANTISSA_ONE = MANTISSA_ONE_;\\n\\n    /**\\n     * @dev Truncates the given exp to a whole number value.\\n     *      For example, truncate(Exp{mantissa: 15 * EXP_SCALE}) = 15\\n     */\\n    function truncate(Exp memory exp) internal pure returns (uint256) {\\n        // Note: We are not using careful math here as we're performing a division that cannot fail\\n        return exp.mantissa / EXP_SCALE;\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, then truncate to return an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncate(Exp memory a, uint256 scalar) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return truncate(product);\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncateAddUInt(Exp memory a, uint256 scalar, uint256 addend) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return add_(truncate(product), addend);\\n    }\\n\\n    /**\\n     * @dev Checks if first Exp is less than second Exp.\\n     */\\n    function lessThanExp(Exp memory left, Exp memory right) internal pure returns (bool) {\\n        return left.mantissa < right.mantissa;\\n    }\\n\\n    function safe224(uint256 n, string memory errorMessage) internal pure returns (uint224) {\\n        require(n <= type(uint224).max, errorMessage);\\n        return uint224(n);\\n    }\\n\\n    function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) {\\n        require(n <= type(uint32).max, errorMessage);\\n        return uint32(n);\\n    }\\n\\n    function add_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a + b;\\n    }\\n\\n    function sub_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a - b;\\n    }\\n\\n    function mul_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b.mantissa) / EXP_SCALE });\\n    }\\n\\n    function mul_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / EXP_SCALE;\\n    }\\n\\n    function mul_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b.mantissa) / DOUBLE_SCALE });\\n    }\\n\\n    function mul_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / DOUBLE_SCALE;\\n    }\\n\\n    function mul_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a * b;\\n    }\\n\\n    function div_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(mul_(a.mantissa, EXP_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, EXP_SCALE), b.mantissa);\\n    }\\n\\n    function div_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a.mantissa, DOUBLE_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, DOUBLE_SCALE), b.mantissa);\\n    }\\n\\n    function div_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a / b;\\n    }\\n\\n    function fraction(uint256 a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a, DOUBLE_SCALE), b) });\\n    }\\n}\\n\",\"keccak256\":\"0x8afbe8a24fe3539c124e718681ed3dcebd24c40dd53095786c0155998213b9b0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title Compound's InterestRateModel Interface\\n * @author Compound\\n */\\nabstract contract InterestRateModel {\\n    /**\\n     * @notice Calculates the current borrow interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getBorrowRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Calculates the current supply interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param reserveFactorMantissa The current reserve factor the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getSupplyRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 reserveFactorMantissa,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is an InterestRateModel contract (for inspection)\\n     * @return Always true\\n     */\\n    function isInterestRateModel() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0xc4fda1ab75ebe4b187b707c4f10c58780f343cf343c537f641dc75d3cd28ab51\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title MaxLoopsLimitHelper\\n * @author Venus\\n * @notice Abstract contract used to avoid collection with too many items that would generate gas errors and DoS.\\n */\\nabstract contract MaxLoopsLimitHelper {\\n    // Limit for the loops to avoid the DOS\\n    uint256 public maxLoopsLimit;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when max loops limit is set\\n    event MaxLoopsLimitUpdated(uint256 oldMaxLoopsLimit, uint256 newmaxLoopsLimit);\\n\\n    /// @notice Thrown an error on maxLoopsLimit exceeds for any loop\\n    error MaxLoopsLimitExceeded(uint256 loopsLimit, uint256 requiredLoops);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function _setMaxLoopsLimit(uint256 limit) internal {\\n        require(limit > maxLoopsLimit, \\\"Comptroller: Invalid maxLoopsLimit\\\");\\n\\n        uint256 oldMaxLoopsLimit = maxLoopsLimit;\\n        maxLoopsLimit = limit;\\n\\n        emit MaxLoopsLimitUpdated(oldMaxLoopsLimit, limit);\\n    }\\n\\n    /**\\n     * @notice Compare the maxLoopsLimit with number of the times loop iterate\\n     * @param len Length of the loops iterate\\n     * @custom:error MaxLoopsLimitExceeded error is thrown when loops length exceeds maxLoopsLimit\\n     */\\n    function _ensureMaxLoops(uint256 len) internal view {\\n        if (len > maxLoopsLimit) {\\n            revert MaxLoopsLimitExceeded(maxLoopsLimit, len);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x4c25e30635485d162177effa384eee51768b0141a567a0da16ff6ad673274166\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\n\\nimport { ExponentialNoError } from \\\"../ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"../VToken.sol\\\";\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"../MaxLoopsLimitHelper.sol\\\";\\nimport { RewardsDistributorStorage } from \\\"./RewardsDistributorStorage.sol\\\";\\n\\n/**\\n * @title `RewardsDistributor`\\n * @author Venus\\n * @notice Contract used to configure, track and distribute rewards to users based on their actions (borrows and supplies) in the protocol.\\n * Users can receive additional rewards through a `RewardsDistributor`. Each `RewardsDistributor` proxy is initialized with a specific reward\\n * token and `Comptroller`, which can then distribute the reward token to users that supply or borrow in the associated pool.\\n * Authorized users can set the reward token borrow and supply speeds for each market in the pool. This sets a fixed amount of reward\\n * token to be released each slot (block or second) for borrowers and suppliers, which is distributed based on a user\\u2019s percentage of the borrows or supplies\\n * respectively. The owner can also set up reward distributions to contributor addresses (distinct from suppliers and borrowers) by setting\\n * their contributor reward token speed, which similarly allocates a fixed amount of reward token per slot (block or second).\\n *\\n * The owner has the ability to transfer any amount of reward tokens held by the contract to any other address. Rewards are not distributed\\n * automatically and must be claimed by a user calling `claimRewardToken()`. Users should be aware that it is up to the owner and other centralized\\n * entities to ensure that the `RewardsDistributor` holds enough tokens to distribute the accumulated rewards of users and contributors.\\n */\\ncontract RewardsDistributor is\\n    ExponentialNoError,\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    MaxLoopsLimitHelper,\\n    RewardsDistributorStorage,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    /// @notice The initial REWARD TOKEN index for a market\\n    uint224 public constant INITIAL_INDEX = 1e36;\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a supplier\\n    event DistributedSupplierRewardToken(\\n        VToken indexed vToken,\\n        address indexed supplier,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenSupplyIndex\\n    );\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a borrower\\n    event DistributedBorrowerRewardToken(\\n        VToken indexed vToken,\\n        address indexed borrower,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenBorrowIndex\\n    );\\n\\n    /// @notice Emitted when a new supply-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenSupplySpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when a new borrow-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenBorrowSpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when REWARD TOKEN is granted by admin\\n    event RewardTokenGranted(address indexed recipient, uint256 amount);\\n\\n    /// @notice Emitted when a new REWARD TOKEN speed is set for a contributor\\n    event ContributorRewardTokenSpeedUpdated(address indexed contributor, uint256 newSpeed);\\n\\n    /// @notice Emitted when a market is initialized\\n    event MarketInitialized(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token supply index is updated\\n    event RewardTokenSupplyIndexUpdated(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token borrow index is updated\\n    event RewardTokenBorrowIndexUpdated(address indexed vToken, Exp marketBorrowIndex);\\n\\n    /// @notice Emitted when a reward for contributor is updated\\n    event ContributorRewardsUpdated(address indexed contributor, uint256 rewardAccrued);\\n\\n    /// @notice Emitted when a reward token last rewarding block for supply is updated\\n    event SupplyLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding block for borrow is updated\\n    event BorrowLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for supply is updated\\n    event SupplyLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for borrow is updated\\n    event BorrowLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    modifier onlyComptroller() {\\n        require(address(comptroller) == msg.sender, \\\"Only comptroller can call this function\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice RewardsDistributor initializer\\n     * @dev Initializes the deployer to owner\\n     * @param comptroller_ Comptroller to attach the reward distributor to\\n     * @param rewardToken_ Reward token to distribute\\n     * @param loopsLimit_ Maximum number of iterations for the loops in this contract\\n     * @param accessControlManager_ AccessControlManager contract address\\n     */\\n    function initialize(\\n        Comptroller comptroller_,\\n        IERC20Upgradeable rewardToken_,\\n        uint256 loopsLimit_,\\n        address accessControlManager_\\n    ) external initializer {\\n        comptroller = comptroller_;\\n        rewardToken = rewardToken_;\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n\\n        _setMaxLoopsLimit(loopsLimit_);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken\\n     * @param vToken The address of the vToken to be initialized\\n     * @custom:event MarketInitialized emits on success\\n     * @custom:access Only Comptroller\\n     */\\n    function initializeMarket(address vToken) external onlyComptroller {\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        isTimeBased\\n            ? _initializeMarketTimestampBased(vToken, blockNumberOrTimestamp)\\n            : _initializeMarketBlockBased(vToken, safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\"));\\n\\n        emit MarketInitialized(vToken);\\n    }\\n\\n    /*** Reward Token Distribution ***/\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them\\n     *         Borrowers will begin to accrue after the first interaction with the protocol.\\n     * @dev This function should only be called when the user has a borrow position in the market\\n     *      (e.g. Comptroller.preBorrowHook, and Comptroller.preRepayHook)\\n     *      We avoid an external call to check if they are in the market to save gas because this function is called in many places\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function distributeBorrowerRewardToken(\\n        address vToken,\\n        address borrower,\\n        Exp memory marketBorrowIndex\\n    ) external onlyComptroller {\\n        _distributeBorrowerRewardToken(vToken, borrower, marketBorrowIndex);\\n    }\\n\\n    function updateRewardTokenSupplyIndex(address vToken) external onlyComptroller {\\n        _updateRewardTokenSupplyIndex(vToken);\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the recipient\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all\\n     * @param recipient The address of the recipient to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     */\\n    function grantRewardToken(address recipient, uint256 amount) external onlyOwner {\\n        uint256 amountLeft = _grantRewardToken(recipient, amount);\\n        require(amountLeft == 0, \\\"insufficient rewardToken for grant\\\");\\n        emit RewardTokenGranted(recipient, amount);\\n    }\\n\\n    function updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) external onlyComptroller {\\n        _updateRewardTokenBorrowIndex(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN borrow and supply speeds for the specified markets\\n     * @param vTokens The markets whose REWARD TOKEN speed to update\\n     * @param supplySpeeds New supply-side REWARD TOKEN speed for the corresponding market\\n     * @param borrowSpeeds New borrow-side REWARD TOKEN speed for the corresponding market\\n     */\\n    function setRewardTokenSpeeds(\\n        VToken[] memory vTokens,\\n        uint256[] memory supplySpeeds,\\n        uint256[] memory borrowSpeeds\\n    ) external {\\n        _checkAccessAllowed(\\\"setRewardTokenSpeeds(address[],uint256[],uint256[])\\\");\\n        uint256 numTokens = vTokens.length;\\n        require(numTokens == supplySpeeds.length && numTokens == borrowSpeeds.length, \\\"invalid setRewardTokenSpeeds\\\");\\n\\n        for (uint256 i; i < numTokens; ++i) {\\n            _setRewardTokenSpeed(vTokens[i], supplySpeeds[i], borrowSpeeds[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for the specified markets, used when contract is block based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlocks New supply-side REWARD TOKEN last rewarding block for the corresponding market\\n     * @param borrowLastRewardingBlocks New borrow-side REWARD TOKEN last rewarding block for the corresponding market\\n     */\\n    function setLastRewardingBlocks(\\n        VToken[] calldata vTokens,\\n        uint32[] calldata supplyLastRewardingBlocks,\\n        uint32[] calldata borrowLastRewardingBlocks\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlocks(address[],uint32[],uint32[])\\\");\\n        require(!isTimeBased, \\\"Block-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlocks.length && numTokens == borrowLastRewardingBlocks.length,\\n            \\\"RewardsDistributor::setLastRewardingBlocks invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlock(vTokens[i], supplyLastRewardingBlocks[i], borrowLastRewardingBlocks[i]);\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block timestamp for the specified markets, used when contract is time based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlockTimestamps New supply-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     * @param borrowLastRewardingBlockTimestamps New borrow-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     */\\n    function setLastRewardingBlockTimestamps(\\n        VToken[] calldata vTokens,\\n        uint256[] calldata supplyLastRewardingBlockTimestamps,\\n        uint256[] calldata borrowLastRewardingBlockTimestamps\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])\\\");\\n        require(isTimeBased, \\\"Time-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlockTimestamps.length &&\\n                numTokens == borrowLastRewardingBlockTimestamps.length,\\n            \\\"RewardsDistributor::setLastRewardingBlockTimestamps invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlockTimestamp(\\n                vTokens[i],\\n                supplyLastRewardingBlockTimestamps[i],\\n                borrowLastRewardingBlockTimestamps[i]\\n            );\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single contributor\\n     * @param contributor The contributor whose REWARD TOKEN speed to update\\n     * @param rewardTokenSpeed New REWARD TOKEN speed for contributor\\n     */\\n    function setContributorRewardTokenSpeed(address contributor, uint256 rewardTokenSpeed) external onlyOwner {\\n        // note that REWARD TOKEN speed could be set to 0 to halt liquidity rewards for a contributor\\n        updateContributorRewards(contributor);\\n        if (rewardTokenSpeed == 0) {\\n            // release storage\\n            delete lastContributorBlock[contributor];\\n        } else {\\n            lastContributorBlock[contributor] = getBlockNumberOrTimestamp();\\n        }\\n        rewardTokenContributorSpeeds[contributor] = rewardTokenSpeed;\\n\\n        emit ContributorRewardTokenSpeedUpdated(contributor, rewardTokenSpeed);\\n    }\\n\\n    function distributeSupplierRewardToken(address vToken, address supplier) external onlyComptroller {\\n        _distributeSupplierRewardToken(vToken, supplier);\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in all markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     */\\n    function claimRewardToken(address holder) external {\\n        return claimRewardToken(holder, comptroller.getAllMarkets());\\n    }\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Calculate additional accrued REWARD TOKEN for a contributor since last accrual\\n     * @param contributor The address to calculate contributor rewards for\\n     */\\n    function updateContributorRewards(address contributor) public {\\n        uint256 rewardTokenSpeed = rewardTokenContributorSpeeds[contributor];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n        uint256 deltaBlocksOrTimestamp = sub_(blockNumberOrTimestamp, lastContributorBlock[contributor]);\\n        if (deltaBlocksOrTimestamp > 0 && rewardTokenSpeed > 0) {\\n            uint256 newAccrued = mul_(deltaBlocksOrTimestamp, rewardTokenSpeed);\\n            uint256 contributorAccrued = add_(rewardTokenAccrued[contributor], newAccrued);\\n\\n            rewardTokenAccrued[contributor] = contributorAccrued;\\n            lastContributorBlock[contributor] = blockNumberOrTimestamp;\\n\\n            emit ContributorRewardsUpdated(contributor, rewardTokenAccrued[contributor]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in the specified markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     * @param vTokens The list of markets to claim REWARD TOKEN in\\n     */\\n    function claimRewardToken(address holder, VToken[] memory vTokens) public {\\n        uint256 vTokensCount = vTokens.length;\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            VToken vToken = vTokens[i];\\n            require(comptroller.isMarketListed(vToken), \\\"market must be listed\\\");\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n            _distributeBorrowerRewardToken(address(vToken), holder, borrowIndex);\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n            _distributeSupplierRewardToken(address(vToken), holder);\\n        }\\n        rewardTokenAccrued[holder] = _grantRewardToken(holder, rewardTokenAccrued[holder]);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for a single market.\\n     * @param vToken market's whose reward token last rewarding block to be updated\\n     * @param supplyLastRewardingBlock New supply-side REWARD TOKEN last rewarding block for market\\n     * @param borrowLastRewardingBlock New borrow-side REWARD TOKEN last rewarding block for market\\n     */\\n    function _setLastRewardingBlock(\\n        VToken vToken,\\n        uint32 supplyLastRewardingBlock,\\n        uint32 borrowLastRewardingBlock\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockNumber = getBlockNumberOrTimestamp();\\n\\n        require(supplyLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n        require(borrowLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n\\n        uint32 currentSupplyLastRewardingBlock = rewardTokenSupplyState[address(vToken)].lastRewardingBlock;\\n        uint32 currentBorrowLastRewardingBlock = rewardTokenBorrowState[address(vToken)].lastRewardingBlock;\\n\\n        require(\\n            currentSupplyLastRewardingBlock == 0 || currentSupplyLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlock == 0 || currentBorrowLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlock != supplyLastRewardingBlock) {\\n            rewardTokenSupplyState[address(vToken)].lastRewardingBlock = supplyLastRewardingBlock;\\n            emit SupplyLastRewardingBlockUpdated(address(vToken), supplyLastRewardingBlock);\\n        }\\n\\n        if (currentBorrowLastRewardingBlock != borrowLastRewardingBlock) {\\n            rewardTokenBorrowState[address(vToken)].lastRewardingBlock = borrowLastRewardingBlock;\\n            emit BorrowLastRewardingBlockUpdated(address(vToken), borrowLastRewardingBlock);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding timestamp for a single market.\\n     * @param vToken market's whose reward token last rewarding timestamp to be updated\\n     * @param supplyLastRewardingBlockTimestamp New supply-side REWARD TOKEN last rewarding timestamp for market\\n     * @param borrowLastRewardingBlockTimestamp New borrow-side REWARD TOKEN last rewarding timestamp for market\\n     */\\n    function _setLastRewardingBlockTimestamp(\\n        VToken vToken,\\n        uint256 supplyLastRewardingBlockTimestamp,\\n        uint256 borrowLastRewardingBlockTimestamp\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockTimestamp = getBlockNumberOrTimestamp();\\n\\n        require(\\n            supplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n        require(\\n            borrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n\\n        uint256 currentSupplyLastRewardingBlockTimestamp = rewardTokenSupplyStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n        uint256 currentBorrowLastRewardingBlockTimestamp = rewardTokenBorrowStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n\\n        require(\\n            currentSupplyLastRewardingBlockTimestamp == 0 || currentSupplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlockTimestamp == 0 || currentBorrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlockTimestamp != supplyLastRewardingBlockTimestamp) {\\n            rewardTokenSupplyStateTimeBased[address(vToken)].lastRewardingTimestamp = supplyLastRewardingBlockTimestamp;\\n            emit SupplyLastRewardingBlockTimestampUpdated(address(vToken), supplyLastRewardingBlockTimestamp);\\n        }\\n\\n        if (currentBorrowLastRewardingBlockTimestamp != borrowLastRewardingBlockTimestamp) {\\n            rewardTokenBorrowStateTimeBased[address(vToken)].lastRewardingTimestamp = borrowLastRewardingBlockTimestamp;\\n            emit BorrowLastRewardingBlockTimestampUpdated(address(vToken), borrowLastRewardingBlockTimestamp);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single market.\\n     * @param vToken market's whose reward token rate to be updated\\n     * @param supplySpeed New supply-side REWARD TOKEN speed for market\\n     * @param borrowSpeed New borrow-side REWARD TOKEN speed for market\\n     */\\n    function _setRewardTokenSpeed(VToken vToken, uint256 supplySpeed, uint256 borrowSpeed) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        if (rewardTokenSupplySpeeds[address(vToken)] != supplySpeed) {\\n            // Supply speed updated so let's update supply state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n\\n            // Update speed and emit event\\n            rewardTokenSupplySpeeds[address(vToken)] = supplySpeed;\\n            emit RewardTokenSupplySpeedUpdated(vToken, supplySpeed);\\n        }\\n\\n        if (rewardTokenBorrowSpeeds[address(vToken)] != borrowSpeed) {\\n            // Borrow speed updated so let's update borrow state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n\\n            // Update speed and emit event\\n            rewardTokenBorrowSpeeds[address(vToken)] = borrowSpeed;\\n            emit RewardTokenBorrowSpeedUpdated(vToken, borrowSpeed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculate REWARD TOKEN accrued by a supplier and possibly transfer it to them.\\n     * @param vToken The market in which the supplier is interacting\\n     * @param supplier The address of the supplier to distribute REWARD TOKEN to\\n     */\\n    function _distributeSupplierRewardToken(address vToken, address supplier) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n        uint256 supplierIndex = rewardTokenSupplierIndex[vToken][supplier];\\n\\n        // Update supplier's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenSupplierIndex[vToken][supplier] = supplyIndex;\\n\\n        if (supplierIndex == 0 && supplyIndex >= INITIAL_INDEX) {\\n            // Covers the case where users supplied tokens before the market's supply state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when supplier rewards were first\\n            // set for the market.\\n            supplierIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per vToken accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(supplyIndex, supplierIndex) });\\n\\n        uint256 supplierTokens = VToken(vToken).balanceOf(supplier);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerVToken\\n        uint256 supplierDelta = mul_(supplierTokens, deltaIndex);\\n\\n        uint256 supplierAccrued = add_(rewardTokenAccrued[supplier], supplierDelta);\\n        rewardTokenAccrued[supplier] = supplierAccrued;\\n\\n        emit DistributedSupplierRewardToken(VToken(vToken), supplier, supplierDelta, supplierAccrued, supplyIndex);\\n    }\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them.\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function _distributeBorrowerRewardToken(address vToken, address borrower, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n        uint256 borrowerIndex = rewardTokenBorrowerIndex[vToken][borrower];\\n\\n        // Update borrowers's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenBorrowerIndex[vToken][borrower] = borrowIndex;\\n\\n        if (borrowerIndex == 0 && borrowIndex >= INITIAL_INDEX) {\\n            // Covers the case where users borrowed tokens before the market's borrow state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when borrower rewards were first\\n            // set for the market.\\n            borrowerIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per borrowed unit accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(borrowIndex, borrowerIndex) });\\n\\n        uint256 borrowerAmount = div_(VToken(vToken).borrowBalanceStored(borrower), marketBorrowIndex);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerBorrowedUnit\\n        if (borrowerAmount != 0) {\\n            uint256 borrowerDelta = mul_(borrowerAmount, deltaIndex);\\n\\n            uint256 borrowerAccrued = add_(rewardTokenAccrued[borrower], borrowerDelta);\\n            rewardTokenAccrued[borrower] = borrowerAccrued;\\n\\n            emit DistributedBorrowerRewardToken(VToken(vToken), borrower, borrowerDelta, borrowerAccrued, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the user.\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all.\\n     * @param user The address of the user to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     * @return The amount of REWARD TOKEN which was NOT transferred to the user\\n     */\\n    function _grantRewardToken(address user, uint256 amount) internal returns (uint256) {\\n        uint256 rewardTokenRemaining = rewardToken.balanceOf(address(this));\\n        if (amount > 0 && amount <= rewardTokenRemaining) {\\n            rewardToken.safeTransfer(user, amount);\\n            return 0;\\n        }\\n        return amount;\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the supply index\\n     * @param vToken The market whose supply index to update\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenSupplyIndex(address vToken) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplySpeed = rewardTokenSupplySpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? supplyStateTimeBased.lastRewardingTimestamp\\n            : uint256(supplyState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? supplyStateTimeBased.timestamp : uint256(supplyState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && supplySpeed > 0) {\\n            uint256 supplyTokens = VToken(vToken).totalSupply();\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, supplySpeed);\\n            Double memory ratio = supplyTokens > 0\\n                ? fraction(accruedSinceUpdate, supplyTokens)\\n                : Double({ mantissa: 0 });\\n            uint224 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: supplyIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                supplyStateTimeBased.index = index;\\n                supplyStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                supplyState.index = index;\\n                supplyState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            isTimeBased ? supplyStateTimeBased.timestamp = blockNumberOrTimestamp : supplyState.block = uint32(\\n                blockNumberOrTimestamp\\n            );\\n        }\\n\\n        emit RewardTokenSupplyIndexUpdated(vToken);\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the borrow index\\n     * @param vToken The market whose borrow index to update\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowSpeed = rewardTokenBorrowSpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? borrowStateTimeBased.lastRewardingTimestamp\\n            : uint256(borrowState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? borrowStateTimeBased.timestamp : uint256(borrowState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && borrowSpeed > 0) {\\n            uint256 borrowAmount = div_(VToken(vToken).totalBorrows(), marketBorrowIndex);\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, borrowSpeed);\\n            Double memory ratio = borrowAmount > 0\\n                ? fraction(accruedSinceUpdate, borrowAmount)\\n                : Double({ mantissa: 0 });\\n            uint224 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: borrowIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                borrowStateTimeBased.index = index;\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.index = index;\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            if (isTimeBased) {\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        }\\n\\n        emit RewardTokenBorrowIndexUpdated(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is block-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockNumber current block number\\n     */\\n    function _initializeMarketBlockBased(address vToken, uint32 blockNumber) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block numbers\\n         */\\n        supplyState.block = borrowState.block = blockNumber;\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is time-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockTimestamp current block timestamp\\n     */\\n    function _initializeMarketTimestampBased(address vToken, uint256 blockTimestamp) internal {\\n        TimeBasedRewardToken storage supplyState = rewardTokenSupplyStateTimeBased[vToken];\\n        TimeBasedRewardToken storage borrowState = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block timestamp\\n         */\\n        supplyState.timestamp = borrowState.timestamp = blockTimestamp;\\n    }\\n}\\n\",\"keccak256\":\"0x3cc824e59c923cfe25c4f1a875959b7e9410cde8e73cd405de13f301298c697f\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\n\\n/**\\n * @title RewardsDistributorStorage\\n * @author Venus\\n * @dev Storage for RewardsDistributor\\n */\\ncontract RewardsDistributorStorage {\\n    struct RewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block number the index was last updated at\\n        uint32 block;\\n        // The block number at which to stop rewards\\n        uint32 lastRewardingBlock;\\n    }\\n\\n    struct TimeBasedRewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block timestamp the index was last updated at\\n        uint256 timestamp;\\n        // The block timestamp at which to stop rewards\\n        uint256 lastRewardingTimestamp;\\n    }\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => RewardToken) public rewardTokenSupplyState;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each supplier as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenSupplierIndex;\\n\\n    /// @notice The REWARD TOKEN accrued but not yet transferred to each user\\n    mapping(address => uint256) public rewardTokenAccrued;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding borrow market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenBorrowSpeeds;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding supply market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenSupplySpeeds;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => RewardToken) public rewardTokenBorrowState;\\n\\n    /// @notice The portion of REWARD TOKEN that each contributor receives per slot (block or second)\\n    mapping(address => uint256) public rewardTokenContributorSpeeds;\\n\\n    /// @notice Last slot (block or second) at which a contributor's REWARD TOKEN rewards have been allocated\\n    mapping(address => uint256) public lastContributorBlock;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each borrower as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenBorrowerIndex;\\n\\n    Comptroller internal comptroller;\\n\\n    IERC20Upgradeable public rewardToken;\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenSupplyStateTimeBased;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenBorrowStateTimeBased;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[37] private __gap;\\n}\\n\",\"keccak256\":\"0x70e5015a78a2acf95277949c8b4796e10b9ac194130be006d5e5217e158070c0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VToken.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IProtocolShareReserve } from \\\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\\\";\\n\\nimport { VTokenInterface } from \\\"./VTokenInterfaces.sol\\\";\\nimport { ComptrollerInterface, ComptrollerViewInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { TokenErrorReporter } from \\\"./ErrorReporter.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title VToken\\n * @author Venus\\n * @notice Each asset that is supported by a pool is integrated through an instance of the `VToken` contract. As outlined in the protocol overview,\\n * each isolated pool creates its own `vToken` corresponding to an asset. Within a given pool, each included `vToken` is referred to as a market of\\n * the pool. The main actions a user regularly interacts with in a market are:\\n\\n- mint/redeem of vTokens;\\n- transfer of vTokens;\\n- borrow/repay a loan on an underlying asset;\\n- liquidate a borrow or liquidate/heal an account.\\n\\n * A user supplies the underlying asset to a pool by minting `vTokens`, where the corresponding `vToken` amount is determined by the `exchangeRate`.\\n * The `exchangeRate` will change over time, dependent on a number of factors, some of which accrue interest. Additionally, once users have minted\\n * `vToken` in a pool, they can borrow any asset in the isolated pool by using their `vToken` as collateral. In order to borrow an asset or use a `vToken`\\n * as collateral, the user must be entered into each corresponding market (else, the `vToken` will not be considered collateral for a borrow). Note that\\n * a user may borrow up to a portion of their collateral determined by the market\\u2019s collateral factor. However, if their borrowed amount exceeds an amount\\n * calculated using the market\\u2019s corresponding liquidation threshold, the borrow is eligible for liquidation. When a user repays a borrow, they must also\\n * pay off interest accrued on the borrow.\\n * \\n * The Venus protocol includes unique mechanisms for healing an account and liquidating an account. These actions are performed in the `Comptroller`\\n * and consider all borrows and collateral for which a given account is entered within a market. These functions may only be called on an account with a\\n * total collateral amount that is no larger than a universal `minLiquidatableCollateral` value, which is used for all markets within a `Comptroller`.\\n * Both functions settle all of an account\\u2019s borrows, but `healAccount()` may add `badDebt` to a vToken. For more detail, see the description of\\n * `healAccount()` and `liquidateAccount()` in the `Comptroller` summary section below.\\n */\\ncontract VToken is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    VTokenInterface,\\n    ExponentialNoError,\\n    TokenErrorReporter,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    uint256 internal constant DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA = 5e16; // 5%\\n\\n    // Maximum fraction of interest that can be set aside for reserves\\n    uint256 internal constant MAX_RESERVE_FACTOR_MANTISSA = 1e18;\\n\\n    // Maximum borrow rate that can ever be applied per slot(block or second)\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 internal immutable MAX_BORROW_RATE_MANTISSA;\\n\\n    /**\\n     * Reentrancy Guard **\\n     */\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     */\\n    modifier nonReentrant() {\\n        require(_notEntered, \\\"re-entered\\\");\\n        _notEntered = false;\\n        _;\\n        _notEntered = true; // get a gas-refund post-Istanbul\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @param maxBorrowRateMantissa_ The maximum value of borrowing rate mantissa\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(\\n        bool timeBased_,\\n        uint256 blocksPerYear_,\\n        uint256 maxBorrowRateMantissa_\\n    ) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        require(maxBorrowRateMantissa_ <= 1e18, \\\"Max borrow rate must be <= 1e18\\\");\\n\\n        MAX_BORROW_RATE_MANTISSA = maxBorrowRateMantissa_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice Construct a new money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     * @custom:error ZeroAddressNotAllowed is thrown when admin address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     */\\n    function initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) external initializer {\\n        ensureNonzeroAddress(admin_);\\n\\n        // Initialize the market\\n        _initialize(\\n            underlying_,\\n            comptroller_,\\n            interestRateModel_,\\n            initialExchangeRateMantissa_,\\n            name_,\\n            symbol_,\\n            decimals_,\\n            admin_,\\n            accessControlManager_,\\n            riskManagement,\\n            reserveFactorMantissa_\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `msg.sender` to `dst`\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transfer(address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `src` to `dst`\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transferFrom(address src, address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, src, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Approve `spender` to transfer up to `amount` from `src`\\n     * @dev This will overwrite the approval amount for `spender`\\n     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\\n     * @param spender The address of the account which may transfer tokens\\n     * @param amount The number of tokens that are approved (uint256.max means infinite)\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function approve(address spender, uint256 amount) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        transferAllowances[src][spender] = amount;\\n        emit Approval(src, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Increase approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param addedValue The number of additional tokens spender can transfer\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 newAllowance = transferAllowances[src][spender];\\n        newAllowance += addedValue;\\n        transferAllowances[src][spender] = newAllowance;\\n\\n        emit Approval(src, spender, newAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Decreases approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param subtractedValue The number of tokens to remove from total approval\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 currentAllowance = transferAllowances[src][spender];\\n        require(currentAllowance >= subtractedValue, \\\"decreased allowance below zero\\\");\\n        unchecked {\\n            currentAllowance -= subtractedValue;\\n        }\\n\\n        transferAllowances[src][spender] = currentAllowance;\\n\\n        emit Approval(src, spender, currentAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Get the underlying balance of the `owner`\\n     * @dev This also accrues interest in a transaction\\n     * @param owner The address of the account to query\\n     * @return amount The amount of underlying owned by `owner`\\n     */\\n    function balanceOfUnderlying(address owner) external override returns (uint256) {\\n        Exp memory exchangeRate = Exp({ mantissa: exchangeRateCurrent() });\\n        return mul_ScalarTruncate(exchangeRate, accountTokens[owner]);\\n    }\\n\\n    /**\\n     * @notice Returns the current total borrows plus accrued interest\\n     * @return totalBorrows The total borrows with interest\\n     */\\n    function totalBorrowsCurrent() external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return totalBorrows;\\n    }\\n\\n    /**\\n     * @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\\n     * @param account The address whose balance should be calculated after updating borrowIndex\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceCurrent(address account) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Sender supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function mint(uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, msg.sender, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender calls on-behalf of minter. minter supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param minter User whom the supply will be attributed to\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when minter address is zero\\n     */\\n    function mintBehalf(address minter, uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(minter);\\n\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, minter, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for the underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function redeem(uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer The user on behalf of whom to redeem\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for a specified amount of underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     */\\n    function redeemUnderlying(uint256 redeemAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems underlying assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer, on behalf of whom to redeem\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemUnderlyingBehalf(\\n        address redeemer,\\n        uint256 redeemAmount\\n    ) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets from the protocol to their own address\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function borrow(uint256 borrowAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _borrowFresh(msg.sender, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the borrower using `comptroller.updateDelegate`\\n     * @param borrower The borrower, on behalf of whom to borrow\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error DelegateNotApproved is thrown if caller is not approved delegate\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function borrowBehalf(address borrower, uint256 borrowAmount) external override returns (uint256) {\\n        _ensureSenderIsDelegateOf(borrower);\\n        accrueInterest();\\n\\n        _borrowFresh(borrower, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays their own borrow\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrow(uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, msg.sender, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays a borrow belonging to borrower\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, borrower, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Not restricted\\n     */\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external override returns (uint256) {\\n        _liquidateBorrow(msg.sender, borrower, repayAmount, vTokenCollateral, false);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice sets protocol share accumulated from liquidations\\n     * @dev must be equal or less than liquidation incentive - 1\\n     * @param newProtocolSeizeShareMantissa_ new protocol share mantissa\\n     * @custom:event Emits NewProtocolSeizeShare event on success\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error ProtocolSeizeShareTooBig is thrown when the new seize share is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setProtocolSeizeShare(uint256 newProtocolSeizeShareMantissa_) external {\\n        _checkAccessAllowed(\\\"setProtocolSeizeShare(uint256)\\\");\\n        uint256 liquidationIncentive = ComptrollerViewInterface(address(comptroller)).liquidationIncentiveMantissa();\\n        if (newProtocolSeizeShareMantissa_ + MANTISSA_ONE > liquidationIncentive) {\\n            revert ProtocolSeizeShareTooBig();\\n        }\\n\\n        uint256 oldProtocolSeizeShareMantissa = protocolSeizeShareMantissa;\\n        protocolSeizeShareMantissa = newProtocolSeizeShareMantissa_;\\n        emit NewProtocolSeizeShare(oldProtocolSeizeShareMantissa, newProtocolSeizeShareMantissa_);\\n    }\\n\\n    /**\\n     * @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\\n     * @dev Admin function to accrue interest and set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     * @custom:event Emits NewReserveFactor event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error SetReserveFactorBoundsCheck is thrown when the new reserve factor is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external override nonReentrant {\\n        _checkAccessAllowed(\\\"setReserveFactor(uint256)\\\");\\n\\n        accrueInterest();\\n        _setReserveFactorFresh(newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Accrues interest and reduces reserves by transferring to the protocol reserve contract\\n     * @dev Gracefully return if reserves already reduced in accrueInterest\\n     * @param reduceAmount Amount of reduction to reserves\\n     * @custom:event Emits ReservesReduced event; may emit AccrueInterest\\n     * @custom:error ReduceReservesCashNotAvailable is thrown when the vToken does not have sufficient cash\\n     * @custom:error ReduceReservesCashValidation is thrown when trying to withdraw more cash than the reserves have\\n     * @custom:access Not restricted\\n     */\\n    function reduceReserves(uint256 reduceAmount) external override nonReentrant {\\n        accrueInterest();\\n        if (reduceReservesBlockNumber == getBlockNumberOrTimestamp()) return;\\n        _reduceReservesFresh(reduceAmount);\\n    }\\n\\n    /**\\n     * @notice The sender adds to reserves.\\n     * @param addAmount The amount of underlying token to add as reserves\\n     * @custom:event Emits ReservesAdded event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function addReserves(uint256 addAmount) external override nonReentrant {\\n        accrueInterest();\\n        _addReservesFresh(addAmount);\\n    }\\n\\n    /**\\n     * @notice accrues interest and updates the interest rate model using _setInterestRateModelFresh\\n     * @dev Admin function to accrue interest and update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     * @custom:event Emits NewMarketInterestRateModel event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external override {\\n        _checkAccessAllowed(\\\"setInterestRateModel(address)\\\");\\n\\n        accrueInterest();\\n        _setInterestRateModelFresh(newInterestRateModel);\\n    }\\n\\n    /**\\n     * @notice Repays a certain amount of debt, treats the rest of the borrow as bad debt, essentially\\n     *   \\\"forgiving\\\" the borrower. Healing is a situation that should rarely happen. However, some pools\\n     *   may list risky assets or be configured improperly \\u2013 we want to still handle such cases gracefully.\\n     *   We assume that Comptroller does the seizing, so this function is only available to Comptroller.\\n     * @dev This function does not call any Comptroller hooks (like \\\"healAllowed\\\"), because we assume\\n     *   the Comptroller does all the necessary checks before calling this function.\\n     * @param payer account who repays the debt\\n     * @param borrower account to heal\\n     * @param repayAmount amount to repay\\n     * @custom:event Emits RepayBorrow, BadDebtIncreased events; may emit AccrueInterest\\n     * @custom:error HealBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:access Only Comptroller\\n     */\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external override nonReentrant {\\n        if (repayAmount != 0) {\\n            comptroller.preRepayHook(address(this), borrower);\\n        }\\n\\n        if (msg.sender != address(comptroller)) {\\n            revert HealBorrowUnauthorized();\\n        }\\n\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 totalBorrowsNew = totalBorrows;\\n\\n        uint256 actualRepayAmount;\\n        if (repayAmount != 0) {\\n            // _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n            // We violate checks-effects-interactions here to account for tokens that take transfer fees\\n            actualRepayAmount = _doTransferIn(payer, repayAmount);\\n            totalBorrowsNew = totalBorrowsNew - actualRepayAmount;\\n            emit RepayBorrow(\\n                payer,\\n                borrower,\\n                actualRepayAmount,\\n                accountBorrowsPrev - actualRepayAmount,\\n                totalBorrowsNew\\n            );\\n        }\\n\\n        // The transaction will fail if trying to repay too much\\n        uint256 badDebtDelta = accountBorrowsPrev - actualRepayAmount;\\n        if (badDebtDelta != 0) {\\n            uint256 badDebtOld = badDebt;\\n            uint256 badDebtNew = badDebtOld + badDebtDelta;\\n            totalBorrowsNew = totalBorrowsNew - badDebtDelta;\\n            badDebt = badDebtNew;\\n\\n            // We treat healing as \\\"repayment\\\", where vToken is the payer\\n            emit RepayBorrow(address(this), borrower, badDebtDelta, 0, totalBorrowsNew);\\n            emit BadDebtIncreased(borrower, badDebtDelta, badDebtOld, badDebtNew);\\n        }\\n\\n        accountBorrows[borrower].principal = 0;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        emit HealBorrow(payer, borrower, repayAmount);\\n    }\\n\\n    /**\\n     * @notice The extended version of liquidations, callable only by Comptroller. May skip\\n     *  the close factor check. The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error ForceLiquidateBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Only Comptroller\\n     */\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        if (msg.sender != address(comptroller)) {\\n            revert ForceLiquidateBorrowUnauthorized();\\n        }\\n        _liquidateBorrow(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Will fail unless called by another vToken during the process of liquidation.\\n     *  It's absolutely critical to use msg.sender as the borrowed vToken and not a parameter.\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     * @custom:event Emits Transfer, ReservesAdded events\\n     * @custom:error LiquidateSeizeLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:access Not restricted\\n     */\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external override nonReentrant {\\n        _seize(msg.sender, liquidator, borrower, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Updates bad debt\\n     * @dev Called only when bad debt is recovered from auction\\n     * @param recoveredAmount_ The amount of bad debt recovered\\n     * @custom:event Emits BadDebtRecovered event\\n     * @custom:access Only Shortfall contract\\n     */\\n    function badDebtRecovered(uint256 recoveredAmount_) external {\\n        require(msg.sender == shortfall, \\\"only shortfall contract can update bad debt\\\");\\n        require(recoveredAmount_ <= badDebt, \\\"more than bad debt recovered from auction\\\");\\n\\n        uint256 badDebtOld = badDebt;\\n        uint256 badDebtNew = badDebtOld - recoveredAmount_;\\n        badDebt = badDebtNew;\\n\\n        emit BadDebtRecovered(badDebtOld, badDebtNew);\\n    }\\n\\n    /**\\n     * @notice Sets protocol share reserve contract address\\n     * @param protocolShareReserve_ The address of the protocol share reserve contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setProtocolShareReserve(address payable protocolShareReserve_) external onlyOwner {\\n        _setProtocolShareReserve(protocolShareReserve_);\\n    }\\n\\n    /**\\n     * @notice Sets shortfall contract address\\n     * @param shortfall_ The address of the shortfall contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setShortfallContract(address shortfall_) external onlyOwner {\\n        _setShortfallContract(shortfall_);\\n    }\\n\\n    /**\\n     * @notice A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)\\n     * @param token The address of the ERC-20 token to sweep\\n     * @custom:access Only Governance\\n     */\\n    function sweepToken(IERC20Upgradeable token) external override {\\n        require(msg.sender == owner(), \\\"VToken::sweepToken: only admin can sweep tokens\\\");\\n        require(address(token) != underlying, \\\"VToken::sweepToken: can not sweep underlying token\\\");\\n        uint256 balance = token.balanceOf(address(this));\\n        token.safeTransfer(owner(), balance);\\n\\n        emit SweepToken(address(token));\\n    }\\n\\n    /**\\n     * @notice A public function to set new threshold of slot(block or second) difference after which funds will be sent to the protocol share reserve\\n     * @param _newReduceReservesBlockOrTimestampDelta slot(block or second) difference value\\n     * @custom:access Only Governance\\n     */\\n    function setReduceReservesBlockDelta(uint256 _newReduceReservesBlockOrTimestampDelta) external {\\n        _checkAccessAllowed(\\\"setReduceReservesBlockDelta(uint256)\\\");\\n        require(_newReduceReservesBlockOrTimestampDelta > 0, \\\"Invalid Input\\\");\\n        emit NewReduceReservesBlockDelta(reduceReservesBlockDelta, _newReduceReservesBlockOrTimestampDelta);\\n        reduceReservesBlockDelta = _newReduceReservesBlockOrTimestampDelta;\\n    }\\n\\n    /**\\n     * @notice Get the current allowance from `owner` for `spender`\\n     * @param owner The address of the account which owns the tokens to be spent\\n     * @param spender The address of the account which may transfer tokens\\n     * @return amount The number of tokens allowed to be spent (type(uint256).max means infinite)\\n     */\\n    function allowance(address owner, address spender) external view override returns (uint256) {\\n        return transferAllowances[owner][spender];\\n    }\\n\\n    /**\\n     * @notice Get the token balance of the `owner`\\n     * @param owner The address of the account to query\\n     * @return amount The number of tokens owned by `owner`\\n     */\\n    function balanceOf(address owner) external view override returns (uint256) {\\n        return accountTokens[owner];\\n    }\\n\\n    /**\\n     * @notice Get a snapshot of the account's balances, and the cached exchange rate\\n     * @dev This is used by comptroller to more efficiently perform liquidity checks.\\n     * @param account Address of the account to snapshot\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return vTokenBalance User's balance of vTokens\\n     * @return borrowBalance Amount owed in terms of underlying\\n     * @return exchangeRate Stored exchange rate\\n     */\\n    function getAccountSnapshot(\\n        address account\\n    )\\n        external\\n        view\\n        override\\n        returns (uint256 error, uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRate)\\n    {\\n        return (NO_ERROR, accountTokens[account], _borrowBalanceStored(account), _exchangeRateStored());\\n    }\\n\\n    /**\\n     * @notice Get cash balance of this vToken in the underlying asset\\n     * @return cash The quantity of underlying asset owned by this contract\\n     */\\n    function getCash() external view override returns (uint256) {\\n        return _getCashPrior();\\n    }\\n\\n    /**\\n     * @notice Returns the current per slot(block or second) borrow interest rate for this vToken\\n     * @return rate The borrow interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function borrowRatePerBlock() external view override returns (uint256) {\\n        return interestRateModel.getBorrowRate(_getCashPrior(), totalBorrows, totalReserves, badDebt);\\n    }\\n\\n    /**\\n     * @notice Returns the current per-slot(block or second) supply interest rate for this v\\n     * @return rate The supply interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function supplyRatePerBlock() external view override returns (uint256) {\\n        return\\n            interestRateModel.getSupplyRate(\\n                _getCashPrior(),\\n                totalBorrows,\\n                totalReserves,\\n                reserveFactorMantissa,\\n                badDebt\\n            );\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceStored(address account) external view override returns (uint256) {\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateStored() external view override returns (uint256) {\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Accrue interest then return the up-to-date exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateCurrent() public override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Applies accrued interest to total borrows and reserves\\n     * @dev This calculates interest accrued from the last checkpointed slot(block or second)\\n     *  up to the current slot(block or second) and writes new checkpoint to storage and\\n     *  reduce spread reserves to protocol share reserve\\n     *  if currentSlot - reduceReservesBlockNumber >= slotDelta\\n     * @return Always NO_ERROR\\n     * @custom:event Emits AccrueInterest event on success\\n     * @custom:access Not restricted\\n     */\\n    function accrueInterest() public virtual override returns (uint256) {\\n        /* Remember the initial block number or timestamp */\\n        uint256 currentSlotNumber = getBlockNumberOrTimestamp();\\n        uint256 accrualSlotNumberPrior = accrualBlockNumber;\\n\\n        /* Short-circuit accumulating 0 interest */\\n        if (accrualSlotNumberPrior == currentSlotNumber) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Read the previous values out of storage */\\n        uint256 cashPrior = _getCashPrior();\\n        uint256 borrowsPrior = totalBorrows;\\n        uint256 reservesPrior = totalReserves;\\n        uint256 borrowIndexPrior = borrowIndex;\\n\\n        /* Calculate the current borrow interest rate */\\n        uint256 borrowRateMantissa = interestRateModel.getBorrowRate(cashPrior, borrowsPrior, reservesPrior, badDebt);\\n        require(borrowRateMantissa <= MAX_BORROW_RATE_MANTISSA, \\\"borrow rate is absurdly high\\\");\\n\\n        /* Calculate the number of slots elapsed since the last accrual */\\n        uint256 slotDelta = currentSlotNumber - accrualSlotNumberPrior;\\n\\n        /*\\n         * Calculate the interest accumulated into borrows and reserves and the new index:\\n         *  simpleInterestFactor = borrowRate * slotDelta\\n         *  interestAccumulated = simpleInterestFactor * totalBorrows\\n         *  totalBorrowsNew = interestAccumulated + totalBorrows\\n         *  totalReservesNew = interestAccumulated * reserveFactor + totalReserves\\n         *  borrowIndexNew = simpleInterestFactor * borrowIndex + borrowIndex\\n         */\\n\\n        Exp memory simpleInterestFactor = mul_(Exp({ mantissa: borrowRateMantissa }), slotDelta);\\n        uint256 interestAccumulated = mul_ScalarTruncate(simpleInterestFactor, borrowsPrior);\\n        uint256 totalBorrowsNew = interestAccumulated + borrowsPrior;\\n        uint256 totalReservesNew = mul_ScalarTruncateAddUInt(\\n            Exp({ mantissa: reserveFactorMantissa }),\\n            interestAccumulated,\\n            reservesPrior\\n        );\\n        uint256 borrowIndexNew = mul_ScalarTruncateAddUInt(simpleInterestFactor, borrowIndexPrior, borrowIndexPrior);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the previously calculated values into storage */\\n        accrualBlockNumber = currentSlotNumber;\\n        borrowIndex = borrowIndexNew;\\n        totalBorrows = totalBorrowsNew;\\n        totalReserves = totalReservesNew;\\n\\n        if (currentSlotNumber - reduceReservesBlockNumber >= reduceReservesBlockDelta) {\\n            reduceReservesBlockNumber = currentSlotNumber;\\n            if (cashPrior < totalReservesNew) {\\n                _reduceReservesFresh(cashPrior);\\n            } else {\\n                _reduceReservesFresh(totalReservesNew);\\n            }\\n        }\\n\\n        /* We emit an AccrueInterest event */\\n        emit AccrueInterest(cashPrior, interestAccumulated, borrowIndexNew, totalBorrowsNew);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice User supplies assets into the market and receives vTokens in exchange\\n     * @dev Assumes interest has already been accrued up to the current block or timestamp\\n     * @param payer The address of the account which is sending the assets for supply\\n     * @param minter The address of the account which is supplying the assets\\n     * @param mintAmount The amount of the underlying asset to supply\\n     */\\n    function _mintFresh(address payer, address minter, uint256 mintAmount) internal {\\n        /* Fail if mint not allowed */\\n        comptroller.preMintHook(address(this), minter, mintAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert MintFreshnessCheck();\\n        }\\n\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         *  We call `_doTransferIn` for the minter and the mintAmount.\\n         *  `_doTransferIn` reverts if anything goes wrong, since we can't be sure if\\n         *  side-effects occurred. The function returns the amount actually transferred,\\n         *  in case of a fee. On success, the vToken holds an additional `actualMintAmount`\\n         *  of cash.\\n         */\\n        uint256 actualMintAmount = _doTransferIn(payer, mintAmount);\\n\\n        /*\\n         * We get the current exchange rate and calculate the number of vTokens to be minted:\\n         *  mintTokens = actualMintAmount / exchangeRate\\n         */\\n\\n        uint256 mintTokens = div_(actualMintAmount, exchangeRate);\\n\\n        /*\\n         * We calculate the new total supply of vTokens and minter token balance, checking for overflow:\\n         *  totalSupplyNew = totalSupply + mintTokens\\n         *  accountTokensNew = accountTokens[minter] + mintTokens\\n         * And write them into storage\\n         */\\n        totalSupply = totalSupply + mintTokens;\\n        uint256 balanceAfter = accountTokens[minter] + mintTokens;\\n        accountTokens[minter] = balanceAfter;\\n\\n        /* We emit a Mint event, and a Transfer event */\\n        emit Mint(minter, actualMintAmount, mintTokens, balanceAfter);\\n        emit Transfer(address(0), minter, mintTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.mintVerify(address(this), minter, actualMintAmount, mintTokens);\\n    }\\n\\n    /**\\n     * @notice Redeemer redeems vTokens in exchange for the underlying assets, transferred to the receiver. Redeemer and receiver can be the same\\n     *   address, or different addresses if the receiver was previously approved by the redeemer as a valid delegate (see Comptroller.updateDelegate)\\n     * @dev Assumes interest has already been accrued up to the current slot(block or second)\\n     * @param redeemer The address of the account which is redeeming the tokens\\n     * @param receiver The receiver of the underlying tokens\\n     * @param redeemTokensIn The number of vTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     * @param redeemAmountIn The number of underlying tokens to receive from redeeming vTokens (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     */\\n    function _redeemFresh(address redeemer, address receiver, uint256 redeemTokensIn, uint256 redeemAmountIn) internal {\\n        require(redeemTokensIn == 0 || redeemAmountIn == 0, \\\"one of redeemTokensIn or redeemAmountIn must be zero\\\");\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RedeemFreshnessCheck();\\n        }\\n\\n        /* exchangeRate = invoke Exchange Rate Stored() */\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        uint256 redeemTokens;\\n        uint256 redeemAmount;\\n\\n        /* If redeemTokensIn > 0: */\\n        if (redeemTokensIn > 0) {\\n            /*\\n             * We calculate the exchange rate and the amount of underlying to be redeemed:\\n             *  redeemTokens = redeemTokensIn\\n             */\\n            redeemTokens = redeemTokensIn;\\n        } else {\\n            /*\\n             * We get the current exchange rate and calculate the amount to be redeemed:\\n             *  redeemTokens = redeemAmountIn / exchangeRate\\n             */\\n            redeemTokens = div_(redeemAmountIn, exchangeRate);\\n\\n            uint256 _redeemAmount = mul_(redeemTokens, exchangeRate);\\n            if (_redeemAmount != 0 && _redeemAmount != redeemAmountIn) redeemTokens++; // round up\\n        }\\n\\n        // redeemAmount = exchangeRate * redeemTokens\\n        redeemAmount = mul_ScalarTruncate(exchangeRate, redeemTokens);\\n\\n        // Revert if amount is zero\\n        if (redeemAmount == 0) {\\n            revert(\\\"redeemAmount is zero\\\");\\n        }\\n\\n        /* Fail if redeem not allowed */\\n        comptroller.preRedeemHook(address(this), redeemer, redeemTokens);\\n\\n        /* Fail gracefully if protocol has insufficient cash */\\n        if (_getCashPrior() - totalReserves < redeemAmount) {\\n            revert RedeemTransferOutNotPossible();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing reduced supply before external transfer.\\n         */\\n        totalSupply = totalSupply - redeemTokens;\\n        uint256 balanceAfter = accountTokens[redeemer] - redeemTokens;\\n        accountTokens[redeemer] = balanceAfter;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the redeemAmount.\\n         *  On success, the vToken has redeemAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, redeemAmount);\\n\\n        /* We emit a Transfer event, and a Redeem event */\\n        emit Transfer(redeemer, address(this), redeemTokens);\\n        emit Redeem(redeemer, redeemAmount, redeemTokens, balanceAfter);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.redeemVerify(address(this), redeemer, redeemAmount, redeemTokens);\\n    }\\n\\n    /**\\n     * @notice Users or their delegates borrow assets from the protocol\\n     * @param borrower User who borrows the assets\\n     * @param receiver The receiver of the tokens, if called by a delegate\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     */\\n    function _borrowFresh(address borrower, address receiver, uint256 borrowAmount) internal {\\n        /* Fail if borrow not allowed */\\n        comptroller.preBorrowHook(address(this), borrower, borrowAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert BorrowFreshnessCheck();\\n        }\\n\\n        /* Fail gracefully if protocol has insufficient underlying cash */\\n        if (_getCashPrior() - totalReserves < borrowAmount) {\\n            revert BorrowCashNotAvailable();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on overflow:\\n         *  accountBorrowNew = accountBorrow + borrowAmount\\n         *  totalBorrowsNew = totalBorrows + borrowAmount\\n         */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 accountBorrowsNew = accountBorrowsPrev + borrowAmount;\\n        uint256 totalBorrowsNew = totalBorrows + borrowAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing increased borrow before external transfer.\\n        `*/\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the borrowAmount.\\n         *  On success, the vToken borrowAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, borrowAmount);\\n\\n        /* We emit a Borrow event */\\n        emit Borrow(borrower, borrowAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.borrowVerify(address(this), borrower, borrowAmount);\\n    }\\n\\n    /**\\n     * @notice Borrows are repaid by another user (possibly the borrower).\\n     * @param payer the account paying off the borrow\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount the amount of underlying tokens being returned, or type(uint256).max for the full outstanding amount\\n     * @return (uint) the actual repayment amount.\\n     */\\n    function _repayBorrowFresh(address payer, address borrower, uint256 repayAmount) internal returns (uint256) {\\n        /* Fail if repayBorrow not allowed */\\n        comptroller.preRepayHook(address(this), borrower);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RepayBorrowFreshnessCheck();\\n        }\\n\\n        /* We fetch the amount the borrower owes, with accumulated interest */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n\\n        uint256 repayAmountFinal = repayAmount >= accountBorrowsPrev ? accountBorrowsPrev : repayAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We call _doTransferIn for the payer and the repayAmount\\n         *  On success, the vToken holds an additional repayAmount of cash.\\n         *  _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         *   it returns the amount actually transferred, in case of a fee.\\n         */\\n        uint256 actualRepayAmount = _doTransferIn(payer, repayAmountFinal);\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on underflow:\\n         *  accountBorrowsNew = accountBorrows - actualRepayAmount\\n         *  totalBorrowsNew = totalBorrows - actualRepayAmount\\n         */\\n        uint256 accountBorrowsNew = accountBorrowsPrev - actualRepayAmount;\\n        uint256 totalBorrowsNew = totalBorrows - actualRepayAmount;\\n\\n        /* We write the previously calculated values into storage */\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /* We emit a RepayBorrow event */\\n        emit RepayBorrow(payer, borrower, actualRepayAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.repayBorrowVerify(address(this), payer, borrower, actualRepayAmount, borrowIndex);\\n\\n        return actualRepayAmount;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal nonReentrant {\\n        accrueInterest();\\n\\n        uint256 error = vTokenCollateral.accrueInterest();\\n        if (error != NO_ERROR) {\\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted liquidation failed\\n            revert LiquidateAccrueCollateralInterestFailed(error);\\n        }\\n\\n        _liquidateBorrowFresh(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice The liquidator liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrowFresh(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal {\\n        /* Fail if liquidate not allowed */\\n        comptroller.preLiquidateHook(\\n            address(this),\\n            address(vTokenCollateral),\\n            borrower,\\n            repayAmount,\\n            skipLiquidityCheck\\n        );\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert LiquidateFreshnessCheck();\\n        }\\n\\n        /* Verify vTokenCollateral market's slot(block or second) number equals current slot(block or second) number */\\n        if (vTokenCollateral.accrualBlockNumber() != getBlockNumberOrTimestamp()) {\\n            revert LiquidateCollateralFreshnessCheck();\\n        }\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateLiquidatorIsBorrower();\\n        }\\n\\n        /* Fail if repayAmount = 0 */\\n        if (repayAmount == 0) {\\n            revert LiquidateCloseAmountIsZero();\\n        }\\n\\n        /* Fail if repayAmount = type(uint256).max */\\n        if (repayAmount == type(uint256).max) {\\n            revert LiquidateCloseAmountIsUintMax();\\n        }\\n\\n        /* Fail if repayBorrow fails */\\n        uint256 actualRepayAmount = _repayBorrowFresh(liquidator, borrower, repayAmount);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We calculate the number of collateral tokens that will be seized */\\n        (uint256 amountSeizeError, uint256 seizeTokens) = comptroller.liquidateCalculateSeizeTokens(\\n            address(this),\\n            address(vTokenCollateral),\\n            actualRepayAmount\\n        );\\n        require(amountSeizeError == NO_ERROR, \\\"LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED\\\");\\n\\n        /* Revert if borrower collateral token balance < seizeTokens */\\n        require(vTokenCollateral.balanceOf(borrower) >= seizeTokens, \\\"LIQUIDATE_SEIZE_TOO_MUCH\\\");\\n\\n        // If this is also the collateral, call _seize internally to avoid re-entrancy, otherwise make an external call\\n        if (address(vTokenCollateral) == address(this)) {\\n            _seize(address(this), liquidator, borrower, seizeTokens);\\n        } else {\\n            vTokenCollateral.seize(liquidator, borrower, seizeTokens);\\n        }\\n\\n        /* We emit a LiquidateBorrow event */\\n        emit LiquidateBorrow(liquidator, borrower, actualRepayAmount, address(vTokenCollateral), seizeTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.liquidateBorrowVerify(\\n            address(this),\\n            address(vTokenCollateral),\\n            liquidator,\\n            borrower,\\n            actualRepayAmount,\\n            seizeTokens\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Called only during an in-kind liquidation, or by liquidateBorrow during the liquidation of another VToken.\\n     *  It's absolutely critical to use msg.sender as the seizer vToken and not a parameter.\\n     * @param seizerContract The contract seizing the collateral (either borrowed vToken or Comptroller)\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     */\\n    function _seize(address seizerContract, address liquidator, address borrower, uint256 seizeTokens) internal {\\n        /* Fail if seize not allowed */\\n        comptroller.preSeizeHook(address(this), seizerContract, liquidator, borrower);\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateSeizeLiquidatorIsBorrower();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and liquidator token balances, failing on underflow/overflow:\\n         *  borrowerTokensNew = accountTokens[borrower] - seizeTokens\\n         *  liquidatorTokensNew = accountTokens[liquidator] + seizeTokens\\n         */\\n        uint256 liquidationIncentiveMantissa = ComptrollerViewInterface(address(comptroller))\\n            .liquidationIncentiveMantissa();\\n        uint256 numerator = mul_(seizeTokens, Exp({ mantissa: protocolSeizeShareMantissa }));\\n        uint256 protocolSeizeTokens = div_(numerator, Exp({ mantissa: liquidationIncentiveMantissa }));\\n        uint256 liquidatorSeizeTokens = seizeTokens - protocolSeizeTokens;\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n        uint256 protocolSeizeAmount = mul_ScalarTruncate(exchangeRate, protocolSeizeTokens);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the calculated values into storage */\\n        totalSupply = totalSupply - protocolSeizeTokens;\\n        accountTokens[borrower] = accountTokens[borrower] - seizeTokens;\\n        accountTokens[liquidator] = accountTokens[liquidator] + liquidatorSeizeTokens;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, protocolSeizeAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.LIQUIDATION\\n        );\\n\\n        /* Emit a Transfer event */\\n        emit Transfer(borrower, liquidator, liquidatorSeizeTokens);\\n        emit ProtocolSeize(borrower, protocolShareReserve, protocolSeizeAmount);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.seizeVerify(address(this), seizerContract, liquidator, borrower, seizeTokens);\\n    }\\n\\n    function _setComptroller(ComptrollerInterface newComptroller) internal {\\n        ComptrollerInterface oldComptroller = comptroller;\\n        // Ensure invoke comptroller.isComptroller() returns true\\n        require(newComptroller.isComptroller(), \\\"marker method returned false\\\");\\n\\n        // Set market's comptroller to newComptroller\\n        comptroller = newComptroller;\\n\\n        // Emit NewComptroller(oldComptroller, newComptroller)\\n        emit NewComptroller(oldComptroller, newComptroller);\\n    }\\n\\n    /**\\n     * @notice Sets a new reserve factor for the protocol (*requires fresh interest accrual)\\n     * @dev Admin function to set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     */\\n    function _setReserveFactorFresh(uint256 newReserveFactorMantissa) internal {\\n        // Verify market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetReserveFactorFreshCheck();\\n        }\\n\\n        // Check newReserveFactor \\u2264 maxReserveFactor\\n        if (newReserveFactorMantissa > MAX_RESERVE_FACTOR_MANTISSA) {\\n            revert SetReserveFactorBoundsCheck();\\n        }\\n\\n        uint256 oldReserveFactorMantissa = reserveFactorMantissa;\\n        reserveFactorMantissa = newReserveFactorMantissa;\\n\\n        emit NewReserveFactor(oldReserveFactorMantissa, newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Add reserves by transferring from caller\\n     * @dev Requires fresh interest accrual\\n     * @param addAmount Amount of addition to reserves\\n     * @return actualAddAmount The actual amount added, excluding the potential token fees\\n     */\\n    function _addReservesFresh(uint256 addAmount) internal returns (uint256) {\\n        // totalReserves + actualAddAmount\\n        uint256 totalReservesNew;\\n        uint256 actualAddAmount;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert AddReservesFactorFreshCheck(actualAddAmount);\\n        }\\n\\n        actualAddAmount = _doTransferIn(msg.sender, addAmount);\\n        totalReservesNew = totalReserves + actualAddAmount;\\n        totalReserves = totalReservesNew;\\n        emit ReservesAdded(msg.sender, actualAddAmount, totalReservesNew);\\n\\n        return actualAddAmount;\\n    }\\n\\n    /**\\n     * @notice Reduces reserves by transferring to the protocol reserve contract\\n     * @dev Requires fresh interest accrual\\n     * @param reduceAmount Amount of reduction to reserves\\n     */\\n    function _reduceReservesFresh(uint256 reduceAmount) internal {\\n        if (reduceAmount == 0) {\\n            return;\\n        }\\n        // totalReserves - reduceAmount\\n        uint256 totalReservesNew;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert ReduceReservesFreshCheck();\\n        }\\n\\n        // Fail gracefully if protocol has insufficient underlying cash\\n        if (_getCashPrior() < reduceAmount) {\\n            revert ReduceReservesCashNotAvailable();\\n        }\\n\\n        // Check reduceAmount \\u2264 reserves[n] (totalReserves)\\n        if (reduceAmount > totalReserves) {\\n            revert ReduceReservesCashValidation();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        totalReservesNew = totalReserves - reduceAmount;\\n\\n        // Store reserves[n+1] = reserves[n] - reduceAmount\\n        totalReserves = totalReservesNew;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, reduceAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.SPREAD\\n        );\\n\\n        emit SpreadReservesReduced(protocolShareReserve, reduceAmount, totalReservesNew);\\n    }\\n\\n    /**\\n     * @notice updates the interest rate model (*requires fresh interest accrual)\\n     * @dev Admin function to update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     */\\n    function _setInterestRateModelFresh(InterestRateModel newInterestRateModel) internal {\\n        // Used to store old model for use in the event that is emitted on success\\n        InterestRateModel oldInterestRateModel;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetInterestRateModelFreshCheck();\\n        }\\n\\n        // Track the market's current interest rate model\\n        oldInterestRateModel = interestRateModel;\\n\\n        // Ensure invoke newInterestRateModel.isInterestRateModel() returns true\\n        require(newInterestRateModel.isInterestRateModel(), \\\"marker method returned false\\\");\\n\\n        // Set the interest rate model to newInterestRateModel\\n        interestRateModel = newInterestRateModel;\\n\\n        // Emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel)\\n        emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel);\\n    }\\n\\n    /**\\n     * Safe Token **\\n     */\\n\\n    /**\\n     * @dev Similar to ERC-20 transfer, but handles tokens that have transfer fees.\\n     *      This function returns the actual amount received,\\n     *      which may be less than `amount` if there is a fee attached to the transfer.\\n     * @param from Sender of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     * @return Actual amount received\\n     */\\n    function _doTransferIn(address from, uint256 amount) internal virtual returns (uint256) {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        uint256 balanceBefore = token.balanceOf(address(this));\\n        token.safeTransferFrom(from, address(this), amount);\\n        uint256 balanceAfter = token.balanceOf(address(this));\\n        // Return the amount that was *actually* transferred\\n        return balanceAfter - balanceBefore;\\n    }\\n\\n    /**\\n     * @dev Just a regular ERC-20 transfer, reverts on failure\\n     * @param to Receiver of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     */\\n    function _doTransferOut(address to, uint256 amount) internal virtual {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        token.safeTransfer(to, amount);\\n    }\\n\\n    /**\\n     * @notice Transfer `tokens` tokens from `src` to `dst` by `spender`\\n     * @dev Called by both `transfer` and `transferFrom` internally\\n     * @param spender The address of the account performing the transfer\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param tokens The number of tokens to transfer\\n     */\\n    function _transferTokens(address spender, address src, address dst, uint256 tokens) internal {\\n        /* Fail if transfer not allowed */\\n        comptroller.preTransferHook(address(this), src, dst, tokens);\\n\\n        /* Do not allow self-transfers */\\n        if (src == dst) {\\n            revert TransferNotAllowed();\\n        }\\n\\n        /* Get the allowance, infinite for the account owner */\\n        uint256 startingAllowance;\\n        if (spender == src) {\\n            startingAllowance = type(uint256).max;\\n        } else {\\n            startingAllowance = transferAllowances[src][spender];\\n        }\\n\\n        /* Do the calculations, checking for {under,over}flow */\\n        uint256 allowanceNew = startingAllowance - tokens;\\n        uint256 srcTokensNew = accountTokens[src] - tokens;\\n        uint256 dstTokensNew = accountTokens[dst] + tokens;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n\\n        accountTokens[src] = srcTokensNew;\\n        accountTokens[dst] = dstTokensNew;\\n\\n        /* Eat some of the allowance (if necessary) */\\n        if (startingAllowance != type(uint256).max) {\\n            transferAllowances[src][spender] = allowanceNew;\\n        }\\n\\n        /* We emit a Transfer event */\\n        emit Transfer(src, dst, tokens);\\n\\n        comptroller.transferVerify(address(this), src, dst, tokens);\\n    }\\n\\n    /**\\n     * @notice Initialize the money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     */\\n    function _initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n        require(accrualBlockNumber == 0 && borrowIndex == 0, \\\"market may only be initialized once\\\");\\n\\n        // Set initial exchange rate\\n        initialExchangeRateMantissa = initialExchangeRateMantissa_;\\n        require(initialExchangeRateMantissa > 0, \\\"initial exchange rate must be greater than zero.\\\");\\n\\n        _setComptroller(comptroller_);\\n\\n        // Initialize slot(block or second) number and borrow index (slot(block or second) number mocks depend on comptroller being set)\\n        accrualBlockNumber = getBlockNumberOrTimestamp();\\n        borrowIndex = MANTISSA_ONE;\\n\\n        // Set the interest rate model (depends on slot(block or second) number / borrow index)\\n        _setInterestRateModelFresh(interestRateModel_);\\n\\n        _setReserveFactorFresh(reserveFactorMantissa_);\\n\\n        name = name_;\\n        symbol = symbol_;\\n        decimals = decimals_;\\n        _setShortfallContract(riskManagement.shortfall);\\n        _setProtocolShareReserve(riskManagement.protocolShareReserve);\\n        protocolSeizeShareMantissa = DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA;\\n\\n        // Set underlying and sanity check it\\n        underlying = underlying_;\\n        IERC20Upgradeable(underlying).totalSupply();\\n\\n        // The counter starts true to prevent changing it from zero to non-zero (i.e. smaller cost/refund)\\n        _notEntered = true;\\n        _transferOwnership(admin_);\\n    }\\n\\n    function _setShortfallContract(address shortfall_) internal {\\n        ensureNonzeroAddress(shortfall_);\\n        address oldShortfall = shortfall;\\n        shortfall = shortfall_;\\n        emit NewShortfallContract(oldShortfall, shortfall_);\\n    }\\n\\n    function _setProtocolShareReserve(address payable protocolShareReserve_) internal {\\n        ensureNonzeroAddress(protocolShareReserve_);\\n        address oldProtocolShareReserve = address(protocolShareReserve);\\n        protocolShareReserve = protocolShareReserve_;\\n        emit NewProtocolShareReserve(oldProtocolShareReserve, address(protocolShareReserve_));\\n    }\\n\\n    function _ensureSenderIsDelegateOf(address user) internal view {\\n        if (!ComptrollerViewInterface(address(comptroller)).approvedDelegates(user, msg.sender)) {\\n            revert DelegateNotApproved();\\n        }\\n    }\\n\\n    /**\\n     * @notice Gets balance of this contract in terms of the underlying\\n     * @dev This excludes the value of the current message, if any\\n     * @return The quantity of underlying tokens owned by this contract\\n     */\\n    function _getCashPrior() internal view virtual returns (uint256) {\\n        return IERC20Upgradeable(underlying).balanceOf(address(this));\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance the calculated balance\\n     */\\n    function _borrowBalanceStored(address account) internal view returns (uint256) {\\n        /* Get borrowBalance and borrowIndex */\\n        BorrowSnapshot memory borrowSnapshot = accountBorrows[account];\\n\\n        /* If borrowBalance = 0 then borrowIndex is likely also 0.\\n         * Rather than failing the calculation with a division by 0, we immediately return 0 in this case.\\n         */\\n        if (borrowSnapshot.principal == 0) {\\n            return 0;\\n        }\\n\\n        /* Calculate new borrow balance using the interest index:\\n         *  recentBorrowBalance = borrower.borrowBalance * market.borrowIndex / borrower.borrowIndex\\n         */\\n        uint256 principalTimesIndex = borrowSnapshot.principal * borrowIndex;\\n\\n        return principalTimesIndex / borrowSnapshot.interestIndex;\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function _exchangeRateStored() internal view virtual returns (uint256) {\\n        uint256 _totalSupply = totalSupply;\\n        if (_totalSupply == 0) {\\n            /*\\n             * If there are no tokens minted:\\n             *  exchangeRate = initialExchangeRate\\n             */\\n            return initialExchangeRateMantissa;\\n        }\\n        /*\\n         * Otherwise:\\n         *  exchangeRate = (totalCash + totalBorrows + badDebt - totalReserves) / totalSupply\\n         */\\n        uint256 totalCash = _getCashPrior();\\n        uint256 cashPlusBorrowsMinusReserves = totalCash + totalBorrows + badDebt - totalReserves;\\n        uint256 exchangeRate = (cashPlusBorrowsMinusReserves * EXP_SCALE) / _totalSupply;\\n\\n        return exchangeRate;\\n    }\\n}\\n\",\"keccak256\":\"0xa220ca317fe69b920b86e43f054c43b5f891f12160fd312c9a21668f969ee056\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { ComptrollerInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\n\\n/**\\n * @title VTokenStorage\\n * @author Venus\\n * @notice Storage layout used by the `VToken` contract\\n */\\n// solhint-disable-next-line max-states-count\\ncontract VTokenStorage {\\n    /**\\n     * @notice Container for borrow balance information\\n     * @member principal Total balance (with accrued interest), after applying the most recent balance-changing action\\n     * @member interestIndex Global borrowIndex as of the most recent balance-changing action\\n     */\\n    struct BorrowSnapshot {\\n        uint256 principal;\\n        uint256 interestIndex;\\n    }\\n\\n    /**\\n     * @dev Guard variable for re-entrancy checks\\n     */\\n    bool internal _notEntered;\\n\\n    /**\\n     * @notice Underlying asset for this VToken\\n     */\\n    address public underlying;\\n\\n    /**\\n     * @notice EIP-20 token name for this token\\n     */\\n    string public name;\\n\\n    /**\\n     * @notice EIP-20 token symbol for this token\\n     */\\n    string public symbol;\\n\\n    /**\\n     * @notice EIP-20 token decimals for this token\\n     */\\n    uint8 public decimals;\\n\\n    /**\\n     * @notice Protocol share Reserve contract address\\n     */\\n    address payable public protocolShareReserve;\\n\\n    /**\\n     * @notice Contract which oversees inter-vToken operations\\n     */\\n    ComptrollerInterface public comptroller;\\n\\n    /**\\n     * @notice Model which tells what the current interest rate should be\\n     */\\n    InterestRateModel public interestRateModel;\\n\\n    // Initial exchange rate used when minting the first VTokens (used when totalSupply = 0)\\n    uint256 internal initialExchangeRateMantissa;\\n\\n    /**\\n     * @notice Fraction of interest currently set aside for reserves\\n     */\\n    uint256 public reserveFactorMantissa;\\n\\n    /**\\n     * @notice Slot(block or second) number that interest was last accrued at\\n     */\\n    uint256 public accrualBlockNumber;\\n\\n    /**\\n     * @notice Accumulator of the total earned interest rate since the opening of the market\\n     */\\n    uint256 public borrowIndex;\\n\\n    /**\\n     * @notice Total amount of outstanding borrows of the underlying in this market\\n     */\\n    uint256 public totalBorrows;\\n\\n    /**\\n     * @notice Total amount of reserves of the underlying held in this market\\n     */\\n    uint256 public totalReserves;\\n\\n    /**\\n     * @notice Total number of tokens in circulation\\n     */\\n    uint256 public totalSupply;\\n\\n    /**\\n     * @notice Total bad debt of the market\\n     */\\n    uint256 public badDebt;\\n\\n    // Official record of token balances for each account\\n    mapping(address => uint256) internal accountTokens;\\n\\n    // Approved token transfer amounts on behalf of others\\n    mapping(address => mapping(address => uint256)) internal transferAllowances;\\n\\n    // Mapping of account addresses to outstanding borrow balances\\n    mapping(address => BorrowSnapshot) internal accountBorrows;\\n\\n    /**\\n     * @notice Share of seized collateral that is added to reserves\\n     */\\n    uint256 public protocolSeizeShareMantissa;\\n\\n    /**\\n     * @notice Storage of Shortfall contract address\\n     */\\n    address public shortfall;\\n\\n    /**\\n     * @notice delta slot (block or second) after which reserves will be reduced\\n     */\\n    uint256 public reduceReservesBlockDelta;\\n\\n    /**\\n     * @notice last slot (block or second) number at which reserves were reduced\\n     */\\n    uint256 public reduceReservesBlockNumber;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n}\\n\\n/**\\n * @title VTokenInterface\\n * @author Venus\\n * @notice Interface implemented by the `VToken` contract\\n */\\nabstract contract VTokenInterface is VTokenStorage {\\n    struct RiskManagementInit {\\n        address shortfall;\\n        address payable protocolShareReserve;\\n    }\\n\\n    /*** Market Events ***/\\n\\n    /**\\n     * @notice Event emitted when interest is accrued\\n     */\\n    event AccrueInterest(uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when tokens are minted\\n     */\\n    event Mint(address indexed minter, uint256 mintAmount, uint256 mintTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when tokens are redeemed\\n     */\\n    event Redeem(address indexed redeemer, uint256 redeemAmount, uint256 redeemTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when underlying is borrowed\\n     */\\n    event Borrow(address indexed borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when a borrow is repaid\\n     */\\n    event RepayBorrow(\\n        address indexed payer,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        uint256 accountBorrows,\\n        uint256 totalBorrows\\n    );\\n\\n    /**\\n     * @notice Event emitted when bad debt is accumulated on a market\\n     * @param borrower borrower to \\\"forgive\\\"\\n     * @param badDebtDelta amount of new bad debt recorded\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtIncreased(address indexed borrower, uint256 badDebtDelta, uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when bad debt is recovered via an auction\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtRecovered(uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when a borrow is liquidated\\n     */\\n    event LiquidateBorrow(\\n        address indexed liquidator,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        address indexed vTokenCollateral,\\n        uint256 seizeTokens\\n    );\\n\\n    /*** Admin Events ***/\\n\\n    /**\\n     * @notice Event emitted when comptroller is changed\\n     */\\n    event NewComptroller(ComptrollerInterface indexed oldComptroller, ComptrollerInterface indexed newComptroller);\\n\\n    /**\\n     * @notice Event emitted when shortfall contract address is changed\\n     */\\n    event NewShortfallContract(address indexed oldShortfall, address indexed newShortfall);\\n\\n    /**\\n     * @notice Event emitted when protocol share reserve contract address is changed\\n     */\\n    event NewProtocolShareReserve(address indexed oldProtocolShareReserve, address indexed newProtocolShareReserve);\\n\\n    /**\\n     * @notice Event emitted when interestRateModel is changed\\n     */\\n    event NewMarketInterestRateModel(\\n        InterestRateModel indexed oldInterestRateModel,\\n        InterestRateModel indexed newInterestRateModel\\n    );\\n\\n    /**\\n     * @notice Event emitted when protocol seize share is changed\\n     */\\n    event NewProtocolSeizeShare(uint256 oldProtocolSeizeShareMantissa, uint256 newProtocolSeizeShareMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserve factor is changed\\n     */\\n    event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserves are added\\n     */\\n    event ReservesAdded(address indexed benefactor, uint256 addAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice Event emitted when the spread reserves are reduced\\n     */\\n    event SpreadReservesReduced(address indexed protocolShareReserve, uint256 reduceAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice EIP20 Transfer event\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 amount);\\n\\n    /**\\n     * @notice EIP20 Approval event\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\\n\\n    /**\\n     * @notice Event emitted when healing the borrow\\n     */\\n    event HealBorrow(address indexed payer, address indexed borrower, uint256 repayAmount);\\n\\n    /**\\n     * @notice Event emitted when tokens are swept\\n     */\\n    event SweepToken(address indexed token);\\n\\n    /**\\n     * @notice Event emitted when reduce reserves slot (block or second) delta is changed\\n     */\\n    event NewReduceReservesBlockDelta(\\n        uint256 oldReduceReservesBlockOrTimestampDelta,\\n        uint256 newReduceReservesBlockOrTimestampDelta\\n    );\\n\\n    /**\\n     * @notice Event emitted when liquidation reserves are reduced\\n     */\\n    event ProtocolSeize(address indexed from, address indexed to, uint256 amount);\\n\\n    /*** User Interface ***/\\n\\n    function mint(uint256 mintAmount) external virtual returns (uint256);\\n\\n    function mintBehalf(address minter, uint256 mintAllowed) external virtual returns (uint256);\\n\\n    function redeem(uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemUnderlying(uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function redeemUnderlyingBehalf(address redeemer, uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function borrow(uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function borrowBehalf(address borrwwer, uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function repayBorrow(uint256 repayAmount) external virtual returns (uint256);\\n\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external virtual returns (uint256);\\n\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external virtual returns (uint256);\\n\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external virtual;\\n\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipCloseFactorCheck\\n    ) external virtual;\\n\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external virtual;\\n\\n    function transfer(address dst, uint256 amount) external virtual returns (bool);\\n\\n    function transferFrom(address src, address dst, uint256 amount) external virtual returns (bool);\\n\\n    function accrueInterest() external virtual returns (uint256);\\n\\n    function sweepToken(IERC20Upgradeable token) external virtual;\\n\\n    /*** Admin Functions ***/\\n\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external virtual;\\n\\n    function reduceReserves(uint256 reduceAmount) external virtual;\\n\\n    function exchangeRateCurrent() external virtual returns (uint256);\\n\\n    function borrowBalanceCurrent(address account) external virtual returns (uint256);\\n\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external virtual;\\n\\n    function addReserves(uint256 addAmount) external virtual;\\n\\n    function totalBorrowsCurrent() external virtual returns (uint256);\\n\\n    function balanceOfUnderlying(address owner) external virtual returns (uint256);\\n\\n    function approve(address spender, uint256 amount) external virtual returns (bool);\\n\\n    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool);\\n\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool);\\n\\n    function allowance(address owner, address spender) external view virtual returns (uint256);\\n\\n    function balanceOf(address owner) external view virtual returns (uint256);\\n\\n    function getAccountSnapshot(address account) external view virtual returns (uint256, uint256, uint256, uint256);\\n\\n    function borrowRatePerBlock() external view virtual returns (uint256);\\n\\n    function supplyRatePerBlock() external view virtual returns (uint256);\\n\\n    function borrowBalanceStored(address account) external view virtual returns (uint256);\\n\\n    function exchangeRateStored() external view virtual returns (uint256);\\n\\n    function getCash() external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is a VToken contract (for inspection)\\n     * @return Always true\\n     */\\n    function isVToken() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7c4cbb879e3a931cfee4fa7a9eb1978eddff18087a1c4f56decedb84c2479f1e\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\",\"keccak256\":\"0x54ab3a6f3bc87569ed12370f3470a1ec84cea9796d4d0ccf3d07dd4280c044aa\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/validators.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\\nerror ZeroAddressNotAllowed();\\n\\n/// @notice Checks if the provided address is nonzero, reverts otherwise\\n/// @param address_ Address to check\\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\\nfunction ensureNonzeroAddress(address address_) pure {\\n    if (address_ == address(0)) {\\n        revert ZeroAddressNotAllowed();\\n    }\\n}\\n\",\"keccak256\":\"0x93bdd5cfb100f0f9a1d446857e23c3633df6ab12c266333c978428edd96b1367\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface IProtocolShareReserve {\\n    /// @notice it represents the type of vToken income\\n    enum IncomeType {\\n        SPREAD,\\n        LIQUIDATION\\n    }\\n\\n    function updateAssetsState(\\n        address comptroller,\\n        address asset,\\n        IncomeType incomeType\\n    ) external;\\n}\\n\",\"keccak256\":\"0x5fddc5b63fdd850b3b5c83576cda50dcb27a205dbb1a23af17d9da0d9f04fa0a\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { SECONDS_PER_YEAR } from \\\"./constants.sol\\\";\\n\\nabstract contract TimeManagerV8 {\\n    /// @notice Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 public immutable blocksOrSecondsPerYear;\\n\\n    /// @notice Acknowledges if a contract is time based or not\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    bool public immutable isTimeBased;\\n\\n    /// @notice Stores the current block timestamp or block number depending on isTimeBased\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    function() view returns (uint256) private immutable _getCurrentSlot;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n\\n    /// @notice Thrown when blocks per year is invalid\\n    error InvalidBlocksPerYear();\\n\\n    /// @notice Thrown when time based but blocks per year is provided\\n    error InvalidTimeBasedConfiguration();\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block\\n     * If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:error InvalidBlocksPerYear is thrown if blocksPerYear entered is zero and timeBased is false\\n     * @custom:error InvalidTimeBasedConfiguration is thrown if blocksPerYear entered is non zero and timeBased is true\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) {\\n        if (!timeBased_ && blocksPerYear_ == 0) {\\n            revert InvalidBlocksPerYear();\\n        }\\n\\n        if (timeBased_ && blocksPerYear_ != 0) {\\n            revert InvalidTimeBasedConfiguration();\\n        }\\n\\n        isTimeBased = timeBased_;\\n        blocksOrSecondsPerYear = timeBased_ ? SECONDS_PER_YEAR : blocksPerYear_;\\n        _getCurrentSlot = timeBased_ ? _getBlockTimestamp : _getBlockNumber;\\n    }\\n\\n    /**\\n     * @dev Function to simply retrieve block number or block timestamp\\n     * @return Current block number or block timestamp\\n     */\\n    function getBlockNumberOrTimestamp() public view virtual returns (uint256) {\\n        return _getCurrentSlot();\\n    }\\n\\n    /**\\n     * @dev Returns the current timestamp in seconds\\n     * @return The current timestamp\\n     */\\n    function _getBlockTimestamp() private view returns (uint256) {\\n        return block.timestamp;\\n    }\\n\\n    /**\\n     * @dev Returns the current block number\\n     * @return The current block number\\n     */\\n    function _getBlockNumber() private view returns (uint256) {\\n        return block.number;\\n    }\\n}\\n\",\"keccak256\":\"0x57a2bbb9b8e02b1c0a5c0e305fef1328a22db56c3d4b148c362010a6e767243c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\",\"keccak256\":\"0x14de93ead464da249af31bea0e3bcfb62ec693bea3475fb4d90f055ac81dc5eb\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { PrimeStorageV1 } from \\\"../PrimeStorage.sol\\\";\\n\\n/**\\n * @title IPrime\\n * @author Venus\\n * @notice Interface for Prime Token\\n */\\ninterface IPrime {\\n    struct APRInfo {\\n        // supply APR of the user in BPS\\n        uint256 supplyAPR;\\n        // borrow APR of the user in BPS\\n        uint256 borrowAPR;\\n        // total score of the market\\n        uint256 totalScore;\\n        // score of the user\\n        uint256 userScore;\\n        // capped XVS balance of the user\\n        uint256 xvsBalanceForScore;\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    struct Capital {\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    /**\\n     * @notice Returns boosted pending interest accrued for a user for all markets\\n     * @param user the account for which to get the accrued interests\\n     * @return pendingRewards the number of underlying tokens accrued by the user for all markets\\n     */\\n    function getPendingRewards(address user) external returns (PrimeStorageV1.PendingReward[] memory pendingRewards);\\n\\n    /**\\n     * @notice Update total score of multiple users and market\\n     * @param users accounts for which we need to update score\\n     */\\n    function updateScores(address[] memory users) external;\\n\\n    /**\\n     * @notice Update value of alpha\\n     * @param _alphaNumerator numerator of alpha. If alpha is 0.5 then numerator is 1\\n     * @param _alphaDenominator denominator of alpha. If alpha is 0.5 then denominator is 2\\n     */\\n    function updateAlpha(uint128 _alphaNumerator, uint128 _alphaDenominator) external;\\n\\n    /**\\n     * @notice Update multipliers for a market\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier new supply multiplier for the market, scaled by 1e18\\n     * @param borrowMultiplier new borrow multiplier for the market, scaled by 1e18\\n     */\\n    function updateMultipliers(address market, uint256 supplyMultiplier, uint256 borrowMultiplier) external;\\n\\n    /**\\n     * @notice Add a market to prime program\\n     * @param comptroller address of the comptroller\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier the multiplier for supply cap. It should be converted to 1e18\\n     * @param borrowMultiplier the multiplier for borrow cap. It should be converted to 1e18\\n     */\\n    function addMarket(\\n        address comptroller,\\n        address market,\\n        uint256 supplyMultiplier,\\n        uint256 borrowMultiplier\\n    ) external;\\n\\n    /**\\n     * @notice Set limits for total tokens that can be minted\\n     * @param _irrevocableLimit total number of irrevocable tokens that can be minted\\n     * @param _revocableLimit total number of revocable tokens that can be minted\\n     */\\n    function setLimit(uint256 _irrevocableLimit, uint256 _revocableLimit) external;\\n\\n    /**\\n     * @notice Directly issue prime tokens to users\\n     * @param isIrrevocable are the tokens being issued\\n     * @param users list of address to issue tokens to\\n     */\\n    function issue(bool isIrrevocable, address[] calldata users) external;\\n\\n    /**\\n     * @notice Executed by XVSVault whenever user's XVSVault balance changes\\n     * @param user the account address whose balance was updated\\n     */\\n    function xvsUpdated(address user) external;\\n\\n    /**\\n     * @notice accrues interest and updates score for an user for a specific market\\n     * @param user the account address for which to accrue interest and update score\\n     * @param market the market for which to accrue interest and update score\\n     */\\n    function accrueInterestAndUpdateScore(address user, address market) external;\\n\\n    /**\\n     * @notice For claiming prime token when staking period is completed\\n     */\\n    function claim() external;\\n\\n    /**\\n     * @notice For burning any prime token\\n     * @param user the account address for which the prime token will be burned\\n     */\\n    function burn(address user) external;\\n\\n    /**\\n     * @notice To pause or unpause claiming of interest\\n     */\\n    function togglePause() external;\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken) external returns (uint256);\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @param user the user for which to claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Distributes income from market since last distribution\\n     * @param vToken the market for which to distribute the income\\n     */\\n    function accrueInterest(address vToken) external;\\n\\n    /**\\n     * @notice Returns boosted interest accrued for a user\\n     * @param vToken the market for which to fetch the accrued interest\\n     * @param user the account for which to get the accrued interest\\n     * @return interestAccrued the number of underlying tokens accrued by the user since the last accrual\\n     */\\n    function getInterestAccrued(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Retrieves an array of all available markets\\n     * @return an array of addresses representing all available markets\\n     */\\n    function getAllMarkets() external view returns (address[] memory);\\n\\n    /**\\n     * @notice fetch the numbers of seconds remaining for staking period to complete\\n     * @param user the account address for which we are checking the remaining time\\n     * @return timeRemaining the number of seconds the user needs to wait to claim prime token\\n     */\\n    function claimTimeRemaining(address user) external view returns (uint256);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for user for a given market\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function calculateAPR(address market, address user) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for estimated supply, borrow and XVS staked\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @param borrow hypothetical borrow amount\\n     * @param supply hypothetical supply amount\\n     * @param xvsStaked hypothetical staked XVS amount\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function estimateAPR(\\n        address market,\\n        address user,\\n        uint256 borrow,\\n        uint256 supply,\\n        uint256 xvsStaked\\n    ) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice the total income that's going to be distributed in a year to prime token holders\\n     * @param vToken the market for which to fetch the total income that's going to distributed in a year\\n     * @return amount the total income\\n     */\\n    function incomeDistributionYearly(address vToken) external view returns (uint256 amount);\\n\\n    /**\\n     * @notice Returns if user is a prime holder\\n     * @return isPrimeHolder true if user is a prime holder\\n     */\\n    function isUserPrimeHolder(address user) external view returns (bool);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param loopsLimit Number of loops limit\\n     */\\n    function setMaxLoopsLimit(uint256 loopsLimit) external;\\n\\n    /**\\n     * @notice Update staked at timestamp for multiple users\\n     * @param users accounts for which we need to update staked at timestamp\\n     * @param timestamps new staked at timestamp for the users\\n     */\\n    function setStakedAt(address[] calldata users, uint256[] calldata timestamps) external;\\n}\\n\",\"keccak256\":\"0xd112f60183416ad796093b4a83a80ddc1b8b655965f02ae55ca82e2a0c68f97d\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\n/**\\n * @title PrimeStorageV1\\n * @author Venus\\n * @notice Storage for Prime Token\\n */\\ncontract PrimeStorageV1 {\\n    struct Token {\\n        bool exists;\\n        bool isIrrevocable;\\n    }\\n\\n    struct Market {\\n        uint256 supplyMultiplier;\\n        uint256 borrowMultiplier;\\n        uint256 rewardIndex;\\n        uint256 sumOfMembersScore;\\n        bool exists;\\n    }\\n\\n    struct Interest {\\n        uint256 accrued;\\n        uint256 score;\\n        uint256 rewardIndex;\\n    }\\n\\n    struct PendingReward {\\n        address vToken;\\n        address rewardToken;\\n        uint256 amount;\\n    }\\n\\n    /// @notice Base unit for computations, usually used in scaling (multiplications, divisions)\\n    uint256 internal constant EXP_SCALE = 1e18;\\n\\n    /// @notice maximum BPS = 100%\\n    uint256 internal constant MAXIMUM_BPS = 1e4;\\n\\n    /// @notice Mapping to get prime token's metadata\\n    mapping(address => Token) public tokens;\\n\\n    /// @notice  Tracks total irrevocable tokens minted\\n    uint256 public totalIrrevocable;\\n\\n    /// @notice  Tracks total revocable tokens minted\\n    uint256 public totalRevocable;\\n\\n    /// @notice  Indicates maximum revocable tokens that can be minted\\n    uint256 public revocableLimit;\\n\\n    /// @notice  Indicates maximum irrevocable tokens that can be minted\\n    uint256 public irrevocableLimit;\\n\\n    /// @notice Tracks when prime token eligible users started staking for claiming prime token\\n    mapping(address => uint256) public stakedAt;\\n\\n    /// @notice vToken to market configuration\\n    mapping(address => Market) public markets;\\n\\n    /// @notice vToken to user to user index\\n    mapping(address => mapping(address => Interest)) public interests;\\n\\n    /// @notice A list of boosted markets\\n    address[] internal _allMarkets;\\n\\n    /// @notice numerator of alpha. Ex: if alpha is 0.5 then this will be 1\\n    uint128 public alphaNumerator;\\n\\n    /// @notice denominator of alpha. Ex: if alpha is 0.5 then this will be 2\\n    uint128 public alphaDenominator;\\n\\n    /// @notice address of XVS vault\\n    address public xvsVault;\\n\\n    /// @notice address of XVS vault reward token\\n    address public xvsVaultRewardToken;\\n\\n    /// @notice address of XVS vault pool id\\n    uint256 public xvsVaultPoolId;\\n\\n    /// @notice mapping to check if a account's score was updated in the round\\n    mapping(uint256 => mapping(address => bool)) public isScoreUpdated;\\n\\n    /// @notice unique id for next round\\n    uint256 public nextScoreUpdateRoundId;\\n\\n    /// @notice total number of accounts whose score needs to be updated\\n    uint256 public totalScoreUpdatesRequired;\\n\\n    /// @notice total number of accounts whose score is yet to be updated\\n    uint256 public pendingScoreUpdates;\\n\\n    /// @notice mapping used to find if an asset is part of prime markets\\n    mapping(address => address) public vTokenForAsset;\\n\\n    /// @notice Address of core pool comptroller contract\\n    address internal corePoolComptroller;\\n\\n    /// @notice unreleased income from PLP that's already distributed to prime holders\\n    /// @dev mapping of asset address => amount\\n    mapping(address => uint256) public unreleasedPLPIncome;\\n\\n    /// @notice The address of PLP contract\\n    address public primeLiquidityProvider;\\n\\n    /// @notice The address of ResilientOracle contract\\n    ResilientOracleInterface public oracle;\\n\\n    /// @notice The address of PoolRegistry contract\\n    address public poolRegistry;\\n\\n    /// @dev This empty reserved space is put in place to allow future versions to add new\\n    /// variables without shifting down storage in the inheritance chain.\\n    uint256[26] private __gap;\\n}\\n\",\"keccak256\":\"0x5285c875114db2ea2be0b81b65722d5761806217022db733323c4e03365a95e7\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[{"astId":9488,"contract":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol:ComptrollerStorage","label":"oracle","offset":0,"slot":"0","type":"t_contract(ResilientOracleInterface)16173"},{"astId":9491,"contract":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol:ComptrollerStorage","label":"closeFactorMantissa","offset":0,"slot":"1","type":"t_uint256"},{"astId":9494,"contract":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol:ComptrollerStorage","label":"liquidationIncentiveMantissa","offset":0,"slot":"2","type":"t_uint256"},{"astId":9501,"contract":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol:ComptrollerStorage","label":"accountAssets","offset":0,"slot":"3","type":"t_mapping(t_address,t_array(t_contract(VToken)15506)dyn_storage)"},{"astId":9507,"contract":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol:ComptrollerStorage","label":"markets","offset":0,"slot":"4","type":"t_mapping(t_address,t_struct(Market)9484_storage)"},{"astId":9512,"contract":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol:ComptrollerStorage","label":"allMarkets","offset":0,"slot":"5","type":"t_array(t_contract(VToken)15506)dyn_storage"},{"astId":9517,"contract":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol:ComptrollerStorage","label":"borrowCaps","offset":0,"slot":"6","type":"t_mapping(t_address,t_uint256)"},{"astId":9520,"contract":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol:ComptrollerStorage","label":"minLiquidatableCollateral","offset":0,"slot":"7","type":"t_uint256"},{"astId":9525,"contract":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol:ComptrollerStorage","label":"supplyCaps","offset":0,"slot":"8","type":"t_mapping(t_address,t_uint256)"},{"astId":9533,"contract":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol:ComptrollerStorage","label":"_actionPaused","offset":0,"slot":"9","type":"t_mapping(t_address,t_mapping(t_enum(Action)9148,t_bool))"},{"astId":9537,"contract":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol:ComptrollerStorage","label":"rewardsDistributors","offset":0,"slot":"10","type":"t_array(t_contract(RewardsDistributor)12324)dyn_storage"},{"astId":9541,"contract":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol:ComptrollerStorage","label":"rewardsDistributorExists","offset":0,"slot":"11","type":"t_mapping(t_address,t_bool)"},{"astId":9546,"contract":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol:ComptrollerStorage","label":"isForcedLiquidationEnabled","offset":0,"slot":"12","type":"t_mapping(t_address,t_bool)"},{"astId":9562,"contract":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol:ComptrollerStorage","label":"prime","offset":0,"slot":"13","type":"t_contract(IPrime)16613"},{"astId":9569,"contract":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol:ComptrollerStorage","label":"approvedDelegates","offset":0,"slot":"14","type":"t_mapping(t_address,t_mapping(t_address,t_bool))"},{"astId":9574,"contract":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol:ComptrollerStorage","label":"__gap","offset":0,"slot":"15","type":"t_array(t_uint256)47_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_contract(RewardsDistributor)12324)dyn_storage":{"base":"t_contract(RewardsDistributor)12324","encoding":"dynamic_array","label":"contract RewardsDistributor[]","numberOfBytes":"32"},"t_array(t_contract(VToken)15506)dyn_storage":{"base":"t_contract(VToken)15506","encoding":"dynamic_array","label":"contract VToken[]","numberOfBytes":"32"},"t_array(t_uint256)47_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[47]","numberOfBytes":"1504"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(IPrime)16613":{"encoding":"inplace","label":"contract IPrime","numberOfBytes":"20"},"t_contract(ResilientOracleInterface)16173":{"encoding":"inplace","label":"contract ResilientOracleInterface","numberOfBytes":"20"},"t_contract(RewardsDistributor)12324":{"encoding":"inplace","label":"contract RewardsDistributor","numberOfBytes":"20"},"t_contract(VToken)15506":{"encoding":"inplace","label":"contract VToken","numberOfBytes":"20"},"t_enum(Action)9148":{"encoding":"inplace","label":"enum Action","numberOfBytes":"1"},"t_mapping(t_address,t_array(t_contract(VToken)15506)dyn_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => contract VToken[])","numberOfBytes":"32","value":"t_array(t_contract(VToken)15506)dyn_storage"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_mapping(t_address,t_bool))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => bool))","numberOfBytes":"32","value":"t_mapping(t_address,t_bool)"},"t_mapping(t_address,t_mapping(t_enum(Action)9148,t_bool))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(enum Action => bool))","numberOfBytes":"32","value":"t_mapping(t_enum(Action)9148,t_bool)"},"t_mapping(t_address,t_struct(Market)9484_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct ComptrollerStorage.Market)","numberOfBytes":"32","value":"t_struct(Market)9484_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_enum(Action)9148,t_bool)":{"encoding":"mapping","key":"t_enum(Action)9148","label":"mapping(enum Action => bool)","numberOfBytes":"32","value":"t_bool"},"t_struct(Market)9484_storage":{"encoding":"inplace","label":"struct ComptrollerStorage.Market","members":[{"astId":9475,"contract":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol:ComptrollerStorage","label":"isListed","offset":0,"slot":"0","type":"t_bool"},{"astId":9477,"contract":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol:ComptrollerStorage","label":"collateralFactorMantissa","offset":0,"slot":"1","type":"t_uint256"},{"astId":9479,"contract":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol:ComptrollerStorage","label":"liquidationThresholdMantissa","offset":0,"slot":"2","type":"t_uint256"},{"astId":9483,"contract":"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol:ComptrollerStorage","label":"accountMembership","offset":0,"slot":"3","type":"t_mapping(t_address,t_bool)"}],"numberOfBytes":"128"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"accountAssets(address,uint256)":{"notice":"Per-account mapping of \"assets you are in\""},"allMarkets(uint256)":{"notice":"A list of all markets"},"approvedDelegates(address,address)":{"notice":"Whether the delegate is allowed to borrow or redeem on behalf of the user"},"borrowCaps(address)":{"notice":"Borrow caps enforced by borrowAllowed for each vToken address. Defaults to zero which restricts borrowing."},"closeFactorMantissa()":{"notice":"Multiplier used to calculate the maximum repayAmount when liquidating a borrow"},"isForcedLiquidationEnabled(address)":{"notice":"Flag indicating whether forced liquidation enabled for a market"},"liquidationIncentiveMantissa()":{"notice":"Multiplier representing the discount on collateral that a liquidator receives"},"markets(address)":{"notice":"Official mapping of vTokens -> Market metadata"},"minLiquidatableCollateral()":{"notice":"Minimal collateral required for regular (non-batch) liquidations"},"oracle()":{"notice":"Oracle which gives the price of any given asset"},"prime()":{"notice":"Prime token address"},"supplyCaps(address)":{"notice":"Supply caps enforced by mintAllowed for each vToken address. Defaults to zero which corresponds to minting not allowed"}},"notice":"Storage layout for the `Comptroller` contract.","version":1}}},"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol":{"TokenErrorReporter":{"abi":[{"inputs":[{"internalType":"uint256","name":"actualAddAmount","type":"uint256"}],"name":"AddReservesFactorFreshCheck","type":"error"},{"inputs":[],"name":"BorrowCashNotAvailable","type":"error"},{"inputs":[],"name":"BorrowFreshnessCheck","type":"error"},{"inputs":[],"name":"DelegateNotApproved","type":"error"},{"inputs":[],"name":"ForceLiquidateBorrowUnauthorized","type":"error"},{"inputs":[],"name":"HealBorrowUnauthorized","type":"error"},{"inputs":[{"internalType":"uint256","name":"errorCode","type":"uint256"}],"name":"LiquidateAccrueCollateralInterestFailed","type":"error"},{"inputs":[],"name":"LiquidateCloseAmountIsUintMax","type":"error"},{"inputs":[],"name":"LiquidateCloseAmountIsZero","type":"error"},{"inputs":[],"name":"LiquidateCollateralFreshnessCheck","type":"error"},{"inputs":[],"name":"LiquidateFreshnessCheck","type":"error"},{"inputs":[],"name":"LiquidateLiquidatorIsBorrower","type":"error"},{"inputs":[],"name":"LiquidateSeizeLiquidatorIsBorrower","type":"error"},{"inputs":[],"name":"MintFreshnessCheck","type":"error"},{"inputs":[],"name":"ProtocolSeizeShareTooBig","type":"error"},{"inputs":[],"name":"RedeemFreshnessCheck","type":"error"},{"inputs":[],"name":"RedeemTransferOutNotPossible","type":"error"},{"inputs":[],"name":"ReduceReservesCashNotAvailable","type":"error"},{"inputs":[],"name":"ReduceReservesCashValidation","type":"error"},{"inputs":[],"name":"ReduceReservesFreshCheck","type":"error"},{"inputs":[],"name":"RepayBorrowFreshnessCheck","type":"error"},{"inputs":[],"name":"SetInterestRateModelFreshCheck","type":"error"},{"inputs":[],"name":"SetReserveFactorBoundsCheck","type":"error"},{"inputs":[],"name":"SetReserveFactorFreshCheck","type":"error"},{"inputs":[],"name":"TransferNotAllowed","type":"error"},{"inputs":[],"name":"NO_ERROR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Venus","kind":"dev","methods":{},"title":"TokenErrorReporter","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080604052348015600f57600080fd5b50607c80601d6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806369ab325014602d575b600080fd5b6034600081565b60405190815260200160405180910390f3fea2646970667358221220af5567892e53ed95001cf56290342e331ca62d07c3ee8a11caaa9bc69900cd7e64736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x7C DUP1 PUSH1 0x1D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x69AB3250 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x34 PUSH1 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF SSTORE PUSH8 0x892E53ED95001CF5 PUSH3 0x90342E CALLER SHR 0xA6 0x2D SMOD 0xC3 0xEE DUP11 GT 0xCA 0xAA SWAP12 0xC6 SWAP10 STOP 0xCD PUSH31 0x64736F6C634300081900330000000000000000000000000000000000000000 ","sourceMap":"183:1160:31:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@NO_ERROR_9581":{"entryPoint":null,"id":9581,"parameterSlots":0,"returnSlots":0},"abi_encode_t_uint256_to_t_uint256_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nativeSrc":"0:439:69","nodeType":"YulBlock","src":"0:439:69","statements":[{"body":{"nativeSrc":"52:32:69","nodeType":"YulBlock","src":"52:32:69","statements":[{"nativeSrc":"62:16:69","nodeType":"YulAssignment","src":"62:16:69","value":{"name":"value","nativeSrc":"73:5:69","nodeType":"YulIdentifier","src":"73:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"62:7:69","nodeType":"YulIdentifier","src":"62:7:69"}]}]},"name":"cleanup_t_uint256","nativeSrc":"7:77:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"34:5:69","nodeType":"YulTypedName","src":"34:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"44:7:69","nodeType":"YulTypedName","src":"44:7:69","type":""}],"src":"7:77:69"},{"body":{"nativeSrc":"155:53:69","nodeType":"YulBlock","src":"155:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"172:3:69","nodeType":"YulIdentifier","src":"172:3:69"},{"arguments":[{"name":"value","nativeSrc":"195:5:69","nodeType":"YulIdentifier","src":"195:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"177:17:69","nodeType":"YulIdentifier","src":"177:17:69"},"nativeSrc":"177:24:69","nodeType":"YulFunctionCall","src":"177:24:69"}],"functionName":{"name":"mstore","nativeSrc":"165:6:69","nodeType":"YulIdentifier","src":"165:6:69"},"nativeSrc":"165:37:69","nodeType":"YulFunctionCall","src":"165:37:69"},"nativeSrc":"165:37:69","nodeType":"YulExpressionStatement","src":"165:37:69"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"90:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"143:5:69","nodeType":"YulTypedName","src":"143:5:69","type":""},{"name":"pos","nativeSrc":"150:3:69","nodeType":"YulTypedName","src":"150:3:69","type":""}],"src":"90:118:69"},{"body":{"nativeSrc":"312:124:69","nodeType":"YulBlock","src":"312:124:69","statements":[{"nativeSrc":"322:26:69","nodeType":"YulAssignment","src":"322:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"334:9:69","nodeType":"YulIdentifier","src":"334:9:69"},{"kind":"number","nativeSrc":"345:2:69","nodeType":"YulLiteral","src":"345:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"330:3:69","nodeType":"YulIdentifier","src":"330:3:69"},"nativeSrc":"330:18:69","nodeType":"YulFunctionCall","src":"330:18:69"},"variableNames":[{"name":"tail","nativeSrc":"322:4:69","nodeType":"YulIdentifier","src":"322:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"402:6:69","nodeType":"YulIdentifier","src":"402:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"415:9:69","nodeType":"YulIdentifier","src":"415:9:69"},{"kind":"number","nativeSrc":"426:1:69","nodeType":"YulLiteral","src":"426:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"411:3:69","nodeType":"YulIdentifier","src":"411:3:69"},"nativeSrc":"411:17:69","nodeType":"YulFunctionCall","src":"411:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"358:43:69","nodeType":"YulIdentifier","src":"358:43:69"},"nativeSrc":"358:71:69","nodeType":"YulFunctionCall","src":"358:71:69"},"nativeSrc":"358:71:69","nodeType":"YulExpressionStatement","src":"358:71:69"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nativeSrc":"214:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"284:9:69","nodeType":"YulTypedName","src":"284:9:69","type":""},{"name":"value0","nativeSrc":"296:6:69","nodeType":"YulTypedName","src":"296:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"307:4:69","nodeType":"YulTypedName","src":"307:4:69","type":""}],"src":"214:222:69"}]},"contents":"{\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint256(value))\n    }\n\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052348015600f57600080fd5b506004361060285760003560e01c806369ab325014602d575b600080fd5b6034600081565b60405190815260200160405180910390f3fea2646970667358221220af5567892e53ed95001cf56290342e331ca62d07c3ee8a11caaa9bc69900cd7e64736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x69AB3250 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x34 PUSH1 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF SSTORE PUSH8 0x892E53ED95001CF5 PUSH3 0x90342E CALLER SHR 0xA6 0x2D SMOD 0xC3 0xEE DUP11 GT 0xCA 0xAA SWAP12 0xC6 SWAP10 STOP 0xCD PUSH31 0x64736F6C634300081900330000000000000000000000000000000000000000 ","sourceMap":"183:1160:31:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;217:36;;252:1;217:36;;;;;165:37:69;;;345:2;330:18;217:36:31;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"24800","executionCost":"75","totalCost":"24875"},"external":{"NO_ERROR()":"161"}},"methodIdentifiers":{"NO_ERROR()":"69ab3250"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actualAddAmount\",\"type\":\"uint256\"}],\"name\":\"AddReservesFactorFreshCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BorrowCashNotAvailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BorrowFreshnessCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DelegateNotApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForceLiquidateBorrowUnauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HealBorrowUnauthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"errorCode\",\"type\":\"uint256\"}],\"name\":\"LiquidateAccrueCollateralInterestFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidateCloseAmountIsUintMax\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidateCloseAmountIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidateCollateralFreshnessCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidateFreshnessCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidateLiquidatorIsBorrower\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidateSeizeLiquidatorIsBorrower\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MintFreshnessCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSeizeShareTooBig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RedeemFreshnessCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RedeemTransferOutNotPossible\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReduceReservesCashNotAvailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReduceReservesCashValidation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReduceReservesFreshCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepayBorrowFreshnessCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SetInterestRateModelFreshCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SetReserveFactorBoundsCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SetReserveFactorFreshCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NO_ERROR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"kind\":\"dev\",\"methods\":{},\"title\":\"TokenErrorReporter\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Errors that can be thrown by the `VToken` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol\":\"TokenErrorReporter\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title TokenErrorReporter\\n * @author Venus\\n * @notice Errors that can be thrown by the `VToken` contract.\\n */\\ncontract TokenErrorReporter {\\n    uint256 public constant NO_ERROR = 0; // support legacy return codes\\n\\n    error TransferNotAllowed();\\n\\n    error MintFreshnessCheck();\\n\\n    error RedeemFreshnessCheck();\\n    error RedeemTransferOutNotPossible();\\n\\n    error BorrowFreshnessCheck();\\n    error BorrowCashNotAvailable();\\n    error DelegateNotApproved();\\n\\n    error RepayBorrowFreshnessCheck();\\n\\n    error HealBorrowUnauthorized();\\n    error ForceLiquidateBorrowUnauthorized();\\n\\n    error LiquidateFreshnessCheck();\\n    error LiquidateCollateralFreshnessCheck();\\n    error LiquidateAccrueCollateralInterestFailed(uint256 errorCode);\\n    error LiquidateLiquidatorIsBorrower();\\n    error LiquidateCloseAmountIsZero();\\n    error LiquidateCloseAmountIsUintMax();\\n\\n    error LiquidateSeizeLiquidatorIsBorrower();\\n\\n    error ProtocolSeizeShareTooBig();\\n\\n    error SetReserveFactorFreshCheck();\\n    error SetReserveFactorBoundsCheck();\\n\\n    error AddReservesFactorFreshCheck(uint256 actualAddAmount);\\n\\n    error ReduceReservesFreshCheck();\\n    error ReduceReservesCashNotAvailable();\\n    error ReduceReservesCashValidation();\\n\\n    error SetInterestRateModelFreshCheck();\\n}\\n\",\"keccak256\":\"0x7a7ced1caaac2d9242659ebd50b99f308c725ce958ac9e11f7ada404b1d97a7b\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Errors that can be thrown by the `VToken` contract.","version":1}}},"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol":{"ExponentialNoError":{"abi":[],"devdoc":{"author":"Compound","kind":"dev","methods":{},"title":"Exponential module for storing fixed-precision decimals","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e7914b300acc7adb642a1b71485ab7bfef033499638bd9be9380787a2567e46b64736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3F DUP1 PUSH1 0x1D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE7 SWAP2 0x4B ADDRESS EXP 0xCC PUSH27 0xDB642A1B71485AB7BFEF033499638BD9BE9380787A2567E46B6473 PUSH16 0x6C634300081900330000000000000000 ","sourceMap":"486:5105:32:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600080fdfea2646970667358221220e7914b300acc7adb642a1b71485ab7bfef033499638bd9be9380787a2567e46b64736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE7 SWAP2 0x4B ADDRESS EXP 0xCC PUSH27 0xDB642A1B71485AB7BFEF033499638BD9BE9380787A2567E46B6473 PUSH16 0x6C634300081900330000000000000000 ","sourceMap":"486:5105:32:-:0;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"12600","executionCost":"66","totalCost":"12666"},"internal":{"add_(struct ExponentialNoError.Double memory,struct ExponentialNoError.Double memory)":"infinite","add_(struct ExponentialNoError.Exp memory,struct ExponentialNoError.Exp memory)":"infinite","add_(uint256,uint256)":"infinite","div_(struct ExponentialNoError.Double memory,struct ExponentialNoError.Double memory)":"infinite","div_(struct ExponentialNoError.Double memory,uint256)":"infinite","div_(struct ExponentialNoError.Exp memory,struct ExponentialNoError.Exp memory)":"infinite","div_(struct ExponentialNoError.Exp memory,uint256)":"infinite","div_(uint256,struct ExponentialNoError.Double memory)":"infinite","div_(uint256,struct ExponentialNoError.Exp memory)":"infinite","div_(uint256,uint256)":"infinite","fraction(uint256,uint256)":"infinite","lessThanExp(struct ExponentialNoError.Exp memory,struct ExponentialNoError.Exp memory)":"infinite","mul_(struct ExponentialNoError.Double memory,struct ExponentialNoError.Double memory)":"infinite","mul_(struct ExponentialNoError.Double memory,uint256)":"infinite","mul_(struct ExponentialNoError.Exp memory,struct ExponentialNoError.Exp memory)":"infinite","mul_(struct ExponentialNoError.Exp memory,uint256)":"infinite","mul_(uint256,struct ExponentialNoError.Double memory)":"infinite","mul_(uint256,struct ExponentialNoError.Exp memory)":"infinite","mul_(uint256,uint256)":"infinite","mul_ScalarTruncate(struct ExponentialNoError.Exp memory,uint256)":"infinite","mul_ScalarTruncateAddUInt(struct ExponentialNoError.Exp memory,uint256,uint256)":"infinite","safe224(uint256,string memory)":"infinite","safe32(uint256,string memory)":"infinite","sub_(struct ExponentialNoError.Double memory,struct ExponentialNoError.Double memory)":"infinite","sub_(struct ExponentialNoError.Exp memory,struct ExponentialNoError.Exp memory)":"infinite","sub_(uint256,uint256)":"infinite","truncate(struct ExponentialNoError.Exp memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Compound\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Exponential module for storing fixed-precision decimals\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Exp is a struct which stores decimals with a fixed precision of 18 decimal places.         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:         `Exp({mantissa: 5100000000000000000})`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol\":\"ExponentialNoError\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { EXP_SCALE as EXP_SCALE_, MANTISSA_ONE as MANTISSA_ONE_ } from \\\"./lib/constants.sol\\\";\\n\\n/**\\n * @title Exponential module for storing fixed-precision decimals\\n * @author Compound\\n * @notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.\\n *         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:\\n *         `Exp({mantissa: 5100000000000000000})`.\\n */\\ncontract ExponentialNoError {\\n    struct Exp {\\n        uint256 mantissa;\\n    }\\n\\n    struct Double {\\n        uint256 mantissa;\\n    }\\n\\n    uint256 internal constant EXP_SCALE = EXP_SCALE_;\\n    uint256 internal constant DOUBLE_SCALE = 1e36;\\n    uint256 internal constant HALF_EXP_SCALE = EXP_SCALE / 2;\\n    uint256 internal constant MANTISSA_ONE = MANTISSA_ONE_;\\n\\n    /**\\n     * @dev Truncates the given exp to a whole number value.\\n     *      For example, truncate(Exp{mantissa: 15 * EXP_SCALE}) = 15\\n     */\\n    function truncate(Exp memory exp) internal pure returns (uint256) {\\n        // Note: We are not using careful math here as we're performing a division that cannot fail\\n        return exp.mantissa / EXP_SCALE;\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, then truncate to return an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncate(Exp memory a, uint256 scalar) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return truncate(product);\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncateAddUInt(Exp memory a, uint256 scalar, uint256 addend) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return add_(truncate(product), addend);\\n    }\\n\\n    /**\\n     * @dev Checks if first Exp is less than second Exp.\\n     */\\n    function lessThanExp(Exp memory left, Exp memory right) internal pure returns (bool) {\\n        return left.mantissa < right.mantissa;\\n    }\\n\\n    function safe224(uint256 n, string memory errorMessage) internal pure returns (uint224) {\\n        require(n <= type(uint224).max, errorMessage);\\n        return uint224(n);\\n    }\\n\\n    function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) {\\n        require(n <= type(uint32).max, errorMessage);\\n        return uint32(n);\\n    }\\n\\n    function add_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a + b;\\n    }\\n\\n    function sub_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a - b;\\n    }\\n\\n    function mul_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b.mantissa) / EXP_SCALE });\\n    }\\n\\n    function mul_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / EXP_SCALE;\\n    }\\n\\n    function mul_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b.mantissa) / DOUBLE_SCALE });\\n    }\\n\\n    function mul_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / DOUBLE_SCALE;\\n    }\\n\\n    function mul_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a * b;\\n    }\\n\\n    function div_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(mul_(a.mantissa, EXP_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, EXP_SCALE), b.mantissa);\\n    }\\n\\n    function div_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a.mantissa, DOUBLE_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, DOUBLE_SCALE), b.mantissa);\\n    }\\n\\n    function div_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a / b;\\n    }\\n\\n    function fraction(uint256 a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a, DOUBLE_SCALE), b) });\\n    }\\n}\\n\",\"keccak256\":\"0x8afbe8a24fe3539c124e718681ed3dcebd24c40dd53095786c0155998213b9b0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\",\"keccak256\":\"0x54ab3a6f3bc87569ed12370f3470a1ec84cea9796d4d0ccf3d07dd4280c044aa\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Exp is a struct which stores decimals with a fixed precision of 18 decimal places.         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:         `Exp({mantissa: 5100000000000000000})`.","version":1}}},"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol":{"InterestRateModel":{"abi":[{"inputs":[{"internalType":"uint256","name":"cash","type":"uint256"},{"internalType":"uint256","name":"borrows","type":"uint256"},{"internalType":"uint256","name":"reserves","type":"uint256"},{"internalType":"uint256","name":"badDebt","type":"uint256"}],"name":"getBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"cash","type":"uint256"},{"internalType":"uint256","name":"borrows","type":"uint256"},{"internalType":"uint256","name":"reserves","type":"uint256"},{"internalType":"uint256","name":"reserveFactorMantissa","type":"uint256"},{"internalType":"uint256","name":"badDebt","type":"uint256"}],"name":"getSupplyRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isInterestRateModel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"}],"devdoc":{"author":"Compound","kind":"dev","methods":{"getBorrowRate(uint256,uint256,uint256,uint256)":{"params":{"badDebt":"The amount of badDebt in the market","borrows":"The total amount of borrows the market has outstanding","cash":"The total amount of cash the market has","reserves":"The total amount of reserves the market has"},"returns":{"_0":"The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)"}},"getSupplyRate(uint256,uint256,uint256,uint256,uint256)":{"params":{"badDebt":"The amount of badDebt in the market","borrows":"The total amount of borrows the market has outstanding","cash":"The total amount of cash the market has","reserveFactorMantissa":"The current reserve factor the market has","reserves":"The total amount of reserves the market has"},"returns":{"_0":"The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)"}},"isInterestRateModel()":{"returns":{"_0":"Always true"}}},"title":"Compound's InterestRateModel Interface","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getBorrowRate(uint256,uint256,uint256,uint256)":"073b8a74","getSupplyRate(uint256,uint256,uint256,uint256,uint256)":"0cde8d1c","isInterestRateModel()":"2191f92a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrows\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserves\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"badDebt\",\"type\":\"uint256\"}],\"name\":\"getBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrows\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserves\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactorMantissa\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"badDebt\",\"type\":\"uint256\"}],\"name\":\"getSupplyRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isInterestRateModel\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Compound\",\"kind\":\"dev\",\"methods\":{\"getBorrowRate(uint256,uint256,uint256,uint256)\":{\"params\":{\"badDebt\":\"The amount of badDebt in the market\",\"borrows\":\"The total amount of borrows the market has outstanding\",\"cash\":\"The total amount of cash the market has\",\"reserves\":\"The total amount of reserves the market has\"},\"returns\":{\"_0\":\"The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\"}},\"getSupplyRate(uint256,uint256,uint256,uint256,uint256)\":{\"params\":{\"badDebt\":\"The amount of badDebt in the market\",\"borrows\":\"The total amount of borrows the market has outstanding\",\"cash\":\"The total amount of cash the market has\",\"reserveFactorMantissa\":\"The current reserve factor the market has\",\"reserves\":\"The total amount of reserves the market has\"},\"returns\":{\"_0\":\"The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\"}},\"isInterestRateModel()\":{\"returns\":{\"_0\":\"Always true\"}}},\"title\":\"Compound's InterestRateModel Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getBorrowRate(uint256,uint256,uint256,uint256)\":{\"notice\":\"Calculates the current borrow interest rate per slot (block or second)\"},\"getSupplyRate(uint256,uint256,uint256,uint256,uint256)\":{\"notice\":\"Calculates the current supply interest rate per slot (block or second)\"},\"isInterestRateModel()\":{\"notice\":\"Indicator that this is an InterestRateModel contract (for inspection)\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol\":\"InterestRateModel\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title Compound's InterestRateModel Interface\\n * @author Compound\\n */\\nabstract contract InterestRateModel {\\n    /**\\n     * @notice Calculates the current borrow interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getBorrowRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Calculates the current supply interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param reserveFactorMantissa The current reserve factor the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getSupplyRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 reserveFactorMantissa,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is an InterestRateModel contract (for inspection)\\n     * @return Always true\\n     */\\n    function isInterestRateModel() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0xc4fda1ab75ebe4b187b707c4f10c58780f343cf343c537f641dc75d3cd28ab51\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"getBorrowRate(uint256,uint256,uint256,uint256)":{"notice":"Calculates the current borrow interest rate per slot (block or second)"},"getSupplyRate(uint256,uint256,uint256,uint256,uint256)":{"notice":"Calculates the current supply interest rate per slot (block or second)"},"isInterestRateModel()":{"notice":"Indicator that this is an InterestRateModel contract (for inspection)"}},"version":1}}},"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol":{"MaxLoopsLimitHelper":{"abi":[{"inputs":[{"internalType":"uint256","name":"loopsLimit","type":"uint256"},{"internalType":"uint256","name":"requiredLoops","type":"uint256"}],"name":"MaxLoopsLimitExceeded","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMaxLoopsLimit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newmaxLoopsLimit","type":"uint256"}],"name":"MaxLoopsLimitUpdated","type":"event"},{"inputs":[],"name":"maxLoopsLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Venus","kind":"dev","methods":{},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"}},"title":"MaxLoopsLimitHelper","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"maxLoopsLimit()":"be26317e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loopsLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredLoops\",\"type\":\"uint256\"}],\"name\":\"MaxLoopsLimitExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldMaxLoopsLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newmaxLoopsLimit\",\"type\":\"uint256\"}],\"name\":\"MaxLoopsLimitUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"maxLoopsLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"}},\"title\":\"MaxLoopsLimitHelper\",\"version\":1},\"userdoc\":{\"errors\":{\"MaxLoopsLimitExceeded(uint256,uint256)\":[{\"notice\":\"Thrown an error on maxLoopsLimit exceeds for any loop\"}]},\"events\":{\"MaxLoopsLimitUpdated(uint256,uint256)\":{\"notice\":\"Emitted when max loops limit is set\"}},\"kind\":\"user\",\"methods\":{},\"notice\":\"Abstract contract used to avoid collection with too many items that would generate gas errors and DoS.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\":\"MaxLoopsLimitHelper\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title MaxLoopsLimitHelper\\n * @author Venus\\n * @notice Abstract contract used to avoid collection with too many items that would generate gas errors and DoS.\\n */\\nabstract contract MaxLoopsLimitHelper {\\n    // Limit for the loops to avoid the DOS\\n    uint256 public maxLoopsLimit;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when max loops limit is set\\n    event MaxLoopsLimitUpdated(uint256 oldMaxLoopsLimit, uint256 newmaxLoopsLimit);\\n\\n    /// @notice Thrown an error on maxLoopsLimit exceeds for any loop\\n    error MaxLoopsLimitExceeded(uint256 loopsLimit, uint256 requiredLoops);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function _setMaxLoopsLimit(uint256 limit) internal {\\n        require(limit > maxLoopsLimit, \\\"Comptroller: Invalid maxLoopsLimit\\\");\\n\\n        uint256 oldMaxLoopsLimit = maxLoopsLimit;\\n        maxLoopsLimit = limit;\\n\\n        emit MaxLoopsLimitUpdated(oldMaxLoopsLimit, limit);\\n    }\\n\\n    /**\\n     * @notice Compare the maxLoopsLimit with number of the times loop iterate\\n     * @param len Length of the loops iterate\\n     * @custom:error MaxLoopsLimitExceeded error is thrown when loops length exceeds maxLoopsLimit\\n     */\\n    function _ensureMaxLoops(uint256 len) internal view {\\n        if (len > maxLoopsLimit) {\\n            revert MaxLoopsLimitExceeded(maxLoopsLimit, len);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x4c25e30635485d162177effa384eee51768b0141a567a0da16ff6ad673274166\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10271,"contract":"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol:MaxLoopsLimitHelper","label":"maxLoopsLimit","offset":0,"slot":"0","type":"t_uint256"},{"astId":10276,"contract":"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol:MaxLoopsLimitHelper","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)49_storage"}],"types":{"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"errors":{"MaxLoopsLimitExceeded(uint256,uint256)":[{"notice":"Thrown an error on maxLoopsLimit exceeds for any loop"}]},"events":{"MaxLoopsLimitUpdated(uint256,uint256)":{"notice":"Emitted when max loops limit is set"}},"kind":"user","methods":{},"notice":"Abstract contract used to avoid collection with too many items that would generate gas errors and DoS.","version":1}}},"@venusprotocol/isolated-pools/contracts/Pool/PoolRegistryInterface.sol":{"PoolRegistryInterface":{"abi":[{"inputs":[],"name":"getAllPools","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"address","name":"comptroller","type":"address"},{"internalType":"uint256","name":"blockPosted","type":"uint256"},{"internalType":"uint256","name":"timestampPosted","type":"uint256"}],"internalType":"struct PoolRegistryInterface.VenusPool[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"comptroller","type":"address"}],"name":"getPoolByComptroller","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"address","name":"comptroller","type":"address"},{"internalType":"uint256","name":"blockPosted","type":"uint256"},{"internalType":"uint256","name":"timestampPosted","type":"uint256"}],"internalType":"struct PoolRegistryInterface.VenusPool","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getPoolsSupportedByAsset","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"comptroller","type":"address"},{"internalType":"address","name":"asset","type":"address"}],"name":"getVTokenForAsset","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"comptroller","type":"address"}],"name":"getVenusPoolMetadata","outputs":[{"components":[{"internalType":"string","name":"category","type":"string"},{"internalType":"string","name":"logoURL","type":"string"},{"internalType":"string","name":"description","type":"string"}],"internalType":"struct PoolRegistryInterface.VenusPoolMetaData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Venus","kind":"dev","methods":{},"title":"PoolRegistryInterface","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getAllPools()":"d88ff1f4","getPoolByComptroller(address)":"7aee632d","getPoolsSupportedByAsset(address)":"f36dba38","getVTokenForAsset(address,address)":"266e0a7f","getVenusPoolMetadata(address)":"a3aefa2c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getAllPools\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockPosted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestampPosted\",\"type\":\"uint256\"}],\"internalType\":\"struct PoolRegistryInterface.VenusPool[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"}],\"name\":\"getPoolByComptroller\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockPosted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestampPosted\",\"type\":\"uint256\"}],\"internalType\":\"struct PoolRegistryInterface.VenusPool\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getPoolsSupportedByAsset\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getVTokenForAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"}],\"name\":\"getVenusPoolMetadata\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"category\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"logoURL\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct PoolRegistryInterface.VenusPoolMetaData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"kind\":\"dev\",\"methods\":{},\"title\":\"PoolRegistryInterface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAllPools()\":{\"notice\":\"Get all pools in PoolRegistry\"},\"getPoolByComptroller(address)\":{\"notice\":\"Get a pool by comptroller address\"},\"getPoolsSupportedByAsset(address)\":{\"notice\":\"Get the addresss of the Pools supported that include a market for the provided asset\"},\"getVTokenForAsset(address,address)\":{\"notice\":\"Get the address of the VToken contract in the Pool where the underlying token is the provided asset\"},\"getVenusPoolMetadata(address)\":{\"notice\":\"Get the metadata of a Pool by comptroller address\"}},\"notice\":\"Interface implemented by `PoolRegistry`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/isolated-pools/contracts/Pool/PoolRegistryInterface.sol\":\"PoolRegistryInterface\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/isolated-pools/contracts/Pool/PoolRegistryInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/**\\n * @title PoolRegistryInterface\\n * @author Venus\\n * @notice Interface implemented by `PoolRegistry`.\\n */\\ninterface PoolRegistryInterface {\\n    /**\\n     * @notice Struct for a Venus interest rate pool.\\n     */\\n    struct VenusPool {\\n        string name;\\n        address creator;\\n        address comptroller;\\n        uint256 blockPosted;\\n        uint256 timestampPosted;\\n    }\\n\\n    /**\\n     * @notice Struct for a Venus interest rate pool metadata.\\n     */\\n    struct VenusPoolMetaData {\\n        string category;\\n        string logoURL;\\n        string description;\\n    }\\n\\n    /// @notice Get all pools in PoolRegistry\\n    function getAllPools() external view returns (VenusPool[] memory);\\n\\n    /// @notice Get a pool by comptroller address\\n    function getPoolByComptroller(address comptroller) external view returns (VenusPool memory);\\n\\n    /// @notice Get the address of the VToken contract in the Pool where the underlying token is the provided asset\\n    function getVTokenForAsset(address comptroller, address asset) external view returns (address);\\n\\n    /// @notice Get the addresss of the Pools supported that include a market for the provided asset\\n    function getPoolsSupportedByAsset(address asset) external view returns (address[] memory);\\n\\n    /// @notice Get the metadata of a Pool by comptroller address\\n    function getVenusPoolMetadata(address comptroller) external view returns (VenusPoolMetaData memory);\\n}\\n\",\"keccak256\":\"0x7b39cda3b372a686501ce3c2aad288c6af410148110318249d75d4516729c92c\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"getAllPools()":{"notice":"Get all pools in PoolRegistry"},"getPoolByComptroller(address)":{"notice":"Get a pool by comptroller address"},"getPoolsSupportedByAsset(address)":{"notice":"Get the addresss of the Pools supported that include a market for the provided asset"},"getVTokenForAsset(address,address)":{"notice":"Get the address of the VToken contract in the Pool where the underlying token is the provided asset"},"getVenusPoolMetadata(address)":{"notice":"Get the metadata of a Pool by comptroller address"}},"notice":"Interface implemented by `PoolRegistry`.","version":1}}},"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol":{"RewardsDistributor":{"abi":[{"inputs":[{"internalType":"bool","name":"timeBased_","type":"bool"},{"internalType":"uint256","name":"blocksPerYear_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidBlocksPerYear","type":"error"},{"inputs":[],"name":"InvalidTimeBasedConfiguration","type":"error"},{"inputs":[{"internalType":"uint256","name":"loopsLimit","type":"uint256"},{"internalType":"uint256","name":"requiredLoops","type":"uint256"}],"name":"MaxLoopsLimitExceeded","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"calledContract","type":"address"},{"internalType":"string","name":"methodSignature","type":"string"}],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"newTimestamp","type":"uint256"}],"name":"BorrowLastRewardingBlockTimestampUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vToken","type":"address"},{"indexed":false,"internalType":"uint32","name":"newBlock","type":"uint32"}],"name":"BorrowLastRewardingBlockUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contributor","type":"address"},{"indexed":false,"internalType":"uint256","name":"newSpeed","type":"uint256"}],"name":"ContributorRewardTokenSpeedUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contributor","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewardAccrued","type":"uint256"}],"name":"ContributorRewardsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract VToken","name":"vToken","type":"address"},{"indexed":true,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewardTokenDelta","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardTokenTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardTokenBorrowIndex","type":"uint256"}],"name":"DistributedBorrowerRewardToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract VToken","name":"vToken","type":"address"},{"indexed":true,"internalType":"address","name":"supplier","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewardTokenDelta","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardTokenTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardTokenSupplyIndex","type":"uint256"}],"name":"DistributedSupplierRewardToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vToken","type":"address"}],"name":"MarketInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMaxLoopsLimit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newmaxLoopsLimit","type":"uint256"}],"name":"MaxLoopsLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAccessControlManager","type":"address"},{"indexed":false,"internalType":"address","name":"newAccessControlManager","type":"address"}],"name":"NewAccessControlManager","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vToken","type":"address"},{"components":[{"internalType":"uint256","name":"mantissa","type":"uint256"}],"indexed":false,"internalType":"struct ExponentialNoError.Exp","name":"marketBorrowIndex","type":"tuple"}],"name":"RewardTokenBorrowIndexUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract VToken","name":"vToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"newSpeed","type":"uint256"}],"name":"RewardTokenBorrowSpeedUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardTokenGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vToken","type":"address"}],"name":"RewardTokenSupplyIndexUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract VToken","name":"vToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"newSpeed","type":"uint256"}],"name":"RewardTokenSupplySpeedUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"newTimestamp","type":"uint256"}],"name":"SupplyLastRewardingBlockTimestampUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vToken","type":"address"},{"indexed":false,"internalType":"uint32","name":"newBlock","type":"uint32"}],"name":"SupplyLastRewardingBlockUpdated","type":"event"},{"inputs":[],"name":"INITIAL_INDEX","outputs":[{"internalType":"uint224","name":"","type":"uint224"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accessControlManager","outputs":[{"internalType":"contract IAccessControlManagerV8","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksOrSecondsPerYear","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"contract VToken[]","name":"vTokens","type":"address[]"}],"name":"claimRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"claimRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"components":[{"internalType":"uint256","name":"mantissa","type":"uint256"}],"internalType":"struct ExponentialNoError.Exp","name":"marketBorrowIndex","type":"tuple"}],"name":"distributeBorrowerRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"supplier","type":"address"}],"name":"distributeSupplierRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBlockNumberOrTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"grantRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract Comptroller","name":"comptroller_","type":"address"},{"internalType":"contract IERC20Upgradeable","name":"rewardToken_","type":"address"},{"internalType":"uint256","name":"loopsLimit_","type":"uint256"},{"internalType":"address","name":"accessControlManager_","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"}],"name":"initializeMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTimeBased","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastContributorBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLoopsLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20Upgradeable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardTokenAccrued","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardTokenBorrowSpeeds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardTokenBorrowState","outputs":[{"internalType":"uint224","name":"index","type":"uint224"},{"internalType":"uint32","name":"block","type":"uint32"},{"internalType":"uint32","name":"lastRewardingBlock","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardTokenBorrowStateTimeBased","outputs":[{"internalType":"uint224","name":"index","type":"uint224"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"lastRewardingTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"rewardTokenBorrowerIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardTokenContributorSpeeds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"rewardTokenSupplierIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardTokenSupplySpeeds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardTokenSupplyState","outputs":[{"internalType":"uint224","name":"index","type":"uint224"},{"internalType":"uint32","name":"block","type":"uint32"},{"internalType":"uint32","name":"lastRewardingBlock","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardTokenSupplyStateTimeBased","outputs":[{"internalType":"uint224","name":"index","type":"uint224"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"lastRewardingTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"accessControlManager_","type":"address"}],"name":"setAccessControlManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contributor","type":"address"},{"internalType":"uint256","name":"rewardTokenSpeed","type":"uint256"}],"name":"setContributorRewardTokenSpeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract VToken[]","name":"vTokens","type":"address[]"},{"internalType":"uint256[]","name":"supplyLastRewardingBlockTimestamps","type":"uint256[]"},{"internalType":"uint256[]","name":"borrowLastRewardingBlockTimestamps","type":"uint256[]"}],"name":"setLastRewardingBlockTimestamps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract VToken[]","name":"vTokens","type":"address[]"},{"internalType":"uint32[]","name":"supplyLastRewardingBlocks","type":"uint32[]"},{"internalType":"uint32[]","name":"borrowLastRewardingBlocks","type":"uint32[]"}],"name":"setLastRewardingBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setMaxLoopsLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract VToken[]","name":"vTokens","type":"address[]"},{"internalType":"uint256[]","name":"supplySpeeds","type":"uint256[]"},{"internalType":"uint256[]","name":"borrowSpeeds","type":"uint256[]"}],"name":"setRewardTokenSpeeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contributor","type":"address"}],"name":"updateContributorRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"components":[{"internalType":"uint256","name":"mantissa","type":"uint256"}],"internalType":"struct ExponentialNoError.Exp","name":"marketBorrowIndex","type":"tuple"}],"name":"updateRewardTokenBorrowIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"}],"name":"updateRewardTokenSupplyIndex","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Venus","events":{"Initialized(uint8)":{"details":"Triggered when the contract has been initialized or reinitialized."}},"kind":"dev","methods":{"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"claimRewardToken(address)":{"params":{"holder":"The address to claim REWARD TOKEN for"}},"claimRewardToken(address,address[])":{"params":{"holder":"The address to claim REWARD TOKEN for","vTokens":"The list of markets to claim REWARD TOKEN in"}},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor","params":{"blocksPerYear_":"The number of blocks per year","timeBased_":"A boolean indicating whether the contract is based on time or block."}},"distributeBorrowerRewardToken(address,address,(uint256))":{"details":"This function should only be called when the user has a borrow position in the market      (e.g. Comptroller.preBorrowHook, and Comptroller.preRepayHook)      We avoid an external call to check if they are in the market to save gas because this function is called in many places","params":{"borrower":"The address of the borrower to distribute REWARD TOKEN to","marketBorrowIndex":"The current global borrow index of vToken","vToken":"The market in which the borrower is interacting"}},"getBlockNumberOrTimestamp()":{"details":"Function to simply retrieve block number or block timestamp","returns":{"_0":"Current block number or block timestamp"}},"grantRewardToken(address,uint256)":{"details":"Note: If there is not enough REWARD TOKEN, we do not perform the transfer all","params":{"amount":"The amount of REWARD TOKEN to (possibly) transfer","recipient":"The address of the recipient to transfer REWARD TOKEN to"}},"initialize(address,address,uint256,address)":{"details":"Initializes the deployer to owner","params":{"accessControlManager_":"AccessControlManager contract address","comptroller_":"Comptroller to attach the reward distributor to","loopsLimit_":"Maximum number of iterations for the loops in this contract","rewardToken_":"Reward token to distribute"}},"initializeMarket(address)":{"custom:access":"Only Comptroller","custom:event":"MarketInitialized emits on success","params":{"vToken":"The address of the vToken to be initialized"}},"owner()":{"details":"Returns the address of the current owner."},"pendingOwner()":{"details":"Returns the address of the pending owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"setAccessControlManager(address)":{"custom:access":"Only Governance","custom:event":"Emits NewAccessControlManager event","details":"Admin function to set address of AccessControlManager","params":{"accessControlManager_":"The new address of the AccessControlManager"}},"setContributorRewardTokenSpeed(address,uint256)":{"params":{"contributor":"The contributor whose REWARD TOKEN speed to update","rewardTokenSpeed":"New REWARD TOKEN speed for contributor"}},"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])":{"params":{"borrowLastRewardingBlockTimestamps":"New borrow-side REWARD TOKEN last rewarding block timestamp for the corresponding market","supplyLastRewardingBlockTimestamps":"New supply-side REWARD TOKEN last rewarding block timestamp for the corresponding market","vTokens":"The markets whose REWARD TOKEN last rewarding block to update"}},"setLastRewardingBlocks(address[],uint32[],uint32[])":{"params":{"borrowLastRewardingBlocks":"New borrow-side REWARD TOKEN last rewarding block for the corresponding market","supplyLastRewardingBlocks":"New supply-side REWARD TOKEN last rewarding block for the corresponding market","vTokens":"The markets whose REWARD TOKEN last rewarding block to update"}},"setMaxLoopsLimit(uint256)":{"params":{"limit":"Limit for the max loops can execute at a time"}},"setRewardTokenSpeeds(address[],uint256[],uint256[])":{"params":{"borrowSpeeds":"New borrow-side REWARD TOKEN speed for the corresponding market","supplySpeeds":"New supply-side REWARD TOKEN speed for the corresponding market","vTokens":"The markets whose REWARD TOKEN speed to update"}},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."},"updateContributorRewards(address)":{"params":{"contributor":"The address to calculate contributor rewards for"}}},"title":"`RewardsDistributor`","version":1},"evm":{"bytecode":{"functionDebugData":{"@_10589":{"entryPoint":null,"id":10589,"parameterSlots":2,"returnSlots":0},"@_16288":{"entryPoint":null,"id":16288,"parameterSlots":2,"returnSlots":0},"@_disableInitializers_557":{"entryPoint":228,"id":557,"parameterSlots":0,"returnSlots":0},"@_getBlockNumber_16318":{"entryPoint":220,"id":16318,"parameterSlots":0,"returnSlots":1},"@_getBlockTimestamp_16308":{"entryPoint":224,"id":16308,"parameterSlots":0,"returnSlots":1},"abi_decode_t_bool_fromMemory":{"entryPoint":381,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_uint256_fromMemory":{"entryPoint":404,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_boolt_uint256_fromMemory":{"entryPoint":415,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_uint8_to_t_uint8_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":476,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":551,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_bool":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_bool":{"entryPoint":363,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_uint256":{"entryPoint":398,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:3193:69","nodeType":"YulBlock","src":"0:3193:69","statements":[{"body":{"nativeSrc":"47:35:69","nodeType":"YulBlock","src":"47:35:69","statements":[{"nativeSrc":"57:19:69","nodeType":"YulAssignment","src":"57:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"73:2:69","nodeType":"YulLiteral","src":"73:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"67:5:69","nodeType":"YulIdentifier","src":"67:5:69"},"nativeSrc":"67:9:69","nodeType":"YulFunctionCall","src":"67:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"57:6:69","nodeType":"YulIdentifier","src":"57:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"7:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"40:6:69","nodeType":"YulTypedName","src":"40:6:69","type":""}],"src":"7:75:69"},{"body":{"nativeSrc":"177:28:69","nodeType":"YulBlock","src":"177:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"194:1:69","nodeType":"YulLiteral","src":"194:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"197:1:69","nodeType":"YulLiteral","src":"197:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"187:6:69","nodeType":"YulIdentifier","src":"187:6:69"},"nativeSrc":"187:12:69","nodeType":"YulFunctionCall","src":"187:12:69"},"nativeSrc":"187:12:69","nodeType":"YulExpressionStatement","src":"187:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"88:117:69","nodeType":"YulFunctionDefinition","src":"88:117:69"},{"body":{"nativeSrc":"300:28:69","nodeType":"YulBlock","src":"300:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"317:1:69","nodeType":"YulLiteral","src":"317:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"320:1:69","nodeType":"YulLiteral","src":"320:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},"nativeSrc":"310:12:69","nodeType":"YulFunctionCall","src":"310:12:69"},"nativeSrc":"310:12:69","nodeType":"YulExpressionStatement","src":"310:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"211:117:69","nodeType":"YulFunctionDefinition","src":"211:117:69"},{"body":{"nativeSrc":"376:48:69","nodeType":"YulBlock","src":"376:48:69","statements":[{"nativeSrc":"386:32:69","nodeType":"YulAssignment","src":"386:32:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"411:5:69","nodeType":"YulIdentifier","src":"411:5:69"}],"functionName":{"name":"iszero","nativeSrc":"404:6:69","nodeType":"YulIdentifier","src":"404:6:69"},"nativeSrc":"404:13:69","nodeType":"YulFunctionCall","src":"404:13:69"}],"functionName":{"name":"iszero","nativeSrc":"397:6:69","nodeType":"YulIdentifier","src":"397:6:69"},"nativeSrc":"397:21:69","nodeType":"YulFunctionCall","src":"397:21:69"},"variableNames":[{"name":"cleaned","nativeSrc":"386:7:69","nodeType":"YulIdentifier","src":"386:7:69"}]}]},"name":"cleanup_t_bool","nativeSrc":"334:90:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"358:5:69","nodeType":"YulTypedName","src":"358:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"368:7:69","nodeType":"YulTypedName","src":"368:7:69","type":""}],"src":"334:90:69"},{"body":{"nativeSrc":"470:76:69","nodeType":"YulBlock","src":"470:76:69","statements":[{"body":{"nativeSrc":"524:16:69","nodeType":"YulBlock","src":"524:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"533:1:69","nodeType":"YulLiteral","src":"533:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"536:1:69","nodeType":"YulLiteral","src":"536:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"526:6:69","nodeType":"YulIdentifier","src":"526:6:69"},"nativeSrc":"526:12:69","nodeType":"YulFunctionCall","src":"526:12:69"},"nativeSrc":"526:12:69","nodeType":"YulExpressionStatement","src":"526:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"493:5:69","nodeType":"YulIdentifier","src":"493:5:69"},{"arguments":[{"name":"value","nativeSrc":"515:5:69","nodeType":"YulIdentifier","src":"515:5:69"}],"functionName":{"name":"cleanup_t_bool","nativeSrc":"500:14:69","nodeType":"YulIdentifier","src":"500:14:69"},"nativeSrc":"500:21:69","nodeType":"YulFunctionCall","src":"500:21:69"}],"functionName":{"name":"eq","nativeSrc":"490:2:69","nodeType":"YulIdentifier","src":"490:2:69"},"nativeSrc":"490:32:69","nodeType":"YulFunctionCall","src":"490:32:69"}],"functionName":{"name":"iszero","nativeSrc":"483:6:69","nodeType":"YulIdentifier","src":"483:6:69"},"nativeSrc":"483:40:69","nodeType":"YulFunctionCall","src":"483:40:69"},"nativeSrc":"480:60:69","nodeType":"YulIf","src":"480:60:69"}]},"name":"validator_revert_t_bool","nativeSrc":"430:116:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"463:5:69","nodeType":"YulTypedName","src":"463:5:69","type":""}],"src":"430:116:69"},{"body":{"nativeSrc":"612:77:69","nodeType":"YulBlock","src":"612:77:69","statements":[{"nativeSrc":"622:22:69","nodeType":"YulAssignment","src":"622:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"637:6:69","nodeType":"YulIdentifier","src":"637:6:69"}],"functionName":{"name":"mload","nativeSrc":"631:5:69","nodeType":"YulIdentifier","src":"631:5:69"},"nativeSrc":"631:13:69","nodeType":"YulFunctionCall","src":"631:13:69"},"variableNames":[{"name":"value","nativeSrc":"622:5:69","nodeType":"YulIdentifier","src":"622:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"677:5:69","nodeType":"YulIdentifier","src":"677:5:69"}],"functionName":{"name":"validator_revert_t_bool","nativeSrc":"653:23:69","nodeType":"YulIdentifier","src":"653:23:69"},"nativeSrc":"653:30:69","nodeType":"YulFunctionCall","src":"653:30:69"},"nativeSrc":"653:30:69","nodeType":"YulExpressionStatement","src":"653:30:69"}]},"name":"abi_decode_t_bool_fromMemory","nativeSrc":"552:137:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"590:6:69","nodeType":"YulTypedName","src":"590:6:69","type":""},{"name":"end","nativeSrc":"598:3:69","nodeType":"YulTypedName","src":"598:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"606:5:69","nodeType":"YulTypedName","src":"606:5:69","type":""}],"src":"552:137:69"},{"body":{"nativeSrc":"740:32:69","nodeType":"YulBlock","src":"740:32:69","statements":[{"nativeSrc":"750:16:69","nodeType":"YulAssignment","src":"750:16:69","value":{"name":"value","nativeSrc":"761:5:69","nodeType":"YulIdentifier","src":"761:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"750:7:69","nodeType":"YulIdentifier","src":"750:7:69"}]}]},"name":"cleanup_t_uint256","nativeSrc":"695:77:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"722:5:69","nodeType":"YulTypedName","src":"722:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"732:7:69","nodeType":"YulTypedName","src":"732:7:69","type":""}],"src":"695:77:69"},{"body":{"nativeSrc":"821:79:69","nodeType":"YulBlock","src":"821:79:69","statements":[{"body":{"nativeSrc":"878:16:69","nodeType":"YulBlock","src":"878:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"887:1:69","nodeType":"YulLiteral","src":"887:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"890:1:69","nodeType":"YulLiteral","src":"890:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"880:6:69","nodeType":"YulIdentifier","src":"880:6:69"},"nativeSrc":"880:12:69","nodeType":"YulFunctionCall","src":"880:12:69"},"nativeSrc":"880:12:69","nodeType":"YulExpressionStatement","src":"880:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"844:5:69","nodeType":"YulIdentifier","src":"844:5:69"},{"arguments":[{"name":"value","nativeSrc":"869:5:69","nodeType":"YulIdentifier","src":"869:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"851:17:69","nodeType":"YulIdentifier","src":"851:17:69"},"nativeSrc":"851:24:69","nodeType":"YulFunctionCall","src":"851:24:69"}],"functionName":{"name":"eq","nativeSrc":"841:2:69","nodeType":"YulIdentifier","src":"841:2:69"},"nativeSrc":"841:35:69","nodeType":"YulFunctionCall","src":"841:35:69"}],"functionName":{"name":"iszero","nativeSrc":"834:6:69","nodeType":"YulIdentifier","src":"834:6:69"},"nativeSrc":"834:43:69","nodeType":"YulFunctionCall","src":"834:43:69"},"nativeSrc":"831:63:69","nodeType":"YulIf","src":"831:63:69"}]},"name":"validator_revert_t_uint256","nativeSrc":"778:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"814:5:69","nodeType":"YulTypedName","src":"814:5:69","type":""}],"src":"778:122:69"},{"body":{"nativeSrc":"969:80:69","nodeType":"YulBlock","src":"969:80:69","statements":[{"nativeSrc":"979:22:69","nodeType":"YulAssignment","src":"979:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"994:6:69","nodeType":"YulIdentifier","src":"994:6:69"}],"functionName":{"name":"mload","nativeSrc":"988:5:69","nodeType":"YulIdentifier","src":"988:5:69"},"nativeSrc":"988:13:69","nodeType":"YulFunctionCall","src":"988:13:69"},"variableNames":[{"name":"value","nativeSrc":"979:5:69","nodeType":"YulIdentifier","src":"979:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"1037:5:69","nodeType":"YulIdentifier","src":"1037:5:69"}],"functionName":{"name":"validator_revert_t_uint256","nativeSrc":"1010:26:69","nodeType":"YulIdentifier","src":"1010:26:69"},"nativeSrc":"1010:33:69","nodeType":"YulFunctionCall","src":"1010:33:69"},"nativeSrc":"1010:33:69","nodeType":"YulExpressionStatement","src":"1010:33:69"}]},"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"906:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"947:6:69","nodeType":"YulTypedName","src":"947:6:69","type":""},{"name":"end","nativeSrc":"955:3:69","nodeType":"YulTypedName","src":"955:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"963:5:69","nodeType":"YulTypedName","src":"963:5:69","type":""}],"src":"906:143:69"},{"body":{"nativeSrc":"1146:410:69","nodeType":"YulBlock","src":"1146:410:69","statements":[{"body":{"nativeSrc":"1192:83:69","nodeType":"YulBlock","src":"1192:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"1194:77:69","nodeType":"YulIdentifier","src":"1194:77:69"},"nativeSrc":"1194:79:69","nodeType":"YulFunctionCall","src":"1194:79:69"},"nativeSrc":"1194:79:69","nodeType":"YulExpressionStatement","src":"1194:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"1167:7:69","nodeType":"YulIdentifier","src":"1167:7:69"},{"name":"headStart","nativeSrc":"1176:9:69","nodeType":"YulIdentifier","src":"1176:9:69"}],"functionName":{"name":"sub","nativeSrc":"1163:3:69","nodeType":"YulIdentifier","src":"1163:3:69"},"nativeSrc":"1163:23:69","nodeType":"YulFunctionCall","src":"1163:23:69"},{"kind":"number","nativeSrc":"1188:2:69","nodeType":"YulLiteral","src":"1188:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"1159:3:69","nodeType":"YulIdentifier","src":"1159:3:69"},"nativeSrc":"1159:32:69","nodeType":"YulFunctionCall","src":"1159:32:69"},"nativeSrc":"1156:119:69","nodeType":"YulIf","src":"1156:119:69"},{"nativeSrc":"1285:125:69","nodeType":"YulBlock","src":"1285:125:69","statements":[{"nativeSrc":"1300:15:69","nodeType":"YulVariableDeclaration","src":"1300:15:69","value":{"kind":"number","nativeSrc":"1314:1:69","nodeType":"YulLiteral","src":"1314:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"1304:6:69","nodeType":"YulTypedName","src":"1304:6:69","type":""}]},{"nativeSrc":"1329:71:69","nodeType":"YulAssignment","src":"1329:71:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1372:9:69","nodeType":"YulIdentifier","src":"1372:9:69"},{"name":"offset","nativeSrc":"1383:6:69","nodeType":"YulIdentifier","src":"1383:6:69"}],"functionName":{"name":"add","nativeSrc":"1368:3:69","nodeType":"YulIdentifier","src":"1368:3:69"},"nativeSrc":"1368:22:69","nodeType":"YulFunctionCall","src":"1368:22:69"},{"name":"dataEnd","nativeSrc":"1392:7:69","nodeType":"YulIdentifier","src":"1392:7:69"}],"functionName":{"name":"abi_decode_t_bool_fromMemory","nativeSrc":"1339:28:69","nodeType":"YulIdentifier","src":"1339:28:69"},"nativeSrc":"1339:61:69","nodeType":"YulFunctionCall","src":"1339:61:69"},"variableNames":[{"name":"value0","nativeSrc":"1329:6:69","nodeType":"YulIdentifier","src":"1329:6:69"}]}]},{"nativeSrc":"1420:129:69","nodeType":"YulBlock","src":"1420:129:69","statements":[{"nativeSrc":"1435:16:69","nodeType":"YulVariableDeclaration","src":"1435:16:69","value":{"kind":"number","nativeSrc":"1449:2:69","nodeType":"YulLiteral","src":"1449:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"1439:6:69","nodeType":"YulTypedName","src":"1439:6:69","type":""}]},{"nativeSrc":"1465:74:69","nodeType":"YulAssignment","src":"1465:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1511:9:69","nodeType":"YulIdentifier","src":"1511:9:69"},{"name":"offset","nativeSrc":"1522:6:69","nodeType":"YulIdentifier","src":"1522:6:69"}],"functionName":{"name":"add","nativeSrc":"1507:3:69","nodeType":"YulIdentifier","src":"1507:3:69"},"nativeSrc":"1507:22:69","nodeType":"YulFunctionCall","src":"1507:22:69"},{"name":"dataEnd","nativeSrc":"1531:7:69","nodeType":"YulIdentifier","src":"1531:7:69"}],"functionName":{"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"1475:31:69","nodeType":"YulIdentifier","src":"1475:31:69"},"nativeSrc":"1475:64:69","nodeType":"YulFunctionCall","src":"1475:64:69"},"variableNames":[{"name":"value1","nativeSrc":"1465:6:69","nodeType":"YulIdentifier","src":"1465:6:69"}]}]}]},"name":"abi_decode_tuple_t_boolt_uint256_fromMemory","nativeSrc":"1055:501:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1108:9:69","nodeType":"YulTypedName","src":"1108:9:69","type":""},{"name":"dataEnd","nativeSrc":"1119:7:69","nodeType":"YulTypedName","src":"1119:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"1131:6:69","nodeType":"YulTypedName","src":"1131:6:69","type":""},{"name":"value1","nativeSrc":"1139:6:69","nodeType":"YulTypedName","src":"1139:6:69","type":""}],"src":"1055:501:69"},{"body":{"nativeSrc":"1658:73:69","nodeType":"YulBlock","src":"1658:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"1675:3:69","nodeType":"YulIdentifier","src":"1675:3:69"},{"name":"length","nativeSrc":"1680:6:69","nodeType":"YulIdentifier","src":"1680:6:69"}],"functionName":{"name":"mstore","nativeSrc":"1668:6:69","nodeType":"YulIdentifier","src":"1668:6:69"},"nativeSrc":"1668:19:69","nodeType":"YulFunctionCall","src":"1668:19:69"},"nativeSrc":"1668:19:69","nodeType":"YulExpressionStatement","src":"1668:19:69"},{"nativeSrc":"1696:29:69","nodeType":"YulAssignment","src":"1696:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"1715:3:69","nodeType":"YulIdentifier","src":"1715:3:69"},{"kind":"number","nativeSrc":"1720:4:69","nodeType":"YulLiteral","src":"1720:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1711:3:69","nodeType":"YulIdentifier","src":"1711:3:69"},"nativeSrc":"1711:14:69","nodeType":"YulFunctionCall","src":"1711:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"1696:11:69","nodeType":"YulIdentifier","src":"1696:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"1562:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"1630:3:69","nodeType":"YulTypedName","src":"1630:3:69","type":""},{"name":"length","nativeSrc":"1635:6:69","nodeType":"YulTypedName","src":"1635:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"1646:11:69","nodeType":"YulTypedName","src":"1646:11:69","type":""}],"src":"1562:169:69"},{"body":{"nativeSrc":"1843:120:69","nodeType":"YulBlock","src":"1843:120:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"1865:6:69","nodeType":"YulIdentifier","src":"1865:6:69"},{"kind":"number","nativeSrc":"1873:1:69","nodeType":"YulLiteral","src":"1873:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1861:3:69","nodeType":"YulIdentifier","src":"1861:3:69"},"nativeSrc":"1861:14:69","nodeType":"YulFunctionCall","src":"1861:14:69"},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320696e697469","kind":"string","nativeSrc":"1877:34:69","nodeType":"YulLiteral","src":"1877:34:69","type":"","value":"Initializable: contract is initi"}],"functionName":{"name":"mstore","nativeSrc":"1854:6:69","nodeType":"YulIdentifier","src":"1854:6:69"},"nativeSrc":"1854:58:69","nodeType":"YulFunctionCall","src":"1854:58:69"},"nativeSrc":"1854:58:69","nodeType":"YulExpressionStatement","src":"1854:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"1933:6:69","nodeType":"YulIdentifier","src":"1933:6:69"},{"kind":"number","nativeSrc":"1941:2:69","nodeType":"YulLiteral","src":"1941:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1929:3:69","nodeType":"YulIdentifier","src":"1929:3:69"},"nativeSrc":"1929:15:69","nodeType":"YulFunctionCall","src":"1929:15:69"},{"hexValue":"616c697a696e67","kind":"string","nativeSrc":"1946:9:69","nodeType":"YulLiteral","src":"1946:9:69","type":"","value":"alizing"}],"functionName":{"name":"mstore","nativeSrc":"1922:6:69","nodeType":"YulIdentifier","src":"1922:6:69"},"nativeSrc":"1922:34:69","nodeType":"YulFunctionCall","src":"1922:34:69"},"nativeSrc":"1922:34:69","nodeType":"YulExpressionStatement","src":"1922:34:69"}]},"name":"store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a","nativeSrc":"1737:226:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"1835:6:69","nodeType":"YulTypedName","src":"1835:6:69","type":""}],"src":"1737:226:69"},{"body":{"nativeSrc":"2115:220:69","nodeType":"YulBlock","src":"2115:220:69","statements":[{"nativeSrc":"2125:74:69","nodeType":"YulAssignment","src":"2125:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"2191:3:69","nodeType":"YulIdentifier","src":"2191:3:69"},{"kind":"number","nativeSrc":"2196:2:69","nodeType":"YulLiteral","src":"2196:2:69","type":"","value":"39"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"2132:58:69","nodeType":"YulIdentifier","src":"2132:58:69"},"nativeSrc":"2132:67:69","nodeType":"YulFunctionCall","src":"2132:67:69"},"variableNames":[{"name":"pos","nativeSrc":"2125:3:69","nodeType":"YulIdentifier","src":"2125:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"2297:3:69","nodeType":"YulIdentifier","src":"2297:3:69"}],"functionName":{"name":"store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a","nativeSrc":"2208:88:69","nodeType":"YulIdentifier","src":"2208:88:69"},"nativeSrc":"2208:93:69","nodeType":"YulFunctionCall","src":"2208:93:69"},"nativeSrc":"2208:93:69","nodeType":"YulExpressionStatement","src":"2208:93:69"},{"nativeSrc":"2310:19:69","nodeType":"YulAssignment","src":"2310:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"2321:3:69","nodeType":"YulIdentifier","src":"2321:3:69"},{"kind":"number","nativeSrc":"2326:2:69","nodeType":"YulLiteral","src":"2326:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"2317:3:69","nodeType":"YulIdentifier","src":"2317:3:69"},"nativeSrc":"2317:12:69","nodeType":"YulFunctionCall","src":"2317:12:69"},"variableNames":[{"name":"end","nativeSrc":"2310:3:69","nodeType":"YulIdentifier","src":"2310:3:69"}]}]},"name":"abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack","nativeSrc":"1969:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"2103:3:69","nodeType":"YulTypedName","src":"2103:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"2111:3:69","nodeType":"YulTypedName","src":"2111:3:69","type":""}],"src":"1969:366:69"},{"body":{"nativeSrc":"2512:248:69","nodeType":"YulBlock","src":"2512:248:69","statements":[{"nativeSrc":"2522:26:69","nodeType":"YulAssignment","src":"2522:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"2534:9:69","nodeType":"YulIdentifier","src":"2534:9:69"},{"kind":"number","nativeSrc":"2545:2:69","nodeType":"YulLiteral","src":"2545:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2530:3:69","nodeType":"YulIdentifier","src":"2530:3:69"},"nativeSrc":"2530:18:69","nodeType":"YulFunctionCall","src":"2530:18:69"},"variableNames":[{"name":"tail","nativeSrc":"2522:4:69","nodeType":"YulIdentifier","src":"2522:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2569:9:69","nodeType":"YulIdentifier","src":"2569:9:69"},{"kind":"number","nativeSrc":"2580:1:69","nodeType":"YulLiteral","src":"2580:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"2565:3:69","nodeType":"YulIdentifier","src":"2565:3:69"},"nativeSrc":"2565:17:69","nodeType":"YulFunctionCall","src":"2565:17:69"},{"arguments":[{"name":"tail","nativeSrc":"2588:4:69","nodeType":"YulIdentifier","src":"2588:4:69"},{"name":"headStart","nativeSrc":"2594:9:69","nodeType":"YulIdentifier","src":"2594:9:69"}],"functionName":{"name":"sub","nativeSrc":"2584:3:69","nodeType":"YulIdentifier","src":"2584:3:69"},"nativeSrc":"2584:20:69","nodeType":"YulFunctionCall","src":"2584:20:69"}],"functionName":{"name":"mstore","nativeSrc":"2558:6:69","nodeType":"YulIdentifier","src":"2558:6:69"},"nativeSrc":"2558:47:69","nodeType":"YulFunctionCall","src":"2558:47:69"},"nativeSrc":"2558:47:69","nodeType":"YulExpressionStatement","src":"2558:47:69"},{"nativeSrc":"2614:139:69","nodeType":"YulAssignment","src":"2614:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"2748:4:69","nodeType":"YulIdentifier","src":"2748:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack","nativeSrc":"2622:124:69","nodeType":"YulIdentifier","src":"2622:124:69"},"nativeSrc":"2622:131:69","nodeType":"YulFunctionCall","src":"2622:131:69"},"variableNames":[{"name":"tail","nativeSrc":"2614:4:69","nodeType":"YulIdentifier","src":"2614:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"2341:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2492:9:69","nodeType":"YulTypedName","src":"2492:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2507:4:69","nodeType":"YulTypedName","src":"2507:4:69","type":""}],"src":"2341:419:69"},{"body":{"nativeSrc":"2809:43:69","nodeType":"YulBlock","src":"2809:43:69","statements":[{"nativeSrc":"2819:27:69","nodeType":"YulAssignment","src":"2819:27:69","value":{"arguments":[{"name":"value","nativeSrc":"2834:5:69","nodeType":"YulIdentifier","src":"2834:5:69"},{"kind":"number","nativeSrc":"2841:4:69","nodeType":"YulLiteral","src":"2841:4:69","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"2830:3:69","nodeType":"YulIdentifier","src":"2830:3:69"},"nativeSrc":"2830:16:69","nodeType":"YulFunctionCall","src":"2830:16:69"},"variableNames":[{"name":"cleaned","nativeSrc":"2819:7:69","nodeType":"YulIdentifier","src":"2819:7:69"}]}]},"name":"cleanup_t_uint8","nativeSrc":"2766:86:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2791:5:69","nodeType":"YulTypedName","src":"2791:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"2801:7:69","nodeType":"YulTypedName","src":"2801:7:69","type":""}],"src":"2766:86:69"},{"body":{"nativeSrc":"2919:51:69","nodeType":"YulBlock","src":"2919:51:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"2936:3:69","nodeType":"YulIdentifier","src":"2936:3:69"},{"arguments":[{"name":"value","nativeSrc":"2957:5:69","nodeType":"YulIdentifier","src":"2957:5:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"2941:15:69","nodeType":"YulIdentifier","src":"2941:15:69"},"nativeSrc":"2941:22:69","nodeType":"YulFunctionCall","src":"2941:22:69"}],"functionName":{"name":"mstore","nativeSrc":"2929:6:69","nodeType":"YulIdentifier","src":"2929:6:69"},"nativeSrc":"2929:35:69","nodeType":"YulFunctionCall","src":"2929:35:69"},"nativeSrc":"2929:35:69","nodeType":"YulExpressionStatement","src":"2929:35:69"}]},"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"2858:112:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2907:5:69","nodeType":"YulTypedName","src":"2907:5:69","type":""},{"name":"pos","nativeSrc":"2914:3:69","nodeType":"YulTypedName","src":"2914:3:69","type":""}],"src":"2858:112:69"},{"body":{"nativeSrc":"3070:120:69","nodeType":"YulBlock","src":"3070:120:69","statements":[{"nativeSrc":"3080:26:69","nodeType":"YulAssignment","src":"3080:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"3092:9:69","nodeType":"YulIdentifier","src":"3092:9:69"},{"kind":"number","nativeSrc":"3103:2:69","nodeType":"YulLiteral","src":"3103:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3088:3:69","nodeType":"YulIdentifier","src":"3088:3:69"},"nativeSrc":"3088:18:69","nodeType":"YulFunctionCall","src":"3088:18:69"},"variableNames":[{"name":"tail","nativeSrc":"3080:4:69","nodeType":"YulIdentifier","src":"3080:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"3156:6:69","nodeType":"YulIdentifier","src":"3156:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"3169:9:69","nodeType":"YulIdentifier","src":"3169:9:69"},{"kind":"number","nativeSrc":"3180:1:69","nodeType":"YulLiteral","src":"3180:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"3165:3:69","nodeType":"YulIdentifier","src":"3165:3:69"},"nativeSrc":"3165:17:69","nodeType":"YulFunctionCall","src":"3165:17:69"}],"functionName":{"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"3116:39:69","nodeType":"YulIdentifier","src":"3116:39:69"},"nativeSrc":"3116:67:69","nodeType":"YulFunctionCall","src":"3116:67:69"},"nativeSrc":"3116:67:69","nodeType":"YulExpressionStatement","src":"3116:67:69"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nativeSrc":"2976:214:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3042:9:69","nodeType":"YulTypedName","src":"3042:9:69","type":""},{"name":"value0","nativeSrc":"3054:6:69","nodeType":"YulTypedName","src":"3054:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3065:4:69","nodeType":"YulTypedName","src":"3065:4:69","type":""}],"src":"2976:214:69"}]},"contents":"{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_bool(value) -> cleaned {\n        cleaned := iszero(iszero(value))\n    }\n\n    function validator_revert_t_bool(value) {\n        if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_bool_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_bool(value)\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function validator_revert_t_uint256(value) {\n        if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_boolt_uint256_fromMemory(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_bool_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a(memPtr) {\n\n        mstore(add(memPtr, 0), \"Initializable: contract is initi\")\n\n        mstore(add(memPtr, 32), \"alizing\")\n\n    }\n\n    function abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 39)\n        store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function cleanup_t_uint8(value) -> cleaned {\n        cleaned := and(value, 0xff)\n    }\n\n    function abi_encode_t_uint8_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint8_to_t_uint8_fromStack(value0,  add(headStart, 0))\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e060405234801561001057600080fd5b5060405161402438038061402483398101604081905261002f9161019f565b81818115801561003d575080155b1561005b576040516302723dfb60e21b815260040160405180910390fd5b81801561006757508015155b156100855760405163ae0fcab360e01b815260040160405180910390fd5b81151560a05281610096578061009c565b6301e133805b608052816100b3576100dc60201b6111e3176100be565b6100e060201b6111e7175b6001600160401b031660c052506100d590506100e4565b5050610236565b4390565b4290565b600054610100900460ff16156101155760405162461bcd60e51b815260040161010c906101dc565b60405180910390fd5b60005460ff90811614610169576000805460ff191660ff9081179091556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989161016091610227565b60405180910390a15b565b8015155b811461017a57600080fd5b50565b80516101888161016b565b92915050565b8061016f565b80516101888161018e565b600080604083850312156101b5576101b5600080fd5b60006101c1858561017d565b92505060206101d285828601610194565b9150509250929050565b6020808252810161018881602781527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469602082015266616c697a696e6760c81b604082015260600190565b60ff8216815260208101610188565b60805160a05160c051613d486102dc60003960006111460152600081816105f00152818161091801528181610aa001528181610dbe0152818161124f015281816112b70152818161131201528181611415015281816114ba01528181611530015281816115ef0152818161181101528181611879015281816118d4015281816119c401528181611a2f01528181611aa50152611b5c015260006103a40152613d486000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c80637c05a7c51161013b578063be26317e116100b8578063e1d146fb1161007c578063e1d146fb14610645578063e30c39781461064d578063efc75f241461065e578063f2fde38b1461067f578063f7c618c11461069257600080fd5b8063be26317e146105c1578063bea6b8b8146105ca578063c7ad0895146105eb578063ca37271b1461061f578063db7954fd1461063257600080fd5b80638da5cb5b116100ff5780638da5cb5b146104fd5780638f693ec71461051757806392a1823514610551578063b4a0bdf314610594578063be203094146105ae57600080fd5b80637c05a7c51461045b57806380d45a2d1461047b578063818149451461048e578063856e5e6c146104d75780638c37dfa3146104ea57600080fd5b8063552c0971116101c95780636dfd08ca1161018d5780636dfd08ca146103ec578063715018a614610418578063741b25251461042057806374c4c1cc1461043357806379ba50971461045357600080fd5b8063552c0971146103615780635d8441b81461038c5780636857249c1461039f5780636a95ddef146103c65780636d049329146103d957600080fd5b80631627ee89116102105780631627ee89146102a857806323526079146102d55780632a869a4d146102e85780632c427b57146102fb5780632eed69061461034e57600080fd5b806304caeb10146102425780630a3a3a9e146102575780630e32cb861461026a578063160c3a031461027d575b600080fd5b610255610250366004612cf1565b6106a6565b005b610255610265366004612d49565b61085e565b610255610278366004612d49565b610895565b6102926a0c097ce7bc90715b34b9f160241b81565b60405161029f9190612d7b565b60405180910390f35b6102c86102b6366004612d49565b60fd6020526000908152604090205481565b60405161029f9190612d8f565b6102556102e3366004612de4565b6108a6565b6102556102f6366004612d49565b6108df565b61033f610309366004612d49565b61010060205260009081526040902080546001909101546001600160e01b0382169163ffffffff600160e01b9091048116911683565b60405161029f93929190612e23565b61025561035c366004612e4b565b6109ca565b6102c861036f366004612e7e565b60fc60209081526000928352604080842090915290825290205481565b61025561039a366004612f03565b610a7d565b6102c87f000000000000000000000000000000000000000000000000000000000000000081565b6102556103d4366004612fb0565b610b84565b6102556103e7366004612e4b565b610bbf565b6102c86103fa366004612e7e565b61010360209081526000928352604080842090915290825290205481565b610255610c39565b61025561042e366004612d49565b610c4d565b6102c8610441366004612d49565b60ff6020526000908152604090205481565b610255610d55565b6102c8610469366004612d49565b60fe6020526000908152604090205481565b610255610489366004613000565b610d8a565b6104c861049c366004612d49565b610106602052600090815260409020805460018201546002909201546001600160e01b03909116919083565b60405161029f93929190613021565b6102556104e5366004612f03565b610d9b565b6102556104f83660046130be565b610eb5565b6033546001600160a01b03165b60405161029f919061315d565b6104c8610525366004612d49565b610107602052600090815260409020805460018201546002909201546001600160e01b03909116919083565b61033f61055f366004612d49565b60fb60205260009081526040902080546001909101546001600160e01b0382169163ffffffff600160e01b9091048116911683565b6097546001600160a01b03165b60405161029f919061317f565b6102556105bc36600461318d565b610f74565b6102c860c95481565b6102c86105d8366004612d49565b6101026020526000908152604090205481565b6106127f000000000000000000000000000000000000000000000000000000000000000081565b60405161029f91906131f9565b61025561062d366004612d49565b61108a565b610255610640366004612e7e565b61110a565b6102c861113f565b6065546001600160a01b031661050a565b6102c861066c366004612d49565b6101016020526000908152604090205481565b61025561068d366004612d49565b611172565b610105546105a1906001600160a01b031681565b80516106b1816111eb565b60005b818110156108185760008382815181106106d0576106d0613207565b602090810291909101015161010454604051633d98a1e560e01b81529192506001600160a01b031690633d98a1e59061070d90849060040161317f565b602060405180830381865afa15801561072a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074e9190613230565b6107735760405162461bcd60e51b815260040161076a90613280565b60405180910390fd5b60006040518060200160405280836001600160a01b031663aa5af0fd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e2919061329b565b905290506107f08282611214565b6107fb8287836115c7565b610804826117d7565b61080e8287611b35565b50506001016106b4565b506001600160a01b038316600090815260fd602052604090205461083d908490611d33565b6001600160a01b03909316600090815260fd60205260409020929092555050565b610104546001600160a01b031633146108895760405162461bcd60e51b815260040161076a90613303565b610892816117d7565b50565b61089d611dee565b61089281611e18565b610104546001600160a01b031633146108d15760405162461bcd60e51b815260040161076a90613303565b6108db8282611214565b5050565b610104546001600160a01b0316331461090a5760405162461bcd60e51b815260040161076a90613303565b600061091461113f565b90507f0000000000000000000000000000000000000000000000000000000000000000610988576109838261097e836040518060400160405280601c81526020017f626c6f636b206e756d6265722065786365656473203332206269747300000000815250611e9d565b611ecd565b610992565b6109928282611f82565b6040516001600160a01b038316907ffe6944646a362be70b0925ea999b3d9f755589a63ffcd89e4fb2b0affd252c7190600090a25050565b6109d2611dee565b6109db82610c4d565b80600003610a02576001600160a01b03821660009081526101026020526040812055610a25565b610a0a61113f565b6001600160a01b038316600090815261010260205260409020555b6001600160a01b0382166000818152610101602052604090819020839055517f4882c0217331870166b5d239c9f7be7801bab4be26560cd2f8789145d0fd3af490610a71908490612d8f565b60405180910390a25050565b610a9e6040518060600160405280603e8152602001613c6f603e9139612018565b7f0000000000000000000000000000000000000000000000000000000000000000610adb5760405162461bcd60e51b815260040161076a90613347565b848381148015610aea57508082145b610b065760405162461bcd60e51b815260040161076a90613357565b60005b81811015610b7a57610b72888883818110610b2657610b26613207565b9050602002016020810190610b3b91906133c2565b878784818110610b4d57610b4d613207565b90506020020135868685818110610b6657610b66613207565b905060200201356120b2565b600101610b09565b5050505050505050565b610104546001600160a01b03163314610baf5760405162461bcd60e51b815260040161076a90613303565b610bba8383836115c7565b505050565b610bc7611dee565b6000610bd38383611d33565b90508015610bf35760405162461bcd60e51b815260040161076a90613422565b826001600160a01b03167f251909abf904fc80eac3f0d4c25e5c800441ea19fda63c6f0df08e4f24f926f983604051610c2c9190612d8f565b60405180910390a2505050565b610c41611dee565b610c4b60006122c5565b565b6001600160a01b0381166000908152610101602052604081205490610c7061113f565b6001600160a01b0384166000908152610102602052604081205491925090610c999083906122de565b9050600081118015610cab5750600083115b15610d4f576000610cbc82856122f1565b6001600160a01b038616600090815260fd602052604081205491925090610ce390836122fd565b6001600160a01b038716600081815260fd602081815260408084208681556101028352938190208a90559190529054905192935090917f38fe05baf9dc12e4e3bfda3daba26419e9930bf26ee6227f407ca46f8c9c29bc91610d4491612d8f565b60405180910390a250505b50505050565b60655433906001600160a01b03168114610d815760405162461bcd60e51b815260040161076a90613478565b610892816122c5565b610d92611dee565b61089281612309565b610dbc604051806060016040528060338152602001613cad60339139612018565b7f000000000000000000000000000000000000000000000000000000000000000015610dfa5760405162461bcd60e51b815260040161076a906134bc565b848381148015610e0957508082145b610e255760405162461bcd60e51b815260040161076a90613526565b60005b81811015610b7a57610ead888883818110610e4557610e45613207565b9050602002016020810190610e5a91906133c2565b878784818110610e6c57610e6c613207565b9050602002016020810190610e81919061354d565b868685818110610e9357610e93613207565b9050602002016020810190610ea8919061354d565b612364565b600101610e28565b610ed6604051806060016040528060338152602001613ce060339139612018565b8251825181148015610ee85750815181145b610f045760405162461bcd60e51b815260040161076a906135a2565b60005b81811015610f6d57610f65858281518110610f2457610f24613207565b6020026020010151858381518110610f3e57610f3e613207565b6020026020010151858481518110610f5857610f58613207565b60200260200101516125cd565b600101610f07565b5050505050565b600054610100900460ff1615808015610f945750600054600160ff909116105b80610fae5750303b158015610fae575060005460ff166001145b610fca5760405162461bcd60e51b815260040161076a906135fd565b6000805460ff191660011790558015610fed576000805461ff0019166101001790555b61010480546001600160a01b038088166001600160a01b0319928316179092556101058054928716929091169190911790556110276127cc565b611030826127fb565b61103983612309565b8015610f6d576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989061107b90600190613621565b60405180910390a15050505050565b6108928161010460009054906101000a90046001600160a01b03166001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156110e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261025091908101906136af565b610104546001600160a01b031633146111355760405162461bcd60e51b815260040161076a90613303565b6108db8282611b35565b600061116d7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16565b905090565b61117a611dee565b606580546001600160a01b0383166001600160a01b031990911681179091556111ab6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b4390565b4290565b60c9548111156108925760c9548160405163792bfb1b60e11b815260040161076a9291906136ea565b6001600160a01b038216600090815261010060209081526040808320610107835281842060fe90935290832054909261124b61113f565b90507f00000000000000000000000000000000000000000000000000000000000000006112b3576112b1816040518060400160405280601c81526020017f626c6f636b206e756d6265722065786365656473203332206269747300000000815250611e9d565b505b60007f00000000000000000000000000000000000000000000000000000000000000006112ea57600185015463ffffffff166112f0565b83600201545b905060008111801561130157508082115b1561130a578091505b6000611353837f0000000000000000000000000000000000000000000000000000000000000000611349578754600160e01b900463ffffffff166122de565b86600101546122de565b90506000811180156113655750600084115b156115285760006113d7896001600160a01b03166347bd37186040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d1919061329b565b89612822565b905060006113e583876122f1565b90506000808311611405576040518060200160405280600081525061140f565b61140f8284612840565b905060007f00000000000000000000000000000000000000000000000000000000000000006114485789546001600160e01b0316611454565b88546001600160e01b03165b905060006114b661147c6040518060200160405280856001600160e01b031681525085612884565b5160408051808201909152601a81527f6e657720696e646578206578636565647320323234206269747300000000000060208201526128b0565b90507f0000000000000000000000000000000000000000000000000000000000000000156115035789546001600160e01b0319166001600160e01b038216178a5560018a0188905561151e565b63ffffffff8816600160e01b026001600160e01b038216178b555b505050505061157c565b801561157c577f000000000000000000000000000000000000000000000000000000000000000015611560576001850183905561157c565b85546001600160e01b0316600160e01b63ffffffff8516021786555b876001600160a01b03167fbfeed4eb85c013b0e466fdfdbaa785159ff7986078247dc95f1c717a5bd6bca2886040516115b59190613716565b60405180910390a25050505050505050565b6001600160a01b038316600090815261010060209081526040808320610107909252822090917f00000000000000000000000000000000000000000000000000000000000000006116225782546001600160e01b031661162e565b81546001600160e01b03165b6001600160a01b03878116600090815261010360209081526040808320938a1683529290522080546001600160e01b03929092169081905591508015801561168457506a0c097ce7bc90715b34b9f160241b8210155b1561169a57506a0c097ce7bc90715b34b9f160241b5b600060405180602001604052806116b185856122de565b8152509050600061172e896001600160a01b03166395dd91938a6040518263ffffffff1660e01b81526004016116e7919061315d565b602060405180830381865afa158015611704573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611728919061329b565b88612822565b905080156117cc57600061174282846128db565b6001600160a01b038a16600090815260fd60205260408120549192509061176990836122fd565b6001600160a01b03808c16600081815260fd6020526040908190208490555192935091908d16907f510d7612da9ca257889eabdfbe0366aaea10020be46f7810f4afb2111d80aa93906117c190869086908c90613724565b60405180910390a350505b505050505050505050565b6001600160a01b038116600090815260fb60209081526040808320610106835281842060ff90935290832054909261180d61113f565b90507f000000000000000000000000000000000000000000000000000000000000000061187557611873816040518060400160405280601c81526020017f626c6f636b206e756d6265722065786365656473203332206269747300000000815250611e9d565b505b60007f00000000000000000000000000000000000000000000000000000000000000006118ac57600185015463ffffffff166118b2565b83600201545b90506000811180156118c357508082115b156118cc578091505b600061190b837f0000000000000000000000000000000000000000000000000000000000000000611349578754600160e01b900463ffffffff166122de565b905060008111801561191d5750600084115b15611a9d576000876001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611962573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611986919061329b565b9050600061199483876122f1565b905060008083116119b457604051806020016040528060008152506119be565b6119be8284612840565b905060007f00000000000000000000000000000000000000000000000000000000000000006119f75789546001600160e01b0316611a03565b88546001600160e01b03165b90506000611a2b61147c6040518060200160405280856001600160e01b031681525085612884565b90507f000000000000000000000000000000000000000000000000000000000000000015611a785789546001600160e01b0319166001600160e01b038216178a5560018a01889055611a93565b63ffffffff8816600160e01b026001600160e01b038216178b555b5050505050611af8565b8015611af8577f0000000000000000000000000000000000000000000000000000000000000000611aed5785546001600160e01b0316600160e01b63ffffffff8516908102919091178755611af6565b82856001018190555b505b6040516001600160a01b038816907f6a7b996800070d8bc0f9a3ddcb0a4b09bc1653f76381d745444956366afd423a90600090a250505050505050565b6001600160a01b038216600090815260fb60209081526040808320610106909252822090917f0000000000000000000000000000000000000000000000000000000000000000611b8f5782546001600160e01b0316611b9b565b81546001600160e01b03165b6001600160a01b03868116600090815260fc6020908152604080832093891683529290522080546001600160e01b039290921690819055915080158015611bf057506a0c097ce7bc90715b34b9f160241b8210155b15611c0657506a0c097ce7bc90715b34b9f160241b5b60006040518060200160405280611c1d85856122de565b90526040516370a0823160e01b81529091506000906001600160a01b038916906370a0823190611c51908a9060040161315d565b602060405180830381865afa158015611c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c92919061329b565b90506000611ca082846128db565b6001600160a01b038916600090815260fd602052604081205491925090611cc790836122fd565b6001600160a01b03808b16600081815260fd6020526040908190208490555192935091908c16907f9563ff6035b973f2e4514ad9315010c220eb74b0c33a782a18118a199a97e44290611d1f90869086908c90613724565b60405180910390a350505050505050505050565b610105546040516370a0823160e01b815260009182916001600160a01b03909116906370a0823190611d6990309060040161315d565b602060405180830381865afa158015611d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daa919061329b565b9050600083118015611dbc5750808311155b15611de35761010554611dd9906001600160a01b03168585612904565b6000915050611de8565b829150505b92915050565b6033546001600160a01b03163314610c4b5760405162461bcd60e51b815260040161076a90613764565b6001600160a01b038116611e3e5760405162461bcd60e51b815260040161076a906137b6565b609780546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa090611e9190839085906137c6565b60405180910390a15050565b60008163ffffffff841115611ec55760405162461bcd60e51b815260040161076a9190613837565b509192915050565b6001600160a01b038216600090815260fb6020908152604080832061010090925282208154919290916001600160e01b03169003611f245781546001600160e01b0319166a0c097ce7bc90715b34b9f160241b1782555b80546001600160e01b0316600003611f555780546001600160e01b0319166a0c097ce7bc90715b34b9f160241b1781555b805463ffffffff909316600160e01b026001600160e01b0393841681179091558154909216909117905550565b6001600160a01b03821660009081526101066020908152604080832061010790925282208154919290916001600160e01b03169003611fda5781546001600160e01b0319166a0c097ce7bc90715b34b9f160241b1782555b80546001600160e01b031660000361200b5780546001600160e01b0319166a0c097ce7bc90715b34b9f160241b1781555b6001908101839055015550565b6097546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab9061204b9033908690600401613848565b602060405180830381865afa158015612068573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208c9190613230565b9050806108db57333083604051634a3fa29360e01b815260040161076a93929190613868565b61010454604051633d98a1e560e01b81526001600160a01b0390911690633d98a1e5906120e390869060040161317f565b602060405180830381865afa158015612100573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121249190613230565b6121405760405162461bcd60e51b815260040161076a906138d0565b600061214a61113f565b905080831161216b5760405162461bcd60e51b815260040161076a9061393a565b80821161218a5760405162461bcd60e51b815260040161076a9061393a565b6001600160a01b0384166000908152610106602090815260408083206002908101546101079093529220909101548115806121c457508282115b6121e05760405162461bcd60e51b815260040161076a90613990565b8015806121ec57508281115b6122085760405162461bcd60e51b815260040161076a90613990565b848214612267576001600160a01b0386166000818152610106602052604090819020600201879055517f0e68f65b8654c09acfdc448a42c8a0d72697206fd0c23c357022fa1cd16268619061225e908890612d8f565b60405180910390a25b8381146122bd576001600160a01b0386166000818152610107602052604090819020600201869055517f7aefe759bc95e5c94c6d919eef378c410527d0d85f409986ec8d54a99ea8395e90610d44908790612d8f565b505050505050565b606580546001600160a01b03191690556108928161295a565b60006122ea82846139b6565b9392505050565b60006122ea82846139c9565b60006122ea82846139e8565b60c954811161232a5760405162461bcd60e51b815260040161076a90613a3a565b60c98054908290556040517fc2d09fef144f7c8a86f71ea459f8fc17f675768eb1ae369cbd77fb31d467aafa90611e9190839085906136ea565b61010454604051633d98a1e560e01b81526001600160a01b0390911690633d98a1e59061239590869060040161317f565b602060405180830381865afa1580156123b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d69190613230565b6123f25760405162461bcd60e51b815260040161076a906138d0565b60006123fc61113f565b9050808363ffffffff16116124235760405162461bcd60e51b815260040161076a90613aa4565b808263ffffffff16116124485760405162461bcd60e51b815260040161076a90613aa4565b6001600160a01b038416600090815260fb6020908152604080832060019081015461010090935292209091015463ffffffff91821691168115806124915750828263ffffffff16115b6124ad5760405162461bcd60e51b815260040161076a90613990565b63ffffffff811615806124c55750828163ffffffff16115b6124e15760405162461bcd60e51b815260040161076a90613990565b8463ffffffff168263ffffffff161461255b576001600160a01b038616600081815260fb602052604090819020600101805463ffffffff191663ffffffff8916179055517f41b697bf2627e0a03f253382759baaab2469897004cc619465a3d8f4bb6b3fec90612552908890613ab4565b60405180910390a25b8363ffffffff168163ffffffff16146122bd576001600160a01b0386166000818152610100602052604090819020600101805463ffffffff191663ffffffff8816179055517f4163eb203170b7facecc8d7307e3f8affa8826d4df30fc722f8f8ce17988eb9190610d44908790613ab4565b61010454604051633d98a1e560e01b81526001600160a01b0390911690633d98a1e5906125fe90869060040161317f565b602060405180830381865afa15801561261b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263f9190613230565b61265b5760405162461bcd60e51b815260040161076a906138d0565b6001600160a01b038316600090815260ff602052604090205482146126d757612683836117d7565b6001600160a01b038316600081815260ff602052604090819020849055517f24741480445e83baea9eb28086e16a4377ebb4f003c773e386496fd90b3ed04e906126ce908590612d8f565b60405180910390a25b6001600160a01b038316600090815260fe60205260409020548114610bba5760006040518060200160405280856001600160a01b031663aa5af0fd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612741573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612765919061329b565b905290506127738482611214565b6001600160a01b038416600081815260fe602052604090819020849055517f2091432bbf4aa40f4785b469e931d32c5f5c6ba66dcf702a99cbe776df729c3c906127be908590612d8f565b60405180910390a250505050565b600054610100900460ff166127f35760405162461bcd60e51b815260040161076a90613b0a565b610c4b6129ac565b600054610100900460ff1661089d5760405162461bcd60e51b815260040161076a90613b0a565b60006122ea61283984670de0b6b3a76400006122f1565b83516129dc565b604080516020810190915260008152604051806020016040528061287b612875866a0c097ce7bc90715b34b9f160241b6122f1565b856129dc565b90529392505050565b604080516020810190915260008152604051806020016040528061287b856000015185600001516122fd565b6000816001600160e01b03841115611ec55760405162461bcd60e51b815260040161076a9190613837565b60006a0c097ce7bc90715b34b9f160241b6128fa8484600001516122f1565b6122ea9190613b30565b610bba8363a9059cbb60e01b8484604051602401612923929190613b44565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526129e8565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166129d35760405162461bcd60e51b815260040161076a90613b0a565b610c4b336122c5565b60006122ea8284613b30565b6000612a3d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612a7a9092919063ffffffff16565b9050805160001480612a5e575080806020019051810190612a5e9190613230565b610bba5760405162461bcd60e51b815260040161076a90613b99565b6060612a898484600085612a91565b949350505050565b606082471015612ab35760405162461bcd60e51b815260040161076a90613bec565b600080866001600160a01b03168587604051612acf9190613c1e565b60006040518083038185875af1925050503d8060008114612b0c576040519150601f19603f3d011682016040523d82523d6000602084013e612b11565b606091505b5091509150612b2287838387612b2d565b979650505050505050565b60608315612b6c578251600003612b65576001600160a01b0385163b612b655760405162461bcd60e51b815260040161076a90613c5e565b5081612a89565b612a898383815115612b815781518083602001fd5b8060405162461bcd60e51b815260040161076a9190613837565b60006001600160a01b038216611de8565b612bb581612b9b565b811461089257600080fd5b8035611de881612bac565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715612c0757612c07612bcb565b6040525050565b6000612c1960405190565b9050612c258282612be1565b919050565b600067ffffffffffffffff821115612c4457612c44612bcb565b5060209081020190565b6000611de882612b9b565b612bb581612c4e565b8035611de881612c59565b6000612c80612c7b84612c2a565b612c0e565b83815290506020808201908402830185811115612c9f57612c9f600080fd5b835b81811015612cc35780612cb48882612c62565b84525060209283019201612ca1565b5050509392505050565b600082601f830112612ce157612ce1600080fd5b8135612a89848260208601612c6d565b60008060408385031215612d0757612d07600080fd5b6000612d138585612bc0565b925050602083013567ffffffffffffffff811115612d3357612d33600080fd5b612d3f85828601612ccd565b9150509250929050565b600060208284031215612d5e57612d5e600080fd5b6000612a898484612bc0565b6001600160e01b0381165b82525050565b60208101611de88284612d6a565b80612d75565b60208101611de88284612d89565b80612bb5565b8035611de881612d9d565b600060208284031215612dc357612dc3600080fd5b612dcd6020612c0e565b90506000612ddb8484612da3565b82525092915050565b60008060408385031215612dfa57612dfa600080fd5b6000612e068585612bc0565b9250506020612d3f85828601612dae565b63ffffffff8116612d75565b60608101612e318286612d6a565b612e3e6020830185612e17565b612a896040830184612e17565b60008060408385031215612e6157612e61600080fd5b6000612e6d8585612bc0565b9250506020612d3f85828601612da3565b60008060408385031215612e9457612e94600080fd5b6000612ea08585612bc0565b9250506020612d3f85828601612bc0565b60008083601f840112612ec657612ec6600080fd5b50813567ffffffffffffffff811115612ee157612ee1600080fd5b602083019150836020820283011115612efc57612efc600080fd5b9250929050565b60008060008060008060608789031215612f1f57612f1f600080fd5b863567ffffffffffffffff811115612f3957612f39600080fd5b612f4589828a01612eb1565b9650965050602087013567ffffffffffffffff811115612f6757612f67600080fd5b612f7389828a01612eb1565b9450945050604087013567ffffffffffffffff811115612f9557612f95600080fd5b612fa189828a01612eb1565b92509250509295509295509295565b600080600060608486031215612fc857612fc8600080fd5b6000612fd48686612bc0565b9350506020612fe586828701612bc0565b9250506040612ff686828701612dae565b9150509250925092565b60006020828403121561301557613015600080fd5b6000612a898484612da3565b6060810161302f8286612d6a565b61303c6020830185612d89565b612a896040830184612d89565b6000613057612c7b84612c2a565b8381529050602080820190840283018581111561307657613076600080fd5b835b81811015612cc3578061308b8882612da3565b84525060209283019201613078565b600082601f8301126130ae576130ae600080fd5b8135612a89848260208601613049565b6000806000606084860312156130d6576130d6600080fd5b833567ffffffffffffffff8111156130f0576130f0600080fd5b6130fc86828701612ccd565b935050602084013567ffffffffffffffff81111561311c5761311c600080fd5b6131288682870161309a565b925050604084013567ffffffffffffffff81111561314857613148600080fd5b612ff68682870161309a565b612d7581612b9b565b60208101611de88284613154565b6000611de882612c4e565b612d758161316b565b60208101611de88284613176565b600080600080608085870312156131a6576131a6600080fd5b60006131b28787612c62565b94505060206131c387828801612c62565b93505060406131d487828801612da3565b92505060606131e587828801612bc0565b91505092959194509250565b801515612d75565b60208101611de882846131f1565b634e487b7160e01b600052603260045260246000fd5b801515612bb5565b8051611de88161321d565b60006020828403121561324557613245600080fd5b6000612a898484613225565b60158152600060208201741b585c9ad95d081b5d5cdd081899481b1a5cdd1959605a1b815291505b5060200190565b60208082528101611de881613251565b8051611de881612d9d565b6000602082840312156132b0576132b0600080fd5b6000612a898484613290565b602781526000602082017f4f6e6c7920636f6d7074726f6c6c65722063616e2063616c6c207468697320668152663ab731ba34b7b760c91b602082015291505b5060400190565b60208082528101611de8816132bc565b601981526000602082017f54696d652d6261736564206f7065726174696f6e206f6e6c790000000000000081529150613279565b60208082528101611de881613313565b60208082528101611de881604181527f526577617264734469737472696275746f723a3a7365744c617374526577617260208201527f64696e67426c6f636b54696d657374616d707320696e76616c696420696e70756040820152601d60fa1b606082015260800190565b6000602082840312156133d7576133d7600080fd5b6000612a898484612c62565b602281526000602082017f696e73756666696369656e7420726577617264546f6b656e20666f72206772618152611b9d60f21b602082015291506132fc565b60208082528101611de8816133e3565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b602082015291506132fc565b60208082528101611de881613432565b601a81526000602082017f426c6f636b2d6261736564206f7065726174696f6e206f6e6c7900000000000081529150613279565b60208082528101611de881613488565b603881526000602082017f526577617264734469737472696275746f723a3a7365744c617374526577617281527f64696e67426c6f636b7320696e76616c696420696e7075740000000000000000602082015291506132fc565b60208082528101611de8816134cc565b63ffffffff8116612bb5565b8035611de881613536565b60006020828403121561356257613562600080fd5b6000612a898484613542565b601c81526000602082017f696e76616c696420736574526577617264546f6b656e5370656564730000000081529150613279565b60208082528101611de88161356e565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015291506132fc565b60208082528101611de8816135b2565b600060ff8216611de8565b612d758161360d565b60208101611de88284613618565b8051611de881612c59565b6000613648612c7b84612c2a565b8381529050602080820190840283018581111561366757613667600080fd5b835b81811015612cc3578061367c888261362f565b84525060209283019201613669565b600082601f83011261369f5761369f600080fd5b8151612a8984826020860161363a565b6000602082840312156136c4576136c4600080fd5b815167ffffffffffffffff8111156136de576136de600080fd5b612a898482850161368b565b604081016136f88285612d89565b6122ea6020830184612d89565b80516020830190610d4f8482612d89565b60208101611de88284613705565b6060810161302f8286612d89565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081526000613279565b60208082528101611de881613732565b602581526000602082017f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b602082015291506132fc565b60208082528101611de881613774565b604081016137d48285613154565b6122ea6020830184613154565b60005b838110156137fc5781810151838201526020016137e4565b50506000910152565b600061380f825190565b8084526020840193506138268185602086016137e1565b601f01601f19169290920192915050565b602080825281016122ea8184613805565b604081016138568285613154565b8181036020830152612a898184613805565b606081016138768286613154565b6138836020830185613154565b81810360408301526138958184613805565b95945050505050565b60208082527f726577617264546f6b656e206d61726b6574206973206e6f74206c697374656491019081526000613279565b60208082528101611de88161389e565b603b81526000602082017f73657474696e67206c61737420726577617264696e672074696d657374616d7081527f20696e207468652070617374206973206e6f7420616c6c6f7765640000000000602082015291506132fc565b60208082528101611de8816138e0565b602981526000602082017f7468697320526577617264734469737472696275746f7220697320616c726561815268191e481b1bd8dad95960ba1b602082015291506132fc565b60208082528101611de88161394a565b634e487b7160e01b600052601160045260246000fd5b81810381811115611de857611de86139a0565b8181028082158382048514176139e1576139e16139a0565b5092915050565b80820180821115611de857611de86139a0565b602281526000602082017f436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d8152611a5d60f21b602082015291506132fc565b60208082528101611de8816139fb565b603781526000602082017f73657474696e67206c61737420726577617264696e6720626c6f636b20696e2081527f7468652070617374206973206e6f7420616c6c6f776564000000000000000000602082015291506132fc565b60208082528101611de881613a4a565b60208101611de88284612e17565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b602082015291506132fc565b60208082528101611de881613ac2565b634e487b7160e01b600052601260045260246000fd5b600082613b3f57613b3f613b1a565b500490565b604081016136f88285613154565b602a81526000602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015291506132fc565b60208082528101611de881613b52565b602681526000602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f8152651c8818d85b1b60d21b602082015291506132fc565b60208082528101611de881613ba9565b6000613c06825190565b613c148185602086016137e1565b9290920192915050565b60006122ea8284613bfc565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150613279565b60208082528101611de881613c2a56fe7365744c617374526577617264696e67426c6f636b54696d657374616d707328616464726573735b5d2c75696e743235365b5d2c75696e743235365b5d297365744c617374526577617264696e67426c6f636b7328616464726573735b5d2c75696e7433325b5d2c75696e7433325b5d29736574526577617264546f6b656e53706565647328616464726573735b5d2c75696e743235365b5d2c75696e743235365b5d29a2646970667358221220de35fe96c63c31606a6974495f3b91116b249ca932059888f347a80f6a7ff6e464736f6c63430008190033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x4024 CODESIZE SUB DUP1 PUSH2 0x4024 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x19F JUMP JUMPDEST DUP2 DUP2 DUP2 ISZERO DUP1 ISZERO PUSH2 0x3D JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0x5B JUMPI PUSH1 0x40 MLOAD PUSH4 0x2723DFB PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x67 JUMPI POP DUP1 ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x85 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAE0FCAB3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 ISZERO ISZERO PUSH1 0xA0 MSTORE DUP2 PUSH2 0x96 JUMPI DUP1 PUSH2 0x9C JUMP JUMPDEST PUSH4 0x1E13380 JUMPDEST PUSH1 0x80 MSTORE DUP2 PUSH2 0xB3 JUMPI PUSH2 0xDC PUSH1 0x20 SHL PUSH2 0x11E3 OR PUSH2 0xBE JUMP JUMPDEST PUSH2 0xE0 PUSH1 0x20 SHL PUSH2 0x11E7 OR JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0xC0 MSTORE POP PUSH2 0xD5 SWAP1 POP PUSH2 0xE4 JUMP JUMPDEST POP POP PUSH2 0x236 JUMP JUMPDEST NUMBER SWAP1 JUMP JUMPDEST TIMESTAMP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x115 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x10C SWAP1 PUSH2 0x1DC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF SWAP1 DUP2 AND EQ PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP2 PUSH2 0x160 SWAP2 PUSH2 0x227 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST JUMP JUMPDEST DUP1 ISZERO ISZERO JUMPDEST DUP2 EQ PUSH2 0x17A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x188 DUP2 PUSH2 0x16B JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 PUSH2 0x16F JUMP JUMPDEST DUP1 MLOAD PUSH2 0x188 DUP2 PUSH2 0x18E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1B5 JUMPI PUSH2 0x1B5 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1C1 DUP6 DUP6 PUSH2 0x17D JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1D2 DUP6 DUP3 DUP7 ADD PUSH2 0x194 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x188 DUP2 PUSH1 0x27 DUP2 MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320696E697469 PUSH1 0x20 DUP3 ADD MSTORE PUSH7 0x616C697A696E67 PUSH1 0xC8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP3 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD PUSH2 0x188 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x3D48 PUSH2 0x2DC PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x1146 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x5F0 ADD MSTORE DUP2 DUP2 PUSH2 0x918 ADD MSTORE DUP2 DUP2 PUSH2 0xAA0 ADD MSTORE DUP2 DUP2 PUSH2 0xDBE ADD MSTORE DUP2 DUP2 PUSH2 0x124F ADD MSTORE DUP2 DUP2 PUSH2 0x12B7 ADD MSTORE DUP2 DUP2 PUSH2 0x1312 ADD MSTORE DUP2 DUP2 PUSH2 0x1415 ADD MSTORE DUP2 DUP2 PUSH2 0x14BA ADD MSTORE DUP2 DUP2 PUSH2 0x1530 ADD MSTORE DUP2 DUP2 PUSH2 0x15EF ADD MSTORE DUP2 DUP2 PUSH2 0x1811 ADD MSTORE DUP2 DUP2 PUSH2 0x1879 ADD MSTORE DUP2 DUP2 PUSH2 0x18D4 ADD MSTORE DUP2 DUP2 PUSH2 0x19C4 ADD MSTORE DUP2 DUP2 PUSH2 0x1A2F ADD MSTORE DUP2 DUP2 PUSH2 0x1AA5 ADD MSTORE PUSH2 0x1B5C ADD MSTORE PUSH1 0x0 PUSH2 0x3A4 ADD MSTORE PUSH2 0x3D48 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x23D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7C05A7C5 GT PUSH2 0x13B JUMPI DUP1 PUSH4 0xBE26317E GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xE1D146FB GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xE1D146FB EQ PUSH2 0x645 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x64D JUMPI DUP1 PUSH4 0xEFC75F24 EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x67F JUMPI DUP1 PUSH4 0xF7C618C1 EQ PUSH2 0x692 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBE26317E EQ PUSH2 0x5C1 JUMPI DUP1 PUSH4 0xBEA6B8B8 EQ PUSH2 0x5CA JUMPI DUP1 PUSH4 0xC7AD0895 EQ PUSH2 0x5EB JUMPI DUP1 PUSH4 0xCA37271B EQ PUSH2 0x61F JUMPI DUP1 PUSH4 0xDB7954FD EQ PUSH2 0x632 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xFF JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x4FD JUMPI DUP1 PUSH4 0x8F693EC7 EQ PUSH2 0x517 JUMPI DUP1 PUSH4 0x92A18235 EQ PUSH2 0x551 JUMPI DUP1 PUSH4 0xB4A0BDF3 EQ PUSH2 0x594 JUMPI DUP1 PUSH4 0xBE203094 EQ PUSH2 0x5AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7C05A7C5 EQ PUSH2 0x45B JUMPI DUP1 PUSH4 0x80D45A2D EQ PUSH2 0x47B JUMPI DUP1 PUSH4 0x81814945 EQ PUSH2 0x48E JUMPI DUP1 PUSH4 0x856E5E6C EQ PUSH2 0x4D7 JUMPI DUP1 PUSH4 0x8C37DFA3 EQ PUSH2 0x4EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x552C0971 GT PUSH2 0x1C9 JUMPI DUP1 PUSH4 0x6DFD08CA GT PUSH2 0x18D JUMPI DUP1 PUSH4 0x6DFD08CA EQ PUSH2 0x3EC JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x418 JUMPI DUP1 PUSH4 0x741B2525 EQ PUSH2 0x420 JUMPI DUP1 PUSH4 0x74C4C1CC EQ PUSH2 0x433 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x453 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x552C0971 EQ PUSH2 0x361 JUMPI DUP1 PUSH4 0x5D8441B8 EQ PUSH2 0x38C JUMPI DUP1 PUSH4 0x6857249C EQ PUSH2 0x39F JUMPI DUP1 PUSH4 0x6A95DDEF EQ PUSH2 0x3C6 JUMPI DUP1 PUSH4 0x6D049329 EQ PUSH2 0x3D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1627EE89 GT PUSH2 0x210 JUMPI DUP1 PUSH4 0x1627EE89 EQ PUSH2 0x2A8 JUMPI DUP1 PUSH4 0x23526079 EQ PUSH2 0x2D5 JUMPI DUP1 PUSH4 0x2A869A4D EQ PUSH2 0x2E8 JUMPI DUP1 PUSH4 0x2C427B57 EQ PUSH2 0x2FB JUMPI DUP1 PUSH4 0x2EED6906 EQ PUSH2 0x34E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4CAEB10 EQ PUSH2 0x242 JUMPI DUP1 PUSH4 0xA3A3A9E EQ PUSH2 0x257 JUMPI DUP1 PUSH4 0xE32CB86 EQ PUSH2 0x26A JUMPI DUP1 PUSH4 0x160C3A03 EQ PUSH2 0x27D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x255 PUSH2 0x250 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CF1 JUMP JUMPDEST PUSH2 0x6A6 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x255 PUSH2 0x265 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0x85E JUMP JUMPDEST PUSH2 0x255 PUSH2 0x278 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0x895 JUMP JUMPDEST PUSH2 0x292 PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29F SWAP2 SWAP1 PUSH2 0x2D7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2C8 PUSH2 0x2B6 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH1 0xFD PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29F SWAP2 SWAP1 PUSH2 0x2D8F JUMP JUMPDEST PUSH2 0x255 PUSH2 0x2E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2DE4 JUMP JUMPDEST PUSH2 0x8A6 JUMP JUMPDEST PUSH2 0x255 PUSH2 0x2F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0x8DF JUMP JUMPDEST PUSH2 0x33F PUSH2 0x309 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0x100 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP3 AND SWAP2 PUSH4 0xFFFFFFFF PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 SWAP2 DIV DUP2 AND SWAP2 AND DUP4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2E23 JUMP JUMPDEST PUSH2 0x255 PUSH2 0x35C CALLDATASIZE PUSH1 0x4 PUSH2 0x2E4B JUMP JUMPDEST PUSH2 0x9CA JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0x36F CALLDATASIZE PUSH1 0x4 PUSH2 0x2E7E JUMP JUMPDEST PUSH1 0xFC PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x255 PUSH2 0x39A CALLDATASIZE PUSH1 0x4 PUSH2 0x2F03 JUMP JUMPDEST PUSH2 0xA7D JUMP JUMPDEST PUSH2 0x2C8 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x255 PUSH2 0x3D4 CALLDATASIZE PUSH1 0x4 PUSH2 0x2FB0 JUMP JUMPDEST PUSH2 0xB84 JUMP JUMPDEST PUSH2 0x255 PUSH2 0x3E7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2E4B JUMP JUMPDEST PUSH2 0xBBF JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0x3FA CALLDATASIZE PUSH1 0x4 PUSH2 0x2E7E JUMP JUMPDEST PUSH2 0x103 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x255 PUSH2 0xC39 JUMP JUMPDEST PUSH2 0x255 PUSH2 0x42E CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0xC4D JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0x441 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x255 PUSH2 0xD55 JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0x469 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH1 0xFE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x255 PUSH2 0x489 CALLDATASIZE PUSH1 0x4 PUSH2 0x3000 JUMP JUMPDEST PUSH2 0xD8A JUMP JUMPDEST PUSH2 0x4C8 PUSH2 0x49C CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0x106 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP1 SWAP2 AND SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3021 JUMP JUMPDEST PUSH2 0x255 PUSH2 0x4E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F03 JUMP JUMPDEST PUSH2 0xD9B JUMP JUMPDEST PUSH2 0x255 PUSH2 0x4F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x30BE JUMP JUMPDEST PUSH2 0xEB5 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29F SWAP2 SWAP1 PUSH2 0x315D JUMP JUMPDEST PUSH2 0x4C8 PUSH2 0x525 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0x107 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP1 SWAP2 AND SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH2 0x33F PUSH2 0x55F CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH1 0xFB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP3 AND SWAP2 PUSH4 0xFFFFFFFF PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 SWAP2 DIV DUP2 AND SWAP2 AND DUP4 JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29F SWAP2 SWAP1 PUSH2 0x317F JUMP JUMPDEST PUSH2 0x255 PUSH2 0x5BC CALLDATASIZE PUSH1 0x4 PUSH2 0x318D JUMP JUMPDEST PUSH2 0xF74 JUMP JUMPDEST PUSH2 0x2C8 PUSH1 0xC9 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0x5D8 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0x102 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x612 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29F SWAP2 SWAP1 PUSH2 0x31F9 JUMP JUMPDEST PUSH2 0x255 PUSH2 0x62D CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0x108A JUMP JUMPDEST PUSH2 0x255 PUSH2 0x640 CALLDATASIZE PUSH1 0x4 PUSH2 0x2E7E JUMP JUMPDEST PUSH2 0x110A JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0x113F JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x50A JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0x66C CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0x101 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x255 PUSH2 0x68D CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0x1172 JUMP JUMPDEST PUSH2 0x105 SLOAD PUSH2 0x5A1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x6B1 DUP2 PUSH2 0x11EB JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x818 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x6D0 JUMPI PUSH2 0x6D0 PUSH2 0x3207 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x104 SLOAD PUSH1 0x40 MLOAD PUSH4 0x3D98A1E5 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x3D98A1E5 SWAP1 PUSH2 0x70D SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x317F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x72A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x74E SWAP2 SWAP1 PUSH2 0x3230 JUMP JUMPDEST PUSH2 0x773 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3280 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAA5AF0FD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7BE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7E2 SWAP2 SWAP1 PUSH2 0x329B JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP PUSH2 0x7F0 DUP3 DUP3 PUSH2 0x1214 JUMP JUMPDEST PUSH2 0x7FB DUP3 DUP8 DUP4 PUSH2 0x15C7 JUMP JUMPDEST PUSH2 0x804 DUP3 PUSH2 0x17D7 JUMP JUMPDEST PUSH2 0x80E DUP3 DUP8 PUSH2 0x1B35 JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x6B4 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x83D SWAP1 DUP5 SWAP1 PUSH2 0x1D33 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP3 SWAP1 SWAP3 SSTORE POP POP JUMP JUMPDEST PUSH2 0x104 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x889 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3303 JUMP JUMPDEST PUSH2 0x892 DUP2 PUSH2 0x17D7 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x89D PUSH2 0x1DEE JUMP JUMPDEST PUSH2 0x892 DUP2 PUSH2 0x1E18 JUMP JUMPDEST PUSH2 0x104 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x8D1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3303 JUMP JUMPDEST PUSH2 0x8DB DUP3 DUP3 PUSH2 0x1214 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x104 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x90A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3303 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x914 PUSH2 0x113F JUMP JUMPDEST SWAP1 POP PUSH32 0x0 PUSH2 0x988 JUMPI PUSH2 0x983 DUP3 PUSH2 0x97E DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x626C6F636B206E756D6265722065786365656473203332206269747300000000 DUP2 MSTORE POP PUSH2 0x1E9D JUMP JUMPDEST PUSH2 0x1ECD JUMP JUMPDEST PUSH2 0x992 JUMP JUMPDEST PUSH2 0x992 DUP3 DUP3 PUSH2 0x1F82 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0xFE6944646A362BE70B0925EA999B3D9F755589A63FFCD89E4FB2B0AFFD252C71 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0x9D2 PUSH2 0x1DEE JUMP JUMPDEST PUSH2 0x9DB DUP3 PUSH2 0xC4D JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0xA02 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x102 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0xA25 JUMP JUMPDEST PUSH2 0xA0A PUSH2 0x113F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x102 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH2 0x101 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE MLOAD PUSH32 0x4882C0217331870166B5D239C9F7BE7801BAB4BE26560CD2F8789145D0FD3AF4 SWAP1 PUSH2 0xA71 SWAP1 DUP5 SWAP1 PUSH2 0x2D8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0xA9E PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3E DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3C6F PUSH1 0x3E SWAP2 CODECOPY PUSH2 0x2018 JUMP JUMPDEST PUSH32 0x0 PUSH2 0xADB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3347 JUMP JUMPDEST DUP5 DUP4 DUP2 EQ DUP1 ISZERO PUSH2 0xAEA JUMPI POP DUP1 DUP3 EQ JUMPDEST PUSH2 0xB06 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3357 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB7A JUMPI PUSH2 0xB72 DUP9 DUP9 DUP4 DUP2 DUP2 LT PUSH2 0xB26 JUMPI PUSH2 0xB26 PUSH2 0x3207 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xB3B SWAP2 SWAP1 PUSH2 0x33C2 JUMP JUMPDEST DUP8 DUP8 DUP5 DUP2 DUP2 LT PUSH2 0xB4D JUMPI PUSH2 0xB4D PUSH2 0x3207 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0xB66 JUMPI PUSH2 0xB66 PUSH2 0x3207 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH2 0x20B2 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xB09 JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x104 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xBAF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3303 JUMP JUMPDEST PUSH2 0xBBA DUP4 DUP4 DUP4 PUSH2 0x15C7 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xBC7 PUSH2 0x1DEE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD3 DUP4 DUP4 PUSH2 0x1D33 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0xBF3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3422 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x251909ABF904FC80EAC3F0D4C25E5C800441EA19FDA63C6F0DF08E4F24F926F9 DUP4 PUSH1 0x40 MLOAD PUSH2 0xC2C SWAP2 SWAP1 PUSH2 0x2D8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH2 0xC41 PUSH2 0x1DEE JUMP JUMPDEST PUSH2 0xC4B PUSH1 0x0 PUSH2 0x22C5 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x101 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0xC70 PUSH2 0x113F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x102 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0xC99 SWAP1 DUP4 SWAP1 PUSH2 0x22DE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH2 0xCAB JUMPI POP PUSH1 0x0 DUP4 GT JUMPDEST ISZERO PUSH2 0xD4F JUMPI PUSH1 0x0 PUSH2 0xCBC DUP3 DUP6 PUSH2 0x22F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0xCE3 SWAP1 DUP4 PUSH2 0x22FD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xFD PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP7 DUP2 SSTORE PUSH2 0x102 DUP4 MSTORE SWAP4 DUP2 SWAP1 KECCAK256 DUP11 SWAP1 SSTORE SWAP2 SWAP1 MSTORE SWAP1 SLOAD SWAP1 MLOAD SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0x38FE05BAF9DC12E4E3BFDA3DABA26419E9930BF26EE6227F407CA46F8C9C29BC SWAP2 PUSH2 0xD44 SWAP2 PUSH2 0x2D8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x65 SLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 EQ PUSH2 0xD81 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3478 JUMP JUMPDEST PUSH2 0x892 DUP2 PUSH2 0x22C5 JUMP JUMPDEST PUSH2 0xD92 PUSH2 0x1DEE JUMP JUMPDEST PUSH2 0x892 DUP2 PUSH2 0x2309 JUMP JUMPDEST PUSH2 0xDBC PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x33 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3CAD PUSH1 0x33 SWAP2 CODECOPY PUSH2 0x2018 JUMP JUMPDEST PUSH32 0x0 ISZERO PUSH2 0xDFA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x34BC JUMP JUMPDEST DUP5 DUP4 DUP2 EQ DUP1 ISZERO PUSH2 0xE09 JUMPI POP DUP1 DUP3 EQ JUMPDEST PUSH2 0xE25 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3526 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB7A JUMPI PUSH2 0xEAD DUP9 DUP9 DUP4 DUP2 DUP2 LT PUSH2 0xE45 JUMPI PUSH2 0xE45 PUSH2 0x3207 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE5A SWAP2 SWAP1 PUSH2 0x33C2 JUMP JUMPDEST DUP8 DUP8 DUP5 DUP2 DUP2 LT PUSH2 0xE6C JUMPI PUSH2 0xE6C PUSH2 0x3207 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE81 SWAP2 SWAP1 PUSH2 0x354D JUMP JUMPDEST DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0xE93 JUMPI PUSH2 0xE93 PUSH2 0x3207 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xEA8 SWAP2 SWAP1 PUSH2 0x354D JUMP JUMPDEST PUSH2 0x2364 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xE28 JUMP JUMPDEST PUSH2 0xED6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x33 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3CE0 PUSH1 0x33 SWAP2 CODECOPY PUSH2 0x2018 JUMP JUMPDEST DUP3 MLOAD DUP3 MLOAD DUP2 EQ DUP1 ISZERO PUSH2 0xEE8 JUMPI POP DUP2 MLOAD DUP2 EQ JUMPDEST PUSH2 0xF04 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x35A2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xF6D JUMPI PUSH2 0xF65 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xF24 JUMPI PUSH2 0xF24 PUSH2 0x3207 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xF3E JUMPI PUSH2 0xF3E PUSH2 0x3207 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xF58 JUMPI PUSH2 0xF58 PUSH2 0x3207 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x25CD JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xF07 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0xF94 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0xFAE JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xFAE JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0xFCA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x35FD JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0xFED JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x104 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH2 0x105 DUP1 SLOAD SWAP3 DUP8 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1027 PUSH2 0x27CC JUMP JUMPDEST PUSH2 0x1030 DUP3 PUSH2 0x27FB JUMP JUMPDEST PUSH2 0x1039 DUP4 PUSH2 0x2309 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xF6D JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH2 0x107B SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x3621 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x892 DUP2 PUSH2 0x104 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB0772D0B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x250 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x36AF JUMP JUMPDEST PUSH2 0x104 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1135 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3303 JUMP JUMPDEST PUSH2 0x8DB DUP3 DUP3 PUSH2 0x1B35 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x116D PUSH32 0x0 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x117A PUSH2 0x1DEE JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH2 0x11AB PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST NUMBER SWAP1 JUMP JUMPDEST TIMESTAMP SWAP1 JUMP JUMPDEST PUSH1 0xC9 SLOAD DUP2 GT ISZERO PUSH2 0x892 JUMPI PUSH1 0xC9 SLOAD DUP2 PUSH1 0x40 MLOAD PUSH4 0x792BFB1B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP3 SWAP2 SWAP1 PUSH2 0x36EA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x100 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH2 0x107 DUP4 MSTORE DUP2 DUP5 KECCAK256 PUSH1 0xFE SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 SLOAD SWAP1 SWAP3 PUSH2 0x124B PUSH2 0x113F JUMP JUMPDEST SWAP1 POP PUSH32 0x0 PUSH2 0x12B3 JUMPI PUSH2 0x12B1 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x626C6F636B206E756D6265722065786365656473203332206269747300000000 DUP2 MSTORE POP PUSH2 0x1E9D JUMP JUMPDEST POP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH2 0x12EA JUMPI PUSH1 0x1 DUP6 ADD SLOAD PUSH4 0xFFFFFFFF AND PUSH2 0x12F0 JUMP JUMPDEST DUP4 PUSH1 0x2 ADD SLOAD JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH2 0x1301 JUMPI POP DUP1 DUP3 GT JUMPDEST ISZERO PUSH2 0x130A JUMPI DUP1 SWAP2 POP JUMPDEST PUSH1 0x0 PUSH2 0x1353 DUP4 PUSH32 0x0 PUSH2 0x1349 JUMPI DUP8 SLOAD PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x22DE JUMP JUMPDEST DUP7 PUSH1 0x1 ADD SLOAD PUSH2 0x22DE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH2 0x1365 JUMPI POP PUSH1 0x0 DUP5 GT JUMPDEST ISZERO PUSH2 0x1528 JUMPI PUSH1 0x0 PUSH2 0x13D7 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x47BD3718 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13D1 SWAP2 SWAP1 PUSH2 0x329B JUMP JUMPDEST DUP10 PUSH2 0x2822 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x13E5 DUP4 DUP8 PUSH2 0x22F1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP4 GT PUSH2 0x1405 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x140F JUMP JUMPDEST PUSH2 0x140F DUP3 DUP5 PUSH2 0x2840 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH32 0x0 PUSH2 0x1448 JUMPI DUP10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH2 0x1454 JUMP JUMPDEST DUP9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x14B6 PUSH2 0x147C PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND DUP2 MSTORE POP DUP6 PUSH2 0x2884 JUMP JUMPDEST MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1A DUP2 MSTORE PUSH32 0x6E657720696E6465782065786365656473203232342062697473000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x28B0 JUMP JUMPDEST SWAP1 POP PUSH32 0x0 ISZERO PUSH2 0x1503 JUMPI DUP10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP3 AND OR DUP11 SSTORE PUSH1 0x1 DUP11 ADD DUP9 SWAP1 SSTORE PUSH2 0x151E JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP9 AND PUSH1 0x1 PUSH1 0xE0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP3 AND OR DUP12 SSTORE JUMPDEST POP POP POP POP POP PUSH2 0x157C JUMP JUMPDEST DUP1 ISZERO PUSH2 0x157C JUMPI PUSH32 0x0 ISZERO PUSH2 0x1560 JUMPI PUSH1 0x1 DUP6 ADD DUP4 SWAP1 SSTORE PUSH2 0x157C JUMP JUMPDEST DUP6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0xE0 SHL PUSH4 0xFFFFFFFF DUP6 AND MUL OR DUP7 SSTORE JUMPDEST DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xBFEED4EB85C013B0E466FDFDBAA785159FF7986078247DC95F1C717A5BD6BCA2 DUP9 PUSH1 0x40 MLOAD PUSH2 0x15B5 SWAP2 SWAP1 PUSH2 0x3716 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x100 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH2 0x107 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SWAP1 SWAP2 PUSH32 0x0 PUSH2 0x1622 JUMPI DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH2 0x162E JUMP JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x103 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP11 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP1 DUP2 SWAP1 SSTORE SWAP2 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x1684 JUMPI POP PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL DUP3 LT ISZERO JUMPDEST ISZERO PUSH2 0x169A JUMPI POP PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x16B1 DUP6 DUP6 PUSH2 0x22DE JUMP JUMPDEST DUP2 MSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0x172E DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95DD9193 DUP11 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16E7 SWAP2 SWAP1 PUSH2 0x315D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1704 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1728 SWAP2 SWAP1 PUSH2 0x329B JUMP JUMPDEST DUP9 PUSH2 0x2822 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x17CC JUMPI PUSH1 0x0 PUSH2 0x1742 DUP3 DUP5 PUSH2 0x28DB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x1769 SWAP1 DUP4 PUSH2 0x22FD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP13 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xFD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD SWAP3 SWAP4 POP SWAP2 SWAP1 DUP14 AND SWAP1 PUSH32 0x510D7612DA9CA257889EABDFBE0366AAEA10020BE46F7810F4AFB2111D80AA93 SWAP1 PUSH2 0x17C1 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP13 SWAP1 PUSH2 0x3724 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH2 0x106 DUP4 MSTORE DUP2 DUP5 KECCAK256 PUSH1 0xFF SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 SLOAD SWAP1 SWAP3 PUSH2 0x180D PUSH2 0x113F JUMP JUMPDEST SWAP1 POP PUSH32 0x0 PUSH2 0x1875 JUMPI PUSH2 0x1873 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x626C6F636B206E756D6265722065786365656473203332206269747300000000 DUP2 MSTORE POP PUSH2 0x1E9D JUMP JUMPDEST POP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH2 0x18AC JUMPI PUSH1 0x1 DUP6 ADD SLOAD PUSH4 0xFFFFFFFF AND PUSH2 0x18B2 JUMP JUMPDEST DUP4 PUSH1 0x2 ADD SLOAD JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH2 0x18C3 JUMPI POP DUP1 DUP3 GT JUMPDEST ISZERO PUSH2 0x18CC JUMPI DUP1 SWAP2 POP JUMPDEST PUSH1 0x0 PUSH2 0x190B DUP4 PUSH32 0x0 PUSH2 0x1349 JUMPI DUP8 SLOAD PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x22DE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH2 0x191D JUMPI POP PUSH1 0x0 DUP5 GT JUMPDEST ISZERO PUSH2 0x1A9D JUMPI PUSH1 0x0 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1962 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1986 SWAP2 SWAP1 PUSH2 0x329B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1994 DUP4 DUP8 PUSH2 0x22F1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP4 GT PUSH2 0x19B4 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x19BE JUMP JUMPDEST PUSH2 0x19BE DUP3 DUP5 PUSH2 0x2840 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH32 0x0 PUSH2 0x19F7 JUMPI DUP10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH2 0x1A03 JUMP JUMPDEST DUP9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1A2B PUSH2 0x147C PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND DUP2 MSTORE POP DUP6 PUSH2 0x2884 JUMP JUMPDEST SWAP1 POP PUSH32 0x0 ISZERO PUSH2 0x1A78 JUMPI DUP10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP3 AND OR DUP11 SSTORE PUSH1 0x1 DUP11 ADD DUP9 SWAP1 SSTORE PUSH2 0x1A93 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP9 AND PUSH1 0x1 PUSH1 0xE0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP3 AND OR DUP12 SSTORE JUMPDEST POP POP POP POP POP PUSH2 0x1AF8 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1AF8 JUMPI PUSH32 0x0 PUSH2 0x1AED JUMPI DUP6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0xE0 SHL PUSH4 0xFFFFFFFF DUP6 AND SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 OR DUP8 SSTORE PUSH2 0x1AF6 JUMP JUMPDEST DUP3 DUP6 PUSH1 0x1 ADD DUP2 SWAP1 SSTORE JUMPDEST POP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP1 PUSH32 0x6A7B996800070D8BC0F9A3DDCB0A4B09BC1653F76381D745444956366AFD423A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH2 0x106 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SWAP1 SWAP2 PUSH32 0x0 PUSH2 0x1B8F JUMPI DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH2 0x1B9B JUMP JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFC PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP10 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP1 DUP2 SWAP1 SSTORE SWAP2 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x1BF0 JUMPI POP PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL DUP3 LT ISZERO JUMPDEST ISZERO PUSH2 0x1C06 JUMPI POP PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x1C1D DUP6 DUP6 PUSH2 0x22DE JUMP JUMPDEST SWAP1 MSTORE PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1C51 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x315D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C6E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C92 SWAP2 SWAP1 PUSH2 0x329B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1CA0 DUP3 DUP5 PUSH2 0x28DB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x1CC7 SWAP1 DUP4 PUSH2 0x22FD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP12 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xFD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD SWAP3 SWAP4 POP SWAP2 SWAP1 DUP13 AND SWAP1 PUSH32 0x9563FF6035B973F2E4514AD9315010C220EB74B0C33A782A18118A199A97E442 SWAP1 PUSH2 0x1D1F SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP13 SWAP1 PUSH2 0x3724 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x105 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1D69 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x315D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D86 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DAA SWAP2 SWAP1 PUSH2 0x329B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x1DBC JUMPI POP DUP1 DUP4 GT ISZERO JUMPDEST ISZERO PUSH2 0x1DE3 JUMPI PUSH2 0x105 SLOAD PUSH2 0x1DD9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP6 PUSH2 0x2904 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0x1DE8 JUMP JUMPDEST DUP3 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC4B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3764 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1E3E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x37B6 JUMP JUMPDEST PUSH1 0x97 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP1 PUSH32 0x66FD58E82F7B31A2A5C30E0888F3093EFE4E111B00CD2B0C31FE014601293AA0 SWAP1 PUSH2 0x1E91 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x37C6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH4 0xFFFFFFFF DUP5 GT ISZERO PUSH2 0x1EC5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP2 SWAP1 PUSH2 0x3837 JUMP JUMPDEST POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH2 0x100 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 DUP2 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP1 SUB PUSH2 0x1F24 JUMPI DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL OR DUP3 SSTORE JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x0 SUB PUSH2 0x1F55 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL OR DUP2 SSTORE JUMPDEST DUP1 SLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP4 AND PUSH1 0x1 PUSH1 0xE0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP4 DUP5 AND DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD SWAP1 SWAP3 AND SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x106 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH2 0x107 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 DUP2 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP1 SUB PUSH2 0x1FDA JUMPI DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL OR DUP3 SSTORE JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x0 SUB PUSH2 0x200B JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL OR DUP2 SSTORE JUMPDEST PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE ADD SSTORE POP JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x40 MLOAD PUSH4 0x18C5E8AB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x18C5E8AB SWAP1 PUSH2 0x204B SWAP1 CALLER SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x3848 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2068 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x208C SWAP2 SWAP1 PUSH2 0x3230 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x8DB JUMPI CALLER ADDRESS DUP4 PUSH1 0x40 MLOAD PUSH4 0x4A3FA293 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3868 JUMP JUMPDEST PUSH2 0x104 SLOAD PUSH1 0x40 MLOAD PUSH4 0x3D98A1E5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x3D98A1E5 SWAP1 PUSH2 0x20E3 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x317F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2100 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2124 SWAP2 SWAP1 PUSH2 0x3230 JUMP JUMPDEST PUSH2 0x2140 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x38D0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x214A PUSH2 0x113F JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT PUSH2 0x216B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x393A JUMP JUMPDEST DUP1 DUP3 GT PUSH2 0x218A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x393A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x106 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x2 SWAP1 DUP2 ADD SLOAD PUSH2 0x107 SWAP1 SWAP4 MSTORE SWAP3 KECCAK256 SWAP1 SWAP2 ADD SLOAD DUP2 ISZERO DUP1 PUSH2 0x21C4 JUMPI POP DUP3 DUP3 GT JUMPDEST PUSH2 0x21E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3990 JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x21EC JUMPI POP DUP3 DUP2 GT JUMPDEST PUSH2 0x2208 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3990 JUMP JUMPDEST DUP5 DUP3 EQ PUSH2 0x2267 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH2 0x106 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x2 ADD DUP8 SWAP1 SSTORE MLOAD PUSH32 0xE68F65B8654C09ACFDC448A42C8A0D72697206FD0C23C357022FA1CD1626861 SWAP1 PUSH2 0x225E SWAP1 DUP9 SWAP1 PUSH2 0x2D8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST DUP4 DUP2 EQ PUSH2 0x22BD JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH2 0x107 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x2 ADD DUP7 SWAP1 SSTORE MLOAD PUSH32 0x7AEFE759BC95E5C94C6D919EEF378C410527D0D85F409986EC8D54A99EA8395E SWAP1 PUSH2 0xD44 SWAP1 DUP8 SWAP1 PUSH2 0x2D8F JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH2 0x892 DUP2 PUSH2 0x295A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22EA DUP3 DUP5 PUSH2 0x39B6 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22EA DUP3 DUP5 PUSH2 0x39C9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22EA DUP3 DUP5 PUSH2 0x39E8 JUMP JUMPDEST PUSH1 0xC9 SLOAD DUP2 GT PUSH2 0x232A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3A3A JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC2D09FEF144F7C8A86F71EA459F8FC17F675768EB1AE369CBD77FB31D467AAFA SWAP1 PUSH2 0x1E91 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x36EA JUMP JUMPDEST PUSH2 0x104 SLOAD PUSH1 0x40 MLOAD PUSH4 0x3D98A1E5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x3D98A1E5 SWAP1 PUSH2 0x2395 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x317F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23D6 SWAP2 SWAP1 PUSH2 0x3230 JUMP JUMPDEST PUSH2 0x23F2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x38D0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x23FC PUSH2 0x113F JUMP JUMPDEST SWAP1 POP DUP1 DUP4 PUSH4 0xFFFFFFFF AND GT PUSH2 0x2423 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3AA4 JUMP JUMPDEST DUP1 DUP3 PUSH4 0xFFFFFFFF AND GT PUSH2 0x2448 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3AA4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 SWAP1 DUP2 ADD SLOAD PUSH2 0x100 SWAP1 SWAP4 MSTORE SWAP3 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH4 0xFFFFFFFF SWAP2 DUP3 AND SWAP2 AND DUP2 ISZERO DUP1 PUSH2 0x2491 JUMPI POP DUP3 DUP3 PUSH4 0xFFFFFFFF AND GT JUMPDEST PUSH2 0x24AD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3990 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND ISZERO DUP1 PUSH2 0x24C5 JUMPI POP DUP3 DUP2 PUSH4 0xFFFFFFFF AND GT JUMPDEST PUSH2 0x24E1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3990 JUMP JUMPDEST DUP5 PUSH4 0xFFFFFFFF AND DUP3 PUSH4 0xFFFFFFFF AND EQ PUSH2 0x255B JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xFB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF DUP10 AND OR SWAP1 SSTORE MLOAD PUSH32 0x41B697BF2627E0A03F253382759BAAAB2469897004CC619465A3D8F4BB6B3FEC SWAP1 PUSH2 0x2552 SWAP1 DUP9 SWAP1 PUSH2 0x3AB4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST DUP4 PUSH4 0xFFFFFFFF AND DUP2 PUSH4 0xFFFFFFFF AND EQ PUSH2 0x22BD JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH2 0x100 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF DUP9 AND OR SWAP1 SSTORE MLOAD PUSH32 0x4163EB203170B7FACECC8D7307E3F8AFFA8826D4DF30FC722F8F8CE17988EB91 SWAP1 PUSH2 0xD44 SWAP1 DUP8 SWAP1 PUSH2 0x3AB4 JUMP JUMPDEST PUSH2 0x104 SLOAD PUSH1 0x40 MLOAD PUSH4 0x3D98A1E5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x3D98A1E5 SWAP1 PUSH2 0x25FE SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x317F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x261B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x263F SWAP2 SWAP1 PUSH2 0x3230 JUMP JUMPDEST PUSH2 0x265B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x38D0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 EQ PUSH2 0x26D7 JUMPI PUSH2 0x2683 DUP4 PUSH2 0x17D7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xFF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x24741480445E83BAEA9EB28086E16A4377EBB4F003C773E386496FD90B3ED04E SWAP1 PUSH2 0x26CE SWAP1 DUP6 SWAP1 PUSH2 0x2D8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 EQ PUSH2 0xBBA JUMPI PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAA5AF0FD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2741 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2765 SWAP2 SWAP1 PUSH2 0x329B JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP PUSH2 0x2773 DUP5 DUP3 PUSH2 0x1214 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xFE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x2091432BBF4AA40F4785B469E931D32C5F5C6BA66DCF702A99CBE776DF729C3C SWAP1 PUSH2 0x27BE SWAP1 DUP6 SWAP1 PUSH2 0x2D8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x27F3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3B0A JUMP JUMPDEST PUSH2 0xC4B PUSH2 0x29AC JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x89D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3B0A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22EA PUSH2 0x2839 DUP5 PUSH8 0xDE0B6B3A7640000 PUSH2 0x22F1 JUMP JUMPDEST DUP4 MLOAD PUSH2 0x29DC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x287B PUSH2 0x2875 DUP7 PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL PUSH2 0x22F1 JUMP JUMPDEST DUP6 PUSH2 0x29DC JUMP JUMPDEST SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x287B DUP6 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x22FD JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP5 GT ISZERO PUSH2 0x1EC5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP2 SWAP1 PUSH2 0x3837 JUMP JUMPDEST PUSH1 0x0 PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL PUSH2 0x28FA DUP5 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x22F1 JUMP JUMPDEST PUSH2 0x22EA SWAP2 SWAP1 PUSH2 0x3B30 JUMP JUMPDEST PUSH2 0xBBA DUP4 PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x2923 SWAP3 SWAP2 SWAP1 PUSH2 0x3B44 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x29E8 JUMP JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x29D3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3B0A JUMP JUMPDEST PUSH2 0xC4B CALLER PUSH2 0x22C5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22EA DUP3 DUP5 PUSH2 0x3B30 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A3D DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2A7A SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH1 0x0 EQ DUP1 PUSH2 0x2A5E JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2A5E SWAP2 SWAP1 PUSH2 0x3230 JUMP JUMPDEST PUSH2 0xBBA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3B99 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x2A89 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x2A91 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x2AB3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3BEC JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x2ACF SWAP2 SWAP1 PUSH2 0x3C1E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2B0C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2B11 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x2B22 DUP8 DUP4 DUP4 DUP8 PUSH2 0x2B2D JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x2B6C JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x2B65 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x2B65 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3C5E JUMP JUMPDEST POP DUP2 PUSH2 0x2A89 JUMP JUMPDEST PUSH2 0x2A89 DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x2B81 JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP2 SWAP1 PUSH2 0x3837 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1DE8 JUMP JUMPDEST PUSH2 0x2BB5 DUP2 PUSH2 0x2B9B JUMP JUMPDEST DUP2 EQ PUSH2 0x892 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1DE8 DUP2 PUSH2 0x2BAC JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x2C07 JUMPI PUSH2 0x2C07 PUSH2 0x2BCB JUMP JUMPDEST PUSH1 0x40 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C19 PUSH1 0x40 MLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x2C25 DUP3 DUP3 PUSH2 0x2BE1 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x2C44 JUMPI PUSH2 0x2C44 PUSH2 0x2BCB JUMP JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DE8 DUP3 PUSH2 0x2B9B JUMP JUMPDEST PUSH2 0x2BB5 DUP2 PUSH2 0x2C4E JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1DE8 DUP2 PUSH2 0x2C59 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C80 PUSH2 0x2C7B DUP5 PUSH2 0x2C2A JUMP JUMPDEST PUSH2 0x2C0E JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP1 POP PUSH1 0x20 DUP1 DUP3 ADD SWAP1 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x2C9F JUMPI PUSH2 0x2C9F PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2CC3 JUMPI DUP1 PUSH2 0x2CB4 DUP9 DUP3 PUSH2 0x2C62 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x2CA1 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2CE1 JUMPI PUSH2 0x2CE1 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2A89 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x2C6D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2D07 JUMPI PUSH2 0x2D07 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2D13 DUP6 DUP6 PUSH2 0x2BC0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2D33 JUMPI PUSH2 0x2D33 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2D3F DUP6 DUP3 DUP7 ADD PUSH2 0x2CCD JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D5E JUMPI PUSH2 0x2D5E PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2A89 DUP5 DUP5 PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP2 AND JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1DE8 DUP3 DUP5 PUSH2 0x2D6A JUMP JUMPDEST DUP1 PUSH2 0x2D75 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1DE8 DUP3 DUP5 PUSH2 0x2D89 JUMP JUMPDEST DUP1 PUSH2 0x2BB5 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1DE8 DUP2 PUSH2 0x2D9D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2DC3 JUMPI PUSH2 0x2DC3 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2DCD PUSH1 0x20 PUSH2 0x2C0E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2DDB DUP5 DUP5 PUSH2 0x2DA3 JUMP JUMPDEST DUP3 MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2DFA JUMPI PUSH2 0x2DFA PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2E06 DUP6 DUP6 PUSH2 0x2BC0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2D3F DUP6 DUP3 DUP7 ADD PUSH2 0x2DAE JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND PUSH2 0x2D75 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x2E31 DUP3 DUP7 PUSH2 0x2D6A JUMP JUMPDEST PUSH2 0x2E3E PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x2E17 JUMP JUMPDEST PUSH2 0x2A89 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2E17 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2E61 JUMPI PUSH2 0x2E61 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2E6D DUP6 DUP6 PUSH2 0x2BC0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2D3F DUP6 DUP3 DUP7 ADD PUSH2 0x2DA3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2E94 JUMPI PUSH2 0x2E94 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2EA0 DUP6 DUP6 PUSH2 0x2BC0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2D3F DUP6 DUP3 DUP7 ADD PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2EC6 JUMPI PUSH2 0x2EC6 PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2EE1 JUMPI PUSH2 0x2EE1 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x2EFC JUMPI PUSH2 0x2EFC PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x2F1F JUMPI PUSH2 0x2F1F PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2F39 JUMPI PUSH2 0x2F39 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F45 DUP10 DUP3 DUP11 ADD PUSH2 0x2EB1 JUMP JUMPDEST SWAP7 POP SWAP7 POP POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2F67 JUMPI PUSH2 0x2F67 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F73 DUP10 DUP3 DUP11 ADD PUSH2 0x2EB1 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2F95 JUMPI PUSH2 0x2F95 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2FA1 DUP10 DUP3 DUP11 ADD PUSH2 0x2EB1 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2FC8 JUMPI PUSH2 0x2FC8 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2FD4 DUP7 DUP7 PUSH2 0x2BC0 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x2FE5 DUP7 DUP3 DUP8 ADD PUSH2 0x2BC0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x2FF6 DUP7 DUP3 DUP8 ADD PUSH2 0x2DAE JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3015 JUMPI PUSH2 0x3015 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2A89 DUP5 DUP5 PUSH2 0x2DA3 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x302F DUP3 DUP7 PUSH2 0x2D6A JUMP JUMPDEST PUSH2 0x303C PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x2D89 JUMP JUMPDEST PUSH2 0x2A89 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2D89 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3057 PUSH2 0x2C7B DUP5 PUSH2 0x2C2A JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP1 POP PUSH1 0x20 DUP1 DUP3 ADD SWAP1 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3076 JUMPI PUSH2 0x3076 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2CC3 JUMPI DUP1 PUSH2 0x308B DUP9 DUP3 PUSH2 0x2DA3 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x3078 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x30AE JUMPI PUSH2 0x30AE PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2A89 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x3049 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x30D6 JUMPI PUSH2 0x30D6 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x30F0 JUMPI PUSH2 0x30F0 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x30FC DUP7 DUP3 DUP8 ADD PUSH2 0x2CCD JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x311C JUMPI PUSH2 0x311C PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3128 DUP7 DUP3 DUP8 ADD PUSH2 0x309A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3148 JUMPI PUSH2 0x3148 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2FF6 DUP7 DUP3 DUP8 ADD PUSH2 0x309A JUMP JUMPDEST PUSH2 0x2D75 DUP2 PUSH2 0x2B9B JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1DE8 DUP3 DUP5 PUSH2 0x3154 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DE8 DUP3 PUSH2 0x2C4E JUMP JUMPDEST PUSH2 0x2D75 DUP2 PUSH2 0x316B JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1DE8 DUP3 DUP5 PUSH2 0x3176 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x31A6 JUMPI PUSH2 0x31A6 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x31B2 DUP8 DUP8 PUSH2 0x2C62 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x31C3 DUP8 DUP3 DUP9 ADD PUSH2 0x2C62 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x31D4 DUP8 DUP3 DUP9 ADD PUSH2 0x2DA3 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0x31E5 DUP8 DUP3 DUP9 ADD PUSH2 0x2BC0 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x2D75 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1DE8 DUP3 DUP5 PUSH2 0x31F1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x2BB5 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1DE8 DUP2 PUSH2 0x321D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3245 JUMPI PUSH2 0x3245 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2A89 DUP5 DUP5 PUSH2 0x3225 JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH21 0x1B585C9AD95D081B5D5CDD081899481B1A5CDD1959 PUSH1 0x5A SHL DUP2 MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3251 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1DE8 DUP2 PUSH2 0x2D9D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x32B0 JUMPI PUSH2 0x32B0 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2A89 DUP5 DUP5 PUSH2 0x3290 JUMP JUMPDEST PUSH1 0x27 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4F6E6C7920636F6D7074726F6C6C65722063616E2063616C6C20746869732066 DUP2 MSTORE PUSH7 0x3AB731BA34B7B7 PUSH1 0xC9 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x32BC JUMP JUMPDEST PUSH1 0x19 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x54696D652D6261736564206F7065726174696F6E206F6E6C7900000000000000 DUP2 MSTORE SWAP2 POP PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3313 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH1 0x41 DUP2 MSTORE PUSH32 0x526577617264734469737472696275746F723A3A7365744C6173745265776172 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x64696E67426C6F636B54696D657374616D707320696E76616C696420696E7075 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0xFA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x33D7 JUMPI PUSH2 0x33D7 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2A89 DUP5 DUP5 PUSH2 0x2C62 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x696E73756666696369656E7420726577617264546F6B656E20666F7220677261 DUP2 MSTORE PUSH2 0x1B9D PUSH1 0xF2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x33E3 JUMP JUMPDEST PUSH1 0x29 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4F776E61626C6532537465703A2063616C6C6572206973206E6F742074686520 DUP2 MSTORE PUSH9 0x3732BB9037BBB732B9 PUSH1 0xB9 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3432 JUMP JUMPDEST PUSH1 0x1A DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x426C6F636B2D6261736564206F7065726174696F6E206F6E6C79000000000000 DUP2 MSTORE SWAP2 POP PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3488 JUMP JUMPDEST PUSH1 0x38 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x526577617264734469737472696275746F723A3A7365744C6173745265776172 DUP2 MSTORE PUSH32 0x64696E67426C6F636B7320696E76616C696420696E7075740000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x34CC JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND PUSH2 0x2BB5 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1DE8 DUP2 PUSH2 0x3536 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3562 JUMPI PUSH2 0x3562 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2A89 DUP5 DUP5 PUSH2 0x3542 JUMP JUMPDEST PUSH1 0x1C DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x696E76616C696420736574526577617264546F6B656E53706565647300000000 DUP2 MSTORE SWAP2 POP PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x356E JUMP JUMPDEST PUSH1 0x2E DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 DUP2 MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x35B2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND PUSH2 0x1DE8 JUMP JUMPDEST PUSH2 0x2D75 DUP2 PUSH2 0x360D JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1DE8 DUP3 DUP5 PUSH2 0x3618 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1DE8 DUP2 PUSH2 0x2C59 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3648 PUSH2 0x2C7B DUP5 PUSH2 0x2C2A JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP1 POP PUSH1 0x20 DUP1 DUP3 ADD SWAP1 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3667 JUMPI PUSH2 0x3667 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2CC3 JUMPI DUP1 PUSH2 0x367C DUP9 DUP3 PUSH2 0x362F JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x3669 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x369F JUMPI PUSH2 0x369F PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x2A89 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x363A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x36C4 JUMPI PUSH2 0x36C4 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x36DE JUMPI PUSH2 0x36DE PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2A89 DUP5 DUP3 DUP6 ADD PUSH2 0x368B JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x36F8 DUP3 DUP6 PUSH2 0x2D89 JUMP JUMPDEST PUSH2 0x22EA PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2D89 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0xD4F DUP5 DUP3 PUSH2 0x2D89 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1DE8 DUP3 DUP5 PUSH2 0x3705 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x302F DUP3 DUP7 PUSH2 0x2D89 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 SWAP2 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3732 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x696E76616C696420616365737320636F6E74726F6C206D616E61676572206164 DUP2 MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3774 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x37D4 DUP3 DUP6 PUSH2 0x3154 JUMP JUMPDEST PUSH2 0x22EA PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3154 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x37FC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x37E4 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x380F DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x3826 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x37E1 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x22EA DUP2 DUP5 PUSH2 0x3805 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x3856 DUP3 DUP6 PUSH2 0x3154 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x2A89 DUP2 DUP5 PUSH2 0x3805 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x3876 DUP3 DUP7 PUSH2 0x3154 JUMP JUMPDEST PUSH2 0x3883 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x3154 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x3895 DUP2 DUP5 PUSH2 0x3805 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH32 0x726577617264546F6B656E206D61726B6574206973206E6F74206C6973746564 SWAP2 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x389E JUMP JUMPDEST PUSH1 0x3B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x73657474696E67206C61737420726577617264696E672074696D657374616D70 DUP2 MSTORE PUSH32 0x20696E207468652070617374206973206E6F7420616C6C6F7765640000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x38E0 JUMP JUMPDEST PUSH1 0x29 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x7468697320526577617264734469737472696275746F7220697320616C726561 DUP2 MSTORE PUSH9 0x191E481B1BD8DAD959 PUSH1 0xBA SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x394A JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x1DE8 JUMPI PUSH2 0x1DE8 PUSH2 0x39A0 JUMP JUMPDEST DUP2 DUP2 MUL DUP1 DUP3 ISZERO DUP4 DUP3 DIV DUP6 EQ OR PUSH2 0x39E1 JUMPI PUSH2 0x39E1 PUSH2 0x39A0 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x1DE8 JUMPI PUSH2 0x1DE8 PUSH2 0x39A0 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x436F6D7074726F6C6C65723A20496E76616C6964206D61784C6F6F70734C696D DUP2 MSTORE PUSH2 0x1A5D PUSH1 0xF2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x39FB JUMP JUMPDEST PUSH1 0x37 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x73657474696E67206C61737420726577617264696E6720626C6F636B20696E20 DUP2 MSTORE PUSH32 0x7468652070617374206973206E6F7420616C6C6F776564000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3A4A JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1DE8 DUP3 DUP5 PUSH2 0x2E17 JUMP JUMPDEST PUSH1 0x2B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 DUP2 MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3AC2 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3B3F JUMPI PUSH2 0x3B3F PUSH2 0x3B1A JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x36F8 DUP3 DUP6 PUSH2 0x3154 JUMP JUMPDEST PUSH1 0x2A DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E DUP2 MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3B52 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F DUP2 MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3BA9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C06 DUP3 MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3C14 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x37E1 JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22EA DUP3 DUP5 PUSH2 0x3BFC JUMP JUMPDEST PUSH1 0x1D DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 DUP2 MSTORE SWAP2 POP PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3C2A JUMP INVALID PUSH20 0x65744C617374526577617264696E67426C6F636B SLOAD PUSH10 0x6D657374616D70732861 PUSH5 0x6472657373 JUMPDEST TSTORE 0x2C PUSH22 0x696E743235365B5D2C75696E743235365B5D29736574 0x4C PUSH2 0x7374 MSTORE PUSH6 0x77617264696E PUSH8 0x426C6F636B732861 PUSH5 0x6472657373 JUMPDEST TSTORE 0x2C PUSH22 0x696E7433325B5D2C75696E7433325B5D297365745265 PUSH24 0x617264546F6B656E53706565647328616464726573735B5D 0x2C PUSH22 0x696E743235365B5D2C75696E743235365B5D29A26469 PUSH17 0x667358221220DE35FE96C63C31606A6974 BLOBHASH PUSH0 EXTCODESIZE SWAP2 GT PUSH12 0x249CA932059888F347A80F6A PUSH32 0xF6E464736F6C6343000819003300000000000000000000000000000000000000 ","sourceMap":"2370:32310:36:-:0;;;5616:258;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5683:10;5695:14;1898:10:44;1897:11;:34;;;;-1:-1:-1;1912:19:44;;1897:34;1893:94;;;1954:22;;-1:-1:-1;;;1954:22:44;;;;;;;;;;;1893:94;2001:10;:33;;;;-1:-1:-1;2015:19:44;;;2001:33;1997:102;;;2057:31;;-1:-1:-1;;;2057:31:44;;;;;;;;;;;1997:102;2109:24;;;;;2123:10;2168:46;;2200:14;2168:46;;;408:10:45;2168:46:44;2143:71;;2242:10;:49;;2276:15;;;;;2242:49;;;2255:18;;;;;2242:49;-1:-1:-1;;;;;2224:67:44;;;-1:-1:-1;5845:22:36::1;::::0;-1:-1:-1;5845:20:36::1;:22::i;:::-;5616:258:::0;;2370:32310;;2882:94:44;2957:12;;2882:94::o;2675:100::-;2753:15;;2675:100::o;5939:280:3:-;6007:13;;;;;;;6006:14;5998:66;;;;-1:-1:-1;;;5998:66:3;;;;;;;:::i;:::-;;;;;;;;;6078:12;;6094:15;6078:12;;;:31;6074:139;;6125:12;:30;;-1:-1:-1;;6125:30:3;6140:15;6125:30;;;;;;6174:28;;;;;;;:::i;:::-;;;;;;;;6074:139;5939:280::o;430:116:69:-;404:13;;397:21;500;493:5;490:32;480:60;;536:1;533;526:12;480:60;430:116;:::o;552:137::-;631:13;;653:30;631:13;653:30;:::i;:::-;552:137;;;;:::o;778:122::-;869:5;851:24;695:77;906:143;988:13;;1010:33;988:13;1010:33;:::i;1055:501::-;1131:6;1139;1188:2;1176:9;1167:7;1163:23;1159:32;1156:119;;;1194:79;197:1;194;187:12;1194:79;1314:1;1339:61;1392:7;1372:9;1339:61;:::i;:::-;1329:71;;1285:125;1449:2;1475:64;1531:7;1522:6;1511:9;1507:22;1475:64;:::i;:::-;1465:74;;1420:129;1055:501;;;;;:::o;2341:419::-;2545:2;2558:47;;;2530:18;;2622:131;2530:18;2196:2;1668:19;;1877:34;1720:4;1711:14;;1854:58;-1:-1:-1;;;1929:15:69;;;1922:34;2317:12;;;1969:366;2976:214;2841:4;2830:16;;2929:35;;3103:2;3088:18;;3116:67;2858:112;2976:214;2370:32310:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@INITIAL_INDEX_10447":{"entryPoint":null,"id":10447,"parameterSlots":0,"returnSlots":0},"@__AccessControlled_init_unchained_4943":{"entryPoint":10235,"id":4943,"parameterSlots":1,"returnSlots":0},"@__Ownable2Step_init_26":{"entryPoint":10188,"id":26,"parameterSlots":0,"returnSlots":0},"@__Ownable_init_unchained_145":{"entryPoint":10668,"id":145,"parameterSlots":0,"returnSlots":0},"@_callOptionalReturn_2391":{"entryPoint":10728,"id":2391,"parameterSlots":2,"returnSlots":0},"@_checkAccessAllowed_5034":{"entryPoint":8216,"id":5034,"parameterSlots":1,"returnSlots":0},"@_checkOwner_176":{"entryPoint":7662,"id":176,"parameterSlots":0,"returnSlots":0},"@_distributeBorrowerRewardToken_11764":{"entryPoint":5575,"id":11764,"parameterSlots":3,"returnSlots":0},"@_distributeSupplierRewardToken_11641":{"entryPoint":6965,"id":11641,"parameterSlots":2,"returnSlots":0},"@_ensureMaxLoops_10334":{"entryPoint":4587,"id":10334,"parameterSlots":1,"returnSlots":0},"@_getBlockNumber_16318":{"entryPoint":4579,"id":16318,"parameterSlots":0,"returnSlots":1},"@_getBlockTimestamp_16308":{"entryPoint":4583,"id":16308,"parameterSlots":0,"returnSlots":1},"@_grantRewardToken_11805":{"entryPoint":7475,"id":11805,"parameterSlots":2,"returnSlots":1},"@_initializeMarketBlockBased_12267":{"entryPoint":7885,"id":12267,"parameterSlots":2,"returnSlots":0},"@_initializeMarketTimestampBased_12323":{"entryPoint":8066,"id":12323,"parameterSlots":2,"returnSlots":0},"@_msgSender_2798":{"entryPoint":null,"id":2798,"parameterSlots":0,"returnSlots":1},"@_revert_2769":{"entryPoint":null,"id":2769,"parameterSlots":2,"returnSlots":0},"@_setAccessControlManager_5004":{"entryPoint":7704,"id":5004,"parameterSlots":1,"returnSlots":0},"@_setLastRewardingBlockTimestamp_11437":{"entryPoint":8370,"id":11437,"parameterSlots":3,"returnSlots":0},"@_setLastRewardingBlock_11310":{"entryPoint":9060,"id":11310,"parameterSlots":3,"returnSlots":0},"@_setMaxLoopsLimit_10317":{"entryPoint":8969,"id":10317,"parameterSlots":1,"returnSlots":0},"@_setRewardTokenSpeed_11529":{"entryPoint":9677,"id":11529,"parameterSlots":3,"returnSlots":0},"@_transferOwnership_233":{"entryPoint":10586,"id":233,"parameterSlots":1,"returnSlots":0},"@_transferOwnership_78":{"entryPoint":8901,"id":78,"parameterSlots":1,"returnSlots":0},"@_updateRewardTokenBorrowIndex_12211":{"entryPoint":4628,"id":12211,"parameterSlots":2,"returnSlots":0},"@_updateRewardTokenSupplyIndex_12002":{"entryPoint":6103,"id":12002,"parameterSlots":1,"returnSlots":0},"@acceptOwnership_100":{"entryPoint":3413,"id":100,"parameterSlots":0,"returnSlots":0},"@accessControlManager_4966":{"entryPoint":null,"id":4966,"parameterSlots":0,"returnSlots":1},"@add__9845":{"entryPoint":10372,"id":9845,"parameterSlots":2,"returnSlots":1},"@add__9859":{"entryPoint":8957,"id":9859,"parameterSlots":2,"returnSlots":1},"@blocksOrSecondsPerYear_16219":{"entryPoint":null,"id":16219,"parameterSlots":0,"returnSlots":0},"@claimRewardToken_11001":{"entryPoint":4234,"id":11001,"parameterSlots":1,"returnSlots":0},"@claimRewardToken_11183":{"entryPoint":1702,"id":11183,"parameterSlots":2,"returnSlots":0},"@distributeBorrowerRewardToken_10677":{"entryPoint":2948,"id":10677,"parameterSlots":3,"returnSlots":0},"@distributeSupplierRewardToken_10987":{"entryPoint":4362,"id":10987,"parameterSlots":2,"returnSlots":0},"@div__10122":{"entryPoint":10274,"id":10122,"parameterSlots":2,"returnSlots":1},"@div__10201":{"entryPoint":10716,"id":10201,"parameterSlots":2,"returnSlots":1},"@fraction_10222":{"entryPoint":10304,"id":10222,"parameterSlots":2,"returnSlots":1},"@functionCallWithValue_2594":{"entryPoint":10897,"id":2594,"parameterSlots":4,"returnSlots":1},"@functionCall_2530":{"entryPoint":10874,"id":2530,"parameterSlots":3,"returnSlots":1},"@getBlockNumberOrTimestamp_16298":{"entryPoint":4415,"id":16298,"parameterSlots":0,"returnSlots":1},"@grantRewardToken_10719":{"entryPoint":3007,"id":10719,"parameterSlots":2,"returnSlots":0},"@initializeMarket_10657":{"entryPoint":2271,"id":10657,"parameterSlots":1,"returnSlots":0},"@initialize_10625":{"entryPoint":3956,"id":10625,"parameterSlots":4,"returnSlots":0},"@isContract_2458":{"entryPoint":null,"id":2458,"parameterSlots":1,"returnSlots":1},"@isTimeBased_16222":{"entryPoint":null,"id":16222,"parameterSlots":0,"returnSlots":0},"@lastContributorBlock_12389":{"entryPoint":null,"id":12389,"parameterSlots":0,"returnSlots":0},"@maxLoopsLimit_10271":{"entryPoint":null,"id":10271,"parameterSlots":0,"returnSlots":0},"@mul__10043":{"entryPoint":10459,"id":10043,"parameterSlots":2,"returnSlots":1},"@mul__10057":{"entryPoint":8945,"id":10057,"parameterSlots":2,"returnSlots":1},"@owner_162":{"entryPoint":null,"id":162,"parameterSlots":0,"returnSlots":1},"@pendingOwner_41":{"entryPoint":null,"id":41,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_190":{"entryPoint":3129,"id":190,"parameterSlots":0,"returnSlots":0},"@rewardTokenAccrued_12363":{"entryPoint":null,"id":12363,"parameterSlots":0,"returnSlots":0},"@rewardTokenBorrowSpeeds_12368":{"entryPoint":null,"id":12368,"parameterSlots":0,"returnSlots":0},"@rewardTokenBorrowStateTimeBased_12414":{"entryPoint":null,"id":12414,"parameterSlots":0,"returnSlots":0},"@rewardTokenBorrowState_12379":{"entryPoint":null,"id":12379,"parameterSlots":0,"returnSlots":0},"@rewardTokenBorrowerIndex_12396":{"entryPoint":null,"id":12396,"parameterSlots":0,"returnSlots":0},"@rewardTokenContributorSpeeds_12384":{"entryPoint":null,"id":12384,"parameterSlots":0,"returnSlots":0},"@rewardTokenSupplierIndex_12358":{"entryPoint":null,"id":12358,"parameterSlots":0,"returnSlots":0},"@rewardTokenSupplySpeeds_12373":{"entryPoint":null,"id":12373,"parameterSlots":0,"returnSlots":0},"@rewardTokenSupplyStateTimeBased_12408":{"entryPoint":null,"id":12408,"parameterSlots":0,"returnSlots":0},"@rewardTokenSupplyState_12351":{"entryPoint":null,"id":12351,"parameterSlots":0,"returnSlots":0},"@rewardToken_12402":{"entryPoint":null,"id":12402,"parameterSlots":0,"returnSlots":0},"@safe224_9775":{"entryPoint":10416,"id":9775,"parameterSlots":2,"returnSlots":1},"@safe32_9801":{"entryPoint":7837,"id":9801,"parameterSlots":2,"returnSlots":1},"@safeTransfer_2097":{"entryPoint":10500,"id":2097,"parameterSlots":3,"returnSlots":0},"@setAccessControlManager_4956":{"entryPoint":2197,"id":4956,"parameterSlots":1,"returnSlots":0},"@setContributorRewardTokenSpeed_10972":{"entryPoint":2506,"id":10972,"parameterSlots":2,"returnSlots":0},"@setLastRewardingBlockTimestamps_10928":{"entryPoint":2685,"id":10928,"parameterSlots":6,"returnSlots":0},"@setLastRewardingBlocks_10862":{"entryPoint":3483,"id":10862,"parameterSlots":6,"returnSlots":0},"@setMaxLoopsLimit_11014":{"entryPoint":3466,"id":11014,"parameterSlots":1,"returnSlots":0},"@setRewardTokenSpeeds_10795":{"entryPoint":3765,"id":10795,"parameterSlots":3,"returnSlots":0},"@sub__9917":{"entryPoint":8926,"id":9917,"parameterSlots":2,"returnSlots":1},"@transferOwnership_61":{"entryPoint":4466,"id":61,"parameterSlots":1,"returnSlots":0},"@updateContributorRewards_11085":{"entryPoint":3149,"id":11085,"parameterSlots":1,"returnSlots":0},"@updateRewardTokenBorrowIndex_10735":{"entryPoint":2214,"id":10735,"parameterSlots":2,"returnSlots":0},"@updateRewardTokenSupplyIndex_10689":{"entryPoint":2142,"id":10689,"parameterSlots":1,"returnSlots":0},"@verifyCallResultFromTarget_2725":{"entryPoint":11053,"id":2725,"parameterSlots":4,"returnSlots":1},"abi_decode_available_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr":{"entryPoint":11373,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_available_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_fromMemory":{"entryPoint":13882,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_available_length_t_array$_t_uint256_$dyn_memory_ptr":{"entryPoint":12361,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_t_address":{"entryPoint":11200,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr":{"entryPoint":11953,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr":{"entryPoint":11469,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_fromMemory":{"entryPoint":13963,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_array$_t_uint256_$dyn_calldata_ptr":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_t_array$_t_uint256_$dyn_memory_ptr":{"entryPoint":12442,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_array$_t_uint32_$dyn_calldata_ptr":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_t_bool_fromMemory":{"entryPoint":12837,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_Comptroller_$9130":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_IERC20Upgradeable_$1352":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_VToken_$15506":{"entryPoint":11362,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_VToken_$15506_fromMemory":{"entryPoint":13871,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_struct$_Exp_$9645_memory_ptr":{"entryPoint":11694,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_uint256":{"entryPoint":11683,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_uint256_fromMemory":{"entryPoint":12944,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_uint32":{"entryPoint":13634,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":11593,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":11902,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_struct$_Exp_$9645_memory_ptr":{"entryPoint":12208,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_array$_t_contract$_VToken_$15506_$dyn_memory_ptr":{"entryPoint":11505,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_struct$_Exp_$9645_memory_ptr":{"entryPoint":11748,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":11851,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptr":{"entryPoint":12035,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptr":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_fromMemory":{"entryPoint":13999,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptr":{"entryPoint":12478,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":12848,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_Comptroller_$9130t_contract$_IERC20Upgradeable_$1352t_uint256t_address":{"entryPoint":12685,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_contract$_VToken_$15506":{"entryPoint":13250,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":12288,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":12955,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32":{"entryPoint":13645,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_address_to_t_address_fromStack":{"entryPoint":12628,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_bool_to_t_bool_fromStack":{"entryPoint":12785,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":15356,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack":{"entryPoint":12662,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_IERC20Upgradeable_$1352_to_t_address_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_rational_1_by_1_to_t_uint8_fromStack":{"entryPoint":13848,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack":{"entryPoint":14341,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_stringliteral_133e6bf643465df761ef166e81246dc8f30fd9c0ebeb2ba6af193b3bb30494f8_to_t_string_memory_ptr_fromStack":{"entryPoint":14560,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack":{"entryPoint":13362,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack":{"entryPoint":14843,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_2f89df7223863f69f86e7052cbcdf68d52d82b51b73f12fa18c8c279407b9f9f_to_t_string_memory_ptr_fromStack":{"entryPoint":14494,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_322b734cdb73148ce798f463ec44e79da28ef00cb71be8ffb3f7e2a5d1d5194f_to_t_string_memory_ptr_fromStack":{"entryPoint":13678,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_36bf5156a09fb782d0af3560e4601cbf2cedc5155a8996d8781f3cb033938025_to_t_string_memory_ptr_fromStack":{"entryPoint":13075,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_432fe5c7c43fef719e573b5581c51228a55aa829b1f722b0153e4e929295ba6a_to_t_string_memory_ptr_fromStack":{"entryPoint":13283,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack":{"entryPoint":14196,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack":{"entryPoint":15273,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_5cff66c2aa35848a49d268966a8281c7733b409122a8f3eddbea1b1ec033686c_to_t_string_memory_ptr_fromStack":{"entryPoint":13516,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_6291c33270cb332e2566d661b37996c9d0d6802836fbd96a9a4623cd553212e4_to_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_6a6f70ab8717c54cc36616a41f4d2f11a60355fdc239fe328ffb57629cd36805_to_t_string_memory_ptr_fromStack":{"entryPoint":14922,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8_to_t_string_memory_ptr_fromStack":{"entryPoint":14666,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack":{"entryPoint":13746,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_8ae9d8b8cfc154970c71fdcc07f9eca5337f7fb885232e7023c4ffdc94dd950d_to_t_string_memory_ptr_fromStack":{"entryPoint":12988,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_8d6cda2e8214bcdab6eb9bde4767020b52a0b58abe9235e475535a272dbeb6e1_to_t_string_memory_ptr_fromStack":{"entryPoint":12881,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack":{"entryPoint":14130,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack":{"entryPoint":15402,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack":{"entryPoint":15042,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_deeaa8c519132eb034c6b2645cd03ab274dcabecd79d8fa0dfda871a74f634f1_to_t_string_memory_ptr_fromStack":{"entryPoint":13448,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack":{"entryPoint":15186,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_struct$_Exp_$9645_memory_ptr_to_t_struct$_Exp_$9645_memory_ptr_fromStack":{"entryPoint":14085,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_uint224_to_t_uint224_fromStack":{"entryPoint":11626,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_uint256_to_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_uint256_to_t_uint256_fromStack":{"entryPoint":11657,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_uint32_to_t_uint32_fromStack":{"entryPoint":11799,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":15390,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":12637,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":14278,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_string_memory_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed":{"entryPoint":14440,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_string_memory_ptr__to_t_address_t_string_memory_ptr__fromStack_reversed":{"entryPoint":14408,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":15172,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":12793,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IAccessControlManagerV8_$5080__to_t_address__fromStack_reversed":{"entryPoint":12671,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IERC20Upgradeable_$1352__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_VToken_$15506__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed":{"entryPoint":13857,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":14391,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_133e6bf643465df761ef166e81246dc8f30fd9c0ebeb2ba6af193b3bb30494f8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":14650,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":13432,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":14906,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2f89df7223863f69f86e7052cbcdf68d52d82b51b73f12fa18c8c279407b9f9f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":14544,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_322b734cdb73148ce798f463ec44e79da28ef00cb71be8ffb3f7e2a5d1d5194f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":13730,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_36bf5156a09fb782d0af3560e4601cbf2cedc5155a8996d8781f3cb033938025__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":13127,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_432fe5c7c43fef719e573b5581c51228a55aa829b1f722b0153e4e929295ba6a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":13346,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":14262,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15340,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5cff66c2aa35848a49d268966a8281c7733b409122a8f3eddbea1b1ec033686c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":13606,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_6291c33270cb332e2566d661b37996c9d0d6802836fbd96a9a4623cd553212e4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":13143,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_6a6f70ab8717c54cc36616a41f4d2f11a60355fdc239fe328ffb57629cd36805__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15012,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":14736,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":13821,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8ae9d8b8cfc154970c71fdcc07f9eca5337f7fb885232e7023c4ffdc94dd950d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":13059,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8d6cda2e8214bcdab6eb9bde4767020b52a0b58abe9235e475535a272dbeb6e1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":12928,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":14180,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15454,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15114,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_deeaa8c519132eb034c6b2645cd03ab274dcabecd79d8fa0dfda871a74f634f1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":13500,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15257,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_Exp_$9645_memory_ptr__to_t_struct$_Exp_$9645_memory_ptr__fromStack_reversed":{"entryPoint":14102,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint224__to_t_uint224__fromStack_reversed":{"entryPoint":11643,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint224_t_uint256_t_uint256__to_t_uint224_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":12321,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint224_t_uint32_t_uint32__to_t_uint224_t_uint32_t_uint32__fromStack_reversed":{"entryPoint":11811,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":11663,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":14058,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":14116,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed":{"entryPoint":15028,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":11278,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr":{"entryPoint":11306,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_t_array$_t_uint256_$dyn_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_bytes_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_string_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":14824,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":15152,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":14793,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":14774,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_address":{"entryPoint":11163,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_bool":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_Comptroller_$9130":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_IERC20Upgradeable_$1352":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_VToken_$15506":{"entryPoint":11342,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_rational_1_by_1":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint224":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address":{"entryPoint":12651,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_IERC20Upgradeable_$1352_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_VToken_$15506_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_rational_1_by_1_to_t_uint8":{"entryPoint":13837,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint160_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint160_to_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":14305,"id":null,"parameterSlots":3,"returnSlots":0},"finalize_allocation":{"entryPoint":11233,"id":null,"parameterSlots":2,"returnSlots":0},"identity":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":14752,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":15130,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":12807,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":11211,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"round_up_to_mul_of_32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"store_literal_in_memory_133e6bf643465df761ef166e81246dc8f30fd9c0ebeb2ba6af193b3bb30494f8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_2f89df7223863f69f86e7052cbcdf68d52d82b51b73f12fa18c8c279407b9f9f":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_322b734cdb73148ce798f463ec44e79da28ef00cb71be8ffb3f7e2a5d1d5194f":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_36bf5156a09fb782d0af3560e4601cbf2cedc5155a8996d8781f3cb033938025":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_432fe5c7c43fef719e573b5581c51228a55aa829b1f722b0153e4e929295ba6a":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_5cff66c2aa35848a49d268966a8281c7733b409122a8f3eddbea1b1ec033686c":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_6291c33270cb332e2566d661b37996c9d0d6802836fbd96a9a4623cd553212e4":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_6a6f70ab8717c54cc36616a41f4d2f11a60355fdc239fe328ffb57629cd36805":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_8ae9d8b8cfc154970c71fdcc07f9eca5337f7fb885232e7023c4ffdc94dd950d":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_8d6cda2e8214bcdab6eb9bde4767020b52a0b58abe9235e475535a272dbeb6e1":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_deeaa8c519132eb034c6b2645cd03ab274dcabecd79d8fa0dfda871a74f634f1":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_address":{"entryPoint":11180,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_bool":{"entryPoint":12829,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_Comptroller_$9130":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_IERC20Upgradeable_$1352":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_VToken_$15506":{"entryPoint":11353,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_uint256":{"entryPoint":11677,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_uint32":{"entryPoint":13622,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:55991:69","nodeType":"YulBlock","src":"0:55991:69","statements":[{"body":{"nativeSrc":"47:35:69","nodeType":"YulBlock","src":"47:35:69","statements":[{"nativeSrc":"57:19:69","nodeType":"YulAssignment","src":"57:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"73:2:69","nodeType":"YulLiteral","src":"73:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"67:5:69","nodeType":"YulIdentifier","src":"67:5:69"},"nativeSrc":"67:9:69","nodeType":"YulFunctionCall","src":"67:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"57:6:69","nodeType":"YulIdentifier","src":"57:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"7:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"40:6:69","nodeType":"YulTypedName","src":"40:6:69","type":""}],"src":"7:75:69"},{"body":{"nativeSrc":"177:28:69","nodeType":"YulBlock","src":"177:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"194:1:69","nodeType":"YulLiteral","src":"194:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"197:1:69","nodeType":"YulLiteral","src":"197:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"187:6:69","nodeType":"YulIdentifier","src":"187:6:69"},"nativeSrc":"187:12:69","nodeType":"YulFunctionCall","src":"187:12:69"},"nativeSrc":"187:12:69","nodeType":"YulExpressionStatement","src":"187:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"88:117:69","nodeType":"YulFunctionDefinition","src":"88:117:69"},{"body":{"nativeSrc":"300:28:69","nodeType":"YulBlock","src":"300:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"317:1:69","nodeType":"YulLiteral","src":"317:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"320:1:69","nodeType":"YulLiteral","src":"320:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},"nativeSrc":"310:12:69","nodeType":"YulFunctionCall","src":"310:12:69"},"nativeSrc":"310:12:69","nodeType":"YulExpressionStatement","src":"310:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"211:117:69","nodeType":"YulFunctionDefinition","src":"211:117:69"},{"body":{"nativeSrc":"379:81:69","nodeType":"YulBlock","src":"379:81:69","statements":[{"nativeSrc":"389:65:69","nodeType":"YulAssignment","src":"389:65:69","value":{"arguments":[{"name":"value","nativeSrc":"404:5:69","nodeType":"YulIdentifier","src":"404:5:69"},{"kind":"number","nativeSrc":"411:42:69","nodeType":"YulLiteral","src":"411:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"400:3:69","nodeType":"YulIdentifier","src":"400:3:69"},"nativeSrc":"400:54:69","nodeType":"YulFunctionCall","src":"400:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"389:7:69","nodeType":"YulIdentifier","src":"389:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"334:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"361:5:69","nodeType":"YulTypedName","src":"361:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"371:7:69","nodeType":"YulTypedName","src":"371:7:69","type":""}],"src":"334:126:69"},{"body":{"nativeSrc":"511:51:69","nodeType":"YulBlock","src":"511:51:69","statements":[{"nativeSrc":"521:35:69","nodeType":"YulAssignment","src":"521:35:69","value":{"arguments":[{"name":"value","nativeSrc":"550:5:69","nodeType":"YulIdentifier","src":"550:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"532:17:69","nodeType":"YulIdentifier","src":"532:17:69"},"nativeSrc":"532:24:69","nodeType":"YulFunctionCall","src":"532:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"521:7:69","nodeType":"YulIdentifier","src":"521:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"466:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"493:5:69","nodeType":"YulTypedName","src":"493:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"503:7:69","nodeType":"YulTypedName","src":"503:7:69","type":""}],"src":"466:96:69"},{"body":{"nativeSrc":"611:79:69","nodeType":"YulBlock","src":"611:79:69","statements":[{"body":{"nativeSrc":"668:16:69","nodeType":"YulBlock","src":"668:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"677:1:69","nodeType":"YulLiteral","src":"677:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"680:1:69","nodeType":"YulLiteral","src":"680:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"670:6:69","nodeType":"YulIdentifier","src":"670:6:69"},"nativeSrc":"670:12:69","nodeType":"YulFunctionCall","src":"670:12:69"},"nativeSrc":"670:12:69","nodeType":"YulExpressionStatement","src":"670:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"634:5:69","nodeType":"YulIdentifier","src":"634:5:69"},{"arguments":[{"name":"value","nativeSrc":"659:5:69","nodeType":"YulIdentifier","src":"659:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"641:17:69","nodeType":"YulIdentifier","src":"641:17:69"},"nativeSrc":"641:24:69","nodeType":"YulFunctionCall","src":"641:24:69"}],"functionName":{"name":"eq","nativeSrc":"631:2:69","nodeType":"YulIdentifier","src":"631:2:69"},"nativeSrc":"631:35:69","nodeType":"YulFunctionCall","src":"631:35:69"}],"functionName":{"name":"iszero","nativeSrc":"624:6:69","nodeType":"YulIdentifier","src":"624:6:69"},"nativeSrc":"624:43:69","nodeType":"YulFunctionCall","src":"624:43:69"},"nativeSrc":"621:63:69","nodeType":"YulIf","src":"621:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"568:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"604:5:69","nodeType":"YulTypedName","src":"604:5:69","type":""}],"src":"568:122:69"},{"body":{"nativeSrc":"748:87:69","nodeType":"YulBlock","src":"748:87:69","statements":[{"nativeSrc":"758:29:69","nodeType":"YulAssignment","src":"758:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"780:6:69","nodeType":"YulIdentifier","src":"780:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"767:12:69","nodeType":"YulIdentifier","src":"767:12:69"},"nativeSrc":"767:20:69","nodeType":"YulFunctionCall","src":"767:20:69"},"variableNames":[{"name":"value","nativeSrc":"758:5:69","nodeType":"YulIdentifier","src":"758:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"823:5:69","nodeType":"YulIdentifier","src":"823:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"796:26:69","nodeType":"YulIdentifier","src":"796:26:69"},"nativeSrc":"796:33:69","nodeType":"YulFunctionCall","src":"796:33:69"},"nativeSrc":"796:33:69","nodeType":"YulExpressionStatement","src":"796:33:69"}]},"name":"abi_decode_t_address","nativeSrc":"696:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"726:6:69","nodeType":"YulTypedName","src":"726:6:69","type":""},{"name":"end","nativeSrc":"734:3:69","nodeType":"YulTypedName","src":"734:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"742:5:69","nodeType":"YulTypedName","src":"742:5:69","type":""}],"src":"696:139:69"},{"body":{"nativeSrc":"930:28:69","nodeType":"YulBlock","src":"930:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"947:1:69","nodeType":"YulLiteral","src":"947:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"950:1:69","nodeType":"YulLiteral","src":"950:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"940:6:69","nodeType":"YulIdentifier","src":"940:6:69"},"nativeSrc":"940:12:69","nodeType":"YulFunctionCall","src":"940:12:69"},"nativeSrc":"940:12:69","nodeType":"YulExpressionStatement","src":"940:12:69"}]},"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"841:117:69","nodeType":"YulFunctionDefinition","src":"841:117:69"},{"body":{"nativeSrc":"1012:54:69","nodeType":"YulBlock","src":"1012:54:69","statements":[{"nativeSrc":"1022:38:69","nodeType":"YulAssignment","src":"1022:38:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1040:5:69","nodeType":"YulIdentifier","src":"1040:5:69"},{"kind":"number","nativeSrc":"1047:2:69","nodeType":"YulLiteral","src":"1047:2:69","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"1036:3:69","nodeType":"YulIdentifier","src":"1036:3:69"},"nativeSrc":"1036:14:69","nodeType":"YulFunctionCall","src":"1036:14:69"},{"arguments":[{"kind":"number","nativeSrc":"1056:2:69","nodeType":"YulLiteral","src":"1056:2:69","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"1052:3:69","nodeType":"YulIdentifier","src":"1052:3:69"},"nativeSrc":"1052:7:69","nodeType":"YulFunctionCall","src":"1052:7:69"}],"functionName":{"name":"and","nativeSrc":"1032:3:69","nodeType":"YulIdentifier","src":"1032:3:69"},"nativeSrc":"1032:28:69","nodeType":"YulFunctionCall","src":"1032:28:69"},"variableNames":[{"name":"result","nativeSrc":"1022:6:69","nodeType":"YulIdentifier","src":"1022:6:69"}]}]},"name":"round_up_to_mul_of_32","nativeSrc":"964:102:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"995:5:69","nodeType":"YulTypedName","src":"995:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"1005:6:69","nodeType":"YulTypedName","src":"1005:6:69","type":""}],"src":"964:102:69"},{"body":{"nativeSrc":"1100:152:69","nodeType":"YulBlock","src":"1100:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1117:1:69","nodeType":"YulLiteral","src":"1117:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1120:77:69","nodeType":"YulLiteral","src":"1120:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"1110:6:69","nodeType":"YulIdentifier","src":"1110:6:69"},"nativeSrc":"1110:88:69","nodeType":"YulFunctionCall","src":"1110:88:69"},"nativeSrc":"1110:88:69","nodeType":"YulExpressionStatement","src":"1110:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1214:1:69","nodeType":"YulLiteral","src":"1214:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"1217:4:69","nodeType":"YulLiteral","src":"1217:4:69","type":"","value":"0x41"}],"functionName":{"name":"mstore","nativeSrc":"1207:6:69","nodeType":"YulIdentifier","src":"1207:6:69"},"nativeSrc":"1207:15:69","nodeType":"YulFunctionCall","src":"1207:15:69"},"nativeSrc":"1207:15:69","nodeType":"YulExpressionStatement","src":"1207:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1238:1:69","nodeType":"YulLiteral","src":"1238:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1241:4:69","nodeType":"YulLiteral","src":"1241:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"1231:6:69","nodeType":"YulIdentifier","src":"1231:6:69"},"nativeSrc":"1231:15:69","nodeType":"YulFunctionCall","src":"1231:15:69"},"nativeSrc":"1231:15:69","nodeType":"YulExpressionStatement","src":"1231:15:69"}]},"name":"panic_error_0x41","nativeSrc":"1072:180:69","nodeType":"YulFunctionDefinition","src":"1072:180:69"},{"body":{"nativeSrc":"1301:238:69","nodeType":"YulBlock","src":"1301:238:69","statements":[{"nativeSrc":"1311:58:69","nodeType":"YulVariableDeclaration","src":"1311:58:69","value":{"arguments":[{"name":"memPtr","nativeSrc":"1333:6:69","nodeType":"YulIdentifier","src":"1333:6:69"},{"arguments":[{"name":"size","nativeSrc":"1363:4:69","nodeType":"YulIdentifier","src":"1363:4:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"1341:21:69","nodeType":"YulIdentifier","src":"1341:21:69"},"nativeSrc":"1341:27:69","nodeType":"YulFunctionCall","src":"1341:27:69"}],"functionName":{"name":"add","nativeSrc":"1329:3:69","nodeType":"YulIdentifier","src":"1329:3:69"},"nativeSrc":"1329:40:69","nodeType":"YulFunctionCall","src":"1329:40:69"},"variables":[{"name":"newFreePtr","nativeSrc":"1315:10:69","nodeType":"YulTypedName","src":"1315:10:69","type":""}]},{"body":{"nativeSrc":"1480:22:69","nodeType":"YulBlock","src":"1480:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"1482:16:69","nodeType":"YulIdentifier","src":"1482:16:69"},"nativeSrc":"1482:18:69","nodeType":"YulFunctionCall","src":"1482:18:69"},"nativeSrc":"1482:18:69","nodeType":"YulExpressionStatement","src":"1482:18:69"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nativeSrc":"1423:10:69","nodeType":"YulIdentifier","src":"1423:10:69"},{"kind":"number","nativeSrc":"1435:18:69","nodeType":"YulLiteral","src":"1435:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"1420:2:69","nodeType":"YulIdentifier","src":"1420:2:69"},"nativeSrc":"1420:34:69","nodeType":"YulFunctionCall","src":"1420:34:69"},{"arguments":[{"name":"newFreePtr","nativeSrc":"1459:10:69","nodeType":"YulIdentifier","src":"1459:10:69"},{"name":"memPtr","nativeSrc":"1471:6:69","nodeType":"YulIdentifier","src":"1471:6:69"}],"functionName":{"name":"lt","nativeSrc":"1456:2:69","nodeType":"YulIdentifier","src":"1456:2:69"},"nativeSrc":"1456:22:69","nodeType":"YulFunctionCall","src":"1456:22:69"}],"functionName":{"name":"or","nativeSrc":"1417:2:69","nodeType":"YulIdentifier","src":"1417:2:69"},"nativeSrc":"1417:62:69","nodeType":"YulFunctionCall","src":"1417:62:69"},"nativeSrc":"1414:88:69","nodeType":"YulIf","src":"1414:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1518:2:69","nodeType":"YulLiteral","src":"1518:2:69","type":"","value":"64"},{"name":"newFreePtr","nativeSrc":"1522:10:69","nodeType":"YulIdentifier","src":"1522:10:69"}],"functionName":{"name":"mstore","nativeSrc":"1511:6:69","nodeType":"YulIdentifier","src":"1511:6:69"},"nativeSrc":"1511:22:69","nodeType":"YulFunctionCall","src":"1511:22:69"},"nativeSrc":"1511:22:69","nodeType":"YulExpressionStatement","src":"1511:22:69"}]},"name":"finalize_allocation","nativeSrc":"1258:281:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"1287:6:69","nodeType":"YulTypedName","src":"1287:6:69","type":""},{"name":"size","nativeSrc":"1295:4:69","nodeType":"YulTypedName","src":"1295:4:69","type":""}],"src":"1258:281:69"},{"body":{"nativeSrc":"1586:88:69","nodeType":"YulBlock","src":"1586:88:69","statements":[{"nativeSrc":"1596:30:69","nodeType":"YulAssignment","src":"1596:30:69","value":{"arguments":[],"functionName":{"name":"allocate_unbounded","nativeSrc":"1606:18:69","nodeType":"YulIdentifier","src":"1606:18:69"},"nativeSrc":"1606:20:69","nodeType":"YulFunctionCall","src":"1606:20:69"},"variableNames":[{"name":"memPtr","nativeSrc":"1596:6:69","nodeType":"YulIdentifier","src":"1596:6:69"}]},{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"1655:6:69","nodeType":"YulIdentifier","src":"1655:6:69"},{"name":"size","nativeSrc":"1663:4:69","nodeType":"YulIdentifier","src":"1663:4:69"}],"functionName":{"name":"finalize_allocation","nativeSrc":"1635:19:69","nodeType":"YulIdentifier","src":"1635:19:69"},"nativeSrc":"1635:33:69","nodeType":"YulFunctionCall","src":"1635:33:69"},"nativeSrc":"1635:33:69","nodeType":"YulExpressionStatement","src":"1635:33:69"}]},"name":"allocate_memory","nativeSrc":"1545:129:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nativeSrc":"1570:4:69","nodeType":"YulTypedName","src":"1570:4:69","type":""}],"returnVariables":[{"name":"memPtr","nativeSrc":"1579:6:69","nodeType":"YulTypedName","src":"1579:6:69","type":""}],"src":"1545:129:69"},{"body":{"nativeSrc":"1778:229:69","nodeType":"YulBlock","src":"1778:229:69","statements":[{"body":{"nativeSrc":"1883:22:69","nodeType":"YulBlock","src":"1883:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"1885:16:69","nodeType":"YulIdentifier","src":"1885:16:69"},"nativeSrc":"1885:18:69","nodeType":"YulFunctionCall","src":"1885:18:69"},"nativeSrc":"1885:18:69","nodeType":"YulExpressionStatement","src":"1885:18:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"1855:6:69","nodeType":"YulIdentifier","src":"1855:6:69"},{"kind":"number","nativeSrc":"1863:18:69","nodeType":"YulLiteral","src":"1863:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"1852:2:69","nodeType":"YulIdentifier","src":"1852:2:69"},"nativeSrc":"1852:30:69","nodeType":"YulFunctionCall","src":"1852:30:69"},"nativeSrc":"1849:56:69","nodeType":"YulIf","src":"1849:56:69"},{"nativeSrc":"1915:25:69","nodeType":"YulAssignment","src":"1915:25:69","value":{"arguments":[{"name":"length","nativeSrc":"1927:6:69","nodeType":"YulIdentifier","src":"1927:6:69"},{"kind":"number","nativeSrc":"1935:4:69","nodeType":"YulLiteral","src":"1935:4:69","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"1923:3:69","nodeType":"YulIdentifier","src":"1923:3:69"},"nativeSrc":"1923:17:69","nodeType":"YulFunctionCall","src":"1923:17:69"},"variableNames":[{"name":"size","nativeSrc":"1915:4:69","nodeType":"YulIdentifier","src":"1915:4:69"}]},{"nativeSrc":"1977:23:69","nodeType":"YulAssignment","src":"1977:23:69","value":{"arguments":[{"name":"size","nativeSrc":"1989:4:69","nodeType":"YulIdentifier","src":"1989:4:69"},{"kind":"number","nativeSrc":"1995:4:69","nodeType":"YulLiteral","src":"1995:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1985:3:69","nodeType":"YulIdentifier","src":"1985:3:69"},"nativeSrc":"1985:15:69","nodeType":"YulFunctionCall","src":"1985:15:69"},"variableNames":[{"name":"size","nativeSrc":"1977:4:69","nodeType":"YulIdentifier","src":"1977:4:69"}]}]},"name":"array_allocation_size_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"1680:327:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nativeSrc":"1762:6:69","nodeType":"YulTypedName","src":"1762:6:69","type":""}],"returnVariables":[{"name":"size","nativeSrc":"1773:4:69","nodeType":"YulTypedName","src":"1773:4:69","type":""}],"src":"1680:327:69"},{"body":{"nativeSrc":"2102:28:69","nodeType":"YulBlock","src":"2102:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2119:1:69","nodeType":"YulLiteral","src":"2119:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"2122:1:69","nodeType":"YulLiteral","src":"2122:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2112:6:69","nodeType":"YulIdentifier","src":"2112:6:69"},"nativeSrc":"2112:12:69","nodeType":"YulFunctionCall","src":"2112:12:69"},"nativeSrc":"2112:12:69","nodeType":"YulExpressionStatement","src":"2112:12:69"}]},"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"2013:117:69","nodeType":"YulFunctionDefinition","src":"2013:117:69"},{"body":{"nativeSrc":"2197:51:69","nodeType":"YulBlock","src":"2197:51:69","statements":[{"nativeSrc":"2207:35:69","nodeType":"YulAssignment","src":"2207:35:69","value":{"arguments":[{"name":"value","nativeSrc":"2236:5:69","nodeType":"YulIdentifier","src":"2236:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"2218:17:69","nodeType":"YulIdentifier","src":"2218:17:69"},"nativeSrc":"2218:24:69","nodeType":"YulFunctionCall","src":"2218:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"2207:7:69","nodeType":"YulIdentifier","src":"2207:7:69"}]}]},"name":"cleanup_t_contract$_VToken_$15506","nativeSrc":"2136:112:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2179:5:69","nodeType":"YulTypedName","src":"2179:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"2189:7:69","nodeType":"YulTypedName","src":"2189:7:69","type":""}],"src":"2136:112:69"},{"body":{"nativeSrc":"2313:95:69","nodeType":"YulBlock","src":"2313:95:69","statements":[{"body":{"nativeSrc":"2386:16:69","nodeType":"YulBlock","src":"2386:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2395:1:69","nodeType":"YulLiteral","src":"2395:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"2398:1:69","nodeType":"YulLiteral","src":"2398:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2388:6:69","nodeType":"YulIdentifier","src":"2388:6:69"},"nativeSrc":"2388:12:69","nodeType":"YulFunctionCall","src":"2388:12:69"},"nativeSrc":"2388:12:69","nodeType":"YulExpressionStatement","src":"2388:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"2336:5:69","nodeType":"YulIdentifier","src":"2336:5:69"},{"arguments":[{"name":"value","nativeSrc":"2377:5:69","nodeType":"YulIdentifier","src":"2377:5:69"}],"functionName":{"name":"cleanup_t_contract$_VToken_$15506","nativeSrc":"2343:33:69","nodeType":"YulIdentifier","src":"2343:33:69"},"nativeSrc":"2343:40:69","nodeType":"YulFunctionCall","src":"2343:40:69"}],"functionName":{"name":"eq","nativeSrc":"2333:2:69","nodeType":"YulIdentifier","src":"2333:2:69"},"nativeSrc":"2333:51:69","nodeType":"YulFunctionCall","src":"2333:51:69"}],"functionName":{"name":"iszero","nativeSrc":"2326:6:69","nodeType":"YulIdentifier","src":"2326:6:69"},"nativeSrc":"2326:59:69","nodeType":"YulFunctionCall","src":"2326:59:69"},"nativeSrc":"2323:79:69","nodeType":"YulIf","src":"2323:79:69"}]},"name":"validator_revert_t_contract$_VToken_$15506","nativeSrc":"2254:154:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2306:5:69","nodeType":"YulTypedName","src":"2306:5:69","type":""}],"src":"2254:154:69"},{"body":{"nativeSrc":"2482:103:69","nodeType":"YulBlock","src":"2482:103:69","statements":[{"nativeSrc":"2492:29:69","nodeType":"YulAssignment","src":"2492:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"2514:6:69","nodeType":"YulIdentifier","src":"2514:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"2501:12:69","nodeType":"YulIdentifier","src":"2501:12:69"},"nativeSrc":"2501:20:69","nodeType":"YulFunctionCall","src":"2501:20:69"},"variableNames":[{"name":"value","nativeSrc":"2492:5:69","nodeType":"YulIdentifier","src":"2492:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"2573:5:69","nodeType":"YulIdentifier","src":"2573:5:69"}],"functionName":{"name":"validator_revert_t_contract$_VToken_$15506","nativeSrc":"2530:42:69","nodeType":"YulIdentifier","src":"2530:42:69"},"nativeSrc":"2530:49:69","nodeType":"YulFunctionCall","src":"2530:49:69"},"nativeSrc":"2530:49:69","nodeType":"YulExpressionStatement","src":"2530:49:69"}]},"name":"abi_decode_t_contract$_VToken_$15506","nativeSrc":"2414:171:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"2460:6:69","nodeType":"YulTypedName","src":"2460:6:69","type":""},{"name":"end","nativeSrc":"2468:3:69","nodeType":"YulTypedName","src":"2468:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"2476:5:69","nodeType":"YulTypedName","src":"2476:5:69","type":""}],"src":"2414:171:69"},{"body":{"nativeSrc":"2734:640:69","nodeType":"YulBlock","src":"2734:640:69","statements":[{"nativeSrc":"2744:106:69","nodeType":"YulAssignment","src":"2744:106:69","value":{"arguments":[{"arguments":[{"name":"length","nativeSrc":"2842:6:69","nodeType":"YulIdentifier","src":"2842:6:69"}],"functionName":{"name":"array_allocation_size_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"2769:72:69","nodeType":"YulIdentifier","src":"2769:72:69"},"nativeSrc":"2769:80:69","nodeType":"YulFunctionCall","src":"2769:80:69"}],"functionName":{"name":"allocate_memory","nativeSrc":"2753:15:69","nodeType":"YulIdentifier","src":"2753:15:69"},"nativeSrc":"2753:97:69","nodeType":"YulFunctionCall","src":"2753:97:69"},"variableNames":[{"name":"array","nativeSrc":"2744:5:69","nodeType":"YulIdentifier","src":"2744:5:69"}]},{"nativeSrc":"2859:16:69","nodeType":"YulVariableDeclaration","src":"2859:16:69","value":{"name":"array","nativeSrc":"2870:5:69","nodeType":"YulIdentifier","src":"2870:5:69"},"variables":[{"name":"dst","nativeSrc":"2863:3:69","nodeType":"YulTypedName","src":"2863:3:69","type":""}]},{"expression":{"arguments":[{"name":"array","nativeSrc":"2892:5:69","nodeType":"YulIdentifier","src":"2892:5:69"},{"name":"length","nativeSrc":"2899:6:69","nodeType":"YulIdentifier","src":"2899:6:69"}],"functionName":{"name":"mstore","nativeSrc":"2885:6:69","nodeType":"YulIdentifier","src":"2885:6:69"},"nativeSrc":"2885:21:69","nodeType":"YulFunctionCall","src":"2885:21:69"},"nativeSrc":"2885:21:69","nodeType":"YulExpressionStatement","src":"2885:21:69"},{"nativeSrc":"2915:23:69","nodeType":"YulAssignment","src":"2915:23:69","value":{"arguments":[{"name":"array","nativeSrc":"2926:5:69","nodeType":"YulIdentifier","src":"2926:5:69"},{"kind":"number","nativeSrc":"2933:4:69","nodeType":"YulLiteral","src":"2933:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2922:3:69","nodeType":"YulIdentifier","src":"2922:3:69"},"nativeSrc":"2922:16:69","nodeType":"YulFunctionCall","src":"2922:16:69"},"variableNames":[{"name":"dst","nativeSrc":"2915:3:69","nodeType":"YulIdentifier","src":"2915:3:69"}]},{"nativeSrc":"2948:44:69","nodeType":"YulVariableDeclaration","src":"2948:44:69","value":{"arguments":[{"name":"offset","nativeSrc":"2966:6:69","nodeType":"YulIdentifier","src":"2966:6:69"},{"arguments":[{"name":"length","nativeSrc":"2978:6:69","nodeType":"YulIdentifier","src":"2978:6:69"},{"kind":"number","nativeSrc":"2986:4:69","nodeType":"YulLiteral","src":"2986:4:69","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"2974:3:69","nodeType":"YulIdentifier","src":"2974:3:69"},"nativeSrc":"2974:17:69","nodeType":"YulFunctionCall","src":"2974:17:69"}],"functionName":{"name":"add","nativeSrc":"2962:3:69","nodeType":"YulIdentifier","src":"2962:3:69"},"nativeSrc":"2962:30:69","nodeType":"YulFunctionCall","src":"2962:30:69"},"variables":[{"name":"srcEnd","nativeSrc":"2952:6:69","nodeType":"YulTypedName","src":"2952:6:69","type":""}]},{"body":{"nativeSrc":"3020:103:69","nodeType":"YulBlock","src":"3020:103:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"3034:77:69","nodeType":"YulIdentifier","src":"3034:77:69"},"nativeSrc":"3034:79:69","nodeType":"YulFunctionCall","src":"3034:79:69"},"nativeSrc":"3034:79:69","nodeType":"YulExpressionStatement","src":"3034:79:69"}]},"condition":{"arguments":[{"name":"srcEnd","nativeSrc":"3007:6:69","nodeType":"YulIdentifier","src":"3007:6:69"},{"name":"end","nativeSrc":"3015:3:69","nodeType":"YulIdentifier","src":"3015:3:69"}],"functionName":{"name":"gt","nativeSrc":"3004:2:69","nodeType":"YulIdentifier","src":"3004:2:69"},"nativeSrc":"3004:15:69","nodeType":"YulFunctionCall","src":"3004:15:69"},"nativeSrc":"3001:122:69","nodeType":"YulIf","src":"3001:122:69"},{"body":{"nativeSrc":"3208:160:69","nodeType":"YulBlock","src":"3208:160:69","statements":[{"nativeSrc":"3223:21:69","nodeType":"YulVariableDeclaration","src":"3223:21:69","value":{"name":"src","nativeSrc":"3241:3:69","nodeType":"YulIdentifier","src":"3241:3:69"},"variables":[{"name":"elementPos","nativeSrc":"3227:10:69","nodeType":"YulTypedName","src":"3227:10:69","type":""}]},{"expression":{"arguments":[{"name":"dst","nativeSrc":"3265:3:69","nodeType":"YulIdentifier","src":"3265:3:69"},{"arguments":[{"name":"elementPos","nativeSrc":"3307:10:69","nodeType":"YulIdentifier","src":"3307:10:69"},{"name":"end","nativeSrc":"3319:3:69","nodeType":"YulIdentifier","src":"3319:3:69"}],"functionName":{"name":"abi_decode_t_contract$_VToken_$15506","nativeSrc":"3270:36:69","nodeType":"YulIdentifier","src":"3270:36:69"},"nativeSrc":"3270:53:69","nodeType":"YulFunctionCall","src":"3270:53:69"}],"functionName":{"name":"mstore","nativeSrc":"3258:6:69","nodeType":"YulIdentifier","src":"3258:6:69"},"nativeSrc":"3258:66:69","nodeType":"YulFunctionCall","src":"3258:66:69"},"nativeSrc":"3258:66:69","nodeType":"YulExpressionStatement","src":"3258:66:69"},{"nativeSrc":"3337:21:69","nodeType":"YulAssignment","src":"3337:21:69","value":{"arguments":[{"name":"dst","nativeSrc":"3348:3:69","nodeType":"YulIdentifier","src":"3348:3:69"},{"kind":"number","nativeSrc":"3353:4:69","nodeType":"YulLiteral","src":"3353:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"3344:3:69","nodeType":"YulIdentifier","src":"3344:3:69"},"nativeSrc":"3344:14:69","nodeType":"YulFunctionCall","src":"3344:14:69"},"variableNames":[{"name":"dst","nativeSrc":"3337:3:69","nodeType":"YulIdentifier","src":"3337:3:69"}]}]},"condition":{"arguments":[{"name":"src","nativeSrc":"3161:3:69","nodeType":"YulIdentifier","src":"3161:3:69"},{"name":"srcEnd","nativeSrc":"3166:6:69","nodeType":"YulIdentifier","src":"3166:6:69"}],"functionName":{"name":"lt","nativeSrc":"3158:2:69","nodeType":"YulIdentifier","src":"3158:2:69"},"nativeSrc":"3158:15:69","nodeType":"YulFunctionCall","src":"3158:15:69"},"nativeSrc":"3132:236:69","nodeType":"YulForLoop","post":{"nativeSrc":"3174:25:69","nodeType":"YulBlock","src":"3174:25:69","statements":[{"nativeSrc":"3176:21:69","nodeType":"YulAssignment","src":"3176:21:69","value":{"arguments":[{"name":"src","nativeSrc":"3187:3:69","nodeType":"YulIdentifier","src":"3187:3:69"},{"kind":"number","nativeSrc":"3192:4:69","nodeType":"YulLiteral","src":"3192:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"3183:3:69","nodeType":"YulIdentifier","src":"3183:3:69"},"nativeSrc":"3183:14:69","nodeType":"YulFunctionCall","src":"3183:14:69"},"variableNames":[{"name":"src","nativeSrc":"3176:3:69","nodeType":"YulIdentifier","src":"3176:3:69"}]}]},"pre":{"nativeSrc":"3136:21:69","nodeType":"YulBlock","src":"3136:21:69","statements":[{"nativeSrc":"3138:17:69","nodeType":"YulVariableDeclaration","src":"3138:17:69","value":{"name":"offset","nativeSrc":"3149:6:69","nodeType":"YulIdentifier","src":"3149:6:69"},"variables":[{"name":"src","nativeSrc":"3142:3:69","nodeType":"YulTypedName","src":"3142:3:69","type":""}]}]},"src":"3132:236:69"}]},"name":"abi_decode_available_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"2616:758:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"2704:6:69","nodeType":"YulTypedName","src":"2704:6:69","type":""},{"name":"length","nativeSrc":"2712:6:69","nodeType":"YulTypedName","src":"2712:6:69","type":""},{"name":"end","nativeSrc":"2720:3:69","nodeType":"YulTypedName","src":"2720:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"2728:5:69","nodeType":"YulTypedName","src":"2728:5:69","type":""}],"src":"2616:758:69"},{"body":{"nativeSrc":"3498:309:69","nodeType":"YulBlock","src":"3498:309:69","statements":[{"body":{"nativeSrc":"3547:83:69","nodeType":"YulBlock","src":"3547:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"3549:77:69","nodeType":"YulIdentifier","src":"3549:77:69"},"nativeSrc":"3549:79:69","nodeType":"YulFunctionCall","src":"3549:79:69"},"nativeSrc":"3549:79:69","nodeType":"YulExpressionStatement","src":"3549:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"3526:6:69","nodeType":"YulIdentifier","src":"3526:6:69"},{"kind":"number","nativeSrc":"3534:4:69","nodeType":"YulLiteral","src":"3534:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"3522:3:69","nodeType":"YulIdentifier","src":"3522:3:69"},"nativeSrc":"3522:17:69","nodeType":"YulFunctionCall","src":"3522:17:69"},{"name":"end","nativeSrc":"3541:3:69","nodeType":"YulIdentifier","src":"3541:3:69"}],"functionName":{"name":"slt","nativeSrc":"3518:3:69","nodeType":"YulIdentifier","src":"3518:3:69"},"nativeSrc":"3518:27:69","nodeType":"YulFunctionCall","src":"3518:27:69"}],"functionName":{"name":"iszero","nativeSrc":"3511:6:69","nodeType":"YulIdentifier","src":"3511:6:69"},"nativeSrc":"3511:35:69","nodeType":"YulFunctionCall","src":"3511:35:69"},"nativeSrc":"3508:122:69","nodeType":"YulIf","src":"3508:122:69"},{"nativeSrc":"3639:34:69","nodeType":"YulVariableDeclaration","src":"3639:34:69","value":{"arguments":[{"name":"offset","nativeSrc":"3666:6:69","nodeType":"YulIdentifier","src":"3666:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"3653:12:69","nodeType":"YulIdentifier","src":"3653:12:69"},"nativeSrc":"3653:20:69","nodeType":"YulFunctionCall","src":"3653:20:69"},"variables":[{"name":"length","nativeSrc":"3643:6:69","nodeType":"YulTypedName","src":"3643:6:69","type":""}]},{"nativeSrc":"3682:119:69","nodeType":"YulAssignment","src":"3682:119:69","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"3774:6:69","nodeType":"YulIdentifier","src":"3774:6:69"},{"kind":"number","nativeSrc":"3782:4:69","nodeType":"YulLiteral","src":"3782:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"3770:3:69","nodeType":"YulIdentifier","src":"3770:3:69"},"nativeSrc":"3770:17:69","nodeType":"YulFunctionCall","src":"3770:17:69"},{"name":"length","nativeSrc":"3789:6:69","nodeType":"YulIdentifier","src":"3789:6:69"},{"name":"end","nativeSrc":"3797:3:69","nodeType":"YulIdentifier","src":"3797:3:69"}],"functionName":{"name":"abi_decode_available_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"3691:78:69","nodeType":"YulIdentifier","src":"3691:78:69"},"nativeSrc":"3691:110:69","nodeType":"YulFunctionCall","src":"3691:110:69"},"variableNames":[{"name":"array","nativeSrc":"3682:5:69","nodeType":"YulIdentifier","src":"3682:5:69"}]}]},"name":"abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"3405:402:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"3476:6:69","nodeType":"YulTypedName","src":"3476:6:69","type":""},{"name":"end","nativeSrc":"3484:3:69","nodeType":"YulTypedName","src":"3484:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"3492:5:69","nodeType":"YulTypedName","src":"3492:5:69","type":""}],"src":"3405:402:69"},{"body":{"nativeSrc":"3937:592:69","nodeType":"YulBlock","src":"3937:592:69","statements":[{"body":{"nativeSrc":"3983:83:69","nodeType":"YulBlock","src":"3983:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"3985:77:69","nodeType":"YulIdentifier","src":"3985:77:69"},"nativeSrc":"3985:79:69","nodeType":"YulFunctionCall","src":"3985:79:69"},"nativeSrc":"3985:79:69","nodeType":"YulExpressionStatement","src":"3985:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"3958:7:69","nodeType":"YulIdentifier","src":"3958:7:69"},{"name":"headStart","nativeSrc":"3967:9:69","nodeType":"YulIdentifier","src":"3967:9:69"}],"functionName":{"name":"sub","nativeSrc":"3954:3:69","nodeType":"YulIdentifier","src":"3954:3:69"},"nativeSrc":"3954:23:69","nodeType":"YulFunctionCall","src":"3954:23:69"},{"kind":"number","nativeSrc":"3979:2:69","nodeType":"YulLiteral","src":"3979:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"3950:3:69","nodeType":"YulIdentifier","src":"3950:3:69"},"nativeSrc":"3950:32:69","nodeType":"YulFunctionCall","src":"3950:32:69"},"nativeSrc":"3947:119:69","nodeType":"YulIf","src":"3947:119:69"},{"nativeSrc":"4076:117:69","nodeType":"YulBlock","src":"4076:117:69","statements":[{"nativeSrc":"4091:15:69","nodeType":"YulVariableDeclaration","src":"4091:15:69","value":{"kind":"number","nativeSrc":"4105:1:69","nodeType":"YulLiteral","src":"4105:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"4095:6:69","nodeType":"YulTypedName","src":"4095:6:69","type":""}]},{"nativeSrc":"4120:63:69","nodeType":"YulAssignment","src":"4120:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4155:9:69","nodeType":"YulIdentifier","src":"4155:9:69"},{"name":"offset","nativeSrc":"4166:6:69","nodeType":"YulIdentifier","src":"4166:6:69"}],"functionName":{"name":"add","nativeSrc":"4151:3:69","nodeType":"YulIdentifier","src":"4151:3:69"},"nativeSrc":"4151:22:69","nodeType":"YulFunctionCall","src":"4151:22:69"},{"name":"dataEnd","nativeSrc":"4175:7:69","nodeType":"YulIdentifier","src":"4175:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"4130:20:69","nodeType":"YulIdentifier","src":"4130:20:69"},"nativeSrc":"4130:53:69","nodeType":"YulFunctionCall","src":"4130:53:69"},"variableNames":[{"name":"value0","nativeSrc":"4120:6:69","nodeType":"YulIdentifier","src":"4120:6:69"}]}]},{"nativeSrc":"4203:319:69","nodeType":"YulBlock","src":"4203:319:69","statements":[{"nativeSrc":"4218:46:69","nodeType":"YulVariableDeclaration","src":"4218:46:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4249:9:69","nodeType":"YulIdentifier","src":"4249:9:69"},{"kind":"number","nativeSrc":"4260:2:69","nodeType":"YulLiteral","src":"4260:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4245:3:69","nodeType":"YulIdentifier","src":"4245:3:69"},"nativeSrc":"4245:18:69","nodeType":"YulFunctionCall","src":"4245:18:69"}],"functionName":{"name":"calldataload","nativeSrc":"4232:12:69","nodeType":"YulIdentifier","src":"4232:12:69"},"nativeSrc":"4232:32:69","nodeType":"YulFunctionCall","src":"4232:32:69"},"variables":[{"name":"offset","nativeSrc":"4222:6:69","nodeType":"YulTypedName","src":"4222:6:69","type":""}]},{"body":{"nativeSrc":"4311:83:69","nodeType":"YulBlock","src":"4311:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"4313:77:69","nodeType":"YulIdentifier","src":"4313:77:69"},"nativeSrc":"4313:79:69","nodeType":"YulFunctionCall","src":"4313:79:69"},"nativeSrc":"4313:79:69","nodeType":"YulExpressionStatement","src":"4313:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"4283:6:69","nodeType":"YulIdentifier","src":"4283:6:69"},{"kind":"number","nativeSrc":"4291:18:69","nodeType":"YulLiteral","src":"4291:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"4280:2:69","nodeType":"YulIdentifier","src":"4280:2:69"},"nativeSrc":"4280:30:69","nodeType":"YulFunctionCall","src":"4280:30:69"},"nativeSrc":"4277:117:69","nodeType":"YulIf","src":"4277:117:69"},{"nativeSrc":"4408:104:69","nodeType":"YulAssignment","src":"4408:104:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4484:9:69","nodeType":"YulIdentifier","src":"4484:9:69"},{"name":"offset","nativeSrc":"4495:6:69","nodeType":"YulIdentifier","src":"4495:6:69"}],"functionName":{"name":"add","nativeSrc":"4480:3:69","nodeType":"YulIdentifier","src":"4480:3:69"},"nativeSrc":"4480:22:69","nodeType":"YulFunctionCall","src":"4480:22:69"},{"name":"dataEnd","nativeSrc":"4504:7:69","nodeType":"YulIdentifier","src":"4504:7:69"}],"functionName":{"name":"abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"4418:61:69","nodeType":"YulIdentifier","src":"4418:61:69"},"nativeSrc":"4418:94:69","nodeType":"YulFunctionCall","src":"4418:94:69"},"variableNames":[{"name":"value1","nativeSrc":"4408:6:69","nodeType":"YulIdentifier","src":"4408:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"3813:716:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3899:9:69","nodeType":"YulTypedName","src":"3899:9:69","type":""},{"name":"dataEnd","nativeSrc":"3910:7:69","nodeType":"YulTypedName","src":"3910:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"3922:6:69","nodeType":"YulTypedName","src":"3922:6:69","type":""},{"name":"value1","nativeSrc":"3930:6:69","nodeType":"YulTypedName","src":"3930:6:69","type":""}],"src":"3813:716:69"},{"body":{"nativeSrc":"4601:263:69","nodeType":"YulBlock","src":"4601:263:69","statements":[{"body":{"nativeSrc":"4647:83:69","nodeType":"YulBlock","src":"4647:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"4649:77:69","nodeType":"YulIdentifier","src":"4649:77:69"},"nativeSrc":"4649:79:69","nodeType":"YulFunctionCall","src":"4649:79:69"},"nativeSrc":"4649:79:69","nodeType":"YulExpressionStatement","src":"4649:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"4622:7:69","nodeType":"YulIdentifier","src":"4622:7:69"},{"name":"headStart","nativeSrc":"4631:9:69","nodeType":"YulIdentifier","src":"4631:9:69"}],"functionName":{"name":"sub","nativeSrc":"4618:3:69","nodeType":"YulIdentifier","src":"4618:3:69"},"nativeSrc":"4618:23:69","nodeType":"YulFunctionCall","src":"4618:23:69"},{"kind":"number","nativeSrc":"4643:2:69","nodeType":"YulLiteral","src":"4643:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"4614:3:69","nodeType":"YulIdentifier","src":"4614:3:69"},"nativeSrc":"4614:32:69","nodeType":"YulFunctionCall","src":"4614:32:69"},"nativeSrc":"4611:119:69","nodeType":"YulIf","src":"4611:119:69"},{"nativeSrc":"4740:117:69","nodeType":"YulBlock","src":"4740:117:69","statements":[{"nativeSrc":"4755:15:69","nodeType":"YulVariableDeclaration","src":"4755:15:69","value":{"kind":"number","nativeSrc":"4769:1:69","nodeType":"YulLiteral","src":"4769:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"4759:6:69","nodeType":"YulTypedName","src":"4759:6:69","type":""}]},{"nativeSrc":"4784:63:69","nodeType":"YulAssignment","src":"4784:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4819:9:69","nodeType":"YulIdentifier","src":"4819:9:69"},{"name":"offset","nativeSrc":"4830:6:69","nodeType":"YulIdentifier","src":"4830:6:69"}],"functionName":{"name":"add","nativeSrc":"4815:3:69","nodeType":"YulIdentifier","src":"4815:3:69"},"nativeSrc":"4815:22:69","nodeType":"YulFunctionCall","src":"4815:22:69"},{"name":"dataEnd","nativeSrc":"4839:7:69","nodeType":"YulIdentifier","src":"4839:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"4794:20:69","nodeType":"YulIdentifier","src":"4794:20:69"},"nativeSrc":"4794:53:69","nodeType":"YulFunctionCall","src":"4794:53:69"},"variableNames":[{"name":"value0","nativeSrc":"4784:6:69","nodeType":"YulIdentifier","src":"4784:6:69"}]}]}]},"name":"abi_decode_tuple_t_address","nativeSrc":"4535:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4571:9:69","nodeType":"YulTypedName","src":"4571:9:69","type":""},{"name":"dataEnd","nativeSrc":"4582:7:69","nodeType":"YulTypedName","src":"4582:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"4594:6:69","nodeType":"YulTypedName","src":"4594:6:69","type":""}],"src":"4535:329:69"},{"body":{"nativeSrc":"4915:97:69","nodeType":"YulBlock","src":"4915:97:69","statements":[{"nativeSrc":"4925:81:69","nodeType":"YulAssignment","src":"4925:81:69","value":{"arguments":[{"name":"value","nativeSrc":"4940:5:69","nodeType":"YulIdentifier","src":"4940:5:69"},{"kind":"number","nativeSrc":"4947:58:69","nodeType":"YulLiteral","src":"4947:58:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"4936:3:69","nodeType":"YulIdentifier","src":"4936:3:69"},"nativeSrc":"4936:70:69","nodeType":"YulFunctionCall","src":"4936:70:69"},"variableNames":[{"name":"cleaned","nativeSrc":"4925:7:69","nodeType":"YulIdentifier","src":"4925:7:69"}]}]},"name":"cleanup_t_uint224","nativeSrc":"4870:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4897:5:69","nodeType":"YulTypedName","src":"4897:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"4907:7:69","nodeType":"YulTypedName","src":"4907:7:69","type":""}],"src":"4870:142:69"},{"body":{"nativeSrc":"5083:53:69","nodeType":"YulBlock","src":"5083:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"5100:3:69","nodeType":"YulIdentifier","src":"5100:3:69"},{"arguments":[{"name":"value","nativeSrc":"5123:5:69","nodeType":"YulIdentifier","src":"5123:5:69"}],"functionName":{"name":"cleanup_t_uint224","nativeSrc":"5105:17:69","nodeType":"YulIdentifier","src":"5105:17:69"},"nativeSrc":"5105:24:69","nodeType":"YulFunctionCall","src":"5105:24:69"}],"functionName":{"name":"mstore","nativeSrc":"5093:6:69","nodeType":"YulIdentifier","src":"5093:6:69"},"nativeSrc":"5093:37:69","nodeType":"YulFunctionCall","src":"5093:37:69"},"nativeSrc":"5093:37:69","nodeType":"YulExpressionStatement","src":"5093:37:69"}]},"name":"abi_encode_t_uint224_to_t_uint224_fromStack","nativeSrc":"5018:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"5071:5:69","nodeType":"YulTypedName","src":"5071:5:69","type":""},{"name":"pos","nativeSrc":"5078:3:69","nodeType":"YulTypedName","src":"5078:3:69","type":""}],"src":"5018:118:69"},{"body":{"nativeSrc":"5240:124:69","nodeType":"YulBlock","src":"5240:124:69","statements":[{"nativeSrc":"5250:26:69","nodeType":"YulAssignment","src":"5250:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"5262:9:69","nodeType":"YulIdentifier","src":"5262:9:69"},{"kind":"number","nativeSrc":"5273:2:69","nodeType":"YulLiteral","src":"5273:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5258:3:69","nodeType":"YulIdentifier","src":"5258:3:69"},"nativeSrc":"5258:18:69","nodeType":"YulFunctionCall","src":"5258:18:69"},"variableNames":[{"name":"tail","nativeSrc":"5250:4:69","nodeType":"YulIdentifier","src":"5250:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"5330:6:69","nodeType":"YulIdentifier","src":"5330:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"5343:9:69","nodeType":"YulIdentifier","src":"5343:9:69"},{"kind":"number","nativeSrc":"5354:1:69","nodeType":"YulLiteral","src":"5354:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5339:3:69","nodeType":"YulIdentifier","src":"5339:3:69"},"nativeSrc":"5339:17:69","nodeType":"YulFunctionCall","src":"5339:17:69"}],"functionName":{"name":"abi_encode_t_uint224_to_t_uint224_fromStack","nativeSrc":"5286:43:69","nodeType":"YulIdentifier","src":"5286:43:69"},"nativeSrc":"5286:71:69","nodeType":"YulFunctionCall","src":"5286:71:69"},"nativeSrc":"5286:71:69","nodeType":"YulExpressionStatement","src":"5286:71:69"}]},"name":"abi_encode_tuple_t_uint224__to_t_uint224__fromStack_reversed","nativeSrc":"5142:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5212:9:69","nodeType":"YulTypedName","src":"5212:9:69","type":""},{"name":"value0","nativeSrc":"5224:6:69","nodeType":"YulTypedName","src":"5224:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"5235:4:69","nodeType":"YulTypedName","src":"5235:4:69","type":""}],"src":"5142:222:69"},{"body":{"nativeSrc":"5415:32:69","nodeType":"YulBlock","src":"5415:32:69","statements":[{"nativeSrc":"5425:16:69","nodeType":"YulAssignment","src":"5425:16:69","value":{"name":"value","nativeSrc":"5436:5:69","nodeType":"YulIdentifier","src":"5436:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"5425:7:69","nodeType":"YulIdentifier","src":"5425:7:69"}]}]},"name":"cleanup_t_uint256","nativeSrc":"5370:77:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"5397:5:69","nodeType":"YulTypedName","src":"5397:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"5407:7:69","nodeType":"YulTypedName","src":"5407:7:69","type":""}],"src":"5370:77:69"},{"body":{"nativeSrc":"5518:53:69","nodeType":"YulBlock","src":"5518:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"5535:3:69","nodeType":"YulIdentifier","src":"5535:3:69"},{"arguments":[{"name":"value","nativeSrc":"5558:5:69","nodeType":"YulIdentifier","src":"5558:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"5540:17:69","nodeType":"YulIdentifier","src":"5540:17:69"},"nativeSrc":"5540:24:69","nodeType":"YulFunctionCall","src":"5540:24:69"}],"functionName":{"name":"mstore","nativeSrc":"5528:6:69","nodeType":"YulIdentifier","src":"5528:6:69"},"nativeSrc":"5528:37:69","nodeType":"YulFunctionCall","src":"5528:37:69"},"nativeSrc":"5528:37:69","nodeType":"YulExpressionStatement","src":"5528:37:69"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"5453:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"5506:5:69","nodeType":"YulTypedName","src":"5506:5:69","type":""},{"name":"pos","nativeSrc":"5513:3:69","nodeType":"YulTypedName","src":"5513:3:69","type":""}],"src":"5453:118:69"},{"body":{"nativeSrc":"5675:124:69","nodeType":"YulBlock","src":"5675:124:69","statements":[{"nativeSrc":"5685:26:69","nodeType":"YulAssignment","src":"5685:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"5697:9:69","nodeType":"YulIdentifier","src":"5697:9:69"},{"kind":"number","nativeSrc":"5708:2:69","nodeType":"YulLiteral","src":"5708:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5693:3:69","nodeType":"YulIdentifier","src":"5693:3:69"},"nativeSrc":"5693:18:69","nodeType":"YulFunctionCall","src":"5693:18:69"},"variableNames":[{"name":"tail","nativeSrc":"5685:4:69","nodeType":"YulIdentifier","src":"5685:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"5765:6:69","nodeType":"YulIdentifier","src":"5765:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"5778:9:69","nodeType":"YulIdentifier","src":"5778:9:69"},{"kind":"number","nativeSrc":"5789:1:69","nodeType":"YulLiteral","src":"5789:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5774:3:69","nodeType":"YulIdentifier","src":"5774:3:69"},"nativeSrc":"5774:17:69","nodeType":"YulFunctionCall","src":"5774:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"5721:43:69","nodeType":"YulIdentifier","src":"5721:43:69"},"nativeSrc":"5721:71:69","nodeType":"YulFunctionCall","src":"5721:71:69"},"nativeSrc":"5721:71:69","nodeType":"YulExpressionStatement","src":"5721:71:69"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nativeSrc":"5577:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5647:9:69","nodeType":"YulTypedName","src":"5647:9:69","type":""},{"name":"value0","nativeSrc":"5659:6:69","nodeType":"YulTypedName","src":"5659:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"5670:4:69","nodeType":"YulTypedName","src":"5670:4:69","type":""}],"src":"5577:222:69"},{"body":{"nativeSrc":"5894:28:69","nodeType":"YulBlock","src":"5894:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"5911:1:69","nodeType":"YulLiteral","src":"5911:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"5914:1:69","nodeType":"YulLiteral","src":"5914:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"5904:6:69","nodeType":"YulIdentifier","src":"5904:6:69"},"nativeSrc":"5904:12:69","nodeType":"YulFunctionCall","src":"5904:12:69"},"nativeSrc":"5904:12:69","nodeType":"YulExpressionStatement","src":"5904:12:69"}]},"name":"revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f","nativeSrc":"5805:117:69","nodeType":"YulFunctionDefinition","src":"5805:117:69"},{"body":{"nativeSrc":"6017:28:69","nodeType":"YulBlock","src":"6017:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"6034:1:69","nodeType":"YulLiteral","src":"6034:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"6037:1:69","nodeType":"YulLiteral","src":"6037:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"6027:6:69","nodeType":"YulIdentifier","src":"6027:6:69"},"nativeSrc":"6027:12:69","nodeType":"YulFunctionCall","src":"6027:12:69"},"nativeSrc":"6027:12:69","nodeType":"YulExpressionStatement","src":"6027:12:69"}]},"name":"revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421","nativeSrc":"5928:117:69","nodeType":"YulFunctionDefinition","src":"5928:117:69"},{"body":{"nativeSrc":"6094:79:69","nodeType":"YulBlock","src":"6094:79:69","statements":[{"body":{"nativeSrc":"6151:16:69","nodeType":"YulBlock","src":"6151:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"6160:1:69","nodeType":"YulLiteral","src":"6160:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"6163:1:69","nodeType":"YulLiteral","src":"6163:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"6153:6:69","nodeType":"YulIdentifier","src":"6153:6:69"},"nativeSrc":"6153:12:69","nodeType":"YulFunctionCall","src":"6153:12:69"},"nativeSrc":"6153:12:69","nodeType":"YulExpressionStatement","src":"6153:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"6117:5:69","nodeType":"YulIdentifier","src":"6117:5:69"},{"arguments":[{"name":"value","nativeSrc":"6142:5:69","nodeType":"YulIdentifier","src":"6142:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"6124:17:69","nodeType":"YulIdentifier","src":"6124:17:69"},"nativeSrc":"6124:24:69","nodeType":"YulFunctionCall","src":"6124:24:69"}],"functionName":{"name":"eq","nativeSrc":"6114:2:69","nodeType":"YulIdentifier","src":"6114:2:69"},"nativeSrc":"6114:35:69","nodeType":"YulFunctionCall","src":"6114:35:69"}],"functionName":{"name":"iszero","nativeSrc":"6107:6:69","nodeType":"YulIdentifier","src":"6107:6:69"},"nativeSrc":"6107:43:69","nodeType":"YulFunctionCall","src":"6107:43:69"},"nativeSrc":"6104:63:69","nodeType":"YulIf","src":"6104:63:69"}]},"name":"validator_revert_t_uint256","nativeSrc":"6051:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"6087:5:69","nodeType":"YulTypedName","src":"6087:5:69","type":""}],"src":"6051:122:69"},{"body":{"nativeSrc":"6231:87:69","nodeType":"YulBlock","src":"6231:87:69","statements":[{"nativeSrc":"6241:29:69","nodeType":"YulAssignment","src":"6241:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"6263:6:69","nodeType":"YulIdentifier","src":"6263:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"6250:12:69","nodeType":"YulIdentifier","src":"6250:12:69"},"nativeSrc":"6250:20:69","nodeType":"YulFunctionCall","src":"6250:20:69"},"variableNames":[{"name":"value","nativeSrc":"6241:5:69","nodeType":"YulIdentifier","src":"6241:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"6306:5:69","nodeType":"YulIdentifier","src":"6306:5:69"}],"functionName":{"name":"validator_revert_t_uint256","nativeSrc":"6279:26:69","nodeType":"YulIdentifier","src":"6279:26:69"},"nativeSrc":"6279:33:69","nodeType":"YulFunctionCall","src":"6279:33:69"},"nativeSrc":"6279:33:69","nodeType":"YulExpressionStatement","src":"6279:33:69"}]},"name":"abi_decode_t_uint256","nativeSrc":"6179:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"6209:6:69","nodeType":"YulTypedName","src":"6209:6:69","type":""},{"name":"end","nativeSrc":"6217:3:69","nodeType":"YulTypedName","src":"6217:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"6225:5:69","nodeType":"YulTypedName","src":"6225:5:69","type":""}],"src":"6179:139:69"},{"body":{"nativeSrc":"6437:337:69","nodeType":"YulBlock","src":"6437:337:69","statements":[{"body":{"nativeSrc":"6481:83:69","nodeType":"YulBlock","src":"6481:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f","nativeSrc":"6483:77:69","nodeType":"YulIdentifier","src":"6483:77:69"},"nativeSrc":"6483:79:69","nodeType":"YulFunctionCall","src":"6483:79:69"},"nativeSrc":"6483:79:69","nodeType":"YulExpressionStatement","src":"6483:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nativeSrc":"6458:3:69","nodeType":"YulIdentifier","src":"6458:3:69"},{"name":"headStart","nativeSrc":"6463:9:69","nodeType":"YulIdentifier","src":"6463:9:69"}],"functionName":{"name":"sub","nativeSrc":"6454:3:69","nodeType":"YulIdentifier","src":"6454:3:69"},"nativeSrc":"6454:19:69","nodeType":"YulFunctionCall","src":"6454:19:69"},{"kind":"number","nativeSrc":"6475:4:69","nodeType":"YulLiteral","src":"6475:4:69","type":"","value":"0x20"}],"functionName":{"name":"slt","nativeSrc":"6450:3:69","nodeType":"YulIdentifier","src":"6450:3:69"},"nativeSrc":"6450:30:69","nodeType":"YulFunctionCall","src":"6450:30:69"},"nativeSrc":"6447:117:69","nodeType":"YulIf","src":"6447:117:69"},{"nativeSrc":"6573:30:69","nodeType":"YulAssignment","src":"6573:30:69","value":{"arguments":[{"kind":"number","nativeSrc":"6598:4:69","nodeType":"YulLiteral","src":"6598:4:69","type":"","value":"0x20"}],"functionName":{"name":"allocate_memory","nativeSrc":"6582:15:69","nodeType":"YulIdentifier","src":"6582:15:69"},"nativeSrc":"6582:21:69","nodeType":"YulFunctionCall","src":"6582:21:69"},"variableNames":[{"name":"value","nativeSrc":"6573:5:69","nodeType":"YulIdentifier","src":"6573:5:69"}]},{"nativeSrc":"6613:154:69","nodeType":"YulBlock","src":"6613:154:69","statements":[{"nativeSrc":"6652:15:69","nodeType":"YulVariableDeclaration","src":"6652:15:69","value":{"kind":"number","nativeSrc":"6666:1:69","nodeType":"YulLiteral","src":"6666:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"6656:6:69","nodeType":"YulTypedName","src":"6656:6:69","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"6692:5:69","nodeType":"YulIdentifier","src":"6692:5:69"},{"kind":"number","nativeSrc":"6699:4:69","nodeType":"YulLiteral","src":"6699:4:69","type":"","value":"0x00"}],"functionName":{"name":"add","nativeSrc":"6688:3:69","nodeType":"YulIdentifier","src":"6688:3:69"},"nativeSrc":"6688:16:69","nodeType":"YulFunctionCall","src":"6688:16:69"},{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6731:9:69","nodeType":"YulIdentifier","src":"6731:9:69"},{"name":"offset","nativeSrc":"6742:6:69","nodeType":"YulIdentifier","src":"6742:6:69"}],"functionName":{"name":"add","nativeSrc":"6727:3:69","nodeType":"YulIdentifier","src":"6727:3:69"},"nativeSrc":"6727:22:69","nodeType":"YulFunctionCall","src":"6727:22:69"},{"name":"end","nativeSrc":"6751:3:69","nodeType":"YulIdentifier","src":"6751:3:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"6706:20:69","nodeType":"YulIdentifier","src":"6706:20:69"},"nativeSrc":"6706:49:69","nodeType":"YulFunctionCall","src":"6706:49:69"}],"functionName":{"name":"mstore","nativeSrc":"6681:6:69","nodeType":"YulIdentifier","src":"6681:6:69"},"nativeSrc":"6681:75:69","nodeType":"YulFunctionCall","src":"6681:75:69"},"nativeSrc":"6681:75:69","nodeType":"YulExpressionStatement","src":"6681:75:69"}]}]},"name":"abi_decode_t_struct$_Exp_$9645_memory_ptr","nativeSrc":"6361:413:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6412:9:69","nodeType":"YulTypedName","src":"6412:9:69","type":""},{"name":"end","nativeSrc":"6423:3:69","nodeType":"YulTypedName","src":"6423:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"6431:5:69","nodeType":"YulTypedName","src":"6431:5:69","type":""}],"src":"6361:413:69"},{"body":{"nativeSrc":"6884:412:69","nodeType":"YulBlock","src":"6884:412:69","statements":[{"body":{"nativeSrc":"6930:83:69","nodeType":"YulBlock","src":"6930:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"6932:77:69","nodeType":"YulIdentifier","src":"6932:77:69"},"nativeSrc":"6932:79:69","nodeType":"YulFunctionCall","src":"6932:79:69"},"nativeSrc":"6932:79:69","nodeType":"YulExpressionStatement","src":"6932:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"6905:7:69","nodeType":"YulIdentifier","src":"6905:7:69"},{"name":"headStart","nativeSrc":"6914:9:69","nodeType":"YulIdentifier","src":"6914:9:69"}],"functionName":{"name":"sub","nativeSrc":"6901:3:69","nodeType":"YulIdentifier","src":"6901:3:69"},"nativeSrc":"6901:23:69","nodeType":"YulFunctionCall","src":"6901:23:69"},{"kind":"number","nativeSrc":"6926:2:69","nodeType":"YulLiteral","src":"6926:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"6897:3:69","nodeType":"YulIdentifier","src":"6897:3:69"},"nativeSrc":"6897:32:69","nodeType":"YulFunctionCall","src":"6897:32:69"},"nativeSrc":"6894:119:69","nodeType":"YulIf","src":"6894:119:69"},{"nativeSrc":"7023:117:69","nodeType":"YulBlock","src":"7023:117:69","statements":[{"nativeSrc":"7038:15:69","nodeType":"YulVariableDeclaration","src":"7038:15:69","value":{"kind":"number","nativeSrc":"7052:1:69","nodeType":"YulLiteral","src":"7052:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"7042:6:69","nodeType":"YulTypedName","src":"7042:6:69","type":""}]},{"nativeSrc":"7067:63:69","nodeType":"YulAssignment","src":"7067:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7102:9:69","nodeType":"YulIdentifier","src":"7102:9:69"},{"name":"offset","nativeSrc":"7113:6:69","nodeType":"YulIdentifier","src":"7113:6:69"}],"functionName":{"name":"add","nativeSrc":"7098:3:69","nodeType":"YulIdentifier","src":"7098:3:69"},"nativeSrc":"7098:22:69","nodeType":"YulFunctionCall","src":"7098:22:69"},{"name":"dataEnd","nativeSrc":"7122:7:69","nodeType":"YulIdentifier","src":"7122:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"7077:20:69","nodeType":"YulIdentifier","src":"7077:20:69"},"nativeSrc":"7077:53:69","nodeType":"YulFunctionCall","src":"7077:53:69"},"variableNames":[{"name":"value0","nativeSrc":"7067:6:69","nodeType":"YulIdentifier","src":"7067:6:69"}]}]},{"nativeSrc":"7150:139:69","nodeType":"YulBlock","src":"7150:139:69","statements":[{"nativeSrc":"7165:16:69","nodeType":"YulVariableDeclaration","src":"7165:16:69","value":{"kind":"number","nativeSrc":"7179:2:69","nodeType":"YulLiteral","src":"7179:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"7169:6:69","nodeType":"YulTypedName","src":"7169:6:69","type":""}]},{"nativeSrc":"7195:84:69","nodeType":"YulAssignment","src":"7195:84:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7251:9:69","nodeType":"YulIdentifier","src":"7251:9:69"},{"name":"offset","nativeSrc":"7262:6:69","nodeType":"YulIdentifier","src":"7262:6:69"}],"functionName":{"name":"add","nativeSrc":"7247:3:69","nodeType":"YulIdentifier","src":"7247:3:69"},"nativeSrc":"7247:22:69","nodeType":"YulFunctionCall","src":"7247:22:69"},{"name":"dataEnd","nativeSrc":"7271:7:69","nodeType":"YulIdentifier","src":"7271:7:69"}],"functionName":{"name":"abi_decode_t_struct$_Exp_$9645_memory_ptr","nativeSrc":"7205:41:69","nodeType":"YulIdentifier","src":"7205:41:69"},"nativeSrc":"7205:74:69","nodeType":"YulFunctionCall","src":"7205:74:69"},"variableNames":[{"name":"value1","nativeSrc":"7195:6:69","nodeType":"YulIdentifier","src":"7195:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_struct$_Exp_$9645_memory_ptr","nativeSrc":"6780:516:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6846:9:69","nodeType":"YulTypedName","src":"6846:9:69","type":""},{"name":"dataEnd","nativeSrc":"6857:7:69","nodeType":"YulTypedName","src":"6857:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"6869:6:69","nodeType":"YulTypedName","src":"6869:6:69","type":""},{"name":"value1","nativeSrc":"6877:6:69","nodeType":"YulTypedName","src":"6877:6:69","type":""}],"src":"6780:516:69"},{"body":{"nativeSrc":"7346:49:69","nodeType":"YulBlock","src":"7346:49:69","statements":[{"nativeSrc":"7356:33:69","nodeType":"YulAssignment","src":"7356:33:69","value":{"arguments":[{"name":"value","nativeSrc":"7371:5:69","nodeType":"YulIdentifier","src":"7371:5:69"},{"kind":"number","nativeSrc":"7378:10:69","nodeType":"YulLiteral","src":"7378:10:69","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nativeSrc":"7367:3:69","nodeType":"YulIdentifier","src":"7367:3:69"},"nativeSrc":"7367:22:69","nodeType":"YulFunctionCall","src":"7367:22:69"},"variableNames":[{"name":"cleaned","nativeSrc":"7356:7:69","nodeType":"YulIdentifier","src":"7356:7:69"}]}]},"name":"cleanup_t_uint32","nativeSrc":"7302:93:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7328:5:69","nodeType":"YulTypedName","src":"7328:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"7338:7:69","nodeType":"YulTypedName","src":"7338:7:69","type":""}],"src":"7302:93:69"},{"body":{"nativeSrc":"7464:52:69","nodeType":"YulBlock","src":"7464:52:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"7481:3:69","nodeType":"YulIdentifier","src":"7481:3:69"},{"arguments":[{"name":"value","nativeSrc":"7503:5:69","nodeType":"YulIdentifier","src":"7503:5:69"}],"functionName":{"name":"cleanup_t_uint32","nativeSrc":"7486:16:69","nodeType":"YulIdentifier","src":"7486:16:69"},"nativeSrc":"7486:23:69","nodeType":"YulFunctionCall","src":"7486:23:69"}],"functionName":{"name":"mstore","nativeSrc":"7474:6:69","nodeType":"YulIdentifier","src":"7474:6:69"},"nativeSrc":"7474:36:69","nodeType":"YulFunctionCall","src":"7474:36:69"},"nativeSrc":"7474:36:69","nodeType":"YulExpressionStatement","src":"7474:36:69"}]},"name":"abi_encode_t_uint32_to_t_uint32_fromStack","nativeSrc":"7401:115:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7452:5:69","nodeType":"YulTypedName","src":"7452:5:69","type":""},{"name":"pos","nativeSrc":"7459:3:69","nodeType":"YulTypedName","src":"7459:3:69","type":""}],"src":"7401:115:69"},{"body":{"nativeSrc":"7672:284:69","nodeType":"YulBlock","src":"7672:284:69","statements":[{"nativeSrc":"7682:26:69","nodeType":"YulAssignment","src":"7682:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"7694:9:69","nodeType":"YulIdentifier","src":"7694:9:69"},{"kind":"number","nativeSrc":"7705:2:69","nodeType":"YulLiteral","src":"7705:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"7690:3:69","nodeType":"YulIdentifier","src":"7690:3:69"},"nativeSrc":"7690:18:69","nodeType":"YulFunctionCall","src":"7690:18:69"},"variableNames":[{"name":"tail","nativeSrc":"7682:4:69","nodeType":"YulIdentifier","src":"7682:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"7762:6:69","nodeType":"YulIdentifier","src":"7762:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"7775:9:69","nodeType":"YulIdentifier","src":"7775:9:69"},{"kind":"number","nativeSrc":"7786:1:69","nodeType":"YulLiteral","src":"7786:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"7771:3:69","nodeType":"YulIdentifier","src":"7771:3:69"},"nativeSrc":"7771:17:69","nodeType":"YulFunctionCall","src":"7771:17:69"}],"functionName":{"name":"abi_encode_t_uint224_to_t_uint224_fromStack","nativeSrc":"7718:43:69","nodeType":"YulIdentifier","src":"7718:43:69"},"nativeSrc":"7718:71:69","nodeType":"YulFunctionCall","src":"7718:71:69"},"nativeSrc":"7718:71:69","nodeType":"YulExpressionStatement","src":"7718:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"7841:6:69","nodeType":"YulIdentifier","src":"7841:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"7854:9:69","nodeType":"YulIdentifier","src":"7854:9:69"},{"kind":"number","nativeSrc":"7865:2:69","nodeType":"YulLiteral","src":"7865:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7850:3:69","nodeType":"YulIdentifier","src":"7850:3:69"},"nativeSrc":"7850:18:69","nodeType":"YulFunctionCall","src":"7850:18:69"}],"functionName":{"name":"abi_encode_t_uint32_to_t_uint32_fromStack","nativeSrc":"7799:41:69","nodeType":"YulIdentifier","src":"7799:41:69"},"nativeSrc":"7799:70:69","nodeType":"YulFunctionCall","src":"7799:70:69"},"nativeSrc":"7799:70:69","nodeType":"YulExpressionStatement","src":"7799:70:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"7921:6:69","nodeType":"YulIdentifier","src":"7921:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"7934:9:69","nodeType":"YulIdentifier","src":"7934:9:69"},{"kind":"number","nativeSrc":"7945:2:69","nodeType":"YulLiteral","src":"7945:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"7930:3:69","nodeType":"YulIdentifier","src":"7930:3:69"},"nativeSrc":"7930:18:69","nodeType":"YulFunctionCall","src":"7930:18:69"}],"functionName":{"name":"abi_encode_t_uint32_to_t_uint32_fromStack","nativeSrc":"7879:41:69","nodeType":"YulIdentifier","src":"7879:41:69"},"nativeSrc":"7879:70:69","nodeType":"YulFunctionCall","src":"7879:70:69"},"nativeSrc":"7879:70:69","nodeType":"YulExpressionStatement","src":"7879:70:69"}]},"name":"abi_encode_tuple_t_uint224_t_uint32_t_uint32__to_t_uint224_t_uint32_t_uint32__fromStack_reversed","nativeSrc":"7522:434:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"7628:9:69","nodeType":"YulTypedName","src":"7628:9:69","type":""},{"name":"value2","nativeSrc":"7640:6:69","nodeType":"YulTypedName","src":"7640:6:69","type":""},{"name":"value1","nativeSrc":"7648:6:69","nodeType":"YulTypedName","src":"7648:6:69","type":""},{"name":"value0","nativeSrc":"7656:6:69","nodeType":"YulTypedName","src":"7656:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"7667:4:69","nodeType":"YulTypedName","src":"7667:4:69","type":""}],"src":"7522:434:69"},{"body":{"nativeSrc":"8045:391:69","nodeType":"YulBlock","src":"8045:391:69","statements":[{"body":{"nativeSrc":"8091:83:69","nodeType":"YulBlock","src":"8091:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"8093:77:69","nodeType":"YulIdentifier","src":"8093:77:69"},"nativeSrc":"8093:79:69","nodeType":"YulFunctionCall","src":"8093:79:69"},"nativeSrc":"8093:79:69","nodeType":"YulExpressionStatement","src":"8093:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"8066:7:69","nodeType":"YulIdentifier","src":"8066:7:69"},{"name":"headStart","nativeSrc":"8075:9:69","nodeType":"YulIdentifier","src":"8075:9:69"}],"functionName":{"name":"sub","nativeSrc":"8062:3:69","nodeType":"YulIdentifier","src":"8062:3:69"},"nativeSrc":"8062:23:69","nodeType":"YulFunctionCall","src":"8062:23:69"},{"kind":"number","nativeSrc":"8087:2:69","nodeType":"YulLiteral","src":"8087:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"8058:3:69","nodeType":"YulIdentifier","src":"8058:3:69"},"nativeSrc":"8058:32:69","nodeType":"YulFunctionCall","src":"8058:32:69"},"nativeSrc":"8055:119:69","nodeType":"YulIf","src":"8055:119:69"},{"nativeSrc":"8184:117:69","nodeType":"YulBlock","src":"8184:117:69","statements":[{"nativeSrc":"8199:15:69","nodeType":"YulVariableDeclaration","src":"8199:15:69","value":{"kind":"number","nativeSrc":"8213:1:69","nodeType":"YulLiteral","src":"8213:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"8203:6:69","nodeType":"YulTypedName","src":"8203:6:69","type":""}]},{"nativeSrc":"8228:63:69","nodeType":"YulAssignment","src":"8228:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8263:9:69","nodeType":"YulIdentifier","src":"8263:9:69"},{"name":"offset","nativeSrc":"8274:6:69","nodeType":"YulIdentifier","src":"8274:6:69"}],"functionName":{"name":"add","nativeSrc":"8259:3:69","nodeType":"YulIdentifier","src":"8259:3:69"},"nativeSrc":"8259:22:69","nodeType":"YulFunctionCall","src":"8259:22:69"},{"name":"dataEnd","nativeSrc":"8283:7:69","nodeType":"YulIdentifier","src":"8283:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"8238:20:69","nodeType":"YulIdentifier","src":"8238:20:69"},"nativeSrc":"8238:53:69","nodeType":"YulFunctionCall","src":"8238:53:69"},"variableNames":[{"name":"value0","nativeSrc":"8228:6:69","nodeType":"YulIdentifier","src":"8228:6:69"}]}]},{"nativeSrc":"8311:118:69","nodeType":"YulBlock","src":"8311:118:69","statements":[{"nativeSrc":"8326:16:69","nodeType":"YulVariableDeclaration","src":"8326:16:69","value":{"kind":"number","nativeSrc":"8340:2:69","nodeType":"YulLiteral","src":"8340:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"8330:6:69","nodeType":"YulTypedName","src":"8330:6:69","type":""}]},{"nativeSrc":"8356:63:69","nodeType":"YulAssignment","src":"8356:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8391:9:69","nodeType":"YulIdentifier","src":"8391:9:69"},{"name":"offset","nativeSrc":"8402:6:69","nodeType":"YulIdentifier","src":"8402:6:69"}],"functionName":{"name":"add","nativeSrc":"8387:3:69","nodeType":"YulIdentifier","src":"8387:3:69"},"nativeSrc":"8387:22:69","nodeType":"YulFunctionCall","src":"8387:22:69"},{"name":"dataEnd","nativeSrc":"8411:7:69","nodeType":"YulIdentifier","src":"8411:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"8366:20:69","nodeType":"YulIdentifier","src":"8366:20:69"},"nativeSrc":"8366:53:69","nodeType":"YulFunctionCall","src":"8366:53:69"},"variableNames":[{"name":"value1","nativeSrc":"8356:6:69","nodeType":"YulIdentifier","src":"8356:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nativeSrc":"7962:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8007:9:69","nodeType":"YulTypedName","src":"8007:9:69","type":""},{"name":"dataEnd","nativeSrc":"8018:7:69","nodeType":"YulTypedName","src":"8018:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"8030:6:69","nodeType":"YulTypedName","src":"8030:6:69","type":""},{"name":"value1","nativeSrc":"8038:6:69","nodeType":"YulTypedName","src":"8038:6:69","type":""}],"src":"7962:474:69"},{"body":{"nativeSrc":"8525:391:69","nodeType":"YulBlock","src":"8525:391:69","statements":[{"body":{"nativeSrc":"8571:83:69","nodeType":"YulBlock","src":"8571:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"8573:77:69","nodeType":"YulIdentifier","src":"8573:77:69"},"nativeSrc":"8573:79:69","nodeType":"YulFunctionCall","src":"8573:79:69"},"nativeSrc":"8573:79:69","nodeType":"YulExpressionStatement","src":"8573:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"8546:7:69","nodeType":"YulIdentifier","src":"8546:7:69"},{"name":"headStart","nativeSrc":"8555:9:69","nodeType":"YulIdentifier","src":"8555:9:69"}],"functionName":{"name":"sub","nativeSrc":"8542:3:69","nodeType":"YulIdentifier","src":"8542:3:69"},"nativeSrc":"8542:23:69","nodeType":"YulFunctionCall","src":"8542:23:69"},{"kind":"number","nativeSrc":"8567:2:69","nodeType":"YulLiteral","src":"8567:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"8538:3:69","nodeType":"YulIdentifier","src":"8538:3:69"},"nativeSrc":"8538:32:69","nodeType":"YulFunctionCall","src":"8538:32:69"},"nativeSrc":"8535:119:69","nodeType":"YulIf","src":"8535:119:69"},{"nativeSrc":"8664:117:69","nodeType":"YulBlock","src":"8664:117:69","statements":[{"nativeSrc":"8679:15:69","nodeType":"YulVariableDeclaration","src":"8679:15:69","value":{"kind":"number","nativeSrc":"8693:1:69","nodeType":"YulLiteral","src":"8693:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"8683:6:69","nodeType":"YulTypedName","src":"8683:6:69","type":""}]},{"nativeSrc":"8708:63:69","nodeType":"YulAssignment","src":"8708:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8743:9:69","nodeType":"YulIdentifier","src":"8743:9:69"},{"name":"offset","nativeSrc":"8754:6:69","nodeType":"YulIdentifier","src":"8754:6:69"}],"functionName":{"name":"add","nativeSrc":"8739:3:69","nodeType":"YulIdentifier","src":"8739:3:69"},"nativeSrc":"8739:22:69","nodeType":"YulFunctionCall","src":"8739:22:69"},{"name":"dataEnd","nativeSrc":"8763:7:69","nodeType":"YulIdentifier","src":"8763:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"8718:20:69","nodeType":"YulIdentifier","src":"8718:20:69"},"nativeSrc":"8718:53:69","nodeType":"YulFunctionCall","src":"8718:53:69"},"variableNames":[{"name":"value0","nativeSrc":"8708:6:69","nodeType":"YulIdentifier","src":"8708:6:69"}]}]},{"nativeSrc":"8791:118:69","nodeType":"YulBlock","src":"8791:118:69","statements":[{"nativeSrc":"8806:16:69","nodeType":"YulVariableDeclaration","src":"8806:16:69","value":{"kind":"number","nativeSrc":"8820:2:69","nodeType":"YulLiteral","src":"8820:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"8810:6:69","nodeType":"YulTypedName","src":"8810:6:69","type":""}]},{"nativeSrc":"8836:63:69","nodeType":"YulAssignment","src":"8836:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8871:9:69","nodeType":"YulIdentifier","src":"8871:9:69"},{"name":"offset","nativeSrc":"8882:6:69","nodeType":"YulIdentifier","src":"8882:6:69"}],"functionName":{"name":"add","nativeSrc":"8867:3:69","nodeType":"YulIdentifier","src":"8867:3:69"},"nativeSrc":"8867:22:69","nodeType":"YulFunctionCall","src":"8867:22:69"},{"name":"dataEnd","nativeSrc":"8891:7:69","nodeType":"YulIdentifier","src":"8891:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"8846:20:69","nodeType":"YulIdentifier","src":"8846:20:69"},"nativeSrc":"8846:53:69","nodeType":"YulFunctionCall","src":"8846:53:69"},"variableNames":[{"name":"value1","nativeSrc":"8836:6:69","nodeType":"YulIdentifier","src":"8836:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_address","nativeSrc":"8442:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8487:9:69","nodeType":"YulTypedName","src":"8487:9:69","type":""},{"name":"dataEnd","nativeSrc":"8498:7:69","nodeType":"YulTypedName","src":"8498:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"8510:6:69","nodeType":"YulTypedName","src":"8510:6:69","type":""},{"name":"value1","nativeSrc":"8518:6:69","nodeType":"YulTypedName","src":"8518:6:69","type":""}],"src":"8442:474:69"},{"body":{"nativeSrc":"9011:28:69","nodeType":"YulBlock","src":"9011:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"9028:1:69","nodeType":"YulLiteral","src":"9028:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"9031:1:69","nodeType":"YulLiteral","src":"9031:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"9021:6:69","nodeType":"YulIdentifier","src":"9021:6:69"},"nativeSrc":"9021:12:69","nodeType":"YulFunctionCall","src":"9021:12:69"},"nativeSrc":"9021:12:69","nodeType":"YulExpressionStatement","src":"9021:12:69"}]},"name":"revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490","nativeSrc":"8922:117:69","nodeType":"YulFunctionDefinition","src":"8922:117:69"},{"body":{"nativeSrc":"9176:478:69","nodeType":"YulBlock","src":"9176:478:69","statements":[{"body":{"nativeSrc":"9225:83:69","nodeType":"YulBlock","src":"9225:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"9227:77:69","nodeType":"YulIdentifier","src":"9227:77:69"},"nativeSrc":"9227:79:69","nodeType":"YulFunctionCall","src":"9227:79:69"},"nativeSrc":"9227:79:69","nodeType":"YulExpressionStatement","src":"9227:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"9204:6:69","nodeType":"YulIdentifier","src":"9204:6:69"},{"kind":"number","nativeSrc":"9212:4:69","nodeType":"YulLiteral","src":"9212:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"9200:3:69","nodeType":"YulIdentifier","src":"9200:3:69"},"nativeSrc":"9200:17:69","nodeType":"YulFunctionCall","src":"9200:17:69"},{"name":"end","nativeSrc":"9219:3:69","nodeType":"YulIdentifier","src":"9219:3:69"}],"functionName":{"name":"slt","nativeSrc":"9196:3:69","nodeType":"YulIdentifier","src":"9196:3:69"},"nativeSrc":"9196:27:69","nodeType":"YulFunctionCall","src":"9196:27:69"}],"functionName":{"name":"iszero","nativeSrc":"9189:6:69","nodeType":"YulIdentifier","src":"9189:6:69"},"nativeSrc":"9189:35:69","nodeType":"YulFunctionCall","src":"9189:35:69"},"nativeSrc":"9186:122:69","nodeType":"YulIf","src":"9186:122:69"},{"nativeSrc":"9317:30:69","nodeType":"YulAssignment","src":"9317:30:69","value":{"arguments":[{"name":"offset","nativeSrc":"9340:6:69","nodeType":"YulIdentifier","src":"9340:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"9327:12:69","nodeType":"YulIdentifier","src":"9327:12:69"},"nativeSrc":"9327:20:69","nodeType":"YulFunctionCall","src":"9327:20:69"},"variableNames":[{"name":"length","nativeSrc":"9317:6:69","nodeType":"YulIdentifier","src":"9317:6:69"}]},{"body":{"nativeSrc":"9390:83:69","nodeType":"YulBlock","src":"9390:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490","nativeSrc":"9392:77:69","nodeType":"YulIdentifier","src":"9392:77:69"},"nativeSrc":"9392:79:69","nodeType":"YulFunctionCall","src":"9392:79:69"},"nativeSrc":"9392:79:69","nodeType":"YulExpressionStatement","src":"9392:79:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"9362:6:69","nodeType":"YulIdentifier","src":"9362:6:69"},{"kind":"number","nativeSrc":"9370:18:69","nodeType":"YulLiteral","src":"9370:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"9359:2:69","nodeType":"YulIdentifier","src":"9359:2:69"},"nativeSrc":"9359:30:69","nodeType":"YulFunctionCall","src":"9359:30:69"},"nativeSrc":"9356:117:69","nodeType":"YulIf","src":"9356:117:69"},{"nativeSrc":"9482:29:69","nodeType":"YulAssignment","src":"9482:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"9498:6:69","nodeType":"YulIdentifier","src":"9498:6:69"},{"kind":"number","nativeSrc":"9506:4:69","nodeType":"YulLiteral","src":"9506:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"9494:3:69","nodeType":"YulIdentifier","src":"9494:3:69"},"nativeSrc":"9494:17:69","nodeType":"YulFunctionCall","src":"9494:17:69"},"variableNames":[{"name":"arrayPos","nativeSrc":"9482:8:69","nodeType":"YulIdentifier","src":"9482:8:69"}]},{"body":{"nativeSrc":"9565:83:69","nodeType":"YulBlock","src":"9565:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"9567:77:69","nodeType":"YulIdentifier","src":"9567:77:69"},"nativeSrc":"9567:79:69","nodeType":"YulFunctionCall","src":"9567:79:69"},"nativeSrc":"9567:79:69","nodeType":"YulExpressionStatement","src":"9567:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"arrayPos","nativeSrc":"9530:8:69","nodeType":"YulIdentifier","src":"9530:8:69"},{"arguments":[{"name":"length","nativeSrc":"9544:6:69","nodeType":"YulIdentifier","src":"9544:6:69"},{"kind":"number","nativeSrc":"9552:4:69","nodeType":"YulLiteral","src":"9552:4:69","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"9540:3:69","nodeType":"YulIdentifier","src":"9540:3:69"},"nativeSrc":"9540:17:69","nodeType":"YulFunctionCall","src":"9540:17:69"}],"functionName":{"name":"add","nativeSrc":"9526:3:69","nodeType":"YulIdentifier","src":"9526:3:69"},"nativeSrc":"9526:32:69","nodeType":"YulFunctionCall","src":"9526:32:69"},{"name":"end","nativeSrc":"9560:3:69","nodeType":"YulIdentifier","src":"9560:3:69"}],"functionName":{"name":"gt","nativeSrc":"9523:2:69","nodeType":"YulIdentifier","src":"9523:2:69"},"nativeSrc":"9523:41:69","nodeType":"YulFunctionCall","src":"9523:41:69"},"nativeSrc":"9520:128:69","nodeType":"YulIf","src":"9520:128:69"}]},"name":"abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","nativeSrc":"9070:584:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"9143:6:69","nodeType":"YulTypedName","src":"9143:6:69","type":""},{"name":"end","nativeSrc":"9151:3:69","nodeType":"YulTypedName","src":"9151:3:69","type":""}],"returnVariables":[{"name":"arrayPos","nativeSrc":"9159:8:69","nodeType":"YulTypedName","src":"9159:8:69","type":""},{"name":"length","nativeSrc":"9169:6:69","nodeType":"YulTypedName","src":"9169:6:69","type":""}],"src":"9070:584:69"},{"body":{"nativeSrc":"9767:478:69","nodeType":"YulBlock","src":"9767:478:69","statements":[{"body":{"nativeSrc":"9816:83:69","nodeType":"YulBlock","src":"9816:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"9818:77:69","nodeType":"YulIdentifier","src":"9818:77:69"},"nativeSrc":"9818:79:69","nodeType":"YulFunctionCall","src":"9818:79:69"},"nativeSrc":"9818:79:69","nodeType":"YulExpressionStatement","src":"9818:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"9795:6:69","nodeType":"YulIdentifier","src":"9795:6:69"},{"kind":"number","nativeSrc":"9803:4:69","nodeType":"YulLiteral","src":"9803:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"9791:3:69","nodeType":"YulIdentifier","src":"9791:3:69"},"nativeSrc":"9791:17:69","nodeType":"YulFunctionCall","src":"9791:17:69"},{"name":"end","nativeSrc":"9810:3:69","nodeType":"YulIdentifier","src":"9810:3:69"}],"functionName":{"name":"slt","nativeSrc":"9787:3:69","nodeType":"YulIdentifier","src":"9787:3:69"},"nativeSrc":"9787:27:69","nodeType":"YulFunctionCall","src":"9787:27:69"}],"functionName":{"name":"iszero","nativeSrc":"9780:6:69","nodeType":"YulIdentifier","src":"9780:6:69"},"nativeSrc":"9780:35:69","nodeType":"YulFunctionCall","src":"9780:35:69"},"nativeSrc":"9777:122:69","nodeType":"YulIf","src":"9777:122:69"},{"nativeSrc":"9908:30:69","nodeType":"YulAssignment","src":"9908:30:69","value":{"arguments":[{"name":"offset","nativeSrc":"9931:6:69","nodeType":"YulIdentifier","src":"9931:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"9918:12:69","nodeType":"YulIdentifier","src":"9918:12:69"},"nativeSrc":"9918:20:69","nodeType":"YulFunctionCall","src":"9918:20:69"},"variableNames":[{"name":"length","nativeSrc":"9908:6:69","nodeType":"YulIdentifier","src":"9908:6:69"}]},{"body":{"nativeSrc":"9981:83:69","nodeType":"YulBlock","src":"9981:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490","nativeSrc":"9983:77:69","nodeType":"YulIdentifier","src":"9983:77:69"},"nativeSrc":"9983:79:69","nodeType":"YulFunctionCall","src":"9983:79:69"},"nativeSrc":"9983:79:69","nodeType":"YulExpressionStatement","src":"9983:79:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"9953:6:69","nodeType":"YulIdentifier","src":"9953:6:69"},{"kind":"number","nativeSrc":"9961:18:69","nodeType":"YulLiteral","src":"9961:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"9950:2:69","nodeType":"YulIdentifier","src":"9950:2:69"},"nativeSrc":"9950:30:69","nodeType":"YulFunctionCall","src":"9950:30:69"},"nativeSrc":"9947:117:69","nodeType":"YulIf","src":"9947:117:69"},{"nativeSrc":"10073:29:69","nodeType":"YulAssignment","src":"10073:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"10089:6:69","nodeType":"YulIdentifier","src":"10089:6:69"},{"kind":"number","nativeSrc":"10097:4:69","nodeType":"YulLiteral","src":"10097:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"10085:3:69","nodeType":"YulIdentifier","src":"10085:3:69"},"nativeSrc":"10085:17:69","nodeType":"YulFunctionCall","src":"10085:17:69"},"variableNames":[{"name":"arrayPos","nativeSrc":"10073:8:69","nodeType":"YulIdentifier","src":"10073:8:69"}]},{"body":{"nativeSrc":"10156:83:69","nodeType":"YulBlock","src":"10156:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"10158:77:69","nodeType":"YulIdentifier","src":"10158:77:69"},"nativeSrc":"10158:79:69","nodeType":"YulFunctionCall","src":"10158:79:69"},"nativeSrc":"10158:79:69","nodeType":"YulExpressionStatement","src":"10158:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"arrayPos","nativeSrc":"10121:8:69","nodeType":"YulIdentifier","src":"10121:8:69"},{"arguments":[{"name":"length","nativeSrc":"10135:6:69","nodeType":"YulIdentifier","src":"10135:6:69"},{"kind":"number","nativeSrc":"10143:4:69","nodeType":"YulLiteral","src":"10143:4:69","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"10131:3:69","nodeType":"YulIdentifier","src":"10131:3:69"},"nativeSrc":"10131:17:69","nodeType":"YulFunctionCall","src":"10131:17:69"}],"functionName":{"name":"add","nativeSrc":"10117:3:69","nodeType":"YulIdentifier","src":"10117:3:69"},"nativeSrc":"10117:32:69","nodeType":"YulFunctionCall","src":"10117:32:69"},{"name":"end","nativeSrc":"10151:3:69","nodeType":"YulIdentifier","src":"10151:3:69"}],"functionName":{"name":"gt","nativeSrc":"10114:2:69","nodeType":"YulIdentifier","src":"10114:2:69"},"nativeSrc":"10114:41:69","nodeType":"YulFunctionCall","src":"10114:41:69"},"nativeSrc":"10111:128:69","nodeType":"YulIf","src":"10111:128:69"}]},"name":"abi_decode_t_array$_t_uint256_$dyn_calldata_ptr","nativeSrc":"9677:568:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"9734:6:69","nodeType":"YulTypedName","src":"9734:6:69","type":""},{"name":"end","nativeSrc":"9742:3:69","nodeType":"YulTypedName","src":"9742:3:69","type":""}],"returnVariables":[{"name":"arrayPos","nativeSrc":"9750:8:69","nodeType":"YulTypedName","src":"9750:8:69","type":""},{"name":"length","nativeSrc":"9760:6:69","nodeType":"YulTypedName","src":"9760:6:69","type":""}],"src":"9677:568:69"},{"body":{"nativeSrc":"10472:1120:69","nodeType":"YulBlock","src":"10472:1120:69","statements":[{"body":{"nativeSrc":"10518:83:69","nodeType":"YulBlock","src":"10518:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"10520:77:69","nodeType":"YulIdentifier","src":"10520:77:69"},"nativeSrc":"10520:79:69","nodeType":"YulFunctionCall","src":"10520:79:69"},"nativeSrc":"10520:79:69","nodeType":"YulExpressionStatement","src":"10520:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"10493:7:69","nodeType":"YulIdentifier","src":"10493:7:69"},{"name":"headStart","nativeSrc":"10502:9:69","nodeType":"YulIdentifier","src":"10502:9:69"}],"functionName":{"name":"sub","nativeSrc":"10489:3:69","nodeType":"YulIdentifier","src":"10489:3:69"},"nativeSrc":"10489:23:69","nodeType":"YulFunctionCall","src":"10489:23:69"},{"kind":"number","nativeSrc":"10514:2:69","nodeType":"YulLiteral","src":"10514:2:69","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"10485:3:69","nodeType":"YulIdentifier","src":"10485:3:69"},"nativeSrc":"10485:32:69","nodeType":"YulFunctionCall","src":"10485:32:69"},"nativeSrc":"10482:119:69","nodeType":"YulIf","src":"10482:119:69"},{"nativeSrc":"10611:328:69","nodeType":"YulBlock","src":"10611:328:69","statements":[{"nativeSrc":"10626:45:69","nodeType":"YulVariableDeclaration","src":"10626:45:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10657:9:69","nodeType":"YulIdentifier","src":"10657:9:69"},{"kind":"number","nativeSrc":"10668:1:69","nodeType":"YulLiteral","src":"10668:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"10653:3:69","nodeType":"YulIdentifier","src":"10653:3:69"},"nativeSrc":"10653:17:69","nodeType":"YulFunctionCall","src":"10653:17:69"}],"functionName":{"name":"calldataload","nativeSrc":"10640:12:69","nodeType":"YulIdentifier","src":"10640:12:69"},"nativeSrc":"10640:31:69","nodeType":"YulFunctionCall","src":"10640:31:69"},"variables":[{"name":"offset","nativeSrc":"10630:6:69","nodeType":"YulTypedName","src":"10630:6:69","type":""}]},{"body":{"nativeSrc":"10718:83:69","nodeType":"YulBlock","src":"10718:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"10720:77:69","nodeType":"YulIdentifier","src":"10720:77:69"},"nativeSrc":"10720:79:69","nodeType":"YulFunctionCall","src":"10720:79:69"},"nativeSrc":"10720:79:69","nodeType":"YulExpressionStatement","src":"10720:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"10690:6:69","nodeType":"YulIdentifier","src":"10690:6:69"},{"kind":"number","nativeSrc":"10698:18:69","nodeType":"YulLiteral","src":"10698:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"10687:2:69","nodeType":"YulIdentifier","src":"10687:2:69"},"nativeSrc":"10687:30:69","nodeType":"YulFunctionCall","src":"10687:30:69"},"nativeSrc":"10684:117:69","nodeType":"YulIf","src":"10684:117:69"},{"nativeSrc":"10815:114:69","nodeType":"YulAssignment","src":"10815:114:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10901:9:69","nodeType":"YulIdentifier","src":"10901:9:69"},{"name":"offset","nativeSrc":"10912:6:69","nodeType":"YulIdentifier","src":"10912:6:69"}],"functionName":{"name":"add","nativeSrc":"10897:3:69","nodeType":"YulIdentifier","src":"10897:3:69"},"nativeSrc":"10897:22:69","nodeType":"YulFunctionCall","src":"10897:22:69"},{"name":"dataEnd","nativeSrc":"10921:7:69","nodeType":"YulIdentifier","src":"10921:7:69"}],"functionName":{"name":"abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","nativeSrc":"10833:63:69","nodeType":"YulIdentifier","src":"10833:63:69"},"nativeSrc":"10833:96:69","nodeType":"YulFunctionCall","src":"10833:96:69"},"variableNames":[{"name":"value0","nativeSrc":"10815:6:69","nodeType":"YulIdentifier","src":"10815:6:69"},{"name":"value1","nativeSrc":"10823:6:69","nodeType":"YulIdentifier","src":"10823:6:69"}]}]},{"nativeSrc":"10949:313:69","nodeType":"YulBlock","src":"10949:313:69","statements":[{"nativeSrc":"10964:46:69","nodeType":"YulVariableDeclaration","src":"10964:46:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10995:9:69","nodeType":"YulIdentifier","src":"10995:9:69"},{"kind":"number","nativeSrc":"11006:2:69","nodeType":"YulLiteral","src":"11006:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"10991:3:69","nodeType":"YulIdentifier","src":"10991:3:69"},"nativeSrc":"10991:18:69","nodeType":"YulFunctionCall","src":"10991:18:69"}],"functionName":{"name":"calldataload","nativeSrc":"10978:12:69","nodeType":"YulIdentifier","src":"10978:12:69"},"nativeSrc":"10978:32:69","nodeType":"YulFunctionCall","src":"10978:32:69"},"variables":[{"name":"offset","nativeSrc":"10968:6:69","nodeType":"YulTypedName","src":"10968:6:69","type":""}]},{"body":{"nativeSrc":"11057:83:69","nodeType":"YulBlock","src":"11057:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"11059:77:69","nodeType":"YulIdentifier","src":"11059:77:69"},"nativeSrc":"11059:79:69","nodeType":"YulFunctionCall","src":"11059:79:69"},"nativeSrc":"11059:79:69","nodeType":"YulExpressionStatement","src":"11059:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"11029:6:69","nodeType":"YulIdentifier","src":"11029:6:69"},{"kind":"number","nativeSrc":"11037:18:69","nodeType":"YulLiteral","src":"11037:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"11026:2:69","nodeType":"YulIdentifier","src":"11026:2:69"},"nativeSrc":"11026:30:69","nodeType":"YulFunctionCall","src":"11026:30:69"},"nativeSrc":"11023:117:69","nodeType":"YulIf","src":"11023:117:69"},{"nativeSrc":"11154:98:69","nodeType":"YulAssignment","src":"11154:98:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"11224:9:69","nodeType":"YulIdentifier","src":"11224:9:69"},{"name":"offset","nativeSrc":"11235:6:69","nodeType":"YulIdentifier","src":"11235:6:69"}],"functionName":{"name":"add","nativeSrc":"11220:3:69","nodeType":"YulIdentifier","src":"11220:3:69"},"nativeSrc":"11220:22:69","nodeType":"YulFunctionCall","src":"11220:22:69"},{"name":"dataEnd","nativeSrc":"11244:7:69","nodeType":"YulIdentifier","src":"11244:7:69"}],"functionName":{"name":"abi_decode_t_array$_t_uint256_$dyn_calldata_ptr","nativeSrc":"11172:47:69","nodeType":"YulIdentifier","src":"11172:47:69"},"nativeSrc":"11172:80:69","nodeType":"YulFunctionCall","src":"11172:80:69"},"variableNames":[{"name":"value2","nativeSrc":"11154:6:69","nodeType":"YulIdentifier","src":"11154:6:69"},{"name":"value3","nativeSrc":"11162:6:69","nodeType":"YulIdentifier","src":"11162:6:69"}]}]},{"nativeSrc":"11272:313:69","nodeType":"YulBlock","src":"11272:313:69","statements":[{"nativeSrc":"11287:46:69","nodeType":"YulVariableDeclaration","src":"11287:46:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"11318:9:69","nodeType":"YulIdentifier","src":"11318:9:69"},{"kind":"number","nativeSrc":"11329:2:69","nodeType":"YulLiteral","src":"11329:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"11314:3:69","nodeType":"YulIdentifier","src":"11314:3:69"},"nativeSrc":"11314:18:69","nodeType":"YulFunctionCall","src":"11314:18:69"}],"functionName":{"name":"calldataload","nativeSrc":"11301:12:69","nodeType":"YulIdentifier","src":"11301:12:69"},"nativeSrc":"11301:32:69","nodeType":"YulFunctionCall","src":"11301:32:69"},"variables":[{"name":"offset","nativeSrc":"11291:6:69","nodeType":"YulTypedName","src":"11291:6:69","type":""}]},{"body":{"nativeSrc":"11380:83:69","nodeType":"YulBlock","src":"11380:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"11382:77:69","nodeType":"YulIdentifier","src":"11382:77:69"},"nativeSrc":"11382:79:69","nodeType":"YulFunctionCall","src":"11382:79:69"},"nativeSrc":"11382:79:69","nodeType":"YulExpressionStatement","src":"11382:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"11352:6:69","nodeType":"YulIdentifier","src":"11352:6:69"},{"kind":"number","nativeSrc":"11360:18:69","nodeType":"YulLiteral","src":"11360:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"11349:2:69","nodeType":"YulIdentifier","src":"11349:2:69"},"nativeSrc":"11349:30:69","nodeType":"YulFunctionCall","src":"11349:30:69"},"nativeSrc":"11346:117:69","nodeType":"YulIf","src":"11346:117:69"},{"nativeSrc":"11477:98:69","nodeType":"YulAssignment","src":"11477:98:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"11547:9:69","nodeType":"YulIdentifier","src":"11547:9:69"},{"name":"offset","nativeSrc":"11558:6:69","nodeType":"YulIdentifier","src":"11558:6:69"}],"functionName":{"name":"add","nativeSrc":"11543:3:69","nodeType":"YulIdentifier","src":"11543:3:69"},"nativeSrc":"11543:22:69","nodeType":"YulFunctionCall","src":"11543:22:69"},{"name":"dataEnd","nativeSrc":"11567:7:69","nodeType":"YulIdentifier","src":"11567:7:69"}],"functionName":{"name":"abi_decode_t_array$_t_uint256_$dyn_calldata_ptr","nativeSrc":"11495:47:69","nodeType":"YulIdentifier","src":"11495:47:69"},"nativeSrc":"11495:80:69","nodeType":"YulFunctionCall","src":"11495:80:69"},"variableNames":[{"name":"value4","nativeSrc":"11477:6:69","nodeType":"YulIdentifier","src":"11477:6:69"},{"name":"value5","nativeSrc":"11485:6:69","nodeType":"YulIdentifier","src":"11485:6:69"}]}]}]},"name":"abi_decode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptr","nativeSrc":"10251:1341:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"10402:9:69","nodeType":"YulTypedName","src":"10402:9:69","type":""},{"name":"dataEnd","nativeSrc":"10413:7:69","nodeType":"YulTypedName","src":"10413:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"10425:6:69","nodeType":"YulTypedName","src":"10425:6:69","type":""},{"name":"value1","nativeSrc":"10433:6:69","nodeType":"YulTypedName","src":"10433:6:69","type":""},{"name":"value2","nativeSrc":"10441:6:69","nodeType":"YulTypedName","src":"10441:6:69","type":""},{"name":"value3","nativeSrc":"10449:6:69","nodeType":"YulTypedName","src":"10449:6:69","type":""},{"name":"value4","nativeSrc":"10457:6:69","nodeType":"YulTypedName","src":"10457:6:69","type":""},{"name":"value5","nativeSrc":"10465:6:69","nodeType":"YulTypedName","src":"10465:6:69","type":""}],"src":"10251:1341:69"},{"body":{"nativeSrc":"11719:540:69","nodeType":"YulBlock","src":"11719:540:69","statements":[{"body":{"nativeSrc":"11765:83:69","nodeType":"YulBlock","src":"11765:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"11767:77:69","nodeType":"YulIdentifier","src":"11767:77:69"},"nativeSrc":"11767:79:69","nodeType":"YulFunctionCall","src":"11767:79:69"},"nativeSrc":"11767:79:69","nodeType":"YulExpressionStatement","src":"11767:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"11740:7:69","nodeType":"YulIdentifier","src":"11740:7:69"},{"name":"headStart","nativeSrc":"11749:9:69","nodeType":"YulIdentifier","src":"11749:9:69"}],"functionName":{"name":"sub","nativeSrc":"11736:3:69","nodeType":"YulIdentifier","src":"11736:3:69"},"nativeSrc":"11736:23:69","nodeType":"YulFunctionCall","src":"11736:23:69"},{"kind":"number","nativeSrc":"11761:2:69","nodeType":"YulLiteral","src":"11761:2:69","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"11732:3:69","nodeType":"YulIdentifier","src":"11732:3:69"},"nativeSrc":"11732:32:69","nodeType":"YulFunctionCall","src":"11732:32:69"},"nativeSrc":"11729:119:69","nodeType":"YulIf","src":"11729:119:69"},{"nativeSrc":"11858:117:69","nodeType":"YulBlock","src":"11858:117:69","statements":[{"nativeSrc":"11873:15:69","nodeType":"YulVariableDeclaration","src":"11873:15:69","value":{"kind":"number","nativeSrc":"11887:1:69","nodeType":"YulLiteral","src":"11887:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"11877:6:69","nodeType":"YulTypedName","src":"11877:6:69","type":""}]},{"nativeSrc":"11902:63:69","nodeType":"YulAssignment","src":"11902:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"11937:9:69","nodeType":"YulIdentifier","src":"11937:9:69"},{"name":"offset","nativeSrc":"11948:6:69","nodeType":"YulIdentifier","src":"11948:6:69"}],"functionName":{"name":"add","nativeSrc":"11933:3:69","nodeType":"YulIdentifier","src":"11933:3:69"},"nativeSrc":"11933:22:69","nodeType":"YulFunctionCall","src":"11933:22:69"},{"name":"dataEnd","nativeSrc":"11957:7:69","nodeType":"YulIdentifier","src":"11957:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"11912:20:69","nodeType":"YulIdentifier","src":"11912:20:69"},"nativeSrc":"11912:53:69","nodeType":"YulFunctionCall","src":"11912:53:69"},"variableNames":[{"name":"value0","nativeSrc":"11902:6:69","nodeType":"YulIdentifier","src":"11902:6:69"}]}]},{"nativeSrc":"11985:118:69","nodeType":"YulBlock","src":"11985:118:69","statements":[{"nativeSrc":"12000:16:69","nodeType":"YulVariableDeclaration","src":"12000:16:69","value":{"kind":"number","nativeSrc":"12014:2:69","nodeType":"YulLiteral","src":"12014:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"12004:6:69","nodeType":"YulTypedName","src":"12004:6:69","type":""}]},{"nativeSrc":"12030:63:69","nodeType":"YulAssignment","src":"12030:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"12065:9:69","nodeType":"YulIdentifier","src":"12065:9:69"},{"name":"offset","nativeSrc":"12076:6:69","nodeType":"YulIdentifier","src":"12076:6:69"}],"functionName":{"name":"add","nativeSrc":"12061:3:69","nodeType":"YulIdentifier","src":"12061:3:69"},"nativeSrc":"12061:22:69","nodeType":"YulFunctionCall","src":"12061:22:69"},{"name":"dataEnd","nativeSrc":"12085:7:69","nodeType":"YulIdentifier","src":"12085:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"12040:20:69","nodeType":"YulIdentifier","src":"12040:20:69"},"nativeSrc":"12040:53:69","nodeType":"YulFunctionCall","src":"12040:53:69"},"variableNames":[{"name":"value1","nativeSrc":"12030:6:69","nodeType":"YulIdentifier","src":"12030:6:69"}]}]},{"nativeSrc":"12113:139:69","nodeType":"YulBlock","src":"12113:139:69","statements":[{"nativeSrc":"12128:16:69","nodeType":"YulVariableDeclaration","src":"12128:16:69","value":{"kind":"number","nativeSrc":"12142:2:69","nodeType":"YulLiteral","src":"12142:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"12132:6:69","nodeType":"YulTypedName","src":"12132:6:69","type":""}]},{"nativeSrc":"12158:84:69","nodeType":"YulAssignment","src":"12158:84:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"12214:9:69","nodeType":"YulIdentifier","src":"12214:9:69"},{"name":"offset","nativeSrc":"12225:6:69","nodeType":"YulIdentifier","src":"12225:6:69"}],"functionName":{"name":"add","nativeSrc":"12210:3:69","nodeType":"YulIdentifier","src":"12210:3:69"},"nativeSrc":"12210:22:69","nodeType":"YulFunctionCall","src":"12210:22:69"},{"name":"dataEnd","nativeSrc":"12234:7:69","nodeType":"YulIdentifier","src":"12234:7:69"}],"functionName":{"name":"abi_decode_t_struct$_Exp_$9645_memory_ptr","nativeSrc":"12168:41:69","nodeType":"YulIdentifier","src":"12168:41:69"},"nativeSrc":"12168:74:69","nodeType":"YulFunctionCall","src":"12168:74:69"},"variableNames":[{"name":"value2","nativeSrc":"12158:6:69","nodeType":"YulIdentifier","src":"12158:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_addresst_struct$_Exp_$9645_memory_ptr","nativeSrc":"11598:661:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"11673:9:69","nodeType":"YulTypedName","src":"11673:9:69","type":""},{"name":"dataEnd","nativeSrc":"11684:7:69","nodeType":"YulTypedName","src":"11684:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"11696:6:69","nodeType":"YulTypedName","src":"11696:6:69","type":""},{"name":"value1","nativeSrc":"11704:6:69","nodeType":"YulTypedName","src":"11704:6:69","type":""},{"name":"value2","nativeSrc":"11712:6:69","nodeType":"YulTypedName","src":"11712:6:69","type":""}],"src":"11598:661:69"},{"body":{"nativeSrc":"12331:263:69","nodeType":"YulBlock","src":"12331:263:69","statements":[{"body":{"nativeSrc":"12377:83:69","nodeType":"YulBlock","src":"12377:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"12379:77:69","nodeType":"YulIdentifier","src":"12379:77:69"},"nativeSrc":"12379:79:69","nodeType":"YulFunctionCall","src":"12379:79:69"},"nativeSrc":"12379:79:69","nodeType":"YulExpressionStatement","src":"12379:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"12352:7:69","nodeType":"YulIdentifier","src":"12352:7:69"},{"name":"headStart","nativeSrc":"12361:9:69","nodeType":"YulIdentifier","src":"12361:9:69"}],"functionName":{"name":"sub","nativeSrc":"12348:3:69","nodeType":"YulIdentifier","src":"12348:3:69"},"nativeSrc":"12348:23:69","nodeType":"YulFunctionCall","src":"12348:23:69"},{"kind":"number","nativeSrc":"12373:2:69","nodeType":"YulLiteral","src":"12373:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"12344:3:69","nodeType":"YulIdentifier","src":"12344:3:69"},"nativeSrc":"12344:32:69","nodeType":"YulFunctionCall","src":"12344:32:69"},"nativeSrc":"12341:119:69","nodeType":"YulIf","src":"12341:119:69"},{"nativeSrc":"12470:117:69","nodeType":"YulBlock","src":"12470:117:69","statements":[{"nativeSrc":"12485:15:69","nodeType":"YulVariableDeclaration","src":"12485:15:69","value":{"kind":"number","nativeSrc":"12499:1:69","nodeType":"YulLiteral","src":"12499:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"12489:6:69","nodeType":"YulTypedName","src":"12489:6:69","type":""}]},{"nativeSrc":"12514:63:69","nodeType":"YulAssignment","src":"12514:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"12549:9:69","nodeType":"YulIdentifier","src":"12549:9:69"},{"name":"offset","nativeSrc":"12560:6:69","nodeType":"YulIdentifier","src":"12560:6:69"}],"functionName":{"name":"add","nativeSrc":"12545:3:69","nodeType":"YulIdentifier","src":"12545:3:69"},"nativeSrc":"12545:22:69","nodeType":"YulFunctionCall","src":"12545:22:69"},{"name":"dataEnd","nativeSrc":"12569:7:69","nodeType":"YulIdentifier","src":"12569:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"12524:20:69","nodeType":"YulIdentifier","src":"12524:20:69"},"nativeSrc":"12524:53:69","nodeType":"YulFunctionCall","src":"12524:53:69"},"variableNames":[{"name":"value0","nativeSrc":"12514:6:69","nodeType":"YulIdentifier","src":"12514:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint256","nativeSrc":"12265:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"12301:9:69","nodeType":"YulTypedName","src":"12301:9:69","type":""},{"name":"dataEnd","nativeSrc":"12312:7:69","nodeType":"YulTypedName","src":"12312:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"12324:6:69","nodeType":"YulTypedName","src":"12324:6:69","type":""}],"src":"12265:329:69"},{"body":{"nativeSrc":"12754:288:69","nodeType":"YulBlock","src":"12754:288:69","statements":[{"nativeSrc":"12764:26:69","nodeType":"YulAssignment","src":"12764:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"12776:9:69","nodeType":"YulIdentifier","src":"12776:9:69"},{"kind":"number","nativeSrc":"12787:2:69","nodeType":"YulLiteral","src":"12787:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"12772:3:69","nodeType":"YulIdentifier","src":"12772:3:69"},"nativeSrc":"12772:18:69","nodeType":"YulFunctionCall","src":"12772:18:69"},"variableNames":[{"name":"tail","nativeSrc":"12764:4:69","nodeType":"YulIdentifier","src":"12764:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"12844:6:69","nodeType":"YulIdentifier","src":"12844:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"12857:9:69","nodeType":"YulIdentifier","src":"12857:9:69"},{"kind":"number","nativeSrc":"12868:1:69","nodeType":"YulLiteral","src":"12868:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"12853:3:69","nodeType":"YulIdentifier","src":"12853:3:69"},"nativeSrc":"12853:17:69","nodeType":"YulFunctionCall","src":"12853:17:69"}],"functionName":{"name":"abi_encode_t_uint224_to_t_uint224_fromStack","nativeSrc":"12800:43:69","nodeType":"YulIdentifier","src":"12800:43:69"},"nativeSrc":"12800:71:69","nodeType":"YulFunctionCall","src":"12800:71:69"},"nativeSrc":"12800:71:69","nodeType":"YulExpressionStatement","src":"12800:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"12925:6:69","nodeType":"YulIdentifier","src":"12925:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"12938:9:69","nodeType":"YulIdentifier","src":"12938:9:69"},{"kind":"number","nativeSrc":"12949:2:69","nodeType":"YulLiteral","src":"12949:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"12934:3:69","nodeType":"YulIdentifier","src":"12934:3:69"},"nativeSrc":"12934:18:69","nodeType":"YulFunctionCall","src":"12934:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"12881:43:69","nodeType":"YulIdentifier","src":"12881:43:69"},"nativeSrc":"12881:72:69","nodeType":"YulFunctionCall","src":"12881:72:69"},"nativeSrc":"12881:72:69","nodeType":"YulExpressionStatement","src":"12881:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"13007:6:69","nodeType":"YulIdentifier","src":"13007:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"13020:9:69","nodeType":"YulIdentifier","src":"13020:9:69"},{"kind":"number","nativeSrc":"13031:2:69","nodeType":"YulLiteral","src":"13031:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"13016:3:69","nodeType":"YulIdentifier","src":"13016:3:69"},"nativeSrc":"13016:18:69","nodeType":"YulFunctionCall","src":"13016:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"12963:43:69","nodeType":"YulIdentifier","src":"12963:43:69"},"nativeSrc":"12963:72:69","nodeType":"YulFunctionCall","src":"12963:72:69"},"nativeSrc":"12963:72:69","nodeType":"YulExpressionStatement","src":"12963:72:69"}]},"name":"abi_encode_tuple_t_uint224_t_uint256_t_uint256__to_t_uint224_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"12600:442:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"12710:9:69","nodeType":"YulTypedName","src":"12710:9:69","type":""},{"name":"value2","nativeSrc":"12722:6:69","nodeType":"YulTypedName","src":"12722:6:69","type":""},{"name":"value1","nativeSrc":"12730:6:69","nodeType":"YulTypedName","src":"12730:6:69","type":""},{"name":"value0","nativeSrc":"12738:6:69","nodeType":"YulTypedName","src":"12738:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"12749:4:69","nodeType":"YulTypedName","src":"12749:4:69","type":""}],"src":"12600:442:69"},{"body":{"nativeSrc":"13153:478:69","nodeType":"YulBlock","src":"13153:478:69","statements":[{"body":{"nativeSrc":"13202:83:69","nodeType":"YulBlock","src":"13202:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"13204:77:69","nodeType":"YulIdentifier","src":"13204:77:69"},"nativeSrc":"13204:79:69","nodeType":"YulFunctionCall","src":"13204:79:69"},"nativeSrc":"13204:79:69","nodeType":"YulExpressionStatement","src":"13204:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"13181:6:69","nodeType":"YulIdentifier","src":"13181:6:69"},{"kind":"number","nativeSrc":"13189:4:69","nodeType":"YulLiteral","src":"13189:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"13177:3:69","nodeType":"YulIdentifier","src":"13177:3:69"},"nativeSrc":"13177:17:69","nodeType":"YulFunctionCall","src":"13177:17:69"},{"name":"end","nativeSrc":"13196:3:69","nodeType":"YulIdentifier","src":"13196:3:69"}],"functionName":{"name":"slt","nativeSrc":"13173:3:69","nodeType":"YulIdentifier","src":"13173:3:69"},"nativeSrc":"13173:27:69","nodeType":"YulFunctionCall","src":"13173:27:69"}],"functionName":{"name":"iszero","nativeSrc":"13166:6:69","nodeType":"YulIdentifier","src":"13166:6:69"},"nativeSrc":"13166:35:69","nodeType":"YulFunctionCall","src":"13166:35:69"},"nativeSrc":"13163:122:69","nodeType":"YulIf","src":"13163:122:69"},{"nativeSrc":"13294:30:69","nodeType":"YulAssignment","src":"13294:30:69","value":{"arguments":[{"name":"offset","nativeSrc":"13317:6:69","nodeType":"YulIdentifier","src":"13317:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"13304:12:69","nodeType":"YulIdentifier","src":"13304:12:69"},"nativeSrc":"13304:20:69","nodeType":"YulFunctionCall","src":"13304:20:69"},"variableNames":[{"name":"length","nativeSrc":"13294:6:69","nodeType":"YulIdentifier","src":"13294:6:69"}]},{"body":{"nativeSrc":"13367:83:69","nodeType":"YulBlock","src":"13367:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490","nativeSrc":"13369:77:69","nodeType":"YulIdentifier","src":"13369:77:69"},"nativeSrc":"13369:79:69","nodeType":"YulFunctionCall","src":"13369:79:69"},"nativeSrc":"13369:79:69","nodeType":"YulExpressionStatement","src":"13369:79:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"13339:6:69","nodeType":"YulIdentifier","src":"13339:6:69"},{"kind":"number","nativeSrc":"13347:18:69","nodeType":"YulLiteral","src":"13347:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"13336:2:69","nodeType":"YulIdentifier","src":"13336:2:69"},"nativeSrc":"13336:30:69","nodeType":"YulFunctionCall","src":"13336:30:69"},"nativeSrc":"13333:117:69","nodeType":"YulIf","src":"13333:117:69"},{"nativeSrc":"13459:29:69","nodeType":"YulAssignment","src":"13459:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"13475:6:69","nodeType":"YulIdentifier","src":"13475:6:69"},{"kind":"number","nativeSrc":"13483:4:69","nodeType":"YulLiteral","src":"13483:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"13471:3:69","nodeType":"YulIdentifier","src":"13471:3:69"},"nativeSrc":"13471:17:69","nodeType":"YulFunctionCall","src":"13471:17:69"},"variableNames":[{"name":"arrayPos","nativeSrc":"13459:8:69","nodeType":"YulIdentifier","src":"13459:8:69"}]},{"body":{"nativeSrc":"13542:83:69","nodeType":"YulBlock","src":"13542:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"13544:77:69","nodeType":"YulIdentifier","src":"13544:77:69"},"nativeSrc":"13544:79:69","nodeType":"YulFunctionCall","src":"13544:79:69"},"nativeSrc":"13544:79:69","nodeType":"YulExpressionStatement","src":"13544:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"arrayPos","nativeSrc":"13507:8:69","nodeType":"YulIdentifier","src":"13507:8:69"},{"arguments":[{"name":"length","nativeSrc":"13521:6:69","nodeType":"YulIdentifier","src":"13521:6:69"},{"kind":"number","nativeSrc":"13529:4:69","nodeType":"YulLiteral","src":"13529:4:69","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"13517:3:69","nodeType":"YulIdentifier","src":"13517:3:69"},"nativeSrc":"13517:17:69","nodeType":"YulFunctionCall","src":"13517:17:69"}],"functionName":{"name":"add","nativeSrc":"13503:3:69","nodeType":"YulIdentifier","src":"13503:3:69"},"nativeSrc":"13503:32:69","nodeType":"YulFunctionCall","src":"13503:32:69"},{"name":"end","nativeSrc":"13537:3:69","nodeType":"YulIdentifier","src":"13537:3:69"}],"functionName":{"name":"gt","nativeSrc":"13500:2:69","nodeType":"YulIdentifier","src":"13500:2:69"},"nativeSrc":"13500:41:69","nodeType":"YulFunctionCall","src":"13500:41:69"},"nativeSrc":"13497:128:69","nodeType":"YulIf","src":"13497:128:69"}]},"name":"abi_decode_t_array$_t_uint32_$dyn_calldata_ptr","nativeSrc":"13064:567:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"13120:6:69","nodeType":"YulTypedName","src":"13120:6:69","type":""},{"name":"end","nativeSrc":"13128:3:69","nodeType":"YulTypedName","src":"13128:3:69","type":""}],"returnVariables":[{"name":"arrayPos","nativeSrc":"13136:8:69","nodeType":"YulTypedName","src":"13136:8:69","type":""},{"name":"length","nativeSrc":"13146:6:69","nodeType":"YulTypedName","src":"13146:6:69","type":""}],"src":"13064:567:69"},{"body":{"nativeSrc":"13856:1118:69","nodeType":"YulBlock","src":"13856:1118:69","statements":[{"body":{"nativeSrc":"13902:83:69","nodeType":"YulBlock","src":"13902:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"13904:77:69","nodeType":"YulIdentifier","src":"13904:77:69"},"nativeSrc":"13904:79:69","nodeType":"YulFunctionCall","src":"13904:79:69"},"nativeSrc":"13904:79:69","nodeType":"YulExpressionStatement","src":"13904:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"13877:7:69","nodeType":"YulIdentifier","src":"13877:7:69"},{"name":"headStart","nativeSrc":"13886:9:69","nodeType":"YulIdentifier","src":"13886:9:69"}],"functionName":{"name":"sub","nativeSrc":"13873:3:69","nodeType":"YulIdentifier","src":"13873:3:69"},"nativeSrc":"13873:23:69","nodeType":"YulFunctionCall","src":"13873:23:69"},{"kind":"number","nativeSrc":"13898:2:69","nodeType":"YulLiteral","src":"13898:2:69","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"13869:3:69","nodeType":"YulIdentifier","src":"13869:3:69"},"nativeSrc":"13869:32:69","nodeType":"YulFunctionCall","src":"13869:32:69"},"nativeSrc":"13866:119:69","nodeType":"YulIf","src":"13866:119:69"},{"nativeSrc":"13995:328:69","nodeType":"YulBlock","src":"13995:328:69","statements":[{"nativeSrc":"14010:45:69","nodeType":"YulVariableDeclaration","src":"14010:45:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"14041:9:69","nodeType":"YulIdentifier","src":"14041:9:69"},{"kind":"number","nativeSrc":"14052:1:69","nodeType":"YulLiteral","src":"14052:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"14037:3:69","nodeType":"YulIdentifier","src":"14037:3:69"},"nativeSrc":"14037:17:69","nodeType":"YulFunctionCall","src":"14037:17:69"}],"functionName":{"name":"calldataload","nativeSrc":"14024:12:69","nodeType":"YulIdentifier","src":"14024:12:69"},"nativeSrc":"14024:31:69","nodeType":"YulFunctionCall","src":"14024:31:69"},"variables":[{"name":"offset","nativeSrc":"14014:6:69","nodeType":"YulTypedName","src":"14014:6:69","type":""}]},{"body":{"nativeSrc":"14102:83:69","nodeType":"YulBlock","src":"14102:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"14104:77:69","nodeType":"YulIdentifier","src":"14104:77:69"},"nativeSrc":"14104:79:69","nodeType":"YulFunctionCall","src":"14104:79:69"},"nativeSrc":"14104:79:69","nodeType":"YulExpressionStatement","src":"14104:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"14074:6:69","nodeType":"YulIdentifier","src":"14074:6:69"},{"kind":"number","nativeSrc":"14082:18:69","nodeType":"YulLiteral","src":"14082:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"14071:2:69","nodeType":"YulIdentifier","src":"14071:2:69"},"nativeSrc":"14071:30:69","nodeType":"YulFunctionCall","src":"14071:30:69"},"nativeSrc":"14068:117:69","nodeType":"YulIf","src":"14068:117:69"},{"nativeSrc":"14199:114:69","nodeType":"YulAssignment","src":"14199:114:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"14285:9:69","nodeType":"YulIdentifier","src":"14285:9:69"},{"name":"offset","nativeSrc":"14296:6:69","nodeType":"YulIdentifier","src":"14296:6:69"}],"functionName":{"name":"add","nativeSrc":"14281:3:69","nodeType":"YulIdentifier","src":"14281:3:69"},"nativeSrc":"14281:22:69","nodeType":"YulFunctionCall","src":"14281:22:69"},{"name":"dataEnd","nativeSrc":"14305:7:69","nodeType":"YulIdentifier","src":"14305:7:69"}],"functionName":{"name":"abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr","nativeSrc":"14217:63:69","nodeType":"YulIdentifier","src":"14217:63:69"},"nativeSrc":"14217:96:69","nodeType":"YulFunctionCall","src":"14217:96:69"},"variableNames":[{"name":"value0","nativeSrc":"14199:6:69","nodeType":"YulIdentifier","src":"14199:6:69"},{"name":"value1","nativeSrc":"14207:6:69","nodeType":"YulIdentifier","src":"14207:6:69"}]}]},{"nativeSrc":"14333:312:69","nodeType":"YulBlock","src":"14333:312:69","statements":[{"nativeSrc":"14348:46:69","nodeType":"YulVariableDeclaration","src":"14348:46:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"14379:9:69","nodeType":"YulIdentifier","src":"14379:9:69"},{"kind":"number","nativeSrc":"14390:2:69","nodeType":"YulLiteral","src":"14390:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"14375:3:69","nodeType":"YulIdentifier","src":"14375:3:69"},"nativeSrc":"14375:18:69","nodeType":"YulFunctionCall","src":"14375:18:69"}],"functionName":{"name":"calldataload","nativeSrc":"14362:12:69","nodeType":"YulIdentifier","src":"14362:12:69"},"nativeSrc":"14362:32:69","nodeType":"YulFunctionCall","src":"14362:32:69"},"variables":[{"name":"offset","nativeSrc":"14352:6:69","nodeType":"YulTypedName","src":"14352:6:69","type":""}]},{"body":{"nativeSrc":"14441:83:69","nodeType":"YulBlock","src":"14441:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"14443:77:69","nodeType":"YulIdentifier","src":"14443:77:69"},"nativeSrc":"14443:79:69","nodeType":"YulFunctionCall","src":"14443:79:69"},"nativeSrc":"14443:79:69","nodeType":"YulExpressionStatement","src":"14443:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"14413:6:69","nodeType":"YulIdentifier","src":"14413:6:69"},{"kind":"number","nativeSrc":"14421:18:69","nodeType":"YulLiteral","src":"14421:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"14410:2:69","nodeType":"YulIdentifier","src":"14410:2:69"},"nativeSrc":"14410:30:69","nodeType":"YulFunctionCall","src":"14410:30:69"},"nativeSrc":"14407:117:69","nodeType":"YulIf","src":"14407:117:69"},{"nativeSrc":"14538:97:69","nodeType":"YulAssignment","src":"14538:97:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"14607:9:69","nodeType":"YulIdentifier","src":"14607:9:69"},{"name":"offset","nativeSrc":"14618:6:69","nodeType":"YulIdentifier","src":"14618:6:69"}],"functionName":{"name":"add","nativeSrc":"14603:3:69","nodeType":"YulIdentifier","src":"14603:3:69"},"nativeSrc":"14603:22:69","nodeType":"YulFunctionCall","src":"14603:22:69"},{"name":"dataEnd","nativeSrc":"14627:7:69","nodeType":"YulIdentifier","src":"14627:7:69"}],"functionName":{"name":"abi_decode_t_array$_t_uint32_$dyn_calldata_ptr","nativeSrc":"14556:46:69","nodeType":"YulIdentifier","src":"14556:46:69"},"nativeSrc":"14556:79:69","nodeType":"YulFunctionCall","src":"14556:79:69"},"variableNames":[{"name":"value2","nativeSrc":"14538:6:69","nodeType":"YulIdentifier","src":"14538:6:69"},{"name":"value3","nativeSrc":"14546:6:69","nodeType":"YulIdentifier","src":"14546:6:69"}]}]},{"nativeSrc":"14655:312:69","nodeType":"YulBlock","src":"14655:312:69","statements":[{"nativeSrc":"14670:46:69","nodeType":"YulVariableDeclaration","src":"14670:46:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"14701:9:69","nodeType":"YulIdentifier","src":"14701:9:69"},{"kind":"number","nativeSrc":"14712:2:69","nodeType":"YulLiteral","src":"14712:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"14697:3:69","nodeType":"YulIdentifier","src":"14697:3:69"},"nativeSrc":"14697:18:69","nodeType":"YulFunctionCall","src":"14697:18:69"}],"functionName":{"name":"calldataload","nativeSrc":"14684:12:69","nodeType":"YulIdentifier","src":"14684:12:69"},"nativeSrc":"14684:32:69","nodeType":"YulFunctionCall","src":"14684:32:69"},"variables":[{"name":"offset","nativeSrc":"14674:6:69","nodeType":"YulTypedName","src":"14674:6:69","type":""}]},{"body":{"nativeSrc":"14763:83:69","nodeType":"YulBlock","src":"14763:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"14765:77:69","nodeType":"YulIdentifier","src":"14765:77:69"},"nativeSrc":"14765:79:69","nodeType":"YulFunctionCall","src":"14765:79:69"},"nativeSrc":"14765:79:69","nodeType":"YulExpressionStatement","src":"14765:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"14735:6:69","nodeType":"YulIdentifier","src":"14735:6:69"},{"kind":"number","nativeSrc":"14743:18:69","nodeType":"YulLiteral","src":"14743:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"14732:2:69","nodeType":"YulIdentifier","src":"14732:2:69"},"nativeSrc":"14732:30:69","nodeType":"YulFunctionCall","src":"14732:30:69"},"nativeSrc":"14729:117:69","nodeType":"YulIf","src":"14729:117:69"},{"nativeSrc":"14860:97:69","nodeType":"YulAssignment","src":"14860:97:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"14929:9:69","nodeType":"YulIdentifier","src":"14929:9:69"},{"name":"offset","nativeSrc":"14940:6:69","nodeType":"YulIdentifier","src":"14940:6:69"}],"functionName":{"name":"add","nativeSrc":"14925:3:69","nodeType":"YulIdentifier","src":"14925:3:69"},"nativeSrc":"14925:22:69","nodeType":"YulFunctionCall","src":"14925:22:69"},{"name":"dataEnd","nativeSrc":"14949:7:69","nodeType":"YulIdentifier","src":"14949:7:69"}],"functionName":{"name":"abi_decode_t_array$_t_uint32_$dyn_calldata_ptr","nativeSrc":"14878:46:69","nodeType":"YulIdentifier","src":"14878:46:69"},"nativeSrc":"14878:79:69","nodeType":"YulFunctionCall","src":"14878:79:69"},"variableNames":[{"name":"value4","nativeSrc":"14860:6:69","nodeType":"YulIdentifier","src":"14860:6:69"},{"name":"value5","nativeSrc":"14868:6:69","nodeType":"YulIdentifier","src":"14868:6:69"}]}]}]},"name":"abi_decode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptr","nativeSrc":"13637:1337:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"13786:9:69","nodeType":"YulTypedName","src":"13786:9:69","type":""},{"name":"dataEnd","nativeSrc":"13797:7:69","nodeType":"YulTypedName","src":"13797:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"13809:6:69","nodeType":"YulTypedName","src":"13809:6:69","type":""},{"name":"value1","nativeSrc":"13817:6:69","nodeType":"YulTypedName","src":"13817:6:69","type":""},{"name":"value2","nativeSrc":"13825:6:69","nodeType":"YulTypedName","src":"13825:6:69","type":""},{"name":"value3","nativeSrc":"13833:6:69","nodeType":"YulTypedName","src":"13833:6:69","type":""},{"name":"value4","nativeSrc":"13841:6:69","nodeType":"YulTypedName","src":"13841:6:69","type":""},{"name":"value5","nativeSrc":"13849:6:69","nodeType":"YulTypedName","src":"13849:6:69","type":""}],"src":"13637:1337:69"},{"body":{"nativeSrc":"15062:229:69","nodeType":"YulBlock","src":"15062:229:69","statements":[{"body":{"nativeSrc":"15167:22:69","nodeType":"YulBlock","src":"15167:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"15169:16:69","nodeType":"YulIdentifier","src":"15169:16:69"},"nativeSrc":"15169:18:69","nodeType":"YulFunctionCall","src":"15169:18:69"},"nativeSrc":"15169:18:69","nodeType":"YulExpressionStatement","src":"15169:18:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"15139:6:69","nodeType":"YulIdentifier","src":"15139:6:69"},{"kind":"number","nativeSrc":"15147:18:69","nodeType":"YulLiteral","src":"15147:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"15136:2:69","nodeType":"YulIdentifier","src":"15136:2:69"},"nativeSrc":"15136:30:69","nodeType":"YulFunctionCall","src":"15136:30:69"},"nativeSrc":"15133:56:69","nodeType":"YulIf","src":"15133:56:69"},{"nativeSrc":"15199:25:69","nodeType":"YulAssignment","src":"15199:25:69","value":{"arguments":[{"name":"length","nativeSrc":"15211:6:69","nodeType":"YulIdentifier","src":"15211:6:69"},{"kind":"number","nativeSrc":"15219:4:69","nodeType":"YulLiteral","src":"15219:4:69","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"15207:3:69","nodeType":"YulIdentifier","src":"15207:3:69"},"nativeSrc":"15207:17:69","nodeType":"YulFunctionCall","src":"15207:17:69"},"variableNames":[{"name":"size","nativeSrc":"15199:4:69","nodeType":"YulIdentifier","src":"15199:4:69"}]},{"nativeSrc":"15261:23:69","nodeType":"YulAssignment","src":"15261:23:69","value":{"arguments":[{"name":"size","nativeSrc":"15273:4:69","nodeType":"YulIdentifier","src":"15273:4:69"},{"kind":"number","nativeSrc":"15279:4:69","nodeType":"YulLiteral","src":"15279:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"15269:3:69","nodeType":"YulIdentifier","src":"15269:3:69"},"nativeSrc":"15269:15:69","nodeType":"YulFunctionCall","src":"15269:15:69"},"variableNames":[{"name":"size","nativeSrc":"15261:4:69","nodeType":"YulIdentifier","src":"15261:4:69"}]}]},"name":"array_allocation_size_t_array$_t_uint256_$dyn_memory_ptr","nativeSrc":"14980:311:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nativeSrc":"15046:6:69","nodeType":"YulTypedName","src":"15046:6:69","type":""}],"returnVariables":[{"name":"size","nativeSrc":"15057:4:69","nodeType":"YulTypedName","src":"15057:4:69","type":""}],"src":"14980:311:69"},{"body":{"nativeSrc":"15416:608:69","nodeType":"YulBlock","src":"15416:608:69","statements":[{"nativeSrc":"15426:90:69","nodeType":"YulAssignment","src":"15426:90:69","value":{"arguments":[{"arguments":[{"name":"length","nativeSrc":"15508:6:69","nodeType":"YulIdentifier","src":"15508:6:69"}],"functionName":{"name":"array_allocation_size_t_array$_t_uint256_$dyn_memory_ptr","nativeSrc":"15451:56:69","nodeType":"YulIdentifier","src":"15451:56:69"},"nativeSrc":"15451:64:69","nodeType":"YulFunctionCall","src":"15451:64:69"}],"functionName":{"name":"allocate_memory","nativeSrc":"15435:15:69","nodeType":"YulIdentifier","src":"15435:15:69"},"nativeSrc":"15435:81:69","nodeType":"YulFunctionCall","src":"15435:81:69"},"variableNames":[{"name":"array","nativeSrc":"15426:5:69","nodeType":"YulIdentifier","src":"15426:5:69"}]},{"nativeSrc":"15525:16:69","nodeType":"YulVariableDeclaration","src":"15525:16:69","value":{"name":"array","nativeSrc":"15536:5:69","nodeType":"YulIdentifier","src":"15536:5:69"},"variables":[{"name":"dst","nativeSrc":"15529:3:69","nodeType":"YulTypedName","src":"15529:3:69","type":""}]},{"expression":{"arguments":[{"name":"array","nativeSrc":"15558:5:69","nodeType":"YulIdentifier","src":"15558:5:69"},{"name":"length","nativeSrc":"15565:6:69","nodeType":"YulIdentifier","src":"15565:6:69"}],"functionName":{"name":"mstore","nativeSrc":"15551:6:69","nodeType":"YulIdentifier","src":"15551:6:69"},"nativeSrc":"15551:21:69","nodeType":"YulFunctionCall","src":"15551:21:69"},"nativeSrc":"15551:21:69","nodeType":"YulExpressionStatement","src":"15551:21:69"},{"nativeSrc":"15581:23:69","nodeType":"YulAssignment","src":"15581:23:69","value":{"arguments":[{"name":"array","nativeSrc":"15592:5:69","nodeType":"YulIdentifier","src":"15592:5:69"},{"kind":"number","nativeSrc":"15599:4:69","nodeType":"YulLiteral","src":"15599:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"15588:3:69","nodeType":"YulIdentifier","src":"15588:3:69"},"nativeSrc":"15588:16:69","nodeType":"YulFunctionCall","src":"15588:16:69"},"variableNames":[{"name":"dst","nativeSrc":"15581:3:69","nodeType":"YulIdentifier","src":"15581:3:69"}]},{"nativeSrc":"15614:44:69","nodeType":"YulVariableDeclaration","src":"15614:44:69","value":{"arguments":[{"name":"offset","nativeSrc":"15632:6:69","nodeType":"YulIdentifier","src":"15632:6:69"},{"arguments":[{"name":"length","nativeSrc":"15644:6:69","nodeType":"YulIdentifier","src":"15644:6:69"},{"kind":"number","nativeSrc":"15652:4:69","nodeType":"YulLiteral","src":"15652:4:69","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"15640:3:69","nodeType":"YulIdentifier","src":"15640:3:69"},"nativeSrc":"15640:17:69","nodeType":"YulFunctionCall","src":"15640:17:69"}],"functionName":{"name":"add","nativeSrc":"15628:3:69","nodeType":"YulIdentifier","src":"15628:3:69"},"nativeSrc":"15628:30:69","nodeType":"YulFunctionCall","src":"15628:30:69"},"variables":[{"name":"srcEnd","nativeSrc":"15618:6:69","nodeType":"YulTypedName","src":"15618:6:69","type":""}]},{"body":{"nativeSrc":"15686:103:69","nodeType":"YulBlock","src":"15686:103:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"15700:77:69","nodeType":"YulIdentifier","src":"15700:77:69"},"nativeSrc":"15700:79:69","nodeType":"YulFunctionCall","src":"15700:79:69"},"nativeSrc":"15700:79:69","nodeType":"YulExpressionStatement","src":"15700:79:69"}]},"condition":{"arguments":[{"name":"srcEnd","nativeSrc":"15673:6:69","nodeType":"YulIdentifier","src":"15673:6:69"},{"name":"end","nativeSrc":"15681:3:69","nodeType":"YulIdentifier","src":"15681:3:69"}],"functionName":{"name":"gt","nativeSrc":"15670:2:69","nodeType":"YulIdentifier","src":"15670:2:69"},"nativeSrc":"15670:15:69","nodeType":"YulFunctionCall","src":"15670:15:69"},"nativeSrc":"15667:122:69","nodeType":"YulIf","src":"15667:122:69"},{"body":{"nativeSrc":"15874:144:69","nodeType":"YulBlock","src":"15874:144:69","statements":[{"nativeSrc":"15889:21:69","nodeType":"YulVariableDeclaration","src":"15889:21:69","value":{"name":"src","nativeSrc":"15907:3:69","nodeType":"YulIdentifier","src":"15907:3:69"},"variables":[{"name":"elementPos","nativeSrc":"15893:10:69","nodeType":"YulTypedName","src":"15893:10:69","type":""}]},{"expression":{"arguments":[{"name":"dst","nativeSrc":"15931:3:69","nodeType":"YulIdentifier","src":"15931:3:69"},{"arguments":[{"name":"elementPos","nativeSrc":"15957:10:69","nodeType":"YulIdentifier","src":"15957:10:69"},{"name":"end","nativeSrc":"15969:3:69","nodeType":"YulIdentifier","src":"15969:3:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"15936:20:69","nodeType":"YulIdentifier","src":"15936:20:69"},"nativeSrc":"15936:37:69","nodeType":"YulFunctionCall","src":"15936:37:69"}],"functionName":{"name":"mstore","nativeSrc":"15924:6:69","nodeType":"YulIdentifier","src":"15924:6:69"},"nativeSrc":"15924:50:69","nodeType":"YulFunctionCall","src":"15924:50:69"},"nativeSrc":"15924:50:69","nodeType":"YulExpressionStatement","src":"15924:50:69"},{"nativeSrc":"15987:21:69","nodeType":"YulAssignment","src":"15987:21:69","value":{"arguments":[{"name":"dst","nativeSrc":"15998:3:69","nodeType":"YulIdentifier","src":"15998:3:69"},{"kind":"number","nativeSrc":"16003:4:69","nodeType":"YulLiteral","src":"16003:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"15994:3:69","nodeType":"YulIdentifier","src":"15994:3:69"},"nativeSrc":"15994:14:69","nodeType":"YulFunctionCall","src":"15994:14:69"},"variableNames":[{"name":"dst","nativeSrc":"15987:3:69","nodeType":"YulIdentifier","src":"15987:3:69"}]}]},"condition":{"arguments":[{"name":"src","nativeSrc":"15827:3:69","nodeType":"YulIdentifier","src":"15827:3:69"},{"name":"srcEnd","nativeSrc":"15832:6:69","nodeType":"YulIdentifier","src":"15832:6:69"}],"functionName":{"name":"lt","nativeSrc":"15824:2:69","nodeType":"YulIdentifier","src":"15824:2:69"},"nativeSrc":"15824:15:69","nodeType":"YulFunctionCall","src":"15824:15:69"},"nativeSrc":"15798:220:69","nodeType":"YulForLoop","post":{"nativeSrc":"15840:25:69","nodeType":"YulBlock","src":"15840:25:69","statements":[{"nativeSrc":"15842:21:69","nodeType":"YulAssignment","src":"15842:21:69","value":{"arguments":[{"name":"src","nativeSrc":"15853:3:69","nodeType":"YulIdentifier","src":"15853:3:69"},{"kind":"number","nativeSrc":"15858:4:69","nodeType":"YulLiteral","src":"15858:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"15849:3:69","nodeType":"YulIdentifier","src":"15849:3:69"},"nativeSrc":"15849:14:69","nodeType":"YulFunctionCall","src":"15849:14:69"},"variableNames":[{"name":"src","nativeSrc":"15842:3:69","nodeType":"YulIdentifier","src":"15842:3:69"}]}]},"pre":{"nativeSrc":"15802:21:69","nodeType":"YulBlock","src":"15802:21:69","statements":[{"nativeSrc":"15804:17:69","nodeType":"YulVariableDeclaration","src":"15804:17:69","value":{"name":"offset","nativeSrc":"15815:6:69","nodeType":"YulIdentifier","src":"15815:6:69"},"variables":[{"name":"src","nativeSrc":"15808:3:69","nodeType":"YulTypedName","src":"15808:3:69","type":""}]}]},"src":"15798:220:69"}]},"name":"abi_decode_available_length_t_array$_t_uint256_$dyn_memory_ptr","nativeSrc":"15314:710:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"15386:6:69","nodeType":"YulTypedName","src":"15386:6:69","type":""},{"name":"length","nativeSrc":"15394:6:69","nodeType":"YulTypedName","src":"15394:6:69","type":""},{"name":"end","nativeSrc":"15402:3:69","nodeType":"YulTypedName","src":"15402:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"15410:5:69","nodeType":"YulTypedName","src":"15410:5:69","type":""}],"src":"15314:710:69"},{"body":{"nativeSrc":"16124:293:69","nodeType":"YulBlock","src":"16124:293:69","statements":[{"body":{"nativeSrc":"16173:83:69","nodeType":"YulBlock","src":"16173:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"16175:77:69","nodeType":"YulIdentifier","src":"16175:77:69"},"nativeSrc":"16175:79:69","nodeType":"YulFunctionCall","src":"16175:79:69"},"nativeSrc":"16175:79:69","nodeType":"YulExpressionStatement","src":"16175:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"16152:6:69","nodeType":"YulIdentifier","src":"16152:6:69"},{"kind":"number","nativeSrc":"16160:4:69","nodeType":"YulLiteral","src":"16160:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"16148:3:69","nodeType":"YulIdentifier","src":"16148:3:69"},"nativeSrc":"16148:17:69","nodeType":"YulFunctionCall","src":"16148:17:69"},{"name":"end","nativeSrc":"16167:3:69","nodeType":"YulIdentifier","src":"16167:3:69"}],"functionName":{"name":"slt","nativeSrc":"16144:3:69","nodeType":"YulIdentifier","src":"16144:3:69"},"nativeSrc":"16144:27:69","nodeType":"YulFunctionCall","src":"16144:27:69"}],"functionName":{"name":"iszero","nativeSrc":"16137:6:69","nodeType":"YulIdentifier","src":"16137:6:69"},"nativeSrc":"16137:35:69","nodeType":"YulFunctionCall","src":"16137:35:69"},"nativeSrc":"16134:122:69","nodeType":"YulIf","src":"16134:122:69"},{"nativeSrc":"16265:34:69","nodeType":"YulVariableDeclaration","src":"16265:34:69","value":{"arguments":[{"name":"offset","nativeSrc":"16292:6:69","nodeType":"YulIdentifier","src":"16292:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"16279:12:69","nodeType":"YulIdentifier","src":"16279:12:69"},"nativeSrc":"16279:20:69","nodeType":"YulFunctionCall","src":"16279:20:69"},"variables":[{"name":"length","nativeSrc":"16269:6:69","nodeType":"YulTypedName","src":"16269:6:69","type":""}]},{"nativeSrc":"16308:103:69","nodeType":"YulAssignment","src":"16308:103:69","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"16384:6:69","nodeType":"YulIdentifier","src":"16384:6:69"},{"kind":"number","nativeSrc":"16392:4:69","nodeType":"YulLiteral","src":"16392:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"16380:3:69","nodeType":"YulIdentifier","src":"16380:3:69"},"nativeSrc":"16380:17:69","nodeType":"YulFunctionCall","src":"16380:17:69"},{"name":"length","nativeSrc":"16399:6:69","nodeType":"YulIdentifier","src":"16399:6:69"},{"name":"end","nativeSrc":"16407:3:69","nodeType":"YulIdentifier","src":"16407:3:69"}],"functionName":{"name":"abi_decode_available_length_t_array$_t_uint256_$dyn_memory_ptr","nativeSrc":"16317:62:69","nodeType":"YulIdentifier","src":"16317:62:69"},"nativeSrc":"16317:94:69","nodeType":"YulFunctionCall","src":"16317:94:69"},"variableNames":[{"name":"array","nativeSrc":"16308:5:69","nodeType":"YulIdentifier","src":"16308:5:69"}]}]},"name":"abi_decode_t_array$_t_uint256_$dyn_memory_ptr","nativeSrc":"16047:370:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"16102:6:69","nodeType":"YulTypedName","src":"16102:6:69","type":""},{"name":"end","nativeSrc":"16110:3:69","nodeType":"YulTypedName","src":"16110:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"16118:5:69","nodeType":"YulTypedName","src":"16118:5:69","type":""}],"src":"16047:370:69"},{"body":{"nativeSrc":"16614:1090:69","nodeType":"YulBlock","src":"16614:1090:69","statements":[{"body":{"nativeSrc":"16660:83:69","nodeType":"YulBlock","src":"16660:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"16662:77:69","nodeType":"YulIdentifier","src":"16662:77:69"},"nativeSrc":"16662:79:69","nodeType":"YulFunctionCall","src":"16662:79:69"},"nativeSrc":"16662:79:69","nodeType":"YulExpressionStatement","src":"16662:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"16635:7:69","nodeType":"YulIdentifier","src":"16635:7:69"},{"name":"headStart","nativeSrc":"16644:9:69","nodeType":"YulIdentifier","src":"16644:9:69"}],"functionName":{"name":"sub","nativeSrc":"16631:3:69","nodeType":"YulIdentifier","src":"16631:3:69"},"nativeSrc":"16631:23:69","nodeType":"YulFunctionCall","src":"16631:23:69"},{"kind":"number","nativeSrc":"16656:2:69","nodeType":"YulLiteral","src":"16656:2:69","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"16627:3:69","nodeType":"YulIdentifier","src":"16627:3:69"},"nativeSrc":"16627:32:69","nodeType":"YulFunctionCall","src":"16627:32:69"},"nativeSrc":"16624:119:69","nodeType":"YulIf","src":"16624:119:69"},{"nativeSrc":"16753:318:69","nodeType":"YulBlock","src":"16753:318:69","statements":[{"nativeSrc":"16768:45:69","nodeType":"YulVariableDeclaration","src":"16768:45:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"16799:9:69","nodeType":"YulIdentifier","src":"16799:9:69"},{"kind":"number","nativeSrc":"16810:1:69","nodeType":"YulLiteral","src":"16810:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"16795:3:69","nodeType":"YulIdentifier","src":"16795:3:69"},"nativeSrc":"16795:17:69","nodeType":"YulFunctionCall","src":"16795:17:69"}],"functionName":{"name":"calldataload","nativeSrc":"16782:12:69","nodeType":"YulIdentifier","src":"16782:12:69"},"nativeSrc":"16782:31:69","nodeType":"YulFunctionCall","src":"16782:31:69"},"variables":[{"name":"offset","nativeSrc":"16772:6:69","nodeType":"YulTypedName","src":"16772:6:69","type":""}]},{"body":{"nativeSrc":"16860:83:69","nodeType":"YulBlock","src":"16860:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"16862:77:69","nodeType":"YulIdentifier","src":"16862:77:69"},"nativeSrc":"16862:79:69","nodeType":"YulFunctionCall","src":"16862:79:69"},"nativeSrc":"16862:79:69","nodeType":"YulExpressionStatement","src":"16862:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"16832:6:69","nodeType":"YulIdentifier","src":"16832:6:69"},{"kind":"number","nativeSrc":"16840:18:69","nodeType":"YulLiteral","src":"16840:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"16829:2:69","nodeType":"YulIdentifier","src":"16829:2:69"},"nativeSrc":"16829:30:69","nodeType":"YulFunctionCall","src":"16829:30:69"},"nativeSrc":"16826:117:69","nodeType":"YulIf","src":"16826:117:69"},{"nativeSrc":"16957:104:69","nodeType":"YulAssignment","src":"16957:104:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"17033:9:69","nodeType":"YulIdentifier","src":"17033:9:69"},{"name":"offset","nativeSrc":"17044:6:69","nodeType":"YulIdentifier","src":"17044:6:69"}],"functionName":{"name":"add","nativeSrc":"17029:3:69","nodeType":"YulIdentifier","src":"17029:3:69"},"nativeSrc":"17029:22:69","nodeType":"YulFunctionCall","src":"17029:22:69"},{"name":"dataEnd","nativeSrc":"17053:7:69","nodeType":"YulIdentifier","src":"17053:7:69"}],"functionName":{"name":"abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"16967:61:69","nodeType":"YulIdentifier","src":"16967:61:69"},"nativeSrc":"16967:94:69","nodeType":"YulFunctionCall","src":"16967:94:69"},"variableNames":[{"name":"value0","nativeSrc":"16957:6:69","nodeType":"YulIdentifier","src":"16957:6:69"}]}]},{"nativeSrc":"17081:303:69","nodeType":"YulBlock","src":"17081:303:69","statements":[{"nativeSrc":"17096:46:69","nodeType":"YulVariableDeclaration","src":"17096:46:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"17127:9:69","nodeType":"YulIdentifier","src":"17127:9:69"},{"kind":"number","nativeSrc":"17138:2:69","nodeType":"YulLiteral","src":"17138:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"17123:3:69","nodeType":"YulIdentifier","src":"17123:3:69"},"nativeSrc":"17123:18:69","nodeType":"YulFunctionCall","src":"17123:18:69"}],"functionName":{"name":"calldataload","nativeSrc":"17110:12:69","nodeType":"YulIdentifier","src":"17110:12:69"},"nativeSrc":"17110:32:69","nodeType":"YulFunctionCall","src":"17110:32:69"},"variables":[{"name":"offset","nativeSrc":"17100:6:69","nodeType":"YulTypedName","src":"17100:6:69","type":""}]},{"body":{"nativeSrc":"17189:83:69","nodeType":"YulBlock","src":"17189:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"17191:77:69","nodeType":"YulIdentifier","src":"17191:77:69"},"nativeSrc":"17191:79:69","nodeType":"YulFunctionCall","src":"17191:79:69"},"nativeSrc":"17191:79:69","nodeType":"YulExpressionStatement","src":"17191:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"17161:6:69","nodeType":"YulIdentifier","src":"17161:6:69"},{"kind":"number","nativeSrc":"17169:18:69","nodeType":"YulLiteral","src":"17169:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"17158:2:69","nodeType":"YulIdentifier","src":"17158:2:69"},"nativeSrc":"17158:30:69","nodeType":"YulFunctionCall","src":"17158:30:69"},"nativeSrc":"17155:117:69","nodeType":"YulIf","src":"17155:117:69"},{"nativeSrc":"17286:88:69","nodeType":"YulAssignment","src":"17286:88:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"17346:9:69","nodeType":"YulIdentifier","src":"17346:9:69"},{"name":"offset","nativeSrc":"17357:6:69","nodeType":"YulIdentifier","src":"17357:6:69"}],"functionName":{"name":"add","nativeSrc":"17342:3:69","nodeType":"YulIdentifier","src":"17342:3:69"},"nativeSrc":"17342:22:69","nodeType":"YulFunctionCall","src":"17342:22:69"},{"name":"dataEnd","nativeSrc":"17366:7:69","nodeType":"YulIdentifier","src":"17366:7:69"}],"functionName":{"name":"abi_decode_t_array$_t_uint256_$dyn_memory_ptr","nativeSrc":"17296:45:69","nodeType":"YulIdentifier","src":"17296:45:69"},"nativeSrc":"17296:78:69","nodeType":"YulFunctionCall","src":"17296:78:69"},"variableNames":[{"name":"value1","nativeSrc":"17286:6:69","nodeType":"YulIdentifier","src":"17286:6:69"}]}]},{"nativeSrc":"17394:303:69","nodeType":"YulBlock","src":"17394:303:69","statements":[{"nativeSrc":"17409:46:69","nodeType":"YulVariableDeclaration","src":"17409:46:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"17440:9:69","nodeType":"YulIdentifier","src":"17440:9:69"},{"kind":"number","nativeSrc":"17451:2:69","nodeType":"YulLiteral","src":"17451:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"17436:3:69","nodeType":"YulIdentifier","src":"17436:3:69"},"nativeSrc":"17436:18:69","nodeType":"YulFunctionCall","src":"17436:18:69"}],"functionName":{"name":"calldataload","nativeSrc":"17423:12:69","nodeType":"YulIdentifier","src":"17423:12:69"},"nativeSrc":"17423:32:69","nodeType":"YulFunctionCall","src":"17423:32:69"},"variables":[{"name":"offset","nativeSrc":"17413:6:69","nodeType":"YulTypedName","src":"17413:6:69","type":""}]},{"body":{"nativeSrc":"17502:83:69","nodeType":"YulBlock","src":"17502:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"17504:77:69","nodeType":"YulIdentifier","src":"17504:77:69"},"nativeSrc":"17504:79:69","nodeType":"YulFunctionCall","src":"17504:79:69"},"nativeSrc":"17504:79:69","nodeType":"YulExpressionStatement","src":"17504:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"17474:6:69","nodeType":"YulIdentifier","src":"17474:6:69"},{"kind":"number","nativeSrc":"17482:18:69","nodeType":"YulLiteral","src":"17482:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"17471:2:69","nodeType":"YulIdentifier","src":"17471:2:69"},"nativeSrc":"17471:30:69","nodeType":"YulFunctionCall","src":"17471:30:69"},"nativeSrc":"17468:117:69","nodeType":"YulIf","src":"17468:117:69"},{"nativeSrc":"17599:88:69","nodeType":"YulAssignment","src":"17599:88:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"17659:9:69","nodeType":"YulIdentifier","src":"17659:9:69"},{"name":"offset","nativeSrc":"17670:6:69","nodeType":"YulIdentifier","src":"17670:6:69"}],"functionName":{"name":"add","nativeSrc":"17655:3:69","nodeType":"YulIdentifier","src":"17655:3:69"},"nativeSrc":"17655:22:69","nodeType":"YulFunctionCall","src":"17655:22:69"},{"name":"dataEnd","nativeSrc":"17679:7:69","nodeType":"YulIdentifier","src":"17679:7:69"}],"functionName":{"name":"abi_decode_t_array$_t_uint256_$dyn_memory_ptr","nativeSrc":"17609:45:69","nodeType":"YulIdentifier","src":"17609:45:69"},"nativeSrc":"17609:78:69","nodeType":"YulFunctionCall","src":"17609:78:69"},"variableNames":[{"name":"value2","nativeSrc":"17599:6:69","nodeType":"YulIdentifier","src":"17599:6:69"}]}]}]},"name":"abi_decode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptr","nativeSrc":"16423:1281:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"16568:9:69","nodeType":"YulTypedName","src":"16568:9:69","type":""},{"name":"dataEnd","nativeSrc":"16579:7:69","nodeType":"YulTypedName","src":"16579:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"16591:6:69","nodeType":"YulTypedName","src":"16591:6:69","type":""},{"name":"value1","nativeSrc":"16599:6:69","nodeType":"YulTypedName","src":"16599:6:69","type":""},{"name":"value2","nativeSrc":"16607:6:69","nodeType":"YulTypedName","src":"16607:6:69","type":""}],"src":"16423:1281:69"},{"body":{"nativeSrc":"17775:53:69","nodeType":"YulBlock","src":"17775:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"17792:3:69","nodeType":"YulIdentifier","src":"17792:3:69"},{"arguments":[{"name":"value","nativeSrc":"17815:5:69","nodeType":"YulIdentifier","src":"17815:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"17797:17:69","nodeType":"YulIdentifier","src":"17797:17:69"},"nativeSrc":"17797:24:69","nodeType":"YulFunctionCall","src":"17797:24:69"}],"functionName":{"name":"mstore","nativeSrc":"17785:6:69","nodeType":"YulIdentifier","src":"17785:6:69"},"nativeSrc":"17785:37:69","nodeType":"YulFunctionCall","src":"17785:37:69"},"nativeSrc":"17785:37:69","nodeType":"YulExpressionStatement","src":"17785:37:69"}]},"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"17710:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"17763:5:69","nodeType":"YulTypedName","src":"17763:5:69","type":""},{"name":"pos","nativeSrc":"17770:3:69","nodeType":"YulTypedName","src":"17770:3:69","type":""}],"src":"17710:118:69"},{"body":{"nativeSrc":"17932:124:69","nodeType":"YulBlock","src":"17932:124:69","statements":[{"nativeSrc":"17942:26:69","nodeType":"YulAssignment","src":"17942:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"17954:9:69","nodeType":"YulIdentifier","src":"17954:9:69"},{"kind":"number","nativeSrc":"17965:2:69","nodeType":"YulLiteral","src":"17965:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"17950:3:69","nodeType":"YulIdentifier","src":"17950:3:69"},"nativeSrc":"17950:18:69","nodeType":"YulFunctionCall","src":"17950:18:69"},"variableNames":[{"name":"tail","nativeSrc":"17942:4:69","nodeType":"YulIdentifier","src":"17942:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"18022:6:69","nodeType":"YulIdentifier","src":"18022:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"18035:9:69","nodeType":"YulIdentifier","src":"18035:9:69"},{"kind":"number","nativeSrc":"18046:1:69","nodeType":"YulLiteral","src":"18046:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"18031:3:69","nodeType":"YulIdentifier","src":"18031:3:69"},"nativeSrc":"18031:17:69","nodeType":"YulFunctionCall","src":"18031:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"17978:43:69","nodeType":"YulIdentifier","src":"17978:43:69"},"nativeSrc":"17978:71:69","nodeType":"YulFunctionCall","src":"17978:71:69"},"nativeSrc":"17978:71:69","nodeType":"YulExpressionStatement","src":"17978:71:69"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"17834:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"17904:9:69","nodeType":"YulTypedName","src":"17904:9:69","type":""},{"name":"value0","nativeSrc":"17916:6:69","nodeType":"YulTypedName","src":"17916:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"17927:4:69","nodeType":"YulTypedName","src":"17927:4:69","type":""}],"src":"17834:222:69"},{"body":{"nativeSrc":"18094:28:69","nodeType":"YulBlock","src":"18094:28:69","statements":[{"nativeSrc":"18104:12:69","nodeType":"YulAssignment","src":"18104:12:69","value":{"name":"value","nativeSrc":"18111:5:69","nodeType":"YulIdentifier","src":"18111:5:69"},"variableNames":[{"name":"ret","nativeSrc":"18104:3:69","nodeType":"YulIdentifier","src":"18104:3:69"}]}]},"name":"identity","nativeSrc":"18062:60:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"18080:5:69","nodeType":"YulTypedName","src":"18080:5:69","type":""}],"returnVariables":[{"name":"ret","nativeSrc":"18090:3:69","nodeType":"YulTypedName","src":"18090:3:69","type":""}],"src":"18062:60:69"},{"body":{"nativeSrc":"18188:82:69","nodeType":"YulBlock","src":"18188:82:69","statements":[{"nativeSrc":"18198:66:69","nodeType":"YulAssignment","src":"18198:66:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"18256:5:69","nodeType":"YulIdentifier","src":"18256:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"18238:17:69","nodeType":"YulIdentifier","src":"18238:17:69"},"nativeSrc":"18238:24:69","nodeType":"YulFunctionCall","src":"18238:24:69"}],"functionName":{"name":"identity","nativeSrc":"18229:8:69","nodeType":"YulIdentifier","src":"18229:8:69"},"nativeSrc":"18229:34:69","nodeType":"YulFunctionCall","src":"18229:34:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"18211:17:69","nodeType":"YulIdentifier","src":"18211:17:69"},"nativeSrc":"18211:53:69","nodeType":"YulFunctionCall","src":"18211:53:69"},"variableNames":[{"name":"converted","nativeSrc":"18198:9:69","nodeType":"YulIdentifier","src":"18198:9:69"}]}]},"name":"convert_t_uint160_to_t_uint160","nativeSrc":"18128:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"18168:5:69","nodeType":"YulTypedName","src":"18168:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"18178:9:69","nodeType":"YulTypedName","src":"18178:9:69","type":""}],"src":"18128:142:69"},{"body":{"nativeSrc":"18336:66:69","nodeType":"YulBlock","src":"18336:66:69","statements":[{"nativeSrc":"18346:50:69","nodeType":"YulAssignment","src":"18346:50:69","value":{"arguments":[{"name":"value","nativeSrc":"18390:5:69","nodeType":"YulIdentifier","src":"18390:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_uint160","nativeSrc":"18359:30:69","nodeType":"YulIdentifier","src":"18359:30:69"},"nativeSrc":"18359:37:69","nodeType":"YulFunctionCall","src":"18359:37:69"},"variableNames":[{"name":"converted","nativeSrc":"18346:9:69","nodeType":"YulIdentifier","src":"18346:9:69"}]}]},"name":"convert_t_uint160_to_t_address","nativeSrc":"18276:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"18316:5:69","nodeType":"YulTypedName","src":"18316:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"18326:9:69","nodeType":"YulTypedName","src":"18326:9:69","type":""}],"src":"18276:126:69"},{"body":{"nativeSrc":"18500:66:69","nodeType":"YulBlock","src":"18500:66:69","statements":[{"nativeSrc":"18510:50:69","nodeType":"YulAssignment","src":"18510:50:69","value":{"arguments":[{"name":"value","nativeSrc":"18554:5:69","nodeType":"YulIdentifier","src":"18554:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"18523:30:69","nodeType":"YulIdentifier","src":"18523:30:69"},"nativeSrc":"18523:37:69","nodeType":"YulFunctionCall","src":"18523:37:69"},"variableNames":[{"name":"converted","nativeSrc":"18510:9:69","nodeType":"YulIdentifier","src":"18510:9:69"}]}]},"name":"convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address","nativeSrc":"18408:158:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"18480:5:69","nodeType":"YulTypedName","src":"18480:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"18490:9:69","nodeType":"YulTypedName","src":"18490:9:69","type":""}],"src":"18408:158:69"},{"body":{"nativeSrc":"18669:98:69","nodeType":"YulBlock","src":"18669:98:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"18686:3:69","nodeType":"YulIdentifier","src":"18686:3:69"},{"arguments":[{"name":"value","nativeSrc":"18754:5:69","nodeType":"YulIdentifier","src":"18754:5:69"}],"functionName":{"name":"convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address","nativeSrc":"18691:62:69","nodeType":"YulIdentifier","src":"18691:62:69"},"nativeSrc":"18691:69:69","nodeType":"YulFunctionCall","src":"18691:69:69"}],"functionName":{"name":"mstore","nativeSrc":"18679:6:69","nodeType":"YulIdentifier","src":"18679:6:69"},"nativeSrc":"18679:82:69","nodeType":"YulFunctionCall","src":"18679:82:69"},"nativeSrc":"18679:82:69","nodeType":"YulExpressionStatement","src":"18679:82:69"}]},"name":"abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack","nativeSrc":"18572:195:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"18657:5:69","nodeType":"YulTypedName","src":"18657:5:69","type":""},{"name":"pos","nativeSrc":"18664:3:69","nodeType":"YulTypedName","src":"18664:3:69","type":""}],"src":"18572:195:69"},{"body":{"nativeSrc":"18903:156:69","nodeType":"YulBlock","src":"18903:156:69","statements":[{"nativeSrc":"18913:26:69","nodeType":"YulAssignment","src":"18913:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"18925:9:69","nodeType":"YulIdentifier","src":"18925:9:69"},{"kind":"number","nativeSrc":"18936:2:69","nodeType":"YulLiteral","src":"18936:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"18921:3:69","nodeType":"YulIdentifier","src":"18921:3:69"},"nativeSrc":"18921:18:69","nodeType":"YulFunctionCall","src":"18921:18:69"},"variableNames":[{"name":"tail","nativeSrc":"18913:4:69","nodeType":"YulIdentifier","src":"18913:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"19025:6:69","nodeType":"YulIdentifier","src":"19025:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"19038:9:69","nodeType":"YulIdentifier","src":"19038:9:69"},{"kind":"number","nativeSrc":"19049:1:69","nodeType":"YulLiteral","src":"19049:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"19034:3:69","nodeType":"YulIdentifier","src":"19034:3:69"},"nativeSrc":"19034:17:69","nodeType":"YulFunctionCall","src":"19034:17:69"}],"functionName":{"name":"abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack","nativeSrc":"18949:75:69","nodeType":"YulIdentifier","src":"18949:75:69"},"nativeSrc":"18949:103:69","nodeType":"YulFunctionCall","src":"18949:103:69"},"nativeSrc":"18949:103:69","nodeType":"YulExpressionStatement","src":"18949:103:69"}]},"name":"abi_encode_tuple_t_contract$_IAccessControlManagerV8_$5080__to_t_address__fromStack_reversed","nativeSrc":"18773:286:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"18875:9:69","nodeType":"YulTypedName","src":"18875:9:69","type":""},{"name":"value0","nativeSrc":"18887:6:69","nodeType":"YulTypedName","src":"18887:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"18898:4:69","nodeType":"YulTypedName","src":"18898:4:69","type":""}],"src":"18773:286:69"},{"body":{"nativeSrc":"19130:51:69","nodeType":"YulBlock","src":"19130:51:69","statements":[{"nativeSrc":"19140:35:69","nodeType":"YulAssignment","src":"19140:35:69","value":{"arguments":[{"name":"value","nativeSrc":"19169:5:69","nodeType":"YulIdentifier","src":"19169:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"19151:17:69","nodeType":"YulIdentifier","src":"19151:17:69"},"nativeSrc":"19151:24:69","nodeType":"YulFunctionCall","src":"19151:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"19140:7:69","nodeType":"YulIdentifier","src":"19140:7:69"}]}]},"name":"cleanup_t_contract$_Comptroller_$9130","nativeSrc":"19065:116:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"19112:5:69","nodeType":"YulTypedName","src":"19112:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"19122:7:69","nodeType":"YulTypedName","src":"19122:7:69","type":""}],"src":"19065:116:69"},{"body":{"nativeSrc":"19250:99:69","nodeType":"YulBlock","src":"19250:99:69","statements":[{"body":{"nativeSrc":"19327:16:69","nodeType":"YulBlock","src":"19327:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"19336:1:69","nodeType":"YulLiteral","src":"19336:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"19339:1:69","nodeType":"YulLiteral","src":"19339:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"19329:6:69","nodeType":"YulIdentifier","src":"19329:6:69"},"nativeSrc":"19329:12:69","nodeType":"YulFunctionCall","src":"19329:12:69"},"nativeSrc":"19329:12:69","nodeType":"YulExpressionStatement","src":"19329:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"19273:5:69","nodeType":"YulIdentifier","src":"19273:5:69"},{"arguments":[{"name":"value","nativeSrc":"19318:5:69","nodeType":"YulIdentifier","src":"19318:5:69"}],"functionName":{"name":"cleanup_t_contract$_Comptroller_$9130","nativeSrc":"19280:37:69","nodeType":"YulIdentifier","src":"19280:37:69"},"nativeSrc":"19280:44:69","nodeType":"YulFunctionCall","src":"19280:44:69"}],"functionName":{"name":"eq","nativeSrc":"19270:2:69","nodeType":"YulIdentifier","src":"19270:2:69"},"nativeSrc":"19270:55:69","nodeType":"YulFunctionCall","src":"19270:55:69"}],"functionName":{"name":"iszero","nativeSrc":"19263:6:69","nodeType":"YulIdentifier","src":"19263:6:69"},"nativeSrc":"19263:63:69","nodeType":"YulFunctionCall","src":"19263:63:69"},"nativeSrc":"19260:83:69","nodeType":"YulIf","src":"19260:83:69"}]},"name":"validator_revert_t_contract$_Comptroller_$9130","nativeSrc":"19187:162:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"19243:5:69","nodeType":"YulTypedName","src":"19243:5:69","type":""}],"src":"19187:162:69"},{"body":{"nativeSrc":"19427:107:69","nodeType":"YulBlock","src":"19427:107:69","statements":[{"nativeSrc":"19437:29:69","nodeType":"YulAssignment","src":"19437:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"19459:6:69","nodeType":"YulIdentifier","src":"19459:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"19446:12:69","nodeType":"YulIdentifier","src":"19446:12:69"},"nativeSrc":"19446:20:69","nodeType":"YulFunctionCall","src":"19446:20:69"},"variableNames":[{"name":"value","nativeSrc":"19437:5:69","nodeType":"YulIdentifier","src":"19437:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"19522:5:69","nodeType":"YulIdentifier","src":"19522:5:69"}],"functionName":{"name":"validator_revert_t_contract$_Comptroller_$9130","nativeSrc":"19475:46:69","nodeType":"YulIdentifier","src":"19475:46:69"},"nativeSrc":"19475:53:69","nodeType":"YulFunctionCall","src":"19475:53:69"},"nativeSrc":"19475:53:69","nodeType":"YulExpressionStatement","src":"19475:53:69"}]},"name":"abi_decode_t_contract$_Comptroller_$9130","nativeSrc":"19355:179:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"19405:6:69","nodeType":"YulTypedName","src":"19405:6:69","type":""},{"name":"end","nativeSrc":"19413:3:69","nodeType":"YulTypedName","src":"19413:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"19421:5:69","nodeType":"YulTypedName","src":"19421:5:69","type":""}],"src":"19355:179:69"},{"body":{"nativeSrc":"19611:51:69","nodeType":"YulBlock","src":"19611:51:69","statements":[{"nativeSrc":"19621:35:69","nodeType":"YulAssignment","src":"19621:35:69","value":{"arguments":[{"name":"value","nativeSrc":"19650:5:69","nodeType":"YulIdentifier","src":"19650:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"19632:17:69","nodeType":"YulIdentifier","src":"19632:17:69"},"nativeSrc":"19632:24:69","nodeType":"YulFunctionCall","src":"19632:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"19621:7:69","nodeType":"YulIdentifier","src":"19621:7:69"}]}]},"name":"cleanup_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"19540:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"19593:5:69","nodeType":"YulTypedName","src":"19593:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"19603:7:69","nodeType":"YulTypedName","src":"19603:7:69","type":""}],"src":"19540:122:69"},{"body":{"nativeSrc":"19737:105:69","nodeType":"YulBlock","src":"19737:105:69","statements":[{"body":{"nativeSrc":"19820:16:69","nodeType":"YulBlock","src":"19820:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"19829:1:69","nodeType":"YulLiteral","src":"19829:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"19832:1:69","nodeType":"YulLiteral","src":"19832:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"19822:6:69","nodeType":"YulIdentifier","src":"19822:6:69"},"nativeSrc":"19822:12:69","nodeType":"YulFunctionCall","src":"19822:12:69"},"nativeSrc":"19822:12:69","nodeType":"YulExpressionStatement","src":"19822:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"19760:5:69","nodeType":"YulIdentifier","src":"19760:5:69"},{"arguments":[{"name":"value","nativeSrc":"19811:5:69","nodeType":"YulIdentifier","src":"19811:5:69"}],"functionName":{"name":"cleanup_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"19767:43:69","nodeType":"YulIdentifier","src":"19767:43:69"},"nativeSrc":"19767:50:69","nodeType":"YulFunctionCall","src":"19767:50:69"}],"functionName":{"name":"eq","nativeSrc":"19757:2:69","nodeType":"YulIdentifier","src":"19757:2:69"},"nativeSrc":"19757:61:69","nodeType":"YulFunctionCall","src":"19757:61:69"}],"functionName":{"name":"iszero","nativeSrc":"19750:6:69","nodeType":"YulIdentifier","src":"19750:6:69"},"nativeSrc":"19750:69:69","nodeType":"YulFunctionCall","src":"19750:69:69"},"nativeSrc":"19747:89:69","nodeType":"YulIf","src":"19747:89:69"}]},"name":"validator_revert_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"19668:174:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"19730:5:69","nodeType":"YulTypedName","src":"19730:5:69","type":""}],"src":"19668:174:69"},{"body":{"nativeSrc":"19926:113:69","nodeType":"YulBlock","src":"19926:113:69","statements":[{"nativeSrc":"19936:29:69","nodeType":"YulAssignment","src":"19936:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"19958:6:69","nodeType":"YulIdentifier","src":"19958:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"19945:12:69","nodeType":"YulIdentifier","src":"19945:12:69"},"nativeSrc":"19945:20:69","nodeType":"YulFunctionCall","src":"19945:20:69"},"variableNames":[{"name":"value","nativeSrc":"19936:5:69","nodeType":"YulIdentifier","src":"19936:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"20027:5:69","nodeType":"YulIdentifier","src":"20027:5:69"}],"functionName":{"name":"validator_revert_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"19974:52:69","nodeType":"YulIdentifier","src":"19974:52:69"},"nativeSrc":"19974:59:69","nodeType":"YulFunctionCall","src":"19974:59:69"},"nativeSrc":"19974:59:69","nodeType":"YulExpressionStatement","src":"19974:59:69"}]},"name":"abi_decode_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"19848:191:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"19904:6:69","nodeType":"YulTypedName","src":"19904:6:69","type":""},{"name":"end","nativeSrc":"19912:3:69","nodeType":"YulTypedName","src":"19912:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"19920:5:69","nodeType":"YulTypedName","src":"19920:5:69","type":""}],"src":"19848:191:69"},{"body":{"nativeSrc":"20208:694:69","nodeType":"YulBlock","src":"20208:694:69","statements":[{"body":{"nativeSrc":"20255:83:69","nodeType":"YulBlock","src":"20255:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"20257:77:69","nodeType":"YulIdentifier","src":"20257:77:69"},"nativeSrc":"20257:79:69","nodeType":"YulFunctionCall","src":"20257:79:69"},"nativeSrc":"20257:79:69","nodeType":"YulExpressionStatement","src":"20257:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"20229:7:69","nodeType":"YulIdentifier","src":"20229:7:69"},{"name":"headStart","nativeSrc":"20238:9:69","nodeType":"YulIdentifier","src":"20238:9:69"}],"functionName":{"name":"sub","nativeSrc":"20225:3:69","nodeType":"YulIdentifier","src":"20225:3:69"},"nativeSrc":"20225:23:69","nodeType":"YulFunctionCall","src":"20225:23:69"},{"kind":"number","nativeSrc":"20250:3:69","nodeType":"YulLiteral","src":"20250:3:69","type":"","value":"128"}],"functionName":{"name":"slt","nativeSrc":"20221:3:69","nodeType":"YulIdentifier","src":"20221:3:69"},"nativeSrc":"20221:33:69","nodeType":"YulFunctionCall","src":"20221:33:69"},"nativeSrc":"20218:120:69","nodeType":"YulIf","src":"20218:120:69"},{"nativeSrc":"20348:137:69","nodeType":"YulBlock","src":"20348:137:69","statements":[{"nativeSrc":"20363:15:69","nodeType":"YulVariableDeclaration","src":"20363:15:69","value":{"kind":"number","nativeSrc":"20377:1:69","nodeType":"YulLiteral","src":"20377:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"20367:6:69","nodeType":"YulTypedName","src":"20367:6:69","type":""}]},{"nativeSrc":"20392:83:69","nodeType":"YulAssignment","src":"20392:83:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"20447:9:69","nodeType":"YulIdentifier","src":"20447:9:69"},{"name":"offset","nativeSrc":"20458:6:69","nodeType":"YulIdentifier","src":"20458:6:69"}],"functionName":{"name":"add","nativeSrc":"20443:3:69","nodeType":"YulIdentifier","src":"20443:3:69"},"nativeSrc":"20443:22:69","nodeType":"YulFunctionCall","src":"20443:22:69"},{"name":"dataEnd","nativeSrc":"20467:7:69","nodeType":"YulIdentifier","src":"20467:7:69"}],"functionName":{"name":"abi_decode_t_contract$_Comptroller_$9130","nativeSrc":"20402:40:69","nodeType":"YulIdentifier","src":"20402:40:69"},"nativeSrc":"20402:73:69","nodeType":"YulFunctionCall","src":"20402:73:69"},"variableNames":[{"name":"value0","nativeSrc":"20392:6:69","nodeType":"YulIdentifier","src":"20392:6:69"}]}]},{"nativeSrc":"20495:144:69","nodeType":"YulBlock","src":"20495:144:69","statements":[{"nativeSrc":"20510:16:69","nodeType":"YulVariableDeclaration","src":"20510:16:69","value":{"kind":"number","nativeSrc":"20524:2:69","nodeType":"YulLiteral","src":"20524:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"20514:6:69","nodeType":"YulTypedName","src":"20514:6:69","type":""}]},{"nativeSrc":"20540:89:69","nodeType":"YulAssignment","src":"20540:89:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"20601:9:69","nodeType":"YulIdentifier","src":"20601:9:69"},{"name":"offset","nativeSrc":"20612:6:69","nodeType":"YulIdentifier","src":"20612:6:69"}],"functionName":{"name":"add","nativeSrc":"20597:3:69","nodeType":"YulIdentifier","src":"20597:3:69"},"nativeSrc":"20597:22:69","nodeType":"YulFunctionCall","src":"20597:22:69"},{"name":"dataEnd","nativeSrc":"20621:7:69","nodeType":"YulIdentifier","src":"20621:7:69"}],"functionName":{"name":"abi_decode_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"20550:46:69","nodeType":"YulIdentifier","src":"20550:46:69"},"nativeSrc":"20550:79:69","nodeType":"YulFunctionCall","src":"20550:79:69"},"variableNames":[{"name":"value1","nativeSrc":"20540:6:69","nodeType":"YulIdentifier","src":"20540:6:69"}]}]},{"nativeSrc":"20649:118:69","nodeType":"YulBlock","src":"20649:118:69","statements":[{"nativeSrc":"20664:16:69","nodeType":"YulVariableDeclaration","src":"20664:16:69","value":{"kind":"number","nativeSrc":"20678:2:69","nodeType":"YulLiteral","src":"20678:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"20668:6:69","nodeType":"YulTypedName","src":"20668:6:69","type":""}]},{"nativeSrc":"20694:63:69","nodeType":"YulAssignment","src":"20694:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"20729:9:69","nodeType":"YulIdentifier","src":"20729:9:69"},{"name":"offset","nativeSrc":"20740:6:69","nodeType":"YulIdentifier","src":"20740:6:69"}],"functionName":{"name":"add","nativeSrc":"20725:3:69","nodeType":"YulIdentifier","src":"20725:3:69"},"nativeSrc":"20725:22:69","nodeType":"YulFunctionCall","src":"20725:22:69"},{"name":"dataEnd","nativeSrc":"20749:7:69","nodeType":"YulIdentifier","src":"20749:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"20704:20:69","nodeType":"YulIdentifier","src":"20704:20:69"},"nativeSrc":"20704:53:69","nodeType":"YulFunctionCall","src":"20704:53:69"},"variableNames":[{"name":"value2","nativeSrc":"20694:6:69","nodeType":"YulIdentifier","src":"20694:6:69"}]}]},{"nativeSrc":"20777:118:69","nodeType":"YulBlock","src":"20777:118:69","statements":[{"nativeSrc":"20792:16:69","nodeType":"YulVariableDeclaration","src":"20792:16:69","value":{"kind":"number","nativeSrc":"20806:2:69","nodeType":"YulLiteral","src":"20806:2:69","type":"","value":"96"},"variables":[{"name":"offset","nativeSrc":"20796:6:69","nodeType":"YulTypedName","src":"20796:6:69","type":""}]},{"nativeSrc":"20822:63:69","nodeType":"YulAssignment","src":"20822:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"20857:9:69","nodeType":"YulIdentifier","src":"20857:9:69"},{"name":"offset","nativeSrc":"20868:6:69","nodeType":"YulIdentifier","src":"20868:6:69"}],"functionName":{"name":"add","nativeSrc":"20853:3:69","nodeType":"YulIdentifier","src":"20853:3:69"},"nativeSrc":"20853:22:69","nodeType":"YulFunctionCall","src":"20853:22:69"},{"name":"dataEnd","nativeSrc":"20877:7:69","nodeType":"YulIdentifier","src":"20877:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"20832:20:69","nodeType":"YulIdentifier","src":"20832:20:69"},"nativeSrc":"20832:53:69","nodeType":"YulFunctionCall","src":"20832:53:69"},"variableNames":[{"name":"value3","nativeSrc":"20822:6:69","nodeType":"YulIdentifier","src":"20822:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_Comptroller_$9130t_contract$_IERC20Upgradeable_$1352t_uint256t_address","nativeSrc":"20045:857:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"20154:9:69","nodeType":"YulTypedName","src":"20154:9:69","type":""},{"name":"dataEnd","nativeSrc":"20165:7:69","nodeType":"YulTypedName","src":"20165:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"20177:6:69","nodeType":"YulTypedName","src":"20177:6:69","type":""},{"name":"value1","nativeSrc":"20185:6:69","nodeType":"YulTypedName","src":"20185:6:69","type":""},{"name":"value2","nativeSrc":"20193:6:69","nodeType":"YulTypedName","src":"20193:6:69","type":""},{"name":"value3","nativeSrc":"20201:6:69","nodeType":"YulTypedName","src":"20201:6:69","type":""}],"src":"20045:857:69"},{"body":{"nativeSrc":"20950:48:69","nodeType":"YulBlock","src":"20950:48:69","statements":[{"nativeSrc":"20960:32:69","nodeType":"YulAssignment","src":"20960:32:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"20985:5:69","nodeType":"YulIdentifier","src":"20985:5:69"}],"functionName":{"name":"iszero","nativeSrc":"20978:6:69","nodeType":"YulIdentifier","src":"20978:6:69"},"nativeSrc":"20978:13:69","nodeType":"YulFunctionCall","src":"20978:13:69"}],"functionName":{"name":"iszero","nativeSrc":"20971:6:69","nodeType":"YulIdentifier","src":"20971:6:69"},"nativeSrc":"20971:21:69","nodeType":"YulFunctionCall","src":"20971:21:69"},"variableNames":[{"name":"cleaned","nativeSrc":"20960:7:69","nodeType":"YulIdentifier","src":"20960:7:69"}]}]},"name":"cleanup_t_bool","nativeSrc":"20908:90:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"20932:5:69","nodeType":"YulTypedName","src":"20932:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"20942:7:69","nodeType":"YulTypedName","src":"20942:7:69","type":""}],"src":"20908:90:69"},{"body":{"nativeSrc":"21063:50:69","nodeType":"YulBlock","src":"21063:50:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"21080:3:69","nodeType":"YulIdentifier","src":"21080:3:69"},{"arguments":[{"name":"value","nativeSrc":"21100:5:69","nodeType":"YulIdentifier","src":"21100:5:69"}],"functionName":{"name":"cleanup_t_bool","nativeSrc":"21085:14:69","nodeType":"YulIdentifier","src":"21085:14:69"},"nativeSrc":"21085:21:69","nodeType":"YulFunctionCall","src":"21085:21:69"}],"functionName":{"name":"mstore","nativeSrc":"21073:6:69","nodeType":"YulIdentifier","src":"21073:6:69"},"nativeSrc":"21073:34:69","nodeType":"YulFunctionCall","src":"21073:34:69"},"nativeSrc":"21073:34:69","nodeType":"YulExpressionStatement","src":"21073:34:69"}]},"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"21004:109:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"21051:5:69","nodeType":"YulTypedName","src":"21051:5:69","type":""},{"name":"pos","nativeSrc":"21058:3:69","nodeType":"YulTypedName","src":"21058:3:69","type":""}],"src":"21004:109:69"},{"body":{"nativeSrc":"21211:118:69","nodeType":"YulBlock","src":"21211:118:69","statements":[{"nativeSrc":"21221:26:69","nodeType":"YulAssignment","src":"21221:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"21233:9:69","nodeType":"YulIdentifier","src":"21233:9:69"},{"kind":"number","nativeSrc":"21244:2:69","nodeType":"YulLiteral","src":"21244:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"21229:3:69","nodeType":"YulIdentifier","src":"21229:3:69"},"nativeSrc":"21229:18:69","nodeType":"YulFunctionCall","src":"21229:18:69"},"variableNames":[{"name":"tail","nativeSrc":"21221:4:69","nodeType":"YulIdentifier","src":"21221:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"21295:6:69","nodeType":"YulIdentifier","src":"21295:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"21308:9:69","nodeType":"YulIdentifier","src":"21308:9:69"},{"kind":"number","nativeSrc":"21319:1:69","nodeType":"YulLiteral","src":"21319:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"21304:3:69","nodeType":"YulIdentifier","src":"21304:3:69"},"nativeSrc":"21304:17:69","nodeType":"YulFunctionCall","src":"21304:17:69"}],"functionName":{"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"21257:37:69","nodeType":"YulIdentifier","src":"21257:37:69"},"nativeSrc":"21257:65:69","nodeType":"YulFunctionCall","src":"21257:65:69"},"nativeSrc":"21257:65:69","nodeType":"YulExpressionStatement","src":"21257:65:69"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nativeSrc":"21119:210:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"21183:9:69","nodeType":"YulTypedName","src":"21183:9:69","type":""},{"name":"value0","nativeSrc":"21195:6:69","nodeType":"YulTypedName","src":"21195:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"21206:4:69","nodeType":"YulTypedName","src":"21206:4:69","type":""}],"src":"21119:210:69"},{"body":{"nativeSrc":"21421:66:69","nodeType":"YulBlock","src":"21421:66:69","statements":[{"nativeSrc":"21431:50:69","nodeType":"YulAssignment","src":"21431:50:69","value":{"arguments":[{"name":"value","nativeSrc":"21475:5:69","nodeType":"YulIdentifier","src":"21475:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"21444:30:69","nodeType":"YulIdentifier","src":"21444:30:69"},"nativeSrc":"21444:37:69","nodeType":"YulFunctionCall","src":"21444:37:69"},"variableNames":[{"name":"converted","nativeSrc":"21431:9:69","nodeType":"YulIdentifier","src":"21431:9:69"}]}]},"name":"convert_t_contract$_IERC20Upgradeable_$1352_to_t_address","nativeSrc":"21335:152:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"21401:5:69","nodeType":"YulTypedName","src":"21401:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"21411:9:69","nodeType":"YulTypedName","src":"21411:9:69","type":""}],"src":"21335:152:69"},{"body":{"nativeSrc":"21584:92:69","nodeType":"YulBlock","src":"21584:92:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"21601:3:69","nodeType":"YulIdentifier","src":"21601:3:69"},{"arguments":[{"name":"value","nativeSrc":"21663:5:69","nodeType":"YulIdentifier","src":"21663:5:69"}],"functionName":{"name":"convert_t_contract$_IERC20Upgradeable_$1352_to_t_address","nativeSrc":"21606:56:69","nodeType":"YulIdentifier","src":"21606:56:69"},"nativeSrc":"21606:63:69","nodeType":"YulFunctionCall","src":"21606:63:69"}],"functionName":{"name":"mstore","nativeSrc":"21594:6:69","nodeType":"YulIdentifier","src":"21594:6:69"},"nativeSrc":"21594:76:69","nodeType":"YulFunctionCall","src":"21594:76:69"},"nativeSrc":"21594:76:69","nodeType":"YulExpressionStatement","src":"21594:76:69"}]},"name":"abi_encode_t_contract$_IERC20Upgradeable_$1352_to_t_address_fromStack","nativeSrc":"21493:183:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"21572:5:69","nodeType":"YulTypedName","src":"21572:5:69","type":""},{"name":"pos","nativeSrc":"21579:3:69","nodeType":"YulTypedName","src":"21579:3:69","type":""}],"src":"21493:183:69"},{"body":{"nativeSrc":"21806:150:69","nodeType":"YulBlock","src":"21806:150:69","statements":[{"nativeSrc":"21816:26:69","nodeType":"YulAssignment","src":"21816:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"21828:9:69","nodeType":"YulIdentifier","src":"21828:9:69"},{"kind":"number","nativeSrc":"21839:2:69","nodeType":"YulLiteral","src":"21839:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"21824:3:69","nodeType":"YulIdentifier","src":"21824:3:69"},"nativeSrc":"21824:18:69","nodeType":"YulFunctionCall","src":"21824:18:69"},"variableNames":[{"name":"tail","nativeSrc":"21816:4:69","nodeType":"YulIdentifier","src":"21816:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"21922:6:69","nodeType":"YulIdentifier","src":"21922:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"21935:9:69","nodeType":"YulIdentifier","src":"21935:9:69"},{"kind":"number","nativeSrc":"21946:1:69","nodeType":"YulLiteral","src":"21946:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"21931:3:69","nodeType":"YulIdentifier","src":"21931:3:69"},"nativeSrc":"21931:17:69","nodeType":"YulFunctionCall","src":"21931:17:69"}],"functionName":{"name":"abi_encode_t_contract$_IERC20Upgradeable_$1352_to_t_address_fromStack","nativeSrc":"21852:69:69","nodeType":"YulIdentifier","src":"21852:69:69"},"nativeSrc":"21852:97:69","nodeType":"YulFunctionCall","src":"21852:97:69"},"nativeSrc":"21852:97:69","nodeType":"YulExpressionStatement","src":"21852:97:69"}]},"name":"abi_encode_tuple_t_contract$_IERC20Upgradeable_$1352__to_t_address__fromStack_reversed","nativeSrc":"21682:274:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"21778:9:69","nodeType":"YulTypedName","src":"21778:9:69","type":""},{"name":"value0","nativeSrc":"21790:6:69","nodeType":"YulTypedName","src":"21790:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"21801:4:69","nodeType":"YulTypedName","src":"21801:4:69","type":""}],"src":"21682:274:69"},{"body":{"nativeSrc":"21990:152:69","nodeType":"YulBlock","src":"21990:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"22007:1:69","nodeType":"YulLiteral","src":"22007:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"22010:77:69","nodeType":"YulLiteral","src":"22010:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"22000:6:69","nodeType":"YulIdentifier","src":"22000:6:69"},"nativeSrc":"22000:88:69","nodeType":"YulFunctionCall","src":"22000:88:69"},"nativeSrc":"22000:88:69","nodeType":"YulExpressionStatement","src":"22000:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"22104:1:69","nodeType":"YulLiteral","src":"22104:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"22107:4:69","nodeType":"YulLiteral","src":"22107:4:69","type":"","value":"0x32"}],"functionName":{"name":"mstore","nativeSrc":"22097:6:69","nodeType":"YulIdentifier","src":"22097:6:69"},"nativeSrc":"22097:15:69","nodeType":"YulFunctionCall","src":"22097:15:69"},"nativeSrc":"22097:15:69","nodeType":"YulExpressionStatement","src":"22097:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"22128:1:69","nodeType":"YulLiteral","src":"22128:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"22131:4:69","nodeType":"YulLiteral","src":"22131:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"22121:6:69","nodeType":"YulIdentifier","src":"22121:6:69"},"nativeSrc":"22121:15:69","nodeType":"YulFunctionCall","src":"22121:15:69"},"nativeSrc":"22121:15:69","nodeType":"YulExpressionStatement","src":"22121:15:69"}]},"name":"panic_error_0x32","nativeSrc":"21962:180:69","nodeType":"YulFunctionDefinition","src":"21962:180:69"},{"body":{"nativeSrc":"22224:66:69","nodeType":"YulBlock","src":"22224:66:69","statements":[{"nativeSrc":"22234:50:69","nodeType":"YulAssignment","src":"22234:50:69","value":{"arguments":[{"name":"value","nativeSrc":"22278:5:69","nodeType":"YulIdentifier","src":"22278:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"22247:30:69","nodeType":"YulIdentifier","src":"22247:30:69"},"nativeSrc":"22247:37:69","nodeType":"YulFunctionCall","src":"22247:37:69"},"variableNames":[{"name":"converted","nativeSrc":"22234:9:69","nodeType":"YulIdentifier","src":"22234:9:69"}]}]},"name":"convert_t_contract$_VToken_$15506_to_t_address","nativeSrc":"22148:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"22204:5:69","nodeType":"YulTypedName","src":"22204:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"22214:9:69","nodeType":"YulTypedName","src":"22214:9:69","type":""}],"src":"22148:142:69"},{"body":{"nativeSrc":"22377:82:69","nodeType":"YulBlock","src":"22377:82:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"22394:3:69","nodeType":"YulIdentifier","src":"22394:3:69"},{"arguments":[{"name":"value","nativeSrc":"22446:5:69","nodeType":"YulIdentifier","src":"22446:5:69"}],"functionName":{"name":"convert_t_contract$_VToken_$15506_to_t_address","nativeSrc":"22399:46:69","nodeType":"YulIdentifier","src":"22399:46:69"},"nativeSrc":"22399:53:69","nodeType":"YulFunctionCall","src":"22399:53:69"}],"functionName":{"name":"mstore","nativeSrc":"22387:6:69","nodeType":"YulIdentifier","src":"22387:6:69"},"nativeSrc":"22387:66:69","nodeType":"YulFunctionCall","src":"22387:66:69"},"nativeSrc":"22387:66:69","nodeType":"YulExpressionStatement","src":"22387:66:69"}]},"name":"abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack","nativeSrc":"22296:163:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"22365:5:69","nodeType":"YulTypedName","src":"22365:5:69","type":""},{"name":"pos","nativeSrc":"22372:3:69","nodeType":"YulTypedName","src":"22372:3:69","type":""}],"src":"22296:163:69"},{"body":{"nativeSrc":"22579:140:69","nodeType":"YulBlock","src":"22579:140:69","statements":[{"nativeSrc":"22589:26:69","nodeType":"YulAssignment","src":"22589:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"22601:9:69","nodeType":"YulIdentifier","src":"22601:9:69"},{"kind":"number","nativeSrc":"22612:2:69","nodeType":"YulLiteral","src":"22612:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"22597:3:69","nodeType":"YulIdentifier","src":"22597:3:69"},"nativeSrc":"22597:18:69","nodeType":"YulFunctionCall","src":"22597:18:69"},"variableNames":[{"name":"tail","nativeSrc":"22589:4:69","nodeType":"YulIdentifier","src":"22589:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"22685:6:69","nodeType":"YulIdentifier","src":"22685:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"22698:9:69","nodeType":"YulIdentifier","src":"22698:9:69"},{"kind":"number","nativeSrc":"22709:1:69","nodeType":"YulLiteral","src":"22709:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"22694:3:69","nodeType":"YulIdentifier","src":"22694:3:69"},"nativeSrc":"22694:17:69","nodeType":"YulFunctionCall","src":"22694:17:69"}],"functionName":{"name":"abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack","nativeSrc":"22625:59:69","nodeType":"YulIdentifier","src":"22625:59:69"},"nativeSrc":"22625:87:69","nodeType":"YulFunctionCall","src":"22625:87:69"},"nativeSrc":"22625:87:69","nodeType":"YulExpressionStatement","src":"22625:87:69"}]},"name":"abi_encode_tuple_t_contract$_VToken_$15506__to_t_address__fromStack_reversed","nativeSrc":"22465:254:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"22551:9:69","nodeType":"YulTypedName","src":"22551:9:69","type":""},{"name":"value0","nativeSrc":"22563:6:69","nodeType":"YulTypedName","src":"22563:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"22574:4:69","nodeType":"YulTypedName","src":"22574:4:69","type":""}],"src":"22465:254:69"},{"body":{"nativeSrc":"22765:76:69","nodeType":"YulBlock","src":"22765:76:69","statements":[{"body":{"nativeSrc":"22819:16:69","nodeType":"YulBlock","src":"22819:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"22828:1:69","nodeType":"YulLiteral","src":"22828:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"22831:1:69","nodeType":"YulLiteral","src":"22831:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"22821:6:69","nodeType":"YulIdentifier","src":"22821:6:69"},"nativeSrc":"22821:12:69","nodeType":"YulFunctionCall","src":"22821:12:69"},"nativeSrc":"22821:12:69","nodeType":"YulExpressionStatement","src":"22821:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"22788:5:69","nodeType":"YulIdentifier","src":"22788:5:69"},{"arguments":[{"name":"value","nativeSrc":"22810:5:69","nodeType":"YulIdentifier","src":"22810:5:69"}],"functionName":{"name":"cleanup_t_bool","nativeSrc":"22795:14:69","nodeType":"YulIdentifier","src":"22795:14:69"},"nativeSrc":"22795:21:69","nodeType":"YulFunctionCall","src":"22795:21:69"}],"functionName":{"name":"eq","nativeSrc":"22785:2:69","nodeType":"YulIdentifier","src":"22785:2:69"},"nativeSrc":"22785:32:69","nodeType":"YulFunctionCall","src":"22785:32:69"}],"functionName":{"name":"iszero","nativeSrc":"22778:6:69","nodeType":"YulIdentifier","src":"22778:6:69"},"nativeSrc":"22778:40:69","nodeType":"YulFunctionCall","src":"22778:40:69"},"nativeSrc":"22775:60:69","nodeType":"YulIf","src":"22775:60:69"}]},"name":"validator_revert_t_bool","nativeSrc":"22725:116:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"22758:5:69","nodeType":"YulTypedName","src":"22758:5:69","type":""}],"src":"22725:116:69"},{"body":{"nativeSrc":"22907:77:69","nodeType":"YulBlock","src":"22907:77:69","statements":[{"nativeSrc":"22917:22:69","nodeType":"YulAssignment","src":"22917:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"22932:6:69","nodeType":"YulIdentifier","src":"22932:6:69"}],"functionName":{"name":"mload","nativeSrc":"22926:5:69","nodeType":"YulIdentifier","src":"22926:5:69"},"nativeSrc":"22926:13:69","nodeType":"YulFunctionCall","src":"22926:13:69"},"variableNames":[{"name":"value","nativeSrc":"22917:5:69","nodeType":"YulIdentifier","src":"22917:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"22972:5:69","nodeType":"YulIdentifier","src":"22972:5:69"}],"functionName":{"name":"validator_revert_t_bool","nativeSrc":"22948:23:69","nodeType":"YulIdentifier","src":"22948:23:69"},"nativeSrc":"22948:30:69","nodeType":"YulFunctionCall","src":"22948:30:69"},"nativeSrc":"22948:30:69","nodeType":"YulExpressionStatement","src":"22948:30:69"}]},"name":"abi_decode_t_bool_fromMemory","nativeSrc":"22847:137:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"22885:6:69","nodeType":"YulTypedName","src":"22885:6:69","type":""},{"name":"end","nativeSrc":"22893:3:69","nodeType":"YulTypedName","src":"22893:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"22901:5:69","nodeType":"YulTypedName","src":"22901:5:69","type":""}],"src":"22847:137:69"},{"body":{"nativeSrc":"23064:271:69","nodeType":"YulBlock","src":"23064:271:69","statements":[{"body":{"nativeSrc":"23110:83:69","nodeType":"YulBlock","src":"23110:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"23112:77:69","nodeType":"YulIdentifier","src":"23112:77:69"},"nativeSrc":"23112:79:69","nodeType":"YulFunctionCall","src":"23112:79:69"},"nativeSrc":"23112:79:69","nodeType":"YulExpressionStatement","src":"23112:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"23085:7:69","nodeType":"YulIdentifier","src":"23085:7:69"},{"name":"headStart","nativeSrc":"23094:9:69","nodeType":"YulIdentifier","src":"23094:9:69"}],"functionName":{"name":"sub","nativeSrc":"23081:3:69","nodeType":"YulIdentifier","src":"23081:3:69"},"nativeSrc":"23081:23:69","nodeType":"YulFunctionCall","src":"23081:23:69"},{"kind":"number","nativeSrc":"23106:2:69","nodeType":"YulLiteral","src":"23106:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"23077:3:69","nodeType":"YulIdentifier","src":"23077:3:69"},"nativeSrc":"23077:32:69","nodeType":"YulFunctionCall","src":"23077:32:69"},"nativeSrc":"23074:119:69","nodeType":"YulIf","src":"23074:119:69"},{"nativeSrc":"23203:125:69","nodeType":"YulBlock","src":"23203:125:69","statements":[{"nativeSrc":"23218:15:69","nodeType":"YulVariableDeclaration","src":"23218:15:69","value":{"kind":"number","nativeSrc":"23232:1:69","nodeType":"YulLiteral","src":"23232:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"23222:6:69","nodeType":"YulTypedName","src":"23222:6:69","type":""}]},{"nativeSrc":"23247:71:69","nodeType":"YulAssignment","src":"23247:71:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"23290:9:69","nodeType":"YulIdentifier","src":"23290:9:69"},{"name":"offset","nativeSrc":"23301:6:69","nodeType":"YulIdentifier","src":"23301:6:69"}],"functionName":{"name":"add","nativeSrc":"23286:3:69","nodeType":"YulIdentifier","src":"23286:3:69"},"nativeSrc":"23286:22:69","nodeType":"YulFunctionCall","src":"23286:22:69"},{"name":"dataEnd","nativeSrc":"23310:7:69","nodeType":"YulIdentifier","src":"23310:7:69"}],"functionName":{"name":"abi_decode_t_bool_fromMemory","nativeSrc":"23257:28:69","nodeType":"YulIdentifier","src":"23257:28:69"},"nativeSrc":"23257:61:69","nodeType":"YulFunctionCall","src":"23257:61:69"},"variableNames":[{"name":"value0","nativeSrc":"23247:6:69","nodeType":"YulIdentifier","src":"23247:6:69"}]}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nativeSrc":"22990:345:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"23034:9:69","nodeType":"YulTypedName","src":"23034:9:69","type":""},{"name":"dataEnd","nativeSrc":"23045:7:69","nodeType":"YulTypedName","src":"23045:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"23057:6:69","nodeType":"YulTypedName","src":"23057:6:69","type":""}],"src":"22990:345:69"},{"body":{"nativeSrc":"23437:73:69","nodeType":"YulBlock","src":"23437:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"23454:3:69","nodeType":"YulIdentifier","src":"23454:3:69"},{"name":"length","nativeSrc":"23459:6:69","nodeType":"YulIdentifier","src":"23459:6:69"}],"functionName":{"name":"mstore","nativeSrc":"23447:6:69","nodeType":"YulIdentifier","src":"23447:6:69"},"nativeSrc":"23447:19:69","nodeType":"YulFunctionCall","src":"23447:19:69"},"nativeSrc":"23447:19:69","nodeType":"YulExpressionStatement","src":"23447:19:69"},{"nativeSrc":"23475:29:69","nodeType":"YulAssignment","src":"23475:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"23494:3:69","nodeType":"YulIdentifier","src":"23494:3:69"},{"kind":"number","nativeSrc":"23499:4:69","nodeType":"YulLiteral","src":"23499:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"23490:3:69","nodeType":"YulIdentifier","src":"23490:3:69"},"nativeSrc":"23490:14:69","nodeType":"YulFunctionCall","src":"23490:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"23475:11:69","nodeType":"YulIdentifier","src":"23475:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"23341:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"23409:3:69","nodeType":"YulTypedName","src":"23409:3:69","type":""},{"name":"length","nativeSrc":"23414:6:69","nodeType":"YulTypedName","src":"23414:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"23425:11:69","nodeType":"YulTypedName","src":"23425:11:69","type":""}],"src":"23341:169:69"},{"body":{"nativeSrc":"23622:65:69","nodeType":"YulBlock","src":"23622:65:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"23644:6:69","nodeType":"YulIdentifier","src":"23644:6:69"},{"kind":"number","nativeSrc":"23652:1:69","nodeType":"YulLiteral","src":"23652:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"23640:3:69","nodeType":"YulIdentifier","src":"23640:3:69"},"nativeSrc":"23640:14:69","nodeType":"YulFunctionCall","src":"23640:14:69"},{"hexValue":"6d61726b6574206d757374206265206c6973746564","kind":"string","nativeSrc":"23656:23:69","nodeType":"YulLiteral","src":"23656:23:69","type":"","value":"market must be listed"}],"functionName":{"name":"mstore","nativeSrc":"23633:6:69","nodeType":"YulIdentifier","src":"23633:6:69"},"nativeSrc":"23633:47:69","nodeType":"YulFunctionCall","src":"23633:47:69"},"nativeSrc":"23633:47:69","nodeType":"YulExpressionStatement","src":"23633:47:69"}]},"name":"store_literal_in_memory_8d6cda2e8214bcdab6eb9bde4767020b52a0b58abe9235e475535a272dbeb6e1","nativeSrc":"23516:171:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"23614:6:69","nodeType":"YulTypedName","src":"23614:6:69","type":""}],"src":"23516:171:69"},{"body":{"nativeSrc":"23839:220:69","nodeType":"YulBlock","src":"23839:220:69","statements":[{"nativeSrc":"23849:74:69","nodeType":"YulAssignment","src":"23849:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"23915:3:69","nodeType":"YulIdentifier","src":"23915:3:69"},{"kind":"number","nativeSrc":"23920:2:69","nodeType":"YulLiteral","src":"23920:2:69","type":"","value":"21"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"23856:58:69","nodeType":"YulIdentifier","src":"23856:58:69"},"nativeSrc":"23856:67:69","nodeType":"YulFunctionCall","src":"23856:67:69"},"variableNames":[{"name":"pos","nativeSrc":"23849:3:69","nodeType":"YulIdentifier","src":"23849:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"24021:3:69","nodeType":"YulIdentifier","src":"24021:3:69"}],"functionName":{"name":"store_literal_in_memory_8d6cda2e8214bcdab6eb9bde4767020b52a0b58abe9235e475535a272dbeb6e1","nativeSrc":"23932:88:69","nodeType":"YulIdentifier","src":"23932:88:69"},"nativeSrc":"23932:93:69","nodeType":"YulFunctionCall","src":"23932:93:69"},"nativeSrc":"23932:93:69","nodeType":"YulExpressionStatement","src":"23932:93:69"},{"nativeSrc":"24034:19:69","nodeType":"YulAssignment","src":"24034:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"24045:3:69","nodeType":"YulIdentifier","src":"24045:3:69"},{"kind":"number","nativeSrc":"24050:2:69","nodeType":"YulLiteral","src":"24050:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"24041:3:69","nodeType":"YulIdentifier","src":"24041:3:69"},"nativeSrc":"24041:12:69","nodeType":"YulFunctionCall","src":"24041:12:69"},"variableNames":[{"name":"end","nativeSrc":"24034:3:69","nodeType":"YulIdentifier","src":"24034:3:69"}]}]},"name":"abi_encode_t_stringliteral_8d6cda2e8214bcdab6eb9bde4767020b52a0b58abe9235e475535a272dbeb6e1_to_t_string_memory_ptr_fromStack","nativeSrc":"23693:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"23827:3:69","nodeType":"YulTypedName","src":"23827:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"23835:3:69","nodeType":"YulTypedName","src":"23835:3:69","type":""}],"src":"23693:366:69"},{"body":{"nativeSrc":"24236:248:69","nodeType":"YulBlock","src":"24236:248:69","statements":[{"nativeSrc":"24246:26:69","nodeType":"YulAssignment","src":"24246:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"24258:9:69","nodeType":"YulIdentifier","src":"24258:9:69"},{"kind":"number","nativeSrc":"24269:2:69","nodeType":"YulLiteral","src":"24269:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"24254:3:69","nodeType":"YulIdentifier","src":"24254:3:69"},"nativeSrc":"24254:18:69","nodeType":"YulFunctionCall","src":"24254:18:69"},"variableNames":[{"name":"tail","nativeSrc":"24246:4:69","nodeType":"YulIdentifier","src":"24246:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"24293:9:69","nodeType":"YulIdentifier","src":"24293:9:69"},{"kind":"number","nativeSrc":"24304:1:69","nodeType":"YulLiteral","src":"24304:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"24289:3:69","nodeType":"YulIdentifier","src":"24289:3:69"},"nativeSrc":"24289:17:69","nodeType":"YulFunctionCall","src":"24289:17:69"},{"arguments":[{"name":"tail","nativeSrc":"24312:4:69","nodeType":"YulIdentifier","src":"24312:4:69"},{"name":"headStart","nativeSrc":"24318:9:69","nodeType":"YulIdentifier","src":"24318:9:69"}],"functionName":{"name":"sub","nativeSrc":"24308:3:69","nodeType":"YulIdentifier","src":"24308:3:69"},"nativeSrc":"24308:20:69","nodeType":"YulFunctionCall","src":"24308:20:69"}],"functionName":{"name":"mstore","nativeSrc":"24282:6:69","nodeType":"YulIdentifier","src":"24282:6:69"},"nativeSrc":"24282:47:69","nodeType":"YulFunctionCall","src":"24282:47:69"},"nativeSrc":"24282:47:69","nodeType":"YulExpressionStatement","src":"24282:47:69"},{"nativeSrc":"24338:139:69","nodeType":"YulAssignment","src":"24338:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"24472:4:69","nodeType":"YulIdentifier","src":"24472:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_8d6cda2e8214bcdab6eb9bde4767020b52a0b58abe9235e475535a272dbeb6e1_to_t_string_memory_ptr_fromStack","nativeSrc":"24346:124:69","nodeType":"YulIdentifier","src":"24346:124:69"},"nativeSrc":"24346:131:69","nodeType":"YulFunctionCall","src":"24346:131:69"},"variableNames":[{"name":"tail","nativeSrc":"24338:4:69","nodeType":"YulIdentifier","src":"24338:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_8d6cda2e8214bcdab6eb9bde4767020b52a0b58abe9235e475535a272dbeb6e1__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"24065:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"24216:9:69","nodeType":"YulTypedName","src":"24216:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"24231:4:69","nodeType":"YulTypedName","src":"24231:4:69","type":""}],"src":"24065:419:69"},{"body":{"nativeSrc":"24553:80:69","nodeType":"YulBlock","src":"24553:80:69","statements":[{"nativeSrc":"24563:22:69","nodeType":"YulAssignment","src":"24563:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"24578:6:69","nodeType":"YulIdentifier","src":"24578:6:69"}],"functionName":{"name":"mload","nativeSrc":"24572:5:69","nodeType":"YulIdentifier","src":"24572:5:69"},"nativeSrc":"24572:13:69","nodeType":"YulFunctionCall","src":"24572:13:69"},"variableNames":[{"name":"value","nativeSrc":"24563:5:69","nodeType":"YulIdentifier","src":"24563:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"24621:5:69","nodeType":"YulIdentifier","src":"24621:5:69"}],"functionName":{"name":"validator_revert_t_uint256","nativeSrc":"24594:26:69","nodeType":"YulIdentifier","src":"24594:26:69"},"nativeSrc":"24594:33:69","nodeType":"YulFunctionCall","src":"24594:33:69"},"nativeSrc":"24594:33:69","nodeType":"YulExpressionStatement","src":"24594:33:69"}]},"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"24490:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"24531:6:69","nodeType":"YulTypedName","src":"24531:6:69","type":""},{"name":"end","nativeSrc":"24539:3:69","nodeType":"YulTypedName","src":"24539:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"24547:5:69","nodeType":"YulTypedName","src":"24547:5:69","type":""}],"src":"24490:143:69"},{"body":{"nativeSrc":"24716:274:69","nodeType":"YulBlock","src":"24716:274:69","statements":[{"body":{"nativeSrc":"24762:83:69","nodeType":"YulBlock","src":"24762:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"24764:77:69","nodeType":"YulIdentifier","src":"24764:77:69"},"nativeSrc":"24764:79:69","nodeType":"YulFunctionCall","src":"24764:79:69"},"nativeSrc":"24764:79:69","nodeType":"YulExpressionStatement","src":"24764:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"24737:7:69","nodeType":"YulIdentifier","src":"24737:7:69"},{"name":"headStart","nativeSrc":"24746:9:69","nodeType":"YulIdentifier","src":"24746:9:69"}],"functionName":{"name":"sub","nativeSrc":"24733:3:69","nodeType":"YulIdentifier","src":"24733:3:69"},"nativeSrc":"24733:23:69","nodeType":"YulFunctionCall","src":"24733:23:69"},{"kind":"number","nativeSrc":"24758:2:69","nodeType":"YulLiteral","src":"24758:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"24729:3:69","nodeType":"YulIdentifier","src":"24729:3:69"},"nativeSrc":"24729:32:69","nodeType":"YulFunctionCall","src":"24729:32:69"},"nativeSrc":"24726:119:69","nodeType":"YulIf","src":"24726:119:69"},{"nativeSrc":"24855:128:69","nodeType":"YulBlock","src":"24855:128:69","statements":[{"nativeSrc":"24870:15:69","nodeType":"YulVariableDeclaration","src":"24870:15:69","value":{"kind":"number","nativeSrc":"24884:1:69","nodeType":"YulLiteral","src":"24884:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"24874:6:69","nodeType":"YulTypedName","src":"24874:6:69","type":""}]},{"nativeSrc":"24899:74:69","nodeType":"YulAssignment","src":"24899:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"24945:9:69","nodeType":"YulIdentifier","src":"24945:9:69"},{"name":"offset","nativeSrc":"24956:6:69","nodeType":"YulIdentifier","src":"24956:6:69"}],"functionName":{"name":"add","nativeSrc":"24941:3:69","nodeType":"YulIdentifier","src":"24941:3:69"},"nativeSrc":"24941:22:69","nodeType":"YulFunctionCall","src":"24941:22:69"},{"name":"dataEnd","nativeSrc":"24965:7:69","nodeType":"YulIdentifier","src":"24965:7:69"}],"functionName":{"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"24909:31:69","nodeType":"YulIdentifier","src":"24909:31:69"},"nativeSrc":"24909:64:69","nodeType":"YulFunctionCall","src":"24909:64:69"},"variableNames":[{"name":"value0","nativeSrc":"24899:6:69","nodeType":"YulIdentifier","src":"24899:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nativeSrc":"24639:351:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"24686:9:69","nodeType":"YulTypedName","src":"24686:9:69","type":""},{"name":"dataEnd","nativeSrc":"24697:7:69","nodeType":"YulTypedName","src":"24697:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"24709:6:69","nodeType":"YulTypedName","src":"24709:6:69","type":""}],"src":"24639:351:69"},{"body":{"nativeSrc":"25102:120:69","nodeType":"YulBlock","src":"25102:120:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"25124:6:69","nodeType":"YulIdentifier","src":"25124:6:69"},{"kind":"number","nativeSrc":"25132:1:69","nodeType":"YulLiteral","src":"25132:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"25120:3:69","nodeType":"YulIdentifier","src":"25120:3:69"},"nativeSrc":"25120:14:69","nodeType":"YulFunctionCall","src":"25120:14:69"},{"hexValue":"4f6e6c7920636f6d7074726f6c6c65722063616e2063616c6c20746869732066","kind":"string","nativeSrc":"25136:34:69","nodeType":"YulLiteral","src":"25136:34:69","type":"","value":"Only comptroller can call this f"}],"functionName":{"name":"mstore","nativeSrc":"25113:6:69","nodeType":"YulIdentifier","src":"25113:6:69"},"nativeSrc":"25113:58:69","nodeType":"YulFunctionCall","src":"25113:58:69"},"nativeSrc":"25113:58:69","nodeType":"YulExpressionStatement","src":"25113:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"25192:6:69","nodeType":"YulIdentifier","src":"25192:6:69"},{"kind":"number","nativeSrc":"25200:2:69","nodeType":"YulLiteral","src":"25200:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"25188:3:69","nodeType":"YulIdentifier","src":"25188:3:69"},"nativeSrc":"25188:15:69","nodeType":"YulFunctionCall","src":"25188:15:69"},{"hexValue":"756e6374696f6e","kind":"string","nativeSrc":"25205:9:69","nodeType":"YulLiteral","src":"25205:9:69","type":"","value":"unction"}],"functionName":{"name":"mstore","nativeSrc":"25181:6:69","nodeType":"YulIdentifier","src":"25181:6:69"},"nativeSrc":"25181:34:69","nodeType":"YulFunctionCall","src":"25181:34:69"},"nativeSrc":"25181:34:69","nodeType":"YulExpressionStatement","src":"25181:34:69"}]},"name":"store_literal_in_memory_8ae9d8b8cfc154970c71fdcc07f9eca5337f7fb885232e7023c4ffdc94dd950d","nativeSrc":"24996:226:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"25094:6:69","nodeType":"YulTypedName","src":"25094:6:69","type":""}],"src":"24996:226:69"},{"body":{"nativeSrc":"25374:220:69","nodeType":"YulBlock","src":"25374:220:69","statements":[{"nativeSrc":"25384:74:69","nodeType":"YulAssignment","src":"25384:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"25450:3:69","nodeType":"YulIdentifier","src":"25450:3:69"},{"kind":"number","nativeSrc":"25455:2:69","nodeType":"YulLiteral","src":"25455:2:69","type":"","value":"39"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"25391:58:69","nodeType":"YulIdentifier","src":"25391:58:69"},"nativeSrc":"25391:67:69","nodeType":"YulFunctionCall","src":"25391:67:69"},"variableNames":[{"name":"pos","nativeSrc":"25384:3:69","nodeType":"YulIdentifier","src":"25384:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"25556:3:69","nodeType":"YulIdentifier","src":"25556:3:69"}],"functionName":{"name":"store_literal_in_memory_8ae9d8b8cfc154970c71fdcc07f9eca5337f7fb885232e7023c4ffdc94dd950d","nativeSrc":"25467:88:69","nodeType":"YulIdentifier","src":"25467:88:69"},"nativeSrc":"25467:93:69","nodeType":"YulFunctionCall","src":"25467:93:69"},"nativeSrc":"25467:93:69","nodeType":"YulExpressionStatement","src":"25467:93:69"},{"nativeSrc":"25569:19:69","nodeType":"YulAssignment","src":"25569:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"25580:3:69","nodeType":"YulIdentifier","src":"25580:3:69"},{"kind":"number","nativeSrc":"25585:2:69","nodeType":"YulLiteral","src":"25585:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"25576:3:69","nodeType":"YulIdentifier","src":"25576:3:69"},"nativeSrc":"25576:12:69","nodeType":"YulFunctionCall","src":"25576:12:69"},"variableNames":[{"name":"end","nativeSrc":"25569:3:69","nodeType":"YulIdentifier","src":"25569:3:69"}]}]},"name":"abi_encode_t_stringliteral_8ae9d8b8cfc154970c71fdcc07f9eca5337f7fb885232e7023c4ffdc94dd950d_to_t_string_memory_ptr_fromStack","nativeSrc":"25228:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"25362:3:69","nodeType":"YulTypedName","src":"25362:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"25370:3:69","nodeType":"YulTypedName","src":"25370:3:69","type":""}],"src":"25228:366:69"},{"body":{"nativeSrc":"25771:248:69","nodeType":"YulBlock","src":"25771:248:69","statements":[{"nativeSrc":"25781:26:69","nodeType":"YulAssignment","src":"25781:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"25793:9:69","nodeType":"YulIdentifier","src":"25793:9:69"},{"kind":"number","nativeSrc":"25804:2:69","nodeType":"YulLiteral","src":"25804:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"25789:3:69","nodeType":"YulIdentifier","src":"25789:3:69"},"nativeSrc":"25789:18:69","nodeType":"YulFunctionCall","src":"25789:18:69"},"variableNames":[{"name":"tail","nativeSrc":"25781:4:69","nodeType":"YulIdentifier","src":"25781:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"25828:9:69","nodeType":"YulIdentifier","src":"25828:9:69"},{"kind":"number","nativeSrc":"25839:1:69","nodeType":"YulLiteral","src":"25839:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"25824:3:69","nodeType":"YulIdentifier","src":"25824:3:69"},"nativeSrc":"25824:17:69","nodeType":"YulFunctionCall","src":"25824:17:69"},{"arguments":[{"name":"tail","nativeSrc":"25847:4:69","nodeType":"YulIdentifier","src":"25847:4:69"},{"name":"headStart","nativeSrc":"25853:9:69","nodeType":"YulIdentifier","src":"25853:9:69"}],"functionName":{"name":"sub","nativeSrc":"25843:3:69","nodeType":"YulIdentifier","src":"25843:3:69"},"nativeSrc":"25843:20:69","nodeType":"YulFunctionCall","src":"25843:20:69"}],"functionName":{"name":"mstore","nativeSrc":"25817:6:69","nodeType":"YulIdentifier","src":"25817:6:69"},"nativeSrc":"25817:47:69","nodeType":"YulFunctionCall","src":"25817:47:69"},"nativeSrc":"25817:47:69","nodeType":"YulExpressionStatement","src":"25817:47:69"},{"nativeSrc":"25873:139:69","nodeType":"YulAssignment","src":"25873:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"26007:4:69","nodeType":"YulIdentifier","src":"26007:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_8ae9d8b8cfc154970c71fdcc07f9eca5337f7fb885232e7023c4ffdc94dd950d_to_t_string_memory_ptr_fromStack","nativeSrc":"25881:124:69","nodeType":"YulIdentifier","src":"25881:124:69"},"nativeSrc":"25881:131:69","nodeType":"YulFunctionCall","src":"25881:131:69"},"variableNames":[{"name":"tail","nativeSrc":"25873:4:69","nodeType":"YulIdentifier","src":"25873:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_8ae9d8b8cfc154970c71fdcc07f9eca5337f7fb885232e7023c4ffdc94dd950d__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"25600:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"25751:9:69","nodeType":"YulTypedName","src":"25751:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"25766:4:69","nodeType":"YulTypedName","src":"25766:4:69","type":""}],"src":"25600:419:69"},{"body":{"nativeSrc":"26131:69:69","nodeType":"YulBlock","src":"26131:69:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"26153:6:69","nodeType":"YulIdentifier","src":"26153:6:69"},{"kind":"number","nativeSrc":"26161:1:69","nodeType":"YulLiteral","src":"26161:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"26149:3:69","nodeType":"YulIdentifier","src":"26149:3:69"},"nativeSrc":"26149:14:69","nodeType":"YulFunctionCall","src":"26149:14:69"},{"hexValue":"54696d652d6261736564206f7065726174696f6e206f6e6c79","kind":"string","nativeSrc":"26165:27:69","nodeType":"YulLiteral","src":"26165:27:69","type":"","value":"Time-based operation only"}],"functionName":{"name":"mstore","nativeSrc":"26142:6:69","nodeType":"YulIdentifier","src":"26142:6:69"},"nativeSrc":"26142:51:69","nodeType":"YulFunctionCall","src":"26142:51:69"},"nativeSrc":"26142:51:69","nodeType":"YulExpressionStatement","src":"26142:51:69"}]},"name":"store_literal_in_memory_36bf5156a09fb782d0af3560e4601cbf2cedc5155a8996d8781f3cb033938025","nativeSrc":"26025:175:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"26123:6:69","nodeType":"YulTypedName","src":"26123:6:69","type":""}],"src":"26025:175:69"},{"body":{"nativeSrc":"26352:220:69","nodeType":"YulBlock","src":"26352:220:69","statements":[{"nativeSrc":"26362:74:69","nodeType":"YulAssignment","src":"26362:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"26428:3:69","nodeType":"YulIdentifier","src":"26428:3:69"},{"kind":"number","nativeSrc":"26433:2:69","nodeType":"YulLiteral","src":"26433:2:69","type":"","value":"25"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"26369:58:69","nodeType":"YulIdentifier","src":"26369:58:69"},"nativeSrc":"26369:67:69","nodeType":"YulFunctionCall","src":"26369:67:69"},"variableNames":[{"name":"pos","nativeSrc":"26362:3:69","nodeType":"YulIdentifier","src":"26362:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"26534:3:69","nodeType":"YulIdentifier","src":"26534:3:69"}],"functionName":{"name":"store_literal_in_memory_36bf5156a09fb782d0af3560e4601cbf2cedc5155a8996d8781f3cb033938025","nativeSrc":"26445:88:69","nodeType":"YulIdentifier","src":"26445:88:69"},"nativeSrc":"26445:93:69","nodeType":"YulFunctionCall","src":"26445:93:69"},"nativeSrc":"26445:93:69","nodeType":"YulExpressionStatement","src":"26445:93:69"},{"nativeSrc":"26547:19:69","nodeType":"YulAssignment","src":"26547:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"26558:3:69","nodeType":"YulIdentifier","src":"26558:3:69"},{"kind":"number","nativeSrc":"26563:2:69","nodeType":"YulLiteral","src":"26563:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"26554:3:69","nodeType":"YulIdentifier","src":"26554:3:69"},"nativeSrc":"26554:12:69","nodeType":"YulFunctionCall","src":"26554:12:69"},"variableNames":[{"name":"end","nativeSrc":"26547:3:69","nodeType":"YulIdentifier","src":"26547:3:69"}]}]},"name":"abi_encode_t_stringliteral_36bf5156a09fb782d0af3560e4601cbf2cedc5155a8996d8781f3cb033938025_to_t_string_memory_ptr_fromStack","nativeSrc":"26206:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"26340:3:69","nodeType":"YulTypedName","src":"26340:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"26348:3:69","nodeType":"YulTypedName","src":"26348:3:69","type":""}],"src":"26206:366:69"},{"body":{"nativeSrc":"26749:248:69","nodeType":"YulBlock","src":"26749:248:69","statements":[{"nativeSrc":"26759:26:69","nodeType":"YulAssignment","src":"26759:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"26771:9:69","nodeType":"YulIdentifier","src":"26771:9:69"},{"kind":"number","nativeSrc":"26782:2:69","nodeType":"YulLiteral","src":"26782:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"26767:3:69","nodeType":"YulIdentifier","src":"26767:3:69"},"nativeSrc":"26767:18:69","nodeType":"YulFunctionCall","src":"26767:18:69"},"variableNames":[{"name":"tail","nativeSrc":"26759:4:69","nodeType":"YulIdentifier","src":"26759:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"26806:9:69","nodeType":"YulIdentifier","src":"26806:9:69"},{"kind":"number","nativeSrc":"26817:1:69","nodeType":"YulLiteral","src":"26817:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"26802:3:69","nodeType":"YulIdentifier","src":"26802:3:69"},"nativeSrc":"26802:17:69","nodeType":"YulFunctionCall","src":"26802:17:69"},{"arguments":[{"name":"tail","nativeSrc":"26825:4:69","nodeType":"YulIdentifier","src":"26825:4:69"},{"name":"headStart","nativeSrc":"26831:9:69","nodeType":"YulIdentifier","src":"26831:9:69"}],"functionName":{"name":"sub","nativeSrc":"26821:3:69","nodeType":"YulIdentifier","src":"26821:3:69"},"nativeSrc":"26821:20:69","nodeType":"YulFunctionCall","src":"26821:20:69"}],"functionName":{"name":"mstore","nativeSrc":"26795:6:69","nodeType":"YulIdentifier","src":"26795:6:69"},"nativeSrc":"26795:47:69","nodeType":"YulFunctionCall","src":"26795:47:69"},"nativeSrc":"26795:47:69","nodeType":"YulExpressionStatement","src":"26795:47:69"},{"nativeSrc":"26851:139:69","nodeType":"YulAssignment","src":"26851:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"26985:4:69","nodeType":"YulIdentifier","src":"26985:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_36bf5156a09fb782d0af3560e4601cbf2cedc5155a8996d8781f3cb033938025_to_t_string_memory_ptr_fromStack","nativeSrc":"26859:124:69","nodeType":"YulIdentifier","src":"26859:124:69"},"nativeSrc":"26859:131:69","nodeType":"YulFunctionCall","src":"26859:131:69"},"variableNames":[{"name":"tail","nativeSrc":"26851:4:69","nodeType":"YulIdentifier","src":"26851:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_36bf5156a09fb782d0af3560e4601cbf2cedc5155a8996d8781f3cb033938025__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"26578:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"26729:9:69","nodeType":"YulTypedName","src":"26729:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"26744:4:69","nodeType":"YulTypedName","src":"26744:4:69","type":""}],"src":"26578:419:69"},{"body":{"nativeSrc":"27109:183:69","nodeType":"YulBlock","src":"27109:183:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"27131:6:69","nodeType":"YulIdentifier","src":"27131:6:69"},{"kind":"number","nativeSrc":"27139:1:69","nodeType":"YulLiteral","src":"27139:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"27127:3:69","nodeType":"YulIdentifier","src":"27127:3:69"},"nativeSrc":"27127:14:69","nodeType":"YulFunctionCall","src":"27127:14:69"},{"hexValue":"526577617264734469737472696275746f723a3a7365744c6173745265776172","kind":"string","nativeSrc":"27143:34:69","nodeType":"YulLiteral","src":"27143:34:69","type":"","value":"RewardsDistributor::setLastRewar"}],"functionName":{"name":"mstore","nativeSrc":"27120:6:69","nodeType":"YulIdentifier","src":"27120:6:69"},"nativeSrc":"27120:58:69","nodeType":"YulFunctionCall","src":"27120:58:69"},"nativeSrc":"27120:58:69","nodeType":"YulExpressionStatement","src":"27120:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"27199:6:69","nodeType":"YulIdentifier","src":"27199:6:69"},{"kind":"number","nativeSrc":"27207:2:69","nodeType":"YulLiteral","src":"27207:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"27195:3:69","nodeType":"YulIdentifier","src":"27195:3:69"},"nativeSrc":"27195:15:69","nodeType":"YulFunctionCall","src":"27195:15:69"},{"hexValue":"64696e67426c6f636b54696d657374616d707320696e76616c696420696e7075","kind":"string","nativeSrc":"27212:34:69","nodeType":"YulLiteral","src":"27212:34:69","type":"","value":"dingBlockTimestamps invalid inpu"}],"functionName":{"name":"mstore","nativeSrc":"27188:6:69","nodeType":"YulIdentifier","src":"27188:6:69"},"nativeSrc":"27188:59:69","nodeType":"YulFunctionCall","src":"27188:59:69"},"nativeSrc":"27188:59:69","nodeType":"YulExpressionStatement","src":"27188:59:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"27268:6:69","nodeType":"YulIdentifier","src":"27268:6:69"},{"kind":"number","nativeSrc":"27276:2:69","nodeType":"YulLiteral","src":"27276:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"27264:3:69","nodeType":"YulIdentifier","src":"27264:3:69"},"nativeSrc":"27264:15:69","nodeType":"YulFunctionCall","src":"27264:15:69"},{"hexValue":"74","kind":"string","nativeSrc":"27281:3:69","nodeType":"YulLiteral","src":"27281:3:69","type":"","value":"t"}],"functionName":{"name":"mstore","nativeSrc":"27257:6:69","nodeType":"YulIdentifier","src":"27257:6:69"},"nativeSrc":"27257:28:69","nodeType":"YulFunctionCall","src":"27257:28:69"},"nativeSrc":"27257:28:69","nodeType":"YulExpressionStatement","src":"27257:28:69"}]},"name":"store_literal_in_memory_6291c33270cb332e2566d661b37996c9d0d6802836fbd96a9a4623cd553212e4","nativeSrc":"27003:289:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"27101:6:69","nodeType":"YulTypedName","src":"27101:6:69","type":""}],"src":"27003:289:69"},{"body":{"nativeSrc":"27444:220:69","nodeType":"YulBlock","src":"27444:220:69","statements":[{"nativeSrc":"27454:74:69","nodeType":"YulAssignment","src":"27454:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"27520:3:69","nodeType":"YulIdentifier","src":"27520:3:69"},{"kind":"number","nativeSrc":"27525:2:69","nodeType":"YulLiteral","src":"27525:2:69","type":"","value":"65"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"27461:58:69","nodeType":"YulIdentifier","src":"27461:58:69"},"nativeSrc":"27461:67:69","nodeType":"YulFunctionCall","src":"27461:67:69"},"variableNames":[{"name":"pos","nativeSrc":"27454:3:69","nodeType":"YulIdentifier","src":"27454:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"27626:3:69","nodeType":"YulIdentifier","src":"27626:3:69"}],"functionName":{"name":"store_literal_in_memory_6291c33270cb332e2566d661b37996c9d0d6802836fbd96a9a4623cd553212e4","nativeSrc":"27537:88:69","nodeType":"YulIdentifier","src":"27537:88:69"},"nativeSrc":"27537:93:69","nodeType":"YulFunctionCall","src":"27537:93:69"},"nativeSrc":"27537:93:69","nodeType":"YulExpressionStatement","src":"27537:93:69"},{"nativeSrc":"27639:19:69","nodeType":"YulAssignment","src":"27639:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"27650:3:69","nodeType":"YulIdentifier","src":"27650:3:69"},{"kind":"number","nativeSrc":"27655:2:69","nodeType":"YulLiteral","src":"27655:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"27646:3:69","nodeType":"YulIdentifier","src":"27646:3:69"},"nativeSrc":"27646:12:69","nodeType":"YulFunctionCall","src":"27646:12:69"},"variableNames":[{"name":"end","nativeSrc":"27639:3:69","nodeType":"YulIdentifier","src":"27639:3:69"}]}]},"name":"abi_encode_t_stringliteral_6291c33270cb332e2566d661b37996c9d0d6802836fbd96a9a4623cd553212e4_to_t_string_memory_ptr_fromStack","nativeSrc":"27298:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"27432:3:69","nodeType":"YulTypedName","src":"27432:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"27440:3:69","nodeType":"YulTypedName","src":"27440:3:69","type":""}],"src":"27298:366:69"},{"body":{"nativeSrc":"27841:248:69","nodeType":"YulBlock","src":"27841:248:69","statements":[{"nativeSrc":"27851:26:69","nodeType":"YulAssignment","src":"27851:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"27863:9:69","nodeType":"YulIdentifier","src":"27863:9:69"},{"kind":"number","nativeSrc":"27874:2:69","nodeType":"YulLiteral","src":"27874:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"27859:3:69","nodeType":"YulIdentifier","src":"27859:3:69"},"nativeSrc":"27859:18:69","nodeType":"YulFunctionCall","src":"27859:18:69"},"variableNames":[{"name":"tail","nativeSrc":"27851:4:69","nodeType":"YulIdentifier","src":"27851:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"27898:9:69","nodeType":"YulIdentifier","src":"27898:9:69"},{"kind":"number","nativeSrc":"27909:1:69","nodeType":"YulLiteral","src":"27909:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"27894:3:69","nodeType":"YulIdentifier","src":"27894:3:69"},"nativeSrc":"27894:17:69","nodeType":"YulFunctionCall","src":"27894:17:69"},{"arguments":[{"name":"tail","nativeSrc":"27917:4:69","nodeType":"YulIdentifier","src":"27917:4:69"},{"name":"headStart","nativeSrc":"27923:9:69","nodeType":"YulIdentifier","src":"27923:9:69"}],"functionName":{"name":"sub","nativeSrc":"27913:3:69","nodeType":"YulIdentifier","src":"27913:3:69"},"nativeSrc":"27913:20:69","nodeType":"YulFunctionCall","src":"27913:20:69"}],"functionName":{"name":"mstore","nativeSrc":"27887:6:69","nodeType":"YulIdentifier","src":"27887:6:69"},"nativeSrc":"27887:47:69","nodeType":"YulFunctionCall","src":"27887:47:69"},"nativeSrc":"27887:47:69","nodeType":"YulExpressionStatement","src":"27887:47:69"},{"nativeSrc":"27943:139:69","nodeType":"YulAssignment","src":"27943:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"28077:4:69","nodeType":"YulIdentifier","src":"28077:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_6291c33270cb332e2566d661b37996c9d0d6802836fbd96a9a4623cd553212e4_to_t_string_memory_ptr_fromStack","nativeSrc":"27951:124:69","nodeType":"YulIdentifier","src":"27951:124:69"},"nativeSrc":"27951:131:69","nodeType":"YulFunctionCall","src":"27951:131:69"},"variableNames":[{"name":"tail","nativeSrc":"27943:4:69","nodeType":"YulIdentifier","src":"27943:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_6291c33270cb332e2566d661b37996c9d0d6802836fbd96a9a4623cd553212e4__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"27670:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"27821:9:69","nodeType":"YulTypedName","src":"27821:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"27836:4:69","nodeType":"YulTypedName","src":"27836:4:69","type":""}],"src":"27670:419:69"},{"body":{"nativeSrc":"28177:279:69","nodeType":"YulBlock","src":"28177:279:69","statements":[{"body":{"nativeSrc":"28223:83:69","nodeType":"YulBlock","src":"28223:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"28225:77:69","nodeType":"YulIdentifier","src":"28225:77:69"},"nativeSrc":"28225:79:69","nodeType":"YulFunctionCall","src":"28225:79:69"},"nativeSrc":"28225:79:69","nodeType":"YulExpressionStatement","src":"28225:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"28198:7:69","nodeType":"YulIdentifier","src":"28198:7:69"},{"name":"headStart","nativeSrc":"28207:9:69","nodeType":"YulIdentifier","src":"28207:9:69"}],"functionName":{"name":"sub","nativeSrc":"28194:3:69","nodeType":"YulIdentifier","src":"28194:3:69"},"nativeSrc":"28194:23:69","nodeType":"YulFunctionCall","src":"28194:23:69"},{"kind":"number","nativeSrc":"28219:2:69","nodeType":"YulLiteral","src":"28219:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"28190:3:69","nodeType":"YulIdentifier","src":"28190:3:69"},"nativeSrc":"28190:32:69","nodeType":"YulFunctionCall","src":"28190:32:69"},"nativeSrc":"28187:119:69","nodeType":"YulIf","src":"28187:119:69"},{"nativeSrc":"28316:133:69","nodeType":"YulBlock","src":"28316:133:69","statements":[{"nativeSrc":"28331:15:69","nodeType":"YulVariableDeclaration","src":"28331:15:69","value":{"kind":"number","nativeSrc":"28345:1:69","nodeType":"YulLiteral","src":"28345:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"28335:6:69","nodeType":"YulTypedName","src":"28335:6:69","type":""}]},{"nativeSrc":"28360:79:69","nodeType":"YulAssignment","src":"28360:79:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"28411:9:69","nodeType":"YulIdentifier","src":"28411:9:69"},{"name":"offset","nativeSrc":"28422:6:69","nodeType":"YulIdentifier","src":"28422:6:69"}],"functionName":{"name":"add","nativeSrc":"28407:3:69","nodeType":"YulIdentifier","src":"28407:3:69"},"nativeSrc":"28407:22:69","nodeType":"YulFunctionCall","src":"28407:22:69"},{"name":"dataEnd","nativeSrc":"28431:7:69","nodeType":"YulIdentifier","src":"28431:7:69"}],"functionName":{"name":"abi_decode_t_contract$_VToken_$15506","nativeSrc":"28370:36:69","nodeType":"YulIdentifier","src":"28370:36:69"},"nativeSrc":"28370:69:69","nodeType":"YulFunctionCall","src":"28370:69:69"},"variableNames":[{"name":"value0","nativeSrc":"28360:6:69","nodeType":"YulIdentifier","src":"28360:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_VToken_$15506","nativeSrc":"28095:361:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"28147:9:69","nodeType":"YulTypedName","src":"28147:9:69","type":""},{"name":"dataEnd","nativeSrc":"28158:7:69","nodeType":"YulTypedName","src":"28158:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"28170:6:69","nodeType":"YulTypedName","src":"28170:6:69","type":""}],"src":"28095:361:69"},{"body":{"nativeSrc":"28568:115:69","nodeType":"YulBlock","src":"28568:115:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"28590:6:69","nodeType":"YulIdentifier","src":"28590:6:69"},{"kind":"number","nativeSrc":"28598:1:69","nodeType":"YulLiteral","src":"28598:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"28586:3:69","nodeType":"YulIdentifier","src":"28586:3:69"},"nativeSrc":"28586:14:69","nodeType":"YulFunctionCall","src":"28586:14:69"},{"hexValue":"696e73756666696369656e7420726577617264546f6b656e20666f7220677261","kind":"string","nativeSrc":"28602:34:69","nodeType":"YulLiteral","src":"28602:34:69","type":"","value":"insufficient rewardToken for gra"}],"functionName":{"name":"mstore","nativeSrc":"28579:6:69","nodeType":"YulIdentifier","src":"28579:6:69"},"nativeSrc":"28579:58:69","nodeType":"YulFunctionCall","src":"28579:58:69"},"nativeSrc":"28579:58:69","nodeType":"YulExpressionStatement","src":"28579:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"28658:6:69","nodeType":"YulIdentifier","src":"28658:6:69"},{"kind":"number","nativeSrc":"28666:2:69","nodeType":"YulLiteral","src":"28666:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"28654:3:69","nodeType":"YulIdentifier","src":"28654:3:69"},"nativeSrc":"28654:15:69","nodeType":"YulFunctionCall","src":"28654:15:69"},{"hexValue":"6e74","kind":"string","nativeSrc":"28671:4:69","nodeType":"YulLiteral","src":"28671:4:69","type":"","value":"nt"}],"functionName":{"name":"mstore","nativeSrc":"28647:6:69","nodeType":"YulIdentifier","src":"28647:6:69"},"nativeSrc":"28647:29:69","nodeType":"YulFunctionCall","src":"28647:29:69"},"nativeSrc":"28647:29:69","nodeType":"YulExpressionStatement","src":"28647:29:69"}]},"name":"store_literal_in_memory_432fe5c7c43fef719e573b5581c51228a55aa829b1f722b0153e4e929295ba6a","nativeSrc":"28462:221:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"28560:6:69","nodeType":"YulTypedName","src":"28560:6:69","type":""}],"src":"28462:221:69"},{"body":{"nativeSrc":"28835:220:69","nodeType":"YulBlock","src":"28835:220:69","statements":[{"nativeSrc":"28845:74:69","nodeType":"YulAssignment","src":"28845:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"28911:3:69","nodeType":"YulIdentifier","src":"28911:3:69"},{"kind":"number","nativeSrc":"28916:2:69","nodeType":"YulLiteral","src":"28916:2:69","type":"","value":"34"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"28852:58:69","nodeType":"YulIdentifier","src":"28852:58:69"},"nativeSrc":"28852:67:69","nodeType":"YulFunctionCall","src":"28852:67:69"},"variableNames":[{"name":"pos","nativeSrc":"28845:3:69","nodeType":"YulIdentifier","src":"28845:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"29017:3:69","nodeType":"YulIdentifier","src":"29017:3:69"}],"functionName":{"name":"store_literal_in_memory_432fe5c7c43fef719e573b5581c51228a55aa829b1f722b0153e4e929295ba6a","nativeSrc":"28928:88:69","nodeType":"YulIdentifier","src":"28928:88:69"},"nativeSrc":"28928:93:69","nodeType":"YulFunctionCall","src":"28928:93:69"},"nativeSrc":"28928:93:69","nodeType":"YulExpressionStatement","src":"28928:93:69"},{"nativeSrc":"29030:19:69","nodeType":"YulAssignment","src":"29030:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"29041:3:69","nodeType":"YulIdentifier","src":"29041:3:69"},{"kind":"number","nativeSrc":"29046:2:69","nodeType":"YulLiteral","src":"29046:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"29037:3:69","nodeType":"YulIdentifier","src":"29037:3:69"},"nativeSrc":"29037:12:69","nodeType":"YulFunctionCall","src":"29037:12:69"},"variableNames":[{"name":"end","nativeSrc":"29030:3:69","nodeType":"YulIdentifier","src":"29030:3:69"}]}]},"name":"abi_encode_t_stringliteral_432fe5c7c43fef719e573b5581c51228a55aa829b1f722b0153e4e929295ba6a_to_t_string_memory_ptr_fromStack","nativeSrc":"28689:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"28823:3:69","nodeType":"YulTypedName","src":"28823:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"28831:3:69","nodeType":"YulTypedName","src":"28831:3:69","type":""}],"src":"28689:366:69"},{"body":{"nativeSrc":"29232:248:69","nodeType":"YulBlock","src":"29232:248:69","statements":[{"nativeSrc":"29242:26:69","nodeType":"YulAssignment","src":"29242:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"29254:9:69","nodeType":"YulIdentifier","src":"29254:9:69"},{"kind":"number","nativeSrc":"29265:2:69","nodeType":"YulLiteral","src":"29265:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"29250:3:69","nodeType":"YulIdentifier","src":"29250:3:69"},"nativeSrc":"29250:18:69","nodeType":"YulFunctionCall","src":"29250:18:69"},"variableNames":[{"name":"tail","nativeSrc":"29242:4:69","nodeType":"YulIdentifier","src":"29242:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"29289:9:69","nodeType":"YulIdentifier","src":"29289:9:69"},{"kind":"number","nativeSrc":"29300:1:69","nodeType":"YulLiteral","src":"29300:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"29285:3:69","nodeType":"YulIdentifier","src":"29285:3:69"},"nativeSrc":"29285:17:69","nodeType":"YulFunctionCall","src":"29285:17:69"},{"arguments":[{"name":"tail","nativeSrc":"29308:4:69","nodeType":"YulIdentifier","src":"29308:4:69"},{"name":"headStart","nativeSrc":"29314:9:69","nodeType":"YulIdentifier","src":"29314:9:69"}],"functionName":{"name":"sub","nativeSrc":"29304:3:69","nodeType":"YulIdentifier","src":"29304:3:69"},"nativeSrc":"29304:20:69","nodeType":"YulFunctionCall","src":"29304:20:69"}],"functionName":{"name":"mstore","nativeSrc":"29278:6:69","nodeType":"YulIdentifier","src":"29278:6:69"},"nativeSrc":"29278:47:69","nodeType":"YulFunctionCall","src":"29278:47:69"},"nativeSrc":"29278:47:69","nodeType":"YulExpressionStatement","src":"29278:47:69"},{"nativeSrc":"29334:139:69","nodeType":"YulAssignment","src":"29334:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"29468:4:69","nodeType":"YulIdentifier","src":"29468:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_432fe5c7c43fef719e573b5581c51228a55aa829b1f722b0153e4e929295ba6a_to_t_string_memory_ptr_fromStack","nativeSrc":"29342:124:69","nodeType":"YulIdentifier","src":"29342:124:69"},"nativeSrc":"29342:131:69","nodeType":"YulFunctionCall","src":"29342:131:69"},"variableNames":[{"name":"tail","nativeSrc":"29334:4:69","nodeType":"YulIdentifier","src":"29334:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_432fe5c7c43fef719e573b5581c51228a55aa829b1f722b0153e4e929295ba6a__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"29061:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"29212:9:69","nodeType":"YulTypedName","src":"29212:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"29227:4:69","nodeType":"YulTypedName","src":"29227:4:69","type":""}],"src":"29061:419:69"},{"body":{"nativeSrc":"29592:122:69","nodeType":"YulBlock","src":"29592:122:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"29614:6:69","nodeType":"YulIdentifier","src":"29614:6:69"},{"kind":"number","nativeSrc":"29622:1:69","nodeType":"YulLiteral","src":"29622:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"29610:3:69","nodeType":"YulIdentifier","src":"29610:3:69"},"nativeSrc":"29610:14:69","nodeType":"YulFunctionCall","src":"29610:14:69"},{"hexValue":"4f776e61626c6532537465703a2063616c6c6572206973206e6f742074686520","kind":"string","nativeSrc":"29626:34:69","nodeType":"YulLiteral","src":"29626:34:69","type":"","value":"Ownable2Step: caller is not the "}],"functionName":{"name":"mstore","nativeSrc":"29603:6:69","nodeType":"YulIdentifier","src":"29603:6:69"},"nativeSrc":"29603:58:69","nodeType":"YulFunctionCall","src":"29603:58:69"},"nativeSrc":"29603:58:69","nodeType":"YulExpressionStatement","src":"29603:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"29682:6:69","nodeType":"YulIdentifier","src":"29682:6:69"},{"kind":"number","nativeSrc":"29690:2:69","nodeType":"YulLiteral","src":"29690:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"29678:3:69","nodeType":"YulIdentifier","src":"29678:3:69"},"nativeSrc":"29678:15:69","nodeType":"YulFunctionCall","src":"29678:15:69"},{"hexValue":"6e6577206f776e6572","kind":"string","nativeSrc":"29695:11:69","nodeType":"YulLiteral","src":"29695:11:69","type":"","value":"new owner"}],"functionName":{"name":"mstore","nativeSrc":"29671:6:69","nodeType":"YulIdentifier","src":"29671:6:69"},"nativeSrc":"29671:36:69","nodeType":"YulFunctionCall","src":"29671:36:69"},"nativeSrc":"29671:36:69","nodeType":"YulExpressionStatement","src":"29671:36:69"}]},"name":"store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc","nativeSrc":"29486:228:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"29584:6:69","nodeType":"YulTypedName","src":"29584:6:69","type":""}],"src":"29486:228:69"},{"body":{"nativeSrc":"29866:220:69","nodeType":"YulBlock","src":"29866:220:69","statements":[{"nativeSrc":"29876:74:69","nodeType":"YulAssignment","src":"29876:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"29942:3:69","nodeType":"YulIdentifier","src":"29942:3:69"},{"kind":"number","nativeSrc":"29947:2:69","nodeType":"YulLiteral","src":"29947:2:69","type":"","value":"41"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"29883:58:69","nodeType":"YulIdentifier","src":"29883:58:69"},"nativeSrc":"29883:67:69","nodeType":"YulFunctionCall","src":"29883:67:69"},"variableNames":[{"name":"pos","nativeSrc":"29876:3:69","nodeType":"YulIdentifier","src":"29876:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"30048:3:69","nodeType":"YulIdentifier","src":"30048:3:69"}],"functionName":{"name":"store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc","nativeSrc":"29959:88:69","nodeType":"YulIdentifier","src":"29959:88:69"},"nativeSrc":"29959:93:69","nodeType":"YulFunctionCall","src":"29959:93:69"},"nativeSrc":"29959:93:69","nodeType":"YulExpressionStatement","src":"29959:93:69"},{"nativeSrc":"30061:19:69","nodeType":"YulAssignment","src":"30061:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"30072:3:69","nodeType":"YulIdentifier","src":"30072:3:69"},{"kind":"number","nativeSrc":"30077:2:69","nodeType":"YulLiteral","src":"30077:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"30068:3:69","nodeType":"YulIdentifier","src":"30068:3:69"},"nativeSrc":"30068:12:69","nodeType":"YulFunctionCall","src":"30068:12:69"},"variableNames":[{"name":"end","nativeSrc":"30061:3:69","nodeType":"YulIdentifier","src":"30061:3:69"}]}]},"name":"abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack","nativeSrc":"29720:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"29854:3:69","nodeType":"YulTypedName","src":"29854:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"29862:3:69","nodeType":"YulTypedName","src":"29862:3:69","type":""}],"src":"29720:366:69"},{"body":{"nativeSrc":"30263:248:69","nodeType":"YulBlock","src":"30263:248:69","statements":[{"nativeSrc":"30273:26:69","nodeType":"YulAssignment","src":"30273:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"30285:9:69","nodeType":"YulIdentifier","src":"30285:9:69"},{"kind":"number","nativeSrc":"30296:2:69","nodeType":"YulLiteral","src":"30296:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"30281:3:69","nodeType":"YulIdentifier","src":"30281:3:69"},"nativeSrc":"30281:18:69","nodeType":"YulFunctionCall","src":"30281:18:69"},"variableNames":[{"name":"tail","nativeSrc":"30273:4:69","nodeType":"YulIdentifier","src":"30273:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"30320:9:69","nodeType":"YulIdentifier","src":"30320:9:69"},{"kind":"number","nativeSrc":"30331:1:69","nodeType":"YulLiteral","src":"30331:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"30316:3:69","nodeType":"YulIdentifier","src":"30316:3:69"},"nativeSrc":"30316:17:69","nodeType":"YulFunctionCall","src":"30316:17:69"},{"arguments":[{"name":"tail","nativeSrc":"30339:4:69","nodeType":"YulIdentifier","src":"30339:4:69"},{"name":"headStart","nativeSrc":"30345:9:69","nodeType":"YulIdentifier","src":"30345:9:69"}],"functionName":{"name":"sub","nativeSrc":"30335:3:69","nodeType":"YulIdentifier","src":"30335:3:69"},"nativeSrc":"30335:20:69","nodeType":"YulFunctionCall","src":"30335:20:69"}],"functionName":{"name":"mstore","nativeSrc":"30309:6:69","nodeType":"YulIdentifier","src":"30309:6:69"},"nativeSrc":"30309:47:69","nodeType":"YulFunctionCall","src":"30309:47:69"},"nativeSrc":"30309:47:69","nodeType":"YulExpressionStatement","src":"30309:47:69"},{"nativeSrc":"30365:139:69","nodeType":"YulAssignment","src":"30365:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"30499:4:69","nodeType":"YulIdentifier","src":"30499:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack","nativeSrc":"30373:124:69","nodeType":"YulIdentifier","src":"30373:124:69"},"nativeSrc":"30373:131:69","nodeType":"YulFunctionCall","src":"30373:131:69"},"variableNames":[{"name":"tail","nativeSrc":"30365:4:69","nodeType":"YulIdentifier","src":"30365:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"30092:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"30243:9:69","nodeType":"YulTypedName","src":"30243:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"30258:4:69","nodeType":"YulTypedName","src":"30258:4:69","type":""}],"src":"30092:419:69"},{"body":{"nativeSrc":"30623:70:69","nodeType":"YulBlock","src":"30623:70:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"30645:6:69","nodeType":"YulIdentifier","src":"30645:6:69"},{"kind":"number","nativeSrc":"30653:1:69","nodeType":"YulLiteral","src":"30653:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"30641:3:69","nodeType":"YulIdentifier","src":"30641:3:69"},"nativeSrc":"30641:14:69","nodeType":"YulFunctionCall","src":"30641:14:69"},{"hexValue":"426c6f636b2d6261736564206f7065726174696f6e206f6e6c79","kind":"string","nativeSrc":"30657:28:69","nodeType":"YulLiteral","src":"30657:28:69","type":"","value":"Block-based operation only"}],"functionName":{"name":"mstore","nativeSrc":"30634:6:69","nodeType":"YulIdentifier","src":"30634:6:69"},"nativeSrc":"30634:52:69","nodeType":"YulFunctionCall","src":"30634:52:69"},"nativeSrc":"30634:52:69","nodeType":"YulExpressionStatement","src":"30634:52:69"}]},"name":"store_literal_in_memory_deeaa8c519132eb034c6b2645cd03ab274dcabecd79d8fa0dfda871a74f634f1","nativeSrc":"30517:176:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"30615:6:69","nodeType":"YulTypedName","src":"30615:6:69","type":""}],"src":"30517:176:69"},{"body":{"nativeSrc":"30845:220:69","nodeType":"YulBlock","src":"30845:220:69","statements":[{"nativeSrc":"30855:74:69","nodeType":"YulAssignment","src":"30855:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"30921:3:69","nodeType":"YulIdentifier","src":"30921:3:69"},{"kind":"number","nativeSrc":"30926:2:69","nodeType":"YulLiteral","src":"30926:2:69","type":"","value":"26"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"30862:58:69","nodeType":"YulIdentifier","src":"30862:58:69"},"nativeSrc":"30862:67:69","nodeType":"YulFunctionCall","src":"30862:67:69"},"variableNames":[{"name":"pos","nativeSrc":"30855:3:69","nodeType":"YulIdentifier","src":"30855:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"31027:3:69","nodeType":"YulIdentifier","src":"31027:3:69"}],"functionName":{"name":"store_literal_in_memory_deeaa8c519132eb034c6b2645cd03ab274dcabecd79d8fa0dfda871a74f634f1","nativeSrc":"30938:88:69","nodeType":"YulIdentifier","src":"30938:88:69"},"nativeSrc":"30938:93:69","nodeType":"YulFunctionCall","src":"30938:93:69"},"nativeSrc":"30938:93:69","nodeType":"YulExpressionStatement","src":"30938:93:69"},{"nativeSrc":"31040:19:69","nodeType":"YulAssignment","src":"31040:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"31051:3:69","nodeType":"YulIdentifier","src":"31051:3:69"},{"kind":"number","nativeSrc":"31056:2:69","nodeType":"YulLiteral","src":"31056:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"31047:3:69","nodeType":"YulIdentifier","src":"31047:3:69"},"nativeSrc":"31047:12:69","nodeType":"YulFunctionCall","src":"31047:12:69"},"variableNames":[{"name":"end","nativeSrc":"31040:3:69","nodeType":"YulIdentifier","src":"31040:3:69"}]}]},"name":"abi_encode_t_stringliteral_deeaa8c519132eb034c6b2645cd03ab274dcabecd79d8fa0dfda871a74f634f1_to_t_string_memory_ptr_fromStack","nativeSrc":"30699:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"30833:3:69","nodeType":"YulTypedName","src":"30833:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"30841:3:69","nodeType":"YulTypedName","src":"30841:3:69","type":""}],"src":"30699:366:69"},{"body":{"nativeSrc":"31242:248:69","nodeType":"YulBlock","src":"31242:248:69","statements":[{"nativeSrc":"31252:26:69","nodeType":"YulAssignment","src":"31252:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"31264:9:69","nodeType":"YulIdentifier","src":"31264:9:69"},{"kind":"number","nativeSrc":"31275:2:69","nodeType":"YulLiteral","src":"31275:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"31260:3:69","nodeType":"YulIdentifier","src":"31260:3:69"},"nativeSrc":"31260:18:69","nodeType":"YulFunctionCall","src":"31260:18:69"},"variableNames":[{"name":"tail","nativeSrc":"31252:4:69","nodeType":"YulIdentifier","src":"31252:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"31299:9:69","nodeType":"YulIdentifier","src":"31299:9:69"},{"kind":"number","nativeSrc":"31310:1:69","nodeType":"YulLiteral","src":"31310:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"31295:3:69","nodeType":"YulIdentifier","src":"31295:3:69"},"nativeSrc":"31295:17:69","nodeType":"YulFunctionCall","src":"31295:17:69"},{"arguments":[{"name":"tail","nativeSrc":"31318:4:69","nodeType":"YulIdentifier","src":"31318:4:69"},{"name":"headStart","nativeSrc":"31324:9:69","nodeType":"YulIdentifier","src":"31324:9:69"}],"functionName":{"name":"sub","nativeSrc":"31314:3:69","nodeType":"YulIdentifier","src":"31314:3:69"},"nativeSrc":"31314:20:69","nodeType":"YulFunctionCall","src":"31314:20:69"}],"functionName":{"name":"mstore","nativeSrc":"31288:6:69","nodeType":"YulIdentifier","src":"31288:6:69"},"nativeSrc":"31288:47:69","nodeType":"YulFunctionCall","src":"31288:47:69"},"nativeSrc":"31288:47:69","nodeType":"YulExpressionStatement","src":"31288:47:69"},{"nativeSrc":"31344:139:69","nodeType":"YulAssignment","src":"31344:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"31478:4:69","nodeType":"YulIdentifier","src":"31478:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_deeaa8c519132eb034c6b2645cd03ab274dcabecd79d8fa0dfda871a74f634f1_to_t_string_memory_ptr_fromStack","nativeSrc":"31352:124:69","nodeType":"YulIdentifier","src":"31352:124:69"},"nativeSrc":"31352:131:69","nodeType":"YulFunctionCall","src":"31352:131:69"},"variableNames":[{"name":"tail","nativeSrc":"31344:4:69","nodeType":"YulIdentifier","src":"31344:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_deeaa8c519132eb034c6b2645cd03ab274dcabecd79d8fa0dfda871a74f634f1__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"31071:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"31222:9:69","nodeType":"YulTypedName","src":"31222:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"31237:4:69","nodeType":"YulTypedName","src":"31237:4:69","type":""}],"src":"31071:419:69"},{"body":{"nativeSrc":"31602:137:69","nodeType":"YulBlock","src":"31602:137:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"31624:6:69","nodeType":"YulIdentifier","src":"31624:6:69"},{"kind":"number","nativeSrc":"31632:1:69","nodeType":"YulLiteral","src":"31632:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"31620:3:69","nodeType":"YulIdentifier","src":"31620:3:69"},"nativeSrc":"31620:14:69","nodeType":"YulFunctionCall","src":"31620:14:69"},{"hexValue":"526577617264734469737472696275746f723a3a7365744c6173745265776172","kind":"string","nativeSrc":"31636:34:69","nodeType":"YulLiteral","src":"31636:34:69","type":"","value":"RewardsDistributor::setLastRewar"}],"functionName":{"name":"mstore","nativeSrc":"31613:6:69","nodeType":"YulIdentifier","src":"31613:6:69"},"nativeSrc":"31613:58:69","nodeType":"YulFunctionCall","src":"31613:58:69"},"nativeSrc":"31613:58:69","nodeType":"YulExpressionStatement","src":"31613:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"31692:6:69","nodeType":"YulIdentifier","src":"31692:6:69"},{"kind":"number","nativeSrc":"31700:2:69","nodeType":"YulLiteral","src":"31700:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"31688:3:69","nodeType":"YulIdentifier","src":"31688:3:69"},"nativeSrc":"31688:15:69","nodeType":"YulFunctionCall","src":"31688:15:69"},{"hexValue":"64696e67426c6f636b7320696e76616c696420696e707574","kind":"string","nativeSrc":"31705:26:69","nodeType":"YulLiteral","src":"31705:26:69","type":"","value":"dingBlocks invalid input"}],"functionName":{"name":"mstore","nativeSrc":"31681:6:69","nodeType":"YulIdentifier","src":"31681:6:69"},"nativeSrc":"31681:51:69","nodeType":"YulFunctionCall","src":"31681:51:69"},"nativeSrc":"31681:51:69","nodeType":"YulExpressionStatement","src":"31681:51:69"}]},"name":"store_literal_in_memory_5cff66c2aa35848a49d268966a8281c7733b409122a8f3eddbea1b1ec033686c","nativeSrc":"31496:243:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"31594:6:69","nodeType":"YulTypedName","src":"31594:6:69","type":""}],"src":"31496:243:69"},{"body":{"nativeSrc":"31891:220:69","nodeType":"YulBlock","src":"31891:220:69","statements":[{"nativeSrc":"31901:74:69","nodeType":"YulAssignment","src":"31901:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"31967:3:69","nodeType":"YulIdentifier","src":"31967:3:69"},{"kind":"number","nativeSrc":"31972:2:69","nodeType":"YulLiteral","src":"31972:2:69","type":"","value":"56"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"31908:58:69","nodeType":"YulIdentifier","src":"31908:58:69"},"nativeSrc":"31908:67:69","nodeType":"YulFunctionCall","src":"31908:67:69"},"variableNames":[{"name":"pos","nativeSrc":"31901:3:69","nodeType":"YulIdentifier","src":"31901:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"32073:3:69","nodeType":"YulIdentifier","src":"32073:3:69"}],"functionName":{"name":"store_literal_in_memory_5cff66c2aa35848a49d268966a8281c7733b409122a8f3eddbea1b1ec033686c","nativeSrc":"31984:88:69","nodeType":"YulIdentifier","src":"31984:88:69"},"nativeSrc":"31984:93:69","nodeType":"YulFunctionCall","src":"31984:93:69"},"nativeSrc":"31984:93:69","nodeType":"YulExpressionStatement","src":"31984:93:69"},{"nativeSrc":"32086:19:69","nodeType":"YulAssignment","src":"32086:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"32097:3:69","nodeType":"YulIdentifier","src":"32097:3:69"},{"kind":"number","nativeSrc":"32102:2:69","nodeType":"YulLiteral","src":"32102:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"32093:3:69","nodeType":"YulIdentifier","src":"32093:3:69"},"nativeSrc":"32093:12:69","nodeType":"YulFunctionCall","src":"32093:12:69"},"variableNames":[{"name":"end","nativeSrc":"32086:3:69","nodeType":"YulIdentifier","src":"32086:3:69"}]}]},"name":"abi_encode_t_stringliteral_5cff66c2aa35848a49d268966a8281c7733b409122a8f3eddbea1b1ec033686c_to_t_string_memory_ptr_fromStack","nativeSrc":"31745:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"31879:3:69","nodeType":"YulTypedName","src":"31879:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"31887:3:69","nodeType":"YulTypedName","src":"31887:3:69","type":""}],"src":"31745:366:69"},{"body":{"nativeSrc":"32288:248:69","nodeType":"YulBlock","src":"32288:248:69","statements":[{"nativeSrc":"32298:26:69","nodeType":"YulAssignment","src":"32298:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"32310:9:69","nodeType":"YulIdentifier","src":"32310:9:69"},{"kind":"number","nativeSrc":"32321:2:69","nodeType":"YulLiteral","src":"32321:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"32306:3:69","nodeType":"YulIdentifier","src":"32306:3:69"},"nativeSrc":"32306:18:69","nodeType":"YulFunctionCall","src":"32306:18:69"},"variableNames":[{"name":"tail","nativeSrc":"32298:4:69","nodeType":"YulIdentifier","src":"32298:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"32345:9:69","nodeType":"YulIdentifier","src":"32345:9:69"},{"kind":"number","nativeSrc":"32356:1:69","nodeType":"YulLiteral","src":"32356:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"32341:3:69","nodeType":"YulIdentifier","src":"32341:3:69"},"nativeSrc":"32341:17:69","nodeType":"YulFunctionCall","src":"32341:17:69"},{"arguments":[{"name":"tail","nativeSrc":"32364:4:69","nodeType":"YulIdentifier","src":"32364:4:69"},{"name":"headStart","nativeSrc":"32370:9:69","nodeType":"YulIdentifier","src":"32370:9:69"}],"functionName":{"name":"sub","nativeSrc":"32360:3:69","nodeType":"YulIdentifier","src":"32360:3:69"},"nativeSrc":"32360:20:69","nodeType":"YulFunctionCall","src":"32360:20:69"}],"functionName":{"name":"mstore","nativeSrc":"32334:6:69","nodeType":"YulIdentifier","src":"32334:6:69"},"nativeSrc":"32334:47:69","nodeType":"YulFunctionCall","src":"32334:47:69"},"nativeSrc":"32334:47:69","nodeType":"YulExpressionStatement","src":"32334:47:69"},{"nativeSrc":"32390:139:69","nodeType":"YulAssignment","src":"32390:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"32524:4:69","nodeType":"YulIdentifier","src":"32524:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_5cff66c2aa35848a49d268966a8281c7733b409122a8f3eddbea1b1ec033686c_to_t_string_memory_ptr_fromStack","nativeSrc":"32398:124:69","nodeType":"YulIdentifier","src":"32398:124:69"},"nativeSrc":"32398:131:69","nodeType":"YulFunctionCall","src":"32398:131:69"},"variableNames":[{"name":"tail","nativeSrc":"32390:4:69","nodeType":"YulIdentifier","src":"32390:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_5cff66c2aa35848a49d268966a8281c7733b409122a8f3eddbea1b1ec033686c__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"32117:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"32268:9:69","nodeType":"YulTypedName","src":"32268:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"32283:4:69","nodeType":"YulTypedName","src":"32283:4:69","type":""}],"src":"32117:419:69"},{"body":{"nativeSrc":"32584:78:69","nodeType":"YulBlock","src":"32584:78:69","statements":[{"body":{"nativeSrc":"32640:16:69","nodeType":"YulBlock","src":"32640:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"32649:1:69","nodeType":"YulLiteral","src":"32649:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"32652:1:69","nodeType":"YulLiteral","src":"32652:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"32642:6:69","nodeType":"YulIdentifier","src":"32642:6:69"},"nativeSrc":"32642:12:69","nodeType":"YulFunctionCall","src":"32642:12:69"},"nativeSrc":"32642:12:69","nodeType":"YulExpressionStatement","src":"32642:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"32607:5:69","nodeType":"YulIdentifier","src":"32607:5:69"},{"arguments":[{"name":"value","nativeSrc":"32631:5:69","nodeType":"YulIdentifier","src":"32631:5:69"}],"functionName":{"name":"cleanup_t_uint32","nativeSrc":"32614:16:69","nodeType":"YulIdentifier","src":"32614:16:69"},"nativeSrc":"32614:23:69","nodeType":"YulFunctionCall","src":"32614:23:69"}],"functionName":{"name":"eq","nativeSrc":"32604:2:69","nodeType":"YulIdentifier","src":"32604:2:69"},"nativeSrc":"32604:34:69","nodeType":"YulFunctionCall","src":"32604:34:69"}],"functionName":{"name":"iszero","nativeSrc":"32597:6:69","nodeType":"YulIdentifier","src":"32597:6:69"},"nativeSrc":"32597:42:69","nodeType":"YulFunctionCall","src":"32597:42:69"},"nativeSrc":"32594:62:69","nodeType":"YulIf","src":"32594:62:69"}]},"name":"validator_revert_t_uint32","nativeSrc":"32542:120:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"32577:5:69","nodeType":"YulTypedName","src":"32577:5:69","type":""}],"src":"32542:120:69"},{"body":{"nativeSrc":"32719:86:69","nodeType":"YulBlock","src":"32719:86:69","statements":[{"nativeSrc":"32729:29:69","nodeType":"YulAssignment","src":"32729:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"32751:6:69","nodeType":"YulIdentifier","src":"32751:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"32738:12:69","nodeType":"YulIdentifier","src":"32738:12:69"},"nativeSrc":"32738:20:69","nodeType":"YulFunctionCall","src":"32738:20:69"},"variableNames":[{"name":"value","nativeSrc":"32729:5:69","nodeType":"YulIdentifier","src":"32729:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"32793:5:69","nodeType":"YulIdentifier","src":"32793:5:69"}],"functionName":{"name":"validator_revert_t_uint32","nativeSrc":"32767:25:69","nodeType":"YulIdentifier","src":"32767:25:69"},"nativeSrc":"32767:32:69","nodeType":"YulFunctionCall","src":"32767:32:69"},"nativeSrc":"32767:32:69","nodeType":"YulExpressionStatement","src":"32767:32:69"}]},"name":"abi_decode_t_uint32","nativeSrc":"32668:137:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"32697:6:69","nodeType":"YulTypedName","src":"32697:6:69","type":""},{"name":"end","nativeSrc":"32705:3:69","nodeType":"YulTypedName","src":"32705:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"32713:5:69","nodeType":"YulTypedName","src":"32713:5:69","type":""}],"src":"32668:137:69"},{"body":{"nativeSrc":"32876:262:69","nodeType":"YulBlock","src":"32876:262:69","statements":[{"body":{"nativeSrc":"32922:83:69","nodeType":"YulBlock","src":"32922:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"32924:77:69","nodeType":"YulIdentifier","src":"32924:77:69"},"nativeSrc":"32924:79:69","nodeType":"YulFunctionCall","src":"32924:79:69"},"nativeSrc":"32924:79:69","nodeType":"YulExpressionStatement","src":"32924:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"32897:7:69","nodeType":"YulIdentifier","src":"32897:7:69"},{"name":"headStart","nativeSrc":"32906:9:69","nodeType":"YulIdentifier","src":"32906:9:69"}],"functionName":{"name":"sub","nativeSrc":"32893:3:69","nodeType":"YulIdentifier","src":"32893:3:69"},"nativeSrc":"32893:23:69","nodeType":"YulFunctionCall","src":"32893:23:69"},{"kind":"number","nativeSrc":"32918:2:69","nodeType":"YulLiteral","src":"32918:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"32889:3:69","nodeType":"YulIdentifier","src":"32889:3:69"},"nativeSrc":"32889:32:69","nodeType":"YulFunctionCall","src":"32889:32:69"},"nativeSrc":"32886:119:69","nodeType":"YulIf","src":"32886:119:69"},{"nativeSrc":"33015:116:69","nodeType":"YulBlock","src":"33015:116:69","statements":[{"nativeSrc":"33030:15:69","nodeType":"YulVariableDeclaration","src":"33030:15:69","value":{"kind":"number","nativeSrc":"33044:1:69","nodeType":"YulLiteral","src":"33044:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"33034:6:69","nodeType":"YulTypedName","src":"33034:6:69","type":""}]},{"nativeSrc":"33059:62:69","nodeType":"YulAssignment","src":"33059:62:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"33093:9:69","nodeType":"YulIdentifier","src":"33093:9:69"},{"name":"offset","nativeSrc":"33104:6:69","nodeType":"YulIdentifier","src":"33104:6:69"}],"functionName":{"name":"add","nativeSrc":"33089:3:69","nodeType":"YulIdentifier","src":"33089:3:69"},"nativeSrc":"33089:22:69","nodeType":"YulFunctionCall","src":"33089:22:69"},{"name":"dataEnd","nativeSrc":"33113:7:69","nodeType":"YulIdentifier","src":"33113:7:69"}],"functionName":{"name":"abi_decode_t_uint32","nativeSrc":"33069:19:69","nodeType":"YulIdentifier","src":"33069:19:69"},"nativeSrc":"33069:52:69","nodeType":"YulFunctionCall","src":"33069:52:69"},"variableNames":[{"name":"value0","nativeSrc":"33059:6:69","nodeType":"YulIdentifier","src":"33059:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint32","nativeSrc":"32811:327:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"32846:9:69","nodeType":"YulTypedName","src":"32846:9:69","type":""},{"name":"dataEnd","nativeSrc":"32857:7:69","nodeType":"YulTypedName","src":"32857:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"32869:6:69","nodeType":"YulTypedName","src":"32869:6:69","type":""}],"src":"32811:327:69"},{"body":{"nativeSrc":"33250:72:69","nodeType":"YulBlock","src":"33250:72:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"33272:6:69","nodeType":"YulIdentifier","src":"33272:6:69"},{"kind":"number","nativeSrc":"33280:1:69","nodeType":"YulLiteral","src":"33280:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"33268:3:69","nodeType":"YulIdentifier","src":"33268:3:69"},"nativeSrc":"33268:14:69","nodeType":"YulFunctionCall","src":"33268:14:69"},{"hexValue":"696e76616c696420736574526577617264546f6b656e537065656473","kind":"string","nativeSrc":"33284:30:69","nodeType":"YulLiteral","src":"33284:30:69","type":"","value":"invalid setRewardTokenSpeeds"}],"functionName":{"name":"mstore","nativeSrc":"33261:6:69","nodeType":"YulIdentifier","src":"33261:6:69"},"nativeSrc":"33261:54:69","nodeType":"YulFunctionCall","src":"33261:54:69"},"nativeSrc":"33261:54:69","nodeType":"YulExpressionStatement","src":"33261:54:69"}]},"name":"store_literal_in_memory_322b734cdb73148ce798f463ec44e79da28ef00cb71be8ffb3f7e2a5d1d5194f","nativeSrc":"33144:178:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"33242:6:69","nodeType":"YulTypedName","src":"33242:6:69","type":""}],"src":"33144:178:69"},{"body":{"nativeSrc":"33474:220:69","nodeType":"YulBlock","src":"33474:220:69","statements":[{"nativeSrc":"33484:74:69","nodeType":"YulAssignment","src":"33484:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"33550:3:69","nodeType":"YulIdentifier","src":"33550:3:69"},{"kind":"number","nativeSrc":"33555:2:69","nodeType":"YulLiteral","src":"33555:2:69","type":"","value":"28"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"33491:58:69","nodeType":"YulIdentifier","src":"33491:58:69"},"nativeSrc":"33491:67:69","nodeType":"YulFunctionCall","src":"33491:67:69"},"variableNames":[{"name":"pos","nativeSrc":"33484:3:69","nodeType":"YulIdentifier","src":"33484:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"33656:3:69","nodeType":"YulIdentifier","src":"33656:3:69"}],"functionName":{"name":"store_literal_in_memory_322b734cdb73148ce798f463ec44e79da28ef00cb71be8ffb3f7e2a5d1d5194f","nativeSrc":"33567:88:69","nodeType":"YulIdentifier","src":"33567:88:69"},"nativeSrc":"33567:93:69","nodeType":"YulFunctionCall","src":"33567:93:69"},"nativeSrc":"33567:93:69","nodeType":"YulExpressionStatement","src":"33567:93:69"},{"nativeSrc":"33669:19:69","nodeType":"YulAssignment","src":"33669:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"33680:3:69","nodeType":"YulIdentifier","src":"33680:3:69"},{"kind":"number","nativeSrc":"33685:2:69","nodeType":"YulLiteral","src":"33685:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"33676:3:69","nodeType":"YulIdentifier","src":"33676:3:69"},"nativeSrc":"33676:12:69","nodeType":"YulFunctionCall","src":"33676:12:69"},"variableNames":[{"name":"end","nativeSrc":"33669:3:69","nodeType":"YulIdentifier","src":"33669:3:69"}]}]},"name":"abi_encode_t_stringliteral_322b734cdb73148ce798f463ec44e79da28ef00cb71be8ffb3f7e2a5d1d5194f_to_t_string_memory_ptr_fromStack","nativeSrc":"33328:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"33462:3:69","nodeType":"YulTypedName","src":"33462:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"33470:3:69","nodeType":"YulTypedName","src":"33470:3:69","type":""}],"src":"33328:366:69"},{"body":{"nativeSrc":"33871:248:69","nodeType":"YulBlock","src":"33871:248:69","statements":[{"nativeSrc":"33881:26:69","nodeType":"YulAssignment","src":"33881:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"33893:9:69","nodeType":"YulIdentifier","src":"33893:9:69"},{"kind":"number","nativeSrc":"33904:2:69","nodeType":"YulLiteral","src":"33904:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"33889:3:69","nodeType":"YulIdentifier","src":"33889:3:69"},"nativeSrc":"33889:18:69","nodeType":"YulFunctionCall","src":"33889:18:69"},"variableNames":[{"name":"tail","nativeSrc":"33881:4:69","nodeType":"YulIdentifier","src":"33881:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"33928:9:69","nodeType":"YulIdentifier","src":"33928:9:69"},{"kind":"number","nativeSrc":"33939:1:69","nodeType":"YulLiteral","src":"33939:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"33924:3:69","nodeType":"YulIdentifier","src":"33924:3:69"},"nativeSrc":"33924:17:69","nodeType":"YulFunctionCall","src":"33924:17:69"},{"arguments":[{"name":"tail","nativeSrc":"33947:4:69","nodeType":"YulIdentifier","src":"33947:4:69"},{"name":"headStart","nativeSrc":"33953:9:69","nodeType":"YulIdentifier","src":"33953:9:69"}],"functionName":{"name":"sub","nativeSrc":"33943:3:69","nodeType":"YulIdentifier","src":"33943:3:69"},"nativeSrc":"33943:20:69","nodeType":"YulFunctionCall","src":"33943:20:69"}],"functionName":{"name":"mstore","nativeSrc":"33917:6:69","nodeType":"YulIdentifier","src":"33917:6:69"},"nativeSrc":"33917:47:69","nodeType":"YulFunctionCall","src":"33917:47:69"},"nativeSrc":"33917:47:69","nodeType":"YulExpressionStatement","src":"33917:47:69"},{"nativeSrc":"33973:139:69","nodeType":"YulAssignment","src":"33973:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"34107:4:69","nodeType":"YulIdentifier","src":"34107:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_322b734cdb73148ce798f463ec44e79da28ef00cb71be8ffb3f7e2a5d1d5194f_to_t_string_memory_ptr_fromStack","nativeSrc":"33981:124:69","nodeType":"YulIdentifier","src":"33981:124:69"},"nativeSrc":"33981:131:69","nodeType":"YulFunctionCall","src":"33981:131:69"},"variableNames":[{"name":"tail","nativeSrc":"33973:4:69","nodeType":"YulIdentifier","src":"33973:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_322b734cdb73148ce798f463ec44e79da28ef00cb71be8ffb3f7e2a5d1d5194f__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"33700:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"33851:9:69","nodeType":"YulTypedName","src":"33851:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"33866:4:69","nodeType":"YulTypedName","src":"33866:4:69","type":""}],"src":"33700:419:69"},{"body":{"nativeSrc":"34231:127:69","nodeType":"YulBlock","src":"34231:127:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"34253:6:69","nodeType":"YulIdentifier","src":"34253:6:69"},{"kind":"number","nativeSrc":"34261:1:69","nodeType":"YulLiteral","src":"34261:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"34249:3:69","nodeType":"YulIdentifier","src":"34249:3:69"},"nativeSrc":"34249:14:69","nodeType":"YulFunctionCall","src":"34249:14:69"},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320616c726561","kind":"string","nativeSrc":"34265:34:69","nodeType":"YulLiteral","src":"34265:34:69","type":"","value":"Initializable: contract is alrea"}],"functionName":{"name":"mstore","nativeSrc":"34242:6:69","nodeType":"YulIdentifier","src":"34242:6:69"},"nativeSrc":"34242:58:69","nodeType":"YulFunctionCall","src":"34242:58:69"},"nativeSrc":"34242:58:69","nodeType":"YulExpressionStatement","src":"34242:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"34321:6:69","nodeType":"YulIdentifier","src":"34321:6:69"},{"kind":"number","nativeSrc":"34329:2:69","nodeType":"YulLiteral","src":"34329:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"34317:3:69","nodeType":"YulIdentifier","src":"34317:3:69"},"nativeSrc":"34317:15:69","nodeType":"YulFunctionCall","src":"34317:15:69"},{"hexValue":"647920696e697469616c697a6564","kind":"string","nativeSrc":"34334:16:69","nodeType":"YulLiteral","src":"34334:16:69","type":"","value":"dy initialized"}],"functionName":{"name":"mstore","nativeSrc":"34310:6:69","nodeType":"YulIdentifier","src":"34310:6:69"},"nativeSrc":"34310:41:69","nodeType":"YulFunctionCall","src":"34310:41:69"},"nativeSrc":"34310:41:69","nodeType":"YulExpressionStatement","src":"34310:41:69"}]},"name":"store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","nativeSrc":"34125:233:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"34223:6:69","nodeType":"YulTypedName","src":"34223:6:69","type":""}],"src":"34125:233:69"},{"body":{"nativeSrc":"34510:220:69","nodeType":"YulBlock","src":"34510:220:69","statements":[{"nativeSrc":"34520:74:69","nodeType":"YulAssignment","src":"34520:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"34586:3:69","nodeType":"YulIdentifier","src":"34586:3:69"},{"kind":"number","nativeSrc":"34591:2:69","nodeType":"YulLiteral","src":"34591:2:69","type":"","value":"46"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"34527:58:69","nodeType":"YulIdentifier","src":"34527:58:69"},"nativeSrc":"34527:67:69","nodeType":"YulFunctionCall","src":"34527:67:69"},"variableNames":[{"name":"pos","nativeSrc":"34520:3:69","nodeType":"YulIdentifier","src":"34520:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"34692:3:69","nodeType":"YulIdentifier","src":"34692:3:69"}],"functionName":{"name":"store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","nativeSrc":"34603:88:69","nodeType":"YulIdentifier","src":"34603:88:69"},"nativeSrc":"34603:93:69","nodeType":"YulFunctionCall","src":"34603:93:69"},"nativeSrc":"34603:93:69","nodeType":"YulExpressionStatement","src":"34603:93:69"},{"nativeSrc":"34705:19:69","nodeType":"YulAssignment","src":"34705:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"34716:3:69","nodeType":"YulIdentifier","src":"34716:3:69"},{"kind":"number","nativeSrc":"34721:2:69","nodeType":"YulLiteral","src":"34721:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"34712:3:69","nodeType":"YulIdentifier","src":"34712:3:69"},"nativeSrc":"34712:12:69","nodeType":"YulFunctionCall","src":"34712:12:69"},"variableNames":[{"name":"end","nativeSrc":"34705:3:69","nodeType":"YulIdentifier","src":"34705:3:69"}]}]},"name":"abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack","nativeSrc":"34364:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"34498:3:69","nodeType":"YulTypedName","src":"34498:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"34506:3:69","nodeType":"YulTypedName","src":"34506:3:69","type":""}],"src":"34364:366:69"},{"body":{"nativeSrc":"34907:248:69","nodeType":"YulBlock","src":"34907:248:69","statements":[{"nativeSrc":"34917:26:69","nodeType":"YulAssignment","src":"34917:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"34929:9:69","nodeType":"YulIdentifier","src":"34929:9:69"},{"kind":"number","nativeSrc":"34940:2:69","nodeType":"YulLiteral","src":"34940:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"34925:3:69","nodeType":"YulIdentifier","src":"34925:3:69"},"nativeSrc":"34925:18:69","nodeType":"YulFunctionCall","src":"34925:18:69"},"variableNames":[{"name":"tail","nativeSrc":"34917:4:69","nodeType":"YulIdentifier","src":"34917:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"34964:9:69","nodeType":"YulIdentifier","src":"34964:9:69"},{"kind":"number","nativeSrc":"34975:1:69","nodeType":"YulLiteral","src":"34975:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"34960:3:69","nodeType":"YulIdentifier","src":"34960:3:69"},"nativeSrc":"34960:17:69","nodeType":"YulFunctionCall","src":"34960:17:69"},{"arguments":[{"name":"tail","nativeSrc":"34983:4:69","nodeType":"YulIdentifier","src":"34983:4:69"},{"name":"headStart","nativeSrc":"34989:9:69","nodeType":"YulIdentifier","src":"34989:9:69"}],"functionName":{"name":"sub","nativeSrc":"34979:3:69","nodeType":"YulIdentifier","src":"34979:3:69"},"nativeSrc":"34979:20:69","nodeType":"YulFunctionCall","src":"34979:20:69"}],"functionName":{"name":"mstore","nativeSrc":"34953:6:69","nodeType":"YulIdentifier","src":"34953:6:69"},"nativeSrc":"34953:47:69","nodeType":"YulFunctionCall","src":"34953:47:69"},"nativeSrc":"34953:47:69","nodeType":"YulExpressionStatement","src":"34953:47:69"},{"nativeSrc":"35009:139:69","nodeType":"YulAssignment","src":"35009:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"35143:4:69","nodeType":"YulIdentifier","src":"35143:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack","nativeSrc":"35017:124:69","nodeType":"YulIdentifier","src":"35017:124:69"},"nativeSrc":"35017:131:69","nodeType":"YulFunctionCall","src":"35017:131:69"},"variableNames":[{"name":"tail","nativeSrc":"35009:4:69","nodeType":"YulIdentifier","src":"35009:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"34736:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"34887:9:69","nodeType":"YulTypedName","src":"34887:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"34902:4:69","nodeType":"YulTypedName","src":"34902:4:69","type":""}],"src":"34736:419:69"},{"body":{"nativeSrc":"35214:32:69","nodeType":"YulBlock","src":"35214:32:69","statements":[{"nativeSrc":"35224:16:69","nodeType":"YulAssignment","src":"35224:16:69","value":{"name":"value","nativeSrc":"35235:5:69","nodeType":"YulIdentifier","src":"35235:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"35224:7:69","nodeType":"YulIdentifier","src":"35224:7:69"}]}]},"name":"cleanup_t_rational_1_by_1","nativeSrc":"35161:85:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"35196:5:69","nodeType":"YulTypedName","src":"35196:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"35206:7:69","nodeType":"YulTypedName","src":"35206:7:69","type":""}],"src":"35161:85:69"},{"body":{"nativeSrc":"35295:43:69","nodeType":"YulBlock","src":"35295:43:69","statements":[{"nativeSrc":"35305:27:69","nodeType":"YulAssignment","src":"35305:27:69","value":{"arguments":[{"name":"value","nativeSrc":"35320:5:69","nodeType":"YulIdentifier","src":"35320:5:69"},{"kind":"number","nativeSrc":"35327:4:69","nodeType":"YulLiteral","src":"35327:4:69","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"35316:3:69","nodeType":"YulIdentifier","src":"35316:3:69"},"nativeSrc":"35316:16:69","nodeType":"YulFunctionCall","src":"35316:16:69"},"variableNames":[{"name":"cleaned","nativeSrc":"35305:7:69","nodeType":"YulIdentifier","src":"35305:7:69"}]}]},"name":"cleanup_t_uint8","nativeSrc":"35252:86:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"35277:5:69","nodeType":"YulTypedName","src":"35277:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"35287:7:69","nodeType":"YulTypedName","src":"35287:7:69","type":""}],"src":"35252:86:69"},{"body":{"nativeSrc":"35410:88:69","nodeType":"YulBlock","src":"35410:88:69","statements":[{"nativeSrc":"35420:72:69","nodeType":"YulAssignment","src":"35420:72:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"35484:5:69","nodeType":"YulIdentifier","src":"35484:5:69"}],"functionName":{"name":"cleanup_t_rational_1_by_1","nativeSrc":"35458:25:69","nodeType":"YulIdentifier","src":"35458:25:69"},"nativeSrc":"35458:32:69","nodeType":"YulFunctionCall","src":"35458:32:69"}],"functionName":{"name":"identity","nativeSrc":"35449:8:69","nodeType":"YulIdentifier","src":"35449:8:69"},"nativeSrc":"35449:42:69","nodeType":"YulFunctionCall","src":"35449:42:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"35433:15:69","nodeType":"YulIdentifier","src":"35433:15:69"},"nativeSrc":"35433:59:69","nodeType":"YulFunctionCall","src":"35433:59:69"},"variableNames":[{"name":"converted","nativeSrc":"35420:9:69","nodeType":"YulIdentifier","src":"35420:9:69"}]}]},"name":"convert_t_rational_1_by_1_to_t_uint8","nativeSrc":"35344:154:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"35390:5:69","nodeType":"YulTypedName","src":"35390:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"35400:9:69","nodeType":"YulTypedName","src":"35400:9:69","type":""}],"src":"35344:154:69"},{"body":{"nativeSrc":"35575:72:69","nodeType":"YulBlock","src":"35575:72:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"35592:3:69","nodeType":"YulIdentifier","src":"35592:3:69"},{"arguments":[{"name":"value","nativeSrc":"35634:5:69","nodeType":"YulIdentifier","src":"35634:5:69"}],"functionName":{"name":"convert_t_rational_1_by_1_to_t_uint8","nativeSrc":"35597:36:69","nodeType":"YulIdentifier","src":"35597:36:69"},"nativeSrc":"35597:43:69","nodeType":"YulFunctionCall","src":"35597:43:69"}],"functionName":{"name":"mstore","nativeSrc":"35585:6:69","nodeType":"YulIdentifier","src":"35585:6:69"},"nativeSrc":"35585:56:69","nodeType":"YulFunctionCall","src":"35585:56:69"},"nativeSrc":"35585:56:69","nodeType":"YulExpressionStatement","src":"35585:56:69"}]},"name":"abi_encode_t_rational_1_by_1_to_t_uint8_fromStack","nativeSrc":"35504:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"35563:5:69","nodeType":"YulTypedName","src":"35563:5:69","type":""},{"name":"pos","nativeSrc":"35570:3:69","nodeType":"YulTypedName","src":"35570:3:69","type":""}],"src":"35504:143:69"},{"body":{"nativeSrc":"35757:130:69","nodeType":"YulBlock","src":"35757:130:69","statements":[{"nativeSrc":"35767:26:69","nodeType":"YulAssignment","src":"35767:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"35779:9:69","nodeType":"YulIdentifier","src":"35779:9:69"},{"kind":"number","nativeSrc":"35790:2:69","nodeType":"YulLiteral","src":"35790:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"35775:3:69","nodeType":"YulIdentifier","src":"35775:3:69"},"nativeSrc":"35775:18:69","nodeType":"YulFunctionCall","src":"35775:18:69"},"variableNames":[{"name":"tail","nativeSrc":"35767:4:69","nodeType":"YulIdentifier","src":"35767:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"35853:6:69","nodeType":"YulIdentifier","src":"35853:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"35866:9:69","nodeType":"YulIdentifier","src":"35866:9:69"},{"kind":"number","nativeSrc":"35877:1:69","nodeType":"YulLiteral","src":"35877:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"35862:3:69","nodeType":"YulIdentifier","src":"35862:3:69"},"nativeSrc":"35862:17:69","nodeType":"YulFunctionCall","src":"35862:17:69"}],"functionName":{"name":"abi_encode_t_rational_1_by_1_to_t_uint8_fromStack","nativeSrc":"35803:49:69","nodeType":"YulIdentifier","src":"35803:49:69"},"nativeSrc":"35803:77:69","nodeType":"YulFunctionCall","src":"35803:77:69"},"nativeSrc":"35803:77:69","nodeType":"YulExpressionStatement","src":"35803:77:69"}]},"name":"abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed","nativeSrc":"35653:234:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"35729:9:69","nodeType":"YulTypedName","src":"35729:9:69","type":""},{"name":"value0","nativeSrc":"35741:6:69","nodeType":"YulTypedName","src":"35741:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"35752:4:69","nodeType":"YulTypedName","src":"35752:4:69","type":""}],"src":"35653:234:69"},{"body":{"nativeSrc":"35972:96:69","nodeType":"YulBlock","src":"35972:96:69","statements":[{"nativeSrc":"35982:22:69","nodeType":"YulAssignment","src":"35982:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"35997:6:69","nodeType":"YulIdentifier","src":"35997:6:69"}],"functionName":{"name":"mload","nativeSrc":"35991:5:69","nodeType":"YulIdentifier","src":"35991:5:69"},"nativeSrc":"35991:13:69","nodeType":"YulFunctionCall","src":"35991:13:69"},"variableNames":[{"name":"value","nativeSrc":"35982:5:69","nodeType":"YulIdentifier","src":"35982:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"36056:5:69","nodeType":"YulIdentifier","src":"36056:5:69"}],"functionName":{"name":"validator_revert_t_contract$_VToken_$15506","nativeSrc":"36013:42:69","nodeType":"YulIdentifier","src":"36013:42:69"},"nativeSrc":"36013:49:69","nodeType":"YulFunctionCall","src":"36013:49:69"},"nativeSrc":"36013:49:69","nodeType":"YulExpressionStatement","src":"36013:49:69"}]},"name":"abi_decode_t_contract$_VToken_$15506_fromMemory","nativeSrc":"35893:175:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"35950:6:69","nodeType":"YulTypedName","src":"35950:6:69","type":""},{"name":"end","nativeSrc":"35958:3:69","nodeType":"YulTypedName","src":"35958:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"35966:5:69","nodeType":"YulTypedName","src":"35966:5:69","type":""}],"src":"35893:175:69"},{"body":{"nativeSrc":"36228:651:69","nodeType":"YulBlock","src":"36228:651:69","statements":[{"nativeSrc":"36238:106:69","nodeType":"YulAssignment","src":"36238:106:69","value":{"arguments":[{"arguments":[{"name":"length","nativeSrc":"36336:6:69","nodeType":"YulIdentifier","src":"36336:6:69"}],"functionName":{"name":"array_allocation_size_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"36263:72:69","nodeType":"YulIdentifier","src":"36263:72:69"},"nativeSrc":"36263:80:69","nodeType":"YulFunctionCall","src":"36263:80:69"}],"functionName":{"name":"allocate_memory","nativeSrc":"36247:15:69","nodeType":"YulIdentifier","src":"36247:15:69"},"nativeSrc":"36247:97:69","nodeType":"YulFunctionCall","src":"36247:97:69"},"variableNames":[{"name":"array","nativeSrc":"36238:5:69","nodeType":"YulIdentifier","src":"36238:5:69"}]},{"nativeSrc":"36353:16:69","nodeType":"YulVariableDeclaration","src":"36353:16:69","value":{"name":"array","nativeSrc":"36364:5:69","nodeType":"YulIdentifier","src":"36364:5:69"},"variables":[{"name":"dst","nativeSrc":"36357:3:69","nodeType":"YulTypedName","src":"36357:3:69","type":""}]},{"expression":{"arguments":[{"name":"array","nativeSrc":"36386:5:69","nodeType":"YulIdentifier","src":"36386:5:69"},{"name":"length","nativeSrc":"36393:6:69","nodeType":"YulIdentifier","src":"36393:6:69"}],"functionName":{"name":"mstore","nativeSrc":"36379:6:69","nodeType":"YulIdentifier","src":"36379:6:69"},"nativeSrc":"36379:21:69","nodeType":"YulFunctionCall","src":"36379:21:69"},"nativeSrc":"36379:21:69","nodeType":"YulExpressionStatement","src":"36379:21:69"},{"nativeSrc":"36409:23:69","nodeType":"YulAssignment","src":"36409:23:69","value":{"arguments":[{"name":"array","nativeSrc":"36420:5:69","nodeType":"YulIdentifier","src":"36420:5:69"},{"kind":"number","nativeSrc":"36427:4:69","nodeType":"YulLiteral","src":"36427:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"36416:3:69","nodeType":"YulIdentifier","src":"36416:3:69"},"nativeSrc":"36416:16:69","nodeType":"YulFunctionCall","src":"36416:16:69"},"variableNames":[{"name":"dst","nativeSrc":"36409:3:69","nodeType":"YulIdentifier","src":"36409:3:69"}]},{"nativeSrc":"36442:44:69","nodeType":"YulVariableDeclaration","src":"36442:44:69","value":{"arguments":[{"name":"offset","nativeSrc":"36460:6:69","nodeType":"YulIdentifier","src":"36460:6:69"},{"arguments":[{"name":"length","nativeSrc":"36472:6:69","nodeType":"YulIdentifier","src":"36472:6:69"},{"kind":"number","nativeSrc":"36480:4:69","nodeType":"YulLiteral","src":"36480:4:69","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"36468:3:69","nodeType":"YulIdentifier","src":"36468:3:69"},"nativeSrc":"36468:17:69","nodeType":"YulFunctionCall","src":"36468:17:69"}],"functionName":{"name":"add","nativeSrc":"36456:3:69","nodeType":"YulIdentifier","src":"36456:3:69"},"nativeSrc":"36456:30:69","nodeType":"YulFunctionCall","src":"36456:30:69"},"variables":[{"name":"srcEnd","nativeSrc":"36446:6:69","nodeType":"YulTypedName","src":"36446:6:69","type":""}]},{"body":{"nativeSrc":"36514:103:69","nodeType":"YulBlock","src":"36514:103:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"36528:77:69","nodeType":"YulIdentifier","src":"36528:77:69"},"nativeSrc":"36528:79:69","nodeType":"YulFunctionCall","src":"36528:79:69"},"nativeSrc":"36528:79:69","nodeType":"YulExpressionStatement","src":"36528:79:69"}]},"condition":{"arguments":[{"name":"srcEnd","nativeSrc":"36501:6:69","nodeType":"YulIdentifier","src":"36501:6:69"},{"name":"end","nativeSrc":"36509:3:69","nodeType":"YulIdentifier","src":"36509:3:69"}],"functionName":{"name":"gt","nativeSrc":"36498:2:69","nodeType":"YulIdentifier","src":"36498:2:69"},"nativeSrc":"36498:15:69","nodeType":"YulFunctionCall","src":"36498:15:69"},"nativeSrc":"36495:122:69","nodeType":"YulIf","src":"36495:122:69"},{"body":{"nativeSrc":"36702:171:69","nodeType":"YulBlock","src":"36702:171:69","statements":[{"nativeSrc":"36717:21:69","nodeType":"YulVariableDeclaration","src":"36717:21:69","value":{"name":"src","nativeSrc":"36735:3:69","nodeType":"YulIdentifier","src":"36735:3:69"},"variables":[{"name":"elementPos","nativeSrc":"36721:10:69","nodeType":"YulTypedName","src":"36721:10:69","type":""}]},{"expression":{"arguments":[{"name":"dst","nativeSrc":"36759:3:69","nodeType":"YulIdentifier","src":"36759:3:69"},{"arguments":[{"name":"elementPos","nativeSrc":"36812:10:69","nodeType":"YulIdentifier","src":"36812:10:69"},{"name":"end","nativeSrc":"36824:3:69","nodeType":"YulIdentifier","src":"36824:3:69"}],"functionName":{"name":"abi_decode_t_contract$_VToken_$15506_fromMemory","nativeSrc":"36764:47:69","nodeType":"YulIdentifier","src":"36764:47:69"},"nativeSrc":"36764:64:69","nodeType":"YulFunctionCall","src":"36764:64:69"}],"functionName":{"name":"mstore","nativeSrc":"36752:6:69","nodeType":"YulIdentifier","src":"36752:6:69"},"nativeSrc":"36752:77:69","nodeType":"YulFunctionCall","src":"36752:77:69"},"nativeSrc":"36752:77:69","nodeType":"YulExpressionStatement","src":"36752:77:69"},{"nativeSrc":"36842:21:69","nodeType":"YulAssignment","src":"36842:21:69","value":{"arguments":[{"name":"dst","nativeSrc":"36853:3:69","nodeType":"YulIdentifier","src":"36853:3:69"},{"kind":"number","nativeSrc":"36858:4:69","nodeType":"YulLiteral","src":"36858:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"36849:3:69","nodeType":"YulIdentifier","src":"36849:3:69"},"nativeSrc":"36849:14:69","nodeType":"YulFunctionCall","src":"36849:14:69"},"variableNames":[{"name":"dst","nativeSrc":"36842:3:69","nodeType":"YulIdentifier","src":"36842:3:69"}]}]},"condition":{"arguments":[{"name":"src","nativeSrc":"36655:3:69","nodeType":"YulIdentifier","src":"36655:3:69"},{"name":"srcEnd","nativeSrc":"36660:6:69","nodeType":"YulIdentifier","src":"36660:6:69"}],"functionName":{"name":"lt","nativeSrc":"36652:2:69","nodeType":"YulIdentifier","src":"36652:2:69"},"nativeSrc":"36652:15:69","nodeType":"YulFunctionCall","src":"36652:15:69"},"nativeSrc":"36626:247:69","nodeType":"YulForLoop","post":{"nativeSrc":"36668:25:69","nodeType":"YulBlock","src":"36668:25:69","statements":[{"nativeSrc":"36670:21:69","nodeType":"YulAssignment","src":"36670:21:69","value":{"arguments":[{"name":"src","nativeSrc":"36681:3:69","nodeType":"YulIdentifier","src":"36681:3:69"},{"kind":"number","nativeSrc":"36686:4:69","nodeType":"YulLiteral","src":"36686:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"36677:3:69","nodeType":"YulIdentifier","src":"36677:3:69"},"nativeSrc":"36677:14:69","nodeType":"YulFunctionCall","src":"36677:14:69"},"variableNames":[{"name":"src","nativeSrc":"36670:3:69","nodeType":"YulIdentifier","src":"36670:3:69"}]}]},"pre":{"nativeSrc":"36630:21:69","nodeType":"YulBlock","src":"36630:21:69","statements":[{"nativeSrc":"36632:17:69","nodeType":"YulVariableDeclaration","src":"36632:17:69","value":{"name":"offset","nativeSrc":"36643:6:69","nodeType":"YulIdentifier","src":"36643:6:69"},"variables":[{"name":"src","nativeSrc":"36636:3:69","nodeType":"YulTypedName","src":"36636:3:69","type":""}]}]},"src":"36626:247:69"}]},"name":"abi_decode_available_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_fromMemory","nativeSrc":"36099:780:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"36198:6:69","nodeType":"YulTypedName","src":"36198:6:69","type":""},{"name":"length","nativeSrc":"36206:6:69","nodeType":"YulTypedName","src":"36206:6:69","type":""},{"name":"end","nativeSrc":"36214:3:69","nodeType":"YulTypedName","src":"36214:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"36222:5:69","nodeType":"YulTypedName","src":"36222:5:69","type":""}],"src":"36099:780:69"},{"body":{"nativeSrc":"37014:313:69","nodeType":"YulBlock","src":"37014:313:69","statements":[{"body":{"nativeSrc":"37063:83:69","nodeType":"YulBlock","src":"37063:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"37065:77:69","nodeType":"YulIdentifier","src":"37065:77:69"},"nativeSrc":"37065:79:69","nodeType":"YulFunctionCall","src":"37065:79:69"},"nativeSrc":"37065:79:69","nodeType":"YulExpressionStatement","src":"37065:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"37042:6:69","nodeType":"YulIdentifier","src":"37042:6:69"},{"kind":"number","nativeSrc":"37050:4:69","nodeType":"YulLiteral","src":"37050:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"37038:3:69","nodeType":"YulIdentifier","src":"37038:3:69"},"nativeSrc":"37038:17:69","nodeType":"YulFunctionCall","src":"37038:17:69"},{"name":"end","nativeSrc":"37057:3:69","nodeType":"YulIdentifier","src":"37057:3:69"}],"functionName":{"name":"slt","nativeSrc":"37034:3:69","nodeType":"YulIdentifier","src":"37034:3:69"},"nativeSrc":"37034:27:69","nodeType":"YulFunctionCall","src":"37034:27:69"}],"functionName":{"name":"iszero","nativeSrc":"37027:6:69","nodeType":"YulIdentifier","src":"37027:6:69"},"nativeSrc":"37027:35:69","nodeType":"YulFunctionCall","src":"37027:35:69"},"nativeSrc":"37024:122:69","nodeType":"YulIf","src":"37024:122:69"},{"nativeSrc":"37155:27:69","nodeType":"YulVariableDeclaration","src":"37155:27:69","value":{"arguments":[{"name":"offset","nativeSrc":"37175:6:69","nodeType":"YulIdentifier","src":"37175:6:69"}],"functionName":{"name":"mload","nativeSrc":"37169:5:69","nodeType":"YulIdentifier","src":"37169:5:69"},"nativeSrc":"37169:13:69","nodeType":"YulFunctionCall","src":"37169:13:69"},"variables":[{"name":"length","nativeSrc":"37159:6:69","nodeType":"YulTypedName","src":"37159:6:69","type":""}]},{"nativeSrc":"37191:130:69","nodeType":"YulAssignment","src":"37191:130:69","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"37294:6:69","nodeType":"YulIdentifier","src":"37294:6:69"},{"kind":"number","nativeSrc":"37302:4:69","nodeType":"YulLiteral","src":"37302:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"37290:3:69","nodeType":"YulIdentifier","src":"37290:3:69"},"nativeSrc":"37290:17:69","nodeType":"YulFunctionCall","src":"37290:17:69"},{"name":"length","nativeSrc":"37309:6:69","nodeType":"YulIdentifier","src":"37309:6:69"},{"name":"end","nativeSrc":"37317:3:69","nodeType":"YulIdentifier","src":"37317:3:69"}],"functionName":{"name":"abi_decode_available_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_fromMemory","nativeSrc":"37200:89:69","nodeType":"YulIdentifier","src":"37200:89:69"},"nativeSrc":"37200:121:69","nodeType":"YulFunctionCall","src":"37200:121:69"},"variableNames":[{"name":"array","nativeSrc":"37191:5:69","nodeType":"YulIdentifier","src":"37191:5:69"}]}]},"name":"abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_fromMemory","nativeSrc":"36910:417:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"36992:6:69","nodeType":"YulTypedName","src":"36992:6:69","type":""},{"name":"end","nativeSrc":"37000:3:69","nodeType":"YulTypedName","src":"37000:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"37008:5:69","nodeType":"YulTypedName","src":"37008:5:69","type":""}],"src":"36910:417:69"},{"body":{"nativeSrc":"37451:468:69","nodeType":"YulBlock","src":"37451:468:69","statements":[{"body":{"nativeSrc":"37497:83:69","nodeType":"YulBlock","src":"37497:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"37499:77:69","nodeType":"YulIdentifier","src":"37499:77:69"},"nativeSrc":"37499:79:69","nodeType":"YulFunctionCall","src":"37499:79:69"},"nativeSrc":"37499:79:69","nodeType":"YulExpressionStatement","src":"37499:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"37472:7:69","nodeType":"YulIdentifier","src":"37472:7:69"},{"name":"headStart","nativeSrc":"37481:9:69","nodeType":"YulIdentifier","src":"37481:9:69"}],"functionName":{"name":"sub","nativeSrc":"37468:3:69","nodeType":"YulIdentifier","src":"37468:3:69"},"nativeSrc":"37468:23:69","nodeType":"YulFunctionCall","src":"37468:23:69"},{"kind":"number","nativeSrc":"37493:2:69","nodeType":"YulLiteral","src":"37493:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"37464:3:69","nodeType":"YulIdentifier","src":"37464:3:69"},"nativeSrc":"37464:32:69","nodeType":"YulFunctionCall","src":"37464:32:69"},"nativeSrc":"37461:119:69","nodeType":"YulIf","src":"37461:119:69"},{"nativeSrc":"37590:322:69","nodeType":"YulBlock","src":"37590:322:69","statements":[{"nativeSrc":"37605:38:69","nodeType":"YulVariableDeclaration","src":"37605:38:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"37629:9:69","nodeType":"YulIdentifier","src":"37629:9:69"},{"kind":"number","nativeSrc":"37640:1:69","nodeType":"YulLiteral","src":"37640:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"37625:3:69","nodeType":"YulIdentifier","src":"37625:3:69"},"nativeSrc":"37625:17:69","nodeType":"YulFunctionCall","src":"37625:17:69"}],"functionName":{"name":"mload","nativeSrc":"37619:5:69","nodeType":"YulIdentifier","src":"37619:5:69"},"nativeSrc":"37619:24:69","nodeType":"YulFunctionCall","src":"37619:24:69"},"variables":[{"name":"offset","nativeSrc":"37609:6:69","nodeType":"YulTypedName","src":"37609:6:69","type":""}]},{"body":{"nativeSrc":"37690:83:69","nodeType":"YulBlock","src":"37690:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"37692:77:69","nodeType":"YulIdentifier","src":"37692:77:69"},"nativeSrc":"37692:79:69","nodeType":"YulFunctionCall","src":"37692:79:69"},"nativeSrc":"37692:79:69","nodeType":"YulExpressionStatement","src":"37692:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"37662:6:69","nodeType":"YulIdentifier","src":"37662:6:69"},{"kind":"number","nativeSrc":"37670:18:69","nodeType":"YulLiteral","src":"37670:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"37659:2:69","nodeType":"YulIdentifier","src":"37659:2:69"},"nativeSrc":"37659:30:69","nodeType":"YulFunctionCall","src":"37659:30:69"},"nativeSrc":"37656:117:69","nodeType":"YulIf","src":"37656:117:69"},{"nativeSrc":"37787:115:69","nodeType":"YulAssignment","src":"37787:115:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"37874:9:69","nodeType":"YulIdentifier","src":"37874:9:69"},{"name":"offset","nativeSrc":"37885:6:69","nodeType":"YulIdentifier","src":"37885:6:69"}],"functionName":{"name":"add","nativeSrc":"37870:3:69","nodeType":"YulIdentifier","src":"37870:3:69"},"nativeSrc":"37870:22:69","nodeType":"YulFunctionCall","src":"37870:22:69"},{"name":"dataEnd","nativeSrc":"37894:7:69","nodeType":"YulIdentifier","src":"37894:7:69"}],"functionName":{"name":"abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_fromMemory","nativeSrc":"37797:72:69","nodeType":"YulIdentifier","src":"37797:72:69"},"nativeSrc":"37797:105:69","nodeType":"YulFunctionCall","src":"37797:105:69"},"variableNames":[{"name":"value0","nativeSrc":"37787:6:69","nodeType":"YulIdentifier","src":"37787:6:69"}]}]}]},"name":"abi_decode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_fromMemory","nativeSrc":"37333:586:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"37421:9:69","nodeType":"YulTypedName","src":"37421:9:69","type":""},{"name":"dataEnd","nativeSrc":"37432:7:69","nodeType":"YulTypedName","src":"37432:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"37444:6:69","nodeType":"YulTypedName","src":"37444:6:69","type":""}],"src":"37333:586:69"},{"body":{"nativeSrc":"38051:206:69","nodeType":"YulBlock","src":"38051:206:69","statements":[{"nativeSrc":"38061:26:69","nodeType":"YulAssignment","src":"38061:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"38073:9:69","nodeType":"YulIdentifier","src":"38073:9:69"},{"kind":"number","nativeSrc":"38084:2:69","nodeType":"YulLiteral","src":"38084:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"38069:3:69","nodeType":"YulIdentifier","src":"38069:3:69"},"nativeSrc":"38069:18:69","nodeType":"YulFunctionCall","src":"38069:18:69"},"variableNames":[{"name":"tail","nativeSrc":"38061:4:69","nodeType":"YulIdentifier","src":"38061:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"38141:6:69","nodeType":"YulIdentifier","src":"38141:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"38154:9:69","nodeType":"YulIdentifier","src":"38154:9:69"},{"kind":"number","nativeSrc":"38165:1:69","nodeType":"YulLiteral","src":"38165:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"38150:3:69","nodeType":"YulIdentifier","src":"38150:3:69"},"nativeSrc":"38150:17:69","nodeType":"YulFunctionCall","src":"38150:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"38097:43:69","nodeType":"YulIdentifier","src":"38097:43:69"},"nativeSrc":"38097:71:69","nodeType":"YulFunctionCall","src":"38097:71:69"},"nativeSrc":"38097:71:69","nodeType":"YulExpressionStatement","src":"38097:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"38222:6:69","nodeType":"YulIdentifier","src":"38222:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"38235:9:69","nodeType":"YulIdentifier","src":"38235:9:69"},{"kind":"number","nativeSrc":"38246:2:69","nodeType":"YulLiteral","src":"38246:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"38231:3:69","nodeType":"YulIdentifier","src":"38231:3:69"},"nativeSrc":"38231:18:69","nodeType":"YulFunctionCall","src":"38231:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"38178:43:69","nodeType":"YulIdentifier","src":"38178:43:69"},"nativeSrc":"38178:72:69","nodeType":"YulFunctionCall","src":"38178:72:69"},"nativeSrc":"38178:72:69","nodeType":"YulExpressionStatement","src":"38178:72:69"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"37925:332:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"38015:9:69","nodeType":"YulTypedName","src":"38015:9:69","type":""},{"name":"value1","nativeSrc":"38027:6:69","nodeType":"YulTypedName","src":"38027:6:69","type":""},{"name":"value0","nativeSrc":"38035:6:69","nodeType":"YulTypedName","src":"38035:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"38046:4:69","nodeType":"YulTypedName","src":"38046:4:69","type":""}],"src":"37925:332:69"},{"body":{"nativeSrc":"38318:53:69","nodeType":"YulBlock","src":"38318:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"38335:3:69","nodeType":"YulIdentifier","src":"38335:3:69"},{"arguments":[{"name":"value","nativeSrc":"38358:5:69","nodeType":"YulIdentifier","src":"38358:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"38340:17:69","nodeType":"YulIdentifier","src":"38340:17:69"},"nativeSrc":"38340:24:69","nodeType":"YulFunctionCall","src":"38340:24:69"}],"functionName":{"name":"mstore","nativeSrc":"38328:6:69","nodeType":"YulIdentifier","src":"38328:6:69"},"nativeSrc":"38328:37:69","nodeType":"YulFunctionCall","src":"38328:37:69"},"nativeSrc":"38328:37:69","nodeType":"YulExpressionStatement","src":"38328:37:69"}]},"name":"abi_encode_t_uint256_to_t_uint256","nativeSrc":"38263:108:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"38306:5:69","nodeType":"YulTypedName","src":"38306:5:69","type":""},{"name":"pos","nativeSrc":"38313:3:69","nodeType":"YulTypedName","src":"38313:3:69","type":""}],"src":"38263:108:69"},{"body":{"nativeSrc":"38555:221:69","nodeType":"YulBlock","src":"38555:221:69","statements":[{"nativeSrc":"38565:26:69","nodeType":"YulVariableDeclaration","src":"38565:26:69","value":{"arguments":[{"name":"pos","nativeSrc":"38581:3:69","nodeType":"YulIdentifier","src":"38581:3:69"},{"kind":"number","nativeSrc":"38586:4:69","nodeType":"YulLiteral","src":"38586:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"38577:3:69","nodeType":"YulIdentifier","src":"38577:3:69"},"nativeSrc":"38577:14:69","nodeType":"YulFunctionCall","src":"38577:14:69"},"variables":[{"name":"tail","nativeSrc":"38569:4:69","nodeType":"YulTypedName","src":"38569:4:69","type":""}]},{"nativeSrc":"38601:168:69","nodeType":"YulBlock","src":"38601:168:69","statements":[{"nativeSrc":"38640:43:69","nodeType":"YulVariableDeclaration","src":"38640:43:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"38670:5:69","nodeType":"YulIdentifier","src":"38670:5:69"},{"kind":"number","nativeSrc":"38677:4:69","nodeType":"YulLiteral","src":"38677:4:69","type":"","value":"0x00"}],"functionName":{"name":"add","nativeSrc":"38666:3:69","nodeType":"YulIdentifier","src":"38666:3:69"},"nativeSrc":"38666:16:69","nodeType":"YulFunctionCall","src":"38666:16:69"}],"functionName":{"name":"mload","nativeSrc":"38660:5:69","nodeType":"YulIdentifier","src":"38660:5:69"},"nativeSrc":"38660:23:69","nodeType":"YulFunctionCall","src":"38660:23:69"},"variables":[{"name":"memberValue0","nativeSrc":"38644:12:69","nodeType":"YulTypedName","src":"38644:12:69","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nativeSrc":"38730:12:69","nodeType":"YulIdentifier","src":"38730:12:69"},{"arguments":[{"name":"pos","nativeSrc":"38748:3:69","nodeType":"YulIdentifier","src":"38748:3:69"},{"kind":"number","nativeSrc":"38753:4:69","nodeType":"YulLiteral","src":"38753:4:69","type":"","value":"0x00"}],"functionName":{"name":"add","nativeSrc":"38744:3:69","nodeType":"YulIdentifier","src":"38744:3:69"},"nativeSrc":"38744:14:69","nodeType":"YulFunctionCall","src":"38744:14:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256","nativeSrc":"38696:33:69","nodeType":"YulIdentifier","src":"38696:33:69"},"nativeSrc":"38696:63:69","nodeType":"YulFunctionCall","src":"38696:63:69"},"nativeSrc":"38696:63:69","nodeType":"YulExpressionStatement","src":"38696:63:69"}]}]},"name":"abi_encode_t_struct$_Exp_$9645_memory_ptr_to_t_struct$_Exp_$9645_memory_ptr_fromStack","nativeSrc":"38447:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"38542:5:69","nodeType":"YulTypedName","src":"38542:5:69","type":""},{"name":"pos","nativeSrc":"38549:3:69","nodeType":"YulTypedName","src":"38549:3:69","type":""}],"src":"38447:329:69"},{"body":{"nativeSrc":"38922:166:69","nodeType":"YulBlock","src":"38922:166:69","statements":[{"nativeSrc":"38932:26:69","nodeType":"YulAssignment","src":"38932:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"38944:9:69","nodeType":"YulIdentifier","src":"38944:9:69"},{"kind":"number","nativeSrc":"38955:2:69","nodeType":"YulLiteral","src":"38955:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"38940:3:69","nodeType":"YulIdentifier","src":"38940:3:69"},"nativeSrc":"38940:18:69","nodeType":"YulFunctionCall","src":"38940:18:69"},"variableNames":[{"name":"tail","nativeSrc":"38932:4:69","nodeType":"YulIdentifier","src":"38932:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"39054:6:69","nodeType":"YulIdentifier","src":"39054:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"39067:9:69","nodeType":"YulIdentifier","src":"39067:9:69"},{"kind":"number","nativeSrc":"39078:1:69","nodeType":"YulLiteral","src":"39078:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"39063:3:69","nodeType":"YulIdentifier","src":"39063:3:69"},"nativeSrc":"39063:17:69","nodeType":"YulFunctionCall","src":"39063:17:69"}],"functionName":{"name":"abi_encode_t_struct$_Exp_$9645_memory_ptr_to_t_struct$_Exp_$9645_memory_ptr_fromStack","nativeSrc":"38968:85:69","nodeType":"YulIdentifier","src":"38968:85:69"},"nativeSrc":"38968:113:69","nodeType":"YulFunctionCall","src":"38968:113:69"},"nativeSrc":"38968:113:69","nodeType":"YulExpressionStatement","src":"38968:113:69"}]},"name":"abi_encode_tuple_t_struct$_Exp_$9645_memory_ptr__to_t_struct$_Exp_$9645_memory_ptr__fromStack_reversed","nativeSrc":"38782:306:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"38894:9:69","nodeType":"YulTypedName","src":"38894:9:69","type":""},{"name":"value0","nativeSrc":"38906:6:69","nodeType":"YulTypedName","src":"38906:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"38917:4:69","nodeType":"YulTypedName","src":"38917:4:69","type":""}],"src":"38782:306:69"},{"body":{"nativeSrc":"39248:288:69","nodeType":"YulBlock","src":"39248:288:69","statements":[{"nativeSrc":"39258:26:69","nodeType":"YulAssignment","src":"39258:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"39270:9:69","nodeType":"YulIdentifier","src":"39270:9:69"},{"kind":"number","nativeSrc":"39281:2:69","nodeType":"YulLiteral","src":"39281:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"39266:3:69","nodeType":"YulIdentifier","src":"39266:3:69"},"nativeSrc":"39266:18:69","nodeType":"YulFunctionCall","src":"39266:18:69"},"variableNames":[{"name":"tail","nativeSrc":"39258:4:69","nodeType":"YulIdentifier","src":"39258:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"39338:6:69","nodeType":"YulIdentifier","src":"39338:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"39351:9:69","nodeType":"YulIdentifier","src":"39351:9:69"},{"kind":"number","nativeSrc":"39362:1:69","nodeType":"YulLiteral","src":"39362:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"39347:3:69","nodeType":"YulIdentifier","src":"39347:3:69"},"nativeSrc":"39347:17:69","nodeType":"YulFunctionCall","src":"39347:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"39294:43:69","nodeType":"YulIdentifier","src":"39294:43:69"},"nativeSrc":"39294:71:69","nodeType":"YulFunctionCall","src":"39294:71:69"},"nativeSrc":"39294:71:69","nodeType":"YulExpressionStatement","src":"39294:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"39419:6:69","nodeType":"YulIdentifier","src":"39419:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"39432:9:69","nodeType":"YulIdentifier","src":"39432:9:69"},{"kind":"number","nativeSrc":"39443:2:69","nodeType":"YulLiteral","src":"39443:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"39428:3:69","nodeType":"YulIdentifier","src":"39428:3:69"},"nativeSrc":"39428:18:69","nodeType":"YulFunctionCall","src":"39428:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"39375:43:69","nodeType":"YulIdentifier","src":"39375:43:69"},"nativeSrc":"39375:72:69","nodeType":"YulFunctionCall","src":"39375:72:69"},"nativeSrc":"39375:72:69","nodeType":"YulExpressionStatement","src":"39375:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"39501:6:69","nodeType":"YulIdentifier","src":"39501:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"39514:9:69","nodeType":"YulIdentifier","src":"39514:9:69"},{"kind":"number","nativeSrc":"39525:2:69","nodeType":"YulLiteral","src":"39525:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"39510:3:69","nodeType":"YulIdentifier","src":"39510:3:69"},"nativeSrc":"39510:18:69","nodeType":"YulFunctionCall","src":"39510:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"39457:43:69","nodeType":"YulIdentifier","src":"39457:43:69"},"nativeSrc":"39457:72:69","nodeType":"YulFunctionCall","src":"39457:72:69"},"nativeSrc":"39457:72:69","nodeType":"YulExpressionStatement","src":"39457:72:69"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"39094:442:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"39204:9:69","nodeType":"YulTypedName","src":"39204:9:69","type":""},{"name":"value2","nativeSrc":"39216:6:69","nodeType":"YulTypedName","src":"39216:6:69","type":""},{"name":"value1","nativeSrc":"39224:6:69","nodeType":"YulTypedName","src":"39224:6:69","type":""},{"name":"value0","nativeSrc":"39232:6:69","nodeType":"YulTypedName","src":"39232:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"39243:4:69","nodeType":"YulTypedName","src":"39243:4:69","type":""}],"src":"39094:442:69"},{"body":{"nativeSrc":"39648:76:69","nodeType":"YulBlock","src":"39648:76:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"39670:6:69","nodeType":"YulIdentifier","src":"39670:6:69"},{"kind":"number","nativeSrc":"39678:1:69","nodeType":"YulLiteral","src":"39678:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"39666:3:69","nodeType":"YulIdentifier","src":"39666:3:69"},"nativeSrc":"39666:14:69","nodeType":"YulFunctionCall","src":"39666:14:69"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nativeSrc":"39682:34:69","nodeType":"YulLiteral","src":"39682:34:69","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nativeSrc":"39659:6:69","nodeType":"YulIdentifier","src":"39659:6:69"},"nativeSrc":"39659:58:69","nodeType":"YulFunctionCall","src":"39659:58:69"},"nativeSrc":"39659:58:69","nodeType":"YulExpressionStatement","src":"39659:58:69"}]},"name":"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","nativeSrc":"39542:182:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"39640:6:69","nodeType":"YulTypedName","src":"39640:6:69","type":""}],"src":"39542:182:69"},{"body":{"nativeSrc":"39876:220:69","nodeType":"YulBlock","src":"39876:220:69","statements":[{"nativeSrc":"39886:74:69","nodeType":"YulAssignment","src":"39886:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"39952:3:69","nodeType":"YulIdentifier","src":"39952:3:69"},{"kind":"number","nativeSrc":"39957:2:69","nodeType":"YulLiteral","src":"39957:2:69","type":"","value":"32"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"39893:58:69","nodeType":"YulIdentifier","src":"39893:58:69"},"nativeSrc":"39893:67:69","nodeType":"YulFunctionCall","src":"39893:67:69"},"variableNames":[{"name":"pos","nativeSrc":"39886:3:69","nodeType":"YulIdentifier","src":"39886:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"40058:3:69","nodeType":"YulIdentifier","src":"40058:3:69"}],"functionName":{"name":"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","nativeSrc":"39969:88:69","nodeType":"YulIdentifier","src":"39969:88:69"},"nativeSrc":"39969:93:69","nodeType":"YulFunctionCall","src":"39969:93:69"},"nativeSrc":"39969:93:69","nodeType":"YulExpressionStatement","src":"39969:93:69"},{"nativeSrc":"40071:19:69","nodeType":"YulAssignment","src":"40071:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"40082:3:69","nodeType":"YulIdentifier","src":"40082:3:69"},{"kind":"number","nativeSrc":"40087:2:69","nodeType":"YulLiteral","src":"40087:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"40078:3:69","nodeType":"YulIdentifier","src":"40078:3:69"},"nativeSrc":"40078:12:69","nodeType":"YulFunctionCall","src":"40078:12:69"},"variableNames":[{"name":"end","nativeSrc":"40071:3:69","nodeType":"YulIdentifier","src":"40071:3:69"}]}]},"name":"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack","nativeSrc":"39730:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"39864:3:69","nodeType":"YulTypedName","src":"39864:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"39872:3:69","nodeType":"YulTypedName","src":"39872:3:69","type":""}],"src":"39730:366:69"},{"body":{"nativeSrc":"40273:248:69","nodeType":"YulBlock","src":"40273:248:69","statements":[{"nativeSrc":"40283:26:69","nodeType":"YulAssignment","src":"40283:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"40295:9:69","nodeType":"YulIdentifier","src":"40295:9:69"},{"kind":"number","nativeSrc":"40306:2:69","nodeType":"YulLiteral","src":"40306:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"40291:3:69","nodeType":"YulIdentifier","src":"40291:3:69"},"nativeSrc":"40291:18:69","nodeType":"YulFunctionCall","src":"40291:18:69"},"variableNames":[{"name":"tail","nativeSrc":"40283:4:69","nodeType":"YulIdentifier","src":"40283:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"40330:9:69","nodeType":"YulIdentifier","src":"40330:9:69"},{"kind":"number","nativeSrc":"40341:1:69","nodeType":"YulLiteral","src":"40341:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"40326:3:69","nodeType":"YulIdentifier","src":"40326:3:69"},"nativeSrc":"40326:17:69","nodeType":"YulFunctionCall","src":"40326:17:69"},{"arguments":[{"name":"tail","nativeSrc":"40349:4:69","nodeType":"YulIdentifier","src":"40349:4:69"},{"name":"headStart","nativeSrc":"40355:9:69","nodeType":"YulIdentifier","src":"40355:9:69"}],"functionName":{"name":"sub","nativeSrc":"40345:3:69","nodeType":"YulIdentifier","src":"40345:3:69"},"nativeSrc":"40345:20:69","nodeType":"YulFunctionCall","src":"40345:20:69"}],"functionName":{"name":"mstore","nativeSrc":"40319:6:69","nodeType":"YulIdentifier","src":"40319:6:69"},"nativeSrc":"40319:47:69","nodeType":"YulFunctionCall","src":"40319:47:69"},"nativeSrc":"40319:47:69","nodeType":"YulExpressionStatement","src":"40319:47:69"},{"nativeSrc":"40375:139:69","nodeType":"YulAssignment","src":"40375:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"40509:4:69","nodeType":"YulIdentifier","src":"40509:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack","nativeSrc":"40383:124:69","nodeType":"YulIdentifier","src":"40383:124:69"},"nativeSrc":"40383:131:69","nodeType":"YulFunctionCall","src":"40383:131:69"},"variableNames":[{"name":"tail","nativeSrc":"40375:4:69","nodeType":"YulIdentifier","src":"40375:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"40102:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"40253:9:69","nodeType":"YulTypedName","src":"40253:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"40268:4:69","nodeType":"YulTypedName","src":"40268:4:69","type":""}],"src":"40102:419:69"},{"body":{"nativeSrc":"40633:118:69","nodeType":"YulBlock","src":"40633:118:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"40655:6:69","nodeType":"YulIdentifier","src":"40655:6:69"},{"kind":"number","nativeSrc":"40663:1:69","nodeType":"YulLiteral","src":"40663:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"40651:3:69","nodeType":"YulIdentifier","src":"40651:3:69"},"nativeSrc":"40651:14:69","nodeType":"YulFunctionCall","src":"40651:14:69"},{"hexValue":"696e76616c696420616365737320636f6e74726f6c206d616e61676572206164","kind":"string","nativeSrc":"40667:34:69","nodeType":"YulLiteral","src":"40667:34:69","type":"","value":"invalid acess control manager ad"}],"functionName":{"name":"mstore","nativeSrc":"40644:6:69","nodeType":"YulIdentifier","src":"40644:6:69"},"nativeSrc":"40644:58:69","nodeType":"YulFunctionCall","src":"40644:58:69"},"nativeSrc":"40644:58:69","nodeType":"YulExpressionStatement","src":"40644:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"40723:6:69","nodeType":"YulIdentifier","src":"40723:6:69"},{"kind":"number","nativeSrc":"40731:2:69","nodeType":"YulLiteral","src":"40731:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"40719:3:69","nodeType":"YulIdentifier","src":"40719:3:69"},"nativeSrc":"40719:15:69","nodeType":"YulFunctionCall","src":"40719:15:69"},{"hexValue":"6472657373","kind":"string","nativeSrc":"40736:7:69","nodeType":"YulLiteral","src":"40736:7:69","type":"","value":"dress"}],"functionName":{"name":"mstore","nativeSrc":"40712:6:69","nodeType":"YulIdentifier","src":"40712:6:69"},"nativeSrc":"40712:32:69","nodeType":"YulFunctionCall","src":"40712:32:69"},"nativeSrc":"40712:32:69","nodeType":"YulExpressionStatement","src":"40712:32:69"}]},"name":"store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb","nativeSrc":"40527:224:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"40625:6:69","nodeType":"YulTypedName","src":"40625:6:69","type":""}],"src":"40527:224:69"},{"body":{"nativeSrc":"40903:220:69","nodeType":"YulBlock","src":"40903:220:69","statements":[{"nativeSrc":"40913:74:69","nodeType":"YulAssignment","src":"40913:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"40979:3:69","nodeType":"YulIdentifier","src":"40979:3:69"},{"kind":"number","nativeSrc":"40984:2:69","nodeType":"YulLiteral","src":"40984:2:69","type":"","value":"37"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"40920:58:69","nodeType":"YulIdentifier","src":"40920:58:69"},"nativeSrc":"40920:67:69","nodeType":"YulFunctionCall","src":"40920:67:69"},"variableNames":[{"name":"pos","nativeSrc":"40913:3:69","nodeType":"YulIdentifier","src":"40913:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"41085:3:69","nodeType":"YulIdentifier","src":"41085:3:69"}],"functionName":{"name":"store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb","nativeSrc":"40996:88:69","nodeType":"YulIdentifier","src":"40996:88:69"},"nativeSrc":"40996:93:69","nodeType":"YulFunctionCall","src":"40996:93:69"},"nativeSrc":"40996:93:69","nodeType":"YulExpressionStatement","src":"40996:93:69"},{"nativeSrc":"41098:19:69","nodeType":"YulAssignment","src":"41098:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"41109:3:69","nodeType":"YulIdentifier","src":"41109:3:69"},{"kind":"number","nativeSrc":"41114:2:69","nodeType":"YulLiteral","src":"41114:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"41105:3:69","nodeType":"YulIdentifier","src":"41105:3:69"},"nativeSrc":"41105:12:69","nodeType":"YulFunctionCall","src":"41105:12:69"},"variableNames":[{"name":"end","nativeSrc":"41098:3:69","nodeType":"YulIdentifier","src":"41098:3:69"}]}]},"name":"abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack","nativeSrc":"40757:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"40891:3:69","nodeType":"YulTypedName","src":"40891:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"40899:3:69","nodeType":"YulTypedName","src":"40899:3:69","type":""}],"src":"40757:366:69"},{"body":{"nativeSrc":"41300:248:69","nodeType":"YulBlock","src":"41300:248:69","statements":[{"nativeSrc":"41310:26:69","nodeType":"YulAssignment","src":"41310:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"41322:9:69","nodeType":"YulIdentifier","src":"41322:9:69"},{"kind":"number","nativeSrc":"41333:2:69","nodeType":"YulLiteral","src":"41333:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"41318:3:69","nodeType":"YulIdentifier","src":"41318:3:69"},"nativeSrc":"41318:18:69","nodeType":"YulFunctionCall","src":"41318:18:69"},"variableNames":[{"name":"tail","nativeSrc":"41310:4:69","nodeType":"YulIdentifier","src":"41310:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"41357:9:69","nodeType":"YulIdentifier","src":"41357:9:69"},{"kind":"number","nativeSrc":"41368:1:69","nodeType":"YulLiteral","src":"41368:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"41353:3:69","nodeType":"YulIdentifier","src":"41353:3:69"},"nativeSrc":"41353:17:69","nodeType":"YulFunctionCall","src":"41353:17:69"},{"arguments":[{"name":"tail","nativeSrc":"41376:4:69","nodeType":"YulIdentifier","src":"41376:4:69"},{"name":"headStart","nativeSrc":"41382:9:69","nodeType":"YulIdentifier","src":"41382:9:69"}],"functionName":{"name":"sub","nativeSrc":"41372:3:69","nodeType":"YulIdentifier","src":"41372:3:69"},"nativeSrc":"41372:20:69","nodeType":"YulFunctionCall","src":"41372:20:69"}],"functionName":{"name":"mstore","nativeSrc":"41346:6:69","nodeType":"YulIdentifier","src":"41346:6:69"},"nativeSrc":"41346:47:69","nodeType":"YulFunctionCall","src":"41346:47:69"},"nativeSrc":"41346:47:69","nodeType":"YulExpressionStatement","src":"41346:47:69"},{"nativeSrc":"41402:139:69","nodeType":"YulAssignment","src":"41402:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"41536:4:69","nodeType":"YulIdentifier","src":"41536:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack","nativeSrc":"41410:124:69","nodeType":"YulIdentifier","src":"41410:124:69"},"nativeSrc":"41410:131:69","nodeType":"YulFunctionCall","src":"41410:131:69"},"variableNames":[{"name":"tail","nativeSrc":"41402:4:69","nodeType":"YulIdentifier","src":"41402:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"41129:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"41280:9:69","nodeType":"YulTypedName","src":"41280:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"41295:4:69","nodeType":"YulTypedName","src":"41295:4:69","type":""}],"src":"41129:419:69"},{"body":{"nativeSrc":"41680:206:69","nodeType":"YulBlock","src":"41680:206:69","statements":[{"nativeSrc":"41690:26:69","nodeType":"YulAssignment","src":"41690:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"41702:9:69","nodeType":"YulIdentifier","src":"41702:9:69"},{"kind":"number","nativeSrc":"41713:2:69","nodeType":"YulLiteral","src":"41713:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"41698:3:69","nodeType":"YulIdentifier","src":"41698:3:69"},"nativeSrc":"41698:18:69","nodeType":"YulFunctionCall","src":"41698:18:69"},"variableNames":[{"name":"tail","nativeSrc":"41690:4:69","nodeType":"YulIdentifier","src":"41690:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"41770:6:69","nodeType":"YulIdentifier","src":"41770:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"41783:9:69","nodeType":"YulIdentifier","src":"41783:9:69"},{"kind":"number","nativeSrc":"41794:1:69","nodeType":"YulLiteral","src":"41794:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"41779:3:69","nodeType":"YulIdentifier","src":"41779:3:69"},"nativeSrc":"41779:17:69","nodeType":"YulFunctionCall","src":"41779:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"41726:43:69","nodeType":"YulIdentifier","src":"41726:43:69"},"nativeSrc":"41726:71:69","nodeType":"YulFunctionCall","src":"41726:71:69"},"nativeSrc":"41726:71:69","nodeType":"YulExpressionStatement","src":"41726:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"41851:6:69","nodeType":"YulIdentifier","src":"41851:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"41864:9:69","nodeType":"YulIdentifier","src":"41864:9:69"},{"kind":"number","nativeSrc":"41875:2:69","nodeType":"YulLiteral","src":"41875:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"41860:3:69","nodeType":"YulIdentifier","src":"41860:3:69"},"nativeSrc":"41860:18:69","nodeType":"YulFunctionCall","src":"41860:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"41807:43:69","nodeType":"YulIdentifier","src":"41807:43:69"},"nativeSrc":"41807:72:69","nodeType":"YulFunctionCall","src":"41807:72:69"},"nativeSrc":"41807:72:69","nodeType":"YulExpressionStatement","src":"41807:72:69"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nativeSrc":"41554:332:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"41644:9:69","nodeType":"YulTypedName","src":"41644:9:69","type":""},{"name":"value1","nativeSrc":"41656:6:69","nodeType":"YulTypedName","src":"41656:6:69","type":""},{"name":"value0","nativeSrc":"41664:6:69","nodeType":"YulTypedName","src":"41664:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"41675:4:69","nodeType":"YulTypedName","src":"41675:4:69","type":""}],"src":"41554:332:69"},{"body":{"nativeSrc":"41951:40:69","nodeType":"YulBlock","src":"41951:40:69","statements":[{"nativeSrc":"41962:22:69","nodeType":"YulAssignment","src":"41962:22:69","value":{"arguments":[{"name":"value","nativeSrc":"41978:5:69","nodeType":"YulIdentifier","src":"41978:5:69"}],"functionName":{"name":"mload","nativeSrc":"41972:5:69","nodeType":"YulIdentifier","src":"41972:5:69"},"nativeSrc":"41972:12:69","nodeType":"YulFunctionCall","src":"41972:12:69"},"variableNames":[{"name":"length","nativeSrc":"41962:6:69","nodeType":"YulIdentifier","src":"41962:6:69"}]}]},"name":"array_length_t_string_memory_ptr","nativeSrc":"41892:99:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"41934:5:69","nodeType":"YulTypedName","src":"41934:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"41944:6:69","nodeType":"YulTypedName","src":"41944:6:69","type":""}],"src":"41892:99:69"},{"body":{"nativeSrc":"42059:186:69","nodeType":"YulBlock","src":"42059:186:69","statements":[{"nativeSrc":"42070:10:69","nodeType":"YulVariableDeclaration","src":"42070:10:69","value":{"kind":"number","nativeSrc":"42079:1:69","nodeType":"YulLiteral","src":"42079:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"42074:1:69","nodeType":"YulTypedName","src":"42074:1:69","type":""}]},{"body":{"nativeSrc":"42139:63:69","nodeType":"YulBlock","src":"42139:63:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"42164:3:69","nodeType":"YulIdentifier","src":"42164:3:69"},{"name":"i","nativeSrc":"42169:1:69","nodeType":"YulIdentifier","src":"42169:1:69"}],"functionName":{"name":"add","nativeSrc":"42160:3:69","nodeType":"YulIdentifier","src":"42160:3:69"},"nativeSrc":"42160:11:69","nodeType":"YulFunctionCall","src":"42160:11:69"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"42183:3:69","nodeType":"YulIdentifier","src":"42183:3:69"},{"name":"i","nativeSrc":"42188:1:69","nodeType":"YulIdentifier","src":"42188:1:69"}],"functionName":{"name":"add","nativeSrc":"42179:3:69","nodeType":"YulIdentifier","src":"42179:3:69"},"nativeSrc":"42179:11:69","nodeType":"YulFunctionCall","src":"42179:11:69"}],"functionName":{"name":"mload","nativeSrc":"42173:5:69","nodeType":"YulIdentifier","src":"42173:5:69"},"nativeSrc":"42173:18:69","nodeType":"YulFunctionCall","src":"42173:18:69"}],"functionName":{"name":"mstore","nativeSrc":"42153:6:69","nodeType":"YulIdentifier","src":"42153:6:69"},"nativeSrc":"42153:39:69","nodeType":"YulFunctionCall","src":"42153:39:69"},"nativeSrc":"42153:39:69","nodeType":"YulExpressionStatement","src":"42153:39:69"}]},"condition":{"arguments":[{"name":"i","nativeSrc":"42100:1:69","nodeType":"YulIdentifier","src":"42100:1:69"},{"name":"length","nativeSrc":"42103:6:69","nodeType":"YulIdentifier","src":"42103:6:69"}],"functionName":{"name":"lt","nativeSrc":"42097:2:69","nodeType":"YulIdentifier","src":"42097:2:69"},"nativeSrc":"42097:13:69","nodeType":"YulFunctionCall","src":"42097:13:69"},"nativeSrc":"42089:113:69","nodeType":"YulForLoop","post":{"nativeSrc":"42111:19:69","nodeType":"YulBlock","src":"42111:19:69","statements":[{"nativeSrc":"42113:15:69","nodeType":"YulAssignment","src":"42113:15:69","value":{"arguments":[{"name":"i","nativeSrc":"42122:1:69","nodeType":"YulIdentifier","src":"42122:1:69"},{"kind":"number","nativeSrc":"42125:2:69","nodeType":"YulLiteral","src":"42125:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"42118:3:69","nodeType":"YulIdentifier","src":"42118:3:69"},"nativeSrc":"42118:10:69","nodeType":"YulFunctionCall","src":"42118:10:69"},"variableNames":[{"name":"i","nativeSrc":"42113:1:69","nodeType":"YulIdentifier","src":"42113:1:69"}]}]},"pre":{"nativeSrc":"42093:3:69","nodeType":"YulBlock","src":"42093:3:69","statements":[]},"src":"42089:113:69"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"42222:3:69","nodeType":"YulIdentifier","src":"42222:3:69"},{"name":"length","nativeSrc":"42227:6:69","nodeType":"YulIdentifier","src":"42227:6:69"}],"functionName":{"name":"add","nativeSrc":"42218:3:69","nodeType":"YulIdentifier","src":"42218:3:69"},"nativeSrc":"42218:16:69","nodeType":"YulFunctionCall","src":"42218:16:69"},{"kind":"number","nativeSrc":"42236:1:69","nodeType":"YulLiteral","src":"42236:1:69","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"42211:6:69","nodeType":"YulIdentifier","src":"42211:6:69"},"nativeSrc":"42211:27:69","nodeType":"YulFunctionCall","src":"42211:27:69"},"nativeSrc":"42211:27:69","nodeType":"YulExpressionStatement","src":"42211:27:69"}]},"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"41997:248:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"42041:3:69","nodeType":"YulTypedName","src":"42041:3:69","type":""},{"name":"dst","nativeSrc":"42046:3:69","nodeType":"YulTypedName","src":"42046:3:69","type":""},{"name":"length","nativeSrc":"42051:6:69","nodeType":"YulTypedName","src":"42051:6:69","type":""}],"src":"41997:248:69"},{"body":{"nativeSrc":"42343:285:69","nodeType":"YulBlock","src":"42343:285:69","statements":[{"nativeSrc":"42353:53:69","nodeType":"YulVariableDeclaration","src":"42353:53:69","value":{"arguments":[{"name":"value","nativeSrc":"42400:5:69","nodeType":"YulIdentifier","src":"42400:5:69"}],"functionName":{"name":"array_length_t_string_memory_ptr","nativeSrc":"42367:32:69","nodeType":"YulIdentifier","src":"42367:32:69"},"nativeSrc":"42367:39:69","nodeType":"YulFunctionCall","src":"42367:39:69"},"variables":[{"name":"length","nativeSrc":"42357:6:69","nodeType":"YulTypedName","src":"42357:6:69","type":""}]},{"nativeSrc":"42415:78:69","nodeType":"YulAssignment","src":"42415:78:69","value":{"arguments":[{"name":"pos","nativeSrc":"42481:3:69","nodeType":"YulIdentifier","src":"42481:3:69"},{"name":"length","nativeSrc":"42486:6:69","nodeType":"YulIdentifier","src":"42486:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"42422:58:69","nodeType":"YulIdentifier","src":"42422:58:69"},"nativeSrc":"42422:71:69","nodeType":"YulFunctionCall","src":"42422:71:69"},"variableNames":[{"name":"pos","nativeSrc":"42415:3:69","nodeType":"YulIdentifier","src":"42415:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"42541:5:69","nodeType":"YulIdentifier","src":"42541:5:69"},{"kind":"number","nativeSrc":"42548:4:69","nodeType":"YulLiteral","src":"42548:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"42537:3:69","nodeType":"YulIdentifier","src":"42537:3:69"},"nativeSrc":"42537:16:69","nodeType":"YulFunctionCall","src":"42537:16:69"},{"name":"pos","nativeSrc":"42555:3:69","nodeType":"YulIdentifier","src":"42555:3:69"},{"name":"length","nativeSrc":"42560:6:69","nodeType":"YulIdentifier","src":"42560:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"42502:34:69","nodeType":"YulIdentifier","src":"42502:34:69"},"nativeSrc":"42502:65:69","nodeType":"YulFunctionCall","src":"42502:65:69"},"nativeSrc":"42502:65:69","nodeType":"YulExpressionStatement","src":"42502:65:69"},{"nativeSrc":"42576:46:69","nodeType":"YulAssignment","src":"42576:46:69","value":{"arguments":[{"name":"pos","nativeSrc":"42587:3:69","nodeType":"YulIdentifier","src":"42587:3:69"},{"arguments":[{"name":"length","nativeSrc":"42614:6:69","nodeType":"YulIdentifier","src":"42614:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"42592:21:69","nodeType":"YulIdentifier","src":"42592:21:69"},"nativeSrc":"42592:29:69","nodeType":"YulFunctionCall","src":"42592:29:69"}],"functionName":{"name":"add","nativeSrc":"42583:3:69","nodeType":"YulIdentifier","src":"42583:3:69"},"nativeSrc":"42583:39:69","nodeType":"YulFunctionCall","src":"42583:39:69"},"variableNames":[{"name":"end","nativeSrc":"42576:3:69","nodeType":"YulIdentifier","src":"42576:3:69"}]}]},"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"42251:377:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"42324:5:69","nodeType":"YulTypedName","src":"42324:5:69","type":""},{"name":"pos","nativeSrc":"42331:3:69","nodeType":"YulTypedName","src":"42331:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"42339:3:69","nodeType":"YulTypedName","src":"42339:3:69","type":""}],"src":"42251:377:69"},{"body":{"nativeSrc":"42752:195:69","nodeType":"YulBlock","src":"42752:195:69","statements":[{"nativeSrc":"42762:26:69","nodeType":"YulAssignment","src":"42762:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"42774:9:69","nodeType":"YulIdentifier","src":"42774:9:69"},{"kind":"number","nativeSrc":"42785:2:69","nodeType":"YulLiteral","src":"42785:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"42770:3:69","nodeType":"YulIdentifier","src":"42770:3:69"},"nativeSrc":"42770:18:69","nodeType":"YulFunctionCall","src":"42770:18:69"},"variableNames":[{"name":"tail","nativeSrc":"42762:4:69","nodeType":"YulIdentifier","src":"42762:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"42809:9:69","nodeType":"YulIdentifier","src":"42809:9:69"},{"kind":"number","nativeSrc":"42820:1:69","nodeType":"YulLiteral","src":"42820:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"42805:3:69","nodeType":"YulIdentifier","src":"42805:3:69"},"nativeSrc":"42805:17:69","nodeType":"YulFunctionCall","src":"42805:17:69"},{"arguments":[{"name":"tail","nativeSrc":"42828:4:69","nodeType":"YulIdentifier","src":"42828:4:69"},{"name":"headStart","nativeSrc":"42834:9:69","nodeType":"YulIdentifier","src":"42834:9:69"}],"functionName":{"name":"sub","nativeSrc":"42824:3:69","nodeType":"YulIdentifier","src":"42824:3:69"},"nativeSrc":"42824:20:69","nodeType":"YulFunctionCall","src":"42824:20:69"}],"functionName":{"name":"mstore","nativeSrc":"42798:6:69","nodeType":"YulIdentifier","src":"42798:6:69"},"nativeSrc":"42798:47:69","nodeType":"YulFunctionCall","src":"42798:47:69"},"nativeSrc":"42798:47:69","nodeType":"YulExpressionStatement","src":"42798:47:69"},{"nativeSrc":"42854:86:69","nodeType":"YulAssignment","src":"42854:86:69","value":{"arguments":[{"name":"value0","nativeSrc":"42926:6:69","nodeType":"YulIdentifier","src":"42926:6:69"},{"name":"tail","nativeSrc":"42935:4:69","nodeType":"YulIdentifier","src":"42935:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"42862:63:69","nodeType":"YulIdentifier","src":"42862:63:69"},"nativeSrc":"42862:78:69","nodeType":"YulFunctionCall","src":"42862:78:69"},"variableNames":[{"name":"tail","nativeSrc":"42854:4:69","nodeType":"YulIdentifier","src":"42854:4:69"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"42634:313:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"42724:9:69","nodeType":"YulTypedName","src":"42724:9:69","type":""},{"name":"value0","nativeSrc":"42736:6:69","nodeType":"YulTypedName","src":"42736:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"42747:4:69","nodeType":"YulTypedName","src":"42747:4:69","type":""}],"src":"42634:313:69"},{"body":{"nativeSrc":"43099:277:69","nodeType":"YulBlock","src":"43099:277:69","statements":[{"nativeSrc":"43109:26:69","nodeType":"YulAssignment","src":"43109:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"43121:9:69","nodeType":"YulIdentifier","src":"43121:9:69"},{"kind":"number","nativeSrc":"43132:2:69","nodeType":"YulLiteral","src":"43132:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"43117:3:69","nodeType":"YulIdentifier","src":"43117:3:69"},"nativeSrc":"43117:18:69","nodeType":"YulFunctionCall","src":"43117:18:69"},"variableNames":[{"name":"tail","nativeSrc":"43109:4:69","nodeType":"YulIdentifier","src":"43109:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"43189:6:69","nodeType":"YulIdentifier","src":"43189:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"43202:9:69","nodeType":"YulIdentifier","src":"43202:9:69"},{"kind":"number","nativeSrc":"43213:1:69","nodeType":"YulLiteral","src":"43213:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"43198:3:69","nodeType":"YulIdentifier","src":"43198:3:69"},"nativeSrc":"43198:17:69","nodeType":"YulFunctionCall","src":"43198:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"43145:43:69","nodeType":"YulIdentifier","src":"43145:43:69"},"nativeSrc":"43145:71:69","nodeType":"YulFunctionCall","src":"43145:71:69"},"nativeSrc":"43145:71:69","nodeType":"YulExpressionStatement","src":"43145:71:69"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"43237:9:69","nodeType":"YulIdentifier","src":"43237:9:69"},{"kind":"number","nativeSrc":"43248:2:69","nodeType":"YulLiteral","src":"43248:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"43233:3:69","nodeType":"YulIdentifier","src":"43233:3:69"},"nativeSrc":"43233:18:69","nodeType":"YulFunctionCall","src":"43233:18:69"},{"arguments":[{"name":"tail","nativeSrc":"43257:4:69","nodeType":"YulIdentifier","src":"43257:4:69"},{"name":"headStart","nativeSrc":"43263:9:69","nodeType":"YulIdentifier","src":"43263:9:69"}],"functionName":{"name":"sub","nativeSrc":"43253:3:69","nodeType":"YulIdentifier","src":"43253:3:69"},"nativeSrc":"43253:20:69","nodeType":"YulFunctionCall","src":"43253:20:69"}],"functionName":{"name":"mstore","nativeSrc":"43226:6:69","nodeType":"YulIdentifier","src":"43226:6:69"},"nativeSrc":"43226:48:69","nodeType":"YulFunctionCall","src":"43226:48:69"},"nativeSrc":"43226:48:69","nodeType":"YulExpressionStatement","src":"43226:48:69"},{"nativeSrc":"43283:86:69","nodeType":"YulAssignment","src":"43283:86:69","value":{"arguments":[{"name":"value1","nativeSrc":"43355:6:69","nodeType":"YulIdentifier","src":"43355:6:69"},{"name":"tail","nativeSrc":"43364:4:69","nodeType":"YulIdentifier","src":"43364:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"43291:63:69","nodeType":"YulIdentifier","src":"43291:63:69"},"nativeSrc":"43291:78:69","nodeType":"YulFunctionCall","src":"43291:78:69"},"variableNames":[{"name":"tail","nativeSrc":"43283:4:69","nodeType":"YulIdentifier","src":"43283:4:69"}]}]},"name":"abi_encode_tuple_t_address_t_string_memory_ptr__to_t_address_t_string_memory_ptr__fromStack_reversed","nativeSrc":"42953:423:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"43063:9:69","nodeType":"YulTypedName","src":"43063:9:69","type":""},{"name":"value1","nativeSrc":"43075:6:69","nodeType":"YulTypedName","src":"43075:6:69","type":""},{"name":"value0","nativeSrc":"43083:6:69","nodeType":"YulTypedName","src":"43083:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"43094:4:69","nodeType":"YulTypedName","src":"43094:4:69","type":""}],"src":"42953:423:69"},{"body":{"nativeSrc":"43556:359:69","nodeType":"YulBlock","src":"43556:359:69","statements":[{"nativeSrc":"43566:26:69","nodeType":"YulAssignment","src":"43566:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"43578:9:69","nodeType":"YulIdentifier","src":"43578:9:69"},{"kind":"number","nativeSrc":"43589:2:69","nodeType":"YulLiteral","src":"43589:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"43574:3:69","nodeType":"YulIdentifier","src":"43574:3:69"},"nativeSrc":"43574:18:69","nodeType":"YulFunctionCall","src":"43574:18:69"},"variableNames":[{"name":"tail","nativeSrc":"43566:4:69","nodeType":"YulIdentifier","src":"43566:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"43646:6:69","nodeType":"YulIdentifier","src":"43646:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"43659:9:69","nodeType":"YulIdentifier","src":"43659:9:69"},{"kind":"number","nativeSrc":"43670:1:69","nodeType":"YulLiteral","src":"43670:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"43655:3:69","nodeType":"YulIdentifier","src":"43655:3:69"},"nativeSrc":"43655:17:69","nodeType":"YulFunctionCall","src":"43655:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"43602:43:69","nodeType":"YulIdentifier","src":"43602:43:69"},"nativeSrc":"43602:71:69","nodeType":"YulFunctionCall","src":"43602:71:69"},"nativeSrc":"43602:71:69","nodeType":"YulExpressionStatement","src":"43602:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"43727:6:69","nodeType":"YulIdentifier","src":"43727:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"43740:9:69","nodeType":"YulIdentifier","src":"43740:9:69"},{"kind":"number","nativeSrc":"43751:2:69","nodeType":"YulLiteral","src":"43751:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"43736:3:69","nodeType":"YulIdentifier","src":"43736:3:69"},"nativeSrc":"43736:18:69","nodeType":"YulFunctionCall","src":"43736:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"43683:43:69","nodeType":"YulIdentifier","src":"43683:43:69"},"nativeSrc":"43683:72:69","nodeType":"YulFunctionCall","src":"43683:72:69"},"nativeSrc":"43683:72:69","nodeType":"YulExpressionStatement","src":"43683:72:69"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"43776:9:69","nodeType":"YulIdentifier","src":"43776:9:69"},{"kind":"number","nativeSrc":"43787:2:69","nodeType":"YulLiteral","src":"43787:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"43772:3:69","nodeType":"YulIdentifier","src":"43772:3:69"},"nativeSrc":"43772:18:69","nodeType":"YulFunctionCall","src":"43772:18:69"},{"arguments":[{"name":"tail","nativeSrc":"43796:4:69","nodeType":"YulIdentifier","src":"43796:4:69"},{"name":"headStart","nativeSrc":"43802:9:69","nodeType":"YulIdentifier","src":"43802:9:69"}],"functionName":{"name":"sub","nativeSrc":"43792:3:69","nodeType":"YulIdentifier","src":"43792:3:69"},"nativeSrc":"43792:20:69","nodeType":"YulFunctionCall","src":"43792:20:69"}],"functionName":{"name":"mstore","nativeSrc":"43765:6:69","nodeType":"YulIdentifier","src":"43765:6:69"},"nativeSrc":"43765:48:69","nodeType":"YulFunctionCall","src":"43765:48:69"},"nativeSrc":"43765:48:69","nodeType":"YulExpressionStatement","src":"43765:48:69"},{"nativeSrc":"43822:86:69","nodeType":"YulAssignment","src":"43822:86:69","value":{"arguments":[{"name":"value2","nativeSrc":"43894:6:69","nodeType":"YulIdentifier","src":"43894:6:69"},{"name":"tail","nativeSrc":"43903:4:69","nodeType":"YulIdentifier","src":"43903:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"43830:63:69","nodeType":"YulIdentifier","src":"43830:63:69"},"nativeSrc":"43830:78:69","nodeType":"YulFunctionCall","src":"43830:78:69"},"variableNames":[{"name":"tail","nativeSrc":"43822:4:69","nodeType":"YulIdentifier","src":"43822:4:69"}]}]},"name":"abi_encode_tuple_t_address_t_address_t_string_memory_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed","nativeSrc":"43382:533:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"43512:9:69","nodeType":"YulTypedName","src":"43512:9:69","type":""},{"name":"value2","nativeSrc":"43524:6:69","nodeType":"YulTypedName","src":"43524:6:69","type":""},{"name":"value1","nativeSrc":"43532:6:69","nodeType":"YulTypedName","src":"43532:6:69","type":""},{"name":"value0","nativeSrc":"43540:6:69","nodeType":"YulTypedName","src":"43540:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"43551:4:69","nodeType":"YulTypedName","src":"43551:4:69","type":""}],"src":"43382:533:69"},{"body":{"nativeSrc":"44027:76:69","nodeType":"YulBlock","src":"44027:76:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"44049:6:69","nodeType":"YulIdentifier","src":"44049:6:69"},{"kind":"number","nativeSrc":"44057:1:69","nodeType":"YulLiteral","src":"44057:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"44045:3:69","nodeType":"YulIdentifier","src":"44045:3:69"},"nativeSrc":"44045:14:69","nodeType":"YulFunctionCall","src":"44045:14:69"},{"hexValue":"726577617264546f6b656e206d61726b6574206973206e6f74206c6973746564","kind":"string","nativeSrc":"44061:34:69","nodeType":"YulLiteral","src":"44061:34:69","type":"","value":"rewardToken market is not listed"}],"functionName":{"name":"mstore","nativeSrc":"44038:6:69","nodeType":"YulIdentifier","src":"44038:6:69"},"nativeSrc":"44038:58:69","nodeType":"YulFunctionCall","src":"44038:58:69"},"nativeSrc":"44038:58:69","nodeType":"YulExpressionStatement","src":"44038:58:69"}]},"name":"store_literal_in_memory_2f89df7223863f69f86e7052cbcdf68d52d82b51b73f12fa18c8c279407b9f9f","nativeSrc":"43921:182:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"44019:6:69","nodeType":"YulTypedName","src":"44019:6:69","type":""}],"src":"43921:182:69"},{"body":{"nativeSrc":"44255:220:69","nodeType":"YulBlock","src":"44255:220:69","statements":[{"nativeSrc":"44265:74:69","nodeType":"YulAssignment","src":"44265:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"44331:3:69","nodeType":"YulIdentifier","src":"44331:3:69"},{"kind":"number","nativeSrc":"44336:2:69","nodeType":"YulLiteral","src":"44336:2:69","type":"","value":"32"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"44272:58:69","nodeType":"YulIdentifier","src":"44272:58:69"},"nativeSrc":"44272:67:69","nodeType":"YulFunctionCall","src":"44272:67:69"},"variableNames":[{"name":"pos","nativeSrc":"44265:3:69","nodeType":"YulIdentifier","src":"44265:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"44437:3:69","nodeType":"YulIdentifier","src":"44437:3:69"}],"functionName":{"name":"store_literal_in_memory_2f89df7223863f69f86e7052cbcdf68d52d82b51b73f12fa18c8c279407b9f9f","nativeSrc":"44348:88:69","nodeType":"YulIdentifier","src":"44348:88:69"},"nativeSrc":"44348:93:69","nodeType":"YulFunctionCall","src":"44348:93:69"},"nativeSrc":"44348:93:69","nodeType":"YulExpressionStatement","src":"44348:93:69"},{"nativeSrc":"44450:19:69","nodeType":"YulAssignment","src":"44450:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"44461:3:69","nodeType":"YulIdentifier","src":"44461:3:69"},{"kind":"number","nativeSrc":"44466:2:69","nodeType":"YulLiteral","src":"44466:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"44457:3:69","nodeType":"YulIdentifier","src":"44457:3:69"},"nativeSrc":"44457:12:69","nodeType":"YulFunctionCall","src":"44457:12:69"},"variableNames":[{"name":"end","nativeSrc":"44450:3:69","nodeType":"YulIdentifier","src":"44450:3:69"}]}]},"name":"abi_encode_t_stringliteral_2f89df7223863f69f86e7052cbcdf68d52d82b51b73f12fa18c8c279407b9f9f_to_t_string_memory_ptr_fromStack","nativeSrc":"44109:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"44243:3:69","nodeType":"YulTypedName","src":"44243:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"44251:3:69","nodeType":"YulTypedName","src":"44251:3:69","type":""}],"src":"44109:366:69"},{"body":{"nativeSrc":"44652:248:69","nodeType":"YulBlock","src":"44652:248:69","statements":[{"nativeSrc":"44662:26:69","nodeType":"YulAssignment","src":"44662:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"44674:9:69","nodeType":"YulIdentifier","src":"44674:9:69"},{"kind":"number","nativeSrc":"44685:2:69","nodeType":"YulLiteral","src":"44685:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"44670:3:69","nodeType":"YulIdentifier","src":"44670:3:69"},"nativeSrc":"44670:18:69","nodeType":"YulFunctionCall","src":"44670:18:69"},"variableNames":[{"name":"tail","nativeSrc":"44662:4:69","nodeType":"YulIdentifier","src":"44662:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"44709:9:69","nodeType":"YulIdentifier","src":"44709:9:69"},{"kind":"number","nativeSrc":"44720:1:69","nodeType":"YulLiteral","src":"44720:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"44705:3:69","nodeType":"YulIdentifier","src":"44705:3:69"},"nativeSrc":"44705:17:69","nodeType":"YulFunctionCall","src":"44705:17:69"},{"arguments":[{"name":"tail","nativeSrc":"44728:4:69","nodeType":"YulIdentifier","src":"44728:4:69"},{"name":"headStart","nativeSrc":"44734:9:69","nodeType":"YulIdentifier","src":"44734:9:69"}],"functionName":{"name":"sub","nativeSrc":"44724:3:69","nodeType":"YulIdentifier","src":"44724:3:69"},"nativeSrc":"44724:20:69","nodeType":"YulFunctionCall","src":"44724:20:69"}],"functionName":{"name":"mstore","nativeSrc":"44698:6:69","nodeType":"YulIdentifier","src":"44698:6:69"},"nativeSrc":"44698:47:69","nodeType":"YulFunctionCall","src":"44698:47:69"},"nativeSrc":"44698:47:69","nodeType":"YulExpressionStatement","src":"44698:47:69"},{"nativeSrc":"44754:139:69","nodeType":"YulAssignment","src":"44754:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"44888:4:69","nodeType":"YulIdentifier","src":"44888:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_2f89df7223863f69f86e7052cbcdf68d52d82b51b73f12fa18c8c279407b9f9f_to_t_string_memory_ptr_fromStack","nativeSrc":"44762:124:69","nodeType":"YulIdentifier","src":"44762:124:69"},"nativeSrc":"44762:131:69","nodeType":"YulFunctionCall","src":"44762:131:69"},"variableNames":[{"name":"tail","nativeSrc":"44754:4:69","nodeType":"YulIdentifier","src":"44754:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_2f89df7223863f69f86e7052cbcdf68d52d82b51b73f12fa18c8c279407b9f9f__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"44481:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"44632:9:69","nodeType":"YulTypedName","src":"44632:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"44647:4:69","nodeType":"YulTypedName","src":"44647:4:69","type":""}],"src":"44481:419:69"},{"body":{"nativeSrc":"45012:140:69","nodeType":"YulBlock","src":"45012:140:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"45034:6:69","nodeType":"YulIdentifier","src":"45034:6:69"},{"kind":"number","nativeSrc":"45042:1:69","nodeType":"YulLiteral","src":"45042:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"45030:3:69","nodeType":"YulIdentifier","src":"45030:3:69"},"nativeSrc":"45030:14:69","nodeType":"YulFunctionCall","src":"45030:14:69"},{"hexValue":"73657474696e67206c61737420726577617264696e672074696d657374616d70","kind":"string","nativeSrc":"45046:34:69","nodeType":"YulLiteral","src":"45046:34:69","type":"","value":"setting last rewarding timestamp"}],"functionName":{"name":"mstore","nativeSrc":"45023:6:69","nodeType":"YulIdentifier","src":"45023:6:69"},"nativeSrc":"45023:58:69","nodeType":"YulFunctionCall","src":"45023:58:69"},"nativeSrc":"45023:58:69","nodeType":"YulExpressionStatement","src":"45023:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"45102:6:69","nodeType":"YulIdentifier","src":"45102:6:69"},{"kind":"number","nativeSrc":"45110:2:69","nodeType":"YulLiteral","src":"45110:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"45098:3:69","nodeType":"YulIdentifier","src":"45098:3:69"},"nativeSrc":"45098:15:69","nodeType":"YulFunctionCall","src":"45098:15:69"},{"hexValue":"20696e207468652070617374206973206e6f7420616c6c6f776564","kind":"string","nativeSrc":"45115:29:69","nodeType":"YulLiteral","src":"45115:29:69","type":"","value":" in the past is not allowed"}],"functionName":{"name":"mstore","nativeSrc":"45091:6:69","nodeType":"YulIdentifier","src":"45091:6:69"},"nativeSrc":"45091:54:69","nodeType":"YulFunctionCall","src":"45091:54:69"},"nativeSrc":"45091:54:69","nodeType":"YulExpressionStatement","src":"45091:54:69"}]},"name":"store_literal_in_memory_133e6bf643465df761ef166e81246dc8f30fd9c0ebeb2ba6af193b3bb30494f8","nativeSrc":"44906:246:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"45004:6:69","nodeType":"YulTypedName","src":"45004:6:69","type":""}],"src":"44906:246:69"},{"body":{"nativeSrc":"45304:220:69","nodeType":"YulBlock","src":"45304:220:69","statements":[{"nativeSrc":"45314:74:69","nodeType":"YulAssignment","src":"45314:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"45380:3:69","nodeType":"YulIdentifier","src":"45380:3:69"},{"kind":"number","nativeSrc":"45385:2:69","nodeType":"YulLiteral","src":"45385:2:69","type":"","value":"59"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"45321:58:69","nodeType":"YulIdentifier","src":"45321:58:69"},"nativeSrc":"45321:67:69","nodeType":"YulFunctionCall","src":"45321:67:69"},"variableNames":[{"name":"pos","nativeSrc":"45314:3:69","nodeType":"YulIdentifier","src":"45314:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"45486:3:69","nodeType":"YulIdentifier","src":"45486:3:69"}],"functionName":{"name":"store_literal_in_memory_133e6bf643465df761ef166e81246dc8f30fd9c0ebeb2ba6af193b3bb30494f8","nativeSrc":"45397:88:69","nodeType":"YulIdentifier","src":"45397:88:69"},"nativeSrc":"45397:93:69","nodeType":"YulFunctionCall","src":"45397:93:69"},"nativeSrc":"45397:93:69","nodeType":"YulExpressionStatement","src":"45397:93:69"},{"nativeSrc":"45499:19:69","nodeType":"YulAssignment","src":"45499:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"45510:3:69","nodeType":"YulIdentifier","src":"45510:3:69"},{"kind":"number","nativeSrc":"45515:2:69","nodeType":"YulLiteral","src":"45515:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"45506:3:69","nodeType":"YulIdentifier","src":"45506:3:69"},"nativeSrc":"45506:12:69","nodeType":"YulFunctionCall","src":"45506:12:69"},"variableNames":[{"name":"end","nativeSrc":"45499:3:69","nodeType":"YulIdentifier","src":"45499:3:69"}]}]},"name":"abi_encode_t_stringliteral_133e6bf643465df761ef166e81246dc8f30fd9c0ebeb2ba6af193b3bb30494f8_to_t_string_memory_ptr_fromStack","nativeSrc":"45158:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"45292:3:69","nodeType":"YulTypedName","src":"45292:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"45300:3:69","nodeType":"YulTypedName","src":"45300:3:69","type":""}],"src":"45158:366:69"},{"body":{"nativeSrc":"45701:248:69","nodeType":"YulBlock","src":"45701:248:69","statements":[{"nativeSrc":"45711:26:69","nodeType":"YulAssignment","src":"45711:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"45723:9:69","nodeType":"YulIdentifier","src":"45723:9:69"},{"kind":"number","nativeSrc":"45734:2:69","nodeType":"YulLiteral","src":"45734:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"45719:3:69","nodeType":"YulIdentifier","src":"45719:3:69"},"nativeSrc":"45719:18:69","nodeType":"YulFunctionCall","src":"45719:18:69"},"variableNames":[{"name":"tail","nativeSrc":"45711:4:69","nodeType":"YulIdentifier","src":"45711:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"45758:9:69","nodeType":"YulIdentifier","src":"45758:9:69"},{"kind":"number","nativeSrc":"45769:1:69","nodeType":"YulLiteral","src":"45769:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"45754:3:69","nodeType":"YulIdentifier","src":"45754:3:69"},"nativeSrc":"45754:17:69","nodeType":"YulFunctionCall","src":"45754:17:69"},{"arguments":[{"name":"tail","nativeSrc":"45777:4:69","nodeType":"YulIdentifier","src":"45777:4:69"},{"name":"headStart","nativeSrc":"45783:9:69","nodeType":"YulIdentifier","src":"45783:9:69"}],"functionName":{"name":"sub","nativeSrc":"45773:3:69","nodeType":"YulIdentifier","src":"45773:3:69"},"nativeSrc":"45773:20:69","nodeType":"YulFunctionCall","src":"45773:20:69"}],"functionName":{"name":"mstore","nativeSrc":"45747:6:69","nodeType":"YulIdentifier","src":"45747:6:69"},"nativeSrc":"45747:47:69","nodeType":"YulFunctionCall","src":"45747:47:69"},"nativeSrc":"45747:47:69","nodeType":"YulExpressionStatement","src":"45747:47:69"},{"nativeSrc":"45803:139:69","nodeType":"YulAssignment","src":"45803:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"45937:4:69","nodeType":"YulIdentifier","src":"45937:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_133e6bf643465df761ef166e81246dc8f30fd9c0ebeb2ba6af193b3bb30494f8_to_t_string_memory_ptr_fromStack","nativeSrc":"45811:124:69","nodeType":"YulIdentifier","src":"45811:124:69"},"nativeSrc":"45811:131:69","nodeType":"YulFunctionCall","src":"45811:131:69"},"variableNames":[{"name":"tail","nativeSrc":"45803:4:69","nodeType":"YulIdentifier","src":"45803:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_133e6bf643465df761ef166e81246dc8f30fd9c0ebeb2ba6af193b3bb30494f8__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"45530:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"45681:9:69","nodeType":"YulTypedName","src":"45681:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"45696:4:69","nodeType":"YulTypedName","src":"45696:4:69","type":""}],"src":"45530:419:69"},{"body":{"nativeSrc":"46061:122:69","nodeType":"YulBlock","src":"46061:122:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"46083:6:69","nodeType":"YulIdentifier","src":"46083:6:69"},{"kind":"number","nativeSrc":"46091:1:69","nodeType":"YulLiteral","src":"46091:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"46079:3:69","nodeType":"YulIdentifier","src":"46079:3:69"},"nativeSrc":"46079:14:69","nodeType":"YulFunctionCall","src":"46079:14:69"},{"hexValue":"7468697320526577617264734469737472696275746f7220697320616c726561","kind":"string","nativeSrc":"46095:34:69","nodeType":"YulLiteral","src":"46095:34:69","type":"","value":"this RewardsDistributor is alrea"}],"functionName":{"name":"mstore","nativeSrc":"46072:6:69","nodeType":"YulIdentifier","src":"46072:6:69"},"nativeSrc":"46072:58:69","nodeType":"YulFunctionCall","src":"46072:58:69"},"nativeSrc":"46072:58:69","nodeType":"YulExpressionStatement","src":"46072:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"46151:6:69","nodeType":"YulIdentifier","src":"46151:6:69"},{"kind":"number","nativeSrc":"46159:2:69","nodeType":"YulLiteral","src":"46159:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"46147:3:69","nodeType":"YulIdentifier","src":"46147:3:69"},"nativeSrc":"46147:15:69","nodeType":"YulFunctionCall","src":"46147:15:69"},{"hexValue":"6479206c6f636b6564","kind":"string","nativeSrc":"46164:11:69","nodeType":"YulLiteral","src":"46164:11:69","type":"","value":"dy locked"}],"functionName":{"name":"mstore","nativeSrc":"46140:6:69","nodeType":"YulIdentifier","src":"46140:6:69"},"nativeSrc":"46140:36:69","nodeType":"YulFunctionCall","src":"46140:36:69"},"nativeSrc":"46140:36:69","nodeType":"YulExpressionStatement","src":"46140:36:69"}]},"name":"store_literal_in_memory_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8","nativeSrc":"45955:228:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"46053:6:69","nodeType":"YulTypedName","src":"46053:6:69","type":""}],"src":"45955:228:69"},{"body":{"nativeSrc":"46335:220:69","nodeType":"YulBlock","src":"46335:220:69","statements":[{"nativeSrc":"46345:74:69","nodeType":"YulAssignment","src":"46345:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"46411:3:69","nodeType":"YulIdentifier","src":"46411:3:69"},{"kind":"number","nativeSrc":"46416:2:69","nodeType":"YulLiteral","src":"46416:2:69","type":"","value":"41"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"46352:58:69","nodeType":"YulIdentifier","src":"46352:58:69"},"nativeSrc":"46352:67:69","nodeType":"YulFunctionCall","src":"46352:67:69"},"variableNames":[{"name":"pos","nativeSrc":"46345:3:69","nodeType":"YulIdentifier","src":"46345:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"46517:3:69","nodeType":"YulIdentifier","src":"46517:3:69"}],"functionName":{"name":"store_literal_in_memory_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8","nativeSrc":"46428:88:69","nodeType":"YulIdentifier","src":"46428:88:69"},"nativeSrc":"46428:93:69","nodeType":"YulFunctionCall","src":"46428:93:69"},"nativeSrc":"46428:93:69","nodeType":"YulExpressionStatement","src":"46428:93:69"},{"nativeSrc":"46530:19:69","nodeType":"YulAssignment","src":"46530:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"46541:3:69","nodeType":"YulIdentifier","src":"46541:3:69"},{"kind":"number","nativeSrc":"46546:2:69","nodeType":"YulLiteral","src":"46546:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"46537:3:69","nodeType":"YulIdentifier","src":"46537:3:69"},"nativeSrc":"46537:12:69","nodeType":"YulFunctionCall","src":"46537:12:69"},"variableNames":[{"name":"end","nativeSrc":"46530:3:69","nodeType":"YulIdentifier","src":"46530:3:69"}]}]},"name":"abi_encode_t_stringliteral_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8_to_t_string_memory_ptr_fromStack","nativeSrc":"46189:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"46323:3:69","nodeType":"YulTypedName","src":"46323:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"46331:3:69","nodeType":"YulTypedName","src":"46331:3:69","type":""}],"src":"46189:366:69"},{"body":{"nativeSrc":"46732:248:69","nodeType":"YulBlock","src":"46732:248:69","statements":[{"nativeSrc":"46742:26:69","nodeType":"YulAssignment","src":"46742:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"46754:9:69","nodeType":"YulIdentifier","src":"46754:9:69"},{"kind":"number","nativeSrc":"46765:2:69","nodeType":"YulLiteral","src":"46765:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"46750:3:69","nodeType":"YulIdentifier","src":"46750:3:69"},"nativeSrc":"46750:18:69","nodeType":"YulFunctionCall","src":"46750:18:69"},"variableNames":[{"name":"tail","nativeSrc":"46742:4:69","nodeType":"YulIdentifier","src":"46742:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"46789:9:69","nodeType":"YulIdentifier","src":"46789:9:69"},{"kind":"number","nativeSrc":"46800:1:69","nodeType":"YulLiteral","src":"46800:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"46785:3:69","nodeType":"YulIdentifier","src":"46785:3:69"},"nativeSrc":"46785:17:69","nodeType":"YulFunctionCall","src":"46785:17:69"},{"arguments":[{"name":"tail","nativeSrc":"46808:4:69","nodeType":"YulIdentifier","src":"46808:4:69"},{"name":"headStart","nativeSrc":"46814:9:69","nodeType":"YulIdentifier","src":"46814:9:69"}],"functionName":{"name":"sub","nativeSrc":"46804:3:69","nodeType":"YulIdentifier","src":"46804:3:69"},"nativeSrc":"46804:20:69","nodeType":"YulFunctionCall","src":"46804:20:69"}],"functionName":{"name":"mstore","nativeSrc":"46778:6:69","nodeType":"YulIdentifier","src":"46778:6:69"},"nativeSrc":"46778:47:69","nodeType":"YulFunctionCall","src":"46778:47:69"},"nativeSrc":"46778:47:69","nodeType":"YulExpressionStatement","src":"46778:47:69"},{"nativeSrc":"46834:139:69","nodeType":"YulAssignment","src":"46834:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"46968:4:69","nodeType":"YulIdentifier","src":"46968:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8_to_t_string_memory_ptr_fromStack","nativeSrc":"46842:124:69","nodeType":"YulIdentifier","src":"46842:124:69"},"nativeSrc":"46842:131:69","nodeType":"YulFunctionCall","src":"46842:131:69"},"variableNames":[{"name":"tail","nativeSrc":"46834:4:69","nodeType":"YulIdentifier","src":"46834:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"46561:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"46712:9:69","nodeType":"YulTypedName","src":"46712:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"46727:4:69","nodeType":"YulTypedName","src":"46727:4:69","type":""}],"src":"46561:419:69"},{"body":{"nativeSrc":"47014:152:69","nodeType":"YulBlock","src":"47014:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"47031:1:69","nodeType":"YulLiteral","src":"47031:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"47034:77:69","nodeType":"YulLiteral","src":"47034:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"47024:6:69","nodeType":"YulIdentifier","src":"47024:6:69"},"nativeSrc":"47024:88:69","nodeType":"YulFunctionCall","src":"47024:88:69"},"nativeSrc":"47024:88:69","nodeType":"YulExpressionStatement","src":"47024:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"47128:1:69","nodeType":"YulLiteral","src":"47128:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"47131:4:69","nodeType":"YulLiteral","src":"47131:4:69","type":"","value":"0x11"}],"functionName":{"name":"mstore","nativeSrc":"47121:6:69","nodeType":"YulIdentifier","src":"47121:6:69"},"nativeSrc":"47121:15:69","nodeType":"YulFunctionCall","src":"47121:15:69"},"nativeSrc":"47121:15:69","nodeType":"YulExpressionStatement","src":"47121:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"47152:1:69","nodeType":"YulLiteral","src":"47152:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"47155:4:69","nodeType":"YulLiteral","src":"47155:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"47145:6:69","nodeType":"YulIdentifier","src":"47145:6:69"},"nativeSrc":"47145:15:69","nodeType":"YulFunctionCall","src":"47145:15:69"},"nativeSrc":"47145:15:69","nodeType":"YulExpressionStatement","src":"47145:15:69"}]},"name":"panic_error_0x11","nativeSrc":"46986:180:69","nodeType":"YulFunctionDefinition","src":"46986:180:69"},{"body":{"nativeSrc":"47217:149:69","nodeType":"YulBlock","src":"47217:149:69","statements":[{"nativeSrc":"47227:25:69","nodeType":"YulAssignment","src":"47227:25:69","value":{"arguments":[{"name":"x","nativeSrc":"47250:1:69","nodeType":"YulIdentifier","src":"47250:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"47232:17:69","nodeType":"YulIdentifier","src":"47232:17:69"},"nativeSrc":"47232:20:69","nodeType":"YulFunctionCall","src":"47232:20:69"},"variableNames":[{"name":"x","nativeSrc":"47227:1:69","nodeType":"YulIdentifier","src":"47227:1:69"}]},{"nativeSrc":"47261:25:69","nodeType":"YulAssignment","src":"47261:25:69","value":{"arguments":[{"name":"y","nativeSrc":"47284:1:69","nodeType":"YulIdentifier","src":"47284:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"47266:17:69","nodeType":"YulIdentifier","src":"47266:17:69"},"nativeSrc":"47266:20:69","nodeType":"YulFunctionCall","src":"47266:20:69"},"variableNames":[{"name":"y","nativeSrc":"47261:1:69","nodeType":"YulIdentifier","src":"47261:1:69"}]},{"nativeSrc":"47295:17:69","nodeType":"YulAssignment","src":"47295:17:69","value":{"arguments":[{"name":"x","nativeSrc":"47307:1:69","nodeType":"YulIdentifier","src":"47307:1:69"},{"name":"y","nativeSrc":"47310:1:69","nodeType":"YulIdentifier","src":"47310:1:69"}],"functionName":{"name":"sub","nativeSrc":"47303:3:69","nodeType":"YulIdentifier","src":"47303:3:69"},"nativeSrc":"47303:9:69","nodeType":"YulFunctionCall","src":"47303:9:69"},"variableNames":[{"name":"diff","nativeSrc":"47295:4:69","nodeType":"YulIdentifier","src":"47295:4:69"}]},{"body":{"nativeSrc":"47337:22:69","nodeType":"YulBlock","src":"47337:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"47339:16:69","nodeType":"YulIdentifier","src":"47339:16:69"},"nativeSrc":"47339:18:69","nodeType":"YulFunctionCall","src":"47339:18:69"},"nativeSrc":"47339:18:69","nodeType":"YulExpressionStatement","src":"47339:18:69"}]},"condition":{"arguments":[{"name":"diff","nativeSrc":"47328:4:69","nodeType":"YulIdentifier","src":"47328:4:69"},{"name":"x","nativeSrc":"47334:1:69","nodeType":"YulIdentifier","src":"47334:1:69"}],"functionName":{"name":"gt","nativeSrc":"47325:2:69","nodeType":"YulIdentifier","src":"47325:2:69"},"nativeSrc":"47325:11:69","nodeType":"YulFunctionCall","src":"47325:11:69"},"nativeSrc":"47322:37:69","nodeType":"YulIf","src":"47322:37:69"}]},"name":"checked_sub_t_uint256","nativeSrc":"47172:194:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"47203:1:69","nodeType":"YulTypedName","src":"47203:1:69","type":""},{"name":"y","nativeSrc":"47206:1:69","nodeType":"YulTypedName","src":"47206:1:69","type":""}],"returnVariables":[{"name":"diff","nativeSrc":"47212:4:69","nodeType":"YulTypedName","src":"47212:4:69","type":""}],"src":"47172:194:69"},{"body":{"nativeSrc":"47420:362:69","nodeType":"YulBlock","src":"47420:362:69","statements":[{"nativeSrc":"47430:25:69","nodeType":"YulAssignment","src":"47430:25:69","value":{"arguments":[{"name":"x","nativeSrc":"47453:1:69","nodeType":"YulIdentifier","src":"47453:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"47435:17:69","nodeType":"YulIdentifier","src":"47435:17:69"},"nativeSrc":"47435:20:69","nodeType":"YulFunctionCall","src":"47435:20:69"},"variableNames":[{"name":"x","nativeSrc":"47430:1:69","nodeType":"YulIdentifier","src":"47430:1:69"}]},{"nativeSrc":"47464:25:69","nodeType":"YulAssignment","src":"47464:25:69","value":{"arguments":[{"name":"y","nativeSrc":"47487:1:69","nodeType":"YulIdentifier","src":"47487:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"47469:17:69","nodeType":"YulIdentifier","src":"47469:17:69"},"nativeSrc":"47469:20:69","nodeType":"YulFunctionCall","src":"47469:20:69"},"variableNames":[{"name":"y","nativeSrc":"47464:1:69","nodeType":"YulIdentifier","src":"47464:1:69"}]},{"nativeSrc":"47498:28:69","nodeType":"YulVariableDeclaration","src":"47498:28:69","value":{"arguments":[{"name":"x","nativeSrc":"47521:1:69","nodeType":"YulIdentifier","src":"47521:1:69"},{"name":"y","nativeSrc":"47524:1:69","nodeType":"YulIdentifier","src":"47524:1:69"}],"functionName":{"name":"mul","nativeSrc":"47517:3:69","nodeType":"YulIdentifier","src":"47517:3:69"},"nativeSrc":"47517:9:69","nodeType":"YulFunctionCall","src":"47517:9:69"},"variables":[{"name":"product_raw","nativeSrc":"47502:11:69","nodeType":"YulTypedName","src":"47502:11:69","type":""}]},{"nativeSrc":"47535:41:69","nodeType":"YulAssignment","src":"47535:41:69","value":{"arguments":[{"name":"product_raw","nativeSrc":"47564:11:69","nodeType":"YulIdentifier","src":"47564:11:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"47546:17:69","nodeType":"YulIdentifier","src":"47546:17:69"},"nativeSrc":"47546:30:69","nodeType":"YulFunctionCall","src":"47546:30:69"},"variableNames":[{"name":"product","nativeSrc":"47535:7:69","nodeType":"YulIdentifier","src":"47535:7:69"}]},{"body":{"nativeSrc":"47753:22:69","nodeType":"YulBlock","src":"47753:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"47755:16:69","nodeType":"YulIdentifier","src":"47755:16:69"},"nativeSrc":"47755:18:69","nodeType":"YulFunctionCall","src":"47755:18:69"},"nativeSrc":"47755:18:69","nodeType":"YulExpressionStatement","src":"47755:18:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nativeSrc":"47686:1:69","nodeType":"YulIdentifier","src":"47686:1:69"}],"functionName":{"name":"iszero","nativeSrc":"47679:6:69","nodeType":"YulIdentifier","src":"47679:6:69"},"nativeSrc":"47679:9:69","nodeType":"YulFunctionCall","src":"47679:9:69"},{"arguments":[{"name":"y","nativeSrc":"47709:1:69","nodeType":"YulIdentifier","src":"47709:1:69"},{"arguments":[{"name":"product","nativeSrc":"47716:7:69","nodeType":"YulIdentifier","src":"47716:7:69"},{"name":"x","nativeSrc":"47725:1:69","nodeType":"YulIdentifier","src":"47725:1:69"}],"functionName":{"name":"div","nativeSrc":"47712:3:69","nodeType":"YulIdentifier","src":"47712:3:69"},"nativeSrc":"47712:15:69","nodeType":"YulFunctionCall","src":"47712:15:69"}],"functionName":{"name":"eq","nativeSrc":"47706:2:69","nodeType":"YulIdentifier","src":"47706:2:69"},"nativeSrc":"47706:22:69","nodeType":"YulFunctionCall","src":"47706:22:69"}],"functionName":{"name":"or","nativeSrc":"47659:2:69","nodeType":"YulIdentifier","src":"47659:2:69"},"nativeSrc":"47659:83:69","nodeType":"YulFunctionCall","src":"47659:83:69"}],"functionName":{"name":"iszero","nativeSrc":"47639:6:69","nodeType":"YulIdentifier","src":"47639:6:69"},"nativeSrc":"47639:113:69","nodeType":"YulFunctionCall","src":"47639:113:69"},"nativeSrc":"47636:139:69","nodeType":"YulIf","src":"47636:139:69"}]},"name":"checked_mul_t_uint256","nativeSrc":"47372:410:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"47403:1:69","nodeType":"YulTypedName","src":"47403:1:69","type":""},{"name":"y","nativeSrc":"47406:1:69","nodeType":"YulTypedName","src":"47406:1:69","type":""}],"returnVariables":[{"name":"product","nativeSrc":"47412:7:69","nodeType":"YulTypedName","src":"47412:7:69","type":""}],"src":"47372:410:69"},{"body":{"nativeSrc":"47832:147:69","nodeType":"YulBlock","src":"47832:147:69","statements":[{"nativeSrc":"47842:25:69","nodeType":"YulAssignment","src":"47842:25:69","value":{"arguments":[{"name":"x","nativeSrc":"47865:1:69","nodeType":"YulIdentifier","src":"47865:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"47847:17:69","nodeType":"YulIdentifier","src":"47847:17:69"},"nativeSrc":"47847:20:69","nodeType":"YulFunctionCall","src":"47847:20:69"},"variableNames":[{"name":"x","nativeSrc":"47842:1:69","nodeType":"YulIdentifier","src":"47842:1:69"}]},{"nativeSrc":"47876:25:69","nodeType":"YulAssignment","src":"47876:25:69","value":{"arguments":[{"name":"y","nativeSrc":"47899:1:69","nodeType":"YulIdentifier","src":"47899:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"47881:17:69","nodeType":"YulIdentifier","src":"47881:17:69"},"nativeSrc":"47881:20:69","nodeType":"YulFunctionCall","src":"47881:20:69"},"variableNames":[{"name":"y","nativeSrc":"47876:1:69","nodeType":"YulIdentifier","src":"47876:1:69"}]},{"nativeSrc":"47910:16:69","nodeType":"YulAssignment","src":"47910:16:69","value":{"arguments":[{"name":"x","nativeSrc":"47921:1:69","nodeType":"YulIdentifier","src":"47921:1:69"},{"name":"y","nativeSrc":"47924:1:69","nodeType":"YulIdentifier","src":"47924:1:69"}],"functionName":{"name":"add","nativeSrc":"47917:3:69","nodeType":"YulIdentifier","src":"47917:3:69"},"nativeSrc":"47917:9:69","nodeType":"YulFunctionCall","src":"47917:9:69"},"variableNames":[{"name":"sum","nativeSrc":"47910:3:69","nodeType":"YulIdentifier","src":"47910:3:69"}]},{"body":{"nativeSrc":"47950:22:69","nodeType":"YulBlock","src":"47950:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"47952:16:69","nodeType":"YulIdentifier","src":"47952:16:69"},"nativeSrc":"47952:18:69","nodeType":"YulFunctionCall","src":"47952:18:69"},"nativeSrc":"47952:18:69","nodeType":"YulExpressionStatement","src":"47952:18:69"}]},"condition":{"arguments":[{"name":"x","nativeSrc":"47942:1:69","nodeType":"YulIdentifier","src":"47942:1:69"},{"name":"sum","nativeSrc":"47945:3:69","nodeType":"YulIdentifier","src":"47945:3:69"}],"functionName":{"name":"gt","nativeSrc":"47939:2:69","nodeType":"YulIdentifier","src":"47939:2:69"},"nativeSrc":"47939:10:69","nodeType":"YulFunctionCall","src":"47939:10:69"},"nativeSrc":"47936:36:69","nodeType":"YulIf","src":"47936:36:69"}]},"name":"checked_add_t_uint256","nativeSrc":"47788:191:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"47819:1:69","nodeType":"YulTypedName","src":"47819:1:69","type":""},{"name":"y","nativeSrc":"47822:1:69","nodeType":"YulTypedName","src":"47822:1:69","type":""}],"returnVariables":[{"name":"sum","nativeSrc":"47828:3:69","nodeType":"YulTypedName","src":"47828:3:69","type":""}],"src":"47788:191:69"},{"body":{"nativeSrc":"48091:115:69","nodeType":"YulBlock","src":"48091:115:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"48113:6:69","nodeType":"YulIdentifier","src":"48113:6:69"},{"kind":"number","nativeSrc":"48121:1:69","nodeType":"YulLiteral","src":"48121:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"48109:3:69","nodeType":"YulIdentifier","src":"48109:3:69"},"nativeSrc":"48109:14:69","nodeType":"YulFunctionCall","src":"48109:14:69"},{"hexValue":"436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d","kind":"string","nativeSrc":"48125:34:69","nodeType":"YulLiteral","src":"48125:34:69","type":"","value":"Comptroller: Invalid maxLoopsLim"}],"functionName":{"name":"mstore","nativeSrc":"48102:6:69","nodeType":"YulIdentifier","src":"48102:6:69"},"nativeSrc":"48102:58:69","nodeType":"YulFunctionCall","src":"48102:58:69"},"nativeSrc":"48102:58:69","nodeType":"YulExpressionStatement","src":"48102:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"48181:6:69","nodeType":"YulIdentifier","src":"48181:6:69"},{"kind":"number","nativeSrc":"48189:2:69","nodeType":"YulLiteral","src":"48189:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"48177:3:69","nodeType":"YulIdentifier","src":"48177:3:69"},"nativeSrc":"48177:15:69","nodeType":"YulFunctionCall","src":"48177:15:69"},{"hexValue":"6974","kind":"string","nativeSrc":"48194:4:69","nodeType":"YulLiteral","src":"48194:4:69","type":"","value":"it"}],"functionName":{"name":"mstore","nativeSrc":"48170:6:69","nodeType":"YulIdentifier","src":"48170:6:69"},"nativeSrc":"48170:29:69","nodeType":"YulFunctionCall","src":"48170:29:69"},"nativeSrc":"48170:29:69","nodeType":"YulExpressionStatement","src":"48170:29:69"}]},"name":"store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032","nativeSrc":"47985:221:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"48083:6:69","nodeType":"YulTypedName","src":"48083:6:69","type":""}],"src":"47985:221:69"},{"body":{"nativeSrc":"48358:220:69","nodeType":"YulBlock","src":"48358:220:69","statements":[{"nativeSrc":"48368:74:69","nodeType":"YulAssignment","src":"48368:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"48434:3:69","nodeType":"YulIdentifier","src":"48434:3:69"},{"kind":"number","nativeSrc":"48439:2:69","nodeType":"YulLiteral","src":"48439:2:69","type":"","value":"34"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"48375:58:69","nodeType":"YulIdentifier","src":"48375:58:69"},"nativeSrc":"48375:67:69","nodeType":"YulFunctionCall","src":"48375:67:69"},"variableNames":[{"name":"pos","nativeSrc":"48368:3:69","nodeType":"YulIdentifier","src":"48368:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"48540:3:69","nodeType":"YulIdentifier","src":"48540:3:69"}],"functionName":{"name":"store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032","nativeSrc":"48451:88:69","nodeType":"YulIdentifier","src":"48451:88:69"},"nativeSrc":"48451:93:69","nodeType":"YulFunctionCall","src":"48451:93:69"},"nativeSrc":"48451:93:69","nodeType":"YulExpressionStatement","src":"48451:93:69"},{"nativeSrc":"48553:19:69","nodeType":"YulAssignment","src":"48553:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"48564:3:69","nodeType":"YulIdentifier","src":"48564:3:69"},{"kind":"number","nativeSrc":"48569:2:69","nodeType":"YulLiteral","src":"48569:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"48560:3:69","nodeType":"YulIdentifier","src":"48560:3:69"},"nativeSrc":"48560:12:69","nodeType":"YulFunctionCall","src":"48560:12:69"},"variableNames":[{"name":"end","nativeSrc":"48553:3:69","nodeType":"YulIdentifier","src":"48553:3:69"}]}]},"name":"abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack","nativeSrc":"48212:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"48346:3:69","nodeType":"YulTypedName","src":"48346:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"48354:3:69","nodeType":"YulTypedName","src":"48354:3:69","type":""}],"src":"48212:366:69"},{"body":{"nativeSrc":"48755:248:69","nodeType":"YulBlock","src":"48755:248:69","statements":[{"nativeSrc":"48765:26:69","nodeType":"YulAssignment","src":"48765:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"48777:9:69","nodeType":"YulIdentifier","src":"48777:9:69"},{"kind":"number","nativeSrc":"48788:2:69","nodeType":"YulLiteral","src":"48788:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"48773:3:69","nodeType":"YulIdentifier","src":"48773:3:69"},"nativeSrc":"48773:18:69","nodeType":"YulFunctionCall","src":"48773:18:69"},"variableNames":[{"name":"tail","nativeSrc":"48765:4:69","nodeType":"YulIdentifier","src":"48765:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"48812:9:69","nodeType":"YulIdentifier","src":"48812:9:69"},{"kind":"number","nativeSrc":"48823:1:69","nodeType":"YulLiteral","src":"48823:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"48808:3:69","nodeType":"YulIdentifier","src":"48808:3:69"},"nativeSrc":"48808:17:69","nodeType":"YulFunctionCall","src":"48808:17:69"},{"arguments":[{"name":"tail","nativeSrc":"48831:4:69","nodeType":"YulIdentifier","src":"48831:4:69"},{"name":"headStart","nativeSrc":"48837:9:69","nodeType":"YulIdentifier","src":"48837:9:69"}],"functionName":{"name":"sub","nativeSrc":"48827:3:69","nodeType":"YulIdentifier","src":"48827:3:69"},"nativeSrc":"48827:20:69","nodeType":"YulFunctionCall","src":"48827:20:69"}],"functionName":{"name":"mstore","nativeSrc":"48801:6:69","nodeType":"YulIdentifier","src":"48801:6:69"},"nativeSrc":"48801:47:69","nodeType":"YulFunctionCall","src":"48801:47:69"},"nativeSrc":"48801:47:69","nodeType":"YulExpressionStatement","src":"48801:47:69"},{"nativeSrc":"48857:139:69","nodeType":"YulAssignment","src":"48857:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"48991:4:69","nodeType":"YulIdentifier","src":"48991:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack","nativeSrc":"48865:124:69","nodeType":"YulIdentifier","src":"48865:124:69"},"nativeSrc":"48865:131:69","nodeType":"YulFunctionCall","src":"48865:131:69"},"variableNames":[{"name":"tail","nativeSrc":"48857:4:69","nodeType":"YulIdentifier","src":"48857:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"48584:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"48735:9:69","nodeType":"YulTypedName","src":"48735:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"48750:4:69","nodeType":"YulTypedName","src":"48750:4:69","type":""}],"src":"48584:419:69"},{"body":{"nativeSrc":"49115:136:69","nodeType":"YulBlock","src":"49115:136:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"49137:6:69","nodeType":"YulIdentifier","src":"49137:6:69"},{"kind":"number","nativeSrc":"49145:1:69","nodeType":"YulLiteral","src":"49145:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"49133:3:69","nodeType":"YulIdentifier","src":"49133:3:69"},"nativeSrc":"49133:14:69","nodeType":"YulFunctionCall","src":"49133:14:69"},{"hexValue":"73657474696e67206c61737420726577617264696e6720626c6f636b20696e20","kind":"string","nativeSrc":"49149:34:69","nodeType":"YulLiteral","src":"49149:34:69","type":"","value":"setting last rewarding block in "}],"functionName":{"name":"mstore","nativeSrc":"49126:6:69","nodeType":"YulIdentifier","src":"49126:6:69"},"nativeSrc":"49126:58:69","nodeType":"YulFunctionCall","src":"49126:58:69"},"nativeSrc":"49126:58:69","nodeType":"YulExpressionStatement","src":"49126:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"49205:6:69","nodeType":"YulIdentifier","src":"49205:6:69"},{"kind":"number","nativeSrc":"49213:2:69","nodeType":"YulLiteral","src":"49213:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"49201:3:69","nodeType":"YulIdentifier","src":"49201:3:69"},"nativeSrc":"49201:15:69","nodeType":"YulFunctionCall","src":"49201:15:69"},{"hexValue":"7468652070617374206973206e6f7420616c6c6f776564","kind":"string","nativeSrc":"49218:25:69","nodeType":"YulLiteral","src":"49218:25:69","type":"","value":"the past is not allowed"}],"functionName":{"name":"mstore","nativeSrc":"49194:6:69","nodeType":"YulIdentifier","src":"49194:6:69"},"nativeSrc":"49194:50:69","nodeType":"YulFunctionCall","src":"49194:50:69"},"nativeSrc":"49194:50:69","nodeType":"YulExpressionStatement","src":"49194:50:69"}]},"name":"store_literal_in_memory_6a6f70ab8717c54cc36616a41f4d2f11a60355fdc239fe328ffb57629cd36805","nativeSrc":"49009:242:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"49107:6:69","nodeType":"YulTypedName","src":"49107:6:69","type":""}],"src":"49009:242:69"},{"body":{"nativeSrc":"49403:220:69","nodeType":"YulBlock","src":"49403:220:69","statements":[{"nativeSrc":"49413:74:69","nodeType":"YulAssignment","src":"49413:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"49479:3:69","nodeType":"YulIdentifier","src":"49479:3:69"},{"kind":"number","nativeSrc":"49484:2:69","nodeType":"YulLiteral","src":"49484:2:69","type":"","value":"55"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"49420:58:69","nodeType":"YulIdentifier","src":"49420:58:69"},"nativeSrc":"49420:67:69","nodeType":"YulFunctionCall","src":"49420:67:69"},"variableNames":[{"name":"pos","nativeSrc":"49413:3:69","nodeType":"YulIdentifier","src":"49413:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"49585:3:69","nodeType":"YulIdentifier","src":"49585:3:69"}],"functionName":{"name":"store_literal_in_memory_6a6f70ab8717c54cc36616a41f4d2f11a60355fdc239fe328ffb57629cd36805","nativeSrc":"49496:88:69","nodeType":"YulIdentifier","src":"49496:88:69"},"nativeSrc":"49496:93:69","nodeType":"YulFunctionCall","src":"49496:93:69"},"nativeSrc":"49496:93:69","nodeType":"YulExpressionStatement","src":"49496:93:69"},{"nativeSrc":"49598:19:69","nodeType":"YulAssignment","src":"49598:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"49609:3:69","nodeType":"YulIdentifier","src":"49609:3:69"},{"kind":"number","nativeSrc":"49614:2:69","nodeType":"YulLiteral","src":"49614:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"49605:3:69","nodeType":"YulIdentifier","src":"49605:3:69"},"nativeSrc":"49605:12:69","nodeType":"YulFunctionCall","src":"49605:12:69"},"variableNames":[{"name":"end","nativeSrc":"49598:3:69","nodeType":"YulIdentifier","src":"49598:3:69"}]}]},"name":"abi_encode_t_stringliteral_6a6f70ab8717c54cc36616a41f4d2f11a60355fdc239fe328ffb57629cd36805_to_t_string_memory_ptr_fromStack","nativeSrc":"49257:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"49391:3:69","nodeType":"YulTypedName","src":"49391:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"49399:3:69","nodeType":"YulTypedName","src":"49399:3:69","type":""}],"src":"49257:366:69"},{"body":{"nativeSrc":"49800:248:69","nodeType":"YulBlock","src":"49800:248:69","statements":[{"nativeSrc":"49810:26:69","nodeType":"YulAssignment","src":"49810:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"49822:9:69","nodeType":"YulIdentifier","src":"49822:9:69"},{"kind":"number","nativeSrc":"49833:2:69","nodeType":"YulLiteral","src":"49833:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"49818:3:69","nodeType":"YulIdentifier","src":"49818:3:69"},"nativeSrc":"49818:18:69","nodeType":"YulFunctionCall","src":"49818:18:69"},"variableNames":[{"name":"tail","nativeSrc":"49810:4:69","nodeType":"YulIdentifier","src":"49810:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"49857:9:69","nodeType":"YulIdentifier","src":"49857:9:69"},{"kind":"number","nativeSrc":"49868:1:69","nodeType":"YulLiteral","src":"49868:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"49853:3:69","nodeType":"YulIdentifier","src":"49853:3:69"},"nativeSrc":"49853:17:69","nodeType":"YulFunctionCall","src":"49853:17:69"},{"arguments":[{"name":"tail","nativeSrc":"49876:4:69","nodeType":"YulIdentifier","src":"49876:4:69"},{"name":"headStart","nativeSrc":"49882:9:69","nodeType":"YulIdentifier","src":"49882:9:69"}],"functionName":{"name":"sub","nativeSrc":"49872:3:69","nodeType":"YulIdentifier","src":"49872:3:69"},"nativeSrc":"49872:20:69","nodeType":"YulFunctionCall","src":"49872:20:69"}],"functionName":{"name":"mstore","nativeSrc":"49846:6:69","nodeType":"YulIdentifier","src":"49846:6:69"},"nativeSrc":"49846:47:69","nodeType":"YulFunctionCall","src":"49846:47:69"},"nativeSrc":"49846:47:69","nodeType":"YulExpressionStatement","src":"49846:47:69"},{"nativeSrc":"49902:139:69","nodeType":"YulAssignment","src":"49902:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"50036:4:69","nodeType":"YulIdentifier","src":"50036:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_6a6f70ab8717c54cc36616a41f4d2f11a60355fdc239fe328ffb57629cd36805_to_t_string_memory_ptr_fromStack","nativeSrc":"49910:124:69","nodeType":"YulIdentifier","src":"49910:124:69"},"nativeSrc":"49910:131:69","nodeType":"YulFunctionCall","src":"49910:131:69"},"variableNames":[{"name":"tail","nativeSrc":"49902:4:69","nodeType":"YulIdentifier","src":"49902:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_6a6f70ab8717c54cc36616a41f4d2f11a60355fdc239fe328ffb57629cd36805__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"49629:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"49780:9:69","nodeType":"YulTypedName","src":"49780:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"49795:4:69","nodeType":"YulTypedName","src":"49795:4:69","type":""}],"src":"49629:419:69"},{"body":{"nativeSrc":"50150:122:69","nodeType":"YulBlock","src":"50150:122:69","statements":[{"nativeSrc":"50160:26:69","nodeType":"YulAssignment","src":"50160:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"50172:9:69","nodeType":"YulIdentifier","src":"50172:9:69"},{"kind":"number","nativeSrc":"50183:2:69","nodeType":"YulLiteral","src":"50183:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"50168:3:69","nodeType":"YulIdentifier","src":"50168:3:69"},"nativeSrc":"50168:18:69","nodeType":"YulFunctionCall","src":"50168:18:69"},"variableNames":[{"name":"tail","nativeSrc":"50160:4:69","nodeType":"YulIdentifier","src":"50160:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"50238:6:69","nodeType":"YulIdentifier","src":"50238:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"50251:9:69","nodeType":"YulIdentifier","src":"50251:9:69"},{"kind":"number","nativeSrc":"50262:1:69","nodeType":"YulLiteral","src":"50262:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"50247:3:69","nodeType":"YulIdentifier","src":"50247:3:69"},"nativeSrc":"50247:17:69","nodeType":"YulFunctionCall","src":"50247:17:69"}],"functionName":{"name":"abi_encode_t_uint32_to_t_uint32_fromStack","nativeSrc":"50196:41:69","nodeType":"YulIdentifier","src":"50196:41:69"},"nativeSrc":"50196:69:69","nodeType":"YulFunctionCall","src":"50196:69:69"},"nativeSrc":"50196:69:69","nodeType":"YulExpressionStatement","src":"50196:69:69"}]},"name":"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed","nativeSrc":"50054:218:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"50122:9:69","nodeType":"YulTypedName","src":"50122:9:69","type":""},{"name":"value0","nativeSrc":"50134:6:69","nodeType":"YulTypedName","src":"50134:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"50145:4:69","nodeType":"YulTypedName","src":"50145:4:69","type":""}],"src":"50054:218:69"},{"body":{"nativeSrc":"50384:124:69","nodeType":"YulBlock","src":"50384:124:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"50406:6:69","nodeType":"YulIdentifier","src":"50406:6:69"},{"kind":"number","nativeSrc":"50414:1:69","nodeType":"YulLiteral","src":"50414:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"50402:3:69","nodeType":"YulIdentifier","src":"50402:3:69"},"nativeSrc":"50402:14:69","nodeType":"YulFunctionCall","src":"50402:14:69"},{"hexValue":"496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069","kind":"string","nativeSrc":"50418:34:69","nodeType":"YulLiteral","src":"50418:34:69","type":"","value":"Initializable: contract is not i"}],"functionName":{"name":"mstore","nativeSrc":"50395:6:69","nodeType":"YulIdentifier","src":"50395:6:69"},"nativeSrc":"50395:58:69","nodeType":"YulFunctionCall","src":"50395:58:69"},"nativeSrc":"50395:58:69","nodeType":"YulExpressionStatement","src":"50395:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"50474:6:69","nodeType":"YulIdentifier","src":"50474:6:69"},{"kind":"number","nativeSrc":"50482:2:69","nodeType":"YulLiteral","src":"50482:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"50470:3:69","nodeType":"YulIdentifier","src":"50470:3:69"},"nativeSrc":"50470:15:69","nodeType":"YulFunctionCall","src":"50470:15:69"},{"hexValue":"6e697469616c697a696e67","kind":"string","nativeSrc":"50487:13:69","nodeType":"YulLiteral","src":"50487:13:69","type":"","value":"nitializing"}],"functionName":{"name":"mstore","nativeSrc":"50463:6:69","nodeType":"YulIdentifier","src":"50463:6:69"},"nativeSrc":"50463:38:69","nodeType":"YulFunctionCall","src":"50463:38:69"},"nativeSrc":"50463:38:69","nodeType":"YulExpressionStatement","src":"50463:38:69"}]},"name":"store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b","nativeSrc":"50278:230:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"50376:6:69","nodeType":"YulTypedName","src":"50376:6:69","type":""}],"src":"50278:230:69"},{"body":{"nativeSrc":"50660:220:69","nodeType":"YulBlock","src":"50660:220:69","statements":[{"nativeSrc":"50670:74:69","nodeType":"YulAssignment","src":"50670:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"50736:3:69","nodeType":"YulIdentifier","src":"50736:3:69"},{"kind":"number","nativeSrc":"50741:2:69","nodeType":"YulLiteral","src":"50741:2:69","type":"","value":"43"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"50677:58:69","nodeType":"YulIdentifier","src":"50677:58:69"},"nativeSrc":"50677:67:69","nodeType":"YulFunctionCall","src":"50677:67:69"},"variableNames":[{"name":"pos","nativeSrc":"50670:3:69","nodeType":"YulIdentifier","src":"50670:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"50842:3:69","nodeType":"YulIdentifier","src":"50842:3:69"}],"functionName":{"name":"store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b","nativeSrc":"50753:88:69","nodeType":"YulIdentifier","src":"50753:88:69"},"nativeSrc":"50753:93:69","nodeType":"YulFunctionCall","src":"50753:93:69"},"nativeSrc":"50753:93:69","nodeType":"YulExpressionStatement","src":"50753:93:69"},{"nativeSrc":"50855:19:69","nodeType":"YulAssignment","src":"50855:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"50866:3:69","nodeType":"YulIdentifier","src":"50866:3:69"},{"kind":"number","nativeSrc":"50871:2:69","nodeType":"YulLiteral","src":"50871:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"50862:3:69","nodeType":"YulIdentifier","src":"50862:3:69"},"nativeSrc":"50862:12:69","nodeType":"YulFunctionCall","src":"50862:12:69"},"variableNames":[{"name":"end","nativeSrc":"50855:3:69","nodeType":"YulIdentifier","src":"50855:3:69"}]}]},"name":"abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack","nativeSrc":"50514:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"50648:3:69","nodeType":"YulTypedName","src":"50648:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"50656:3:69","nodeType":"YulTypedName","src":"50656:3:69","type":""}],"src":"50514:366:69"},{"body":{"nativeSrc":"51057:248:69","nodeType":"YulBlock","src":"51057:248:69","statements":[{"nativeSrc":"51067:26:69","nodeType":"YulAssignment","src":"51067:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"51079:9:69","nodeType":"YulIdentifier","src":"51079:9:69"},{"kind":"number","nativeSrc":"51090:2:69","nodeType":"YulLiteral","src":"51090:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"51075:3:69","nodeType":"YulIdentifier","src":"51075:3:69"},"nativeSrc":"51075:18:69","nodeType":"YulFunctionCall","src":"51075:18:69"},"variableNames":[{"name":"tail","nativeSrc":"51067:4:69","nodeType":"YulIdentifier","src":"51067:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"51114:9:69","nodeType":"YulIdentifier","src":"51114:9:69"},{"kind":"number","nativeSrc":"51125:1:69","nodeType":"YulLiteral","src":"51125:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"51110:3:69","nodeType":"YulIdentifier","src":"51110:3:69"},"nativeSrc":"51110:17:69","nodeType":"YulFunctionCall","src":"51110:17:69"},{"arguments":[{"name":"tail","nativeSrc":"51133:4:69","nodeType":"YulIdentifier","src":"51133:4:69"},{"name":"headStart","nativeSrc":"51139:9:69","nodeType":"YulIdentifier","src":"51139:9:69"}],"functionName":{"name":"sub","nativeSrc":"51129:3:69","nodeType":"YulIdentifier","src":"51129:3:69"},"nativeSrc":"51129:20:69","nodeType":"YulFunctionCall","src":"51129:20:69"}],"functionName":{"name":"mstore","nativeSrc":"51103:6:69","nodeType":"YulIdentifier","src":"51103:6:69"},"nativeSrc":"51103:47:69","nodeType":"YulFunctionCall","src":"51103:47:69"},"nativeSrc":"51103:47:69","nodeType":"YulExpressionStatement","src":"51103:47:69"},{"nativeSrc":"51159:139:69","nodeType":"YulAssignment","src":"51159:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"51293:4:69","nodeType":"YulIdentifier","src":"51293:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack","nativeSrc":"51167:124:69","nodeType":"YulIdentifier","src":"51167:124:69"},"nativeSrc":"51167:131:69","nodeType":"YulFunctionCall","src":"51167:131:69"},"variableNames":[{"name":"tail","nativeSrc":"51159:4:69","nodeType":"YulIdentifier","src":"51159:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"50886:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"51037:9:69","nodeType":"YulTypedName","src":"51037:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"51052:4:69","nodeType":"YulTypedName","src":"51052:4:69","type":""}],"src":"50886:419:69"},{"body":{"nativeSrc":"51339:152:69","nodeType":"YulBlock","src":"51339:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"51356:1:69","nodeType":"YulLiteral","src":"51356:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"51359:77:69","nodeType":"YulLiteral","src":"51359:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"51349:6:69","nodeType":"YulIdentifier","src":"51349:6:69"},"nativeSrc":"51349:88:69","nodeType":"YulFunctionCall","src":"51349:88:69"},"nativeSrc":"51349:88:69","nodeType":"YulExpressionStatement","src":"51349:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"51453:1:69","nodeType":"YulLiteral","src":"51453:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"51456:4:69","nodeType":"YulLiteral","src":"51456:4:69","type":"","value":"0x12"}],"functionName":{"name":"mstore","nativeSrc":"51446:6:69","nodeType":"YulIdentifier","src":"51446:6:69"},"nativeSrc":"51446:15:69","nodeType":"YulFunctionCall","src":"51446:15:69"},"nativeSrc":"51446:15:69","nodeType":"YulExpressionStatement","src":"51446:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"51477:1:69","nodeType":"YulLiteral","src":"51477:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"51480:4:69","nodeType":"YulLiteral","src":"51480:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"51470:6:69","nodeType":"YulIdentifier","src":"51470:6:69"},"nativeSrc":"51470:15:69","nodeType":"YulFunctionCall","src":"51470:15:69"},"nativeSrc":"51470:15:69","nodeType":"YulExpressionStatement","src":"51470:15:69"}]},"name":"panic_error_0x12","nativeSrc":"51311:180:69","nodeType":"YulFunctionDefinition","src":"51311:180:69"},{"body":{"nativeSrc":"51539:143:69","nodeType":"YulBlock","src":"51539:143:69","statements":[{"nativeSrc":"51549:25:69","nodeType":"YulAssignment","src":"51549:25:69","value":{"arguments":[{"name":"x","nativeSrc":"51572:1:69","nodeType":"YulIdentifier","src":"51572:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"51554:17:69","nodeType":"YulIdentifier","src":"51554:17:69"},"nativeSrc":"51554:20:69","nodeType":"YulFunctionCall","src":"51554:20:69"},"variableNames":[{"name":"x","nativeSrc":"51549:1:69","nodeType":"YulIdentifier","src":"51549:1:69"}]},{"nativeSrc":"51583:25:69","nodeType":"YulAssignment","src":"51583:25:69","value":{"arguments":[{"name":"y","nativeSrc":"51606:1:69","nodeType":"YulIdentifier","src":"51606:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"51588:17:69","nodeType":"YulIdentifier","src":"51588:17:69"},"nativeSrc":"51588:20:69","nodeType":"YulFunctionCall","src":"51588:20:69"},"variableNames":[{"name":"y","nativeSrc":"51583:1:69","nodeType":"YulIdentifier","src":"51583:1:69"}]},{"body":{"nativeSrc":"51630:22:69","nodeType":"YulBlock","src":"51630:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x12","nativeSrc":"51632:16:69","nodeType":"YulIdentifier","src":"51632:16:69"},"nativeSrc":"51632:18:69","nodeType":"YulFunctionCall","src":"51632:18:69"},"nativeSrc":"51632:18:69","nodeType":"YulExpressionStatement","src":"51632:18:69"}]},"condition":{"arguments":[{"name":"y","nativeSrc":"51627:1:69","nodeType":"YulIdentifier","src":"51627:1:69"}],"functionName":{"name":"iszero","nativeSrc":"51620:6:69","nodeType":"YulIdentifier","src":"51620:6:69"},"nativeSrc":"51620:9:69","nodeType":"YulFunctionCall","src":"51620:9:69"},"nativeSrc":"51617:35:69","nodeType":"YulIf","src":"51617:35:69"},{"nativeSrc":"51662:14:69","nodeType":"YulAssignment","src":"51662:14:69","value":{"arguments":[{"name":"x","nativeSrc":"51671:1:69","nodeType":"YulIdentifier","src":"51671:1:69"},{"name":"y","nativeSrc":"51674:1:69","nodeType":"YulIdentifier","src":"51674:1:69"}],"functionName":{"name":"div","nativeSrc":"51667:3:69","nodeType":"YulIdentifier","src":"51667:3:69"},"nativeSrc":"51667:9:69","nodeType":"YulFunctionCall","src":"51667:9:69"},"variableNames":[{"name":"r","nativeSrc":"51662:1:69","nodeType":"YulIdentifier","src":"51662:1:69"}]}]},"name":"checked_div_t_uint256","nativeSrc":"51497:185:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"51528:1:69","nodeType":"YulTypedName","src":"51528:1:69","type":""},{"name":"y","nativeSrc":"51531:1:69","nodeType":"YulTypedName","src":"51531:1:69","type":""}],"returnVariables":[{"name":"r","nativeSrc":"51537:1:69","nodeType":"YulTypedName","src":"51537:1:69","type":""}],"src":"51497:185:69"},{"body":{"nativeSrc":"51814:206:69","nodeType":"YulBlock","src":"51814:206:69","statements":[{"nativeSrc":"51824:26:69","nodeType":"YulAssignment","src":"51824:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"51836:9:69","nodeType":"YulIdentifier","src":"51836:9:69"},{"kind":"number","nativeSrc":"51847:2:69","nodeType":"YulLiteral","src":"51847:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"51832:3:69","nodeType":"YulIdentifier","src":"51832:3:69"},"nativeSrc":"51832:18:69","nodeType":"YulFunctionCall","src":"51832:18:69"},"variableNames":[{"name":"tail","nativeSrc":"51824:4:69","nodeType":"YulIdentifier","src":"51824:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"51904:6:69","nodeType":"YulIdentifier","src":"51904:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"51917:9:69","nodeType":"YulIdentifier","src":"51917:9:69"},{"kind":"number","nativeSrc":"51928:1:69","nodeType":"YulLiteral","src":"51928:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"51913:3:69","nodeType":"YulIdentifier","src":"51913:3:69"},"nativeSrc":"51913:17:69","nodeType":"YulFunctionCall","src":"51913:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"51860:43:69","nodeType":"YulIdentifier","src":"51860:43:69"},"nativeSrc":"51860:71:69","nodeType":"YulFunctionCall","src":"51860:71:69"},"nativeSrc":"51860:71:69","nodeType":"YulExpressionStatement","src":"51860:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"51985:6:69","nodeType":"YulIdentifier","src":"51985:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"51998:9:69","nodeType":"YulIdentifier","src":"51998:9:69"},{"kind":"number","nativeSrc":"52009:2:69","nodeType":"YulLiteral","src":"52009:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"51994:3:69","nodeType":"YulIdentifier","src":"51994:3:69"},"nativeSrc":"51994:18:69","nodeType":"YulFunctionCall","src":"51994:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"51941:43:69","nodeType":"YulIdentifier","src":"51941:43:69"},"nativeSrc":"51941:72:69","nodeType":"YulFunctionCall","src":"51941:72:69"},"nativeSrc":"51941:72:69","nodeType":"YulExpressionStatement","src":"51941:72:69"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nativeSrc":"51688:332:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"51778:9:69","nodeType":"YulTypedName","src":"51778:9:69","type":""},{"name":"value1","nativeSrc":"51790:6:69","nodeType":"YulTypedName","src":"51790:6:69","type":""},{"name":"value0","nativeSrc":"51798:6:69","nodeType":"YulTypedName","src":"51798:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"51809:4:69","nodeType":"YulTypedName","src":"51809:4:69","type":""}],"src":"51688:332:69"},{"body":{"nativeSrc":"52132:123:69","nodeType":"YulBlock","src":"52132:123:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"52154:6:69","nodeType":"YulIdentifier","src":"52154:6:69"},{"kind":"number","nativeSrc":"52162:1:69","nodeType":"YulLiteral","src":"52162:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"52150:3:69","nodeType":"YulIdentifier","src":"52150:3:69"},"nativeSrc":"52150:14:69","nodeType":"YulFunctionCall","src":"52150:14:69"},{"hexValue":"5361666545524332303a204552433230206f7065726174696f6e20646964206e","kind":"string","nativeSrc":"52166:34:69","nodeType":"YulLiteral","src":"52166:34:69","type":"","value":"SafeERC20: ERC20 operation did n"}],"functionName":{"name":"mstore","nativeSrc":"52143:6:69","nodeType":"YulIdentifier","src":"52143:6:69"},"nativeSrc":"52143:58:69","nodeType":"YulFunctionCall","src":"52143:58:69"},"nativeSrc":"52143:58:69","nodeType":"YulExpressionStatement","src":"52143:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"52222:6:69","nodeType":"YulIdentifier","src":"52222:6:69"},{"kind":"number","nativeSrc":"52230:2:69","nodeType":"YulLiteral","src":"52230:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"52218:3:69","nodeType":"YulIdentifier","src":"52218:3:69"},"nativeSrc":"52218:15:69","nodeType":"YulFunctionCall","src":"52218:15:69"},{"hexValue":"6f742073756363656564","kind":"string","nativeSrc":"52235:12:69","nodeType":"YulLiteral","src":"52235:12:69","type":"","value":"ot succeed"}],"functionName":{"name":"mstore","nativeSrc":"52211:6:69","nodeType":"YulIdentifier","src":"52211:6:69"},"nativeSrc":"52211:37:69","nodeType":"YulFunctionCall","src":"52211:37:69"},"nativeSrc":"52211:37:69","nodeType":"YulExpressionStatement","src":"52211:37:69"}]},"name":"store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd","nativeSrc":"52026:229:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"52124:6:69","nodeType":"YulTypedName","src":"52124:6:69","type":""}],"src":"52026:229:69"},{"body":{"nativeSrc":"52407:220:69","nodeType":"YulBlock","src":"52407:220:69","statements":[{"nativeSrc":"52417:74:69","nodeType":"YulAssignment","src":"52417:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"52483:3:69","nodeType":"YulIdentifier","src":"52483:3:69"},{"kind":"number","nativeSrc":"52488:2:69","nodeType":"YulLiteral","src":"52488:2:69","type":"","value":"42"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"52424:58:69","nodeType":"YulIdentifier","src":"52424:58:69"},"nativeSrc":"52424:67:69","nodeType":"YulFunctionCall","src":"52424:67:69"},"variableNames":[{"name":"pos","nativeSrc":"52417:3:69","nodeType":"YulIdentifier","src":"52417:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"52589:3:69","nodeType":"YulIdentifier","src":"52589:3:69"}],"functionName":{"name":"store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd","nativeSrc":"52500:88:69","nodeType":"YulIdentifier","src":"52500:88:69"},"nativeSrc":"52500:93:69","nodeType":"YulFunctionCall","src":"52500:93:69"},"nativeSrc":"52500:93:69","nodeType":"YulExpressionStatement","src":"52500:93:69"},{"nativeSrc":"52602:19:69","nodeType":"YulAssignment","src":"52602:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"52613:3:69","nodeType":"YulIdentifier","src":"52613:3:69"},{"kind":"number","nativeSrc":"52618:2:69","nodeType":"YulLiteral","src":"52618:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"52609:3:69","nodeType":"YulIdentifier","src":"52609:3:69"},"nativeSrc":"52609:12:69","nodeType":"YulFunctionCall","src":"52609:12:69"},"variableNames":[{"name":"end","nativeSrc":"52602:3:69","nodeType":"YulIdentifier","src":"52602:3:69"}]}]},"name":"abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack","nativeSrc":"52261:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"52395:3:69","nodeType":"YulTypedName","src":"52395:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"52403:3:69","nodeType":"YulTypedName","src":"52403:3:69","type":""}],"src":"52261:366:69"},{"body":{"nativeSrc":"52804:248:69","nodeType":"YulBlock","src":"52804:248:69","statements":[{"nativeSrc":"52814:26:69","nodeType":"YulAssignment","src":"52814:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"52826:9:69","nodeType":"YulIdentifier","src":"52826:9:69"},{"kind":"number","nativeSrc":"52837:2:69","nodeType":"YulLiteral","src":"52837:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"52822:3:69","nodeType":"YulIdentifier","src":"52822:3:69"},"nativeSrc":"52822:18:69","nodeType":"YulFunctionCall","src":"52822:18:69"},"variableNames":[{"name":"tail","nativeSrc":"52814:4:69","nodeType":"YulIdentifier","src":"52814:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"52861:9:69","nodeType":"YulIdentifier","src":"52861:9:69"},{"kind":"number","nativeSrc":"52872:1:69","nodeType":"YulLiteral","src":"52872:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"52857:3:69","nodeType":"YulIdentifier","src":"52857:3:69"},"nativeSrc":"52857:17:69","nodeType":"YulFunctionCall","src":"52857:17:69"},{"arguments":[{"name":"tail","nativeSrc":"52880:4:69","nodeType":"YulIdentifier","src":"52880:4:69"},{"name":"headStart","nativeSrc":"52886:9:69","nodeType":"YulIdentifier","src":"52886:9:69"}],"functionName":{"name":"sub","nativeSrc":"52876:3:69","nodeType":"YulIdentifier","src":"52876:3:69"},"nativeSrc":"52876:20:69","nodeType":"YulFunctionCall","src":"52876:20:69"}],"functionName":{"name":"mstore","nativeSrc":"52850:6:69","nodeType":"YulIdentifier","src":"52850:6:69"},"nativeSrc":"52850:47:69","nodeType":"YulFunctionCall","src":"52850:47:69"},"nativeSrc":"52850:47:69","nodeType":"YulExpressionStatement","src":"52850:47:69"},{"nativeSrc":"52906:139:69","nodeType":"YulAssignment","src":"52906:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"53040:4:69","nodeType":"YulIdentifier","src":"53040:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack","nativeSrc":"52914:124:69","nodeType":"YulIdentifier","src":"52914:124:69"},"nativeSrc":"52914:131:69","nodeType":"YulFunctionCall","src":"52914:131:69"},"variableNames":[{"name":"tail","nativeSrc":"52906:4:69","nodeType":"YulIdentifier","src":"52906:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"52633:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"52784:9:69","nodeType":"YulTypedName","src":"52784:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"52799:4:69","nodeType":"YulTypedName","src":"52799:4:69","type":""}],"src":"52633:419:69"},{"body":{"nativeSrc":"53164:119:69","nodeType":"YulBlock","src":"53164:119:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"53186:6:69","nodeType":"YulIdentifier","src":"53186:6:69"},{"kind":"number","nativeSrc":"53194:1:69","nodeType":"YulLiteral","src":"53194:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"53182:3:69","nodeType":"YulIdentifier","src":"53182:3:69"},"nativeSrc":"53182:14:69","nodeType":"YulFunctionCall","src":"53182:14:69"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f","kind":"string","nativeSrc":"53198:34:69","nodeType":"YulLiteral","src":"53198:34:69","type":"","value":"Address: insufficient balance fo"}],"functionName":{"name":"mstore","nativeSrc":"53175:6:69","nodeType":"YulIdentifier","src":"53175:6:69"},"nativeSrc":"53175:58:69","nodeType":"YulFunctionCall","src":"53175:58:69"},"nativeSrc":"53175:58:69","nodeType":"YulExpressionStatement","src":"53175:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"53254:6:69","nodeType":"YulIdentifier","src":"53254:6:69"},{"kind":"number","nativeSrc":"53262:2:69","nodeType":"YulLiteral","src":"53262:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"53250:3:69","nodeType":"YulIdentifier","src":"53250:3:69"},"nativeSrc":"53250:15:69","nodeType":"YulFunctionCall","src":"53250:15:69"},{"hexValue":"722063616c6c","kind":"string","nativeSrc":"53267:8:69","nodeType":"YulLiteral","src":"53267:8:69","type":"","value":"r call"}],"functionName":{"name":"mstore","nativeSrc":"53243:6:69","nodeType":"YulIdentifier","src":"53243:6:69"},"nativeSrc":"53243:33:69","nodeType":"YulFunctionCall","src":"53243:33:69"},"nativeSrc":"53243:33:69","nodeType":"YulExpressionStatement","src":"53243:33:69"}]},"name":"store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","nativeSrc":"53058:225:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"53156:6:69","nodeType":"YulTypedName","src":"53156:6:69","type":""}],"src":"53058:225:69"},{"body":{"nativeSrc":"53435:220:69","nodeType":"YulBlock","src":"53435:220:69","statements":[{"nativeSrc":"53445:74:69","nodeType":"YulAssignment","src":"53445:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"53511:3:69","nodeType":"YulIdentifier","src":"53511:3:69"},{"kind":"number","nativeSrc":"53516:2:69","nodeType":"YulLiteral","src":"53516:2:69","type":"","value":"38"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"53452:58:69","nodeType":"YulIdentifier","src":"53452:58:69"},"nativeSrc":"53452:67:69","nodeType":"YulFunctionCall","src":"53452:67:69"},"variableNames":[{"name":"pos","nativeSrc":"53445:3:69","nodeType":"YulIdentifier","src":"53445:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"53617:3:69","nodeType":"YulIdentifier","src":"53617:3:69"}],"functionName":{"name":"store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","nativeSrc":"53528:88:69","nodeType":"YulIdentifier","src":"53528:88:69"},"nativeSrc":"53528:93:69","nodeType":"YulFunctionCall","src":"53528:93:69"},"nativeSrc":"53528:93:69","nodeType":"YulExpressionStatement","src":"53528:93:69"},{"nativeSrc":"53630:19:69","nodeType":"YulAssignment","src":"53630:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"53641:3:69","nodeType":"YulIdentifier","src":"53641:3:69"},{"kind":"number","nativeSrc":"53646:2:69","nodeType":"YulLiteral","src":"53646:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"53637:3:69","nodeType":"YulIdentifier","src":"53637:3:69"},"nativeSrc":"53637:12:69","nodeType":"YulFunctionCall","src":"53637:12:69"},"variableNames":[{"name":"end","nativeSrc":"53630:3:69","nodeType":"YulIdentifier","src":"53630:3:69"}]}]},"name":"abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack","nativeSrc":"53289:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"53423:3:69","nodeType":"YulTypedName","src":"53423:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"53431:3:69","nodeType":"YulTypedName","src":"53431:3:69","type":""}],"src":"53289:366:69"},{"body":{"nativeSrc":"53832:248:69","nodeType":"YulBlock","src":"53832:248:69","statements":[{"nativeSrc":"53842:26:69","nodeType":"YulAssignment","src":"53842:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"53854:9:69","nodeType":"YulIdentifier","src":"53854:9:69"},{"kind":"number","nativeSrc":"53865:2:69","nodeType":"YulLiteral","src":"53865:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"53850:3:69","nodeType":"YulIdentifier","src":"53850:3:69"},"nativeSrc":"53850:18:69","nodeType":"YulFunctionCall","src":"53850:18:69"},"variableNames":[{"name":"tail","nativeSrc":"53842:4:69","nodeType":"YulIdentifier","src":"53842:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"53889:9:69","nodeType":"YulIdentifier","src":"53889:9:69"},{"kind":"number","nativeSrc":"53900:1:69","nodeType":"YulLiteral","src":"53900:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"53885:3:69","nodeType":"YulIdentifier","src":"53885:3:69"},"nativeSrc":"53885:17:69","nodeType":"YulFunctionCall","src":"53885:17:69"},{"arguments":[{"name":"tail","nativeSrc":"53908:4:69","nodeType":"YulIdentifier","src":"53908:4:69"},{"name":"headStart","nativeSrc":"53914:9:69","nodeType":"YulIdentifier","src":"53914:9:69"}],"functionName":{"name":"sub","nativeSrc":"53904:3:69","nodeType":"YulIdentifier","src":"53904:3:69"},"nativeSrc":"53904:20:69","nodeType":"YulFunctionCall","src":"53904:20:69"}],"functionName":{"name":"mstore","nativeSrc":"53878:6:69","nodeType":"YulIdentifier","src":"53878:6:69"},"nativeSrc":"53878:47:69","nodeType":"YulFunctionCall","src":"53878:47:69"},"nativeSrc":"53878:47:69","nodeType":"YulExpressionStatement","src":"53878:47:69"},{"nativeSrc":"53934:139:69","nodeType":"YulAssignment","src":"53934:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"54068:4:69","nodeType":"YulIdentifier","src":"54068:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack","nativeSrc":"53942:124:69","nodeType":"YulIdentifier","src":"53942:124:69"},"nativeSrc":"53942:131:69","nodeType":"YulFunctionCall","src":"53942:131:69"},"variableNames":[{"name":"tail","nativeSrc":"53934:4:69","nodeType":"YulIdentifier","src":"53934:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"53661:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"53812:9:69","nodeType":"YulTypedName","src":"53812:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"53827:4:69","nodeType":"YulTypedName","src":"53827:4:69","type":""}],"src":"53661:419:69"},{"body":{"nativeSrc":"54144:40:69","nodeType":"YulBlock","src":"54144:40:69","statements":[{"nativeSrc":"54155:22:69","nodeType":"YulAssignment","src":"54155:22:69","value":{"arguments":[{"name":"value","nativeSrc":"54171:5:69","nodeType":"YulIdentifier","src":"54171:5:69"}],"functionName":{"name":"mload","nativeSrc":"54165:5:69","nodeType":"YulIdentifier","src":"54165:5:69"},"nativeSrc":"54165:12:69","nodeType":"YulFunctionCall","src":"54165:12:69"},"variableNames":[{"name":"length","nativeSrc":"54155:6:69","nodeType":"YulIdentifier","src":"54155:6:69"}]}]},"name":"array_length_t_bytes_memory_ptr","nativeSrc":"54086:98:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"54127:5:69","nodeType":"YulTypedName","src":"54127:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"54137:6:69","nodeType":"YulTypedName","src":"54137:6:69","type":""}],"src":"54086:98:69"},{"body":{"nativeSrc":"54303:34:69","nodeType":"YulBlock","src":"54303:34:69","statements":[{"nativeSrc":"54313:18:69","nodeType":"YulAssignment","src":"54313:18:69","value":{"name":"pos","nativeSrc":"54328:3:69","nodeType":"YulIdentifier","src":"54328:3:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"54313:11:69","nodeType":"YulIdentifier","src":"54313:11:69"}]}]},"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"54190:147:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"54275:3:69","nodeType":"YulTypedName","src":"54275:3:69","type":""},{"name":"length","nativeSrc":"54280:6:69","nodeType":"YulTypedName","src":"54280:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"54291:11:69","nodeType":"YulTypedName","src":"54291:11:69","type":""}],"src":"54190:147:69"},{"body":{"nativeSrc":"54451:278:69","nodeType":"YulBlock","src":"54451:278:69","statements":[{"nativeSrc":"54461:52:69","nodeType":"YulVariableDeclaration","src":"54461:52:69","value":{"arguments":[{"name":"value","nativeSrc":"54507:5:69","nodeType":"YulIdentifier","src":"54507:5:69"}],"functionName":{"name":"array_length_t_bytes_memory_ptr","nativeSrc":"54475:31:69","nodeType":"YulIdentifier","src":"54475:31:69"},"nativeSrc":"54475:38:69","nodeType":"YulFunctionCall","src":"54475:38:69"},"variables":[{"name":"length","nativeSrc":"54465:6:69","nodeType":"YulTypedName","src":"54465:6:69","type":""}]},{"nativeSrc":"54522:95:69","nodeType":"YulAssignment","src":"54522:95:69","value":{"arguments":[{"name":"pos","nativeSrc":"54605:3:69","nodeType":"YulIdentifier","src":"54605:3:69"},{"name":"length","nativeSrc":"54610:6:69","nodeType":"YulIdentifier","src":"54610:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"54529:75:69","nodeType":"YulIdentifier","src":"54529:75:69"},"nativeSrc":"54529:88:69","nodeType":"YulFunctionCall","src":"54529:88:69"},"variableNames":[{"name":"pos","nativeSrc":"54522:3:69","nodeType":"YulIdentifier","src":"54522:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"54665:5:69","nodeType":"YulIdentifier","src":"54665:5:69"},{"kind":"number","nativeSrc":"54672:4:69","nodeType":"YulLiteral","src":"54672:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"54661:3:69","nodeType":"YulIdentifier","src":"54661:3:69"},"nativeSrc":"54661:16:69","nodeType":"YulFunctionCall","src":"54661:16:69"},{"name":"pos","nativeSrc":"54679:3:69","nodeType":"YulIdentifier","src":"54679:3:69"},{"name":"length","nativeSrc":"54684:6:69","nodeType":"YulIdentifier","src":"54684:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"54626:34:69","nodeType":"YulIdentifier","src":"54626:34:69"},"nativeSrc":"54626:65:69","nodeType":"YulFunctionCall","src":"54626:65:69"},"nativeSrc":"54626:65:69","nodeType":"YulExpressionStatement","src":"54626:65:69"},{"nativeSrc":"54700:23:69","nodeType":"YulAssignment","src":"54700:23:69","value":{"arguments":[{"name":"pos","nativeSrc":"54711:3:69","nodeType":"YulIdentifier","src":"54711:3:69"},{"name":"length","nativeSrc":"54716:6:69","nodeType":"YulIdentifier","src":"54716:6:69"}],"functionName":{"name":"add","nativeSrc":"54707:3:69","nodeType":"YulIdentifier","src":"54707:3:69"},"nativeSrc":"54707:16:69","nodeType":"YulFunctionCall","src":"54707:16:69"},"variableNames":[{"name":"end","nativeSrc":"54700:3:69","nodeType":"YulIdentifier","src":"54700:3:69"}]}]},"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"54343:386:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"54432:5:69","nodeType":"YulTypedName","src":"54432:5:69","type":""},{"name":"pos","nativeSrc":"54439:3:69","nodeType":"YulTypedName","src":"54439:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"54447:3:69","nodeType":"YulTypedName","src":"54447:3:69","type":""}],"src":"54343:386:69"},{"body":{"nativeSrc":"54869:137:69","nodeType":"YulBlock","src":"54869:137:69","statements":[{"nativeSrc":"54880:100:69","nodeType":"YulAssignment","src":"54880:100:69","value":{"arguments":[{"name":"value0","nativeSrc":"54967:6:69","nodeType":"YulIdentifier","src":"54967:6:69"},{"name":"pos","nativeSrc":"54976:3:69","nodeType":"YulIdentifier","src":"54976:3:69"}],"functionName":{"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"54887:79:69","nodeType":"YulIdentifier","src":"54887:79:69"},"nativeSrc":"54887:93:69","nodeType":"YulFunctionCall","src":"54887:93:69"},"variableNames":[{"name":"pos","nativeSrc":"54880:3:69","nodeType":"YulIdentifier","src":"54880:3:69"}]},{"nativeSrc":"54990:10:69","nodeType":"YulAssignment","src":"54990:10:69","value":{"name":"pos","nativeSrc":"54997:3:69","nodeType":"YulIdentifier","src":"54997:3:69"},"variableNames":[{"name":"end","nativeSrc":"54990:3:69","nodeType":"YulIdentifier","src":"54990:3:69"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nativeSrc":"54735:271:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"54848:3:69","nodeType":"YulTypedName","src":"54848:3:69","type":""},{"name":"value0","nativeSrc":"54854:6:69","nodeType":"YulTypedName","src":"54854:6:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"54865:3:69","nodeType":"YulTypedName","src":"54865:3:69","type":""}],"src":"54735:271:69"},{"body":{"nativeSrc":"55118:73:69","nodeType":"YulBlock","src":"55118:73:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"55140:6:69","nodeType":"YulIdentifier","src":"55140:6:69"},{"kind":"number","nativeSrc":"55148:1:69","nodeType":"YulLiteral","src":"55148:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"55136:3:69","nodeType":"YulIdentifier","src":"55136:3:69"},"nativeSrc":"55136:14:69","nodeType":"YulFunctionCall","src":"55136:14:69"},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","kind":"string","nativeSrc":"55152:31:69","nodeType":"YulLiteral","src":"55152:31:69","type":"","value":"Address: call to non-contract"}],"functionName":{"name":"mstore","nativeSrc":"55129:6:69","nodeType":"YulIdentifier","src":"55129:6:69"},"nativeSrc":"55129:55:69","nodeType":"YulFunctionCall","src":"55129:55:69"},"nativeSrc":"55129:55:69","nodeType":"YulExpressionStatement","src":"55129:55:69"}]},"name":"store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","nativeSrc":"55012:179:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"55110:6:69","nodeType":"YulTypedName","src":"55110:6:69","type":""}],"src":"55012:179:69"},{"body":{"nativeSrc":"55343:220:69","nodeType":"YulBlock","src":"55343:220:69","statements":[{"nativeSrc":"55353:74:69","nodeType":"YulAssignment","src":"55353:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"55419:3:69","nodeType":"YulIdentifier","src":"55419:3:69"},{"kind":"number","nativeSrc":"55424:2:69","nodeType":"YulLiteral","src":"55424:2:69","type":"","value":"29"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"55360:58:69","nodeType":"YulIdentifier","src":"55360:58:69"},"nativeSrc":"55360:67:69","nodeType":"YulFunctionCall","src":"55360:67:69"},"variableNames":[{"name":"pos","nativeSrc":"55353:3:69","nodeType":"YulIdentifier","src":"55353:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"55525:3:69","nodeType":"YulIdentifier","src":"55525:3:69"}],"functionName":{"name":"store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","nativeSrc":"55436:88:69","nodeType":"YulIdentifier","src":"55436:88:69"},"nativeSrc":"55436:93:69","nodeType":"YulFunctionCall","src":"55436:93:69"},"nativeSrc":"55436:93:69","nodeType":"YulExpressionStatement","src":"55436:93:69"},{"nativeSrc":"55538:19:69","nodeType":"YulAssignment","src":"55538:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"55549:3:69","nodeType":"YulIdentifier","src":"55549:3:69"},{"kind":"number","nativeSrc":"55554:2:69","nodeType":"YulLiteral","src":"55554:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"55545:3:69","nodeType":"YulIdentifier","src":"55545:3:69"},"nativeSrc":"55545:12:69","nodeType":"YulFunctionCall","src":"55545:12:69"},"variableNames":[{"name":"end","nativeSrc":"55538:3:69","nodeType":"YulIdentifier","src":"55538:3:69"}]}]},"name":"abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack","nativeSrc":"55197:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"55331:3:69","nodeType":"YulTypedName","src":"55331:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"55339:3:69","nodeType":"YulTypedName","src":"55339:3:69","type":""}],"src":"55197:366:69"},{"body":{"nativeSrc":"55740:248:69","nodeType":"YulBlock","src":"55740:248:69","statements":[{"nativeSrc":"55750:26:69","nodeType":"YulAssignment","src":"55750:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"55762:9:69","nodeType":"YulIdentifier","src":"55762:9:69"},{"kind":"number","nativeSrc":"55773:2:69","nodeType":"YulLiteral","src":"55773:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"55758:3:69","nodeType":"YulIdentifier","src":"55758:3:69"},"nativeSrc":"55758:18:69","nodeType":"YulFunctionCall","src":"55758:18:69"},"variableNames":[{"name":"tail","nativeSrc":"55750:4:69","nodeType":"YulIdentifier","src":"55750:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"55797:9:69","nodeType":"YulIdentifier","src":"55797:9:69"},{"kind":"number","nativeSrc":"55808:1:69","nodeType":"YulLiteral","src":"55808:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"55793:3:69","nodeType":"YulIdentifier","src":"55793:3:69"},"nativeSrc":"55793:17:69","nodeType":"YulFunctionCall","src":"55793:17:69"},{"arguments":[{"name":"tail","nativeSrc":"55816:4:69","nodeType":"YulIdentifier","src":"55816:4:69"},{"name":"headStart","nativeSrc":"55822:9:69","nodeType":"YulIdentifier","src":"55822:9:69"}],"functionName":{"name":"sub","nativeSrc":"55812:3:69","nodeType":"YulIdentifier","src":"55812:3:69"},"nativeSrc":"55812:20:69","nodeType":"YulFunctionCall","src":"55812:20:69"}],"functionName":{"name":"mstore","nativeSrc":"55786:6:69","nodeType":"YulIdentifier","src":"55786:6:69"},"nativeSrc":"55786:47:69","nodeType":"YulFunctionCall","src":"55786:47:69"},"nativeSrc":"55786:47:69","nodeType":"YulExpressionStatement","src":"55786:47:69"},{"nativeSrc":"55842:139:69","nodeType":"YulAssignment","src":"55842:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"55976:4:69","nodeType":"YulIdentifier","src":"55976:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack","nativeSrc":"55850:124:69","nodeType":"YulIdentifier","src":"55850:124:69"},"nativeSrc":"55850:131:69","nodeType":"YulFunctionCall","src":"55850:131:69"},"variableNames":[{"name":"tail","nativeSrc":"55842:4:69","nodeType":"YulIdentifier","src":"55842:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"55569:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"55720:9:69","nodeType":"YulTypedName","src":"55720:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"55735:4:69","nodeType":"YulTypedName","src":"55735:4:69","type":""}],"src":"55569:419:69"}]},"contents":"{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n        revert(0, 0)\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    function panic_error_0x41() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n\n    function finalize_allocation(memPtr, size) {\n        let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n        // protect against overflow\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n\n    function allocate_memory(size) -> memPtr {\n        memPtr := allocate_unbounded()\n        finalize_allocation(memPtr, size)\n    }\n\n    function array_allocation_size_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(length) -> size {\n        // Make sure we can allocate memory without overflow\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n        size := mul(length, 0x20)\n\n        // add length slot\n        size := add(size, 0x20)\n\n    }\n\n    function revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_contract$_VToken_$15506(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function validator_revert_t_contract$_VToken_$15506(value) {\n        if iszero(eq(value, cleanup_t_contract$_VToken_$15506(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_VToken_$15506(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_contract$_VToken_$15506(value)\n    }\n\n    // contract VToken[]\n    function abi_decode_available_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(offset, length, end) -> array {\n        array := allocate_memory(array_allocation_size_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(length))\n        let dst := array\n\n        mstore(array, length)\n        dst := add(array, 0x20)\n\n        let srcEnd := add(offset, mul(length, 0x20))\n        if gt(srcEnd, end) {\n            revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n        }\n        for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n        {\n\n            let elementPos := src\n\n            mstore(dst, abi_decode_t_contract$_VToken_$15506(elementPos, end))\n            dst := add(dst, 0x20)\n        }\n    }\n\n    // contract VToken[]\n    function abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(offset, end) -> array {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        let length := calldataload(offset)\n        array := abi_decode_available_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(add(offset, 0x20), length, end)\n    }\n\n    function abi_decode_tuple_t_addresst_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := calldataload(add(headStart, 32))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value1 := abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_uint224(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function abi_encode_t_uint224_to_t_uint224_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint224(value))\n    }\n\n    function abi_encode_tuple_t_uint224__to_t_uint224__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint224_to_t_uint224_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint256(value))\n    }\n\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f() {\n        revert(0, 0)\n    }\n\n    function revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421() {\n        revert(0, 0)\n    }\n\n    function validator_revert_t_uint256(value) {\n        if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_uint256(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    // struct ExponentialNoError.Exp\n    function abi_decode_t_struct$_Exp_$9645_memory_ptr(headStart, end) -> value {\n        if slt(sub(end, headStart), 0x20) { revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f() }\n        value := allocate_memory(0x20)\n\n        {\n            // mantissa\n\n            let offset := 0\n\n            mstore(add(value, 0x00), abi_decode_t_uint256(add(headStart, offset), end))\n\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_struct$_Exp_$9645_memory_ptr(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_struct$_Exp_$9645_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_uint32(value) -> cleaned {\n        cleaned := and(value, 0xffffffff)\n    }\n\n    function abi_encode_t_uint32_to_t_uint32_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint32(value))\n    }\n\n    function abi_encode_tuple_t_uint224_t_uint32_t_uint32__to_t_uint224_t_uint32_t_uint32__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_uint224_to_t_uint224_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint32_to_t_uint32_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint32_to_t_uint32_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490() {\n        revert(0, 0)\n    }\n\n    // contract VToken[]\n    function abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr(offset, end) -> arrayPos, length {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490() }\n        arrayPos := add(offset, 0x20)\n        if gt(add(arrayPos, mul(length, 0x20)), end) { revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() }\n    }\n\n    // uint256[]\n    function abi_decode_t_array$_t_uint256_$dyn_calldata_ptr(offset, end) -> arrayPos, length {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490() }\n        arrayPos := add(offset, 0x20)\n        if gt(add(arrayPos, mul(length, 0x20)), end) { revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() }\n    }\n\n    function abi_decode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5 {\n        if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := calldataload(add(headStart, 0))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value0, value1 := abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := calldataload(add(headStart, 32))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value2, value3 := abi_decode_t_array$_t_uint256_$dyn_calldata_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := calldataload(add(headStart, 64))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value4, value5 := abi_decode_t_array$_t_uint256_$dyn_calldata_ptr(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_struct$_Exp_$9645_memory_ptr(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_struct$_Exp_$9645_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_tuple_t_uint224_t_uint256_t_uint256__to_t_uint224_t_uint256_t_uint256__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_uint224_to_t_uint224_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    // uint32[]\n    function abi_decode_t_array$_t_uint32_$dyn_calldata_ptr(offset, end) -> arrayPos, length {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490() }\n        arrayPos := add(offset, 0x20)\n        if gt(add(arrayPos, mul(length, 0x20)), end) { revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() }\n    }\n\n    function abi_decode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptrt_array$_t_uint32_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5 {\n        if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := calldataload(add(headStart, 0))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value0, value1 := abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_calldata_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := calldataload(add(headStart, 32))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value2, value3 := abi_decode_t_array$_t_uint32_$dyn_calldata_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := calldataload(add(headStart, 64))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value4, value5 := abi_decode_t_array$_t_uint32_$dyn_calldata_ptr(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function array_allocation_size_t_array$_t_uint256_$dyn_memory_ptr(length) -> size {\n        // Make sure we can allocate memory without overflow\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n        size := mul(length, 0x20)\n\n        // add length slot\n        size := add(size, 0x20)\n\n    }\n\n    // uint256[]\n    function abi_decode_available_length_t_array$_t_uint256_$dyn_memory_ptr(offset, length, end) -> array {\n        array := allocate_memory(array_allocation_size_t_array$_t_uint256_$dyn_memory_ptr(length))\n        let dst := array\n\n        mstore(array, length)\n        dst := add(array, 0x20)\n\n        let srcEnd := add(offset, mul(length, 0x20))\n        if gt(srcEnd, end) {\n            revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n        }\n        for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n        {\n\n            let elementPos := src\n\n            mstore(dst, abi_decode_t_uint256(elementPos, end))\n            dst := add(dst, 0x20)\n        }\n    }\n\n    // uint256[]\n    function abi_decode_t_array$_t_uint256_$dyn_memory_ptr(offset, end) -> array {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        let length := calldataload(offset)\n        array := abi_decode_available_length_t_array$_t_uint256_$dyn_memory_ptr(add(offset, 0x20), length, end)\n    }\n\n    function abi_decode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptr(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := calldataload(add(headStart, 0))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value0 := abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := calldataload(add(headStart, 32))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value1 := abi_decode_t_array$_t_uint256_$dyn_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := calldataload(add(headStart, 64))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value2 := abi_decode_t_array$_t_uint256_$dyn_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function identity(value) -> ret {\n        ret := value\n    }\n\n    function convert_t_uint160_to_t_uint160(value) -> converted {\n        converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n    }\n\n    function convert_t_uint160_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_uint160(value)\n    }\n\n    function convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_IAccessControlManagerV8_$5080__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function cleanup_t_contract$_Comptroller_$9130(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function validator_revert_t_contract$_Comptroller_$9130(value) {\n        if iszero(eq(value, cleanup_t_contract$_Comptroller_$9130(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_Comptroller_$9130(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_contract$_Comptroller_$9130(value)\n    }\n\n    function cleanup_t_contract$_IERC20Upgradeable_$1352(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function validator_revert_t_contract$_IERC20Upgradeable_$1352(value) {\n        if iszero(eq(value, cleanup_t_contract$_IERC20Upgradeable_$1352(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_IERC20Upgradeable_$1352(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_contract$_IERC20Upgradeable_$1352(value)\n    }\n\n    function abi_decode_tuple_t_contract$_Comptroller_$9130t_contract$_IERC20Upgradeable_$1352t_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3 {\n        if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_Comptroller_$9130(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_contract$_IERC20Upgradeable_$1352(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 96\n\n            value3 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_bool(value) -> cleaned {\n        cleaned := iszero(iszero(value))\n    }\n\n    function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n        mstore(pos, cleanup_t_bool(value))\n    }\n\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_bool_to_t_bool_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function convert_t_contract$_IERC20Upgradeable_$1352_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_IERC20Upgradeable_$1352_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_IERC20Upgradeable_$1352_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_IERC20Upgradeable_$1352__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_IERC20Upgradeable_$1352_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function panic_error_0x32() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n\n    function convert_t_contract$_VToken_$15506_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_VToken_$15506_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_VToken_$15506__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function validator_revert_t_bool(value) {\n        if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_bool_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_bool(value)\n    }\n\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_bool_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function store_literal_in_memory_8d6cda2e8214bcdab6eb9bde4767020b52a0b58abe9235e475535a272dbeb6e1(memPtr) {\n\n        mstore(add(memPtr, 0), \"market must be listed\")\n\n    }\n\n    function abi_encode_t_stringliteral_8d6cda2e8214bcdab6eb9bde4767020b52a0b58abe9235e475535a272dbeb6e1_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 21)\n        store_literal_in_memory_8d6cda2e8214bcdab6eb9bde4767020b52a0b58abe9235e475535a272dbeb6e1(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_8d6cda2e8214bcdab6eb9bde4767020b52a0b58abe9235e475535a272dbeb6e1__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_8d6cda2e8214bcdab6eb9bde4767020b52a0b58abe9235e475535a272dbeb6e1_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function store_literal_in_memory_8ae9d8b8cfc154970c71fdcc07f9eca5337f7fb885232e7023c4ffdc94dd950d(memPtr) {\n\n        mstore(add(memPtr, 0), \"Only comptroller can call this f\")\n\n        mstore(add(memPtr, 32), \"unction\")\n\n    }\n\n    function abi_encode_t_stringliteral_8ae9d8b8cfc154970c71fdcc07f9eca5337f7fb885232e7023c4ffdc94dd950d_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 39)\n        store_literal_in_memory_8ae9d8b8cfc154970c71fdcc07f9eca5337f7fb885232e7023c4ffdc94dd950d(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_8ae9d8b8cfc154970c71fdcc07f9eca5337f7fb885232e7023c4ffdc94dd950d__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_8ae9d8b8cfc154970c71fdcc07f9eca5337f7fb885232e7023c4ffdc94dd950d_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_36bf5156a09fb782d0af3560e4601cbf2cedc5155a8996d8781f3cb033938025(memPtr) {\n\n        mstore(add(memPtr, 0), \"Time-based operation only\")\n\n    }\n\n    function abi_encode_t_stringliteral_36bf5156a09fb782d0af3560e4601cbf2cedc5155a8996d8781f3cb033938025_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 25)\n        store_literal_in_memory_36bf5156a09fb782d0af3560e4601cbf2cedc5155a8996d8781f3cb033938025(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_36bf5156a09fb782d0af3560e4601cbf2cedc5155a8996d8781f3cb033938025__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_36bf5156a09fb782d0af3560e4601cbf2cedc5155a8996d8781f3cb033938025_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_6291c33270cb332e2566d661b37996c9d0d6802836fbd96a9a4623cd553212e4(memPtr) {\n\n        mstore(add(memPtr, 0), \"RewardsDistributor::setLastRewar\")\n\n        mstore(add(memPtr, 32), \"dingBlockTimestamps invalid inpu\")\n\n        mstore(add(memPtr, 64), \"t\")\n\n    }\n\n    function abi_encode_t_stringliteral_6291c33270cb332e2566d661b37996c9d0d6802836fbd96a9a4623cd553212e4_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 65)\n        store_literal_in_memory_6291c33270cb332e2566d661b37996c9d0d6802836fbd96a9a4623cd553212e4(pos)\n        end := add(pos, 96)\n    }\n\n    function abi_encode_tuple_t_stringliteral_6291c33270cb332e2566d661b37996c9d0d6802836fbd96a9a4623cd553212e4__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_6291c33270cb332e2566d661b37996c9d0d6802836fbd96a9a4623cd553212e4_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_decode_tuple_t_contract$_VToken_$15506(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_VToken_$15506(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function store_literal_in_memory_432fe5c7c43fef719e573b5581c51228a55aa829b1f722b0153e4e929295ba6a(memPtr) {\n\n        mstore(add(memPtr, 0), \"insufficient rewardToken for gra\")\n\n        mstore(add(memPtr, 32), \"nt\")\n\n    }\n\n    function abi_encode_t_stringliteral_432fe5c7c43fef719e573b5581c51228a55aa829b1f722b0153e4e929295ba6a_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 34)\n        store_literal_in_memory_432fe5c7c43fef719e573b5581c51228a55aa829b1f722b0153e4e929295ba6a(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_432fe5c7c43fef719e573b5581c51228a55aa829b1f722b0153e4e929295ba6a__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_432fe5c7c43fef719e573b5581c51228a55aa829b1f722b0153e4e929295ba6a_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc(memPtr) {\n\n        mstore(add(memPtr, 0), \"Ownable2Step: caller is not the \")\n\n        mstore(add(memPtr, 32), \"new owner\")\n\n    }\n\n    function abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 41)\n        store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_deeaa8c519132eb034c6b2645cd03ab274dcabecd79d8fa0dfda871a74f634f1(memPtr) {\n\n        mstore(add(memPtr, 0), \"Block-based operation only\")\n\n    }\n\n    function abi_encode_t_stringliteral_deeaa8c519132eb034c6b2645cd03ab274dcabecd79d8fa0dfda871a74f634f1_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 26)\n        store_literal_in_memory_deeaa8c519132eb034c6b2645cd03ab274dcabecd79d8fa0dfda871a74f634f1(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_deeaa8c519132eb034c6b2645cd03ab274dcabecd79d8fa0dfda871a74f634f1__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_deeaa8c519132eb034c6b2645cd03ab274dcabecd79d8fa0dfda871a74f634f1_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_5cff66c2aa35848a49d268966a8281c7733b409122a8f3eddbea1b1ec033686c(memPtr) {\n\n        mstore(add(memPtr, 0), \"RewardsDistributor::setLastRewar\")\n\n        mstore(add(memPtr, 32), \"dingBlocks invalid input\")\n\n    }\n\n    function abi_encode_t_stringliteral_5cff66c2aa35848a49d268966a8281c7733b409122a8f3eddbea1b1ec033686c_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 56)\n        store_literal_in_memory_5cff66c2aa35848a49d268966a8281c7733b409122a8f3eddbea1b1ec033686c(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_5cff66c2aa35848a49d268966a8281c7733b409122a8f3eddbea1b1ec033686c__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_5cff66c2aa35848a49d268966a8281c7733b409122a8f3eddbea1b1ec033686c_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function validator_revert_t_uint32(value) {\n        if iszero(eq(value, cleanup_t_uint32(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_uint32(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_uint32(value)\n    }\n\n    function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint32(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function store_literal_in_memory_322b734cdb73148ce798f463ec44e79da28ef00cb71be8ffb3f7e2a5d1d5194f(memPtr) {\n\n        mstore(add(memPtr, 0), \"invalid setRewardTokenSpeeds\")\n\n    }\n\n    function abi_encode_t_stringliteral_322b734cdb73148ce798f463ec44e79da28ef00cb71be8ffb3f7e2a5d1d5194f_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 28)\n        store_literal_in_memory_322b734cdb73148ce798f463ec44e79da28ef00cb71be8ffb3f7e2a5d1d5194f(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_322b734cdb73148ce798f463ec44e79da28ef00cb71be8ffb3f7e2a5d1d5194f__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_322b734cdb73148ce798f463ec44e79da28ef00cb71be8ffb3f7e2a5d1d5194f_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759(memPtr) {\n\n        mstore(add(memPtr, 0), \"Initializable: contract is alrea\")\n\n        mstore(add(memPtr, 32), \"dy initialized\")\n\n    }\n\n    function abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 46)\n        store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function cleanup_t_rational_1_by_1(value) -> cleaned {\n        cleaned := value\n    }\n\n    function cleanup_t_uint8(value) -> cleaned {\n        cleaned := and(value, 0xff)\n    }\n\n    function convert_t_rational_1_by_1_to_t_uint8(value) -> converted {\n        converted := cleanup_t_uint8(identity(cleanup_t_rational_1_by_1(value)))\n    }\n\n    function abi_encode_t_rational_1_by_1_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, convert_t_rational_1_by_1_to_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_rational_1_by_1_to_t_uint8_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_t_contract$_VToken_$15506_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_contract$_VToken_$15506(value)\n    }\n\n    // contract VToken[]\n    function abi_decode_available_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_fromMemory(offset, length, end) -> array {\n        array := allocate_memory(array_allocation_size_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(length))\n        let dst := array\n\n        mstore(array, length)\n        dst := add(array, 0x20)\n\n        let srcEnd := add(offset, mul(length, 0x20))\n        if gt(srcEnd, end) {\n            revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n        }\n        for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n        {\n\n            let elementPos := src\n\n            mstore(dst, abi_decode_t_contract$_VToken_$15506_fromMemory(elementPos, end))\n            dst := add(dst, 0x20)\n        }\n    }\n\n    // contract VToken[]\n    function abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_fromMemory(offset, end) -> array {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        let length := mload(offset)\n        array := abi_decode_available_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_fromMemory(add(offset, 0x20), length, end)\n    }\n\n    function abi_decode_tuple_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := mload(add(headStart, 0))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value0 := abi_decode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function abi_encode_t_uint256_to_t_uint256(value, pos) {\n        mstore(pos, cleanup_t_uint256(value))\n    }\n\n    // struct ExponentialNoError.Exp -> struct ExponentialNoError.Exp\n    function abi_encode_t_struct$_Exp_$9645_memory_ptr_to_t_struct$_Exp_$9645_memory_ptr_fromStack(value, pos)  {\n        let tail := add(pos, 0x20)\n\n        {\n            // mantissa\n\n            let memberValue0 := mload(add(value, 0x00))\n            abi_encode_t_uint256_to_t_uint256(memberValue0, add(pos, 0x00))\n        }\n\n    }\n\n    function abi_encode_tuple_t_struct$_Exp_$9645_memory_ptr__to_t_struct$_Exp_$9645_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_struct$_Exp_$9645_memory_ptr_to_t_struct$_Exp_$9645_memory_ptr_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe(memPtr) {\n\n        mstore(add(memPtr, 0), \"Ownable: caller is not the owner\")\n\n    }\n\n    function abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 32)\n        store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb(memPtr) {\n\n        mstore(add(memPtr, 0), \"invalid acess control manager ad\")\n\n        mstore(add(memPtr, 32), \"dress\")\n\n    }\n\n    function abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 37)\n        store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function array_length_t_string_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function copy_memory_to_memory_with_cleanup(src, dst, length) {\n\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n\n    }\n\n    function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n        let length := array_length_t_string_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0,  tail)\n\n    }\n\n    function abi_encode_tuple_t_address_t_string_memory_ptr__to_t_address_t_string_memory_ptr__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        mstore(add(headStart, 32), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value1,  tail)\n\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_string_memory_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        mstore(add(headStart, 64), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value2,  tail)\n\n    }\n\n    function store_literal_in_memory_2f89df7223863f69f86e7052cbcdf68d52d82b51b73f12fa18c8c279407b9f9f(memPtr) {\n\n        mstore(add(memPtr, 0), \"rewardToken market is not listed\")\n\n    }\n\n    function abi_encode_t_stringliteral_2f89df7223863f69f86e7052cbcdf68d52d82b51b73f12fa18c8c279407b9f9f_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 32)\n        store_literal_in_memory_2f89df7223863f69f86e7052cbcdf68d52d82b51b73f12fa18c8c279407b9f9f(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_2f89df7223863f69f86e7052cbcdf68d52d82b51b73f12fa18c8c279407b9f9f__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_2f89df7223863f69f86e7052cbcdf68d52d82b51b73f12fa18c8c279407b9f9f_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_133e6bf643465df761ef166e81246dc8f30fd9c0ebeb2ba6af193b3bb30494f8(memPtr) {\n\n        mstore(add(memPtr, 0), \"setting last rewarding timestamp\")\n\n        mstore(add(memPtr, 32), \" in the past is not allowed\")\n\n    }\n\n    function abi_encode_t_stringliteral_133e6bf643465df761ef166e81246dc8f30fd9c0ebeb2ba6af193b3bb30494f8_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 59)\n        store_literal_in_memory_133e6bf643465df761ef166e81246dc8f30fd9c0ebeb2ba6af193b3bb30494f8(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_133e6bf643465df761ef166e81246dc8f30fd9c0ebeb2ba6af193b3bb30494f8__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_133e6bf643465df761ef166e81246dc8f30fd9c0ebeb2ba6af193b3bb30494f8_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8(memPtr) {\n\n        mstore(add(memPtr, 0), \"this RewardsDistributor is alrea\")\n\n        mstore(add(memPtr, 32), \"dy locked\")\n\n    }\n\n    function abi_encode_t_stringliteral_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 41)\n        store_literal_in_memory_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_79003f81c5ed8d727bde98c70cd994d2d0d8887fe8e63d21d429e7b952c824f8_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function panic_error_0x11() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n\n    function checked_sub_t_uint256(x, y) -> diff {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        diff := sub(x, y)\n\n        if gt(diff, x) { panic_error_0x11() }\n\n    }\n\n    function checked_mul_t_uint256(x, y) -> product {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        let product_raw := mul(x, y)\n        product := cleanup_t_uint256(product_raw)\n\n        // overflow, if x != 0 and y != product/x\n        if iszero(\n            or(\n                iszero(x),\n                eq(y, div(product, x))\n            )\n        ) { panic_error_0x11() }\n\n    }\n\n    function checked_add_t_uint256(x, y) -> sum {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        sum := add(x, y)\n\n        if gt(x, sum) { panic_error_0x11() }\n\n    }\n\n    function store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032(memPtr) {\n\n        mstore(add(memPtr, 0), \"Comptroller: Invalid maxLoopsLim\")\n\n        mstore(add(memPtr, 32), \"it\")\n\n    }\n\n    function abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 34)\n        store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_6a6f70ab8717c54cc36616a41f4d2f11a60355fdc239fe328ffb57629cd36805(memPtr) {\n\n        mstore(add(memPtr, 0), \"setting last rewarding block in \")\n\n        mstore(add(memPtr, 32), \"the past is not allowed\")\n\n    }\n\n    function abi_encode_t_stringliteral_6a6f70ab8717c54cc36616a41f4d2f11a60355fdc239fe328ffb57629cd36805_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 55)\n        store_literal_in_memory_6a6f70ab8717c54cc36616a41f4d2f11a60355fdc239fe328ffb57629cd36805(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_6a6f70ab8717c54cc36616a41f4d2f11a60355fdc239fe328ffb57629cd36805__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_6a6f70ab8717c54cc36616a41f4d2f11a60355fdc239fe328ffb57629cd36805_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint32_to_t_uint32_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b(memPtr) {\n\n        mstore(add(memPtr, 0), \"Initializable: contract is not i\")\n\n        mstore(add(memPtr, 32), \"nitializing\")\n\n    }\n\n    function abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 43)\n        store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function panic_error_0x12() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n\n    function checked_div_t_uint256(x, y) -> r {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        if iszero(y) { panic_error_0x12() }\n\n        r := div(x, y)\n    }\n\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd(memPtr) {\n\n        mstore(add(memPtr, 0), \"SafeERC20: ERC20 operation did n\")\n\n        mstore(add(memPtr, 32), \"ot succeed\")\n\n    }\n\n    function abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 42)\n        store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c(memPtr) {\n\n        mstore(add(memPtr, 0), \"Address: insufficient balance fo\")\n\n        mstore(add(memPtr, 32), \"r call\")\n\n    }\n\n    function abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 38)\n        store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function array_length_t_bytes_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n        updated_pos := pos\n    }\n\n    function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n        let length := array_length_t_bytes_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, length)\n    }\n\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n        pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0,  pos)\n\n        end := pos\n    }\n\n    function store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad(memPtr) {\n\n        mstore(add(memPtr, 0), \"Address: call to non-contract\")\n\n    }\n\n    function abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 29)\n        store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"16219":[{"length":32,"start":932}],"16222":[{"length":32,"start":1520},{"length":32,"start":2328},{"length":32,"start":2720},{"length":32,"start":3518},{"length":32,"start":4687},{"length":32,"start":4791},{"length":32,"start":4882},{"length":32,"start":5141},{"length":32,"start":5306},{"length":32,"start":5424},{"length":32,"start":5615},{"length":32,"start":6161},{"length":32,"start":6265},{"length":32,"start":6356},{"length":32,"start":6596},{"length":32,"start":6703},{"length":32,"start":6821},{"length":32,"start":7004}],"16229":[{"length":32,"start":4422}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061023d5760003560e01c80637c05a7c51161013b578063be26317e116100b8578063e1d146fb1161007c578063e1d146fb14610645578063e30c39781461064d578063efc75f241461065e578063f2fde38b1461067f578063f7c618c11461069257600080fd5b8063be26317e146105c1578063bea6b8b8146105ca578063c7ad0895146105eb578063ca37271b1461061f578063db7954fd1461063257600080fd5b80638da5cb5b116100ff5780638da5cb5b146104fd5780638f693ec71461051757806392a1823514610551578063b4a0bdf314610594578063be203094146105ae57600080fd5b80637c05a7c51461045b57806380d45a2d1461047b578063818149451461048e578063856e5e6c146104d75780638c37dfa3146104ea57600080fd5b8063552c0971116101c95780636dfd08ca1161018d5780636dfd08ca146103ec578063715018a614610418578063741b25251461042057806374c4c1cc1461043357806379ba50971461045357600080fd5b8063552c0971146103615780635d8441b81461038c5780636857249c1461039f5780636a95ddef146103c65780636d049329146103d957600080fd5b80631627ee89116102105780631627ee89146102a857806323526079146102d55780632a869a4d146102e85780632c427b57146102fb5780632eed69061461034e57600080fd5b806304caeb10146102425780630a3a3a9e146102575780630e32cb861461026a578063160c3a031461027d575b600080fd5b610255610250366004612cf1565b6106a6565b005b610255610265366004612d49565b61085e565b610255610278366004612d49565b610895565b6102926a0c097ce7bc90715b34b9f160241b81565b60405161029f9190612d7b565b60405180910390f35b6102c86102b6366004612d49565b60fd6020526000908152604090205481565b60405161029f9190612d8f565b6102556102e3366004612de4565b6108a6565b6102556102f6366004612d49565b6108df565b61033f610309366004612d49565b61010060205260009081526040902080546001909101546001600160e01b0382169163ffffffff600160e01b9091048116911683565b60405161029f93929190612e23565b61025561035c366004612e4b565b6109ca565b6102c861036f366004612e7e565b60fc60209081526000928352604080842090915290825290205481565b61025561039a366004612f03565b610a7d565b6102c87f000000000000000000000000000000000000000000000000000000000000000081565b6102556103d4366004612fb0565b610b84565b6102556103e7366004612e4b565b610bbf565b6102c86103fa366004612e7e565b61010360209081526000928352604080842090915290825290205481565b610255610c39565b61025561042e366004612d49565b610c4d565b6102c8610441366004612d49565b60ff6020526000908152604090205481565b610255610d55565b6102c8610469366004612d49565b60fe6020526000908152604090205481565b610255610489366004613000565b610d8a565b6104c861049c366004612d49565b610106602052600090815260409020805460018201546002909201546001600160e01b03909116919083565b60405161029f93929190613021565b6102556104e5366004612f03565b610d9b565b6102556104f83660046130be565b610eb5565b6033546001600160a01b03165b60405161029f919061315d565b6104c8610525366004612d49565b610107602052600090815260409020805460018201546002909201546001600160e01b03909116919083565b61033f61055f366004612d49565b60fb60205260009081526040902080546001909101546001600160e01b0382169163ffffffff600160e01b9091048116911683565b6097546001600160a01b03165b60405161029f919061317f565b6102556105bc36600461318d565b610f74565b6102c860c95481565b6102c86105d8366004612d49565b6101026020526000908152604090205481565b6106127f000000000000000000000000000000000000000000000000000000000000000081565b60405161029f91906131f9565b61025561062d366004612d49565b61108a565b610255610640366004612e7e565b61110a565b6102c861113f565b6065546001600160a01b031661050a565b6102c861066c366004612d49565b6101016020526000908152604090205481565b61025561068d366004612d49565b611172565b610105546105a1906001600160a01b031681565b80516106b1816111eb565b60005b818110156108185760008382815181106106d0576106d0613207565b602090810291909101015161010454604051633d98a1e560e01b81529192506001600160a01b031690633d98a1e59061070d90849060040161317f565b602060405180830381865afa15801561072a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074e9190613230565b6107735760405162461bcd60e51b815260040161076a90613280565b60405180910390fd5b60006040518060200160405280836001600160a01b031663aa5af0fd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e2919061329b565b905290506107f08282611214565b6107fb8287836115c7565b610804826117d7565b61080e8287611b35565b50506001016106b4565b506001600160a01b038316600090815260fd602052604090205461083d908490611d33565b6001600160a01b03909316600090815260fd60205260409020929092555050565b610104546001600160a01b031633146108895760405162461bcd60e51b815260040161076a90613303565b610892816117d7565b50565b61089d611dee565b61089281611e18565b610104546001600160a01b031633146108d15760405162461bcd60e51b815260040161076a90613303565b6108db8282611214565b5050565b610104546001600160a01b0316331461090a5760405162461bcd60e51b815260040161076a90613303565b600061091461113f565b90507f0000000000000000000000000000000000000000000000000000000000000000610988576109838261097e836040518060400160405280601c81526020017f626c6f636b206e756d6265722065786365656473203332206269747300000000815250611e9d565b611ecd565b610992565b6109928282611f82565b6040516001600160a01b038316907ffe6944646a362be70b0925ea999b3d9f755589a63ffcd89e4fb2b0affd252c7190600090a25050565b6109d2611dee565b6109db82610c4d565b80600003610a02576001600160a01b03821660009081526101026020526040812055610a25565b610a0a61113f565b6001600160a01b038316600090815261010260205260409020555b6001600160a01b0382166000818152610101602052604090819020839055517f4882c0217331870166b5d239c9f7be7801bab4be26560cd2f8789145d0fd3af490610a71908490612d8f565b60405180910390a25050565b610a9e6040518060600160405280603e8152602001613c6f603e9139612018565b7f0000000000000000000000000000000000000000000000000000000000000000610adb5760405162461bcd60e51b815260040161076a90613347565b848381148015610aea57508082145b610b065760405162461bcd60e51b815260040161076a90613357565b60005b81811015610b7a57610b72888883818110610b2657610b26613207565b9050602002016020810190610b3b91906133c2565b878784818110610b4d57610b4d613207565b90506020020135868685818110610b6657610b66613207565b905060200201356120b2565b600101610b09565b5050505050505050565b610104546001600160a01b03163314610baf5760405162461bcd60e51b815260040161076a90613303565b610bba8383836115c7565b505050565b610bc7611dee565b6000610bd38383611d33565b90508015610bf35760405162461bcd60e51b815260040161076a90613422565b826001600160a01b03167f251909abf904fc80eac3f0d4c25e5c800441ea19fda63c6f0df08e4f24f926f983604051610c2c9190612d8f565b60405180910390a2505050565b610c41611dee565b610c4b60006122c5565b565b6001600160a01b0381166000908152610101602052604081205490610c7061113f565b6001600160a01b0384166000908152610102602052604081205491925090610c999083906122de565b9050600081118015610cab5750600083115b15610d4f576000610cbc82856122f1565b6001600160a01b038616600090815260fd602052604081205491925090610ce390836122fd565b6001600160a01b038716600081815260fd602081815260408084208681556101028352938190208a90559190529054905192935090917f38fe05baf9dc12e4e3bfda3daba26419e9930bf26ee6227f407ca46f8c9c29bc91610d4491612d8f565b60405180910390a250505b50505050565b60655433906001600160a01b03168114610d815760405162461bcd60e51b815260040161076a90613478565b610892816122c5565b610d92611dee565b61089281612309565b610dbc604051806060016040528060338152602001613cad60339139612018565b7f000000000000000000000000000000000000000000000000000000000000000015610dfa5760405162461bcd60e51b815260040161076a906134bc565b848381148015610e0957508082145b610e255760405162461bcd60e51b815260040161076a90613526565b60005b81811015610b7a57610ead888883818110610e4557610e45613207565b9050602002016020810190610e5a91906133c2565b878784818110610e6c57610e6c613207565b9050602002016020810190610e81919061354d565b868685818110610e9357610e93613207565b9050602002016020810190610ea8919061354d565b612364565b600101610e28565b610ed6604051806060016040528060338152602001613ce060339139612018565b8251825181148015610ee85750815181145b610f045760405162461bcd60e51b815260040161076a906135a2565b60005b81811015610f6d57610f65858281518110610f2457610f24613207565b6020026020010151858381518110610f3e57610f3e613207565b6020026020010151858481518110610f5857610f58613207565b60200260200101516125cd565b600101610f07565b5050505050565b600054610100900460ff1615808015610f945750600054600160ff909116105b80610fae5750303b158015610fae575060005460ff166001145b610fca5760405162461bcd60e51b815260040161076a906135fd565b6000805460ff191660011790558015610fed576000805461ff0019166101001790555b61010480546001600160a01b038088166001600160a01b0319928316179092556101058054928716929091169190911790556110276127cc565b611030826127fb565b61103983612309565b8015610f6d576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989061107b90600190613621565b60405180910390a15050505050565b6108928161010460009054906101000a90046001600160a01b03166001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156110e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261025091908101906136af565b610104546001600160a01b031633146111355760405162461bcd60e51b815260040161076a90613303565b6108db8282611b35565b600061116d7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16565b905090565b61117a611dee565b606580546001600160a01b0383166001600160a01b031990911681179091556111ab6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b4390565b4290565b60c9548111156108925760c9548160405163792bfb1b60e11b815260040161076a9291906136ea565b6001600160a01b038216600090815261010060209081526040808320610107835281842060fe90935290832054909261124b61113f565b90507f00000000000000000000000000000000000000000000000000000000000000006112b3576112b1816040518060400160405280601c81526020017f626c6f636b206e756d6265722065786365656473203332206269747300000000815250611e9d565b505b60007f00000000000000000000000000000000000000000000000000000000000000006112ea57600185015463ffffffff166112f0565b83600201545b905060008111801561130157508082115b1561130a578091505b6000611353837f0000000000000000000000000000000000000000000000000000000000000000611349578754600160e01b900463ffffffff166122de565b86600101546122de565b90506000811180156113655750600084115b156115285760006113d7896001600160a01b03166347bd37186040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d1919061329b565b89612822565b905060006113e583876122f1565b90506000808311611405576040518060200160405280600081525061140f565b61140f8284612840565b905060007f00000000000000000000000000000000000000000000000000000000000000006114485789546001600160e01b0316611454565b88546001600160e01b03165b905060006114b661147c6040518060200160405280856001600160e01b031681525085612884565b5160408051808201909152601a81527f6e657720696e646578206578636565647320323234206269747300000000000060208201526128b0565b90507f0000000000000000000000000000000000000000000000000000000000000000156115035789546001600160e01b0319166001600160e01b038216178a5560018a0188905561151e565b63ffffffff8816600160e01b026001600160e01b038216178b555b505050505061157c565b801561157c577f000000000000000000000000000000000000000000000000000000000000000015611560576001850183905561157c565b85546001600160e01b0316600160e01b63ffffffff8516021786555b876001600160a01b03167fbfeed4eb85c013b0e466fdfdbaa785159ff7986078247dc95f1c717a5bd6bca2886040516115b59190613716565b60405180910390a25050505050505050565b6001600160a01b038316600090815261010060209081526040808320610107909252822090917f00000000000000000000000000000000000000000000000000000000000000006116225782546001600160e01b031661162e565b81546001600160e01b03165b6001600160a01b03878116600090815261010360209081526040808320938a1683529290522080546001600160e01b03929092169081905591508015801561168457506a0c097ce7bc90715b34b9f160241b8210155b1561169a57506a0c097ce7bc90715b34b9f160241b5b600060405180602001604052806116b185856122de565b8152509050600061172e896001600160a01b03166395dd91938a6040518263ffffffff1660e01b81526004016116e7919061315d565b602060405180830381865afa158015611704573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611728919061329b565b88612822565b905080156117cc57600061174282846128db565b6001600160a01b038a16600090815260fd60205260408120549192509061176990836122fd565b6001600160a01b03808c16600081815260fd6020526040908190208490555192935091908d16907f510d7612da9ca257889eabdfbe0366aaea10020be46f7810f4afb2111d80aa93906117c190869086908c90613724565b60405180910390a350505b505050505050505050565b6001600160a01b038116600090815260fb60209081526040808320610106835281842060ff90935290832054909261180d61113f565b90507f000000000000000000000000000000000000000000000000000000000000000061187557611873816040518060400160405280601c81526020017f626c6f636b206e756d6265722065786365656473203332206269747300000000815250611e9d565b505b60007f00000000000000000000000000000000000000000000000000000000000000006118ac57600185015463ffffffff166118b2565b83600201545b90506000811180156118c357508082115b156118cc578091505b600061190b837f0000000000000000000000000000000000000000000000000000000000000000611349578754600160e01b900463ffffffff166122de565b905060008111801561191d5750600084115b15611a9d576000876001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611962573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611986919061329b565b9050600061199483876122f1565b905060008083116119b457604051806020016040528060008152506119be565b6119be8284612840565b905060007f00000000000000000000000000000000000000000000000000000000000000006119f75789546001600160e01b0316611a03565b88546001600160e01b03165b90506000611a2b61147c6040518060200160405280856001600160e01b031681525085612884565b90507f000000000000000000000000000000000000000000000000000000000000000015611a785789546001600160e01b0319166001600160e01b038216178a5560018a01889055611a93565b63ffffffff8816600160e01b026001600160e01b038216178b555b5050505050611af8565b8015611af8577f0000000000000000000000000000000000000000000000000000000000000000611aed5785546001600160e01b0316600160e01b63ffffffff8516908102919091178755611af6565b82856001018190555b505b6040516001600160a01b038816907f6a7b996800070d8bc0f9a3ddcb0a4b09bc1653f76381d745444956366afd423a90600090a250505050505050565b6001600160a01b038216600090815260fb60209081526040808320610106909252822090917f0000000000000000000000000000000000000000000000000000000000000000611b8f5782546001600160e01b0316611b9b565b81546001600160e01b03165b6001600160a01b03868116600090815260fc6020908152604080832093891683529290522080546001600160e01b039290921690819055915080158015611bf057506a0c097ce7bc90715b34b9f160241b8210155b15611c0657506a0c097ce7bc90715b34b9f160241b5b60006040518060200160405280611c1d85856122de565b90526040516370a0823160e01b81529091506000906001600160a01b038916906370a0823190611c51908a9060040161315d565b602060405180830381865afa158015611c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c92919061329b565b90506000611ca082846128db565b6001600160a01b038916600090815260fd602052604081205491925090611cc790836122fd565b6001600160a01b03808b16600081815260fd6020526040908190208490555192935091908c16907f9563ff6035b973f2e4514ad9315010c220eb74b0c33a782a18118a199a97e44290611d1f90869086908c90613724565b60405180910390a350505050505050505050565b610105546040516370a0823160e01b815260009182916001600160a01b03909116906370a0823190611d6990309060040161315d565b602060405180830381865afa158015611d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daa919061329b565b9050600083118015611dbc5750808311155b15611de35761010554611dd9906001600160a01b03168585612904565b6000915050611de8565b829150505b92915050565b6033546001600160a01b03163314610c4b5760405162461bcd60e51b815260040161076a90613764565b6001600160a01b038116611e3e5760405162461bcd60e51b815260040161076a906137b6565b609780546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa090611e9190839085906137c6565b60405180910390a15050565b60008163ffffffff841115611ec55760405162461bcd60e51b815260040161076a9190613837565b509192915050565b6001600160a01b038216600090815260fb6020908152604080832061010090925282208154919290916001600160e01b03169003611f245781546001600160e01b0319166a0c097ce7bc90715b34b9f160241b1782555b80546001600160e01b0316600003611f555780546001600160e01b0319166a0c097ce7bc90715b34b9f160241b1781555b805463ffffffff909316600160e01b026001600160e01b0393841681179091558154909216909117905550565b6001600160a01b03821660009081526101066020908152604080832061010790925282208154919290916001600160e01b03169003611fda5781546001600160e01b0319166a0c097ce7bc90715b34b9f160241b1782555b80546001600160e01b031660000361200b5780546001600160e01b0319166a0c097ce7bc90715b34b9f160241b1781555b6001908101839055015550565b6097546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab9061204b9033908690600401613848565b602060405180830381865afa158015612068573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208c9190613230565b9050806108db57333083604051634a3fa29360e01b815260040161076a93929190613868565b61010454604051633d98a1e560e01b81526001600160a01b0390911690633d98a1e5906120e390869060040161317f565b602060405180830381865afa158015612100573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121249190613230565b6121405760405162461bcd60e51b815260040161076a906138d0565b600061214a61113f565b905080831161216b5760405162461bcd60e51b815260040161076a9061393a565b80821161218a5760405162461bcd60e51b815260040161076a9061393a565b6001600160a01b0384166000908152610106602090815260408083206002908101546101079093529220909101548115806121c457508282115b6121e05760405162461bcd60e51b815260040161076a90613990565b8015806121ec57508281115b6122085760405162461bcd60e51b815260040161076a90613990565b848214612267576001600160a01b0386166000818152610106602052604090819020600201879055517f0e68f65b8654c09acfdc448a42c8a0d72697206fd0c23c357022fa1cd16268619061225e908890612d8f565b60405180910390a25b8381146122bd576001600160a01b0386166000818152610107602052604090819020600201869055517f7aefe759bc95e5c94c6d919eef378c410527d0d85f409986ec8d54a99ea8395e90610d44908790612d8f565b505050505050565b606580546001600160a01b03191690556108928161295a565b60006122ea82846139b6565b9392505050565b60006122ea82846139c9565b60006122ea82846139e8565b60c954811161232a5760405162461bcd60e51b815260040161076a90613a3a565b60c98054908290556040517fc2d09fef144f7c8a86f71ea459f8fc17f675768eb1ae369cbd77fb31d467aafa90611e9190839085906136ea565b61010454604051633d98a1e560e01b81526001600160a01b0390911690633d98a1e59061239590869060040161317f565b602060405180830381865afa1580156123b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d69190613230565b6123f25760405162461bcd60e51b815260040161076a906138d0565b60006123fc61113f565b9050808363ffffffff16116124235760405162461bcd60e51b815260040161076a90613aa4565b808263ffffffff16116124485760405162461bcd60e51b815260040161076a90613aa4565b6001600160a01b038416600090815260fb6020908152604080832060019081015461010090935292209091015463ffffffff91821691168115806124915750828263ffffffff16115b6124ad5760405162461bcd60e51b815260040161076a90613990565b63ffffffff811615806124c55750828163ffffffff16115b6124e15760405162461bcd60e51b815260040161076a90613990565b8463ffffffff168263ffffffff161461255b576001600160a01b038616600081815260fb602052604090819020600101805463ffffffff191663ffffffff8916179055517f41b697bf2627e0a03f253382759baaab2469897004cc619465a3d8f4bb6b3fec90612552908890613ab4565b60405180910390a25b8363ffffffff168163ffffffff16146122bd576001600160a01b0386166000818152610100602052604090819020600101805463ffffffff191663ffffffff8816179055517f4163eb203170b7facecc8d7307e3f8affa8826d4df30fc722f8f8ce17988eb9190610d44908790613ab4565b61010454604051633d98a1e560e01b81526001600160a01b0390911690633d98a1e5906125fe90869060040161317f565b602060405180830381865afa15801561261b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263f9190613230565b61265b5760405162461bcd60e51b815260040161076a906138d0565b6001600160a01b038316600090815260ff602052604090205482146126d757612683836117d7565b6001600160a01b038316600081815260ff602052604090819020849055517f24741480445e83baea9eb28086e16a4377ebb4f003c773e386496fd90b3ed04e906126ce908590612d8f565b60405180910390a25b6001600160a01b038316600090815260fe60205260409020548114610bba5760006040518060200160405280856001600160a01b031663aa5af0fd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612741573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612765919061329b565b905290506127738482611214565b6001600160a01b038416600081815260fe602052604090819020849055517f2091432bbf4aa40f4785b469e931d32c5f5c6ba66dcf702a99cbe776df729c3c906127be908590612d8f565b60405180910390a250505050565b600054610100900460ff166127f35760405162461bcd60e51b815260040161076a90613b0a565b610c4b6129ac565b600054610100900460ff1661089d5760405162461bcd60e51b815260040161076a90613b0a565b60006122ea61283984670de0b6b3a76400006122f1565b83516129dc565b604080516020810190915260008152604051806020016040528061287b612875866a0c097ce7bc90715b34b9f160241b6122f1565b856129dc565b90529392505050565b604080516020810190915260008152604051806020016040528061287b856000015185600001516122fd565b6000816001600160e01b03841115611ec55760405162461bcd60e51b815260040161076a9190613837565b60006a0c097ce7bc90715b34b9f160241b6128fa8484600001516122f1565b6122ea9190613b30565b610bba8363a9059cbb60e01b8484604051602401612923929190613b44565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526129e8565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166129d35760405162461bcd60e51b815260040161076a90613b0a565b610c4b336122c5565b60006122ea8284613b30565b6000612a3d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612a7a9092919063ffffffff16565b9050805160001480612a5e575080806020019051810190612a5e9190613230565b610bba5760405162461bcd60e51b815260040161076a90613b99565b6060612a898484600085612a91565b949350505050565b606082471015612ab35760405162461bcd60e51b815260040161076a90613bec565b600080866001600160a01b03168587604051612acf9190613c1e565b60006040518083038185875af1925050503d8060008114612b0c576040519150601f19603f3d011682016040523d82523d6000602084013e612b11565b606091505b5091509150612b2287838387612b2d565b979650505050505050565b60608315612b6c578251600003612b65576001600160a01b0385163b612b655760405162461bcd60e51b815260040161076a90613c5e565b5081612a89565b612a898383815115612b815781518083602001fd5b8060405162461bcd60e51b815260040161076a9190613837565b60006001600160a01b038216611de8565b612bb581612b9b565b811461089257600080fd5b8035611de881612bac565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715612c0757612c07612bcb565b6040525050565b6000612c1960405190565b9050612c258282612be1565b919050565b600067ffffffffffffffff821115612c4457612c44612bcb565b5060209081020190565b6000611de882612b9b565b612bb581612c4e565b8035611de881612c59565b6000612c80612c7b84612c2a565b612c0e565b83815290506020808201908402830185811115612c9f57612c9f600080fd5b835b81811015612cc35780612cb48882612c62565b84525060209283019201612ca1565b5050509392505050565b600082601f830112612ce157612ce1600080fd5b8135612a89848260208601612c6d565b60008060408385031215612d0757612d07600080fd5b6000612d138585612bc0565b925050602083013567ffffffffffffffff811115612d3357612d33600080fd5b612d3f85828601612ccd565b9150509250929050565b600060208284031215612d5e57612d5e600080fd5b6000612a898484612bc0565b6001600160e01b0381165b82525050565b60208101611de88284612d6a565b80612d75565b60208101611de88284612d89565b80612bb5565b8035611de881612d9d565b600060208284031215612dc357612dc3600080fd5b612dcd6020612c0e565b90506000612ddb8484612da3565b82525092915050565b60008060408385031215612dfa57612dfa600080fd5b6000612e068585612bc0565b9250506020612d3f85828601612dae565b63ffffffff8116612d75565b60608101612e318286612d6a565b612e3e6020830185612e17565b612a896040830184612e17565b60008060408385031215612e6157612e61600080fd5b6000612e6d8585612bc0565b9250506020612d3f85828601612da3565b60008060408385031215612e9457612e94600080fd5b6000612ea08585612bc0565b9250506020612d3f85828601612bc0565b60008083601f840112612ec657612ec6600080fd5b50813567ffffffffffffffff811115612ee157612ee1600080fd5b602083019150836020820283011115612efc57612efc600080fd5b9250929050565b60008060008060008060608789031215612f1f57612f1f600080fd5b863567ffffffffffffffff811115612f3957612f39600080fd5b612f4589828a01612eb1565b9650965050602087013567ffffffffffffffff811115612f6757612f67600080fd5b612f7389828a01612eb1565b9450945050604087013567ffffffffffffffff811115612f9557612f95600080fd5b612fa189828a01612eb1565b92509250509295509295509295565b600080600060608486031215612fc857612fc8600080fd5b6000612fd48686612bc0565b9350506020612fe586828701612bc0565b9250506040612ff686828701612dae565b9150509250925092565b60006020828403121561301557613015600080fd5b6000612a898484612da3565b6060810161302f8286612d6a565b61303c6020830185612d89565b612a896040830184612d89565b6000613057612c7b84612c2a565b8381529050602080820190840283018581111561307657613076600080fd5b835b81811015612cc3578061308b8882612da3565b84525060209283019201613078565b600082601f8301126130ae576130ae600080fd5b8135612a89848260208601613049565b6000806000606084860312156130d6576130d6600080fd5b833567ffffffffffffffff8111156130f0576130f0600080fd5b6130fc86828701612ccd565b935050602084013567ffffffffffffffff81111561311c5761311c600080fd5b6131288682870161309a565b925050604084013567ffffffffffffffff81111561314857613148600080fd5b612ff68682870161309a565b612d7581612b9b565b60208101611de88284613154565b6000611de882612c4e565b612d758161316b565b60208101611de88284613176565b600080600080608085870312156131a6576131a6600080fd5b60006131b28787612c62565b94505060206131c387828801612c62565b93505060406131d487828801612da3565b92505060606131e587828801612bc0565b91505092959194509250565b801515612d75565b60208101611de882846131f1565b634e487b7160e01b600052603260045260246000fd5b801515612bb5565b8051611de88161321d565b60006020828403121561324557613245600080fd5b6000612a898484613225565b60158152600060208201741b585c9ad95d081b5d5cdd081899481b1a5cdd1959605a1b815291505b5060200190565b60208082528101611de881613251565b8051611de881612d9d565b6000602082840312156132b0576132b0600080fd5b6000612a898484613290565b602781526000602082017f4f6e6c7920636f6d7074726f6c6c65722063616e2063616c6c207468697320668152663ab731ba34b7b760c91b602082015291505b5060400190565b60208082528101611de8816132bc565b601981526000602082017f54696d652d6261736564206f7065726174696f6e206f6e6c790000000000000081529150613279565b60208082528101611de881613313565b60208082528101611de881604181527f526577617264734469737472696275746f723a3a7365744c617374526577617260208201527f64696e67426c6f636b54696d657374616d707320696e76616c696420696e70756040820152601d60fa1b606082015260800190565b6000602082840312156133d7576133d7600080fd5b6000612a898484612c62565b602281526000602082017f696e73756666696369656e7420726577617264546f6b656e20666f72206772618152611b9d60f21b602082015291506132fc565b60208082528101611de8816133e3565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b602082015291506132fc565b60208082528101611de881613432565b601a81526000602082017f426c6f636b2d6261736564206f7065726174696f6e206f6e6c7900000000000081529150613279565b60208082528101611de881613488565b603881526000602082017f526577617264734469737472696275746f723a3a7365744c617374526577617281527f64696e67426c6f636b7320696e76616c696420696e7075740000000000000000602082015291506132fc565b60208082528101611de8816134cc565b63ffffffff8116612bb5565b8035611de881613536565b60006020828403121561356257613562600080fd5b6000612a898484613542565b601c81526000602082017f696e76616c696420736574526577617264546f6b656e5370656564730000000081529150613279565b60208082528101611de88161356e565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015291506132fc565b60208082528101611de8816135b2565b600060ff8216611de8565b612d758161360d565b60208101611de88284613618565b8051611de881612c59565b6000613648612c7b84612c2a565b8381529050602080820190840283018581111561366757613667600080fd5b835b81811015612cc3578061367c888261362f565b84525060209283019201613669565b600082601f83011261369f5761369f600080fd5b8151612a8984826020860161363a565b6000602082840312156136c4576136c4600080fd5b815167ffffffffffffffff8111156136de576136de600080fd5b612a898482850161368b565b604081016136f88285612d89565b6122ea6020830184612d89565b80516020830190610d4f8482612d89565b60208101611de88284613705565b6060810161302f8286612d89565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081526000613279565b60208082528101611de881613732565b602581526000602082017f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b602082015291506132fc565b60208082528101611de881613774565b604081016137d48285613154565b6122ea6020830184613154565b60005b838110156137fc5781810151838201526020016137e4565b50506000910152565b600061380f825190565b8084526020840193506138268185602086016137e1565b601f01601f19169290920192915050565b602080825281016122ea8184613805565b604081016138568285613154565b8181036020830152612a898184613805565b606081016138768286613154565b6138836020830185613154565b81810360408301526138958184613805565b95945050505050565b60208082527f726577617264546f6b656e206d61726b6574206973206e6f74206c697374656491019081526000613279565b60208082528101611de88161389e565b603b81526000602082017f73657474696e67206c61737420726577617264696e672074696d657374616d7081527f20696e207468652070617374206973206e6f7420616c6c6f7765640000000000602082015291506132fc565b60208082528101611de8816138e0565b602981526000602082017f7468697320526577617264734469737472696275746f7220697320616c726561815268191e481b1bd8dad95960ba1b602082015291506132fc565b60208082528101611de88161394a565b634e487b7160e01b600052601160045260246000fd5b81810381811115611de857611de86139a0565b8181028082158382048514176139e1576139e16139a0565b5092915050565b80820180821115611de857611de86139a0565b602281526000602082017f436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d8152611a5d60f21b602082015291506132fc565b60208082528101611de8816139fb565b603781526000602082017f73657474696e67206c61737420726577617264696e6720626c6f636b20696e2081527f7468652070617374206973206e6f7420616c6c6f776564000000000000000000602082015291506132fc565b60208082528101611de881613a4a565b60208101611de88284612e17565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b602082015291506132fc565b60208082528101611de881613ac2565b634e487b7160e01b600052601260045260246000fd5b600082613b3f57613b3f613b1a565b500490565b604081016136f88285613154565b602a81526000602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015291506132fc565b60208082528101611de881613b52565b602681526000602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f8152651c8818d85b1b60d21b602082015291506132fc565b60208082528101611de881613ba9565b6000613c06825190565b613c148185602086016137e1565b9290920192915050565b60006122ea8284613bfc565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150613279565b60208082528101611de881613c2a56fe7365744c617374526577617264696e67426c6f636b54696d657374616d707328616464726573735b5d2c75696e743235365b5d2c75696e743235365b5d297365744c617374526577617264696e67426c6f636b7328616464726573735b5d2c75696e7433325b5d2c75696e7433325b5d29736574526577617264546f6b656e53706565647328616464726573735b5d2c75696e743235365b5d2c75696e743235365b5d29a2646970667358221220de35fe96c63c31606a6974495f3b91116b249ca932059888f347a80f6a7ff6e464736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x23D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7C05A7C5 GT PUSH2 0x13B JUMPI DUP1 PUSH4 0xBE26317E GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xE1D146FB GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xE1D146FB EQ PUSH2 0x645 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x64D JUMPI DUP1 PUSH4 0xEFC75F24 EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x67F JUMPI DUP1 PUSH4 0xF7C618C1 EQ PUSH2 0x692 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBE26317E EQ PUSH2 0x5C1 JUMPI DUP1 PUSH4 0xBEA6B8B8 EQ PUSH2 0x5CA JUMPI DUP1 PUSH4 0xC7AD0895 EQ PUSH2 0x5EB JUMPI DUP1 PUSH4 0xCA37271B EQ PUSH2 0x61F JUMPI DUP1 PUSH4 0xDB7954FD EQ PUSH2 0x632 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xFF JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x4FD JUMPI DUP1 PUSH4 0x8F693EC7 EQ PUSH2 0x517 JUMPI DUP1 PUSH4 0x92A18235 EQ PUSH2 0x551 JUMPI DUP1 PUSH4 0xB4A0BDF3 EQ PUSH2 0x594 JUMPI DUP1 PUSH4 0xBE203094 EQ PUSH2 0x5AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7C05A7C5 EQ PUSH2 0x45B JUMPI DUP1 PUSH4 0x80D45A2D EQ PUSH2 0x47B JUMPI DUP1 PUSH4 0x81814945 EQ PUSH2 0x48E JUMPI DUP1 PUSH4 0x856E5E6C EQ PUSH2 0x4D7 JUMPI DUP1 PUSH4 0x8C37DFA3 EQ PUSH2 0x4EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x552C0971 GT PUSH2 0x1C9 JUMPI DUP1 PUSH4 0x6DFD08CA GT PUSH2 0x18D JUMPI DUP1 PUSH4 0x6DFD08CA EQ PUSH2 0x3EC JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x418 JUMPI DUP1 PUSH4 0x741B2525 EQ PUSH2 0x420 JUMPI DUP1 PUSH4 0x74C4C1CC EQ PUSH2 0x433 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x453 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x552C0971 EQ PUSH2 0x361 JUMPI DUP1 PUSH4 0x5D8441B8 EQ PUSH2 0x38C JUMPI DUP1 PUSH4 0x6857249C EQ PUSH2 0x39F JUMPI DUP1 PUSH4 0x6A95DDEF EQ PUSH2 0x3C6 JUMPI DUP1 PUSH4 0x6D049329 EQ PUSH2 0x3D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1627EE89 GT PUSH2 0x210 JUMPI DUP1 PUSH4 0x1627EE89 EQ PUSH2 0x2A8 JUMPI DUP1 PUSH4 0x23526079 EQ PUSH2 0x2D5 JUMPI DUP1 PUSH4 0x2A869A4D EQ PUSH2 0x2E8 JUMPI DUP1 PUSH4 0x2C427B57 EQ PUSH2 0x2FB JUMPI DUP1 PUSH4 0x2EED6906 EQ PUSH2 0x34E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4CAEB10 EQ PUSH2 0x242 JUMPI DUP1 PUSH4 0xA3A3A9E EQ PUSH2 0x257 JUMPI DUP1 PUSH4 0xE32CB86 EQ PUSH2 0x26A JUMPI DUP1 PUSH4 0x160C3A03 EQ PUSH2 0x27D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x255 PUSH2 0x250 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CF1 JUMP JUMPDEST PUSH2 0x6A6 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x255 PUSH2 0x265 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0x85E JUMP JUMPDEST PUSH2 0x255 PUSH2 0x278 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0x895 JUMP JUMPDEST PUSH2 0x292 PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29F SWAP2 SWAP1 PUSH2 0x2D7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2C8 PUSH2 0x2B6 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH1 0xFD PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29F SWAP2 SWAP1 PUSH2 0x2D8F JUMP JUMPDEST PUSH2 0x255 PUSH2 0x2E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2DE4 JUMP JUMPDEST PUSH2 0x8A6 JUMP JUMPDEST PUSH2 0x255 PUSH2 0x2F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0x8DF JUMP JUMPDEST PUSH2 0x33F PUSH2 0x309 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0x100 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP3 AND SWAP2 PUSH4 0xFFFFFFFF PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 SWAP2 DIV DUP2 AND SWAP2 AND DUP4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2E23 JUMP JUMPDEST PUSH2 0x255 PUSH2 0x35C CALLDATASIZE PUSH1 0x4 PUSH2 0x2E4B JUMP JUMPDEST PUSH2 0x9CA JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0x36F CALLDATASIZE PUSH1 0x4 PUSH2 0x2E7E JUMP JUMPDEST PUSH1 0xFC PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x255 PUSH2 0x39A CALLDATASIZE PUSH1 0x4 PUSH2 0x2F03 JUMP JUMPDEST PUSH2 0xA7D JUMP JUMPDEST PUSH2 0x2C8 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x255 PUSH2 0x3D4 CALLDATASIZE PUSH1 0x4 PUSH2 0x2FB0 JUMP JUMPDEST PUSH2 0xB84 JUMP JUMPDEST PUSH2 0x255 PUSH2 0x3E7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2E4B JUMP JUMPDEST PUSH2 0xBBF JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0x3FA CALLDATASIZE PUSH1 0x4 PUSH2 0x2E7E JUMP JUMPDEST PUSH2 0x103 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x255 PUSH2 0xC39 JUMP JUMPDEST PUSH2 0x255 PUSH2 0x42E CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0xC4D JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0x441 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x255 PUSH2 0xD55 JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0x469 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH1 0xFE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x255 PUSH2 0x489 CALLDATASIZE PUSH1 0x4 PUSH2 0x3000 JUMP JUMPDEST PUSH2 0xD8A JUMP JUMPDEST PUSH2 0x4C8 PUSH2 0x49C CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0x106 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP1 SWAP2 AND SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3021 JUMP JUMPDEST PUSH2 0x255 PUSH2 0x4E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F03 JUMP JUMPDEST PUSH2 0xD9B JUMP JUMPDEST PUSH2 0x255 PUSH2 0x4F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x30BE JUMP JUMPDEST PUSH2 0xEB5 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29F SWAP2 SWAP1 PUSH2 0x315D JUMP JUMPDEST PUSH2 0x4C8 PUSH2 0x525 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0x107 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP1 SWAP2 AND SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH2 0x33F PUSH2 0x55F CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH1 0xFB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP3 AND SWAP2 PUSH4 0xFFFFFFFF PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 SWAP2 DIV DUP2 AND SWAP2 AND DUP4 JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29F SWAP2 SWAP1 PUSH2 0x317F JUMP JUMPDEST PUSH2 0x255 PUSH2 0x5BC CALLDATASIZE PUSH1 0x4 PUSH2 0x318D JUMP JUMPDEST PUSH2 0xF74 JUMP JUMPDEST PUSH2 0x2C8 PUSH1 0xC9 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0x5D8 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0x102 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x612 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29F SWAP2 SWAP1 PUSH2 0x31F9 JUMP JUMPDEST PUSH2 0x255 PUSH2 0x62D CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0x108A JUMP JUMPDEST PUSH2 0x255 PUSH2 0x640 CALLDATASIZE PUSH1 0x4 PUSH2 0x2E7E JUMP JUMPDEST PUSH2 0x110A JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0x113F JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x50A JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0x66C CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0x101 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x255 PUSH2 0x68D CALLDATASIZE PUSH1 0x4 PUSH2 0x2D49 JUMP JUMPDEST PUSH2 0x1172 JUMP JUMPDEST PUSH2 0x105 SLOAD PUSH2 0x5A1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x6B1 DUP2 PUSH2 0x11EB JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x818 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x6D0 JUMPI PUSH2 0x6D0 PUSH2 0x3207 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x104 SLOAD PUSH1 0x40 MLOAD PUSH4 0x3D98A1E5 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x3D98A1E5 SWAP1 PUSH2 0x70D SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x317F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x72A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x74E SWAP2 SWAP1 PUSH2 0x3230 JUMP JUMPDEST PUSH2 0x773 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3280 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAA5AF0FD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7BE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7E2 SWAP2 SWAP1 PUSH2 0x329B JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP PUSH2 0x7F0 DUP3 DUP3 PUSH2 0x1214 JUMP JUMPDEST PUSH2 0x7FB DUP3 DUP8 DUP4 PUSH2 0x15C7 JUMP JUMPDEST PUSH2 0x804 DUP3 PUSH2 0x17D7 JUMP JUMPDEST PUSH2 0x80E DUP3 DUP8 PUSH2 0x1B35 JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x6B4 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x83D SWAP1 DUP5 SWAP1 PUSH2 0x1D33 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP3 SWAP1 SWAP3 SSTORE POP POP JUMP JUMPDEST PUSH2 0x104 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x889 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3303 JUMP JUMPDEST PUSH2 0x892 DUP2 PUSH2 0x17D7 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x89D PUSH2 0x1DEE JUMP JUMPDEST PUSH2 0x892 DUP2 PUSH2 0x1E18 JUMP JUMPDEST PUSH2 0x104 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x8D1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3303 JUMP JUMPDEST PUSH2 0x8DB DUP3 DUP3 PUSH2 0x1214 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x104 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x90A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3303 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x914 PUSH2 0x113F JUMP JUMPDEST SWAP1 POP PUSH32 0x0 PUSH2 0x988 JUMPI PUSH2 0x983 DUP3 PUSH2 0x97E DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x626C6F636B206E756D6265722065786365656473203332206269747300000000 DUP2 MSTORE POP PUSH2 0x1E9D JUMP JUMPDEST PUSH2 0x1ECD JUMP JUMPDEST PUSH2 0x992 JUMP JUMPDEST PUSH2 0x992 DUP3 DUP3 PUSH2 0x1F82 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0xFE6944646A362BE70B0925EA999B3D9F755589A63FFCD89E4FB2B0AFFD252C71 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0x9D2 PUSH2 0x1DEE JUMP JUMPDEST PUSH2 0x9DB DUP3 PUSH2 0xC4D JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0xA02 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x102 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0xA25 JUMP JUMPDEST PUSH2 0xA0A PUSH2 0x113F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x102 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH2 0x101 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE MLOAD PUSH32 0x4882C0217331870166B5D239C9F7BE7801BAB4BE26560CD2F8789145D0FD3AF4 SWAP1 PUSH2 0xA71 SWAP1 DUP5 SWAP1 PUSH2 0x2D8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0xA9E PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3E DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3C6F PUSH1 0x3E SWAP2 CODECOPY PUSH2 0x2018 JUMP JUMPDEST PUSH32 0x0 PUSH2 0xADB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3347 JUMP JUMPDEST DUP5 DUP4 DUP2 EQ DUP1 ISZERO PUSH2 0xAEA JUMPI POP DUP1 DUP3 EQ JUMPDEST PUSH2 0xB06 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3357 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB7A JUMPI PUSH2 0xB72 DUP9 DUP9 DUP4 DUP2 DUP2 LT PUSH2 0xB26 JUMPI PUSH2 0xB26 PUSH2 0x3207 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xB3B SWAP2 SWAP1 PUSH2 0x33C2 JUMP JUMPDEST DUP8 DUP8 DUP5 DUP2 DUP2 LT PUSH2 0xB4D JUMPI PUSH2 0xB4D PUSH2 0x3207 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0xB66 JUMPI PUSH2 0xB66 PUSH2 0x3207 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH2 0x20B2 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xB09 JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x104 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xBAF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3303 JUMP JUMPDEST PUSH2 0xBBA DUP4 DUP4 DUP4 PUSH2 0x15C7 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xBC7 PUSH2 0x1DEE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD3 DUP4 DUP4 PUSH2 0x1D33 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0xBF3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3422 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x251909ABF904FC80EAC3F0D4C25E5C800441EA19FDA63C6F0DF08E4F24F926F9 DUP4 PUSH1 0x40 MLOAD PUSH2 0xC2C SWAP2 SWAP1 PUSH2 0x2D8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH2 0xC41 PUSH2 0x1DEE JUMP JUMPDEST PUSH2 0xC4B PUSH1 0x0 PUSH2 0x22C5 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x101 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0xC70 PUSH2 0x113F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x102 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0xC99 SWAP1 DUP4 SWAP1 PUSH2 0x22DE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH2 0xCAB JUMPI POP PUSH1 0x0 DUP4 GT JUMPDEST ISZERO PUSH2 0xD4F JUMPI PUSH1 0x0 PUSH2 0xCBC DUP3 DUP6 PUSH2 0x22F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0xCE3 SWAP1 DUP4 PUSH2 0x22FD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xFD PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP7 DUP2 SSTORE PUSH2 0x102 DUP4 MSTORE SWAP4 DUP2 SWAP1 KECCAK256 DUP11 SWAP1 SSTORE SWAP2 SWAP1 MSTORE SWAP1 SLOAD SWAP1 MLOAD SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0x38FE05BAF9DC12E4E3BFDA3DABA26419E9930BF26EE6227F407CA46F8C9C29BC SWAP2 PUSH2 0xD44 SWAP2 PUSH2 0x2D8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x65 SLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 EQ PUSH2 0xD81 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3478 JUMP JUMPDEST PUSH2 0x892 DUP2 PUSH2 0x22C5 JUMP JUMPDEST PUSH2 0xD92 PUSH2 0x1DEE JUMP JUMPDEST PUSH2 0x892 DUP2 PUSH2 0x2309 JUMP JUMPDEST PUSH2 0xDBC PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x33 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3CAD PUSH1 0x33 SWAP2 CODECOPY PUSH2 0x2018 JUMP JUMPDEST PUSH32 0x0 ISZERO PUSH2 0xDFA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x34BC JUMP JUMPDEST DUP5 DUP4 DUP2 EQ DUP1 ISZERO PUSH2 0xE09 JUMPI POP DUP1 DUP3 EQ JUMPDEST PUSH2 0xE25 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3526 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB7A JUMPI PUSH2 0xEAD DUP9 DUP9 DUP4 DUP2 DUP2 LT PUSH2 0xE45 JUMPI PUSH2 0xE45 PUSH2 0x3207 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE5A SWAP2 SWAP1 PUSH2 0x33C2 JUMP JUMPDEST DUP8 DUP8 DUP5 DUP2 DUP2 LT PUSH2 0xE6C JUMPI PUSH2 0xE6C PUSH2 0x3207 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xE81 SWAP2 SWAP1 PUSH2 0x354D JUMP JUMPDEST DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0xE93 JUMPI PUSH2 0xE93 PUSH2 0x3207 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xEA8 SWAP2 SWAP1 PUSH2 0x354D JUMP JUMPDEST PUSH2 0x2364 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xE28 JUMP JUMPDEST PUSH2 0xED6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x33 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3CE0 PUSH1 0x33 SWAP2 CODECOPY PUSH2 0x2018 JUMP JUMPDEST DUP3 MLOAD DUP3 MLOAD DUP2 EQ DUP1 ISZERO PUSH2 0xEE8 JUMPI POP DUP2 MLOAD DUP2 EQ JUMPDEST PUSH2 0xF04 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x35A2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xF6D JUMPI PUSH2 0xF65 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xF24 JUMPI PUSH2 0xF24 PUSH2 0x3207 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xF3E JUMPI PUSH2 0xF3E PUSH2 0x3207 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xF58 JUMPI PUSH2 0xF58 PUSH2 0x3207 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x25CD JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xF07 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0xF94 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0xFAE JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xFAE JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0xFCA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x35FD JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0xFED JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x104 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH2 0x105 DUP1 SLOAD SWAP3 DUP8 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1027 PUSH2 0x27CC JUMP JUMPDEST PUSH2 0x1030 DUP3 PUSH2 0x27FB JUMP JUMPDEST PUSH2 0x1039 DUP4 PUSH2 0x2309 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xF6D JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH2 0x107B SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x3621 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x892 DUP2 PUSH2 0x104 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB0772D0B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x250 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x36AF JUMP JUMPDEST PUSH2 0x104 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1135 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3303 JUMP JUMPDEST PUSH2 0x8DB DUP3 DUP3 PUSH2 0x1B35 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x116D PUSH32 0x0 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x117A PUSH2 0x1DEE JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH2 0x11AB PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST NUMBER SWAP1 JUMP JUMPDEST TIMESTAMP SWAP1 JUMP JUMPDEST PUSH1 0xC9 SLOAD DUP2 GT ISZERO PUSH2 0x892 JUMPI PUSH1 0xC9 SLOAD DUP2 PUSH1 0x40 MLOAD PUSH4 0x792BFB1B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP3 SWAP2 SWAP1 PUSH2 0x36EA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x100 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH2 0x107 DUP4 MSTORE DUP2 DUP5 KECCAK256 PUSH1 0xFE SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 SLOAD SWAP1 SWAP3 PUSH2 0x124B PUSH2 0x113F JUMP JUMPDEST SWAP1 POP PUSH32 0x0 PUSH2 0x12B3 JUMPI PUSH2 0x12B1 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x626C6F636B206E756D6265722065786365656473203332206269747300000000 DUP2 MSTORE POP PUSH2 0x1E9D JUMP JUMPDEST POP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH2 0x12EA JUMPI PUSH1 0x1 DUP6 ADD SLOAD PUSH4 0xFFFFFFFF AND PUSH2 0x12F0 JUMP JUMPDEST DUP4 PUSH1 0x2 ADD SLOAD JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH2 0x1301 JUMPI POP DUP1 DUP3 GT JUMPDEST ISZERO PUSH2 0x130A JUMPI DUP1 SWAP2 POP JUMPDEST PUSH1 0x0 PUSH2 0x1353 DUP4 PUSH32 0x0 PUSH2 0x1349 JUMPI DUP8 SLOAD PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x22DE JUMP JUMPDEST DUP7 PUSH1 0x1 ADD SLOAD PUSH2 0x22DE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH2 0x1365 JUMPI POP PUSH1 0x0 DUP5 GT JUMPDEST ISZERO PUSH2 0x1528 JUMPI PUSH1 0x0 PUSH2 0x13D7 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x47BD3718 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13D1 SWAP2 SWAP1 PUSH2 0x329B JUMP JUMPDEST DUP10 PUSH2 0x2822 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x13E5 DUP4 DUP8 PUSH2 0x22F1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP4 GT PUSH2 0x1405 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x140F JUMP JUMPDEST PUSH2 0x140F DUP3 DUP5 PUSH2 0x2840 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH32 0x0 PUSH2 0x1448 JUMPI DUP10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH2 0x1454 JUMP JUMPDEST DUP9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x14B6 PUSH2 0x147C PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND DUP2 MSTORE POP DUP6 PUSH2 0x2884 JUMP JUMPDEST MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1A DUP2 MSTORE PUSH32 0x6E657720696E6465782065786365656473203232342062697473000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x28B0 JUMP JUMPDEST SWAP1 POP PUSH32 0x0 ISZERO PUSH2 0x1503 JUMPI DUP10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP3 AND OR DUP11 SSTORE PUSH1 0x1 DUP11 ADD DUP9 SWAP1 SSTORE PUSH2 0x151E JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP9 AND PUSH1 0x1 PUSH1 0xE0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP3 AND OR DUP12 SSTORE JUMPDEST POP POP POP POP POP PUSH2 0x157C JUMP JUMPDEST DUP1 ISZERO PUSH2 0x157C JUMPI PUSH32 0x0 ISZERO PUSH2 0x1560 JUMPI PUSH1 0x1 DUP6 ADD DUP4 SWAP1 SSTORE PUSH2 0x157C JUMP JUMPDEST DUP6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0xE0 SHL PUSH4 0xFFFFFFFF DUP6 AND MUL OR DUP7 SSTORE JUMPDEST DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xBFEED4EB85C013B0E466FDFDBAA785159FF7986078247DC95F1C717A5BD6BCA2 DUP9 PUSH1 0x40 MLOAD PUSH2 0x15B5 SWAP2 SWAP1 PUSH2 0x3716 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x100 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH2 0x107 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SWAP1 SWAP2 PUSH32 0x0 PUSH2 0x1622 JUMPI DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH2 0x162E JUMP JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x103 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP11 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP1 DUP2 SWAP1 SSTORE SWAP2 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x1684 JUMPI POP PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL DUP3 LT ISZERO JUMPDEST ISZERO PUSH2 0x169A JUMPI POP PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x16B1 DUP6 DUP6 PUSH2 0x22DE JUMP JUMPDEST DUP2 MSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0x172E DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95DD9193 DUP11 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16E7 SWAP2 SWAP1 PUSH2 0x315D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1704 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1728 SWAP2 SWAP1 PUSH2 0x329B JUMP JUMPDEST DUP9 PUSH2 0x2822 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x17CC JUMPI PUSH1 0x0 PUSH2 0x1742 DUP3 DUP5 PUSH2 0x28DB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x1769 SWAP1 DUP4 PUSH2 0x22FD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP13 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xFD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD SWAP3 SWAP4 POP SWAP2 SWAP1 DUP14 AND SWAP1 PUSH32 0x510D7612DA9CA257889EABDFBE0366AAEA10020BE46F7810F4AFB2111D80AA93 SWAP1 PUSH2 0x17C1 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP13 SWAP1 PUSH2 0x3724 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH2 0x106 DUP4 MSTORE DUP2 DUP5 KECCAK256 PUSH1 0xFF SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 SLOAD SWAP1 SWAP3 PUSH2 0x180D PUSH2 0x113F JUMP JUMPDEST SWAP1 POP PUSH32 0x0 PUSH2 0x1875 JUMPI PUSH2 0x1873 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x626C6F636B206E756D6265722065786365656473203332206269747300000000 DUP2 MSTORE POP PUSH2 0x1E9D JUMP JUMPDEST POP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH2 0x18AC JUMPI PUSH1 0x1 DUP6 ADD SLOAD PUSH4 0xFFFFFFFF AND PUSH2 0x18B2 JUMP JUMPDEST DUP4 PUSH1 0x2 ADD SLOAD JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH2 0x18C3 JUMPI POP DUP1 DUP3 GT JUMPDEST ISZERO PUSH2 0x18CC JUMPI DUP1 SWAP2 POP JUMPDEST PUSH1 0x0 PUSH2 0x190B DUP4 PUSH32 0x0 PUSH2 0x1349 JUMPI DUP8 SLOAD PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x22DE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH2 0x191D JUMPI POP PUSH1 0x0 DUP5 GT JUMPDEST ISZERO PUSH2 0x1A9D JUMPI PUSH1 0x0 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1962 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1986 SWAP2 SWAP1 PUSH2 0x329B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1994 DUP4 DUP8 PUSH2 0x22F1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP4 GT PUSH2 0x19B4 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x19BE JUMP JUMPDEST PUSH2 0x19BE DUP3 DUP5 PUSH2 0x2840 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH32 0x0 PUSH2 0x19F7 JUMPI DUP10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH2 0x1A03 JUMP JUMPDEST DUP9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1A2B PUSH2 0x147C PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND DUP2 MSTORE POP DUP6 PUSH2 0x2884 JUMP JUMPDEST SWAP1 POP PUSH32 0x0 ISZERO PUSH2 0x1A78 JUMPI DUP10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP3 AND OR DUP11 SSTORE PUSH1 0x1 DUP11 ADD DUP9 SWAP1 SSTORE PUSH2 0x1A93 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP9 AND PUSH1 0x1 PUSH1 0xE0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP3 AND OR DUP12 SSTORE JUMPDEST POP POP POP POP POP PUSH2 0x1AF8 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1AF8 JUMPI PUSH32 0x0 PUSH2 0x1AED JUMPI DUP6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0xE0 SHL PUSH4 0xFFFFFFFF DUP6 AND SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 OR DUP8 SSTORE PUSH2 0x1AF6 JUMP JUMPDEST DUP3 DUP6 PUSH1 0x1 ADD DUP2 SWAP1 SSTORE JUMPDEST POP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP1 PUSH32 0x6A7B996800070D8BC0F9A3DDCB0A4B09BC1653F76381D745444956366AFD423A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH2 0x106 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SWAP1 SWAP2 PUSH32 0x0 PUSH2 0x1B8F JUMPI DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH2 0x1B9B JUMP JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFC PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP10 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP1 DUP2 SWAP1 SSTORE SWAP2 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x1BF0 JUMPI POP PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL DUP3 LT ISZERO JUMPDEST ISZERO PUSH2 0x1C06 JUMPI POP PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x1C1D DUP6 DUP6 PUSH2 0x22DE JUMP JUMPDEST SWAP1 MSTORE PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1C51 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x315D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C6E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C92 SWAP2 SWAP1 PUSH2 0x329B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1CA0 DUP3 DUP5 PUSH2 0x28DB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x1CC7 SWAP1 DUP4 PUSH2 0x22FD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP12 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xFD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD SWAP3 SWAP4 POP SWAP2 SWAP1 DUP13 AND SWAP1 PUSH32 0x9563FF6035B973F2E4514AD9315010C220EB74B0C33A782A18118A199A97E442 SWAP1 PUSH2 0x1D1F SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP13 SWAP1 PUSH2 0x3724 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x105 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1D69 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x315D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D86 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DAA SWAP2 SWAP1 PUSH2 0x329B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x1DBC JUMPI POP DUP1 DUP4 GT ISZERO JUMPDEST ISZERO PUSH2 0x1DE3 JUMPI PUSH2 0x105 SLOAD PUSH2 0x1DD9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP6 PUSH2 0x2904 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0x1DE8 JUMP JUMPDEST DUP3 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC4B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3764 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1E3E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x37B6 JUMP JUMPDEST PUSH1 0x97 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP1 PUSH32 0x66FD58E82F7B31A2A5C30E0888F3093EFE4E111B00CD2B0C31FE014601293AA0 SWAP1 PUSH2 0x1E91 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x37C6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH4 0xFFFFFFFF DUP5 GT ISZERO PUSH2 0x1EC5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP2 SWAP1 PUSH2 0x3837 JUMP JUMPDEST POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH2 0x100 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 DUP2 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP1 SUB PUSH2 0x1F24 JUMPI DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL OR DUP3 SSTORE JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x0 SUB PUSH2 0x1F55 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL OR DUP2 SSTORE JUMPDEST DUP1 SLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP4 AND PUSH1 0x1 PUSH1 0xE0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP4 DUP5 AND DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD SWAP1 SWAP3 AND SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x106 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH2 0x107 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 DUP2 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP1 SUB PUSH2 0x1FDA JUMPI DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL OR DUP3 SSTORE JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x0 SUB PUSH2 0x200B JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL OR DUP2 SSTORE JUMPDEST PUSH1 0x1 SWAP1 DUP2 ADD DUP4 SWAP1 SSTORE ADD SSTORE POP JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x40 MLOAD PUSH4 0x18C5E8AB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x18C5E8AB SWAP1 PUSH2 0x204B SWAP1 CALLER SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x3848 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2068 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x208C SWAP2 SWAP1 PUSH2 0x3230 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x8DB JUMPI CALLER ADDRESS DUP4 PUSH1 0x40 MLOAD PUSH4 0x4A3FA293 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3868 JUMP JUMPDEST PUSH2 0x104 SLOAD PUSH1 0x40 MLOAD PUSH4 0x3D98A1E5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x3D98A1E5 SWAP1 PUSH2 0x20E3 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x317F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2100 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2124 SWAP2 SWAP1 PUSH2 0x3230 JUMP JUMPDEST PUSH2 0x2140 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x38D0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x214A PUSH2 0x113F JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT PUSH2 0x216B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x393A JUMP JUMPDEST DUP1 DUP3 GT PUSH2 0x218A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x393A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x106 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x2 SWAP1 DUP2 ADD SLOAD PUSH2 0x107 SWAP1 SWAP4 MSTORE SWAP3 KECCAK256 SWAP1 SWAP2 ADD SLOAD DUP2 ISZERO DUP1 PUSH2 0x21C4 JUMPI POP DUP3 DUP3 GT JUMPDEST PUSH2 0x21E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3990 JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x21EC JUMPI POP DUP3 DUP2 GT JUMPDEST PUSH2 0x2208 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3990 JUMP JUMPDEST DUP5 DUP3 EQ PUSH2 0x2267 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH2 0x106 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x2 ADD DUP8 SWAP1 SSTORE MLOAD PUSH32 0xE68F65B8654C09ACFDC448A42C8A0D72697206FD0C23C357022FA1CD1626861 SWAP1 PUSH2 0x225E SWAP1 DUP9 SWAP1 PUSH2 0x2D8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST DUP4 DUP2 EQ PUSH2 0x22BD JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH2 0x107 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x2 ADD DUP7 SWAP1 SSTORE MLOAD PUSH32 0x7AEFE759BC95E5C94C6D919EEF378C410527D0D85F409986EC8D54A99EA8395E SWAP1 PUSH2 0xD44 SWAP1 DUP8 SWAP1 PUSH2 0x2D8F JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH2 0x892 DUP2 PUSH2 0x295A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22EA DUP3 DUP5 PUSH2 0x39B6 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22EA DUP3 DUP5 PUSH2 0x39C9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22EA DUP3 DUP5 PUSH2 0x39E8 JUMP JUMPDEST PUSH1 0xC9 SLOAD DUP2 GT PUSH2 0x232A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3A3A JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC2D09FEF144F7C8A86F71EA459F8FC17F675768EB1AE369CBD77FB31D467AAFA SWAP1 PUSH2 0x1E91 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x36EA JUMP JUMPDEST PUSH2 0x104 SLOAD PUSH1 0x40 MLOAD PUSH4 0x3D98A1E5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x3D98A1E5 SWAP1 PUSH2 0x2395 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x317F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23D6 SWAP2 SWAP1 PUSH2 0x3230 JUMP JUMPDEST PUSH2 0x23F2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x38D0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x23FC PUSH2 0x113F JUMP JUMPDEST SWAP1 POP DUP1 DUP4 PUSH4 0xFFFFFFFF AND GT PUSH2 0x2423 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3AA4 JUMP JUMPDEST DUP1 DUP3 PUSH4 0xFFFFFFFF AND GT PUSH2 0x2448 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3AA4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 SWAP1 DUP2 ADD SLOAD PUSH2 0x100 SWAP1 SWAP4 MSTORE SWAP3 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH4 0xFFFFFFFF SWAP2 DUP3 AND SWAP2 AND DUP2 ISZERO DUP1 PUSH2 0x2491 JUMPI POP DUP3 DUP3 PUSH4 0xFFFFFFFF AND GT JUMPDEST PUSH2 0x24AD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3990 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND ISZERO DUP1 PUSH2 0x24C5 JUMPI POP DUP3 DUP2 PUSH4 0xFFFFFFFF AND GT JUMPDEST PUSH2 0x24E1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3990 JUMP JUMPDEST DUP5 PUSH4 0xFFFFFFFF AND DUP3 PUSH4 0xFFFFFFFF AND EQ PUSH2 0x255B JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xFB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF DUP10 AND OR SWAP1 SSTORE MLOAD PUSH32 0x41B697BF2627E0A03F253382759BAAAB2469897004CC619465A3D8F4BB6B3FEC SWAP1 PUSH2 0x2552 SWAP1 DUP9 SWAP1 PUSH2 0x3AB4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST DUP4 PUSH4 0xFFFFFFFF AND DUP2 PUSH4 0xFFFFFFFF AND EQ PUSH2 0x22BD JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH2 0x100 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF DUP9 AND OR SWAP1 SSTORE MLOAD PUSH32 0x4163EB203170B7FACECC8D7307E3F8AFFA8826D4DF30FC722F8F8CE17988EB91 SWAP1 PUSH2 0xD44 SWAP1 DUP8 SWAP1 PUSH2 0x3AB4 JUMP JUMPDEST PUSH2 0x104 SLOAD PUSH1 0x40 MLOAD PUSH4 0x3D98A1E5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x3D98A1E5 SWAP1 PUSH2 0x25FE SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x317F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x261B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x263F SWAP2 SWAP1 PUSH2 0x3230 JUMP JUMPDEST PUSH2 0x265B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x38D0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 EQ PUSH2 0x26D7 JUMPI PUSH2 0x2683 DUP4 PUSH2 0x17D7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xFF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x24741480445E83BAEA9EB28086E16A4377EBB4F003C773E386496FD90B3ED04E SWAP1 PUSH2 0x26CE SWAP1 DUP6 SWAP1 PUSH2 0x2D8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 EQ PUSH2 0xBBA JUMPI PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAA5AF0FD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2741 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2765 SWAP2 SWAP1 PUSH2 0x329B JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP PUSH2 0x2773 DUP5 DUP3 PUSH2 0x1214 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xFE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x2091432BBF4AA40F4785B469E931D32C5F5C6BA66DCF702A99CBE776DF729C3C SWAP1 PUSH2 0x27BE SWAP1 DUP6 SWAP1 PUSH2 0x2D8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x27F3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3B0A JUMP JUMPDEST PUSH2 0xC4B PUSH2 0x29AC JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x89D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3B0A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22EA PUSH2 0x2839 DUP5 PUSH8 0xDE0B6B3A7640000 PUSH2 0x22F1 JUMP JUMPDEST DUP4 MLOAD PUSH2 0x29DC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x287B PUSH2 0x2875 DUP7 PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL PUSH2 0x22F1 JUMP JUMPDEST DUP6 PUSH2 0x29DC JUMP JUMPDEST SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x287B DUP6 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x22FD JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP5 GT ISZERO PUSH2 0x1EC5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP2 SWAP1 PUSH2 0x3837 JUMP JUMPDEST PUSH1 0x0 PUSH11 0xC097CE7BC90715B34B9F1 PUSH1 0x24 SHL PUSH2 0x28FA DUP5 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x22F1 JUMP JUMPDEST PUSH2 0x22EA SWAP2 SWAP1 PUSH2 0x3B30 JUMP JUMPDEST PUSH2 0xBBA DUP4 PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x2923 SWAP3 SWAP2 SWAP1 PUSH2 0x3B44 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x29E8 JUMP JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x29D3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3B0A JUMP JUMPDEST PUSH2 0xC4B CALLER PUSH2 0x22C5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22EA DUP3 DUP5 PUSH2 0x3B30 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A3D DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2A7A SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH1 0x0 EQ DUP1 PUSH2 0x2A5E JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2A5E SWAP2 SWAP1 PUSH2 0x3230 JUMP JUMPDEST PUSH2 0xBBA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3B99 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x2A89 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x2A91 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x2AB3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3BEC JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x2ACF SWAP2 SWAP1 PUSH2 0x3C1E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2B0C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2B11 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x2B22 DUP8 DUP4 DUP4 DUP8 PUSH2 0x2B2D JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x2B6C JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x2B65 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x2B65 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP1 PUSH2 0x3C5E JUMP JUMPDEST POP DUP2 PUSH2 0x2A89 JUMP JUMPDEST PUSH2 0x2A89 DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x2B81 JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76A SWAP2 SWAP1 PUSH2 0x3837 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1DE8 JUMP JUMPDEST PUSH2 0x2BB5 DUP2 PUSH2 0x2B9B JUMP JUMPDEST DUP2 EQ PUSH2 0x892 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1DE8 DUP2 PUSH2 0x2BAC JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x2C07 JUMPI PUSH2 0x2C07 PUSH2 0x2BCB JUMP JUMPDEST PUSH1 0x40 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C19 PUSH1 0x40 MLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x2C25 DUP3 DUP3 PUSH2 0x2BE1 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x2C44 JUMPI PUSH2 0x2C44 PUSH2 0x2BCB JUMP JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DE8 DUP3 PUSH2 0x2B9B JUMP JUMPDEST PUSH2 0x2BB5 DUP2 PUSH2 0x2C4E JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1DE8 DUP2 PUSH2 0x2C59 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C80 PUSH2 0x2C7B DUP5 PUSH2 0x2C2A JUMP JUMPDEST PUSH2 0x2C0E JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP1 POP PUSH1 0x20 DUP1 DUP3 ADD SWAP1 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x2C9F JUMPI PUSH2 0x2C9F PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2CC3 JUMPI DUP1 PUSH2 0x2CB4 DUP9 DUP3 PUSH2 0x2C62 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x2CA1 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2CE1 JUMPI PUSH2 0x2CE1 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2A89 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x2C6D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2D07 JUMPI PUSH2 0x2D07 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2D13 DUP6 DUP6 PUSH2 0x2BC0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2D33 JUMPI PUSH2 0x2D33 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2D3F DUP6 DUP3 DUP7 ADD PUSH2 0x2CCD JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D5E JUMPI PUSH2 0x2D5E PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2A89 DUP5 DUP5 PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP2 AND JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1DE8 DUP3 DUP5 PUSH2 0x2D6A JUMP JUMPDEST DUP1 PUSH2 0x2D75 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1DE8 DUP3 DUP5 PUSH2 0x2D89 JUMP JUMPDEST DUP1 PUSH2 0x2BB5 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1DE8 DUP2 PUSH2 0x2D9D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2DC3 JUMPI PUSH2 0x2DC3 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2DCD PUSH1 0x20 PUSH2 0x2C0E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2DDB DUP5 DUP5 PUSH2 0x2DA3 JUMP JUMPDEST DUP3 MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2DFA JUMPI PUSH2 0x2DFA PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2E06 DUP6 DUP6 PUSH2 0x2BC0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2D3F DUP6 DUP3 DUP7 ADD PUSH2 0x2DAE JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND PUSH2 0x2D75 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x2E31 DUP3 DUP7 PUSH2 0x2D6A JUMP JUMPDEST PUSH2 0x2E3E PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x2E17 JUMP JUMPDEST PUSH2 0x2A89 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2E17 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2E61 JUMPI PUSH2 0x2E61 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2E6D DUP6 DUP6 PUSH2 0x2BC0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2D3F DUP6 DUP3 DUP7 ADD PUSH2 0x2DA3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2E94 JUMPI PUSH2 0x2E94 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2EA0 DUP6 DUP6 PUSH2 0x2BC0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2D3F DUP6 DUP3 DUP7 ADD PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2EC6 JUMPI PUSH2 0x2EC6 PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2EE1 JUMPI PUSH2 0x2EE1 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x2EFC JUMPI PUSH2 0x2EFC PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x2F1F JUMPI PUSH2 0x2F1F PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2F39 JUMPI PUSH2 0x2F39 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F45 DUP10 DUP3 DUP11 ADD PUSH2 0x2EB1 JUMP JUMPDEST SWAP7 POP SWAP7 POP POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2F67 JUMPI PUSH2 0x2F67 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F73 DUP10 DUP3 DUP11 ADD PUSH2 0x2EB1 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2F95 JUMPI PUSH2 0x2F95 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2FA1 DUP10 DUP3 DUP11 ADD PUSH2 0x2EB1 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2FC8 JUMPI PUSH2 0x2FC8 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2FD4 DUP7 DUP7 PUSH2 0x2BC0 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x2FE5 DUP7 DUP3 DUP8 ADD PUSH2 0x2BC0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x2FF6 DUP7 DUP3 DUP8 ADD PUSH2 0x2DAE JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3015 JUMPI PUSH2 0x3015 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2A89 DUP5 DUP5 PUSH2 0x2DA3 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x302F DUP3 DUP7 PUSH2 0x2D6A JUMP JUMPDEST PUSH2 0x303C PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x2D89 JUMP JUMPDEST PUSH2 0x2A89 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2D89 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3057 PUSH2 0x2C7B DUP5 PUSH2 0x2C2A JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP1 POP PUSH1 0x20 DUP1 DUP3 ADD SWAP1 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3076 JUMPI PUSH2 0x3076 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2CC3 JUMPI DUP1 PUSH2 0x308B DUP9 DUP3 PUSH2 0x2DA3 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x3078 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x30AE JUMPI PUSH2 0x30AE PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2A89 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x3049 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x30D6 JUMPI PUSH2 0x30D6 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x30F0 JUMPI PUSH2 0x30F0 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x30FC DUP7 DUP3 DUP8 ADD PUSH2 0x2CCD JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x311C JUMPI PUSH2 0x311C PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3128 DUP7 DUP3 DUP8 ADD PUSH2 0x309A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3148 JUMPI PUSH2 0x3148 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2FF6 DUP7 DUP3 DUP8 ADD PUSH2 0x309A JUMP JUMPDEST PUSH2 0x2D75 DUP2 PUSH2 0x2B9B JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1DE8 DUP3 DUP5 PUSH2 0x3154 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DE8 DUP3 PUSH2 0x2C4E JUMP JUMPDEST PUSH2 0x2D75 DUP2 PUSH2 0x316B JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1DE8 DUP3 DUP5 PUSH2 0x3176 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x31A6 JUMPI PUSH2 0x31A6 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x31B2 DUP8 DUP8 PUSH2 0x2C62 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x31C3 DUP8 DUP3 DUP9 ADD PUSH2 0x2C62 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x31D4 DUP8 DUP3 DUP9 ADD PUSH2 0x2DA3 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0x31E5 DUP8 DUP3 DUP9 ADD PUSH2 0x2BC0 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x2D75 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1DE8 DUP3 DUP5 PUSH2 0x31F1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x2BB5 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1DE8 DUP2 PUSH2 0x321D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3245 JUMPI PUSH2 0x3245 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2A89 DUP5 DUP5 PUSH2 0x3225 JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH21 0x1B585C9AD95D081B5D5CDD081899481B1A5CDD1959 PUSH1 0x5A SHL DUP2 MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3251 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1DE8 DUP2 PUSH2 0x2D9D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x32B0 JUMPI PUSH2 0x32B0 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2A89 DUP5 DUP5 PUSH2 0x3290 JUMP JUMPDEST PUSH1 0x27 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4F6E6C7920636F6D7074726F6C6C65722063616E2063616C6C20746869732066 DUP2 MSTORE PUSH7 0x3AB731BA34B7B7 PUSH1 0xC9 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x32BC JUMP JUMPDEST PUSH1 0x19 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x54696D652D6261736564206F7065726174696F6E206F6E6C7900000000000000 DUP2 MSTORE SWAP2 POP PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3313 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH1 0x41 DUP2 MSTORE PUSH32 0x526577617264734469737472696275746F723A3A7365744C6173745265776172 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x64696E67426C6F636B54696D657374616D707320696E76616C696420696E7075 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0xFA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x33D7 JUMPI PUSH2 0x33D7 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2A89 DUP5 DUP5 PUSH2 0x2C62 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x696E73756666696369656E7420726577617264546F6B656E20666F7220677261 DUP2 MSTORE PUSH2 0x1B9D PUSH1 0xF2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x33E3 JUMP JUMPDEST PUSH1 0x29 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4F776E61626C6532537465703A2063616C6C6572206973206E6F742074686520 DUP2 MSTORE PUSH9 0x3732BB9037BBB732B9 PUSH1 0xB9 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3432 JUMP JUMPDEST PUSH1 0x1A DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x426C6F636B2D6261736564206F7065726174696F6E206F6E6C79000000000000 DUP2 MSTORE SWAP2 POP PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3488 JUMP JUMPDEST PUSH1 0x38 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x526577617264734469737472696275746F723A3A7365744C6173745265776172 DUP2 MSTORE PUSH32 0x64696E67426C6F636B7320696E76616C696420696E7075740000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x34CC JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND PUSH2 0x2BB5 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1DE8 DUP2 PUSH2 0x3536 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3562 JUMPI PUSH2 0x3562 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2A89 DUP5 DUP5 PUSH2 0x3542 JUMP JUMPDEST PUSH1 0x1C DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x696E76616C696420736574526577617264546F6B656E53706565647300000000 DUP2 MSTORE SWAP2 POP PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x356E JUMP JUMPDEST PUSH1 0x2E DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 DUP2 MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x35B2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND PUSH2 0x1DE8 JUMP JUMPDEST PUSH2 0x2D75 DUP2 PUSH2 0x360D JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1DE8 DUP3 DUP5 PUSH2 0x3618 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1DE8 DUP2 PUSH2 0x2C59 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3648 PUSH2 0x2C7B DUP5 PUSH2 0x2C2A JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP1 POP PUSH1 0x20 DUP1 DUP3 ADD SWAP1 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3667 JUMPI PUSH2 0x3667 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2CC3 JUMPI DUP1 PUSH2 0x367C DUP9 DUP3 PUSH2 0x362F JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x3669 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x369F JUMPI PUSH2 0x369F PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x2A89 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x363A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x36C4 JUMPI PUSH2 0x36C4 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x36DE JUMPI PUSH2 0x36DE PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2A89 DUP5 DUP3 DUP6 ADD PUSH2 0x368B JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x36F8 DUP3 DUP6 PUSH2 0x2D89 JUMP JUMPDEST PUSH2 0x22EA PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2D89 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0xD4F DUP5 DUP3 PUSH2 0x2D89 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1DE8 DUP3 DUP5 PUSH2 0x3705 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x302F DUP3 DUP7 PUSH2 0x2D89 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 SWAP2 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3732 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x696E76616C696420616365737320636F6E74726F6C206D616E61676572206164 DUP2 MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3774 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x37D4 DUP3 DUP6 PUSH2 0x3154 JUMP JUMPDEST PUSH2 0x22EA PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3154 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x37FC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x37E4 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x380F DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x3826 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x37E1 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x22EA DUP2 DUP5 PUSH2 0x3805 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x3856 DUP3 DUP6 PUSH2 0x3154 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x2A89 DUP2 DUP5 PUSH2 0x3805 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x3876 DUP3 DUP7 PUSH2 0x3154 JUMP JUMPDEST PUSH2 0x3883 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x3154 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x3895 DUP2 DUP5 PUSH2 0x3805 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH32 0x726577617264546F6B656E206D61726B6574206973206E6F74206C6973746564 SWAP2 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x389E JUMP JUMPDEST PUSH1 0x3B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x73657474696E67206C61737420726577617264696E672074696D657374616D70 DUP2 MSTORE PUSH32 0x20696E207468652070617374206973206E6F7420616C6C6F7765640000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x38E0 JUMP JUMPDEST PUSH1 0x29 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x7468697320526577617264734469737472696275746F7220697320616C726561 DUP2 MSTORE PUSH9 0x191E481B1BD8DAD959 PUSH1 0xBA SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x394A JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x1DE8 JUMPI PUSH2 0x1DE8 PUSH2 0x39A0 JUMP JUMPDEST DUP2 DUP2 MUL DUP1 DUP3 ISZERO DUP4 DUP3 DIV DUP6 EQ OR PUSH2 0x39E1 JUMPI PUSH2 0x39E1 PUSH2 0x39A0 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x1DE8 JUMPI PUSH2 0x1DE8 PUSH2 0x39A0 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x436F6D7074726F6C6C65723A20496E76616C6964206D61784C6F6F70734C696D DUP2 MSTORE PUSH2 0x1A5D PUSH1 0xF2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x39FB JUMP JUMPDEST PUSH1 0x37 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x73657474696E67206C61737420726577617264696E6720626C6F636B20696E20 DUP2 MSTORE PUSH32 0x7468652070617374206973206E6F7420616C6C6F776564000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3A4A JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1DE8 DUP3 DUP5 PUSH2 0x2E17 JUMP JUMPDEST PUSH1 0x2B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 DUP2 MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3AC2 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3B3F JUMPI PUSH2 0x3B3F PUSH2 0x3B1A JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x36F8 DUP3 DUP6 PUSH2 0x3154 JUMP JUMPDEST PUSH1 0x2A DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E DUP2 MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3B52 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F DUP2 MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x32FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3BA9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C06 DUP3 MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3C14 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x37E1 JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22EA DUP3 DUP5 PUSH2 0x3BFC JUMP JUMPDEST PUSH1 0x1D DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 DUP2 MSTORE SWAP2 POP PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1DE8 DUP2 PUSH2 0x3C2A JUMP INVALID PUSH20 0x65744C617374526577617264696E67426C6F636B SLOAD PUSH10 0x6D657374616D70732861 PUSH5 0x6472657373 JUMPDEST TSTORE 0x2C PUSH22 0x696E743235365B5D2C75696E743235365B5D29736574 0x4C PUSH2 0x7374 MSTORE PUSH6 0x77617264696E PUSH8 0x426C6F636B732861 PUSH5 0x6472657373 JUMPDEST TSTORE 0x2C PUSH22 0x696E7433325B5D2C75696E7433325B5D297365745265 PUSH24 0x617264546F6B656E53706565647328616464726573735B5D 0x2C PUSH22 0x696E743235365B5D2C75696E743235365B5D29A26469 PUSH17 0x667358221220DE35FE96C63C31606A6974 BLOBHASH PUSH0 EXTCODESIZE SWAP2 GT PUSH12 0x249CA932059888F347A80F6A PUSH32 0xF6E464736F6C6343000819003300000000000000000000000000000000000000 ","sourceMap":"2370:32310:36:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15744:804;;;;;;:::i;:::-;;:::i;:::-;;8356:133;;;;;;:::i;:::-;;:::i;2102:147:26:-;;;;;;:::i;:::-;;:::i;2673:44:36:-;;-1:-1:-1;;;2673:44:36;;;;;;;;;:::i;:::-;;;;;;;;1436:53:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;9091:182:36:-;;;;;;:::i;:::-;;:::i;6931:399::-;;;;;;:::i;:::-;;:::i;1941:61:37:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1941:61:37;;;;-1:-1:-1;;;1941:61:37;;;;;;;;;;;;;;;;;;:::i;13167:639:36:-;;;;;;:::i;:::-;;:::i;1272:79:37:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;11952:983:36;;;;;;:::i;:::-;;:::i;313:47:44:-;;;;;8108:242:36;;;;;;:::i;:::-;;:::i;8807:278::-;;;;;;:::i;:::-;;:::i;2479:79:37:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2085:101:1;;;:::i;14710:802:36:-;;;;;;:::i;:::-;;:::i;1807:58:37:-;;;;;;:::i;:::-;;;;;;;;;;;;;;2031:212:0;;;:::i;1619:58:37:-;;;;;;:::i;:::-;;;;;;;;;;;;;;14418:101:36;;;;;;:::i;:::-;;:::i;2716:79:37:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2716:79:37;;;;;;;;;;;;;;;;:::i;10634:813:36:-;;;;;;:::i;:::-;;:::i;9629:547::-;;;;;;:::i;:::-;;:::i;1462:85:1:-;1534:6;;-1:-1:-1;;;;;1534:6:1;1462:85;;;;;;;:::i;2871:79:37:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2871:79:37;;;;;;;1078:61;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1078:61:37;;;;-1:-1:-1;;;1078:61:37;;;;;;;;;2345:125:26;2442:21;;-1:-1:-1;;;;;2442:21:26;2345:125;;;;;;;:::i;6277:406:36:-;;;;;;:::i;:::-;;:::i;323:28:34:-;;;;;;2291:55:37;;;;;;:::i;:::-;;;;;;;;;;;;;;497:33:44;;;;;;;;;;;;:::i;14130:128:36:-;;;;;;:::i;:::-;;:::i;13812:163::-;;;;;;:::i;:::-;;:::i;2447:116:44:-;;;:::i;1144:99:0:-;1223:13;;-1:-1:-1;;;;;1223:13:0;1144:99;;2111:63:37;;;;;;:::i;:::-;;;;;;;;;;;;;;1436:178:0;;;;;;:::i;:::-;;:::i;2604:36:37:-;;;;;-1:-1:-1;;;;;2604:36:37;;;15744:804:36;15851:14;;15876:29;15851:14;15876:15;:29::i;:::-;15921:9;15916:534;15936:12;15932:1;:16;15916:534;;;15969:13;15985:7;15993:1;15985:10;;;;;;;;:::i;:::-;;;;;;;;;;;16017:11;;:34;;-1:-1:-1;;;16017:34:36;;15985:10;;-1:-1:-1;;;;;;16017:11:36;;:26;;:34;;15985:10;;16017:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16009:68;;;;-1:-1:-1;;;16009:68:36;;;;;;;:::i;:::-;;;;;;;;;16091:22;16116:39;;;;;;;;16132:6;-1:-1:-1;;;;;16132:18:36;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16116:39;;16091:64;-1:-1:-1;16169:59:36;16207:6;16091:64;16169:29;:59::i;:::-;16242:68;16281:6;16290;16298:11;16242:30;:68::i;:::-;16324:46;16362:6;16324:29;:46::i;:::-;16384:55;16423:6;16432;16384:30;:55::i;:::-;-1:-1:-1;;15950:3:36;;15916:534;;;-1:-1:-1;;;;;;16514:26:36;;;;;;:18;:26;;;;;;16488:53;;16506:6;;16488:17;:53::i;:::-;-1:-1:-1;;;;;16459:26:36;;;;;;;:18;:26;;;;;:82;;;;-1:-1:-1;;15744:804:36:o;8356:133::-;5301:11;;-1:-1:-1;;;;;5301:11:36;5317:10;5293:34;5285:86;;;;-1:-1:-1;;;5285:86:36;;;;;;;:::i;:::-;8445:37:::1;8475:6;8445:29;:37::i;:::-;8356:133:::0;:::o;2102:147:26:-;1355:13:1;:11;:13::i;:::-;2195:47:26::1;2220:21;2195:24;:47::i;9091:182:36:-:0;5301:11;;-1:-1:-1;;;;;5301:11:36;5317:10;5293:34;5285:86;;;;-1:-1:-1;;;5285:86:36;;;;;;;:::i;:::-;9210:56:::1;9240:6;9248:17;9210:29;:56::i;:::-;9091:182:::0;;:::o;6931:399::-;5301:11;;-1:-1:-1;;;;;5301:11:36;5317:10;5293:34;5285:86;;;;-1:-1:-1;;;5285:86:36;;;;;;;:::i;:::-;7008:30:::1;7041:27;:25;:27::i;:::-;7008:60;;7079:11;:203;;7183:99;7211:6;7219:62;7226:22;7219:62;;;;;;;;;;;;;;;;::::0;:6:::1;:62::i;:::-;7183:27;:99::i;:::-;7079:203;;;7105:63;7137:6;7145:22;7105:31;:63::i;:::-;7298:25;::::0;-1:-1:-1;;;;;7298:25:36;::::1;::::0;::::1;::::0;;;::::1;6998:332;6931:399:::0;:::o;13167:639::-;1355:13:1;:11;:13::i;:::-;13385:37:36::1;13410:11;13385:24;:37::i;:::-;13436:16;13456:1;13436:21:::0;13432:217:::1;;-1:-1:-1::0;;;;;13511:33:36;::::1;;::::0;;;:20:::1;:33;::::0;;;;13504:40;13432:217:::1;;;13611:27;:25;:27::i;:::-;-1:-1:-1::0;;;;;13575:33:36;::::1;;::::0;;;:20:::1;:33;::::0;;;;:63;13432:217:::1;-1:-1:-1::0;;;;;13658:41:36;::::1;;::::0;;;:28:::1;:41;::::0;;;;;;:60;;;13734:65;::::1;::::0;::::1;::::0;13702:16;;13734:65:::1;:::i;:::-;;;;;;;;13167:639:::0;;:::o;11952:983::-;12179:85;;;;;;;;;;;;;;;;;;:19;:85::i;:::-;12282:11;12274:49;;;;-1:-1:-1;;;12274:49:36;;;;;;;:::i;:::-;12354:7;12399:54;;;:128;;;;-1:-1:-1;12473:54:36;;;12399:128;12378:240;;;;-1:-1:-1;;;12378:240:36;;;;;;;:::i;:::-;12634:9;12629:300;12649:9;12645:1;:13;12629:300;;;12676:183;12725:7;;12733:1;12725:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;12753:34;;12788:1;12753:37;;;;;;;:::i;:::-;;;;;;;12808:34;;12843:1;12808:37;;;;;;;:::i;:::-;;;;;;;12676:31;:183::i;:::-;12901:3;;12629:300;;;;12169:766;11952:983;;;;;;:::o;8108:242::-;5301:11;;-1:-1:-1;;;;;5301:11:36;5317:10;5293:34;5285:86;;;;-1:-1:-1;;;5285:86:36;;;;;;;:::i;:::-;8276:67:::1;8307:6;8315:8;8325:17;8276:30;:67::i;:::-;8108:242:::0;;;:::o;8807:278::-;1355:13:1;:11;:13::i;:::-;8897:18:36::1;8918:36;8936:9;8947:6;8918:17;:36::i;:::-;8897:57:::0;-1:-1:-1;8972:15:36;;8964:62:::1;;;;-1:-1:-1::0;;;8964:62:36::1;;;;;;;:::i;:::-;9060:9;-1:-1:-1::0;;;;;9041:37:36::1;;9071:6;9041:37;;;;;;:::i;:::-;;;;;;;;8887:198;8807:278:::0;;:::o;2085:101:1:-;1355:13;:11;:13::i;:::-;2149:30:::1;2176:1;2149:18;:30::i;:::-;2085:101::o:0;14710:802:36:-;-1:-1:-1;;;;;14809:41:36;;14782:24;14809:41;;;:28;:41;;;;;;;14893:27;:25;:27::i;:::-;-1:-1:-1;;;;;14992:33:36;;14930:30;14992:33;;;:20;:33;;;;;;14860:60;;-1:-1:-1;14930:30:36;14963:63;;14860:60;;14963:4;:63::i;:::-;14930:96;;15065:1;15040:22;:26;:50;;;;;15089:1;15070:16;:20;15040:50;15036:470;;;15106:18;15127:46;15132:22;15156:16;15127:4;:46::i;:::-;-1:-1:-1;;;;;15221:31:36;;15187:26;15221:31;;;:18;:31;;;;;;15106:67;;-1:-1:-1;15187:26:36;15216:49;;15106:67;15216:4;:49::i;:::-;-1:-1:-1;;;;;15280:31:36;;;;;;:18;:31;;;;;;;;:52;;;15346:20;:33;;;;;;:58;;;15463:31;;;;;15424:71;;15187:78;;-1:-1:-1;15280:31:36;;15424:71;;;;;:::i;:::-;;;;;;;;15092:414;;15036:470;14772:740;;;14710:802;:::o;2031:212:0:-;1223:13;;965:10:12;;-1:-1:-1;;;;;1223:13:0;2130:24;;2122:78;;;;-1:-1:-1;;;2122:78:0;;;;;;;:::i;:::-;2210:26;2229:6;2210:18;:26::i;14418:101:36:-;1355:13:1;:11;:13::i;:::-;14488:24:36::1;14506:5;14488:17;:24::i;10634:813::-:0;10832:74;;;;;;;;;;;;;;;;;;:19;:74::i;:::-;10925:11;10924:12;10916:51;;;;-1:-1:-1;;;10916:51:36;;;;;;;:::i;:::-;10998:7;11043:45;;;:94;;;;-1:-1:-1;11092:45:36;;;11043:94;11022:197;;;;-1:-1:-1;;;11022:197:36;;;;;;;:::i;:::-;11235:9;11230:211;11250:9;11246:1;:13;11230:211;;;11277:94;11300:7;;11308:1;11300:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;11312:25;;11338:1;11312:28;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;11342:25;;11368:1;11342:28;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;11277:22;:94::i;:::-;11413:3;;11230:211;;9629:547;9795:74;;;;;;;;;;;;;;;;;;:19;:74::i;:::-;9899:14;;9944:19;;9931:32;;:68;;;;;9980:12;:19;9967:9;:32;9931:68;9923:109;;;;-1:-1:-1;;;9923:109:36;;;;;;;:::i;:::-;10048:9;10043:127;10063:9;10059:1;:13;10043:127;;;10093:66;10114:7;10122:1;10114:10;;;;;;;;:::i;:::-;;;;;;;10126:12;10139:1;10126:15;;;;;;;;:::i;:::-;;;;;;;10143:12;10156:1;10143:15;;;;;;;;:::i;:::-;;;;;;;10093:20;:66::i;:::-;10074:3;;10043:127;;;;9785:391;9629:547;;;:::o;6277:406::-;3279:19:3;3302:13;;;;;;3301:14;;3347:34;;;;-1:-1:-1;3365:12:3;;3380:1;3365:12;;;;:16;3347:34;3346:108;;;-1:-1:-1;3426:4:3;1713:19:11;:23;;;3387:66:3;;-1:-1:-1;3436:12:3;;;;;:17;3387:66;3325:201;;;;-1:-1:-1;;;3325:201:3;;;;;;;:::i;:::-;3536:12;:16;;-1:-1:-1;;3536:16:3;3551:1;3536:16;;;3562:65;;;;3596:13;:20;;-1:-1:-1;;3596:20:3;;;;;3562:65;6476:11:36::1;:26:::0;;-1:-1:-1;;;;;6476:26:36;;::::1;-1:-1:-1::0;;;;;;6476:26:36;;::::1;;::::0;;;6512:11:::1;:26:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;6548:21:::1;:19;:21::i;:::-;6579:56;6613:21;6579:33;:56::i;:::-;6646:30;6664:11;6646:17;:30::i;:::-;3651:14:3::0;3647:99;;;3697:5;3681:21;;-1:-1:-1;;3681:21:3;;;3721:14;;;;;;3681:13;;3721:14;:::i;:::-;;;;;;;;3269:483;6277:406:36;;;;:::o;14130:128::-;14198:53;14215:6;14223:11;;;;;;;;;-1:-1:-1;;;;;14223:11:36;-1:-1:-1;;;;;14223:25:36;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14223:27:36;;;;;;;;;;;;:::i;13812:163::-;5301:11;;-1:-1:-1;;;;;5301:11:36;5317:10;5293:34;5285:86;;;;-1:-1:-1;;;5285:86:36;;;;;;;:::i;:::-;13920:48:::1;13951:6;13959:8;13920:30;:48::i;2447:116:44:-:0;2513:7;2539:17;:15;:17;;:::i;:::-;2532:24;;2447:116;:::o;1436:178:0:-;1355:13:1;:11;:13::i;:::-;1525::0::1;:24:::0;;-1:-1:-1;;;;;1525:24:0;::::1;-1:-1:-1::0;;;;;;1525:24:0;;::::1;::::0;::::1;::::0;;;1589:7:::1;1534:6:1::0;;-1:-1:-1;;;;;1534:6:1;;1462:85;1589:7:0::1;-1:-1:-1::0;;;;;1564:43:0::1;;;;;;;;;;;1436:178:::0;:::o;2882:94:44:-;2957:12;;2882:94::o;2675:100::-;2753:15;;2675:100::o;1612:166:34:-;1684:13;;1678:3;:19;1674:98;;;1742:13;;1757:3;1720:41;;-1:-1:-1;;;1720:41:34;;;;;;;;;:::i;30280:2366:36:-;-1:-1:-1;;;;;30418:30:36;;30384:31;30418:30;;;:22;:30;;;;;;;;30510:31;:39;;;;;30582:23;:31;;;;;;;30418:30;;30656:27;:25;:27::i;:::-;30623:60;;30699:11;30694:105;;30726:62;30733:22;30726:62;;;;;;;;;;;;;;;;;:6;:62::i;:::-;;30694:105;30809:37;30849:11;:123;;30941:30;;;;;;30849:123;;;30875:20;:43;;;30849:123;30809:163;;31019:1;30987:29;:33;:91;;;;;31049:29;31024:22;:54;30987:91;30983:176;;;31119:29;31094:54;;30983:176;31169:30;31202:139;31220:22;31257:11;:73;;31312:17;;-1:-1:-1;;;31312:17:36;;;;31202:4;:139::i;31257:73::-;31271:20;:30;;;31202:4;:139::i;:::-;31169:172;;31380:1;31355:22;:26;:45;;;;;31399:1;31385:11;:15;31355:45;31351:1217;;;31416:20;31439:54;31451:6;-1:-1:-1;;;;;31444:27:36;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31475:17;31439:4;:54::i;:::-;31416:77;;31507:26;31536:41;31541:22;31565:11;31536:4;:41::i;:::-;31507:70;;31591:19;31628:1;31613:12;:16;:119;;31709:23;;;;;;;;31728:1;31709:23;;;31613:119;;;31648:42;31657:18;31677:12;31648:8;:42::i;:::-;31591:141;;31746:19;31768:11;:60;;31811:17;;-1:-1:-1;;;;;31811:17:36;31768:60;;;31782:26;;-1:-1:-1;;;;;31782:26:36;31768:60;31746:82;;31842:13;31858:140;31883:46;31888:33;;;;;;;;31907:11;-1:-1:-1;;;;;31888:33:36;;;;31923:5;31883:4;:46::i;:::-;:55;31858:140;;;;;;;;;;;;;;;;;:7;:140::i;:::-;31842:156;;32017:11;32013:289;;;32048:34;;-1:-1:-1;;;;;;32048:34:36;-1:-1:-1;;;;;32048:34:36;;;;;-1:-1:-1;32100:30:36;;:55;;;32013:289;;;32237:50;;;-1:-1:-1;;;32237:50:36;-1:-1:-1;;;;;32194:25:36;;32237:50;;;32013:289;31402:910;;;;;31351:1217;;;32322:26;;32318:250;;32368:11;32364:194;;;32399:30;;;:55;;;32364:194;;;32493:50;;-1:-1:-1;;;;;32493:50:36;-1:-1:-1;;;32493:50:36;;;;;;;32364:194;32613:6;-1:-1:-1;;;;;32583:56:36;;32621:17;32583:56;;;;;;:::i;:::-;;;;;;;;30374:2272;;;;;;30280:2366;;:::o;24993:1767::-;-1:-1:-1;;;;;25150:30:36;;25116:31;25150:30;;;:22;:30;;;;;;;;25242:31;:39;;;;;25150:30;;25314:11;:60;;25357:17;;-1:-1:-1;;;;;25357:17:36;25314:60;;;25328:26;;-1:-1:-1;;;;;25328:26:36;25314:60;-1:-1:-1;;;;;25408:32:36;;;25384:21;25408:32;;;:24;:32;;;;;;;;:42;;;;;;;;;;;-1:-1:-1;;;;;25292:82:36;;;;25565:56;;;;25292:82;-1:-1:-1;25636:18:36;;:50;;;;-1:-1:-1;;;;25658:28:36;;;25636:50;25632:361;;;-1:-1:-1;;;;25632:361:36;26099:24;26126:54;;;;;;;;26145:32;26150:11;26163:13;26145:4;:32::i;:::-;26126:54;;;26099:81;;26191:22;26216:69;26228:6;-1:-1:-1;;;;;26221:34:36;;26256:8;26221:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26267:17;26216:4;:69::i;:::-;26191:94;-1:-1:-1;26381:19:36;;26377:377;;26416:21;26440:32;26445:14;26461:10;26440:4;:32::i;:::-;-1:-1:-1;;;;;26518:28:36;;26487:23;26518:28;;;:18;:28;;;;;;26416:56;;-1:-1:-1;26487:23:36;26513:49;;26416:56;26513:4;:49::i;:::-;-1:-1:-1;;;;;26576:28:36;;;;;;;:18;:28;;;;;;;:46;;;26642:101;26487:75;;-1:-1:-1;26576:28:36;26642:101;;;;;;;;26699:13;;26487:75;;26731:11;;26642:101;:::i;:::-;;;;;;;;26402:352;;26377:377;25106:1654;;;;;;24993:1767;;;:::o;27718:2250::-;-1:-1:-1;;;;;27826:30:36;;27792:31;27826:30;;;:22;:30;;;;;;;;27918:31;:39;;;;;27990:23;:31;;;;;;;27826:30;;28064:27;:25;:27::i;:::-;28031:60;;28107:11;28102:105;;28134:62;28141:22;28134:62;;;;;;;;;;;;;;;;;:6;:62::i;:::-;;28102:105;28217:37;28257:11;:123;;28349:30;;;;;;28257:123;;;28283:20;:43;;;28257:123;28217:163;;28427:1;28395:29;:33;:91;;;;;28457:29;28432:22;:54;28395:91;28391:176;;;28527:29;28502:54;;28391:176;28577:30;28610:139;28628:22;28665:11;:73;;28720:17;;-1:-1:-1;;;28720:17:36;;;;31202:4;:139::i;28610:::-;28577:172;;28788:1;28763:22;:26;:45;;;;;28807:1;28793:11;:15;28763:45;28759:1150;;;28824:20;28854:6;-1:-1:-1;;;;;28847:26:36;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28824:51;;28889:26;28918:41;28923:22;28947:11;28918:4;:41::i;:::-;28889:70;;28973:19;29010:1;28995:12;:16;:119;;29091:23;;;;;;;;29110:1;29091:23;;;28995:119;;;29030:42;29039:18;29059:12;29030:8;:42::i;:::-;28973:141;;29128:19;29150:11;:60;;29193:17;;-1:-1:-1;;;;;29193:17:36;29150:60;;;29164:26;;-1:-1:-1;;;;;29164:26:36;29150:60;29128:82;;29224:13;29240:140;29265:46;29270:33;;;;;;;;29289:11;-1:-1:-1;;;;;29270:33:36;;;;29305:5;29265:4;:46::i;29240:140::-;29224:156;;29399:11;29395:289;;;29430:34;;-1:-1:-1;;;;;;29430:34:36;-1:-1:-1;;;;;29430:34:36;;;;;-1:-1:-1;29482:30:36;;:55;;;29395:289;;;29619:50;;;-1:-1:-1;;;29619:50:36;-1:-1:-1;;;;;29576:25:36;;29619:50;;;29395:289;28810:884;;;;;28759:1150;;;29704:26;;29700:209;;29746:11;:152;;29818:80;;-1:-1:-1;;;;;29818:80:36;-1:-1:-1;;;29818:80:36;;;;;;;;;;;;29746:152;;;29793:22;29760:20;:30;;:55;;;29746:152;;29700:209;29924:37;;-1:-1:-1;;;;;29924:37:36;;;;;;;;27782:2186;;;;;;27718:2250;:::o;23026:1627::-;-1:-1:-1;;;;;23153:30:36;;23119:31;23153:30;;;:22;:30;;;;;;;;23245:31;:39;;;;;23153:30;;23317:11;:60;;23360:17;;-1:-1:-1;;;;;23360:17:36;23317:60;;;23331:26;;-1:-1:-1;;;;;23331:26:36;23317:60;-1:-1:-1;;;;;23411:32:36;;;23387:21;23411:32;;;:24;:32;;;;;;;;:42;;;;;;;;;;;-1:-1:-1;;;;;23295:82:36;;;;23567:56;;;;23295:82;-1:-1:-1;23638:18:36;;:50;;;;-1:-1:-1;;;;23660:28:36;;;23638:50;23634:361;;;-1:-1:-1;;;;23634:361:36;24094:24;24121:54;;;;;;;;24140:32;24145:11;24158:13;24140:4;:32::i;:::-;24121:54;;24211:34;;-1:-1:-1;;;24211:34:36;;24094:81;;-1:-1:-1;24186:22:36;;-1:-1:-1;;;;;24211:24:36;;;;;:34;;24236:8;;24211:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24186:59;;24331:21;24355:32;24360:14;24376:10;24355:4;:32::i;:::-;-1:-1:-1;;;;;24429:28:36;;24398:23;24429:28;;;:18;:28;;;;;;24331:56;;-1:-1:-1;24398:23:36;24424:49;;24331:56;24424:4;:49::i;:::-;-1:-1:-1;;;;;24483:28:36;;;;;;;:18;:28;;;;;;;:46;;;24545:101;24398:75;;-1:-1:-1;24483:28:36;24545:101;;;;;;;;24602:13;;24398:75;;24634:11;;24545:101;:::i;:::-;;;;;;;;23109:1544;;;;;;;;23026:1627;;:::o;27145:335::-;27270:11;;:36;;-1:-1:-1;;;27270:36:36;;27220:7;;;;-1:-1:-1;;;;;27270:11:36;;;;:21;;:36;;27300:4;;27270:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27239:67;;27329:1;27320:6;:10;:44;;;;;27344:20;27334:6;:30;;27320:44;27316:135;;;27380:11;;:38;;-1:-1:-1;;;;;27380:11:36;27405:4;27411:6;27380:24;:38::i;:::-;27439:1;27432:8;;;;;27316:135;27467:6;27460:13;;;27145:335;;;;;:::o;1620:130:1:-;1534:6;;-1:-1:-1;;;;;1534:6:1;965:10:12;1683:23:1;1675:68;;;;-1:-1:-1;;;1675:68:1;;;;;;;:::i;2641:425:26:-;-1:-1:-1;;;;;2733:44:26;;2725:94;;;;-1:-1:-1;;;2725:94:26;;;;;;;:::i;:::-;2871:21;;;-1:-1:-1;;;;;2903:70:26;;;-1:-1:-1;;;;;;2903:70:26;;;;;;2988:71;;2871:21;;;2988:71;;;;2871:21;;2951;;2988:71;:::i;:::-;;;;;;;;2715:351;2641:425;:::o;2364:173:32:-;2442:6;2491:12;2473:16;2468:21;;;2460:44;;;;-1:-1:-1;;;2460:44:32;;;;;;;;:::i;:::-;-1:-1:-1;2528:1:32;;2364:173;-1:-1:-1;;2364:173:32:o;32882:749:36:-;-1:-1:-1;;;;;33008:30:36;;32974:31;33008:30;;;:22;:30;;;;;;;;33082:22;:30;;;;;33189:17;;33008:30;;33082;;-1:-1:-1;;;;;33189:17:36;:22;;33185:150;;33291:33;;-1:-1:-1;;;;;;33291:33:36;-1:-1:-1;;;33291:33:36;;;33185:150;33349:17;;-1:-1:-1;;;;;33349:17:36;;:22;33345:150;;33451:33;;-1:-1:-1;;;;;;33451:33:36;-1:-1:-1;;;33451:33:36;;;33345:150;33593:31;;;;;;-1:-1:-1;;;33593:31:36;-1:-1:-1;;;;;33593:31:36;;;;;;;;33573:51;;;;;;;;;;-1:-1:-1;32882:749:36:o;33872:806::-;-1:-1:-1;;;;;34015:39:36;;33972:40;34015:39;;;:31;:39;;;;;;;;34107:31;:39;;;;;34223:17;;34015:39;;34107;;-1:-1:-1;;;;;34223:17:36;:22;;34219:150;;34325:33;;-1:-1:-1;;;;;;34325:33:36;-1:-1:-1;;;34325:33:36;;;34219:150;34383:17;;-1:-1:-1;;;;;34383:17:36;;:22;34379:150;;34485:33;;-1:-1:-1;;;;;;34485:33:36;-1:-1:-1;;;34485:33:36;;;34379:150;34633:21;;;;:38;;;34609:21;:62;-1:-1:-1;33872:806:36:o;3203:282:26:-;3304:21;;:60;;-1:-1:-1;;;3304:60:26;;3281:20;;-1:-1:-1;;;;;3304:21:26;;:37;;:60;;3342:10;;3354:9;;3304:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3281:83;;3380:15;3375:104;;3431:10;3451:4;3458:9;3418:50;;-1:-1:-1;;;3418:50:26;;;;;;;;;;:::i;19025:2045:36:-;19224:11;;:34;;-1:-1:-1;;;19224:34:36;;-1:-1:-1;;;;;19224:11:36;;;;:26;;:34;;19251:6;;19224:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19216:79;;;;-1:-1:-1;;;19216:79:36;;;;;;;:::i;:::-;19306:22;19331:27;:25;:27::i;:::-;19306:52;;19426:14;19390:33;:50;19369:156;;;;-1:-1:-1;;;19369:156:36;;;;;;;:::i;:::-;19592:14;19556:33;:50;19535:156;;;;-1:-1:-1;;;19535:156:36;;;;;;;:::i;:::-;-1:-1:-1;;;;;19753:48:36;;19702;19753;;;:31;:48;;;;;;;;:84;;;;;19898:31;:48;;;;;:84;;;;20014:45;;;:106;;;20106:14;20063:40;:57;20014:106;19993:194;;;;-1:-1:-1;;;19993:194:36;;;;;;;:::i;:::-;20218:45;;;:106;;;20310:14;20267:40;:57;20218:106;20197:194;;;;-1:-1:-1;;;20197:194:36;;;;;;;:::i;:::-;20450:33;20406:40;:77;20402:326;;-1:-1:-1;;;;;20499:48:36;;;;;;:31;:48;;;;;;;:71;;:107;;;20625:92;;;;;20573:33;;20625:92;:::i;:::-;;;;;;;;20402:326;20786:33;20742:40;:77;20738:326;;-1:-1:-1;;;;;20835:48:36;;;;;;:31;:48;;;;;;;:71;;:107;;;20961:92;;;;;20909:33;;20961:92;:::i;20738:326::-;19206:1864;;;19025:2045;;;:::o;1798:153:0:-;1887:13;1880:20;;-1:-1:-1;;;;;;1880:20:0;;;1910:34;1935:8;1910:24;:34::i;3286:97:32:-;3345:7;3371:5;3375:1;3371;:5;:::i;:::-;3364:12;3286:97;-1:-1:-1;;;3286:97:32:o;4299:::-;4358:7;4384:5;4388:1;4384;:5;:::i;2863:97::-;2922:7;2948:5;2952:1;2948;:5;:::i;1087:279:34:-;1164:13;;1156:5;:21;1148:68;;;;-1:-1:-1;;;1148:68:34;;;;;;;:::i;:::-;1254:13;;;1277:21;;;;1314:45;;;;;;1254:13;;1293:5;;1314:45;:::i;16928:1683:36:-;17098:11;;:34;;-1:-1:-1;;;17098:34:36;;-1:-1:-1;;;;;17098:11:36;;;;:26;;:34;;17125:6;;17098:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17090:79;;;;-1:-1:-1;;;17090:79:36;;;;;;;:::i;:::-;17180:19;17202:27;:25;:27::i;:::-;17180:49;;17275:11;17248:24;:38;;;17240:106;;;;-1:-1:-1;;;17240:106:36;;;;;;;:::i;:::-;17391:11;17364:24;:38;;;17356:106;;;;-1:-1:-1;;;17356:106:36;;;;;;;:::i;:::-;-1:-1:-1;;;;;17514:39:36;;17473:38;17514:39;;;:22;:39;;;;;;;;:58;;;;;;17623:39;;;;;:58;;;;17514;;;;;17623;17713:36;;;:85;;;17787:11;17753:31;:45;;;17713:85;17692:173;;;;-1:-1:-1;;;17692:173:36;;;;;;;:::i;:::-;17896:36;;;;;:85;;;17970:11;17936:31;:45;;;17896:85;17875:173;;;;-1:-1:-1;;;17875:173:36;;;;;;;:::i;:::-;18098:24;18063:59;;:31;:59;;;18059:268;;-1:-1:-1;;;;;18138:39:36;;;;;;:22;:39;;;;;;;:58;;:85;;-1:-1:-1;;18138:85:36;;;;;;;18242:74;;;;;18138:85;;18242:74;:::i;:::-;;;;;;;;18059:268;18376:24;18341:59;;:31;:59;;;18337:268;;-1:-1:-1;;;;;18416:39:36;;;;;;:22;:39;;;;;;;:58;;:85;;-1:-1:-1;;18416:85:36;;;;;;;18520:74;;;;;18416:85;;18520:74;:::i;21363:1397::-;21477:11;;:34;;-1:-1:-1;;;21477:34:36;;-1:-1:-1;;;;;21477:11:36;;;;:26;;:34;;21504:6;;21477:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21469:79;;;;-1:-1:-1;;;21469:79:36;;;;;;;:::i;:::-;-1:-1:-1;;;;;21563:40:36;;;;;;:23;:40;;;;;;:55;;21559:547;;21868:46;21906:6;21868:29;:46::i;:::-;-1:-1:-1;;;;;21972:40:36;;;;;;:23;:40;;;;;;;:54;;;22045:50;;;;;22015:11;;22045:50;:::i;:::-;;;;;;;;21559:547;-1:-1:-1;;;;;22120:40:36;;;;;;:23;:40;;;;;;:55;;22116:638;;22425:22;22450:39;;;;;;;;22466:6;-1:-1:-1;;;;;22466:18:36;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22450:39;;22425:64;-1:-1:-1;22503:59:36;22541:6;22425:64;22503:29;:59::i;:::-;-1:-1:-1;;;;;22620:40:36;;;;;;:23;:40;;;;;;;:54;;;22693:50;;;;;22663:11;;22693:50;:::i;:::-;;;;;;;;22177:577;21363:1397;;;:::o;889:100:0:-;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;956:26:0::1;:24;:26::i;1619:164:26:-:0;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;4715:131:32:-;4777:7;4803:36;4808:18;4813:1;287:4:40;4808::32;:18::i;:::-;4828:10;;4803:4;:36::i;5435:154::-;-1:-1:-1;;;;;;;;;;;;5530:52:32;;;;;;;;5549:30;5554:21;5559:1;-1:-1:-1;;;5554:4:32;:21::i;:::-;5577:1;5549:4;:30::i;:::-;5530:52;;5523:59;5435:154;-1:-1:-1;;;5435:154:32:o;2697:160::-;-1:-1:-1;;;;;;;;;;;;2800:50:32;;;;;;;;2819:28;2824:1;:10;;;2836:1;:10;;;2819:4;:28::i;2181:177::-;2260:7;2311:12;-1:-1:-1;;;;;2287:22:32;;;2279:45;;;;-1:-1:-1;;;2279:45:32;;;;;;;;:::i;4161:132::-;4226:7;-1:-1:-1;;;4252:19:32;4257:1;4260;:10;;;4252:4;:19::i;:::-;:34;;;;:::i;996:186:10:-;1089:86;1109:5;1139:23;;;1164:2;1168:5;1116:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1116:58:10;;;;;;;;;;;;;;-1:-1:-1;;;;;1116:58:10;-1:-1:-1;;;;;;1116:58:10;;;;;;;;;;1089:19;:86::i;2687:187:1:-;2779:6;;;-1:-1:-1;;;;;2795:17:1;;;-1:-1:-1;;;;;;2795:17:1;;;;;;;2827:40;;2779:6;;;2795:17;2779:6;;2827:40;;2760:16;;2827:40;2750:124;2687:187;:::o;1125:111::-;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;1197:32:1::1;965:10:12::0;1197:18:1::1;:32::i;5332:97:32:-:0;5391:7;5417:5;5421:1;5417;:5;:::i;5328:653:10:-;5758:23;5784:69;5812:4;5784:69;;;;;;;;;;;;;;;;;5792:5;-1:-1:-1;;;;;5784:27:10;;;:69;;;;;:::i;:::-;5758:95;;5871:10;:17;5892:1;5871:22;:56;;;;5908:10;5897:30;;;;;;;;;;;;:::i;:::-;5863:111;;;;-1:-1:-1;;;5863:111:10;;;;;;;:::i;4119:223:11:-;4252:12;4283:52;4305:6;4313:4;4319:1;4322:12;4283:21;:52::i;:::-;4276:59;4119:223;-1:-1:-1;;;;4119:223:11:o;5176:446::-;5341:12;5398:5;5373:21;:30;;5365:81;;;;-1:-1:-1;;;5365:81:11;;;;;;;:::i;:::-;5457:12;5471:23;5498:6;-1:-1:-1;;;;;5498:11:11;5517:5;5524:4;5498:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5456:73;;;;5546:69;5573:6;5581:7;5590:10;5602:12;5546:26;:69::i;:::-;5539:76;5176:446;-1:-1:-1;;;;;;;5176:446:11:o;7682:628::-;7862:12;7890:7;7886:418;;;7917:10;:17;7938:1;7917:22;7913:286;;-1:-1:-1;;;;;1713:19:11;;;8124:60;;;;-1:-1:-1;;;8124:60:11;;;;;;;:::i;:::-;-1:-1:-1;8219:10:11;8212:17;;7886:418;8260:33;8268:10;8280:12;8991:17;;:21;8987:379;;9219:10;9213:17;9275:15;9262:10;9258:2;9254:19;9247:44;8987:379;9342:12;9335:20;;-1:-1:-1;;;9335:20:11;;;;;;;;:::i;466:96:69:-;503:7;-1:-1:-1;;;;;400:54:69;;532:24;334:126;568:122;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;696:139;767:20;;796:33;767:20;796:33;:::i;1072:180::-;-1:-1:-1;;;1117:1:69;1110:88;1217:4;1214:1;1207:15;1241:4;1238:1;1231:15;1258:281;-1:-1:-1;;1056:2:69;1036:14;;1032:28;1333:6;1329:40;1471:6;1459:10;1456:22;1435:18;1423:10;1420:34;1417:62;1414:88;;;1482:18;;:::i;:::-;1518:2;1511:22;-1:-1:-1;;1258:281:69:o;1545:129::-;1579:6;1606:20;73:2;67:9;;7:75;1606:20;1596:30;;1635:33;1663:4;1655:6;1635:33;:::i;:::-;1545:129;;;:::o;1680:327::-;1773:4;1863:18;1855:6;1852:30;1849:56;;;1885:18;;:::i;:::-;-1:-1:-1;1935:4:69;1923:17;;;1985:15;;1680:327::o;2136:112::-;2189:7;2218:24;2236:5;2218:24;:::i;2254:154::-;2343:40;2377:5;2343:40;:::i;2414:171::-;2501:20;;2530:49;2501:20;2530:49;:::i;2616:758::-;2728:5;2753:97;2769:80;2842:6;2769:80;:::i;:::-;2753:97;:::i;:::-;2885:21;;;2744:106;-1:-1:-1;2933:4:69;2922:16;;;;2974:17;;2962:30;;3004:15;;;3001:122;;;3034:79;2370:32310:36;;;3034:79:69;3149:6;3132:236;3166:6;3161:3;3158:15;3132:236;;;3241:3;3270:53;3319:3;3307:10;3270:53;:::i;:::-;3258:66;;-1:-1:-1;3353:4:69;3344:14;;;;3183;3132:236;;;3136:21;2734:640;;2616:758;;;;;:::o;3405:402::-;3492:5;3541:3;3534:4;3526:6;3522:17;3518:27;3508:122;;3549:79;2370:32310:36;;;3549:79:69;3666:6;3653:20;3691:110;3797:3;3789:6;3782:4;3774:6;3770:17;3691:110;:::i;3813:716::-;3922:6;3930;3979:2;3967:9;3958:7;3954:23;3950:32;3947:119;;;3985:79;2370:32310:36;;;3985:79:69;4105:1;4130:53;4175:7;4155:9;4130:53;:::i;:::-;4120:63;;4076:117;4260:2;4249:9;4245:18;4232:32;4291:18;4283:6;4280:30;4277:117;;;4313:79;2370:32310:36;;;4313:79:69;4418:94;4504:7;4495:6;4484:9;4480:22;4418:94;:::i;:::-;4408:104;;4203:319;3813:716;;;;;:::o;4535:329::-;4594:6;4643:2;4631:9;4622:7;4618:23;4614:32;4611:119;;;4649:79;2370:32310:36;;;4649:79:69;4769:1;4794:53;4839:7;4819:9;4794:53;:::i;5018:118::-;-1:-1:-1;;;;;4936:70:69;;5105:24;5100:3;5093:37;5018:118;;:::o;5142:222::-;5273:2;5258:18;;5286:71;5262:9;5330:6;5286:71;:::i;5453:118::-;5558:5;5540:24;5370:77;5577:222;5708:2;5693:18;;5721:71;5697:9;5765:6;5721:71;:::i;6051:122::-;6142:5;6124:24;5370:77;6179:139;6250:20;;6279:33;6250:20;6279:33;:::i;6361:413::-;6431:5;6475:4;6463:9;6458:3;6454:19;6450:30;6447:117;;;6483:79;2370:32310:36;;;6483:79:69;6582:21;6598:4;6582:21;:::i;:::-;6573:30;-1:-1:-1;6666:1:69;6706:49;6751:3;6731:9;6706:49;:::i;:::-;6681:75;;-1:-1:-1;6692:5:69;6361:413;-1:-1:-1;;6361:413:69:o;6780:516::-;6869:6;6877;6926:2;6914:9;6905:7;6901:23;6897:32;6894:119;;;6932:79;2370:32310:36;;;6932:79:69;7052:1;7077:53;7122:7;7102:9;7077:53;:::i;:::-;7067:63;;7023:117;7179:2;7205:74;7271:7;7262:6;7251:9;7247:22;7205:74;:::i;7401:115::-;7378:10;7367:22;;7486:23;7302:93;7522:434;7705:2;7690:18;;7718:71;7694:9;7762:6;7718:71;:::i;:::-;7799:70;7865:2;7854:9;7850:18;7841:6;7799:70;:::i;:::-;7879;7945:2;7934:9;7930:18;7921:6;7879:70;:::i;7962:474::-;8030:6;8038;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;2370:32310:36;;;8093:79:69;8213:1;8238:53;8283:7;8263:9;8238:53;:::i;:::-;8228:63;;8184:117;8340:2;8366:53;8411:7;8402:6;8391:9;8387:22;8366:53;:::i;8442:474::-;8510:6;8518;8567:2;8555:9;8546:7;8542:23;8538:32;8535:119;;;8573:79;2370:32310:36;;;8573:79:69;8693:1;8718:53;8763:7;8743:9;8718:53;:::i;:::-;8708:63;;8664:117;8820:2;8846:53;8891:7;8882:6;8871:9;8867:22;8846:53;:::i;9070:584::-;9159:8;9169:6;9219:3;9212:4;9204:6;9200:17;9196:27;9186:122;;9227:79;2370:32310:36;;;9227:79:69;-1:-1:-1;9327:20:69;;9370:18;9359:30;;9356:117;;;9392:79;2370:32310:36;;;9392:79:69;9506:4;9498:6;9494:17;9482:29;;9560:3;9552:4;9544:6;9540:17;9530:8;9526:32;9523:41;9520:128;;;9567:79;2370:32310:36;;;9567:79:69;9070:584;;;;;:::o;10251:1341::-;10425:6;10433;10441;10449;10457;10465;10514:2;10502:9;10493:7;10489:23;10485:32;10482:119;;;10520:79;2370:32310:36;;;10520:79:69;10640:31;;10698:18;10687:30;;10684:117;;;10720:79;2370:32310:36;;;10720:79:69;10833:96;10921:7;10912:6;10901:9;10897:22;10833:96;:::i;:::-;10815:114;;;;10611:328;11006:2;10995:9;10991:18;10978:32;11037:18;11029:6;11026:30;11023:117;;;11059:79;2370:32310:36;;;11059:79:69;11172:80;11244:7;11235:6;11224:9;11220:22;11172:80;:::i;:::-;11154:98;;;;10949:313;11329:2;11318:9;11314:18;11301:32;11360:18;11352:6;11349:30;11346:117;;;11382:79;2370:32310:36;;;11382:79:69;11495:80;11567:7;11558:6;11547:9;11543:22;11495:80;:::i;:::-;11477:98;;;;11272:313;10251:1341;;;;;;;;:::o;11598:661::-;11696:6;11704;11712;11761:2;11749:9;11740:7;11736:23;11732:32;11729:119;;;11767:79;2370:32310:36;;;11767:79:69;11887:1;11912:53;11957:7;11937:9;11912:53;:::i;:::-;11902:63;;11858:117;12014:2;12040:53;12085:7;12076:6;12065:9;12061:22;12040:53;:::i;:::-;12030:63;;11985:118;12142:2;12168:74;12234:7;12225:6;12214:9;12210:22;12168:74;:::i;:::-;12158:84;;12113:139;11598:661;;;;;:::o;12265:329::-;12324:6;12373:2;12361:9;12352:7;12348:23;12344:32;12341:119;;;12379:79;2370:32310:36;;;12379:79:69;12499:1;12524:53;12569:7;12549:9;12524:53;:::i;12600:442::-;12787:2;12772:18;;12800:71;12776:9;12844:6;12800:71;:::i;:::-;12881:72;12949:2;12938:9;12934:18;12925:6;12881:72;:::i;:::-;12963;13031:2;13020:9;13016:18;13007:6;12963:72;:::i;15314:710::-;15410:5;15435:81;15451:64;15508:6;15451:64;:::i;15435:81::-;15551:21;;;15426:90;-1:-1:-1;15599:4:69;15588:16;;;;15640:17;;15628:30;;15670:15;;;15667:122;;;15700:79;2370:32310:36;;;15700:79:69;15815:6;15798:220;15832:6;15827:3;15824:15;15798:220;;;15907:3;15936:37;15969:3;15957:10;15936:37;:::i;:::-;15924:50;;-1:-1:-1;16003:4:69;15994:14;;;;15849;15798:220;;16047:370;16118:5;16167:3;16160:4;16152:6;16148:17;16144:27;16134:122;;16175:79;2370:32310:36;;;16175:79:69;16292:6;16279:20;16317:94;16407:3;16399:6;16392:4;16384:6;16380:17;16317:94;:::i;16423:1281::-;16591:6;16599;16607;16656:2;16644:9;16635:7;16631:23;16627:32;16624:119;;;16662:79;2370:32310:36;;;16662:79:69;16782:31;;16840:18;16829:30;;16826:117;;;16862:79;2370:32310:36;;;16862:79:69;16967:94;17053:7;17044:6;17033:9;17029:22;16967:94;:::i;:::-;16957:104;;16753:318;17138:2;17127:9;17123:18;17110:32;17169:18;17161:6;17158:30;17155:117;;;17191:79;2370:32310:36;;;17191:79:69;17296:78;17366:7;17357:6;17346:9;17342:22;17296:78;:::i;:::-;17286:88;;17081:303;17451:2;17440:9;17436:18;17423:32;17482:18;17474:6;17471:30;17468:117;;;17504:79;2370:32310:36;;;17504:79:69;17609:78;17679:7;17670:6;17659:9;17655:22;17609:78;:::i;17710:118::-;17797:24;17815:5;17797:24;:::i;17834:222::-;17965:2;17950:18;;17978:71;17954:9;18022:6;17978:71;:::i;18408:158::-;18490:9;18523:37;18554:5;18523:37;:::i;18572:195::-;18691:69;18754:5;18691:69;:::i;18773:286::-;18936:2;18921:18;;18949:103;18925:9;19025:6;18949:103;:::i;20045:857::-;20177:6;20185;20193;20201;20250:3;20238:9;20229:7;20225:23;20221:33;20218:120;;;20257:79;2370:32310:36;;;20257:79:69;20377:1;20402:73;20467:7;20447:9;20402:73;:::i;:::-;20392:83;;20348:137;20524:2;20550:79;20621:7;20612:6;20601:9;20597:22;20550:79;:::i;:::-;20540:89;;20495:144;20678:2;20704:53;20749:7;20740:6;20729:9;20725:22;20704:53;:::i;:::-;20694:63;;20649:118;20806:2;20832:53;20877:7;20868:6;20857:9;20853:22;20832:53;:::i;:::-;20822:63;;20777:118;20045:857;;;;;;;:::o;21004:109::-;20978:13;;20971:21;21085;20908:90;21119:210;21244:2;21229:18;;21257:65;21233:9;21295:6;21257:65;:::i;21962:180::-;-1:-1:-1;;;22007:1:69;22000:88;22107:4;22104:1;22097:15;22131:4;22128:1;22121:15;22725:116;20978:13;;20971:21;22795;20908:90;22847:137;22926:13;;22948:30;22926:13;22948:30;:::i;22990:345::-;23057:6;23106:2;23094:9;23085:7;23081:23;23077:32;23074:119;;;23112:79;2370:32310:36;;;23112:79:69;23232:1;23257:61;23310:7;23290:9;23257:61;:::i;23693:366::-;23920:2;23447:19;;23835:3;23499:4;23490:14;;-1:-1:-1;;;23633:47:69;;23849:74;-1:-1:-1;23932:93:69;-1:-1:-1;24050:2:69;24041:12;;23693:366::o;24065:419::-;24269:2;24282:47;;;24254:18;;24346:131;24254:18;24346:131;:::i;24490:143::-;24572:13;;24594:33;24572:13;24594:33;:::i;24639:351::-;24709:6;24758:2;24746:9;24737:7;24733:23;24729:32;24726:119;;;24764:79;2370:32310:36;;;24764:79:69;24884:1;24909:64;24965:7;24945:9;24909:64;:::i;25228:366::-;25455:2;23447:19;;25370:3;23499:4;23490:14;;25136:34;25113:58;;-1:-1:-1;;;25200:2:69;25188:15;;25181:34;25384:74;-1:-1:-1;25467:93:69;-1:-1:-1;25585:2:69;25576:12;;25228:366::o;25600:419::-;25804:2;25817:47;;;25789:18;;25881:131;25789:18;25881:131;:::i;26206:366::-;26433:2;23447:19;;26348:3;23499:4;23490:14;;26165:27;26142:51;;26362:74;-1:-1:-1;26445:93:69;26025:175;26578:419;26782:2;26795:47;;;26767:18;;26859:131;26767:18;26859:131;:::i;27670:419::-;27874:2;27887:47;;;27859:18;;27951:131;27859:18;27525:2;23447:19;;27143:34;23499:4;23490:14;;27120:58;27212:34;27195:15;;;27188:59;-1:-1:-1;;;27264:15:69;;;27257:28;27646:12;;;27298:366;28095:361;28170:6;28219:2;28207:9;28198:7;28194:23;28190:32;28187:119;;;28225:79;2370:32310:36;;;28225:79:69;28345:1;28370:69;28431:7;28411:9;28370:69;:::i;28689:366::-;28916:2;23447:19;;28831:3;23499:4;23490:14;;28602:34;28579:58;;-1:-1:-1;;;28666:2:69;28654:15;;28647:29;28845:74;-1:-1:-1;28928:93:69;28462:221;29061:419;29265:2;29278:47;;;29250:18;;29342:131;29250:18;29342:131;:::i;29720:366::-;29947:2;23447:19;;29862:3;23499:4;23490:14;;29626:34;29603:58;;-1:-1:-1;;;29690:2:69;29678:15;;29671:36;29876:74;-1:-1:-1;29959:93:69;29486:228;30092:419;30296:2;30309:47;;;30281:18;;30373:131;30281:18;30373:131;:::i;30699:366::-;30926:2;23447:19;;30841:3;23499:4;23490:14;;30657:28;30634:52;;30855:74;-1:-1:-1;30938:93:69;30517:176;31071:419;31275:2;31288:47;;;31260:18;;31352:131;31260:18;31352:131;:::i;31745:366::-;31972:2;23447:19;;31887:3;23499:4;23490:14;;31636:34;31613:58;;31705:26;31700:2;31688:15;;31681:51;31901:74;-1:-1:-1;31984:93:69;31496:243;32117:419;32321:2;32334:47;;;32306:18;;32398:131;32306:18;32398:131;:::i;32542:120::-;7378:10;7367:22;;32614:23;7302:93;32668:137;32738:20;;32767:32;32738:20;32767:32;:::i;32811:327::-;32869:6;32918:2;32906:9;32897:7;32893:23;32889:32;32886:119;;;32924:79;2370:32310:36;;;32924:79:69;33044:1;33069:52;33113:7;33093:9;33069:52;:::i;33328:366::-;33555:2;23447:19;;33470:3;23499:4;23490:14;;33284:30;33261:54;;33484:74;-1:-1:-1;33567:93:69;33144:178;33700:419;33904:2;33917:47;;;33889:18;;33981:131;33889:18;33981:131;:::i;34364:366::-;34591:2;23447:19;;34506:3;23499:4;23490:14;;34265:34;34242:58;;-1:-1:-1;;;34329:2:69;34317:15;;34310:41;34520:74;-1:-1:-1;34603:93:69;34125:233;34736:419;34940:2;34953:47;;;34925:18;;35017:131;34925:18;35017:131;:::i;35344:154::-;35400:9;35327:4;35316:16;;35433:59;35252:86;35504:143;35597:43;35634:5;35597:43;:::i;35653:234::-;35790:2;35775:18;;35803:77;35779:9;35853:6;35803:77;:::i;35893:175::-;35991:13;;36013:49;35991:13;36013:49;:::i;36099:780::-;36222:5;36247:97;36263:80;36336:6;36263:80;:::i;36247:97::-;36379:21;;;36238:106;-1:-1:-1;36427:4:69;36416:16;;;;36468:17;;36456:30;;36498:15;;;36495:122;;;36528:79;2370:32310:36;;;36528:79:69;36643:6;36626:247;36660:6;36655:3;36652:15;36626:247;;;36735:3;36764:64;36824:3;36812:10;36764:64;:::i;:::-;36752:77;;-1:-1:-1;36858:4:69;36849:14;;;;36677;36626:247;;36910:417;37008:5;37057:3;37050:4;37042:6;37038:17;37034:27;37024:122;;37065:79;2370:32310:36;;;37065:79:69;37175:6;37169:13;37200:121;37317:3;37309:6;37302:4;37294:6;37290:17;37200:121;:::i;37333:586::-;37444:6;37493:2;37481:9;37472:7;37468:23;37464:32;37461:119;;;37499:79;2370:32310:36;;;37499:79:69;37619:24;;37670:18;37659:30;;37656:117;;;37692:79;2370:32310:36;;;37692:79:69;37797:105;37894:7;37885:6;37874:9;37870:22;37797:105;:::i;37925:332::-;38084:2;38069:18;;38097:71;38073:9;38141:6;38097:71;:::i;:::-;38178:72;38246:2;38235:9;38231:18;38222:6;38178:72;:::i;38447:329::-;38660:23;;38586:4;38577:14;;;38696:63;38581:3;38660:23;38696:63;:::i;38782:306::-;38955:2;38940:18;;38968:113;38944:9;39054:6;38968:113;:::i;39094:442::-;39281:2;39266:18;;39294:71;39270:9;39338:6;39294:71;:::i;39730:366::-;39957:2;23447:19;;;39682:34;23490:14;;39659:58;;;39872:3;39969:93;39542:182;40102:419;40306:2;40319:47;;;40291:18;;40383:131;40291:18;40383:131;:::i;40757:366::-;40984:2;23447:19;;40899:3;23499:4;23490:14;;40667:34;40644:58;;-1:-1:-1;;;40731:2:69;40719:15;;40712:32;40913:74;-1:-1:-1;40996:93:69;40527:224;41129:419;41333:2;41346:47;;;41318:18;;41410:131;41318:18;41410:131;:::i;41554:332::-;41713:2;41698:18;;41726:71;41702:9;41770:6;41726:71;:::i;:::-;41807:72;41875:2;41864:9;41860:18;41851:6;41807:72;:::i;41997:248::-;42079:1;42089:113;42103:6;42100:1;42097:13;42089:113;;;42179:11;;;42173:18;42160:11;;;42153:39;42125:2;42118:10;42089:113;;;-1:-1:-1;;42236:1:69;42218:16;;42211:27;41997:248::o;42251:377::-;42339:3;42367:39;42400:5;41972:12;;41892:99;42367:39;23447:19;;;23499:4;23490:14;;42415:78;;42502:65;42560:6;42555:3;42548:4;42541:5;42537:16;42502:65;:::i;:::-;1056:2;1036:14;-1:-1:-1;;1032:28:69;42583:39;;;;;;-1:-1:-1;;42251:377:69:o;42634:313::-;42785:2;42798:47;;;42770:18;;42862:78;42770:18;42926:6;42862:78;:::i;42953:423::-;43132:2;43117:18;;43145:71;43121:9;43189:6;43145:71;:::i;:::-;43263:9;43257:4;43253:20;43248:2;43237:9;43233:18;43226:48;43291:78;43364:4;43355:6;43291:78;:::i;43382:533::-;43589:2;43574:18;;43602:71;43578:9;43646:6;43602:71;:::i;:::-;43683:72;43751:2;43740:9;43736:18;43727:6;43683:72;:::i;:::-;43802:9;43796:4;43792:20;43787:2;43776:9;43772:18;43765:48;43830:78;43903:4;43894:6;43830:78;:::i;:::-;43822:86;43382:533;-1:-1:-1;;;;;43382:533:69:o;44109:366::-;44336:2;23447:19;;;44061:34;23490:14;;44038:58;;;44251:3;44348:93;43921:182;44481:419;44685:2;44698:47;;;44670:18;;44762:131;44670:18;44762:131;:::i;45158:366::-;45385:2;23447:19;;45300:3;23499:4;23490:14;;45046:34;45023:58;;45115:29;45110:2;45098:15;;45091:54;45314:74;-1:-1:-1;45397:93:69;44906:246;45530:419;45734:2;45747:47;;;45719:18;;45811:131;45719:18;45811:131;:::i;46189:366::-;46416:2;23447:19;;46331:3;23499:4;23490:14;;46095:34;46072:58;;-1:-1:-1;;;46159:2:69;46147:15;;46140:36;46345:74;-1:-1:-1;46428:93:69;45955:228;46561:419;46765:2;46778:47;;;46750:18;;46842:131;46750:18;46842:131;:::i;46986:180::-;-1:-1:-1;;;47031:1:69;47024:88;47131:4;47128:1;47121:15;47155:4;47152:1;47145:15;47172:194;47303:9;;;47325:11;;;47322:37;;;47339:18;;:::i;47372:410::-;47517:9;;;;47679;;47712:15;;;47706:22;;47659:83;47636:139;;47755:18;;:::i;:::-;47420:362;47372:410;;;;:::o;47788:191::-;47917:9;;;47939:10;;;47936:36;;;47952:18;;:::i;48212:366::-;48439:2;23447:19;;48354:3;23499:4;23490:14;;48125:34;48102:58;;-1:-1:-1;;;48189:2:69;48177:15;;48170:29;48368:74;-1:-1:-1;48451:93:69;47985:221;48584:419;48788:2;48801:47;;;48773:18;;48865:131;48773:18;48865:131;:::i;49257:366::-;49484:2;23447:19;;49399:3;23499:4;23490:14;;49149:34;49126:58;;49218:25;49213:2;49201:15;;49194:50;49413:74;-1:-1:-1;49496:93:69;49009:242;49629:419;49833:2;49846:47;;;49818:18;;49910:131;49818:18;49910:131;:::i;50054:218::-;50183:2;50168:18;;50196:69;50172:9;50238:6;50196:69;:::i;50514:366::-;50741:2;23447:19;;50656:3;23499:4;23490:14;;50418:34;50395:58;;-1:-1:-1;;;50482:2:69;50470:15;;50463:38;50670:74;-1:-1:-1;50753:93:69;50278:230;50886:419;51090:2;51103:47;;;51075:18;;51167:131;51075:18;51167:131;:::i;51311:180::-;-1:-1:-1;;;51356:1:69;51349:88;51456:4;51453:1;51446:15;51480:4;51477:1;51470:15;51497:185;51537:1;51627;51617:35;;51632:18;;:::i;:::-;-1:-1:-1;51667:9:69;;51497:185::o;51688:332::-;51847:2;51832:18;;51860:71;51836:9;51904:6;51860:71;:::i;52261:366::-;52488:2;23447:19;;52403:3;23499:4;23490:14;;52166:34;52143:58;;-1:-1:-1;;;52230:2:69;52218:15;;52211:37;52417:74;-1:-1:-1;52500:93:69;52026:229;52633:419;52837:2;52850:47;;;52822:18;;52914:131;52822:18;52914:131;:::i;53289:366::-;53516:2;23447:19;;53431:3;23499:4;23490:14;;53198:34;53175:58;;-1:-1:-1;;;53262:2:69;53250:15;;53243:33;53445:74;-1:-1:-1;53528:93:69;53058:225;53661:419;53865:2;53878:47;;;53850:18;;53942:131;53850:18;53942:131;:::i;54343:386::-;54447:3;54475:38;54507:5;41972:12;;41892:99;54475:38;54626:65;54684:6;54679:3;54672:4;54665:5;54661:16;54626:65;:::i;:::-;54707:16;;;;;54343:386;-1:-1:-1;;54343:386:69:o;54735:271::-;54865:3;54887:93;54976:3;54967:6;54887:93;:::i;55197:366::-;55424:2;23447:19;;55339:3;23499:4;23490:14;;55152:31;55129:55;;55353:74;-1:-1:-1;55436:93:69;55012:179;55569:419;55773:2;55786:47;;;55758:18;;55850:131;55758:18;55850:131;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"3137600","executionCost":"infinite","totalCost":"infinite"},"external":{"INITIAL_INDEX()":"398","acceptOwnership()":"infinite","accessControlManager()":"infinite","blocksOrSecondsPerYear()":"infinite","claimRewardToken(address)":"infinite","claimRewardToken(address,address[])":"infinite","distributeBorrowerRewardToken(address,address,(uint256))":"infinite","distributeSupplierRewardToken(address,address)":"infinite","getBlockNumberOrTimestamp()":"infinite","grantRewardToken(address,uint256)":"infinite","initialize(address,address,uint256,address)":"infinite","initializeMarket(address)":"infinite","isTimeBased()":"infinite","lastContributorBlock(address)":"infinite","maxLoopsLimit()":"2417","owner()":"infinite","pendingOwner()":"infinite","renounceOwnership()":"infinite","rewardToken()":"infinite","rewardTokenAccrued(address)":"infinite","rewardTokenBorrowSpeeds(address)":"infinite","rewardTokenBorrowState(address)":"infinite","rewardTokenBorrowStateTimeBased(address)":"infinite","rewardTokenBorrowerIndex(address,address)":"infinite","rewardTokenContributorSpeeds(address)":"infinite","rewardTokenSupplierIndex(address,address)":"infinite","rewardTokenSupplySpeeds(address)":"infinite","rewardTokenSupplyState(address)":"infinite","rewardTokenSupplyStateTimeBased(address)":"infinite","setAccessControlManager(address)":"infinite","setContributorRewardTokenSpeed(address,uint256)":"infinite","setLastRewardingBlockTimestamps(address[],uint256[],uint256[])":"infinite","setLastRewardingBlocks(address[],uint32[],uint32[])":"infinite","setMaxLoopsLimit(uint256)":"infinite","setRewardTokenSpeeds(address[],uint256[],uint256[])":"infinite","transferOwnership(address)":"infinite","updateContributorRewards(address)":"infinite","updateRewardTokenBorrowIndex(address,(uint256))":"infinite","updateRewardTokenSupplyIndex(address)":"infinite"},"internal":{"_distributeBorrowerRewardToken(address,address,struct ExponentialNoError.Exp memory)":"infinite","_distributeSupplierRewardToken(address,address)":"infinite","_grantRewardToken(address,uint256)":"infinite","_initializeMarketBlockBased(address,uint32)":"101434","_initializeMarketTimestampBased(address,uint256)":"97166","_setLastRewardingBlock(contract VToken,uint32,uint32)":"infinite","_setLastRewardingBlockTimestamp(contract VToken,uint256,uint256)":"infinite","_setRewardTokenSpeed(contract VToken,uint256,uint256)":"infinite","_updateRewardTokenBorrowIndex(address,struct ExponentialNoError.Exp memory)":"infinite","_updateRewardTokenSupplyIndex(address)":"infinite"}},"methodIdentifiers":{"INITIAL_INDEX()":"160c3a03","acceptOwnership()":"79ba5097","accessControlManager()":"b4a0bdf3","blocksOrSecondsPerYear()":"6857249c","claimRewardToken(address)":"ca37271b","claimRewardToken(address,address[])":"04caeb10","distributeBorrowerRewardToken(address,address,(uint256))":"6a95ddef","distributeSupplierRewardToken(address,address)":"db7954fd","getBlockNumberOrTimestamp()":"e1d146fb","grantRewardToken(address,uint256)":"6d049329","initialize(address,address,uint256,address)":"be203094","initializeMarket(address)":"2a869a4d","isTimeBased()":"c7ad0895","lastContributorBlock(address)":"bea6b8b8","maxLoopsLimit()":"be26317e","owner()":"8da5cb5b","pendingOwner()":"e30c3978","renounceOwnership()":"715018a6","rewardToken()":"f7c618c1","rewardTokenAccrued(address)":"1627ee89","rewardTokenBorrowSpeeds(address)":"7c05a7c5","rewardTokenBorrowState(address)":"2c427b57","rewardTokenBorrowStateTimeBased(address)":"8f693ec7","rewardTokenBorrowerIndex(address,address)":"6dfd08ca","rewardTokenContributorSpeeds(address)":"efc75f24","rewardTokenSupplierIndex(address,address)":"552c0971","rewardTokenSupplySpeeds(address)":"74c4c1cc","rewardTokenSupplyState(address)":"92a18235","rewardTokenSupplyStateTimeBased(address)":"81814945","setAccessControlManager(address)":"0e32cb86","setContributorRewardTokenSpeed(address,uint256)":"2eed6906","setLastRewardingBlockTimestamps(address[],uint256[],uint256[])":"5d8441b8","setLastRewardingBlocks(address[],uint32[],uint32[])":"856e5e6c","setMaxLoopsLimit(uint256)":"80d45a2d","setRewardTokenSpeeds(address[],uint256[],uint256[])":"8c37dfa3","transferOwnership(address)":"f2fde38b","updateContributorRewards(address)":"741b2525","updateRewardTokenBorrowIndex(address,(uint256))":"23526079","updateRewardTokenSupplyIndex(address)":"0a3a3a9e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"timeBased_\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"blocksPerYear_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidBlocksPerYear\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTimeBasedConfiguration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loopsLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredLoops\",\"type\":\"uint256\"}],\"name\":\"MaxLoopsLimitExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"calledContract\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"methodSignature\",\"type\":\"string\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTimestamp\",\"type\":\"uint256\"}],\"name\":\"BorrowLastRewardingBlockTimestampUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"newBlock\",\"type\":\"uint32\"}],\"name\":\"BorrowLastRewardingBlockUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newSpeed\",\"type\":\"uint256\"}],\"name\":\"ContributorRewardTokenSpeedUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewardAccrued\",\"type\":\"uint256\"}],\"name\":\"ContributorRewardsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract VToken\",\"name\":\"vToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewardTokenDelta\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewardTokenTotal\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewardTokenBorrowIndex\",\"type\":\"uint256\"}],\"name\":\"DistributedBorrowerRewardToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract VToken\",\"name\":\"vToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"supplier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewardTokenDelta\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewardTokenTotal\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewardTokenSupplyIndex\",\"type\":\"uint256\"}],\"name\":\"DistributedSupplierRewardToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"}],\"name\":\"MarketInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldMaxLoopsLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newmaxLoopsLimit\",\"type\":\"uint256\"}],\"name\":\"MaxLoopsLimitUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAccessControlManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAccessControlManager\",\"type\":\"address\"}],\"name\":\"NewAccessControlManager\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"mantissa\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct ExponentialNoError.Exp\",\"name\":\"marketBorrowIndex\",\"type\":\"tuple\"}],\"name\":\"RewardTokenBorrowIndexUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract VToken\",\"name\":\"vToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newSpeed\",\"type\":\"uint256\"}],\"name\":\"RewardTokenBorrowSpeedUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RewardTokenGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"}],\"name\":\"RewardTokenSupplyIndexUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract VToken\",\"name\":\"vToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newSpeed\",\"type\":\"uint256\"}],\"name\":\"RewardTokenSupplySpeedUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTimestamp\",\"type\":\"uint256\"}],\"name\":\"SupplyLastRewardingBlockTimestampUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"newBlock\",\"type\":\"uint32\"}],\"name\":\"SupplyLastRewardingBlockUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"INITIAL_INDEX\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"\",\"type\":\"uint224\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"accessControlManager\",\"outputs\":[{\"internalType\":\"contract IAccessControlManagerV8\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blocksOrSecondsPerYear\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"contract VToken[]\",\"name\":\"vTokens\",\"type\":\"address[]\"}],\"name\":\"claimRewardToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"}],\"name\":\"claimRewardToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"mantissa\",\"type\":\"uint256\"}],\"internalType\":\"struct ExponentialNoError.Exp\",\"name\":\"marketBorrowIndex\",\"type\":\"tuple\"}],\"name\":\"distributeBorrowerRewardToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"supplier\",\"type\":\"address\"}],\"name\":\"distributeSupplierRewardToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockNumberOrTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"grantRewardToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract Comptroller\",\"name\":\"comptroller_\",\"type\":\"address\"},{\"internalType\":\"contract IERC20Upgradeable\",\"name\":\"rewardToken_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"loopsLimit_\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"accessControlManager_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"}],\"name\":\"initializeMarket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isTimeBased\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"lastContributorBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxLoopsLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardToken\",\"outputs\":[{\"internalType\":\"contract IERC20Upgradeable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenAccrued\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenBorrowSpeeds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenBorrowState\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"index\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"block\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"lastRewardingBlock\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenBorrowStateTimeBased\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"index\",\"type\":\"uint224\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastRewardingTimestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenBorrowerIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenContributorSpeeds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenSupplierIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenSupplySpeeds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenSupplyState\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"index\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"block\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"lastRewardingBlock\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenSupplyStateTimeBased\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"index\",\"type\":\"uint224\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastRewardingTimestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"accessControlManager_\",\"type\":\"address\"}],\"name\":\"setAccessControlManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contributor\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"rewardTokenSpeed\",\"type\":\"uint256\"}],\"name\":\"setContributorRewardTokenSpeed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract VToken[]\",\"name\":\"vTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"supplyLastRewardingBlockTimestamps\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"borrowLastRewardingBlockTimestamps\",\"type\":\"uint256[]\"}],\"name\":\"setLastRewardingBlockTimestamps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract VToken[]\",\"name\":\"vTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"supplyLastRewardingBlocks\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"borrowLastRewardingBlocks\",\"type\":\"uint32[]\"}],\"name\":\"setLastRewardingBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"setMaxLoopsLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract VToken[]\",\"name\":\"vTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"supplySpeeds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"borrowSpeeds\",\"type\":\"uint256[]\"}],\"name\":\"setRewardTokenSpeeds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contributor\",\"type\":\"address\"}],\"name\":\"updateContributorRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"mantissa\",\"type\":\"uint256\"}],\"internalType\":\"struct ExponentialNoError.Exp\",\"name\":\"marketBorrowIndex\",\"type\":\"tuple\"}],\"name\":\"updateRewardTokenBorrowIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"}],\"name\":\"updateRewardTokenSupplyIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"events\":{\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"claimRewardToken(address)\":{\"params\":{\"holder\":\"The address to claim REWARD TOKEN for\"}},\"claimRewardToken(address,address[])\":{\"params\":{\"holder\":\"The address to claim REWARD TOKEN for\",\"vTokens\":\"The list of markets to claim REWARD TOKEN in\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\",\"params\":{\"blocksPerYear_\":\"The number of blocks per year\",\"timeBased_\":\"A boolean indicating whether the contract is based on time or block.\"}},\"distributeBorrowerRewardToken(address,address,(uint256))\":{\"details\":\"This function should only be called when the user has a borrow position in the market      (e.g. Comptroller.preBorrowHook, and Comptroller.preRepayHook)      We avoid an external call to check if they are in the market to save gas because this function is called in many places\",\"params\":{\"borrower\":\"The address of the borrower to distribute REWARD TOKEN to\",\"marketBorrowIndex\":\"The current global borrow index of vToken\",\"vToken\":\"The market in which the borrower is interacting\"}},\"getBlockNumberOrTimestamp()\":{\"details\":\"Function to simply retrieve block number or block timestamp\",\"returns\":{\"_0\":\"Current block number or block timestamp\"}},\"grantRewardToken(address,uint256)\":{\"details\":\"Note: If there is not enough REWARD TOKEN, we do not perform the transfer all\",\"params\":{\"amount\":\"The amount of REWARD TOKEN to (possibly) transfer\",\"recipient\":\"The address of the recipient to transfer REWARD TOKEN to\"}},\"initialize(address,address,uint256,address)\":{\"details\":\"Initializes the deployer to owner\",\"params\":{\"accessControlManager_\":\"AccessControlManager contract address\",\"comptroller_\":\"Comptroller to attach the reward distributor to\",\"loopsLimit_\":\"Maximum number of iterations for the loops in this contract\",\"rewardToken_\":\"Reward token to distribute\"}},\"initializeMarket(address)\":{\"custom:access\":\"Only Comptroller\",\"custom:event\":\"MarketInitialized emits on success\",\"params\":{\"vToken\":\"The address of the vToken to be initialized\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setAccessControlManager(address)\":{\"custom:access\":\"Only Governance\",\"custom:event\":\"Emits NewAccessControlManager event\",\"details\":\"Admin function to set address of AccessControlManager\",\"params\":{\"accessControlManager_\":\"The new address of the AccessControlManager\"}},\"setContributorRewardTokenSpeed(address,uint256)\":{\"params\":{\"contributor\":\"The contributor whose REWARD TOKEN speed to update\",\"rewardTokenSpeed\":\"New REWARD TOKEN speed for contributor\"}},\"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])\":{\"params\":{\"borrowLastRewardingBlockTimestamps\":\"New borrow-side REWARD TOKEN last rewarding block timestamp for the corresponding market\",\"supplyLastRewardingBlockTimestamps\":\"New supply-side REWARD TOKEN last rewarding block timestamp for the corresponding market\",\"vTokens\":\"The markets whose REWARD TOKEN last rewarding block to update\"}},\"setLastRewardingBlocks(address[],uint32[],uint32[])\":{\"params\":{\"borrowLastRewardingBlocks\":\"New borrow-side REWARD TOKEN last rewarding block for the corresponding market\",\"supplyLastRewardingBlocks\":\"New supply-side REWARD TOKEN last rewarding block for the corresponding market\",\"vTokens\":\"The markets whose REWARD TOKEN last rewarding block to update\"}},\"setMaxLoopsLimit(uint256)\":{\"params\":{\"limit\":\"Limit for the max loops can execute at a time\"}},\"setRewardTokenSpeeds(address[],uint256[],uint256[])\":{\"params\":{\"borrowSpeeds\":\"New borrow-side REWARD TOKEN speed for the corresponding market\",\"supplySpeeds\":\"New supply-side REWARD TOKEN speed for the corresponding market\",\"vTokens\":\"The markets whose REWARD TOKEN speed to update\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"},\"updateContributorRewards(address)\":{\"params\":{\"contributor\":\"The address to calculate contributor rewards for\"}}},\"title\":\"`RewardsDistributor`\",\"version\":1},\"userdoc\":{\"errors\":{\"InvalidBlocksPerYear()\":[{\"notice\":\"Thrown when blocks per year is invalid\"}],\"InvalidTimeBasedConfiguration()\":[{\"notice\":\"Thrown when time based but blocks per year is provided\"}],\"MaxLoopsLimitExceeded(uint256,uint256)\":[{\"notice\":\"Thrown an error on maxLoopsLimit exceeds for any loop\"}],\"Unauthorized(address,address,string)\":[{\"notice\":\"Thrown when the action is prohibited by AccessControlManager\"}]},\"events\":{\"BorrowLastRewardingBlockTimestampUpdated(address,uint256)\":{\"notice\":\"Emitted when a reward token last rewarding timestamp for borrow is updated\"},\"BorrowLastRewardingBlockUpdated(address,uint32)\":{\"notice\":\"Emitted when a reward token last rewarding block for borrow is updated\"},\"ContributorRewardTokenSpeedUpdated(address,uint256)\":{\"notice\":\"Emitted when a new REWARD TOKEN speed is set for a contributor\"},\"ContributorRewardsUpdated(address,uint256)\":{\"notice\":\"Emitted when a reward for contributor is updated\"},\"DistributedBorrowerRewardToken(address,address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when REWARD TOKEN is distributed to a borrower\"},\"DistributedSupplierRewardToken(address,address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when REWARD TOKEN is distributed to a supplier\"},\"MarketInitialized(address)\":{\"notice\":\"Emitted when a market is initialized\"},\"MaxLoopsLimitUpdated(uint256,uint256)\":{\"notice\":\"Emitted when max loops limit is set\"},\"NewAccessControlManager(address,address)\":{\"notice\":\"Emitted when access control manager contract address is changed\"},\"RewardTokenBorrowIndexUpdated(address,(uint256))\":{\"notice\":\"Emitted when a reward token borrow index is updated\"},\"RewardTokenBorrowSpeedUpdated(address,uint256)\":{\"notice\":\"Emitted when a new borrow-side REWARD TOKEN speed is calculated for a market\"},\"RewardTokenGranted(address,uint256)\":{\"notice\":\"Emitted when REWARD TOKEN is granted by admin\"},\"RewardTokenSupplyIndexUpdated(address)\":{\"notice\":\"Emitted when a reward token supply index is updated\"},\"RewardTokenSupplySpeedUpdated(address,uint256)\":{\"notice\":\"Emitted when a new supply-side REWARD TOKEN speed is calculated for a market\"},\"SupplyLastRewardingBlockTimestampUpdated(address,uint256)\":{\"notice\":\"Emitted when a reward token last rewarding timestamp for supply is updated\"},\"SupplyLastRewardingBlockUpdated(address,uint32)\":{\"notice\":\"Emitted when a reward token last rewarding block for supply is updated\"}},\"kind\":\"user\",\"methods\":{\"INITIAL_INDEX()\":{\"notice\":\"The initial REWARD TOKEN index for a market\"},\"accessControlManager()\":{\"notice\":\"Returns the address of the access control manager contract\"},\"blocksOrSecondsPerYear()\":{\"notice\":\"Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored\"},\"claimRewardToken(address)\":{\"notice\":\"Claim all the rewardToken accrued by holder in all markets\"},\"claimRewardToken(address,address[])\":{\"notice\":\"Claim all the rewardToken accrued by holder in the specified markets\"},\"distributeBorrowerRewardToken(address,address,(uint256))\":{\"notice\":\"Calculate reward token accrued by a borrower and possibly transfer it to them         Borrowers will begin to accrue after the first interaction with the protocol.\"},\"grantRewardToken(address,uint256)\":{\"notice\":\"Transfer REWARD TOKEN to the recipient\"},\"initialize(address,address,uint256,address)\":{\"notice\":\"RewardsDistributor initializer\"},\"initializeMarket(address)\":{\"notice\":\"Initializes the market state for a specific vToken\"},\"isTimeBased()\":{\"notice\":\"Acknowledges if a contract is time based or not\"},\"lastContributorBlock(address)\":{\"notice\":\"Last slot (block or second) at which a contributor's REWARD TOKEN rewards have been allocated\"},\"rewardTokenAccrued(address)\":{\"notice\":\"The REWARD TOKEN accrued but not yet transferred to each user\"},\"rewardTokenBorrowSpeeds(address)\":{\"notice\":\"The rate at which rewardToken is distributed to the corresponding borrow market per slot (block or second)\"},\"rewardTokenBorrowState(address)\":{\"notice\":\"The REWARD TOKEN market borrow state for each market\"},\"rewardTokenBorrowStateTimeBased(address)\":{\"notice\":\"The REWARD TOKEN market borrow state for each market\"},\"rewardTokenBorrowerIndex(address,address)\":{\"notice\":\"The REWARD TOKEN borrow index for each market for each borrower as of the last time they accrued REWARD TOKEN\"},\"rewardTokenContributorSpeeds(address)\":{\"notice\":\"The portion of REWARD TOKEN that each contributor receives per slot (block or second)\"},\"rewardTokenSupplierIndex(address,address)\":{\"notice\":\"The REWARD TOKEN borrow index for each market for each supplier as of the last time they accrued REWARD TOKEN\"},\"rewardTokenSupplySpeeds(address)\":{\"notice\":\"The rate at which rewardToken is distributed to the corresponding supply market per slot (block or second)\"},\"rewardTokenSupplyState(address)\":{\"notice\":\"The REWARD TOKEN market supply state for each market\"},\"rewardTokenSupplyStateTimeBased(address)\":{\"notice\":\"The REWARD TOKEN market supply state for each market\"},\"setAccessControlManager(address)\":{\"notice\":\"Sets the address of AccessControlManager\"},\"setContributorRewardTokenSpeed(address,uint256)\":{\"notice\":\"Set REWARD TOKEN speed for a single contributor\"},\"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])\":{\"notice\":\"Set REWARD TOKEN last rewarding block timestamp for the specified markets, used when contract is time based\"},\"setLastRewardingBlocks(address[],uint32[],uint32[])\":{\"notice\":\"Set REWARD TOKEN last rewarding block for the specified markets, used when contract is block based\"},\"setMaxLoopsLimit(uint256)\":{\"notice\":\"Set the limit for the loops can iterate to avoid the DOS\"},\"setRewardTokenSpeeds(address[],uint256[],uint256[])\":{\"notice\":\"Set REWARD TOKEN borrow and supply speeds for the specified markets\"},\"updateContributorRewards(address)\":{\"notice\":\"Calculate additional accrued REWARD TOKEN for a contributor since last accrual\"}},\"notice\":\"Contract used to configure, track and distribute rewards to users based on their actions (borrows and supplies) in the protocol. Users can receive additional rewards through a `RewardsDistributor`. Each `RewardsDistributor` proxy is initialized with a specific reward token and `Comptroller`, which can then distribute the reward token to users that supply or borrow in the associated pool. Authorized users can set the reward token borrow and supply speeds for each market in the pool. This sets a fixed amount of reward token to be released each slot (block or second) for borrowers and suppliers, which is distributed based on a user\\u2019s percentage of the borrows or supplies respectively. The owner can also set up reward distributions to contributor addresses (distinct from suppliers and borrowers) by setting their contributor reward token speed, which similarly allocates a fixed amount of reward token per slot (block or second). The owner has the ability to transfer any amount of reward tokens held by the contract to any other address. Rewards are not distributed automatically and must be claimed by a user calling `claimRewardToken()`. Users should be aware that it is up to the owner and other centralized entities to ensure that the `RewardsDistributor` holds enough tokens to distribute the accumulated rewards of users and contributors.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\":\"RewardsDistributor\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./OwnableUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership} and {acceptOwnership}.\\n *\\n * This module is used through inheritance. It will make available all functions\\n * from parent (Ownable).\\n */\\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\\n    address private _pendingOwner;\\n\\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\\n\\n    function __Ownable2Step_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable2Step_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Returns the address of the pending owner.\\n     */\\n    function pendingOwner() public view virtual returns (address) {\\n        return _pendingOwner;\\n    }\\n\\n    /**\\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\\n        _pendingOwner = newOwner;\\n        emit OwnershipTransferStarted(owner(), newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual override {\\n        delete _pendingOwner;\\n        super._transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev The new owner accepts the ownership transfer.\\n     */\\n    function acceptOwnership() public virtual {\\n        address sender = _msgSender();\\n        require(pendingOwner() == sender, \\\"Ownable2Step: caller is not the new owner\\\");\\n        _transferOwnership(sender);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x9140dabc466abab21b48b72dbda26736b1183a310d0e677d3719d201df026510\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * ==== Security Considerations\\n *\\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\\n * generally recommended is:\\n *\\n * ```solidity\\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\\n *     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\\n *     doThing(..., value);\\n * }\\n *\\n * function doThing(..., uint256 value) public {\\n *     token.safeTransferFrom(msg.sender, address(this), value);\\n *     ...\\n * }\\n * ```\\n *\\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\\n * {SafeERC20-safeTransferFrom}).\\n *\\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\\n * contracts should have entry points that don't rely on permit.\\n */\\ninterface IERC20PermitUpgradeable {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     *\\n     * CAUTION: See Security Considerations above.\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x07e881de3b9f6d2c07909f193f24b96c7fe4ea60013260f3f25aecd8bab3c2f8\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\nimport \\\"../extensions/IERC20PermitUpgradeable.sol\\\";\\nimport \\\"../../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20Upgradeable {\\n    using AddressUpgradeable for address;\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransfer(IERC20Upgradeable token, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    /**\\n     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeIncreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        uint256 oldAllowance = token.allowance(address(this), spender);\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));\\n    }\\n\\n    /**\\n     * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeDecreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));\\n        }\\n    }\\n\\n    /**\\n     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n     * to be set to zero before setting it to a non-zero value, such as USDT.\\n     */\\n    function forceApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);\\n\\n        if (!_callOptionalReturnBool(token, approvalCall)) {\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));\\n            _callOptionalReturn(token, approvalCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.\\n     * Revert on invalid signature.\\n     */\\n    function safePermit(\\n        IERC20PermitUpgradeable token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20Upgradeable token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        require(returndata.length == 0 || abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     *\\n     * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\\n     */\\n    function _callOptionalReturnBool(IERC20Upgradeable token, bytes memory data) private returns (bool) {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\\n        // and not revert is the subcall reverts.\\n\\n        (bool success, bytes memory returndata) = address(token).call(data);\\n        return\\n            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && AddressUpgradeable.isContract(address(token));\\n    }\\n}\\n\",\"keccak256\":\"0x23b997be73d3dd46885262704f0f8cfc7273fdadfe303d37969a9561373972b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n    /**\\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n     *\\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n     * {RoleAdminChanged} not being emitted signaling this.\\n     *\\n     * _Available since v3.1._\\n     */\\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n    /**\\n     * @dev Emitted when `account` is granted `role`.\\n     *\\n     * `sender` is the account that originated the contract call, an admin role\\n     * bearer except when using {AccessControl-_setupRole}.\\n     */\\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Emitted when `account` is revoked `role`.\\n     *\\n     * `sender` is the account that originated the contract call:\\n     *   - if using `revokeRole`, it is the admin role bearer\\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n     */\\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Returns `true` if `account` has been granted `role`.\\n     */\\n    function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n    /**\\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\\n     * {revokeRole}.\\n     *\\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n     */\\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n    /**\\n     * @dev Grants `role` to `account`.\\n     *\\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function grantRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from `account`.\\n     *\\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function revokeRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from the calling account.\\n     *\\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n     * purpose is to provide a mechanism for accounts to lose their privileges\\n     * if they are compromised (such as when a trusted device is misplaced).\\n     *\\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must be `account`.\\n     */\\n    function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\n\\nimport \\\"./IAccessControlManagerV8.sol\\\";\\n\\n/**\\n * @title AccessControlledV8\\n * @author Venus\\n * @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\\n * to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\\n */\\nabstract contract AccessControlledV8 is Initializable, Ownable2StepUpgradeable {\\n    /// @notice Access control manager contract\\n    IAccessControlManagerV8 internal _accessControlManager;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when access control manager contract address is changed\\n    event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager);\\n\\n    /// @notice Thrown when the action is prohibited by AccessControlManager\\n    error Unauthorized(address sender, address calledContract, string methodSignature);\\n\\n    function __AccessControlled_init(address accessControlManager_) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n    }\\n\\n    function __AccessControlled_init_unchained(address accessControlManager_) internal onlyInitializing {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Sets the address of AccessControlManager\\n     * @dev Admin function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     * @custom:event Emits NewAccessControlManager event\\n     * @custom:access Only Governance\\n     */\\n    function setAccessControlManager(address accessControlManager_) external onlyOwner {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Returns the address of the access control manager contract\\n     */\\n    function accessControlManager() external view returns (IAccessControlManagerV8) {\\n        return _accessControlManager;\\n    }\\n\\n    /**\\n     * @dev Internal function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     */\\n    function _setAccessControlManager(address accessControlManager_) internal {\\n        require(address(accessControlManager_) != address(0), \\\"invalid acess control manager address\\\");\\n        address oldAccessControlManager = address(_accessControlManager);\\n        _accessControlManager = IAccessControlManagerV8(accessControlManager_);\\n        emit NewAccessControlManager(oldAccessControlManager, accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Reverts if the call is not allowed by AccessControlManager\\n     * @param signature Method signature\\n     */\\n    function _checkAccessAllowed(string memory signature) internal view {\\n        bool isAllowedToCall = _accessControlManager.isAllowedToCall(msg.sender, signature);\\n\\n        if (!isAllowedToCall) {\\n            revert Unauthorized(msg.sender, address(this), signature);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe0fd441c84ac907cabc88db69ef04f6d7532d770c7e6a1dfe6e7d6305debb49\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport \\\"@openzeppelin/contracts/access/IAccessControl.sol\\\";\\n\\n/**\\n * @title IAccessControlManagerV8\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\\n */\\ninterface IAccessControlManagerV8 is IAccessControl {\\n    function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n    function revokeCallPermission(\\n        address contractAddress,\\n        string calldata functionSig,\\n        address accountToRevoke\\n    ) external;\\n\\n    function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n    function hasPermission(\\n        address account,\\n        address contractAddress,\\n        string calldata functionSig\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xaa29b098440d0b3a131c5ecdf25ce548790c1b5ac7bf9b5c0264b6af6f7a1e0b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Comptroller.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\n\\nimport { ComptrollerInterface, Action } from \\\"./ComptrollerInterface.sol\\\";\\nimport { ComptrollerStorage } from \\\"./ComptrollerStorage.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"./MaxLoopsLimitHelper.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title Comptroller\\n * @author Venus\\n * @notice The Comptroller is designed to provide checks for all minting, redeeming, transferring, borrowing, lending, repaying, liquidating,\\n * and seizing done by the `vToken` contract. Each pool has one `Comptroller` checking these interactions across markets. When a user interacts\\n * with a given market by one of these main actions, a call is made to a corresponding hook in the associated `Comptroller`, which either allows\\n * or reverts the transaction. These hooks also update supply and borrow rewards as they are called. The comptroller holds the logic for assessing\\n * liquidity snapshots of an account via the collateral factor and liquidation threshold. This check determines the collateral needed for a borrow,\\n * as well as how much of a borrow may be liquidated. A user may borrow a portion of their collateral with the maximum amount determined by the\\n * markets collateral factor. However, if their borrowed amount exceeds an amount calculated using the market\\u2019s corresponding liquidation threshold,\\n * the borrow is eligible for liquidation.\\n *\\n * The `Comptroller` also includes two functions `liquidateAccount()` and `healAccount()`, which are meant to handle accounts that do not exceed\\n * the `minLiquidatableCollateral` for the `Comptroller`:\\n *\\n * - `healAccount()`: This function is called to seize all of a given user\\u2019s collateral, requiring the `msg.sender` repay a certain percentage\\n * of the debt calculated by `collateral/(borrows*liquidationIncentive)`. The function can only be called if the calculated percentage does not exceed\\n * 100%, because otherwise no `badDebt` would be created and `liquidateAccount()` should be used instead. The difference in the actual amount of debt\\n * and debt paid off is recorded as `badDebt` for each market, which can then be auctioned off for the risk reserves of the associated pool.\\n * - `liquidateAccount()`: This function can only be called if the collateral seized will cover all borrows of an account, as well as the liquidation\\n * incentive. Otherwise, the pool will incur bad debt, in which case the function `healAccount()` should be used instead. This function skips the logic\\n * verifying that the repay amount does not exceed the close factor.\\n */\\ncontract Comptroller is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    ComptrollerStorage,\\n    ComptrollerInterface,\\n    ExponentialNoError,\\n    MaxLoopsLimitHelper\\n{\\n    // PoolRegistry, immutable to save on gas\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    address public immutable poolRegistry;\\n\\n    /// @notice Emitted when an account enters a market\\n    event MarketEntered(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when an account exits a market\\n    event MarketExited(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when close factor is changed by admin\\n    event NewCloseFactor(uint256 oldCloseFactorMantissa, uint256 newCloseFactorMantissa);\\n\\n    /// @notice Emitted when a collateral factor is changed by admin\\n    event NewCollateralFactor(VToken vToken, uint256 oldCollateralFactorMantissa, uint256 newCollateralFactorMantissa);\\n\\n    /// @notice Emitted when liquidation threshold is changed by admin\\n    event NewLiquidationThreshold(\\n        VToken vToken,\\n        uint256 oldLiquidationThresholdMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    );\\n\\n    /// @notice Emitted when liquidation incentive is changed by admin\\n    event NewLiquidationIncentive(uint256 oldLiquidationIncentiveMantissa, uint256 newLiquidationIncentiveMantissa);\\n\\n    /// @notice Emitted when price oracle is changed\\n    event NewPriceOracle(ResilientOracleInterface oldPriceOracle, ResilientOracleInterface newPriceOracle);\\n\\n    /// @notice Emitted when an action is paused on a market\\n    event ActionPausedMarket(VToken vToken, Action action, bool pauseState);\\n\\n    /// @notice Emitted when borrow cap for a vToken is changed\\n    event NewBorrowCap(VToken indexed vToken, uint256 newBorrowCap);\\n\\n    /// @notice Emitted when the collateral threshold (in USD) for non-batch liquidations is changed\\n    event NewMinLiquidatableCollateral(uint256 oldMinLiquidatableCollateral, uint256 newMinLiquidatableCollateral);\\n\\n    /// @notice Emitted when supply cap for a vToken is changed\\n    event NewSupplyCap(VToken indexed vToken, uint256 newSupplyCap);\\n\\n    /// @notice Emitted when a rewards distributor is added\\n    event NewRewardsDistributor(address indexed rewardsDistributor, address indexed rewardToken);\\n\\n    /// @notice Emitted when a market is supported\\n    event MarketSupported(VToken vToken);\\n\\n    /// @notice Emitted when prime token contract address is changed\\n    event NewPrimeToken(IPrime oldPrimeToken, IPrime newPrimeToken);\\n\\n    /// @notice Emitted when forced liquidation is enabled or disabled for a market\\n    event IsForcedLiquidationEnabledUpdated(address indexed vToken, bool enable);\\n\\n    /// @notice Emitted when a market is unlisted\\n    event MarketUnlisted(address indexed vToken);\\n    /// @notice Emitted when the borrowing or redeeming delegate rights are updated for an account\\n    event DelegateUpdated(address indexed approver, address indexed delegate, bool approved);\\n\\n    /// @notice Thrown when collateral factor exceeds the upper bound\\n    error InvalidCollateralFactor();\\n\\n    /// @notice Thrown when liquidation threshold exceeds the collateral factor\\n    error InvalidLiquidationThreshold();\\n\\n    /// @notice Thrown when the action is only available to specific sender, but the real sender was different\\n    error UnexpectedSender(address expectedSender, address actualSender);\\n\\n    /// @notice Thrown when the oracle returns an invalid price for some asset\\n    error PriceError(address vToken);\\n\\n    /// @notice Thrown if VToken unexpectedly returned a nonzero error code while trying to get account snapshot\\n    error SnapshotError(address vToken, address user);\\n\\n    /// @notice Thrown when the market is not listed\\n    error MarketNotListed(address market);\\n\\n    /// @notice Thrown when a market has an unexpected comptroller\\n    error ComptrollerMismatch();\\n\\n    /// @notice Thrown when user is not member of market\\n    error MarketNotCollateral(address vToken, address user);\\n\\n    /// @notice Thrown when borrow action is not paused\\n    error BorrowActionNotPaused();\\n\\n    /// @notice Thrown when mint action is not paused\\n    error MintActionNotPaused();\\n\\n    /// @notice Thrown when redeem action is not paused\\n    error RedeemActionNotPaused();\\n\\n    /// @notice Thrown when repay action is not paused\\n    error RepayActionNotPaused();\\n\\n    /// @notice Thrown when seize action is not paused\\n    error SeizeActionNotPaused();\\n\\n    /// @notice Thrown when exit market action is not paused\\n    error ExitMarketActionNotPaused();\\n\\n    /// @notice Thrown when transfer action is not paused\\n    error TransferActionNotPaused();\\n\\n    /// @notice Thrown when enter market action is not paused\\n    error EnterMarketActionNotPaused();\\n\\n    /// @notice Thrown when liquidate action is not paused\\n    error LiquidateActionNotPaused();\\n\\n    /// @notice Thrown when borrow cap is not zero\\n    error BorrowCapIsNotZero();\\n\\n    /// @notice Thrown when supply cap is not zero\\n    error SupplyCapIsNotZero();\\n\\n    /// @notice Thrown when collateral factor is not zero\\n    error CollateralFactorIsNotZero();\\n\\n    /**\\n     * @notice Thrown during the liquidation if user's total collateral amount is lower than\\n     *   a predefined threshold. In this case only batch liquidations (either liquidateAccount\\n     *   or healAccount) are available.\\n     */\\n    error MinimalCollateralViolated(uint256 expectedGreaterThan, uint256 actual);\\n    error CollateralExceedsThreshold(uint256 expectedLessThanOrEqualTo, uint256 actual);\\n    error InsufficientCollateral(uint256 collateralToSeize, uint256 availableCollateral);\\n\\n    /// @notice Thrown when the account doesn't have enough liquidity to redeem or borrow\\n    error InsufficientLiquidity();\\n\\n    /// @notice Thrown when trying to liquidate a healthy account\\n    error InsufficientShortfall();\\n\\n    /// @notice Thrown when trying to repay more than allowed by close factor\\n    error TooMuchRepay();\\n\\n    /// @notice Thrown if the user is trying to exit a market in which they have an outstanding debt\\n    error NonzeroBorrowBalance();\\n\\n    /// @notice Thrown when trying to perform an action that is paused\\n    error ActionPaused(address market, Action action);\\n\\n    /// @notice Thrown when trying to add a market that is already listed\\n    error MarketAlreadyListed(address market);\\n\\n    /// @notice Thrown if the supply cap is exceeded\\n    error SupplyCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if the borrow cap is exceeded\\n    error BorrowCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if delegate approval status is already set to the requested value\\n    error DelegationStatusUnchanged();\\n\\n    /// @param poolRegistry_ Pool registry address\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    /// @custom:error ZeroAddressNotAllowed is thrown when pool registry address is zero\\n    constructor(address poolRegistry_) {\\n        ensureNonzeroAddress(poolRegistry_);\\n\\n        poolRegistry = poolRegistry_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @param loopLimit Limit for the loops can iterate to avoid the DOS\\n     * @param accessControlManager Access control manager contract address\\n     */\\n    function initialize(uint256 loopLimit, address accessControlManager) external initializer {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager);\\n\\n        _setMaxLoopsLimit(loopLimit);\\n    }\\n\\n    /**\\n     * @notice Add assets to be included in account liquidity calculation; enabling them to be used as collateral\\n     * @param vTokens The list of addresses of the vToken markets to be enabled\\n     * @return errors An array of NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketEntered is emitted for each market on success\\n     * @custom:error ActionPaused error is thrown if entering any of the markets is paused\\n     * @custom:error MarketNotListed error is thrown if any of the markets is not listed\\n     * @custom:access Not restricted\\n     */\\n    function enterMarkets(address[] memory vTokens) external override returns (uint256[] memory) {\\n        uint256 len = vTokens.length;\\n\\n        uint256[] memory results = new uint256[](len);\\n        for (uint256 i; i < len; ++i) {\\n            VToken vToken = VToken(vTokens[i]);\\n\\n            _addToMarket(vToken, msg.sender);\\n            results[i] = NO_ERROR;\\n        }\\n\\n        return results;\\n    }\\n\\n    /**\\n     * @notice Unlist a market by setting isListed to false\\n     * @dev Checks if all actions are paused, borrow/supply caps is set to 0 and collateral factor is to 0.\\n     * @param market The address of the market (token) to unlist\\n     * @return uint256 Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketUnlisted is emitted on success\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error BorrowActionNotPaused error is thrown if borrow action is not paused\\n     * @custom:error MintActionNotPaused error is thrown if mint action is not paused\\n     * @custom:error RedeemActionNotPaused error is thrown if redeem action is not paused\\n     * @custom:error RepayActionNotPaused error is thrown if repay action is not paused\\n     * @custom:error EnterMarketActionNotPaused error is thrown if enter market action is not paused\\n     * @custom:error LiquidateActionNotPaused error is thrown if liquidate action is not paused\\n     * @custom:error BorrowCapIsNotZero error is thrown if borrow cap is not zero\\n     * @custom:error SupplyCapIsNotZero error is thrown if supply cap is not zero\\n     * @custom:error CollateralFactorIsNotZero error is thrown if collateral factor is not zero\\n     */\\n    function unlistMarket(address market) external returns (uint256) {\\n        _checkAccessAllowed(\\\"unlistMarket(address)\\\");\\n\\n        Market storage _market = markets[market];\\n\\n        if (!_market.isListed) {\\n            revert MarketNotListed(market);\\n        }\\n\\n        if (!actionPaused(market, Action.BORROW)) {\\n            revert BorrowActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.MINT)) {\\n            revert MintActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REDEEM)) {\\n            revert RedeemActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REPAY)) {\\n            revert RepayActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.SEIZE)) {\\n            revert SeizeActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.ENTER_MARKET)) {\\n            revert EnterMarketActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.LIQUIDATE)) {\\n            revert LiquidateActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.TRANSFER)) {\\n            revert TransferActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.EXIT_MARKET)) {\\n            revert ExitMarketActionNotPaused();\\n        }\\n\\n        if (borrowCaps[market] != 0) {\\n            revert BorrowCapIsNotZero();\\n        }\\n\\n        if (supplyCaps[market] != 0) {\\n            revert SupplyCapIsNotZero();\\n        }\\n\\n        if (_market.collateralFactorMantissa != 0) {\\n            revert CollateralFactorIsNotZero();\\n        }\\n\\n        _market.isListed = false;\\n        emit MarketUnlisted(market);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Grants or revokes the borrowing or redeeming delegate rights to / from an account\\n     *  If allowed, the delegate will be able to borrow funds on behalf of the sender\\n     *  Upon a delegated borrow, the delegate will receive the funds, and the borrower\\n     *  will see the debt on their account\\n     *  Upon a delegated redeem, the delegate will receive the redeemed amount and the approver\\n     *  will see a deduction in his vToken balance\\n     * @param delegate The address to update the rights for\\n     * @param approved Whether to grant (true) or revoke (false) the borrowing or redeeming rights\\n     * @custom:event DelegateUpdated emits on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when delegate address is zero\\n     * @custom:error DelegationStatusUnchanged is thrown if approval status is already set to the requested value\\n     * @custom:access Not restricted\\n     */\\n    function updateDelegate(address delegate, bool approved) external {\\n        ensureNonzeroAddress(delegate);\\n        if (approvedDelegates[msg.sender][delegate] == approved) {\\n            revert DelegationStatusUnchanged();\\n        }\\n\\n        approvedDelegates[msg.sender][delegate] = approved;\\n        emit DelegateUpdated(msg.sender, delegate, approved);\\n    }\\n\\n    /**\\n     * @notice Removes asset from sender's account liquidity calculation; disabling them as collateral\\n     * @dev Sender must not have an outstanding borrow balance in the asset,\\n     *  or be providing necessary collateral for an outstanding borrow.\\n     * @param vTokenAddress The address of the asset to be removed\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketExited is emitted on success\\n     * @custom:error ActionPaused error is thrown if exiting the market is paused\\n     * @custom:error NonzeroBorrowBalance error is thrown if the user has an outstanding borrow in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if exiting the market would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function exitMarket(address vTokenAddress) external override returns (uint256) {\\n        _checkActionPauseState(vTokenAddress, Action.EXIT_MARKET);\\n        VToken vToken = VToken(vTokenAddress);\\n        /* Get sender tokensHeld and amountOwed underlying from the vToken */\\n        (uint256 tokensHeld, uint256 amountOwed, ) = _safeGetAccountSnapshot(vToken, msg.sender);\\n\\n        /* Fail if the sender has a borrow balance */\\n        if (amountOwed != 0) {\\n            revert NonzeroBorrowBalance();\\n        }\\n\\n        /* Fail if the sender is not permitted to redeem all of their tokens */\\n        _checkRedeemAllowed(vTokenAddress, msg.sender, tokensHeld);\\n\\n        Market storage marketToExit = markets[address(vToken)];\\n\\n        /* Return true if the sender is not already \\u2018in\\u2019 the market */\\n        if (!marketToExit.accountMembership[msg.sender]) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Set vToken account membership to false */\\n        delete marketToExit.accountMembership[msg.sender];\\n\\n        /* Delete vToken from the account\\u2019s list of assets */\\n        // load into memory for faster iteration\\n        VToken[] memory userAssetList = accountAssets[msg.sender];\\n        uint256 len = userAssetList.length;\\n\\n        uint256 assetIndex = len;\\n        for (uint256 i; i < len; ++i) {\\n            if (userAssetList[i] == vToken) {\\n                assetIndex = i;\\n                break;\\n            }\\n        }\\n\\n        // We *must* have found the asset in the list or our redundant data structure is broken\\n        assert(assetIndex < len);\\n\\n        // copy last item in list to location of item to be removed, reduce length by 1\\n        VToken[] storage storedList = accountAssets[msg.sender];\\n        storedList[assetIndex] = storedList[storedList.length - 1];\\n        storedList.pop();\\n\\n        emit MarketExited(vToken, msg.sender);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /*** Policy Hooks ***/\\n\\n    /**\\n     * @notice Checks if the account should be allowed to mint tokens in the given market\\n     * @param vToken The market to verify the mint against\\n     * @param minter The account which would get the minted tokens\\n     * @param mintAmount The amount of underlying being supplied to the market in exchange for tokens\\n     * @custom:error ActionPaused error is thrown if supplying to this market is paused\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error SupplyCapExceeded error is thrown if the total supply exceeds the cap after minting\\n     * @custom:access Not restricted\\n     */\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external override {\\n        _checkActionPauseState(vToken, Action.MINT);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        uint256 supplyCap = supplyCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (supplyCap != type(uint256).max) {\\n            uint256 vTokenSupply = VToken(vToken).totalSupply();\\n            Exp memory exchangeRate = Exp({ mantissa: VToken(vToken).exchangeRateStored() });\\n            uint256 nextTotalSupply = mul_ScalarTruncateAddUInt(exchangeRate, vTokenSupply, mintAmount);\\n            if (nextTotalSupply > supplyCap) {\\n                revert SupplyCapExceeded(vToken, supplyCap);\\n            }\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, minter);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates mint, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being minted\\n     * @param minter The address minting the tokens\\n     * @param actualMintAmount The amount of the underlying asset being minted\\n     * @param mintTokens The number of tokens being minted\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function mintVerify(address vToken, address minter, uint256 actualMintAmount, uint256 mintTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(minter, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to redeem tokens in the given market\\n     * @param vToken The market to verify the redeem against\\n     * @param redeemer The account which would redeem the tokens\\n     * @param redeemTokens The number of vTokens to exchange for the underlying asset in the market\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external override {\\n        _checkActionPauseState(vToken, Action.REDEEM);\\n\\n        _checkRedeemAllowed(vToken, redeemer, redeemTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, redeemer);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates redeem, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being redeemed\\n     * @param redeemer The address redeeming the tokens\\n     * @param redeemAmount The amount of the underlying asset being redeemed\\n     * @param redeemTokens The number of tokens being redeemed\\n     */\\n    function redeemVerify(address vToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(redeemer, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates repayBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being repaid\\n     * @param payer The address repaying the borrow\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     */\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer, // solhint-disable-line no-unused-vars\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 borrowerIndex // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates liquidateBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     * @param seizeTokens The amount of collateral token that will be seized\\n     */\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenBorrowed);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenBorrowed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates seize, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param seizeTokens The number of collateral tokens to seize\\n     */\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenCollateral);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenCollateral);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates transfer, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being transferred\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function transferVerify(address vToken, address src, address dst, uint256 transferTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(src, vToken);\\n            prime.accrueInterestAndUpdateScore(dst, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to borrow the underlying asset of the given market\\n     * @param vToken The market to verify the borrow against\\n     * @param borrower The account which would borrow the asset\\n     * @param borrowAmount The amount of underlying the account would borrow\\n     * @custom:error ActionPaused error is thrown if borrowing is paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if there is not enough collateral to borrow\\n     * @custom:error BorrowCapExceeded is thrown if the borrow cap will be exceeded should this borrow succeed\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted if vToken is enabled as collateral, otherwise only vToken\\n     */\\n    /// disable-eslint\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external override {\\n        _checkActionPauseState(vToken, Action.BORROW);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (!markets[vToken].accountMembership[borrower]) {\\n            // only vTokens may call borrowAllowed if borrower not in market\\n            _checkSenderIs(vToken);\\n\\n            // attempt to add borrower to the market or revert\\n            _addToMarket(VToken(msg.sender), borrower);\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (oracle.getUnderlyingPrice(vToken) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 borrowCap = borrowCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (borrowCap != type(uint256).max) {\\n            uint256 totalBorrows = VToken(vToken).totalBorrows();\\n            uint256 badDebt = VToken(vToken).badDebt();\\n            uint256 nextTotalBorrows = totalBorrows + borrowAmount + badDebt;\\n            if (nextTotalBorrows > borrowCap) {\\n                revert BorrowCapExceeded(vToken, borrowCap);\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            borrower,\\n            VToken(vToken),\\n            0,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n\\n        Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates borrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset whose underlying is being borrowed\\n     * @param borrower The address borrowing the underlying\\n     * @param borrowAmount The amount of the underlying asset requested to borrow\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function borrowVerify(address vToken, address borrower, uint256 borrowAmount) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to repay a borrow in the given market\\n     * @param vToken The market to verify the repay against\\n     * @param borrower The account which would borrowed the asset\\n     * @custom:error ActionPaused error is thrown if repayments are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:access Not restricted\\n     */\\n    function preRepayHook(address vToken, address borrower) external override {\\n        _checkActionPauseState(vToken, Action.REPAY);\\n\\n        oracle.updatePrice(vToken);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the liquidation should be allowed to occur\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param borrower The address of the borrower\\n     * @param repayAmount The amount of underlying being repaid\\n     * @param skipLiquidityCheck Allows the borrow to be liquidated regardless of the account liquidity\\n     * @custom:error ActionPaused error is thrown if liquidations are paused in this market\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error TooMuchRepay error is thrown if the liquidator is trying to repay more than allowed by close factor\\n     * @custom:error MinimalCollateralViolated is thrown if the users' total collateral is lower than the threshold for non-batch liquidations\\n     * @custom:error InsufficientShortfall is thrown when trying to liquidate a healthy account\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     */\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        // Pause Action.LIQUIDATE on BORROWED TOKEN to prevent liquidating it.\\n        // If we want to pause liquidating to vTokenCollateral, we should pause\\n        // Action.SEIZE on it\\n        _checkActionPauseState(vTokenBorrowed, Action.LIQUIDATE);\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(address(vTokenBorrowed));\\n        }\\n        if (!markets[vTokenCollateral].isListed) {\\n            revert MarketNotListed(address(vTokenCollateral));\\n        }\\n\\n        uint256 borrowBalance = VToken(vTokenBorrowed).borrowBalanceStored(borrower);\\n\\n        /* Allow accounts to be liquidated if it is a forced liquidation */\\n        if (skipLiquidityCheck || isForcedLiquidationEnabled[vTokenBorrowed]) {\\n            if (repayAmount > borrowBalance) {\\n                revert TooMuchRepay();\\n            }\\n            return;\\n        }\\n\\n        /* The borrower must have shortfall and collateral > threshold in order to be liquidatable */\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral <= minLiquidatableCollateral) {\\n            /* The liquidator should use either liquidateAccount or healAccount */\\n            revert MinimalCollateralViolated(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        /* The liquidator may not repay more than what is allowed by the closeFactor */\\n        uint256 maxClose = mul_ScalarTruncate(Exp({ mantissa: closeFactorMantissa }), borrowBalance);\\n        if (repayAmount > maxClose) {\\n            revert TooMuchRepay();\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the seizing of assets should be allowed to occur\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param seizerContract Contract that tries to seize the asset (either borrowed vToken or Comptroller)\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @custom:error ActionPaused error is thrown if seizing this type of collateral is paused\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error ComptrollerMismatch error is when seizer contract or seized asset belong to different pools\\n     * @custom:access Not restricted\\n     */\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address seizerContract,\\n        address liquidator,\\n        address borrower\\n    ) external override {\\n        // Pause Action.SEIZE on COLLATERAL to prevent seizing it.\\n        // If we want to pause liquidating vTokenBorrowed, we should pause\\n        // Action.LIQUIDATE on it\\n        _checkActionPauseState(vTokenCollateral, Action.SEIZE);\\n\\n        Market storage market = markets[vTokenCollateral];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(vTokenCollateral);\\n        }\\n\\n        if (seizerContract == address(this)) {\\n            // If Comptroller is the seizer, just check if collateral's comptroller\\n            // is equal to the current address\\n            if (address(VToken(vTokenCollateral).comptroller()) != address(this)) {\\n                revert ComptrollerMismatch();\\n            }\\n        } else {\\n            // If the seizer is not the Comptroller, check that the seizer is a\\n            // listed market, and that the markets' comptrollers match\\n            if (!markets[seizerContract].isListed) {\\n                revert MarketNotListed(seizerContract);\\n            }\\n            if (VToken(vTokenCollateral).comptroller() != VToken(seizerContract).comptroller()) {\\n                revert ComptrollerMismatch();\\n            }\\n        }\\n\\n        if (!market.accountMembership[borrower]) {\\n            revert MarketNotCollateral(vTokenCollateral, borrower);\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vTokenCollateral);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, borrower);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, liquidator);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to transfer tokens in the given market\\n     * @param vToken The market to verify the transfer against\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external override {\\n        _checkActionPauseState(vToken, Action.TRANSFER);\\n\\n        // Currently the only consideration is whether or not\\n        //  the src is allowed to redeem this many tokens\\n        _checkRedeemAllowed(vToken, src, transferTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, src);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, dst);\\n        }\\n    }\\n\\n    /*** Pool-level operations ***/\\n\\n    /**\\n     * @notice Seizes all the remaining collateral, makes msg.sender repay the existing\\n     *   borrows, and treats the rest of the debt as bad debt (for each market).\\n     *   The sender has to repay a certain percentage of the debt, computed as\\n     *   collateral / (borrows * liquidationIncentive).\\n     * @param user account to heal\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for healing\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function healAccount(address user) external {\\n        VToken[] memory userAssets = getAssetsIn(user);\\n        uint256 userAssetsCount = userAssets.length;\\n\\n        address liquidator = msg.sender;\\n        {\\n            ResilientOracleInterface oracle_ = oracle;\\n            // We need all user's markets to be fresh for the computations to be correct\\n            for (uint256 i; i < userAssetsCount; ++i) {\\n                userAssets[i].accrueInterest();\\n                oracle_.updatePrice(address(userAssets[i]));\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(user, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        // percentage = collateral / (borrows * liquidation incentive)\\n        Exp memory collateral = Exp({ mantissa: snapshot.totalCollateral });\\n        Exp memory scaledBorrows = mul_(\\n            Exp({ mantissa: snapshot.borrows }),\\n            Exp({ mantissa: liquidationIncentiveMantissa })\\n        );\\n\\n        Exp memory percentage = div_(collateral, scaledBorrows);\\n        if (lessThanExp(Exp({ mantissa: MANTISSA_ONE }), percentage)) {\\n            revert CollateralExceedsThreshold(scaledBorrows.mantissa, collateral.mantissa);\\n        }\\n\\n        for (uint256 i; i < userAssetsCount; ++i) {\\n            VToken market = userAssets[i];\\n\\n            (uint256 tokens, uint256 borrowBalance, ) = _safeGetAccountSnapshot(market, user);\\n            uint256 repaymentAmount = mul_ScalarTruncate(percentage, borrowBalance);\\n\\n            // Seize the entire collateral\\n            if (tokens != 0) {\\n                market.seize(liquidator, user, tokens);\\n            }\\n            // Repay a certain percentage of the borrow, forgive the rest\\n            if (borrowBalance != 0) {\\n                market.healBorrow(liquidator, user, repaymentAmount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Liquidates all borrows of the borrower. Callable only if the collateral is less than\\n     *   a predefined threshold, and the account collateral can be seized to cover all borrows. If\\n     *   the collateral is higher than the threshold, use regular liquidations. If the collateral is\\n     *   below the threshold, and the account is insolvent, use healAccount.\\n     * @param borrower the borrower address\\n     * @param orders an array of liquidation orders\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for a batch liquidation\\n     * @custom:error InsufficientCollateral error is thrown when there is not enough collateral to cover the debt\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function liquidateAccount(address borrower, LiquidationOrder[] calldata orders) external {\\n        // We will accrue interest and update the oracle prices later during the liquidation\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            // You should use the regular vToken.liquidateBorrow(...) call\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        uint256 collateralToSeize = mul_ScalarTruncate(\\n            Exp({ mantissa: liquidationIncentiveMantissa }),\\n            snapshot.borrows\\n        );\\n        if (collateralToSeize >= snapshot.totalCollateral) {\\n            // There is not enough collateral to seize. Use healBorrow to repay some part of the borrow\\n            // and record bad debt.\\n            revert InsufficientCollateral(collateralToSeize, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        uint256 ordersCount = orders.length;\\n\\n        _ensureMaxLoops(ordersCount / 2);\\n\\n        for (uint256 i; i < ordersCount; ++i) {\\n            if (!markets[address(orders[i].vTokenBorrowed)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenBorrowed));\\n            }\\n            if (!markets[address(orders[i].vTokenCollateral)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenCollateral));\\n            }\\n\\n            LiquidationOrder calldata order = orders[i];\\n            order.vTokenBorrowed.forceLiquidateBorrow(\\n                msg.sender,\\n                borrower,\\n                order.repayAmount,\\n                order.vTokenCollateral,\\n                true\\n            );\\n        }\\n\\n        VToken[] memory borrowMarkets = getAssetsIn(borrower);\\n        uint256 marketsCount = borrowMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            (, uint256 borrowBalance, ) = _safeGetAccountSnapshot(borrowMarkets[i], borrower);\\n            require(borrowBalance == 0, \\\"Nonzero borrow balance after liquidation\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets the closeFactor to use when liquidating borrows\\n     * @param newCloseFactorMantissa New close factor, scaled by 1e18\\n     * @custom:event Emits NewCloseFactor on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCloseFactor(uint256 newCloseFactorMantissa) external {\\n        _checkAccessAllowed(\\\"setCloseFactor(uint256)\\\");\\n        require(MAX_CLOSE_FACTOR_MANTISSA >= newCloseFactorMantissa, \\\"Close factor greater than maximum close factor\\\");\\n        require(MIN_CLOSE_FACTOR_MANTISSA <= newCloseFactorMantissa, \\\"Close factor smaller than minimum close factor\\\");\\n\\n        uint256 oldCloseFactorMantissa = closeFactorMantissa;\\n        closeFactorMantissa = newCloseFactorMantissa;\\n        emit NewCloseFactor(oldCloseFactorMantissa, newCloseFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Sets the collateralFactor for a market\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param vToken The market to set the factor on\\n     * @param newCollateralFactorMantissa The new collateral factor, scaled by 1e18\\n     * @param newLiquidationThresholdMantissa The new liquidation threshold, scaled by 1e18\\n     * @custom:event Emits NewCollateralFactor when collateral factor is updated\\n     *    and NewLiquidationThreshold when liquidation threshold is updated\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InvalidCollateralFactor error is thrown when collateral factor is too high\\n     * @custom:error InvalidLiquidationThreshold error is thrown when liquidation threshold is lower than collateral factor\\n     * @custom:error PriceError is thrown when the oracle returns an invalid price for the asset\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCollateralFactor(\\n        VToken vToken,\\n        uint256 newCollateralFactorMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    ) external {\\n        _checkAccessAllowed(\\\"setCollateralFactor(address,uint256,uint256)\\\");\\n\\n        // Verify market is listed\\n        Market storage market = markets[address(vToken)];\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Check collateral factor <= 0.9\\n        if (newCollateralFactorMantissa > MAX_COLLATERAL_FACTOR_MANTISSA) {\\n            revert InvalidCollateralFactor();\\n        }\\n\\n        // Ensure that liquidation threshold <= 1\\n        if (newLiquidationThresholdMantissa > MANTISSA_ONE) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // Ensure that liquidation threshold >= CF\\n        if (newLiquidationThresholdMantissa < newCollateralFactorMantissa) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // If collateral factor != 0, fail if price == 0\\n        if (newCollateralFactorMantissa != 0 && oracle.getUnderlyingPrice(address(vToken)) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 oldCollateralFactorMantissa = market.collateralFactorMantissa;\\n        if (newCollateralFactorMantissa != oldCollateralFactorMantissa) {\\n            market.collateralFactorMantissa = newCollateralFactorMantissa;\\n            emit NewCollateralFactor(vToken, oldCollateralFactorMantissa, newCollateralFactorMantissa);\\n        }\\n\\n        uint256 oldLiquidationThresholdMantissa = market.liquidationThresholdMantissa;\\n        if (newLiquidationThresholdMantissa != oldLiquidationThresholdMantissa) {\\n            market.liquidationThresholdMantissa = newLiquidationThresholdMantissa;\\n            emit NewLiquidationThreshold(vToken, oldLiquidationThresholdMantissa, newLiquidationThresholdMantissa);\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets liquidationIncentive\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newLiquidationIncentiveMantissa New liquidationIncentive scaled by 1e18\\n     * @custom:event Emits NewLiquidationIncentive on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setLiquidationIncentive(uint256 newLiquidationIncentiveMantissa) external {\\n        require(newLiquidationIncentiveMantissa >= MANTISSA_ONE, \\\"liquidation incentive should be greater than 1e18\\\");\\n\\n        _checkAccessAllowed(\\\"setLiquidationIncentive(uint256)\\\");\\n\\n        // Save current value for use in log\\n        uint256 oldLiquidationIncentiveMantissa = liquidationIncentiveMantissa;\\n\\n        // Set liquidation incentive to new incentive\\n        liquidationIncentiveMantissa = newLiquidationIncentiveMantissa;\\n\\n        // Emit event with old incentive, new incentive\\n        emit NewLiquidationIncentive(oldLiquidationIncentiveMantissa, newLiquidationIncentiveMantissa);\\n    }\\n\\n    /**\\n     * @notice Add the market to the markets mapping and set it as listed\\n     * @dev Only callable by the PoolRegistry\\n     * @param vToken The address of the market (token) to list\\n     * @custom:error MarketAlreadyListed is thrown if the market is already listed in this pool\\n     * @custom:access Only PoolRegistry\\n     */\\n    function supportMarket(VToken vToken) external {\\n        _checkSenderIs(poolRegistry);\\n\\n        if (markets[address(vToken)].isListed) {\\n            revert MarketAlreadyListed(address(vToken));\\n        }\\n\\n        require(vToken.isVToken(), \\\"Comptroller: Invalid vToken\\\"); // Sanity check to make sure its really a VToken\\n\\n        Market storage newMarket = markets[address(vToken)];\\n        newMarket.isListed = true;\\n        newMarket.collateralFactorMantissa = 0;\\n        newMarket.liquidationThresholdMantissa = 0;\\n\\n        _addMarket(address(vToken));\\n\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            rewardsDistributors[i].initializeMarket(address(vToken));\\n        }\\n\\n        emit MarketSupported(vToken);\\n    }\\n\\n    /**\\n     * @notice Set the given borrow caps for the given vToken markets. Borrowing that brings total borrows to or above borrow cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A borrow cap of type(uint256).max corresponds to unlimited borrowing.\\n     * @dev Borrow caps smaller than the current total borrows are accepted. This way, new borrows will not be allowed\\n            until the total borrows amount goes below the new borrow cap\\n     * @param vTokens The addresses of the markets (tokens) to change the borrow caps for\\n     * @param newBorrowCaps The new borrow cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited borrowing.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketBorrowCaps(VToken[] calldata vTokens, uint256[] calldata newBorrowCaps) external {\\n        _checkAccessAllowed(\\\"setMarketBorrowCaps(address[],uint256[])\\\");\\n\\n        uint256 numMarkets = vTokens.length;\\n        uint256 numBorrowCaps = newBorrowCaps.length;\\n\\n        require(numMarkets != 0 && numMarkets == numBorrowCaps, \\\"invalid input\\\");\\n\\n        _ensureMaxLoops(numMarkets);\\n\\n        for (uint256 i; i < numMarkets; ++i) {\\n            borrowCaps[address(vTokens[i])] = newBorrowCaps[i];\\n            emit NewBorrowCap(vTokens[i], newBorrowCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given supply caps for the given vToken markets. Supply that brings total Supply to or above supply cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A supply cap of type(uint256).max corresponds to unlimited supply.\\n     * @dev Supply caps smaller than the current total supplies are accepted. This way, new supplies will not be allowed\\n            until the total supplies amount goes below the new supply cap\\n     * @param vTokens The addresses of the markets (tokens) to change the supply caps for\\n     * @param newSupplyCaps The new supply cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited supply.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketSupplyCaps(VToken[] calldata vTokens, uint256[] calldata newSupplyCaps) external {\\n        _checkAccessAllowed(\\\"setMarketSupplyCaps(address[],uint256[])\\\");\\n        uint256 vTokensCount = vTokens.length;\\n\\n        require(vTokensCount != 0, \\\"invalid number of markets\\\");\\n        require(vTokensCount == newSupplyCaps.length, \\\"invalid number of markets\\\");\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            supplyCaps[address(vTokens[i])] = newSupplyCaps[i];\\n            emit NewSupplyCap(vTokens[i], newSupplyCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Pause/unpause specified actions\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param marketsList Markets to pause/unpause the actions on\\n     * @param actionsList List of action ids to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setActionsPaused(VToken[] calldata marketsList, Action[] calldata actionsList, bool paused) external {\\n        _checkAccessAllowed(\\\"setActionsPaused(address[],uint256[],bool)\\\");\\n\\n        uint256 marketsCount = marketsList.length;\\n        uint256 actionsCount = actionsList.length;\\n\\n        _ensureMaxLoops(marketsCount * actionsCount);\\n\\n        for (uint256 marketIdx; marketIdx < marketsCount; ++marketIdx) {\\n            for (uint256 actionIdx; actionIdx < actionsCount; ++actionIdx) {\\n                _setActionPaused(address(marketsList[marketIdx]), actionsList[actionIdx], paused);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given collateral threshold for non-batch liquidations. Regular liquidations\\n     *   will fail if the collateral amount is less than this threshold. Liquidators should use batch\\n     *   operations like liquidateAccount or healAccount.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newMinLiquidatableCollateral The new min liquidatable collateral (in USD).\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMinLiquidatableCollateral(uint256 newMinLiquidatableCollateral) external {\\n        _checkAccessAllowed(\\\"setMinLiquidatableCollateral(uint256)\\\");\\n\\n        uint256 oldMinLiquidatableCollateral = minLiquidatableCollateral;\\n        minLiquidatableCollateral = newMinLiquidatableCollateral;\\n        emit NewMinLiquidatableCollateral(oldMinLiquidatableCollateral, newMinLiquidatableCollateral);\\n    }\\n\\n    /**\\n     * @notice Add a new RewardsDistributor and initialize it with all markets. We can add several RewardsDistributor\\n     * contracts with the same rewardToken, and there could be overlaping among them considering the last reward slot (block or second)\\n     * @dev Only callable by the admin\\n     * @param _rewardsDistributor Address of the RewardDistributor contract to add\\n     * @custom:access Only Governance\\n     * @custom:event Emits NewRewardsDistributor with distributor address\\n     */\\n    function addRewardsDistributor(RewardsDistributor _rewardsDistributor) external onlyOwner {\\n        require(!rewardsDistributorExists[address(_rewardsDistributor)], \\\"already exists\\\");\\n\\n        uint256 rewardsDistributorsLen = rewardsDistributors.length;\\n        _ensureMaxLoops(rewardsDistributorsLen + 1);\\n\\n        rewardsDistributors.push(_rewardsDistributor);\\n        rewardsDistributorExists[address(_rewardsDistributor)] = true;\\n\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            _rewardsDistributor.initializeMarket(address(allMarkets[i]));\\n        }\\n\\n        emit NewRewardsDistributor(address(_rewardsDistributor), address(_rewardsDistributor.rewardToken()));\\n    }\\n\\n    /**\\n     * @notice Sets a new price oracle for the Comptroller\\n     * @dev Only callable by the admin\\n     * @param newOracle Address of the new price oracle to set\\n     * @custom:event Emits NewPriceOracle on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when the new oracle address is zero\\n     */\\n    function setPriceOracle(ResilientOracleInterface newOracle) external onlyOwner {\\n        ensureNonzeroAddress(address(newOracle));\\n\\n        ResilientOracleInterface oldOracle = oracle;\\n        oracle = newOracle;\\n        emit NewPriceOracle(oldOracle, newOracle);\\n    }\\n\\n    /**\\n     * @notice Set the for loop iteration limit to avoid DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Sets the prime token contract for the comptroller\\n     * @param _prime Address of the Prime contract\\n     */\\n    function setPrimeToken(IPrime _prime) external onlyOwner {\\n        ensureNonzeroAddress(address(_prime));\\n\\n        emit NewPrimeToken(prime, _prime);\\n        prime = _prime;\\n    }\\n\\n    /**\\n     * @notice Enables forced liquidations for a market. If forced liquidation is enabled,\\n     * borrows in the market may be liquidated regardless of the account liquidity\\n     * @param vTokenBorrowed Borrowed vToken\\n     * @param enable Whether to enable forced liquidations\\n     */\\n    function setForcedLiquidation(address vTokenBorrowed, bool enable) external {\\n        _checkAccessAllowed(\\\"setForcedLiquidation(address,bool)\\\");\\n        ensureNonzeroAddress(vTokenBorrowed);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(vTokenBorrowed);\\n        }\\n\\n        isForcedLiquidationEnabled[vTokenBorrowed] = enable;\\n        emit IsForcedLiquidationEnabledUpdated(vTokenBorrowed, enable);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to liquidation threshold requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of liquidation threshold requirements,\\n     * @return shortfall Account shortfall below liquidation threshold requirements\\n     */\\n    function getAccountLiquidity(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getLiquidationThreshold);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to collateral requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of collateral requirements,\\n     * @return shortfall Account shortfall below collateral requirements\\n     */\\n    function getBorrowingPower(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getCollateralFactor);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine what the account liquidity would be if the given amounts were redeemed/borrowed\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Hypothetical account liquidity in excess of collateral requirements,\\n     * @return shortfall Hypothetical account shortfall below collateral requirements\\n     */\\n    function getHypotheticalAccountLiquidity(\\n        address account,\\n        address vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            account,\\n            VToken(vTokenModify),\\n            redeemTokens,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Return all of the markets\\n     * @dev The automatic getter may be used to access an individual market.\\n     * @return markets The list of market addresses\\n     */\\n    function getAllMarkets() external view override returns (VToken[] memory) {\\n        return allMarkets;\\n    }\\n\\n    /**\\n     * @notice Check if a market is marked as listed (active)\\n     * @param vToken vToken Address for the market to check\\n     * @return listed True if listed otherwise false\\n     */\\n    function isMarketListed(VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].isListed;\\n    }\\n\\n    /*** Assets You Are In ***/\\n\\n    /**\\n     * @notice Returns whether the given account is entered in a given market\\n     * @param account The address of the account to check\\n     * @param vToken The vToken to check\\n     * @return True if the account is in the market specified, otherwise false.\\n     */\\n    function checkMembership(address account, VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].accountMembership[account];\\n    }\\n\\n    /**\\n     * @notice Calculate number of tokens of collateral asset to seize given an underlying amount\\n     * @dev Used in liquidation (called in vToken.liquidateBorrowFresh)\\n     * @param vTokenBorrowed The address of the borrowed vToken\\n     * @param vTokenCollateral The address of the collateral vToken\\n     * @param actualRepayAmount The amount of vTokenBorrowed underlying to convert into vTokenCollateral tokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return tokensToSeize Number of vTokenCollateral tokens to be seized in a liquidation\\n     * @custom:error PriceError if the oracle returns an invalid price\\n     */\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 actualRepayAmount\\n    ) external view override returns (uint256 error, uint256 tokensToSeize) {\\n        /* Read oracle prices for borrowed and collateral markets */\\n        uint256 priceBorrowedMantissa = _safeGetUnderlyingPrice(VToken(vTokenBorrowed));\\n        uint256 priceCollateralMantissa = _safeGetUnderlyingPrice(VToken(vTokenCollateral));\\n\\n        /*\\n         * Get the exchange rate and calculate the number of collateral tokens to seize:\\n         *  seizeAmount = actualRepayAmount * liquidationIncentive * priceBorrowed / priceCollateral\\n         *  seizeTokens = seizeAmount / exchangeRate\\n         *   = actualRepayAmount * (liquidationIncentive * priceBorrowed) / (priceCollateral * exchangeRate)\\n         */\\n        uint256 exchangeRateMantissa = VToken(vTokenCollateral).exchangeRateStored(); // Note: reverts on error\\n        uint256 seizeTokens;\\n        Exp memory numerator;\\n        Exp memory denominator;\\n        Exp memory ratio;\\n\\n        numerator = mul_(Exp({ mantissa: liquidationIncentiveMantissa }), Exp({ mantissa: priceBorrowedMantissa }));\\n        denominator = mul_(Exp({ mantissa: priceCollateralMantissa }), Exp({ mantissa: exchangeRateMantissa }));\\n        ratio = div_(numerator, denominator);\\n\\n        seizeTokens = mul_ScalarTruncate(ratio, actualRepayAmount);\\n\\n        return (NO_ERROR, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Returns reward speed given a vToken\\n     * @param vToken The vToken to get the reward speeds for\\n     * @return rewardSpeeds Array of total supply and borrow speeds and reward token for all reward distributors\\n     */\\n    function getRewardsByMarket(address vToken) external view returns (RewardSpeeds[] memory rewardSpeeds) {\\n        uint256 rewardsDistributorsLength = rewardsDistributors.length;\\n        rewardSpeeds = new RewardSpeeds[](rewardsDistributorsLength);\\n        for (uint256 i; i < rewardsDistributorsLength; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            address rewardToken = address(rewardsDistributor.rewardToken());\\n            rewardSpeeds[i] = RewardSpeeds({\\n                rewardToken: rewardToken,\\n                supplySpeed: rewardsDistributor.rewardTokenSupplySpeeds(vToken),\\n                borrowSpeed: rewardsDistributor.rewardTokenBorrowSpeeds(vToken)\\n            });\\n        }\\n        return rewardSpeeds;\\n    }\\n\\n    /**\\n     * @notice Return all reward distributors for this pool\\n     * @return Array of RewardDistributor addresses\\n     */\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory) {\\n        return rewardsDistributors;\\n    }\\n\\n    /**\\n     * @notice A marker method that returns true for a valid Comptroller contract\\n     * @return Always true\\n     */\\n    function isComptroller() external pure override returns (bool) {\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Update the prices of all the tokens associated with the provided account\\n     * @param account Address of the account to get associated tokens with\\n     */\\n    function updatePrices(address account) public {\\n        VToken[] memory vTokens = getAssetsIn(account);\\n        uint256 vTokensCount = vTokens.length;\\n\\n        ResilientOracleInterface oracle_ = oracle;\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            oracle_.updatePrice(address(vTokens[i]));\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if a certain action is paused on a market\\n     * @param market vToken address\\n     * @param action Action to check\\n     * @return paused True if the action is paused otherwise false\\n     */\\n    function actionPaused(address market, Action action) public view returns (bool) {\\n        return _actionPaused[market][action];\\n    }\\n\\n    /**\\n     * @notice Returns the assets an account has entered\\n     * @param account The address of the account to pull assets for\\n     * @return A list with the assets the account has entered\\n     */\\n    function getAssetsIn(address account) public view returns (VToken[] memory) {\\n        uint256 len;\\n        VToken[] memory _accountAssets = accountAssets[account];\\n        uint256 _accountAssetsLength = _accountAssets.length;\\n\\n        VToken[] memory assetsIn = new VToken[](_accountAssetsLength);\\n\\n        for (uint256 i; i < _accountAssetsLength; ++i) {\\n            Market storage market = markets[address(_accountAssets[i])];\\n            if (market.isListed) {\\n                assetsIn[len] = _accountAssets[i];\\n                ++len;\\n            }\\n        }\\n\\n        assembly {\\n            mstore(assetsIn, len)\\n        }\\n\\n        return assetsIn;\\n    }\\n\\n    /**\\n     * @notice Add the market to the borrower's \\\"assets in\\\" for liquidity calculations\\n     * @param vToken The market to enter\\n     * @param borrower The address of the account to modify\\n     */\\n    function _addToMarket(VToken vToken, address borrower) internal {\\n        _checkActionPauseState(address(vToken), Action.ENTER_MARKET);\\n        Market storage marketToJoin = markets[address(vToken)];\\n\\n        if (!marketToJoin.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (marketToJoin.accountMembership[borrower]) {\\n            // already joined\\n            return;\\n        }\\n\\n        // survived the gauntlet, add to list\\n        // NOTE: we store these somewhat redundantly as a significant optimization\\n        //  this avoids having to iterate through the list for the most common use cases\\n        //  that is, only when we need to perform liquidity checks\\n        //  and not whenever we want to check if an account is in a particular market\\n        marketToJoin.accountMembership[borrower] = true;\\n        accountAssets[borrower].push(vToken);\\n\\n        emit MarketEntered(vToken, borrower);\\n    }\\n\\n    /**\\n     * @notice Internal function to validate that a market hasn't already been added\\n     * and if it hasn't adds it\\n     * @param vToken The market to support\\n     */\\n    function _addMarket(address vToken) internal {\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            if (allMarkets[i] == VToken(vToken)) {\\n                revert MarketAlreadyListed(vToken);\\n            }\\n        }\\n        allMarkets.push(VToken(vToken));\\n        marketsCount = allMarkets.length;\\n        _ensureMaxLoops(marketsCount);\\n    }\\n\\n    /**\\n     * @dev Pause/unpause an action on a market\\n     * @param market Market to pause/unpause the action on\\n     * @param action Action id to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     */\\n    function _setActionPaused(address market, Action action, bool paused) internal {\\n        require(markets[market].isListed, \\\"cannot pause a market that is not listed\\\");\\n        _actionPaused[market][action] = paused;\\n        emit ActionPausedMarket(VToken(market), action, paused);\\n    }\\n\\n    /**\\n     * @dev Internal function to check that vTokens can be safely redeemed for the underlying asset.\\n     * @param vToken Address of the vTokens to redeem\\n     * @param redeemer Account redeeming the tokens\\n     * @param redeemTokens The number of tokens to redeem\\n     */\\n    function _checkRedeemAllowed(address vToken, address redeemer, uint256 redeemTokens) internal {\\n        Market storage market = markets[vToken];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        /* If the redeemer is not 'in' the market, then we can bypass the liquidity check */\\n        if (!market.accountMembership[redeemer]) {\\n            return;\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(redeemer);\\n\\n        /* Otherwise, perform a hypothetical liquidity check to guard against shortfall */\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            redeemer,\\n            VToken(vToken),\\n            redeemTokens,\\n            0,\\n            _getCollateralFactor\\n        );\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n    }\\n\\n    /**\\n     * @notice Get the total collateral, weighted collateral, borrow balance, liquidity, shortfall\\n     * @param account The account to get the snapshot for\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n     *  liquidation threshold. Accepts the address of the vToken and returns the weight as Exp.\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getCurrentLiquiditySnapshot(\\n        address account,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        return _getHypotheticalLiquiditySnapshot(account, VToken(address(0)), 0, 0, weight);\\n    }\\n\\n    /**\\n     * @notice Determine what the supply/borrow balances would be if the given amounts were redeemed/borrowed\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n         liquidation threshold. Accepts the address of the VToken and returns the weight\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getHypotheticalLiquiditySnapshot(\\n        address account,\\n        VToken vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        // For each asset the account is in\\n        VToken[] memory assets = getAssetsIn(account);\\n        uint256 assetsCount = assets.length;\\n\\n        for (uint256 i; i < assetsCount; ++i) {\\n            VToken asset = assets[i];\\n\\n            // Read the balances and exchange rate from the vToken\\n            (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) = _safeGetAccountSnapshot(\\n                asset,\\n                account\\n            );\\n\\n            // Get the normalized price of the asset\\n            Exp memory oraclePrice = Exp({ mantissa: _safeGetUnderlyingPrice(asset) });\\n\\n            // Pre-compute conversion factors from vTokens -> usd\\n            Exp memory vTokenPrice = mul_(Exp({ mantissa: exchangeRateMantissa }), oraclePrice);\\n            Exp memory weightedVTokenPrice = mul_(weight(asset), vTokenPrice);\\n\\n            // weightedCollateral += weightedVTokenPrice * vTokenBalance\\n            snapshot.weightedCollateral = mul_ScalarTruncateAddUInt(\\n                weightedVTokenPrice,\\n                vTokenBalance,\\n                snapshot.weightedCollateral\\n            );\\n\\n            // totalCollateral += vTokenPrice * vTokenBalance\\n            snapshot.totalCollateral = mul_ScalarTruncateAddUInt(vTokenPrice, vTokenBalance, snapshot.totalCollateral);\\n\\n            // borrows += oraclePrice * borrowBalance\\n            snapshot.borrows = mul_ScalarTruncateAddUInt(oraclePrice, borrowBalance, snapshot.borrows);\\n\\n            // Calculate effects of interacting with vTokenModify\\n            if (asset == vTokenModify) {\\n                // redeem effect\\n                // effects += tokensToDenom * redeemTokens\\n                snapshot.effects = mul_ScalarTruncateAddUInt(weightedVTokenPrice, redeemTokens, snapshot.effects);\\n\\n                // borrow effect\\n                // effects += oraclePrice * borrowAmount\\n                snapshot.effects = mul_ScalarTruncateAddUInt(oraclePrice, borrowAmount, snapshot.effects);\\n            }\\n        }\\n\\n        uint256 borrowPlusEffects = snapshot.borrows + snapshot.effects;\\n        // These are safe, as the underflow condition is checked first\\n        unchecked {\\n            if (snapshot.weightedCollateral > borrowPlusEffects) {\\n                snapshot.liquidity = snapshot.weightedCollateral - borrowPlusEffects;\\n                snapshot.shortfall = 0;\\n            } else {\\n                snapshot.liquidity = 0;\\n                snapshot.shortfall = borrowPlusEffects - snapshot.weightedCollateral;\\n            }\\n        }\\n\\n        return snapshot;\\n    }\\n\\n    /**\\n     * @dev Retrieves price from oracle for an asset and checks it is nonzero\\n     * @param asset Address for asset to query price\\n     * @return Underlying price\\n     */\\n    function _safeGetUnderlyingPrice(VToken asset) internal view returns (uint256) {\\n        uint256 oraclePriceMantissa = oracle.getUnderlyingPrice(address(asset));\\n        if (oraclePriceMantissa == 0) {\\n            revert PriceError(address(asset));\\n        }\\n        return oraclePriceMantissa;\\n    }\\n\\n    /**\\n     * @dev Return collateral factor for a market\\n     * @param asset Address for asset\\n     * @return Collateral factor as exponential\\n     */\\n    function _getCollateralFactor(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].collateralFactorMantissa });\\n    }\\n\\n    /**\\n     * @dev Retrieves liquidation threshold for a market as an exponential\\n     * @param asset Address for asset to liquidation threshold\\n     * @return Liquidation threshold as exponential\\n     */\\n    function _getLiquidationThreshold(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].liquidationThresholdMantissa });\\n    }\\n\\n    /**\\n     * @dev Returns supply and borrow balances of user in vToken, reverts on failure\\n     * @param vToken Market to query\\n     * @param user Account address\\n     * @return vTokenBalance Balance of vTokens, the same as vToken.balanceOf(user)\\n     * @return borrowBalance Borrowed amount, including the interest\\n     * @return exchangeRateMantissa Stored exchange rate\\n     */\\n    function _safeGetAccountSnapshot(\\n        VToken vToken,\\n        address user\\n    ) internal view returns (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) {\\n        uint256 err;\\n        (err, vTokenBalance, borrowBalance, exchangeRateMantissa) = vToken.getAccountSnapshot(user);\\n        if (err != 0) {\\n            revert SnapshotError(address(vToken), user);\\n        }\\n        return (vTokenBalance, borrowBalance, exchangeRateMantissa);\\n    }\\n\\n    /// @notice Reverts if the call is not from expectedSender\\n    /// @param expectedSender Expected transaction sender\\n    function _checkSenderIs(address expectedSender) internal view {\\n        if (msg.sender != expectedSender) {\\n            revert UnexpectedSender(expectedSender, msg.sender);\\n        }\\n    }\\n\\n    /// @notice Reverts if a certain action is paused on a market\\n    /// @param market Market to check\\n    /// @param action Action to check\\n    function _checkActionPauseState(address market, Action action) private view {\\n        if (actionPaused(market, action)) {\\n            revert ActionPaused(market, action);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x7c6e1c6264e4681f82a9ac1bcd9155197a930033291ee5561ad97a56006f5e9c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\n\\nenum Action {\\n    MINT,\\n    REDEEM,\\n    BORROW,\\n    REPAY,\\n    SEIZE,\\n    LIQUIDATE,\\n    TRANSFER,\\n    ENTER_MARKET,\\n    EXIT_MARKET\\n}\\n\\n/**\\n * @title ComptrollerInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract.\\n */\\ninterface ComptrollerInterface {\\n    /*** Assets You Are In ***/\\n\\n    function enterMarkets(address[] calldata vTokens) external returns (uint256[] memory);\\n\\n    function exitMarket(address vToken) external returns (uint256);\\n\\n    /*** Policy Hooks ***/\\n\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external;\\n\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external;\\n\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external;\\n\\n    function preRepayHook(address vToken, address borrower) external;\\n\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external;\\n\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower\\n    ) external;\\n\\n    function borrowVerify(address vToken, address borrower, uint borrowAmount) external;\\n\\n    function mintVerify(address vToken, address minter, uint mintAmount, uint mintTokens) external;\\n\\n    function redeemVerify(address vToken, address redeemer, uint redeemAmount, uint redeemTokens) external;\\n\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer,\\n        address borrower,\\n        uint repayAmount,\\n        uint borrowerIndex\\n    ) external;\\n\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address liquidator,\\n        address borrower,\\n        uint repayAmount,\\n        uint seizeTokens\\n    ) external;\\n\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower,\\n        uint seizeTokens\\n    ) external;\\n\\n    function transferVerify(address vToken, address src, address dst, uint transferTokens) external;\\n\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external;\\n\\n    function isComptroller() external view returns (bool);\\n\\n    /*** Liquidity/Liquidation Calculations ***/\\n\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 repayAmount\\n    ) external view returns (uint256, uint256);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function actionPaused(address market, Action action) external view returns (bool);\\n}\\n\\n/**\\n * @title ComptrollerViewInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract, including only some util view functions.\\n */\\ninterface ComptrollerViewInterface {\\n    function markets(address) external view returns (bool, uint256);\\n\\n    function oracle() external view returns (ResilientOracleInterface);\\n\\n    function getAssetsIn(address) external view returns (VToken[] memory);\\n\\n    function closeFactorMantissa() external view returns (uint256);\\n\\n    function liquidationIncentiveMantissa() external view returns (uint256);\\n\\n    function minLiquidatableCollateral() external view returns (uint256);\\n\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function borrowCaps(address) external view returns (uint256);\\n\\n    function supplyCaps(address) external view returns (uint256);\\n\\n    function approvedDelegates(address user, address delegate) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xcbf7f9977472650c61345b7cbde23e81f626e1f8863bab4c6ce3dacfc7604919\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\nimport { Action } from \\\"./ComptrollerInterface.sol\\\";\\n\\n/**\\n * @title ComptrollerStorage\\n * @author Venus\\n * @notice Storage layout for the `Comptroller` contract.\\n */\\ncontract ComptrollerStorage {\\n    struct LiquidationOrder {\\n        VToken vTokenCollateral;\\n        VToken vTokenBorrowed;\\n        uint256 repayAmount;\\n    }\\n\\n    struct AccountLiquiditySnapshot {\\n        uint256 totalCollateral;\\n        uint256 weightedCollateral;\\n        uint256 borrows;\\n        uint256 effects;\\n        uint256 liquidity;\\n        uint256 shortfall;\\n    }\\n\\n    struct RewardSpeeds {\\n        address rewardToken;\\n        uint256 supplySpeed;\\n        uint256 borrowSpeed;\\n    }\\n\\n    struct Market {\\n        // Whether or not this market is listed\\n        bool isListed;\\n        //  Multiplier representing the most one can borrow against their collateral in this market.\\n        //  For instance, 0.9 to allow borrowing 90% of collateral value.\\n        //  Must be between 0 and 1, and stored as a mantissa.\\n        uint256 collateralFactorMantissa;\\n        //  Multiplier representing the collateralization after which the borrow is eligible\\n        //  for liquidation. For instance, 0.8 liquidate when the borrow is 80% of collateral\\n        //  value. Must be between 0 and collateral factor, stored as a mantissa.\\n        uint256 liquidationThresholdMantissa;\\n        // Per-market mapping of \\\"accounts in this asset\\\"\\n        mapping(address => bool) accountMembership;\\n    }\\n\\n    /**\\n     * @notice Oracle which gives the price of any given asset\\n     */\\n    ResilientOracleInterface public oracle;\\n\\n    /**\\n     * @notice Multiplier used to calculate the maximum repayAmount when liquidating a borrow\\n     */\\n    uint256 public closeFactorMantissa;\\n\\n    /**\\n     * @notice Multiplier representing the discount on collateral that a liquidator receives\\n     */\\n    uint256 public liquidationIncentiveMantissa;\\n\\n    /**\\n     * @notice Per-account mapping of \\\"assets you are in\\\"\\n     */\\n    mapping(address => VToken[]) public accountAssets;\\n\\n    /**\\n     * @notice Official mapping of vTokens -> Market metadata\\n     * @dev Used e.g. to determine if a market is supported\\n     */\\n    mapping(address => Market) public markets;\\n\\n    /// @notice A list of all markets\\n    VToken[] public allMarkets;\\n\\n    /// @notice Borrow caps enforced by borrowAllowed for each vToken address. Defaults to zero which restricts borrowing.\\n    mapping(address => uint256) public borrowCaps;\\n\\n    /// @notice Minimal collateral required for regular (non-batch) liquidations\\n    uint256 public minLiquidatableCollateral;\\n\\n    /// @notice Supply caps enforced by mintAllowed for each vToken address. Defaults to zero which corresponds to minting not allowed\\n    mapping(address => uint256) public supplyCaps;\\n\\n    /// @notice True if a certain action is paused on a certain market\\n    mapping(address => mapping(Action => bool)) internal _actionPaused;\\n\\n    // List of Reward Distributors added\\n    RewardsDistributor[] internal rewardsDistributors;\\n\\n    // Used to check if rewards distributor is added\\n    mapping(address => bool) internal rewardsDistributorExists;\\n\\n    /// @notice Flag indicating whether forced liquidation enabled for a market\\n    mapping(address => bool) public isForcedLiquidationEnabled;\\n\\n    uint256 internal constant NO_ERROR = 0;\\n\\n    // closeFactorMantissa must be strictly greater than this value\\n    uint256 internal constant MIN_CLOSE_FACTOR_MANTISSA = 0.05e18; // 0.05\\n\\n    // closeFactorMantissa must not exceed this value\\n    uint256 internal constant MAX_CLOSE_FACTOR_MANTISSA = 0.9e18; // 0.9\\n\\n    // No collateralFactorMantissa may exceed this value\\n    uint256 internal constant MAX_COLLATERAL_FACTOR_MANTISSA = 0.95e18; // 0.95\\n\\n    /// Prime token address\\n    IPrime public prime;\\n\\n    /// @notice Whether the delegate is allowed to borrow or redeem on behalf of the user\\n    //mapping(address user => mapping (address delegate => bool approved)) public approvedDelegates;\\n    mapping(address => mapping(address => bool)) public approvedDelegates;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4df44cb65ac152bac2be4b4545430e703005a74a55b72e144100b16421bd8bfd\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title TokenErrorReporter\\n * @author Venus\\n * @notice Errors that can be thrown by the `VToken` contract.\\n */\\ncontract TokenErrorReporter {\\n    uint256 public constant NO_ERROR = 0; // support legacy return codes\\n\\n    error TransferNotAllowed();\\n\\n    error MintFreshnessCheck();\\n\\n    error RedeemFreshnessCheck();\\n    error RedeemTransferOutNotPossible();\\n\\n    error BorrowFreshnessCheck();\\n    error BorrowCashNotAvailable();\\n    error DelegateNotApproved();\\n\\n    error RepayBorrowFreshnessCheck();\\n\\n    error HealBorrowUnauthorized();\\n    error ForceLiquidateBorrowUnauthorized();\\n\\n    error LiquidateFreshnessCheck();\\n    error LiquidateCollateralFreshnessCheck();\\n    error LiquidateAccrueCollateralInterestFailed(uint256 errorCode);\\n    error LiquidateLiquidatorIsBorrower();\\n    error LiquidateCloseAmountIsZero();\\n    error LiquidateCloseAmountIsUintMax();\\n\\n    error LiquidateSeizeLiquidatorIsBorrower();\\n\\n    error ProtocolSeizeShareTooBig();\\n\\n    error SetReserveFactorFreshCheck();\\n    error SetReserveFactorBoundsCheck();\\n\\n    error AddReservesFactorFreshCheck(uint256 actualAddAmount);\\n\\n    error ReduceReservesFreshCheck();\\n    error ReduceReservesCashNotAvailable();\\n    error ReduceReservesCashValidation();\\n\\n    error SetInterestRateModelFreshCheck();\\n}\\n\",\"keccak256\":\"0x7a7ced1caaac2d9242659ebd50b99f308c725ce958ac9e11f7ada404b1d97a7b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { EXP_SCALE as EXP_SCALE_, MANTISSA_ONE as MANTISSA_ONE_ } from \\\"./lib/constants.sol\\\";\\n\\n/**\\n * @title Exponential module for storing fixed-precision decimals\\n * @author Compound\\n * @notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.\\n *         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:\\n *         `Exp({mantissa: 5100000000000000000})`.\\n */\\ncontract ExponentialNoError {\\n    struct Exp {\\n        uint256 mantissa;\\n    }\\n\\n    struct Double {\\n        uint256 mantissa;\\n    }\\n\\n    uint256 internal constant EXP_SCALE = EXP_SCALE_;\\n    uint256 internal constant DOUBLE_SCALE = 1e36;\\n    uint256 internal constant HALF_EXP_SCALE = EXP_SCALE / 2;\\n    uint256 internal constant MANTISSA_ONE = MANTISSA_ONE_;\\n\\n    /**\\n     * @dev Truncates the given exp to a whole number value.\\n     *      For example, truncate(Exp{mantissa: 15 * EXP_SCALE}) = 15\\n     */\\n    function truncate(Exp memory exp) internal pure returns (uint256) {\\n        // Note: We are not using careful math here as we're performing a division that cannot fail\\n        return exp.mantissa / EXP_SCALE;\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, then truncate to return an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncate(Exp memory a, uint256 scalar) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return truncate(product);\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncateAddUInt(Exp memory a, uint256 scalar, uint256 addend) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return add_(truncate(product), addend);\\n    }\\n\\n    /**\\n     * @dev Checks if first Exp is less than second Exp.\\n     */\\n    function lessThanExp(Exp memory left, Exp memory right) internal pure returns (bool) {\\n        return left.mantissa < right.mantissa;\\n    }\\n\\n    function safe224(uint256 n, string memory errorMessage) internal pure returns (uint224) {\\n        require(n <= type(uint224).max, errorMessage);\\n        return uint224(n);\\n    }\\n\\n    function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) {\\n        require(n <= type(uint32).max, errorMessage);\\n        return uint32(n);\\n    }\\n\\n    function add_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a + b;\\n    }\\n\\n    function sub_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a - b;\\n    }\\n\\n    function mul_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b.mantissa) / EXP_SCALE });\\n    }\\n\\n    function mul_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / EXP_SCALE;\\n    }\\n\\n    function mul_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b.mantissa) / DOUBLE_SCALE });\\n    }\\n\\n    function mul_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / DOUBLE_SCALE;\\n    }\\n\\n    function mul_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a * b;\\n    }\\n\\n    function div_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(mul_(a.mantissa, EXP_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, EXP_SCALE), b.mantissa);\\n    }\\n\\n    function div_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a.mantissa, DOUBLE_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, DOUBLE_SCALE), b.mantissa);\\n    }\\n\\n    function div_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a / b;\\n    }\\n\\n    function fraction(uint256 a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a, DOUBLE_SCALE), b) });\\n    }\\n}\\n\",\"keccak256\":\"0x8afbe8a24fe3539c124e718681ed3dcebd24c40dd53095786c0155998213b9b0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title Compound's InterestRateModel Interface\\n * @author Compound\\n */\\nabstract contract InterestRateModel {\\n    /**\\n     * @notice Calculates the current borrow interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getBorrowRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Calculates the current supply interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param reserveFactorMantissa The current reserve factor the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getSupplyRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 reserveFactorMantissa,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is an InterestRateModel contract (for inspection)\\n     * @return Always true\\n     */\\n    function isInterestRateModel() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0xc4fda1ab75ebe4b187b707c4f10c58780f343cf343c537f641dc75d3cd28ab51\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title MaxLoopsLimitHelper\\n * @author Venus\\n * @notice Abstract contract used to avoid collection with too many items that would generate gas errors and DoS.\\n */\\nabstract contract MaxLoopsLimitHelper {\\n    // Limit for the loops to avoid the DOS\\n    uint256 public maxLoopsLimit;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when max loops limit is set\\n    event MaxLoopsLimitUpdated(uint256 oldMaxLoopsLimit, uint256 newmaxLoopsLimit);\\n\\n    /// @notice Thrown an error on maxLoopsLimit exceeds for any loop\\n    error MaxLoopsLimitExceeded(uint256 loopsLimit, uint256 requiredLoops);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function _setMaxLoopsLimit(uint256 limit) internal {\\n        require(limit > maxLoopsLimit, \\\"Comptroller: Invalid maxLoopsLimit\\\");\\n\\n        uint256 oldMaxLoopsLimit = maxLoopsLimit;\\n        maxLoopsLimit = limit;\\n\\n        emit MaxLoopsLimitUpdated(oldMaxLoopsLimit, limit);\\n    }\\n\\n    /**\\n     * @notice Compare the maxLoopsLimit with number of the times loop iterate\\n     * @param len Length of the loops iterate\\n     * @custom:error MaxLoopsLimitExceeded error is thrown when loops length exceeds maxLoopsLimit\\n     */\\n    function _ensureMaxLoops(uint256 len) internal view {\\n        if (len > maxLoopsLimit) {\\n            revert MaxLoopsLimitExceeded(maxLoopsLimit, len);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x4c25e30635485d162177effa384eee51768b0141a567a0da16ff6ad673274166\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\n\\nimport { ExponentialNoError } from \\\"../ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"../VToken.sol\\\";\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"../MaxLoopsLimitHelper.sol\\\";\\nimport { RewardsDistributorStorage } from \\\"./RewardsDistributorStorage.sol\\\";\\n\\n/**\\n * @title `RewardsDistributor`\\n * @author Venus\\n * @notice Contract used to configure, track and distribute rewards to users based on their actions (borrows and supplies) in the protocol.\\n * Users can receive additional rewards through a `RewardsDistributor`. Each `RewardsDistributor` proxy is initialized with a specific reward\\n * token and `Comptroller`, which can then distribute the reward token to users that supply or borrow in the associated pool.\\n * Authorized users can set the reward token borrow and supply speeds for each market in the pool. This sets a fixed amount of reward\\n * token to be released each slot (block or second) for borrowers and suppliers, which is distributed based on a user\\u2019s percentage of the borrows or supplies\\n * respectively. The owner can also set up reward distributions to contributor addresses (distinct from suppliers and borrowers) by setting\\n * their contributor reward token speed, which similarly allocates a fixed amount of reward token per slot (block or second).\\n *\\n * The owner has the ability to transfer any amount of reward tokens held by the contract to any other address. Rewards are not distributed\\n * automatically and must be claimed by a user calling `claimRewardToken()`. Users should be aware that it is up to the owner and other centralized\\n * entities to ensure that the `RewardsDistributor` holds enough tokens to distribute the accumulated rewards of users and contributors.\\n */\\ncontract RewardsDistributor is\\n    ExponentialNoError,\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    MaxLoopsLimitHelper,\\n    RewardsDistributorStorage,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    /// @notice The initial REWARD TOKEN index for a market\\n    uint224 public constant INITIAL_INDEX = 1e36;\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a supplier\\n    event DistributedSupplierRewardToken(\\n        VToken indexed vToken,\\n        address indexed supplier,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenSupplyIndex\\n    );\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a borrower\\n    event DistributedBorrowerRewardToken(\\n        VToken indexed vToken,\\n        address indexed borrower,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenBorrowIndex\\n    );\\n\\n    /// @notice Emitted when a new supply-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenSupplySpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when a new borrow-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenBorrowSpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when REWARD TOKEN is granted by admin\\n    event RewardTokenGranted(address indexed recipient, uint256 amount);\\n\\n    /// @notice Emitted when a new REWARD TOKEN speed is set for a contributor\\n    event ContributorRewardTokenSpeedUpdated(address indexed contributor, uint256 newSpeed);\\n\\n    /// @notice Emitted when a market is initialized\\n    event MarketInitialized(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token supply index is updated\\n    event RewardTokenSupplyIndexUpdated(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token borrow index is updated\\n    event RewardTokenBorrowIndexUpdated(address indexed vToken, Exp marketBorrowIndex);\\n\\n    /// @notice Emitted when a reward for contributor is updated\\n    event ContributorRewardsUpdated(address indexed contributor, uint256 rewardAccrued);\\n\\n    /// @notice Emitted when a reward token last rewarding block for supply is updated\\n    event SupplyLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding block for borrow is updated\\n    event BorrowLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for supply is updated\\n    event SupplyLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for borrow is updated\\n    event BorrowLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    modifier onlyComptroller() {\\n        require(address(comptroller) == msg.sender, \\\"Only comptroller can call this function\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice RewardsDistributor initializer\\n     * @dev Initializes the deployer to owner\\n     * @param comptroller_ Comptroller to attach the reward distributor to\\n     * @param rewardToken_ Reward token to distribute\\n     * @param loopsLimit_ Maximum number of iterations for the loops in this contract\\n     * @param accessControlManager_ AccessControlManager contract address\\n     */\\n    function initialize(\\n        Comptroller comptroller_,\\n        IERC20Upgradeable rewardToken_,\\n        uint256 loopsLimit_,\\n        address accessControlManager_\\n    ) external initializer {\\n        comptroller = comptroller_;\\n        rewardToken = rewardToken_;\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n\\n        _setMaxLoopsLimit(loopsLimit_);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken\\n     * @param vToken The address of the vToken to be initialized\\n     * @custom:event MarketInitialized emits on success\\n     * @custom:access Only Comptroller\\n     */\\n    function initializeMarket(address vToken) external onlyComptroller {\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        isTimeBased\\n            ? _initializeMarketTimestampBased(vToken, blockNumberOrTimestamp)\\n            : _initializeMarketBlockBased(vToken, safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\"));\\n\\n        emit MarketInitialized(vToken);\\n    }\\n\\n    /*** Reward Token Distribution ***/\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them\\n     *         Borrowers will begin to accrue after the first interaction with the protocol.\\n     * @dev This function should only be called when the user has a borrow position in the market\\n     *      (e.g. Comptroller.preBorrowHook, and Comptroller.preRepayHook)\\n     *      We avoid an external call to check if they are in the market to save gas because this function is called in many places\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function distributeBorrowerRewardToken(\\n        address vToken,\\n        address borrower,\\n        Exp memory marketBorrowIndex\\n    ) external onlyComptroller {\\n        _distributeBorrowerRewardToken(vToken, borrower, marketBorrowIndex);\\n    }\\n\\n    function updateRewardTokenSupplyIndex(address vToken) external onlyComptroller {\\n        _updateRewardTokenSupplyIndex(vToken);\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the recipient\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all\\n     * @param recipient The address of the recipient to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     */\\n    function grantRewardToken(address recipient, uint256 amount) external onlyOwner {\\n        uint256 amountLeft = _grantRewardToken(recipient, amount);\\n        require(amountLeft == 0, \\\"insufficient rewardToken for grant\\\");\\n        emit RewardTokenGranted(recipient, amount);\\n    }\\n\\n    function updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) external onlyComptroller {\\n        _updateRewardTokenBorrowIndex(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN borrow and supply speeds for the specified markets\\n     * @param vTokens The markets whose REWARD TOKEN speed to update\\n     * @param supplySpeeds New supply-side REWARD TOKEN speed for the corresponding market\\n     * @param borrowSpeeds New borrow-side REWARD TOKEN speed for the corresponding market\\n     */\\n    function setRewardTokenSpeeds(\\n        VToken[] memory vTokens,\\n        uint256[] memory supplySpeeds,\\n        uint256[] memory borrowSpeeds\\n    ) external {\\n        _checkAccessAllowed(\\\"setRewardTokenSpeeds(address[],uint256[],uint256[])\\\");\\n        uint256 numTokens = vTokens.length;\\n        require(numTokens == supplySpeeds.length && numTokens == borrowSpeeds.length, \\\"invalid setRewardTokenSpeeds\\\");\\n\\n        for (uint256 i; i < numTokens; ++i) {\\n            _setRewardTokenSpeed(vTokens[i], supplySpeeds[i], borrowSpeeds[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for the specified markets, used when contract is block based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlocks New supply-side REWARD TOKEN last rewarding block for the corresponding market\\n     * @param borrowLastRewardingBlocks New borrow-side REWARD TOKEN last rewarding block for the corresponding market\\n     */\\n    function setLastRewardingBlocks(\\n        VToken[] calldata vTokens,\\n        uint32[] calldata supplyLastRewardingBlocks,\\n        uint32[] calldata borrowLastRewardingBlocks\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlocks(address[],uint32[],uint32[])\\\");\\n        require(!isTimeBased, \\\"Block-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlocks.length && numTokens == borrowLastRewardingBlocks.length,\\n            \\\"RewardsDistributor::setLastRewardingBlocks invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlock(vTokens[i], supplyLastRewardingBlocks[i], borrowLastRewardingBlocks[i]);\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block timestamp for the specified markets, used when contract is time based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlockTimestamps New supply-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     * @param borrowLastRewardingBlockTimestamps New borrow-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     */\\n    function setLastRewardingBlockTimestamps(\\n        VToken[] calldata vTokens,\\n        uint256[] calldata supplyLastRewardingBlockTimestamps,\\n        uint256[] calldata borrowLastRewardingBlockTimestamps\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])\\\");\\n        require(isTimeBased, \\\"Time-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlockTimestamps.length &&\\n                numTokens == borrowLastRewardingBlockTimestamps.length,\\n            \\\"RewardsDistributor::setLastRewardingBlockTimestamps invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlockTimestamp(\\n                vTokens[i],\\n                supplyLastRewardingBlockTimestamps[i],\\n                borrowLastRewardingBlockTimestamps[i]\\n            );\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single contributor\\n     * @param contributor The contributor whose REWARD TOKEN speed to update\\n     * @param rewardTokenSpeed New REWARD TOKEN speed for contributor\\n     */\\n    function setContributorRewardTokenSpeed(address contributor, uint256 rewardTokenSpeed) external onlyOwner {\\n        // note that REWARD TOKEN speed could be set to 0 to halt liquidity rewards for a contributor\\n        updateContributorRewards(contributor);\\n        if (rewardTokenSpeed == 0) {\\n            // release storage\\n            delete lastContributorBlock[contributor];\\n        } else {\\n            lastContributorBlock[contributor] = getBlockNumberOrTimestamp();\\n        }\\n        rewardTokenContributorSpeeds[contributor] = rewardTokenSpeed;\\n\\n        emit ContributorRewardTokenSpeedUpdated(contributor, rewardTokenSpeed);\\n    }\\n\\n    function distributeSupplierRewardToken(address vToken, address supplier) external onlyComptroller {\\n        _distributeSupplierRewardToken(vToken, supplier);\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in all markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     */\\n    function claimRewardToken(address holder) external {\\n        return claimRewardToken(holder, comptroller.getAllMarkets());\\n    }\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Calculate additional accrued REWARD TOKEN for a contributor since last accrual\\n     * @param contributor The address to calculate contributor rewards for\\n     */\\n    function updateContributorRewards(address contributor) public {\\n        uint256 rewardTokenSpeed = rewardTokenContributorSpeeds[contributor];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n        uint256 deltaBlocksOrTimestamp = sub_(blockNumberOrTimestamp, lastContributorBlock[contributor]);\\n        if (deltaBlocksOrTimestamp > 0 && rewardTokenSpeed > 0) {\\n            uint256 newAccrued = mul_(deltaBlocksOrTimestamp, rewardTokenSpeed);\\n            uint256 contributorAccrued = add_(rewardTokenAccrued[contributor], newAccrued);\\n\\n            rewardTokenAccrued[contributor] = contributorAccrued;\\n            lastContributorBlock[contributor] = blockNumberOrTimestamp;\\n\\n            emit ContributorRewardsUpdated(contributor, rewardTokenAccrued[contributor]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in the specified markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     * @param vTokens The list of markets to claim REWARD TOKEN in\\n     */\\n    function claimRewardToken(address holder, VToken[] memory vTokens) public {\\n        uint256 vTokensCount = vTokens.length;\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            VToken vToken = vTokens[i];\\n            require(comptroller.isMarketListed(vToken), \\\"market must be listed\\\");\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n            _distributeBorrowerRewardToken(address(vToken), holder, borrowIndex);\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n            _distributeSupplierRewardToken(address(vToken), holder);\\n        }\\n        rewardTokenAccrued[holder] = _grantRewardToken(holder, rewardTokenAccrued[holder]);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for a single market.\\n     * @param vToken market's whose reward token last rewarding block to be updated\\n     * @param supplyLastRewardingBlock New supply-side REWARD TOKEN last rewarding block for market\\n     * @param borrowLastRewardingBlock New borrow-side REWARD TOKEN last rewarding block for market\\n     */\\n    function _setLastRewardingBlock(\\n        VToken vToken,\\n        uint32 supplyLastRewardingBlock,\\n        uint32 borrowLastRewardingBlock\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockNumber = getBlockNumberOrTimestamp();\\n\\n        require(supplyLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n        require(borrowLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n\\n        uint32 currentSupplyLastRewardingBlock = rewardTokenSupplyState[address(vToken)].lastRewardingBlock;\\n        uint32 currentBorrowLastRewardingBlock = rewardTokenBorrowState[address(vToken)].lastRewardingBlock;\\n\\n        require(\\n            currentSupplyLastRewardingBlock == 0 || currentSupplyLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlock == 0 || currentBorrowLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlock != supplyLastRewardingBlock) {\\n            rewardTokenSupplyState[address(vToken)].lastRewardingBlock = supplyLastRewardingBlock;\\n            emit SupplyLastRewardingBlockUpdated(address(vToken), supplyLastRewardingBlock);\\n        }\\n\\n        if (currentBorrowLastRewardingBlock != borrowLastRewardingBlock) {\\n            rewardTokenBorrowState[address(vToken)].lastRewardingBlock = borrowLastRewardingBlock;\\n            emit BorrowLastRewardingBlockUpdated(address(vToken), borrowLastRewardingBlock);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding timestamp for a single market.\\n     * @param vToken market's whose reward token last rewarding timestamp to be updated\\n     * @param supplyLastRewardingBlockTimestamp New supply-side REWARD TOKEN last rewarding timestamp for market\\n     * @param borrowLastRewardingBlockTimestamp New borrow-side REWARD TOKEN last rewarding timestamp for market\\n     */\\n    function _setLastRewardingBlockTimestamp(\\n        VToken vToken,\\n        uint256 supplyLastRewardingBlockTimestamp,\\n        uint256 borrowLastRewardingBlockTimestamp\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockTimestamp = getBlockNumberOrTimestamp();\\n\\n        require(\\n            supplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n        require(\\n            borrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n\\n        uint256 currentSupplyLastRewardingBlockTimestamp = rewardTokenSupplyStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n        uint256 currentBorrowLastRewardingBlockTimestamp = rewardTokenBorrowStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n\\n        require(\\n            currentSupplyLastRewardingBlockTimestamp == 0 || currentSupplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlockTimestamp == 0 || currentBorrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlockTimestamp != supplyLastRewardingBlockTimestamp) {\\n            rewardTokenSupplyStateTimeBased[address(vToken)].lastRewardingTimestamp = supplyLastRewardingBlockTimestamp;\\n            emit SupplyLastRewardingBlockTimestampUpdated(address(vToken), supplyLastRewardingBlockTimestamp);\\n        }\\n\\n        if (currentBorrowLastRewardingBlockTimestamp != borrowLastRewardingBlockTimestamp) {\\n            rewardTokenBorrowStateTimeBased[address(vToken)].lastRewardingTimestamp = borrowLastRewardingBlockTimestamp;\\n            emit BorrowLastRewardingBlockTimestampUpdated(address(vToken), borrowLastRewardingBlockTimestamp);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single market.\\n     * @param vToken market's whose reward token rate to be updated\\n     * @param supplySpeed New supply-side REWARD TOKEN speed for market\\n     * @param borrowSpeed New borrow-side REWARD TOKEN speed for market\\n     */\\n    function _setRewardTokenSpeed(VToken vToken, uint256 supplySpeed, uint256 borrowSpeed) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        if (rewardTokenSupplySpeeds[address(vToken)] != supplySpeed) {\\n            // Supply speed updated so let's update supply state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n\\n            // Update speed and emit event\\n            rewardTokenSupplySpeeds[address(vToken)] = supplySpeed;\\n            emit RewardTokenSupplySpeedUpdated(vToken, supplySpeed);\\n        }\\n\\n        if (rewardTokenBorrowSpeeds[address(vToken)] != borrowSpeed) {\\n            // Borrow speed updated so let's update borrow state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n\\n            // Update speed and emit event\\n            rewardTokenBorrowSpeeds[address(vToken)] = borrowSpeed;\\n            emit RewardTokenBorrowSpeedUpdated(vToken, borrowSpeed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculate REWARD TOKEN accrued by a supplier and possibly transfer it to them.\\n     * @param vToken The market in which the supplier is interacting\\n     * @param supplier The address of the supplier to distribute REWARD TOKEN to\\n     */\\n    function _distributeSupplierRewardToken(address vToken, address supplier) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n        uint256 supplierIndex = rewardTokenSupplierIndex[vToken][supplier];\\n\\n        // Update supplier's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenSupplierIndex[vToken][supplier] = supplyIndex;\\n\\n        if (supplierIndex == 0 && supplyIndex >= INITIAL_INDEX) {\\n            // Covers the case where users supplied tokens before the market's supply state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when supplier rewards were first\\n            // set for the market.\\n            supplierIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per vToken accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(supplyIndex, supplierIndex) });\\n\\n        uint256 supplierTokens = VToken(vToken).balanceOf(supplier);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerVToken\\n        uint256 supplierDelta = mul_(supplierTokens, deltaIndex);\\n\\n        uint256 supplierAccrued = add_(rewardTokenAccrued[supplier], supplierDelta);\\n        rewardTokenAccrued[supplier] = supplierAccrued;\\n\\n        emit DistributedSupplierRewardToken(VToken(vToken), supplier, supplierDelta, supplierAccrued, supplyIndex);\\n    }\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them.\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function _distributeBorrowerRewardToken(address vToken, address borrower, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n        uint256 borrowerIndex = rewardTokenBorrowerIndex[vToken][borrower];\\n\\n        // Update borrowers's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenBorrowerIndex[vToken][borrower] = borrowIndex;\\n\\n        if (borrowerIndex == 0 && borrowIndex >= INITIAL_INDEX) {\\n            // Covers the case where users borrowed tokens before the market's borrow state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when borrower rewards were first\\n            // set for the market.\\n            borrowerIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per borrowed unit accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(borrowIndex, borrowerIndex) });\\n\\n        uint256 borrowerAmount = div_(VToken(vToken).borrowBalanceStored(borrower), marketBorrowIndex);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerBorrowedUnit\\n        if (borrowerAmount != 0) {\\n            uint256 borrowerDelta = mul_(borrowerAmount, deltaIndex);\\n\\n            uint256 borrowerAccrued = add_(rewardTokenAccrued[borrower], borrowerDelta);\\n            rewardTokenAccrued[borrower] = borrowerAccrued;\\n\\n            emit DistributedBorrowerRewardToken(VToken(vToken), borrower, borrowerDelta, borrowerAccrued, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the user.\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all.\\n     * @param user The address of the user to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     * @return The amount of REWARD TOKEN which was NOT transferred to the user\\n     */\\n    function _grantRewardToken(address user, uint256 amount) internal returns (uint256) {\\n        uint256 rewardTokenRemaining = rewardToken.balanceOf(address(this));\\n        if (amount > 0 && amount <= rewardTokenRemaining) {\\n            rewardToken.safeTransfer(user, amount);\\n            return 0;\\n        }\\n        return amount;\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the supply index\\n     * @param vToken The market whose supply index to update\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenSupplyIndex(address vToken) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplySpeed = rewardTokenSupplySpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? supplyStateTimeBased.lastRewardingTimestamp\\n            : uint256(supplyState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? supplyStateTimeBased.timestamp : uint256(supplyState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && supplySpeed > 0) {\\n            uint256 supplyTokens = VToken(vToken).totalSupply();\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, supplySpeed);\\n            Double memory ratio = supplyTokens > 0\\n                ? fraction(accruedSinceUpdate, supplyTokens)\\n                : Double({ mantissa: 0 });\\n            uint224 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: supplyIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                supplyStateTimeBased.index = index;\\n                supplyStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                supplyState.index = index;\\n                supplyState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            isTimeBased ? supplyStateTimeBased.timestamp = blockNumberOrTimestamp : supplyState.block = uint32(\\n                blockNumberOrTimestamp\\n            );\\n        }\\n\\n        emit RewardTokenSupplyIndexUpdated(vToken);\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the borrow index\\n     * @param vToken The market whose borrow index to update\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowSpeed = rewardTokenBorrowSpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? borrowStateTimeBased.lastRewardingTimestamp\\n            : uint256(borrowState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? borrowStateTimeBased.timestamp : uint256(borrowState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && borrowSpeed > 0) {\\n            uint256 borrowAmount = div_(VToken(vToken).totalBorrows(), marketBorrowIndex);\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, borrowSpeed);\\n            Double memory ratio = borrowAmount > 0\\n                ? fraction(accruedSinceUpdate, borrowAmount)\\n                : Double({ mantissa: 0 });\\n            uint224 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: borrowIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                borrowStateTimeBased.index = index;\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.index = index;\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            if (isTimeBased) {\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        }\\n\\n        emit RewardTokenBorrowIndexUpdated(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is block-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockNumber current block number\\n     */\\n    function _initializeMarketBlockBased(address vToken, uint32 blockNumber) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block numbers\\n         */\\n        supplyState.block = borrowState.block = blockNumber;\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is time-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockTimestamp current block timestamp\\n     */\\n    function _initializeMarketTimestampBased(address vToken, uint256 blockTimestamp) internal {\\n        TimeBasedRewardToken storage supplyState = rewardTokenSupplyStateTimeBased[vToken];\\n        TimeBasedRewardToken storage borrowState = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block timestamp\\n         */\\n        supplyState.timestamp = borrowState.timestamp = blockTimestamp;\\n    }\\n}\\n\",\"keccak256\":\"0x3cc824e59c923cfe25c4f1a875959b7e9410cde8e73cd405de13f301298c697f\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\n\\n/**\\n * @title RewardsDistributorStorage\\n * @author Venus\\n * @dev Storage for RewardsDistributor\\n */\\ncontract RewardsDistributorStorage {\\n    struct RewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block number the index was last updated at\\n        uint32 block;\\n        // The block number at which to stop rewards\\n        uint32 lastRewardingBlock;\\n    }\\n\\n    struct TimeBasedRewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block timestamp the index was last updated at\\n        uint256 timestamp;\\n        // The block timestamp at which to stop rewards\\n        uint256 lastRewardingTimestamp;\\n    }\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => RewardToken) public rewardTokenSupplyState;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each supplier as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenSupplierIndex;\\n\\n    /// @notice The REWARD TOKEN accrued but not yet transferred to each user\\n    mapping(address => uint256) public rewardTokenAccrued;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding borrow market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenBorrowSpeeds;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding supply market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenSupplySpeeds;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => RewardToken) public rewardTokenBorrowState;\\n\\n    /// @notice The portion of REWARD TOKEN that each contributor receives per slot (block or second)\\n    mapping(address => uint256) public rewardTokenContributorSpeeds;\\n\\n    /// @notice Last slot (block or second) at which a contributor's REWARD TOKEN rewards have been allocated\\n    mapping(address => uint256) public lastContributorBlock;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each borrower as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenBorrowerIndex;\\n\\n    Comptroller internal comptroller;\\n\\n    IERC20Upgradeable public rewardToken;\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenSupplyStateTimeBased;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenBorrowStateTimeBased;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[37] private __gap;\\n}\\n\",\"keccak256\":\"0x70e5015a78a2acf95277949c8b4796e10b9ac194130be006d5e5217e158070c0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VToken.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IProtocolShareReserve } from \\\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\\\";\\n\\nimport { VTokenInterface } from \\\"./VTokenInterfaces.sol\\\";\\nimport { ComptrollerInterface, ComptrollerViewInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { TokenErrorReporter } from \\\"./ErrorReporter.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title VToken\\n * @author Venus\\n * @notice Each asset that is supported by a pool is integrated through an instance of the `VToken` contract. As outlined in the protocol overview,\\n * each isolated pool creates its own `vToken` corresponding to an asset. Within a given pool, each included `vToken` is referred to as a market of\\n * the pool. The main actions a user regularly interacts with in a market are:\\n\\n- mint/redeem of vTokens;\\n- transfer of vTokens;\\n- borrow/repay a loan on an underlying asset;\\n- liquidate a borrow or liquidate/heal an account.\\n\\n * A user supplies the underlying asset to a pool by minting `vTokens`, where the corresponding `vToken` amount is determined by the `exchangeRate`.\\n * The `exchangeRate` will change over time, dependent on a number of factors, some of which accrue interest. Additionally, once users have minted\\n * `vToken` in a pool, they can borrow any asset in the isolated pool by using their `vToken` as collateral. In order to borrow an asset or use a `vToken`\\n * as collateral, the user must be entered into each corresponding market (else, the `vToken` will not be considered collateral for a borrow). Note that\\n * a user may borrow up to a portion of their collateral determined by the market\\u2019s collateral factor. However, if their borrowed amount exceeds an amount\\n * calculated using the market\\u2019s corresponding liquidation threshold, the borrow is eligible for liquidation. When a user repays a borrow, they must also\\n * pay off interest accrued on the borrow.\\n * \\n * The Venus protocol includes unique mechanisms for healing an account and liquidating an account. These actions are performed in the `Comptroller`\\n * and consider all borrows and collateral for which a given account is entered within a market. These functions may only be called on an account with a\\n * total collateral amount that is no larger than a universal `minLiquidatableCollateral` value, which is used for all markets within a `Comptroller`.\\n * Both functions settle all of an account\\u2019s borrows, but `healAccount()` may add `badDebt` to a vToken. For more detail, see the description of\\n * `healAccount()` and `liquidateAccount()` in the `Comptroller` summary section below.\\n */\\ncontract VToken is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    VTokenInterface,\\n    ExponentialNoError,\\n    TokenErrorReporter,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    uint256 internal constant DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA = 5e16; // 5%\\n\\n    // Maximum fraction of interest that can be set aside for reserves\\n    uint256 internal constant MAX_RESERVE_FACTOR_MANTISSA = 1e18;\\n\\n    // Maximum borrow rate that can ever be applied per slot(block or second)\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 internal immutable MAX_BORROW_RATE_MANTISSA;\\n\\n    /**\\n     * Reentrancy Guard **\\n     */\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     */\\n    modifier nonReentrant() {\\n        require(_notEntered, \\\"re-entered\\\");\\n        _notEntered = false;\\n        _;\\n        _notEntered = true; // get a gas-refund post-Istanbul\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @param maxBorrowRateMantissa_ The maximum value of borrowing rate mantissa\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(\\n        bool timeBased_,\\n        uint256 blocksPerYear_,\\n        uint256 maxBorrowRateMantissa_\\n    ) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        require(maxBorrowRateMantissa_ <= 1e18, \\\"Max borrow rate must be <= 1e18\\\");\\n\\n        MAX_BORROW_RATE_MANTISSA = maxBorrowRateMantissa_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice Construct a new money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     * @custom:error ZeroAddressNotAllowed is thrown when admin address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     */\\n    function initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) external initializer {\\n        ensureNonzeroAddress(admin_);\\n\\n        // Initialize the market\\n        _initialize(\\n            underlying_,\\n            comptroller_,\\n            interestRateModel_,\\n            initialExchangeRateMantissa_,\\n            name_,\\n            symbol_,\\n            decimals_,\\n            admin_,\\n            accessControlManager_,\\n            riskManagement,\\n            reserveFactorMantissa_\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `msg.sender` to `dst`\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transfer(address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `src` to `dst`\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transferFrom(address src, address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, src, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Approve `spender` to transfer up to `amount` from `src`\\n     * @dev This will overwrite the approval amount for `spender`\\n     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\\n     * @param spender The address of the account which may transfer tokens\\n     * @param amount The number of tokens that are approved (uint256.max means infinite)\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function approve(address spender, uint256 amount) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        transferAllowances[src][spender] = amount;\\n        emit Approval(src, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Increase approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param addedValue The number of additional tokens spender can transfer\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 newAllowance = transferAllowances[src][spender];\\n        newAllowance += addedValue;\\n        transferAllowances[src][spender] = newAllowance;\\n\\n        emit Approval(src, spender, newAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Decreases approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param subtractedValue The number of tokens to remove from total approval\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 currentAllowance = transferAllowances[src][spender];\\n        require(currentAllowance >= subtractedValue, \\\"decreased allowance below zero\\\");\\n        unchecked {\\n            currentAllowance -= subtractedValue;\\n        }\\n\\n        transferAllowances[src][spender] = currentAllowance;\\n\\n        emit Approval(src, spender, currentAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Get the underlying balance of the `owner`\\n     * @dev This also accrues interest in a transaction\\n     * @param owner The address of the account to query\\n     * @return amount The amount of underlying owned by `owner`\\n     */\\n    function balanceOfUnderlying(address owner) external override returns (uint256) {\\n        Exp memory exchangeRate = Exp({ mantissa: exchangeRateCurrent() });\\n        return mul_ScalarTruncate(exchangeRate, accountTokens[owner]);\\n    }\\n\\n    /**\\n     * @notice Returns the current total borrows plus accrued interest\\n     * @return totalBorrows The total borrows with interest\\n     */\\n    function totalBorrowsCurrent() external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return totalBorrows;\\n    }\\n\\n    /**\\n     * @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\\n     * @param account The address whose balance should be calculated after updating borrowIndex\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceCurrent(address account) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Sender supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function mint(uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, msg.sender, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender calls on-behalf of minter. minter supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param minter User whom the supply will be attributed to\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when minter address is zero\\n     */\\n    function mintBehalf(address minter, uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(minter);\\n\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, minter, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for the underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function redeem(uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer The user on behalf of whom to redeem\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for a specified amount of underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     */\\n    function redeemUnderlying(uint256 redeemAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems underlying assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer, on behalf of whom to redeem\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemUnderlyingBehalf(\\n        address redeemer,\\n        uint256 redeemAmount\\n    ) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets from the protocol to their own address\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function borrow(uint256 borrowAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _borrowFresh(msg.sender, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the borrower using `comptroller.updateDelegate`\\n     * @param borrower The borrower, on behalf of whom to borrow\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error DelegateNotApproved is thrown if caller is not approved delegate\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function borrowBehalf(address borrower, uint256 borrowAmount) external override returns (uint256) {\\n        _ensureSenderIsDelegateOf(borrower);\\n        accrueInterest();\\n\\n        _borrowFresh(borrower, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays their own borrow\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrow(uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, msg.sender, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays a borrow belonging to borrower\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, borrower, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Not restricted\\n     */\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external override returns (uint256) {\\n        _liquidateBorrow(msg.sender, borrower, repayAmount, vTokenCollateral, false);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice sets protocol share accumulated from liquidations\\n     * @dev must be equal or less than liquidation incentive - 1\\n     * @param newProtocolSeizeShareMantissa_ new protocol share mantissa\\n     * @custom:event Emits NewProtocolSeizeShare event on success\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error ProtocolSeizeShareTooBig is thrown when the new seize share is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setProtocolSeizeShare(uint256 newProtocolSeizeShareMantissa_) external {\\n        _checkAccessAllowed(\\\"setProtocolSeizeShare(uint256)\\\");\\n        uint256 liquidationIncentive = ComptrollerViewInterface(address(comptroller)).liquidationIncentiveMantissa();\\n        if (newProtocolSeizeShareMantissa_ + MANTISSA_ONE > liquidationIncentive) {\\n            revert ProtocolSeizeShareTooBig();\\n        }\\n\\n        uint256 oldProtocolSeizeShareMantissa = protocolSeizeShareMantissa;\\n        protocolSeizeShareMantissa = newProtocolSeizeShareMantissa_;\\n        emit NewProtocolSeizeShare(oldProtocolSeizeShareMantissa, newProtocolSeizeShareMantissa_);\\n    }\\n\\n    /**\\n     * @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\\n     * @dev Admin function to accrue interest and set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     * @custom:event Emits NewReserveFactor event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error SetReserveFactorBoundsCheck is thrown when the new reserve factor is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external override nonReentrant {\\n        _checkAccessAllowed(\\\"setReserveFactor(uint256)\\\");\\n\\n        accrueInterest();\\n        _setReserveFactorFresh(newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Accrues interest and reduces reserves by transferring to the protocol reserve contract\\n     * @dev Gracefully return if reserves already reduced in accrueInterest\\n     * @param reduceAmount Amount of reduction to reserves\\n     * @custom:event Emits ReservesReduced event; may emit AccrueInterest\\n     * @custom:error ReduceReservesCashNotAvailable is thrown when the vToken does not have sufficient cash\\n     * @custom:error ReduceReservesCashValidation is thrown when trying to withdraw more cash than the reserves have\\n     * @custom:access Not restricted\\n     */\\n    function reduceReserves(uint256 reduceAmount) external override nonReentrant {\\n        accrueInterest();\\n        if (reduceReservesBlockNumber == getBlockNumberOrTimestamp()) return;\\n        _reduceReservesFresh(reduceAmount);\\n    }\\n\\n    /**\\n     * @notice The sender adds to reserves.\\n     * @param addAmount The amount of underlying token to add as reserves\\n     * @custom:event Emits ReservesAdded event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function addReserves(uint256 addAmount) external override nonReentrant {\\n        accrueInterest();\\n        _addReservesFresh(addAmount);\\n    }\\n\\n    /**\\n     * @notice accrues interest and updates the interest rate model using _setInterestRateModelFresh\\n     * @dev Admin function to accrue interest and update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     * @custom:event Emits NewMarketInterestRateModel event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external override {\\n        _checkAccessAllowed(\\\"setInterestRateModel(address)\\\");\\n\\n        accrueInterest();\\n        _setInterestRateModelFresh(newInterestRateModel);\\n    }\\n\\n    /**\\n     * @notice Repays a certain amount of debt, treats the rest of the borrow as bad debt, essentially\\n     *   \\\"forgiving\\\" the borrower. Healing is a situation that should rarely happen. However, some pools\\n     *   may list risky assets or be configured improperly \\u2013 we want to still handle such cases gracefully.\\n     *   We assume that Comptroller does the seizing, so this function is only available to Comptroller.\\n     * @dev This function does not call any Comptroller hooks (like \\\"healAllowed\\\"), because we assume\\n     *   the Comptroller does all the necessary checks before calling this function.\\n     * @param payer account who repays the debt\\n     * @param borrower account to heal\\n     * @param repayAmount amount to repay\\n     * @custom:event Emits RepayBorrow, BadDebtIncreased events; may emit AccrueInterest\\n     * @custom:error HealBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:access Only Comptroller\\n     */\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external override nonReentrant {\\n        if (repayAmount != 0) {\\n            comptroller.preRepayHook(address(this), borrower);\\n        }\\n\\n        if (msg.sender != address(comptroller)) {\\n            revert HealBorrowUnauthorized();\\n        }\\n\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 totalBorrowsNew = totalBorrows;\\n\\n        uint256 actualRepayAmount;\\n        if (repayAmount != 0) {\\n            // _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n            // We violate checks-effects-interactions here to account for tokens that take transfer fees\\n            actualRepayAmount = _doTransferIn(payer, repayAmount);\\n            totalBorrowsNew = totalBorrowsNew - actualRepayAmount;\\n            emit RepayBorrow(\\n                payer,\\n                borrower,\\n                actualRepayAmount,\\n                accountBorrowsPrev - actualRepayAmount,\\n                totalBorrowsNew\\n            );\\n        }\\n\\n        // The transaction will fail if trying to repay too much\\n        uint256 badDebtDelta = accountBorrowsPrev - actualRepayAmount;\\n        if (badDebtDelta != 0) {\\n            uint256 badDebtOld = badDebt;\\n            uint256 badDebtNew = badDebtOld + badDebtDelta;\\n            totalBorrowsNew = totalBorrowsNew - badDebtDelta;\\n            badDebt = badDebtNew;\\n\\n            // We treat healing as \\\"repayment\\\", where vToken is the payer\\n            emit RepayBorrow(address(this), borrower, badDebtDelta, 0, totalBorrowsNew);\\n            emit BadDebtIncreased(borrower, badDebtDelta, badDebtOld, badDebtNew);\\n        }\\n\\n        accountBorrows[borrower].principal = 0;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        emit HealBorrow(payer, borrower, repayAmount);\\n    }\\n\\n    /**\\n     * @notice The extended version of liquidations, callable only by Comptroller. May skip\\n     *  the close factor check. The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error ForceLiquidateBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Only Comptroller\\n     */\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        if (msg.sender != address(comptroller)) {\\n            revert ForceLiquidateBorrowUnauthorized();\\n        }\\n        _liquidateBorrow(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Will fail unless called by another vToken during the process of liquidation.\\n     *  It's absolutely critical to use msg.sender as the borrowed vToken and not a parameter.\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     * @custom:event Emits Transfer, ReservesAdded events\\n     * @custom:error LiquidateSeizeLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:access Not restricted\\n     */\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external override nonReentrant {\\n        _seize(msg.sender, liquidator, borrower, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Updates bad debt\\n     * @dev Called only when bad debt is recovered from auction\\n     * @param recoveredAmount_ The amount of bad debt recovered\\n     * @custom:event Emits BadDebtRecovered event\\n     * @custom:access Only Shortfall contract\\n     */\\n    function badDebtRecovered(uint256 recoveredAmount_) external {\\n        require(msg.sender == shortfall, \\\"only shortfall contract can update bad debt\\\");\\n        require(recoveredAmount_ <= badDebt, \\\"more than bad debt recovered from auction\\\");\\n\\n        uint256 badDebtOld = badDebt;\\n        uint256 badDebtNew = badDebtOld - recoveredAmount_;\\n        badDebt = badDebtNew;\\n\\n        emit BadDebtRecovered(badDebtOld, badDebtNew);\\n    }\\n\\n    /**\\n     * @notice Sets protocol share reserve contract address\\n     * @param protocolShareReserve_ The address of the protocol share reserve contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setProtocolShareReserve(address payable protocolShareReserve_) external onlyOwner {\\n        _setProtocolShareReserve(protocolShareReserve_);\\n    }\\n\\n    /**\\n     * @notice Sets shortfall contract address\\n     * @param shortfall_ The address of the shortfall contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setShortfallContract(address shortfall_) external onlyOwner {\\n        _setShortfallContract(shortfall_);\\n    }\\n\\n    /**\\n     * @notice A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)\\n     * @param token The address of the ERC-20 token to sweep\\n     * @custom:access Only Governance\\n     */\\n    function sweepToken(IERC20Upgradeable token) external override {\\n        require(msg.sender == owner(), \\\"VToken::sweepToken: only admin can sweep tokens\\\");\\n        require(address(token) != underlying, \\\"VToken::sweepToken: can not sweep underlying token\\\");\\n        uint256 balance = token.balanceOf(address(this));\\n        token.safeTransfer(owner(), balance);\\n\\n        emit SweepToken(address(token));\\n    }\\n\\n    /**\\n     * @notice A public function to set new threshold of slot(block or second) difference after which funds will be sent to the protocol share reserve\\n     * @param _newReduceReservesBlockOrTimestampDelta slot(block or second) difference value\\n     * @custom:access Only Governance\\n     */\\n    function setReduceReservesBlockDelta(uint256 _newReduceReservesBlockOrTimestampDelta) external {\\n        _checkAccessAllowed(\\\"setReduceReservesBlockDelta(uint256)\\\");\\n        require(_newReduceReservesBlockOrTimestampDelta > 0, \\\"Invalid Input\\\");\\n        emit NewReduceReservesBlockDelta(reduceReservesBlockDelta, _newReduceReservesBlockOrTimestampDelta);\\n        reduceReservesBlockDelta = _newReduceReservesBlockOrTimestampDelta;\\n    }\\n\\n    /**\\n     * @notice Get the current allowance from `owner` for `spender`\\n     * @param owner The address of the account which owns the tokens to be spent\\n     * @param spender The address of the account which may transfer tokens\\n     * @return amount The number of tokens allowed to be spent (type(uint256).max means infinite)\\n     */\\n    function allowance(address owner, address spender) external view override returns (uint256) {\\n        return transferAllowances[owner][spender];\\n    }\\n\\n    /**\\n     * @notice Get the token balance of the `owner`\\n     * @param owner The address of the account to query\\n     * @return amount The number of tokens owned by `owner`\\n     */\\n    function balanceOf(address owner) external view override returns (uint256) {\\n        return accountTokens[owner];\\n    }\\n\\n    /**\\n     * @notice Get a snapshot of the account's balances, and the cached exchange rate\\n     * @dev This is used by comptroller to more efficiently perform liquidity checks.\\n     * @param account Address of the account to snapshot\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return vTokenBalance User's balance of vTokens\\n     * @return borrowBalance Amount owed in terms of underlying\\n     * @return exchangeRate Stored exchange rate\\n     */\\n    function getAccountSnapshot(\\n        address account\\n    )\\n        external\\n        view\\n        override\\n        returns (uint256 error, uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRate)\\n    {\\n        return (NO_ERROR, accountTokens[account], _borrowBalanceStored(account), _exchangeRateStored());\\n    }\\n\\n    /**\\n     * @notice Get cash balance of this vToken in the underlying asset\\n     * @return cash The quantity of underlying asset owned by this contract\\n     */\\n    function getCash() external view override returns (uint256) {\\n        return _getCashPrior();\\n    }\\n\\n    /**\\n     * @notice Returns the current per slot(block or second) borrow interest rate for this vToken\\n     * @return rate The borrow interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function borrowRatePerBlock() external view override returns (uint256) {\\n        return interestRateModel.getBorrowRate(_getCashPrior(), totalBorrows, totalReserves, badDebt);\\n    }\\n\\n    /**\\n     * @notice Returns the current per-slot(block or second) supply interest rate for this v\\n     * @return rate The supply interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function supplyRatePerBlock() external view override returns (uint256) {\\n        return\\n            interestRateModel.getSupplyRate(\\n                _getCashPrior(),\\n                totalBorrows,\\n                totalReserves,\\n                reserveFactorMantissa,\\n                badDebt\\n            );\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceStored(address account) external view override returns (uint256) {\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateStored() external view override returns (uint256) {\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Accrue interest then return the up-to-date exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateCurrent() public override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Applies accrued interest to total borrows and reserves\\n     * @dev This calculates interest accrued from the last checkpointed slot(block or second)\\n     *  up to the current slot(block or second) and writes new checkpoint to storage and\\n     *  reduce spread reserves to protocol share reserve\\n     *  if currentSlot - reduceReservesBlockNumber >= slotDelta\\n     * @return Always NO_ERROR\\n     * @custom:event Emits AccrueInterest event on success\\n     * @custom:access Not restricted\\n     */\\n    function accrueInterest() public virtual override returns (uint256) {\\n        /* Remember the initial block number or timestamp */\\n        uint256 currentSlotNumber = getBlockNumberOrTimestamp();\\n        uint256 accrualSlotNumberPrior = accrualBlockNumber;\\n\\n        /* Short-circuit accumulating 0 interest */\\n        if (accrualSlotNumberPrior == currentSlotNumber) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Read the previous values out of storage */\\n        uint256 cashPrior = _getCashPrior();\\n        uint256 borrowsPrior = totalBorrows;\\n        uint256 reservesPrior = totalReserves;\\n        uint256 borrowIndexPrior = borrowIndex;\\n\\n        /* Calculate the current borrow interest rate */\\n        uint256 borrowRateMantissa = interestRateModel.getBorrowRate(cashPrior, borrowsPrior, reservesPrior, badDebt);\\n        require(borrowRateMantissa <= MAX_BORROW_RATE_MANTISSA, \\\"borrow rate is absurdly high\\\");\\n\\n        /* Calculate the number of slots elapsed since the last accrual */\\n        uint256 slotDelta = currentSlotNumber - accrualSlotNumberPrior;\\n\\n        /*\\n         * Calculate the interest accumulated into borrows and reserves and the new index:\\n         *  simpleInterestFactor = borrowRate * slotDelta\\n         *  interestAccumulated = simpleInterestFactor * totalBorrows\\n         *  totalBorrowsNew = interestAccumulated + totalBorrows\\n         *  totalReservesNew = interestAccumulated * reserveFactor + totalReserves\\n         *  borrowIndexNew = simpleInterestFactor * borrowIndex + borrowIndex\\n         */\\n\\n        Exp memory simpleInterestFactor = mul_(Exp({ mantissa: borrowRateMantissa }), slotDelta);\\n        uint256 interestAccumulated = mul_ScalarTruncate(simpleInterestFactor, borrowsPrior);\\n        uint256 totalBorrowsNew = interestAccumulated + borrowsPrior;\\n        uint256 totalReservesNew = mul_ScalarTruncateAddUInt(\\n            Exp({ mantissa: reserveFactorMantissa }),\\n            interestAccumulated,\\n            reservesPrior\\n        );\\n        uint256 borrowIndexNew = mul_ScalarTruncateAddUInt(simpleInterestFactor, borrowIndexPrior, borrowIndexPrior);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the previously calculated values into storage */\\n        accrualBlockNumber = currentSlotNumber;\\n        borrowIndex = borrowIndexNew;\\n        totalBorrows = totalBorrowsNew;\\n        totalReserves = totalReservesNew;\\n\\n        if (currentSlotNumber - reduceReservesBlockNumber >= reduceReservesBlockDelta) {\\n            reduceReservesBlockNumber = currentSlotNumber;\\n            if (cashPrior < totalReservesNew) {\\n                _reduceReservesFresh(cashPrior);\\n            } else {\\n                _reduceReservesFresh(totalReservesNew);\\n            }\\n        }\\n\\n        /* We emit an AccrueInterest event */\\n        emit AccrueInterest(cashPrior, interestAccumulated, borrowIndexNew, totalBorrowsNew);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice User supplies assets into the market and receives vTokens in exchange\\n     * @dev Assumes interest has already been accrued up to the current block or timestamp\\n     * @param payer The address of the account which is sending the assets for supply\\n     * @param minter The address of the account which is supplying the assets\\n     * @param mintAmount The amount of the underlying asset to supply\\n     */\\n    function _mintFresh(address payer, address minter, uint256 mintAmount) internal {\\n        /* Fail if mint not allowed */\\n        comptroller.preMintHook(address(this), minter, mintAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert MintFreshnessCheck();\\n        }\\n\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         *  We call `_doTransferIn` for the minter and the mintAmount.\\n         *  `_doTransferIn` reverts if anything goes wrong, since we can't be sure if\\n         *  side-effects occurred. The function returns the amount actually transferred,\\n         *  in case of a fee. On success, the vToken holds an additional `actualMintAmount`\\n         *  of cash.\\n         */\\n        uint256 actualMintAmount = _doTransferIn(payer, mintAmount);\\n\\n        /*\\n         * We get the current exchange rate and calculate the number of vTokens to be minted:\\n         *  mintTokens = actualMintAmount / exchangeRate\\n         */\\n\\n        uint256 mintTokens = div_(actualMintAmount, exchangeRate);\\n\\n        /*\\n         * We calculate the new total supply of vTokens and minter token balance, checking for overflow:\\n         *  totalSupplyNew = totalSupply + mintTokens\\n         *  accountTokensNew = accountTokens[minter] + mintTokens\\n         * And write them into storage\\n         */\\n        totalSupply = totalSupply + mintTokens;\\n        uint256 balanceAfter = accountTokens[minter] + mintTokens;\\n        accountTokens[minter] = balanceAfter;\\n\\n        /* We emit a Mint event, and a Transfer event */\\n        emit Mint(minter, actualMintAmount, mintTokens, balanceAfter);\\n        emit Transfer(address(0), minter, mintTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.mintVerify(address(this), minter, actualMintAmount, mintTokens);\\n    }\\n\\n    /**\\n     * @notice Redeemer redeems vTokens in exchange for the underlying assets, transferred to the receiver. Redeemer and receiver can be the same\\n     *   address, or different addresses if the receiver was previously approved by the redeemer as a valid delegate (see Comptroller.updateDelegate)\\n     * @dev Assumes interest has already been accrued up to the current slot(block or second)\\n     * @param redeemer The address of the account which is redeeming the tokens\\n     * @param receiver The receiver of the underlying tokens\\n     * @param redeemTokensIn The number of vTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     * @param redeemAmountIn The number of underlying tokens to receive from redeeming vTokens (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     */\\n    function _redeemFresh(address redeemer, address receiver, uint256 redeemTokensIn, uint256 redeemAmountIn) internal {\\n        require(redeemTokensIn == 0 || redeemAmountIn == 0, \\\"one of redeemTokensIn or redeemAmountIn must be zero\\\");\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RedeemFreshnessCheck();\\n        }\\n\\n        /* exchangeRate = invoke Exchange Rate Stored() */\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        uint256 redeemTokens;\\n        uint256 redeemAmount;\\n\\n        /* If redeemTokensIn > 0: */\\n        if (redeemTokensIn > 0) {\\n            /*\\n             * We calculate the exchange rate and the amount of underlying to be redeemed:\\n             *  redeemTokens = redeemTokensIn\\n             */\\n            redeemTokens = redeemTokensIn;\\n        } else {\\n            /*\\n             * We get the current exchange rate and calculate the amount to be redeemed:\\n             *  redeemTokens = redeemAmountIn / exchangeRate\\n             */\\n            redeemTokens = div_(redeemAmountIn, exchangeRate);\\n\\n            uint256 _redeemAmount = mul_(redeemTokens, exchangeRate);\\n            if (_redeemAmount != 0 && _redeemAmount != redeemAmountIn) redeemTokens++; // round up\\n        }\\n\\n        // redeemAmount = exchangeRate * redeemTokens\\n        redeemAmount = mul_ScalarTruncate(exchangeRate, redeemTokens);\\n\\n        // Revert if amount is zero\\n        if (redeemAmount == 0) {\\n            revert(\\\"redeemAmount is zero\\\");\\n        }\\n\\n        /* Fail if redeem not allowed */\\n        comptroller.preRedeemHook(address(this), redeemer, redeemTokens);\\n\\n        /* Fail gracefully if protocol has insufficient cash */\\n        if (_getCashPrior() - totalReserves < redeemAmount) {\\n            revert RedeemTransferOutNotPossible();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing reduced supply before external transfer.\\n         */\\n        totalSupply = totalSupply - redeemTokens;\\n        uint256 balanceAfter = accountTokens[redeemer] - redeemTokens;\\n        accountTokens[redeemer] = balanceAfter;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the redeemAmount.\\n         *  On success, the vToken has redeemAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, redeemAmount);\\n\\n        /* We emit a Transfer event, and a Redeem event */\\n        emit Transfer(redeemer, address(this), redeemTokens);\\n        emit Redeem(redeemer, redeemAmount, redeemTokens, balanceAfter);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.redeemVerify(address(this), redeemer, redeemAmount, redeemTokens);\\n    }\\n\\n    /**\\n     * @notice Users or their delegates borrow assets from the protocol\\n     * @param borrower User who borrows the assets\\n     * @param receiver The receiver of the tokens, if called by a delegate\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     */\\n    function _borrowFresh(address borrower, address receiver, uint256 borrowAmount) internal {\\n        /* Fail if borrow not allowed */\\n        comptroller.preBorrowHook(address(this), borrower, borrowAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert BorrowFreshnessCheck();\\n        }\\n\\n        /* Fail gracefully if protocol has insufficient underlying cash */\\n        if (_getCashPrior() - totalReserves < borrowAmount) {\\n            revert BorrowCashNotAvailable();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on overflow:\\n         *  accountBorrowNew = accountBorrow + borrowAmount\\n         *  totalBorrowsNew = totalBorrows + borrowAmount\\n         */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 accountBorrowsNew = accountBorrowsPrev + borrowAmount;\\n        uint256 totalBorrowsNew = totalBorrows + borrowAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing increased borrow before external transfer.\\n        `*/\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the borrowAmount.\\n         *  On success, the vToken borrowAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, borrowAmount);\\n\\n        /* We emit a Borrow event */\\n        emit Borrow(borrower, borrowAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.borrowVerify(address(this), borrower, borrowAmount);\\n    }\\n\\n    /**\\n     * @notice Borrows are repaid by another user (possibly the borrower).\\n     * @param payer the account paying off the borrow\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount the amount of underlying tokens being returned, or type(uint256).max for the full outstanding amount\\n     * @return (uint) the actual repayment amount.\\n     */\\n    function _repayBorrowFresh(address payer, address borrower, uint256 repayAmount) internal returns (uint256) {\\n        /* Fail if repayBorrow not allowed */\\n        comptroller.preRepayHook(address(this), borrower);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RepayBorrowFreshnessCheck();\\n        }\\n\\n        /* We fetch the amount the borrower owes, with accumulated interest */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n\\n        uint256 repayAmountFinal = repayAmount >= accountBorrowsPrev ? accountBorrowsPrev : repayAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We call _doTransferIn for the payer and the repayAmount\\n         *  On success, the vToken holds an additional repayAmount of cash.\\n         *  _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         *   it returns the amount actually transferred, in case of a fee.\\n         */\\n        uint256 actualRepayAmount = _doTransferIn(payer, repayAmountFinal);\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on underflow:\\n         *  accountBorrowsNew = accountBorrows - actualRepayAmount\\n         *  totalBorrowsNew = totalBorrows - actualRepayAmount\\n         */\\n        uint256 accountBorrowsNew = accountBorrowsPrev - actualRepayAmount;\\n        uint256 totalBorrowsNew = totalBorrows - actualRepayAmount;\\n\\n        /* We write the previously calculated values into storage */\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /* We emit a RepayBorrow event */\\n        emit RepayBorrow(payer, borrower, actualRepayAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.repayBorrowVerify(address(this), payer, borrower, actualRepayAmount, borrowIndex);\\n\\n        return actualRepayAmount;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal nonReentrant {\\n        accrueInterest();\\n\\n        uint256 error = vTokenCollateral.accrueInterest();\\n        if (error != NO_ERROR) {\\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted liquidation failed\\n            revert LiquidateAccrueCollateralInterestFailed(error);\\n        }\\n\\n        _liquidateBorrowFresh(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice The liquidator liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrowFresh(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal {\\n        /* Fail if liquidate not allowed */\\n        comptroller.preLiquidateHook(\\n            address(this),\\n            address(vTokenCollateral),\\n            borrower,\\n            repayAmount,\\n            skipLiquidityCheck\\n        );\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert LiquidateFreshnessCheck();\\n        }\\n\\n        /* Verify vTokenCollateral market's slot(block or second) number equals current slot(block or second) number */\\n        if (vTokenCollateral.accrualBlockNumber() != getBlockNumberOrTimestamp()) {\\n            revert LiquidateCollateralFreshnessCheck();\\n        }\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateLiquidatorIsBorrower();\\n        }\\n\\n        /* Fail if repayAmount = 0 */\\n        if (repayAmount == 0) {\\n            revert LiquidateCloseAmountIsZero();\\n        }\\n\\n        /* Fail if repayAmount = type(uint256).max */\\n        if (repayAmount == type(uint256).max) {\\n            revert LiquidateCloseAmountIsUintMax();\\n        }\\n\\n        /* Fail if repayBorrow fails */\\n        uint256 actualRepayAmount = _repayBorrowFresh(liquidator, borrower, repayAmount);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We calculate the number of collateral tokens that will be seized */\\n        (uint256 amountSeizeError, uint256 seizeTokens) = comptroller.liquidateCalculateSeizeTokens(\\n            address(this),\\n            address(vTokenCollateral),\\n            actualRepayAmount\\n        );\\n        require(amountSeizeError == NO_ERROR, \\\"LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED\\\");\\n\\n        /* Revert if borrower collateral token balance < seizeTokens */\\n        require(vTokenCollateral.balanceOf(borrower) >= seizeTokens, \\\"LIQUIDATE_SEIZE_TOO_MUCH\\\");\\n\\n        // If this is also the collateral, call _seize internally to avoid re-entrancy, otherwise make an external call\\n        if (address(vTokenCollateral) == address(this)) {\\n            _seize(address(this), liquidator, borrower, seizeTokens);\\n        } else {\\n            vTokenCollateral.seize(liquidator, borrower, seizeTokens);\\n        }\\n\\n        /* We emit a LiquidateBorrow event */\\n        emit LiquidateBorrow(liquidator, borrower, actualRepayAmount, address(vTokenCollateral), seizeTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.liquidateBorrowVerify(\\n            address(this),\\n            address(vTokenCollateral),\\n            liquidator,\\n            borrower,\\n            actualRepayAmount,\\n            seizeTokens\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Called only during an in-kind liquidation, or by liquidateBorrow during the liquidation of another VToken.\\n     *  It's absolutely critical to use msg.sender as the seizer vToken and not a parameter.\\n     * @param seizerContract The contract seizing the collateral (either borrowed vToken or Comptroller)\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     */\\n    function _seize(address seizerContract, address liquidator, address borrower, uint256 seizeTokens) internal {\\n        /* Fail if seize not allowed */\\n        comptroller.preSeizeHook(address(this), seizerContract, liquidator, borrower);\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateSeizeLiquidatorIsBorrower();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and liquidator token balances, failing on underflow/overflow:\\n         *  borrowerTokensNew = accountTokens[borrower] - seizeTokens\\n         *  liquidatorTokensNew = accountTokens[liquidator] + seizeTokens\\n         */\\n        uint256 liquidationIncentiveMantissa = ComptrollerViewInterface(address(comptroller))\\n            .liquidationIncentiveMantissa();\\n        uint256 numerator = mul_(seizeTokens, Exp({ mantissa: protocolSeizeShareMantissa }));\\n        uint256 protocolSeizeTokens = div_(numerator, Exp({ mantissa: liquidationIncentiveMantissa }));\\n        uint256 liquidatorSeizeTokens = seizeTokens - protocolSeizeTokens;\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n        uint256 protocolSeizeAmount = mul_ScalarTruncate(exchangeRate, protocolSeizeTokens);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the calculated values into storage */\\n        totalSupply = totalSupply - protocolSeizeTokens;\\n        accountTokens[borrower] = accountTokens[borrower] - seizeTokens;\\n        accountTokens[liquidator] = accountTokens[liquidator] + liquidatorSeizeTokens;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, protocolSeizeAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.LIQUIDATION\\n        );\\n\\n        /* Emit a Transfer event */\\n        emit Transfer(borrower, liquidator, liquidatorSeizeTokens);\\n        emit ProtocolSeize(borrower, protocolShareReserve, protocolSeizeAmount);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.seizeVerify(address(this), seizerContract, liquidator, borrower, seizeTokens);\\n    }\\n\\n    function _setComptroller(ComptrollerInterface newComptroller) internal {\\n        ComptrollerInterface oldComptroller = comptroller;\\n        // Ensure invoke comptroller.isComptroller() returns true\\n        require(newComptroller.isComptroller(), \\\"marker method returned false\\\");\\n\\n        // Set market's comptroller to newComptroller\\n        comptroller = newComptroller;\\n\\n        // Emit NewComptroller(oldComptroller, newComptroller)\\n        emit NewComptroller(oldComptroller, newComptroller);\\n    }\\n\\n    /**\\n     * @notice Sets a new reserve factor for the protocol (*requires fresh interest accrual)\\n     * @dev Admin function to set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     */\\n    function _setReserveFactorFresh(uint256 newReserveFactorMantissa) internal {\\n        // Verify market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetReserveFactorFreshCheck();\\n        }\\n\\n        // Check newReserveFactor \\u2264 maxReserveFactor\\n        if (newReserveFactorMantissa > MAX_RESERVE_FACTOR_MANTISSA) {\\n            revert SetReserveFactorBoundsCheck();\\n        }\\n\\n        uint256 oldReserveFactorMantissa = reserveFactorMantissa;\\n        reserveFactorMantissa = newReserveFactorMantissa;\\n\\n        emit NewReserveFactor(oldReserveFactorMantissa, newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Add reserves by transferring from caller\\n     * @dev Requires fresh interest accrual\\n     * @param addAmount Amount of addition to reserves\\n     * @return actualAddAmount The actual amount added, excluding the potential token fees\\n     */\\n    function _addReservesFresh(uint256 addAmount) internal returns (uint256) {\\n        // totalReserves + actualAddAmount\\n        uint256 totalReservesNew;\\n        uint256 actualAddAmount;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert AddReservesFactorFreshCheck(actualAddAmount);\\n        }\\n\\n        actualAddAmount = _doTransferIn(msg.sender, addAmount);\\n        totalReservesNew = totalReserves + actualAddAmount;\\n        totalReserves = totalReservesNew;\\n        emit ReservesAdded(msg.sender, actualAddAmount, totalReservesNew);\\n\\n        return actualAddAmount;\\n    }\\n\\n    /**\\n     * @notice Reduces reserves by transferring to the protocol reserve contract\\n     * @dev Requires fresh interest accrual\\n     * @param reduceAmount Amount of reduction to reserves\\n     */\\n    function _reduceReservesFresh(uint256 reduceAmount) internal {\\n        if (reduceAmount == 0) {\\n            return;\\n        }\\n        // totalReserves - reduceAmount\\n        uint256 totalReservesNew;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert ReduceReservesFreshCheck();\\n        }\\n\\n        // Fail gracefully if protocol has insufficient underlying cash\\n        if (_getCashPrior() < reduceAmount) {\\n            revert ReduceReservesCashNotAvailable();\\n        }\\n\\n        // Check reduceAmount \\u2264 reserves[n] (totalReserves)\\n        if (reduceAmount > totalReserves) {\\n            revert ReduceReservesCashValidation();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        totalReservesNew = totalReserves - reduceAmount;\\n\\n        // Store reserves[n+1] = reserves[n] - reduceAmount\\n        totalReserves = totalReservesNew;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, reduceAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.SPREAD\\n        );\\n\\n        emit SpreadReservesReduced(protocolShareReserve, reduceAmount, totalReservesNew);\\n    }\\n\\n    /**\\n     * @notice updates the interest rate model (*requires fresh interest accrual)\\n     * @dev Admin function to update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     */\\n    function _setInterestRateModelFresh(InterestRateModel newInterestRateModel) internal {\\n        // Used to store old model for use in the event that is emitted on success\\n        InterestRateModel oldInterestRateModel;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetInterestRateModelFreshCheck();\\n        }\\n\\n        // Track the market's current interest rate model\\n        oldInterestRateModel = interestRateModel;\\n\\n        // Ensure invoke newInterestRateModel.isInterestRateModel() returns true\\n        require(newInterestRateModel.isInterestRateModel(), \\\"marker method returned false\\\");\\n\\n        // Set the interest rate model to newInterestRateModel\\n        interestRateModel = newInterestRateModel;\\n\\n        // Emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel)\\n        emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel);\\n    }\\n\\n    /**\\n     * Safe Token **\\n     */\\n\\n    /**\\n     * @dev Similar to ERC-20 transfer, but handles tokens that have transfer fees.\\n     *      This function returns the actual amount received,\\n     *      which may be less than `amount` if there is a fee attached to the transfer.\\n     * @param from Sender of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     * @return Actual amount received\\n     */\\n    function _doTransferIn(address from, uint256 amount) internal virtual returns (uint256) {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        uint256 balanceBefore = token.balanceOf(address(this));\\n        token.safeTransferFrom(from, address(this), amount);\\n        uint256 balanceAfter = token.balanceOf(address(this));\\n        // Return the amount that was *actually* transferred\\n        return balanceAfter - balanceBefore;\\n    }\\n\\n    /**\\n     * @dev Just a regular ERC-20 transfer, reverts on failure\\n     * @param to Receiver of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     */\\n    function _doTransferOut(address to, uint256 amount) internal virtual {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        token.safeTransfer(to, amount);\\n    }\\n\\n    /**\\n     * @notice Transfer `tokens` tokens from `src` to `dst` by `spender`\\n     * @dev Called by both `transfer` and `transferFrom` internally\\n     * @param spender The address of the account performing the transfer\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param tokens The number of tokens to transfer\\n     */\\n    function _transferTokens(address spender, address src, address dst, uint256 tokens) internal {\\n        /* Fail if transfer not allowed */\\n        comptroller.preTransferHook(address(this), src, dst, tokens);\\n\\n        /* Do not allow self-transfers */\\n        if (src == dst) {\\n            revert TransferNotAllowed();\\n        }\\n\\n        /* Get the allowance, infinite for the account owner */\\n        uint256 startingAllowance;\\n        if (spender == src) {\\n            startingAllowance = type(uint256).max;\\n        } else {\\n            startingAllowance = transferAllowances[src][spender];\\n        }\\n\\n        /* Do the calculations, checking for {under,over}flow */\\n        uint256 allowanceNew = startingAllowance - tokens;\\n        uint256 srcTokensNew = accountTokens[src] - tokens;\\n        uint256 dstTokensNew = accountTokens[dst] + tokens;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n\\n        accountTokens[src] = srcTokensNew;\\n        accountTokens[dst] = dstTokensNew;\\n\\n        /* Eat some of the allowance (if necessary) */\\n        if (startingAllowance != type(uint256).max) {\\n            transferAllowances[src][spender] = allowanceNew;\\n        }\\n\\n        /* We emit a Transfer event */\\n        emit Transfer(src, dst, tokens);\\n\\n        comptroller.transferVerify(address(this), src, dst, tokens);\\n    }\\n\\n    /**\\n     * @notice Initialize the money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     */\\n    function _initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n        require(accrualBlockNumber == 0 && borrowIndex == 0, \\\"market may only be initialized once\\\");\\n\\n        // Set initial exchange rate\\n        initialExchangeRateMantissa = initialExchangeRateMantissa_;\\n        require(initialExchangeRateMantissa > 0, \\\"initial exchange rate must be greater than zero.\\\");\\n\\n        _setComptroller(comptroller_);\\n\\n        // Initialize slot(block or second) number and borrow index (slot(block or second) number mocks depend on comptroller being set)\\n        accrualBlockNumber = getBlockNumberOrTimestamp();\\n        borrowIndex = MANTISSA_ONE;\\n\\n        // Set the interest rate model (depends on slot(block or second) number / borrow index)\\n        _setInterestRateModelFresh(interestRateModel_);\\n\\n        _setReserveFactorFresh(reserveFactorMantissa_);\\n\\n        name = name_;\\n        symbol = symbol_;\\n        decimals = decimals_;\\n        _setShortfallContract(riskManagement.shortfall);\\n        _setProtocolShareReserve(riskManagement.protocolShareReserve);\\n        protocolSeizeShareMantissa = DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA;\\n\\n        // Set underlying and sanity check it\\n        underlying = underlying_;\\n        IERC20Upgradeable(underlying).totalSupply();\\n\\n        // The counter starts true to prevent changing it from zero to non-zero (i.e. smaller cost/refund)\\n        _notEntered = true;\\n        _transferOwnership(admin_);\\n    }\\n\\n    function _setShortfallContract(address shortfall_) internal {\\n        ensureNonzeroAddress(shortfall_);\\n        address oldShortfall = shortfall;\\n        shortfall = shortfall_;\\n        emit NewShortfallContract(oldShortfall, shortfall_);\\n    }\\n\\n    function _setProtocolShareReserve(address payable protocolShareReserve_) internal {\\n        ensureNonzeroAddress(protocolShareReserve_);\\n        address oldProtocolShareReserve = address(protocolShareReserve);\\n        protocolShareReserve = protocolShareReserve_;\\n        emit NewProtocolShareReserve(oldProtocolShareReserve, address(protocolShareReserve_));\\n    }\\n\\n    function _ensureSenderIsDelegateOf(address user) internal view {\\n        if (!ComptrollerViewInterface(address(comptroller)).approvedDelegates(user, msg.sender)) {\\n            revert DelegateNotApproved();\\n        }\\n    }\\n\\n    /**\\n     * @notice Gets balance of this contract in terms of the underlying\\n     * @dev This excludes the value of the current message, if any\\n     * @return The quantity of underlying tokens owned by this contract\\n     */\\n    function _getCashPrior() internal view virtual returns (uint256) {\\n        return IERC20Upgradeable(underlying).balanceOf(address(this));\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance the calculated balance\\n     */\\n    function _borrowBalanceStored(address account) internal view returns (uint256) {\\n        /* Get borrowBalance and borrowIndex */\\n        BorrowSnapshot memory borrowSnapshot = accountBorrows[account];\\n\\n        /* If borrowBalance = 0 then borrowIndex is likely also 0.\\n         * Rather than failing the calculation with a division by 0, we immediately return 0 in this case.\\n         */\\n        if (borrowSnapshot.principal == 0) {\\n            return 0;\\n        }\\n\\n        /* Calculate new borrow balance using the interest index:\\n         *  recentBorrowBalance = borrower.borrowBalance * market.borrowIndex / borrower.borrowIndex\\n         */\\n        uint256 principalTimesIndex = borrowSnapshot.principal * borrowIndex;\\n\\n        return principalTimesIndex / borrowSnapshot.interestIndex;\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function _exchangeRateStored() internal view virtual returns (uint256) {\\n        uint256 _totalSupply = totalSupply;\\n        if (_totalSupply == 0) {\\n            /*\\n             * If there are no tokens minted:\\n             *  exchangeRate = initialExchangeRate\\n             */\\n            return initialExchangeRateMantissa;\\n        }\\n        /*\\n         * Otherwise:\\n         *  exchangeRate = (totalCash + totalBorrows + badDebt - totalReserves) / totalSupply\\n         */\\n        uint256 totalCash = _getCashPrior();\\n        uint256 cashPlusBorrowsMinusReserves = totalCash + totalBorrows + badDebt - totalReserves;\\n        uint256 exchangeRate = (cashPlusBorrowsMinusReserves * EXP_SCALE) / _totalSupply;\\n\\n        return exchangeRate;\\n    }\\n}\\n\",\"keccak256\":\"0xa220ca317fe69b920b86e43f054c43b5f891f12160fd312c9a21668f969ee056\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { ComptrollerInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\n\\n/**\\n * @title VTokenStorage\\n * @author Venus\\n * @notice Storage layout used by the `VToken` contract\\n */\\n// solhint-disable-next-line max-states-count\\ncontract VTokenStorage {\\n    /**\\n     * @notice Container for borrow balance information\\n     * @member principal Total balance (with accrued interest), after applying the most recent balance-changing action\\n     * @member interestIndex Global borrowIndex as of the most recent balance-changing action\\n     */\\n    struct BorrowSnapshot {\\n        uint256 principal;\\n        uint256 interestIndex;\\n    }\\n\\n    /**\\n     * @dev Guard variable for re-entrancy checks\\n     */\\n    bool internal _notEntered;\\n\\n    /**\\n     * @notice Underlying asset for this VToken\\n     */\\n    address public underlying;\\n\\n    /**\\n     * @notice EIP-20 token name for this token\\n     */\\n    string public name;\\n\\n    /**\\n     * @notice EIP-20 token symbol for this token\\n     */\\n    string public symbol;\\n\\n    /**\\n     * @notice EIP-20 token decimals for this token\\n     */\\n    uint8 public decimals;\\n\\n    /**\\n     * @notice Protocol share Reserve contract address\\n     */\\n    address payable public protocolShareReserve;\\n\\n    /**\\n     * @notice Contract which oversees inter-vToken operations\\n     */\\n    ComptrollerInterface public comptroller;\\n\\n    /**\\n     * @notice Model which tells what the current interest rate should be\\n     */\\n    InterestRateModel public interestRateModel;\\n\\n    // Initial exchange rate used when minting the first VTokens (used when totalSupply = 0)\\n    uint256 internal initialExchangeRateMantissa;\\n\\n    /**\\n     * @notice Fraction of interest currently set aside for reserves\\n     */\\n    uint256 public reserveFactorMantissa;\\n\\n    /**\\n     * @notice Slot(block or second) number that interest was last accrued at\\n     */\\n    uint256 public accrualBlockNumber;\\n\\n    /**\\n     * @notice Accumulator of the total earned interest rate since the opening of the market\\n     */\\n    uint256 public borrowIndex;\\n\\n    /**\\n     * @notice Total amount of outstanding borrows of the underlying in this market\\n     */\\n    uint256 public totalBorrows;\\n\\n    /**\\n     * @notice Total amount of reserves of the underlying held in this market\\n     */\\n    uint256 public totalReserves;\\n\\n    /**\\n     * @notice Total number of tokens in circulation\\n     */\\n    uint256 public totalSupply;\\n\\n    /**\\n     * @notice Total bad debt of the market\\n     */\\n    uint256 public badDebt;\\n\\n    // Official record of token balances for each account\\n    mapping(address => uint256) internal accountTokens;\\n\\n    // Approved token transfer amounts on behalf of others\\n    mapping(address => mapping(address => uint256)) internal transferAllowances;\\n\\n    // Mapping of account addresses to outstanding borrow balances\\n    mapping(address => BorrowSnapshot) internal accountBorrows;\\n\\n    /**\\n     * @notice Share of seized collateral that is added to reserves\\n     */\\n    uint256 public protocolSeizeShareMantissa;\\n\\n    /**\\n     * @notice Storage of Shortfall contract address\\n     */\\n    address public shortfall;\\n\\n    /**\\n     * @notice delta slot (block or second) after which reserves will be reduced\\n     */\\n    uint256 public reduceReservesBlockDelta;\\n\\n    /**\\n     * @notice last slot (block or second) number at which reserves were reduced\\n     */\\n    uint256 public reduceReservesBlockNumber;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n}\\n\\n/**\\n * @title VTokenInterface\\n * @author Venus\\n * @notice Interface implemented by the `VToken` contract\\n */\\nabstract contract VTokenInterface is VTokenStorage {\\n    struct RiskManagementInit {\\n        address shortfall;\\n        address payable protocolShareReserve;\\n    }\\n\\n    /*** Market Events ***/\\n\\n    /**\\n     * @notice Event emitted when interest is accrued\\n     */\\n    event AccrueInterest(uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when tokens are minted\\n     */\\n    event Mint(address indexed minter, uint256 mintAmount, uint256 mintTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when tokens are redeemed\\n     */\\n    event Redeem(address indexed redeemer, uint256 redeemAmount, uint256 redeemTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when underlying is borrowed\\n     */\\n    event Borrow(address indexed borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when a borrow is repaid\\n     */\\n    event RepayBorrow(\\n        address indexed payer,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        uint256 accountBorrows,\\n        uint256 totalBorrows\\n    );\\n\\n    /**\\n     * @notice Event emitted when bad debt is accumulated on a market\\n     * @param borrower borrower to \\\"forgive\\\"\\n     * @param badDebtDelta amount of new bad debt recorded\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtIncreased(address indexed borrower, uint256 badDebtDelta, uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when bad debt is recovered via an auction\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtRecovered(uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when a borrow is liquidated\\n     */\\n    event LiquidateBorrow(\\n        address indexed liquidator,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        address indexed vTokenCollateral,\\n        uint256 seizeTokens\\n    );\\n\\n    /*** Admin Events ***/\\n\\n    /**\\n     * @notice Event emitted when comptroller is changed\\n     */\\n    event NewComptroller(ComptrollerInterface indexed oldComptroller, ComptrollerInterface indexed newComptroller);\\n\\n    /**\\n     * @notice Event emitted when shortfall contract address is changed\\n     */\\n    event NewShortfallContract(address indexed oldShortfall, address indexed newShortfall);\\n\\n    /**\\n     * @notice Event emitted when protocol share reserve contract address is changed\\n     */\\n    event NewProtocolShareReserve(address indexed oldProtocolShareReserve, address indexed newProtocolShareReserve);\\n\\n    /**\\n     * @notice Event emitted when interestRateModel is changed\\n     */\\n    event NewMarketInterestRateModel(\\n        InterestRateModel indexed oldInterestRateModel,\\n        InterestRateModel indexed newInterestRateModel\\n    );\\n\\n    /**\\n     * @notice Event emitted when protocol seize share is changed\\n     */\\n    event NewProtocolSeizeShare(uint256 oldProtocolSeizeShareMantissa, uint256 newProtocolSeizeShareMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserve factor is changed\\n     */\\n    event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserves are added\\n     */\\n    event ReservesAdded(address indexed benefactor, uint256 addAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice Event emitted when the spread reserves are reduced\\n     */\\n    event SpreadReservesReduced(address indexed protocolShareReserve, uint256 reduceAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice EIP20 Transfer event\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 amount);\\n\\n    /**\\n     * @notice EIP20 Approval event\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\\n\\n    /**\\n     * @notice Event emitted when healing the borrow\\n     */\\n    event HealBorrow(address indexed payer, address indexed borrower, uint256 repayAmount);\\n\\n    /**\\n     * @notice Event emitted when tokens are swept\\n     */\\n    event SweepToken(address indexed token);\\n\\n    /**\\n     * @notice Event emitted when reduce reserves slot (block or second) delta is changed\\n     */\\n    event NewReduceReservesBlockDelta(\\n        uint256 oldReduceReservesBlockOrTimestampDelta,\\n        uint256 newReduceReservesBlockOrTimestampDelta\\n    );\\n\\n    /**\\n     * @notice Event emitted when liquidation reserves are reduced\\n     */\\n    event ProtocolSeize(address indexed from, address indexed to, uint256 amount);\\n\\n    /*** User Interface ***/\\n\\n    function mint(uint256 mintAmount) external virtual returns (uint256);\\n\\n    function mintBehalf(address minter, uint256 mintAllowed) external virtual returns (uint256);\\n\\n    function redeem(uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemUnderlying(uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function redeemUnderlyingBehalf(address redeemer, uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function borrow(uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function borrowBehalf(address borrwwer, uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function repayBorrow(uint256 repayAmount) external virtual returns (uint256);\\n\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external virtual returns (uint256);\\n\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external virtual returns (uint256);\\n\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external virtual;\\n\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipCloseFactorCheck\\n    ) external virtual;\\n\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external virtual;\\n\\n    function transfer(address dst, uint256 amount) external virtual returns (bool);\\n\\n    function transferFrom(address src, address dst, uint256 amount) external virtual returns (bool);\\n\\n    function accrueInterest() external virtual returns (uint256);\\n\\n    function sweepToken(IERC20Upgradeable token) external virtual;\\n\\n    /*** Admin Functions ***/\\n\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external virtual;\\n\\n    function reduceReserves(uint256 reduceAmount) external virtual;\\n\\n    function exchangeRateCurrent() external virtual returns (uint256);\\n\\n    function borrowBalanceCurrent(address account) external virtual returns (uint256);\\n\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external virtual;\\n\\n    function addReserves(uint256 addAmount) external virtual;\\n\\n    function totalBorrowsCurrent() external virtual returns (uint256);\\n\\n    function balanceOfUnderlying(address owner) external virtual returns (uint256);\\n\\n    function approve(address spender, uint256 amount) external virtual returns (bool);\\n\\n    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool);\\n\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool);\\n\\n    function allowance(address owner, address spender) external view virtual returns (uint256);\\n\\n    function balanceOf(address owner) external view virtual returns (uint256);\\n\\n    function getAccountSnapshot(address account) external view virtual returns (uint256, uint256, uint256, uint256);\\n\\n    function borrowRatePerBlock() external view virtual returns (uint256);\\n\\n    function supplyRatePerBlock() external view virtual returns (uint256);\\n\\n    function borrowBalanceStored(address account) external view virtual returns (uint256);\\n\\n    function exchangeRateStored() external view virtual returns (uint256);\\n\\n    function getCash() external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is a VToken contract (for inspection)\\n     * @return Always true\\n     */\\n    function isVToken() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7c4cbb879e3a931cfee4fa7a9eb1978eddff18087a1c4f56decedb84c2479f1e\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\",\"keccak256\":\"0x54ab3a6f3bc87569ed12370f3470a1ec84cea9796d4d0ccf3d07dd4280c044aa\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/validators.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\\nerror ZeroAddressNotAllowed();\\n\\n/// @notice Checks if the provided address is nonzero, reverts otherwise\\n/// @param address_ Address to check\\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\\nfunction ensureNonzeroAddress(address address_) pure {\\n    if (address_ == address(0)) {\\n        revert ZeroAddressNotAllowed();\\n    }\\n}\\n\",\"keccak256\":\"0x93bdd5cfb100f0f9a1d446857e23c3633df6ab12c266333c978428edd96b1367\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface IProtocolShareReserve {\\n    /// @notice it represents the type of vToken income\\n    enum IncomeType {\\n        SPREAD,\\n        LIQUIDATION\\n    }\\n\\n    function updateAssetsState(\\n        address comptroller,\\n        address asset,\\n        IncomeType incomeType\\n    ) external;\\n}\\n\",\"keccak256\":\"0x5fddc5b63fdd850b3b5c83576cda50dcb27a205dbb1a23af17d9da0d9f04fa0a\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { SECONDS_PER_YEAR } from \\\"./constants.sol\\\";\\n\\nabstract contract TimeManagerV8 {\\n    /// @notice Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 public immutable blocksOrSecondsPerYear;\\n\\n    /// @notice Acknowledges if a contract is time based or not\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    bool public immutable isTimeBased;\\n\\n    /// @notice Stores the current block timestamp or block number depending on isTimeBased\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    function() view returns (uint256) private immutable _getCurrentSlot;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n\\n    /// @notice Thrown when blocks per year is invalid\\n    error InvalidBlocksPerYear();\\n\\n    /// @notice Thrown when time based but blocks per year is provided\\n    error InvalidTimeBasedConfiguration();\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block\\n     * If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:error InvalidBlocksPerYear is thrown if blocksPerYear entered is zero and timeBased is false\\n     * @custom:error InvalidTimeBasedConfiguration is thrown if blocksPerYear entered is non zero and timeBased is true\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) {\\n        if (!timeBased_ && blocksPerYear_ == 0) {\\n            revert InvalidBlocksPerYear();\\n        }\\n\\n        if (timeBased_ && blocksPerYear_ != 0) {\\n            revert InvalidTimeBasedConfiguration();\\n        }\\n\\n        isTimeBased = timeBased_;\\n        blocksOrSecondsPerYear = timeBased_ ? SECONDS_PER_YEAR : blocksPerYear_;\\n        _getCurrentSlot = timeBased_ ? _getBlockTimestamp : _getBlockNumber;\\n    }\\n\\n    /**\\n     * @dev Function to simply retrieve block number or block timestamp\\n     * @return Current block number or block timestamp\\n     */\\n    function getBlockNumberOrTimestamp() public view virtual returns (uint256) {\\n        return _getCurrentSlot();\\n    }\\n\\n    /**\\n     * @dev Returns the current timestamp in seconds\\n     * @return The current timestamp\\n     */\\n    function _getBlockTimestamp() private view returns (uint256) {\\n        return block.timestamp;\\n    }\\n\\n    /**\\n     * @dev Returns the current block number\\n     * @return The current block number\\n     */\\n    function _getBlockNumber() private view returns (uint256) {\\n        return block.number;\\n    }\\n}\\n\",\"keccak256\":\"0x57a2bbb9b8e02b1c0a5c0e305fef1328a22db56c3d4b148c362010a6e767243c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\",\"keccak256\":\"0x14de93ead464da249af31bea0e3bcfb62ec693bea3475fb4d90f055ac81dc5eb\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { PrimeStorageV1 } from \\\"../PrimeStorage.sol\\\";\\n\\n/**\\n * @title IPrime\\n * @author Venus\\n * @notice Interface for Prime Token\\n */\\ninterface IPrime {\\n    struct APRInfo {\\n        // supply APR of the user in BPS\\n        uint256 supplyAPR;\\n        // borrow APR of the user in BPS\\n        uint256 borrowAPR;\\n        // total score of the market\\n        uint256 totalScore;\\n        // score of the user\\n        uint256 userScore;\\n        // capped XVS balance of the user\\n        uint256 xvsBalanceForScore;\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    struct Capital {\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    /**\\n     * @notice Returns boosted pending interest accrued for a user for all markets\\n     * @param user the account for which to get the accrued interests\\n     * @return pendingRewards the number of underlying tokens accrued by the user for all markets\\n     */\\n    function getPendingRewards(address user) external returns (PrimeStorageV1.PendingReward[] memory pendingRewards);\\n\\n    /**\\n     * @notice Update total score of multiple users and market\\n     * @param users accounts for which we need to update score\\n     */\\n    function updateScores(address[] memory users) external;\\n\\n    /**\\n     * @notice Update value of alpha\\n     * @param _alphaNumerator numerator of alpha. If alpha is 0.5 then numerator is 1\\n     * @param _alphaDenominator denominator of alpha. If alpha is 0.5 then denominator is 2\\n     */\\n    function updateAlpha(uint128 _alphaNumerator, uint128 _alphaDenominator) external;\\n\\n    /**\\n     * @notice Update multipliers for a market\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier new supply multiplier for the market, scaled by 1e18\\n     * @param borrowMultiplier new borrow multiplier for the market, scaled by 1e18\\n     */\\n    function updateMultipliers(address market, uint256 supplyMultiplier, uint256 borrowMultiplier) external;\\n\\n    /**\\n     * @notice Add a market to prime program\\n     * @param comptroller address of the comptroller\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier the multiplier for supply cap. It should be converted to 1e18\\n     * @param borrowMultiplier the multiplier for borrow cap. It should be converted to 1e18\\n     */\\n    function addMarket(\\n        address comptroller,\\n        address market,\\n        uint256 supplyMultiplier,\\n        uint256 borrowMultiplier\\n    ) external;\\n\\n    /**\\n     * @notice Set limits for total tokens that can be minted\\n     * @param _irrevocableLimit total number of irrevocable tokens that can be minted\\n     * @param _revocableLimit total number of revocable tokens that can be minted\\n     */\\n    function setLimit(uint256 _irrevocableLimit, uint256 _revocableLimit) external;\\n\\n    /**\\n     * @notice Directly issue prime tokens to users\\n     * @param isIrrevocable are the tokens being issued\\n     * @param users list of address to issue tokens to\\n     */\\n    function issue(bool isIrrevocable, address[] calldata users) external;\\n\\n    /**\\n     * @notice Executed by XVSVault whenever user's XVSVault balance changes\\n     * @param user the account address whose balance was updated\\n     */\\n    function xvsUpdated(address user) external;\\n\\n    /**\\n     * @notice accrues interest and updates score for an user for a specific market\\n     * @param user the account address for which to accrue interest and update score\\n     * @param market the market for which to accrue interest and update score\\n     */\\n    function accrueInterestAndUpdateScore(address user, address market) external;\\n\\n    /**\\n     * @notice For claiming prime token when staking period is completed\\n     */\\n    function claim() external;\\n\\n    /**\\n     * @notice For burning any prime token\\n     * @param user the account address for which the prime token will be burned\\n     */\\n    function burn(address user) external;\\n\\n    /**\\n     * @notice To pause or unpause claiming of interest\\n     */\\n    function togglePause() external;\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken) external returns (uint256);\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @param user the user for which to claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Distributes income from market since last distribution\\n     * @param vToken the market for which to distribute the income\\n     */\\n    function accrueInterest(address vToken) external;\\n\\n    /**\\n     * @notice Returns boosted interest accrued for a user\\n     * @param vToken the market for which to fetch the accrued interest\\n     * @param user the account for which to get the accrued interest\\n     * @return interestAccrued the number of underlying tokens accrued by the user since the last accrual\\n     */\\n    function getInterestAccrued(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Retrieves an array of all available markets\\n     * @return an array of addresses representing all available markets\\n     */\\n    function getAllMarkets() external view returns (address[] memory);\\n\\n    /**\\n     * @notice fetch the numbers of seconds remaining for staking period to complete\\n     * @param user the account address for which we are checking the remaining time\\n     * @return timeRemaining the number of seconds the user needs to wait to claim prime token\\n     */\\n    function claimTimeRemaining(address user) external view returns (uint256);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for user for a given market\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function calculateAPR(address market, address user) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for estimated supply, borrow and XVS staked\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @param borrow hypothetical borrow amount\\n     * @param supply hypothetical supply amount\\n     * @param xvsStaked hypothetical staked XVS amount\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function estimateAPR(\\n        address market,\\n        address user,\\n        uint256 borrow,\\n        uint256 supply,\\n        uint256 xvsStaked\\n    ) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice the total income that's going to be distributed in a year to prime token holders\\n     * @param vToken the market for which to fetch the total income that's going to distributed in a year\\n     * @return amount the total income\\n     */\\n    function incomeDistributionYearly(address vToken) external view returns (uint256 amount);\\n\\n    /**\\n     * @notice Returns if user is a prime holder\\n     * @return isPrimeHolder true if user is a prime holder\\n     */\\n    function isUserPrimeHolder(address user) external view returns (bool);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param loopsLimit Number of loops limit\\n     */\\n    function setMaxLoopsLimit(uint256 loopsLimit) external;\\n\\n    /**\\n     * @notice Update staked at timestamp for multiple users\\n     * @param users accounts for which we need to update staked at timestamp\\n     * @param timestamps new staked at timestamp for the users\\n     */\\n    function setStakedAt(address[] calldata users, uint256[] calldata timestamps) external;\\n}\\n\",\"keccak256\":\"0xd112f60183416ad796093b4a83a80ddc1b8b655965f02ae55ca82e2a0c68f97d\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\n/**\\n * @title PrimeStorageV1\\n * @author Venus\\n * @notice Storage for Prime Token\\n */\\ncontract PrimeStorageV1 {\\n    struct Token {\\n        bool exists;\\n        bool isIrrevocable;\\n    }\\n\\n    struct Market {\\n        uint256 supplyMultiplier;\\n        uint256 borrowMultiplier;\\n        uint256 rewardIndex;\\n        uint256 sumOfMembersScore;\\n        bool exists;\\n    }\\n\\n    struct Interest {\\n        uint256 accrued;\\n        uint256 score;\\n        uint256 rewardIndex;\\n    }\\n\\n    struct PendingReward {\\n        address vToken;\\n        address rewardToken;\\n        uint256 amount;\\n    }\\n\\n    /// @notice Base unit for computations, usually used in scaling (multiplications, divisions)\\n    uint256 internal constant EXP_SCALE = 1e18;\\n\\n    /// @notice maximum BPS = 100%\\n    uint256 internal constant MAXIMUM_BPS = 1e4;\\n\\n    /// @notice Mapping to get prime token's metadata\\n    mapping(address => Token) public tokens;\\n\\n    /// @notice  Tracks total irrevocable tokens minted\\n    uint256 public totalIrrevocable;\\n\\n    /// @notice  Tracks total revocable tokens minted\\n    uint256 public totalRevocable;\\n\\n    /// @notice  Indicates maximum revocable tokens that can be minted\\n    uint256 public revocableLimit;\\n\\n    /// @notice  Indicates maximum irrevocable tokens that can be minted\\n    uint256 public irrevocableLimit;\\n\\n    /// @notice Tracks when prime token eligible users started staking for claiming prime token\\n    mapping(address => uint256) public stakedAt;\\n\\n    /// @notice vToken to market configuration\\n    mapping(address => Market) public markets;\\n\\n    /// @notice vToken to user to user index\\n    mapping(address => mapping(address => Interest)) public interests;\\n\\n    /// @notice A list of boosted markets\\n    address[] internal _allMarkets;\\n\\n    /// @notice numerator of alpha. Ex: if alpha is 0.5 then this will be 1\\n    uint128 public alphaNumerator;\\n\\n    /// @notice denominator of alpha. Ex: if alpha is 0.5 then this will be 2\\n    uint128 public alphaDenominator;\\n\\n    /// @notice address of XVS vault\\n    address public xvsVault;\\n\\n    /// @notice address of XVS vault reward token\\n    address public xvsVaultRewardToken;\\n\\n    /// @notice address of XVS vault pool id\\n    uint256 public xvsVaultPoolId;\\n\\n    /// @notice mapping to check if a account's score was updated in the round\\n    mapping(uint256 => mapping(address => bool)) public isScoreUpdated;\\n\\n    /// @notice unique id for next round\\n    uint256 public nextScoreUpdateRoundId;\\n\\n    /// @notice total number of accounts whose score needs to be updated\\n    uint256 public totalScoreUpdatesRequired;\\n\\n    /// @notice total number of accounts whose score is yet to be updated\\n    uint256 public pendingScoreUpdates;\\n\\n    /// @notice mapping used to find if an asset is part of prime markets\\n    mapping(address => address) public vTokenForAsset;\\n\\n    /// @notice Address of core pool comptroller contract\\n    address internal corePoolComptroller;\\n\\n    /// @notice unreleased income from PLP that's already distributed to prime holders\\n    /// @dev mapping of asset address => amount\\n    mapping(address => uint256) public unreleasedPLPIncome;\\n\\n    /// @notice The address of PLP contract\\n    address public primeLiquidityProvider;\\n\\n    /// @notice The address of ResilientOracle contract\\n    ResilientOracleInterface public oracle;\\n\\n    /// @notice The address of PoolRegistry contract\\n    address public poolRegistry;\\n\\n    /// @dev This empty reserved space is put in place to allow future versions to add new\\n    /// variables without shifting down storage in the inheritance chain.\\n    uint256[26] private __gap;\\n}\\n\",\"keccak256\":\"0x5285c875114db2ea2be0b81b65722d5761806217022db733323c4e03365a95e7\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[{"astId":414,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":417,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":2820,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":118,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"_owner","offset":0,"slot":"51","type":"t_address"},{"astId":238,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"__gap","offset":0,"slot":"52","type":"t_array(t_uint256)49_storage"},{"astId":11,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"_pendingOwner","offset":0,"slot":"101","type":"t_address"},{"astId":105,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"__gap","offset":0,"slot":"102","type":"t_array(t_uint256)49_storage"},{"astId":4895,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"_accessControlManager","offset":0,"slot":"151","type":"t_contract(IAccessControlManagerV8)5080"},{"astId":4900,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"__gap","offset":0,"slot":"152","type":"t_array(t_uint256)49_storage"},{"astId":10271,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"maxLoopsLimit","offset":0,"slot":"201","type":"t_uint256"},{"astId":10276,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"__gap","offset":0,"slot":"202","type":"t_array(t_uint256)49_storage"},{"astId":12351,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"rewardTokenSupplyState","offset":0,"slot":"251","type":"t_mapping(t_address,t_struct(RewardToken)12338_storage)"},{"astId":12358,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"rewardTokenSupplierIndex","offset":0,"slot":"252","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":12363,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"rewardTokenAccrued","offset":0,"slot":"253","type":"t_mapping(t_address,t_uint256)"},{"astId":12368,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"rewardTokenBorrowSpeeds","offset":0,"slot":"254","type":"t_mapping(t_address,t_uint256)"},{"astId":12373,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"rewardTokenSupplySpeeds","offset":0,"slot":"255","type":"t_mapping(t_address,t_uint256)"},{"astId":12379,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"rewardTokenBorrowState","offset":0,"slot":"256","type":"t_mapping(t_address,t_struct(RewardToken)12338_storage)"},{"astId":12384,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"rewardTokenContributorSpeeds","offset":0,"slot":"257","type":"t_mapping(t_address,t_uint256)"},{"astId":12389,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"lastContributorBlock","offset":0,"slot":"258","type":"t_mapping(t_address,t_uint256)"},{"astId":12396,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"rewardTokenBorrowerIndex","offset":0,"slot":"259","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":12399,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"comptroller","offset":0,"slot":"260","type":"t_contract(Comptroller)9130"},{"astId":12402,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"rewardToken","offset":0,"slot":"261","type":"t_contract(IERC20Upgradeable)1352"},{"astId":12408,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"rewardTokenSupplyStateTimeBased","offset":0,"slot":"262","type":"t_mapping(t_address,t_struct(TimeBasedRewardToken)12345_storage)"},{"astId":12414,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"rewardTokenBorrowStateTimeBased","offset":0,"slot":"263","type":"t_mapping(t_address,t_struct(TimeBasedRewardToken)12345_storage)"},{"astId":12419,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"__gap","offset":0,"slot":"264","type":"t_array(t_uint256)37_storage"},{"astId":16234,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"__gap","offset":0,"slot":"301","type":"t_array(t_uint256)48_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)37_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[37]","numberOfBytes":"1184"},"t_array(t_uint256)48_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[48]","numberOfBytes":"1536"},"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(Comptroller)9130":{"encoding":"inplace","label":"contract Comptroller","numberOfBytes":"20"},"t_contract(IAccessControlManagerV8)5080":{"encoding":"inplace","label":"contract IAccessControlManagerV8","numberOfBytes":"20"},"t_contract(IERC20Upgradeable)1352":{"encoding":"inplace","label":"contract IERC20Upgradeable","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(RewardToken)12338_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RewardsDistributorStorage.RewardToken)","numberOfBytes":"32","value":"t_struct(RewardToken)12338_storage"},"t_mapping(t_address,t_struct(TimeBasedRewardToken)12345_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RewardsDistributorStorage.TimeBasedRewardToken)","numberOfBytes":"32","value":"t_struct(TimeBasedRewardToken)12345_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_struct(RewardToken)12338_storage":{"encoding":"inplace","label":"struct RewardsDistributorStorage.RewardToken","members":[{"astId":12333,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"index","offset":0,"slot":"0","type":"t_uint224"},{"astId":12335,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"block","offset":28,"slot":"0","type":"t_uint32"},{"astId":12337,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"lastRewardingBlock","offset":0,"slot":"1","type":"t_uint32"}],"numberOfBytes":"64"},"t_struct(TimeBasedRewardToken)12345_storage":{"encoding":"inplace","label":"struct RewardsDistributorStorage.TimeBasedRewardToken","members":[{"astId":12340,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"index","offset":0,"slot":"0","type":"t_uint224"},{"astId":12342,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"timestamp","offset":0,"slot":"1","type":"t_uint256"},{"astId":12344,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol:RewardsDistributor","label":"lastRewardingTimestamp","offset":0,"slot":"2","type":"t_uint256"}],"numberOfBytes":"96"},"t_uint224":{"encoding":"inplace","label":"uint224","numberOfBytes":"28"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"errors":{"InvalidBlocksPerYear()":[{"notice":"Thrown when blocks per year is invalid"}],"InvalidTimeBasedConfiguration()":[{"notice":"Thrown when time based but blocks per year is provided"}],"MaxLoopsLimitExceeded(uint256,uint256)":[{"notice":"Thrown an error on maxLoopsLimit exceeds for any loop"}],"Unauthorized(address,address,string)":[{"notice":"Thrown when the action is prohibited by AccessControlManager"}]},"events":{"BorrowLastRewardingBlockTimestampUpdated(address,uint256)":{"notice":"Emitted when a reward token last rewarding timestamp for borrow is updated"},"BorrowLastRewardingBlockUpdated(address,uint32)":{"notice":"Emitted when a reward token last rewarding block for borrow is updated"},"ContributorRewardTokenSpeedUpdated(address,uint256)":{"notice":"Emitted when a new REWARD TOKEN speed is set for a contributor"},"ContributorRewardsUpdated(address,uint256)":{"notice":"Emitted when a reward for contributor is updated"},"DistributedBorrowerRewardToken(address,address,uint256,uint256,uint256)":{"notice":"Emitted when REWARD TOKEN is distributed to a borrower"},"DistributedSupplierRewardToken(address,address,uint256,uint256,uint256)":{"notice":"Emitted when REWARD TOKEN is distributed to a supplier"},"MarketInitialized(address)":{"notice":"Emitted when a market is initialized"},"MaxLoopsLimitUpdated(uint256,uint256)":{"notice":"Emitted when max loops limit is set"},"NewAccessControlManager(address,address)":{"notice":"Emitted when access control manager contract address is changed"},"RewardTokenBorrowIndexUpdated(address,(uint256))":{"notice":"Emitted when a reward token borrow index is updated"},"RewardTokenBorrowSpeedUpdated(address,uint256)":{"notice":"Emitted when a new borrow-side REWARD TOKEN speed is calculated for a market"},"RewardTokenGranted(address,uint256)":{"notice":"Emitted when REWARD TOKEN is granted by admin"},"RewardTokenSupplyIndexUpdated(address)":{"notice":"Emitted when a reward token supply index is updated"},"RewardTokenSupplySpeedUpdated(address,uint256)":{"notice":"Emitted when a new supply-side REWARD TOKEN speed is calculated for a market"},"SupplyLastRewardingBlockTimestampUpdated(address,uint256)":{"notice":"Emitted when a reward token last rewarding timestamp for supply is updated"},"SupplyLastRewardingBlockUpdated(address,uint32)":{"notice":"Emitted when a reward token last rewarding block for supply is updated"}},"kind":"user","methods":{"INITIAL_INDEX()":{"notice":"The initial REWARD TOKEN index for a market"},"accessControlManager()":{"notice":"Returns the address of the access control manager contract"},"blocksOrSecondsPerYear()":{"notice":"Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored"},"claimRewardToken(address)":{"notice":"Claim all the rewardToken accrued by holder in all markets"},"claimRewardToken(address,address[])":{"notice":"Claim all the rewardToken accrued by holder in the specified markets"},"distributeBorrowerRewardToken(address,address,(uint256))":{"notice":"Calculate reward token accrued by a borrower and possibly transfer it to them         Borrowers will begin to accrue after the first interaction with the protocol."},"grantRewardToken(address,uint256)":{"notice":"Transfer REWARD TOKEN to the recipient"},"initialize(address,address,uint256,address)":{"notice":"RewardsDistributor initializer"},"initializeMarket(address)":{"notice":"Initializes the market state for a specific vToken"},"isTimeBased()":{"notice":"Acknowledges if a contract is time based or not"},"lastContributorBlock(address)":{"notice":"Last slot (block or second) at which a contributor's REWARD TOKEN rewards have been allocated"},"rewardTokenAccrued(address)":{"notice":"The REWARD TOKEN accrued but not yet transferred to each user"},"rewardTokenBorrowSpeeds(address)":{"notice":"The rate at which rewardToken is distributed to the corresponding borrow market per slot (block or second)"},"rewardTokenBorrowState(address)":{"notice":"The REWARD TOKEN market borrow state for each market"},"rewardTokenBorrowStateTimeBased(address)":{"notice":"The REWARD TOKEN market borrow state for each market"},"rewardTokenBorrowerIndex(address,address)":{"notice":"The REWARD TOKEN borrow index for each market for each borrower as of the last time they accrued REWARD TOKEN"},"rewardTokenContributorSpeeds(address)":{"notice":"The portion of REWARD TOKEN that each contributor receives per slot (block or second)"},"rewardTokenSupplierIndex(address,address)":{"notice":"The REWARD TOKEN borrow index for each market for each supplier as of the last time they accrued REWARD TOKEN"},"rewardTokenSupplySpeeds(address)":{"notice":"The rate at which rewardToken is distributed to the corresponding supply market per slot (block or second)"},"rewardTokenSupplyState(address)":{"notice":"The REWARD TOKEN market supply state for each market"},"rewardTokenSupplyStateTimeBased(address)":{"notice":"The REWARD TOKEN market supply state for each market"},"setAccessControlManager(address)":{"notice":"Sets the address of AccessControlManager"},"setContributorRewardTokenSpeed(address,uint256)":{"notice":"Set REWARD TOKEN speed for a single contributor"},"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])":{"notice":"Set REWARD TOKEN last rewarding block timestamp for the specified markets, used when contract is time based"},"setLastRewardingBlocks(address[],uint32[],uint32[])":{"notice":"Set REWARD TOKEN last rewarding block for the specified markets, used when contract is block based"},"setMaxLoopsLimit(uint256)":{"notice":"Set the limit for the loops can iterate to avoid the DOS"},"setRewardTokenSpeeds(address[],uint256[],uint256[])":{"notice":"Set REWARD TOKEN borrow and supply speeds for the specified markets"},"updateContributorRewards(address)":{"notice":"Calculate additional accrued REWARD TOKEN for a contributor since last accrual"}},"notice":"Contract used to configure, track and distribute rewards to users based on their actions (borrows and supplies) in the protocol. Users can receive additional rewards through a `RewardsDistributor`. Each `RewardsDistributor` proxy is initialized with a specific reward token and `Comptroller`, which can then distribute the reward token to users that supply or borrow in the associated pool. Authorized users can set the reward token borrow and supply speeds for each market in the pool. This sets a fixed amount of reward token to be released each slot (block or second) for borrowers and suppliers, which is distributed based on a user’s percentage of the borrows or supplies respectively. The owner can also set up reward distributions to contributor addresses (distinct from suppliers and borrowers) by setting their contributor reward token speed, which similarly allocates a fixed amount of reward token per slot (block or second). The owner has the ability to transfer any amount of reward tokens held by the contract to any other address. Rewards are not distributed automatically and must be claimed by a user calling `claimRewardToken()`. Users should be aware that it is up to the owner and other centralized entities to ensure that the `RewardsDistributor` holds enough tokens to distribute the accumulated rewards of users and contributors.","version":1}}},"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol":{"RewardsDistributorStorage":{"abi":[{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastContributorBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20Upgradeable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardTokenAccrued","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardTokenBorrowSpeeds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardTokenBorrowState","outputs":[{"internalType":"uint224","name":"index","type":"uint224"},{"internalType":"uint32","name":"block","type":"uint32"},{"internalType":"uint32","name":"lastRewardingBlock","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardTokenBorrowStateTimeBased","outputs":[{"internalType":"uint224","name":"index","type":"uint224"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"lastRewardingTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"rewardTokenBorrowerIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardTokenContributorSpeeds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"rewardTokenSupplierIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardTokenSupplySpeeds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardTokenSupplyState","outputs":[{"internalType":"uint224","name":"index","type":"uint224"},{"internalType":"uint32","name":"block","type":"uint32"},{"internalType":"uint32","name":"lastRewardingBlock","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardTokenSupplyStateTimeBased","outputs":[{"internalType":"uint224","name":"index","type":"uint224"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"lastRewardingTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Venus","details":"Storage for RewardsDistributor","kind":"dev","methods":{},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"}},"title":"RewardsDistributorStorage","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080604052348015600f57600080fd5b5061048b8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063818149451161007157806381814945146101d75780638f693ec71461021f57806392a1823514610258578063bea6b8b81461029b578063efc75f24146102bb578063f7c618c1146102db57600080fd5b80631627ee89146100b95780632c427b57146100ef578063552c0971146101415780636dfd08ca1461016c57806374c4c1cc146101975780637c05a7c5146101b7575b600080fd5b6100d96100c7366004610330565b60026020526000908152604090205481565b6040516100e69190610361565b60405180910390f35b6101326100fd366004610330565b600560205260009081526040902080546001909101546001600160e01b0382169163ffffffff600160e01b9091048116911683565b6040516100e69392919061038a565b6100d961014f3660046103b2565b600160209081526000928352604080842090915290825290205481565b6100d961017a3660046103b2565b600860209081526000928352604080842090915290825290205481565b6100d96101a5366004610330565b60046020526000908152604090205481565b6100d96101c5366004610330565b60036020526000908152604090205481565b6102106101e5366004610330565b600b602052600090815260409020805460018201546002909201546001600160e01b03909116919083565b6040516100e6939291906103ef565b61021061022d366004610330565b600c602052600090815260409020805460018201546002909201546001600160e01b03909116919083565b610132610266366004610330565b600060208190529081526040902080546001909101546001600160e01b0382169163ffffffff600160e01b9091048116911683565b6100d96102a9366004610330565b60076020526000908152604090205481565b6100d96102c9366004610330565b60066020526000908152604090205481565b600a546102ee906001600160a01b031681565b6040516100e69190610447565b60006001600160a01b0382165b92915050565b610317816102fb565b811461032257600080fd5b50565b80356103088161030e565b60006020828403121561034557610345600080fd5b60006103518484610325565b949350505050565b805b82525050565b602081016103088284610359565b6001600160e01b03811661035b565b63ffffffff811661035b565b60608101610398828661036f565b6103a5602083018561037e565b610351604083018461037e565b600080604083850312156103c8576103c8600080fd5b60006103d48585610325565b92505060206103e585828601610325565b9150509250929050565b606081016103fd828661036f565b61040a6020830185610359565b6103516040830184610359565b60006001600160a01b038216610308565b600061030882610417565b600061030882610428565b61035b81610433565b60208101610308828461043e56fea2646970667358221220247d07c06aae82b54b270aeaedb8205a91e1600733468d68061e7ff635bdb21164736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48B DUP1 PUSH2 0x1F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x81814945 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x81814945 EQ PUSH2 0x1D7 JUMPI DUP1 PUSH4 0x8F693EC7 EQ PUSH2 0x21F JUMPI DUP1 PUSH4 0x92A18235 EQ PUSH2 0x258 JUMPI DUP1 PUSH4 0xBEA6B8B8 EQ PUSH2 0x29B JUMPI DUP1 PUSH4 0xEFC75F24 EQ PUSH2 0x2BB JUMPI DUP1 PUSH4 0xF7C618C1 EQ PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1627EE89 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x2C427B57 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x552C0971 EQ PUSH2 0x141 JUMPI DUP1 PUSH4 0x6DFD08CA EQ PUSH2 0x16C JUMPI DUP1 PUSH4 0x74C4C1CC EQ PUSH2 0x197 JUMPI DUP1 PUSH4 0x7C05A7C5 EQ PUSH2 0x1B7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD9 PUSH2 0xC7 CALLDATASIZE PUSH1 0x4 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE6 SWAP2 SWAP1 PUSH2 0x361 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x132 PUSH2 0xFD CALLDATASIZE PUSH1 0x4 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP3 AND SWAP2 PUSH4 0xFFFFFFFF PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 SWAP2 DIV DUP2 AND SWAP2 AND DUP4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE6 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x38A JUMP JUMPDEST PUSH2 0xD9 PUSH2 0x14F CALLDATASIZE PUSH1 0x4 PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xD9 PUSH2 0x17A CALLDATASIZE PUSH1 0x4 PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xD9 PUSH2 0x1A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xD9 PUSH2 0x1C5 CALLDATASIZE PUSH1 0x4 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x1E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x330 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP1 SWAP2 AND SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE6 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3EF JUMP JUMPDEST PUSH2 0x210 PUSH2 0x22D CALLDATASIZE PUSH1 0x4 PUSH2 0x330 JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP1 SWAP2 AND SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH2 0x132 PUSH2 0x266 CALLDATASIZE PUSH1 0x4 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 SWAP1 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP3 AND SWAP2 PUSH4 0xFFFFFFFF PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 SWAP2 DIV DUP2 AND SWAP2 AND DUP4 JUMP JUMPDEST PUSH2 0xD9 PUSH2 0x2A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xD9 PUSH2 0x2C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH2 0x2EE SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE6 SWAP2 SWAP1 PUSH2 0x447 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x317 DUP2 PUSH2 0x2FB JUMP JUMPDEST DUP2 EQ PUSH2 0x322 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x308 DUP2 PUSH2 0x30E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x345 JUMPI PUSH2 0x345 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x351 DUP5 DUP5 PUSH2 0x325 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x308 DUP3 DUP5 PUSH2 0x359 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP2 AND PUSH2 0x35B JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND PUSH2 0x35B JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x398 DUP3 DUP7 PUSH2 0x36F JUMP JUMPDEST PUSH2 0x3A5 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x37E JUMP JUMPDEST PUSH2 0x351 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x37E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3C8 JUMPI PUSH2 0x3C8 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3D4 DUP6 DUP6 PUSH2 0x325 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x3E5 DUP6 DUP3 DUP7 ADD PUSH2 0x325 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x3FD DUP3 DUP7 PUSH2 0x36F JUMP JUMPDEST PUSH2 0x40A PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x359 JUMP JUMPDEST PUSH2 0x351 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x359 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x308 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x308 DUP3 PUSH2 0x417 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x308 DUP3 PUSH2 0x428 JUMP JUMPDEST PUSH2 0x35B DUP2 PUSH2 0x433 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x308 DUP3 DUP5 PUSH2 0x43E JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 PUSH30 0x7C06AAE82B54B270AEAEDB8205A91E1600733468D68061E7FF635BDB211 PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ","sourceMap":"325:2918:37:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@lastContributorBlock_12389":{"entryPoint":null,"id":12389,"parameterSlots":0,"returnSlots":0},"@rewardTokenAccrued_12363":{"entryPoint":null,"id":12363,"parameterSlots":0,"returnSlots":0},"@rewardTokenBorrowSpeeds_12368":{"entryPoint":null,"id":12368,"parameterSlots":0,"returnSlots":0},"@rewardTokenBorrowStateTimeBased_12414":{"entryPoint":null,"id":12414,"parameterSlots":0,"returnSlots":0},"@rewardTokenBorrowState_12379":{"entryPoint":null,"id":12379,"parameterSlots":0,"returnSlots":0},"@rewardTokenBorrowerIndex_12396":{"entryPoint":null,"id":12396,"parameterSlots":0,"returnSlots":0},"@rewardTokenContributorSpeeds_12384":{"entryPoint":null,"id":12384,"parameterSlots":0,"returnSlots":0},"@rewardTokenSupplierIndex_12358":{"entryPoint":null,"id":12358,"parameterSlots":0,"returnSlots":0},"@rewardTokenSupplySpeeds_12373":{"entryPoint":null,"id":12373,"parameterSlots":0,"returnSlots":0},"@rewardTokenSupplyStateTimeBased_12408":{"entryPoint":null,"id":12408,"parameterSlots":0,"returnSlots":0},"@rewardTokenSupplyState_12351":{"entryPoint":null,"id":12351,"parameterSlots":0,"returnSlots":0},"@rewardToken_12402":{"entryPoint":null,"id":12402,"parameterSlots":0,"returnSlots":0},"abi_decode_t_address":{"entryPoint":805,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":816,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":946,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_t_contract$_IERC20Upgradeable_$1352_to_t_address_fromStack":{"entryPoint":1086,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_uint224_to_t_uint224_fromStack":{"entryPoint":879,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_uint256_to_t_uint256_fromStack":{"entryPoint":857,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_uint32_to_t_uint32_fromStack":{"entryPoint":894,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_contract$_IERC20Upgradeable_$1352__to_t_address__fromStack_reversed":{"entryPoint":1095,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint224_t_uint256_t_uint256__to_t_uint224_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":1007,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint224_t_uint32_t_uint32__to_t_uint224_t_uint32_t_uint32__fromStack_reversed":{"entryPoint":906,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":865,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"cleanup_t_address":{"entryPoint":763,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint224":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_IERC20Upgradeable_$1352_to_t_address":{"entryPoint":1075,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint160_to_t_address":{"entryPoint":1064,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint160_to_t_uint160":{"entryPoint":1047,"id":null,"parameterSlots":1,"returnSlots":1},"identity":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_t_address":{"entryPoint":782,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:4441:69","nodeType":"YulBlock","src":"0:4441:69","statements":[{"body":{"nativeSrc":"47:35:69","nodeType":"YulBlock","src":"47:35:69","statements":[{"nativeSrc":"57:19:69","nodeType":"YulAssignment","src":"57:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"73:2:69","nodeType":"YulLiteral","src":"73:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"67:5:69","nodeType":"YulIdentifier","src":"67:5:69"},"nativeSrc":"67:9:69","nodeType":"YulFunctionCall","src":"67:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"57:6:69","nodeType":"YulIdentifier","src":"57:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"7:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"40:6:69","nodeType":"YulTypedName","src":"40:6:69","type":""}],"src":"7:75:69"},{"body":{"nativeSrc":"177:28:69","nodeType":"YulBlock","src":"177:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"194:1:69","nodeType":"YulLiteral","src":"194:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"197:1:69","nodeType":"YulLiteral","src":"197:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"187:6:69","nodeType":"YulIdentifier","src":"187:6:69"},"nativeSrc":"187:12:69","nodeType":"YulFunctionCall","src":"187:12:69"},"nativeSrc":"187:12:69","nodeType":"YulExpressionStatement","src":"187:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"88:117:69","nodeType":"YulFunctionDefinition","src":"88:117:69"},{"body":{"nativeSrc":"300:28:69","nodeType":"YulBlock","src":"300:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"317:1:69","nodeType":"YulLiteral","src":"317:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"320:1:69","nodeType":"YulLiteral","src":"320:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},"nativeSrc":"310:12:69","nodeType":"YulFunctionCall","src":"310:12:69"},"nativeSrc":"310:12:69","nodeType":"YulExpressionStatement","src":"310:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"211:117:69","nodeType":"YulFunctionDefinition","src":"211:117:69"},{"body":{"nativeSrc":"379:81:69","nodeType":"YulBlock","src":"379:81:69","statements":[{"nativeSrc":"389:65:69","nodeType":"YulAssignment","src":"389:65:69","value":{"arguments":[{"name":"value","nativeSrc":"404:5:69","nodeType":"YulIdentifier","src":"404:5:69"},{"kind":"number","nativeSrc":"411:42:69","nodeType":"YulLiteral","src":"411:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"400:3:69","nodeType":"YulIdentifier","src":"400:3:69"},"nativeSrc":"400:54:69","nodeType":"YulFunctionCall","src":"400:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"389:7:69","nodeType":"YulIdentifier","src":"389:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"334:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"361:5:69","nodeType":"YulTypedName","src":"361:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"371:7:69","nodeType":"YulTypedName","src":"371:7:69","type":""}],"src":"334:126:69"},{"body":{"nativeSrc":"511:51:69","nodeType":"YulBlock","src":"511:51:69","statements":[{"nativeSrc":"521:35:69","nodeType":"YulAssignment","src":"521:35:69","value":{"arguments":[{"name":"value","nativeSrc":"550:5:69","nodeType":"YulIdentifier","src":"550:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"532:17:69","nodeType":"YulIdentifier","src":"532:17:69"},"nativeSrc":"532:24:69","nodeType":"YulFunctionCall","src":"532:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"521:7:69","nodeType":"YulIdentifier","src":"521:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"466:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"493:5:69","nodeType":"YulTypedName","src":"493:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"503:7:69","nodeType":"YulTypedName","src":"503:7:69","type":""}],"src":"466:96:69"},{"body":{"nativeSrc":"611:79:69","nodeType":"YulBlock","src":"611:79:69","statements":[{"body":{"nativeSrc":"668:16:69","nodeType":"YulBlock","src":"668:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"677:1:69","nodeType":"YulLiteral","src":"677:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"680:1:69","nodeType":"YulLiteral","src":"680:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"670:6:69","nodeType":"YulIdentifier","src":"670:6:69"},"nativeSrc":"670:12:69","nodeType":"YulFunctionCall","src":"670:12:69"},"nativeSrc":"670:12:69","nodeType":"YulExpressionStatement","src":"670:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"634:5:69","nodeType":"YulIdentifier","src":"634:5:69"},{"arguments":[{"name":"value","nativeSrc":"659:5:69","nodeType":"YulIdentifier","src":"659:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"641:17:69","nodeType":"YulIdentifier","src":"641:17:69"},"nativeSrc":"641:24:69","nodeType":"YulFunctionCall","src":"641:24:69"}],"functionName":{"name":"eq","nativeSrc":"631:2:69","nodeType":"YulIdentifier","src":"631:2:69"},"nativeSrc":"631:35:69","nodeType":"YulFunctionCall","src":"631:35:69"}],"functionName":{"name":"iszero","nativeSrc":"624:6:69","nodeType":"YulIdentifier","src":"624:6:69"},"nativeSrc":"624:43:69","nodeType":"YulFunctionCall","src":"624:43:69"},"nativeSrc":"621:63:69","nodeType":"YulIf","src":"621:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"568:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"604:5:69","nodeType":"YulTypedName","src":"604:5:69","type":""}],"src":"568:122:69"},{"body":{"nativeSrc":"748:87:69","nodeType":"YulBlock","src":"748:87:69","statements":[{"nativeSrc":"758:29:69","nodeType":"YulAssignment","src":"758:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"780:6:69","nodeType":"YulIdentifier","src":"780:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"767:12:69","nodeType":"YulIdentifier","src":"767:12:69"},"nativeSrc":"767:20:69","nodeType":"YulFunctionCall","src":"767:20:69"},"variableNames":[{"name":"value","nativeSrc":"758:5:69","nodeType":"YulIdentifier","src":"758:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"823:5:69","nodeType":"YulIdentifier","src":"823:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"796:26:69","nodeType":"YulIdentifier","src":"796:26:69"},"nativeSrc":"796:33:69","nodeType":"YulFunctionCall","src":"796:33:69"},"nativeSrc":"796:33:69","nodeType":"YulExpressionStatement","src":"796:33:69"}]},"name":"abi_decode_t_address","nativeSrc":"696:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"726:6:69","nodeType":"YulTypedName","src":"726:6:69","type":""},{"name":"end","nativeSrc":"734:3:69","nodeType":"YulTypedName","src":"734:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"742:5:69","nodeType":"YulTypedName","src":"742:5:69","type":""}],"src":"696:139:69"},{"body":{"nativeSrc":"907:263:69","nodeType":"YulBlock","src":"907:263:69","statements":[{"body":{"nativeSrc":"953:83:69","nodeType":"YulBlock","src":"953:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"955:77:69","nodeType":"YulIdentifier","src":"955:77:69"},"nativeSrc":"955:79:69","nodeType":"YulFunctionCall","src":"955:79:69"},"nativeSrc":"955:79:69","nodeType":"YulExpressionStatement","src":"955:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"928:7:69","nodeType":"YulIdentifier","src":"928:7:69"},{"name":"headStart","nativeSrc":"937:9:69","nodeType":"YulIdentifier","src":"937:9:69"}],"functionName":{"name":"sub","nativeSrc":"924:3:69","nodeType":"YulIdentifier","src":"924:3:69"},"nativeSrc":"924:23:69","nodeType":"YulFunctionCall","src":"924:23:69"},{"kind":"number","nativeSrc":"949:2:69","nodeType":"YulLiteral","src":"949:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"920:3:69","nodeType":"YulIdentifier","src":"920:3:69"},"nativeSrc":"920:32:69","nodeType":"YulFunctionCall","src":"920:32:69"},"nativeSrc":"917:119:69","nodeType":"YulIf","src":"917:119:69"},{"nativeSrc":"1046:117:69","nodeType":"YulBlock","src":"1046:117:69","statements":[{"nativeSrc":"1061:15:69","nodeType":"YulVariableDeclaration","src":"1061:15:69","value":{"kind":"number","nativeSrc":"1075:1:69","nodeType":"YulLiteral","src":"1075:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"1065:6:69","nodeType":"YulTypedName","src":"1065:6:69","type":""}]},{"nativeSrc":"1090:63:69","nodeType":"YulAssignment","src":"1090:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1125:9:69","nodeType":"YulIdentifier","src":"1125:9:69"},{"name":"offset","nativeSrc":"1136:6:69","nodeType":"YulIdentifier","src":"1136:6:69"}],"functionName":{"name":"add","nativeSrc":"1121:3:69","nodeType":"YulIdentifier","src":"1121:3:69"},"nativeSrc":"1121:22:69","nodeType":"YulFunctionCall","src":"1121:22:69"},{"name":"dataEnd","nativeSrc":"1145:7:69","nodeType":"YulIdentifier","src":"1145:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"1100:20:69","nodeType":"YulIdentifier","src":"1100:20:69"},"nativeSrc":"1100:53:69","nodeType":"YulFunctionCall","src":"1100:53:69"},"variableNames":[{"name":"value0","nativeSrc":"1090:6:69","nodeType":"YulIdentifier","src":"1090:6:69"}]}]}]},"name":"abi_decode_tuple_t_address","nativeSrc":"841:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"877:9:69","nodeType":"YulTypedName","src":"877:9:69","type":""},{"name":"dataEnd","nativeSrc":"888:7:69","nodeType":"YulTypedName","src":"888:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"900:6:69","nodeType":"YulTypedName","src":"900:6:69","type":""}],"src":"841:329:69"},{"body":{"nativeSrc":"1221:32:69","nodeType":"YulBlock","src":"1221:32:69","statements":[{"nativeSrc":"1231:16:69","nodeType":"YulAssignment","src":"1231:16:69","value":{"name":"value","nativeSrc":"1242:5:69","nodeType":"YulIdentifier","src":"1242:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"1231:7:69","nodeType":"YulIdentifier","src":"1231:7:69"}]}]},"name":"cleanup_t_uint256","nativeSrc":"1176:77:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1203:5:69","nodeType":"YulTypedName","src":"1203:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"1213:7:69","nodeType":"YulTypedName","src":"1213:7:69","type":""}],"src":"1176:77:69"},{"body":{"nativeSrc":"1324:53:69","nodeType":"YulBlock","src":"1324:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"1341:3:69","nodeType":"YulIdentifier","src":"1341:3:69"},{"arguments":[{"name":"value","nativeSrc":"1364:5:69","nodeType":"YulIdentifier","src":"1364:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"1346:17:69","nodeType":"YulIdentifier","src":"1346:17:69"},"nativeSrc":"1346:24:69","nodeType":"YulFunctionCall","src":"1346:24:69"}],"functionName":{"name":"mstore","nativeSrc":"1334:6:69","nodeType":"YulIdentifier","src":"1334:6:69"},"nativeSrc":"1334:37:69","nodeType":"YulFunctionCall","src":"1334:37:69"},"nativeSrc":"1334:37:69","nodeType":"YulExpressionStatement","src":"1334:37:69"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"1259:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1312:5:69","nodeType":"YulTypedName","src":"1312:5:69","type":""},{"name":"pos","nativeSrc":"1319:3:69","nodeType":"YulTypedName","src":"1319:3:69","type":""}],"src":"1259:118:69"},{"body":{"nativeSrc":"1481:124:69","nodeType":"YulBlock","src":"1481:124:69","statements":[{"nativeSrc":"1491:26:69","nodeType":"YulAssignment","src":"1491:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"1503:9:69","nodeType":"YulIdentifier","src":"1503:9:69"},{"kind":"number","nativeSrc":"1514:2:69","nodeType":"YulLiteral","src":"1514:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1499:3:69","nodeType":"YulIdentifier","src":"1499:3:69"},"nativeSrc":"1499:18:69","nodeType":"YulFunctionCall","src":"1499:18:69"},"variableNames":[{"name":"tail","nativeSrc":"1491:4:69","nodeType":"YulIdentifier","src":"1491:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"1571:6:69","nodeType":"YulIdentifier","src":"1571:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"1584:9:69","nodeType":"YulIdentifier","src":"1584:9:69"},{"kind":"number","nativeSrc":"1595:1:69","nodeType":"YulLiteral","src":"1595:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1580:3:69","nodeType":"YulIdentifier","src":"1580:3:69"},"nativeSrc":"1580:17:69","nodeType":"YulFunctionCall","src":"1580:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"1527:43:69","nodeType":"YulIdentifier","src":"1527:43:69"},"nativeSrc":"1527:71:69","nodeType":"YulFunctionCall","src":"1527:71:69"},"nativeSrc":"1527:71:69","nodeType":"YulExpressionStatement","src":"1527:71:69"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nativeSrc":"1383:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1453:9:69","nodeType":"YulTypedName","src":"1453:9:69","type":""},{"name":"value0","nativeSrc":"1465:6:69","nodeType":"YulTypedName","src":"1465:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1476:4:69","nodeType":"YulTypedName","src":"1476:4:69","type":""}],"src":"1383:222:69"},{"body":{"nativeSrc":"1656:97:69","nodeType":"YulBlock","src":"1656:97:69","statements":[{"nativeSrc":"1666:81:69","nodeType":"YulAssignment","src":"1666:81:69","value":{"arguments":[{"name":"value","nativeSrc":"1681:5:69","nodeType":"YulIdentifier","src":"1681:5:69"},{"kind":"number","nativeSrc":"1688:58:69","nodeType":"YulLiteral","src":"1688:58:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"1677:3:69","nodeType":"YulIdentifier","src":"1677:3:69"},"nativeSrc":"1677:70:69","nodeType":"YulFunctionCall","src":"1677:70:69"},"variableNames":[{"name":"cleaned","nativeSrc":"1666:7:69","nodeType":"YulIdentifier","src":"1666:7:69"}]}]},"name":"cleanup_t_uint224","nativeSrc":"1611:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1638:5:69","nodeType":"YulTypedName","src":"1638:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"1648:7:69","nodeType":"YulTypedName","src":"1648:7:69","type":""}],"src":"1611:142:69"},{"body":{"nativeSrc":"1824:53:69","nodeType":"YulBlock","src":"1824:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"1841:3:69","nodeType":"YulIdentifier","src":"1841:3:69"},{"arguments":[{"name":"value","nativeSrc":"1864:5:69","nodeType":"YulIdentifier","src":"1864:5:69"}],"functionName":{"name":"cleanup_t_uint224","nativeSrc":"1846:17:69","nodeType":"YulIdentifier","src":"1846:17:69"},"nativeSrc":"1846:24:69","nodeType":"YulFunctionCall","src":"1846:24:69"}],"functionName":{"name":"mstore","nativeSrc":"1834:6:69","nodeType":"YulIdentifier","src":"1834:6:69"},"nativeSrc":"1834:37:69","nodeType":"YulFunctionCall","src":"1834:37:69"},"nativeSrc":"1834:37:69","nodeType":"YulExpressionStatement","src":"1834:37:69"}]},"name":"abi_encode_t_uint224_to_t_uint224_fromStack","nativeSrc":"1759:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1812:5:69","nodeType":"YulTypedName","src":"1812:5:69","type":""},{"name":"pos","nativeSrc":"1819:3:69","nodeType":"YulTypedName","src":"1819:3:69","type":""}],"src":"1759:118:69"},{"body":{"nativeSrc":"1927:49:69","nodeType":"YulBlock","src":"1927:49:69","statements":[{"nativeSrc":"1937:33:69","nodeType":"YulAssignment","src":"1937:33:69","value":{"arguments":[{"name":"value","nativeSrc":"1952:5:69","nodeType":"YulIdentifier","src":"1952:5:69"},{"kind":"number","nativeSrc":"1959:10:69","nodeType":"YulLiteral","src":"1959:10:69","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nativeSrc":"1948:3:69","nodeType":"YulIdentifier","src":"1948:3:69"},"nativeSrc":"1948:22:69","nodeType":"YulFunctionCall","src":"1948:22:69"},"variableNames":[{"name":"cleaned","nativeSrc":"1937:7:69","nodeType":"YulIdentifier","src":"1937:7:69"}]}]},"name":"cleanup_t_uint32","nativeSrc":"1883:93:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1909:5:69","nodeType":"YulTypedName","src":"1909:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"1919:7:69","nodeType":"YulTypedName","src":"1919:7:69","type":""}],"src":"1883:93:69"},{"body":{"nativeSrc":"2045:52:69","nodeType":"YulBlock","src":"2045:52:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"2062:3:69","nodeType":"YulIdentifier","src":"2062:3:69"},{"arguments":[{"name":"value","nativeSrc":"2084:5:69","nodeType":"YulIdentifier","src":"2084:5:69"}],"functionName":{"name":"cleanup_t_uint32","nativeSrc":"2067:16:69","nodeType":"YulIdentifier","src":"2067:16:69"},"nativeSrc":"2067:23:69","nodeType":"YulFunctionCall","src":"2067:23:69"}],"functionName":{"name":"mstore","nativeSrc":"2055:6:69","nodeType":"YulIdentifier","src":"2055:6:69"},"nativeSrc":"2055:36:69","nodeType":"YulFunctionCall","src":"2055:36:69"},"nativeSrc":"2055:36:69","nodeType":"YulExpressionStatement","src":"2055:36:69"}]},"name":"abi_encode_t_uint32_to_t_uint32_fromStack","nativeSrc":"1982:115:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2033:5:69","nodeType":"YulTypedName","src":"2033:5:69","type":""},{"name":"pos","nativeSrc":"2040:3:69","nodeType":"YulTypedName","src":"2040:3:69","type":""}],"src":"1982:115:69"},{"body":{"nativeSrc":"2253:284:69","nodeType":"YulBlock","src":"2253:284:69","statements":[{"nativeSrc":"2263:26:69","nodeType":"YulAssignment","src":"2263:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"2275:9:69","nodeType":"YulIdentifier","src":"2275:9:69"},{"kind":"number","nativeSrc":"2286:2:69","nodeType":"YulLiteral","src":"2286:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"2271:3:69","nodeType":"YulIdentifier","src":"2271:3:69"},"nativeSrc":"2271:18:69","nodeType":"YulFunctionCall","src":"2271:18:69"},"variableNames":[{"name":"tail","nativeSrc":"2263:4:69","nodeType":"YulIdentifier","src":"2263:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"2343:6:69","nodeType":"YulIdentifier","src":"2343:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"2356:9:69","nodeType":"YulIdentifier","src":"2356:9:69"},{"kind":"number","nativeSrc":"2367:1:69","nodeType":"YulLiteral","src":"2367:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"2352:3:69","nodeType":"YulIdentifier","src":"2352:3:69"},"nativeSrc":"2352:17:69","nodeType":"YulFunctionCall","src":"2352:17:69"}],"functionName":{"name":"abi_encode_t_uint224_to_t_uint224_fromStack","nativeSrc":"2299:43:69","nodeType":"YulIdentifier","src":"2299:43:69"},"nativeSrc":"2299:71:69","nodeType":"YulFunctionCall","src":"2299:71:69"},"nativeSrc":"2299:71:69","nodeType":"YulExpressionStatement","src":"2299:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"2422:6:69","nodeType":"YulIdentifier","src":"2422:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"2435:9:69","nodeType":"YulIdentifier","src":"2435:9:69"},{"kind":"number","nativeSrc":"2446:2:69","nodeType":"YulLiteral","src":"2446:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2431:3:69","nodeType":"YulIdentifier","src":"2431:3:69"},"nativeSrc":"2431:18:69","nodeType":"YulFunctionCall","src":"2431:18:69"}],"functionName":{"name":"abi_encode_t_uint32_to_t_uint32_fromStack","nativeSrc":"2380:41:69","nodeType":"YulIdentifier","src":"2380:41:69"},"nativeSrc":"2380:70:69","nodeType":"YulFunctionCall","src":"2380:70:69"},"nativeSrc":"2380:70:69","nodeType":"YulExpressionStatement","src":"2380:70:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"2502:6:69","nodeType":"YulIdentifier","src":"2502:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"2515:9:69","nodeType":"YulIdentifier","src":"2515:9:69"},{"kind":"number","nativeSrc":"2526:2:69","nodeType":"YulLiteral","src":"2526:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"2511:3:69","nodeType":"YulIdentifier","src":"2511:3:69"},"nativeSrc":"2511:18:69","nodeType":"YulFunctionCall","src":"2511:18:69"}],"functionName":{"name":"abi_encode_t_uint32_to_t_uint32_fromStack","nativeSrc":"2460:41:69","nodeType":"YulIdentifier","src":"2460:41:69"},"nativeSrc":"2460:70:69","nodeType":"YulFunctionCall","src":"2460:70:69"},"nativeSrc":"2460:70:69","nodeType":"YulExpressionStatement","src":"2460:70:69"}]},"name":"abi_encode_tuple_t_uint224_t_uint32_t_uint32__to_t_uint224_t_uint32_t_uint32__fromStack_reversed","nativeSrc":"2103:434:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2209:9:69","nodeType":"YulTypedName","src":"2209:9:69","type":""},{"name":"value2","nativeSrc":"2221:6:69","nodeType":"YulTypedName","src":"2221:6:69","type":""},{"name":"value1","nativeSrc":"2229:6:69","nodeType":"YulTypedName","src":"2229:6:69","type":""},{"name":"value0","nativeSrc":"2237:6:69","nodeType":"YulTypedName","src":"2237:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2248:4:69","nodeType":"YulTypedName","src":"2248:4:69","type":""}],"src":"2103:434:69"},{"body":{"nativeSrc":"2626:391:69","nodeType":"YulBlock","src":"2626:391:69","statements":[{"body":{"nativeSrc":"2672:83:69","nodeType":"YulBlock","src":"2672:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"2674:77:69","nodeType":"YulIdentifier","src":"2674:77:69"},"nativeSrc":"2674:79:69","nodeType":"YulFunctionCall","src":"2674:79:69"},"nativeSrc":"2674:79:69","nodeType":"YulExpressionStatement","src":"2674:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"2647:7:69","nodeType":"YulIdentifier","src":"2647:7:69"},{"name":"headStart","nativeSrc":"2656:9:69","nodeType":"YulIdentifier","src":"2656:9:69"}],"functionName":{"name":"sub","nativeSrc":"2643:3:69","nodeType":"YulIdentifier","src":"2643:3:69"},"nativeSrc":"2643:23:69","nodeType":"YulFunctionCall","src":"2643:23:69"},{"kind":"number","nativeSrc":"2668:2:69","nodeType":"YulLiteral","src":"2668:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"2639:3:69","nodeType":"YulIdentifier","src":"2639:3:69"},"nativeSrc":"2639:32:69","nodeType":"YulFunctionCall","src":"2639:32:69"},"nativeSrc":"2636:119:69","nodeType":"YulIf","src":"2636:119:69"},{"nativeSrc":"2765:117:69","nodeType":"YulBlock","src":"2765:117:69","statements":[{"nativeSrc":"2780:15:69","nodeType":"YulVariableDeclaration","src":"2780:15:69","value":{"kind":"number","nativeSrc":"2794:1:69","nodeType":"YulLiteral","src":"2794:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"2784:6:69","nodeType":"YulTypedName","src":"2784:6:69","type":""}]},{"nativeSrc":"2809:63:69","nodeType":"YulAssignment","src":"2809:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2844:9:69","nodeType":"YulIdentifier","src":"2844:9:69"},{"name":"offset","nativeSrc":"2855:6:69","nodeType":"YulIdentifier","src":"2855:6:69"}],"functionName":{"name":"add","nativeSrc":"2840:3:69","nodeType":"YulIdentifier","src":"2840:3:69"},"nativeSrc":"2840:22:69","nodeType":"YulFunctionCall","src":"2840:22:69"},{"name":"dataEnd","nativeSrc":"2864:7:69","nodeType":"YulIdentifier","src":"2864:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"2819:20:69","nodeType":"YulIdentifier","src":"2819:20:69"},"nativeSrc":"2819:53:69","nodeType":"YulFunctionCall","src":"2819:53:69"},"variableNames":[{"name":"value0","nativeSrc":"2809:6:69","nodeType":"YulIdentifier","src":"2809:6:69"}]}]},{"nativeSrc":"2892:118:69","nodeType":"YulBlock","src":"2892:118:69","statements":[{"nativeSrc":"2907:16:69","nodeType":"YulVariableDeclaration","src":"2907:16:69","value":{"kind":"number","nativeSrc":"2921:2:69","nodeType":"YulLiteral","src":"2921:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"2911:6:69","nodeType":"YulTypedName","src":"2911:6:69","type":""}]},{"nativeSrc":"2937:63:69","nodeType":"YulAssignment","src":"2937:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2972:9:69","nodeType":"YulIdentifier","src":"2972:9:69"},{"name":"offset","nativeSrc":"2983:6:69","nodeType":"YulIdentifier","src":"2983:6:69"}],"functionName":{"name":"add","nativeSrc":"2968:3:69","nodeType":"YulIdentifier","src":"2968:3:69"},"nativeSrc":"2968:22:69","nodeType":"YulFunctionCall","src":"2968:22:69"},{"name":"dataEnd","nativeSrc":"2992:7:69","nodeType":"YulIdentifier","src":"2992:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"2947:20:69","nodeType":"YulIdentifier","src":"2947:20:69"},"nativeSrc":"2947:53:69","nodeType":"YulFunctionCall","src":"2947:53:69"},"variableNames":[{"name":"value1","nativeSrc":"2937:6:69","nodeType":"YulIdentifier","src":"2937:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_address","nativeSrc":"2543:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2588:9:69","nodeType":"YulTypedName","src":"2588:9:69","type":""},{"name":"dataEnd","nativeSrc":"2599:7:69","nodeType":"YulTypedName","src":"2599:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"2611:6:69","nodeType":"YulTypedName","src":"2611:6:69","type":""},{"name":"value1","nativeSrc":"2619:6:69","nodeType":"YulTypedName","src":"2619:6:69","type":""}],"src":"2543:474:69"},{"body":{"nativeSrc":"3177:288:69","nodeType":"YulBlock","src":"3177:288:69","statements":[{"nativeSrc":"3187:26:69","nodeType":"YulAssignment","src":"3187:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"3199:9:69","nodeType":"YulIdentifier","src":"3199:9:69"},{"kind":"number","nativeSrc":"3210:2:69","nodeType":"YulLiteral","src":"3210:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"3195:3:69","nodeType":"YulIdentifier","src":"3195:3:69"},"nativeSrc":"3195:18:69","nodeType":"YulFunctionCall","src":"3195:18:69"},"variableNames":[{"name":"tail","nativeSrc":"3187:4:69","nodeType":"YulIdentifier","src":"3187:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"3267:6:69","nodeType":"YulIdentifier","src":"3267:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"3280:9:69","nodeType":"YulIdentifier","src":"3280:9:69"},{"kind":"number","nativeSrc":"3291:1:69","nodeType":"YulLiteral","src":"3291:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"3276:3:69","nodeType":"YulIdentifier","src":"3276:3:69"},"nativeSrc":"3276:17:69","nodeType":"YulFunctionCall","src":"3276:17:69"}],"functionName":{"name":"abi_encode_t_uint224_to_t_uint224_fromStack","nativeSrc":"3223:43:69","nodeType":"YulIdentifier","src":"3223:43:69"},"nativeSrc":"3223:71:69","nodeType":"YulFunctionCall","src":"3223:71:69"},"nativeSrc":"3223:71:69","nodeType":"YulExpressionStatement","src":"3223:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"3348:6:69","nodeType":"YulIdentifier","src":"3348:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"3361:9:69","nodeType":"YulIdentifier","src":"3361:9:69"},{"kind":"number","nativeSrc":"3372:2:69","nodeType":"YulLiteral","src":"3372:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3357:3:69","nodeType":"YulIdentifier","src":"3357:3:69"},"nativeSrc":"3357:18:69","nodeType":"YulFunctionCall","src":"3357:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"3304:43:69","nodeType":"YulIdentifier","src":"3304:43:69"},"nativeSrc":"3304:72:69","nodeType":"YulFunctionCall","src":"3304:72:69"},"nativeSrc":"3304:72:69","nodeType":"YulExpressionStatement","src":"3304:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"3430:6:69","nodeType":"YulIdentifier","src":"3430:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"3443:9:69","nodeType":"YulIdentifier","src":"3443:9:69"},{"kind":"number","nativeSrc":"3454:2:69","nodeType":"YulLiteral","src":"3454:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"3439:3:69","nodeType":"YulIdentifier","src":"3439:3:69"},"nativeSrc":"3439:18:69","nodeType":"YulFunctionCall","src":"3439:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"3386:43:69","nodeType":"YulIdentifier","src":"3386:43:69"},"nativeSrc":"3386:72:69","nodeType":"YulFunctionCall","src":"3386:72:69"},"nativeSrc":"3386:72:69","nodeType":"YulExpressionStatement","src":"3386:72:69"}]},"name":"abi_encode_tuple_t_uint224_t_uint256_t_uint256__to_t_uint224_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"3023:442:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3133:9:69","nodeType":"YulTypedName","src":"3133:9:69","type":""},{"name":"value2","nativeSrc":"3145:6:69","nodeType":"YulTypedName","src":"3145:6:69","type":""},{"name":"value1","nativeSrc":"3153:6:69","nodeType":"YulTypedName","src":"3153:6:69","type":""},{"name":"value0","nativeSrc":"3161:6:69","nodeType":"YulTypedName","src":"3161:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3172:4:69","nodeType":"YulTypedName","src":"3172:4:69","type":""}],"src":"3023:442:69"},{"body":{"nativeSrc":"3503:28:69","nodeType":"YulBlock","src":"3503:28:69","statements":[{"nativeSrc":"3513:12:69","nodeType":"YulAssignment","src":"3513:12:69","value":{"name":"value","nativeSrc":"3520:5:69","nodeType":"YulIdentifier","src":"3520:5:69"},"variableNames":[{"name":"ret","nativeSrc":"3513:3:69","nodeType":"YulIdentifier","src":"3513:3:69"}]}]},"name":"identity","nativeSrc":"3471:60:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3489:5:69","nodeType":"YulTypedName","src":"3489:5:69","type":""}],"returnVariables":[{"name":"ret","nativeSrc":"3499:3:69","nodeType":"YulTypedName","src":"3499:3:69","type":""}],"src":"3471:60:69"},{"body":{"nativeSrc":"3597:82:69","nodeType":"YulBlock","src":"3597:82:69","statements":[{"nativeSrc":"3607:66:69","nodeType":"YulAssignment","src":"3607:66:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"3665:5:69","nodeType":"YulIdentifier","src":"3665:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"3647:17:69","nodeType":"YulIdentifier","src":"3647:17:69"},"nativeSrc":"3647:24:69","nodeType":"YulFunctionCall","src":"3647:24:69"}],"functionName":{"name":"identity","nativeSrc":"3638:8:69","nodeType":"YulIdentifier","src":"3638:8:69"},"nativeSrc":"3638:34:69","nodeType":"YulFunctionCall","src":"3638:34:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"3620:17:69","nodeType":"YulIdentifier","src":"3620:17:69"},"nativeSrc":"3620:53:69","nodeType":"YulFunctionCall","src":"3620:53:69"},"variableNames":[{"name":"converted","nativeSrc":"3607:9:69","nodeType":"YulIdentifier","src":"3607:9:69"}]}]},"name":"convert_t_uint160_to_t_uint160","nativeSrc":"3537:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3577:5:69","nodeType":"YulTypedName","src":"3577:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"3587:9:69","nodeType":"YulTypedName","src":"3587:9:69","type":""}],"src":"3537:142:69"},{"body":{"nativeSrc":"3745:66:69","nodeType":"YulBlock","src":"3745:66:69","statements":[{"nativeSrc":"3755:50:69","nodeType":"YulAssignment","src":"3755:50:69","value":{"arguments":[{"name":"value","nativeSrc":"3799:5:69","nodeType":"YulIdentifier","src":"3799:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_uint160","nativeSrc":"3768:30:69","nodeType":"YulIdentifier","src":"3768:30:69"},"nativeSrc":"3768:37:69","nodeType":"YulFunctionCall","src":"3768:37:69"},"variableNames":[{"name":"converted","nativeSrc":"3755:9:69","nodeType":"YulIdentifier","src":"3755:9:69"}]}]},"name":"convert_t_uint160_to_t_address","nativeSrc":"3685:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3725:5:69","nodeType":"YulTypedName","src":"3725:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"3735:9:69","nodeType":"YulTypedName","src":"3735:9:69","type":""}],"src":"3685:126:69"},{"body":{"nativeSrc":"3903:66:69","nodeType":"YulBlock","src":"3903:66:69","statements":[{"nativeSrc":"3913:50:69","nodeType":"YulAssignment","src":"3913:50:69","value":{"arguments":[{"name":"value","nativeSrc":"3957:5:69","nodeType":"YulIdentifier","src":"3957:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"3926:30:69","nodeType":"YulIdentifier","src":"3926:30:69"},"nativeSrc":"3926:37:69","nodeType":"YulFunctionCall","src":"3926:37:69"},"variableNames":[{"name":"converted","nativeSrc":"3913:9:69","nodeType":"YulIdentifier","src":"3913:9:69"}]}]},"name":"convert_t_contract$_IERC20Upgradeable_$1352_to_t_address","nativeSrc":"3817:152:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3883:5:69","nodeType":"YulTypedName","src":"3883:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"3893:9:69","nodeType":"YulTypedName","src":"3893:9:69","type":""}],"src":"3817:152:69"},{"body":{"nativeSrc":"4066:92:69","nodeType":"YulBlock","src":"4066:92:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"4083:3:69","nodeType":"YulIdentifier","src":"4083:3:69"},{"arguments":[{"name":"value","nativeSrc":"4145:5:69","nodeType":"YulIdentifier","src":"4145:5:69"}],"functionName":{"name":"convert_t_contract$_IERC20Upgradeable_$1352_to_t_address","nativeSrc":"4088:56:69","nodeType":"YulIdentifier","src":"4088:56:69"},"nativeSrc":"4088:63:69","nodeType":"YulFunctionCall","src":"4088:63:69"}],"functionName":{"name":"mstore","nativeSrc":"4076:6:69","nodeType":"YulIdentifier","src":"4076:6:69"},"nativeSrc":"4076:76:69","nodeType":"YulFunctionCall","src":"4076:76:69"},"nativeSrc":"4076:76:69","nodeType":"YulExpressionStatement","src":"4076:76:69"}]},"name":"abi_encode_t_contract$_IERC20Upgradeable_$1352_to_t_address_fromStack","nativeSrc":"3975:183:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4054:5:69","nodeType":"YulTypedName","src":"4054:5:69","type":""},{"name":"pos","nativeSrc":"4061:3:69","nodeType":"YulTypedName","src":"4061:3:69","type":""}],"src":"3975:183:69"},{"body":{"nativeSrc":"4288:150:69","nodeType":"YulBlock","src":"4288:150:69","statements":[{"nativeSrc":"4298:26:69","nodeType":"YulAssignment","src":"4298:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"4310:9:69","nodeType":"YulIdentifier","src":"4310:9:69"},{"kind":"number","nativeSrc":"4321:2:69","nodeType":"YulLiteral","src":"4321:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4306:3:69","nodeType":"YulIdentifier","src":"4306:3:69"},"nativeSrc":"4306:18:69","nodeType":"YulFunctionCall","src":"4306:18:69"},"variableNames":[{"name":"tail","nativeSrc":"4298:4:69","nodeType":"YulIdentifier","src":"4298:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"4404:6:69","nodeType":"YulIdentifier","src":"4404:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"4417:9:69","nodeType":"YulIdentifier","src":"4417:9:69"},{"kind":"number","nativeSrc":"4428:1:69","nodeType":"YulLiteral","src":"4428:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4413:3:69","nodeType":"YulIdentifier","src":"4413:3:69"},"nativeSrc":"4413:17:69","nodeType":"YulFunctionCall","src":"4413:17:69"}],"functionName":{"name":"abi_encode_t_contract$_IERC20Upgradeable_$1352_to_t_address_fromStack","nativeSrc":"4334:69:69","nodeType":"YulIdentifier","src":"4334:69:69"},"nativeSrc":"4334:97:69","nodeType":"YulFunctionCall","src":"4334:97:69"},"nativeSrc":"4334:97:69","nodeType":"YulExpressionStatement","src":"4334:97:69"}]},"name":"abi_encode_tuple_t_contract$_IERC20Upgradeable_$1352__to_t_address__fromStack_reversed","nativeSrc":"4164:274:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4260:9:69","nodeType":"YulTypedName","src":"4260:9:69","type":""},{"name":"value0","nativeSrc":"4272:6:69","nodeType":"YulTypedName","src":"4272:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4283:4:69","nodeType":"YulTypedName","src":"4283:4:69","type":""}],"src":"4164:274:69"}]},"contents":"{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint256(value))\n    }\n\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function cleanup_t_uint224(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function abi_encode_t_uint224_to_t_uint224_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint224(value))\n    }\n\n    function cleanup_t_uint32(value) -> cleaned {\n        cleaned := and(value, 0xffffffff)\n    }\n\n    function abi_encode_t_uint32_to_t_uint32_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint32(value))\n    }\n\n    function abi_encode_tuple_t_uint224_t_uint32_t_uint32__to_t_uint224_t_uint32_t_uint32__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_uint224_to_t_uint224_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint32_to_t_uint32_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint32_to_t_uint32_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_tuple_t_uint224_t_uint256_t_uint256__to_t_uint224_t_uint256_t_uint256__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_uint224_to_t_uint224_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function identity(value) -> ret {\n        ret := value\n    }\n\n    function convert_t_uint160_to_t_uint160(value) -> converted {\n        converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n    }\n\n    function convert_t_uint160_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_uint160(value)\n    }\n\n    function convert_t_contract$_IERC20Upgradeable_$1352_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_IERC20Upgradeable_$1352_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_IERC20Upgradeable_$1352_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_IERC20Upgradeable_$1352__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_IERC20Upgradeable_$1352_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100b45760003560e01c8063818149451161007157806381814945146101d75780638f693ec71461021f57806392a1823514610258578063bea6b8b81461029b578063efc75f24146102bb578063f7c618c1146102db57600080fd5b80631627ee89146100b95780632c427b57146100ef578063552c0971146101415780636dfd08ca1461016c57806374c4c1cc146101975780637c05a7c5146101b7575b600080fd5b6100d96100c7366004610330565b60026020526000908152604090205481565b6040516100e69190610361565b60405180910390f35b6101326100fd366004610330565b600560205260009081526040902080546001909101546001600160e01b0382169163ffffffff600160e01b9091048116911683565b6040516100e69392919061038a565b6100d961014f3660046103b2565b600160209081526000928352604080842090915290825290205481565b6100d961017a3660046103b2565b600860209081526000928352604080842090915290825290205481565b6100d96101a5366004610330565b60046020526000908152604090205481565b6100d96101c5366004610330565b60036020526000908152604090205481565b6102106101e5366004610330565b600b602052600090815260409020805460018201546002909201546001600160e01b03909116919083565b6040516100e6939291906103ef565b61021061022d366004610330565b600c602052600090815260409020805460018201546002909201546001600160e01b03909116919083565b610132610266366004610330565b600060208190529081526040902080546001909101546001600160e01b0382169163ffffffff600160e01b9091048116911683565b6100d96102a9366004610330565b60076020526000908152604090205481565b6100d96102c9366004610330565b60066020526000908152604090205481565b600a546102ee906001600160a01b031681565b6040516100e69190610447565b60006001600160a01b0382165b92915050565b610317816102fb565b811461032257600080fd5b50565b80356103088161030e565b60006020828403121561034557610345600080fd5b60006103518484610325565b949350505050565b805b82525050565b602081016103088284610359565b6001600160e01b03811661035b565b63ffffffff811661035b565b60608101610398828661036f565b6103a5602083018561037e565b610351604083018461037e565b600080604083850312156103c8576103c8600080fd5b60006103d48585610325565b92505060206103e585828601610325565b9150509250929050565b606081016103fd828661036f565b61040a6020830185610359565b6103516040830184610359565b60006001600160a01b038216610308565b600061030882610417565b600061030882610428565b61035b81610433565b60208101610308828461043e56fea2646970667358221220247d07c06aae82b54b270aeaedb8205a91e1600733468d68061e7ff635bdb21164736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x81814945 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x81814945 EQ PUSH2 0x1D7 JUMPI DUP1 PUSH4 0x8F693EC7 EQ PUSH2 0x21F JUMPI DUP1 PUSH4 0x92A18235 EQ PUSH2 0x258 JUMPI DUP1 PUSH4 0xBEA6B8B8 EQ PUSH2 0x29B JUMPI DUP1 PUSH4 0xEFC75F24 EQ PUSH2 0x2BB JUMPI DUP1 PUSH4 0xF7C618C1 EQ PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1627EE89 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x2C427B57 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x552C0971 EQ PUSH2 0x141 JUMPI DUP1 PUSH4 0x6DFD08CA EQ PUSH2 0x16C JUMPI DUP1 PUSH4 0x74C4C1CC EQ PUSH2 0x197 JUMPI DUP1 PUSH4 0x7C05A7C5 EQ PUSH2 0x1B7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD9 PUSH2 0xC7 CALLDATASIZE PUSH1 0x4 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE6 SWAP2 SWAP1 PUSH2 0x361 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x132 PUSH2 0xFD CALLDATASIZE PUSH1 0x4 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP3 AND SWAP2 PUSH4 0xFFFFFFFF PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 SWAP2 DIV DUP2 AND SWAP2 AND DUP4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE6 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x38A JUMP JUMPDEST PUSH2 0xD9 PUSH2 0x14F CALLDATASIZE PUSH1 0x4 PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xD9 PUSH2 0x17A CALLDATASIZE PUSH1 0x4 PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xD9 PUSH2 0x1A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xD9 PUSH2 0x1C5 CALLDATASIZE PUSH1 0x4 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x1E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x330 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP1 SWAP2 AND SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE6 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3EF JUMP JUMPDEST PUSH2 0x210 PUSH2 0x22D CALLDATASIZE PUSH1 0x4 PUSH2 0x330 JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP1 SWAP2 AND SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH2 0x132 PUSH2 0x266 CALLDATASIZE PUSH1 0x4 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 SWAP1 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP3 AND SWAP2 PUSH4 0xFFFFFFFF PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 SWAP2 DIV DUP2 AND SWAP2 AND DUP4 JUMP JUMPDEST PUSH2 0xD9 PUSH2 0x2A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xD9 PUSH2 0x2C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH2 0x2EE SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE6 SWAP2 SWAP1 PUSH2 0x447 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x317 DUP2 PUSH2 0x2FB JUMP JUMPDEST DUP2 EQ PUSH2 0x322 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x308 DUP2 PUSH2 0x30E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x345 JUMPI PUSH2 0x345 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x351 DUP5 DUP5 PUSH2 0x325 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x308 DUP3 DUP5 PUSH2 0x359 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP2 AND PUSH2 0x35B JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND PUSH2 0x35B JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x398 DUP3 DUP7 PUSH2 0x36F JUMP JUMPDEST PUSH2 0x3A5 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x37E JUMP JUMPDEST PUSH2 0x351 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x37E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3C8 JUMPI PUSH2 0x3C8 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3D4 DUP6 DUP6 PUSH2 0x325 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x3E5 DUP6 DUP3 DUP7 ADD PUSH2 0x325 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x3FD DUP3 DUP7 PUSH2 0x36F JUMP JUMPDEST PUSH2 0x40A PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x359 JUMP JUMPDEST PUSH2 0x351 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x359 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x308 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x308 DUP3 PUSH2 0x417 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x308 DUP3 PUSH2 0x428 JUMP JUMPDEST PUSH2 0x35B DUP2 PUSH2 0x433 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x308 DUP3 DUP5 PUSH2 0x43E JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 PUSH30 0x7C06AAE82B54B270AEAEDB8205A91E1600733468D68061E7FF635BDB211 PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ","sourceMap":"325:2918:37:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1436:53;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;1941:61;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1941:61:37;;;;-1:-1:-1;;;1941:61:37;;;;;;;;;;;;;;;;;;:::i;1272:79::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2479;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1807:58;;;;;;:::i;:::-;;;;;;;;;;;;;;1619;;;;;;:::i;:::-;;;;;;;;;;;;;;2716:79;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2716:79:37;;;;;;;;;;;;;;;;:::i;2871:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2871:79:37;;;;;;;1078:61;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1078:61:37;;;;-1:-1:-1;;;1078:61:37;;;;;;;;;2291:55;;;;;;:::i;:::-;;;;;;;;;;;;;;2111:63;;;;;;:::i;:::-;;;;;;;;;;;;;;2604:36;;;;;-1:-1:-1;;;;;2604:36:37;;;;;;;;;;:::i;466:96:69:-;503:7;-1:-1:-1;;;;;400:54:69;;532:24;521:35;466:96;-1:-1:-1;;466:96:69:o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;767:20;;796:33;767:20;796:33;:::i;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;325:2918:37;;;955:79:69;1075:1;1100:53;1145:7;1125:9;1100:53;:::i;:::-;1090:63;841:329;-1:-1:-1;;;;841:329:69:o;1259:118::-;1364:5;1346:24;1341:3;1334:37;1259:118;;:::o;1383:222::-;1514:2;1499:18;;1527:71;1503:9;1571:6;1527:71;:::i;1759:118::-;-1:-1:-1;;;;;1677:70:69;;1846:24;1611:142;1982:115;1959:10;1948:22;;2067:23;1883:93;2103:434;2286:2;2271:18;;2299:71;2275:9;2343:6;2299:71;:::i;:::-;2380:70;2446:2;2435:9;2431:18;2422:6;2380:70;:::i;:::-;2460;2526:2;2515:9;2511:18;2502:6;2460:70;:::i;2543:474::-;2611:6;2619;2668:2;2656:9;2647:7;2643:23;2639:32;2636:119;;;2674:79;325:2918:37;;;2674:79:69;2794:1;2819:53;2864:7;2844:9;2819:53;:::i;:::-;2809:63;;2765:117;2921:2;2947:53;2992:7;2983:6;2972:9;2968:22;2947:53;:::i;:::-;2937:63;;2892:118;2543:474;;;;;:::o;3023:442::-;3210:2;3195:18;;3223:71;3199:9;3267:6;3223:71;:::i;:::-;3304:72;3372:2;3361:9;3357:18;3348:6;3304:72;:::i;:::-;3386;3454:2;3443:9;3439:18;3430:6;3386:72;:::i;3537:142::-;3587:9;-1:-1:-1;;;;;400:54:69;;3620:53;334:126;3685;3735:9;3768:37;3799:5;3768:37;:::i;3817:152::-;3893:9;3926:37;3957:5;3926:37;:::i;3975:183::-;4088:63;4145:5;4088:63;:::i;4164:274::-;4321:2;4306:18;;4334:97;4310:9;4404:6;4334:97;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"232600","executionCost":"275","totalCost":"232875"},"external":{"lastContributorBlock(address)":"infinite","rewardToken()":"infinite","rewardTokenAccrued(address)":"infinite","rewardTokenBorrowSpeeds(address)":"infinite","rewardTokenBorrowState(address)":"infinite","rewardTokenBorrowStateTimeBased(address)":"infinite","rewardTokenBorrowerIndex(address,address)":"infinite","rewardTokenContributorSpeeds(address)":"infinite","rewardTokenSupplierIndex(address,address)":"infinite","rewardTokenSupplySpeeds(address)":"infinite","rewardTokenSupplyState(address)":"infinite","rewardTokenSupplyStateTimeBased(address)":"infinite"}},"methodIdentifiers":{"lastContributorBlock(address)":"bea6b8b8","rewardToken()":"f7c618c1","rewardTokenAccrued(address)":"1627ee89","rewardTokenBorrowSpeeds(address)":"7c05a7c5","rewardTokenBorrowState(address)":"2c427b57","rewardTokenBorrowStateTimeBased(address)":"8f693ec7","rewardTokenBorrowerIndex(address,address)":"6dfd08ca","rewardTokenContributorSpeeds(address)":"efc75f24","rewardTokenSupplierIndex(address,address)":"552c0971","rewardTokenSupplySpeeds(address)":"74c4c1cc","rewardTokenSupplyState(address)":"92a18235","rewardTokenSupplyStateTimeBased(address)":"81814945"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"lastContributorBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardToken\",\"outputs\":[{\"internalType\":\"contract IERC20Upgradeable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenAccrued\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenBorrowSpeeds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenBorrowState\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"index\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"block\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"lastRewardingBlock\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenBorrowStateTimeBased\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"index\",\"type\":\"uint224\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastRewardingTimestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenBorrowerIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenContributorSpeeds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenSupplierIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenSupplySpeeds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenSupplyState\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"index\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"block\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"lastRewardingBlock\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenSupplyStateTimeBased\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"index\",\"type\":\"uint224\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastRewardingTimestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"details\":\"Storage for RewardsDistributor\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"}},\"title\":\"RewardsDistributorStorage\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"lastContributorBlock(address)\":{\"notice\":\"Last slot (block or second) at which a contributor's REWARD TOKEN rewards have been allocated\"},\"rewardTokenAccrued(address)\":{\"notice\":\"The REWARD TOKEN accrued but not yet transferred to each user\"},\"rewardTokenBorrowSpeeds(address)\":{\"notice\":\"The rate at which rewardToken is distributed to the corresponding borrow market per slot (block or second)\"},\"rewardTokenBorrowState(address)\":{\"notice\":\"The REWARD TOKEN market borrow state for each market\"},\"rewardTokenBorrowStateTimeBased(address)\":{\"notice\":\"The REWARD TOKEN market borrow state for each market\"},\"rewardTokenBorrowerIndex(address,address)\":{\"notice\":\"The REWARD TOKEN borrow index for each market for each borrower as of the last time they accrued REWARD TOKEN\"},\"rewardTokenContributorSpeeds(address)\":{\"notice\":\"The portion of REWARD TOKEN that each contributor receives per slot (block or second)\"},\"rewardTokenSupplierIndex(address,address)\":{\"notice\":\"The REWARD TOKEN borrow index for each market for each supplier as of the last time they accrued REWARD TOKEN\"},\"rewardTokenSupplySpeeds(address)\":{\"notice\":\"The rate at which rewardToken is distributed to the corresponding supply market per slot (block or second)\"},\"rewardTokenSupplyState(address)\":{\"notice\":\"The REWARD TOKEN market supply state for each market\"},\"rewardTokenSupplyStateTimeBased(address)\":{\"notice\":\"The REWARD TOKEN market supply state for each market\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol\":\"RewardsDistributorStorage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./OwnableUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership} and {acceptOwnership}.\\n *\\n * This module is used through inheritance. It will make available all functions\\n * from parent (Ownable).\\n */\\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\\n    address private _pendingOwner;\\n\\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\\n\\n    function __Ownable2Step_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable2Step_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Returns the address of the pending owner.\\n     */\\n    function pendingOwner() public view virtual returns (address) {\\n        return _pendingOwner;\\n    }\\n\\n    /**\\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\\n        _pendingOwner = newOwner;\\n        emit OwnershipTransferStarted(owner(), newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual override {\\n        delete _pendingOwner;\\n        super._transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev The new owner accepts the ownership transfer.\\n     */\\n    function acceptOwnership() public virtual {\\n        address sender = _msgSender();\\n        require(pendingOwner() == sender, \\\"Ownable2Step: caller is not the new owner\\\");\\n        _transferOwnership(sender);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x9140dabc466abab21b48b72dbda26736b1183a310d0e677d3719d201df026510\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * ==== Security Considerations\\n *\\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\\n * generally recommended is:\\n *\\n * ```solidity\\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\\n *     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\\n *     doThing(..., value);\\n * }\\n *\\n * function doThing(..., uint256 value) public {\\n *     token.safeTransferFrom(msg.sender, address(this), value);\\n *     ...\\n * }\\n * ```\\n *\\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\\n * {SafeERC20-safeTransferFrom}).\\n *\\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\\n * contracts should have entry points that don't rely on permit.\\n */\\ninterface IERC20PermitUpgradeable {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     *\\n     * CAUTION: See Security Considerations above.\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x07e881de3b9f6d2c07909f193f24b96c7fe4ea60013260f3f25aecd8bab3c2f8\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\nimport \\\"../extensions/IERC20PermitUpgradeable.sol\\\";\\nimport \\\"../../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20Upgradeable {\\n    using AddressUpgradeable for address;\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransfer(IERC20Upgradeable token, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    /**\\n     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeIncreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        uint256 oldAllowance = token.allowance(address(this), spender);\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));\\n    }\\n\\n    /**\\n     * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeDecreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));\\n        }\\n    }\\n\\n    /**\\n     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n     * to be set to zero before setting it to a non-zero value, such as USDT.\\n     */\\n    function forceApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);\\n\\n        if (!_callOptionalReturnBool(token, approvalCall)) {\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));\\n            _callOptionalReturn(token, approvalCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.\\n     * Revert on invalid signature.\\n     */\\n    function safePermit(\\n        IERC20PermitUpgradeable token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20Upgradeable token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        require(returndata.length == 0 || abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     *\\n     * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\\n     */\\n    function _callOptionalReturnBool(IERC20Upgradeable token, bytes memory data) private returns (bool) {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\\n        // and not revert is the subcall reverts.\\n\\n        (bool success, bytes memory returndata) = address(token).call(data);\\n        return\\n            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && AddressUpgradeable.isContract(address(token));\\n    }\\n}\\n\",\"keccak256\":\"0x23b997be73d3dd46885262704f0f8cfc7273fdadfe303d37969a9561373972b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n    /**\\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n     *\\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n     * {RoleAdminChanged} not being emitted signaling this.\\n     *\\n     * _Available since v3.1._\\n     */\\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n    /**\\n     * @dev Emitted when `account` is granted `role`.\\n     *\\n     * `sender` is the account that originated the contract call, an admin role\\n     * bearer except when using {AccessControl-_setupRole}.\\n     */\\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Emitted when `account` is revoked `role`.\\n     *\\n     * `sender` is the account that originated the contract call:\\n     *   - if using `revokeRole`, it is the admin role bearer\\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n     */\\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Returns `true` if `account` has been granted `role`.\\n     */\\n    function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n    /**\\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\\n     * {revokeRole}.\\n     *\\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n     */\\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n    /**\\n     * @dev Grants `role` to `account`.\\n     *\\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function grantRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from `account`.\\n     *\\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function revokeRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from the calling account.\\n     *\\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n     * purpose is to provide a mechanism for accounts to lose their privileges\\n     * if they are compromised (such as when a trusted device is misplaced).\\n     *\\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must be `account`.\\n     */\\n    function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\n\\nimport \\\"./IAccessControlManagerV8.sol\\\";\\n\\n/**\\n * @title AccessControlledV8\\n * @author Venus\\n * @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\\n * to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\\n */\\nabstract contract AccessControlledV8 is Initializable, Ownable2StepUpgradeable {\\n    /// @notice Access control manager contract\\n    IAccessControlManagerV8 internal _accessControlManager;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when access control manager contract address is changed\\n    event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager);\\n\\n    /// @notice Thrown when the action is prohibited by AccessControlManager\\n    error Unauthorized(address sender, address calledContract, string methodSignature);\\n\\n    function __AccessControlled_init(address accessControlManager_) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n    }\\n\\n    function __AccessControlled_init_unchained(address accessControlManager_) internal onlyInitializing {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Sets the address of AccessControlManager\\n     * @dev Admin function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     * @custom:event Emits NewAccessControlManager event\\n     * @custom:access Only Governance\\n     */\\n    function setAccessControlManager(address accessControlManager_) external onlyOwner {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Returns the address of the access control manager contract\\n     */\\n    function accessControlManager() external view returns (IAccessControlManagerV8) {\\n        return _accessControlManager;\\n    }\\n\\n    /**\\n     * @dev Internal function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     */\\n    function _setAccessControlManager(address accessControlManager_) internal {\\n        require(address(accessControlManager_) != address(0), \\\"invalid acess control manager address\\\");\\n        address oldAccessControlManager = address(_accessControlManager);\\n        _accessControlManager = IAccessControlManagerV8(accessControlManager_);\\n        emit NewAccessControlManager(oldAccessControlManager, accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Reverts if the call is not allowed by AccessControlManager\\n     * @param signature Method signature\\n     */\\n    function _checkAccessAllowed(string memory signature) internal view {\\n        bool isAllowedToCall = _accessControlManager.isAllowedToCall(msg.sender, signature);\\n\\n        if (!isAllowedToCall) {\\n            revert Unauthorized(msg.sender, address(this), signature);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe0fd441c84ac907cabc88db69ef04f6d7532d770c7e6a1dfe6e7d6305debb49\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport \\\"@openzeppelin/contracts/access/IAccessControl.sol\\\";\\n\\n/**\\n * @title IAccessControlManagerV8\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\\n */\\ninterface IAccessControlManagerV8 is IAccessControl {\\n    function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n    function revokeCallPermission(\\n        address contractAddress,\\n        string calldata functionSig,\\n        address accountToRevoke\\n    ) external;\\n\\n    function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n    function hasPermission(\\n        address account,\\n        address contractAddress,\\n        string calldata functionSig\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xaa29b098440d0b3a131c5ecdf25ce548790c1b5ac7bf9b5c0264b6af6f7a1e0b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Comptroller.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\n\\nimport { ComptrollerInterface, Action } from \\\"./ComptrollerInterface.sol\\\";\\nimport { ComptrollerStorage } from \\\"./ComptrollerStorage.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"./MaxLoopsLimitHelper.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title Comptroller\\n * @author Venus\\n * @notice The Comptroller is designed to provide checks for all minting, redeeming, transferring, borrowing, lending, repaying, liquidating,\\n * and seizing done by the `vToken` contract. Each pool has one `Comptroller` checking these interactions across markets. When a user interacts\\n * with a given market by one of these main actions, a call is made to a corresponding hook in the associated `Comptroller`, which either allows\\n * or reverts the transaction. These hooks also update supply and borrow rewards as they are called. The comptroller holds the logic for assessing\\n * liquidity snapshots of an account via the collateral factor and liquidation threshold. This check determines the collateral needed for a borrow,\\n * as well as how much of a borrow may be liquidated. A user may borrow a portion of their collateral with the maximum amount determined by the\\n * markets collateral factor. However, if their borrowed amount exceeds an amount calculated using the market\\u2019s corresponding liquidation threshold,\\n * the borrow is eligible for liquidation.\\n *\\n * The `Comptroller` also includes two functions `liquidateAccount()` and `healAccount()`, which are meant to handle accounts that do not exceed\\n * the `minLiquidatableCollateral` for the `Comptroller`:\\n *\\n * - `healAccount()`: This function is called to seize all of a given user\\u2019s collateral, requiring the `msg.sender` repay a certain percentage\\n * of the debt calculated by `collateral/(borrows*liquidationIncentive)`. The function can only be called if the calculated percentage does not exceed\\n * 100%, because otherwise no `badDebt` would be created and `liquidateAccount()` should be used instead. The difference in the actual amount of debt\\n * and debt paid off is recorded as `badDebt` for each market, which can then be auctioned off for the risk reserves of the associated pool.\\n * - `liquidateAccount()`: This function can only be called if the collateral seized will cover all borrows of an account, as well as the liquidation\\n * incentive. Otherwise, the pool will incur bad debt, in which case the function `healAccount()` should be used instead. This function skips the logic\\n * verifying that the repay amount does not exceed the close factor.\\n */\\ncontract Comptroller is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    ComptrollerStorage,\\n    ComptrollerInterface,\\n    ExponentialNoError,\\n    MaxLoopsLimitHelper\\n{\\n    // PoolRegistry, immutable to save on gas\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    address public immutable poolRegistry;\\n\\n    /// @notice Emitted when an account enters a market\\n    event MarketEntered(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when an account exits a market\\n    event MarketExited(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when close factor is changed by admin\\n    event NewCloseFactor(uint256 oldCloseFactorMantissa, uint256 newCloseFactorMantissa);\\n\\n    /// @notice Emitted when a collateral factor is changed by admin\\n    event NewCollateralFactor(VToken vToken, uint256 oldCollateralFactorMantissa, uint256 newCollateralFactorMantissa);\\n\\n    /// @notice Emitted when liquidation threshold is changed by admin\\n    event NewLiquidationThreshold(\\n        VToken vToken,\\n        uint256 oldLiquidationThresholdMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    );\\n\\n    /// @notice Emitted when liquidation incentive is changed by admin\\n    event NewLiquidationIncentive(uint256 oldLiquidationIncentiveMantissa, uint256 newLiquidationIncentiveMantissa);\\n\\n    /// @notice Emitted when price oracle is changed\\n    event NewPriceOracle(ResilientOracleInterface oldPriceOracle, ResilientOracleInterface newPriceOracle);\\n\\n    /// @notice Emitted when an action is paused on a market\\n    event ActionPausedMarket(VToken vToken, Action action, bool pauseState);\\n\\n    /// @notice Emitted when borrow cap for a vToken is changed\\n    event NewBorrowCap(VToken indexed vToken, uint256 newBorrowCap);\\n\\n    /// @notice Emitted when the collateral threshold (in USD) for non-batch liquidations is changed\\n    event NewMinLiquidatableCollateral(uint256 oldMinLiquidatableCollateral, uint256 newMinLiquidatableCollateral);\\n\\n    /// @notice Emitted when supply cap for a vToken is changed\\n    event NewSupplyCap(VToken indexed vToken, uint256 newSupplyCap);\\n\\n    /// @notice Emitted when a rewards distributor is added\\n    event NewRewardsDistributor(address indexed rewardsDistributor, address indexed rewardToken);\\n\\n    /// @notice Emitted when a market is supported\\n    event MarketSupported(VToken vToken);\\n\\n    /// @notice Emitted when prime token contract address is changed\\n    event NewPrimeToken(IPrime oldPrimeToken, IPrime newPrimeToken);\\n\\n    /// @notice Emitted when forced liquidation is enabled or disabled for a market\\n    event IsForcedLiquidationEnabledUpdated(address indexed vToken, bool enable);\\n\\n    /// @notice Emitted when a market is unlisted\\n    event MarketUnlisted(address indexed vToken);\\n    /// @notice Emitted when the borrowing or redeeming delegate rights are updated for an account\\n    event DelegateUpdated(address indexed approver, address indexed delegate, bool approved);\\n\\n    /// @notice Thrown when collateral factor exceeds the upper bound\\n    error InvalidCollateralFactor();\\n\\n    /// @notice Thrown when liquidation threshold exceeds the collateral factor\\n    error InvalidLiquidationThreshold();\\n\\n    /// @notice Thrown when the action is only available to specific sender, but the real sender was different\\n    error UnexpectedSender(address expectedSender, address actualSender);\\n\\n    /// @notice Thrown when the oracle returns an invalid price for some asset\\n    error PriceError(address vToken);\\n\\n    /// @notice Thrown if VToken unexpectedly returned a nonzero error code while trying to get account snapshot\\n    error SnapshotError(address vToken, address user);\\n\\n    /// @notice Thrown when the market is not listed\\n    error MarketNotListed(address market);\\n\\n    /// @notice Thrown when a market has an unexpected comptroller\\n    error ComptrollerMismatch();\\n\\n    /// @notice Thrown when user is not member of market\\n    error MarketNotCollateral(address vToken, address user);\\n\\n    /// @notice Thrown when borrow action is not paused\\n    error BorrowActionNotPaused();\\n\\n    /// @notice Thrown when mint action is not paused\\n    error MintActionNotPaused();\\n\\n    /// @notice Thrown when redeem action is not paused\\n    error RedeemActionNotPaused();\\n\\n    /// @notice Thrown when repay action is not paused\\n    error RepayActionNotPaused();\\n\\n    /// @notice Thrown when seize action is not paused\\n    error SeizeActionNotPaused();\\n\\n    /// @notice Thrown when exit market action is not paused\\n    error ExitMarketActionNotPaused();\\n\\n    /// @notice Thrown when transfer action is not paused\\n    error TransferActionNotPaused();\\n\\n    /// @notice Thrown when enter market action is not paused\\n    error EnterMarketActionNotPaused();\\n\\n    /// @notice Thrown when liquidate action is not paused\\n    error LiquidateActionNotPaused();\\n\\n    /// @notice Thrown when borrow cap is not zero\\n    error BorrowCapIsNotZero();\\n\\n    /// @notice Thrown when supply cap is not zero\\n    error SupplyCapIsNotZero();\\n\\n    /// @notice Thrown when collateral factor is not zero\\n    error CollateralFactorIsNotZero();\\n\\n    /**\\n     * @notice Thrown during the liquidation if user's total collateral amount is lower than\\n     *   a predefined threshold. In this case only batch liquidations (either liquidateAccount\\n     *   or healAccount) are available.\\n     */\\n    error MinimalCollateralViolated(uint256 expectedGreaterThan, uint256 actual);\\n    error CollateralExceedsThreshold(uint256 expectedLessThanOrEqualTo, uint256 actual);\\n    error InsufficientCollateral(uint256 collateralToSeize, uint256 availableCollateral);\\n\\n    /// @notice Thrown when the account doesn't have enough liquidity to redeem or borrow\\n    error InsufficientLiquidity();\\n\\n    /// @notice Thrown when trying to liquidate a healthy account\\n    error InsufficientShortfall();\\n\\n    /// @notice Thrown when trying to repay more than allowed by close factor\\n    error TooMuchRepay();\\n\\n    /// @notice Thrown if the user is trying to exit a market in which they have an outstanding debt\\n    error NonzeroBorrowBalance();\\n\\n    /// @notice Thrown when trying to perform an action that is paused\\n    error ActionPaused(address market, Action action);\\n\\n    /// @notice Thrown when trying to add a market that is already listed\\n    error MarketAlreadyListed(address market);\\n\\n    /// @notice Thrown if the supply cap is exceeded\\n    error SupplyCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if the borrow cap is exceeded\\n    error BorrowCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if delegate approval status is already set to the requested value\\n    error DelegationStatusUnchanged();\\n\\n    /// @param poolRegistry_ Pool registry address\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    /// @custom:error ZeroAddressNotAllowed is thrown when pool registry address is zero\\n    constructor(address poolRegistry_) {\\n        ensureNonzeroAddress(poolRegistry_);\\n\\n        poolRegistry = poolRegistry_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @param loopLimit Limit for the loops can iterate to avoid the DOS\\n     * @param accessControlManager Access control manager contract address\\n     */\\n    function initialize(uint256 loopLimit, address accessControlManager) external initializer {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager);\\n\\n        _setMaxLoopsLimit(loopLimit);\\n    }\\n\\n    /**\\n     * @notice Add assets to be included in account liquidity calculation; enabling them to be used as collateral\\n     * @param vTokens The list of addresses of the vToken markets to be enabled\\n     * @return errors An array of NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketEntered is emitted for each market on success\\n     * @custom:error ActionPaused error is thrown if entering any of the markets is paused\\n     * @custom:error MarketNotListed error is thrown if any of the markets is not listed\\n     * @custom:access Not restricted\\n     */\\n    function enterMarkets(address[] memory vTokens) external override returns (uint256[] memory) {\\n        uint256 len = vTokens.length;\\n\\n        uint256[] memory results = new uint256[](len);\\n        for (uint256 i; i < len; ++i) {\\n            VToken vToken = VToken(vTokens[i]);\\n\\n            _addToMarket(vToken, msg.sender);\\n            results[i] = NO_ERROR;\\n        }\\n\\n        return results;\\n    }\\n\\n    /**\\n     * @notice Unlist a market by setting isListed to false\\n     * @dev Checks if all actions are paused, borrow/supply caps is set to 0 and collateral factor is to 0.\\n     * @param market The address of the market (token) to unlist\\n     * @return uint256 Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketUnlisted is emitted on success\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error BorrowActionNotPaused error is thrown if borrow action is not paused\\n     * @custom:error MintActionNotPaused error is thrown if mint action is not paused\\n     * @custom:error RedeemActionNotPaused error is thrown if redeem action is not paused\\n     * @custom:error RepayActionNotPaused error is thrown if repay action is not paused\\n     * @custom:error EnterMarketActionNotPaused error is thrown if enter market action is not paused\\n     * @custom:error LiquidateActionNotPaused error is thrown if liquidate action is not paused\\n     * @custom:error BorrowCapIsNotZero error is thrown if borrow cap is not zero\\n     * @custom:error SupplyCapIsNotZero error is thrown if supply cap is not zero\\n     * @custom:error CollateralFactorIsNotZero error is thrown if collateral factor is not zero\\n     */\\n    function unlistMarket(address market) external returns (uint256) {\\n        _checkAccessAllowed(\\\"unlistMarket(address)\\\");\\n\\n        Market storage _market = markets[market];\\n\\n        if (!_market.isListed) {\\n            revert MarketNotListed(market);\\n        }\\n\\n        if (!actionPaused(market, Action.BORROW)) {\\n            revert BorrowActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.MINT)) {\\n            revert MintActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REDEEM)) {\\n            revert RedeemActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REPAY)) {\\n            revert RepayActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.SEIZE)) {\\n            revert SeizeActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.ENTER_MARKET)) {\\n            revert EnterMarketActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.LIQUIDATE)) {\\n            revert LiquidateActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.TRANSFER)) {\\n            revert TransferActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.EXIT_MARKET)) {\\n            revert ExitMarketActionNotPaused();\\n        }\\n\\n        if (borrowCaps[market] != 0) {\\n            revert BorrowCapIsNotZero();\\n        }\\n\\n        if (supplyCaps[market] != 0) {\\n            revert SupplyCapIsNotZero();\\n        }\\n\\n        if (_market.collateralFactorMantissa != 0) {\\n            revert CollateralFactorIsNotZero();\\n        }\\n\\n        _market.isListed = false;\\n        emit MarketUnlisted(market);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Grants or revokes the borrowing or redeeming delegate rights to / from an account\\n     *  If allowed, the delegate will be able to borrow funds on behalf of the sender\\n     *  Upon a delegated borrow, the delegate will receive the funds, and the borrower\\n     *  will see the debt on their account\\n     *  Upon a delegated redeem, the delegate will receive the redeemed amount and the approver\\n     *  will see a deduction in his vToken balance\\n     * @param delegate The address to update the rights for\\n     * @param approved Whether to grant (true) or revoke (false) the borrowing or redeeming rights\\n     * @custom:event DelegateUpdated emits on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when delegate address is zero\\n     * @custom:error DelegationStatusUnchanged is thrown if approval status is already set to the requested value\\n     * @custom:access Not restricted\\n     */\\n    function updateDelegate(address delegate, bool approved) external {\\n        ensureNonzeroAddress(delegate);\\n        if (approvedDelegates[msg.sender][delegate] == approved) {\\n            revert DelegationStatusUnchanged();\\n        }\\n\\n        approvedDelegates[msg.sender][delegate] = approved;\\n        emit DelegateUpdated(msg.sender, delegate, approved);\\n    }\\n\\n    /**\\n     * @notice Removes asset from sender's account liquidity calculation; disabling them as collateral\\n     * @dev Sender must not have an outstanding borrow balance in the asset,\\n     *  or be providing necessary collateral for an outstanding borrow.\\n     * @param vTokenAddress The address of the asset to be removed\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketExited is emitted on success\\n     * @custom:error ActionPaused error is thrown if exiting the market is paused\\n     * @custom:error NonzeroBorrowBalance error is thrown if the user has an outstanding borrow in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if exiting the market would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function exitMarket(address vTokenAddress) external override returns (uint256) {\\n        _checkActionPauseState(vTokenAddress, Action.EXIT_MARKET);\\n        VToken vToken = VToken(vTokenAddress);\\n        /* Get sender tokensHeld and amountOwed underlying from the vToken */\\n        (uint256 tokensHeld, uint256 amountOwed, ) = _safeGetAccountSnapshot(vToken, msg.sender);\\n\\n        /* Fail if the sender has a borrow balance */\\n        if (amountOwed != 0) {\\n            revert NonzeroBorrowBalance();\\n        }\\n\\n        /* Fail if the sender is not permitted to redeem all of their tokens */\\n        _checkRedeemAllowed(vTokenAddress, msg.sender, tokensHeld);\\n\\n        Market storage marketToExit = markets[address(vToken)];\\n\\n        /* Return true if the sender is not already \\u2018in\\u2019 the market */\\n        if (!marketToExit.accountMembership[msg.sender]) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Set vToken account membership to false */\\n        delete marketToExit.accountMembership[msg.sender];\\n\\n        /* Delete vToken from the account\\u2019s list of assets */\\n        // load into memory for faster iteration\\n        VToken[] memory userAssetList = accountAssets[msg.sender];\\n        uint256 len = userAssetList.length;\\n\\n        uint256 assetIndex = len;\\n        for (uint256 i; i < len; ++i) {\\n            if (userAssetList[i] == vToken) {\\n                assetIndex = i;\\n                break;\\n            }\\n        }\\n\\n        // We *must* have found the asset in the list or our redundant data structure is broken\\n        assert(assetIndex < len);\\n\\n        // copy last item in list to location of item to be removed, reduce length by 1\\n        VToken[] storage storedList = accountAssets[msg.sender];\\n        storedList[assetIndex] = storedList[storedList.length - 1];\\n        storedList.pop();\\n\\n        emit MarketExited(vToken, msg.sender);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /*** Policy Hooks ***/\\n\\n    /**\\n     * @notice Checks if the account should be allowed to mint tokens in the given market\\n     * @param vToken The market to verify the mint against\\n     * @param minter The account which would get the minted tokens\\n     * @param mintAmount The amount of underlying being supplied to the market in exchange for tokens\\n     * @custom:error ActionPaused error is thrown if supplying to this market is paused\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error SupplyCapExceeded error is thrown if the total supply exceeds the cap after minting\\n     * @custom:access Not restricted\\n     */\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external override {\\n        _checkActionPauseState(vToken, Action.MINT);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        uint256 supplyCap = supplyCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (supplyCap != type(uint256).max) {\\n            uint256 vTokenSupply = VToken(vToken).totalSupply();\\n            Exp memory exchangeRate = Exp({ mantissa: VToken(vToken).exchangeRateStored() });\\n            uint256 nextTotalSupply = mul_ScalarTruncateAddUInt(exchangeRate, vTokenSupply, mintAmount);\\n            if (nextTotalSupply > supplyCap) {\\n                revert SupplyCapExceeded(vToken, supplyCap);\\n            }\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, minter);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates mint, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being minted\\n     * @param minter The address minting the tokens\\n     * @param actualMintAmount The amount of the underlying asset being minted\\n     * @param mintTokens The number of tokens being minted\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function mintVerify(address vToken, address minter, uint256 actualMintAmount, uint256 mintTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(minter, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to redeem tokens in the given market\\n     * @param vToken The market to verify the redeem against\\n     * @param redeemer The account which would redeem the tokens\\n     * @param redeemTokens The number of vTokens to exchange for the underlying asset in the market\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external override {\\n        _checkActionPauseState(vToken, Action.REDEEM);\\n\\n        _checkRedeemAllowed(vToken, redeemer, redeemTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, redeemer);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates redeem, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being redeemed\\n     * @param redeemer The address redeeming the tokens\\n     * @param redeemAmount The amount of the underlying asset being redeemed\\n     * @param redeemTokens The number of tokens being redeemed\\n     */\\n    function redeemVerify(address vToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(redeemer, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates repayBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being repaid\\n     * @param payer The address repaying the borrow\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     */\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer, // solhint-disable-line no-unused-vars\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 borrowerIndex // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates liquidateBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     * @param seizeTokens The amount of collateral token that will be seized\\n     */\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenBorrowed);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenBorrowed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates seize, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param seizeTokens The number of collateral tokens to seize\\n     */\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenCollateral);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenCollateral);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates transfer, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being transferred\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function transferVerify(address vToken, address src, address dst, uint256 transferTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(src, vToken);\\n            prime.accrueInterestAndUpdateScore(dst, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to borrow the underlying asset of the given market\\n     * @param vToken The market to verify the borrow against\\n     * @param borrower The account which would borrow the asset\\n     * @param borrowAmount The amount of underlying the account would borrow\\n     * @custom:error ActionPaused error is thrown if borrowing is paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if there is not enough collateral to borrow\\n     * @custom:error BorrowCapExceeded is thrown if the borrow cap will be exceeded should this borrow succeed\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted if vToken is enabled as collateral, otherwise only vToken\\n     */\\n    /// disable-eslint\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external override {\\n        _checkActionPauseState(vToken, Action.BORROW);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (!markets[vToken].accountMembership[borrower]) {\\n            // only vTokens may call borrowAllowed if borrower not in market\\n            _checkSenderIs(vToken);\\n\\n            // attempt to add borrower to the market or revert\\n            _addToMarket(VToken(msg.sender), borrower);\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (oracle.getUnderlyingPrice(vToken) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 borrowCap = borrowCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (borrowCap != type(uint256).max) {\\n            uint256 totalBorrows = VToken(vToken).totalBorrows();\\n            uint256 badDebt = VToken(vToken).badDebt();\\n            uint256 nextTotalBorrows = totalBorrows + borrowAmount + badDebt;\\n            if (nextTotalBorrows > borrowCap) {\\n                revert BorrowCapExceeded(vToken, borrowCap);\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            borrower,\\n            VToken(vToken),\\n            0,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n\\n        Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates borrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset whose underlying is being borrowed\\n     * @param borrower The address borrowing the underlying\\n     * @param borrowAmount The amount of the underlying asset requested to borrow\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function borrowVerify(address vToken, address borrower, uint256 borrowAmount) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to repay a borrow in the given market\\n     * @param vToken The market to verify the repay against\\n     * @param borrower The account which would borrowed the asset\\n     * @custom:error ActionPaused error is thrown if repayments are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:access Not restricted\\n     */\\n    function preRepayHook(address vToken, address borrower) external override {\\n        _checkActionPauseState(vToken, Action.REPAY);\\n\\n        oracle.updatePrice(vToken);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the liquidation should be allowed to occur\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param borrower The address of the borrower\\n     * @param repayAmount The amount of underlying being repaid\\n     * @param skipLiquidityCheck Allows the borrow to be liquidated regardless of the account liquidity\\n     * @custom:error ActionPaused error is thrown if liquidations are paused in this market\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error TooMuchRepay error is thrown if the liquidator is trying to repay more than allowed by close factor\\n     * @custom:error MinimalCollateralViolated is thrown if the users' total collateral is lower than the threshold for non-batch liquidations\\n     * @custom:error InsufficientShortfall is thrown when trying to liquidate a healthy account\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     */\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        // Pause Action.LIQUIDATE on BORROWED TOKEN to prevent liquidating it.\\n        // If we want to pause liquidating to vTokenCollateral, we should pause\\n        // Action.SEIZE on it\\n        _checkActionPauseState(vTokenBorrowed, Action.LIQUIDATE);\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(address(vTokenBorrowed));\\n        }\\n        if (!markets[vTokenCollateral].isListed) {\\n            revert MarketNotListed(address(vTokenCollateral));\\n        }\\n\\n        uint256 borrowBalance = VToken(vTokenBorrowed).borrowBalanceStored(borrower);\\n\\n        /* Allow accounts to be liquidated if it is a forced liquidation */\\n        if (skipLiquidityCheck || isForcedLiquidationEnabled[vTokenBorrowed]) {\\n            if (repayAmount > borrowBalance) {\\n                revert TooMuchRepay();\\n            }\\n            return;\\n        }\\n\\n        /* The borrower must have shortfall and collateral > threshold in order to be liquidatable */\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral <= minLiquidatableCollateral) {\\n            /* The liquidator should use either liquidateAccount or healAccount */\\n            revert MinimalCollateralViolated(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        /* The liquidator may not repay more than what is allowed by the closeFactor */\\n        uint256 maxClose = mul_ScalarTruncate(Exp({ mantissa: closeFactorMantissa }), borrowBalance);\\n        if (repayAmount > maxClose) {\\n            revert TooMuchRepay();\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the seizing of assets should be allowed to occur\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param seizerContract Contract that tries to seize the asset (either borrowed vToken or Comptroller)\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @custom:error ActionPaused error is thrown if seizing this type of collateral is paused\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error ComptrollerMismatch error is when seizer contract or seized asset belong to different pools\\n     * @custom:access Not restricted\\n     */\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address seizerContract,\\n        address liquidator,\\n        address borrower\\n    ) external override {\\n        // Pause Action.SEIZE on COLLATERAL to prevent seizing it.\\n        // If we want to pause liquidating vTokenBorrowed, we should pause\\n        // Action.LIQUIDATE on it\\n        _checkActionPauseState(vTokenCollateral, Action.SEIZE);\\n\\n        Market storage market = markets[vTokenCollateral];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(vTokenCollateral);\\n        }\\n\\n        if (seizerContract == address(this)) {\\n            // If Comptroller is the seizer, just check if collateral's comptroller\\n            // is equal to the current address\\n            if (address(VToken(vTokenCollateral).comptroller()) != address(this)) {\\n                revert ComptrollerMismatch();\\n            }\\n        } else {\\n            // If the seizer is not the Comptroller, check that the seizer is a\\n            // listed market, and that the markets' comptrollers match\\n            if (!markets[seizerContract].isListed) {\\n                revert MarketNotListed(seizerContract);\\n            }\\n            if (VToken(vTokenCollateral).comptroller() != VToken(seizerContract).comptroller()) {\\n                revert ComptrollerMismatch();\\n            }\\n        }\\n\\n        if (!market.accountMembership[borrower]) {\\n            revert MarketNotCollateral(vTokenCollateral, borrower);\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vTokenCollateral);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, borrower);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, liquidator);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to transfer tokens in the given market\\n     * @param vToken The market to verify the transfer against\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external override {\\n        _checkActionPauseState(vToken, Action.TRANSFER);\\n\\n        // Currently the only consideration is whether or not\\n        //  the src is allowed to redeem this many tokens\\n        _checkRedeemAllowed(vToken, src, transferTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, src);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, dst);\\n        }\\n    }\\n\\n    /*** Pool-level operations ***/\\n\\n    /**\\n     * @notice Seizes all the remaining collateral, makes msg.sender repay the existing\\n     *   borrows, and treats the rest of the debt as bad debt (for each market).\\n     *   The sender has to repay a certain percentage of the debt, computed as\\n     *   collateral / (borrows * liquidationIncentive).\\n     * @param user account to heal\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for healing\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function healAccount(address user) external {\\n        VToken[] memory userAssets = getAssetsIn(user);\\n        uint256 userAssetsCount = userAssets.length;\\n\\n        address liquidator = msg.sender;\\n        {\\n            ResilientOracleInterface oracle_ = oracle;\\n            // We need all user's markets to be fresh for the computations to be correct\\n            for (uint256 i; i < userAssetsCount; ++i) {\\n                userAssets[i].accrueInterest();\\n                oracle_.updatePrice(address(userAssets[i]));\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(user, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        // percentage = collateral / (borrows * liquidation incentive)\\n        Exp memory collateral = Exp({ mantissa: snapshot.totalCollateral });\\n        Exp memory scaledBorrows = mul_(\\n            Exp({ mantissa: snapshot.borrows }),\\n            Exp({ mantissa: liquidationIncentiveMantissa })\\n        );\\n\\n        Exp memory percentage = div_(collateral, scaledBorrows);\\n        if (lessThanExp(Exp({ mantissa: MANTISSA_ONE }), percentage)) {\\n            revert CollateralExceedsThreshold(scaledBorrows.mantissa, collateral.mantissa);\\n        }\\n\\n        for (uint256 i; i < userAssetsCount; ++i) {\\n            VToken market = userAssets[i];\\n\\n            (uint256 tokens, uint256 borrowBalance, ) = _safeGetAccountSnapshot(market, user);\\n            uint256 repaymentAmount = mul_ScalarTruncate(percentage, borrowBalance);\\n\\n            // Seize the entire collateral\\n            if (tokens != 0) {\\n                market.seize(liquidator, user, tokens);\\n            }\\n            // Repay a certain percentage of the borrow, forgive the rest\\n            if (borrowBalance != 0) {\\n                market.healBorrow(liquidator, user, repaymentAmount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Liquidates all borrows of the borrower. Callable only if the collateral is less than\\n     *   a predefined threshold, and the account collateral can be seized to cover all borrows. If\\n     *   the collateral is higher than the threshold, use regular liquidations. If the collateral is\\n     *   below the threshold, and the account is insolvent, use healAccount.\\n     * @param borrower the borrower address\\n     * @param orders an array of liquidation orders\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for a batch liquidation\\n     * @custom:error InsufficientCollateral error is thrown when there is not enough collateral to cover the debt\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function liquidateAccount(address borrower, LiquidationOrder[] calldata orders) external {\\n        // We will accrue interest and update the oracle prices later during the liquidation\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            // You should use the regular vToken.liquidateBorrow(...) call\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        uint256 collateralToSeize = mul_ScalarTruncate(\\n            Exp({ mantissa: liquidationIncentiveMantissa }),\\n            snapshot.borrows\\n        );\\n        if (collateralToSeize >= snapshot.totalCollateral) {\\n            // There is not enough collateral to seize. Use healBorrow to repay some part of the borrow\\n            // and record bad debt.\\n            revert InsufficientCollateral(collateralToSeize, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        uint256 ordersCount = orders.length;\\n\\n        _ensureMaxLoops(ordersCount / 2);\\n\\n        for (uint256 i; i < ordersCount; ++i) {\\n            if (!markets[address(orders[i].vTokenBorrowed)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenBorrowed));\\n            }\\n            if (!markets[address(orders[i].vTokenCollateral)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenCollateral));\\n            }\\n\\n            LiquidationOrder calldata order = orders[i];\\n            order.vTokenBorrowed.forceLiquidateBorrow(\\n                msg.sender,\\n                borrower,\\n                order.repayAmount,\\n                order.vTokenCollateral,\\n                true\\n            );\\n        }\\n\\n        VToken[] memory borrowMarkets = getAssetsIn(borrower);\\n        uint256 marketsCount = borrowMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            (, uint256 borrowBalance, ) = _safeGetAccountSnapshot(borrowMarkets[i], borrower);\\n            require(borrowBalance == 0, \\\"Nonzero borrow balance after liquidation\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets the closeFactor to use when liquidating borrows\\n     * @param newCloseFactorMantissa New close factor, scaled by 1e18\\n     * @custom:event Emits NewCloseFactor on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCloseFactor(uint256 newCloseFactorMantissa) external {\\n        _checkAccessAllowed(\\\"setCloseFactor(uint256)\\\");\\n        require(MAX_CLOSE_FACTOR_MANTISSA >= newCloseFactorMantissa, \\\"Close factor greater than maximum close factor\\\");\\n        require(MIN_CLOSE_FACTOR_MANTISSA <= newCloseFactorMantissa, \\\"Close factor smaller than minimum close factor\\\");\\n\\n        uint256 oldCloseFactorMantissa = closeFactorMantissa;\\n        closeFactorMantissa = newCloseFactorMantissa;\\n        emit NewCloseFactor(oldCloseFactorMantissa, newCloseFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Sets the collateralFactor for a market\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param vToken The market to set the factor on\\n     * @param newCollateralFactorMantissa The new collateral factor, scaled by 1e18\\n     * @param newLiquidationThresholdMantissa The new liquidation threshold, scaled by 1e18\\n     * @custom:event Emits NewCollateralFactor when collateral factor is updated\\n     *    and NewLiquidationThreshold when liquidation threshold is updated\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InvalidCollateralFactor error is thrown when collateral factor is too high\\n     * @custom:error InvalidLiquidationThreshold error is thrown when liquidation threshold is lower than collateral factor\\n     * @custom:error PriceError is thrown when the oracle returns an invalid price for the asset\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCollateralFactor(\\n        VToken vToken,\\n        uint256 newCollateralFactorMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    ) external {\\n        _checkAccessAllowed(\\\"setCollateralFactor(address,uint256,uint256)\\\");\\n\\n        // Verify market is listed\\n        Market storage market = markets[address(vToken)];\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Check collateral factor <= 0.9\\n        if (newCollateralFactorMantissa > MAX_COLLATERAL_FACTOR_MANTISSA) {\\n            revert InvalidCollateralFactor();\\n        }\\n\\n        // Ensure that liquidation threshold <= 1\\n        if (newLiquidationThresholdMantissa > MANTISSA_ONE) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // Ensure that liquidation threshold >= CF\\n        if (newLiquidationThresholdMantissa < newCollateralFactorMantissa) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // If collateral factor != 0, fail if price == 0\\n        if (newCollateralFactorMantissa != 0 && oracle.getUnderlyingPrice(address(vToken)) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 oldCollateralFactorMantissa = market.collateralFactorMantissa;\\n        if (newCollateralFactorMantissa != oldCollateralFactorMantissa) {\\n            market.collateralFactorMantissa = newCollateralFactorMantissa;\\n            emit NewCollateralFactor(vToken, oldCollateralFactorMantissa, newCollateralFactorMantissa);\\n        }\\n\\n        uint256 oldLiquidationThresholdMantissa = market.liquidationThresholdMantissa;\\n        if (newLiquidationThresholdMantissa != oldLiquidationThresholdMantissa) {\\n            market.liquidationThresholdMantissa = newLiquidationThresholdMantissa;\\n            emit NewLiquidationThreshold(vToken, oldLiquidationThresholdMantissa, newLiquidationThresholdMantissa);\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets liquidationIncentive\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newLiquidationIncentiveMantissa New liquidationIncentive scaled by 1e18\\n     * @custom:event Emits NewLiquidationIncentive on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setLiquidationIncentive(uint256 newLiquidationIncentiveMantissa) external {\\n        require(newLiquidationIncentiveMantissa >= MANTISSA_ONE, \\\"liquidation incentive should be greater than 1e18\\\");\\n\\n        _checkAccessAllowed(\\\"setLiquidationIncentive(uint256)\\\");\\n\\n        // Save current value for use in log\\n        uint256 oldLiquidationIncentiveMantissa = liquidationIncentiveMantissa;\\n\\n        // Set liquidation incentive to new incentive\\n        liquidationIncentiveMantissa = newLiquidationIncentiveMantissa;\\n\\n        // Emit event with old incentive, new incentive\\n        emit NewLiquidationIncentive(oldLiquidationIncentiveMantissa, newLiquidationIncentiveMantissa);\\n    }\\n\\n    /**\\n     * @notice Add the market to the markets mapping and set it as listed\\n     * @dev Only callable by the PoolRegistry\\n     * @param vToken The address of the market (token) to list\\n     * @custom:error MarketAlreadyListed is thrown if the market is already listed in this pool\\n     * @custom:access Only PoolRegistry\\n     */\\n    function supportMarket(VToken vToken) external {\\n        _checkSenderIs(poolRegistry);\\n\\n        if (markets[address(vToken)].isListed) {\\n            revert MarketAlreadyListed(address(vToken));\\n        }\\n\\n        require(vToken.isVToken(), \\\"Comptroller: Invalid vToken\\\"); // Sanity check to make sure its really a VToken\\n\\n        Market storage newMarket = markets[address(vToken)];\\n        newMarket.isListed = true;\\n        newMarket.collateralFactorMantissa = 0;\\n        newMarket.liquidationThresholdMantissa = 0;\\n\\n        _addMarket(address(vToken));\\n\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            rewardsDistributors[i].initializeMarket(address(vToken));\\n        }\\n\\n        emit MarketSupported(vToken);\\n    }\\n\\n    /**\\n     * @notice Set the given borrow caps for the given vToken markets. Borrowing that brings total borrows to or above borrow cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A borrow cap of type(uint256).max corresponds to unlimited borrowing.\\n     * @dev Borrow caps smaller than the current total borrows are accepted. This way, new borrows will not be allowed\\n            until the total borrows amount goes below the new borrow cap\\n     * @param vTokens The addresses of the markets (tokens) to change the borrow caps for\\n     * @param newBorrowCaps The new borrow cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited borrowing.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketBorrowCaps(VToken[] calldata vTokens, uint256[] calldata newBorrowCaps) external {\\n        _checkAccessAllowed(\\\"setMarketBorrowCaps(address[],uint256[])\\\");\\n\\n        uint256 numMarkets = vTokens.length;\\n        uint256 numBorrowCaps = newBorrowCaps.length;\\n\\n        require(numMarkets != 0 && numMarkets == numBorrowCaps, \\\"invalid input\\\");\\n\\n        _ensureMaxLoops(numMarkets);\\n\\n        for (uint256 i; i < numMarkets; ++i) {\\n            borrowCaps[address(vTokens[i])] = newBorrowCaps[i];\\n            emit NewBorrowCap(vTokens[i], newBorrowCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given supply caps for the given vToken markets. Supply that brings total Supply to or above supply cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A supply cap of type(uint256).max corresponds to unlimited supply.\\n     * @dev Supply caps smaller than the current total supplies are accepted. This way, new supplies will not be allowed\\n            until the total supplies amount goes below the new supply cap\\n     * @param vTokens The addresses of the markets (tokens) to change the supply caps for\\n     * @param newSupplyCaps The new supply cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited supply.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketSupplyCaps(VToken[] calldata vTokens, uint256[] calldata newSupplyCaps) external {\\n        _checkAccessAllowed(\\\"setMarketSupplyCaps(address[],uint256[])\\\");\\n        uint256 vTokensCount = vTokens.length;\\n\\n        require(vTokensCount != 0, \\\"invalid number of markets\\\");\\n        require(vTokensCount == newSupplyCaps.length, \\\"invalid number of markets\\\");\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            supplyCaps[address(vTokens[i])] = newSupplyCaps[i];\\n            emit NewSupplyCap(vTokens[i], newSupplyCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Pause/unpause specified actions\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param marketsList Markets to pause/unpause the actions on\\n     * @param actionsList List of action ids to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setActionsPaused(VToken[] calldata marketsList, Action[] calldata actionsList, bool paused) external {\\n        _checkAccessAllowed(\\\"setActionsPaused(address[],uint256[],bool)\\\");\\n\\n        uint256 marketsCount = marketsList.length;\\n        uint256 actionsCount = actionsList.length;\\n\\n        _ensureMaxLoops(marketsCount * actionsCount);\\n\\n        for (uint256 marketIdx; marketIdx < marketsCount; ++marketIdx) {\\n            for (uint256 actionIdx; actionIdx < actionsCount; ++actionIdx) {\\n                _setActionPaused(address(marketsList[marketIdx]), actionsList[actionIdx], paused);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given collateral threshold for non-batch liquidations. Regular liquidations\\n     *   will fail if the collateral amount is less than this threshold. Liquidators should use batch\\n     *   operations like liquidateAccount or healAccount.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newMinLiquidatableCollateral The new min liquidatable collateral (in USD).\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMinLiquidatableCollateral(uint256 newMinLiquidatableCollateral) external {\\n        _checkAccessAllowed(\\\"setMinLiquidatableCollateral(uint256)\\\");\\n\\n        uint256 oldMinLiquidatableCollateral = minLiquidatableCollateral;\\n        minLiquidatableCollateral = newMinLiquidatableCollateral;\\n        emit NewMinLiquidatableCollateral(oldMinLiquidatableCollateral, newMinLiquidatableCollateral);\\n    }\\n\\n    /**\\n     * @notice Add a new RewardsDistributor and initialize it with all markets. We can add several RewardsDistributor\\n     * contracts with the same rewardToken, and there could be overlaping among them considering the last reward slot (block or second)\\n     * @dev Only callable by the admin\\n     * @param _rewardsDistributor Address of the RewardDistributor contract to add\\n     * @custom:access Only Governance\\n     * @custom:event Emits NewRewardsDistributor with distributor address\\n     */\\n    function addRewardsDistributor(RewardsDistributor _rewardsDistributor) external onlyOwner {\\n        require(!rewardsDistributorExists[address(_rewardsDistributor)], \\\"already exists\\\");\\n\\n        uint256 rewardsDistributorsLen = rewardsDistributors.length;\\n        _ensureMaxLoops(rewardsDistributorsLen + 1);\\n\\n        rewardsDistributors.push(_rewardsDistributor);\\n        rewardsDistributorExists[address(_rewardsDistributor)] = true;\\n\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            _rewardsDistributor.initializeMarket(address(allMarkets[i]));\\n        }\\n\\n        emit NewRewardsDistributor(address(_rewardsDistributor), address(_rewardsDistributor.rewardToken()));\\n    }\\n\\n    /**\\n     * @notice Sets a new price oracle for the Comptroller\\n     * @dev Only callable by the admin\\n     * @param newOracle Address of the new price oracle to set\\n     * @custom:event Emits NewPriceOracle on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when the new oracle address is zero\\n     */\\n    function setPriceOracle(ResilientOracleInterface newOracle) external onlyOwner {\\n        ensureNonzeroAddress(address(newOracle));\\n\\n        ResilientOracleInterface oldOracle = oracle;\\n        oracle = newOracle;\\n        emit NewPriceOracle(oldOracle, newOracle);\\n    }\\n\\n    /**\\n     * @notice Set the for loop iteration limit to avoid DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Sets the prime token contract for the comptroller\\n     * @param _prime Address of the Prime contract\\n     */\\n    function setPrimeToken(IPrime _prime) external onlyOwner {\\n        ensureNonzeroAddress(address(_prime));\\n\\n        emit NewPrimeToken(prime, _prime);\\n        prime = _prime;\\n    }\\n\\n    /**\\n     * @notice Enables forced liquidations for a market. If forced liquidation is enabled,\\n     * borrows in the market may be liquidated regardless of the account liquidity\\n     * @param vTokenBorrowed Borrowed vToken\\n     * @param enable Whether to enable forced liquidations\\n     */\\n    function setForcedLiquidation(address vTokenBorrowed, bool enable) external {\\n        _checkAccessAllowed(\\\"setForcedLiquidation(address,bool)\\\");\\n        ensureNonzeroAddress(vTokenBorrowed);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(vTokenBorrowed);\\n        }\\n\\n        isForcedLiquidationEnabled[vTokenBorrowed] = enable;\\n        emit IsForcedLiquidationEnabledUpdated(vTokenBorrowed, enable);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to liquidation threshold requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of liquidation threshold requirements,\\n     * @return shortfall Account shortfall below liquidation threshold requirements\\n     */\\n    function getAccountLiquidity(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getLiquidationThreshold);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to collateral requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of collateral requirements,\\n     * @return shortfall Account shortfall below collateral requirements\\n     */\\n    function getBorrowingPower(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getCollateralFactor);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine what the account liquidity would be if the given amounts were redeemed/borrowed\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Hypothetical account liquidity in excess of collateral requirements,\\n     * @return shortfall Hypothetical account shortfall below collateral requirements\\n     */\\n    function getHypotheticalAccountLiquidity(\\n        address account,\\n        address vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            account,\\n            VToken(vTokenModify),\\n            redeemTokens,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Return all of the markets\\n     * @dev The automatic getter may be used to access an individual market.\\n     * @return markets The list of market addresses\\n     */\\n    function getAllMarkets() external view override returns (VToken[] memory) {\\n        return allMarkets;\\n    }\\n\\n    /**\\n     * @notice Check if a market is marked as listed (active)\\n     * @param vToken vToken Address for the market to check\\n     * @return listed True if listed otherwise false\\n     */\\n    function isMarketListed(VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].isListed;\\n    }\\n\\n    /*** Assets You Are In ***/\\n\\n    /**\\n     * @notice Returns whether the given account is entered in a given market\\n     * @param account The address of the account to check\\n     * @param vToken The vToken to check\\n     * @return True if the account is in the market specified, otherwise false.\\n     */\\n    function checkMembership(address account, VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].accountMembership[account];\\n    }\\n\\n    /**\\n     * @notice Calculate number of tokens of collateral asset to seize given an underlying amount\\n     * @dev Used in liquidation (called in vToken.liquidateBorrowFresh)\\n     * @param vTokenBorrowed The address of the borrowed vToken\\n     * @param vTokenCollateral The address of the collateral vToken\\n     * @param actualRepayAmount The amount of vTokenBorrowed underlying to convert into vTokenCollateral tokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return tokensToSeize Number of vTokenCollateral tokens to be seized in a liquidation\\n     * @custom:error PriceError if the oracle returns an invalid price\\n     */\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 actualRepayAmount\\n    ) external view override returns (uint256 error, uint256 tokensToSeize) {\\n        /* Read oracle prices for borrowed and collateral markets */\\n        uint256 priceBorrowedMantissa = _safeGetUnderlyingPrice(VToken(vTokenBorrowed));\\n        uint256 priceCollateralMantissa = _safeGetUnderlyingPrice(VToken(vTokenCollateral));\\n\\n        /*\\n         * Get the exchange rate and calculate the number of collateral tokens to seize:\\n         *  seizeAmount = actualRepayAmount * liquidationIncentive * priceBorrowed / priceCollateral\\n         *  seizeTokens = seizeAmount / exchangeRate\\n         *   = actualRepayAmount * (liquidationIncentive * priceBorrowed) / (priceCollateral * exchangeRate)\\n         */\\n        uint256 exchangeRateMantissa = VToken(vTokenCollateral).exchangeRateStored(); // Note: reverts on error\\n        uint256 seizeTokens;\\n        Exp memory numerator;\\n        Exp memory denominator;\\n        Exp memory ratio;\\n\\n        numerator = mul_(Exp({ mantissa: liquidationIncentiveMantissa }), Exp({ mantissa: priceBorrowedMantissa }));\\n        denominator = mul_(Exp({ mantissa: priceCollateralMantissa }), Exp({ mantissa: exchangeRateMantissa }));\\n        ratio = div_(numerator, denominator);\\n\\n        seizeTokens = mul_ScalarTruncate(ratio, actualRepayAmount);\\n\\n        return (NO_ERROR, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Returns reward speed given a vToken\\n     * @param vToken The vToken to get the reward speeds for\\n     * @return rewardSpeeds Array of total supply and borrow speeds and reward token for all reward distributors\\n     */\\n    function getRewardsByMarket(address vToken) external view returns (RewardSpeeds[] memory rewardSpeeds) {\\n        uint256 rewardsDistributorsLength = rewardsDistributors.length;\\n        rewardSpeeds = new RewardSpeeds[](rewardsDistributorsLength);\\n        for (uint256 i; i < rewardsDistributorsLength; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            address rewardToken = address(rewardsDistributor.rewardToken());\\n            rewardSpeeds[i] = RewardSpeeds({\\n                rewardToken: rewardToken,\\n                supplySpeed: rewardsDistributor.rewardTokenSupplySpeeds(vToken),\\n                borrowSpeed: rewardsDistributor.rewardTokenBorrowSpeeds(vToken)\\n            });\\n        }\\n        return rewardSpeeds;\\n    }\\n\\n    /**\\n     * @notice Return all reward distributors for this pool\\n     * @return Array of RewardDistributor addresses\\n     */\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory) {\\n        return rewardsDistributors;\\n    }\\n\\n    /**\\n     * @notice A marker method that returns true for a valid Comptroller contract\\n     * @return Always true\\n     */\\n    function isComptroller() external pure override returns (bool) {\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Update the prices of all the tokens associated with the provided account\\n     * @param account Address of the account to get associated tokens with\\n     */\\n    function updatePrices(address account) public {\\n        VToken[] memory vTokens = getAssetsIn(account);\\n        uint256 vTokensCount = vTokens.length;\\n\\n        ResilientOracleInterface oracle_ = oracle;\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            oracle_.updatePrice(address(vTokens[i]));\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if a certain action is paused on a market\\n     * @param market vToken address\\n     * @param action Action to check\\n     * @return paused True if the action is paused otherwise false\\n     */\\n    function actionPaused(address market, Action action) public view returns (bool) {\\n        return _actionPaused[market][action];\\n    }\\n\\n    /**\\n     * @notice Returns the assets an account has entered\\n     * @param account The address of the account to pull assets for\\n     * @return A list with the assets the account has entered\\n     */\\n    function getAssetsIn(address account) public view returns (VToken[] memory) {\\n        uint256 len;\\n        VToken[] memory _accountAssets = accountAssets[account];\\n        uint256 _accountAssetsLength = _accountAssets.length;\\n\\n        VToken[] memory assetsIn = new VToken[](_accountAssetsLength);\\n\\n        for (uint256 i; i < _accountAssetsLength; ++i) {\\n            Market storage market = markets[address(_accountAssets[i])];\\n            if (market.isListed) {\\n                assetsIn[len] = _accountAssets[i];\\n                ++len;\\n            }\\n        }\\n\\n        assembly {\\n            mstore(assetsIn, len)\\n        }\\n\\n        return assetsIn;\\n    }\\n\\n    /**\\n     * @notice Add the market to the borrower's \\\"assets in\\\" for liquidity calculations\\n     * @param vToken The market to enter\\n     * @param borrower The address of the account to modify\\n     */\\n    function _addToMarket(VToken vToken, address borrower) internal {\\n        _checkActionPauseState(address(vToken), Action.ENTER_MARKET);\\n        Market storage marketToJoin = markets[address(vToken)];\\n\\n        if (!marketToJoin.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (marketToJoin.accountMembership[borrower]) {\\n            // already joined\\n            return;\\n        }\\n\\n        // survived the gauntlet, add to list\\n        // NOTE: we store these somewhat redundantly as a significant optimization\\n        //  this avoids having to iterate through the list for the most common use cases\\n        //  that is, only when we need to perform liquidity checks\\n        //  and not whenever we want to check if an account is in a particular market\\n        marketToJoin.accountMembership[borrower] = true;\\n        accountAssets[borrower].push(vToken);\\n\\n        emit MarketEntered(vToken, borrower);\\n    }\\n\\n    /**\\n     * @notice Internal function to validate that a market hasn't already been added\\n     * and if it hasn't adds it\\n     * @param vToken The market to support\\n     */\\n    function _addMarket(address vToken) internal {\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            if (allMarkets[i] == VToken(vToken)) {\\n                revert MarketAlreadyListed(vToken);\\n            }\\n        }\\n        allMarkets.push(VToken(vToken));\\n        marketsCount = allMarkets.length;\\n        _ensureMaxLoops(marketsCount);\\n    }\\n\\n    /**\\n     * @dev Pause/unpause an action on a market\\n     * @param market Market to pause/unpause the action on\\n     * @param action Action id to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     */\\n    function _setActionPaused(address market, Action action, bool paused) internal {\\n        require(markets[market].isListed, \\\"cannot pause a market that is not listed\\\");\\n        _actionPaused[market][action] = paused;\\n        emit ActionPausedMarket(VToken(market), action, paused);\\n    }\\n\\n    /**\\n     * @dev Internal function to check that vTokens can be safely redeemed for the underlying asset.\\n     * @param vToken Address of the vTokens to redeem\\n     * @param redeemer Account redeeming the tokens\\n     * @param redeemTokens The number of tokens to redeem\\n     */\\n    function _checkRedeemAllowed(address vToken, address redeemer, uint256 redeemTokens) internal {\\n        Market storage market = markets[vToken];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        /* If the redeemer is not 'in' the market, then we can bypass the liquidity check */\\n        if (!market.accountMembership[redeemer]) {\\n            return;\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(redeemer);\\n\\n        /* Otherwise, perform a hypothetical liquidity check to guard against shortfall */\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            redeemer,\\n            VToken(vToken),\\n            redeemTokens,\\n            0,\\n            _getCollateralFactor\\n        );\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n    }\\n\\n    /**\\n     * @notice Get the total collateral, weighted collateral, borrow balance, liquidity, shortfall\\n     * @param account The account to get the snapshot for\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n     *  liquidation threshold. Accepts the address of the vToken and returns the weight as Exp.\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getCurrentLiquiditySnapshot(\\n        address account,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        return _getHypotheticalLiquiditySnapshot(account, VToken(address(0)), 0, 0, weight);\\n    }\\n\\n    /**\\n     * @notice Determine what the supply/borrow balances would be if the given amounts were redeemed/borrowed\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n         liquidation threshold. Accepts the address of the VToken and returns the weight\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getHypotheticalLiquiditySnapshot(\\n        address account,\\n        VToken vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        // For each asset the account is in\\n        VToken[] memory assets = getAssetsIn(account);\\n        uint256 assetsCount = assets.length;\\n\\n        for (uint256 i; i < assetsCount; ++i) {\\n            VToken asset = assets[i];\\n\\n            // Read the balances and exchange rate from the vToken\\n            (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) = _safeGetAccountSnapshot(\\n                asset,\\n                account\\n            );\\n\\n            // Get the normalized price of the asset\\n            Exp memory oraclePrice = Exp({ mantissa: _safeGetUnderlyingPrice(asset) });\\n\\n            // Pre-compute conversion factors from vTokens -> usd\\n            Exp memory vTokenPrice = mul_(Exp({ mantissa: exchangeRateMantissa }), oraclePrice);\\n            Exp memory weightedVTokenPrice = mul_(weight(asset), vTokenPrice);\\n\\n            // weightedCollateral += weightedVTokenPrice * vTokenBalance\\n            snapshot.weightedCollateral = mul_ScalarTruncateAddUInt(\\n                weightedVTokenPrice,\\n                vTokenBalance,\\n                snapshot.weightedCollateral\\n            );\\n\\n            // totalCollateral += vTokenPrice * vTokenBalance\\n            snapshot.totalCollateral = mul_ScalarTruncateAddUInt(vTokenPrice, vTokenBalance, snapshot.totalCollateral);\\n\\n            // borrows += oraclePrice * borrowBalance\\n            snapshot.borrows = mul_ScalarTruncateAddUInt(oraclePrice, borrowBalance, snapshot.borrows);\\n\\n            // Calculate effects of interacting with vTokenModify\\n            if (asset == vTokenModify) {\\n                // redeem effect\\n                // effects += tokensToDenom * redeemTokens\\n                snapshot.effects = mul_ScalarTruncateAddUInt(weightedVTokenPrice, redeemTokens, snapshot.effects);\\n\\n                // borrow effect\\n                // effects += oraclePrice * borrowAmount\\n                snapshot.effects = mul_ScalarTruncateAddUInt(oraclePrice, borrowAmount, snapshot.effects);\\n            }\\n        }\\n\\n        uint256 borrowPlusEffects = snapshot.borrows + snapshot.effects;\\n        // These are safe, as the underflow condition is checked first\\n        unchecked {\\n            if (snapshot.weightedCollateral > borrowPlusEffects) {\\n                snapshot.liquidity = snapshot.weightedCollateral - borrowPlusEffects;\\n                snapshot.shortfall = 0;\\n            } else {\\n                snapshot.liquidity = 0;\\n                snapshot.shortfall = borrowPlusEffects - snapshot.weightedCollateral;\\n            }\\n        }\\n\\n        return snapshot;\\n    }\\n\\n    /**\\n     * @dev Retrieves price from oracle for an asset and checks it is nonzero\\n     * @param asset Address for asset to query price\\n     * @return Underlying price\\n     */\\n    function _safeGetUnderlyingPrice(VToken asset) internal view returns (uint256) {\\n        uint256 oraclePriceMantissa = oracle.getUnderlyingPrice(address(asset));\\n        if (oraclePriceMantissa == 0) {\\n            revert PriceError(address(asset));\\n        }\\n        return oraclePriceMantissa;\\n    }\\n\\n    /**\\n     * @dev Return collateral factor for a market\\n     * @param asset Address for asset\\n     * @return Collateral factor as exponential\\n     */\\n    function _getCollateralFactor(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].collateralFactorMantissa });\\n    }\\n\\n    /**\\n     * @dev Retrieves liquidation threshold for a market as an exponential\\n     * @param asset Address for asset to liquidation threshold\\n     * @return Liquidation threshold as exponential\\n     */\\n    function _getLiquidationThreshold(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].liquidationThresholdMantissa });\\n    }\\n\\n    /**\\n     * @dev Returns supply and borrow balances of user in vToken, reverts on failure\\n     * @param vToken Market to query\\n     * @param user Account address\\n     * @return vTokenBalance Balance of vTokens, the same as vToken.balanceOf(user)\\n     * @return borrowBalance Borrowed amount, including the interest\\n     * @return exchangeRateMantissa Stored exchange rate\\n     */\\n    function _safeGetAccountSnapshot(\\n        VToken vToken,\\n        address user\\n    ) internal view returns (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) {\\n        uint256 err;\\n        (err, vTokenBalance, borrowBalance, exchangeRateMantissa) = vToken.getAccountSnapshot(user);\\n        if (err != 0) {\\n            revert SnapshotError(address(vToken), user);\\n        }\\n        return (vTokenBalance, borrowBalance, exchangeRateMantissa);\\n    }\\n\\n    /// @notice Reverts if the call is not from expectedSender\\n    /// @param expectedSender Expected transaction sender\\n    function _checkSenderIs(address expectedSender) internal view {\\n        if (msg.sender != expectedSender) {\\n            revert UnexpectedSender(expectedSender, msg.sender);\\n        }\\n    }\\n\\n    /// @notice Reverts if a certain action is paused on a market\\n    /// @param market Market to check\\n    /// @param action Action to check\\n    function _checkActionPauseState(address market, Action action) private view {\\n        if (actionPaused(market, action)) {\\n            revert ActionPaused(market, action);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x7c6e1c6264e4681f82a9ac1bcd9155197a930033291ee5561ad97a56006f5e9c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\n\\nenum Action {\\n    MINT,\\n    REDEEM,\\n    BORROW,\\n    REPAY,\\n    SEIZE,\\n    LIQUIDATE,\\n    TRANSFER,\\n    ENTER_MARKET,\\n    EXIT_MARKET\\n}\\n\\n/**\\n * @title ComptrollerInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract.\\n */\\ninterface ComptrollerInterface {\\n    /*** Assets You Are In ***/\\n\\n    function enterMarkets(address[] calldata vTokens) external returns (uint256[] memory);\\n\\n    function exitMarket(address vToken) external returns (uint256);\\n\\n    /*** Policy Hooks ***/\\n\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external;\\n\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external;\\n\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external;\\n\\n    function preRepayHook(address vToken, address borrower) external;\\n\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external;\\n\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower\\n    ) external;\\n\\n    function borrowVerify(address vToken, address borrower, uint borrowAmount) external;\\n\\n    function mintVerify(address vToken, address minter, uint mintAmount, uint mintTokens) external;\\n\\n    function redeemVerify(address vToken, address redeemer, uint redeemAmount, uint redeemTokens) external;\\n\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer,\\n        address borrower,\\n        uint repayAmount,\\n        uint borrowerIndex\\n    ) external;\\n\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address liquidator,\\n        address borrower,\\n        uint repayAmount,\\n        uint seizeTokens\\n    ) external;\\n\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower,\\n        uint seizeTokens\\n    ) external;\\n\\n    function transferVerify(address vToken, address src, address dst, uint transferTokens) external;\\n\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external;\\n\\n    function isComptroller() external view returns (bool);\\n\\n    /*** Liquidity/Liquidation Calculations ***/\\n\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 repayAmount\\n    ) external view returns (uint256, uint256);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function actionPaused(address market, Action action) external view returns (bool);\\n}\\n\\n/**\\n * @title ComptrollerViewInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract, including only some util view functions.\\n */\\ninterface ComptrollerViewInterface {\\n    function markets(address) external view returns (bool, uint256);\\n\\n    function oracle() external view returns (ResilientOracleInterface);\\n\\n    function getAssetsIn(address) external view returns (VToken[] memory);\\n\\n    function closeFactorMantissa() external view returns (uint256);\\n\\n    function liquidationIncentiveMantissa() external view returns (uint256);\\n\\n    function minLiquidatableCollateral() external view returns (uint256);\\n\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function borrowCaps(address) external view returns (uint256);\\n\\n    function supplyCaps(address) external view returns (uint256);\\n\\n    function approvedDelegates(address user, address delegate) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xcbf7f9977472650c61345b7cbde23e81f626e1f8863bab4c6ce3dacfc7604919\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\nimport { Action } from \\\"./ComptrollerInterface.sol\\\";\\n\\n/**\\n * @title ComptrollerStorage\\n * @author Venus\\n * @notice Storage layout for the `Comptroller` contract.\\n */\\ncontract ComptrollerStorage {\\n    struct LiquidationOrder {\\n        VToken vTokenCollateral;\\n        VToken vTokenBorrowed;\\n        uint256 repayAmount;\\n    }\\n\\n    struct AccountLiquiditySnapshot {\\n        uint256 totalCollateral;\\n        uint256 weightedCollateral;\\n        uint256 borrows;\\n        uint256 effects;\\n        uint256 liquidity;\\n        uint256 shortfall;\\n    }\\n\\n    struct RewardSpeeds {\\n        address rewardToken;\\n        uint256 supplySpeed;\\n        uint256 borrowSpeed;\\n    }\\n\\n    struct Market {\\n        // Whether or not this market is listed\\n        bool isListed;\\n        //  Multiplier representing the most one can borrow against their collateral in this market.\\n        //  For instance, 0.9 to allow borrowing 90% of collateral value.\\n        //  Must be between 0 and 1, and stored as a mantissa.\\n        uint256 collateralFactorMantissa;\\n        //  Multiplier representing the collateralization after which the borrow is eligible\\n        //  for liquidation. For instance, 0.8 liquidate when the borrow is 80% of collateral\\n        //  value. Must be between 0 and collateral factor, stored as a mantissa.\\n        uint256 liquidationThresholdMantissa;\\n        // Per-market mapping of \\\"accounts in this asset\\\"\\n        mapping(address => bool) accountMembership;\\n    }\\n\\n    /**\\n     * @notice Oracle which gives the price of any given asset\\n     */\\n    ResilientOracleInterface public oracle;\\n\\n    /**\\n     * @notice Multiplier used to calculate the maximum repayAmount when liquidating a borrow\\n     */\\n    uint256 public closeFactorMantissa;\\n\\n    /**\\n     * @notice Multiplier representing the discount on collateral that a liquidator receives\\n     */\\n    uint256 public liquidationIncentiveMantissa;\\n\\n    /**\\n     * @notice Per-account mapping of \\\"assets you are in\\\"\\n     */\\n    mapping(address => VToken[]) public accountAssets;\\n\\n    /**\\n     * @notice Official mapping of vTokens -> Market metadata\\n     * @dev Used e.g. to determine if a market is supported\\n     */\\n    mapping(address => Market) public markets;\\n\\n    /// @notice A list of all markets\\n    VToken[] public allMarkets;\\n\\n    /// @notice Borrow caps enforced by borrowAllowed for each vToken address. Defaults to zero which restricts borrowing.\\n    mapping(address => uint256) public borrowCaps;\\n\\n    /// @notice Minimal collateral required for regular (non-batch) liquidations\\n    uint256 public minLiquidatableCollateral;\\n\\n    /// @notice Supply caps enforced by mintAllowed for each vToken address. Defaults to zero which corresponds to minting not allowed\\n    mapping(address => uint256) public supplyCaps;\\n\\n    /// @notice True if a certain action is paused on a certain market\\n    mapping(address => mapping(Action => bool)) internal _actionPaused;\\n\\n    // List of Reward Distributors added\\n    RewardsDistributor[] internal rewardsDistributors;\\n\\n    // Used to check if rewards distributor is added\\n    mapping(address => bool) internal rewardsDistributorExists;\\n\\n    /// @notice Flag indicating whether forced liquidation enabled for a market\\n    mapping(address => bool) public isForcedLiquidationEnabled;\\n\\n    uint256 internal constant NO_ERROR = 0;\\n\\n    // closeFactorMantissa must be strictly greater than this value\\n    uint256 internal constant MIN_CLOSE_FACTOR_MANTISSA = 0.05e18; // 0.05\\n\\n    // closeFactorMantissa must not exceed this value\\n    uint256 internal constant MAX_CLOSE_FACTOR_MANTISSA = 0.9e18; // 0.9\\n\\n    // No collateralFactorMantissa may exceed this value\\n    uint256 internal constant MAX_COLLATERAL_FACTOR_MANTISSA = 0.95e18; // 0.95\\n\\n    /// Prime token address\\n    IPrime public prime;\\n\\n    /// @notice Whether the delegate is allowed to borrow or redeem on behalf of the user\\n    //mapping(address user => mapping (address delegate => bool approved)) public approvedDelegates;\\n    mapping(address => mapping(address => bool)) public approvedDelegates;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4df44cb65ac152bac2be4b4545430e703005a74a55b72e144100b16421bd8bfd\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title TokenErrorReporter\\n * @author Venus\\n * @notice Errors that can be thrown by the `VToken` contract.\\n */\\ncontract TokenErrorReporter {\\n    uint256 public constant NO_ERROR = 0; // support legacy return codes\\n\\n    error TransferNotAllowed();\\n\\n    error MintFreshnessCheck();\\n\\n    error RedeemFreshnessCheck();\\n    error RedeemTransferOutNotPossible();\\n\\n    error BorrowFreshnessCheck();\\n    error BorrowCashNotAvailable();\\n    error DelegateNotApproved();\\n\\n    error RepayBorrowFreshnessCheck();\\n\\n    error HealBorrowUnauthorized();\\n    error ForceLiquidateBorrowUnauthorized();\\n\\n    error LiquidateFreshnessCheck();\\n    error LiquidateCollateralFreshnessCheck();\\n    error LiquidateAccrueCollateralInterestFailed(uint256 errorCode);\\n    error LiquidateLiquidatorIsBorrower();\\n    error LiquidateCloseAmountIsZero();\\n    error LiquidateCloseAmountIsUintMax();\\n\\n    error LiquidateSeizeLiquidatorIsBorrower();\\n\\n    error ProtocolSeizeShareTooBig();\\n\\n    error SetReserveFactorFreshCheck();\\n    error SetReserveFactorBoundsCheck();\\n\\n    error AddReservesFactorFreshCheck(uint256 actualAddAmount);\\n\\n    error ReduceReservesFreshCheck();\\n    error ReduceReservesCashNotAvailable();\\n    error ReduceReservesCashValidation();\\n\\n    error SetInterestRateModelFreshCheck();\\n}\\n\",\"keccak256\":\"0x7a7ced1caaac2d9242659ebd50b99f308c725ce958ac9e11f7ada404b1d97a7b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { EXP_SCALE as EXP_SCALE_, MANTISSA_ONE as MANTISSA_ONE_ } from \\\"./lib/constants.sol\\\";\\n\\n/**\\n * @title Exponential module for storing fixed-precision decimals\\n * @author Compound\\n * @notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.\\n *         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:\\n *         `Exp({mantissa: 5100000000000000000})`.\\n */\\ncontract ExponentialNoError {\\n    struct Exp {\\n        uint256 mantissa;\\n    }\\n\\n    struct Double {\\n        uint256 mantissa;\\n    }\\n\\n    uint256 internal constant EXP_SCALE = EXP_SCALE_;\\n    uint256 internal constant DOUBLE_SCALE = 1e36;\\n    uint256 internal constant HALF_EXP_SCALE = EXP_SCALE / 2;\\n    uint256 internal constant MANTISSA_ONE = MANTISSA_ONE_;\\n\\n    /**\\n     * @dev Truncates the given exp to a whole number value.\\n     *      For example, truncate(Exp{mantissa: 15 * EXP_SCALE}) = 15\\n     */\\n    function truncate(Exp memory exp) internal pure returns (uint256) {\\n        // Note: We are not using careful math here as we're performing a division that cannot fail\\n        return exp.mantissa / EXP_SCALE;\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, then truncate to return an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncate(Exp memory a, uint256 scalar) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return truncate(product);\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncateAddUInt(Exp memory a, uint256 scalar, uint256 addend) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return add_(truncate(product), addend);\\n    }\\n\\n    /**\\n     * @dev Checks if first Exp is less than second Exp.\\n     */\\n    function lessThanExp(Exp memory left, Exp memory right) internal pure returns (bool) {\\n        return left.mantissa < right.mantissa;\\n    }\\n\\n    function safe224(uint256 n, string memory errorMessage) internal pure returns (uint224) {\\n        require(n <= type(uint224).max, errorMessage);\\n        return uint224(n);\\n    }\\n\\n    function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) {\\n        require(n <= type(uint32).max, errorMessage);\\n        return uint32(n);\\n    }\\n\\n    function add_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a + b;\\n    }\\n\\n    function sub_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a - b;\\n    }\\n\\n    function mul_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b.mantissa) / EXP_SCALE });\\n    }\\n\\n    function mul_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / EXP_SCALE;\\n    }\\n\\n    function mul_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b.mantissa) / DOUBLE_SCALE });\\n    }\\n\\n    function mul_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / DOUBLE_SCALE;\\n    }\\n\\n    function mul_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a * b;\\n    }\\n\\n    function div_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(mul_(a.mantissa, EXP_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, EXP_SCALE), b.mantissa);\\n    }\\n\\n    function div_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a.mantissa, DOUBLE_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, DOUBLE_SCALE), b.mantissa);\\n    }\\n\\n    function div_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a / b;\\n    }\\n\\n    function fraction(uint256 a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a, DOUBLE_SCALE), b) });\\n    }\\n}\\n\",\"keccak256\":\"0x8afbe8a24fe3539c124e718681ed3dcebd24c40dd53095786c0155998213b9b0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title Compound's InterestRateModel Interface\\n * @author Compound\\n */\\nabstract contract InterestRateModel {\\n    /**\\n     * @notice Calculates the current borrow interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getBorrowRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Calculates the current supply interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param reserveFactorMantissa The current reserve factor the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getSupplyRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 reserveFactorMantissa,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is an InterestRateModel contract (for inspection)\\n     * @return Always true\\n     */\\n    function isInterestRateModel() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0xc4fda1ab75ebe4b187b707c4f10c58780f343cf343c537f641dc75d3cd28ab51\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title MaxLoopsLimitHelper\\n * @author Venus\\n * @notice Abstract contract used to avoid collection with too many items that would generate gas errors and DoS.\\n */\\nabstract contract MaxLoopsLimitHelper {\\n    // Limit for the loops to avoid the DOS\\n    uint256 public maxLoopsLimit;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when max loops limit is set\\n    event MaxLoopsLimitUpdated(uint256 oldMaxLoopsLimit, uint256 newmaxLoopsLimit);\\n\\n    /// @notice Thrown an error on maxLoopsLimit exceeds for any loop\\n    error MaxLoopsLimitExceeded(uint256 loopsLimit, uint256 requiredLoops);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function _setMaxLoopsLimit(uint256 limit) internal {\\n        require(limit > maxLoopsLimit, \\\"Comptroller: Invalid maxLoopsLimit\\\");\\n\\n        uint256 oldMaxLoopsLimit = maxLoopsLimit;\\n        maxLoopsLimit = limit;\\n\\n        emit MaxLoopsLimitUpdated(oldMaxLoopsLimit, limit);\\n    }\\n\\n    /**\\n     * @notice Compare the maxLoopsLimit with number of the times loop iterate\\n     * @param len Length of the loops iterate\\n     * @custom:error MaxLoopsLimitExceeded error is thrown when loops length exceeds maxLoopsLimit\\n     */\\n    function _ensureMaxLoops(uint256 len) internal view {\\n        if (len > maxLoopsLimit) {\\n            revert MaxLoopsLimitExceeded(maxLoopsLimit, len);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x4c25e30635485d162177effa384eee51768b0141a567a0da16ff6ad673274166\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\n\\nimport { ExponentialNoError } from \\\"../ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"../VToken.sol\\\";\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"../MaxLoopsLimitHelper.sol\\\";\\nimport { RewardsDistributorStorage } from \\\"./RewardsDistributorStorage.sol\\\";\\n\\n/**\\n * @title `RewardsDistributor`\\n * @author Venus\\n * @notice Contract used to configure, track and distribute rewards to users based on their actions (borrows and supplies) in the protocol.\\n * Users can receive additional rewards through a `RewardsDistributor`. Each `RewardsDistributor` proxy is initialized with a specific reward\\n * token and `Comptroller`, which can then distribute the reward token to users that supply or borrow in the associated pool.\\n * Authorized users can set the reward token borrow and supply speeds for each market in the pool. This sets a fixed amount of reward\\n * token to be released each slot (block or second) for borrowers and suppliers, which is distributed based on a user\\u2019s percentage of the borrows or supplies\\n * respectively. The owner can also set up reward distributions to contributor addresses (distinct from suppliers and borrowers) by setting\\n * their contributor reward token speed, which similarly allocates a fixed amount of reward token per slot (block or second).\\n *\\n * The owner has the ability to transfer any amount of reward tokens held by the contract to any other address. Rewards are not distributed\\n * automatically and must be claimed by a user calling `claimRewardToken()`. Users should be aware that it is up to the owner and other centralized\\n * entities to ensure that the `RewardsDistributor` holds enough tokens to distribute the accumulated rewards of users and contributors.\\n */\\ncontract RewardsDistributor is\\n    ExponentialNoError,\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    MaxLoopsLimitHelper,\\n    RewardsDistributorStorage,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    /// @notice The initial REWARD TOKEN index for a market\\n    uint224 public constant INITIAL_INDEX = 1e36;\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a supplier\\n    event DistributedSupplierRewardToken(\\n        VToken indexed vToken,\\n        address indexed supplier,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenSupplyIndex\\n    );\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a borrower\\n    event DistributedBorrowerRewardToken(\\n        VToken indexed vToken,\\n        address indexed borrower,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenBorrowIndex\\n    );\\n\\n    /// @notice Emitted when a new supply-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenSupplySpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when a new borrow-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenBorrowSpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when REWARD TOKEN is granted by admin\\n    event RewardTokenGranted(address indexed recipient, uint256 amount);\\n\\n    /// @notice Emitted when a new REWARD TOKEN speed is set for a contributor\\n    event ContributorRewardTokenSpeedUpdated(address indexed contributor, uint256 newSpeed);\\n\\n    /// @notice Emitted when a market is initialized\\n    event MarketInitialized(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token supply index is updated\\n    event RewardTokenSupplyIndexUpdated(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token borrow index is updated\\n    event RewardTokenBorrowIndexUpdated(address indexed vToken, Exp marketBorrowIndex);\\n\\n    /// @notice Emitted when a reward for contributor is updated\\n    event ContributorRewardsUpdated(address indexed contributor, uint256 rewardAccrued);\\n\\n    /// @notice Emitted when a reward token last rewarding block for supply is updated\\n    event SupplyLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding block for borrow is updated\\n    event BorrowLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for supply is updated\\n    event SupplyLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for borrow is updated\\n    event BorrowLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    modifier onlyComptroller() {\\n        require(address(comptroller) == msg.sender, \\\"Only comptroller can call this function\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice RewardsDistributor initializer\\n     * @dev Initializes the deployer to owner\\n     * @param comptroller_ Comptroller to attach the reward distributor to\\n     * @param rewardToken_ Reward token to distribute\\n     * @param loopsLimit_ Maximum number of iterations for the loops in this contract\\n     * @param accessControlManager_ AccessControlManager contract address\\n     */\\n    function initialize(\\n        Comptroller comptroller_,\\n        IERC20Upgradeable rewardToken_,\\n        uint256 loopsLimit_,\\n        address accessControlManager_\\n    ) external initializer {\\n        comptroller = comptroller_;\\n        rewardToken = rewardToken_;\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n\\n        _setMaxLoopsLimit(loopsLimit_);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken\\n     * @param vToken The address of the vToken to be initialized\\n     * @custom:event MarketInitialized emits on success\\n     * @custom:access Only Comptroller\\n     */\\n    function initializeMarket(address vToken) external onlyComptroller {\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        isTimeBased\\n            ? _initializeMarketTimestampBased(vToken, blockNumberOrTimestamp)\\n            : _initializeMarketBlockBased(vToken, safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\"));\\n\\n        emit MarketInitialized(vToken);\\n    }\\n\\n    /*** Reward Token Distribution ***/\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them\\n     *         Borrowers will begin to accrue after the first interaction with the protocol.\\n     * @dev This function should only be called when the user has a borrow position in the market\\n     *      (e.g. Comptroller.preBorrowHook, and Comptroller.preRepayHook)\\n     *      We avoid an external call to check if they are in the market to save gas because this function is called in many places\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function distributeBorrowerRewardToken(\\n        address vToken,\\n        address borrower,\\n        Exp memory marketBorrowIndex\\n    ) external onlyComptroller {\\n        _distributeBorrowerRewardToken(vToken, borrower, marketBorrowIndex);\\n    }\\n\\n    function updateRewardTokenSupplyIndex(address vToken) external onlyComptroller {\\n        _updateRewardTokenSupplyIndex(vToken);\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the recipient\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all\\n     * @param recipient The address of the recipient to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     */\\n    function grantRewardToken(address recipient, uint256 amount) external onlyOwner {\\n        uint256 amountLeft = _grantRewardToken(recipient, amount);\\n        require(amountLeft == 0, \\\"insufficient rewardToken for grant\\\");\\n        emit RewardTokenGranted(recipient, amount);\\n    }\\n\\n    function updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) external onlyComptroller {\\n        _updateRewardTokenBorrowIndex(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN borrow and supply speeds for the specified markets\\n     * @param vTokens The markets whose REWARD TOKEN speed to update\\n     * @param supplySpeeds New supply-side REWARD TOKEN speed for the corresponding market\\n     * @param borrowSpeeds New borrow-side REWARD TOKEN speed for the corresponding market\\n     */\\n    function setRewardTokenSpeeds(\\n        VToken[] memory vTokens,\\n        uint256[] memory supplySpeeds,\\n        uint256[] memory borrowSpeeds\\n    ) external {\\n        _checkAccessAllowed(\\\"setRewardTokenSpeeds(address[],uint256[],uint256[])\\\");\\n        uint256 numTokens = vTokens.length;\\n        require(numTokens == supplySpeeds.length && numTokens == borrowSpeeds.length, \\\"invalid setRewardTokenSpeeds\\\");\\n\\n        for (uint256 i; i < numTokens; ++i) {\\n            _setRewardTokenSpeed(vTokens[i], supplySpeeds[i], borrowSpeeds[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for the specified markets, used when contract is block based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlocks New supply-side REWARD TOKEN last rewarding block for the corresponding market\\n     * @param borrowLastRewardingBlocks New borrow-side REWARD TOKEN last rewarding block for the corresponding market\\n     */\\n    function setLastRewardingBlocks(\\n        VToken[] calldata vTokens,\\n        uint32[] calldata supplyLastRewardingBlocks,\\n        uint32[] calldata borrowLastRewardingBlocks\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlocks(address[],uint32[],uint32[])\\\");\\n        require(!isTimeBased, \\\"Block-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlocks.length && numTokens == borrowLastRewardingBlocks.length,\\n            \\\"RewardsDistributor::setLastRewardingBlocks invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlock(vTokens[i], supplyLastRewardingBlocks[i], borrowLastRewardingBlocks[i]);\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block timestamp for the specified markets, used when contract is time based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlockTimestamps New supply-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     * @param borrowLastRewardingBlockTimestamps New borrow-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     */\\n    function setLastRewardingBlockTimestamps(\\n        VToken[] calldata vTokens,\\n        uint256[] calldata supplyLastRewardingBlockTimestamps,\\n        uint256[] calldata borrowLastRewardingBlockTimestamps\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])\\\");\\n        require(isTimeBased, \\\"Time-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlockTimestamps.length &&\\n                numTokens == borrowLastRewardingBlockTimestamps.length,\\n            \\\"RewardsDistributor::setLastRewardingBlockTimestamps invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlockTimestamp(\\n                vTokens[i],\\n                supplyLastRewardingBlockTimestamps[i],\\n                borrowLastRewardingBlockTimestamps[i]\\n            );\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single contributor\\n     * @param contributor The contributor whose REWARD TOKEN speed to update\\n     * @param rewardTokenSpeed New REWARD TOKEN speed for contributor\\n     */\\n    function setContributorRewardTokenSpeed(address contributor, uint256 rewardTokenSpeed) external onlyOwner {\\n        // note that REWARD TOKEN speed could be set to 0 to halt liquidity rewards for a contributor\\n        updateContributorRewards(contributor);\\n        if (rewardTokenSpeed == 0) {\\n            // release storage\\n            delete lastContributorBlock[contributor];\\n        } else {\\n            lastContributorBlock[contributor] = getBlockNumberOrTimestamp();\\n        }\\n        rewardTokenContributorSpeeds[contributor] = rewardTokenSpeed;\\n\\n        emit ContributorRewardTokenSpeedUpdated(contributor, rewardTokenSpeed);\\n    }\\n\\n    function distributeSupplierRewardToken(address vToken, address supplier) external onlyComptroller {\\n        _distributeSupplierRewardToken(vToken, supplier);\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in all markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     */\\n    function claimRewardToken(address holder) external {\\n        return claimRewardToken(holder, comptroller.getAllMarkets());\\n    }\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Calculate additional accrued REWARD TOKEN for a contributor since last accrual\\n     * @param contributor The address to calculate contributor rewards for\\n     */\\n    function updateContributorRewards(address contributor) public {\\n        uint256 rewardTokenSpeed = rewardTokenContributorSpeeds[contributor];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n        uint256 deltaBlocksOrTimestamp = sub_(blockNumberOrTimestamp, lastContributorBlock[contributor]);\\n        if (deltaBlocksOrTimestamp > 0 && rewardTokenSpeed > 0) {\\n            uint256 newAccrued = mul_(deltaBlocksOrTimestamp, rewardTokenSpeed);\\n            uint256 contributorAccrued = add_(rewardTokenAccrued[contributor], newAccrued);\\n\\n            rewardTokenAccrued[contributor] = contributorAccrued;\\n            lastContributorBlock[contributor] = blockNumberOrTimestamp;\\n\\n            emit ContributorRewardsUpdated(contributor, rewardTokenAccrued[contributor]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in the specified markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     * @param vTokens The list of markets to claim REWARD TOKEN in\\n     */\\n    function claimRewardToken(address holder, VToken[] memory vTokens) public {\\n        uint256 vTokensCount = vTokens.length;\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            VToken vToken = vTokens[i];\\n            require(comptroller.isMarketListed(vToken), \\\"market must be listed\\\");\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n            _distributeBorrowerRewardToken(address(vToken), holder, borrowIndex);\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n            _distributeSupplierRewardToken(address(vToken), holder);\\n        }\\n        rewardTokenAccrued[holder] = _grantRewardToken(holder, rewardTokenAccrued[holder]);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for a single market.\\n     * @param vToken market's whose reward token last rewarding block to be updated\\n     * @param supplyLastRewardingBlock New supply-side REWARD TOKEN last rewarding block for market\\n     * @param borrowLastRewardingBlock New borrow-side REWARD TOKEN last rewarding block for market\\n     */\\n    function _setLastRewardingBlock(\\n        VToken vToken,\\n        uint32 supplyLastRewardingBlock,\\n        uint32 borrowLastRewardingBlock\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockNumber = getBlockNumberOrTimestamp();\\n\\n        require(supplyLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n        require(borrowLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n\\n        uint32 currentSupplyLastRewardingBlock = rewardTokenSupplyState[address(vToken)].lastRewardingBlock;\\n        uint32 currentBorrowLastRewardingBlock = rewardTokenBorrowState[address(vToken)].lastRewardingBlock;\\n\\n        require(\\n            currentSupplyLastRewardingBlock == 0 || currentSupplyLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlock == 0 || currentBorrowLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlock != supplyLastRewardingBlock) {\\n            rewardTokenSupplyState[address(vToken)].lastRewardingBlock = supplyLastRewardingBlock;\\n            emit SupplyLastRewardingBlockUpdated(address(vToken), supplyLastRewardingBlock);\\n        }\\n\\n        if (currentBorrowLastRewardingBlock != borrowLastRewardingBlock) {\\n            rewardTokenBorrowState[address(vToken)].lastRewardingBlock = borrowLastRewardingBlock;\\n            emit BorrowLastRewardingBlockUpdated(address(vToken), borrowLastRewardingBlock);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding timestamp for a single market.\\n     * @param vToken market's whose reward token last rewarding timestamp to be updated\\n     * @param supplyLastRewardingBlockTimestamp New supply-side REWARD TOKEN last rewarding timestamp for market\\n     * @param borrowLastRewardingBlockTimestamp New borrow-side REWARD TOKEN last rewarding timestamp for market\\n     */\\n    function _setLastRewardingBlockTimestamp(\\n        VToken vToken,\\n        uint256 supplyLastRewardingBlockTimestamp,\\n        uint256 borrowLastRewardingBlockTimestamp\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockTimestamp = getBlockNumberOrTimestamp();\\n\\n        require(\\n            supplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n        require(\\n            borrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n\\n        uint256 currentSupplyLastRewardingBlockTimestamp = rewardTokenSupplyStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n        uint256 currentBorrowLastRewardingBlockTimestamp = rewardTokenBorrowStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n\\n        require(\\n            currentSupplyLastRewardingBlockTimestamp == 0 || currentSupplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlockTimestamp == 0 || currentBorrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlockTimestamp != supplyLastRewardingBlockTimestamp) {\\n            rewardTokenSupplyStateTimeBased[address(vToken)].lastRewardingTimestamp = supplyLastRewardingBlockTimestamp;\\n            emit SupplyLastRewardingBlockTimestampUpdated(address(vToken), supplyLastRewardingBlockTimestamp);\\n        }\\n\\n        if (currentBorrowLastRewardingBlockTimestamp != borrowLastRewardingBlockTimestamp) {\\n            rewardTokenBorrowStateTimeBased[address(vToken)].lastRewardingTimestamp = borrowLastRewardingBlockTimestamp;\\n            emit BorrowLastRewardingBlockTimestampUpdated(address(vToken), borrowLastRewardingBlockTimestamp);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single market.\\n     * @param vToken market's whose reward token rate to be updated\\n     * @param supplySpeed New supply-side REWARD TOKEN speed for market\\n     * @param borrowSpeed New borrow-side REWARD TOKEN speed for market\\n     */\\n    function _setRewardTokenSpeed(VToken vToken, uint256 supplySpeed, uint256 borrowSpeed) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        if (rewardTokenSupplySpeeds[address(vToken)] != supplySpeed) {\\n            // Supply speed updated so let's update supply state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n\\n            // Update speed and emit event\\n            rewardTokenSupplySpeeds[address(vToken)] = supplySpeed;\\n            emit RewardTokenSupplySpeedUpdated(vToken, supplySpeed);\\n        }\\n\\n        if (rewardTokenBorrowSpeeds[address(vToken)] != borrowSpeed) {\\n            // Borrow speed updated so let's update borrow state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n\\n            // Update speed and emit event\\n            rewardTokenBorrowSpeeds[address(vToken)] = borrowSpeed;\\n            emit RewardTokenBorrowSpeedUpdated(vToken, borrowSpeed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculate REWARD TOKEN accrued by a supplier and possibly transfer it to them.\\n     * @param vToken The market in which the supplier is interacting\\n     * @param supplier The address of the supplier to distribute REWARD TOKEN to\\n     */\\n    function _distributeSupplierRewardToken(address vToken, address supplier) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n        uint256 supplierIndex = rewardTokenSupplierIndex[vToken][supplier];\\n\\n        // Update supplier's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenSupplierIndex[vToken][supplier] = supplyIndex;\\n\\n        if (supplierIndex == 0 && supplyIndex >= INITIAL_INDEX) {\\n            // Covers the case where users supplied tokens before the market's supply state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when supplier rewards were first\\n            // set for the market.\\n            supplierIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per vToken accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(supplyIndex, supplierIndex) });\\n\\n        uint256 supplierTokens = VToken(vToken).balanceOf(supplier);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerVToken\\n        uint256 supplierDelta = mul_(supplierTokens, deltaIndex);\\n\\n        uint256 supplierAccrued = add_(rewardTokenAccrued[supplier], supplierDelta);\\n        rewardTokenAccrued[supplier] = supplierAccrued;\\n\\n        emit DistributedSupplierRewardToken(VToken(vToken), supplier, supplierDelta, supplierAccrued, supplyIndex);\\n    }\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them.\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function _distributeBorrowerRewardToken(address vToken, address borrower, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n        uint256 borrowerIndex = rewardTokenBorrowerIndex[vToken][borrower];\\n\\n        // Update borrowers's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenBorrowerIndex[vToken][borrower] = borrowIndex;\\n\\n        if (borrowerIndex == 0 && borrowIndex >= INITIAL_INDEX) {\\n            // Covers the case where users borrowed tokens before the market's borrow state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when borrower rewards were first\\n            // set for the market.\\n            borrowerIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per borrowed unit accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(borrowIndex, borrowerIndex) });\\n\\n        uint256 borrowerAmount = div_(VToken(vToken).borrowBalanceStored(borrower), marketBorrowIndex);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerBorrowedUnit\\n        if (borrowerAmount != 0) {\\n            uint256 borrowerDelta = mul_(borrowerAmount, deltaIndex);\\n\\n            uint256 borrowerAccrued = add_(rewardTokenAccrued[borrower], borrowerDelta);\\n            rewardTokenAccrued[borrower] = borrowerAccrued;\\n\\n            emit DistributedBorrowerRewardToken(VToken(vToken), borrower, borrowerDelta, borrowerAccrued, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the user.\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all.\\n     * @param user The address of the user to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     * @return The amount of REWARD TOKEN which was NOT transferred to the user\\n     */\\n    function _grantRewardToken(address user, uint256 amount) internal returns (uint256) {\\n        uint256 rewardTokenRemaining = rewardToken.balanceOf(address(this));\\n        if (amount > 0 && amount <= rewardTokenRemaining) {\\n            rewardToken.safeTransfer(user, amount);\\n            return 0;\\n        }\\n        return amount;\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the supply index\\n     * @param vToken The market whose supply index to update\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenSupplyIndex(address vToken) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplySpeed = rewardTokenSupplySpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? supplyStateTimeBased.lastRewardingTimestamp\\n            : uint256(supplyState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? supplyStateTimeBased.timestamp : uint256(supplyState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && supplySpeed > 0) {\\n            uint256 supplyTokens = VToken(vToken).totalSupply();\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, supplySpeed);\\n            Double memory ratio = supplyTokens > 0\\n                ? fraction(accruedSinceUpdate, supplyTokens)\\n                : Double({ mantissa: 0 });\\n            uint224 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: supplyIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                supplyStateTimeBased.index = index;\\n                supplyStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                supplyState.index = index;\\n                supplyState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            isTimeBased ? supplyStateTimeBased.timestamp = blockNumberOrTimestamp : supplyState.block = uint32(\\n                blockNumberOrTimestamp\\n            );\\n        }\\n\\n        emit RewardTokenSupplyIndexUpdated(vToken);\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the borrow index\\n     * @param vToken The market whose borrow index to update\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowSpeed = rewardTokenBorrowSpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? borrowStateTimeBased.lastRewardingTimestamp\\n            : uint256(borrowState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? borrowStateTimeBased.timestamp : uint256(borrowState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && borrowSpeed > 0) {\\n            uint256 borrowAmount = div_(VToken(vToken).totalBorrows(), marketBorrowIndex);\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, borrowSpeed);\\n            Double memory ratio = borrowAmount > 0\\n                ? fraction(accruedSinceUpdate, borrowAmount)\\n                : Double({ mantissa: 0 });\\n            uint224 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: borrowIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                borrowStateTimeBased.index = index;\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.index = index;\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            if (isTimeBased) {\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        }\\n\\n        emit RewardTokenBorrowIndexUpdated(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is block-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockNumber current block number\\n     */\\n    function _initializeMarketBlockBased(address vToken, uint32 blockNumber) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block numbers\\n         */\\n        supplyState.block = borrowState.block = blockNumber;\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is time-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockTimestamp current block timestamp\\n     */\\n    function _initializeMarketTimestampBased(address vToken, uint256 blockTimestamp) internal {\\n        TimeBasedRewardToken storage supplyState = rewardTokenSupplyStateTimeBased[vToken];\\n        TimeBasedRewardToken storage borrowState = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block timestamp\\n         */\\n        supplyState.timestamp = borrowState.timestamp = blockTimestamp;\\n    }\\n}\\n\",\"keccak256\":\"0x3cc824e59c923cfe25c4f1a875959b7e9410cde8e73cd405de13f301298c697f\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\n\\n/**\\n * @title RewardsDistributorStorage\\n * @author Venus\\n * @dev Storage for RewardsDistributor\\n */\\ncontract RewardsDistributorStorage {\\n    struct RewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block number the index was last updated at\\n        uint32 block;\\n        // The block number at which to stop rewards\\n        uint32 lastRewardingBlock;\\n    }\\n\\n    struct TimeBasedRewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block timestamp the index was last updated at\\n        uint256 timestamp;\\n        // The block timestamp at which to stop rewards\\n        uint256 lastRewardingTimestamp;\\n    }\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => RewardToken) public rewardTokenSupplyState;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each supplier as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenSupplierIndex;\\n\\n    /// @notice The REWARD TOKEN accrued but not yet transferred to each user\\n    mapping(address => uint256) public rewardTokenAccrued;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding borrow market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenBorrowSpeeds;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding supply market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenSupplySpeeds;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => RewardToken) public rewardTokenBorrowState;\\n\\n    /// @notice The portion of REWARD TOKEN that each contributor receives per slot (block or second)\\n    mapping(address => uint256) public rewardTokenContributorSpeeds;\\n\\n    /// @notice Last slot (block or second) at which a contributor's REWARD TOKEN rewards have been allocated\\n    mapping(address => uint256) public lastContributorBlock;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each borrower as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenBorrowerIndex;\\n\\n    Comptroller internal comptroller;\\n\\n    IERC20Upgradeable public rewardToken;\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenSupplyStateTimeBased;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenBorrowStateTimeBased;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[37] private __gap;\\n}\\n\",\"keccak256\":\"0x70e5015a78a2acf95277949c8b4796e10b9ac194130be006d5e5217e158070c0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VToken.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IProtocolShareReserve } from \\\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\\\";\\n\\nimport { VTokenInterface } from \\\"./VTokenInterfaces.sol\\\";\\nimport { ComptrollerInterface, ComptrollerViewInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { TokenErrorReporter } from \\\"./ErrorReporter.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title VToken\\n * @author Venus\\n * @notice Each asset that is supported by a pool is integrated through an instance of the `VToken` contract. As outlined in the protocol overview,\\n * each isolated pool creates its own `vToken` corresponding to an asset. Within a given pool, each included `vToken` is referred to as a market of\\n * the pool. The main actions a user regularly interacts with in a market are:\\n\\n- mint/redeem of vTokens;\\n- transfer of vTokens;\\n- borrow/repay a loan on an underlying asset;\\n- liquidate a borrow or liquidate/heal an account.\\n\\n * A user supplies the underlying asset to a pool by minting `vTokens`, where the corresponding `vToken` amount is determined by the `exchangeRate`.\\n * The `exchangeRate` will change over time, dependent on a number of factors, some of which accrue interest. Additionally, once users have minted\\n * `vToken` in a pool, they can borrow any asset in the isolated pool by using their `vToken` as collateral. In order to borrow an asset or use a `vToken`\\n * as collateral, the user must be entered into each corresponding market (else, the `vToken` will not be considered collateral for a borrow). Note that\\n * a user may borrow up to a portion of their collateral determined by the market\\u2019s collateral factor. However, if their borrowed amount exceeds an amount\\n * calculated using the market\\u2019s corresponding liquidation threshold, the borrow is eligible for liquidation. When a user repays a borrow, they must also\\n * pay off interest accrued on the borrow.\\n * \\n * The Venus protocol includes unique mechanisms for healing an account and liquidating an account. These actions are performed in the `Comptroller`\\n * and consider all borrows and collateral for which a given account is entered within a market. These functions may only be called on an account with a\\n * total collateral amount that is no larger than a universal `minLiquidatableCollateral` value, which is used for all markets within a `Comptroller`.\\n * Both functions settle all of an account\\u2019s borrows, but `healAccount()` may add `badDebt` to a vToken. For more detail, see the description of\\n * `healAccount()` and `liquidateAccount()` in the `Comptroller` summary section below.\\n */\\ncontract VToken is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    VTokenInterface,\\n    ExponentialNoError,\\n    TokenErrorReporter,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    uint256 internal constant DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA = 5e16; // 5%\\n\\n    // Maximum fraction of interest that can be set aside for reserves\\n    uint256 internal constant MAX_RESERVE_FACTOR_MANTISSA = 1e18;\\n\\n    // Maximum borrow rate that can ever be applied per slot(block or second)\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 internal immutable MAX_BORROW_RATE_MANTISSA;\\n\\n    /**\\n     * Reentrancy Guard **\\n     */\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     */\\n    modifier nonReentrant() {\\n        require(_notEntered, \\\"re-entered\\\");\\n        _notEntered = false;\\n        _;\\n        _notEntered = true; // get a gas-refund post-Istanbul\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @param maxBorrowRateMantissa_ The maximum value of borrowing rate mantissa\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(\\n        bool timeBased_,\\n        uint256 blocksPerYear_,\\n        uint256 maxBorrowRateMantissa_\\n    ) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        require(maxBorrowRateMantissa_ <= 1e18, \\\"Max borrow rate must be <= 1e18\\\");\\n\\n        MAX_BORROW_RATE_MANTISSA = maxBorrowRateMantissa_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice Construct a new money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     * @custom:error ZeroAddressNotAllowed is thrown when admin address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     */\\n    function initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) external initializer {\\n        ensureNonzeroAddress(admin_);\\n\\n        // Initialize the market\\n        _initialize(\\n            underlying_,\\n            comptroller_,\\n            interestRateModel_,\\n            initialExchangeRateMantissa_,\\n            name_,\\n            symbol_,\\n            decimals_,\\n            admin_,\\n            accessControlManager_,\\n            riskManagement,\\n            reserveFactorMantissa_\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `msg.sender` to `dst`\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transfer(address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `src` to `dst`\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transferFrom(address src, address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, src, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Approve `spender` to transfer up to `amount` from `src`\\n     * @dev This will overwrite the approval amount for `spender`\\n     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\\n     * @param spender The address of the account which may transfer tokens\\n     * @param amount The number of tokens that are approved (uint256.max means infinite)\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function approve(address spender, uint256 amount) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        transferAllowances[src][spender] = amount;\\n        emit Approval(src, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Increase approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param addedValue The number of additional tokens spender can transfer\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 newAllowance = transferAllowances[src][spender];\\n        newAllowance += addedValue;\\n        transferAllowances[src][spender] = newAllowance;\\n\\n        emit Approval(src, spender, newAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Decreases approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param subtractedValue The number of tokens to remove from total approval\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 currentAllowance = transferAllowances[src][spender];\\n        require(currentAllowance >= subtractedValue, \\\"decreased allowance below zero\\\");\\n        unchecked {\\n            currentAllowance -= subtractedValue;\\n        }\\n\\n        transferAllowances[src][spender] = currentAllowance;\\n\\n        emit Approval(src, spender, currentAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Get the underlying balance of the `owner`\\n     * @dev This also accrues interest in a transaction\\n     * @param owner The address of the account to query\\n     * @return amount The amount of underlying owned by `owner`\\n     */\\n    function balanceOfUnderlying(address owner) external override returns (uint256) {\\n        Exp memory exchangeRate = Exp({ mantissa: exchangeRateCurrent() });\\n        return mul_ScalarTruncate(exchangeRate, accountTokens[owner]);\\n    }\\n\\n    /**\\n     * @notice Returns the current total borrows plus accrued interest\\n     * @return totalBorrows The total borrows with interest\\n     */\\n    function totalBorrowsCurrent() external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return totalBorrows;\\n    }\\n\\n    /**\\n     * @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\\n     * @param account The address whose balance should be calculated after updating borrowIndex\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceCurrent(address account) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Sender supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function mint(uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, msg.sender, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender calls on-behalf of minter. minter supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param minter User whom the supply will be attributed to\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when minter address is zero\\n     */\\n    function mintBehalf(address minter, uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(minter);\\n\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, minter, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for the underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function redeem(uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer The user on behalf of whom to redeem\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for a specified amount of underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     */\\n    function redeemUnderlying(uint256 redeemAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems underlying assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer, on behalf of whom to redeem\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemUnderlyingBehalf(\\n        address redeemer,\\n        uint256 redeemAmount\\n    ) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets from the protocol to their own address\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function borrow(uint256 borrowAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _borrowFresh(msg.sender, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the borrower using `comptroller.updateDelegate`\\n     * @param borrower The borrower, on behalf of whom to borrow\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error DelegateNotApproved is thrown if caller is not approved delegate\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function borrowBehalf(address borrower, uint256 borrowAmount) external override returns (uint256) {\\n        _ensureSenderIsDelegateOf(borrower);\\n        accrueInterest();\\n\\n        _borrowFresh(borrower, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays their own borrow\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrow(uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, msg.sender, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays a borrow belonging to borrower\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, borrower, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Not restricted\\n     */\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external override returns (uint256) {\\n        _liquidateBorrow(msg.sender, borrower, repayAmount, vTokenCollateral, false);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice sets protocol share accumulated from liquidations\\n     * @dev must be equal or less than liquidation incentive - 1\\n     * @param newProtocolSeizeShareMantissa_ new protocol share mantissa\\n     * @custom:event Emits NewProtocolSeizeShare event on success\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error ProtocolSeizeShareTooBig is thrown when the new seize share is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setProtocolSeizeShare(uint256 newProtocolSeizeShareMantissa_) external {\\n        _checkAccessAllowed(\\\"setProtocolSeizeShare(uint256)\\\");\\n        uint256 liquidationIncentive = ComptrollerViewInterface(address(comptroller)).liquidationIncentiveMantissa();\\n        if (newProtocolSeizeShareMantissa_ + MANTISSA_ONE > liquidationIncentive) {\\n            revert ProtocolSeizeShareTooBig();\\n        }\\n\\n        uint256 oldProtocolSeizeShareMantissa = protocolSeizeShareMantissa;\\n        protocolSeizeShareMantissa = newProtocolSeizeShareMantissa_;\\n        emit NewProtocolSeizeShare(oldProtocolSeizeShareMantissa, newProtocolSeizeShareMantissa_);\\n    }\\n\\n    /**\\n     * @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\\n     * @dev Admin function to accrue interest and set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     * @custom:event Emits NewReserveFactor event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error SetReserveFactorBoundsCheck is thrown when the new reserve factor is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external override nonReentrant {\\n        _checkAccessAllowed(\\\"setReserveFactor(uint256)\\\");\\n\\n        accrueInterest();\\n        _setReserveFactorFresh(newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Accrues interest and reduces reserves by transferring to the protocol reserve contract\\n     * @dev Gracefully return if reserves already reduced in accrueInterest\\n     * @param reduceAmount Amount of reduction to reserves\\n     * @custom:event Emits ReservesReduced event; may emit AccrueInterest\\n     * @custom:error ReduceReservesCashNotAvailable is thrown when the vToken does not have sufficient cash\\n     * @custom:error ReduceReservesCashValidation is thrown when trying to withdraw more cash than the reserves have\\n     * @custom:access Not restricted\\n     */\\n    function reduceReserves(uint256 reduceAmount) external override nonReentrant {\\n        accrueInterest();\\n        if (reduceReservesBlockNumber == getBlockNumberOrTimestamp()) return;\\n        _reduceReservesFresh(reduceAmount);\\n    }\\n\\n    /**\\n     * @notice The sender adds to reserves.\\n     * @param addAmount The amount of underlying token to add as reserves\\n     * @custom:event Emits ReservesAdded event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function addReserves(uint256 addAmount) external override nonReentrant {\\n        accrueInterest();\\n        _addReservesFresh(addAmount);\\n    }\\n\\n    /**\\n     * @notice accrues interest and updates the interest rate model using _setInterestRateModelFresh\\n     * @dev Admin function to accrue interest and update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     * @custom:event Emits NewMarketInterestRateModel event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external override {\\n        _checkAccessAllowed(\\\"setInterestRateModel(address)\\\");\\n\\n        accrueInterest();\\n        _setInterestRateModelFresh(newInterestRateModel);\\n    }\\n\\n    /**\\n     * @notice Repays a certain amount of debt, treats the rest of the borrow as bad debt, essentially\\n     *   \\\"forgiving\\\" the borrower. Healing is a situation that should rarely happen. However, some pools\\n     *   may list risky assets or be configured improperly \\u2013 we want to still handle such cases gracefully.\\n     *   We assume that Comptroller does the seizing, so this function is only available to Comptroller.\\n     * @dev This function does not call any Comptroller hooks (like \\\"healAllowed\\\"), because we assume\\n     *   the Comptroller does all the necessary checks before calling this function.\\n     * @param payer account who repays the debt\\n     * @param borrower account to heal\\n     * @param repayAmount amount to repay\\n     * @custom:event Emits RepayBorrow, BadDebtIncreased events; may emit AccrueInterest\\n     * @custom:error HealBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:access Only Comptroller\\n     */\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external override nonReentrant {\\n        if (repayAmount != 0) {\\n            comptroller.preRepayHook(address(this), borrower);\\n        }\\n\\n        if (msg.sender != address(comptroller)) {\\n            revert HealBorrowUnauthorized();\\n        }\\n\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 totalBorrowsNew = totalBorrows;\\n\\n        uint256 actualRepayAmount;\\n        if (repayAmount != 0) {\\n            // _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n            // We violate checks-effects-interactions here to account for tokens that take transfer fees\\n            actualRepayAmount = _doTransferIn(payer, repayAmount);\\n            totalBorrowsNew = totalBorrowsNew - actualRepayAmount;\\n            emit RepayBorrow(\\n                payer,\\n                borrower,\\n                actualRepayAmount,\\n                accountBorrowsPrev - actualRepayAmount,\\n                totalBorrowsNew\\n            );\\n        }\\n\\n        // The transaction will fail if trying to repay too much\\n        uint256 badDebtDelta = accountBorrowsPrev - actualRepayAmount;\\n        if (badDebtDelta != 0) {\\n            uint256 badDebtOld = badDebt;\\n            uint256 badDebtNew = badDebtOld + badDebtDelta;\\n            totalBorrowsNew = totalBorrowsNew - badDebtDelta;\\n            badDebt = badDebtNew;\\n\\n            // We treat healing as \\\"repayment\\\", where vToken is the payer\\n            emit RepayBorrow(address(this), borrower, badDebtDelta, 0, totalBorrowsNew);\\n            emit BadDebtIncreased(borrower, badDebtDelta, badDebtOld, badDebtNew);\\n        }\\n\\n        accountBorrows[borrower].principal = 0;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        emit HealBorrow(payer, borrower, repayAmount);\\n    }\\n\\n    /**\\n     * @notice The extended version of liquidations, callable only by Comptroller. May skip\\n     *  the close factor check. The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error ForceLiquidateBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Only Comptroller\\n     */\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        if (msg.sender != address(comptroller)) {\\n            revert ForceLiquidateBorrowUnauthorized();\\n        }\\n        _liquidateBorrow(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Will fail unless called by another vToken during the process of liquidation.\\n     *  It's absolutely critical to use msg.sender as the borrowed vToken and not a parameter.\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     * @custom:event Emits Transfer, ReservesAdded events\\n     * @custom:error LiquidateSeizeLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:access Not restricted\\n     */\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external override nonReentrant {\\n        _seize(msg.sender, liquidator, borrower, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Updates bad debt\\n     * @dev Called only when bad debt is recovered from auction\\n     * @param recoveredAmount_ The amount of bad debt recovered\\n     * @custom:event Emits BadDebtRecovered event\\n     * @custom:access Only Shortfall contract\\n     */\\n    function badDebtRecovered(uint256 recoveredAmount_) external {\\n        require(msg.sender == shortfall, \\\"only shortfall contract can update bad debt\\\");\\n        require(recoveredAmount_ <= badDebt, \\\"more than bad debt recovered from auction\\\");\\n\\n        uint256 badDebtOld = badDebt;\\n        uint256 badDebtNew = badDebtOld - recoveredAmount_;\\n        badDebt = badDebtNew;\\n\\n        emit BadDebtRecovered(badDebtOld, badDebtNew);\\n    }\\n\\n    /**\\n     * @notice Sets protocol share reserve contract address\\n     * @param protocolShareReserve_ The address of the protocol share reserve contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setProtocolShareReserve(address payable protocolShareReserve_) external onlyOwner {\\n        _setProtocolShareReserve(protocolShareReserve_);\\n    }\\n\\n    /**\\n     * @notice Sets shortfall contract address\\n     * @param shortfall_ The address of the shortfall contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setShortfallContract(address shortfall_) external onlyOwner {\\n        _setShortfallContract(shortfall_);\\n    }\\n\\n    /**\\n     * @notice A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)\\n     * @param token The address of the ERC-20 token to sweep\\n     * @custom:access Only Governance\\n     */\\n    function sweepToken(IERC20Upgradeable token) external override {\\n        require(msg.sender == owner(), \\\"VToken::sweepToken: only admin can sweep tokens\\\");\\n        require(address(token) != underlying, \\\"VToken::sweepToken: can not sweep underlying token\\\");\\n        uint256 balance = token.balanceOf(address(this));\\n        token.safeTransfer(owner(), balance);\\n\\n        emit SweepToken(address(token));\\n    }\\n\\n    /**\\n     * @notice A public function to set new threshold of slot(block or second) difference after which funds will be sent to the protocol share reserve\\n     * @param _newReduceReservesBlockOrTimestampDelta slot(block or second) difference value\\n     * @custom:access Only Governance\\n     */\\n    function setReduceReservesBlockDelta(uint256 _newReduceReservesBlockOrTimestampDelta) external {\\n        _checkAccessAllowed(\\\"setReduceReservesBlockDelta(uint256)\\\");\\n        require(_newReduceReservesBlockOrTimestampDelta > 0, \\\"Invalid Input\\\");\\n        emit NewReduceReservesBlockDelta(reduceReservesBlockDelta, _newReduceReservesBlockOrTimestampDelta);\\n        reduceReservesBlockDelta = _newReduceReservesBlockOrTimestampDelta;\\n    }\\n\\n    /**\\n     * @notice Get the current allowance from `owner` for `spender`\\n     * @param owner The address of the account which owns the tokens to be spent\\n     * @param spender The address of the account which may transfer tokens\\n     * @return amount The number of tokens allowed to be spent (type(uint256).max means infinite)\\n     */\\n    function allowance(address owner, address spender) external view override returns (uint256) {\\n        return transferAllowances[owner][spender];\\n    }\\n\\n    /**\\n     * @notice Get the token balance of the `owner`\\n     * @param owner The address of the account to query\\n     * @return amount The number of tokens owned by `owner`\\n     */\\n    function balanceOf(address owner) external view override returns (uint256) {\\n        return accountTokens[owner];\\n    }\\n\\n    /**\\n     * @notice Get a snapshot of the account's balances, and the cached exchange rate\\n     * @dev This is used by comptroller to more efficiently perform liquidity checks.\\n     * @param account Address of the account to snapshot\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return vTokenBalance User's balance of vTokens\\n     * @return borrowBalance Amount owed in terms of underlying\\n     * @return exchangeRate Stored exchange rate\\n     */\\n    function getAccountSnapshot(\\n        address account\\n    )\\n        external\\n        view\\n        override\\n        returns (uint256 error, uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRate)\\n    {\\n        return (NO_ERROR, accountTokens[account], _borrowBalanceStored(account), _exchangeRateStored());\\n    }\\n\\n    /**\\n     * @notice Get cash balance of this vToken in the underlying asset\\n     * @return cash The quantity of underlying asset owned by this contract\\n     */\\n    function getCash() external view override returns (uint256) {\\n        return _getCashPrior();\\n    }\\n\\n    /**\\n     * @notice Returns the current per slot(block or second) borrow interest rate for this vToken\\n     * @return rate The borrow interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function borrowRatePerBlock() external view override returns (uint256) {\\n        return interestRateModel.getBorrowRate(_getCashPrior(), totalBorrows, totalReserves, badDebt);\\n    }\\n\\n    /**\\n     * @notice Returns the current per-slot(block or second) supply interest rate for this v\\n     * @return rate The supply interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function supplyRatePerBlock() external view override returns (uint256) {\\n        return\\n            interestRateModel.getSupplyRate(\\n                _getCashPrior(),\\n                totalBorrows,\\n                totalReserves,\\n                reserveFactorMantissa,\\n                badDebt\\n            );\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceStored(address account) external view override returns (uint256) {\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateStored() external view override returns (uint256) {\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Accrue interest then return the up-to-date exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateCurrent() public override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Applies accrued interest to total borrows and reserves\\n     * @dev This calculates interest accrued from the last checkpointed slot(block or second)\\n     *  up to the current slot(block or second) and writes new checkpoint to storage and\\n     *  reduce spread reserves to protocol share reserve\\n     *  if currentSlot - reduceReservesBlockNumber >= slotDelta\\n     * @return Always NO_ERROR\\n     * @custom:event Emits AccrueInterest event on success\\n     * @custom:access Not restricted\\n     */\\n    function accrueInterest() public virtual override returns (uint256) {\\n        /* Remember the initial block number or timestamp */\\n        uint256 currentSlotNumber = getBlockNumberOrTimestamp();\\n        uint256 accrualSlotNumberPrior = accrualBlockNumber;\\n\\n        /* Short-circuit accumulating 0 interest */\\n        if (accrualSlotNumberPrior == currentSlotNumber) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Read the previous values out of storage */\\n        uint256 cashPrior = _getCashPrior();\\n        uint256 borrowsPrior = totalBorrows;\\n        uint256 reservesPrior = totalReserves;\\n        uint256 borrowIndexPrior = borrowIndex;\\n\\n        /* Calculate the current borrow interest rate */\\n        uint256 borrowRateMantissa = interestRateModel.getBorrowRate(cashPrior, borrowsPrior, reservesPrior, badDebt);\\n        require(borrowRateMantissa <= MAX_BORROW_RATE_MANTISSA, \\\"borrow rate is absurdly high\\\");\\n\\n        /* Calculate the number of slots elapsed since the last accrual */\\n        uint256 slotDelta = currentSlotNumber - accrualSlotNumberPrior;\\n\\n        /*\\n         * Calculate the interest accumulated into borrows and reserves and the new index:\\n         *  simpleInterestFactor = borrowRate * slotDelta\\n         *  interestAccumulated = simpleInterestFactor * totalBorrows\\n         *  totalBorrowsNew = interestAccumulated + totalBorrows\\n         *  totalReservesNew = interestAccumulated * reserveFactor + totalReserves\\n         *  borrowIndexNew = simpleInterestFactor * borrowIndex + borrowIndex\\n         */\\n\\n        Exp memory simpleInterestFactor = mul_(Exp({ mantissa: borrowRateMantissa }), slotDelta);\\n        uint256 interestAccumulated = mul_ScalarTruncate(simpleInterestFactor, borrowsPrior);\\n        uint256 totalBorrowsNew = interestAccumulated + borrowsPrior;\\n        uint256 totalReservesNew = mul_ScalarTruncateAddUInt(\\n            Exp({ mantissa: reserveFactorMantissa }),\\n            interestAccumulated,\\n            reservesPrior\\n        );\\n        uint256 borrowIndexNew = mul_ScalarTruncateAddUInt(simpleInterestFactor, borrowIndexPrior, borrowIndexPrior);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the previously calculated values into storage */\\n        accrualBlockNumber = currentSlotNumber;\\n        borrowIndex = borrowIndexNew;\\n        totalBorrows = totalBorrowsNew;\\n        totalReserves = totalReservesNew;\\n\\n        if (currentSlotNumber - reduceReservesBlockNumber >= reduceReservesBlockDelta) {\\n            reduceReservesBlockNumber = currentSlotNumber;\\n            if (cashPrior < totalReservesNew) {\\n                _reduceReservesFresh(cashPrior);\\n            } else {\\n                _reduceReservesFresh(totalReservesNew);\\n            }\\n        }\\n\\n        /* We emit an AccrueInterest event */\\n        emit AccrueInterest(cashPrior, interestAccumulated, borrowIndexNew, totalBorrowsNew);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice User supplies assets into the market and receives vTokens in exchange\\n     * @dev Assumes interest has already been accrued up to the current block or timestamp\\n     * @param payer The address of the account which is sending the assets for supply\\n     * @param minter The address of the account which is supplying the assets\\n     * @param mintAmount The amount of the underlying asset to supply\\n     */\\n    function _mintFresh(address payer, address minter, uint256 mintAmount) internal {\\n        /* Fail if mint not allowed */\\n        comptroller.preMintHook(address(this), minter, mintAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert MintFreshnessCheck();\\n        }\\n\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         *  We call `_doTransferIn` for the minter and the mintAmount.\\n         *  `_doTransferIn` reverts if anything goes wrong, since we can't be sure if\\n         *  side-effects occurred. The function returns the amount actually transferred,\\n         *  in case of a fee. On success, the vToken holds an additional `actualMintAmount`\\n         *  of cash.\\n         */\\n        uint256 actualMintAmount = _doTransferIn(payer, mintAmount);\\n\\n        /*\\n         * We get the current exchange rate and calculate the number of vTokens to be minted:\\n         *  mintTokens = actualMintAmount / exchangeRate\\n         */\\n\\n        uint256 mintTokens = div_(actualMintAmount, exchangeRate);\\n\\n        /*\\n         * We calculate the new total supply of vTokens and minter token balance, checking for overflow:\\n         *  totalSupplyNew = totalSupply + mintTokens\\n         *  accountTokensNew = accountTokens[minter] + mintTokens\\n         * And write them into storage\\n         */\\n        totalSupply = totalSupply + mintTokens;\\n        uint256 balanceAfter = accountTokens[minter] + mintTokens;\\n        accountTokens[minter] = balanceAfter;\\n\\n        /* We emit a Mint event, and a Transfer event */\\n        emit Mint(minter, actualMintAmount, mintTokens, balanceAfter);\\n        emit Transfer(address(0), minter, mintTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.mintVerify(address(this), minter, actualMintAmount, mintTokens);\\n    }\\n\\n    /**\\n     * @notice Redeemer redeems vTokens in exchange for the underlying assets, transferred to the receiver. Redeemer and receiver can be the same\\n     *   address, or different addresses if the receiver was previously approved by the redeemer as a valid delegate (see Comptroller.updateDelegate)\\n     * @dev Assumes interest has already been accrued up to the current slot(block or second)\\n     * @param redeemer The address of the account which is redeeming the tokens\\n     * @param receiver The receiver of the underlying tokens\\n     * @param redeemTokensIn The number of vTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     * @param redeemAmountIn The number of underlying tokens to receive from redeeming vTokens (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     */\\n    function _redeemFresh(address redeemer, address receiver, uint256 redeemTokensIn, uint256 redeemAmountIn) internal {\\n        require(redeemTokensIn == 0 || redeemAmountIn == 0, \\\"one of redeemTokensIn or redeemAmountIn must be zero\\\");\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RedeemFreshnessCheck();\\n        }\\n\\n        /* exchangeRate = invoke Exchange Rate Stored() */\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        uint256 redeemTokens;\\n        uint256 redeemAmount;\\n\\n        /* If redeemTokensIn > 0: */\\n        if (redeemTokensIn > 0) {\\n            /*\\n             * We calculate the exchange rate and the amount of underlying to be redeemed:\\n             *  redeemTokens = redeemTokensIn\\n             */\\n            redeemTokens = redeemTokensIn;\\n        } else {\\n            /*\\n             * We get the current exchange rate and calculate the amount to be redeemed:\\n             *  redeemTokens = redeemAmountIn / exchangeRate\\n             */\\n            redeemTokens = div_(redeemAmountIn, exchangeRate);\\n\\n            uint256 _redeemAmount = mul_(redeemTokens, exchangeRate);\\n            if (_redeemAmount != 0 && _redeemAmount != redeemAmountIn) redeemTokens++; // round up\\n        }\\n\\n        // redeemAmount = exchangeRate * redeemTokens\\n        redeemAmount = mul_ScalarTruncate(exchangeRate, redeemTokens);\\n\\n        // Revert if amount is zero\\n        if (redeemAmount == 0) {\\n            revert(\\\"redeemAmount is zero\\\");\\n        }\\n\\n        /* Fail if redeem not allowed */\\n        comptroller.preRedeemHook(address(this), redeemer, redeemTokens);\\n\\n        /* Fail gracefully if protocol has insufficient cash */\\n        if (_getCashPrior() - totalReserves < redeemAmount) {\\n            revert RedeemTransferOutNotPossible();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing reduced supply before external transfer.\\n         */\\n        totalSupply = totalSupply - redeemTokens;\\n        uint256 balanceAfter = accountTokens[redeemer] - redeemTokens;\\n        accountTokens[redeemer] = balanceAfter;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the redeemAmount.\\n         *  On success, the vToken has redeemAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, redeemAmount);\\n\\n        /* We emit a Transfer event, and a Redeem event */\\n        emit Transfer(redeemer, address(this), redeemTokens);\\n        emit Redeem(redeemer, redeemAmount, redeemTokens, balanceAfter);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.redeemVerify(address(this), redeemer, redeemAmount, redeemTokens);\\n    }\\n\\n    /**\\n     * @notice Users or their delegates borrow assets from the protocol\\n     * @param borrower User who borrows the assets\\n     * @param receiver The receiver of the tokens, if called by a delegate\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     */\\n    function _borrowFresh(address borrower, address receiver, uint256 borrowAmount) internal {\\n        /* Fail if borrow not allowed */\\n        comptroller.preBorrowHook(address(this), borrower, borrowAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert BorrowFreshnessCheck();\\n        }\\n\\n        /* Fail gracefully if protocol has insufficient underlying cash */\\n        if (_getCashPrior() - totalReserves < borrowAmount) {\\n            revert BorrowCashNotAvailable();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on overflow:\\n         *  accountBorrowNew = accountBorrow + borrowAmount\\n         *  totalBorrowsNew = totalBorrows + borrowAmount\\n         */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 accountBorrowsNew = accountBorrowsPrev + borrowAmount;\\n        uint256 totalBorrowsNew = totalBorrows + borrowAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing increased borrow before external transfer.\\n        `*/\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the borrowAmount.\\n         *  On success, the vToken borrowAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, borrowAmount);\\n\\n        /* We emit a Borrow event */\\n        emit Borrow(borrower, borrowAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.borrowVerify(address(this), borrower, borrowAmount);\\n    }\\n\\n    /**\\n     * @notice Borrows are repaid by another user (possibly the borrower).\\n     * @param payer the account paying off the borrow\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount the amount of underlying tokens being returned, or type(uint256).max for the full outstanding amount\\n     * @return (uint) the actual repayment amount.\\n     */\\n    function _repayBorrowFresh(address payer, address borrower, uint256 repayAmount) internal returns (uint256) {\\n        /* Fail if repayBorrow not allowed */\\n        comptroller.preRepayHook(address(this), borrower);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RepayBorrowFreshnessCheck();\\n        }\\n\\n        /* We fetch the amount the borrower owes, with accumulated interest */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n\\n        uint256 repayAmountFinal = repayAmount >= accountBorrowsPrev ? accountBorrowsPrev : repayAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We call _doTransferIn for the payer and the repayAmount\\n         *  On success, the vToken holds an additional repayAmount of cash.\\n         *  _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         *   it returns the amount actually transferred, in case of a fee.\\n         */\\n        uint256 actualRepayAmount = _doTransferIn(payer, repayAmountFinal);\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on underflow:\\n         *  accountBorrowsNew = accountBorrows - actualRepayAmount\\n         *  totalBorrowsNew = totalBorrows - actualRepayAmount\\n         */\\n        uint256 accountBorrowsNew = accountBorrowsPrev - actualRepayAmount;\\n        uint256 totalBorrowsNew = totalBorrows - actualRepayAmount;\\n\\n        /* We write the previously calculated values into storage */\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /* We emit a RepayBorrow event */\\n        emit RepayBorrow(payer, borrower, actualRepayAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.repayBorrowVerify(address(this), payer, borrower, actualRepayAmount, borrowIndex);\\n\\n        return actualRepayAmount;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal nonReentrant {\\n        accrueInterest();\\n\\n        uint256 error = vTokenCollateral.accrueInterest();\\n        if (error != NO_ERROR) {\\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted liquidation failed\\n            revert LiquidateAccrueCollateralInterestFailed(error);\\n        }\\n\\n        _liquidateBorrowFresh(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice The liquidator liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrowFresh(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal {\\n        /* Fail if liquidate not allowed */\\n        comptroller.preLiquidateHook(\\n            address(this),\\n            address(vTokenCollateral),\\n            borrower,\\n            repayAmount,\\n            skipLiquidityCheck\\n        );\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert LiquidateFreshnessCheck();\\n        }\\n\\n        /* Verify vTokenCollateral market's slot(block or second) number equals current slot(block or second) number */\\n        if (vTokenCollateral.accrualBlockNumber() != getBlockNumberOrTimestamp()) {\\n            revert LiquidateCollateralFreshnessCheck();\\n        }\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateLiquidatorIsBorrower();\\n        }\\n\\n        /* Fail if repayAmount = 0 */\\n        if (repayAmount == 0) {\\n            revert LiquidateCloseAmountIsZero();\\n        }\\n\\n        /* Fail if repayAmount = type(uint256).max */\\n        if (repayAmount == type(uint256).max) {\\n            revert LiquidateCloseAmountIsUintMax();\\n        }\\n\\n        /* Fail if repayBorrow fails */\\n        uint256 actualRepayAmount = _repayBorrowFresh(liquidator, borrower, repayAmount);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We calculate the number of collateral tokens that will be seized */\\n        (uint256 amountSeizeError, uint256 seizeTokens) = comptroller.liquidateCalculateSeizeTokens(\\n            address(this),\\n            address(vTokenCollateral),\\n            actualRepayAmount\\n        );\\n        require(amountSeizeError == NO_ERROR, \\\"LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED\\\");\\n\\n        /* Revert if borrower collateral token balance < seizeTokens */\\n        require(vTokenCollateral.balanceOf(borrower) >= seizeTokens, \\\"LIQUIDATE_SEIZE_TOO_MUCH\\\");\\n\\n        // If this is also the collateral, call _seize internally to avoid re-entrancy, otherwise make an external call\\n        if (address(vTokenCollateral) == address(this)) {\\n            _seize(address(this), liquidator, borrower, seizeTokens);\\n        } else {\\n            vTokenCollateral.seize(liquidator, borrower, seizeTokens);\\n        }\\n\\n        /* We emit a LiquidateBorrow event */\\n        emit LiquidateBorrow(liquidator, borrower, actualRepayAmount, address(vTokenCollateral), seizeTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.liquidateBorrowVerify(\\n            address(this),\\n            address(vTokenCollateral),\\n            liquidator,\\n            borrower,\\n            actualRepayAmount,\\n            seizeTokens\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Called only during an in-kind liquidation, or by liquidateBorrow during the liquidation of another VToken.\\n     *  It's absolutely critical to use msg.sender as the seizer vToken and not a parameter.\\n     * @param seizerContract The contract seizing the collateral (either borrowed vToken or Comptroller)\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     */\\n    function _seize(address seizerContract, address liquidator, address borrower, uint256 seizeTokens) internal {\\n        /* Fail if seize not allowed */\\n        comptroller.preSeizeHook(address(this), seizerContract, liquidator, borrower);\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateSeizeLiquidatorIsBorrower();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and liquidator token balances, failing on underflow/overflow:\\n         *  borrowerTokensNew = accountTokens[borrower] - seizeTokens\\n         *  liquidatorTokensNew = accountTokens[liquidator] + seizeTokens\\n         */\\n        uint256 liquidationIncentiveMantissa = ComptrollerViewInterface(address(comptroller))\\n            .liquidationIncentiveMantissa();\\n        uint256 numerator = mul_(seizeTokens, Exp({ mantissa: protocolSeizeShareMantissa }));\\n        uint256 protocolSeizeTokens = div_(numerator, Exp({ mantissa: liquidationIncentiveMantissa }));\\n        uint256 liquidatorSeizeTokens = seizeTokens - protocolSeizeTokens;\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n        uint256 protocolSeizeAmount = mul_ScalarTruncate(exchangeRate, protocolSeizeTokens);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the calculated values into storage */\\n        totalSupply = totalSupply - protocolSeizeTokens;\\n        accountTokens[borrower] = accountTokens[borrower] - seizeTokens;\\n        accountTokens[liquidator] = accountTokens[liquidator] + liquidatorSeizeTokens;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, protocolSeizeAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.LIQUIDATION\\n        );\\n\\n        /* Emit a Transfer event */\\n        emit Transfer(borrower, liquidator, liquidatorSeizeTokens);\\n        emit ProtocolSeize(borrower, protocolShareReserve, protocolSeizeAmount);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.seizeVerify(address(this), seizerContract, liquidator, borrower, seizeTokens);\\n    }\\n\\n    function _setComptroller(ComptrollerInterface newComptroller) internal {\\n        ComptrollerInterface oldComptroller = comptroller;\\n        // Ensure invoke comptroller.isComptroller() returns true\\n        require(newComptroller.isComptroller(), \\\"marker method returned false\\\");\\n\\n        // Set market's comptroller to newComptroller\\n        comptroller = newComptroller;\\n\\n        // Emit NewComptroller(oldComptroller, newComptroller)\\n        emit NewComptroller(oldComptroller, newComptroller);\\n    }\\n\\n    /**\\n     * @notice Sets a new reserve factor for the protocol (*requires fresh interest accrual)\\n     * @dev Admin function to set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     */\\n    function _setReserveFactorFresh(uint256 newReserveFactorMantissa) internal {\\n        // Verify market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetReserveFactorFreshCheck();\\n        }\\n\\n        // Check newReserveFactor \\u2264 maxReserveFactor\\n        if (newReserveFactorMantissa > MAX_RESERVE_FACTOR_MANTISSA) {\\n            revert SetReserveFactorBoundsCheck();\\n        }\\n\\n        uint256 oldReserveFactorMantissa = reserveFactorMantissa;\\n        reserveFactorMantissa = newReserveFactorMantissa;\\n\\n        emit NewReserveFactor(oldReserveFactorMantissa, newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Add reserves by transferring from caller\\n     * @dev Requires fresh interest accrual\\n     * @param addAmount Amount of addition to reserves\\n     * @return actualAddAmount The actual amount added, excluding the potential token fees\\n     */\\n    function _addReservesFresh(uint256 addAmount) internal returns (uint256) {\\n        // totalReserves + actualAddAmount\\n        uint256 totalReservesNew;\\n        uint256 actualAddAmount;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert AddReservesFactorFreshCheck(actualAddAmount);\\n        }\\n\\n        actualAddAmount = _doTransferIn(msg.sender, addAmount);\\n        totalReservesNew = totalReserves + actualAddAmount;\\n        totalReserves = totalReservesNew;\\n        emit ReservesAdded(msg.sender, actualAddAmount, totalReservesNew);\\n\\n        return actualAddAmount;\\n    }\\n\\n    /**\\n     * @notice Reduces reserves by transferring to the protocol reserve contract\\n     * @dev Requires fresh interest accrual\\n     * @param reduceAmount Amount of reduction to reserves\\n     */\\n    function _reduceReservesFresh(uint256 reduceAmount) internal {\\n        if (reduceAmount == 0) {\\n            return;\\n        }\\n        // totalReserves - reduceAmount\\n        uint256 totalReservesNew;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert ReduceReservesFreshCheck();\\n        }\\n\\n        // Fail gracefully if protocol has insufficient underlying cash\\n        if (_getCashPrior() < reduceAmount) {\\n            revert ReduceReservesCashNotAvailable();\\n        }\\n\\n        // Check reduceAmount \\u2264 reserves[n] (totalReserves)\\n        if (reduceAmount > totalReserves) {\\n            revert ReduceReservesCashValidation();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        totalReservesNew = totalReserves - reduceAmount;\\n\\n        // Store reserves[n+1] = reserves[n] - reduceAmount\\n        totalReserves = totalReservesNew;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, reduceAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.SPREAD\\n        );\\n\\n        emit SpreadReservesReduced(protocolShareReserve, reduceAmount, totalReservesNew);\\n    }\\n\\n    /**\\n     * @notice updates the interest rate model (*requires fresh interest accrual)\\n     * @dev Admin function to update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     */\\n    function _setInterestRateModelFresh(InterestRateModel newInterestRateModel) internal {\\n        // Used to store old model for use in the event that is emitted on success\\n        InterestRateModel oldInterestRateModel;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetInterestRateModelFreshCheck();\\n        }\\n\\n        // Track the market's current interest rate model\\n        oldInterestRateModel = interestRateModel;\\n\\n        // Ensure invoke newInterestRateModel.isInterestRateModel() returns true\\n        require(newInterestRateModel.isInterestRateModel(), \\\"marker method returned false\\\");\\n\\n        // Set the interest rate model to newInterestRateModel\\n        interestRateModel = newInterestRateModel;\\n\\n        // Emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel)\\n        emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel);\\n    }\\n\\n    /**\\n     * Safe Token **\\n     */\\n\\n    /**\\n     * @dev Similar to ERC-20 transfer, but handles tokens that have transfer fees.\\n     *      This function returns the actual amount received,\\n     *      which may be less than `amount` if there is a fee attached to the transfer.\\n     * @param from Sender of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     * @return Actual amount received\\n     */\\n    function _doTransferIn(address from, uint256 amount) internal virtual returns (uint256) {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        uint256 balanceBefore = token.balanceOf(address(this));\\n        token.safeTransferFrom(from, address(this), amount);\\n        uint256 balanceAfter = token.balanceOf(address(this));\\n        // Return the amount that was *actually* transferred\\n        return balanceAfter - balanceBefore;\\n    }\\n\\n    /**\\n     * @dev Just a regular ERC-20 transfer, reverts on failure\\n     * @param to Receiver of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     */\\n    function _doTransferOut(address to, uint256 amount) internal virtual {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        token.safeTransfer(to, amount);\\n    }\\n\\n    /**\\n     * @notice Transfer `tokens` tokens from `src` to `dst` by `spender`\\n     * @dev Called by both `transfer` and `transferFrom` internally\\n     * @param spender The address of the account performing the transfer\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param tokens The number of tokens to transfer\\n     */\\n    function _transferTokens(address spender, address src, address dst, uint256 tokens) internal {\\n        /* Fail if transfer not allowed */\\n        comptroller.preTransferHook(address(this), src, dst, tokens);\\n\\n        /* Do not allow self-transfers */\\n        if (src == dst) {\\n            revert TransferNotAllowed();\\n        }\\n\\n        /* Get the allowance, infinite for the account owner */\\n        uint256 startingAllowance;\\n        if (spender == src) {\\n            startingAllowance = type(uint256).max;\\n        } else {\\n            startingAllowance = transferAllowances[src][spender];\\n        }\\n\\n        /* Do the calculations, checking for {under,over}flow */\\n        uint256 allowanceNew = startingAllowance - tokens;\\n        uint256 srcTokensNew = accountTokens[src] - tokens;\\n        uint256 dstTokensNew = accountTokens[dst] + tokens;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n\\n        accountTokens[src] = srcTokensNew;\\n        accountTokens[dst] = dstTokensNew;\\n\\n        /* Eat some of the allowance (if necessary) */\\n        if (startingAllowance != type(uint256).max) {\\n            transferAllowances[src][spender] = allowanceNew;\\n        }\\n\\n        /* We emit a Transfer event */\\n        emit Transfer(src, dst, tokens);\\n\\n        comptroller.transferVerify(address(this), src, dst, tokens);\\n    }\\n\\n    /**\\n     * @notice Initialize the money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     */\\n    function _initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n        require(accrualBlockNumber == 0 && borrowIndex == 0, \\\"market may only be initialized once\\\");\\n\\n        // Set initial exchange rate\\n        initialExchangeRateMantissa = initialExchangeRateMantissa_;\\n        require(initialExchangeRateMantissa > 0, \\\"initial exchange rate must be greater than zero.\\\");\\n\\n        _setComptroller(comptroller_);\\n\\n        // Initialize slot(block or second) number and borrow index (slot(block or second) number mocks depend on comptroller being set)\\n        accrualBlockNumber = getBlockNumberOrTimestamp();\\n        borrowIndex = MANTISSA_ONE;\\n\\n        // Set the interest rate model (depends on slot(block or second) number / borrow index)\\n        _setInterestRateModelFresh(interestRateModel_);\\n\\n        _setReserveFactorFresh(reserveFactorMantissa_);\\n\\n        name = name_;\\n        symbol = symbol_;\\n        decimals = decimals_;\\n        _setShortfallContract(riskManagement.shortfall);\\n        _setProtocolShareReserve(riskManagement.protocolShareReserve);\\n        protocolSeizeShareMantissa = DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA;\\n\\n        // Set underlying and sanity check it\\n        underlying = underlying_;\\n        IERC20Upgradeable(underlying).totalSupply();\\n\\n        // The counter starts true to prevent changing it from zero to non-zero (i.e. smaller cost/refund)\\n        _notEntered = true;\\n        _transferOwnership(admin_);\\n    }\\n\\n    function _setShortfallContract(address shortfall_) internal {\\n        ensureNonzeroAddress(shortfall_);\\n        address oldShortfall = shortfall;\\n        shortfall = shortfall_;\\n        emit NewShortfallContract(oldShortfall, shortfall_);\\n    }\\n\\n    function _setProtocolShareReserve(address payable protocolShareReserve_) internal {\\n        ensureNonzeroAddress(protocolShareReserve_);\\n        address oldProtocolShareReserve = address(protocolShareReserve);\\n        protocolShareReserve = protocolShareReserve_;\\n        emit NewProtocolShareReserve(oldProtocolShareReserve, address(protocolShareReserve_));\\n    }\\n\\n    function _ensureSenderIsDelegateOf(address user) internal view {\\n        if (!ComptrollerViewInterface(address(comptroller)).approvedDelegates(user, msg.sender)) {\\n            revert DelegateNotApproved();\\n        }\\n    }\\n\\n    /**\\n     * @notice Gets balance of this contract in terms of the underlying\\n     * @dev This excludes the value of the current message, if any\\n     * @return The quantity of underlying tokens owned by this contract\\n     */\\n    function _getCashPrior() internal view virtual returns (uint256) {\\n        return IERC20Upgradeable(underlying).balanceOf(address(this));\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance the calculated balance\\n     */\\n    function _borrowBalanceStored(address account) internal view returns (uint256) {\\n        /* Get borrowBalance and borrowIndex */\\n        BorrowSnapshot memory borrowSnapshot = accountBorrows[account];\\n\\n        /* If borrowBalance = 0 then borrowIndex is likely also 0.\\n         * Rather than failing the calculation with a division by 0, we immediately return 0 in this case.\\n         */\\n        if (borrowSnapshot.principal == 0) {\\n            return 0;\\n        }\\n\\n        /* Calculate new borrow balance using the interest index:\\n         *  recentBorrowBalance = borrower.borrowBalance * market.borrowIndex / borrower.borrowIndex\\n         */\\n        uint256 principalTimesIndex = borrowSnapshot.principal * borrowIndex;\\n\\n        return principalTimesIndex / borrowSnapshot.interestIndex;\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function _exchangeRateStored() internal view virtual returns (uint256) {\\n        uint256 _totalSupply = totalSupply;\\n        if (_totalSupply == 0) {\\n            /*\\n             * If there are no tokens minted:\\n             *  exchangeRate = initialExchangeRate\\n             */\\n            return initialExchangeRateMantissa;\\n        }\\n        /*\\n         * Otherwise:\\n         *  exchangeRate = (totalCash + totalBorrows + badDebt - totalReserves) / totalSupply\\n         */\\n        uint256 totalCash = _getCashPrior();\\n        uint256 cashPlusBorrowsMinusReserves = totalCash + totalBorrows + badDebt - totalReserves;\\n        uint256 exchangeRate = (cashPlusBorrowsMinusReserves * EXP_SCALE) / _totalSupply;\\n\\n        return exchangeRate;\\n    }\\n}\\n\",\"keccak256\":\"0xa220ca317fe69b920b86e43f054c43b5f891f12160fd312c9a21668f969ee056\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { ComptrollerInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\n\\n/**\\n * @title VTokenStorage\\n * @author Venus\\n * @notice Storage layout used by the `VToken` contract\\n */\\n// solhint-disable-next-line max-states-count\\ncontract VTokenStorage {\\n    /**\\n     * @notice Container for borrow balance information\\n     * @member principal Total balance (with accrued interest), after applying the most recent balance-changing action\\n     * @member interestIndex Global borrowIndex as of the most recent balance-changing action\\n     */\\n    struct BorrowSnapshot {\\n        uint256 principal;\\n        uint256 interestIndex;\\n    }\\n\\n    /**\\n     * @dev Guard variable for re-entrancy checks\\n     */\\n    bool internal _notEntered;\\n\\n    /**\\n     * @notice Underlying asset for this VToken\\n     */\\n    address public underlying;\\n\\n    /**\\n     * @notice EIP-20 token name for this token\\n     */\\n    string public name;\\n\\n    /**\\n     * @notice EIP-20 token symbol for this token\\n     */\\n    string public symbol;\\n\\n    /**\\n     * @notice EIP-20 token decimals for this token\\n     */\\n    uint8 public decimals;\\n\\n    /**\\n     * @notice Protocol share Reserve contract address\\n     */\\n    address payable public protocolShareReserve;\\n\\n    /**\\n     * @notice Contract which oversees inter-vToken operations\\n     */\\n    ComptrollerInterface public comptroller;\\n\\n    /**\\n     * @notice Model which tells what the current interest rate should be\\n     */\\n    InterestRateModel public interestRateModel;\\n\\n    // Initial exchange rate used when minting the first VTokens (used when totalSupply = 0)\\n    uint256 internal initialExchangeRateMantissa;\\n\\n    /**\\n     * @notice Fraction of interest currently set aside for reserves\\n     */\\n    uint256 public reserveFactorMantissa;\\n\\n    /**\\n     * @notice Slot(block or second) number that interest was last accrued at\\n     */\\n    uint256 public accrualBlockNumber;\\n\\n    /**\\n     * @notice Accumulator of the total earned interest rate since the opening of the market\\n     */\\n    uint256 public borrowIndex;\\n\\n    /**\\n     * @notice Total amount of outstanding borrows of the underlying in this market\\n     */\\n    uint256 public totalBorrows;\\n\\n    /**\\n     * @notice Total amount of reserves of the underlying held in this market\\n     */\\n    uint256 public totalReserves;\\n\\n    /**\\n     * @notice Total number of tokens in circulation\\n     */\\n    uint256 public totalSupply;\\n\\n    /**\\n     * @notice Total bad debt of the market\\n     */\\n    uint256 public badDebt;\\n\\n    // Official record of token balances for each account\\n    mapping(address => uint256) internal accountTokens;\\n\\n    // Approved token transfer amounts on behalf of others\\n    mapping(address => mapping(address => uint256)) internal transferAllowances;\\n\\n    // Mapping of account addresses to outstanding borrow balances\\n    mapping(address => BorrowSnapshot) internal accountBorrows;\\n\\n    /**\\n     * @notice Share of seized collateral that is added to reserves\\n     */\\n    uint256 public protocolSeizeShareMantissa;\\n\\n    /**\\n     * @notice Storage of Shortfall contract address\\n     */\\n    address public shortfall;\\n\\n    /**\\n     * @notice delta slot (block or second) after which reserves will be reduced\\n     */\\n    uint256 public reduceReservesBlockDelta;\\n\\n    /**\\n     * @notice last slot (block or second) number at which reserves were reduced\\n     */\\n    uint256 public reduceReservesBlockNumber;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n}\\n\\n/**\\n * @title VTokenInterface\\n * @author Venus\\n * @notice Interface implemented by the `VToken` contract\\n */\\nabstract contract VTokenInterface is VTokenStorage {\\n    struct RiskManagementInit {\\n        address shortfall;\\n        address payable protocolShareReserve;\\n    }\\n\\n    /*** Market Events ***/\\n\\n    /**\\n     * @notice Event emitted when interest is accrued\\n     */\\n    event AccrueInterest(uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when tokens are minted\\n     */\\n    event Mint(address indexed minter, uint256 mintAmount, uint256 mintTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when tokens are redeemed\\n     */\\n    event Redeem(address indexed redeemer, uint256 redeemAmount, uint256 redeemTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when underlying is borrowed\\n     */\\n    event Borrow(address indexed borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when a borrow is repaid\\n     */\\n    event RepayBorrow(\\n        address indexed payer,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        uint256 accountBorrows,\\n        uint256 totalBorrows\\n    );\\n\\n    /**\\n     * @notice Event emitted when bad debt is accumulated on a market\\n     * @param borrower borrower to \\\"forgive\\\"\\n     * @param badDebtDelta amount of new bad debt recorded\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtIncreased(address indexed borrower, uint256 badDebtDelta, uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when bad debt is recovered via an auction\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtRecovered(uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when a borrow is liquidated\\n     */\\n    event LiquidateBorrow(\\n        address indexed liquidator,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        address indexed vTokenCollateral,\\n        uint256 seizeTokens\\n    );\\n\\n    /*** Admin Events ***/\\n\\n    /**\\n     * @notice Event emitted when comptroller is changed\\n     */\\n    event NewComptroller(ComptrollerInterface indexed oldComptroller, ComptrollerInterface indexed newComptroller);\\n\\n    /**\\n     * @notice Event emitted when shortfall contract address is changed\\n     */\\n    event NewShortfallContract(address indexed oldShortfall, address indexed newShortfall);\\n\\n    /**\\n     * @notice Event emitted when protocol share reserve contract address is changed\\n     */\\n    event NewProtocolShareReserve(address indexed oldProtocolShareReserve, address indexed newProtocolShareReserve);\\n\\n    /**\\n     * @notice Event emitted when interestRateModel is changed\\n     */\\n    event NewMarketInterestRateModel(\\n        InterestRateModel indexed oldInterestRateModel,\\n        InterestRateModel indexed newInterestRateModel\\n    );\\n\\n    /**\\n     * @notice Event emitted when protocol seize share is changed\\n     */\\n    event NewProtocolSeizeShare(uint256 oldProtocolSeizeShareMantissa, uint256 newProtocolSeizeShareMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserve factor is changed\\n     */\\n    event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserves are added\\n     */\\n    event ReservesAdded(address indexed benefactor, uint256 addAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice Event emitted when the spread reserves are reduced\\n     */\\n    event SpreadReservesReduced(address indexed protocolShareReserve, uint256 reduceAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice EIP20 Transfer event\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 amount);\\n\\n    /**\\n     * @notice EIP20 Approval event\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\\n\\n    /**\\n     * @notice Event emitted when healing the borrow\\n     */\\n    event HealBorrow(address indexed payer, address indexed borrower, uint256 repayAmount);\\n\\n    /**\\n     * @notice Event emitted when tokens are swept\\n     */\\n    event SweepToken(address indexed token);\\n\\n    /**\\n     * @notice Event emitted when reduce reserves slot (block or second) delta is changed\\n     */\\n    event NewReduceReservesBlockDelta(\\n        uint256 oldReduceReservesBlockOrTimestampDelta,\\n        uint256 newReduceReservesBlockOrTimestampDelta\\n    );\\n\\n    /**\\n     * @notice Event emitted when liquidation reserves are reduced\\n     */\\n    event ProtocolSeize(address indexed from, address indexed to, uint256 amount);\\n\\n    /*** User Interface ***/\\n\\n    function mint(uint256 mintAmount) external virtual returns (uint256);\\n\\n    function mintBehalf(address minter, uint256 mintAllowed) external virtual returns (uint256);\\n\\n    function redeem(uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemUnderlying(uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function redeemUnderlyingBehalf(address redeemer, uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function borrow(uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function borrowBehalf(address borrwwer, uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function repayBorrow(uint256 repayAmount) external virtual returns (uint256);\\n\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external virtual returns (uint256);\\n\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external virtual returns (uint256);\\n\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external virtual;\\n\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipCloseFactorCheck\\n    ) external virtual;\\n\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external virtual;\\n\\n    function transfer(address dst, uint256 amount) external virtual returns (bool);\\n\\n    function transferFrom(address src, address dst, uint256 amount) external virtual returns (bool);\\n\\n    function accrueInterest() external virtual returns (uint256);\\n\\n    function sweepToken(IERC20Upgradeable token) external virtual;\\n\\n    /*** Admin Functions ***/\\n\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external virtual;\\n\\n    function reduceReserves(uint256 reduceAmount) external virtual;\\n\\n    function exchangeRateCurrent() external virtual returns (uint256);\\n\\n    function borrowBalanceCurrent(address account) external virtual returns (uint256);\\n\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external virtual;\\n\\n    function addReserves(uint256 addAmount) external virtual;\\n\\n    function totalBorrowsCurrent() external virtual returns (uint256);\\n\\n    function balanceOfUnderlying(address owner) external virtual returns (uint256);\\n\\n    function approve(address spender, uint256 amount) external virtual returns (bool);\\n\\n    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool);\\n\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool);\\n\\n    function allowance(address owner, address spender) external view virtual returns (uint256);\\n\\n    function balanceOf(address owner) external view virtual returns (uint256);\\n\\n    function getAccountSnapshot(address account) external view virtual returns (uint256, uint256, uint256, uint256);\\n\\n    function borrowRatePerBlock() external view virtual returns (uint256);\\n\\n    function supplyRatePerBlock() external view virtual returns (uint256);\\n\\n    function borrowBalanceStored(address account) external view virtual returns (uint256);\\n\\n    function exchangeRateStored() external view virtual returns (uint256);\\n\\n    function getCash() external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is a VToken contract (for inspection)\\n     * @return Always true\\n     */\\n    function isVToken() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7c4cbb879e3a931cfee4fa7a9eb1978eddff18087a1c4f56decedb84c2479f1e\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\",\"keccak256\":\"0x54ab3a6f3bc87569ed12370f3470a1ec84cea9796d4d0ccf3d07dd4280c044aa\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/validators.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\\nerror ZeroAddressNotAllowed();\\n\\n/// @notice Checks if the provided address is nonzero, reverts otherwise\\n/// @param address_ Address to check\\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\\nfunction ensureNonzeroAddress(address address_) pure {\\n    if (address_ == address(0)) {\\n        revert ZeroAddressNotAllowed();\\n    }\\n}\\n\",\"keccak256\":\"0x93bdd5cfb100f0f9a1d446857e23c3633df6ab12c266333c978428edd96b1367\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface IProtocolShareReserve {\\n    /// @notice it represents the type of vToken income\\n    enum IncomeType {\\n        SPREAD,\\n        LIQUIDATION\\n    }\\n\\n    function updateAssetsState(\\n        address comptroller,\\n        address asset,\\n        IncomeType incomeType\\n    ) external;\\n}\\n\",\"keccak256\":\"0x5fddc5b63fdd850b3b5c83576cda50dcb27a205dbb1a23af17d9da0d9f04fa0a\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { SECONDS_PER_YEAR } from \\\"./constants.sol\\\";\\n\\nabstract contract TimeManagerV8 {\\n    /// @notice Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 public immutable blocksOrSecondsPerYear;\\n\\n    /// @notice Acknowledges if a contract is time based or not\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    bool public immutable isTimeBased;\\n\\n    /// @notice Stores the current block timestamp or block number depending on isTimeBased\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    function() view returns (uint256) private immutable _getCurrentSlot;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n\\n    /// @notice Thrown when blocks per year is invalid\\n    error InvalidBlocksPerYear();\\n\\n    /// @notice Thrown when time based but blocks per year is provided\\n    error InvalidTimeBasedConfiguration();\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block\\n     * If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:error InvalidBlocksPerYear is thrown if blocksPerYear entered is zero and timeBased is false\\n     * @custom:error InvalidTimeBasedConfiguration is thrown if blocksPerYear entered is non zero and timeBased is true\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) {\\n        if (!timeBased_ && blocksPerYear_ == 0) {\\n            revert InvalidBlocksPerYear();\\n        }\\n\\n        if (timeBased_ && blocksPerYear_ != 0) {\\n            revert InvalidTimeBasedConfiguration();\\n        }\\n\\n        isTimeBased = timeBased_;\\n        blocksOrSecondsPerYear = timeBased_ ? SECONDS_PER_YEAR : blocksPerYear_;\\n        _getCurrentSlot = timeBased_ ? _getBlockTimestamp : _getBlockNumber;\\n    }\\n\\n    /**\\n     * @dev Function to simply retrieve block number or block timestamp\\n     * @return Current block number or block timestamp\\n     */\\n    function getBlockNumberOrTimestamp() public view virtual returns (uint256) {\\n        return _getCurrentSlot();\\n    }\\n\\n    /**\\n     * @dev Returns the current timestamp in seconds\\n     * @return The current timestamp\\n     */\\n    function _getBlockTimestamp() private view returns (uint256) {\\n        return block.timestamp;\\n    }\\n\\n    /**\\n     * @dev Returns the current block number\\n     * @return The current block number\\n     */\\n    function _getBlockNumber() private view returns (uint256) {\\n        return block.number;\\n    }\\n}\\n\",\"keccak256\":\"0x57a2bbb9b8e02b1c0a5c0e305fef1328a22db56c3d4b148c362010a6e767243c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\",\"keccak256\":\"0x14de93ead464da249af31bea0e3bcfb62ec693bea3475fb4d90f055ac81dc5eb\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { PrimeStorageV1 } from \\\"../PrimeStorage.sol\\\";\\n\\n/**\\n * @title IPrime\\n * @author Venus\\n * @notice Interface for Prime Token\\n */\\ninterface IPrime {\\n    struct APRInfo {\\n        // supply APR of the user in BPS\\n        uint256 supplyAPR;\\n        // borrow APR of the user in BPS\\n        uint256 borrowAPR;\\n        // total score of the market\\n        uint256 totalScore;\\n        // score of the user\\n        uint256 userScore;\\n        // capped XVS balance of the user\\n        uint256 xvsBalanceForScore;\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    struct Capital {\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    /**\\n     * @notice Returns boosted pending interest accrued for a user for all markets\\n     * @param user the account for which to get the accrued interests\\n     * @return pendingRewards the number of underlying tokens accrued by the user for all markets\\n     */\\n    function getPendingRewards(address user) external returns (PrimeStorageV1.PendingReward[] memory pendingRewards);\\n\\n    /**\\n     * @notice Update total score of multiple users and market\\n     * @param users accounts for which we need to update score\\n     */\\n    function updateScores(address[] memory users) external;\\n\\n    /**\\n     * @notice Update value of alpha\\n     * @param _alphaNumerator numerator of alpha. If alpha is 0.5 then numerator is 1\\n     * @param _alphaDenominator denominator of alpha. If alpha is 0.5 then denominator is 2\\n     */\\n    function updateAlpha(uint128 _alphaNumerator, uint128 _alphaDenominator) external;\\n\\n    /**\\n     * @notice Update multipliers for a market\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier new supply multiplier for the market, scaled by 1e18\\n     * @param borrowMultiplier new borrow multiplier for the market, scaled by 1e18\\n     */\\n    function updateMultipliers(address market, uint256 supplyMultiplier, uint256 borrowMultiplier) external;\\n\\n    /**\\n     * @notice Add a market to prime program\\n     * @param comptroller address of the comptroller\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier the multiplier for supply cap. It should be converted to 1e18\\n     * @param borrowMultiplier the multiplier for borrow cap. It should be converted to 1e18\\n     */\\n    function addMarket(\\n        address comptroller,\\n        address market,\\n        uint256 supplyMultiplier,\\n        uint256 borrowMultiplier\\n    ) external;\\n\\n    /**\\n     * @notice Set limits for total tokens that can be minted\\n     * @param _irrevocableLimit total number of irrevocable tokens that can be minted\\n     * @param _revocableLimit total number of revocable tokens that can be minted\\n     */\\n    function setLimit(uint256 _irrevocableLimit, uint256 _revocableLimit) external;\\n\\n    /**\\n     * @notice Directly issue prime tokens to users\\n     * @param isIrrevocable are the tokens being issued\\n     * @param users list of address to issue tokens to\\n     */\\n    function issue(bool isIrrevocable, address[] calldata users) external;\\n\\n    /**\\n     * @notice Executed by XVSVault whenever user's XVSVault balance changes\\n     * @param user the account address whose balance was updated\\n     */\\n    function xvsUpdated(address user) external;\\n\\n    /**\\n     * @notice accrues interest and updates score for an user for a specific market\\n     * @param user the account address for which to accrue interest and update score\\n     * @param market the market for which to accrue interest and update score\\n     */\\n    function accrueInterestAndUpdateScore(address user, address market) external;\\n\\n    /**\\n     * @notice For claiming prime token when staking period is completed\\n     */\\n    function claim() external;\\n\\n    /**\\n     * @notice For burning any prime token\\n     * @param user the account address for which the prime token will be burned\\n     */\\n    function burn(address user) external;\\n\\n    /**\\n     * @notice To pause or unpause claiming of interest\\n     */\\n    function togglePause() external;\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken) external returns (uint256);\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @param user the user for which to claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Distributes income from market since last distribution\\n     * @param vToken the market for which to distribute the income\\n     */\\n    function accrueInterest(address vToken) external;\\n\\n    /**\\n     * @notice Returns boosted interest accrued for a user\\n     * @param vToken the market for which to fetch the accrued interest\\n     * @param user the account for which to get the accrued interest\\n     * @return interestAccrued the number of underlying tokens accrued by the user since the last accrual\\n     */\\n    function getInterestAccrued(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Retrieves an array of all available markets\\n     * @return an array of addresses representing all available markets\\n     */\\n    function getAllMarkets() external view returns (address[] memory);\\n\\n    /**\\n     * @notice fetch the numbers of seconds remaining for staking period to complete\\n     * @param user the account address for which we are checking the remaining time\\n     * @return timeRemaining the number of seconds the user needs to wait to claim prime token\\n     */\\n    function claimTimeRemaining(address user) external view returns (uint256);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for user for a given market\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function calculateAPR(address market, address user) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for estimated supply, borrow and XVS staked\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @param borrow hypothetical borrow amount\\n     * @param supply hypothetical supply amount\\n     * @param xvsStaked hypothetical staked XVS amount\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function estimateAPR(\\n        address market,\\n        address user,\\n        uint256 borrow,\\n        uint256 supply,\\n        uint256 xvsStaked\\n    ) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice the total income that's going to be distributed in a year to prime token holders\\n     * @param vToken the market for which to fetch the total income that's going to distributed in a year\\n     * @return amount the total income\\n     */\\n    function incomeDistributionYearly(address vToken) external view returns (uint256 amount);\\n\\n    /**\\n     * @notice Returns if user is a prime holder\\n     * @return isPrimeHolder true if user is a prime holder\\n     */\\n    function isUserPrimeHolder(address user) external view returns (bool);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param loopsLimit Number of loops limit\\n     */\\n    function setMaxLoopsLimit(uint256 loopsLimit) external;\\n\\n    /**\\n     * @notice Update staked at timestamp for multiple users\\n     * @param users accounts for which we need to update staked at timestamp\\n     * @param timestamps new staked at timestamp for the users\\n     */\\n    function setStakedAt(address[] calldata users, uint256[] calldata timestamps) external;\\n}\\n\",\"keccak256\":\"0xd112f60183416ad796093b4a83a80ddc1b8b655965f02ae55ca82e2a0c68f97d\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\n/**\\n * @title PrimeStorageV1\\n * @author Venus\\n * @notice Storage for Prime Token\\n */\\ncontract PrimeStorageV1 {\\n    struct Token {\\n        bool exists;\\n        bool isIrrevocable;\\n    }\\n\\n    struct Market {\\n        uint256 supplyMultiplier;\\n        uint256 borrowMultiplier;\\n        uint256 rewardIndex;\\n        uint256 sumOfMembersScore;\\n        bool exists;\\n    }\\n\\n    struct Interest {\\n        uint256 accrued;\\n        uint256 score;\\n        uint256 rewardIndex;\\n    }\\n\\n    struct PendingReward {\\n        address vToken;\\n        address rewardToken;\\n        uint256 amount;\\n    }\\n\\n    /// @notice Base unit for computations, usually used in scaling (multiplications, divisions)\\n    uint256 internal constant EXP_SCALE = 1e18;\\n\\n    /// @notice maximum BPS = 100%\\n    uint256 internal constant MAXIMUM_BPS = 1e4;\\n\\n    /// @notice Mapping to get prime token's metadata\\n    mapping(address => Token) public tokens;\\n\\n    /// @notice  Tracks total irrevocable tokens minted\\n    uint256 public totalIrrevocable;\\n\\n    /// @notice  Tracks total revocable tokens minted\\n    uint256 public totalRevocable;\\n\\n    /// @notice  Indicates maximum revocable tokens that can be minted\\n    uint256 public revocableLimit;\\n\\n    /// @notice  Indicates maximum irrevocable tokens that can be minted\\n    uint256 public irrevocableLimit;\\n\\n    /// @notice Tracks when prime token eligible users started staking for claiming prime token\\n    mapping(address => uint256) public stakedAt;\\n\\n    /// @notice vToken to market configuration\\n    mapping(address => Market) public markets;\\n\\n    /// @notice vToken to user to user index\\n    mapping(address => mapping(address => Interest)) public interests;\\n\\n    /// @notice A list of boosted markets\\n    address[] internal _allMarkets;\\n\\n    /// @notice numerator of alpha. Ex: if alpha is 0.5 then this will be 1\\n    uint128 public alphaNumerator;\\n\\n    /// @notice denominator of alpha. Ex: if alpha is 0.5 then this will be 2\\n    uint128 public alphaDenominator;\\n\\n    /// @notice address of XVS vault\\n    address public xvsVault;\\n\\n    /// @notice address of XVS vault reward token\\n    address public xvsVaultRewardToken;\\n\\n    /// @notice address of XVS vault pool id\\n    uint256 public xvsVaultPoolId;\\n\\n    /// @notice mapping to check if a account's score was updated in the round\\n    mapping(uint256 => mapping(address => bool)) public isScoreUpdated;\\n\\n    /// @notice unique id for next round\\n    uint256 public nextScoreUpdateRoundId;\\n\\n    /// @notice total number of accounts whose score needs to be updated\\n    uint256 public totalScoreUpdatesRequired;\\n\\n    /// @notice total number of accounts whose score is yet to be updated\\n    uint256 public pendingScoreUpdates;\\n\\n    /// @notice mapping used to find if an asset is part of prime markets\\n    mapping(address => address) public vTokenForAsset;\\n\\n    /// @notice Address of core pool comptroller contract\\n    address internal corePoolComptroller;\\n\\n    /// @notice unreleased income from PLP that's already distributed to prime holders\\n    /// @dev mapping of asset address => amount\\n    mapping(address => uint256) public unreleasedPLPIncome;\\n\\n    /// @notice The address of PLP contract\\n    address public primeLiquidityProvider;\\n\\n    /// @notice The address of ResilientOracle contract\\n    ResilientOracleInterface public oracle;\\n\\n    /// @notice The address of PoolRegistry contract\\n    address public poolRegistry;\\n\\n    /// @dev This empty reserved space is put in place to allow future versions to add new\\n    /// variables without shifting down storage in the inheritance chain.\\n    uint256[26] private __gap;\\n}\\n\",\"keccak256\":\"0x5285c875114db2ea2be0b81b65722d5761806217022db733323c4e03365a95e7\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[{"astId":12351,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol:RewardsDistributorStorage","label":"rewardTokenSupplyState","offset":0,"slot":"0","type":"t_mapping(t_address,t_struct(RewardToken)12338_storage)"},{"astId":12358,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol:RewardsDistributorStorage","label":"rewardTokenSupplierIndex","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":12363,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol:RewardsDistributorStorage","label":"rewardTokenAccrued","offset":0,"slot":"2","type":"t_mapping(t_address,t_uint256)"},{"astId":12368,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol:RewardsDistributorStorage","label":"rewardTokenBorrowSpeeds","offset":0,"slot":"3","type":"t_mapping(t_address,t_uint256)"},{"astId":12373,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol:RewardsDistributorStorage","label":"rewardTokenSupplySpeeds","offset":0,"slot":"4","type":"t_mapping(t_address,t_uint256)"},{"astId":12379,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol:RewardsDistributorStorage","label":"rewardTokenBorrowState","offset":0,"slot":"5","type":"t_mapping(t_address,t_struct(RewardToken)12338_storage)"},{"astId":12384,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol:RewardsDistributorStorage","label":"rewardTokenContributorSpeeds","offset":0,"slot":"6","type":"t_mapping(t_address,t_uint256)"},{"astId":12389,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol:RewardsDistributorStorage","label":"lastContributorBlock","offset":0,"slot":"7","type":"t_mapping(t_address,t_uint256)"},{"astId":12396,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol:RewardsDistributorStorage","label":"rewardTokenBorrowerIndex","offset":0,"slot":"8","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":12399,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol:RewardsDistributorStorage","label":"comptroller","offset":0,"slot":"9","type":"t_contract(Comptroller)9130"},{"astId":12402,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol:RewardsDistributorStorage","label":"rewardToken","offset":0,"slot":"10","type":"t_contract(IERC20Upgradeable)1352"},{"astId":12408,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol:RewardsDistributorStorage","label":"rewardTokenSupplyStateTimeBased","offset":0,"slot":"11","type":"t_mapping(t_address,t_struct(TimeBasedRewardToken)12345_storage)"},{"astId":12414,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol:RewardsDistributorStorage","label":"rewardTokenBorrowStateTimeBased","offset":0,"slot":"12","type":"t_mapping(t_address,t_struct(TimeBasedRewardToken)12345_storage)"},{"astId":12419,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol:RewardsDistributorStorage","label":"__gap","offset":0,"slot":"13","type":"t_array(t_uint256)37_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)37_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[37]","numberOfBytes":"1184"},"t_contract(Comptroller)9130":{"encoding":"inplace","label":"contract Comptroller","numberOfBytes":"20"},"t_contract(IERC20Upgradeable)1352":{"encoding":"inplace","label":"contract IERC20Upgradeable","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(RewardToken)12338_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RewardsDistributorStorage.RewardToken)","numberOfBytes":"32","value":"t_struct(RewardToken)12338_storage"},"t_mapping(t_address,t_struct(TimeBasedRewardToken)12345_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RewardsDistributorStorage.TimeBasedRewardToken)","numberOfBytes":"32","value":"t_struct(TimeBasedRewardToken)12345_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_struct(RewardToken)12338_storage":{"encoding":"inplace","label":"struct RewardsDistributorStorage.RewardToken","members":[{"astId":12333,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol:RewardsDistributorStorage","label":"index","offset":0,"slot":"0","type":"t_uint224"},{"astId":12335,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol:RewardsDistributorStorage","label":"block","offset":28,"slot":"0","type":"t_uint32"},{"astId":12337,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol:RewardsDistributorStorage","label":"lastRewardingBlock","offset":0,"slot":"1","type":"t_uint32"}],"numberOfBytes":"64"},"t_struct(TimeBasedRewardToken)12345_storage":{"encoding":"inplace","label":"struct RewardsDistributorStorage.TimeBasedRewardToken","members":[{"astId":12340,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol:RewardsDistributorStorage","label":"index","offset":0,"slot":"0","type":"t_uint224"},{"astId":12342,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol:RewardsDistributorStorage","label":"timestamp","offset":0,"slot":"1","type":"t_uint256"},{"astId":12344,"contract":"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol:RewardsDistributorStorage","label":"lastRewardingTimestamp","offset":0,"slot":"2","type":"t_uint256"}],"numberOfBytes":"96"},"t_uint224":{"encoding":"inplace","label":"uint224","numberOfBytes":"28"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"}}},"userdoc":{"kind":"user","methods":{"lastContributorBlock(address)":{"notice":"Last slot (block or second) at which a contributor's REWARD TOKEN rewards have been allocated"},"rewardTokenAccrued(address)":{"notice":"The REWARD TOKEN accrued but not yet transferred to each user"},"rewardTokenBorrowSpeeds(address)":{"notice":"The rate at which rewardToken is distributed to the corresponding borrow market per slot (block or second)"},"rewardTokenBorrowState(address)":{"notice":"The REWARD TOKEN market borrow state for each market"},"rewardTokenBorrowStateTimeBased(address)":{"notice":"The REWARD TOKEN market borrow state for each market"},"rewardTokenBorrowerIndex(address,address)":{"notice":"The REWARD TOKEN borrow index for each market for each borrower as of the last time they accrued REWARD TOKEN"},"rewardTokenContributorSpeeds(address)":{"notice":"The portion of REWARD TOKEN that each contributor receives per slot (block or second)"},"rewardTokenSupplierIndex(address,address)":{"notice":"The REWARD TOKEN borrow index for each market for each supplier as of the last time they accrued REWARD TOKEN"},"rewardTokenSupplySpeeds(address)":{"notice":"The rate at which rewardToken is distributed to the corresponding supply market per slot (block or second)"},"rewardTokenSupplyState(address)":{"notice":"The REWARD TOKEN market supply state for each market"},"rewardTokenSupplyStateTimeBased(address)":{"notice":"The REWARD TOKEN market supply state for each market"}},"version":1}}},"@venusprotocol/isolated-pools/contracts/VToken.sol":{"VToken":{"abi":[{"inputs":[{"internalType":"bool","name":"timeBased_","type":"bool"},{"internalType":"uint256","name":"blocksPerYear_","type":"uint256"},{"internalType":"uint256","name":"maxBorrowRateMantissa_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"actualAddAmount","type":"uint256"}],"name":"AddReservesFactorFreshCheck","type":"error"},{"inputs":[],"name":"BorrowCashNotAvailable","type":"error"},{"inputs":[],"name":"BorrowFreshnessCheck","type":"error"},{"inputs":[],"name":"DelegateNotApproved","type":"error"},{"inputs":[],"name":"ForceLiquidateBorrowUnauthorized","type":"error"},{"inputs":[],"name":"HealBorrowUnauthorized","type":"error"},{"inputs":[],"name":"InvalidBlocksPerYear","type":"error"},{"inputs":[],"name":"InvalidTimeBasedConfiguration","type":"error"},{"inputs":[{"internalType":"uint256","name":"errorCode","type":"uint256"}],"name":"LiquidateAccrueCollateralInterestFailed","type":"error"},{"inputs":[],"name":"LiquidateCloseAmountIsUintMax","type":"error"},{"inputs":[],"name":"LiquidateCloseAmountIsZero","type":"error"},{"inputs":[],"name":"LiquidateCollateralFreshnessCheck","type":"error"},{"inputs":[],"name":"LiquidateFreshnessCheck","type":"error"},{"inputs":[],"name":"LiquidateLiquidatorIsBorrower","type":"error"},{"inputs":[],"name":"LiquidateSeizeLiquidatorIsBorrower","type":"error"},{"inputs":[],"name":"MintFreshnessCheck","type":"error"},{"inputs":[],"name":"ProtocolSeizeShareTooBig","type":"error"},{"inputs":[],"name":"RedeemFreshnessCheck","type":"error"},{"inputs":[],"name":"RedeemTransferOutNotPossible","type":"error"},{"inputs":[],"name":"ReduceReservesCashNotAvailable","type":"error"},{"inputs":[],"name":"ReduceReservesCashValidation","type":"error"},{"inputs":[],"name":"ReduceReservesFreshCheck","type":"error"},{"inputs":[],"name":"RepayBorrowFreshnessCheck","type":"error"},{"inputs":[],"name":"SetInterestRateModelFreshCheck","type":"error"},{"inputs":[],"name":"SetReserveFactorBoundsCheck","type":"error"},{"inputs":[],"name":"SetReserveFactorFreshCheck","type":"error"},{"inputs":[],"name":"TransferNotAllowed","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"calledContract","type":"address"},{"internalType":"string","name":"methodSignature","type":"string"}],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"ZeroAddressNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"cashPrior","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"interestAccumulated","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"borrowIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBorrows","type":"uint256"}],"name":"AccrueInterest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"badDebtDelta","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"badDebtOld","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"badDebtNew","type":"uint256"}],"name":"BadDebtIncreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"badDebtOld","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"badDebtNew","type":"uint256"}],"name":"BadDebtRecovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"borrowAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accountBorrows","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBorrows","type":"uint256"}],"name":"Borrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payer","type":"address"},{"indexed":true,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"repayAmount","type":"uint256"}],"name":"HealBorrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"liquidator","type":"address"},{"indexed":true,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"repayAmount","type":"uint256"},{"indexed":true,"internalType":"address","name":"vTokenCollateral","type":"address"},{"indexed":false,"internalType":"uint256","name":"seizeTokens","type":"uint256"}],"name":"LiquidateBorrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"mintAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accountBalance","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAccessControlManager","type":"address"},{"indexed":false,"internalType":"address","name":"newAccessControlManager","type":"address"}],"name":"NewAccessControlManager","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract ComptrollerInterface","name":"oldComptroller","type":"address"},{"indexed":true,"internalType":"contract ComptrollerInterface","name":"newComptroller","type":"address"}],"name":"NewComptroller","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract InterestRateModel","name":"oldInterestRateModel","type":"address"},{"indexed":true,"internalType":"contract InterestRateModel","name":"newInterestRateModel","type":"address"}],"name":"NewMarketInterestRateModel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldProtocolSeizeShareMantissa","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newProtocolSeizeShareMantissa","type":"uint256"}],"name":"NewProtocolSeizeShare","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldProtocolShareReserve","type":"address"},{"indexed":true,"internalType":"address","name":"newProtocolShareReserve","type":"address"}],"name":"NewProtocolShareReserve","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldReduceReservesBlockOrTimestampDelta","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newReduceReservesBlockOrTimestampDelta","type":"uint256"}],"name":"NewReduceReservesBlockDelta","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldReserveFactorMantissa","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newReserveFactorMantissa","type":"uint256"}],"name":"NewReserveFactor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldShortfall","type":"address"},{"indexed":true,"internalType":"address","name":"newShortfall","type":"address"}],"name":"NewShortfallContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSeize","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"redeemer","type":"address"},{"indexed":false,"internalType":"uint256","name":"redeemAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"redeemTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accountBalance","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payer","type":"address"},{"indexed":true,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"repayAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accountBorrows","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBorrows","type":"uint256"}],"name":"RepayBorrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"benefactor","type":"address"},{"indexed":false,"internalType":"uint256","name":"addAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalReserves","type":"uint256"}],"name":"ReservesAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protocolShareReserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"reduceAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalReserves","type":"uint256"}],"name":"SpreadReservesReduced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"SweepToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"NO_ERROR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accessControlManager","outputs":[{"internalType":"contract IAccessControlManagerV8","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accrualBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accrueInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"addAmount","type":"uint256"}],"name":"addReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"badDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"recoveredAmount_","type":"uint256"}],"name":"badDebtRecovered","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOfUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blocksOrSecondsPerYear","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"borrowAmount","type":"uint256"}],"name":"borrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"borrowBalanceCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"borrowBalanceStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"borrowAmount","type":"uint256"}],"name":"borrowBehalf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"borrowIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"borrowRatePerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"comptroller","outputs":[{"internalType":"contract ComptrollerInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exchangeRateCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exchangeRateStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"liquidator","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"},{"internalType":"contract VTokenInterface","name":"vTokenCollateral","type":"address"},{"internalType":"bool","name":"skipLiquidityCheck","type":"bool"}],"name":"forceLiquidateBorrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountSnapshot","outputs":[{"internalType":"uint256","name":"error","type":"uint256"},{"internalType":"uint256","name":"vTokenBalance","type":"uint256"},{"internalType":"uint256","name":"borrowBalance","type":"uint256"},{"internalType":"uint256","name":"exchangeRate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockNumberOrTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"payer","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"}],"name":"healBorrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"underlying_","type":"address"},{"internalType":"contract ComptrollerInterface","name":"comptroller_","type":"address"},{"internalType":"contract InterestRateModel","name":"interestRateModel_","type":"address"},{"internalType":"uint256","name":"initialExchangeRateMantissa_","type":"uint256"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"address","name":"admin_","type":"address"},{"internalType":"address","name":"accessControlManager_","type":"address"},{"components":[{"internalType":"address","name":"shortfall","type":"address"},{"internalType":"address payable","name":"protocolShareReserve","type":"address"}],"internalType":"struct VTokenInterface.RiskManagementInit","name":"riskManagement","type":"tuple"},{"internalType":"uint256","name":"reserveFactorMantissa_","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"interestRateModel","outputs":[{"internalType":"contract InterestRateModel","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTimeBased","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isVToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"},{"internalType":"contract VTokenInterface","name":"vTokenCollateral","type":"address"}],"name":"liquidateBorrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"},{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"mintBehalf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolSeizeShareMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolShareReserve","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"redeemTokens","type":"uint256"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"redeemer","type":"address"},{"internalType":"uint256","name":"redeemTokens","type":"uint256"}],"name":"redeemBehalf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redeemAmount","type":"uint256"}],"name":"redeemUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"redeemer","type":"address"},{"internalType":"uint256","name":"redeemAmount","type":"uint256"}],"name":"redeemUnderlyingBehalf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reduceAmount","type":"uint256"}],"name":"reduceReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reduceReservesBlockDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reduceReservesBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"repayAmount","type":"uint256"}],"name":"repayBorrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"}],"name":"repayBorrowBehalf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveFactorMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"liquidator","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"seizeTokens","type":"uint256"}],"name":"seize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"accessControlManager_","type":"address"}],"name":"setAccessControlManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract InterestRateModel","name":"newInterestRateModel","type":"address"}],"name":"setInterestRateModel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSeizeShareMantissa_","type":"uint256"}],"name":"setProtocolSeizeShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"protocolShareReserve_","type":"address"}],"name":"setProtocolShareReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newReduceReservesBlockOrTimestampDelta","type":"uint256"}],"name":"setReduceReservesBlockDelta","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newReserveFactorMantissa","type":"uint256"}],"name":"setReserveFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"shortfall_","type":"address"}],"name":"setShortfallContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shortfall","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supplyRatePerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20Upgradeable","name":"token","type":"address"}],"name":"sweepToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBorrows","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBorrowsCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Venus","events":{"BadDebtIncreased(address,uint256,uint256,uint256)":{"params":{"badDebtDelta":"amount of new bad debt recorded","badDebtNew":"new bad debt value","badDebtOld":"previous bad debt value","borrower":"borrower to \"forgive\""}},"BadDebtRecovered(uint256,uint256)":{"params":{"badDebtNew":"new bad debt value","badDebtOld":"previous bad debt value"}},"Initialized(uint8)":{"details":"Triggered when the contract has been initialized or reinitialized."}},"kind":"dev","methods":{"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"accrueInterest()":{"custom:access":"Not restricted","custom:event":"Emits AccrueInterest event on success","details":"This calculates interest accrued from the last checkpointed slot(block or second)  up to the current slot(block or second) and writes new checkpoint to storage and  reduce spread reserves to protocol share reserve  if currentSlot - reduceReservesBlockNumber >= slotDelta","returns":{"_0":"Always NO_ERROR"}},"addReserves(uint256)":{"custom:access":"Not restricted","custom:event":"Emits ReservesAdded event; may emit AccrueInterest","params":{"addAmount":"The amount of underlying token to add as reserves"}},"allowance(address,address)":{"params":{"owner":"The address of the account which owns the tokens to be spent","spender":"The address of the account which may transfer tokens"},"returns":{"_0":"amount The number of tokens allowed to be spent (type(uint256).max means infinite)"}},"approve(address,uint256)":{"custom:access":"Not restricted","custom:error":"ZeroAddressNotAllowed is thrown when spender address is zero","custom:event":"Emits Approval event","details":"This will overwrite the approval amount for `spender`  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)","params":{"amount":"The number of tokens that are approved (uint256.max means infinite)","spender":"The address of the account which may transfer tokens"},"returns":{"_0":"success Whether or not the approval succeeded"}},"badDebtRecovered(uint256)":{"custom:access":"Only Shortfall contract","custom:event":"Emits BadDebtRecovered event","details":"Called only when bad debt is recovered from auction","params":{"recoveredAmount_":"The amount of bad debt recovered"}},"balanceOf(address)":{"params":{"owner":"The address of the account to query"},"returns":{"_0":"amount The number of tokens owned by `owner`"}},"balanceOfUnderlying(address)":{"details":"This also accrues interest in a transaction","params":{"owner":"The address of the account to query"},"returns":{"_0":"amount The amount of underlying owned by `owner`"}},"borrow(uint256)":{"custom:access":"Not restricted","custom:error":"BorrowCashNotAvailable is thrown when the protocol has insufficient cash","custom:event":"Emits Borrow event; may emit AccrueInterest","params":{"borrowAmount":"The amount of the underlying asset to borrow"},"returns":{"_0":"error Always NO_ERROR for compatibility with Venus core tooling"}},"borrowBalanceCurrent(address)":{"params":{"account":"The address whose balance should be calculated after updating borrowIndex"},"returns":{"_0":"borrowBalance The calculated balance"}},"borrowBalanceStored(address)":{"params":{"account":"The address whose balance should be calculated"},"returns":{"_0":"borrowBalance The calculated balance"}},"borrowBehalf(address,uint256)":{"custom:access":"Not restricted","custom:error":"DelegateNotApproved is thrown if caller is not approved delegateBorrowCashNotAvailable is thrown when the protocol has insufficient cash","custom:event":"Emits Borrow event; may emit AccrueInterest","params":{"borrowAmount":"The amount of the underlying asset to borrow","borrower":"The borrower, on behalf of whom to borrow"},"returns":{"_0":"error Always NO_ERROR for compatibility with Venus core tooling"}},"borrowRatePerBlock()":{"returns":{"_0":"rate The borrow interest rate per slot(block or second), scaled by 1e18"}},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor","params":{"blocksPerYear_":"The number of blocks per year","maxBorrowRateMantissa_":"The maximum value of borrowing rate mantissa","timeBased_":"A boolean indicating whether the contract is based on time or block."}},"decreaseAllowance(address,uint256)":{"custom:access":"Not restricted","custom:error":"ZeroAddressNotAllowed is thrown when spender address is zero","custom:event":"Emits Approval event","params":{"spender":"The address of the account which may transfer tokens","subtractedValue":"The number of tokens to remove from total approval"},"returns":{"_0":"success Whether or not the approval succeeded"}},"exchangeRateCurrent()":{"returns":{"_0":"exchangeRate Calculated exchange rate scaled by 1e18"}},"exchangeRateStored()":{"details":"This function does not accrue interest before calculating the exchange rate","returns":{"_0":"exchangeRate Calculated exchange rate scaled by 1e18"}},"forceLiquidateBorrow(address,address,uint256,address,bool)":{"custom:access":"Only Comptroller","custom:error":"ForceLiquidateBorrowUnauthorized is thrown when the request does not come from ComptrollerLiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vTokenLiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vTokenLiquidateLiquidatorIsBorrower is thrown when trying to liquidate selfLiquidateCloseAmountIsZero is thrown when repayment amount is zeroLiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX","custom:event":"Emits LiquidateBorrow event; may emit AccrueInterest","params":{"borrower":"The borrower of this vToken to be liquidated","liquidator":"The address repaying the borrow and seizing collateral","repayAmount":"The amount of the underlying borrowed asset to repay","skipLiquidityCheck":"If set to true, allows to liquidate up to 100% of the borrow   regardless of the account liquidity","vTokenCollateral":"The market in which to seize collateral from the borrower"}},"getAccountSnapshot(address)":{"details":"This is used by comptroller to more efficiently perform liquidity checks.","params":{"account":"Address of the account to snapshot"},"returns":{"borrowBalance":"Amount owed in terms of underlying","error":"Always NO_ERROR for compatibility with Venus core tooling","exchangeRate":"Stored exchange rate","vTokenBalance":"User's balance of vTokens"}},"getBlockNumberOrTimestamp()":{"details":"Function to simply retrieve block number or block timestamp","returns":{"_0":"Current block number or block timestamp"}},"getCash()":{"returns":{"_0":"cash The quantity of underlying asset owned by this contract"}},"healBorrow(address,address,uint256)":{"custom:access":"Only Comptroller","custom:error":"HealBorrowUnauthorized is thrown when the request does not come from Comptroller","custom:event":"Emits RepayBorrow, BadDebtIncreased events; may emit AccrueInterest","details":"This function does not call any Comptroller hooks (like \"healAllowed\"), because we assume   the Comptroller does all the necessary checks before calling this function.","params":{"borrower":"account to heal","payer":"account who repays the debt","repayAmount":"amount to repay"}},"increaseAllowance(address,uint256)":{"custom:access":"Not restricted","custom:error":"ZeroAddressNotAllowed is thrown when spender address is zero","custom:event":"Emits Approval event","params":{"addedValue":"The number of additional tokens spender can transfer","spender":"The address of the account which may transfer tokens"},"returns":{"_0":"success Whether or not the approval succeeded"}},"initialize(address,address,address,uint256,string,string,uint8,address,address,(address,address),uint256)":{"custom:error":"ZeroAddressNotAllowed is thrown when admin address is zeroZeroAddressNotAllowed is thrown when shortfall contract address is zeroZeroAddressNotAllowed is thrown when protocol share reserve address is zero","params":{"accessControlManager_":"AccessControlManager contract address","admin_":"Address of the administrator of this token","comptroller_":"The address of the Comptroller","decimals_":"ERC-20 decimal precision of this token","initialExchangeRateMantissa_":"The initial exchange rate, scaled by 1e18","interestRateModel_":"The address of the interest rate model","name_":"ERC-20 name of this token","reserveFactorMantissa_":"Percentage of borrow interest that goes to reserves (from 0 to 1e18)","riskManagement":"Addresses of risk & income related contracts","symbol_":"ERC-20 symbol of this token","underlying_":"The address of the underlying asset"}},"isVToken()":{"returns":{"_0":"Always true"}},"liquidateBorrow(address,uint256,address)":{"custom:access":"Not restricted","custom:error":"LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vTokenLiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vTokenLiquidateLiquidatorIsBorrower is thrown when trying to liquidate selfLiquidateCloseAmountIsZero is thrown when repayment amount is zeroLiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX","custom:event":"Emits LiquidateBorrow event; may emit AccrueInterest","params":{"borrower":"The borrower of this vToken to be liquidated","repayAmount":"The amount of the underlying borrowed asset to repay","vTokenCollateral":"The market in which to seize collateral from the borrower"},"returns":{"_0":"error Always NO_ERROR for compatibility with Venus core tooling"}},"mint(uint256)":{"custom:access":"Not restricted","custom:event":"Emits Mint and Transfer events; may emit AccrueInterest","details":"Accrues interest whether or not the operation succeeds, unless reverted","params":{"mintAmount":"The amount of the underlying asset to supply"},"returns":{"_0":"error Always NO_ERROR for compatibility with Venus core tooling"}},"mintBehalf(address,uint256)":{"custom:access":"Not restricted","custom:error":"ZeroAddressNotAllowed is thrown when minter address is zero","custom:event":"Emits Mint and Transfer events; may emit AccrueInterest","details":"Accrues interest whether or not the operation succeeds, unless reverted","params":{"mintAmount":"The amount of the underlying asset to supply","minter":"User whom the supply will be attributed to"},"returns":{"_0":"error Always NO_ERROR for compatibility with Venus core tooling"}},"owner()":{"details":"Returns the address of the current owner."},"pendingOwner()":{"details":"Returns the address of the pending owner."},"redeem(uint256)":{"custom:access":"Not restricted","custom:error":"RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash","custom:event":"Emits Redeem and Transfer events; may emit AccrueInterest","details":"Accrues interest whether or not the operation succeeds, unless reverted","params":{"redeemTokens":"The number of vTokens to redeem into underlying"},"returns":{"_0":"error Always NO_ERROR for compatibility with Venus core tooling"}},"redeemBehalf(address,uint256)":{"custom:access":"Not restricted","custom:error":"InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amountRedeemTransferOutNotPossible is thrown when the protocol has insufficient cash","custom:event":"Emits Redeem and Transfer events; may emit AccrueInterest","details":"Accrues interest whether or not the operation succeeds, unless reverted","params":{"redeemTokens":"The number of vTokens to redeem into underlying","redeemer":"The user on behalf of whom to redeem"},"returns":{"_0":"error Always NO_ERROR for compatibility with Venus core tooling"}},"redeemUnderlying(uint256)":{"details":"Accrues interest whether or not the operation succeeds, unless reverted","params":{"redeemAmount":"The amount of underlying to receive from redeeming vTokens"},"returns":{"_0":"error Always NO_ERROR for compatibility with Venus core tooling"}},"redeemUnderlyingBehalf(address,uint256)":{"custom:access":"Not restricted","custom:error":"InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount","custom:event":"Emits Redeem and Transfer events; may emit AccrueInterest","details":"Accrues interest whether or not the operation succeeds, unless reverted","params":{"redeemAmount":"The amount of underlying to receive from redeeming vTokens","redeemer":", on behalf of whom to redeem"},"returns":{"_0":"error Always NO_ERROR for compatibility with Venus core tooling"}},"reduceReserves(uint256)":{"custom:access":"Not restricted","custom:error":"ReduceReservesCashNotAvailable is thrown when the vToken does not have sufficient cashReduceReservesCashValidation is thrown when trying to withdraw more cash than the reserves have","custom:event":"Emits ReservesReduced event; may emit AccrueInterest","details":"Gracefully return if reserves already reduced in accrueInterest","params":{"reduceAmount":"Amount of reduction to reserves"}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"repayBorrow(uint256)":{"custom:access":"Not restricted","custom:event":"Emits RepayBorrow event; may emit AccrueInterest","params":{"repayAmount":"The amount to repay, or type(uint256).max for the full outstanding amount"},"returns":{"_0":"error Always NO_ERROR for compatibility with Venus core tooling"}},"repayBorrowBehalf(address,uint256)":{"custom:access":"Not restricted","custom:event":"Emits RepayBorrow event; may emit AccrueInterest","params":{"borrower":"the account with the debt being payed off","repayAmount":"The amount to repay, or type(uint256).max for the full outstanding amount"},"returns":{"_0":"error Always NO_ERROR for compatibility with Venus core tooling"}},"seize(address,address,uint256)":{"custom:access":"Not restricted","custom:error":"LiquidateSeizeLiquidatorIsBorrower is thrown when trying to liquidate self","custom:event":"Emits Transfer, ReservesAdded events","details":"Will fail unless called by another vToken during the process of liquidation.  It's absolutely critical to use msg.sender as the borrowed vToken and not a parameter.","params":{"borrower":"The account having collateral seized","liquidator":"The account receiving seized collateral","seizeTokens":"The number of vTokens to seize"}},"setAccessControlManager(address)":{"custom:access":"Only Governance","custom:event":"Emits NewAccessControlManager event","details":"Admin function to set address of AccessControlManager","params":{"accessControlManager_":"The new address of the AccessControlManager"}},"setInterestRateModel(address)":{"custom:access":"Controlled by AccessControlManager","custom:error":"Unauthorized error is thrown when the call is not authorized by AccessControlManager","custom:event":"Emits NewMarketInterestRateModel event; may emit AccrueInterest","details":"Admin function to accrue interest and update the interest rate model","params":{"newInterestRateModel":"the new interest rate model to use"}},"setProtocolSeizeShare(uint256)":{"custom:access":"Controlled by AccessControlManager","custom:error":"Unauthorized error is thrown when the call is not authorized by AccessControlManagerProtocolSeizeShareTooBig is thrown when the new seize share is too high","custom:event":"Emits NewProtocolSeizeShare event on success","details":"must be equal or less than liquidation incentive - 1","params":{"newProtocolSeizeShareMantissa_":"new protocol share mantissa"}},"setProtocolShareReserve(address)":{"custom:access":"Only Governance","custom:error":"ZeroAddressNotAllowed is thrown when protocol share reserve address is zero","params":{"protocolShareReserve_":"The address of the protocol share reserve contract"}},"setReduceReservesBlockDelta(uint256)":{"custom:access":"Only Governance","params":{"_newReduceReservesBlockOrTimestampDelta":"slot(block or second) difference value"}},"setReserveFactor(uint256)":{"custom:access":"Controlled by AccessControlManager","custom:error":"Unauthorized error is thrown when the call is not authorized by AccessControlManagerSetReserveFactorBoundsCheck is thrown when the new reserve factor is too high","custom:event":"Emits NewReserveFactor event; may emit AccrueInterest","details":"Admin function to accrue interest and set a new reserve factor","params":{"newReserveFactorMantissa":"New reserve factor (from 0 to 1e18)"}},"setShortfallContract(address)":{"custom:access":"Only Governance","custom:error":"ZeroAddressNotAllowed is thrown when shortfall contract address is zero","params":{"shortfall_":"The address of the shortfall contract"}},"supplyRatePerBlock()":{"returns":{"_0":"rate The supply interest rate per slot(block or second), scaled by 1e18"}},"sweepToken(address)":{"custom:access":"Only Governance","params":{"token":"The address of the ERC-20 token to sweep"}},"totalBorrowsCurrent()":{"returns":{"_0":"totalBorrows The total borrows with interest"}},"transfer(address,uint256)":{"custom:access":"Not restricted","custom:error":"TransferNotAllowed is thrown if trying to transfer to self","custom:event":"Emits Transfer event on success","params":{"amount":"The number of tokens to transfer","dst":"The address of the destination account"},"returns":{"_0":"success True if the transfer succeeded, reverts otherwise"}},"transferFrom(address,address,uint256)":{"custom:access":"Not restricted","custom:error":"TransferNotAllowed is thrown if trying to transfer to self","custom:event":"Emits Transfer event on success","params":{"amount":"The number of tokens to transfer","dst":"The address of the destination account","src":"The address of the source account"},"returns":{"_0":"success True if the transfer succeeded, reverts otherwise"}},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."}},"stateVariables":{"MAX_BORROW_RATE_MANTISSA":{"custom:oz-upgrades-unsafe-allow":"state-variable-immutable"}},"title":"VToken","version":1},"evm":{"bytecode":{"functionDebugData":{"@_12520":{"entryPoint":null,"id":12520,"parameterSlots":3,"returnSlots":0},"@_16288":{"entryPoint":null,"id":16288,"parameterSlots":2,"returnSlots":0},"@_disableInitializers_557":{"entryPoint":283,"id":557,"parameterSlots":0,"returnSlots":0},"@_getBlockNumber_16318":{"entryPoint":275,"id":16318,"parameterSlots":0,"returnSlots":1},"@_getBlockTimestamp_16308":{"entryPoint":279,"id":16308,"parameterSlots":0,"returnSlots":1},"abi_decode_t_bool_fromMemory":{"entryPoint":427,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_uint256_fromMemory":{"entryPoint":450,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_boolt_uint256t_uint256_fromMemory":{"entryPoint":461,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_d49bb63550654b8f0c8136961b13cd7203d45a31b139dcdcb70d95c21dcd6d8d_to_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_uint8_to_t_uint8_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":600,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d49bb63550654b8f0c8136961b13cd7203d45a31b139dcdcb70d95c21dcd6d8d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":541,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":675,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_bool":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_d49bb63550654b8f0c8136961b13cd7203d45a31b139dcdcb70d95c21dcd6d8d":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_bool":{"entryPoint":409,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_uint256":{"entryPoint":444,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:4333:69","nodeType":"YulBlock","src":"0:4333:69","statements":[{"body":{"nativeSrc":"47:35:69","nodeType":"YulBlock","src":"47:35:69","statements":[{"nativeSrc":"57:19:69","nodeType":"YulAssignment","src":"57:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"73:2:69","nodeType":"YulLiteral","src":"73:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"67:5:69","nodeType":"YulIdentifier","src":"67:5:69"},"nativeSrc":"67:9:69","nodeType":"YulFunctionCall","src":"67:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"57:6:69","nodeType":"YulIdentifier","src":"57:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"7:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"40:6:69","nodeType":"YulTypedName","src":"40:6:69","type":""}],"src":"7:75:69"},{"body":{"nativeSrc":"177:28:69","nodeType":"YulBlock","src":"177:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"194:1:69","nodeType":"YulLiteral","src":"194:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"197:1:69","nodeType":"YulLiteral","src":"197:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"187:6:69","nodeType":"YulIdentifier","src":"187:6:69"},"nativeSrc":"187:12:69","nodeType":"YulFunctionCall","src":"187:12:69"},"nativeSrc":"187:12:69","nodeType":"YulExpressionStatement","src":"187:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"88:117:69","nodeType":"YulFunctionDefinition","src":"88:117:69"},{"body":{"nativeSrc":"300:28:69","nodeType":"YulBlock","src":"300:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"317:1:69","nodeType":"YulLiteral","src":"317:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"320:1:69","nodeType":"YulLiteral","src":"320:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},"nativeSrc":"310:12:69","nodeType":"YulFunctionCall","src":"310:12:69"},"nativeSrc":"310:12:69","nodeType":"YulExpressionStatement","src":"310:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"211:117:69","nodeType":"YulFunctionDefinition","src":"211:117:69"},{"body":{"nativeSrc":"376:48:69","nodeType":"YulBlock","src":"376:48:69","statements":[{"nativeSrc":"386:32:69","nodeType":"YulAssignment","src":"386:32:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"411:5:69","nodeType":"YulIdentifier","src":"411:5:69"}],"functionName":{"name":"iszero","nativeSrc":"404:6:69","nodeType":"YulIdentifier","src":"404:6:69"},"nativeSrc":"404:13:69","nodeType":"YulFunctionCall","src":"404:13:69"}],"functionName":{"name":"iszero","nativeSrc":"397:6:69","nodeType":"YulIdentifier","src":"397:6:69"},"nativeSrc":"397:21:69","nodeType":"YulFunctionCall","src":"397:21:69"},"variableNames":[{"name":"cleaned","nativeSrc":"386:7:69","nodeType":"YulIdentifier","src":"386:7:69"}]}]},"name":"cleanup_t_bool","nativeSrc":"334:90:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"358:5:69","nodeType":"YulTypedName","src":"358:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"368:7:69","nodeType":"YulTypedName","src":"368:7:69","type":""}],"src":"334:90:69"},{"body":{"nativeSrc":"470:76:69","nodeType":"YulBlock","src":"470:76:69","statements":[{"body":{"nativeSrc":"524:16:69","nodeType":"YulBlock","src":"524:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"533:1:69","nodeType":"YulLiteral","src":"533:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"536:1:69","nodeType":"YulLiteral","src":"536:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"526:6:69","nodeType":"YulIdentifier","src":"526:6:69"},"nativeSrc":"526:12:69","nodeType":"YulFunctionCall","src":"526:12:69"},"nativeSrc":"526:12:69","nodeType":"YulExpressionStatement","src":"526:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"493:5:69","nodeType":"YulIdentifier","src":"493:5:69"},{"arguments":[{"name":"value","nativeSrc":"515:5:69","nodeType":"YulIdentifier","src":"515:5:69"}],"functionName":{"name":"cleanup_t_bool","nativeSrc":"500:14:69","nodeType":"YulIdentifier","src":"500:14:69"},"nativeSrc":"500:21:69","nodeType":"YulFunctionCall","src":"500:21:69"}],"functionName":{"name":"eq","nativeSrc":"490:2:69","nodeType":"YulIdentifier","src":"490:2:69"},"nativeSrc":"490:32:69","nodeType":"YulFunctionCall","src":"490:32:69"}],"functionName":{"name":"iszero","nativeSrc":"483:6:69","nodeType":"YulIdentifier","src":"483:6:69"},"nativeSrc":"483:40:69","nodeType":"YulFunctionCall","src":"483:40:69"},"nativeSrc":"480:60:69","nodeType":"YulIf","src":"480:60:69"}]},"name":"validator_revert_t_bool","nativeSrc":"430:116:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"463:5:69","nodeType":"YulTypedName","src":"463:5:69","type":""}],"src":"430:116:69"},{"body":{"nativeSrc":"612:77:69","nodeType":"YulBlock","src":"612:77:69","statements":[{"nativeSrc":"622:22:69","nodeType":"YulAssignment","src":"622:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"637:6:69","nodeType":"YulIdentifier","src":"637:6:69"}],"functionName":{"name":"mload","nativeSrc":"631:5:69","nodeType":"YulIdentifier","src":"631:5:69"},"nativeSrc":"631:13:69","nodeType":"YulFunctionCall","src":"631:13:69"},"variableNames":[{"name":"value","nativeSrc":"622:5:69","nodeType":"YulIdentifier","src":"622:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"677:5:69","nodeType":"YulIdentifier","src":"677:5:69"}],"functionName":{"name":"validator_revert_t_bool","nativeSrc":"653:23:69","nodeType":"YulIdentifier","src":"653:23:69"},"nativeSrc":"653:30:69","nodeType":"YulFunctionCall","src":"653:30:69"},"nativeSrc":"653:30:69","nodeType":"YulExpressionStatement","src":"653:30:69"}]},"name":"abi_decode_t_bool_fromMemory","nativeSrc":"552:137:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"590:6:69","nodeType":"YulTypedName","src":"590:6:69","type":""},{"name":"end","nativeSrc":"598:3:69","nodeType":"YulTypedName","src":"598:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"606:5:69","nodeType":"YulTypedName","src":"606:5:69","type":""}],"src":"552:137:69"},{"body":{"nativeSrc":"740:32:69","nodeType":"YulBlock","src":"740:32:69","statements":[{"nativeSrc":"750:16:69","nodeType":"YulAssignment","src":"750:16:69","value":{"name":"value","nativeSrc":"761:5:69","nodeType":"YulIdentifier","src":"761:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"750:7:69","nodeType":"YulIdentifier","src":"750:7:69"}]}]},"name":"cleanup_t_uint256","nativeSrc":"695:77:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"722:5:69","nodeType":"YulTypedName","src":"722:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"732:7:69","nodeType":"YulTypedName","src":"732:7:69","type":""}],"src":"695:77:69"},{"body":{"nativeSrc":"821:79:69","nodeType":"YulBlock","src":"821:79:69","statements":[{"body":{"nativeSrc":"878:16:69","nodeType":"YulBlock","src":"878:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"887:1:69","nodeType":"YulLiteral","src":"887:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"890:1:69","nodeType":"YulLiteral","src":"890:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"880:6:69","nodeType":"YulIdentifier","src":"880:6:69"},"nativeSrc":"880:12:69","nodeType":"YulFunctionCall","src":"880:12:69"},"nativeSrc":"880:12:69","nodeType":"YulExpressionStatement","src":"880:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"844:5:69","nodeType":"YulIdentifier","src":"844:5:69"},{"arguments":[{"name":"value","nativeSrc":"869:5:69","nodeType":"YulIdentifier","src":"869:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"851:17:69","nodeType":"YulIdentifier","src":"851:17:69"},"nativeSrc":"851:24:69","nodeType":"YulFunctionCall","src":"851:24:69"}],"functionName":{"name":"eq","nativeSrc":"841:2:69","nodeType":"YulIdentifier","src":"841:2:69"},"nativeSrc":"841:35:69","nodeType":"YulFunctionCall","src":"841:35:69"}],"functionName":{"name":"iszero","nativeSrc":"834:6:69","nodeType":"YulIdentifier","src":"834:6:69"},"nativeSrc":"834:43:69","nodeType":"YulFunctionCall","src":"834:43:69"},"nativeSrc":"831:63:69","nodeType":"YulIf","src":"831:63:69"}]},"name":"validator_revert_t_uint256","nativeSrc":"778:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"814:5:69","nodeType":"YulTypedName","src":"814:5:69","type":""}],"src":"778:122:69"},{"body":{"nativeSrc":"969:80:69","nodeType":"YulBlock","src":"969:80:69","statements":[{"nativeSrc":"979:22:69","nodeType":"YulAssignment","src":"979:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"994:6:69","nodeType":"YulIdentifier","src":"994:6:69"}],"functionName":{"name":"mload","nativeSrc":"988:5:69","nodeType":"YulIdentifier","src":"988:5:69"},"nativeSrc":"988:13:69","nodeType":"YulFunctionCall","src":"988:13:69"},"variableNames":[{"name":"value","nativeSrc":"979:5:69","nodeType":"YulIdentifier","src":"979:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"1037:5:69","nodeType":"YulIdentifier","src":"1037:5:69"}],"functionName":{"name":"validator_revert_t_uint256","nativeSrc":"1010:26:69","nodeType":"YulIdentifier","src":"1010:26:69"},"nativeSrc":"1010:33:69","nodeType":"YulFunctionCall","src":"1010:33:69"},"nativeSrc":"1010:33:69","nodeType":"YulExpressionStatement","src":"1010:33:69"}]},"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"906:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"947:6:69","nodeType":"YulTypedName","src":"947:6:69","type":""},{"name":"end","nativeSrc":"955:3:69","nodeType":"YulTypedName","src":"955:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"963:5:69","nodeType":"YulTypedName","src":"963:5:69","type":""}],"src":"906:143:69"},{"body":{"nativeSrc":"1163:549:69","nodeType":"YulBlock","src":"1163:549:69","statements":[{"body":{"nativeSrc":"1209:83:69","nodeType":"YulBlock","src":"1209:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"1211:77:69","nodeType":"YulIdentifier","src":"1211:77:69"},"nativeSrc":"1211:79:69","nodeType":"YulFunctionCall","src":"1211:79:69"},"nativeSrc":"1211:79:69","nodeType":"YulExpressionStatement","src":"1211:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"1184:7:69","nodeType":"YulIdentifier","src":"1184:7:69"},{"name":"headStart","nativeSrc":"1193:9:69","nodeType":"YulIdentifier","src":"1193:9:69"}],"functionName":{"name":"sub","nativeSrc":"1180:3:69","nodeType":"YulIdentifier","src":"1180:3:69"},"nativeSrc":"1180:23:69","nodeType":"YulFunctionCall","src":"1180:23:69"},{"kind":"number","nativeSrc":"1205:2:69","nodeType":"YulLiteral","src":"1205:2:69","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"1176:3:69","nodeType":"YulIdentifier","src":"1176:3:69"},"nativeSrc":"1176:32:69","nodeType":"YulFunctionCall","src":"1176:32:69"},"nativeSrc":"1173:119:69","nodeType":"YulIf","src":"1173:119:69"},{"nativeSrc":"1302:125:69","nodeType":"YulBlock","src":"1302:125:69","statements":[{"nativeSrc":"1317:15:69","nodeType":"YulVariableDeclaration","src":"1317:15:69","value":{"kind":"number","nativeSrc":"1331:1:69","nodeType":"YulLiteral","src":"1331:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"1321:6:69","nodeType":"YulTypedName","src":"1321:6:69","type":""}]},{"nativeSrc":"1346:71:69","nodeType":"YulAssignment","src":"1346:71:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1389:9:69","nodeType":"YulIdentifier","src":"1389:9:69"},{"name":"offset","nativeSrc":"1400:6:69","nodeType":"YulIdentifier","src":"1400:6:69"}],"functionName":{"name":"add","nativeSrc":"1385:3:69","nodeType":"YulIdentifier","src":"1385:3:69"},"nativeSrc":"1385:22:69","nodeType":"YulFunctionCall","src":"1385:22:69"},{"name":"dataEnd","nativeSrc":"1409:7:69","nodeType":"YulIdentifier","src":"1409:7:69"}],"functionName":{"name":"abi_decode_t_bool_fromMemory","nativeSrc":"1356:28:69","nodeType":"YulIdentifier","src":"1356:28:69"},"nativeSrc":"1356:61:69","nodeType":"YulFunctionCall","src":"1356:61:69"},"variableNames":[{"name":"value0","nativeSrc":"1346:6:69","nodeType":"YulIdentifier","src":"1346:6:69"}]}]},{"nativeSrc":"1437:129:69","nodeType":"YulBlock","src":"1437:129:69","statements":[{"nativeSrc":"1452:16:69","nodeType":"YulVariableDeclaration","src":"1452:16:69","value":{"kind":"number","nativeSrc":"1466:2:69","nodeType":"YulLiteral","src":"1466:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"1456:6:69","nodeType":"YulTypedName","src":"1456:6:69","type":""}]},{"nativeSrc":"1482:74:69","nodeType":"YulAssignment","src":"1482:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1528:9:69","nodeType":"YulIdentifier","src":"1528:9:69"},{"name":"offset","nativeSrc":"1539:6:69","nodeType":"YulIdentifier","src":"1539:6:69"}],"functionName":{"name":"add","nativeSrc":"1524:3:69","nodeType":"YulIdentifier","src":"1524:3:69"},"nativeSrc":"1524:22:69","nodeType":"YulFunctionCall","src":"1524:22:69"},{"name":"dataEnd","nativeSrc":"1548:7:69","nodeType":"YulIdentifier","src":"1548:7:69"}],"functionName":{"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"1492:31:69","nodeType":"YulIdentifier","src":"1492:31:69"},"nativeSrc":"1492:64:69","nodeType":"YulFunctionCall","src":"1492:64:69"},"variableNames":[{"name":"value1","nativeSrc":"1482:6:69","nodeType":"YulIdentifier","src":"1482:6:69"}]}]},{"nativeSrc":"1576:129:69","nodeType":"YulBlock","src":"1576:129:69","statements":[{"nativeSrc":"1591:16:69","nodeType":"YulVariableDeclaration","src":"1591:16:69","value":{"kind":"number","nativeSrc":"1605:2:69","nodeType":"YulLiteral","src":"1605:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"1595:6:69","nodeType":"YulTypedName","src":"1595:6:69","type":""}]},{"nativeSrc":"1621:74:69","nodeType":"YulAssignment","src":"1621:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1667:9:69","nodeType":"YulIdentifier","src":"1667:9:69"},{"name":"offset","nativeSrc":"1678:6:69","nodeType":"YulIdentifier","src":"1678:6:69"}],"functionName":{"name":"add","nativeSrc":"1663:3:69","nodeType":"YulIdentifier","src":"1663:3:69"},"nativeSrc":"1663:22:69","nodeType":"YulFunctionCall","src":"1663:22:69"},{"name":"dataEnd","nativeSrc":"1687:7:69","nodeType":"YulIdentifier","src":"1687:7:69"}],"functionName":{"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"1631:31:69","nodeType":"YulIdentifier","src":"1631:31:69"},"nativeSrc":"1631:64:69","nodeType":"YulFunctionCall","src":"1631:64:69"},"variableNames":[{"name":"value2","nativeSrc":"1621:6:69","nodeType":"YulIdentifier","src":"1621:6:69"}]}]}]},"name":"abi_decode_tuple_t_boolt_uint256t_uint256_fromMemory","nativeSrc":"1055:657:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1117:9:69","nodeType":"YulTypedName","src":"1117:9:69","type":""},{"name":"dataEnd","nativeSrc":"1128:7:69","nodeType":"YulTypedName","src":"1128:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"1140:6:69","nodeType":"YulTypedName","src":"1140:6:69","type":""},{"name":"value1","nativeSrc":"1148:6:69","nodeType":"YulTypedName","src":"1148:6:69","type":""},{"name":"value2","nativeSrc":"1156:6:69","nodeType":"YulTypedName","src":"1156:6:69","type":""}],"src":"1055:657:69"},{"body":{"nativeSrc":"1814:73:69","nodeType":"YulBlock","src":"1814:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"1831:3:69","nodeType":"YulIdentifier","src":"1831:3:69"},{"name":"length","nativeSrc":"1836:6:69","nodeType":"YulIdentifier","src":"1836:6:69"}],"functionName":{"name":"mstore","nativeSrc":"1824:6:69","nodeType":"YulIdentifier","src":"1824:6:69"},"nativeSrc":"1824:19:69","nodeType":"YulFunctionCall","src":"1824:19:69"},"nativeSrc":"1824:19:69","nodeType":"YulExpressionStatement","src":"1824:19:69"},{"nativeSrc":"1852:29:69","nodeType":"YulAssignment","src":"1852:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"1871:3:69","nodeType":"YulIdentifier","src":"1871:3:69"},{"kind":"number","nativeSrc":"1876:4:69","nodeType":"YulLiteral","src":"1876:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1867:3:69","nodeType":"YulIdentifier","src":"1867:3:69"},"nativeSrc":"1867:14:69","nodeType":"YulFunctionCall","src":"1867:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"1852:11:69","nodeType":"YulIdentifier","src":"1852:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"1718:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"1786:3:69","nodeType":"YulTypedName","src":"1786:3:69","type":""},{"name":"length","nativeSrc":"1791:6:69","nodeType":"YulTypedName","src":"1791:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"1802:11:69","nodeType":"YulTypedName","src":"1802:11:69","type":""}],"src":"1718:169:69"},{"body":{"nativeSrc":"1999:75:69","nodeType":"YulBlock","src":"1999:75:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"2021:6:69","nodeType":"YulIdentifier","src":"2021:6:69"},{"kind":"number","nativeSrc":"2029:1:69","nodeType":"YulLiteral","src":"2029:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"2017:3:69","nodeType":"YulIdentifier","src":"2017:3:69"},"nativeSrc":"2017:14:69","nodeType":"YulFunctionCall","src":"2017:14:69"},{"hexValue":"4d617820626f72726f772072617465206d757374206265203c3d2031653138","kind":"string","nativeSrc":"2033:33:69","nodeType":"YulLiteral","src":"2033:33:69","type":"","value":"Max borrow rate must be <= 1e18"}],"functionName":{"name":"mstore","nativeSrc":"2010:6:69","nodeType":"YulIdentifier","src":"2010:6:69"},"nativeSrc":"2010:57:69","nodeType":"YulFunctionCall","src":"2010:57:69"},"nativeSrc":"2010:57:69","nodeType":"YulExpressionStatement","src":"2010:57:69"}]},"name":"store_literal_in_memory_d49bb63550654b8f0c8136961b13cd7203d45a31b139dcdcb70d95c21dcd6d8d","nativeSrc":"1893:181:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"1991:6:69","nodeType":"YulTypedName","src":"1991:6:69","type":""}],"src":"1893:181:69"},{"body":{"nativeSrc":"2226:220:69","nodeType":"YulBlock","src":"2226:220:69","statements":[{"nativeSrc":"2236:74:69","nodeType":"YulAssignment","src":"2236:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"2302:3:69","nodeType":"YulIdentifier","src":"2302:3:69"},{"kind":"number","nativeSrc":"2307:2:69","nodeType":"YulLiteral","src":"2307:2:69","type":"","value":"31"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"2243:58:69","nodeType":"YulIdentifier","src":"2243:58:69"},"nativeSrc":"2243:67:69","nodeType":"YulFunctionCall","src":"2243:67:69"},"variableNames":[{"name":"pos","nativeSrc":"2236:3:69","nodeType":"YulIdentifier","src":"2236:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"2408:3:69","nodeType":"YulIdentifier","src":"2408:3:69"}],"functionName":{"name":"store_literal_in_memory_d49bb63550654b8f0c8136961b13cd7203d45a31b139dcdcb70d95c21dcd6d8d","nativeSrc":"2319:88:69","nodeType":"YulIdentifier","src":"2319:88:69"},"nativeSrc":"2319:93:69","nodeType":"YulFunctionCall","src":"2319:93:69"},"nativeSrc":"2319:93:69","nodeType":"YulExpressionStatement","src":"2319:93:69"},{"nativeSrc":"2421:19:69","nodeType":"YulAssignment","src":"2421:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"2432:3:69","nodeType":"YulIdentifier","src":"2432:3:69"},{"kind":"number","nativeSrc":"2437:2:69","nodeType":"YulLiteral","src":"2437:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2428:3:69","nodeType":"YulIdentifier","src":"2428:3:69"},"nativeSrc":"2428:12:69","nodeType":"YulFunctionCall","src":"2428:12:69"},"variableNames":[{"name":"end","nativeSrc":"2421:3:69","nodeType":"YulIdentifier","src":"2421:3:69"}]}]},"name":"abi_encode_t_stringliteral_d49bb63550654b8f0c8136961b13cd7203d45a31b139dcdcb70d95c21dcd6d8d_to_t_string_memory_ptr_fromStack","nativeSrc":"2080:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"2214:3:69","nodeType":"YulTypedName","src":"2214:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"2222:3:69","nodeType":"YulTypedName","src":"2222:3:69","type":""}],"src":"2080:366:69"},{"body":{"nativeSrc":"2623:248:69","nodeType":"YulBlock","src":"2623:248:69","statements":[{"nativeSrc":"2633:26:69","nodeType":"YulAssignment","src":"2633:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"2645:9:69","nodeType":"YulIdentifier","src":"2645:9:69"},{"kind":"number","nativeSrc":"2656:2:69","nodeType":"YulLiteral","src":"2656:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2641:3:69","nodeType":"YulIdentifier","src":"2641:3:69"},"nativeSrc":"2641:18:69","nodeType":"YulFunctionCall","src":"2641:18:69"},"variableNames":[{"name":"tail","nativeSrc":"2633:4:69","nodeType":"YulIdentifier","src":"2633:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2680:9:69","nodeType":"YulIdentifier","src":"2680:9:69"},{"kind":"number","nativeSrc":"2691:1:69","nodeType":"YulLiteral","src":"2691:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"2676:3:69","nodeType":"YulIdentifier","src":"2676:3:69"},"nativeSrc":"2676:17:69","nodeType":"YulFunctionCall","src":"2676:17:69"},{"arguments":[{"name":"tail","nativeSrc":"2699:4:69","nodeType":"YulIdentifier","src":"2699:4:69"},{"name":"headStart","nativeSrc":"2705:9:69","nodeType":"YulIdentifier","src":"2705:9:69"}],"functionName":{"name":"sub","nativeSrc":"2695:3:69","nodeType":"YulIdentifier","src":"2695:3:69"},"nativeSrc":"2695:20:69","nodeType":"YulFunctionCall","src":"2695:20:69"}],"functionName":{"name":"mstore","nativeSrc":"2669:6:69","nodeType":"YulIdentifier","src":"2669:6:69"},"nativeSrc":"2669:47:69","nodeType":"YulFunctionCall","src":"2669:47:69"},"nativeSrc":"2669:47:69","nodeType":"YulExpressionStatement","src":"2669:47:69"},{"nativeSrc":"2725:139:69","nodeType":"YulAssignment","src":"2725:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"2859:4:69","nodeType":"YulIdentifier","src":"2859:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_d49bb63550654b8f0c8136961b13cd7203d45a31b139dcdcb70d95c21dcd6d8d_to_t_string_memory_ptr_fromStack","nativeSrc":"2733:124:69","nodeType":"YulIdentifier","src":"2733:124:69"},"nativeSrc":"2733:131:69","nodeType":"YulFunctionCall","src":"2733:131:69"},"variableNames":[{"name":"tail","nativeSrc":"2725:4:69","nodeType":"YulIdentifier","src":"2725:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_d49bb63550654b8f0c8136961b13cd7203d45a31b139dcdcb70d95c21dcd6d8d__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"2452:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2603:9:69","nodeType":"YulTypedName","src":"2603:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2618:4:69","nodeType":"YulTypedName","src":"2618:4:69","type":""}],"src":"2452:419:69"},{"body":{"nativeSrc":"2983:120:69","nodeType":"YulBlock","src":"2983:120:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"3005:6:69","nodeType":"YulIdentifier","src":"3005:6:69"},{"kind":"number","nativeSrc":"3013:1:69","nodeType":"YulLiteral","src":"3013:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"3001:3:69","nodeType":"YulIdentifier","src":"3001:3:69"},"nativeSrc":"3001:14:69","nodeType":"YulFunctionCall","src":"3001:14:69"},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320696e697469","kind":"string","nativeSrc":"3017:34:69","nodeType":"YulLiteral","src":"3017:34:69","type":"","value":"Initializable: contract is initi"}],"functionName":{"name":"mstore","nativeSrc":"2994:6:69","nodeType":"YulIdentifier","src":"2994:6:69"},"nativeSrc":"2994:58:69","nodeType":"YulFunctionCall","src":"2994:58:69"},"nativeSrc":"2994:58:69","nodeType":"YulExpressionStatement","src":"2994:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"3073:6:69","nodeType":"YulIdentifier","src":"3073:6:69"},{"kind":"number","nativeSrc":"3081:2:69","nodeType":"YulLiteral","src":"3081:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3069:3:69","nodeType":"YulIdentifier","src":"3069:3:69"},"nativeSrc":"3069:15:69","nodeType":"YulFunctionCall","src":"3069:15:69"},{"hexValue":"616c697a696e67","kind":"string","nativeSrc":"3086:9:69","nodeType":"YulLiteral","src":"3086:9:69","type":"","value":"alizing"}],"functionName":{"name":"mstore","nativeSrc":"3062:6:69","nodeType":"YulIdentifier","src":"3062:6:69"},"nativeSrc":"3062:34:69","nodeType":"YulFunctionCall","src":"3062:34:69"},"nativeSrc":"3062:34:69","nodeType":"YulExpressionStatement","src":"3062:34:69"}]},"name":"store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a","nativeSrc":"2877:226:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"2975:6:69","nodeType":"YulTypedName","src":"2975:6:69","type":""}],"src":"2877:226:69"},{"body":{"nativeSrc":"3255:220:69","nodeType":"YulBlock","src":"3255:220:69","statements":[{"nativeSrc":"3265:74:69","nodeType":"YulAssignment","src":"3265:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"3331:3:69","nodeType":"YulIdentifier","src":"3331:3:69"},{"kind":"number","nativeSrc":"3336:2:69","nodeType":"YulLiteral","src":"3336:2:69","type":"","value":"39"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"3272:58:69","nodeType":"YulIdentifier","src":"3272:58:69"},"nativeSrc":"3272:67:69","nodeType":"YulFunctionCall","src":"3272:67:69"},"variableNames":[{"name":"pos","nativeSrc":"3265:3:69","nodeType":"YulIdentifier","src":"3265:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"3437:3:69","nodeType":"YulIdentifier","src":"3437:3:69"}],"functionName":{"name":"store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a","nativeSrc":"3348:88:69","nodeType":"YulIdentifier","src":"3348:88:69"},"nativeSrc":"3348:93:69","nodeType":"YulFunctionCall","src":"3348:93:69"},"nativeSrc":"3348:93:69","nodeType":"YulExpressionStatement","src":"3348:93:69"},{"nativeSrc":"3450:19:69","nodeType":"YulAssignment","src":"3450:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"3461:3:69","nodeType":"YulIdentifier","src":"3461:3:69"},{"kind":"number","nativeSrc":"3466:2:69","nodeType":"YulLiteral","src":"3466:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"3457:3:69","nodeType":"YulIdentifier","src":"3457:3:69"},"nativeSrc":"3457:12:69","nodeType":"YulFunctionCall","src":"3457:12:69"},"variableNames":[{"name":"end","nativeSrc":"3450:3:69","nodeType":"YulIdentifier","src":"3450:3:69"}]}]},"name":"abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack","nativeSrc":"3109:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"3243:3:69","nodeType":"YulTypedName","src":"3243:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"3251:3:69","nodeType":"YulTypedName","src":"3251:3:69","type":""}],"src":"3109:366:69"},{"body":{"nativeSrc":"3652:248:69","nodeType":"YulBlock","src":"3652:248:69","statements":[{"nativeSrc":"3662:26:69","nodeType":"YulAssignment","src":"3662:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"3674:9:69","nodeType":"YulIdentifier","src":"3674:9:69"},{"kind":"number","nativeSrc":"3685:2:69","nodeType":"YulLiteral","src":"3685:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3670:3:69","nodeType":"YulIdentifier","src":"3670:3:69"},"nativeSrc":"3670:18:69","nodeType":"YulFunctionCall","src":"3670:18:69"},"variableNames":[{"name":"tail","nativeSrc":"3662:4:69","nodeType":"YulIdentifier","src":"3662:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3709:9:69","nodeType":"YulIdentifier","src":"3709:9:69"},{"kind":"number","nativeSrc":"3720:1:69","nodeType":"YulLiteral","src":"3720:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"3705:3:69","nodeType":"YulIdentifier","src":"3705:3:69"},"nativeSrc":"3705:17:69","nodeType":"YulFunctionCall","src":"3705:17:69"},{"arguments":[{"name":"tail","nativeSrc":"3728:4:69","nodeType":"YulIdentifier","src":"3728:4:69"},{"name":"headStart","nativeSrc":"3734:9:69","nodeType":"YulIdentifier","src":"3734:9:69"}],"functionName":{"name":"sub","nativeSrc":"3724:3:69","nodeType":"YulIdentifier","src":"3724:3:69"},"nativeSrc":"3724:20:69","nodeType":"YulFunctionCall","src":"3724:20:69"}],"functionName":{"name":"mstore","nativeSrc":"3698:6:69","nodeType":"YulIdentifier","src":"3698:6:69"},"nativeSrc":"3698:47:69","nodeType":"YulFunctionCall","src":"3698:47:69"},"nativeSrc":"3698:47:69","nodeType":"YulExpressionStatement","src":"3698:47:69"},{"nativeSrc":"3754:139:69","nodeType":"YulAssignment","src":"3754:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"3888:4:69","nodeType":"YulIdentifier","src":"3888:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack","nativeSrc":"3762:124:69","nodeType":"YulIdentifier","src":"3762:124:69"},"nativeSrc":"3762:131:69","nodeType":"YulFunctionCall","src":"3762:131:69"},"variableNames":[{"name":"tail","nativeSrc":"3754:4:69","nodeType":"YulIdentifier","src":"3754:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"3481:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3632:9:69","nodeType":"YulTypedName","src":"3632:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3647:4:69","nodeType":"YulTypedName","src":"3647:4:69","type":""}],"src":"3481:419:69"},{"body":{"nativeSrc":"3949:43:69","nodeType":"YulBlock","src":"3949:43:69","statements":[{"nativeSrc":"3959:27:69","nodeType":"YulAssignment","src":"3959:27:69","value":{"arguments":[{"name":"value","nativeSrc":"3974:5:69","nodeType":"YulIdentifier","src":"3974:5:69"},{"kind":"number","nativeSrc":"3981:4:69","nodeType":"YulLiteral","src":"3981:4:69","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"3970:3:69","nodeType":"YulIdentifier","src":"3970:3:69"},"nativeSrc":"3970:16:69","nodeType":"YulFunctionCall","src":"3970:16:69"},"variableNames":[{"name":"cleaned","nativeSrc":"3959:7:69","nodeType":"YulIdentifier","src":"3959:7:69"}]}]},"name":"cleanup_t_uint8","nativeSrc":"3906:86:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3931:5:69","nodeType":"YulTypedName","src":"3931:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"3941:7:69","nodeType":"YulTypedName","src":"3941:7:69","type":""}],"src":"3906:86:69"},{"body":{"nativeSrc":"4059:51:69","nodeType":"YulBlock","src":"4059:51:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"4076:3:69","nodeType":"YulIdentifier","src":"4076:3:69"},{"arguments":[{"name":"value","nativeSrc":"4097:5:69","nodeType":"YulIdentifier","src":"4097:5:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"4081:15:69","nodeType":"YulIdentifier","src":"4081:15:69"},"nativeSrc":"4081:22:69","nodeType":"YulFunctionCall","src":"4081:22:69"}],"functionName":{"name":"mstore","nativeSrc":"4069:6:69","nodeType":"YulIdentifier","src":"4069:6:69"},"nativeSrc":"4069:35:69","nodeType":"YulFunctionCall","src":"4069:35:69"},"nativeSrc":"4069:35:69","nodeType":"YulExpressionStatement","src":"4069:35:69"}]},"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"3998:112:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4047:5:69","nodeType":"YulTypedName","src":"4047:5:69","type":""},{"name":"pos","nativeSrc":"4054:3:69","nodeType":"YulTypedName","src":"4054:3:69","type":""}],"src":"3998:112:69"},{"body":{"nativeSrc":"4210:120:69","nodeType":"YulBlock","src":"4210:120:69","statements":[{"nativeSrc":"4220:26:69","nodeType":"YulAssignment","src":"4220:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"4232:9:69","nodeType":"YulIdentifier","src":"4232:9:69"},{"kind":"number","nativeSrc":"4243:2:69","nodeType":"YulLiteral","src":"4243:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4228:3:69","nodeType":"YulIdentifier","src":"4228:3:69"},"nativeSrc":"4228:18:69","nodeType":"YulFunctionCall","src":"4228:18:69"},"variableNames":[{"name":"tail","nativeSrc":"4220:4:69","nodeType":"YulIdentifier","src":"4220:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"4296:6:69","nodeType":"YulIdentifier","src":"4296:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"4309:9:69","nodeType":"YulIdentifier","src":"4309:9:69"},{"kind":"number","nativeSrc":"4320:1:69","nodeType":"YulLiteral","src":"4320:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4305:3:69","nodeType":"YulIdentifier","src":"4305:3:69"},"nativeSrc":"4305:17:69","nodeType":"YulFunctionCall","src":"4305:17:69"}],"functionName":{"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"4256:39:69","nodeType":"YulIdentifier","src":"4256:39:69"},"nativeSrc":"4256:67:69","nodeType":"YulFunctionCall","src":"4256:67:69"},"nativeSrc":"4256:67:69","nodeType":"YulExpressionStatement","src":"4256:67:69"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nativeSrc":"4116:214:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4182:9:69","nodeType":"YulTypedName","src":"4182:9:69","type":""},{"name":"value0","nativeSrc":"4194:6:69","nodeType":"YulTypedName","src":"4194:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4205:4:69","nodeType":"YulTypedName","src":"4205:4:69","type":""}],"src":"4116:214:69"}]},"contents":"{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_bool(value) -> cleaned {\n        cleaned := iszero(iszero(value))\n    }\n\n    function validator_revert_t_bool(value) {\n        if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_bool_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_bool(value)\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function validator_revert_t_uint256(value) {\n        if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_boolt_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_bool_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function store_literal_in_memory_d49bb63550654b8f0c8136961b13cd7203d45a31b139dcdcb70d95c21dcd6d8d(memPtr) {\n\n        mstore(add(memPtr, 0), \"Max borrow rate must be <= 1e18\")\n\n    }\n\n    function abi_encode_t_stringliteral_d49bb63550654b8f0c8136961b13cd7203d45a31b139dcdcb70d95c21dcd6d8d_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 31)\n        store_literal_in_memory_d49bb63550654b8f0c8136961b13cd7203d45a31b139dcdcb70d95c21dcd6d8d(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_d49bb63550654b8f0c8136961b13cd7203d45a31b139dcdcb70d95c21dcd6d8d__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_d49bb63550654b8f0c8136961b13cd7203d45a31b139dcdcb70d95c21dcd6d8d_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a(memPtr) {\n\n        mstore(add(memPtr, 0), \"Initializable: contract is initi\")\n\n        mstore(add(memPtr, 32), \"alizing\")\n\n    }\n\n    function abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 39)\n        store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function cleanup_t_uint8(value) -> cleaned {\n        cleaned := and(value, 0xff)\n    }\n\n    function abi_encode_t_uint8_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint8_to_t_uint8_fromStack(value0,  add(headStart, 0))\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"61010060405234801561001157600080fd5b506040516156d73803806156d7833981016040819052610030916101cd565b82828115801561003e575080155b1561005c576040516302723dfb60e21b815260040160405180910390fd5b81801561006857508015155b156100865760405163ae0fcab360e01b815260040160405180910390fd5b81151560a05281610097578061009d565b6301e133805b608052816100b45761011360201b611e28176100bf565b61011760201b611e2c175b6001600160401b031660c0525050670de0b6b3a76400008111156100fe5760405162461bcd60e51b81526004016100f59061021d565b60405180910390fd5b60e081905261010b61011b565b5050506102b2565b4390565b4290565b600054610100900460ff16156101435760405162461bcd60e51b81526004016100f590610258565b60005460ff90811614610197576000805460ff191660ff9081179091556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989161018e916102a3565b60405180910390a15b565b8015155b81146101a857600080fd5b50565b80516101b681610199565b92915050565b8061019d565b80516101b6816101bc565b6000806000606084860312156101e5576101e5600080fd5b60006101f186866101ab565b9350506020610202868287016101c2565b9250506040610213868287016101c2565b9150509250925092565b602080825281016101b681601f81527f4d617820626f72726f772072617465206d757374206265203c3d203165313800602082015260400190565b602080825281016101b681602781527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469602082015266616c697a696e6760c81b604082015260600190565b60ff82168152602081016101b6565b60805160a05160c05160e0516153ec6102eb60003960006118b701526000611c9d015260006108600152600061064f01526153ec6000f3fe608060405234801561001057600080fd5b50600436106104335760003560e01c80637821a51411610236578063b2a02ff11161013b578063dd62ed3e116100c3578063ef60450c11610087578063ef60450c1461091b578063f2fde38b1461092e578063f3fdb15a14610941578063f5e3c46214610954578063f8f9da281461096757600080fd5b8063dd62ed3e1461089e578063df3a516e146108d7578063e1d146fb146108ea578063e30c3978146108f2578063e9a44fd91461090357600080fd5b8063c37f68e21161010a578063c37f68e214610825578063c5ebeaec14610848578063c7ad08951461085b578063d1109c2f14610882578063db006a751461088b57600080fd5b8063b2a02ff1146107f0578063b4a0bdf314610803578063bbcac55714610814578063bd6d894d1461081d57600080fd5b806395d89b41116101be578063a6afed951161018d578063a6afed95146107bb578063a9059cbb146107c3578063aa5af0fd146107d6578063ae96f141146107df578063ae9d70b0146107e857600080fd5b806395d89b411461077a57806395dd919314610782578063a0712d6814610795578063a457c2d7146107a857600080fd5b80638a42c319116102055780638a42c319146107275780638bbdb6db1461073a5780638bcd40161461074d5780638da5cb5b146107605780638f840ddd1461077157600080fd5b80637821a514146106e657806379ba5097146106f9578063852a12e314610701578063856e5bb31461071457600080fd5b8063313ce5671161033c5780636752e702116102c45780636f307dc3116102935780636f307dc31461068257806370a082311461069a578063715018a6146106c357806373acee98146106cb578063757212f0146106d357600080fd5b80636752e702146106415780636857249c1461064a57806369ab3250146106715780636c540baf1461067957600080fd5b80633d9ea3a11161030b5780633d9ea3a1146105eb57806341f641ee146105f257806344fe6ffe1461060557806347bd3718146106185780635fe3b5671461062157600080fd5b8063313ce567146105a357806339509351146105bd5780633af9e669146105d05780633b1d21a2146105e357600080fd5b8063182df0f5116103bf578063210bc0521161038e578063210bc0521461054457806323323e031461055757806323b872dd1461056a5780632464176b1461057d5780632608f8181461059057600080fd5b8063182df0f5146104f657806319b1faef146104fe5780631be195601461051e5780631c4469831461053157600080fd5b80630e752702116104065780630e7527021461049e578063107568df146104be578063173b9904146104d157806317bfdfbc146104da57806318160ddd146104ed57600080fd5b806306fdde031461043857806307e2795914610456578063095ea7b31461046b5780630e32cb861461048b575b600080fd5b61044061096f565b60405161044d919061407d565b60405180910390f35b6104696104643660046140a6565b6109fd565b005b61047e6104793660046140ec565b610a64565b60405161044d9190614133565b610469610499366004614141565b610adc565b6104b16104ac3660046140a6565b610af0565b60405161044d9190614168565b6104696104cc366004614141565b610b4a565b6104b160d05481565b6104b16104e8366004614141565b610b5b565b6104b160d55481565b6104b1610bb0565b60db54610511906001600160a01b031681565b60405161044d919061417f565b61046961052c3660046141ac565b610bbf565b61046961053f3660046140a6565b610cec565b6104b16105523660046140ec565b610d67565b6104b16105653660046140ec565b610dcb565b61047e6105783660046141cd565b610e17565b61046961058b3660046140a6565b610e69565b6104b161059e3660046140ec565b610eea565b60cc546105b09060ff1681565b60405161044d9190614226565b61047e6105cb3660046140ec565b610f45565b6104b16105de366004614141565b610ff1565b6104b1611037565b600161047e565b610469610600366004614141565b611041565b6104696106133660046141cd565b611052565b6104b160d35481565b60cd54610634906001600160a01b031681565b60405161044d9190614276565b6104b160da5481565b6104b17f000000000000000000000000000000000000000000000000000000000000000081565b6104b1600081565b6104b160d15481565b60c9546105119061010090046001600160a01b031681565b6104b16106a8366004614141565b6001600160a01b0316600090815260d7602052604090205490565b6104696112e7565b6104b16112fb565b6104696106e13660046140a6565b611347565b6104696106f43660046140a6565b61146e565b6104696114bd565b6104b161070f3660046140a6565b6114f2565b6104b16107223660046140ec565b61154c565b6104696107353660046143dd565b611574565b610469610748366004614517565b611662565b61046961075b3660046141ac565b6116a1565b6033546001600160a01b0316610511565b6104b160d45481565b6104406116f1565b6104b1610790366004614141565b6116fe565b6104b16107a33660046140a6565b611709565b61047e6107b63660046140ec565b61174c565b6104b16117fb565b61047e6107d13660046140ec565b611a09565b6104b160d25481565b6104b160dd5481565b6104b1611a5a565b6104696107fe3660046141cd565b611ae3565b6097546001600160a01b0316610634565b6104b160d65481565b6104b1611b2d565b610838610833366004614141565b611b7f565b60405161044d949392919061458f565b6104b16108563660046140a6565b611bc0565b61047e7f000000000000000000000000000000000000000000000000000000000000000081565b6104b160dc5481565b6104b16108993660046140a6565b611c03565b6104b16108ac3660046145c4565b6001600160a01b03918216600090815260d86020908152604080832093909416825291909152205490565b6104b16108e53660046140ec565b611c48565b6104b1611c96565b6065546001600160a01b0316610511565b60cc546105119061010090046001600160a01b031681565b6104696109293660046140a6565b611cc4565b61046961093c366004614141565b611d59565b60ce54610634906001600160a01b031681565b6104b16109623660046145f7565b611dca565b6104b1611de4565b60ca805461097c90614653565b80601f01602080910402602001604051908101604052809291908181526020018280546109a890614653565b80156109f55780601f106109ca576101008083540402835291602001916109f5565b820191906000526020600020905b8154815290600101906020018083116109d857829003601f168201915b505050505081565b60c95460ff16610a285760405162461bcd60e51b8152600401610a1f906146a3565b60405180910390fd5b60c9805460ff19169055610a3a6117fb565b50610a43611c96565b60dd5414610a5457610a5481611e30565b5060c9805460ff19166001179055565b6000610a6f83611fb8565b33600081815260d8602090815260408083206001600160a01b038816808552925291829020859055905182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ac8908790614168565b60405180910390a360019150505b92915050565b610ae4611fdf565b610aed81612009565b50565b60c95460009060ff16610b155760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055610b276117fb565b50610b3333338461208e565b506000905060c9805460ff19166001179055919050565b610b52611fdf565b610aed8161224f565b60c95460009060ff16610b805760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055610b926117fb565b50610b9c826122b2565b905060c9805460ff19166001179055919050565b6000610bba612322565b905090565b6033546001600160a01b03163314610be95760405162461bcd60e51b8152600401610a1f90614702565b60c9546001600160a01b03610100909104811690821603610c1c5760405162461bcd60e51b8152600401610a1f90614761565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610c4b90309060040161417f565b602060405180830381865afa158015610c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8c919061477c565b9050610cb4610ca36033546001600160a01b031690565b6001600160a01b0384169083612397565b6040516001600160a01b038316907f35ce4c546a473796a8e70ec2d4af4f2031afe357afa7057b6ea7fa340730e1b290600090a25050565b60c95460ff16610d0e5760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff1916905560408051808201909152601981527f73657452657365727665466163746f722875696e7432353629000000000000006020820152610d55906123f2565b610d5d6117fb565b50610a5481612490565b60c95460009060ff16610d8c5760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055610d9f8361251c565b610da76117fb565b50610db583338460006125ac565b50600060c9805460ff1916600117905592915050565b60c95460009060ff16610df05760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055610e0383611fb8565b610e0b6117fb565b50610db5338484612869565b60c95460009060ff16610e3c5760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055610e5233858585612a68565b50600160c9805460ff191660011790559392505050565b610e8a604051806060016040528060248152602001615373602491396123f2565b60008111610eaa5760405162461bcd60e51b8152600401610a1f906147c1565b7fc2ac513cdb57f91eb2bef4db918c285829524f549682b99717c6cb06cc01118360dc5482604051610edd9291906147d1565b60405180910390a160dc55565b60c95460009060ff16610f0f5760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055610f216117fb565b50610f2d33848461208e565b506000905060c9805460ff1916600117905592915050565b6000610f5083611fb8565b33600081815260d8602090815260408083206001600160a01b0388168452909152902054610f7e8482614802565b6001600160a01b03808416600081815260d860209081526040808320948b1680845294909152908190208490555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610fde908590614168565b60405180910390a3506001949350505050565b6000806040518060200160405280611007611b2d565b90526001600160a01b038416600090815260d76020526040902054909150611030908290612c73565b9392505050565b6000610bba612c8b565b611049611fdf565b610aed81612cc1565b60c95460ff166110745760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff1916905580156110e95760cd5460405163eade3eed60e01b81526001600160a01b039091169063eade3eed906110b69030908690600401614815565b600060405180830381600087803b1580156110d057600080fd5b505af11580156110e4573d6000803e3d6000fd5b505050505b60cd546001600160a01b0316331461111457604051632c40292560e01b815260040160405180910390fd5b600061111f836122b2565b60d35490915060008315611198576111378685612d1c565b90506111438183614830565b91506001600160a01b038086169087167f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a18361117f8188614830565b8660405161118f93929190614843565b60405180910390a35b60006111a48285614830565b905080156112685760d65460006111bb8383614802565b90506111c78386614830565b94508060d681905550876001600160a01b0316306001600160a01b03167f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a18560008960405161121893929190614880565b60405180910390a3876001600160a01b03167f90125ffdb441e57c4f6bf69789206424859f206bea5727f2d81ad2470826ef6a84848460405161125d93929190614843565b60405180910390a250505b6001600160a01b03808716600081815260d9602052604080822091825560d25460019092019190915560d38690555190918916907f9fe0294717a8efbc6ace1c151b73a4c89982339b2228a27d1ca21394e348986f906112c9908990614168565b60405180910390a3505060c9805460ff191660011790555050505050565b6112ef611fdf565b6112f96000612e34565b565b60c95460009060ff166113205760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff191690556113326117fb565b505060d35460c9805460ff1916600117905590565b6113856040518060400160405280601e81526020017f73657450726f746f636f6c5365697a6553686172652875696e743235362900008152506123f2565b60cd5460408051634ada90af60e01b815290516000926001600160a01b031691634ada90af9160048083019260209291908290030181865afa1580156113cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f3919061477c565b905080611408670de0b6b3a764000084614802565b11156114275760405163034dd2c160e11b815260040160405180910390fd5b60da8054908390556040517ff5815f353a60e815cce7553e4f60c533a59d26b1b5504ea4b6db8d60da3e4da29061146190839086906147d1565b60405180910390a1505050565b60c95460ff166114905760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff191690556114a26117fb565b506114ac81612e4d565b505060c9805460ff19166001179055565b60655433906001600160a01b031681146114e95760405162461bcd60e51b8152600401610a1f906148e1565b610aed81612e34565b60c95460009060ff166115175760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff191690556115296117fb565b5061153733336000856125ac565b50600060c9805460ff19166001179055919050565b60006115578361251c565b61155f6117fb565b5061156b833384612ee2565b50600092915050565b600054610100900460ff16158080156115945750600054600160ff909116105b806115ae5750303b1580156115ae575060005460ff166001145b6115ca5760405162461bcd60e51b8152600401610a1f9061493c565b6000805460ff1916600117905580156115ed576000805461ff0019166101001790555b6115f685611fb8565b6116098c8c8c8c8c8c8c8c8c8c8c6130b9565b8015611654576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989061164b90600190614960565b60405180910390a15b505050505050505050505050565b60cd546001600160a01b0316331461168d57604051635c85a5e760e01b815260040160405180910390fd5b61169a8585858585613261565b5050505050565b6116df6040518060400160405280601d81526020017f736574496e746572657374526174654d6f64656c2861646472657373290000008152506123f2565b6116e76117fb565b50610aed81613341565b60cb805461097c90614653565b6000610ad6826122b2565b60c95460009060ff1661172e5760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff191690556117406117fb565b50611537333384612869565b600061175783611fb8565b33600081815260d8602090815260408083206001600160a01b03881684529091529020548381101561179b5760405162461bcd60e51b8152600401610a1f906149a2565b6001600160a01b03808316600081815260d860209081526040808320948a1680845294909152908190209387900393849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610fde908590614168565b600080611806611c96565b60d15490915081810361181c5760009250505090565b6000611826612c8b565b60d35460d45460d25460ce5460d6546040516301cee29d60e21b81529596509394929391926000926001600160a01b039092169163073b8a74916118729189918991899160040161458f565b602060405180830381865afa15801561188f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b3919061477c565b90507f00000000000000000000000000000000000000000000000000000000000000008111156118f55760405162461bcd60e51b8152600401610a1f906149e6565b60006119018789614830565b9050600061191d60405180602001604052808581525083613453565b9050600061192b8288612c73565b905060006119398883614802565b90506000611958604051806020016040528060d054815250848a613484565b9050600061196785898a613484565b60d18e905560d281905560d384905560d483905560dc5460dd549192509061198f908f614830565b106119b85760dd8d9055818b10156119af576119aa8b611e30565b6119b8565b6119b882611e30565b7f4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc048b8583866040516119ed949392919061458f565b60405180910390a160009d505050505050505050505050505090565b60c95460009060ff16611a2e5760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055611a4433808585612a68565b50600160c9805460ff1916600117905592915050565b60ce546000906001600160a01b0316630cde8d1c611a76612c8b565b60d35460d45460d05460d6546040518663ffffffff1660e01b8152600401611aa29594939291906149f6565b602060405180830381865afa158015611abf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bba919061477c565b60c95460ff16611b055760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055611b1b338484846134a5565b505060c9805460ff1916600117905550565b60c95460009060ff16611b525760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055611b646117fb565b50611b6d612322565b905060c9805460ff1916600117905590565b6001600160a01b038116600090815260d760205260408120548190819081908190611ba9876122b2565b611bb1612322565b93509350935093509193509193565b60c95460009060ff16611be55760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055611bf76117fb565b50611537333384612ee2565b60c95460009060ff16611c285760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055611c3a6117fb565b5061153733338460006125ac565b60c95460009060ff16611c6d5760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055611c808361251c565b611c886117fb565b50610db583336000856125ac565b6000610bba7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16565b60db546001600160a01b03163314611cee5760405162461bcd60e51b8152600401610a1f90614a80565b60d654811115611d105760405162461bcd60e51b8152600401610a1f90614ad6565b60d6546000611d1f8383614830565b90508060d6819055507f9e19ec7d2b8f8a94df8cc0072453ace318d221e3cbb2731d0eaa0baac856520f82826040516114619291906147d1565b611d61611fdf565b606580546001600160a01b0383166001600160a01b03199091168117909155611d926033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000611dda338585856000613261565b5060009392505050565b60ce546000906001600160a01b031663073b8a74611e00612c8b565b60d35460d45460d6546040518563ffffffff1660e01b8152600401611aa2949392919061458f565b4390565b4290565b80600003611e3b5750565b6000611e45611c96565b60d15414611e6657604051630dff50cb60e41b815260040160405180910390fd5b81611e6f612c8b565b1015611e8e57604051633345e99960e01b815260040160405180910390fd5b60d454821115611eb1576040516378d2980560e11b815260040160405180910390fd5b8160d454611ebf9190614830565b60d481905560cc54909150611ee29061010090046001600160a01b03168361382c565b60cc5460cd5460c9546040516305bebb3b60e21b81526001600160a01b03610100948590048116946316faecec94611f2a949083169391900490911690600090600401614b2a565b600060405180830381600087803b158015611f4457600080fd5b505af1158015611f58573d6000803e3d6000fd5b5050505060cc60019054906101000a90046001600160a01b03166001600160a01b03167f9cc63bb4ef37ad6a5f5f657dfaf94865531d4234acbc431cc8ac035468f627208383604051611fac9291906147d1565b60405180910390a25050565b6001600160a01b038116610aed576040516342bcdf7f60e11b815260040160405180910390fd5b6033546001600160a01b031633146112f95760405162461bcd60e51b8152600401610a1f90614b84565b6001600160a01b03811661202f5760405162461bcd60e51b8152600401610a1f90614bd6565b609780546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa0906120829083908590614815565b60405180910390a15050565b60cd5460405163eade3eed60e01b81526000916001600160a01b03169063eade3eed906120c19030908790600401614815565b600060405180830381600087803b1580156120db57600080fd5b505af11580156120ef573d6000803e3d6000fd5b505050506120fb611c96565b60d1541461211c5760405163c9021e2f60e01b815260040160405180910390fd5b6000612127846122b2565b9050600081841015612139578361213b565b815b905060006121498783612d1c565b905060006121578285614830565b905060008260d3546121699190614830565b6001600160a01b03808a16600081815260d960205260409081902086815560d25460019091015560d38490555192935091908b16907f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1906121cf90879087908790614843565b60405180910390a360cd5460d254604051631ededc9160e01b81526001600160a01b0390921691631ededc91916122109130918e918e918a91600401614be6565b600060405180830381600087803b15801561222a57600080fd5b505af115801561223e573d6000803e3d6000fd5b50949b9a5050505050505050505050565b61225881611fb8565b60cc80546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907fafec95c8612496c3ecf5dddc71e393528fe29bd145fbaf9c6b496d78d7e2d79b90600090a35050565b6001600160a01b038116600090815260d96020908152604080832081518083019092528054808352600190910154928201929092529082036122f75750600092915050565b60d254815160009161230891614c0e565b905081602001518161231a9190614c43565b949350505050565b60d55460009080820361233757505060cf5490565b6000612341612c8b565b9050600060d45460d65460d354846123599190614802565b6123639190614802565b61236d9190614830565b9050600083612384670de0b6b3a764000084614c0e565b61238e9190614c43565b95945050505050565b6123ed8363a9059cbb60e01b84846040516024016123b6929190614c57565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613848565b505050565b6097546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab906124259033908690600401614c65565b602060405180830381865afa158015612442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124669190614c90565b90508061248c57333083604051634a3fa29360e01b8152600401610a1f93929190614cb1565b5050565b612498611c96565b60d154146124b957604051637dfca6b760e11b815260040160405180910390fd5b670de0b6b3a76400008111156124e25760405163717220f360e11b815260040160405180910390fd5b60d08054908290556040517faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f8214609061208290839085906147d1565b60cd54604051630217306760e31b81526001600160a01b03909116906310b983389061254e9084903390600401614815565b602060405180830381865afa15801561256b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258f9190614c90565b610aed57604051630cf0b6f560e01b815260040160405180910390fd5b8115806125b7575080155b6125d35760405162461bcd60e51b8152600401610a1f90614d2f565b6125db611c96565b60d154146125fc576040516397b5cfcd60e01b815260040160405180910390fd5b60006040518060200160405280612611612322565b90529050600080841561262657849150612664565b61263084846138da565b9150600061263e83856138f8565b9050801580159061264f5750848114155b15612662578261265e81614d3f565b9350505b505b61266e8383612c73565b9050806000036126905760405162461bcd60e51b8152600401610a1f90614d84565b60cd54604051634732387560e11b81526001600160a01b0390911690638e6470ea906126c49030908b908790600401614d94565b600060405180830381600087803b1580156126de57600080fd5b505af11580156126f2573d6000803e3d6000fd5b505050508060d454612702612c8b565b61270c9190614830565b101561272b576040516391240a1b60e01b815260040160405180910390fd5b8160d5546127399190614830565b60d5556001600160a01b038716600090815260d76020526040812054612760908490614830565b6001600160a01b038916600090815260d7602052604090208190559050612787878361382c565b306001600160a01b0316886001600160a01b0316600080516020615397833981519152856040516127b89190614168565b60405180910390a3876001600160a01b03167fbd5034ffbd47e4e72a94baa2cdb74c6fad73cb3bcdc13036b72ec8306f5a76468385846040516127fd93929190614843565b60405180910390a260cd546040516351dff98960e01b81526001600160a01b03909116906351dff9899061283b9030908c9087908990600401614daf565b600060405180830381600087803b15801561285557600080fd5b505af1158015611654573d6000803e3d6000fd5b60cd5460405163c0891ba960e01b81526001600160a01b039091169063c0891ba99061289d90309086908690600401614d94565b600060405180830381600087803b1580156128b757600080fd5b505af11580156128cb573d6000803e3d6000fd5b505050506128d7611c96565b60d154146128f8576040516338d8859760e01b815260040160405180910390fd5b6000604051806020016040528061290d612322565b90529050600061291d8584612d1c565b9050600061292b82846138da565b90508060d55461293b9190614802565b60d5556001600160a01b038516600090815260d76020526040812054612962908390614802565b6001600160a01b038716600081815260d760205260409081902083905551919250907fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb906129b590869086908690614843565b60405180910390a2856001600160a01b031660006001600160a01b0316600080516020615397833981519152846040516129ef9190614168565b60405180910390a360cd546040516341c728b960e01b81526001600160a01b03909116906341c728b990612a2d9030908a9088908890600401614daf565b600060405180830381600087803b158015612a4757600080fd5b505af1158015612a5b573d6000803e3d6000fd5b5050505050505050505050565b60cd54604051636d0be88d60e01b81526001600160a01b0390911690636d0be88d90612a9e903090879087908790600401614dca565b600060405180830381600087803b158015612ab857600080fd5b505af1158015612acc573d6000803e3d6000fd5b50505050816001600160a01b0316836001600160a01b031603612b0257604051638cd22d1960e01b815260040160405180910390fd5b6000836001600160a01b0316856001600160a01b031603612b265750600019612b4e565b506001600160a01b03808416600090815260d860209081526040808320938816835292905220545b6000612b5a8383614830565b6001600160a01b038616600090815260d7602052604081205491925090612b82908590614830565b6001600160a01b038616600090815260d7602052604081205491925090612baa908690614802565b6001600160a01b03808916600090815260d7602052604080822086905591891681522081905590506000198414612c04576001600160a01b03808816600090815260d860209081526040808320938c168352929052208390555b856001600160a01b0316876001600160a01b031660008051602061539783398151915287604051612c359190614168565b60405180910390a360cd5460405163352b4a3f60e11b81526001600160a01b0390911690636a56947e9061283b9030908b908b908b90600401614dca565b600080612c808484613453565b905061231a8161391b565b60c9546040516370a0823160e01b815260009161010090046001600160a01b0316906370a0823190611aa290309060040161417f565b612cca81611fb8565b60db80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f6dbf1ff28f860de5edafa4c6505e37c0aba213288cc4166c5352b6d3776c79ef90600090a35050565b60c9546040516370a0823160e01b815260009161010090046001600160a01b031690829082906370a0823190612d5690309060040161417f565b602060405180830381865afa158015612d73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d97919061477c565b9050612dae6001600160a01b038316863087613933565b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190612ddd90309060040161417f565b602060405180830381865afa158015612dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1e919061477c565b9050612e2a8282614830565b9695505050505050565b606580546001600160a01b0319169055610aed8161395a565b6000806000612e5a611c96565b60d15414612e7d57806040516338acf79960e01b8152600401610a1f9190614168565b612e873385612d1c565b90508060d454612e979190614802565b60d481905560405190925033907fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc590612ed390849086906147d1565b60405180910390a29392505050565b60cd5460405163df71403b60e01b81526001600160a01b039091169063df71403b90612f1690309087908690600401614d94565b600060405180830381600087803b158015612f3057600080fd5b505af1158015612f44573d6000803e3d6000fd5b50505050612f50611c96565b60d15414612f7157604051630e8d8c6160e21b815260040160405180910390fd5b8060d454612f7d612c8b565b612f879190614830565b1015612fa6576040516348c2588160e01b815260040160405180910390fd5b6000612fb1846122b2565b90506000612fbf8383614802565b905060008360d354612fd19190614802565b6001600160a01b038716600090815260d96020526040902083815560d25460019091015560d38190559050613006858561382c565b856001600160a01b03167f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab8085848460405161304393929190614843565b60405180910390a260cd54604051635c77860560e01b81526001600160a01b0390911690635c7786059061307f9030908a908990600401614d94565b600060405180830381600087803b15801561309957600080fd5b505af11580156130ad573d6000803e3d6000fd5b50505050505050505050565b600054610100900460ff166130e05760405162461bcd60e51b8152600401610a1f90614e3a565b6130e86139ac565b6130f1836139db565b60d154158015613101575060d254155b61311d5760405162461bcd60e51b8152600401610a1f90614e8a565b60cf8890558761313f5760405162461bcd60e51b8152600401610a1f90614ee7565b6131488a613a02565b613150611c96565b60d155670de0b6b3a764000060d25561316889613341565b61317181612490565b60ca61317d8882614f7c565b5060cb61318a8782614f7c565b5060cc805460ff191660ff871617905581516131a590612cc1565b6131b2826020015161224f565b66b1a2bc2ec5000060da5560c98054610100600160a81b0319166101006001600160a01b038e811682029290921792839055604080516318160ddd60e01b8152905191909304909116916318160ddd9160048083019260209291908290030181865afa158015613226573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061324a919061477c565b5060c9805460ff19166001179055612a5b84612e34565b60c95460ff166132835760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff191690556132956117fb565b506000826001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156132d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132fc919061477c565b9050801561331f5780604051633eea49b760e11b8152600401610a1f9190614168565b61332c8686868686613add565b505060c9805460ff1916600117905550505050565b600061334b611c96565b60d1541461336c57604051630be2a5cb60e11b815260040160405180910390fd5b60ce60009054906101000a90046001600160a01b03169050816001600160a01b0316632191f92a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e69190614c90565b6134025760405162461bcd60e51b8152600401610a1f90615074565b60ce80546001600160a01b0319166001600160a01b0384811691821790925560405190918316907fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f92690600090a35050565b604080516020810190915260008152604051806020016040528061347b856000015185613eba565b90529392505050565b6000806134918585613453565b905061238e61349f8261391b565b84613ec6565b60cd5460405163037883e560e31b81526001600160a01b0390911690631bc41f28906134db903090889088908890600401615084565b600060405180830381600087803b1580156134f557600080fd5b505af1158015613509573d6000803e3d6000fd5b50505050826001600160a01b0316826001600160a01b03160361353f57604051633a94626760e11b815260040160405180910390fd5b60cd5460408051634ada90af60e01b815290516000926001600160a01b031691634ada90af9160048083019260209291908290030181865afa158015613589573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135ad919061477c565b905060006135cb83604051806020016040528060da548152506138f8565b905060006135e7826040518060200160405280868152506138da565b905060006135f58286614830565b90506000604051806020016040528061360c612322565b90529050600061361c8285612c73565b90508360d55461362c9190614830565b60d5556001600160a01b038816600090815260d76020526040902054613653908890614830565b6001600160a01b03808a16600090815260d7602052604080822093909355908b1681522054613683908490614802565b6001600160a01b03808b16600090815260d7602052604090209190915560cc546136b491610100909104168261382c565b60cc5460cd5460c9546040516305bebb3b60e21b81526001600160a01b03610100948590048116946316faecec946136fc949083169391900490911690600190600401614b2a565b600060405180830381600087803b15801561371657600080fd5b505af115801561372a573d6000803e3d6000fd5b50505050886001600160a01b0316886001600160a01b03166000805160206153978339815191528560405161375f9190614168565b60405180910390a360cc546040516001600160a01b036101009092048216918a16907f3ac0548d62d3fa3c9a817cd33899b9acacd57e8958ebe51bc7d9a79f26a8a5db906137ae908590614168565b60405180910390a360cd54604051636d35bf9160e01b81526001600160a01b0390911690636d35bf91906137ee9030908e908e908e908e906004016150b9565b600060405180830381600087803b15801561380857600080fd5b505af115801561381c573d6000803e3d6000fd5b5050505050505050505050505050565b60c95461010090046001600160a01b03166123ed818484612397565b600061389d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613ed29092919063ffffffff16565b90508051600014806138be5750808060200190518101906138be9190614c90565b6123ed5760405162461bcd60e51b8152600401610a1f90615135565b60006110306138f184670de0b6b3a7640000613eba565b8351613ee1565b6000670de0b6b3a7640000613911848460000151613eba565b6110309190614c43565b8051600090610ad690670de0b6b3a764000090614c43565b613954846323b872dd60e01b8585856040516024016123b693929190614d94565b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139d35760405162461bcd60e51b8152600401610a1f90614e3a565b6112f9613eed565b600054610100900460ff16610ae45760405162461bcd60e51b8152600401610a1f90614e3a565b60cd5460408051623f1ee960e11b815290516001600160a01b0392831692841691627e3dd29160048083019260209291908290030181865afa158015613a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a709190614c90565b613a8c5760405162461bcd60e51b8152600401610a1f90615074565b60cd80546001600160a01b0319166001600160a01b0384811691821790925560405190918316907f7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d90600090a35050565b60cd5460405163e89d51ad60e01b81526001600160a01b039091169063e89d51ad90613b159030908690899089908890600401615145565b600060405180830381600087803b158015613b2f57600080fd5b505af1158015613b43573d6000803e3d6000fd5b50505050613b4f611c96565b60d15414613b70576040516380965b1b60e01b815260040160405180910390fd5b613b78611c96565b826001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bda919061477c565b14613bf857604051631046f38d60e31b815260040160405180910390fd5b846001600160a01b0316846001600160a01b031603613c2a57604051631bd1a62160e21b815260040160405180910390fd5b82600003613c4b5760405163d29da7ef60e01b815260040160405180910390fd5b6000198303613c6d57604051635982c5bb60e11b815260040160405180910390fd5b6000613c7a86868661208e565b60cd5460405163c488847b60e01b815291925060009182916001600160a01b03169063c488847b90613cb490309089908890600401614d94565b6040805180830381865afa158015613cd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cf49190615187565b9150915060008214613d185760405162461bcd60e51b8152600401610a1f9061520a565b6040516370a0823160e01b815281906001600160a01b038716906370a0823190613d46908b9060040161417f565b602060405180830381865afa158015613d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d87919061477c565b1015613da55760405162461bcd60e51b8152600401610a1f9061524e565b306001600160a01b03861603613dc657613dc1308989846134a5565b613e29565b60405163b2a02ff160e01b81526001600160a01b0386169063b2a02ff190613df6908b908b908690600401614d94565b600060405180830381600087803b158015613e1057600080fd5b505af1158015613e24573d6000803e3d6000fd5b505050505b846001600160a01b0316876001600160a01b0316896001600160a01b03167f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb528685604051613e789291906147d1565b60405180910390a460cd546040516347ef3b3b60e01b81526001600160a01b03909116906347ef3b3b9061283b90309089908d908d908a90899060040161525e565b60006110308284614c0e565b60006110308284614802565b606061231a8484600085613f1d565b60006110308284614c43565b600054610100900460ff16613f145760405162461bcd60e51b8152600401610a1f90614e3a565b6112f933612e34565b606082471015613f3f5760405162461bcd60e51b8152600401610a1f906152f0565b600080866001600160a01b03168587604051613f5b9190615322565b60006040518083038185875af1925050503d8060008114613f98576040519150601f19603f3d011682016040523d82523d6000602084013e613f9d565b606091505b5091509150613fae87838387613fb9565b979650505050505050565b60608315613ff8578251600003613ff1576001600160a01b0385163b613ff15760405162461bcd60e51b8152600401610a1f90615362565b508161231a565b61231a838381511561400d5781518083602001fd5b8060405162461bcd60e51b8152600401610a1f919061407d565b60005b8381101561404257818101518382015260200161402a565b50506000910152565b6000614055825190565b80845260208401935061406c818560208601614027565b601f01601f19169290920192915050565b60208082528101611030818461404b565b805b8114610aed57600080fd5b8035610ad68161408e565b6000602082840312156140bb576140bb600080fd5b600061231a848461409b565b60006001600160a01b038216610ad6565b614090816140c7565b8035610ad6816140d8565b6000806040838503121561410257614102600080fd5b600061410e85856140e1565b925050602061411f8582860161409b565b9150509250929050565b8015155b82525050565b60208101610ad68284614129565b60006020828403121561415657614156600080fd5b600061231a84846140e1565b8061412d565b60208101610ad68284614162565b61412d816140c7565b60208101610ad68284614176565b6000610ad6826140c7565b6140908161418d565b8035610ad681614198565b6000602082840312156141c1576141c1600080fd5b600061231a84846141a1565b6000806000606084860312156141e5576141e5600080fd5b60006141f186866140e1565b9350506020614202868287016140e1565b92505060406142138682870161409b565b9150509250925092565b60ff811661412d565b60208101610ad6828461421d565b6000610ad66001600160a01b03831661424b565b90565b6001600160a01b031690565b6000610ad682614234565b6000610ad682614257565b61412d81614262565b60208101610ad6828461426d565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156142c0576142c0614284565b6040525050565b60006142d260405190565b90506142de828261429a565b919050565b600067ffffffffffffffff8211156142fd576142fd614284565b601f19601f83011660200192915050565b82818337506000910152565b600061432d614328846142e3565b6142c7565b90508281526020810184848401111561434857614348600080fd5b61435384828561430e565b509392505050565b600082601f83011261436f5761436f600080fd5b813561231a84826020860161431a565b60ff8116614090565b8035610ad68161437f565b6000604082840312156143a8576143a8600080fd5b6143b260406142c7565b905060006143c084846140e1565b82525060206143d1848483016140e1565b60208301525092915050565b60008060008060008060008060008060006101808c8e03121561440257614402600080fd5b600061440e8e8e6140e1565b9b5050602061441f8e828f016141a1565b9a505060406144308e828f016141a1565b99505060606144418e828f0161409b565b98505060808c013567ffffffffffffffff81111561446157614461600080fd5b61446d8e828f0161435b565b97505060a08c013567ffffffffffffffff81111561448d5761448d600080fd5b6144998e828f0161435b565b96505060c06144aa8e828f01614388565b95505060e06144bb8e828f016140e1565b9450506101006144cd8e828f016140e1565b9350506101206144df8e828f01614393565b9250506101606144f18e828f0161409b565b9150509295989b509295989b9093969950565b801515614090565b8035610ad681614504565b600080600080600060a0868803121561453257614532600080fd5b600061453e88886140e1565b955050602061454f888289016140e1565b94505060406145608882890161409b565b9350506060614571888289016141a1565b92505060806145828882890161450c565b9150509295509295909350565b6080810161459d8287614162565b6145aa6020830186614162565b6145b76040830185614162565b61238e6060830184614162565b600080604083850312156145da576145da600080fd5b60006145e685856140e1565b925050602061411f858286016140e1565b60008060006060848603121561460f5761460f600080fd5b600061461b86866140e1565b935050602061462c8682870161409b565b9250506040614213868287016141a1565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061466757607f821691505b6020821081036146795761467961463d565b50919050565b600a8152600060208201691c994b595b9d195c995960b21b815291505b5060200190565b60208082528101610ad68161467f565b602f81526000602082017f56546f6b656e3a3a7377656570546f6b656e3a206f6e6c792061646d696e206381526e616e20737765657020746f6b656e7360881b602082015291505b5060400190565b60208082528101610ad6816146b3565b603281526000602082017f56546f6b656e3a3a7377656570546f6b656e3a2063616e206e6f74207377656581527138103ab73232b9363cb4b733903a37b5b2b760711b602082015291506146fb565b60208082528101610ad681614712565b8051610ad68161408e565b60006020828403121561479157614791600080fd5b600061231a8484614771565b600d81526000602082016c125b9d985b1a5908125b9c1d5d609a1b8152915061469c565b60208082528101610ad68161479d565b604081016147df8285614162565b6110306020830184614162565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ad657610ad66147ec565b604081016148238285614176565b6110306020830184614176565b81810381811115610ad657610ad66147ec565b606081016148518286614162565b61485e6020830185614162565b61231a6040830184614162565b6000610ad66142488381565b61412d8161486b565b6060810161488e8286614162565b61485e6020830185614877565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b602082015291506146fb565b60208082528101610ad68161489b565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015291506146fb565b60208082528101610ad6816148f1565b600060ff8216610ad6565b61412d8161494c565b60208101610ad68284614957565b601e81526000602082017f64656372656173656420616c6c6f77616e63652062656c6f77207a65726f00008152915061469c565b60208082528101610ad68161496e565b601c81526000602082017f626f72726f772072617465206973206162737572646c792068696768000000008152915061469c565b60208082528101610ad6816149b2565b60a08101614a048288614162565b614a116020830187614162565b614a1e6040830186614162565b614a2b6060830185614162565b612e2a6080830184614162565b602b81526000602082017f6f6e6c792073686f727466616c6c20636f6e74726163742063616e207570646181526a1d1948189859081919589d60aa1b602082015291506146fb565b60208082528101610ad681614a38565b602981526000602082017f6d6f7265207468616e206261642064656274207265636f76657265642066726f815268369030bab1ba34b7b760b91b602082015291506146fb565b60208082528101610ad681614a90565b634e487b7160e01b600052602160045260246000fd5b60028110610aed57610aed614ae6565b806142de81614afc565b6000610ad682614b0c565b61412d81614b16565b60608101614b388286614176565b614b456020830185614176565b61231a6040830184614b21565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65729101908152600061469c565b60208082528101610ad681614b52565b602581526000602082017f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b602082015291506146fb565b60208082528101610ad681614b94565b60a08101614bf48288614176565b614c016020830187614176565b614a1e6040830186614176565b818102808215838204851417614c2657614c266147ec565b5092915050565b634e487b7160e01b600052601260045260246000fd5b600082614c5257614c52614c2d565b500490565b604081016147df8285614176565b60408101614c738285614176565b818103602083015261231a818461404b565b8051610ad681614504565b600060208284031215614ca557614ca5600080fd5b600061231a8484614c85565b60608101614cbf8286614176565b614ccc6020830185614176565b818103604083015261238e818461404b565b603481526000602082017f6f6e65206f662072656465656d546f6b656e73496e206f722072656465656d418152736d6f756e74496e206d757374206265207a65726f60601b602082015291506146fb565b60208082528101610ad681614cde565b60006000198203614d5257614d526147ec565b5060010190565b601481526000602082017372656465656d416d6f756e74206973207a65726f60601b8152915061469c565b60208082528101610ad681614d59565b60608101614da28286614176565b61485e6020830185614176565b60808101614dbd8287614176565b6145aa6020830186614176565b60808101614dd88287614176565b614de56020830186614176565b6145b76040830185614176565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b602082015291506146fb565b60208082528101610ad681614df2565b602381526000602082017f6d61726b6574206d6179206f6e6c7920626520696e697469616c697a6564206f8152626e636560e81b602082015291506146fb565b60208082528101610ad681614e4a565b603081526000602082017f696e697469616c2065786368616e67652072617465206d75737420626520677281526f32b0ba32b9103a3430b7103d32b9379760811b602082015291506146fb565b60208082528101610ad681614e9a565b614f008361486b565b815460001960089490940293841b1916921b91909117905550565b60006123ed818484614ef7565b8181101561248c57614f3b600082614f1b565b600101614f28565b601f8211156123ed576000818152602090206020601f85010481016020851015614f6a5750805b61169a6020601f860104830182614f28565b815167ffffffffffffffff811115614f9657614f96614284565b614fa08254614653565b614fab828285614f43565b6020601f831160018114614fdf5760008415614fc75750858201515b600019600886021c1981166002860217865550615038565b600085815260208120601f198616915b8281101561500f5788850151825560209485019460019092019101614fef565b8683101561502b5784890151600019601f89166008021c191682555b6001600288020188555050505b505050505050565b601c81526000602082017f6d61726b6572206d6574686f642072657475726e65642066616c7365000000008152915061469c565b60208082528101610ad681615040565b608081016150928287614176565b61509f6020830186614176565b6150ac6040830185614176565b61238e6060830184614176565b60a081016150c78288614176565b6150d46020830187614176565b6150e16040830186614176565b614a2b6060830185614176565b602a81526000602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015291506146fb565b60208082528101610ad6816150ee565b60a081016151538288614176565b6151606020830187614176565b61516d6040830186614176565b61517a6060830185614162565b612e2a6080830184614129565b6000806040838503121561519d5761519d600080fd5b60006151a98585614771565b925050602061411f85828601614771565b603381526000602082017f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f815272105353d5539517d4d152569157d19052531151606a1b602082015291506146fb565b60208082528101610ad6816151ba565b601881526000602082017f4c49515549444154455f5345495a455f544f4f5f4d55434800000000000000008152915061469c565b60208082528101610ad68161521a565b60c0810161526c8289614176565b6152796020830188614176565b6152866040830187614176565b6152936060830186614176565b6152a06080830185614162565b613fae60a0830184614162565b602681526000602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f8152651c8818d85b1b60d21b602082015291506146fb565b60208082528101610ad6816152ad565b600061530a825190565b615318818560208601614027565b9290920192915050565b60006110308284615300565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000008152915061469c565b60208082528101610ad68161532e56fe7365745265647563655265736572766573426c6f636b44656c74612875696e7432353629ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a5fd6777e1f72c4e9c76e8173abbbc59eafa4c0406e6a53a57293899d5e0a4f264736f6c63430008190033","opcodes":"PUSH2 0x100 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x56D7 CODESIZE SUB DUP1 PUSH2 0x56D7 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x30 SWAP2 PUSH2 0x1CD JUMP JUMPDEST DUP3 DUP3 DUP2 ISZERO DUP1 ISZERO PUSH2 0x3E JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0x5C JUMPI PUSH1 0x40 MLOAD PUSH4 0x2723DFB PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x68 JUMPI POP DUP1 ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x86 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAE0FCAB3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 ISZERO ISZERO PUSH1 0xA0 MSTORE DUP2 PUSH2 0x97 JUMPI DUP1 PUSH2 0x9D JUMP JUMPDEST PUSH4 0x1E13380 JUMPDEST PUSH1 0x80 MSTORE DUP2 PUSH2 0xB4 JUMPI PUSH2 0x113 PUSH1 0x20 SHL PUSH2 0x1E28 OR PUSH2 0xBF JUMP JUMPDEST PUSH2 0x117 PUSH1 0x20 SHL PUSH2 0x1E2C OR JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0xC0 MSTORE POP POP PUSH8 0xDE0B6B3A7640000 DUP2 GT ISZERO PUSH2 0xFE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF5 SWAP1 PUSH2 0x21D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xE0 DUP2 SWAP1 MSTORE PUSH2 0x10B PUSH2 0x11B JUMP JUMPDEST POP POP POP PUSH2 0x2B2 JUMP JUMPDEST NUMBER SWAP1 JUMP JUMPDEST TIMESTAMP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x143 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF5 SWAP1 PUSH2 0x258 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF SWAP1 DUP2 AND EQ PUSH2 0x197 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP2 PUSH2 0x18E SWAP2 PUSH2 0x2A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST JUMP JUMPDEST DUP1 ISZERO ISZERO JUMPDEST DUP2 EQ PUSH2 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1B6 DUP2 PUSH2 0x199 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 PUSH2 0x19D JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1B6 DUP2 PUSH2 0x1BC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1E5 JUMPI PUSH2 0x1E5 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1F1 DUP7 DUP7 PUSH2 0x1AB JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x202 DUP7 DUP3 DUP8 ADD PUSH2 0x1C2 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x213 DUP7 DUP3 DUP8 ADD PUSH2 0x1C2 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1B6 DUP2 PUSH1 0x1F DUP2 MSTORE PUSH32 0x4D617820626F72726F772072617465206D757374206265203C3D203165313800 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1B6 DUP2 PUSH1 0x27 DUP2 MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320696E697469 PUSH1 0x20 DUP3 ADD MSTORE PUSH7 0x616C697A696E67 PUSH1 0xC8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP3 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD PUSH2 0x1B6 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x53EC PUSH2 0x2EB PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x18B7 ADD MSTORE PUSH1 0x0 PUSH2 0x1C9D ADD MSTORE PUSH1 0x0 PUSH2 0x860 ADD MSTORE PUSH1 0x0 PUSH2 0x64F ADD MSTORE PUSH2 0x53EC PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x433 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7821A514 GT PUSH2 0x236 JUMPI DUP1 PUSH4 0xB2A02FF1 GT PUSH2 0x13B JUMPI DUP1 PUSH4 0xDD62ED3E GT PUSH2 0xC3 JUMPI DUP1 PUSH4 0xEF60450C GT PUSH2 0x87 JUMPI DUP1 PUSH4 0xEF60450C EQ PUSH2 0x91B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x92E JUMPI DUP1 PUSH4 0xF3FDB15A EQ PUSH2 0x941 JUMPI DUP1 PUSH4 0xF5E3C462 EQ PUSH2 0x954 JUMPI DUP1 PUSH4 0xF8F9DA28 EQ PUSH2 0x967 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x89E JUMPI DUP1 PUSH4 0xDF3A516E EQ PUSH2 0x8D7 JUMPI DUP1 PUSH4 0xE1D146FB EQ PUSH2 0x8EA JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x8F2 JUMPI DUP1 PUSH4 0xE9A44FD9 EQ PUSH2 0x903 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC37F68E2 GT PUSH2 0x10A JUMPI DUP1 PUSH4 0xC37F68E2 EQ PUSH2 0x825 JUMPI DUP1 PUSH4 0xC5EBEAEC EQ PUSH2 0x848 JUMPI DUP1 PUSH4 0xC7AD0895 EQ PUSH2 0x85B JUMPI DUP1 PUSH4 0xD1109C2F EQ PUSH2 0x882 JUMPI DUP1 PUSH4 0xDB006A75 EQ PUSH2 0x88B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB2A02FF1 EQ PUSH2 0x7F0 JUMPI DUP1 PUSH4 0xB4A0BDF3 EQ PUSH2 0x803 JUMPI DUP1 PUSH4 0xBBCAC557 EQ PUSH2 0x814 JUMPI DUP1 PUSH4 0xBD6D894D EQ PUSH2 0x81D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95D89B41 GT PUSH2 0x1BE JUMPI DUP1 PUSH4 0xA6AFED95 GT PUSH2 0x18D JUMPI DUP1 PUSH4 0xA6AFED95 EQ PUSH2 0x7BB JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x7C3 JUMPI DUP1 PUSH4 0xAA5AF0FD EQ PUSH2 0x7D6 JUMPI DUP1 PUSH4 0xAE96F141 EQ PUSH2 0x7DF JUMPI DUP1 PUSH4 0xAE9D70B0 EQ PUSH2 0x7E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x77A JUMPI DUP1 PUSH4 0x95DD9193 EQ PUSH2 0x782 JUMPI DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x795 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x7A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8A42C319 GT PUSH2 0x205 JUMPI DUP1 PUSH4 0x8A42C319 EQ PUSH2 0x727 JUMPI DUP1 PUSH4 0x8BBDB6DB EQ PUSH2 0x73A JUMPI DUP1 PUSH4 0x8BCD4016 EQ PUSH2 0x74D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x760 JUMPI DUP1 PUSH4 0x8F840DDD EQ PUSH2 0x771 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7821A514 EQ PUSH2 0x6E6 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x6F9 JUMPI DUP1 PUSH4 0x852A12E3 EQ PUSH2 0x701 JUMPI DUP1 PUSH4 0x856E5BB3 EQ PUSH2 0x714 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0x33C JUMPI DUP1 PUSH4 0x6752E702 GT PUSH2 0x2C4 JUMPI DUP1 PUSH4 0x6F307DC3 GT PUSH2 0x293 JUMPI DUP1 PUSH4 0x6F307DC3 EQ PUSH2 0x682 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x69A JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x6C3 JUMPI DUP1 PUSH4 0x73ACEE98 EQ PUSH2 0x6CB JUMPI DUP1 PUSH4 0x757212F0 EQ PUSH2 0x6D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6752E702 EQ PUSH2 0x641 JUMPI DUP1 PUSH4 0x6857249C EQ PUSH2 0x64A JUMPI DUP1 PUSH4 0x69AB3250 EQ PUSH2 0x671 JUMPI DUP1 PUSH4 0x6C540BAF EQ PUSH2 0x679 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3D9EA3A1 GT PUSH2 0x30B JUMPI DUP1 PUSH4 0x3D9EA3A1 EQ PUSH2 0x5EB JUMPI DUP1 PUSH4 0x41F641EE EQ PUSH2 0x5F2 JUMPI DUP1 PUSH4 0x44FE6FFE EQ PUSH2 0x605 JUMPI DUP1 PUSH4 0x47BD3718 EQ PUSH2 0x618 JUMPI DUP1 PUSH4 0x5FE3B567 EQ PUSH2 0x621 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0x5A3 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x5BD JUMPI DUP1 PUSH4 0x3AF9E669 EQ PUSH2 0x5D0 JUMPI DUP1 PUSH4 0x3B1D21A2 EQ PUSH2 0x5E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x182DF0F5 GT PUSH2 0x3BF JUMPI DUP1 PUSH4 0x210BC052 GT PUSH2 0x38E JUMPI DUP1 PUSH4 0x210BC052 EQ PUSH2 0x544 JUMPI DUP1 PUSH4 0x23323E03 EQ PUSH2 0x557 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x56A JUMPI DUP1 PUSH4 0x2464176B EQ PUSH2 0x57D JUMPI DUP1 PUSH4 0x2608F818 EQ PUSH2 0x590 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x182DF0F5 EQ PUSH2 0x4F6 JUMPI DUP1 PUSH4 0x19B1FAEF EQ PUSH2 0x4FE JUMPI DUP1 PUSH4 0x1BE19560 EQ PUSH2 0x51E JUMPI DUP1 PUSH4 0x1C446983 EQ PUSH2 0x531 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE752702 GT PUSH2 0x406 JUMPI DUP1 PUSH4 0xE752702 EQ PUSH2 0x49E JUMPI DUP1 PUSH4 0x107568DF EQ PUSH2 0x4BE JUMPI DUP1 PUSH4 0x173B9904 EQ PUSH2 0x4D1 JUMPI DUP1 PUSH4 0x17BFDFBC EQ PUSH2 0x4DA JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x4ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x438 JUMPI DUP1 PUSH4 0x7E27959 EQ PUSH2 0x456 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x46B JUMPI DUP1 PUSH4 0xE32CB86 EQ PUSH2 0x48B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x440 PUSH2 0x96F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x44D SWAP2 SWAP1 PUSH2 0x407D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x469 PUSH2 0x464 CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0x9FD JUMP JUMPDEST STOP JUMPDEST PUSH2 0x47E PUSH2 0x479 CALLDATASIZE PUSH1 0x4 PUSH2 0x40EC JUMP JUMPDEST PUSH2 0xA64 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x44D SWAP2 SWAP1 PUSH2 0x4133 JUMP JUMPDEST PUSH2 0x469 PUSH2 0x499 CALLDATASIZE PUSH1 0x4 PUSH2 0x4141 JUMP JUMPDEST PUSH2 0xADC JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x4AC CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0xAF0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x44D SWAP2 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH2 0x469 PUSH2 0x4CC CALLDATASIZE PUSH1 0x4 PUSH2 0x4141 JUMP JUMPDEST PUSH2 0xB4A JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0xD0 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x4E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4141 JUMP JUMPDEST PUSH2 0xB5B JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0xD5 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0xBB0 JUMP JUMPDEST PUSH1 0xDB SLOAD PUSH2 0x511 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x44D SWAP2 SWAP1 PUSH2 0x417F JUMP JUMPDEST PUSH2 0x469 PUSH2 0x52C CALLDATASIZE PUSH1 0x4 PUSH2 0x41AC JUMP JUMPDEST PUSH2 0xBBF JUMP JUMPDEST PUSH2 0x469 PUSH2 0x53F CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0xCEC JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x552 CALLDATASIZE PUSH1 0x4 PUSH2 0x40EC JUMP JUMPDEST PUSH2 0xD67 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x565 CALLDATASIZE PUSH1 0x4 PUSH2 0x40EC JUMP JUMPDEST PUSH2 0xDCB JUMP JUMPDEST PUSH2 0x47E PUSH2 0x578 CALLDATASIZE PUSH1 0x4 PUSH2 0x41CD JUMP JUMPDEST PUSH2 0xE17 JUMP JUMPDEST PUSH2 0x469 PUSH2 0x58B CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0xE69 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x59E CALLDATASIZE PUSH1 0x4 PUSH2 0x40EC JUMP JUMPDEST PUSH2 0xEEA JUMP JUMPDEST PUSH1 0xCC SLOAD PUSH2 0x5B0 SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x44D SWAP2 SWAP1 PUSH2 0x4226 JUMP JUMPDEST PUSH2 0x47E PUSH2 0x5CB CALLDATASIZE PUSH1 0x4 PUSH2 0x40EC JUMP JUMPDEST PUSH2 0xF45 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x5DE CALLDATASIZE PUSH1 0x4 PUSH2 0x4141 JUMP JUMPDEST PUSH2 0xFF1 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x1037 JUMP JUMPDEST PUSH1 0x1 PUSH2 0x47E JUMP JUMPDEST PUSH2 0x469 PUSH2 0x600 CALLDATASIZE PUSH1 0x4 PUSH2 0x4141 JUMP JUMPDEST PUSH2 0x1041 JUMP JUMPDEST PUSH2 0x469 PUSH2 0x613 CALLDATASIZE PUSH1 0x4 PUSH2 0x41CD JUMP JUMPDEST PUSH2 0x1052 JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0xD3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH2 0x634 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x44D SWAP2 SWAP1 PUSH2 0x4276 JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0xDA SLOAD DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0x0 DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0xD1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH2 0x511 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x6A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4141 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x469 PUSH2 0x12E7 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x12FB JUMP JUMPDEST PUSH2 0x469 PUSH2 0x6E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0x1347 JUMP JUMPDEST PUSH2 0x469 PUSH2 0x6F4 CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0x146E JUMP JUMPDEST PUSH2 0x469 PUSH2 0x14BD JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x70F CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0x14F2 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x722 CALLDATASIZE PUSH1 0x4 PUSH2 0x40EC JUMP JUMPDEST PUSH2 0x154C JUMP JUMPDEST PUSH2 0x469 PUSH2 0x735 CALLDATASIZE PUSH1 0x4 PUSH2 0x43DD JUMP JUMPDEST PUSH2 0x1574 JUMP JUMPDEST PUSH2 0x469 PUSH2 0x748 CALLDATASIZE PUSH1 0x4 PUSH2 0x4517 JUMP JUMPDEST PUSH2 0x1662 JUMP JUMPDEST PUSH2 0x469 PUSH2 0x75B CALLDATASIZE PUSH1 0x4 PUSH2 0x41AC JUMP JUMPDEST PUSH2 0x16A1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x511 JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0xD4 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x440 PUSH2 0x16F1 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x790 CALLDATASIZE PUSH1 0x4 PUSH2 0x4141 JUMP JUMPDEST PUSH2 0x16FE JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x7A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0x1709 JUMP JUMPDEST PUSH2 0x47E PUSH2 0x7B6 CALLDATASIZE PUSH1 0x4 PUSH2 0x40EC JUMP JUMPDEST PUSH2 0x174C JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x17FB JUMP JUMPDEST PUSH2 0x47E PUSH2 0x7D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x40EC JUMP JUMPDEST PUSH2 0x1A09 JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0xD2 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0xDD SLOAD DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x1A5A JUMP JUMPDEST PUSH2 0x469 PUSH2 0x7FE CALLDATASIZE PUSH1 0x4 PUSH2 0x41CD JUMP JUMPDEST PUSH2 0x1AE3 JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x634 JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0xD6 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x1B2D JUMP JUMPDEST PUSH2 0x838 PUSH2 0x833 CALLDATASIZE PUSH1 0x4 PUSH2 0x4141 JUMP JUMPDEST PUSH2 0x1B7F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x44D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x458F JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x856 CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0x1BC0 JUMP JUMPDEST PUSH2 0x47E PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0xDC SLOAD DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x899 CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0x1C03 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x8AC CALLDATASIZE PUSH1 0x4 PUSH2 0x45C4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x8E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x40EC JUMP JUMPDEST PUSH2 0x1C48 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x511 JUMP JUMPDEST PUSH1 0xCC SLOAD PUSH2 0x511 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x469 PUSH2 0x929 CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0x1CC4 JUMP JUMPDEST PUSH2 0x469 PUSH2 0x93C CALLDATASIZE PUSH1 0x4 PUSH2 0x4141 JUMP JUMPDEST PUSH2 0x1D59 JUMP JUMPDEST PUSH1 0xCE SLOAD PUSH2 0x634 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x962 CALLDATASIZE PUSH1 0x4 PUSH2 0x45F7 JUMP JUMPDEST PUSH2 0x1DCA JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x1DE4 JUMP JUMPDEST PUSH1 0xCA DUP1 SLOAD PUSH2 0x97C SWAP1 PUSH2 0x4653 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x9A8 SWAP1 PUSH2 0x4653 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x9F5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x9CA JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x9F5 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x9D8 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0xFF AND PUSH2 0xA28 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0xA3A PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0xA43 PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xDD SLOAD EQ PUSH2 0xA54 JUMPI PUSH2 0xA54 DUP2 PUSH2 0x1E30 JUMP JUMPDEST POP PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA6F DUP4 PUSH2 0x1FB8 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP3 SWAP1 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0xAC8 SWAP1 DUP8 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xAE4 PUSH2 0x1FDF JUMP JUMPDEST PUSH2 0xAED DUP2 PUSH2 0x2009 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0xB15 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0xB27 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0xB33 CALLER CALLER DUP5 PUSH2 0x208E JUMP JUMPDEST POP PUSH1 0x0 SWAP1 POP PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xB52 PUSH2 0x1FDF JUMP JUMPDEST PUSH2 0xAED DUP2 PUSH2 0x224F JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0xB80 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0xB92 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0xB9C DUP3 PUSH2 0x22B2 JUMP JUMPDEST SWAP1 POP PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBBA PUSH2 0x2322 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xBE9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4702 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x100 SWAP1 SWAP2 DIV DUP2 AND SWAP1 DUP3 AND SUB PUSH2 0xC1C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4761 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0xC4B SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x417F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC68 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC8C SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST SWAP1 POP PUSH2 0xCB4 PUSH2 0xCA3 PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP4 PUSH2 0x2397 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0x35CE4C546A473796A8E70EC2D4AF4F2031AFE357AFA7057B6EA7FA340730E1B2 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0xFF AND PUSH2 0xD0E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH32 0x73657452657365727665466163746F722875696E743235362900000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xD55 SWAP1 PUSH2 0x23F2 JUMP JUMPDEST PUSH2 0xD5D PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0xA54 DUP2 PUSH2 0x2490 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0xD8C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0xD9F DUP4 PUSH2 0x251C JUMP JUMPDEST PUSH2 0xDA7 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0xDB5 DUP4 CALLER DUP5 PUSH1 0x0 PUSH2 0x25AC JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0xDF0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0xE03 DUP4 PUSH2 0x1FB8 JUMP JUMPDEST PUSH2 0xE0B PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0xDB5 CALLER DUP5 DUP5 PUSH2 0x2869 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0xE3C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0xE52 CALLER DUP6 DUP6 DUP6 PUSH2 0x2A68 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xE8A PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x5373 PUSH1 0x24 SWAP2 CODECOPY PUSH2 0x23F2 JUMP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0xEAA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x47C1 JUMP JUMPDEST PUSH32 0xC2AC513CDB57F91EB2BEF4DB918C285829524F549682B99717C6CB06CC011183 PUSH1 0xDC SLOAD DUP3 PUSH1 0x40 MLOAD PUSH2 0xEDD SWAP3 SWAP2 SWAP1 PUSH2 0x47D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0xDC SSTORE JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0xF0F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0xF21 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0xF2D CALLER DUP5 DUP5 PUSH2 0x208E JUMP JUMPDEST POP PUSH1 0x0 SWAP1 POP PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF50 DUP4 PUSH2 0x1FB8 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xF7E DUP5 DUP3 PUSH2 0x4802 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP12 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0xFDE SWAP1 DUP6 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x1007 PUSH2 0x1B2D JUMP JUMPDEST SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0x1030 SWAP1 DUP3 SWAP1 PUSH2 0x2C73 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBBA PUSH2 0x2C8B JUMP JUMPDEST PUSH2 0x1049 PUSH2 0x1FDF JUMP JUMPDEST PUSH2 0xAED DUP2 PUSH2 0x2CC1 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0xFF AND PUSH2 0x1074 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP1 ISZERO PUSH2 0x10E9 JUMPI PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0xEADE3EED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xEADE3EED SWAP1 PUSH2 0x10B6 SWAP1 ADDRESS SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x4815 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10E4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1114 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2C402925 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x111F DUP4 PUSH2 0x22B2 JUMP JUMPDEST PUSH1 0xD3 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 DUP4 ISZERO PUSH2 0x1198 JUMPI PUSH2 0x1137 DUP7 DUP6 PUSH2 0x2D1C JUMP JUMPDEST SWAP1 POP PUSH2 0x1143 DUP2 DUP4 PUSH2 0x4830 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND SWAP1 DUP8 AND PUSH32 0x1A2A22CB034D26D1854BDC6666A5B91FE25EFBBB5DCAD3B0355478D6F5C362A1 DUP4 PUSH2 0x117F DUP2 DUP9 PUSH2 0x4830 JUMP JUMPDEST DUP7 PUSH1 0x40 MLOAD PUSH2 0x118F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4843 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST PUSH1 0x0 PUSH2 0x11A4 DUP3 DUP6 PUSH2 0x4830 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x1268 JUMPI PUSH1 0xD6 SLOAD PUSH1 0x0 PUSH2 0x11BB DUP4 DUP4 PUSH2 0x4802 JUMP JUMPDEST SWAP1 POP PUSH2 0x11C7 DUP4 DUP7 PUSH2 0x4830 JUMP JUMPDEST SWAP5 POP DUP1 PUSH1 0xD6 DUP2 SWAP1 SSTORE POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x1A2A22CB034D26D1854BDC6666A5B91FE25EFBBB5DCAD3B0355478D6F5C362A1 DUP6 PUSH1 0x0 DUP10 PUSH1 0x40 MLOAD PUSH2 0x1218 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4880 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x90125FFDB441E57C4F6BF69789206424859F206BEA5727F2D81AD2470826EF6A DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x125D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4843 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP2 DUP3 SSTORE PUSH1 0xD2 SLOAD PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0xD3 DUP7 SWAP1 SSTORE MLOAD SWAP1 SWAP2 DUP10 AND SWAP1 PUSH32 0x9FE0294717A8EFBC6ACE1C151B73A4C89982339B2228A27D1CA21394E348986F SWAP1 PUSH2 0x12C9 SWAP1 DUP10 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH2 0x12EF PUSH2 0x1FDF JUMP JUMPDEST PUSH2 0x12F9 PUSH1 0x0 PUSH2 0x2E34 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0x1320 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x1332 PUSH2 0x17FB JUMP JUMPDEST POP POP PUSH1 0xD3 SLOAD PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 JUMP JUMPDEST PUSH2 0x1385 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x73657450726F746F636F6C5365697A6553686172652875696E74323536290000 DUP2 MSTORE POP PUSH2 0x23F2 JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4ADA90AF PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x4ADA90AF SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13F3 SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1408 PUSH8 0xDE0B6B3A7640000 DUP5 PUSH2 0x4802 JUMP JUMPDEST GT ISZERO PUSH2 0x1427 JUMPI PUSH1 0x40 MLOAD PUSH4 0x34DD2C1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xDA DUP1 SLOAD SWAP1 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xF5815F353A60E815CCE7553E4F60C533A59D26B1B5504EA4B6DB8D60DA3E4DA2 SWAP1 PUSH2 0x1461 SWAP1 DUP4 SWAP1 DUP7 SWAP1 PUSH2 0x47D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0xFF AND PUSH2 0x1490 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x14A2 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0x14AC DUP2 PUSH2 0x2E4D JUMP JUMPDEST POP POP PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x65 SLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 EQ PUSH2 0x14E9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x48E1 JUMP JUMPDEST PUSH2 0xAED DUP2 PUSH2 0x2E34 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0x1517 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x1529 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0x1537 CALLER CALLER PUSH1 0x0 DUP6 PUSH2 0x25AC JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1557 DUP4 PUSH2 0x251C JUMP JUMPDEST PUSH2 0x155F PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0x156B DUP4 CALLER DUP5 PUSH2 0x2EE2 JUMP JUMPDEST POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x1594 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x15AE JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15AE JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x15CA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x493C JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x15ED JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x15F6 DUP6 PUSH2 0x1FB8 JUMP JUMPDEST PUSH2 0x1609 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 PUSH2 0x30B9 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1654 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH2 0x164B SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x4960 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x168D JUMPI PUSH1 0x40 MLOAD PUSH4 0x5C85A5E7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x169A DUP6 DUP6 DUP6 DUP6 DUP6 PUSH2 0x3261 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x16DF PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1D DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x736574496E746572657374526174654D6F64656C286164647265737329000000 DUP2 MSTORE POP PUSH2 0x23F2 JUMP JUMPDEST PUSH2 0x16E7 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0xAED DUP2 PUSH2 0x3341 JUMP JUMPDEST PUSH1 0xCB DUP1 SLOAD PUSH2 0x97C SWAP1 PUSH2 0x4653 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAD6 DUP3 PUSH2 0x22B2 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0x172E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x1740 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0x1537 CALLER CALLER DUP5 PUSH2 0x2869 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1757 DUP4 PUSH2 0x1FB8 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP4 DUP2 LT ISZERO PUSH2 0x179B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x49A2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP11 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SWAP4 DUP8 SWAP1 SUB SWAP4 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0xFDE SWAP1 DUP6 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1806 PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SLOAD SWAP1 SWAP2 POP DUP2 DUP2 SUB PUSH2 0x181C JUMPI PUSH1 0x0 SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1826 PUSH2 0x2C8B JUMP JUMPDEST PUSH1 0xD3 SLOAD PUSH1 0xD4 SLOAD PUSH1 0xD2 SLOAD PUSH1 0xCE SLOAD PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x1CEE29D PUSH1 0xE2 SHL DUP2 MSTORE SWAP6 SWAP7 POP SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x73B8A74 SWAP2 PUSH2 0x1872 SWAP2 DUP10 SWAP2 DUP10 SWAP2 DUP10 SWAP2 PUSH1 0x4 ADD PUSH2 0x458F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x188F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18B3 SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST SWAP1 POP PUSH32 0x0 DUP2 GT ISZERO PUSH2 0x18F5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x49E6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1901 DUP8 DUP10 PUSH2 0x4830 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x191D PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP6 DUP2 MSTORE POP DUP4 PUSH2 0x3453 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x192B DUP3 DUP9 PUSH2 0x2C73 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1939 DUP9 DUP4 PUSH2 0x4802 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1958 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xD0 SLOAD DUP2 MSTORE POP DUP5 DUP11 PUSH2 0x3484 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1967 DUP6 DUP10 DUP11 PUSH2 0x3484 JUMP JUMPDEST PUSH1 0xD1 DUP15 SWAP1 SSTORE PUSH1 0xD2 DUP2 SWAP1 SSTORE PUSH1 0xD3 DUP5 SWAP1 SSTORE PUSH1 0xD4 DUP4 SWAP1 SSTORE PUSH1 0xDC SLOAD PUSH1 0xDD SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x198F SWAP1 DUP16 PUSH2 0x4830 JUMP JUMPDEST LT PUSH2 0x19B8 JUMPI PUSH1 0xDD DUP14 SWAP1 SSTORE DUP2 DUP12 LT ISZERO PUSH2 0x19AF JUMPI PUSH2 0x19AA DUP12 PUSH2 0x1E30 JUMP JUMPDEST PUSH2 0x19B8 JUMP JUMPDEST PUSH2 0x19B8 DUP3 PUSH2 0x1E30 JUMP JUMPDEST PUSH32 0x4DEC04E750CA11537CABCD8A9EAB06494DE08DA3735BC8871CD41250E190BC04 DUP12 DUP6 DUP4 DUP7 PUSH1 0x40 MLOAD PUSH2 0x19ED SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x458F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x0 SWAP14 POP POP POP POP POP POP POP POP POP POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0x1A2E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x1A44 CALLER DUP1 DUP6 DUP6 PUSH2 0x2A68 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xCE SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xCDE8D1C PUSH2 0x1A76 PUSH2 0x2C8B JUMP JUMPDEST PUSH1 0xD3 SLOAD PUSH1 0xD4 SLOAD PUSH1 0xD0 SLOAD PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1AA2 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x49F6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1ABF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBBA SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0xFF AND PUSH2 0x1B05 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x1B1B CALLER DUP5 DUP5 DUP5 PUSH2 0x34A5 JUMP JUMPDEST POP POP PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0x1B52 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x1B64 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0x1B6D PUSH2 0x2322 JUMP JUMPDEST SWAP1 POP PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH2 0x1BA9 DUP8 PUSH2 0x22B2 JUMP JUMPDEST PUSH2 0x1BB1 PUSH2 0x2322 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP SWAP2 SWAP4 POP SWAP2 SWAP4 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0x1BE5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x1BF7 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0x1537 CALLER CALLER DUP5 PUSH2 0x2EE2 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0x1C28 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x1C3A PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0x1537 CALLER CALLER DUP5 PUSH1 0x0 PUSH2 0x25AC JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0x1C6D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x1C80 DUP4 PUSH2 0x251C JUMP JUMPDEST PUSH2 0x1C88 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0xDB5 DUP4 CALLER PUSH1 0x0 DUP6 PUSH2 0x25AC JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBBA PUSH32 0x0 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0xDB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1CEE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4A80 JUMP JUMPDEST PUSH1 0xD6 SLOAD DUP2 GT ISZERO PUSH2 0x1D10 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4AD6 JUMP JUMPDEST PUSH1 0xD6 SLOAD PUSH1 0x0 PUSH2 0x1D1F DUP4 DUP4 PUSH2 0x4830 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0xD6 DUP2 SWAP1 SSTORE POP PUSH32 0x9E19EC7D2B8F8A94DF8CC0072453ACE318D221E3CBB2731D0EAA0BAAC856520F DUP3 DUP3 PUSH1 0x40 MLOAD PUSH2 0x1461 SWAP3 SWAP2 SWAP1 PUSH2 0x47D1 JUMP JUMPDEST PUSH2 0x1D61 PUSH2 0x1FDF JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH2 0x1D92 PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DDA CALLER DUP6 DUP6 DUP6 PUSH1 0x0 PUSH2 0x3261 JUMP JUMPDEST POP PUSH1 0x0 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xCE SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x73B8A74 PUSH2 0x1E00 PUSH2 0x2C8B JUMP JUMPDEST PUSH1 0xD3 SLOAD PUSH1 0xD4 SLOAD PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1AA2 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x458F JUMP JUMPDEST NUMBER SWAP1 JUMP JUMPDEST TIMESTAMP SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x1E3B JUMPI POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E45 PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SLOAD EQ PUSH2 0x1E66 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDFF50CB PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH2 0x1E6F PUSH2 0x2C8B JUMP JUMPDEST LT ISZERO PUSH2 0x1E8E JUMPI PUSH1 0x40 MLOAD PUSH4 0x3345E999 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xD4 SLOAD DUP3 GT ISZERO PUSH2 0x1EB1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x78D29805 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0xD4 SLOAD PUSH2 0x1EBF SWAP2 SWAP1 PUSH2 0x4830 JUMP JUMPDEST PUSH1 0xD4 DUP2 SWAP1 SSTORE PUSH1 0xCC SLOAD SWAP1 SWAP2 POP PUSH2 0x1EE2 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH2 0x382C JUMP JUMPDEST PUSH1 0xCC SLOAD PUSH1 0xCD SLOAD PUSH1 0xC9 SLOAD PUSH1 0x40 MLOAD PUSH4 0x5BEBB3B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x100 SWAP5 DUP6 SWAP1 DIV DUP2 AND SWAP5 PUSH4 0x16FAECEC SWAP5 PUSH2 0x1F2A SWAP5 SWAP1 DUP4 AND SWAP4 SWAP2 SWAP1 DIV SWAP1 SWAP2 AND SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x4 ADD PUSH2 0x4B2A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1F58 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0xCC PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x9CC63BB4EF37AD6A5F5F657DFAF94865531D4234ACBC431CC8AC035468F62720 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1FAC SWAP3 SWAP2 SWAP1 PUSH2 0x47D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xAED JUMPI PUSH1 0x40 MLOAD PUSH4 0x42BCDF7F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x12F9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4B84 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x202F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4BD6 JUMP JUMPDEST PUSH1 0x97 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP1 PUSH32 0x66FD58E82F7B31A2A5C30E0888F3093EFE4E111B00CD2B0C31FE014601293AA0 SWAP1 PUSH2 0x2082 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x4815 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0xEADE3EED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xEADE3EED SWAP1 PUSH2 0x20C1 SWAP1 ADDRESS SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x4815 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x20EF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x20FB PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SLOAD EQ PUSH2 0x211C JUMPI PUSH1 0x40 MLOAD PUSH4 0xC9021E2F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2127 DUP5 PUSH2 0x22B2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP5 LT ISZERO PUSH2 0x2139 JUMPI DUP4 PUSH2 0x213B JUMP JUMPDEST DUP2 JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2149 DUP8 DUP4 PUSH2 0x2D1C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2157 DUP3 DUP6 PUSH2 0x4830 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0xD3 SLOAD PUSH2 0x2169 SWAP2 SWAP1 PUSH2 0x4830 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP11 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP7 DUP2 SSTORE PUSH1 0xD2 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE PUSH1 0xD3 DUP5 SWAP1 SSTORE MLOAD SWAP3 SWAP4 POP SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x1A2A22CB034D26D1854BDC6666A5B91FE25EFBBB5DCAD3B0355478D6F5C362A1 SWAP1 PUSH2 0x21CF SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH2 0x4843 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0xCD SLOAD PUSH1 0xD2 SLOAD PUSH1 0x40 MLOAD PUSH4 0x1EDEDC91 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x1EDEDC91 SWAP2 PUSH2 0x2210 SWAP2 ADDRESS SWAP2 DUP15 SWAP2 DUP15 SWAP2 DUP11 SWAP2 PUSH1 0x4 ADD PUSH2 0x4BE6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x222A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x223E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP5 SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2258 DUP2 PUSH2 0x1FB8 JUMP JUMPDEST PUSH1 0xCC DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH2 0x100 DUP2 DUP2 MUL PUSH2 0x100 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT DUP6 AND OR SWAP1 SWAP5 SSTORE PUSH1 0x40 MLOAD SWAP4 SWAP1 SWAP3 DIV AND SWAP2 DUP3 SWAP1 PUSH32 0xAFEC95C8612496C3ECF5DDDC71E393528FE29BD145FBAF9C6B496D78D7E2D79B SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE DUP1 SLOAD DUP1 DUP4 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 SUB PUSH2 0x22F7 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xD2 SLOAD DUP2 MLOAD PUSH1 0x0 SWAP2 PUSH2 0x2308 SWAP2 PUSH2 0x4C0E JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x20 ADD MLOAD DUP2 PUSH2 0x231A SWAP2 SWAP1 PUSH2 0x4C43 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0xD5 SLOAD PUSH1 0x0 SWAP1 DUP1 DUP3 SUB PUSH2 0x2337 JUMPI POP POP PUSH1 0xCF SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2341 PUSH2 0x2C8B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0xD4 SLOAD PUSH1 0xD6 SLOAD PUSH1 0xD3 SLOAD DUP5 PUSH2 0x2359 SWAP2 SWAP1 PUSH2 0x4802 JUMP JUMPDEST PUSH2 0x2363 SWAP2 SWAP1 PUSH2 0x4802 JUMP JUMPDEST PUSH2 0x236D SWAP2 SWAP1 PUSH2 0x4830 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH2 0x2384 PUSH8 0xDE0B6B3A7640000 DUP5 PUSH2 0x4C0E JUMP JUMPDEST PUSH2 0x238E SWAP2 SWAP1 PUSH2 0x4C43 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x23ED DUP4 PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x23B6 SWAP3 SWAP2 SWAP1 PUSH2 0x4C57 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x3848 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x40 MLOAD PUSH4 0x18C5E8AB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x18C5E8AB SWAP1 PUSH2 0x2425 SWAP1 CALLER SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x4C65 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2442 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2466 SWAP2 SWAP1 PUSH2 0x4C90 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x248C JUMPI CALLER ADDRESS DUP4 PUSH1 0x40 MLOAD PUSH4 0x4A3FA293 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4CB1 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x2498 PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SLOAD EQ PUSH2 0x24B9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7DFCA6B7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 GT ISZERO PUSH2 0x24E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x717220F3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xD0 DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xAAA68312E2EA9D50E16AF5068410AB56E1A1FD06037B1A35664812C30F821460 SWAP1 PUSH2 0x2082 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x47D1 JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0x2173067 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x10B98338 SWAP1 PUSH2 0x254E SWAP1 DUP5 SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x4815 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x256B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x258F SWAP2 SWAP1 PUSH2 0x4C90 JUMP JUMPDEST PUSH2 0xAED JUMPI PUSH1 0x40 MLOAD PUSH4 0xCF0B6F5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 ISZERO DUP1 PUSH2 0x25B7 JUMPI POP DUP1 ISZERO JUMPDEST PUSH2 0x25D3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4D2F JUMP JUMPDEST PUSH2 0x25DB PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SLOAD EQ PUSH2 0x25FC JUMPI PUSH1 0x40 MLOAD PUSH4 0x97B5CFCD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x2611 PUSH2 0x2322 JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP PUSH1 0x0 DUP1 DUP5 ISZERO PUSH2 0x2626 JUMPI DUP5 SWAP2 POP PUSH2 0x2664 JUMP JUMPDEST PUSH2 0x2630 DUP5 DUP5 PUSH2 0x38DA JUMP JUMPDEST SWAP2 POP PUSH1 0x0 PUSH2 0x263E DUP4 DUP6 PUSH2 0x38F8 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x264F JUMPI POP DUP5 DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x2662 JUMPI DUP3 PUSH2 0x265E DUP2 PUSH2 0x4D3F JUMP JUMPDEST SWAP4 POP POP JUMPDEST POP JUMPDEST PUSH2 0x266E DUP4 DUP4 PUSH2 0x2C73 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x2690 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4D84 JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0x47323875 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x8E6470EA SWAP1 PUSH2 0x26C4 SWAP1 ADDRESS SWAP1 DUP12 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x4D94 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x26F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0xD4 SLOAD PUSH2 0x2702 PUSH2 0x2C8B JUMP JUMPDEST PUSH2 0x270C SWAP2 SWAP1 PUSH2 0x4830 JUMP JUMPDEST LT ISZERO PUSH2 0x272B JUMPI PUSH1 0x40 MLOAD PUSH4 0x91240A1B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0xD5 SLOAD PUSH2 0x2739 SWAP2 SWAP1 PUSH2 0x4830 JUMP JUMPDEST PUSH1 0xD5 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x2760 SWAP1 DUP5 SWAP1 PUSH2 0x4830 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP2 SWAP1 SSTORE SWAP1 POP PUSH2 0x2787 DUP8 DUP4 PUSH2 0x382C JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5397 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP6 PUSH1 0x40 MLOAD PUSH2 0x27B8 SWAP2 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xBD5034FFBD47E4E72A94BAA2CDB74C6FAD73CB3BCDC13036B72EC8306F5A7646 DUP4 DUP6 DUP5 PUSH1 0x40 MLOAD PUSH2 0x27FD SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4843 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0x51DFF989 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x51DFF989 SWAP1 PUSH2 0x283B SWAP1 ADDRESS SWAP1 DUP13 SWAP1 DUP8 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x4DAF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2855 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1654 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0xC0891BA9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xC0891BA9 SWAP1 PUSH2 0x289D SWAP1 ADDRESS SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x4D94 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x28B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x28CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x28D7 PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SLOAD EQ PUSH2 0x28F8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x38D88597 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x290D PUSH2 0x2322 JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP PUSH1 0x0 PUSH2 0x291D DUP6 DUP5 PUSH2 0x2D1C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x292B DUP3 DUP5 PUSH2 0x38DA JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0xD5 SLOAD PUSH2 0x293B SWAP2 SWAP1 PUSH2 0x4802 JUMP JUMPDEST PUSH1 0xD5 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x2962 SWAP1 DUP4 SWAP1 PUSH2 0x4802 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE MLOAD SWAP2 SWAP3 POP SWAP1 PUSH32 0xB4C03061FB5B7FED76389D5AF8F2E0DDB09F8C70D1333ABBB62582835E10ACCB SWAP1 PUSH2 0x29B5 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH2 0x4843 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5397 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP5 PUSH1 0x40 MLOAD PUSH2 0x29EF SWAP2 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0x41C728B9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x41C728B9 SWAP1 PUSH2 0x2A2D SWAP1 ADDRESS SWAP1 DUP11 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x4DAF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2A5B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0x6D0BE88D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x6D0BE88D SWAP1 PUSH2 0x2A9E SWAP1 ADDRESS SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x4DCA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2ACC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x2B02 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8CD22D19 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x2B26 JUMPI POP PUSH1 0x0 NOT PUSH2 0x2B4E JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD JUMPDEST PUSH1 0x0 PUSH2 0x2B5A DUP4 DUP4 PUSH2 0x4830 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x2B82 SWAP1 DUP6 SWAP1 PUSH2 0x4830 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x2BAA SWAP1 DUP7 SWAP1 PUSH2 0x4802 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP7 SWAP1 SSTORE SWAP2 DUP10 AND DUP2 MSTORE KECCAK256 DUP2 SWAP1 SSTORE SWAP1 POP PUSH1 0x0 NOT DUP5 EQ PUSH2 0x2C04 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP13 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5397 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP8 PUSH1 0x40 MLOAD PUSH2 0x2C35 SWAP2 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0x352B4A3F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x6A56947E SWAP1 PUSH2 0x283B SWAP1 ADDRESS SWAP1 DUP12 SWAP1 DUP12 SWAP1 DUP12 SWAP1 PUSH1 0x4 ADD PUSH2 0x4DCA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2C80 DUP5 DUP5 PUSH2 0x3453 JUMP JUMPDEST SWAP1 POP PUSH2 0x231A DUP2 PUSH2 0x391B JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1AA2 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x417F JUMP JUMPDEST PUSH2 0x2CCA DUP2 PUSH2 0x1FB8 JUMP JUMPDEST PUSH1 0xDB DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x6DBF1FF28F860DE5EDAFA4C6505E37C0ABA213288CC4166C5352B6D3776C79EF SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP3 SWAP1 DUP3 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2D56 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x417F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D73 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2D97 SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST SWAP1 POP PUSH2 0x2DAE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP7 ADDRESS DUP8 PUSH2 0x3933 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2DDD SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x417F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2DFA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2E1E SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST SWAP1 POP PUSH2 0x2E2A DUP3 DUP3 PUSH2 0x4830 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH2 0xAED DUP2 PUSH2 0x395A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2E5A PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SLOAD EQ PUSH2 0x2E7D JUMPI DUP1 PUSH1 0x40 MLOAD PUSH4 0x38ACF799 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP2 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH2 0x2E87 CALLER DUP6 PUSH2 0x2D1C JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0xD4 SLOAD PUSH2 0x2E97 SWAP2 SWAP1 PUSH2 0x4802 JUMP JUMPDEST PUSH1 0xD4 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP3 POP CALLER SWAP1 PUSH32 0xA91E67C5EA634CD43A12C5A482724B03DE01E85CA68702A53D0C2F45CB7C1DC5 SWAP1 PUSH2 0x2ED3 SWAP1 DUP5 SWAP1 DUP7 SWAP1 PUSH2 0x47D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0xDF71403B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xDF71403B SWAP1 PUSH2 0x2F16 SWAP1 ADDRESS SWAP1 DUP8 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x4D94 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F44 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x2F50 PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SLOAD EQ PUSH2 0x2F71 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE8D8C61 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0xD4 SLOAD PUSH2 0x2F7D PUSH2 0x2C8B JUMP JUMPDEST PUSH2 0x2F87 SWAP2 SWAP1 PUSH2 0x4830 JUMP JUMPDEST LT ISZERO PUSH2 0x2FA6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x48C25881 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2FB1 DUP5 PUSH2 0x22B2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2FBF DUP4 DUP4 PUSH2 0x4802 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0xD3 SLOAD PUSH2 0x2FD1 SWAP2 SWAP1 PUSH2 0x4802 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 DUP2 SSTORE PUSH1 0xD2 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE PUSH1 0xD3 DUP2 SWAP1 SSTORE SWAP1 POP PUSH2 0x3006 DUP6 DUP6 PUSH2 0x382C JUMP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x13ED6866D4E1EE6DA46F845C46D7E54120883D75C5EA9A2DACC1C4CA8984AB80 DUP6 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x3043 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4843 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0x5C778605 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x5C778605 SWAP1 PUSH2 0x307F SWAP1 ADDRESS SWAP1 DUP11 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x4D94 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3099 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x30AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x30E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4E3A JUMP JUMPDEST PUSH2 0x30E8 PUSH2 0x39AC JUMP JUMPDEST PUSH2 0x30F1 DUP4 PUSH2 0x39DB JUMP JUMPDEST PUSH1 0xD1 SLOAD ISZERO DUP1 ISZERO PUSH2 0x3101 JUMPI POP PUSH1 0xD2 SLOAD ISZERO JUMPDEST PUSH2 0x311D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4E8A JUMP JUMPDEST PUSH1 0xCF DUP9 SWAP1 SSTORE DUP8 PUSH2 0x313F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4EE7 JUMP JUMPDEST PUSH2 0x3148 DUP11 PUSH2 0x3A02 JUMP JUMPDEST PUSH2 0x3150 PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SSTORE PUSH8 0xDE0B6B3A7640000 PUSH1 0xD2 SSTORE PUSH2 0x3168 DUP10 PUSH2 0x3341 JUMP JUMPDEST PUSH2 0x3171 DUP2 PUSH2 0x2490 JUMP JUMPDEST PUSH1 0xCA PUSH2 0x317D DUP9 DUP3 PUSH2 0x4F7C JUMP JUMPDEST POP PUSH1 0xCB PUSH2 0x318A DUP8 DUP3 PUSH2 0x4F7C JUMP JUMPDEST POP PUSH1 0xCC DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF DUP8 AND OR SWAP1 SSTORE DUP2 MLOAD PUSH2 0x31A5 SWAP1 PUSH2 0x2CC1 JUMP JUMPDEST PUSH2 0x31B2 DUP3 PUSH1 0x20 ADD MLOAD PUSH2 0x224F JUMP JUMPDEST PUSH7 0xB1A2BC2EC50000 PUSH1 0xDA SSTORE PUSH1 0xC9 DUP1 SLOAD PUSH2 0x100 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND PUSH2 0x100 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP15 DUP2 AND DUP3 MUL SWAP3 SWAP1 SWAP3 OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x18160DDD PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP1 SWAP4 DIV SWAP1 SWAP2 AND SWAP2 PUSH4 0x18160DDD SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3226 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x324A SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST POP PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x2A5B DUP5 PUSH2 0x2E34 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0xFF AND PUSH2 0x3283 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x3295 PUSH2 0x17FB JUMP JUMPDEST POP PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA6AFED95 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x32D8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x32FC SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x331F JUMPI DUP1 PUSH1 0x40 MLOAD PUSH4 0x3EEA49B7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP2 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH2 0x332C DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x3ADD JUMP JUMPDEST POP POP PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x334B PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SLOAD EQ PUSH2 0x336C JUMPI PUSH1 0x40 MLOAD PUSH4 0xBE2A5CB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xCE PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2191F92A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x33C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x33E6 SWAP2 SWAP1 PUSH2 0x4C90 JUMP JUMPDEST PUSH2 0x3402 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x5074 JUMP JUMPDEST PUSH1 0xCE DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP4 AND SWAP1 PUSH32 0xEDFFC32E068C7C95DFD4BDFD5C4D939A084D6B11C4199EAC8436ED234D72F926 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x347B DUP6 PUSH1 0x0 ADD MLOAD DUP6 PUSH2 0x3EBA JUMP JUMPDEST SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3491 DUP6 DUP6 PUSH2 0x3453 JUMP JUMPDEST SWAP1 POP PUSH2 0x238E PUSH2 0x349F DUP3 PUSH2 0x391B JUMP JUMPDEST DUP5 PUSH2 0x3EC6 JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0x37883E5 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x1BC41F28 SWAP1 PUSH2 0x34DB SWAP1 ADDRESS SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5084 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x34F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3509 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x353F JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A946267 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4ADA90AF PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x4ADA90AF SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3589 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x35AD SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x35CB DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xDA SLOAD DUP2 MSTORE POP PUSH2 0x38F8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x35E7 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP7 DUP2 MSTORE POP PUSH2 0x38DA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x35F5 DUP3 DUP7 PUSH2 0x4830 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x360C PUSH2 0x2322 JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP PUSH1 0x0 PUSH2 0x361C DUP3 DUP6 PUSH2 0x2C73 JUMP JUMPDEST SWAP1 POP DUP4 PUSH1 0xD5 SLOAD PUSH2 0x362C SWAP2 SWAP1 PUSH2 0x4830 JUMP JUMPDEST PUSH1 0xD5 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3653 SWAP1 DUP9 SWAP1 PUSH2 0x4830 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP12 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x3683 SWAP1 DUP5 SWAP1 PUSH2 0x4802 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP12 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0xCC SLOAD PUSH2 0x36B4 SWAP2 PUSH2 0x100 SWAP1 SWAP2 DIV AND DUP3 PUSH2 0x382C JUMP JUMPDEST PUSH1 0xCC SLOAD PUSH1 0xCD SLOAD PUSH1 0xC9 SLOAD PUSH1 0x40 MLOAD PUSH4 0x5BEBB3B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x100 SWAP5 DUP6 SWAP1 DIV DUP2 AND SWAP5 PUSH4 0x16FAECEC SWAP5 PUSH2 0x36FC SWAP5 SWAP1 DUP4 AND SWAP4 SWAP2 SWAP1 DIV SWAP1 SWAP2 AND SWAP1 PUSH1 0x1 SWAP1 PUSH1 0x4 ADD PUSH2 0x4B2A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3716 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x372A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5397 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP6 PUSH1 0x40 MLOAD PUSH2 0x375F SWAP2 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0xCC SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x100 SWAP1 SWAP3 DIV DUP3 AND SWAP2 DUP11 AND SWAP1 PUSH32 0x3AC0548D62D3FA3C9A817CD33899B9ACACD57E8958EBE51BC7D9A79F26A8A5DB SWAP1 PUSH2 0x37AE SWAP1 DUP6 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0x6D35BF91 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x6D35BF91 SWAP1 PUSH2 0x37EE SWAP1 ADDRESS SWAP1 DUP15 SWAP1 DUP15 SWAP1 DUP15 SWAP1 DUP15 SWAP1 PUSH1 0x4 ADD PUSH2 0x50B9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3808 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x381C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x23ED DUP2 DUP5 DUP5 PUSH2 0x2397 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x389D DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3ED2 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH1 0x0 EQ DUP1 PUSH2 0x38BE JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x38BE SWAP2 SWAP1 PUSH2 0x4C90 JUMP JUMPDEST PUSH2 0x23ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x5135 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1030 PUSH2 0x38F1 DUP5 PUSH8 0xDE0B6B3A7640000 PUSH2 0x3EBA JUMP JUMPDEST DUP4 MLOAD PUSH2 0x3EE1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 PUSH2 0x3911 DUP5 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x3EBA JUMP JUMPDEST PUSH2 0x1030 SWAP2 SWAP1 PUSH2 0x4C43 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0xAD6 SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 PUSH2 0x4C43 JUMP JUMPDEST PUSH2 0x3954 DUP5 PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x23B6 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4D94 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x39D3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4E3A JUMP JUMPDEST PUSH2 0x12F9 PUSH2 0x3EED JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xAE4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4E3A JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH3 0x3F1EE9 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 DUP5 AND SWAP2 PUSH3 0x7E3DD2 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3A4C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3A70 SWAP2 SWAP1 PUSH2 0x4C90 JUMP JUMPDEST PUSH2 0x3A8C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x5074 JUMP JUMPDEST PUSH1 0xCD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP4 AND SWAP1 PUSH32 0x7AC369DBD14FA5EA3F473ED67CC9D598964A77501540BA6751EB0B3DECF5870D SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0xE89D51AD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xE89D51AD SWAP1 PUSH2 0x3B15 SWAP1 ADDRESS SWAP1 DUP7 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5145 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3B2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3B43 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x3B4F PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SLOAD EQ PUSH2 0x3B70 JUMPI PUSH1 0x40 MLOAD PUSH4 0x80965B1B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3B78 PUSH2 0x1C96 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6C540BAF PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3BB6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3BDA SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST EQ PUSH2 0x3BF8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1046F38D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x3C2A JUMPI PUSH1 0x40 MLOAD PUSH4 0x1BD1A621 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x0 SUB PUSH2 0x3C4B JUMPI PUSH1 0x40 MLOAD PUSH4 0xD29DA7EF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 NOT DUP4 SUB PUSH2 0x3C6D JUMPI PUSH1 0x40 MLOAD PUSH4 0x5982C5BB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3C7A DUP7 DUP7 DUP7 PUSH2 0x208E JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0xC488847B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xC488847B SWAP1 PUSH2 0x3CB4 SWAP1 ADDRESS SWAP1 DUP10 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x4D94 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3CD0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3CF4 SWAP2 SWAP1 PUSH2 0x5187 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ PUSH2 0x3D18 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x520A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x3D46 SWAP1 DUP12 SWAP1 PUSH1 0x4 ADD PUSH2 0x417F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3D63 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3D87 SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST LT ISZERO PUSH2 0x3DA5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x524E JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SUB PUSH2 0x3DC6 JUMPI PUSH2 0x3DC1 ADDRESS DUP10 DUP10 DUP5 PUSH2 0x34A5 JUMP JUMPDEST PUSH2 0x3E29 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xB2A02FF1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH4 0xB2A02FF1 SWAP1 PUSH2 0x3DF6 SWAP1 DUP12 SWAP1 DUP12 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x4D94 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3E10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3E24 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x298637F684DA70674F26509B10F07EC2FBC77A335AB1E7D6215A4B2484D8BB52 DUP7 DUP6 PUSH1 0x40 MLOAD PUSH2 0x3E78 SWAP3 SWAP2 SWAP1 PUSH2 0x47D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0x47EF3B3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x47EF3B3B SWAP1 PUSH2 0x283B SWAP1 ADDRESS SWAP1 DUP10 SWAP1 DUP14 SWAP1 DUP14 SWAP1 DUP11 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x525E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1030 DUP3 DUP5 PUSH2 0x4C0E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1030 DUP3 DUP5 PUSH2 0x4802 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x231A DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x3F1D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1030 DUP3 DUP5 PUSH2 0x4C43 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3F14 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4E3A JUMP JUMPDEST PUSH2 0x12F9 CALLER PUSH2 0x2E34 JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x3F3F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x52F0 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x3F5B SWAP2 SWAP1 PUSH2 0x5322 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3F98 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3F9D JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x3FAE DUP8 DUP4 DUP4 DUP8 PUSH2 0x3FB9 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x3FF8 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x3FF1 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x3FF1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x5362 JUMP JUMPDEST POP DUP2 PUSH2 0x231A JUMP JUMPDEST PUSH2 0x231A DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x400D JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP2 SWAP1 PUSH2 0x407D JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4042 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x402A JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4055 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x406C DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x4027 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1030 DUP2 DUP5 PUSH2 0x404B JUMP JUMPDEST DUP1 JUMPDEST DUP2 EQ PUSH2 0xAED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0xAD6 DUP2 PUSH2 0x408E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x40BB JUMPI PUSH2 0x40BB PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x231A DUP5 DUP5 PUSH2 0x409B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xAD6 JUMP JUMPDEST PUSH2 0x4090 DUP2 PUSH2 0x40C7 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xAD6 DUP2 PUSH2 0x40D8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4102 JUMPI PUSH2 0x4102 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x410E DUP6 DUP6 PUSH2 0x40E1 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x411F DUP6 DUP3 DUP7 ADD PUSH2 0x409B JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xAD6 DUP3 DUP5 PUSH2 0x4129 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4156 JUMPI PUSH2 0x4156 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x231A DUP5 DUP5 PUSH2 0x40E1 JUMP JUMPDEST DUP1 PUSH2 0x412D JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xAD6 DUP3 DUP5 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x412D DUP2 PUSH2 0x40C7 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xAD6 DUP3 DUP5 PUSH2 0x4176 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAD6 DUP3 PUSH2 0x40C7 JUMP JUMPDEST PUSH2 0x4090 DUP2 PUSH2 0x418D JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xAD6 DUP2 PUSH2 0x4198 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x41C1 JUMPI PUSH2 0x41C1 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x231A DUP5 DUP5 PUSH2 0x41A1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x41E5 JUMPI PUSH2 0x41E5 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x41F1 DUP7 DUP7 PUSH2 0x40E1 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x4202 DUP7 DUP3 DUP8 ADD PUSH2 0x40E1 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x4213 DUP7 DUP3 DUP8 ADD PUSH2 0x409B JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0xFF DUP2 AND PUSH2 0x412D JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xAD6 DUP3 DUP5 PUSH2 0x421D JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAD6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x424B JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAD6 DUP3 PUSH2 0x4234 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAD6 DUP3 PUSH2 0x4257 JUMP JUMPDEST PUSH2 0x412D DUP2 PUSH2 0x4262 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xAD6 DUP3 DUP5 PUSH2 0x426D JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x42C0 JUMPI PUSH2 0x42C0 PUSH2 0x4284 JUMP JUMPDEST PUSH1 0x40 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x42D2 PUSH1 0x40 MLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x42DE DUP3 DUP3 PUSH2 0x429A JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x42FD JUMPI PUSH2 0x42FD PUSH2 0x4284 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x432D PUSH2 0x4328 DUP5 PUSH2 0x42E3 JUMP JUMPDEST PUSH2 0x42C7 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x4348 JUMPI PUSH2 0x4348 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4353 DUP5 DUP3 DUP6 PUSH2 0x430E JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x436F JUMPI PUSH2 0x436F PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x231A DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x431A JUMP JUMPDEST PUSH1 0xFF DUP2 AND PUSH2 0x4090 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xAD6 DUP2 PUSH2 0x437F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x43A8 JUMPI PUSH2 0x43A8 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43B2 PUSH1 0x40 PUSH2 0x42C7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x43C0 DUP5 DUP5 PUSH2 0x40E1 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x43D1 DUP5 DUP5 DUP4 ADD PUSH2 0x40E1 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x180 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x4402 JUMPI PUSH2 0x4402 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x440E DUP15 DUP15 PUSH2 0x40E1 JUMP JUMPDEST SWAP12 POP POP PUSH1 0x20 PUSH2 0x441F DUP15 DUP3 DUP16 ADD PUSH2 0x41A1 JUMP JUMPDEST SWAP11 POP POP PUSH1 0x40 PUSH2 0x4430 DUP15 DUP3 DUP16 ADD PUSH2 0x41A1 JUMP JUMPDEST SWAP10 POP POP PUSH1 0x60 PUSH2 0x4441 DUP15 DUP3 DUP16 ADD PUSH2 0x409B JUMP JUMPDEST SWAP9 POP POP PUSH1 0x80 DUP13 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4461 JUMPI PUSH2 0x4461 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x446D DUP15 DUP3 DUP16 ADD PUSH2 0x435B JUMP JUMPDEST SWAP8 POP POP PUSH1 0xA0 DUP13 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x448D JUMPI PUSH2 0x448D PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4499 DUP15 DUP3 DUP16 ADD PUSH2 0x435B JUMP JUMPDEST SWAP7 POP POP PUSH1 0xC0 PUSH2 0x44AA DUP15 DUP3 DUP16 ADD PUSH2 0x4388 JUMP JUMPDEST SWAP6 POP POP PUSH1 0xE0 PUSH2 0x44BB DUP15 DUP3 DUP16 ADD PUSH2 0x40E1 JUMP JUMPDEST SWAP5 POP POP PUSH2 0x100 PUSH2 0x44CD DUP15 DUP3 DUP16 ADD PUSH2 0x40E1 JUMP JUMPDEST SWAP4 POP POP PUSH2 0x120 PUSH2 0x44DF DUP15 DUP3 DUP16 ADD PUSH2 0x4393 JUMP JUMPDEST SWAP3 POP POP PUSH2 0x160 PUSH2 0x44F1 DUP15 DUP3 DUP16 ADD PUSH2 0x409B JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x4090 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xAD6 DUP2 PUSH2 0x4504 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4532 JUMPI PUSH2 0x4532 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x453E DUP9 DUP9 PUSH2 0x40E1 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x454F DUP9 DUP3 DUP10 ADD PUSH2 0x40E1 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x4560 DUP9 DUP3 DUP10 ADD PUSH2 0x409B JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0x4571 DUP9 DUP3 DUP10 ADD PUSH2 0x41A1 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0x4582 DUP9 DUP3 DUP10 ADD PUSH2 0x450C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x459D DUP3 DUP8 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x45AA PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x45B7 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x238E PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x4162 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x45DA JUMPI PUSH2 0x45DA PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x45E6 DUP6 DUP6 PUSH2 0x40E1 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x411F DUP6 DUP3 DUP7 ADD PUSH2 0x40E1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x460F JUMPI PUSH2 0x460F PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x461B DUP7 DUP7 PUSH2 0x40E1 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x462C DUP7 DUP3 DUP8 ADD PUSH2 0x409B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x4213 DUP7 DUP3 DUP8 ADD PUSH2 0x41A1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP2 DIV PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x4667 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x4679 JUMPI PUSH2 0x4679 PUSH2 0x463D JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xA DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH10 0x1C994B595B9D195C9959 PUSH1 0xB2 SHL DUP2 MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x467F JUMP JUMPDEST PUSH1 0x2F DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x56546F6B656E3A3A7377656570546F6B656E3A206F6E6C792061646D696E2063 DUP2 MSTORE PUSH15 0x616E20737765657020746F6B656E73 PUSH1 0x88 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x46B3 JUMP JUMPDEST PUSH1 0x32 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x56546F6B656E3A3A7377656570546F6B656E3A2063616E206E6F742073776565 DUP2 MSTORE PUSH18 0x38103AB73232B9363CB4B733903A37B5B2B7 PUSH1 0x71 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x4712 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xAD6 DUP2 PUSH2 0x408E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4791 JUMPI PUSH2 0x4791 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x231A DUP5 DUP5 PUSH2 0x4771 JUMP JUMPDEST PUSH1 0xD DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH13 0x125B9D985B1A5908125B9C1D5D PUSH1 0x9A SHL DUP2 MSTORE SWAP2 POP PUSH2 0x469C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x479D JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x47DF DUP3 DUP6 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x1030 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x4162 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0xAD6 JUMPI PUSH2 0xAD6 PUSH2 0x47EC JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4823 DUP3 DUP6 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x1030 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x4176 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0xAD6 JUMPI PUSH2 0xAD6 PUSH2 0x47EC JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4851 DUP3 DUP7 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x485E PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x231A PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x4162 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAD6 PUSH2 0x4248 DUP4 DUP2 JUMP JUMPDEST PUSH2 0x412D DUP2 PUSH2 0x486B JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x488E DUP3 DUP7 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x485E PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x4877 JUMP JUMPDEST PUSH1 0x29 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4F776E61626C6532537465703A2063616C6C6572206973206E6F742074686520 DUP2 MSTORE PUSH9 0x3732BB9037BBB732B9 PUSH1 0xB9 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x489B JUMP JUMPDEST PUSH1 0x2E DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 DUP2 MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x48F1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND PUSH2 0xAD6 JUMP JUMPDEST PUSH2 0x412D DUP2 PUSH2 0x494C JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xAD6 DUP3 DUP5 PUSH2 0x4957 JUMP JUMPDEST PUSH1 0x1E DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x64656372656173656420616C6C6F77616E63652062656C6F77207A65726F0000 DUP2 MSTORE SWAP2 POP PUSH2 0x469C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x496E JUMP JUMPDEST PUSH1 0x1C DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x626F72726F772072617465206973206162737572646C79206869676800000000 DUP2 MSTORE SWAP2 POP PUSH2 0x469C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x49B2 JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD PUSH2 0x4A04 DUP3 DUP9 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x4A11 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x4A1E PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x4A2B PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x2E2A PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x4162 JUMP JUMPDEST PUSH1 0x2B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x6F6E6C792073686F727466616C6C20636F6E74726163742063616E2075706461 DUP2 MSTORE PUSH11 0x1D1948189859081919589D PUSH1 0xAA SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x4A38 JUMP JUMPDEST PUSH1 0x29 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x6D6F7265207468616E206261642064656274207265636F76657265642066726F DUP2 MSTORE PUSH9 0x369030BAB1BA34B7B7 PUSH1 0xB9 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x4A90 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP2 LT PUSH2 0xAED JUMPI PUSH2 0xAED PUSH2 0x4AE6 JUMP JUMPDEST DUP1 PUSH2 0x42DE DUP2 PUSH2 0x4AFC JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAD6 DUP3 PUSH2 0x4B0C JUMP JUMPDEST PUSH2 0x412D DUP2 PUSH2 0x4B16 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4B38 DUP3 DUP7 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x4B45 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x231A PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x4B21 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 SWAP2 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 PUSH2 0x469C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x4B52 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x696E76616C696420616365737320636F6E74726F6C206D616E61676572206164 DUP2 MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x4B94 JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD PUSH2 0x4BF4 DUP3 DUP9 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x4C01 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x4A1E PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x4176 JUMP JUMPDEST DUP2 DUP2 MUL DUP1 DUP3 ISZERO DUP4 DUP3 DIV DUP6 EQ OR PUSH2 0x4C26 JUMPI PUSH2 0x4C26 PUSH2 0x47EC JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4C52 JUMPI PUSH2 0x4C52 PUSH2 0x4C2D JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x47DF DUP3 DUP6 PUSH2 0x4176 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4C73 DUP3 DUP6 PUSH2 0x4176 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x231A DUP2 DUP5 PUSH2 0x404B JUMP JUMPDEST DUP1 MLOAD PUSH2 0xAD6 DUP2 PUSH2 0x4504 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4CA5 JUMPI PUSH2 0x4CA5 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x231A DUP5 DUP5 PUSH2 0x4C85 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4CBF DUP3 DUP7 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x4CCC PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x4176 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x238E DUP2 DUP5 PUSH2 0x404B JUMP JUMPDEST PUSH1 0x34 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x6F6E65206F662072656465656D546F6B656E73496E206F722072656465656D41 DUP2 MSTORE PUSH20 0x6D6F756E74496E206D757374206265207A65726F PUSH1 0x60 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x4CDE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 SUB PUSH2 0x4D52 JUMPI PUSH2 0x4D52 PUSH2 0x47EC JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x14 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH20 0x72656465656D416D6F756E74206973207A65726F PUSH1 0x60 SHL DUP2 MSTORE SWAP2 POP PUSH2 0x469C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x4D59 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4DA2 DUP3 DUP7 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x485E PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x4176 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x4DBD DUP3 DUP8 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x45AA PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x4176 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x4DD8 DUP3 DUP8 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x4DE5 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x45B7 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x4176 JUMP JUMPDEST PUSH1 0x2B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 DUP2 MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x4DF2 JUMP JUMPDEST PUSH1 0x23 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x6D61726B6574206D6179206F6E6C7920626520696E697469616C697A6564206F DUP2 MSTORE PUSH3 0x6E6365 PUSH1 0xE8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x4E4A JUMP JUMPDEST PUSH1 0x30 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x696E697469616C2065786368616E67652072617465206D757374206265206772 DUP2 MSTORE PUSH16 0x32B0BA32B9103A3430B7103D32B93797 PUSH1 0x81 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x4E9A JUMP JUMPDEST PUSH2 0x4F00 DUP4 PUSH2 0x486B JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 NOT PUSH1 0x8 SWAP5 SWAP1 SWAP5 MUL SWAP4 DUP5 SHL NOT AND SWAP3 SHL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x23ED DUP2 DUP5 DUP5 PUSH2 0x4EF7 JUMP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x248C JUMPI PUSH2 0x4F3B PUSH1 0x0 DUP3 PUSH2 0x4F1B JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x4F28 JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x23ED JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH1 0x20 PUSH1 0x1F DUP6 ADD DIV DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x4F6A JUMPI POP DUP1 JUMPDEST PUSH2 0x169A PUSH1 0x20 PUSH1 0x1F DUP7 ADD DIV DUP4 ADD DUP3 PUSH2 0x4F28 JUMP JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4F96 JUMPI PUSH2 0x4F96 PUSH2 0x4284 JUMP JUMPDEST PUSH2 0x4FA0 DUP3 SLOAD PUSH2 0x4653 JUMP JUMPDEST PUSH2 0x4FAB DUP3 DUP3 DUP6 PUSH2 0x4F43 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x4FDF JUMPI PUSH1 0x0 DUP5 ISZERO PUSH2 0x4FC7 JUMPI POP DUP6 DUP3 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x8 DUP7 MUL SHR NOT DUP2 AND PUSH1 0x2 DUP7 MUL OR DUP7 SSTORE POP PUSH2 0x5038 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x500F JUMPI DUP9 DUP6 ADD MLOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x4FEF JUMP JUMPDEST DUP7 DUP4 LT ISZERO PUSH2 0x502B JUMPI DUP5 DUP10 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x1F DUP10 AND PUSH1 0x8 MUL SHR NOT AND DUP3 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x2 DUP9 MUL ADD DUP9 SSTORE POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1C DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x6D61726B6572206D6574686F642072657475726E65642066616C736500000000 DUP2 MSTORE SWAP2 POP PUSH2 0x469C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x5040 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x5092 DUP3 DUP8 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x509F PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x50AC PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x238E PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x4176 JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD PUSH2 0x50C7 DUP3 DUP9 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x50D4 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x50E1 PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x4A2B PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x4176 JUMP JUMPDEST PUSH1 0x2A DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E DUP2 MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x50EE JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD PUSH2 0x5153 DUP3 DUP9 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x5160 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x516D PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x517A PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x2E2A PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x4129 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x519D JUMPI PUSH2 0x519D PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x51A9 DUP6 DUP6 PUSH2 0x4771 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x411F DUP6 DUP3 DUP7 ADD PUSH2 0x4771 JUMP JUMPDEST PUSH1 0x33 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4C49515549444154455F434F4D5054524F4C4C45525F43414C43554C4154455F DUP2 MSTORE PUSH19 0x105353D5539517D4D152569157D19052531151 PUSH1 0x6A SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x51BA JUMP JUMPDEST PUSH1 0x18 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4C49515549444154455F5345495A455F544F4F5F4D5543480000000000000000 DUP2 MSTORE SWAP2 POP PUSH2 0x469C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x521A JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD PUSH2 0x526C DUP3 DUP10 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x5279 PUSH1 0x20 DUP4 ADD DUP9 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x5286 PUSH1 0x40 DUP4 ADD DUP8 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x5293 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x52A0 PUSH1 0x80 DUP4 ADD DUP6 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x3FAE PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0x4162 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F DUP2 MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x52AD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x530A DUP3 MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x5318 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x4027 JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1030 DUP3 DUP5 PUSH2 0x5300 JUMP JUMPDEST PUSH1 0x1D DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 DUP2 MSTORE SWAP2 POP PUSH2 0x469C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x532E JUMP INVALID PUSH20 0x65745265647563655265736572766573426C6F63 PUSH12 0x44656C74612875696E743235 CALLDATASIZE 0x29 0xDD CALLCODE MSTORE 0xAD SHL 0xE2 0xC8 SWAP12 PUSH10 0xC2B068FC378DAA952BA7 CALL PUSH4 0xC4A11628 CREATE2 GAS 0x4D CREATE2 0x23 0xB3 0xEF LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA5 REVERT PUSH8 0x77E1F72C4E9C76E8 OR GASPRICE 0xBB 0xBC MSIZE 0xEA STATICCALL 0x4C DIV MOD 0xE6 0xA5 GASPRICE JUMPI 0x29 CODESIZE SWAP10 0xD5 0xE0 LOG4 CALLCODE PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ","sourceMap":"3352:72470:38:-:0;;;4618:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4747:10;4759:14;1898:10:44;1897:11;:34;;;;-1:-1:-1;1912:19:44;;1897:34;1893:94;;;1954:22;;-1:-1:-1;;;1954:22:44;;;;;;;;;;;1893:94;2001:10;:33;;;;-1:-1:-1;2015:19:44;;;2001:33;1997:102;;;2057:31;;-1:-1:-1;;;2057:31:44;;;;;;;;;;;1997:102;2109:24;;;;;2123:10;2168:46;;2200:14;2168:46;;;408:10:45;2168:46:44;2143:71;;2242:10;:49;;2276:15;;;;;2242:49;;;2255:18;;;;;2242:49;-1:-1:-1;;;;;2224:67:44;;;-1:-1:-1;;4943:4:38::1;4917:30:::0;::::1;;4909:74;;;;-1:-1:-1::0;;;4909:74:38::1;;;;;;;:::i;:::-;;;;;;;;;4994:49;::::0;;;5053:22:::1;:20;:22::i;:::-;4618:464:::0;;;3352:72470;;2882:94:44;2957:12;;2882:94::o;2675:100::-;2753:15;;2675:100::o;5939:280:3:-;6007:13;;;;;;;6006:14;5998:66;;;;-1:-1:-1;;;5998:66:3;;;;;;;:::i;:::-;6078:12;;6094:15;6078:12;;;:31;6074:139;;6125:12;:30;;-1:-1:-1;;6125:30:3;6140:15;6125:30;;;;;;6174:28;;;;;;;:::i;:::-;;;;;;;;6074:139;5939:280::o;430:116:69:-;404:13;;397:21;500;493:5;490:32;480:60;;536:1;533;526:12;480:60;430:116;:::o;552:137::-;631:13;;653:30;631:13;653:30;:::i;:::-;552:137;;;;:::o;778:122::-;869:5;851:24;695:77;906:143;988:13;;1010:33;988:13;1010:33;:::i;1055:657::-;1140:6;1148;1156;1205:2;1193:9;1184:7;1180:23;1176:32;1173:119;;;1211:79;197:1;194;187:12;1211:79;1331:1;1356:61;1409:7;1389:9;1356:61;:::i;:::-;1346:71;;1302:125;1466:2;1492:64;1548:7;1539:6;1528:9;1524:22;1492:64;:::i;:::-;1482:74;;1437:129;1605:2;1631:64;1687:7;1678:6;1667:9;1663:22;1631:64;:::i;:::-;1621:74;;1576:129;1055:657;;;;;:::o;2452:419::-;2656:2;2669:47;;;2641:18;;2733:131;2641:18;2307:2;1824:19;;2033:33;1876:4;1867:14;;2010:57;2428:12;;;2080:366;3481:419;3685:2;3698:47;;;3670:18;;3762:131;3670:18;3336:2;1824:19;;3017:34;1876:4;1867:14;;2994:58;-1:-1:-1;;;3069:15:69;;;3062:34;3457:12;;;3109:366;4116:214;3981:4;3970:16;;4069:35;;4243:2;4228:18;;4256:67;3998:112;4116:214;3352:72470:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@NO_ERROR_9581":{"entryPoint":null,"id":9581,"parameterSlots":0,"returnSlots":0},"@__AccessControlled_init_unchained_4943":{"entryPoint":14811,"id":4943,"parameterSlots":1,"returnSlots":0},"@__Ownable2Step_init_26":{"entryPoint":14764,"id":26,"parameterSlots":0,"returnSlots":0},"@__Ownable_init_unchained_145":{"entryPoint":16109,"id":145,"parameterSlots":0,"returnSlots":0},"@_addReservesFresh_14886":{"entryPoint":11853,"id":14886,"parameterSlots":1,"returnSlots":1},"@_borrowBalanceStored_15461":{"entryPoint":8882,"id":15461,"parameterSlots":1,"returnSlots":1},"@_borrowFresh_14285":{"entryPoint":12002,"id":14285,"parameterSlots":3,"returnSlots":0},"@_callOptionalReturn_2391":{"entryPoint":14408,"id":2391,"parameterSlots":2,"returnSlots":0},"@_checkAccessAllowed_5034":{"entryPoint":9202,"id":5034,"parameterSlots":1,"returnSlots":0},"@_checkOwner_176":{"entryPoint":8159,"id":176,"parameterSlots":0,"returnSlots":0},"@_doTransferIn_15057":{"entryPoint":11548,"id":15057,"parameterSlots":2,"returnSlots":1},"@_doTransferOut_15080":{"entryPoint":14380,"id":15080,"parameterSlots":2,"returnSlots":0},"@_ensureSenderIsDelegateOf_15408":{"entryPoint":9500,"id":15408,"parameterSlots":1,"returnSlots":0},"@_exchangeRateStored_15505":{"entryPoint":8994,"id":15505,"parameterSlots":0,"returnSlots":1},"@_getBlockNumber_16318":{"entryPoint":7720,"id":16318,"parameterSlots":0,"returnSlots":1},"@_getBlockTimestamp_16308":{"entryPoint":7724,"id":16308,"parameterSlots":0,"returnSlots":1},"@_getCashPrior_15425":{"entryPoint":11403,"id":15425,"parameterSlots":0,"returnSlots":1},"@_initialize_15333":{"entryPoint":12473,"id":15333,"parameterSlots":11,"returnSlots":0},"@_liquidateBorrowFresh_14616":{"entryPoint":15069,"id":14616,"parameterSlots":5,"returnSlots":0},"@_liquidateBorrow_14436":{"entryPoint":12897,"id":14436,"parameterSlots":5,"returnSlots":0},"@_mintFresh_14011":{"entryPoint":10345,"id":14011,"parameterSlots":3,"returnSlots":0},"@_msgSender_2798":{"entryPoint":null,"id":2798,"parameterSlots":0,"returnSlots":1},"@_redeemFresh_14184":{"entryPoint":9644,"id":14184,"parameterSlots":4,"returnSlots":0},"@_reduceReservesFresh_14963":{"entryPoint":7728,"id":14963,"parameterSlots":1,"returnSlots":0},"@_repayBorrowFresh_14392":{"entryPoint":8334,"id":14392,"parameterSlots":3,"returnSlots":1},"@_revert_2769":{"entryPoint":null,"id":2769,"parameterSlots":2,"returnSlots":0},"@_seize_14769":{"entryPoint":13477,"id":14769,"parameterSlots":4,"returnSlots":0},"@_setAccessControlManager_5004":{"entryPoint":8201,"id":5004,"parameterSlots":1,"returnSlots":0},"@_setComptroller_14797":{"entryPoint":14850,"id":14797,"parameterSlots":1,"returnSlots":0},"@_setInterestRateModelFresh_15004":{"entryPoint":13121,"id":15004,"parameterSlots":1,"returnSlots":0},"@_setProtocolShareReserve_15385":{"entryPoint":8783,"id":15385,"parameterSlots":1,"returnSlots":0},"@_setReserveFactorFresh_14834":{"entryPoint":9360,"id":14834,"parameterSlots":1,"returnSlots":0},"@_setShortfallContract_15356":{"entryPoint":11457,"id":15356,"parameterSlots":1,"returnSlots":0},"@_transferOwnership_233":{"entryPoint":14682,"id":233,"parameterSlots":1,"returnSlots":0},"@_transferOwnership_78":{"entryPoint":11828,"id":78,"parameterSlots":1,"returnSlots":0},"@_transferTokens_15207":{"entryPoint":10856,"id":15207,"parameterSlots":4,"returnSlots":0},"@acceptOwnership_100":{"entryPoint":5309,"id":100,"parameterSlots":0,"returnSlots":0},"@accessControlManager_4966":{"entryPoint":null,"id":4966,"parameterSlots":0,"returnSlots":1},"@accrualBlockNumber_15557":{"entryPoint":null,"id":15557,"parameterSlots":0,"returnSlots":0},"@accrueInterest_13910":{"entryPoint":6139,"id":13910,"parameterSlots":0,"returnSlots":1},"@addReserves_13228":{"entryPoint":5230,"id":13228,"parameterSlots":1,"returnSlots":0},"@add__9859":{"entryPoint":16070,"id":9859,"parameterSlots":2,"returnSlots":1},"@allowance_13627":{"entryPoint":null,"id":13627,"parameterSlots":2,"returnSlots":1},"@approve_12658":{"entryPoint":2660,"id":12658,"parameterSlots":2,"returnSlots":1},"@badDebtRecovered_13503":{"entryPoint":7364,"id":13503,"parameterSlots":1,"returnSlots":0},"@badDebt_15572":{"entryPoint":null,"id":15572,"parameterSlots":0,"returnSlots":0},"@balanceOfUnderlying_12789":{"entryPoint":4081,"id":12789,"parameterSlots":1,"returnSlots":1},"@balanceOf_13641":{"entryPoint":null,"id":13641,"parameterSlots":1,"returnSlots":1},"@blocksOrSecondsPerYear_16219":{"entryPoint":null,"id":16219,"parameterSlots":0,"returnSlots":0},"@borrowBalanceCurrent_12823":{"entryPoint":2907,"id":12823,"parameterSlots":1,"returnSlots":1},"@borrowBalanceStored_13728":{"entryPoint":5886,"id":13728,"parameterSlots":1,"returnSlots":1},"@borrowBehalf_13045":{"entryPoint":5452,"id":13045,"parameterSlots":2,"returnSlots":1},"@borrowIndex_15560":{"entryPoint":null,"id":15560,"parameterSlots":0,"returnSlots":0},"@borrowRatePerBlock_13696":{"entryPoint":7652,"id":13696,"parameterSlots":0,"returnSlots":1},"@borrow_13017":{"entryPoint":7104,"id":13017,"parameterSlots":1,"returnSlots":1},"@comptroller_15545":{"entryPoint":null,"id":15545,"parameterSlots":0,"returnSlots":0},"@decimals_15538":{"entryPoint":null,"id":15538,"parameterSlots":0,"returnSlots":0},"@decreaseAllowance_12764":{"entryPoint":5964,"id":12764,"parameterSlots":2,"returnSlots":1},"@div__10122":{"entryPoint":14554,"id":10122,"parameterSlots":2,"returnSlots":1},"@div__10201":{"entryPoint":16097,"id":10201,"parameterSlots":2,"returnSlots":1},"@ensureNonzeroAddress_16143":{"entryPoint":8120,"id":16143,"parameterSlots":1,"returnSlots":0},"@exchangeRateCurrent_13755":{"entryPoint":6957,"id":13755,"parameterSlots":0,"returnSlots":1},"@exchangeRateStored_13739":{"entryPoint":2992,"id":13739,"parameterSlots":0,"returnSlots":1},"@forceLiquidateBorrow_13440":{"entryPoint":5730,"id":13440,"parameterSlots":5,"returnSlots":0},"@functionCallWithValue_2594":{"entryPoint":16157,"id":2594,"parameterSlots":4,"returnSlots":1},"@functionCall_2530":{"entryPoint":16082,"id":2530,"parameterSlots":3,"returnSlots":1},"@getAccountSnapshot_13668":{"entryPoint":7039,"id":13668,"parameterSlots":1,"returnSlots":4},"@getBlockNumberOrTimestamp_16298":{"entryPoint":7318,"id":16298,"parameterSlots":0,"returnSlots":1},"@getCash_13679":{"entryPoint":4151,"id":13679,"parameterSlots":0,"returnSlots":1},"@healBorrow_13403":{"entryPoint":4178,"id":13403,"parameterSlots":3,"returnSlots":0},"@increaseAllowance_12707":{"entryPoint":3909,"id":12707,"parameterSlots":2,"returnSlots":1},"@initialize_12570":{"entryPoint":5492,"id":12570,"parameterSlots":11,"returnSlots":0},"@interestRateModel_15549":{"entryPoint":null,"id":15549,"parameterSlots":0,"returnSlots":0},"@isContract_2458":{"entryPoint":null,"id":2458,"parameterSlots":1,"returnSlots":1},"@isTimeBased_16222":{"entryPoint":null,"id":16222,"parameterSlots":0,"returnSlots":0},"@isVToken_16105":{"entryPoint":null,"id":16105,"parameterSlots":0,"returnSlots":1},"@liquidateBorrow_13122":{"entryPoint":7626,"id":13122,"parameterSlots":3,"returnSlots":1},"@mintBehalf_12878":{"entryPoint":3531,"id":12878,"parameterSlots":2,"returnSlots":1},"@mint_12848":{"entryPoint":5897,"id":12848,"parameterSlots":1,"returnSlots":1},"@mul_ScalarTruncateAddUInt_9730":{"entryPoint":13444,"id":9730,"parameterSlots":3,"returnSlots":1},"@mul_ScalarTruncate_9701":{"entryPoint":11379,"id":9701,"parameterSlots":2,"returnSlots":1},"@mul__10057":{"entryPoint":16058,"id":10057,"parameterSlots":2,"returnSlots":1},"@mul__9961":{"entryPoint":13395,"id":9961,"parameterSlots":2,"returnSlots":1},"@mul__9980":{"entryPoint":14584,"id":9980,"parameterSlots":2,"returnSlots":1},"@name_15532":{"entryPoint":2415,"id":15532,"parameterSlots":0,"returnSlots":0},"@owner_162":{"entryPoint":null,"id":162,"parameterSlots":0,"returnSlots":1},"@pendingOwner_41":{"entryPoint":null,"id":41,"parameterSlots":0,"returnSlots":1},"@protocolSeizeShareMantissa_15590":{"entryPoint":null,"id":15590,"parameterSlots":0,"returnSlots":0},"@protocolShareReserve_15541":{"entryPoint":null,"id":15541,"parameterSlots":0,"returnSlots":0},"@redeemBehalf_12935":{"entryPoint":3431,"id":12935,"parameterSlots":2,"returnSlots":1},"@redeemUnderlyingBehalf_12992":{"entryPoint":7240,"id":12992,"parameterSlots":2,"returnSlots":1},"@redeemUnderlying_12961":{"entryPoint":5362,"id":12961,"parameterSlots":1,"returnSlots":1},"@redeem_12904":{"entryPoint":7171,"id":12904,"parameterSlots":1,"returnSlots":1},"@reduceReservesBlockDelta_15596":{"entryPoint":null,"id":15596,"parameterSlots":0,"returnSlots":0},"@reduceReservesBlockNumber_15599":{"entryPoint":null,"id":15599,"parameterSlots":0,"returnSlots":0},"@reduceReserves_13211":{"entryPoint":2557,"id":13211,"parameterSlots":1,"returnSlots":0},"@renounceOwnership_190":{"entryPoint":4839,"id":190,"parameterSlots":0,"returnSlots":0},"@repayBorrowBehalf_13096":{"entryPoint":3818,"id":13096,"parameterSlots":2,"returnSlots":1},"@repayBorrow_13070":{"entryPoint":2800,"id":13070,"parameterSlots":1,"returnSlots":1},"@reserveFactorMantissa_15554":{"entryPoint":null,"id":15554,"parameterSlots":0,"returnSlots":0},"@safeTransferFrom_2124":{"entryPoint":14643,"id":2124,"parameterSlots":4,"returnSlots":0},"@safeTransfer_2097":{"entryPoint":9111,"id":2097,"parameterSlots":3,"returnSlots":0},"@seize_13462":{"entryPoint":6883,"id":13462,"parameterSlots":3,"returnSlots":0},"@setAccessControlManager_4956":{"entryPoint":2780,"id":4956,"parameterSlots":1,"returnSlots":0},"@setInterestRateModel_13248":{"entryPoint":5793,"id":13248,"parameterSlots":1,"returnSlots":0},"@setProtocolSeizeShare_13167":{"entryPoint":4935,"id":13167,"parameterSlots":1,"returnSlots":0},"@setProtocolShareReserve_13516":{"entryPoint":2890,"id":13516,"parameterSlots":1,"returnSlots":0},"@setReduceReservesBlockDelta_13609":{"entryPoint":3689,"id":13609,"parameterSlots":1,"returnSlots":0},"@setReserveFactor_13188":{"entryPoint":3308,"id":13188,"parameterSlots":1,"returnSlots":0},"@setShortfallContract_13529":{"entryPoint":4161,"id":13529,"parameterSlots":1,"returnSlots":0},"@shortfall_15593":{"entryPoint":null,"id":15593,"parameterSlots":0,"returnSlots":0},"@supplyRatePerBlock_13714":{"entryPoint":6746,"id":13714,"parameterSlots":0,"returnSlots":1},"@sweepToken_13582":{"entryPoint":3007,"id":13582,"parameterSlots":1,"returnSlots":0},"@symbol_15535":{"entryPoint":5873,"id":15535,"parameterSlots":0,"returnSlots":0},"@totalBorrowsCurrent_12804":{"entryPoint":4859,"id":12804,"parameterSlots":0,"returnSlots":1},"@totalBorrows_15563":{"entryPoint":null,"id":15563,"parameterSlots":0,"returnSlots":0},"@totalReserves_15566":{"entryPoint":null,"id":15566,"parameterSlots":0,"returnSlots":0},"@totalSupply_15569":{"entryPoint":null,"id":15569,"parameterSlots":0,"returnSlots":0},"@transferFrom_12621":{"entryPoint":3607,"id":12621,"parameterSlots":3,"returnSlots":1},"@transferOwnership_61":{"entryPoint":7513,"id":61,"parameterSlots":1,"returnSlots":0},"@transfer_12595":{"entryPoint":6665,"id":12595,"parameterSlots":2,"returnSlots":1},"@truncate_9677":{"entryPoint":14619,"id":9677,"parameterSlots":1,"returnSlots":1},"@underlying_15529":{"entryPoint":null,"id":15529,"parameterSlots":0,"returnSlots":0},"@verifyCallResultFromTarget_2725":{"entryPoint":16313,"id":2725,"parameterSlots":4,"returnSlots":1},"abi_decode_available_length_t_string_memory_ptr":{"entryPoint":17178,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_t_address":{"entryPoint":16609,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_address_payable":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_bool":{"entryPoint":17676,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_bool_fromMemory":{"entryPoint":19589,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_ComptrollerInterface_$9353":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_IERC20Upgradeable_$1352":{"entryPoint":16801,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_InterestRateModel_$10266":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_VTokenInterface_$16106":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_string_memory_ptr":{"entryPoint":17243,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_struct$_RiskManagementInit_$15613_memory_ptr":{"entryPoint":17299,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_uint256":{"entryPoint":16539,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_uint256_fromMemory":{"entryPoint":18289,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_uint8":{"entryPoint":17288,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":16705,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_payable":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":17860,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":16845,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_contract$_VTokenInterface_$16106t_bool":{"entryPoint":17687,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_addresst_contract$_ComptrollerInterface_$9353t_contract$_InterestRateModel_$10266t_uint256t_string_memory_ptrt_string_memory_ptrt_uint8t_addresst_addresst_struct$_RiskManagementInit_$15613_memory_ptrt_uint256":{"entryPoint":17373,"id":null,"parameterSlots":2,"returnSlots":11},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":16620,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256t_contract$_VTokenInterface_$16106":{"entryPoint":17911,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":19600,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IERC20Upgradeable_$1352":{"entryPoint":16812,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_InterestRateModel_$10266":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":16550,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":18300,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256_fromMemory":{"entryPoint":20871,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_t_address_payable_to_t_address_payable_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_address_to_t_address_fromStack":{"entryPoint":16758,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_bool_to_t_bool_fromStack":{"entryPoint":16681,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":21248,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_contract$_ComptrollerInterface_$9353_to_t_address_fromStack":{"entryPoint":17005,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_InterestRateModel_$10266_to_t_address_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_enum$_IncomeType_$16201_to_t_uint8_fromStack":{"entryPoint":19233,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_rational_0_by_1_to_t_uint256_fromStack":{"entryPoint":18551,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_rational_1_by_1_to_t_uint8_fromStack":{"entryPoint":18775,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack":{"entryPoint":16459,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_stringliteral_02b93ba8f3ff373adacf808c6433da448d23929cf304a4f44f1f328895f6c896_to_t_string_memory_ptr_fromStack":{"entryPoint":18099,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_1bebca39b478e42a6b88dcff87467d0e08b422ebc72c3d074bd236265624e814_to_t_string_memory_ptr_fromStack":{"entryPoint":20042,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack":{"entryPoint":18587,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_427426a02e699ec0d6d6d22f3254c7e686696e18d2de7af9416d6b5cc786ff6c_to_t_string_memory_ptr_fromStack":{"entryPoint":20122,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_4a73c8aa35e7317ade5f993a0242f1c31eb3c6b8eb0e0c438aee70e953928ca6_to_t_string_memory_ptr_fromStack":{"entryPoint":19801,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack":{"entryPoint":19348,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_500b2609d0ae28daff27dc4a068dcae2171019163b460eb756cfa6b0b62ba48a_to_t_string_memory_ptr_fromStack":{"entryPoint":18798,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack":{"entryPoint":21165,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_65583512d4629ad47546f868609492cfe1fd22a35bae5f1962d105953201ab5e_to_t_string_memory_ptr_fromStack":{"entryPoint":19088,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637_to_t_string_memory_ptr_fromStack":{"entryPoint":20544,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack":{"entryPoint":18673,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_9404501c113e486e0697e27bc7935ec4eb29770a945d28921aff00cee17e3fed_to_t_string_memory_ptr_fromStack":{"entryPoint":18333,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_987a3f65bf6c5144d945a7d9587fa166ee3a901eb2b594a0815c3c20bf841a5e_to_t_string_memory_ptr_fromStack":{"entryPoint":18047,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack":{"entryPoint":19282,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_9ab90068dc5fe9f7def6aab4ae887ed8eff65c4b83c1b9ba6beb99101f1ae8ea_to_t_string_memory_ptr_fromStack":{"entryPoint":18866,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_a09eed6cffa426a240963a23cca18c0902c7833c31318eeb460f5ddbd7830a32_to_t_string_memory_ptr_fromStack":{"entryPoint":18194,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_b1c7e90880e9fbdf9aa93d626a842fbb127521a1492c295dbd98c98157e1e4f7_to_t_string_memory_ptr_fromStack":{"entryPoint":20922,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_bffc2aa76a1b975ca5ba1defccc66ee3d6e80e3f510ac216baa6baef4008863e_to_t_string_memory_ptr_fromStack":{"entryPoint":21018,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack":{"entryPoint":21294,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_d4c9546ba1ca6ea1666b690b57d3e7501f0db18dc1e34262166d8300121d27c9_to_t_string_memory_ptr_fromStack":{"entryPoint":19000,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack":{"entryPoint":19954,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack":{"entryPoint":20718,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_e7cef2e7b515a83b650bc43dbe7230ede3601779d8be25fbf237261dccd3d9f2_to_t_string_memory_ptr_fromStack":{"entryPoint":19678,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_uint256_to_t_uint256_fromStack":{"entryPoint":16738,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_uint8_to_t_uint8_fromStack":{"entryPoint":16925,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":21282,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":16767,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_payable__to_t_address_payable__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":18453,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":20612,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address_t_address_t_uint256__to_t_address_t_address_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":20665,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_address_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":21086,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address_t_uint256__to_t_address_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":19914,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_bool__to_t_address_t_address_t_address_t_uint256_t_bool__fromStack_reversed":{"entryPoint":20805,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":19430,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_enum$_IncomeType_$16201__to_t_address_t_address_t_uint8__fromStack_reversed":{"entryPoint":19242,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_string_memory_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed":{"entryPoint":19633,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":19860,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":19887,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_string_memory_ptr__to_t_address_t_string_memory_ptr__fromStack_reversed":{"entryPoint":19557,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":19543,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":16691,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_ComptrollerInterface_$9353__to_t_address__fromStack_reversed":{"entryPoint":17014,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IAccessControlManagerV8_$5080__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_InterestRateModel_$10266__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed":{"entryPoint":18784,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":16509,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_02b93ba8f3ff373adacf808c6433da448d23929cf304a4f44f1f328895f6c896__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":18178,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1bebca39b478e42a6b88dcff87467d0e08b422ebc72c3d074bd236265624e814__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":20106,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":18657,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_427426a02e699ec0d6d6d22f3254c7e686696e18d2de7af9416d6b5cc786ff6c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":20199,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4a73c8aa35e7317ade5f993a0242f1c31eb3c6b8eb0e0c438aee70e953928ca6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":19844,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":19414,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_500b2609d0ae28daff27dc4a068dcae2171019163b460eb756cfa6b0b62ba48a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":18850,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":21232,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_65583512d4629ad47546f868609492cfe1fd22a35bae5f1962d105953201ab5e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":19158,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":20596,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":18748,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9404501c113e486e0697e27bc7935ec4eb29770a945d28921aff00cee17e3fed__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":18369,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_987a3f65bf6c5144d945a7d9587fa166ee3a901eb2b594a0815c3c20bf841a5e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":18083,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":19332,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9ab90068dc5fe9f7def6aab4ae887ed8eff65c4b83c1b9ba6beb99101f1ae8ea__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":18918,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a09eed6cffa426a240963a23cca18c0902c7833c31318eeb460f5ddbd7830a32__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":18273,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b1c7e90880e9fbdf9aa93d626a842fbb127521a1492c295dbd98c98157e1e4f7__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":21002,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bffc2aa76a1b975ca5ba1defccc66ee3d6e80e3f510ac216baa6baef4008863e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":21070,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":21346,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d4c9546ba1ca6ea1666b690b57d3e7501f0db18dc1e34262166d8300121d27c9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":19072,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":20026,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":20789,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e7cef2e7b515a83b650bc43dbe7230ede3601779d8be25fbf237261dccd3d9f2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":19759,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":16744,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_rational_0_by_1_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":18560,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":18385,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":18499,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":17807,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":18934,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":16934,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":17095,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_t_string_memory_ptr":{"entryPoint":17123,"id":null,"parameterSlots":1,"returnSlots":1},"array_dataslot_t_string_storage":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_bytes_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_string_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":18434,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":19523,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":19470,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":18480,"id":null,"parameterSlots":2,"returnSlots":1},"clean_up_bytearray_end_slots_t_string_storage":{"entryPoint":20291,"id":null,"parameterSlots":3,"returnSlots":0},"cleanup_t_address":{"entryPoint":16583,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_address_payable":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_bool":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_ComptrollerInterface_$9353":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_IERC20Upgradeable_$1352":{"entryPoint":16781,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_InterestRateModel_$10266":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_VTokenInterface_$16106":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_enum$_IncomeType_$16201":{"entryPoint":19212,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_rational_0_by_1":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_rational_1_by_1":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"clear_storage_range_t_bytes1":{"entryPoint":20264,"id":null,"parameterSlots":2,"returnSlots":0},"convert_t_contract$_ComptrollerInterface_$9353_to_t_address":{"entryPoint":16994,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_InterestRateModel_$10266_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_enum$_IncomeType_$16201_to_t_uint8":{"entryPoint":19222,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_rational_0_by_1_to_t_uint256":{"entryPoint":18539,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_rational_1_by_1_to_t_uint8":{"entryPoint":18764,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint160_to_t_address":{"entryPoint":16983,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint160_to_t_uint160":{"entryPoint":16948,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint256_to_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage":{"entryPoint":20348,"id":null,"parameterSlots":2,"returnSlots":0},"copy_calldata_to_memory_with_cleanup":{"entryPoint":17166,"id":null,"parameterSlots":3,"returnSlots":0},"copy_memory_to_memory_with_cleanup":{"entryPoint":16423,"id":null,"parameterSlots":3,"returnSlots":0},"divide_by_32_ceil":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"extract_byte_array_length":{"entryPoint":18003,"id":null,"parameterSlots":1,"returnSlots":1},"extract_used_part_and_set_length_of_short_byte_array":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":17050,"id":null,"parameterSlots":2,"returnSlots":0},"identity":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint256":{"entryPoint":19775,"id":null,"parameterSlots":1,"returnSlots":1},"mask_bytes_dynamic":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":18412,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":19501,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":19174,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x22":{"entryPoint":17981,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":17028,"id":null,"parameterSlots":0,"returnSlots":0},"prepare_store_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"round_up_to_mul_of_32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"shift_left_dynamic":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"shift_right_unsigned_dynamic":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"storage_set_to_zero_t_uint256":{"entryPoint":20251,"id":null,"parameterSlots":2,"returnSlots":0},"store_literal_in_memory_02b93ba8f3ff373adacf808c6433da448d23929cf304a4f44f1f328895f6c896":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_1bebca39b478e42a6b88dcff87467d0e08b422ebc72c3d074bd236265624e814":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_427426a02e699ec0d6d6d22f3254c7e686696e18d2de7af9416d6b5cc786ff6c":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_4a73c8aa35e7317ade5f993a0242f1c31eb3c6b8eb0e0c438aee70e953928ca6":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_500b2609d0ae28daff27dc4a068dcae2171019163b460eb756cfa6b0b62ba48a":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_65583512d4629ad47546f868609492cfe1fd22a35bae5f1962d105953201ab5e":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_9404501c113e486e0697e27bc7935ec4eb29770a945d28921aff00cee17e3fed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_987a3f65bf6c5144d945a7d9587fa166ee3a901eb2b594a0815c3c20bf841a5e":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_9ab90068dc5fe9f7def6aab4ae887ed8eff65c4b83c1b9ba6beb99101f1ae8ea":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_a09eed6cffa426a240963a23cca18c0902c7833c31318eeb460f5ddbd7830a32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_b1c7e90880e9fbdf9aa93d626a842fbb127521a1492c295dbd98c98157e1e4f7":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_bffc2aa76a1b975ca5ba1defccc66ee3d6e80e3f510ac216baa6baef4008863e":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_d4c9546ba1ca6ea1666b690b57d3e7501f0db18dc1e34262166d8300121d27c9":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_e7cef2e7b515a83b650bc43dbe7230ede3601779d8be25fbf237261dccd3d9f2":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"update_byte_slice_dynamic32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"update_storage_value_t_uint256_to_t_uint256":{"entryPoint":20215,"id":null,"parameterSlots":3,"returnSlots":0},"validator_assert_t_enum$_IncomeType_$16201":{"entryPoint":19196,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_address":{"entryPoint":16600,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_address_payable":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_bool":{"entryPoint":17668,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_ComptrollerInterface_$9353":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_IERC20Upgradeable_$1352":{"entryPoint":16792,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_InterestRateModel_$10266":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_VTokenInterface_$16106":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_uint256":{"entryPoint":16526,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_uint8":{"entryPoint":17279,"id":null,"parameterSlots":1,"returnSlots":0},"zero_value_for_split_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1}},"generatedSources":[{"ast":{"nativeSrc":"0:63577:69","nodeType":"YulBlock","src":"0:63577:69","statements":[{"body":{"nativeSrc":"66:40:69","nodeType":"YulBlock","src":"66:40:69","statements":[{"nativeSrc":"77:22:69","nodeType":"YulAssignment","src":"77:22:69","value":{"arguments":[{"name":"value","nativeSrc":"93:5:69","nodeType":"YulIdentifier","src":"93:5:69"}],"functionName":{"name":"mload","nativeSrc":"87:5:69","nodeType":"YulIdentifier","src":"87:5:69"},"nativeSrc":"87:12:69","nodeType":"YulFunctionCall","src":"87:12:69"},"variableNames":[{"name":"length","nativeSrc":"77:6:69","nodeType":"YulIdentifier","src":"77:6:69"}]}]},"name":"array_length_t_string_memory_ptr","nativeSrc":"7:99:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"49:5:69","nodeType":"YulTypedName","src":"49:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"59:6:69","nodeType":"YulTypedName","src":"59:6:69","type":""}],"src":"7:99:69"},{"body":{"nativeSrc":"208:73:69","nodeType":"YulBlock","src":"208:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"225:3:69","nodeType":"YulIdentifier","src":"225:3:69"},{"name":"length","nativeSrc":"230:6:69","nodeType":"YulIdentifier","src":"230:6:69"}],"functionName":{"name":"mstore","nativeSrc":"218:6:69","nodeType":"YulIdentifier","src":"218:6:69"},"nativeSrc":"218:19:69","nodeType":"YulFunctionCall","src":"218:19:69"},"nativeSrc":"218:19:69","nodeType":"YulExpressionStatement","src":"218:19:69"},{"nativeSrc":"246:29:69","nodeType":"YulAssignment","src":"246:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"265:3:69","nodeType":"YulIdentifier","src":"265:3:69"},{"kind":"number","nativeSrc":"270:4:69","nodeType":"YulLiteral","src":"270:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"261:3:69","nodeType":"YulIdentifier","src":"261:3:69"},"nativeSrc":"261:14:69","nodeType":"YulFunctionCall","src":"261:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"246:11:69","nodeType":"YulIdentifier","src":"246:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"112:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"180:3:69","nodeType":"YulTypedName","src":"180:3:69","type":""},{"name":"length","nativeSrc":"185:6:69","nodeType":"YulTypedName","src":"185:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"196:11:69","nodeType":"YulTypedName","src":"196:11:69","type":""}],"src":"112:169:69"},{"body":{"nativeSrc":"349:186:69","nodeType":"YulBlock","src":"349:186:69","statements":[{"nativeSrc":"360:10:69","nodeType":"YulVariableDeclaration","src":"360:10:69","value":{"kind":"number","nativeSrc":"369:1:69","nodeType":"YulLiteral","src":"369:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"364:1:69","nodeType":"YulTypedName","src":"364:1:69","type":""}]},{"body":{"nativeSrc":"429:63:69","nodeType":"YulBlock","src":"429:63:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"454:3:69","nodeType":"YulIdentifier","src":"454:3:69"},{"name":"i","nativeSrc":"459:1:69","nodeType":"YulIdentifier","src":"459:1:69"}],"functionName":{"name":"add","nativeSrc":"450:3:69","nodeType":"YulIdentifier","src":"450:3:69"},"nativeSrc":"450:11:69","nodeType":"YulFunctionCall","src":"450:11:69"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"473:3:69","nodeType":"YulIdentifier","src":"473:3:69"},{"name":"i","nativeSrc":"478:1:69","nodeType":"YulIdentifier","src":"478:1:69"}],"functionName":{"name":"add","nativeSrc":"469:3:69","nodeType":"YulIdentifier","src":"469:3:69"},"nativeSrc":"469:11:69","nodeType":"YulFunctionCall","src":"469:11:69"}],"functionName":{"name":"mload","nativeSrc":"463:5:69","nodeType":"YulIdentifier","src":"463:5:69"},"nativeSrc":"463:18:69","nodeType":"YulFunctionCall","src":"463:18:69"}],"functionName":{"name":"mstore","nativeSrc":"443:6:69","nodeType":"YulIdentifier","src":"443:6:69"},"nativeSrc":"443:39:69","nodeType":"YulFunctionCall","src":"443:39:69"},"nativeSrc":"443:39:69","nodeType":"YulExpressionStatement","src":"443:39:69"}]},"condition":{"arguments":[{"name":"i","nativeSrc":"390:1:69","nodeType":"YulIdentifier","src":"390:1:69"},{"name":"length","nativeSrc":"393:6:69","nodeType":"YulIdentifier","src":"393:6:69"}],"functionName":{"name":"lt","nativeSrc":"387:2:69","nodeType":"YulIdentifier","src":"387:2:69"},"nativeSrc":"387:13:69","nodeType":"YulFunctionCall","src":"387:13:69"},"nativeSrc":"379:113:69","nodeType":"YulForLoop","post":{"nativeSrc":"401:19:69","nodeType":"YulBlock","src":"401:19:69","statements":[{"nativeSrc":"403:15:69","nodeType":"YulAssignment","src":"403:15:69","value":{"arguments":[{"name":"i","nativeSrc":"412:1:69","nodeType":"YulIdentifier","src":"412:1:69"},{"kind":"number","nativeSrc":"415:2:69","nodeType":"YulLiteral","src":"415:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"408:3:69","nodeType":"YulIdentifier","src":"408:3:69"},"nativeSrc":"408:10:69","nodeType":"YulFunctionCall","src":"408:10:69"},"variableNames":[{"name":"i","nativeSrc":"403:1:69","nodeType":"YulIdentifier","src":"403:1:69"}]}]},"pre":{"nativeSrc":"383:3:69","nodeType":"YulBlock","src":"383:3:69","statements":[]},"src":"379:113:69"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"512:3:69","nodeType":"YulIdentifier","src":"512:3:69"},{"name":"length","nativeSrc":"517:6:69","nodeType":"YulIdentifier","src":"517:6:69"}],"functionName":{"name":"add","nativeSrc":"508:3:69","nodeType":"YulIdentifier","src":"508:3:69"},"nativeSrc":"508:16:69","nodeType":"YulFunctionCall","src":"508:16:69"},{"kind":"number","nativeSrc":"526:1:69","nodeType":"YulLiteral","src":"526:1:69","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"501:6:69","nodeType":"YulIdentifier","src":"501:6:69"},"nativeSrc":"501:27:69","nodeType":"YulFunctionCall","src":"501:27:69"},"nativeSrc":"501:27:69","nodeType":"YulExpressionStatement","src":"501:27:69"}]},"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"287:248:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"331:3:69","nodeType":"YulTypedName","src":"331:3:69","type":""},{"name":"dst","nativeSrc":"336:3:69","nodeType":"YulTypedName","src":"336:3:69","type":""},{"name":"length","nativeSrc":"341:6:69","nodeType":"YulTypedName","src":"341:6:69","type":""}],"src":"287:248:69"},{"body":{"nativeSrc":"589:54:69","nodeType":"YulBlock","src":"589:54:69","statements":[{"nativeSrc":"599:38:69","nodeType":"YulAssignment","src":"599:38:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"617:5:69","nodeType":"YulIdentifier","src":"617:5:69"},{"kind":"number","nativeSrc":"624:2:69","nodeType":"YulLiteral","src":"624:2:69","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"613:3:69","nodeType":"YulIdentifier","src":"613:3:69"},"nativeSrc":"613:14:69","nodeType":"YulFunctionCall","src":"613:14:69"},{"arguments":[{"kind":"number","nativeSrc":"633:2:69","nodeType":"YulLiteral","src":"633:2:69","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"629:3:69","nodeType":"YulIdentifier","src":"629:3:69"},"nativeSrc":"629:7:69","nodeType":"YulFunctionCall","src":"629:7:69"}],"functionName":{"name":"and","nativeSrc":"609:3:69","nodeType":"YulIdentifier","src":"609:3:69"},"nativeSrc":"609:28:69","nodeType":"YulFunctionCall","src":"609:28:69"},"variableNames":[{"name":"result","nativeSrc":"599:6:69","nodeType":"YulIdentifier","src":"599:6:69"}]}]},"name":"round_up_to_mul_of_32","nativeSrc":"541:102:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"572:5:69","nodeType":"YulTypedName","src":"572:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"582:6:69","nodeType":"YulTypedName","src":"582:6:69","type":""}],"src":"541:102:69"},{"body":{"nativeSrc":"741:285:69","nodeType":"YulBlock","src":"741:285:69","statements":[{"nativeSrc":"751:53:69","nodeType":"YulVariableDeclaration","src":"751:53:69","value":{"arguments":[{"name":"value","nativeSrc":"798:5:69","nodeType":"YulIdentifier","src":"798:5:69"}],"functionName":{"name":"array_length_t_string_memory_ptr","nativeSrc":"765:32:69","nodeType":"YulIdentifier","src":"765:32:69"},"nativeSrc":"765:39:69","nodeType":"YulFunctionCall","src":"765:39:69"},"variables":[{"name":"length","nativeSrc":"755:6:69","nodeType":"YulTypedName","src":"755:6:69","type":""}]},{"nativeSrc":"813:78:69","nodeType":"YulAssignment","src":"813:78:69","value":{"arguments":[{"name":"pos","nativeSrc":"879:3:69","nodeType":"YulIdentifier","src":"879:3:69"},{"name":"length","nativeSrc":"884:6:69","nodeType":"YulIdentifier","src":"884:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"820:58:69","nodeType":"YulIdentifier","src":"820:58:69"},"nativeSrc":"820:71:69","nodeType":"YulFunctionCall","src":"820:71:69"},"variableNames":[{"name":"pos","nativeSrc":"813:3:69","nodeType":"YulIdentifier","src":"813:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"939:5:69","nodeType":"YulIdentifier","src":"939:5:69"},{"kind":"number","nativeSrc":"946:4:69","nodeType":"YulLiteral","src":"946:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"935:3:69","nodeType":"YulIdentifier","src":"935:3:69"},"nativeSrc":"935:16:69","nodeType":"YulFunctionCall","src":"935:16:69"},{"name":"pos","nativeSrc":"953:3:69","nodeType":"YulIdentifier","src":"953:3:69"},{"name":"length","nativeSrc":"958:6:69","nodeType":"YulIdentifier","src":"958:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"900:34:69","nodeType":"YulIdentifier","src":"900:34:69"},"nativeSrc":"900:65:69","nodeType":"YulFunctionCall","src":"900:65:69"},"nativeSrc":"900:65:69","nodeType":"YulExpressionStatement","src":"900:65:69"},{"nativeSrc":"974:46:69","nodeType":"YulAssignment","src":"974:46:69","value":{"arguments":[{"name":"pos","nativeSrc":"985:3:69","nodeType":"YulIdentifier","src":"985:3:69"},{"arguments":[{"name":"length","nativeSrc":"1012:6:69","nodeType":"YulIdentifier","src":"1012:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"990:21:69","nodeType":"YulIdentifier","src":"990:21:69"},"nativeSrc":"990:29:69","nodeType":"YulFunctionCall","src":"990:29:69"}],"functionName":{"name":"add","nativeSrc":"981:3:69","nodeType":"YulIdentifier","src":"981:3:69"},"nativeSrc":"981:39:69","nodeType":"YulFunctionCall","src":"981:39:69"},"variableNames":[{"name":"end","nativeSrc":"974:3:69","nodeType":"YulIdentifier","src":"974:3:69"}]}]},"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"649:377:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"722:5:69","nodeType":"YulTypedName","src":"722:5:69","type":""},{"name":"pos","nativeSrc":"729:3:69","nodeType":"YulTypedName","src":"729:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"737:3:69","nodeType":"YulTypedName","src":"737:3:69","type":""}],"src":"649:377:69"},{"body":{"nativeSrc":"1150:195:69","nodeType":"YulBlock","src":"1150:195:69","statements":[{"nativeSrc":"1160:26:69","nodeType":"YulAssignment","src":"1160:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"1172:9:69","nodeType":"YulIdentifier","src":"1172:9:69"},{"kind":"number","nativeSrc":"1183:2:69","nodeType":"YulLiteral","src":"1183:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1168:3:69","nodeType":"YulIdentifier","src":"1168:3:69"},"nativeSrc":"1168:18:69","nodeType":"YulFunctionCall","src":"1168:18:69"},"variableNames":[{"name":"tail","nativeSrc":"1160:4:69","nodeType":"YulIdentifier","src":"1160:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1207:9:69","nodeType":"YulIdentifier","src":"1207:9:69"},{"kind":"number","nativeSrc":"1218:1:69","nodeType":"YulLiteral","src":"1218:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1203:3:69","nodeType":"YulIdentifier","src":"1203:3:69"},"nativeSrc":"1203:17:69","nodeType":"YulFunctionCall","src":"1203:17:69"},{"arguments":[{"name":"tail","nativeSrc":"1226:4:69","nodeType":"YulIdentifier","src":"1226:4:69"},{"name":"headStart","nativeSrc":"1232:9:69","nodeType":"YulIdentifier","src":"1232:9:69"}],"functionName":{"name":"sub","nativeSrc":"1222:3:69","nodeType":"YulIdentifier","src":"1222:3:69"},"nativeSrc":"1222:20:69","nodeType":"YulFunctionCall","src":"1222:20:69"}],"functionName":{"name":"mstore","nativeSrc":"1196:6:69","nodeType":"YulIdentifier","src":"1196:6:69"},"nativeSrc":"1196:47:69","nodeType":"YulFunctionCall","src":"1196:47:69"},"nativeSrc":"1196:47:69","nodeType":"YulExpressionStatement","src":"1196:47:69"},{"nativeSrc":"1252:86:69","nodeType":"YulAssignment","src":"1252:86:69","value":{"arguments":[{"name":"value0","nativeSrc":"1324:6:69","nodeType":"YulIdentifier","src":"1324:6:69"},{"name":"tail","nativeSrc":"1333:4:69","nodeType":"YulIdentifier","src":"1333:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"1260:63:69","nodeType":"YulIdentifier","src":"1260:63:69"},"nativeSrc":"1260:78:69","nodeType":"YulFunctionCall","src":"1260:78:69"},"variableNames":[{"name":"tail","nativeSrc":"1252:4:69","nodeType":"YulIdentifier","src":"1252:4:69"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"1032:313:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1122:9:69","nodeType":"YulTypedName","src":"1122:9:69","type":""},{"name":"value0","nativeSrc":"1134:6:69","nodeType":"YulTypedName","src":"1134:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1145:4:69","nodeType":"YulTypedName","src":"1145:4:69","type":""}],"src":"1032:313:69"},{"body":{"nativeSrc":"1391:35:69","nodeType":"YulBlock","src":"1391:35:69","statements":[{"nativeSrc":"1401:19:69","nodeType":"YulAssignment","src":"1401:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"1417:2:69","nodeType":"YulLiteral","src":"1417:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"1411:5:69","nodeType":"YulIdentifier","src":"1411:5:69"},"nativeSrc":"1411:9:69","nodeType":"YulFunctionCall","src":"1411:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"1401:6:69","nodeType":"YulIdentifier","src":"1401:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"1351:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"1384:6:69","nodeType":"YulTypedName","src":"1384:6:69","type":""}],"src":"1351:75:69"},{"body":{"nativeSrc":"1521:28:69","nodeType":"YulBlock","src":"1521:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1538:1:69","nodeType":"YulLiteral","src":"1538:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1541:1:69","nodeType":"YulLiteral","src":"1541:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1531:6:69","nodeType":"YulIdentifier","src":"1531:6:69"},"nativeSrc":"1531:12:69","nodeType":"YulFunctionCall","src":"1531:12:69"},"nativeSrc":"1531:12:69","nodeType":"YulExpressionStatement","src":"1531:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"1432:117:69","nodeType":"YulFunctionDefinition","src":"1432:117:69"},{"body":{"nativeSrc":"1644:28:69","nodeType":"YulBlock","src":"1644:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1661:1:69","nodeType":"YulLiteral","src":"1661:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1664:1:69","nodeType":"YulLiteral","src":"1664:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1654:6:69","nodeType":"YulIdentifier","src":"1654:6:69"},"nativeSrc":"1654:12:69","nodeType":"YulFunctionCall","src":"1654:12:69"},"nativeSrc":"1654:12:69","nodeType":"YulExpressionStatement","src":"1654:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"1555:117:69","nodeType":"YulFunctionDefinition","src":"1555:117:69"},{"body":{"nativeSrc":"1723:32:69","nodeType":"YulBlock","src":"1723:32:69","statements":[{"nativeSrc":"1733:16:69","nodeType":"YulAssignment","src":"1733:16:69","value":{"name":"value","nativeSrc":"1744:5:69","nodeType":"YulIdentifier","src":"1744:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"1733:7:69","nodeType":"YulIdentifier","src":"1733:7:69"}]}]},"name":"cleanup_t_uint256","nativeSrc":"1678:77:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1705:5:69","nodeType":"YulTypedName","src":"1705:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"1715:7:69","nodeType":"YulTypedName","src":"1715:7:69","type":""}],"src":"1678:77:69"},{"body":{"nativeSrc":"1804:79:69","nodeType":"YulBlock","src":"1804:79:69","statements":[{"body":{"nativeSrc":"1861:16:69","nodeType":"YulBlock","src":"1861:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1870:1:69","nodeType":"YulLiteral","src":"1870:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1873:1:69","nodeType":"YulLiteral","src":"1873:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1863:6:69","nodeType":"YulIdentifier","src":"1863:6:69"},"nativeSrc":"1863:12:69","nodeType":"YulFunctionCall","src":"1863:12:69"},"nativeSrc":"1863:12:69","nodeType":"YulExpressionStatement","src":"1863:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1827:5:69","nodeType":"YulIdentifier","src":"1827:5:69"},{"arguments":[{"name":"value","nativeSrc":"1852:5:69","nodeType":"YulIdentifier","src":"1852:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"1834:17:69","nodeType":"YulIdentifier","src":"1834:17:69"},"nativeSrc":"1834:24:69","nodeType":"YulFunctionCall","src":"1834:24:69"}],"functionName":{"name":"eq","nativeSrc":"1824:2:69","nodeType":"YulIdentifier","src":"1824:2:69"},"nativeSrc":"1824:35:69","nodeType":"YulFunctionCall","src":"1824:35:69"}],"functionName":{"name":"iszero","nativeSrc":"1817:6:69","nodeType":"YulIdentifier","src":"1817:6:69"},"nativeSrc":"1817:43:69","nodeType":"YulFunctionCall","src":"1817:43:69"},"nativeSrc":"1814:63:69","nodeType":"YulIf","src":"1814:63:69"}]},"name":"validator_revert_t_uint256","nativeSrc":"1761:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1797:5:69","nodeType":"YulTypedName","src":"1797:5:69","type":""}],"src":"1761:122:69"},{"body":{"nativeSrc":"1941:87:69","nodeType":"YulBlock","src":"1941:87:69","statements":[{"nativeSrc":"1951:29:69","nodeType":"YulAssignment","src":"1951:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"1973:6:69","nodeType":"YulIdentifier","src":"1973:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"1960:12:69","nodeType":"YulIdentifier","src":"1960:12:69"},"nativeSrc":"1960:20:69","nodeType":"YulFunctionCall","src":"1960:20:69"},"variableNames":[{"name":"value","nativeSrc":"1951:5:69","nodeType":"YulIdentifier","src":"1951:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"2016:5:69","nodeType":"YulIdentifier","src":"2016:5:69"}],"functionName":{"name":"validator_revert_t_uint256","nativeSrc":"1989:26:69","nodeType":"YulIdentifier","src":"1989:26:69"},"nativeSrc":"1989:33:69","nodeType":"YulFunctionCall","src":"1989:33:69"},"nativeSrc":"1989:33:69","nodeType":"YulExpressionStatement","src":"1989:33:69"}]},"name":"abi_decode_t_uint256","nativeSrc":"1889:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"1919:6:69","nodeType":"YulTypedName","src":"1919:6:69","type":""},{"name":"end","nativeSrc":"1927:3:69","nodeType":"YulTypedName","src":"1927:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"1935:5:69","nodeType":"YulTypedName","src":"1935:5:69","type":""}],"src":"1889:139:69"},{"body":{"nativeSrc":"2100:263:69","nodeType":"YulBlock","src":"2100:263:69","statements":[{"body":{"nativeSrc":"2146:83:69","nodeType":"YulBlock","src":"2146:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"2148:77:69","nodeType":"YulIdentifier","src":"2148:77:69"},"nativeSrc":"2148:79:69","nodeType":"YulFunctionCall","src":"2148:79:69"},"nativeSrc":"2148:79:69","nodeType":"YulExpressionStatement","src":"2148:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"2121:7:69","nodeType":"YulIdentifier","src":"2121:7:69"},{"name":"headStart","nativeSrc":"2130:9:69","nodeType":"YulIdentifier","src":"2130:9:69"}],"functionName":{"name":"sub","nativeSrc":"2117:3:69","nodeType":"YulIdentifier","src":"2117:3:69"},"nativeSrc":"2117:23:69","nodeType":"YulFunctionCall","src":"2117:23:69"},{"kind":"number","nativeSrc":"2142:2:69","nodeType":"YulLiteral","src":"2142:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"2113:3:69","nodeType":"YulIdentifier","src":"2113:3:69"},"nativeSrc":"2113:32:69","nodeType":"YulFunctionCall","src":"2113:32:69"},"nativeSrc":"2110:119:69","nodeType":"YulIf","src":"2110:119:69"},{"nativeSrc":"2239:117:69","nodeType":"YulBlock","src":"2239:117:69","statements":[{"nativeSrc":"2254:15:69","nodeType":"YulVariableDeclaration","src":"2254:15:69","value":{"kind":"number","nativeSrc":"2268:1:69","nodeType":"YulLiteral","src":"2268:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"2258:6:69","nodeType":"YulTypedName","src":"2258:6:69","type":""}]},{"nativeSrc":"2283:63:69","nodeType":"YulAssignment","src":"2283:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2318:9:69","nodeType":"YulIdentifier","src":"2318:9:69"},{"name":"offset","nativeSrc":"2329:6:69","nodeType":"YulIdentifier","src":"2329:6:69"}],"functionName":{"name":"add","nativeSrc":"2314:3:69","nodeType":"YulIdentifier","src":"2314:3:69"},"nativeSrc":"2314:22:69","nodeType":"YulFunctionCall","src":"2314:22:69"},{"name":"dataEnd","nativeSrc":"2338:7:69","nodeType":"YulIdentifier","src":"2338:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"2293:20:69","nodeType":"YulIdentifier","src":"2293:20:69"},"nativeSrc":"2293:53:69","nodeType":"YulFunctionCall","src":"2293:53:69"},"variableNames":[{"name":"value0","nativeSrc":"2283:6:69","nodeType":"YulIdentifier","src":"2283:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint256","nativeSrc":"2034:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2070:9:69","nodeType":"YulTypedName","src":"2070:9:69","type":""},{"name":"dataEnd","nativeSrc":"2081:7:69","nodeType":"YulTypedName","src":"2081:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"2093:6:69","nodeType":"YulTypedName","src":"2093:6:69","type":""}],"src":"2034:329:69"},{"body":{"nativeSrc":"2414:81:69","nodeType":"YulBlock","src":"2414:81:69","statements":[{"nativeSrc":"2424:65:69","nodeType":"YulAssignment","src":"2424:65:69","value":{"arguments":[{"name":"value","nativeSrc":"2439:5:69","nodeType":"YulIdentifier","src":"2439:5:69"},{"kind":"number","nativeSrc":"2446:42:69","nodeType":"YulLiteral","src":"2446:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"2435:3:69","nodeType":"YulIdentifier","src":"2435:3:69"},"nativeSrc":"2435:54:69","nodeType":"YulFunctionCall","src":"2435:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"2424:7:69","nodeType":"YulIdentifier","src":"2424:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"2369:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2396:5:69","nodeType":"YulTypedName","src":"2396:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"2406:7:69","nodeType":"YulTypedName","src":"2406:7:69","type":""}],"src":"2369:126:69"},{"body":{"nativeSrc":"2546:51:69","nodeType":"YulBlock","src":"2546:51:69","statements":[{"nativeSrc":"2556:35:69","nodeType":"YulAssignment","src":"2556:35:69","value":{"arguments":[{"name":"value","nativeSrc":"2585:5:69","nodeType":"YulIdentifier","src":"2585:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"2567:17:69","nodeType":"YulIdentifier","src":"2567:17:69"},"nativeSrc":"2567:24:69","nodeType":"YulFunctionCall","src":"2567:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"2556:7:69","nodeType":"YulIdentifier","src":"2556:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"2501:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2528:5:69","nodeType":"YulTypedName","src":"2528:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"2538:7:69","nodeType":"YulTypedName","src":"2538:7:69","type":""}],"src":"2501:96:69"},{"body":{"nativeSrc":"2646:79:69","nodeType":"YulBlock","src":"2646:79:69","statements":[{"body":{"nativeSrc":"2703:16:69","nodeType":"YulBlock","src":"2703:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2712:1:69","nodeType":"YulLiteral","src":"2712:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"2715:1:69","nodeType":"YulLiteral","src":"2715:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2705:6:69","nodeType":"YulIdentifier","src":"2705:6:69"},"nativeSrc":"2705:12:69","nodeType":"YulFunctionCall","src":"2705:12:69"},"nativeSrc":"2705:12:69","nodeType":"YulExpressionStatement","src":"2705:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"2669:5:69","nodeType":"YulIdentifier","src":"2669:5:69"},{"arguments":[{"name":"value","nativeSrc":"2694:5:69","nodeType":"YulIdentifier","src":"2694:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"2676:17:69","nodeType":"YulIdentifier","src":"2676:17:69"},"nativeSrc":"2676:24:69","nodeType":"YulFunctionCall","src":"2676:24:69"}],"functionName":{"name":"eq","nativeSrc":"2666:2:69","nodeType":"YulIdentifier","src":"2666:2:69"},"nativeSrc":"2666:35:69","nodeType":"YulFunctionCall","src":"2666:35:69"}],"functionName":{"name":"iszero","nativeSrc":"2659:6:69","nodeType":"YulIdentifier","src":"2659:6:69"},"nativeSrc":"2659:43:69","nodeType":"YulFunctionCall","src":"2659:43:69"},"nativeSrc":"2656:63:69","nodeType":"YulIf","src":"2656:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"2603:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2639:5:69","nodeType":"YulTypedName","src":"2639:5:69","type":""}],"src":"2603:122:69"},{"body":{"nativeSrc":"2783:87:69","nodeType":"YulBlock","src":"2783:87:69","statements":[{"nativeSrc":"2793:29:69","nodeType":"YulAssignment","src":"2793:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"2815:6:69","nodeType":"YulIdentifier","src":"2815:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"2802:12:69","nodeType":"YulIdentifier","src":"2802:12:69"},"nativeSrc":"2802:20:69","nodeType":"YulFunctionCall","src":"2802:20:69"},"variableNames":[{"name":"value","nativeSrc":"2793:5:69","nodeType":"YulIdentifier","src":"2793:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"2858:5:69","nodeType":"YulIdentifier","src":"2858:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"2831:26:69","nodeType":"YulIdentifier","src":"2831:26:69"},"nativeSrc":"2831:33:69","nodeType":"YulFunctionCall","src":"2831:33:69"},"nativeSrc":"2831:33:69","nodeType":"YulExpressionStatement","src":"2831:33:69"}]},"name":"abi_decode_t_address","nativeSrc":"2731:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"2761:6:69","nodeType":"YulTypedName","src":"2761:6:69","type":""},{"name":"end","nativeSrc":"2769:3:69","nodeType":"YulTypedName","src":"2769:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"2777:5:69","nodeType":"YulTypedName","src":"2777:5:69","type":""}],"src":"2731:139:69"},{"body":{"nativeSrc":"2959:391:69","nodeType":"YulBlock","src":"2959:391:69","statements":[{"body":{"nativeSrc":"3005:83:69","nodeType":"YulBlock","src":"3005:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"3007:77:69","nodeType":"YulIdentifier","src":"3007:77:69"},"nativeSrc":"3007:79:69","nodeType":"YulFunctionCall","src":"3007:79:69"},"nativeSrc":"3007:79:69","nodeType":"YulExpressionStatement","src":"3007:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"2980:7:69","nodeType":"YulIdentifier","src":"2980:7:69"},{"name":"headStart","nativeSrc":"2989:9:69","nodeType":"YulIdentifier","src":"2989:9:69"}],"functionName":{"name":"sub","nativeSrc":"2976:3:69","nodeType":"YulIdentifier","src":"2976:3:69"},"nativeSrc":"2976:23:69","nodeType":"YulFunctionCall","src":"2976:23:69"},{"kind":"number","nativeSrc":"3001:2:69","nodeType":"YulLiteral","src":"3001:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"2972:3:69","nodeType":"YulIdentifier","src":"2972:3:69"},"nativeSrc":"2972:32:69","nodeType":"YulFunctionCall","src":"2972:32:69"},"nativeSrc":"2969:119:69","nodeType":"YulIf","src":"2969:119:69"},{"nativeSrc":"3098:117:69","nodeType":"YulBlock","src":"3098:117:69","statements":[{"nativeSrc":"3113:15:69","nodeType":"YulVariableDeclaration","src":"3113:15:69","value":{"kind":"number","nativeSrc":"3127:1:69","nodeType":"YulLiteral","src":"3127:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"3117:6:69","nodeType":"YulTypedName","src":"3117:6:69","type":""}]},{"nativeSrc":"3142:63:69","nodeType":"YulAssignment","src":"3142:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3177:9:69","nodeType":"YulIdentifier","src":"3177:9:69"},{"name":"offset","nativeSrc":"3188:6:69","nodeType":"YulIdentifier","src":"3188:6:69"}],"functionName":{"name":"add","nativeSrc":"3173:3:69","nodeType":"YulIdentifier","src":"3173:3:69"},"nativeSrc":"3173:22:69","nodeType":"YulFunctionCall","src":"3173:22:69"},{"name":"dataEnd","nativeSrc":"3197:7:69","nodeType":"YulIdentifier","src":"3197:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"3152:20:69","nodeType":"YulIdentifier","src":"3152:20:69"},"nativeSrc":"3152:53:69","nodeType":"YulFunctionCall","src":"3152:53:69"},"variableNames":[{"name":"value0","nativeSrc":"3142:6:69","nodeType":"YulIdentifier","src":"3142:6:69"}]}]},{"nativeSrc":"3225:118:69","nodeType":"YulBlock","src":"3225:118:69","statements":[{"nativeSrc":"3240:16:69","nodeType":"YulVariableDeclaration","src":"3240:16:69","value":{"kind":"number","nativeSrc":"3254:2:69","nodeType":"YulLiteral","src":"3254:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"3244:6:69","nodeType":"YulTypedName","src":"3244:6:69","type":""}]},{"nativeSrc":"3270:63:69","nodeType":"YulAssignment","src":"3270:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3305:9:69","nodeType":"YulIdentifier","src":"3305:9:69"},{"name":"offset","nativeSrc":"3316:6:69","nodeType":"YulIdentifier","src":"3316:6:69"}],"functionName":{"name":"add","nativeSrc":"3301:3:69","nodeType":"YulIdentifier","src":"3301:3:69"},"nativeSrc":"3301:22:69","nodeType":"YulFunctionCall","src":"3301:22:69"},{"name":"dataEnd","nativeSrc":"3325:7:69","nodeType":"YulIdentifier","src":"3325:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"3280:20:69","nodeType":"YulIdentifier","src":"3280:20:69"},"nativeSrc":"3280:53:69","nodeType":"YulFunctionCall","src":"3280:53:69"},"variableNames":[{"name":"value1","nativeSrc":"3270:6:69","nodeType":"YulIdentifier","src":"3270:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nativeSrc":"2876:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2921:9:69","nodeType":"YulTypedName","src":"2921:9:69","type":""},{"name":"dataEnd","nativeSrc":"2932:7:69","nodeType":"YulTypedName","src":"2932:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"2944:6:69","nodeType":"YulTypedName","src":"2944:6:69","type":""},{"name":"value1","nativeSrc":"2952:6:69","nodeType":"YulTypedName","src":"2952:6:69","type":""}],"src":"2876:474:69"},{"body":{"nativeSrc":"3398:48:69","nodeType":"YulBlock","src":"3398:48:69","statements":[{"nativeSrc":"3408:32:69","nodeType":"YulAssignment","src":"3408:32:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"3433:5:69","nodeType":"YulIdentifier","src":"3433:5:69"}],"functionName":{"name":"iszero","nativeSrc":"3426:6:69","nodeType":"YulIdentifier","src":"3426:6:69"},"nativeSrc":"3426:13:69","nodeType":"YulFunctionCall","src":"3426:13:69"}],"functionName":{"name":"iszero","nativeSrc":"3419:6:69","nodeType":"YulIdentifier","src":"3419:6:69"},"nativeSrc":"3419:21:69","nodeType":"YulFunctionCall","src":"3419:21:69"},"variableNames":[{"name":"cleaned","nativeSrc":"3408:7:69","nodeType":"YulIdentifier","src":"3408:7:69"}]}]},"name":"cleanup_t_bool","nativeSrc":"3356:90:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3380:5:69","nodeType":"YulTypedName","src":"3380:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"3390:7:69","nodeType":"YulTypedName","src":"3390:7:69","type":""}],"src":"3356:90:69"},{"body":{"nativeSrc":"3511:50:69","nodeType":"YulBlock","src":"3511:50:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"3528:3:69","nodeType":"YulIdentifier","src":"3528:3:69"},{"arguments":[{"name":"value","nativeSrc":"3548:5:69","nodeType":"YulIdentifier","src":"3548:5:69"}],"functionName":{"name":"cleanup_t_bool","nativeSrc":"3533:14:69","nodeType":"YulIdentifier","src":"3533:14:69"},"nativeSrc":"3533:21:69","nodeType":"YulFunctionCall","src":"3533:21:69"}],"functionName":{"name":"mstore","nativeSrc":"3521:6:69","nodeType":"YulIdentifier","src":"3521:6:69"},"nativeSrc":"3521:34:69","nodeType":"YulFunctionCall","src":"3521:34:69"},"nativeSrc":"3521:34:69","nodeType":"YulExpressionStatement","src":"3521:34:69"}]},"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"3452:109:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3499:5:69","nodeType":"YulTypedName","src":"3499:5:69","type":""},{"name":"pos","nativeSrc":"3506:3:69","nodeType":"YulTypedName","src":"3506:3:69","type":""}],"src":"3452:109:69"},{"body":{"nativeSrc":"3659:118:69","nodeType":"YulBlock","src":"3659:118:69","statements":[{"nativeSrc":"3669:26:69","nodeType":"YulAssignment","src":"3669:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"3681:9:69","nodeType":"YulIdentifier","src":"3681:9:69"},{"kind":"number","nativeSrc":"3692:2:69","nodeType":"YulLiteral","src":"3692:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3677:3:69","nodeType":"YulIdentifier","src":"3677:3:69"},"nativeSrc":"3677:18:69","nodeType":"YulFunctionCall","src":"3677:18:69"},"variableNames":[{"name":"tail","nativeSrc":"3669:4:69","nodeType":"YulIdentifier","src":"3669:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"3743:6:69","nodeType":"YulIdentifier","src":"3743:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"3756:9:69","nodeType":"YulIdentifier","src":"3756:9:69"},{"kind":"number","nativeSrc":"3767:1:69","nodeType":"YulLiteral","src":"3767:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"3752:3:69","nodeType":"YulIdentifier","src":"3752:3:69"},"nativeSrc":"3752:17:69","nodeType":"YulFunctionCall","src":"3752:17:69"}],"functionName":{"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"3705:37:69","nodeType":"YulIdentifier","src":"3705:37:69"},"nativeSrc":"3705:65:69","nodeType":"YulFunctionCall","src":"3705:65:69"},"nativeSrc":"3705:65:69","nodeType":"YulExpressionStatement","src":"3705:65:69"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nativeSrc":"3567:210:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3631:9:69","nodeType":"YulTypedName","src":"3631:9:69","type":""},{"name":"value0","nativeSrc":"3643:6:69","nodeType":"YulTypedName","src":"3643:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3654:4:69","nodeType":"YulTypedName","src":"3654:4:69","type":""}],"src":"3567:210:69"},{"body":{"nativeSrc":"3849:263:69","nodeType":"YulBlock","src":"3849:263:69","statements":[{"body":{"nativeSrc":"3895:83:69","nodeType":"YulBlock","src":"3895:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"3897:77:69","nodeType":"YulIdentifier","src":"3897:77:69"},"nativeSrc":"3897:79:69","nodeType":"YulFunctionCall","src":"3897:79:69"},"nativeSrc":"3897:79:69","nodeType":"YulExpressionStatement","src":"3897:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"3870:7:69","nodeType":"YulIdentifier","src":"3870:7:69"},{"name":"headStart","nativeSrc":"3879:9:69","nodeType":"YulIdentifier","src":"3879:9:69"}],"functionName":{"name":"sub","nativeSrc":"3866:3:69","nodeType":"YulIdentifier","src":"3866:3:69"},"nativeSrc":"3866:23:69","nodeType":"YulFunctionCall","src":"3866:23:69"},{"kind":"number","nativeSrc":"3891:2:69","nodeType":"YulLiteral","src":"3891:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"3862:3:69","nodeType":"YulIdentifier","src":"3862:3:69"},"nativeSrc":"3862:32:69","nodeType":"YulFunctionCall","src":"3862:32:69"},"nativeSrc":"3859:119:69","nodeType":"YulIf","src":"3859:119:69"},{"nativeSrc":"3988:117:69","nodeType":"YulBlock","src":"3988:117:69","statements":[{"nativeSrc":"4003:15:69","nodeType":"YulVariableDeclaration","src":"4003:15:69","value":{"kind":"number","nativeSrc":"4017:1:69","nodeType":"YulLiteral","src":"4017:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"4007:6:69","nodeType":"YulTypedName","src":"4007:6:69","type":""}]},{"nativeSrc":"4032:63:69","nodeType":"YulAssignment","src":"4032:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4067:9:69","nodeType":"YulIdentifier","src":"4067:9:69"},{"name":"offset","nativeSrc":"4078:6:69","nodeType":"YulIdentifier","src":"4078:6:69"}],"functionName":{"name":"add","nativeSrc":"4063:3:69","nodeType":"YulIdentifier","src":"4063:3:69"},"nativeSrc":"4063:22:69","nodeType":"YulFunctionCall","src":"4063:22:69"},{"name":"dataEnd","nativeSrc":"4087:7:69","nodeType":"YulIdentifier","src":"4087:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"4042:20:69","nodeType":"YulIdentifier","src":"4042:20:69"},"nativeSrc":"4042:53:69","nodeType":"YulFunctionCall","src":"4042:53:69"},"variableNames":[{"name":"value0","nativeSrc":"4032:6:69","nodeType":"YulIdentifier","src":"4032:6:69"}]}]}]},"name":"abi_decode_tuple_t_address","nativeSrc":"3783:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3819:9:69","nodeType":"YulTypedName","src":"3819:9:69","type":""},{"name":"dataEnd","nativeSrc":"3830:7:69","nodeType":"YulTypedName","src":"3830:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"3842:6:69","nodeType":"YulTypedName","src":"3842:6:69","type":""}],"src":"3783:329:69"},{"body":{"nativeSrc":"4183:53:69","nodeType":"YulBlock","src":"4183:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"4200:3:69","nodeType":"YulIdentifier","src":"4200:3:69"},{"arguments":[{"name":"value","nativeSrc":"4223:5:69","nodeType":"YulIdentifier","src":"4223:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"4205:17:69","nodeType":"YulIdentifier","src":"4205:17:69"},"nativeSrc":"4205:24:69","nodeType":"YulFunctionCall","src":"4205:24:69"}],"functionName":{"name":"mstore","nativeSrc":"4193:6:69","nodeType":"YulIdentifier","src":"4193:6:69"},"nativeSrc":"4193:37:69","nodeType":"YulFunctionCall","src":"4193:37:69"},"nativeSrc":"4193:37:69","nodeType":"YulExpressionStatement","src":"4193:37:69"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"4118:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4171:5:69","nodeType":"YulTypedName","src":"4171:5:69","type":""},{"name":"pos","nativeSrc":"4178:3:69","nodeType":"YulTypedName","src":"4178:3:69","type":""}],"src":"4118:118:69"},{"body":{"nativeSrc":"4340:124:69","nodeType":"YulBlock","src":"4340:124:69","statements":[{"nativeSrc":"4350:26:69","nodeType":"YulAssignment","src":"4350:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"4362:9:69","nodeType":"YulIdentifier","src":"4362:9:69"},{"kind":"number","nativeSrc":"4373:2:69","nodeType":"YulLiteral","src":"4373:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4358:3:69","nodeType":"YulIdentifier","src":"4358:3:69"},"nativeSrc":"4358:18:69","nodeType":"YulFunctionCall","src":"4358:18:69"},"variableNames":[{"name":"tail","nativeSrc":"4350:4:69","nodeType":"YulIdentifier","src":"4350:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"4430:6:69","nodeType":"YulIdentifier","src":"4430:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"4443:9:69","nodeType":"YulIdentifier","src":"4443:9:69"},{"kind":"number","nativeSrc":"4454:1:69","nodeType":"YulLiteral","src":"4454:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4439:3:69","nodeType":"YulIdentifier","src":"4439:3:69"},"nativeSrc":"4439:17:69","nodeType":"YulFunctionCall","src":"4439:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"4386:43:69","nodeType":"YulIdentifier","src":"4386:43:69"},"nativeSrc":"4386:71:69","nodeType":"YulFunctionCall","src":"4386:71:69"},"nativeSrc":"4386:71:69","nodeType":"YulExpressionStatement","src":"4386:71:69"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nativeSrc":"4242:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4312:9:69","nodeType":"YulTypedName","src":"4312:9:69","type":""},{"name":"value0","nativeSrc":"4324:6:69","nodeType":"YulTypedName","src":"4324:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4335:4:69","nodeType":"YulTypedName","src":"4335:4:69","type":""}],"src":"4242:222:69"},{"body":{"nativeSrc":"4523:51:69","nodeType":"YulBlock","src":"4523:51:69","statements":[{"nativeSrc":"4533:35:69","nodeType":"YulAssignment","src":"4533:35:69","value":{"arguments":[{"name":"value","nativeSrc":"4562:5:69","nodeType":"YulIdentifier","src":"4562:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"4544:17:69","nodeType":"YulIdentifier","src":"4544:17:69"},"nativeSrc":"4544:24:69","nodeType":"YulFunctionCall","src":"4544:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"4533:7:69","nodeType":"YulIdentifier","src":"4533:7:69"}]}]},"name":"cleanup_t_address_payable","nativeSrc":"4470:104:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4505:5:69","nodeType":"YulTypedName","src":"4505:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"4515:7:69","nodeType":"YulTypedName","src":"4515:7:69","type":""}],"src":"4470:104:69"},{"body":{"nativeSrc":"4631:87:69","nodeType":"YulBlock","src":"4631:87:69","statements":[{"body":{"nativeSrc":"4696:16:69","nodeType":"YulBlock","src":"4696:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4705:1:69","nodeType":"YulLiteral","src":"4705:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"4708:1:69","nodeType":"YulLiteral","src":"4708:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"4698:6:69","nodeType":"YulIdentifier","src":"4698:6:69"},"nativeSrc":"4698:12:69","nodeType":"YulFunctionCall","src":"4698:12:69"},"nativeSrc":"4698:12:69","nodeType":"YulExpressionStatement","src":"4698:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"4654:5:69","nodeType":"YulIdentifier","src":"4654:5:69"},{"arguments":[{"name":"value","nativeSrc":"4687:5:69","nodeType":"YulIdentifier","src":"4687:5:69"}],"functionName":{"name":"cleanup_t_address_payable","nativeSrc":"4661:25:69","nodeType":"YulIdentifier","src":"4661:25:69"},"nativeSrc":"4661:32:69","nodeType":"YulFunctionCall","src":"4661:32:69"}],"functionName":{"name":"eq","nativeSrc":"4651:2:69","nodeType":"YulIdentifier","src":"4651:2:69"},"nativeSrc":"4651:43:69","nodeType":"YulFunctionCall","src":"4651:43:69"}],"functionName":{"name":"iszero","nativeSrc":"4644:6:69","nodeType":"YulIdentifier","src":"4644:6:69"},"nativeSrc":"4644:51:69","nodeType":"YulFunctionCall","src":"4644:51:69"},"nativeSrc":"4641:71:69","nodeType":"YulIf","src":"4641:71:69"}]},"name":"validator_revert_t_address_payable","nativeSrc":"4580:138:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4624:5:69","nodeType":"YulTypedName","src":"4624:5:69","type":""}],"src":"4580:138:69"},{"body":{"nativeSrc":"4784:95:69","nodeType":"YulBlock","src":"4784:95:69","statements":[{"nativeSrc":"4794:29:69","nodeType":"YulAssignment","src":"4794:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"4816:6:69","nodeType":"YulIdentifier","src":"4816:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"4803:12:69","nodeType":"YulIdentifier","src":"4803:12:69"},"nativeSrc":"4803:20:69","nodeType":"YulFunctionCall","src":"4803:20:69"},"variableNames":[{"name":"value","nativeSrc":"4794:5:69","nodeType":"YulIdentifier","src":"4794:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"4867:5:69","nodeType":"YulIdentifier","src":"4867:5:69"}],"functionName":{"name":"validator_revert_t_address_payable","nativeSrc":"4832:34:69","nodeType":"YulIdentifier","src":"4832:34:69"},"nativeSrc":"4832:41:69","nodeType":"YulFunctionCall","src":"4832:41:69"},"nativeSrc":"4832:41:69","nodeType":"YulExpressionStatement","src":"4832:41:69"}]},"name":"abi_decode_t_address_payable","nativeSrc":"4724:155:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"4762:6:69","nodeType":"YulTypedName","src":"4762:6:69","type":""},{"name":"end","nativeSrc":"4770:3:69","nodeType":"YulTypedName","src":"4770:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"4778:5:69","nodeType":"YulTypedName","src":"4778:5:69","type":""}],"src":"4724:155:69"},{"body":{"nativeSrc":"4959:271:69","nodeType":"YulBlock","src":"4959:271:69","statements":[{"body":{"nativeSrc":"5005:83:69","nodeType":"YulBlock","src":"5005:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"5007:77:69","nodeType":"YulIdentifier","src":"5007:77:69"},"nativeSrc":"5007:79:69","nodeType":"YulFunctionCall","src":"5007:79:69"},"nativeSrc":"5007:79:69","nodeType":"YulExpressionStatement","src":"5007:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"4980:7:69","nodeType":"YulIdentifier","src":"4980:7:69"},{"name":"headStart","nativeSrc":"4989:9:69","nodeType":"YulIdentifier","src":"4989:9:69"}],"functionName":{"name":"sub","nativeSrc":"4976:3:69","nodeType":"YulIdentifier","src":"4976:3:69"},"nativeSrc":"4976:23:69","nodeType":"YulFunctionCall","src":"4976:23:69"},{"kind":"number","nativeSrc":"5001:2:69","nodeType":"YulLiteral","src":"5001:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"4972:3:69","nodeType":"YulIdentifier","src":"4972:3:69"},"nativeSrc":"4972:32:69","nodeType":"YulFunctionCall","src":"4972:32:69"},"nativeSrc":"4969:119:69","nodeType":"YulIf","src":"4969:119:69"},{"nativeSrc":"5098:125:69","nodeType":"YulBlock","src":"5098:125:69","statements":[{"nativeSrc":"5113:15:69","nodeType":"YulVariableDeclaration","src":"5113:15:69","value":{"kind":"number","nativeSrc":"5127:1:69","nodeType":"YulLiteral","src":"5127:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"5117:6:69","nodeType":"YulTypedName","src":"5117:6:69","type":""}]},{"nativeSrc":"5142:71:69","nodeType":"YulAssignment","src":"5142:71:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5185:9:69","nodeType":"YulIdentifier","src":"5185:9:69"},{"name":"offset","nativeSrc":"5196:6:69","nodeType":"YulIdentifier","src":"5196:6:69"}],"functionName":{"name":"add","nativeSrc":"5181:3:69","nodeType":"YulIdentifier","src":"5181:3:69"},"nativeSrc":"5181:22:69","nodeType":"YulFunctionCall","src":"5181:22:69"},{"name":"dataEnd","nativeSrc":"5205:7:69","nodeType":"YulIdentifier","src":"5205:7:69"}],"functionName":{"name":"abi_decode_t_address_payable","nativeSrc":"5152:28:69","nodeType":"YulIdentifier","src":"5152:28:69"},"nativeSrc":"5152:61:69","nodeType":"YulFunctionCall","src":"5152:61:69"},"variableNames":[{"name":"value0","nativeSrc":"5142:6:69","nodeType":"YulIdentifier","src":"5142:6:69"}]}]}]},"name":"abi_decode_tuple_t_address_payable","nativeSrc":"4885:345:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4929:9:69","nodeType":"YulTypedName","src":"4929:9:69","type":""},{"name":"dataEnd","nativeSrc":"4940:7:69","nodeType":"YulTypedName","src":"4940:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"4952:6:69","nodeType":"YulTypedName","src":"4952:6:69","type":""}],"src":"4885:345:69"},{"body":{"nativeSrc":"5301:53:69","nodeType":"YulBlock","src":"5301:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"5318:3:69","nodeType":"YulIdentifier","src":"5318:3:69"},{"arguments":[{"name":"value","nativeSrc":"5341:5:69","nodeType":"YulIdentifier","src":"5341:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"5323:17:69","nodeType":"YulIdentifier","src":"5323:17:69"},"nativeSrc":"5323:24:69","nodeType":"YulFunctionCall","src":"5323:24:69"}],"functionName":{"name":"mstore","nativeSrc":"5311:6:69","nodeType":"YulIdentifier","src":"5311:6:69"},"nativeSrc":"5311:37:69","nodeType":"YulFunctionCall","src":"5311:37:69"},"nativeSrc":"5311:37:69","nodeType":"YulExpressionStatement","src":"5311:37:69"}]},"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"5236:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"5289:5:69","nodeType":"YulTypedName","src":"5289:5:69","type":""},{"name":"pos","nativeSrc":"5296:3:69","nodeType":"YulTypedName","src":"5296:3:69","type":""}],"src":"5236:118:69"},{"body":{"nativeSrc":"5458:124:69","nodeType":"YulBlock","src":"5458:124:69","statements":[{"nativeSrc":"5468:26:69","nodeType":"YulAssignment","src":"5468:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"5480:9:69","nodeType":"YulIdentifier","src":"5480:9:69"},{"kind":"number","nativeSrc":"5491:2:69","nodeType":"YulLiteral","src":"5491:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5476:3:69","nodeType":"YulIdentifier","src":"5476:3:69"},"nativeSrc":"5476:18:69","nodeType":"YulFunctionCall","src":"5476:18:69"},"variableNames":[{"name":"tail","nativeSrc":"5468:4:69","nodeType":"YulIdentifier","src":"5468:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"5548:6:69","nodeType":"YulIdentifier","src":"5548:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"5561:9:69","nodeType":"YulIdentifier","src":"5561:9:69"},{"kind":"number","nativeSrc":"5572:1:69","nodeType":"YulLiteral","src":"5572:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5557:3:69","nodeType":"YulIdentifier","src":"5557:3:69"},"nativeSrc":"5557:17:69","nodeType":"YulFunctionCall","src":"5557:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"5504:43:69","nodeType":"YulIdentifier","src":"5504:43:69"},"nativeSrc":"5504:71:69","nodeType":"YulFunctionCall","src":"5504:71:69"},"nativeSrc":"5504:71:69","nodeType":"YulExpressionStatement","src":"5504:71:69"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"5360:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5430:9:69","nodeType":"YulTypedName","src":"5430:9:69","type":""},{"name":"value0","nativeSrc":"5442:6:69","nodeType":"YulTypedName","src":"5442:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"5453:4:69","nodeType":"YulTypedName","src":"5453:4:69","type":""}],"src":"5360:222:69"},{"body":{"nativeSrc":"5659:51:69","nodeType":"YulBlock","src":"5659:51:69","statements":[{"nativeSrc":"5669:35:69","nodeType":"YulAssignment","src":"5669:35:69","value":{"arguments":[{"name":"value","nativeSrc":"5698:5:69","nodeType":"YulIdentifier","src":"5698:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"5680:17:69","nodeType":"YulIdentifier","src":"5680:17:69"},"nativeSrc":"5680:24:69","nodeType":"YulFunctionCall","src":"5680:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"5669:7:69","nodeType":"YulIdentifier","src":"5669:7:69"}]}]},"name":"cleanup_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"5588:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"5641:5:69","nodeType":"YulTypedName","src":"5641:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"5651:7:69","nodeType":"YulTypedName","src":"5651:7:69","type":""}],"src":"5588:122:69"},{"body":{"nativeSrc":"5785:105:69","nodeType":"YulBlock","src":"5785:105:69","statements":[{"body":{"nativeSrc":"5868:16:69","nodeType":"YulBlock","src":"5868:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"5877:1:69","nodeType":"YulLiteral","src":"5877:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"5880:1:69","nodeType":"YulLiteral","src":"5880:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"5870:6:69","nodeType":"YulIdentifier","src":"5870:6:69"},"nativeSrc":"5870:12:69","nodeType":"YulFunctionCall","src":"5870:12:69"},"nativeSrc":"5870:12:69","nodeType":"YulExpressionStatement","src":"5870:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"5808:5:69","nodeType":"YulIdentifier","src":"5808:5:69"},{"arguments":[{"name":"value","nativeSrc":"5859:5:69","nodeType":"YulIdentifier","src":"5859:5:69"}],"functionName":{"name":"cleanup_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"5815:43:69","nodeType":"YulIdentifier","src":"5815:43:69"},"nativeSrc":"5815:50:69","nodeType":"YulFunctionCall","src":"5815:50:69"}],"functionName":{"name":"eq","nativeSrc":"5805:2:69","nodeType":"YulIdentifier","src":"5805:2:69"},"nativeSrc":"5805:61:69","nodeType":"YulFunctionCall","src":"5805:61:69"}],"functionName":{"name":"iszero","nativeSrc":"5798:6:69","nodeType":"YulIdentifier","src":"5798:6:69"},"nativeSrc":"5798:69:69","nodeType":"YulFunctionCall","src":"5798:69:69"},"nativeSrc":"5795:89:69","nodeType":"YulIf","src":"5795:89:69"}]},"name":"validator_revert_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"5716:174:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"5778:5:69","nodeType":"YulTypedName","src":"5778:5:69","type":""}],"src":"5716:174:69"},{"body":{"nativeSrc":"5974:113:69","nodeType":"YulBlock","src":"5974:113:69","statements":[{"nativeSrc":"5984:29:69","nodeType":"YulAssignment","src":"5984:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"6006:6:69","nodeType":"YulIdentifier","src":"6006:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"5993:12:69","nodeType":"YulIdentifier","src":"5993:12:69"},"nativeSrc":"5993:20:69","nodeType":"YulFunctionCall","src":"5993:20:69"},"variableNames":[{"name":"value","nativeSrc":"5984:5:69","nodeType":"YulIdentifier","src":"5984:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"6075:5:69","nodeType":"YulIdentifier","src":"6075:5:69"}],"functionName":{"name":"validator_revert_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"6022:52:69","nodeType":"YulIdentifier","src":"6022:52:69"},"nativeSrc":"6022:59:69","nodeType":"YulFunctionCall","src":"6022:59:69"},"nativeSrc":"6022:59:69","nodeType":"YulExpressionStatement","src":"6022:59:69"}]},"name":"abi_decode_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"5896:191:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"5952:6:69","nodeType":"YulTypedName","src":"5952:6:69","type":""},{"name":"end","nativeSrc":"5960:3:69","nodeType":"YulTypedName","src":"5960:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"5968:5:69","nodeType":"YulTypedName","src":"5968:5:69","type":""}],"src":"5896:191:69"},{"body":{"nativeSrc":"6185:289:69","nodeType":"YulBlock","src":"6185:289:69","statements":[{"body":{"nativeSrc":"6231:83:69","nodeType":"YulBlock","src":"6231:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"6233:77:69","nodeType":"YulIdentifier","src":"6233:77:69"},"nativeSrc":"6233:79:69","nodeType":"YulFunctionCall","src":"6233:79:69"},"nativeSrc":"6233:79:69","nodeType":"YulExpressionStatement","src":"6233:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"6206:7:69","nodeType":"YulIdentifier","src":"6206:7:69"},{"name":"headStart","nativeSrc":"6215:9:69","nodeType":"YulIdentifier","src":"6215:9:69"}],"functionName":{"name":"sub","nativeSrc":"6202:3:69","nodeType":"YulIdentifier","src":"6202:3:69"},"nativeSrc":"6202:23:69","nodeType":"YulFunctionCall","src":"6202:23:69"},{"kind":"number","nativeSrc":"6227:2:69","nodeType":"YulLiteral","src":"6227:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"6198:3:69","nodeType":"YulIdentifier","src":"6198:3:69"},"nativeSrc":"6198:32:69","nodeType":"YulFunctionCall","src":"6198:32:69"},"nativeSrc":"6195:119:69","nodeType":"YulIf","src":"6195:119:69"},{"nativeSrc":"6324:143:69","nodeType":"YulBlock","src":"6324:143:69","statements":[{"nativeSrc":"6339:15:69","nodeType":"YulVariableDeclaration","src":"6339:15:69","value":{"kind":"number","nativeSrc":"6353:1:69","nodeType":"YulLiteral","src":"6353:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"6343:6:69","nodeType":"YulTypedName","src":"6343:6:69","type":""}]},{"nativeSrc":"6368:89:69","nodeType":"YulAssignment","src":"6368:89:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6429:9:69","nodeType":"YulIdentifier","src":"6429:9:69"},{"name":"offset","nativeSrc":"6440:6:69","nodeType":"YulIdentifier","src":"6440:6:69"}],"functionName":{"name":"add","nativeSrc":"6425:3:69","nodeType":"YulIdentifier","src":"6425:3:69"},"nativeSrc":"6425:22:69","nodeType":"YulFunctionCall","src":"6425:22:69"},{"name":"dataEnd","nativeSrc":"6449:7:69","nodeType":"YulIdentifier","src":"6449:7:69"}],"functionName":{"name":"abi_decode_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"6378:46:69","nodeType":"YulIdentifier","src":"6378:46:69"},"nativeSrc":"6378:79:69","nodeType":"YulFunctionCall","src":"6378:79:69"},"variableNames":[{"name":"value0","nativeSrc":"6368:6:69","nodeType":"YulIdentifier","src":"6368:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"6093:381:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6155:9:69","nodeType":"YulTypedName","src":"6155:9:69","type":""},{"name":"dataEnd","nativeSrc":"6166:7:69","nodeType":"YulTypedName","src":"6166:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"6178:6:69","nodeType":"YulTypedName","src":"6178:6:69","type":""}],"src":"6093:381:69"},{"body":{"nativeSrc":"6580:519:69","nodeType":"YulBlock","src":"6580:519:69","statements":[{"body":{"nativeSrc":"6626:83:69","nodeType":"YulBlock","src":"6626:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"6628:77:69","nodeType":"YulIdentifier","src":"6628:77:69"},"nativeSrc":"6628:79:69","nodeType":"YulFunctionCall","src":"6628:79:69"},"nativeSrc":"6628:79:69","nodeType":"YulExpressionStatement","src":"6628:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"6601:7:69","nodeType":"YulIdentifier","src":"6601:7:69"},{"name":"headStart","nativeSrc":"6610:9:69","nodeType":"YulIdentifier","src":"6610:9:69"}],"functionName":{"name":"sub","nativeSrc":"6597:3:69","nodeType":"YulIdentifier","src":"6597:3:69"},"nativeSrc":"6597:23:69","nodeType":"YulFunctionCall","src":"6597:23:69"},{"kind":"number","nativeSrc":"6622:2:69","nodeType":"YulLiteral","src":"6622:2:69","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"6593:3:69","nodeType":"YulIdentifier","src":"6593:3:69"},"nativeSrc":"6593:32:69","nodeType":"YulFunctionCall","src":"6593:32:69"},"nativeSrc":"6590:119:69","nodeType":"YulIf","src":"6590:119:69"},{"nativeSrc":"6719:117:69","nodeType":"YulBlock","src":"6719:117:69","statements":[{"nativeSrc":"6734:15:69","nodeType":"YulVariableDeclaration","src":"6734:15:69","value":{"kind":"number","nativeSrc":"6748:1:69","nodeType":"YulLiteral","src":"6748:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"6738:6:69","nodeType":"YulTypedName","src":"6738:6:69","type":""}]},{"nativeSrc":"6763:63:69","nodeType":"YulAssignment","src":"6763:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6798:9:69","nodeType":"YulIdentifier","src":"6798:9:69"},{"name":"offset","nativeSrc":"6809:6:69","nodeType":"YulIdentifier","src":"6809:6:69"}],"functionName":{"name":"add","nativeSrc":"6794:3:69","nodeType":"YulIdentifier","src":"6794:3:69"},"nativeSrc":"6794:22:69","nodeType":"YulFunctionCall","src":"6794:22:69"},{"name":"dataEnd","nativeSrc":"6818:7:69","nodeType":"YulIdentifier","src":"6818:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"6773:20:69","nodeType":"YulIdentifier","src":"6773:20:69"},"nativeSrc":"6773:53:69","nodeType":"YulFunctionCall","src":"6773:53:69"},"variableNames":[{"name":"value0","nativeSrc":"6763:6:69","nodeType":"YulIdentifier","src":"6763:6:69"}]}]},{"nativeSrc":"6846:118:69","nodeType":"YulBlock","src":"6846:118:69","statements":[{"nativeSrc":"6861:16:69","nodeType":"YulVariableDeclaration","src":"6861:16:69","value":{"kind":"number","nativeSrc":"6875:2:69","nodeType":"YulLiteral","src":"6875:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"6865:6:69","nodeType":"YulTypedName","src":"6865:6:69","type":""}]},{"nativeSrc":"6891:63:69","nodeType":"YulAssignment","src":"6891:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6926:9:69","nodeType":"YulIdentifier","src":"6926:9:69"},{"name":"offset","nativeSrc":"6937:6:69","nodeType":"YulIdentifier","src":"6937:6:69"}],"functionName":{"name":"add","nativeSrc":"6922:3:69","nodeType":"YulIdentifier","src":"6922:3:69"},"nativeSrc":"6922:22:69","nodeType":"YulFunctionCall","src":"6922:22:69"},{"name":"dataEnd","nativeSrc":"6946:7:69","nodeType":"YulIdentifier","src":"6946:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"6901:20:69","nodeType":"YulIdentifier","src":"6901:20:69"},"nativeSrc":"6901:53:69","nodeType":"YulFunctionCall","src":"6901:53:69"},"variableNames":[{"name":"value1","nativeSrc":"6891:6:69","nodeType":"YulIdentifier","src":"6891:6:69"}]}]},{"nativeSrc":"6974:118:69","nodeType":"YulBlock","src":"6974:118:69","statements":[{"nativeSrc":"6989:16:69","nodeType":"YulVariableDeclaration","src":"6989:16:69","value":{"kind":"number","nativeSrc":"7003:2:69","nodeType":"YulLiteral","src":"7003:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"6993:6:69","nodeType":"YulTypedName","src":"6993:6:69","type":""}]},{"nativeSrc":"7019:63:69","nodeType":"YulAssignment","src":"7019:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7054:9:69","nodeType":"YulIdentifier","src":"7054:9:69"},{"name":"offset","nativeSrc":"7065:6:69","nodeType":"YulIdentifier","src":"7065:6:69"}],"functionName":{"name":"add","nativeSrc":"7050:3:69","nodeType":"YulIdentifier","src":"7050:3:69"},"nativeSrc":"7050:22:69","nodeType":"YulFunctionCall","src":"7050:22:69"},{"name":"dataEnd","nativeSrc":"7074:7:69","nodeType":"YulIdentifier","src":"7074:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"7029:20:69","nodeType":"YulIdentifier","src":"7029:20:69"},"nativeSrc":"7029:53:69","nodeType":"YulFunctionCall","src":"7029:53:69"},"variableNames":[{"name":"value2","nativeSrc":"7019:6:69","nodeType":"YulIdentifier","src":"7019:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nativeSrc":"6480:619:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6534:9:69","nodeType":"YulTypedName","src":"6534:9:69","type":""},{"name":"dataEnd","nativeSrc":"6545:7:69","nodeType":"YulTypedName","src":"6545:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"6557:6:69","nodeType":"YulTypedName","src":"6557:6:69","type":""},{"name":"value1","nativeSrc":"6565:6:69","nodeType":"YulTypedName","src":"6565:6:69","type":""},{"name":"value2","nativeSrc":"6573:6:69","nodeType":"YulTypedName","src":"6573:6:69","type":""}],"src":"6480:619:69"},{"body":{"nativeSrc":"7148:43:69","nodeType":"YulBlock","src":"7148:43:69","statements":[{"nativeSrc":"7158:27:69","nodeType":"YulAssignment","src":"7158:27:69","value":{"arguments":[{"name":"value","nativeSrc":"7173:5:69","nodeType":"YulIdentifier","src":"7173:5:69"},{"kind":"number","nativeSrc":"7180:4:69","nodeType":"YulLiteral","src":"7180:4:69","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"7169:3:69","nodeType":"YulIdentifier","src":"7169:3:69"},"nativeSrc":"7169:16:69","nodeType":"YulFunctionCall","src":"7169:16:69"},"variableNames":[{"name":"cleaned","nativeSrc":"7158:7:69","nodeType":"YulIdentifier","src":"7158:7:69"}]}]},"name":"cleanup_t_uint8","nativeSrc":"7105:86:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7130:5:69","nodeType":"YulTypedName","src":"7130:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"7140:7:69","nodeType":"YulTypedName","src":"7140:7:69","type":""}],"src":"7105:86:69"},{"body":{"nativeSrc":"7258:51:69","nodeType":"YulBlock","src":"7258:51:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"7275:3:69","nodeType":"YulIdentifier","src":"7275:3:69"},{"arguments":[{"name":"value","nativeSrc":"7296:5:69","nodeType":"YulIdentifier","src":"7296:5:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"7280:15:69","nodeType":"YulIdentifier","src":"7280:15:69"},"nativeSrc":"7280:22:69","nodeType":"YulFunctionCall","src":"7280:22:69"}],"functionName":{"name":"mstore","nativeSrc":"7268:6:69","nodeType":"YulIdentifier","src":"7268:6:69"},"nativeSrc":"7268:35:69","nodeType":"YulFunctionCall","src":"7268:35:69"},"nativeSrc":"7268:35:69","nodeType":"YulExpressionStatement","src":"7268:35:69"}]},"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"7197:112:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7246:5:69","nodeType":"YulTypedName","src":"7246:5:69","type":""},{"name":"pos","nativeSrc":"7253:3:69","nodeType":"YulTypedName","src":"7253:3:69","type":""}],"src":"7197:112:69"},{"body":{"nativeSrc":"7409:120:69","nodeType":"YulBlock","src":"7409:120:69","statements":[{"nativeSrc":"7419:26:69","nodeType":"YulAssignment","src":"7419:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"7431:9:69","nodeType":"YulIdentifier","src":"7431:9:69"},{"kind":"number","nativeSrc":"7442:2:69","nodeType":"YulLiteral","src":"7442:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7427:3:69","nodeType":"YulIdentifier","src":"7427:3:69"},"nativeSrc":"7427:18:69","nodeType":"YulFunctionCall","src":"7427:18:69"},"variableNames":[{"name":"tail","nativeSrc":"7419:4:69","nodeType":"YulIdentifier","src":"7419:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"7495:6:69","nodeType":"YulIdentifier","src":"7495:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"7508:9:69","nodeType":"YulIdentifier","src":"7508:9:69"},{"kind":"number","nativeSrc":"7519:1:69","nodeType":"YulLiteral","src":"7519:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"7504:3:69","nodeType":"YulIdentifier","src":"7504:3:69"},"nativeSrc":"7504:17:69","nodeType":"YulFunctionCall","src":"7504:17:69"}],"functionName":{"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"7455:39:69","nodeType":"YulIdentifier","src":"7455:39:69"},"nativeSrc":"7455:67:69","nodeType":"YulFunctionCall","src":"7455:67:69"},"nativeSrc":"7455:67:69","nodeType":"YulExpressionStatement","src":"7455:67:69"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nativeSrc":"7315:214:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"7381:9:69","nodeType":"YulTypedName","src":"7381:9:69","type":""},{"name":"value0","nativeSrc":"7393:6:69","nodeType":"YulTypedName","src":"7393:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"7404:4:69","nodeType":"YulTypedName","src":"7404:4:69","type":""}],"src":"7315:214:69"},{"body":{"nativeSrc":"7567:28:69","nodeType":"YulBlock","src":"7567:28:69","statements":[{"nativeSrc":"7577:12:69","nodeType":"YulAssignment","src":"7577:12:69","value":{"name":"value","nativeSrc":"7584:5:69","nodeType":"YulIdentifier","src":"7584:5:69"},"variableNames":[{"name":"ret","nativeSrc":"7577:3:69","nodeType":"YulIdentifier","src":"7577:3:69"}]}]},"name":"identity","nativeSrc":"7535:60:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7553:5:69","nodeType":"YulTypedName","src":"7553:5:69","type":""}],"returnVariables":[{"name":"ret","nativeSrc":"7563:3:69","nodeType":"YulTypedName","src":"7563:3:69","type":""}],"src":"7535:60:69"},{"body":{"nativeSrc":"7661:82:69","nodeType":"YulBlock","src":"7661:82:69","statements":[{"nativeSrc":"7671:66:69","nodeType":"YulAssignment","src":"7671:66:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"7729:5:69","nodeType":"YulIdentifier","src":"7729:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"7711:17:69","nodeType":"YulIdentifier","src":"7711:17:69"},"nativeSrc":"7711:24:69","nodeType":"YulFunctionCall","src":"7711:24:69"}],"functionName":{"name":"identity","nativeSrc":"7702:8:69","nodeType":"YulIdentifier","src":"7702:8:69"},"nativeSrc":"7702:34:69","nodeType":"YulFunctionCall","src":"7702:34:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"7684:17:69","nodeType":"YulIdentifier","src":"7684:17:69"},"nativeSrc":"7684:53:69","nodeType":"YulFunctionCall","src":"7684:53:69"},"variableNames":[{"name":"converted","nativeSrc":"7671:9:69","nodeType":"YulIdentifier","src":"7671:9:69"}]}]},"name":"convert_t_uint160_to_t_uint160","nativeSrc":"7601:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7641:5:69","nodeType":"YulTypedName","src":"7641:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"7651:9:69","nodeType":"YulTypedName","src":"7651:9:69","type":""}],"src":"7601:142:69"},{"body":{"nativeSrc":"7809:66:69","nodeType":"YulBlock","src":"7809:66:69","statements":[{"nativeSrc":"7819:50:69","nodeType":"YulAssignment","src":"7819:50:69","value":{"arguments":[{"name":"value","nativeSrc":"7863:5:69","nodeType":"YulIdentifier","src":"7863:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_uint160","nativeSrc":"7832:30:69","nodeType":"YulIdentifier","src":"7832:30:69"},"nativeSrc":"7832:37:69","nodeType":"YulFunctionCall","src":"7832:37:69"},"variableNames":[{"name":"converted","nativeSrc":"7819:9:69","nodeType":"YulIdentifier","src":"7819:9:69"}]}]},"name":"convert_t_uint160_to_t_address","nativeSrc":"7749:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7789:5:69","nodeType":"YulTypedName","src":"7789:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"7799:9:69","nodeType":"YulTypedName","src":"7799:9:69","type":""}],"src":"7749:126:69"},{"body":{"nativeSrc":"7970:66:69","nodeType":"YulBlock","src":"7970:66:69","statements":[{"nativeSrc":"7980:50:69","nodeType":"YulAssignment","src":"7980:50:69","value":{"arguments":[{"name":"value","nativeSrc":"8024:5:69","nodeType":"YulIdentifier","src":"8024:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"7993:30:69","nodeType":"YulIdentifier","src":"7993:30:69"},"nativeSrc":"7993:37:69","nodeType":"YulFunctionCall","src":"7993:37:69"},"variableNames":[{"name":"converted","nativeSrc":"7980:9:69","nodeType":"YulIdentifier","src":"7980:9:69"}]}]},"name":"convert_t_contract$_ComptrollerInterface_$9353_to_t_address","nativeSrc":"7881:155:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7950:5:69","nodeType":"YulTypedName","src":"7950:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"7960:9:69","nodeType":"YulTypedName","src":"7960:9:69","type":""}],"src":"7881:155:69"},{"body":{"nativeSrc":"8136:95:69","nodeType":"YulBlock","src":"8136:95:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"8153:3:69","nodeType":"YulIdentifier","src":"8153:3:69"},{"arguments":[{"name":"value","nativeSrc":"8218:5:69","nodeType":"YulIdentifier","src":"8218:5:69"}],"functionName":{"name":"convert_t_contract$_ComptrollerInterface_$9353_to_t_address","nativeSrc":"8158:59:69","nodeType":"YulIdentifier","src":"8158:59:69"},"nativeSrc":"8158:66:69","nodeType":"YulFunctionCall","src":"8158:66:69"}],"functionName":{"name":"mstore","nativeSrc":"8146:6:69","nodeType":"YulIdentifier","src":"8146:6:69"},"nativeSrc":"8146:79:69","nodeType":"YulFunctionCall","src":"8146:79:69"},"nativeSrc":"8146:79:69","nodeType":"YulExpressionStatement","src":"8146:79:69"}]},"name":"abi_encode_t_contract$_ComptrollerInterface_$9353_to_t_address_fromStack","nativeSrc":"8042:189:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"8124:5:69","nodeType":"YulTypedName","src":"8124:5:69","type":""},{"name":"pos","nativeSrc":"8131:3:69","nodeType":"YulTypedName","src":"8131:3:69","type":""}],"src":"8042:189:69"},{"body":{"nativeSrc":"8364:153:69","nodeType":"YulBlock","src":"8364:153:69","statements":[{"nativeSrc":"8374:26:69","nodeType":"YulAssignment","src":"8374:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"8386:9:69","nodeType":"YulIdentifier","src":"8386:9:69"},{"kind":"number","nativeSrc":"8397:2:69","nodeType":"YulLiteral","src":"8397:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8382:3:69","nodeType":"YulIdentifier","src":"8382:3:69"},"nativeSrc":"8382:18:69","nodeType":"YulFunctionCall","src":"8382:18:69"},"variableNames":[{"name":"tail","nativeSrc":"8374:4:69","nodeType":"YulIdentifier","src":"8374:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"8483:6:69","nodeType":"YulIdentifier","src":"8483:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"8496:9:69","nodeType":"YulIdentifier","src":"8496:9:69"},{"kind":"number","nativeSrc":"8507:1:69","nodeType":"YulLiteral","src":"8507:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"8492:3:69","nodeType":"YulIdentifier","src":"8492:3:69"},"nativeSrc":"8492:17:69","nodeType":"YulFunctionCall","src":"8492:17:69"}],"functionName":{"name":"abi_encode_t_contract$_ComptrollerInterface_$9353_to_t_address_fromStack","nativeSrc":"8410:72:69","nodeType":"YulIdentifier","src":"8410:72:69"},"nativeSrc":"8410:100:69","nodeType":"YulFunctionCall","src":"8410:100:69"},"nativeSrc":"8410:100:69","nodeType":"YulExpressionStatement","src":"8410:100:69"}]},"name":"abi_encode_tuple_t_contract$_ComptrollerInterface_$9353__to_t_address__fromStack_reversed","nativeSrc":"8237:280:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8336:9:69","nodeType":"YulTypedName","src":"8336:9:69","type":""},{"name":"value0","nativeSrc":"8348:6:69","nodeType":"YulTypedName","src":"8348:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"8359:4:69","nodeType":"YulTypedName","src":"8359:4:69","type":""}],"src":"8237:280:69"},{"body":{"nativeSrc":"8597:51:69","nodeType":"YulBlock","src":"8597:51:69","statements":[{"nativeSrc":"8607:35:69","nodeType":"YulAssignment","src":"8607:35:69","value":{"arguments":[{"name":"value","nativeSrc":"8636:5:69","nodeType":"YulIdentifier","src":"8636:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"8618:17:69","nodeType":"YulIdentifier","src":"8618:17:69"},"nativeSrc":"8618:24:69","nodeType":"YulFunctionCall","src":"8618:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"8607:7:69","nodeType":"YulIdentifier","src":"8607:7:69"}]}]},"name":"cleanup_t_contract$_ComptrollerInterface_$9353","nativeSrc":"8523:125:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"8579:5:69","nodeType":"YulTypedName","src":"8579:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"8589:7:69","nodeType":"YulTypedName","src":"8589:7:69","type":""}],"src":"8523:125:69"},{"body":{"nativeSrc":"8726:108:69","nodeType":"YulBlock","src":"8726:108:69","statements":[{"body":{"nativeSrc":"8812:16:69","nodeType":"YulBlock","src":"8812:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"8821:1:69","nodeType":"YulLiteral","src":"8821:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"8824:1:69","nodeType":"YulLiteral","src":"8824:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"8814:6:69","nodeType":"YulIdentifier","src":"8814:6:69"},"nativeSrc":"8814:12:69","nodeType":"YulFunctionCall","src":"8814:12:69"},"nativeSrc":"8814:12:69","nodeType":"YulExpressionStatement","src":"8814:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"8749:5:69","nodeType":"YulIdentifier","src":"8749:5:69"},{"arguments":[{"name":"value","nativeSrc":"8803:5:69","nodeType":"YulIdentifier","src":"8803:5:69"}],"functionName":{"name":"cleanup_t_contract$_ComptrollerInterface_$9353","nativeSrc":"8756:46:69","nodeType":"YulIdentifier","src":"8756:46:69"},"nativeSrc":"8756:53:69","nodeType":"YulFunctionCall","src":"8756:53:69"}],"functionName":{"name":"eq","nativeSrc":"8746:2:69","nodeType":"YulIdentifier","src":"8746:2:69"},"nativeSrc":"8746:64:69","nodeType":"YulFunctionCall","src":"8746:64:69"}],"functionName":{"name":"iszero","nativeSrc":"8739:6:69","nodeType":"YulIdentifier","src":"8739:6:69"},"nativeSrc":"8739:72:69","nodeType":"YulFunctionCall","src":"8739:72:69"},"nativeSrc":"8736:92:69","nodeType":"YulIf","src":"8736:92:69"}]},"name":"validator_revert_t_contract$_ComptrollerInterface_$9353","nativeSrc":"8654:180:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"8719:5:69","nodeType":"YulTypedName","src":"8719:5:69","type":""}],"src":"8654:180:69"},{"body":{"nativeSrc":"8921:116:69","nodeType":"YulBlock","src":"8921:116:69","statements":[{"nativeSrc":"8931:29:69","nodeType":"YulAssignment","src":"8931:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"8953:6:69","nodeType":"YulIdentifier","src":"8953:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"8940:12:69","nodeType":"YulIdentifier","src":"8940:12:69"},"nativeSrc":"8940:20:69","nodeType":"YulFunctionCall","src":"8940:20:69"},"variableNames":[{"name":"value","nativeSrc":"8931:5:69","nodeType":"YulIdentifier","src":"8931:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"9025:5:69","nodeType":"YulIdentifier","src":"9025:5:69"}],"functionName":{"name":"validator_revert_t_contract$_ComptrollerInterface_$9353","nativeSrc":"8969:55:69","nodeType":"YulIdentifier","src":"8969:55:69"},"nativeSrc":"8969:62:69","nodeType":"YulFunctionCall","src":"8969:62:69"},"nativeSrc":"8969:62:69","nodeType":"YulExpressionStatement","src":"8969:62:69"}]},"name":"abi_decode_t_contract$_ComptrollerInterface_$9353","nativeSrc":"8840:197:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"8899:6:69","nodeType":"YulTypedName","src":"8899:6:69","type":""},{"name":"end","nativeSrc":"8907:3:69","nodeType":"YulTypedName","src":"8907:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"8915:5:69","nodeType":"YulTypedName","src":"8915:5:69","type":""}],"src":"8840:197:69"},{"body":{"nativeSrc":"9115:51:69","nodeType":"YulBlock","src":"9115:51:69","statements":[{"nativeSrc":"9125:35:69","nodeType":"YulAssignment","src":"9125:35:69","value":{"arguments":[{"name":"value","nativeSrc":"9154:5:69","nodeType":"YulIdentifier","src":"9154:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"9136:17:69","nodeType":"YulIdentifier","src":"9136:17:69"},"nativeSrc":"9136:24:69","nodeType":"YulFunctionCall","src":"9136:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"9125:7:69","nodeType":"YulIdentifier","src":"9125:7:69"}]}]},"name":"cleanup_t_contract$_InterestRateModel_$10266","nativeSrc":"9043:123:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"9097:5:69","nodeType":"YulTypedName","src":"9097:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"9107:7:69","nodeType":"YulTypedName","src":"9107:7:69","type":""}],"src":"9043:123:69"},{"body":{"nativeSrc":"9242:106:69","nodeType":"YulBlock","src":"9242:106:69","statements":[{"body":{"nativeSrc":"9326:16:69","nodeType":"YulBlock","src":"9326:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"9335:1:69","nodeType":"YulLiteral","src":"9335:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"9338:1:69","nodeType":"YulLiteral","src":"9338:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"9328:6:69","nodeType":"YulIdentifier","src":"9328:6:69"},"nativeSrc":"9328:12:69","nodeType":"YulFunctionCall","src":"9328:12:69"},"nativeSrc":"9328:12:69","nodeType":"YulExpressionStatement","src":"9328:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"9265:5:69","nodeType":"YulIdentifier","src":"9265:5:69"},{"arguments":[{"name":"value","nativeSrc":"9317:5:69","nodeType":"YulIdentifier","src":"9317:5:69"}],"functionName":{"name":"cleanup_t_contract$_InterestRateModel_$10266","nativeSrc":"9272:44:69","nodeType":"YulIdentifier","src":"9272:44:69"},"nativeSrc":"9272:51:69","nodeType":"YulFunctionCall","src":"9272:51:69"}],"functionName":{"name":"eq","nativeSrc":"9262:2:69","nodeType":"YulIdentifier","src":"9262:2:69"},"nativeSrc":"9262:62:69","nodeType":"YulFunctionCall","src":"9262:62:69"}],"functionName":{"name":"iszero","nativeSrc":"9255:6:69","nodeType":"YulIdentifier","src":"9255:6:69"},"nativeSrc":"9255:70:69","nodeType":"YulFunctionCall","src":"9255:70:69"},"nativeSrc":"9252:90:69","nodeType":"YulIf","src":"9252:90:69"}]},"name":"validator_revert_t_contract$_InterestRateModel_$10266","nativeSrc":"9172:176:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"9235:5:69","nodeType":"YulTypedName","src":"9235:5:69","type":""}],"src":"9172:176:69"},{"body":{"nativeSrc":"9433:114:69","nodeType":"YulBlock","src":"9433:114:69","statements":[{"nativeSrc":"9443:29:69","nodeType":"YulAssignment","src":"9443:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"9465:6:69","nodeType":"YulIdentifier","src":"9465:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"9452:12:69","nodeType":"YulIdentifier","src":"9452:12:69"},"nativeSrc":"9452:20:69","nodeType":"YulFunctionCall","src":"9452:20:69"},"variableNames":[{"name":"value","nativeSrc":"9443:5:69","nodeType":"YulIdentifier","src":"9443:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"9535:5:69","nodeType":"YulIdentifier","src":"9535:5:69"}],"functionName":{"name":"validator_revert_t_contract$_InterestRateModel_$10266","nativeSrc":"9481:53:69","nodeType":"YulIdentifier","src":"9481:53:69"},"nativeSrc":"9481:60:69","nodeType":"YulFunctionCall","src":"9481:60:69"},"nativeSrc":"9481:60:69","nodeType":"YulExpressionStatement","src":"9481:60:69"}]},"name":"abi_decode_t_contract$_InterestRateModel_$10266","nativeSrc":"9354:193:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"9411:6:69","nodeType":"YulTypedName","src":"9411:6:69","type":""},{"name":"end","nativeSrc":"9419:3:69","nodeType":"YulTypedName","src":"9419:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"9427:5:69","nodeType":"YulTypedName","src":"9427:5:69","type":""}],"src":"9354:193:69"},{"body":{"nativeSrc":"9642:28:69","nodeType":"YulBlock","src":"9642:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"9659:1:69","nodeType":"YulLiteral","src":"9659:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"9662:1:69","nodeType":"YulLiteral","src":"9662:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"9652:6:69","nodeType":"YulIdentifier","src":"9652:6:69"},"nativeSrc":"9652:12:69","nodeType":"YulFunctionCall","src":"9652:12:69"},"nativeSrc":"9652:12:69","nodeType":"YulExpressionStatement","src":"9652:12:69"}]},"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"9553:117:69","nodeType":"YulFunctionDefinition","src":"9553:117:69"},{"body":{"nativeSrc":"9765:28:69","nodeType":"YulBlock","src":"9765:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"9782:1:69","nodeType":"YulLiteral","src":"9782:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"9785:1:69","nodeType":"YulLiteral","src":"9785:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"9775:6:69","nodeType":"YulIdentifier","src":"9775:6:69"},"nativeSrc":"9775:12:69","nodeType":"YulFunctionCall","src":"9775:12:69"},"nativeSrc":"9775:12:69","nodeType":"YulExpressionStatement","src":"9775:12:69"}]},"name":"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae","nativeSrc":"9676:117:69","nodeType":"YulFunctionDefinition","src":"9676:117:69"},{"body":{"nativeSrc":"9827:152:69","nodeType":"YulBlock","src":"9827:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"9844:1:69","nodeType":"YulLiteral","src":"9844:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"9847:77:69","nodeType":"YulLiteral","src":"9847:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"9837:6:69","nodeType":"YulIdentifier","src":"9837:6:69"},"nativeSrc":"9837:88:69","nodeType":"YulFunctionCall","src":"9837:88:69"},"nativeSrc":"9837:88:69","nodeType":"YulExpressionStatement","src":"9837:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"9941:1:69","nodeType":"YulLiteral","src":"9941:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"9944:4:69","nodeType":"YulLiteral","src":"9944:4:69","type":"","value":"0x41"}],"functionName":{"name":"mstore","nativeSrc":"9934:6:69","nodeType":"YulIdentifier","src":"9934:6:69"},"nativeSrc":"9934:15:69","nodeType":"YulFunctionCall","src":"9934:15:69"},"nativeSrc":"9934:15:69","nodeType":"YulExpressionStatement","src":"9934:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"9965:1:69","nodeType":"YulLiteral","src":"9965:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"9968:4:69","nodeType":"YulLiteral","src":"9968:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"9958:6:69","nodeType":"YulIdentifier","src":"9958:6:69"},"nativeSrc":"9958:15:69","nodeType":"YulFunctionCall","src":"9958:15:69"},"nativeSrc":"9958:15:69","nodeType":"YulExpressionStatement","src":"9958:15:69"}]},"name":"panic_error_0x41","nativeSrc":"9799:180:69","nodeType":"YulFunctionDefinition","src":"9799:180:69"},{"body":{"nativeSrc":"10028:238:69","nodeType":"YulBlock","src":"10028:238:69","statements":[{"nativeSrc":"10038:58:69","nodeType":"YulVariableDeclaration","src":"10038:58:69","value":{"arguments":[{"name":"memPtr","nativeSrc":"10060:6:69","nodeType":"YulIdentifier","src":"10060:6:69"},{"arguments":[{"name":"size","nativeSrc":"10090:4:69","nodeType":"YulIdentifier","src":"10090:4:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"10068:21:69","nodeType":"YulIdentifier","src":"10068:21:69"},"nativeSrc":"10068:27:69","nodeType":"YulFunctionCall","src":"10068:27:69"}],"functionName":{"name":"add","nativeSrc":"10056:3:69","nodeType":"YulIdentifier","src":"10056:3:69"},"nativeSrc":"10056:40:69","nodeType":"YulFunctionCall","src":"10056:40:69"},"variables":[{"name":"newFreePtr","nativeSrc":"10042:10:69","nodeType":"YulTypedName","src":"10042:10:69","type":""}]},{"body":{"nativeSrc":"10207:22:69","nodeType":"YulBlock","src":"10207:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"10209:16:69","nodeType":"YulIdentifier","src":"10209:16:69"},"nativeSrc":"10209:18:69","nodeType":"YulFunctionCall","src":"10209:18:69"},"nativeSrc":"10209:18:69","nodeType":"YulExpressionStatement","src":"10209:18:69"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nativeSrc":"10150:10:69","nodeType":"YulIdentifier","src":"10150:10:69"},{"kind":"number","nativeSrc":"10162:18:69","nodeType":"YulLiteral","src":"10162:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"10147:2:69","nodeType":"YulIdentifier","src":"10147:2:69"},"nativeSrc":"10147:34:69","nodeType":"YulFunctionCall","src":"10147:34:69"},{"arguments":[{"name":"newFreePtr","nativeSrc":"10186:10:69","nodeType":"YulIdentifier","src":"10186:10:69"},{"name":"memPtr","nativeSrc":"10198:6:69","nodeType":"YulIdentifier","src":"10198:6:69"}],"functionName":{"name":"lt","nativeSrc":"10183:2:69","nodeType":"YulIdentifier","src":"10183:2:69"},"nativeSrc":"10183:22:69","nodeType":"YulFunctionCall","src":"10183:22:69"}],"functionName":{"name":"or","nativeSrc":"10144:2:69","nodeType":"YulIdentifier","src":"10144:2:69"},"nativeSrc":"10144:62:69","nodeType":"YulFunctionCall","src":"10144:62:69"},"nativeSrc":"10141:88:69","nodeType":"YulIf","src":"10141:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"10245:2:69","nodeType":"YulLiteral","src":"10245:2:69","type":"","value":"64"},{"name":"newFreePtr","nativeSrc":"10249:10:69","nodeType":"YulIdentifier","src":"10249:10:69"}],"functionName":{"name":"mstore","nativeSrc":"10238:6:69","nodeType":"YulIdentifier","src":"10238:6:69"},"nativeSrc":"10238:22:69","nodeType":"YulFunctionCall","src":"10238:22:69"},"nativeSrc":"10238:22:69","nodeType":"YulExpressionStatement","src":"10238:22:69"}]},"name":"finalize_allocation","nativeSrc":"9985:281:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"10014:6:69","nodeType":"YulTypedName","src":"10014:6:69","type":""},{"name":"size","nativeSrc":"10022:4:69","nodeType":"YulTypedName","src":"10022:4:69","type":""}],"src":"9985:281:69"},{"body":{"nativeSrc":"10313:88:69","nodeType":"YulBlock","src":"10313:88:69","statements":[{"nativeSrc":"10323:30:69","nodeType":"YulAssignment","src":"10323:30:69","value":{"arguments":[],"functionName":{"name":"allocate_unbounded","nativeSrc":"10333:18:69","nodeType":"YulIdentifier","src":"10333:18:69"},"nativeSrc":"10333:20:69","nodeType":"YulFunctionCall","src":"10333:20:69"},"variableNames":[{"name":"memPtr","nativeSrc":"10323:6:69","nodeType":"YulIdentifier","src":"10323:6:69"}]},{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"10382:6:69","nodeType":"YulIdentifier","src":"10382:6:69"},{"name":"size","nativeSrc":"10390:4:69","nodeType":"YulIdentifier","src":"10390:4:69"}],"functionName":{"name":"finalize_allocation","nativeSrc":"10362:19:69","nodeType":"YulIdentifier","src":"10362:19:69"},"nativeSrc":"10362:33:69","nodeType":"YulFunctionCall","src":"10362:33:69"},"nativeSrc":"10362:33:69","nodeType":"YulExpressionStatement","src":"10362:33:69"}]},"name":"allocate_memory","nativeSrc":"10272:129:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nativeSrc":"10297:4:69","nodeType":"YulTypedName","src":"10297:4:69","type":""}],"returnVariables":[{"name":"memPtr","nativeSrc":"10306:6:69","nodeType":"YulTypedName","src":"10306:6:69","type":""}],"src":"10272:129:69"},{"body":{"nativeSrc":"10474:241:69","nodeType":"YulBlock","src":"10474:241:69","statements":[{"body":{"nativeSrc":"10579:22:69","nodeType":"YulBlock","src":"10579:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"10581:16:69","nodeType":"YulIdentifier","src":"10581:16:69"},"nativeSrc":"10581:18:69","nodeType":"YulFunctionCall","src":"10581:18:69"},"nativeSrc":"10581:18:69","nodeType":"YulExpressionStatement","src":"10581:18:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"10551:6:69","nodeType":"YulIdentifier","src":"10551:6:69"},{"kind":"number","nativeSrc":"10559:18:69","nodeType":"YulLiteral","src":"10559:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"10548:2:69","nodeType":"YulIdentifier","src":"10548:2:69"},"nativeSrc":"10548:30:69","nodeType":"YulFunctionCall","src":"10548:30:69"},"nativeSrc":"10545:56:69","nodeType":"YulIf","src":"10545:56:69"},{"nativeSrc":"10611:37:69","nodeType":"YulAssignment","src":"10611:37:69","value":{"arguments":[{"name":"length","nativeSrc":"10641:6:69","nodeType":"YulIdentifier","src":"10641:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"10619:21:69","nodeType":"YulIdentifier","src":"10619:21:69"},"nativeSrc":"10619:29:69","nodeType":"YulFunctionCall","src":"10619:29:69"},"variableNames":[{"name":"size","nativeSrc":"10611:4:69","nodeType":"YulIdentifier","src":"10611:4:69"}]},{"nativeSrc":"10685:23:69","nodeType":"YulAssignment","src":"10685:23:69","value":{"arguments":[{"name":"size","nativeSrc":"10697:4:69","nodeType":"YulIdentifier","src":"10697:4:69"},{"kind":"number","nativeSrc":"10703:4:69","nodeType":"YulLiteral","src":"10703:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"10693:3:69","nodeType":"YulIdentifier","src":"10693:3:69"},"nativeSrc":"10693:15:69","nodeType":"YulFunctionCall","src":"10693:15:69"},"variableNames":[{"name":"size","nativeSrc":"10685:4:69","nodeType":"YulIdentifier","src":"10685:4:69"}]}]},"name":"array_allocation_size_t_string_memory_ptr","nativeSrc":"10407:308:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nativeSrc":"10458:6:69","nodeType":"YulTypedName","src":"10458:6:69","type":""}],"returnVariables":[{"name":"size","nativeSrc":"10469:4:69","nodeType":"YulTypedName","src":"10469:4:69","type":""}],"src":"10407:308:69"},{"body":{"nativeSrc":"10785:84:69","nodeType":"YulBlock","src":"10785:84:69","statements":[{"expression":{"arguments":[{"name":"dst","nativeSrc":"10809:3:69","nodeType":"YulIdentifier","src":"10809:3:69"},{"name":"src","nativeSrc":"10814:3:69","nodeType":"YulIdentifier","src":"10814:3:69"},{"name":"length","nativeSrc":"10819:6:69","nodeType":"YulIdentifier","src":"10819:6:69"}],"functionName":{"name":"calldatacopy","nativeSrc":"10796:12:69","nodeType":"YulIdentifier","src":"10796:12:69"},"nativeSrc":"10796:30:69","nodeType":"YulFunctionCall","src":"10796:30:69"},"nativeSrc":"10796:30:69","nodeType":"YulExpressionStatement","src":"10796:30:69"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"10846:3:69","nodeType":"YulIdentifier","src":"10846:3:69"},{"name":"length","nativeSrc":"10851:6:69","nodeType":"YulIdentifier","src":"10851:6:69"}],"functionName":{"name":"add","nativeSrc":"10842:3:69","nodeType":"YulIdentifier","src":"10842:3:69"},"nativeSrc":"10842:16:69","nodeType":"YulFunctionCall","src":"10842:16:69"},{"kind":"number","nativeSrc":"10860:1:69","nodeType":"YulLiteral","src":"10860:1:69","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"10835:6:69","nodeType":"YulIdentifier","src":"10835:6:69"},"nativeSrc":"10835:27:69","nodeType":"YulFunctionCall","src":"10835:27:69"},"nativeSrc":"10835:27:69","nodeType":"YulExpressionStatement","src":"10835:27:69"}]},"name":"copy_calldata_to_memory_with_cleanup","nativeSrc":"10721:148:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"10767:3:69","nodeType":"YulTypedName","src":"10767:3:69","type":""},{"name":"dst","nativeSrc":"10772:3:69","nodeType":"YulTypedName","src":"10772:3:69","type":""},{"name":"length","nativeSrc":"10777:6:69","nodeType":"YulTypedName","src":"10777:6:69","type":""}],"src":"10721:148:69"},{"body":{"nativeSrc":"10959:341:69","nodeType":"YulBlock","src":"10959:341:69","statements":[{"nativeSrc":"10969:75:69","nodeType":"YulAssignment","src":"10969:75:69","value":{"arguments":[{"arguments":[{"name":"length","nativeSrc":"11036:6:69","nodeType":"YulIdentifier","src":"11036:6:69"}],"functionName":{"name":"array_allocation_size_t_string_memory_ptr","nativeSrc":"10994:41:69","nodeType":"YulIdentifier","src":"10994:41:69"},"nativeSrc":"10994:49:69","nodeType":"YulFunctionCall","src":"10994:49:69"}],"functionName":{"name":"allocate_memory","nativeSrc":"10978:15:69","nodeType":"YulIdentifier","src":"10978:15:69"},"nativeSrc":"10978:66:69","nodeType":"YulFunctionCall","src":"10978:66:69"},"variableNames":[{"name":"array","nativeSrc":"10969:5:69","nodeType":"YulIdentifier","src":"10969:5:69"}]},{"expression":{"arguments":[{"name":"array","nativeSrc":"11060:5:69","nodeType":"YulIdentifier","src":"11060:5:69"},{"name":"length","nativeSrc":"11067:6:69","nodeType":"YulIdentifier","src":"11067:6:69"}],"functionName":{"name":"mstore","nativeSrc":"11053:6:69","nodeType":"YulIdentifier","src":"11053:6:69"},"nativeSrc":"11053:21:69","nodeType":"YulFunctionCall","src":"11053:21:69"},"nativeSrc":"11053:21:69","nodeType":"YulExpressionStatement","src":"11053:21:69"},{"nativeSrc":"11083:27:69","nodeType":"YulVariableDeclaration","src":"11083:27:69","value":{"arguments":[{"name":"array","nativeSrc":"11098:5:69","nodeType":"YulIdentifier","src":"11098:5:69"},{"kind":"number","nativeSrc":"11105:4:69","nodeType":"YulLiteral","src":"11105:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"11094:3:69","nodeType":"YulIdentifier","src":"11094:3:69"},"nativeSrc":"11094:16:69","nodeType":"YulFunctionCall","src":"11094:16:69"},"variables":[{"name":"dst","nativeSrc":"11087:3:69","nodeType":"YulTypedName","src":"11087:3:69","type":""}]},{"body":{"nativeSrc":"11148:83:69","nodeType":"YulBlock","src":"11148:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae","nativeSrc":"11150:77:69","nodeType":"YulIdentifier","src":"11150:77:69"},"nativeSrc":"11150:79:69","nodeType":"YulFunctionCall","src":"11150:79:69"},"nativeSrc":"11150:79:69","nodeType":"YulExpressionStatement","src":"11150:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"src","nativeSrc":"11129:3:69","nodeType":"YulIdentifier","src":"11129:3:69"},{"name":"length","nativeSrc":"11134:6:69","nodeType":"YulIdentifier","src":"11134:6:69"}],"functionName":{"name":"add","nativeSrc":"11125:3:69","nodeType":"YulIdentifier","src":"11125:3:69"},"nativeSrc":"11125:16:69","nodeType":"YulFunctionCall","src":"11125:16:69"},{"name":"end","nativeSrc":"11143:3:69","nodeType":"YulIdentifier","src":"11143:3:69"}],"functionName":{"name":"gt","nativeSrc":"11122:2:69","nodeType":"YulIdentifier","src":"11122:2:69"},"nativeSrc":"11122:25:69","nodeType":"YulFunctionCall","src":"11122:25:69"},"nativeSrc":"11119:112:69","nodeType":"YulIf","src":"11119:112:69"},{"expression":{"arguments":[{"name":"src","nativeSrc":"11277:3:69","nodeType":"YulIdentifier","src":"11277:3:69"},{"name":"dst","nativeSrc":"11282:3:69","nodeType":"YulIdentifier","src":"11282:3:69"},{"name":"length","nativeSrc":"11287:6:69","nodeType":"YulIdentifier","src":"11287:6:69"}],"functionName":{"name":"copy_calldata_to_memory_with_cleanup","nativeSrc":"11240:36:69","nodeType":"YulIdentifier","src":"11240:36:69"},"nativeSrc":"11240:54:69","nodeType":"YulFunctionCall","src":"11240:54:69"},"nativeSrc":"11240:54:69","nodeType":"YulExpressionStatement","src":"11240:54:69"}]},"name":"abi_decode_available_length_t_string_memory_ptr","nativeSrc":"10875:425:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"10932:3:69","nodeType":"YulTypedName","src":"10932:3:69","type":""},{"name":"length","nativeSrc":"10937:6:69","nodeType":"YulTypedName","src":"10937:6:69","type":""},{"name":"end","nativeSrc":"10945:3:69","nodeType":"YulTypedName","src":"10945:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"10953:5:69","nodeType":"YulTypedName","src":"10953:5:69","type":""}],"src":"10875:425:69"},{"body":{"nativeSrc":"11382:278:69","nodeType":"YulBlock","src":"11382:278:69","statements":[{"body":{"nativeSrc":"11431:83:69","nodeType":"YulBlock","src":"11431:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"11433:77:69","nodeType":"YulIdentifier","src":"11433:77:69"},"nativeSrc":"11433:79:69","nodeType":"YulFunctionCall","src":"11433:79:69"},"nativeSrc":"11433:79:69","nodeType":"YulExpressionStatement","src":"11433:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"11410:6:69","nodeType":"YulIdentifier","src":"11410:6:69"},{"kind":"number","nativeSrc":"11418:4:69","nodeType":"YulLiteral","src":"11418:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"11406:3:69","nodeType":"YulIdentifier","src":"11406:3:69"},"nativeSrc":"11406:17:69","nodeType":"YulFunctionCall","src":"11406:17:69"},{"name":"end","nativeSrc":"11425:3:69","nodeType":"YulIdentifier","src":"11425:3:69"}],"functionName":{"name":"slt","nativeSrc":"11402:3:69","nodeType":"YulIdentifier","src":"11402:3:69"},"nativeSrc":"11402:27:69","nodeType":"YulFunctionCall","src":"11402:27:69"}],"functionName":{"name":"iszero","nativeSrc":"11395:6:69","nodeType":"YulIdentifier","src":"11395:6:69"},"nativeSrc":"11395:35:69","nodeType":"YulFunctionCall","src":"11395:35:69"},"nativeSrc":"11392:122:69","nodeType":"YulIf","src":"11392:122:69"},{"nativeSrc":"11523:34:69","nodeType":"YulVariableDeclaration","src":"11523:34:69","value":{"arguments":[{"name":"offset","nativeSrc":"11550:6:69","nodeType":"YulIdentifier","src":"11550:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"11537:12:69","nodeType":"YulIdentifier","src":"11537:12:69"},"nativeSrc":"11537:20:69","nodeType":"YulFunctionCall","src":"11537:20:69"},"variables":[{"name":"length","nativeSrc":"11527:6:69","nodeType":"YulTypedName","src":"11527:6:69","type":""}]},{"nativeSrc":"11566:88:69","nodeType":"YulAssignment","src":"11566:88:69","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"11627:6:69","nodeType":"YulIdentifier","src":"11627:6:69"},{"kind":"number","nativeSrc":"11635:4:69","nodeType":"YulLiteral","src":"11635:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"11623:3:69","nodeType":"YulIdentifier","src":"11623:3:69"},"nativeSrc":"11623:17:69","nodeType":"YulFunctionCall","src":"11623:17:69"},{"name":"length","nativeSrc":"11642:6:69","nodeType":"YulIdentifier","src":"11642:6:69"},{"name":"end","nativeSrc":"11650:3:69","nodeType":"YulIdentifier","src":"11650:3:69"}],"functionName":{"name":"abi_decode_available_length_t_string_memory_ptr","nativeSrc":"11575:47:69","nodeType":"YulIdentifier","src":"11575:47:69"},"nativeSrc":"11575:79:69","nodeType":"YulFunctionCall","src":"11575:79:69"},"variableNames":[{"name":"array","nativeSrc":"11566:5:69","nodeType":"YulIdentifier","src":"11566:5:69"}]}]},"name":"abi_decode_t_string_memory_ptr","nativeSrc":"11320:340:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"11360:6:69","nodeType":"YulTypedName","src":"11360:6:69","type":""},{"name":"end","nativeSrc":"11368:3:69","nodeType":"YulTypedName","src":"11368:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"11376:5:69","nodeType":"YulTypedName","src":"11376:5:69","type":""}],"src":"11320:340:69"},{"body":{"nativeSrc":"11707:77:69","nodeType":"YulBlock","src":"11707:77:69","statements":[{"body":{"nativeSrc":"11762:16:69","nodeType":"YulBlock","src":"11762:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"11771:1:69","nodeType":"YulLiteral","src":"11771:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"11774:1:69","nodeType":"YulLiteral","src":"11774:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"11764:6:69","nodeType":"YulIdentifier","src":"11764:6:69"},"nativeSrc":"11764:12:69","nodeType":"YulFunctionCall","src":"11764:12:69"},"nativeSrc":"11764:12:69","nodeType":"YulExpressionStatement","src":"11764:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"11730:5:69","nodeType":"YulIdentifier","src":"11730:5:69"},{"arguments":[{"name":"value","nativeSrc":"11753:5:69","nodeType":"YulIdentifier","src":"11753:5:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"11737:15:69","nodeType":"YulIdentifier","src":"11737:15:69"},"nativeSrc":"11737:22:69","nodeType":"YulFunctionCall","src":"11737:22:69"}],"functionName":{"name":"eq","nativeSrc":"11727:2:69","nodeType":"YulIdentifier","src":"11727:2:69"},"nativeSrc":"11727:33:69","nodeType":"YulFunctionCall","src":"11727:33:69"}],"functionName":{"name":"iszero","nativeSrc":"11720:6:69","nodeType":"YulIdentifier","src":"11720:6:69"},"nativeSrc":"11720:41:69","nodeType":"YulFunctionCall","src":"11720:41:69"},"nativeSrc":"11717:61:69","nodeType":"YulIf","src":"11717:61:69"}]},"name":"validator_revert_t_uint8","nativeSrc":"11666:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"11700:5:69","nodeType":"YulTypedName","src":"11700:5:69","type":""}],"src":"11666:118:69"},{"body":{"nativeSrc":"11840:85:69","nodeType":"YulBlock","src":"11840:85:69","statements":[{"nativeSrc":"11850:29:69","nodeType":"YulAssignment","src":"11850:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"11872:6:69","nodeType":"YulIdentifier","src":"11872:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"11859:12:69","nodeType":"YulIdentifier","src":"11859:12:69"},"nativeSrc":"11859:20:69","nodeType":"YulFunctionCall","src":"11859:20:69"},"variableNames":[{"name":"value","nativeSrc":"11850:5:69","nodeType":"YulIdentifier","src":"11850:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"11913:5:69","nodeType":"YulIdentifier","src":"11913:5:69"}],"functionName":{"name":"validator_revert_t_uint8","nativeSrc":"11888:24:69","nodeType":"YulIdentifier","src":"11888:24:69"},"nativeSrc":"11888:31:69","nodeType":"YulFunctionCall","src":"11888:31:69"},"nativeSrc":"11888:31:69","nodeType":"YulExpressionStatement","src":"11888:31:69"}]},"name":"abi_decode_t_uint8","nativeSrc":"11790:135:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"11818:6:69","nodeType":"YulTypedName","src":"11818:6:69","type":""},{"name":"end","nativeSrc":"11826:3:69","nodeType":"YulTypedName","src":"11826:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"11834:5:69","nodeType":"YulTypedName","src":"11834:5:69","type":""}],"src":"11790:135:69"},{"body":{"nativeSrc":"12020:28:69","nodeType":"YulBlock","src":"12020:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"12037:1:69","nodeType":"YulLiteral","src":"12037:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"12040:1:69","nodeType":"YulLiteral","src":"12040:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"12030:6:69","nodeType":"YulIdentifier","src":"12030:6:69"},"nativeSrc":"12030:12:69","nodeType":"YulFunctionCall","src":"12030:12:69"},"nativeSrc":"12030:12:69","nodeType":"YulExpressionStatement","src":"12030:12:69"}]},"name":"revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f","nativeSrc":"11931:117:69","nodeType":"YulFunctionDefinition","src":"11931:117:69"},{"body":{"nativeSrc":"12143:28:69","nodeType":"YulBlock","src":"12143:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"12160:1:69","nodeType":"YulLiteral","src":"12160:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"12163:1:69","nodeType":"YulLiteral","src":"12163:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"12153:6:69","nodeType":"YulIdentifier","src":"12153:6:69"},"nativeSrc":"12153:12:69","nodeType":"YulFunctionCall","src":"12153:12:69"},"nativeSrc":"12153:12:69","nodeType":"YulExpressionStatement","src":"12153:12:69"}]},"name":"revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421","nativeSrc":"12054:117:69","nodeType":"YulFunctionDefinition","src":"12054:117:69"},{"body":{"nativeSrc":"12318:523:69","nodeType":"YulBlock","src":"12318:523:69","statements":[{"body":{"nativeSrc":"12362:83:69","nodeType":"YulBlock","src":"12362:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f","nativeSrc":"12364:77:69","nodeType":"YulIdentifier","src":"12364:77:69"},"nativeSrc":"12364:79:69","nodeType":"YulFunctionCall","src":"12364:79:69"},"nativeSrc":"12364:79:69","nodeType":"YulExpressionStatement","src":"12364:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nativeSrc":"12339:3:69","nodeType":"YulIdentifier","src":"12339:3:69"},{"name":"headStart","nativeSrc":"12344:9:69","nodeType":"YulIdentifier","src":"12344:9:69"}],"functionName":{"name":"sub","nativeSrc":"12335:3:69","nodeType":"YulIdentifier","src":"12335:3:69"},"nativeSrc":"12335:19:69","nodeType":"YulFunctionCall","src":"12335:19:69"},{"kind":"number","nativeSrc":"12356:4:69","nodeType":"YulLiteral","src":"12356:4:69","type":"","value":"0x40"}],"functionName":{"name":"slt","nativeSrc":"12331:3:69","nodeType":"YulIdentifier","src":"12331:3:69"},"nativeSrc":"12331:30:69","nodeType":"YulFunctionCall","src":"12331:30:69"},"nativeSrc":"12328:117:69","nodeType":"YulIf","src":"12328:117:69"},{"nativeSrc":"12454:30:69","nodeType":"YulAssignment","src":"12454:30:69","value":{"arguments":[{"kind":"number","nativeSrc":"12479:4:69","nodeType":"YulLiteral","src":"12479:4:69","type":"","value":"0x40"}],"functionName":{"name":"allocate_memory","nativeSrc":"12463:15:69","nodeType":"YulIdentifier","src":"12463:15:69"},"nativeSrc":"12463:21:69","nodeType":"YulFunctionCall","src":"12463:21:69"},"variableNames":[{"name":"value","nativeSrc":"12454:5:69","nodeType":"YulIdentifier","src":"12454:5:69"}]},{"nativeSrc":"12494:155:69","nodeType":"YulBlock","src":"12494:155:69","statements":[{"nativeSrc":"12534:15:69","nodeType":"YulVariableDeclaration","src":"12534:15:69","value":{"kind":"number","nativeSrc":"12548:1:69","nodeType":"YulLiteral","src":"12548:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"12538:6:69","nodeType":"YulTypedName","src":"12538:6:69","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"12574:5:69","nodeType":"YulIdentifier","src":"12574:5:69"},{"kind":"number","nativeSrc":"12581:4:69","nodeType":"YulLiteral","src":"12581:4:69","type":"","value":"0x00"}],"functionName":{"name":"add","nativeSrc":"12570:3:69","nodeType":"YulIdentifier","src":"12570:3:69"},"nativeSrc":"12570:16:69","nodeType":"YulFunctionCall","src":"12570:16:69"},{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"12613:9:69","nodeType":"YulIdentifier","src":"12613:9:69"},{"name":"offset","nativeSrc":"12624:6:69","nodeType":"YulIdentifier","src":"12624:6:69"}],"functionName":{"name":"add","nativeSrc":"12609:3:69","nodeType":"YulIdentifier","src":"12609:3:69"},"nativeSrc":"12609:22:69","nodeType":"YulFunctionCall","src":"12609:22:69"},{"name":"end","nativeSrc":"12633:3:69","nodeType":"YulIdentifier","src":"12633:3:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"12588:20:69","nodeType":"YulIdentifier","src":"12588:20:69"},"nativeSrc":"12588:49:69","nodeType":"YulFunctionCall","src":"12588:49:69"}],"functionName":{"name":"mstore","nativeSrc":"12563:6:69","nodeType":"YulIdentifier","src":"12563:6:69"},"nativeSrc":"12563:75:69","nodeType":"YulFunctionCall","src":"12563:75:69"},"nativeSrc":"12563:75:69","nodeType":"YulExpressionStatement","src":"12563:75:69"}]},{"nativeSrc":"12659:175:69","nodeType":"YulBlock","src":"12659:175:69","statements":[{"nativeSrc":"12710:16:69","nodeType":"YulVariableDeclaration","src":"12710:16:69","value":{"kind":"number","nativeSrc":"12724:2:69","nodeType":"YulLiteral","src":"12724:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"12714:6:69","nodeType":"YulTypedName","src":"12714:6:69","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"12751:5:69","nodeType":"YulIdentifier","src":"12751:5:69"},{"kind":"number","nativeSrc":"12758:4:69","nodeType":"YulLiteral","src":"12758:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"12747:3:69","nodeType":"YulIdentifier","src":"12747:3:69"},"nativeSrc":"12747:16:69","nodeType":"YulFunctionCall","src":"12747:16:69"},{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"12798:9:69","nodeType":"YulIdentifier","src":"12798:9:69"},{"name":"offset","nativeSrc":"12809:6:69","nodeType":"YulIdentifier","src":"12809:6:69"}],"functionName":{"name":"add","nativeSrc":"12794:3:69","nodeType":"YulIdentifier","src":"12794:3:69"},"nativeSrc":"12794:22:69","nodeType":"YulFunctionCall","src":"12794:22:69"},{"name":"end","nativeSrc":"12818:3:69","nodeType":"YulIdentifier","src":"12818:3:69"}],"functionName":{"name":"abi_decode_t_address_payable","nativeSrc":"12765:28:69","nodeType":"YulIdentifier","src":"12765:28:69"},"nativeSrc":"12765:57:69","nodeType":"YulFunctionCall","src":"12765:57:69"}],"functionName":{"name":"mstore","nativeSrc":"12740:6:69","nodeType":"YulIdentifier","src":"12740:6:69"},"nativeSrc":"12740:83:69","nodeType":"YulFunctionCall","src":"12740:83:69"},"nativeSrc":"12740:83:69","nodeType":"YulExpressionStatement","src":"12740:83:69"}]}]},"name":"abi_decode_t_struct$_RiskManagementInit_$15613_memory_ptr","nativeSrc":"12226:615:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"12293:9:69","nodeType":"YulTypedName","src":"12293:9:69","type":""},{"name":"end","nativeSrc":"12304:3:69","nodeType":"YulTypedName","src":"12304:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"12312:5:69","nodeType":"YulTypedName","src":"12312:5:69","type":""}],"src":"12226:615:69"},{"body":{"nativeSrc":"13195:1983:69","nodeType":"YulBlock","src":"13195:1983:69","statements":[{"body":{"nativeSrc":"13242:83:69","nodeType":"YulBlock","src":"13242:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"13244:77:69","nodeType":"YulIdentifier","src":"13244:77:69"},"nativeSrc":"13244:79:69","nodeType":"YulFunctionCall","src":"13244:79:69"},"nativeSrc":"13244:79:69","nodeType":"YulExpressionStatement","src":"13244:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"13216:7:69","nodeType":"YulIdentifier","src":"13216:7:69"},{"name":"headStart","nativeSrc":"13225:9:69","nodeType":"YulIdentifier","src":"13225:9:69"}],"functionName":{"name":"sub","nativeSrc":"13212:3:69","nodeType":"YulIdentifier","src":"13212:3:69"},"nativeSrc":"13212:23:69","nodeType":"YulFunctionCall","src":"13212:23:69"},{"kind":"number","nativeSrc":"13237:3:69","nodeType":"YulLiteral","src":"13237:3:69","type":"","value":"384"}],"functionName":{"name":"slt","nativeSrc":"13208:3:69","nodeType":"YulIdentifier","src":"13208:3:69"},"nativeSrc":"13208:33:69","nodeType":"YulFunctionCall","src":"13208:33:69"},"nativeSrc":"13205:120:69","nodeType":"YulIf","src":"13205:120:69"},{"nativeSrc":"13335:117:69","nodeType":"YulBlock","src":"13335:117:69","statements":[{"nativeSrc":"13350:15:69","nodeType":"YulVariableDeclaration","src":"13350:15:69","value":{"kind":"number","nativeSrc":"13364:1:69","nodeType":"YulLiteral","src":"13364:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"13354:6:69","nodeType":"YulTypedName","src":"13354:6:69","type":""}]},{"nativeSrc":"13379:63:69","nodeType":"YulAssignment","src":"13379:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"13414:9:69","nodeType":"YulIdentifier","src":"13414:9:69"},{"name":"offset","nativeSrc":"13425:6:69","nodeType":"YulIdentifier","src":"13425:6:69"}],"functionName":{"name":"add","nativeSrc":"13410:3:69","nodeType":"YulIdentifier","src":"13410:3:69"},"nativeSrc":"13410:22:69","nodeType":"YulFunctionCall","src":"13410:22:69"},{"name":"dataEnd","nativeSrc":"13434:7:69","nodeType":"YulIdentifier","src":"13434:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"13389:20:69","nodeType":"YulIdentifier","src":"13389:20:69"},"nativeSrc":"13389:53:69","nodeType":"YulFunctionCall","src":"13389:53:69"},"variableNames":[{"name":"value0","nativeSrc":"13379:6:69","nodeType":"YulIdentifier","src":"13379:6:69"}]}]},{"nativeSrc":"13462:147:69","nodeType":"YulBlock","src":"13462:147:69","statements":[{"nativeSrc":"13477:16:69","nodeType":"YulVariableDeclaration","src":"13477:16:69","value":{"kind":"number","nativeSrc":"13491:2:69","nodeType":"YulLiteral","src":"13491:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"13481:6:69","nodeType":"YulTypedName","src":"13481:6:69","type":""}]},{"nativeSrc":"13507:92:69","nodeType":"YulAssignment","src":"13507:92:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"13571:9:69","nodeType":"YulIdentifier","src":"13571:9:69"},{"name":"offset","nativeSrc":"13582:6:69","nodeType":"YulIdentifier","src":"13582:6:69"}],"functionName":{"name":"add","nativeSrc":"13567:3:69","nodeType":"YulIdentifier","src":"13567:3:69"},"nativeSrc":"13567:22:69","nodeType":"YulFunctionCall","src":"13567:22:69"},{"name":"dataEnd","nativeSrc":"13591:7:69","nodeType":"YulIdentifier","src":"13591:7:69"}],"functionName":{"name":"abi_decode_t_contract$_ComptrollerInterface_$9353","nativeSrc":"13517:49:69","nodeType":"YulIdentifier","src":"13517:49:69"},"nativeSrc":"13517:82:69","nodeType":"YulFunctionCall","src":"13517:82:69"},"variableNames":[{"name":"value1","nativeSrc":"13507:6:69","nodeType":"YulIdentifier","src":"13507:6:69"}]}]},{"nativeSrc":"13619:145:69","nodeType":"YulBlock","src":"13619:145:69","statements":[{"nativeSrc":"13634:16:69","nodeType":"YulVariableDeclaration","src":"13634:16:69","value":{"kind":"number","nativeSrc":"13648:2:69","nodeType":"YulLiteral","src":"13648:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"13638:6:69","nodeType":"YulTypedName","src":"13638:6:69","type":""}]},{"nativeSrc":"13664:90:69","nodeType":"YulAssignment","src":"13664:90:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"13726:9:69","nodeType":"YulIdentifier","src":"13726:9:69"},{"name":"offset","nativeSrc":"13737:6:69","nodeType":"YulIdentifier","src":"13737:6:69"}],"functionName":{"name":"add","nativeSrc":"13722:3:69","nodeType":"YulIdentifier","src":"13722:3:69"},"nativeSrc":"13722:22:69","nodeType":"YulFunctionCall","src":"13722:22:69"},{"name":"dataEnd","nativeSrc":"13746:7:69","nodeType":"YulIdentifier","src":"13746:7:69"}],"functionName":{"name":"abi_decode_t_contract$_InterestRateModel_$10266","nativeSrc":"13674:47:69","nodeType":"YulIdentifier","src":"13674:47:69"},"nativeSrc":"13674:80:69","nodeType":"YulFunctionCall","src":"13674:80:69"},"variableNames":[{"name":"value2","nativeSrc":"13664:6:69","nodeType":"YulIdentifier","src":"13664:6:69"}]}]},{"nativeSrc":"13774:118:69","nodeType":"YulBlock","src":"13774:118:69","statements":[{"nativeSrc":"13789:16:69","nodeType":"YulVariableDeclaration","src":"13789:16:69","value":{"kind":"number","nativeSrc":"13803:2:69","nodeType":"YulLiteral","src":"13803:2:69","type":"","value":"96"},"variables":[{"name":"offset","nativeSrc":"13793:6:69","nodeType":"YulTypedName","src":"13793:6:69","type":""}]},{"nativeSrc":"13819:63:69","nodeType":"YulAssignment","src":"13819:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"13854:9:69","nodeType":"YulIdentifier","src":"13854:9:69"},{"name":"offset","nativeSrc":"13865:6:69","nodeType":"YulIdentifier","src":"13865:6:69"}],"functionName":{"name":"add","nativeSrc":"13850:3:69","nodeType":"YulIdentifier","src":"13850:3:69"},"nativeSrc":"13850:22:69","nodeType":"YulFunctionCall","src":"13850:22:69"},{"name":"dataEnd","nativeSrc":"13874:7:69","nodeType":"YulIdentifier","src":"13874:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"13829:20:69","nodeType":"YulIdentifier","src":"13829:20:69"},"nativeSrc":"13829:53:69","nodeType":"YulFunctionCall","src":"13829:53:69"},"variableNames":[{"name":"value3","nativeSrc":"13819:6:69","nodeType":"YulIdentifier","src":"13819:6:69"}]}]},{"nativeSrc":"13902:289:69","nodeType":"YulBlock","src":"13902:289:69","statements":[{"nativeSrc":"13917:47:69","nodeType":"YulVariableDeclaration","src":"13917:47:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"13948:9:69","nodeType":"YulIdentifier","src":"13948:9:69"},{"kind":"number","nativeSrc":"13959:3:69","nodeType":"YulLiteral","src":"13959:3:69","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"13944:3:69","nodeType":"YulIdentifier","src":"13944:3:69"},"nativeSrc":"13944:19:69","nodeType":"YulFunctionCall","src":"13944:19:69"}],"functionName":{"name":"calldataload","nativeSrc":"13931:12:69","nodeType":"YulIdentifier","src":"13931:12:69"},"nativeSrc":"13931:33:69","nodeType":"YulFunctionCall","src":"13931:33:69"},"variables":[{"name":"offset","nativeSrc":"13921:6:69","nodeType":"YulTypedName","src":"13921:6:69","type":""}]},{"body":{"nativeSrc":"14011:83:69","nodeType":"YulBlock","src":"14011:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"14013:77:69","nodeType":"YulIdentifier","src":"14013:77:69"},"nativeSrc":"14013:79:69","nodeType":"YulFunctionCall","src":"14013:79:69"},"nativeSrc":"14013:79:69","nodeType":"YulExpressionStatement","src":"14013:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"13983:6:69","nodeType":"YulIdentifier","src":"13983:6:69"},{"kind":"number","nativeSrc":"13991:18:69","nodeType":"YulLiteral","src":"13991:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"13980:2:69","nodeType":"YulIdentifier","src":"13980:2:69"},"nativeSrc":"13980:30:69","nodeType":"YulFunctionCall","src":"13980:30:69"},"nativeSrc":"13977:117:69","nodeType":"YulIf","src":"13977:117:69"},{"nativeSrc":"14108:73:69","nodeType":"YulAssignment","src":"14108:73:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"14153:9:69","nodeType":"YulIdentifier","src":"14153:9:69"},{"name":"offset","nativeSrc":"14164:6:69","nodeType":"YulIdentifier","src":"14164:6:69"}],"functionName":{"name":"add","nativeSrc":"14149:3:69","nodeType":"YulIdentifier","src":"14149:3:69"},"nativeSrc":"14149:22:69","nodeType":"YulFunctionCall","src":"14149:22:69"},{"name":"dataEnd","nativeSrc":"14173:7:69","nodeType":"YulIdentifier","src":"14173:7:69"}],"functionName":{"name":"abi_decode_t_string_memory_ptr","nativeSrc":"14118:30:69","nodeType":"YulIdentifier","src":"14118:30:69"},"nativeSrc":"14118:63:69","nodeType":"YulFunctionCall","src":"14118:63:69"},"variableNames":[{"name":"value4","nativeSrc":"14108:6:69","nodeType":"YulIdentifier","src":"14108:6:69"}]}]},{"nativeSrc":"14201:289:69","nodeType":"YulBlock","src":"14201:289:69","statements":[{"nativeSrc":"14216:47:69","nodeType":"YulVariableDeclaration","src":"14216:47:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"14247:9:69","nodeType":"YulIdentifier","src":"14247:9:69"},{"kind":"number","nativeSrc":"14258:3:69","nodeType":"YulLiteral","src":"14258:3:69","type":"","value":"160"}],"functionName":{"name":"add","nativeSrc":"14243:3:69","nodeType":"YulIdentifier","src":"14243:3:69"},"nativeSrc":"14243:19:69","nodeType":"YulFunctionCall","src":"14243:19:69"}],"functionName":{"name":"calldataload","nativeSrc":"14230:12:69","nodeType":"YulIdentifier","src":"14230:12:69"},"nativeSrc":"14230:33:69","nodeType":"YulFunctionCall","src":"14230:33:69"},"variables":[{"name":"offset","nativeSrc":"14220:6:69","nodeType":"YulTypedName","src":"14220:6:69","type":""}]},{"body":{"nativeSrc":"14310:83:69","nodeType":"YulBlock","src":"14310:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"14312:77:69","nodeType":"YulIdentifier","src":"14312:77:69"},"nativeSrc":"14312:79:69","nodeType":"YulFunctionCall","src":"14312:79:69"},"nativeSrc":"14312:79:69","nodeType":"YulExpressionStatement","src":"14312:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"14282:6:69","nodeType":"YulIdentifier","src":"14282:6:69"},{"kind":"number","nativeSrc":"14290:18:69","nodeType":"YulLiteral","src":"14290:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"14279:2:69","nodeType":"YulIdentifier","src":"14279:2:69"},"nativeSrc":"14279:30:69","nodeType":"YulFunctionCall","src":"14279:30:69"},"nativeSrc":"14276:117:69","nodeType":"YulIf","src":"14276:117:69"},{"nativeSrc":"14407:73:69","nodeType":"YulAssignment","src":"14407:73:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"14452:9:69","nodeType":"YulIdentifier","src":"14452:9:69"},{"name":"offset","nativeSrc":"14463:6:69","nodeType":"YulIdentifier","src":"14463:6:69"}],"functionName":{"name":"add","nativeSrc":"14448:3:69","nodeType":"YulIdentifier","src":"14448:3:69"},"nativeSrc":"14448:22:69","nodeType":"YulFunctionCall","src":"14448:22:69"},{"name":"dataEnd","nativeSrc":"14472:7:69","nodeType":"YulIdentifier","src":"14472:7:69"}],"functionName":{"name":"abi_decode_t_string_memory_ptr","nativeSrc":"14417:30:69","nodeType":"YulIdentifier","src":"14417:30:69"},"nativeSrc":"14417:63:69","nodeType":"YulFunctionCall","src":"14417:63:69"},"variableNames":[{"name":"value5","nativeSrc":"14407:6:69","nodeType":"YulIdentifier","src":"14407:6:69"}]}]},{"nativeSrc":"14500:117:69","nodeType":"YulBlock","src":"14500:117:69","statements":[{"nativeSrc":"14515:17:69","nodeType":"YulVariableDeclaration","src":"14515:17:69","value":{"kind":"number","nativeSrc":"14529:3:69","nodeType":"YulLiteral","src":"14529:3:69","type":"","value":"192"},"variables":[{"name":"offset","nativeSrc":"14519:6:69","nodeType":"YulTypedName","src":"14519:6:69","type":""}]},{"nativeSrc":"14546:61:69","nodeType":"YulAssignment","src":"14546:61:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"14579:9:69","nodeType":"YulIdentifier","src":"14579:9:69"},{"name":"offset","nativeSrc":"14590:6:69","nodeType":"YulIdentifier","src":"14590:6:69"}],"functionName":{"name":"add","nativeSrc":"14575:3:69","nodeType":"YulIdentifier","src":"14575:3:69"},"nativeSrc":"14575:22:69","nodeType":"YulFunctionCall","src":"14575:22:69"},{"name":"dataEnd","nativeSrc":"14599:7:69","nodeType":"YulIdentifier","src":"14599:7:69"}],"functionName":{"name":"abi_decode_t_uint8","nativeSrc":"14556:18:69","nodeType":"YulIdentifier","src":"14556:18:69"},"nativeSrc":"14556:51:69","nodeType":"YulFunctionCall","src":"14556:51:69"},"variableNames":[{"name":"value6","nativeSrc":"14546:6:69","nodeType":"YulIdentifier","src":"14546:6:69"}]}]},{"nativeSrc":"14627:119:69","nodeType":"YulBlock","src":"14627:119:69","statements":[{"nativeSrc":"14642:17:69","nodeType":"YulVariableDeclaration","src":"14642:17:69","value":{"kind":"number","nativeSrc":"14656:3:69","nodeType":"YulLiteral","src":"14656:3:69","type":"","value":"224"},"variables":[{"name":"offset","nativeSrc":"14646:6:69","nodeType":"YulTypedName","src":"14646:6:69","type":""}]},{"nativeSrc":"14673:63:69","nodeType":"YulAssignment","src":"14673:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"14708:9:69","nodeType":"YulIdentifier","src":"14708:9:69"},{"name":"offset","nativeSrc":"14719:6:69","nodeType":"YulIdentifier","src":"14719:6:69"}],"functionName":{"name":"add","nativeSrc":"14704:3:69","nodeType":"YulIdentifier","src":"14704:3:69"},"nativeSrc":"14704:22:69","nodeType":"YulFunctionCall","src":"14704:22:69"},{"name":"dataEnd","nativeSrc":"14728:7:69","nodeType":"YulIdentifier","src":"14728:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"14683:20:69","nodeType":"YulIdentifier","src":"14683:20:69"},"nativeSrc":"14683:53:69","nodeType":"YulFunctionCall","src":"14683:53:69"},"variableNames":[{"name":"value7","nativeSrc":"14673:6:69","nodeType":"YulIdentifier","src":"14673:6:69"}]}]},{"nativeSrc":"14756:119:69","nodeType":"YulBlock","src":"14756:119:69","statements":[{"nativeSrc":"14771:17:69","nodeType":"YulVariableDeclaration","src":"14771:17:69","value":{"kind":"number","nativeSrc":"14785:3:69","nodeType":"YulLiteral","src":"14785:3:69","type":"","value":"256"},"variables":[{"name":"offset","nativeSrc":"14775:6:69","nodeType":"YulTypedName","src":"14775:6:69","type":""}]},{"nativeSrc":"14802:63:69","nodeType":"YulAssignment","src":"14802:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"14837:9:69","nodeType":"YulIdentifier","src":"14837:9:69"},{"name":"offset","nativeSrc":"14848:6:69","nodeType":"YulIdentifier","src":"14848:6:69"}],"functionName":{"name":"add","nativeSrc":"14833:3:69","nodeType":"YulIdentifier","src":"14833:3:69"},"nativeSrc":"14833:22:69","nodeType":"YulFunctionCall","src":"14833:22:69"},{"name":"dataEnd","nativeSrc":"14857:7:69","nodeType":"YulIdentifier","src":"14857:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"14812:20:69","nodeType":"YulIdentifier","src":"14812:20:69"},"nativeSrc":"14812:53:69","nodeType":"YulFunctionCall","src":"14812:53:69"},"variableNames":[{"name":"value8","nativeSrc":"14802:6:69","nodeType":"YulIdentifier","src":"14802:6:69"}]}]},{"nativeSrc":"14885:156:69","nodeType":"YulBlock","src":"14885:156:69","statements":[{"nativeSrc":"14900:17:69","nodeType":"YulVariableDeclaration","src":"14900:17:69","value":{"kind":"number","nativeSrc":"14914:3:69","nodeType":"YulLiteral","src":"14914:3:69","type":"","value":"288"},"variables":[{"name":"offset","nativeSrc":"14904:6:69","nodeType":"YulTypedName","src":"14904:6:69","type":""}]},{"nativeSrc":"14931:100:69","nodeType":"YulAssignment","src":"14931:100:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"15003:9:69","nodeType":"YulIdentifier","src":"15003:9:69"},{"name":"offset","nativeSrc":"15014:6:69","nodeType":"YulIdentifier","src":"15014:6:69"}],"functionName":{"name":"add","nativeSrc":"14999:3:69","nodeType":"YulIdentifier","src":"14999:3:69"},"nativeSrc":"14999:22:69","nodeType":"YulFunctionCall","src":"14999:22:69"},{"name":"dataEnd","nativeSrc":"15023:7:69","nodeType":"YulIdentifier","src":"15023:7:69"}],"functionName":{"name":"abi_decode_t_struct$_RiskManagementInit_$15613_memory_ptr","nativeSrc":"14941:57:69","nodeType":"YulIdentifier","src":"14941:57:69"},"nativeSrc":"14941:90:69","nodeType":"YulFunctionCall","src":"14941:90:69"},"variableNames":[{"name":"value9","nativeSrc":"14931:6:69","nodeType":"YulIdentifier","src":"14931:6:69"}]}]},{"nativeSrc":"15051:120:69","nodeType":"YulBlock","src":"15051:120:69","statements":[{"nativeSrc":"15066:17:69","nodeType":"YulVariableDeclaration","src":"15066:17:69","value":{"kind":"number","nativeSrc":"15080:3:69","nodeType":"YulLiteral","src":"15080:3:69","type":"","value":"352"},"variables":[{"name":"offset","nativeSrc":"15070:6:69","nodeType":"YulTypedName","src":"15070:6:69","type":""}]},{"nativeSrc":"15097:64:69","nodeType":"YulAssignment","src":"15097:64:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"15133:9:69","nodeType":"YulIdentifier","src":"15133:9:69"},{"name":"offset","nativeSrc":"15144:6:69","nodeType":"YulIdentifier","src":"15144:6:69"}],"functionName":{"name":"add","nativeSrc":"15129:3:69","nodeType":"YulIdentifier","src":"15129:3:69"},"nativeSrc":"15129:22:69","nodeType":"YulFunctionCall","src":"15129:22:69"},{"name":"dataEnd","nativeSrc":"15153:7:69","nodeType":"YulIdentifier","src":"15153:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"15108:20:69","nodeType":"YulIdentifier","src":"15108:20:69"},"nativeSrc":"15108:53:69","nodeType":"YulFunctionCall","src":"15108:53:69"},"variableNames":[{"name":"value10","nativeSrc":"15097:7:69","nodeType":"YulIdentifier","src":"15097:7:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_contract$_ComptrollerInterface_$9353t_contract$_InterestRateModel_$10266t_uint256t_string_memory_ptrt_string_memory_ptrt_uint8t_addresst_addresst_struct$_RiskManagementInit_$15613_memory_ptrt_uint256","nativeSrc":"12847:2331:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"13084:9:69","nodeType":"YulTypedName","src":"13084:9:69","type":""},{"name":"dataEnd","nativeSrc":"13095:7:69","nodeType":"YulTypedName","src":"13095:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"13107:6:69","nodeType":"YulTypedName","src":"13107:6:69","type":""},{"name":"value1","nativeSrc":"13115:6:69","nodeType":"YulTypedName","src":"13115:6:69","type":""},{"name":"value2","nativeSrc":"13123:6:69","nodeType":"YulTypedName","src":"13123:6:69","type":""},{"name":"value3","nativeSrc":"13131:6:69","nodeType":"YulTypedName","src":"13131:6:69","type":""},{"name":"value4","nativeSrc":"13139:6:69","nodeType":"YulTypedName","src":"13139:6:69","type":""},{"name":"value5","nativeSrc":"13147:6:69","nodeType":"YulTypedName","src":"13147:6:69","type":""},{"name":"value6","nativeSrc":"13155:6:69","nodeType":"YulTypedName","src":"13155:6:69","type":""},{"name":"value7","nativeSrc":"13163:6:69","nodeType":"YulTypedName","src":"13163:6:69","type":""},{"name":"value8","nativeSrc":"13171:6:69","nodeType":"YulTypedName","src":"13171:6:69","type":""},{"name":"value9","nativeSrc":"13179:6:69","nodeType":"YulTypedName","src":"13179:6:69","type":""},{"name":"value10","nativeSrc":"13187:7:69","nodeType":"YulTypedName","src":"13187:7:69","type":""}],"src":"12847:2331:69"},{"body":{"nativeSrc":"15254:51:69","nodeType":"YulBlock","src":"15254:51:69","statements":[{"nativeSrc":"15264:35:69","nodeType":"YulAssignment","src":"15264:35:69","value":{"arguments":[{"name":"value","nativeSrc":"15293:5:69","nodeType":"YulIdentifier","src":"15293:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"15275:17:69","nodeType":"YulIdentifier","src":"15275:17:69"},"nativeSrc":"15275:24:69","nodeType":"YulFunctionCall","src":"15275:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"15264:7:69","nodeType":"YulIdentifier","src":"15264:7:69"}]}]},"name":"cleanup_t_contract$_VTokenInterface_$16106","nativeSrc":"15184:121:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"15236:5:69","nodeType":"YulTypedName","src":"15236:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"15246:7:69","nodeType":"YulTypedName","src":"15246:7:69","type":""}],"src":"15184:121:69"},{"body":{"nativeSrc":"15379:104:69","nodeType":"YulBlock","src":"15379:104:69","statements":[{"body":{"nativeSrc":"15461:16:69","nodeType":"YulBlock","src":"15461:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"15470:1:69","nodeType":"YulLiteral","src":"15470:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"15473:1:69","nodeType":"YulLiteral","src":"15473:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"15463:6:69","nodeType":"YulIdentifier","src":"15463:6:69"},"nativeSrc":"15463:12:69","nodeType":"YulFunctionCall","src":"15463:12:69"},"nativeSrc":"15463:12:69","nodeType":"YulExpressionStatement","src":"15463:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"15402:5:69","nodeType":"YulIdentifier","src":"15402:5:69"},{"arguments":[{"name":"value","nativeSrc":"15452:5:69","nodeType":"YulIdentifier","src":"15452:5:69"}],"functionName":{"name":"cleanup_t_contract$_VTokenInterface_$16106","nativeSrc":"15409:42:69","nodeType":"YulIdentifier","src":"15409:42:69"},"nativeSrc":"15409:49:69","nodeType":"YulFunctionCall","src":"15409:49:69"}],"functionName":{"name":"eq","nativeSrc":"15399:2:69","nodeType":"YulIdentifier","src":"15399:2:69"},"nativeSrc":"15399:60:69","nodeType":"YulFunctionCall","src":"15399:60:69"}],"functionName":{"name":"iszero","nativeSrc":"15392:6:69","nodeType":"YulIdentifier","src":"15392:6:69"},"nativeSrc":"15392:68:69","nodeType":"YulFunctionCall","src":"15392:68:69"},"nativeSrc":"15389:88:69","nodeType":"YulIf","src":"15389:88:69"}]},"name":"validator_revert_t_contract$_VTokenInterface_$16106","nativeSrc":"15311:172:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"15372:5:69","nodeType":"YulTypedName","src":"15372:5:69","type":""}],"src":"15311:172:69"},{"body":{"nativeSrc":"15566:112:69","nodeType":"YulBlock","src":"15566:112:69","statements":[{"nativeSrc":"15576:29:69","nodeType":"YulAssignment","src":"15576:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"15598:6:69","nodeType":"YulIdentifier","src":"15598:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"15585:12:69","nodeType":"YulIdentifier","src":"15585:12:69"},"nativeSrc":"15585:20:69","nodeType":"YulFunctionCall","src":"15585:20:69"},"variableNames":[{"name":"value","nativeSrc":"15576:5:69","nodeType":"YulIdentifier","src":"15576:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"15666:5:69","nodeType":"YulIdentifier","src":"15666:5:69"}],"functionName":{"name":"validator_revert_t_contract$_VTokenInterface_$16106","nativeSrc":"15614:51:69","nodeType":"YulIdentifier","src":"15614:51:69"},"nativeSrc":"15614:58:69","nodeType":"YulFunctionCall","src":"15614:58:69"},"nativeSrc":"15614:58:69","nodeType":"YulExpressionStatement","src":"15614:58:69"}]},"name":"abi_decode_t_contract$_VTokenInterface_$16106","nativeSrc":"15489:189:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"15544:6:69","nodeType":"YulTypedName","src":"15544:6:69","type":""},{"name":"end","nativeSrc":"15552:3:69","nodeType":"YulTypedName","src":"15552:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"15560:5:69","nodeType":"YulTypedName","src":"15560:5:69","type":""}],"src":"15489:189:69"},{"body":{"nativeSrc":"15724:76:69","nodeType":"YulBlock","src":"15724:76:69","statements":[{"body":{"nativeSrc":"15778:16:69","nodeType":"YulBlock","src":"15778:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"15787:1:69","nodeType":"YulLiteral","src":"15787:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"15790:1:69","nodeType":"YulLiteral","src":"15790:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"15780:6:69","nodeType":"YulIdentifier","src":"15780:6:69"},"nativeSrc":"15780:12:69","nodeType":"YulFunctionCall","src":"15780:12:69"},"nativeSrc":"15780:12:69","nodeType":"YulExpressionStatement","src":"15780:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"15747:5:69","nodeType":"YulIdentifier","src":"15747:5:69"},{"arguments":[{"name":"value","nativeSrc":"15769:5:69","nodeType":"YulIdentifier","src":"15769:5:69"}],"functionName":{"name":"cleanup_t_bool","nativeSrc":"15754:14:69","nodeType":"YulIdentifier","src":"15754:14:69"},"nativeSrc":"15754:21:69","nodeType":"YulFunctionCall","src":"15754:21:69"}],"functionName":{"name":"eq","nativeSrc":"15744:2:69","nodeType":"YulIdentifier","src":"15744:2:69"},"nativeSrc":"15744:32:69","nodeType":"YulFunctionCall","src":"15744:32:69"}],"functionName":{"name":"iszero","nativeSrc":"15737:6:69","nodeType":"YulIdentifier","src":"15737:6:69"},"nativeSrc":"15737:40:69","nodeType":"YulFunctionCall","src":"15737:40:69"},"nativeSrc":"15734:60:69","nodeType":"YulIf","src":"15734:60:69"}]},"name":"validator_revert_t_bool","nativeSrc":"15684:116:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"15717:5:69","nodeType":"YulTypedName","src":"15717:5:69","type":""}],"src":"15684:116:69"},{"body":{"nativeSrc":"15855:84:69","nodeType":"YulBlock","src":"15855:84:69","statements":[{"nativeSrc":"15865:29:69","nodeType":"YulAssignment","src":"15865:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"15887:6:69","nodeType":"YulIdentifier","src":"15887:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"15874:12:69","nodeType":"YulIdentifier","src":"15874:12:69"},"nativeSrc":"15874:20:69","nodeType":"YulFunctionCall","src":"15874:20:69"},"variableNames":[{"name":"value","nativeSrc":"15865:5:69","nodeType":"YulIdentifier","src":"15865:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"15927:5:69","nodeType":"YulIdentifier","src":"15927:5:69"}],"functionName":{"name":"validator_revert_t_bool","nativeSrc":"15903:23:69","nodeType":"YulIdentifier","src":"15903:23:69"},"nativeSrc":"15903:30:69","nodeType":"YulFunctionCall","src":"15903:30:69"},"nativeSrc":"15903:30:69","nodeType":"YulExpressionStatement","src":"15903:30:69"}]},"name":"abi_decode_t_bool","nativeSrc":"15806:133:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"15833:6:69","nodeType":"YulTypedName","src":"15833:6:69","type":""},{"name":"end","nativeSrc":"15841:3:69","nodeType":"YulTypedName","src":"15841:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"15849:5:69","nodeType":"YulTypedName","src":"15849:5:69","type":""}],"src":"15806:133:69"},{"body":{"nativeSrc":"16101:799:69","nodeType":"YulBlock","src":"16101:799:69","statements":[{"body":{"nativeSrc":"16148:83:69","nodeType":"YulBlock","src":"16148:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"16150:77:69","nodeType":"YulIdentifier","src":"16150:77:69"},"nativeSrc":"16150:79:69","nodeType":"YulFunctionCall","src":"16150:79:69"},"nativeSrc":"16150:79:69","nodeType":"YulExpressionStatement","src":"16150:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"16122:7:69","nodeType":"YulIdentifier","src":"16122:7:69"},{"name":"headStart","nativeSrc":"16131:9:69","nodeType":"YulIdentifier","src":"16131:9:69"}],"functionName":{"name":"sub","nativeSrc":"16118:3:69","nodeType":"YulIdentifier","src":"16118:3:69"},"nativeSrc":"16118:23:69","nodeType":"YulFunctionCall","src":"16118:23:69"},{"kind":"number","nativeSrc":"16143:3:69","nodeType":"YulLiteral","src":"16143:3:69","type":"","value":"160"}],"functionName":{"name":"slt","nativeSrc":"16114:3:69","nodeType":"YulIdentifier","src":"16114:3:69"},"nativeSrc":"16114:33:69","nodeType":"YulFunctionCall","src":"16114:33:69"},"nativeSrc":"16111:120:69","nodeType":"YulIf","src":"16111:120:69"},{"nativeSrc":"16241:117:69","nodeType":"YulBlock","src":"16241:117:69","statements":[{"nativeSrc":"16256:15:69","nodeType":"YulVariableDeclaration","src":"16256:15:69","value":{"kind":"number","nativeSrc":"16270:1:69","nodeType":"YulLiteral","src":"16270:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"16260:6:69","nodeType":"YulTypedName","src":"16260:6:69","type":""}]},{"nativeSrc":"16285:63:69","nodeType":"YulAssignment","src":"16285:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"16320:9:69","nodeType":"YulIdentifier","src":"16320:9:69"},{"name":"offset","nativeSrc":"16331:6:69","nodeType":"YulIdentifier","src":"16331:6:69"}],"functionName":{"name":"add","nativeSrc":"16316:3:69","nodeType":"YulIdentifier","src":"16316:3:69"},"nativeSrc":"16316:22:69","nodeType":"YulFunctionCall","src":"16316:22:69"},{"name":"dataEnd","nativeSrc":"16340:7:69","nodeType":"YulIdentifier","src":"16340:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"16295:20:69","nodeType":"YulIdentifier","src":"16295:20:69"},"nativeSrc":"16295:53:69","nodeType":"YulFunctionCall","src":"16295:53:69"},"variableNames":[{"name":"value0","nativeSrc":"16285:6:69","nodeType":"YulIdentifier","src":"16285:6:69"}]}]},{"nativeSrc":"16368:118:69","nodeType":"YulBlock","src":"16368:118:69","statements":[{"nativeSrc":"16383:16:69","nodeType":"YulVariableDeclaration","src":"16383:16:69","value":{"kind":"number","nativeSrc":"16397:2:69","nodeType":"YulLiteral","src":"16397:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"16387:6:69","nodeType":"YulTypedName","src":"16387:6:69","type":""}]},{"nativeSrc":"16413:63:69","nodeType":"YulAssignment","src":"16413:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"16448:9:69","nodeType":"YulIdentifier","src":"16448:9:69"},{"name":"offset","nativeSrc":"16459:6:69","nodeType":"YulIdentifier","src":"16459:6:69"}],"functionName":{"name":"add","nativeSrc":"16444:3:69","nodeType":"YulIdentifier","src":"16444:3:69"},"nativeSrc":"16444:22:69","nodeType":"YulFunctionCall","src":"16444:22:69"},{"name":"dataEnd","nativeSrc":"16468:7:69","nodeType":"YulIdentifier","src":"16468:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"16423:20:69","nodeType":"YulIdentifier","src":"16423:20:69"},"nativeSrc":"16423:53:69","nodeType":"YulFunctionCall","src":"16423:53:69"},"variableNames":[{"name":"value1","nativeSrc":"16413:6:69","nodeType":"YulIdentifier","src":"16413:6:69"}]}]},{"nativeSrc":"16496:118:69","nodeType":"YulBlock","src":"16496:118:69","statements":[{"nativeSrc":"16511:16:69","nodeType":"YulVariableDeclaration","src":"16511:16:69","value":{"kind":"number","nativeSrc":"16525:2:69","nodeType":"YulLiteral","src":"16525:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"16515:6:69","nodeType":"YulTypedName","src":"16515:6:69","type":""}]},{"nativeSrc":"16541:63:69","nodeType":"YulAssignment","src":"16541:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"16576:9:69","nodeType":"YulIdentifier","src":"16576:9:69"},{"name":"offset","nativeSrc":"16587:6:69","nodeType":"YulIdentifier","src":"16587:6:69"}],"functionName":{"name":"add","nativeSrc":"16572:3:69","nodeType":"YulIdentifier","src":"16572:3:69"},"nativeSrc":"16572:22:69","nodeType":"YulFunctionCall","src":"16572:22:69"},{"name":"dataEnd","nativeSrc":"16596:7:69","nodeType":"YulIdentifier","src":"16596:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"16551:20:69","nodeType":"YulIdentifier","src":"16551:20:69"},"nativeSrc":"16551:53:69","nodeType":"YulFunctionCall","src":"16551:53:69"},"variableNames":[{"name":"value2","nativeSrc":"16541:6:69","nodeType":"YulIdentifier","src":"16541:6:69"}]}]},{"nativeSrc":"16624:143:69","nodeType":"YulBlock","src":"16624:143:69","statements":[{"nativeSrc":"16639:16:69","nodeType":"YulVariableDeclaration","src":"16639:16:69","value":{"kind":"number","nativeSrc":"16653:2:69","nodeType":"YulLiteral","src":"16653:2:69","type":"","value":"96"},"variables":[{"name":"offset","nativeSrc":"16643:6:69","nodeType":"YulTypedName","src":"16643:6:69","type":""}]},{"nativeSrc":"16669:88:69","nodeType":"YulAssignment","src":"16669:88:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"16729:9:69","nodeType":"YulIdentifier","src":"16729:9:69"},{"name":"offset","nativeSrc":"16740:6:69","nodeType":"YulIdentifier","src":"16740:6:69"}],"functionName":{"name":"add","nativeSrc":"16725:3:69","nodeType":"YulIdentifier","src":"16725:3:69"},"nativeSrc":"16725:22:69","nodeType":"YulFunctionCall","src":"16725:22:69"},{"name":"dataEnd","nativeSrc":"16749:7:69","nodeType":"YulIdentifier","src":"16749:7:69"}],"functionName":{"name":"abi_decode_t_contract$_VTokenInterface_$16106","nativeSrc":"16679:45:69","nodeType":"YulIdentifier","src":"16679:45:69"},"nativeSrc":"16679:78:69","nodeType":"YulFunctionCall","src":"16679:78:69"},"variableNames":[{"name":"value3","nativeSrc":"16669:6:69","nodeType":"YulIdentifier","src":"16669:6:69"}]}]},{"nativeSrc":"16777:116:69","nodeType":"YulBlock","src":"16777:116:69","statements":[{"nativeSrc":"16792:17:69","nodeType":"YulVariableDeclaration","src":"16792:17:69","value":{"kind":"number","nativeSrc":"16806:3:69","nodeType":"YulLiteral","src":"16806:3:69","type":"","value":"128"},"variables":[{"name":"offset","nativeSrc":"16796:6:69","nodeType":"YulTypedName","src":"16796:6:69","type":""}]},{"nativeSrc":"16823:60:69","nodeType":"YulAssignment","src":"16823:60:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"16855:9:69","nodeType":"YulIdentifier","src":"16855:9:69"},{"name":"offset","nativeSrc":"16866:6:69","nodeType":"YulIdentifier","src":"16866:6:69"}],"functionName":{"name":"add","nativeSrc":"16851:3:69","nodeType":"YulIdentifier","src":"16851:3:69"},"nativeSrc":"16851:22:69","nodeType":"YulFunctionCall","src":"16851:22:69"},{"name":"dataEnd","nativeSrc":"16875:7:69","nodeType":"YulIdentifier","src":"16875:7:69"}],"functionName":{"name":"abi_decode_t_bool","nativeSrc":"16833:17:69","nodeType":"YulIdentifier","src":"16833:17:69"},"nativeSrc":"16833:50:69","nodeType":"YulFunctionCall","src":"16833:50:69"},"variableNames":[{"name":"value4","nativeSrc":"16823:6:69","nodeType":"YulIdentifier","src":"16823:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_contract$_VTokenInterface_$16106t_bool","nativeSrc":"15945:955:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"16039:9:69","nodeType":"YulTypedName","src":"16039:9:69","type":""},{"name":"dataEnd","nativeSrc":"16050:7:69","nodeType":"YulTypedName","src":"16050:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"16062:6:69","nodeType":"YulTypedName","src":"16062:6:69","type":""},{"name":"value1","nativeSrc":"16070:6:69","nodeType":"YulTypedName","src":"16070:6:69","type":""},{"name":"value2","nativeSrc":"16078:6:69","nodeType":"YulTypedName","src":"16078:6:69","type":""},{"name":"value3","nativeSrc":"16086:6:69","nodeType":"YulTypedName","src":"16086:6:69","type":""},{"name":"value4","nativeSrc":"16094:6:69","nodeType":"YulTypedName","src":"16094:6:69","type":""}],"src":"15945:955:69"},{"body":{"nativeSrc":"16999:290:69","nodeType":"YulBlock","src":"16999:290:69","statements":[{"body":{"nativeSrc":"17045:83:69","nodeType":"YulBlock","src":"17045:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"17047:77:69","nodeType":"YulIdentifier","src":"17047:77:69"},"nativeSrc":"17047:79:69","nodeType":"YulFunctionCall","src":"17047:79:69"},"nativeSrc":"17047:79:69","nodeType":"YulExpressionStatement","src":"17047:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"17020:7:69","nodeType":"YulIdentifier","src":"17020:7:69"},{"name":"headStart","nativeSrc":"17029:9:69","nodeType":"YulIdentifier","src":"17029:9:69"}],"functionName":{"name":"sub","nativeSrc":"17016:3:69","nodeType":"YulIdentifier","src":"17016:3:69"},"nativeSrc":"17016:23:69","nodeType":"YulFunctionCall","src":"17016:23:69"},{"kind":"number","nativeSrc":"17041:2:69","nodeType":"YulLiteral","src":"17041:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"17012:3:69","nodeType":"YulIdentifier","src":"17012:3:69"},"nativeSrc":"17012:32:69","nodeType":"YulFunctionCall","src":"17012:32:69"},"nativeSrc":"17009:119:69","nodeType":"YulIf","src":"17009:119:69"},{"nativeSrc":"17138:144:69","nodeType":"YulBlock","src":"17138:144:69","statements":[{"nativeSrc":"17153:15:69","nodeType":"YulVariableDeclaration","src":"17153:15:69","value":{"kind":"number","nativeSrc":"17167:1:69","nodeType":"YulLiteral","src":"17167:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"17157:6:69","nodeType":"YulTypedName","src":"17157:6:69","type":""}]},{"nativeSrc":"17182:90:69","nodeType":"YulAssignment","src":"17182:90:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"17244:9:69","nodeType":"YulIdentifier","src":"17244:9:69"},{"name":"offset","nativeSrc":"17255:6:69","nodeType":"YulIdentifier","src":"17255:6:69"}],"functionName":{"name":"add","nativeSrc":"17240:3:69","nodeType":"YulIdentifier","src":"17240:3:69"},"nativeSrc":"17240:22:69","nodeType":"YulFunctionCall","src":"17240:22:69"},{"name":"dataEnd","nativeSrc":"17264:7:69","nodeType":"YulIdentifier","src":"17264:7:69"}],"functionName":{"name":"abi_decode_t_contract$_InterestRateModel_$10266","nativeSrc":"17192:47:69","nodeType":"YulIdentifier","src":"17192:47:69"},"nativeSrc":"17192:80:69","nodeType":"YulFunctionCall","src":"17192:80:69"},"variableNames":[{"name":"value0","nativeSrc":"17182:6:69","nodeType":"YulIdentifier","src":"17182:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_InterestRateModel_$10266","nativeSrc":"16906:383:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"16969:9:69","nodeType":"YulTypedName","src":"16969:9:69","type":""},{"name":"dataEnd","nativeSrc":"16980:7:69","nodeType":"YulTypedName","src":"16980:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"16992:6:69","nodeType":"YulTypedName","src":"16992:6:69","type":""}],"src":"16906:383:69"},{"body":{"nativeSrc":"17387:66:69","nodeType":"YulBlock","src":"17387:66:69","statements":[{"nativeSrc":"17397:50:69","nodeType":"YulAssignment","src":"17397:50:69","value":{"arguments":[{"name":"value","nativeSrc":"17441:5:69","nodeType":"YulIdentifier","src":"17441:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"17410:30:69","nodeType":"YulIdentifier","src":"17410:30:69"},"nativeSrc":"17410:37:69","nodeType":"YulFunctionCall","src":"17410:37:69"},"variableNames":[{"name":"converted","nativeSrc":"17397:9:69","nodeType":"YulIdentifier","src":"17397:9:69"}]}]},"name":"convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address","nativeSrc":"17295:158:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"17367:5:69","nodeType":"YulTypedName","src":"17367:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"17377:9:69","nodeType":"YulTypedName","src":"17377:9:69","type":""}],"src":"17295:158:69"},{"body":{"nativeSrc":"17556:98:69","nodeType":"YulBlock","src":"17556:98:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"17573:3:69","nodeType":"YulIdentifier","src":"17573:3:69"},{"arguments":[{"name":"value","nativeSrc":"17641:5:69","nodeType":"YulIdentifier","src":"17641:5:69"}],"functionName":{"name":"convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address","nativeSrc":"17578:62:69","nodeType":"YulIdentifier","src":"17578:62:69"},"nativeSrc":"17578:69:69","nodeType":"YulFunctionCall","src":"17578:69:69"}],"functionName":{"name":"mstore","nativeSrc":"17566:6:69","nodeType":"YulIdentifier","src":"17566:6:69"},"nativeSrc":"17566:82:69","nodeType":"YulFunctionCall","src":"17566:82:69"},"nativeSrc":"17566:82:69","nodeType":"YulExpressionStatement","src":"17566:82:69"}]},"name":"abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack","nativeSrc":"17459:195:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"17544:5:69","nodeType":"YulTypedName","src":"17544:5:69","type":""},{"name":"pos","nativeSrc":"17551:3:69","nodeType":"YulTypedName","src":"17551:3:69","type":""}],"src":"17459:195:69"},{"body":{"nativeSrc":"17790:156:69","nodeType":"YulBlock","src":"17790:156:69","statements":[{"nativeSrc":"17800:26:69","nodeType":"YulAssignment","src":"17800:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"17812:9:69","nodeType":"YulIdentifier","src":"17812:9:69"},{"kind":"number","nativeSrc":"17823:2:69","nodeType":"YulLiteral","src":"17823:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"17808:3:69","nodeType":"YulIdentifier","src":"17808:3:69"},"nativeSrc":"17808:18:69","nodeType":"YulFunctionCall","src":"17808:18:69"},"variableNames":[{"name":"tail","nativeSrc":"17800:4:69","nodeType":"YulIdentifier","src":"17800:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"17912:6:69","nodeType":"YulIdentifier","src":"17912:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"17925:9:69","nodeType":"YulIdentifier","src":"17925:9:69"},{"kind":"number","nativeSrc":"17936:1:69","nodeType":"YulLiteral","src":"17936:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"17921:3:69","nodeType":"YulIdentifier","src":"17921:3:69"},"nativeSrc":"17921:17:69","nodeType":"YulFunctionCall","src":"17921:17:69"}],"functionName":{"name":"abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack","nativeSrc":"17836:75:69","nodeType":"YulIdentifier","src":"17836:75:69"},"nativeSrc":"17836:103:69","nodeType":"YulFunctionCall","src":"17836:103:69"},"nativeSrc":"17836:103:69","nodeType":"YulExpressionStatement","src":"17836:103:69"}]},"name":"abi_encode_tuple_t_contract$_IAccessControlManagerV8_$5080__to_t_address__fromStack_reversed","nativeSrc":"17660:286:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"17762:9:69","nodeType":"YulTypedName","src":"17762:9:69","type":""},{"name":"value0","nativeSrc":"17774:6:69","nodeType":"YulTypedName","src":"17774:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"17785:4:69","nodeType":"YulTypedName","src":"17785:4:69","type":""}],"src":"17660:286:69"},{"body":{"nativeSrc":"18134:371:69","nodeType":"YulBlock","src":"18134:371:69","statements":[{"nativeSrc":"18144:27:69","nodeType":"YulAssignment","src":"18144:27:69","value":{"arguments":[{"name":"headStart","nativeSrc":"18156:9:69","nodeType":"YulIdentifier","src":"18156:9:69"},{"kind":"number","nativeSrc":"18167:3:69","nodeType":"YulLiteral","src":"18167:3:69","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"18152:3:69","nodeType":"YulIdentifier","src":"18152:3:69"},"nativeSrc":"18152:19:69","nodeType":"YulFunctionCall","src":"18152:19:69"},"variableNames":[{"name":"tail","nativeSrc":"18144:4:69","nodeType":"YulIdentifier","src":"18144:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"18225:6:69","nodeType":"YulIdentifier","src":"18225:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"18238:9:69","nodeType":"YulIdentifier","src":"18238:9:69"},{"kind":"number","nativeSrc":"18249:1:69","nodeType":"YulLiteral","src":"18249:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"18234:3:69","nodeType":"YulIdentifier","src":"18234:3:69"},"nativeSrc":"18234:17:69","nodeType":"YulFunctionCall","src":"18234:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"18181:43:69","nodeType":"YulIdentifier","src":"18181:43:69"},"nativeSrc":"18181:71:69","nodeType":"YulFunctionCall","src":"18181:71:69"},"nativeSrc":"18181:71:69","nodeType":"YulExpressionStatement","src":"18181:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"18306:6:69","nodeType":"YulIdentifier","src":"18306:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"18319:9:69","nodeType":"YulIdentifier","src":"18319:9:69"},{"kind":"number","nativeSrc":"18330:2:69","nodeType":"YulLiteral","src":"18330:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"18315:3:69","nodeType":"YulIdentifier","src":"18315:3:69"},"nativeSrc":"18315:18:69","nodeType":"YulFunctionCall","src":"18315:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"18262:43:69","nodeType":"YulIdentifier","src":"18262:43:69"},"nativeSrc":"18262:72:69","nodeType":"YulFunctionCall","src":"18262:72:69"},"nativeSrc":"18262:72:69","nodeType":"YulExpressionStatement","src":"18262:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"18388:6:69","nodeType":"YulIdentifier","src":"18388:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"18401:9:69","nodeType":"YulIdentifier","src":"18401:9:69"},{"kind":"number","nativeSrc":"18412:2:69","nodeType":"YulLiteral","src":"18412:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"18397:3:69","nodeType":"YulIdentifier","src":"18397:3:69"},"nativeSrc":"18397:18:69","nodeType":"YulFunctionCall","src":"18397:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"18344:43:69","nodeType":"YulIdentifier","src":"18344:43:69"},"nativeSrc":"18344:72:69","nodeType":"YulFunctionCall","src":"18344:72:69"},"nativeSrc":"18344:72:69","nodeType":"YulExpressionStatement","src":"18344:72:69"},{"expression":{"arguments":[{"name":"value3","nativeSrc":"18470:6:69","nodeType":"YulIdentifier","src":"18470:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"18483:9:69","nodeType":"YulIdentifier","src":"18483:9:69"},{"kind":"number","nativeSrc":"18494:2:69","nodeType":"YulLiteral","src":"18494:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"18479:3:69","nodeType":"YulIdentifier","src":"18479:3:69"},"nativeSrc":"18479:18:69","nodeType":"YulFunctionCall","src":"18479:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"18426:43:69","nodeType":"YulIdentifier","src":"18426:43:69"},"nativeSrc":"18426:72:69","nodeType":"YulFunctionCall","src":"18426:72:69"},"nativeSrc":"18426:72:69","nodeType":"YulExpressionStatement","src":"18426:72:69"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"17952:553:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"18082:9:69","nodeType":"YulTypedName","src":"18082:9:69","type":""},{"name":"value3","nativeSrc":"18094:6:69","nodeType":"YulTypedName","src":"18094:6:69","type":""},{"name":"value2","nativeSrc":"18102:6:69","nodeType":"YulTypedName","src":"18102:6:69","type":""},{"name":"value1","nativeSrc":"18110:6:69","nodeType":"YulTypedName","src":"18110:6:69","type":""},{"name":"value0","nativeSrc":"18118:6:69","nodeType":"YulTypedName","src":"18118:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"18129:4:69","nodeType":"YulTypedName","src":"18129:4:69","type":""}],"src":"17952:553:69"},{"body":{"nativeSrc":"18594:391:69","nodeType":"YulBlock","src":"18594:391:69","statements":[{"body":{"nativeSrc":"18640:83:69","nodeType":"YulBlock","src":"18640:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"18642:77:69","nodeType":"YulIdentifier","src":"18642:77:69"},"nativeSrc":"18642:79:69","nodeType":"YulFunctionCall","src":"18642:79:69"},"nativeSrc":"18642:79:69","nodeType":"YulExpressionStatement","src":"18642:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"18615:7:69","nodeType":"YulIdentifier","src":"18615:7:69"},{"name":"headStart","nativeSrc":"18624:9:69","nodeType":"YulIdentifier","src":"18624:9:69"}],"functionName":{"name":"sub","nativeSrc":"18611:3:69","nodeType":"YulIdentifier","src":"18611:3:69"},"nativeSrc":"18611:23:69","nodeType":"YulFunctionCall","src":"18611:23:69"},{"kind":"number","nativeSrc":"18636:2:69","nodeType":"YulLiteral","src":"18636:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"18607:3:69","nodeType":"YulIdentifier","src":"18607:3:69"},"nativeSrc":"18607:32:69","nodeType":"YulFunctionCall","src":"18607:32:69"},"nativeSrc":"18604:119:69","nodeType":"YulIf","src":"18604:119:69"},{"nativeSrc":"18733:117:69","nodeType":"YulBlock","src":"18733:117:69","statements":[{"nativeSrc":"18748:15:69","nodeType":"YulVariableDeclaration","src":"18748:15:69","value":{"kind":"number","nativeSrc":"18762:1:69","nodeType":"YulLiteral","src":"18762:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"18752:6:69","nodeType":"YulTypedName","src":"18752:6:69","type":""}]},{"nativeSrc":"18777:63:69","nodeType":"YulAssignment","src":"18777:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"18812:9:69","nodeType":"YulIdentifier","src":"18812:9:69"},{"name":"offset","nativeSrc":"18823:6:69","nodeType":"YulIdentifier","src":"18823:6:69"}],"functionName":{"name":"add","nativeSrc":"18808:3:69","nodeType":"YulIdentifier","src":"18808:3:69"},"nativeSrc":"18808:22:69","nodeType":"YulFunctionCall","src":"18808:22:69"},{"name":"dataEnd","nativeSrc":"18832:7:69","nodeType":"YulIdentifier","src":"18832:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"18787:20:69","nodeType":"YulIdentifier","src":"18787:20:69"},"nativeSrc":"18787:53:69","nodeType":"YulFunctionCall","src":"18787:53:69"},"variableNames":[{"name":"value0","nativeSrc":"18777:6:69","nodeType":"YulIdentifier","src":"18777:6:69"}]}]},{"nativeSrc":"18860:118:69","nodeType":"YulBlock","src":"18860:118:69","statements":[{"nativeSrc":"18875:16:69","nodeType":"YulVariableDeclaration","src":"18875:16:69","value":{"kind":"number","nativeSrc":"18889:2:69","nodeType":"YulLiteral","src":"18889:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"18879:6:69","nodeType":"YulTypedName","src":"18879:6:69","type":""}]},{"nativeSrc":"18905:63:69","nodeType":"YulAssignment","src":"18905:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"18940:9:69","nodeType":"YulIdentifier","src":"18940:9:69"},{"name":"offset","nativeSrc":"18951:6:69","nodeType":"YulIdentifier","src":"18951:6:69"}],"functionName":{"name":"add","nativeSrc":"18936:3:69","nodeType":"YulIdentifier","src":"18936:3:69"},"nativeSrc":"18936:22:69","nodeType":"YulFunctionCall","src":"18936:22:69"},{"name":"dataEnd","nativeSrc":"18960:7:69","nodeType":"YulIdentifier","src":"18960:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"18915:20:69","nodeType":"YulIdentifier","src":"18915:20:69"},"nativeSrc":"18915:53:69","nodeType":"YulFunctionCall","src":"18915:53:69"},"variableNames":[{"name":"value1","nativeSrc":"18905:6:69","nodeType":"YulIdentifier","src":"18905:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_address","nativeSrc":"18511:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"18556:9:69","nodeType":"YulTypedName","src":"18556:9:69","type":""},{"name":"dataEnd","nativeSrc":"18567:7:69","nodeType":"YulTypedName","src":"18567:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"18579:6:69","nodeType":"YulTypedName","src":"18579:6:69","type":""},{"name":"value1","nativeSrc":"18587:6:69","nodeType":"YulTypedName","src":"18587:6:69","type":""}],"src":"18511:474:69"},{"body":{"nativeSrc":"19072:61:69","nodeType":"YulBlock","src":"19072:61:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"19089:3:69","nodeType":"YulIdentifier","src":"19089:3:69"},{"arguments":[{"name":"value","nativeSrc":"19120:5:69","nodeType":"YulIdentifier","src":"19120:5:69"}],"functionName":{"name":"cleanup_t_address_payable","nativeSrc":"19094:25:69","nodeType":"YulIdentifier","src":"19094:25:69"},"nativeSrc":"19094:32:69","nodeType":"YulFunctionCall","src":"19094:32:69"}],"functionName":{"name":"mstore","nativeSrc":"19082:6:69","nodeType":"YulIdentifier","src":"19082:6:69"},"nativeSrc":"19082:45:69","nodeType":"YulFunctionCall","src":"19082:45:69"},"nativeSrc":"19082:45:69","nodeType":"YulExpressionStatement","src":"19082:45:69"}]},"name":"abi_encode_t_address_payable_to_t_address_payable_fromStack","nativeSrc":"18991:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"19060:5:69","nodeType":"YulTypedName","src":"19060:5:69","type":""},{"name":"pos","nativeSrc":"19067:3:69","nodeType":"YulTypedName","src":"19067:3:69","type":""}],"src":"18991:142:69"},{"body":{"nativeSrc":"19253:140:69","nodeType":"YulBlock","src":"19253:140:69","statements":[{"nativeSrc":"19263:26:69","nodeType":"YulAssignment","src":"19263:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"19275:9:69","nodeType":"YulIdentifier","src":"19275:9:69"},{"kind":"number","nativeSrc":"19286:2:69","nodeType":"YulLiteral","src":"19286:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"19271:3:69","nodeType":"YulIdentifier","src":"19271:3:69"},"nativeSrc":"19271:18:69","nodeType":"YulFunctionCall","src":"19271:18:69"},"variableNames":[{"name":"tail","nativeSrc":"19263:4:69","nodeType":"YulIdentifier","src":"19263:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"19359:6:69","nodeType":"YulIdentifier","src":"19359:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"19372:9:69","nodeType":"YulIdentifier","src":"19372:9:69"},{"kind":"number","nativeSrc":"19383:1:69","nodeType":"YulLiteral","src":"19383:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"19368:3:69","nodeType":"YulIdentifier","src":"19368:3:69"},"nativeSrc":"19368:17:69","nodeType":"YulFunctionCall","src":"19368:17:69"}],"functionName":{"name":"abi_encode_t_address_payable_to_t_address_payable_fromStack","nativeSrc":"19299:59:69","nodeType":"YulIdentifier","src":"19299:59:69"},"nativeSrc":"19299:87:69","nodeType":"YulFunctionCall","src":"19299:87:69"},"nativeSrc":"19299:87:69","nodeType":"YulExpressionStatement","src":"19299:87:69"}]},"name":"abi_encode_tuple_t_address_payable__to_t_address_payable__fromStack_reversed","nativeSrc":"19139:254:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"19225:9:69","nodeType":"YulTypedName","src":"19225:9:69","type":""},{"name":"value0","nativeSrc":"19237:6:69","nodeType":"YulTypedName","src":"19237:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"19248:4:69","nodeType":"YulTypedName","src":"19248:4:69","type":""}],"src":"19139:254:69"},{"body":{"nativeSrc":"19486:66:69","nodeType":"YulBlock","src":"19486:66:69","statements":[{"nativeSrc":"19496:50:69","nodeType":"YulAssignment","src":"19496:50:69","value":{"arguments":[{"name":"value","nativeSrc":"19540:5:69","nodeType":"YulIdentifier","src":"19540:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"19509:30:69","nodeType":"YulIdentifier","src":"19509:30:69"},"nativeSrc":"19509:37:69","nodeType":"YulFunctionCall","src":"19509:37:69"},"variableNames":[{"name":"converted","nativeSrc":"19496:9:69","nodeType":"YulIdentifier","src":"19496:9:69"}]}]},"name":"convert_t_contract$_InterestRateModel_$10266_to_t_address","nativeSrc":"19399:153:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"19466:5:69","nodeType":"YulTypedName","src":"19466:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"19476:9:69","nodeType":"YulTypedName","src":"19476:9:69","type":""}],"src":"19399:153:69"},{"body":{"nativeSrc":"19650:93:69","nodeType":"YulBlock","src":"19650:93:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"19667:3:69","nodeType":"YulIdentifier","src":"19667:3:69"},{"arguments":[{"name":"value","nativeSrc":"19730:5:69","nodeType":"YulIdentifier","src":"19730:5:69"}],"functionName":{"name":"convert_t_contract$_InterestRateModel_$10266_to_t_address","nativeSrc":"19672:57:69","nodeType":"YulIdentifier","src":"19672:57:69"},"nativeSrc":"19672:64:69","nodeType":"YulFunctionCall","src":"19672:64:69"}],"functionName":{"name":"mstore","nativeSrc":"19660:6:69","nodeType":"YulIdentifier","src":"19660:6:69"},"nativeSrc":"19660:77:69","nodeType":"YulFunctionCall","src":"19660:77:69"},"nativeSrc":"19660:77:69","nodeType":"YulExpressionStatement","src":"19660:77:69"}]},"name":"abi_encode_t_contract$_InterestRateModel_$10266_to_t_address_fromStack","nativeSrc":"19558:185:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"19638:5:69","nodeType":"YulTypedName","src":"19638:5:69","type":""},{"name":"pos","nativeSrc":"19645:3:69","nodeType":"YulTypedName","src":"19645:3:69","type":""}],"src":"19558:185:69"},{"body":{"nativeSrc":"19874:151:69","nodeType":"YulBlock","src":"19874:151:69","statements":[{"nativeSrc":"19884:26:69","nodeType":"YulAssignment","src":"19884:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"19896:9:69","nodeType":"YulIdentifier","src":"19896:9:69"},{"kind":"number","nativeSrc":"19907:2:69","nodeType":"YulLiteral","src":"19907:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"19892:3:69","nodeType":"YulIdentifier","src":"19892:3:69"},"nativeSrc":"19892:18:69","nodeType":"YulFunctionCall","src":"19892:18:69"},"variableNames":[{"name":"tail","nativeSrc":"19884:4:69","nodeType":"YulIdentifier","src":"19884:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"19991:6:69","nodeType":"YulIdentifier","src":"19991:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"20004:9:69","nodeType":"YulIdentifier","src":"20004:9:69"},{"kind":"number","nativeSrc":"20015:1:69","nodeType":"YulLiteral","src":"20015:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"20000:3:69","nodeType":"YulIdentifier","src":"20000:3:69"},"nativeSrc":"20000:17:69","nodeType":"YulFunctionCall","src":"20000:17:69"}],"functionName":{"name":"abi_encode_t_contract$_InterestRateModel_$10266_to_t_address_fromStack","nativeSrc":"19920:70:69","nodeType":"YulIdentifier","src":"19920:70:69"},"nativeSrc":"19920:98:69","nodeType":"YulFunctionCall","src":"19920:98:69"},"nativeSrc":"19920:98:69","nodeType":"YulExpressionStatement","src":"19920:98:69"}]},"name":"abi_encode_tuple_t_contract$_InterestRateModel_$10266__to_t_address__fromStack_reversed","nativeSrc":"19749:276:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"19846:9:69","nodeType":"YulTypedName","src":"19846:9:69","type":""},{"name":"value0","nativeSrc":"19858:6:69","nodeType":"YulTypedName","src":"19858:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"19869:4:69","nodeType":"YulTypedName","src":"19869:4:69","type":""}],"src":"19749:276:69"},{"body":{"nativeSrc":"20156:544:69","nodeType":"YulBlock","src":"20156:544:69","statements":[{"body":{"nativeSrc":"20202:83:69","nodeType":"YulBlock","src":"20202:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"20204:77:69","nodeType":"YulIdentifier","src":"20204:77:69"},"nativeSrc":"20204:79:69","nodeType":"YulFunctionCall","src":"20204:79:69"},"nativeSrc":"20204:79:69","nodeType":"YulExpressionStatement","src":"20204:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"20177:7:69","nodeType":"YulIdentifier","src":"20177:7:69"},{"name":"headStart","nativeSrc":"20186:9:69","nodeType":"YulIdentifier","src":"20186:9:69"}],"functionName":{"name":"sub","nativeSrc":"20173:3:69","nodeType":"YulIdentifier","src":"20173:3:69"},"nativeSrc":"20173:23:69","nodeType":"YulFunctionCall","src":"20173:23:69"},{"kind":"number","nativeSrc":"20198:2:69","nodeType":"YulLiteral","src":"20198:2:69","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"20169:3:69","nodeType":"YulIdentifier","src":"20169:3:69"},"nativeSrc":"20169:32:69","nodeType":"YulFunctionCall","src":"20169:32:69"},"nativeSrc":"20166:119:69","nodeType":"YulIf","src":"20166:119:69"},{"nativeSrc":"20295:117:69","nodeType":"YulBlock","src":"20295:117:69","statements":[{"nativeSrc":"20310:15:69","nodeType":"YulVariableDeclaration","src":"20310:15:69","value":{"kind":"number","nativeSrc":"20324:1:69","nodeType":"YulLiteral","src":"20324:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"20314:6:69","nodeType":"YulTypedName","src":"20314:6:69","type":""}]},{"nativeSrc":"20339:63:69","nodeType":"YulAssignment","src":"20339:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"20374:9:69","nodeType":"YulIdentifier","src":"20374:9:69"},{"name":"offset","nativeSrc":"20385:6:69","nodeType":"YulIdentifier","src":"20385:6:69"}],"functionName":{"name":"add","nativeSrc":"20370:3:69","nodeType":"YulIdentifier","src":"20370:3:69"},"nativeSrc":"20370:22:69","nodeType":"YulFunctionCall","src":"20370:22:69"},{"name":"dataEnd","nativeSrc":"20394:7:69","nodeType":"YulIdentifier","src":"20394:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"20349:20:69","nodeType":"YulIdentifier","src":"20349:20:69"},"nativeSrc":"20349:53:69","nodeType":"YulFunctionCall","src":"20349:53:69"},"variableNames":[{"name":"value0","nativeSrc":"20339:6:69","nodeType":"YulIdentifier","src":"20339:6:69"}]}]},{"nativeSrc":"20422:118:69","nodeType":"YulBlock","src":"20422:118:69","statements":[{"nativeSrc":"20437:16:69","nodeType":"YulVariableDeclaration","src":"20437:16:69","value":{"kind":"number","nativeSrc":"20451:2:69","nodeType":"YulLiteral","src":"20451:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"20441:6:69","nodeType":"YulTypedName","src":"20441:6:69","type":""}]},{"nativeSrc":"20467:63:69","nodeType":"YulAssignment","src":"20467:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"20502:9:69","nodeType":"YulIdentifier","src":"20502:9:69"},{"name":"offset","nativeSrc":"20513:6:69","nodeType":"YulIdentifier","src":"20513:6:69"}],"functionName":{"name":"add","nativeSrc":"20498:3:69","nodeType":"YulIdentifier","src":"20498:3:69"},"nativeSrc":"20498:22:69","nodeType":"YulFunctionCall","src":"20498:22:69"},{"name":"dataEnd","nativeSrc":"20522:7:69","nodeType":"YulIdentifier","src":"20522:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"20477:20:69","nodeType":"YulIdentifier","src":"20477:20:69"},"nativeSrc":"20477:53:69","nodeType":"YulFunctionCall","src":"20477:53:69"},"variableNames":[{"name":"value1","nativeSrc":"20467:6:69","nodeType":"YulIdentifier","src":"20467:6:69"}]}]},{"nativeSrc":"20550:143:69","nodeType":"YulBlock","src":"20550:143:69","statements":[{"nativeSrc":"20565:16:69","nodeType":"YulVariableDeclaration","src":"20565:16:69","value":{"kind":"number","nativeSrc":"20579:2:69","nodeType":"YulLiteral","src":"20579:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"20569:6:69","nodeType":"YulTypedName","src":"20569:6:69","type":""}]},{"nativeSrc":"20595:88:69","nodeType":"YulAssignment","src":"20595:88:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"20655:9:69","nodeType":"YulIdentifier","src":"20655:9:69"},{"name":"offset","nativeSrc":"20666:6:69","nodeType":"YulIdentifier","src":"20666:6:69"}],"functionName":{"name":"add","nativeSrc":"20651:3:69","nodeType":"YulIdentifier","src":"20651:3:69"},"nativeSrc":"20651:22:69","nodeType":"YulFunctionCall","src":"20651:22:69"},{"name":"dataEnd","nativeSrc":"20675:7:69","nodeType":"YulIdentifier","src":"20675:7:69"}],"functionName":{"name":"abi_decode_t_contract$_VTokenInterface_$16106","nativeSrc":"20605:45:69","nodeType":"YulIdentifier","src":"20605:45:69"},"nativeSrc":"20605:78:69","nodeType":"YulFunctionCall","src":"20605:78:69"},"variableNames":[{"name":"value2","nativeSrc":"20595:6:69","nodeType":"YulIdentifier","src":"20595:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_contract$_VTokenInterface_$16106","nativeSrc":"20031:669:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"20110:9:69","nodeType":"YulTypedName","src":"20110:9:69","type":""},{"name":"dataEnd","nativeSrc":"20121:7:69","nodeType":"YulTypedName","src":"20121:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"20133:6:69","nodeType":"YulTypedName","src":"20133:6:69","type":""},{"name":"value1","nativeSrc":"20141:6:69","nodeType":"YulTypedName","src":"20141:6:69","type":""},{"name":"value2","nativeSrc":"20149:6:69","nodeType":"YulTypedName","src":"20149:6:69","type":""}],"src":"20031:669:69"},{"body":{"nativeSrc":"20734:152:69","nodeType":"YulBlock","src":"20734:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"20751:1:69","nodeType":"YulLiteral","src":"20751:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"20754:77:69","nodeType":"YulLiteral","src":"20754:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"20744:6:69","nodeType":"YulIdentifier","src":"20744:6:69"},"nativeSrc":"20744:88:69","nodeType":"YulFunctionCall","src":"20744:88:69"},"nativeSrc":"20744:88:69","nodeType":"YulExpressionStatement","src":"20744:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"20848:1:69","nodeType":"YulLiteral","src":"20848:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"20851:4:69","nodeType":"YulLiteral","src":"20851:4:69","type":"","value":"0x22"}],"functionName":{"name":"mstore","nativeSrc":"20841:6:69","nodeType":"YulIdentifier","src":"20841:6:69"},"nativeSrc":"20841:15:69","nodeType":"YulFunctionCall","src":"20841:15:69"},"nativeSrc":"20841:15:69","nodeType":"YulExpressionStatement","src":"20841:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"20872:1:69","nodeType":"YulLiteral","src":"20872:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"20875:4:69","nodeType":"YulLiteral","src":"20875:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"20865:6:69","nodeType":"YulIdentifier","src":"20865:6:69"},"nativeSrc":"20865:15:69","nodeType":"YulFunctionCall","src":"20865:15:69"},"nativeSrc":"20865:15:69","nodeType":"YulExpressionStatement","src":"20865:15:69"}]},"name":"panic_error_0x22","nativeSrc":"20706:180:69","nodeType":"YulFunctionDefinition","src":"20706:180:69"},{"body":{"nativeSrc":"20943:269:69","nodeType":"YulBlock","src":"20943:269:69","statements":[{"nativeSrc":"20953:22:69","nodeType":"YulAssignment","src":"20953:22:69","value":{"arguments":[{"name":"data","nativeSrc":"20967:4:69","nodeType":"YulIdentifier","src":"20967:4:69"},{"kind":"number","nativeSrc":"20973:1:69","nodeType":"YulLiteral","src":"20973:1:69","type":"","value":"2"}],"functionName":{"name":"div","nativeSrc":"20963:3:69","nodeType":"YulIdentifier","src":"20963:3:69"},"nativeSrc":"20963:12:69","nodeType":"YulFunctionCall","src":"20963:12:69"},"variableNames":[{"name":"length","nativeSrc":"20953:6:69","nodeType":"YulIdentifier","src":"20953:6:69"}]},{"nativeSrc":"20984:38:69","nodeType":"YulVariableDeclaration","src":"20984:38:69","value":{"arguments":[{"name":"data","nativeSrc":"21014:4:69","nodeType":"YulIdentifier","src":"21014:4:69"},{"kind":"number","nativeSrc":"21020:1:69","nodeType":"YulLiteral","src":"21020:1:69","type":"","value":"1"}],"functionName":{"name":"and","nativeSrc":"21010:3:69","nodeType":"YulIdentifier","src":"21010:3:69"},"nativeSrc":"21010:12:69","nodeType":"YulFunctionCall","src":"21010:12:69"},"variables":[{"name":"outOfPlaceEncoding","nativeSrc":"20988:18:69","nodeType":"YulTypedName","src":"20988:18:69","type":""}]},{"body":{"nativeSrc":"21061:51:69","nodeType":"YulBlock","src":"21061:51:69","statements":[{"nativeSrc":"21075:27:69","nodeType":"YulAssignment","src":"21075:27:69","value":{"arguments":[{"name":"length","nativeSrc":"21089:6:69","nodeType":"YulIdentifier","src":"21089:6:69"},{"kind":"number","nativeSrc":"21097:4:69","nodeType":"YulLiteral","src":"21097:4:69","type":"","value":"0x7f"}],"functionName":{"name":"and","nativeSrc":"21085:3:69","nodeType":"YulIdentifier","src":"21085:3:69"},"nativeSrc":"21085:17:69","nodeType":"YulFunctionCall","src":"21085:17:69"},"variableNames":[{"name":"length","nativeSrc":"21075:6:69","nodeType":"YulIdentifier","src":"21075:6:69"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nativeSrc":"21041:18:69","nodeType":"YulIdentifier","src":"21041:18:69"}],"functionName":{"name":"iszero","nativeSrc":"21034:6:69","nodeType":"YulIdentifier","src":"21034:6:69"},"nativeSrc":"21034:26:69","nodeType":"YulFunctionCall","src":"21034:26:69"},"nativeSrc":"21031:81:69","nodeType":"YulIf","src":"21031:81:69"},{"body":{"nativeSrc":"21164:42:69","nodeType":"YulBlock","src":"21164:42:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x22","nativeSrc":"21178:16:69","nodeType":"YulIdentifier","src":"21178:16:69"},"nativeSrc":"21178:18:69","nodeType":"YulFunctionCall","src":"21178:18:69"},"nativeSrc":"21178:18:69","nodeType":"YulExpressionStatement","src":"21178:18:69"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nativeSrc":"21128:18:69","nodeType":"YulIdentifier","src":"21128:18:69"},{"arguments":[{"name":"length","nativeSrc":"21151:6:69","nodeType":"YulIdentifier","src":"21151:6:69"},{"kind":"number","nativeSrc":"21159:2:69","nodeType":"YulLiteral","src":"21159:2:69","type":"","value":"32"}],"functionName":{"name":"lt","nativeSrc":"21148:2:69","nodeType":"YulIdentifier","src":"21148:2:69"},"nativeSrc":"21148:14:69","nodeType":"YulFunctionCall","src":"21148:14:69"}],"functionName":{"name":"eq","nativeSrc":"21125:2:69","nodeType":"YulIdentifier","src":"21125:2:69"},"nativeSrc":"21125:38:69","nodeType":"YulFunctionCall","src":"21125:38:69"},"nativeSrc":"21122:84:69","nodeType":"YulIf","src":"21122:84:69"}]},"name":"extract_byte_array_length","nativeSrc":"20892:320:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nativeSrc":"20927:4:69","nodeType":"YulTypedName","src":"20927:4:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"20936:6:69","nodeType":"YulTypedName","src":"20936:6:69","type":""}],"src":"20892:320:69"},{"body":{"nativeSrc":"21324:54:69","nodeType":"YulBlock","src":"21324:54:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"21346:6:69","nodeType":"YulIdentifier","src":"21346:6:69"},{"kind":"number","nativeSrc":"21354:1:69","nodeType":"YulLiteral","src":"21354:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"21342:3:69","nodeType":"YulIdentifier","src":"21342:3:69"},"nativeSrc":"21342:14:69","nodeType":"YulFunctionCall","src":"21342:14:69"},{"hexValue":"72652d656e7465726564","kind":"string","nativeSrc":"21358:12:69","nodeType":"YulLiteral","src":"21358:12:69","type":"","value":"re-entered"}],"functionName":{"name":"mstore","nativeSrc":"21335:6:69","nodeType":"YulIdentifier","src":"21335:6:69"},"nativeSrc":"21335:36:69","nodeType":"YulFunctionCall","src":"21335:36:69"},"nativeSrc":"21335:36:69","nodeType":"YulExpressionStatement","src":"21335:36:69"}]},"name":"store_literal_in_memory_987a3f65bf6c5144d945a7d9587fa166ee3a901eb2b594a0815c3c20bf841a5e","nativeSrc":"21218:160:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"21316:6:69","nodeType":"YulTypedName","src":"21316:6:69","type":""}],"src":"21218:160:69"},{"body":{"nativeSrc":"21530:220:69","nodeType":"YulBlock","src":"21530:220:69","statements":[{"nativeSrc":"21540:74:69","nodeType":"YulAssignment","src":"21540:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"21606:3:69","nodeType":"YulIdentifier","src":"21606:3:69"},{"kind":"number","nativeSrc":"21611:2:69","nodeType":"YulLiteral","src":"21611:2:69","type":"","value":"10"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"21547:58:69","nodeType":"YulIdentifier","src":"21547:58:69"},"nativeSrc":"21547:67:69","nodeType":"YulFunctionCall","src":"21547:67:69"},"variableNames":[{"name":"pos","nativeSrc":"21540:3:69","nodeType":"YulIdentifier","src":"21540:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"21712:3:69","nodeType":"YulIdentifier","src":"21712:3:69"}],"functionName":{"name":"store_literal_in_memory_987a3f65bf6c5144d945a7d9587fa166ee3a901eb2b594a0815c3c20bf841a5e","nativeSrc":"21623:88:69","nodeType":"YulIdentifier","src":"21623:88:69"},"nativeSrc":"21623:93:69","nodeType":"YulFunctionCall","src":"21623:93:69"},"nativeSrc":"21623:93:69","nodeType":"YulExpressionStatement","src":"21623:93:69"},{"nativeSrc":"21725:19:69","nodeType":"YulAssignment","src":"21725:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"21736:3:69","nodeType":"YulIdentifier","src":"21736:3:69"},{"kind":"number","nativeSrc":"21741:2:69","nodeType":"YulLiteral","src":"21741:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"21732:3:69","nodeType":"YulIdentifier","src":"21732:3:69"},"nativeSrc":"21732:12:69","nodeType":"YulFunctionCall","src":"21732:12:69"},"variableNames":[{"name":"end","nativeSrc":"21725:3:69","nodeType":"YulIdentifier","src":"21725:3:69"}]}]},"name":"abi_encode_t_stringliteral_987a3f65bf6c5144d945a7d9587fa166ee3a901eb2b594a0815c3c20bf841a5e_to_t_string_memory_ptr_fromStack","nativeSrc":"21384:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"21518:3:69","nodeType":"YulTypedName","src":"21518:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"21526:3:69","nodeType":"YulTypedName","src":"21526:3:69","type":""}],"src":"21384:366:69"},{"body":{"nativeSrc":"21927:248:69","nodeType":"YulBlock","src":"21927:248:69","statements":[{"nativeSrc":"21937:26:69","nodeType":"YulAssignment","src":"21937:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"21949:9:69","nodeType":"YulIdentifier","src":"21949:9:69"},{"kind":"number","nativeSrc":"21960:2:69","nodeType":"YulLiteral","src":"21960:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"21945:3:69","nodeType":"YulIdentifier","src":"21945:3:69"},"nativeSrc":"21945:18:69","nodeType":"YulFunctionCall","src":"21945:18:69"},"variableNames":[{"name":"tail","nativeSrc":"21937:4:69","nodeType":"YulIdentifier","src":"21937:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"21984:9:69","nodeType":"YulIdentifier","src":"21984:9:69"},{"kind":"number","nativeSrc":"21995:1:69","nodeType":"YulLiteral","src":"21995:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"21980:3:69","nodeType":"YulIdentifier","src":"21980:3:69"},"nativeSrc":"21980:17:69","nodeType":"YulFunctionCall","src":"21980:17:69"},{"arguments":[{"name":"tail","nativeSrc":"22003:4:69","nodeType":"YulIdentifier","src":"22003:4:69"},{"name":"headStart","nativeSrc":"22009:9:69","nodeType":"YulIdentifier","src":"22009:9:69"}],"functionName":{"name":"sub","nativeSrc":"21999:3:69","nodeType":"YulIdentifier","src":"21999:3:69"},"nativeSrc":"21999:20:69","nodeType":"YulFunctionCall","src":"21999:20:69"}],"functionName":{"name":"mstore","nativeSrc":"21973:6:69","nodeType":"YulIdentifier","src":"21973:6:69"},"nativeSrc":"21973:47:69","nodeType":"YulFunctionCall","src":"21973:47:69"},"nativeSrc":"21973:47:69","nodeType":"YulExpressionStatement","src":"21973:47:69"},{"nativeSrc":"22029:139:69","nodeType":"YulAssignment","src":"22029:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"22163:4:69","nodeType":"YulIdentifier","src":"22163:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_987a3f65bf6c5144d945a7d9587fa166ee3a901eb2b594a0815c3c20bf841a5e_to_t_string_memory_ptr_fromStack","nativeSrc":"22037:124:69","nodeType":"YulIdentifier","src":"22037:124:69"},"nativeSrc":"22037:131:69","nodeType":"YulFunctionCall","src":"22037:131:69"},"variableNames":[{"name":"tail","nativeSrc":"22029:4:69","nodeType":"YulIdentifier","src":"22029:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_987a3f65bf6c5144d945a7d9587fa166ee3a901eb2b594a0815c3c20bf841a5e__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"21756:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"21907:9:69","nodeType":"YulTypedName","src":"21907:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"21922:4:69","nodeType":"YulTypedName","src":"21922:4:69","type":""}],"src":"21756:419:69"},{"body":{"nativeSrc":"22287:128:69","nodeType":"YulBlock","src":"22287:128:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"22309:6:69","nodeType":"YulIdentifier","src":"22309:6:69"},{"kind":"number","nativeSrc":"22317:1:69","nodeType":"YulLiteral","src":"22317:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"22305:3:69","nodeType":"YulIdentifier","src":"22305:3:69"},"nativeSrc":"22305:14:69","nodeType":"YulFunctionCall","src":"22305:14:69"},{"hexValue":"56546f6b656e3a3a7377656570546f6b656e3a206f6e6c792061646d696e2063","kind":"string","nativeSrc":"22321:34:69","nodeType":"YulLiteral","src":"22321:34:69","type":"","value":"VToken::sweepToken: only admin c"}],"functionName":{"name":"mstore","nativeSrc":"22298:6:69","nodeType":"YulIdentifier","src":"22298:6:69"},"nativeSrc":"22298:58:69","nodeType":"YulFunctionCall","src":"22298:58:69"},"nativeSrc":"22298:58:69","nodeType":"YulExpressionStatement","src":"22298:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"22377:6:69","nodeType":"YulIdentifier","src":"22377:6:69"},{"kind":"number","nativeSrc":"22385:2:69","nodeType":"YulLiteral","src":"22385:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"22373:3:69","nodeType":"YulIdentifier","src":"22373:3:69"},"nativeSrc":"22373:15:69","nodeType":"YulFunctionCall","src":"22373:15:69"},{"hexValue":"616e20737765657020746f6b656e73","kind":"string","nativeSrc":"22390:17:69","nodeType":"YulLiteral","src":"22390:17:69","type":"","value":"an sweep tokens"}],"functionName":{"name":"mstore","nativeSrc":"22366:6:69","nodeType":"YulIdentifier","src":"22366:6:69"},"nativeSrc":"22366:42:69","nodeType":"YulFunctionCall","src":"22366:42:69"},"nativeSrc":"22366:42:69","nodeType":"YulExpressionStatement","src":"22366:42:69"}]},"name":"store_literal_in_memory_02b93ba8f3ff373adacf808c6433da448d23929cf304a4f44f1f328895f6c896","nativeSrc":"22181:234:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"22279:6:69","nodeType":"YulTypedName","src":"22279:6:69","type":""}],"src":"22181:234:69"},{"body":{"nativeSrc":"22567:220:69","nodeType":"YulBlock","src":"22567:220:69","statements":[{"nativeSrc":"22577:74:69","nodeType":"YulAssignment","src":"22577:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"22643:3:69","nodeType":"YulIdentifier","src":"22643:3:69"},{"kind":"number","nativeSrc":"22648:2:69","nodeType":"YulLiteral","src":"22648:2:69","type":"","value":"47"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"22584:58:69","nodeType":"YulIdentifier","src":"22584:58:69"},"nativeSrc":"22584:67:69","nodeType":"YulFunctionCall","src":"22584:67:69"},"variableNames":[{"name":"pos","nativeSrc":"22577:3:69","nodeType":"YulIdentifier","src":"22577:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"22749:3:69","nodeType":"YulIdentifier","src":"22749:3:69"}],"functionName":{"name":"store_literal_in_memory_02b93ba8f3ff373adacf808c6433da448d23929cf304a4f44f1f328895f6c896","nativeSrc":"22660:88:69","nodeType":"YulIdentifier","src":"22660:88:69"},"nativeSrc":"22660:93:69","nodeType":"YulFunctionCall","src":"22660:93:69"},"nativeSrc":"22660:93:69","nodeType":"YulExpressionStatement","src":"22660:93:69"},{"nativeSrc":"22762:19:69","nodeType":"YulAssignment","src":"22762:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"22773:3:69","nodeType":"YulIdentifier","src":"22773:3:69"},{"kind":"number","nativeSrc":"22778:2:69","nodeType":"YulLiteral","src":"22778:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"22769:3:69","nodeType":"YulIdentifier","src":"22769:3:69"},"nativeSrc":"22769:12:69","nodeType":"YulFunctionCall","src":"22769:12:69"},"variableNames":[{"name":"end","nativeSrc":"22762:3:69","nodeType":"YulIdentifier","src":"22762:3:69"}]}]},"name":"abi_encode_t_stringliteral_02b93ba8f3ff373adacf808c6433da448d23929cf304a4f44f1f328895f6c896_to_t_string_memory_ptr_fromStack","nativeSrc":"22421:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"22555:3:69","nodeType":"YulTypedName","src":"22555:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"22563:3:69","nodeType":"YulTypedName","src":"22563:3:69","type":""}],"src":"22421:366:69"},{"body":{"nativeSrc":"22964:248:69","nodeType":"YulBlock","src":"22964:248:69","statements":[{"nativeSrc":"22974:26:69","nodeType":"YulAssignment","src":"22974:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"22986:9:69","nodeType":"YulIdentifier","src":"22986:9:69"},{"kind":"number","nativeSrc":"22997:2:69","nodeType":"YulLiteral","src":"22997:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"22982:3:69","nodeType":"YulIdentifier","src":"22982:3:69"},"nativeSrc":"22982:18:69","nodeType":"YulFunctionCall","src":"22982:18:69"},"variableNames":[{"name":"tail","nativeSrc":"22974:4:69","nodeType":"YulIdentifier","src":"22974:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"23021:9:69","nodeType":"YulIdentifier","src":"23021:9:69"},{"kind":"number","nativeSrc":"23032:1:69","nodeType":"YulLiteral","src":"23032:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"23017:3:69","nodeType":"YulIdentifier","src":"23017:3:69"},"nativeSrc":"23017:17:69","nodeType":"YulFunctionCall","src":"23017:17:69"},{"arguments":[{"name":"tail","nativeSrc":"23040:4:69","nodeType":"YulIdentifier","src":"23040:4:69"},{"name":"headStart","nativeSrc":"23046:9:69","nodeType":"YulIdentifier","src":"23046:9:69"}],"functionName":{"name":"sub","nativeSrc":"23036:3:69","nodeType":"YulIdentifier","src":"23036:3:69"},"nativeSrc":"23036:20:69","nodeType":"YulFunctionCall","src":"23036:20:69"}],"functionName":{"name":"mstore","nativeSrc":"23010:6:69","nodeType":"YulIdentifier","src":"23010:6:69"},"nativeSrc":"23010:47:69","nodeType":"YulFunctionCall","src":"23010:47:69"},"nativeSrc":"23010:47:69","nodeType":"YulExpressionStatement","src":"23010:47:69"},{"nativeSrc":"23066:139:69","nodeType":"YulAssignment","src":"23066:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"23200:4:69","nodeType":"YulIdentifier","src":"23200:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_02b93ba8f3ff373adacf808c6433da448d23929cf304a4f44f1f328895f6c896_to_t_string_memory_ptr_fromStack","nativeSrc":"23074:124:69","nodeType":"YulIdentifier","src":"23074:124:69"},"nativeSrc":"23074:131:69","nodeType":"YulFunctionCall","src":"23074:131:69"},"variableNames":[{"name":"tail","nativeSrc":"23066:4:69","nodeType":"YulIdentifier","src":"23066:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_02b93ba8f3ff373adacf808c6433da448d23929cf304a4f44f1f328895f6c896__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"22793:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"22944:9:69","nodeType":"YulTypedName","src":"22944:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"22959:4:69","nodeType":"YulTypedName","src":"22959:4:69","type":""}],"src":"22793:419:69"},{"body":{"nativeSrc":"23324:131:69","nodeType":"YulBlock","src":"23324:131:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"23346:6:69","nodeType":"YulIdentifier","src":"23346:6:69"},{"kind":"number","nativeSrc":"23354:1:69","nodeType":"YulLiteral","src":"23354:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"23342:3:69","nodeType":"YulIdentifier","src":"23342:3:69"},"nativeSrc":"23342:14:69","nodeType":"YulFunctionCall","src":"23342:14:69"},{"hexValue":"56546f6b656e3a3a7377656570546f6b656e3a2063616e206e6f742073776565","kind":"string","nativeSrc":"23358:34:69","nodeType":"YulLiteral","src":"23358:34:69","type":"","value":"VToken::sweepToken: can not swee"}],"functionName":{"name":"mstore","nativeSrc":"23335:6:69","nodeType":"YulIdentifier","src":"23335:6:69"},"nativeSrc":"23335:58:69","nodeType":"YulFunctionCall","src":"23335:58:69"},"nativeSrc":"23335:58:69","nodeType":"YulExpressionStatement","src":"23335:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"23414:6:69","nodeType":"YulIdentifier","src":"23414:6:69"},{"kind":"number","nativeSrc":"23422:2:69","nodeType":"YulLiteral","src":"23422:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"23410:3:69","nodeType":"YulIdentifier","src":"23410:3:69"},"nativeSrc":"23410:15:69","nodeType":"YulFunctionCall","src":"23410:15:69"},{"hexValue":"7020756e6465726c79696e6720746f6b656e","kind":"string","nativeSrc":"23427:20:69","nodeType":"YulLiteral","src":"23427:20:69","type":"","value":"p underlying token"}],"functionName":{"name":"mstore","nativeSrc":"23403:6:69","nodeType":"YulIdentifier","src":"23403:6:69"},"nativeSrc":"23403:45:69","nodeType":"YulFunctionCall","src":"23403:45:69"},"nativeSrc":"23403:45:69","nodeType":"YulExpressionStatement","src":"23403:45:69"}]},"name":"store_literal_in_memory_a09eed6cffa426a240963a23cca18c0902c7833c31318eeb460f5ddbd7830a32","nativeSrc":"23218:237:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"23316:6:69","nodeType":"YulTypedName","src":"23316:6:69","type":""}],"src":"23218:237:69"},{"body":{"nativeSrc":"23607:220:69","nodeType":"YulBlock","src":"23607:220:69","statements":[{"nativeSrc":"23617:74:69","nodeType":"YulAssignment","src":"23617:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"23683:3:69","nodeType":"YulIdentifier","src":"23683:3:69"},{"kind":"number","nativeSrc":"23688:2:69","nodeType":"YulLiteral","src":"23688:2:69","type":"","value":"50"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"23624:58:69","nodeType":"YulIdentifier","src":"23624:58:69"},"nativeSrc":"23624:67:69","nodeType":"YulFunctionCall","src":"23624:67:69"},"variableNames":[{"name":"pos","nativeSrc":"23617:3:69","nodeType":"YulIdentifier","src":"23617:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"23789:3:69","nodeType":"YulIdentifier","src":"23789:3:69"}],"functionName":{"name":"store_literal_in_memory_a09eed6cffa426a240963a23cca18c0902c7833c31318eeb460f5ddbd7830a32","nativeSrc":"23700:88:69","nodeType":"YulIdentifier","src":"23700:88:69"},"nativeSrc":"23700:93:69","nodeType":"YulFunctionCall","src":"23700:93:69"},"nativeSrc":"23700:93:69","nodeType":"YulExpressionStatement","src":"23700:93:69"},{"nativeSrc":"23802:19:69","nodeType":"YulAssignment","src":"23802:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"23813:3:69","nodeType":"YulIdentifier","src":"23813:3:69"},{"kind":"number","nativeSrc":"23818:2:69","nodeType":"YulLiteral","src":"23818:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"23809:3:69","nodeType":"YulIdentifier","src":"23809:3:69"},"nativeSrc":"23809:12:69","nodeType":"YulFunctionCall","src":"23809:12:69"},"variableNames":[{"name":"end","nativeSrc":"23802:3:69","nodeType":"YulIdentifier","src":"23802:3:69"}]}]},"name":"abi_encode_t_stringliteral_a09eed6cffa426a240963a23cca18c0902c7833c31318eeb460f5ddbd7830a32_to_t_string_memory_ptr_fromStack","nativeSrc":"23461:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"23595:3:69","nodeType":"YulTypedName","src":"23595:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"23603:3:69","nodeType":"YulTypedName","src":"23603:3:69","type":""}],"src":"23461:366:69"},{"body":{"nativeSrc":"24004:248:69","nodeType":"YulBlock","src":"24004:248:69","statements":[{"nativeSrc":"24014:26:69","nodeType":"YulAssignment","src":"24014:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"24026:9:69","nodeType":"YulIdentifier","src":"24026:9:69"},{"kind":"number","nativeSrc":"24037:2:69","nodeType":"YulLiteral","src":"24037:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"24022:3:69","nodeType":"YulIdentifier","src":"24022:3:69"},"nativeSrc":"24022:18:69","nodeType":"YulFunctionCall","src":"24022:18:69"},"variableNames":[{"name":"tail","nativeSrc":"24014:4:69","nodeType":"YulIdentifier","src":"24014:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"24061:9:69","nodeType":"YulIdentifier","src":"24061:9:69"},{"kind":"number","nativeSrc":"24072:1:69","nodeType":"YulLiteral","src":"24072:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"24057:3:69","nodeType":"YulIdentifier","src":"24057:3:69"},"nativeSrc":"24057:17:69","nodeType":"YulFunctionCall","src":"24057:17:69"},{"arguments":[{"name":"tail","nativeSrc":"24080:4:69","nodeType":"YulIdentifier","src":"24080:4:69"},{"name":"headStart","nativeSrc":"24086:9:69","nodeType":"YulIdentifier","src":"24086:9:69"}],"functionName":{"name":"sub","nativeSrc":"24076:3:69","nodeType":"YulIdentifier","src":"24076:3:69"},"nativeSrc":"24076:20:69","nodeType":"YulFunctionCall","src":"24076:20:69"}],"functionName":{"name":"mstore","nativeSrc":"24050:6:69","nodeType":"YulIdentifier","src":"24050:6:69"},"nativeSrc":"24050:47:69","nodeType":"YulFunctionCall","src":"24050:47:69"},"nativeSrc":"24050:47:69","nodeType":"YulExpressionStatement","src":"24050:47:69"},{"nativeSrc":"24106:139:69","nodeType":"YulAssignment","src":"24106:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"24240:4:69","nodeType":"YulIdentifier","src":"24240:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_a09eed6cffa426a240963a23cca18c0902c7833c31318eeb460f5ddbd7830a32_to_t_string_memory_ptr_fromStack","nativeSrc":"24114:124:69","nodeType":"YulIdentifier","src":"24114:124:69"},"nativeSrc":"24114:131:69","nodeType":"YulFunctionCall","src":"24114:131:69"},"variableNames":[{"name":"tail","nativeSrc":"24106:4:69","nodeType":"YulIdentifier","src":"24106:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_a09eed6cffa426a240963a23cca18c0902c7833c31318eeb460f5ddbd7830a32__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"23833:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"23984:9:69","nodeType":"YulTypedName","src":"23984:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"23999:4:69","nodeType":"YulTypedName","src":"23999:4:69","type":""}],"src":"23833:419:69"},{"body":{"nativeSrc":"24321:80:69","nodeType":"YulBlock","src":"24321:80:69","statements":[{"nativeSrc":"24331:22:69","nodeType":"YulAssignment","src":"24331:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"24346:6:69","nodeType":"YulIdentifier","src":"24346:6:69"}],"functionName":{"name":"mload","nativeSrc":"24340:5:69","nodeType":"YulIdentifier","src":"24340:5:69"},"nativeSrc":"24340:13:69","nodeType":"YulFunctionCall","src":"24340:13:69"},"variableNames":[{"name":"value","nativeSrc":"24331:5:69","nodeType":"YulIdentifier","src":"24331:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"24389:5:69","nodeType":"YulIdentifier","src":"24389:5:69"}],"functionName":{"name":"validator_revert_t_uint256","nativeSrc":"24362:26:69","nodeType":"YulIdentifier","src":"24362:26:69"},"nativeSrc":"24362:33:69","nodeType":"YulFunctionCall","src":"24362:33:69"},"nativeSrc":"24362:33:69","nodeType":"YulExpressionStatement","src":"24362:33:69"}]},"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"24258:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"24299:6:69","nodeType":"YulTypedName","src":"24299:6:69","type":""},{"name":"end","nativeSrc":"24307:3:69","nodeType":"YulTypedName","src":"24307:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"24315:5:69","nodeType":"YulTypedName","src":"24315:5:69","type":""}],"src":"24258:143:69"},{"body":{"nativeSrc":"24484:274:69","nodeType":"YulBlock","src":"24484:274:69","statements":[{"body":{"nativeSrc":"24530:83:69","nodeType":"YulBlock","src":"24530:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"24532:77:69","nodeType":"YulIdentifier","src":"24532:77:69"},"nativeSrc":"24532:79:69","nodeType":"YulFunctionCall","src":"24532:79:69"},"nativeSrc":"24532:79:69","nodeType":"YulExpressionStatement","src":"24532:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"24505:7:69","nodeType":"YulIdentifier","src":"24505:7:69"},{"name":"headStart","nativeSrc":"24514:9:69","nodeType":"YulIdentifier","src":"24514:9:69"}],"functionName":{"name":"sub","nativeSrc":"24501:3:69","nodeType":"YulIdentifier","src":"24501:3:69"},"nativeSrc":"24501:23:69","nodeType":"YulFunctionCall","src":"24501:23:69"},{"kind":"number","nativeSrc":"24526:2:69","nodeType":"YulLiteral","src":"24526:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"24497:3:69","nodeType":"YulIdentifier","src":"24497:3:69"},"nativeSrc":"24497:32:69","nodeType":"YulFunctionCall","src":"24497:32:69"},"nativeSrc":"24494:119:69","nodeType":"YulIf","src":"24494:119:69"},{"nativeSrc":"24623:128:69","nodeType":"YulBlock","src":"24623:128:69","statements":[{"nativeSrc":"24638:15:69","nodeType":"YulVariableDeclaration","src":"24638:15:69","value":{"kind":"number","nativeSrc":"24652:1:69","nodeType":"YulLiteral","src":"24652:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"24642:6:69","nodeType":"YulTypedName","src":"24642:6:69","type":""}]},{"nativeSrc":"24667:74:69","nodeType":"YulAssignment","src":"24667:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"24713:9:69","nodeType":"YulIdentifier","src":"24713:9:69"},{"name":"offset","nativeSrc":"24724:6:69","nodeType":"YulIdentifier","src":"24724:6:69"}],"functionName":{"name":"add","nativeSrc":"24709:3:69","nodeType":"YulIdentifier","src":"24709:3:69"},"nativeSrc":"24709:22:69","nodeType":"YulFunctionCall","src":"24709:22:69"},{"name":"dataEnd","nativeSrc":"24733:7:69","nodeType":"YulIdentifier","src":"24733:7:69"}],"functionName":{"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"24677:31:69","nodeType":"YulIdentifier","src":"24677:31:69"},"nativeSrc":"24677:64:69","nodeType":"YulFunctionCall","src":"24677:64:69"},"variableNames":[{"name":"value0","nativeSrc":"24667:6:69","nodeType":"YulIdentifier","src":"24667:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nativeSrc":"24407:351:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"24454:9:69","nodeType":"YulTypedName","src":"24454:9:69","type":""},{"name":"dataEnd","nativeSrc":"24465:7:69","nodeType":"YulTypedName","src":"24465:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"24477:6:69","nodeType":"YulTypedName","src":"24477:6:69","type":""}],"src":"24407:351:69"},{"body":{"nativeSrc":"24870:57:69","nodeType":"YulBlock","src":"24870:57:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"24892:6:69","nodeType":"YulIdentifier","src":"24892:6:69"},{"kind":"number","nativeSrc":"24900:1:69","nodeType":"YulLiteral","src":"24900:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"24888:3:69","nodeType":"YulIdentifier","src":"24888:3:69"},"nativeSrc":"24888:14:69","nodeType":"YulFunctionCall","src":"24888:14:69"},{"hexValue":"496e76616c696420496e707574","kind":"string","nativeSrc":"24904:15:69","nodeType":"YulLiteral","src":"24904:15:69","type":"","value":"Invalid Input"}],"functionName":{"name":"mstore","nativeSrc":"24881:6:69","nodeType":"YulIdentifier","src":"24881:6:69"},"nativeSrc":"24881:39:69","nodeType":"YulFunctionCall","src":"24881:39:69"},"nativeSrc":"24881:39:69","nodeType":"YulExpressionStatement","src":"24881:39:69"}]},"name":"store_literal_in_memory_9404501c113e486e0697e27bc7935ec4eb29770a945d28921aff00cee17e3fed","nativeSrc":"24764:163:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"24862:6:69","nodeType":"YulTypedName","src":"24862:6:69","type":""}],"src":"24764:163:69"},{"body":{"nativeSrc":"25079:220:69","nodeType":"YulBlock","src":"25079:220:69","statements":[{"nativeSrc":"25089:74:69","nodeType":"YulAssignment","src":"25089:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"25155:3:69","nodeType":"YulIdentifier","src":"25155:3:69"},{"kind":"number","nativeSrc":"25160:2:69","nodeType":"YulLiteral","src":"25160:2:69","type":"","value":"13"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"25096:58:69","nodeType":"YulIdentifier","src":"25096:58:69"},"nativeSrc":"25096:67:69","nodeType":"YulFunctionCall","src":"25096:67:69"},"variableNames":[{"name":"pos","nativeSrc":"25089:3:69","nodeType":"YulIdentifier","src":"25089:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"25261:3:69","nodeType":"YulIdentifier","src":"25261:3:69"}],"functionName":{"name":"store_literal_in_memory_9404501c113e486e0697e27bc7935ec4eb29770a945d28921aff00cee17e3fed","nativeSrc":"25172:88:69","nodeType":"YulIdentifier","src":"25172:88:69"},"nativeSrc":"25172:93:69","nodeType":"YulFunctionCall","src":"25172:93:69"},"nativeSrc":"25172:93:69","nodeType":"YulExpressionStatement","src":"25172:93:69"},{"nativeSrc":"25274:19:69","nodeType":"YulAssignment","src":"25274:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"25285:3:69","nodeType":"YulIdentifier","src":"25285:3:69"},{"kind":"number","nativeSrc":"25290:2:69","nodeType":"YulLiteral","src":"25290:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"25281:3:69","nodeType":"YulIdentifier","src":"25281:3:69"},"nativeSrc":"25281:12:69","nodeType":"YulFunctionCall","src":"25281:12:69"},"variableNames":[{"name":"end","nativeSrc":"25274:3:69","nodeType":"YulIdentifier","src":"25274:3:69"}]}]},"name":"abi_encode_t_stringliteral_9404501c113e486e0697e27bc7935ec4eb29770a945d28921aff00cee17e3fed_to_t_string_memory_ptr_fromStack","nativeSrc":"24933:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"25067:3:69","nodeType":"YulTypedName","src":"25067:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"25075:3:69","nodeType":"YulTypedName","src":"25075:3:69","type":""}],"src":"24933:366:69"},{"body":{"nativeSrc":"25476:248:69","nodeType":"YulBlock","src":"25476:248:69","statements":[{"nativeSrc":"25486:26:69","nodeType":"YulAssignment","src":"25486:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"25498:9:69","nodeType":"YulIdentifier","src":"25498:9:69"},{"kind":"number","nativeSrc":"25509:2:69","nodeType":"YulLiteral","src":"25509:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"25494:3:69","nodeType":"YulIdentifier","src":"25494:3:69"},"nativeSrc":"25494:18:69","nodeType":"YulFunctionCall","src":"25494:18:69"},"variableNames":[{"name":"tail","nativeSrc":"25486:4:69","nodeType":"YulIdentifier","src":"25486:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"25533:9:69","nodeType":"YulIdentifier","src":"25533:9:69"},{"kind":"number","nativeSrc":"25544:1:69","nodeType":"YulLiteral","src":"25544:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"25529:3:69","nodeType":"YulIdentifier","src":"25529:3:69"},"nativeSrc":"25529:17:69","nodeType":"YulFunctionCall","src":"25529:17:69"},{"arguments":[{"name":"tail","nativeSrc":"25552:4:69","nodeType":"YulIdentifier","src":"25552:4:69"},{"name":"headStart","nativeSrc":"25558:9:69","nodeType":"YulIdentifier","src":"25558:9:69"}],"functionName":{"name":"sub","nativeSrc":"25548:3:69","nodeType":"YulIdentifier","src":"25548:3:69"},"nativeSrc":"25548:20:69","nodeType":"YulFunctionCall","src":"25548:20:69"}],"functionName":{"name":"mstore","nativeSrc":"25522:6:69","nodeType":"YulIdentifier","src":"25522:6:69"},"nativeSrc":"25522:47:69","nodeType":"YulFunctionCall","src":"25522:47:69"},"nativeSrc":"25522:47:69","nodeType":"YulExpressionStatement","src":"25522:47:69"},{"nativeSrc":"25578:139:69","nodeType":"YulAssignment","src":"25578:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"25712:4:69","nodeType":"YulIdentifier","src":"25712:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_9404501c113e486e0697e27bc7935ec4eb29770a945d28921aff00cee17e3fed_to_t_string_memory_ptr_fromStack","nativeSrc":"25586:124:69","nodeType":"YulIdentifier","src":"25586:124:69"},"nativeSrc":"25586:131:69","nodeType":"YulFunctionCall","src":"25586:131:69"},"variableNames":[{"name":"tail","nativeSrc":"25578:4:69","nodeType":"YulIdentifier","src":"25578:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_9404501c113e486e0697e27bc7935ec4eb29770a945d28921aff00cee17e3fed__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"25305:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"25456:9:69","nodeType":"YulTypedName","src":"25456:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"25471:4:69","nodeType":"YulTypedName","src":"25471:4:69","type":""}],"src":"25305:419:69"},{"body":{"nativeSrc":"25856:206:69","nodeType":"YulBlock","src":"25856:206:69","statements":[{"nativeSrc":"25866:26:69","nodeType":"YulAssignment","src":"25866:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"25878:9:69","nodeType":"YulIdentifier","src":"25878:9:69"},{"kind":"number","nativeSrc":"25889:2:69","nodeType":"YulLiteral","src":"25889:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"25874:3:69","nodeType":"YulIdentifier","src":"25874:3:69"},"nativeSrc":"25874:18:69","nodeType":"YulFunctionCall","src":"25874:18:69"},"variableNames":[{"name":"tail","nativeSrc":"25866:4:69","nodeType":"YulIdentifier","src":"25866:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"25946:6:69","nodeType":"YulIdentifier","src":"25946:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"25959:9:69","nodeType":"YulIdentifier","src":"25959:9:69"},{"kind":"number","nativeSrc":"25970:1:69","nodeType":"YulLiteral","src":"25970:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"25955:3:69","nodeType":"YulIdentifier","src":"25955:3:69"},"nativeSrc":"25955:17:69","nodeType":"YulFunctionCall","src":"25955:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"25902:43:69","nodeType":"YulIdentifier","src":"25902:43:69"},"nativeSrc":"25902:71:69","nodeType":"YulFunctionCall","src":"25902:71:69"},"nativeSrc":"25902:71:69","nodeType":"YulExpressionStatement","src":"25902:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"26027:6:69","nodeType":"YulIdentifier","src":"26027:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"26040:9:69","nodeType":"YulIdentifier","src":"26040:9:69"},{"kind":"number","nativeSrc":"26051:2:69","nodeType":"YulLiteral","src":"26051:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"26036:3:69","nodeType":"YulIdentifier","src":"26036:3:69"},"nativeSrc":"26036:18:69","nodeType":"YulFunctionCall","src":"26036:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"25983:43:69","nodeType":"YulIdentifier","src":"25983:43:69"},"nativeSrc":"25983:72:69","nodeType":"YulFunctionCall","src":"25983:72:69"},"nativeSrc":"25983:72:69","nodeType":"YulExpressionStatement","src":"25983:72:69"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"25730:332:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"25820:9:69","nodeType":"YulTypedName","src":"25820:9:69","type":""},{"name":"value1","nativeSrc":"25832:6:69","nodeType":"YulTypedName","src":"25832:6:69","type":""},{"name":"value0","nativeSrc":"25840:6:69","nodeType":"YulTypedName","src":"25840:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"25851:4:69","nodeType":"YulTypedName","src":"25851:4:69","type":""}],"src":"25730:332:69"},{"body":{"nativeSrc":"26096:152:69","nodeType":"YulBlock","src":"26096:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"26113:1:69","nodeType":"YulLiteral","src":"26113:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"26116:77:69","nodeType":"YulLiteral","src":"26116:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"26106:6:69","nodeType":"YulIdentifier","src":"26106:6:69"},"nativeSrc":"26106:88:69","nodeType":"YulFunctionCall","src":"26106:88:69"},"nativeSrc":"26106:88:69","nodeType":"YulExpressionStatement","src":"26106:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"26210:1:69","nodeType":"YulLiteral","src":"26210:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"26213:4:69","nodeType":"YulLiteral","src":"26213:4:69","type":"","value":"0x11"}],"functionName":{"name":"mstore","nativeSrc":"26203:6:69","nodeType":"YulIdentifier","src":"26203:6:69"},"nativeSrc":"26203:15:69","nodeType":"YulFunctionCall","src":"26203:15:69"},"nativeSrc":"26203:15:69","nodeType":"YulExpressionStatement","src":"26203:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"26234:1:69","nodeType":"YulLiteral","src":"26234:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"26237:4:69","nodeType":"YulLiteral","src":"26237:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"26227:6:69","nodeType":"YulIdentifier","src":"26227:6:69"},"nativeSrc":"26227:15:69","nodeType":"YulFunctionCall","src":"26227:15:69"},"nativeSrc":"26227:15:69","nodeType":"YulExpressionStatement","src":"26227:15:69"}]},"name":"panic_error_0x11","nativeSrc":"26068:180:69","nodeType":"YulFunctionDefinition","src":"26068:180:69"},{"body":{"nativeSrc":"26298:147:69","nodeType":"YulBlock","src":"26298:147:69","statements":[{"nativeSrc":"26308:25:69","nodeType":"YulAssignment","src":"26308:25:69","value":{"arguments":[{"name":"x","nativeSrc":"26331:1:69","nodeType":"YulIdentifier","src":"26331:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"26313:17:69","nodeType":"YulIdentifier","src":"26313:17:69"},"nativeSrc":"26313:20:69","nodeType":"YulFunctionCall","src":"26313:20:69"},"variableNames":[{"name":"x","nativeSrc":"26308:1:69","nodeType":"YulIdentifier","src":"26308:1:69"}]},{"nativeSrc":"26342:25:69","nodeType":"YulAssignment","src":"26342:25:69","value":{"arguments":[{"name":"y","nativeSrc":"26365:1:69","nodeType":"YulIdentifier","src":"26365:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"26347:17:69","nodeType":"YulIdentifier","src":"26347:17:69"},"nativeSrc":"26347:20:69","nodeType":"YulFunctionCall","src":"26347:20:69"},"variableNames":[{"name":"y","nativeSrc":"26342:1:69","nodeType":"YulIdentifier","src":"26342:1:69"}]},{"nativeSrc":"26376:16:69","nodeType":"YulAssignment","src":"26376:16:69","value":{"arguments":[{"name":"x","nativeSrc":"26387:1:69","nodeType":"YulIdentifier","src":"26387:1:69"},{"name":"y","nativeSrc":"26390:1:69","nodeType":"YulIdentifier","src":"26390:1:69"}],"functionName":{"name":"add","nativeSrc":"26383:3:69","nodeType":"YulIdentifier","src":"26383:3:69"},"nativeSrc":"26383:9:69","nodeType":"YulFunctionCall","src":"26383:9:69"},"variableNames":[{"name":"sum","nativeSrc":"26376:3:69","nodeType":"YulIdentifier","src":"26376:3:69"}]},{"body":{"nativeSrc":"26416:22:69","nodeType":"YulBlock","src":"26416:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"26418:16:69","nodeType":"YulIdentifier","src":"26418:16:69"},"nativeSrc":"26418:18:69","nodeType":"YulFunctionCall","src":"26418:18:69"},"nativeSrc":"26418:18:69","nodeType":"YulExpressionStatement","src":"26418:18:69"}]},"condition":{"arguments":[{"name":"x","nativeSrc":"26408:1:69","nodeType":"YulIdentifier","src":"26408:1:69"},{"name":"sum","nativeSrc":"26411:3:69","nodeType":"YulIdentifier","src":"26411:3:69"}],"functionName":{"name":"gt","nativeSrc":"26405:2:69","nodeType":"YulIdentifier","src":"26405:2:69"},"nativeSrc":"26405:10:69","nodeType":"YulFunctionCall","src":"26405:10:69"},"nativeSrc":"26402:36:69","nodeType":"YulIf","src":"26402:36:69"}]},"name":"checked_add_t_uint256","nativeSrc":"26254:191:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"26285:1:69","nodeType":"YulTypedName","src":"26285:1:69","type":""},{"name":"y","nativeSrc":"26288:1:69","nodeType":"YulTypedName","src":"26288:1:69","type":""}],"returnVariables":[{"name":"sum","nativeSrc":"26294:3:69","nodeType":"YulTypedName","src":"26294:3:69","type":""}],"src":"26254:191:69"},{"body":{"nativeSrc":"26577:206:69","nodeType":"YulBlock","src":"26577:206:69","statements":[{"nativeSrc":"26587:26:69","nodeType":"YulAssignment","src":"26587:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"26599:9:69","nodeType":"YulIdentifier","src":"26599:9:69"},{"kind":"number","nativeSrc":"26610:2:69","nodeType":"YulLiteral","src":"26610:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"26595:3:69","nodeType":"YulIdentifier","src":"26595:3:69"},"nativeSrc":"26595:18:69","nodeType":"YulFunctionCall","src":"26595:18:69"},"variableNames":[{"name":"tail","nativeSrc":"26587:4:69","nodeType":"YulIdentifier","src":"26587:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"26667:6:69","nodeType":"YulIdentifier","src":"26667:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"26680:9:69","nodeType":"YulIdentifier","src":"26680:9:69"},{"kind":"number","nativeSrc":"26691:1:69","nodeType":"YulLiteral","src":"26691:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"26676:3:69","nodeType":"YulIdentifier","src":"26676:3:69"},"nativeSrc":"26676:17:69","nodeType":"YulFunctionCall","src":"26676:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"26623:43:69","nodeType":"YulIdentifier","src":"26623:43:69"},"nativeSrc":"26623:71:69","nodeType":"YulFunctionCall","src":"26623:71:69"},"nativeSrc":"26623:71:69","nodeType":"YulExpressionStatement","src":"26623:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"26748:6:69","nodeType":"YulIdentifier","src":"26748:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"26761:9:69","nodeType":"YulIdentifier","src":"26761:9:69"},{"kind":"number","nativeSrc":"26772:2:69","nodeType":"YulLiteral","src":"26772:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"26757:3:69","nodeType":"YulIdentifier","src":"26757:3:69"},"nativeSrc":"26757:18:69","nodeType":"YulFunctionCall","src":"26757:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"26704:43:69","nodeType":"YulIdentifier","src":"26704:43:69"},"nativeSrc":"26704:72:69","nodeType":"YulFunctionCall","src":"26704:72:69"},"nativeSrc":"26704:72:69","nodeType":"YulExpressionStatement","src":"26704:72:69"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nativeSrc":"26451:332:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"26541:9:69","nodeType":"YulTypedName","src":"26541:9:69","type":""},{"name":"value1","nativeSrc":"26553:6:69","nodeType":"YulTypedName","src":"26553:6:69","type":""},{"name":"value0","nativeSrc":"26561:6:69","nodeType":"YulTypedName","src":"26561:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"26572:4:69","nodeType":"YulTypedName","src":"26572:4:69","type":""}],"src":"26451:332:69"},{"body":{"nativeSrc":"26834:149:69","nodeType":"YulBlock","src":"26834:149:69","statements":[{"nativeSrc":"26844:25:69","nodeType":"YulAssignment","src":"26844:25:69","value":{"arguments":[{"name":"x","nativeSrc":"26867:1:69","nodeType":"YulIdentifier","src":"26867:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"26849:17:69","nodeType":"YulIdentifier","src":"26849:17:69"},"nativeSrc":"26849:20:69","nodeType":"YulFunctionCall","src":"26849:20:69"},"variableNames":[{"name":"x","nativeSrc":"26844:1:69","nodeType":"YulIdentifier","src":"26844:1:69"}]},{"nativeSrc":"26878:25:69","nodeType":"YulAssignment","src":"26878:25:69","value":{"arguments":[{"name":"y","nativeSrc":"26901:1:69","nodeType":"YulIdentifier","src":"26901:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"26883:17:69","nodeType":"YulIdentifier","src":"26883:17:69"},"nativeSrc":"26883:20:69","nodeType":"YulFunctionCall","src":"26883:20:69"},"variableNames":[{"name":"y","nativeSrc":"26878:1:69","nodeType":"YulIdentifier","src":"26878:1:69"}]},{"nativeSrc":"26912:17:69","nodeType":"YulAssignment","src":"26912:17:69","value":{"arguments":[{"name":"x","nativeSrc":"26924:1:69","nodeType":"YulIdentifier","src":"26924:1:69"},{"name":"y","nativeSrc":"26927:1:69","nodeType":"YulIdentifier","src":"26927:1:69"}],"functionName":{"name":"sub","nativeSrc":"26920:3:69","nodeType":"YulIdentifier","src":"26920:3:69"},"nativeSrc":"26920:9:69","nodeType":"YulFunctionCall","src":"26920:9:69"},"variableNames":[{"name":"diff","nativeSrc":"26912:4:69","nodeType":"YulIdentifier","src":"26912:4:69"}]},{"body":{"nativeSrc":"26954:22:69","nodeType":"YulBlock","src":"26954:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"26956:16:69","nodeType":"YulIdentifier","src":"26956:16:69"},"nativeSrc":"26956:18:69","nodeType":"YulFunctionCall","src":"26956:18:69"},"nativeSrc":"26956:18:69","nodeType":"YulExpressionStatement","src":"26956:18:69"}]},"condition":{"arguments":[{"name":"diff","nativeSrc":"26945:4:69","nodeType":"YulIdentifier","src":"26945:4:69"},{"name":"x","nativeSrc":"26951:1:69","nodeType":"YulIdentifier","src":"26951:1:69"}],"functionName":{"name":"gt","nativeSrc":"26942:2:69","nodeType":"YulIdentifier","src":"26942:2:69"},"nativeSrc":"26942:11:69","nodeType":"YulFunctionCall","src":"26942:11:69"},"nativeSrc":"26939:37:69","nodeType":"YulIf","src":"26939:37:69"}]},"name":"checked_sub_t_uint256","nativeSrc":"26789:194:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"26820:1:69","nodeType":"YulTypedName","src":"26820:1:69","type":""},{"name":"y","nativeSrc":"26823:1:69","nodeType":"YulTypedName","src":"26823:1:69","type":""}],"returnVariables":[{"name":"diff","nativeSrc":"26829:4:69","nodeType":"YulTypedName","src":"26829:4:69","type":""}],"src":"26789:194:69"},{"body":{"nativeSrc":"27143:288:69","nodeType":"YulBlock","src":"27143:288:69","statements":[{"nativeSrc":"27153:26:69","nodeType":"YulAssignment","src":"27153:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"27165:9:69","nodeType":"YulIdentifier","src":"27165:9:69"},{"kind":"number","nativeSrc":"27176:2:69","nodeType":"YulLiteral","src":"27176:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"27161:3:69","nodeType":"YulIdentifier","src":"27161:3:69"},"nativeSrc":"27161:18:69","nodeType":"YulFunctionCall","src":"27161:18:69"},"variableNames":[{"name":"tail","nativeSrc":"27153:4:69","nodeType":"YulIdentifier","src":"27153:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"27233:6:69","nodeType":"YulIdentifier","src":"27233:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"27246:9:69","nodeType":"YulIdentifier","src":"27246:9:69"},{"kind":"number","nativeSrc":"27257:1:69","nodeType":"YulLiteral","src":"27257:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"27242:3:69","nodeType":"YulIdentifier","src":"27242:3:69"},"nativeSrc":"27242:17:69","nodeType":"YulFunctionCall","src":"27242:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"27189:43:69","nodeType":"YulIdentifier","src":"27189:43:69"},"nativeSrc":"27189:71:69","nodeType":"YulFunctionCall","src":"27189:71:69"},"nativeSrc":"27189:71:69","nodeType":"YulExpressionStatement","src":"27189:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"27314:6:69","nodeType":"YulIdentifier","src":"27314:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"27327:9:69","nodeType":"YulIdentifier","src":"27327:9:69"},{"kind":"number","nativeSrc":"27338:2:69","nodeType":"YulLiteral","src":"27338:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"27323:3:69","nodeType":"YulIdentifier","src":"27323:3:69"},"nativeSrc":"27323:18:69","nodeType":"YulFunctionCall","src":"27323:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"27270:43:69","nodeType":"YulIdentifier","src":"27270:43:69"},"nativeSrc":"27270:72:69","nodeType":"YulFunctionCall","src":"27270:72:69"},"nativeSrc":"27270:72:69","nodeType":"YulExpressionStatement","src":"27270:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"27396:6:69","nodeType":"YulIdentifier","src":"27396:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"27409:9:69","nodeType":"YulIdentifier","src":"27409:9:69"},{"kind":"number","nativeSrc":"27420:2:69","nodeType":"YulLiteral","src":"27420:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"27405:3:69","nodeType":"YulIdentifier","src":"27405:3:69"},"nativeSrc":"27405:18:69","nodeType":"YulFunctionCall","src":"27405:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"27352:43:69","nodeType":"YulIdentifier","src":"27352:43:69"},"nativeSrc":"27352:72:69","nodeType":"YulFunctionCall","src":"27352:72:69"},"nativeSrc":"27352:72:69","nodeType":"YulExpressionStatement","src":"27352:72:69"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"26989:442:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"27099:9:69","nodeType":"YulTypedName","src":"27099:9:69","type":""},{"name":"value2","nativeSrc":"27111:6:69","nodeType":"YulTypedName","src":"27111:6:69","type":""},{"name":"value1","nativeSrc":"27119:6:69","nodeType":"YulTypedName","src":"27119:6:69","type":""},{"name":"value0","nativeSrc":"27127:6:69","nodeType":"YulTypedName","src":"27127:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"27138:4:69","nodeType":"YulTypedName","src":"27138:4:69","type":""}],"src":"26989:442:69"},{"body":{"nativeSrc":"27490:32:69","nodeType":"YulBlock","src":"27490:32:69","statements":[{"nativeSrc":"27500:16:69","nodeType":"YulAssignment","src":"27500:16:69","value":{"name":"value","nativeSrc":"27511:5:69","nodeType":"YulIdentifier","src":"27511:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"27500:7:69","nodeType":"YulIdentifier","src":"27500:7:69"}]}]},"name":"cleanup_t_rational_0_by_1","nativeSrc":"27437:85:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"27472:5:69","nodeType":"YulTypedName","src":"27472:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"27482:7:69","nodeType":"YulTypedName","src":"27482:7:69","type":""}],"src":"27437:85:69"},{"body":{"nativeSrc":"27596:90:69","nodeType":"YulBlock","src":"27596:90:69","statements":[{"nativeSrc":"27606:74:69","nodeType":"YulAssignment","src":"27606:74:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"27672:5:69","nodeType":"YulIdentifier","src":"27672:5:69"}],"functionName":{"name":"cleanup_t_rational_0_by_1","nativeSrc":"27646:25:69","nodeType":"YulIdentifier","src":"27646:25:69"},"nativeSrc":"27646:32:69","nodeType":"YulFunctionCall","src":"27646:32:69"}],"functionName":{"name":"identity","nativeSrc":"27637:8:69","nodeType":"YulIdentifier","src":"27637:8:69"},"nativeSrc":"27637:42:69","nodeType":"YulFunctionCall","src":"27637:42:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"27619:17:69","nodeType":"YulIdentifier","src":"27619:17:69"},"nativeSrc":"27619:61:69","nodeType":"YulFunctionCall","src":"27619:61:69"},"variableNames":[{"name":"converted","nativeSrc":"27606:9:69","nodeType":"YulIdentifier","src":"27606:9:69"}]}]},"name":"convert_t_rational_0_by_1_to_t_uint256","nativeSrc":"27528:158:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"27576:5:69","nodeType":"YulTypedName","src":"27576:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"27586:9:69","nodeType":"YulTypedName","src":"27586:9:69","type":""}],"src":"27528:158:69"},{"body":{"nativeSrc":"27765:74:69","nodeType":"YulBlock","src":"27765:74:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"27782:3:69","nodeType":"YulIdentifier","src":"27782:3:69"},{"arguments":[{"name":"value","nativeSrc":"27826:5:69","nodeType":"YulIdentifier","src":"27826:5:69"}],"functionName":{"name":"convert_t_rational_0_by_1_to_t_uint256","nativeSrc":"27787:38:69","nodeType":"YulIdentifier","src":"27787:38:69"},"nativeSrc":"27787:45:69","nodeType":"YulFunctionCall","src":"27787:45:69"}],"functionName":{"name":"mstore","nativeSrc":"27775:6:69","nodeType":"YulIdentifier","src":"27775:6:69"},"nativeSrc":"27775:58:69","nodeType":"YulFunctionCall","src":"27775:58:69"},"nativeSrc":"27775:58:69","nodeType":"YulExpressionStatement","src":"27775:58:69"}]},"name":"abi_encode_t_rational_0_by_1_to_t_uint256_fromStack","nativeSrc":"27692:147:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"27753:5:69","nodeType":"YulTypedName","src":"27753:5:69","type":""},{"name":"pos","nativeSrc":"27760:3:69","nodeType":"YulTypedName","src":"27760:3:69","type":""}],"src":"27692:147:69"},{"body":{"nativeSrc":"28007:296:69","nodeType":"YulBlock","src":"28007:296:69","statements":[{"nativeSrc":"28017:26:69","nodeType":"YulAssignment","src":"28017:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"28029:9:69","nodeType":"YulIdentifier","src":"28029:9:69"},{"kind":"number","nativeSrc":"28040:2:69","nodeType":"YulLiteral","src":"28040:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"28025:3:69","nodeType":"YulIdentifier","src":"28025:3:69"},"nativeSrc":"28025:18:69","nodeType":"YulFunctionCall","src":"28025:18:69"},"variableNames":[{"name":"tail","nativeSrc":"28017:4:69","nodeType":"YulIdentifier","src":"28017:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"28097:6:69","nodeType":"YulIdentifier","src":"28097:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"28110:9:69","nodeType":"YulIdentifier","src":"28110:9:69"},{"kind":"number","nativeSrc":"28121:1:69","nodeType":"YulLiteral","src":"28121:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"28106:3:69","nodeType":"YulIdentifier","src":"28106:3:69"},"nativeSrc":"28106:17:69","nodeType":"YulFunctionCall","src":"28106:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"28053:43:69","nodeType":"YulIdentifier","src":"28053:43:69"},"nativeSrc":"28053:71:69","nodeType":"YulFunctionCall","src":"28053:71:69"},"nativeSrc":"28053:71:69","nodeType":"YulExpressionStatement","src":"28053:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"28186:6:69","nodeType":"YulIdentifier","src":"28186:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"28199:9:69","nodeType":"YulIdentifier","src":"28199:9:69"},{"kind":"number","nativeSrc":"28210:2:69","nodeType":"YulLiteral","src":"28210:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"28195:3:69","nodeType":"YulIdentifier","src":"28195:3:69"},"nativeSrc":"28195:18:69","nodeType":"YulFunctionCall","src":"28195:18:69"}],"functionName":{"name":"abi_encode_t_rational_0_by_1_to_t_uint256_fromStack","nativeSrc":"28134:51:69","nodeType":"YulIdentifier","src":"28134:51:69"},"nativeSrc":"28134:80:69","nodeType":"YulFunctionCall","src":"28134:80:69"},"nativeSrc":"28134:80:69","nodeType":"YulExpressionStatement","src":"28134:80:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"28268:6:69","nodeType":"YulIdentifier","src":"28268:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"28281:9:69","nodeType":"YulIdentifier","src":"28281:9:69"},{"kind":"number","nativeSrc":"28292:2:69","nodeType":"YulLiteral","src":"28292:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"28277:3:69","nodeType":"YulIdentifier","src":"28277:3:69"},"nativeSrc":"28277:18:69","nodeType":"YulFunctionCall","src":"28277:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"28224:43:69","nodeType":"YulIdentifier","src":"28224:43:69"},"nativeSrc":"28224:72:69","nodeType":"YulFunctionCall","src":"28224:72:69"},"nativeSrc":"28224:72:69","nodeType":"YulExpressionStatement","src":"28224:72:69"}]},"name":"abi_encode_tuple_t_uint256_t_rational_0_by_1_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"27845:458:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"27963:9:69","nodeType":"YulTypedName","src":"27963:9:69","type":""},{"name":"value2","nativeSrc":"27975:6:69","nodeType":"YulTypedName","src":"27975:6:69","type":""},{"name":"value1","nativeSrc":"27983:6:69","nodeType":"YulTypedName","src":"27983:6:69","type":""},{"name":"value0","nativeSrc":"27991:6:69","nodeType":"YulTypedName","src":"27991:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"28002:4:69","nodeType":"YulTypedName","src":"28002:4:69","type":""}],"src":"27845:458:69"},{"body":{"nativeSrc":"28415:122:69","nodeType":"YulBlock","src":"28415:122:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"28437:6:69","nodeType":"YulIdentifier","src":"28437:6:69"},{"kind":"number","nativeSrc":"28445:1:69","nodeType":"YulLiteral","src":"28445:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"28433:3:69","nodeType":"YulIdentifier","src":"28433:3:69"},"nativeSrc":"28433:14:69","nodeType":"YulFunctionCall","src":"28433:14:69"},{"hexValue":"4f776e61626c6532537465703a2063616c6c6572206973206e6f742074686520","kind":"string","nativeSrc":"28449:34:69","nodeType":"YulLiteral","src":"28449:34:69","type":"","value":"Ownable2Step: caller is not the "}],"functionName":{"name":"mstore","nativeSrc":"28426:6:69","nodeType":"YulIdentifier","src":"28426:6:69"},"nativeSrc":"28426:58:69","nodeType":"YulFunctionCall","src":"28426:58:69"},"nativeSrc":"28426:58:69","nodeType":"YulExpressionStatement","src":"28426:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"28505:6:69","nodeType":"YulIdentifier","src":"28505:6:69"},{"kind":"number","nativeSrc":"28513:2:69","nodeType":"YulLiteral","src":"28513:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"28501:3:69","nodeType":"YulIdentifier","src":"28501:3:69"},"nativeSrc":"28501:15:69","nodeType":"YulFunctionCall","src":"28501:15:69"},{"hexValue":"6e6577206f776e6572","kind":"string","nativeSrc":"28518:11:69","nodeType":"YulLiteral","src":"28518:11:69","type":"","value":"new owner"}],"functionName":{"name":"mstore","nativeSrc":"28494:6:69","nodeType":"YulIdentifier","src":"28494:6:69"},"nativeSrc":"28494:36:69","nodeType":"YulFunctionCall","src":"28494:36:69"},"nativeSrc":"28494:36:69","nodeType":"YulExpressionStatement","src":"28494:36:69"}]},"name":"store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc","nativeSrc":"28309:228:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"28407:6:69","nodeType":"YulTypedName","src":"28407:6:69","type":""}],"src":"28309:228:69"},{"body":{"nativeSrc":"28689:220:69","nodeType":"YulBlock","src":"28689:220:69","statements":[{"nativeSrc":"28699:74:69","nodeType":"YulAssignment","src":"28699:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"28765:3:69","nodeType":"YulIdentifier","src":"28765:3:69"},{"kind":"number","nativeSrc":"28770:2:69","nodeType":"YulLiteral","src":"28770:2:69","type":"","value":"41"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"28706:58:69","nodeType":"YulIdentifier","src":"28706:58:69"},"nativeSrc":"28706:67:69","nodeType":"YulFunctionCall","src":"28706:67:69"},"variableNames":[{"name":"pos","nativeSrc":"28699:3:69","nodeType":"YulIdentifier","src":"28699:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"28871:3:69","nodeType":"YulIdentifier","src":"28871:3:69"}],"functionName":{"name":"store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc","nativeSrc":"28782:88:69","nodeType":"YulIdentifier","src":"28782:88:69"},"nativeSrc":"28782:93:69","nodeType":"YulFunctionCall","src":"28782:93:69"},"nativeSrc":"28782:93:69","nodeType":"YulExpressionStatement","src":"28782:93:69"},{"nativeSrc":"28884:19:69","nodeType":"YulAssignment","src":"28884:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"28895:3:69","nodeType":"YulIdentifier","src":"28895:3:69"},{"kind":"number","nativeSrc":"28900:2:69","nodeType":"YulLiteral","src":"28900:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"28891:3:69","nodeType":"YulIdentifier","src":"28891:3:69"},"nativeSrc":"28891:12:69","nodeType":"YulFunctionCall","src":"28891:12:69"},"variableNames":[{"name":"end","nativeSrc":"28884:3:69","nodeType":"YulIdentifier","src":"28884:3:69"}]}]},"name":"abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack","nativeSrc":"28543:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"28677:3:69","nodeType":"YulTypedName","src":"28677:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"28685:3:69","nodeType":"YulTypedName","src":"28685:3:69","type":""}],"src":"28543:366:69"},{"body":{"nativeSrc":"29086:248:69","nodeType":"YulBlock","src":"29086:248:69","statements":[{"nativeSrc":"29096:26:69","nodeType":"YulAssignment","src":"29096:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"29108:9:69","nodeType":"YulIdentifier","src":"29108:9:69"},{"kind":"number","nativeSrc":"29119:2:69","nodeType":"YulLiteral","src":"29119:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"29104:3:69","nodeType":"YulIdentifier","src":"29104:3:69"},"nativeSrc":"29104:18:69","nodeType":"YulFunctionCall","src":"29104:18:69"},"variableNames":[{"name":"tail","nativeSrc":"29096:4:69","nodeType":"YulIdentifier","src":"29096:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"29143:9:69","nodeType":"YulIdentifier","src":"29143:9:69"},{"kind":"number","nativeSrc":"29154:1:69","nodeType":"YulLiteral","src":"29154:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"29139:3:69","nodeType":"YulIdentifier","src":"29139:3:69"},"nativeSrc":"29139:17:69","nodeType":"YulFunctionCall","src":"29139:17:69"},{"arguments":[{"name":"tail","nativeSrc":"29162:4:69","nodeType":"YulIdentifier","src":"29162:4:69"},{"name":"headStart","nativeSrc":"29168:9:69","nodeType":"YulIdentifier","src":"29168:9:69"}],"functionName":{"name":"sub","nativeSrc":"29158:3:69","nodeType":"YulIdentifier","src":"29158:3:69"},"nativeSrc":"29158:20:69","nodeType":"YulFunctionCall","src":"29158:20:69"}],"functionName":{"name":"mstore","nativeSrc":"29132:6:69","nodeType":"YulIdentifier","src":"29132:6:69"},"nativeSrc":"29132:47:69","nodeType":"YulFunctionCall","src":"29132:47:69"},"nativeSrc":"29132:47:69","nodeType":"YulExpressionStatement","src":"29132:47:69"},{"nativeSrc":"29188:139:69","nodeType":"YulAssignment","src":"29188:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"29322:4:69","nodeType":"YulIdentifier","src":"29322:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack","nativeSrc":"29196:124:69","nodeType":"YulIdentifier","src":"29196:124:69"},"nativeSrc":"29196:131:69","nodeType":"YulFunctionCall","src":"29196:131:69"},"variableNames":[{"name":"tail","nativeSrc":"29188:4:69","nodeType":"YulIdentifier","src":"29188:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"28915:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"29066:9:69","nodeType":"YulTypedName","src":"29066:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"29081:4:69","nodeType":"YulTypedName","src":"29081:4:69","type":""}],"src":"28915:419:69"},{"body":{"nativeSrc":"29446:127:69","nodeType":"YulBlock","src":"29446:127:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"29468:6:69","nodeType":"YulIdentifier","src":"29468:6:69"},{"kind":"number","nativeSrc":"29476:1:69","nodeType":"YulLiteral","src":"29476:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"29464:3:69","nodeType":"YulIdentifier","src":"29464:3:69"},"nativeSrc":"29464:14:69","nodeType":"YulFunctionCall","src":"29464:14:69"},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320616c726561","kind":"string","nativeSrc":"29480:34:69","nodeType":"YulLiteral","src":"29480:34:69","type":"","value":"Initializable: contract is alrea"}],"functionName":{"name":"mstore","nativeSrc":"29457:6:69","nodeType":"YulIdentifier","src":"29457:6:69"},"nativeSrc":"29457:58:69","nodeType":"YulFunctionCall","src":"29457:58:69"},"nativeSrc":"29457:58:69","nodeType":"YulExpressionStatement","src":"29457:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"29536:6:69","nodeType":"YulIdentifier","src":"29536:6:69"},{"kind":"number","nativeSrc":"29544:2:69","nodeType":"YulLiteral","src":"29544:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"29532:3:69","nodeType":"YulIdentifier","src":"29532:3:69"},"nativeSrc":"29532:15:69","nodeType":"YulFunctionCall","src":"29532:15:69"},{"hexValue":"647920696e697469616c697a6564","kind":"string","nativeSrc":"29549:16:69","nodeType":"YulLiteral","src":"29549:16:69","type":"","value":"dy initialized"}],"functionName":{"name":"mstore","nativeSrc":"29525:6:69","nodeType":"YulIdentifier","src":"29525:6:69"},"nativeSrc":"29525:41:69","nodeType":"YulFunctionCall","src":"29525:41:69"},"nativeSrc":"29525:41:69","nodeType":"YulExpressionStatement","src":"29525:41:69"}]},"name":"store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","nativeSrc":"29340:233:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"29438:6:69","nodeType":"YulTypedName","src":"29438:6:69","type":""}],"src":"29340:233:69"},{"body":{"nativeSrc":"29725:220:69","nodeType":"YulBlock","src":"29725:220:69","statements":[{"nativeSrc":"29735:74:69","nodeType":"YulAssignment","src":"29735:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"29801:3:69","nodeType":"YulIdentifier","src":"29801:3:69"},{"kind":"number","nativeSrc":"29806:2:69","nodeType":"YulLiteral","src":"29806:2:69","type":"","value":"46"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"29742:58:69","nodeType":"YulIdentifier","src":"29742:58:69"},"nativeSrc":"29742:67:69","nodeType":"YulFunctionCall","src":"29742:67:69"},"variableNames":[{"name":"pos","nativeSrc":"29735:3:69","nodeType":"YulIdentifier","src":"29735:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"29907:3:69","nodeType":"YulIdentifier","src":"29907:3:69"}],"functionName":{"name":"store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","nativeSrc":"29818:88:69","nodeType":"YulIdentifier","src":"29818:88:69"},"nativeSrc":"29818:93:69","nodeType":"YulFunctionCall","src":"29818:93:69"},"nativeSrc":"29818:93:69","nodeType":"YulExpressionStatement","src":"29818:93:69"},{"nativeSrc":"29920:19:69","nodeType":"YulAssignment","src":"29920:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"29931:3:69","nodeType":"YulIdentifier","src":"29931:3:69"},{"kind":"number","nativeSrc":"29936:2:69","nodeType":"YulLiteral","src":"29936:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"29927:3:69","nodeType":"YulIdentifier","src":"29927:3:69"},"nativeSrc":"29927:12:69","nodeType":"YulFunctionCall","src":"29927:12:69"},"variableNames":[{"name":"end","nativeSrc":"29920:3:69","nodeType":"YulIdentifier","src":"29920:3:69"}]}]},"name":"abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack","nativeSrc":"29579:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"29713:3:69","nodeType":"YulTypedName","src":"29713:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"29721:3:69","nodeType":"YulTypedName","src":"29721:3:69","type":""}],"src":"29579:366:69"},{"body":{"nativeSrc":"30122:248:69","nodeType":"YulBlock","src":"30122:248:69","statements":[{"nativeSrc":"30132:26:69","nodeType":"YulAssignment","src":"30132:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"30144:9:69","nodeType":"YulIdentifier","src":"30144:9:69"},{"kind":"number","nativeSrc":"30155:2:69","nodeType":"YulLiteral","src":"30155:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"30140:3:69","nodeType":"YulIdentifier","src":"30140:3:69"},"nativeSrc":"30140:18:69","nodeType":"YulFunctionCall","src":"30140:18:69"},"variableNames":[{"name":"tail","nativeSrc":"30132:4:69","nodeType":"YulIdentifier","src":"30132:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"30179:9:69","nodeType":"YulIdentifier","src":"30179:9:69"},{"kind":"number","nativeSrc":"30190:1:69","nodeType":"YulLiteral","src":"30190:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"30175:3:69","nodeType":"YulIdentifier","src":"30175:3:69"},"nativeSrc":"30175:17:69","nodeType":"YulFunctionCall","src":"30175:17:69"},{"arguments":[{"name":"tail","nativeSrc":"30198:4:69","nodeType":"YulIdentifier","src":"30198:4:69"},{"name":"headStart","nativeSrc":"30204:9:69","nodeType":"YulIdentifier","src":"30204:9:69"}],"functionName":{"name":"sub","nativeSrc":"30194:3:69","nodeType":"YulIdentifier","src":"30194:3:69"},"nativeSrc":"30194:20:69","nodeType":"YulFunctionCall","src":"30194:20:69"}],"functionName":{"name":"mstore","nativeSrc":"30168:6:69","nodeType":"YulIdentifier","src":"30168:6:69"},"nativeSrc":"30168:47:69","nodeType":"YulFunctionCall","src":"30168:47:69"},"nativeSrc":"30168:47:69","nodeType":"YulExpressionStatement","src":"30168:47:69"},{"nativeSrc":"30224:139:69","nodeType":"YulAssignment","src":"30224:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"30358:4:69","nodeType":"YulIdentifier","src":"30358:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack","nativeSrc":"30232:124:69","nodeType":"YulIdentifier","src":"30232:124:69"},"nativeSrc":"30232:131:69","nodeType":"YulFunctionCall","src":"30232:131:69"},"variableNames":[{"name":"tail","nativeSrc":"30224:4:69","nodeType":"YulIdentifier","src":"30224:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"29951:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"30102:9:69","nodeType":"YulTypedName","src":"30102:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"30117:4:69","nodeType":"YulTypedName","src":"30117:4:69","type":""}],"src":"29951:419:69"},{"body":{"nativeSrc":"30429:32:69","nodeType":"YulBlock","src":"30429:32:69","statements":[{"nativeSrc":"30439:16:69","nodeType":"YulAssignment","src":"30439:16:69","value":{"name":"value","nativeSrc":"30450:5:69","nodeType":"YulIdentifier","src":"30450:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"30439:7:69","nodeType":"YulIdentifier","src":"30439:7:69"}]}]},"name":"cleanup_t_rational_1_by_1","nativeSrc":"30376:85:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"30411:5:69","nodeType":"YulTypedName","src":"30411:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"30421:7:69","nodeType":"YulTypedName","src":"30421:7:69","type":""}],"src":"30376:85:69"},{"body":{"nativeSrc":"30533:88:69","nodeType":"YulBlock","src":"30533:88:69","statements":[{"nativeSrc":"30543:72:69","nodeType":"YulAssignment","src":"30543:72:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"30607:5:69","nodeType":"YulIdentifier","src":"30607:5:69"}],"functionName":{"name":"cleanup_t_rational_1_by_1","nativeSrc":"30581:25:69","nodeType":"YulIdentifier","src":"30581:25:69"},"nativeSrc":"30581:32:69","nodeType":"YulFunctionCall","src":"30581:32:69"}],"functionName":{"name":"identity","nativeSrc":"30572:8:69","nodeType":"YulIdentifier","src":"30572:8:69"},"nativeSrc":"30572:42:69","nodeType":"YulFunctionCall","src":"30572:42:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"30556:15:69","nodeType":"YulIdentifier","src":"30556:15:69"},"nativeSrc":"30556:59:69","nodeType":"YulFunctionCall","src":"30556:59:69"},"variableNames":[{"name":"converted","nativeSrc":"30543:9:69","nodeType":"YulIdentifier","src":"30543:9:69"}]}]},"name":"convert_t_rational_1_by_1_to_t_uint8","nativeSrc":"30467:154:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"30513:5:69","nodeType":"YulTypedName","src":"30513:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"30523:9:69","nodeType":"YulTypedName","src":"30523:9:69","type":""}],"src":"30467:154:69"},{"body":{"nativeSrc":"30698:72:69","nodeType":"YulBlock","src":"30698:72:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"30715:3:69","nodeType":"YulIdentifier","src":"30715:3:69"},{"arguments":[{"name":"value","nativeSrc":"30757:5:69","nodeType":"YulIdentifier","src":"30757:5:69"}],"functionName":{"name":"convert_t_rational_1_by_1_to_t_uint8","nativeSrc":"30720:36:69","nodeType":"YulIdentifier","src":"30720:36:69"},"nativeSrc":"30720:43:69","nodeType":"YulFunctionCall","src":"30720:43:69"}],"functionName":{"name":"mstore","nativeSrc":"30708:6:69","nodeType":"YulIdentifier","src":"30708:6:69"},"nativeSrc":"30708:56:69","nodeType":"YulFunctionCall","src":"30708:56:69"},"nativeSrc":"30708:56:69","nodeType":"YulExpressionStatement","src":"30708:56:69"}]},"name":"abi_encode_t_rational_1_by_1_to_t_uint8_fromStack","nativeSrc":"30627:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"30686:5:69","nodeType":"YulTypedName","src":"30686:5:69","type":""},{"name":"pos","nativeSrc":"30693:3:69","nodeType":"YulTypedName","src":"30693:3:69","type":""}],"src":"30627:143:69"},{"body":{"nativeSrc":"30880:130:69","nodeType":"YulBlock","src":"30880:130:69","statements":[{"nativeSrc":"30890:26:69","nodeType":"YulAssignment","src":"30890:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"30902:9:69","nodeType":"YulIdentifier","src":"30902:9:69"},{"kind":"number","nativeSrc":"30913:2:69","nodeType":"YulLiteral","src":"30913:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"30898:3:69","nodeType":"YulIdentifier","src":"30898:3:69"},"nativeSrc":"30898:18:69","nodeType":"YulFunctionCall","src":"30898:18:69"},"variableNames":[{"name":"tail","nativeSrc":"30890:4:69","nodeType":"YulIdentifier","src":"30890:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"30976:6:69","nodeType":"YulIdentifier","src":"30976:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"30989:9:69","nodeType":"YulIdentifier","src":"30989:9:69"},{"kind":"number","nativeSrc":"31000:1:69","nodeType":"YulLiteral","src":"31000:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"30985:3:69","nodeType":"YulIdentifier","src":"30985:3:69"},"nativeSrc":"30985:17:69","nodeType":"YulFunctionCall","src":"30985:17:69"}],"functionName":{"name":"abi_encode_t_rational_1_by_1_to_t_uint8_fromStack","nativeSrc":"30926:49:69","nodeType":"YulIdentifier","src":"30926:49:69"},"nativeSrc":"30926:77:69","nodeType":"YulFunctionCall","src":"30926:77:69"},"nativeSrc":"30926:77:69","nodeType":"YulExpressionStatement","src":"30926:77:69"}]},"name":"abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed","nativeSrc":"30776:234:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"30852:9:69","nodeType":"YulTypedName","src":"30852:9:69","type":""},{"name":"value0","nativeSrc":"30864:6:69","nodeType":"YulTypedName","src":"30864:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"30875:4:69","nodeType":"YulTypedName","src":"30875:4:69","type":""}],"src":"30776:234:69"},{"body":{"nativeSrc":"31122:74:69","nodeType":"YulBlock","src":"31122:74:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"31144:6:69","nodeType":"YulIdentifier","src":"31144:6:69"},{"kind":"number","nativeSrc":"31152:1:69","nodeType":"YulLiteral","src":"31152:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"31140:3:69","nodeType":"YulIdentifier","src":"31140:3:69"},"nativeSrc":"31140:14:69","nodeType":"YulFunctionCall","src":"31140:14:69"},{"hexValue":"64656372656173656420616c6c6f77616e63652062656c6f77207a65726f","kind":"string","nativeSrc":"31156:32:69","nodeType":"YulLiteral","src":"31156:32:69","type":"","value":"decreased allowance below zero"}],"functionName":{"name":"mstore","nativeSrc":"31133:6:69","nodeType":"YulIdentifier","src":"31133:6:69"},"nativeSrc":"31133:56:69","nodeType":"YulFunctionCall","src":"31133:56:69"},"nativeSrc":"31133:56:69","nodeType":"YulExpressionStatement","src":"31133:56:69"}]},"name":"store_literal_in_memory_500b2609d0ae28daff27dc4a068dcae2171019163b460eb756cfa6b0b62ba48a","nativeSrc":"31016:180:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"31114:6:69","nodeType":"YulTypedName","src":"31114:6:69","type":""}],"src":"31016:180:69"},{"body":{"nativeSrc":"31348:220:69","nodeType":"YulBlock","src":"31348:220:69","statements":[{"nativeSrc":"31358:74:69","nodeType":"YulAssignment","src":"31358:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"31424:3:69","nodeType":"YulIdentifier","src":"31424:3:69"},{"kind":"number","nativeSrc":"31429:2:69","nodeType":"YulLiteral","src":"31429:2:69","type":"","value":"30"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"31365:58:69","nodeType":"YulIdentifier","src":"31365:58:69"},"nativeSrc":"31365:67:69","nodeType":"YulFunctionCall","src":"31365:67:69"},"variableNames":[{"name":"pos","nativeSrc":"31358:3:69","nodeType":"YulIdentifier","src":"31358:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"31530:3:69","nodeType":"YulIdentifier","src":"31530:3:69"}],"functionName":{"name":"store_literal_in_memory_500b2609d0ae28daff27dc4a068dcae2171019163b460eb756cfa6b0b62ba48a","nativeSrc":"31441:88:69","nodeType":"YulIdentifier","src":"31441:88:69"},"nativeSrc":"31441:93:69","nodeType":"YulFunctionCall","src":"31441:93:69"},"nativeSrc":"31441:93:69","nodeType":"YulExpressionStatement","src":"31441:93:69"},{"nativeSrc":"31543:19:69","nodeType":"YulAssignment","src":"31543:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"31554:3:69","nodeType":"YulIdentifier","src":"31554:3:69"},{"kind":"number","nativeSrc":"31559:2:69","nodeType":"YulLiteral","src":"31559:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"31550:3:69","nodeType":"YulIdentifier","src":"31550:3:69"},"nativeSrc":"31550:12:69","nodeType":"YulFunctionCall","src":"31550:12:69"},"variableNames":[{"name":"end","nativeSrc":"31543:3:69","nodeType":"YulIdentifier","src":"31543:3:69"}]}]},"name":"abi_encode_t_stringliteral_500b2609d0ae28daff27dc4a068dcae2171019163b460eb756cfa6b0b62ba48a_to_t_string_memory_ptr_fromStack","nativeSrc":"31202:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"31336:3:69","nodeType":"YulTypedName","src":"31336:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"31344:3:69","nodeType":"YulTypedName","src":"31344:3:69","type":""}],"src":"31202:366:69"},{"body":{"nativeSrc":"31745:248:69","nodeType":"YulBlock","src":"31745:248:69","statements":[{"nativeSrc":"31755:26:69","nodeType":"YulAssignment","src":"31755:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"31767:9:69","nodeType":"YulIdentifier","src":"31767:9:69"},{"kind":"number","nativeSrc":"31778:2:69","nodeType":"YulLiteral","src":"31778:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"31763:3:69","nodeType":"YulIdentifier","src":"31763:3:69"},"nativeSrc":"31763:18:69","nodeType":"YulFunctionCall","src":"31763:18:69"},"variableNames":[{"name":"tail","nativeSrc":"31755:4:69","nodeType":"YulIdentifier","src":"31755:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"31802:9:69","nodeType":"YulIdentifier","src":"31802:9:69"},{"kind":"number","nativeSrc":"31813:1:69","nodeType":"YulLiteral","src":"31813:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"31798:3:69","nodeType":"YulIdentifier","src":"31798:3:69"},"nativeSrc":"31798:17:69","nodeType":"YulFunctionCall","src":"31798:17:69"},{"arguments":[{"name":"tail","nativeSrc":"31821:4:69","nodeType":"YulIdentifier","src":"31821:4:69"},{"name":"headStart","nativeSrc":"31827:9:69","nodeType":"YulIdentifier","src":"31827:9:69"}],"functionName":{"name":"sub","nativeSrc":"31817:3:69","nodeType":"YulIdentifier","src":"31817:3:69"},"nativeSrc":"31817:20:69","nodeType":"YulFunctionCall","src":"31817:20:69"}],"functionName":{"name":"mstore","nativeSrc":"31791:6:69","nodeType":"YulIdentifier","src":"31791:6:69"},"nativeSrc":"31791:47:69","nodeType":"YulFunctionCall","src":"31791:47:69"},"nativeSrc":"31791:47:69","nodeType":"YulExpressionStatement","src":"31791:47:69"},{"nativeSrc":"31847:139:69","nodeType":"YulAssignment","src":"31847:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"31981:4:69","nodeType":"YulIdentifier","src":"31981:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_500b2609d0ae28daff27dc4a068dcae2171019163b460eb756cfa6b0b62ba48a_to_t_string_memory_ptr_fromStack","nativeSrc":"31855:124:69","nodeType":"YulIdentifier","src":"31855:124:69"},"nativeSrc":"31855:131:69","nodeType":"YulFunctionCall","src":"31855:131:69"},"variableNames":[{"name":"tail","nativeSrc":"31847:4:69","nodeType":"YulIdentifier","src":"31847:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_500b2609d0ae28daff27dc4a068dcae2171019163b460eb756cfa6b0b62ba48a__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"31574:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"31725:9:69","nodeType":"YulTypedName","src":"31725:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"31740:4:69","nodeType":"YulTypedName","src":"31740:4:69","type":""}],"src":"31574:419:69"},{"body":{"nativeSrc":"32105:72:69","nodeType":"YulBlock","src":"32105:72:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"32127:6:69","nodeType":"YulIdentifier","src":"32127:6:69"},{"kind":"number","nativeSrc":"32135:1:69","nodeType":"YulLiteral","src":"32135:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"32123:3:69","nodeType":"YulIdentifier","src":"32123:3:69"},"nativeSrc":"32123:14:69","nodeType":"YulFunctionCall","src":"32123:14:69"},{"hexValue":"626f72726f772072617465206973206162737572646c792068696768","kind":"string","nativeSrc":"32139:30:69","nodeType":"YulLiteral","src":"32139:30:69","type":"","value":"borrow rate is absurdly high"}],"functionName":{"name":"mstore","nativeSrc":"32116:6:69","nodeType":"YulIdentifier","src":"32116:6:69"},"nativeSrc":"32116:54:69","nodeType":"YulFunctionCall","src":"32116:54:69"},"nativeSrc":"32116:54:69","nodeType":"YulExpressionStatement","src":"32116:54:69"}]},"name":"store_literal_in_memory_9ab90068dc5fe9f7def6aab4ae887ed8eff65c4b83c1b9ba6beb99101f1ae8ea","nativeSrc":"31999:178:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"32097:6:69","nodeType":"YulTypedName","src":"32097:6:69","type":""}],"src":"31999:178:69"},{"body":{"nativeSrc":"32329:220:69","nodeType":"YulBlock","src":"32329:220:69","statements":[{"nativeSrc":"32339:74:69","nodeType":"YulAssignment","src":"32339:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"32405:3:69","nodeType":"YulIdentifier","src":"32405:3:69"},{"kind":"number","nativeSrc":"32410:2:69","nodeType":"YulLiteral","src":"32410:2:69","type":"","value":"28"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"32346:58:69","nodeType":"YulIdentifier","src":"32346:58:69"},"nativeSrc":"32346:67:69","nodeType":"YulFunctionCall","src":"32346:67:69"},"variableNames":[{"name":"pos","nativeSrc":"32339:3:69","nodeType":"YulIdentifier","src":"32339:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"32511:3:69","nodeType":"YulIdentifier","src":"32511:3:69"}],"functionName":{"name":"store_literal_in_memory_9ab90068dc5fe9f7def6aab4ae887ed8eff65c4b83c1b9ba6beb99101f1ae8ea","nativeSrc":"32422:88:69","nodeType":"YulIdentifier","src":"32422:88:69"},"nativeSrc":"32422:93:69","nodeType":"YulFunctionCall","src":"32422:93:69"},"nativeSrc":"32422:93:69","nodeType":"YulExpressionStatement","src":"32422:93:69"},{"nativeSrc":"32524:19:69","nodeType":"YulAssignment","src":"32524:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"32535:3:69","nodeType":"YulIdentifier","src":"32535:3:69"},{"kind":"number","nativeSrc":"32540:2:69","nodeType":"YulLiteral","src":"32540:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"32531:3:69","nodeType":"YulIdentifier","src":"32531:3:69"},"nativeSrc":"32531:12:69","nodeType":"YulFunctionCall","src":"32531:12:69"},"variableNames":[{"name":"end","nativeSrc":"32524:3:69","nodeType":"YulIdentifier","src":"32524:3:69"}]}]},"name":"abi_encode_t_stringliteral_9ab90068dc5fe9f7def6aab4ae887ed8eff65c4b83c1b9ba6beb99101f1ae8ea_to_t_string_memory_ptr_fromStack","nativeSrc":"32183:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"32317:3:69","nodeType":"YulTypedName","src":"32317:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"32325:3:69","nodeType":"YulTypedName","src":"32325:3:69","type":""}],"src":"32183:366:69"},{"body":{"nativeSrc":"32726:248:69","nodeType":"YulBlock","src":"32726:248:69","statements":[{"nativeSrc":"32736:26:69","nodeType":"YulAssignment","src":"32736:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"32748:9:69","nodeType":"YulIdentifier","src":"32748:9:69"},{"kind":"number","nativeSrc":"32759:2:69","nodeType":"YulLiteral","src":"32759:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"32744:3:69","nodeType":"YulIdentifier","src":"32744:3:69"},"nativeSrc":"32744:18:69","nodeType":"YulFunctionCall","src":"32744:18:69"},"variableNames":[{"name":"tail","nativeSrc":"32736:4:69","nodeType":"YulIdentifier","src":"32736:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"32783:9:69","nodeType":"YulIdentifier","src":"32783:9:69"},{"kind":"number","nativeSrc":"32794:1:69","nodeType":"YulLiteral","src":"32794:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"32779:3:69","nodeType":"YulIdentifier","src":"32779:3:69"},"nativeSrc":"32779:17:69","nodeType":"YulFunctionCall","src":"32779:17:69"},{"arguments":[{"name":"tail","nativeSrc":"32802:4:69","nodeType":"YulIdentifier","src":"32802:4:69"},{"name":"headStart","nativeSrc":"32808:9:69","nodeType":"YulIdentifier","src":"32808:9:69"}],"functionName":{"name":"sub","nativeSrc":"32798:3:69","nodeType":"YulIdentifier","src":"32798:3:69"},"nativeSrc":"32798:20:69","nodeType":"YulFunctionCall","src":"32798:20:69"}],"functionName":{"name":"mstore","nativeSrc":"32772:6:69","nodeType":"YulIdentifier","src":"32772:6:69"},"nativeSrc":"32772:47:69","nodeType":"YulFunctionCall","src":"32772:47:69"},"nativeSrc":"32772:47:69","nodeType":"YulExpressionStatement","src":"32772:47:69"},{"nativeSrc":"32828:139:69","nodeType":"YulAssignment","src":"32828:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"32962:4:69","nodeType":"YulIdentifier","src":"32962:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_9ab90068dc5fe9f7def6aab4ae887ed8eff65c4b83c1b9ba6beb99101f1ae8ea_to_t_string_memory_ptr_fromStack","nativeSrc":"32836:124:69","nodeType":"YulIdentifier","src":"32836:124:69"},"nativeSrc":"32836:131:69","nodeType":"YulFunctionCall","src":"32836:131:69"},"variableNames":[{"name":"tail","nativeSrc":"32828:4:69","nodeType":"YulIdentifier","src":"32828:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_9ab90068dc5fe9f7def6aab4ae887ed8eff65c4b83c1b9ba6beb99101f1ae8ea__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"32555:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"32706:9:69","nodeType":"YulTypedName","src":"32706:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"32721:4:69","nodeType":"YulTypedName","src":"32721:4:69","type":""}],"src":"32555:419:69"},{"body":{"nativeSrc":"33190:454:69","nodeType":"YulBlock","src":"33190:454:69","statements":[{"nativeSrc":"33200:27:69","nodeType":"YulAssignment","src":"33200:27:69","value":{"arguments":[{"name":"headStart","nativeSrc":"33212:9:69","nodeType":"YulIdentifier","src":"33212:9:69"},{"kind":"number","nativeSrc":"33223:3:69","nodeType":"YulLiteral","src":"33223:3:69","type":"","value":"160"}],"functionName":{"name":"add","nativeSrc":"33208:3:69","nodeType":"YulIdentifier","src":"33208:3:69"},"nativeSrc":"33208:19:69","nodeType":"YulFunctionCall","src":"33208:19:69"},"variableNames":[{"name":"tail","nativeSrc":"33200:4:69","nodeType":"YulIdentifier","src":"33200:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"33281:6:69","nodeType":"YulIdentifier","src":"33281:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"33294:9:69","nodeType":"YulIdentifier","src":"33294:9:69"},{"kind":"number","nativeSrc":"33305:1:69","nodeType":"YulLiteral","src":"33305:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"33290:3:69","nodeType":"YulIdentifier","src":"33290:3:69"},"nativeSrc":"33290:17:69","nodeType":"YulFunctionCall","src":"33290:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"33237:43:69","nodeType":"YulIdentifier","src":"33237:43:69"},"nativeSrc":"33237:71:69","nodeType":"YulFunctionCall","src":"33237:71:69"},"nativeSrc":"33237:71:69","nodeType":"YulExpressionStatement","src":"33237:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"33362:6:69","nodeType":"YulIdentifier","src":"33362:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"33375:9:69","nodeType":"YulIdentifier","src":"33375:9:69"},{"kind":"number","nativeSrc":"33386:2:69","nodeType":"YulLiteral","src":"33386:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"33371:3:69","nodeType":"YulIdentifier","src":"33371:3:69"},"nativeSrc":"33371:18:69","nodeType":"YulFunctionCall","src":"33371:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"33318:43:69","nodeType":"YulIdentifier","src":"33318:43:69"},"nativeSrc":"33318:72:69","nodeType":"YulFunctionCall","src":"33318:72:69"},"nativeSrc":"33318:72:69","nodeType":"YulExpressionStatement","src":"33318:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"33444:6:69","nodeType":"YulIdentifier","src":"33444:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"33457:9:69","nodeType":"YulIdentifier","src":"33457:9:69"},{"kind":"number","nativeSrc":"33468:2:69","nodeType":"YulLiteral","src":"33468:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"33453:3:69","nodeType":"YulIdentifier","src":"33453:3:69"},"nativeSrc":"33453:18:69","nodeType":"YulFunctionCall","src":"33453:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"33400:43:69","nodeType":"YulIdentifier","src":"33400:43:69"},"nativeSrc":"33400:72:69","nodeType":"YulFunctionCall","src":"33400:72:69"},"nativeSrc":"33400:72:69","nodeType":"YulExpressionStatement","src":"33400:72:69"},{"expression":{"arguments":[{"name":"value3","nativeSrc":"33526:6:69","nodeType":"YulIdentifier","src":"33526:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"33539:9:69","nodeType":"YulIdentifier","src":"33539:9:69"},{"kind":"number","nativeSrc":"33550:2:69","nodeType":"YulLiteral","src":"33550:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"33535:3:69","nodeType":"YulIdentifier","src":"33535:3:69"},"nativeSrc":"33535:18:69","nodeType":"YulFunctionCall","src":"33535:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"33482:43:69","nodeType":"YulIdentifier","src":"33482:43:69"},"nativeSrc":"33482:72:69","nodeType":"YulFunctionCall","src":"33482:72:69"},"nativeSrc":"33482:72:69","nodeType":"YulExpressionStatement","src":"33482:72:69"},{"expression":{"arguments":[{"name":"value4","nativeSrc":"33608:6:69","nodeType":"YulIdentifier","src":"33608:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"33621:9:69","nodeType":"YulIdentifier","src":"33621:9:69"},{"kind":"number","nativeSrc":"33632:3:69","nodeType":"YulLiteral","src":"33632:3:69","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"33617:3:69","nodeType":"YulIdentifier","src":"33617:3:69"},"nativeSrc":"33617:19:69","nodeType":"YulFunctionCall","src":"33617:19:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"33564:43:69","nodeType":"YulIdentifier","src":"33564:43:69"},"nativeSrc":"33564:73:69","nodeType":"YulFunctionCall","src":"33564:73:69"},"nativeSrc":"33564:73:69","nodeType":"YulExpressionStatement","src":"33564:73:69"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"32980:664:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"33130:9:69","nodeType":"YulTypedName","src":"33130:9:69","type":""},{"name":"value4","nativeSrc":"33142:6:69","nodeType":"YulTypedName","src":"33142:6:69","type":""},{"name":"value3","nativeSrc":"33150:6:69","nodeType":"YulTypedName","src":"33150:6:69","type":""},{"name":"value2","nativeSrc":"33158:6:69","nodeType":"YulTypedName","src":"33158:6:69","type":""},{"name":"value1","nativeSrc":"33166:6:69","nodeType":"YulTypedName","src":"33166:6:69","type":""},{"name":"value0","nativeSrc":"33174:6:69","nodeType":"YulTypedName","src":"33174:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"33185:4:69","nodeType":"YulTypedName","src":"33185:4:69","type":""}],"src":"32980:664:69"},{"body":{"nativeSrc":"33756:124:69","nodeType":"YulBlock","src":"33756:124:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"33778:6:69","nodeType":"YulIdentifier","src":"33778:6:69"},{"kind":"number","nativeSrc":"33786:1:69","nodeType":"YulLiteral","src":"33786:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"33774:3:69","nodeType":"YulIdentifier","src":"33774:3:69"},"nativeSrc":"33774:14:69","nodeType":"YulFunctionCall","src":"33774:14:69"},{"hexValue":"6f6e6c792073686f727466616c6c20636f6e74726163742063616e2075706461","kind":"string","nativeSrc":"33790:34:69","nodeType":"YulLiteral","src":"33790:34:69","type":"","value":"only shortfall contract can upda"}],"functionName":{"name":"mstore","nativeSrc":"33767:6:69","nodeType":"YulIdentifier","src":"33767:6:69"},"nativeSrc":"33767:58:69","nodeType":"YulFunctionCall","src":"33767:58:69"},"nativeSrc":"33767:58:69","nodeType":"YulExpressionStatement","src":"33767:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"33846:6:69","nodeType":"YulIdentifier","src":"33846:6:69"},{"kind":"number","nativeSrc":"33854:2:69","nodeType":"YulLiteral","src":"33854:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"33842:3:69","nodeType":"YulIdentifier","src":"33842:3:69"},"nativeSrc":"33842:15:69","nodeType":"YulFunctionCall","src":"33842:15:69"},{"hexValue":"7465206261642064656274","kind":"string","nativeSrc":"33859:13:69","nodeType":"YulLiteral","src":"33859:13:69","type":"","value":"te bad debt"}],"functionName":{"name":"mstore","nativeSrc":"33835:6:69","nodeType":"YulIdentifier","src":"33835:6:69"},"nativeSrc":"33835:38:69","nodeType":"YulFunctionCall","src":"33835:38:69"},"nativeSrc":"33835:38:69","nodeType":"YulExpressionStatement","src":"33835:38:69"}]},"name":"store_literal_in_memory_d4c9546ba1ca6ea1666b690b57d3e7501f0db18dc1e34262166d8300121d27c9","nativeSrc":"33650:230:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"33748:6:69","nodeType":"YulTypedName","src":"33748:6:69","type":""}],"src":"33650:230:69"},{"body":{"nativeSrc":"34032:220:69","nodeType":"YulBlock","src":"34032:220:69","statements":[{"nativeSrc":"34042:74:69","nodeType":"YulAssignment","src":"34042:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"34108:3:69","nodeType":"YulIdentifier","src":"34108:3:69"},{"kind":"number","nativeSrc":"34113:2:69","nodeType":"YulLiteral","src":"34113:2:69","type":"","value":"43"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"34049:58:69","nodeType":"YulIdentifier","src":"34049:58:69"},"nativeSrc":"34049:67:69","nodeType":"YulFunctionCall","src":"34049:67:69"},"variableNames":[{"name":"pos","nativeSrc":"34042:3:69","nodeType":"YulIdentifier","src":"34042:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"34214:3:69","nodeType":"YulIdentifier","src":"34214:3:69"}],"functionName":{"name":"store_literal_in_memory_d4c9546ba1ca6ea1666b690b57d3e7501f0db18dc1e34262166d8300121d27c9","nativeSrc":"34125:88:69","nodeType":"YulIdentifier","src":"34125:88:69"},"nativeSrc":"34125:93:69","nodeType":"YulFunctionCall","src":"34125:93:69"},"nativeSrc":"34125:93:69","nodeType":"YulExpressionStatement","src":"34125:93:69"},{"nativeSrc":"34227:19:69","nodeType":"YulAssignment","src":"34227:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"34238:3:69","nodeType":"YulIdentifier","src":"34238:3:69"},{"kind":"number","nativeSrc":"34243:2:69","nodeType":"YulLiteral","src":"34243:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"34234:3:69","nodeType":"YulIdentifier","src":"34234:3:69"},"nativeSrc":"34234:12:69","nodeType":"YulFunctionCall","src":"34234:12:69"},"variableNames":[{"name":"end","nativeSrc":"34227:3:69","nodeType":"YulIdentifier","src":"34227:3:69"}]}]},"name":"abi_encode_t_stringliteral_d4c9546ba1ca6ea1666b690b57d3e7501f0db18dc1e34262166d8300121d27c9_to_t_string_memory_ptr_fromStack","nativeSrc":"33886:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"34020:3:69","nodeType":"YulTypedName","src":"34020:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"34028:3:69","nodeType":"YulTypedName","src":"34028:3:69","type":""}],"src":"33886:366:69"},{"body":{"nativeSrc":"34429:248:69","nodeType":"YulBlock","src":"34429:248:69","statements":[{"nativeSrc":"34439:26:69","nodeType":"YulAssignment","src":"34439:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"34451:9:69","nodeType":"YulIdentifier","src":"34451:9:69"},{"kind":"number","nativeSrc":"34462:2:69","nodeType":"YulLiteral","src":"34462:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"34447:3:69","nodeType":"YulIdentifier","src":"34447:3:69"},"nativeSrc":"34447:18:69","nodeType":"YulFunctionCall","src":"34447:18:69"},"variableNames":[{"name":"tail","nativeSrc":"34439:4:69","nodeType":"YulIdentifier","src":"34439:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"34486:9:69","nodeType":"YulIdentifier","src":"34486:9:69"},{"kind":"number","nativeSrc":"34497:1:69","nodeType":"YulLiteral","src":"34497:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"34482:3:69","nodeType":"YulIdentifier","src":"34482:3:69"},"nativeSrc":"34482:17:69","nodeType":"YulFunctionCall","src":"34482:17:69"},{"arguments":[{"name":"tail","nativeSrc":"34505:4:69","nodeType":"YulIdentifier","src":"34505:4:69"},{"name":"headStart","nativeSrc":"34511:9:69","nodeType":"YulIdentifier","src":"34511:9:69"}],"functionName":{"name":"sub","nativeSrc":"34501:3:69","nodeType":"YulIdentifier","src":"34501:3:69"},"nativeSrc":"34501:20:69","nodeType":"YulFunctionCall","src":"34501:20:69"}],"functionName":{"name":"mstore","nativeSrc":"34475:6:69","nodeType":"YulIdentifier","src":"34475:6:69"},"nativeSrc":"34475:47:69","nodeType":"YulFunctionCall","src":"34475:47:69"},"nativeSrc":"34475:47:69","nodeType":"YulExpressionStatement","src":"34475:47:69"},{"nativeSrc":"34531:139:69","nodeType":"YulAssignment","src":"34531:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"34665:4:69","nodeType":"YulIdentifier","src":"34665:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_d4c9546ba1ca6ea1666b690b57d3e7501f0db18dc1e34262166d8300121d27c9_to_t_string_memory_ptr_fromStack","nativeSrc":"34539:124:69","nodeType":"YulIdentifier","src":"34539:124:69"},"nativeSrc":"34539:131:69","nodeType":"YulFunctionCall","src":"34539:131:69"},"variableNames":[{"name":"tail","nativeSrc":"34531:4:69","nodeType":"YulIdentifier","src":"34531:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_d4c9546ba1ca6ea1666b690b57d3e7501f0db18dc1e34262166d8300121d27c9__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"34258:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"34409:9:69","nodeType":"YulTypedName","src":"34409:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"34424:4:69","nodeType":"YulTypedName","src":"34424:4:69","type":""}],"src":"34258:419:69"},{"body":{"nativeSrc":"34789:122:69","nodeType":"YulBlock","src":"34789:122:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"34811:6:69","nodeType":"YulIdentifier","src":"34811:6:69"},{"kind":"number","nativeSrc":"34819:1:69","nodeType":"YulLiteral","src":"34819:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"34807:3:69","nodeType":"YulIdentifier","src":"34807:3:69"},"nativeSrc":"34807:14:69","nodeType":"YulFunctionCall","src":"34807:14:69"},{"hexValue":"6d6f7265207468616e206261642064656274207265636f76657265642066726f","kind":"string","nativeSrc":"34823:34:69","nodeType":"YulLiteral","src":"34823:34:69","type":"","value":"more than bad debt recovered fro"}],"functionName":{"name":"mstore","nativeSrc":"34800:6:69","nodeType":"YulIdentifier","src":"34800:6:69"},"nativeSrc":"34800:58:69","nodeType":"YulFunctionCall","src":"34800:58:69"},"nativeSrc":"34800:58:69","nodeType":"YulExpressionStatement","src":"34800:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"34879:6:69","nodeType":"YulIdentifier","src":"34879:6:69"},{"kind":"number","nativeSrc":"34887:2:69","nodeType":"YulLiteral","src":"34887:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"34875:3:69","nodeType":"YulIdentifier","src":"34875:3:69"},"nativeSrc":"34875:15:69","nodeType":"YulFunctionCall","src":"34875:15:69"},{"hexValue":"6d2061756374696f6e","kind":"string","nativeSrc":"34892:11:69","nodeType":"YulLiteral","src":"34892:11:69","type":"","value":"m auction"}],"functionName":{"name":"mstore","nativeSrc":"34868:6:69","nodeType":"YulIdentifier","src":"34868:6:69"},"nativeSrc":"34868:36:69","nodeType":"YulFunctionCall","src":"34868:36:69"},"nativeSrc":"34868:36:69","nodeType":"YulExpressionStatement","src":"34868:36:69"}]},"name":"store_literal_in_memory_65583512d4629ad47546f868609492cfe1fd22a35bae5f1962d105953201ab5e","nativeSrc":"34683:228:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"34781:6:69","nodeType":"YulTypedName","src":"34781:6:69","type":""}],"src":"34683:228:69"},{"body":{"nativeSrc":"35063:220:69","nodeType":"YulBlock","src":"35063:220:69","statements":[{"nativeSrc":"35073:74:69","nodeType":"YulAssignment","src":"35073:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"35139:3:69","nodeType":"YulIdentifier","src":"35139:3:69"},{"kind":"number","nativeSrc":"35144:2:69","nodeType":"YulLiteral","src":"35144:2:69","type":"","value":"41"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"35080:58:69","nodeType":"YulIdentifier","src":"35080:58:69"},"nativeSrc":"35080:67:69","nodeType":"YulFunctionCall","src":"35080:67:69"},"variableNames":[{"name":"pos","nativeSrc":"35073:3:69","nodeType":"YulIdentifier","src":"35073:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"35245:3:69","nodeType":"YulIdentifier","src":"35245:3:69"}],"functionName":{"name":"store_literal_in_memory_65583512d4629ad47546f868609492cfe1fd22a35bae5f1962d105953201ab5e","nativeSrc":"35156:88:69","nodeType":"YulIdentifier","src":"35156:88:69"},"nativeSrc":"35156:93:69","nodeType":"YulFunctionCall","src":"35156:93:69"},"nativeSrc":"35156:93:69","nodeType":"YulExpressionStatement","src":"35156:93:69"},{"nativeSrc":"35258:19:69","nodeType":"YulAssignment","src":"35258:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"35269:3:69","nodeType":"YulIdentifier","src":"35269:3:69"},{"kind":"number","nativeSrc":"35274:2:69","nodeType":"YulLiteral","src":"35274:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"35265:3:69","nodeType":"YulIdentifier","src":"35265:3:69"},"nativeSrc":"35265:12:69","nodeType":"YulFunctionCall","src":"35265:12:69"},"variableNames":[{"name":"end","nativeSrc":"35258:3:69","nodeType":"YulIdentifier","src":"35258:3:69"}]}]},"name":"abi_encode_t_stringliteral_65583512d4629ad47546f868609492cfe1fd22a35bae5f1962d105953201ab5e_to_t_string_memory_ptr_fromStack","nativeSrc":"34917:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"35051:3:69","nodeType":"YulTypedName","src":"35051:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"35059:3:69","nodeType":"YulTypedName","src":"35059:3:69","type":""}],"src":"34917:366:69"},{"body":{"nativeSrc":"35460:248:69","nodeType":"YulBlock","src":"35460:248:69","statements":[{"nativeSrc":"35470:26:69","nodeType":"YulAssignment","src":"35470:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"35482:9:69","nodeType":"YulIdentifier","src":"35482:9:69"},{"kind":"number","nativeSrc":"35493:2:69","nodeType":"YulLiteral","src":"35493:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"35478:3:69","nodeType":"YulIdentifier","src":"35478:3:69"},"nativeSrc":"35478:18:69","nodeType":"YulFunctionCall","src":"35478:18:69"},"variableNames":[{"name":"tail","nativeSrc":"35470:4:69","nodeType":"YulIdentifier","src":"35470:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"35517:9:69","nodeType":"YulIdentifier","src":"35517:9:69"},{"kind":"number","nativeSrc":"35528:1:69","nodeType":"YulLiteral","src":"35528:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"35513:3:69","nodeType":"YulIdentifier","src":"35513:3:69"},"nativeSrc":"35513:17:69","nodeType":"YulFunctionCall","src":"35513:17:69"},{"arguments":[{"name":"tail","nativeSrc":"35536:4:69","nodeType":"YulIdentifier","src":"35536:4:69"},{"name":"headStart","nativeSrc":"35542:9:69","nodeType":"YulIdentifier","src":"35542:9:69"}],"functionName":{"name":"sub","nativeSrc":"35532:3:69","nodeType":"YulIdentifier","src":"35532:3:69"},"nativeSrc":"35532:20:69","nodeType":"YulFunctionCall","src":"35532:20:69"}],"functionName":{"name":"mstore","nativeSrc":"35506:6:69","nodeType":"YulIdentifier","src":"35506:6:69"},"nativeSrc":"35506:47:69","nodeType":"YulFunctionCall","src":"35506:47:69"},"nativeSrc":"35506:47:69","nodeType":"YulExpressionStatement","src":"35506:47:69"},{"nativeSrc":"35562:139:69","nodeType":"YulAssignment","src":"35562:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"35696:4:69","nodeType":"YulIdentifier","src":"35696:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_65583512d4629ad47546f868609492cfe1fd22a35bae5f1962d105953201ab5e_to_t_string_memory_ptr_fromStack","nativeSrc":"35570:124:69","nodeType":"YulIdentifier","src":"35570:124:69"},"nativeSrc":"35570:131:69","nodeType":"YulFunctionCall","src":"35570:131:69"},"variableNames":[{"name":"tail","nativeSrc":"35562:4:69","nodeType":"YulIdentifier","src":"35562:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_65583512d4629ad47546f868609492cfe1fd22a35bae5f1962d105953201ab5e__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"35289:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"35440:9:69","nodeType":"YulTypedName","src":"35440:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"35455:4:69","nodeType":"YulTypedName","src":"35455:4:69","type":""}],"src":"35289:419:69"},{"body":{"nativeSrc":"35742:152:69","nodeType":"YulBlock","src":"35742:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"35759:1:69","nodeType":"YulLiteral","src":"35759:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"35762:77:69","nodeType":"YulLiteral","src":"35762:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"35752:6:69","nodeType":"YulIdentifier","src":"35752:6:69"},"nativeSrc":"35752:88:69","nodeType":"YulFunctionCall","src":"35752:88:69"},"nativeSrc":"35752:88:69","nodeType":"YulExpressionStatement","src":"35752:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"35856:1:69","nodeType":"YulLiteral","src":"35856:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"35859:4:69","nodeType":"YulLiteral","src":"35859:4:69","type":"","value":"0x21"}],"functionName":{"name":"mstore","nativeSrc":"35849:6:69","nodeType":"YulIdentifier","src":"35849:6:69"},"nativeSrc":"35849:15:69","nodeType":"YulFunctionCall","src":"35849:15:69"},"nativeSrc":"35849:15:69","nodeType":"YulExpressionStatement","src":"35849:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"35880:1:69","nodeType":"YulLiteral","src":"35880:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"35883:4:69","nodeType":"YulLiteral","src":"35883:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"35873:6:69","nodeType":"YulIdentifier","src":"35873:6:69"},"nativeSrc":"35873:15:69","nodeType":"YulFunctionCall","src":"35873:15:69"},"nativeSrc":"35873:15:69","nodeType":"YulExpressionStatement","src":"35873:15:69"}]},"name":"panic_error_0x21","nativeSrc":"35714:180:69","nodeType":"YulFunctionDefinition","src":"35714:180:69"},{"body":{"nativeSrc":"35959:62:69","nodeType":"YulBlock","src":"35959:62:69","statements":[{"body":{"nativeSrc":"35993:22:69","nodeType":"YulBlock","src":"35993:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x21","nativeSrc":"35995:16:69","nodeType":"YulIdentifier","src":"35995:16:69"},"nativeSrc":"35995:18:69","nodeType":"YulFunctionCall","src":"35995:18:69"},"nativeSrc":"35995:18:69","nodeType":"YulExpressionStatement","src":"35995:18:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"35982:5:69","nodeType":"YulIdentifier","src":"35982:5:69"},{"kind":"number","nativeSrc":"35989:1:69","nodeType":"YulLiteral","src":"35989:1:69","type":"","value":"2"}],"functionName":{"name":"lt","nativeSrc":"35979:2:69","nodeType":"YulIdentifier","src":"35979:2:69"},"nativeSrc":"35979:12:69","nodeType":"YulFunctionCall","src":"35979:12:69"}],"functionName":{"name":"iszero","nativeSrc":"35972:6:69","nodeType":"YulIdentifier","src":"35972:6:69"},"nativeSrc":"35972:20:69","nodeType":"YulFunctionCall","src":"35972:20:69"},"nativeSrc":"35969:46:69","nodeType":"YulIf","src":"35969:46:69"}]},"name":"validator_assert_t_enum$_IncomeType_$16201","nativeSrc":"35900:121:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"35952:5:69","nodeType":"YulTypedName","src":"35952:5:69","type":""}],"src":"35900:121:69"},{"body":{"nativeSrc":"36088:82:69","nodeType":"YulBlock","src":"36088:82:69","statements":[{"nativeSrc":"36098:16:69","nodeType":"YulAssignment","src":"36098:16:69","value":{"name":"value","nativeSrc":"36109:5:69","nodeType":"YulIdentifier","src":"36109:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"36098:7:69","nodeType":"YulIdentifier","src":"36098:7:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"36158:5:69","nodeType":"YulIdentifier","src":"36158:5:69"}],"functionName":{"name":"validator_assert_t_enum$_IncomeType_$16201","nativeSrc":"36115:42:69","nodeType":"YulIdentifier","src":"36115:42:69"},"nativeSrc":"36115:49:69","nodeType":"YulFunctionCall","src":"36115:49:69"},"nativeSrc":"36115:49:69","nodeType":"YulExpressionStatement","src":"36115:49:69"}]},"name":"cleanup_t_enum$_IncomeType_$16201","nativeSrc":"36027:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"36070:5:69","nodeType":"YulTypedName","src":"36070:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"36080:7:69","nodeType":"YulTypedName","src":"36080:7:69","type":""}],"src":"36027:143:69"},{"body":{"nativeSrc":"36250:69:69","nodeType":"YulBlock","src":"36250:69:69","statements":[{"nativeSrc":"36260:53:69","nodeType":"YulAssignment","src":"36260:53:69","value":{"arguments":[{"name":"value","nativeSrc":"36307:5:69","nodeType":"YulIdentifier","src":"36307:5:69"}],"functionName":{"name":"cleanup_t_enum$_IncomeType_$16201","nativeSrc":"36273:33:69","nodeType":"YulIdentifier","src":"36273:33:69"},"nativeSrc":"36273:40:69","nodeType":"YulFunctionCall","src":"36273:40:69"},"variableNames":[{"name":"converted","nativeSrc":"36260:9:69","nodeType":"YulIdentifier","src":"36260:9:69"}]}]},"name":"convert_t_enum$_IncomeType_$16201_to_t_uint8","nativeSrc":"36176:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"36230:5:69","nodeType":"YulTypedName","src":"36230:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"36240:9:69","nodeType":"YulTypedName","src":"36240:9:69","type":""}],"src":"36176:143:69"},{"body":{"nativeSrc":"36404:80:69","nodeType":"YulBlock","src":"36404:80:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"36421:3:69","nodeType":"YulIdentifier","src":"36421:3:69"},{"arguments":[{"name":"value","nativeSrc":"36471:5:69","nodeType":"YulIdentifier","src":"36471:5:69"}],"functionName":{"name":"convert_t_enum$_IncomeType_$16201_to_t_uint8","nativeSrc":"36426:44:69","nodeType":"YulIdentifier","src":"36426:44:69"},"nativeSrc":"36426:51:69","nodeType":"YulFunctionCall","src":"36426:51:69"}],"functionName":{"name":"mstore","nativeSrc":"36414:6:69","nodeType":"YulIdentifier","src":"36414:6:69"},"nativeSrc":"36414:64:69","nodeType":"YulFunctionCall","src":"36414:64:69"},"nativeSrc":"36414:64:69","nodeType":"YulExpressionStatement","src":"36414:64:69"}]},"name":"abi_encode_t_enum$_IncomeType_$16201_to_t_uint8_fromStack","nativeSrc":"36325:159:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"36392:5:69","nodeType":"YulTypedName","src":"36392:5:69","type":""},{"name":"pos","nativeSrc":"36399:3:69","nodeType":"YulTypedName","src":"36399:3:69","type":""}],"src":"36325:159:69"},{"body":{"nativeSrc":"36658:302:69","nodeType":"YulBlock","src":"36658:302:69","statements":[{"nativeSrc":"36668:26:69","nodeType":"YulAssignment","src":"36668:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"36680:9:69","nodeType":"YulIdentifier","src":"36680:9:69"},{"kind":"number","nativeSrc":"36691:2:69","nodeType":"YulLiteral","src":"36691:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"36676:3:69","nodeType":"YulIdentifier","src":"36676:3:69"},"nativeSrc":"36676:18:69","nodeType":"YulFunctionCall","src":"36676:18:69"},"variableNames":[{"name":"tail","nativeSrc":"36668:4:69","nodeType":"YulIdentifier","src":"36668:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"36748:6:69","nodeType":"YulIdentifier","src":"36748:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"36761:9:69","nodeType":"YulIdentifier","src":"36761:9:69"},{"kind":"number","nativeSrc":"36772:1:69","nodeType":"YulLiteral","src":"36772:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"36757:3:69","nodeType":"YulIdentifier","src":"36757:3:69"},"nativeSrc":"36757:17:69","nodeType":"YulFunctionCall","src":"36757:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"36704:43:69","nodeType":"YulIdentifier","src":"36704:43:69"},"nativeSrc":"36704:71:69","nodeType":"YulFunctionCall","src":"36704:71:69"},"nativeSrc":"36704:71:69","nodeType":"YulExpressionStatement","src":"36704:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"36829:6:69","nodeType":"YulIdentifier","src":"36829:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"36842:9:69","nodeType":"YulIdentifier","src":"36842:9:69"},{"kind":"number","nativeSrc":"36853:2:69","nodeType":"YulLiteral","src":"36853:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"36838:3:69","nodeType":"YulIdentifier","src":"36838:3:69"},"nativeSrc":"36838:18:69","nodeType":"YulFunctionCall","src":"36838:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"36785:43:69","nodeType":"YulIdentifier","src":"36785:43:69"},"nativeSrc":"36785:72:69","nodeType":"YulFunctionCall","src":"36785:72:69"},"nativeSrc":"36785:72:69","nodeType":"YulExpressionStatement","src":"36785:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"36925:6:69","nodeType":"YulIdentifier","src":"36925:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"36938:9:69","nodeType":"YulIdentifier","src":"36938:9:69"},{"kind":"number","nativeSrc":"36949:2:69","nodeType":"YulLiteral","src":"36949:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"36934:3:69","nodeType":"YulIdentifier","src":"36934:3:69"},"nativeSrc":"36934:18:69","nodeType":"YulFunctionCall","src":"36934:18:69"}],"functionName":{"name":"abi_encode_t_enum$_IncomeType_$16201_to_t_uint8_fromStack","nativeSrc":"36867:57:69","nodeType":"YulIdentifier","src":"36867:57:69"},"nativeSrc":"36867:86:69","nodeType":"YulFunctionCall","src":"36867:86:69"},"nativeSrc":"36867:86:69","nodeType":"YulExpressionStatement","src":"36867:86:69"}]},"name":"abi_encode_tuple_t_address_t_address_t_enum$_IncomeType_$16201__to_t_address_t_address_t_uint8__fromStack_reversed","nativeSrc":"36490:470:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"36614:9:69","nodeType":"YulTypedName","src":"36614:9:69","type":""},{"name":"value2","nativeSrc":"36626:6:69","nodeType":"YulTypedName","src":"36626:6:69","type":""},{"name":"value1","nativeSrc":"36634:6:69","nodeType":"YulTypedName","src":"36634:6:69","type":""},{"name":"value0","nativeSrc":"36642:6:69","nodeType":"YulTypedName","src":"36642:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"36653:4:69","nodeType":"YulTypedName","src":"36653:4:69","type":""}],"src":"36490:470:69"},{"body":{"nativeSrc":"37072:76:69","nodeType":"YulBlock","src":"37072:76:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"37094:6:69","nodeType":"YulIdentifier","src":"37094:6:69"},{"kind":"number","nativeSrc":"37102:1:69","nodeType":"YulLiteral","src":"37102:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"37090:3:69","nodeType":"YulIdentifier","src":"37090:3:69"},"nativeSrc":"37090:14:69","nodeType":"YulFunctionCall","src":"37090:14:69"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nativeSrc":"37106:34:69","nodeType":"YulLiteral","src":"37106:34:69","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nativeSrc":"37083:6:69","nodeType":"YulIdentifier","src":"37083:6:69"},"nativeSrc":"37083:58:69","nodeType":"YulFunctionCall","src":"37083:58:69"},"nativeSrc":"37083:58:69","nodeType":"YulExpressionStatement","src":"37083:58:69"}]},"name":"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","nativeSrc":"36966:182:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"37064:6:69","nodeType":"YulTypedName","src":"37064:6:69","type":""}],"src":"36966:182:69"},{"body":{"nativeSrc":"37300:220:69","nodeType":"YulBlock","src":"37300:220:69","statements":[{"nativeSrc":"37310:74:69","nodeType":"YulAssignment","src":"37310:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"37376:3:69","nodeType":"YulIdentifier","src":"37376:3:69"},{"kind":"number","nativeSrc":"37381:2:69","nodeType":"YulLiteral","src":"37381:2:69","type":"","value":"32"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"37317:58:69","nodeType":"YulIdentifier","src":"37317:58:69"},"nativeSrc":"37317:67:69","nodeType":"YulFunctionCall","src":"37317:67:69"},"variableNames":[{"name":"pos","nativeSrc":"37310:3:69","nodeType":"YulIdentifier","src":"37310:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"37482:3:69","nodeType":"YulIdentifier","src":"37482:3:69"}],"functionName":{"name":"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","nativeSrc":"37393:88:69","nodeType":"YulIdentifier","src":"37393:88:69"},"nativeSrc":"37393:93:69","nodeType":"YulFunctionCall","src":"37393:93:69"},"nativeSrc":"37393:93:69","nodeType":"YulExpressionStatement","src":"37393:93:69"},{"nativeSrc":"37495:19:69","nodeType":"YulAssignment","src":"37495:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"37506:3:69","nodeType":"YulIdentifier","src":"37506:3:69"},{"kind":"number","nativeSrc":"37511:2:69","nodeType":"YulLiteral","src":"37511:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"37502:3:69","nodeType":"YulIdentifier","src":"37502:3:69"},"nativeSrc":"37502:12:69","nodeType":"YulFunctionCall","src":"37502:12:69"},"variableNames":[{"name":"end","nativeSrc":"37495:3:69","nodeType":"YulIdentifier","src":"37495:3:69"}]}]},"name":"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack","nativeSrc":"37154:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"37288:3:69","nodeType":"YulTypedName","src":"37288:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"37296:3:69","nodeType":"YulTypedName","src":"37296:3:69","type":""}],"src":"37154:366:69"},{"body":{"nativeSrc":"37697:248:69","nodeType":"YulBlock","src":"37697:248:69","statements":[{"nativeSrc":"37707:26:69","nodeType":"YulAssignment","src":"37707:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"37719:9:69","nodeType":"YulIdentifier","src":"37719:9:69"},{"kind":"number","nativeSrc":"37730:2:69","nodeType":"YulLiteral","src":"37730:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"37715:3:69","nodeType":"YulIdentifier","src":"37715:3:69"},"nativeSrc":"37715:18:69","nodeType":"YulFunctionCall","src":"37715:18:69"},"variableNames":[{"name":"tail","nativeSrc":"37707:4:69","nodeType":"YulIdentifier","src":"37707:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"37754:9:69","nodeType":"YulIdentifier","src":"37754:9:69"},{"kind":"number","nativeSrc":"37765:1:69","nodeType":"YulLiteral","src":"37765:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"37750:3:69","nodeType":"YulIdentifier","src":"37750:3:69"},"nativeSrc":"37750:17:69","nodeType":"YulFunctionCall","src":"37750:17:69"},{"arguments":[{"name":"tail","nativeSrc":"37773:4:69","nodeType":"YulIdentifier","src":"37773:4:69"},{"name":"headStart","nativeSrc":"37779:9:69","nodeType":"YulIdentifier","src":"37779:9:69"}],"functionName":{"name":"sub","nativeSrc":"37769:3:69","nodeType":"YulIdentifier","src":"37769:3:69"},"nativeSrc":"37769:20:69","nodeType":"YulFunctionCall","src":"37769:20:69"}],"functionName":{"name":"mstore","nativeSrc":"37743:6:69","nodeType":"YulIdentifier","src":"37743:6:69"},"nativeSrc":"37743:47:69","nodeType":"YulFunctionCall","src":"37743:47:69"},"nativeSrc":"37743:47:69","nodeType":"YulExpressionStatement","src":"37743:47:69"},{"nativeSrc":"37799:139:69","nodeType":"YulAssignment","src":"37799:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"37933:4:69","nodeType":"YulIdentifier","src":"37933:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack","nativeSrc":"37807:124:69","nodeType":"YulIdentifier","src":"37807:124:69"},"nativeSrc":"37807:131:69","nodeType":"YulFunctionCall","src":"37807:131:69"},"variableNames":[{"name":"tail","nativeSrc":"37799:4:69","nodeType":"YulIdentifier","src":"37799:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"37526:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"37677:9:69","nodeType":"YulTypedName","src":"37677:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"37692:4:69","nodeType":"YulTypedName","src":"37692:4:69","type":""}],"src":"37526:419:69"},{"body":{"nativeSrc":"38057:118:69","nodeType":"YulBlock","src":"38057:118:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"38079:6:69","nodeType":"YulIdentifier","src":"38079:6:69"},{"kind":"number","nativeSrc":"38087:1:69","nodeType":"YulLiteral","src":"38087:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"38075:3:69","nodeType":"YulIdentifier","src":"38075:3:69"},"nativeSrc":"38075:14:69","nodeType":"YulFunctionCall","src":"38075:14:69"},{"hexValue":"696e76616c696420616365737320636f6e74726f6c206d616e61676572206164","kind":"string","nativeSrc":"38091:34:69","nodeType":"YulLiteral","src":"38091:34:69","type":"","value":"invalid acess control manager ad"}],"functionName":{"name":"mstore","nativeSrc":"38068:6:69","nodeType":"YulIdentifier","src":"38068:6:69"},"nativeSrc":"38068:58:69","nodeType":"YulFunctionCall","src":"38068:58:69"},"nativeSrc":"38068:58:69","nodeType":"YulExpressionStatement","src":"38068:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"38147:6:69","nodeType":"YulIdentifier","src":"38147:6:69"},{"kind":"number","nativeSrc":"38155:2:69","nodeType":"YulLiteral","src":"38155:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"38143:3:69","nodeType":"YulIdentifier","src":"38143:3:69"},"nativeSrc":"38143:15:69","nodeType":"YulFunctionCall","src":"38143:15:69"},{"hexValue":"6472657373","kind":"string","nativeSrc":"38160:7:69","nodeType":"YulLiteral","src":"38160:7:69","type":"","value":"dress"}],"functionName":{"name":"mstore","nativeSrc":"38136:6:69","nodeType":"YulIdentifier","src":"38136:6:69"},"nativeSrc":"38136:32:69","nodeType":"YulFunctionCall","src":"38136:32:69"},"nativeSrc":"38136:32:69","nodeType":"YulExpressionStatement","src":"38136:32:69"}]},"name":"store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb","nativeSrc":"37951:224:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"38049:6:69","nodeType":"YulTypedName","src":"38049:6:69","type":""}],"src":"37951:224:69"},{"body":{"nativeSrc":"38327:220:69","nodeType":"YulBlock","src":"38327:220:69","statements":[{"nativeSrc":"38337:74:69","nodeType":"YulAssignment","src":"38337:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"38403:3:69","nodeType":"YulIdentifier","src":"38403:3:69"},{"kind":"number","nativeSrc":"38408:2:69","nodeType":"YulLiteral","src":"38408:2:69","type":"","value":"37"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"38344:58:69","nodeType":"YulIdentifier","src":"38344:58:69"},"nativeSrc":"38344:67:69","nodeType":"YulFunctionCall","src":"38344:67:69"},"variableNames":[{"name":"pos","nativeSrc":"38337:3:69","nodeType":"YulIdentifier","src":"38337:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"38509:3:69","nodeType":"YulIdentifier","src":"38509:3:69"}],"functionName":{"name":"store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb","nativeSrc":"38420:88:69","nodeType":"YulIdentifier","src":"38420:88:69"},"nativeSrc":"38420:93:69","nodeType":"YulFunctionCall","src":"38420:93:69"},"nativeSrc":"38420:93:69","nodeType":"YulExpressionStatement","src":"38420:93:69"},{"nativeSrc":"38522:19:69","nodeType":"YulAssignment","src":"38522:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"38533:3:69","nodeType":"YulIdentifier","src":"38533:3:69"},{"kind":"number","nativeSrc":"38538:2:69","nodeType":"YulLiteral","src":"38538:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"38529:3:69","nodeType":"YulIdentifier","src":"38529:3:69"},"nativeSrc":"38529:12:69","nodeType":"YulFunctionCall","src":"38529:12:69"},"variableNames":[{"name":"end","nativeSrc":"38522:3:69","nodeType":"YulIdentifier","src":"38522:3:69"}]}]},"name":"abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack","nativeSrc":"38181:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"38315:3:69","nodeType":"YulTypedName","src":"38315:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"38323:3:69","nodeType":"YulTypedName","src":"38323:3:69","type":""}],"src":"38181:366:69"},{"body":{"nativeSrc":"38724:248:69","nodeType":"YulBlock","src":"38724:248:69","statements":[{"nativeSrc":"38734:26:69","nodeType":"YulAssignment","src":"38734:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"38746:9:69","nodeType":"YulIdentifier","src":"38746:9:69"},{"kind":"number","nativeSrc":"38757:2:69","nodeType":"YulLiteral","src":"38757:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"38742:3:69","nodeType":"YulIdentifier","src":"38742:3:69"},"nativeSrc":"38742:18:69","nodeType":"YulFunctionCall","src":"38742:18:69"},"variableNames":[{"name":"tail","nativeSrc":"38734:4:69","nodeType":"YulIdentifier","src":"38734:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"38781:9:69","nodeType":"YulIdentifier","src":"38781:9:69"},{"kind":"number","nativeSrc":"38792:1:69","nodeType":"YulLiteral","src":"38792:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"38777:3:69","nodeType":"YulIdentifier","src":"38777:3:69"},"nativeSrc":"38777:17:69","nodeType":"YulFunctionCall","src":"38777:17:69"},{"arguments":[{"name":"tail","nativeSrc":"38800:4:69","nodeType":"YulIdentifier","src":"38800:4:69"},{"name":"headStart","nativeSrc":"38806:9:69","nodeType":"YulIdentifier","src":"38806:9:69"}],"functionName":{"name":"sub","nativeSrc":"38796:3:69","nodeType":"YulIdentifier","src":"38796:3:69"},"nativeSrc":"38796:20:69","nodeType":"YulFunctionCall","src":"38796:20:69"}],"functionName":{"name":"mstore","nativeSrc":"38770:6:69","nodeType":"YulIdentifier","src":"38770:6:69"},"nativeSrc":"38770:47:69","nodeType":"YulFunctionCall","src":"38770:47:69"},"nativeSrc":"38770:47:69","nodeType":"YulExpressionStatement","src":"38770:47:69"},{"nativeSrc":"38826:139:69","nodeType":"YulAssignment","src":"38826:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"38960:4:69","nodeType":"YulIdentifier","src":"38960:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack","nativeSrc":"38834:124:69","nodeType":"YulIdentifier","src":"38834:124:69"},"nativeSrc":"38834:131:69","nodeType":"YulFunctionCall","src":"38834:131:69"},"variableNames":[{"name":"tail","nativeSrc":"38826:4:69","nodeType":"YulIdentifier","src":"38826:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"38553:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"38704:9:69","nodeType":"YulTypedName","src":"38704:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"38719:4:69","nodeType":"YulTypedName","src":"38719:4:69","type":""}],"src":"38553:419:69"},{"body":{"nativeSrc":"39188:454:69","nodeType":"YulBlock","src":"39188:454:69","statements":[{"nativeSrc":"39198:27:69","nodeType":"YulAssignment","src":"39198:27:69","value":{"arguments":[{"name":"headStart","nativeSrc":"39210:9:69","nodeType":"YulIdentifier","src":"39210:9:69"},{"kind":"number","nativeSrc":"39221:3:69","nodeType":"YulLiteral","src":"39221:3:69","type":"","value":"160"}],"functionName":{"name":"add","nativeSrc":"39206:3:69","nodeType":"YulIdentifier","src":"39206:3:69"},"nativeSrc":"39206:19:69","nodeType":"YulFunctionCall","src":"39206:19:69"},"variableNames":[{"name":"tail","nativeSrc":"39198:4:69","nodeType":"YulIdentifier","src":"39198:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"39279:6:69","nodeType":"YulIdentifier","src":"39279:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"39292:9:69","nodeType":"YulIdentifier","src":"39292:9:69"},{"kind":"number","nativeSrc":"39303:1:69","nodeType":"YulLiteral","src":"39303:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"39288:3:69","nodeType":"YulIdentifier","src":"39288:3:69"},"nativeSrc":"39288:17:69","nodeType":"YulFunctionCall","src":"39288:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"39235:43:69","nodeType":"YulIdentifier","src":"39235:43:69"},"nativeSrc":"39235:71:69","nodeType":"YulFunctionCall","src":"39235:71:69"},"nativeSrc":"39235:71:69","nodeType":"YulExpressionStatement","src":"39235:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"39360:6:69","nodeType":"YulIdentifier","src":"39360:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"39373:9:69","nodeType":"YulIdentifier","src":"39373:9:69"},{"kind":"number","nativeSrc":"39384:2:69","nodeType":"YulLiteral","src":"39384:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"39369:3:69","nodeType":"YulIdentifier","src":"39369:3:69"},"nativeSrc":"39369:18:69","nodeType":"YulFunctionCall","src":"39369:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"39316:43:69","nodeType":"YulIdentifier","src":"39316:43:69"},"nativeSrc":"39316:72:69","nodeType":"YulFunctionCall","src":"39316:72:69"},"nativeSrc":"39316:72:69","nodeType":"YulExpressionStatement","src":"39316:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"39442:6:69","nodeType":"YulIdentifier","src":"39442:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"39455:9:69","nodeType":"YulIdentifier","src":"39455:9:69"},{"kind":"number","nativeSrc":"39466:2:69","nodeType":"YulLiteral","src":"39466:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"39451:3:69","nodeType":"YulIdentifier","src":"39451:3:69"},"nativeSrc":"39451:18:69","nodeType":"YulFunctionCall","src":"39451:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"39398:43:69","nodeType":"YulIdentifier","src":"39398:43:69"},"nativeSrc":"39398:72:69","nodeType":"YulFunctionCall","src":"39398:72:69"},"nativeSrc":"39398:72:69","nodeType":"YulExpressionStatement","src":"39398:72:69"},{"expression":{"arguments":[{"name":"value3","nativeSrc":"39524:6:69","nodeType":"YulIdentifier","src":"39524:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"39537:9:69","nodeType":"YulIdentifier","src":"39537:9:69"},{"kind":"number","nativeSrc":"39548:2:69","nodeType":"YulLiteral","src":"39548:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"39533:3:69","nodeType":"YulIdentifier","src":"39533:3:69"},"nativeSrc":"39533:18:69","nodeType":"YulFunctionCall","src":"39533:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"39480:43:69","nodeType":"YulIdentifier","src":"39480:43:69"},"nativeSrc":"39480:72:69","nodeType":"YulFunctionCall","src":"39480:72:69"},"nativeSrc":"39480:72:69","nodeType":"YulExpressionStatement","src":"39480:72:69"},{"expression":{"arguments":[{"name":"value4","nativeSrc":"39606:6:69","nodeType":"YulIdentifier","src":"39606:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"39619:9:69","nodeType":"YulIdentifier","src":"39619:9:69"},{"kind":"number","nativeSrc":"39630:3:69","nodeType":"YulLiteral","src":"39630:3:69","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"39615:3:69","nodeType":"YulIdentifier","src":"39615:3:69"},"nativeSrc":"39615:19:69","nodeType":"YulFunctionCall","src":"39615:19:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"39562:43:69","nodeType":"YulIdentifier","src":"39562:43:69"},"nativeSrc":"39562:73:69","nodeType":"YulFunctionCall","src":"39562:73:69"},"nativeSrc":"39562:73:69","nodeType":"YulExpressionStatement","src":"39562:73:69"}]},"name":"abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"38978:664:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"39128:9:69","nodeType":"YulTypedName","src":"39128:9:69","type":""},{"name":"value4","nativeSrc":"39140:6:69","nodeType":"YulTypedName","src":"39140:6:69","type":""},{"name":"value3","nativeSrc":"39148:6:69","nodeType":"YulTypedName","src":"39148:6:69","type":""},{"name":"value2","nativeSrc":"39156:6:69","nodeType":"YulTypedName","src":"39156:6:69","type":""},{"name":"value1","nativeSrc":"39164:6:69","nodeType":"YulTypedName","src":"39164:6:69","type":""},{"name":"value0","nativeSrc":"39172:6:69","nodeType":"YulTypedName","src":"39172:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"39183:4:69","nodeType":"YulTypedName","src":"39183:4:69","type":""}],"src":"38978:664:69"},{"body":{"nativeSrc":"39696:362:69","nodeType":"YulBlock","src":"39696:362:69","statements":[{"nativeSrc":"39706:25:69","nodeType":"YulAssignment","src":"39706:25:69","value":{"arguments":[{"name":"x","nativeSrc":"39729:1:69","nodeType":"YulIdentifier","src":"39729:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"39711:17:69","nodeType":"YulIdentifier","src":"39711:17:69"},"nativeSrc":"39711:20:69","nodeType":"YulFunctionCall","src":"39711:20:69"},"variableNames":[{"name":"x","nativeSrc":"39706:1:69","nodeType":"YulIdentifier","src":"39706:1:69"}]},{"nativeSrc":"39740:25:69","nodeType":"YulAssignment","src":"39740:25:69","value":{"arguments":[{"name":"y","nativeSrc":"39763:1:69","nodeType":"YulIdentifier","src":"39763:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"39745:17:69","nodeType":"YulIdentifier","src":"39745:17:69"},"nativeSrc":"39745:20:69","nodeType":"YulFunctionCall","src":"39745:20:69"},"variableNames":[{"name":"y","nativeSrc":"39740:1:69","nodeType":"YulIdentifier","src":"39740:1:69"}]},{"nativeSrc":"39774:28:69","nodeType":"YulVariableDeclaration","src":"39774:28:69","value":{"arguments":[{"name":"x","nativeSrc":"39797:1:69","nodeType":"YulIdentifier","src":"39797:1:69"},{"name":"y","nativeSrc":"39800:1:69","nodeType":"YulIdentifier","src":"39800:1:69"}],"functionName":{"name":"mul","nativeSrc":"39793:3:69","nodeType":"YulIdentifier","src":"39793:3:69"},"nativeSrc":"39793:9:69","nodeType":"YulFunctionCall","src":"39793:9:69"},"variables":[{"name":"product_raw","nativeSrc":"39778:11:69","nodeType":"YulTypedName","src":"39778:11:69","type":""}]},{"nativeSrc":"39811:41:69","nodeType":"YulAssignment","src":"39811:41:69","value":{"arguments":[{"name":"product_raw","nativeSrc":"39840:11:69","nodeType":"YulIdentifier","src":"39840:11:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"39822:17:69","nodeType":"YulIdentifier","src":"39822:17:69"},"nativeSrc":"39822:30:69","nodeType":"YulFunctionCall","src":"39822:30:69"},"variableNames":[{"name":"product","nativeSrc":"39811:7:69","nodeType":"YulIdentifier","src":"39811:7:69"}]},{"body":{"nativeSrc":"40029:22:69","nodeType":"YulBlock","src":"40029:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"40031:16:69","nodeType":"YulIdentifier","src":"40031:16:69"},"nativeSrc":"40031:18:69","nodeType":"YulFunctionCall","src":"40031:18:69"},"nativeSrc":"40031:18:69","nodeType":"YulExpressionStatement","src":"40031:18:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nativeSrc":"39962:1:69","nodeType":"YulIdentifier","src":"39962:1:69"}],"functionName":{"name":"iszero","nativeSrc":"39955:6:69","nodeType":"YulIdentifier","src":"39955:6:69"},"nativeSrc":"39955:9:69","nodeType":"YulFunctionCall","src":"39955:9:69"},{"arguments":[{"name":"y","nativeSrc":"39985:1:69","nodeType":"YulIdentifier","src":"39985:1:69"},{"arguments":[{"name":"product","nativeSrc":"39992:7:69","nodeType":"YulIdentifier","src":"39992:7:69"},{"name":"x","nativeSrc":"40001:1:69","nodeType":"YulIdentifier","src":"40001:1:69"}],"functionName":{"name":"div","nativeSrc":"39988:3:69","nodeType":"YulIdentifier","src":"39988:3:69"},"nativeSrc":"39988:15:69","nodeType":"YulFunctionCall","src":"39988:15:69"}],"functionName":{"name":"eq","nativeSrc":"39982:2:69","nodeType":"YulIdentifier","src":"39982:2:69"},"nativeSrc":"39982:22:69","nodeType":"YulFunctionCall","src":"39982:22:69"}],"functionName":{"name":"or","nativeSrc":"39935:2:69","nodeType":"YulIdentifier","src":"39935:2:69"},"nativeSrc":"39935:83:69","nodeType":"YulFunctionCall","src":"39935:83:69"}],"functionName":{"name":"iszero","nativeSrc":"39915:6:69","nodeType":"YulIdentifier","src":"39915:6:69"},"nativeSrc":"39915:113:69","nodeType":"YulFunctionCall","src":"39915:113:69"},"nativeSrc":"39912:139:69","nodeType":"YulIf","src":"39912:139:69"}]},"name":"checked_mul_t_uint256","nativeSrc":"39648:410:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"39679:1:69","nodeType":"YulTypedName","src":"39679:1:69","type":""},{"name":"y","nativeSrc":"39682:1:69","nodeType":"YulTypedName","src":"39682:1:69","type":""}],"returnVariables":[{"name":"product","nativeSrc":"39688:7:69","nodeType":"YulTypedName","src":"39688:7:69","type":""}],"src":"39648:410:69"},{"body":{"nativeSrc":"40092:152:69","nodeType":"YulBlock","src":"40092:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"40109:1:69","nodeType":"YulLiteral","src":"40109:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"40112:77:69","nodeType":"YulLiteral","src":"40112:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"40102:6:69","nodeType":"YulIdentifier","src":"40102:6:69"},"nativeSrc":"40102:88:69","nodeType":"YulFunctionCall","src":"40102:88:69"},"nativeSrc":"40102:88:69","nodeType":"YulExpressionStatement","src":"40102:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"40206:1:69","nodeType":"YulLiteral","src":"40206:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"40209:4:69","nodeType":"YulLiteral","src":"40209:4:69","type":"","value":"0x12"}],"functionName":{"name":"mstore","nativeSrc":"40199:6:69","nodeType":"YulIdentifier","src":"40199:6:69"},"nativeSrc":"40199:15:69","nodeType":"YulFunctionCall","src":"40199:15:69"},"nativeSrc":"40199:15:69","nodeType":"YulExpressionStatement","src":"40199:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"40230:1:69","nodeType":"YulLiteral","src":"40230:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"40233:4:69","nodeType":"YulLiteral","src":"40233:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"40223:6:69","nodeType":"YulIdentifier","src":"40223:6:69"},"nativeSrc":"40223:15:69","nodeType":"YulFunctionCall","src":"40223:15:69"},"nativeSrc":"40223:15:69","nodeType":"YulExpressionStatement","src":"40223:15:69"}]},"name":"panic_error_0x12","nativeSrc":"40064:180:69","nodeType":"YulFunctionDefinition","src":"40064:180:69"},{"body":{"nativeSrc":"40292:143:69","nodeType":"YulBlock","src":"40292:143:69","statements":[{"nativeSrc":"40302:25:69","nodeType":"YulAssignment","src":"40302:25:69","value":{"arguments":[{"name":"x","nativeSrc":"40325:1:69","nodeType":"YulIdentifier","src":"40325:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"40307:17:69","nodeType":"YulIdentifier","src":"40307:17:69"},"nativeSrc":"40307:20:69","nodeType":"YulFunctionCall","src":"40307:20:69"},"variableNames":[{"name":"x","nativeSrc":"40302:1:69","nodeType":"YulIdentifier","src":"40302:1:69"}]},{"nativeSrc":"40336:25:69","nodeType":"YulAssignment","src":"40336:25:69","value":{"arguments":[{"name":"y","nativeSrc":"40359:1:69","nodeType":"YulIdentifier","src":"40359:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"40341:17:69","nodeType":"YulIdentifier","src":"40341:17:69"},"nativeSrc":"40341:20:69","nodeType":"YulFunctionCall","src":"40341:20:69"},"variableNames":[{"name":"y","nativeSrc":"40336:1:69","nodeType":"YulIdentifier","src":"40336:1:69"}]},{"body":{"nativeSrc":"40383:22:69","nodeType":"YulBlock","src":"40383:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x12","nativeSrc":"40385:16:69","nodeType":"YulIdentifier","src":"40385:16:69"},"nativeSrc":"40385:18:69","nodeType":"YulFunctionCall","src":"40385:18:69"},"nativeSrc":"40385:18:69","nodeType":"YulExpressionStatement","src":"40385:18:69"}]},"condition":{"arguments":[{"name":"y","nativeSrc":"40380:1:69","nodeType":"YulIdentifier","src":"40380:1:69"}],"functionName":{"name":"iszero","nativeSrc":"40373:6:69","nodeType":"YulIdentifier","src":"40373:6:69"},"nativeSrc":"40373:9:69","nodeType":"YulFunctionCall","src":"40373:9:69"},"nativeSrc":"40370:35:69","nodeType":"YulIf","src":"40370:35:69"},{"nativeSrc":"40415:14:69","nodeType":"YulAssignment","src":"40415:14:69","value":{"arguments":[{"name":"x","nativeSrc":"40424:1:69","nodeType":"YulIdentifier","src":"40424:1:69"},{"name":"y","nativeSrc":"40427:1:69","nodeType":"YulIdentifier","src":"40427:1:69"}],"functionName":{"name":"div","nativeSrc":"40420:3:69","nodeType":"YulIdentifier","src":"40420:3:69"},"nativeSrc":"40420:9:69","nodeType":"YulFunctionCall","src":"40420:9:69"},"variableNames":[{"name":"r","nativeSrc":"40415:1:69","nodeType":"YulIdentifier","src":"40415:1:69"}]}]},"name":"checked_div_t_uint256","nativeSrc":"40250:185:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"40281:1:69","nodeType":"YulTypedName","src":"40281:1:69","type":""},{"name":"y","nativeSrc":"40284:1:69","nodeType":"YulTypedName","src":"40284:1:69","type":""}],"returnVariables":[{"name":"r","nativeSrc":"40290:1:69","nodeType":"YulTypedName","src":"40290:1:69","type":""}],"src":"40250:185:69"},{"body":{"nativeSrc":"40567:206:69","nodeType":"YulBlock","src":"40567:206:69","statements":[{"nativeSrc":"40577:26:69","nodeType":"YulAssignment","src":"40577:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"40589:9:69","nodeType":"YulIdentifier","src":"40589:9:69"},{"kind":"number","nativeSrc":"40600:2:69","nodeType":"YulLiteral","src":"40600:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"40585:3:69","nodeType":"YulIdentifier","src":"40585:3:69"},"nativeSrc":"40585:18:69","nodeType":"YulFunctionCall","src":"40585:18:69"},"variableNames":[{"name":"tail","nativeSrc":"40577:4:69","nodeType":"YulIdentifier","src":"40577:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"40657:6:69","nodeType":"YulIdentifier","src":"40657:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"40670:9:69","nodeType":"YulIdentifier","src":"40670:9:69"},{"kind":"number","nativeSrc":"40681:1:69","nodeType":"YulLiteral","src":"40681:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"40666:3:69","nodeType":"YulIdentifier","src":"40666:3:69"},"nativeSrc":"40666:17:69","nodeType":"YulFunctionCall","src":"40666:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"40613:43:69","nodeType":"YulIdentifier","src":"40613:43:69"},"nativeSrc":"40613:71:69","nodeType":"YulFunctionCall","src":"40613:71:69"},"nativeSrc":"40613:71:69","nodeType":"YulExpressionStatement","src":"40613:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"40738:6:69","nodeType":"YulIdentifier","src":"40738:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"40751:9:69","nodeType":"YulIdentifier","src":"40751:9:69"},{"kind":"number","nativeSrc":"40762:2:69","nodeType":"YulLiteral","src":"40762:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"40747:3:69","nodeType":"YulIdentifier","src":"40747:3:69"},"nativeSrc":"40747:18:69","nodeType":"YulFunctionCall","src":"40747:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"40694:43:69","nodeType":"YulIdentifier","src":"40694:43:69"},"nativeSrc":"40694:72:69","nodeType":"YulFunctionCall","src":"40694:72:69"},"nativeSrc":"40694:72:69","nodeType":"YulExpressionStatement","src":"40694:72:69"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nativeSrc":"40441:332:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"40531:9:69","nodeType":"YulTypedName","src":"40531:9:69","type":""},{"name":"value1","nativeSrc":"40543:6:69","nodeType":"YulTypedName","src":"40543:6:69","type":""},{"name":"value0","nativeSrc":"40551:6:69","nodeType":"YulTypedName","src":"40551:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"40562:4:69","nodeType":"YulTypedName","src":"40562:4:69","type":""}],"src":"40441:332:69"},{"body":{"nativeSrc":"40925:277:69","nodeType":"YulBlock","src":"40925:277:69","statements":[{"nativeSrc":"40935:26:69","nodeType":"YulAssignment","src":"40935:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"40947:9:69","nodeType":"YulIdentifier","src":"40947:9:69"},{"kind":"number","nativeSrc":"40958:2:69","nodeType":"YulLiteral","src":"40958:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"40943:3:69","nodeType":"YulIdentifier","src":"40943:3:69"},"nativeSrc":"40943:18:69","nodeType":"YulFunctionCall","src":"40943:18:69"},"variableNames":[{"name":"tail","nativeSrc":"40935:4:69","nodeType":"YulIdentifier","src":"40935:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"41015:6:69","nodeType":"YulIdentifier","src":"41015:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"41028:9:69","nodeType":"YulIdentifier","src":"41028:9:69"},{"kind":"number","nativeSrc":"41039:1:69","nodeType":"YulLiteral","src":"41039:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"41024:3:69","nodeType":"YulIdentifier","src":"41024:3:69"},"nativeSrc":"41024:17:69","nodeType":"YulFunctionCall","src":"41024:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"40971:43:69","nodeType":"YulIdentifier","src":"40971:43:69"},"nativeSrc":"40971:71:69","nodeType":"YulFunctionCall","src":"40971:71:69"},"nativeSrc":"40971:71:69","nodeType":"YulExpressionStatement","src":"40971:71:69"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"41063:9:69","nodeType":"YulIdentifier","src":"41063:9:69"},{"kind":"number","nativeSrc":"41074:2:69","nodeType":"YulLiteral","src":"41074:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"41059:3:69","nodeType":"YulIdentifier","src":"41059:3:69"},"nativeSrc":"41059:18:69","nodeType":"YulFunctionCall","src":"41059:18:69"},{"arguments":[{"name":"tail","nativeSrc":"41083:4:69","nodeType":"YulIdentifier","src":"41083:4:69"},{"name":"headStart","nativeSrc":"41089:9:69","nodeType":"YulIdentifier","src":"41089:9:69"}],"functionName":{"name":"sub","nativeSrc":"41079:3:69","nodeType":"YulIdentifier","src":"41079:3:69"},"nativeSrc":"41079:20:69","nodeType":"YulFunctionCall","src":"41079:20:69"}],"functionName":{"name":"mstore","nativeSrc":"41052:6:69","nodeType":"YulIdentifier","src":"41052:6:69"},"nativeSrc":"41052:48:69","nodeType":"YulFunctionCall","src":"41052:48:69"},"nativeSrc":"41052:48:69","nodeType":"YulExpressionStatement","src":"41052:48:69"},{"nativeSrc":"41109:86:69","nodeType":"YulAssignment","src":"41109:86:69","value":{"arguments":[{"name":"value1","nativeSrc":"41181:6:69","nodeType":"YulIdentifier","src":"41181:6:69"},{"name":"tail","nativeSrc":"41190:4:69","nodeType":"YulIdentifier","src":"41190:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"41117:63:69","nodeType":"YulIdentifier","src":"41117:63:69"},"nativeSrc":"41117:78:69","nodeType":"YulFunctionCall","src":"41117:78:69"},"variableNames":[{"name":"tail","nativeSrc":"41109:4:69","nodeType":"YulIdentifier","src":"41109:4:69"}]}]},"name":"abi_encode_tuple_t_address_t_string_memory_ptr__to_t_address_t_string_memory_ptr__fromStack_reversed","nativeSrc":"40779:423:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"40889:9:69","nodeType":"YulTypedName","src":"40889:9:69","type":""},{"name":"value1","nativeSrc":"40901:6:69","nodeType":"YulTypedName","src":"40901:6:69","type":""},{"name":"value0","nativeSrc":"40909:6:69","nodeType":"YulTypedName","src":"40909:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"40920:4:69","nodeType":"YulTypedName","src":"40920:4:69","type":""}],"src":"40779:423:69"},{"body":{"nativeSrc":"41268:77:69","nodeType":"YulBlock","src":"41268:77:69","statements":[{"nativeSrc":"41278:22:69","nodeType":"YulAssignment","src":"41278:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"41293:6:69","nodeType":"YulIdentifier","src":"41293:6:69"}],"functionName":{"name":"mload","nativeSrc":"41287:5:69","nodeType":"YulIdentifier","src":"41287:5:69"},"nativeSrc":"41287:13:69","nodeType":"YulFunctionCall","src":"41287:13:69"},"variableNames":[{"name":"value","nativeSrc":"41278:5:69","nodeType":"YulIdentifier","src":"41278:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"41333:5:69","nodeType":"YulIdentifier","src":"41333:5:69"}],"functionName":{"name":"validator_revert_t_bool","nativeSrc":"41309:23:69","nodeType":"YulIdentifier","src":"41309:23:69"},"nativeSrc":"41309:30:69","nodeType":"YulFunctionCall","src":"41309:30:69"},"nativeSrc":"41309:30:69","nodeType":"YulExpressionStatement","src":"41309:30:69"}]},"name":"abi_decode_t_bool_fromMemory","nativeSrc":"41208:137:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"41246:6:69","nodeType":"YulTypedName","src":"41246:6:69","type":""},{"name":"end","nativeSrc":"41254:3:69","nodeType":"YulTypedName","src":"41254:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"41262:5:69","nodeType":"YulTypedName","src":"41262:5:69","type":""}],"src":"41208:137:69"},{"body":{"nativeSrc":"41425:271:69","nodeType":"YulBlock","src":"41425:271:69","statements":[{"body":{"nativeSrc":"41471:83:69","nodeType":"YulBlock","src":"41471:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"41473:77:69","nodeType":"YulIdentifier","src":"41473:77:69"},"nativeSrc":"41473:79:69","nodeType":"YulFunctionCall","src":"41473:79:69"},"nativeSrc":"41473:79:69","nodeType":"YulExpressionStatement","src":"41473:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"41446:7:69","nodeType":"YulIdentifier","src":"41446:7:69"},{"name":"headStart","nativeSrc":"41455:9:69","nodeType":"YulIdentifier","src":"41455:9:69"}],"functionName":{"name":"sub","nativeSrc":"41442:3:69","nodeType":"YulIdentifier","src":"41442:3:69"},"nativeSrc":"41442:23:69","nodeType":"YulFunctionCall","src":"41442:23:69"},{"kind":"number","nativeSrc":"41467:2:69","nodeType":"YulLiteral","src":"41467:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"41438:3:69","nodeType":"YulIdentifier","src":"41438:3:69"},"nativeSrc":"41438:32:69","nodeType":"YulFunctionCall","src":"41438:32:69"},"nativeSrc":"41435:119:69","nodeType":"YulIf","src":"41435:119:69"},{"nativeSrc":"41564:125:69","nodeType":"YulBlock","src":"41564:125:69","statements":[{"nativeSrc":"41579:15:69","nodeType":"YulVariableDeclaration","src":"41579:15:69","value":{"kind":"number","nativeSrc":"41593:1:69","nodeType":"YulLiteral","src":"41593:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"41583:6:69","nodeType":"YulTypedName","src":"41583:6:69","type":""}]},{"nativeSrc":"41608:71:69","nodeType":"YulAssignment","src":"41608:71:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"41651:9:69","nodeType":"YulIdentifier","src":"41651:9:69"},{"name":"offset","nativeSrc":"41662:6:69","nodeType":"YulIdentifier","src":"41662:6:69"}],"functionName":{"name":"add","nativeSrc":"41647:3:69","nodeType":"YulIdentifier","src":"41647:3:69"},"nativeSrc":"41647:22:69","nodeType":"YulFunctionCall","src":"41647:22:69"},{"name":"dataEnd","nativeSrc":"41671:7:69","nodeType":"YulIdentifier","src":"41671:7:69"}],"functionName":{"name":"abi_decode_t_bool_fromMemory","nativeSrc":"41618:28:69","nodeType":"YulIdentifier","src":"41618:28:69"},"nativeSrc":"41618:61:69","nodeType":"YulFunctionCall","src":"41618:61:69"},"variableNames":[{"name":"value0","nativeSrc":"41608:6:69","nodeType":"YulIdentifier","src":"41608:6:69"}]}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nativeSrc":"41351:345:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"41395:9:69","nodeType":"YulTypedName","src":"41395:9:69","type":""},{"name":"dataEnd","nativeSrc":"41406:7:69","nodeType":"YulTypedName","src":"41406:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"41418:6:69","nodeType":"YulTypedName","src":"41418:6:69","type":""}],"src":"41351:345:69"},{"body":{"nativeSrc":"41876:359:69","nodeType":"YulBlock","src":"41876:359:69","statements":[{"nativeSrc":"41886:26:69","nodeType":"YulAssignment","src":"41886:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"41898:9:69","nodeType":"YulIdentifier","src":"41898:9:69"},{"kind":"number","nativeSrc":"41909:2:69","nodeType":"YulLiteral","src":"41909:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"41894:3:69","nodeType":"YulIdentifier","src":"41894:3:69"},"nativeSrc":"41894:18:69","nodeType":"YulFunctionCall","src":"41894:18:69"},"variableNames":[{"name":"tail","nativeSrc":"41886:4:69","nodeType":"YulIdentifier","src":"41886:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"41966:6:69","nodeType":"YulIdentifier","src":"41966:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"41979:9:69","nodeType":"YulIdentifier","src":"41979:9:69"},{"kind":"number","nativeSrc":"41990:1:69","nodeType":"YulLiteral","src":"41990:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"41975:3:69","nodeType":"YulIdentifier","src":"41975:3:69"},"nativeSrc":"41975:17:69","nodeType":"YulFunctionCall","src":"41975:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"41922:43:69","nodeType":"YulIdentifier","src":"41922:43:69"},"nativeSrc":"41922:71:69","nodeType":"YulFunctionCall","src":"41922:71:69"},"nativeSrc":"41922:71:69","nodeType":"YulExpressionStatement","src":"41922:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"42047:6:69","nodeType":"YulIdentifier","src":"42047:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"42060:9:69","nodeType":"YulIdentifier","src":"42060:9:69"},{"kind":"number","nativeSrc":"42071:2:69","nodeType":"YulLiteral","src":"42071:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"42056:3:69","nodeType":"YulIdentifier","src":"42056:3:69"},"nativeSrc":"42056:18:69","nodeType":"YulFunctionCall","src":"42056:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"42003:43:69","nodeType":"YulIdentifier","src":"42003:43:69"},"nativeSrc":"42003:72:69","nodeType":"YulFunctionCall","src":"42003:72:69"},"nativeSrc":"42003:72:69","nodeType":"YulExpressionStatement","src":"42003:72:69"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"42096:9:69","nodeType":"YulIdentifier","src":"42096:9:69"},{"kind":"number","nativeSrc":"42107:2:69","nodeType":"YulLiteral","src":"42107:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"42092:3:69","nodeType":"YulIdentifier","src":"42092:3:69"},"nativeSrc":"42092:18:69","nodeType":"YulFunctionCall","src":"42092:18:69"},{"arguments":[{"name":"tail","nativeSrc":"42116:4:69","nodeType":"YulIdentifier","src":"42116:4:69"},{"name":"headStart","nativeSrc":"42122:9:69","nodeType":"YulIdentifier","src":"42122:9:69"}],"functionName":{"name":"sub","nativeSrc":"42112:3:69","nodeType":"YulIdentifier","src":"42112:3:69"},"nativeSrc":"42112:20:69","nodeType":"YulFunctionCall","src":"42112:20:69"}],"functionName":{"name":"mstore","nativeSrc":"42085:6:69","nodeType":"YulIdentifier","src":"42085:6:69"},"nativeSrc":"42085:48:69","nodeType":"YulFunctionCall","src":"42085:48:69"},"nativeSrc":"42085:48:69","nodeType":"YulExpressionStatement","src":"42085:48:69"},{"nativeSrc":"42142:86:69","nodeType":"YulAssignment","src":"42142:86:69","value":{"arguments":[{"name":"value2","nativeSrc":"42214:6:69","nodeType":"YulIdentifier","src":"42214:6:69"},{"name":"tail","nativeSrc":"42223:4:69","nodeType":"YulIdentifier","src":"42223:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"42150:63:69","nodeType":"YulIdentifier","src":"42150:63:69"},"nativeSrc":"42150:78:69","nodeType":"YulFunctionCall","src":"42150:78:69"},"variableNames":[{"name":"tail","nativeSrc":"42142:4:69","nodeType":"YulIdentifier","src":"42142:4:69"}]}]},"name":"abi_encode_tuple_t_address_t_address_t_string_memory_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed","nativeSrc":"41702:533:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"41832:9:69","nodeType":"YulTypedName","src":"41832:9:69","type":""},{"name":"value2","nativeSrc":"41844:6:69","nodeType":"YulTypedName","src":"41844:6:69","type":""},{"name":"value1","nativeSrc":"41852:6:69","nodeType":"YulTypedName","src":"41852:6:69","type":""},{"name":"value0","nativeSrc":"41860:6:69","nodeType":"YulTypedName","src":"41860:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"41871:4:69","nodeType":"YulTypedName","src":"41871:4:69","type":""}],"src":"41702:533:69"},{"body":{"nativeSrc":"42347:133:69","nodeType":"YulBlock","src":"42347:133:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"42369:6:69","nodeType":"YulIdentifier","src":"42369:6:69"},{"kind":"number","nativeSrc":"42377:1:69","nodeType":"YulLiteral","src":"42377:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"42365:3:69","nodeType":"YulIdentifier","src":"42365:3:69"},"nativeSrc":"42365:14:69","nodeType":"YulFunctionCall","src":"42365:14:69"},{"hexValue":"6f6e65206f662072656465656d546f6b656e73496e206f722072656465656d41","kind":"string","nativeSrc":"42381:34:69","nodeType":"YulLiteral","src":"42381:34:69","type":"","value":"one of redeemTokensIn or redeemA"}],"functionName":{"name":"mstore","nativeSrc":"42358:6:69","nodeType":"YulIdentifier","src":"42358:6:69"},"nativeSrc":"42358:58:69","nodeType":"YulFunctionCall","src":"42358:58:69"},"nativeSrc":"42358:58:69","nodeType":"YulExpressionStatement","src":"42358:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"42437:6:69","nodeType":"YulIdentifier","src":"42437:6:69"},{"kind":"number","nativeSrc":"42445:2:69","nodeType":"YulLiteral","src":"42445:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"42433:3:69","nodeType":"YulIdentifier","src":"42433:3:69"},"nativeSrc":"42433:15:69","nodeType":"YulFunctionCall","src":"42433:15:69"},{"hexValue":"6d6f756e74496e206d757374206265207a65726f","kind":"string","nativeSrc":"42450:22:69","nodeType":"YulLiteral","src":"42450:22:69","type":"","value":"mountIn must be zero"}],"functionName":{"name":"mstore","nativeSrc":"42426:6:69","nodeType":"YulIdentifier","src":"42426:6:69"},"nativeSrc":"42426:47:69","nodeType":"YulFunctionCall","src":"42426:47:69"},"nativeSrc":"42426:47:69","nodeType":"YulExpressionStatement","src":"42426:47:69"}]},"name":"store_literal_in_memory_e7cef2e7b515a83b650bc43dbe7230ede3601779d8be25fbf237261dccd3d9f2","nativeSrc":"42241:239:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"42339:6:69","nodeType":"YulTypedName","src":"42339:6:69","type":""}],"src":"42241:239:69"},{"body":{"nativeSrc":"42632:220:69","nodeType":"YulBlock","src":"42632:220:69","statements":[{"nativeSrc":"42642:74:69","nodeType":"YulAssignment","src":"42642:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"42708:3:69","nodeType":"YulIdentifier","src":"42708:3:69"},{"kind":"number","nativeSrc":"42713:2:69","nodeType":"YulLiteral","src":"42713:2:69","type":"","value":"52"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"42649:58:69","nodeType":"YulIdentifier","src":"42649:58:69"},"nativeSrc":"42649:67:69","nodeType":"YulFunctionCall","src":"42649:67:69"},"variableNames":[{"name":"pos","nativeSrc":"42642:3:69","nodeType":"YulIdentifier","src":"42642:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"42814:3:69","nodeType":"YulIdentifier","src":"42814:3:69"}],"functionName":{"name":"store_literal_in_memory_e7cef2e7b515a83b650bc43dbe7230ede3601779d8be25fbf237261dccd3d9f2","nativeSrc":"42725:88:69","nodeType":"YulIdentifier","src":"42725:88:69"},"nativeSrc":"42725:93:69","nodeType":"YulFunctionCall","src":"42725:93:69"},"nativeSrc":"42725:93:69","nodeType":"YulExpressionStatement","src":"42725:93:69"},{"nativeSrc":"42827:19:69","nodeType":"YulAssignment","src":"42827:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"42838:3:69","nodeType":"YulIdentifier","src":"42838:3:69"},{"kind":"number","nativeSrc":"42843:2:69","nodeType":"YulLiteral","src":"42843:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"42834:3:69","nodeType":"YulIdentifier","src":"42834:3:69"},"nativeSrc":"42834:12:69","nodeType":"YulFunctionCall","src":"42834:12:69"},"variableNames":[{"name":"end","nativeSrc":"42827:3:69","nodeType":"YulIdentifier","src":"42827:3:69"}]}]},"name":"abi_encode_t_stringliteral_e7cef2e7b515a83b650bc43dbe7230ede3601779d8be25fbf237261dccd3d9f2_to_t_string_memory_ptr_fromStack","nativeSrc":"42486:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"42620:3:69","nodeType":"YulTypedName","src":"42620:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"42628:3:69","nodeType":"YulTypedName","src":"42628:3:69","type":""}],"src":"42486:366:69"},{"body":{"nativeSrc":"43029:248:69","nodeType":"YulBlock","src":"43029:248:69","statements":[{"nativeSrc":"43039:26:69","nodeType":"YulAssignment","src":"43039:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"43051:9:69","nodeType":"YulIdentifier","src":"43051:9:69"},{"kind":"number","nativeSrc":"43062:2:69","nodeType":"YulLiteral","src":"43062:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"43047:3:69","nodeType":"YulIdentifier","src":"43047:3:69"},"nativeSrc":"43047:18:69","nodeType":"YulFunctionCall","src":"43047:18:69"},"variableNames":[{"name":"tail","nativeSrc":"43039:4:69","nodeType":"YulIdentifier","src":"43039:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"43086:9:69","nodeType":"YulIdentifier","src":"43086:9:69"},{"kind":"number","nativeSrc":"43097:1:69","nodeType":"YulLiteral","src":"43097:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"43082:3:69","nodeType":"YulIdentifier","src":"43082:3:69"},"nativeSrc":"43082:17:69","nodeType":"YulFunctionCall","src":"43082:17:69"},{"arguments":[{"name":"tail","nativeSrc":"43105:4:69","nodeType":"YulIdentifier","src":"43105:4:69"},{"name":"headStart","nativeSrc":"43111:9:69","nodeType":"YulIdentifier","src":"43111:9:69"}],"functionName":{"name":"sub","nativeSrc":"43101:3:69","nodeType":"YulIdentifier","src":"43101:3:69"},"nativeSrc":"43101:20:69","nodeType":"YulFunctionCall","src":"43101:20:69"}],"functionName":{"name":"mstore","nativeSrc":"43075:6:69","nodeType":"YulIdentifier","src":"43075:6:69"},"nativeSrc":"43075:47:69","nodeType":"YulFunctionCall","src":"43075:47:69"},"nativeSrc":"43075:47:69","nodeType":"YulExpressionStatement","src":"43075:47:69"},{"nativeSrc":"43131:139:69","nodeType":"YulAssignment","src":"43131:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"43265:4:69","nodeType":"YulIdentifier","src":"43265:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_e7cef2e7b515a83b650bc43dbe7230ede3601779d8be25fbf237261dccd3d9f2_to_t_string_memory_ptr_fromStack","nativeSrc":"43139:124:69","nodeType":"YulIdentifier","src":"43139:124:69"},"nativeSrc":"43139:131:69","nodeType":"YulFunctionCall","src":"43139:131:69"},"variableNames":[{"name":"tail","nativeSrc":"43131:4:69","nodeType":"YulIdentifier","src":"43131:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_e7cef2e7b515a83b650bc43dbe7230ede3601779d8be25fbf237261dccd3d9f2__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"42858:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"43009:9:69","nodeType":"YulTypedName","src":"43009:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"43024:4:69","nodeType":"YulTypedName","src":"43024:4:69","type":""}],"src":"42858:419:69"},{"body":{"nativeSrc":"43326:190:69","nodeType":"YulBlock","src":"43326:190:69","statements":[{"nativeSrc":"43336:33:69","nodeType":"YulAssignment","src":"43336:33:69","value":{"arguments":[{"name":"value","nativeSrc":"43363:5:69","nodeType":"YulIdentifier","src":"43363:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"43345:17:69","nodeType":"YulIdentifier","src":"43345:17:69"},"nativeSrc":"43345:24:69","nodeType":"YulFunctionCall","src":"43345:24:69"},"variableNames":[{"name":"value","nativeSrc":"43336:5:69","nodeType":"YulIdentifier","src":"43336:5:69"}]},{"body":{"nativeSrc":"43459:22:69","nodeType":"YulBlock","src":"43459:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"43461:16:69","nodeType":"YulIdentifier","src":"43461:16:69"},"nativeSrc":"43461:18:69","nodeType":"YulFunctionCall","src":"43461:18:69"},"nativeSrc":"43461:18:69","nodeType":"YulExpressionStatement","src":"43461:18:69"}]},"condition":{"arguments":[{"name":"value","nativeSrc":"43384:5:69","nodeType":"YulIdentifier","src":"43384:5:69"},{"kind":"number","nativeSrc":"43391:66:69","nodeType":"YulLiteral","src":"43391:66:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nativeSrc":"43381:2:69","nodeType":"YulIdentifier","src":"43381:2:69"},"nativeSrc":"43381:77:69","nodeType":"YulFunctionCall","src":"43381:77:69"},"nativeSrc":"43378:103:69","nodeType":"YulIf","src":"43378:103:69"},{"nativeSrc":"43490:20:69","nodeType":"YulAssignment","src":"43490:20:69","value":{"arguments":[{"name":"value","nativeSrc":"43501:5:69","nodeType":"YulIdentifier","src":"43501:5:69"},{"kind":"number","nativeSrc":"43508:1:69","nodeType":"YulLiteral","src":"43508:1:69","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"43497:3:69","nodeType":"YulIdentifier","src":"43497:3:69"},"nativeSrc":"43497:13:69","nodeType":"YulFunctionCall","src":"43497:13:69"},"variableNames":[{"name":"ret","nativeSrc":"43490:3:69","nodeType":"YulIdentifier","src":"43490:3:69"}]}]},"name":"increment_t_uint256","nativeSrc":"43283:233:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"43312:5:69","nodeType":"YulTypedName","src":"43312:5:69","type":""}],"returnVariables":[{"name":"ret","nativeSrc":"43322:3:69","nodeType":"YulTypedName","src":"43322:3:69","type":""}],"src":"43283:233:69"},{"body":{"nativeSrc":"43628:64:69","nodeType":"YulBlock","src":"43628:64:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"43650:6:69","nodeType":"YulIdentifier","src":"43650:6:69"},{"kind":"number","nativeSrc":"43658:1:69","nodeType":"YulLiteral","src":"43658:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"43646:3:69","nodeType":"YulIdentifier","src":"43646:3:69"},"nativeSrc":"43646:14:69","nodeType":"YulFunctionCall","src":"43646:14:69"},{"hexValue":"72656465656d416d6f756e74206973207a65726f","kind":"string","nativeSrc":"43662:22:69","nodeType":"YulLiteral","src":"43662:22:69","type":"","value":"redeemAmount is zero"}],"functionName":{"name":"mstore","nativeSrc":"43639:6:69","nodeType":"YulIdentifier","src":"43639:6:69"},"nativeSrc":"43639:46:69","nodeType":"YulFunctionCall","src":"43639:46:69"},"nativeSrc":"43639:46:69","nodeType":"YulExpressionStatement","src":"43639:46:69"}]},"name":"store_literal_in_memory_4a73c8aa35e7317ade5f993a0242f1c31eb3c6b8eb0e0c438aee70e953928ca6","nativeSrc":"43522:170:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"43620:6:69","nodeType":"YulTypedName","src":"43620:6:69","type":""}],"src":"43522:170:69"},{"body":{"nativeSrc":"43844:220:69","nodeType":"YulBlock","src":"43844:220:69","statements":[{"nativeSrc":"43854:74:69","nodeType":"YulAssignment","src":"43854:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"43920:3:69","nodeType":"YulIdentifier","src":"43920:3:69"},{"kind":"number","nativeSrc":"43925:2:69","nodeType":"YulLiteral","src":"43925:2:69","type":"","value":"20"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"43861:58:69","nodeType":"YulIdentifier","src":"43861:58:69"},"nativeSrc":"43861:67:69","nodeType":"YulFunctionCall","src":"43861:67:69"},"variableNames":[{"name":"pos","nativeSrc":"43854:3:69","nodeType":"YulIdentifier","src":"43854:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"44026:3:69","nodeType":"YulIdentifier","src":"44026:3:69"}],"functionName":{"name":"store_literal_in_memory_4a73c8aa35e7317ade5f993a0242f1c31eb3c6b8eb0e0c438aee70e953928ca6","nativeSrc":"43937:88:69","nodeType":"YulIdentifier","src":"43937:88:69"},"nativeSrc":"43937:93:69","nodeType":"YulFunctionCall","src":"43937:93:69"},"nativeSrc":"43937:93:69","nodeType":"YulExpressionStatement","src":"43937:93:69"},{"nativeSrc":"44039:19:69","nodeType":"YulAssignment","src":"44039:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"44050:3:69","nodeType":"YulIdentifier","src":"44050:3:69"},{"kind":"number","nativeSrc":"44055:2:69","nodeType":"YulLiteral","src":"44055:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"44046:3:69","nodeType":"YulIdentifier","src":"44046:3:69"},"nativeSrc":"44046:12:69","nodeType":"YulFunctionCall","src":"44046:12:69"},"variableNames":[{"name":"end","nativeSrc":"44039:3:69","nodeType":"YulIdentifier","src":"44039:3:69"}]}]},"name":"abi_encode_t_stringliteral_4a73c8aa35e7317ade5f993a0242f1c31eb3c6b8eb0e0c438aee70e953928ca6_to_t_string_memory_ptr_fromStack","nativeSrc":"43698:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"43832:3:69","nodeType":"YulTypedName","src":"43832:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"43840:3:69","nodeType":"YulTypedName","src":"43840:3:69","type":""}],"src":"43698:366:69"},{"body":{"nativeSrc":"44241:248:69","nodeType":"YulBlock","src":"44241:248:69","statements":[{"nativeSrc":"44251:26:69","nodeType":"YulAssignment","src":"44251:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"44263:9:69","nodeType":"YulIdentifier","src":"44263:9:69"},{"kind":"number","nativeSrc":"44274:2:69","nodeType":"YulLiteral","src":"44274:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"44259:3:69","nodeType":"YulIdentifier","src":"44259:3:69"},"nativeSrc":"44259:18:69","nodeType":"YulFunctionCall","src":"44259:18:69"},"variableNames":[{"name":"tail","nativeSrc":"44251:4:69","nodeType":"YulIdentifier","src":"44251:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"44298:9:69","nodeType":"YulIdentifier","src":"44298:9:69"},{"kind":"number","nativeSrc":"44309:1:69","nodeType":"YulLiteral","src":"44309:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"44294:3:69","nodeType":"YulIdentifier","src":"44294:3:69"},"nativeSrc":"44294:17:69","nodeType":"YulFunctionCall","src":"44294:17:69"},{"arguments":[{"name":"tail","nativeSrc":"44317:4:69","nodeType":"YulIdentifier","src":"44317:4:69"},{"name":"headStart","nativeSrc":"44323:9:69","nodeType":"YulIdentifier","src":"44323:9:69"}],"functionName":{"name":"sub","nativeSrc":"44313:3:69","nodeType":"YulIdentifier","src":"44313:3:69"},"nativeSrc":"44313:20:69","nodeType":"YulFunctionCall","src":"44313:20:69"}],"functionName":{"name":"mstore","nativeSrc":"44287:6:69","nodeType":"YulIdentifier","src":"44287:6:69"},"nativeSrc":"44287:47:69","nodeType":"YulFunctionCall","src":"44287:47:69"},"nativeSrc":"44287:47:69","nodeType":"YulExpressionStatement","src":"44287:47:69"},{"nativeSrc":"44343:139:69","nodeType":"YulAssignment","src":"44343:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"44477:4:69","nodeType":"YulIdentifier","src":"44477:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_4a73c8aa35e7317ade5f993a0242f1c31eb3c6b8eb0e0c438aee70e953928ca6_to_t_string_memory_ptr_fromStack","nativeSrc":"44351:124:69","nodeType":"YulIdentifier","src":"44351:124:69"},"nativeSrc":"44351:131:69","nodeType":"YulFunctionCall","src":"44351:131:69"},"variableNames":[{"name":"tail","nativeSrc":"44343:4:69","nodeType":"YulIdentifier","src":"44343:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_4a73c8aa35e7317ade5f993a0242f1c31eb3c6b8eb0e0c438aee70e953928ca6__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"44070:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"44221:9:69","nodeType":"YulTypedName","src":"44221:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"44236:4:69","nodeType":"YulTypedName","src":"44236:4:69","type":""}],"src":"44070:419:69"},{"body":{"nativeSrc":"44649:288:69","nodeType":"YulBlock","src":"44649:288:69","statements":[{"nativeSrc":"44659:26:69","nodeType":"YulAssignment","src":"44659:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"44671:9:69","nodeType":"YulIdentifier","src":"44671:9:69"},{"kind":"number","nativeSrc":"44682:2:69","nodeType":"YulLiteral","src":"44682:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"44667:3:69","nodeType":"YulIdentifier","src":"44667:3:69"},"nativeSrc":"44667:18:69","nodeType":"YulFunctionCall","src":"44667:18:69"},"variableNames":[{"name":"tail","nativeSrc":"44659:4:69","nodeType":"YulIdentifier","src":"44659:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"44739:6:69","nodeType":"YulIdentifier","src":"44739:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"44752:9:69","nodeType":"YulIdentifier","src":"44752:9:69"},{"kind":"number","nativeSrc":"44763:1:69","nodeType":"YulLiteral","src":"44763:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"44748:3:69","nodeType":"YulIdentifier","src":"44748:3:69"},"nativeSrc":"44748:17:69","nodeType":"YulFunctionCall","src":"44748:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"44695:43:69","nodeType":"YulIdentifier","src":"44695:43:69"},"nativeSrc":"44695:71:69","nodeType":"YulFunctionCall","src":"44695:71:69"},"nativeSrc":"44695:71:69","nodeType":"YulExpressionStatement","src":"44695:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"44820:6:69","nodeType":"YulIdentifier","src":"44820:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"44833:9:69","nodeType":"YulIdentifier","src":"44833:9:69"},{"kind":"number","nativeSrc":"44844:2:69","nodeType":"YulLiteral","src":"44844:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"44829:3:69","nodeType":"YulIdentifier","src":"44829:3:69"},"nativeSrc":"44829:18:69","nodeType":"YulFunctionCall","src":"44829:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"44776:43:69","nodeType":"YulIdentifier","src":"44776:43:69"},"nativeSrc":"44776:72:69","nodeType":"YulFunctionCall","src":"44776:72:69"},"nativeSrc":"44776:72:69","nodeType":"YulExpressionStatement","src":"44776:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"44902:6:69","nodeType":"YulIdentifier","src":"44902:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"44915:9:69","nodeType":"YulIdentifier","src":"44915:9:69"},{"kind":"number","nativeSrc":"44926:2:69","nodeType":"YulLiteral","src":"44926:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"44911:3:69","nodeType":"YulIdentifier","src":"44911:3:69"},"nativeSrc":"44911:18:69","nodeType":"YulFunctionCall","src":"44911:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"44858:43:69","nodeType":"YulIdentifier","src":"44858:43:69"},"nativeSrc":"44858:72:69","nodeType":"YulFunctionCall","src":"44858:72:69"},"nativeSrc":"44858:72:69","nodeType":"YulExpressionStatement","src":"44858:72:69"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nativeSrc":"44495:442:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"44605:9:69","nodeType":"YulTypedName","src":"44605:9:69","type":""},{"name":"value2","nativeSrc":"44617:6:69","nodeType":"YulTypedName","src":"44617:6:69","type":""},{"name":"value1","nativeSrc":"44625:6:69","nodeType":"YulTypedName","src":"44625:6:69","type":""},{"name":"value0","nativeSrc":"44633:6:69","nodeType":"YulTypedName","src":"44633:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"44644:4:69","nodeType":"YulTypedName","src":"44644:4:69","type":""}],"src":"44495:442:69"},{"body":{"nativeSrc":"45125:371:69","nodeType":"YulBlock","src":"45125:371:69","statements":[{"nativeSrc":"45135:27:69","nodeType":"YulAssignment","src":"45135:27:69","value":{"arguments":[{"name":"headStart","nativeSrc":"45147:9:69","nodeType":"YulIdentifier","src":"45147:9:69"},{"kind":"number","nativeSrc":"45158:3:69","nodeType":"YulLiteral","src":"45158:3:69","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"45143:3:69","nodeType":"YulIdentifier","src":"45143:3:69"},"nativeSrc":"45143:19:69","nodeType":"YulFunctionCall","src":"45143:19:69"},"variableNames":[{"name":"tail","nativeSrc":"45135:4:69","nodeType":"YulIdentifier","src":"45135:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"45216:6:69","nodeType":"YulIdentifier","src":"45216:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"45229:9:69","nodeType":"YulIdentifier","src":"45229:9:69"},{"kind":"number","nativeSrc":"45240:1:69","nodeType":"YulLiteral","src":"45240:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"45225:3:69","nodeType":"YulIdentifier","src":"45225:3:69"},"nativeSrc":"45225:17:69","nodeType":"YulFunctionCall","src":"45225:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"45172:43:69","nodeType":"YulIdentifier","src":"45172:43:69"},"nativeSrc":"45172:71:69","nodeType":"YulFunctionCall","src":"45172:71:69"},"nativeSrc":"45172:71:69","nodeType":"YulExpressionStatement","src":"45172:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"45297:6:69","nodeType":"YulIdentifier","src":"45297:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"45310:9:69","nodeType":"YulIdentifier","src":"45310:9:69"},{"kind":"number","nativeSrc":"45321:2:69","nodeType":"YulLiteral","src":"45321:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"45306:3:69","nodeType":"YulIdentifier","src":"45306:3:69"},"nativeSrc":"45306:18:69","nodeType":"YulFunctionCall","src":"45306:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"45253:43:69","nodeType":"YulIdentifier","src":"45253:43:69"},"nativeSrc":"45253:72:69","nodeType":"YulFunctionCall","src":"45253:72:69"},"nativeSrc":"45253:72:69","nodeType":"YulExpressionStatement","src":"45253:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"45379:6:69","nodeType":"YulIdentifier","src":"45379:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"45392:9:69","nodeType":"YulIdentifier","src":"45392:9:69"},{"kind":"number","nativeSrc":"45403:2:69","nodeType":"YulLiteral","src":"45403:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"45388:3:69","nodeType":"YulIdentifier","src":"45388:3:69"},"nativeSrc":"45388:18:69","nodeType":"YulFunctionCall","src":"45388:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"45335:43:69","nodeType":"YulIdentifier","src":"45335:43:69"},"nativeSrc":"45335:72:69","nodeType":"YulFunctionCall","src":"45335:72:69"},"nativeSrc":"45335:72:69","nodeType":"YulExpressionStatement","src":"45335:72:69"},{"expression":{"arguments":[{"name":"value3","nativeSrc":"45461:6:69","nodeType":"YulIdentifier","src":"45461:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"45474:9:69","nodeType":"YulIdentifier","src":"45474:9:69"},{"kind":"number","nativeSrc":"45485:2:69","nodeType":"YulLiteral","src":"45485:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"45470:3:69","nodeType":"YulIdentifier","src":"45470:3:69"},"nativeSrc":"45470:18:69","nodeType":"YulFunctionCall","src":"45470:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"45417:43:69","nodeType":"YulIdentifier","src":"45417:43:69"},"nativeSrc":"45417:72:69","nodeType":"YulFunctionCall","src":"45417:72:69"},"nativeSrc":"45417:72:69","nodeType":"YulExpressionStatement","src":"45417:72:69"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"44943:553:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"45073:9:69","nodeType":"YulTypedName","src":"45073:9:69","type":""},{"name":"value3","nativeSrc":"45085:6:69","nodeType":"YulTypedName","src":"45085:6:69","type":""},{"name":"value2","nativeSrc":"45093:6:69","nodeType":"YulTypedName","src":"45093:6:69","type":""},{"name":"value1","nativeSrc":"45101:6:69","nodeType":"YulTypedName","src":"45101:6:69","type":""},{"name":"value0","nativeSrc":"45109:6:69","nodeType":"YulTypedName","src":"45109:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"45120:4:69","nodeType":"YulTypedName","src":"45120:4:69","type":""}],"src":"44943:553:69"},{"body":{"nativeSrc":"45684:371:69","nodeType":"YulBlock","src":"45684:371:69","statements":[{"nativeSrc":"45694:27:69","nodeType":"YulAssignment","src":"45694:27:69","value":{"arguments":[{"name":"headStart","nativeSrc":"45706:9:69","nodeType":"YulIdentifier","src":"45706:9:69"},{"kind":"number","nativeSrc":"45717:3:69","nodeType":"YulLiteral","src":"45717:3:69","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"45702:3:69","nodeType":"YulIdentifier","src":"45702:3:69"},"nativeSrc":"45702:19:69","nodeType":"YulFunctionCall","src":"45702:19:69"},"variableNames":[{"name":"tail","nativeSrc":"45694:4:69","nodeType":"YulIdentifier","src":"45694:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"45775:6:69","nodeType":"YulIdentifier","src":"45775:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"45788:9:69","nodeType":"YulIdentifier","src":"45788:9:69"},{"kind":"number","nativeSrc":"45799:1:69","nodeType":"YulLiteral","src":"45799:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"45784:3:69","nodeType":"YulIdentifier","src":"45784:3:69"},"nativeSrc":"45784:17:69","nodeType":"YulFunctionCall","src":"45784:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"45731:43:69","nodeType":"YulIdentifier","src":"45731:43:69"},"nativeSrc":"45731:71:69","nodeType":"YulFunctionCall","src":"45731:71:69"},"nativeSrc":"45731:71:69","nodeType":"YulExpressionStatement","src":"45731:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"45856:6:69","nodeType":"YulIdentifier","src":"45856:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"45869:9:69","nodeType":"YulIdentifier","src":"45869:9:69"},{"kind":"number","nativeSrc":"45880:2:69","nodeType":"YulLiteral","src":"45880:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"45865:3:69","nodeType":"YulIdentifier","src":"45865:3:69"},"nativeSrc":"45865:18:69","nodeType":"YulFunctionCall","src":"45865:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"45812:43:69","nodeType":"YulIdentifier","src":"45812:43:69"},"nativeSrc":"45812:72:69","nodeType":"YulFunctionCall","src":"45812:72:69"},"nativeSrc":"45812:72:69","nodeType":"YulExpressionStatement","src":"45812:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"45938:6:69","nodeType":"YulIdentifier","src":"45938:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"45951:9:69","nodeType":"YulIdentifier","src":"45951:9:69"},{"kind":"number","nativeSrc":"45962:2:69","nodeType":"YulLiteral","src":"45962:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"45947:3:69","nodeType":"YulIdentifier","src":"45947:3:69"},"nativeSrc":"45947:18:69","nodeType":"YulFunctionCall","src":"45947:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"45894:43:69","nodeType":"YulIdentifier","src":"45894:43:69"},"nativeSrc":"45894:72:69","nodeType":"YulFunctionCall","src":"45894:72:69"},"nativeSrc":"45894:72:69","nodeType":"YulExpressionStatement","src":"45894:72:69"},{"expression":{"arguments":[{"name":"value3","nativeSrc":"46020:6:69","nodeType":"YulIdentifier","src":"46020:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"46033:9:69","nodeType":"YulIdentifier","src":"46033:9:69"},{"kind":"number","nativeSrc":"46044:2:69","nodeType":"YulLiteral","src":"46044:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"46029:3:69","nodeType":"YulIdentifier","src":"46029:3:69"},"nativeSrc":"46029:18:69","nodeType":"YulFunctionCall","src":"46029:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"45976:43:69","nodeType":"YulIdentifier","src":"45976:43:69"},"nativeSrc":"45976:72:69","nodeType":"YulFunctionCall","src":"45976:72:69"},"nativeSrc":"45976:72:69","nodeType":"YulExpressionStatement","src":"45976:72:69"}]},"name":"abi_encode_tuple_t_address_t_address_t_address_t_uint256__to_t_address_t_address_t_address_t_uint256__fromStack_reversed","nativeSrc":"45502:553:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"45632:9:69","nodeType":"YulTypedName","src":"45632:9:69","type":""},{"name":"value3","nativeSrc":"45644:6:69","nodeType":"YulTypedName","src":"45644:6:69","type":""},{"name":"value2","nativeSrc":"45652:6:69","nodeType":"YulTypedName","src":"45652:6:69","type":""},{"name":"value1","nativeSrc":"45660:6:69","nodeType":"YulTypedName","src":"45660:6:69","type":""},{"name":"value0","nativeSrc":"45668:6:69","nodeType":"YulTypedName","src":"45668:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"45679:4:69","nodeType":"YulTypedName","src":"45679:4:69","type":""}],"src":"45502:553:69"},{"body":{"nativeSrc":"46167:124:69","nodeType":"YulBlock","src":"46167:124:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"46189:6:69","nodeType":"YulIdentifier","src":"46189:6:69"},{"kind":"number","nativeSrc":"46197:1:69","nodeType":"YulLiteral","src":"46197:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"46185:3:69","nodeType":"YulIdentifier","src":"46185:3:69"},"nativeSrc":"46185:14:69","nodeType":"YulFunctionCall","src":"46185:14:69"},{"hexValue":"496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069","kind":"string","nativeSrc":"46201:34:69","nodeType":"YulLiteral","src":"46201:34:69","type":"","value":"Initializable: contract is not i"}],"functionName":{"name":"mstore","nativeSrc":"46178:6:69","nodeType":"YulIdentifier","src":"46178:6:69"},"nativeSrc":"46178:58:69","nodeType":"YulFunctionCall","src":"46178:58:69"},"nativeSrc":"46178:58:69","nodeType":"YulExpressionStatement","src":"46178:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"46257:6:69","nodeType":"YulIdentifier","src":"46257:6:69"},{"kind":"number","nativeSrc":"46265:2:69","nodeType":"YulLiteral","src":"46265:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"46253:3:69","nodeType":"YulIdentifier","src":"46253:3:69"},"nativeSrc":"46253:15:69","nodeType":"YulFunctionCall","src":"46253:15:69"},{"hexValue":"6e697469616c697a696e67","kind":"string","nativeSrc":"46270:13:69","nodeType":"YulLiteral","src":"46270:13:69","type":"","value":"nitializing"}],"functionName":{"name":"mstore","nativeSrc":"46246:6:69","nodeType":"YulIdentifier","src":"46246:6:69"},"nativeSrc":"46246:38:69","nodeType":"YulFunctionCall","src":"46246:38:69"},"nativeSrc":"46246:38:69","nodeType":"YulExpressionStatement","src":"46246:38:69"}]},"name":"store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b","nativeSrc":"46061:230:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"46159:6:69","nodeType":"YulTypedName","src":"46159:6:69","type":""}],"src":"46061:230:69"},{"body":{"nativeSrc":"46443:220:69","nodeType":"YulBlock","src":"46443:220:69","statements":[{"nativeSrc":"46453:74:69","nodeType":"YulAssignment","src":"46453:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"46519:3:69","nodeType":"YulIdentifier","src":"46519:3:69"},{"kind":"number","nativeSrc":"46524:2:69","nodeType":"YulLiteral","src":"46524:2:69","type":"","value":"43"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"46460:58:69","nodeType":"YulIdentifier","src":"46460:58:69"},"nativeSrc":"46460:67:69","nodeType":"YulFunctionCall","src":"46460:67:69"},"variableNames":[{"name":"pos","nativeSrc":"46453:3:69","nodeType":"YulIdentifier","src":"46453:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"46625:3:69","nodeType":"YulIdentifier","src":"46625:3:69"}],"functionName":{"name":"store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b","nativeSrc":"46536:88:69","nodeType":"YulIdentifier","src":"46536:88:69"},"nativeSrc":"46536:93:69","nodeType":"YulFunctionCall","src":"46536:93:69"},"nativeSrc":"46536:93:69","nodeType":"YulExpressionStatement","src":"46536:93:69"},{"nativeSrc":"46638:19:69","nodeType":"YulAssignment","src":"46638:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"46649:3:69","nodeType":"YulIdentifier","src":"46649:3:69"},{"kind":"number","nativeSrc":"46654:2:69","nodeType":"YulLiteral","src":"46654:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"46645:3:69","nodeType":"YulIdentifier","src":"46645:3:69"},"nativeSrc":"46645:12:69","nodeType":"YulFunctionCall","src":"46645:12:69"},"variableNames":[{"name":"end","nativeSrc":"46638:3:69","nodeType":"YulIdentifier","src":"46638:3:69"}]}]},"name":"abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack","nativeSrc":"46297:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"46431:3:69","nodeType":"YulTypedName","src":"46431:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"46439:3:69","nodeType":"YulTypedName","src":"46439:3:69","type":""}],"src":"46297:366:69"},{"body":{"nativeSrc":"46840:248:69","nodeType":"YulBlock","src":"46840:248:69","statements":[{"nativeSrc":"46850:26:69","nodeType":"YulAssignment","src":"46850:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"46862:9:69","nodeType":"YulIdentifier","src":"46862:9:69"},{"kind":"number","nativeSrc":"46873:2:69","nodeType":"YulLiteral","src":"46873:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"46858:3:69","nodeType":"YulIdentifier","src":"46858:3:69"},"nativeSrc":"46858:18:69","nodeType":"YulFunctionCall","src":"46858:18:69"},"variableNames":[{"name":"tail","nativeSrc":"46850:4:69","nodeType":"YulIdentifier","src":"46850:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"46897:9:69","nodeType":"YulIdentifier","src":"46897:9:69"},{"kind":"number","nativeSrc":"46908:1:69","nodeType":"YulLiteral","src":"46908:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"46893:3:69","nodeType":"YulIdentifier","src":"46893:3:69"},"nativeSrc":"46893:17:69","nodeType":"YulFunctionCall","src":"46893:17:69"},{"arguments":[{"name":"tail","nativeSrc":"46916:4:69","nodeType":"YulIdentifier","src":"46916:4:69"},{"name":"headStart","nativeSrc":"46922:9:69","nodeType":"YulIdentifier","src":"46922:9:69"}],"functionName":{"name":"sub","nativeSrc":"46912:3:69","nodeType":"YulIdentifier","src":"46912:3:69"},"nativeSrc":"46912:20:69","nodeType":"YulFunctionCall","src":"46912:20:69"}],"functionName":{"name":"mstore","nativeSrc":"46886:6:69","nodeType":"YulIdentifier","src":"46886:6:69"},"nativeSrc":"46886:47:69","nodeType":"YulFunctionCall","src":"46886:47:69"},"nativeSrc":"46886:47:69","nodeType":"YulExpressionStatement","src":"46886:47:69"},{"nativeSrc":"46942:139:69","nodeType":"YulAssignment","src":"46942:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"47076:4:69","nodeType":"YulIdentifier","src":"47076:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack","nativeSrc":"46950:124:69","nodeType":"YulIdentifier","src":"46950:124:69"},"nativeSrc":"46950:131:69","nodeType":"YulFunctionCall","src":"46950:131:69"},"variableNames":[{"name":"tail","nativeSrc":"46942:4:69","nodeType":"YulIdentifier","src":"46942:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"46669:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"46820:9:69","nodeType":"YulTypedName","src":"46820:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"46835:4:69","nodeType":"YulTypedName","src":"46835:4:69","type":""}],"src":"46669:419:69"},{"body":{"nativeSrc":"47200:116:69","nodeType":"YulBlock","src":"47200:116:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"47222:6:69","nodeType":"YulIdentifier","src":"47222:6:69"},{"kind":"number","nativeSrc":"47230:1:69","nodeType":"YulLiteral","src":"47230:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"47218:3:69","nodeType":"YulIdentifier","src":"47218:3:69"},"nativeSrc":"47218:14:69","nodeType":"YulFunctionCall","src":"47218:14:69"},{"hexValue":"6d61726b6574206d6179206f6e6c7920626520696e697469616c697a6564206f","kind":"string","nativeSrc":"47234:34:69","nodeType":"YulLiteral","src":"47234:34:69","type":"","value":"market may only be initialized o"}],"functionName":{"name":"mstore","nativeSrc":"47211:6:69","nodeType":"YulIdentifier","src":"47211:6:69"},"nativeSrc":"47211:58:69","nodeType":"YulFunctionCall","src":"47211:58:69"},"nativeSrc":"47211:58:69","nodeType":"YulExpressionStatement","src":"47211:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"47290:6:69","nodeType":"YulIdentifier","src":"47290:6:69"},{"kind":"number","nativeSrc":"47298:2:69","nodeType":"YulLiteral","src":"47298:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"47286:3:69","nodeType":"YulIdentifier","src":"47286:3:69"},"nativeSrc":"47286:15:69","nodeType":"YulFunctionCall","src":"47286:15:69"},{"hexValue":"6e6365","kind":"string","nativeSrc":"47303:5:69","nodeType":"YulLiteral","src":"47303:5:69","type":"","value":"nce"}],"functionName":{"name":"mstore","nativeSrc":"47279:6:69","nodeType":"YulIdentifier","src":"47279:6:69"},"nativeSrc":"47279:30:69","nodeType":"YulFunctionCall","src":"47279:30:69"},"nativeSrc":"47279:30:69","nodeType":"YulExpressionStatement","src":"47279:30:69"}]},"name":"store_literal_in_memory_1bebca39b478e42a6b88dcff87467d0e08b422ebc72c3d074bd236265624e814","nativeSrc":"47094:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"47192:6:69","nodeType":"YulTypedName","src":"47192:6:69","type":""}],"src":"47094:222:69"},{"body":{"nativeSrc":"47468:220:69","nodeType":"YulBlock","src":"47468:220:69","statements":[{"nativeSrc":"47478:74:69","nodeType":"YulAssignment","src":"47478:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"47544:3:69","nodeType":"YulIdentifier","src":"47544:3:69"},{"kind":"number","nativeSrc":"47549:2:69","nodeType":"YulLiteral","src":"47549:2:69","type":"","value":"35"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"47485:58:69","nodeType":"YulIdentifier","src":"47485:58:69"},"nativeSrc":"47485:67:69","nodeType":"YulFunctionCall","src":"47485:67:69"},"variableNames":[{"name":"pos","nativeSrc":"47478:3:69","nodeType":"YulIdentifier","src":"47478:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"47650:3:69","nodeType":"YulIdentifier","src":"47650:3:69"}],"functionName":{"name":"store_literal_in_memory_1bebca39b478e42a6b88dcff87467d0e08b422ebc72c3d074bd236265624e814","nativeSrc":"47561:88:69","nodeType":"YulIdentifier","src":"47561:88:69"},"nativeSrc":"47561:93:69","nodeType":"YulFunctionCall","src":"47561:93:69"},"nativeSrc":"47561:93:69","nodeType":"YulExpressionStatement","src":"47561:93:69"},{"nativeSrc":"47663:19:69","nodeType":"YulAssignment","src":"47663:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"47674:3:69","nodeType":"YulIdentifier","src":"47674:3:69"},{"kind":"number","nativeSrc":"47679:2:69","nodeType":"YulLiteral","src":"47679:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"47670:3:69","nodeType":"YulIdentifier","src":"47670:3:69"},"nativeSrc":"47670:12:69","nodeType":"YulFunctionCall","src":"47670:12:69"},"variableNames":[{"name":"end","nativeSrc":"47663:3:69","nodeType":"YulIdentifier","src":"47663:3:69"}]}]},"name":"abi_encode_t_stringliteral_1bebca39b478e42a6b88dcff87467d0e08b422ebc72c3d074bd236265624e814_to_t_string_memory_ptr_fromStack","nativeSrc":"47322:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"47456:3:69","nodeType":"YulTypedName","src":"47456:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"47464:3:69","nodeType":"YulTypedName","src":"47464:3:69","type":""}],"src":"47322:366:69"},{"body":{"nativeSrc":"47865:248:69","nodeType":"YulBlock","src":"47865:248:69","statements":[{"nativeSrc":"47875:26:69","nodeType":"YulAssignment","src":"47875:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"47887:9:69","nodeType":"YulIdentifier","src":"47887:9:69"},{"kind":"number","nativeSrc":"47898:2:69","nodeType":"YulLiteral","src":"47898:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"47883:3:69","nodeType":"YulIdentifier","src":"47883:3:69"},"nativeSrc":"47883:18:69","nodeType":"YulFunctionCall","src":"47883:18:69"},"variableNames":[{"name":"tail","nativeSrc":"47875:4:69","nodeType":"YulIdentifier","src":"47875:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"47922:9:69","nodeType":"YulIdentifier","src":"47922:9:69"},{"kind":"number","nativeSrc":"47933:1:69","nodeType":"YulLiteral","src":"47933:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"47918:3:69","nodeType":"YulIdentifier","src":"47918:3:69"},"nativeSrc":"47918:17:69","nodeType":"YulFunctionCall","src":"47918:17:69"},{"arguments":[{"name":"tail","nativeSrc":"47941:4:69","nodeType":"YulIdentifier","src":"47941:4:69"},{"name":"headStart","nativeSrc":"47947:9:69","nodeType":"YulIdentifier","src":"47947:9:69"}],"functionName":{"name":"sub","nativeSrc":"47937:3:69","nodeType":"YulIdentifier","src":"47937:3:69"},"nativeSrc":"47937:20:69","nodeType":"YulFunctionCall","src":"47937:20:69"}],"functionName":{"name":"mstore","nativeSrc":"47911:6:69","nodeType":"YulIdentifier","src":"47911:6:69"},"nativeSrc":"47911:47:69","nodeType":"YulFunctionCall","src":"47911:47:69"},"nativeSrc":"47911:47:69","nodeType":"YulExpressionStatement","src":"47911:47:69"},{"nativeSrc":"47967:139:69","nodeType":"YulAssignment","src":"47967:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"48101:4:69","nodeType":"YulIdentifier","src":"48101:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_1bebca39b478e42a6b88dcff87467d0e08b422ebc72c3d074bd236265624e814_to_t_string_memory_ptr_fromStack","nativeSrc":"47975:124:69","nodeType":"YulIdentifier","src":"47975:124:69"},"nativeSrc":"47975:131:69","nodeType":"YulFunctionCall","src":"47975:131:69"},"variableNames":[{"name":"tail","nativeSrc":"47967:4:69","nodeType":"YulIdentifier","src":"47967:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_1bebca39b478e42a6b88dcff87467d0e08b422ebc72c3d074bd236265624e814__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"47694:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"47845:9:69","nodeType":"YulTypedName","src":"47845:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"47860:4:69","nodeType":"YulTypedName","src":"47860:4:69","type":""}],"src":"47694:419:69"},{"body":{"nativeSrc":"48225:129:69","nodeType":"YulBlock","src":"48225:129:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"48247:6:69","nodeType":"YulIdentifier","src":"48247:6:69"},{"kind":"number","nativeSrc":"48255:1:69","nodeType":"YulLiteral","src":"48255:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"48243:3:69","nodeType":"YulIdentifier","src":"48243:3:69"},"nativeSrc":"48243:14:69","nodeType":"YulFunctionCall","src":"48243:14:69"},{"hexValue":"696e697469616c2065786368616e67652072617465206d757374206265206772","kind":"string","nativeSrc":"48259:34:69","nodeType":"YulLiteral","src":"48259:34:69","type":"","value":"initial exchange rate must be gr"}],"functionName":{"name":"mstore","nativeSrc":"48236:6:69","nodeType":"YulIdentifier","src":"48236:6:69"},"nativeSrc":"48236:58:69","nodeType":"YulFunctionCall","src":"48236:58:69"},"nativeSrc":"48236:58:69","nodeType":"YulExpressionStatement","src":"48236:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"48315:6:69","nodeType":"YulIdentifier","src":"48315:6:69"},{"kind":"number","nativeSrc":"48323:2:69","nodeType":"YulLiteral","src":"48323:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"48311:3:69","nodeType":"YulIdentifier","src":"48311:3:69"},"nativeSrc":"48311:15:69","nodeType":"YulFunctionCall","src":"48311:15:69"},{"hexValue":"6561746572207468616e207a65726f2e","kind":"string","nativeSrc":"48328:18:69","nodeType":"YulLiteral","src":"48328:18:69","type":"","value":"eater than zero."}],"functionName":{"name":"mstore","nativeSrc":"48304:6:69","nodeType":"YulIdentifier","src":"48304:6:69"},"nativeSrc":"48304:43:69","nodeType":"YulFunctionCall","src":"48304:43:69"},"nativeSrc":"48304:43:69","nodeType":"YulExpressionStatement","src":"48304:43:69"}]},"name":"store_literal_in_memory_427426a02e699ec0d6d6d22f3254c7e686696e18d2de7af9416d6b5cc786ff6c","nativeSrc":"48119:235:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"48217:6:69","nodeType":"YulTypedName","src":"48217:6:69","type":""}],"src":"48119:235:69"},{"body":{"nativeSrc":"48506:220:69","nodeType":"YulBlock","src":"48506:220:69","statements":[{"nativeSrc":"48516:74:69","nodeType":"YulAssignment","src":"48516:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"48582:3:69","nodeType":"YulIdentifier","src":"48582:3:69"},{"kind":"number","nativeSrc":"48587:2:69","nodeType":"YulLiteral","src":"48587:2:69","type":"","value":"48"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"48523:58:69","nodeType":"YulIdentifier","src":"48523:58:69"},"nativeSrc":"48523:67:69","nodeType":"YulFunctionCall","src":"48523:67:69"},"variableNames":[{"name":"pos","nativeSrc":"48516:3:69","nodeType":"YulIdentifier","src":"48516:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"48688:3:69","nodeType":"YulIdentifier","src":"48688:3:69"}],"functionName":{"name":"store_literal_in_memory_427426a02e699ec0d6d6d22f3254c7e686696e18d2de7af9416d6b5cc786ff6c","nativeSrc":"48599:88:69","nodeType":"YulIdentifier","src":"48599:88:69"},"nativeSrc":"48599:93:69","nodeType":"YulFunctionCall","src":"48599:93:69"},"nativeSrc":"48599:93:69","nodeType":"YulExpressionStatement","src":"48599:93:69"},{"nativeSrc":"48701:19:69","nodeType":"YulAssignment","src":"48701:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"48712:3:69","nodeType":"YulIdentifier","src":"48712:3:69"},{"kind":"number","nativeSrc":"48717:2:69","nodeType":"YulLiteral","src":"48717:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"48708:3:69","nodeType":"YulIdentifier","src":"48708:3:69"},"nativeSrc":"48708:12:69","nodeType":"YulFunctionCall","src":"48708:12:69"},"variableNames":[{"name":"end","nativeSrc":"48701:3:69","nodeType":"YulIdentifier","src":"48701:3:69"}]}]},"name":"abi_encode_t_stringliteral_427426a02e699ec0d6d6d22f3254c7e686696e18d2de7af9416d6b5cc786ff6c_to_t_string_memory_ptr_fromStack","nativeSrc":"48360:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"48494:3:69","nodeType":"YulTypedName","src":"48494:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"48502:3:69","nodeType":"YulTypedName","src":"48502:3:69","type":""}],"src":"48360:366:69"},{"body":{"nativeSrc":"48903:248:69","nodeType":"YulBlock","src":"48903:248:69","statements":[{"nativeSrc":"48913:26:69","nodeType":"YulAssignment","src":"48913:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"48925:9:69","nodeType":"YulIdentifier","src":"48925:9:69"},{"kind":"number","nativeSrc":"48936:2:69","nodeType":"YulLiteral","src":"48936:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"48921:3:69","nodeType":"YulIdentifier","src":"48921:3:69"},"nativeSrc":"48921:18:69","nodeType":"YulFunctionCall","src":"48921:18:69"},"variableNames":[{"name":"tail","nativeSrc":"48913:4:69","nodeType":"YulIdentifier","src":"48913:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"48960:9:69","nodeType":"YulIdentifier","src":"48960:9:69"},{"kind":"number","nativeSrc":"48971:1:69","nodeType":"YulLiteral","src":"48971:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"48956:3:69","nodeType":"YulIdentifier","src":"48956:3:69"},"nativeSrc":"48956:17:69","nodeType":"YulFunctionCall","src":"48956:17:69"},{"arguments":[{"name":"tail","nativeSrc":"48979:4:69","nodeType":"YulIdentifier","src":"48979:4:69"},{"name":"headStart","nativeSrc":"48985:9:69","nodeType":"YulIdentifier","src":"48985:9:69"}],"functionName":{"name":"sub","nativeSrc":"48975:3:69","nodeType":"YulIdentifier","src":"48975:3:69"},"nativeSrc":"48975:20:69","nodeType":"YulFunctionCall","src":"48975:20:69"}],"functionName":{"name":"mstore","nativeSrc":"48949:6:69","nodeType":"YulIdentifier","src":"48949:6:69"},"nativeSrc":"48949:47:69","nodeType":"YulFunctionCall","src":"48949:47:69"},"nativeSrc":"48949:47:69","nodeType":"YulExpressionStatement","src":"48949:47:69"},{"nativeSrc":"49005:139:69","nodeType":"YulAssignment","src":"49005:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"49139:4:69","nodeType":"YulIdentifier","src":"49139:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_427426a02e699ec0d6d6d22f3254c7e686696e18d2de7af9416d6b5cc786ff6c_to_t_string_memory_ptr_fromStack","nativeSrc":"49013:124:69","nodeType":"YulIdentifier","src":"49013:124:69"},"nativeSrc":"49013:131:69","nodeType":"YulFunctionCall","src":"49013:131:69"},"variableNames":[{"name":"tail","nativeSrc":"49005:4:69","nodeType":"YulIdentifier","src":"49005:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_427426a02e699ec0d6d6d22f3254c7e686696e18d2de7af9416d6b5cc786ff6c__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"48732:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"48883:9:69","nodeType":"YulTypedName","src":"48883:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"48898:4:69","nodeType":"YulTypedName","src":"48898:4:69","type":""}],"src":"48732:419:69"},{"body":{"nativeSrc":"49211:87:69","nodeType":"YulBlock","src":"49211:87:69","statements":[{"nativeSrc":"49221:11:69","nodeType":"YulAssignment","src":"49221:11:69","value":{"name":"ptr","nativeSrc":"49229:3:69","nodeType":"YulIdentifier","src":"49229:3:69"},"variableNames":[{"name":"data","nativeSrc":"49221:4:69","nodeType":"YulIdentifier","src":"49221:4:69"}]},{"expression":{"arguments":[{"kind":"number","nativeSrc":"49249:1:69","nodeType":"YulLiteral","src":"49249:1:69","type":"","value":"0"},{"name":"ptr","nativeSrc":"49252:3:69","nodeType":"YulIdentifier","src":"49252:3:69"}],"functionName":{"name":"mstore","nativeSrc":"49242:6:69","nodeType":"YulIdentifier","src":"49242:6:69"},"nativeSrc":"49242:14:69","nodeType":"YulFunctionCall","src":"49242:14:69"},"nativeSrc":"49242:14:69","nodeType":"YulExpressionStatement","src":"49242:14:69"},{"nativeSrc":"49265:26:69","nodeType":"YulAssignment","src":"49265:26:69","value":{"arguments":[{"kind":"number","nativeSrc":"49283:1:69","nodeType":"YulLiteral","src":"49283:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"49286:4:69","nodeType":"YulLiteral","src":"49286:4:69","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nativeSrc":"49273:9:69","nodeType":"YulIdentifier","src":"49273:9:69"},"nativeSrc":"49273:18:69","nodeType":"YulFunctionCall","src":"49273:18:69"},"variableNames":[{"name":"data","nativeSrc":"49265:4:69","nodeType":"YulIdentifier","src":"49265:4:69"}]}]},"name":"array_dataslot_t_string_storage","nativeSrc":"49157:141:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nativeSrc":"49198:3:69","nodeType":"YulTypedName","src":"49198:3:69","type":""}],"returnVariables":[{"name":"data","nativeSrc":"49206:4:69","nodeType":"YulTypedName","src":"49206:4:69","type":""}],"src":"49157:141:69"},{"body":{"nativeSrc":"49348:49:69","nodeType":"YulBlock","src":"49348:49:69","statements":[{"nativeSrc":"49358:33:69","nodeType":"YulAssignment","src":"49358:33:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"49376:5:69","nodeType":"YulIdentifier","src":"49376:5:69"},{"kind":"number","nativeSrc":"49383:2:69","nodeType":"YulLiteral","src":"49383:2:69","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"49372:3:69","nodeType":"YulIdentifier","src":"49372:3:69"},"nativeSrc":"49372:14:69","nodeType":"YulFunctionCall","src":"49372:14:69"},{"kind":"number","nativeSrc":"49388:2:69","nodeType":"YulLiteral","src":"49388:2:69","type":"","value":"32"}],"functionName":{"name":"div","nativeSrc":"49368:3:69","nodeType":"YulIdentifier","src":"49368:3:69"},"nativeSrc":"49368:23:69","nodeType":"YulFunctionCall","src":"49368:23:69"},"variableNames":[{"name":"result","nativeSrc":"49358:6:69","nodeType":"YulIdentifier","src":"49358:6:69"}]}]},"name":"divide_by_32_ceil","nativeSrc":"49304:93:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"49331:5:69","nodeType":"YulTypedName","src":"49331:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"49341:6:69","nodeType":"YulTypedName","src":"49341:6:69","type":""}],"src":"49304:93:69"},{"body":{"nativeSrc":"49456:54:69","nodeType":"YulBlock","src":"49456:54:69","statements":[{"nativeSrc":"49466:37:69","nodeType":"YulAssignment","src":"49466:37:69","value":{"arguments":[{"name":"bits","nativeSrc":"49491:4:69","nodeType":"YulIdentifier","src":"49491:4:69"},{"name":"value","nativeSrc":"49497:5:69","nodeType":"YulIdentifier","src":"49497:5:69"}],"functionName":{"name":"shl","nativeSrc":"49487:3:69","nodeType":"YulIdentifier","src":"49487:3:69"},"nativeSrc":"49487:16:69","nodeType":"YulFunctionCall","src":"49487:16:69"},"variableNames":[{"name":"newValue","nativeSrc":"49466:8:69","nodeType":"YulIdentifier","src":"49466:8:69"}]}]},"name":"shift_left_dynamic","nativeSrc":"49403:107:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"bits","nativeSrc":"49431:4:69","nodeType":"YulTypedName","src":"49431:4:69","type":""},{"name":"value","nativeSrc":"49437:5:69","nodeType":"YulTypedName","src":"49437:5:69","type":""}],"returnVariables":[{"name":"newValue","nativeSrc":"49447:8:69","nodeType":"YulTypedName","src":"49447:8:69","type":""}],"src":"49403:107:69"},{"body":{"nativeSrc":"49592:317:69","nodeType":"YulBlock","src":"49592:317:69","statements":[{"nativeSrc":"49602:35:69","nodeType":"YulVariableDeclaration","src":"49602:35:69","value":{"arguments":[{"name":"shiftBytes","nativeSrc":"49623:10:69","nodeType":"YulIdentifier","src":"49623:10:69"},{"kind":"number","nativeSrc":"49635:1:69","nodeType":"YulLiteral","src":"49635:1:69","type":"","value":"8"}],"functionName":{"name":"mul","nativeSrc":"49619:3:69","nodeType":"YulIdentifier","src":"49619:3:69"},"nativeSrc":"49619:18:69","nodeType":"YulFunctionCall","src":"49619:18:69"},"variables":[{"name":"shiftBits","nativeSrc":"49606:9:69","nodeType":"YulTypedName","src":"49606:9:69","type":""}]},{"nativeSrc":"49646:109:69","nodeType":"YulVariableDeclaration","src":"49646:109:69","value":{"arguments":[{"name":"shiftBits","nativeSrc":"49677:9:69","nodeType":"YulIdentifier","src":"49677:9:69"},{"kind":"number","nativeSrc":"49688:66:69","nodeType":"YulLiteral","src":"49688:66:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"shift_left_dynamic","nativeSrc":"49658:18:69","nodeType":"YulIdentifier","src":"49658:18:69"},"nativeSrc":"49658:97:69","nodeType":"YulFunctionCall","src":"49658:97:69"},"variables":[{"name":"mask","nativeSrc":"49650:4:69","nodeType":"YulTypedName","src":"49650:4:69","type":""}]},{"nativeSrc":"49764:51:69","nodeType":"YulAssignment","src":"49764:51:69","value":{"arguments":[{"name":"shiftBits","nativeSrc":"49795:9:69","nodeType":"YulIdentifier","src":"49795:9:69"},{"name":"toInsert","nativeSrc":"49806:8:69","nodeType":"YulIdentifier","src":"49806:8:69"}],"functionName":{"name":"shift_left_dynamic","nativeSrc":"49776:18:69","nodeType":"YulIdentifier","src":"49776:18:69"},"nativeSrc":"49776:39:69","nodeType":"YulFunctionCall","src":"49776:39:69"},"variableNames":[{"name":"toInsert","nativeSrc":"49764:8:69","nodeType":"YulIdentifier","src":"49764:8:69"}]},{"nativeSrc":"49824:30:69","nodeType":"YulAssignment","src":"49824:30:69","value":{"arguments":[{"name":"value","nativeSrc":"49837:5:69","nodeType":"YulIdentifier","src":"49837:5:69"},{"arguments":[{"name":"mask","nativeSrc":"49848:4:69","nodeType":"YulIdentifier","src":"49848:4:69"}],"functionName":{"name":"not","nativeSrc":"49844:3:69","nodeType":"YulIdentifier","src":"49844:3:69"},"nativeSrc":"49844:9:69","nodeType":"YulFunctionCall","src":"49844:9:69"}],"functionName":{"name":"and","nativeSrc":"49833:3:69","nodeType":"YulIdentifier","src":"49833:3:69"},"nativeSrc":"49833:21:69","nodeType":"YulFunctionCall","src":"49833:21:69"},"variableNames":[{"name":"value","nativeSrc":"49824:5:69","nodeType":"YulIdentifier","src":"49824:5:69"}]},{"nativeSrc":"49863:40:69","nodeType":"YulAssignment","src":"49863:40:69","value":{"arguments":[{"name":"value","nativeSrc":"49876:5:69","nodeType":"YulIdentifier","src":"49876:5:69"},{"arguments":[{"name":"toInsert","nativeSrc":"49887:8:69","nodeType":"YulIdentifier","src":"49887:8:69"},{"name":"mask","nativeSrc":"49897:4:69","nodeType":"YulIdentifier","src":"49897:4:69"}],"functionName":{"name":"and","nativeSrc":"49883:3:69","nodeType":"YulIdentifier","src":"49883:3:69"},"nativeSrc":"49883:19:69","nodeType":"YulFunctionCall","src":"49883:19:69"}],"functionName":{"name":"or","nativeSrc":"49873:2:69","nodeType":"YulIdentifier","src":"49873:2:69"},"nativeSrc":"49873:30:69","nodeType":"YulFunctionCall","src":"49873:30:69"},"variableNames":[{"name":"result","nativeSrc":"49863:6:69","nodeType":"YulIdentifier","src":"49863:6:69"}]}]},"name":"update_byte_slice_dynamic32","nativeSrc":"49516:393:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"49553:5:69","nodeType":"YulTypedName","src":"49553:5:69","type":""},{"name":"shiftBytes","nativeSrc":"49560:10:69","nodeType":"YulTypedName","src":"49560:10:69","type":""},{"name":"toInsert","nativeSrc":"49572:8:69","nodeType":"YulTypedName","src":"49572:8:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"49585:6:69","nodeType":"YulTypedName","src":"49585:6:69","type":""}],"src":"49516:393:69"},{"body":{"nativeSrc":"49975:82:69","nodeType":"YulBlock","src":"49975:82:69","statements":[{"nativeSrc":"49985:66:69","nodeType":"YulAssignment","src":"49985:66:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"50043:5:69","nodeType":"YulIdentifier","src":"50043:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"50025:17:69","nodeType":"YulIdentifier","src":"50025:17:69"},"nativeSrc":"50025:24:69","nodeType":"YulFunctionCall","src":"50025:24:69"}],"functionName":{"name":"identity","nativeSrc":"50016:8:69","nodeType":"YulIdentifier","src":"50016:8:69"},"nativeSrc":"50016:34:69","nodeType":"YulFunctionCall","src":"50016:34:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"49998:17:69","nodeType":"YulIdentifier","src":"49998:17:69"},"nativeSrc":"49998:53:69","nodeType":"YulFunctionCall","src":"49998:53:69"},"variableNames":[{"name":"converted","nativeSrc":"49985:9:69","nodeType":"YulIdentifier","src":"49985:9:69"}]}]},"name":"convert_t_uint256_to_t_uint256","nativeSrc":"49915:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"49955:5:69","nodeType":"YulTypedName","src":"49955:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"49965:9:69","nodeType":"YulTypedName","src":"49965:9:69","type":""}],"src":"49915:142:69"},{"body":{"nativeSrc":"50110:28:69","nodeType":"YulBlock","src":"50110:28:69","statements":[{"nativeSrc":"50120:12:69","nodeType":"YulAssignment","src":"50120:12:69","value":{"name":"value","nativeSrc":"50127:5:69","nodeType":"YulIdentifier","src":"50127:5:69"},"variableNames":[{"name":"ret","nativeSrc":"50120:3:69","nodeType":"YulIdentifier","src":"50120:3:69"}]}]},"name":"prepare_store_t_uint256","nativeSrc":"50063:75:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"50096:5:69","nodeType":"YulTypedName","src":"50096:5:69","type":""}],"returnVariables":[{"name":"ret","nativeSrc":"50106:3:69","nodeType":"YulTypedName","src":"50106:3:69","type":""}],"src":"50063:75:69"},{"body":{"nativeSrc":"50220:193:69","nodeType":"YulBlock","src":"50220:193:69","statements":[{"nativeSrc":"50230:63:69","nodeType":"YulVariableDeclaration","src":"50230:63:69","value":{"arguments":[{"name":"value_0","nativeSrc":"50285:7:69","nodeType":"YulIdentifier","src":"50285:7:69"}],"functionName":{"name":"convert_t_uint256_to_t_uint256","nativeSrc":"50254:30:69","nodeType":"YulIdentifier","src":"50254:30:69"},"nativeSrc":"50254:39:69","nodeType":"YulFunctionCall","src":"50254:39:69"},"variables":[{"name":"convertedValue_0","nativeSrc":"50234:16:69","nodeType":"YulTypedName","src":"50234:16:69","type":""}]},{"expression":{"arguments":[{"name":"slot","nativeSrc":"50309:4:69","nodeType":"YulIdentifier","src":"50309:4:69"},{"arguments":[{"arguments":[{"name":"slot","nativeSrc":"50349:4:69","nodeType":"YulIdentifier","src":"50349:4:69"}],"functionName":{"name":"sload","nativeSrc":"50343:5:69","nodeType":"YulIdentifier","src":"50343:5:69"},"nativeSrc":"50343:11:69","nodeType":"YulFunctionCall","src":"50343:11:69"},{"name":"offset","nativeSrc":"50356:6:69","nodeType":"YulIdentifier","src":"50356:6:69"},{"arguments":[{"name":"convertedValue_0","nativeSrc":"50388:16:69","nodeType":"YulIdentifier","src":"50388:16:69"}],"functionName":{"name":"prepare_store_t_uint256","nativeSrc":"50364:23:69","nodeType":"YulIdentifier","src":"50364:23:69"},"nativeSrc":"50364:41:69","nodeType":"YulFunctionCall","src":"50364:41:69"}],"functionName":{"name":"update_byte_slice_dynamic32","nativeSrc":"50315:27:69","nodeType":"YulIdentifier","src":"50315:27:69"},"nativeSrc":"50315:91:69","nodeType":"YulFunctionCall","src":"50315:91:69"}],"functionName":{"name":"sstore","nativeSrc":"50302:6:69","nodeType":"YulIdentifier","src":"50302:6:69"},"nativeSrc":"50302:105:69","nodeType":"YulFunctionCall","src":"50302:105:69"},"nativeSrc":"50302:105:69","nodeType":"YulExpressionStatement","src":"50302:105:69"}]},"name":"update_storage_value_t_uint256_to_t_uint256","nativeSrc":"50144:269:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nativeSrc":"50197:4:69","nodeType":"YulTypedName","src":"50197:4:69","type":""},{"name":"offset","nativeSrc":"50203:6:69","nodeType":"YulTypedName","src":"50203:6:69","type":""},{"name":"value_0","nativeSrc":"50211:7:69","nodeType":"YulTypedName","src":"50211:7:69","type":""}],"src":"50144:269:69"},{"body":{"nativeSrc":"50468:24:69","nodeType":"YulBlock","src":"50468:24:69","statements":[{"nativeSrc":"50478:8:69","nodeType":"YulAssignment","src":"50478:8:69","value":{"kind":"number","nativeSrc":"50485:1:69","nodeType":"YulLiteral","src":"50485:1:69","type":"","value":"0"},"variableNames":[{"name":"ret","nativeSrc":"50478:3:69","nodeType":"YulIdentifier","src":"50478:3:69"}]}]},"name":"zero_value_for_split_t_uint256","nativeSrc":"50419:73:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"ret","nativeSrc":"50464:3:69","nodeType":"YulTypedName","src":"50464:3:69","type":""}],"src":"50419:73:69"},{"body":{"nativeSrc":"50551:136:69","nodeType":"YulBlock","src":"50551:136:69","statements":[{"nativeSrc":"50561:46:69","nodeType":"YulVariableDeclaration","src":"50561:46:69","value":{"arguments":[],"functionName":{"name":"zero_value_for_split_t_uint256","nativeSrc":"50575:30:69","nodeType":"YulIdentifier","src":"50575:30:69"},"nativeSrc":"50575:32:69","nodeType":"YulFunctionCall","src":"50575:32:69"},"variables":[{"name":"zero_0","nativeSrc":"50565:6:69","nodeType":"YulTypedName","src":"50565:6:69","type":""}]},{"expression":{"arguments":[{"name":"slot","nativeSrc":"50660:4:69","nodeType":"YulIdentifier","src":"50660:4:69"},{"name":"offset","nativeSrc":"50666:6:69","nodeType":"YulIdentifier","src":"50666:6:69"},{"name":"zero_0","nativeSrc":"50674:6:69","nodeType":"YulIdentifier","src":"50674:6:69"}],"functionName":{"name":"update_storage_value_t_uint256_to_t_uint256","nativeSrc":"50616:43:69","nodeType":"YulIdentifier","src":"50616:43:69"},"nativeSrc":"50616:65:69","nodeType":"YulFunctionCall","src":"50616:65:69"},"nativeSrc":"50616:65:69","nodeType":"YulExpressionStatement","src":"50616:65:69"}]},"name":"storage_set_to_zero_t_uint256","nativeSrc":"50498:189:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nativeSrc":"50537:4:69","nodeType":"YulTypedName","src":"50537:4:69","type":""},{"name":"offset","nativeSrc":"50543:6:69","nodeType":"YulTypedName","src":"50543:6:69","type":""}],"src":"50498:189:69"},{"body":{"nativeSrc":"50743:136:69","nodeType":"YulBlock","src":"50743:136:69","statements":[{"body":{"nativeSrc":"50810:63:69","nodeType":"YulBlock","src":"50810:63:69","statements":[{"expression":{"arguments":[{"name":"start","nativeSrc":"50854:5:69","nodeType":"YulIdentifier","src":"50854:5:69"},{"kind":"number","nativeSrc":"50861:1:69","nodeType":"YulLiteral","src":"50861:1:69","type":"","value":"0"}],"functionName":{"name":"storage_set_to_zero_t_uint256","nativeSrc":"50824:29:69","nodeType":"YulIdentifier","src":"50824:29:69"},"nativeSrc":"50824:39:69","nodeType":"YulFunctionCall","src":"50824:39:69"},"nativeSrc":"50824:39:69","nodeType":"YulExpressionStatement","src":"50824:39:69"}]},"condition":{"arguments":[{"name":"start","nativeSrc":"50763:5:69","nodeType":"YulIdentifier","src":"50763:5:69"},{"name":"end","nativeSrc":"50770:3:69","nodeType":"YulIdentifier","src":"50770:3:69"}],"functionName":{"name":"lt","nativeSrc":"50760:2:69","nodeType":"YulIdentifier","src":"50760:2:69"},"nativeSrc":"50760:14:69","nodeType":"YulFunctionCall","src":"50760:14:69"},"nativeSrc":"50753:120:69","nodeType":"YulForLoop","post":{"nativeSrc":"50775:26:69","nodeType":"YulBlock","src":"50775:26:69","statements":[{"nativeSrc":"50777:22:69","nodeType":"YulAssignment","src":"50777:22:69","value":{"arguments":[{"name":"start","nativeSrc":"50790:5:69","nodeType":"YulIdentifier","src":"50790:5:69"},{"kind":"number","nativeSrc":"50797:1:69","nodeType":"YulLiteral","src":"50797:1:69","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"50786:3:69","nodeType":"YulIdentifier","src":"50786:3:69"},"nativeSrc":"50786:13:69","nodeType":"YulFunctionCall","src":"50786:13:69"},"variableNames":[{"name":"start","nativeSrc":"50777:5:69","nodeType":"YulIdentifier","src":"50777:5:69"}]}]},"pre":{"nativeSrc":"50757:2:69","nodeType":"YulBlock","src":"50757:2:69","statements":[]},"src":"50753:120:69"}]},"name":"clear_storage_range_t_bytes1","nativeSrc":"50693:186:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nativeSrc":"50731:5:69","nodeType":"YulTypedName","src":"50731:5:69","type":""},{"name":"end","nativeSrc":"50738:3:69","nodeType":"YulTypedName","src":"50738:3:69","type":""}],"src":"50693:186:69"},{"body":{"nativeSrc":"50964:464:69","nodeType":"YulBlock","src":"50964:464:69","statements":[{"body":{"nativeSrc":"50990:431:69","nodeType":"YulBlock","src":"50990:431:69","statements":[{"nativeSrc":"51004:54:69","nodeType":"YulVariableDeclaration","src":"51004:54:69","value":{"arguments":[{"name":"array","nativeSrc":"51052:5:69","nodeType":"YulIdentifier","src":"51052:5:69"}],"functionName":{"name":"array_dataslot_t_string_storage","nativeSrc":"51020:31:69","nodeType":"YulIdentifier","src":"51020:31:69"},"nativeSrc":"51020:38:69","nodeType":"YulFunctionCall","src":"51020:38:69"},"variables":[{"name":"dataArea","nativeSrc":"51008:8:69","nodeType":"YulTypedName","src":"51008:8:69","type":""}]},{"nativeSrc":"51071:63:69","nodeType":"YulVariableDeclaration","src":"51071:63:69","value":{"arguments":[{"name":"dataArea","nativeSrc":"51094:8:69","nodeType":"YulIdentifier","src":"51094:8:69"},{"arguments":[{"name":"startIndex","nativeSrc":"51122:10:69","nodeType":"YulIdentifier","src":"51122:10:69"}],"functionName":{"name":"divide_by_32_ceil","nativeSrc":"51104:17:69","nodeType":"YulIdentifier","src":"51104:17:69"},"nativeSrc":"51104:29:69","nodeType":"YulFunctionCall","src":"51104:29:69"}],"functionName":{"name":"add","nativeSrc":"51090:3:69","nodeType":"YulIdentifier","src":"51090:3:69"},"nativeSrc":"51090:44:69","nodeType":"YulFunctionCall","src":"51090:44:69"},"variables":[{"name":"deleteStart","nativeSrc":"51075:11:69","nodeType":"YulTypedName","src":"51075:11:69","type":""}]},{"body":{"nativeSrc":"51291:27:69","nodeType":"YulBlock","src":"51291:27:69","statements":[{"nativeSrc":"51293:23:69","nodeType":"YulAssignment","src":"51293:23:69","value":{"name":"dataArea","nativeSrc":"51308:8:69","nodeType":"YulIdentifier","src":"51308:8:69"},"variableNames":[{"name":"deleteStart","nativeSrc":"51293:11:69","nodeType":"YulIdentifier","src":"51293:11:69"}]}]},"condition":{"arguments":[{"name":"startIndex","nativeSrc":"51275:10:69","nodeType":"YulIdentifier","src":"51275:10:69"},{"kind":"number","nativeSrc":"51287:2:69","nodeType":"YulLiteral","src":"51287:2:69","type":"","value":"32"}],"functionName":{"name":"lt","nativeSrc":"51272:2:69","nodeType":"YulIdentifier","src":"51272:2:69"},"nativeSrc":"51272:18:69","nodeType":"YulFunctionCall","src":"51272:18:69"},"nativeSrc":"51269:49:69","nodeType":"YulIf","src":"51269:49:69"},{"expression":{"arguments":[{"name":"deleteStart","nativeSrc":"51360:11:69","nodeType":"YulIdentifier","src":"51360:11:69"},{"arguments":[{"name":"dataArea","nativeSrc":"51377:8:69","nodeType":"YulIdentifier","src":"51377:8:69"},{"arguments":[{"name":"len","nativeSrc":"51405:3:69","nodeType":"YulIdentifier","src":"51405:3:69"}],"functionName":{"name":"divide_by_32_ceil","nativeSrc":"51387:17:69","nodeType":"YulIdentifier","src":"51387:17:69"},"nativeSrc":"51387:22:69","nodeType":"YulFunctionCall","src":"51387:22:69"}],"functionName":{"name":"add","nativeSrc":"51373:3:69","nodeType":"YulIdentifier","src":"51373:3:69"},"nativeSrc":"51373:37:69","nodeType":"YulFunctionCall","src":"51373:37:69"}],"functionName":{"name":"clear_storage_range_t_bytes1","nativeSrc":"51331:28:69","nodeType":"YulIdentifier","src":"51331:28:69"},"nativeSrc":"51331:80:69","nodeType":"YulFunctionCall","src":"51331:80:69"},"nativeSrc":"51331:80:69","nodeType":"YulExpressionStatement","src":"51331:80:69"}]},"condition":{"arguments":[{"name":"len","nativeSrc":"50981:3:69","nodeType":"YulIdentifier","src":"50981:3:69"},{"kind":"number","nativeSrc":"50986:2:69","nodeType":"YulLiteral","src":"50986:2:69","type":"","value":"31"}],"functionName":{"name":"gt","nativeSrc":"50978:2:69","nodeType":"YulIdentifier","src":"50978:2:69"},"nativeSrc":"50978:11:69","nodeType":"YulFunctionCall","src":"50978:11:69"},"nativeSrc":"50975:446:69","nodeType":"YulIf","src":"50975:446:69"}]},"name":"clean_up_bytearray_end_slots_t_string_storage","nativeSrc":"50885:543:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nativeSrc":"50940:5:69","nodeType":"YulTypedName","src":"50940:5:69","type":""},{"name":"len","nativeSrc":"50947:3:69","nodeType":"YulTypedName","src":"50947:3:69","type":""},{"name":"startIndex","nativeSrc":"50952:10:69","nodeType":"YulTypedName","src":"50952:10:69","type":""}],"src":"50885:543:69"},{"body":{"nativeSrc":"51497:54:69","nodeType":"YulBlock","src":"51497:54:69","statements":[{"nativeSrc":"51507:37:69","nodeType":"YulAssignment","src":"51507:37:69","value":{"arguments":[{"name":"bits","nativeSrc":"51532:4:69","nodeType":"YulIdentifier","src":"51532:4:69"},{"name":"value","nativeSrc":"51538:5:69","nodeType":"YulIdentifier","src":"51538:5:69"}],"functionName":{"name":"shr","nativeSrc":"51528:3:69","nodeType":"YulIdentifier","src":"51528:3:69"},"nativeSrc":"51528:16:69","nodeType":"YulFunctionCall","src":"51528:16:69"},"variableNames":[{"name":"newValue","nativeSrc":"51507:8:69","nodeType":"YulIdentifier","src":"51507:8:69"}]}]},"name":"shift_right_unsigned_dynamic","nativeSrc":"51434:117:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"bits","nativeSrc":"51472:4:69","nodeType":"YulTypedName","src":"51472:4:69","type":""},{"name":"value","nativeSrc":"51478:5:69","nodeType":"YulTypedName","src":"51478:5:69","type":""}],"returnVariables":[{"name":"newValue","nativeSrc":"51488:8:69","nodeType":"YulTypedName","src":"51488:8:69","type":""}],"src":"51434:117:69"},{"body":{"nativeSrc":"51608:118:69","nodeType":"YulBlock","src":"51608:118:69","statements":[{"nativeSrc":"51618:68:69","nodeType":"YulVariableDeclaration","src":"51618:68:69","value":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"51667:1:69","nodeType":"YulLiteral","src":"51667:1:69","type":"","value":"8"},{"name":"bytes","nativeSrc":"51670:5:69","nodeType":"YulIdentifier","src":"51670:5:69"}],"functionName":{"name":"mul","nativeSrc":"51663:3:69","nodeType":"YulIdentifier","src":"51663:3:69"},"nativeSrc":"51663:13:69","nodeType":"YulFunctionCall","src":"51663:13:69"},{"arguments":[{"kind":"number","nativeSrc":"51682:1:69","nodeType":"YulLiteral","src":"51682:1:69","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"51678:3:69","nodeType":"YulIdentifier","src":"51678:3:69"},"nativeSrc":"51678:6:69","nodeType":"YulFunctionCall","src":"51678:6:69"}],"functionName":{"name":"shift_right_unsigned_dynamic","nativeSrc":"51634:28:69","nodeType":"YulIdentifier","src":"51634:28:69"},"nativeSrc":"51634:51:69","nodeType":"YulFunctionCall","src":"51634:51:69"}],"functionName":{"name":"not","nativeSrc":"51630:3:69","nodeType":"YulIdentifier","src":"51630:3:69"},"nativeSrc":"51630:56:69","nodeType":"YulFunctionCall","src":"51630:56:69"},"variables":[{"name":"mask","nativeSrc":"51622:4:69","nodeType":"YulTypedName","src":"51622:4:69","type":""}]},{"nativeSrc":"51695:25:69","nodeType":"YulAssignment","src":"51695:25:69","value":{"arguments":[{"name":"data","nativeSrc":"51709:4:69","nodeType":"YulIdentifier","src":"51709:4:69"},{"name":"mask","nativeSrc":"51715:4:69","nodeType":"YulIdentifier","src":"51715:4:69"}],"functionName":{"name":"and","nativeSrc":"51705:3:69","nodeType":"YulIdentifier","src":"51705:3:69"},"nativeSrc":"51705:15:69","nodeType":"YulFunctionCall","src":"51705:15:69"},"variableNames":[{"name":"result","nativeSrc":"51695:6:69","nodeType":"YulIdentifier","src":"51695:6:69"}]}]},"name":"mask_bytes_dynamic","nativeSrc":"51557:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nativeSrc":"51585:4:69","nodeType":"YulTypedName","src":"51585:4:69","type":""},{"name":"bytes","nativeSrc":"51591:5:69","nodeType":"YulTypedName","src":"51591:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"51601:6:69","nodeType":"YulTypedName","src":"51601:6:69","type":""}],"src":"51557:169:69"},{"body":{"nativeSrc":"51812:214:69","nodeType":"YulBlock","src":"51812:214:69","statements":[{"nativeSrc":"51945:37:69","nodeType":"YulAssignment","src":"51945:37:69","value":{"arguments":[{"name":"data","nativeSrc":"51972:4:69","nodeType":"YulIdentifier","src":"51972:4:69"},{"name":"len","nativeSrc":"51978:3:69","nodeType":"YulIdentifier","src":"51978:3:69"}],"functionName":{"name":"mask_bytes_dynamic","nativeSrc":"51953:18:69","nodeType":"YulIdentifier","src":"51953:18:69"},"nativeSrc":"51953:29:69","nodeType":"YulFunctionCall","src":"51953:29:69"},"variableNames":[{"name":"data","nativeSrc":"51945:4:69","nodeType":"YulIdentifier","src":"51945:4:69"}]},{"nativeSrc":"51991:29:69","nodeType":"YulAssignment","src":"51991:29:69","value":{"arguments":[{"name":"data","nativeSrc":"52002:4:69","nodeType":"YulIdentifier","src":"52002:4:69"},{"arguments":[{"kind":"number","nativeSrc":"52012:1:69","nodeType":"YulLiteral","src":"52012:1:69","type":"","value":"2"},{"name":"len","nativeSrc":"52015:3:69","nodeType":"YulIdentifier","src":"52015:3:69"}],"functionName":{"name":"mul","nativeSrc":"52008:3:69","nodeType":"YulIdentifier","src":"52008:3:69"},"nativeSrc":"52008:11:69","nodeType":"YulFunctionCall","src":"52008:11:69"}],"functionName":{"name":"or","nativeSrc":"51999:2:69","nodeType":"YulIdentifier","src":"51999:2:69"},"nativeSrc":"51999:21:69","nodeType":"YulFunctionCall","src":"51999:21:69"},"variableNames":[{"name":"used","nativeSrc":"51991:4:69","nodeType":"YulIdentifier","src":"51991:4:69"}]}]},"name":"extract_used_part_and_set_length_of_short_byte_array","nativeSrc":"51731:295:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nativeSrc":"51793:4:69","nodeType":"YulTypedName","src":"51793:4:69","type":""},{"name":"len","nativeSrc":"51799:3:69","nodeType":"YulTypedName","src":"51799:3:69","type":""}],"returnVariables":[{"name":"used","nativeSrc":"51807:4:69","nodeType":"YulTypedName","src":"51807:4:69","type":""}],"src":"51731:295:69"},{"body":{"nativeSrc":"52123:1303:69","nodeType":"YulBlock","src":"52123:1303:69","statements":[{"nativeSrc":"52134:51:69","nodeType":"YulVariableDeclaration","src":"52134:51:69","value":{"arguments":[{"name":"src","nativeSrc":"52181:3:69","nodeType":"YulIdentifier","src":"52181:3:69"}],"functionName":{"name":"array_length_t_string_memory_ptr","nativeSrc":"52148:32:69","nodeType":"YulIdentifier","src":"52148:32:69"},"nativeSrc":"52148:37:69","nodeType":"YulFunctionCall","src":"52148:37:69"},"variables":[{"name":"newLen","nativeSrc":"52138:6:69","nodeType":"YulTypedName","src":"52138:6:69","type":""}]},{"body":{"nativeSrc":"52270:22:69","nodeType":"YulBlock","src":"52270:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"52272:16:69","nodeType":"YulIdentifier","src":"52272:16:69"},"nativeSrc":"52272:18:69","nodeType":"YulFunctionCall","src":"52272:18:69"},"nativeSrc":"52272:18:69","nodeType":"YulExpressionStatement","src":"52272:18:69"}]},"condition":{"arguments":[{"name":"newLen","nativeSrc":"52242:6:69","nodeType":"YulIdentifier","src":"52242:6:69"},{"kind":"number","nativeSrc":"52250:18:69","nodeType":"YulLiteral","src":"52250:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"52239:2:69","nodeType":"YulIdentifier","src":"52239:2:69"},"nativeSrc":"52239:30:69","nodeType":"YulFunctionCall","src":"52239:30:69"},"nativeSrc":"52236:56:69","nodeType":"YulIf","src":"52236:56:69"},{"nativeSrc":"52302:52:69","nodeType":"YulVariableDeclaration","src":"52302:52:69","value":{"arguments":[{"arguments":[{"name":"slot","nativeSrc":"52348:4:69","nodeType":"YulIdentifier","src":"52348:4:69"}],"functionName":{"name":"sload","nativeSrc":"52342:5:69","nodeType":"YulIdentifier","src":"52342:5:69"},"nativeSrc":"52342:11:69","nodeType":"YulFunctionCall","src":"52342:11:69"}],"functionName":{"name":"extract_byte_array_length","nativeSrc":"52316:25:69","nodeType":"YulIdentifier","src":"52316:25:69"},"nativeSrc":"52316:38:69","nodeType":"YulFunctionCall","src":"52316:38:69"},"variables":[{"name":"oldLen","nativeSrc":"52306:6:69","nodeType":"YulTypedName","src":"52306:6:69","type":""}]},{"expression":{"arguments":[{"name":"slot","nativeSrc":"52447:4:69","nodeType":"YulIdentifier","src":"52447:4:69"},{"name":"oldLen","nativeSrc":"52453:6:69","nodeType":"YulIdentifier","src":"52453:6:69"},{"name":"newLen","nativeSrc":"52461:6:69","nodeType":"YulIdentifier","src":"52461:6:69"}],"functionName":{"name":"clean_up_bytearray_end_slots_t_string_storage","nativeSrc":"52401:45:69","nodeType":"YulIdentifier","src":"52401:45:69"},"nativeSrc":"52401:67:69","nodeType":"YulFunctionCall","src":"52401:67:69"},"nativeSrc":"52401:67:69","nodeType":"YulExpressionStatement","src":"52401:67:69"},{"nativeSrc":"52478:18:69","nodeType":"YulVariableDeclaration","src":"52478:18:69","value":{"kind":"number","nativeSrc":"52495:1:69","nodeType":"YulLiteral","src":"52495:1:69","type":"","value":"0"},"variables":[{"name":"srcOffset","nativeSrc":"52482:9:69","nodeType":"YulTypedName","src":"52482:9:69","type":""}]},{"nativeSrc":"52506:17:69","nodeType":"YulAssignment","src":"52506:17:69","value":{"kind":"number","nativeSrc":"52519:4:69","nodeType":"YulLiteral","src":"52519:4:69","type":"","value":"0x20"},"variableNames":[{"name":"srcOffset","nativeSrc":"52506:9:69","nodeType":"YulIdentifier","src":"52506:9:69"}]},{"cases":[{"body":{"nativeSrc":"52570:611:69","nodeType":"YulBlock","src":"52570:611:69","statements":[{"nativeSrc":"52584:37:69","nodeType":"YulVariableDeclaration","src":"52584:37:69","value":{"arguments":[{"name":"newLen","nativeSrc":"52603:6:69","nodeType":"YulIdentifier","src":"52603:6:69"},{"arguments":[{"kind":"number","nativeSrc":"52615:4:69","nodeType":"YulLiteral","src":"52615:4:69","type":"","value":"0x1f"}],"functionName":{"name":"not","nativeSrc":"52611:3:69","nodeType":"YulIdentifier","src":"52611:3:69"},"nativeSrc":"52611:9:69","nodeType":"YulFunctionCall","src":"52611:9:69"}],"functionName":{"name":"and","nativeSrc":"52599:3:69","nodeType":"YulIdentifier","src":"52599:3:69"},"nativeSrc":"52599:22:69","nodeType":"YulFunctionCall","src":"52599:22:69"},"variables":[{"name":"loopEnd","nativeSrc":"52588:7:69","nodeType":"YulTypedName","src":"52588:7:69","type":""}]},{"nativeSrc":"52635:51:69","nodeType":"YulVariableDeclaration","src":"52635:51:69","value":{"arguments":[{"name":"slot","nativeSrc":"52681:4:69","nodeType":"YulIdentifier","src":"52681:4:69"}],"functionName":{"name":"array_dataslot_t_string_storage","nativeSrc":"52649:31:69","nodeType":"YulIdentifier","src":"52649:31:69"},"nativeSrc":"52649:37:69","nodeType":"YulFunctionCall","src":"52649:37:69"},"variables":[{"name":"dstPtr","nativeSrc":"52639:6:69","nodeType":"YulTypedName","src":"52639:6:69","type":""}]},{"nativeSrc":"52699:10:69","nodeType":"YulVariableDeclaration","src":"52699:10:69","value":{"kind":"number","nativeSrc":"52708:1:69","nodeType":"YulLiteral","src":"52708:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"52703:1:69","nodeType":"YulTypedName","src":"52703:1:69","type":""}]},{"body":{"nativeSrc":"52767:163:69","nodeType":"YulBlock","src":"52767:163:69","statements":[{"expression":{"arguments":[{"name":"dstPtr","nativeSrc":"52792:6:69","nodeType":"YulIdentifier","src":"52792:6:69"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"52810:3:69","nodeType":"YulIdentifier","src":"52810:3:69"},{"name":"srcOffset","nativeSrc":"52815:9:69","nodeType":"YulIdentifier","src":"52815:9:69"}],"functionName":{"name":"add","nativeSrc":"52806:3:69","nodeType":"YulIdentifier","src":"52806:3:69"},"nativeSrc":"52806:19:69","nodeType":"YulFunctionCall","src":"52806:19:69"}],"functionName":{"name":"mload","nativeSrc":"52800:5:69","nodeType":"YulIdentifier","src":"52800:5:69"},"nativeSrc":"52800:26:69","nodeType":"YulFunctionCall","src":"52800:26:69"}],"functionName":{"name":"sstore","nativeSrc":"52785:6:69","nodeType":"YulIdentifier","src":"52785:6:69"},"nativeSrc":"52785:42:69","nodeType":"YulFunctionCall","src":"52785:42:69"},"nativeSrc":"52785:42:69","nodeType":"YulExpressionStatement","src":"52785:42:69"},{"nativeSrc":"52844:24:69","nodeType":"YulAssignment","src":"52844:24:69","value":{"arguments":[{"name":"dstPtr","nativeSrc":"52858:6:69","nodeType":"YulIdentifier","src":"52858:6:69"},{"kind":"number","nativeSrc":"52866:1:69","nodeType":"YulLiteral","src":"52866:1:69","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"52854:3:69","nodeType":"YulIdentifier","src":"52854:3:69"},"nativeSrc":"52854:14:69","nodeType":"YulFunctionCall","src":"52854:14:69"},"variableNames":[{"name":"dstPtr","nativeSrc":"52844:6:69","nodeType":"YulIdentifier","src":"52844:6:69"}]},{"nativeSrc":"52885:31:69","nodeType":"YulAssignment","src":"52885:31:69","value":{"arguments":[{"name":"srcOffset","nativeSrc":"52902:9:69","nodeType":"YulIdentifier","src":"52902:9:69"},{"kind":"number","nativeSrc":"52913:2:69","nodeType":"YulLiteral","src":"52913:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"52898:3:69","nodeType":"YulIdentifier","src":"52898:3:69"},"nativeSrc":"52898:18:69","nodeType":"YulFunctionCall","src":"52898:18:69"},"variableNames":[{"name":"srcOffset","nativeSrc":"52885:9:69","nodeType":"YulIdentifier","src":"52885:9:69"}]}]},"condition":{"arguments":[{"name":"i","nativeSrc":"52733:1:69","nodeType":"YulIdentifier","src":"52733:1:69"},{"name":"loopEnd","nativeSrc":"52736:7:69","nodeType":"YulIdentifier","src":"52736:7:69"}],"functionName":{"name":"lt","nativeSrc":"52730:2:69","nodeType":"YulIdentifier","src":"52730:2:69"},"nativeSrc":"52730:14:69","nodeType":"YulFunctionCall","src":"52730:14:69"},"nativeSrc":"52722:208:69","nodeType":"YulForLoop","post":{"nativeSrc":"52745:21:69","nodeType":"YulBlock","src":"52745:21:69","statements":[{"nativeSrc":"52747:17:69","nodeType":"YulAssignment","src":"52747:17:69","value":{"arguments":[{"name":"i","nativeSrc":"52756:1:69","nodeType":"YulIdentifier","src":"52756:1:69"},{"kind":"number","nativeSrc":"52759:4:69","nodeType":"YulLiteral","src":"52759:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"52752:3:69","nodeType":"YulIdentifier","src":"52752:3:69"},"nativeSrc":"52752:12:69","nodeType":"YulFunctionCall","src":"52752:12:69"},"variableNames":[{"name":"i","nativeSrc":"52747:1:69","nodeType":"YulIdentifier","src":"52747:1:69"}]}]},"pre":{"nativeSrc":"52726:3:69","nodeType":"YulBlock","src":"52726:3:69","statements":[]},"src":"52722:208:69"},{"body":{"nativeSrc":"52966:156:69","nodeType":"YulBlock","src":"52966:156:69","statements":[{"nativeSrc":"52984:43:69","nodeType":"YulVariableDeclaration","src":"52984:43:69","value":{"arguments":[{"arguments":[{"name":"src","nativeSrc":"53011:3:69","nodeType":"YulIdentifier","src":"53011:3:69"},{"name":"srcOffset","nativeSrc":"53016:9:69","nodeType":"YulIdentifier","src":"53016:9:69"}],"functionName":{"name":"add","nativeSrc":"53007:3:69","nodeType":"YulIdentifier","src":"53007:3:69"},"nativeSrc":"53007:19:69","nodeType":"YulFunctionCall","src":"53007:19:69"}],"functionName":{"name":"mload","nativeSrc":"53001:5:69","nodeType":"YulIdentifier","src":"53001:5:69"},"nativeSrc":"53001:26:69","nodeType":"YulFunctionCall","src":"53001:26:69"},"variables":[{"name":"lastValue","nativeSrc":"52988:9:69","nodeType":"YulTypedName","src":"52988:9:69","type":""}]},{"expression":{"arguments":[{"name":"dstPtr","nativeSrc":"53051:6:69","nodeType":"YulIdentifier","src":"53051:6:69"},{"arguments":[{"name":"lastValue","nativeSrc":"53078:9:69","nodeType":"YulIdentifier","src":"53078:9:69"},{"arguments":[{"name":"newLen","nativeSrc":"53093:6:69","nodeType":"YulIdentifier","src":"53093:6:69"},{"kind":"number","nativeSrc":"53101:4:69","nodeType":"YulLiteral","src":"53101:4:69","type":"","value":"0x1f"}],"functionName":{"name":"and","nativeSrc":"53089:3:69","nodeType":"YulIdentifier","src":"53089:3:69"},"nativeSrc":"53089:17:69","nodeType":"YulFunctionCall","src":"53089:17:69"}],"functionName":{"name":"mask_bytes_dynamic","nativeSrc":"53059:18:69","nodeType":"YulIdentifier","src":"53059:18:69"},"nativeSrc":"53059:48:69","nodeType":"YulFunctionCall","src":"53059:48:69"}],"functionName":{"name":"sstore","nativeSrc":"53044:6:69","nodeType":"YulIdentifier","src":"53044:6:69"},"nativeSrc":"53044:64:69","nodeType":"YulFunctionCall","src":"53044:64:69"},"nativeSrc":"53044:64:69","nodeType":"YulExpressionStatement","src":"53044:64:69"}]},"condition":{"arguments":[{"name":"loopEnd","nativeSrc":"52949:7:69","nodeType":"YulIdentifier","src":"52949:7:69"},{"name":"newLen","nativeSrc":"52958:6:69","nodeType":"YulIdentifier","src":"52958:6:69"}],"functionName":{"name":"lt","nativeSrc":"52946:2:69","nodeType":"YulIdentifier","src":"52946:2:69"},"nativeSrc":"52946:19:69","nodeType":"YulFunctionCall","src":"52946:19:69"},"nativeSrc":"52943:179:69","nodeType":"YulIf","src":"52943:179:69"},{"expression":{"arguments":[{"name":"slot","nativeSrc":"53142:4:69","nodeType":"YulIdentifier","src":"53142:4:69"},{"arguments":[{"arguments":[{"name":"newLen","nativeSrc":"53156:6:69","nodeType":"YulIdentifier","src":"53156:6:69"},{"kind":"number","nativeSrc":"53164:1:69","nodeType":"YulLiteral","src":"53164:1:69","type":"","value":"2"}],"functionName":{"name":"mul","nativeSrc":"53152:3:69","nodeType":"YulIdentifier","src":"53152:3:69"},"nativeSrc":"53152:14:69","nodeType":"YulFunctionCall","src":"53152:14:69"},{"kind":"number","nativeSrc":"53168:1:69","nodeType":"YulLiteral","src":"53168:1:69","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"53148:3:69","nodeType":"YulIdentifier","src":"53148:3:69"},"nativeSrc":"53148:22:69","nodeType":"YulFunctionCall","src":"53148:22:69"}],"functionName":{"name":"sstore","nativeSrc":"53135:6:69","nodeType":"YulIdentifier","src":"53135:6:69"},"nativeSrc":"53135:36:69","nodeType":"YulFunctionCall","src":"53135:36:69"},"nativeSrc":"53135:36:69","nodeType":"YulExpressionStatement","src":"53135:36:69"}]},"nativeSrc":"52563:618:69","nodeType":"YulCase","src":"52563:618:69","value":{"kind":"number","nativeSrc":"52568:1:69","nodeType":"YulLiteral","src":"52568:1:69","type":"","value":"1"}},{"body":{"nativeSrc":"53198:222:69","nodeType":"YulBlock","src":"53198:222:69","statements":[{"nativeSrc":"53212:14:69","nodeType":"YulVariableDeclaration","src":"53212:14:69","value":{"kind":"number","nativeSrc":"53225:1:69","nodeType":"YulLiteral","src":"53225:1:69","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"53216:5:69","nodeType":"YulTypedName","src":"53216:5:69","type":""}]},{"body":{"nativeSrc":"53249:67:69","nodeType":"YulBlock","src":"53249:67:69","statements":[{"nativeSrc":"53267:35:69","nodeType":"YulAssignment","src":"53267:35:69","value":{"arguments":[{"arguments":[{"name":"src","nativeSrc":"53286:3:69","nodeType":"YulIdentifier","src":"53286:3:69"},{"name":"srcOffset","nativeSrc":"53291:9:69","nodeType":"YulIdentifier","src":"53291:9:69"}],"functionName":{"name":"add","nativeSrc":"53282:3:69","nodeType":"YulIdentifier","src":"53282:3:69"},"nativeSrc":"53282:19:69","nodeType":"YulFunctionCall","src":"53282:19:69"}],"functionName":{"name":"mload","nativeSrc":"53276:5:69","nodeType":"YulIdentifier","src":"53276:5:69"},"nativeSrc":"53276:26:69","nodeType":"YulFunctionCall","src":"53276:26:69"},"variableNames":[{"name":"value","nativeSrc":"53267:5:69","nodeType":"YulIdentifier","src":"53267:5:69"}]}]},"condition":{"name":"newLen","nativeSrc":"53242:6:69","nodeType":"YulIdentifier","src":"53242:6:69"},"nativeSrc":"53239:77:69","nodeType":"YulIf","src":"53239:77:69"},{"expression":{"arguments":[{"name":"slot","nativeSrc":"53336:4:69","nodeType":"YulIdentifier","src":"53336:4:69"},{"arguments":[{"name":"value","nativeSrc":"53395:5:69","nodeType":"YulIdentifier","src":"53395:5:69"},{"name":"newLen","nativeSrc":"53402:6:69","nodeType":"YulIdentifier","src":"53402:6:69"}],"functionName":{"name":"extract_used_part_and_set_length_of_short_byte_array","nativeSrc":"53342:52:69","nodeType":"YulIdentifier","src":"53342:52:69"},"nativeSrc":"53342:67:69","nodeType":"YulFunctionCall","src":"53342:67:69"}],"functionName":{"name":"sstore","nativeSrc":"53329:6:69","nodeType":"YulIdentifier","src":"53329:6:69"},"nativeSrc":"53329:81:69","nodeType":"YulFunctionCall","src":"53329:81:69"},"nativeSrc":"53329:81:69","nodeType":"YulExpressionStatement","src":"53329:81:69"}]},"nativeSrc":"53190:230:69","nodeType":"YulCase","src":"53190:230:69","value":"default"}],"expression":{"arguments":[{"name":"newLen","nativeSrc":"52543:6:69","nodeType":"YulIdentifier","src":"52543:6:69"},{"kind":"number","nativeSrc":"52551:2:69","nodeType":"YulLiteral","src":"52551:2:69","type":"","value":"31"}],"functionName":{"name":"gt","nativeSrc":"52540:2:69","nodeType":"YulIdentifier","src":"52540:2:69"},"nativeSrc":"52540:14:69","nodeType":"YulFunctionCall","src":"52540:14:69"},"nativeSrc":"52533:887:69","nodeType":"YulSwitch","src":"52533:887:69"}]},"name":"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage","nativeSrc":"52031:1395:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nativeSrc":"52112:4:69","nodeType":"YulTypedName","src":"52112:4:69","type":""},{"name":"src","nativeSrc":"52118:3:69","nodeType":"YulTypedName","src":"52118:3:69","type":""}],"src":"52031:1395:69"},{"body":{"nativeSrc":"53538:72:69","nodeType":"YulBlock","src":"53538:72:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"53560:6:69","nodeType":"YulIdentifier","src":"53560:6:69"},{"kind":"number","nativeSrc":"53568:1:69","nodeType":"YulLiteral","src":"53568:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"53556:3:69","nodeType":"YulIdentifier","src":"53556:3:69"},"nativeSrc":"53556:14:69","nodeType":"YulFunctionCall","src":"53556:14:69"},{"hexValue":"6d61726b6572206d6574686f642072657475726e65642066616c7365","kind":"string","nativeSrc":"53572:30:69","nodeType":"YulLiteral","src":"53572:30:69","type":"","value":"marker method returned false"}],"functionName":{"name":"mstore","nativeSrc":"53549:6:69","nodeType":"YulIdentifier","src":"53549:6:69"},"nativeSrc":"53549:54:69","nodeType":"YulFunctionCall","src":"53549:54:69"},"nativeSrc":"53549:54:69","nodeType":"YulExpressionStatement","src":"53549:54:69"}]},"name":"store_literal_in_memory_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637","nativeSrc":"53432:178:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"53530:6:69","nodeType":"YulTypedName","src":"53530:6:69","type":""}],"src":"53432:178:69"},{"body":{"nativeSrc":"53762:220:69","nodeType":"YulBlock","src":"53762:220:69","statements":[{"nativeSrc":"53772:74:69","nodeType":"YulAssignment","src":"53772:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"53838:3:69","nodeType":"YulIdentifier","src":"53838:3:69"},{"kind":"number","nativeSrc":"53843:2:69","nodeType":"YulLiteral","src":"53843:2:69","type":"","value":"28"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"53779:58:69","nodeType":"YulIdentifier","src":"53779:58:69"},"nativeSrc":"53779:67:69","nodeType":"YulFunctionCall","src":"53779:67:69"},"variableNames":[{"name":"pos","nativeSrc":"53772:3:69","nodeType":"YulIdentifier","src":"53772:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"53944:3:69","nodeType":"YulIdentifier","src":"53944:3:69"}],"functionName":{"name":"store_literal_in_memory_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637","nativeSrc":"53855:88:69","nodeType":"YulIdentifier","src":"53855:88:69"},"nativeSrc":"53855:93:69","nodeType":"YulFunctionCall","src":"53855:93:69"},"nativeSrc":"53855:93:69","nodeType":"YulExpressionStatement","src":"53855:93:69"},{"nativeSrc":"53957:19:69","nodeType":"YulAssignment","src":"53957:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"53968:3:69","nodeType":"YulIdentifier","src":"53968:3:69"},{"kind":"number","nativeSrc":"53973:2:69","nodeType":"YulLiteral","src":"53973:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"53964:3:69","nodeType":"YulIdentifier","src":"53964:3:69"},"nativeSrc":"53964:12:69","nodeType":"YulFunctionCall","src":"53964:12:69"},"variableNames":[{"name":"end","nativeSrc":"53957:3:69","nodeType":"YulIdentifier","src":"53957:3:69"}]}]},"name":"abi_encode_t_stringliteral_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637_to_t_string_memory_ptr_fromStack","nativeSrc":"53616:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"53750:3:69","nodeType":"YulTypedName","src":"53750:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"53758:3:69","nodeType":"YulTypedName","src":"53758:3:69","type":""}],"src":"53616:366:69"},{"body":{"nativeSrc":"54159:248:69","nodeType":"YulBlock","src":"54159:248:69","statements":[{"nativeSrc":"54169:26:69","nodeType":"YulAssignment","src":"54169:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"54181:9:69","nodeType":"YulIdentifier","src":"54181:9:69"},{"kind":"number","nativeSrc":"54192:2:69","nodeType":"YulLiteral","src":"54192:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"54177:3:69","nodeType":"YulIdentifier","src":"54177:3:69"},"nativeSrc":"54177:18:69","nodeType":"YulFunctionCall","src":"54177:18:69"},"variableNames":[{"name":"tail","nativeSrc":"54169:4:69","nodeType":"YulIdentifier","src":"54169:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"54216:9:69","nodeType":"YulIdentifier","src":"54216:9:69"},{"kind":"number","nativeSrc":"54227:1:69","nodeType":"YulLiteral","src":"54227:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"54212:3:69","nodeType":"YulIdentifier","src":"54212:3:69"},"nativeSrc":"54212:17:69","nodeType":"YulFunctionCall","src":"54212:17:69"},{"arguments":[{"name":"tail","nativeSrc":"54235:4:69","nodeType":"YulIdentifier","src":"54235:4:69"},{"name":"headStart","nativeSrc":"54241:9:69","nodeType":"YulIdentifier","src":"54241:9:69"}],"functionName":{"name":"sub","nativeSrc":"54231:3:69","nodeType":"YulIdentifier","src":"54231:3:69"},"nativeSrc":"54231:20:69","nodeType":"YulFunctionCall","src":"54231:20:69"}],"functionName":{"name":"mstore","nativeSrc":"54205:6:69","nodeType":"YulIdentifier","src":"54205:6:69"},"nativeSrc":"54205:47:69","nodeType":"YulFunctionCall","src":"54205:47:69"},"nativeSrc":"54205:47:69","nodeType":"YulExpressionStatement","src":"54205:47:69"},{"nativeSrc":"54261:139:69","nodeType":"YulAssignment","src":"54261:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"54395:4:69","nodeType":"YulIdentifier","src":"54395:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637_to_t_string_memory_ptr_fromStack","nativeSrc":"54269:124:69","nodeType":"YulIdentifier","src":"54269:124:69"},"nativeSrc":"54269:131:69","nodeType":"YulFunctionCall","src":"54269:131:69"},"variableNames":[{"name":"tail","nativeSrc":"54261:4:69","nodeType":"YulIdentifier","src":"54261:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"53988:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"54139:9:69","nodeType":"YulTypedName","src":"54139:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"54154:4:69","nodeType":"YulTypedName","src":"54154:4:69","type":""}],"src":"53988:419:69"},{"body":{"nativeSrc":"54595:371:69","nodeType":"YulBlock","src":"54595:371:69","statements":[{"nativeSrc":"54605:27:69","nodeType":"YulAssignment","src":"54605:27:69","value":{"arguments":[{"name":"headStart","nativeSrc":"54617:9:69","nodeType":"YulIdentifier","src":"54617:9:69"},{"kind":"number","nativeSrc":"54628:3:69","nodeType":"YulLiteral","src":"54628:3:69","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"54613:3:69","nodeType":"YulIdentifier","src":"54613:3:69"},"nativeSrc":"54613:19:69","nodeType":"YulFunctionCall","src":"54613:19:69"},"variableNames":[{"name":"tail","nativeSrc":"54605:4:69","nodeType":"YulIdentifier","src":"54605:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"54686:6:69","nodeType":"YulIdentifier","src":"54686:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"54699:9:69","nodeType":"YulIdentifier","src":"54699:9:69"},{"kind":"number","nativeSrc":"54710:1:69","nodeType":"YulLiteral","src":"54710:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"54695:3:69","nodeType":"YulIdentifier","src":"54695:3:69"},"nativeSrc":"54695:17:69","nodeType":"YulFunctionCall","src":"54695:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"54642:43:69","nodeType":"YulIdentifier","src":"54642:43:69"},"nativeSrc":"54642:71:69","nodeType":"YulFunctionCall","src":"54642:71:69"},"nativeSrc":"54642:71:69","nodeType":"YulExpressionStatement","src":"54642:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"54767:6:69","nodeType":"YulIdentifier","src":"54767:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"54780:9:69","nodeType":"YulIdentifier","src":"54780:9:69"},{"kind":"number","nativeSrc":"54791:2:69","nodeType":"YulLiteral","src":"54791:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"54776:3:69","nodeType":"YulIdentifier","src":"54776:3:69"},"nativeSrc":"54776:18:69","nodeType":"YulFunctionCall","src":"54776:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"54723:43:69","nodeType":"YulIdentifier","src":"54723:43:69"},"nativeSrc":"54723:72:69","nodeType":"YulFunctionCall","src":"54723:72:69"},"nativeSrc":"54723:72:69","nodeType":"YulExpressionStatement","src":"54723:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"54849:6:69","nodeType":"YulIdentifier","src":"54849:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"54862:9:69","nodeType":"YulIdentifier","src":"54862:9:69"},{"kind":"number","nativeSrc":"54873:2:69","nodeType":"YulLiteral","src":"54873:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"54858:3:69","nodeType":"YulIdentifier","src":"54858:3:69"},"nativeSrc":"54858:18:69","nodeType":"YulFunctionCall","src":"54858:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"54805:43:69","nodeType":"YulIdentifier","src":"54805:43:69"},"nativeSrc":"54805:72:69","nodeType":"YulFunctionCall","src":"54805:72:69"},"nativeSrc":"54805:72:69","nodeType":"YulExpressionStatement","src":"54805:72:69"},{"expression":{"arguments":[{"name":"value3","nativeSrc":"54931:6:69","nodeType":"YulIdentifier","src":"54931:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"54944:9:69","nodeType":"YulIdentifier","src":"54944:9:69"},{"kind":"number","nativeSrc":"54955:2:69","nodeType":"YulLiteral","src":"54955:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"54940:3:69","nodeType":"YulIdentifier","src":"54940:3:69"},"nativeSrc":"54940:18:69","nodeType":"YulFunctionCall","src":"54940:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"54887:43:69","nodeType":"YulIdentifier","src":"54887:43:69"},"nativeSrc":"54887:72:69","nodeType":"YulFunctionCall","src":"54887:72:69"},"nativeSrc":"54887:72:69","nodeType":"YulExpressionStatement","src":"54887:72:69"}]},"name":"abi_encode_tuple_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address__fromStack_reversed","nativeSrc":"54413:553:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"54543:9:69","nodeType":"YulTypedName","src":"54543:9:69","type":""},{"name":"value3","nativeSrc":"54555:6:69","nodeType":"YulTypedName","src":"54555:6:69","type":""},{"name":"value2","nativeSrc":"54563:6:69","nodeType":"YulTypedName","src":"54563:6:69","type":""},{"name":"value1","nativeSrc":"54571:6:69","nodeType":"YulTypedName","src":"54571:6:69","type":""},{"name":"value0","nativeSrc":"54579:6:69","nodeType":"YulTypedName","src":"54579:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"54590:4:69","nodeType":"YulTypedName","src":"54590:4:69","type":""}],"src":"54413:553:69"},{"body":{"nativeSrc":"55182:454:69","nodeType":"YulBlock","src":"55182:454:69","statements":[{"nativeSrc":"55192:27:69","nodeType":"YulAssignment","src":"55192:27:69","value":{"arguments":[{"name":"headStart","nativeSrc":"55204:9:69","nodeType":"YulIdentifier","src":"55204:9:69"},{"kind":"number","nativeSrc":"55215:3:69","nodeType":"YulLiteral","src":"55215:3:69","type":"","value":"160"}],"functionName":{"name":"add","nativeSrc":"55200:3:69","nodeType":"YulIdentifier","src":"55200:3:69"},"nativeSrc":"55200:19:69","nodeType":"YulFunctionCall","src":"55200:19:69"},"variableNames":[{"name":"tail","nativeSrc":"55192:4:69","nodeType":"YulIdentifier","src":"55192:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"55273:6:69","nodeType":"YulIdentifier","src":"55273:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"55286:9:69","nodeType":"YulIdentifier","src":"55286:9:69"},{"kind":"number","nativeSrc":"55297:1:69","nodeType":"YulLiteral","src":"55297:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"55282:3:69","nodeType":"YulIdentifier","src":"55282:3:69"},"nativeSrc":"55282:17:69","nodeType":"YulFunctionCall","src":"55282:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"55229:43:69","nodeType":"YulIdentifier","src":"55229:43:69"},"nativeSrc":"55229:71:69","nodeType":"YulFunctionCall","src":"55229:71:69"},"nativeSrc":"55229:71:69","nodeType":"YulExpressionStatement","src":"55229:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"55354:6:69","nodeType":"YulIdentifier","src":"55354:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"55367:9:69","nodeType":"YulIdentifier","src":"55367:9:69"},{"kind":"number","nativeSrc":"55378:2:69","nodeType":"YulLiteral","src":"55378:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"55363:3:69","nodeType":"YulIdentifier","src":"55363:3:69"},"nativeSrc":"55363:18:69","nodeType":"YulFunctionCall","src":"55363:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"55310:43:69","nodeType":"YulIdentifier","src":"55310:43:69"},"nativeSrc":"55310:72:69","nodeType":"YulFunctionCall","src":"55310:72:69"},"nativeSrc":"55310:72:69","nodeType":"YulExpressionStatement","src":"55310:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"55436:6:69","nodeType":"YulIdentifier","src":"55436:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"55449:9:69","nodeType":"YulIdentifier","src":"55449:9:69"},{"kind":"number","nativeSrc":"55460:2:69","nodeType":"YulLiteral","src":"55460:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"55445:3:69","nodeType":"YulIdentifier","src":"55445:3:69"},"nativeSrc":"55445:18:69","nodeType":"YulFunctionCall","src":"55445:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"55392:43:69","nodeType":"YulIdentifier","src":"55392:43:69"},"nativeSrc":"55392:72:69","nodeType":"YulFunctionCall","src":"55392:72:69"},"nativeSrc":"55392:72:69","nodeType":"YulExpressionStatement","src":"55392:72:69"},{"expression":{"arguments":[{"name":"value3","nativeSrc":"55518:6:69","nodeType":"YulIdentifier","src":"55518:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"55531:9:69","nodeType":"YulIdentifier","src":"55531:9:69"},{"kind":"number","nativeSrc":"55542:2:69","nodeType":"YulLiteral","src":"55542:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"55527:3:69","nodeType":"YulIdentifier","src":"55527:3:69"},"nativeSrc":"55527:18:69","nodeType":"YulFunctionCall","src":"55527:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"55474:43:69","nodeType":"YulIdentifier","src":"55474:43:69"},"nativeSrc":"55474:72:69","nodeType":"YulFunctionCall","src":"55474:72:69"},"nativeSrc":"55474:72:69","nodeType":"YulExpressionStatement","src":"55474:72:69"},{"expression":{"arguments":[{"name":"value4","nativeSrc":"55600:6:69","nodeType":"YulIdentifier","src":"55600:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"55613:9:69","nodeType":"YulIdentifier","src":"55613:9:69"},{"kind":"number","nativeSrc":"55624:3:69","nodeType":"YulLiteral","src":"55624:3:69","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"55609:3:69","nodeType":"YulIdentifier","src":"55609:3:69"},"nativeSrc":"55609:19:69","nodeType":"YulFunctionCall","src":"55609:19:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"55556:43:69","nodeType":"YulIdentifier","src":"55556:43:69"},"nativeSrc":"55556:73:69","nodeType":"YulFunctionCall","src":"55556:73:69"},"nativeSrc":"55556:73:69","nodeType":"YulExpressionStatement","src":"55556:73:69"}]},"name":"abi_encode_tuple_t_address_t_address_t_address_t_address_t_uint256__to_t_address_t_address_t_address_t_address_t_uint256__fromStack_reversed","nativeSrc":"54972:664:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"55122:9:69","nodeType":"YulTypedName","src":"55122:9:69","type":""},{"name":"value4","nativeSrc":"55134:6:69","nodeType":"YulTypedName","src":"55134:6:69","type":""},{"name":"value3","nativeSrc":"55142:6:69","nodeType":"YulTypedName","src":"55142:6:69","type":""},{"name":"value2","nativeSrc":"55150:6:69","nodeType":"YulTypedName","src":"55150:6:69","type":""},{"name":"value1","nativeSrc":"55158:6:69","nodeType":"YulTypedName","src":"55158:6:69","type":""},{"name":"value0","nativeSrc":"55166:6:69","nodeType":"YulTypedName","src":"55166:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"55177:4:69","nodeType":"YulTypedName","src":"55177:4:69","type":""}],"src":"54972:664:69"},{"body":{"nativeSrc":"55748:123:69","nodeType":"YulBlock","src":"55748:123:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"55770:6:69","nodeType":"YulIdentifier","src":"55770:6:69"},{"kind":"number","nativeSrc":"55778:1:69","nodeType":"YulLiteral","src":"55778:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"55766:3:69","nodeType":"YulIdentifier","src":"55766:3:69"},"nativeSrc":"55766:14:69","nodeType":"YulFunctionCall","src":"55766:14:69"},{"hexValue":"5361666545524332303a204552433230206f7065726174696f6e20646964206e","kind":"string","nativeSrc":"55782:34:69","nodeType":"YulLiteral","src":"55782:34:69","type":"","value":"SafeERC20: ERC20 operation did n"}],"functionName":{"name":"mstore","nativeSrc":"55759:6:69","nodeType":"YulIdentifier","src":"55759:6:69"},"nativeSrc":"55759:58:69","nodeType":"YulFunctionCall","src":"55759:58:69"},"nativeSrc":"55759:58:69","nodeType":"YulExpressionStatement","src":"55759:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"55838:6:69","nodeType":"YulIdentifier","src":"55838:6:69"},{"kind":"number","nativeSrc":"55846:2:69","nodeType":"YulLiteral","src":"55846:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"55834:3:69","nodeType":"YulIdentifier","src":"55834:3:69"},"nativeSrc":"55834:15:69","nodeType":"YulFunctionCall","src":"55834:15:69"},{"hexValue":"6f742073756363656564","kind":"string","nativeSrc":"55851:12:69","nodeType":"YulLiteral","src":"55851:12:69","type":"","value":"ot succeed"}],"functionName":{"name":"mstore","nativeSrc":"55827:6:69","nodeType":"YulIdentifier","src":"55827:6:69"},"nativeSrc":"55827:37:69","nodeType":"YulFunctionCall","src":"55827:37:69"},"nativeSrc":"55827:37:69","nodeType":"YulExpressionStatement","src":"55827:37:69"}]},"name":"store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd","nativeSrc":"55642:229:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"55740:6:69","nodeType":"YulTypedName","src":"55740:6:69","type":""}],"src":"55642:229:69"},{"body":{"nativeSrc":"56023:220:69","nodeType":"YulBlock","src":"56023:220:69","statements":[{"nativeSrc":"56033:74:69","nodeType":"YulAssignment","src":"56033:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"56099:3:69","nodeType":"YulIdentifier","src":"56099:3:69"},{"kind":"number","nativeSrc":"56104:2:69","nodeType":"YulLiteral","src":"56104:2:69","type":"","value":"42"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"56040:58:69","nodeType":"YulIdentifier","src":"56040:58:69"},"nativeSrc":"56040:67:69","nodeType":"YulFunctionCall","src":"56040:67:69"},"variableNames":[{"name":"pos","nativeSrc":"56033:3:69","nodeType":"YulIdentifier","src":"56033:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"56205:3:69","nodeType":"YulIdentifier","src":"56205:3:69"}],"functionName":{"name":"store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd","nativeSrc":"56116:88:69","nodeType":"YulIdentifier","src":"56116:88:69"},"nativeSrc":"56116:93:69","nodeType":"YulFunctionCall","src":"56116:93:69"},"nativeSrc":"56116:93:69","nodeType":"YulExpressionStatement","src":"56116:93:69"},{"nativeSrc":"56218:19:69","nodeType":"YulAssignment","src":"56218:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"56229:3:69","nodeType":"YulIdentifier","src":"56229:3:69"},{"kind":"number","nativeSrc":"56234:2:69","nodeType":"YulLiteral","src":"56234:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"56225:3:69","nodeType":"YulIdentifier","src":"56225:3:69"},"nativeSrc":"56225:12:69","nodeType":"YulFunctionCall","src":"56225:12:69"},"variableNames":[{"name":"end","nativeSrc":"56218:3:69","nodeType":"YulIdentifier","src":"56218:3:69"}]}]},"name":"abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack","nativeSrc":"55877:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"56011:3:69","nodeType":"YulTypedName","src":"56011:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"56019:3:69","nodeType":"YulTypedName","src":"56019:3:69","type":""}],"src":"55877:366:69"},{"body":{"nativeSrc":"56420:248:69","nodeType":"YulBlock","src":"56420:248:69","statements":[{"nativeSrc":"56430:26:69","nodeType":"YulAssignment","src":"56430:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"56442:9:69","nodeType":"YulIdentifier","src":"56442:9:69"},{"kind":"number","nativeSrc":"56453:2:69","nodeType":"YulLiteral","src":"56453:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"56438:3:69","nodeType":"YulIdentifier","src":"56438:3:69"},"nativeSrc":"56438:18:69","nodeType":"YulFunctionCall","src":"56438:18:69"},"variableNames":[{"name":"tail","nativeSrc":"56430:4:69","nodeType":"YulIdentifier","src":"56430:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"56477:9:69","nodeType":"YulIdentifier","src":"56477:9:69"},{"kind":"number","nativeSrc":"56488:1:69","nodeType":"YulLiteral","src":"56488:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"56473:3:69","nodeType":"YulIdentifier","src":"56473:3:69"},"nativeSrc":"56473:17:69","nodeType":"YulFunctionCall","src":"56473:17:69"},{"arguments":[{"name":"tail","nativeSrc":"56496:4:69","nodeType":"YulIdentifier","src":"56496:4:69"},{"name":"headStart","nativeSrc":"56502:9:69","nodeType":"YulIdentifier","src":"56502:9:69"}],"functionName":{"name":"sub","nativeSrc":"56492:3:69","nodeType":"YulIdentifier","src":"56492:3:69"},"nativeSrc":"56492:20:69","nodeType":"YulFunctionCall","src":"56492:20:69"}],"functionName":{"name":"mstore","nativeSrc":"56466:6:69","nodeType":"YulIdentifier","src":"56466:6:69"},"nativeSrc":"56466:47:69","nodeType":"YulFunctionCall","src":"56466:47:69"},"nativeSrc":"56466:47:69","nodeType":"YulExpressionStatement","src":"56466:47:69"},{"nativeSrc":"56522:139:69","nodeType":"YulAssignment","src":"56522:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"56656:4:69","nodeType":"YulIdentifier","src":"56656:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack","nativeSrc":"56530:124:69","nodeType":"YulIdentifier","src":"56530:124:69"},"nativeSrc":"56530:131:69","nodeType":"YulFunctionCall","src":"56530:131:69"},"variableNames":[{"name":"tail","nativeSrc":"56522:4:69","nodeType":"YulIdentifier","src":"56522:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"56249:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"56400:9:69","nodeType":"YulTypedName","src":"56400:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"56415:4:69","nodeType":"YulTypedName","src":"56415:4:69","type":""}],"src":"56249:419:69"},{"body":{"nativeSrc":"56878:448:69","nodeType":"YulBlock","src":"56878:448:69","statements":[{"nativeSrc":"56888:27:69","nodeType":"YulAssignment","src":"56888:27:69","value":{"arguments":[{"name":"headStart","nativeSrc":"56900:9:69","nodeType":"YulIdentifier","src":"56900:9:69"},{"kind":"number","nativeSrc":"56911:3:69","nodeType":"YulLiteral","src":"56911:3:69","type":"","value":"160"}],"functionName":{"name":"add","nativeSrc":"56896:3:69","nodeType":"YulIdentifier","src":"56896:3:69"},"nativeSrc":"56896:19:69","nodeType":"YulFunctionCall","src":"56896:19:69"},"variableNames":[{"name":"tail","nativeSrc":"56888:4:69","nodeType":"YulIdentifier","src":"56888:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"56969:6:69","nodeType":"YulIdentifier","src":"56969:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"56982:9:69","nodeType":"YulIdentifier","src":"56982:9:69"},{"kind":"number","nativeSrc":"56993:1:69","nodeType":"YulLiteral","src":"56993:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"56978:3:69","nodeType":"YulIdentifier","src":"56978:3:69"},"nativeSrc":"56978:17:69","nodeType":"YulFunctionCall","src":"56978:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"56925:43:69","nodeType":"YulIdentifier","src":"56925:43:69"},"nativeSrc":"56925:71:69","nodeType":"YulFunctionCall","src":"56925:71:69"},"nativeSrc":"56925:71:69","nodeType":"YulExpressionStatement","src":"56925:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"57050:6:69","nodeType":"YulIdentifier","src":"57050:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"57063:9:69","nodeType":"YulIdentifier","src":"57063:9:69"},{"kind":"number","nativeSrc":"57074:2:69","nodeType":"YulLiteral","src":"57074:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"57059:3:69","nodeType":"YulIdentifier","src":"57059:3:69"},"nativeSrc":"57059:18:69","nodeType":"YulFunctionCall","src":"57059:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"57006:43:69","nodeType":"YulIdentifier","src":"57006:43:69"},"nativeSrc":"57006:72:69","nodeType":"YulFunctionCall","src":"57006:72:69"},"nativeSrc":"57006:72:69","nodeType":"YulExpressionStatement","src":"57006:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"57132:6:69","nodeType":"YulIdentifier","src":"57132:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"57145:9:69","nodeType":"YulIdentifier","src":"57145:9:69"},{"kind":"number","nativeSrc":"57156:2:69","nodeType":"YulLiteral","src":"57156:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"57141:3:69","nodeType":"YulIdentifier","src":"57141:3:69"},"nativeSrc":"57141:18:69","nodeType":"YulFunctionCall","src":"57141:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"57088:43:69","nodeType":"YulIdentifier","src":"57088:43:69"},"nativeSrc":"57088:72:69","nodeType":"YulFunctionCall","src":"57088:72:69"},"nativeSrc":"57088:72:69","nodeType":"YulExpressionStatement","src":"57088:72:69"},{"expression":{"arguments":[{"name":"value3","nativeSrc":"57214:6:69","nodeType":"YulIdentifier","src":"57214:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"57227:9:69","nodeType":"YulIdentifier","src":"57227:9:69"},{"kind":"number","nativeSrc":"57238:2:69","nodeType":"YulLiteral","src":"57238:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"57223:3:69","nodeType":"YulIdentifier","src":"57223:3:69"},"nativeSrc":"57223:18:69","nodeType":"YulFunctionCall","src":"57223:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"57170:43:69","nodeType":"YulIdentifier","src":"57170:43:69"},"nativeSrc":"57170:72:69","nodeType":"YulFunctionCall","src":"57170:72:69"},"nativeSrc":"57170:72:69","nodeType":"YulExpressionStatement","src":"57170:72:69"},{"expression":{"arguments":[{"name":"value4","nativeSrc":"57290:6:69","nodeType":"YulIdentifier","src":"57290:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"57303:9:69","nodeType":"YulIdentifier","src":"57303:9:69"},{"kind":"number","nativeSrc":"57314:3:69","nodeType":"YulLiteral","src":"57314:3:69","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"57299:3:69","nodeType":"YulIdentifier","src":"57299:3:69"},"nativeSrc":"57299:19:69","nodeType":"YulFunctionCall","src":"57299:19:69"}],"functionName":{"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"57252:37:69","nodeType":"YulIdentifier","src":"57252:37:69"},"nativeSrc":"57252:67:69","nodeType":"YulFunctionCall","src":"57252:67:69"},"nativeSrc":"57252:67:69","nodeType":"YulExpressionStatement","src":"57252:67:69"}]},"name":"abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_bool__to_t_address_t_address_t_address_t_uint256_t_bool__fromStack_reversed","nativeSrc":"56674:652:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"56818:9:69","nodeType":"YulTypedName","src":"56818:9:69","type":""},{"name":"value4","nativeSrc":"56830:6:69","nodeType":"YulTypedName","src":"56830:6:69","type":""},{"name":"value3","nativeSrc":"56838:6:69","nodeType":"YulTypedName","src":"56838:6:69","type":""},{"name":"value2","nativeSrc":"56846:6:69","nodeType":"YulTypedName","src":"56846:6:69","type":""},{"name":"value1","nativeSrc":"56854:6:69","nodeType":"YulTypedName","src":"56854:6:69","type":""},{"name":"value0","nativeSrc":"56862:6:69","nodeType":"YulTypedName","src":"56862:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"56873:4:69","nodeType":"YulTypedName","src":"56873:4:69","type":""}],"src":"56674:652:69"},{"body":{"nativeSrc":"57426:413:69","nodeType":"YulBlock","src":"57426:413:69","statements":[{"body":{"nativeSrc":"57472:83:69","nodeType":"YulBlock","src":"57472:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"57474:77:69","nodeType":"YulIdentifier","src":"57474:77:69"},"nativeSrc":"57474:79:69","nodeType":"YulFunctionCall","src":"57474:79:69"},"nativeSrc":"57474:79:69","nodeType":"YulExpressionStatement","src":"57474:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"57447:7:69","nodeType":"YulIdentifier","src":"57447:7:69"},{"name":"headStart","nativeSrc":"57456:9:69","nodeType":"YulIdentifier","src":"57456:9:69"}],"functionName":{"name":"sub","nativeSrc":"57443:3:69","nodeType":"YulIdentifier","src":"57443:3:69"},"nativeSrc":"57443:23:69","nodeType":"YulFunctionCall","src":"57443:23:69"},{"kind":"number","nativeSrc":"57468:2:69","nodeType":"YulLiteral","src":"57468:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"57439:3:69","nodeType":"YulIdentifier","src":"57439:3:69"},"nativeSrc":"57439:32:69","nodeType":"YulFunctionCall","src":"57439:32:69"},"nativeSrc":"57436:119:69","nodeType":"YulIf","src":"57436:119:69"},{"nativeSrc":"57565:128:69","nodeType":"YulBlock","src":"57565:128:69","statements":[{"nativeSrc":"57580:15:69","nodeType":"YulVariableDeclaration","src":"57580:15:69","value":{"kind":"number","nativeSrc":"57594:1:69","nodeType":"YulLiteral","src":"57594:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"57584:6:69","nodeType":"YulTypedName","src":"57584:6:69","type":""}]},{"nativeSrc":"57609:74:69","nodeType":"YulAssignment","src":"57609:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"57655:9:69","nodeType":"YulIdentifier","src":"57655:9:69"},{"name":"offset","nativeSrc":"57666:6:69","nodeType":"YulIdentifier","src":"57666:6:69"}],"functionName":{"name":"add","nativeSrc":"57651:3:69","nodeType":"YulIdentifier","src":"57651:3:69"},"nativeSrc":"57651:22:69","nodeType":"YulFunctionCall","src":"57651:22:69"},{"name":"dataEnd","nativeSrc":"57675:7:69","nodeType":"YulIdentifier","src":"57675:7:69"}],"functionName":{"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"57619:31:69","nodeType":"YulIdentifier","src":"57619:31:69"},"nativeSrc":"57619:64:69","nodeType":"YulFunctionCall","src":"57619:64:69"},"variableNames":[{"name":"value0","nativeSrc":"57609:6:69","nodeType":"YulIdentifier","src":"57609:6:69"}]}]},{"nativeSrc":"57703:129:69","nodeType":"YulBlock","src":"57703:129:69","statements":[{"nativeSrc":"57718:16:69","nodeType":"YulVariableDeclaration","src":"57718:16:69","value":{"kind":"number","nativeSrc":"57732:2:69","nodeType":"YulLiteral","src":"57732:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"57722:6:69","nodeType":"YulTypedName","src":"57722:6:69","type":""}]},{"nativeSrc":"57748:74:69","nodeType":"YulAssignment","src":"57748:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"57794:9:69","nodeType":"YulIdentifier","src":"57794:9:69"},{"name":"offset","nativeSrc":"57805:6:69","nodeType":"YulIdentifier","src":"57805:6:69"}],"functionName":{"name":"add","nativeSrc":"57790:3:69","nodeType":"YulIdentifier","src":"57790:3:69"},"nativeSrc":"57790:22:69","nodeType":"YulFunctionCall","src":"57790:22:69"},{"name":"dataEnd","nativeSrc":"57814:7:69","nodeType":"YulIdentifier","src":"57814:7:69"}],"functionName":{"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"57758:31:69","nodeType":"YulIdentifier","src":"57758:31:69"},"nativeSrc":"57758:64:69","nodeType":"YulFunctionCall","src":"57758:64:69"},"variableNames":[{"name":"value1","nativeSrc":"57748:6:69","nodeType":"YulIdentifier","src":"57748:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint256t_uint256_fromMemory","nativeSrc":"57332:507:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"57388:9:69","nodeType":"YulTypedName","src":"57388:9:69","type":""},{"name":"dataEnd","nativeSrc":"57399:7:69","nodeType":"YulTypedName","src":"57399:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"57411:6:69","nodeType":"YulTypedName","src":"57411:6:69","type":""},{"name":"value1","nativeSrc":"57419:6:69","nodeType":"YulTypedName","src":"57419:6:69","type":""}],"src":"57332:507:69"},{"body":{"nativeSrc":"57951:132:69","nodeType":"YulBlock","src":"57951:132:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"57973:6:69","nodeType":"YulIdentifier","src":"57973:6:69"},{"kind":"number","nativeSrc":"57981:1:69","nodeType":"YulLiteral","src":"57981:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"57969:3:69","nodeType":"YulIdentifier","src":"57969:3:69"},"nativeSrc":"57969:14:69","nodeType":"YulFunctionCall","src":"57969:14:69"},{"hexValue":"4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f","kind":"string","nativeSrc":"57985:34:69","nodeType":"YulLiteral","src":"57985:34:69","type":"","value":"LIQUIDATE_COMPTROLLER_CALCULATE_"}],"functionName":{"name":"mstore","nativeSrc":"57962:6:69","nodeType":"YulIdentifier","src":"57962:6:69"},"nativeSrc":"57962:58:69","nodeType":"YulFunctionCall","src":"57962:58:69"},"nativeSrc":"57962:58:69","nodeType":"YulExpressionStatement","src":"57962:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"58041:6:69","nodeType":"YulIdentifier","src":"58041:6:69"},{"kind":"number","nativeSrc":"58049:2:69","nodeType":"YulLiteral","src":"58049:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"58037:3:69","nodeType":"YulIdentifier","src":"58037:3:69"},"nativeSrc":"58037:15:69","nodeType":"YulFunctionCall","src":"58037:15:69"},{"hexValue":"414d4f554e545f5345495a455f4641494c4544","kind":"string","nativeSrc":"58054:21:69","nodeType":"YulLiteral","src":"58054:21:69","type":"","value":"AMOUNT_SEIZE_FAILED"}],"functionName":{"name":"mstore","nativeSrc":"58030:6:69","nodeType":"YulIdentifier","src":"58030:6:69"},"nativeSrc":"58030:46:69","nodeType":"YulFunctionCall","src":"58030:46:69"},"nativeSrc":"58030:46:69","nodeType":"YulExpressionStatement","src":"58030:46:69"}]},"name":"store_literal_in_memory_b1c7e90880e9fbdf9aa93d626a842fbb127521a1492c295dbd98c98157e1e4f7","nativeSrc":"57845:238:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"57943:6:69","nodeType":"YulTypedName","src":"57943:6:69","type":""}],"src":"57845:238:69"},{"body":{"nativeSrc":"58235:220:69","nodeType":"YulBlock","src":"58235:220:69","statements":[{"nativeSrc":"58245:74:69","nodeType":"YulAssignment","src":"58245:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"58311:3:69","nodeType":"YulIdentifier","src":"58311:3:69"},{"kind":"number","nativeSrc":"58316:2:69","nodeType":"YulLiteral","src":"58316:2:69","type":"","value":"51"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"58252:58:69","nodeType":"YulIdentifier","src":"58252:58:69"},"nativeSrc":"58252:67:69","nodeType":"YulFunctionCall","src":"58252:67:69"},"variableNames":[{"name":"pos","nativeSrc":"58245:3:69","nodeType":"YulIdentifier","src":"58245:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"58417:3:69","nodeType":"YulIdentifier","src":"58417:3:69"}],"functionName":{"name":"store_literal_in_memory_b1c7e90880e9fbdf9aa93d626a842fbb127521a1492c295dbd98c98157e1e4f7","nativeSrc":"58328:88:69","nodeType":"YulIdentifier","src":"58328:88:69"},"nativeSrc":"58328:93:69","nodeType":"YulFunctionCall","src":"58328:93:69"},"nativeSrc":"58328:93:69","nodeType":"YulExpressionStatement","src":"58328:93:69"},{"nativeSrc":"58430:19:69","nodeType":"YulAssignment","src":"58430:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"58441:3:69","nodeType":"YulIdentifier","src":"58441:3:69"},{"kind":"number","nativeSrc":"58446:2:69","nodeType":"YulLiteral","src":"58446:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"58437:3:69","nodeType":"YulIdentifier","src":"58437:3:69"},"nativeSrc":"58437:12:69","nodeType":"YulFunctionCall","src":"58437:12:69"},"variableNames":[{"name":"end","nativeSrc":"58430:3:69","nodeType":"YulIdentifier","src":"58430:3:69"}]}]},"name":"abi_encode_t_stringliteral_b1c7e90880e9fbdf9aa93d626a842fbb127521a1492c295dbd98c98157e1e4f7_to_t_string_memory_ptr_fromStack","nativeSrc":"58089:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"58223:3:69","nodeType":"YulTypedName","src":"58223:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"58231:3:69","nodeType":"YulTypedName","src":"58231:3:69","type":""}],"src":"58089:366:69"},{"body":{"nativeSrc":"58632:248:69","nodeType":"YulBlock","src":"58632:248:69","statements":[{"nativeSrc":"58642:26:69","nodeType":"YulAssignment","src":"58642:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"58654:9:69","nodeType":"YulIdentifier","src":"58654:9:69"},{"kind":"number","nativeSrc":"58665:2:69","nodeType":"YulLiteral","src":"58665:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"58650:3:69","nodeType":"YulIdentifier","src":"58650:3:69"},"nativeSrc":"58650:18:69","nodeType":"YulFunctionCall","src":"58650:18:69"},"variableNames":[{"name":"tail","nativeSrc":"58642:4:69","nodeType":"YulIdentifier","src":"58642:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"58689:9:69","nodeType":"YulIdentifier","src":"58689:9:69"},{"kind":"number","nativeSrc":"58700:1:69","nodeType":"YulLiteral","src":"58700:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"58685:3:69","nodeType":"YulIdentifier","src":"58685:3:69"},"nativeSrc":"58685:17:69","nodeType":"YulFunctionCall","src":"58685:17:69"},{"arguments":[{"name":"tail","nativeSrc":"58708:4:69","nodeType":"YulIdentifier","src":"58708:4:69"},{"name":"headStart","nativeSrc":"58714:9:69","nodeType":"YulIdentifier","src":"58714:9:69"}],"functionName":{"name":"sub","nativeSrc":"58704:3:69","nodeType":"YulIdentifier","src":"58704:3:69"},"nativeSrc":"58704:20:69","nodeType":"YulFunctionCall","src":"58704:20:69"}],"functionName":{"name":"mstore","nativeSrc":"58678:6:69","nodeType":"YulIdentifier","src":"58678:6:69"},"nativeSrc":"58678:47:69","nodeType":"YulFunctionCall","src":"58678:47:69"},"nativeSrc":"58678:47:69","nodeType":"YulExpressionStatement","src":"58678:47:69"},{"nativeSrc":"58734:139:69","nodeType":"YulAssignment","src":"58734:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"58868:4:69","nodeType":"YulIdentifier","src":"58868:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_b1c7e90880e9fbdf9aa93d626a842fbb127521a1492c295dbd98c98157e1e4f7_to_t_string_memory_ptr_fromStack","nativeSrc":"58742:124:69","nodeType":"YulIdentifier","src":"58742:124:69"},"nativeSrc":"58742:131:69","nodeType":"YulFunctionCall","src":"58742:131:69"},"variableNames":[{"name":"tail","nativeSrc":"58734:4:69","nodeType":"YulIdentifier","src":"58734:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_b1c7e90880e9fbdf9aa93d626a842fbb127521a1492c295dbd98c98157e1e4f7__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"58461:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"58612:9:69","nodeType":"YulTypedName","src":"58612:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"58627:4:69","nodeType":"YulTypedName","src":"58627:4:69","type":""}],"src":"58461:419:69"},{"body":{"nativeSrc":"58992:68:69","nodeType":"YulBlock","src":"58992:68:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"59014:6:69","nodeType":"YulIdentifier","src":"59014:6:69"},{"kind":"number","nativeSrc":"59022:1:69","nodeType":"YulLiteral","src":"59022:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"59010:3:69","nodeType":"YulIdentifier","src":"59010:3:69"},"nativeSrc":"59010:14:69","nodeType":"YulFunctionCall","src":"59010:14:69"},{"hexValue":"4c49515549444154455f5345495a455f544f4f5f4d554348","kind":"string","nativeSrc":"59026:26:69","nodeType":"YulLiteral","src":"59026:26:69","type":"","value":"LIQUIDATE_SEIZE_TOO_MUCH"}],"functionName":{"name":"mstore","nativeSrc":"59003:6:69","nodeType":"YulIdentifier","src":"59003:6:69"},"nativeSrc":"59003:50:69","nodeType":"YulFunctionCall","src":"59003:50:69"},"nativeSrc":"59003:50:69","nodeType":"YulExpressionStatement","src":"59003:50:69"}]},"name":"store_literal_in_memory_bffc2aa76a1b975ca5ba1defccc66ee3d6e80e3f510ac216baa6baef4008863e","nativeSrc":"58886:174:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"58984:6:69","nodeType":"YulTypedName","src":"58984:6:69","type":""}],"src":"58886:174:69"},{"body":{"nativeSrc":"59212:220:69","nodeType":"YulBlock","src":"59212:220:69","statements":[{"nativeSrc":"59222:74:69","nodeType":"YulAssignment","src":"59222:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"59288:3:69","nodeType":"YulIdentifier","src":"59288:3:69"},{"kind":"number","nativeSrc":"59293:2:69","nodeType":"YulLiteral","src":"59293:2:69","type":"","value":"24"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"59229:58:69","nodeType":"YulIdentifier","src":"59229:58:69"},"nativeSrc":"59229:67:69","nodeType":"YulFunctionCall","src":"59229:67:69"},"variableNames":[{"name":"pos","nativeSrc":"59222:3:69","nodeType":"YulIdentifier","src":"59222:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"59394:3:69","nodeType":"YulIdentifier","src":"59394:3:69"}],"functionName":{"name":"store_literal_in_memory_bffc2aa76a1b975ca5ba1defccc66ee3d6e80e3f510ac216baa6baef4008863e","nativeSrc":"59305:88:69","nodeType":"YulIdentifier","src":"59305:88:69"},"nativeSrc":"59305:93:69","nodeType":"YulFunctionCall","src":"59305:93:69"},"nativeSrc":"59305:93:69","nodeType":"YulExpressionStatement","src":"59305:93:69"},{"nativeSrc":"59407:19:69","nodeType":"YulAssignment","src":"59407:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"59418:3:69","nodeType":"YulIdentifier","src":"59418:3:69"},{"kind":"number","nativeSrc":"59423:2:69","nodeType":"YulLiteral","src":"59423:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"59414:3:69","nodeType":"YulIdentifier","src":"59414:3:69"},"nativeSrc":"59414:12:69","nodeType":"YulFunctionCall","src":"59414:12:69"},"variableNames":[{"name":"end","nativeSrc":"59407:3:69","nodeType":"YulIdentifier","src":"59407:3:69"}]}]},"name":"abi_encode_t_stringliteral_bffc2aa76a1b975ca5ba1defccc66ee3d6e80e3f510ac216baa6baef4008863e_to_t_string_memory_ptr_fromStack","nativeSrc":"59066:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"59200:3:69","nodeType":"YulTypedName","src":"59200:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"59208:3:69","nodeType":"YulTypedName","src":"59208:3:69","type":""}],"src":"59066:366:69"},{"body":{"nativeSrc":"59609:248:69","nodeType":"YulBlock","src":"59609:248:69","statements":[{"nativeSrc":"59619:26:69","nodeType":"YulAssignment","src":"59619:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"59631:9:69","nodeType":"YulIdentifier","src":"59631:9:69"},{"kind":"number","nativeSrc":"59642:2:69","nodeType":"YulLiteral","src":"59642:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"59627:3:69","nodeType":"YulIdentifier","src":"59627:3:69"},"nativeSrc":"59627:18:69","nodeType":"YulFunctionCall","src":"59627:18:69"},"variableNames":[{"name":"tail","nativeSrc":"59619:4:69","nodeType":"YulIdentifier","src":"59619:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"59666:9:69","nodeType":"YulIdentifier","src":"59666:9:69"},{"kind":"number","nativeSrc":"59677:1:69","nodeType":"YulLiteral","src":"59677:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"59662:3:69","nodeType":"YulIdentifier","src":"59662:3:69"},"nativeSrc":"59662:17:69","nodeType":"YulFunctionCall","src":"59662:17:69"},{"arguments":[{"name":"tail","nativeSrc":"59685:4:69","nodeType":"YulIdentifier","src":"59685:4:69"},{"name":"headStart","nativeSrc":"59691:9:69","nodeType":"YulIdentifier","src":"59691:9:69"}],"functionName":{"name":"sub","nativeSrc":"59681:3:69","nodeType":"YulIdentifier","src":"59681:3:69"},"nativeSrc":"59681:20:69","nodeType":"YulFunctionCall","src":"59681:20:69"}],"functionName":{"name":"mstore","nativeSrc":"59655:6:69","nodeType":"YulIdentifier","src":"59655:6:69"},"nativeSrc":"59655:47:69","nodeType":"YulFunctionCall","src":"59655:47:69"},"nativeSrc":"59655:47:69","nodeType":"YulExpressionStatement","src":"59655:47:69"},{"nativeSrc":"59711:139:69","nodeType":"YulAssignment","src":"59711:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"59845:4:69","nodeType":"YulIdentifier","src":"59845:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_bffc2aa76a1b975ca5ba1defccc66ee3d6e80e3f510ac216baa6baef4008863e_to_t_string_memory_ptr_fromStack","nativeSrc":"59719:124:69","nodeType":"YulIdentifier","src":"59719:124:69"},"nativeSrc":"59719:131:69","nodeType":"YulFunctionCall","src":"59719:131:69"},"variableNames":[{"name":"tail","nativeSrc":"59711:4:69","nodeType":"YulIdentifier","src":"59711:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_bffc2aa76a1b975ca5ba1defccc66ee3d6e80e3f510ac216baa6baef4008863e__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"59438:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"59589:9:69","nodeType":"YulTypedName","src":"59589:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"59604:4:69","nodeType":"YulTypedName","src":"59604:4:69","type":""}],"src":"59438:419:69"},{"body":{"nativeSrc":"60101:537:69","nodeType":"YulBlock","src":"60101:537:69","statements":[{"nativeSrc":"60111:27:69","nodeType":"YulAssignment","src":"60111:27:69","value":{"arguments":[{"name":"headStart","nativeSrc":"60123:9:69","nodeType":"YulIdentifier","src":"60123:9:69"},{"kind":"number","nativeSrc":"60134:3:69","nodeType":"YulLiteral","src":"60134:3:69","type":"","value":"192"}],"functionName":{"name":"add","nativeSrc":"60119:3:69","nodeType":"YulIdentifier","src":"60119:3:69"},"nativeSrc":"60119:19:69","nodeType":"YulFunctionCall","src":"60119:19:69"},"variableNames":[{"name":"tail","nativeSrc":"60111:4:69","nodeType":"YulIdentifier","src":"60111:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"60192:6:69","nodeType":"YulIdentifier","src":"60192:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"60205:9:69","nodeType":"YulIdentifier","src":"60205:9:69"},{"kind":"number","nativeSrc":"60216:1:69","nodeType":"YulLiteral","src":"60216:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"60201:3:69","nodeType":"YulIdentifier","src":"60201:3:69"},"nativeSrc":"60201:17:69","nodeType":"YulFunctionCall","src":"60201:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"60148:43:69","nodeType":"YulIdentifier","src":"60148:43:69"},"nativeSrc":"60148:71:69","nodeType":"YulFunctionCall","src":"60148:71:69"},"nativeSrc":"60148:71:69","nodeType":"YulExpressionStatement","src":"60148:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"60273:6:69","nodeType":"YulIdentifier","src":"60273:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"60286:9:69","nodeType":"YulIdentifier","src":"60286:9:69"},{"kind":"number","nativeSrc":"60297:2:69","nodeType":"YulLiteral","src":"60297:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"60282:3:69","nodeType":"YulIdentifier","src":"60282:3:69"},"nativeSrc":"60282:18:69","nodeType":"YulFunctionCall","src":"60282:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"60229:43:69","nodeType":"YulIdentifier","src":"60229:43:69"},"nativeSrc":"60229:72:69","nodeType":"YulFunctionCall","src":"60229:72:69"},"nativeSrc":"60229:72:69","nodeType":"YulExpressionStatement","src":"60229:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"60355:6:69","nodeType":"YulIdentifier","src":"60355:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"60368:9:69","nodeType":"YulIdentifier","src":"60368:9:69"},{"kind":"number","nativeSrc":"60379:2:69","nodeType":"YulLiteral","src":"60379:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"60364:3:69","nodeType":"YulIdentifier","src":"60364:3:69"},"nativeSrc":"60364:18:69","nodeType":"YulFunctionCall","src":"60364:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"60311:43:69","nodeType":"YulIdentifier","src":"60311:43:69"},"nativeSrc":"60311:72:69","nodeType":"YulFunctionCall","src":"60311:72:69"},"nativeSrc":"60311:72:69","nodeType":"YulExpressionStatement","src":"60311:72:69"},{"expression":{"arguments":[{"name":"value3","nativeSrc":"60437:6:69","nodeType":"YulIdentifier","src":"60437:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"60450:9:69","nodeType":"YulIdentifier","src":"60450:9:69"},{"kind":"number","nativeSrc":"60461:2:69","nodeType":"YulLiteral","src":"60461:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"60446:3:69","nodeType":"YulIdentifier","src":"60446:3:69"},"nativeSrc":"60446:18:69","nodeType":"YulFunctionCall","src":"60446:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"60393:43:69","nodeType":"YulIdentifier","src":"60393:43:69"},"nativeSrc":"60393:72:69","nodeType":"YulFunctionCall","src":"60393:72:69"},"nativeSrc":"60393:72:69","nodeType":"YulExpressionStatement","src":"60393:72:69"},{"expression":{"arguments":[{"name":"value4","nativeSrc":"60519:6:69","nodeType":"YulIdentifier","src":"60519:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"60532:9:69","nodeType":"YulIdentifier","src":"60532:9:69"},{"kind":"number","nativeSrc":"60543:3:69","nodeType":"YulLiteral","src":"60543:3:69","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"60528:3:69","nodeType":"YulIdentifier","src":"60528:3:69"},"nativeSrc":"60528:19:69","nodeType":"YulFunctionCall","src":"60528:19:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"60475:43:69","nodeType":"YulIdentifier","src":"60475:43:69"},"nativeSrc":"60475:73:69","nodeType":"YulFunctionCall","src":"60475:73:69"},"nativeSrc":"60475:73:69","nodeType":"YulExpressionStatement","src":"60475:73:69"},{"expression":{"arguments":[{"name":"value5","nativeSrc":"60602:6:69","nodeType":"YulIdentifier","src":"60602:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"60615:9:69","nodeType":"YulIdentifier","src":"60615:9:69"},{"kind":"number","nativeSrc":"60626:3:69","nodeType":"YulLiteral","src":"60626:3:69","type":"","value":"160"}],"functionName":{"name":"add","nativeSrc":"60611:3:69","nodeType":"YulIdentifier","src":"60611:3:69"},"nativeSrc":"60611:19:69","nodeType":"YulFunctionCall","src":"60611:19:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"60558:43:69","nodeType":"YulIdentifier","src":"60558:43:69"},"nativeSrc":"60558:73:69","nodeType":"YulFunctionCall","src":"60558:73:69"},"nativeSrc":"60558:73:69","nodeType":"YulExpressionStatement","src":"60558:73:69"}]},"name":"abi_encode_tuple_t_address_t_address_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_address_t_address_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"59863:775:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"60033:9:69","nodeType":"YulTypedName","src":"60033:9:69","type":""},{"name":"value5","nativeSrc":"60045:6:69","nodeType":"YulTypedName","src":"60045:6:69","type":""},{"name":"value4","nativeSrc":"60053:6:69","nodeType":"YulTypedName","src":"60053:6:69","type":""},{"name":"value3","nativeSrc":"60061:6:69","nodeType":"YulTypedName","src":"60061:6:69","type":""},{"name":"value2","nativeSrc":"60069:6:69","nodeType":"YulTypedName","src":"60069:6:69","type":""},{"name":"value1","nativeSrc":"60077:6:69","nodeType":"YulTypedName","src":"60077:6:69","type":""},{"name":"value0","nativeSrc":"60085:6:69","nodeType":"YulTypedName","src":"60085:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"60096:4:69","nodeType":"YulTypedName","src":"60096:4:69","type":""}],"src":"59863:775:69"},{"body":{"nativeSrc":"60750:119:69","nodeType":"YulBlock","src":"60750:119:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"60772:6:69","nodeType":"YulIdentifier","src":"60772:6:69"},{"kind":"number","nativeSrc":"60780:1:69","nodeType":"YulLiteral","src":"60780:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"60768:3:69","nodeType":"YulIdentifier","src":"60768:3:69"},"nativeSrc":"60768:14:69","nodeType":"YulFunctionCall","src":"60768:14:69"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f","kind":"string","nativeSrc":"60784:34:69","nodeType":"YulLiteral","src":"60784:34:69","type":"","value":"Address: insufficient balance fo"}],"functionName":{"name":"mstore","nativeSrc":"60761:6:69","nodeType":"YulIdentifier","src":"60761:6:69"},"nativeSrc":"60761:58:69","nodeType":"YulFunctionCall","src":"60761:58:69"},"nativeSrc":"60761:58:69","nodeType":"YulExpressionStatement","src":"60761:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"60840:6:69","nodeType":"YulIdentifier","src":"60840:6:69"},{"kind":"number","nativeSrc":"60848:2:69","nodeType":"YulLiteral","src":"60848:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"60836:3:69","nodeType":"YulIdentifier","src":"60836:3:69"},"nativeSrc":"60836:15:69","nodeType":"YulFunctionCall","src":"60836:15:69"},{"hexValue":"722063616c6c","kind":"string","nativeSrc":"60853:8:69","nodeType":"YulLiteral","src":"60853:8:69","type":"","value":"r call"}],"functionName":{"name":"mstore","nativeSrc":"60829:6:69","nodeType":"YulIdentifier","src":"60829:6:69"},"nativeSrc":"60829:33:69","nodeType":"YulFunctionCall","src":"60829:33:69"},"nativeSrc":"60829:33:69","nodeType":"YulExpressionStatement","src":"60829:33:69"}]},"name":"store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","nativeSrc":"60644:225:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"60742:6:69","nodeType":"YulTypedName","src":"60742:6:69","type":""}],"src":"60644:225:69"},{"body":{"nativeSrc":"61021:220:69","nodeType":"YulBlock","src":"61021:220:69","statements":[{"nativeSrc":"61031:74:69","nodeType":"YulAssignment","src":"61031:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"61097:3:69","nodeType":"YulIdentifier","src":"61097:3:69"},{"kind":"number","nativeSrc":"61102:2:69","nodeType":"YulLiteral","src":"61102:2:69","type":"","value":"38"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"61038:58:69","nodeType":"YulIdentifier","src":"61038:58:69"},"nativeSrc":"61038:67:69","nodeType":"YulFunctionCall","src":"61038:67:69"},"variableNames":[{"name":"pos","nativeSrc":"61031:3:69","nodeType":"YulIdentifier","src":"61031:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"61203:3:69","nodeType":"YulIdentifier","src":"61203:3:69"}],"functionName":{"name":"store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","nativeSrc":"61114:88:69","nodeType":"YulIdentifier","src":"61114:88:69"},"nativeSrc":"61114:93:69","nodeType":"YulFunctionCall","src":"61114:93:69"},"nativeSrc":"61114:93:69","nodeType":"YulExpressionStatement","src":"61114:93:69"},{"nativeSrc":"61216:19:69","nodeType":"YulAssignment","src":"61216:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"61227:3:69","nodeType":"YulIdentifier","src":"61227:3:69"},{"kind":"number","nativeSrc":"61232:2:69","nodeType":"YulLiteral","src":"61232:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"61223:3:69","nodeType":"YulIdentifier","src":"61223:3:69"},"nativeSrc":"61223:12:69","nodeType":"YulFunctionCall","src":"61223:12:69"},"variableNames":[{"name":"end","nativeSrc":"61216:3:69","nodeType":"YulIdentifier","src":"61216:3:69"}]}]},"name":"abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack","nativeSrc":"60875:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"61009:3:69","nodeType":"YulTypedName","src":"61009:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"61017:3:69","nodeType":"YulTypedName","src":"61017:3:69","type":""}],"src":"60875:366:69"},{"body":{"nativeSrc":"61418:248:69","nodeType":"YulBlock","src":"61418:248:69","statements":[{"nativeSrc":"61428:26:69","nodeType":"YulAssignment","src":"61428:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"61440:9:69","nodeType":"YulIdentifier","src":"61440:9:69"},{"kind":"number","nativeSrc":"61451:2:69","nodeType":"YulLiteral","src":"61451:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"61436:3:69","nodeType":"YulIdentifier","src":"61436:3:69"},"nativeSrc":"61436:18:69","nodeType":"YulFunctionCall","src":"61436:18:69"},"variableNames":[{"name":"tail","nativeSrc":"61428:4:69","nodeType":"YulIdentifier","src":"61428:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"61475:9:69","nodeType":"YulIdentifier","src":"61475:9:69"},{"kind":"number","nativeSrc":"61486:1:69","nodeType":"YulLiteral","src":"61486:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"61471:3:69","nodeType":"YulIdentifier","src":"61471:3:69"},"nativeSrc":"61471:17:69","nodeType":"YulFunctionCall","src":"61471:17:69"},{"arguments":[{"name":"tail","nativeSrc":"61494:4:69","nodeType":"YulIdentifier","src":"61494:4:69"},{"name":"headStart","nativeSrc":"61500:9:69","nodeType":"YulIdentifier","src":"61500:9:69"}],"functionName":{"name":"sub","nativeSrc":"61490:3:69","nodeType":"YulIdentifier","src":"61490:3:69"},"nativeSrc":"61490:20:69","nodeType":"YulFunctionCall","src":"61490:20:69"}],"functionName":{"name":"mstore","nativeSrc":"61464:6:69","nodeType":"YulIdentifier","src":"61464:6:69"},"nativeSrc":"61464:47:69","nodeType":"YulFunctionCall","src":"61464:47:69"},"nativeSrc":"61464:47:69","nodeType":"YulExpressionStatement","src":"61464:47:69"},{"nativeSrc":"61520:139:69","nodeType":"YulAssignment","src":"61520:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"61654:4:69","nodeType":"YulIdentifier","src":"61654:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack","nativeSrc":"61528:124:69","nodeType":"YulIdentifier","src":"61528:124:69"},"nativeSrc":"61528:131:69","nodeType":"YulFunctionCall","src":"61528:131:69"},"variableNames":[{"name":"tail","nativeSrc":"61520:4:69","nodeType":"YulIdentifier","src":"61520:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"61247:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"61398:9:69","nodeType":"YulTypedName","src":"61398:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"61413:4:69","nodeType":"YulTypedName","src":"61413:4:69","type":""}],"src":"61247:419:69"},{"body":{"nativeSrc":"61730:40:69","nodeType":"YulBlock","src":"61730:40:69","statements":[{"nativeSrc":"61741:22:69","nodeType":"YulAssignment","src":"61741:22:69","value":{"arguments":[{"name":"value","nativeSrc":"61757:5:69","nodeType":"YulIdentifier","src":"61757:5:69"}],"functionName":{"name":"mload","nativeSrc":"61751:5:69","nodeType":"YulIdentifier","src":"61751:5:69"},"nativeSrc":"61751:12:69","nodeType":"YulFunctionCall","src":"61751:12:69"},"variableNames":[{"name":"length","nativeSrc":"61741:6:69","nodeType":"YulIdentifier","src":"61741:6:69"}]}]},"name":"array_length_t_bytes_memory_ptr","nativeSrc":"61672:98:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"61713:5:69","nodeType":"YulTypedName","src":"61713:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"61723:6:69","nodeType":"YulTypedName","src":"61723:6:69","type":""}],"src":"61672:98:69"},{"body":{"nativeSrc":"61889:34:69","nodeType":"YulBlock","src":"61889:34:69","statements":[{"nativeSrc":"61899:18:69","nodeType":"YulAssignment","src":"61899:18:69","value":{"name":"pos","nativeSrc":"61914:3:69","nodeType":"YulIdentifier","src":"61914:3:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"61899:11:69","nodeType":"YulIdentifier","src":"61899:11:69"}]}]},"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"61776:147:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"61861:3:69","nodeType":"YulTypedName","src":"61861:3:69","type":""},{"name":"length","nativeSrc":"61866:6:69","nodeType":"YulTypedName","src":"61866:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"61877:11:69","nodeType":"YulTypedName","src":"61877:11:69","type":""}],"src":"61776:147:69"},{"body":{"nativeSrc":"62037:278:69","nodeType":"YulBlock","src":"62037:278:69","statements":[{"nativeSrc":"62047:52:69","nodeType":"YulVariableDeclaration","src":"62047:52:69","value":{"arguments":[{"name":"value","nativeSrc":"62093:5:69","nodeType":"YulIdentifier","src":"62093:5:69"}],"functionName":{"name":"array_length_t_bytes_memory_ptr","nativeSrc":"62061:31:69","nodeType":"YulIdentifier","src":"62061:31:69"},"nativeSrc":"62061:38:69","nodeType":"YulFunctionCall","src":"62061:38:69"},"variables":[{"name":"length","nativeSrc":"62051:6:69","nodeType":"YulTypedName","src":"62051:6:69","type":""}]},{"nativeSrc":"62108:95:69","nodeType":"YulAssignment","src":"62108:95:69","value":{"arguments":[{"name":"pos","nativeSrc":"62191:3:69","nodeType":"YulIdentifier","src":"62191:3:69"},{"name":"length","nativeSrc":"62196:6:69","nodeType":"YulIdentifier","src":"62196:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"62115:75:69","nodeType":"YulIdentifier","src":"62115:75:69"},"nativeSrc":"62115:88:69","nodeType":"YulFunctionCall","src":"62115:88:69"},"variableNames":[{"name":"pos","nativeSrc":"62108:3:69","nodeType":"YulIdentifier","src":"62108:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"62251:5:69","nodeType":"YulIdentifier","src":"62251:5:69"},{"kind":"number","nativeSrc":"62258:4:69","nodeType":"YulLiteral","src":"62258:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"62247:3:69","nodeType":"YulIdentifier","src":"62247:3:69"},"nativeSrc":"62247:16:69","nodeType":"YulFunctionCall","src":"62247:16:69"},{"name":"pos","nativeSrc":"62265:3:69","nodeType":"YulIdentifier","src":"62265:3:69"},{"name":"length","nativeSrc":"62270:6:69","nodeType":"YulIdentifier","src":"62270:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"62212:34:69","nodeType":"YulIdentifier","src":"62212:34:69"},"nativeSrc":"62212:65:69","nodeType":"YulFunctionCall","src":"62212:65:69"},"nativeSrc":"62212:65:69","nodeType":"YulExpressionStatement","src":"62212:65:69"},{"nativeSrc":"62286:23:69","nodeType":"YulAssignment","src":"62286:23:69","value":{"arguments":[{"name":"pos","nativeSrc":"62297:3:69","nodeType":"YulIdentifier","src":"62297:3:69"},{"name":"length","nativeSrc":"62302:6:69","nodeType":"YulIdentifier","src":"62302:6:69"}],"functionName":{"name":"add","nativeSrc":"62293:3:69","nodeType":"YulIdentifier","src":"62293:3:69"},"nativeSrc":"62293:16:69","nodeType":"YulFunctionCall","src":"62293:16:69"},"variableNames":[{"name":"end","nativeSrc":"62286:3:69","nodeType":"YulIdentifier","src":"62286:3:69"}]}]},"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"61929:386:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"62018:5:69","nodeType":"YulTypedName","src":"62018:5:69","type":""},{"name":"pos","nativeSrc":"62025:3:69","nodeType":"YulTypedName","src":"62025:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"62033:3:69","nodeType":"YulTypedName","src":"62033:3:69","type":""}],"src":"61929:386:69"},{"body":{"nativeSrc":"62455:137:69","nodeType":"YulBlock","src":"62455:137:69","statements":[{"nativeSrc":"62466:100:69","nodeType":"YulAssignment","src":"62466:100:69","value":{"arguments":[{"name":"value0","nativeSrc":"62553:6:69","nodeType":"YulIdentifier","src":"62553:6:69"},{"name":"pos","nativeSrc":"62562:3:69","nodeType":"YulIdentifier","src":"62562:3:69"}],"functionName":{"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"62473:79:69","nodeType":"YulIdentifier","src":"62473:79:69"},"nativeSrc":"62473:93:69","nodeType":"YulFunctionCall","src":"62473:93:69"},"variableNames":[{"name":"pos","nativeSrc":"62466:3:69","nodeType":"YulIdentifier","src":"62466:3:69"}]},{"nativeSrc":"62576:10:69","nodeType":"YulAssignment","src":"62576:10:69","value":{"name":"pos","nativeSrc":"62583:3:69","nodeType":"YulIdentifier","src":"62583:3:69"},"variableNames":[{"name":"end","nativeSrc":"62576:3:69","nodeType":"YulIdentifier","src":"62576:3:69"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nativeSrc":"62321:271:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"62434:3:69","nodeType":"YulTypedName","src":"62434:3:69","type":""},{"name":"value0","nativeSrc":"62440:6:69","nodeType":"YulTypedName","src":"62440:6:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"62451:3:69","nodeType":"YulTypedName","src":"62451:3:69","type":""}],"src":"62321:271:69"},{"body":{"nativeSrc":"62704:73:69","nodeType":"YulBlock","src":"62704:73:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"62726:6:69","nodeType":"YulIdentifier","src":"62726:6:69"},{"kind":"number","nativeSrc":"62734:1:69","nodeType":"YulLiteral","src":"62734:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"62722:3:69","nodeType":"YulIdentifier","src":"62722:3:69"},"nativeSrc":"62722:14:69","nodeType":"YulFunctionCall","src":"62722:14:69"},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","kind":"string","nativeSrc":"62738:31:69","nodeType":"YulLiteral","src":"62738:31:69","type":"","value":"Address: call to non-contract"}],"functionName":{"name":"mstore","nativeSrc":"62715:6:69","nodeType":"YulIdentifier","src":"62715:6:69"},"nativeSrc":"62715:55:69","nodeType":"YulFunctionCall","src":"62715:55:69"},"nativeSrc":"62715:55:69","nodeType":"YulExpressionStatement","src":"62715:55:69"}]},"name":"store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","nativeSrc":"62598:179:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"62696:6:69","nodeType":"YulTypedName","src":"62696:6:69","type":""}],"src":"62598:179:69"},{"body":{"nativeSrc":"62929:220:69","nodeType":"YulBlock","src":"62929:220:69","statements":[{"nativeSrc":"62939:74:69","nodeType":"YulAssignment","src":"62939:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"63005:3:69","nodeType":"YulIdentifier","src":"63005:3:69"},{"kind":"number","nativeSrc":"63010:2:69","nodeType":"YulLiteral","src":"63010:2:69","type":"","value":"29"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"62946:58:69","nodeType":"YulIdentifier","src":"62946:58:69"},"nativeSrc":"62946:67:69","nodeType":"YulFunctionCall","src":"62946:67:69"},"variableNames":[{"name":"pos","nativeSrc":"62939:3:69","nodeType":"YulIdentifier","src":"62939:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"63111:3:69","nodeType":"YulIdentifier","src":"63111:3:69"}],"functionName":{"name":"store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","nativeSrc":"63022:88:69","nodeType":"YulIdentifier","src":"63022:88:69"},"nativeSrc":"63022:93:69","nodeType":"YulFunctionCall","src":"63022:93:69"},"nativeSrc":"63022:93:69","nodeType":"YulExpressionStatement","src":"63022:93:69"},{"nativeSrc":"63124:19:69","nodeType":"YulAssignment","src":"63124:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"63135:3:69","nodeType":"YulIdentifier","src":"63135:3:69"},{"kind":"number","nativeSrc":"63140:2:69","nodeType":"YulLiteral","src":"63140:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"63131:3:69","nodeType":"YulIdentifier","src":"63131:3:69"},"nativeSrc":"63131:12:69","nodeType":"YulFunctionCall","src":"63131:12:69"},"variableNames":[{"name":"end","nativeSrc":"63124:3:69","nodeType":"YulIdentifier","src":"63124:3:69"}]}]},"name":"abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack","nativeSrc":"62783:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"62917:3:69","nodeType":"YulTypedName","src":"62917:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"62925:3:69","nodeType":"YulTypedName","src":"62925:3:69","type":""}],"src":"62783:366:69"},{"body":{"nativeSrc":"63326:248:69","nodeType":"YulBlock","src":"63326:248:69","statements":[{"nativeSrc":"63336:26:69","nodeType":"YulAssignment","src":"63336:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"63348:9:69","nodeType":"YulIdentifier","src":"63348:9:69"},{"kind":"number","nativeSrc":"63359:2:69","nodeType":"YulLiteral","src":"63359:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"63344:3:69","nodeType":"YulIdentifier","src":"63344:3:69"},"nativeSrc":"63344:18:69","nodeType":"YulFunctionCall","src":"63344:18:69"},"variableNames":[{"name":"tail","nativeSrc":"63336:4:69","nodeType":"YulIdentifier","src":"63336:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"63383:9:69","nodeType":"YulIdentifier","src":"63383:9:69"},{"kind":"number","nativeSrc":"63394:1:69","nodeType":"YulLiteral","src":"63394:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"63379:3:69","nodeType":"YulIdentifier","src":"63379:3:69"},"nativeSrc":"63379:17:69","nodeType":"YulFunctionCall","src":"63379:17:69"},{"arguments":[{"name":"tail","nativeSrc":"63402:4:69","nodeType":"YulIdentifier","src":"63402:4:69"},{"name":"headStart","nativeSrc":"63408:9:69","nodeType":"YulIdentifier","src":"63408:9:69"}],"functionName":{"name":"sub","nativeSrc":"63398:3:69","nodeType":"YulIdentifier","src":"63398:3:69"},"nativeSrc":"63398:20:69","nodeType":"YulFunctionCall","src":"63398:20:69"}],"functionName":{"name":"mstore","nativeSrc":"63372:6:69","nodeType":"YulIdentifier","src":"63372:6:69"},"nativeSrc":"63372:47:69","nodeType":"YulFunctionCall","src":"63372:47:69"},"nativeSrc":"63372:47:69","nodeType":"YulExpressionStatement","src":"63372:47:69"},{"nativeSrc":"63428:139:69","nodeType":"YulAssignment","src":"63428:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"63562:4:69","nodeType":"YulIdentifier","src":"63562:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack","nativeSrc":"63436:124:69","nodeType":"YulIdentifier","src":"63436:124:69"},"nativeSrc":"63436:131:69","nodeType":"YulFunctionCall","src":"63436:131:69"},"variableNames":[{"name":"tail","nativeSrc":"63428:4:69","nodeType":"YulIdentifier","src":"63428:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"63155:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"63306:9:69","nodeType":"YulTypedName","src":"63306:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"63321:4:69","nodeType":"YulTypedName","src":"63321:4:69","type":""}],"src":"63155:419:69"}]},"contents":"{\n\n    function array_length_t_string_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function copy_memory_to_memory_with_cleanup(src, dst, length) {\n\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n        let length := array_length_t_string_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0,  tail)\n\n    }\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function validator_revert_t_uint256(value) {\n        if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_uint256(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_bool(value) -> cleaned {\n        cleaned := iszero(iszero(value))\n    }\n\n    function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n        mstore(pos, cleanup_t_bool(value))\n    }\n\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_bool_to_t_bool_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint256(value))\n    }\n\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function cleanup_t_address_payable(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address_payable(value) {\n        if iszero(eq(value, cleanup_t_address_payable(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address_payable(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address_payable(value)\n    }\n\n    function abi_decode_tuple_t_address_payable(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address_payable(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function cleanup_t_contract$_IERC20Upgradeable_$1352(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function validator_revert_t_contract$_IERC20Upgradeable_$1352(value) {\n        if iszero(eq(value, cleanup_t_contract$_IERC20Upgradeable_$1352(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_IERC20Upgradeable_$1352(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_contract$_IERC20Upgradeable_$1352(value)\n    }\n\n    function abi_decode_tuple_t_contract$_IERC20Upgradeable_$1352(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_IERC20Upgradeable_$1352(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_uint8(value) -> cleaned {\n        cleaned := and(value, 0xff)\n    }\n\n    function abi_encode_t_uint8_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint8_to_t_uint8_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function identity(value) -> ret {\n        ret := value\n    }\n\n    function convert_t_uint160_to_t_uint160(value) -> converted {\n        converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n    }\n\n    function convert_t_uint160_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_uint160(value)\n    }\n\n    function convert_t_contract$_ComptrollerInterface_$9353_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_ComptrollerInterface_$9353_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_ComptrollerInterface_$9353_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_ComptrollerInterface_$9353__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_ComptrollerInterface_$9353_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function cleanup_t_contract$_ComptrollerInterface_$9353(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function validator_revert_t_contract$_ComptrollerInterface_$9353(value) {\n        if iszero(eq(value, cleanup_t_contract$_ComptrollerInterface_$9353(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_ComptrollerInterface_$9353(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_contract$_ComptrollerInterface_$9353(value)\n    }\n\n    function cleanup_t_contract$_InterestRateModel_$10266(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function validator_revert_t_contract$_InterestRateModel_$10266(value) {\n        if iszero(eq(value, cleanup_t_contract$_InterestRateModel_$10266(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_InterestRateModel_$10266(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_contract$_InterestRateModel_$10266(value)\n    }\n\n    function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n        revert(0, 0)\n    }\n\n    function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n        revert(0, 0)\n    }\n\n    function panic_error_0x41() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n\n    function finalize_allocation(memPtr, size) {\n        let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n        // protect against overflow\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n\n    function allocate_memory(size) -> memPtr {\n        memPtr := allocate_unbounded()\n        finalize_allocation(memPtr, size)\n    }\n\n    function array_allocation_size_t_string_memory_ptr(length) -> size {\n        // Make sure we can allocate memory without overflow\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n        size := round_up_to_mul_of_32(length)\n\n        // add length slot\n        size := add(size, 0x20)\n\n    }\n\n    function copy_calldata_to_memory_with_cleanup(src, dst, length) {\n\n        calldatacopy(dst, src, length)\n        mstore(add(dst, length), 0)\n\n    }\n\n    function abi_decode_available_length_t_string_memory_ptr(src, length, end) -> array {\n        array := allocate_memory(array_allocation_size_t_string_memory_ptr(length))\n        mstore(array, length)\n        let dst := add(array, 0x20)\n        if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n        copy_calldata_to_memory_with_cleanup(src, dst, length)\n    }\n\n    // string\n    function abi_decode_t_string_memory_ptr(offset, end) -> array {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        let length := calldataload(offset)\n        array := abi_decode_available_length_t_string_memory_ptr(add(offset, 0x20), length, end)\n    }\n\n    function validator_revert_t_uint8(value) {\n        if iszero(eq(value, cleanup_t_uint8(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_uint8(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_uint8(value)\n    }\n\n    function revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f() {\n        revert(0, 0)\n    }\n\n    function revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421() {\n        revert(0, 0)\n    }\n\n    // struct VTokenInterface.RiskManagementInit\n    function abi_decode_t_struct$_RiskManagementInit_$15613_memory_ptr(headStart, end) -> value {\n        if slt(sub(end, headStart), 0x40) { revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f() }\n        value := allocate_memory(0x40)\n\n        {\n            // shortfall\n\n            let offset := 0\n\n            mstore(add(value, 0x00), abi_decode_t_address(add(headStart, offset), end))\n\n        }\n\n        {\n            // protocolShareReserve\n\n            let offset := 32\n\n            mstore(add(value, 0x20), abi_decode_t_address_payable(add(headStart, offset), end))\n\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_contract$_ComptrollerInterface_$9353t_contract$_InterestRateModel_$10266t_uint256t_string_memory_ptrt_string_memory_ptrt_uint8t_addresst_addresst_struct$_RiskManagementInit_$15613_memory_ptrt_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10 {\n        if slt(sub(dataEnd, headStart), 384) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_contract$_ComptrollerInterface_$9353(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_contract$_InterestRateModel_$10266(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 96\n\n            value3 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := calldataload(add(headStart, 128))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value4 := abi_decode_t_string_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := calldataload(add(headStart, 160))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value5 := abi_decode_t_string_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 192\n\n            value6 := abi_decode_t_uint8(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 224\n\n            value7 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 256\n\n            value8 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 288\n\n            value9 := abi_decode_t_struct$_RiskManagementInit_$15613_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 352\n\n            value10 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_contract$_VTokenInterface_$16106(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function validator_revert_t_contract$_VTokenInterface_$16106(value) {\n        if iszero(eq(value, cleanup_t_contract$_VTokenInterface_$16106(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_VTokenInterface_$16106(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_contract$_VTokenInterface_$16106(value)\n    }\n\n    function validator_revert_t_bool(value) {\n        if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_bool(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_bool(value)\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_uint256t_contract$_VTokenInterface_$16106t_bool(headStart, dataEnd) -> value0, value1, value2, value3, value4 {\n        if slt(sub(dataEnd, headStart), 160) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 96\n\n            value3 := abi_decode_t_contract$_VTokenInterface_$16106(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 128\n\n            value4 := abi_decode_t_bool(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_contract$_InterestRateModel_$10266(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_InterestRateModel_$10266(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_IAccessControlManagerV8_$5080__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n        tail := add(headStart, 128)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value3,  add(headStart, 96))\n\n    }\n\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_t_address_payable_to_t_address_payable_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address_payable(value))\n    }\n\n    function abi_encode_tuple_t_address_payable__to_t_address_payable__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_address_payable_to_t_address_payable_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function convert_t_contract$_InterestRateModel_$10266_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_InterestRateModel_$10266_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_InterestRateModel_$10266_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_InterestRateModel_$10266__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_InterestRateModel_$10266_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_addresst_uint256t_contract$_VTokenInterface_$16106(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_contract$_VTokenInterface_$16106(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function panic_error_0x22() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x22)\n        revert(0, 0x24)\n    }\n\n    function extract_byte_array_length(data) -> length {\n        length := div(data, 2)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) {\n            length := and(length, 0x7f)\n        }\n\n        if eq(outOfPlaceEncoding, lt(length, 32)) {\n            panic_error_0x22()\n        }\n    }\n\n    function store_literal_in_memory_987a3f65bf6c5144d945a7d9587fa166ee3a901eb2b594a0815c3c20bf841a5e(memPtr) {\n\n        mstore(add(memPtr, 0), \"re-entered\")\n\n    }\n\n    function abi_encode_t_stringliteral_987a3f65bf6c5144d945a7d9587fa166ee3a901eb2b594a0815c3c20bf841a5e_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 10)\n        store_literal_in_memory_987a3f65bf6c5144d945a7d9587fa166ee3a901eb2b594a0815c3c20bf841a5e(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_987a3f65bf6c5144d945a7d9587fa166ee3a901eb2b594a0815c3c20bf841a5e__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_987a3f65bf6c5144d945a7d9587fa166ee3a901eb2b594a0815c3c20bf841a5e_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_02b93ba8f3ff373adacf808c6433da448d23929cf304a4f44f1f328895f6c896(memPtr) {\n\n        mstore(add(memPtr, 0), \"VToken::sweepToken: only admin c\")\n\n        mstore(add(memPtr, 32), \"an sweep tokens\")\n\n    }\n\n    function abi_encode_t_stringliteral_02b93ba8f3ff373adacf808c6433da448d23929cf304a4f44f1f328895f6c896_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 47)\n        store_literal_in_memory_02b93ba8f3ff373adacf808c6433da448d23929cf304a4f44f1f328895f6c896(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_02b93ba8f3ff373adacf808c6433da448d23929cf304a4f44f1f328895f6c896__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_02b93ba8f3ff373adacf808c6433da448d23929cf304a4f44f1f328895f6c896_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_a09eed6cffa426a240963a23cca18c0902c7833c31318eeb460f5ddbd7830a32(memPtr) {\n\n        mstore(add(memPtr, 0), \"VToken::sweepToken: can not swee\")\n\n        mstore(add(memPtr, 32), \"p underlying token\")\n\n    }\n\n    function abi_encode_t_stringliteral_a09eed6cffa426a240963a23cca18c0902c7833c31318eeb460f5ddbd7830a32_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 50)\n        store_literal_in_memory_a09eed6cffa426a240963a23cca18c0902c7833c31318eeb460f5ddbd7830a32(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_a09eed6cffa426a240963a23cca18c0902c7833c31318eeb460f5ddbd7830a32__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_a09eed6cffa426a240963a23cca18c0902c7833c31318eeb460f5ddbd7830a32_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function store_literal_in_memory_9404501c113e486e0697e27bc7935ec4eb29770a945d28921aff00cee17e3fed(memPtr) {\n\n        mstore(add(memPtr, 0), \"Invalid Input\")\n\n    }\n\n    function abi_encode_t_stringliteral_9404501c113e486e0697e27bc7935ec4eb29770a945d28921aff00cee17e3fed_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 13)\n        store_literal_in_memory_9404501c113e486e0697e27bc7935ec4eb29770a945d28921aff00cee17e3fed(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_9404501c113e486e0697e27bc7935ec4eb29770a945d28921aff00cee17e3fed__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_9404501c113e486e0697e27bc7935ec4eb29770a945d28921aff00cee17e3fed_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function panic_error_0x11() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n\n    function checked_add_t_uint256(x, y) -> sum {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        sum := add(x, y)\n\n        if gt(x, sum) { panic_error_0x11() }\n\n    }\n\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function checked_sub_t_uint256(x, y) -> diff {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        diff := sub(x, y)\n\n        if gt(diff, x) { panic_error_0x11() }\n\n    }\n\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function cleanup_t_rational_0_by_1(value) -> cleaned {\n        cleaned := value\n    }\n\n    function convert_t_rational_0_by_1_to_t_uint256(value) -> converted {\n        converted := cleanup_t_uint256(identity(cleanup_t_rational_0_by_1(value)))\n    }\n\n    function abi_encode_t_rational_0_by_1_to_t_uint256_fromStack(value, pos) {\n        mstore(pos, convert_t_rational_0_by_1_to_t_uint256(value))\n    }\n\n    function abi_encode_tuple_t_uint256_t_rational_0_by_1_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_rational_0_by_1_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc(memPtr) {\n\n        mstore(add(memPtr, 0), \"Ownable2Step: caller is not the \")\n\n        mstore(add(memPtr, 32), \"new owner\")\n\n    }\n\n    function abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 41)\n        store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759(memPtr) {\n\n        mstore(add(memPtr, 0), \"Initializable: contract is alrea\")\n\n        mstore(add(memPtr, 32), \"dy initialized\")\n\n    }\n\n    function abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 46)\n        store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function cleanup_t_rational_1_by_1(value) -> cleaned {\n        cleaned := value\n    }\n\n    function convert_t_rational_1_by_1_to_t_uint8(value) -> converted {\n        converted := cleanup_t_uint8(identity(cleanup_t_rational_1_by_1(value)))\n    }\n\n    function abi_encode_t_rational_1_by_1_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, convert_t_rational_1_by_1_to_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_rational_1_by_1_to_t_uint8_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function store_literal_in_memory_500b2609d0ae28daff27dc4a068dcae2171019163b460eb756cfa6b0b62ba48a(memPtr) {\n\n        mstore(add(memPtr, 0), \"decreased allowance below zero\")\n\n    }\n\n    function abi_encode_t_stringliteral_500b2609d0ae28daff27dc4a068dcae2171019163b460eb756cfa6b0b62ba48a_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 30)\n        store_literal_in_memory_500b2609d0ae28daff27dc4a068dcae2171019163b460eb756cfa6b0b62ba48a(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_500b2609d0ae28daff27dc4a068dcae2171019163b460eb756cfa6b0b62ba48a__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_500b2609d0ae28daff27dc4a068dcae2171019163b460eb756cfa6b0b62ba48a_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_9ab90068dc5fe9f7def6aab4ae887ed8eff65c4b83c1b9ba6beb99101f1ae8ea(memPtr) {\n\n        mstore(add(memPtr, 0), \"borrow rate is absurdly high\")\n\n    }\n\n    function abi_encode_t_stringliteral_9ab90068dc5fe9f7def6aab4ae887ed8eff65c4b83c1b9ba6beb99101f1ae8ea_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 28)\n        store_literal_in_memory_9ab90068dc5fe9f7def6aab4ae887ed8eff65c4b83c1b9ba6beb99101f1ae8ea(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_9ab90068dc5fe9f7def6aab4ae887ed8eff65c4b83c1b9ba6beb99101f1ae8ea__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_9ab90068dc5fe9f7def6aab4ae887ed8eff65c4b83c1b9ba6beb99101f1ae8ea_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart , value4, value3, value2, value1, value0) -> tail {\n        tail := add(headStart, 160)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value3,  add(headStart, 96))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value4,  add(headStart, 128))\n\n    }\n\n    function store_literal_in_memory_d4c9546ba1ca6ea1666b690b57d3e7501f0db18dc1e34262166d8300121d27c9(memPtr) {\n\n        mstore(add(memPtr, 0), \"only shortfall contract can upda\")\n\n        mstore(add(memPtr, 32), \"te bad debt\")\n\n    }\n\n    function abi_encode_t_stringliteral_d4c9546ba1ca6ea1666b690b57d3e7501f0db18dc1e34262166d8300121d27c9_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 43)\n        store_literal_in_memory_d4c9546ba1ca6ea1666b690b57d3e7501f0db18dc1e34262166d8300121d27c9(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_d4c9546ba1ca6ea1666b690b57d3e7501f0db18dc1e34262166d8300121d27c9__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_d4c9546ba1ca6ea1666b690b57d3e7501f0db18dc1e34262166d8300121d27c9_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_65583512d4629ad47546f868609492cfe1fd22a35bae5f1962d105953201ab5e(memPtr) {\n\n        mstore(add(memPtr, 0), \"more than bad debt recovered fro\")\n\n        mstore(add(memPtr, 32), \"m auction\")\n\n    }\n\n    function abi_encode_t_stringliteral_65583512d4629ad47546f868609492cfe1fd22a35bae5f1962d105953201ab5e_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 41)\n        store_literal_in_memory_65583512d4629ad47546f868609492cfe1fd22a35bae5f1962d105953201ab5e(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_65583512d4629ad47546f868609492cfe1fd22a35bae5f1962d105953201ab5e__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_65583512d4629ad47546f868609492cfe1fd22a35bae5f1962d105953201ab5e_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function panic_error_0x21() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n\n    function validator_assert_t_enum$_IncomeType_$16201(value) {\n        if iszero(lt(value, 2)) { panic_error_0x21() }\n    }\n\n    function cleanup_t_enum$_IncomeType_$16201(value) -> cleaned {\n        cleaned := value validator_assert_t_enum$_IncomeType_$16201(value)\n    }\n\n    function convert_t_enum$_IncomeType_$16201_to_t_uint8(value) -> converted {\n        converted := cleanup_t_enum$_IncomeType_$16201(value)\n    }\n\n    function abi_encode_t_enum$_IncomeType_$16201_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, convert_t_enum$_IncomeType_$16201_to_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_enum$_IncomeType_$16201__to_t_address_t_address_t_uint8__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_enum$_IncomeType_$16201_to_t_uint8_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe(memPtr) {\n\n        mstore(add(memPtr, 0), \"Ownable: caller is not the owner\")\n\n    }\n\n    function abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 32)\n        store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb(memPtr) {\n\n        mstore(add(memPtr, 0), \"invalid acess control manager ad\")\n\n        mstore(add(memPtr, 32), \"dress\")\n\n    }\n\n    function abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 37)\n        store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256__fromStack_reversed(headStart , value4, value3, value2, value1, value0) -> tail {\n        tail := add(headStart, 160)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_address_to_t_address_fromStack(value2,  add(headStart, 64))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value3,  add(headStart, 96))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value4,  add(headStart, 128))\n\n    }\n\n    function checked_mul_t_uint256(x, y) -> product {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        let product_raw := mul(x, y)\n        product := cleanup_t_uint256(product_raw)\n\n        // overflow, if x != 0 and y != product/x\n        if iszero(\n            or(\n                iszero(x),\n                eq(y, div(product, x))\n            )\n        ) { panic_error_0x11() }\n\n    }\n\n    function panic_error_0x12() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n\n    function checked_div_t_uint256(x, y) -> r {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        if iszero(y) { panic_error_0x12() }\n\n        r := div(x, y)\n    }\n\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function abi_encode_tuple_t_address_t_string_memory_ptr__to_t_address_t_string_memory_ptr__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        mstore(add(headStart, 32), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value1,  tail)\n\n    }\n\n    function abi_decode_t_bool_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_bool(value)\n    }\n\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_bool_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_string_memory_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        mstore(add(headStart, 64), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value2,  tail)\n\n    }\n\n    function store_literal_in_memory_e7cef2e7b515a83b650bc43dbe7230ede3601779d8be25fbf237261dccd3d9f2(memPtr) {\n\n        mstore(add(memPtr, 0), \"one of redeemTokensIn or redeemA\")\n\n        mstore(add(memPtr, 32), \"mountIn must be zero\")\n\n    }\n\n    function abi_encode_t_stringliteral_e7cef2e7b515a83b650bc43dbe7230ede3601779d8be25fbf237261dccd3d9f2_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 52)\n        store_literal_in_memory_e7cef2e7b515a83b650bc43dbe7230ede3601779d8be25fbf237261dccd3d9f2(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_e7cef2e7b515a83b650bc43dbe7230ede3601779d8be25fbf237261dccd3d9f2__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_e7cef2e7b515a83b650bc43dbe7230ede3601779d8be25fbf237261dccd3d9f2_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function increment_t_uint256(value) -> ret {\n        value := cleanup_t_uint256(value)\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n\n    function store_literal_in_memory_4a73c8aa35e7317ade5f993a0242f1c31eb3c6b8eb0e0c438aee70e953928ca6(memPtr) {\n\n        mstore(add(memPtr, 0), \"redeemAmount is zero\")\n\n    }\n\n    function abi_encode_t_stringliteral_4a73c8aa35e7317ade5f993a0242f1c31eb3c6b8eb0e0c438aee70e953928ca6_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 20)\n        store_literal_in_memory_4a73c8aa35e7317ade5f993a0242f1c31eb3c6b8eb0e0c438aee70e953928ca6(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_4a73c8aa35e7317ade5f993a0242f1c31eb3c6b8eb0e0c438aee70e953928ca6__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_4a73c8aa35e7317ade5f993a0242f1c31eb3c6b8eb0e0c438aee70e953928ca6_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n        tail := add(headStart, 128)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value3,  add(headStart, 96))\n\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_address_t_uint256__to_t_address_t_address_t_address_t_uint256__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n        tail := add(headStart, 128)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_address_to_t_address_fromStack(value2,  add(headStart, 64))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value3,  add(headStart, 96))\n\n    }\n\n    function store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b(memPtr) {\n\n        mstore(add(memPtr, 0), \"Initializable: contract is not i\")\n\n        mstore(add(memPtr, 32), \"nitializing\")\n\n    }\n\n    function abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 43)\n        store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_1bebca39b478e42a6b88dcff87467d0e08b422ebc72c3d074bd236265624e814(memPtr) {\n\n        mstore(add(memPtr, 0), \"market may only be initialized o\")\n\n        mstore(add(memPtr, 32), \"nce\")\n\n    }\n\n    function abi_encode_t_stringliteral_1bebca39b478e42a6b88dcff87467d0e08b422ebc72c3d074bd236265624e814_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 35)\n        store_literal_in_memory_1bebca39b478e42a6b88dcff87467d0e08b422ebc72c3d074bd236265624e814(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_1bebca39b478e42a6b88dcff87467d0e08b422ebc72c3d074bd236265624e814__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_1bebca39b478e42a6b88dcff87467d0e08b422ebc72c3d074bd236265624e814_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_427426a02e699ec0d6d6d22f3254c7e686696e18d2de7af9416d6b5cc786ff6c(memPtr) {\n\n        mstore(add(memPtr, 0), \"initial exchange rate must be gr\")\n\n        mstore(add(memPtr, 32), \"eater than zero.\")\n\n    }\n\n    function abi_encode_t_stringliteral_427426a02e699ec0d6d6d22f3254c7e686696e18d2de7af9416d6b5cc786ff6c_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 48)\n        store_literal_in_memory_427426a02e699ec0d6d6d22f3254c7e686696e18d2de7af9416d6b5cc786ff6c(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_427426a02e699ec0d6d6d22f3254c7e686696e18d2de7af9416d6b5cc786ff6c__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_427426a02e699ec0d6d6d22f3254c7e686696e18d2de7af9416d6b5cc786ff6c_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function array_dataslot_t_string_storage(ptr) -> data {\n        data := ptr\n\n        mstore(0, ptr)\n        data := keccak256(0, 0x20)\n\n    }\n\n    function divide_by_32_ceil(value) -> result {\n        result := div(add(value, 31), 32)\n    }\n\n    function shift_left_dynamic(bits, value) -> newValue {\n        newValue :=\n\n        shl(bits, value)\n\n    }\n\n    function update_byte_slice_dynamic32(value, shiftBytes, toInsert) -> result {\n        let shiftBits := mul(shiftBytes, 8)\n        let mask := shift_left_dynamic(shiftBits, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n        toInsert := shift_left_dynamic(shiftBits, toInsert)\n        value := and(value, not(mask))\n        result := or(value, and(toInsert, mask))\n    }\n\n    function convert_t_uint256_to_t_uint256(value) -> converted {\n        converted := cleanup_t_uint256(identity(cleanup_t_uint256(value)))\n    }\n\n    function prepare_store_t_uint256(value) -> ret {\n        ret := value\n    }\n\n    function update_storage_value_t_uint256_to_t_uint256(slot, offset, value_0) {\n        let convertedValue_0 := convert_t_uint256_to_t_uint256(value_0)\n        sstore(slot, update_byte_slice_dynamic32(sload(slot), offset, prepare_store_t_uint256(convertedValue_0)))\n    }\n\n    function zero_value_for_split_t_uint256() -> ret {\n        ret := 0\n    }\n\n    function storage_set_to_zero_t_uint256(slot, offset) {\n        let zero_0 := zero_value_for_split_t_uint256()\n        update_storage_value_t_uint256_to_t_uint256(slot, offset, zero_0)\n    }\n\n    function clear_storage_range_t_bytes1(start, end) {\n        for {} lt(start, end) { start := add(start, 1) }\n        {\n            storage_set_to_zero_t_uint256(start, 0)\n        }\n    }\n\n    function clean_up_bytearray_end_slots_t_string_storage(array, len, startIndex) {\n\n        if gt(len, 31) {\n            let dataArea := array_dataslot_t_string_storage(array)\n            let deleteStart := add(dataArea, divide_by_32_ceil(startIndex))\n            // If we are clearing array to be short byte array, we want to clear only data starting from array data area.\n            if lt(startIndex, 32) { deleteStart := dataArea }\n            clear_storage_range_t_bytes1(deleteStart, add(dataArea, divide_by_32_ceil(len)))\n        }\n\n    }\n\n    function shift_right_unsigned_dynamic(bits, value) -> newValue {\n        newValue :=\n\n        shr(bits, value)\n\n    }\n\n    function mask_bytes_dynamic(data, bytes) -> result {\n        let mask := not(shift_right_unsigned_dynamic(mul(8, bytes), not(0)))\n        result := and(data, mask)\n    }\n    function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used {\n        // we want to save only elements that are part of the array after resizing\n        // others should be set to zero\n        data := mask_bytes_dynamic(data, len)\n        used := or(data, mul(2, len))\n    }\n    function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src) {\n\n        let newLen := array_length_t_string_memory_ptr(src)\n        // Make sure array length is sane\n        if gt(newLen, 0xffffffffffffffff) { panic_error_0x41() }\n\n        let oldLen := extract_byte_array_length(sload(slot))\n\n        // potentially truncate data\n        clean_up_bytearray_end_slots_t_string_storage(slot, oldLen, newLen)\n\n        let srcOffset := 0\n\n        srcOffset := 0x20\n\n        switch gt(newLen, 31)\n        case 1 {\n            let loopEnd := and(newLen, not(0x1f))\n\n            let dstPtr := array_dataslot_t_string_storage(slot)\n            let i := 0\n            for { } lt(i, loopEnd) { i := add(i, 0x20) } {\n                sstore(dstPtr, mload(add(src, srcOffset)))\n                dstPtr := add(dstPtr, 1)\n                srcOffset := add(srcOffset, 32)\n            }\n            if lt(loopEnd, newLen) {\n                let lastValue := mload(add(src, srcOffset))\n                sstore(dstPtr, mask_bytes_dynamic(lastValue, and(newLen, 0x1f)))\n            }\n            sstore(slot, add(mul(newLen, 2), 1))\n        }\n        default {\n            let value := 0\n            if newLen {\n                value := mload(add(src, srcOffset))\n            }\n            sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n        }\n    }\n\n    function store_literal_in_memory_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637(memPtr) {\n\n        mstore(add(memPtr, 0), \"marker method returned false\")\n\n    }\n\n    function abi_encode_t_stringliteral_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 28)\n        store_literal_in_memory_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n        tail := add(headStart, 128)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_address_to_t_address_fromStack(value2,  add(headStart, 64))\n\n        abi_encode_t_address_to_t_address_fromStack(value3,  add(headStart, 96))\n\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_address_t_address_t_uint256__to_t_address_t_address_t_address_t_address_t_uint256__fromStack_reversed(headStart , value4, value3, value2, value1, value0) -> tail {\n        tail := add(headStart, 160)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_address_to_t_address_fromStack(value2,  add(headStart, 64))\n\n        abi_encode_t_address_to_t_address_fromStack(value3,  add(headStart, 96))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value4,  add(headStart, 128))\n\n    }\n\n    function store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd(memPtr) {\n\n        mstore(add(memPtr, 0), \"SafeERC20: ERC20 operation did n\")\n\n        mstore(add(memPtr, 32), \"ot succeed\")\n\n    }\n\n    function abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 42)\n        store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_bool__to_t_address_t_address_t_address_t_uint256_t_bool__fromStack_reversed(headStart , value4, value3, value2, value1, value0) -> tail {\n        tail := add(headStart, 160)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_address_to_t_address_fromStack(value2,  add(headStart, 64))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value3,  add(headStart, 96))\n\n        abi_encode_t_bool_to_t_bool_fromStack(value4,  add(headStart, 128))\n\n    }\n\n    function abi_decode_tuple_t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function store_literal_in_memory_b1c7e90880e9fbdf9aa93d626a842fbb127521a1492c295dbd98c98157e1e4f7(memPtr) {\n\n        mstore(add(memPtr, 0), \"LIQUIDATE_COMPTROLLER_CALCULATE_\")\n\n        mstore(add(memPtr, 32), \"AMOUNT_SEIZE_FAILED\")\n\n    }\n\n    function abi_encode_t_stringliteral_b1c7e90880e9fbdf9aa93d626a842fbb127521a1492c295dbd98c98157e1e4f7_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 51)\n        store_literal_in_memory_b1c7e90880e9fbdf9aa93d626a842fbb127521a1492c295dbd98c98157e1e4f7(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_b1c7e90880e9fbdf9aa93d626a842fbb127521a1492c295dbd98c98157e1e4f7__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_b1c7e90880e9fbdf9aa93d626a842fbb127521a1492c295dbd98c98157e1e4f7_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_bffc2aa76a1b975ca5ba1defccc66ee3d6e80e3f510ac216baa6baef4008863e(memPtr) {\n\n        mstore(add(memPtr, 0), \"LIQUIDATE_SEIZE_TOO_MUCH\")\n\n    }\n\n    function abi_encode_t_stringliteral_bffc2aa76a1b975ca5ba1defccc66ee3d6e80e3f510ac216baa6baef4008863e_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 24)\n        store_literal_in_memory_bffc2aa76a1b975ca5ba1defccc66ee3d6e80e3f510ac216baa6baef4008863e(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_bffc2aa76a1b975ca5ba1defccc66ee3d6e80e3f510ac216baa6baef4008863e__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_bffc2aa76a1b975ca5ba1defccc66ee3d6e80e3f510ac216baa6baef4008863e_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_address_t_address_t_uint256_t_uint256__fromStack_reversed(headStart , value5, value4, value3, value2, value1, value0) -> tail {\n        tail := add(headStart, 192)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_address_to_t_address_fromStack(value2,  add(headStart, 64))\n\n        abi_encode_t_address_to_t_address_fromStack(value3,  add(headStart, 96))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value4,  add(headStart, 128))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value5,  add(headStart, 160))\n\n    }\n\n    function store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c(memPtr) {\n\n        mstore(add(memPtr, 0), \"Address: insufficient balance fo\")\n\n        mstore(add(memPtr, 32), \"r call\")\n\n    }\n\n    function abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 38)\n        store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function array_length_t_bytes_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n        updated_pos := pos\n    }\n\n    function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n        let length := array_length_t_bytes_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, length)\n    }\n\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n        pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0,  pos)\n\n        end := pos\n    }\n\n    function store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad(memPtr) {\n\n        mstore(add(memPtr, 0), \"Address: call to non-contract\")\n\n    }\n\n    function abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 29)\n        store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"12473":[{"length":32,"start":6327}],"16219":[{"length":32,"start":1615}],"16222":[{"length":32,"start":2144}],"16229":[{"length":32,"start":7325}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106104335760003560e01c80637821a51411610236578063b2a02ff11161013b578063dd62ed3e116100c3578063ef60450c11610087578063ef60450c1461091b578063f2fde38b1461092e578063f3fdb15a14610941578063f5e3c46214610954578063f8f9da281461096757600080fd5b8063dd62ed3e1461089e578063df3a516e146108d7578063e1d146fb146108ea578063e30c3978146108f2578063e9a44fd91461090357600080fd5b8063c37f68e21161010a578063c37f68e214610825578063c5ebeaec14610848578063c7ad08951461085b578063d1109c2f14610882578063db006a751461088b57600080fd5b8063b2a02ff1146107f0578063b4a0bdf314610803578063bbcac55714610814578063bd6d894d1461081d57600080fd5b806395d89b41116101be578063a6afed951161018d578063a6afed95146107bb578063a9059cbb146107c3578063aa5af0fd146107d6578063ae96f141146107df578063ae9d70b0146107e857600080fd5b806395d89b411461077a57806395dd919314610782578063a0712d6814610795578063a457c2d7146107a857600080fd5b80638a42c319116102055780638a42c319146107275780638bbdb6db1461073a5780638bcd40161461074d5780638da5cb5b146107605780638f840ddd1461077157600080fd5b80637821a514146106e657806379ba5097146106f9578063852a12e314610701578063856e5bb31461071457600080fd5b8063313ce5671161033c5780636752e702116102c45780636f307dc3116102935780636f307dc31461068257806370a082311461069a578063715018a6146106c357806373acee98146106cb578063757212f0146106d357600080fd5b80636752e702146106415780636857249c1461064a57806369ab3250146106715780636c540baf1461067957600080fd5b80633d9ea3a11161030b5780633d9ea3a1146105eb57806341f641ee146105f257806344fe6ffe1461060557806347bd3718146106185780635fe3b5671461062157600080fd5b8063313ce567146105a357806339509351146105bd5780633af9e669146105d05780633b1d21a2146105e357600080fd5b8063182df0f5116103bf578063210bc0521161038e578063210bc0521461054457806323323e031461055757806323b872dd1461056a5780632464176b1461057d5780632608f8181461059057600080fd5b8063182df0f5146104f657806319b1faef146104fe5780631be195601461051e5780631c4469831461053157600080fd5b80630e752702116104065780630e7527021461049e578063107568df146104be578063173b9904146104d157806317bfdfbc146104da57806318160ddd146104ed57600080fd5b806306fdde031461043857806307e2795914610456578063095ea7b31461046b5780630e32cb861461048b575b600080fd5b61044061096f565b60405161044d919061407d565b60405180910390f35b6104696104643660046140a6565b6109fd565b005b61047e6104793660046140ec565b610a64565b60405161044d9190614133565b610469610499366004614141565b610adc565b6104b16104ac3660046140a6565b610af0565b60405161044d9190614168565b6104696104cc366004614141565b610b4a565b6104b160d05481565b6104b16104e8366004614141565b610b5b565b6104b160d55481565b6104b1610bb0565b60db54610511906001600160a01b031681565b60405161044d919061417f565b61046961052c3660046141ac565b610bbf565b61046961053f3660046140a6565b610cec565b6104b16105523660046140ec565b610d67565b6104b16105653660046140ec565b610dcb565b61047e6105783660046141cd565b610e17565b61046961058b3660046140a6565b610e69565b6104b161059e3660046140ec565b610eea565b60cc546105b09060ff1681565b60405161044d9190614226565b61047e6105cb3660046140ec565b610f45565b6104b16105de366004614141565b610ff1565b6104b1611037565b600161047e565b610469610600366004614141565b611041565b6104696106133660046141cd565b611052565b6104b160d35481565b60cd54610634906001600160a01b031681565b60405161044d9190614276565b6104b160da5481565b6104b17f000000000000000000000000000000000000000000000000000000000000000081565b6104b1600081565b6104b160d15481565b60c9546105119061010090046001600160a01b031681565b6104b16106a8366004614141565b6001600160a01b0316600090815260d7602052604090205490565b6104696112e7565b6104b16112fb565b6104696106e13660046140a6565b611347565b6104696106f43660046140a6565b61146e565b6104696114bd565b6104b161070f3660046140a6565b6114f2565b6104b16107223660046140ec565b61154c565b6104696107353660046143dd565b611574565b610469610748366004614517565b611662565b61046961075b3660046141ac565b6116a1565b6033546001600160a01b0316610511565b6104b160d45481565b6104406116f1565b6104b1610790366004614141565b6116fe565b6104b16107a33660046140a6565b611709565b61047e6107b63660046140ec565b61174c565b6104b16117fb565b61047e6107d13660046140ec565b611a09565b6104b160d25481565b6104b160dd5481565b6104b1611a5a565b6104696107fe3660046141cd565b611ae3565b6097546001600160a01b0316610634565b6104b160d65481565b6104b1611b2d565b610838610833366004614141565b611b7f565b60405161044d949392919061458f565b6104b16108563660046140a6565b611bc0565b61047e7f000000000000000000000000000000000000000000000000000000000000000081565b6104b160dc5481565b6104b16108993660046140a6565b611c03565b6104b16108ac3660046145c4565b6001600160a01b03918216600090815260d86020908152604080832093909416825291909152205490565b6104b16108e53660046140ec565b611c48565b6104b1611c96565b6065546001600160a01b0316610511565b60cc546105119061010090046001600160a01b031681565b6104696109293660046140a6565b611cc4565b61046961093c366004614141565b611d59565b60ce54610634906001600160a01b031681565b6104b16109623660046145f7565b611dca565b6104b1611de4565b60ca805461097c90614653565b80601f01602080910402602001604051908101604052809291908181526020018280546109a890614653565b80156109f55780601f106109ca576101008083540402835291602001916109f5565b820191906000526020600020905b8154815290600101906020018083116109d857829003601f168201915b505050505081565b60c95460ff16610a285760405162461bcd60e51b8152600401610a1f906146a3565b60405180910390fd5b60c9805460ff19169055610a3a6117fb565b50610a43611c96565b60dd5414610a5457610a5481611e30565b5060c9805460ff19166001179055565b6000610a6f83611fb8565b33600081815260d8602090815260408083206001600160a01b038816808552925291829020859055905182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ac8908790614168565b60405180910390a360019150505b92915050565b610ae4611fdf565b610aed81612009565b50565b60c95460009060ff16610b155760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055610b276117fb565b50610b3333338461208e565b506000905060c9805460ff19166001179055919050565b610b52611fdf565b610aed8161224f565b60c95460009060ff16610b805760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055610b926117fb565b50610b9c826122b2565b905060c9805460ff19166001179055919050565b6000610bba612322565b905090565b6033546001600160a01b03163314610be95760405162461bcd60e51b8152600401610a1f90614702565b60c9546001600160a01b03610100909104811690821603610c1c5760405162461bcd60e51b8152600401610a1f90614761565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610c4b90309060040161417f565b602060405180830381865afa158015610c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8c919061477c565b9050610cb4610ca36033546001600160a01b031690565b6001600160a01b0384169083612397565b6040516001600160a01b038316907f35ce4c546a473796a8e70ec2d4af4f2031afe357afa7057b6ea7fa340730e1b290600090a25050565b60c95460ff16610d0e5760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff1916905560408051808201909152601981527f73657452657365727665466163746f722875696e7432353629000000000000006020820152610d55906123f2565b610d5d6117fb565b50610a5481612490565b60c95460009060ff16610d8c5760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055610d9f8361251c565b610da76117fb565b50610db583338460006125ac565b50600060c9805460ff1916600117905592915050565b60c95460009060ff16610df05760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055610e0383611fb8565b610e0b6117fb565b50610db5338484612869565b60c95460009060ff16610e3c5760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055610e5233858585612a68565b50600160c9805460ff191660011790559392505050565b610e8a604051806060016040528060248152602001615373602491396123f2565b60008111610eaa5760405162461bcd60e51b8152600401610a1f906147c1565b7fc2ac513cdb57f91eb2bef4db918c285829524f549682b99717c6cb06cc01118360dc5482604051610edd9291906147d1565b60405180910390a160dc55565b60c95460009060ff16610f0f5760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055610f216117fb565b50610f2d33848461208e565b506000905060c9805460ff1916600117905592915050565b6000610f5083611fb8565b33600081815260d8602090815260408083206001600160a01b0388168452909152902054610f7e8482614802565b6001600160a01b03808416600081815260d860209081526040808320948b1680845294909152908190208490555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610fde908590614168565b60405180910390a3506001949350505050565b6000806040518060200160405280611007611b2d565b90526001600160a01b038416600090815260d76020526040902054909150611030908290612c73565b9392505050565b6000610bba612c8b565b611049611fdf565b610aed81612cc1565b60c95460ff166110745760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff1916905580156110e95760cd5460405163eade3eed60e01b81526001600160a01b039091169063eade3eed906110b69030908690600401614815565b600060405180830381600087803b1580156110d057600080fd5b505af11580156110e4573d6000803e3d6000fd5b505050505b60cd546001600160a01b0316331461111457604051632c40292560e01b815260040160405180910390fd5b600061111f836122b2565b60d35490915060008315611198576111378685612d1c565b90506111438183614830565b91506001600160a01b038086169087167f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a18361117f8188614830565b8660405161118f93929190614843565b60405180910390a35b60006111a48285614830565b905080156112685760d65460006111bb8383614802565b90506111c78386614830565b94508060d681905550876001600160a01b0316306001600160a01b03167f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a18560008960405161121893929190614880565b60405180910390a3876001600160a01b03167f90125ffdb441e57c4f6bf69789206424859f206bea5727f2d81ad2470826ef6a84848460405161125d93929190614843565b60405180910390a250505b6001600160a01b03808716600081815260d9602052604080822091825560d25460019092019190915560d38690555190918916907f9fe0294717a8efbc6ace1c151b73a4c89982339b2228a27d1ca21394e348986f906112c9908990614168565b60405180910390a3505060c9805460ff191660011790555050505050565b6112ef611fdf565b6112f96000612e34565b565b60c95460009060ff166113205760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff191690556113326117fb565b505060d35460c9805460ff1916600117905590565b6113856040518060400160405280601e81526020017f73657450726f746f636f6c5365697a6553686172652875696e743235362900008152506123f2565b60cd5460408051634ada90af60e01b815290516000926001600160a01b031691634ada90af9160048083019260209291908290030181865afa1580156113cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f3919061477c565b905080611408670de0b6b3a764000084614802565b11156114275760405163034dd2c160e11b815260040160405180910390fd5b60da8054908390556040517ff5815f353a60e815cce7553e4f60c533a59d26b1b5504ea4b6db8d60da3e4da29061146190839086906147d1565b60405180910390a1505050565b60c95460ff166114905760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff191690556114a26117fb565b506114ac81612e4d565b505060c9805460ff19166001179055565b60655433906001600160a01b031681146114e95760405162461bcd60e51b8152600401610a1f906148e1565b610aed81612e34565b60c95460009060ff166115175760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff191690556115296117fb565b5061153733336000856125ac565b50600060c9805460ff19166001179055919050565b60006115578361251c565b61155f6117fb565b5061156b833384612ee2565b50600092915050565b600054610100900460ff16158080156115945750600054600160ff909116105b806115ae5750303b1580156115ae575060005460ff166001145b6115ca5760405162461bcd60e51b8152600401610a1f9061493c565b6000805460ff1916600117905580156115ed576000805461ff0019166101001790555b6115f685611fb8565b6116098c8c8c8c8c8c8c8c8c8c8c6130b9565b8015611654576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989061164b90600190614960565b60405180910390a15b505050505050505050505050565b60cd546001600160a01b0316331461168d57604051635c85a5e760e01b815260040160405180910390fd5b61169a8585858585613261565b5050505050565b6116df6040518060400160405280601d81526020017f736574496e746572657374526174654d6f64656c2861646472657373290000008152506123f2565b6116e76117fb565b50610aed81613341565b60cb805461097c90614653565b6000610ad6826122b2565b60c95460009060ff1661172e5760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff191690556117406117fb565b50611537333384612869565b600061175783611fb8565b33600081815260d8602090815260408083206001600160a01b03881684529091529020548381101561179b5760405162461bcd60e51b8152600401610a1f906149a2565b6001600160a01b03808316600081815260d860209081526040808320948a1680845294909152908190209387900393849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610fde908590614168565b600080611806611c96565b60d15490915081810361181c5760009250505090565b6000611826612c8b565b60d35460d45460d25460ce5460d6546040516301cee29d60e21b81529596509394929391926000926001600160a01b039092169163073b8a74916118729189918991899160040161458f565b602060405180830381865afa15801561188f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b3919061477c565b90507f00000000000000000000000000000000000000000000000000000000000000008111156118f55760405162461bcd60e51b8152600401610a1f906149e6565b60006119018789614830565b9050600061191d60405180602001604052808581525083613453565b9050600061192b8288612c73565b905060006119398883614802565b90506000611958604051806020016040528060d054815250848a613484565b9050600061196785898a613484565b60d18e905560d281905560d384905560d483905560dc5460dd549192509061198f908f614830565b106119b85760dd8d9055818b10156119af576119aa8b611e30565b6119b8565b6119b882611e30565b7f4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc048b8583866040516119ed949392919061458f565b60405180910390a160009d505050505050505050505050505090565b60c95460009060ff16611a2e5760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055611a4433808585612a68565b50600160c9805460ff1916600117905592915050565b60ce546000906001600160a01b0316630cde8d1c611a76612c8b565b60d35460d45460d05460d6546040518663ffffffff1660e01b8152600401611aa29594939291906149f6565b602060405180830381865afa158015611abf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bba919061477c565b60c95460ff16611b055760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055611b1b338484846134a5565b505060c9805460ff1916600117905550565b60c95460009060ff16611b525760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055611b646117fb565b50611b6d612322565b905060c9805460ff1916600117905590565b6001600160a01b038116600090815260d760205260408120548190819081908190611ba9876122b2565b611bb1612322565b93509350935093509193509193565b60c95460009060ff16611be55760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055611bf76117fb565b50611537333384612ee2565b60c95460009060ff16611c285760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055611c3a6117fb565b5061153733338460006125ac565b60c95460009060ff16611c6d5760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff19169055611c808361251c565b611c886117fb565b50610db583336000856125ac565b6000610bba7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16565b60db546001600160a01b03163314611cee5760405162461bcd60e51b8152600401610a1f90614a80565b60d654811115611d105760405162461bcd60e51b8152600401610a1f90614ad6565b60d6546000611d1f8383614830565b90508060d6819055507f9e19ec7d2b8f8a94df8cc0072453ace318d221e3cbb2731d0eaa0baac856520f82826040516114619291906147d1565b611d61611fdf565b606580546001600160a01b0383166001600160a01b03199091168117909155611d926033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000611dda338585856000613261565b5060009392505050565b60ce546000906001600160a01b031663073b8a74611e00612c8b565b60d35460d45460d6546040518563ffffffff1660e01b8152600401611aa2949392919061458f565b4390565b4290565b80600003611e3b5750565b6000611e45611c96565b60d15414611e6657604051630dff50cb60e41b815260040160405180910390fd5b81611e6f612c8b565b1015611e8e57604051633345e99960e01b815260040160405180910390fd5b60d454821115611eb1576040516378d2980560e11b815260040160405180910390fd5b8160d454611ebf9190614830565b60d481905560cc54909150611ee29061010090046001600160a01b03168361382c565b60cc5460cd5460c9546040516305bebb3b60e21b81526001600160a01b03610100948590048116946316faecec94611f2a949083169391900490911690600090600401614b2a565b600060405180830381600087803b158015611f4457600080fd5b505af1158015611f58573d6000803e3d6000fd5b5050505060cc60019054906101000a90046001600160a01b03166001600160a01b03167f9cc63bb4ef37ad6a5f5f657dfaf94865531d4234acbc431cc8ac035468f627208383604051611fac9291906147d1565b60405180910390a25050565b6001600160a01b038116610aed576040516342bcdf7f60e11b815260040160405180910390fd5b6033546001600160a01b031633146112f95760405162461bcd60e51b8152600401610a1f90614b84565b6001600160a01b03811661202f5760405162461bcd60e51b8152600401610a1f90614bd6565b609780546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa0906120829083908590614815565b60405180910390a15050565b60cd5460405163eade3eed60e01b81526000916001600160a01b03169063eade3eed906120c19030908790600401614815565b600060405180830381600087803b1580156120db57600080fd5b505af11580156120ef573d6000803e3d6000fd5b505050506120fb611c96565b60d1541461211c5760405163c9021e2f60e01b815260040160405180910390fd5b6000612127846122b2565b9050600081841015612139578361213b565b815b905060006121498783612d1c565b905060006121578285614830565b905060008260d3546121699190614830565b6001600160a01b03808a16600081815260d960205260409081902086815560d25460019091015560d38490555192935091908b16907f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1906121cf90879087908790614843565b60405180910390a360cd5460d254604051631ededc9160e01b81526001600160a01b0390921691631ededc91916122109130918e918e918a91600401614be6565b600060405180830381600087803b15801561222a57600080fd5b505af115801561223e573d6000803e3d6000fd5b50949b9a5050505050505050505050565b61225881611fb8565b60cc80546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907fafec95c8612496c3ecf5dddc71e393528fe29bd145fbaf9c6b496d78d7e2d79b90600090a35050565b6001600160a01b038116600090815260d96020908152604080832081518083019092528054808352600190910154928201929092529082036122f75750600092915050565b60d254815160009161230891614c0e565b905081602001518161231a9190614c43565b949350505050565b60d55460009080820361233757505060cf5490565b6000612341612c8b565b9050600060d45460d65460d354846123599190614802565b6123639190614802565b61236d9190614830565b9050600083612384670de0b6b3a764000084614c0e565b61238e9190614c43565b95945050505050565b6123ed8363a9059cbb60e01b84846040516024016123b6929190614c57565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613848565b505050565b6097546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab906124259033908690600401614c65565b602060405180830381865afa158015612442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124669190614c90565b90508061248c57333083604051634a3fa29360e01b8152600401610a1f93929190614cb1565b5050565b612498611c96565b60d154146124b957604051637dfca6b760e11b815260040160405180910390fd5b670de0b6b3a76400008111156124e25760405163717220f360e11b815260040160405180910390fd5b60d08054908290556040517faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f8214609061208290839085906147d1565b60cd54604051630217306760e31b81526001600160a01b03909116906310b983389061254e9084903390600401614815565b602060405180830381865afa15801561256b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258f9190614c90565b610aed57604051630cf0b6f560e01b815260040160405180910390fd5b8115806125b7575080155b6125d35760405162461bcd60e51b8152600401610a1f90614d2f565b6125db611c96565b60d154146125fc576040516397b5cfcd60e01b815260040160405180910390fd5b60006040518060200160405280612611612322565b90529050600080841561262657849150612664565b61263084846138da565b9150600061263e83856138f8565b9050801580159061264f5750848114155b15612662578261265e81614d3f565b9350505b505b61266e8383612c73565b9050806000036126905760405162461bcd60e51b8152600401610a1f90614d84565b60cd54604051634732387560e11b81526001600160a01b0390911690638e6470ea906126c49030908b908790600401614d94565b600060405180830381600087803b1580156126de57600080fd5b505af11580156126f2573d6000803e3d6000fd5b505050508060d454612702612c8b565b61270c9190614830565b101561272b576040516391240a1b60e01b815260040160405180910390fd5b8160d5546127399190614830565b60d5556001600160a01b038716600090815260d76020526040812054612760908490614830565b6001600160a01b038916600090815260d7602052604090208190559050612787878361382c565b306001600160a01b0316886001600160a01b0316600080516020615397833981519152856040516127b89190614168565b60405180910390a3876001600160a01b03167fbd5034ffbd47e4e72a94baa2cdb74c6fad73cb3bcdc13036b72ec8306f5a76468385846040516127fd93929190614843565b60405180910390a260cd546040516351dff98960e01b81526001600160a01b03909116906351dff9899061283b9030908c9087908990600401614daf565b600060405180830381600087803b15801561285557600080fd5b505af1158015611654573d6000803e3d6000fd5b60cd5460405163c0891ba960e01b81526001600160a01b039091169063c0891ba99061289d90309086908690600401614d94565b600060405180830381600087803b1580156128b757600080fd5b505af11580156128cb573d6000803e3d6000fd5b505050506128d7611c96565b60d154146128f8576040516338d8859760e01b815260040160405180910390fd5b6000604051806020016040528061290d612322565b90529050600061291d8584612d1c565b9050600061292b82846138da565b90508060d55461293b9190614802565b60d5556001600160a01b038516600090815260d76020526040812054612962908390614802565b6001600160a01b038716600081815260d760205260409081902083905551919250907fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb906129b590869086908690614843565b60405180910390a2856001600160a01b031660006001600160a01b0316600080516020615397833981519152846040516129ef9190614168565b60405180910390a360cd546040516341c728b960e01b81526001600160a01b03909116906341c728b990612a2d9030908a9088908890600401614daf565b600060405180830381600087803b158015612a4757600080fd5b505af1158015612a5b573d6000803e3d6000fd5b5050505050505050505050565b60cd54604051636d0be88d60e01b81526001600160a01b0390911690636d0be88d90612a9e903090879087908790600401614dca565b600060405180830381600087803b158015612ab857600080fd5b505af1158015612acc573d6000803e3d6000fd5b50505050816001600160a01b0316836001600160a01b031603612b0257604051638cd22d1960e01b815260040160405180910390fd5b6000836001600160a01b0316856001600160a01b031603612b265750600019612b4e565b506001600160a01b03808416600090815260d860209081526040808320938816835292905220545b6000612b5a8383614830565b6001600160a01b038616600090815260d7602052604081205491925090612b82908590614830565b6001600160a01b038616600090815260d7602052604081205491925090612baa908690614802565b6001600160a01b03808916600090815260d7602052604080822086905591891681522081905590506000198414612c04576001600160a01b03808816600090815260d860209081526040808320938c168352929052208390555b856001600160a01b0316876001600160a01b031660008051602061539783398151915287604051612c359190614168565b60405180910390a360cd5460405163352b4a3f60e11b81526001600160a01b0390911690636a56947e9061283b9030908b908b908b90600401614dca565b600080612c808484613453565b905061231a8161391b565b60c9546040516370a0823160e01b815260009161010090046001600160a01b0316906370a0823190611aa290309060040161417f565b612cca81611fb8565b60db80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f6dbf1ff28f860de5edafa4c6505e37c0aba213288cc4166c5352b6d3776c79ef90600090a35050565b60c9546040516370a0823160e01b815260009161010090046001600160a01b031690829082906370a0823190612d5690309060040161417f565b602060405180830381865afa158015612d73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d97919061477c565b9050612dae6001600160a01b038316863087613933565b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190612ddd90309060040161417f565b602060405180830381865afa158015612dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1e919061477c565b9050612e2a8282614830565b9695505050505050565b606580546001600160a01b0319169055610aed8161395a565b6000806000612e5a611c96565b60d15414612e7d57806040516338acf79960e01b8152600401610a1f9190614168565b612e873385612d1c565b90508060d454612e979190614802565b60d481905560405190925033907fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc590612ed390849086906147d1565b60405180910390a29392505050565b60cd5460405163df71403b60e01b81526001600160a01b039091169063df71403b90612f1690309087908690600401614d94565b600060405180830381600087803b158015612f3057600080fd5b505af1158015612f44573d6000803e3d6000fd5b50505050612f50611c96565b60d15414612f7157604051630e8d8c6160e21b815260040160405180910390fd5b8060d454612f7d612c8b565b612f879190614830565b1015612fa6576040516348c2588160e01b815260040160405180910390fd5b6000612fb1846122b2565b90506000612fbf8383614802565b905060008360d354612fd19190614802565b6001600160a01b038716600090815260d96020526040902083815560d25460019091015560d38190559050613006858561382c565b856001600160a01b03167f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab8085848460405161304393929190614843565b60405180910390a260cd54604051635c77860560e01b81526001600160a01b0390911690635c7786059061307f9030908a908990600401614d94565b600060405180830381600087803b15801561309957600080fd5b505af11580156130ad573d6000803e3d6000fd5b50505050505050505050565b600054610100900460ff166130e05760405162461bcd60e51b8152600401610a1f90614e3a565b6130e86139ac565b6130f1836139db565b60d154158015613101575060d254155b61311d5760405162461bcd60e51b8152600401610a1f90614e8a565b60cf8890558761313f5760405162461bcd60e51b8152600401610a1f90614ee7565b6131488a613a02565b613150611c96565b60d155670de0b6b3a764000060d25561316889613341565b61317181612490565b60ca61317d8882614f7c565b5060cb61318a8782614f7c565b5060cc805460ff191660ff871617905581516131a590612cc1565b6131b2826020015161224f565b66b1a2bc2ec5000060da5560c98054610100600160a81b0319166101006001600160a01b038e811682029290921792839055604080516318160ddd60e01b8152905191909304909116916318160ddd9160048083019260209291908290030181865afa158015613226573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061324a919061477c565b5060c9805460ff19166001179055612a5b84612e34565b60c95460ff166132835760405162461bcd60e51b8152600401610a1f906146a3565b60c9805460ff191690556132956117fb565b506000826001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156132d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132fc919061477c565b9050801561331f5780604051633eea49b760e11b8152600401610a1f9190614168565b61332c8686868686613add565b505060c9805460ff1916600117905550505050565b600061334b611c96565b60d1541461336c57604051630be2a5cb60e11b815260040160405180910390fd5b60ce60009054906101000a90046001600160a01b03169050816001600160a01b0316632191f92a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e69190614c90565b6134025760405162461bcd60e51b8152600401610a1f90615074565b60ce80546001600160a01b0319166001600160a01b0384811691821790925560405190918316907fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f92690600090a35050565b604080516020810190915260008152604051806020016040528061347b856000015185613eba565b90529392505050565b6000806134918585613453565b905061238e61349f8261391b565b84613ec6565b60cd5460405163037883e560e31b81526001600160a01b0390911690631bc41f28906134db903090889088908890600401615084565b600060405180830381600087803b1580156134f557600080fd5b505af1158015613509573d6000803e3d6000fd5b50505050826001600160a01b0316826001600160a01b03160361353f57604051633a94626760e11b815260040160405180910390fd5b60cd5460408051634ada90af60e01b815290516000926001600160a01b031691634ada90af9160048083019260209291908290030181865afa158015613589573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135ad919061477c565b905060006135cb83604051806020016040528060da548152506138f8565b905060006135e7826040518060200160405280868152506138da565b905060006135f58286614830565b90506000604051806020016040528061360c612322565b90529050600061361c8285612c73565b90508360d55461362c9190614830565b60d5556001600160a01b038816600090815260d76020526040902054613653908890614830565b6001600160a01b03808a16600090815260d7602052604080822093909355908b1681522054613683908490614802565b6001600160a01b03808b16600090815260d7602052604090209190915560cc546136b491610100909104168261382c565b60cc5460cd5460c9546040516305bebb3b60e21b81526001600160a01b03610100948590048116946316faecec946136fc949083169391900490911690600190600401614b2a565b600060405180830381600087803b15801561371657600080fd5b505af115801561372a573d6000803e3d6000fd5b50505050886001600160a01b0316886001600160a01b03166000805160206153978339815191528560405161375f9190614168565b60405180910390a360cc546040516001600160a01b036101009092048216918a16907f3ac0548d62d3fa3c9a817cd33899b9acacd57e8958ebe51bc7d9a79f26a8a5db906137ae908590614168565b60405180910390a360cd54604051636d35bf9160e01b81526001600160a01b0390911690636d35bf91906137ee9030908e908e908e908e906004016150b9565b600060405180830381600087803b15801561380857600080fd5b505af115801561381c573d6000803e3d6000fd5b5050505050505050505050505050565b60c95461010090046001600160a01b03166123ed818484612397565b600061389d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613ed29092919063ffffffff16565b90508051600014806138be5750808060200190518101906138be9190614c90565b6123ed5760405162461bcd60e51b8152600401610a1f90615135565b60006110306138f184670de0b6b3a7640000613eba565b8351613ee1565b6000670de0b6b3a7640000613911848460000151613eba565b6110309190614c43565b8051600090610ad690670de0b6b3a764000090614c43565b613954846323b872dd60e01b8585856040516024016123b693929190614d94565b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139d35760405162461bcd60e51b8152600401610a1f90614e3a565b6112f9613eed565b600054610100900460ff16610ae45760405162461bcd60e51b8152600401610a1f90614e3a565b60cd5460408051623f1ee960e11b815290516001600160a01b0392831692841691627e3dd29160048083019260209291908290030181865afa158015613a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a709190614c90565b613a8c5760405162461bcd60e51b8152600401610a1f90615074565b60cd80546001600160a01b0319166001600160a01b0384811691821790925560405190918316907f7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d90600090a35050565b60cd5460405163e89d51ad60e01b81526001600160a01b039091169063e89d51ad90613b159030908690899089908890600401615145565b600060405180830381600087803b158015613b2f57600080fd5b505af1158015613b43573d6000803e3d6000fd5b50505050613b4f611c96565b60d15414613b70576040516380965b1b60e01b815260040160405180910390fd5b613b78611c96565b826001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bda919061477c565b14613bf857604051631046f38d60e31b815260040160405180910390fd5b846001600160a01b0316846001600160a01b031603613c2a57604051631bd1a62160e21b815260040160405180910390fd5b82600003613c4b5760405163d29da7ef60e01b815260040160405180910390fd5b6000198303613c6d57604051635982c5bb60e11b815260040160405180910390fd5b6000613c7a86868661208e565b60cd5460405163c488847b60e01b815291925060009182916001600160a01b03169063c488847b90613cb490309089908890600401614d94565b6040805180830381865afa158015613cd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cf49190615187565b9150915060008214613d185760405162461bcd60e51b8152600401610a1f9061520a565b6040516370a0823160e01b815281906001600160a01b038716906370a0823190613d46908b9060040161417f565b602060405180830381865afa158015613d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d87919061477c565b1015613da55760405162461bcd60e51b8152600401610a1f9061524e565b306001600160a01b03861603613dc657613dc1308989846134a5565b613e29565b60405163b2a02ff160e01b81526001600160a01b0386169063b2a02ff190613df6908b908b908690600401614d94565b600060405180830381600087803b158015613e1057600080fd5b505af1158015613e24573d6000803e3d6000fd5b505050505b846001600160a01b0316876001600160a01b0316896001600160a01b03167f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb528685604051613e789291906147d1565b60405180910390a460cd546040516347ef3b3b60e01b81526001600160a01b03909116906347ef3b3b9061283b90309089908d908d908a90899060040161525e565b60006110308284614c0e565b60006110308284614802565b606061231a8484600085613f1d565b60006110308284614c43565b600054610100900460ff16613f145760405162461bcd60e51b8152600401610a1f90614e3a565b6112f933612e34565b606082471015613f3f5760405162461bcd60e51b8152600401610a1f906152f0565b600080866001600160a01b03168587604051613f5b9190615322565b60006040518083038185875af1925050503d8060008114613f98576040519150601f19603f3d011682016040523d82523d6000602084013e613f9d565b606091505b5091509150613fae87838387613fb9565b979650505050505050565b60608315613ff8578251600003613ff1576001600160a01b0385163b613ff15760405162461bcd60e51b8152600401610a1f90615362565b508161231a565b61231a838381511561400d5781518083602001fd5b8060405162461bcd60e51b8152600401610a1f919061407d565b60005b8381101561404257818101518382015260200161402a565b50506000910152565b6000614055825190565b80845260208401935061406c818560208601614027565b601f01601f19169290920192915050565b60208082528101611030818461404b565b805b8114610aed57600080fd5b8035610ad68161408e565b6000602082840312156140bb576140bb600080fd5b600061231a848461409b565b60006001600160a01b038216610ad6565b614090816140c7565b8035610ad6816140d8565b6000806040838503121561410257614102600080fd5b600061410e85856140e1565b925050602061411f8582860161409b565b9150509250929050565b8015155b82525050565b60208101610ad68284614129565b60006020828403121561415657614156600080fd5b600061231a84846140e1565b8061412d565b60208101610ad68284614162565b61412d816140c7565b60208101610ad68284614176565b6000610ad6826140c7565b6140908161418d565b8035610ad681614198565b6000602082840312156141c1576141c1600080fd5b600061231a84846141a1565b6000806000606084860312156141e5576141e5600080fd5b60006141f186866140e1565b9350506020614202868287016140e1565b92505060406142138682870161409b565b9150509250925092565b60ff811661412d565b60208101610ad6828461421d565b6000610ad66001600160a01b03831661424b565b90565b6001600160a01b031690565b6000610ad682614234565b6000610ad682614257565b61412d81614262565b60208101610ad6828461426d565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156142c0576142c0614284565b6040525050565b60006142d260405190565b90506142de828261429a565b919050565b600067ffffffffffffffff8211156142fd576142fd614284565b601f19601f83011660200192915050565b82818337506000910152565b600061432d614328846142e3565b6142c7565b90508281526020810184848401111561434857614348600080fd5b61435384828561430e565b509392505050565b600082601f83011261436f5761436f600080fd5b813561231a84826020860161431a565b60ff8116614090565b8035610ad68161437f565b6000604082840312156143a8576143a8600080fd5b6143b260406142c7565b905060006143c084846140e1565b82525060206143d1848483016140e1565b60208301525092915050565b60008060008060008060008060008060006101808c8e03121561440257614402600080fd5b600061440e8e8e6140e1565b9b5050602061441f8e828f016141a1565b9a505060406144308e828f016141a1565b99505060606144418e828f0161409b565b98505060808c013567ffffffffffffffff81111561446157614461600080fd5b61446d8e828f0161435b565b97505060a08c013567ffffffffffffffff81111561448d5761448d600080fd5b6144998e828f0161435b565b96505060c06144aa8e828f01614388565b95505060e06144bb8e828f016140e1565b9450506101006144cd8e828f016140e1565b9350506101206144df8e828f01614393565b9250506101606144f18e828f0161409b565b9150509295989b509295989b9093969950565b801515614090565b8035610ad681614504565b600080600080600060a0868803121561453257614532600080fd5b600061453e88886140e1565b955050602061454f888289016140e1565b94505060406145608882890161409b565b9350506060614571888289016141a1565b92505060806145828882890161450c565b9150509295509295909350565b6080810161459d8287614162565b6145aa6020830186614162565b6145b76040830185614162565b61238e6060830184614162565b600080604083850312156145da576145da600080fd5b60006145e685856140e1565b925050602061411f858286016140e1565b60008060006060848603121561460f5761460f600080fd5b600061461b86866140e1565b935050602061462c8682870161409b565b9250506040614213868287016141a1565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061466757607f821691505b6020821081036146795761467961463d565b50919050565b600a8152600060208201691c994b595b9d195c995960b21b815291505b5060200190565b60208082528101610ad68161467f565b602f81526000602082017f56546f6b656e3a3a7377656570546f6b656e3a206f6e6c792061646d696e206381526e616e20737765657020746f6b656e7360881b602082015291505b5060400190565b60208082528101610ad6816146b3565b603281526000602082017f56546f6b656e3a3a7377656570546f6b656e3a2063616e206e6f74207377656581527138103ab73232b9363cb4b733903a37b5b2b760711b602082015291506146fb565b60208082528101610ad681614712565b8051610ad68161408e565b60006020828403121561479157614791600080fd5b600061231a8484614771565b600d81526000602082016c125b9d985b1a5908125b9c1d5d609a1b8152915061469c565b60208082528101610ad68161479d565b604081016147df8285614162565b6110306020830184614162565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ad657610ad66147ec565b604081016148238285614176565b6110306020830184614176565b81810381811115610ad657610ad66147ec565b606081016148518286614162565b61485e6020830185614162565b61231a6040830184614162565b6000610ad66142488381565b61412d8161486b565b6060810161488e8286614162565b61485e6020830185614877565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b602082015291506146fb565b60208082528101610ad68161489b565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015291506146fb565b60208082528101610ad6816148f1565b600060ff8216610ad6565b61412d8161494c565b60208101610ad68284614957565b601e81526000602082017f64656372656173656420616c6c6f77616e63652062656c6f77207a65726f00008152915061469c565b60208082528101610ad68161496e565b601c81526000602082017f626f72726f772072617465206973206162737572646c792068696768000000008152915061469c565b60208082528101610ad6816149b2565b60a08101614a048288614162565b614a116020830187614162565b614a1e6040830186614162565b614a2b6060830185614162565b612e2a6080830184614162565b602b81526000602082017f6f6e6c792073686f727466616c6c20636f6e74726163742063616e207570646181526a1d1948189859081919589d60aa1b602082015291506146fb565b60208082528101610ad681614a38565b602981526000602082017f6d6f7265207468616e206261642064656274207265636f76657265642066726f815268369030bab1ba34b7b760b91b602082015291506146fb565b60208082528101610ad681614a90565b634e487b7160e01b600052602160045260246000fd5b60028110610aed57610aed614ae6565b806142de81614afc565b6000610ad682614b0c565b61412d81614b16565b60608101614b388286614176565b614b456020830185614176565b61231a6040830184614b21565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65729101908152600061469c565b60208082528101610ad681614b52565b602581526000602082017f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b602082015291506146fb565b60208082528101610ad681614b94565b60a08101614bf48288614176565b614c016020830187614176565b614a1e6040830186614176565b818102808215838204851417614c2657614c266147ec565b5092915050565b634e487b7160e01b600052601260045260246000fd5b600082614c5257614c52614c2d565b500490565b604081016147df8285614176565b60408101614c738285614176565b818103602083015261231a818461404b565b8051610ad681614504565b600060208284031215614ca557614ca5600080fd5b600061231a8484614c85565b60608101614cbf8286614176565b614ccc6020830185614176565b818103604083015261238e818461404b565b603481526000602082017f6f6e65206f662072656465656d546f6b656e73496e206f722072656465656d418152736d6f756e74496e206d757374206265207a65726f60601b602082015291506146fb565b60208082528101610ad681614cde565b60006000198203614d5257614d526147ec565b5060010190565b601481526000602082017372656465656d416d6f756e74206973207a65726f60601b8152915061469c565b60208082528101610ad681614d59565b60608101614da28286614176565b61485e6020830185614176565b60808101614dbd8287614176565b6145aa6020830186614176565b60808101614dd88287614176565b614de56020830186614176565b6145b76040830185614176565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b602082015291506146fb565b60208082528101610ad681614df2565b602381526000602082017f6d61726b6574206d6179206f6e6c7920626520696e697469616c697a6564206f8152626e636560e81b602082015291506146fb565b60208082528101610ad681614e4a565b603081526000602082017f696e697469616c2065786368616e67652072617465206d75737420626520677281526f32b0ba32b9103a3430b7103d32b9379760811b602082015291506146fb565b60208082528101610ad681614e9a565b614f008361486b565b815460001960089490940293841b1916921b91909117905550565b60006123ed818484614ef7565b8181101561248c57614f3b600082614f1b565b600101614f28565b601f8211156123ed576000818152602090206020601f85010481016020851015614f6a5750805b61169a6020601f860104830182614f28565b815167ffffffffffffffff811115614f9657614f96614284565b614fa08254614653565b614fab828285614f43565b6020601f831160018114614fdf5760008415614fc75750858201515b600019600886021c1981166002860217865550615038565b600085815260208120601f198616915b8281101561500f5788850151825560209485019460019092019101614fef565b8683101561502b5784890151600019601f89166008021c191682555b6001600288020188555050505b505050505050565b601c81526000602082017f6d61726b6572206d6574686f642072657475726e65642066616c7365000000008152915061469c565b60208082528101610ad681615040565b608081016150928287614176565b61509f6020830186614176565b6150ac6040830185614176565b61238e6060830184614176565b60a081016150c78288614176565b6150d46020830187614176565b6150e16040830186614176565b614a2b6060830185614176565b602a81526000602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015291506146fb565b60208082528101610ad6816150ee565b60a081016151538288614176565b6151606020830187614176565b61516d6040830186614176565b61517a6060830185614162565b612e2a6080830184614129565b6000806040838503121561519d5761519d600080fd5b60006151a98585614771565b925050602061411f85828601614771565b603381526000602082017f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f815272105353d5539517d4d152569157d19052531151606a1b602082015291506146fb565b60208082528101610ad6816151ba565b601881526000602082017f4c49515549444154455f5345495a455f544f4f5f4d55434800000000000000008152915061469c565b60208082528101610ad68161521a565b60c0810161526c8289614176565b6152796020830188614176565b6152866040830187614176565b6152936060830186614176565b6152a06080830185614162565b613fae60a0830184614162565b602681526000602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f8152651c8818d85b1b60d21b602082015291506146fb565b60208082528101610ad6816152ad565b600061530a825190565b615318818560208601614027565b9290920192915050565b60006110308284615300565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000008152915061469c565b60208082528101610ad68161532e56fe7365745265647563655265736572766573426c6f636b44656c74612875696e7432353629ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a5fd6777e1f72c4e9c76e8173abbbc59eafa4c0406e6a53a57293899d5e0a4f264736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x433 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7821A514 GT PUSH2 0x236 JUMPI DUP1 PUSH4 0xB2A02FF1 GT PUSH2 0x13B JUMPI DUP1 PUSH4 0xDD62ED3E GT PUSH2 0xC3 JUMPI DUP1 PUSH4 0xEF60450C GT PUSH2 0x87 JUMPI DUP1 PUSH4 0xEF60450C EQ PUSH2 0x91B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x92E JUMPI DUP1 PUSH4 0xF3FDB15A EQ PUSH2 0x941 JUMPI DUP1 PUSH4 0xF5E3C462 EQ PUSH2 0x954 JUMPI DUP1 PUSH4 0xF8F9DA28 EQ PUSH2 0x967 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x89E JUMPI DUP1 PUSH4 0xDF3A516E EQ PUSH2 0x8D7 JUMPI DUP1 PUSH4 0xE1D146FB EQ PUSH2 0x8EA JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x8F2 JUMPI DUP1 PUSH4 0xE9A44FD9 EQ PUSH2 0x903 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC37F68E2 GT PUSH2 0x10A JUMPI DUP1 PUSH4 0xC37F68E2 EQ PUSH2 0x825 JUMPI DUP1 PUSH4 0xC5EBEAEC EQ PUSH2 0x848 JUMPI DUP1 PUSH4 0xC7AD0895 EQ PUSH2 0x85B JUMPI DUP1 PUSH4 0xD1109C2F EQ PUSH2 0x882 JUMPI DUP1 PUSH4 0xDB006A75 EQ PUSH2 0x88B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB2A02FF1 EQ PUSH2 0x7F0 JUMPI DUP1 PUSH4 0xB4A0BDF3 EQ PUSH2 0x803 JUMPI DUP1 PUSH4 0xBBCAC557 EQ PUSH2 0x814 JUMPI DUP1 PUSH4 0xBD6D894D EQ PUSH2 0x81D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95D89B41 GT PUSH2 0x1BE JUMPI DUP1 PUSH4 0xA6AFED95 GT PUSH2 0x18D JUMPI DUP1 PUSH4 0xA6AFED95 EQ PUSH2 0x7BB JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x7C3 JUMPI DUP1 PUSH4 0xAA5AF0FD EQ PUSH2 0x7D6 JUMPI DUP1 PUSH4 0xAE96F141 EQ PUSH2 0x7DF JUMPI DUP1 PUSH4 0xAE9D70B0 EQ PUSH2 0x7E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x77A JUMPI DUP1 PUSH4 0x95DD9193 EQ PUSH2 0x782 JUMPI DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x795 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x7A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8A42C319 GT PUSH2 0x205 JUMPI DUP1 PUSH4 0x8A42C319 EQ PUSH2 0x727 JUMPI DUP1 PUSH4 0x8BBDB6DB EQ PUSH2 0x73A JUMPI DUP1 PUSH4 0x8BCD4016 EQ PUSH2 0x74D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x760 JUMPI DUP1 PUSH4 0x8F840DDD EQ PUSH2 0x771 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7821A514 EQ PUSH2 0x6E6 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x6F9 JUMPI DUP1 PUSH4 0x852A12E3 EQ PUSH2 0x701 JUMPI DUP1 PUSH4 0x856E5BB3 EQ PUSH2 0x714 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0x33C JUMPI DUP1 PUSH4 0x6752E702 GT PUSH2 0x2C4 JUMPI DUP1 PUSH4 0x6F307DC3 GT PUSH2 0x293 JUMPI DUP1 PUSH4 0x6F307DC3 EQ PUSH2 0x682 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x69A JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x6C3 JUMPI DUP1 PUSH4 0x73ACEE98 EQ PUSH2 0x6CB JUMPI DUP1 PUSH4 0x757212F0 EQ PUSH2 0x6D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6752E702 EQ PUSH2 0x641 JUMPI DUP1 PUSH4 0x6857249C EQ PUSH2 0x64A JUMPI DUP1 PUSH4 0x69AB3250 EQ PUSH2 0x671 JUMPI DUP1 PUSH4 0x6C540BAF EQ PUSH2 0x679 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3D9EA3A1 GT PUSH2 0x30B JUMPI DUP1 PUSH4 0x3D9EA3A1 EQ PUSH2 0x5EB JUMPI DUP1 PUSH4 0x41F641EE EQ PUSH2 0x5F2 JUMPI DUP1 PUSH4 0x44FE6FFE EQ PUSH2 0x605 JUMPI DUP1 PUSH4 0x47BD3718 EQ PUSH2 0x618 JUMPI DUP1 PUSH4 0x5FE3B567 EQ PUSH2 0x621 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0x5A3 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x5BD JUMPI DUP1 PUSH4 0x3AF9E669 EQ PUSH2 0x5D0 JUMPI DUP1 PUSH4 0x3B1D21A2 EQ PUSH2 0x5E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x182DF0F5 GT PUSH2 0x3BF JUMPI DUP1 PUSH4 0x210BC052 GT PUSH2 0x38E JUMPI DUP1 PUSH4 0x210BC052 EQ PUSH2 0x544 JUMPI DUP1 PUSH4 0x23323E03 EQ PUSH2 0x557 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x56A JUMPI DUP1 PUSH4 0x2464176B EQ PUSH2 0x57D JUMPI DUP1 PUSH4 0x2608F818 EQ PUSH2 0x590 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x182DF0F5 EQ PUSH2 0x4F6 JUMPI DUP1 PUSH4 0x19B1FAEF EQ PUSH2 0x4FE JUMPI DUP1 PUSH4 0x1BE19560 EQ PUSH2 0x51E JUMPI DUP1 PUSH4 0x1C446983 EQ PUSH2 0x531 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE752702 GT PUSH2 0x406 JUMPI DUP1 PUSH4 0xE752702 EQ PUSH2 0x49E JUMPI DUP1 PUSH4 0x107568DF EQ PUSH2 0x4BE JUMPI DUP1 PUSH4 0x173B9904 EQ PUSH2 0x4D1 JUMPI DUP1 PUSH4 0x17BFDFBC EQ PUSH2 0x4DA JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x4ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x438 JUMPI DUP1 PUSH4 0x7E27959 EQ PUSH2 0x456 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x46B JUMPI DUP1 PUSH4 0xE32CB86 EQ PUSH2 0x48B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x440 PUSH2 0x96F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x44D SWAP2 SWAP1 PUSH2 0x407D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x469 PUSH2 0x464 CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0x9FD JUMP JUMPDEST STOP JUMPDEST PUSH2 0x47E PUSH2 0x479 CALLDATASIZE PUSH1 0x4 PUSH2 0x40EC JUMP JUMPDEST PUSH2 0xA64 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x44D SWAP2 SWAP1 PUSH2 0x4133 JUMP JUMPDEST PUSH2 0x469 PUSH2 0x499 CALLDATASIZE PUSH1 0x4 PUSH2 0x4141 JUMP JUMPDEST PUSH2 0xADC JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x4AC CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0xAF0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x44D SWAP2 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH2 0x469 PUSH2 0x4CC CALLDATASIZE PUSH1 0x4 PUSH2 0x4141 JUMP JUMPDEST PUSH2 0xB4A JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0xD0 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x4E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4141 JUMP JUMPDEST PUSH2 0xB5B JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0xD5 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0xBB0 JUMP JUMPDEST PUSH1 0xDB SLOAD PUSH2 0x511 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x44D SWAP2 SWAP1 PUSH2 0x417F JUMP JUMPDEST PUSH2 0x469 PUSH2 0x52C CALLDATASIZE PUSH1 0x4 PUSH2 0x41AC JUMP JUMPDEST PUSH2 0xBBF JUMP JUMPDEST PUSH2 0x469 PUSH2 0x53F CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0xCEC JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x552 CALLDATASIZE PUSH1 0x4 PUSH2 0x40EC JUMP JUMPDEST PUSH2 0xD67 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x565 CALLDATASIZE PUSH1 0x4 PUSH2 0x40EC JUMP JUMPDEST PUSH2 0xDCB JUMP JUMPDEST PUSH2 0x47E PUSH2 0x578 CALLDATASIZE PUSH1 0x4 PUSH2 0x41CD JUMP JUMPDEST PUSH2 0xE17 JUMP JUMPDEST PUSH2 0x469 PUSH2 0x58B CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0xE69 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x59E CALLDATASIZE PUSH1 0x4 PUSH2 0x40EC JUMP JUMPDEST PUSH2 0xEEA JUMP JUMPDEST PUSH1 0xCC SLOAD PUSH2 0x5B0 SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x44D SWAP2 SWAP1 PUSH2 0x4226 JUMP JUMPDEST PUSH2 0x47E PUSH2 0x5CB CALLDATASIZE PUSH1 0x4 PUSH2 0x40EC JUMP JUMPDEST PUSH2 0xF45 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x5DE CALLDATASIZE PUSH1 0x4 PUSH2 0x4141 JUMP JUMPDEST PUSH2 0xFF1 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x1037 JUMP JUMPDEST PUSH1 0x1 PUSH2 0x47E JUMP JUMPDEST PUSH2 0x469 PUSH2 0x600 CALLDATASIZE PUSH1 0x4 PUSH2 0x4141 JUMP JUMPDEST PUSH2 0x1041 JUMP JUMPDEST PUSH2 0x469 PUSH2 0x613 CALLDATASIZE PUSH1 0x4 PUSH2 0x41CD JUMP JUMPDEST PUSH2 0x1052 JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0xD3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH2 0x634 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x44D SWAP2 SWAP1 PUSH2 0x4276 JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0xDA SLOAD DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0x0 DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0xD1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH2 0x511 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x6A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4141 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x469 PUSH2 0x12E7 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x12FB JUMP JUMPDEST PUSH2 0x469 PUSH2 0x6E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0x1347 JUMP JUMPDEST PUSH2 0x469 PUSH2 0x6F4 CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0x146E JUMP JUMPDEST PUSH2 0x469 PUSH2 0x14BD JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x70F CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0x14F2 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x722 CALLDATASIZE PUSH1 0x4 PUSH2 0x40EC JUMP JUMPDEST PUSH2 0x154C JUMP JUMPDEST PUSH2 0x469 PUSH2 0x735 CALLDATASIZE PUSH1 0x4 PUSH2 0x43DD JUMP JUMPDEST PUSH2 0x1574 JUMP JUMPDEST PUSH2 0x469 PUSH2 0x748 CALLDATASIZE PUSH1 0x4 PUSH2 0x4517 JUMP JUMPDEST PUSH2 0x1662 JUMP JUMPDEST PUSH2 0x469 PUSH2 0x75B CALLDATASIZE PUSH1 0x4 PUSH2 0x41AC JUMP JUMPDEST PUSH2 0x16A1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x511 JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0xD4 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x440 PUSH2 0x16F1 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x790 CALLDATASIZE PUSH1 0x4 PUSH2 0x4141 JUMP JUMPDEST PUSH2 0x16FE JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x7A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0x1709 JUMP JUMPDEST PUSH2 0x47E PUSH2 0x7B6 CALLDATASIZE PUSH1 0x4 PUSH2 0x40EC JUMP JUMPDEST PUSH2 0x174C JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x17FB JUMP JUMPDEST PUSH2 0x47E PUSH2 0x7D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x40EC JUMP JUMPDEST PUSH2 0x1A09 JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0xD2 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0xDD SLOAD DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x1A5A JUMP JUMPDEST PUSH2 0x469 PUSH2 0x7FE CALLDATASIZE PUSH1 0x4 PUSH2 0x41CD JUMP JUMPDEST PUSH2 0x1AE3 JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x634 JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0xD6 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x1B2D JUMP JUMPDEST PUSH2 0x838 PUSH2 0x833 CALLDATASIZE PUSH1 0x4 PUSH2 0x4141 JUMP JUMPDEST PUSH2 0x1B7F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x44D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x458F JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x856 CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0x1BC0 JUMP JUMPDEST PUSH2 0x47E PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH1 0xDC SLOAD DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x899 CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0x1C03 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x8AC CALLDATASIZE PUSH1 0x4 PUSH2 0x45C4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x8E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x40EC JUMP JUMPDEST PUSH2 0x1C48 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x511 JUMP JUMPDEST PUSH1 0xCC SLOAD PUSH2 0x511 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x469 PUSH2 0x929 CALLDATASIZE PUSH1 0x4 PUSH2 0x40A6 JUMP JUMPDEST PUSH2 0x1CC4 JUMP JUMPDEST PUSH2 0x469 PUSH2 0x93C CALLDATASIZE PUSH1 0x4 PUSH2 0x4141 JUMP JUMPDEST PUSH2 0x1D59 JUMP JUMPDEST PUSH1 0xCE SLOAD PUSH2 0x634 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x962 CALLDATASIZE PUSH1 0x4 PUSH2 0x45F7 JUMP JUMPDEST PUSH2 0x1DCA JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0x1DE4 JUMP JUMPDEST PUSH1 0xCA DUP1 SLOAD PUSH2 0x97C SWAP1 PUSH2 0x4653 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x9A8 SWAP1 PUSH2 0x4653 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x9F5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x9CA JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x9F5 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x9D8 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0xFF AND PUSH2 0xA28 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0xA3A PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0xA43 PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xDD SLOAD EQ PUSH2 0xA54 JUMPI PUSH2 0xA54 DUP2 PUSH2 0x1E30 JUMP JUMPDEST POP PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA6F DUP4 PUSH2 0x1FB8 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP3 SWAP1 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0xAC8 SWAP1 DUP8 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xAE4 PUSH2 0x1FDF JUMP JUMPDEST PUSH2 0xAED DUP2 PUSH2 0x2009 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0xB15 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0xB27 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0xB33 CALLER CALLER DUP5 PUSH2 0x208E JUMP JUMPDEST POP PUSH1 0x0 SWAP1 POP PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xB52 PUSH2 0x1FDF JUMP JUMPDEST PUSH2 0xAED DUP2 PUSH2 0x224F JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0xB80 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0xB92 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0xB9C DUP3 PUSH2 0x22B2 JUMP JUMPDEST SWAP1 POP PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBBA PUSH2 0x2322 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xBE9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4702 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x100 SWAP1 SWAP2 DIV DUP2 AND SWAP1 DUP3 AND SUB PUSH2 0xC1C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4761 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0xC4B SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x417F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC68 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC8C SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST SWAP1 POP PUSH2 0xCB4 PUSH2 0xCA3 PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP4 PUSH2 0x2397 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0x35CE4C546A473796A8E70EC2D4AF4F2031AFE357AFA7057B6EA7FA340730E1B2 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0xFF AND PUSH2 0xD0E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH32 0x73657452657365727665466163746F722875696E743235362900000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xD55 SWAP1 PUSH2 0x23F2 JUMP JUMPDEST PUSH2 0xD5D PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0xA54 DUP2 PUSH2 0x2490 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0xD8C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0xD9F DUP4 PUSH2 0x251C JUMP JUMPDEST PUSH2 0xDA7 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0xDB5 DUP4 CALLER DUP5 PUSH1 0x0 PUSH2 0x25AC JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0xDF0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0xE03 DUP4 PUSH2 0x1FB8 JUMP JUMPDEST PUSH2 0xE0B PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0xDB5 CALLER DUP5 DUP5 PUSH2 0x2869 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0xE3C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0xE52 CALLER DUP6 DUP6 DUP6 PUSH2 0x2A68 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xE8A PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x5373 PUSH1 0x24 SWAP2 CODECOPY PUSH2 0x23F2 JUMP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0xEAA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x47C1 JUMP JUMPDEST PUSH32 0xC2AC513CDB57F91EB2BEF4DB918C285829524F549682B99717C6CB06CC011183 PUSH1 0xDC SLOAD DUP3 PUSH1 0x40 MLOAD PUSH2 0xEDD SWAP3 SWAP2 SWAP1 PUSH2 0x47D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0xDC SSTORE JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0xF0F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0xF21 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0xF2D CALLER DUP5 DUP5 PUSH2 0x208E JUMP JUMPDEST POP PUSH1 0x0 SWAP1 POP PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF50 DUP4 PUSH2 0x1FB8 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xF7E DUP5 DUP3 PUSH2 0x4802 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP12 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0xFDE SWAP1 DUP6 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x1007 PUSH2 0x1B2D JUMP JUMPDEST SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0x1030 SWAP1 DUP3 SWAP1 PUSH2 0x2C73 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBBA PUSH2 0x2C8B JUMP JUMPDEST PUSH2 0x1049 PUSH2 0x1FDF JUMP JUMPDEST PUSH2 0xAED DUP2 PUSH2 0x2CC1 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0xFF AND PUSH2 0x1074 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP1 ISZERO PUSH2 0x10E9 JUMPI PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0xEADE3EED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xEADE3EED SWAP1 PUSH2 0x10B6 SWAP1 ADDRESS SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x4815 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10E4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1114 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2C402925 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x111F DUP4 PUSH2 0x22B2 JUMP JUMPDEST PUSH1 0xD3 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 DUP4 ISZERO PUSH2 0x1198 JUMPI PUSH2 0x1137 DUP7 DUP6 PUSH2 0x2D1C JUMP JUMPDEST SWAP1 POP PUSH2 0x1143 DUP2 DUP4 PUSH2 0x4830 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND SWAP1 DUP8 AND PUSH32 0x1A2A22CB034D26D1854BDC6666A5B91FE25EFBBB5DCAD3B0355478D6F5C362A1 DUP4 PUSH2 0x117F DUP2 DUP9 PUSH2 0x4830 JUMP JUMPDEST DUP7 PUSH1 0x40 MLOAD PUSH2 0x118F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4843 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST PUSH1 0x0 PUSH2 0x11A4 DUP3 DUP6 PUSH2 0x4830 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x1268 JUMPI PUSH1 0xD6 SLOAD PUSH1 0x0 PUSH2 0x11BB DUP4 DUP4 PUSH2 0x4802 JUMP JUMPDEST SWAP1 POP PUSH2 0x11C7 DUP4 DUP7 PUSH2 0x4830 JUMP JUMPDEST SWAP5 POP DUP1 PUSH1 0xD6 DUP2 SWAP1 SSTORE POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x1A2A22CB034D26D1854BDC6666A5B91FE25EFBBB5DCAD3B0355478D6F5C362A1 DUP6 PUSH1 0x0 DUP10 PUSH1 0x40 MLOAD PUSH2 0x1218 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4880 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x90125FFDB441E57C4F6BF69789206424859F206BEA5727F2D81AD2470826EF6A DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x125D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4843 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP2 DUP3 SSTORE PUSH1 0xD2 SLOAD PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0xD3 DUP7 SWAP1 SSTORE MLOAD SWAP1 SWAP2 DUP10 AND SWAP1 PUSH32 0x9FE0294717A8EFBC6ACE1C151B73A4C89982339B2228A27D1CA21394E348986F SWAP1 PUSH2 0x12C9 SWAP1 DUP10 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH2 0x12EF PUSH2 0x1FDF JUMP JUMPDEST PUSH2 0x12F9 PUSH1 0x0 PUSH2 0x2E34 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0x1320 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x1332 PUSH2 0x17FB JUMP JUMPDEST POP POP PUSH1 0xD3 SLOAD PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 JUMP JUMPDEST PUSH2 0x1385 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x73657450726F746F636F6C5365697A6553686172652875696E74323536290000 DUP2 MSTORE POP PUSH2 0x23F2 JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4ADA90AF PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x4ADA90AF SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13F3 SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1408 PUSH8 0xDE0B6B3A7640000 DUP5 PUSH2 0x4802 JUMP JUMPDEST GT ISZERO PUSH2 0x1427 JUMPI PUSH1 0x40 MLOAD PUSH4 0x34DD2C1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xDA DUP1 SLOAD SWAP1 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xF5815F353A60E815CCE7553E4F60C533A59D26B1B5504EA4B6DB8D60DA3E4DA2 SWAP1 PUSH2 0x1461 SWAP1 DUP4 SWAP1 DUP7 SWAP1 PUSH2 0x47D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0xFF AND PUSH2 0x1490 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x14A2 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0x14AC DUP2 PUSH2 0x2E4D JUMP JUMPDEST POP POP PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x65 SLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 EQ PUSH2 0x14E9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x48E1 JUMP JUMPDEST PUSH2 0xAED DUP2 PUSH2 0x2E34 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0x1517 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x1529 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0x1537 CALLER CALLER PUSH1 0x0 DUP6 PUSH2 0x25AC JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1557 DUP4 PUSH2 0x251C JUMP JUMPDEST PUSH2 0x155F PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0x156B DUP4 CALLER DUP5 PUSH2 0x2EE2 JUMP JUMPDEST POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x1594 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x15AE JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15AE JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x15CA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x493C JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x15ED JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x15F6 DUP6 PUSH2 0x1FB8 JUMP JUMPDEST PUSH2 0x1609 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 PUSH2 0x30B9 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1654 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH2 0x164B SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x4960 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x168D JUMPI PUSH1 0x40 MLOAD PUSH4 0x5C85A5E7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x169A DUP6 DUP6 DUP6 DUP6 DUP6 PUSH2 0x3261 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x16DF PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1D DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x736574496E746572657374526174654D6F64656C286164647265737329000000 DUP2 MSTORE POP PUSH2 0x23F2 JUMP JUMPDEST PUSH2 0x16E7 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0xAED DUP2 PUSH2 0x3341 JUMP JUMPDEST PUSH1 0xCB DUP1 SLOAD PUSH2 0x97C SWAP1 PUSH2 0x4653 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAD6 DUP3 PUSH2 0x22B2 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0x172E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x1740 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0x1537 CALLER CALLER DUP5 PUSH2 0x2869 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1757 DUP4 PUSH2 0x1FB8 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP4 DUP2 LT ISZERO PUSH2 0x179B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x49A2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP11 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SWAP4 DUP8 SWAP1 SUB SWAP4 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0xFDE SWAP1 DUP6 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1806 PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SLOAD SWAP1 SWAP2 POP DUP2 DUP2 SUB PUSH2 0x181C JUMPI PUSH1 0x0 SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1826 PUSH2 0x2C8B JUMP JUMPDEST PUSH1 0xD3 SLOAD PUSH1 0xD4 SLOAD PUSH1 0xD2 SLOAD PUSH1 0xCE SLOAD PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x1CEE29D PUSH1 0xE2 SHL DUP2 MSTORE SWAP6 SWAP7 POP SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x73B8A74 SWAP2 PUSH2 0x1872 SWAP2 DUP10 SWAP2 DUP10 SWAP2 DUP10 SWAP2 PUSH1 0x4 ADD PUSH2 0x458F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x188F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18B3 SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST SWAP1 POP PUSH32 0x0 DUP2 GT ISZERO PUSH2 0x18F5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x49E6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1901 DUP8 DUP10 PUSH2 0x4830 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x191D PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP6 DUP2 MSTORE POP DUP4 PUSH2 0x3453 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x192B DUP3 DUP9 PUSH2 0x2C73 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1939 DUP9 DUP4 PUSH2 0x4802 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1958 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xD0 SLOAD DUP2 MSTORE POP DUP5 DUP11 PUSH2 0x3484 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1967 DUP6 DUP10 DUP11 PUSH2 0x3484 JUMP JUMPDEST PUSH1 0xD1 DUP15 SWAP1 SSTORE PUSH1 0xD2 DUP2 SWAP1 SSTORE PUSH1 0xD3 DUP5 SWAP1 SSTORE PUSH1 0xD4 DUP4 SWAP1 SSTORE PUSH1 0xDC SLOAD PUSH1 0xDD SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x198F SWAP1 DUP16 PUSH2 0x4830 JUMP JUMPDEST LT PUSH2 0x19B8 JUMPI PUSH1 0xDD DUP14 SWAP1 SSTORE DUP2 DUP12 LT ISZERO PUSH2 0x19AF JUMPI PUSH2 0x19AA DUP12 PUSH2 0x1E30 JUMP JUMPDEST PUSH2 0x19B8 JUMP JUMPDEST PUSH2 0x19B8 DUP3 PUSH2 0x1E30 JUMP JUMPDEST PUSH32 0x4DEC04E750CA11537CABCD8A9EAB06494DE08DA3735BC8871CD41250E190BC04 DUP12 DUP6 DUP4 DUP7 PUSH1 0x40 MLOAD PUSH2 0x19ED SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x458F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x0 SWAP14 POP POP POP POP POP POP POP POP POP POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0x1A2E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x1A44 CALLER DUP1 DUP6 DUP6 PUSH2 0x2A68 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xCE SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xCDE8D1C PUSH2 0x1A76 PUSH2 0x2C8B JUMP JUMPDEST PUSH1 0xD3 SLOAD PUSH1 0xD4 SLOAD PUSH1 0xD0 SLOAD PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1AA2 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x49F6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1ABF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBBA SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0xFF AND PUSH2 0x1B05 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x1B1B CALLER DUP5 DUP5 DUP5 PUSH2 0x34A5 JUMP JUMPDEST POP POP PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0x1B52 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x1B64 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0x1B6D PUSH2 0x2322 JUMP JUMPDEST SWAP1 POP PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH2 0x1BA9 DUP8 PUSH2 0x22B2 JUMP JUMPDEST PUSH2 0x1BB1 PUSH2 0x2322 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP SWAP2 SWAP4 POP SWAP2 SWAP4 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0x1BE5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x1BF7 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0x1537 CALLER CALLER DUP5 PUSH2 0x2EE2 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0x1C28 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x1C3A PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0x1537 CALLER CALLER DUP5 PUSH1 0x0 PUSH2 0x25AC JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH2 0x1C6D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x1C80 DUP4 PUSH2 0x251C JUMP JUMPDEST PUSH2 0x1C88 PUSH2 0x17FB JUMP JUMPDEST POP PUSH2 0xDB5 DUP4 CALLER PUSH1 0x0 DUP6 PUSH2 0x25AC JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBBA PUSH32 0x0 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0xDB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1CEE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4A80 JUMP JUMPDEST PUSH1 0xD6 SLOAD DUP2 GT ISZERO PUSH2 0x1D10 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4AD6 JUMP JUMPDEST PUSH1 0xD6 SLOAD PUSH1 0x0 PUSH2 0x1D1F DUP4 DUP4 PUSH2 0x4830 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0xD6 DUP2 SWAP1 SSTORE POP PUSH32 0x9E19EC7D2B8F8A94DF8CC0072453ACE318D221E3CBB2731D0EAA0BAAC856520F DUP3 DUP3 PUSH1 0x40 MLOAD PUSH2 0x1461 SWAP3 SWAP2 SWAP1 PUSH2 0x47D1 JUMP JUMPDEST PUSH2 0x1D61 PUSH2 0x1FDF JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH2 0x1D92 PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DDA CALLER DUP6 DUP6 DUP6 PUSH1 0x0 PUSH2 0x3261 JUMP JUMPDEST POP PUSH1 0x0 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xCE SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x73B8A74 PUSH2 0x1E00 PUSH2 0x2C8B JUMP JUMPDEST PUSH1 0xD3 SLOAD PUSH1 0xD4 SLOAD PUSH1 0xD6 SLOAD PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1AA2 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x458F JUMP JUMPDEST NUMBER SWAP1 JUMP JUMPDEST TIMESTAMP SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x1E3B JUMPI POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E45 PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SLOAD EQ PUSH2 0x1E66 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDFF50CB PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH2 0x1E6F PUSH2 0x2C8B JUMP JUMPDEST LT ISZERO PUSH2 0x1E8E JUMPI PUSH1 0x40 MLOAD PUSH4 0x3345E999 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xD4 SLOAD DUP3 GT ISZERO PUSH2 0x1EB1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x78D29805 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0xD4 SLOAD PUSH2 0x1EBF SWAP2 SWAP1 PUSH2 0x4830 JUMP JUMPDEST PUSH1 0xD4 DUP2 SWAP1 SSTORE PUSH1 0xCC SLOAD SWAP1 SWAP2 POP PUSH2 0x1EE2 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH2 0x382C JUMP JUMPDEST PUSH1 0xCC SLOAD PUSH1 0xCD SLOAD PUSH1 0xC9 SLOAD PUSH1 0x40 MLOAD PUSH4 0x5BEBB3B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x100 SWAP5 DUP6 SWAP1 DIV DUP2 AND SWAP5 PUSH4 0x16FAECEC SWAP5 PUSH2 0x1F2A SWAP5 SWAP1 DUP4 AND SWAP4 SWAP2 SWAP1 DIV SWAP1 SWAP2 AND SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x4 ADD PUSH2 0x4B2A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1F58 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0xCC PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x9CC63BB4EF37AD6A5F5F657DFAF94865531D4234ACBC431CC8AC035468F62720 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1FAC SWAP3 SWAP2 SWAP1 PUSH2 0x47D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xAED JUMPI PUSH1 0x40 MLOAD PUSH4 0x42BCDF7F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x12F9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4B84 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x202F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4BD6 JUMP JUMPDEST PUSH1 0x97 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP1 PUSH32 0x66FD58E82F7B31A2A5C30E0888F3093EFE4E111B00CD2B0C31FE014601293AA0 SWAP1 PUSH2 0x2082 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x4815 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0xEADE3EED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xEADE3EED SWAP1 PUSH2 0x20C1 SWAP1 ADDRESS SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x4815 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x20EF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x20FB PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SLOAD EQ PUSH2 0x211C JUMPI PUSH1 0x40 MLOAD PUSH4 0xC9021E2F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2127 DUP5 PUSH2 0x22B2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP5 LT ISZERO PUSH2 0x2139 JUMPI DUP4 PUSH2 0x213B JUMP JUMPDEST DUP2 JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2149 DUP8 DUP4 PUSH2 0x2D1C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2157 DUP3 DUP6 PUSH2 0x4830 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0xD3 SLOAD PUSH2 0x2169 SWAP2 SWAP1 PUSH2 0x4830 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP11 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP7 DUP2 SSTORE PUSH1 0xD2 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE PUSH1 0xD3 DUP5 SWAP1 SSTORE MLOAD SWAP3 SWAP4 POP SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x1A2A22CB034D26D1854BDC6666A5B91FE25EFBBB5DCAD3B0355478D6F5C362A1 SWAP1 PUSH2 0x21CF SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH2 0x4843 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0xCD SLOAD PUSH1 0xD2 SLOAD PUSH1 0x40 MLOAD PUSH4 0x1EDEDC91 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x1EDEDC91 SWAP2 PUSH2 0x2210 SWAP2 ADDRESS SWAP2 DUP15 SWAP2 DUP15 SWAP2 DUP11 SWAP2 PUSH1 0x4 ADD PUSH2 0x4BE6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x222A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x223E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP5 SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2258 DUP2 PUSH2 0x1FB8 JUMP JUMPDEST PUSH1 0xCC DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH2 0x100 DUP2 DUP2 MUL PUSH2 0x100 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT DUP6 AND OR SWAP1 SWAP5 SSTORE PUSH1 0x40 MLOAD SWAP4 SWAP1 SWAP3 DIV AND SWAP2 DUP3 SWAP1 PUSH32 0xAFEC95C8612496C3ECF5DDDC71E393528FE29BD145FBAF9C6B496D78D7E2D79B SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE DUP1 SLOAD DUP1 DUP4 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 SUB PUSH2 0x22F7 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xD2 SLOAD DUP2 MLOAD PUSH1 0x0 SWAP2 PUSH2 0x2308 SWAP2 PUSH2 0x4C0E JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x20 ADD MLOAD DUP2 PUSH2 0x231A SWAP2 SWAP1 PUSH2 0x4C43 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0xD5 SLOAD PUSH1 0x0 SWAP1 DUP1 DUP3 SUB PUSH2 0x2337 JUMPI POP POP PUSH1 0xCF SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2341 PUSH2 0x2C8B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0xD4 SLOAD PUSH1 0xD6 SLOAD PUSH1 0xD3 SLOAD DUP5 PUSH2 0x2359 SWAP2 SWAP1 PUSH2 0x4802 JUMP JUMPDEST PUSH2 0x2363 SWAP2 SWAP1 PUSH2 0x4802 JUMP JUMPDEST PUSH2 0x236D SWAP2 SWAP1 PUSH2 0x4830 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH2 0x2384 PUSH8 0xDE0B6B3A7640000 DUP5 PUSH2 0x4C0E JUMP JUMPDEST PUSH2 0x238E SWAP2 SWAP1 PUSH2 0x4C43 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x23ED DUP4 PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x23B6 SWAP3 SWAP2 SWAP1 PUSH2 0x4C57 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x3848 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x40 MLOAD PUSH4 0x18C5E8AB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x18C5E8AB SWAP1 PUSH2 0x2425 SWAP1 CALLER SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x4C65 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2442 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2466 SWAP2 SWAP1 PUSH2 0x4C90 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x248C JUMPI CALLER ADDRESS DUP4 PUSH1 0x40 MLOAD PUSH4 0x4A3FA293 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4CB1 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x2498 PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SLOAD EQ PUSH2 0x24B9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7DFCA6B7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 GT ISZERO PUSH2 0x24E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x717220F3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xD0 DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xAAA68312E2EA9D50E16AF5068410AB56E1A1FD06037B1A35664812C30F821460 SWAP1 PUSH2 0x2082 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x47D1 JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0x2173067 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x10B98338 SWAP1 PUSH2 0x254E SWAP1 DUP5 SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x4815 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x256B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x258F SWAP2 SWAP1 PUSH2 0x4C90 JUMP JUMPDEST PUSH2 0xAED JUMPI PUSH1 0x40 MLOAD PUSH4 0xCF0B6F5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 ISZERO DUP1 PUSH2 0x25B7 JUMPI POP DUP1 ISZERO JUMPDEST PUSH2 0x25D3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4D2F JUMP JUMPDEST PUSH2 0x25DB PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SLOAD EQ PUSH2 0x25FC JUMPI PUSH1 0x40 MLOAD PUSH4 0x97B5CFCD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x2611 PUSH2 0x2322 JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP PUSH1 0x0 DUP1 DUP5 ISZERO PUSH2 0x2626 JUMPI DUP5 SWAP2 POP PUSH2 0x2664 JUMP JUMPDEST PUSH2 0x2630 DUP5 DUP5 PUSH2 0x38DA JUMP JUMPDEST SWAP2 POP PUSH1 0x0 PUSH2 0x263E DUP4 DUP6 PUSH2 0x38F8 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x264F JUMPI POP DUP5 DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x2662 JUMPI DUP3 PUSH2 0x265E DUP2 PUSH2 0x4D3F JUMP JUMPDEST SWAP4 POP POP JUMPDEST POP JUMPDEST PUSH2 0x266E DUP4 DUP4 PUSH2 0x2C73 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x2690 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4D84 JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0x47323875 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x8E6470EA SWAP1 PUSH2 0x26C4 SWAP1 ADDRESS SWAP1 DUP12 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x4D94 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x26F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0xD4 SLOAD PUSH2 0x2702 PUSH2 0x2C8B JUMP JUMPDEST PUSH2 0x270C SWAP2 SWAP1 PUSH2 0x4830 JUMP JUMPDEST LT ISZERO PUSH2 0x272B JUMPI PUSH1 0x40 MLOAD PUSH4 0x91240A1B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0xD5 SLOAD PUSH2 0x2739 SWAP2 SWAP1 PUSH2 0x4830 JUMP JUMPDEST PUSH1 0xD5 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x2760 SWAP1 DUP5 SWAP1 PUSH2 0x4830 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP2 SWAP1 SSTORE SWAP1 POP PUSH2 0x2787 DUP8 DUP4 PUSH2 0x382C JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5397 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP6 PUSH1 0x40 MLOAD PUSH2 0x27B8 SWAP2 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xBD5034FFBD47E4E72A94BAA2CDB74C6FAD73CB3BCDC13036B72EC8306F5A7646 DUP4 DUP6 DUP5 PUSH1 0x40 MLOAD PUSH2 0x27FD SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4843 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0x51DFF989 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x51DFF989 SWAP1 PUSH2 0x283B SWAP1 ADDRESS SWAP1 DUP13 SWAP1 DUP8 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x4DAF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2855 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1654 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0xC0891BA9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xC0891BA9 SWAP1 PUSH2 0x289D SWAP1 ADDRESS SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x4D94 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x28B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x28CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x28D7 PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SLOAD EQ PUSH2 0x28F8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x38D88597 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x290D PUSH2 0x2322 JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP PUSH1 0x0 PUSH2 0x291D DUP6 DUP5 PUSH2 0x2D1C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x292B DUP3 DUP5 PUSH2 0x38DA JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0xD5 SLOAD PUSH2 0x293B SWAP2 SWAP1 PUSH2 0x4802 JUMP JUMPDEST PUSH1 0xD5 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x2962 SWAP1 DUP4 SWAP1 PUSH2 0x4802 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE MLOAD SWAP2 SWAP3 POP SWAP1 PUSH32 0xB4C03061FB5B7FED76389D5AF8F2E0DDB09F8C70D1333ABBB62582835E10ACCB SWAP1 PUSH2 0x29B5 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH2 0x4843 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5397 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP5 PUSH1 0x40 MLOAD PUSH2 0x29EF SWAP2 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0x41C728B9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x41C728B9 SWAP1 PUSH2 0x2A2D SWAP1 ADDRESS SWAP1 DUP11 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x4DAF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2A5B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0x6D0BE88D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x6D0BE88D SWAP1 PUSH2 0x2A9E SWAP1 ADDRESS SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x4DCA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2ACC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x2B02 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8CD22D19 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x2B26 JUMPI POP PUSH1 0x0 NOT PUSH2 0x2B4E JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD JUMPDEST PUSH1 0x0 PUSH2 0x2B5A DUP4 DUP4 PUSH2 0x4830 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x2B82 SWAP1 DUP6 SWAP1 PUSH2 0x4830 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x2BAA SWAP1 DUP7 SWAP1 PUSH2 0x4802 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP7 SWAP1 SSTORE SWAP2 DUP10 AND DUP2 MSTORE KECCAK256 DUP2 SWAP1 SSTORE SWAP1 POP PUSH1 0x0 NOT DUP5 EQ PUSH2 0x2C04 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP13 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5397 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP8 PUSH1 0x40 MLOAD PUSH2 0x2C35 SWAP2 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0x352B4A3F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x6A56947E SWAP1 PUSH2 0x283B SWAP1 ADDRESS SWAP1 DUP12 SWAP1 DUP12 SWAP1 DUP12 SWAP1 PUSH1 0x4 ADD PUSH2 0x4DCA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2C80 DUP5 DUP5 PUSH2 0x3453 JUMP JUMPDEST SWAP1 POP PUSH2 0x231A DUP2 PUSH2 0x391B JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1AA2 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x417F JUMP JUMPDEST PUSH2 0x2CCA DUP2 PUSH2 0x1FB8 JUMP JUMPDEST PUSH1 0xDB DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x6DBF1FF28F860DE5EDAFA4C6505E37C0ABA213288CC4166C5352B6D3776C79EF SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP3 SWAP1 DUP3 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2D56 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x417F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D73 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2D97 SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST SWAP1 POP PUSH2 0x2DAE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP7 ADDRESS DUP8 PUSH2 0x3933 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2DDD SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x417F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2DFA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2E1E SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST SWAP1 POP PUSH2 0x2E2A DUP3 DUP3 PUSH2 0x4830 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH2 0xAED DUP2 PUSH2 0x395A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2E5A PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SLOAD EQ PUSH2 0x2E7D JUMPI DUP1 PUSH1 0x40 MLOAD PUSH4 0x38ACF799 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP2 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH2 0x2E87 CALLER DUP6 PUSH2 0x2D1C JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0xD4 SLOAD PUSH2 0x2E97 SWAP2 SWAP1 PUSH2 0x4802 JUMP JUMPDEST PUSH1 0xD4 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP3 POP CALLER SWAP1 PUSH32 0xA91E67C5EA634CD43A12C5A482724B03DE01E85CA68702A53D0C2F45CB7C1DC5 SWAP1 PUSH2 0x2ED3 SWAP1 DUP5 SWAP1 DUP7 SWAP1 PUSH2 0x47D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0xDF71403B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xDF71403B SWAP1 PUSH2 0x2F16 SWAP1 ADDRESS SWAP1 DUP8 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x4D94 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F44 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x2F50 PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SLOAD EQ PUSH2 0x2F71 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE8D8C61 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0xD4 SLOAD PUSH2 0x2F7D PUSH2 0x2C8B JUMP JUMPDEST PUSH2 0x2F87 SWAP2 SWAP1 PUSH2 0x4830 JUMP JUMPDEST LT ISZERO PUSH2 0x2FA6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x48C25881 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2FB1 DUP5 PUSH2 0x22B2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2FBF DUP4 DUP4 PUSH2 0x4802 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0xD3 SLOAD PUSH2 0x2FD1 SWAP2 SWAP1 PUSH2 0x4802 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 DUP2 SSTORE PUSH1 0xD2 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE PUSH1 0xD3 DUP2 SWAP1 SSTORE SWAP1 POP PUSH2 0x3006 DUP6 DUP6 PUSH2 0x382C JUMP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x13ED6866D4E1EE6DA46F845C46D7E54120883D75C5EA9A2DACC1C4CA8984AB80 DUP6 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x3043 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4843 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0x5C778605 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x5C778605 SWAP1 PUSH2 0x307F SWAP1 ADDRESS SWAP1 DUP11 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x4D94 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3099 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x30AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x30E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4E3A JUMP JUMPDEST PUSH2 0x30E8 PUSH2 0x39AC JUMP JUMPDEST PUSH2 0x30F1 DUP4 PUSH2 0x39DB JUMP JUMPDEST PUSH1 0xD1 SLOAD ISZERO DUP1 ISZERO PUSH2 0x3101 JUMPI POP PUSH1 0xD2 SLOAD ISZERO JUMPDEST PUSH2 0x311D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4E8A JUMP JUMPDEST PUSH1 0xCF DUP9 SWAP1 SSTORE DUP8 PUSH2 0x313F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4EE7 JUMP JUMPDEST PUSH2 0x3148 DUP11 PUSH2 0x3A02 JUMP JUMPDEST PUSH2 0x3150 PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SSTORE PUSH8 0xDE0B6B3A7640000 PUSH1 0xD2 SSTORE PUSH2 0x3168 DUP10 PUSH2 0x3341 JUMP JUMPDEST PUSH2 0x3171 DUP2 PUSH2 0x2490 JUMP JUMPDEST PUSH1 0xCA PUSH2 0x317D DUP9 DUP3 PUSH2 0x4F7C JUMP JUMPDEST POP PUSH1 0xCB PUSH2 0x318A DUP8 DUP3 PUSH2 0x4F7C JUMP JUMPDEST POP PUSH1 0xCC DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF DUP8 AND OR SWAP1 SSTORE DUP2 MLOAD PUSH2 0x31A5 SWAP1 PUSH2 0x2CC1 JUMP JUMPDEST PUSH2 0x31B2 DUP3 PUSH1 0x20 ADD MLOAD PUSH2 0x224F JUMP JUMPDEST PUSH7 0xB1A2BC2EC50000 PUSH1 0xDA SSTORE PUSH1 0xC9 DUP1 SLOAD PUSH2 0x100 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND PUSH2 0x100 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP15 DUP2 AND DUP3 MUL SWAP3 SWAP1 SWAP3 OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x18160DDD PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP1 SWAP4 DIV SWAP1 SWAP2 AND SWAP2 PUSH4 0x18160DDD SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3226 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x324A SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST POP PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x2A5B DUP5 PUSH2 0x2E34 JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0xFF AND PUSH2 0x3283 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x46A3 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x3295 PUSH2 0x17FB JUMP JUMPDEST POP PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA6AFED95 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x32D8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x32FC SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x331F JUMPI DUP1 PUSH1 0x40 MLOAD PUSH4 0x3EEA49B7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP2 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH2 0x332C DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x3ADD JUMP JUMPDEST POP POP PUSH1 0xC9 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x334B PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SLOAD EQ PUSH2 0x336C JUMPI PUSH1 0x40 MLOAD PUSH4 0xBE2A5CB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xCE PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2191F92A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x33C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x33E6 SWAP2 SWAP1 PUSH2 0x4C90 JUMP JUMPDEST PUSH2 0x3402 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x5074 JUMP JUMPDEST PUSH1 0xCE DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP4 AND SWAP1 PUSH32 0xEDFFC32E068C7C95DFD4BDFD5C4D939A084D6B11C4199EAC8436ED234D72F926 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x347B DUP6 PUSH1 0x0 ADD MLOAD DUP6 PUSH2 0x3EBA JUMP JUMPDEST SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3491 DUP6 DUP6 PUSH2 0x3453 JUMP JUMPDEST SWAP1 POP PUSH2 0x238E PUSH2 0x349F DUP3 PUSH2 0x391B JUMP JUMPDEST DUP5 PUSH2 0x3EC6 JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0x37883E5 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x1BC41F28 SWAP1 PUSH2 0x34DB SWAP1 ADDRESS SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5084 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x34F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3509 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x353F JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A946267 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4ADA90AF PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x4ADA90AF SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3589 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x35AD SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x35CB DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xDA SLOAD DUP2 MSTORE POP PUSH2 0x38F8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x35E7 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 DUP7 DUP2 MSTORE POP PUSH2 0x38DA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x35F5 DUP3 DUP7 PUSH2 0x4830 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x360C PUSH2 0x2322 JUMP JUMPDEST SWAP1 MSTORE SWAP1 POP PUSH1 0x0 PUSH2 0x361C DUP3 DUP6 PUSH2 0x2C73 JUMP JUMPDEST SWAP1 POP DUP4 PUSH1 0xD5 SLOAD PUSH2 0x362C SWAP2 SWAP1 PUSH2 0x4830 JUMP JUMPDEST PUSH1 0xD5 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3653 SWAP1 DUP9 SWAP1 PUSH2 0x4830 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP12 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x3683 SWAP1 DUP5 SWAP1 PUSH2 0x4802 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP12 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0xCC SLOAD PUSH2 0x36B4 SWAP2 PUSH2 0x100 SWAP1 SWAP2 DIV AND DUP3 PUSH2 0x382C JUMP JUMPDEST PUSH1 0xCC SLOAD PUSH1 0xCD SLOAD PUSH1 0xC9 SLOAD PUSH1 0x40 MLOAD PUSH4 0x5BEBB3B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x100 SWAP5 DUP6 SWAP1 DIV DUP2 AND SWAP5 PUSH4 0x16FAECEC SWAP5 PUSH2 0x36FC SWAP5 SWAP1 DUP4 AND SWAP4 SWAP2 SWAP1 DIV SWAP1 SWAP2 AND SWAP1 PUSH1 0x1 SWAP1 PUSH1 0x4 ADD PUSH2 0x4B2A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3716 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x372A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5397 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP6 PUSH1 0x40 MLOAD PUSH2 0x375F SWAP2 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0xCC SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x100 SWAP1 SWAP3 DIV DUP3 AND SWAP2 DUP11 AND SWAP1 PUSH32 0x3AC0548D62D3FA3C9A817CD33899B9ACACD57E8958EBE51BC7D9A79F26A8A5DB SWAP1 PUSH2 0x37AE SWAP1 DUP6 SWAP1 PUSH2 0x4168 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0x6D35BF91 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x6D35BF91 SWAP1 PUSH2 0x37EE SWAP1 ADDRESS SWAP1 DUP15 SWAP1 DUP15 SWAP1 DUP15 SWAP1 DUP15 SWAP1 PUSH1 0x4 ADD PUSH2 0x50B9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3808 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x381C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x23ED DUP2 DUP5 DUP5 PUSH2 0x2397 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x389D DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3ED2 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH1 0x0 EQ DUP1 PUSH2 0x38BE JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x38BE SWAP2 SWAP1 PUSH2 0x4C90 JUMP JUMPDEST PUSH2 0x23ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x5135 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1030 PUSH2 0x38F1 DUP5 PUSH8 0xDE0B6B3A7640000 PUSH2 0x3EBA JUMP JUMPDEST DUP4 MLOAD PUSH2 0x3EE1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 PUSH2 0x3911 DUP5 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x3EBA JUMP JUMPDEST PUSH2 0x1030 SWAP2 SWAP1 PUSH2 0x4C43 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0xAD6 SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 PUSH2 0x4C43 JUMP JUMPDEST PUSH2 0x3954 DUP5 PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x23B6 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4D94 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x39D3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4E3A JUMP JUMPDEST PUSH2 0x12F9 PUSH2 0x3EED JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xAE4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4E3A JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH3 0x3F1EE9 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 DUP5 AND SWAP2 PUSH3 0x7E3DD2 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3A4C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3A70 SWAP2 SWAP1 PUSH2 0x4C90 JUMP JUMPDEST PUSH2 0x3A8C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x5074 JUMP JUMPDEST PUSH1 0xCD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP4 AND SWAP1 PUSH32 0x7AC369DBD14FA5EA3F473ED67CC9D598964A77501540BA6751EB0B3DECF5870D SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0xE89D51AD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xE89D51AD SWAP1 PUSH2 0x3B15 SWAP1 ADDRESS SWAP1 DUP7 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5145 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3B2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3B43 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x3B4F PUSH2 0x1C96 JUMP JUMPDEST PUSH1 0xD1 SLOAD EQ PUSH2 0x3B70 JUMPI PUSH1 0x40 MLOAD PUSH4 0x80965B1B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3B78 PUSH2 0x1C96 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6C540BAF PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3BB6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3BDA SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST EQ PUSH2 0x3BF8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1046F38D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x3C2A JUMPI PUSH1 0x40 MLOAD PUSH4 0x1BD1A621 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x0 SUB PUSH2 0x3C4B JUMPI PUSH1 0x40 MLOAD PUSH4 0xD29DA7EF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 NOT DUP4 SUB PUSH2 0x3C6D JUMPI PUSH1 0x40 MLOAD PUSH4 0x5982C5BB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3C7A DUP7 DUP7 DUP7 PUSH2 0x208E JUMP JUMPDEST PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0xC488847B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xC488847B SWAP1 PUSH2 0x3CB4 SWAP1 ADDRESS SWAP1 DUP10 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x4D94 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3CD0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3CF4 SWAP2 SWAP1 PUSH2 0x5187 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ PUSH2 0x3D18 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x520A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x3D46 SWAP1 DUP12 SWAP1 PUSH1 0x4 ADD PUSH2 0x417F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3D63 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3D87 SWAP2 SWAP1 PUSH2 0x477C JUMP JUMPDEST LT ISZERO PUSH2 0x3DA5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x524E JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SUB PUSH2 0x3DC6 JUMPI PUSH2 0x3DC1 ADDRESS DUP10 DUP10 DUP5 PUSH2 0x34A5 JUMP JUMPDEST PUSH2 0x3E29 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xB2A02FF1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH4 0xB2A02FF1 SWAP1 PUSH2 0x3DF6 SWAP1 DUP12 SWAP1 DUP12 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x4D94 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3E10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3E24 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x298637F684DA70674F26509B10F07EC2FBC77A335AB1E7D6215A4B2484D8BB52 DUP7 DUP6 PUSH1 0x40 MLOAD PUSH2 0x3E78 SWAP3 SWAP2 SWAP1 PUSH2 0x47D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0xCD SLOAD PUSH1 0x40 MLOAD PUSH4 0x47EF3B3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x47EF3B3B SWAP1 PUSH2 0x283B SWAP1 ADDRESS SWAP1 DUP10 SWAP1 DUP14 SWAP1 DUP14 SWAP1 DUP11 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x525E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1030 DUP3 DUP5 PUSH2 0x4C0E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1030 DUP3 DUP5 PUSH2 0x4802 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x231A DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x3F1D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1030 DUP3 DUP5 PUSH2 0x4C43 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3F14 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x4E3A JUMP JUMPDEST PUSH2 0x12F9 CALLER PUSH2 0x2E34 JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x3F3F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x52F0 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x3F5B SWAP2 SWAP1 PUSH2 0x5322 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3F98 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3F9D JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x3FAE DUP8 DUP4 DUP4 DUP8 PUSH2 0x3FB9 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x3FF8 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x3FF1 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x3FF1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP1 PUSH2 0x5362 JUMP JUMPDEST POP DUP2 PUSH2 0x231A JUMP JUMPDEST PUSH2 0x231A DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x400D JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA1F SWAP2 SWAP1 PUSH2 0x407D JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4042 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x402A JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4055 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x406C DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x4027 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1030 DUP2 DUP5 PUSH2 0x404B JUMP JUMPDEST DUP1 JUMPDEST DUP2 EQ PUSH2 0xAED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0xAD6 DUP2 PUSH2 0x408E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x40BB JUMPI PUSH2 0x40BB PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x231A DUP5 DUP5 PUSH2 0x409B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xAD6 JUMP JUMPDEST PUSH2 0x4090 DUP2 PUSH2 0x40C7 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xAD6 DUP2 PUSH2 0x40D8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4102 JUMPI PUSH2 0x4102 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x410E DUP6 DUP6 PUSH2 0x40E1 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x411F DUP6 DUP3 DUP7 ADD PUSH2 0x409B JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xAD6 DUP3 DUP5 PUSH2 0x4129 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4156 JUMPI PUSH2 0x4156 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x231A DUP5 DUP5 PUSH2 0x40E1 JUMP JUMPDEST DUP1 PUSH2 0x412D JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xAD6 DUP3 DUP5 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x412D DUP2 PUSH2 0x40C7 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xAD6 DUP3 DUP5 PUSH2 0x4176 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAD6 DUP3 PUSH2 0x40C7 JUMP JUMPDEST PUSH2 0x4090 DUP2 PUSH2 0x418D JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xAD6 DUP2 PUSH2 0x4198 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x41C1 JUMPI PUSH2 0x41C1 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x231A DUP5 DUP5 PUSH2 0x41A1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x41E5 JUMPI PUSH2 0x41E5 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x41F1 DUP7 DUP7 PUSH2 0x40E1 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x4202 DUP7 DUP3 DUP8 ADD PUSH2 0x40E1 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x4213 DUP7 DUP3 DUP8 ADD PUSH2 0x409B JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0xFF DUP2 AND PUSH2 0x412D JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xAD6 DUP3 DUP5 PUSH2 0x421D JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAD6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x424B JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAD6 DUP3 PUSH2 0x4234 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAD6 DUP3 PUSH2 0x4257 JUMP JUMPDEST PUSH2 0x412D DUP2 PUSH2 0x4262 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xAD6 DUP3 DUP5 PUSH2 0x426D JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x42C0 JUMPI PUSH2 0x42C0 PUSH2 0x4284 JUMP JUMPDEST PUSH1 0x40 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x42D2 PUSH1 0x40 MLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x42DE DUP3 DUP3 PUSH2 0x429A JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x42FD JUMPI PUSH2 0x42FD PUSH2 0x4284 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x432D PUSH2 0x4328 DUP5 PUSH2 0x42E3 JUMP JUMPDEST PUSH2 0x42C7 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x4348 JUMPI PUSH2 0x4348 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4353 DUP5 DUP3 DUP6 PUSH2 0x430E JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x436F JUMPI PUSH2 0x436F PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x231A DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x431A JUMP JUMPDEST PUSH1 0xFF DUP2 AND PUSH2 0x4090 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xAD6 DUP2 PUSH2 0x437F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x43A8 JUMPI PUSH2 0x43A8 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43B2 PUSH1 0x40 PUSH2 0x42C7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x43C0 DUP5 DUP5 PUSH2 0x40E1 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x43D1 DUP5 DUP5 DUP4 ADD PUSH2 0x40E1 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x180 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x4402 JUMPI PUSH2 0x4402 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x440E DUP15 DUP15 PUSH2 0x40E1 JUMP JUMPDEST SWAP12 POP POP PUSH1 0x20 PUSH2 0x441F DUP15 DUP3 DUP16 ADD PUSH2 0x41A1 JUMP JUMPDEST SWAP11 POP POP PUSH1 0x40 PUSH2 0x4430 DUP15 DUP3 DUP16 ADD PUSH2 0x41A1 JUMP JUMPDEST SWAP10 POP POP PUSH1 0x60 PUSH2 0x4441 DUP15 DUP3 DUP16 ADD PUSH2 0x409B JUMP JUMPDEST SWAP9 POP POP PUSH1 0x80 DUP13 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4461 JUMPI PUSH2 0x4461 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x446D DUP15 DUP3 DUP16 ADD PUSH2 0x435B JUMP JUMPDEST SWAP8 POP POP PUSH1 0xA0 DUP13 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x448D JUMPI PUSH2 0x448D PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4499 DUP15 DUP3 DUP16 ADD PUSH2 0x435B JUMP JUMPDEST SWAP7 POP POP PUSH1 0xC0 PUSH2 0x44AA DUP15 DUP3 DUP16 ADD PUSH2 0x4388 JUMP JUMPDEST SWAP6 POP POP PUSH1 0xE0 PUSH2 0x44BB DUP15 DUP3 DUP16 ADD PUSH2 0x40E1 JUMP JUMPDEST SWAP5 POP POP PUSH2 0x100 PUSH2 0x44CD DUP15 DUP3 DUP16 ADD PUSH2 0x40E1 JUMP JUMPDEST SWAP4 POP POP PUSH2 0x120 PUSH2 0x44DF DUP15 DUP3 DUP16 ADD PUSH2 0x4393 JUMP JUMPDEST SWAP3 POP POP PUSH2 0x160 PUSH2 0x44F1 DUP15 DUP3 DUP16 ADD PUSH2 0x409B JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x4090 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xAD6 DUP2 PUSH2 0x4504 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4532 JUMPI PUSH2 0x4532 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x453E DUP9 DUP9 PUSH2 0x40E1 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x454F DUP9 DUP3 DUP10 ADD PUSH2 0x40E1 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x4560 DUP9 DUP3 DUP10 ADD PUSH2 0x409B JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0x4571 DUP9 DUP3 DUP10 ADD PUSH2 0x41A1 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0x4582 DUP9 DUP3 DUP10 ADD PUSH2 0x450C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x459D DUP3 DUP8 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x45AA PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x45B7 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x238E PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x4162 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x45DA JUMPI PUSH2 0x45DA PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x45E6 DUP6 DUP6 PUSH2 0x40E1 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x411F DUP6 DUP3 DUP7 ADD PUSH2 0x40E1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x460F JUMPI PUSH2 0x460F PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x461B DUP7 DUP7 PUSH2 0x40E1 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x462C DUP7 DUP3 DUP8 ADD PUSH2 0x409B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x4213 DUP7 DUP3 DUP8 ADD PUSH2 0x41A1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP2 DIV PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x4667 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x4679 JUMPI PUSH2 0x4679 PUSH2 0x463D JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xA DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH10 0x1C994B595B9D195C9959 PUSH1 0xB2 SHL DUP2 MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x467F JUMP JUMPDEST PUSH1 0x2F DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x56546F6B656E3A3A7377656570546F6B656E3A206F6E6C792061646D696E2063 DUP2 MSTORE PUSH15 0x616E20737765657020746F6B656E73 PUSH1 0x88 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x46B3 JUMP JUMPDEST PUSH1 0x32 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x56546F6B656E3A3A7377656570546F6B656E3A2063616E206E6F742073776565 DUP2 MSTORE PUSH18 0x38103AB73232B9363CB4B733903A37B5B2B7 PUSH1 0x71 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x4712 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xAD6 DUP2 PUSH2 0x408E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4791 JUMPI PUSH2 0x4791 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x231A DUP5 DUP5 PUSH2 0x4771 JUMP JUMPDEST PUSH1 0xD DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH13 0x125B9D985B1A5908125B9C1D5D PUSH1 0x9A SHL DUP2 MSTORE SWAP2 POP PUSH2 0x469C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x479D JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x47DF DUP3 DUP6 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x1030 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x4162 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0xAD6 JUMPI PUSH2 0xAD6 PUSH2 0x47EC JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4823 DUP3 DUP6 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x1030 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x4176 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0xAD6 JUMPI PUSH2 0xAD6 PUSH2 0x47EC JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4851 DUP3 DUP7 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x485E PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x231A PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x4162 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAD6 PUSH2 0x4248 DUP4 DUP2 JUMP JUMPDEST PUSH2 0x412D DUP2 PUSH2 0x486B JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x488E DUP3 DUP7 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x485E PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x4877 JUMP JUMPDEST PUSH1 0x29 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4F776E61626C6532537465703A2063616C6C6572206973206E6F742074686520 DUP2 MSTORE PUSH9 0x3732BB9037BBB732B9 PUSH1 0xB9 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x489B JUMP JUMPDEST PUSH1 0x2E DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 DUP2 MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x48F1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND PUSH2 0xAD6 JUMP JUMPDEST PUSH2 0x412D DUP2 PUSH2 0x494C JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xAD6 DUP3 DUP5 PUSH2 0x4957 JUMP JUMPDEST PUSH1 0x1E DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x64656372656173656420616C6C6F77616E63652062656C6F77207A65726F0000 DUP2 MSTORE SWAP2 POP PUSH2 0x469C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x496E JUMP JUMPDEST PUSH1 0x1C DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x626F72726F772072617465206973206162737572646C79206869676800000000 DUP2 MSTORE SWAP2 POP PUSH2 0x469C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x49B2 JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD PUSH2 0x4A04 DUP3 DUP9 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x4A11 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x4A1E PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x4A2B PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x2E2A PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x4162 JUMP JUMPDEST PUSH1 0x2B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x6F6E6C792073686F727466616C6C20636F6E74726163742063616E2075706461 DUP2 MSTORE PUSH11 0x1D1948189859081919589D PUSH1 0xAA SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x4A38 JUMP JUMPDEST PUSH1 0x29 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x6D6F7265207468616E206261642064656274207265636F76657265642066726F DUP2 MSTORE PUSH9 0x369030BAB1BA34B7B7 PUSH1 0xB9 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x4A90 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP2 LT PUSH2 0xAED JUMPI PUSH2 0xAED PUSH2 0x4AE6 JUMP JUMPDEST DUP1 PUSH2 0x42DE DUP2 PUSH2 0x4AFC JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAD6 DUP3 PUSH2 0x4B0C JUMP JUMPDEST PUSH2 0x412D DUP2 PUSH2 0x4B16 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4B38 DUP3 DUP7 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x4B45 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x231A PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x4B21 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 SWAP2 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 PUSH2 0x469C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x4B52 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x696E76616C696420616365737320636F6E74726F6C206D616E61676572206164 DUP2 MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x4B94 JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD PUSH2 0x4BF4 DUP3 DUP9 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x4C01 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x4A1E PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x4176 JUMP JUMPDEST DUP2 DUP2 MUL DUP1 DUP3 ISZERO DUP4 DUP3 DIV DUP6 EQ OR PUSH2 0x4C26 JUMPI PUSH2 0x4C26 PUSH2 0x47EC JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4C52 JUMPI PUSH2 0x4C52 PUSH2 0x4C2D JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x47DF DUP3 DUP6 PUSH2 0x4176 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4C73 DUP3 DUP6 PUSH2 0x4176 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x231A DUP2 DUP5 PUSH2 0x404B JUMP JUMPDEST DUP1 MLOAD PUSH2 0xAD6 DUP2 PUSH2 0x4504 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4CA5 JUMPI PUSH2 0x4CA5 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x231A DUP5 DUP5 PUSH2 0x4C85 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4CBF DUP3 DUP7 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x4CCC PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x4176 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x238E DUP2 DUP5 PUSH2 0x404B JUMP JUMPDEST PUSH1 0x34 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x6F6E65206F662072656465656D546F6B656E73496E206F722072656465656D41 DUP2 MSTORE PUSH20 0x6D6F756E74496E206D757374206265207A65726F PUSH1 0x60 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x4CDE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 SUB PUSH2 0x4D52 JUMPI PUSH2 0x4D52 PUSH2 0x47EC JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x14 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH20 0x72656465656D416D6F756E74206973207A65726F PUSH1 0x60 SHL DUP2 MSTORE SWAP2 POP PUSH2 0x469C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x4D59 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4DA2 DUP3 DUP7 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x485E PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x4176 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x4DBD DUP3 DUP8 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x45AA PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x4176 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x4DD8 DUP3 DUP8 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x4DE5 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x45B7 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x4176 JUMP JUMPDEST PUSH1 0x2B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 DUP2 MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x4DF2 JUMP JUMPDEST PUSH1 0x23 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x6D61726B6574206D6179206F6E6C7920626520696E697469616C697A6564206F DUP2 MSTORE PUSH3 0x6E6365 PUSH1 0xE8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x4E4A JUMP JUMPDEST PUSH1 0x30 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x696E697469616C2065786368616E67652072617465206D757374206265206772 DUP2 MSTORE PUSH16 0x32B0BA32B9103A3430B7103D32B93797 PUSH1 0x81 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x4E9A JUMP JUMPDEST PUSH2 0x4F00 DUP4 PUSH2 0x486B JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 NOT PUSH1 0x8 SWAP5 SWAP1 SWAP5 MUL SWAP4 DUP5 SHL NOT AND SWAP3 SHL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x23ED DUP2 DUP5 DUP5 PUSH2 0x4EF7 JUMP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x248C JUMPI PUSH2 0x4F3B PUSH1 0x0 DUP3 PUSH2 0x4F1B JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x4F28 JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x23ED JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH1 0x20 PUSH1 0x1F DUP6 ADD DIV DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x4F6A JUMPI POP DUP1 JUMPDEST PUSH2 0x169A PUSH1 0x20 PUSH1 0x1F DUP7 ADD DIV DUP4 ADD DUP3 PUSH2 0x4F28 JUMP JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4F96 JUMPI PUSH2 0x4F96 PUSH2 0x4284 JUMP JUMPDEST PUSH2 0x4FA0 DUP3 SLOAD PUSH2 0x4653 JUMP JUMPDEST PUSH2 0x4FAB DUP3 DUP3 DUP6 PUSH2 0x4F43 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x4FDF JUMPI PUSH1 0x0 DUP5 ISZERO PUSH2 0x4FC7 JUMPI POP DUP6 DUP3 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x8 DUP7 MUL SHR NOT DUP2 AND PUSH1 0x2 DUP7 MUL OR DUP7 SSTORE POP PUSH2 0x5038 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x500F JUMPI DUP9 DUP6 ADD MLOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x4FEF JUMP JUMPDEST DUP7 DUP4 LT ISZERO PUSH2 0x502B JUMPI DUP5 DUP10 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x1F DUP10 AND PUSH1 0x8 MUL SHR NOT AND DUP3 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x2 DUP9 MUL ADD DUP9 SSTORE POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1C DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x6D61726B6572206D6574686F642072657475726E65642066616C736500000000 DUP2 MSTORE SWAP2 POP PUSH2 0x469C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x5040 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x5092 DUP3 DUP8 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x509F PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x50AC PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x238E PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x4176 JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD PUSH2 0x50C7 DUP3 DUP9 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x50D4 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x50E1 PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x4A2B PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x4176 JUMP JUMPDEST PUSH1 0x2A DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E DUP2 MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x50EE JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD PUSH2 0x5153 DUP3 DUP9 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x5160 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x516D PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x517A PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x2E2A PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x4129 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x519D JUMPI PUSH2 0x519D PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x51A9 DUP6 DUP6 PUSH2 0x4771 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x411F DUP6 DUP3 DUP7 ADD PUSH2 0x4771 JUMP JUMPDEST PUSH1 0x33 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4C49515549444154455F434F4D5054524F4C4C45525F43414C43554C4154455F DUP2 MSTORE PUSH19 0x105353D5539517D4D152569157D19052531151 PUSH1 0x6A SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x51BA JUMP JUMPDEST PUSH1 0x18 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4C49515549444154455F5345495A455F544F4F5F4D5543480000000000000000 DUP2 MSTORE SWAP2 POP PUSH2 0x469C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x521A JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD PUSH2 0x526C DUP3 DUP10 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x5279 PUSH1 0x20 DUP4 ADD DUP9 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x5286 PUSH1 0x40 DUP4 ADD DUP8 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x5293 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x4176 JUMP JUMPDEST PUSH2 0x52A0 PUSH1 0x80 DUP4 ADD DUP6 PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x3FAE PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0x4162 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F DUP2 MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x46FB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x52AD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x530A DUP3 MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x5318 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x4027 JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1030 DUP3 DUP5 PUSH2 0x5300 JUMP JUMPDEST PUSH1 0x1D DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 DUP2 MSTORE SWAP2 POP PUSH2 0x469C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xAD6 DUP2 PUSH2 0x532E JUMP INVALID PUSH20 0x65745265647563655265736572766573426C6F63 PUSH12 0x44656C74612875696E743235 CALLDATASIZE 0x29 0xDD CALLCODE MSTORE 0xAD SHL 0xE2 0xC8 SWAP12 PUSH10 0xC2B068FC378DAA952BA7 CALL PUSH4 0xC4A11628 CREATE2 GAS 0x4D CREATE2 0x23 0xB3 0xEF LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA5 REVERT PUSH8 0x77E1F72C4E9C76E8 OR GASPRICE 0xBB 0xBC MSIZE 0xEA STATICCALL 0x4C DIV MOD 0xE6 0xA5 GASPRICE JUMPI 0x29 CODESIZE SWAP10 0xD5 0xE0 LOG4 CALLCODE PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ","sourceMap":"3352:72470:38:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1226:18:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24420:232:38;;;;;;:::i;:::-;;:::i;:::-;;8983:281;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2102:147:26:-;;;;;;:::i;:::-;;:::i;19488:214:38:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;32413:155::-;;;;;;:::i;:::-;;:::i;2054:36:39:-;;;;;;12205:175:38;;;;;;:::i;:::-;;:::i;2705:26:39:-;;;;;;37745:116:38;;;:::i;3416:24:39:-;;;;;-1:-1:-1;;;;;3416:24:39;;;;;;;;;;:::i;33195:408:38:-;;;;;;:::i;:::-;;:::i;23584:241::-;;;;;;:::i;:::-;;:::i;15549:277::-;;;;;;:::i;:::-;;:::i;13669:255::-;;;;;;:::i;:::-;;:::i;8152:193::-;;;;;;:::i;:::-;;:::i;33907:435::-;;;;;;:::i;:::-;;:::i;20135:236::-;;;;;;:::i;:::-;;:::i;1412:21:39:-;;;;;;;;;;;;;;;;:::i;9708:409:38:-;;;;;;:::i;:::-;;:::i;11378:234::-;;;;;;:::i;:::-;;:::i;36134:99::-;;;:::i;12426:85:39:-;12500:4;12426:85;;32831:119:38;;;;;;:::i;:::-;;:::i;26798:1917::-;;;;;;:::i;:::-;;:::i;2473:27:39:-;;;;;;1640:39;;;;;-1:-1:-1;;;;;1640:39:39;;;;;;;;;;:::i;3299:41::-;;;;;;313:47:44;;;;;217:36:31;;252:1;217:36;;2191:33:39;;;;;;1130:25;;;;;;;;-1:-1:-1;;;;;1130:25:39;;;35026:119:38;;;;;;:::i;:::-;-1:-1:-1;;;;;35118:20:38;35092:7;35118:20;;;:13;:20;;;;;;;35026:119;2085:101:1;;;:::i;11765:142:38:-;;;:::i;22313:654::-;;;;;;:::i;:::-;;:::i;24901:142::-;;;;;;:::i;:::-;;:::i;2031:212:0:-;;;:::i;16190:219:38:-;;;;;;:::i;:::-;;:::i;18874:260::-;;;;;;:::i;:::-;;:::i;6172:866::-;;;;;;:::i;:::-;;:::i;30135:433::-;;;;;;:::i;:::-;;:::i;25565:242::-;;;;;;:::i;:::-;;:::i;1462:85:1:-;1534:6;;-1:-1:-1;;;;;1534:6:1;1462:85;;2601:28:39;;;;;;1317:20;;;:::i;37349:140:38:-;;;;;;:::i;:::-;;:::i;12836:198::-;;;;;;:::i;:::-;;:::i;10565:558::-;;;;;;:::i;:::-;;:::i;38695:2980::-;;;:::i;7481:183::-;;;;;;:::i;:::-;;:::i;2340:26:39:-;;;;;;3687:40;;;;;;36823:310:38;;;:::i;31223:175::-;;;;;;:::i;:::-;;:::i;2345:125:26:-;2442:21;;-1:-1:-1;;;;;2442:21:26;2345:125;;2798:22:39;;;;;;38023:149:38;;;:::i;35643:322::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;17942:206::-;;;;;;:::i;:::-;;:::i;497:33:44:-;;;;;3544:39:39;;;;;;14475:209:38;;;;;;:::i;:::-;;:::i;34686:150::-;;;;;;:::i;:::-;-1:-1:-1;;;;;34795:25:38;;;34769:7;34795:25;;;:18;:25;;;;;;;;:34;;;;;;;;;;;;;34686:150;17188:309;;;;;;:::i;:::-;;:::i;2447:116:44:-;;;:::i;1144:99:0:-;1223:13;;-1:-1:-1;;;;;1223:13:0;1144:99;;1511:43:39;;;;;;;;-1:-1:-1;;;;;1511:43:39;;;31676:433:38;;;;;;:::i;:::-;;:::i;1436:178:0:-;;;;;;:::i;:::-;;:::i;1776:42:39:-;;;;;-1:-1:-1;;;;;1776:42:39;;;21484:282:38;;;;;;:::i;:::-;;:::i;36440:181::-;;;:::i;1226:18:39:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24420:232:38:-;4174:11;;;;4166:34;;;;-1:-1:-1;;;4166:34:38;;;;;;;:::i;:::-;;;;;;;;;4210:11;:19;;-1:-1:-1;;4210:19:38;;;24507:16:::1;:14;:16::i;:::-;;24566:27;:25;:27::i;:::-;24537:25;::::0;24533:69;24595:7:::1;24533:69;24611:34;24632:12;24611:20;:34::i;:::-;-1:-1:-1::0;4250:11:38;:18;;-1:-1:-1;;4250:18:38;4264:4;4250:18;;;24420:232::o;8983:281::-;9060:4;9076:29;9097:7;9076:20;:29::i;:::-;9130:10;9116:11;9150:23;;;:18;:23;;;;;;;;-1:-1:-1;;;;;9150:32:38;;;;;;;;;;;:41;;;9206:30;;9130:10;;9206:30;;;;9185:6;;9206:30;:::i;:::-;;;;;;;;9253:4;9246:11;;;8983:281;;;;;:::o;2102:147:26:-;1355:13:1;:11;:13::i;:::-;2195:47:26::1;2220:21;2195:24;:47::i;:::-;2102:147:::0;:::o;19488:214:38:-;4174:11;;19570:7;;4174:11;;4166:34;;;;-1:-1:-1;;;4166:34:38;;;;;;;:::i;:::-;4210:11;:19;;-1:-1:-1;;4210:19:38;;;19589:16:::1;:14;:16::i;:::-;;19616:54;19634:10;19646;19658:11;19616:17;:54::i;:::-;;252:1:31;19680:15:38;;4250:11:::0;:18;;-1:-1:-1;;4250:18:38;4264:4;4250:18;;;19488:214;;-1:-1:-1;19488:214:38:o;32413:155::-;1355:13:1;:11;:13::i;:::-;32514:47:38::1;32539:21;32514:24;:47::i;12205:175::-:0;4174:11;;12292:7;;4174:11;;4166:34;;;;-1:-1:-1;;;4166:34:38;;;;;;;:::i;:::-;4210:11;:19;;-1:-1:-1;;4210:19:38;;;12311:16:::1;:14;:16::i;:::-;;12344:29;12365:7;12344:20;:29::i;:::-;12337:36;;4250:11:::0;:18;;-1:-1:-1;;4250:18:38;4264:4;4250:18;;;12205:175;;-1:-1:-1;12205:175:38:o;37745:116::-;37807:7;37833:21;:19;:21::i;:::-;37826:28;;37745:116;:::o;33195:408::-;1534:6:1;;-1:-1:-1;;;;;1534:6:1;33276:10:38;:21;33268:81;;;;-1:-1:-1;;;33268:81:38;;;;;;;:::i;:::-;33385:10;;-1:-1:-1;;;;;33385:10:38;;;;;;33367:28;;;;33359:91;;;;-1:-1:-1;;;33359:91:38;;;;;;;:::i;:::-;33478:30;;-1:-1:-1;;;33478:30:38;;33460:15;;-1:-1:-1;;;;;33478:15:38;;;;;:30;;33502:4;;33478:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33460:48;;33518:36;33537:7;1534:6:1;;-1:-1:-1;;;;;1534:6:1;;1462:85;33537:7:38;-1:-1:-1;;;;;33518:18:38;;;33546:7;33518:18;:36::i;:::-;33570:26;;-1:-1:-1;;;;;33570:26:38;;;;;;;;33258:345;33195:408;:::o;23584:241::-;4174:11;;;;4166:34;;;;-1:-1:-1;;;4166:34:38;;;;;;;:::i;:::-;4210:11;:19;;-1:-1:-1;;4210:19:38;;;23685:48:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;:19:::1;:48::i;:::-;23744:16;:14;:16::i;:::-;;23770:48;23793:24;23770:22;:48::i;15549:277::-:0;4174:11;;15651:7;;4174:11;;4166:34;;;;-1:-1:-1;;;4166:34:38;;;;;;;:::i;:::-;4210:11;:19;;-1:-1:-1;;4210:19:38;;;15670:35:::1;15696:8:::0;15670:25:::1;:35::i;:::-;15716:16;:14;:16::i;:::-;;15743:51;15756:8;15766:10;15778:12;15792:1;15743:12;:51::i;:::-;-1:-1:-1::0;252:1:31::1;4250:11:38::0;:18;;-1:-1:-1;;4250:18:38;4264:4;4250:18;;;15549:277;;-1:-1:-1;;15549:277:38:o;13669:255::-;4174:11;;13765:7;;4174:11;;4166:34;;;;-1:-1:-1;;;4166:34:38;;;;;;;:::i;:::-;4210:11;:19;;-1:-1:-1;;4210:19:38;;;13784:28:::1;13805:6:::0;13784:20:::1;:28::i;:::-;13823:16;:14;:16::i;:::-;;13850:42;13861:10;13873:6;13881:10;13850;:42::i;8152:193::-:0;4174:11;;8256:4;;4174:11;;4166:34;;;;-1:-1:-1;;;4166:34:38;;;;;;;:::i;:::-;4210:11;:19;;-1:-1:-1;;4210:19:38;;;8272:45:::1;8288:10;8300:3:::0;8305;8310:6;8272:15:::1;:45::i;:::-;-1:-1:-1::0;8334:4:38::1;4250:11:::0;:18;;-1:-1:-1;;4250:18:38;4264:4;4250:18;;;8152:193;;-1:-1:-1;;;8152:193:38:o;33907:435::-;34012:59;;;;;;;;;;;;;;;;;;:19;:59::i;:::-;34131:1;34089:39;:43;34081:69;;;;-1:-1:-1;;;34081:69:38;;;;;;;:::i;:::-;34165:94;34193:24;;34219:39;34165:94;;;;;;;:::i;:::-;;;;;;;;34269:24;:66;33907:435::o;20135:236::-;4174:11;;20241:7;;4174:11;;4166:34;;;;-1:-1:-1;;;4166:34:38;;;;;;;:::i;:::-;4210:11;:19;;-1:-1:-1;;4210:19:38;;;20260:16:::1;:14;:16::i;:::-;;20287:52;20305:10;20317:8;20327:11;20287:17;:52::i;:::-;;252:1:31;20349:15:38;;4250:11:::0;:18;;-1:-1:-1;;4250:18:38;4264:4;4250:18;;;20135:236;;-1:-1:-1;;20135:236:38:o;9708:409::-;9799:4;9815:29;9836:7;9815:20;:29::i;:::-;9869:10;9855:11;9912:23;;;:18;:23;;;;;;;;-1:-1:-1;;;;;9912:32:38;;;;;;;;;;9954:26;9970:10;9912:32;9954:26;:::i;:::-;-1:-1:-1;;;;;9990:23:38;;;;;;;:18;:23;;;;;;;;:32;;;;;;;;;;;;;;:47;;;10053:36;9954:26;;-1:-1:-1;9990:32:38;;10053:36;;;;9954:26;;10053:36;:::i;:::-;;;;;;;;-1:-1:-1;10106:4:38;;9708:409;-1:-1:-1;;;;9708:409:38:o;11378:234::-;11449:7;11468:23;11494:40;;;;;;;;11510:21;:19;:21::i;:::-;11494:40;;-1:-1:-1;;;;;11584:20:38;;;;;;:13;:20;;;;;;11468:66;;-1:-1:-1;11551:54:38;;11468:66;;11551:18;:54::i;:::-;11544:61;11378:234;-1:-1:-1;;;11378:234:38:o;36134:99::-;36185:7;36211:15;:13;:15::i;32831:119::-;1355:13:1;:11;:13::i;:::-;32910:33:38::1;32932:10;32910:21;:33::i;26798:1917::-:0;4174:11;;;;4166:34;;;;-1:-1:-1;;;4166:34:38;;;;;;;:::i;:::-;4210:11;:19;;-1:-1:-1;;4210:19:38;;;26917:16;;26913:96:::1;;26949:11;::::0;:49:::1;::::0;-1:-1:-1;;;26949:49:38;;-1:-1:-1;;;;;26949:11:38;;::::1;::::0;:24:::1;::::0;:49:::1;::::0;26982:4:::1;::::0;26989:8;;26949:49:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26913:96;27045:11;::::0;-1:-1:-1;;;;;27045:11:38::1;27023:10;:34;27019:96;;27080:24;;-1:-1:-1::0;;;27080:24:38::1;;;;;;;;;;;27019:96;27125:26;27154:30;27175:8;27154:20;:30::i;:::-;27220:12;::::0;27125:59;;-1:-1:-1;27194:23:38::1;27282:16:::0;;27278:599:::1;;27549:33;27563:5;27570:11;27549:13;:33::i;:::-;27529:53:::0;-1:-1:-1;27614:35:38::1;27529:53:::0;27614:15;:35:::1;:::i;:::-;27596:53:::0;-1:-1:-1;;;;;;27668:198:38;;::::1;::::0;;::::1;;27746:17:::0;27781:38:::1;27746:17:::0;27781:18;:38:::1;:::i;:::-;27837:15;27668:198;;;;;;;;:::i;:::-;;;;;;;;27278:599;27952:20;27975:38;27996:17:::0;27975:18;:38:::1;:::i;:::-;27952:61:::0;-1:-1:-1;28027:17:38;;28023:479:::1;;28081:7;::::0;28060:18:::1;28123:25;28136:12:::0;28081:7;28123:25:::1;:::i;:::-;28102:46:::0;-1:-1:-1;28180:30:38::1;28198:12:::0;28180:15;:30:::1;:::i;:::-;28162:48;;28234:10;28224:7;:20;;;;28365:8;-1:-1:-1::0;;;;;28338:70:38::1;28358:4;-1:-1:-1::0;;;;;28338:70:38::1;;28375:12;28389:1;28392:15;28338:70;;;;;;;;:::i;:::-;;;;;;;;28444:8;-1:-1:-1::0;;;;;28427:64:38::1;;28454:12;28468:10;28480;28427:64;;;;;;;;:::i;:::-;;;;;;;;28046:456;;28023:479;-1:-1:-1::0;;;;;28512:24:38;;::::1;28549:1;28512:24:::0;;;:14:::1;:24;::::0;;;;;:38;;;28601:11:::1;::::0;28560:38:::1;::::0;;::::1;:52:::0;;;;28622:12:::1;:30:::0;;;28668:40;28512:24;;28668:40;::::1;::::0;::::1;::::0;::::1;::::0;28696:11;;28668:40:::1;:::i;:::-;;;;;;;;-1:-1:-1::0;;4250:11:38;:18;;-1:-1:-1;;4250:18:38;4264:4;4250:18;;;-1:-1:-1;;;;;26798:1917:38:o;2085:101:1:-;1355:13;:11;:13::i;:::-;2149:30:::1;2176:1;2149:18;:30::i;:::-;2085:101::o:0;11765:142:38:-;4174:11;;11836:7;;4174:11;;4166:34;;;;-1:-1:-1;;;4166:34:38;;;;;;;:::i;:::-;4210:11;:19;;-1:-1:-1;;4210:19:38;;;11855:16:::1;:14;:16::i;:::-;-1:-1:-1::0;;11888:12:38::1;::::0;4250:11;:18;;-1:-1:-1;;4250:18:38;4264:4;4250:18;;;11765:142;:::o;22313:654::-;22403:53;;;;;;;;;;;;;;;;;;:19;:53::i;:::-;22530:11;;22497:77;;;-1:-1:-1;;;22497:77:38;;;;22466:28;;-1:-1:-1;;;;;22530:11:38;;22497:75;;:77;;;;;;;;;;;;;;22530:11;22497:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22466:108;-1:-1:-1;22466:108:38;22588:45;287:4:40;22588:30:38;:45;:::i;:::-;:68;22584:132;;;22679:26;;-1:-1:-1;;;22679:26:38;;;;;;;;;;;22584:132;22766:26;;;22802:59;;;;22876:84;;;;;;22766:26;;22831:30;;22876:84;:::i;:::-;;;;;;;;22393:574;;22313:654;:::o;24901:142::-;4174:11;;;;4166:34;;;;-1:-1:-1;;;4166:34:38;;;;;;;:::i;:::-;4210:11;:19;;-1:-1:-1;;4210:19:38;;;24982:16:::1;:14;:16::i;:::-;;25008:28;25026:9;25008:17;:28::i;:::-;-1:-1:-1::0;;4250:11:38;:18;;-1:-1:-1;;4250:18:38;4264:4;4250:18;;;24901:142::o;2031:212:0:-;1223:13;;965:10:12;;-1:-1:-1;;;;;1223:13:0;2130:24;;2122:78;;;;-1:-1:-1;;;2122:78:0;;;;;;;:::i;:::-;2210:26;2229:6;2210:18;:26::i;16190:219:38:-;4174:11;;16278:7;;4174:11;;4166:34;;;;-1:-1:-1;;;4166:34:38;;;;;;;:::i;:::-;4210:11;:19;;-1:-1:-1;;4210:19:38;;;16297:16:::1;:14;:16::i;:::-;;16324:53;16337:10;16349;16361:1;16364:12;16324;:53::i;:::-;-1:-1:-1::0;252:1:31::1;4250:11:38::0;:18;;-1:-1:-1;;4250:18:38;4264:4;4250:18;;;16190:219;;-1:-1:-1;16190:219:38:o;18874:260::-;18963:7;18982:35;19008:8;18982:25;:35::i;:::-;19027:16;:14;:16::i;:::-;;19054:48;19067:8;19077:10;19089:12;19054;:48::i;:::-;-1:-1:-1;252:1:31;18874:260:38;;;;:::o;6172:866::-;3279:19:3;3302:13;;;;;;3301:14;;3347:34;;;;-1:-1:-1;3365:12:3;;3380:1;3365:12;;;;:16;3347:34;3346:108;;;-1:-1:-1;3426:4:3;1713:19:11;:23;;;3387:66:3;;-1:-1:-1;3436:12:3;;;;;:17;3387:66;3325:201;;;;-1:-1:-1;;;3325:201:3;;;;;;;:::i;:::-;3536:12;:16;;-1:-1:-1;;3536:16:3;3551:1;3536:16;;;3562:65;;;;3596:13;:20;;-1:-1:-1;;3596:20:3;;;;;3562:65;6631:28:38::1;6652:6;6631:20;:28::i;:::-;6703:328;6728:11;6753:12;6779:18;6811:28;6853:5;6872:7;6893:9;6916:6;6936:21;6971:14;6999:22;6703:11;:328::i;:::-;3651:14:3::0;3647:99;;;3697:5;3681:21;;-1:-1:-1;;3681:21:3;;;3721:14;;;;;;3681:13;;3721:14;:::i;:::-;;;;;;;;3647:99;3269:483;6172:866:38;;;;;;;;;;;:::o;30135:433::-;30383:11;;-1:-1:-1;;;;;30383:11:38;30361:10;:34;30357:106;;30418:34;;-1:-1:-1;;;30418:34:38;;;;;;;;;;;30357:106;30472:89;30489:10;30501:8;30511:11;30524:16;30542:18;30472:16;:89::i;:::-;30135:433;;;;;:::o;25565:242::-;25663:52;;;;;;;;;;;;;;;;;;:19;:52::i;:::-;25726:16;:14;:16::i;:::-;;25752:48;25779:20;25752:26;:48::i;1317:20:39:-;;;;;;;:::i;37349:140:38:-;37427:7;37453:29;37474:7;37453:20;:29::i;12836:198::-;4174:11;;12910:7;;4174:11;;4166:34;;;;-1:-1:-1;;;4166:34:38;;;;;;;:::i;:::-;4210:11;:19;;-1:-1:-1;;4210:19:38;;;12929:16:::1;:14;:16::i;:::-;;12956:46;12967:10;12979;12991;12956;:46::i;10565:558::-:0;10661:4;10677:29;10698:7;10677:20;:29::i;:::-;10731:10;10717:11;10778:23;;;:18;:23;;;;;;;;-1:-1:-1;;;;;10778:32:38;;;;;;;;;;10828:35;;;;10820:78;;;;-1:-1:-1;;;10820:78:38;;;;;;;:::i;:::-;-1:-1:-1;;;;;10988:23:38;;;;;;;:18;:23;;;;;;;;:32;;;;;;;;;;;;;;10932:35;;;;10988:51;;;;11055:40;;;;;10932:35;;11055:40;:::i;38695:2980::-;38754:7;38834:25;38862:27;:25;:27::i;:::-;38932:18;;38834:55;;-1:-1:-1;39017:43:38;;;39013:89;;252:1:31;39076:15:38;;;;38695:2980;:::o;39013:89::-;39166:17;39186:15;:13;:15::i;:::-;39234:12;;39280:13;;39330:11;;39438:17;;39510:7;;39438:80;;-1:-1:-1;;;39438:80:38;;39166:35;;-1:-1:-1;39234:12:38;;39280:13;;39330:11;;39211:20;;-1:-1:-1;;;;;39438:17:38;;;;:31;;:80;;39166:35;;39234:12;;39280:13;;39438:80;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39409:109;;39558:24;39536:18;:46;;39528:87;;;;-1:-1:-1;;;39528:87:38;;;;;;;:::i;:::-;39701:17;39721:42;39741:22;39721:17;:42;:::i;:::-;39701:62;;40243:31;40277:54;40282:37;;;;;;;;40298:18;40282:37;;;40321:9;40277:4;:54::i;:::-;40243:88;;40341:27;40371:54;40390:20;40412:12;40371:18;:54::i;:::-;40341:84;-1:-1:-1;40435:23:38;40461:34;40483:12;40341:84;40461:34;:::i;:::-;40435:60;;40505:24;40532:149;40571:40;;;;;;;;40587:21;;40571:40;;;40625:19;40658:13;40532:25;:149::i;:::-;40505:176;;40691:22;40716:83;40742:20;40764:16;40782;40716:25;:83::i;:::-;40996:18;:38;;;41044:11;:28;;;41082:12;:30;;;41122:13;:32;;;41218:24;;41189:25;;40691:108;;-1:-1:-1;41218:24:38;41169:45;;41017:17;41169:45;:::i;:::-;:73;41165:337;;41258:25;:45;;;41321:28;;;41317:175;;;41369:31;41390:9;41369:20;:31::i;:::-;41317:175;;;41439:38;41460:16;41439:20;:38::i;:::-;41563:79;41578:9;41589:19;41610:14;41626:15;41563:79;;;;;;;;;:::i;:::-;;;;;;;;252:1:31;41653:15:38;;;;;;;;;;;;;;;38695:2980;:::o;7481:183::-;4174:11;;7568:4;;4174:11;;4166:34;;;;-1:-1:-1;;;4166:34:38;;;;;;;:::i;:::-;4210:11;:19;;-1:-1:-1;;4210:19:38;;;7584:52:::1;7600:10;::::0;7624:3;7629:6;7584:15:::1;:52::i;:::-;-1:-1:-1::0;7653:4:38::1;4250:11:::0;:18;;-1:-1:-1;;4250:18:38;4264:4;4250:18;;;7481:183;;-1:-1:-1;;7481:183:38:o;36823:310::-;36923:17;;36885:7;;-1:-1:-1;;;;;36923:17:38;:31;36972:15;:13;:15::i;:::-;37005:12;;37035:13;;37066:21;;37105:7;;36923:203;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31223:175::-;4174:11;;;;4166:34;;;;-1:-1:-1;;;4166:34:38;;;;;;;:::i;:::-;4210:11;:19;;-1:-1:-1;;4210:19:38;;;31338:53:::1;31345:10;31357::::0;31369:8;31379:11;31338:6:::1;:53::i;:::-;-1:-1:-1::0;;4250:11:38;:18;;-1:-1:-1;;4250:18:38;4264:4;4250:18;;;-1:-1:-1;31223:175:38:o;38023:149::-;4174:11;;38092:7;;4174:11;;4166:34;;;;-1:-1:-1;;;4166:34:38;;;;;;;:::i;:::-;4210:11;:19;;-1:-1:-1;;4210:19:38;;;38111:16:::1;:14;:16::i;:::-;;38144:21;:19;:21::i;:::-;38137:28;;4250:11:::0;:18;;-1:-1:-1;;4250:18:38;4264:4;4250:18;;;38023:149;:::o;35643:322::-;-1:-1:-1;;;;;35881:22:38;;35766:13;35881:22;;;:13;:22;;;;;;35766:13;;;;;;;;35905:29;35895:7;35905:20;:29::i;:::-;35936:21;:19;:21::i;:::-;35863:95;;;;;;;;35643:322;;;;;:::o;17942:206::-;4174:11;;18020:7;;4174:11;;4166:34;;;;-1:-1:-1;;;4166:34:38;;;;;;;:::i;:::-;4210:11;:19;;-1:-1:-1;;4210:19:38;;;18039:16:::1;:14;:16::i;:::-;;18066:50;18079:10;18091;18103:12;18066;:50::i;14475:209::-:0;4174:11;;14553:7;;4174:11;;4166:34;;;;-1:-1:-1;;;4166:34:38;;;;;;;:::i;:::-;4210:11;:19;;-1:-1:-1;;4210:19:38;;;14572:16:::1;:14;:16::i;:::-;;14599:53;14612:10;14624;14636:12;14650:1;14599:12;:53::i;17188:309::-:0;4174:11;;17322:7;;4174:11;;4166:34;;;;-1:-1:-1;;;4166:34:38;;;;;;;:::i;:::-;4210:11;:19;;-1:-1:-1;;4210:19:38;;;17341:35:::1;17367:8:::0;17341:25:::1;:35::i;:::-;17387:16;:14;:16::i;:::-;;17414:51;17427:8;17437:10;17449:1;17452:12;17414;:51::i;2447:116:44:-:0;2513:7;2539:17;:15;:17;;:::i;31676:433:38:-;31769:9;;-1:-1:-1;;;;;31769:9:38;31755:10;:23;31747:79;;;;-1:-1:-1;;;31747:79:38;;;;;;;:::i;:::-;31864:7;;31844:16;:27;;31836:81;;;;-1:-1:-1;;;31836:81:38;;;;;;;:::i;:::-;31949:7;;31928:18;31987:29;32000:16;31949:7;31987:29;:::i;:::-;31966:50;;32036:10;32026:7;:20;;;;32062:40;32079:10;32091;32062:40;;;;;;;:::i;1436:178:0:-;1355:13:1;:11;:13::i;:::-;1525::0::1;:24:::0;;-1:-1:-1;;;;;1525:24:0;::::1;-1:-1:-1::0;;;;;;1525:24:0;;::::1;::::0;::::1;::::0;;;1589:7:::1;1534:6:1::0;;-1:-1:-1;;;;;1534:6:1;;1462:85;1589:7:0::1;-1:-1:-1::0;;;;;1564:43:0::1;;;;;;;;;;;1436:178:::0;:::o;21484:282:38:-;21639:7;21658:76;21675:10;21687:8;21697:11;21710:16;21728:5;21658:16;:76::i;:::-;-1:-1:-1;252:1:31;21484:282:38;;;;;:::o;36440:181::-;36528:17;;36502:7;;-1:-1:-1;;;;;36528:17:38;:31;36560:15;:13;:15::i;:::-;36577:12;;36591:13;;36606:7;;36528:86;;;;;;;;;;;;;;;;;;:::i;2882:94:44:-;2957:12;;2882:94::o;2675:100::-;2753:15;;2675:100::o;63806:1743:38:-;63881:12;63897:1;63881:17;63877:54;;63806:1743;:::o;63877:54::-;63980:24;64160:27;:25;:27::i;:::-;64138:18;;:49;64134:113;;64210:26;;-1:-1:-1;;;64210:26:38;;;;;;;;;;;64134:113;64351:12;64333:15;:13;:15::i;:::-;:30;64329:100;;;64386:32;;-1:-1:-1;;;64386:32:38;;;;;;;;;;;64329:100;64520:13;;64505:12;:28;64501:96;;;64556:30;;-1:-1:-1;;;64556:30:38;;;;;;;;;;;64501:96;64759:12;64743:13;;:28;;;;:::i;:::-;64842:13;:32;;;65128:20;;64842:32;;-1:-1:-1;65113:50:38;;65128:20;;;-1:-1:-1;;;;;65128:20:38;65150:12;65113:14;:50::i;:::-;65291:20;;65352:11;;65378:10;;65269:182;;-1:-1:-1;;;65269:182:38;;-1:-1:-1;;;;;65291:20:38;;;;;;;;65269:61;;:182;;65352:11;;;;65378:10;;;;;;;65352:11;;65269:182;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65489:20;;;;;;;;;-1:-1:-1;;;;;65489:20:38;-1:-1:-1;;;;;65467:75:38;;65511:12;65525:16;65467:75;;;;;;;:::i;:::-;;;;;;;;63867:1682;63806:1743;:::o;385:136:41:-;-1:-1:-1;;;;;448:22:41;;444:75;;489:23;;-1:-1:-1;;;489:23:41;;;;;;;;;;;1620:130:1;1534:6;;-1:-1:-1;;;;;1534:6:1;965:10:12;1683:23:1;1675:68;;;;-1:-1:-1;;;1675:68:1;;;;;;;:::i;2641:425:26:-;-1:-1:-1;;;;;2733:44:26;;2725:94;;;;-1:-1:-1;;;2725:94:26;;;;;;;:::i;:::-;2871:21;;;-1:-1:-1;;;;;2903:70:26;;;-1:-1:-1;;;;;;2903:70:26;;;;;;2988:71;;2871:21;;;2988:71;;;;2871:21;;2951;;2988:71;:::i;:::-;;;;;;;;2715:351;2641:425;:::o;50926:2213:38:-;51090:11;;:49;;-1:-1:-1;;;51090:49:38;;51025:7;;-1:-1:-1;;;;;51090:11:38;;:24;;:49;;51123:4;;51130:8;;51090:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51279:27;:25;:27::i;:::-;51257:18;;:49;51253:114;;51329:27;;-1:-1:-1;;;51329:27:38;;;;;;;;;;;51253:114;51456:26;51485:30;51506:8;51485:20;:30::i;:::-;51456:59;;51526:24;51568:18;51553:11;:33;;:68;;51610:11;51553:68;;;51589:18;51553:68;51526:95;;52097:25;52125:38;52139:5;52146:16;52125:13;:38::i;:::-;52097:66;-1:-1:-1;52417:25:38;52445:38;52097:66;52445:18;:38;:::i;:::-;52417:66;;52493:23;52534:17;52519:12;;:32;;;;:::i;:::-;-1:-1:-1;;;;;52631:24:38;;;;;;;:14;:24;;;;;;;:54;;;52736:11;;52695:38;;;;:52;52757:12;:30;;;52845:83;52493:58;;-1:-1:-1;52631:24:38;52845:83;;;;;;;;52874:17;;52668;;52493:58;;52845:83;:::i;:::-;;;;;;;;53004:11;;53085;;53004:93;;-1:-1:-1;;;53004:93:38;;-1:-1:-1;;;;;53004:11:38;;;;:29;;:93;;53042:4;;53049:5;;53056:8;;53066:17;;53004:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53115:17:38;;50926:2213;-1:-1:-1;;;;;;;;;;;50926:2213:38:o;72841:364::-;72933:43;72954:21;72933:20;:43::i;:::-;73028:20;;;-1:-1:-1;;;;;73059:44:38;;;73028:20;73059:44;;;-1:-1:-1;;;;;;73059:44:38;;;;;;73118:80;;73028:20;;;;;;;;73118:80;;72986:31;;73118:80;72923:282;72841:364;:::o;74024:796::-;-1:-1:-1;;;;;74200:23:38;;74094:7;74200:23;;;:14;:23;;;;;;;;74161:62;;;;;;;;;;;;;;;;;;;;;;;;;;74424:29;;74420:68;;-1:-1:-1;74476:1:38;;74024:796;-1:-1:-1;;74024:796:38:o;74420:68::-;74734:11;;74707:24;;74677:27;;74707:38;;;:::i;:::-;74677:68;;74785:14;:28;;;74763:19;:50;;;;:::i;:::-;74756:57;74024:796;-1:-1:-1;;;;74024:796:38:o;75076:744::-;75180:11;;75138:7;;75205:17;;;75201:210;;-1:-1:-1;;75373:27:38;;;75076:744::o;75201:210::-;75559:17;75579:15;:13;:15::i;:::-;75559:35;;75604:36;75680:13;;75670:7;;75655:12;;75643:9;:24;;;;:::i;:::-;:34;;;;:::i;:::-;:50;;;;:::i;:::-;75604:89;-1:-1:-1;75703:20:38;75771:12;75727:40;287:4:40;75604:89:38;75727:40;:::i;:::-;75726:57;;;;:::i;:::-;75703:80;75076:744;-1:-1:-1;;;;;75076:744:38:o;996:186:10:-;1089:86;1109:5;1139:23;;;1164:2;1168:5;1116:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1116:58:10;;;;;;;;;;;;;;-1:-1:-1;;;;;1116:58:10;-1:-1:-1;;;;;;1116:58:10;;;;;;;;;;1089:19;:86::i;:::-;996:186;;;:::o;3203:282:26:-;3304:21;;:60;;-1:-1:-1;;;3304:60:26;;3281:20;;-1:-1:-1;;;;;3304:21:26;;:37;;:60;;3342:10;;3354:9;;3304:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3281:83;;3380:15;3375:104;;3431:10;3451:4;3458:9;3418:50;;-1:-1:-1;;;3418:50:26;;;;;;;;;;:::i;3375:104::-;3271:214;3203:282;:::o;61906:701:38:-;62117:27;:25;:27::i;:::-;62095:18;;:49;62091:115;;62167:28;;-1:-1:-1;;;62167:28:38;;;;;;;;;;;62091:115;3782:4;62275:24;:54;62271:121;;;62352:29;;-1:-1:-1;;;62352:29:38;;;;;;;;;;;62271:121;62437:21;;;62468:48;;;;62532:68;;;;;;62437:21;;62492:24;;62532:68;:::i;73211:221::-;73322:11;;73289:82;;-1:-1:-1;;;73289:82:38;;-1:-1:-1;;;;;73322:11:38;;;;73289:64;;:82;;73354:4;;73360:10;;73289:82;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;73284:142;;73394:21;;-1:-1:-1;;;73394:21:38;;;;;;;;;;;45045:3083;45178:19;;;:42;;-1:-1:-1;45201:19:38;;45178:42;45170:107;;;;-1:-1:-1;;;45170:107:38;;;;;;;:::i;:::-;45417:27;:25;:27::i;:::-;45395:18;;:49;45391:109;;45467:22;;-1:-1:-1;;;45467:22:38;;;;;;;;;;;45391:109;45569:23;45595:40;;;;;;;;45611:21;:19;:21::i;:::-;45595:40;;45569:66;-1:-1:-1;45646:20:38;;45748:18;;45744:677;;45965:14;45950:29;;45744:677;;;46206:34;46211:14;46227:12;46206:4;:34::i;:::-;46191:49;;46255:21;46279:32;46284:12;46298;46279:4;:32::i;:::-;46255:56;-1:-1:-1;46329:18:38;;;;;:53;;;46368:14;46351:13;:31;;46329:53;46325:73;;;46384:14;;;;:::i;:::-;;;;46325:73;45996:425;45744:677;46500:46;46519:12;46533;46500:18;:46::i;:::-;46485:61;;46597:12;46613:1;46597:17;46593:78;;46630:30;;-1:-1:-1;;;46630:30:38;;;;;;;:::i;46593:78::-;46722:11;;:64;;-1:-1:-1;;;46722:64:38;;-1:-1:-1;;;;;46722:11:38;;;;:25;;:64;;46756:4;;46763:8;;46773:12;;46722:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46899:12;46883:13;;46865:15;:13;:15::i;:::-;:31;;;;:::i;:::-;:46;46861:114;;;46934:30;;-1:-1:-1;;;46934:30:38;;;;;;;;;;;46861:114;47321:12;47307:11;;:26;;;;:::i;:::-;47293:11;:40;-1:-1:-1;;;;;47366:23:38;;47343:20;47366:23;;;:13;:23;;;;;;:38;;47392:12;;47366:38;:::i;:::-;-1:-1:-1;;;;;47414:23:38;;;;;;:13;:23;;;;;:38;;;47343:61;-1:-1:-1;47735:38:38;47750:8;47760:12;47735:14;:38::i;:::-;47875:4;-1:-1:-1;;;;;47848:47:38;47857:8;-1:-1:-1;;;;;47848:47:38;-1:-1:-1;;;;;;;;;;;47882:12:38;47848:47;;;;;;:::i;:::-;;;;;;;;47917:8;-1:-1:-1;;;;;47910:58:38;;47927:12;47941;47955;47910:58;;;;;;;;:::i;:::-;;;;;;;;48044:11;;:77;;-1:-1:-1;;;48044:77:38;;-1:-1:-1;;;;;48044:11:38;;;;:24;;:77;;48077:4;;48084:8;;48094:12;;48108;;48044:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42107:2087;42236:11;;:58;;-1:-1:-1;;;42236:58:38;;-1:-1:-1;;;;;42236:11:38;;;;:23;;:58;;42268:4;;42275:6;;42283:10;;42236:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42434:27;:25;:27::i;:::-;42412:18;;:49;42408:107;;42484:20;;-1:-1:-1;;;42484:20:38;;;;;;;;;;;42408:107;42525:23;42551:40;;;;;;;;42567:21;:19;:21::i;:::-;42551:40;;42525:66;-1:-1:-1;43101:24:38;43128:32;43142:5;43149:10;43128:13;:32::i;:::-;43101:59;;43346:18;43367:36;43372:16;43390:12;43367:4;:36::i;:::-;43346:57;;43729:10;43715:11;;:24;;;;:::i;:::-;43701:11;:38;-1:-1:-1;;;;;43772:21:38;;43749:20;43772:21;;;:13;:21;;;;;;:34;;43796:10;;43772:34;:::i;:::-;-1:-1:-1;;;;;43816:21:38;;;;;;:13;:21;;;;;;;:36;;;43925:56;43749:57;;-1:-1:-1;43816:21:38;43925:56;;;;43938:16;;43956:10;;43749:57;;43925:56;:::i;:::-;;;;;;;;44017:6;-1:-1:-1;;;;;43996:40:38;44013:1;-1:-1:-1;;;;;43996:40:38;-1:-1:-1;;;;;;;;;;;44025:10:38;43996:40;;;;;;:::i;:::-;;;;;;;;44112:11;;:75;;-1:-1:-1;;;44112:75:38;;-1:-1:-1;;;;;44112:11:38;;;;:22;;:75;;44143:4;;44150:6;;44158:16;;44176:10;;44112:75;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42187:2007;;;;42107:2087;;;:::o;68487:1340::-;68633:11;;:60;;-1:-1:-1;;;68633:60:38;;-1:-1:-1;;;;;68633:11:38;;;;:27;;:60;;68669:4;;68676:3;;68681;;68686:6;;68633:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68757:3;-1:-1:-1;;;;;68750:10:38;:3;-1:-1:-1;;;;;68750:10:38;;68746:68;;68783:20;;-1:-1:-1;;;68783:20:38;;;;;;;;;;;68746:68;68888:25;68938:3;-1:-1:-1;;;;;68927:14:38;:7;-1:-1:-1;;;;;68927:14:38;;68923:165;;-1:-1:-1;;;68923:165:38;;;-1:-1:-1;;;;;;69045:23:38;;;;;;;:18;:23;;;;;;;;:32;;;;;;;;;;68923:165;69163:20;69186:26;69206:6;69186:17;:26;:::i;:::-;-1:-1:-1;;;;;69245:18:38;;69222:20;69245:18;;;:13;:18;;;;;;69163:49;;-1:-1:-1;69222:20:38;69245:27;;69266:6;;69245:27;:::i;:::-;-1:-1:-1;;;;;69305:18:38;;69282:20;69305:18;;;:13;:18;;;;;;69222:50;;-1:-1:-1;69282:20:38;69305:27;;69326:6;;69305:27;:::i;:::-;-1:-1:-1;;;;;69412:18:38;;;;;;;:13;:18;;;;;;:33;;;69455:18;;;;;;:33;;;69282:50;-1:-1:-1;;;69558:38:38;;69554:116;;-1:-1:-1;;;;;69612:23:38;;;;;;;:18;:23;;;;;;;;:32;;;;;;;;;:47;;;69554:116;69738:3;-1:-1:-1;;;;;69724:26:38;69733:3;-1:-1:-1;;;;;69724:26:38;-1:-1:-1;;;;;;;;;;;69743:6:38;69724:26;;;;;;:::i;:::-;;;;;;;;69761:11;;:59;;-1:-1:-1;;;69761:59:38;;-1:-1:-1;;;;;69761:11:38;;;;:26;;:59;;69796:4;;69803:3;;69808;;69813:6;;69761:59;;;:::i;1373:177:32:-;1454:7;1473:18;1494:15;1499:1;1502:6;1494:4;:15::i;:::-;1473:36;;1526:17;1535:7;1526:8;:17::i;73665:143:38:-;73765:10;;73747:54;;-1:-1:-1;;;73747:54:38;;73721:7;;73765:10;;;-1:-1:-1;;;;;73765:10:38;;73747:39;;:54;;73795:4;;73747:54;;;:::i;72591:244::-;72661:32;72682:10;72661:20;:32::i;:::-;72726:9;;;-1:-1:-1;;;;;72745:22:38;;;-1:-1:-1;;;;;;72745:22:38;;;;;;;72782:46;;72726:9;;;72745:22;72726:9;;72782:46;;72703:20;;72782:46;72651:184;72591:244;:::o;67263:454::-;67405:10;;67450:30;;-1:-1:-1;;;67450:30:38;;67342:7;;67405:10;;;-1:-1:-1;;;;;67405:10:38;;67342:7;;67405:10;;67450:15;;:30;;67474:4;;67450:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;67426:54;-1:-1:-1;67490:51:38;-1:-1:-1;;;;;67490:22:38;;67513:4;67527;67534:6;67490:22;:51::i;:::-;67574:30;;-1:-1:-1;;;67574:30:38;;67551:20;;-1:-1:-1;;;;;67574:15:38;;;;;:30;;67598:4;;67574:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;67551:53;-1:-1:-1;67682:28:38;67697:13;67551:53;67682:28;:::i;:::-;67675:35;67263:454;-1:-1:-1;;;;;;67263:454:38:o;1798:153:0:-;1887:13;1880:20;;-1:-1:-1;;;;;;1880:20:0;;;1910:34;1935:8;1910:24;:34::i;62875:725:38:-;62939:7;63001:24;63035:23;63214:27;:25;:27::i;:::-;63192:18;;:49;63188:131;;63292:15;63264:44;;-1:-1:-1;;;63264:44:38;;;;;;;;:::i;63188:131::-;63347:36;63361:10;63373:9;63347:13;:36::i;:::-;63329:54;;63428:15;63412:13;;:31;;;;:::i;:::-;63453:13;:32;;;63500:60;;63393:50;;-1:-1:-1;63514:10:38;;63500:60;;;;63526:15;;63393:50;;63500:60;:::i;:::-;;;;;;;;63578:15;62875:725;-1:-1:-1;;;62875:725:38:o;48420:2112::-;48560:11;;:64;;-1:-1:-1;;;48560:64:38;;-1:-1:-1;;;;;48560:11:38;;;;:25;;:64;;48594:4;;48601:8;;48611:12;;48560:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48764:27;:25;:27::i;:::-;48742:18;;:49;48738:109;;48814:22;;-1:-1:-1;;;48814:22:38;;;;;;;;;;;48738:109;48970:12;48954:13;;48936:15;:13;:15::i;:::-;:31;;;;:::i;:::-;:46;48932:108;;;49005:24;;-1:-1:-1;;;49005:24:38;;;;;;;;;;;48932:108;49280:26;49309:30;49330:8;49309:20;:30::i;:::-;49280:59;-1:-1:-1;49349:25:38;49377:33;49398:12;49280:59;49377:33;:::i;:::-;49349:61;;49420:23;49461:12;49446;;:27;;;;:::i;:::-;-1:-1:-1;;;;;49794:24:38;;;;;;:14;:24;;;;;:54;;;49899:11;;49858:38;;;;:52;49920:12;:30;;;49420:53;-1:-1:-1;50229:38:38;50244:8;50254:12;50229:14;:38::i;:::-;50327:8;-1:-1:-1;;;;;50320:66:38;;50337:12;50351:17;50370:15;50320:66;;;;;;;;:::i;:::-;;;;;;;;50462:11;;:63;;-1:-1:-1;;;50462:63:38;;-1:-1:-1;;;;;50462:11:38;;;;:24;;:63;;50495:4;;50502:8;;50512:12;;50462:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48509:2023;;;48420:2112;;;:::o;70646:1939::-;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;71111:21:38::1;:19;:21::i;:::-;71142:56;71176:21;71142:33;:56::i;:::-;71216:18;::::0;:23;:43;::::1;;;-1:-1:-1::0;71243:11:38::1;::::0;:16;71216:43:::1;71208:91;;;;-1:-1:-1::0;;;71208:91:38::1;;;;;;;:::i;:::-;71347:27;:58:::0;;;71423:31;71415:92:::1;;;;-1:-1:-1::0;;;71415:92:38::1;;;;;;;:::i;:::-;71518:29;71534:12;71518:15;:29::i;:::-;71716:27;:25;:27::i;:::-;71695:18;:48:::0;287:4:40::1;71753:11:38;:26:::0;71886:46:::1;71913:18:::0;71886:26:::1;:46::i;:::-;71943;71966:22;71943;:46::i;:::-;72000:4;:12;72007:5:::0;72000:4;:12:::1;:::i;:::-;-1:-1:-1::0;72022:6:38::1;:16;72031:7:::0;72022:6;:16:::1;:::i;:::-;-1:-1:-1::0;72048:8:38::1;:20:::0;;-1:-1:-1;;72048:20:38::1;;::::0;::::1;;::::0;;72100:24;;72078:47:::1;::::0;:21:::1;:47::i;:::-;72135:61;72160:14;:35;;;72135:24;:61::i;:::-;3638:4;72206:26;:66:::0;72329:10:::1;:24:::0;;-1:-1:-1;;;;;;72329:24:38::1;;-1:-1:-1::0;;;;;72329:24:38;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;72363:43:::1;::::0;;-1:-1:-1;;;72363:43:38;;;;72381:10;;;::::1;::::0;;::::1;::::0;72363:41:::1;::::0;:43:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;72381:10;72363:43:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;72524:11:38::1;:18:::0;;-1:-1:-1;;72524:18:38::1;72538:4;72524:18;::::0;;72552:26:::1;72571:6:::0;72552:18:::1;:26::i;53743:643::-:0;4174:11;;;;4166:34;;;;-1:-1:-1;;;4166:34:38;;;;;;;:::i;:::-;4210:11;:19;;-1:-1:-1;;4210:19:38;;;53965:16:::1;:14;:16::i;:::-;;53992:13;54008:16;-1:-1:-1::0;;;;;54008:31:38::1;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53992:49:::0;-1:-1:-1;54055:17:38;;54051:224:::1;;54258:5;54218:46;;-1:-1:-1::0;;;54218:46:38::1;;;;;;;;:::i;54051:224::-;54285:94;54307:10;54319:8;54329:11;54342:16;54360:18;54285:21;:94::i;:::-;-1:-1:-1::0;;4250:11:38;:18;;-1:-1:-1;;4250:18:38;4264:4;4250:18;;;-1:-1:-1;;;;53743:643:38:o;65784:1042::-;65962:38;66156:27;:25;:27::i;:::-;66134:18;;:49;66130:119;;66206:32;;-1:-1:-1;;;66206:32:38;;;;;;;;;;;66130:119;66340:17;;;;;;;;;-1:-1:-1;;;;;66340:17:38;66317:40;;66457:20;-1:-1:-1;;;;;66457:40:38;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;66449:83;;;;-1:-1:-1;;;66449:83:38;;;;;;;:::i;:::-;66606:17;:40;;-1:-1:-1;;;;;;66606:40:38;-1:-1:-1;;;;;66606:40:38;;;;;;;;;66749:70;;66606:40;;66749:70;;;;;-1:-1:-1;;66749:70:38;65869:957;65784:1042;:::o;3555:136:32:-;-1:-1:-1;;;;;;;;;;;;3646:38:32;;;;;;;;3662:19;3667:1;:10;;;3679:1;3662:4;:19::i;:::-;3646:38;;3639:45;3555:136;-1:-1:-1;;;3555:136:32:o;1743:214::-;1847:7;1866:18;1887:15;1892:1;1895:6;1887:4;:15::i;:::-;1866:36;;1919:31;1924:17;1933:7;1924:8;:17::i;:::-;1943:6;1919:4;:31::i;58576:2577:38:-;58734:11;;:77;;-1:-1:-1;;;58734:77:38;;-1:-1:-1;;;;;58734:11:38;;;;:24;;:77;;58767:4;;58774:14;;58790:10;;58802:8;;58734:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58882:10;-1:-1:-1;;;;;58870:22:38;:8;-1:-1:-1;;;;;58870:22:38;;58866:96;;58915:36;;-1:-1:-1;;;58915:36:38;;;;;;;;;;;58866:96;59314:11;;59281:90;;;-1:-1:-1;;;59281:90:38;;;;59242:36;;-1:-1:-1;;;;;59314:11:38;;59281:88;;:90;;;;;;;;;;;;;;59314:11;59281:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59242:129;;59381:17;59401:64;59406:11;59419:45;;;;;;;;59435:26;;59419:45;;;59401:4;:64::i;:::-;59381:84;;59475:27;59505:64;59510:9;59521:47;;;;;;;;59537:28;59521:47;;;59505:4;:64::i;:::-;59475:94;-1:-1:-1;59579:29:38;59611:33;59475:94;59611:11;:33;:::i;:::-;59579:65;;59654:23;59680:40;;;;;;;;59696:21;:19;:21::i;:::-;59680:40;;59654:66;-1:-1:-1;59730:27:38;59760:53;59654:66;59793:19;59760:18;:53::i;:::-;59730:83;;60027:19;60013:11;;:33;;;;:::i;:::-;59999:11;:47;-1:-1:-1;;;;;60082:23:38;;;;;;:13;:23;;;;;;:37;;60108:11;;60082:37;:::i;:::-;-1:-1:-1;;;;;60056:23:38;;;;;;;:13;:23;;;;;;:63;;;;60157:25;;;;;;;:49;;60185:21;;60157:49;:::i;:::-;-1:-1:-1;;;;;60129:25:38;;;;;;;:13;:25;;;;;:77;;;;60460:20;;60445:57;;60460:20;;;;;60482:19;60445:14;:57::i;:::-;60630:20;;60691:11;;60717:10;;60608:187;;-1:-1:-1;;;60608:187:38;;-1:-1:-1;;;;;60630:20:38;;;;;;;;60608:61;;:187;;60691:11;;;;60717:10;;;;;;;60630:20;;60608:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60866:10;-1:-1:-1;;;;;60847:53:38;60856:8;-1:-1:-1;;;;;60847:53:38;-1:-1:-1;;;;;;;;;;;60878:21:38;60847:53;;;;;;:::i;:::-;;;;;;;;60939:20;;60915:66;;-1:-1:-1;;;;;60939:20:38;;;;;;;60915:66;;;;;;;60961:19;;60915:66;:::i;:::-;;;;;;;;61057:11;;:89;;-1:-1:-1;;;61057:89:38;;-1:-1:-1;;;;;61057:11:38;;;;:23;;:89;;61089:4;;61096:14;;61112:10;;61124:8;;61134:11;;61057:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58684:2469;;;;;;58576:2577;;;;:::o;67907:181::-;68030:10;;;;;-1:-1:-1;;;;;68030:10:38;68051:30;68030:10;68070:2;68074:6;68051:18;:30::i;5328:653:10:-;5758:23;5784:69;5812:4;5784:69;;;;;;;;;;;;;;;;;5792:5;-1:-1:-1;;;;;5784:27:10;;;:69;;;;;:::i;:::-;5758:95;;5871:10;:17;5892:1;5871:22;:56;;;;5908:10;5897:30;;;;;;;;;;;;:::i;:::-;5863:111;;;;-1:-1:-1;;;5863:111:10;;;;;;;:::i;4715:131:32:-;4777:7;4803:36;4808:18;4813:1;287:4:40;4808::32;:18::i;:::-;4828:10;;4803:4;:36::i;3697:126::-;3759:7;287:4:40;3785:19:32;3790:1;3793;:10;;;3785:4;:19::i;:::-;:31;;;;:::i;998:214::-;1181:12;;1055:7;;1181:24;;287:4:40;;1181:24:32;:::i;1421:214:10:-;1532:96;1552:5;1582:27;;;1611:4;1617:2;1621:5;1559:68;;;;;;;;;;:::i;1532:96::-;1421:214;;;;:::o;2687:187:1:-;2779:6;;;-1:-1:-1;;;;;2795:17:1;;;-1:-1:-1;;;;;;2795:17:1;;;;;;;2827:40;;2779:6;;;2795:17;2779:6;;2827:40;;2760:16;;2827:40;2750:124;2687:187;:::o;889:100:0:-;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;956:26:0::1;:24;:26::i;1619:164:26:-:0;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;61159:502:38:-;61278:11;;61373:30;;;-1:-1:-1;;;61373:30:38;;;;-1:-1:-1;;;;;61278:11:38;;;;61373:28;;;;;:30;;;;;;;;;;;;;;:28;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;61365:71;;;;-1:-1:-1;;;61365:71:38;;;;;;;:::i;:::-;61501:11;:28;;-1:-1:-1;;;;;;61501:28:38;-1:-1:-1;;;;;61501:28:38;;;;;;;;;61608:46;;61501:28;;61608:46;;;;;-1:-1:-1;;61608:46:38;61230:431;61159:502;:::o;54994:2985::-;55252:11;;:183;;-1:-1:-1;;;55252:183:38;;-1:-1:-1;;;;;55252:11:38;;;;:28;;:183;;55302:4;;55329:16;;55360:8;;55382:11;;55407:18;;55252:183;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55575:27;:25;:27::i;:::-;55553:18;;:49;55549:112;;55625:25;;-1:-1:-1;;;55625:25:38;;;;;;;;;;;55549:112;55836:27;:25;:27::i;:::-;55795:16;-1:-1:-1;;;;;55795:35:38;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:68;55791:141;;55886:35;;-1:-1:-1;;;55886:35:38;;;;;;;;;;;55791:141;56002:10;-1:-1:-1;;;;;55990:22:38;:8;-1:-1:-1;;;;;55990:22:38;;55986:91;;56035:31;;-1:-1:-1;;;56035:31:38;;;;;;;;;;;55986:91;56129:11;56144:1;56129:16;56125:82;;56168:28;;-1:-1:-1;;;56168:28:38;;;;;;;;;;;56125:82;-1:-1:-1;;56275:11:38;:32;56271:101;;56330:31;;-1:-1:-1;;;56330:31:38;;;;;;;;;;;56271:101;56422:25;56450:52;56468:10;56480:8;56490:11;56450:17;:52::i;:::-;56759:11;;:148;;-1:-1:-1;;;56759:148:38;;56422:80;;-1:-1:-1;56710:24:38;;;;-1:-1:-1;;;;;56759:11:38;;:41;;:148;;56822:4;;56849:16;;56422:80;;56759:148;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56709:198;;;;252:1:31;56925:16:38;:28;56917:92;;;;-1:-1:-1;;;56917:92:38;;;;;;;:::i;:::-;57100:36;;-1:-1:-1;;;57100:36:38;;57140:11;;-1:-1:-1;;;;;57100:26:38;;;;;:36;;57127:8;;57100:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;57092:88;;;;-1:-1:-1;;;57092:88:38;;;;;;;:::i;:::-;57352:4;-1:-1:-1;;;;;57315:42:38;;;57311:217;;57373:56;57388:4;57395:10;57407:8;57417:11;57373:6;:56::i;:::-;57311:217;;;57460:57;;-1:-1:-1;;;57460:57:38;;-1:-1:-1;;;;;57460:22:38;;;;;:57;;57483:10;;57495:8;;57505:11;;57460:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57311:217;57654:16;-1:-1:-1;;;;;57589:96:38;57617:8;-1:-1:-1;;;;;57589:96:38;57605:10;-1:-1:-1;;;;;57589:96:38;;57627:17;57673:11;57589:96;;;;;;;:::i;:::-;;;;;;;;57761:11;;:211;;-1:-1:-1;;;57761:211:38;;-1:-1:-1;;;;;57761:11:38;;;;:33;;:211;;57816:4;;57843:16;;57874:10;;57898:8;;57920:17;;57951:11;;57761:211;;;:::i;4299:97:32:-;4358:7;4384:5;4388:1;4384;:5;:::i;2863:97::-;2922:7;2948:5;2952:1;2948;:5;:::i;4119:223:11:-;4252:12;4283:52;4305:6;4313:4;4319:1;4322:12;4283:21;:52::i;5332:97:32:-;5391:7;5417:5;5421:1;5417;:5;:::i;1125:111:1:-;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;1197:32:1::1;965:10:12::0;1197:18:1::1;:32::i;5176:446:11:-:0;5341:12;5398:5;5373:21;:30;;5365:81;;;;-1:-1:-1;;;5365:81:11;;;;;;;:::i;:::-;5457:12;5471:23;5498:6;-1:-1:-1;;;;;5498:11:11;5517:5;5524:4;5498:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5456:73;;;;5546:69;5573:6;5581:7;5590:10;5602:12;5546:26;:69::i;:::-;5539:76;5176:446;-1:-1:-1;;;;;;;5176:446:11:o;7682:628::-;7862:12;7890:7;7886:418;;;7917:10;:17;7938:1;7917:22;7913:286;;-1:-1:-1;;;;;1713:19:11;;;8124:60;;;;-1:-1:-1;;;8124:60:11;;;;;;;:::i;:::-;-1:-1:-1;8219:10:11;8212:17;;7886:418;8260:33;8268:10;8280:12;8991:17;;:21;8987:379;;9219:10;9213:17;9275:15;9262:10;9258:2;9254:19;9247:44;8987:379;9342:12;9335:20;;-1:-1:-1;;;9335:20:11;;;;;;;;:::i;287:248:69:-;369:1;379:113;393:6;390:1;387:13;379:113;;;469:11;;;463:18;450:11;;;443:39;415:2;408:10;379:113;;;-1:-1:-1;;526:1:69;508:16;;501:27;287:248::o;649:377::-;737:3;765:39;798:5;87:12;;7:99;765:39;218:19;;;270:4;261:14;;813:78;;900:65;958:6;953:3;946:4;939:5;935:16;900:65;:::i;:::-;633:2;613:14;-1:-1:-1;;609:28:69;981:39;;;;;;-1:-1:-1;;649:377:69:o;1032:313::-;1183:2;1196:47;;;1168:18;;1260:78;1168:18;1324:6;1260:78;:::i;1761:122::-;1852:5;1834:24;1827:5;1824:35;1814:63;;1873:1;1870;1863:12;1889:139;1960:20;;1989:33;1960:20;1989:33;:::i;2034:329::-;2093:6;2142:2;2130:9;2121:7;2117:23;2113:32;2110:119;;;2148:79;3352:72470:38;;;2148:79:69;2268:1;2293:53;2338:7;2318:9;2293:53;:::i;2501:96::-;2538:7;-1:-1:-1;;;;;2435:54:69;;2567:24;2369:126;2603:122;2676:24;2694:5;2676:24;:::i;2731:139::-;2802:20;;2831:33;2802:20;2831:33;:::i;2876:474::-;2944:6;2952;3001:2;2989:9;2980:7;2976:23;2972:32;2969:119;;;3007:79;3352:72470:38;;;3007:79:69;3127:1;3152:53;3197:7;3177:9;3152:53;:::i;:::-;3142:63;;3098:117;3254:2;3280:53;3325:7;3316:6;3305:9;3301:22;3280:53;:::i;:::-;3270:63;;3225:118;2876:474;;;;;:::o;3452:109::-;3426:13;;3419:21;3533;3528:3;3521:34;3452:109;;:::o;3567:210::-;3692:2;3677:18;;3705:65;3681:9;3743:6;3705:65;:::i;3783:329::-;3842:6;3891:2;3879:9;3870:7;3866:23;3862:32;3859:119;;;3897:79;3352:72470:38;;;3897:79:69;4017:1;4042:53;4087:7;4067:9;4042:53;:::i;4118:118::-;4223:5;4205:24;1678:77;4242:222;4373:2;4358:18;;4386:71;4362:9;4430:6;4386:71;:::i;5236:118::-;5323:24;5341:5;5323:24;:::i;5360:222::-;5491:2;5476:18;;5504:71;5480:9;5548:6;5504:71;:::i;5588:122::-;5651:7;5680:24;5698:5;5680:24;:::i;5716:174::-;5815:50;5859:5;5815:50;:::i;5896:191::-;5993:20;;6022:59;5993:20;6022:59;:::i;6093:381::-;6178:6;6227:2;6215:9;6206:7;6202:23;6198:32;6195:119;;;6233:79;3352:72470:38;;;6233:79:69;6353:1;6378:79;6449:7;6429:9;6378:79;:::i;6480:619::-;6557:6;6565;6573;6622:2;6610:9;6601:7;6597:23;6593:32;6590:119;;;6628:79;3352:72470:38;;;6628:79:69;6748:1;6773:53;6818:7;6798:9;6773:53;:::i;:::-;6763:63;;6719:117;6875:2;6901:53;6946:7;6937:6;6926:9;6922:22;6901:53;:::i;:::-;6891:63;;6846:118;7003:2;7029:53;7074:7;7065:6;7054:9;7050:22;7029:53;:::i;:::-;7019:63;;6974:118;6480:619;;;;;:::o;7197:112::-;7180:4;7169:16;;7280:22;7105:86;7315:214;7442:2;7427:18;;7455:67;7431:9;7495:6;7455:67;:::i;7601:142::-;7651:9;7684:53;-1:-1:-1;;;;;2435:54:69;;7702:34;1678:77;7711:24;1744:5;1678:77;7702:34;-1:-1:-1;;;;;2435:54:69;;2369:126;7749;7799:9;7832:37;7863:5;7832:37;:::i;7881:155::-;7960:9;7993:37;8024:5;7993:37;:::i;8042:189::-;8158:66;8218:5;8158:66;:::i;8237:280::-;8397:2;8382:18;;8410:100;8386:9;8483:6;8410:100;:::i;9799:180::-;-1:-1:-1;;;9844:1:69;9837:88;9944:4;9941:1;9934:15;9968:4;9965:1;9958:15;9985:281;-1:-1:-1;;633:2:69;613:14;;609:28;10060:6;10056:40;10198:6;10186:10;10183:22;10162:18;10150:10;10147:34;10144:62;10141:88;;;10209:18;;:::i;:::-;10245:2;10238:22;-1:-1:-1;;9985:281:69:o;10272:129::-;10306:6;10333:20;1417:2;1411:9;;1351:75;10333:20;10323:30;;10362:33;10390:4;10382:6;10362:33;:::i;:::-;10272:129;;;:::o;10407:308::-;10469:4;10559:18;10551:6;10548:30;10545:56;;;10581:18;;:::i;:::-;-1:-1:-1;;633:2:69;613:14;;609:28;10703:4;10693:15;;10407:308;-1:-1:-1;;10407:308:69:o;10721:148::-;10819:6;10814:3;10809;10796:30;-1:-1:-1;10860:1:69;10842:16;;10835:27;10721:148::o;10875:425::-;10953:5;10978:66;10994:49;11036:6;10994:49;:::i;:::-;10978:66;:::i;:::-;10969:75;;11067:6;11060:5;11053:21;11105:4;11098:5;11094:16;11143:3;11134:6;11129:3;11125:16;11122:25;11119:112;;;11150:79;3352:72470:38;;;11150:79:69;11240:54;11287:6;11282:3;11277;11240:54;:::i;:::-;10959:341;10875:425;;;;;:::o;11320:340::-;11376:5;11425:3;11418:4;11410:6;11406:17;11402:27;11392:122;;11433:79;3352:72470:38;;;11433:79:69;11550:6;11537:20;11575:79;11650:3;11642:6;11635:4;11627:6;11623:17;11575:79;:::i;11666:118::-;7180:4;7169:16;;11737:22;7105:86;11790:135;11859:20;;11888:31;11859:20;11888:31;:::i;12226:615::-;12312:5;12356:4;12344:9;12339:3;12335:19;12331:30;12328:117;;;12364:79;3352:72470:38;;;12364:79:69;12463:21;12479:4;12463:21;:::i;:::-;12454:30;-1:-1:-1;12548:1:69;12588:49;12633:3;12613:9;12588:49;:::i;:::-;12563:75;;-1:-1:-1;12724:2:69;12765:57;12818:3;12794:22;;;12765:57;:::i;:::-;12758:4;12751:5;12747:16;12740:83;12659:175;12226:615;;;;:::o;12847:2331::-;13107:6;13115;13123;13131;13139;13147;13155;13163;13171;13179;13187:7;13237:3;13225:9;13216:7;13212:23;13208:33;13205:120;;;13244:79;3352:72470:38;;;13244:79:69;13364:1;13389:53;13434:7;13414:9;13389:53;:::i;:::-;13379:63;;13335:117;13491:2;13517:82;13591:7;13582:6;13571:9;13567:22;13517:82;:::i;:::-;13507:92;;13462:147;13648:2;13674:80;13746:7;13737:6;13726:9;13722:22;13674:80;:::i;:::-;13664:90;;13619:145;13803:2;13829:53;13874:7;13865:6;13854:9;13850:22;13829:53;:::i;:::-;13819:63;;13774:118;13959:3;13948:9;13944:19;13931:33;13991:18;13983:6;13980:30;13977:117;;;14013:79;3352:72470:38;;;14013:79:69;14118:63;14173:7;14164:6;14153:9;14149:22;14118:63;:::i;:::-;14108:73;;13902:289;14258:3;14247:9;14243:19;14230:33;14290:18;14282:6;14279:30;14276:117;;;14312:79;3352:72470:38;;;14312:79:69;14417:63;14472:7;14463:6;14452:9;14448:22;14417:63;:::i;:::-;14407:73;;14201:289;14529:3;14556:51;14599:7;14590:6;14579:9;14575:22;14556:51;:::i;:::-;14546:61;;14500:117;14656:3;14683:53;14728:7;14719:6;14708:9;14704:22;14683:53;:::i;:::-;14673:63;;14627:119;14785:3;14812:53;14857:7;14848:6;14837:9;14833:22;14812:53;:::i;:::-;14802:63;;14756:119;14914:3;14941:90;15023:7;15014:6;15003:9;14999:22;14941:90;:::i;:::-;14931:100;;14885:156;15080:3;15108:53;15153:7;15144:6;15133:9;15129:22;15108:53;:::i;:::-;15097:64;;15051:120;12847:2331;;;;;;;;;;;;;;:::o;15684:116::-;3426:13;;3419:21;15754;3356:90;15806:133;15874:20;;15903:30;15874:20;15903:30;:::i;15945:955::-;16062:6;16070;16078;16086;16094;16143:3;16131:9;16122:7;16118:23;16114:33;16111:120;;;16150:79;3352:72470:38;;;16150:79:69;16270:1;16295:53;16340:7;16320:9;16295:53;:::i;:::-;16285:63;;16241:117;16397:2;16423:53;16468:7;16459:6;16448:9;16444:22;16423:53;:::i;:::-;16413:63;;16368:118;16525:2;16551:53;16596:7;16587:6;16576:9;16572:22;16551:53;:::i;:::-;16541:63;;16496:118;16653:2;16679:78;16749:7;16740:6;16729:9;16725:22;16679:78;:::i;:::-;16669:88;;16624:143;16806:3;16833:50;16875:7;16866:6;16855:9;16851:22;16833:50;:::i;:::-;16823:60;;16777:116;15945:955;;;;;;;;:::o;17952:553::-;18167:3;18152:19;;18181:71;18156:9;18225:6;18181:71;:::i;:::-;18262:72;18330:2;18319:9;18315:18;18306:6;18262:72;:::i;:::-;18344;18412:2;18401:9;18397:18;18388:6;18344:72;:::i;:::-;18426;18494:2;18483:9;18479:18;18470:6;18426:72;:::i;18511:474::-;18579:6;18587;18636:2;18624:9;18615:7;18611:23;18607:32;18604:119;;;18642:79;3352:72470:38;;;18642:79:69;18762:1;18787:53;18832:7;18812:9;18787:53;:::i;:::-;18777:63;;18733:117;18889:2;18915:53;18960:7;18951:6;18940:9;18936:22;18915:53;:::i;20031:669::-;20133:6;20141;20149;20198:2;20186:9;20177:7;20173:23;20169:32;20166:119;;;20204:79;3352:72470:38;;;20204:79:69;20324:1;20349:53;20394:7;20374:9;20349:53;:::i;:::-;20339:63;;20295:117;20451:2;20477:53;20522:7;20513:6;20502:9;20498:22;20477:53;:::i;:::-;20467:63;;20422:118;20579:2;20605:78;20675:7;20666:6;20655:9;20651:22;20605:78;:::i;20706:180::-;-1:-1:-1;;;20751:1:69;20744:88;20851:4;20848:1;20841:15;20875:4;20872:1;20865:15;20892:320;20973:1;20963:12;;21020:1;21010:12;;;21031:81;;21097:4;21089:6;21085:17;21075:27;;21031:81;21159:2;21151:6;21148:14;21128:18;21125:38;21122:84;;21178:18;;:::i;:::-;20943:269;20892:320;;;:::o;21384:366::-;21611:2;218:19;;21526:3;270:4;261:14;;-1:-1:-1;;;21335:36:69;;21540:74;-1:-1:-1;21623:93:69;-1:-1:-1;21741:2:69;21732:12;;21384:366::o;21756:419::-;21960:2;21973:47;;;21945:18;;22037:131;21945:18;22037:131;:::i;22421:366::-;22648:2;218:19;;22563:3;270:4;261:14;;22321:34;22298:58;;-1:-1:-1;;;22385:2:69;22373:15;;22366:42;22577:74;-1:-1:-1;22660:93:69;-1:-1:-1;22778:2:69;22769:12;;22421:366::o;22793:419::-;22997:2;23010:47;;;22982:18;;23074:131;22982:18;23074:131;:::i;23461:366::-;23688:2;218:19;;23603:3;270:4;261:14;;23358:34;23335:58;;-1:-1:-1;;;23422:2:69;23410:15;;23403:45;23617:74;-1:-1:-1;23700:93:69;23218:237;23833:419;24037:2;24050:47;;;24022:18;;24114:131;24022:18;24114:131;:::i;24258:143::-;24340:13;;24362:33;24340:13;24362:33;:::i;24407:351::-;24477:6;24526:2;24514:9;24505:7;24501:23;24497:32;24494:119;;;24532:79;3352:72470:38;;;24532:79:69;24652:1;24677:64;24733:7;24713:9;24677:64;:::i;24933:366::-;25160:2;218:19;;25075:3;270:4;261:14;;-1:-1:-1;;;24881:39:69;;25089:74;-1:-1:-1;25172:93:69;24764:163;25305:419;25509:2;25522:47;;;25494:18;;25586:131;25494:18;25586:131;:::i;25730:332::-;25889:2;25874:18;;25902:71;25878:9;25946:6;25902:71;:::i;:::-;25983:72;26051:2;26040:9;26036:18;26027:6;25983:72;:::i;26068:180::-;-1:-1:-1;;;26113:1:69;26106:88;26213:4;26210:1;26203:15;26237:4;26234:1;26227:15;26254:191;26383:9;;;26405:10;;;26402:36;;;26418:18;;:::i;26451:332::-;26610:2;26595:18;;26623:71;26599:9;26667:6;26623:71;:::i;:::-;26704:72;26772:2;26761:9;26757:18;26748:6;26704:72;:::i;26789:194::-;26920:9;;;26942:11;;;26939:37;;;26956:18;;:::i;26989:442::-;27176:2;27161:18;;27189:71;27165:9;27233:6;27189:71;:::i;:::-;27270:72;27338:2;27327:9;27323:18;27314:6;27270:72;:::i;:::-;27352;27420:2;27409:9;27405:18;27396:6;27352:72;:::i;27528:158::-;27586:9;27619:61;27637:42;27672:5;27637:42;1678:77;27692:147;27787:45;27826:5;27787:45;:::i;27845:458::-;28040:2;28025:18;;28053:71;28029:9;28097:6;28053:71;:::i;:::-;28134:80;28210:2;28199:9;28195:18;28186:6;28134:80;:::i;28543:366::-;28770:2;218:19;;28685:3;270:4;261:14;;28449:34;28426:58;;-1:-1:-1;;;28513:2:69;28501:15;;28494:36;28699:74;-1:-1:-1;28782:93:69;28309:228;28915:419;29119:2;29132:47;;;29104:18;;29196:131;29104:18;29196:131;:::i;29579:366::-;29806:2;218:19;;29721:3;270:4;261:14;;29480:34;29457:58;;-1:-1:-1;;;29544:2:69;29532:15;;29525:41;29735:74;-1:-1:-1;29818:93:69;29340:233;29951:419;30155:2;30168:47;;;30140:18;;30232:131;30140:18;30232:131;:::i;30467:154::-;30523:9;7180:4;7169:16;;30556:59;7105:86;30627:143;30720:43;30757:5;30720:43;:::i;30776:234::-;30913:2;30898:18;;30926:77;30902:9;30976:6;30926:77;:::i;31202:366::-;31429:2;218:19;;31344:3;270:4;261:14;;31156:32;31133:56;;31358:74;-1:-1:-1;31441:93:69;31016:180;31574:419;31778:2;31791:47;;;31763:18;;31855:131;31763:18;31855:131;:::i;32183:366::-;32410:2;218:19;;32325:3;270:4;261:14;;32139:30;32116:54;;32339:74;-1:-1:-1;32422:93:69;31999:178;32555:419;32759:2;32772:47;;;32744:18;;32836:131;32744:18;32836:131;:::i;32980:664::-;33223:3;33208:19;;33237:71;33212:9;33281:6;33237:71;:::i;:::-;33318:72;33386:2;33375:9;33371:18;33362:6;33318:72;:::i;:::-;33400;33468:2;33457:9;33453:18;33444:6;33400:72;:::i;:::-;33482;33550:2;33539:9;33535:18;33526:6;33482:72;:::i;:::-;33564:73;33632:3;33621:9;33617:19;33608:6;33564:73;:::i;33886:366::-;34113:2;218:19;;34028:3;270:4;261:14;;33790:34;33767:58;;-1:-1:-1;;;33854:2:69;33842:15;;33835:38;34042:74;-1:-1:-1;34125:93:69;33650:230;34258:419;34462:2;34475:47;;;34447:18;;34539:131;34447:18;34539:131;:::i;34917:366::-;35144:2;218:19;;35059:3;270:4;261:14;;34823:34;34800:58;;-1:-1:-1;;;34887:2:69;34875:15;;34868:36;35073:74;-1:-1:-1;35156:93:69;34683:228;35289:419;35493:2;35506:47;;;35478:18;;35570:131;35478:18;35570:131;:::i;35714:180::-;-1:-1:-1;;;35759:1:69;35752:88;35859:4;35856:1;35849:15;35883:4;35880:1;35873:15;35900:121;35989:1;35982:5;35979:12;35969:46;;35995:18;;:::i;36027:143::-;36109:5;36115:49;36109:5;36115:49;:::i;36176:143::-;36240:9;36273:40;36307:5;36273:40;:::i;36325:159::-;36426:51;36471:5;36426:51;:::i;36490:470::-;36691:2;36676:18;;36704:71;36680:9;36748:6;36704:71;:::i;:::-;36785:72;36853:2;36842:9;36838:18;36829:6;36785:72;:::i;:::-;36867:86;36949:2;36938:9;36934:18;36925:6;36867:86;:::i;37154:366::-;37381:2;218:19;;;37106:34;261:14;;37083:58;;;37296:3;37393:93;36966:182;37526:419;37730:2;37743:47;;;37715:18;;37807:131;37715:18;37807:131;:::i;38181:366::-;38408:2;218:19;;38323:3;270:4;261:14;;38091:34;38068:58;;-1:-1:-1;;;38155:2:69;38143:15;;38136:32;38337:74;-1:-1:-1;38420:93:69;37951:224;38553:419;38757:2;38770:47;;;38742:18;;38834:131;38742:18;38834:131;:::i;38978:664::-;39221:3;39206:19;;39235:71;39210:9;39279:6;39235:71;:::i;:::-;39316:72;39384:2;39373:9;39369:18;39360:6;39316:72;:::i;:::-;39398;39466:2;39455:9;39451:18;39442:6;39398:72;:::i;39648:410::-;39793:9;;;;39955;;39988:15;;;39982:22;;39935:83;39912:139;;40031:18;;:::i;:::-;39696:362;39648:410;;;;:::o;40064:180::-;-1:-1:-1;;;40109:1:69;40102:88;40209:4;40206:1;40199:15;40233:4;40230:1;40223:15;40250:185;40290:1;40380;40370:35;;40385:18;;:::i;:::-;-1:-1:-1;40420:9:69;;40250:185::o;40441:332::-;40600:2;40585:18;;40613:71;40589:9;40657:6;40613:71;:::i;40779:423::-;40958:2;40943:18;;40971:71;40947:9;41015:6;40971:71;:::i;:::-;41089:9;41083:4;41079:20;41074:2;41063:9;41059:18;41052:48;41117:78;41190:4;41181:6;41117:78;:::i;41208:137::-;41287:13;;41309:30;41287:13;41309:30;:::i;41351:345::-;41418:6;41467:2;41455:9;41446:7;41442:23;41438:32;41435:119;;;41473:79;3352:72470:38;;;41473:79:69;41593:1;41618:61;41671:7;41651:9;41618:61;:::i;41702:533::-;41909:2;41894:18;;41922:71;41898:9;41966:6;41922:71;:::i;:::-;42003:72;42071:2;42060:9;42056:18;42047:6;42003:72;:::i;:::-;42122:9;42116:4;42112:20;42107:2;42096:9;42092:18;42085:48;42150:78;42223:4;42214:6;42150:78;:::i;42486:366::-;42713:2;218:19;;42628:3;270:4;261:14;;42381:34;42358:58;;-1:-1:-1;;;42445:2:69;42433:15;;42426:47;42642:74;-1:-1:-1;42725:93:69;42241:239;42858:419;43062:2;43075:47;;;43047:18;;43139:131;43047:18;43139:131;:::i;43283:233::-;43322:3;-1:-1:-1;;43384:5:69;43381:77;43378:103;;43461:18;;:::i;:::-;-1:-1:-1;43508:1:69;43497:13;;43283:233::o;43698:366::-;43925:2;218:19;;43840:3;270:4;261:14;;-1:-1:-1;;;43639:46:69;;43854:74;-1:-1:-1;43937:93:69;43522:170;44070:419;44274:2;44287:47;;;44259:18;;44351:131;44259:18;44351:131;:::i;44495:442::-;44682:2;44667:18;;44695:71;44671:9;44739:6;44695:71;:::i;:::-;44776:72;44844:2;44833:9;44829:18;44820:6;44776:72;:::i;44943:553::-;45158:3;45143:19;;45172:71;45147:9;45216:6;45172:71;:::i;:::-;45253:72;45321:2;45310:9;45306:18;45297:6;45253:72;:::i;45502:553::-;45717:3;45702:19;;45731:71;45706:9;45775:6;45731:71;:::i;:::-;45812:72;45880:2;45869:9;45865:18;45856:6;45812:72;:::i;:::-;45894;45962:2;45951:9;45947:18;45938:6;45894:72;:::i;46297:366::-;46524:2;218:19;;46439:3;270:4;261:14;;46201:34;46178:58;;-1:-1:-1;;;46265:2:69;46253:15;;46246:38;46453:74;-1:-1:-1;46536:93:69;46061:230;46669:419;46873:2;46886:47;;;46858:18;;46950:131;46858:18;46950:131;:::i;47322:366::-;47549:2;218:19;;47464:3;270:4;261:14;;47234:34;47211:58;;-1:-1:-1;;;47298:2:69;47286:15;;47279:30;47478:74;-1:-1:-1;47561:93:69;47094:222;47694:419;47898:2;47911:47;;;47883:18;;47975:131;47883:18;47975:131;:::i;48360:366::-;48587:2;218:19;;48502:3;270:4;261:14;;48259:34;48236:58;;-1:-1:-1;;;48323:2:69;48311:15;;48304:43;48516:74;-1:-1:-1;48599:93:69;48119:235;48732:419;48936:2;48949:47;;;48921:18;;49013:131;48921:18;49013:131;:::i;50144:269::-;50254:39;50285:7;50254:39;:::i;:::-;50343:11;;-1:-1:-1;;49635:1:69;49619:18;;;;49487:16;;;49844:9;49833:21;49487:16;;49873:30;;;;50302:105;;-1:-1:-1;50144:269:69:o;50498:189::-;50464:3;50616:65;50674:6;50666;50660:4;50616:65;:::i;50693:186::-;50770:3;50763:5;50760:14;50753:120;;;50824:39;50861:1;50854:5;50824:39;:::i;:::-;50797:1;50786:13;50753:120;;50885:543;50986:2;50981:3;50978:11;50975:446;;;49206:4;49242:14;;;49286:4;49273:18;;49388:2;49383;49372:14;;49368:23;51094:8;51090:44;51287:2;51275:10;51272:18;51269:49;;;-1:-1:-1;51308:8:69;51269:49;51331:80;49388:2;49383;49372:14;;49368:23;51377:8;51373:37;51360:11;51331:80;:::i;52031:1395::-;87:12;;52250:18;52242:6;52239:30;52236:56;;;52272:18;;:::i;:::-;52316:38;52348:4;52342:11;52316:38;:::i;:::-;52401:67;52461:6;52453;52447:4;52401:67;:::i;:::-;52519:4;52551:2;52540:14;;52568:1;52563:618;;;;53225:1;53242:6;53239:77;;;-1:-1:-1;53282:19:69;;;53276:26;53239:77;-1:-1:-1;;51667:1:69;51663:13;;51528:16;51630:56;51705:15;;52012:1;52008:11;;51999:21;53336:4;53329:81;53198:222;52533:887;;52563:618;49206:4;49242:14;;;49286:4;49273:18;;-1:-1:-1;;52599:22:69;;;52722:208;52736:7;52733:1;52730:14;52722:208;;;52806:19;;;52800:26;52785:42;;52913:2;52898:18;;;;52866:1;52854:14;;;;52752:12;52722:208;;;52958:6;52949:7;52946:19;52943:179;;;53007:19;;;53001:26;-1:-1:-1;;53101:4:69;53089:17;;51667:1;51663:13;51528:16;51630:56;51705:15;53044:64;;52943:179;53168:1;53164;53156:6;53152:14;53148:22;53142:4;53135:36;52570:611;;;52533:887;;52123:1303;;;52031:1395;;:::o;53616:366::-;53843:2;218:19;;53758:3;270:4;261:14;;53572:30;53549:54;;53772:74;-1:-1:-1;53855:93:69;53432:178;53988:419;54192:2;54205:47;;;54177:18;;54269:131;54177:18;54269:131;:::i;54413:553::-;54628:3;54613:19;;54642:71;54617:9;54686:6;54642:71;:::i;:::-;54723:72;54791:2;54780:9;54776:18;54767:6;54723:72;:::i;:::-;54805;54873:2;54862:9;54858:18;54849:6;54805:72;:::i;:::-;54887;54955:2;54944:9;54940:18;54931:6;54887:72;:::i;54972:664::-;55215:3;55200:19;;55229:71;55204:9;55273:6;55229:71;:::i;:::-;55310:72;55378:2;55367:9;55363:18;55354:6;55310:72;:::i;:::-;55392;55460:2;55449:9;55445:18;55436:6;55392:72;:::i;:::-;55474;55542:2;55531:9;55527:18;55518:6;55474:72;:::i;55877:366::-;56104:2;218:19;;56019:3;270:4;261:14;;55782:34;55759:58;;-1:-1:-1;;;55846:2:69;55834:15;;55827:37;56033:74;-1:-1:-1;56116:93:69;55642:229;56249:419;56453:2;56466:47;;;56438:18;;56530:131;56438:18;56530:131;:::i;56674:652::-;56911:3;56896:19;;56925:71;56900:9;56969:6;56925:71;:::i;:::-;57006:72;57074:2;57063:9;57059:18;57050:6;57006:72;:::i;:::-;57088;57156:2;57145:9;57141:18;57132:6;57088:72;:::i;:::-;57170;57238:2;57227:9;57223:18;57214:6;57170:72;:::i;:::-;57252:67;57314:3;57303:9;57299:19;57290:6;57252:67;:::i;57332:507::-;57411:6;57419;57468:2;57456:9;57447:7;57443:23;57439:32;57436:119;;;57474:79;3352:72470:38;;;57474:79:69;57594:1;57619:64;57675:7;57655:9;57619:64;:::i;:::-;57609:74;;57565:128;57732:2;57758:64;57814:7;57805:6;57794:9;57790:22;57758:64;:::i;58089:366::-;58316:2;218:19;;58231:3;270:4;261:14;;57985:34;57962:58;;-1:-1:-1;;;58049:2:69;58037:15;;58030:46;58245:74;-1:-1:-1;58328:93:69;57845:238;58461:419;58665:2;58678:47;;;58650:18;;58742:131;58650:18;58742:131;:::i;59066:366::-;59293:2;218:19;;59208:3;270:4;261:14;;59026:26;59003:50;;59222:74;-1:-1:-1;59305:93:69;58886:174;59438:419;59642:2;59655:47;;;59627:18;;59719:131;59627:18;59719:131;:::i;59863:775::-;60134:3;60119:19;;60148:71;60123:9;60192:6;60148:71;:::i;:::-;60229:72;60297:2;60286:9;60282:18;60273:6;60229:72;:::i;:::-;60311;60379:2;60368:9;60364:18;60355:6;60311:72;:::i;:::-;60393;60461:2;60450:9;60446:18;60437:6;60393:72;:::i;:::-;60475:73;60543:3;60532:9;60528:19;60519:6;60475:73;:::i;:::-;60558;60626:3;60615:9;60611:19;60602:6;60558:73;:::i;60875:366::-;61102:2;218:19;;61017:3;270:4;261:14;;60784:34;60761:58;;-1:-1:-1;;;60848:2:69;60836:15;;60829:33;61031:74;-1:-1:-1;61114:93:69;60644:225;61247:419;61451:2;61464:47;;;61436:18;;61528:131;61436:18;61528:131;:::i;61929:386::-;62033:3;62061:38;62093:5;87:12;;7:99;62061:38;62212:65;62270:6;62265:3;62258:4;62251:5;62247:16;62212:65;:::i;:::-;62293:16;;;;;61929:386;-1:-1:-1;;61929:386:69:o;62321:271::-;62451:3;62473:93;62562:3;62553:6;62473:93;:::i;62783:366::-;63010:2;218:19;;62925:3;270:4;261:14;;62738:31;62715:55;;62939:74;-1:-1:-1;63022:93:69;62598:179;63155:419;63359:2;63372:47;;;63344:18;;63436:131;63344:18;63436:131;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"4296800","executionCost":"infinite","totalCost":"infinite"},"external":{"NO_ERROR()":"384","acceptOwnership()":"infinite","accessControlManager()":"infinite","accrualBlockNumber()":"2506","accrueInterest()":"infinite","addReserves(uint256)":"infinite","allowance(address,address)":"infinite","approve(address,uint256)":"infinite","badDebt()":"2484","badDebtRecovered(uint256)":"infinite","balanceOf(address)":"infinite","balanceOfUnderlying(address)":"infinite","blocksOrSecondsPerYear()":"infinite","borrow(uint256)":"infinite","borrowBalanceCurrent(address)":"infinite","borrowBalanceStored(address)":"infinite","borrowBehalf(address,uint256)":"infinite","borrowIndex()":"2483","borrowRatePerBlock()":"infinite","comptroller()":"infinite","decimals()":"2456","decreaseAllowance(address,uint256)":"infinite","exchangeRateCurrent()":"infinite","exchangeRateStored()":"infinite","forceLiquidateBorrow(address,address,uint256,address,bool)":"infinite","getAccountSnapshot(address)":"infinite","getBlockNumberOrTimestamp()":"infinite","getCash()":"infinite","healBorrow(address,address,uint256)":"infinite","increaseAllowance(address,uint256)":"infinite","initialize(address,address,address,uint256,string,string,uint8,address,address,(address,address),uint256)":"infinite","interestRateModel()":"infinite","isTimeBased()":"infinite","isVToken()":"332","liquidateBorrow(address,uint256,address)":"infinite","mint(uint256)":"infinite","mintBehalf(address,uint256)":"infinite","name()":"infinite","owner()":"infinite","pendingOwner()":"infinite","protocolSeizeShareMantissa()":"2440","protocolShareReserve()":"infinite","redeem(uint256)":"infinite","redeemBehalf(address,uint256)":"infinite","redeemUnderlying(uint256)":"infinite","redeemUnderlyingBehalf(address,uint256)":"infinite","reduceReserves(uint256)":"infinite","reduceReservesBlockDelta()":"2505","reduceReservesBlockNumber()":"2505","renounceOwnership()":"infinite","repayBorrow(uint256)":"infinite","repayBorrowBehalf(address,uint256)":"infinite","reserveFactorMantissa()":"2485","seize(address,address,uint256)":"infinite","setAccessControlManager(address)":"infinite","setInterestRateModel(address)":"infinite","setProtocolSeizeShare(uint256)":"infinite","setProtocolShareReserve(address)":"infinite","setReduceReservesBlockDelta(uint256)":"infinite","setReserveFactor(uint256)":"infinite","setShortfallContract(address)":"infinite","shortfall()":"infinite","supplyRatePerBlock()":"infinite","sweepToken(address)":"infinite","symbol()":"infinite","totalBorrows()":"2506","totalBorrowsCurrent()":"infinite","totalReserves()":"2528","totalSupply()":"2529","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite","transferOwnership(address)":"infinite","underlying()":"infinite"},"internal":{"_addReservesFresh(uint256)":"infinite","_borrowBalanceStored(address)":"infinite","_borrowFresh(address,address,uint256)":"infinite","_doTransferIn(address,uint256)":"infinite","_doTransferOut(address,uint256)":"infinite","_ensureSenderIsDelegateOf(address)":"infinite","_exchangeRateStored()":"infinite","_getCashPrior()":"infinite","_initialize(address,contract ComptrollerInterface,contract InterestRateModel,uint256,string memory,string memory,uint8,address,address,struct VTokenInterface.RiskManagementInit memory,uint256)":"infinite","_liquidateBorrow(address,address,uint256,contract VTokenInterface,bool)":"infinite","_liquidateBorrowFresh(address,address,uint256,contract VTokenInterface,bool)":"infinite","_mintFresh(address,address,uint256)":"infinite","_redeemFresh(address,address,uint256,uint256)":"infinite","_reduceReservesFresh(uint256)":"infinite","_repayBorrowFresh(address,address,uint256)":"infinite","_seize(address,address,address,uint256)":"infinite","_setComptroller(contract ComptrollerInterface)":"infinite","_setInterestRateModelFresh(contract InterestRateModel)":"infinite","_setProtocolShareReserve(address payable)":"infinite","_setReserveFactorFresh(uint256)":"infinite","_setShortfallContract(address)":"infinite","_transferTokens(address,address,address,uint256)":"infinite"}},"methodIdentifiers":{"NO_ERROR()":"69ab3250","acceptOwnership()":"79ba5097","accessControlManager()":"b4a0bdf3","accrualBlockNumber()":"6c540baf","accrueInterest()":"a6afed95","addReserves(uint256)":"7821a514","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","badDebt()":"bbcac557","badDebtRecovered(uint256)":"ef60450c","balanceOf(address)":"70a08231","balanceOfUnderlying(address)":"3af9e669","blocksOrSecondsPerYear()":"6857249c","borrow(uint256)":"c5ebeaec","borrowBalanceCurrent(address)":"17bfdfbc","borrowBalanceStored(address)":"95dd9193","borrowBehalf(address,uint256)":"856e5bb3","borrowIndex()":"aa5af0fd","borrowRatePerBlock()":"f8f9da28","comptroller()":"5fe3b567","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","exchangeRateCurrent()":"bd6d894d","exchangeRateStored()":"182df0f5","forceLiquidateBorrow(address,address,uint256,address,bool)":"8bbdb6db","getAccountSnapshot(address)":"c37f68e2","getBlockNumberOrTimestamp()":"e1d146fb","getCash()":"3b1d21a2","healBorrow(address,address,uint256)":"44fe6ffe","increaseAllowance(address,uint256)":"39509351","initialize(address,address,address,uint256,string,string,uint8,address,address,(address,address),uint256)":"8a42c319","interestRateModel()":"f3fdb15a","isTimeBased()":"c7ad0895","isVToken()":"3d9ea3a1","liquidateBorrow(address,uint256,address)":"f5e3c462","mint(uint256)":"a0712d68","mintBehalf(address,uint256)":"23323e03","name()":"06fdde03","owner()":"8da5cb5b","pendingOwner()":"e30c3978","protocolSeizeShareMantissa()":"6752e702","protocolShareReserve()":"e9a44fd9","redeem(uint256)":"db006a75","redeemBehalf(address,uint256)":"210bc052","redeemUnderlying(uint256)":"852a12e3","redeemUnderlyingBehalf(address,uint256)":"df3a516e","reduceReserves(uint256)":"07e27959","reduceReservesBlockDelta()":"d1109c2f","reduceReservesBlockNumber()":"ae96f141","renounceOwnership()":"715018a6","repayBorrow(uint256)":"0e752702","repayBorrowBehalf(address,uint256)":"2608f818","reserveFactorMantissa()":"173b9904","seize(address,address,uint256)":"b2a02ff1","setAccessControlManager(address)":"0e32cb86","setInterestRateModel(address)":"8bcd4016","setProtocolSeizeShare(uint256)":"757212f0","setProtocolShareReserve(address)":"107568df","setReduceReservesBlockDelta(uint256)":"2464176b","setReserveFactor(uint256)":"1c446983","setShortfallContract(address)":"41f641ee","shortfall()":"19b1faef","supplyRatePerBlock()":"ae9d70b0","sweepToken(address)":"1be19560","symbol()":"95d89b41","totalBorrows()":"47bd3718","totalBorrowsCurrent()":"73acee98","totalReserves()":"8f840ddd","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b","underlying()":"6f307dc3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"timeBased_\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"blocksPerYear_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxBorrowRateMantissa_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actualAddAmount\",\"type\":\"uint256\"}],\"name\":\"AddReservesFactorFreshCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BorrowCashNotAvailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BorrowFreshnessCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DelegateNotApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForceLiquidateBorrowUnauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HealBorrowUnauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBlocksPerYear\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTimeBasedConfiguration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"errorCode\",\"type\":\"uint256\"}],\"name\":\"LiquidateAccrueCollateralInterestFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidateCloseAmountIsUintMax\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidateCloseAmountIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidateCollateralFreshnessCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidateFreshnessCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidateLiquidatorIsBorrower\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidateSeizeLiquidatorIsBorrower\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MintFreshnessCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSeizeShareTooBig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RedeemFreshnessCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RedeemTransferOutNotPossible\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReduceReservesCashNotAvailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReduceReservesCashValidation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReduceReservesFreshCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepayBorrowFreshnessCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SetInterestRateModelFreshCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SetReserveFactorBoundsCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SetReserveFactorFreshCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"calledContract\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"methodSignature\",\"type\":\"string\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cashPrior\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"interestAccumulated\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBorrows\",\"type\":\"uint256\"}],\"name\":\"AccrueInterest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"badDebtDelta\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"badDebtOld\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"badDebtNew\",\"type\":\"uint256\"}],\"name\":\"BadDebtIncreased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"badDebtOld\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"badDebtNew\",\"type\":\"uint256\"}],\"name\":\"BadDebtRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"accountBorrows\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBorrows\",\"type\":\"uint256\"}],\"name\":\"Borrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"}],\"name\":\"HealBorrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"vTokenCollateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"seizeTokens\",\"type\":\"uint256\"}],\"name\":\"LiquidateBorrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintTokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"accountBalance\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAccessControlManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAccessControlManager\",\"type\":\"address\"}],\"name\":\"NewAccessControlManager\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ComptrollerInterface\",\"name\":\"oldComptroller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract ComptrollerInterface\",\"name\":\"newComptroller\",\"type\":\"address\"}],\"name\":\"NewComptroller\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract InterestRateModel\",\"name\":\"oldInterestRateModel\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract InterestRateModel\",\"name\":\"newInterestRateModel\",\"type\":\"address\"}],\"name\":\"NewMarketInterestRateModel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldProtocolSeizeShareMantissa\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newProtocolSeizeShareMantissa\",\"type\":\"uint256\"}],\"name\":\"NewProtocolSeizeShare\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldProtocolShareReserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newProtocolShareReserve\",\"type\":\"address\"}],\"name\":\"NewProtocolShareReserve\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldReduceReservesBlockOrTimestampDelta\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newReduceReservesBlockOrTimestampDelta\",\"type\":\"uint256\"}],\"name\":\"NewReduceReservesBlockDelta\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldReserveFactorMantissa\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newReserveFactorMantissa\",\"type\":\"uint256\"}],\"name\":\"NewReserveFactor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldShortfall\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newShortfall\",\"type\":\"address\"}],\"name\":\"NewShortfallContract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSeize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"redeemAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"accountBalance\",\"type\":\"uint256\"}],\"name\":\"Redeem\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"accountBorrows\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBorrows\",\"type\":\"uint256\"}],\"name\":\"RepayBorrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"benefactor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"addAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalReserves\",\"type\":\"uint256\"}],\"name\":\"ReservesAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolShareReserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reduceAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalReserves\",\"type\":\"uint256\"}],\"name\":\"SpreadReservesReduced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SweepToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"NO_ERROR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"accessControlManager\",\"outputs\":[{\"internalType\":\"contract IAccessControlManagerV8\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"accrualBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"accrueInterest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"addAmount\",\"type\":\"uint256\"}],\"name\":\"addReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"badDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"recoveredAmount_\",\"type\":\"uint256\"}],\"name\":\"badDebtRecovered\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOfUnderlying\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blocksOrSecondsPerYear\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"}],\"name\":\"borrow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"borrowBalanceCurrent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"borrowBalanceStored\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"}],\"name\":\"borrowBehalf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowRatePerBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"comptroller\",\"outputs\":[{\"internalType\":\"contract ComptrollerInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeRateCurrent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeRateStored\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"internalType\":\"contract VTokenInterface\",\"name\":\"vTokenCollateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"skipLiquidityCheck\",\"type\":\"bool\"}],\"name\":\"forceLiquidateBorrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getAccountSnapshot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"error\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vTokenBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exchangeRate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockNumberOrTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCash\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"}],\"name\":\"healBorrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"underlying_\",\"type\":\"address\"},{\"internalType\":\"contract ComptrollerInterface\",\"name\":\"comptroller_\",\"type\":\"address\"},{\"internalType\":\"contract InterestRateModel\",\"name\":\"interestRateModel_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialExchangeRateMantissa_\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"accessControlManager_\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"shortfall\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"protocolShareReserve\",\"type\":\"address\"}],\"internalType\":\"struct VTokenInterface.RiskManagementInit\",\"name\":\"riskManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactorMantissa_\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"interestRateModel\",\"outputs\":[{\"internalType\":\"contract InterestRateModel\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isTimeBased\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"internalType\":\"contract VTokenInterface\",\"name\":\"vTokenCollateral\",\"type\":\"address\"}],\"name\":\"liquidateBorrow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"}],\"name\":\"mintBehalf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolSeizeShareMantissa\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolShareReserve\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"}],\"name\":\"redeemBehalf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"redeemAmount\",\"type\":\"uint256\"}],\"name\":\"redeemUnderlying\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"redeemAmount\",\"type\":\"uint256\"}],\"name\":\"redeemUnderlyingBehalf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reduceAmount\",\"type\":\"uint256\"}],\"name\":\"reduceReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reduceReservesBlockDelta\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reduceReservesBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"}],\"name\":\"repayBorrow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"}],\"name\":\"repayBorrowBehalf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reserveFactorMantissa\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"seizeTokens\",\"type\":\"uint256\"}],\"name\":\"seize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"accessControlManager_\",\"type\":\"address\"}],\"name\":\"setAccessControlManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract InterestRateModel\",\"name\":\"newInterestRateModel\",\"type\":\"address\"}],\"name\":\"setInterestRateModel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSeizeShareMantissa_\",\"type\":\"uint256\"}],\"name\":\"setProtocolSeizeShare\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"protocolShareReserve_\",\"type\":\"address\"}],\"name\":\"setProtocolShareReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newReduceReservesBlockOrTimestampDelta\",\"type\":\"uint256\"}],\"name\":\"setReduceReservesBlockDelta\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newReserveFactorMantissa\",\"type\":\"uint256\"}],\"name\":\"setReserveFactor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"shortfall_\",\"type\":\"address\"}],\"name\":\"setShortfallContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shortfall\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supplyRatePerBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Upgradeable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBorrows\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBorrowsCurrent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlying\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"events\":{\"BadDebtIncreased(address,uint256,uint256,uint256)\":{\"params\":{\"badDebtDelta\":\"amount of new bad debt recorded\",\"badDebtNew\":\"new bad debt value\",\"badDebtOld\":\"previous bad debt value\",\"borrower\":\"borrower to \\\"forgive\\\"\"}},\"BadDebtRecovered(uint256,uint256)\":{\"params\":{\"badDebtNew\":\"new bad debt value\",\"badDebtOld\":\"previous bad debt value\"}},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"accrueInterest()\":{\"custom:access\":\"Not restricted\",\"custom:event\":\"Emits AccrueInterest event on success\",\"details\":\"This calculates interest accrued from the last checkpointed slot(block or second)  up to the current slot(block or second) and writes new checkpoint to storage and  reduce spread reserves to protocol share reserve  if currentSlot - reduceReservesBlockNumber >= slotDelta\",\"returns\":{\"_0\":\"Always NO_ERROR\"}},\"addReserves(uint256)\":{\"custom:access\":\"Not restricted\",\"custom:event\":\"Emits ReservesAdded event; may emit AccrueInterest\",\"params\":{\"addAmount\":\"The amount of underlying token to add as reserves\"}},\"allowance(address,address)\":{\"params\":{\"owner\":\"The address of the account which owns the tokens to be spent\",\"spender\":\"The address of the account which may transfer tokens\"},\"returns\":{\"_0\":\"amount The number of tokens allowed to be spent (type(uint256).max means infinite)\"}},\"approve(address,uint256)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"ZeroAddressNotAllowed is thrown when spender address is zero\",\"custom:event\":\"Emits Approval event\",\"details\":\"This will overwrite the approval amount for `spender`  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\",\"params\":{\"amount\":\"The number of tokens that are approved (uint256.max means infinite)\",\"spender\":\"The address of the account which may transfer tokens\"},\"returns\":{\"_0\":\"success Whether or not the approval succeeded\"}},\"badDebtRecovered(uint256)\":{\"custom:access\":\"Only Shortfall contract\",\"custom:event\":\"Emits BadDebtRecovered event\",\"details\":\"Called only when bad debt is recovered from auction\",\"params\":{\"recoveredAmount_\":\"The amount of bad debt recovered\"}},\"balanceOf(address)\":{\"params\":{\"owner\":\"The address of the account to query\"},\"returns\":{\"_0\":\"amount The number of tokens owned by `owner`\"}},\"balanceOfUnderlying(address)\":{\"details\":\"This also accrues interest in a transaction\",\"params\":{\"owner\":\"The address of the account to query\"},\"returns\":{\"_0\":\"amount The amount of underlying owned by `owner`\"}},\"borrow(uint256)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"BorrowCashNotAvailable is thrown when the protocol has insufficient cash\",\"custom:event\":\"Emits Borrow event; may emit AccrueInterest\",\"params\":{\"borrowAmount\":\"The amount of the underlying asset to borrow\"},\"returns\":{\"_0\":\"error Always NO_ERROR for compatibility with Venus core tooling\"}},\"borrowBalanceCurrent(address)\":{\"params\":{\"account\":\"The address whose balance should be calculated after updating borrowIndex\"},\"returns\":{\"_0\":\"borrowBalance The calculated balance\"}},\"borrowBalanceStored(address)\":{\"params\":{\"account\":\"The address whose balance should be calculated\"},\"returns\":{\"_0\":\"borrowBalance The calculated balance\"}},\"borrowBehalf(address,uint256)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"DelegateNotApproved is thrown if caller is not approved delegateBorrowCashNotAvailable is thrown when the protocol has insufficient cash\",\"custom:event\":\"Emits Borrow event; may emit AccrueInterest\",\"params\":{\"borrowAmount\":\"The amount of the underlying asset to borrow\",\"borrower\":\"The borrower, on behalf of whom to borrow\"},\"returns\":{\"_0\":\"error Always NO_ERROR for compatibility with Venus core tooling\"}},\"borrowRatePerBlock()\":{\"returns\":{\"_0\":\"rate The borrow interest rate per slot(block or second), scaled by 1e18\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\",\"params\":{\"blocksPerYear_\":\"The number of blocks per year\",\"maxBorrowRateMantissa_\":\"The maximum value of borrowing rate mantissa\",\"timeBased_\":\"A boolean indicating whether the contract is based on time or block.\"}},\"decreaseAllowance(address,uint256)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"ZeroAddressNotAllowed is thrown when spender address is zero\",\"custom:event\":\"Emits Approval event\",\"params\":{\"spender\":\"The address of the account which may transfer tokens\",\"subtractedValue\":\"The number of tokens to remove from total approval\"},\"returns\":{\"_0\":\"success Whether or not the approval succeeded\"}},\"exchangeRateCurrent()\":{\"returns\":{\"_0\":\"exchangeRate Calculated exchange rate scaled by 1e18\"}},\"exchangeRateStored()\":{\"details\":\"This function does not accrue interest before calculating the exchange rate\",\"returns\":{\"_0\":\"exchangeRate Calculated exchange rate scaled by 1e18\"}},\"forceLiquidateBorrow(address,address,uint256,address,bool)\":{\"custom:access\":\"Only Comptroller\",\"custom:error\":\"ForceLiquidateBorrowUnauthorized is thrown when the request does not come from ComptrollerLiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vTokenLiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vTokenLiquidateLiquidatorIsBorrower is thrown when trying to liquidate selfLiquidateCloseAmountIsZero is thrown when repayment amount is zeroLiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\",\"custom:event\":\"Emits LiquidateBorrow event; may emit AccrueInterest\",\"params\":{\"borrower\":\"The borrower of this vToken to be liquidated\",\"liquidator\":\"The address repaying the borrow and seizing collateral\",\"repayAmount\":\"The amount of the underlying borrowed asset to repay\",\"skipLiquidityCheck\":\"If set to true, allows to liquidate up to 100% of the borrow   regardless of the account liquidity\",\"vTokenCollateral\":\"The market in which to seize collateral from the borrower\"}},\"getAccountSnapshot(address)\":{\"details\":\"This is used by comptroller to more efficiently perform liquidity checks.\",\"params\":{\"account\":\"Address of the account to snapshot\"},\"returns\":{\"borrowBalance\":\"Amount owed in terms of underlying\",\"error\":\"Always NO_ERROR for compatibility with Venus core tooling\",\"exchangeRate\":\"Stored exchange rate\",\"vTokenBalance\":\"User's balance of vTokens\"}},\"getBlockNumberOrTimestamp()\":{\"details\":\"Function to simply retrieve block number or block timestamp\",\"returns\":{\"_0\":\"Current block number or block timestamp\"}},\"getCash()\":{\"returns\":{\"_0\":\"cash The quantity of underlying asset owned by this contract\"}},\"healBorrow(address,address,uint256)\":{\"custom:access\":\"Only Comptroller\",\"custom:error\":\"HealBorrowUnauthorized is thrown when the request does not come from Comptroller\",\"custom:event\":\"Emits RepayBorrow, BadDebtIncreased events; may emit AccrueInterest\",\"details\":\"This function does not call any Comptroller hooks (like \\\"healAllowed\\\"), because we assume   the Comptroller does all the necessary checks before calling this function.\",\"params\":{\"borrower\":\"account to heal\",\"payer\":\"account who repays the debt\",\"repayAmount\":\"amount to repay\"}},\"increaseAllowance(address,uint256)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"ZeroAddressNotAllowed is thrown when spender address is zero\",\"custom:event\":\"Emits Approval event\",\"params\":{\"addedValue\":\"The number of additional tokens spender can transfer\",\"spender\":\"The address of the account which may transfer tokens\"},\"returns\":{\"_0\":\"success Whether or not the approval succeeded\"}},\"initialize(address,address,address,uint256,string,string,uint8,address,address,(address,address),uint256)\":{\"custom:error\":\"ZeroAddressNotAllowed is thrown when admin address is zeroZeroAddressNotAllowed is thrown when shortfall contract address is zeroZeroAddressNotAllowed is thrown when protocol share reserve address is zero\",\"params\":{\"accessControlManager_\":\"AccessControlManager contract address\",\"admin_\":\"Address of the administrator of this token\",\"comptroller_\":\"The address of the Comptroller\",\"decimals_\":\"ERC-20 decimal precision of this token\",\"initialExchangeRateMantissa_\":\"The initial exchange rate, scaled by 1e18\",\"interestRateModel_\":\"The address of the interest rate model\",\"name_\":\"ERC-20 name of this token\",\"reserveFactorMantissa_\":\"Percentage of borrow interest that goes to reserves (from 0 to 1e18)\",\"riskManagement\":\"Addresses of risk & income related contracts\",\"symbol_\":\"ERC-20 symbol of this token\",\"underlying_\":\"The address of the underlying asset\"}},\"isVToken()\":{\"returns\":{\"_0\":\"Always true\"}},\"liquidateBorrow(address,uint256,address)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vTokenLiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vTokenLiquidateLiquidatorIsBorrower is thrown when trying to liquidate selfLiquidateCloseAmountIsZero is thrown when repayment amount is zeroLiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\",\"custom:event\":\"Emits LiquidateBorrow event; may emit AccrueInterest\",\"params\":{\"borrower\":\"The borrower of this vToken to be liquidated\",\"repayAmount\":\"The amount of the underlying borrowed asset to repay\",\"vTokenCollateral\":\"The market in which to seize collateral from the borrower\"},\"returns\":{\"_0\":\"error Always NO_ERROR for compatibility with Venus core tooling\"}},\"mint(uint256)\":{\"custom:access\":\"Not restricted\",\"custom:event\":\"Emits Mint and Transfer events; may emit AccrueInterest\",\"details\":\"Accrues interest whether or not the operation succeeds, unless reverted\",\"params\":{\"mintAmount\":\"The amount of the underlying asset to supply\"},\"returns\":{\"_0\":\"error Always NO_ERROR for compatibility with Venus core tooling\"}},\"mintBehalf(address,uint256)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"ZeroAddressNotAllowed is thrown when minter address is zero\",\"custom:event\":\"Emits Mint and Transfer events; may emit AccrueInterest\",\"details\":\"Accrues interest whether or not the operation succeeds, unless reverted\",\"params\":{\"mintAmount\":\"The amount of the underlying asset to supply\",\"minter\":\"User whom the supply will be attributed to\"},\"returns\":{\"_0\":\"error Always NO_ERROR for compatibility with Venus core tooling\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"redeem(uint256)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\",\"custom:event\":\"Emits Redeem and Transfer events; may emit AccrueInterest\",\"details\":\"Accrues interest whether or not the operation succeeds, unless reverted\",\"params\":{\"redeemTokens\":\"The number of vTokens to redeem into underlying\"},\"returns\":{\"_0\":\"error Always NO_ERROR for compatibility with Venus core tooling\"}},\"redeemBehalf(address,uint256)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amountRedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\",\"custom:event\":\"Emits Redeem and Transfer events; may emit AccrueInterest\",\"details\":\"Accrues interest whether or not the operation succeeds, unless reverted\",\"params\":{\"redeemTokens\":\"The number of vTokens to redeem into underlying\",\"redeemer\":\"The user on behalf of whom to redeem\"},\"returns\":{\"_0\":\"error Always NO_ERROR for compatibility with Venus core tooling\"}},\"redeemUnderlying(uint256)\":{\"details\":\"Accrues interest whether or not the operation succeeds, unless reverted\",\"params\":{\"redeemAmount\":\"The amount of underlying to receive from redeeming vTokens\"},\"returns\":{\"_0\":\"error Always NO_ERROR for compatibility with Venus core tooling\"}},\"redeemUnderlyingBehalf(address,uint256)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\",\"custom:event\":\"Emits Redeem and Transfer events; may emit AccrueInterest\",\"details\":\"Accrues interest whether or not the operation succeeds, unless reverted\",\"params\":{\"redeemAmount\":\"The amount of underlying to receive from redeeming vTokens\",\"redeemer\":\", on behalf of whom to redeem\"},\"returns\":{\"_0\":\"error Always NO_ERROR for compatibility with Venus core tooling\"}},\"reduceReserves(uint256)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"ReduceReservesCashNotAvailable is thrown when the vToken does not have sufficient cashReduceReservesCashValidation is thrown when trying to withdraw more cash than the reserves have\",\"custom:event\":\"Emits ReservesReduced event; may emit AccrueInterest\",\"details\":\"Gracefully return if reserves already reduced in accrueInterest\",\"params\":{\"reduceAmount\":\"Amount of reduction to reserves\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"repayBorrow(uint256)\":{\"custom:access\":\"Not restricted\",\"custom:event\":\"Emits RepayBorrow event; may emit AccrueInterest\",\"params\":{\"repayAmount\":\"The amount to repay, or type(uint256).max for the full outstanding amount\"},\"returns\":{\"_0\":\"error Always NO_ERROR for compatibility with Venus core tooling\"}},\"repayBorrowBehalf(address,uint256)\":{\"custom:access\":\"Not restricted\",\"custom:event\":\"Emits RepayBorrow event; may emit AccrueInterest\",\"params\":{\"borrower\":\"the account with the debt being payed off\",\"repayAmount\":\"The amount to repay, or type(uint256).max for the full outstanding amount\"},\"returns\":{\"_0\":\"error Always NO_ERROR for compatibility with Venus core tooling\"}},\"seize(address,address,uint256)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"LiquidateSeizeLiquidatorIsBorrower is thrown when trying to liquidate self\",\"custom:event\":\"Emits Transfer, ReservesAdded events\",\"details\":\"Will fail unless called by another vToken during the process of liquidation.  It's absolutely critical to use msg.sender as the borrowed vToken and not a parameter.\",\"params\":{\"borrower\":\"The account having collateral seized\",\"liquidator\":\"The account receiving seized collateral\",\"seizeTokens\":\"The number of vTokens to seize\"}},\"setAccessControlManager(address)\":{\"custom:access\":\"Only Governance\",\"custom:event\":\"Emits NewAccessControlManager event\",\"details\":\"Admin function to set address of AccessControlManager\",\"params\":{\"accessControlManager_\":\"The new address of the AccessControlManager\"}},\"setInterestRateModel(address)\":{\"custom:access\":\"Controlled by AccessControlManager\",\"custom:error\":\"Unauthorized error is thrown when the call is not authorized by AccessControlManager\",\"custom:event\":\"Emits NewMarketInterestRateModel event; may emit AccrueInterest\",\"details\":\"Admin function to accrue interest and update the interest rate model\",\"params\":{\"newInterestRateModel\":\"the new interest rate model to use\"}},\"setProtocolSeizeShare(uint256)\":{\"custom:access\":\"Controlled by AccessControlManager\",\"custom:error\":\"Unauthorized error is thrown when the call is not authorized by AccessControlManagerProtocolSeizeShareTooBig is thrown when the new seize share is too high\",\"custom:event\":\"Emits NewProtocolSeizeShare event on success\",\"details\":\"must be equal or less than liquidation incentive - 1\",\"params\":{\"newProtocolSeizeShareMantissa_\":\"new protocol share mantissa\"}},\"setProtocolShareReserve(address)\":{\"custom:access\":\"Only Governance\",\"custom:error\":\"ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\",\"params\":{\"protocolShareReserve_\":\"The address of the protocol share reserve contract\"}},\"setReduceReservesBlockDelta(uint256)\":{\"custom:access\":\"Only Governance\",\"params\":{\"_newReduceReservesBlockOrTimestampDelta\":\"slot(block or second) difference value\"}},\"setReserveFactor(uint256)\":{\"custom:access\":\"Controlled by AccessControlManager\",\"custom:error\":\"Unauthorized error is thrown when the call is not authorized by AccessControlManagerSetReserveFactorBoundsCheck is thrown when the new reserve factor is too high\",\"custom:event\":\"Emits NewReserveFactor event; may emit AccrueInterest\",\"details\":\"Admin function to accrue interest and set a new reserve factor\",\"params\":{\"newReserveFactorMantissa\":\"New reserve factor (from 0 to 1e18)\"}},\"setShortfallContract(address)\":{\"custom:access\":\"Only Governance\",\"custom:error\":\"ZeroAddressNotAllowed is thrown when shortfall contract address is zero\",\"params\":{\"shortfall_\":\"The address of the shortfall contract\"}},\"supplyRatePerBlock()\":{\"returns\":{\"_0\":\"rate The supply interest rate per slot(block or second), scaled by 1e18\"}},\"sweepToken(address)\":{\"custom:access\":\"Only Governance\",\"params\":{\"token\":\"The address of the ERC-20 token to sweep\"}},\"totalBorrowsCurrent()\":{\"returns\":{\"_0\":\"totalBorrows The total borrows with interest\"}},\"transfer(address,uint256)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"TransferNotAllowed is thrown if trying to transfer to self\",\"custom:event\":\"Emits Transfer event on success\",\"params\":{\"amount\":\"The number of tokens to transfer\",\"dst\":\"The address of the destination account\"},\"returns\":{\"_0\":\"success True if the transfer succeeded, reverts otherwise\"}},\"transferFrom(address,address,uint256)\":{\"custom:access\":\"Not restricted\",\"custom:error\":\"TransferNotAllowed is thrown if trying to transfer to self\",\"custom:event\":\"Emits Transfer event on success\",\"params\":{\"amount\":\"The number of tokens to transfer\",\"dst\":\"The address of the destination account\",\"src\":\"The address of the source account\"},\"returns\":{\"_0\":\"success True if the transfer succeeded, reverts otherwise\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"}},\"stateVariables\":{\"MAX_BORROW_RATE_MANTISSA\":{\"custom:oz-upgrades-unsafe-allow\":\"state-variable-immutable\"}},\"title\":\"VToken\",\"version\":1},\"userdoc\":{\"errors\":{\"InvalidBlocksPerYear()\":[{\"notice\":\"Thrown when blocks per year is invalid\"}],\"InvalidTimeBasedConfiguration()\":[{\"notice\":\"Thrown when time based but blocks per year is provided\"}],\"Unauthorized(address,address,string)\":[{\"notice\":\"Thrown when the action is prohibited by AccessControlManager\"}],\"ZeroAddressNotAllowed()\":[{\"notice\":\"Thrown if the supplied address is a zero address where it is not allowed\"}]},\"events\":{\"AccrueInterest(uint256,uint256,uint256,uint256)\":{\"notice\":\"Event emitted when interest is accrued\"},\"Approval(address,address,uint256)\":{\"notice\":\"EIP20 Approval event\"},\"BadDebtIncreased(address,uint256,uint256,uint256)\":{\"notice\":\"Event emitted when bad debt is accumulated on a market\"},\"BadDebtRecovered(uint256,uint256)\":{\"notice\":\"Event emitted when bad debt is recovered via an auction\"},\"Borrow(address,uint256,uint256,uint256)\":{\"notice\":\"Event emitted when underlying is borrowed\"},\"HealBorrow(address,address,uint256)\":{\"notice\":\"Event emitted when healing the borrow\"},\"LiquidateBorrow(address,address,uint256,address,uint256)\":{\"notice\":\"Event emitted when a borrow is liquidated\"},\"Mint(address,uint256,uint256,uint256)\":{\"notice\":\"Event emitted when tokens are minted\"},\"NewAccessControlManager(address,address)\":{\"notice\":\"Emitted when access control manager contract address is changed\"},\"NewComptroller(address,address)\":{\"notice\":\"Event emitted when comptroller is changed\"},\"NewMarketInterestRateModel(address,address)\":{\"notice\":\"Event emitted when interestRateModel is changed\"},\"NewProtocolSeizeShare(uint256,uint256)\":{\"notice\":\"Event emitted when protocol seize share is changed\"},\"NewProtocolShareReserve(address,address)\":{\"notice\":\"Event emitted when protocol share reserve contract address is changed\"},\"NewReduceReservesBlockDelta(uint256,uint256)\":{\"notice\":\"Event emitted when reduce reserves slot (block or second) delta is changed\"},\"NewReserveFactor(uint256,uint256)\":{\"notice\":\"Event emitted when the reserve factor is changed\"},\"NewShortfallContract(address,address)\":{\"notice\":\"Event emitted when shortfall contract address is changed\"},\"ProtocolSeize(address,address,uint256)\":{\"notice\":\"Event emitted when liquidation reserves are reduced\"},\"Redeem(address,uint256,uint256,uint256)\":{\"notice\":\"Event emitted when tokens are redeemed\"},\"RepayBorrow(address,address,uint256,uint256,uint256)\":{\"notice\":\"Event emitted when a borrow is repaid\"},\"ReservesAdded(address,uint256,uint256)\":{\"notice\":\"Event emitted when the reserves are added\"},\"SpreadReservesReduced(address,uint256,uint256)\":{\"notice\":\"Event emitted when the spread reserves are reduced\"},\"SweepToken(address)\":{\"notice\":\"Event emitted when tokens are swept\"},\"Transfer(address,address,uint256)\":{\"notice\":\"EIP20 Transfer event\"}},\"kind\":\"user\",\"methods\":{\"accessControlManager()\":{\"notice\":\"Returns the address of the access control manager contract\"},\"accrualBlockNumber()\":{\"notice\":\"Slot(block or second) number that interest was last accrued at\"},\"accrueInterest()\":{\"notice\":\"Applies accrued interest to total borrows and reserves\"},\"addReserves(uint256)\":{\"notice\":\"The sender adds to reserves.\"},\"allowance(address,address)\":{\"notice\":\"Get the current allowance from `owner` for `spender`\"},\"approve(address,uint256)\":{\"notice\":\"Approve `spender` to transfer up to `amount` from `src`\"},\"badDebt()\":{\"notice\":\"Total bad debt of the market\"},\"badDebtRecovered(uint256)\":{\"notice\":\"Updates bad debt\"},\"balanceOf(address)\":{\"notice\":\"Get the token balance of the `owner`\"},\"balanceOfUnderlying(address)\":{\"notice\":\"Get the underlying balance of the `owner`\"},\"blocksOrSecondsPerYear()\":{\"notice\":\"Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored\"},\"borrow(uint256)\":{\"notice\":\"Sender borrows assets from the protocol to their own address\"},\"borrowBalanceCurrent(address)\":{\"notice\":\"Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\"},\"borrowBalanceStored(address)\":{\"notice\":\"Return the borrow balance of account based on stored data\"},\"borrowBehalf(address,uint256)\":{\"notice\":\"Sender borrows assets on behalf of some other address. This function is only available   for senders, explicitly marked as delegates of the borrower using `comptroller.updateDelegate`\"},\"borrowIndex()\":{\"notice\":\"Accumulator of the total earned interest rate since the opening of the market\"},\"borrowRatePerBlock()\":{\"notice\":\"Returns the current per slot(block or second) borrow interest rate for this vToken\"},\"comptroller()\":{\"notice\":\"Contract which oversees inter-vToken operations\"},\"decimals()\":{\"notice\":\"EIP-20 token decimals for this token\"},\"decreaseAllowance(address,uint256)\":{\"notice\":\"Decreases approval for `spender`\"},\"exchangeRateCurrent()\":{\"notice\":\"Accrue interest then return the up-to-date exchange rate\"},\"exchangeRateStored()\":{\"notice\":\"Calculates the exchange rate from the underlying to the VToken\"},\"forceLiquidateBorrow(address,address,uint256,address,bool)\":{\"notice\":\"The extended version of liquidations, callable only by Comptroller. May skip  the close factor check. The collateral seized is transferred to the liquidator.\"},\"getAccountSnapshot(address)\":{\"notice\":\"Get a snapshot of the account's balances, and the cached exchange rate\"},\"getCash()\":{\"notice\":\"Get cash balance of this vToken in the underlying asset\"},\"healBorrow(address,address,uint256)\":{\"notice\":\"Repays a certain amount of debt, treats the rest of the borrow as bad debt, essentially   \\\"forgiving\\\" the borrower. Healing is a situation that should rarely happen. However, some pools   may list risky assets or be configured improperly \\u2013 we want to still handle such cases gracefully.   We assume that Comptroller does the seizing, so this function is only available to Comptroller.\"},\"increaseAllowance(address,uint256)\":{\"notice\":\"Increase approval for `spender`\"},\"initialize(address,address,address,uint256,string,string,uint8,address,address,(address,address),uint256)\":{\"notice\":\"Construct a new money market\"},\"interestRateModel()\":{\"notice\":\"Model which tells what the current interest rate should be\"},\"isTimeBased()\":{\"notice\":\"Acknowledges if a contract is time based or not\"},\"isVToken()\":{\"notice\":\"Indicator that this is a VToken contract (for inspection)\"},\"liquidateBorrow(address,uint256,address)\":{\"notice\":\"The sender liquidates the borrowers collateral.  The collateral seized is transferred to the liquidator.\"},\"mint(uint256)\":{\"notice\":\"Sender supplies assets into the market and receives vTokens in exchange\"},\"mintBehalf(address,uint256)\":{\"notice\":\"Sender calls on-behalf of minter. minter supplies assets into the market and receives vTokens in exchange\"},\"name()\":{\"notice\":\"EIP-20 token name for this token\"},\"protocolSeizeShareMantissa()\":{\"notice\":\"Share of seized collateral that is added to reserves\"},\"protocolShareReserve()\":{\"notice\":\"Protocol share Reserve contract address\"},\"redeem(uint256)\":{\"notice\":\"Sender redeems vTokens in exchange for the underlying asset\"},\"redeemBehalf(address,uint256)\":{\"notice\":\"Sender redeems assets on behalf of some other address. This function is only available   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\"},\"redeemUnderlying(uint256)\":{\"notice\":\"Sender redeems vTokens in exchange for a specified amount of underlying asset\"},\"redeemUnderlyingBehalf(address,uint256)\":{\"notice\":\"Sender redeems underlying assets on behalf of some other address. This function is only available   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\"},\"reduceReserves(uint256)\":{\"notice\":\"Accrues interest and reduces reserves by transferring to the protocol reserve contract\"},\"reduceReservesBlockDelta()\":{\"notice\":\"delta slot (block or second) after which reserves will be reduced\"},\"reduceReservesBlockNumber()\":{\"notice\":\"last slot (block or second) number at which reserves were reduced\"},\"repayBorrow(uint256)\":{\"notice\":\"Sender repays their own borrow\"},\"repayBorrowBehalf(address,uint256)\":{\"notice\":\"Sender repays a borrow belonging to borrower\"},\"reserveFactorMantissa()\":{\"notice\":\"Fraction of interest currently set aside for reserves\"},\"seize(address,address,uint256)\":{\"notice\":\"Transfers collateral tokens (this market) to the liquidator.\"},\"setAccessControlManager(address)\":{\"notice\":\"Sets the address of AccessControlManager\"},\"setInterestRateModel(address)\":{\"notice\":\"accrues interest and updates the interest rate model using _setInterestRateModelFresh\"},\"setProtocolSeizeShare(uint256)\":{\"notice\":\"sets protocol share accumulated from liquidations\"},\"setProtocolShareReserve(address)\":{\"notice\":\"Sets protocol share reserve contract address\"},\"setReduceReservesBlockDelta(uint256)\":{\"notice\":\"A public function to set new threshold of slot(block or second) difference after which funds will be sent to the protocol share reserve\"},\"setReserveFactor(uint256)\":{\"notice\":\"accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\"},\"setShortfallContract(address)\":{\"notice\":\"Sets shortfall contract address\"},\"shortfall()\":{\"notice\":\"Storage of Shortfall contract address\"},\"supplyRatePerBlock()\":{\"notice\":\"Returns the current per-slot(block or second) supply interest rate for this v\"},\"sweepToken(address)\":{\"notice\":\"A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)\"},\"symbol()\":{\"notice\":\"EIP-20 token symbol for this token\"},\"totalBorrows()\":{\"notice\":\"Total amount of outstanding borrows of the underlying in this market\"},\"totalBorrowsCurrent()\":{\"notice\":\"Returns the current total borrows plus accrued interest\"},\"totalReserves()\":{\"notice\":\"Total amount of reserves of the underlying held in this market\"},\"totalSupply()\":{\"notice\":\"Total number of tokens in circulation\"},\"transfer(address,uint256)\":{\"notice\":\"Transfer `amount` tokens from `msg.sender` to `dst`\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Transfer `amount` tokens from `src` to `dst`\"},\"underlying()\":{\"notice\":\"Underlying asset for this VToken\"}},\"notice\":\"Each asset that is supported by a pool is integrated through an instance of the `VToken` contract. As outlined in the protocol overview, each isolated pool creates its own `vToken` corresponding to an asset. Within a given pool, each included `vToken` is referred to as a market of the pool. The main actions a user regularly interacts with in a market are: - mint/redeem of vTokens; - transfer of vTokens; - borrow/repay a loan on an underlying asset; - liquidate a borrow or liquidate/heal an account. A user supplies the underlying asset to a pool by minting `vTokens`, where the corresponding `vToken` amount is determined by the `exchangeRate`. The `exchangeRate` will change over time, dependent on a number of factors, some of which accrue interest. Additionally, once users have minted `vToken` in a pool, they can borrow any asset in the isolated pool by using their `vToken` as collateral. In order to borrow an asset or use a `vToken` as collateral, the user must be entered into each corresponding market (else, the `vToken` will not be considered collateral for a borrow). Note that a user may borrow up to a portion of their collateral determined by the market\\u2019s collateral factor. However, if their borrowed amount exceeds an amount calculated using the market\\u2019s corresponding liquidation threshold, the borrow is eligible for liquidation. When a user repays a borrow, they must also pay off interest accrued on the borrow.  The Venus protocol includes unique mechanisms for healing an account and liquidating an account. These actions are performed in the `Comptroller` and consider all borrows and collateral for which a given account is entered within a market. These functions may only be called on an account with a total collateral amount that is no larger than a universal `minLiquidatableCollateral` value, which is used for all markets within a `Comptroller`. Both functions settle all of an account\\u2019s borrows, but `healAccount()` may add `badDebt` to a vToken. For more detail, see the description of `healAccount()` and `liquidateAccount()` in the `Comptroller` summary section below.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/isolated-pools/contracts/VToken.sol\":\"VToken\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./OwnableUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership} and {acceptOwnership}.\\n *\\n * This module is used through inheritance. It will make available all functions\\n * from parent (Ownable).\\n */\\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\\n    address private _pendingOwner;\\n\\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\\n\\n    function __Ownable2Step_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable2Step_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Returns the address of the pending owner.\\n     */\\n    function pendingOwner() public view virtual returns (address) {\\n        return _pendingOwner;\\n    }\\n\\n    /**\\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\\n        _pendingOwner = newOwner;\\n        emit OwnershipTransferStarted(owner(), newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual override {\\n        delete _pendingOwner;\\n        super._transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev The new owner accepts the ownership transfer.\\n     */\\n    function acceptOwnership() public virtual {\\n        address sender = _msgSender();\\n        require(pendingOwner() == sender, \\\"Ownable2Step: caller is not the new owner\\\");\\n        _transferOwnership(sender);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x9140dabc466abab21b48b72dbda26736b1183a310d0e677d3719d201df026510\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * ==== Security Considerations\\n *\\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\\n * generally recommended is:\\n *\\n * ```solidity\\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\\n *     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\\n *     doThing(..., value);\\n * }\\n *\\n * function doThing(..., uint256 value) public {\\n *     token.safeTransferFrom(msg.sender, address(this), value);\\n *     ...\\n * }\\n * ```\\n *\\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\\n * {SafeERC20-safeTransferFrom}).\\n *\\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\\n * contracts should have entry points that don't rely on permit.\\n */\\ninterface IERC20PermitUpgradeable {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     *\\n     * CAUTION: See Security Considerations above.\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x07e881de3b9f6d2c07909f193f24b96c7fe4ea60013260f3f25aecd8bab3c2f8\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\nimport \\\"../extensions/IERC20PermitUpgradeable.sol\\\";\\nimport \\\"../../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20Upgradeable {\\n    using AddressUpgradeable for address;\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransfer(IERC20Upgradeable token, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    /**\\n     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeIncreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        uint256 oldAllowance = token.allowance(address(this), spender);\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));\\n    }\\n\\n    /**\\n     * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeDecreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));\\n        }\\n    }\\n\\n    /**\\n     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n     * to be set to zero before setting it to a non-zero value, such as USDT.\\n     */\\n    function forceApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);\\n\\n        if (!_callOptionalReturnBool(token, approvalCall)) {\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));\\n            _callOptionalReturn(token, approvalCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.\\n     * Revert on invalid signature.\\n     */\\n    function safePermit(\\n        IERC20PermitUpgradeable token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20Upgradeable token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        require(returndata.length == 0 || abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     *\\n     * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\\n     */\\n    function _callOptionalReturnBool(IERC20Upgradeable token, bytes memory data) private returns (bool) {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\\n        // and not revert is the subcall reverts.\\n\\n        (bool success, bytes memory returndata) = address(token).call(data);\\n        return\\n            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && AddressUpgradeable.isContract(address(token));\\n    }\\n}\\n\",\"keccak256\":\"0x23b997be73d3dd46885262704f0f8cfc7273fdadfe303d37969a9561373972b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n    /**\\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n     *\\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n     * {RoleAdminChanged} not being emitted signaling this.\\n     *\\n     * _Available since v3.1._\\n     */\\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n    /**\\n     * @dev Emitted when `account` is granted `role`.\\n     *\\n     * `sender` is the account that originated the contract call, an admin role\\n     * bearer except when using {AccessControl-_setupRole}.\\n     */\\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Emitted when `account` is revoked `role`.\\n     *\\n     * `sender` is the account that originated the contract call:\\n     *   - if using `revokeRole`, it is the admin role bearer\\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n     */\\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Returns `true` if `account` has been granted `role`.\\n     */\\n    function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n    /**\\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\\n     * {revokeRole}.\\n     *\\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n     */\\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n    /**\\n     * @dev Grants `role` to `account`.\\n     *\\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function grantRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from `account`.\\n     *\\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function revokeRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from the calling account.\\n     *\\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n     * purpose is to provide a mechanism for accounts to lose their privileges\\n     * if they are compromised (such as when a trusted device is misplaced).\\n     *\\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must be `account`.\\n     */\\n    function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\n\\nimport \\\"./IAccessControlManagerV8.sol\\\";\\n\\n/**\\n * @title AccessControlledV8\\n * @author Venus\\n * @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\\n * to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\\n */\\nabstract contract AccessControlledV8 is Initializable, Ownable2StepUpgradeable {\\n    /// @notice Access control manager contract\\n    IAccessControlManagerV8 internal _accessControlManager;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when access control manager contract address is changed\\n    event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager);\\n\\n    /// @notice Thrown when the action is prohibited by AccessControlManager\\n    error Unauthorized(address sender, address calledContract, string methodSignature);\\n\\n    function __AccessControlled_init(address accessControlManager_) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n    }\\n\\n    function __AccessControlled_init_unchained(address accessControlManager_) internal onlyInitializing {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Sets the address of AccessControlManager\\n     * @dev Admin function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     * @custom:event Emits NewAccessControlManager event\\n     * @custom:access Only Governance\\n     */\\n    function setAccessControlManager(address accessControlManager_) external onlyOwner {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Returns the address of the access control manager contract\\n     */\\n    function accessControlManager() external view returns (IAccessControlManagerV8) {\\n        return _accessControlManager;\\n    }\\n\\n    /**\\n     * @dev Internal function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     */\\n    function _setAccessControlManager(address accessControlManager_) internal {\\n        require(address(accessControlManager_) != address(0), \\\"invalid acess control manager address\\\");\\n        address oldAccessControlManager = address(_accessControlManager);\\n        _accessControlManager = IAccessControlManagerV8(accessControlManager_);\\n        emit NewAccessControlManager(oldAccessControlManager, accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Reverts if the call is not allowed by AccessControlManager\\n     * @param signature Method signature\\n     */\\n    function _checkAccessAllowed(string memory signature) internal view {\\n        bool isAllowedToCall = _accessControlManager.isAllowedToCall(msg.sender, signature);\\n\\n        if (!isAllowedToCall) {\\n            revert Unauthorized(msg.sender, address(this), signature);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe0fd441c84ac907cabc88db69ef04f6d7532d770c7e6a1dfe6e7d6305debb49\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport \\\"@openzeppelin/contracts/access/IAccessControl.sol\\\";\\n\\n/**\\n * @title IAccessControlManagerV8\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\\n */\\ninterface IAccessControlManagerV8 is IAccessControl {\\n    function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n    function revokeCallPermission(\\n        address contractAddress,\\n        string calldata functionSig,\\n        address accountToRevoke\\n    ) external;\\n\\n    function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n    function hasPermission(\\n        address account,\\n        address contractAddress,\\n        string calldata functionSig\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xaa29b098440d0b3a131c5ecdf25ce548790c1b5ac7bf9b5c0264b6af6f7a1e0b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Comptroller.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\n\\nimport { ComptrollerInterface, Action } from \\\"./ComptrollerInterface.sol\\\";\\nimport { ComptrollerStorage } from \\\"./ComptrollerStorage.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"./MaxLoopsLimitHelper.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title Comptroller\\n * @author Venus\\n * @notice The Comptroller is designed to provide checks for all minting, redeeming, transferring, borrowing, lending, repaying, liquidating,\\n * and seizing done by the `vToken` contract. Each pool has one `Comptroller` checking these interactions across markets. When a user interacts\\n * with a given market by one of these main actions, a call is made to a corresponding hook in the associated `Comptroller`, which either allows\\n * or reverts the transaction. These hooks also update supply and borrow rewards as they are called. The comptroller holds the logic for assessing\\n * liquidity snapshots of an account via the collateral factor and liquidation threshold. This check determines the collateral needed for a borrow,\\n * as well as how much of a borrow may be liquidated. A user may borrow a portion of their collateral with the maximum amount determined by the\\n * markets collateral factor. However, if their borrowed amount exceeds an amount calculated using the market\\u2019s corresponding liquidation threshold,\\n * the borrow is eligible for liquidation.\\n *\\n * The `Comptroller` also includes two functions `liquidateAccount()` and `healAccount()`, which are meant to handle accounts that do not exceed\\n * the `minLiquidatableCollateral` for the `Comptroller`:\\n *\\n * - `healAccount()`: This function is called to seize all of a given user\\u2019s collateral, requiring the `msg.sender` repay a certain percentage\\n * of the debt calculated by `collateral/(borrows*liquidationIncentive)`. The function can only be called if the calculated percentage does not exceed\\n * 100%, because otherwise no `badDebt` would be created and `liquidateAccount()` should be used instead. The difference in the actual amount of debt\\n * and debt paid off is recorded as `badDebt` for each market, which can then be auctioned off for the risk reserves of the associated pool.\\n * - `liquidateAccount()`: This function can only be called if the collateral seized will cover all borrows of an account, as well as the liquidation\\n * incentive. Otherwise, the pool will incur bad debt, in which case the function `healAccount()` should be used instead. This function skips the logic\\n * verifying that the repay amount does not exceed the close factor.\\n */\\ncontract Comptroller is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    ComptrollerStorage,\\n    ComptrollerInterface,\\n    ExponentialNoError,\\n    MaxLoopsLimitHelper\\n{\\n    // PoolRegistry, immutable to save on gas\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    address public immutable poolRegistry;\\n\\n    /// @notice Emitted when an account enters a market\\n    event MarketEntered(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when an account exits a market\\n    event MarketExited(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when close factor is changed by admin\\n    event NewCloseFactor(uint256 oldCloseFactorMantissa, uint256 newCloseFactorMantissa);\\n\\n    /// @notice Emitted when a collateral factor is changed by admin\\n    event NewCollateralFactor(VToken vToken, uint256 oldCollateralFactorMantissa, uint256 newCollateralFactorMantissa);\\n\\n    /// @notice Emitted when liquidation threshold is changed by admin\\n    event NewLiquidationThreshold(\\n        VToken vToken,\\n        uint256 oldLiquidationThresholdMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    );\\n\\n    /// @notice Emitted when liquidation incentive is changed by admin\\n    event NewLiquidationIncentive(uint256 oldLiquidationIncentiveMantissa, uint256 newLiquidationIncentiveMantissa);\\n\\n    /// @notice Emitted when price oracle is changed\\n    event NewPriceOracle(ResilientOracleInterface oldPriceOracle, ResilientOracleInterface newPriceOracle);\\n\\n    /// @notice Emitted when an action is paused on a market\\n    event ActionPausedMarket(VToken vToken, Action action, bool pauseState);\\n\\n    /// @notice Emitted when borrow cap for a vToken is changed\\n    event NewBorrowCap(VToken indexed vToken, uint256 newBorrowCap);\\n\\n    /// @notice Emitted when the collateral threshold (in USD) for non-batch liquidations is changed\\n    event NewMinLiquidatableCollateral(uint256 oldMinLiquidatableCollateral, uint256 newMinLiquidatableCollateral);\\n\\n    /// @notice Emitted when supply cap for a vToken is changed\\n    event NewSupplyCap(VToken indexed vToken, uint256 newSupplyCap);\\n\\n    /// @notice Emitted when a rewards distributor is added\\n    event NewRewardsDistributor(address indexed rewardsDistributor, address indexed rewardToken);\\n\\n    /// @notice Emitted when a market is supported\\n    event MarketSupported(VToken vToken);\\n\\n    /// @notice Emitted when prime token contract address is changed\\n    event NewPrimeToken(IPrime oldPrimeToken, IPrime newPrimeToken);\\n\\n    /// @notice Emitted when forced liquidation is enabled or disabled for a market\\n    event IsForcedLiquidationEnabledUpdated(address indexed vToken, bool enable);\\n\\n    /// @notice Emitted when a market is unlisted\\n    event MarketUnlisted(address indexed vToken);\\n    /// @notice Emitted when the borrowing or redeeming delegate rights are updated for an account\\n    event DelegateUpdated(address indexed approver, address indexed delegate, bool approved);\\n\\n    /// @notice Thrown when collateral factor exceeds the upper bound\\n    error InvalidCollateralFactor();\\n\\n    /// @notice Thrown when liquidation threshold exceeds the collateral factor\\n    error InvalidLiquidationThreshold();\\n\\n    /// @notice Thrown when the action is only available to specific sender, but the real sender was different\\n    error UnexpectedSender(address expectedSender, address actualSender);\\n\\n    /// @notice Thrown when the oracle returns an invalid price for some asset\\n    error PriceError(address vToken);\\n\\n    /// @notice Thrown if VToken unexpectedly returned a nonzero error code while trying to get account snapshot\\n    error SnapshotError(address vToken, address user);\\n\\n    /// @notice Thrown when the market is not listed\\n    error MarketNotListed(address market);\\n\\n    /// @notice Thrown when a market has an unexpected comptroller\\n    error ComptrollerMismatch();\\n\\n    /// @notice Thrown when user is not member of market\\n    error MarketNotCollateral(address vToken, address user);\\n\\n    /// @notice Thrown when borrow action is not paused\\n    error BorrowActionNotPaused();\\n\\n    /// @notice Thrown when mint action is not paused\\n    error MintActionNotPaused();\\n\\n    /// @notice Thrown when redeem action is not paused\\n    error RedeemActionNotPaused();\\n\\n    /// @notice Thrown when repay action is not paused\\n    error RepayActionNotPaused();\\n\\n    /// @notice Thrown when seize action is not paused\\n    error SeizeActionNotPaused();\\n\\n    /// @notice Thrown when exit market action is not paused\\n    error ExitMarketActionNotPaused();\\n\\n    /// @notice Thrown when transfer action is not paused\\n    error TransferActionNotPaused();\\n\\n    /// @notice Thrown when enter market action is not paused\\n    error EnterMarketActionNotPaused();\\n\\n    /// @notice Thrown when liquidate action is not paused\\n    error LiquidateActionNotPaused();\\n\\n    /// @notice Thrown when borrow cap is not zero\\n    error BorrowCapIsNotZero();\\n\\n    /// @notice Thrown when supply cap is not zero\\n    error SupplyCapIsNotZero();\\n\\n    /// @notice Thrown when collateral factor is not zero\\n    error CollateralFactorIsNotZero();\\n\\n    /**\\n     * @notice Thrown during the liquidation if user's total collateral amount is lower than\\n     *   a predefined threshold. In this case only batch liquidations (either liquidateAccount\\n     *   or healAccount) are available.\\n     */\\n    error MinimalCollateralViolated(uint256 expectedGreaterThan, uint256 actual);\\n    error CollateralExceedsThreshold(uint256 expectedLessThanOrEqualTo, uint256 actual);\\n    error InsufficientCollateral(uint256 collateralToSeize, uint256 availableCollateral);\\n\\n    /// @notice Thrown when the account doesn't have enough liquidity to redeem or borrow\\n    error InsufficientLiquidity();\\n\\n    /// @notice Thrown when trying to liquidate a healthy account\\n    error InsufficientShortfall();\\n\\n    /// @notice Thrown when trying to repay more than allowed by close factor\\n    error TooMuchRepay();\\n\\n    /// @notice Thrown if the user is trying to exit a market in which they have an outstanding debt\\n    error NonzeroBorrowBalance();\\n\\n    /// @notice Thrown when trying to perform an action that is paused\\n    error ActionPaused(address market, Action action);\\n\\n    /// @notice Thrown when trying to add a market that is already listed\\n    error MarketAlreadyListed(address market);\\n\\n    /// @notice Thrown if the supply cap is exceeded\\n    error SupplyCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if the borrow cap is exceeded\\n    error BorrowCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if delegate approval status is already set to the requested value\\n    error DelegationStatusUnchanged();\\n\\n    /// @param poolRegistry_ Pool registry address\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    /// @custom:error ZeroAddressNotAllowed is thrown when pool registry address is zero\\n    constructor(address poolRegistry_) {\\n        ensureNonzeroAddress(poolRegistry_);\\n\\n        poolRegistry = poolRegistry_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @param loopLimit Limit for the loops can iterate to avoid the DOS\\n     * @param accessControlManager Access control manager contract address\\n     */\\n    function initialize(uint256 loopLimit, address accessControlManager) external initializer {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager);\\n\\n        _setMaxLoopsLimit(loopLimit);\\n    }\\n\\n    /**\\n     * @notice Add assets to be included in account liquidity calculation; enabling them to be used as collateral\\n     * @param vTokens The list of addresses of the vToken markets to be enabled\\n     * @return errors An array of NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketEntered is emitted for each market on success\\n     * @custom:error ActionPaused error is thrown if entering any of the markets is paused\\n     * @custom:error MarketNotListed error is thrown if any of the markets is not listed\\n     * @custom:access Not restricted\\n     */\\n    function enterMarkets(address[] memory vTokens) external override returns (uint256[] memory) {\\n        uint256 len = vTokens.length;\\n\\n        uint256[] memory results = new uint256[](len);\\n        for (uint256 i; i < len; ++i) {\\n            VToken vToken = VToken(vTokens[i]);\\n\\n            _addToMarket(vToken, msg.sender);\\n            results[i] = NO_ERROR;\\n        }\\n\\n        return results;\\n    }\\n\\n    /**\\n     * @notice Unlist a market by setting isListed to false\\n     * @dev Checks if all actions are paused, borrow/supply caps is set to 0 and collateral factor is to 0.\\n     * @param market The address of the market (token) to unlist\\n     * @return uint256 Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketUnlisted is emitted on success\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error BorrowActionNotPaused error is thrown if borrow action is not paused\\n     * @custom:error MintActionNotPaused error is thrown if mint action is not paused\\n     * @custom:error RedeemActionNotPaused error is thrown if redeem action is not paused\\n     * @custom:error RepayActionNotPaused error is thrown if repay action is not paused\\n     * @custom:error EnterMarketActionNotPaused error is thrown if enter market action is not paused\\n     * @custom:error LiquidateActionNotPaused error is thrown if liquidate action is not paused\\n     * @custom:error BorrowCapIsNotZero error is thrown if borrow cap is not zero\\n     * @custom:error SupplyCapIsNotZero error is thrown if supply cap is not zero\\n     * @custom:error CollateralFactorIsNotZero error is thrown if collateral factor is not zero\\n     */\\n    function unlistMarket(address market) external returns (uint256) {\\n        _checkAccessAllowed(\\\"unlistMarket(address)\\\");\\n\\n        Market storage _market = markets[market];\\n\\n        if (!_market.isListed) {\\n            revert MarketNotListed(market);\\n        }\\n\\n        if (!actionPaused(market, Action.BORROW)) {\\n            revert BorrowActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.MINT)) {\\n            revert MintActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REDEEM)) {\\n            revert RedeemActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REPAY)) {\\n            revert RepayActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.SEIZE)) {\\n            revert SeizeActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.ENTER_MARKET)) {\\n            revert EnterMarketActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.LIQUIDATE)) {\\n            revert LiquidateActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.TRANSFER)) {\\n            revert TransferActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.EXIT_MARKET)) {\\n            revert ExitMarketActionNotPaused();\\n        }\\n\\n        if (borrowCaps[market] != 0) {\\n            revert BorrowCapIsNotZero();\\n        }\\n\\n        if (supplyCaps[market] != 0) {\\n            revert SupplyCapIsNotZero();\\n        }\\n\\n        if (_market.collateralFactorMantissa != 0) {\\n            revert CollateralFactorIsNotZero();\\n        }\\n\\n        _market.isListed = false;\\n        emit MarketUnlisted(market);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Grants or revokes the borrowing or redeeming delegate rights to / from an account\\n     *  If allowed, the delegate will be able to borrow funds on behalf of the sender\\n     *  Upon a delegated borrow, the delegate will receive the funds, and the borrower\\n     *  will see the debt on their account\\n     *  Upon a delegated redeem, the delegate will receive the redeemed amount and the approver\\n     *  will see a deduction in his vToken balance\\n     * @param delegate The address to update the rights for\\n     * @param approved Whether to grant (true) or revoke (false) the borrowing or redeeming rights\\n     * @custom:event DelegateUpdated emits on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when delegate address is zero\\n     * @custom:error DelegationStatusUnchanged is thrown if approval status is already set to the requested value\\n     * @custom:access Not restricted\\n     */\\n    function updateDelegate(address delegate, bool approved) external {\\n        ensureNonzeroAddress(delegate);\\n        if (approvedDelegates[msg.sender][delegate] == approved) {\\n            revert DelegationStatusUnchanged();\\n        }\\n\\n        approvedDelegates[msg.sender][delegate] = approved;\\n        emit DelegateUpdated(msg.sender, delegate, approved);\\n    }\\n\\n    /**\\n     * @notice Removes asset from sender's account liquidity calculation; disabling them as collateral\\n     * @dev Sender must not have an outstanding borrow balance in the asset,\\n     *  or be providing necessary collateral for an outstanding borrow.\\n     * @param vTokenAddress The address of the asset to be removed\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketExited is emitted on success\\n     * @custom:error ActionPaused error is thrown if exiting the market is paused\\n     * @custom:error NonzeroBorrowBalance error is thrown if the user has an outstanding borrow in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if exiting the market would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function exitMarket(address vTokenAddress) external override returns (uint256) {\\n        _checkActionPauseState(vTokenAddress, Action.EXIT_MARKET);\\n        VToken vToken = VToken(vTokenAddress);\\n        /* Get sender tokensHeld and amountOwed underlying from the vToken */\\n        (uint256 tokensHeld, uint256 amountOwed, ) = _safeGetAccountSnapshot(vToken, msg.sender);\\n\\n        /* Fail if the sender has a borrow balance */\\n        if (amountOwed != 0) {\\n            revert NonzeroBorrowBalance();\\n        }\\n\\n        /* Fail if the sender is not permitted to redeem all of their tokens */\\n        _checkRedeemAllowed(vTokenAddress, msg.sender, tokensHeld);\\n\\n        Market storage marketToExit = markets[address(vToken)];\\n\\n        /* Return true if the sender is not already \\u2018in\\u2019 the market */\\n        if (!marketToExit.accountMembership[msg.sender]) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Set vToken account membership to false */\\n        delete marketToExit.accountMembership[msg.sender];\\n\\n        /* Delete vToken from the account\\u2019s list of assets */\\n        // load into memory for faster iteration\\n        VToken[] memory userAssetList = accountAssets[msg.sender];\\n        uint256 len = userAssetList.length;\\n\\n        uint256 assetIndex = len;\\n        for (uint256 i; i < len; ++i) {\\n            if (userAssetList[i] == vToken) {\\n                assetIndex = i;\\n                break;\\n            }\\n        }\\n\\n        // We *must* have found the asset in the list or our redundant data structure is broken\\n        assert(assetIndex < len);\\n\\n        // copy last item in list to location of item to be removed, reduce length by 1\\n        VToken[] storage storedList = accountAssets[msg.sender];\\n        storedList[assetIndex] = storedList[storedList.length - 1];\\n        storedList.pop();\\n\\n        emit MarketExited(vToken, msg.sender);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /*** Policy Hooks ***/\\n\\n    /**\\n     * @notice Checks if the account should be allowed to mint tokens in the given market\\n     * @param vToken The market to verify the mint against\\n     * @param minter The account which would get the minted tokens\\n     * @param mintAmount The amount of underlying being supplied to the market in exchange for tokens\\n     * @custom:error ActionPaused error is thrown if supplying to this market is paused\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error SupplyCapExceeded error is thrown if the total supply exceeds the cap after minting\\n     * @custom:access Not restricted\\n     */\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external override {\\n        _checkActionPauseState(vToken, Action.MINT);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        uint256 supplyCap = supplyCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (supplyCap != type(uint256).max) {\\n            uint256 vTokenSupply = VToken(vToken).totalSupply();\\n            Exp memory exchangeRate = Exp({ mantissa: VToken(vToken).exchangeRateStored() });\\n            uint256 nextTotalSupply = mul_ScalarTruncateAddUInt(exchangeRate, vTokenSupply, mintAmount);\\n            if (nextTotalSupply > supplyCap) {\\n                revert SupplyCapExceeded(vToken, supplyCap);\\n            }\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, minter);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates mint, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being minted\\n     * @param minter The address minting the tokens\\n     * @param actualMintAmount The amount of the underlying asset being minted\\n     * @param mintTokens The number of tokens being minted\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function mintVerify(address vToken, address minter, uint256 actualMintAmount, uint256 mintTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(minter, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to redeem tokens in the given market\\n     * @param vToken The market to verify the redeem against\\n     * @param redeemer The account which would redeem the tokens\\n     * @param redeemTokens The number of vTokens to exchange for the underlying asset in the market\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external override {\\n        _checkActionPauseState(vToken, Action.REDEEM);\\n\\n        _checkRedeemAllowed(vToken, redeemer, redeemTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, redeemer);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates redeem, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being redeemed\\n     * @param redeemer The address redeeming the tokens\\n     * @param redeemAmount The amount of the underlying asset being redeemed\\n     * @param redeemTokens The number of tokens being redeemed\\n     */\\n    function redeemVerify(address vToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(redeemer, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates repayBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being repaid\\n     * @param payer The address repaying the borrow\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     */\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer, // solhint-disable-line no-unused-vars\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 borrowerIndex // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates liquidateBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     * @param seizeTokens The amount of collateral token that will be seized\\n     */\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenBorrowed);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenBorrowed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates seize, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param seizeTokens The number of collateral tokens to seize\\n     */\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenCollateral);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenCollateral);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates transfer, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being transferred\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function transferVerify(address vToken, address src, address dst, uint256 transferTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(src, vToken);\\n            prime.accrueInterestAndUpdateScore(dst, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to borrow the underlying asset of the given market\\n     * @param vToken The market to verify the borrow against\\n     * @param borrower The account which would borrow the asset\\n     * @param borrowAmount The amount of underlying the account would borrow\\n     * @custom:error ActionPaused error is thrown if borrowing is paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if there is not enough collateral to borrow\\n     * @custom:error BorrowCapExceeded is thrown if the borrow cap will be exceeded should this borrow succeed\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted if vToken is enabled as collateral, otherwise only vToken\\n     */\\n    /// disable-eslint\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external override {\\n        _checkActionPauseState(vToken, Action.BORROW);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (!markets[vToken].accountMembership[borrower]) {\\n            // only vTokens may call borrowAllowed if borrower not in market\\n            _checkSenderIs(vToken);\\n\\n            // attempt to add borrower to the market or revert\\n            _addToMarket(VToken(msg.sender), borrower);\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (oracle.getUnderlyingPrice(vToken) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 borrowCap = borrowCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (borrowCap != type(uint256).max) {\\n            uint256 totalBorrows = VToken(vToken).totalBorrows();\\n            uint256 badDebt = VToken(vToken).badDebt();\\n            uint256 nextTotalBorrows = totalBorrows + borrowAmount + badDebt;\\n            if (nextTotalBorrows > borrowCap) {\\n                revert BorrowCapExceeded(vToken, borrowCap);\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            borrower,\\n            VToken(vToken),\\n            0,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n\\n        Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates borrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset whose underlying is being borrowed\\n     * @param borrower The address borrowing the underlying\\n     * @param borrowAmount The amount of the underlying asset requested to borrow\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function borrowVerify(address vToken, address borrower, uint256 borrowAmount) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to repay a borrow in the given market\\n     * @param vToken The market to verify the repay against\\n     * @param borrower The account which would borrowed the asset\\n     * @custom:error ActionPaused error is thrown if repayments are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:access Not restricted\\n     */\\n    function preRepayHook(address vToken, address borrower) external override {\\n        _checkActionPauseState(vToken, Action.REPAY);\\n\\n        oracle.updatePrice(vToken);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the liquidation should be allowed to occur\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param borrower The address of the borrower\\n     * @param repayAmount The amount of underlying being repaid\\n     * @param skipLiquidityCheck Allows the borrow to be liquidated regardless of the account liquidity\\n     * @custom:error ActionPaused error is thrown if liquidations are paused in this market\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error TooMuchRepay error is thrown if the liquidator is trying to repay more than allowed by close factor\\n     * @custom:error MinimalCollateralViolated is thrown if the users' total collateral is lower than the threshold for non-batch liquidations\\n     * @custom:error InsufficientShortfall is thrown when trying to liquidate a healthy account\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     */\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        // Pause Action.LIQUIDATE on BORROWED TOKEN to prevent liquidating it.\\n        // If we want to pause liquidating to vTokenCollateral, we should pause\\n        // Action.SEIZE on it\\n        _checkActionPauseState(vTokenBorrowed, Action.LIQUIDATE);\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(address(vTokenBorrowed));\\n        }\\n        if (!markets[vTokenCollateral].isListed) {\\n            revert MarketNotListed(address(vTokenCollateral));\\n        }\\n\\n        uint256 borrowBalance = VToken(vTokenBorrowed).borrowBalanceStored(borrower);\\n\\n        /* Allow accounts to be liquidated if it is a forced liquidation */\\n        if (skipLiquidityCheck || isForcedLiquidationEnabled[vTokenBorrowed]) {\\n            if (repayAmount > borrowBalance) {\\n                revert TooMuchRepay();\\n            }\\n            return;\\n        }\\n\\n        /* The borrower must have shortfall and collateral > threshold in order to be liquidatable */\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral <= minLiquidatableCollateral) {\\n            /* The liquidator should use either liquidateAccount or healAccount */\\n            revert MinimalCollateralViolated(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        /* The liquidator may not repay more than what is allowed by the closeFactor */\\n        uint256 maxClose = mul_ScalarTruncate(Exp({ mantissa: closeFactorMantissa }), borrowBalance);\\n        if (repayAmount > maxClose) {\\n            revert TooMuchRepay();\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the seizing of assets should be allowed to occur\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param seizerContract Contract that tries to seize the asset (either borrowed vToken or Comptroller)\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @custom:error ActionPaused error is thrown if seizing this type of collateral is paused\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error ComptrollerMismatch error is when seizer contract or seized asset belong to different pools\\n     * @custom:access Not restricted\\n     */\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address seizerContract,\\n        address liquidator,\\n        address borrower\\n    ) external override {\\n        // Pause Action.SEIZE on COLLATERAL to prevent seizing it.\\n        // If we want to pause liquidating vTokenBorrowed, we should pause\\n        // Action.LIQUIDATE on it\\n        _checkActionPauseState(vTokenCollateral, Action.SEIZE);\\n\\n        Market storage market = markets[vTokenCollateral];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(vTokenCollateral);\\n        }\\n\\n        if (seizerContract == address(this)) {\\n            // If Comptroller is the seizer, just check if collateral's comptroller\\n            // is equal to the current address\\n            if (address(VToken(vTokenCollateral).comptroller()) != address(this)) {\\n                revert ComptrollerMismatch();\\n            }\\n        } else {\\n            // If the seizer is not the Comptroller, check that the seizer is a\\n            // listed market, and that the markets' comptrollers match\\n            if (!markets[seizerContract].isListed) {\\n                revert MarketNotListed(seizerContract);\\n            }\\n            if (VToken(vTokenCollateral).comptroller() != VToken(seizerContract).comptroller()) {\\n                revert ComptrollerMismatch();\\n            }\\n        }\\n\\n        if (!market.accountMembership[borrower]) {\\n            revert MarketNotCollateral(vTokenCollateral, borrower);\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vTokenCollateral);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, borrower);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, liquidator);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to transfer tokens in the given market\\n     * @param vToken The market to verify the transfer against\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external override {\\n        _checkActionPauseState(vToken, Action.TRANSFER);\\n\\n        // Currently the only consideration is whether or not\\n        //  the src is allowed to redeem this many tokens\\n        _checkRedeemAllowed(vToken, src, transferTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, src);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, dst);\\n        }\\n    }\\n\\n    /*** Pool-level operations ***/\\n\\n    /**\\n     * @notice Seizes all the remaining collateral, makes msg.sender repay the existing\\n     *   borrows, and treats the rest of the debt as bad debt (for each market).\\n     *   The sender has to repay a certain percentage of the debt, computed as\\n     *   collateral / (borrows * liquidationIncentive).\\n     * @param user account to heal\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for healing\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function healAccount(address user) external {\\n        VToken[] memory userAssets = getAssetsIn(user);\\n        uint256 userAssetsCount = userAssets.length;\\n\\n        address liquidator = msg.sender;\\n        {\\n            ResilientOracleInterface oracle_ = oracle;\\n            // We need all user's markets to be fresh for the computations to be correct\\n            for (uint256 i; i < userAssetsCount; ++i) {\\n                userAssets[i].accrueInterest();\\n                oracle_.updatePrice(address(userAssets[i]));\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(user, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        // percentage = collateral / (borrows * liquidation incentive)\\n        Exp memory collateral = Exp({ mantissa: snapshot.totalCollateral });\\n        Exp memory scaledBorrows = mul_(\\n            Exp({ mantissa: snapshot.borrows }),\\n            Exp({ mantissa: liquidationIncentiveMantissa })\\n        );\\n\\n        Exp memory percentage = div_(collateral, scaledBorrows);\\n        if (lessThanExp(Exp({ mantissa: MANTISSA_ONE }), percentage)) {\\n            revert CollateralExceedsThreshold(scaledBorrows.mantissa, collateral.mantissa);\\n        }\\n\\n        for (uint256 i; i < userAssetsCount; ++i) {\\n            VToken market = userAssets[i];\\n\\n            (uint256 tokens, uint256 borrowBalance, ) = _safeGetAccountSnapshot(market, user);\\n            uint256 repaymentAmount = mul_ScalarTruncate(percentage, borrowBalance);\\n\\n            // Seize the entire collateral\\n            if (tokens != 0) {\\n                market.seize(liquidator, user, tokens);\\n            }\\n            // Repay a certain percentage of the borrow, forgive the rest\\n            if (borrowBalance != 0) {\\n                market.healBorrow(liquidator, user, repaymentAmount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Liquidates all borrows of the borrower. Callable only if the collateral is less than\\n     *   a predefined threshold, and the account collateral can be seized to cover all borrows. If\\n     *   the collateral is higher than the threshold, use regular liquidations. If the collateral is\\n     *   below the threshold, and the account is insolvent, use healAccount.\\n     * @param borrower the borrower address\\n     * @param orders an array of liquidation orders\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for a batch liquidation\\n     * @custom:error InsufficientCollateral error is thrown when there is not enough collateral to cover the debt\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function liquidateAccount(address borrower, LiquidationOrder[] calldata orders) external {\\n        // We will accrue interest and update the oracle prices later during the liquidation\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            // You should use the regular vToken.liquidateBorrow(...) call\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        uint256 collateralToSeize = mul_ScalarTruncate(\\n            Exp({ mantissa: liquidationIncentiveMantissa }),\\n            snapshot.borrows\\n        );\\n        if (collateralToSeize >= snapshot.totalCollateral) {\\n            // There is not enough collateral to seize. Use healBorrow to repay some part of the borrow\\n            // and record bad debt.\\n            revert InsufficientCollateral(collateralToSeize, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        uint256 ordersCount = orders.length;\\n\\n        _ensureMaxLoops(ordersCount / 2);\\n\\n        for (uint256 i; i < ordersCount; ++i) {\\n            if (!markets[address(orders[i].vTokenBorrowed)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenBorrowed));\\n            }\\n            if (!markets[address(orders[i].vTokenCollateral)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenCollateral));\\n            }\\n\\n            LiquidationOrder calldata order = orders[i];\\n            order.vTokenBorrowed.forceLiquidateBorrow(\\n                msg.sender,\\n                borrower,\\n                order.repayAmount,\\n                order.vTokenCollateral,\\n                true\\n            );\\n        }\\n\\n        VToken[] memory borrowMarkets = getAssetsIn(borrower);\\n        uint256 marketsCount = borrowMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            (, uint256 borrowBalance, ) = _safeGetAccountSnapshot(borrowMarkets[i], borrower);\\n            require(borrowBalance == 0, \\\"Nonzero borrow balance after liquidation\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets the closeFactor to use when liquidating borrows\\n     * @param newCloseFactorMantissa New close factor, scaled by 1e18\\n     * @custom:event Emits NewCloseFactor on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCloseFactor(uint256 newCloseFactorMantissa) external {\\n        _checkAccessAllowed(\\\"setCloseFactor(uint256)\\\");\\n        require(MAX_CLOSE_FACTOR_MANTISSA >= newCloseFactorMantissa, \\\"Close factor greater than maximum close factor\\\");\\n        require(MIN_CLOSE_FACTOR_MANTISSA <= newCloseFactorMantissa, \\\"Close factor smaller than minimum close factor\\\");\\n\\n        uint256 oldCloseFactorMantissa = closeFactorMantissa;\\n        closeFactorMantissa = newCloseFactorMantissa;\\n        emit NewCloseFactor(oldCloseFactorMantissa, newCloseFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Sets the collateralFactor for a market\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param vToken The market to set the factor on\\n     * @param newCollateralFactorMantissa The new collateral factor, scaled by 1e18\\n     * @param newLiquidationThresholdMantissa The new liquidation threshold, scaled by 1e18\\n     * @custom:event Emits NewCollateralFactor when collateral factor is updated\\n     *    and NewLiquidationThreshold when liquidation threshold is updated\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InvalidCollateralFactor error is thrown when collateral factor is too high\\n     * @custom:error InvalidLiquidationThreshold error is thrown when liquidation threshold is lower than collateral factor\\n     * @custom:error PriceError is thrown when the oracle returns an invalid price for the asset\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCollateralFactor(\\n        VToken vToken,\\n        uint256 newCollateralFactorMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    ) external {\\n        _checkAccessAllowed(\\\"setCollateralFactor(address,uint256,uint256)\\\");\\n\\n        // Verify market is listed\\n        Market storage market = markets[address(vToken)];\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Check collateral factor <= 0.9\\n        if (newCollateralFactorMantissa > MAX_COLLATERAL_FACTOR_MANTISSA) {\\n            revert InvalidCollateralFactor();\\n        }\\n\\n        // Ensure that liquidation threshold <= 1\\n        if (newLiquidationThresholdMantissa > MANTISSA_ONE) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // Ensure that liquidation threshold >= CF\\n        if (newLiquidationThresholdMantissa < newCollateralFactorMantissa) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // If collateral factor != 0, fail if price == 0\\n        if (newCollateralFactorMantissa != 0 && oracle.getUnderlyingPrice(address(vToken)) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 oldCollateralFactorMantissa = market.collateralFactorMantissa;\\n        if (newCollateralFactorMantissa != oldCollateralFactorMantissa) {\\n            market.collateralFactorMantissa = newCollateralFactorMantissa;\\n            emit NewCollateralFactor(vToken, oldCollateralFactorMantissa, newCollateralFactorMantissa);\\n        }\\n\\n        uint256 oldLiquidationThresholdMantissa = market.liquidationThresholdMantissa;\\n        if (newLiquidationThresholdMantissa != oldLiquidationThresholdMantissa) {\\n            market.liquidationThresholdMantissa = newLiquidationThresholdMantissa;\\n            emit NewLiquidationThreshold(vToken, oldLiquidationThresholdMantissa, newLiquidationThresholdMantissa);\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets liquidationIncentive\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newLiquidationIncentiveMantissa New liquidationIncentive scaled by 1e18\\n     * @custom:event Emits NewLiquidationIncentive on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setLiquidationIncentive(uint256 newLiquidationIncentiveMantissa) external {\\n        require(newLiquidationIncentiveMantissa >= MANTISSA_ONE, \\\"liquidation incentive should be greater than 1e18\\\");\\n\\n        _checkAccessAllowed(\\\"setLiquidationIncentive(uint256)\\\");\\n\\n        // Save current value for use in log\\n        uint256 oldLiquidationIncentiveMantissa = liquidationIncentiveMantissa;\\n\\n        // Set liquidation incentive to new incentive\\n        liquidationIncentiveMantissa = newLiquidationIncentiveMantissa;\\n\\n        // Emit event with old incentive, new incentive\\n        emit NewLiquidationIncentive(oldLiquidationIncentiveMantissa, newLiquidationIncentiveMantissa);\\n    }\\n\\n    /**\\n     * @notice Add the market to the markets mapping and set it as listed\\n     * @dev Only callable by the PoolRegistry\\n     * @param vToken The address of the market (token) to list\\n     * @custom:error MarketAlreadyListed is thrown if the market is already listed in this pool\\n     * @custom:access Only PoolRegistry\\n     */\\n    function supportMarket(VToken vToken) external {\\n        _checkSenderIs(poolRegistry);\\n\\n        if (markets[address(vToken)].isListed) {\\n            revert MarketAlreadyListed(address(vToken));\\n        }\\n\\n        require(vToken.isVToken(), \\\"Comptroller: Invalid vToken\\\"); // Sanity check to make sure its really a VToken\\n\\n        Market storage newMarket = markets[address(vToken)];\\n        newMarket.isListed = true;\\n        newMarket.collateralFactorMantissa = 0;\\n        newMarket.liquidationThresholdMantissa = 0;\\n\\n        _addMarket(address(vToken));\\n\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            rewardsDistributors[i].initializeMarket(address(vToken));\\n        }\\n\\n        emit MarketSupported(vToken);\\n    }\\n\\n    /**\\n     * @notice Set the given borrow caps for the given vToken markets. Borrowing that brings total borrows to or above borrow cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A borrow cap of type(uint256).max corresponds to unlimited borrowing.\\n     * @dev Borrow caps smaller than the current total borrows are accepted. This way, new borrows will not be allowed\\n            until the total borrows amount goes below the new borrow cap\\n     * @param vTokens The addresses of the markets (tokens) to change the borrow caps for\\n     * @param newBorrowCaps The new borrow cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited borrowing.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketBorrowCaps(VToken[] calldata vTokens, uint256[] calldata newBorrowCaps) external {\\n        _checkAccessAllowed(\\\"setMarketBorrowCaps(address[],uint256[])\\\");\\n\\n        uint256 numMarkets = vTokens.length;\\n        uint256 numBorrowCaps = newBorrowCaps.length;\\n\\n        require(numMarkets != 0 && numMarkets == numBorrowCaps, \\\"invalid input\\\");\\n\\n        _ensureMaxLoops(numMarkets);\\n\\n        for (uint256 i; i < numMarkets; ++i) {\\n            borrowCaps[address(vTokens[i])] = newBorrowCaps[i];\\n            emit NewBorrowCap(vTokens[i], newBorrowCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given supply caps for the given vToken markets. Supply that brings total Supply to or above supply cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A supply cap of type(uint256).max corresponds to unlimited supply.\\n     * @dev Supply caps smaller than the current total supplies are accepted. This way, new supplies will not be allowed\\n            until the total supplies amount goes below the new supply cap\\n     * @param vTokens The addresses of the markets (tokens) to change the supply caps for\\n     * @param newSupplyCaps The new supply cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited supply.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketSupplyCaps(VToken[] calldata vTokens, uint256[] calldata newSupplyCaps) external {\\n        _checkAccessAllowed(\\\"setMarketSupplyCaps(address[],uint256[])\\\");\\n        uint256 vTokensCount = vTokens.length;\\n\\n        require(vTokensCount != 0, \\\"invalid number of markets\\\");\\n        require(vTokensCount == newSupplyCaps.length, \\\"invalid number of markets\\\");\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            supplyCaps[address(vTokens[i])] = newSupplyCaps[i];\\n            emit NewSupplyCap(vTokens[i], newSupplyCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Pause/unpause specified actions\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param marketsList Markets to pause/unpause the actions on\\n     * @param actionsList List of action ids to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setActionsPaused(VToken[] calldata marketsList, Action[] calldata actionsList, bool paused) external {\\n        _checkAccessAllowed(\\\"setActionsPaused(address[],uint256[],bool)\\\");\\n\\n        uint256 marketsCount = marketsList.length;\\n        uint256 actionsCount = actionsList.length;\\n\\n        _ensureMaxLoops(marketsCount * actionsCount);\\n\\n        for (uint256 marketIdx; marketIdx < marketsCount; ++marketIdx) {\\n            for (uint256 actionIdx; actionIdx < actionsCount; ++actionIdx) {\\n                _setActionPaused(address(marketsList[marketIdx]), actionsList[actionIdx], paused);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given collateral threshold for non-batch liquidations. Regular liquidations\\n     *   will fail if the collateral amount is less than this threshold. Liquidators should use batch\\n     *   operations like liquidateAccount or healAccount.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newMinLiquidatableCollateral The new min liquidatable collateral (in USD).\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMinLiquidatableCollateral(uint256 newMinLiquidatableCollateral) external {\\n        _checkAccessAllowed(\\\"setMinLiquidatableCollateral(uint256)\\\");\\n\\n        uint256 oldMinLiquidatableCollateral = minLiquidatableCollateral;\\n        minLiquidatableCollateral = newMinLiquidatableCollateral;\\n        emit NewMinLiquidatableCollateral(oldMinLiquidatableCollateral, newMinLiquidatableCollateral);\\n    }\\n\\n    /**\\n     * @notice Add a new RewardsDistributor and initialize it with all markets. We can add several RewardsDistributor\\n     * contracts with the same rewardToken, and there could be overlaping among them considering the last reward slot (block or second)\\n     * @dev Only callable by the admin\\n     * @param _rewardsDistributor Address of the RewardDistributor contract to add\\n     * @custom:access Only Governance\\n     * @custom:event Emits NewRewardsDistributor with distributor address\\n     */\\n    function addRewardsDistributor(RewardsDistributor _rewardsDistributor) external onlyOwner {\\n        require(!rewardsDistributorExists[address(_rewardsDistributor)], \\\"already exists\\\");\\n\\n        uint256 rewardsDistributorsLen = rewardsDistributors.length;\\n        _ensureMaxLoops(rewardsDistributorsLen + 1);\\n\\n        rewardsDistributors.push(_rewardsDistributor);\\n        rewardsDistributorExists[address(_rewardsDistributor)] = true;\\n\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            _rewardsDistributor.initializeMarket(address(allMarkets[i]));\\n        }\\n\\n        emit NewRewardsDistributor(address(_rewardsDistributor), address(_rewardsDistributor.rewardToken()));\\n    }\\n\\n    /**\\n     * @notice Sets a new price oracle for the Comptroller\\n     * @dev Only callable by the admin\\n     * @param newOracle Address of the new price oracle to set\\n     * @custom:event Emits NewPriceOracle on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when the new oracle address is zero\\n     */\\n    function setPriceOracle(ResilientOracleInterface newOracle) external onlyOwner {\\n        ensureNonzeroAddress(address(newOracle));\\n\\n        ResilientOracleInterface oldOracle = oracle;\\n        oracle = newOracle;\\n        emit NewPriceOracle(oldOracle, newOracle);\\n    }\\n\\n    /**\\n     * @notice Set the for loop iteration limit to avoid DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Sets the prime token contract for the comptroller\\n     * @param _prime Address of the Prime contract\\n     */\\n    function setPrimeToken(IPrime _prime) external onlyOwner {\\n        ensureNonzeroAddress(address(_prime));\\n\\n        emit NewPrimeToken(prime, _prime);\\n        prime = _prime;\\n    }\\n\\n    /**\\n     * @notice Enables forced liquidations for a market. If forced liquidation is enabled,\\n     * borrows in the market may be liquidated regardless of the account liquidity\\n     * @param vTokenBorrowed Borrowed vToken\\n     * @param enable Whether to enable forced liquidations\\n     */\\n    function setForcedLiquidation(address vTokenBorrowed, bool enable) external {\\n        _checkAccessAllowed(\\\"setForcedLiquidation(address,bool)\\\");\\n        ensureNonzeroAddress(vTokenBorrowed);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(vTokenBorrowed);\\n        }\\n\\n        isForcedLiquidationEnabled[vTokenBorrowed] = enable;\\n        emit IsForcedLiquidationEnabledUpdated(vTokenBorrowed, enable);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to liquidation threshold requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of liquidation threshold requirements,\\n     * @return shortfall Account shortfall below liquidation threshold requirements\\n     */\\n    function getAccountLiquidity(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getLiquidationThreshold);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to collateral requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of collateral requirements,\\n     * @return shortfall Account shortfall below collateral requirements\\n     */\\n    function getBorrowingPower(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getCollateralFactor);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine what the account liquidity would be if the given amounts were redeemed/borrowed\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Hypothetical account liquidity in excess of collateral requirements,\\n     * @return shortfall Hypothetical account shortfall below collateral requirements\\n     */\\n    function getHypotheticalAccountLiquidity(\\n        address account,\\n        address vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            account,\\n            VToken(vTokenModify),\\n            redeemTokens,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Return all of the markets\\n     * @dev The automatic getter may be used to access an individual market.\\n     * @return markets The list of market addresses\\n     */\\n    function getAllMarkets() external view override returns (VToken[] memory) {\\n        return allMarkets;\\n    }\\n\\n    /**\\n     * @notice Check if a market is marked as listed (active)\\n     * @param vToken vToken Address for the market to check\\n     * @return listed True if listed otherwise false\\n     */\\n    function isMarketListed(VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].isListed;\\n    }\\n\\n    /*** Assets You Are In ***/\\n\\n    /**\\n     * @notice Returns whether the given account is entered in a given market\\n     * @param account The address of the account to check\\n     * @param vToken The vToken to check\\n     * @return True if the account is in the market specified, otherwise false.\\n     */\\n    function checkMembership(address account, VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].accountMembership[account];\\n    }\\n\\n    /**\\n     * @notice Calculate number of tokens of collateral asset to seize given an underlying amount\\n     * @dev Used in liquidation (called in vToken.liquidateBorrowFresh)\\n     * @param vTokenBorrowed The address of the borrowed vToken\\n     * @param vTokenCollateral The address of the collateral vToken\\n     * @param actualRepayAmount The amount of vTokenBorrowed underlying to convert into vTokenCollateral tokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return tokensToSeize Number of vTokenCollateral tokens to be seized in a liquidation\\n     * @custom:error PriceError if the oracle returns an invalid price\\n     */\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 actualRepayAmount\\n    ) external view override returns (uint256 error, uint256 tokensToSeize) {\\n        /* Read oracle prices for borrowed and collateral markets */\\n        uint256 priceBorrowedMantissa = _safeGetUnderlyingPrice(VToken(vTokenBorrowed));\\n        uint256 priceCollateralMantissa = _safeGetUnderlyingPrice(VToken(vTokenCollateral));\\n\\n        /*\\n         * Get the exchange rate and calculate the number of collateral tokens to seize:\\n         *  seizeAmount = actualRepayAmount * liquidationIncentive * priceBorrowed / priceCollateral\\n         *  seizeTokens = seizeAmount / exchangeRate\\n         *   = actualRepayAmount * (liquidationIncentive * priceBorrowed) / (priceCollateral * exchangeRate)\\n         */\\n        uint256 exchangeRateMantissa = VToken(vTokenCollateral).exchangeRateStored(); // Note: reverts on error\\n        uint256 seizeTokens;\\n        Exp memory numerator;\\n        Exp memory denominator;\\n        Exp memory ratio;\\n\\n        numerator = mul_(Exp({ mantissa: liquidationIncentiveMantissa }), Exp({ mantissa: priceBorrowedMantissa }));\\n        denominator = mul_(Exp({ mantissa: priceCollateralMantissa }), Exp({ mantissa: exchangeRateMantissa }));\\n        ratio = div_(numerator, denominator);\\n\\n        seizeTokens = mul_ScalarTruncate(ratio, actualRepayAmount);\\n\\n        return (NO_ERROR, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Returns reward speed given a vToken\\n     * @param vToken The vToken to get the reward speeds for\\n     * @return rewardSpeeds Array of total supply and borrow speeds and reward token for all reward distributors\\n     */\\n    function getRewardsByMarket(address vToken) external view returns (RewardSpeeds[] memory rewardSpeeds) {\\n        uint256 rewardsDistributorsLength = rewardsDistributors.length;\\n        rewardSpeeds = new RewardSpeeds[](rewardsDistributorsLength);\\n        for (uint256 i; i < rewardsDistributorsLength; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            address rewardToken = address(rewardsDistributor.rewardToken());\\n            rewardSpeeds[i] = RewardSpeeds({\\n                rewardToken: rewardToken,\\n                supplySpeed: rewardsDistributor.rewardTokenSupplySpeeds(vToken),\\n                borrowSpeed: rewardsDistributor.rewardTokenBorrowSpeeds(vToken)\\n            });\\n        }\\n        return rewardSpeeds;\\n    }\\n\\n    /**\\n     * @notice Return all reward distributors for this pool\\n     * @return Array of RewardDistributor addresses\\n     */\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory) {\\n        return rewardsDistributors;\\n    }\\n\\n    /**\\n     * @notice A marker method that returns true for a valid Comptroller contract\\n     * @return Always true\\n     */\\n    function isComptroller() external pure override returns (bool) {\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Update the prices of all the tokens associated with the provided account\\n     * @param account Address of the account to get associated tokens with\\n     */\\n    function updatePrices(address account) public {\\n        VToken[] memory vTokens = getAssetsIn(account);\\n        uint256 vTokensCount = vTokens.length;\\n\\n        ResilientOracleInterface oracle_ = oracle;\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            oracle_.updatePrice(address(vTokens[i]));\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if a certain action is paused on a market\\n     * @param market vToken address\\n     * @param action Action to check\\n     * @return paused True if the action is paused otherwise false\\n     */\\n    function actionPaused(address market, Action action) public view returns (bool) {\\n        return _actionPaused[market][action];\\n    }\\n\\n    /**\\n     * @notice Returns the assets an account has entered\\n     * @param account The address of the account to pull assets for\\n     * @return A list with the assets the account has entered\\n     */\\n    function getAssetsIn(address account) public view returns (VToken[] memory) {\\n        uint256 len;\\n        VToken[] memory _accountAssets = accountAssets[account];\\n        uint256 _accountAssetsLength = _accountAssets.length;\\n\\n        VToken[] memory assetsIn = new VToken[](_accountAssetsLength);\\n\\n        for (uint256 i; i < _accountAssetsLength; ++i) {\\n            Market storage market = markets[address(_accountAssets[i])];\\n            if (market.isListed) {\\n                assetsIn[len] = _accountAssets[i];\\n                ++len;\\n            }\\n        }\\n\\n        assembly {\\n            mstore(assetsIn, len)\\n        }\\n\\n        return assetsIn;\\n    }\\n\\n    /**\\n     * @notice Add the market to the borrower's \\\"assets in\\\" for liquidity calculations\\n     * @param vToken The market to enter\\n     * @param borrower The address of the account to modify\\n     */\\n    function _addToMarket(VToken vToken, address borrower) internal {\\n        _checkActionPauseState(address(vToken), Action.ENTER_MARKET);\\n        Market storage marketToJoin = markets[address(vToken)];\\n\\n        if (!marketToJoin.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (marketToJoin.accountMembership[borrower]) {\\n            // already joined\\n            return;\\n        }\\n\\n        // survived the gauntlet, add to list\\n        // NOTE: we store these somewhat redundantly as a significant optimization\\n        //  this avoids having to iterate through the list for the most common use cases\\n        //  that is, only when we need to perform liquidity checks\\n        //  and not whenever we want to check if an account is in a particular market\\n        marketToJoin.accountMembership[borrower] = true;\\n        accountAssets[borrower].push(vToken);\\n\\n        emit MarketEntered(vToken, borrower);\\n    }\\n\\n    /**\\n     * @notice Internal function to validate that a market hasn't already been added\\n     * and if it hasn't adds it\\n     * @param vToken The market to support\\n     */\\n    function _addMarket(address vToken) internal {\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            if (allMarkets[i] == VToken(vToken)) {\\n                revert MarketAlreadyListed(vToken);\\n            }\\n        }\\n        allMarkets.push(VToken(vToken));\\n        marketsCount = allMarkets.length;\\n        _ensureMaxLoops(marketsCount);\\n    }\\n\\n    /**\\n     * @dev Pause/unpause an action on a market\\n     * @param market Market to pause/unpause the action on\\n     * @param action Action id to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     */\\n    function _setActionPaused(address market, Action action, bool paused) internal {\\n        require(markets[market].isListed, \\\"cannot pause a market that is not listed\\\");\\n        _actionPaused[market][action] = paused;\\n        emit ActionPausedMarket(VToken(market), action, paused);\\n    }\\n\\n    /**\\n     * @dev Internal function to check that vTokens can be safely redeemed for the underlying asset.\\n     * @param vToken Address of the vTokens to redeem\\n     * @param redeemer Account redeeming the tokens\\n     * @param redeemTokens The number of tokens to redeem\\n     */\\n    function _checkRedeemAllowed(address vToken, address redeemer, uint256 redeemTokens) internal {\\n        Market storage market = markets[vToken];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        /* If the redeemer is not 'in' the market, then we can bypass the liquidity check */\\n        if (!market.accountMembership[redeemer]) {\\n            return;\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(redeemer);\\n\\n        /* Otherwise, perform a hypothetical liquidity check to guard against shortfall */\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            redeemer,\\n            VToken(vToken),\\n            redeemTokens,\\n            0,\\n            _getCollateralFactor\\n        );\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n    }\\n\\n    /**\\n     * @notice Get the total collateral, weighted collateral, borrow balance, liquidity, shortfall\\n     * @param account The account to get the snapshot for\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n     *  liquidation threshold. Accepts the address of the vToken and returns the weight as Exp.\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getCurrentLiquiditySnapshot(\\n        address account,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        return _getHypotheticalLiquiditySnapshot(account, VToken(address(0)), 0, 0, weight);\\n    }\\n\\n    /**\\n     * @notice Determine what the supply/borrow balances would be if the given amounts were redeemed/borrowed\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n         liquidation threshold. Accepts the address of the VToken and returns the weight\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getHypotheticalLiquiditySnapshot(\\n        address account,\\n        VToken vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        // For each asset the account is in\\n        VToken[] memory assets = getAssetsIn(account);\\n        uint256 assetsCount = assets.length;\\n\\n        for (uint256 i; i < assetsCount; ++i) {\\n            VToken asset = assets[i];\\n\\n            // Read the balances and exchange rate from the vToken\\n            (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) = _safeGetAccountSnapshot(\\n                asset,\\n                account\\n            );\\n\\n            // Get the normalized price of the asset\\n            Exp memory oraclePrice = Exp({ mantissa: _safeGetUnderlyingPrice(asset) });\\n\\n            // Pre-compute conversion factors from vTokens -> usd\\n            Exp memory vTokenPrice = mul_(Exp({ mantissa: exchangeRateMantissa }), oraclePrice);\\n            Exp memory weightedVTokenPrice = mul_(weight(asset), vTokenPrice);\\n\\n            // weightedCollateral += weightedVTokenPrice * vTokenBalance\\n            snapshot.weightedCollateral = mul_ScalarTruncateAddUInt(\\n                weightedVTokenPrice,\\n                vTokenBalance,\\n                snapshot.weightedCollateral\\n            );\\n\\n            // totalCollateral += vTokenPrice * vTokenBalance\\n            snapshot.totalCollateral = mul_ScalarTruncateAddUInt(vTokenPrice, vTokenBalance, snapshot.totalCollateral);\\n\\n            // borrows += oraclePrice * borrowBalance\\n            snapshot.borrows = mul_ScalarTruncateAddUInt(oraclePrice, borrowBalance, snapshot.borrows);\\n\\n            // Calculate effects of interacting with vTokenModify\\n            if (asset == vTokenModify) {\\n                // redeem effect\\n                // effects += tokensToDenom * redeemTokens\\n                snapshot.effects = mul_ScalarTruncateAddUInt(weightedVTokenPrice, redeemTokens, snapshot.effects);\\n\\n                // borrow effect\\n                // effects += oraclePrice * borrowAmount\\n                snapshot.effects = mul_ScalarTruncateAddUInt(oraclePrice, borrowAmount, snapshot.effects);\\n            }\\n        }\\n\\n        uint256 borrowPlusEffects = snapshot.borrows + snapshot.effects;\\n        // These are safe, as the underflow condition is checked first\\n        unchecked {\\n            if (snapshot.weightedCollateral > borrowPlusEffects) {\\n                snapshot.liquidity = snapshot.weightedCollateral - borrowPlusEffects;\\n                snapshot.shortfall = 0;\\n            } else {\\n                snapshot.liquidity = 0;\\n                snapshot.shortfall = borrowPlusEffects - snapshot.weightedCollateral;\\n            }\\n        }\\n\\n        return snapshot;\\n    }\\n\\n    /**\\n     * @dev Retrieves price from oracle for an asset and checks it is nonzero\\n     * @param asset Address for asset to query price\\n     * @return Underlying price\\n     */\\n    function _safeGetUnderlyingPrice(VToken asset) internal view returns (uint256) {\\n        uint256 oraclePriceMantissa = oracle.getUnderlyingPrice(address(asset));\\n        if (oraclePriceMantissa == 0) {\\n            revert PriceError(address(asset));\\n        }\\n        return oraclePriceMantissa;\\n    }\\n\\n    /**\\n     * @dev Return collateral factor for a market\\n     * @param asset Address for asset\\n     * @return Collateral factor as exponential\\n     */\\n    function _getCollateralFactor(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].collateralFactorMantissa });\\n    }\\n\\n    /**\\n     * @dev Retrieves liquidation threshold for a market as an exponential\\n     * @param asset Address for asset to liquidation threshold\\n     * @return Liquidation threshold as exponential\\n     */\\n    function _getLiquidationThreshold(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].liquidationThresholdMantissa });\\n    }\\n\\n    /**\\n     * @dev Returns supply and borrow balances of user in vToken, reverts on failure\\n     * @param vToken Market to query\\n     * @param user Account address\\n     * @return vTokenBalance Balance of vTokens, the same as vToken.balanceOf(user)\\n     * @return borrowBalance Borrowed amount, including the interest\\n     * @return exchangeRateMantissa Stored exchange rate\\n     */\\n    function _safeGetAccountSnapshot(\\n        VToken vToken,\\n        address user\\n    ) internal view returns (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) {\\n        uint256 err;\\n        (err, vTokenBalance, borrowBalance, exchangeRateMantissa) = vToken.getAccountSnapshot(user);\\n        if (err != 0) {\\n            revert SnapshotError(address(vToken), user);\\n        }\\n        return (vTokenBalance, borrowBalance, exchangeRateMantissa);\\n    }\\n\\n    /// @notice Reverts if the call is not from expectedSender\\n    /// @param expectedSender Expected transaction sender\\n    function _checkSenderIs(address expectedSender) internal view {\\n        if (msg.sender != expectedSender) {\\n            revert UnexpectedSender(expectedSender, msg.sender);\\n        }\\n    }\\n\\n    /// @notice Reverts if a certain action is paused on a market\\n    /// @param market Market to check\\n    /// @param action Action to check\\n    function _checkActionPauseState(address market, Action action) private view {\\n        if (actionPaused(market, action)) {\\n            revert ActionPaused(market, action);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x7c6e1c6264e4681f82a9ac1bcd9155197a930033291ee5561ad97a56006f5e9c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\n\\nenum Action {\\n    MINT,\\n    REDEEM,\\n    BORROW,\\n    REPAY,\\n    SEIZE,\\n    LIQUIDATE,\\n    TRANSFER,\\n    ENTER_MARKET,\\n    EXIT_MARKET\\n}\\n\\n/**\\n * @title ComptrollerInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract.\\n */\\ninterface ComptrollerInterface {\\n    /*** Assets You Are In ***/\\n\\n    function enterMarkets(address[] calldata vTokens) external returns (uint256[] memory);\\n\\n    function exitMarket(address vToken) external returns (uint256);\\n\\n    /*** Policy Hooks ***/\\n\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external;\\n\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external;\\n\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external;\\n\\n    function preRepayHook(address vToken, address borrower) external;\\n\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external;\\n\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower\\n    ) external;\\n\\n    function borrowVerify(address vToken, address borrower, uint borrowAmount) external;\\n\\n    function mintVerify(address vToken, address minter, uint mintAmount, uint mintTokens) external;\\n\\n    function redeemVerify(address vToken, address redeemer, uint redeemAmount, uint redeemTokens) external;\\n\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer,\\n        address borrower,\\n        uint repayAmount,\\n        uint borrowerIndex\\n    ) external;\\n\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address liquidator,\\n        address borrower,\\n        uint repayAmount,\\n        uint seizeTokens\\n    ) external;\\n\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower,\\n        uint seizeTokens\\n    ) external;\\n\\n    function transferVerify(address vToken, address src, address dst, uint transferTokens) external;\\n\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external;\\n\\n    function isComptroller() external view returns (bool);\\n\\n    /*** Liquidity/Liquidation Calculations ***/\\n\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 repayAmount\\n    ) external view returns (uint256, uint256);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function actionPaused(address market, Action action) external view returns (bool);\\n}\\n\\n/**\\n * @title ComptrollerViewInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract, including only some util view functions.\\n */\\ninterface ComptrollerViewInterface {\\n    function markets(address) external view returns (bool, uint256);\\n\\n    function oracle() external view returns (ResilientOracleInterface);\\n\\n    function getAssetsIn(address) external view returns (VToken[] memory);\\n\\n    function closeFactorMantissa() external view returns (uint256);\\n\\n    function liquidationIncentiveMantissa() external view returns (uint256);\\n\\n    function minLiquidatableCollateral() external view returns (uint256);\\n\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function borrowCaps(address) external view returns (uint256);\\n\\n    function supplyCaps(address) external view returns (uint256);\\n\\n    function approvedDelegates(address user, address delegate) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xcbf7f9977472650c61345b7cbde23e81f626e1f8863bab4c6ce3dacfc7604919\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\nimport { Action } from \\\"./ComptrollerInterface.sol\\\";\\n\\n/**\\n * @title ComptrollerStorage\\n * @author Venus\\n * @notice Storage layout for the `Comptroller` contract.\\n */\\ncontract ComptrollerStorage {\\n    struct LiquidationOrder {\\n        VToken vTokenCollateral;\\n        VToken vTokenBorrowed;\\n        uint256 repayAmount;\\n    }\\n\\n    struct AccountLiquiditySnapshot {\\n        uint256 totalCollateral;\\n        uint256 weightedCollateral;\\n        uint256 borrows;\\n        uint256 effects;\\n        uint256 liquidity;\\n        uint256 shortfall;\\n    }\\n\\n    struct RewardSpeeds {\\n        address rewardToken;\\n        uint256 supplySpeed;\\n        uint256 borrowSpeed;\\n    }\\n\\n    struct Market {\\n        // Whether or not this market is listed\\n        bool isListed;\\n        //  Multiplier representing the most one can borrow against their collateral in this market.\\n        //  For instance, 0.9 to allow borrowing 90% of collateral value.\\n        //  Must be between 0 and 1, and stored as a mantissa.\\n        uint256 collateralFactorMantissa;\\n        //  Multiplier representing the collateralization after which the borrow is eligible\\n        //  for liquidation. For instance, 0.8 liquidate when the borrow is 80% of collateral\\n        //  value. Must be between 0 and collateral factor, stored as a mantissa.\\n        uint256 liquidationThresholdMantissa;\\n        // Per-market mapping of \\\"accounts in this asset\\\"\\n        mapping(address => bool) accountMembership;\\n    }\\n\\n    /**\\n     * @notice Oracle which gives the price of any given asset\\n     */\\n    ResilientOracleInterface public oracle;\\n\\n    /**\\n     * @notice Multiplier used to calculate the maximum repayAmount when liquidating a borrow\\n     */\\n    uint256 public closeFactorMantissa;\\n\\n    /**\\n     * @notice Multiplier representing the discount on collateral that a liquidator receives\\n     */\\n    uint256 public liquidationIncentiveMantissa;\\n\\n    /**\\n     * @notice Per-account mapping of \\\"assets you are in\\\"\\n     */\\n    mapping(address => VToken[]) public accountAssets;\\n\\n    /**\\n     * @notice Official mapping of vTokens -> Market metadata\\n     * @dev Used e.g. to determine if a market is supported\\n     */\\n    mapping(address => Market) public markets;\\n\\n    /// @notice A list of all markets\\n    VToken[] public allMarkets;\\n\\n    /// @notice Borrow caps enforced by borrowAllowed for each vToken address. Defaults to zero which restricts borrowing.\\n    mapping(address => uint256) public borrowCaps;\\n\\n    /// @notice Minimal collateral required for regular (non-batch) liquidations\\n    uint256 public minLiquidatableCollateral;\\n\\n    /// @notice Supply caps enforced by mintAllowed for each vToken address. Defaults to zero which corresponds to minting not allowed\\n    mapping(address => uint256) public supplyCaps;\\n\\n    /// @notice True if a certain action is paused on a certain market\\n    mapping(address => mapping(Action => bool)) internal _actionPaused;\\n\\n    // List of Reward Distributors added\\n    RewardsDistributor[] internal rewardsDistributors;\\n\\n    // Used to check if rewards distributor is added\\n    mapping(address => bool) internal rewardsDistributorExists;\\n\\n    /// @notice Flag indicating whether forced liquidation enabled for a market\\n    mapping(address => bool) public isForcedLiquidationEnabled;\\n\\n    uint256 internal constant NO_ERROR = 0;\\n\\n    // closeFactorMantissa must be strictly greater than this value\\n    uint256 internal constant MIN_CLOSE_FACTOR_MANTISSA = 0.05e18; // 0.05\\n\\n    // closeFactorMantissa must not exceed this value\\n    uint256 internal constant MAX_CLOSE_FACTOR_MANTISSA = 0.9e18; // 0.9\\n\\n    // No collateralFactorMantissa may exceed this value\\n    uint256 internal constant MAX_COLLATERAL_FACTOR_MANTISSA = 0.95e18; // 0.95\\n\\n    /// Prime token address\\n    IPrime public prime;\\n\\n    /// @notice Whether the delegate is allowed to borrow or redeem on behalf of the user\\n    //mapping(address user => mapping (address delegate => bool approved)) public approvedDelegates;\\n    mapping(address => mapping(address => bool)) public approvedDelegates;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4df44cb65ac152bac2be4b4545430e703005a74a55b72e144100b16421bd8bfd\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title TokenErrorReporter\\n * @author Venus\\n * @notice Errors that can be thrown by the `VToken` contract.\\n */\\ncontract TokenErrorReporter {\\n    uint256 public constant NO_ERROR = 0; // support legacy return codes\\n\\n    error TransferNotAllowed();\\n\\n    error MintFreshnessCheck();\\n\\n    error RedeemFreshnessCheck();\\n    error RedeemTransferOutNotPossible();\\n\\n    error BorrowFreshnessCheck();\\n    error BorrowCashNotAvailable();\\n    error DelegateNotApproved();\\n\\n    error RepayBorrowFreshnessCheck();\\n\\n    error HealBorrowUnauthorized();\\n    error ForceLiquidateBorrowUnauthorized();\\n\\n    error LiquidateFreshnessCheck();\\n    error LiquidateCollateralFreshnessCheck();\\n    error LiquidateAccrueCollateralInterestFailed(uint256 errorCode);\\n    error LiquidateLiquidatorIsBorrower();\\n    error LiquidateCloseAmountIsZero();\\n    error LiquidateCloseAmountIsUintMax();\\n\\n    error LiquidateSeizeLiquidatorIsBorrower();\\n\\n    error ProtocolSeizeShareTooBig();\\n\\n    error SetReserveFactorFreshCheck();\\n    error SetReserveFactorBoundsCheck();\\n\\n    error AddReservesFactorFreshCheck(uint256 actualAddAmount);\\n\\n    error ReduceReservesFreshCheck();\\n    error ReduceReservesCashNotAvailable();\\n    error ReduceReservesCashValidation();\\n\\n    error SetInterestRateModelFreshCheck();\\n}\\n\",\"keccak256\":\"0x7a7ced1caaac2d9242659ebd50b99f308c725ce958ac9e11f7ada404b1d97a7b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { EXP_SCALE as EXP_SCALE_, MANTISSA_ONE as MANTISSA_ONE_ } from \\\"./lib/constants.sol\\\";\\n\\n/**\\n * @title Exponential module for storing fixed-precision decimals\\n * @author Compound\\n * @notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.\\n *         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:\\n *         `Exp({mantissa: 5100000000000000000})`.\\n */\\ncontract ExponentialNoError {\\n    struct Exp {\\n        uint256 mantissa;\\n    }\\n\\n    struct Double {\\n        uint256 mantissa;\\n    }\\n\\n    uint256 internal constant EXP_SCALE = EXP_SCALE_;\\n    uint256 internal constant DOUBLE_SCALE = 1e36;\\n    uint256 internal constant HALF_EXP_SCALE = EXP_SCALE / 2;\\n    uint256 internal constant MANTISSA_ONE = MANTISSA_ONE_;\\n\\n    /**\\n     * @dev Truncates the given exp to a whole number value.\\n     *      For example, truncate(Exp{mantissa: 15 * EXP_SCALE}) = 15\\n     */\\n    function truncate(Exp memory exp) internal pure returns (uint256) {\\n        // Note: We are not using careful math here as we're performing a division that cannot fail\\n        return exp.mantissa / EXP_SCALE;\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, then truncate to return an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncate(Exp memory a, uint256 scalar) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return truncate(product);\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncateAddUInt(Exp memory a, uint256 scalar, uint256 addend) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return add_(truncate(product), addend);\\n    }\\n\\n    /**\\n     * @dev Checks if first Exp is less than second Exp.\\n     */\\n    function lessThanExp(Exp memory left, Exp memory right) internal pure returns (bool) {\\n        return left.mantissa < right.mantissa;\\n    }\\n\\n    function safe224(uint256 n, string memory errorMessage) internal pure returns (uint224) {\\n        require(n <= type(uint224).max, errorMessage);\\n        return uint224(n);\\n    }\\n\\n    function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) {\\n        require(n <= type(uint32).max, errorMessage);\\n        return uint32(n);\\n    }\\n\\n    function add_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a + b;\\n    }\\n\\n    function sub_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a - b;\\n    }\\n\\n    function mul_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b.mantissa) / EXP_SCALE });\\n    }\\n\\n    function mul_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / EXP_SCALE;\\n    }\\n\\n    function mul_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b.mantissa) / DOUBLE_SCALE });\\n    }\\n\\n    function mul_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / DOUBLE_SCALE;\\n    }\\n\\n    function mul_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a * b;\\n    }\\n\\n    function div_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(mul_(a.mantissa, EXP_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, EXP_SCALE), b.mantissa);\\n    }\\n\\n    function div_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a.mantissa, DOUBLE_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, DOUBLE_SCALE), b.mantissa);\\n    }\\n\\n    function div_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a / b;\\n    }\\n\\n    function fraction(uint256 a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a, DOUBLE_SCALE), b) });\\n    }\\n}\\n\",\"keccak256\":\"0x8afbe8a24fe3539c124e718681ed3dcebd24c40dd53095786c0155998213b9b0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title Compound's InterestRateModel Interface\\n * @author Compound\\n */\\nabstract contract InterestRateModel {\\n    /**\\n     * @notice Calculates the current borrow interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getBorrowRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Calculates the current supply interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param reserveFactorMantissa The current reserve factor the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getSupplyRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 reserveFactorMantissa,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is an InterestRateModel contract (for inspection)\\n     * @return Always true\\n     */\\n    function isInterestRateModel() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0xc4fda1ab75ebe4b187b707c4f10c58780f343cf343c537f641dc75d3cd28ab51\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title MaxLoopsLimitHelper\\n * @author Venus\\n * @notice Abstract contract used to avoid collection with too many items that would generate gas errors and DoS.\\n */\\nabstract contract MaxLoopsLimitHelper {\\n    // Limit for the loops to avoid the DOS\\n    uint256 public maxLoopsLimit;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when max loops limit is set\\n    event MaxLoopsLimitUpdated(uint256 oldMaxLoopsLimit, uint256 newmaxLoopsLimit);\\n\\n    /// @notice Thrown an error on maxLoopsLimit exceeds for any loop\\n    error MaxLoopsLimitExceeded(uint256 loopsLimit, uint256 requiredLoops);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function _setMaxLoopsLimit(uint256 limit) internal {\\n        require(limit > maxLoopsLimit, \\\"Comptroller: Invalid maxLoopsLimit\\\");\\n\\n        uint256 oldMaxLoopsLimit = maxLoopsLimit;\\n        maxLoopsLimit = limit;\\n\\n        emit MaxLoopsLimitUpdated(oldMaxLoopsLimit, limit);\\n    }\\n\\n    /**\\n     * @notice Compare the maxLoopsLimit with number of the times loop iterate\\n     * @param len Length of the loops iterate\\n     * @custom:error MaxLoopsLimitExceeded error is thrown when loops length exceeds maxLoopsLimit\\n     */\\n    function _ensureMaxLoops(uint256 len) internal view {\\n        if (len > maxLoopsLimit) {\\n            revert MaxLoopsLimitExceeded(maxLoopsLimit, len);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x4c25e30635485d162177effa384eee51768b0141a567a0da16ff6ad673274166\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\n\\nimport { ExponentialNoError } from \\\"../ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"../VToken.sol\\\";\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"../MaxLoopsLimitHelper.sol\\\";\\nimport { RewardsDistributorStorage } from \\\"./RewardsDistributorStorage.sol\\\";\\n\\n/**\\n * @title `RewardsDistributor`\\n * @author Venus\\n * @notice Contract used to configure, track and distribute rewards to users based on their actions (borrows and supplies) in the protocol.\\n * Users can receive additional rewards through a `RewardsDistributor`. Each `RewardsDistributor` proxy is initialized with a specific reward\\n * token and `Comptroller`, which can then distribute the reward token to users that supply or borrow in the associated pool.\\n * Authorized users can set the reward token borrow and supply speeds for each market in the pool. This sets a fixed amount of reward\\n * token to be released each slot (block or second) for borrowers and suppliers, which is distributed based on a user\\u2019s percentage of the borrows or supplies\\n * respectively. The owner can also set up reward distributions to contributor addresses (distinct from suppliers and borrowers) by setting\\n * their contributor reward token speed, which similarly allocates a fixed amount of reward token per slot (block or second).\\n *\\n * The owner has the ability to transfer any amount of reward tokens held by the contract to any other address. Rewards are not distributed\\n * automatically and must be claimed by a user calling `claimRewardToken()`. Users should be aware that it is up to the owner and other centralized\\n * entities to ensure that the `RewardsDistributor` holds enough tokens to distribute the accumulated rewards of users and contributors.\\n */\\ncontract RewardsDistributor is\\n    ExponentialNoError,\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    MaxLoopsLimitHelper,\\n    RewardsDistributorStorage,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    /// @notice The initial REWARD TOKEN index for a market\\n    uint224 public constant INITIAL_INDEX = 1e36;\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a supplier\\n    event DistributedSupplierRewardToken(\\n        VToken indexed vToken,\\n        address indexed supplier,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenSupplyIndex\\n    );\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a borrower\\n    event DistributedBorrowerRewardToken(\\n        VToken indexed vToken,\\n        address indexed borrower,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenBorrowIndex\\n    );\\n\\n    /// @notice Emitted when a new supply-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenSupplySpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when a new borrow-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenBorrowSpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when REWARD TOKEN is granted by admin\\n    event RewardTokenGranted(address indexed recipient, uint256 amount);\\n\\n    /// @notice Emitted when a new REWARD TOKEN speed is set for a contributor\\n    event ContributorRewardTokenSpeedUpdated(address indexed contributor, uint256 newSpeed);\\n\\n    /// @notice Emitted when a market is initialized\\n    event MarketInitialized(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token supply index is updated\\n    event RewardTokenSupplyIndexUpdated(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token borrow index is updated\\n    event RewardTokenBorrowIndexUpdated(address indexed vToken, Exp marketBorrowIndex);\\n\\n    /// @notice Emitted when a reward for contributor is updated\\n    event ContributorRewardsUpdated(address indexed contributor, uint256 rewardAccrued);\\n\\n    /// @notice Emitted when a reward token last rewarding block for supply is updated\\n    event SupplyLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding block for borrow is updated\\n    event BorrowLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for supply is updated\\n    event SupplyLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for borrow is updated\\n    event BorrowLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    modifier onlyComptroller() {\\n        require(address(comptroller) == msg.sender, \\\"Only comptroller can call this function\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice RewardsDistributor initializer\\n     * @dev Initializes the deployer to owner\\n     * @param comptroller_ Comptroller to attach the reward distributor to\\n     * @param rewardToken_ Reward token to distribute\\n     * @param loopsLimit_ Maximum number of iterations for the loops in this contract\\n     * @param accessControlManager_ AccessControlManager contract address\\n     */\\n    function initialize(\\n        Comptroller comptroller_,\\n        IERC20Upgradeable rewardToken_,\\n        uint256 loopsLimit_,\\n        address accessControlManager_\\n    ) external initializer {\\n        comptroller = comptroller_;\\n        rewardToken = rewardToken_;\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n\\n        _setMaxLoopsLimit(loopsLimit_);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken\\n     * @param vToken The address of the vToken to be initialized\\n     * @custom:event MarketInitialized emits on success\\n     * @custom:access Only Comptroller\\n     */\\n    function initializeMarket(address vToken) external onlyComptroller {\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        isTimeBased\\n            ? _initializeMarketTimestampBased(vToken, blockNumberOrTimestamp)\\n            : _initializeMarketBlockBased(vToken, safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\"));\\n\\n        emit MarketInitialized(vToken);\\n    }\\n\\n    /*** Reward Token Distribution ***/\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them\\n     *         Borrowers will begin to accrue after the first interaction with the protocol.\\n     * @dev This function should only be called when the user has a borrow position in the market\\n     *      (e.g. Comptroller.preBorrowHook, and Comptroller.preRepayHook)\\n     *      We avoid an external call to check if they are in the market to save gas because this function is called in many places\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function distributeBorrowerRewardToken(\\n        address vToken,\\n        address borrower,\\n        Exp memory marketBorrowIndex\\n    ) external onlyComptroller {\\n        _distributeBorrowerRewardToken(vToken, borrower, marketBorrowIndex);\\n    }\\n\\n    function updateRewardTokenSupplyIndex(address vToken) external onlyComptroller {\\n        _updateRewardTokenSupplyIndex(vToken);\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the recipient\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all\\n     * @param recipient The address of the recipient to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     */\\n    function grantRewardToken(address recipient, uint256 amount) external onlyOwner {\\n        uint256 amountLeft = _grantRewardToken(recipient, amount);\\n        require(amountLeft == 0, \\\"insufficient rewardToken for grant\\\");\\n        emit RewardTokenGranted(recipient, amount);\\n    }\\n\\n    function updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) external onlyComptroller {\\n        _updateRewardTokenBorrowIndex(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN borrow and supply speeds for the specified markets\\n     * @param vTokens The markets whose REWARD TOKEN speed to update\\n     * @param supplySpeeds New supply-side REWARD TOKEN speed for the corresponding market\\n     * @param borrowSpeeds New borrow-side REWARD TOKEN speed for the corresponding market\\n     */\\n    function setRewardTokenSpeeds(\\n        VToken[] memory vTokens,\\n        uint256[] memory supplySpeeds,\\n        uint256[] memory borrowSpeeds\\n    ) external {\\n        _checkAccessAllowed(\\\"setRewardTokenSpeeds(address[],uint256[],uint256[])\\\");\\n        uint256 numTokens = vTokens.length;\\n        require(numTokens == supplySpeeds.length && numTokens == borrowSpeeds.length, \\\"invalid setRewardTokenSpeeds\\\");\\n\\n        for (uint256 i; i < numTokens; ++i) {\\n            _setRewardTokenSpeed(vTokens[i], supplySpeeds[i], borrowSpeeds[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for the specified markets, used when contract is block based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlocks New supply-side REWARD TOKEN last rewarding block for the corresponding market\\n     * @param borrowLastRewardingBlocks New borrow-side REWARD TOKEN last rewarding block for the corresponding market\\n     */\\n    function setLastRewardingBlocks(\\n        VToken[] calldata vTokens,\\n        uint32[] calldata supplyLastRewardingBlocks,\\n        uint32[] calldata borrowLastRewardingBlocks\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlocks(address[],uint32[],uint32[])\\\");\\n        require(!isTimeBased, \\\"Block-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlocks.length && numTokens == borrowLastRewardingBlocks.length,\\n            \\\"RewardsDistributor::setLastRewardingBlocks invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlock(vTokens[i], supplyLastRewardingBlocks[i], borrowLastRewardingBlocks[i]);\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block timestamp for the specified markets, used when contract is time based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlockTimestamps New supply-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     * @param borrowLastRewardingBlockTimestamps New borrow-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     */\\n    function setLastRewardingBlockTimestamps(\\n        VToken[] calldata vTokens,\\n        uint256[] calldata supplyLastRewardingBlockTimestamps,\\n        uint256[] calldata borrowLastRewardingBlockTimestamps\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])\\\");\\n        require(isTimeBased, \\\"Time-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlockTimestamps.length &&\\n                numTokens == borrowLastRewardingBlockTimestamps.length,\\n            \\\"RewardsDistributor::setLastRewardingBlockTimestamps invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlockTimestamp(\\n                vTokens[i],\\n                supplyLastRewardingBlockTimestamps[i],\\n                borrowLastRewardingBlockTimestamps[i]\\n            );\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single contributor\\n     * @param contributor The contributor whose REWARD TOKEN speed to update\\n     * @param rewardTokenSpeed New REWARD TOKEN speed for contributor\\n     */\\n    function setContributorRewardTokenSpeed(address contributor, uint256 rewardTokenSpeed) external onlyOwner {\\n        // note that REWARD TOKEN speed could be set to 0 to halt liquidity rewards for a contributor\\n        updateContributorRewards(contributor);\\n        if (rewardTokenSpeed == 0) {\\n            // release storage\\n            delete lastContributorBlock[contributor];\\n        } else {\\n            lastContributorBlock[contributor] = getBlockNumberOrTimestamp();\\n        }\\n        rewardTokenContributorSpeeds[contributor] = rewardTokenSpeed;\\n\\n        emit ContributorRewardTokenSpeedUpdated(contributor, rewardTokenSpeed);\\n    }\\n\\n    function distributeSupplierRewardToken(address vToken, address supplier) external onlyComptroller {\\n        _distributeSupplierRewardToken(vToken, supplier);\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in all markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     */\\n    function claimRewardToken(address holder) external {\\n        return claimRewardToken(holder, comptroller.getAllMarkets());\\n    }\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Calculate additional accrued REWARD TOKEN for a contributor since last accrual\\n     * @param contributor The address to calculate contributor rewards for\\n     */\\n    function updateContributorRewards(address contributor) public {\\n        uint256 rewardTokenSpeed = rewardTokenContributorSpeeds[contributor];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n        uint256 deltaBlocksOrTimestamp = sub_(blockNumberOrTimestamp, lastContributorBlock[contributor]);\\n        if (deltaBlocksOrTimestamp > 0 && rewardTokenSpeed > 0) {\\n            uint256 newAccrued = mul_(deltaBlocksOrTimestamp, rewardTokenSpeed);\\n            uint256 contributorAccrued = add_(rewardTokenAccrued[contributor], newAccrued);\\n\\n            rewardTokenAccrued[contributor] = contributorAccrued;\\n            lastContributorBlock[contributor] = blockNumberOrTimestamp;\\n\\n            emit ContributorRewardsUpdated(contributor, rewardTokenAccrued[contributor]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in the specified markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     * @param vTokens The list of markets to claim REWARD TOKEN in\\n     */\\n    function claimRewardToken(address holder, VToken[] memory vTokens) public {\\n        uint256 vTokensCount = vTokens.length;\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            VToken vToken = vTokens[i];\\n            require(comptroller.isMarketListed(vToken), \\\"market must be listed\\\");\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n            _distributeBorrowerRewardToken(address(vToken), holder, borrowIndex);\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n            _distributeSupplierRewardToken(address(vToken), holder);\\n        }\\n        rewardTokenAccrued[holder] = _grantRewardToken(holder, rewardTokenAccrued[holder]);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for a single market.\\n     * @param vToken market's whose reward token last rewarding block to be updated\\n     * @param supplyLastRewardingBlock New supply-side REWARD TOKEN last rewarding block for market\\n     * @param borrowLastRewardingBlock New borrow-side REWARD TOKEN last rewarding block for market\\n     */\\n    function _setLastRewardingBlock(\\n        VToken vToken,\\n        uint32 supplyLastRewardingBlock,\\n        uint32 borrowLastRewardingBlock\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockNumber = getBlockNumberOrTimestamp();\\n\\n        require(supplyLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n        require(borrowLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n\\n        uint32 currentSupplyLastRewardingBlock = rewardTokenSupplyState[address(vToken)].lastRewardingBlock;\\n        uint32 currentBorrowLastRewardingBlock = rewardTokenBorrowState[address(vToken)].lastRewardingBlock;\\n\\n        require(\\n            currentSupplyLastRewardingBlock == 0 || currentSupplyLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlock == 0 || currentBorrowLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlock != supplyLastRewardingBlock) {\\n            rewardTokenSupplyState[address(vToken)].lastRewardingBlock = supplyLastRewardingBlock;\\n            emit SupplyLastRewardingBlockUpdated(address(vToken), supplyLastRewardingBlock);\\n        }\\n\\n        if (currentBorrowLastRewardingBlock != borrowLastRewardingBlock) {\\n            rewardTokenBorrowState[address(vToken)].lastRewardingBlock = borrowLastRewardingBlock;\\n            emit BorrowLastRewardingBlockUpdated(address(vToken), borrowLastRewardingBlock);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding timestamp for a single market.\\n     * @param vToken market's whose reward token last rewarding timestamp to be updated\\n     * @param supplyLastRewardingBlockTimestamp New supply-side REWARD TOKEN last rewarding timestamp for market\\n     * @param borrowLastRewardingBlockTimestamp New borrow-side REWARD TOKEN last rewarding timestamp for market\\n     */\\n    function _setLastRewardingBlockTimestamp(\\n        VToken vToken,\\n        uint256 supplyLastRewardingBlockTimestamp,\\n        uint256 borrowLastRewardingBlockTimestamp\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockTimestamp = getBlockNumberOrTimestamp();\\n\\n        require(\\n            supplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n        require(\\n            borrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n\\n        uint256 currentSupplyLastRewardingBlockTimestamp = rewardTokenSupplyStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n        uint256 currentBorrowLastRewardingBlockTimestamp = rewardTokenBorrowStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n\\n        require(\\n            currentSupplyLastRewardingBlockTimestamp == 0 || currentSupplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlockTimestamp == 0 || currentBorrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlockTimestamp != supplyLastRewardingBlockTimestamp) {\\n            rewardTokenSupplyStateTimeBased[address(vToken)].lastRewardingTimestamp = supplyLastRewardingBlockTimestamp;\\n            emit SupplyLastRewardingBlockTimestampUpdated(address(vToken), supplyLastRewardingBlockTimestamp);\\n        }\\n\\n        if (currentBorrowLastRewardingBlockTimestamp != borrowLastRewardingBlockTimestamp) {\\n            rewardTokenBorrowStateTimeBased[address(vToken)].lastRewardingTimestamp = borrowLastRewardingBlockTimestamp;\\n            emit BorrowLastRewardingBlockTimestampUpdated(address(vToken), borrowLastRewardingBlockTimestamp);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single market.\\n     * @param vToken market's whose reward token rate to be updated\\n     * @param supplySpeed New supply-side REWARD TOKEN speed for market\\n     * @param borrowSpeed New borrow-side REWARD TOKEN speed for market\\n     */\\n    function _setRewardTokenSpeed(VToken vToken, uint256 supplySpeed, uint256 borrowSpeed) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        if (rewardTokenSupplySpeeds[address(vToken)] != supplySpeed) {\\n            // Supply speed updated so let's update supply state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n\\n            // Update speed and emit event\\n            rewardTokenSupplySpeeds[address(vToken)] = supplySpeed;\\n            emit RewardTokenSupplySpeedUpdated(vToken, supplySpeed);\\n        }\\n\\n        if (rewardTokenBorrowSpeeds[address(vToken)] != borrowSpeed) {\\n            // Borrow speed updated so let's update borrow state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n\\n            // Update speed and emit event\\n            rewardTokenBorrowSpeeds[address(vToken)] = borrowSpeed;\\n            emit RewardTokenBorrowSpeedUpdated(vToken, borrowSpeed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculate REWARD TOKEN accrued by a supplier and possibly transfer it to them.\\n     * @param vToken The market in which the supplier is interacting\\n     * @param supplier The address of the supplier to distribute REWARD TOKEN to\\n     */\\n    function _distributeSupplierRewardToken(address vToken, address supplier) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n        uint256 supplierIndex = rewardTokenSupplierIndex[vToken][supplier];\\n\\n        // Update supplier's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenSupplierIndex[vToken][supplier] = supplyIndex;\\n\\n        if (supplierIndex == 0 && supplyIndex >= INITIAL_INDEX) {\\n            // Covers the case where users supplied tokens before the market's supply state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when supplier rewards were first\\n            // set for the market.\\n            supplierIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per vToken accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(supplyIndex, supplierIndex) });\\n\\n        uint256 supplierTokens = VToken(vToken).balanceOf(supplier);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerVToken\\n        uint256 supplierDelta = mul_(supplierTokens, deltaIndex);\\n\\n        uint256 supplierAccrued = add_(rewardTokenAccrued[supplier], supplierDelta);\\n        rewardTokenAccrued[supplier] = supplierAccrued;\\n\\n        emit DistributedSupplierRewardToken(VToken(vToken), supplier, supplierDelta, supplierAccrued, supplyIndex);\\n    }\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them.\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function _distributeBorrowerRewardToken(address vToken, address borrower, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n        uint256 borrowerIndex = rewardTokenBorrowerIndex[vToken][borrower];\\n\\n        // Update borrowers's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenBorrowerIndex[vToken][borrower] = borrowIndex;\\n\\n        if (borrowerIndex == 0 && borrowIndex >= INITIAL_INDEX) {\\n            // Covers the case where users borrowed tokens before the market's borrow state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when borrower rewards were first\\n            // set for the market.\\n            borrowerIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per borrowed unit accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(borrowIndex, borrowerIndex) });\\n\\n        uint256 borrowerAmount = div_(VToken(vToken).borrowBalanceStored(borrower), marketBorrowIndex);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerBorrowedUnit\\n        if (borrowerAmount != 0) {\\n            uint256 borrowerDelta = mul_(borrowerAmount, deltaIndex);\\n\\n            uint256 borrowerAccrued = add_(rewardTokenAccrued[borrower], borrowerDelta);\\n            rewardTokenAccrued[borrower] = borrowerAccrued;\\n\\n            emit DistributedBorrowerRewardToken(VToken(vToken), borrower, borrowerDelta, borrowerAccrued, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the user.\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all.\\n     * @param user The address of the user to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     * @return The amount of REWARD TOKEN which was NOT transferred to the user\\n     */\\n    function _grantRewardToken(address user, uint256 amount) internal returns (uint256) {\\n        uint256 rewardTokenRemaining = rewardToken.balanceOf(address(this));\\n        if (amount > 0 && amount <= rewardTokenRemaining) {\\n            rewardToken.safeTransfer(user, amount);\\n            return 0;\\n        }\\n        return amount;\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the supply index\\n     * @param vToken The market whose supply index to update\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenSupplyIndex(address vToken) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplySpeed = rewardTokenSupplySpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? supplyStateTimeBased.lastRewardingTimestamp\\n            : uint256(supplyState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? supplyStateTimeBased.timestamp : uint256(supplyState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && supplySpeed > 0) {\\n            uint256 supplyTokens = VToken(vToken).totalSupply();\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, supplySpeed);\\n            Double memory ratio = supplyTokens > 0\\n                ? fraction(accruedSinceUpdate, supplyTokens)\\n                : Double({ mantissa: 0 });\\n            uint224 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: supplyIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                supplyStateTimeBased.index = index;\\n                supplyStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                supplyState.index = index;\\n                supplyState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            isTimeBased ? supplyStateTimeBased.timestamp = blockNumberOrTimestamp : supplyState.block = uint32(\\n                blockNumberOrTimestamp\\n            );\\n        }\\n\\n        emit RewardTokenSupplyIndexUpdated(vToken);\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the borrow index\\n     * @param vToken The market whose borrow index to update\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowSpeed = rewardTokenBorrowSpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? borrowStateTimeBased.lastRewardingTimestamp\\n            : uint256(borrowState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? borrowStateTimeBased.timestamp : uint256(borrowState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && borrowSpeed > 0) {\\n            uint256 borrowAmount = div_(VToken(vToken).totalBorrows(), marketBorrowIndex);\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, borrowSpeed);\\n            Double memory ratio = borrowAmount > 0\\n                ? fraction(accruedSinceUpdate, borrowAmount)\\n                : Double({ mantissa: 0 });\\n            uint224 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: borrowIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                borrowStateTimeBased.index = index;\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.index = index;\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            if (isTimeBased) {\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        }\\n\\n        emit RewardTokenBorrowIndexUpdated(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is block-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockNumber current block number\\n     */\\n    function _initializeMarketBlockBased(address vToken, uint32 blockNumber) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block numbers\\n         */\\n        supplyState.block = borrowState.block = blockNumber;\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is time-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockTimestamp current block timestamp\\n     */\\n    function _initializeMarketTimestampBased(address vToken, uint256 blockTimestamp) internal {\\n        TimeBasedRewardToken storage supplyState = rewardTokenSupplyStateTimeBased[vToken];\\n        TimeBasedRewardToken storage borrowState = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block timestamp\\n         */\\n        supplyState.timestamp = borrowState.timestamp = blockTimestamp;\\n    }\\n}\\n\",\"keccak256\":\"0x3cc824e59c923cfe25c4f1a875959b7e9410cde8e73cd405de13f301298c697f\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\n\\n/**\\n * @title RewardsDistributorStorage\\n * @author Venus\\n * @dev Storage for RewardsDistributor\\n */\\ncontract RewardsDistributorStorage {\\n    struct RewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block number the index was last updated at\\n        uint32 block;\\n        // The block number at which to stop rewards\\n        uint32 lastRewardingBlock;\\n    }\\n\\n    struct TimeBasedRewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block timestamp the index was last updated at\\n        uint256 timestamp;\\n        // The block timestamp at which to stop rewards\\n        uint256 lastRewardingTimestamp;\\n    }\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => RewardToken) public rewardTokenSupplyState;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each supplier as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenSupplierIndex;\\n\\n    /// @notice The REWARD TOKEN accrued but not yet transferred to each user\\n    mapping(address => uint256) public rewardTokenAccrued;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding borrow market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenBorrowSpeeds;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding supply market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenSupplySpeeds;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => RewardToken) public rewardTokenBorrowState;\\n\\n    /// @notice The portion of REWARD TOKEN that each contributor receives per slot (block or second)\\n    mapping(address => uint256) public rewardTokenContributorSpeeds;\\n\\n    /// @notice Last slot (block or second) at which a contributor's REWARD TOKEN rewards have been allocated\\n    mapping(address => uint256) public lastContributorBlock;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each borrower as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenBorrowerIndex;\\n\\n    Comptroller internal comptroller;\\n\\n    IERC20Upgradeable public rewardToken;\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenSupplyStateTimeBased;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenBorrowStateTimeBased;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[37] private __gap;\\n}\\n\",\"keccak256\":\"0x70e5015a78a2acf95277949c8b4796e10b9ac194130be006d5e5217e158070c0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VToken.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IProtocolShareReserve } from \\\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\\\";\\n\\nimport { VTokenInterface } from \\\"./VTokenInterfaces.sol\\\";\\nimport { ComptrollerInterface, ComptrollerViewInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { TokenErrorReporter } from \\\"./ErrorReporter.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title VToken\\n * @author Venus\\n * @notice Each asset that is supported by a pool is integrated through an instance of the `VToken` contract. As outlined in the protocol overview,\\n * each isolated pool creates its own `vToken` corresponding to an asset. Within a given pool, each included `vToken` is referred to as a market of\\n * the pool. The main actions a user regularly interacts with in a market are:\\n\\n- mint/redeem of vTokens;\\n- transfer of vTokens;\\n- borrow/repay a loan on an underlying asset;\\n- liquidate a borrow or liquidate/heal an account.\\n\\n * A user supplies the underlying asset to a pool by minting `vTokens`, where the corresponding `vToken` amount is determined by the `exchangeRate`.\\n * The `exchangeRate` will change over time, dependent on a number of factors, some of which accrue interest. Additionally, once users have minted\\n * `vToken` in a pool, they can borrow any asset in the isolated pool by using their `vToken` as collateral. In order to borrow an asset or use a `vToken`\\n * as collateral, the user must be entered into each corresponding market (else, the `vToken` will not be considered collateral for a borrow). Note that\\n * a user may borrow up to a portion of their collateral determined by the market\\u2019s collateral factor. However, if their borrowed amount exceeds an amount\\n * calculated using the market\\u2019s corresponding liquidation threshold, the borrow is eligible for liquidation. When a user repays a borrow, they must also\\n * pay off interest accrued on the borrow.\\n * \\n * The Venus protocol includes unique mechanisms for healing an account and liquidating an account. These actions are performed in the `Comptroller`\\n * and consider all borrows and collateral for which a given account is entered within a market. These functions may only be called on an account with a\\n * total collateral amount that is no larger than a universal `minLiquidatableCollateral` value, which is used for all markets within a `Comptroller`.\\n * Both functions settle all of an account\\u2019s borrows, but `healAccount()` may add `badDebt` to a vToken. For more detail, see the description of\\n * `healAccount()` and `liquidateAccount()` in the `Comptroller` summary section below.\\n */\\ncontract VToken is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    VTokenInterface,\\n    ExponentialNoError,\\n    TokenErrorReporter,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    uint256 internal constant DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA = 5e16; // 5%\\n\\n    // Maximum fraction of interest that can be set aside for reserves\\n    uint256 internal constant MAX_RESERVE_FACTOR_MANTISSA = 1e18;\\n\\n    // Maximum borrow rate that can ever be applied per slot(block or second)\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 internal immutable MAX_BORROW_RATE_MANTISSA;\\n\\n    /**\\n     * Reentrancy Guard **\\n     */\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     */\\n    modifier nonReentrant() {\\n        require(_notEntered, \\\"re-entered\\\");\\n        _notEntered = false;\\n        _;\\n        _notEntered = true; // get a gas-refund post-Istanbul\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @param maxBorrowRateMantissa_ The maximum value of borrowing rate mantissa\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(\\n        bool timeBased_,\\n        uint256 blocksPerYear_,\\n        uint256 maxBorrowRateMantissa_\\n    ) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        require(maxBorrowRateMantissa_ <= 1e18, \\\"Max borrow rate must be <= 1e18\\\");\\n\\n        MAX_BORROW_RATE_MANTISSA = maxBorrowRateMantissa_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice Construct a new money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     * @custom:error ZeroAddressNotAllowed is thrown when admin address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     */\\n    function initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) external initializer {\\n        ensureNonzeroAddress(admin_);\\n\\n        // Initialize the market\\n        _initialize(\\n            underlying_,\\n            comptroller_,\\n            interestRateModel_,\\n            initialExchangeRateMantissa_,\\n            name_,\\n            symbol_,\\n            decimals_,\\n            admin_,\\n            accessControlManager_,\\n            riskManagement,\\n            reserveFactorMantissa_\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `msg.sender` to `dst`\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transfer(address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `src` to `dst`\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transferFrom(address src, address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, src, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Approve `spender` to transfer up to `amount` from `src`\\n     * @dev This will overwrite the approval amount for `spender`\\n     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\\n     * @param spender The address of the account which may transfer tokens\\n     * @param amount The number of tokens that are approved (uint256.max means infinite)\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function approve(address spender, uint256 amount) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        transferAllowances[src][spender] = amount;\\n        emit Approval(src, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Increase approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param addedValue The number of additional tokens spender can transfer\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 newAllowance = transferAllowances[src][spender];\\n        newAllowance += addedValue;\\n        transferAllowances[src][spender] = newAllowance;\\n\\n        emit Approval(src, spender, newAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Decreases approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param subtractedValue The number of tokens to remove from total approval\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 currentAllowance = transferAllowances[src][spender];\\n        require(currentAllowance >= subtractedValue, \\\"decreased allowance below zero\\\");\\n        unchecked {\\n            currentAllowance -= subtractedValue;\\n        }\\n\\n        transferAllowances[src][spender] = currentAllowance;\\n\\n        emit Approval(src, spender, currentAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Get the underlying balance of the `owner`\\n     * @dev This also accrues interest in a transaction\\n     * @param owner The address of the account to query\\n     * @return amount The amount of underlying owned by `owner`\\n     */\\n    function balanceOfUnderlying(address owner) external override returns (uint256) {\\n        Exp memory exchangeRate = Exp({ mantissa: exchangeRateCurrent() });\\n        return mul_ScalarTruncate(exchangeRate, accountTokens[owner]);\\n    }\\n\\n    /**\\n     * @notice Returns the current total borrows plus accrued interest\\n     * @return totalBorrows The total borrows with interest\\n     */\\n    function totalBorrowsCurrent() external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return totalBorrows;\\n    }\\n\\n    /**\\n     * @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\\n     * @param account The address whose balance should be calculated after updating borrowIndex\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceCurrent(address account) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Sender supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function mint(uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, msg.sender, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender calls on-behalf of minter. minter supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param minter User whom the supply will be attributed to\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when minter address is zero\\n     */\\n    function mintBehalf(address minter, uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(minter);\\n\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, minter, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for the underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function redeem(uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer The user on behalf of whom to redeem\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for a specified amount of underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     */\\n    function redeemUnderlying(uint256 redeemAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems underlying assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer, on behalf of whom to redeem\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemUnderlyingBehalf(\\n        address redeemer,\\n        uint256 redeemAmount\\n    ) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets from the protocol to their own address\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function borrow(uint256 borrowAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _borrowFresh(msg.sender, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the borrower using `comptroller.updateDelegate`\\n     * @param borrower The borrower, on behalf of whom to borrow\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error DelegateNotApproved is thrown if caller is not approved delegate\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function borrowBehalf(address borrower, uint256 borrowAmount) external override returns (uint256) {\\n        _ensureSenderIsDelegateOf(borrower);\\n        accrueInterest();\\n\\n        _borrowFresh(borrower, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays their own borrow\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrow(uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, msg.sender, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays a borrow belonging to borrower\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, borrower, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Not restricted\\n     */\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external override returns (uint256) {\\n        _liquidateBorrow(msg.sender, borrower, repayAmount, vTokenCollateral, false);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice sets protocol share accumulated from liquidations\\n     * @dev must be equal or less than liquidation incentive - 1\\n     * @param newProtocolSeizeShareMantissa_ new protocol share mantissa\\n     * @custom:event Emits NewProtocolSeizeShare event on success\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error ProtocolSeizeShareTooBig is thrown when the new seize share is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setProtocolSeizeShare(uint256 newProtocolSeizeShareMantissa_) external {\\n        _checkAccessAllowed(\\\"setProtocolSeizeShare(uint256)\\\");\\n        uint256 liquidationIncentive = ComptrollerViewInterface(address(comptroller)).liquidationIncentiveMantissa();\\n        if (newProtocolSeizeShareMantissa_ + MANTISSA_ONE > liquidationIncentive) {\\n            revert ProtocolSeizeShareTooBig();\\n        }\\n\\n        uint256 oldProtocolSeizeShareMantissa = protocolSeizeShareMantissa;\\n        protocolSeizeShareMantissa = newProtocolSeizeShareMantissa_;\\n        emit NewProtocolSeizeShare(oldProtocolSeizeShareMantissa, newProtocolSeizeShareMantissa_);\\n    }\\n\\n    /**\\n     * @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\\n     * @dev Admin function to accrue interest and set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     * @custom:event Emits NewReserveFactor event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error SetReserveFactorBoundsCheck is thrown when the new reserve factor is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external override nonReentrant {\\n        _checkAccessAllowed(\\\"setReserveFactor(uint256)\\\");\\n\\n        accrueInterest();\\n        _setReserveFactorFresh(newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Accrues interest and reduces reserves by transferring to the protocol reserve contract\\n     * @dev Gracefully return if reserves already reduced in accrueInterest\\n     * @param reduceAmount Amount of reduction to reserves\\n     * @custom:event Emits ReservesReduced event; may emit AccrueInterest\\n     * @custom:error ReduceReservesCashNotAvailable is thrown when the vToken does not have sufficient cash\\n     * @custom:error ReduceReservesCashValidation is thrown when trying to withdraw more cash than the reserves have\\n     * @custom:access Not restricted\\n     */\\n    function reduceReserves(uint256 reduceAmount) external override nonReentrant {\\n        accrueInterest();\\n        if (reduceReservesBlockNumber == getBlockNumberOrTimestamp()) return;\\n        _reduceReservesFresh(reduceAmount);\\n    }\\n\\n    /**\\n     * @notice The sender adds to reserves.\\n     * @param addAmount The amount of underlying token to add as reserves\\n     * @custom:event Emits ReservesAdded event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function addReserves(uint256 addAmount) external override nonReentrant {\\n        accrueInterest();\\n        _addReservesFresh(addAmount);\\n    }\\n\\n    /**\\n     * @notice accrues interest and updates the interest rate model using _setInterestRateModelFresh\\n     * @dev Admin function to accrue interest and update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     * @custom:event Emits NewMarketInterestRateModel event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external override {\\n        _checkAccessAllowed(\\\"setInterestRateModel(address)\\\");\\n\\n        accrueInterest();\\n        _setInterestRateModelFresh(newInterestRateModel);\\n    }\\n\\n    /**\\n     * @notice Repays a certain amount of debt, treats the rest of the borrow as bad debt, essentially\\n     *   \\\"forgiving\\\" the borrower. Healing is a situation that should rarely happen. However, some pools\\n     *   may list risky assets or be configured improperly \\u2013 we want to still handle such cases gracefully.\\n     *   We assume that Comptroller does the seizing, so this function is only available to Comptroller.\\n     * @dev This function does not call any Comptroller hooks (like \\\"healAllowed\\\"), because we assume\\n     *   the Comptroller does all the necessary checks before calling this function.\\n     * @param payer account who repays the debt\\n     * @param borrower account to heal\\n     * @param repayAmount amount to repay\\n     * @custom:event Emits RepayBorrow, BadDebtIncreased events; may emit AccrueInterest\\n     * @custom:error HealBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:access Only Comptroller\\n     */\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external override nonReentrant {\\n        if (repayAmount != 0) {\\n            comptroller.preRepayHook(address(this), borrower);\\n        }\\n\\n        if (msg.sender != address(comptroller)) {\\n            revert HealBorrowUnauthorized();\\n        }\\n\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 totalBorrowsNew = totalBorrows;\\n\\n        uint256 actualRepayAmount;\\n        if (repayAmount != 0) {\\n            // _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n            // We violate checks-effects-interactions here to account for tokens that take transfer fees\\n            actualRepayAmount = _doTransferIn(payer, repayAmount);\\n            totalBorrowsNew = totalBorrowsNew - actualRepayAmount;\\n            emit RepayBorrow(\\n                payer,\\n                borrower,\\n                actualRepayAmount,\\n                accountBorrowsPrev - actualRepayAmount,\\n                totalBorrowsNew\\n            );\\n        }\\n\\n        // The transaction will fail if trying to repay too much\\n        uint256 badDebtDelta = accountBorrowsPrev - actualRepayAmount;\\n        if (badDebtDelta != 0) {\\n            uint256 badDebtOld = badDebt;\\n            uint256 badDebtNew = badDebtOld + badDebtDelta;\\n            totalBorrowsNew = totalBorrowsNew - badDebtDelta;\\n            badDebt = badDebtNew;\\n\\n            // We treat healing as \\\"repayment\\\", where vToken is the payer\\n            emit RepayBorrow(address(this), borrower, badDebtDelta, 0, totalBorrowsNew);\\n            emit BadDebtIncreased(borrower, badDebtDelta, badDebtOld, badDebtNew);\\n        }\\n\\n        accountBorrows[borrower].principal = 0;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        emit HealBorrow(payer, borrower, repayAmount);\\n    }\\n\\n    /**\\n     * @notice The extended version of liquidations, callable only by Comptroller. May skip\\n     *  the close factor check. The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error ForceLiquidateBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Only Comptroller\\n     */\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        if (msg.sender != address(comptroller)) {\\n            revert ForceLiquidateBorrowUnauthorized();\\n        }\\n        _liquidateBorrow(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Will fail unless called by another vToken during the process of liquidation.\\n     *  It's absolutely critical to use msg.sender as the borrowed vToken and not a parameter.\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     * @custom:event Emits Transfer, ReservesAdded events\\n     * @custom:error LiquidateSeizeLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:access Not restricted\\n     */\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external override nonReentrant {\\n        _seize(msg.sender, liquidator, borrower, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Updates bad debt\\n     * @dev Called only when bad debt is recovered from auction\\n     * @param recoveredAmount_ The amount of bad debt recovered\\n     * @custom:event Emits BadDebtRecovered event\\n     * @custom:access Only Shortfall contract\\n     */\\n    function badDebtRecovered(uint256 recoveredAmount_) external {\\n        require(msg.sender == shortfall, \\\"only shortfall contract can update bad debt\\\");\\n        require(recoveredAmount_ <= badDebt, \\\"more than bad debt recovered from auction\\\");\\n\\n        uint256 badDebtOld = badDebt;\\n        uint256 badDebtNew = badDebtOld - recoveredAmount_;\\n        badDebt = badDebtNew;\\n\\n        emit BadDebtRecovered(badDebtOld, badDebtNew);\\n    }\\n\\n    /**\\n     * @notice Sets protocol share reserve contract address\\n     * @param protocolShareReserve_ The address of the protocol share reserve contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setProtocolShareReserve(address payable protocolShareReserve_) external onlyOwner {\\n        _setProtocolShareReserve(protocolShareReserve_);\\n    }\\n\\n    /**\\n     * @notice Sets shortfall contract address\\n     * @param shortfall_ The address of the shortfall contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setShortfallContract(address shortfall_) external onlyOwner {\\n        _setShortfallContract(shortfall_);\\n    }\\n\\n    /**\\n     * @notice A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)\\n     * @param token The address of the ERC-20 token to sweep\\n     * @custom:access Only Governance\\n     */\\n    function sweepToken(IERC20Upgradeable token) external override {\\n        require(msg.sender == owner(), \\\"VToken::sweepToken: only admin can sweep tokens\\\");\\n        require(address(token) != underlying, \\\"VToken::sweepToken: can not sweep underlying token\\\");\\n        uint256 balance = token.balanceOf(address(this));\\n        token.safeTransfer(owner(), balance);\\n\\n        emit SweepToken(address(token));\\n    }\\n\\n    /**\\n     * @notice A public function to set new threshold of slot(block or second) difference after which funds will be sent to the protocol share reserve\\n     * @param _newReduceReservesBlockOrTimestampDelta slot(block or second) difference value\\n     * @custom:access Only Governance\\n     */\\n    function setReduceReservesBlockDelta(uint256 _newReduceReservesBlockOrTimestampDelta) external {\\n        _checkAccessAllowed(\\\"setReduceReservesBlockDelta(uint256)\\\");\\n        require(_newReduceReservesBlockOrTimestampDelta > 0, \\\"Invalid Input\\\");\\n        emit NewReduceReservesBlockDelta(reduceReservesBlockDelta, _newReduceReservesBlockOrTimestampDelta);\\n        reduceReservesBlockDelta = _newReduceReservesBlockOrTimestampDelta;\\n    }\\n\\n    /**\\n     * @notice Get the current allowance from `owner` for `spender`\\n     * @param owner The address of the account which owns the tokens to be spent\\n     * @param spender The address of the account which may transfer tokens\\n     * @return amount The number of tokens allowed to be spent (type(uint256).max means infinite)\\n     */\\n    function allowance(address owner, address spender) external view override returns (uint256) {\\n        return transferAllowances[owner][spender];\\n    }\\n\\n    /**\\n     * @notice Get the token balance of the `owner`\\n     * @param owner The address of the account to query\\n     * @return amount The number of tokens owned by `owner`\\n     */\\n    function balanceOf(address owner) external view override returns (uint256) {\\n        return accountTokens[owner];\\n    }\\n\\n    /**\\n     * @notice Get a snapshot of the account's balances, and the cached exchange rate\\n     * @dev This is used by comptroller to more efficiently perform liquidity checks.\\n     * @param account Address of the account to snapshot\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return vTokenBalance User's balance of vTokens\\n     * @return borrowBalance Amount owed in terms of underlying\\n     * @return exchangeRate Stored exchange rate\\n     */\\n    function getAccountSnapshot(\\n        address account\\n    )\\n        external\\n        view\\n        override\\n        returns (uint256 error, uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRate)\\n    {\\n        return (NO_ERROR, accountTokens[account], _borrowBalanceStored(account), _exchangeRateStored());\\n    }\\n\\n    /**\\n     * @notice Get cash balance of this vToken in the underlying asset\\n     * @return cash The quantity of underlying asset owned by this contract\\n     */\\n    function getCash() external view override returns (uint256) {\\n        return _getCashPrior();\\n    }\\n\\n    /**\\n     * @notice Returns the current per slot(block or second) borrow interest rate for this vToken\\n     * @return rate The borrow interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function borrowRatePerBlock() external view override returns (uint256) {\\n        return interestRateModel.getBorrowRate(_getCashPrior(), totalBorrows, totalReserves, badDebt);\\n    }\\n\\n    /**\\n     * @notice Returns the current per-slot(block or second) supply interest rate for this v\\n     * @return rate The supply interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function supplyRatePerBlock() external view override returns (uint256) {\\n        return\\n            interestRateModel.getSupplyRate(\\n                _getCashPrior(),\\n                totalBorrows,\\n                totalReserves,\\n                reserveFactorMantissa,\\n                badDebt\\n            );\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceStored(address account) external view override returns (uint256) {\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateStored() external view override returns (uint256) {\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Accrue interest then return the up-to-date exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateCurrent() public override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Applies accrued interest to total borrows and reserves\\n     * @dev This calculates interest accrued from the last checkpointed slot(block or second)\\n     *  up to the current slot(block or second) and writes new checkpoint to storage and\\n     *  reduce spread reserves to protocol share reserve\\n     *  if currentSlot - reduceReservesBlockNumber >= slotDelta\\n     * @return Always NO_ERROR\\n     * @custom:event Emits AccrueInterest event on success\\n     * @custom:access Not restricted\\n     */\\n    function accrueInterest() public virtual override returns (uint256) {\\n        /* Remember the initial block number or timestamp */\\n        uint256 currentSlotNumber = getBlockNumberOrTimestamp();\\n        uint256 accrualSlotNumberPrior = accrualBlockNumber;\\n\\n        /* Short-circuit accumulating 0 interest */\\n        if (accrualSlotNumberPrior == currentSlotNumber) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Read the previous values out of storage */\\n        uint256 cashPrior = _getCashPrior();\\n        uint256 borrowsPrior = totalBorrows;\\n        uint256 reservesPrior = totalReserves;\\n        uint256 borrowIndexPrior = borrowIndex;\\n\\n        /* Calculate the current borrow interest rate */\\n        uint256 borrowRateMantissa = interestRateModel.getBorrowRate(cashPrior, borrowsPrior, reservesPrior, badDebt);\\n        require(borrowRateMantissa <= MAX_BORROW_RATE_MANTISSA, \\\"borrow rate is absurdly high\\\");\\n\\n        /* Calculate the number of slots elapsed since the last accrual */\\n        uint256 slotDelta = currentSlotNumber - accrualSlotNumberPrior;\\n\\n        /*\\n         * Calculate the interest accumulated into borrows and reserves and the new index:\\n         *  simpleInterestFactor = borrowRate * slotDelta\\n         *  interestAccumulated = simpleInterestFactor * totalBorrows\\n         *  totalBorrowsNew = interestAccumulated + totalBorrows\\n         *  totalReservesNew = interestAccumulated * reserveFactor + totalReserves\\n         *  borrowIndexNew = simpleInterestFactor * borrowIndex + borrowIndex\\n         */\\n\\n        Exp memory simpleInterestFactor = mul_(Exp({ mantissa: borrowRateMantissa }), slotDelta);\\n        uint256 interestAccumulated = mul_ScalarTruncate(simpleInterestFactor, borrowsPrior);\\n        uint256 totalBorrowsNew = interestAccumulated + borrowsPrior;\\n        uint256 totalReservesNew = mul_ScalarTruncateAddUInt(\\n            Exp({ mantissa: reserveFactorMantissa }),\\n            interestAccumulated,\\n            reservesPrior\\n        );\\n        uint256 borrowIndexNew = mul_ScalarTruncateAddUInt(simpleInterestFactor, borrowIndexPrior, borrowIndexPrior);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the previously calculated values into storage */\\n        accrualBlockNumber = currentSlotNumber;\\n        borrowIndex = borrowIndexNew;\\n        totalBorrows = totalBorrowsNew;\\n        totalReserves = totalReservesNew;\\n\\n        if (currentSlotNumber - reduceReservesBlockNumber >= reduceReservesBlockDelta) {\\n            reduceReservesBlockNumber = currentSlotNumber;\\n            if (cashPrior < totalReservesNew) {\\n                _reduceReservesFresh(cashPrior);\\n            } else {\\n                _reduceReservesFresh(totalReservesNew);\\n            }\\n        }\\n\\n        /* We emit an AccrueInterest event */\\n        emit AccrueInterest(cashPrior, interestAccumulated, borrowIndexNew, totalBorrowsNew);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice User supplies assets into the market and receives vTokens in exchange\\n     * @dev Assumes interest has already been accrued up to the current block or timestamp\\n     * @param payer The address of the account which is sending the assets for supply\\n     * @param minter The address of the account which is supplying the assets\\n     * @param mintAmount The amount of the underlying asset to supply\\n     */\\n    function _mintFresh(address payer, address minter, uint256 mintAmount) internal {\\n        /* Fail if mint not allowed */\\n        comptroller.preMintHook(address(this), minter, mintAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert MintFreshnessCheck();\\n        }\\n\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         *  We call `_doTransferIn` for the minter and the mintAmount.\\n         *  `_doTransferIn` reverts if anything goes wrong, since we can't be sure if\\n         *  side-effects occurred. The function returns the amount actually transferred,\\n         *  in case of a fee. On success, the vToken holds an additional `actualMintAmount`\\n         *  of cash.\\n         */\\n        uint256 actualMintAmount = _doTransferIn(payer, mintAmount);\\n\\n        /*\\n         * We get the current exchange rate and calculate the number of vTokens to be minted:\\n         *  mintTokens = actualMintAmount / exchangeRate\\n         */\\n\\n        uint256 mintTokens = div_(actualMintAmount, exchangeRate);\\n\\n        /*\\n         * We calculate the new total supply of vTokens and minter token balance, checking for overflow:\\n         *  totalSupplyNew = totalSupply + mintTokens\\n         *  accountTokensNew = accountTokens[minter] + mintTokens\\n         * And write them into storage\\n         */\\n        totalSupply = totalSupply + mintTokens;\\n        uint256 balanceAfter = accountTokens[minter] + mintTokens;\\n        accountTokens[minter] = balanceAfter;\\n\\n        /* We emit a Mint event, and a Transfer event */\\n        emit Mint(minter, actualMintAmount, mintTokens, balanceAfter);\\n        emit Transfer(address(0), minter, mintTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.mintVerify(address(this), minter, actualMintAmount, mintTokens);\\n    }\\n\\n    /**\\n     * @notice Redeemer redeems vTokens in exchange for the underlying assets, transferred to the receiver. Redeemer and receiver can be the same\\n     *   address, or different addresses if the receiver was previously approved by the redeemer as a valid delegate (see Comptroller.updateDelegate)\\n     * @dev Assumes interest has already been accrued up to the current slot(block or second)\\n     * @param redeemer The address of the account which is redeeming the tokens\\n     * @param receiver The receiver of the underlying tokens\\n     * @param redeemTokensIn The number of vTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     * @param redeemAmountIn The number of underlying tokens to receive from redeeming vTokens (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     */\\n    function _redeemFresh(address redeemer, address receiver, uint256 redeemTokensIn, uint256 redeemAmountIn) internal {\\n        require(redeemTokensIn == 0 || redeemAmountIn == 0, \\\"one of redeemTokensIn or redeemAmountIn must be zero\\\");\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RedeemFreshnessCheck();\\n        }\\n\\n        /* exchangeRate = invoke Exchange Rate Stored() */\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        uint256 redeemTokens;\\n        uint256 redeemAmount;\\n\\n        /* If redeemTokensIn > 0: */\\n        if (redeemTokensIn > 0) {\\n            /*\\n             * We calculate the exchange rate and the amount of underlying to be redeemed:\\n             *  redeemTokens = redeemTokensIn\\n             */\\n            redeemTokens = redeemTokensIn;\\n        } else {\\n            /*\\n             * We get the current exchange rate and calculate the amount to be redeemed:\\n             *  redeemTokens = redeemAmountIn / exchangeRate\\n             */\\n            redeemTokens = div_(redeemAmountIn, exchangeRate);\\n\\n            uint256 _redeemAmount = mul_(redeemTokens, exchangeRate);\\n            if (_redeemAmount != 0 && _redeemAmount != redeemAmountIn) redeemTokens++; // round up\\n        }\\n\\n        // redeemAmount = exchangeRate * redeemTokens\\n        redeemAmount = mul_ScalarTruncate(exchangeRate, redeemTokens);\\n\\n        // Revert if amount is zero\\n        if (redeemAmount == 0) {\\n            revert(\\\"redeemAmount is zero\\\");\\n        }\\n\\n        /* Fail if redeem not allowed */\\n        comptroller.preRedeemHook(address(this), redeemer, redeemTokens);\\n\\n        /* Fail gracefully if protocol has insufficient cash */\\n        if (_getCashPrior() - totalReserves < redeemAmount) {\\n            revert RedeemTransferOutNotPossible();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing reduced supply before external transfer.\\n         */\\n        totalSupply = totalSupply - redeemTokens;\\n        uint256 balanceAfter = accountTokens[redeemer] - redeemTokens;\\n        accountTokens[redeemer] = balanceAfter;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the redeemAmount.\\n         *  On success, the vToken has redeemAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, redeemAmount);\\n\\n        /* We emit a Transfer event, and a Redeem event */\\n        emit Transfer(redeemer, address(this), redeemTokens);\\n        emit Redeem(redeemer, redeemAmount, redeemTokens, balanceAfter);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.redeemVerify(address(this), redeemer, redeemAmount, redeemTokens);\\n    }\\n\\n    /**\\n     * @notice Users or their delegates borrow assets from the protocol\\n     * @param borrower User who borrows the assets\\n     * @param receiver The receiver of the tokens, if called by a delegate\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     */\\n    function _borrowFresh(address borrower, address receiver, uint256 borrowAmount) internal {\\n        /* Fail if borrow not allowed */\\n        comptroller.preBorrowHook(address(this), borrower, borrowAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert BorrowFreshnessCheck();\\n        }\\n\\n        /* Fail gracefully if protocol has insufficient underlying cash */\\n        if (_getCashPrior() - totalReserves < borrowAmount) {\\n            revert BorrowCashNotAvailable();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on overflow:\\n         *  accountBorrowNew = accountBorrow + borrowAmount\\n         *  totalBorrowsNew = totalBorrows + borrowAmount\\n         */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 accountBorrowsNew = accountBorrowsPrev + borrowAmount;\\n        uint256 totalBorrowsNew = totalBorrows + borrowAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing increased borrow before external transfer.\\n        `*/\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the borrowAmount.\\n         *  On success, the vToken borrowAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, borrowAmount);\\n\\n        /* We emit a Borrow event */\\n        emit Borrow(borrower, borrowAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.borrowVerify(address(this), borrower, borrowAmount);\\n    }\\n\\n    /**\\n     * @notice Borrows are repaid by another user (possibly the borrower).\\n     * @param payer the account paying off the borrow\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount the amount of underlying tokens being returned, or type(uint256).max for the full outstanding amount\\n     * @return (uint) the actual repayment amount.\\n     */\\n    function _repayBorrowFresh(address payer, address borrower, uint256 repayAmount) internal returns (uint256) {\\n        /* Fail if repayBorrow not allowed */\\n        comptroller.preRepayHook(address(this), borrower);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RepayBorrowFreshnessCheck();\\n        }\\n\\n        /* We fetch the amount the borrower owes, with accumulated interest */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n\\n        uint256 repayAmountFinal = repayAmount >= accountBorrowsPrev ? accountBorrowsPrev : repayAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We call _doTransferIn for the payer and the repayAmount\\n         *  On success, the vToken holds an additional repayAmount of cash.\\n         *  _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         *   it returns the amount actually transferred, in case of a fee.\\n         */\\n        uint256 actualRepayAmount = _doTransferIn(payer, repayAmountFinal);\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on underflow:\\n         *  accountBorrowsNew = accountBorrows - actualRepayAmount\\n         *  totalBorrowsNew = totalBorrows - actualRepayAmount\\n         */\\n        uint256 accountBorrowsNew = accountBorrowsPrev - actualRepayAmount;\\n        uint256 totalBorrowsNew = totalBorrows - actualRepayAmount;\\n\\n        /* We write the previously calculated values into storage */\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /* We emit a RepayBorrow event */\\n        emit RepayBorrow(payer, borrower, actualRepayAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.repayBorrowVerify(address(this), payer, borrower, actualRepayAmount, borrowIndex);\\n\\n        return actualRepayAmount;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal nonReentrant {\\n        accrueInterest();\\n\\n        uint256 error = vTokenCollateral.accrueInterest();\\n        if (error != NO_ERROR) {\\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted liquidation failed\\n            revert LiquidateAccrueCollateralInterestFailed(error);\\n        }\\n\\n        _liquidateBorrowFresh(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice The liquidator liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrowFresh(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal {\\n        /* Fail if liquidate not allowed */\\n        comptroller.preLiquidateHook(\\n            address(this),\\n            address(vTokenCollateral),\\n            borrower,\\n            repayAmount,\\n            skipLiquidityCheck\\n        );\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert LiquidateFreshnessCheck();\\n        }\\n\\n        /* Verify vTokenCollateral market's slot(block or second) number equals current slot(block or second) number */\\n        if (vTokenCollateral.accrualBlockNumber() != getBlockNumberOrTimestamp()) {\\n            revert LiquidateCollateralFreshnessCheck();\\n        }\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateLiquidatorIsBorrower();\\n        }\\n\\n        /* Fail if repayAmount = 0 */\\n        if (repayAmount == 0) {\\n            revert LiquidateCloseAmountIsZero();\\n        }\\n\\n        /* Fail if repayAmount = type(uint256).max */\\n        if (repayAmount == type(uint256).max) {\\n            revert LiquidateCloseAmountIsUintMax();\\n        }\\n\\n        /* Fail if repayBorrow fails */\\n        uint256 actualRepayAmount = _repayBorrowFresh(liquidator, borrower, repayAmount);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We calculate the number of collateral tokens that will be seized */\\n        (uint256 amountSeizeError, uint256 seizeTokens) = comptroller.liquidateCalculateSeizeTokens(\\n            address(this),\\n            address(vTokenCollateral),\\n            actualRepayAmount\\n        );\\n        require(amountSeizeError == NO_ERROR, \\\"LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED\\\");\\n\\n        /* Revert if borrower collateral token balance < seizeTokens */\\n        require(vTokenCollateral.balanceOf(borrower) >= seizeTokens, \\\"LIQUIDATE_SEIZE_TOO_MUCH\\\");\\n\\n        // If this is also the collateral, call _seize internally to avoid re-entrancy, otherwise make an external call\\n        if (address(vTokenCollateral) == address(this)) {\\n            _seize(address(this), liquidator, borrower, seizeTokens);\\n        } else {\\n            vTokenCollateral.seize(liquidator, borrower, seizeTokens);\\n        }\\n\\n        /* We emit a LiquidateBorrow event */\\n        emit LiquidateBorrow(liquidator, borrower, actualRepayAmount, address(vTokenCollateral), seizeTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.liquidateBorrowVerify(\\n            address(this),\\n            address(vTokenCollateral),\\n            liquidator,\\n            borrower,\\n            actualRepayAmount,\\n            seizeTokens\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Called only during an in-kind liquidation, or by liquidateBorrow during the liquidation of another VToken.\\n     *  It's absolutely critical to use msg.sender as the seizer vToken and not a parameter.\\n     * @param seizerContract The contract seizing the collateral (either borrowed vToken or Comptroller)\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     */\\n    function _seize(address seizerContract, address liquidator, address borrower, uint256 seizeTokens) internal {\\n        /* Fail if seize not allowed */\\n        comptroller.preSeizeHook(address(this), seizerContract, liquidator, borrower);\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateSeizeLiquidatorIsBorrower();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and liquidator token balances, failing on underflow/overflow:\\n         *  borrowerTokensNew = accountTokens[borrower] - seizeTokens\\n         *  liquidatorTokensNew = accountTokens[liquidator] + seizeTokens\\n         */\\n        uint256 liquidationIncentiveMantissa = ComptrollerViewInterface(address(comptroller))\\n            .liquidationIncentiveMantissa();\\n        uint256 numerator = mul_(seizeTokens, Exp({ mantissa: protocolSeizeShareMantissa }));\\n        uint256 protocolSeizeTokens = div_(numerator, Exp({ mantissa: liquidationIncentiveMantissa }));\\n        uint256 liquidatorSeizeTokens = seizeTokens - protocolSeizeTokens;\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n        uint256 protocolSeizeAmount = mul_ScalarTruncate(exchangeRate, protocolSeizeTokens);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the calculated values into storage */\\n        totalSupply = totalSupply - protocolSeizeTokens;\\n        accountTokens[borrower] = accountTokens[borrower] - seizeTokens;\\n        accountTokens[liquidator] = accountTokens[liquidator] + liquidatorSeizeTokens;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, protocolSeizeAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.LIQUIDATION\\n        );\\n\\n        /* Emit a Transfer event */\\n        emit Transfer(borrower, liquidator, liquidatorSeizeTokens);\\n        emit ProtocolSeize(borrower, protocolShareReserve, protocolSeizeAmount);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.seizeVerify(address(this), seizerContract, liquidator, borrower, seizeTokens);\\n    }\\n\\n    function _setComptroller(ComptrollerInterface newComptroller) internal {\\n        ComptrollerInterface oldComptroller = comptroller;\\n        // Ensure invoke comptroller.isComptroller() returns true\\n        require(newComptroller.isComptroller(), \\\"marker method returned false\\\");\\n\\n        // Set market's comptroller to newComptroller\\n        comptroller = newComptroller;\\n\\n        // Emit NewComptroller(oldComptroller, newComptroller)\\n        emit NewComptroller(oldComptroller, newComptroller);\\n    }\\n\\n    /**\\n     * @notice Sets a new reserve factor for the protocol (*requires fresh interest accrual)\\n     * @dev Admin function to set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     */\\n    function _setReserveFactorFresh(uint256 newReserveFactorMantissa) internal {\\n        // Verify market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetReserveFactorFreshCheck();\\n        }\\n\\n        // Check newReserveFactor \\u2264 maxReserveFactor\\n        if (newReserveFactorMantissa > MAX_RESERVE_FACTOR_MANTISSA) {\\n            revert SetReserveFactorBoundsCheck();\\n        }\\n\\n        uint256 oldReserveFactorMantissa = reserveFactorMantissa;\\n        reserveFactorMantissa = newReserveFactorMantissa;\\n\\n        emit NewReserveFactor(oldReserveFactorMantissa, newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Add reserves by transferring from caller\\n     * @dev Requires fresh interest accrual\\n     * @param addAmount Amount of addition to reserves\\n     * @return actualAddAmount The actual amount added, excluding the potential token fees\\n     */\\n    function _addReservesFresh(uint256 addAmount) internal returns (uint256) {\\n        // totalReserves + actualAddAmount\\n        uint256 totalReservesNew;\\n        uint256 actualAddAmount;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert AddReservesFactorFreshCheck(actualAddAmount);\\n        }\\n\\n        actualAddAmount = _doTransferIn(msg.sender, addAmount);\\n        totalReservesNew = totalReserves + actualAddAmount;\\n        totalReserves = totalReservesNew;\\n        emit ReservesAdded(msg.sender, actualAddAmount, totalReservesNew);\\n\\n        return actualAddAmount;\\n    }\\n\\n    /**\\n     * @notice Reduces reserves by transferring to the protocol reserve contract\\n     * @dev Requires fresh interest accrual\\n     * @param reduceAmount Amount of reduction to reserves\\n     */\\n    function _reduceReservesFresh(uint256 reduceAmount) internal {\\n        if (reduceAmount == 0) {\\n            return;\\n        }\\n        // totalReserves - reduceAmount\\n        uint256 totalReservesNew;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert ReduceReservesFreshCheck();\\n        }\\n\\n        // Fail gracefully if protocol has insufficient underlying cash\\n        if (_getCashPrior() < reduceAmount) {\\n            revert ReduceReservesCashNotAvailable();\\n        }\\n\\n        // Check reduceAmount \\u2264 reserves[n] (totalReserves)\\n        if (reduceAmount > totalReserves) {\\n            revert ReduceReservesCashValidation();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        totalReservesNew = totalReserves - reduceAmount;\\n\\n        // Store reserves[n+1] = reserves[n] - reduceAmount\\n        totalReserves = totalReservesNew;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, reduceAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.SPREAD\\n        );\\n\\n        emit SpreadReservesReduced(protocolShareReserve, reduceAmount, totalReservesNew);\\n    }\\n\\n    /**\\n     * @notice updates the interest rate model (*requires fresh interest accrual)\\n     * @dev Admin function to update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     */\\n    function _setInterestRateModelFresh(InterestRateModel newInterestRateModel) internal {\\n        // Used to store old model for use in the event that is emitted on success\\n        InterestRateModel oldInterestRateModel;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetInterestRateModelFreshCheck();\\n        }\\n\\n        // Track the market's current interest rate model\\n        oldInterestRateModel = interestRateModel;\\n\\n        // Ensure invoke newInterestRateModel.isInterestRateModel() returns true\\n        require(newInterestRateModel.isInterestRateModel(), \\\"marker method returned false\\\");\\n\\n        // Set the interest rate model to newInterestRateModel\\n        interestRateModel = newInterestRateModel;\\n\\n        // Emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel)\\n        emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel);\\n    }\\n\\n    /**\\n     * Safe Token **\\n     */\\n\\n    /**\\n     * @dev Similar to ERC-20 transfer, but handles tokens that have transfer fees.\\n     *      This function returns the actual amount received,\\n     *      which may be less than `amount` if there is a fee attached to the transfer.\\n     * @param from Sender of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     * @return Actual amount received\\n     */\\n    function _doTransferIn(address from, uint256 amount) internal virtual returns (uint256) {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        uint256 balanceBefore = token.balanceOf(address(this));\\n        token.safeTransferFrom(from, address(this), amount);\\n        uint256 balanceAfter = token.balanceOf(address(this));\\n        // Return the amount that was *actually* transferred\\n        return balanceAfter - balanceBefore;\\n    }\\n\\n    /**\\n     * @dev Just a regular ERC-20 transfer, reverts on failure\\n     * @param to Receiver of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     */\\n    function _doTransferOut(address to, uint256 amount) internal virtual {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        token.safeTransfer(to, amount);\\n    }\\n\\n    /**\\n     * @notice Transfer `tokens` tokens from `src` to `dst` by `spender`\\n     * @dev Called by both `transfer` and `transferFrom` internally\\n     * @param spender The address of the account performing the transfer\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param tokens The number of tokens to transfer\\n     */\\n    function _transferTokens(address spender, address src, address dst, uint256 tokens) internal {\\n        /* Fail if transfer not allowed */\\n        comptroller.preTransferHook(address(this), src, dst, tokens);\\n\\n        /* Do not allow self-transfers */\\n        if (src == dst) {\\n            revert TransferNotAllowed();\\n        }\\n\\n        /* Get the allowance, infinite for the account owner */\\n        uint256 startingAllowance;\\n        if (spender == src) {\\n            startingAllowance = type(uint256).max;\\n        } else {\\n            startingAllowance = transferAllowances[src][spender];\\n        }\\n\\n        /* Do the calculations, checking for {under,over}flow */\\n        uint256 allowanceNew = startingAllowance - tokens;\\n        uint256 srcTokensNew = accountTokens[src] - tokens;\\n        uint256 dstTokensNew = accountTokens[dst] + tokens;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n\\n        accountTokens[src] = srcTokensNew;\\n        accountTokens[dst] = dstTokensNew;\\n\\n        /* Eat some of the allowance (if necessary) */\\n        if (startingAllowance != type(uint256).max) {\\n            transferAllowances[src][spender] = allowanceNew;\\n        }\\n\\n        /* We emit a Transfer event */\\n        emit Transfer(src, dst, tokens);\\n\\n        comptroller.transferVerify(address(this), src, dst, tokens);\\n    }\\n\\n    /**\\n     * @notice Initialize the money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     */\\n    function _initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n        require(accrualBlockNumber == 0 && borrowIndex == 0, \\\"market may only be initialized once\\\");\\n\\n        // Set initial exchange rate\\n        initialExchangeRateMantissa = initialExchangeRateMantissa_;\\n        require(initialExchangeRateMantissa > 0, \\\"initial exchange rate must be greater than zero.\\\");\\n\\n        _setComptroller(comptroller_);\\n\\n        // Initialize slot(block or second) number and borrow index (slot(block or second) number mocks depend on comptroller being set)\\n        accrualBlockNumber = getBlockNumberOrTimestamp();\\n        borrowIndex = MANTISSA_ONE;\\n\\n        // Set the interest rate model (depends on slot(block or second) number / borrow index)\\n        _setInterestRateModelFresh(interestRateModel_);\\n\\n        _setReserveFactorFresh(reserveFactorMantissa_);\\n\\n        name = name_;\\n        symbol = symbol_;\\n        decimals = decimals_;\\n        _setShortfallContract(riskManagement.shortfall);\\n        _setProtocolShareReserve(riskManagement.protocolShareReserve);\\n        protocolSeizeShareMantissa = DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA;\\n\\n        // Set underlying and sanity check it\\n        underlying = underlying_;\\n        IERC20Upgradeable(underlying).totalSupply();\\n\\n        // The counter starts true to prevent changing it from zero to non-zero (i.e. smaller cost/refund)\\n        _notEntered = true;\\n        _transferOwnership(admin_);\\n    }\\n\\n    function _setShortfallContract(address shortfall_) internal {\\n        ensureNonzeroAddress(shortfall_);\\n        address oldShortfall = shortfall;\\n        shortfall = shortfall_;\\n        emit NewShortfallContract(oldShortfall, shortfall_);\\n    }\\n\\n    function _setProtocolShareReserve(address payable protocolShareReserve_) internal {\\n        ensureNonzeroAddress(protocolShareReserve_);\\n        address oldProtocolShareReserve = address(protocolShareReserve);\\n        protocolShareReserve = protocolShareReserve_;\\n        emit NewProtocolShareReserve(oldProtocolShareReserve, address(protocolShareReserve_));\\n    }\\n\\n    function _ensureSenderIsDelegateOf(address user) internal view {\\n        if (!ComptrollerViewInterface(address(comptroller)).approvedDelegates(user, msg.sender)) {\\n            revert DelegateNotApproved();\\n        }\\n    }\\n\\n    /**\\n     * @notice Gets balance of this contract in terms of the underlying\\n     * @dev This excludes the value of the current message, if any\\n     * @return The quantity of underlying tokens owned by this contract\\n     */\\n    function _getCashPrior() internal view virtual returns (uint256) {\\n        return IERC20Upgradeable(underlying).balanceOf(address(this));\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance the calculated balance\\n     */\\n    function _borrowBalanceStored(address account) internal view returns (uint256) {\\n        /* Get borrowBalance and borrowIndex */\\n        BorrowSnapshot memory borrowSnapshot = accountBorrows[account];\\n\\n        /* If borrowBalance = 0 then borrowIndex is likely also 0.\\n         * Rather than failing the calculation with a division by 0, we immediately return 0 in this case.\\n         */\\n        if (borrowSnapshot.principal == 0) {\\n            return 0;\\n        }\\n\\n        /* Calculate new borrow balance using the interest index:\\n         *  recentBorrowBalance = borrower.borrowBalance * market.borrowIndex / borrower.borrowIndex\\n         */\\n        uint256 principalTimesIndex = borrowSnapshot.principal * borrowIndex;\\n\\n        return principalTimesIndex / borrowSnapshot.interestIndex;\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function _exchangeRateStored() internal view virtual returns (uint256) {\\n        uint256 _totalSupply = totalSupply;\\n        if (_totalSupply == 0) {\\n            /*\\n             * If there are no tokens minted:\\n             *  exchangeRate = initialExchangeRate\\n             */\\n            return initialExchangeRateMantissa;\\n        }\\n        /*\\n         * Otherwise:\\n         *  exchangeRate = (totalCash + totalBorrows + badDebt - totalReserves) / totalSupply\\n         */\\n        uint256 totalCash = _getCashPrior();\\n        uint256 cashPlusBorrowsMinusReserves = totalCash + totalBorrows + badDebt - totalReserves;\\n        uint256 exchangeRate = (cashPlusBorrowsMinusReserves * EXP_SCALE) / _totalSupply;\\n\\n        return exchangeRate;\\n    }\\n}\\n\",\"keccak256\":\"0xa220ca317fe69b920b86e43f054c43b5f891f12160fd312c9a21668f969ee056\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { ComptrollerInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\n\\n/**\\n * @title VTokenStorage\\n * @author Venus\\n * @notice Storage layout used by the `VToken` contract\\n */\\n// solhint-disable-next-line max-states-count\\ncontract VTokenStorage {\\n    /**\\n     * @notice Container for borrow balance information\\n     * @member principal Total balance (with accrued interest), after applying the most recent balance-changing action\\n     * @member interestIndex Global borrowIndex as of the most recent balance-changing action\\n     */\\n    struct BorrowSnapshot {\\n        uint256 principal;\\n        uint256 interestIndex;\\n    }\\n\\n    /**\\n     * @dev Guard variable for re-entrancy checks\\n     */\\n    bool internal _notEntered;\\n\\n    /**\\n     * @notice Underlying asset for this VToken\\n     */\\n    address public underlying;\\n\\n    /**\\n     * @notice EIP-20 token name for this token\\n     */\\n    string public name;\\n\\n    /**\\n     * @notice EIP-20 token symbol for this token\\n     */\\n    string public symbol;\\n\\n    /**\\n     * @notice EIP-20 token decimals for this token\\n     */\\n    uint8 public decimals;\\n\\n    /**\\n     * @notice Protocol share Reserve contract address\\n     */\\n    address payable public protocolShareReserve;\\n\\n    /**\\n     * @notice Contract which oversees inter-vToken operations\\n     */\\n    ComptrollerInterface public comptroller;\\n\\n    /**\\n     * @notice Model which tells what the current interest rate should be\\n     */\\n    InterestRateModel public interestRateModel;\\n\\n    // Initial exchange rate used when minting the first VTokens (used when totalSupply = 0)\\n    uint256 internal initialExchangeRateMantissa;\\n\\n    /**\\n     * @notice Fraction of interest currently set aside for reserves\\n     */\\n    uint256 public reserveFactorMantissa;\\n\\n    /**\\n     * @notice Slot(block or second) number that interest was last accrued at\\n     */\\n    uint256 public accrualBlockNumber;\\n\\n    /**\\n     * @notice Accumulator of the total earned interest rate since the opening of the market\\n     */\\n    uint256 public borrowIndex;\\n\\n    /**\\n     * @notice Total amount of outstanding borrows of the underlying in this market\\n     */\\n    uint256 public totalBorrows;\\n\\n    /**\\n     * @notice Total amount of reserves of the underlying held in this market\\n     */\\n    uint256 public totalReserves;\\n\\n    /**\\n     * @notice Total number of tokens in circulation\\n     */\\n    uint256 public totalSupply;\\n\\n    /**\\n     * @notice Total bad debt of the market\\n     */\\n    uint256 public badDebt;\\n\\n    // Official record of token balances for each account\\n    mapping(address => uint256) internal accountTokens;\\n\\n    // Approved token transfer amounts on behalf of others\\n    mapping(address => mapping(address => uint256)) internal transferAllowances;\\n\\n    // Mapping of account addresses to outstanding borrow balances\\n    mapping(address => BorrowSnapshot) internal accountBorrows;\\n\\n    /**\\n     * @notice Share of seized collateral that is added to reserves\\n     */\\n    uint256 public protocolSeizeShareMantissa;\\n\\n    /**\\n     * @notice Storage of Shortfall contract address\\n     */\\n    address public shortfall;\\n\\n    /**\\n     * @notice delta slot (block or second) after which reserves will be reduced\\n     */\\n    uint256 public reduceReservesBlockDelta;\\n\\n    /**\\n     * @notice last slot (block or second) number at which reserves were reduced\\n     */\\n    uint256 public reduceReservesBlockNumber;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n}\\n\\n/**\\n * @title VTokenInterface\\n * @author Venus\\n * @notice Interface implemented by the `VToken` contract\\n */\\nabstract contract VTokenInterface is VTokenStorage {\\n    struct RiskManagementInit {\\n        address shortfall;\\n        address payable protocolShareReserve;\\n    }\\n\\n    /*** Market Events ***/\\n\\n    /**\\n     * @notice Event emitted when interest is accrued\\n     */\\n    event AccrueInterest(uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when tokens are minted\\n     */\\n    event Mint(address indexed minter, uint256 mintAmount, uint256 mintTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when tokens are redeemed\\n     */\\n    event Redeem(address indexed redeemer, uint256 redeemAmount, uint256 redeemTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when underlying is borrowed\\n     */\\n    event Borrow(address indexed borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when a borrow is repaid\\n     */\\n    event RepayBorrow(\\n        address indexed payer,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        uint256 accountBorrows,\\n        uint256 totalBorrows\\n    );\\n\\n    /**\\n     * @notice Event emitted when bad debt is accumulated on a market\\n     * @param borrower borrower to \\\"forgive\\\"\\n     * @param badDebtDelta amount of new bad debt recorded\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtIncreased(address indexed borrower, uint256 badDebtDelta, uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when bad debt is recovered via an auction\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtRecovered(uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when a borrow is liquidated\\n     */\\n    event LiquidateBorrow(\\n        address indexed liquidator,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        address indexed vTokenCollateral,\\n        uint256 seizeTokens\\n    );\\n\\n    /*** Admin Events ***/\\n\\n    /**\\n     * @notice Event emitted when comptroller is changed\\n     */\\n    event NewComptroller(ComptrollerInterface indexed oldComptroller, ComptrollerInterface indexed newComptroller);\\n\\n    /**\\n     * @notice Event emitted when shortfall contract address is changed\\n     */\\n    event NewShortfallContract(address indexed oldShortfall, address indexed newShortfall);\\n\\n    /**\\n     * @notice Event emitted when protocol share reserve contract address is changed\\n     */\\n    event NewProtocolShareReserve(address indexed oldProtocolShareReserve, address indexed newProtocolShareReserve);\\n\\n    /**\\n     * @notice Event emitted when interestRateModel is changed\\n     */\\n    event NewMarketInterestRateModel(\\n        InterestRateModel indexed oldInterestRateModel,\\n        InterestRateModel indexed newInterestRateModel\\n    );\\n\\n    /**\\n     * @notice Event emitted when protocol seize share is changed\\n     */\\n    event NewProtocolSeizeShare(uint256 oldProtocolSeizeShareMantissa, uint256 newProtocolSeizeShareMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserve factor is changed\\n     */\\n    event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserves are added\\n     */\\n    event ReservesAdded(address indexed benefactor, uint256 addAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice Event emitted when the spread reserves are reduced\\n     */\\n    event SpreadReservesReduced(address indexed protocolShareReserve, uint256 reduceAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice EIP20 Transfer event\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 amount);\\n\\n    /**\\n     * @notice EIP20 Approval event\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\\n\\n    /**\\n     * @notice Event emitted when healing the borrow\\n     */\\n    event HealBorrow(address indexed payer, address indexed borrower, uint256 repayAmount);\\n\\n    /**\\n     * @notice Event emitted when tokens are swept\\n     */\\n    event SweepToken(address indexed token);\\n\\n    /**\\n     * @notice Event emitted when reduce reserves slot (block or second) delta is changed\\n     */\\n    event NewReduceReservesBlockDelta(\\n        uint256 oldReduceReservesBlockOrTimestampDelta,\\n        uint256 newReduceReservesBlockOrTimestampDelta\\n    );\\n\\n    /**\\n     * @notice Event emitted when liquidation reserves are reduced\\n     */\\n    event ProtocolSeize(address indexed from, address indexed to, uint256 amount);\\n\\n    /*** User Interface ***/\\n\\n    function mint(uint256 mintAmount) external virtual returns (uint256);\\n\\n    function mintBehalf(address minter, uint256 mintAllowed) external virtual returns (uint256);\\n\\n    function redeem(uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemUnderlying(uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function redeemUnderlyingBehalf(address redeemer, uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function borrow(uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function borrowBehalf(address borrwwer, uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function repayBorrow(uint256 repayAmount) external virtual returns (uint256);\\n\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external virtual returns (uint256);\\n\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external virtual returns (uint256);\\n\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external virtual;\\n\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipCloseFactorCheck\\n    ) external virtual;\\n\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external virtual;\\n\\n    function transfer(address dst, uint256 amount) external virtual returns (bool);\\n\\n    function transferFrom(address src, address dst, uint256 amount) external virtual returns (bool);\\n\\n    function accrueInterest() external virtual returns (uint256);\\n\\n    function sweepToken(IERC20Upgradeable token) external virtual;\\n\\n    /*** Admin Functions ***/\\n\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external virtual;\\n\\n    function reduceReserves(uint256 reduceAmount) external virtual;\\n\\n    function exchangeRateCurrent() external virtual returns (uint256);\\n\\n    function borrowBalanceCurrent(address account) external virtual returns (uint256);\\n\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external virtual;\\n\\n    function addReserves(uint256 addAmount) external virtual;\\n\\n    function totalBorrowsCurrent() external virtual returns (uint256);\\n\\n    function balanceOfUnderlying(address owner) external virtual returns (uint256);\\n\\n    function approve(address spender, uint256 amount) external virtual returns (bool);\\n\\n    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool);\\n\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool);\\n\\n    function allowance(address owner, address spender) external view virtual returns (uint256);\\n\\n    function balanceOf(address owner) external view virtual returns (uint256);\\n\\n    function getAccountSnapshot(address account) external view virtual returns (uint256, uint256, uint256, uint256);\\n\\n    function borrowRatePerBlock() external view virtual returns (uint256);\\n\\n    function supplyRatePerBlock() external view virtual returns (uint256);\\n\\n    function borrowBalanceStored(address account) external view virtual returns (uint256);\\n\\n    function exchangeRateStored() external view virtual returns (uint256);\\n\\n    function getCash() external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is a VToken contract (for inspection)\\n     * @return Always true\\n     */\\n    function isVToken() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7c4cbb879e3a931cfee4fa7a9eb1978eddff18087a1c4f56decedb84c2479f1e\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\",\"keccak256\":\"0x54ab3a6f3bc87569ed12370f3470a1ec84cea9796d4d0ccf3d07dd4280c044aa\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/validators.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\\nerror ZeroAddressNotAllowed();\\n\\n/// @notice Checks if the provided address is nonzero, reverts otherwise\\n/// @param address_ Address to check\\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\\nfunction ensureNonzeroAddress(address address_) pure {\\n    if (address_ == address(0)) {\\n        revert ZeroAddressNotAllowed();\\n    }\\n}\\n\",\"keccak256\":\"0x93bdd5cfb100f0f9a1d446857e23c3633df6ab12c266333c978428edd96b1367\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface IProtocolShareReserve {\\n    /// @notice it represents the type of vToken income\\n    enum IncomeType {\\n        SPREAD,\\n        LIQUIDATION\\n    }\\n\\n    function updateAssetsState(\\n        address comptroller,\\n        address asset,\\n        IncomeType incomeType\\n    ) external;\\n}\\n\",\"keccak256\":\"0x5fddc5b63fdd850b3b5c83576cda50dcb27a205dbb1a23af17d9da0d9f04fa0a\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { SECONDS_PER_YEAR } from \\\"./constants.sol\\\";\\n\\nabstract contract TimeManagerV8 {\\n    /// @notice Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 public immutable blocksOrSecondsPerYear;\\n\\n    /// @notice Acknowledges if a contract is time based or not\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    bool public immutable isTimeBased;\\n\\n    /// @notice Stores the current block timestamp or block number depending on isTimeBased\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    function() view returns (uint256) private immutable _getCurrentSlot;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n\\n    /// @notice Thrown when blocks per year is invalid\\n    error InvalidBlocksPerYear();\\n\\n    /// @notice Thrown when time based but blocks per year is provided\\n    error InvalidTimeBasedConfiguration();\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block\\n     * If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:error InvalidBlocksPerYear is thrown if blocksPerYear entered is zero and timeBased is false\\n     * @custom:error InvalidTimeBasedConfiguration is thrown if blocksPerYear entered is non zero and timeBased is true\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) {\\n        if (!timeBased_ && blocksPerYear_ == 0) {\\n            revert InvalidBlocksPerYear();\\n        }\\n\\n        if (timeBased_ && blocksPerYear_ != 0) {\\n            revert InvalidTimeBasedConfiguration();\\n        }\\n\\n        isTimeBased = timeBased_;\\n        blocksOrSecondsPerYear = timeBased_ ? SECONDS_PER_YEAR : blocksPerYear_;\\n        _getCurrentSlot = timeBased_ ? _getBlockTimestamp : _getBlockNumber;\\n    }\\n\\n    /**\\n     * @dev Function to simply retrieve block number or block timestamp\\n     * @return Current block number or block timestamp\\n     */\\n    function getBlockNumberOrTimestamp() public view virtual returns (uint256) {\\n        return _getCurrentSlot();\\n    }\\n\\n    /**\\n     * @dev Returns the current timestamp in seconds\\n     * @return The current timestamp\\n     */\\n    function _getBlockTimestamp() private view returns (uint256) {\\n        return block.timestamp;\\n    }\\n\\n    /**\\n     * @dev Returns the current block number\\n     * @return The current block number\\n     */\\n    function _getBlockNumber() private view returns (uint256) {\\n        return block.number;\\n    }\\n}\\n\",\"keccak256\":\"0x57a2bbb9b8e02b1c0a5c0e305fef1328a22db56c3d4b148c362010a6e767243c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\",\"keccak256\":\"0x14de93ead464da249af31bea0e3bcfb62ec693bea3475fb4d90f055ac81dc5eb\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { PrimeStorageV1 } from \\\"../PrimeStorage.sol\\\";\\n\\n/**\\n * @title IPrime\\n * @author Venus\\n * @notice Interface for Prime Token\\n */\\ninterface IPrime {\\n    struct APRInfo {\\n        // supply APR of the user in BPS\\n        uint256 supplyAPR;\\n        // borrow APR of the user in BPS\\n        uint256 borrowAPR;\\n        // total score of the market\\n        uint256 totalScore;\\n        // score of the user\\n        uint256 userScore;\\n        // capped XVS balance of the user\\n        uint256 xvsBalanceForScore;\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    struct Capital {\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    /**\\n     * @notice Returns boosted pending interest accrued for a user for all markets\\n     * @param user the account for which to get the accrued interests\\n     * @return pendingRewards the number of underlying tokens accrued by the user for all markets\\n     */\\n    function getPendingRewards(address user) external returns (PrimeStorageV1.PendingReward[] memory pendingRewards);\\n\\n    /**\\n     * @notice Update total score of multiple users and market\\n     * @param users accounts for which we need to update score\\n     */\\n    function updateScores(address[] memory users) external;\\n\\n    /**\\n     * @notice Update value of alpha\\n     * @param _alphaNumerator numerator of alpha. If alpha is 0.5 then numerator is 1\\n     * @param _alphaDenominator denominator of alpha. If alpha is 0.5 then denominator is 2\\n     */\\n    function updateAlpha(uint128 _alphaNumerator, uint128 _alphaDenominator) external;\\n\\n    /**\\n     * @notice Update multipliers for a market\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier new supply multiplier for the market, scaled by 1e18\\n     * @param borrowMultiplier new borrow multiplier for the market, scaled by 1e18\\n     */\\n    function updateMultipliers(address market, uint256 supplyMultiplier, uint256 borrowMultiplier) external;\\n\\n    /**\\n     * @notice Add a market to prime program\\n     * @param comptroller address of the comptroller\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier the multiplier for supply cap. It should be converted to 1e18\\n     * @param borrowMultiplier the multiplier for borrow cap. It should be converted to 1e18\\n     */\\n    function addMarket(\\n        address comptroller,\\n        address market,\\n        uint256 supplyMultiplier,\\n        uint256 borrowMultiplier\\n    ) external;\\n\\n    /**\\n     * @notice Set limits for total tokens that can be minted\\n     * @param _irrevocableLimit total number of irrevocable tokens that can be minted\\n     * @param _revocableLimit total number of revocable tokens that can be minted\\n     */\\n    function setLimit(uint256 _irrevocableLimit, uint256 _revocableLimit) external;\\n\\n    /**\\n     * @notice Directly issue prime tokens to users\\n     * @param isIrrevocable are the tokens being issued\\n     * @param users list of address to issue tokens to\\n     */\\n    function issue(bool isIrrevocable, address[] calldata users) external;\\n\\n    /**\\n     * @notice Executed by XVSVault whenever user's XVSVault balance changes\\n     * @param user the account address whose balance was updated\\n     */\\n    function xvsUpdated(address user) external;\\n\\n    /**\\n     * @notice accrues interest and updates score for an user for a specific market\\n     * @param user the account address for which to accrue interest and update score\\n     * @param market the market for which to accrue interest and update score\\n     */\\n    function accrueInterestAndUpdateScore(address user, address market) external;\\n\\n    /**\\n     * @notice For claiming prime token when staking period is completed\\n     */\\n    function claim() external;\\n\\n    /**\\n     * @notice For burning any prime token\\n     * @param user the account address for which the prime token will be burned\\n     */\\n    function burn(address user) external;\\n\\n    /**\\n     * @notice To pause or unpause claiming of interest\\n     */\\n    function togglePause() external;\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken) external returns (uint256);\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @param user the user for which to claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Distributes income from market since last distribution\\n     * @param vToken the market for which to distribute the income\\n     */\\n    function accrueInterest(address vToken) external;\\n\\n    /**\\n     * @notice Returns boosted interest accrued for a user\\n     * @param vToken the market for which to fetch the accrued interest\\n     * @param user the account for which to get the accrued interest\\n     * @return interestAccrued the number of underlying tokens accrued by the user since the last accrual\\n     */\\n    function getInterestAccrued(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Retrieves an array of all available markets\\n     * @return an array of addresses representing all available markets\\n     */\\n    function getAllMarkets() external view returns (address[] memory);\\n\\n    /**\\n     * @notice fetch the numbers of seconds remaining for staking period to complete\\n     * @param user the account address for which we are checking the remaining time\\n     * @return timeRemaining the number of seconds the user needs to wait to claim prime token\\n     */\\n    function claimTimeRemaining(address user) external view returns (uint256);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for user for a given market\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function calculateAPR(address market, address user) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for estimated supply, borrow and XVS staked\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @param borrow hypothetical borrow amount\\n     * @param supply hypothetical supply amount\\n     * @param xvsStaked hypothetical staked XVS amount\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function estimateAPR(\\n        address market,\\n        address user,\\n        uint256 borrow,\\n        uint256 supply,\\n        uint256 xvsStaked\\n    ) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice the total income that's going to be distributed in a year to prime token holders\\n     * @param vToken the market for which to fetch the total income that's going to distributed in a year\\n     * @return amount the total income\\n     */\\n    function incomeDistributionYearly(address vToken) external view returns (uint256 amount);\\n\\n    /**\\n     * @notice Returns if user is a prime holder\\n     * @return isPrimeHolder true if user is a prime holder\\n     */\\n    function isUserPrimeHolder(address user) external view returns (bool);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param loopsLimit Number of loops limit\\n     */\\n    function setMaxLoopsLimit(uint256 loopsLimit) external;\\n\\n    /**\\n     * @notice Update staked at timestamp for multiple users\\n     * @param users accounts for which we need to update staked at timestamp\\n     * @param timestamps new staked at timestamp for the users\\n     */\\n    function setStakedAt(address[] calldata users, uint256[] calldata timestamps) external;\\n}\\n\",\"keccak256\":\"0xd112f60183416ad796093b4a83a80ddc1b8b655965f02ae55ca82e2a0c68f97d\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\n/**\\n * @title PrimeStorageV1\\n * @author Venus\\n * @notice Storage for Prime Token\\n */\\ncontract PrimeStorageV1 {\\n    struct Token {\\n        bool exists;\\n        bool isIrrevocable;\\n    }\\n\\n    struct Market {\\n        uint256 supplyMultiplier;\\n        uint256 borrowMultiplier;\\n        uint256 rewardIndex;\\n        uint256 sumOfMembersScore;\\n        bool exists;\\n    }\\n\\n    struct Interest {\\n        uint256 accrued;\\n        uint256 score;\\n        uint256 rewardIndex;\\n    }\\n\\n    struct PendingReward {\\n        address vToken;\\n        address rewardToken;\\n        uint256 amount;\\n    }\\n\\n    /// @notice Base unit for computations, usually used in scaling (multiplications, divisions)\\n    uint256 internal constant EXP_SCALE = 1e18;\\n\\n    /// @notice maximum BPS = 100%\\n    uint256 internal constant MAXIMUM_BPS = 1e4;\\n\\n    /// @notice Mapping to get prime token's metadata\\n    mapping(address => Token) public tokens;\\n\\n    /// @notice  Tracks total irrevocable tokens minted\\n    uint256 public totalIrrevocable;\\n\\n    /// @notice  Tracks total revocable tokens minted\\n    uint256 public totalRevocable;\\n\\n    /// @notice  Indicates maximum revocable tokens that can be minted\\n    uint256 public revocableLimit;\\n\\n    /// @notice  Indicates maximum irrevocable tokens that can be minted\\n    uint256 public irrevocableLimit;\\n\\n    /// @notice Tracks when prime token eligible users started staking for claiming prime token\\n    mapping(address => uint256) public stakedAt;\\n\\n    /// @notice vToken to market configuration\\n    mapping(address => Market) public markets;\\n\\n    /// @notice vToken to user to user index\\n    mapping(address => mapping(address => Interest)) public interests;\\n\\n    /// @notice A list of boosted markets\\n    address[] internal _allMarkets;\\n\\n    /// @notice numerator of alpha. Ex: if alpha is 0.5 then this will be 1\\n    uint128 public alphaNumerator;\\n\\n    /// @notice denominator of alpha. Ex: if alpha is 0.5 then this will be 2\\n    uint128 public alphaDenominator;\\n\\n    /// @notice address of XVS vault\\n    address public xvsVault;\\n\\n    /// @notice address of XVS vault reward token\\n    address public xvsVaultRewardToken;\\n\\n    /// @notice address of XVS vault pool id\\n    uint256 public xvsVaultPoolId;\\n\\n    /// @notice mapping to check if a account's score was updated in the round\\n    mapping(uint256 => mapping(address => bool)) public isScoreUpdated;\\n\\n    /// @notice unique id for next round\\n    uint256 public nextScoreUpdateRoundId;\\n\\n    /// @notice total number of accounts whose score needs to be updated\\n    uint256 public totalScoreUpdatesRequired;\\n\\n    /// @notice total number of accounts whose score is yet to be updated\\n    uint256 public pendingScoreUpdates;\\n\\n    /// @notice mapping used to find if an asset is part of prime markets\\n    mapping(address => address) public vTokenForAsset;\\n\\n    /// @notice Address of core pool comptroller contract\\n    address internal corePoolComptroller;\\n\\n    /// @notice unreleased income from PLP that's already distributed to prime holders\\n    /// @dev mapping of asset address => amount\\n    mapping(address => uint256) public unreleasedPLPIncome;\\n\\n    /// @notice The address of PLP contract\\n    address public primeLiquidityProvider;\\n\\n    /// @notice The address of ResilientOracle contract\\n    ResilientOracleInterface public oracle;\\n\\n    /// @notice The address of PoolRegistry contract\\n    address public poolRegistry;\\n\\n    /// @dev This empty reserved space is put in place to allow future versions to add new\\n    /// variables without shifting down storage in the inheritance chain.\\n    uint256[26] private __gap;\\n}\\n\",\"keccak256\":\"0x5285c875114db2ea2be0b81b65722d5761806217022db733323c4e03365a95e7\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[{"astId":414,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":417,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":2820,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":118,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"_owner","offset":0,"slot":"51","type":"t_address"},{"astId":238,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"__gap","offset":0,"slot":"52","type":"t_array(t_uint256)49_storage"},{"astId":11,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"_pendingOwner","offset":0,"slot":"101","type":"t_address"},{"astId":105,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"__gap","offset":0,"slot":"102","type":"t_array(t_uint256)49_storage"},{"astId":4895,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"_accessControlManager","offset":0,"slot":"151","type":"t_contract(IAccessControlManagerV8)5080"},{"astId":4900,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"__gap","offset":0,"slot":"152","type":"t_array(t_uint256)49_storage"},{"astId":15526,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"_notEntered","offset":0,"slot":"201","type":"t_bool"},{"astId":15529,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"underlying","offset":1,"slot":"201","type":"t_address"},{"astId":15532,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"name","offset":0,"slot":"202","type":"t_string_storage"},{"astId":15535,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"symbol","offset":0,"slot":"203","type":"t_string_storage"},{"astId":15538,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"decimals","offset":0,"slot":"204","type":"t_uint8"},{"astId":15541,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"protocolShareReserve","offset":1,"slot":"204","type":"t_address_payable"},{"astId":15545,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"comptroller","offset":0,"slot":"205","type":"t_contract(ComptrollerInterface)9353"},{"astId":15549,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"interestRateModel","offset":0,"slot":"206","type":"t_contract(InterestRateModel)10266"},{"astId":15551,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"initialExchangeRateMantissa","offset":0,"slot":"207","type":"t_uint256"},{"astId":15554,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"reserveFactorMantissa","offset":0,"slot":"208","type":"t_uint256"},{"astId":15557,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"accrualBlockNumber","offset":0,"slot":"209","type":"t_uint256"},{"astId":15560,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"borrowIndex","offset":0,"slot":"210","type":"t_uint256"},{"astId":15563,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"totalBorrows","offset":0,"slot":"211","type":"t_uint256"},{"astId":15566,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"totalReserves","offset":0,"slot":"212","type":"t_uint256"},{"astId":15569,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"totalSupply","offset":0,"slot":"213","type":"t_uint256"},{"astId":15572,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"badDebt","offset":0,"slot":"214","type":"t_uint256"},{"astId":15576,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"accountTokens","offset":0,"slot":"215","type":"t_mapping(t_address,t_uint256)"},{"astId":15582,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"transferAllowances","offset":0,"slot":"216","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":15587,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"accountBorrows","offset":0,"slot":"217","type":"t_mapping(t_address,t_struct(BorrowSnapshot)15523_storage)"},{"astId":15590,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"protocolSeizeShareMantissa","offset":0,"slot":"218","type":"t_uint256"},{"astId":15593,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"shortfall","offset":0,"slot":"219","type":"t_address"},{"astId":15596,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"reduceReservesBlockDelta","offset":0,"slot":"220","type":"t_uint256"},{"astId":15599,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"reduceReservesBlockNumber","offset":0,"slot":"221","type":"t_uint256"},{"astId":15604,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"__gap","offset":0,"slot":"222","type":"t_array(t_uint256)48_storage"},{"astId":16234,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"__gap","offset":0,"slot":"270","type":"t_array(t_uint256)48_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_address_payable":{"encoding":"inplace","label":"address payable","numberOfBytes":"20"},"t_array(t_uint256)48_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[48]","numberOfBytes":"1536"},"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(ComptrollerInterface)9353":{"encoding":"inplace","label":"contract ComptrollerInterface","numberOfBytes":"20"},"t_contract(IAccessControlManagerV8)5080":{"encoding":"inplace","label":"contract IAccessControlManagerV8","numberOfBytes":"20"},"t_contract(InterestRateModel)10266":{"encoding":"inplace","label":"contract InterestRateModel","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(BorrowSnapshot)15523_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct VTokenStorage.BorrowSnapshot)","numberOfBytes":"32","value":"t_struct(BorrowSnapshot)15523_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(BorrowSnapshot)15523_storage":{"encoding":"inplace","label":"struct VTokenStorage.BorrowSnapshot","members":[{"astId":15520,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"principal","offset":0,"slot":"0","type":"t_uint256"},{"astId":15522,"contract":"@venusprotocol/isolated-pools/contracts/VToken.sol:VToken","label":"interestIndex","offset":0,"slot":"1","type":"t_uint256"}],"numberOfBytes":"64"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"errors":{"InvalidBlocksPerYear()":[{"notice":"Thrown when blocks per year is invalid"}],"InvalidTimeBasedConfiguration()":[{"notice":"Thrown when time based but blocks per year is provided"}],"Unauthorized(address,address,string)":[{"notice":"Thrown when the action is prohibited by AccessControlManager"}],"ZeroAddressNotAllowed()":[{"notice":"Thrown if the supplied address is a zero address where it is not allowed"}]},"events":{"AccrueInterest(uint256,uint256,uint256,uint256)":{"notice":"Event emitted when interest is accrued"},"Approval(address,address,uint256)":{"notice":"EIP20 Approval event"},"BadDebtIncreased(address,uint256,uint256,uint256)":{"notice":"Event emitted when bad debt is accumulated on a market"},"BadDebtRecovered(uint256,uint256)":{"notice":"Event emitted when bad debt is recovered via an auction"},"Borrow(address,uint256,uint256,uint256)":{"notice":"Event emitted when underlying is borrowed"},"HealBorrow(address,address,uint256)":{"notice":"Event emitted when healing the borrow"},"LiquidateBorrow(address,address,uint256,address,uint256)":{"notice":"Event emitted when a borrow is liquidated"},"Mint(address,uint256,uint256,uint256)":{"notice":"Event emitted when tokens are minted"},"NewAccessControlManager(address,address)":{"notice":"Emitted when access control manager contract address is changed"},"NewComptroller(address,address)":{"notice":"Event emitted when comptroller is changed"},"NewMarketInterestRateModel(address,address)":{"notice":"Event emitted when interestRateModel is changed"},"NewProtocolSeizeShare(uint256,uint256)":{"notice":"Event emitted when protocol seize share is changed"},"NewProtocolShareReserve(address,address)":{"notice":"Event emitted when protocol share reserve contract address is changed"},"NewReduceReservesBlockDelta(uint256,uint256)":{"notice":"Event emitted when reduce reserves slot (block or second) delta is changed"},"NewReserveFactor(uint256,uint256)":{"notice":"Event emitted when the reserve factor is changed"},"NewShortfallContract(address,address)":{"notice":"Event emitted when shortfall contract address is changed"},"ProtocolSeize(address,address,uint256)":{"notice":"Event emitted when liquidation reserves are reduced"},"Redeem(address,uint256,uint256,uint256)":{"notice":"Event emitted when tokens are redeemed"},"RepayBorrow(address,address,uint256,uint256,uint256)":{"notice":"Event emitted when a borrow is repaid"},"ReservesAdded(address,uint256,uint256)":{"notice":"Event emitted when the reserves are added"},"SpreadReservesReduced(address,uint256,uint256)":{"notice":"Event emitted when the spread reserves are reduced"},"SweepToken(address)":{"notice":"Event emitted when tokens are swept"},"Transfer(address,address,uint256)":{"notice":"EIP20 Transfer event"}},"kind":"user","methods":{"accessControlManager()":{"notice":"Returns the address of the access control manager contract"},"accrualBlockNumber()":{"notice":"Slot(block or second) number that interest was last accrued at"},"accrueInterest()":{"notice":"Applies accrued interest to total borrows and reserves"},"addReserves(uint256)":{"notice":"The sender adds to reserves."},"allowance(address,address)":{"notice":"Get the current allowance from `owner` for `spender`"},"approve(address,uint256)":{"notice":"Approve `spender` to transfer up to `amount` from `src`"},"badDebt()":{"notice":"Total bad debt of the market"},"badDebtRecovered(uint256)":{"notice":"Updates bad debt"},"balanceOf(address)":{"notice":"Get the token balance of the `owner`"},"balanceOfUnderlying(address)":{"notice":"Get the underlying balance of the `owner`"},"blocksOrSecondsPerYear()":{"notice":"Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored"},"borrow(uint256)":{"notice":"Sender borrows assets from the protocol to their own address"},"borrowBalanceCurrent(address)":{"notice":"Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex"},"borrowBalanceStored(address)":{"notice":"Return the borrow balance of account based on stored data"},"borrowBehalf(address,uint256)":{"notice":"Sender borrows assets on behalf of some other address. This function is only available   for senders, explicitly marked as delegates of the borrower using `comptroller.updateDelegate`"},"borrowIndex()":{"notice":"Accumulator of the total earned interest rate since the opening of the market"},"borrowRatePerBlock()":{"notice":"Returns the current per slot(block or second) borrow interest rate for this vToken"},"comptroller()":{"notice":"Contract which oversees inter-vToken operations"},"decimals()":{"notice":"EIP-20 token decimals for this token"},"decreaseAllowance(address,uint256)":{"notice":"Decreases approval for `spender`"},"exchangeRateCurrent()":{"notice":"Accrue interest then return the up-to-date exchange rate"},"exchangeRateStored()":{"notice":"Calculates the exchange rate from the underlying to the VToken"},"forceLiquidateBorrow(address,address,uint256,address,bool)":{"notice":"The extended version of liquidations, callable only by Comptroller. May skip  the close factor check. The collateral seized is transferred to the liquidator."},"getAccountSnapshot(address)":{"notice":"Get a snapshot of the account's balances, and the cached exchange rate"},"getCash()":{"notice":"Get cash balance of this vToken in the underlying asset"},"healBorrow(address,address,uint256)":{"notice":"Repays a certain amount of debt, treats the rest of the borrow as bad debt, essentially   \"forgiving\" the borrower. Healing is a situation that should rarely happen. However, some pools   may list risky assets or be configured improperly – we want to still handle such cases gracefully.   We assume that Comptroller does the seizing, so this function is only available to Comptroller."},"increaseAllowance(address,uint256)":{"notice":"Increase approval for `spender`"},"initialize(address,address,address,uint256,string,string,uint8,address,address,(address,address),uint256)":{"notice":"Construct a new money market"},"interestRateModel()":{"notice":"Model which tells what the current interest rate should be"},"isTimeBased()":{"notice":"Acknowledges if a contract is time based or not"},"isVToken()":{"notice":"Indicator that this is a VToken contract (for inspection)"},"liquidateBorrow(address,uint256,address)":{"notice":"The sender liquidates the borrowers collateral.  The collateral seized is transferred to the liquidator."},"mint(uint256)":{"notice":"Sender supplies assets into the market and receives vTokens in exchange"},"mintBehalf(address,uint256)":{"notice":"Sender calls on-behalf of minter. minter supplies assets into the market and receives vTokens in exchange"},"name()":{"notice":"EIP-20 token name for this token"},"protocolSeizeShareMantissa()":{"notice":"Share of seized collateral that is added to reserves"},"protocolShareReserve()":{"notice":"Protocol share Reserve contract address"},"redeem(uint256)":{"notice":"Sender redeems vTokens in exchange for the underlying asset"},"redeemBehalf(address,uint256)":{"notice":"Sender redeems assets on behalf of some other address. This function is only available   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`"},"redeemUnderlying(uint256)":{"notice":"Sender redeems vTokens in exchange for a specified amount of underlying asset"},"redeemUnderlyingBehalf(address,uint256)":{"notice":"Sender redeems underlying assets on behalf of some other address. This function is only available   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`"},"reduceReserves(uint256)":{"notice":"Accrues interest and reduces reserves by transferring to the protocol reserve contract"},"reduceReservesBlockDelta()":{"notice":"delta slot (block or second) after which reserves will be reduced"},"reduceReservesBlockNumber()":{"notice":"last slot (block or second) number at which reserves were reduced"},"repayBorrow(uint256)":{"notice":"Sender repays their own borrow"},"repayBorrowBehalf(address,uint256)":{"notice":"Sender repays a borrow belonging to borrower"},"reserveFactorMantissa()":{"notice":"Fraction of interest currently set aside for reserves"},"seize(address,address,uint256)":{"notice":"Transfers collateral tokens (this market) to the liquidator."},"setAccessControlManager(address)":{"notice":"Sets the address of AccessControlManager"},"setInterestRateModel(address)":{"notice":"accrues interest and updates the interest rate model using _setInterestRateModelFresh"},"setProtocolSeizeShare(uint256)":{"notice":"sets protocol share accumulated from liquidations"},"setProtocolShareReserve(address)":{"notice":"Sets protocol share reserve contract address"},"setReduceReservesBlockDelta(uint256)":{"notice":"A public function to set new threshold of slot(block or second) difference after which funds will be sent to the protocol share reserve"},"setReserveFactor(uint256)":{"notice":"accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh"},"setShortfallContract(address)":{"notice":"Sets shortfall contract address"},"shortfall()":{"notice":"Storage of Shortfall contract address"},"supplyRatePerBlock()":{"notice":"Returns the current per-slot(block or second) supply interest rate for this v"},"sweepToken(address)":{"notice":"A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)"},"symbol()":{"notice":"EIP-20 token symbol for this token"},"totalBorrows()":{"notice":"Total amount of outstanding borrows of the underlying in this market"},"totalBorrowsCurrent()":{"notice":"Returns the current total borrows plus accrued interest"},"totalReserves()":{"notice":"Total amount of reserves of the underlying held in this market"},"totalSupply()":{"notice":"Total number of tokens in circulation"},"transfer(address,uint256)":{"notice":"Transfer `amount` tokens from `msg.sender` to `dst`"},"transferFrom(address,address,uint256)":{"notice":"Transfer `amount` tokens from `src` to `dst`"},"underlying()":{"notice":"Underlying asset for this VToken"}},"notice":"Each asset that is supported by a pool is integrated through an instance of the `VToken` contract. As outlined in the protocol overview, each isolated pool creates its own `vToken` corresponding to an asset. Within a given pool, each included `vToken` is referred to as a market of the pool. The main actions a user regularly interacts with in a market are: - mint/redeem of vTokens; - transfer of vTokens; - borrow/repay a loan on an underlying asset; - liquidate a borrow or liquidate/heal an account. A user supplies the underlying asset to a pool by minting `vTokens`, where the corresponding `vToken` amount is determined by the `exchangeRate`. The `exchangeRate` will change over time, dependent on a number of factors, some of which accrue interest. Additionally, once users have minted `vToken` in a pool, they can borrow any asset in the isolated pool by using their `vToken` as collateral. In order to borrow an asset or use a `vToken` as collateral, the user must be entered into each corresponding market (else, the `vToken` will not be considered collateral for a borrow). Note that a user may borrow up to a portion of their collateral determined by the market’s collateral factor. However, if their borrowed amount exceeds an amount calculated using the market’s corresponding liquidation threshold, the borrow is eligible for liquidation. When a user repays a borrow, they must also pay off interest accrued on the borrow.  The Venus protocol includes unique mechanisms for healing an account and liquidating an account. These actions are performed in the `Comptroller` and consider all borrows and collateral for which a given account is entered within a market. These functions may only be called on an account with a total collateral amount that is no larger than a universal `minLiquidatableCollateral` value, which is used for all markets within a `Comptroller`. Both functions settle all of an account’s borrows, but `healAccount()` may add `badDebt` to a vToken. For more detail, see the description of `healAccount()` and `liquidateAccount()` in the `Comptroller` summary section below.","version":1}}},"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol":{"VTokenInterface":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"cashPrior","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"interestAccumulated","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"borrowIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBorrows","type":"uint256"}],"name":"AccrueInterest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"badDebtDelta","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"badDebtOld","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"badDebtNew","type":"uint256"}],"name":"BadDebtIncreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"badDebtOld","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"badDebtNew","type":"uint256"}],"name":"BadDebtRecovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"borrowAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accountBorrows","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBorrows","type":"uint256"}],"name":"Borrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payer","type":"address"},{"indexed":true,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"repayAmount","type":"uint256"}],"name":"HealBorrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"liquidator","type":"address"},{"indexed":true,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"repayAmount","type":"uint256"},{"indexed":true,"internalType":"address","name":"vTokenCollateral","type":"address"},{"indexed":false,"internalType":"uint256","name":"seizeTokens","type":"uint256"}],"name":"LiquidateBorrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"mintAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accountBalance","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract ComptrollerInterface","name":"oldComptroller","type":"address"},{"indexed":true,"internalType":"contract ComptrollerInterface","name":"newComptroller","type":"address"}],"name":"NewComptroller","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract InterestRateModel","name":"oldInterestRateModel","type":"address"},{"indexed":true,"internalType":"contract InterestRateModel","name":"newInterestRateModel","type":"address"}],"name":"NewMarketInterestRateModel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldProtocolSeizeShareMantissa","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newProtocolSeizeShareMantissa","type":"uint256"}],"name":"NewProtocolSeizeShare","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldProtocolShareReserve","type":"address"},{"indexed":true,"internalType":"address","name":"newProtocolShareReserve","type":"address"}],"name":"NewProtocolShareReserve","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldReduceReservesBlockOrTimestampDelta","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newReduceReservesBlockOrTimestampDelta","type":"uint256"}],"name":"NewReduceReservesBlockDelta","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldReserveFactorMantissa","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newReserveFactorMantissa","type":"uint256"}],"name":"NewReserveFactor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldShortfall","type":"address"},{"indexed":true,"internalType":"address","name":"newShortfall","type":"address"}],"name":"NewShortfallContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSeize","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"redeemer","type":"address"},{"indexed":false,"internalType":"uint256","name":"redeemAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"redeemTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accountBalance","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payer","type":"address"},{"indexed":true,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"repayAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accountBorrows","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBorrows","type":"uint256"}],"name":"RepayBorrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"benefactor","type":"address"},{"indexed":false,"internalType":"uint256","name":"addAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalReserves","type":"uint256"}],"name":"ReservesAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protocolShareReserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"reduceAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalReserves","type":"uint256"}],"name":"SpreadReservesReduced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"SweepToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"accrualBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accrueInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"addAmount","type":"uint256"}],"name":"addReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"badDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOfUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"borrowAmount","type":"uint256"}],"name":"borrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"borrowBalanceCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"borrowBalanceStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"borrwwer","type":"address"},{"internalType":"uint256","name":"borrowAmount","type":"uint256"}],"name":"borrowBehalf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"borrowIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"borrowRatePerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"comptroller","outputs":[{"internalType":"contract ComptrollerInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exchangeRateCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exchangeRateStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"liquidator","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"},{"internalType":"contract VTokenInterface","name":"vTokenCollateral","type":"address"},{"internalType":"bool","name":"skipCloseFactorCheck","type":"bool"}],"name":"forceLiquidateBorrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountSnapshot","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"payer","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"}],"name":"healBorrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"interestRateModel","outputs":[{"internalType":"contract InterestRateModel","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isVToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"},{"internalType":"contract VTokenInterface","name":"vTokenCollateral","type":"address"}],"name":"liquidateBorrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"},{"internalType":"uint256","name":"mintAllowed","type":"uint256"}],"name":"mintBehalf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolSeizeShareMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolShareReserve","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"redeemTokens","type":"uint256"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"redeemer","type":"address"},{"internalType":"uint256","name":"redeemTokens","type":"uint256"}],"name":"redeemBehalf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redeemAmount","type":"uint256"}],"name":"redeemUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"redeemer","type":"address"},{"internalType":"uint256","name":"redeemAmount","type":"uint256"}],"name":"redeemUnderlyingBehalf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reduceAmount","type":"uint256"}],"name":"reduceReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reduceReservesBlockDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reduceReservesBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"repayAmount","type":"uint256"}],"name":"repayBorrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"}],"name":"repayBorrowBehalf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveFactorMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"liquidator","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"seizeTokens","type":"uint256"}],"name":"seize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract InterestRateModel","name":"newInterestRateModel","type":"address"}],"name":"setInterestRateModel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newReserveFactorMantissa","type":"uint256"}],"name":"setReserveFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shortfall","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supplyRatePerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20Upgradeable","name":"token","type":"address"}],"name":"sweepToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBorrows","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBorrowsCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Venus","events":{"BadDebtIncreased(address,uint256,uint256,uint256)":{"params":{"badDebtDelta":"amount of new bad debt recorded","badDebtNew":"new bad debt value","badDebtOld":"previous bad debt value","borrower":"borrower to \"forgive\""}},"BadDebtRecovered(uint256,uint256)":{"params":{"badDebtNew":"new bad debt value","badDebtOld":"previous bad debt value"}}},"kind":"dev","methods":{"isVToken()":{"returns":{"_0":"Always true"}}},"title":"VTokenInterface","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"accrualBlockNumber()":"6c540baf","accrueInterest()":"a6afed95","addReserves(uint256)":"7821a514","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","badDebt()":"bbcac557","balanceOf(address)":"70a08231","balanceOfUnderlying(address)":"3af9e669","borrow(uint256)":"c5ebeaec","borrowBalanceCurrent(address)":"17bfdfbc","borrowBalanceStored(address)":"95dd9193","borrowBehalf(address,uint256)":"856e5bb3","borrowIndex()":"aa5af0fd","borrowRatePerBlock()":"f8f9da28","comptroller()":"5fe3b567","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","exchangeRateCurrent()":"bd6d894d","exchangeRateStored()":"182df0f5","forceLiquidateBorrow(address,address,uint256,address,bool)":"8bbdb6db","getAccountSnapshot(address)":"c37f68e2","getCash()":"3b1d21a2","healBorrow(address,address,uint256)":"44fe6ffe","increaseAllowance(address,uint256)":"39509351","interestRateModel()":"f3fdb15a","isVToken()":"3d9ea3a1","liquidateBorrow(address,uint256,address)":"f5e3c462","mint(uint256)":"a0712d68","mintBehalf(address,uint256)":"23323e03","name()":"06fdde03","protocolSeizeShareMantissa()":"6752e702","protocolShareReserve()":"e9a44fd9","redeem(uint256)":"db006a75","redeemBehalf(address,uint256)":"210bc052","redeemUnderlying(uint256)":"852a12e3","redeemUnderlyingBehalf(address,uint256)":"df3a516e","reduceReserves(uint256)":"07e27959","reduceReservesBlockDelta()":"d1109c2f","reduceReservesBlockNumber()":"ae96f141","repayBorrow(uint256)":"0e752702","repayBorrowBehalf(address,uint256)":"2608f818","reserveFactorMantissa()":"173b9904","seize(address,address,uint256)":"b2a02ff1","setInterestRateModel(address)":"8bcd4016","setReserveFactor(uint256)":"1c446983","shortfall()":"19b1faef","supplyRatePerBlock()":"ae9d70b0","sweepToken(address)":"1be19560","symbol()":"95d89b41","totalBorrows()":"47bd3718","totalBorrowsCurrent()":"73acee98","totalReserves()":"8f840ddd","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","underlying()":"6f307dc3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cashPrior\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"interestAccumulated\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBorrows\",\"type\":\"uint256\"}],\"name\":\"AccrueInterest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"badDebtDelta\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"badDebtOld\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"badDebtNew\",\"type\":\"uint256\"}],\"name\":\"BadDebtIncreased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"badDebtOld\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"badDebtNew\",\"type\":\"uint256\"}],\"name\":\"BadDebtRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"accountBorrows\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBorrows\",\"type\":\"uint256\"}],\"name\":\"Borrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"}],\"name\":\"HealBorrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"vTokenCollateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"seizeTokens\",\"type\":\"uint256\"}],\"name\":\"LiquidateBorrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintTokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"accountBalance\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ComptrollerInterface\",\"name\":\"oldComptroller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract ComptrollerInterface\",\"name\":\"newComptroller\",\"type\":\"address\"}],\"name\":\"NewComptroller\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract InterestRateModel\",\"name\":\"oldInterestRateModel\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract InterestRateModel\",\"name\":\"newInterestRateModel\",\"type\":\"address\"}],\"name\":\"NewMarketInterestRateModel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldProtocolSeizeShareMantissa\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newProtocolSeizeShareMantissa\",\"type\":\"uint256\"}],\"name\":\"NewProtocolSeizeShare\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldProtocolShareReserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newProtocolShareReserve\",\"type\":\"address\"}],\"name\":\"NewProtocolShareReserve\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldReduceReservesBlockOrTimestampDelta\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newReduceReservesBlockOrTimestampDelta\",\"type\":\"uint256\"}],\"name\":\"NewReduceReservesBlockDelta\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldReserveFactorMantissa\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newReserveFactorMantissa\",\"type\":\"uint256\"}],\"name\":\"NewReserveFactor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldShortfall\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newShortfall\",\"type\":\"address\"}],\"name\":\"NewShortfallContract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSeize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"redeemAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"accountBalance\",\"type\":\"uint256\"}],\"name\":\"Redeem\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"accountBorrows\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBorrows\",\"type\":\"uint256\"}],\"name\":\"RepayBorrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"benefactor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"addAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalReserves\",\"type\":\"uint256\"}],\"name\":\"ReservesAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolShareReserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reduceAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalReserves\",\"type\":\"uint256\"}],\"name\":\"SpreadReservesReduced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SweepToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"accrualBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"accrueInterest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"addAmount\",\"type\":\"uint256\"}],\"name\":\"addReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"badDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOfUnderlying\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"}],\"name\":\"borrow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"borrowBalanceCurrent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"borrowBalanceStored\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrwwer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"}],\"name\":\"borrowBehalf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowRatePerBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"comptroller\",\"outputs\":[{\"internalType\":\"contract ComptrollerInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeRateCurrent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeRateStored\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"internalType\":\"contract VTokenInterface\",\"name\":\"vTokenCollateral\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"skipCloseFactorCheck\",\"type\":\"bool\"}],\"name\":\"forceLiquidateBorrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getAccountSnapshot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCash\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"}],\"name\":\"healBorrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"interestRateModel\",\"outputs\":[{\"internalType\":\"contract InterestRateModel\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"internalType\":\"contract VTokenInterface\",\"name\":\"vTokenCollateral\",\"type\":\"address\"}],\"name\":\"liquidateBorrow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"mintAllowed\",\"type\":\"uint256\"}],\"name\":\"mintBehalf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolSeizeShareMantissa\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolShareReserve\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"}],\"name\":\"redeemBehalf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"redeemAmount\",\"type\":\"uint256\"}],\"name\":\"redeemUnderlying\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"redeemAmount\",\"type\":\"uint256\"}],\"name\":\"redeemUnderlyingBehalf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reduceAmount\",\"type\":\"uint256\"}],\"name\":\"reduceReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reduceReservesBlockDelta\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reduceReservesBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"}],\"name\":\"repayBorrow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"}],\"name\":\"repayBorrowBehalf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reserveFactorMantissa\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"seizeTokens\",\"type\":\"uint256\"}],\"name\":\"seize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract InterestRateModel\",\"name\":\"newInterestRateModel\",\"type\":\"address\"}],\"name\":\"setInterestRateModel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newReserveFactorMantissa\",\"type\":\"uint256\"}],\"name\":\"setReserveFactor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shortfall\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supplyRatePerBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Upgradeable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBorrows\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBorrowsCurrent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlying\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"events\":{\"BadDebtIncreased(address,uint256,uint256,uint256)\":{\"params\":{\"badDebtDelta\":\"amount of new bad debt recorded\",\"badDebtNew\":\"new bad debt value\",\"badDebtOld\":\"previous bad debt value\",\"borrower\":\"borrower to \\\"forgive\\\"\"}},\"BadDebtRecovered(uint256,uint256)\":{\"params\":{\"badDebtNew\":\"new bad debt value\",\"badDebtOld\":\"previous bad debt value\"}}},\"kind\":\"dev\",\"methods\":{\"isVToken()\":{\"returns\":{\"_0\":\"Always true\"}}},\"title\":\"VTokenInterface\",\"version\":1},\"userdoc\":{\"events\":{\"AccrueInterest(uint256,uint256,uint256,uint256)\":{\"notice\":\"Event emitted when interest is accrued\"},\"Approval(address,address,uint256)\":{\"notice\":\"EIP20 Approval event\"},\"BadDebtIncreased(address,uint256,uint256,uint256)\":{\"notice\":\"Event emitted when bad debt is accumulated on a market\"},\"BadDebtRecovered(uint256,uint256)\":{\"notice\":\"Event emitted when bad debt is recovered via an auction\"},\"Borrow(address,uint256,uint256,uint256)\":{\"notice\":\"Event emitted when underlying is borrowed\"},\"HealBorrow(address,address,uint256)\":{\"notice\":\"Event emitted when healing the borrow\"},\"LiquidateBorrow(address,address,uint256,address,uint256)\":{\"notice\":\"Event emitted when a borrow is liquidated\"},\"Mint(address,uint256,uint256,uint256)\":{\"notice\":\"Event emitted when tokens are minted\"},\"NewComptroller(address,address)\":{\"notice\":\"Event emitted when comptroller is changed\"},\"NewMarketInterestRateModel(address,address)\":{\"notice\":\"Event emitted when interestRateModel is changed\"},\"NewProtocolSeizeShare(uint256,uint256)\":{\"notice\":\"Event emitted when protocol seize share is changed\"},\"NewProtocolShareReserve(address,address)\":{\"notice\":\"Event emitted when protocol share reserve contract address is changed\"},\"NewReduceReservesBlockDelta(uint256,uint256)\":{\"notice\":\"Event emitted when reduce reserves slot (block or second) delta is changed\"},\"NewReserveFactor(uint256,uint256)\":{\"notice\":\"Event emitted when the reserve factor is changed\"},\"NewShortfallContract(address,address)\":{\"notice\":\"Event emitted when shortfall contract address is changed\"},\"ProtocolSeize(address,address,uint256)\":{\"notice\":\"Event emitted when liquidation reserves are reduced\"},\"Redeem(address,uint256,uint256,uint256)\":{\"notice\":\"Event emitted when tokens are redeemed\"},\"RepayBorrow(address,address,uint256,uint256,uint256)\":{\"notice\":\"Event emitted when a borrow is repaid\"},\"ReservesAdded(address,uint256,uint256)\":{\"notice\":\"Event emitted when the reserves are added\"},\"SpreadReservesReduced(address,uint256,uint256)\":{\"notice\":\"Event emitted when the spread reserves are reduced\"},\"SweepToken(address)\":{\"notice\":\"Event emitted when tokens are swept\"},\"Transfer(address,address,uint256)\":{\"notice\":\"EIP20 Transfer event\"}},\"kind\":\"user\",\"methods\":{\"accrualBlockNumber()\":{\"notice\":\"Slot(block or second) number that interest was last accrued at\"},\"badDebt()\":{\"notice\":\"Total bad debt of the market\"},\"borrowIndex()\":{\"notice\":\"Accumulator of the total earned interest rate since the opening of the market\"},\"comptroller()\":{\"notice\":\"Contract which oversees inter-vToken operations\"},\"decimals()\":{\"notice\":\"EIP-20 token decimals for this token\"},\"interestRateModel()\":{\"notice\":\"Model which tells what the current interest rate should be\"},\"isVToken()\":{\"notice\":\"Indicator that this is a VToken contract (for inspection)\"},\"name()\":{\"notice\":\"EIP-20 token name for this token\"},\"protocolSeizeShareMantissa()\":{\"notice\":\"Share of seized collateral that is added to reserves\"},\"protocolShareReserve()\":{\"notice\":\"Protocol share Reserve contract address\"},\"reduceReservesBlockDelta()\":{\"notice\":\"delta slot (block or second) after which reserves will be reduced\"},\"reduceReservesBlockNumber()\":{\"notice\":\"last slot (block or second) number at which reserves were reduced\"},\"reserveFactorMantissa()\":{\"notice\":\"Fraction of interest currently set aside for reserves\"},\"shortfall()\":{\"notice\":\"Storage of Shortfall contract address\"},\"symbol()\":{\"notice\":\"EIP-20 token symbol for this token\"},\"totalBorrows()\":{\"notice\":\"Total amount of outstanding borrows of the underlying in this market\"},\"totalReserves()\":{\"notice\":\"Total amount of reserves of the underlying held in this market\"},\"totalSupply()\":{\"notice\":\"Total number of tokens in circulation\"},\"underlying()\":{\"notice\":\"Underlying asset for this VToken\"}},\"notice\":\"Interface implemented by the `VToken` contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol\":\"VTokenInterface\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./OwnableUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership} and {acceptOwnership}.\\n *\\n * This module is used through inheritance. It will make available all functions\\n * from parent (Ownable).\\n */\\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\\n    address private _pendingOwner;\\n\\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\\n\\n    function __Ownable2Step_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable2Step_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Returns the address of the pending owner.\\n     */\\n    function pendingOwner() public view virtual returns (address) {\\n        return _pendingOwner;\\n    }\\n\\n    /**\\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\\n        _pendingOwner = newOwner;\\n        emit OwnershipTransferStarted(owner(), newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual override {\\n        delete _pendingOwner;\\n        super._transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev The new owner accepts the ownership transfer.\\n     */\\n    function acceptOwnership() public virtual {\\n        address sender = _msgSender();\\n        require(pendingOwner() == sender, \\\"Ownable2Step: caller is not the new owner\\\");\\n        _transferOwnership(sender);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x9140dabc466abab21b48b72dbda26736b1183a310d0e677d3719d201df026510\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * ==== Security Considerations\\n *\\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\\n * generally recommended is:\\n *\\n * ```solidity\\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\\n *     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\\n *     doThing(..., value);\\n * }\\n *\\n * function doThing(..., uint256 value) public {\\n *     token.safeTransferFrom(msg.sender, address(this), value);\\n *     ...\\n * }\\n * ```\\n *\\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\\n * {SafeERC20-safeTransferFrom}).\\n *\\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\\n * contracts should have entry points that don't rely on permit.\\n */\\ninterface IERC20PermitUpgradeable {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     *\\n     * CAUTION: See Security Considerations above.\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x07e881de3b9f6d2c07909f193f24b96c7fe4ea60013260f3f25aecd8bab3c2f8\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\nimport \\\"../extensions/IERC20PermitUpgradeable.sol\\\";\\nimport \\\"../../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20Upgradeable {\\n    using AddressUpgradeable for address;\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransfer(IERC20Upgradeable token, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    /**\\n     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeIncreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        uint256 oldAllowance = token.allowance(address(this), spender);\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));\\n    }\\n\\n    /**\\n     * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeDecreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));\\n        }\\n    }\\n\\n    /**\\n     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n     * to be set to zero before setting it to a non-zero value, such as USDT.\\n     */\\n    function forceApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);\\n\\n        if (!_callOptionalReturnBool(token, approvalCall)) {\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));\\n            _callOptionalReturn(token, approvalCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.\\n     * Revert on invalid signature.\\n     */\\n    function safePermit(\\n        IERC20PermitUpgradeable token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20Upgradeable token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        require(returndata.length == 0 || abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     *\\n     * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\\n     */\\n    function _callOptionalReturnBool(IERC20Upgradeable token, bytes memory data) private returns (bool) {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\\n        // and not revert is the subcall reverts.\\n\\n        (bool success, bytes memory returndata) = address(token).call(data);\\n        return\\n            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && AddressUpgradeable.isContract(address(token));\\n    }\\n}\\n\",\"keccak256\":\"0x23b997be73d3dd46885262704f0f8cfc7273fdadfe303d37969a9561373972b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n    /**\\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n     *\\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n     * {RoleAdminChanged} not being emitted signaling this.\\n     *\\n     * _Available since v3.1._\\n     */\\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n    /**\\n     * @dev Emitted when `account` is granted `role`.\\n     *\\n     * `sender` is the account that originated the contract call, an admin role\\n     * bearer except when using {AccessControl-_setupRole}.\\n     */\\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Emitted when `account` is revoked `role`.\\n     *\\n     * `sender` is the account that originated the contract call:\\n     *   - if using `revokeRole`, it is the admin role bearer\\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n     */\\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Returns `true` if `account` has been granted `role`.\\n     */\\n    function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n    /**\\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\\n     * {revokeRole}.\\n     *\\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n     */\\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n    /**\\n     * @dev Grants `role` to `account`.\\n     *\\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function grantRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from `account`.\\n     *\\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function revokeRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from the calling account.\\n     *\\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n     * purpose is to provide a mechanism for accounts to lose their privileges\\n     * if they are compromised (such as when a trusted device is misplaced).\\n     *\\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must be `account`.\\n     */\\n    function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\n\\nimport \\\"./IAccessControlManagerV8.sol\\\";\\n\\n/**\\n * @title AccessControlledV8\\n * @author Venus\\n * @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\\n * to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\\n */\\nabstract contract AccessControlledV8 is Initializable, Ownable2StepUpgradeable {\\n    /// @notice Access control manager contract\\n    IAccessControlManagerV8 internal _accessControlManager;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when access control manager contract address is changed\\n    event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager);\\n\\n    /// @notice Thrown when the action is prohibited by AccessControlManager\\n    error Unauthorized(address sender, address calledContract, string methodSignature);\\n\\n    function __AccessControlled_init(address accessControlManager_) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n    }\\n\\n    function __AccessControlled_init_unchained(address accessControlManager_) internal onlyInitializing {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Sets the address of AccessControlManager\\n     * @dev Admin function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     * @custom:event Emits NewAccessControlManager event\\n     * @custom:access Only Governance\\n     */\\n    function setAccessControlManager(address accessControlManager_) external onlyOwner {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Returns the address of the access control manager contract\\n     */\\n    function accessControlManager() external view returns (IAccessControlManagerV8) {\\n        return _accessControlManager;\\n    }\\n\\n    /**\\n     * @dev Internal function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     */\\n    function _setAccessControlManager(address accessControlManager_) internal {\\n        require(address(accessControlManager_) != address(0), \\\"invalid acess control manager address\\\");\\n        address oldAccessControlManager = address(_accessControlManager);\\n        _accessControlManager = IAccessControlManagerV8(accessControlManager_);\\n        emit NewAccessControlManager(oldAccessControlManager, accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Reverts if the call is not allowed by AccessControlManager\\n     * @param signature Method signature\\n     */\\n    function _checkAccessAllowed(string memory signature) internal view {\\n        bool isAllowedToCall = _accessControlManager.isAllowedToCall(msg.sender, signature);\\n\\n        if (!isAllowedToCall) {\\n            revert Unauthorized(msg.sender, address(this), signature);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe0fd441c84ac907cabc88db69ef04f6d7532d770c7e6a1dfe6e7d6305debb49\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport \\\"@openzeppelin/contracts/access/IAccessControl.sol\\\";\\n\\n/**\\n * @title IAccessControlManagerV8\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\\n */\\ninterface IAccessControlManagerV8 is IAccessControl {\\n    function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n    function revokeCallPermission(\\n        address contractAddress,\\n        string calldata functionSig,\\n        address accountToRevoke\\n    ) external;\\n\\n    function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n    function hasPermission(\\n        address account,\\n        address contractAddress,\\n        string calldata functionSig\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xaa29b098440d0b3a131c5ecdf25ce548790c1b5ac7bf9b5c0264b6af6f7a1e0b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Comptroller.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\n\\nimport { ComptrollerInterface, Action } from \\\"./ComptrollerInterface.sol\\\";\\nimport { ComptrollerStorage } from \\\"./ComptrollerStorage.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"./MaxLoopsLimitHelper.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title Comptroller\\n * @author Venus\\n * @notice The Comptroller is designed to provide checks for all minting, redeeming, transferring, borrowing, lending, repaying, liquidating,\\n * and seizing done by the `vToken` contract. Each pool has one `Comptroller` checking these interactions across markets. When a user interacts\\n * with a given market by one of these main actions, a call is made to a corresponding hook in the associated `Comptroller`, which either allows\\n * or reverts the transaction. These hooks also update supply and borrow rewards as they are called. The comptroller holds the logic for assessing\\n * liquidity snapshots of an account via the collateral factor and liquidation threshold. This check determines the collateral needed for a borrow,\\n * as well as how much of a borrow may be liquidated. A user may borrow a portion of their collateral with the maximum amount determined by the\\n * markets collateral factor. However, if their borrowed amount exceeds an amount calculated using the market\\u2019s corresponding liquidation threshold,\\n * the borrow is eligible for liquidation.\\n *\\n * The `Comptroller` also includes two functions `liquidateAccount()` and `healAccount()`, which are meant to handle accounts that do not exceed\\n * the `minLiquidatableCollateral` for the `Comptroller`:\\n *\\n * - `healAccount()`: This function is called to seize all of a given user\\u2019s collateral, requiring the `msg.sender` repay a certain percentage\\n * of the debt calculated by `collateral/(borrows*liquidationIncentive)`. The function can only be called if the calculated percentage does not exceed\\n * 100%, because otherwise no `badDebt` would be created and `liquidateAccount()` should be used instead. The difference in the actual amount of debt\\n * and debt paid off is recorded as `badDebt` for each market, which can then be auctioned off for the risk reserves of the associated pool.\\n * - `liquidateAccount()`: This function can only be called if the collateral seized will cover all borrows of an account, as well as the liquidation\\n * incentive. Otherwise, the pool will incur bad debt, in which case the function `healAccount()` should be used instead. This function skips the logic\\n * verifying that the repay amount does not exceed the close factor.\\n */\\ncontract Comptroller is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    ComptrollerStorage,\\n    ComptrollerInterface,\\n    ExponentialNoError,\\n    MaxLoopsLimitHelper\\n{\\n    // PoolRegistry, immutable to save on gas\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    address public immutable poolRegistry;\\n\\n    /// @notice Emitted when an account enters a market\\n    event MarketEntered(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when an account exits a market\\n    event MarketExited(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when close factor is changed by admin\\n    event NewCloseFactor(uint256 oldCloseFactorMantissa, uint256 newCloseFactorMantissa);\\n\\n    /// @notice Emitted when a collateral factor is changed by admin\\n    event NewCollateralFactor(VToken vToken, uint256 oldCollateralFactorMantissa, uint256 newCollateralFactorMantissa);\\n\\n    /// @notice Emitted when liquidation threshold is changed by admin\\n    event NewLiquidationThreshold(\\n        VToken vToken,\\n        uint256 oldLiquidationThresholdMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    );\\n\\n    /// @notice Emitted when liquidation incentive is changed by admin\\n    event NewLiquidationIncentive(uint256 oldLiquidationIncentiveMantissa, uint256 newLiquidationIncentiveMantissa);\\n\\n    /// @notice Emitted when price oracle is changed\\n    event NewPriceOracle(ResilientOracleInterface oldPriceOracle, ResilientOracleInterface newPriceOracle);\\n\\n    /// @notice Emitted when an action is paused on a market\\n    event ActionPausedMarket(VToken vToken, Action action, bool pauseState);\\n\\n    /// @notice Emitted when borrow cap for a vToken is changed\\n    event NewBorrowCap(VToken indexed vToken, uint256 newBorrowCap);\\n\\n    /// @notice Emitted when the collateral threshold (in USD) for non-batch liquidations is changed\\n    event NewMinLiquidatableCollateral(uint256 oldMinLiquidatableCollateral, uint256 newMinLiquidatableCollateral);\\n\\n    /// @notice Emitted when supply cap for a vToken is changed\\n    event NewSupplyCap(VToken indexed vToken, uint256 newSupplyCap);\\n\\n    /// @notice Emitted when a rewards distributor is added\\n    event NewRewardsDistributor(address indexed rewardsDistributor, address indexed rewardToken);\\n\\n    /// @notice Emitted when a market is supported\\n    event MarketSupported(VToken vToken);\\n\\n    /// @notice Emitted when prime token contract address is changed\\n    event NewPrimeToken(IPrime oldPrimeToken, IPrime newPrimeToken);\\n\\n    /// @notice Emitted when forced liquidation is enabled or disabled for a market\\n    event IsForcedLiquidationEnabledUpdated(address indexed vToken, bool enable);\\n\\n    /// @notice Emitted when a market is unlisted\\n    event MarketUnlisted(address indexed vToken);\\n    /// @notice Emitted when the borrowing or redeeming delegate rights are updated for an account\\n    event DelegateUpdated(address indexed approver, address indexed delegate, bool approved);\\n\\n    /// @notice Thrown when collateral factor exceeds the upper bound\\n    error InvalidCollateralFactor();\\n\\n    /// @notice Thrown when liquidation threshold exceeds the collateral factor\\n    error InvalidLiquidationThreshold();\\n\\n    /// @notice Thrown when the action is only available to specific sender, but the real sender was different\\n    error UnexpectedSender(address expectedSender, address actualSender);\\n\\n    /// @notice Thrown when the oracle returns an invalid price for some asset\\n    error PriceError(address vToken);\\n\\n    /// @notice Thrown if VToken unexpectedly returned a nonzero error code while trying to get account snapshot\\n    error SnapshotError(address vToken, address user);\\n\\n    /// @notice Thrown when the market is not listed\\n    error MarketNotListed(address market);\\n\\n    /// @notice Thrown when a market has an unexpected comptroller\\n    error ComptrollerMismatch();\\n\\n    /// @notice Thrown when user is not member of market\\n    error MarketNotCollateral(address vToken, address user);\\n\\n    /// @notice Thrown when borrow action is not paused\\n    error BorrowActionNotPaused();\\n\\n    /// @notice Thrown when mint action is not paused\\n    error MintActionNotPaused();\\n\\n    /// @notice Thrown when redeem action is not paused\\n    error RedeemActionNotPaused();\\n\\n    /// @notice Thrown when repay action is not paused\\n    error RepayActionNotPaused();\\n\\n    /// @notice Thrown when seize action is not paused\\n    error SeizeActionNotPaused();\\n\\n    /// @notice Thrown when exit market action is not paused\\n    error ExitMarketActionNotPaused();\\n\\n    /// @notice Thrown when transfer action is not paused\\n    error TransferActionNotPaused();\\n\\n    /// @notice Thrown when enter market action is not paused\\n    error EnterMarketActionNotPaused();\\n\\n    /// @notice Thrown when liquidate action is not paused\\n    error LiquidateActionNotPaused();\\n\\n    /// @notice Thrown when borrow cap is not zero\\n    error BorrowCapIsNotZero();\\n\\n    /// @notice Thrown when supply cap is not zero\\n    error SupplyCapIsNotZero();\\n\\n    /// @notice Thrown when collateral factor is not zero\\n    error CollateralFactorIsNotZero();\\n\\n    /**\\n     * @notice Thrown during the liquidation if user's total collateral amount is lower than\\n     *   a predefined threshold. In this case only batch liquidations (either liquidateAccount\\n     *   or healAccount) are available.\\n     */\\n    error MinimalCollateralViolated(uint256 expectedGreaterThan, uint256 actual);\\n    error CollateralExceedsThreshold(uint256 expectedLessThanOrEqualTo, uint256 actual);\\n    error InsufficientCollateral(uint256 collateralToSeize, uint256 availableCollateral);\\n\\n    /// @notice Thrown when the account doesn't have enough liquidity to redeem or borrow\\n    error InsufficientLiquidity();\\n\\n    /// @notice Thrown when trying to liquidate a healthy account\\n    error InsufficientShortfall();\\n\\n    /// @notice Thrown when trying to repay more than allowed by close factor\\n    error TooMuchRepay();\\n\\n    /// @notice Thrown if the user is trying to exit a market in which they have an outstanding debt\\n    error NonzeroBorrowBalance();\\n\\n    /// @notice Thrown when trying to perform an action that is paused\\n    error ActionPaused(address market, Action action);\\n\\n    /// @notice Thrown when trying to add a market that is already listed\\n    error MarketAlreadyListed(address market);\\n\\n    /// @notice Thrown if the supply cap is exceeded\\n    error SupplyCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if the borrow cap is exceeded\\n    error BorrowCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if delegate approval status is already set to the requested value\\n    error DelegationStatusUnchanged();\\n\\n    /// @param poolRegistry_ Pool registry address\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    /// @custom:error ZeroAddressNotAllowed is thrown when pool registry address is zero\\n    constructor(address poolRegistry_) {\\n        ensureNonzeroAddress(poolRegistry_);\\n\\n        poolRegistry = poolRegistry_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @param loopLimit Limit for the loops can iterate to avoid the DOS\\n     * @param accessControlManager Access control manager contract address\\n     */\\n    function initialize(uint256 loopLimit, address accessControlManager) external initializer {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager);\\n\\n        _setMaxLoopsLimit(loopLimit);\\n    }\\n\\n    /**\\n     * @notice Add assets to be included in account liquidity calculation; enabling them to be used as collateral\\n     * @param vTokens The list of addresses of the vToken markets to be enabled\\n     * @return errors An array of NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketEntered is emitted for each market on success\\n     * @custom:error ActionPaused error is thrown if entering any of the markets is paused\\n     * @custom:error MarketNotListed error is thrown if any of the markets is not listed\\n     * @custom:access Not restricted\\n     */\\n    function enterMarkets(address[] memory vTokens) external override returns (uint256[] memory) {\\n        uint256 len = vTokens.length;\\n\\n        uint256[] memory results = new uint256[](len);\\n        for (uint256 i; i < len; ++i) {\\n            VToken vToken = VToken(vTokens[i]);\\n\\n            _addToMarket(vToken, msg.sender);\\n            results[i] = NO_ERROR;\\n        }\\n\\n        return results;\\n    }\\n\\n    /**\\n     * @notice Unlist a market by setting isListed to false\\n     * @dev Checks if all actions are paused, borrow/supply caps is set to 0 and collateral factor is to 0.\\n     * @param market The address of the market (token) to unlist\\n     * @return uint256 Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketUnlisted is emitted on success\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error BorrowActionNotPaused error is thrown if borrow action is not paused\\n     * @custom:error MintActionNotPaused error is thrown if mint action is not paused\\n     * @custom:error RedeemActionNotPaused error is thrown if redeem action is not paused\\n     * @custom:error RepayActionNotPaused error is thrown if repay action is not paused\\n     * @custom:error EnterMarketActionNotPaused error is thrown if enter market action is not paused\\n     * @custom:error LiquidateActionNotPaused error is thrown if liquidate action is not paused\\n     * @custom:error BorrowCapIsNotZero error is thrown if borrow cap is not zero\\n     * @custom:error SupplyCapIsNotZero error is thrown if supply cap is not zero\\n     * @custom:error CollateralFactorIsNotZero error is thrown if collateral factor is not zero\\n     */\\n    function unlistMarket(address market) external returns (uint256) {\\n        _checkAccessAllowed(\\\"unlistMarket(address)\\\");\\n\\n        Market storage _market = markets[market];\\n\\n        if (!_market.isListed) {\\n            revert MarketNotListed(market);\\n        }\\n\\n        if (!actionPaused(market, Action.BORROW)) {\\n            revert BorrowActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.MINT)) {\\n            revert MintActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REDEEM)) {\\n            revert RedeemActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REPAY)) {\\n            revert RepayActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.SEIZE)) {\\n            revert SeizeActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.ENTER_MARKET)) {\\n            revert EnterMarketActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.LIQUIDATE)) {\\n            revert LiquidateActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.TRANSFER)) {\\n            revert TransferActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.EXIT_MARKET)) {\\n            revert ExitMarketActionNotPaused();\\n        }\\n\\n        if (borrowCaps[market] != 0) {\\n            revert BorrowCapIsNotZero();\\n        }\\n\\n        if (supplyCaps[market] != 0) {\\n            revert SupplyCapIsNotZero();\\n        }\\n\\n        if (_market.collateralFactorMantissa != 0) {\\n            revert CollateralFactorIsNotZero();\\n        }\\n\\n        _market.isListed = false;\\n        emit MarketUnlisted(market);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Grants or revokes the borrowing or redeeming delegate rights to / from an account\\n     *  If allowed, the delegate will be able to borrow funds on behalf of the sender\\n     *  Upon a delegated borrow, the delegate will receive the funds, and the borrower\\n     *  will see the debt on their account\\n     *  Upon a delegated redeem, the delegate will receive the redeemed amount and the approver\\n     *  will see a deduction in his vToken balance\\n     * @param delegate The address to update the rights for\\n     * @param approved Whether to grant (true) or revoke (false) the borrowing or redeeming rights\\n     * @custom:event DelegateUpdated emits on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when delegate address is zero\\n     * @custom:error DelegationStatusUnchanged is thrown if approval status is already set to the requested value\\n     * @custom:access Not restricted\\n     */\\n    function updateDelegate(address delegate, bool approved) external {\\n        ensureNonzeroAddress(delegate);\\n        if (approvedDelegates[msg.sender][delegate] == approved) {\\n            revert DelegationStatusUnchanged();\\n        }\\n\\n        approvedDelegates[msg.sender][delegate] = approved;\\n        emit DelegateUpdated(msg.sender, delegate, approved);\\n    }\\n\\n    /**\\n     * @notice Removes asset from sender's account liquidity calculation; disabling them as collateral\\n     * @dev Sender must not have an outstanding borrow balance in the asset,\\n     *  or be providing necessary collateral for an outstanding borrow.\\n     * @param vTokenAddress The address of the asset to be removed\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketExited is emitted on success\\n     * @custom:error ActionPaused error is thrown if exiting the market is paused\\n     * @custom:error NonzeroBorrowBalance error is thrown if the user has an outstanding borrow in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if exiting the market would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function exitMarket(address vTokenAddress) external override returns (uint256) {\\n        _checkActionPauseState(vTokenAddress, Action.EXIT_MARKET);\\n        VToken vToken = VToken(vTokenAddress);\\n        /* Get sender tokensHeld and amountOwed underlying from the vToken */\\n        (uint256 tokensHeld, uint256 amountOwed, ) = _safeGetAccountSnapshot(vToken, msg.sender);\\n\\n        /* Fail if the sender has a borrow balance */\\n        if (amountOwed != 0) {\\n            revert NonzeroBorrowBalance();\\n        }\\n\\n        /* Fail if the sender is not permitted to redeem all of their tokens */\\n        _checkRedeemAllowed(vTokenAddress, msg.sender, tokensHeld);\\n\\n        Market storage marketToExit = markets[address(vToken)];\\n\\n        /* Return true if the sender is not already \\u2018in\\u2019 the market */\\n        if (!marketToExit.accountMembership[msg.sender]) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Set vToken account membership to false */\\n        delete marketToExit.accountMembership[msg.sender];\\n\\n        /* Delete vToken from the account\\u2019s list of assets */\\n        // load into memory for faster iteration\\n        VToken[] memory userAssetList = accountAssets[msg.sender];\\n        uint256 len = userAssetList.length;\\n\\n        uint256 assetIndex = len;\\n        for (uint256 i; i < len; ++i) {\\n            if (userAssetList[i] == vToken) {\\n                assetIndex = i;\\n                break;\\n            }\\n        }\\n\\n        // We *must* have found the asset in the list or our redundant data structure is broken\\n        assert(assetIndex < len);\\n\\n        // copy last item in list to location of item to be removed, reduce length by 1\\n        VToken[] storage storedList = accountAssets[msg.sender];\\n        storedList[assetIndex] = storedList[storedList.length - 1];\\n        storedList.pop();\\n\\n        emit MarketExited(vToken, msg.sender);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /*** Policy Hooks ***/\\n\\n    /**\\n     * @notice Checks if the account should be allowed to mint tokens in the given market\\n     * @param vToken The market to verify the mint against\\n     * @param minter The account which would get the minted tokens\\n     * @param mintAmount The amount of underlying being supplied to the market in exchange for tokens\\n     * @custom:error ActionPaused error is thrown if supplying to this market is paused\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error SupplyCapExceeded error is thrown if the total supply exceeds the cap after minting\\n     * @custom:access Not restricted\\n     */\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external override {\\n        _checkActionPauseState(vToken, Action.MINT);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        uint256 supplyCap = supplyCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (supplyCap != type(uint256).max) {\\n            uint256 vTokenSupply = VToken(vToken).totalSupply();\\n            Exp memory exchangeRate = Exp({ mantissa: VToken(vToken).exchangeRateStored() });\\n            uint256 nextTotalSupply = mul_ScalarTruncateAddUInt(exchangeRate, vTokenSupply, mintAmount);\\n            if (nextTotalSupply > supplyCap) {\\n                revert SupplyCapExceeded(vToken, supplyCap);\\n            }\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, minter);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates mint, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being minted\\n     * @param minter The address minting the tokens\\n     * @param actualMintAmount The amount of the underlying asset being minted\\n     * @param mintTokens The number of tokens being minted\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function mintVerify(address vToken, address minter, uint256 actualMintAmount, uint256 mintTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(minter, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to redeem tokens in the given market\\n     * @param vToken The market to verify the redeem against\\n     * @param redeemer The account which would redeem the tokens\\n     * @param redeemTokens The number of vTokens to exchange for the underlying asset in the market\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external override {\\n        _checkActionPauseState(vToken, Action.REDEEM);\\n\\n        _checkRedeemAllowed(vToken, redeemer, redeemTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, redeemer);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates redeem, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being redeemed\\n     * @param redeemer The address redeeming the tokens\\n     * @param redeemAmount The amount of the underlying asset being redeemed\\n     * @param redeemTokens The number of tokens being redeemed\\n     */\\n    function redeemVerify(address vToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(redeemer, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates repayBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being repaid\\n     * @param payer The address repaying the borrow\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     */\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer, // solhint-disable-line no-unused-vars\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 borrowerIndex // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates liquidateBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     * @param seizeTokens The amount of collateral token that will be seized\\n     */\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenBorrowed);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenBorrowed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates seize, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param seizeTokens The number of collateral tokens to seize\\n     */\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenCollateral);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenCollateral);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates transfer, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being transferred\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function transferVerify(address vToken, address src, address dst, uint256 transferTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(src, vToken);\\n            prime.accrueInterestAndUpdateScore(dst, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to borrow the underlying asset of the given market\\n     * @param vToken The market to verify the borrow against\\n     * @param borrower The account which would borrow the asset\\n     * @param borrowAmount The amount of underlying the account would borrow\\n     * @custom:error ActionPaused error is thrown if borrowing is paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if there is not enough collateral to borrow\\n     * @custom:error BorrowCapExceeded is thrown if the borrow cap will be exceeded should this borrow succeed\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted if vToken is enabled as collateral, otherwise only vToken\\n     */\\n    /// disable-eslint\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external override {\\n        _checkActionPauseState(vToken, Action.BORROW);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (!markets[vToken].accountMembership[borrower]) {\\n            // only vTokens may call borrowAllowed if borrower not in market\\n            _checkSenderIs(vToken);\\n\\n            // attempt to add borrower to the market or revert\\n            _addToMarket(VToken(msg.sender), borrower);\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (oracle.getUnderlyingPrice(vToken) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 borrowCap = borrowCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (borrowCap != type(uint256).max) {\\n            uint256 totalBorrows = VToken(vToken).totalBorrows();\\n            uint256 badDebt = VToken(vToken).badDebt();\\n            uint256 nextTotalBorrows = totalBorrows + borrowAmount + badDebt;\\n            if (nextTotalBorrows > borrowCap) {\\n                revert BorrowCapExceeded(vToken, borrowCap);\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            borrower,\\n            VToken(vToken),\\n            0,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n\\n        Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates borrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset whose underlying is being borrowed\\n     * @param borrower The address borrowing the underlying\\n     * @param borrowAmount The amount of the underlying asset requested to borrow\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function borrowVerify(address vToken, address borrower, uint256 borrowAmount) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to repay a borrow in the given market\\n     * @param vToken The market to verify the repay against\\n     * @param borrower The account which would borrowed the asset\\n     * @custom:error ActionPaused error is thrown if repayments are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:access Not restricted\\n     */\\n    function preRepayHook(address vToken, address borrower) external override {\\n        _checkActionPauseState(vToken, Action.REPAY);\\n\\n        oracle.updatePrice(vToken);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the liquidation should be allowed to occur\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param borrower The address of the borrower\\n     * @param repayAmount The amount of underlying being repaid\\n     * @param skipLiquidityCheck Allows the borrow to be liquidated regardless of the account liquidity\\n     * @custom:error ActionPaused error is thrown if liquidations are paused in this market\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error TooMuchRepay error is thrown if the liquidator is trying to repay more than allowed by close factor\\n     * @custom:error MinimalCollateralViolated is thrown if the users' total collateral is lower than the threshold for non-batch liquidations\\n     * @custom:error InsufficientShortfall is thrown when trying to liquidate a healthy account\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     */\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        // Pause Action.LIQUIDATE on BORROWED TOKEN to prevent liquidating it.\\n        // If we want to pause liquidating to vTokenCollateral, we should pause\\n        // Action.SEIZE on it\\n        _checkActionPauseState(vTokenBorrowed, Action.LIQUIDATE);\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(address(vTokenBorrowed));\\n        }\\n        if (!markets[vTokenCollateral].isListed) {\\n            revert MarketNotListed(address(vTokenCollateral));\\n        }\\n\\n        uint256 borrowBalance = VToken(vTokenBorrowed).borrowBalanceStored(borrower);\\n\\n        /* Allow accounts to be liquidated if it is a forced liquidation */\\n        if (skipLiquidityCheck || isForcedLiquidationEnabled[vTokenBorrowed]) {\\n            if (repayAmount > borrowBalance) {\\n                revert TooMuchRepay();\\n            }\\n            return;\\n        }\\n\\n        /* The borrower must have shortfall and collateral > threshold in order to be liquidatable */\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral <= minLiquidatableCollateral) {\\n            /* The liquidator should use either liquidateAccount or healAccount */\\n            revert MinimalCollateralViolated(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        /* The liquidator may not repay more than what is allowed by the closeFactor */\\n        uint256 maxClose = mul_ScalarTruncate(Exp({ mantissa: closeFactorMantissa }), borrowBalance);\\n        if (repayAmount > maxClose) {\\n            revert TooMuchRepay();\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the seizing of assets should be allowed to occur\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param seizerContract Contract that tries to seize the asset (either borrowed vToken or Comptroller)\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @custom:error ActionPaused error is thrown if seizing this type of collateral is paused\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error ComptrollerMismatch error is when seizer contract or seized asset belong to different pools\\n     * @custom:access Not restricted\\n     */\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address seizerContract,\\n        address liquidator,\\n        address borrower\\n    ) external override {\\n        // Pause Action.SEIZE on COLLATERAL to prevent seizing it.\\n        // If we want to pause liquidating vTokenBorrowed, we should pause\\n        // Action.LIQUIDATE on it\\n        _checkActionPauseState(vTokenCollateral, Action.SEIZE);\\n\\n        Market storage market = markets[vTokenCollateral];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(vTokenCollateral);\\n        }\\n\\n        if (seizerContract == address(this)) {\\n            // If Comptroller is the seizer, just check if collateral's comptroller\\n            // is equal to the current address\\n            if (address(VToken(vTokenCollateral).comptroller()) != address(this)) {\\n                revert ComptrollerMismatch();\\n            }\\n        } else {\\n            // If the seizer is not the Comptroller, check that the seizer is a\\n            // listed market, and that the markets' comptrollers match\\n            if (!markets[seizerContract].isListed) {\\n                revert MarketNotListed(seizerContract);\\n            }\\n            if (VToken(vTokenCollateral).comptroller() != VToken(seizerContract).comptroller()) {\\n                revert ComptrollerMismatch();\\n            }\\n        }\\n\\n        if (!market.accountMembership[borrower]) {\\n            revert MarketNotCollateral(vTokenCollateral, borrower);\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vTokenCollateral);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, borrower);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, liquidator);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to transfer tokens in the given market\\n     * @param vToken The market to verify the transfer against\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external override {\\n        _checkActionPauseState(vToken, Action.TRANSFER);\\n\\n        // Currently the only consideration is whether or not\\n        //  the src is allowed to redeem this many tokens\\n        _checkRedeemAllowed(vToken, src, transferTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, src);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, dst);\\n        }\\n    }\\n\\n    /*** Pool-level operations ***/\\n\\n    /**\\n     * @notice Seizes all the remaining collateral, makes msg.sender repay the existing\\n     *   borrows, and treats the rest of the debt as bad debt (for each market).\\n     *   The sender has to repay a certain percentage of the debt, computed as\\n     *   collateral / (borrows * liquidationIncentive).\\n     * @param user account to heal\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for healing\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function healAccount(address user) external {\\n        VToken[] memory userAssets = getAssetsIn(user);\\n        uint256 userAssetsCount = userAssets.length;\\n\\n        address liquidator = msg.sender;\\n        {\\n            ResilientOracleInterface oracle_ = oracle;\\n            // We need all user's markets to be fresh for the computations to be correct\\n            for (uint256 i; i < userAssetsCount; ++i) {\\n                userAssets[i].accrueInterest();\\n                oracle_.updatePrice(address(userAssets[i]));\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(user, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        // percentage = collateral / (borrows * liquidation incentive)\\n        Exp memory collateral = Exp({ mantissa: snapshot.totalCollateral });\\n        Exp memory scaledBorrows = mul_(\\n            Exp({ mantissa: snapshot.borrows }),\\n            Exp({ mantissa: liquidationIncentiveMantissa })\\n        );\\n\\n        Exp memory percentage = div_(collateral, scaledBorrows);\\n        if (lessThanExp(Exp({ mantissa: MANTISSA_ONE }), percentage)) {\\n            revert CollateralExceedsThreshold(scaledBorrows.mantissa, collateral.mantissa);\\n        }\\n\\n        for (uint256 i; i < userAssetsCount; ++i) {\\n            VToken market = userAssets[i];\\n\\n            (uint256 tokens, uint256 borrowBalance, ) = _safeGetAccountSnapshot(market, user);\\n            uint256 repaymentAmount = mul_ScalarTruncate(percentage, borrowBalance);\\n\\n            // Seize the entire collateral\\n            if (tokens != 0) {\\n                market.seize(liquidator, user, tokens);\\n            }\\n            // Repay a certain percentage of the borrow, forgive the rest\\n            if (borrowBalance != 0) {\\n                market.healBorrow(liquidator, user, repaymentAmount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Liquidates all borrows of the borrower. Callable only if the collateral is less than\\n     *   a predefined threshold, and the account collateral can be seized to cover all borrows. If\\n     *   the collateral is higher than the threshold, use regular liquidations. If the collateral is\\n     *   below the threshold, and the account is insolvent, use healAccount.\\n     * @param borrower the borrower address\\n     * @param orders an array of liquidation orders\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for a batch liquidation\\n     * @custom:error InsufficientCollateral error is thrown when there is not enough collateral to cover the debt\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function liquidateAccount(address borrower, LiquidationOrder[] calldata orders) external {\\n        // We will accrue interest and update the oracle prices later during the liquidation\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            // You should use the regular vToken.liquidateBorrow(...) call\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        uint256 collateralToSeize = mul_ScalarTruncate(\\n            Exp({ mantissa: liquidationIncentiveMantissa }),\\n            snapshot.borrows\\n        );\\n        if (collateralToSeize >= snapshot.totalCollateral) {\\n            // There is not enough collateral to seize. Use healBorrow to repay some part of the borrow\\n            // and record bad debt.\\n            revert InsufficientCollateral(collateralToSeize, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        uint256 ordersCount = orders.length;\\n\\n        _ensureMaxLoops(ordersCount / 2);\\n\\n        for (uint256 i; i < ordersCount; ++i) {\\n            if (!markets[address(orders[i].vTokenBorrowed)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenBorrowed));\\n            }\\n            if (!markets[address(orders[i].vTokenCollateral)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenCollateral));\\n            }\\n\\n            LiquidationOrder calldata order = orders[i];\\n            order.vTokenBorrowed.forceLiquidateBorrow(\\n                msg.sender,\\n                borrower,\\n                order.repayAmount,\\n                order.vTokenCollateral,\\n                true\\n            );\\n        }\\n\\n        VToken[] memory borrowMarkets = getAssetsIn(borrower);\\n        uint256 marketsCount = borrowMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            (, uint256 borrowBalance, ) = _safeGetAccountSnapshot(borrowMarkets[i], borrower);\\n            require(borrowBalance == 0, \\\"Nonzero borrow balance after liquidation\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets the closeFactor to use when liquidating borrows\\n     * @param newCloseFactorMantissa New close factor, scaled by 1e18\\n     * @custom:event Emits NewCloseFactor on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCloseFactor(uint256 newCloseFactorMantissa) external {\\n        _checkAccessAllowed(\\\"setCloseFactor(uint256)\\\");\\n        require(MAX_CLOSE_FACTOR_MANTISSA >= newCloseFactorMantissa, \\\"Close factor greater than maximum close factor\\\");\\n        require(MIN_CLOSE_FACTOR_MANTISSA <= newCloseFactorMantissa, \\\"Close factor smaller than minimum close factor\\\");\\n\\n        uint256 oldCloseFactorMantissa = closeFactorMantissa;\\n        closeFactorMantissa = newCloseFactorMantissa;\\n        emit NewCloseFactor(oldCloseFactorMantissa, newCloseFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Sets the collateralFactor for a market\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param vToken The market to set the factor on\\n     * @param newCollateralFactorMantissa The new collateral factor, scaled by 1e18\\n     * @param newLiquidationThresholdMantissa The new liquidation threshold, scaled by 1e18\\n     * @custom:event Emits NewCollateralFactor when collateral factor is updated\\n     *    and NewLiquidationThreshold when liquidation threshold is updated\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InvalidCollateralFactor error is thrown when collateral factor is too high\\n     * @custom:error InvalidLiquidationThreshold error is thrown when liquidation threshold is lower than collateral factor\\n     * @custom:error PriceError is thrown when the oracle returns an invalid price for the asset\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCollateralFactor(\\n        VToken vToken,\\n        uint256 newCollateralFactorMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    ) external {\\n        _checkAccessAllowed(\\\"setCollateralFactor(address,uint256,uint256)\\\");\\n\\n        // Verify market is listed\\n        Market storage market = markets[address(vToken)];\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Check collateral factor <= 0.9\\n        if (newCollateralFactorMantissa > MAX_COLLATERAL_FACTOR_MANTISSA) {\\n            revert InvalidCollateralFactor();\\n        }\\n\\n        // Ensure that liquidation threshold <= 1\\n        if (newLiquidationThresholdMantissa > MANTISSA_ONE) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // Ensure that liquidation threshold >= CF\\n        if (newLiquidationThresholdMantissa < newCollateralFactorMantissa) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // If collateral factor != 0, fail if price == 0\\n        if (newCollateralFactorMantissa != 0 && oracle.getUnderlyingPrice(address(vToken)) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 oldCollateralFactorMantissa = market.collateralFactorMantissa;\\n        if (newCollateralFactorMantissa != oldCollateralFactorMantissa) {\\n            market.collateralFactorMantissa = newCollateralFactorMantissa;\\n            emit NewCollateralFactor(vToken, oldCollateralFactorMantissa, newCollateralFactorMantissa);\\n        }\\n\\n        uint256 oldLiquidationThresholdMantissa = market.liquidationThresholdMantissa;\\n        if (newLiquidationThresholdMantissa != oldLiquidationThresholdMantissa) {\\n            market.liquidationThresholdMantissa = newLiquidationThresholdMantissa;\\n            emit NewLiquidationThreshold(vToken, oldLiquidationThresholdMantissa, newLiquidationThresholdMantissa);\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets liquidationIncentive\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newLiquidationIncentiveMantissa New liquidationIncentive scaled by 1e18\\n     * @custom:event Emits NewLiquidationIncentive on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setLiquidationIncentive(uint256 newLiquidationIncentiveMantissa) external {\\n        require(newLiquidationIncentiveMantissa >= MANTISSA_ONE, \\\"liquidation incentive should be greater than 1e18\\\");\\n\\n        _checkAccessAllowed(\\\"setLiquidationIncentive(uint256)\\\");\\n\\n        // Save current value for use in log\\n        uint256 oldLiquidationIncentiveMantissa = liquidationIncentiveMantissa;\\n\\n        // Set liquidation incentive to new incentive\\n        liquidationIncentiveMantissa = newLiquidationIncentiveMantissa;\\n\\n        // Emit event with old incentive, new incentive\\n        emit NewLiquidationIncentive(oldLiquidationIncentiveMantissa, newLiquidationIncentiveMantissa);\\n    }\\n\\n    /**\\n     * @notice Add the market to the markets mapping and set it as listed\\n     * @dev Only callable by the PoolRegistry\\n     * @param vToken The address of the market (token) to list\\n     * @custom:error MarketAlreadyListed is thrown if the market is already listed in this pool\\n     * @custom:access Only PoolRegistry\\n     */\\n    function supportMarket(VToken vToken) external {\\n        _checkSenderIs(poolRegistry);\\n\\n        if (markets[address(vToken)].isListed) {\\n            revert MarketAlreadyListed(address(vToken));\\n        }\\n\\n        require(vToken.isVToken(), \\\"Comptroller: Invalid vToken\\\"); // Sanity check to make sure its really a VToken\\n\\n        Market storage newMarket = markets[address(vToken)];\\n        newMarket.isListed = true;\\n        newMarket.collateralFactorMantissa = 0;\\n        newMarket.liquidationThresholdMantissa = 0;\\n\\n        _addMarket(address(vToken));\\n\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            rewardsDistributors[i].initializeMarket(address(vToken));\\n        }\\n\\n        emit MarketSupported(vToken);\\n    }\\n\\n    /**\\n     * @notice Set the given borrow caps for the given vToken markets. Borrowing that brings total borrows to or above borrow cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A borrow cap of type(uint256).max corresponds to unlimited borrowing.\\n     * @dev Borrow caps smaller than the current total borrows are accepted. This way, new borrows will not be allowed\\n            until the total borrows amount goes below the new borrow cap\\n     * @param vTokens The addresses of the markets (tokens) to change the borrow caps for\\n     * @param newBorrowCaps The new borrow cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited borrowing.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketBorrowCaps(VToken[] calldata vTokens, uint256[] calldata newBorrowCaps) external {\\n        _checkAccessAllowed(\\\"setMarketBorrowCaps(address[],uint256[])\\\");\\n\\n        uint256 numMarkets = vTokens.length;\\n        uint256 numBorrowCaps = newBorrowCaps.length;\\n\\n        require(numMarkets != 0 && numMarkets == numBorrowCaps, \\\"invalid input\\\");\\n\\n        _ensureMaxLoops(numMarkets);\\n\\n        for (uint256 i; i < numMarkets; ++i) {\\n            borrowCaps[address(vTokens[i])] = newBorrowCaps[i];\\n            emit NewBorrowCap(vTokens[i], newBorrowCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given supply caps for the given vToken markets. Supply that brings total Supply to or above supply cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A supply cap of type(uint256).max corresponds to unlimited supply.\\n     * @dev Supply caps smaller than the current total supplies are accepted. This way, new supplies will not be allowed\\n            until the total supplies amount goes below the new supply cap\\n     * @param vTokens The addresses of the markets (tokens) to change the supply caps for\\n     * @param newSupplyCaps The new supply cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited supply.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketSupplyCaps(VToken[] calldata vTokens, uint256[] calldata newSupplyCaps) external {\\n        _checkAccessAllowed(\\\"setMarketSupplyCaps(address[],uint256[])\\\");\\n        uint256 vTokensCount = vTokens.length;\\n\\n        require(vTokensCount != 0, \\\"invalid number of markets\\\");\\n        require(vTokensCount == newSupplyCaps.length, \\\"invalid number of markets\\\");\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            supplyCaps[address(vTokens[i])] = newSupplyCaps[i];\\n            emit NewSupplyCap(vTokens[i], newSupplyCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Pause/unpause specified actions\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param marketsList Markets to pause/unpause the actions on\\n     * @param actionsList List of action ids to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setActionsPaused(VToken[] calldata marketsList, Action[] calldata actionsList, bool paused) external {\\n        _checkAccessAllowed(\\\"setActionsPaused(address[],uint256[],bool)\\\");\\n\\n        uint256 marketsCount = marketsList.length;\\n        uint256 actionsCount = actionsList.length;\\n\\n        _ensureMaxLoops(marketsCount * actionsCount);\\n\\n        for (uint256 marketIdx; marketIdx < marketsCount; ++marketIdx) {\\n            for (uint256 actionIdx; actionIdx < actionsCount; ++actionIdx) {\\n                _setActionPaused(address(marketsList[marketIdx]), actionsList[actionIdx], paused);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given collateral threshold for non-batch liquidations. Regular liquidations\\n     *   will fail if the collateral amount is less than this threshold. Liquidators should use batch\\n     *   operations like liquidateAccount or healAccount.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newMinLiquidatableCollateral The new min liquidatable collateral (in USD).\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMinLiquidatableCollateral(uint256 newMinLiquidatableCollateral) external {\\n        _checkAccessAllowed(\\\"setMinLiquidatableCollateral(uint256)\\\");\\n\\n        uint256 oldMinLiquidatableCollateral = minLiquidatableCollateral;\\n        minLiquidatableCollateral = newMinLiquidatableCollateral;\\n        emit NewMinLiquidatableCollateral(oldMinLiquidatableCollateral, newMinLiquidatableCollateral);\\n    }\\n\\n    /**\\n     * @notice Add a new RewardsDistributor and initialize it with all markets. We can add several RewardsDistributor\\n     * contracts with the same rewardToken, and there could be overlaping among them considering the last reward slot (block or second)\\n     * @dev Only callable by the admin\\n     * @param _rewardsDistributor Address of the RewardDistributor contract to add\\n     * @custom:access Only Governance\\n     * @custom:event Emits NewRewardsDistributor with distributor address\\n     */\\n    function addRewardsDistributor(RewardsDistributor _rewardsDistributor) external onlyOwner {\\n        require(!rewardsDistributorExists[address(_rewardsDistributor)], \\\"already exists\\\");\\n\\n        uint256 rewardsDistributorsLen = rewardsDistributors.length;\\n        _ensureMaxLoops(rewardsDistributorsLen + 1);\\n\\n        rewardsDistributors.push(_rewardsDistributor);\\n        rewardsDistributorExists[address(_rewardsDistributor)] = true;\\n\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            _rewardsDistributor.initializeMarket(address(allMarkets[i]));\\n        }\\n\\n        emit NewRewardsDistributor(address(_rewardsDistributor), address(_rewardsDistributor.rewardToken()));\\n    }\\n\\n    /**\\n     * @notice Sets a new price oracle for the Comptroller\\n     * @dev Only callable by the admin\\n     * @param newOracle Address of the new price oracle to set\\n     * @custom:event Emits NewPriceOracle on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when the new oracle address is zero\\n     */\\n    function setPriceOracle(ResilientOracleInterface newOracle) external onlyOwner {\\n        ensureNonzeroAddress(address(newOracle));\\n\\n        ResilientOracleInterface oldOracle = oracle;\\n        oracle = newOracle;\\n        emit NewPriceOracle(oldOracle, newOracle);\\n    }\\n\\n    /**\\n     * @notice Set the for loop iteration limit to avoid DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Sets the prime token contract for the comptroller\\n     * @param _prime Address of the Prime contract\\n     */\\n    function setPrimeToken(IPrime _prime) external onlyOwner {\\n        ensureNonzeroAddress(address(_prime));\\n\\n        emit NewPrimeToken(prime, _prime);\\n        prime = _prime;\\n    }\\n\\n    /**\\n     * @notice Enables forced liquidations for a market. If forced liquidation is enabled,\\n     * borrows in the market may be liquidated regardless of the account liquidity\\n     * @param vTokenBorrowed Borrowed vToken\\n     * @param enable Whether to enable forced liquidations\\n     */\\n    function setForcedLiquidation(address vTokenBorrowed, bool enable) external {\\n        _checkAccessAllowed(\\\"setForcedLiquidation(address,bool)\\\");\\n        ensureNonzeroAddress(vTokenBorrowed);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(vTokenBorrowed);\\n        }\\n\\n        isForcedLiquidationEnabled[vTokenBorrowed] = enable;\\n        emit IsForcedLiquidationEnabledUpdated(vTokenBorrowed, enable);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to liquidation threshold requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of liquidation threshold requirements,\\n     * @return shortfall Account shortfall below liquidation threshold requirements\\n     */\\n    function getAccountLiquidity(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getLiquidationThreshold);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to collateral requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of collateral requirements,\\n     * @return shortfall Account shortfall below collateral requirements\\n     */\\n    function getBorrowingPower(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getCollateralFactor);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine what the account liquidity would be if the given amounts were redeemed/borrowed\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Hypothetical account liquidity in excess of collateral requirements,\\n     * @return shortfall Hypothetical account shortfall below collateral requirements\\n     */\\n    function getHypotheticalAccountLiquidity(\\n        address account,\\n        address vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            account,\\n            VToken(vTokenModify),\\n            redeemTokens,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Return all of the markets\\n     * @dev The automatic getter may be used to access an individual market.\\n     * @return markets The list of market addresses\\n     */\\n    function getAllMarkets() external view override returns (VToken[] memory) {\\n        return allMarkets;\\n    }\\n\\n    /**\\n     * @notice Check if a market is marked as listed (active)\\n     * @param vToken vToken Address for the market to check\\n     * @return listed True if listed otherwise false\\n     */\\n    function isMarketListed(VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].isListed;\\n    }\\n\\n    /*** Assets You Are In ***/\\n\\n    /**\\n     * @notice Returns whether the given account is entered in a given market\\n     * @param account The address of the account to check\\n     * @param vToken The vToken to check\\n     * @return True if the account is in the market specified, otherwise false.\\n     */\\n    function checkMembership(address account, VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].accountMembership[account];\\n    }\\n\\n    /**\\n     * @notice Calculate number of tokens of collateral asset to seize given an underlying amount\\n     * @dev Used in liquidation (called in vToken.liquidateBorrowFresh)\\n     * @param vTokenBorrowed The address of the borrowed vToken\\n     * @param vTokenCollateral The address of the collateral vToken\\n     * @param actualRepayAmount The amount of vTokenBorrowed underlying to convert into vTokenCollateral tokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return tokensToSeize Number of vTokenCollateral tokens to be seized in a liquidation\\n     * @custom:error PriceError if the oracle returns an invalid price\\n     */\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 actualRepayAmount\\n    ) external view override returns (uint256 error, uint256 tokensToSeize) {\\n        /* Read oracle prices for borrowed and collateral markets */\\n        uint256 priceBorrowedMantissa = _safeGetUnderlyingPrice(VToken(vTokenBorrowed));\\n        uint256 priceCollateralMantissa = _safeGetUnderlyingPrice(VToken(vTokenCollateral));\\n\\n        /*\\n         * Get the exchange rate and calculate the number of collateral tokens to seize:\\n         *  seizeAmount = actualRepayAmount * liquidationIncentive * priceBorrowed / priceCollateral\\n         *  seizeTokens = seizeAmount / exchangeRate\\n         *   = actualRepayAmount * (liquidationIncentive * priceBorrowed) / (priceCollateral * exchangeRate)\\n         */\\n        uint256 exchangeRateMantissa = VToken(vTokenCollateral).exchangeRateStored(); // Note: reverts on error\\n        uint256 seizeTokens;\\n        Exp memory numerator;\\n        Exp memory denominator;\\n        Exp memory ratio;\\n\\n        numerator = mul_(Exp({ mantissa: liquidationIncentiveMantissa }), Exp({ mantissa: priceBorrowedMantissa }));\\n        denominator = mul_(Exp({ mantissa: priceCollateralMantissa }), Exp({ mantissa: exchangeRateMantissa }));\\n        ratio = div_(numerator, denominator);\\n\\n        seizeTokens = mul_ScalarTruncate(ratio, actualRepayAmount);\\n\\n        return (NO_ERROR, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Returns reward speed given a vToken\\n     * @param vToken The vToken to get the reward speeds for\\n     * @return rewardSpeeds Array of total supply and borrow speeds and reward token for all reward distributors\\n     */\\n    function getRewardsByMarket(address vToken) external view returns (RewardSpeeds[] memory rewardSpeeds) {\\n        uint256 rewardsDistributorsLength = rewardsDistributors.length;\\n        rewardSpeeds = new RewardSpeeds[](rewardsDistributorsLength);\\n        for (uint256 i; i < rewardsDistributorsLength; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            address rewardToken = address(rewardsDistributor.rewardToken());\\n            rewardSpeeds[i] = RewardSpeeds({\\n                rewardToken: rewardToken,\\n                supplySpeed: rewardsDistributor.rewardTokenSupplySpeeds(vToken),\\n                borrowSpeed: rewardsDistributor.rewardTokenBorrowSpeeds(vToken)\\n            });\\n        }\\n        return rewardSpeeds;\\n    }\\n\\n    /**\\n     * @notice Return all reward distributors for this pool\\n     * @return Array of RewardDistributor addresses\\n     */\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory) {\\n        return rewardsDistributors;\\n    }\\n\\n    /**\\n     * @notice A marker method that returns true for a valid Comptroller contract\\n     * @return Always true\\n     */\\n    function isComptroller() external pure override returns (bool) {\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Update the prices of all the tokens associated with the provided account\\n     * @param account Address of the account to get associated tokens with\\n     */\\n    function updatePrices(address account) public {\\n        VToken[] memory vTokens = getAssetsIn(account);\\n        uint256 vTokensCount = vTokens.length;\\n\\n        ResilientOracleInterface oracle_ = oracle;\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            oracle_.updatePrice(address(vTokens[i]));\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if a certain action is paused on a market\\n     * @param market vToken address\\n     * @param action Action to check\\n     * @return paused True if the action is paused otherwise false\\n     */\\n    function actionPaused(address market, Action action) public view returns (bool) {\\n        return _actionPaused[market][action];\\n    }\\n\\n    /**\\n     * @notice Returns the assets an account has entered\\n     * @param account The address of the account to pull assets for\\n     * @return A list with the assets the account has entered\\n     */\\n    function getAssetsIn(address account) public view returns (VToken[] memory) {\\n        uint256 len;\\n        VToken[] memory _accountAssets = accountAssets[account];\\n        uint256 _accountAssetsLength = _accountAssets.length;\\n\\n        VToken[] memory assetsIn = new VToken[](_accountAssetsLength);\\n\\n        for (uint256 i; i < _accountAssetsLength; ++i) {\\n            Market storage market = markets[address(_accountAssets[i])];\\n            if (market.isListed) {\\n                assetsIn[len] = _accountAssets[i];\\n                ++len;\\n            }\\n        }\\n\\n        assembly {\\n            mstore(assetsIn, len)\\n        }\\n\\n        return assetsIn;\\n    }\\n\\n    /**\\n     * @notice Add the market to the borrower's \\\"assets in\\\" for liquidity calculations\\n     * @param vToken The market to enter\\n     * @param borrower The address of the account to modify\\n     */\\n    function _addToMarket(VToken vToken, address borrower) internal {\\n        _checkActionPauseState(address(vToken), Action.ENTER_MARKET);\\n        Market storage marketToJoin = markets[address(vToken)];\\n\\n        if (!marketToJoin.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (marketToJoin.accountMembership[borrower]) {\\n            // already joined\\n            return;\\n        }\\n\\n        // survived the gauntlet, add to list\\n        // NOTE: we store these somewhat redundantly as a significant optimization\\n        //  this avoids having to iterate through the list for the most common use cases\\n        //  that is, only when we need to perform liquidity checks\\n        //  and not whenever we want to check if an account is in a particular market\\n        marketToJoin.accountMembership[borrower] = true;\\n        accountAssets[borrower].push(vToken);\\n\\n        emit MarketEntered(vToken, borrower);\\n    }\\n\\n    /**\\n     * @notice Internal function to validate that a market hasn't already been added\\n     * and if it hasn't adds it\\n     * @param vToken The market to support\\n     */\\n    function _addMarket(address vToken) internal {\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            if (allMarkets[i] == VToken(vToken)) {\\n                revert MarketAlreadyListed(vToken);\\n            }\\n        }\\n        allMarkets.push(VToken(vToken));\\n        marketsCount = allMarkets.length;\\n        _ensureMaxLoops(marketsCount);\\n    }\\n\\n    /**\\n     * @dev Pause/unpause an action on a market\\n     * @param market Market to pause/unpause the action on\\n     * @param action Action id to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     */\\n    function _setActionPaused(address market, Action action, bool paused) internal {\\n        require(markets[market].isListed, \\\"cannot pause a market that is not listed\\\");\\n        _actionPaused[market][action] = paused;\\n        emit ActionPausedMarket(VToken(market), action, paused);\\n    }\\n\\n    /**\\n     * @dev Internal function to check that vTokens can be safely redeemed for the underlying asset.\\n     * @param vToken Address of the vTokens to redeem\\n     * @param redeemer Account redeeming the tokens\\n     * @param redeemTokens The number of tokens to redeem\\n     */\\n    function _checkRedeemAllowed(address vToken, address redeemer, uint256 redeemTokens) internal {\\n        Market storage market = markets[vToken];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        /* If the redeemer is not 'in' the market, then we can bypass the liquidity check */\\n        if (!market.accountMembership[redeemer]) {\\n            return;\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(redeemer);\\n\\n        /* Otherwise, perform a hypothetical liquidity check to guard against shortfall */\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            redeemer,\\n            VToken(vToken),\\n            redeemTokens,\\n            0,\\n            _getCollateralFactor\\n        );\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n    }\\n\\n    /**\\n     * @notice Get the total collateral, weighted collateral, borrow balance, liquidity, shortfall\\n     * @param account The account to get the snapshot for\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n     *  liquidation threshold. Accepts the address of the vToken and returns the weight as Exp.\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getCurrentLiquiditySnapshot(\\n        address account,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        return _getHypotheticalLiquiditySnapshot(account, VToken(address(0)), 0, 0, weight);\\n    }\\n\\n    /**\\n     * @notice Determine what the supply/borrow balances would be if the given amounts were redeemed/borrowed\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n         liquidation threshold. Accepts the address of the VToken and returns the weight\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getHypotheticalLiquiditySnapshot(\\n        address account,\\n        VToken vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        // For each asset the account is in\\n        VToken[] memory assets = getAssetsIn(account);\\n        uint256 assetsCount = assets.length;\\n\\n        for (uint256 i; i < assetsCount; ++i) {\\n            VToken asset = assets[i];\\n\\n            // Read the balances and exchange rate from the vToken\\n            (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) = _safeGetAccountSnapshot(\\n                asset,\\n                account\\n            );\\n\\n            // Get the normalized price of the asset\\n            Exp memory oraclePrice = Exp({ mantissa: _safeGetUnderlyingPrice(asset) });\\n\\n            // Pre-compute conversion factors from vTokens -> usd\\n            Exp memory vTokenPrice = mul_(Exp({ mantissa: exchangeRateMantissa }), oraclePrice);\\n            Exp memory weightedVTokenPrice = mul_(weight(asset), vTokenPrice);\\n\\n            // weightedCollateral += weightedVTokenPrice * vTokenBalance\\n            snapshot.weightedCollateral = mul_ScalarTruncateAddUInt(\\n                weightedVTokenPrice,\\n                vTokenBalance,\\n                snapshot.weightedCollateral\\n            );\\n\\n            // totalCollateral += vTokenPrice * vTokenBalance\\n            snapshot.totalCollateral = mul_ScalarTruncateAddUInt(vTokenPrice, vTokenBalance, snapshot.totalCollateral);\\n\\n            // borrows += oraclePrice * borrowBalance\\n            snapshot.borrows = mul_ScalarTruncateAddUInt(oraclePrice, borrowBalance, snapshot.borrows);\\n\\n            // Calculate effects of interacting with vTokenModify\\n            if (asset == vTokenModify) {\\n                // redeem effect\\n                // effects += tokensToDenom * redeemTokens\\n                snapshot.effects = mul_ScalarTruncateAddUInt(weightedVTokenPrice, redeemTokens, snapshot.effects);\\n\\n                // borrow effect\\n                // effects += oraclePrice * borrowAmount\\n                snapshot.effects = mul_ScalarTruncateAddUInt(oraclePrice, borrowAmount, snapshot.effects);\\n            }\\n        }\\n\\n        uint256 borrowPlusEffects = snapshot.borrows + snapshot.effects;\\n        // These are safe, as the underflow condition is checked first\\n        unchecked {\\n            if (snapshot.weightedCollateral > borrowPlusEffects) {\\n                snapshot.liquidity = snapshot.weightedCollateral - borrowPlusEffects;\\n                snapshot.shortfall = 0;\\n            } else {\\n                snapshot.liquidity = 0;\\n                snapshot.shortfall = borrowPlusEffects - snapshot.weightedCollateral;\\n            }\\n        }\\n\\n        return snapshot;\\n    }\\n\\n    /**\\n     * @dev Retrieves price from oracle for an asset and checks it is nonzero\\n     * @param asset Address for asset to query price\\n     * @return Underlying price\\n     */\\n    function _safeGetUnderlyingPrice(VToken asset) internal view returns (uint256) {\\n        uint256 oraclePriceMantissa = oracle.getUnderlyingPrice(address(asset));\\n        if (oraclePriceMantissa == 0) {\\n            revert PriceError(address(asset));\\n        }\\n        return oraclePriceMantissa;\\n    }\\n\\n    /**\\n     * @dev Return collateral factor for a market\\n     * @param asset Address for asset\\n     * @return Collateral factor as exponential\\n     */\\n    function _getCollateralFactor(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].collateralFactorMantissa });\\n    }\\n\\n    /**\\n     * @dev Retrieves liquidation threshold for a market as an exponential\\n     * @param asset Address for asset to liquidation threshold\\n     * @return Liquidation threshold as exponential\\n     */\\n    function _getLiquidationThreshold(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].liquidationThresholdMantissa });\\n    }\\n\\n    /**\\n     * @dev Returns supply and borrow balances of user in vToken, reverts on failure\\n     * @param vToken Market to query\\n     * @param user Account address\\n     * @return vTokenBalance Balance of vTokens, the same as vToken.balanceOf(user)\\n     * @return borrowBalance Borrowed amount, including the interest\\n     * @return exchangeRateMantissa Stored exchange rate\\n     */\\n    function _safeGetAccountSnapshot(\\n        VToken vToken,\\n        address user\\n    ) internal view returns (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) {\\n        uint256 err;\\n        (err, vTokenBalance, borrowBalance, exchangeRateMantissa) = vToken.getAccountSnapshot(user);\\n        if (err != 0) {\\n            revert SnapshotError(address(vToken), user);\\n        }\\n        return (vTokenBalance, borrowBalance, exchangeRateMantissa);\\n    }\\n\\n    /// @notice Reverts if the call is not from expectedSender\\n    /// @param expectedSender Expected transaction sender\\n    function _checkSenderIs(address expectedSender) internal view {\\n        if (msg.sender != expectedSender) {\\n            revert UnexpectedSender(expectedSender, msg.sender);\\n        }\\n    }\\n\\n    /// @notice Reverts if a certain action is paused on a market\\n    /// @param market Market to check\\n    /// @param action Action to check\\n    function _checkActionPauseState(address market, Action action) private view {\\n        if (actionPaused(market, action)) {\\n            revert ActionPaused(market, action);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x7c6e1c6264e4681f82a9ac1bcd9155197a930033291ee5561ad97a56006f5e9c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\n\\nenum Action {\\n    MINT,\\n    REDEEM,\\n    BORROW,\\n    REPAY,\\n    SEIZE,\\n    LIQUIDATE,\\n    TRANSFER,\\n    ENTER_MARKET,\\n    EXIT_MARKET\\n}\\n\\n/**\\n * @title ComptrollerInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract.\\n */\\ninterface ComptrollerInterface {\\n    /*** Assets You Are In ***/\\n\\n    function enterMarkets(address[] calldata vTokens) external returns (uint256[] memory);\\n\\n    function exitMarket(address vToken) external returns (uint256);\\n\\n    /*** Policy Hooks ***/\\n\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external;\\n\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external;\\n\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external;\\n\\n    function preRepayHook(address vToken, address borrower) external;\\n\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external;\\n\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower\\n    ) external;\\n\\n    function borrowVerify(address vToken, address borrower, uint borrowAmount) external;\\n\\n    function mintVerify(address vToken, address minter, uint mintAmount, uint mintTokens) external;\\n\\n    function redeemVerify(address vToken, address redeemer, uint redeemAmount, uint redeemTokens) external;\\n\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer,\\n        address borrower,\\n        uint repayAmount,\\n        uint borrowerIndex\\n    ) external;\\n\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address liquidator,\\n        address borrower,\\n        uint repayAmount,\\n        uint seizeTokens\\n    ) external;\\n\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower,\\n        uint seizeTokens\\n    ) external;\\n\\n    function transferVerify(address vToken, address src, address dst, uint transferTokens) external;\\n\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external;\\n\\n    function isComptroller() external view returns (bool);\\n\\n    /*** Liquidity/Liquidation Calculations ***/\\n\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 repayAmount\\n    ) external view returns (uint256, uint256);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function actionPaused(address market, Action action) external view returns (bool);\\n}\\n\\n/**\\n * @title ComptrollerViewInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract, including only some util view functions.\\n */\\ninterface ComptrollerViewInterface {\\n    function markets(address) external view returns (bool, uint256);\\n\\n    function oracle() external view returns (ResilientOracleInterface);\\n\\n    function getAssetsIn(address) external view returns (VToken[] memory);\\n\\n    function closeFactorMantissa() external view returns (uint256);\\n\\n    function liquidationIncentiveMantissa() external view returns (uint256);\\n\\n    function minLiquidatableCollateral() external view returns (uint256);\\n\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function borrowCaps(address) external view returns (uint256);\\n\\n    function supplyCaps(address) external view returns (uint256);\\n\\n    function approvedDelegates(address user, address delegate) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xcbf7f9977472650c61345b7cbde23e81f626e1f8863bab4c6ce3dacfc7604919\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\nimport { Action } from \\\"./ComptrollerInterface.sol\\\";\\n\\n/**\\n * @title ComptrollerStorage\\n * @author Venus\\n * @notice Storage layout for the `Comptroller` contract.\\n */\\ncontract ComptrollerStorage {\\n    struct LiquidationOrder {\\n        VToken vTokenCollateral;\\n        VToken vTokenBorrowed;\\n        uint256 repayAmount;\\n    }\\n\\n    struct AccountLiquiditySnapshot {\\n        uint256 totalCollateral;\\n        uint256 weightedCollateral;\\n        uint256 borrows;\\n        uint256 effects;\\n        uint256 liquidity;\\n        uint256 shortfall;\\n    }\\n\\n    struct RewardSpeeds {\\n        address rewardToken;\\n        uint256 supplySpeed;\\n        uint256 borrowSpeed;\\n    }\\n\\n    struct Market {\\n        // Whether or not this market is listed\\n        bool isListed;\\n        //  Multiplier representing the most one can borrow against their collateral in this market.\\n        //  For instance, 0.9 to allow borrowing 90% of collateral value.\\n        //  Must be between 0 and 1, and stored as a mantissa.\\n        uint256 collateralFactorMantissa;\\n        //  Multiplier representing the collateralization after which the borrow is eligible\\n        //  for liquidation. For instance, 0.8 liquidate when the borrow is 80% of collateral\\n        //  value. Must be between 0 and collateral factor, stored as a mantissa.\\n        uint256 liquidationThresholdMantissa;\\n        // Per-market mapping of \\\"accounts in this asset\\\"\\n        mapping(address => bool) accountMembership;\\n    }\\n\\n    /**\\n     * @notice Oracle which gives the price of any given asset\\n     */\\n    ResilientOracleInterface public oracle;\\n\\n    /**\\n     * @notice Multiplier used to calculate the maximum repayAmount when liquidating a borrow\\n     */\\n    uint256 public closeFactorMantissa;\\n\\n    /**\\n     * @notice Multiplier representing the discount on collateral that a liquidator receives\\n     */\\n    uint256 public liquidationIncentiveMantissa;\\n\\n    /**\\n     * @notice Per-account mapping of \\\"assets you are in\\\"\\n     */\\n    mapping(address => VToken[]) public accountAssets;\\n\\n    /**\\n     * @notice Official mapping of vTokens -> Market metadata\\n     * @dev Used e.g. to determine if a market is supported\\n     */\\n    mapping(address => Market) public markets;\\n\\n    /// @notice A list of all markets\\n    VToken[] public allMarkets;\\n\\n    /// @notice Borrow caps enforced by borrowAllowed for each vToken address. Defaults to zero which restricts borrowing.\\n    mapping(address => uint256) public borrowCaps;\\n\\n    /// @notice Minimal collateral required for regular (non-batch) liquidations\\n    uint256 public minLiquidatableCollateral;\\n\\n    /// @notice Supply caps enforced by mintAllowed for each vToken address. Defaults to zero which corresponds to minting not allowed\\n    mapping(address => uint256) public supplyCaps;\\n\\n    /// @notice True if a certain action is paused on a certain market\\n    mapping(address => mapping(Action => bool)) internal _actionPaused;\\n\\n    // List of Reward Distributors added\\n    RewardsDistributor[] internal rewardsDistributors;\\n\\n    // Used to check if rewards distributor is added\\n    mapping(address => bool) internal rewardsDistributorExists;\\n\\n    /// @notice Flag indicating whether forced liquidation enabled for a market\\n    mapping(address => bool) public isForcedLiquidationEnabled;\\n\\n    uint256 internal constant NO_ERROR = 0;\\n\\n    // closeFactorMantissa must be strictly greater than this value\\n    uint256 internal constant MIN_CLOSE_FACTOR_MANTISSA = 0.05e18; // 0.05\\n\\n    // closeFactorMantissa must not exceed this value\\n    uint256 internal constant MAX_CLOSE_FACTOR_MANTISSA = 0.9e18; // 0.9\\n\\n    // No collateralFactorMantissa may exceed this value\\n    uint256 internal constant MAX_COLLATERAL_FACTOR_MANTISSA = 0.95e18; // 0.95\\n\\n    /// Prime token address\\n    IPrime public prime;\\n\\n    /// @notice Whether the delegate is allowed to borrow or redeem on behalf of the user\\n    //mapping(address user => mapping (address delegate => bool approved)) public approvedDelegates;\\n    mapping(address => mapping(address => bool)) public approvedDelegates;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4df44cb65ac152bac2be4b4545430e703005a74a55b72e144100b16421bd8bfd\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title TokenErrorReporter\\n * @author Venus\\n * @notice Errors that can be thrown by the `VToken` contract.\\n */\\ncontract TokenErrorReporter {\\n    uint256 public constant NO_ERROR = 0; // support legacy return codes\\n\\n    error TransferNotAllowed();\\n\\n    error MintFreshnessCheck();\\n\\n    error RedeemFreshnessCheck();\\n    error RedeemTransferOutNotPossible();\\n\\n    error BorrowFreshnessCheck();\\n    error BorrowCashNotAvailable();\\n    error DelegateNotApproved();\\n\\n    error RepayBorrowFreshnessCheck();\\n\\n    error HealBorrowUnauthorized();\\n    error ForceLiquidateBorrowUnauthorized();\\n\\n    error LiquidateFreshnessCheck();\\n    error LiquidateCollateralFreshnessCheck();\\n    error LiquidateAccrueCollateralInterestFailed(uint256 errorCode);\\n    error LiquidateLiquidatorIsBorrower();\\n    error LiquidateCloseAmountIsZero();\\n    error LiquidateCloseAmountIsUintMax();\\n\\n    error LiquidateSeizeLiquidatorIsBorrower();\\n\\n    error ProtocolSeizeShareTooBig();\\n\\n    error SetReserveFactorFreshCheck();\\n    error SetReserveFactorBoundsCheck();\\n\\n    error AddReservesFactorFreshCheck(uint256 actualAddAmount);\\n\\n    error ReduceReservesFreshCheck();\\n    error ReduceReservesCashNotAvailable();\\n    error ReduceReservesCashValidation();\\n\\n    error SetInterestRateModelFreshCheck();\\n}\\n\",\"keccak256\":\"0x7a7ced1caaac2d9242659ebd50b99f308c725ce958ac9e11f7ada404b1d97a7b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { EXP_SCALE as EXP_SCALE_, MANTISSA_ONE as MANTISSA_ONE_ } from \\\"./lib/constants.sol\\\";\\n\\n/**\\n * @title Exponential module for storing fixed-precision decimals\\n * @author Compound\\n * @notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.\\n *         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:\\n *         `Exp({mantissa: 5100000000000000000})`.\\n */\\ncontract ExponentialNoError {\\n    struct Exp {\\n        uint256 mantissa;\\n    }\\n\\n    struct Double {\\n        uint256 mantissa;\\n    }\\n\\n    uint256 internal constant EXP_SCALE = EXP_SCALE_;\\n    uint256 internal constant DOUBLE_SCALE = 1e36;\\n    uint256 internal constant HALF_EXP_SCALE = EXP_SCALE / 2;\\n    uint256 internal constant MANTISSA_ONE = MANTISSA_ONE_;\\n\\n    /**\\n     * @dev Truncates the given exp to a whole number value.\\n     *      For example, truncate(Exp{mantissa: 15 * EXP_SCALE}) = 15\\n     */\\n    function truncate(Exp memory exp) internal pure returns (uint256) {\\n        // Note: We are not using careful math here as we're performing a division that cannot fail\\n        return exp.mantissa / EXP_SCALE;\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, then truncate to return an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncate(Exp memory a, uint256 scalar) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return truncate(product);\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncateAddUInt(Exp memory a, uint256 scalar, uint256 addend) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return add_(truncate(product), addend);\\n    }\\n\\n    /**\\n     * @dev Checks if first Exp is less than second Exp.\\n     */\\n    function lessThanExp(Exp memory left, Exp memory right) internal pure returns (bool) {\\n        return left.mantissa < right.mantissa;\\n    }\\n\\n    function safe224(uint256 n, string memory errorMessage) internal pure returns (uint224) {\\n        require(n <= type(uint224).max, errorMessage);\\n        return uint224(n);\\n    }\\n\\n    function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) {\\n        require(n <= type(uint32).max, errorMessage);\\n        return uint32(n);\\n    }\\n\\n    function add_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a + b;\\n    }\\n\\n    function sub_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a - b;\\n    }\\n\\n    function mul_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b.mantissa) / EXP_SCALE });\\n    }\\n\\n    function mul_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / EXP_SCALE;\\n    }\\n\\n    function mul_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b.mantissa) / DOUBLE_SCALE });\\n    }\\n\\n    function mul_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / DOUBLE_SCALE;\\n    }\\n\\n    function mul_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a * b;\\n    }\\n\\n    function div_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(mul_(a.mantissa, EXP_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, EXP_SCALE), b.mantissa);\\n    }\\n\\n    function div_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a.mantissa, DOUBLE_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, DOUBLE_SCALE), b.mantissa);\\n    }\\n\\n    function div_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a / b;\\n    }\\n\\n    function fraction(uint256 a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a, DOUBLE_SCALE), b) });\\n    }\\n}\\n\",\"keccak256\":\"0x8afbe8a24fe3539c124e718681ed3dcebd24c40dd53095786c0155998213b9b0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title Compound's InterestRateModel Interface\\n * @author Compound\\n */\\nabstract contract InterestRateModel {\\n    /**\\n     * @notice Calculates the current borrow interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getBorrowRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Calculates the current supply interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param reserveFactorMantissa The current reserve factor the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getSupplyRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 reserveFactorMantissa,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is an InterestRateModel contract (for inspection)\\n     * @return Always true\\n     */\\n    function isInterestRateModel() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0xc4fda1ab75ebe4b187b707c4f10c58780f343cf343c537f641dc75d3cd28ab51\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title MaxLoopsLimitHelper\\n * @author Venus\\n * @notice Abstract contract used to avoid collection with too many items that would generate gas errors and DoS.\\n */\\nabstract contract MaxLoopsLimitHelper {\\n    // Limit for the loops to avoid the DOS\\n    uint256 public maxLoopsLimit;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when max loops limit is set\\n    event MaxLoopsLimitUpdated(uint256 oldMaxLoopsLimit, uint256 newmaxLoopsLimit);\\n\\n    /// @notice Thrown an error on maxLoopsLimit exceeds for any loop\\n    error MaxLoopsLimitExceeded(uint256 loopsLimit, uint256 requiredLoops);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function _setMaxLoopsLimit(uint256 limit) internal {\\n        require(limit > maxLoopsLimit, \\\"Comptroller: Invalid maxLoopsLimit\\\");\\n\\n        uint256 oldMaxLoopsLimit = maxLoopsLimit;\\n        maxLoopsLimit = limit;\\n\\n        emit MaxLoopsLimitUpdated(oldMaxLoopsLimit, limit);\\n    }\\n\\n    /**\\n     * @notice Compare the maxLoopsLimit with number of the times loop iterate\\n     * @param len Length of the loops iterate\\n     * @custom:error MaxLoopsLimitExceeded error is thrown when loops length exceeds maxLoopsLimit\\n     */\\n    function _ensureMaxLoops(uint256 len) internal view {\\n        if (len > maxLoopsLimit) {\\n            revert MaxLoopsLimitExceeded(maxLoopsLimit, len);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x4c25e30635485d162177effa384eee51768b0141a567a0da16ff6ad673274166\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\n\\nimport { ExponentialNoError } from \\\"../ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"../VToken.sol\\\";\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"../MaxLoopsLimitHelper.sol\\\";\\nimport { RewardsDistributorStorage } from \\\"./RewardsDistributorStorage.sol\\\";\\n\\n/**\\n * @title `RewardsDistributor`\\n * @author Venus\\n * @notice Contract used to configure, track and distribute rewards to users based on their actions (borrows and supplies) in the protocol.\\n * Users can receive additional rewards through a `RewardsDistributor`. Each `RewardsDistributor` proxy is initialized with a specific reward\\n * token and `Comptroller`, which can then distribute the reward token to users that supply or borrow in the associated pool.\\n * Authorized users can set the reward token borrow and supply speeds for each market in the pool. This sets a fixed amount of reward\\n * token to be released each slot (block or second) for borrowers and suppliers, which is distributed based on a user\\u2019s percentage of the borrows or supplies\\n * respectively. The owner can also set up reward distributions to contributor addresses (distinct from suppliers and borrowers) by setting\\n * their contributor reward token speed, which similarly allocates a fixed amount of reward token per slot (block or second).\\n *\\n * The owner has the ability to transfer any amount of reward tokens held by the contract to any other address. Rewards are not distributed\\n * automatically and must be claimed by a user calling `claimRewardToken()`. Users should be aware that it is up to the owner and other centralized\\n * entities to ensure that the `RewardsDistributor` holds enough tokens to distribute the accumulated rewards of users and contributors.\\n */\\ncontract RewardsDistributor is\\n    ExponentialNoError,\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    MaxLoopsLimitHelper,\\n    RewardsDistributorStorage,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    /// @notice The initial REWARD TOKEN index for a market\\n    uint224 public constant INITIAL_INDEX = 1e36;\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a supplier\\n    event DistributedSupplierRewardToken(\\n        VToken indexed vToken,\\n        address indexed supplier,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenSupplyIndex\\n    );\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a borrower\\n    event DistributedBorrowerRewardToken(\\n        VToken indexed vToken,\\n        address indexed borrower,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenBorrowIndex\\n    );\\n\\n    /// @notice Emitted when a new supply-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenSupplySpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when a new borrow-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenBorrowSpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when REWARD TOKEN is granted by admin\\n    event RewardTokenGranted(address indexed recipient, uint256 amount);\\n\\n    /// @notice Emitted when a new REWARD TOKEN speed is set for a contributor\\n    event ContributorRewardTokenSpeedUpdated(address indexed contributor, uint256 newSpeed);\\n\\n    /// @notice Emitted when a market is initialized\\n    event MarketInitialized(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token supply index is updated\\n    event RewardTokenSupplyIndexUpdated(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token borrow index is updated\\n    event RewardTokenBorrowIndexUpdated(address indexed vToken, Exp marketBorrowIndex);\\n\\n    /// @notice Emitted when a reward for contributor is updated\\n    event ContributorRewardsUpdated(address indexed contributor, uint256 rewardAccrued);\\n\\n    /// @notice Emitted when a reward token last rewarding block for supply is updated\\n    event SupplyLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding block for borrow is updated\\n    event BorrowLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for supply is updated\\n    event SupplyLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for borrow is updated\\n    event BorrowLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    modifier onlyComptroller() {\\n        require(address(comptroller) == msg.sender, \\\"Only comptroller can call this function\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice RewardsDistributor initializer\\n     * @dev Initializes the deployer to owner\\n     * @param comptroller_ Comptroller to attach the reward distributor to\\n     * @param rewardToken_ Reward token to distribute\\n     * @param loopsLimit_ Maximum number of iterations for the loops in this contract\\n     * @param accessControlManager_ AccessControlManager contract address\\n     */\\n    function initialize(\\n        Comptroller comptroller_,\\n        IERC20Upgradeable rewardToken_,\\n        uint256 loopsLimit_,\\n        address accessControlManager_\\n    ) external initializer {\\n        comptroller = comptroller_;\\n        rewardToken = rewardToken_;\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n\\n        _setMaxLoopsLimit(loopsLimit_);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken\\n     * @param vToken The address of the vToken to be initialized\\n     * @custom:event MarketInitialized emits on success\\n     * @custom:access Only Comptroller\\n     */\\n    function initializeMarket(address vToken) external onlyComptroller {\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        isTimeBased\\n            ? _initializeMarketTimestampBased(vToken, blockNumberOrTimestamp)\\n            : _initializeMarketBlockBased(vToken, safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\"));\\n\\n        emit MarketInitialized(vToken);\\n    }\\n\\n    /*** Reward Token Distribution ***/\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them\\n     *         Borrowers will begin to accrue after the first interaction with the protocol.\\n     * @dev This function should only be called when the user has a borrow position in the market\\n     *      (e.g. Comptroller.preBorrowHook, and Comptroller.preRepayHook)\\n     *      We avoid an external call to check if they are in the market to save gas because this function is called in many places\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function distributeBorrowerRewardToken(\\n        address vToken,\\n        address borrower,\\n        Exp memory marketBorrowIndex\\n    ) external onlyComptroller {\\n        _distributeBorrowerRewardToken(vToken, borrower, marketBorrowIndex);\\n    }\\n\\n    function updateRewardTokenSupplyIndex(address vToken) external onlyComptroller {\\n        _updateRewardTokenSupplyIndex(vToken);\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the recipient\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all\\n     * @param recipient The address of the recipient to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     */\\n    function grantRewardToken(address recipient, uint256 amount) external onlyOwner {\\n        uint256 amountLeft = _grantRewardToken(recipient, amount);\\n        require(amountLeft == 0, \\\"insufficient rewardToken for grant\\\");\\n        emit RewardTokenGranted(recipient, amount);\\n    }\\n\\n    function updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) external onlyComptroller {\\n        _updateRewardTokenBorrowIndex(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN borrow and supply speeds for the specified markets\\n     * @param vTokens The markets whose REWARD TOKEN speed to update\\n     * @param supplySpeeds New supply-side REWARD TOKEN speed for the corresponding market\\n     * @param borrowSpeeds New borrow-side REWARD TOKEN speed for the corresponding market\\n     */\\n    function setRewardTokenSpeeds(\\n        VToken[] memory vTokens,\\n        uint256[] memory supplySpeeds,\\n        uint256[] memory borrowSpeeds\\n    ) external {\\n        _checkAccessAllowed(\\\"setRewardTokenSpeeds(address[],uint256[],uint256[])\\\");\\n        uint256 numTokens = vTokens.length;\\n        require(numTokens == supplySpeeds.length && numTokens == borrowSpeeds.length, \\\"invalid setRewardTokenSpeeds\\\");\\n\\n        for (uint256 i; i < numTokens; ++i) {\\n            _setRewardTokenSpeed(vTokens[i], supplySpeeds[i], borrowSpeeds[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for the specified markets, used when contract is block based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlocks New supply-side REWARD TOKEN last rewarding block for the corresponding market\\n     * @param borrowLastRewardingBlocks New borrow-side REWARD TOKEN last rewarding block for the corresponding market\\n     */\\n    function setLastRewardingBlocks(\\n        VToken[] calldata vTokens,\\n        uint32[] calldata supplyLastRewardingBlocks,\\n        uint32[] calldata borrowLastRewardingBlocks\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlocks(address[],uint32[],uint32[])\\\");\\n        require(!isTimeBased, \\\"Block-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlocks.length && numTokens == borrowLastRewardingBlocks.length,\\n            \\\"RewardsDistributor::setLastRewardingBlocks invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlock(vTokens[i], supplyLastRewardingBlocks[i], borrowLastRewardingBlocks[i]);\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block timestamp for the specified markets, used when contract is time based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlockTimestamps New supply-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     * @param borrowLastRewardingBlockTimestamps New borrow-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     */\\n    function setLastRewardingBlockTimestamps(\\n        VToken[] calldata vTokens,\\n        uint256[] calldata supplyLastRewardingBlockTimestamps,\\n        uint256[] calldata borrowLastRewardingBlockTimestamps\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])\\\");\\n        require(isTimeBased, \\\"Time-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlockTimestamps.length &&\\n                numTokens == borrowLastRewardingBlockTimestamps.length,\\n            \\\"RewardsDistributor::setLastRewardingBlockTimestamps invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlockTimestamp(\\n                vTokens[i],\\n                supplyLastRewardingBlockTimestamps[i],\\n                borrowLastRewardingBlockTimestamps[i]\\n            );\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single contributor\\n     * @param contributor The contributor whose REWARD TOKEN speed to update\\n     * @param rewardTokenSpeed New REWARD TOKEN speed for contributor\\n     */\\n    function setContributorRewardTokenSpeed(address contributor, uint256 rewardTokenSpeed) external onlyOwner {\\n        // note that REWARD TOKEN speed could be set to 0 to halt liquidity rewards for a contributor\\n        updateContributorRewards(contributor);\\n        if (rewardTokenSpeed == 0) {\\n            // release storage\\n            delete lastContributorBlock[contributor];\\n        } else {\\n            lastContributorBlock[contributor] = getBlockNumberOrTimestamp();\\n        }\\n        rewardTokenContributorSpeeds[contributor] = rewardTokenSpeed;\\n\\n        emit ContributorRewardTokenSpeedUpdated(contributor, rewardTokenSpeed);\\n    }\\n\\n    function distributeSupplierRewardToken(address vToken, address supplier) external onlyComptroller {\\n        _distributeSupplierRewardToken(vToken, supplier);\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in all markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     */\\n    function claimRewardToken(address holder) external {\\n        return claimRewardToken(holder, comptroller.getAllMarkets());\\n    }\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Calculate additional accrued REWARD TOKEN for a contributor since last accrual\\n     * @param contributor The address to calculate contributor rewards for\\n     */\\n    function updateContributorRewards(address contributor) public {\\n        uint256 rewardTokenSpeed = rewardTokenContributorSpeeds[contributor];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n        uint256 deltaBlocksOrTimestamp = sub_(blockNumberOrTimestamp, lastContributorBlock[contributor]);\\n        if (deltaBlocksOrTimestamp > 0 && rewardTokenSpeed > 0) {\\n            uint256 newAccrued = mul_(deltaBlocksOrTimestamp, rewardTokenSpeed);\\n            uint256 contributorAccrued = add_(rewardTokenAccrued[contributor], newAccrued);\\n\\n            rewardTokenAccrued[contributor] = contributorAccrued;\\n            lastContributorBlock[contributor] = blockNumberOrTimestamp;\\n\\n            emit ContributorRewardsUpdated(contributor, rewardTokenAccrued[contributor]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in the specified markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     * @param vTokens The list of markets to claim REWARD TOKEN in\\n     */\\n    function claimRewardToken(address holder, VToken[] memory vTokens) public {\\n        uint256 vTokensCount = vTokens.length;\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            VToken vToken = vTokens[i];\\n            require(comptroller.isMarketListed(vToken), \\\"market must be listed\\\");\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n            _distributeBorrowerRewardToken(address(vToken), holder, borrowIndex);\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n            _distributeSupplierRewardToken(address(vToken), holder);\\n        }\\n        rewardTokenAccrued[holder] = _grantRewardToken(holder, rewardTokenAccrued[holder]);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for a single market.\\n     * @param vToken market's whose reward token last rewarding block to be updated\\n     * @param supplyLastRewardingBlock New supply-side REWARD TOKEN last rewarding block for market\\n     * @param borrowLastRewardingBlock New borrow-side REWARD TOKEN last rewarding block for market\\n     */\\n    function _setLastRewardingBlock(\\n        VToken vToken,\\n        uint32 supplyLastRewardingBlock,\\n        uint32 borrowLastRewardingBlock\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockNumber = getBlockNumberOrTimestamp();\\n\\n        require(supplyLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n        require(borrowLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n\\n        uint32 currentSupplyLastRewardingBlock = rewardTokenSupplyState[address(vToken)].lastRewardingBlock;\\n        uint32 currentBorrowLastRewardingBlock = rewardTokenBorrowState[address(vToken)].lastRewardingBlock;\\n\\n        require(\\n            currentSupplyLastRewardingBlock == 0 || currentSupplyLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlock == 0 || currentBorrowLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlock != supplyLastRewardingBlock) {\\n            rewardTokenSupplyState[address(vToken)].lastRewardingBlock = supplyLastRewardingBlock;\\n            emit SupplyLastRewardingBlockUpdated(address(vToken), supplyLastRewardingBlock);\\n        }\\n\\n        if (currentBorrowLastRewardingBlock != borrowLastRewardingBlock) {\\n            rewardTokenBorrowState[address(vToken)].lastRewardingBlock = borrowLastRewardingBlock;\\n            emit BorrowLastRewardingBlockUpdated(address(vToken), borrowLastRewardingBlock);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding timestamp for a single market.\\n     * @param vToken market's whose reward token last rewarding timestamp to be updated\\n     * @param supplyLastRewardingBlockTimestamp New supply-side REWARD TOKEN last rewarding timestamp for market\\n     * @param borrowLastRewardingBlockTimestamp New borrow-side REWARD TOKEN last rewarding timestamp for market\\n     */\\n    function _setLastRewardingBlockTimestamp(\\n        VToken vToken,\\n        uint256 supplyLastRewardingBlockTimestamp,\\n        uint256 borrowLastRewardingBlockTimestamp\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockTimestamp = getBlockNumberOrTimestamp();\\n\\n        require(\\n            supplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n        require(\\n            borrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n\\n        uint256 currentSupplyLastRewardingBlockTimestamp = rewardTokenSupplyStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n        uint256 currentBorrowLastRewardingBlockTimestamp = rewardTokenBorrowStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n\\n        require(\\n            currentSupplyLastRewardingBlockTimestamp == 0 || currentSupplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlockTimestamp == 0 || currentBorrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlockTimestamp != supplyLastRewardingBlockTimestamp) {\\n            rewardTokenSupplyStateTimeBased[address(vToken)].lastRewardingTimestamp = supplyLastRewardingBlockTimestamp;\\n            emit SupplyLastRewardingBlockTimestampUpdated(address(vToken), supplyLastRewardingBlockTimestamp);\\n        }\\n\\n        if (currentBorrowLastRewardingBlockTimestamp != borrowLastRewardingBlockTimestamp) {\\n            rewardTokenBorrowStateTimeBased[address(vToken)].lastRewardingTimestamp = borrowLastRewardingBlockTimestamp;\\n            emit BorrowLastRewardingBlockTimestampUpdated(address(vToken), borrowLastRewardingBlockTimestamp);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single market.\\n     * @param vToken market's whose reward token rate to be updated\\n     * @param supplySpeed New supply-side REWARD TOKEN speed for market\\n     * @param borrowSpeed New borrow-side REWARD TOKEN speed for market\\n     */\\n    function _setRewardTokenSpeed(VToken vToken, uint256 supplySpeed, uint256 borrowSpeed) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        if (rewardTokenSupplySpeeds[address(vToken)] != supplySpeed) {\\n            // Supply speed updated so let's update supply state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n\\n            // Update speed and emit event\\n            rewardTokenSupplySpeeds[address(vToken)] = supplySpeed;\\n            emit RewardTokenSupplySpeedUpdated(vToken, supplySpeed);\\n        }\\n\\n        if (rewardTokenBorrowSpeeds[address(vToken)] != borrowSpeed) {\\n            // Borrow speed updated so let's update borrow state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n\\n            // Update speed and emit event\\n            rewardTokenBorrowSpeeds[address(vToken)] = borrowSpeed;\\n            emit RewardTokenBorrowSpeedUpdated(vToken, borrowSpeed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculate REWARD TOKEN accrued by a supplier and possibly transfer it to them.\\n     * @param vToken The market in which the supplier is interacting\\n     * @param supplier The address of the supplier to distribute REWARD TOKEN to\\n     */\\n    function _distributeSupplierRewardToken(address vToken, address supplier) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n        uint256 supplierIndex = rewardTokenSupplierIndex[vToken][supplier];\\n\\n        // Update supplier's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenSupplierIndex[vToken][supplier] = supplyIndex;\\n\\n        if (supplierIndex == 0 && supplyIndex >= INITIAL_INDEX) {\\n            // Covers the case where users supplied tokens before the market's supply state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when supplier rewards were first\\n            // set for the market.\\n            supplierIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per vToken accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(supplyIndex, supplierIndex) });\\n\\n        uint256 supplierTokens = VToken(vToken).balanceOf(supplier);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerVToken\\n        uint256 supplierDelta = mul_(supplierTokens, deltaIndex);\\n\\n        uint256 supplierAccrued = add_(rewardTokenAccrued[supplier], supplierDelta);\\n        rewardTokenAccrued[supplier] = supplierAccrued;\\n\\n        emit DistributedSupplierRewardToken(VToken(vToken), supplier, supplierDelta, supplierAccrued, supplyIndex);\\n    }\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them.\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function _distributeBorrowerRewardToken(address vToken, address borrower, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n        uint256 borrowerIndex = rewardTokenBorrowerIndex[vToken][borrower];\\n\\n        // Update borrowers's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenBorrowerIndex[vToken][borrower] = borrowIndex;\\n\\n        if (borrowerIndex == 0 && borrowIndex >= INITIAL_INDEX) {\\n            // Covers the case where users borrowed tokens before the market's borrow state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when borrower rewards were first\\n            // set for the market.\\n            borrowerIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per borrowed unit accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(borrowIndex, borrowerIndex) });\\n\\n        uint256 borrowerAmount = div_(VToken(vToken).borrowBalanceStored(borrower), marketBorrowIndex);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerBorrowedUnit\\n        if (borrowerAmount != 0) {\\n            uint256 borrowerDelta = mul_(borrowerAmount, deltaIndex);\\n\\n            uint256 borrowerAccrued = add_(rewardTokenAccrued[borrower], borrowerDelta);\\n            rewardTokenAccrued[borrower] = borrowerAccrued;\\n\\n            emit DistributedBorrowerRewardToken(VToken(vToken), borrower, borrowerDelta, borrowerAccrued, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the user.\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all.\\n     * @param user The address of the user to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     * @return The amount of REWARD TOKEN which was NOT transferred to the user\\n     */\\n    function _grantRewardToken(address user, uint256 amount) internal returns (uint256) {\\n        uint256 rewardTokenRemaining = rewardToken.balanceOf(address(this));\\n        if (amount > 0 && amount <= rewardTokenRemaining) {\\n            rewardToken.safeTransfer(user, amount);\\n            return 0;\\n        }\\n        return amount;\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the supply index\\n     * @param vToken The market whose supply index to update\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenSupplyIndex(address vToken) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplySpeed = rewardTokenSupplySpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? supplyStateTimeBased.lastRewardingTimestamp\\n            : uint256(supplyState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? supplyStateTimeBased.timestamp : uint256(supplyState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && supplySpeed > 0) {\\n            uint256 supplyTokens = VToken(vToken).totalSupply();\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, supplySpeed);\\n            Double memory ratio = supplyTokens > 0\\n                ? fraction(accruedSinceUpdate, supplyTokens)\\n                : Double({ mantissa: 0 });\\n            uint224 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: supplyIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                supplyStateTimeBased.index = index;\\n                supplyStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                supplyState.index = index;\\n                supplyState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            isTimeBased ? supplyStateTimeBased.timestamp = blockNumberOrTimestamp : supplyState.block = uint32(\\n                blockNumberOrTimestamp\\n            );\\n        }\\n\\n        emit RewardTokenSupplyIndexUpdated(vToken);\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the borrow index\\n     * @param vToken The market whose borrow index to update\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowSpeed = rewardTokenBorrowSpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? borrowStateTimeBased.lastRewardingTimestamp\\n            : uint256(borrowState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? borrowStateTimeBased.timestamp : uint256(borrowState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && borrowSpeed > 0) {\\n            uint256 borrowAmount = div_(VToken(vToken).totalBorrows(), marketBorrowIndex);\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, borrowSpeed);\\n            Double memory ratio = borrowAmount > 0\\n                ? fraction(accruedSinceUpdate, borrowAmount)\\n                : Double({ mantissa: 0 });\\n            uint224 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: borrowIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                borrowStateTimeBased.index = index;\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.index = index;\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            if (isTimeBased) {\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        }\\n\\n        emit RewardTokenBorrowIndexUpdated(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is block-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockNumber current block number\\n     */\\n    function _initializeMarketBlockBased(address vToken, uint32 blockNumber) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block numbers\\n         */\\n        supplyState.block = borrowState.block = blockNumber;\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is time-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockTimestamp current block timestamp\\n     */\\n    function _initializeMarketTimestampBased(address vToken, uint256 blockTimestamp) internal {\\n        TimeBasedRewardToken storage supplyState = rewardTokenSupplyStateTimeBased[vToken];\\n        TimeBasedRewardToken storage borrowState = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block timestamp\\n         */\\n        supplyState.timestamp = borrowState.timestamp = blockTimestamp;\\n    }\\n}\\n\",\"keccak256\":\"0x3cc824e59c923cfe25c4f1a875959b7e9410cde8e73cd405de13f301298c697f\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\n\\n/**\\n * @title RewardsDistributorStorage\\n * @author Venus\\n * @dev Storage for RewardsDistributor\\n */\\ncontract RewardsDistributorStorage {\\n    struct RewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block number the index was last updated at\\n        uint32 block;\\n        // The block number at which to stop rewards\\n        uint32 lastRewardingBlock;\\n    }\\n\\n    struct TimeBasedRewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block timestamp the index was last updated at\\n        uint256 timestamp;\\n        // The block timestamp at which to stop rewards\\n        uint256 lastRewardingTimestamp;\\n    }\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => RewardToken) public rewardTokenSupplyState;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each supplier as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenSupplierIndex;\\n\\n    /// @notice The REWARD TOKEN accrued but not yet transferred to each user\\n    mapping(address => uint256) public rewardTokenAccrued;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding borrow market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenBorrowSpeeds;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding supply market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenSupplySpeeds;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => RewardToken) public rewardTokenBorrowState;\\n\\n    /// @notice The portion of REWARD TOKEN that each contributor receives per slot (block or second)\\n    mapping(address => uint256) public rewardTokenContributorSpeeds;\\n\\n    /// @notice Last slot (block or second) at which a contributor's REWARD TOKEN rewards have been allocated\\n    mapping(address => uint256) public lastContributorBlock;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each borrower as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenBorrowerIndex;\\n\\n    Comptroller internal comptroller;\\n\\n    IERC20Upgradeable public rewardToken;\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenSupplyStateTimeBased;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenBorrowStateTimeBased;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[37] private __gap;\\n}\\n\",\"keccak256\":\"0x70e5015a78a2acf95277949c8b4796e10b9ac194130be006d5e5217e158070c0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VToken.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IProtocolShareReserve } from \\\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\\\";\\n\\nimport { VTokenInterface } from \\\"./VTokenInterfaces.sol\\\";\\nimport { ComptrollerInterface, ComptrollerViewInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { TokenErrorReporter } from \\\"./ErrorReporter.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title VToken\\n * @author Venus\\n * @notice Each asset that is supported by a pool is integrated through an instance of the `VToken` contract. As outlined in the protocol overview,\\n * each isolated pool creates its own `vToken` corresponding to an asset. Within a given pool, each included `vToken` is referred to as a market of\\n * the pool. The main actions a user regularly interacts with in a market are:\\n\\n- mint/redeem of vTokens;\\n- transfer of vTokens;\\n- borrow/repay a loan on an underlying asset;\\n- liquidate a borrow or liquidate/heal an account.\\n\\n * A user supplies the underlying asset to a pool by minting `vTokens`, where the corresponding `vToken` amount is determined by the `exchangeRate`.\\n * The `exchangeRate` will change over time, dependent on a number of factors, some of which accrue interest. Additionally, once users have minted\\n * `vToken` in a pool, they can borrow any asset in the isolated pool by using their `vToken` as collateral. In order to borrow an asset or use a `vToken`\\n * as collateral, the user must be entered into each corresponding market (else, the `vToken` will not be considered collateral for a borrow). Note that\\n * a user may borrow up to a portion of their collateral determined by the market\\u2019s collateral factor. However, if their borrowed amount exceeds an amount\\n * calculated using the market\\u2019s corresponding liquidation threshold, the borrow is eligible for liquidation. When a user repays a borrow, they must also\\n * pay off interest accrued on the borrow.\\n * \\n * The Venus protocol includes unique mechanisms for healing an account and liquidating an account. These actions are performed in the `Comptroller`\\n * and consider all borrows and collateral for which a given account is entered within a market. These functions may only be called on an account with a\\n * total collateral amount that is no larger than a universal `minLiquidatableCollateral` value, which is used for all markets within a `Comptroller`.\\n * Both functions settle all of an account\\u2019s borrows, but `healAccount()` may add `badDebt` to a vToken. For more detail, see the description of\\n * `healAccount()` and `liquidateAccount()` in the `Comptroller` summary section below.\\n */\\ncontract VToken is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    VTokenInterface,\\n    ExponentialNoError,\\n    TokenErrorReporter,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    uint256 internal constant DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA = 5e16; // 5%\\n\\n    // Maximum fraction of interest that can be set aside for reserves\\n    uint256 internal constant MAX_RESERVE_FACTOR_MANTISSA = 1e18;\\n\\n    // Maximum borrow rate that can ever be applied per slot(block or second)\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 internal immutable MAX_BORROW_RATE_MANTISSA;\\n\\n    /**\\n     * Reentrancy Guard **\\n     */\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     */\\n    modifier nonReentrant() {\\n        require(_notEntered, \\\"re-entered\\\");\\n        _notEntered = false;\\n        _;\\n        _notEntered = true; // get a gas-refund post-Istanbul\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @param maxBorrowRateMantissa_ The maximum value of borrowing rate mantissa\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(\\n        bool timeBased_,\\n        uint256 blocksPerYear_,\\n        uint256 maxBorrowRateMantissa_\\n    ) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        require(maxBorrowRateMantissa_ <= 1e18, \\\"Max borrow rate must be <= 1e18\\\");\\n\\n        MAX_BORROW_RATE_MANTISSA = maxBorrowRateMantissa_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice Construct a new money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     * @custom:error ZeroAddressNotAllowed is thrown when admin address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     */\\n    function initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) external initializer {\\n        ensureNonzeroAddress(admin_);\\n\\n        // Initialize the market\\n        _initialize(\\n            underlying_,\\n            comptroller_,\\n            interestRateModel_,\\n            initialExchangeRateMantissa_,\\n            name_,\\n            symbol_,\\n            decimals_,\\n            admin_,\\n            accessControlManager_,\\n            riskManagement,\\n            reserveFactorMantissa_\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `msg.sender` to `dst`\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transfer(address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `src` to `dst`\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transferFrom(address src, address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, src, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Approve `spender` to transfer up to `amount` from `src`\\n     * @dev This will overwrite the approval amount for `spender`\\n     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\\n     * @param spender The address of the account which may transfer tokens\\n     * @param amount The number of tokens that are approved (uint256.max means infinite)\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function approve(address spender, uint256 amount) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        transferAllowances[src][spender] = amount;\\n        emit Approval(src, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Increase approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param addedValue The number of additional tokens spender can transfer\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 newAllowance = transferAllowances[src][spender];\\n        newAllowance += addedValue;\\n        transferAllowances[src][spender] = newAllowance;\\n\\n        emit Approval(src, spender, newAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Decreases approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param subtractedValue The number of tokens to remove from total approval\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 currentAllowance = transferAllowances[src][spender];\\n        require(currentAllowance >= subtractedValue, \\\"decreased allowance below zero\\\");\\n        unchecked {\\n            currentAllowance -= subtractedValue;\\n        }\\n\\n        transferAllowances[src][spender] = currentAllowance;\\n\\n        emit Approval(src, spender, currentAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Get the underlying balance of the `owner`\\n     * @dev This also accrues interest in a transaction\\n     * @param owner The address of the account to query\\n     * @return amount The amount of underlying owned by `owner`\\n     */\\n    function balanceOfUnderlying(address owner) external override returns (uint256) {\\n        Exp memory exchangeRate = Exp({ mantissa: exchangeRateCurrent() });\\n        return mul_ScalarTruncate(exchangeRate, accountTokens[owner]);\\n    }\\n\\n    /**\\n     * @notice Returns the current total borrows plus accrued interest\\n     * @return totalBorrows The total borrows with interest\\n     */\\n    function totalBorrowsCurrent() external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return totalBorrows;\\n    }\\n\\n    /**\\n     * @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\\n     * @param account The address whose balance should be calculated after updating borrowIndex\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceCurrent(address account) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Sender supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function mint(uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, msg.sender, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender calls on-behalf of minter. minter supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param minter User whom the supply will be attributed to\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when minter address is zero\\n     */\\n    function mintBehalf(address minter, uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(minter);\\n\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, minter, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for the underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function redeem(uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer The user on behalf of whom to redeem\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for a specified amount of underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     */\\n    function redeemUnderlying(uint256 redeemAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems underlying assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer, on behalf of whom to redeem\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemUnderlyingBehalf(\\n        address redeemer,\\n        uint256 redeemAmount\\n    ) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets from the protocol to their own address\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function borrow(uint256 borrowAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _borrowFresh(msg.sender, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the borrower using `comptroller.updateDelegate`\\n     * @param borrower The borrower, on behalf of whom to borrow\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error DelegateNotApproved is thrown if caller is not approved delegate\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function borrowBehalf(address borrower, uint256 borrowAmount) external override returns (uint256) {\\n        _ensureSenderIsDelegateOf(borrower);\\n        accrueInterest();\\n\\n        _borrowFresh(borrower, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays their own borrow\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrow(uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, msg.sender, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays a borrow belonging to borrower\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, borrower, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Not restricted\\n     */\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external override returns (uint256) {\\n        _liquidateBorrow(msg.sender, borrower, repayAmount, vTokenCollateral, false);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice sets protocol share accumulated from liquidations\\n     * @dev must be equal or less than liquidation incentive - 1\\n     * @param newProtocolSeizeShareMantissa_ new protocol share mantissa\\n     * @custom:event Emits NewProtocolSeizeShare event on success\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error ProtocolSeizeShareTooBig is thrown when the new seize share is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setProtocolSeizeShare(uint256 newProtocolSeizeShareMantissa_) external {\\n        _checkAccessAllowed(\\\"setProtocolSeizeShare(uint256)\\\");\\n        uint256 liquidationIncentive = ComptrollerViewInterface(address(comptroller)).liquidationIncentiveMantissa();\\n        if (newProtocolSeizeShareMantissa_ + MANTISSA_ONE > liquidationIncentive) {\\n            revert ProtocolSeizeShareTooBig();\\n        }\\n\\n        uint256 oldProtocolSeizeShareMantissa = protocolSeizeShareMantissa;\\n        protocolSeizeShareMantissa = newProtocolSeizeShareMantissa_;\\n        emit NewProtocolSeizeShare(oldProtocolSeizeShareMantissa, newProtocolSeizeShareMantissa_);\\n    }\\n\\n    /**\\n     * @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\\n     * @dev Admin function to accrue interest and set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     * @custom:event Emits NewReserveFactor event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error SetReserveFactorBoundsCheck is thrown when the new reserve factor is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external override nonReentrant {\\n        _checkAccessAllowed(\\\"setReserveFactor(uint256)\\\");\\n\\n        accrueInterest();\\n        _setReserveFactorFresh(newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Accrues interest and reduces reserves by transferring to the protocol reserve contract\\n     * @dev Gracefully return if reserves already reduced in accrueInterest\\n     * @param reduceAmount Amount of reduction to reserves\\n     * @custom:event Emits ReservesReduced event; may emit AccrueInterest\\n     * @custom:error ReduceReservesCashNotAvailable is thrown when the vToken does not have sufficient cash\\n     * @custom:error ReduceReservesCashValidation is thrown when trying to withdraw more cash than the reserves have\\n     * @custom:access Not restricted\\n     */\\n    function reduceReserves(uint256 reduceAmount) external override nonReentrant {\\n        accrueInterest();\\n        if (reduceReservesBlockNumber == getBlockNumberOrTimestamp()) return;\\n        _reduceReservesFresh(reduceAmount);\\n    }\\n\\n    /**\\n     * @notice The sender adds to reserves.\\n     * @param addAmount The amount of underlying token to add as reserves\\n     * @custom:event Emits ReservesAdded event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function addReserves(uint256 addAmount) external override nonReentrant {\\n        accrueInterest();\\n        _addReservesFresh(addAmount);\\n    }\\n\\n    /**\\n     * @notice accrues interest and updates the interest rate model using _setInterestRateModelFresh\\n     * @dev Admin function to accrue interest and update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     * @custom:event Emits NewMarketInterestRateModel event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external override {\\n        _checkAccessAllowed(\\\"setInterestRateModel(address)\\\");\\n\\n        accrueInterest();\\n        _setInterestRateModelFresh(newInterestRateModel);\\n    }\\n\\n    /**\\n     * @notice Repays a certain amount of debt, treats the rest of the borrow as bad debt, essentially\\n     *   \\\"forgiving\\\" the borrower. Healing is a situation that should rarely happen. However, some pools\\n     *   may list risky assets or be configured improperly \\u2013 we want to still handle such cases gracefully.\\n     *   We assume that Comptroller does the seizing, so this function is only available to Comptroller.\\n     * @dev This function does not call any Comptroller hooks (like \\\"healAllowed\\\"), because we assume\\n     *   the Comptroller does all the necessary checks before calling this function.\\n     * @param payer account who repays the debt\\n     * @param borrower account to heal\\n     * @param repayAmount amount to repay\\n     * @custom:event Emits RepayBorrow, BadDebtIncreased events; may emit AccrueInterest\\n     * @custom:error HealBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:access Only Comptroller\\n     */\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external override nonReentrant {\\n        if (repayAmount != 0) {\\n            comptroller.preRepayHook(address(this), borrower);\\n        }\\n\\n        if (msg.sender != address(comptroller)) {\\n            revert HealBorrowUnauthorized();\\n        }\\n\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 totalBorrowsNew = totalBorrows;\\n\\n        uint256 actualRepayAmount;\\n        if (repayAmount != 0) {\\n            // _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n            // We violate checks-effects-interactions here to account for tokens that take transfer fees\\n            actualRepayAmount = _doTransferIn(payer, repayAmount);\\n            totalBorrowsNew = totalBorrowsNew - actualRepayAmount;\\n            emit RepayBorrow(\\n                payer,\\n                borrower,\\n                actualRepayAmount,\\n                accountBorrowsPrev - actualRepayAmount,\\n                totalBorrowsNew\\n            );\\n        }\\n\\n        // The transaction will fail if trying to repay too much\\n        uint256 badDebtDelta = accountBorrowsPrev - actualRepayAmount;\\n        if (badDebtDelta != 0) {\\n            uint256 badDebtOld = badDebt;\\n            uint256 badDebtNew = badDebtOld + badDebtDelta;\\n            totalBorrowsNew = totalBorrowsNew - badDebtDelta;\\n            badDebt = badDebtNew;\\n\\n            // We treat healing as \\\"repayment\\\", where vToken is the payer\\n            emit RepayBorrow(address(this), borrower, badDebtDelta, 0, totalBorrowsNew);\\n            emit BadDebtIncreased(borrower, badDebtDelta, badDebtOld, badDebtNew);\\n        }\\n\\n        accountBorrows[borrower].principal = 0;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        emit HealBorrow(payer, borrower, repayAmount);\\n    }\\n\\n    /**\\n     * @notice The extended version of liquidations, callable only by Comptroller. May skip\\n     *  the close factor check. The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error ForceLiquidateBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Only Comptroller\\n     */\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        if (msg.sender != address(comptroller)) {\\n            revert ForceLiquidateBorrowUnauthorized();\\n        }\\n        _liquidateBorrow(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Will fail unless called by another vToken during the process of liquidation.\\n     *  It's absolutely critical to use msg.sender as the borrowed vToken and not a parameter.\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     * @custom:event Emits Transfer, ReservesAdded events\\n     * @custom:error LiquidateSeizeLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:access Not restricted\\n     */\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external override nonReentrant {\\n        _seize(msg.sender, liquidator, borrower, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Updates bad debt\\n     * @dev Called only when bad debt is recovered from auction\\n     * @param recoveredAmount_ The amount of bad debt recovered\\n     * @custom:event Emits BadDebtRecovered event\\n     * @custom:access Only Shortfall contract\\n     */\\n    function badDebtRecovered(uint256 recoveredAmount_) external {\\n        require(msg.sender == shortfall, \\\"only shortfall contract can update bad debt\\\");\\n        require(recoveredAmount_ <= badDebt, \\\"more than bad debt recovered from auction\\\");\\n\\n        uint256 badDebtOld = badDebt;\\n        uint256 badDebtNew = badDebtOld - recoveredAmount_;\\n        badDebt = badDebtNew;\\n\\n        emit BadDebtRecovered(badDebtOld, badDebtNew);\\n    }\\n\\n    /**\\n     * @notice Sets protocol share reserve contract address\\n     * @param protocolShareReserve_ The address of the protocol share reserve contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setProtocolShareReserve(address payable protocolShareReserve_) external onlyOwner {\\n        _setProtocolShareReserve(protocolShareReserve_);\\n    }\\n\\n    /**\\n     * @notice Sets shortfall contract address\\n     * @param shortfall_ The address of the shortfall contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setShortfallContract(address shortfall_) external onlyOwner {\\n        _setShortfallContract(shortfall_);\\n    }\\n\\n    /**\\n     * @notice A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)\\n     * @param token The address of the ERC-20 token to sweep\\n     * @custom:access Only Governance\\n     */\\n    function sweepToken(IERC20Upgradeable token) external override {\\n        require(msg.sender == owner(), \\\"VToken::sweepToken: only admin can sweep tokens\\\");\\n        require(address(token) != underlying, \\\"VToken::sweepToken: can not sweep underlying token\\\");\\n        uint256 balance = token.balanceOf(address(this));\\n        token.safeTransfer(owner(), balance);\\n\\n        emit SweepToken(address(token));\\n    }\\n\\n    /**\\n     * @notice A public function to set new threshold of slot(block or second) difference after which funds will be sent to the protocol share reserve\\n     * @param _newReduceReservesBlockOrTimestampDelta slot(block or second) difference value\\n     * @custom:access Only Governance\\n     */\\n    function setReduceReservesBlockDelta(uint256 _newReduceReservesBlockOrTimestampDelta) external {\\n        _checkAccessAllowed(\\\"setReduceReservesBlockDelta(uint256)\\\");\\n        require(_newReduceReservesBlockOrTimestampDelta > 0, \\\"Invalid Input\\\");\\n        emit NewReduceReservesBlockDelta(reduceReservesBlockDelta, _newReduceReservesBlockOrTimestampDelta);\\n        reduceReservesBlockDelta = _newReduceReservesBlockOrTimestampDelta;\\n    }\\n\\n    /**\\n     * @notice Get the current allowance from `owner` for `spender`\\n     * @param owner The address of the account which owns the tokens to be spent\\n     * @param spender The address of the account which may transfer tokens\\n     * @return amount The number of tokens allowed to be spent (type(uint256).max means infinite)\\n     */\\n    function allowance(address owner, address spender) external view override returns (uint256) {\\n        return transferAllowances[owner][spender];\\n    }\\n\\n    /**\\n     * @notice Get the token balance of the `owner`\\n     * @param owner The address of the account to query\\n     * @return amount The number of tokens owned by `owner`\\n     */\\n    function balanceOf(address owner) external view override returns (uint256) {\\n        return accountTokens[owner];\\n    }\\n\\n    /**\\n     * @notice Get a snapshot of the account's balances, and the cached exchange rate\\n     * @dev This is used by comptroller to more efficiently perform liquidity checks.\\n     * @param account Address of the account to snapshot\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return vTokenBalance User's balance of vTokens\\n     * @return borrowBalance Amount owed in terms of underlying\\n     * @return exchangeRate Stored exchange rate\\n     */\\n    function getAccountSnapshot(\\n        address account\\n    )\\n        external\\n        view\\n        override\\n        returns (uint256 error, uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRate)\\n    {\\n        return (NO_ERROR, accountTokens[account], _borrowBalanceStored(account), _exchangeRateStored());\\n    }\\n\\n    /**\\n     * @notice Get cash balance of this vToken in the underlying asset\\n     * @return cash The quantity of underlying asset owned by this contract\\n     */\\n    function getCash() external view override returns (uint256) {\\n        return _getCashPrior();\\n    }\\n\\n    /**\\n     * @notice Returns the current per slot(block or second) borrow interest rate for this vToken\\n     * @return rate The borrow interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function borrowRatePerBlock() external view override returns (uint256) {\\n        return interestRateModel.getBorrowRate(_getCashPrior(), totalBorrows, totalReserves, badDebt);\\n    }\\n\\n    /**\\n     * @notice Returns the current per-slot(block or second) supply interest rate for this v\\n     * @return rate The supply interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function supplyRatePerBlock() external view override returns (uint256) {\\n        return\\n            interestRateModel.getSupplyRate(\\n                _getCashPrior(),\\n                totalBorrows,\\n                totalReserves,\\n                reserveFactorMantissa,\\n                badDebt\\n            );\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceStored(address account) external view override returns (uint256) {\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateStored() external view override returns (uint256) {\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Accrue interest then return the up-to-date exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateCurrent() public override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Applies accrued interest to total borrows and reserves\\n     * @dev This calculates interest accrued from the last checkpointed slot(block or second)\\n     *  up to the current slot(block or second) and writes new checkpoint to storage and\\n     *  reduce spread reserves to protocol share reserve\\n     *  if currentSlot - reduceReservesBlockNumber >= slotDelta\\n     * @return Always NO_ERROR\\n     * @custom:event Emits AccrueInterest event on success\\n     * @custom:access Not restricted\\n     */\\n    function accrueInterest() public virtual override returns (uint256) {\\n        /* Remember the initial block number or timestamp */\\n        uint256 currentSlotNumber = getBlockNumberOrTimestamp();\\n        uint256 accrualSlotNumberPrior = accrualBlockNumber;\\n\\n        /* Short-circuit accumulating 0 interest */\\n        if (accrualSlotNumberPrior == currentSlotNumber) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Read the previous values out of storage */\\n        uint256 cashPrior = _getCashPrior();\\n        uint256 borrowsPrior = totalBorrows;\\n        uint256 reservesPrior = totalReserves;\\n        uint256 borrowIndexPrior = borrowIndex;\\n\\n        /* Calculate the current borrow interest rate */\\n        uint256 borrowRateMantissa = interestRateModel.getBorrowRate(cashPrior, borrowsPrior, reservesPrior, badDebt);\\n        require(borrowRateMantissa <= MAX_BORROW_RATE_MANTISSA, \\\"borrow rate is absurdly high\\\");\\n\\n        /* Calculate the number of slots elapsed since the last accrual */\\n        uint256 slotDelta = currentSlotNumber - accrualSlotNumberPrior;\\n\\n        /*\\n         * Calculate the interest accumulated into borrows and reserves and the new index:\\n         *  simpleInterestFactor = borrowRate * slotDelta\\n         *  interestAccumulated = simpleInterestFactor * totalBorrows\\n         *  totalBorrowsNew = interestAccumulated + totalBorrows\\n         *  totalReservesNew = interestAccumulated * reserveFactor + totalReserves\\n         *  borrowIndexNew = simpleInterestFactor * borrowIndex + borrowIndex\\n         */\\n\\n        Exp memory simpleInterestFactor = mul_(Exp({ mantissa: borrowRateMantissa }), slotDelta);\\n        uint256 interestAccumulated = mul_ScalarTruncate(simpleInterestFactor, borrowsPrior);\\n        uint256 totalBorrowsNew = interestAccumulated + borrowsPrior;\\n        uint256 totalReservesNew = mul_ScalarTruncateAddUInt(\\n            Exp({ mantissa: reserveFactorMantissa }),\\n            interestAccumulated,\\n            reservesPrior\\n        );\\n        uint256 borrowIndexNew = mul_ScalarTruncateAddUInt(simpleInterestFactor, borrowIndexPrior, borrowIndexPrior);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the previously calculated values into storage */\\n        accrualBlockNumber = currentSlotNumber;\\n        borrowIndex = borrowIndexNew;\\n        totalBorrows = totalBorrowsNew;\\n        totalReserves = totalReservesNew;\\n\\n        if (currentSlotNumber - reduceReservesBlockNumber >= reduceReservesBlockDelta) {\\n            reduceReservesBlockNumber = currentSlotNumber;\\n            if (cashPrior < totalReservesNew) {\\n                _reduceReservesFresh(cashPrior);\\n            } else {\\n                _reduceReservesFresh(totalReservesNew);\\n            }\\n        }\\n\\n        /* We emit an AccrueInterest event */\\n        emit AccrueInterest(cashPrior, interestAccumulated, borrowIndexNew, totalBorrowsNew);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice User supplies assets into the market and receives vTokens in exchange\\n     * @dev Assumes interest has already been accrued up to the current block or timestamp\\n     * @param payer The address of the account which is sending the assets for supply\\n     * @param minter The address of the account which is supplying the assets\\n     * @param mintAmount The amount of the underlying asset to supply\\n     */\\n    function _mintFresh(address payer, address minter, uint256 mintAmount) internal {\\n        /* Fail if mint not allowed */\\n        comptroller.preMintHook(address(this), minter, mintAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert MintFreshnessCheck();\\n        }\\n\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         *  We call `_doTransferIn` for the minter and the mintAmount.\\n         *  `_doTransferIn` reverts if anything goes wrong, since we can't be sure if\\n         *  side-effects occurred. The function returns the amount actually transferred,\\n         *  in case of a fee. On success, the vToken holds an additional `actualMintAmount`\\n         *  of cash.\\n         */\\n        uint256 actualMintAmount = _doTransferIn(payer, mintAmount);\\n\\n        /*\\n         * We get the current exchange rate and calculate the number of vTokens to be minted:\\n         *  mintTokens = actualMintAmount / exchangeRate\\n         */\\n\\n        uint256 mintTokens = div_(actualMintAmount, exchangeRate);\\n\\n        /*\\n         * We calculate the new total supply of vTokens and minter token balance, checking for overflow:\\n         *  totalSupplyNew = totalSupply + mintTokens\\n         *  accountTokensNew = accountTokens[minter] + mintTokens\\n         * And write them into storage\\n         */\\n        totalSupply = totalSupply + mintTokens;\\n        uint256 balanceAfter = accountTokens[minter] + mintTokens;\\n        accountTokens[minter] = balanceAfter;\\n\\n        /* We emit a Mint event, and a Transfer event */\\n        emit Mint(minter, actualMintAmount, mintTokens, balanceAfter);\\n        emit Transfer(address(0), minter, mintTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.mintVerify(address(this), minter, actualMintAmount, mintTokens);\\n    }\\n\\n    /**\\n     * @notice Redeemer redeems vTokens in exchange for the underlying assets, transferred to the receiver. Redeemer and receiver can be the same\\n     *   address, or different addresses if the receiver was previously approved by the redeemer as a valid delegate (see Comptroller.updateDelegate)\\n     * @dev Assumes interest has already been accrued up to the current slot(block or second)\\n     * @param redeemer The address of the account which is redeeming the tokens\\n     * @param receiver The receiver of the underlying tokens\\n     * @param redeemTokensIn The number of vTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     * @param redeemAmountIn The number of underlying tokens to receive from redeeming vTokens (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     */\\n    function _redeemFresh(address redeemer, address receiver, uint256 redeemTokensIn, uint256 redeemAmountIn) internal {\\n        require(redeemTokensIn == 0 || redeemAmountIn == 0, \\\"one of redeemTokensIn or redeemAmountIn must be zero\\\");\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RedeemFreshnessCheck();\\n        }\\n\\n        /* exchangeRate = invoke Exchange Rate Stored() */\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        uint256 redeemTokens;\\n        uint256 redeemAmount;\\n\\n        /* If redeemTokensIn > 0: */\\n        if (redeemTokensIn > 0) {\\n            /*\\n             * We calculate the exchange rate and the amount of underlying to be redeemed:\\n             *  redeemTokens = redeemTokensIn\\n             */\\n            redeemTokens = redeemTokensIn;\\n        } else {\\n            /*\\n             * We get the current exchange rate and calculate the amount to be redeemed:\\n             *  redeemTokens = redeemAmountIn / exchangeRate\\n             */\\n            redeemTokens = div_(redeemAmountIn, exchangeRate);\\n\\n            uint256 _redeemAmount = mul_(redeemTokens, exchangeRate);\\n            if (_redeemAmount != 0 && _redeemAmount != redeemAmountIn) redeemTokens++; // round up\\n        }\\n\\n        // redeemAmount = exchangeRate * redeemTokens\\n        redeemAmount = mul_ScalarTruncate(exchangeRate, redeemTokens);\\n\\n        // Revert if amount is zero\\n        if (redeemAmount == 0) {\\n            revert(\\\"redeemAmount is zero\\\");\\n        }\\n\\n        /* Fail if redeem not allowed */\\n        comptroller.preRedeemHook(address(this), redeemer, redeemTokens);\\n\\n        /* Fail gracefully if protocol has insufficient cash */\\n        if (_getCashPrior() - totalReserves < redeemAmount) {\\n            revert RedeemTransferOutNotPossible();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing reduced supply before external transfer.\\n         */\\n        totalSupply = totalSupply - redeemTokens;\\n        uint256 balanceAfter = accountTokens[redeemer] - redeemTokens;\\n        accountTokens[redeemer] = balanceAfter;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the redeemAmount.\\n         *  On success, the vToken has redeemAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, redeemAmount);\\n\\n        /* We emit a Transfer event, and a Redeem event */\\n        emit Transfer(redeemer, address(this), redeemTokens);\\n        emit Redeem(redeemer, redeemAmount, redeemTokens, balanceAfter);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.redeemVerify(address(this), redeemer, redeemAmount, redeemTokens);\\n    }\\n\\n    /**\\n     * @notice Users or their delegates borrow assets from the protocol\\n     * @param borrower User who borrows the assets\\n     * @param receiver The receiver of the tokens, if called by a delegate\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     */\\n    function _borrowFresh(address borrower, address receiver, uint256 borrowAmount) internal {\\n        /* Fail if borrow not allowed */\\n        comptroller.preBorrowHook(address(this), borrower, borrowAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert BorrowFreshnessCheck();\\n        }\\n\\n        /* Fail gracefully if protocol has insufficient underlying cash */\\n        if (_getCashPrior() - totalReserves < borrowAmount) {\\n            revert BorrowCashNotAvailable();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on overflow:\\n         *  accountBorrowNew = accountBorrow + borrowAmount\\n         *  totalBorrowsNew = totalBorrows + borrowAmount\\n         */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 accountBorrowsNew = accountBorrowsPrev + borrowAmount;\\n        uint256 totalBorrowsNew = totalBorrows + borrowAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing increased borrow before external transfer.\\n        `*/\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the borrowAmount.\\n         *  On success, the vToken borrowAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, borrowAmount);\\n\\n        /* We emit a Borrow event */\\n        emit Borrow(borrower, borrowAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.borrowVerify(address(this), borrower, borrowAmount);\\n    }\\n\\n    /**\\n     * @notice Borrows are repaid by another user (possibly the borrower).\\n     * @param payer the account paying off the borrow\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount the amount of underlying tokens being returned, or type(uint256).max for the full outstanding amount\\n     * @return (uint) the actual repayment amount.\\n     */\\n    function _repayBorrowFresh(address payer, address borrower, uint256 repayAmount) internal returns (uint256) {\\n        /* Fail if repayBorrow not allowed */\\n        comptroller.preRepayHook(address(this), borrower);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RepayBorrowFreshnessCheck();\\n        }\\n\\n        /* We fetch the amount the borrower owes, with accumulated interest */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n\\n        uint256 repayAmountFinal = repayAmount >= accountBorrowsPrev ? accountBorrowsPrev : repayAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We call _doTransferIn for the payer and the repayAmount\\n         *  On success, the vToken holds an additional repayAmount of cash.\\n         *  _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         *   it returns the amount actually transferred, in case of a fee.\\n         */\\n        uint256 actualRepayAmount = _doTransferIn(payer, repayAmountFinal);\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on underflow:\\n         *  accountBorrowsNew = accountBorrows - actualRepayAmount\\n         *  totalBorrowsNew = totalBorrows - actualRepayAmount\\n         */\\n        uint256 accountBorrowsNew = accountBorrowsPrev - actualRepayAmount;\\n        uint256 totalBorrowsNew = totalBorrows - actualRepayAmount;\\n\\n        /* We write the previously calculated values into storage */\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /* We emit a RepayBorrow event */\\n        emit RepayBorrow(payer, borrower, actualRepayAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.repayBorrowVerify(address(this), payer, borrower, actualRepayAmount, borrowIndex);\\n\\n        return actualRepayAmount;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal nonReentrant {\\n        accrueInterest();\\n\\n        uint256 error = vTokenCollateral.accrueInterest();\\n        if (error != NO_ERROR) {\\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted liquidation failed\\n            revert LiquidateAccrueCollateralInterestFailed(error);\\n        }\\n\\n        _liquidateBorrowFresh(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice The liquidator liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrowFresh(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal {\\n        /* Fail if liquidate not allowed */\\n        comptroller.preLiquidateHook(\\n            address(this),\\n            address(vTokenCollateral),\\n            borrower,\\n            repayAmount,\\n            skipLiquidityCheck\\n        );\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert LiquidateFreshnessCheck();\\n        }\\n\\n        /* Verify vTokenCollateral market's slot(block or second) number equals current slot(block or second) number */\\n        if (vTokenCollateral.accrualBlockNumber() != getBlockNumberOrTimestamp()) {\\n            revert LiquidateCollateralFreshnessCheck();\\n        }\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateLiquidatorIsBorrower();\\n        }\\n\\n        /* Fail if repayAmount = 0 */\\n        if (repayAmount == 0) {\\n            revert LiquidateCloseAmountIsZero();\\n        }\\n\\n        /* Fail if repayAmount = type(uint256).max */\\n        if (repayAmount == type(uint256).max) {\\n            revert LiquidateCloseAmountIsUintMax();\\n        }\\n\\n        /* Fail if repayBorrow fails */\\n        uint256 actualRepayAmount = _repayBorrowFresh(liquidator, borrower, repayAmount);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We calculate the number of collateral tokens that will be seized */\\n        (uint256 amountSeizeError, uint256 seizeTokens) = comptroller.liquidateCalculateSeizeTokens(\\n            address(this),\\n            address(vTokenCollateral),\\n            actualRepayAmount\\n        );\\n        require(amountSeizeError == NO_ERROR, \\\"LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED\\\");\\n\\n        /* Revert if borrower collateral token balance < seizeTokens */\\n        require(vTokenCollateral.balanceOf(borrower) >= seizeTokens, \\\"LIQUIDATE_SEIZE_TOO_MUCH\\\");\\n\\n        // If this is also the collateral, call _seize internally to avoid re-entrancy, otherwise make an external call\\n        if (address(vTokenCollateral) == address(this)) {\\n            _seize(address(this), liquidator, borrower, seizeTokens);\\n        } else {\\n            vTokenCollateral.seize(liquidator, borrower, seizeTokens);\\n        }\\n\\n        /* We emit a LiquidateBorrow event */\\n        emit LiquidateBorrow(liquidator, borrower, actualRepayAmount, address(vTokenCollateral), seizeTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.liquidateBorrowVerify(\\n            address(this),\\n            address(vTokenCollateral),\\n            liquidator,\\n            borrower,\\n            actualRepayAmount,\\n            seizeTokens\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Called only during an in-kind liquidation, or by liquidateBorrow during the liquidation of another VToken.\\n     *  It's absolutely critical to use msg.sender as the seizer vToken and not a parameter.\\n     * @param seizerContract The contract seizing the collateral (either borrowed vToken or Comptroller)\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     */\\n    function _seize(address seizerContract, address liquidator, address borrower, uint256 seizeTokens) internal {\\n        /* Fail if seize not allowed */\\n        comptroller.preSeizeHook(address(this), seizerContract, liquidator, borrower);\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateSeizeLiquidatorIsBorrower();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and liquidator token balances, failing on underflow/overflow:\\n         *  borrowerTokensNew = accountTokens[borrower] - seizeTokens\\n         *  liquidatorTokensNew = accountTokens[liquidator] + seizeTokens\\n         */\\n        uint256 liquidationIncentiveMantissa = ComptrollerViewInterface(address(comptroller))\\n            .liquidationIncentiveMantissa();\\n        uint256 numerator = mul_(seizeTokens, Exp({ mantissa: protocolSeizeShareMantissa }));\\n        uint256 protocolSeizeTokens = div_(numerator, Exp({ mantissa: liquidationIncentiveMantissa }));\\n        uint256 liquidatorSeizeTokens = seizeTokens - protocolSeizeTokens;\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n        uint256 protocolSeizeAmount = mul_ScalarTruncate(exchangeRate, protocolSeizeTokens);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the calculated values into storage */\\n        totalSupply = totalSupply - protocolSeizeTokens;\\n        accountTokens[borrower] = accountTokens[borrower] - seizeTokens;\\n        accountTokens[liquidator] = accountTokens[liquidator] + liquidatorSeizeTokens;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, protocolSeizeAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.LIQUIDATION\\n        );\\n\\n        /* Emit a Transfer event */\\n        emit Transfer(borrower, liquidator, liquidatorSeizeTokens);\\n        emit ProtocolSeize(borrower, protocolShareReserve, protocolSeizeAmount);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.seizeVerify(address(this), seizerContract, liquidator, borrower, seizeTokens);\\n    }\\n\\n    function _setComptroller(ComptrollerInterface newComptroller) internal {\\n        ComptrollerInterface oldComptroller = comptroller;\\n        // Ensure invoke comptroller.isComptroller() returns true\\n        require(newComptroller.isComptroller(), \\\"marker method returned false\\\");\\n\\n        // Set market's comptroller to newComptroller\\n        comptroller = newComptroller;\\n\\n        // Emit NewComptroller(oldComptroller, newComptroller)\\n        emit NewComptroller(oldComptroller, newComptroller);\\n    }\\n\\n    /**\\n     * @notice Sets a new reserve factor for the protocol (*requires fresh interest accrual)\\n     * @dev Admin function to set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     */\\n    function _setReserveFactorFresh(uint256 newReserveFactorMantissa) internal {\\n        // Verify market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetReserveFactorFreshCheck();\\n        }\\n\\n        // Check newReserveFactor \\u2264 maxReserveFactor\\n        if (newReserveFactorMantissa > MAX_RESERVE_FACTOR_MANTISSA) {\\n            revert SetReserveFactorBoundsCheck();\\n        }\\n\\n        uint256 oldReserveFactorMantissa = reserveFactorMantissa;\\n        reserveFactorMantissa = newReserveFactorMantissa;\\n\\n        emit NewReserveFactor(oldReserveFactorMantissa, newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Add reserves by transferring from caller\\n     * @dev Requires fresh interest accrual\\n     * @param addAmount Amount of addition to reserves\\n     * @return actualAddAmount The actual amount added, excluding the potential token fees\\n     */\\n    function _addReservesFresh(uint256 addAmount) internal returns (uint256) {\\n        // totalReserves + actualAddAmount\\n        uint256 totalReservesNew;\\n        uint256 actualAddAmount;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert AddReservesFactorFreshCheck(actualAddAmount);\\n        }\\n\\n        actualAddAmount = _doTransferIn(msg.sender, addAmount);\\n        totalReservesNew = totalReserves + actualAddAmount;\\n        totalReserves = totalReservesNew;\\n        emit ReservesAdded(msg.sender, actualAddAmount, totalReservesNew);\\n\\n        return actualAddAmount;\\n    }\\n\\n    /**\\n     * @notice Reduces reserves by transferring to the protocol reserve contract\\n     * @dev Requires fresh interest accrual\\n     * @param reduceAmount Amount of reduction to reserves\\n     */\\n    function _reduceReservesFresh(uint256 reduceAmount) internal {\\n        if (reduceAmount == 0) {\\n            return;\\n        }\\n        // totalReserves - reduceAmount\\n        uint256 totalReservesNew;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert ReduceReservesFreshCheck();\\n        }\\n\\n        // Fail gracefully if protocol has insufficient underlying cash\\n        if (_getCashPrior() < reduceAmount) {\\n            revert ReduceReservesCashNotAvailable();\\n        }\\n\\n        // Check reduceAmount \\u2264 reserves[n] (totalReserves)\\n        if (reduceAmount > totalReserves) {\\n            revert ReduceReservesCashValidation();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        totalReservesNew = totalReserves - reduceAmount;\\n\\n        // Store reserves[n+1] = reserves[n] - reduceAmount\\n        totalReserves = totalReservesNew;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, reduceAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.SPREAD\\n        );\\n\\n        emit SpreadReservesReduced(protocolShareReserve, reduceAmount, totalReservesNew);\\n    }\\n\\n    /**\\n     * @notice updates the interest rate model (*requires fresh interest accrual)\\n     * @dev Admin function to update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     */\\n    function _setInterestRateModelFresh(InterestRateModel newInterestRateModel) internal {\\n        // Used to store old model for use in the event that is emitted on success\\n        InterestRateModel oldInterestRateModel;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetInterestRateModelFreshCheck();\\n        }\\n\\n        // Track the market's current interest rate model\\n        oldInterestRateModel = interestRateModel;\\n\\n        // Ensure invoke newInterestRateModel.isInterestRateModel() returns true\\n        require(newInterestRateModel.isInterestRateModel(), \\\"marker method returned false\\\");\\n\\n        // Set the interest rate model to newInterestRateModel\\n        interestRateModel = newInterestRateModel;\\n\\n        // Emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel)\\n        emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel);\\n    }\\n\\n    /**\\n     * Safe Token **\\n     */\\n\\n    /**\\n     * @dev Similar to ERC-20 transfer, but handles tokens that have transfer fees.\\n     *      This function returns the actual amount received,\\n     *      which may be less than `amount` if there is a fee attached to the transfer.\\n     * @param from Sender of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     * @return Actual amount received\\n     */\\n    function _doTransferIn(address from, uint256 amount) internal virtual returns (uint256) {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        uint256 balanceBefore = token.balanceOf(address(this));\\n        token.safeTransferFrom(from, address(this), amount);\\n        uint256 balanceAfter = token.balanceOf(address(this));\\n        // Return the amount that was *actually* transferred\\n        return balanceAfter - balanceBefore;\\n    }\\n\\n    /**\\n     * @dev Just a regular ERC-20 transfer, reverts on failure\\n     * @param to Receiver of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     */\\n    function _doTransferOut(address to, uint256 amount) internal virtual {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        token.safeTransfer(to, amount);\\n    }\\n\\n    /**\\n     * @notice Transfer `tokens` tokens from `src` to `dst` by `spender`\\n     * @dev Called by both `transfer` and `transferFrom` internally\\n     * @param spender The address of the account performing the transfer\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param tokens The number of tokens to transfer\\n     */\\n    function _transferTokens(address spender, address src, address dst, uint256 tokens) internal {\\n        /* Fail if transfer not allowed */\\n        comptroller.preTransferHook(address(this), src, dst, tokens);\\n\\n        /* Do not allow self-transfers */\\n        if (src == dst) {\\n            revert TransferNotAllowed();\\n        }\\n\\n        /* Get the allowance, infinite for the account owner */\\n        uint256 startingAllowance;\\n        if (spender == src) {\\n            startingAllowance = type(uint256).max;\\n        } else {\\n            startingAllowance = transferAllowances[src][spender];\\n        }\\n\\n        /* Do the calculations, checking for {under,over}flow */\\n        uint256 allowanceNew = startingAllowance - tokens;\\n        uint256 srcTokensNew = accountTokens[src] - tokens;\\n        uint256 dstTokensNew = accountTokens[dst] + tokens;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n\\n        accountTokens[src] = srcTokensNew;\\n        accountTokens[dst] = dstTokensNew;\\n\\n        /* Eat some of the allowance (if necessary) */\\n        if (startingAllowance != type(uint256).max) {\\n            transferAllowances[src][spender] = allowanceNew;\\n        }\\n\\n        /* We emit a Transfer event */\\n        emit Transfer(src, dst, tokens);\\n\\n        comptroller.transferVerify(address(this), src, dst, tokens);\\n    }\\n\\n    /**\\n     * @notice Initialize the money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     */\\n    function _initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n        require(accrualBlockNumber == 0 && borrowIndex == 0, \\\"market may only be initialized once\\\");\\n\\n        // Set initial exchange rate\\n        initialExchangeRateMantissa = initialExchangeRateMantissa_;\\n        require(initialExchangeRateMantissa > 0, \\\"initial exchange rate must be greater than zero.\\\");\\n\\n        _setComptroller(comptroller_);\\n\\n        // Initialize slot(block or second) number and borrow index (slot(block or second) number mocks depend on comptroller being set)\\n        accrualBlockNumber = getBlockNumberOrTimestamp();\\n        borrowIndex = MANTISSA_ONE;\\n\\n        // Set the interest rate model (depends on slot(block or second) number / borrow index)\\n        _setInterestRateModelFresh(interestRateModel_);\\n\\n        _setReserveFactorFresh(reserveFactorMantissa_);\\n\\n        name = name_;\\n        symbol = symbol_;\\n        decimals = decimals_;\\n        _setShortfallContract(riskManagement.shortfall);\\n        _setProtocolShareReserve(riskManagement.protocolShareReserve);\\n        protocolSeizeShareMantissa = DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA;\\n\\n        // Set underlying and sanity check it\\n        underlying = underlying_;\\n        IERC20Upgradeable(underlying).totalSupply();\\n\\n        // The counter starts true to prevent changing it from zero to non-zero (i.e. smaller cost/refund)\\n        _notEntered = true;\\n        _transferOwnership(admin_);\\n    }\\n\\n    function _setShortfallContract(address shortfall_) internal {\\n        ensureNonzeroAddress(shortfall_);\\n        address oldShortfall = shortfall;\\n        shortfall = shortfall_;\\n        emit NewShortfallContract(oldShortfall, shortfall_);\\n    }\\n\\n    function _setProtocolShareReserve(address payable protocolShareReserve_) internal {\\n        ensureNonzeroAddress(protocolShareReserve_);\\n        address oldProtocolShareReserve = address(protocolShareReserve);\\n        protocolShareReserve = protocolShareReserve_;\\n        emit NewProtocolShareReserve(oldProtocolShareReserve, address(protocolShareReserve_));\\n    }\\n\\n    function _ensureSenderIsDelegateOf(address user) internal view {\\n        if (!ComptrollerViewInterface(address(comptroller)).approvedDelegates(user, msg.sender)) {\\n            revert DelegateNotApproved();\\n        }\\n    }\\n\\n    /**\\n     * @notice Gets balance of this contract in terms of the underlying\\n     * @dev This excludes the value of the current message, if any\\n     * @return The quantity of underlying tokens owned by this contract\\n     */\\n    function _getCashPrior() internal view virtual returns (uint256) {\\n        return IERC20Upgradeable(underlying).balanceOf(address(this));\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance the calculated balance\\n     */\\n    function _borrowBalanceStored(address account) internal view returns (uint256) {\\n        /* Get borrowBalance and borrowIndex */\\n        BorrowSnapshot memory borrowSnapshot = accountBorrows[account];\\n\\n        /* If borrowBalance = 0 then borrowIndex is likely also 0.\\n         * Rather than failing the calculation with a division by 0, we immediately return 0 in this case.\\n         */\\n        if (borrowSnapshot.principal == 0) {\\n            return 0;\\n        }\\n\\n        /* Calculate new borrow balance using the interest index:\\n         *  recentBorrowBalance = borrower.borrowBalance * market.borrowIndex / borrower.borrowIndex\\n         */\\n        uint256 principalTimesIndex = borrowSnapshot.principal * borrowIndex;\\n\\n        return principalTimesIndex / borrowSnapshot.interestIndex;\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function _exchangeRateStored() internal view virtual returns (uint256) {\\n        uint256 _totalSupply = totalSupply;\\n        if (_totalSupply == 0) {\\n            /*\\n             * If there are no tokens minted:\\n             *  exchangeRate = initialExchangeRate\\n             */\\n            return initialExchangeRateMantissa;\\n        }\\n        /*\\n         * Otherwise:\\n         *  exchangeRate = (totalCash + totalBorrows + badDebt - totalReserves) / totalSupply\\n         */\\n        uint256 totalCash = _getCashPrior();\\n        uint256 cashPlusBorrowsMinusReserves = totalCash + totalBorrows + badDebt - totalReserves;\\n        uint256 exchangeRate = (cashPlusBorrowsMinusReserves * EXP_SCALE) / _totalSupply;\\n\\n        return exchangeRate;\\n    }\\n}\\n\",\"keccak256\":\"0xa220ca317fe69b920b86e43f054c43b5f891f12160fd312c9a21668f969ee056\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { ComptrollerInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\n\\n/**\\n * @title VTokenStorage\\n * @author Venus\\n * @notice Storage layout used by the `VToken` contract\\n */\\n// solhint-disable-next-line max-states-count\\ncontract VTokenStorage {\\n    /**\\n     * @notice Container for borrow balance information\\n     * @member principal Total balance (with accrued interest), after applying the most recent balance-changing action\\n     * @member interestIndex Global borrowIndex as of the most recent balance-changing action\\n     */\\n    struct BorrowSnapshot {\\n        uint256 principal;\\n        uint256 interestIndex;\\n    }\\n\\n    /**\\n     * @dev Guard variable for re-entrancy checks\\n     */\\n    bool internal _notEntered;\\n\\n    /**\\n     * @notice Underlying asset for this VToken\\n     */\\n    address public underlying;\\n\\n    /**\\n     * @notice EIP-20 token name for this token\\n     */\\n    string public name;\\n\\n    /**\\n     * @notice EIP-20 token symbol for this token\\n     */\\n    string public symbol;\\n\\n    /**\\n     * @notice EIP-20 token decimals for this token\\n     */\\n    uint8 public decimals;\\n\\n    /**\\n     * @notice Protocol share Reserve contract address\\n     */\\n    address payable public protocolShareReserve;\\n\\n    /**\\n     * @notice Contract which oversees inter-vToken operations\\n     */\\n    ComptrollerInterface public comptroller;\\n\\n    /**\\n     * @notice Model which tells what the current interest rate should be\\n     */\\n    InterestRateModel public interestRateModel;\\n\\n    // Initial exchange rate used when minting the first VTokens (used when totalSupply = 0)\\n    uint256 internal initialExchangeRateMantissa;\\n\\n    /**\\n     * @notice Fraction of interest currently set aside for reserves\\n     */\\n    uint256 public reserveFactorMantissa;\\n\\n    /**\\n     * @notice Slot(block or second) number that interest was last accrued at\\n     */\\n    uint256 public accrualBlockNumber;\\n\\n    /**\\n     * @notice Accumulator of the total earned interest rate since the opening of the market\\n     */\\n    uint256 public borrowIndex;\\n\\n    /**\\n     * @notice Total amount of outstanding borrows of the underlying in this market\\n     */\\n    uint256 public totalBorrows;\\n\\n    /**\\n     * @notice Total amount of reserves of the underlying held in this market\\n     */\\n    uint256 public totalReserves;\\n\\n    /**\\n     * @notice Total number of tokens in circulation\\n     */\\n    uint256 public totalSupply;\\n\\n    /**\\n     * @notice Total bad debt of the market\\n     */\\n    uint256 public badDebt;\\n\\n    // Official record of token balances for each account\\n    mapping(address => uint256) internal accountTokens;\\n\\n    // Approved token transfer amounts on behalf of others\\n    mapping(address => mapping(address => uint256)) internal transferAllowances;\\n\\n    // Mapping of account addresses to outstanding borrow balances\\n    mapping(address => BorrowSnapshot) internal accountBorrows;\\n\\n    /**\\n     * @notice Share of seized collateral that is added to reserves\\n     */\\n    uint256 public protocolSeizeShareMantissa;\\n\\n    /**\\n     * @notice Storage of Shortfall contract address\\n     */\\n    address public shortfall;\\n\\n    /**\\n     * @notice delta slot (block or second) after which reserves will be reduced\\n     */\\n    uint256 public reduceReservesBlockDelta;\\n\\n    /**\\n     * @notice last slot (block or second) number at which reserves were reduced\\n     */\\n    uint256 public reduceReservesBlockNumber;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n}\\n\\n/**\\n * @title VTokenInterface\\n * @author Venus\\n * @notice Interface implemented by the `VToken` contract\\n */\\nabstract contract VTokenInterface is VTokenStorage {\\n    struct RiskManagementInit {\\n        address shortfall;\\n        address payable protocolShareReserve;\\n    }\\n\\n    /*** Market Events ***/\\n\\n    /**\\n     * @notice Event emitted when interest is accrued\\n     */\\n    event AccrueInterest(uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when tokens are minted\\n     */\\n    event Mint(address indexed minter, uint256 mintAmount, uint256 mintTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when tokens are redeemed\\n     */\\n    event Redeem(address indexed redeemer, uint256 redeemAmount, uint256 redeemTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when underlying is borrowed\\n     */\\n    event Borrow(address indexed borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when a borrow is repaid\\n     */\\n    event RepayBorrow(\\n        address indexed payer,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        uint256 accountBorrows,\\n        uint256 totalBorrows\\n    );\\n\\n    /**\\n     * @notice Event emitted when bad debt is accumulated on a market\\n     * @param borrower borrower to \\\"forgive\\\"\\n     * @param badDebtDelta amount of new bad debt recorded\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtIncreased(address indexed borrower, uint256 badDebtDelta, uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when bad debt is recovered via an auction\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtRecovered(uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when a borrow is liquidated\\n     */\\n    event LiquidateBorrow(\\n        address indexed liquidator,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        address indexed vTokenCollateral,\\n        uint256 seizeTokens\\n    );\\n\\n    /*** Admin Events ***/\\n\\n    /**\\n     * @notice Event emitted when comptroller is changed\\n     */\\n    event NewComptroller(ComptrollerInterface indexed oldComptroller, ComptrollerInterface indexed newComptroller);\\n\\n    /**\\n     * @notice Event emitted when shortfall contract address is changed\\n     */\\n    event NewShortfallContract(address indexed oldShortfall, address indexed newShortfall);\\n\\n    /**\\n     * @notice Event emitted when protocol share reserve contract address is changed\\n     */\\n    event NewProtocolShareReserve(address indexed oldProtocolShareReserve, address indexed newProtocolShareReserve);\\n\\n    /**\\n     * @notice Event emitted when interestRateModel is changed\\n     */\\n    event NewMarketInterestRateModel(\\n        InterestRateModel indexed oldInterestRateModel,\\n        InterestRateModel indexed newInterestRateModel\\n    );\\n\\n    /**\\n     * @notice Event emitted when protocol seize share is changed\\n     */\\n    event NewProtocolSeizeShare(uint256 oldProtocolSeizeShareMantissa, uint256 newProtocolSeizeShareMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserve factor is changed\\n     */\\n    event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserves are added\\n     */\\n    event ReservesAdded(address indexed benefactor, uint256 addAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice Event emitted when the spread reserves are reduced\\n     */\\n    event SpreadReservesReduced(address indexed protocolShareReserve, uint256 reduceAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice EIP20 Transfer event\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 amount);\\n\\n    /**\\n     * @notice EIP20 Approval event\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\\n\\n    /**\\n     * @notice Event emitted when healing the borrow\\n     */\\n    event HealBorrow(address indexed payer, address indexed borrower, uint256 repayAmount);\\n\\n    /**\\n     * @notice Event emitted when tokens are swept\\n     */\\n    event SweepToken(address indexed token);\\n\\n    /**\\n     * @notice Event emitted when reduce reserves slot (block or second) delta is changed\\n     */\\n    event NewReduceReservesBlockDelta(\\n        uint256 oldReduceReservesBlockOrTimestampDelta,\\n        uint256 newReduceReservesBlockOrTimestampDelta\\n    );\\n\\n    /**\\n     * @notice Event emitted when liquidation reserves are reduced\\n     */\\n    event ProtocolSeize(address indexed from, address indexed to, uint256 amount);\\n\\n    /*** User Interface ***/\\n\\n    function mint(uint256 mintAmount) external virtual returns (uint256);\\n\\n    function mintBehalf(address minter, uint256 mintAllowed) external virtual returns (uint256);\\n\\n    function redeem(uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemUnderlying(uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function redeemUnderlyingBehalf(address redeemer, uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function borrow(uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function borrowBehalf(address borrwwer, uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function repayBorrow(uint256 repayAmount) external virtual returns (uint256);\\n\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external virtual returns (uint256);\\n\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external virtual returns (uint256);\\n\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external virtual;\\n\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipCloseFactorCheck\\n    ) external virtual;\\n\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external virtual;\\n\\n    function transfer(address dst, uint256 amount) external virtual returns (bool);\\n\\n    function transferFrom(address src, address dst, uint256 amount) external virtual returns (bool);\\n\\n    function accrueInterest() external virtual returns (uint256);\\n\\n    function sweepToken(IERC20Upgradeable token) external virtual;\\n\\n    /*** Admin Functions ***/\\n\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external virtual;\\n\\n    function reduceReserves(uint256 reduceAmount) external virtual;\\n\\n    function exchangeRateCurrent() external virtual returns (uint256);\\n\\n    function borrowBalanceCurrent(address account) external virtual returns (uint256);\\n\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external virtual;\\n\\n    function addReserves(uint256 addAmount) external virtual;\\n\\n    function totalBorrowsCurrent() external virtual returns (uint256);\\n\\n    function balanceOfUnderlying(address owner) external virtual returns (uint256);\\n\\n    function approve(address spender, uint256 amount) external virtual returns (bool);\\n\\n    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool);\\n\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool);\\n\\n    function allowance(address owner, address spender) external view virtual returns (uint256);\\n\\n    function balanceOf(address owner) external view virtual returns (uint256);\\n\\n    function getAccountSnapshot(address account) external view virtual returns (uint256, uint256, uint256, uint256);\\n\\n    function borrowRatePerBlock() external view virtual returns (uint256);\\n\\n    function supplyRatePerBlock() external view virtual returns (uint256);\\n\\n    function borrowBalanceStored(address account) external view virtual returns (uint256);\\n\\n    function exchangeRateStored() external view virtual returns (uint256);\\n\\n    function getCash() external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is a VToken contract (for inspection)\\n     * @return Always true\\n     */\\n    function isVToken() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7c4cbb879e3a931cfee4fa7a9eb1978eddff18087a1c4f56decedb84c2479f1e\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\",\"keccak256\":\"0x54ab3a6f3bc87569ed12370f3470a1ec84cea9796d4d0ccf3d07dd4280c044aa\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/validators.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\\nerror ZeroAddressNotAllowed();\\n\\n/// @notice Checks if the provided address is nonzero, reverts otherwise\\n/// @param address_ Address to check\\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\\nfunction ensureNonzeroAddress(address address_) pure {\\n    if (address_ == address(0)) {\\n        revert ZeroAddressNotAllowed();\\n    }\\n}\\n\",\"keccak256\":\"0x93bdd5cfb100f0f9a1d446857e23c3633df6ab12c266333c978428edd96b1367\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface IProtocolShareReserve {\\n    /// @notice it represents the type of vToken income\\n    enum IncomeType {\\n        SPREAD,\\n        LIQUIDATION\\n    }\\n\\n    function updateAssetsState(\\n        address comptroller,\\n        address asset,\\n        IncomeType incomeType\\n    ) external;\\n}\\n\",\"keccak256\":\"0x5fddc5b63fdd850b3b5c83576cda50dcb27a205dbb1a23af17d9da0d9f04fa0a\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { SECONDS_PER_YEAR } from \\\"./constants.sol\\\";\\n\\nabstract contract TimeManagerV8 {\\n    /// @notice Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 public immutable blocksOrSecondsPerYear;\\n\\n    /// @notice Acknowledges if a contract is time based or not\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    bool public immutable isTimeBased;\\n\\n    /// @notice Stores the current block timestamp or block number depending on isTimeBased\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    function() view returns (uint256) private immutable _getCurrentSlot;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n\\n    /// @notice Thrown when blocks per year is invalid\\n    error InvalidBlocksPerYear();\\n\\n    /// @notice Thrown when time based but blocks per year is provided\\n    error InvalidTimeBasedConfiguration();\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block\\n     * If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:error InvalidBlocksPerYear is thrown if blocksPerYear entered is zero and timeBased is false\\n     * @custom:error InvalidTimeBasedConfiguration is thrown if blocksPerYear entered is non zero and timeBased is true\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) {\\n        if (!timeBased_ && blocksPerYear_ == 0) {\\n            revert InvalidBlocksPerYear();\\n        }\\n\\n        if (timeBased_ && blocksPerYear_ != 0) {\\n            revert InvalidTimeBasedConfiguration();\\n        }\\n\\n        isTimeBased = timeBased_;\\n        blocksOrSecondsPerYear = timeBased_ ? SECONDS_PER_YEAR : blocksPerYear_;\\n        _getCurrentSlot = timeBased_ ? _getBlockTimestamp : _getBlockNumber;\\n    }\\n\\n    /**\\n     * @dev Function to simply retrieve block number or block timestamp\\n     * @return Current block number or block timestamp\\n     */\\n    function getBlockNumberOrTimestamp() public view virtual returns (uint256) {\\n        return _getCurrentSlot();\\n    }\\n\\n    /**\\n     * @dev Returns the current timestamp in seconds\\n     * @return The current timestamp\\n     */\\n    function _getBlockTimestamp() private view returns (uint256) {\\n        return block.timestamp;\\n    }\\n\\n    /**\\n     * @dev Returns the current block number\\n     * @return The current block number\\n     */\\n    function _getBlockNumber() private view returns (uint256) {\\n        return block.number;\\n    }\\n}\\n\",\"keccak256\":\"0x57a2bbb9b8e02b1c0a5c0e305fef1328a22db56c3d4b148c362010a6e767243c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\",\"keccak256\":\"0x14de93ead464da249af31bea0e3bcfb62ec693bea3475fb4d90f055ac81dc5eb\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { PrimeStorageV1 } from \\\"../PrimeStorage.sol\\\";\\n\\n/**\\n * @title IPrime\\n * @author Venus\\n * @notice Interface for Prime Token\\n */\\ninterface IPrime {\\n    struct APRInfo {\\n        // supply APR of the user in BPS\\n        uint256 supplyAPR;\\n        // borrow APR of the user in BPS\\n        uint256 borrowAPR;\\n        // total score of the market\\n        uint256 totalScore;\\n        // score of the user\\n        uint256 userScore;\\n        // capped XVS balance of the user\\n        uint256 xvsBalanceForScore;\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    struct Capital {\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    /**\\n     * @notice Returns boosted pending interest accrued for a user for all markets\\n     * @param user the account for which to get the accrued interests\\n     * @return pendingRewards the number of underlying tokens accrued by the user for all markets\\n     */\\n    function getPendingRewards(address user) external returns (PrimeStorageV1.PendingReward[] memory pendingRewards);\\n\\n    /**\\n     * @notice Update total score of multiple users and market\\n     * @param users accounts for which we need to update score\\n     */\\n    function updateScores(address[] memory users) external;\\n\\n    /**\\n     * @notice Update value of alpha\\n     * @param _alphaNumerator numerator of alpha. If alpha is 0.5 then numerator is 1\\n     * @param _alphaDenominator denominator of alpha. If alpha is 0.5 then denominator is 2\\n     */\\n    function updateAlpha(uint128 _alphaNumerator, uint128 _alphaDenominator) external;\\n\\n    /**\\n     * @notice Update multipliers for a market\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier new supply multiplier for the market, scaled by 1e18\\n     * @param borrowMultiplier new borrow multiplier for the market, scaled by 1e18\\n     */\\n    function updateMultipliers(address market, uint256 supplyMultiplier, uint256 borrowMultiplier) external;\\n\\n    /**\\n     * @notice Add a market to prime program\\n     * @param comptroller address of the comptroller\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier the multiplier for supply cap. It should be converted to 1e18\\n     * @param borrowMultiplier the multiplier for borrow cap. It should be converted to 1e18\\n     */\\n    function addMarket(\\n        address comptroller,\\n        address market,\\n        uint256 supplyMultiplier,\\n        uint256 borrowMultiplier\\n    ) external;\\n\\n    /**\\n     * @notice Set limits for total tokens that can be minted\\n     * @param _irrevocableLimit total number of irrevocable tokens that can be minted\\n     * @param _revocableLimit total number of revocable tokens that can be minted\\n     */\\n    function setLimit(uint256 _irrevocableLimit, uint256 _revocableLimit) external;\\n\\n    /**\\n     * @notice Directly issue prime tokens to users\\n     * @param isIrrevocable are the tokens being issued\\n     * @param users list of address to issue tokens to\\n     */\\n    function issue(bool isIrrevocable, address[] calldata users) external;\\n\\n    /**\\n     * @notice Executed by XVSVault whenever user's XVSVault balance changes\\n     * @param user the account address whose balance was updated\\n     */\\n    function xvsUpdated(address user) external;\\n\\n    /**\\n     * @notice accrues interest and updates score for an user for a specific market\\n     * @param user the account address for which to accrue interest and update score\\n     * @param market the market for which to accrue interest and update score\\n     */\\n    function accrueInterestAndUpdateScore(address user, address market) external;\\n\\n    /**\\n     * @notice For claiming prime token when staking period is completed\\n     */\\n    function claim() external;\\n\\n    /**\\n     * @notice For burning any prime token\\n     * @param user the account address for which the prime token will be burned\\n     */\\n    function burn(address user) external;\\n\\n    /**\\n     * @notice To pause or unpause claiming of interest\\n     */\\n    function togglePause() external;\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken) external returns (uint256);\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @param user the user for which to claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Distributes income from market since last distribution\\n     * @param vToken the market for which to distribute the income\\n     */\\n    function accrueInterest(address vToken) external;\\n\\n    /**\\n     * @notice Returns boosted interest accrued for a user\\n     * @param vToken the market for which to fetch the accrued interest\\n     * @param user the account for which to get the accrued interest\\n     * @return interestAccrued the number of underlying tokens accrued by the user since the last accrual\\n     */\\n    function getInterestAccrued(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Retrieves an array of all available markets\\n     * @return an array of addresses representing all available markets\\n     */\\n    function getAllMarkets() external view returns (address[] memory);\\n\\n    /**\\n     * @notice fetch the numbers of seconds remaining for staking period to complete\\n     * @param user the account address for which we are checking the remaining time\\n     * @return timeRemaining the number of seconds the user needs to wait to claim prime token\\n     */\\n    function claimTimeRemaining(address user) external view returns (uint256);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for user for a given market\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function calculateAPR(address market, address user) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for estimated supply, borrow and XVS staked\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @param borrow hypothetical borrow amount\\n     * @param supply hypothetical supply amount\\n     * @param xvsStaked hypothetical staked XVS amount\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function estimateAPR(\\n        address market,\\n        address user,\\n        uint256 borrow,\\n        uint256 supply,\\n        uint256 xvsStaked\\n    ) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice the total income that's going to be distributed in a year to prime token holders\\n     * @param vToken the market for which to fetch the total income that's going to distributed in a year\\n     * @return amount the total income\\n     */\\n    function incomeDistributionYearly(address vToken) external view returns (uint256 amount);\\n\\n    /**\\n     * @notice Returns if user is a prime holder\\n     * @return isPrimeHolder true if user is a prime holder\\n     */\\n    function isUserPrimeHolder(address user) external view returns (bool);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param loopsLimit Number of loops limit\\n     */\\n    function setMaxLoopsLimit(uint256 loopsLimit) external;\\n\\n    /**\\n     * @notice Update staked at timestamp for multiple users\\n     * @param users accounts for which we need to update staked at timestamp\\n     * @param timestamps new staked at timestamp for the users\\n     */\\n    function setStakedAt(address[] calldata users, uint256[] calldata timestamps) external;\\n}\\n\",\"keccak256\":\"0xd112f60183416ad796093b4a83a80ddc1b8b655965f02ae55ca82e2a0c68f97d\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\n/**\\n * @title PrimeStorageV1\\n * @author Venus\\n * @notice Storage for Prime Token\\n */\\ncontract PrimeStorageV1 {\\n    struct Token {\\n        bool exists;\\n        bool isIrrevocable;\\n    }\\n\\n    struct Market {\\n        uint256 supplyMultiplier;\\n        uint256 borrowMultiplier;\\n        uint256 rewardIndex;\\n        uint256 sumOfMembersScore;\\n        bool exists;\\n    }\\n\\n    struct Interest {\\n        uint256 accrued;\\n        uint256 score;\\n        uint256 rewardIndex;\\n    }\\n\\n    struct PendingReward {\\n        address vToken;\\n        address rewardToken;\\n        uint256 amount;\\n    }\\n\\n    /// @notice Base unit for computations, usually used in scaling (multiplications, divisions)\\n    uint256 internal constant EXP_SCALE = 1e18;\\n\\n    /// @notice maximum BPS = 100%\\n    uint256 internal constant MAXIMUM_BPS = 1e4;\\n\\n    /// @notice Mapping to get prime token's metadata\\n    mapping(address => Token) public tokens;\\n\\n    /// @notice  Tracks total irrevocable tokens minted\\n    uint256 public totalIrrevocable;\\n\\n    /// @notice  Tracks total revocable tokens minted\\n    uint256 public totalRevocable;\\n\\n    /// @notice  Indicates maximum revocable tokens that can be minted\\n    uint256 public revocableLimit;\\n\\n    /// @notice  Indicates maximum irrevocable tokens that can be minted\\n    uint256 public irrevocableLimit;\\n\\n    /// @notice Tracks when prime token eligible users started staking for claiming prime token\\n    mapping(address => uint256) public stakedAt;\\n\\n    /// @notice vToken to market configuration\\n    mapping(address => Market) public markets;\\n\\n    /// @notice vToken to user to user index\\n    mapping(address => mapping(address => Interest)) public interests;\\n\\n    /// @notice A list of boosted markets\\n    address[] internal _allMarkets;\\n\\n    /// @notice numerator of alpha. Ex: if alpha is 0.5 then this will be 1\\n    uint128 public alphaNumerator;\\n\\n    /// @notice denominator of alpha. Ex: if alpha is 0.5 then this will be 2\\n    uint128 public alphaDenominator;\\n\\n    /// @notice address of XVS vault\\n    address public xvsVault;\\n\\n    /// @notice address of XVS vault reward token\\n    address public xvsVaultRewardToken;\\n\\n    /// @notice address of XVS vault pool id\\n    uint256 public xvsVaultPoolId;\\n\\n    /// @notice mapping to check if a account's score was updated in the round\\n    mapping(uint256 => mapping(address => bool)) public isScoreUpdated;\\n\\n    /// @notice unique id for next round\\n    uint256 public nextScoreUpdateRoundId;\\n\\n    /// @notice total number of accounts whose score needs to be updated\\n    uint256 public totalScoreUpdatesRequired;\\n\\n    /// @notice total number of accounts whose score is yet to be updated\\n    uint256 public pendingScoreUpdates;\\n\\n    /// @notice mapping used to find if an asset is part of prime markets\\n    mapping(address => address) public vTokenForAsset;\\n\\n    /// @notice Address of core pool comptroller contract\\n    address internal corePoolComptroller;\\n\\n    /// @notice unreleased income from PLP that's already distributed to prime holders\\n    /// @dev mapping of asset address => amount\\n    mapping(address => uint256) public unreleasedPLPIncome;\\n\\n    /// @notice The address of PLP contract\\n    address public primeLiquidityProvider;\\n\\n    /// @notice The address of ResilientOracle contract\\n    ResilientOracleInterface public oracle;\\n\\n    /// @notice The address of PoolRegistry contract\\n    address public poolRegistry;\\n\\n    /// @dev This empty reserved space is put in place to allow future versions to add new\\n    /// variables without shifting down storage in the inheritance chain.\\n    uint256[26] private __gap;\\n}\\n\",\"keccak256\":\"0x5285c875114db2ea2be0b81b65722d5761806217022db733323c4e03365a95e7\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[{"astId":15526,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"_notEntered","offset":0,"slot":"0","type":"t_bool"},{"astId":15529,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"underlying","offset":1,"slot":"0","type":"t_address"},{"astId":15532,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"name","offset":0,"slot":"1","type":"t_string_storage"},{"astId":15535,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"symbol","offset":0,"slot":"2","type":"t_string_storage"},{"astId":15538,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"decimals","offset":0,"slot":"3","type":"t_uint8"},{"astId":15541,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"protocolShareReserve","offset":1,"slot":"3","type":"t_address_payable"},{"astId":15545,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"comptroller","offset":0,"slot":"4","type":"t_contract(ComptrollerInterface)9353"},{"astId":15549,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"interestRateModel","offset":0,"slot":"5","type":"t_contract(InterestRateModel)10266"},{"astId":15551,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"initialExchangeRateMantissa","offset":0,"slot":"6","type":"t_uint256"},{"astId":15554,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"reserveFactorMantissa","offset":0,"slot":"7","type":"t_uint256"},{"astId":15557,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"accrualBlockNumber","offset":0,"slot":"8","type":"t_uint256"},{"astId":15560,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"borrowIndex","offset":0,"slot":"9","type":"t_uint256"},{"astId":15563,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"totalBorrows","offset":0,"slot":"10","type":"t_uint256"},{"astId":15566,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"totalReserves","offset":0,"slot":"11","type":"t_uint256"},{"astId":15569,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"totalSupply","offset":0,"slot":"12","type":"t_uint256"},{"astId":15572,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"badDebt","offset":0,"slot":"13","type":"t_uint256"},{"astId":15576,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"accountTokens","offset":0,"slot":"14","type":"t_mapping(t_address,t_uint256)"},{"astId":15582,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"transferAllowances","offset":0,"slot":"15","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":15587,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"accountBorrows","offset":0,"slot":"16","type":"t_mapping(t_address,t_struct(BorrowSnapshot)15523_storage)"},{"astId":15590,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"protocolSeizeShareMantissa","offset":0,"slot":"17","type":"t_uint256"},{"astId":15593,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"shortfall","offset":0,"slot":"18","type":"t_address"},{"astId":15596,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"reduceReservesBlockDelta","offset":0,"slot":"19","type":"t_uint256"},{"astId":15599,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"reduceReservesBlockNumber","offset":0,"slot":"20","type":"t_uint256"},{"astId":15604,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"__gap","offset":0,"slot":"21","type":"t_array(t_uint256)48_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_address_payable":{"encoding":"inplace","label":"address payable","numberOfBytes":"20"},"t_array(t_uint256)48_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[48]","numberOfBytes":"1536"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(ComptrollerInterface)9353":{"encoding":"inplace","label":"contract ComptrollerInterface","numberOfBytes":"20"},"t_contract(InterestRateModel)10266":{"encoding":"inplace","label":"contract InterestRateModel","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(BorrowSnapshot)15523_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct VTokenStorage.BorrowSnapshot)","numberOfBytes":"32","value":"t_struct(BorrowSnapshot)15523_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(BorrowSnapshot)15523_storage":{"encoding":"inplace","label":"struct VTokenStorage.BorrowSnapshot","members":[{"astId":15520,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"principal","offset":0,"slot":"0","type":"t_uint256"},{"astId":15522,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenInterface","label":"interestIndex","offset":0,"slot":"1","type":"t_uint256"}],"numberOfBytes":"64"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"events":{"AccrueInterest(uint256,uint256,uint256,uint256)":{"notice":"Event emitted when interest is accrued"},"Approval(address,address,uint256)":{"notice":"EIP20 Approval event"},"BadDebtIncreased(address,uint256,uint256,uint256)":{"notice":"Event emitted when bad debt is accumulated on a market"},"BadDebtRecovered(uint256,uint256)":{"notice":"Event emitted when bad debt is recovered via an auction"},"Borrow(address,uint256,uint256,uint256)":{"notice":"Event emitted when underlying is borrowed"},"HealBorrow(address,address,uint256)":{"notice":"Event emitted when healing the borrow"},"LiquidateBorrow(address,address,uint256,address,uint256)":{"notice":"Event emitted when a borrow is liquidated"},"Mint(address,uint256,uint256,uint256)":{"notice":"Event emitted when tokens are minted"},"NewComptroller(address,address)":{"notice":"Event emitted when comptroller is changed"},"NewMarketInterestRateModel(address,address)":{"notice":"Event emitted when interestRateModel is changed"},"NewProtocolSeizeShare(uint256,uint256)":{"notice":"Event emitted when protocol seize share is changed"},"NewProtocolShareReserve(address,address)":{"notice":"Event emitted when protocol share reserve contract address is changed"},"NewReduceReservesBlockDelta(uint256,uint256)":{"notice":"Event emitted when reduce reserves slot (block or second) delta is changed"},"NewReserveFactor(uint256,uint256)":{"notice":"Event emitted when the reserve factor is changed"},"NewShortfallContract(address,address)":{"notice":"Event emitted when shortfall contract address is changed"},"ProtocolSeize(address,address,uint256)":{"notice":"Event emitted when liquidation reserves are reduced"},"Redeem(address,uint256,uint256,uint256)":{"notice":"Event emitted when tokens are redeemed"},"RepayBorrow(address,address,uint256,uint256,uint256)":{"notice":"Event emitted when a borrow is repaid"},"ReservesAdded(address,uint256,uint256)":{"notice":"Event emitted when the reserves are added"},"SpreadReservesReduced(address,uint256,uint256)":{"notice":"Event emitted when the spread reserves are reduced"},"SweepToken(address)":{"notice":"Event emitted when tokens are swept"},"Transfer(address,address,uint256)":{"notice":"EIP20 Transfer event"}},"kind":"user","methods":{"accrualBlockNumber()":{"notice":"Slot(block or second) number that interest was last accrued at"},"badDebt()":{"notice":"Total bad debt of the market"},"borrowIndex()":{"notice":"Accumulator of the total earned interest rate since the opening of the market"},"comptroller()":{"notice":"Contract which oversees inter-vToken operations"},"decimals()":{"notice":"EIP-20 token decimals for this token"},"interestRateModel()":{"notice":"Model which tells what the current interest rate should be"},"isVToken()":{"notice":"Indicator that this is a VToken contract (for inspection)"},"name()":{"notice":"EIP-20 token name for this token"},"protocolSeizeShareMantissa()":{"notice":"Share of seized collateral that is added to reserves"},"protocolShareReserve()":{"notice":"Protocol share Reserve contract address"},"reduceReservesBlockDelta()":{"notice":"delta slot (block or second) after which reserves will be reduced"},"reduceReservesBlockNumber()":{"notice":"last slot (block or second) number at which reserves were reduced"},"reserveFactorMantissa()":{"notice":"Fraction of interest currently set aside for reserves"},"shortfall()":{"notice":"Storage of Shortfall contract address"},"symbol()":{"notice":"EIP-20 token symbol for this token"},"totalBorrows()":{"notice":"Total amount of outstanding borrows of the underlying in this market"},"totalReserves()":{"notice":"Total amount of reserves of the underlying held in this market"},"totalSupply()":{"notice":"Total number of tokens in circulation"},"underlying()":{"notice":"Underlying asset for this VToken"}},"notice":"Interface implemented by the `VToken` contract","version":1}},"VTokenStorage":{"abi":[{"inputs":[],"name":"accrualBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"badDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"borrowIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"comptroller","outputs":[{"internalType":"contract ComptrollerInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"interestRateModel","outputs":[{"internalType":"contract InterestRateModel","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolSeizeShareMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolShareReserve","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reduceReservesBlockDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reduceReservesBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserveFactorMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"shortfall","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBorrows","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Venus","kind":"dev","methods":{},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"_notEntered":{"details":"Guard variable for re-entrancy checks"}},"title":"VTokenStorage","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080604052348015600f57600080fd5b5061044e8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80636f307dc3116100a2578063ae96f14111610071578063ae96f141146101ff578063bbcac55714610208578063d1109c2f14610211578063e9a44fd91461021a578063f3fdb15a1461023257600080fd5b80636f307dc3146101cd5780638f840ddd146101e557806395d89b41146101ee578063aa5af0fd146101f657600080fd5b8063313ce567116100e9578063313ce5671461017857806347bd3718146101925780635fe3b5671461019b5780636752e702146101bb5780636c540baf146101c457600080fd5b806306fdde031461011b578063173b99041461013957806318160ddd1461014f57806319b1faef14610158575b600080fd5b610123610245565b6040516101309190610336565b60405180910390f35b61014260075481565b6040516101309190610356565b610142600c5481565b60125461016b906001600160a01b031681565b6040516101309190610384565b6003546101859060ff1681565b604051610130919061039b565b610142600a5481565b6004546101ae906001600160a01b031681565b60405161013091906103c8565b61014260115481565b61014260085481565b60005461016b9061010090046001600160a01b031681565b610142600b5481565b6101236102d3565b61014260095481565b61014260145481565b610142600d5481565b61014260135481565b60035461016b9061010090046001600160a01b031681565b6005546101ae906001600160a01b031681565b60018054610252906103ec565b80601f016020809104026020016040519081016040528092919081815260200182805461027e906103ec565b80156102cb5780601f106102a0576101008083540402835291602001916102cb565b820191906000526020600020905b8154815290600101906020018083116102ae57829003601f168201915b505050505081565b60028054610252906103ec565b60005b838110156102fb5781810151838201526020016102e3565b50506000910152565b600061030e825190565b8084526020840193506103258185602086016102e0565b601f01601f19169290920192915050565b602080825281016103478184610304565b9392505050565b805b82525050565b60208101610364828461034e565b92915050565b60006001600160a01b038216610364565b6103508161036a565b60208101610364828461037b565b60ff8116610350565b602081016103648284610392565b60006103648261036a565b6000610364826103a9565b610350816103b4565b6020810161036482846103bf565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061040057607f821691505b602082108103610412576104126103d6565b5091905056fea2646970667358221220559a1178c01bb526daf8b603e4c4f497b143a873385e73229b569680c0d6137964736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x44E DUP1 PUSH2 0x1F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x116 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6F307DC3 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xAE96F141 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xAE96F141 EQ PUSH2 0x1FF JUMPI DUP1 PUSH4 0xBBCAC557 EQ PUSH2 0x208 JUMPI DUP1 PUSH4 0xD1109C2F EQ PUSH2 0x211 JUMPI DUP1 PUSH4 0xE9A44FD9 EQ PUSH2 0x21A JUMPI DUP1 PUSH4 0xF3FDB15A EQ PUSH2 0x232 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6F307DC3 EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0x8F840DDD EQ PUSH2 0x1E5 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1EE JUMPI DUP1 PUSH4 0xAA5AF0FD EQ PUSH2 0x1F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x178 JUMPI DUP1 PUSH4 0x47BD3718 EQ PUSH2 0x192 JUMPI DUP1 PUSH4 0x5FE3B567 EQ PUSH2 0x19B JUMPI DUP1 PUSH4 0x6752E702 EQ PUSH2 0x1BB JUMPI DUP1 PUSH4 0x6C540BAF EQ PUSH2 0x1C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x11B JUMPI DUP1 PUSH4 0x173B9904 EQ PUSH2 0x139 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x14F JUMPI DUP1 PUSH4 0x19B1FAEF EQ PUSH2 0x158 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x123 PUSH2 0x245 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x130 SWAP2 SWAP1 PUSH2 0x336 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x142 PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x130 SWAP2 SWAP1 PUSH2 0x356 JUMP JUMPDEST PUSH2 0x142 PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH2 0x16B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x130 SWAP2 SWAP1 PUSH2 0x384 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x185 SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x130 SWAP2 SWAP1 PUSH2 0x39B JUMP JUMPDEST PUSH2 0x142 PUSH1 0xA SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x1AE SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x130 SWAP2 SWAP1 PUSH2 0x3C8 JUMP JUMPDEST PUSH2 0x142 PUSH1 0x11 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x142 PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x16B SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x142 PUSH1 0xB SLOAD DUP2 JUMP JUMPDEST PUSH2 0x123 PUSH2 0x2D3 JUMP JUMPDEST PUSH2 0x142 PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x142 PUSH1 0x14 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x142 PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH2 0x142 PUSH1 0x13 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x16B SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x1AE SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0x252 SWAP1 PUSH2 0x3EC JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x27E SWAP1 PUSH2 0x3EC JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2CB JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2A0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2CB JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2AE JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH2 0x252 SWAP1 PUSH2 0x3EC JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2FB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2E3 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x30E DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x325 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x2E0 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x347 DUP2 DUP5 PUSH2 0x304 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x364 DUP3 DUP5 PUSH2 0x34E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x364 JUMP JUMPDEST PUSH2 0x350 DUP2 PUSH2 0x36A JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x364 DUP3 DUP5 PUSH2 0x37B JUMP JUMPDEST PUSH1 0xFF DUP2 AND PUSH2 0x350 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x364 DUP3 DUP5 PUSH2 0x392 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x364 DUP3 PUSH2 0x36A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x364 DUP3 PUSH2 0x3A9 JUMP JUMPDEST PUSH2 0x350 DUP2 PUSH2 0x3B4 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x364 DUP3 DUP5 PUSH2 0x3BF JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP2 DIV PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x400 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x412 JUMPI PUSH2 0x412 PUSH2 0x3D6 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SSTORE SWAP11 GT PUSH25 0xC01BB526DAF8B603E4C4F497B143A873385E73229B569680C0 0xD6 SGT PUSH26 0x64736F6C63430008190033000000000000000000000000000000 ","sourceMap":"561:3460:39:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@accrualBlockNumber_15557":{"entryPoint":null,"id":15557,"parameterSlots":0,"returnSlots":0},"@badDebt_15572":{"entryPoint":null,"id":15572,"parameterSlots":0,"returnSlots":0},"@borrowIndex_15560":{"entryPoint":null,"id":15560,"parameterSlots":0,"returnSlots":0},"@comptroller_15545":{"entryPoint":null,"id":15545,"parameterSlots":0,"returnSlots":0},"@decimals_15538":{"entryPoint":null,"id":15538,"parameterSlots":0,"returnSlots":0},"@interestRateModel_15549":{"entryPoint":null,"id":15549,"parameterSlots":0,"returnSlots":0},"@name_15532":{"entryPoint":581,"id":15532,"parameterSlots":0,"returnSlots":0},"@protocolSeizeShareMantissa_15590":{"entryPoint":null,"id":15590,"parameterSlots":0,"returnSlots":0},"@protocolShareReserve_15541":{"entryPoint":null,"id":15541,"parameterSlots":0,"returnSlots":0},"@reduceReservesBlockDelta_15596":{"entryPoint":null,"id":15596,"parameterSlots":0,"returnSlots":0},"@reduceReservesBlockNumber_15599":{"entryPoint":null,"id":15599,"parameterSlots":0,"returnSlots":0},"@reserveFactorMantissa_15554":{"entryPoint":null,"id":15554,"parameterSlots":0,"returnSlots":0},"@shortfall_15593":{"entryPoint":null,"id":15593,"parameterSlots":0,"returnSlots":0},"@symbol_15535":{"entryPoint":723,"id":15535,"parameterSlots":0,"returnSlots":0},"@totalBorrows_15563":{"entryPoint":null,"id":15563,"parameterSlots":0,"returnSlots":0},"@totalReserves_15566":{"entryPoint":null,"id":15566,"parameterSlots":0,"returnSlots":0},"@totalSupply_15569":{"entryPoint":null,"id":15569,"parameterSlots":0,"returnSlots":0},"@underlying_15529":{"entryPoint":null,"id":15529,"parameterSlots":0,"returnSlots":0},"abi_encode_t_address_payable_to_t_address_payable_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_address_to_t_address_fromStack":{"entryPoint":891,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_ComptrollerInterface_$9353_to_t_address_fromStack":{"entryPoint":959,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_InterestRateModel_$10266_to_t_address_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack":{"entryPoint":772,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_uint256_to_t_uint256_fromStack":{"entryPoint":846,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_uint8_to_t_uint8_fromStack":{"entryPoint":914,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":900,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_payable__to_t_address_payable__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_ComptrollerInterface_$9353__to_t_address__fromStack_reversed":{"entryPoint":968,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_InterestRateModel_$10266__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":822,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":854,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":923,"id":null,"parameterSlots":2,"returnSlots":1},"array_length_t_string_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_address":{"entryPoint":874,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_address_payable":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_ComptrollerInterface_$9353_to_t_address":{"entryPoint":948,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_InterestRateModel_$10266_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint160_to_t_address":{"entryPoint":937,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint160_to_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":736,"id":null,"parameterSlots":3,"returnSlots":0},"extract_byte_array_length":{"entryPoint":1004,"id":null,"parameterSlots":1,"returnSlots":1},"identity":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x22":{"entryPoint":982,"id":null,"parameterSlots":0,"returnSlots":0},"round_up_to_mul_of_32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nativeSrc":"0:5449:69","nodeType":"YulBlock","src":"0:5449:69","statements":[{"body":{"nativeSrc":"66:40:69","nodeType":"YulBlock","src":"66:40:69","statements":[{"nativeSrc":"77:22:69","nodeType":"YulAssignment","src":"77:22:69","value":{"arguments":[{"name":"value","nativeSrc":"93:5:69","nodeType":"YulIdentifier","src":"93:5:69"}],"functionName":{"name":"mload","nativeSrc":"87:5:69","nodeType":"YulIdentifier","src":"87:5:69"},"nativeSrc":"87:12:69","nodeType":"YulFunctionCall","src":"87:12:69"},"variableNames":[{"name":"length","nativeSrc":"77:6:69","nodeType":"YulIdentifier","src":"77:6:69"}]}]},"name":"array_length_t_string_memory_ptr","nativeSrc":"7:99:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"49:5:69","nodeType":"YulTypedName","src":"49:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"59:6:69","nodeType":"YulTypedName","src":"59:6:69","type":""}],"src":"7:99:69"},{"body":{"nativeSrc":"208:73:69","nodeType":"YulBlock","src":"208:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"225:3:69","nodeType":"YulIdentifier","src":"225:3:69"},{"name":"length","nativeSrc":"230:6:69","nodeType":"YulIdentifier","src":"230:6:69"}],"functionName":{"name":"mstore","nativeSrc":"218:6:69","nodeType":"YulIdentifier","src":"218:6:69"},"nativeSrc":"218:19:69","nodeType":"YulFunctionCall","src":"218:19:69"},"nativeSrc":"218:19:69","nodeType":"YulExpressionStatement","src":"218:19:69"},{"nativeSrc":"246:29:69","nodeType":"YulAssignment","src":"246:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"265:3:69","nodeType":"YulIdentifier","src":"265:3:69"},{"kind":"number","nativeSrc":"270:4:69","nodeType":"YulLiteral","src":"270:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"261:3:69","nodeType":"YulIdentifier","src":"261:3:69"},"nativeSrc":"261:14:69","nodeType":"YulFunctionCall","src":"261:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"246:11:69","nodeType":"YulIdentifier","src":"246:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"112:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"180:3:69","nodeType":"YulTypedName","src":"180:3:69","type":""},{"name":"length","nativeSrc":"185:6:69","nodeType":"YulTypedName","src":"185:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"196:11:69","nodeType":"YulTypedName","src":"196:11:69","type":""}],"src":"112:169:69"},{"body":{"nativeSrc":"349:186:69","nodeType":"YulBlock","src":"349:186:69","statements":[{"nativeSrc":"360:10:69","nodeType":"YulVariableDeclaration","src":"360:10:69","value":{"kind":"number","nativeSrc":"369:1:69","nodeType":"YulLiteral","src":"369:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"364:1:69","nodeType":"YulTypedName","src":"364:1:69","type":""}]},{"body":{"nativeSrc":"429:63:69","nodeType":"YulBlock","src":"429:63:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"454:3:69","nodeType":"YulIdentifier","src":"454:3:69"},{"name":"i","nativeSrc":"459:1:69","nodeType":"YulIdentifier","src":"459:1:69"}],"functionName":{"name":"add","nativeSrc":"450:3:69","nodeType":"YulIdentifier","src":"450:3:69"},"nativeSrc":"450:11:69","nodeType":"YulFunctionCall","src":"450:11:69"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"473:3:69","nodeType":"YulIdentifier","src":"473:3:69"},{"name":"i","nativeSrc":"478:1:69","nodeType":"YulIdentifier","src":"478:1:69"}],"functionName":{"name":"add","nativeSrc":"469:3:69","nodeType":"YulIdentifier","src":"469:3:69"},"nativeSrc":"469:11:69","nodeType":"YulFunctionCall","src":"469:11:69"}],"functionName":{"name":"mload","nativeSrc":"463:5:69","nodeType":"YulIdentifier","src":"463:5:69"},"nativeSrc":"463:18:69","nodeType":"YulFunctionCall","src":"463:18:69"}],"functionName":{"name":"mstore","nativeSrc":"443:6:69","nodeType":"YulIdentifier","src":"443:6:69"},"nativeSrc":"443:39:69","nodeType":"YulFunctionCall","src":"443:39:69"},"nativeSrc":"443:39:69","nodeType":"YulExpressionStatement","src":"443:39:69"}]},"condition":{"arguments":[{"name":"i","nativeSrc":"390:1:69","nodeType":"YulIdentifier","src":"390:1:69"},{"name":"length","nativeSrc":"393:6:69","nodeType":"YulIdentifier","src":"393:6:69"}],"functionName":{"name":"lt","nativeSrc":"387:2:69","nodeType":"YulIdentifier","src":"387:2:69"},"nativeSrc":"387:13:69","nodeType":"YulFunctionCall","src":"387:13:69"},"nativeSrc":"379:113:69","nodeType":"YulForLoop","post":{"nativeSrc":"401:19:69","nodeType":"YulBlock","src":"401:19:69","statements":[{"nativeSrc":"403:15:69","nodeType":"YulAssignment","src":"403:15:69","value":{"arguments":[{"name":"i","nativeSrc":"412:1:69","nodeType":"YulIdentifier","src":"412:1:69"},{"kind":"number","nativeSrc":"415:2:69","nodeType":"YulLiteral","src":"415:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"408:3:69","nodeType":"YulIdentifier","src":"408:3:69"},"nativeSrc":"408:10:69","nodeType":"YulFunctionCall","src":"408:10:69"},"variableNames":[{"name":"i","nativeSrc":"403:1:69","nodeType":"YulIdentifier","src":"403:1:69"}]}]},"pre":{"nativeSrc":"383:3:69","nodeType":"YulBlock","src":"383:3:69","statements":[]},"src":"379:113:69"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"512:3:69","nodeType":"YulIdentifier","src":"512:3:69"},{"name":"length","nativeSrc":"517:6:69","nodeType":"YulIdentifier","src":"517:6:69"}],"functionName":{"name":"add","nativeSrc":"508:3:69","nodeType":"YulIdentifier","src":"508:3:69"},"nativeSrc":"508:16:69","nodeType":"YulFunctionCall","src":"508:16:69"},{"kind":"number","nativeSrc":"526:1:69","nodeType":"YulLiteral","src":"526:1:69","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"501:6:69","nodeType":"YulIdentifier","src":"501:6:69"},"nativeSrc":"501:27:69","nodeType":"YulFunctionCall","src":"501:27:69"},"nativeSrc":"501:27:69","nodeType":"YulExpressionStatement","src":"501:27:69"}]},"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"287:248:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"331:3:69","nodeType":"YulTypedName","src":"331:3:69","type":""},{"name":"dst","nativeSrc":"336:3:69","nodeType":"YulTypedName","src":"336:3:69","type":""},{"name":"length","nativeSrc":"341:6:69","nodeType":"YulTypedName","src":"341:6:69","type":""}],"src":"287:248:69"},{"body":{"nativeSrc":"589:54:69","nodeType":"YulBlock","src":"589:54:69","statements":[{"nativeSrc":"599:38:69","nodeType":"YulAssignment","src":"599:38:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"617:5:69","nodeType":"YulIdentifier","src":"617:5:69"},{"kind":"number","nativeSrc":"624:2:69","nodeType":"YulLiteral","src":"624:2:69","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"613:3:69","nodeType":"YulIdentifier","src":"613:3:69"},"nativeSrc":"613:14:69","nodeType":"YulFunctionCall","src":"613:14:69"},{"arguments":[{"kind":"number","nativeSrc":"633:2:69","nodeType":"YulLiteral","src":"633:2:69","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"629:3:69","nodeType":"YulIdentifier","src":"629:3:69"},"nativeSrc":"629:7:69","nodeType":"YulFunctionCall","src":"629:7:69"}],"functionName":{"name":"and","nativeSrc":"609:3:69","nodeType":"YulIdentifier","src":"609:3:69"},"nativeSrc":"609:28:69","nodeType":"YulFunctionCall","src":"609:28:69"},"variableNames":[{"name":"result","nativeSrc":"599:6:69","nodeType":"YulIdentifier","src":"599:6:69"}]}]},"name":"round_up_to_mul_of_32","nativeSrc":"541:102:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"572:5:69","nodeType":"YulTypedName","src":"572:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"582:6:69","nodeType":"YulTypedName","src":"582:6:69","type":""}],"src":"541:102:69"},{"body":{"nativeSrc":"741:285:69","nodeType":"YulBlock","src":"741:285:69","statements":[{"nativeSrc":"751:53:69","nodeType":"YulVariableDeclaration","src":"751:53:69","value":{"arguments":[{"name":"value","nativeSrc":"798:5:69","nodeType":"YulIdentifier","src":"798:5:69"}],"functionName":{"name":"array_length_t_string_memory_ptr","nativeSrc":"765:32:69","nodeType":"YulIdentifier","src":"765:32:69"},"nativeSrc":"765:39:69","nodeType":"YulFunctionCall","src":"765:39:69"},"variables":[{"name":"length","nativeSrc":"755:6:69","nodeType":"YulTypedName","src":"755:6:69","type":""}]},{"nativeSrc":"813:78:69","nodeType":"YulAssignment","src":"813:78:69","value":{"arguments":[{"name":"pos","nativeSrc":"879:3:69","nodeType":"YulIdentifier","src":"879:3:69"},{"name":"length","nativeSrc":"884:6:69","nodeType":"YulIdentifier","src":"884:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"820:58:69","nodeType":"YulIdentifier","src":"820:58:69"},"nativeSrc":"820:71:69","nodeType":"YulFunctionCall","src":"820:71:69"},"variableNames":[{"name":"pos","nativeSrc":"813:3:69","nodeType":"YulIdentifier","src":"813:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"939:5:69","nodeType":"YulIdentifier","src":"939:5:69"},{"kind":"number","nativeSrc":"946:4:69","nodeType":"YulLiteral","src":"946:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"935:3:69","nodeType":"YulIdentifier","src":"935:3:69"},"nativeSrc":"935:16:69","nodeType":"YulFunctionCall","src":"935:16:69"},{"name":"pos","nativeSrc":"953:3:69","nodeType":"YulIdentifier","src":"953:3:69"},{"name":"length","nativeSrc":"958:6:69","nodeType":"YulIdentifier","src":"958:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"900:34:69","nodeType":"YulIdentifier","src":"900:34:69"},"nativeSrc":"900:65:69","nodeType":"YulFunctionCall","src":"900:65:69"},"nativeSrc":"900:65:69","nodeType":"YulExpressionStatement","src":"900:65:69"},{"nativeSrc":"974:46:69","nodeType":"YulAssignment","src":"974:46:69","value":{"arguments":[{"name":"pos","nativeSrc":"985:3:69","nodeType":"YulIdentifier","src":"985:3:69"},{"arguments":[{"name":"length","nativeSrc":"1012:6:69","nodeType":"YulIdentifier","src":"1012:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"990:21:69","nodeType":"YulIdentifier","src":"990:21:69"},"nativeSrc":"990:29:69","nodeType":"YulFunctionCall","src":"990:29:69"}],"functionName":{"name":"add","nativeSrc":"981:3:69","nodeType":"YulIdentifier","src":"981:3:69"},"nativeSrc":"981:39:69","nodeType":"YulFunctionCall","src":"981:39:69"},"variableNames":[{"name":"end","nativeSrc":"974:3:69","nodeType":"YulIdentifier","src":"974:3:69"}]}]},"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"649:377:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"722:5:69","nodeType":"YulTypedName","src":"722:5:69","type":""},{"name":"pos","nativeSrc":"729:3:69","nodeType":"YulTypedName","src":"729:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"737:3:69","nodeType":"YulTypedName","src":"737:3:69","type":""}],"src":"649:377:69"},{"body":{"nativeSrc":"1150:195:69","nodeType":"YulBlock","src":"1150:195:69","statements":[{"nativeSrc":"1160:26:69","nodeType":"YulAssignment","src":"1160:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"1172:9:69","nodeType":"YulIdentifier","src":"1172:9:69"},{"kind":"number","nativeSrc":"1183:2:69","nodeType":"YulLiteral","src":"1183:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1168:3:69","nodeType":"YulIdentifier","src":"1168:3:69"},"nativeSrc":"1168:18:69","nodeType":"YulFunctionCall","src":"1168:18:69"},"variableNames":[{"name":"tail","nativeSrc":"1160:4:69","nodeType":"YulIdentifier","src":"1160:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1207:9:69","nodeType":"YulIdentifier","src":"1207:9:69"},{"kind":"number","nativeSrc":"1218:1:69","nodeType":"YulLiteral","src":"1218:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1203:3:69","nodeType":"YulIdentifier","src":"1203:3:69"},"nativeSrc":"1203:17:69","nodeType":"YulFunctionCall","src":"1203:17:69"},{"arguments":[{"name":"tail","nativeSrc":"1226:4:69","nodeType":"YulIdentifier","src":"1226:4:69"},{"name":"headStart","nativeSrc":"1232:9:69","nodeType":"YulIdentifier","src":"1232:9:69"}],"functionName":{"name":"sub","nativeSrc":"1222:3:69","nodeType":"YulIdentifier","src":"1222:3:69"},"nativeSrc":"1222:20:69","nodeType":"YulFunctionCall","src":"1222:20:69"}],"functionName":{"name":"mstore","nativeSrc":"1196:6:69","nodeType":"YulIdentifier","src":"1196:6:69"},"nativeSrc":"1196:47:69","nodeType":"YulFunctionCall","src":"1196:47:69"},"nativeSrc":"1196:47:69","nodeType":"YulExpressionStatement","src":"1196:47:69"},{"nativeSrc":"1252:86:69","nodeType":"YulAssignment","src":"1252:86:69","value":{"arguments":[{"name":"value0","nativeSrc":"1324:6:69","nodeType":"YulIdentifier","src":"1324:6:69"},{"name":"tail","nativeSrc":"1333:4:69","nodeType":"YulIdentifier","src":"1333:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"1260:63:69","nodeType":"YulIdentifier","src":"1260:63:69"},"nativeSrc":"1260:78:69","nodeType":"YulFunctionCall","src":"1260:78:69"},"variableNames":[{"name":"tail","nativeSrc":"1252:4:69","nodeType":"YulIdentifier","src":"1252:4:69"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"1032:313:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1122:9:69","nodeType":"YulTypedName","src":"1122:9:69","type":""},{"name":"value0","nativeSrc":"1134:6:69","nodeType":"YulTypedName","src":"1134:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1145:4:69","nodeType":"YulTypedName","src":"1145:4:69","type":""}],"src":"1032:313:69"},{"body":{"nativeSrc":"1396:32:69","nodeType":"YulBlock","src":"1396:32:69","statements":[{"nativeSrc":"1406:16:69","nodeType":"YulAssignment","src":"1406:16:69","value":{"name":"value","nativeSrc":"1417:5:69","nodeType":"YulIdentifier","src":"1417:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"1406:7:69","nodeType":"YulIdentifier","src":"1406:7:69"}]}]},"name":"cleanup_t_uint256","nativeSrc":"1351:77:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1378:5:69","nodeType":"YulTypedName","src":"1378:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"1388:7:69","nodeType":"YulTypedName","src":"1388:7:69","type":""}],"src":"1351:77:69"},{"body":{"nativeSrc":"1499:53:69","nodeType":"YulBlock","src":"1499:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"1516:3:69","nodeType":"YulIdentifier","src":"1516:3:69"},{"arguments":[{"name":"value","nativeSrc":"1539:5:69","nodeType":"YulIdentifier","src":"1539:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"1521:17:69","nodeType":"YulIdentifier","src":"1521:17:69"},"nativeSrc":"1521:24:69","nodeType":"YulFunctionCall","src":"1521:24:69"}],"functionName":{"name":"mstore","nativeSrc":"1509:6:69","nodeType":"YulIdentifier","src":"1509:6:69"},"nativeSrc":"1509:37:69","nodeType":"YulFunctionCall","src":"1509:37:69"},"nativeSrc":"1509:37:69","nodeType":"YulExpressionStatement","src":"1509:37:69"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"1434:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1487:5:69","nodeType":"YulTypedName","src":"1487:5:69","type":""},{"name":"pos","nativeSrc":"1494:3:69","nodeType":"YulTypedName","src":"1494:3:69","type":""}],"src":"1434:118:69"},{"body":{"nativeSrc":"1656:124:69","nodeType":"YulBlock","src":"1656:124:69","statements":[{"nativeSrc":"1666:26:69","nodeType":"YulAssignment","src":"1666:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"1678:9:69","nodeType":"YulIdentifier","src":"1678:9:69"},{"kind":"number","nativeSrc":"1689:2:69","nodeType":"YulLiteral","src":"1689:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1674:3:69","nodeType":"YulIdentifier","src":"1674:3:69"},"nativeSrc":"1674:18:69","nodeType":"YulFunctionCall","src":"1674:18:69"},"variableNames":[{"name":"tail","nativeSrc":"1666:4:69","nodeType":"YulIdentifier","src":"1666:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"1746:6:69","nodeType":"YulIdentifier","src":"1746:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"1759:9:69","nodeType":"YulIdentifier","src":"1759:9:69"},{"kind":"number","nativeSrc":"1770:1:69","nodeType":"YulLiteral","src":"1770:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1755:3:69","nodeType":"YulIdentifier","src":"1755:3:69"},"nativeSrc":"1755:17:69","nodeType":"YulFunctionCall","src":"1755:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"1702:43:69","nodeType":"YulIdentifier","src":"1702:43:69"},"nativeSrc":"1702:71:69","nodeType":"YulFunctionCall","src":"1702:71:69"},"nativeSrc":"1702:71:69","nodeType":"YulExpressionStatement","src":"1702:71:69"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nativeSrc":"1558:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1628:9:69","nodeType":"YulTypedName","src":"1628:9:69","type":""},{"name":"value0","nativeSrc":"1640:6:69","nodeType":"YulTypedName","src":"1640:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1651:4:69","nodeType":"YulTypedName","src":"1651:4:69","type":""}],"src":"1558:222:69"},{"body":{"nativeSrc":"1831:81:69","nodeType":"YulBlock","src":"1831:81:69","statements":[{"nativeSrc":"1841:65:69","nodeType":"YulAssignment","src":"1841:65:69","value":{"arguments":[{"name":"value","nativeSrc":"1856:5:69","nodeType":"YulIdentifier","src":"1856:5:69"},{"kind":"number","nativeSrc":"1863:42:69","nodeType":"YulLiteral","src":"1863:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"1852:3:69","nodeType":"YulIdentifier","src":"1852:3:69"},"nativeSrc":"1852:54:69","nodeType":"YulFunctionCall","src":"1852:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"1841:7:69","nodeType":"YulIdentifier","src":"1841:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"1786:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1813:5:69","nodeType":"YulTypedName","src":"1813:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"1823:7:69","nodeType":"YulTypedName","src":"1823:7:69","type":""}],"src":"1786:126:69"},{"body":{"nativeSrc":"1963:51:69","nodeType":"YulBlock","src":"1963:51:69","statements":[{"nativeSrc":"1973:35:69","nodeType":"YulAssignment","src":"1973:35:69","value":{"arguments":[{"name":"value","nativeSrc":"2002:5:69","nodeType":"YulIdentifier","src":"2002:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"1984:17:69","nodeType":"YulIdentifier","src":"1984:17:69"},"nativeSrc":"1984:24:69","nodeType":"YulFunctionCall","src":"1984:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"1973:7:69","nodeType":"YulIdentifier","src":"1973:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"1918:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1945:5:69","nodeType":"YulTypedName","src":"1945:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"1955:7:69","nodeType":"YulTypedName","src":"1955:7:69","type":""}],"src":"1918:96:69"},{"body":{"nativeSrc":"2085:53:69","nodeType":"YulBlock","src":"2085:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"2102:3:69","nodeType":"YulIdentifier","src":"2102:3:69"},{"arguments":[{"name":"value","nativeSrc":"2125:5:69","nodeType":"YulIdentifier","src":"2125:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"2107:17:69","nodeType":"YulIdentifier","src":"2107:17:69"},"nativeSrc":"2107:24:69","nodeType":"YulFunctionCall","src":"2107:24:69"}],"functionName":{"name":"mstore","nativeSrc":"2095:6:69","nodeType":"YulIdentifier","src":"2095:6:69"},"nativeSrc":"2095:37:69","nodeType":"YulFunctionCall","src":"2095:37:69"},"nativeSrc":"2095:37:69","nodeType":"YulExpressionStatement","src":"2095:37:69"}]},"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"2020:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2073:5:69","nodeType":"YulTypedName","src":"2073:5:69","type":""},{"name":"pos","nativeSrc":"2080:3:69","nodeType":"YulTypedName","src":"2080:3:69","type":""}],"src":"2020:118:69"},{"body":{"nativeSrc":"2242:124:69","nodeType":"YulBlock","src":"2242:124:69","statements":[{"nativeSrc":"2252:26:69","nodeType":"YulAssignment","src":"2252:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"2264:9:69","nodeType":"YulIdentifier","src":"2264:9:69"},{"kind":"number","nativeSrc":"2275:2:69","nodeType":"YulLiteral","src":"2275:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2260:3:69","nodeType":"YulIdentifier","src":"2260:3:69"},"nativeSrc":"2260:18:69","nodeType":"YulFunctionCall","src":"2260:18:69"},"variableNames":[{"name":"tail","nativeSrc":"2252:4:69","nodeType":"YulIdentifier","src":"2252:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"2332:6:69","nodeType":"YulIdentifier","src":"2332:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"2345:9:69","nodeType":"YulIdentifier","src":"2345:9:69"},{"kind":"number","nativeSrc":"2356:1:69","nodeType":"YulLiteral","src":"2356:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"2341:3:69","nodeType":"YulIdentifier","src":"2341:3:69"},"nativeSrc":"2341:17:69","nodeType":"YulFunctionCall","src":"2341:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"2288:43:69","nodeType":"YulIdentifier","src":"2288:43:69"},"nativeSrc":"2288:71:69","nodeType":"YulFunctionCall","src":"2288:71:69"},"nativeSrc":"2288:71:69","nodeType":"YulExpressionStatement","src":"2288:71:69"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"2144:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2214:9:69","nodeType":"YulTypedName","src":"2214:9:69","type":""},{"name":"value0","nativeSrc":"2226:6:69","nodeType":"YulTypedName","src":"2226:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2237:4:69","nodeType":"YulTypedName","src":"2237:4:69","type":""}],"src":"2144:222:69"},{"body":{"nativeSrc":"2415:43:69","nodeType":"YulBlock","src":"2415:43:69","statements":[{"nativeSrc":"2425:27:69","nodeType":"YulAssignment","src":"2425:27:69","value":{"arguments":[{"name":"value","nativeSrc":"2440:5:69","nodeType":"YulIdentifier","src":"2440:5:69"},{"kind":"number","nativeSrc":"2447:4:69","nodeType":"YulLiteral","src":"2447:4:69","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"2436:3:69","nodeType":"YulIdentifier","src":"2436:3:69"},"nativeSrc":"2436:16:69","nodeType":"YulFunctionCall","src":"2436:16:69"},"variableNames":[{"name":"cleaned","nativeSrc":"2425:7:69","nodeType":"YulIdentifier","src":"2425:7:69"}]}]},"name":"cleanup_t_uint8","nativeSrc":"2372:86:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2397:5:69","nodeType":"YulTypedName","src":"2397:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"2407:7:69","nodeType":"YulTypedName","src":"2407:7:69","type":""}],"src":"2372:86:69"},{"body":{"nativeSrc":"2525:51:69","nodeType":"YulBlock","src":"2525:51:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"2542:3:69","nodeType":"YulIdentifier","src":"2542:3:69"},{"arguments":[{"name":"value","nativeSrc":"2563:5:69","nodeType":"YulIdentifier","src":"2563:5:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"2547:15:69","nodeType":"YulIdentifier","src":"2547:15:69"},"nativeSrc":"2547:22:69","nodeType":"YulFunctionCall","src":"2547:22:69"}],"functionName":{"name":"mstore","nativeSrc":"2535:6:69","nodeType":"YulIdentifier","src":"2535:6:69"},"nativeSrc":"2535:35:69","nodeType":"YulFunctionCall","src":"2535:35:69"},"nativeSrc":"2535:35:69","nodeType":"YulExpressionStatement","src":"2535:35:69"}]},"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"2464:112:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2513:5:69","nodeType":"YulTypedName","src":"2513:5:69","type":""},{"name":"pos","nativeSrc":"2520:3:69","nodeType":"YulTypedName","src":"2520:3:69","type":""}],"src":"2464:112:69"},{"body":{"nativeSrc":"2676:120:69","nodeType":"YulBlock","src":"2676:120:69","statements":[{"nativeSrc":"2686:26:69","nodeType":"YulAssignment","src":"2686:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"2698:9:69","nodeType":"YulIdentifier","src":"2698:9:69"},{"kind":"number","nativeSrc":"2709:2:69","nodeType":"YulLiteral","src":"2709:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2694:3:69","nodeType":"YulIdentifier","src":"2694:3:69"},"nativeSrc":"2694:18:69","nodeType":"YulFunctionCall","src":"2694:18:69"},"variableNames":[{"name":"tail","nativeSrc":"2686:4:69","nodeType":"YulIdentifier","src":"2686:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"2762:6:69","nodeType":"YulIdentifier","src":"2762:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"2775:9:69","nodeType":"YulIdentifier","src":"2775:9:69"},{"kind":"number","nativeSrc":"2786:1:69","nodeType":"YulLiteral","src":"2786:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"2771:3:69","nodeType":"YulIdentifier","src":"2771:3:69"},"nativeSrc":"2771:17:69","nodeType":"YulFunctionCall","src":"2771:17:69"}],"functionName":{"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"2722:39:69","nodeType":"YulIdentifier","src":"2722:39:69"},"nativeSrc":"2722:67:69","nodeType":"YulFunctionCall","src":"2722:67:69"},"nativeSrc":"2722:67:69","nodeType":"YulExpressionStatement","src":"2722:67:69"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nativeSrc":"2582:214:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2648:9:69","nodeType":"YulTypedName","src":"2648:9:69","type":""},{"name":"value0","nativeSrc":"2660:6:69","nodeType":"YulTypedName","src":"2660:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2671:4:69","nodeType":"YulTypedName","src":"2671:4:69","type":""}],"src":"2582:214:69"},{"body":{"nativeSrc":"2834:28:69","nodeType":"YulBlock","src":"2834:28:69","statements":[{"nativeSrc":"2844:12:69","nodeType":"YulAssignment","src":"2844:12:69","value":{"name":"value","nativeSrc":"2851:5:69","nodeType":"YulIdentifier","src":"2851:5:69"},"variableNames":[{"name":"ret","nativeSrc":"2844:3:69","nodeType":"YulIdentifier","src":"2844:3:69"}]}]},"name":"identity","nativeSrc":"2802:60:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2820:5:69","nodeType":"YulTypedName","src":"2820:5:69","type":""}],"returnVariables":[{"name":"ret","nativeSrc":"2830:3:69","nodeType":"YulTypedName","src":"2830:3:69","type":""}],"src":"2802:60:69"},{"body":{"nativeSrc":"2928:82:69","nodeType":"YulBlock","src":"2928:82:69","statements":[{"nativeSrc":"2938:66:69","nodeType":"YulAssignment","src":"2938:66:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"2996:5:69","nodeType":"YulIdentifier","src":"2996:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"2978:17:69","nodeType":"YulIdentifier","src":"2978:17:69"},"nativeSrc":"2978:24:69","nodeType":"YulFunctionCall","src":"2978:24:69"}],"functionName":{"name":"identity","nativeSrc":"2969:8:69","nodeType":"YulIdentifier","src":"2969:8:69"},"nativeSrc":"2969:34:69","nodeType":"YulFunctionCall","src":"2969:34:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"2951:17:69","nodeType":"YulIdentifier","src":"2951:17:69"},"nativeSrc":"2951:53:69","nodeType":"YulFunctionCall","src":"2951:53:69"},"variableNames":[{"name":"converted","nativeSrc":"2938:9:69","nodeType":"YulIdentifier","src":"2938:9:69"}]}]},"name":"convert_t_uint160_to_t_uint160","nativeSrc":"2868:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2908:5:69","nodeType":"YulTypedName","src":"2908:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"2918:9:69","nodeType":"YulTypedName","src":"2918:9:69","type":""}],"src":"2868:142:69"},{"body":{"nativeSrc":"3076:66:69","nodeType":"YulBlock","src":"3076:66:69","statements":[{"nativeSrc":"3086:50:69","nodeType":"YulAssignment","src":"3086:50:69","value":{"arguments":[{"name":"value","nativeSrc":"3130:5:69","nodeType":"YulIdentifier","src":"3130:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_uint160","nativeSrc":"3099:30:69","nodeType":"YulIdentifier","src":"3099:30:69"},"nativeSrc":"3099:37:69","nodeType":"YulFunctionCall","src":"3099:37:69"},"variableNames":[{"name":"converted","nativeSrc":"3086:9:69","nodeType":"YulIdentifier","src":"3086:9:69"}]}]},"name":"convert_t_uint160_to_t_address","nativeSrc":"3016:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3056:5:69","nodeType":"YulTypedName","src":"3056:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"3066:9:69","nodeType":"YulTypedName","src":"3066:9:69","type":""}],"src":"3016:126:69"},{"body":{"nativeSrc":"3237:66:69","nodeType":"YulBlock","src":"3237:66:69","statements":[{"nativeSrc":"3247:50:69","nodeType":"YulAssignment","src":"3247:50:69","value":{"arguments":[{"name":"value","nativeSrc":"3291:5:69","nodeType":"YulIdentifier","src":"3291:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"3260:30:69","nodeType":"YulIdentifier","src":"3260:30:69"},"nativeSrc":"3260:37:69","nodeType":"YulFunctionCall","src":"3260:37:69"},"variableNames":[{"name":"converted","nativeSrc":"3247:9:69","nodeType":"YulIdentifier","src":"3247:9:69"}]}]},"name":"convert_t_contract$_ComptrollerInterface_$9353_to_t_address","nativeSrc":"3148:155:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3217:5:69","nodeType":"YulTypedName","src":"3217:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"3227:9:69","nodeType":"YulTypedName","src":"3227:9:69","type":""}],"src":"3148:155:69"},{"body":{"nativeSrc":"3403:95:69","nodeType":"YulBlock","src":"3403:95:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"3420:3:69","nodeType":"YulIdentifier","src":"3420:3:69"},{"arguments":[{"name":"value","nativeSrc":"3485:5:69","nodeType":"YulIdentifier","src":"3485:5:69"}],"functionName":{"name":"convert_t_contract$_ComptrollerInterface_$9353_to_t_address","nativeSrc":"3425:59:69","nodeType":"YulIdentifier","src":"3425:59:69"},"nativeSrc":"3425:66:69","nodeType":"YulFunctionCall","src":"3425:66:69"}],"functionName":{"name":"mstore","nativeSrc":"3413:6:69","nodeType":"YulIdentifier","src":"3413:6:69"},"nativeSrc":"3413:79:69","nodeType":"YulFunctionCall","src":"3413:79:69"},"nativeSrc":"3413:79:69","nodeType":"YulExpressionStatement","src":"3413:79:69"}]},"name":"abi_encode_t_contract$_ComptrollerInterface_$9353_to_t_address_fromStack","nativeSrc":"3309:189:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3391:5:69","nodeType":"YulTypedName","src":"3391:5:69","type":""},{"name":"pos","nativeSrc":"3398:3:69","nodeType":"YulTypedName","src":"3398:3:69","type":""}],"src":"3309:189:69"},{"body":{"nativeSrc":"3631:153:69","nodeType":"YulBlock","src":"3631:153:69","statements":[{"nativeSrc":"3641:26:69","nodeType":"YulAssignment","src":"3641:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"3653:9:69","nodeType":"YulIdentifier","src":"3653:9:69"},{"kind":"number","nativeSrc":"3664:2:69","nodeType":"YulLiteral","src":"3664:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3649:3:69","nodeType":"YulIdentifier","src":"3649:3:69"},"nativeSrc":"3649:18:69","nodeType":"YulFunctionCall","src":"3649:18:69"},"variableNames":[{"name":"tail","nativeSrc":"3641:4:69","nodeType":"YulIdentifier","src":"3641:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"3750:6:69","nodeType":"YulIdentifier","src":"3750:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"3763:9:69","nodeType":"YulIdentifier","src":"3763:9:69"},{"kind":"number","nativeSrc":"3774:1:69","nodeType":"YulLiteral","src":"3774:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"3759:3:69","nodeType":"YulIdentifier","src":"3759:3:69"},"nativeSrc":"3759:17:69","nodeType":"YulFunctionCall","src":"3759:17:69"}],"functionName":{"name":"abi_encode_t_contract$_ComptrollerInterface_$9353_to_t_address_fromStack","nativeSrc":"3677:72:69","nodeType":"YulIdentifier","src":"3677:72:69"},"nativeSrc":"3677:100:69","nodeType":"YulFunctionCall","src":"3677:100:69"},"nativeSrc":"3677:100:69","nodeType":"YulExpressionStatement","src":"3677:100:69"}]},"name":"abi_encode_tuple_t_contract$_ComptrollerInterface_$9353__to_t_address__fromStack_reversed","nativeSrc":"3504:280:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3603:9:69","nodeType":"YulTypedName","src":"3603:9:69","type":""},{"name":"value0","nativeSrc":"3615:6:69","nodeType":"YulTypedName","src":"3615:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3626:4:69","nodeType":"YulTypedName","src":"3626:4:69","type":""}],"src":"3504:280:69"},{"body":{"nativeSrc":"3843:51:69","nodeType":"YulBlock","src":"3843:51:69","statements":[{"nativeSrc":"3853:35:69","nodeType":"YulAssignment","src":"3853:35:69","value":{"arguments":[{"name":"value","nativeSrc":"3882:5:69","nodeType":"YulIdentifier","src":"3882:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"3864:17:69","nodeType":"YulIdentifier","src":"3864:17:69"},"nativeSrc":"3864:24:69","nodeType":"YulFunctionCall","src":"3864:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"3853:7:69","nodeType":"YulIdentifier","src":"3853:7:69"}]}]},"name":"cleanup_t_address_payable","nativeSrc":"3790:104:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3825:5:69","nodeType":"YulTypedName","src":"3825:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"3835:7:69","nodeType":"YulTypedName","src":"3835:7:69","type":""}],"src":"3790:104:69"},{"body":{"nativeSrc":"3981:61:69","nodeType":"YulBlock","src":"3981:61:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"3998:3:69","nodeType":"YulIdentifier","src":"3998:3:69"},{"arguments":[{"name":"value","nativeSrc":"4029:5:69","nodeType":"YulIdentifier","src":"4029:5:69"}],"functionName":{"name":"cleanup_t_address_payable","nativeSrc":"4003:25:69","nodeType":"YulIdentifier","src":"4003:25:69"},"nativeSrc":"4003:32:69","nodeType":"YulFunctionCall","src":"4003:32:69"}],"functionName":{"name":"mstore","nativeSrc":"3991:6:69","nodeType":"YulIdentifier","src":"3991:6:69"},"nativeSrc":"3991:45:69","nodeType":"YulFunctionCall","src":"3991:45:69"},"nativeSrc":"3991:45:69","nodeType":"YulExpressionStatement","src":"3991:45:69"}]},"name":"abi_encode_t_address_payable_to_t_address_payable_fromStack","nativeSrc":"3900:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3969:5:69","nodeType":"YulTypedName","src":"3969:5:69","type":""},{"name":"pos","nativeSrc":"3976:3:69","nodeType":"YulTypedName","src":"3976:3:69","type":""}],"src":"3900:142:69"},{"body":{"nativeSrc":"4162:140:69","nodeType":"YulBlock","src":"4162:140:69","statements":[{"nativeSrc":"4172:26:69","nodeType":"YulAssignment","src":"4172:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"4184:9:69","nodeType":"YulIdentifier","src":"4184:9:69"},{"kind":"number","nativeSrc":"4195:2:69","nodeType":"YulLiteral","src":"4195:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4180:3:69","nodeType":"YulIdentifier","src":"4180:3:69"},"nativeSrc":"4180:18:69","nodeType":"YulFunctionCall","src":"4180:18:69"},"variableNames":[{"name":"tail","nativeSrc":"4172:4:69","nodeType":"YulIdentifier","src":"4172:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"4268:6:69","nodeType":"YulIdentifier","src":"4268:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"4281:9:69","nodeType":"YulIdentifier","src":"4281:9:69"},{"kind":"number","nativeSrc":"4292:1:69","nodeType":"YulLiteral","src":"4292:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4277:3:69","nodeType":"YulIdentifier","src":"4277:3:69"},"nativeSrc":"4277:17:69","nodeType":"YulFunctionCall","src":"4277:17:69"}],"functionName":{"name":"abi_encode_t_address_payable_to_t_address_payable_fromStack","nativeSrc":"4208:59:69","nodeType":"YulIdentifier","src":"4208:59:69"},"nativeSrc":"4208:87:69","nodeType":"YulFunctionCall","src":"4208:87:69"},"nativeSrc":"4208:87:69","nodeType":"YulExpressionStatement","src":"4208:87:69"}]},"name":"abi_encode_tuple_t_address_payable__to_t_address_payable__fromStack_reversed","nativeSrc":"4048:254:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4134:9:69","nodeType":"YulTypedName","src":"4134:9:69","type":""},{"name":"value0","nativeSrc":"4146:6:69","nodeType":"YulTypedName","src":"4146:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4157:4:69","nodeType":"YulTypedName","src":"4157:4:69","type":""}],"src":"4048:254:69"},{"body":{"nativeSrc":"4395:66:69","nodeType":"YulBlock","src":"4395:66:69","statements":[{"nativeSrc":"4405:50:69","nodeType":"YulAssignment","src":"4405:50:69","value":{"arguments":[{"name":"value","nativeSrc":"4449:5:69","nodeType":"YulIdentifier","src":"4449:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"4418:30:69","nodeType":"YulIdentifier","src":"4418:30:69"},"nativeSrc":"4418:37:69","nodeType":"YulFunctionCall","src":"4418:37:69"},"variableNames":[{"name":"converted","nativeSrc":"4405:9:69","nodeType":"YulIdentifier","src":"4405:9:69"}]}]},"name":"convert_t_contract$_InterestRateModel_$10266_to_t_address","nativeSrc":"4308:153:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4375:5:69","nodeType":"YulTypedName","src":"4375:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"4385:9:69","nodeType":"YulTypedName","src":"4385:9:69","type":""}],"src":"4308:153:69"},{"body":{"nativeSrc":"4559:93:69","nodeType":"YulBlock","src":"4559:93:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"4576:3:69","nodeType":"YulIdentifier","src":"4576:3:69"},{"arguments":[{"name":"value","nativeSrc":"4639:5:69","nodeType":"YulIdentifier","src":"4639:5:69"}],"functionName":{"name":"convert_t_contract$_InterestRateModel_$10266_to_t_address","nativeSrc":"4581:57:69","nodeType":"YulIdentifier","src":"4581:57:69"},"nativeSrc":"4581:64:69","nodeType":"YulFunctionCall","src":"4581:64:69"}],"functionName":{"name":"mstore","nativeSrc":"4569:6:69","nodeType":"YulIdentifier","src":"4569:6:69"},"nativeSrc":"4569:77:69","nodeType":"YulFunctionCall","src":"4569:77:69"},"nativeSrc":"4569:77:69","nodeType":"YulExpressionStatement","src":"4569:77:69"}]},"name":"abi_encode_t_contract$_InterestRateModel_$10266_to_t_address_fromStack","nativeSrc":"4467:185:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4547:5:69","nodeType":"YulTypedName","src":"4547:5:69","type":""},{"name":"pos","nativeSrc":"4554:3:69","nodeType":"YulTypedName","src":"4554:3:69","type":""}],"src":"4467:185:69"},{"body":{"nativeSrc":"4783:151:69","nodeType":"YulBlock","src":"4783:151:69","statements":[{"nativeSrc":"4793:26:69","nodeType":"YulAssignment","src":"4793:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"4805:9:69","nodeType":"YulIdentifier","src":"4805:9:69"},{"kind":"number","nativeSrc":"4816:2:69","nodeType":"YulLiteral","src":"4816:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4801:3:69","nodeType":"YulIdentifier","src":"4801:3:69"},"nativeSrc":"4801:18:69","nodeType":"YulFunctionCall","src":"4801:18:69"},"variableNames":[{"name":"tail","nativeSrc":"4793:4:69","nodeType":"YulIdentifier","src":"4793:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"4900:6:69","nodeType":"YulIdentifier","src":"4900:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"4913:9:69","nodeType":"YulIdentifier","src":"4913:9:69"},{"kind":"number","nativeSrc":"4924:1:69","nodeType":"YulLiteral","src":"4924:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4909:3:69","nodeType":"YulIdentifier","src":"4909:3:69"},"nativeSrc":"4909:17:69","nodeType":"YulFunctionCall","src":"4909:17:69"}],"functionName":{"name":"abi_encode_t_contract$_InterestRateModel_$10266_to_t_address_fromStack","nativeSrc":"4829:70:69","nodeType":"YulIdentifier","src":"4829:70:69"},"nativeSrc":"4829:98:69","nodeType":"YulFunctionCall","src":"4829:98:69"},"nativeSrc":"4829:98:69","nodeType":"YulExpressionStatement","src":"4829:98:69"}]},"name":"abi_encode_tuple_t_contract$_InterestRateModel_$10266__to_t_address__fromStack_reversed","nativeSrc":"4658:276:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4755:9:69","nodeType":"YulTypedName","src":"4755:9:69","type":""},{"name":"value0","nativeSrc":"4767:6:69","nodeType":"YulTypedName","src":"4767:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4778:4:69","nodeType":"YulTypedName","src":"4778:4:69","type":""}],"src":"4658:276:69"},{"body":{"nativeSrc":"4968:152:69","nodeType":"YulBlock","src":"4968:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4985:1:69","nodeType":"YulLiteral","src":"4985:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"4988:77:69","nodeType":"YulLiteral","src":"4988:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"4978:6:69","nodeType":"YulIdentifier","src":"4978:6:69"},"nativeSrc":"4978:88:69","nodeType":"YulFunctionCall","src":"4978:88:69"},"nativeSrc":"4978:88:69","nodeType":"YulExpressionStatement","src":"4978:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"5082:1:69","nodeType":"YulLiteral","src":"5082:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"5085:4:69","nodeType":"YulLiteral","src":"5085:4:69","type":"","value":"0x22"}],"functionName":{"name":"mstore","nativeSrc":"5075:6:69","nodeType":"YulIdentifier","src":"5075:6:69"},"nativeSrc":"5075:15:69","nodeType":"YulFunctionCall","src":"5075:15:69"},"nativeSrc":"5075:15:69","nodeType":"YulExpressionStatement","src":"5075:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"5106:1:69","nodeType":"YulLiteral","src":"5106:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"5109:4:69","nodeType":"YulLiteral","src":"5109:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"5099:6:69","nodeType":"YulIdentifier","src":"5099:6:69"},"nativeSrc":"5099:15:69","nodeType":"YulFunctionCall","src":"5099:15:69"},"nativeSrc":"5099:15:69","nodeType":"YulExpressionStatement","src":"5099:15:69"}]},"name":"panic_error_0x22","nativeSrc":"4940:180:69","nodeType":"YulFunctionDefinition","src":"4940:180:69"},{"body":{"nativeSrc":"5177:269:69","nodeType":"YulBlock","src":"5177:269:69","statements":[{"nativeSrc":"5187:22:69","nodeType":"YulAssignment","src":"5187:22:69","value":{"arguments":[{"name":"data","nativeSrc":"5201:4:69","nodeType":"YulIdentifier","src":"5201:4:69"},{"kind":"number","nativeSrc":"5207:1:69","nodeType":"YulLiteral","src":"5207:1:69","type":"","value":"2"}],"functionName":{"name":"div","nativeSrc":"5197:3:69","nodeType":"YulIdentifier","src":"5197:3:69"},"nativeSrc":"5197:12:69","nodeType":"YulFunctionCall","src":"5197:12:69"},"variableNames":[{"name":"length","nativeSrc":"5187:6:69","nodeType":"YulIdentifier","src":"5187:6:69"}]},{"nativeSrc":"5218:38:69","nodeType":"YulVariableDeclaration","src":"5218:38:69","value":{"arguments":[{"name":"data","nativeSrc":"5248:4:69","nodeType":"YulIdentifier","src":"5248:4:69"},{"kind":"number","nativeSrc":"5254:1:69","nodeType":"YulLiteral","src":"5254:1:69","type":"","value":"1"}],"functionName":{"name":"and","nativeSrc":"5244:3:69","nodeType":"YulIdentifier","src":"5244:3:69"},"nativeSrc":"5244:12:69","nodeType":"YulFunctionCall","src":"5244:12:69"},"variables":[{"name":"outOfPlaceEncoding","nativeSrc":"5222:18:69","nodeType":"YulTypedName","src":"5222:18:69","type":""}]},{"body":{"nativeSrc":"5295:51:69","nodeType":"YulBlock","src":"5295:51:69","statements":[{"nativeSrc":"5309:27:69","nodeType":"YulAssignment","src":"5309:27:69","value":{"arguments":[{"name":"length","nativeSrc":"5323:6:69","nodeType":"YulIdentifier","src":"5323:6:69"},{"kind":"number","nativeSrc":"5331:4:69","nodeType":"YulLiteral","src":"5331:4:69","type":"","value":"0x7f"}],"functionName":{"name":"and","nativeSrc":"5319:3:69","nodeType":"YulIdentifier","src":"5319:3:69"},"nativeSrc":"5319:17:69","nodeType":"YulFunctionCall","src":"5319:17:69"},"variableNames":[{"name":"length","nativeSrc":"5309:6:69","nodeType":"YulIdentifier","src":"5309:6:69"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nativeSrc":"5275:18:69","nodeType":"YulIdentifier","src":"5275:18:69"}],"functionName":{"name":"iszero","nativeSrc":"5268:6:69","nodeType":"YulIdentifier","src":"5268:6:69"},"nativeSrc":"5268:26:69","nodeType":"YulFunctionCall","src":"5268:26:69"},"nativeSrc":"5265:81:69","nodeType":"YulIf","src":"5265:81:69"},{"body":{"nativeSrc":"5398:42:69","nodeType":"YulBlock","src":"5398:42:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x22","nativeSrc":"5412:16:69","nodeType":"YulIdentifier","src":"5412:16:69"},"nativeSrc":"5412:18:69","nodeType":"YulFunctionCall","src":"5412:18:69"},"nativeSrc":"5412:18:69","nodeType":"YulExpressionStatement","src":"5412:18:69"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nativeSrc":"5362:18:69","nodeType":"YulIdentifier","src":"5362:18:69"},{"arguments":[{"name":"length","nativeSrc":"5385:6:69","nodeType":"YulIdentifier","src":"5385:6:69"},{"kind":"number","nativeSrc":"5393:2:69","nodeType":"YulLiteral","src":"5393:2:69","type":"","value":"32"}],"functionName":{"name":"lt","nativeSrc":"5382:2:69","nodeType":"YulIdentifier","src":"5382:2:69"},"nativeSrc":"5382:14:69","nodeType":"YulFunctionCall","src":"5382:14:69"}],"functionName":{"name":"eq","nativeSrc":"5359:2:69","nodeType":"YulIdentifier","src":"5359:2:69"},"nativeSrc":"5359:38:69","nodeType":"YulFunctionCall","src":"5359:38:69"},"nativeSrc":"5356:84:69","nodeType":"YulIf","src":"5356:84:69"}]},"name":"extract_byte_array_length","nativeSrc":"5126:320:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nativeSrc":"5161:4:69","nodeType":"YulTypedName","src":"5161:4:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"5170:6:69","nodeType":"YulTypedName","src":"5170:6:69","type":""}],"src":"5126:320:69"}]},"contents":"{\n\n    function array_length_t_string_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function copy_memory_to_memory_with_cleanup(src, dst, length) {\n\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n        let length := array_length_t_string_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0,  tail)\n\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint256(value))\n    }\n\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function cleanup_t_uint8(value) -> cleaned {\n        cleaned := and(value, 0xff)\n    }\n\n    function abi_encode_t_uint8_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint8_to_t_uint8_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function identity(value) -> ret {\n        ret := value\n    }\n\n    function convert_t_uint160_to_t_uint160(value) -> converted {\n        converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n    }\n\n    function convert_t_uint160_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_uint160(value)\n    }\n\n    function convert_t_contract$_ComptrollerInterface_$9353_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_ComptrollerInterface_$9353_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_ComptrollerInterface_$9353_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_ComptrollerInterface_$9353__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_ComptrollerInterface_$9353_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function cleanup_t_address_payable(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function abi_encode_t_address_payable_to_t_address_payable_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address_payable(value))\n    }\n\n    function abi_encode_tuple_t_address_payable__to_t_address_payable__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_address_payable_to_t_address_payable_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function convert_t_contract$_InterestRateModel_$10266_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_InterestRateModel_$10266_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_InterestRateModel_$10266_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_InterestRateModel_$10266__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_InterestRateModel_$10266_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function panic_error_0x22() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x22)\n        revert(0, 0x24)\n    }\n\n    function extract_byte_array_length(data) -> length {\n        length := div(data, 2)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) {\n            length := and(length, 0x7f)\n        }\n\n        if eq(outOfPlaceEncoding, lt(length, 32)) {\n            panic_error_0x22()\n        }\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106101165760003560e01c80636f307dc3116100a2578063ae96f14111610071578063ae96f141146101ff578063bbcac55714610208578063d1109c2f14610211578063e9a44fd91461021a578063f3fdb15a1461023257600080fd5b80636f307dc3146101cd5780638f840ddd146101e557806395d89b41146101ee578063aa5af0fd146101f657600080fd5b8063313ce567116100e9578063313ce5671461017857806347bd3718146101925780635fe3b5671461019b5780636752e702146101bb5780636c540baf146101c457600080fd5b806306fdde031461011b578063173b99041461013957806318160ddd1461014f57806319b1faef14610158575b600080fd5b610123610245565b6040516101309190610336565b60405180910390f35b61014260075481565b6040516101309190610356565b610142600c5481565b60125461016b906001600160a01b031681565b6040516101309190610384565b6003546101859060ff1681565b604051610130919061039b565b610142600a5481565b6004546101ae906001600160a01b031681565b60405161013091906103c8565b61014260115481565b61014260085481565b60005461016b9061010090046001600160a01b031681565b610142600b5481565b6101236102d3565b61014260095481565b61014260145481565b610142600d5481565b61014260135481565b60035461016b9061010090046001600160a01b031681565b6005546101ae906001600160a01b031681565b60018054610252906103ec565b80601f016020809104026020016040519081016040528092919081815260200182805461027e906103ec565b80156102cb5780601f106102a0576101008083540402835291602001916102cb565b820191906000526020600020905b8154815290600101906020018083116102ae57829003601f168201915b505050505081565b60028054610252906103ec565b60005b838110156102fb5781810151838201526020016102e3565b50506000910152565b600061030e825190565b8084526020840193506103258185602086016102e0565b601f01601f19169290920192915050565b602080825281016103478184610304565b9392505050565b805b82525050565b60208101610364828461034e565b92915050565b60006001600160a01b038216610364565b6103508161036a565b60208101610364828461037b565b60ff8116610350565b602081016103648284610392565b60006103648261036a565b6000610364826103a9565b610350816103b4565b6020810161036482846103bf565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061040057607f821691505b602082108103610412576104126103d6565b5091905056fea2646970667358221220559a1178c01bb526daf8b603e4c4f497b143a873385e73229b569680c0d6137964736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x116 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6F307DC3 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xAE96F141 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xAE96F141 EQ PUSH2 0x1FF JUMPI DUP1 PUSH4 0xBBCAC557 EQ PUSH2 0x208 JUMPI DUP1 PUSH4 0xD1109C2F EQ PUSH2 0x211 JUMPI DUP1 PUSH4 0xE9A44FD9 EQ PUSH2 0x21A JUMPI DUP1 PUSH4 0xF3FDB15A EQ PUSH2 0x232 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6F307DC3 EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0x8F840DDD EQ PUSH2 0x1E5 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1EE JUMPI DUP1 PUSH4 0xAA5AF0FD EQ PUSH2 0x1F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x178 JUMPI DUP1 PUSH4 0x47BD3718 EQ PUSH2 0x192 JUMPI DUP1 PUSH4 0x5FE3B567 EQ PUSH2 0x19B JUMPI DUP1 PUSH4 0x6752E702 EQ PUSH2 0x1BB JUMPI DUP1 PUSH4 0x6C540BAF EQ PUSH2 0x1C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x11B JUMPI DUP1 PUSH4 0x173B9904 EQ PUSH2 0x139 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x14F JUMPI DUP1 PUSH4 0x19B1FAEF EQ PUSH2 0x158 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x123 PUSH2 0x245 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x130 SWAP2 SWAP1 PUSH2 0x336 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x142 PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x130 SWAP2 SWAP1 PUSH2 0x356 JUMP JUMPDEST PUSH2 0x142 PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH2 0x16B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x130 SWAP2 SWAP1 PUSH2 0x384 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x185 SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x130 SWAP2 SWAP1 PUSH2 0x39B JUMP JUMPDEST PUSH2 0x142 PUSH1 0xA SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x1AE SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x130 SWAP2 SWAP1 PUSH2 0x3C8 JUMP JUMPDEST PUSH2 0x142 PUSH1 0x11 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x142 PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x16B SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x142 PUSH1 0xB SLOAD DUP2 JUMP JUMPDEST PUSH2 0x123 PUSH2 0x2D3 JUMP JUMPDEST PUSH2 0x142 PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x142 PUSH1 0x14 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x142 PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH2 0x142 PUSH1 0x13 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x16B SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x1AE SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0x252 SWAP1 PUSH2 0x3EC JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x27E SWAP1 PUSH2 0x3EC JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2CB JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2A0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2CB JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2AE JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH2 0x252 SWAP1 PUSH2 0x3EC JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2FB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2E3 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x30E DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x325 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x2E0 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x347 DUP2 DUP5 PUSH2 0x304 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x364 DUP3 DUP5 PUSH2 0x34E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x364 JUMP JUMPDEST PUSH2 0x350 DUP2 PUSH2 0x36A JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x364 DUP3 DUP5 PUSH2 0x37B JUMP JUMPDEST PUSH1 0xFF DUP2 AND PUSH2 0x350 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x364 DUP3 DUP5 PUSH2 0x392 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x364 DUP3 PUSH2 0x36A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x364 DUP3 PUSH2 0x3A9 JUMP JUMPDEST PUSH2 0x350 DUP2 PUSH2 0x3B4 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x364 DUP3 DUP5 PUSH2 0x3BF JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP2 DIV PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x400 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x412 JUMPI PUSH2 0x412 PUSH2 0x3D6 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SSTORE SWAP11 GT PUSH25 0xC01BB526DAF8B603E4C4F497B143A873385E73229B569680C0 0xD6 SGT PUSH26 0x64736F6C63430008190033000000000000000000000000000000 ","sourceMap":"561:3460:39:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1226:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2054:36;;;;;;;;;;;;;:::i;2705:26::-;;;;;;3416:24;;;;;-1:-1:-1;;;;;3416:24:39;;;;;;;;;;:::i;1412:21::-;;;;;;;;;;;;;;;;:::i;2473:27::-;;;;;;1640:39;;;;;-1:-1:-1;;;;;1640:39:39;;;;;;;;;;:::i;3299:41::-;;;;;;2191:33;;;;;;1130:25;;;;;;;;-1:-1:-1;;;;;1130:25:39;;;2601:28;;;;;;1317:20;;;:::i;2340:26::-;;;;;;3687:40;;;;;;2798:22;;;;;;3544:39;;;;;;1511:43;;;;;;;;-1:-1:-1;;;;;1511:43:39;;;1776:42;;;;;-1:-1:-1;;;;;1776:42:39;;;1226:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1317:20::-;;;;;;;:::i;287:248:69:-;369:1;379:113;393:6;390:1;387:13;379:113;;;469:11;;;463:18;450:11;;;443:39;415:2;408:10;379:113;;;-1:-1:-1;;526:1:69;508:16;;501:27;287:248::o;649:377::-;737:3;765:39;798:5;87:12;;7:99;765:39;218:19;;;270:4;261:14;;813:78;;900:65;958:6;953:3;946:4;939:5;935:16;900:65;:::i;:::-;633:2;613:14;-1:-1:-1;;609:28:69;981:39;;;;;;-1:-1:-1;;649:377:69:o;1032:313::-;1183:2;1196:47;;;1168:18;;1260:78;1168:18;1324:6;1260:78;:::i;:::-;1252:86;1032:313;-1:-1:-1;;;1032:313:69:o;1434:118::-;1539:5;1521:24;1516:3;1509:37;1434:118;;:::o;1558:222::-;1689:2;1674:18;;1702:71;1678:9;1746:6;1702:71;:::i;:::-;1558:222;;;;:::o;1918:96::-;1955:7;-1:-1:-1;;;;;1852:54:69;;1984:24;1786:126;2020:118;2107:24;2125:5;2107:24;:::i;2144:222::-;2275:2;2260:18;;2288:71;2264:9;2332:6;2288:71;:::i;2464:112::-;2447:4;2436:16;;2547:22;2372:86;2582:214;2709:2;2694:18;;2722:67;2698:9;2762:6;2722:67;:::i;3016:126::-;3066:9;3099:37;3130:5;3099:37;:::i;3148:155::-;3227:9;3260:37;3291:5;3260:37;:::i;3309:189::-;3425:66;3485:5;3425:66;:::i;3504:280::-;3664:2;3649:18;;3677:100;3653:9;3750:6;3677:100;:::i;4940:180::-;-1:-1:-1;;;4985:1:69;4978:88;5085:4;5082:1;5075:15;5109:4;5106:1;5099:15;5126:320;5207:1;5197:12;;5254:1;5244:12;;;5265:81;;5331:4;5323:6;5319:17;5309:27;;5265:81;5393:2;5385:6;5382:14;5362:18;5359:38;5356:84;;5412:18;;:::i;:::-;5177:269;5126:320;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"220400","executionCost":"263","totalCost":"220663"},"external":{"accrualBlockNumber()":"2472","badDebt()":"2405","borrowIndex()":"2450","comptroller()":"infinite","decimals()":"2410","interestRateModel()":"infinite","name()":"infinite","protocolSeizeShareMantissa()":"2450","protocolShareReserve()":"infinite","reduceReservesBlockDelta()":"2427","reduceReservesBlockNumber()":"2383","reserveFactorMantissa()":"2407","shortfall()":"infinite","symbol()":"infinite","totalBorrows()":"2406","totalReserves()":"2406","totalSupply()":"2429","underlying()":"infinite"}},"methodIdentifiers":{"accrualBlockNumber()":"6c540baf","badDebt()":"bbcac557","borrowIndex()":"aa5af0fd","comptroller()":"5fe3b567","decimals()":"313ce567","interestRateModel()":"f3fdb15a","name()":"06fdde03","protocolSeizeShareMantissa()":"6752e702","protocolShareReserve()":"e9a44fd9","reduceReservesBlockDelta()":"d1109c2f","reduceReservesBlockNumber()":"ae96f141","reserveFactorMantissa()":"173b9904","shortfall()":"19b1faef","symbol()":"95d89b41","totalBorrows()":"47bd3718","totalReserves()":"8f840ddd","totalSupply()":"18160ddd","underlying()":"6f307dc3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"accrualBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"badDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"comptroller\",\"outputs\":[{\"internalType\":\"contract ComptrollerInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"interestRateModel\",\"outputs\":[{\"internalType\":\"contract InterestRateModel\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolSeizeShareMantissa\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolShareReserve\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reduceReservesBlockDelta\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reduceReservesBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reserveFactorMantissa\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shortfall\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBorrows\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlying\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"},\"_notEntered\":{\"details\":\"Guard variable for re-entrancy checks\"}},\"title\":\"VTokenStorage\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"accrualBlockNumber()\":{\"notice\":\"Slot(block or second) number that interest was last accrued at\"},\"badDebt()\":{\"notice\":\"Total bad debt of the market\"},\"borrowIndex()\":{\"notice\":\"Accumulator of the total earned interest rate since the opening of the market\"},\"comptroller()\":{\"notice\":\"Contract which oversees inter-vToken operations\"},\"decimals()\":{\"notice\":\"EIP-20 token decimals for this token\"},\"interestRateModel()\":{\"notice\":\"Model which tells what the current interest rate should be\"},\"name()\":{\"notice\":\"EIP-20 token name for this token\"},\"protocolSeizeShareMantissa()\":{\"notice\":\"Share of seized collateral that is added to reserves\"},\"protocolShareReserve()\":{\"notice\":\"Protocol share Reserve contract address\"},\"reduceReservesBlockDelta()\":{\"notice\":\"delta slot (block or second) after which reserves will be reduced\"},\"reduceReservesBlockNumber()\":{\"notice\":\"last slot (block or second) number at which reserves were reduced\"},\"reserveFactorMantissa()\":{\"notice\":\"Fraction of interest currently set aside for reserves\"},\"shortfall()\":{\"notice\":\"Storage of Shortfall contract address\"},\"symbol()\":{\"notice\":\"EIP-20 token symbol for this token\"},\"totalBorrows()\":{\"notice\":\"Total amount of outstanding borrows of the underlying in this market\"},\"totalReserves()\":{\"notice\":\"Total amount of reserves of the underlying held in this market\"},\"totalSupply()\":{\"notice\":\"Total number of tokens in circulation\"},\"underlying()\":{\"notice\":\"Underlying asset for this VToken\"}},\"notice\":\"Storage layout used by the `VToken` contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol\":\"VTokenStorage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./OwnableUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership} and {acceptOwnership}.\\n *\\n * This module is used through inheritance. It will make available all functions\\n * from parent (Ownable).\\n */\\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\\n    address private _pendingOwner;\\n\\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\\n\\n    function __Ownable2Step_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable2Step_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Returns the address of the pending owner.\\n     */\\n    function pendingOwner() public view virtual returns (address) {\\n        return _pendingOwner;\\n    }\\n\\n    /**\\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\\n        _pendingOwner = newOwner;\\n        emit OwnershipTransferStarted(owner(), newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual override {\\n        delete _pendingOwner;\\n        super._transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev The new owner accepts the ownership transfer.\\n     */\\n    function acceptOwnership() public virtual {\\n        address sender = _msgSender();\\n        require(pendingOwner() == sender, \\\"Ownable2Step: caller is not the new owner\\\");\\n        _transferOwnership(sender);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x9140dabc466abab21b48b72dbda26736b1183a310d0e677d3719d201df026510\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * ==== Security Considerations\\n *\\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\\n * generally recommended is:\\n *\\n * ```solidity\\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\\n *     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\\n *     doThing(..., value);\\n * }\\n *\\n * function doThing(..., uint256 value) public {\\n *     token.safeTransferFrom(msg.sender, address(this), value);\\n *     ...\\n * }\\n * ```\\n *\\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\\n * {SafeERC20-safeTransferFrom}).\\n *\\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\\n * contracts should have entry points that don't rely on permit.\\n */\\ninterface IERC20PermitUpgradeable {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     *\\n     * CAUTION: See Security Considerations above.\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x07e881de3b9f6d2c07909f193f24b96c7fe4ea60013260f3f25aecd8bab3c2f8\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\nimport \\\"../extensions/IERC20PermitUpgradeable.sol\\\";\\nimport \\\"../../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20Upgradeable {\\n    using AddressUpgradeable for address;\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransfer(IERC20Upgradeable token, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    /**\\n     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeIncreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        uint256 oldAllowance = token.allowance(address(this), spender);\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));\\n    }\\n\\n    /**\\n     * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeDecreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));\\n        }\\n    }\\n\\n    /**\\n     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n     * to be set to zero before setting it to a non-zero value, such as USDT.\\n     */\\n    function forceApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);\\n\\n        if (!_callOptionalReturnBool(token, approvalCall)) {\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));\\n            _callOptionalReturn(token, approvalCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.\\n     * Revert on invalid signature.\\n     */\\n    function safePermit(\\n        IERC20PermitUpgradeable token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20Upgradeable token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        require(returndata.length == 0 || abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     *\\n     * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\\n     */\\n    function _callOptionalReturnBool(IERC20Upgradeable token, bytes memory data) private returns (bool) {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\\n        // and not revert is the subcall reverts.\\n\\n        (bool success, bytes memory returndata) = address(token).call(data);\\n        return\\n            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && AddressUpgradeable.isContract(address(token));\\n    }\\n}\\n\",\"keccak256\":\"0x23b997be73d3dd46885262704f0f8cfc7273fdadfe303d37969a9561373972b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n    /**\\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n     *\\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n     * {RoleAdminChanged} not being emitted signaling this.\\n     *\\n     * _Available since v3.1._\\n     */\\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n    /**\\n     * @dev Emitted when `account` is granted `role`.\\n     *\\n     * `sender` is the account that originated the contract call, an admin role\\n     * bearer except when using {AccessControl-_setupRole}.\\n     */\\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Emitted when `account` is revoked `role`.\\n     *\\n     * `sender` is the account that originated the contract call:\\n     *   - if using `revokeRole`, it is the admin role bearer\\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n     */\\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Returns `true` if `account` has been granted `role`.\\n     */\\n    function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n    /**\\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\\n     * {revokeRole}.\\n     *\\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n     */\\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n    /**\\n     * @dev Grants `role` to `account`.\\n     *\\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function grantRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from `account`.\\n     *\\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function revokeRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from the calling account.\\n     *\\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n     * purpose is to provide a mechanism for accounts to lose their privileges\\n     * if they are compromised (such as when a trusted device is misplaced).\\n     *\\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must be `account`.\\n     */\\n    function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\n\\nimport \\\"./IAccessControlManagerV8.sol\\\";\\n\\n/**\\n * @title AccessControlledV8\\n * @author Venus\\n * @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\\n * to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\\n */\\nabstract contract AccessControlledV8 is Initializable, Ownable2StepUpgradeable {\\n    /// @notice Access control manager contract\\n    IAccessControlManagerV8 internal _accessControlManager;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when access control manager contract address is changed\\n    event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager);\\n\\n    /// @notice Thrown when the action is prohibited by AccessControlManager\\n    error Unauthorized(address sender, address calledContract, string methodSignature);\\n\\n    function __AccessControlled_init(address accessControlManager_) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n    }\\n\\n    function __AccessControlled_init_unchained(address accessControlManager_) internal onlyInitializing {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Sets the address of AccessControlManager\\n     * @dev Admin function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     * @custom:event Emits NewAccessControlManager event\\n     * @custom:access Only Governance\\n     */\\n    function setAccessControlManager(address accessControlManager_) external onlyOwner {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Returns the address of the access control manager contract\\n     */\\n    function accessControlManager() external view returns (IAccessControlManagerV8) {\\n        return _accessControlManager;\\n    }\\n\\n    /**\\n     * @dev Internal function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     */\\n    function _setAccessControlManager(address accessControlManager_) internal {\\n        require(address(accessControlManager_) != address(0), \\\"invalid acess control manager address\\\");\\n        address oldAccessControlManager = address(_accessControlManager);\\n        _accessControlManager = IAccessControlManagerV8(accessControlManager_);\\n        emit NewAccessControlManager(oldAccessControlManager, accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Reverts if the call is not allowed by AccessControlManager\\n     * @param signature Method signature\\n     */\\n    function _checkAccessAllowed(string memory signature) internal view {\\n        bool isAllowedToCall = _accessControlManager.isAllowedToCall(msg.sender, signature);\\n\\n        if (!isAllowedToCall) {\\n            revert Unauthorized(msg.sender, address(this), signature);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe0fd441c84ac907cabc88db69ef04f6d7532d770c7e6a1dfe6e7d6305debb49\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport \\\"@openzeppelin/contracts/access/IAccessControl.sol\\\";\\n\\n/**\\n * @title IAccessControlManagerV8\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\\n */\\ninterface IAccessControlManagerV8 is IAccessControl {\\n    function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n    function revokeCallPermission(\\n        address contractAddress,\\n        string calldata functionSig,\\n        address accountToRevoke\\n    ) external;\\n\\n    function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n    function hasPermission(\\n        address account,\\n        address contractAddress,\\n        string calldata functionSig\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xaa29b098440d0b3a131c5ecdf25ce548790c1b5ac7bf9b5c0264b6af6f7a1e0b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Comptroller.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\n\\nimport { ComptrollerInterface, Action } from \\\"./ComptrollerInterface.sol\\\";\\nimport { ComptrollerStorage } from \\\"./ComptrollerStorage.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"./MaxLoopsLimitHelper.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title Comptroller\\n * @author Venus\\n * @notice The Comptroller is designed to provide checks for all minting, redeeming, transferring, borrowing, lending, repaying, liquidating,\\n * and seizing done by the `vToken` contract. Each pool has one `Comptroller` checking these interactions across markets. When a user interacts\\n * with a given market by one of these main actions, a call is made to a corresponding hook in the associated `Comptroller`, which either allows\\n * or reverts the transaction. These hooks also update supply and borrow rewards as they are called. The comptroller holds the logic for assessing\\n * liquidity snapshots of an account via the collateral factor and liquidation threshold. This check determines the collateral needed for a borrow,\\n * as well as how much of a borrow may be liquidated. A user may borrow a portion of their collateral with the maximum amount determined by the\\n * markets collateral factor. However, if their borrowed amount exceeds an amount calculated using the market\\u2019s corresponding liquidation threshold,\\n * the borrow is eligible for liquidation.\\n *\\n * The `Comptroller` also includes two functions `liquidateAccount()` and `healAccount()`, which are meant to handle accounts that do not exceed\\n * the `minLiquidatableCollateral` for the `Comptroller`:\\n *\\n * - `healAccount()`: This function is called to seize all of a given user\\u2019s collateral, requiring the `msg.sender` repay a certain percentage\\n * of the debt calculated by `collateral/(borrows*liquidationIncentive)`. The function can only be called if the calculated percentage does not exceed\\n * 100%, because otherwise no `badDebt` would be created and `liquidateAccount()` should be used instead. The difference in the actual amount of debt\\n * and debt paid off is recorded as `badDebt` for each market, which can then be auctioned off for the risk reserves of the associated pool.\\n * - `liquidateAccount()`: This function can only be called if the collateral seized will cover all borrows of an account, as well as the liquidation\\n * incentive. Otherwise, the pool will incur bad debt, in which case the function `healAccount()` should be used instead. This function skips the logic\\n * verifying that the repay amount does not exceed the close factor.\\n */\\ncontract Comptroller is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    ComptrollerStorage,\\n    ComptrollerInterface,\\n    ExponentialNoError,\\n    MaxLoopsLimitHelper\\n{\\n    // PoolRegistry, immutable to save on gas\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    address public immutable poolRegistry;\\n\\n    /// @notice Emitted when an account enters a market\\n    event MarketEntered(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when an account exits a market\\n    event MarketExited(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when close factor is changed by admin\\n    event NewCloseFactor(uint256 oldCloseFactorMantissa, uint256 newCloseFactorMantissa);\\n\\n    /// @notice Emitted when a collateral factor is changed by admin\\n    event NewCollateralFactor(VToken vToken, uint256 oldCollateralFactorMantissa, uint256 newCollateralFactorMantissa);\\n\\n    /// @notice Emitted when liquidation threshold is changed by admin\\n    event NewLiquidationThreshold(\\n        VToken vToken,\\n        uint256 oldLiquidationThresholdMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    );\\n\\n    /// @notice Emitted when liquidation incentive is changed by admin\\n    event NewLiquidationIncentive(uint256 oldLiquidationIncentiveMantissa, uint256 newLiquidationIncentiveMantissa);\\n\\n    /// @notice Emitted when price oracle is changed\\n    event NewPriceOracle(ResilientOracleInterface oldPriceOracle, ResilientOracleInterface newPriceOracle);\\n\\n    /// @notice Emitted when an action is paused on a market\\n    event ActionPausedMarket(VToken vToken, Action action, bool pauseState);\\n\\n    /// @notice Emitted when borrow cap for a vToken is changed\\n    event NewBorrowCap(VToken indexed vToken, uint256 newBorrowCap);\\n\\n    /// @notice Emitted when the collateral threshold (in USD) for non-batch liquidations is changed\\n    event NewMinLiquidatableCollateral(uint256 oldMinLiquidatableCollateral, uint256 newMinLiquidatableCollateral);\\n\\n    /// @notice Emitted when supply cap for a vToken is changed\\n    event NewSupplyCap(VToken indexed vToken, uint256 newSupplyCap);\\n\\n    /// @notice Emitted when a rewards distributor is added\\n    event NewRewardsDistributor(address indexed rewardsDistributor, address indexed rewardToken);\\n\\n    /// @notice Emitted when a market is supported\\n    event MarketSupported(VToken vToken);\\n\\n    /// @notice Emitted when prime token contract address is changed\\n    event NewPrimeToken(IPrime oldPrimeToken, IPrime newPrimeToken);\\n\\n    /// @notice Emitted when forced liquidation is enabled or disabled for a market\\n    event IsForcedLiquidationEnabledUpdated(address indexed vToken, bool enable);\\n\\n    /// @notice Emitted when a market is unlisted\\n    event MarketUnlisted(address indexed vToken);\\n    /// @notice Emitted when the borrowing or redeeming delegate rights are updated for an account\\n    event DelegateUpdated(address indexed approver, address indexed delegate, bool approved);\\n\\n    /// @notice Thrown when collateral factor exceeds the upper bound\\n    error InvalidCollateralFactor();\\n\\n    /// @notice Thrown when liquidation threshold exceeds the collateral factor\\n    error InvalidLiquidationThreshold();\\n\\n    /// @notice Thrown when the action is only available to specific sender, but the real sender was different\\n    error UnexpectedSender(address expectedSender, address actualSender);\\n\\n    /// @notice Thrown when the oracle returns an invalid price for some asset\\n    error PriceError(address vToken);\\n\\n    /// @notice Thrown if VToken unexpectedly returned a nonzero error code while trying to get account snapshot\\n    error SnapshotError(address vToken, address user);\\n\\n    /// @notice Thrown when the market is not listed\\n    error MarketNotListed(address market);\\n\\n    /// @notice Thrown when a market has an unexpected comptroller\\n    error ComptrollerMismatch();\\n\\n    /// @notice Thrown when user is not member of market\\n    error MarketNotCollateral(address vToken, address user);\\n\\n    /// @notice Thrown when borrow action is not paused\\n    error BorrowActionNotPaused();\\n\\n    /// @notice Thrown when mint action is not paused\\n    error MintActionNotPaused();\\n\\n    /// @notice Thrown when redeem action is not paused\\n    error RedeemActionNotPaused();\\n\\n    /// @notice Thrown when repay action is not paused\\n    error RepayActionNotPaused();\\n\\n    /// @notice Thrown when seize action is not paused\\n    error SeizeActionNotPaused();\\n\\n    /// @notice Thrown when exit market action is not paused\\n    error ExitMarketActionNotPaused();\\n\\n    /// @notice Thrown when transfer action is not paused\\n    error TransferActionNotPaused();\\n\\n    /// @notice Thrown when enter market action is not paused\\n    error EnterMarketActionNotPaused();\\n\\n    /// @notice Thrown when liquidate action is not paused\\n    error LiquidateActionNotPaused();\\n\\n    /// @notice Thrown when borrow cap is not zero\\n    error BorrowCapIsNotZero();\\n\\n    /// @notice Thrown when supply cap is not zero\\n    error SupplyCapIsNotZero();\\n\\n    /// @notice Thrown when collateral factor is not zero\\n    error CollateralFactorIsNotZero();\\n\\n    /**\\n     * @notice Thrown during the liquidation if user's total collateral amount is lower than\\n     *   a predefined threshold. In this case only batch liquidations (either liquidateAccount\\n     *   or healAccount) are available.\\n     */\\n    error MinimalCollateralViolated(uint256 expectedGreaterThan, uint256 actual);\\n    error CollateralExceedsThreshold(uint256 expectedLessThanOrEqualTo, uint256 actual);\\n    error InsufficientCollateral(uint256 collateralToSeize, uint256 availableCollateral);\\n\\n    /// @notice Thrown when the account doesn't have enough liquidity to redeem or borrow\\n    error InsufficientLiquidity();\\n\\n    /// @notice Thrown when trying to liquidate a healthy account\\n    error InsufficientShortfall();\\n\\n    /// @notice Thrown when trying to repay more than allowed by close factor\\n    error TooMuchRepay();\\n\\n    /// @notice Thrown if the user is trying to exit a market in which they have an outstanding debt\\n    error NonzeroBorrowBalance();\\n\\n    /// @notice Thrown when trying to perform an action that is paused\\n    error ActionPaused(address market, Action action);\\n\\n    /// @notice Thrown when trying to add a market that is already listed\\n    error MarketAlreadyListed(address market);\\n\\n    /// @notice Thrown if the supply cap is exceeded\\n    error SupplyCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if the borrow cap is exceeded\\n    error BorrowCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if delegate approval status is already set to the requested value\\n    error DelegationStatusUnchanged();\\n\\n    /// @param poolRegistry_ Pool registry address\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    /// @custom:error ZeroAddressNotAllowed is thrown when pool registry address is zero\\n    constructor(address poolRegistry_) {\\n        ensureNonzeroAddress(poolRegistry_);\\n\\n        poolRegistry = poolRegistry_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @param loopLimit Limit for the loops can iterate to avoid the DOS\\n     * @param accessControlManager Access control manager contract address\\n     */\\n    function initialize(uint256 loopLimit, address accessControlManager) external initializer {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager);\\n\\n        _setMaxLoopsLimit(loopLimit);\\n    }\\n\\n    /**\\n     * @notice Add assets to be included in account liquidity calculation; enabling them to be used as collateral\\n     * @param vTokens The list of addresses of the vToken markets to be enabled\\n     * @return errors An array of NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketEntered is emitted for each market on success\\n     * @custom:error ActionPaused error is thrown if entering any of the markets is paused\\n     * @custom:error MarketNotListed error is thrown if any of the markets is not listed\\n     * @custom:access Not restricted\\n     */\\n    function enterMarkets(address[] memory vTokens) external override returns (uint256[] memory) {\\n        uint256 len = vTokens.length;\\n\\n        uint256[] memory results = new uint256[](len);\\n        for (uint256 i; i < len; ++i) {\\n            VToken vToken = VToken(vTokens[i]);\\n\\n            _addToMarket(vToken, msg.sender);\\n            results[i] = NO_ERROR;\\n        }\\n\\n        return results;\\n    }\\n\\n    /**\\n     * @notice Unlist a market by setting isListed to false\\n     * @dev Checks if all actions are paused, borrow/supply caps is set to 0 and collateral factor is to 0.\\n     * @param market The address of the market (token) to unlist\\n     * @return uint256 Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketUnlisted is emitted on success\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error BorrowActionNotPaused error is thrown if borrow action is not paused\\n     * @custom:error MintActionNotPaused error is thrown if mint action is not paused\\n     * @custom:error RedeemActionNotPaused error is thrown if redeem action is not paused\\n     * @custom:error RepayActionNotPaused error is thrown if repay action is not paused\\n     * @custom:error EnterMarketActionNotPaused error is thrown if enter market action is not paused\\n     * @custom:error LiquidateActionNotPaused error is thrown if liquidate action is not paused\\n     * @custom:error BorrowCapIsNotZero error is thrown if borrow cap is not zero\\n     * @custom:error SupplyCapIsNotZero error is thrown if supply cap is not zero\\n     * @custom:error CollateralFactorIsNotZero error is thrown if collateral factor is not zero\\n     */\\n    function unlistMarket(address market) external returns (uint256) {\\n        _checkAccessAllowed(\\\"unlistMarket(address)\\\");\\n\\n        Market storage _market = markets[market];\\n\\n        if (!_market.isListed) {\\n            revert MarketNotListed(market);\\n        }\\n\\n        if (!actionPaused(market, Action.BORROW)) {\\n            revert BorrowActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.MINT)) {\\n            revert MintActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REDEEM)) {\\n            revert RedeemActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REPAY)) {\\n            revert RepayActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.SEIZE)) {\\n            revert SeizeActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.ENTER_MARKET)) {\\n            revert EnterMarketActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.LIQUIDATE)) {\\n            revert LiquidateActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.TRANSFER)) {\\n            revert TransferActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.EXIT_MARKET)) {\\n            revert ExitMarketActionNotPaused();\\n        }\\n\\n        if (borrowCaps[market] != 0) {\\n            revert BorrowCapIsNotZero();\\n        }\\n\\n        if (supplyCaps[market] != 0) {\\n            revert SupplyCapIsNotZero();\\n        }\\n\\n        if (_market.collateralFactorMantissa != 0) {\\n            revert CollateralFactorIsNotZero();\\n        }\\n\\n        _market.isListed = false;\\n        emit MarketUnlisted(market);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Grants or revokes the borrowing or redeeming delegate rights to / from an account\\n     *  If allowed, the delegate will be able to borrow funds on behalf of the sender\\n     *  Upon a delegated borrow, the delegate will receive the funds, and the borrower\\n     *  will see the debt on their account\\n     *  Upon a delegated redeem, the delegate will receive the redeemed amount and the approver\\n     *  will see a deduction in his vToken balance\\n     * @param delegate The address to update the rights for\\n     * @param approved Whether to grant (true) or revoke (false) the borrowing or redeeming rights\\n     * @custom:event DelegateUpdated emits on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when delegate address is zero\\n     * @custom:error DelegationStatusUnchanged is thrown if approval status is already set to the requested value\\n     * @custom:access Not restricted\\n     */\\n    function updateDelegate(address delegate, bool approved) external {\\n        ensureNonzeroAddress(delegate);\\n        if (approvedDelegates[msg.sender][delegate] == approved) {\\n            revert DelegationStatusUnchanged();\\n        }\\n\\n        approvedDelegates[msg.sender][delegate] = approved;\\n        emit DelegateUpdated(msg.sender, delegate, approved);\\n    }\\n\\n    /**\\n     * @notice Removes asset from sender's account liquidity calculation; disabling them as collateral\\n     * @dev Sender must not have an outstanding borrow balance in the asset,\\n     *  or be providing necessary collateral for an outstanding borrow.\\n     * @param vTokenAddress The address of the asset to be removed\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketExited is emitted on success\\n     * @custom:error ActionPaused error is thrown if exiting the market is paused\\n     * @custom:error NonzeroBorrowBalance error is thrown if the user has an outstanding borrow in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if exiting the market would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function exitMarket(address vTokenAddress) external override returns (uint256) {\\n        _checkActionPauseState(vTokenAddress, Action.EXIT_MARKET);\\n        VToken vToken = VToken(vTokenAddress);\\n        /* Get sender tokensHeld and amountOwed underlying from the vToken */\\n        (uint256 tokensHeld, uint256 amountOwed, ) = _safeGetAccountSnapshot(vToken, msg.sender);\\n\\n        /* Fail if the sender has a borrow balance */\\n        if (amountOwed != 0) {\\n            revert NonzeroBorrowBalance();\\n        }\\n\\n        /* Fail if the sender is not permitted to redeem all of their tokens */\\n        _checkRedeemAllowed(vTokenAddress, msg.sender, tokensHeld);\\n\\n        Market storage marketToExit = markets[address(vToken)];\\n\\n        /* Return true if the sender is not already \\u2018in\\u2019 the market */\\n        if (!marketToExit.accountMembership[msg.sender]) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Set vToken account membership to false */\\n        delete marketToExit.accountMembership[msg.sender];\\n\\n        /* Delete vToken from the account\\u2019s list of assets */\\n        // load into memory for faster iteration\\n        VToken[] memory userAssetList = accountAssets[msg.sender];\\n        uint256 len = userAssetList.length;\\n\\n        uint256 assetIndex = len;\\n        for (uint256 i; i < len; ++i) {\\n            if (userAssetList[i] == vToken) {\\n                assetIndex = i;\\n                break;\\n            }\\n        }\\n\\n        // We *must* have found the asset in the list or our redundant data structure is broken\\n        assert(assetIndex < len);\\n\\n        // copy last item in list to location of item to be removed, reduce length by 1\\n        VToken[] storage storedList = accountAssets[msg.sender];\\n        storedList[assetIndex] = storedList[storedList.length - 1];\\n        storedList.pop();\\n\\n        emit MarketExited(vToken, msg.sender);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /*** Policy Hooks ***/\\n\\n    /**\\n     * @notice Checks if the account should be allowed to mint tokens in the given market\\n     * @param vToken The market to verify the mint against\\n     * @param minter The account which would get the minted tokens\\n     * @param mintAmount The amount of underlying being supplied to the market in exchange for tokens\\n     * @custom:error ActionPaused error is thrown if supplying to this market is paused\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error SupplyCapExceeded error is thrown if the total supply exceeds the cap after minting\\n     * @custom:access Not restricted\\n     */\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external override {\\n        _checkActionPauseState(vToken, Action.MINT);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        uint256 supplyCap = supplyCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (supplyCap != type(uint256).max) {\\n            uint256 vTokenSupply = VToken(vToken).totalSupply();\\n            Exp memory exchangeRate = Exp({ mantissa: VToken(vToken).exchangeRateStored() });\\n            uint256 nextTotalSupply = mul_ScalarTruncateAddUInt(exchangeRate, vTokenSupply, mintAmount);\\n            if (nextTotalSupply > supplyCap) {\\n                revert SupplyCapExceeded(vToken, supplyCap);\\n            }\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, minter);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates mint, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being minted\\n     * @param minter The address minting the tokens\\n     * @param actualMintAmount The amount of the underlying asset being minted\\n     * @param mintTokens The number of tokens being minted\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function mintVerify(address vToken, address minter, uint256 actualMintAmount, uint256 mintTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(minter, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to redeem tokens in the given market\\n     * @param vToken The market to verify the redeem against\\n     * @param redeemer The account which would redeem the tokens\\n     * @param redeemTokens The number of vTokens to exchange for the underlying asset in the market\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external override {\\n        _checkActionPauseState(vToken, Action.REDEEM);\\n\\n        _checkRedeemAllowed(vToken, redeemer, redeemTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, redeemer);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates redeem, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being redeemed\\n     * @param redeemer The address redeeming the tokens\\n     * @param redeemAmount The amount of the underlying asset being redeemed\\n     * @param redeemTokens The number of tokens being redeemed\\n     */\\n    function redeemVerify(address vToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(redeemer, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates repayBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being repaid\\n     * @param payer The address repaying the borrow\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     */\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer, // solhint-disable-line no-unused-vars\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 borrowerIndex // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates liquidateBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     * @param seizeTokens The amount of collateral token that will be seized\\n     */\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenBorrowed);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenBorrowed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates seize, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param seizeTokens The number of collateral tokens to seize\\n     */\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenCollateral);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenCollateral);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates transfer, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being transferred\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function transferVerify(address vToken, address src, address dst, uint256 transferTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(src, vToken);\\n            prime.accrueInterestAndUpdateScore(dst, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to borrow the underlying asset of the given market\\n     * @param vToken The market to verify the borrow against\\n     * @param borrower The account which would borrow the asset\\n     * @param borrowAmount The amount of underlying the account would borrow\\n     * @custom:error ActionPaused error is thrown if borrowing is paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if there is not enough collateral to borrow\\n     * @custom:error BorrowCapExceeded is thrown if the borrow cap will be exceeded should this borrow succeed\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted if vToken is enabled as collateral, otherwise only vToken\\n     */\\n    /// disable-eslint\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external override {\\n        _checkActionPauseState(vToken, Action.BORROW);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (!markets[vToken].accountMembership[borrower]) {\\n            // only vTokens may call borrowAllowed if borrower not in market\\n            _checkSenderIs(vToken);\\n\\n            // attempt to add borrower to the market or revert\\n            _addToMarket(VToken(msg.sender), borrower);\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (oracle.getUnderlyingPrice(vToken) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 borrowCap = borrowCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (borrowCap != type(uint256).max) {\\n            uint256 totalBorrows = VToken(vToken).totalBorrows();\\n            uint256 badDebt = VToken(vToken).badDebt();\\n            uint256 nextTotalBorrows = totalBorrows + borrowAmount + badDebt;\\n            if (nextTotalBorrows > borrowCap) {\\n                revert BorrowCapExceeded(vToken, borrowCap);\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            borrower,\\n            VToken(vToken),\\n            0,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n\\n        Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates borrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset whose underlying is being borrowed\\n     * @param borrower The address borrowing the underlying\\n     * @param borrowAmount The amount of the underlying asset requested to borrow\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function borrowVerify(address vToken, address borrower, uint256 borrowAmount) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to repay a borrow in the given market\\n     * @param vToken The market to verify the repay against\\n     * @param borrower The account which would borrowed the asset\\n     * @custom:error ActionPaused error is thrown if repayments are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:access Not restricted\\n     */\\n    function preRepayHook(address vToken, address borrower) external override {\\n        _checkActionPauseState(vToken, Action.REPAY);\\n\\n        oracle.updatePrice(vToken);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the liquidation should be allowed to occur\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param borrower The address of the borrower\\n     * @param repayAmount The amount of underlying being repaid\\n     * @param skipLiquidityCheck Allows the borrow to be liquidated regardless of the account liquidity\\n     * @custom:error ActionPaused error is thrown if liquidations are paused in this market\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error TooMuchRepay error is thrown if the liquidator is trying to repay more than allowed by close factor\\n     * @custom:error MinimalCollateralViolated is thrown if the users' total collateral is lower than the threshold for non-batch liquidations\\n     * @custom:error InsufficientShortfall is thrown when trying to liquidate a healthy account\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     */\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        // Pause Action.LIQUIDATE on BORROWED TOKEN to prevent liquidating it.\\n        // If we want to pause liquidating to vTokenCollateral, we should pause\\n        // Action.SEIZE on it\\n        _checkActionPauseState(vTokenBorrowed, Action.LIQUIDATE);\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(address(vTokenBorrowed));\\n        }\\n        if (!markets[vTokenCollateral].isListed) {\\n            revert MarketNotListed(address(vTokenCollateral));\\n        }\\n\\n        uint256 borrowBalance = VToken(vTokenBorrowed).borrowBalanceStored(borrower);\\n\\n        /* Allow accounts to be liquidated if it is a forced liquidation */\\n        if (skipLiquidityCheck || isForcedLiquidationEnabled[vTokenBorrowed]) {\\n            if (repayAmount > borrowBalance) {\\n                revert TooMuchRepay();\\n            }\\n            return;\\n        }\\n\\n        /* The borrower must have shortfall and collateral > threshold in order to be liquidatable */\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral <= minLiquidatableCollateral) {\\n            /* The liquidator should use either liquidateAccount or healAccount */\\n            revert MinimalCollateralViolated(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        /* The liquidator may not repay more than what is allowed by the closeFactor */\\n        uint256 maxClose = mul_ScalarTruncate(Exp({ mantissa: closeFactorMantissa }), borrowBalance);\\n        if (repayAmount > maxClose) {\\n            revert TooMuchRepay();\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the seizing of assets should be allowed to occur\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param seizerContract Contract that tries to seize the asset (either borrowed vToken or Comptroller)\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @custom:error ActionPaused error is thrown if seizing this type of collateral is paused\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error ComptrollerMismatch error is when seizer contract or seized asset belong to different pools\\n     * @custom:access Not restricted\\n     */\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address seizerContract,\\n        address liquidator,\\n        address borrower\\n    ) external override {\\n        // Pause Action.SEIZE on COLLATERAL to prevent seizing it.\\n        // If we want to pause liquidating vTokenBorrowed, we should pause\\n        // Action.LIQUIDATE on it\\n        _checkActionPauseState(vTokenCollateral, Action.SEIZE);\\n\\n        Market storage market = markets[vTokenCollateral];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(vTokenCollateral);\\n        }\\n\\n        if (seizerContract == address(this)) {\\n            // If Comptroller is the seizer, just check if collateral's comptroller\\n            // is equal to the current address\\n            if (address(VToken(vTokenCollateral).comptroller()) != address(this)) {\\n                revert ComptrollerMismatch();\\n            }\\n        } else {\\n            // If the seizer is not the Comptroller, check that the seizer is a\\n            // listed market, and that the markets' comptrollers match\\n            if (!markets[seizerContract].isListed) {\\n                revert MarketNotListed(seizerContract);\\n            }\\n            if (VToken(vTokenCollateral).comptroller() != VToken(seizerContract).comptroller()) {\\n                revert ComptrollerMismatch();\\n            }\\n        }\\n\\n        if (!market.accountMembership[borrower]) {\\n            revert MarketNotCollateral(vTokenCollateral, borrower);\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vTokenCollateral);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, borrower);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, liquidator);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to transfer tokens in the given market\\n     * @param vToken The market to verify the transfer against\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external override {\\n        _checkActionPauseState(vToken, Action.TRANSFER);\\n\\n        // Currently the only consideration is whether or not\\n        //  the src is allowed to redeem this many tokens\\n        _checkRedeemAllowed(vToken, src, transferTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, src);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, dst);\\n        }\\n    }\\n\\n    /*** Pool-level operations ***/\\n\\n    /**\\n     * @notice Seizes all the remaining collateral, makes msg.sender repay the existing\\n     *   borrows, and treats the rest of the debt as bad debt (for each market).\\n     *   The sender has to repay a certain percentage of the debt, computed as\\n     *   collateral / (borrows * liquidationIncentive).\\n     * @param user account to heal\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for healing\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function healAccount(address user) external {\\n        VToken[] memory userAssets = getAssetsIn(user);\\n        uint256 userAssetsCount = userAssets.length;\\n\\n        address liquidator = msg.sender;\\n        {\\n            ResilientOracleInterface oracle_ = oracle;\\n            // We need all user's markets to be fresh for the computations to be correct\\n            for (uint256 i; i < userAssetsCount; ++i) {\\n                userAssets[i].accrueInterest();\\n                oracle_.updatePrice(address(userAssets[i]));\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(user, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        // percentage = collateral / (borrows * liquidation incentive)\\n        Exp memory collateral = Exp({ mantissa: snapshot.totalCollateral });\\n        Exp memory scaledBorrows = mul_(\\n            Exp({ mantissa: snapshot.borrows }),\\n            Exp({ mantissa: liquidationIncentiveMantissa })\\n        );\\n\\n        Exp memory percentage = div_(collateral, scaledBorrows);\\n        if (lessThanExp(Exp({ mantissa: MANTISSA_ONE }), percentage)) {\\n            revert CollateralExceedsThreshold(scaledBorrows.mantissa, collateral.mantissa);\\n        }\\n\\n        for (uint256 i; i < userAssetsCount; ++i) {\\n            VToken market = userAssets[i];\\n\\n            (uint256 tokens, uint256 borrowBalance, ) = _safeGetAccountSnapshot(market, user);\\n            uint256 repaymentAmount = mul_ScalarTruncate(percentage, borrowBalance);\\n\\n            // Seize the entire collateral\\n            if (tokens != 0) {\\n                market.seize(liquidator, user, tokens);\\n            }\\n            // Repay a certain percentage of the borrow, forgive the rest\\n            if (borrowBalance != 0) {\\n                market.healBorrow(liquidator, user, repaymentAmount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Liquidates all borrows of the borrower. Callable only if the collateral is less than\\n     *   a predefined threshold, and the account collateral can be seized to cover all borrows. If\\n     *   the collateral is higher than the threshold, use regular liquidations. If the collateral is\\n     *   below the threshold, and the account is insolvent, use healAccount.\\n     * @param borrower the borrower address\\n     * @param orders an array of liquidation orders\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for a batch liquidation\\n     * @custom:error InsufficientCollateral error is thrown when there is not enough collateral to cover the debt\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function liquidateAccount(address borrower, LiquidationOrder[] calldata orders) external {\\n        // We will accrue interest and update the oracle prices later during the liquidation\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            // You should use the regular vToken.liquidateBorrow(...) call\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        uint256 collateralToSeize = mul_ScalarTruncate(\\n            Exp({ mantissa: liquidationIncentiveMantissa }),\\n            snapshot.borrows\\n        );\\n        if (collateralToSeize >= snapshot.totalCollateral) {\\n            // There is not enough collateral to seize. Use healBorrow to repay some part of the borrow\\n            // and record bad debt.\\n            revert InsufficientCollateral(collateralToSeize, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        uint256 ordersCount = orders.length;\\n\\n        _ensureMaxLoops(ordersCount / 2);\\n\\n        for (uint256 i; i < ordersCount; ++i) {\\n            if (!markets[address(orders[i].vTokenBorrowed)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenBorrowed));\\n            }\\n            if (!markets[address(orders[i].vTokenCollateral)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenCollateral));\\n            }\\n\\n            LiquidationOrder calldata order = orders[i];\\n            order.vTokenBorrowed.forceLiquidateBorrow(\\n                msg.sender,\\n                borrower,\\n                order.repayAmount,\\n                order.vTokenCollateral,\\n                true\\n            );\\n        }\\n\\n        VToken[] memory borrowMarkets = getAssetsIn(borrower);\\n        uint256 marketsCount = borrowMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            (, uint256 borrowBalance, ) = _safeGetAccountSnapshot(borrowMarkets[i], borrower);\\n            require(borrowBalance == 0, \\\"Nonzero borrow balance after liquidation\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets the closeFactor to use when liquidating borrows\\n     * @param newCloseFactorMantissa New close factor, scaled by 1e18\\n     * @custom:event Emits NewCloseFactor on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCloseFactor(uint256 newCloseFactorMantissa) external {\\n        _checkAccessAllowed(\\\"setCloseFactor(uint256)\\\");\\n        require(MAX_CLOSE_FACTOR_MANTISSA >= newCloseFactorMantissa, \\\"Close factor greater than maximum close factor\\\");\\n        require(MIN_CLOSE_FACTOR_MANTISSA <= newCloseFactorMantissa, \\\"Close factor smaller than minimum close factor\\\");\\n\\n        uint256 oldCloseFactorMantissa = closeFactorMantissa;\\n        closeFactorMantissa = newCloseFactorMantissa;\\n        emit NewCloseFactor(oldCloseFactorMantissa, newCloseFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Sets the collateralFactor for a market\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param vToken The market to set the factor on\\n     * @param newCollateralFactorMantissa The new collateral factor, scaled by 1e18\\n     * @param newLiquidationThresholdMantissa The new liquidation threshold, scaled by 1e18\\n     * @custom:event Emits NewCollateralFactor when collateral factor is updated\\n     *    and NewLiquidationThreshold when liquidation threshold is updated\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InvalidCollateralFactor error is thrown when collateral factor is too high\\n     * @custom:error InvalidLiquidationThreshold error is thrown when liquidation threshold is lower than collateral factor\\n     * @custom:error PriceError is thrown when the oracle returns an invalid price for the asset\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCollateralFactor(\\n        VToken vToken,\\n        uint256 newCollateralFactorMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    ) external {\\n        _checkAccessAllowed(\\\"setCollateralFactor(address,uint256,uint256)\\\");\\n\\n        // Verify market is listed\\n        Market storage market = markets[address(vToken)];\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Check collateral factor <= 0.9\\n        if (newCollateralFactorMantissa > MAX_COLLATERAL_FACTOR_MANTISSA) {\\n            revert InvalidCollateralFactor();\\n        }\\n\\n        // Ensure that liquidation threshold <= 1\\n        if (newLiquidationThresholdMantissa > MANTISSA_ONE) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // Ensure that liquidation threshold >= CF\\n        if (newLiquidationThresholdMantissa < newCollateralFactorMantissa) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // If collateral factor != 0, fail if price == 0\\n        if (newCollateralFactorMantissa != 0 && oracle.getUnderlyingPrice(address(vToken)) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 oldCollateralFactorMantissa = market.collateralFactorMantissa;\\n        if (newCollateralFactorMantissa != oldCollateralFactorMantissa) {\\n            market.collateralFactorMantissa = newCollateralFactorMantissa;\\n            emit NewCollateralFactor(vToken, oldCollateralFactorMantissa, newCollateralFactorMantissa);\\n        }\\n\\n        uint256 oldLiquidationThresholdMantissa = market.liquidationThresholdMantissa;\\n        if (newLiquidationThresholdMantissa != oldLiquidationThresholdMantissa) {\\n            market.liquidationThresholdMantissa = newLiquidationThresholdMantissa;\\n            emit NewLiquidationThreshold(vToken, oldLiquidationThresholdMantissa, newLiquidationThresholdMantissa);\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets liquidationIncentive\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newLiquidationIncentiveMantissa New liquidationIncentive scaled by 1e18\\n     * @custom:event Emits NewLiquidationIncentive on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setLiquidationIncentive(uint256 newLiquidationIncentiveMantissa) external {\\n        require(newLiquidationIncentiveMantissa >= MANTISSA_ONE, \\\"liquidation incentive should be greater than 1e18\\\");\\n\\n        _checkAccessAllowed(\\\"setLiquidationIncentive(uint256)\\\");\\n\\n        // Save current value for use in log\\n        uint256 oldLiquidationIncentiveMantissa = liquidationIncentiveMantissa;\\n\\n        // Set liquidation incentive to new incentive\\n        liquidationIncentiveMantissa = newLiquidationIncentiveMantissa;\\n\\n        // Emit event with old incentive, new incentive\\n        emit NewLiquidationIncentive(oldLiquidationIncentiveMantissa, newLiquidationIncentiveMantissa);\\n    }\\n\\n    /**\\n     * @notice Add the market to the markets mapping and set it as listed\\n     * @dev Only callable by the PoolRegistry\\n     * @param vToken The address of the market (token) to list\\n     * @custom:error MarketAlreadyListed is thrown if the market is already listed in this pool\\n     * @custom:access Only PoolRegistry\\n     */\\n    function supportMarket(VToken vToken) external {\\n        _checkSenderIs(poolRegistry);\\n\\n        if (markets[address(vToken)].isListed) {\\n            revert MarketAlreadyListed(address(vToken));\\n        }\\n\\n        require(vToken.isVToken(), \\\"Comptroller: Invalid vToken\\\"); // Sanity check to make sure its really a VToken\\n\\n        Market storage newMarket = markets[address(vToken)];\\n        newMarket.isListed = true;\\n        newMarket.collateralFactorMantissa = 0;\\n        newMarket.liquidationThresholdMantissa = 0;\\n\\n        _addMarket(address(vToken));\\n\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            rewardsDistributors[i].initializeMarket(address(vToken));\\n        }\\n\\n        emit MarketSupported(vToken);\\n    }\\n\\n    /**\\n     * @notice Set the given borrow caps for the given vToken markets. Borrowing that brings total borrows to or above borrow cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A borrow cap of type(uint256).max corresponds to unlimited borrowing.\\n     * @dev Borrow caps smaller than the current total borrows are accepted. This way, new borrows will not be allowed\\n            until the total borrows amount goes below the new borrow cap\\n     * @param vTokens The addresses of the markets (tokens) to change the borrow caps for\\n     * @param newBorrowCaps The new borrow cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited borrowing.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketBorrowCaps(VToken[] calldata vTokens, uint256[] calldata newBorrowCaps) external {\\n        _checkAccessAllowed(\\\"setMarketBorrowCaps(address[],uint256[])\\\");\\n\\n        uint256 numMarkets = vTokens.length;\\n        uint256 numBorrowCaps = newBorrowCaps.length;\\n\\n        require(numMarkets != 0 && numMarkets == numBorrowCaps, \\\"invalid input\\\");\\n\\n        _ensureMaxLoops(numMarkets);\\n\\n        for (uint256 i; i < numMarkets; ++i) {\\n            borrowCaps[address(vTokens[i])] = newBorrowCaps[i];\\n            emit NewBorrowCap(vTokens[i], newBorrowCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given supply caps for the given vToken markets. Supply that brings total Supply to or above supply cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A supply cap of type(uint256).max corresponds to unlimited supply.\\n     * @dev Supply caps smaller than the current total supplies are accepted. This way, new supplies will not be allowed\\n            until the total supplies amount goes below the new supply cap\\n     * @param vTokens The addresses of the markets (tokens) to change the supply caps for\\n     * @param newSupplyCaps The new supply cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited supply.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketSupplyCaps(VToken[] calldata vTokens, uint256[] calldata newSupplyCaps) external {\\n        _checkAccessAllowed(\\\"setMarketSupplyCaps(address[],uint256[])\\\");\\n        uint256 vTokensCount = vTokens.length;\\n\\n        require(vTokensCount != 0, \\\"invalid number of markets\\\");\\n        require(vTokensCount == newSupplyCaps.length, \\\"invalid number of markets\\\");\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            supplyCaps[address(vTokens[i])] = newSupplyCaps[i];\\n            emit NewSupplyCap(vTokens[i], newSupplyCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Pause/unpause specified actions\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param marketsList Markets to pause/unpause the actions on\\n     * @param actionsList List of action ids to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setActionsPaused(VToken[] calldata marketsList, Action[] calldata actionsList, bool paused) external {\\n        _checkAccessAllowed(\\\"setActionsPaused(address[],uint256[],bool)\\\");\\n\\n        uint256 marketsCount = marketsList.length;\\n        uint256 actionsCount = actionsList.length;\\n\\n        _ensureMaxLoops(marketsCount * actionsCount);\\n\\n        for (uint256 marketIdx; marketIdx < marketsCount; ++marketIdx) {\\n            for (uint256 actionIdx; actionIdx < actionsCount; ++actionIdx) {\\n                _setActionPaused(address(marketsList[marketIdx]), actionsList[actionIdx], paused);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given collateral threshold for non-batch liquidations. Regular liquidations\\n     *   will fail if the collateral amount is less than this threshold. Liquidators should use batch\\n     *   operations like liquidateAccount or healAccount.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newMinLiquidatableCollateral The new min liquidatable collateral (in USD).\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMinLiquidatableCollateral(uint256 newMinLiquidatableCollateral) external {\\n        _checkAccessAllowed(\\\"setMinLiquidatableCollateral(uint256)\\\");\\n\\n        uint256 oldMinLiquidatableCollateral = minLiquidatableCollateral;\\n        minLiquidatableCollateral = newMinLiquidatableCollateral;\\n        emit NewMinLiquidatableCollateral(oldMinLiquidatableCollateral, newMinLiquidatableCollateral);\\n    }\\n\\n    /**\\n     * @notice Add a new RewardsDistributor and initialize it with all markets. We can add several RewardsDistributor\\n     * contracts with the same rewardToken, and there could be overlaping among them considering the last reward slot (block or second)\\n     * @dev Only callable by the admin\\n     * @param _rewardsDistributor Address of the RewardDistributor contract to add\\n     * @custom:access Only Governance\\n     * @custom:event Emits NewRewardsDistributor with distributor address\\n     */\\n    function addRewardsDistributor(RewardsDistributor _rewardsDistributor) external onlyOwner {\\n        require(!rewardsDistributorExists[address(_rewardsDistributor)], \\\"already exists\\\");\\n\\n        uint256 rewardsDistributorsLen = rewardsDistributors.length;\\n        _ensureMaxLoops(rewardsDistributorsLen + 1);\\n\\n        rewardsDistributors.push(_rewardsDistributor);\\n        rewardsDistributorExists[address(_rewardsDistributor)] = true;\\n\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            _rewardsDistributor.initializeMarket(address(allMarkets[i]));\\n        }\\n\\n        emit NewRewardsDistributor(address(_rewardsDistributor), address(_rewardsDistributor.rewardToken()));\\n    }\\n\\n    /**\\n     * @notice Sets a new price oracle for the Comptroller\\n     * @dev Only callable by the admin\\n     * @param newOracle Address of the new price oracle to set\\n     * @custom:event Emits NewPriceOracle on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when the new oracle address is zero\\n     */\\n    function setPriceOracle(ResilientOracleInterface newOracle) external onlyOwner {\\n        ensureNonzeroAddress(address(newOracle));\\n\\n        ResilientOracleInterface oldOracle = oracle;\\n        oracle = newOracle;\\n        emit NewPriceOracle(oldOracle, newOracle);\\n    }\\n\\n    /**\\n     * @notice Set the for loop iteration limit to avoid DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Sets the prime token contract for the comptroller\\n     * @param _prime Address of the Prime contract\\n     */\\n    function setPrimeToken(IPrime _prime) external onlyOwner {\\n        ensureNonzeroAddress(address(_prime));\\n\\n        emit NewPrimeToken(prime, _prime);\\n        prime = _prime;\\n    }\\n\\n    /**\\n     * @notice Enables forced liquidations for a market. If forced liquidation is enabled,\\n     * borrows in the market may be liquidated regardless of the account liquidity\\n     * @param vTokenBorrowed Borrowed vToken\\n     * @param enable Whether to enable forced liquidations\\n     */\\n    function setForcedLiquidation(address vTokenBorrowed, bool enable) external {\\n        _checkAccessAllowed(\\\"setForcedLiquidation(address,bool)\\\");\\n        ensureNonzeroAddress(vTokenBorrowed);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(vTokenBorrowed);\\n        }\\n\\n        isForcedLiquidationEnabled[vTokenBorrowed] = enable;\\n        emit IsForcedLiquidationEnabledUpdated(vTokenBorrowed, enable);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to liquidation threshold requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of liquidation threshold requirements,\\n     * @return shortfall Account shortfall below liquidation threshold requirements\\n     */\\n    function getAccountLiquidity(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getLiquidationThreshold);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to collateral requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of collateral requirements,\\n     * @return shortfall Account shortfall below collateral requirements\\n     */\\n    function getBorrowingPower(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getCollateralFactor);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine what the account liquidity would be if the given amounts were redeemed/borrowed\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Hypothetical account liquidity in excess of collateral requirements,\\n     * @return shortfall Hypothetical account shortfall below collateral requirements\\n     */\\n    function getHypotheticalAccountLiquidity(\\n        address account,\\n        address vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            account,\\n            VToken(vTokenModify),\\n            redeemTokens,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Return all of the markets\\n     * @dev The automatic getter may be used to access an individual market.\\n     * @return markets The list of market addresses\\n     */\\n    function getAllMarkets() external view override returns (VToken[] memory) {\\n        return allMarkets;\\n    }\\n\\n    /**\\n     * @notice Check if a market is marked as listed (active)\\n     * @param vToken vToken Address for the market to check\\n     * @return listed True if listed otherwise false\\n     */\\n    function isMarketListed(VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].isListed;\\n    }\\n\\n    /*** Assets You Are In ***/\\n\\n    /**\\n     * @notice Returns whether the given account is entered in a given market\\n     * @param account The address of the account to check\\n     * @param vToken The vToken to check\\n     * @return True if the account is in the market specified, otherwise false.\\n     */\\n    function checkMembership(address account, VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].accountMembership[account];\\n    }\\n\\n    /**\\n     * @notice Calculate number of tokens of collateral asset to seize given an underlying amount\\n     * @dev Used in liquidation (called in vToken.liquidateBorrowFresh)\\n     * @param vTokenBorrowed The address of the borrowed vToken\\n     * @param vTokenCollateral The address of the collateral vToken\\n     * @param actualRepayAmount The amount of vTokenBorrowed underlying to convert into vTokenCollateral tokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return tokensToSeize Number of vTokenCollateral tokens to be seized in a liquidation\\n     * @custom:error PriceError if the oracle returns an invalid price\\n     */\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 actualRepayAmount\\n    ) external view override returns (uint256 error, uint256 tokensToSeize) {\\n        /* Read oracle prices for borrowed and collateral markets */\\n        uint256 priceBorrowedMantissa = _safeGetUnderlyingPrice(VToken(vTokenBorrowed));\\n        uint256 priceCollateralMantissa = _safeGetUnderlyingPrice(VToken(vTokenCollateral));\\n\\n        /*\\n         * Get the exchange rate and calculate the number of collateral tokens to seize:\\n         *  seizeAmount = actualRepayAmount * liquidationIncentive * priceBorrowed / priceCollateral\\n         *  seizeTokens = seizeAmount / exchangeRate\\n         *   = actualRepayAmount * (liquidationIncentive * priceBorrowed) / (priceCollateral * exchangeRate)\\n         */\\n        uint256 exchangeRateMantissa = VToken(vTokenCollateral).exchangeRateStored(); // Note: reverts on error\\n        uint256 seizeTokens;\\n        Exp memory numerator;\\n        Exp memory denominator;\\n        Exp memory ratio;\\n\\n        numerator = mul_(Exp({ mantissa: liquidationIncentiveMantissa }), Exp({ mantissa: priceBorrowedMantissa }));\\n        denominator = mul_(Exp({ mantissa: priceCollateralMantissa }), Exp({ mantissa: exchangeRateMantissa }));\\n        ratio = div_(numerator, denominator);\\n\\n        seizeTokens = mul_ScalarTruncate(ratio, actualRepayAmount);\\n\\n        return (NO_ERROR, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Returns reward speed given a vToken\\n     * @param vToken The vToken to get the reward speeds for\\n     * @return rewardSpeeds Array of total supply and borrow speeds and reward token for all reward distributors\\n     */\\n    function getRewardsByMarket(address vToken) external view returns (RewardSpeeds[] memory rewardSpeeds) {\\n        uint256 rewardsDistributorsLength = rewardsDistributors.length;\\n        rewardSpeeds = new RewardSpeeds[](rewardsDistributorsLength);\\n        for (uint256 i; i < rewardsDistributorsLength; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            address rewardToken = address(rewardsDistributor.rewardToken());\\n            rewardSpeeds[i] = RewardSpeeds({\\n                rewardToken: rewardToken,\\n                supplySpeed: rewardsDistributor.rewardTokenSupplySpeeds(vToken),\\n                borrowSpeed: rewardsDistributor.rewardTokenBorrowSpeeds(vToken)\\n            });\\n        }\\n        return rewardSpeeds;\\n    }\\n\\n    /**\\n     * @notice Return all reward distributors for this pool\\n     * @return Array of RewardDistributor addresses\\n     */\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory) {\\n        return rewardsDistributors;\\n    }\\n\\n    /**\\n     * @notice A marker method that returns true for a valid Comptroller contract\\n     * @return Always true\\n     */\\n    function isComptroller() external pure override returns (bool) {\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Update the prices of all the tokens associated with the provided account\\n     * @param account Address of the account to get associated tokens with\\n     */\\n    function updatePrices(address account) public {\\n        VToken[] memory vTokens = getAssetsIn(account);\\n        uint256 vTokensCount = vTokens.length;\\n\\n        ResilientOracleInterface oracle_ = oracle;\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            oracle_.updatePrice(address(vTokens[i]));\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if a certain action is paused on a market\\n     * @param market vToken address\\n     * @param action Action to check\\n     * @return paused True if the action is paused otherwise false\\n     */\\n    function actionPaused(address market, Action action) public view returns (bool) {\\n        return _actionPaused[market][action];\\n    }\\n\\n    /**\\n     * @notice Returns the assets an account has entered\\n     * @param account The address of the account to pull assets for\\n     * @return A list with the assets the account has entered\\n     */\\n    function getAssetsIn(address account) public view returns (VToken[] memory) {\\n        uint256 len;\\n        VToken[] memory _accountAssets = accountAssets[account];\\n        uint256 _accountAssetsLength = _accountAssets.length;\\n\\n        VToken[] memory assetsIn = new VToken[](_accountAssetsLength);\\n\\n        for (uint256 i; i < _accountAssetsLength; ++i) {\\n            Market storage market = markets[address(_accountAssets[i])];\\n            if (market.isListed) {\\n                assetsIn[len] = _accountAssets[i];\\n                ++len;\\n            }\\n        }\\n\\n        assembly {\\n            mstore(assetsIn, len)\\n        }\\n\\n        return assetsIn;\\n    }\\n\\n    /**\\n     * @notice Add the market to the borrower's \\\"assets in\\\" for liquidity calculations\\n     * @param vToken The market to enter\\n     * @param borrower The address of the account to modify\\n     */\\n    function _addToMarket(VToken vToken, address borrower) internal {\\n        _checkActionPauseState(address(vToken), Action.ENTER_MARKET);\\n        Market storage marketToJoin = markets[address(vToken)];\\n\\n        if (!marketToJoin.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (marketToJoin.accountMembership[borrower]) {\\n            // already joined\\n            return;\\n        }\\n\\n        // survived the gauntlet, add to list\\n        // NOTE: we store these somewhat redundantly as a significant optimization\\n        //  this avoids having to iterate through the list for the most common use cases\\n        //  that is, only when we need to perform liquidity checks\\n        //  and not whenever we want to check if an account is in a particular market\\n        marketToJoin.accountMembership[borrower] = true;\\n        accountAssets[borrower].push(vToken);\\n\\n        emit MarketEntered(vToken, borrower);\\n    }\\n\\n    /**\\n     * @notice Internal function to validate that a market hasn't already been added\\n     * and if it hasn't adds it\\n     * @param vToken The market to support\\n     */\\n    function _addMarket(address vToken) internal {\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            if (allMarkets[i] == VToken(vToken)) {\\n                revert MarketAlreadyListed(vToken);\\n            }\\n        }\\n        allMarkets.push(VToken(vToken));\\n        marketsCount = allMarkets.length;\\n        _ensureMaxLoops(marketsCount);\\n    }\\n\\n    /**\\n     * @dev Pause/unpause an action on a market\\n     * @param market Market to pause/unpause the action on\\n     * @param action Action id to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     */\\n    function _setActionPaused(address market, Action action, bool paused) internal {\\n        require(markets[market].isListed, \\\"cannot pause a market that is not listed\\\");\\n        _actionPaused[market][action] = paused;\\n        emit ActionPausedMarket(VToken(market), action, paused);\\n    }\\n\\n    /**\\n     * @dev Internal function to check that vTokens can be safely redeemed for the underlying asset.\\n     * @param vToken Address of the vTokens to redeem\\n     * @param redeemer Account redeeming the tokens\\n     * @param redeemTokens The number of tokens to redeem\\n     */\\n    function _checkRedeemAllowed(address vToken, address redeemer, uint256 redeemTokens) internal {\\n        Market storage market = markets[vToken];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        /* If the redeemer is not 'in' the market, then we can bypass the liquidity check */\\n        if (!market.accountMembership[redeemer]) {\\n            return;\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(redeemer);\\n\\n        /* Otherwise, perform a hypothetical liquidity check to guard against shortfall */\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            redeemer,\\n            VToken(vToken),\\n            redeemTokens,\\n            0,\\n            _getCollateralFactor\\n        );\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n    }\\n\\n    /**\\n     * @notice Get the total collateral, weighted collateral, borrow balance, liquidity, shortfall\\n     * @param account The account to get the snapshot for\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n     *  liquidation threshold. Accepts the address of the vToken and returns the weight as Exp.\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getCurrentLiquiditySnapshot(\\n        address account,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        return _getHypotheticalLiquiditySnapshot(account, VToken(address(0)), 0, 0, weight);\\n    }\\n\\n    /**\\n     * @notice Determine what the supply/borrow balances would be if the given amounts were redeemed/borrowed\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n         liquidation threshold. Accepts the address of the VToken and returns the weight\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getHypotheticalLiquiditySnapshot(\\n        address account,\\n        VToken vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        // For each asset the account is in\\n        VToken[] memory assets = getAssetsIn(account);\\n        uint256 assetsCount = assets.length;\\n\\n        for (uint256 i; i < assetsCount; ++i) {\\n            VToken asset = assets[i];\\n\\n            // Read the balances and exchange rate from the vToken\\n            (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) = _safeGetAccountSnapshot(\\n                asset,\\n                account\\n            );\\n\\n            // Get the normalized price of the asset\\n            Exp memory oraclePrice = Exp({ mantissa: _safeGetUnderlyingPrice(asset) });\\n\\n            // Pre-compute conversion factors from vTokens -> usd\\n            Exp memory vTokenPrice = mul_(Exp({ mantissa: exchangeRateMantissa }), oraclePrice);\\n            Exp memory weightedVTokenPrice = mul_(weight(asset), vTokenPrice);\\n\\n            // weightedCollateral += weightedVTokenPrice * vTokenBalance\\n            snapshot.weightedCollateral = mul_ScalarTruncateAddUInt(\\n                weightedVTokenPrice,\\n                vTokenBalance,\\n                snapshot.weightedCollateral\\n            );\\n\\n            // totalCollateral += vTokenPrice * vTokenBalance\\n            snapshot.totalCollateral = mul_ScalarTruncateAddUInt(vTokenPrice, vTokenBalance, snapshot.totalCollateral);\\n\\n            // borrows += oraclePrice * borrowBalance\\n            snapshot.borrows = mul_ScalarTruncateAddUInt(oraclePrice, borrowBalance, snapshot.borrows);\\n\\n            // Calculate effects of interacting with vTokenModify\\n            if (asset == vTokenModify) {\\n                // redeem effect\\n                // effects += tokensToDenom * redeemTokens\\n                snapshot.effects = mul_ScalarTruncateAddUInt(weightedVTokenPrice, redeemTokens, snapshot.effects);\\n\\n                // borrow effect\\n                // effects += oraclePrice * borrowAmount\\n                snapshot.effects = mul_ScalarTruncateAddUInt(oraclePrice, borrowAmount, snapshot.effects);\\n            }\\n        }\\n\\n        uint256 borrowPlusEffects = snapshot.borrows + snapshot.effects;\\n        // These are safe, as the underflow condition is checked first\\n        unchecked {\\n            if (snapshot.weightedCollateral > borrowPlusEffects) {\\n                snapshot.liquidity = snapshot.weightedCollateral - borrowPlusEffects;\\n                snapshot.shortfall = 0;\\n            } else {\\n                snapshot.liquidity = 0;\\n                snapshot.shortfall = borrowPlusEffects - snapshot.weightedCollateral;\\n            }\\n        }\\n\\n        return snapshot;\\n    }\\n\\n    /**\\n     * @dev Retrieves price from oracle for an asset and checks it is nonzero\\n     * @param asset Address for asset to query price\\n     * @return Underlying price\\n     */\\n    function _safeGetUnderlyingPrice(VToken asset) internal view returns (uint256) {\\n        uint256 oraclePriceMantissa = oracle.getUnderlyingPrice(address(asset));\\n        if (oraclePriceMantissa == 0) {\\n            revert PriceError(address(asset));\\n        }\\n        return oraclePriceMantissa;\\n    }\\n\\n    /**\\n     * @dev Return collateral factor for a market\\n     * @param asset Address for asset\\n     * @return Collateral factor as exponential\\n     */\\n    function _getCollateralFactor(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].collateralFactorMantissa });\\n    }\\n\\n    /**\\n     * @dev Retrieves liquidation threshold for a market as an exponential\\n     * @param asset Address for asset to liquidation threshold\\n     * @return Liquidation threshold as exponential\\n     */\\n    function _getLiquidationThreshold(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].liquidationThresholdMantissa });\\n    }\\n\\n    /**\\n     * @dev Returns supply and borrow balances of user in vToken, reverts on failure\\n     * @param vToken Market to query\\n     * @param user Account address\\n     * @return vTokenBalance Balance of vTokens, the same as vToken.balanceOf(user)\\n     * @return borrowBalance Borrowed amount, including the interest\\n     * @return exchangeRateMantissa Stored exchange rate\\n     */\\n    function _safeGetAccountSnapshot(\\n        VToken vToken,\\n        address user\\n    ) internal view returns (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) {\\n        uint256 err;\\n        (err, vTokenBalance, borrowBalance, exchangeRateMantissa) = vToken.getAccountSnapshot(user);\\n        if (err != 0) {\\n            revert SnapshotError(address(vToken), user);\\n        }\\n        return (vTokenBalance, borrowBalance, exchangeRateMantissa);\\n    }\\n\\n    /// @notice Reverts if the call is not from expectedSender\\n    /// @param expectedSender Expected transaction sender\\n    function _checkSenderIs(address expectedSender) internal view {\\n        if (msg.sender != expectedSender) {\\n            revert UnexpectedSender(expectedSender, msg.sender);\\n        }\\n    }\\n\\n    /// @notice Reverts if a certain action is paused on a market\\n    /// @param market Market to check\\n    /// @param action Action to check\\n    function _checkActionPauseState(address market, Action action) private view {\\n        if (actionPaused(market, action)) {\\n            revert ActionPaused(market, action);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x7c6e1c6264e4681f82a9ac1bcd9155197a930033291ee5561ad97a56006f5e9c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\n\\nenum Action {\\n    MINT,\\n    REDEEM,\\n    BORROW,\\n    REPAY,\\n    SEIZE,\\n    LIQUIDATE,\\n    TRANSFER,\\n    ENTER_MARKET,\\n    EXIT_MARKET\\n}\\n\\n/**\\n * @title ComptrollerInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract.\\n */\\ninterface ComptrollerInterface {\\n    /*** Assets You Are In ***/\\n\\n    function enterMarkets(address[] calldata vTokens) external returns (uint256[] memory);\\n\\n    function exitMarket(address vToken) external returns (uint256);\\n\\n    /*** Policy Hooks ***/\\n\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external;\\n\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external;\\n\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external;\\n\\n    function preRepayHook(address vToken, address borrower) external;\\n\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external;\\n\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower\\n    ) external;\\n\\n    function borrowVerify(address vToken, address borrower, uint borrowAmount) external;\\n\\n    function mintVerify(address vToken, address minter, uint mintAmount, uint mintTokens) external;\\n\\n    function redeemVerify(address vToken, address redeemer, uint redeemAmount, uint redeemTokens) external;\\n\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer,\\n        address borrower,\\n        uint repayAmount,\\n        uint borrowerIndex\\n    ) external;\\n\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address liquidator,\\n        address borrower,\\n        uint repayAmount,\\n        uint seizeTokens\\n    ) external;\\n\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower,\\n        uint seizeTokens\\n    ) external;\\n\\n    function transferVerify(address vToken, address src, address dst, uint transferTokens) external;\\n\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external;\\n\\n    function isComptroller() external view returns (bool);\\n\\n    /*** Liquidity/Liquidation Calculations ***/\\n\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 repayAmount\\n    ) external view returns (uint256, uint256);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function actionPaused(address market, Action action) external view returns (bool);\\n}\\n\\n/**\\n * @title ComptrollerViewInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract, including only some util view functions.\\n */\\ninterface ComptrollerViewInterface {\\n    function markets(address) external view returns (bool, uint256);\\n\\n    function oracle() external view returns (ResilientOracleInterface);\\n\\n    function getAssetsIn(address) external view returns (VToken[] memory);\\n\\n    function closeFactorMantissa() external view returns (uint256);\\n\\n    function liquidationIncentiveMantissa() external view returns (uint256);\\n\\n    function minLiquidatableCollateral() external view returns (uint256);\\n\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function borrowCaps(address) external view returns (uint256);\\n\\n    function supplyCaps(address) external view returns (uint256);\\n\\n    function approvedDelegates(address user, address delegate) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xcbf7f9977472650c61345b7cbde23e81f626e1f8863bab4c6ce3dacfc7604919\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\nimport { Action } from \\\"./ComptrollerInterface.sol\\\";\\n\\n/**\\n * @title ComptrollerStorage\\n * @author Venus\\n * @notice Storage layout for the `Comptroller` contract.\\n */\\ncontract ComptrollerStorage {\\n    struct LiquidationOrder {\\n        VToken vTokenCollateral;\\n        VToken vTokenBorrowed;\\n        uint256 repayAmount;\\n    }\\n\\n    struct AccountLiquiditySnapshot {\\n        uint256 totalCollateral;\\n        uint256 weightedCollateral;\\n        uint256 borrows;\\n        uint256 effects;\\n        uint256 liquidity;\\n        uint256 shortfall;\\n    }\\n\\n    struct RewardSpeeds {\\n        address rewardToken;\\n        uint256 supplySpeed;\\n        uint256 borrowSpeed;\\n    }\\n\\n    struct Market {\\n        // Whether or not this market is listed\\n        bool isListed;\\n        //  Multiplier representing the most one can borrow against their collateral in this market.\\n        //  For instance, 0.9 to allow borrowing 90% of collateral value.\\n        //  Must be between 0 and 1, and stored as a mantissa.\\n        uint256 collateralFactorMantissa;\\n        //  Multiplier representing the collateralization after which the borrow is eligible\\n        //  for liquidation. For instance, 0.8 liquidate when the borrow is 80% of collateral\\n        //  value. Must be between 0 and collateral factor, stored as a mantissa.\\n        uint256 liquidationThresholdMantissa;\\n        // Per-market mapping of \\\"accounts in this asset\\\"\\n        mapping(address => bool) accountMembership;\\n    }\\n\\n    /**\\n     * @notice Oracle which gives the price of any given asset\\n     */\\n    ResilientOracleInterface public oracle;\\n\\n    /**\\n     * @notice Multiplier used to calculate the maximum repayAmount when liquidating a borrow\\n     */\\n    uint256 public closeFactorMantissa;\\n\\n    /**\\n     * @notice Multiplier representing the discount on collateral that a liquidator receives\\n     */\\n    uint256 public liquidationIncentiveMantissa;\\n\\n    /**\\n     * @notice Per-account mapping of \\\"assets you are in\\\"\\n     */\\n    mapping(address => VToken[]) public accountAssets;\\n\\n    /**\\n     * @notice Official mapping of vTokens -> Market metadata\\n     * @dev Used e.g. to determine if a market is supported\\n     */\\n    mapping(address => Market) public markets;\\n\\n    /// @notice A list of all markets\\n    VToken[] public allMarkets;\\n\\n    /// @notice Borrow caps enforced by borrowAllowed for each vToken address. Defaults to zero which restricts borrowing.\\n    mapping(address => uint256) public borrowCaps;\\n\\n    /// @notice Minimal collateral required for regular (non-batch) liquidations\\n    uint256 public minLiquidatableCollateral;\\n\\n    /// @notice Supply caps enforced by mintAllowed for each vToken address. Defaults to zero which corresponds to minting not allowed\\n    mapping(address => uint256) public supplyCaps;\\n\\n    /// @notice True if a certain action is paused on a certain market\\n    mapping(address => mapping(Action => bool)) internal _actionPaused;\\n\\n    // List of Reward Distributors added\\n    RewardsDistributor[] internal rewardsDistributors;\\n\\n    // Used to check if rewards distributor is added\\n    mapping(address => bool) internal rewardsDistributorExists;\\n\\n    /// @notice Flag indicating whether forced liquidation enabled for a market\\n    mapping(address => bool) public isForcedLiquidationEnabled;\\n\\n    uint256 internal constant NO_ERROR = 0;\\n\\n    // closeFactorMantissa must be strictly greater than this value\\n    uint256 internal constant MIN_CLOSE_FACTOR_MANTISSA = 0.05e18; // 0.05\\n\\n    // closeFactorMantissa must not exceed this value\\n    uint256 internal constant MAX_CLOSE_FACTOR_MANTISSA = 0.9e18; // 0.9\\n\\n    // No collateralFactorMantissa may exceed this value\\n    uint256 internal constant MAX_COLLATERAL_FACTOR_MANTISSA = 0.95e18; // 0.95\\n\\n    /// Prime token address\\n    IPrime public prime;\\n\\n    /// @notice Whether the delegate is allowed to borrow or redeem on behalf of the user\\n    //mapping(address user => mapping (address delegate => bool approved)) public approvedDelegates;\\n    mapping(address => mapping(address => bool)) public approvedDelegates;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4df44cb65ac152bac2be4b4545430e703005a74a55b72e144100b16421bd8bfd\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title TokenErrorReporter\\n * @author Venus\\n * @notice Errors that can be thrown by the `VToken` contract.\\n */\\ncontract TokenErrorReporter {\\n    uint256 public constant NO_ERROR = 0; // support legacy return codes\\n\\n    error TransferNotAllowed();\\n\\n    error MintFreshnessCheck();\\n\\n    error RedeemFreshnessCheck();\\n    error RedeemTransferOutNotPossible();\\n\\n    error BorrowFreshnessCheck();\\n    error BorrowCashNotAvailable();\\n    error DelegateNotApproved();\\n\\n    error RepayBorrowFreshnessCheck();\\n\\n    error HealBorrowUnauthorized();\\n    error ForceLiquidateBorrowUnauthorized();\\n\\n    error LiquidateFreshnessCheck();\\n    error LiquidateCollateralFreshnessCheck();\\n    error LiquidateAccrueCollateralInterestFailed(uint256 errorCode);\\n    error LiquidateLiquidatorIsBorrower();\\n    error LiquidateCloseAmountIsZero();\\n    error LiquidateCloseAmountIsUintMax();\\n\\n    error LiquidateSeizeLiquidatorIsBorrower();\\n\\n    error ProtocolSeizeShareTooBig();\\n\\n    error SetReserveFactorFreshCheck();\\n    error SetReserveFactorBoundsCheck();\\n\\n    error AddReservesFactorFreshCheck(uint256 actualAddAmount);\\n\\n    error ReduceReservesFreshCheck();\\n    error ReduceReservesCashNotAvailable();\\n    error ReduceReservesCashValidation();\\n\\n    error SetInterestRateModelFreshCheck();\\n}\\n\",\"keccak256\":\"0x7a7ced1caaac2d9242659ebd50b99f308c725ce958ac9e11f7ada404b1d97a7b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { EXP_SCALE as EXP_SCALE_, MANTISSA_ONE as MANTISSA_ONE_ } from \\\"./lib/constants.sol\\\";\\n\\n/**\\n * @title Exponential module for storing fixed-precision decimals\\n * @author Compound\\n * @notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.\\n *         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:\\n *         `Exp({mantissa: 5100000000000000000})`.\\n */\\ncontract ExponentialNoError {\\n    struct Exp {\\n        uint256 mantissa;\\n    }\\n\\n    struct Double {\\n        uint256 mantissa;\\n    }\\n\\n    uint256 internal constant EXP_SCALE = EXP_SCALE_;\\n    uint256 internal constant DOUBLE_SCALE = 1e36;\\n    uint256 internal constant HALF_EXP_SCALE = EXP_SCALE / 2;\\n    uint256 internal constant MANTISSA_ONE = MANTISSA_ONE_;\\n\\n    /**\\n     * @dev Truncates the given exp to a whole number value.\\n     *      For example, truncate(Exp{mantissa: 15 * EXP_SCALE}) = 15\\n     */\\n    function truncate(Exp memory exp) internal pure returns (uint256) {\\n        // Note: We are not using careful math here as we're performing a division that cannot fail\\n        return exp.mantissa / EXP_SCALE;\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, then truncate to return an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncate(Exp memory a, uint256 scalar) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return truncate(product);\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncateAddUInt(Exp memory a, uint256 scalar, uint256 addend) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return add_(truncate(product), addend);\\n    }\\n\\n    /**\\n     * @dev Checks if first Exp is less than second Exp.\\n     */\\n    function lessThanExp(Exp memory left, Exp memory right) internal pure returns (bool) {\\n        return left.mantissa < right.mantissa;\\n    }\\n\\n    function safe224(uint256 n, string memory errorMessage) internal pure returns (uint224) {\\n        require(n <= type(uint224).max, errorMessage);\\n        return uint224(n);\\n    }\\n\\n    function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) {\\n        require(n <= type(uint32).max, errorMessage);\\n        return uint32(n);\\n    }\\n\\n    function add_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a + b;\\n    }\\n\\n    function sub_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a - b;\\n    }\\n\\n    function mul_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b.mantissa) / EXP_SCALE });\\n    }\\n\\n    function mul_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / EXP_SCALE;\\n    }\\n\\n    function mul_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b.mantissa) / DOUBLE_SCALE });\\n    }\\n\\n    function mul_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / DOUBLE_SCALE;\\n    }\\n\\n    function mul_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a * b;\\n    }\\n\\n    function div_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(mul_(a.mantissa, EXP_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, EXP_SCALE), b.mantissa);\\n    }\\n\\n    function div_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a.mantissa, DOUBLE_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, DOUBLE_SCALE), b.mantissa);\\n    }\\n\\n    function div_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a / b;\\n    }\\n\\n    function fraction(uint256 a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a, DOUBLE_SCALE), b) });\\n    }\\n}\\n\",\"keccak256\":\"0x8afbe8a24fe3539c124e718681ed3dcebd24c40dd53095786c0155998213b9b0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title Compound's InterestRateModel Interface\\n * @author Compound\\n */\\nabstract contract InterestRateModel {\\n    /**\\n     * @notice Calculates the current borrow interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getBorrowRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Calculates the current supply interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param reserveFactorMantissa The current reserve factor the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getSupplyRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 reserveFactorMantissa,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is an InterestRateModel contract (for inspection)\\n     * @return Always true\\n     */\\n    function isInterestRateModel() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0xc4fda1ab75ebe4b187b707c4f10c58780f343cf343c537f641dc75d3cd28ab51\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title MaxLoopsLimitHelper\\n * @author Venus\\n * @notice Abstract contract used to avoid collection with too many items that would generate gas errors and DoS.\\n */\\nabstract contract MaxLoopsLimitHelper {\\n    // Limit for the loops to avoid the DOS\\n    uint256 public maxLoopsLimit;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when max loops limit is set\\n    event MaxLoopsLimitUpdated(uint256 oldMaxLoopsLimit, uint256 newmaxLoopsLimit);\\n\\n    /// @notice Thrown an error on maxLoopsLimit exceeds for any loop\\n    error MaxLoopsLimitExceeded(uint256 loopsLimit, uint256 requiredLoops);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function _setMaxLoopsLimit(uint256 limit) internal {\\n        require(limit > maxLoopsLimit, \\\"Comptroller: Invalid maxLoopsLimit\\\");\\n\\n        uint256 oldMaxLoopsLimit = maxLoopsLimit;\\n        maxLoopsLimit = limit;\\n\\n        emit MaxLoopsLimitUpdated(oldMaxLoopsLimit, limit);\\n    }\\n\\n    /**\\n     * @notice Compare the maxLoopsLimit with number of the times loop iterate\\n     * @param len Length of the loops iterate\\n     * @custom:error MaxLoopsLimitExceeded error is thrown when loops length exceeds maxLoopsLimit\\n     */\\n    function _ensureMaxLoops(uint256 len) internal view {\\n        if (len > maxLoopsLimit) {\\n            revert MaxLoopsLimitExceeded(maxLoopsLimit, len);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x4c25e30635485d162177effa384eee51768b0141a567a0da16ff6ad673274166\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\n\\nimport { ExponentialNoError } from \\\"../ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"../VToken.sol\\\";\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"../MaxLoopsLimitHelper.sol\\\";\\nimport { RewardsDistributorStorage } from \\\"./RewardsDistributorStorage.sol\\\";\\n\\n/**\\n * @title `RewardsDistributor`\\n * @author Venus\\n * @notice Contract used to configure, track and distribute rewards to users based on their actions (borrows and supplies) in the protocol.\\n * Users can receive additional rewards through a `RewardsDistributor`. Each `RewardsDistributor` proxy is initialized with a specific reward\\n * token and `Comptroller`, which can then distribute the reward token to users that supply or borrow in the associated pool.\\n * Authorized users can set the reward token borrow and supply speeds for each market in the pool. This sets a fixed amount of reward\\n * token to be released each slot (block or second) for borrowers and suppliers, which is distributed based on a user\\u2019s percentage of the borrows or supplies\\n * respectively. The owner can also set up reward distributions to contributor addresses (distinct from suppliers and borrowers) by setting\\n * their contributor reward token speed, which similarly allocates a fixed amount of reward token per slot (block or second).\\n *\\n * The owner has the ability to transfer any amount of reward tokens held by the contract to any other address. Rewards are not distributed\\n * automatically and must be claimed by a user calling `claimRewardToken()`. Users should be aware that it is up to the owner and other centralized\\n * entities to ensure that the `RewardsDistributor` holds enough tokens to distribute the accumulated rewards of users and contributors.\\n */\\ncontract RewardsDistributor is\\n    ExponentialNoError,\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    MaxLoopsLimitHelper,\\n    RewardsDistributorStorage,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    /// @notice The initial REWARD TOKEN index for a market\\n    uint224 public constant INITIAL_INDEX = 1e36;\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a supplier\\n    event DistributedSupplierRewardToken(\\n        VToken indexed vToken,\\n        address indexed supplier,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenSupplyIndex\\n    );\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a borrower\\n    event DistributedBorrowerRewardToken(\\n        VToken indexed vToken,\\n        address indexed borrower,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenBorrowIndex\\n    );\\n\\n    /// @notice Emitted when a new supply-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenSupplySpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when a new borrow-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenBorrowSpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when REWARD TOKEN is granted by admin\\n    event RewardTokenGranted(address indexed recipient, uint256 amount);\\n\\n    /// @notice Emitted when a new REWARD TOKEN speed is set for a contributor\\n    event ContributorRewardTokenSpeedUpdated(address indexed contributor, uint256 newSpeed);\\n\\n    /// @notice Emitted when a market is initialized\\n    event MarketInitialized(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token supply index is updated\\n    event RewardTokenSupplyIndexUpdated(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token borrow index is updated\\n    event RewardTokenBorrowIndexUpdated(address indexed vToken, Exp marketBorrowIndex);\\n\\n    /// @notice Emitted when a reward for contributor is updated\\n    event ContributorRewardsUpdated(address indexed contributor, uint256 rewardAccrued);\\n\\n    /// @notice Emitted when a reward token last rewarding block for supply is updated\\n    event SupplyLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding block for borrow is updated\\n    event BorrowLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for supply is updated\\n    event SupplyLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for borrow is updated\\n    event BorrowLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    modifier onlyComptroller() {\\n        require(address(comptroller) == msg.sender, \\\"Only comptroller can call this function\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice RewardsDistributor initializer\\n     * @dev Initializes the deployer to owner\\n     * @param comptroller_ Comptroller to attach the reward distributor to\\n     * @param rewardToken_ Reward token to distribute\\n     * @param loopsLimit_ Maximum number of iterations for the loops in this contract\\n     * @param accessControlManager_ AccessControlManager contract address\\n     */\\n    function initialize(\\n        Comptroller comptroller_,\\n        IERC20Upgradeable rewardToken_,\\n        uint256 loopsLimit_,\\n        address accessControlManager_\\n    ) external initializer {\\n        comptroller = comptroller_;\\n        rewardToken = rewardToken_;\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n\\n        _setMaxLoopsLimit(loopsLimit_);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken\\n     * @param vToken The address of the vToken to be initialized\\n     * @custom:event MarketInitialized emits on success\\n     * @custom:access Only Comptroller\\n     */\\n    function initializeMarket(address vToken) external onlyComptroller {\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        isTimeBased\\n            ? _initializeMarketTimestampBased(vToken, blockNumberOrTimestamp)\\n            : _initializeMarketBlockBased(vToken, safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\"));\\n\\n        emit MarketInitialized(vToken);\\n    }\\n\\n    /*** Reward Token Distribution ***/\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them\\n     *         Borrowers will begin to accrue after the first interaction with the protocol.\\n     * @dev This function should only be called when the user has a borrow position in the market\\n     *      (e.g. Comptroller.preBorrowHook, and Comptroller.preRepayHook)\\n     *      We avoid an external call to check if they are in the market to save gas because this function is called in many places\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function distributeBorrowerRewardToken(\\n        address vToken,\\n        address borrower,\\n        Exp memory marketBorrowIndex\\n    ) external onlyComptroller {\\n        _distributeBorrowerRewardToken(vToken, borrower, marketBorrowIndex);\\n    }\\n\\n    function updateRewardTokenSupplyIndex(address vToken) external onlyComptroller {\\n        _updateRewardTokenSupplyIndex(vToken);\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the recipient\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all\\n     * @param recipient The address of the recipient to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     */\\n    function grantRewardToken(address recipient, uint256 amount) external onlyOwner {\\n        uint256 amountLeft = _grantRewardToken(recipient, amount);\\n        require(amountLeft == 0, \\\"insufficient rewardToken for grant\\\");\\n        emit RewardTokenGranted(recipient, amount);\\n    }\\n\\n    function updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) external onlyComptroller {\\n        _updateRewardTokenBorrowIndex(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN borrow and supply speeds for the specified markets\\n     * @param vTokens The markets whose REWARD TOKEN speed to update\\n     * @param supplySpeeds New supply-side REWARD TOKEN speed for the corresponding market\\n     * @param borrowSpeeds New borrow-side REWARD TOKEN speed for the corresponding market\\n     */\\n    function setRewardTokenSpeeds(\\n        VToken[] memory vTokens,\\n        uint256[] memory supplySpeeds,\\n        uint256[] memory borrowSpeeds\\n    ) external {\\n        _checkAccessAllowed(\\\"setRewardTokenSpeeds(address[],uint256[],uint256[])\\\");\\n        uint256 numTokens = vTokens.length;\\n        require(numTokens == supplySpeeds.length && numTokens == borrowSpeeds.length, \\\"invalid setRewardTokenSpeeds\\\");\\n\\n        for (uint256 i; i < numTokens; ++i) {\\n            _setRewardTokenSpeed(vTokens[i], supplySpeeds[i], borrowSpeeds[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for the specified markets, used when contract is block based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlocks New supply-side REWARD TOKEN last rewarding block for the corresponding market\\n     * @param borrowLastRewardingBlocks New borrow-side REWARD TOKEN last rewarding block for the corresponding market\\n     */\\n    function setLastRewardingBlocks(\\n        VToken[] calldata vTokens,\\n        uint32[] calldata supplyLastRewardingBlocks,\\n        uint32[] calldata borrowLastRewardingBlocks\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlocks(address[],uint32[],uint32[])\\\");\\n        require(!isTimeBased, \\\"Block-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlocks.length && numTokens == borrowLastRewardingBlocks.length,\\n            \\\"RewardsDistributor::setLastRewardingBlocks invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlock(vTokens[i], supplyLastRewardingBlocks[i], borrowLastRewardingBlocks[i]);\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block timestamp for the specified markets, used when contract is time based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlockTimestamps New supply-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     * @param borrowLastRewardingBlockTimestamps New borrow-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     */\\n    function setLastRewardingBlockTimestamps(\\n        VToken[] calldata vTokens,\\n        uint256[] calldata supplyLastRewardingBlockTimestamps,\\n        uint256[] calldata borrowLastRewardingBlockTimestamps\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])\\\");\\n        require(isTimeBased, \\\"Time-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlockTimestamps.length &&\\n                numTokens == borrowLastRewardingBlockTimestamps.length,\\n            \\\"RewardsDistributor::setLastRewardingBlockTimestamps invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlockTimestamp(\\n                vTokens[i],\\n                supplyLastRewardingBlockTimestamps[i],\\n                borrowLastRewardingBlockTimestamps[i]\\n            );\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single contributor\\n     * @param contributor The contributor whose REWARD TOKEN speed to update\\n     * @param rewardTokenSpeed New REWARD TOKEN speed for contributor\\n     */\\n    function setContributorRewardTokenSpeed(address contributor, uint256 rewardTokenSpeed) external onlyOwner {\\n        // note that REWARD TOKEN speed could be set to 0 to halt liquidity rewards for a contributor\\n        updateContributorRewards(contributor);\\n        if (rewardTokenSpeed == 0) {\\n            // release storage\\n            delete lastContributorBlock[contributor];\\n        } else {\\n            lastContributorBlock[contributor] = getBlockNumberOrTimestamp();\\n        }\\n        rewardTokenContributorSpeeds[contributor] = rewardTokenSpeed;\\n\\n        emit ContributorRewardTokenSpeedUpdated(contributor, rewardTokenSpeed);\\n    }\\n\\n    function distributeSupplierRewardToken(address vToken, address supplier) external onlyComptroller {\\n        _distributeSupplierRewardToken(vToken, supplier);\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in all markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     */\\n    function claimRewardToken(address holder) external {\\n        return claimRewardToken(holder, comptroller.getAllMarkets());\\n    }\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Calculate additional accrued REWARD TOKEN for a contributor since last accrual\\n     * @param contributor The address to calculate contributor rewards for\\n     */\\n    function updateContributorRewards(address contributor) public {\\n        uint256 rewardTokenSpeed = rewardTokenContributorSpeeds[contributor];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n        uint256 deltaBlocksOrTimestamp = sub_(blockNumberOrTimestamp, lastContributorBlock[contributor]);\\n        if (deltaBlocksOrTimestamp > 0 && rewardTokenSpeed > 0) {\\n            uint256 newAccrued = mul_(deltaBlocksOrTimestamp, rewardTokenSpeed);\\n            uint256 contributorAccrued = add_(rewardTokenAccrued[contributor], newAccrued);\\n\\n            rewardTokenAccrued[contributor] = contributorAccrued;\\n            lastContributorBlock[contributor] = blockNumberOrTimestamp;\\n\\n            emit ContributorRewardsUpdated(contributor, rewardTokenAccrued[contributor]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in the specified markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     * @param vTokens The list of markets to claim REWARD TOKEN in\\n     */\\n    function claimRewardToken(address holder, VToken[] memory vTokens) public {\\n        uint256 vTokensCount = vTokens.length;\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            VToken vToken = vTokens[i];\\n            require(comptroller.isMarketListed(vToken), \\\"market must be listed\\\");\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n            _distributeBorrowerRewardToken(address(vToken), holder, borrowIndex);\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n            _distributeSupplierRewardToken(address(vToken), holder);\\n        }\\n        rewardTokenAccrued[holder] = _grantRewardToken(holder, rewardTokenAccrued[holder]);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for a single market.\\n     * @param vToken market's whose reward token last rewarding block to be updated\\n     * @param supplyLastRewardingBlock New supply-side REWARD TOKEN last rewarding block for market\\n     * @param borrowLastRewardingBlock New borrow-side REWARD TOKEN last rewarding block for market\\n     */\\n    function _setLastRewardingBlock(\\n        VToken vToken,\\n        uint32 supplyLastRewardingBlock,\\n        uint32 borrowLastRewardingBlock\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockNumber = getBlockNumberOrTimestamp();\\n\\n        require(supplyLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n        require(borrowLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n\\n        uint32 currentSupplyLastRewardingBlock = rewardTokenSupplyState[address(vToken)].lastRewardingBlock;\\n        uint32 currentBorrowLastRewardingBlock = rewardTokenBorrowState[address(vToken)].lastRewardingBlock;\\n\\n        require(\\n            currentSupplyLastRewardingBlock == 0 || currentSupplyLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlock == 0 || currentBorrowLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlock != supplyLastRewardingBlock) {\\n            rewardTokenSupplyState[address(vToken)].lastRewardingBlock = supplyLastRewardingBlock;\\n            emit SupplyLastRewardingBlockUpdated(address(vToken), supplyLastRewardingBlock);\\n        }\\n\\n        if (currentBorrowLastRewardingBlock != borrowLastRewardingBlock) {\\n            rewardTokenBorrowState[address(vToken)].lastRewardingBlock = borrowLastRewardingBlock;\\n            emit BorrowLastRewardingBlockUpdated(address(vToken), borrowLastRewardingBlock);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding timestamp for a single market.\\n     * @param vToken market's whose reward token last rewarding timestamp to be updated\\n     * @param supplyLastRewardingBlockTimestamp New supply-side REWARD TOKEN last rewarding timestamp for market\\n     * @param borrowLastRewardingBlockTimestamp New borrow-side REWARD TOKEN last rewarding timestamp for market\\n     */\\n    function _setLastRewardingBlockTimestamp(\\n        VToken vToken,\\n        uint256 supplyLastRewardingBlockTimestamp,\\n        uint256 borrowLastRewardingBlockTimestamp\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockTimestamp = getBlockNumberOrTimestamp();\\n\\n        require(\\n            supplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n        require(\\n            borrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n\\n        uint256 currentSupplyLastRewardingBlockTimestamp = rewardTokenSupplyStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n        uint256 currentBorrowLastRewardingBlockTimestamp = rewardTokenBorrowStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n\\n        require(\\n            currentSupplyLastRewardingBlockTimestamp == 0 || currentSupplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlockTimestamp == 0 || currentBorrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlockTimestamp != supplyLastRewardingBlockTimestamp) {\\n            rewardTokenSupplyStateTimeBased[address(vToken)].lastRewardingTimestamp = supplyLastRewardingBlockTimestamp;\\n            emit SupplyLastRewardingBlockTimestampUpdated(address(vToken), supplyLastRewardingBlockTimestamp);\\n        }\\n\\n        if (currentBorrowLastRewardingBlockTimestamp != borrowLastRewardingBlockTimestamp) {\\n            rewardTokenBorrowStateTimeBased[address(vToken)].lastRewardingTimestamp = borrowLastRewardingBlockTimestamp;\\n            emit BorrowLastRewardingBlockTimestampUpdated(address(vToken), borrowLastRewardingBlockTimestamp);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single market.\\n     * @param vToken market's whose reward token rate to be updated\\n     * @param supplySpeed New supply-side REWARD TOKEN speed for market\\n     * @param borrowSpeed New borrow-side REWARD TOKEN speed for market\\n     */\\n    function _setRewardTokenSpeed(VToken vToken, uint256 supplySpeed, uint256 borrowSpeed) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        if (rewardTokenSupplySpeeds[address(vToken)] != supplySpeed) {\\n            // Supply speed updated so let's update supply state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n\\n            // Update speed and emit event\\n            rewardTokenSupplySpeeds[address(vToken)] = supplySpeed;\\n            emit RewardTokenSupplySpeedUpdated(vToken, supplySpeed);\\n        }\\n\\n        if (rewardTokenBorrowSpeeds[address(vToken)] != borrowSpeed) {\\n            // Borrow speed updated so let's update borrow state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n\\n            // Update speed and emit event\\n            rewardTokenBorrowSpeeds[address(vToken)] = borrowSpeed;\\n            emit RewardTokenBorrowSpeedUpdated(vToken, borrowSpeed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculate REWARD TOKEN accrued by a supplier and possibly transfer it to them.\\n     * @param vToken The market in which the supplier is interacting\\n     * @param supplier The address of the supplier to distribute REWARD TOKEN to\\n     */\\n    function _distributeSupplierRewardToken(address vToken, address supplier) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n        uint256 supplierIndex = rewardTokenSupplierIndex[vToken][supplier];\\n\\n        // Update supplier's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenSupplierIndex[vToken][supplier] = supplyIndex;\\n\\n        if (supplierIndex == 0 && supplyIndex >= INITIAL_INDEX) {\\n            // Covers the case where users supplied tokens before the market's supply state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when supplier rewards were first\\n            // set for the market.\\n            supplierIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per vToken accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(supplyIndex, supplierIndex) });\\n\\n        uint256 supplierTokens = VToken(vToken).balanceOf(supplier);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerVToken\\n        uint256 supplierDelta = mul_(supplierTokens, deltaIndex);\\n\\n        uint256 supplierAccrued = add_(rewardTokenAccrued[supplier], supplierDelta);\\n        rewardTokenAccrued[supplier] = supplierAccrued;\\n\\n        emit DistributedSupplierRewardToken(VToken(vToken), supplier, supplierDelta, supplierAccrued, supplyIndex);\\n    }\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them.\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function _distributeBorrowerRewardToken(address vToken, address borrower, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n        uint256 borrowerIndex = rewardTokenBorrowerIndex[vToken][borrower];\\n\\n        // Update borrowers's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenBorrowerIndex[vToken][borrower] = borrowIndex;\\n\\n        if (borrowerIndex == 0 && borrowIndex >= INITIAL_INDEX) {\\n            // Covers the case where users borrowed tokens before the market's borrow state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when borrower rewards were first\\n            // set for the market.\\n            borrowerIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per borrowed unit accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(borrowIndex, borrowerIndex) });\\n\\n        uint256 borrowerAmount = div_(VToken(vToken).borrowBalanceStored(borrower), marketBorrowIndex);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerBorrowedUnit\\n        if (borrowerAmount != 0) {\\n            uint256 borrowerDelta = mul_(borrowerAmount, deltaIndex);\\n\\n            uint256 borrowerAccrued = add_(rewardTokenAccrued[borrower], borrowerDelta);\\n            rewardTokenAccrued[borrower] = borrowerAccrued;\\n\\n            emit DistributedBorrowerRewardToken(VToken(vToken), borrower, borrowerDelta, borrowerAccrued, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the user.\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all.\\n     * @param user The address of the user to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     * @return The amount of REWARD TOKEN which was NOT transferred to the user\\n     */\\n    function _grantRewardToken(address user, uint256 amount) internal returns (uint256) {\\n        uint256 rewardTokenRemaining = rewardToken.balanceOf(address(this));\\n        if (amount > 0 && amount <= rewardTokenRemaining) {\\n            rewardToken.safeTransfer(user, amount);\\n            return 0;\\n        }\\n        return amount;\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the supply index\\n     * @param vToken The market whose supply index to update\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenSupplyIndex(address vToken) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplySpeed = rewardTokenSupplySpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? supplyStateTimeBased.lastRewardingTimestamp\\n            : uint256(supplyState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? supplyStateTimeBased.timestamp : uint256(supplyState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && supplySpeed > 0) {\\n            uint256 supplyTokens = VToken(vToken).totalSupply();\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, supplySpeed);\\n            Double memory ratio = supplyTokens > 0\\n                ? fraction(accruedSinceUpdate, supplyTokens)\\n                : Double({ mantissa: 0 });\\n            uint224 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: supplyIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                supplyStateTimeBased.index = index;\\n                supplyStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                supplyState.index = index;\\n                supplyState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            isTimeBased ? supplyStateTimeBased.timestamp = blockNumberOrTimestamp : supplyState.block = uint32(\\n                blockNumberOrTimestamp\\n            );\\n        }\\n\\n        emit RewardTokenSupplyIndexUpdated(vToken);\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the borrow index\\n     * @param vToken The market whose borrow index to update\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowSpeed = rewardTokenBorrowSpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? borrowStateTimeBased.lastRewardingTimestamp\\n            : uint256(borrowState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? borrowStateTimeBased.timestamp : uint256(borrowState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && borrowSpeed > 0) {\\n            uint256 borrowAmount = div_(VToken(vToken).totalBorrows(), marketBorrowIndex);\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, borrowSpeed);\\n            Double memory ratio = borrowAmount > 0\\n                ? fraction(accruedSinceUpdate, borrowAmount)\\n                : Double({ mantissa: 0 });\\n            uint224 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: borrowIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                borrowStateTimeBased.index = index;\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.index = index;\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            if (isTimeBased) {\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        }\\n\\n        emit RewardTokenBorrowIndexUpdated(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is block-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockNumber current block number\\n     */\\n    function _initializeMarketBlockBased(address vToken, uint32 blockNumber) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block numbers\\n         */\\n        supplyState.block = borrowState.block = blockNumber;\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is time-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockTimestamp current block timestamp\\n     */\\n    function _initializeMarketTimestampBased(address vToken, uint256 blockTimestamp) internal {\\n        TimeBasedRewardToken storage supplyState = rewardTokenSupplyStateTimeBased[vToken];\\n        TimeBasedRewardToken storage borrowState = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block timestamp\\n         */\\n        supplyState.timestamp = borrowState.timestamp = blockTimestamp;\\n    }\\n}\\n\",\"keccak256\":\"0x3cc824e59c923cfe25c4f1a875959b7e9410cde8e73cd405de13f301298c697f\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\n\\n/**\\n * @title RewardsDistributorStorage\\n * @author Venus\\n * @dev Storage for RewardsDistributor\\n */\\ncontract RewardsDistributorStorage {\\n    struct RewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block number the index was last updated at\\n        uint32 block;\\n        // The block number at which to stop rewards\\n        uint32 lastRewardingBlock;\\n    }\\n\\n    struct TimeBasedRewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block timestamp the index was last updated at\\n        uint256 timestamp;\\n        // The block timestamp at which to stop rewards\\n        uint256 lastRewardingTimestamp;\\n    }\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => RewardToken) public rewardTokenSupplyState;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each supplier as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenSupplierIndex;\\n\\n    /// @notice The REWARD TOKEN accrued but not yet transferred to each user\\n    mapping(address => uint256) public rewardTokenAccrued;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding borrow market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenBorrowSpeeds;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding supply market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenSupplySpeeds;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => RewardToken) public rewardTokenBorrowState;\\n\\n    /// @notice The portion of REWARD TOKEN that each contributor receives per slot (block or second)\\n    mapping(address => uint256) public rewardTokenContributorSpeeds;\\n\\n    /// @notice Last slot (block or second) at which a contributor's REWARD TOKEN rewards have been allocated\\n    mapping(address => uint256) public lastContributorBlock;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each borrower as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenBorrowerIndex;\\n\\n    Comptroller internal comptroller;\\n\\n    IERC20Upgradeable public rewardToken;\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenSupplyStateTimeBased;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenBorrowStateTimeBased;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[37] private __gap;\\n}\\n\",\"keccak256\":\"0x70e5015a78a2acf95277949c8b4796e10b9ac194130be006d5e5217e158070c0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VToken.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IProtocolShareReserve } from \\\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\\\";\\n\\nimport { VTokenInterface } from \\\"./VTokenInterfaces.sol\\\";\\nimport { ComptrollerInterface, ComptrollerViewInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { TokenErrorReporter } from \\\"./ErrorReporter.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title VToken\\n * @author Venus\\n * @notice Each asset that is supported by a pool is integrated through an instance of the `VToken` contract. As outlined in the protocol overview,\\n * each isolated pool creates its own `vToken` corresponding to an asset. Within a given pool, each included `vToken` is referred to as a market of\\n * the pool. The main actions a user regularly interacts with in a market are:\\n\\n- mint/redeem of vTokens;\\n- transfer of vTokens;\\n- borrow/repay a loan on an underlying asset;\\n- liquidate a borrow or liquidate/heal an account.\\n\\n * A user supplies the underlying asset to a pool by minting `vTokens`, where the corresponding `vToken` amount is determined by the `exchangeRate`.\\n * The `exchangeRate` will change over time, dependent on a number of factors, some of which accrue interest. Additionally, once users have minted\\n * `vToken` in a pool, they can borrow any asset in the isolated pool by using their `vToken` as collateral. In order to borrow an asset or use a `vToken`\\n * as collateral, the user must be entered into each corresponding market (else, the `vToken` will not be considered collateral for a borrow). Note that\\n * a user may borrow up to a portion of their collateral determined by the market\\u2019s collateral factor. However, if their borrowed amount exceeds an amount\\n * calculated using the market\\u2019s corresponding liquidation threshold, the borrow is eligible for liquidation. When a user repays a borrow, they must also\\n * pay off interest accrued on the borrow.\\n * \\n * The Venus protocol includes unique mechanisms for healing an account and liquidating an account. These actions are performed in the `Comptroller`\\n * and consider all borrows and collateral for which a given account is entered within a market. These functions may only be called on an account with a\\n * total collateral amount that is no larger than a universal `minLiquidatableCollateral` value, which is used for all markets within a `Comptroller`.\\n * Both functions settle all of an account\\u2019s borrows, but `healAccount()` may add `badDebt` to a vToken. For more detail, see the description of\\n * `healAccount()` and `liquidateAccount()` in the `Comptroller` summary section below.\\n */\\ncontract VToken is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    VTokenInterface,\\n    ExponentialNoError,\\n    TokenErrorReporter,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    uint256 internal constant DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA = 5e16; // 5%\\n\\n    // Maximum fraction of interest that can be set aside for reserves\\n    uint256 internal constant MAX_RESERVE_FACTOR_MANTISSA = 1e18;\\n\\n    // Maximum borrow rate that can ever be applied per slot(block or second)\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 internal immutable MAX_BORROW_RATE_MANTISSA;\\n\\n    /**\\n     * Reentrancy Guard **\\n     */\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     */\\n    modifier nonReentrant() {\\n        require(_notEntered, \\\"re-entered\\\");\\n        _notEntered = false;\\n        _;\\n        _notEntered = true; // get a gas-refund post-Istanbul\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @param maxBorrowRateMantissa_ The maximum value of borrowing rate mantissa\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(\\n        bool timeBased_,\\n        uint256 blocksPerYear_,\\n        uint256 maxBorrowRateMantissa_\\n    ) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        require(maxBorrowRateMantissa_ <= 1e18, \\\"Max borrow rate must be <= 1e18\\\");\\n\\n        MAX_BORROW_RATE_MANTISSA = maxBorrowRateMantissa_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice Construct a new money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     * @custom:error ZeroAddressNotAllowed is thrown when admin address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     */\\n    function initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) external initializer {\\n        ensureNonzeroAddress(admin_);\\n\\n        // Initialize the market\\n        _initialize(\\n            underlying_,\\n            comptroller_,\\n            interestRateModel_,\\n            initialExchangeRateMantissa_,\\n            name_,\\n            symbol_,\\n            decimals_,\\n            admin_,\\n            accessControlManager_,\\n            riskManagement,\\n            reserveFactorMantissa_\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `msg.sender` to `dst`\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transfer(address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `src` to `dst`\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transferFrom(address src, address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, src, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Approve `spender` to transfer up to `amount` from `src`\\n     * @dev This will overwrite the approval amount for `spender`\\n     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\\n     * @param spender The address of the account which may transfer tokens\\n     * @param amount The number of tokens that are approved (uint256.max means infinite)\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function approve(address spender, uint256 amount) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        transferAllowances[src][spender] = amount;\\n        emit Approval(src, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Increase approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param addedValue The number of additional tokens spender can transfer\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 newAllowance = transferAllowances[src][spender];\\n        newAllowance += addedValue;\\n        transferAllowances[src][spender] = newAllowance;\\n\\n        emit Approval(src, spender, newAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Decreases approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param subtractedValue The number of tokens to remove from total approval\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 currentAllowance = transferAllowances[src][spender];\\n        require(currentAllowance >= subtractedValue, \\\"decreased allowance below zero\\\");\\n        unchecked {\\n            currentAllowance -= subtractedValue;\\n        }\\n\\n        transferAllowances[src][spender] = currentAllowance;\\n\\n        emit Approval(src, spender, currentAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Get the underlying balance of the `owner`\\n     * @dev This also accrues interest in a transaction\\n     * @param owner The address of the account to query\\n     * @return amount The amount of underlying owned by `owner`\\n     */\\n    function balanceOfUnderlying(address owner) external override returns (uint256) {\\n        Exp memory exchangeRate = Exp({ mantissa: exchangeRateCurrent() });\\n        return mul_ScalarTruncate(exchangeRate, accountTokens[owner]);\\n    }\\n\\n    /**\\n     * @notice Returns the current total borrows plus accrued interest\\n     * @return totalBorrows The total borrows with interest\\n     */\\n    function totalBorrowsCurrent() external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return totalBorrows;\\n    }\\n\\n    /**\\n     * @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\\n     * @param account The address whose balance should be calculated after updating borrowIndex\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceCurrent(address account) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Sender supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function mint(uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, msg.sender, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender calls on-behalf of minter. minter supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param minter User whom the supply will be attributed to\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when minter address is zero\\n     */\\n    function mintBehalf(address minter, uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(minter);\\n\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, minter, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for the underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function redeem(uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer The user on behalf of whom to redeem\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for a specified amount of underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     */\\n    function redeemUnderlying(uint256 redeemAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems underlying assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer, on behalf of whom to redeem\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemUnderlyingBehalf(\\n        address redeemer,\\n        uint256 redeemAmount\\n    ) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets from the protocol to their own address\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function borrow(uint256 borrowAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _borrowFresh(msg.sender, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the borrower using `comptroller.updateDelegate`\\n     * @param borrower The borrower, on behalf of whom to borrow\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error DelegateNotApproved is thrown if caller is not approved delegate\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function borrowBehalf(address borrower, uint256 borrowAmount) external override returns (uint256) {\\n        _ensureSenderIsDelegateOf(borrower);\\n        accrueInterest();\\n\\n        _borrowFresh(borrower, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays their own borrow\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrow(uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, msg.sender, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays a borrow belonging to borrower\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, borrower, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Not restricted\\n     */\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external override returns (uint256) {\\n        _liquidateBorrow(msg.sender, borrower, repayAmount, vTokenCollateral, false);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice sets protocol share accumulated from liquidations\\n     * @dev must be equal or less than liquidation incentive - 1\\n     * @param newProtocolSeizeShareMantissa_ new protocol share mantissa\\n     * @custom:event Emits NewProtocolSeizeShare event on success\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error ProtocolSeizeShareTooBig is thrown when the new seize share is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setProtocolSeizeShare(uint256 newProtocolSeizeShareMantissa_) external {\\n        _checkAccessAllowed(\\\"setProtocolSeizeShare(uint256)\\\");\\n        uint256 liquidationIncentive = ComptrollerViewInterface(address(comptroller)).liquidationIncentiveMantissa();\\n        if (newProtocolSeizeShareMantissa_ + MANTISSA_ONE > liquidationIncentive) {\\n            revert ProtocolSeizeShareTooBig();\\n        }\\n\\n        uint256 oldProtocolSeizeShareMantissa = protocolSeizeShareMantissa;\\n        protocolSeizeShareMantissa = newProtocolSeizeShareMantissa_;\\n        emit NewProtocolSeizeShare(oldProtocolSeizeShareMantissa, newProtocolSeizeShareMantissa_);\\n    }\\n\\n    /**\\n     * @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\\n     * @dev Admin function to accrue interest and set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     * @custom:event Emits NewReserveFactor event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error SetReserveFactorBoundsCheck is thrown when the new reserve factor is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external override nonReentrant {\\n        _checkAccessAllowed(\\\"setReserveFactor(uint256)\\\");\\n\\n        accrueInterest();\\n        _setReserveFactorFresh(newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Accrues interest and reduces reserves by transferring to the protocol reserve contract\\n     * @dev Gracefully return if reserves already reduced in accrueInterest\\n     * @param reduceAmount Amount of reduction to reserves\\n     * @custom:event Emits ReservesReduced event; may emit AccrueInterest\\n     * @custom:error ReduceReservesCashNotAvailable is thrown when the vToken does not have sufficient cash\\n     * @custom:error ReduceReservesCashValidation is thrown when trying to withdraw more cash than the reserves have\\n     * @custom:access Not restricted\\n     */\\n    function reduceReserves(uint256 reduceAmount) external override nonReentrant {\\n        accrueInterest();\\n        if (reduceReservesBlockNumber == getBlockNumberOrTimestamp()) return;\\n        _reduceReservesFresh(reduceAmount);\\n    }\\n\\n    /**\\n     * @notice The sender adds to reserves.\\n     * @param addAmount The amount of underlying token to add as reserves\\n     * @custom:event Emits ReservesAdded event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function addReserves(uint256 addAmount) external override nonReentrant {\\n        accrueInterest();\\n        _addReservesFresh(addAmount);\\n    }\\n\\n    /**\\n     * @notice accrues interest and updates the interest rate model using _setInterestRateModelFresh\\n     * @dev Admin function to accrue interest and update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     * @custom:event Emits NewMarketInterestRateModel event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external override {\\n        _checkAccessAllowed(\\\"setInterestRateModel(address)\\\");\\n\\n        accrueInterest();\\n        _setInterestRateModelFresh(newInterestRateModel);\\n    }\\n\\n    /**\\n     * @notice Repays a certain amount of debt, treats the rest of the borrow as bad debt, essentially\\n     *   \\\"forgiving\\\" the borrower. Healing is a situation that should rarely happen. However, some pools\\n     *   may list risky assets or be configured improperly \\u2013 we want to still handle such cases gracefully.\\n     *   We assume that Comptroller does the seizing, so this function is only available to Comptroller.\\n     * @dev This function does not call any Comptroller hooks (like \\\"healAllowed\\\"), because we assume\\n     *   the Comptroller does all the necessary checks before calling this function.\\n     * @param payer account who repays the debt\\n     * @param borrower account to heal\\n     * @param repayAmount amount to repay\\n     * @custom:event Emits RepayBorrow, BadDebtIncreased events; may emit AccrueInterest\\n     * @custom:error HealBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:access Only Comptroller\\n     */\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external override nonReentrant {\\n        if (repayAmount != 0) {\\n            comptroller.preRepayHook(address(this), borrower);\\n        }\\n\\n        if (msg.sender != address(comptroller)) {\\n            revert HealBorrowUnauthorized();\\n        }\\n\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 totalBorrowsNew = totalBorrows;\\n\\n        uint256 actualRepayAmount;\\n        if (repayAmount != 0) {\\n            // _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n            // We violate checks-effects-interactions here to account for tokens that take transfer fees\\n            actualRepayAmount = _doTransferIn(payer, repayAmount);\\n            totalBorrowsNew = totalBorrowsNew - actualRepayAmount;\\n            emit RepayBorrow(\\n                payer,\\n                borrower,\\n                actualRepayAmount,\\n                accountBorrowsPrev - actualRepayAmount,\\n                totalBorrowsNew\\n            );\\n        }\\n\\n        // The transaction will fail if trying to repay too much\\n        uint256 badDebtDelta = accountBorrowsPrev - actualRepayAmount;\\n        if (badDebtDelta != 0) {\\n            uint256 badDebtOld = badDebt;\\n            uint256 badDebtNew = badDebtOld + badDebtDelta;\\n            totalBorrowsNew = totalBorrowsNew - badDebtDelta;\\n            badDebt = badDebtNew;\\n\\n            // We treat healing as \\\"repayment\\\", where vToken is the payer\\n            emit RepayBorrow(address(this), borrower, badDebtDelta, 0, totalBorrowsNew);\\n            emit BadDebtIncreased(borrower, badDebtDelta, badDebtOld, badDebtNew);\\n        }\\n\\n        accountBorrows[borrower].principal = 0;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        emit HealBorrow(payer, borrower, repayAmount);\\n    }\\n\\n    /**\\n     * @notice The extended version of liquidations, callable only by Comptroller. May skip\\n     *  the close factor check. The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error ForceLiquidateBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Only Comptroller\\n     */\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        if (msg.sender != address(comptroller)) {\\n            revert ForceLiquidateBorrowUnauthorized();\\n        }\\n        _liquidateBorrow(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Will fail unless called by another vToken during the process of liquidation.\\n     *  It's absolutely critical to use msg.sender as the borrowed vToken and not a parameter.\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     * @custom:event Emits Transfer, ReservesAdded events\\n     * @custom:error LiquidateSeizeLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:access Not restricted\\n     */\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external override nonReentrant {\\n        _seize(msg.sender, liquidator, borrower, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Updates bad debt\\n     * @dev Called only when bad debt is recovered from auction\\n     * @param recoveredAmount_ The amount of bad debt recovered\\n     * @custom:event Emits BadDebtRecovered event\\n     * @custom:access Only Shortfall contract\\n     */\\n    function badDebtRecovered(uint256 recoveredAmount_) external {\\n        require(msg.sender == shortfall, \\\"only shortfall contract can update bad debt\\\");\\n        require(recoveredAmount_ <= badDebt, \\\"more than bad debt recovered from auction\\\");\\n\\n        uint256 badDebtOld = badDebt;\\n        uint256 badDebtNew = badDebtOld - recoveredAmount_;\\n        badDebt = badDebtNew;\\n\\n        emit BadDebtRecovered(badDebtOld, badDebtNew);\\n    }\\n\\n    /**\\n     * @notice Sets protocol share reserve contract address\\n     * @param protocolShareReserve_ The address of the protocol share reserve contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setProtocolShareReserve(address payable protocolShareReserve_) external onlyOwner {\\n        _setProtocolShareReserve(protocolShareReserve_);\\n    }\\n\\n    /**\\n     * @notice Sets shortfall contract address\\n     * @param shortfall_ The address of the shortfall contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setShortfallContract(address shortfall_) external onlyOwner {\\n        _setShortfallContract(shortfall_);\\n    }\\n\\n    /**\\n     * @notice A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)\\n     * @param token The address of the ERC-20 token to sweep\\n     * @custom:access Only Governance\\n     */\\n    function sweepToken(IERC20Upgradeable token) external override {\\n        require(msg.sender == owner(), \\\"VToken::sweepToken: only admin can sweep tokens\\\");\\n        require(address(token) != underlying, \\\"VToken::sweepToken: can not sweep underlying token\\\");\\n        uint256 balance = token.balanceOf(address(this));\\n        token.safeTransfer(owner(), balance);\\n\\n        emit SweepToken(address(token));\\n    }\\n\\n    /**\\n     * @notice A public function to set new threshold of slot(block or second) difference after which funds will be sent to the protocol share reserve\\n     * @param _newReduceReservesBlockOrTimestampDelta slot(block or second) difference value\\n     * @custom:access Only Governance\\n     */\\n    function setReduceReservesBlockDelta(uint256 _newReduceReservesBlockOrTimestampDelta) external {\\n        _checkAccessAllowed(\\\"setReduceReservesBlockDelta(uint256)\\\");\\n        require(_newReduceReservesBlockOrTimestampDelta > 0, \\\"Invalid Input\\\");\\n        emit NewReduceReservesBlockDelta(reduceReservesBlockDelta, _newReduceReservesBlockOrTimestampDelta);\\n        reduceReservesBlockDelta = _newReduceReservesBlockOrTimestampDelta;\\n    }\\n\\n    /**\\n     * @notice Get the current allowance from `owner` for `spender`\\n     * @param owner The address of the account which owns the tokens to be spent\\n     * @param spender The address of the account which may transfer tokens\\n     * @return amount The number of tokens allowed to be spent (type(uint256).max means infinite)\\n     */\\n    function allowance(address owner, address spender) external view override returns (uint256) {\\n        return transferAllowances[owner][spender];\\n    }\\n\\n    /**\\n     * @notice Get the token balance of the `owner`\\n     * @param owner The address of the account to query\\n     * @return amount The number of tokens owned by `owner`\\n     */\\n    function balanceOf(address owner) external view override returns (uint256) {\\n        return accountTokens[owner];\\n    }\\n\\n    /**\\n     * @notice Get a snapshot of the account's balances, and the cached exchange rate\\n     * @dev This is used by comptroller to more efficiently perform liquidity checks.\\n     * @param account Address of the account to snapshot\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return vTokenBalance User's balance of vTokens\\n     * @return borrowBalance Amount owed in terms of underlying\\n     * @return exchangeRate Stored exchange rate\\n     */\\n    function getAccountSnapshot(\\n        address account\\n    )\\n        external\\n        view\\n        override\\n        returns (uint256 error, uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRate)\\n    {\\n        return (NO_ERROR, accountTokens[account], _borrowBalanceStored(account), _exchangeRateStored());\\n    }\\n\\n    /**\\n     * @notice Get cash balance of this vToken in the underlying asset\\n     * @return cash The quantity of underlying asset owned by this contract\\n     */\\n    function getCash() external view override returns (uint256) {\\n        return _getCashPrior();\\n    }\\n\\n    /**\\n     * @notice Returns the current per slot(block or second) borrow interest rate for this vToken\\n     * @return rate The borrow interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function borrowRatePerBlock() external view override returns (uint256) {\\n        return interestRateModel.getBorrowRate(_getCashPrior(), totalBorrows, totalReserves, badDebt);\\n    }\\n\\n    /**\\n     * @notice Returns the current per-slot(block or second) supply interest rate for this v\\n     * @return rate The supply interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function supplyRatePerBlock() external view override returns (uint256) {\\n        return\\n            interestRateModel.getSupplyRate(\\n                _getCashPrior(),\\n                totalBorrows,\\n                totalReserves,\\n                reserveFactorMantissa,\\n                badDebt\\n            );\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceStored(address account) external view override returns (uint256) {\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateStored() external view override returns (uint256) {\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Accrue interest then return the up-to-date exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateCurrent() public override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Applies accrued interest to total borrows and reserves\\n     * @dev This calculates interest accrued from the last checkpointed slot(block or second)\\n     *  up to the current slot(block or second) and writes new checkpoint to storage and\\n     *  reduce spread reserves to protocol share reserve\\n     *  if currentSlot - reduceReservesBlockNumber >= slotDelta\\n     * @return Always NO_ERROR\\n     * @custom:event Emits AccrueInterest event on success\\n     * @custom:access Not restricted\\n     */\\n    function accrueInterest() public virtual override returns (uint256) {\\n        /* Remember the initial block number or timestamp */\\n        uint256 currentSlotNumber = getBlockNumberOrTimestamp();\\n        uint256 accrualSlotNumberPrior = accrualBlockNumber;\\n\\n        /* Short-circuit accumulating 0 interest */\\n        if (accrualSlotNumberPrior == currentSlotNumber) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Read the previous values out of storage */\\n        uint256 cashPrior = _getCashPrior();\\n        uint256 borrowsPrior = totalBorrows;\\n        uint256 reservesPrior = totalReserves;\\n        uint256 borrowIndexPrior = borrowIndex;\\n\\n        /* Calculate the current borrow interest rate */\\n        uint256 borrowRateMantissa = interestRateModel.getBorrowRate(cashPrior, borrowsPrior, reservesPrior, badDebt);\\n        require(borrowRateMantissa <= MAX_BORROW_RATE_MANTISSA, \\\"borrow rate is absurdly high\\\");\\n\\n        /* Calculate the number of slots elapsed since the last accrual */\\n        uint256 slotDelta = currentSlotNumber - accrualSlotNumberPrior;\\n\\n        /*\\n         * Calculate the interest accumulated into borrows and reserves and the new index:\\n         *  simpleInterestFactor = borrowRate * slotDelta\\n         *  interestAccumulated = simpleInterestFactor * totalBorrows\\n         *  totalBorrowsNew = interestAccumulated + totalBorrows\\n         *  totalReservesNew = interestAccumulated * reserveFactor + totalReserves\\n         *  borrowIndexNew = simpleInterestFactor * borrowIndex + borrowIndex\\n         */\\n\\n        Exp memory simpleInterestFactor = mul_(Exp({ mantissa: borrowRateMantissa }), slotDelta);\\n        uint256 interestAccumulated = mul_ScalarTruncate(simpleInterestFactor, borrowsPrior);\\n        uint256 totalBorrowsNew = interestAccumulated + borrowsPrior;\\n        uint256 totalReservesNew = mul_ScalarTruncateAddUInt(\\n            Exp({ mantissa: reserveFactorMantissa }),\\n            interestAccumulated,\\n            reservesPrior\\n        );\\n        uint256 borrowIndexNew = mul_ScalarTruncateAddUInt(simpleInterestFactor, borrowIndexPrior, borrowIndexPrior);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the previously calculated values into storage */\\n        accrualBlockNumber = currentSlotNumber;\\n        borrowIndex = borrowIndexNew;\\n        totalBorrows = totalBorrowsNew;\\n        totalReserves = totalReservesNew;\\n\\n        if (currentSlotNumber - reduceReservesBlockNumber >= reduceReservesBlockDelta) {\\n            reduceReservesBlockNumber = currentSlotNumber;\\n            if (cashPrior < totalReservesNew) {\\n                _reduceReservesFresh(cashPrior);\\n            } else {\\n                _reduceReservesFresh(totalReservesNew);\\n            }\\n        }\\n\\n        /* We emit an AccrueInterest event */\\n        emit AccrueInterest(cashPrior, interestAccumulated, borrowIndexNew, totalBorrowsNew);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice User supplies assets into the market and receives vTokens in exchange\\n     * @dev Assumes interest has already been accrued up to the current block or timestamp\\n     * @param payer The address of the account which is sending the assets for supply\\n     * @param minter The address of the account which is supplying the assets\\n     * @param mintAmount The amount of the underlying asset to supply\\n     */\\n    function _mintFresh(address payer, address minter, uint256 mintAmount) internal {\\n        /* Fail if mint not allowed */\\n        comptroller.preMintHook(address(this), minter, mintAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert MintFreshnessCheck();\\n        }\\n\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         *  We call `_doTransferIn` for the minter and the mintAmount.\\n         *  `_doTransferIn` reverts if anything goes wrong, since we can't be sure if\\n         *  side-effects occurred. The function returns the amount actually transferred,\\n         *  in case of a fee. On success, the vToken holds an additional `actualMintAmount`\\n         *  of cash.\\n         */\\n        uint256 actualMintAmount = _doTransferIn(payer, mintAmount);\\n\\n        /*\\n         * We get the current exchange rate and calculate the number of vTokens to be minted:\\n         *  mintTokens = actualMintAmount / exchangeRate\\n         */\\n\\n        uint256 mintTokens = div_(actualMintAmount, exchangeRate);\\n\\n        /*\\n         * We calculate the new total supply of vTokens and minter token balance, checking for overflow:\\n         *  totalSupplyNew = totalSupply + mintTokens\\n         *  accountTokensNew = accountTokens[minter] + mintTokens\\n         * And write them into storage\\n         */\\n        totalSupply = totalSupply + mintTokens;\\n        uint256 balanceAfter = accountTokens[minter] + mintTokens;\\n        accountTokens[minter] = balanceAfter;\\n\\n        /* We emit a Mint event, and a Transfer event */\\n        emit Mint(minter, actualMintAmount, mintTokens, balanceAfter);\\n        emit Transfer(address(0), minter, mintTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.mintVerify(address(this), minter, actualMintAmount, mintTokens);\\n    }\\n\\n    /**\\n     * @notice Redeemer redeems vTokens in exchange for the underlying assets, transferred to the receiver. Redeemer and receiver can be the same\\n     *   address, or different addresses if the receiver was previously approved by the redeemer as a valid delegate (see Comptroller.updateDelegate)\\n     * @dev Assumes interest has already been accrued up to the current slot(block or second)\\n     * @param redeemer The address of the account which is redeeming the tokens\\n     * @param receiver The receiver of the underlying tokens\\n     * @param redeemTokensIn The number of vTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     * @param redeemAmountIn The number of underlying tokens to receive from redeeming vTokens (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     */\\n    function _redeemFresh(address redeemer, address receiver, uint256 redeemTokensIn, uint256 redeemAmountIn) internal {\\n        require(redeemTokensIn == 0 || redeemAmountIn == 0, \\\"one of redeemTokensIn or redeemAmountIn must be zero\\\");\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RedeemFreshnessCheck();\\n        }\\n\\n        /* exchangeRate = invoke Exchange Rate Stored() */\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        uint256 redeemTokens;\\n        uint256 redeemAmount;\\n\\n        /* If redeemTokensIn > 0: */\\n        if (redeemTokensIn > 0) {\\n            /*\\n             * We calculate the exchange rate and the amount of underlying to be redeemed:\\n             *  redeemTokens = redeemTokensIn\\n             */\\n            redeemTokens = redeemTokensIn;\\n        } else {\\n            /*\\n             * We get the current exchange rate and calculate the amount to be redeemed:\\n             *  redeemTokens = redeemAmountIn / exchangeRate\\n             */\\n            redeemTokens = div_(redeemAmountIn, exchangeRate);\\n\\n            uint256 _redeemAmount = mul_(redeemTokens, exchangeRate);\\n            if (_redeemAmount != 0 && _redeemAmount != redeemAmountIn) redeemTokens++; // round up\\n        }\\n\\n        // redeemAmount = exchangeRate * redeemTokens\\n        redeemAmount = mul_ScalarTruncate(exchangeRate, redeemTokens);\\n\\n        // Revert if amount is zero\\n        if (redeemAmount == 0) {\\n            revert(\\\"redeemAmount is zero\\\");\\n        }\\n\\n        /* Fail if redeem not allowed */\\n        comptroller.preRedeemHook(address(this), redeemer, redeemTokens);\\n\\n        /* Fail gracefully if protocol has insufficient cash */\\n        if (_getCashPrior() - totalReserves < redeemAmount) {\\n            revert RedeemTransferOutNotPossible();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing reduced supply before external transfer.\\n         */\\n        totalSupply = totalSupply - redeemTokens;\\n        uint256 balanceAfter = accountTokens[redeemer] - redeemTokens;\\n        accountTokens[redeemer] = balanceAfter;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the redeemAmount.\\n         *  On success, the vToken has redeemAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, redeemAmount);\\n\\n        /* We emit a Transfer event, and a Redeem event */\\n        emit Transfer(redeemer, address(this), redeemTokens);\\n        emit Redeem(redeemer, redeemAmount, redeemTokens, balanceAfter);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.redeemVerify(address(this), redeemer, redeemAmount, redeemTokens);\\n    }\\n\\n    /**\\n     * @notice Users or their delegates borrow assets from the protocol\\n     * @param borrower User who borrows the assets\\n     * @param receiver The receiver of the tokens, if called by a delegate\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     */\\n    function _borrowFresh(address borrower, address receiver, uint256 borrowAmount) internal {\\n        /* Fail if borrow not allowed */\\n        comptroller.preBorrowHook(address(this), borrower, borrowAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert BorrowFreshnessCheck();\\n        }\\n\\n        /* Fail gracefully if protocol has insufficient underlying cash */\\n        if (_getCashPrior() - totalReserves < borrowAmount) {\\n            revert BorrowCashNotAvailable();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on overflow:\\n         *  accountBorrowNew = accountBorrow + borrowAmount\\n         *  totalBorrowsNew = totalBorrows + borrowAmount\\n         */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 accountBorrowsNew = accountBorrowsPrev + borrowAmount;\\n        uint256 totalBorrowsNew = totalBorrows + borrowAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing increased borrow before external transfer.\\n        `*/\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the borrowAmount.\\n         *  On success, the vToken borrowAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, borrowAmount);\\n\\n        /* We emit a Borrow event */\\n        emit Borrow(borrower, borrowAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.borrowVerify(address(this), borrower, borrowAmount);\\n    }\\n\\n    /**\\n     * @notice Borrows are repaid by another user (possibly the borrower).\\n     * @param payer the account paying off the borrow\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount the amount of underlying tokens being returned, or type(uint256).max for the full outstanding amount\\n     * @return (uint) the actual repayment amount.\\n     */\\n    function _repayBorrowFresh(address payer, address borrower, uint256 repayAmount) internal returns (uint256) {\\n        /* Fail if repayBorrow not allowed */\\n        comptroller.preRepayHook(address(this), borrower);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RepayBorrowFreshnessCheck();\\n        }\\n\\n        /* We fetch the amount the borrower owes, with accumulated interest */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n\\n        uint256 repayAmountFinal = repayAmount >= accountBorrowsPrev ? accountBorrowsPrev : repayAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We call _doTransferIn for the payer and the repayAmount\\n         *  On success, the vToken holds an additional repayAmount of cash.\\n         *  _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         *   it returns the amount actually transferred, in case of a fee.\\n         */\\n        uint256 actualRepayAmount = _doTransferIn(payer, repayAmountFinal);\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on underflow:\\n         *  accountBorrowsNew = accountBorrows - actualRepayAmount\\n         *  totalBorrowsNew = totalBorrows - actualRepayAmount\\n         */\\n        uint256 accountBorrowsNew = accountBorrowsPrev - actualRepayAmount;\\n        uint256 totalBorrowsNew = totalBorrows - actualRepayAmount;\\n\\n        /* We write the previously calculated values into storage */\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /* We emit a RepayBorrow event */\\n        emit RepayBorrow(payer, borrower, actualRepayAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.repayBorrowVerify(address(this), payer, borrower, actualRepayAmount, borrowIndex);\\n\\n        return actualRepayAmount;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal nonReentrant {\\n        accrueInterest();\\n\\n        uint256 error = vTokenCollateral.accrueInterest();\\n        if (error != NO_ERROR) {\\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted liquidation failed\\n            revert LiquidateAccrueCollateralInterestFailed(error);\\n        }\\n\\n        _liquidateBorrowFresh(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice The liquidator liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrowFresh(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal {\\n        /* Fail if liquidate not allowed */\\n        comptroller.preLiquidateHook(\\n            address(this),\\n            address(vTokenCollateral),\\n            borrower,\\n            repayAmount,\\n            skipLiquidityCheck\\n        );\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert LiquidateFreshnessCheck();\\n        }\\n\\n        /* Verify vTokenCollateral market's slot(block or second) number equals current slot(block or second) number */\\n        if (vTokenCollateral.accrualBlockNumber() != getBlockNumberOrTimestamp()) {\\n            revert LiquidateCollateralFreshnessCheck();\\n        }\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateLiquidatorIsBorrower();\\n        }\\n\\n        /* Fail if repayAmount = 0 */\\n        if (repayAmount == 0) {\\n            revert LiquidateCloseAmountIsZero();\\n        }\\n\\n        /* Fail if repayAmount = type(uint256).max */\\n        if (repayAmount == type(uint256).max) {\\n            revert LiquidateCloseAmountIsUintMax();\\n        }\\n\\n        /* Fail if repayBorrow fails */\\n        uint256 actualRepayAmount = _repayBorrowFresh(liquidator, borrower, repayAmount);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We calculate the number of collateral tokens that will be seized */\\n        (uint256 amountSeizeError, uint256 seizeTokens) = comptroller.liquidateCalculateSeizeTokens(\\n            address(this),\\n            address(vTokenCollateral),\\n            actualRepayAmount\\n        );\\n        require(amountSeizeError == NO_ERROR, \\\"LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED\\\");\\n\\n        /* Revert if borrower collateral token balance < seizeTokens */\\n        require(vTokenCollateral.balanceOf(borrower) >= seizeTokens, \\\"LIQUIDATE_SEIZE_TOO_MUCH\\\");\\n\\n        // If this is also the collateral, call _seize internally to avoid re-entrancy, otherwise make an external call\\n        if (address(vTokenCollateral) == address(this)) {\\n            _seize(address(this), liquidator, borrower, seizeTokens);\\n        } else {\\n            vTokenCollateral.seize(liquidator, borrower, seizeTokens);\\n        }\\n\\n        /* We emit a LiquidateBorrow event */\\n        emit LiquidateBorrow(liquidator, borrower, actualRepayAmount, address(vTokenCollateral), seizeTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.liquidateBorrowVerify(\\n            address(this),\\n            address(vTokenCollateral),\\n            liquidator,\\n            borrower,\\n            actualRepayAmount,\\n            seizeTokens\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Called only during an in-kind liquidation, or by liquidateBorrow during the liquidation of another VToken.\\n     *  It's absolutely critical to use msg.sender as the seizer vToken and not a parameter.\\n     * @param seizerContract The contract seizing the collateral (either borrowed vToken or Comptroller)\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     */\\n    function _seize(address seizerContract, address liquidator, address borrower, uint256 seizeTokens) internal {\\n        /* Fail if seize not allowed */\\n        comptroller.preSeizeHook(address(this), seizerContract, liquidator, borrower);\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateSeizeLiquidatorIsBorrower();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and liquidator token balances, failing on underflow/overflow:\\n         *  borrowerTokensNew = accountTokens[borrower] - seizeTokens\\n         *  liquidatorTokensNew = accountTokens[liquidator] + seizeTokens\\n         */\\n        uint256 liquidationIncentiveMantissa = ComptrollerViewInterface(address(comptroller))\\n            .liquidationIncentiveMantissa();\\n        uint256 numerator = mul_(seizeTokens, Exp({ mantissa: protocolSeizeShareMantissa }));\\n        uint256 protocolSeizeTokens = div_(numerator, Exp({ mantissa: liquidationIncentiveMantissa }));\\n        uint256 liquidatorSeizeTokens = seizeTokens - protocolSeizeTokens;\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n        uint256 protocolSeizeAmount = mul_ScalarTruncate(exchangeRate, protocolSeizeTokens);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the calculated values into storage */\\n        totalSupply = totalSupply - protocolSeizeTokens;\\n        accountTokens[borrower] = accountTokens[borrower] - seizeTokens;\\n        accountTokens[liquidator] = accountTokens[liquidator] + liquidatorSeizeTokens;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, protocolSeizeAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.LIQUIDATION\\n        );\\n\\n        /* Emit a Transfer event */\\n        emit Transfer(borrower, liquidator, liquidatorSeizeTokens);\\n        emit ProtocolSeize(borrower, protocolShareReserve, protocolSeizeAmount);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.seizeVerify(address(this), seizerContract, liquidator, borrower, seizeTokens);\\n    }\\n\\n    function _setComptroller(ComptrollerInterface newComptroller) internal {\\n        ComptrollerInterface oldComptroller = comptroller;\\n        // Ensure invoke comptroller.isComptroller() returns true\\n        require(newComptroller.isComptroller(), \\\"marker method returned false\\\");\\n\\n        // Set market's comptroller to newComptroller\\n        comptroller = newComptroller;\\n\\n        // Emit NewComptroller(oldComptroller, newComptroller)\\n        emit NewComptroller(oldComptroller, newComptroller);\\n    }\\n\\n    /**\\n     * @notice Sets a new reserve factor for the protocol (*requires fresh interest accrual)\\n     * @dev Admin function to set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     */\\n    function _setReserveFactorFresh(uint256 newReserveFactorMantissa) internal {\\n        // Verify market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetReserveFactorFreshCheck();\\n        }\\n\\n        // Check newReserveFactor \\u2264 maxReserveFactor\\n        if (newReserveFactorMantissa > MAX_RESERVE_FACTOR_MANTISSA) {\\n            revert SetReserveFactorBoundsCheck();\\n        }\\n\\n        uint256 oldReserveFactorMantissa = reserveFactorMantissa;\\n        reserveFactorMantissa = newReserveFactorMantissa;\\n\\n        emit NewReserveFactor(oldReserveFactorMantissa, newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Add reserves by transferring from caller\\n     * @dev Requires fresh interest accrual\\n     * @param addAmount Amount of addition to reserves\\n     * @return actualAddAmount The actual amount added, excluding the potential token fees\\n     */\\n    function _addReservesFresh(uint256 addAmount) internal returns (uint256) {\\n        // totalReserves + actualAddAmount\\n        uint256 totalReservesNew;\\n        uint256 actualAddAmount;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert AddReservesFactorFreshCheck(actualAddAmount);\\n        }\\n\\n        actualAddAmount = _doTransferIn(msg.sender, addAmount);\\n        totalReservesNew = totalReserves + actualAddAmount;\\n        totalReserves = totalReservesNew;\\n        emit ReservesAdded(msg.sender, actualAddAmount, totalReservesNew);\\n\\n        return actualAddAmount;\\n    }\\n\\n    /**\\n     * @notice Reduces reserves by transferring to the protocol reserve contract\\n     * @dev Requires fresh interest accrual\\n     * @param reduceAmount Amount of reduction to reserves\\n     */\\n    function _reduceReservesFresh(uint256 reduceAmount) internal {\\n        if (reduceAmount == 0) {\\n            return;\\n        }\\n        // totalReserves - reduceAmount\\n        uint256 totalReservesNew;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert ReduceReservesFreshCheck();\\n        }\\n\\n        // Fail gracefully if protocol has insufficient underlying cash\\n        if (_getCashPrior() < reduceAmount) {\\n            revert ReduceReservesCashNotAvailable();\\n        }\\n\\n        // Check reduceAmount \\u2264 reserves[n] (totalReserves)\\n        if (reduceAmount > totalReserves) {\\n            revert ReduceReservesCashValidation();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        totalReservesNew = totalReserves - reduceAmount;\\n\\n        // Store reserves[n+1] = reserves[n] - reduceAmount\\n        totalReserves = totalReservesNew;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, reduceAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.SPREAD\\n        );\\n\\n        emit SpreadReservesReduced(protocolShareReserve, reduceAmount, totalReservesNew);\\n    }\\n\\n    /**\\n     * @notice updates the interest rate model (*requires fresh interest accrual)\\n     * @dev Admin function to update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     */\\n    function _setInterestRateModelFresh(InterestRateModel newInterestRateModel) internal {\\n        // Used to store old model for use in the event that is emitted on success\\n        InterestRateModel oldInterestRateModel;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetInterestRateModelFreshCheck();\\n        }\\n\\n        // Track the market's current interest rate model\\n        oldInterestRateModel = interestRateModel;\\n\\n        // Ensure invoke newInterestRateModel.isInterestRateModel() returns true\\n        require(newInterestRateModel.isInterestRateModel(), \\\"marker method returned false\\\");\\n\\n        // Set the interest rate model to newInterestRateModel\\n        interestRateModel = newInterestRateModel;\\n\\n        // Emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel)\\n        emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel);\\n    }\\n\\n    /**\\n     * Safe Token **\\n     */\\n\\n    /**\\n     * @dev Similar to ERC-20 transfer, but handles tokens that have transfer fees.\\n     *      This function returns the actual amount received,\\n     *      which may be less than `amount` if there is a fee attached to the transfer.\\n     * @param from Sender of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     * @return Actual amount received\\n     */\\n    function _doTransferIn(address from, uint256 amount) internal virtual returns (uint256) {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        uint256 balanceBefore = token.balanceOf(address(this));\\n        token.safeTransferFrom(from, address(this), amount);\\n        uint256 balanceAfter = token.balanceOf(address(this));\\n        // Return the amount that was *actually* transferred\\n        return balanceAfter - balanceBefore;\\n    }\\n\\n    /**\\n     * @dev Just a regular ERC-20 transfer, reverts on failure\\n     * @param to Receiver of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     */\\n    function _doTransferOut(address to, uint256 amount) internal virtual {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        token.safeTransfer(to, amount);\\n    }\\n\\n    /**\\n     * @notice Transfer `tokens` tokens from `src` to `dst` by `spender`\\n     * @dev Called by both `transfer` and `transferFrom` internally\\n     * @param spender The address of the account performing the transfer\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param tokens The number of tokens to transfer\\n     */\\n    function _transferTokens(address spender, address src, address dst, uint256 tokens) internal {\\n        /* Fail if transfer not allowed */\\n        comptroller.preTransferHook(address(this), src, dst, tokens);\\n\\n        /* Do not allow self-transfers */\\n        if (src == dst) {\\n            revert TransferNotAllowed();\\n        }\\n\\n        /* Get the allowance, infinite for the account owner */\\n        uint256 startingAllowance;\\n        if (spender == src) {\\n            startingAllowance = type(uint256).max;\\n        } else {\\n            startingAllowance = transferAllowances[src][spender];\\n        }\\n\\n        /* Do the calculations, checking for {under,over}flow */\\n        uint256 allowanceNew = startingAllowance - tokens;\\n        uint256 srcTokensNew = accountTokens[src] - tokens;\\n        uint256 dstTokensNew = accountTokens[dst] + tokens;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n\\n        accountTokens[src] = srcTokensNew;\\n        accountTokens[dst] = dstTokensNew;\\n\\n        /* Eat some of the allowance (if necessary) */\\n        if (startingAllowance != type(uint256).max) {\\n            transferAllowances[src][spender] = allowanceNew;\\n        }\\n\\n        /* We emit a Transfer event */\\n        emit Transfer(src, dst, tokens);\\n\\n        comptroller.transferVerify(address(this), src, dst, tokens);\\n    }\\n\\n    /**\\n     * @notice Initialize the money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     */\\n    function _initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n        require(accrualBlockNumber == 0 && borrowIndex == 0, \\\"market may only be initialized once\\\");\\n\\n        // Set initial exchange rate\\n        initialExchangeRateMantissa = initialExchangeRateMantissa_;\\n        require(initialExchangeRateMantissa > 0, \\\"initial exchange rate must be greater than zero.\\\");\\n\\n        _setComptroller(comptroller_);\\n\\n        // Initialize slot(block or second) number and borrow index (slot(block or second) number mocks depend on comptroller being set)\\n        accrualBlockNumber = getBlockNumberOrTimestamp();\\n        borrowIndex = MANTISSA_ONE;\\n\\n        // Set the interest rate model (depends on slot(block or second) number / borrow index)\\n        _setInterestRateModelFresh(interestRateModel_);\\n\\n        _setReserveFactorFresh(reserveFactorMantissa_);\\n\\n        name = name_;\\n        symbol = symbol_;\\n        decimals = decimals_;\\n        _setShortfallContract(riskManagement.shortfall);\\n        _setProtocolShareReserve(riskManagement.protocolShareReserve);\\n        protocolSeizeShareMantissa = DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA;\\n\\n        // Set underlying and sanity check it\\n        underlying = underlying_;\\n        IERC20Upgradeable(underlying).totalSupply();\\n\\n        // The counter starts true to prevent changing it from zero to non-zero (i.e. smaller cost/refund)\\n        _notEntered = true;\\n        _transferOwnership(admin_);\\n    }\\n\\n    function _setShortfallContract(address shortfall_) internal {\\n        ensureNonzeroAddress(shortfall_);\\n        address oldShortfall = shortfall;\\n        shortfall = shortfall_;\\n        emit NewShortfallContract(oldShortfall, shortfall_);\\n    }\\n\\n    function _setProtocolShareReserve(address payable protocolShareReserve_) internal {\\n        ensureNonzeroAddress(protocolShareReserve_);\\n        address oldProtocolShareReserve = address(protocolShareReserve);\\n        protocolShareReserve = protocolShareReserve_;\\n        emit NewProtocolShareReserve(oldProtocolShareReserve, address(protocolShareReserve_));\\n    }\\n\\n    function _ensureSenderIsDelegateOf(address user) internal view {\\n        if (!ComptrollerViewInterface(address(comptroller)).approvedDelegates(user, msg.sender)) {\\n            revert DelegateNotApproved();\\n        }\\n    }\\n\\n    /**\\n     * @notice Gets balance of this contract in terms of the underlying\\n     * @dev This excludes the value of the current message, if any\\n     * @return The quantity of underlying tokens owned by this contract\\n     */\\n    function _getCashPrior() internal view virtual returns (uint256) {\\n        return IERC20Upgradeable(underlying).balanceOf(address(this));\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance the calculated balance\\n     */\\n    function _borrowBalanceStored(address account) internal view returns (uint256) {\\n        /* Get borrowBalance and borrowIndex */\\n        BorrowSnapshot memory borrowSnapshot = accountBorrows[account];\\n\\n        /* If borrowBalance = 0 then borrowIndex is likely also 0.\\n         * Rather than failing the calculation with a division by 0, we immediately return 0 in this case.\\n         */\\n        if (borrowSnapshot.principal == 0) {\\n            return 0;\\n        }\\n\\n        /* Calculate new borrow balance using the interest index:\\n         *  recentBorrowBalance = borrower.borrowBalance * market.borrowIndex / borrower.borrowIndex\\n         */\\n        uint256 principalTimesIndex = borrowSnapshot.principal * borrowIndex;\\n\\n        return principalTimesIndex / borrowSnapshot.interestIndex;\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function _exchangeRateStored() internal view virtual returns (uint256) {\\n        uint256 _totalSupply = totalSupply;\\n        if (_totalSupply == 0) {\\n            /*\\n             * If there are no tokens minted:\\n             *  exchangeRate = initialExchangeRate\\n             */\\n            return initialExchangeRateMantissa;\\n        }\\n        /*\\n         * Otherwise:\\n         *  exchangeRate = (totalCash + totalBorrows + badDebt - totalReserves) / totalSupply\\n         */\\n        uint256 totalCash = _getCashPrior();\\n        uint256 cashPlusBorrowsMinusReserves = totalCash + totalBorrows + badDebt - totalReserves;\\n        uint256 exchangeRate = (cashPlusBorrowsMinusReserves * EXP_SCALE) / _totalSupply;\\n\\n        return exchangeRate;\\n    }\\n}\\n\",\"keccak256\":\"0xa220ca317fe69b920b86e43f054c43b5f891f12160fd312c9a21668f969ee056\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { ComptrollerInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\n\\n/**\\n * @title VTokenStorage\\n * @author Venus\\n * @notice Storage layout used by the `VToken` contract\\n */\\n// solhint-disable-next-line max-states-count\\ncontract VTokenStorage {\\n    /**\\n     * @notice Container for borrow balance information\\n     * @member principal Total balance (with accrued interest), after applying the most recent balance-changing action\\n     * @member interestIndex Global borrowIndex as of the most recent balance-changing action\\n     */\\n    struct BorrowSnapshot {\\n        uint256 principal;\\n        uint256 interestIndex;\\n    }\\n\\n    /**\\n     * @dev Guard variable for re-entrancy checks\\n     */\\n    bool internal _notEntered;\\n\\n    /**\\n     * @notice Underlying asset for this VToken\\n     */\\n    address public underlying;\\n\\n    /**\\n     * @notice EIP-20 token name for this token\\n     */\\n    string public name;\\n\\n    /**\\n     * @notice EIP-20 token symbol for this token\\n     */\\n    string public symbol;\\n\\n    /**\\n     * @notice EIP-20 token decimals for this token\\n     */\\n    uint8 public decimals;\\n\\n    /**\\n     * @notice Protocol share Reserve contract address\\n     */\\n    address payable public protocolShareReserve;\\n\\n    /**\\n     * @notice Contract which oversees inter-vToken operations\\n     */\\n    ComptrollerInterface public comptroller;\\n\\n    /**\\n     * @notice Model which tells what the current interest rate should be\\n     */\\n    InterestRateModel public interestRateModel;\\n\\n    // Initial exchange rate used when minting the first VTokens (used when totalSupply = 0)\\n    uint256 internal initialExchangeRateMantissa;\\n\\n    /**\\n     * @notice Fraction of interest currently set aside for reserves\\n     */\\n    uint256 public reserveFactorMantissa;\\n\\n    /**\\n     * @notice Slot(block or second) number that interest was last accrued at\\n     */\\n    uint256 public accrualBlockNumber;\\n\\n    /**\\n     * @notice Accumulator of the total earned interest rate since the opening of the market\\n     */\\n    uint256 public borrowIndex;\\n\\n    /**\\n     * @notice Total amount of outstanding borrows of the underlying in this market\\n     */\\n    uint256 public totalBorrows;\\n\\n    /**\\n     * @notice Total amount of reserves of the underlying held in this market\\n     */\\n    uint256 public totalReserves;\\n\\n    /**\\n     * @notice Total number of tokens in circulation\\n     */\\n    uint256 public totalSupply;\\n\\n    /**\\n     * @notice Total bad debt of the market\\n     */\\n    uint256 public badDebt;\\n\\n    // Official record of token balances for each account\\n    mapping(address => uint256) internal accountTokens;\\n\\n    // Approved token transfer amounts on behalf of others\\n    mapping(address => mapping(address => uint256)) internal transferAllowances;\\n\\n    // Mapping of account addresses to outstanding borrow balances\\n    mapping(address => BorrowSnapshot) internal accountBorrows;\\n\\n    /**\\n     * @notice Share of seized collateral that is added to reserves\\n     */\\n    uint256 public protocolSeizeShareMantissa;\\n\\n    /**\\n     * @notice Storage of Shortfall contract address\\n     */\\n    address public shortfall;\\n\\n    /**\\n     * @notice delta slot (block or second) after which reserves will be reduced\\n     */\\n    uint256 public reduceReservesBlockDelta;\\n\\n    /**\\n     * @notice last slot (block or second) number at which reserves were reduced\\n     */\\n    uint256 public reduceReservesBlockNumber;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n}\\n\\n/**\\n * @title VTokenInterface\\n * @author Venus\\n * @notice Interface implemented by the `VToken` contract\\n */\\nabstract contract VTokenInterface is VTokenStorage {\\n    struct RiskManagementInit {\\n        address shortfall;\\n        address payable protocolShareReserve;\\n    }\\n\\n    /*** Market Events ***/\\n\\n    /**\\n     * @notice Event emitted when interest is accrued\\n     */\\n    event AccrueInterest(uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when tokens are minted\\n     */\\n    event Mint(address indexed minter, uint256 mintAmount, uint256 mintTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when tokens are redeemed\\n     */\\n    event Redeem(address indexed redeemer, uint256 redeemAmount, uint256 redeemTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when underlying is borrowed\\n     */\\n    event Borrow(address indexed borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when a borrow is repaid\\n     */\\n    event RepayBorrow(\\n        address indexed payer,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        uint256 accountBorrows,\\n        uint256 totalBorrows\\n    );\\n\\n    /**\\n     * @notice Event emitted when bad debt is accumulated on a market\\n     * @param borrower borrower to \\\"forgive\\\"\\n     * @param badDebtDelta amount of new bad debt recorded\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtIncreased(address indexed borrower, uint256 badDebtDelta, uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when bad debt is recovered via an auction\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtRecovered(uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when a borrow is liquidated\\n     */\\n    event LiquidateBorrow(\\n        address indexed liquidator,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        address indexed vTokenCollateral,\\n        uint256 seizeTokens\\n    );\\n\\n    /*** Admin Events ***/\\n\\n    /**\\n     * @notice Event emitted when comptroller is changed\\n     */\\n    event NewComptroller(ComptrollerInterface indexed oldComptroller, ComptrollerInterface indexed newComptroller);\\n\\n    /**\\n     * @notice Event emitted when shortfall contract address is changed\\n     */\\n    event NewShortfallContract(address indexed oldShortfall, address indexed newShortfall);\\n\\n    /**\\n     * @notice Event emitted when protocol share reserve contract address is changed\\n     */\\n    event NewProtocolShareReserve(address indexed oldProtocolShareReserve, address indexed newProtocolShareReserve);\\n\\n    /**\\n     * @notice Event emitted when interestRateModel is changed\\n     */\\n    event NewMarketInterestRateModel(\\n        InterestRateModel indexed oldInterestRateModel,\\n        InterestRateModel indexed newInterestRateModel\\n    );\\n\\n    /**\\n     * @notice Event emitted when protocol seize share is changed\\n     */\\n    event NewProtocolSeizeShare(uint256 oldProtocolSeizeShareMantissa, uint256 newProtocolSeizeShareMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserve factor is changed\\n     */\\n    event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserves are added\\n     */\\n    event ReservesAdded(address indexed benefactor, uint256 addAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice Event emitted when the spread reserves are reduced\\n     */\\n    event SpreadReservesReduced(address indexed protocolShareReserve, uint256 reduceAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice EIP20 Transfer event\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 amount);\\n\\n    /**\\n     * @notice EIP20 Approval event\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\\n\\n    /**\\n     * @notice Event emitted when healing the borrow\\n     */\\n    event HealBorrow(address indexed payer, address indexed borrower, uint256 repayAmount);\\n\\n    /**\\n     * @notice Event emitted when tokens are swept\\n     */\\n    event SweepToken(address indexed token);\\n\\n    /**\\n     * @notice Event emitted when reduce reserves slot (block or second) delta is changed\\n     */\\n    event NewReduceReservesBlockDelta(\\n        uint256 oldReduceReservesBlockOrTimestampDelta,\\n        uint256 newReduceReservesBlockOrTimestampDelta\\n    );\\n\\n    /**\\n     * @notice Event emitted when liquidation reserves are reduced\\n     */\\n    event ProtocolSeize(address indexed from, address indexed to, uint256 amount);\\n\\n    /*** User Interface ***/\\n\\n    function mint(uint256 mintAmount) external virtual returns (uint256);\\n\\n    function mintBehalf(address minter, uint256 mintAllowed) external virtual returns (uint256);\\n\\n    function redeem(uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemUnderlying(uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function redeemUnderlyingBehalf(address redeemer, uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function borrow(uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function borrowBehalf(address borrwwer, uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function repayBorrow(uint256 repayAmount) external virtual returns (uint256);\\n\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external virtual returns (uint256);\\n\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external virtual returns (uint256);\\n\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external virtual;\\n\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipCloseFactorCheck\\n    ) external virtual;\\n\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external virtual;\\n\\n    function transfer(address dst, uint256 amount) external virtual returns (bool);\\n\\n    function transferFrom(address src, address dst, uint256 amount) external virtual returns (bool);\\n\\n    function accrueInterest() external virtual returns (uint256);\\n\\n    function sweepToken(IERC20Upgradeable token) external virtual;\\n\\n    /*** Admin Functions ***/\\n\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external virtual;\\n\\n    function reduceReserves(uint256 reduceAmount) external virtual;\\n\\n    function exchangeRateCurrent() external virtual returns (uint256);\\n\\n    function borrowBalanceCurrent(address account) external virtual returns (uint256);\\n\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external virtual;\\n\\n    function addReserves(uint256 addAmount) external virtual;\\n\\n    function totalBorrowsCurrent() external virtual returns (uint256);\\n\\n    function balanceOfUnderlying(address owner) external virtual returns (uint256);\\n\\n    function approve(address spender, uint256 amount) external virtual returns (bool);\\n\\n    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool);\\n\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool);\\n\\n    function allowance(address owner, address spender) external view virtual returns (uint256);\\n\\n    function balanceOf(address owner) external view virtual returns (uint256);\\n\\n    function getAccountSnapshot(address account) external view virtual returns (uint256, uint256, uint256, uint256);\\n\\n    function borrowRatePerBlock() external view virtual returns (uint256);\\n\\n    function supplyRatePerBlock() external view virtual returns (uint256);\\n\\n    function borrowBalanceStored(address account) external view virtual returns (uint256);\\n\\n    function exchangeRateStored() external view virtual returns (uint256);\\n\\n    function getCash() external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is a VToken contract (for inspection)\\n     * @return Always true\\n     */\\n    function isVToken() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7c4cbb879e3a931cfee4fa7a9eb1978eddff18087a1c4f56decedb84c2479f1e\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\",\"keccak256\":\"0x54ab3a6f3bc87569ed12370f3470a1ec84cea9796d4d0ccf3d07dd4280c044aa\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/validators.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\\nerror ZeroAddressNotAllowed();\\n\\n/// @notice Checks if the provided address is nonzero, reverts otherwise\\n/// @param address_ Address to check\\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\\nfunction ensureNonzeroAddress(address address_) pure {\\n    if (address_ == address(0)) {\\n        revert ZeroAddressNotAllowed();\\n    }\\n}\\n\",\"keccak256\":\"0x93bdd5cfb100f0f9a1d446857e23c3633df6ab12c266333c978428edd96b1367\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface IProtocolShareReserve {\\n    /// @notice it represents the type of vToken income\\n    enum IncomeType {\\n        SPREAD,\\n        LIQUIDATION\\n    }\\n\\n    function updateAssetsState(\\n        address comptroller,\\n        address asset,\\n        IncomeType incomeType\\n    ) external;\\n}\\n\",\"keccak256\":\"0x5fddc5b63fdd850b3b5c83576cda50dcb27a205dbb1a23af17d9da0d9f04fa0a\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { SECONDS_PER_YEAR } from \\\"./constants.sol\\\";\\n\\nabstract contract TimeManagerV8 {\\n    /// @notice Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 public immutable blocksOrSecondsPerYear;\\n\\n    /// @notice Acknowledges if a contract is time based or not\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    bool public immutable isTimeBased;\\n\\n    /// @notice Stores the current block timestamp or block number depending on isTimeBased\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    function() view returns (uint256) private immutable _getCurrentSlot;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n\\n    /// @notice Thrown when blocks per year is invalid\\n    error InvalidBlocksPerYear();\\n\\n    /// @notice Thrown when time based but blocks per year is provided\\n    error InvalidTimeBasedConfiguration();\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block\\n     * If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:error InvalidBlocksPerYear is thrown if blocksPerYear entered is zero and timeBased is false\\n     * @custom:error InvalidTimeBasedConfiguration is thrown if blocksPerYear entered is non zero and timeBased is true\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) {\\n        if (!timeBased_ && blocksPerYear_ == 0) {\\n            revert InvalidBlocksPerYear();\\n        }\\n\\n        if (timeBased_ && blocksPerYear_ != 0) {\\n            revert InvalidTimeBasedConfiguration();\\n        }\\n\\n        isTimeBased = timeBased_;\\n        blocksOrSecondsPerYear = timeBased_ ? SECONDS_PER_YEAR : blocksPerYear_;\\n        _getCurrentSlot = timeBased_ ? _getBlockTimestamp : _getBlockNumber;\\n    }\\n\\n    /**\\n     * @dev Function to simply retrieve block number or block timestamp\\n     * @return Current block number or block timestamp\\n     */\\n    function getBlockNumberOrTimestamp() public view virtual returns (uint256) {\\n        return _getCurrentSlot();\\n    }\\n\\n    /**\\n     * @dev Returns the current timestamp in seconds\\n     * @return The current timestamp\\n     */\\n    function _getBlockTimestamp() private view returns (uint256) {\\n        return block.timestamp;\\n    }\\n\\n    /**\\n     * @dev Returns the current block number\\n     * @return The current block number\\n     */\\n    function _getBlockNumber() private view returns (uint256) {\\n        return block.number;\\n    }\\n}\\n\",\"keccak256\":\"0x57a2bbb9b8e02b1c0a5c0e305fef1328a22db56c3d4b148c362010a6e767243c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\",\"keccak256\":\"0x14de93ead464da249af31bea0e3bcfb62ec693bea3475fb4d90f055ac81dc5eb\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { PrimeStorageV1 } from \\\"../PrimeStorage.sol\\\";\\n\\n/**\\n * @title IPrime\\n * @author Venus\\n * @notice Interface for Prime Token\\n */\\ninterface IPrime {\\n    struct APRInfo {\\n        // supply APR of the user in BPS\\n        uint256 supplyAPR;\\n        // borrow APR of the user in BPS\\n        uint256 borrowAPR;\\n        // total score of the market\\n        uint256 totalScore;\\n        // score of the user\\n        uint256 userScore;\\n        // capped XVS balance of the user\\n        uint256 xvsBalanceForScore;\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    struct Capital {\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    /**\\n     * @notice Returns boosted pending interest accrued for a user for all markets\\n     * @param user the account for which to get the accrued interests\\n     * @return pendingRewards the number of underlying tokens accrued by the user for all markets\\n     */\\n    function getPendingRewards(address user) external returns (PrimeStorageV1.PendingReward[] memory pendingRewards);\\n\\n    /**\\n     * @notice Update total score of multiple users and market\\n     * @param users accounts for which we need to update score\\n     */\\n    function updateScores(address[] memory users) external;\\n\\n    /**\\n     * @notice Update value of alpha\\n     * @param _alphaNumerator numerator of alpha. If alpha is 0.5 then numerator is 1\\n     * @param _alphaDenominator denominator of alpha. If alpha is 0.5 then denominator is 2\\n     */\\n    function updateAlpha(uint128 _alphaNumerator, uint128 _alphaDenominator) external;\\n\\n    /**\\n     * @notice Update multipliers for a market\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier new supply multiplier for the market, scaled by 1e18\\n     * @param borrowMultiplier new borrow multiplier for the market, scaled by 1e18\\n     */\\n    function updateMultipliers(address market, uint256 supplyMultiplier, uint256 borrowMultiplier) external;\\n\\n    /**\\n     * @notice Add a market to prime program\\n     * @param comptroller address of the comptroller\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier the multiplier for supply cap. It should be converted to 1e18\\n     * @param borrowMultiplier the multiplier for borrow cap. It should be converted to 1e18\\n     */\\n    function addMarket(\\n        address comptroller,\\n        address market,\\n        uint256 supplyMultiplier,\\n        uint256 borrowMultiplier\\n    ) external;\\n\\n    /**\\n     * @notice Set limits for total tokens that can be minted\\n     * @param _irrevocableLimit total number of irrevocable tokens that can be minted\\n     * @param _revocableLimit total number of revocable tokens that can be minted\\n     */\\n    function setLimit(uint256 _irrevocableLimit, uint256 _revocableLimit) external;\\n\\n    /**\\n     * @notice Directly issue prime tokens to users\\n     * @param isIrrevocable are the tokens being issued\\n     * @param users list of address to issue tokens to\\n     */\\n    function issue(bool isIrrevocable, address[] calldata users) external;\\n\\n    /**\\n     * @notice Executed by XVSVault whenever user's XVSVault balance changes\\n     * @param user the account address whose balance was updated\\n     */\\n    function xvsUpdated(address user) external;\\n\\n    /**\\n     * @notice accrues interest and updates score for an user for a specific market\\n     * @param user the account address for which to accrue interest and update score\\n     * @param market the market for which to accrue interest and update score\\n     */\\n    function accrueInterestAndUpdateScore(address user, address market) external;\\n\\n    /**\\n     * @notice For claiming prime token when staking period is completed\\n     */\\n    function claim() external;\\n\\n    /**\\n     * @notice For burning any prime token\\n     * @param user the account address for which the prime token will be burned\\n     */\\n    function burn(address user) external;\\n\\n    /**\\n     * @notice To pause or unpause claiming of interest\\n     */\\n    function togglePause() external;\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken) external returns (uint256);\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @param user the user for which to claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Distributes income from market since last distribution\\n     * @param vToken the market for which to distribute the income\\n     */\\n    function accrueInterest(address vToken) external;\\n\\n    /**\\n     * @notice Returns boosted interest accrued for a user\\n     * @param vToken the market for which to fetch the accrued interest\\n     * @param user the account for which to get the accrued interest\\n     * @return interestAccrued the number of underlying tokens accrued by the user since the last accrual\\n     */\\n    function getInterestAccrued(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Retrieves an array of all available markets\\n     * @return an array of addresses representing all available markets\\n     */\\n    function getAllMarkets() external view returns (address[] memory);\\n\\n    /**\\n     * @notice fetch the numbers of seconds remaining for staking period to complete\\n     * @param user the account address for which we are checking the remaining time\\n     * @return timeRemaining the number of seconds the user needs to wait to claim prime token\\n     */\\n    function claimTimeRemaining(address user) external view returns (uint256);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for user for a given market\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function calculateAPR(address market, address user) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for estimated supply, borrow and XVS staked\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @param borrow hypothetical borrow amount\\n     * @param supply hypothetical supply amount\\n     * @param xvsStaked hypothetical staked XVS amount\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function estimateAPR(\\n        address market,\\n        address user,\\n        uint256 borrow,\\n        uint256 supply,\\n        uint256 xvsStaked\\n    ) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice the total income that's going to be distributed in a year to prime token holders\\n     * @param vToken the market for which to fetch the total income that's going to distributed in a year\\n     * @return amount the total income\\n     */\\n    function incomeDistributionYearly(address vToken) external view returns (uint256 amount);\\n\\n    /**\\n     * @notice Returns if user is a prime holder\\n     * @return isPrimeHolder true if user is a prime holder\\n     */\\n    function isUserPrimeHolder(address user) external view returns (bool);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param loopsLimit Number of loops limit\\n     */\\n    function setMaxLoopsLimit(uint256 loopsLimit) external;\\n\\n    /**\\n     * @notice Update staked at timestamp for multiple users\\n     * @param users accounts for which we need to update staked at timestamp\\n     * @param timestamps new staked at timestamp for the users\\n     */\\n    function setStakedAt(address[] calldata users, uint256[] calldata timestamps) external;\\n}\\n\",\"keccak256\":\"0xd112f60183416ad796093b4a83a80ddc1b8b655965f02ae55ca82e2a0c68f97d\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\n/**\\n * @title PrimeStorageV1\\n * @author Venus\\n * @notice Storage for Prime Token\\n */\\ncontract PrimeStorageV1 {\\n    struct Token {\\n        bool exists;\\n        bool isIrrevocable;\\n    }\\n\\n    struct Market {\\n        uint256 supplyMultiplier;\\n        uint256 borrowMultiplier;\\n        uint256 rewardIndex;\\n        uint256 sumOfMembersScore;\\n        bool exists;\\n    }\\n\\n    struct Interest {\\n        uint256 accrued;\\n        uint256 score;\\n        uint256 rewardIndex;\\n    }\\n\\n    struct PendingReward {\\n        address vToken;\\n        address rewardToken;\\n        uint256 amount;\\n    }\\n\\n    /// @notice Base unit for computations, usually used in scaling (multiplications, divisions)\\n    uint256 internal constant EXP_SCALE = 1e18;\\n\\n    /// @notice maximum BPS = 100%\\n    uint256 internal constant MAXIMUM_BPS = 1e4;\\n\\n    /// @notice Mapping to get prime token's metadata\\n    mapping(address => Token) public tokens;\\n\\n    /// @notice  Tracks total irrevocable tokens minted\\n    uint256 public totalIrrevocable;\\n\\n    /// @notice  Tracks total revocable tokens minted\\n    uint256 public totalRevocable;\\n\\n    /// @notice  Indicates maximum revocable tokens that can be minted\\n    uint256 public revocableLimit;\\n\\n    /// @notice  Indicates maximum irrevocable tokens that can be minted\\n    uint256 public irrevocableLimit;\\n\\n    /// @notice Tracks when prime token eligible users started staking for claiming prime token\\n    mapping(address => uint256) public stakedAt;\\n\\n    /// @notice vToken to market configuration\\n    mapping(address => Market) public markets;\\n\\n    /// @notice vToken to user to user index\\n    mapping(address => mapping(address => Interest)) public interests;\\n\\n    /// @notice A list of boosted markets\\n    address[] internal _allMarkets;\\n\\n    /// @notice numerator of alpha. Ex: if alpha is 0.5 then this will be 1\\n    uint128 public alphaNumerator;\\n\\n    /// @notice denominator of alpha. Ex: if alpha is 0.5 then this will be 2\\n    uint128 public alphaDenominator;\\n\\n    /// @notice address of XVS vault\\n    address public xvsVault;\\n\\n    /// @notice address of XVS vault reward token\\n    address public xvsVaultRewardToken;\\n\\n    /// @notice address of XVS vault pool id\\n    uint256 public xvsVaultPoolId;\\n\\n    /// @notice mapping to check if a account's score was updated in the round\\n    mapping(uint256 => mapping(address => bool)) public isScoreUpdated;\\n\\n    /// @notice unique id for next round\\n    uint256 public nextScoreUpdateRoundId;\\n\\n    /// @notice total number of accounts whose score needs to be updated\\n    uint256 public totalScoreUpdatesRequired;\\n\\n    /// @notice total number of accounts whose score is yet to be updated\\n    uint256 public pendingScoreUpdates;\\n\\n    /// @notice mapping used to find if an asset is part of prime markets\\n    mapping(address => address) public vTokenForAsset;\\n\\n    /// @notice Address of core pool comptroller contract\\n    address internal corePoolComptroller;\\n\\n    /// @notice unreleased income from PLP that's already distributed to prime holders\\n    /// @dev mapping of asset address => amount\\n    mapping(address => uint256) public unreleasedPLPIncome;\\n\\n    /// @notice The address of PLP contract\\n    address public primeLiquidityProvider;\\n\\n    /// @notice The address of ResilientOracle contract\\n    ResilientOracleInterface public oracle;\\n\\n    /// @notice The address of PoolRegistry contract\\n    address public poolRegistry;\\n\\n    /// @dev This empty reserved space is put in place to allow future versions to add new\\n    /// variables without shifting down storage in the inheritance chain.\\n    uint256[26] private __gap;\\n}\\n\",\"keccak256\":\"0x5285c875114db2ea2be0b81b65722d5761806217022db733323c4e03365a95e7\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[{"astId":15526,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"_notEntered","offset":0,"slot":"0","type":"t_bool"},{"astId":15529,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"underlying","offset":1,"slot":"0","type":"t_address"},{"astId":15532,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"name","offset":0,"slot":"1","type":"t_string_storage"},{"astId":15535,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"symbol","offset":0,"slot":"2","type":"t_string_storage"},{"astId":15538,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"decimals","offset":0,"slot":"3","type":"t_uint8"},{"astId":15541,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"protocolShareReserve","offset":1,"slot":"3","type":"t_address_payable"},{"astId":15545,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"comptroller","offset":0,"slot":"4","type":"t_contract(ComptrollerInterface)9353"},{"astId":15549,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"interestRateModel","offset":0,"slot":"5","type":"t_contract(InterestRateModel)10266"},{"astId":15551,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"initialExchangeRateMantissa","offset":0,"slot":"6","type":"t_uint256"},{"astId":15554,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"reserveFactorMantissa","offset":0,"slot":"7","type":"t_uint256"},{"astId":15557,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"accrualBlockNumber","offset":0,"slot":"8","type":"t_uint256"},{"astId":15560,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"borrowIndex","offset":0,"slot":"9","type":"t_uint256"},{"astId":15563,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"totalBorrows","offset":0,"slot":"10","type":"t_uint256"},{"astId":15566,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"totalReserves","offset":0,"slot":"11","type":"t_uint256"},{"astId":15569,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"totalSupply","offset":0,"slot":"12","type":"t_uint256"},{"astId":15572,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"badDebt","offset":0,"slot":"13","type":"t_uint256"},{"astId":15576,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"accountTokens","offset":0,"slot":"14","type":"t_mapping(t_address,t_uint256)"},{"astId":15582,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"transferAllowances","offset":0,"slot":"15","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":15587,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"accountBorrows","offset":0,"slot":"16","type":"t_mapping(t_address,t_struct(BorrowSnapshot)15523_storage)"},{"astId":15590,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"protocolSeizeShareMantissa","offset":0,"slot":"17","type":"t_uint256"},{"astId":15593,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"shortfall","offset":0,"slot":"18","type":"t_address"},{"astId":15596,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"reduceReservesBlockDelta","offset":0,"slot":"19","type":"t_uint256"},{"astId":15599,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"reduceReservesBlockNumber","offset":0,"slot":"20","type":"t_uint256"},{"astId":15604,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"__gap","offset":0,"slot":"21","type":"t_array(t_uint256)48_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_address_payable":{"encoding":"inplace","label":"address payable","numberOfBytes":"20"},"t_array(t_uint256)48_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[48]","numberOfBytes":"1536"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(ComptrollerInterface)9353":{"encoding":"inplace","label":"contract ComptrollerInterface","numberOfBytes":"20"},"t_contract(InterestRateModel)10266":{"encoding":"inplace","label":"contract InterestRateModel","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(BorrowSnapshot)15523_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct VTokenStorage.BorrowSnapshot)","numberOfBytes":"32","value":"t_struct(BorrowSnapshot)15523_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(BorrowSnapshot)15523_storage":{"encoding":"inplace","label":"struct VTokenStorage.BorrowSnapshot","members":[{"astId":15520,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"principal","offset":0,"slot":"0","type":"t_uint256"},{"astId":15522,"contract":"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol:VTokenStorage","label":"interestIndex","offset":0,"slot":"1","type":"t_uint256"}],"numberOfBytes":"64"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"accrualBlockNumber()":{"notice":"Slot(block or second) number that interest was last accrued at"},"badDebt()":{"notice":"Total bad debt of the market"},"borrowIndex()":{"notice":"Accumulator of the total earned interest rate since the opening of the market"},"comptroller()":{"notice":"Contract which oversees inter-vToken operations"},"decimals()":{"notice":"EIP-20 token decimals for this token"},"interestRateModel()":{"notice":"Model which tells what the current interest rate should be"},"name()":{"notice":"EIP-20 token name for this token"},"protocolSeizeShareMantissa()":{"notice":"Share of seized collateral that is added to reserves"},"protocolShareReserve()":{"notice":"Protocol share Reserve contract address"},"reduceReservesBlockDelta()":{"notice":"delta slot (block or second) after which reserves will be reduced"},"reduceReservesBlockNumber()":{"notice":"last slot (block or second) number at which reserves were reduced"},"reserveFactorMantissa()":{"notice":"Fraction of interest currently set aside for reserves"},"shortfall()":{"notice":"Storage of Shortfall contract address"},"symbol()":{"notice":"EIP-20 token symbol for this token"},"totalBorrows()":{"notice":"Total amount of outstanding borrows of the underlying in this market"},"totalReserves()":{"notice":"Total amount of reserves of the underlying held in this market"},"totalSupply()":{"notice":"Total number of tokens in circulation"},"underlying()":{"notice":"Underlying asset for this VToken"}},"notice":"Storage layout used by the `VToken` contract","version":1}}},"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol":{"BoundValidatorInterface":{"abi":[{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"reporterPrice","type":"uint256"},{"internalType":"uint256","name":"anchorPrice","type":"uint256"}],"name":"validatePriceWithAnchorPrice","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"validatePriceWithAnchorPrice(address,uint256,uint256)":"97c7033e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"reporterPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"anchorPrice\",\"type\":\"uint256\"}],\"name\":\"validatePriceWithAnchorPrice\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":\"BoundValidatorInterface\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"OracleInterface":{"abi":[{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getPrice(address)":"41976e09"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":\"OracleInterface\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"ResilientOracleInterface":{"abi":[{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"}],"name":"getUnderlyingPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"updateAssetPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"}],"name":"updatePrice","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getPrice(address)":"41976e09","getUnderlyingPrice(address)":"fc57d4df","updateAssetPrice(address)":"b62cad69","updatePrice(address)":"96e85ced"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"}],\"name\":\"getUnderlyingPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"updateAssetPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"}],\"name\":\"updatePrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":\"ResilientOracleInterface\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"TwapInterface":{"abi":[{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"updateTwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getPrice(address)":"41976e09","updateTwap(address)":"725068a5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"updateTwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":\"TwapInterface\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol":{"IProtocolShareReserve":{"abi":[{"inputs":[{"internalType":"address","name":"comptroller","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"enum IProtocolShareReserve.IncomeType","name":"incomeType","type":"uint8"}],"name":"updateAssetsState","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"updateAssetsState(address,address,uint8)":"16faecec"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"enum IProtocolShareReserve.IncomeType\",\"name\":\"incomeType\",\"type\":\"uint8\"}],\"name\":\"updateAssetsState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\":\"IProtocolShareReserve\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface IProtocolShareReserve {\\n    /// @notice it represents the type of vToken income\\n    enum IncomeType {\\n        SPREAD,\\n        LIQUIDATION\\n    }\\n\\n    function updateAssetsState(\\n        address comptroller,\\n        address asset,\\n        IncomeType incomeType\\n    ) external;\\n}\\n\",\"keccak256\":\"0x5fddc5b63fdd850b3b5c83576cda50dcb27a205dbb1a23af17d9da0d9f04fa0a\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol":{"TimeManagerV8":{"abi":[{"inputs":[],"name":"InvalidBlocksPerYear","type":"error"},{"inputs":[],"name":"InvalidTimeBasedConfiguration","type":"error"},{"inputs":[],"name":"blocksOrSecondsPerYear","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockNumberOrTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTimeBased","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{"constructor":{"custom:error":"InvalidBlocksPerYear is thrown if blocksPerYear entered is zero and timeBased is falseInvalidTimeBasedConfiguration is thrown if blocksPerYear entered is non zero and timeBased is true","custom:oz-upgrades-unsafe-allow":"constructor","params":{"blocksPerYear_":"The number of blocks per year","timeBased_":"A boolean indicating whether the contract is based on time or block If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR"}},"getBlockNumberOrTimestamp()":{"details":"Function to simply retrieve block number or block timestamp","returns":{"_0":"Current block number or block timestamp"}}},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"_getCurrentSlot":{"custom:oz-upgrades-unsafe-allow":"state-variable-immutable"},"blocksOrSecondsPerYear":{"custom:oz-upgrades-unsafe-allow":"state-variable-immutable"},"isTimeBased":{"custom:oz-upgrades-unsafe-allow":"state-variable-immutable"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"blocksOrSecondsPerYear()":"6857249c","getBlockNumberOrTimestamp()":"e1d146fb","isTimeBased()":"c7ad0895"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidBlocksPerYear\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTimeBasedConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"blocksOrSecondsPerYear\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockNumberOrTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isTimeBased\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:error\":\"InvalidBlocksPerYear is thrown if blocksPerYear entered is zero and timeBased is falseInvalidTimeBasedConfiguration is thrown if blocksPerYear entered is non zero and timeBased is true\",\"custom:oz-upgrades-unsafe-allow\":\"constructor\",\"params\":{\"blocksPerYear_\":\"The number of blocks per year\",\"timeBased_\":\"A boolean indicating whether the contract is based on time or block If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\"}},\"getBlockNumberOrTimestamp()\":{\"details\":\"Function to simply retrieve block number or block timestamp\",\"returns\":{\"_0\":\"Current block number or block timestamp\"}}},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"},\"_getCurrentSlot\":{\"custom:oz-upgrades-unsafe-allow\":\"state-variable-immutable\"},\"blocksOrSecondsPerYear\":{\"custom:oz-upgrades-unsafe-allow\":\"state-variable-immutable\"},\"isTimeBased\":{\"custom:oz-upgrades-unsafe-allow\":\"state-variable-immutable\"}},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidBlocksPerYear()\":[{\"notice\":\"Thrown when blocks per year is invalid\"}],\"InvalidTimeBasedConfiguration()\":[{\"notice\":\"Thrown when time based but blocks per year is provided\"}]},\"kind\":\"user\",\"methods\":{\"blocksOrSecondsPerYear()\":{\"notice\":\"Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored\"},\"isTimeBased()\":{\"notice\":\"Acknowledges if a contract is time based or not\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\":\"TimeManagerV8\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { SECONDS_PER_YEAR } from \\\"./constants.sol\\\";\\n\\nabstract contract TimeManagerV8 {\\n    /// @notice Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 public immutable blocksOrSecondsPerYear;\\n\\n    /// @notice Acknowledges if a contract is time based or not\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    bool public immutable isTimeBased;\\n\\n    /// @notice Stores the current block timestamp or block number depending on isTimeBased\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    function() view returns (uint256) private immutable _getCurrentSlot;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n\\n    /// @notice Thrown when blocks per year is invalid\\n    error InvalidBlocksPerYear();\\n\\n    /// @notice Thrown when time based but blocks per year is provided\\n    error InvalidTimeBasedConfiguration();\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block\\n     * If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:error InvalidBlocksPerYear is thrown if blocksPerYear entered is zero and timeBased is false\\n     * @custom:error InvalidTimeBasedConfiguration is thrown if blocksPerYear entered is non zero and timeBased is true\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) {\\n        if (!timeBased_ && blocksPerYear_ == 0) {\\n            revert InvalidBlocksPerYear();\\n        }\\n\\n        if (timeBased_ && blocksPerYear_ != 0) {\\n            revert InvalidTimeBasedConfiguration();\\n        }\\n\\n        isTimeBased = timeBased_;\\n        blocksOrSecondsPerYear = timeBased_ ? SECONDS_PER_YEAR : blocksPerYear_;\\n        _getCurrentSlot = timeBased_ ? _getBlockTimestamp : _getBlockNumber;\\n    }\\n\\n    /**\\n     * @dev Function to simply retrieve block number or block timestamp\\n     * @return Current block number or block timestamp\\n     */\\n    function getBlockNumberOrTimestamp() public view virtual returns (uint256) {\\n        return _getCurrentSlot();\\n    }\\n\\n    /**\\n     * @dev Returns the current timestamp in seconds\\n     * @return The current timestamp\\n     */\\n    function _getBlockTimestamp() private view returns (uint256) {\\n        return block.timestamp;\\n    }\\n\\n    /**\\n     * @dev Returns the current block number\\n     * @return The current block number\\n     */\\n    function _getBlockNumber() private view returns (uint256) {\\n        return block.number;\\n    }\\n}\\n\",\"keccak256\":\"0x57a2bbb9b8e02b1c0a5c0e305fef1328a22db56c3d4b148c362010a6e767243c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\",\"keccak256\":\"0x14de93ead464da249af31bea0e3bcfb62ec693bea3475fb4d90f055ac81dc5eb\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[{"astId":16234,"contract":"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol:TimeManagerV8","label":"__gap","offset":0,"slot":"0","type":"t_array(t_uint256)48_storage"}],"types":{"t_array(t_uint256)48_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[48]","numberOfBytes":"1536"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"errors":{"InvalidBlocksPerYear()":[{"notice":"Thrown when blocks per year is invalid"}],"InvalidTimeBasedConfiguration()":[{"notice":"Thrown when time based but blocks per year is provided"}]},"kind":"user","methods":{"blocksOrSecondsPerYear()":{"notice":"Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored"},"isTimeBased()":{"notice":"Acknowledges if a contract is time based or not"}},"version":1}}},"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol":{"IPrime":{"abi":[{"inputs":[{"internalType":"address","name":"vToken","type":"address"}],"name":"accrueInterest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"market","type":"address"}],"name":"accrueInterestAndUpdateScore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"comptroller","type":"address"},{"internalType":"address","name":"market","type":"address"},{"internalType":"uint256","name":"supplyMultiplier","type":"uint256"},{"internalType":"uint256","name":"borrowMultiplier","type":"uint256"}],"name":"addMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"market","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"calculateAPR","outputs":[{"components":[{"internalType":"uint256","name":"supplyAPR","type":"uint256"},{"internalType":"uint256","name":"borrowAPR","type":"uint256"},{"internalType":"uint256","name":"totalScore","type":"uint256"},{"internalType":"uint256","name":"userScore","type":"uint256"},{"internalType":"uint256","name":"xvsBalanceForScore","type":"uint256"},{"internalType":"uint256","name":"capital","type":"uint256"},{"internalType":"uint256","name":"cappedSupply","type":"uint256"},{"internalType":"uint256","name":"cappedBorrow","type":"uint256"},{"internalType":"uint256","name":"supplyCapUSD","type":"uint256"},{"internalType":"uint256","name":"borrowCapUSD","type":"uint256"}],"internalType":"struct IPrime.APRInfo","name":"aprInfo","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"}],"name":"claimInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"claimInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"claimTimeRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"market","type":"address"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"borrow","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"xvsStaked","type":"uint256"}],"name":"estimateAPR","outputs":[{"components":[{"internalType":"uint256","name":"supplyAPR","type":"uint256"},{"internalType":"uint256","name":"borrowAPR","type":"uint256"},{"internalType":"uint256","name":"totalScore","type":"uint256"},{"internalType":"uint256","name":"userScore","type":"uint256"},{"internalType":"uint256","name":"xvsBalanceForScore","type":"uint256"},{"internalType":"uint256","name":"capital","type":"uint256"},{"internalType":"uint256","name":"cappedSupply","type":"uint256"},{"internalType":"uint256","name":"cappedBorrow","type":"uint256"},{"internalType":"uint256","name":"supplyCapUSD","type":"uint256"},{"internalType":"uint256","name":"borrowCapUSD","type":"uint256"}],"internalType":"struct IPrime.APRInfo","name":"aprInfo","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllMarkets","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getInterestAccrued","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPendingRewards","outputs":[{"components":[{"internalType":"address","name":"vToken","type":"address"},{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct PrimeStorageV1.PendingReward[]","name":"pendingRewards","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"}],"name":"incomeDistributionYearly","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"isUserPrimeHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"isIrrevocable","type":"bool"},{"internalType":"address[]","name":"users","type":"address[]"}],"name":"issue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_irrevocableLimit","type":"uint256"},{"internalType":"uint256","name":"_revocableLimit","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"loopsLimit","type":"uint256"}],"name":"setMaxLoopsLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"uint256[]","name":"timestamps","type":"uint256[]"}],"name":"setStakedAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"_alphaNumerator","type":"uint128"},{"internalType":"uint128","name":"_alphaDenominator","type":"uint128"}],"name":"updateAlpha","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"market","type":"address"},{"internalType":"uint256","name":"supplyMultiplier","type":"uint256"},{"internalType":"uint256","name":"borrowMultiplier","type":"uint256"}],"name":"updateMultipliers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"}],"name":"updateScores","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"xvsUpdated","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Venus","kind":"dev","methods":{"accrueInterest(address)":{"params":{"vToken":"the market for which to distribute the income"}},"accrueInterestAndUpdateScore(address,address)":{"params":{"market":"the market for which to accrue interest and update score","user":"the account address for which to accrue interest and update score"}},"addMarket(address,address,uint256,uint256)":{"params":{"borrowMultiplier":"the multiplier for borrow cap. It should be converted to 1e18","comptroller":"address of the comptroller","market":"address of the market vToken","supplyMultiplier":"the multiplier for supply cap. It should be converted to 1e18"}},"burn(address)":{"params":{"user":"the account address for which the prime token will be burned"}},"calculateAPR(address,address)":{"params":{"market":"the market for which to fetch the APR","user":"the account for which to get the APR"},"returns":{"aprInfo":"APR information for the user for the given market"}},"claimInterest(address)":{"params":{"vToken":"the market for which claim the accrued interest"},"returns":{"_0":"amount the amount of tokens transferred to the user"}},"claimInterest(address,address)":{"params":{"user":"the user for which to claim the accrued interest","vToken":"the market for which claim the accrued interest"},"returns":{"_0":"amount the amount of tokens transferred to the user"}},"claimTimeRemaining(address)":{"params":{"user":"the account address for which we are checking the remaining time"},"returns":{"_0":"timeRemaining the number of seconds the user needs to wait to claim prime token"}},"estimateAPR(address,address,uint256,uint256,uint256)":{"params":{"borrow":"hypothetical borrow amount","market":"the market for which to fetch the APR","supply":"hypothetical supply amount","user":"the account for which to get the APR","xvsStaked":"hypothetical staked XVS amount"},"returns":{"aprInfo":"APR information for the user for the given market"}},"getAllMarkets()":{"returns":{"_0":"an array of addresses representing all available markets"}},"getInterestAccrued(address,address)":{"params":{"user":"the account for which to get the accrued interest","vToken":"the market for which to fetch the accrued interest"},"returns":{"_0":"interestAccrued the number of underlying tokens accrued by the user since the last accrual"}},"getPendingRewards(address)":{"params":{"user":"the account for which to get the accrued interests"},"returns":{"pendingRewards":"the number of underlying tokens accrued by the user for all markets"}},"incomeDistributionYearly(address)":{"params":{"vToken":"the market for which to fetch the total income that's going to distributed in a year"},"returns":{"amount":"the total income"}},"isUserPrimeHolder(address)":{"returns":{"_0":"isPrimeHolder true if user is a prime holder"}},"issue(bool,address[])":{"params":{"isIrrevocable":"are the tokens being issued","users":"list of address to issue tokens to"}},"setLimit(uint256,uint256)":{"params":{"_irrevocableLimit":"total number of irrevocable tokens that can be minted","_revocableLimit":"total number of revocable tokens that can be minted"}},"setMaxLoopsLimit(uint256)":{"params":{"loopsLimit":"Number of loops limit"}},"setStakedAt(address[],uint256[])":{"params":{"timestamps":"new staked at timestamp for the users","users":"accounts for which we need to update staked at timestamp"}},"updateAlpha(uint128,uint128)":{"params":{"_alphaDenominator":"denominator of alpha. If alpha is 0.5 then denominator is 2","_alphaNumerator":"numerator of alpha. If alpha is 0.5 then numerator is 1"}},"updateMultipliers(address,uint256,uint256)":{"params":{"borrowMultiplier":"new borrow multiplier for the market, scaled by 1e18","market":"address of the market vToken","supplyMultiplier":"new supply multiplier for the market, scaled by 1e18"}},"updateScores(address[])":{"params":{"users":"accounts for which we need to update score"}},"xvsUpdated(address)":{"params":{"user":"the account address whose balance was updated"}}},"title":"IPrime","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"accrueInterest(address)":"9198e515","accrueInterestAndUpdateScore(address,address)":"cf329d16","addMarket(address,address,uint256,uint256)":"bc5dc4c3","burn(address)":"89afcb44","calculateAPR(address,address)":"fa6d5f18","claim()":"4e71d92d","claimInterest(address)":"88d742c2","claimInterest(address,address)":"ba437c68","claimTimeRemaining(address)":"e4676f37","estimateAPR(address,address,uint256,uint256,uint256)":"b7f2d258","getAllMarkets()":"b0772d0b","getInterestAccrued(address,address)":"d65bd241","getPendingRewards(address)":"f6ed2017","incomeDistributionYearly(address)":"5d536d30","isUserPrimeHolder(address)":"38f6a434","issue(bool,address[])":"7dafcd89","setLimit(uint256,uint256)":"207add91","setMaxLoopsLimit(uint256)":"80d45a2d","setStakedAt(address[],uint256[])":"594a67ee","togglePause()":"c4ae3168","updateAlpha(uint128,uint128)":"e18f8822","updateMultipliers(address,uint256,uint256)":"55d36c98","updateScores(address[])":"24e6baf2","xvsUpdated(address)":"37f23cd3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"}],\"name\":\"accrueInterest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"}],\"name\":\"accrueInterestAndUpdateScore\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"supplyMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowMultiplier\",\"type\":\"uint256\"}],\"name\":\"addMarket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"calculateAPR\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"supplyAPR\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowAPR\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalScore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userScore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"xvsBalanceForScore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"capital\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cappedSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cappedBorrow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyCapUSD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowCapUSD\",\"type\":\"uint256\"}],\"internalType\":\"struct IPrime.APRInfo\",\"name\":\"aprInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"}],\"name\":\"claimInterest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"claimInterest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"claimTimeRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"borrow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"xvsStaked\",\"type\":\"uint256\"}],\"name\":\"estimateAPR\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"supplyAPR\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowAPR\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalScore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userScore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"xvsBalanceForScore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"capital\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cappedSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cappedBorrow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyCapUSD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowCapUSD\",\"type\":\"uint256\"}],\"internalType\":\"struct IPrime.APRInfo\",\"name\":\"aprInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllMarkets\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getInterestAccrued\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getPendingRewards\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct PrimeStorageV1.PendingReward[]\",\"name\":\"pendingRewards\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"}],\"name\":\"incomeDistributionYearly\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"isUserPrimeHolder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"isIrrevocable\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"users\",\"type\":\"address[]\"}],\"name\":\"issue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_irrevocableLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_revocableLimit\",\"type\":\"uint256\"}],\"name\":\"setLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loopsLimit\",\"type\":\"uint256\"}],\"name\":\"setMaxLoopsLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"users\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"timestamps\",\"type\":\"uint256[]\"}],\"name\":\"setStakedAt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"togglePause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_alphaNumerator\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"_alphaDenominator\",\"type\":\"uint128\"}],\"name\":\"updateAlpha\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"supplyMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowMultiplier\",\"type\":\"uint256\"}],\"name\":\"updateMultipliers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"users\",\"type\":\"address[]\"}],\"name\":\"updateScores\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"xvsUpdated\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"kind\":\"dev\",\"methods\":{\"accrueInterest(address)\":{\"params\":{\"vToken\":\"the market for which to distribute the income\"}},\"accrueInterestAndUpdateScore(address,address)\":{\"params\":{\"market\":\"the market for which to accrue interest and update score\",\"user\":\"the account address for which to accrue interest and update score\"}},\"addMarket(address,address,uint256,uint256)\":{\"params\":{\"borrowMultiplier\":\"the multiplier for borrow cap. It should be converted to 1e18\",\"comptroller\":\"address of the comptroller\",\"market\":\"address of the market vToken\",\"supplyMultiplier\":\"the multiplier for supply cap. It should be converted to 1e18\"}},\"burn(address)\":{\"params\":{\"user\":\"the account address for which the prime token will be burned\"}},\"calculateAPR(address,address)\":{\"params\":{\"market\":\"the market for which to fetch the APR\",\"user\":\"the account for which to get the APR\"},\"returns\":{\"aprInfo\":\"APR information for the user for the given market\"}},\"claimInterest(address)\":{\"params\":{\"vToken\":\"the market for which claim the accrued interest\"},\"returns\":{\"_0\":\"amount the amount of tokens transferred to the user\"}},\"claimInterest(address,address)\":{\"params\":{\"user\":\"the user for which to claim the accrued interest\",\"vToken\":\"the market for which claim the accrued interest\"},\"returns\":{\"_0\":\"amount the amount of tokens transferred to the user\"}},\"claimTimeRemaining(address)\":{\"params\":{\"user\":\"the account address for which we are checking the remaining time\"},\"returns\":{\"_0\":\"timeRemaining the number of seconds the user needs to wait to claim prime token\"}},\"estimateAPR(address,address,uint256,uint256,uint256)\":{\"params\":{\"borrow\":\"hypothetical borrow amount\",\"market\":\"the market for which to fetch the APR\",\"supply\":\"hypothetical supply amount\",\"user\":\"the account for which to get the APR\",\"xvsStaked\":\"hypothetical staked XVS amount\"},\"returns\":{\"aprInfo\":\"APR information for the user for the given market\"}},\"getAllMarkets()\":{\"returns\":{\"_0\":\"an array of addresses representing all available markets\"}},\"getInterestAccrued(address,address)\":{\"params\":{\"user\":\"the account for which to get the accrued interest\",\"vToken\":\"the market for which to fetch the accrued interest\"},\"returns\":{\"_0\":\"interestAccrued the number of underlying tokens accrued by the user since the last accrual\"}},\"getPendingRewards(address)\":{\"params\":{\"user\":\"the account for which to get the accrued interests\"},\"returns\":{\"pendingRewards\":\"the number of underlying tokens accrued by the user for all markets\"}},\"incomeDistributionYearly(address)\":{\"params\":{\"vToken\":\"the market for which to fetch the total income that's going to distributed in a year\"},\"returns\":{\"amount\":\"the total income\"}},\"isUserPrimeHolder(address)\":{\"returns\":{\"_0\":\"isPrimeHolder true if user is a prime holder\"}},\"issue(bool,address[])\":{\"params\":{\"isIrrevocable\":\"are the tokens being issued\",\"users\":\"list of address to issue tokens to\"}},\"setLimit(uint256,uint256)\":{\"params\":{\"_irrevocableLimit\":\"total number of irrevocable tokens that can be minted\",\"_revocableLimit\":\"total number of revocable tokens that can be minted\"}},\"setMaxLoopsLimit(uint256)\":{\"params\":{\"loopsLimit\":\"Number of loops limit\"}},\"setStakedAt(address[],uint256[])\":{\"params\":{\"timestamps\":\"new staked at timestamp for the users\",\"users\":\"accounts for which we need to update staked at timestamp\"}},\"updateAlpha(uint128,uint128)\":{\"params\":{\"_alphaDenominator\":\"denominator of alpha. If alpha is 0.5 then denominator is 2\",\"_alphaNumerator\":\"numerator of alpha. If alpha is 0.5 then numerator is 1\"}},\"updateMultipliers(address,uint256,uint256)\":{\"params\":{\"borrowMultiplier\":\"new borrow multiplier for the market, scaled by 1e18\",\"market\":\"address of the market vToken\",\"supplyMultiplier\":\"new supply multiplier for the market, scaled by 1e18\"}},\"updateScores(address[])\":{\"params\":{\"users\":\"accounts for which we need to update score\"}},\"xvsUpdated(address)\":{\"params\":{\"user\":\"the account address whose balance was updated\"}}},\"title\":\"IPrime\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"accrueInterest(address)\":{\"notice\":\"Distributes income from market since last distribution\"},\"accrueInterestAndUpdateScore(address,address)\":{\"notice\":\"accrues interest and updates score for an user for a specific market\"},\"addMarket(address,address,uint256,uint256)\":{\"notice\":\"Add a market to prime program\"},\"burn(address)\":{\"notice\":\"For burning any prime token\"},\"calculateAPR(address,address)\":{\"notice\":\"Returns supply and borrow APR for user for a given market\"},\"claim()\":{\"notice\":\"For claiming prime token when staking period is completed\"},\"claimInterest(address)\":{\"notice\":\"For user to claim boosted yield\"},\"claimInterest(address,address)\":{\"notice\":\"For user to claim boosted yield\"},\"claimTimeRemaining(address)\":{\"notice\":\"fetch the numbers of seconds remaining for staking period to complete\"},\"estimateAPR(address,address,uint256,uint256,uint256)\":{\"notice\":\"Returns supply and borrow APR for estimated supply, borrow and XVS staked\"},\"getAllMarkets()\":{\"notice\":\"Retrieves an array of all available markets\"},\"getInterestAccrued(address,address)\":{\"notice\":\"Returns boosted interest accrued for a user\"},\"getPendingRewards(address)\":{\"notice\":\"Returns boosted pending interest accrued for a user for all markets\"},\"incomeDistributionYearly(address)\":{\"notice\":\"the total income that's going to be distributed in a year to prime token holders\"},\"isUserPrimeHolder(address)\":{\"notice\":\"Returns if user is a prime holder\"},\"issue(bool,address[])\":{\"notice\":\"Directly issue prime tokens to users\"},\"setLimit(uint256,uint256)\":{\"notice\":\"Set limits for total tokens that can be minted\"},\"setMaxLoopsLimit(uint256)\":{\"notice\":\"Set the limit for the loops can iterate to avoid the DOS\"},\"setStakedAt(address[],uint256[])\":{\"notice\":\"Update staked at timestamp for multiple users\"},\"togglePause()\":{\"notice\":\"To pause or unpause claiming of interest\"},\"updateAlpha(uint128,uint128)\":{\"notice\":\"Update value of alpha\"},\"updateMultipliers(address,uint256,uint256)\":{\"notice\":\"Update multipliers for a market\"},\"updateScores(address[])\":{\"notice\":\"Update total score of multiple users and market\"},\"xvsUpdated(address)\":{\"notice\":\"Executed by XVSVault whenever user's XVSVault balance changes\"}},\"notice\":\"Interface for Prime Token\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\":\"IPrime\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { PrimeStorageV1 } from \\\"../PrimeStorage.sol\\\";\\n\\n/**\\n * @title IPrime\\n * @author Venus\\n * @notice Interface for Prime Token\\n */\\ninterface IPrime {\\n    struct APRInfo {\\n        // supply APR of the user in BPS\\n        uint256 supplyAPR;\\n        // borrow APR of the user in BPS\\n        uint256 borrowAPR;\\n        // total score of the market\\n        uint256 totalScore;\\n        // score of the user\\n        uint256 userScore;\\n        // capped XVS balance of the user\\n        uint256 xvsBalanceForScore;\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    struct Capital {\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    /**\\n     * @notice Returns boosted pending interest accrued for a user for all markets\\n     * @param user the account for which to get the accrued interests\\n     * @return pendingRewards the number of underlying tokens accrued by the user for all markets\\n     */\\n    function getPendingRewards(address user) external returns (PrimeStorageV1.PendingReward[] memory pendingRewards);\\n\\n    /**\\n     * @notice Update total score of multiple users and market\\n     * @param users accounts for which we need to update score\\n     */\\n    function updateScores(address[] memory users) external;\\n\\n    /**\\n     * @notice Update value of alpha\\n     * @param _alphaNumerator numerator of alpha. If alpha is 0.5 then numerator is 1\\n     * @param _alphaDenominator denominator of alpha. If alpha is 0.5 then denominator is 2\\n     */\\n    function updateAlpha(uint128 _alphaNumerator, uint128 _alphaDenominator) external;\\n\\n    /**\\n     * @notice Update multipliers for a market\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier new supply multiplier for the market, scaled by 1e18\\n     * @param borrowMultiplier new borrow multiplier for the market, scaled by 1e18\\n     */\\n    function updateMultipliers(address market, uint256 supplyMultiplier, uint256 borrowMultiplier) external;\\n\\n    /**\\n     * @notice Add a market to prime program\\n     * @param comptroller address of the comptroller\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier the multiplier for supply cap. It should be converted to 1e18\\n     * @param borrowMultiplier the multiplier for borrow cap. It should be converted to 1e18\\n     */\\n    function addMarket(\\n        address comptroller,\\n        address market,\\n        uint256 supplyMultiplier,\\n        uint256 borrowMultiplier\\n    ) external;\\n\\n    /**\\n     * @notice Set limits for total tokens that can be minted\\n     * @param _irrevocableLimit total number of irrevocable tokens that can be minted\\n     * @param _revocableLimit total number of revocable tokens that can be minted\\n     */\\n    function setLimit(uint256 _irrevocableLimit, uint256 _revocableLimit) external;\\n\\n    /**\\n     * @notice Directly issue prime tokens to users\\n     * @param isIrrevocable are the tokens being issued\\n     * @param users list of address to issue tokens to\\n     */\\n    function issue(bool isIrrevocable, address[] calldata users) external;\\n\\n    /**\\n     * @notice Executed by XVSVault whenever user's XVSVault balance changes\\n     * @param user the account address whose balance was updated\\n     */\\n    function xvsUpdated(address user) external;\\n\\n    /**\\n     * @notice accrues interest and updates score for an user for a specific market\\n     * @param user the account address for which to accrue interest and update score\\n     * @param market the market for which to accrue interest and update score\\n     */\\n    function accrueInterestAndUpdateScore(address user, address market) external;\\n\\n    /**\\n     * @notice For claiming prime token when staking period is completed\\n     */\\n    function claim() external;\\n\\n    /**\\n     * @notice For burning any prime token\\n     * @param user the account address for which the prime token will be burned\\n     */\\n    function burn(address user) external;\\n\\n    /**\\n     * @notice To pause or unpause claiming of interest\\n     */\\n    function togglePause() external;\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken) external returns (uint256);\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @param user the user for which to claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Distributes income from market since last distribution\\n     * @param vToken the market for which to distribute the income\\n     */\\n    function accrueInterest(address vToken) external;\\n\\n    /**\\n     * @notice Returns boosted interest accrued for a user\\n     * @param vToken the market for which to fetch the accrued interest\\n     * @param user the account for which to get the accrued interest\\n     * @return interestAccrued the number of underlying tokens accrued by the user since the last accrual\\n     */\\n    function getInterestAccrued(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Retrieves an array of all available markets\\n     * @return an array of addresses representing all available markets\\n     */\\n    function getAllMarkets() external view returns (address[] memory);\\n\\n    /**\\n     * @notice fetch the numbers of seconds remaining for staking period to complete\\n     * @param user the account address for which we are checking the remaining time\\n     * @return timeRemaining the number of seconds the user needs to wait to claim prime token\\n     */\\n    function claimTimeRemaining(address user) external view returns (uint256);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for user for a given market\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function calculateAPR(address market, address user) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for estimated supply, borrow and XVS staked\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @param borrow hypothetical borrow amount\\n     * @param supply hypothetical supply amount\\n     * @param xvsStaked hypothetical staked XVS amount\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function estimateAPR(\\n        address market,\\n        address user,\\n        uint256 borrow,\\n        uint256 supply,\\n        uint256 xvsStaked\\n    ) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice the total income that's going to be distributed in a year to prime token holders\\n     * @param vToken the market for which to fetch the total income that's going to distributed in a year\\n     * @return amount the total income\\n     */\\n    function incomeDistributionYearly(address vToken) external view returns (uint256 amount);\\n\\n    /**\\n     * @notice Returns if user is a prime holder\\n     * @return isPrimeHolder true if user is a prime holder\\n     */\\n    function isUserPrimeHolder(address user) external view returns (bool);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param loopsLimit Number of loops limit\\n     */\\n    function setMaxLoopsLimit(uint256 loopsLimit) external;\\n\\n    /**\\n     * @notice Update staked at timestamp for multiple users\\n     * @param users accounts for which we need to update staked at timestamp\\n     * @param timestamps new staked at timestamp for the users\\n     */\\n    function setStakedAt(address[] calldata users, uint256[] calldata timestamps) external;\\n}\\n\",\"keccak256\":\"0xd112f60183416ad796093b4a83a80ddc1b8b655965f02ae55ca82e2a0c68f97d\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\n/**\\n * @title PrimeStorageV1\\n * @author Venus\\n * @notice Storage for Prime Token\\n */\\ncontract PrimeStorageV1 {\\n    struct Token {\\n        bool exists;\\n        bool isIrrevocable;\\n    }\\n\\n    struct Market {\\n        uint256 supplyMultiplier;\\n        uint256 borrowMultiplier;\\n        uint256 rewardIndex;\\n        uint256 sumOfMembersScore;\\n        bool exists;\\n    }\\n\\n    struct Interest {\\n        uint256 accrued;\\n        uint256 score;\\n        uint256 rewardIndex;\\n    }\\n\\n    struct PendingReward {\\n        address vToken;\\n        address rewardToken;\\n        uint256 amount;\\n    }\\n\\n    /// @notice Base unit for computations, usually used in scaling (multiplications, divisions)\\n    uint256 internal constant EXP_SCALE = 1e18;\\n\\n    /// @notice maximum BPS = 100%\\n    uint256 internal constant MAXIMUM_BPS = 1e4;\\n\\n    /// @notice Mapping to get prime token's metadata\\n    mapping(address => Token) public tokens;\\n\\n    /// @notice  Tracks total irrevocable tokens minted\\n    uint256 public totalIrrevocable;\\n\\n    /// @notice  Tracks total revocable tokens minted\\n    uint256 public totalRevocable;\\n\\n    /// @notice  Indicates maximum revocable tokens that can be minted\\n    uint256 public revocableLimit;\\n\\n    /// @notice  Indicates maximum irrevocable tokens that can be minted\\n    uint256 public irrevocableLimit;\\n\\n    /// @notice Tracks when prime token eligible users started staking for claiming prime token\\n    mapping(address => uint256) public stakedAt;\\n\\n    /// @notice vToken to market configuration\\n    mapping(address => Market) public markets;\\n\\n    /// @notice vToken to user to user index\\n    mapping(address => mapping(address => Interest)) public interests;\\n\\n    /// @notice A list of boosted markets\\n    address[] internal _allMarkets;\\n\\n    /// @notice numerator of alpha. Ex: if alpha is 0.5 then this will be 1\\n    uint128 public alphaNumerator;\\n\\n    /// @notice denominator of alpha. Ex: if alpha is 0.5 then this will be 2\\n    uint128 public alphaDenominator;\\n\\n    /// @notice address of XVS vault\\n    address public xvsVault;\\n\\n    /// @notice address of XVS vault reward token\\n    address public xvsVaultRewardToken;\\n\\n    /// @notice address of XVS vault pool id\\n    uint256 public xvsVaultPoolId;\\n\\n    /// @notice mapping to check if a account's score was updated in the round\\n    mapping(uint256 => mapping(address => bool)) public isScoreUpdated;\\n\\n    /// @notice unique id for next round\\n    uint256 public nextScoreUpdateRoundId;\\n\\n    /// @notice total number of accounts whose score needs to be updated\\n    uint256 public totalScoreUpdatesRequired;\\n\\n    /// @notice total number of accounts whose score is yet to be updated\\n    uint256 public pendingScoreUpdates;\\n\\n    /// @notice mapping used to find if an asset is part of prime markets\\n    mapping(address => address) public vTokenForAsset;\\n\\n    /// @notice Address of core pool comptroller contract\\n    address internal corePoolComptroller;\\n\\n    /// @notice unreleased income from PLP that's already distributed to prime holders\\n    /// @dev mapping of asset address => amount\\n    mapping(address => uint256) public unreleasedPLPIncome;\\n\\n    /// @notice The address of PLP contract\\n    address public primeLiquidityProvider;\\n\\n    /// @notice The address of ResilientOracle contract\\n    ResilientOracleInterface public oracle;\\n\\n    /// @notice The address of PoolRegistry contract\\n    address public poolRegistry;\\n\\n    /// @dev This empty reserved space is put in place to allow future versions to add new\\n    /// variables without shifting down storage in the inheritance chain.\\n    uint256[26] private __gap;\\n}\\n\",\"keccak256\":\"0x5285c875114db2ea2be0b81b65722d5761806217022db733323c4e03365a95e7\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"accrueInterest(address)":{"notice":"Distributes income from market since last distribution"},"accrueInterestAndUpdateScore(address,address)":{"notice":"accrues interest and updates score for an user for a specific market"},"addMarket(address,address,uint256,uint256)":{"notice":"Add a market to prime program"},"burn(address)":{"notice":"For burning any prime token"},"calculateAPR(address,address)":{"notice":"Returns supply and borrow APR for user for a given market"},"claim()":{"notice":"For claiming prime token when staking period is completed"},"claimInterest(address)":{"notice":"For user to claim boosted yield"},"claimInterest(address,address)":{"notice":"For user to claim boosted yield"},"claimTimeRemaining(address)":{"notice":"fetch the numbers of seconds remaining for staking period to complete"},"estimateAPR(address,address,uint256,uint256,uint256)":{"notice":"Returns supply and borrow APR for estimated supply, borrow and XVS staked"},"getAllMarkets()":{"notice":"Retrieves an array of all available markets"},"getInterestAccrued(address,address)":{"notice":"Returns boosted interest accrued for a user"},"getPendingRewards(address)":{"notice":"Returns boosted pending interest accrued for a user for all markets"},"incomeDistributionYearly(address)":{"notice":"the total income that's going to be distributed in a year to prime token holders"},"isUserPrimeHolder(address)":{"notice":"Returns if user is a prime holder"},"issue(bool,address[])":{"notice":"Directly issue prime tokens to users"},"setLimit(uint256,uint256)":{"notice":"Set limits for total tokens that can be minted"},"setMaxLoopsLimit(uint256)":{"notice":"Set the limit for the loops can iterate to avoid the DOS"},"setStakedAt(address[],uint256[])":{"notice":"Update staked at timestamp for multiple users"},"togglePause()":{"notice":"To pause or unpause claiming of interest"},"updateAlpha(uint128,uint128)":{"notice":"Update value of alpha"},"updateMultipliers(address,uint256,uint256)":{"notice":"Update multipliers for a market"},"updateScores(address[])":{"notice":"Update total score of multiple users and market"},"xvsUpdated(address)":{"notice":"Executed by XVSVault whenever user's XVSVault balance changes"}},"notice":"Interface for Prime Token","version":1}}},"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol":{"PrimeStorageV1":{"abi":[{"inputs":[],"name":"alphaDenominator","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alphaNumerator","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"interests","outputs":[{"internalType":"uint256","name":"accrued","type":"uint256"},{"internalType":"uint256","name":"score","type":"uint256"},{"internalType":"uint256","name":"rewardIndex","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"irrevocableLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"isScoreUpdated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"markets","outputs":[{"internalType":"uint256","name":"supplyMultiplier","type":"uint256"},{"internalType":"uint256","name":"borrowMultiplier","type":"uint256"},{"internalType":"uint256","name":"rewardIndex","type":"uint256"},{"internalType":"uint256","name":"sumOfMembersScore","type":"uint256"},{"internalType":"bool","name":"exists","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextScoreUpdateRoundId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"contract ResilientOracleInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingScoreUpdates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"primeLiquidityProvider","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revocableLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokens","outputs":[{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"bool","name":"isIrrevocable","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalIrrevocable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRevocable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalScoreUpdatesRequired","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"unreleasedPLPIncome","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vTokenForAsset","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xvsVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xvsVaultPoolId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xvsVaultRewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Venus","kind":"dev","methods":{},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain."},"unreleasedPLPIncome":{"details":"mapping of asset address => amount"}},"title":"PrimeStorageV1","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080604052348015600f57600080fd5b5061060c8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063afcff50f116100b8578063ce8536131161007c578063ce85361314610321578063d88b9d2e1461033b578063da6ab4f814610344578063e48603391461034d578063ee6b13fc14610387578063ef36bbde146103b057600080fd5b8063afcff50f146102a0578063b9eb69f6146102b3578063bd212c0e146102fc578063c3db3c3614610305578063c86d1a781461030e57600080fd5b8063856c3aa41161010a578063856c3aa4146101e657806388bead73146101ef5780638e8f294b146102025780639565d3d2146102535780639f6506ce1461028e578063a15753dc1461029757600080fd5b80631b9ce575146101475780631bffac8914610170578063487b0dfb1461019d5780637dc0d1d0146101a65780637ef82070146101c6575b600080fd5b600a5461015a906001600160a01b031681565b60405161016791906103f2565b60405180910390f35b61019061017e366004610422565b60136020526000908152604090205481565b6040516101679190610451565b610190600c5481565b6015546101b9906001600160a01b031681565b604051610167919061048f565b6009546101d9906001600160801b031681565b60405161016791906104ac565b61019060045481565b600b5461015a906001600160a01b031681565b610242610210366004610422565b600660205260009081526040902080546001820154600283015460038401546004909401549293919290919060ff1685565b6040516101679594939291906104c2565b61028161026136600461051f565b600d60209081526000928352604080842090915290825290205460ff1681565b604051610167919061055c565b61019060025481565b610190600e5481565b60165461015a906001600160a01b031681565b6102ed6102c136600461056a565b600760209081526000928352604080842090915290825290208054600182015460029092015490919083565b6040516101679392919061058c565b610190600f5481565b61019060105481565b60145461015a906001600160a01b031681565b6009546101d990600160801b90046001600160801b031681565b61019060015481565b61019060035481565b61037961035b366004610422565b60006020819052908152604090205460ff8082169161010090041682565b6040516101679291906105b4565b61015a610395366004610422565b6011602052600090815260409020546001600160a01b031681565b6101906103be366004610422565b60056020526000908152604090205481565b60006001600160a01b0382165b92915050565b6103ec816103d0565b82525050565b602081016103dd82846103e3565b610409816103d0565b811461041457600080fd5b50565b80356103dd81610400565b60006020828403121561043757610437600080fd5b60006104438484610417565b949350505050565b806103ec565b602081016103dd828461044b565b60006001600160a01b0382166103dd565b60006103dd8261045f565b60006103dd82610470565b6103ec8161047b565b602081016103dd8284610486565b6001600160801b0381166103ec565b602081016103dd828461049d565b8015156103ec565b60a081016104d0828861044b565b6104dd602083018761044b565b6104ea604083018661044b565b6104f7606083018561044b565b61050460808301846104ba565b9695505050505050565b80610409565b80356103dd8161050e565b6000806040838503121561053557610535600080fd5b60006105418585610514565b925050602061055285828601610417565b9150509250929050565b602081016103dd82846104ba565b6000806040838503121561058057610580600080fd5b60006105418585610417565b6060810161059a828661044b565b6105a7602083018561044b565b610443604083018461044b565b604081016105c282856104ba565b6105cf60208301846104ba565b939250505056fea2646970667358221220deb986e8ff49eaddf5dbaf7a4691eee3e68b742f49b1818c3e6fbb5b8e34ee5164736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x60C DUP1 PUSH2 0x1F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x142 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAFCFF50F GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xCE853613 GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xCE853613 EQ PUSH2 0x321 JUMPI DUP1 PUSH4 0xD88B9D2E EQ PUSH2 0x33B JUMPI DUP1 PUSH4 0xDA6AB4F8 EQ PUSH2 0x344 JUMPI DUP1 PUSH4 0xE4860339 EQ PUSH2 0x34D JUMPI DUP1 PUSH4 0xEE6B13FC EQ PUSH2 0x387 JUMPI DUP1 PUSH4 0xEF36BBDE EQ PUSH2 0x3B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xAFCFF50F EQ PUSH2 0x2A0 JUMPI DUP1 PUSH4 0xB9EB69F6 EQ PUSH2 0x2B3 JUMPI DUP1 PUSH4 0xBD212C0E EQ PUSH2 0x2FC JUMPI DUP1 PUSH4 0xC3DB3C36 EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0xC86D1A78 EQ PUSH2 0x30E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x856C3AA4 GT PUSH2 0x10A JUMPI DUP1 PUSH4 0x856C3AA4 EQ PUSH2 0x1E6 JUMPI DUP1 PUSH4 0x88BEAD73 EQ PUSH2 0x1EF JUMPI DUP1 PUSH4 0x8E8F294B EQ PUSH2 0x202 JUMPI DUP1 PUSH4 0x9565D3D2 EQ PUSH2 0x253 JUMPI DUP1 PUSH4 0x9F6506CE EQ PUSH2 0x28E JUMPI DUP1 PUSH4 0xA15753DC EQ PUSH2 0x297 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1B9CE575 EQ PUSH2 0x147 JUMPI DUP1 PUSH4 0x1BFFAC89 EQ PUSH2 0x170 JUMPI DUP1 PUSH4 0x487B0DFB EQ PUSH2 0x19D JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0x1A6 JUMPI DUP1 PUSH4 0x7EF82070 EQ PUSH2 0x1C6 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xA SLOAD PUSH2 0x15A SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x167 SWAP2 SWAP1 PUSH2 0x3F2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x190 PUSH2 0x17E CALLDATASIZE PUSH1 0x4 PUSH2 0x422 JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x167 SWAP2 SWAP1 PUSH2 0x451 JUMP JUMPDEST PUSH2 0x190 PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH2 0x1B9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x167 SWAP2 SWAP1 PUSH2 0x48F JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH2 0x1D9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x167 SWAP2 SWAP1 PUSH2 0x4AC JUMP JUMPDEST PUSH2 0x190 PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xB SLOAD PUSH2 0x15A SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x242 PUSH2 0x210 CALLDATASIZE PUSH1 0x4 PUSH2 0x422 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 SWAP1 SWAP5 ADD SLOAD SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0xFF AND DUP6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x167 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4C2 JUMP JUMPDEST PUSH2 0x281 PUSH2 0x261 CALLDATASIZE PUSH1 0x4 PUSH2 0x51F JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x167 SWAP2 SWAP1 PUSH2 0x55C JUMP JUMPDEST PUSH2 0x190 PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x190 PUSH1 0xE SLOAD DUP2 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH2 0x15A SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2ED PUSH2 0x2C1 CALLDATASIZE PUSH1 0x4 PUSH2 0x56A JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD SWAP1 SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x167 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x58C JUMP JUMPDEST PUSH2 0x190 PUSH1 0xF SLOAD DUP2 JUMP JUMPDEST PUSH2 0x190 PUSH1 0x10 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH2 0x15A SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH2 0x1D9 SWAP1 PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x190 PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x190 PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x379 PUSH2 0x35B CALLDATASIZE PUSH1 0x4 PUSH2 0x422 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 SWAP1 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF DUP1 DUP3 AND SWAP2 PUSH2 0x100 SWAP1 DIV AND DUP3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x167 SWAP3 SWAP2 SWAP1 PUSH2 0x5B4 JUMP JUMPDEST PUSH2 0x15A PUSH2 0x395 CALLDATASIZE PUSH1 0x4 PUSH2 0x422 JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x190 PUSH2 0x3BE CALLDATASIZE PUSH1 0x4 PUSH2 0x422 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x3EC DUP2 PUSH2 0x3D0 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x3DD DUP3 DUP5 PUSH2 0x3E3 JUMP JUMPDEST PUSH2 0x409 DUP2 PUSH2 0x3D0 JUMP JUMPDEST DUP2 EQ PUSH2 0x414 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3DD DUP2 PUSH2 0x400 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x437 JUMPI PUSH2 0x437 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x443 DUP5 DUP5 PUSH2 0x417 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x3EC JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x3DD DUP3 DUP5 PUSH2 0x44B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3DD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3DD DUP3 PUSH2 0x45F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3DD DUP3 PUSH2 0x470 JUMP JUMPDEST PUSH2 0x3EC DUP2 PUSH2 0x47B JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x3DD DUP3 DUP5 PUSH2 0x486 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND PUSH2 0x3EC JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x3DD DUP3 DUP5 PUSH2 0x49D JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x3EC JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD PUSH2 0x4D0 DUP3 DUP9 PUSH2 0x44B JUMP JUMPDEST PUSH2 0x4DD PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x44B JUMP JUMPDEST PUSH2 0x4EA PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x44B JUMP JUMPDEST PUSH2 0x4F7 PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x44B JUMP JUMPDEST PUSH2 0x504 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x4BA JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x409 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3DD DUP2 PUSH2 0x50E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x535 JUMPI PUSH2 0x535 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x541 DUP6 DUP6 PUSH2 0x514 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x552 DUP6 DUP3 DUP7 ADD PUSH2 0x417 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x3DD DUP3 DUP5 PUSH2 0x4BA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x580 JUMPI PUSH2 0x580 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x541 DUP6 DUP6 PUSH2 0x417 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x59A DUP3 DUP7 PUSH2 0x44B JUMP JUMPDEST PUSH2 0x5A7 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x44B JUMP JUMPDEST PUSH2 0x443 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x44B JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x5C2 DUP3 DUP6 PUSH2 0x4BA JUMP JUMPDEST PUSH2 0x5CF PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x4BA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDE 0xB9 DUP7 0xE8 SELFDESTRUCT BLOBHASH 0xEA 0xDD CREATE2 0xDB 0xAF PUSH27 0x4691EEE3E68B742F49B1818C3E6FBB5B8E34EE5164736F6C634300 ADDMOD NOT STOP CALLER ","sourceMap":"259:3507:48:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@alphaDenominator_16703":{"entryPoint":null,"id":16703,"parameterSlots":0,"returnSlots":0},"@alphaNumerator_16700":{"entryPoint":null,"id":16700,"parameterSlots":0,"returnSlots":0},"@interests_16693":{"entryPoint":null,"id":16693,"parameterSlots":0,"returnSlots":0},"@irrevocableLimit_16674":{"entryPoint":null,"id":16674,"parameterSlots":0,"returnSlots":0},"@isScoreUpdated_16719":{"entryPoint":null,"id":16719,"parameterSlots":0,"returnSlots":0},"@markets_16685":{"entryPoint":null,"id":16685,"parameterSlots":0,"returnSlots":0},"@nextScoreUpdateRoundId_16722":{"entryPoint":null,"id":16722,"parameterSlots":0,"returnSlots":0},"@oracle_16748":{"entryPoint":null,"id":16748,"parameterSlots":0,"returnSlots":0},"@pendingScoreUpdates_16728":{"entryPoint":null,"id":16728,"parameterSlots":0,"returnSlots":0},"@poolRegistry_16751":{"entryPoint":null,"id":16751,"parameterSlots":0,"returnSlots":0},"@primeLiquidityProvider_16744":{"entryPoint":null,"id":16744,"parameterSlots":0,"returnSlots":0},"@revocableLimit_16671":{"entryPoint":null,"id":16671,"parameterSlots":0,"returnSlots":0},"@stakedAt_16679":{"entryPoint":null,"id":16679,"parameterSlots":0,"returnSlots":0},"@tokens_16662":{"entryPoint":null,"id":16662,"parameterSlots":0,"returnSlots":0},"@totalIrrevocable_16665":{"entryPoint":null,"id":16665,"parameterSlots":0,"returnSlots":0},"@totalRevocable_16668":{"entryPoint":null,"id":16668,"parameterSlots":0,"returnSlots":0},"@totalScoreUpdatesRequired_16725":{"entryPoint":null,"id":16725,"parameterSlots":0,"returnSlots":0},"@unreleasedPLPIncome_16741":{"entryPoint":null,"id":16741,"parameterSlots":0,"returnSlots":0},"@vTokenForAsset_16733":{"entryPoint":null,"id":16733,"parameterSlots":0,"returnSlots":0},"@xvsVaultPoolId_16712":{"entryPoint":null,"id":16712,"parameterSlots":0,"returnSlots":0},"@xvsVaultRewardToken_16709":{"entryPoint":null,"id":16709,"parameterSlots":0,"returnSlots":0},"@xvsVault_16706":{"entryPoint":null,"id":16706,"parameterSlots":0,"returnSlots":0},"abi_decode_t_address":{"entryPoint":1047,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_uint256":{"entryPoint":1300,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":1058,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":1386,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256t_address":{"entryPoint":1311,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_t_address_to_t_address_fromStack":{"entryPoint":995,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_bool_to_t_bool_fromStack":{"entryPoint":1210,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_ResilientOracleInterface_$16173_to_t_address_fromStack":{"entryPoint":1158,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_uint128_to_t_uint128_fromStack":{"entryPoint":1181,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_uint256_to_t_uint256_fromStack":{"entryPoint":1099,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":1010,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":1372,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool_t_bool__to_t_bool_t_bool__fromStack_reversed":{"entryPoint":1460,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_contract$_ResilientOracleInterface_$16173__to_t_address__fromStack_reversed":{"entryPoint":1167,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed":{"entryPoint":1196,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":1105,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":1420,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_bool__to_t_uint256_t_uint256_t_uint256_t_uint256_t_bool__fromStack_reversed":{"entryPoint":1218,"id":null,"parameterSlots":6,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"cleanup_t_address":{"entryPoint":976,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_bool":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint128":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_ResilientOracleInterface_$16173_to_t_address":{"entryPoint":1147,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint160_to_t_address":{"entryPoint":1136,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint160_to_t_uint160":{"entryPoint":1119,"id":null,"parameterSlots":1,"returnSlots":1},"identity":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_t_address":{"entryPoint":1024,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_uint256":{"entryPoint":1294,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:6529:69","nodeType":"YulBlock","src":"0:6529:69","statements":[{"body":{"nativeSrc":"52:81:69","nodeType":"YulBlock","src":"52:81:69","statements":[{"nativeSrc":"62:65:69","nodeType":"YulAssignment","src":"62:65:69","value":{"arguments":[{"name":"value","nativeSrc":"77:5:69","nodeType":"YulIdentifier","src":"77:5:69"},{"kind":"number","nativeSrc":"84:42:69","nodeType":"YulLiteral","src":"84:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"73:3:69","nodeType":"YulIdentifier","src":"73:3:69"},"nativeSrc":"73:54:69","nodeType":"YulFunctionCall","src":"73:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"62:7:69","nodeType":"YulIdentifier","src":"62:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"7:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"34:5:69","nodeType":"YulTypedName","src":"34:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"44:7:69","nodeType":"YulTypedName","src":"44:7:69","type":""}],"src":"7:126:69"},{"body":{"nativeSrc":"184:51:69","nodeType":"YulBlock","src":"184:51:69","statements":[{"nativeSrc":"194:35:69","nodeType":"YulAssignment","src":"194:35:69","value":{"arguments":[{"name":"value","nativeSrc":"223:5:69","nodeType":"YulIdentifier","src":"223:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"205:17:69","nodeType":"YulIdentifier","src":"205:17:69"},"nativeSrc":"205:24:69","nodeType":"YulFunctionCall","src":"205:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"194:7:69","nodeType":"YulIdentifier","src":"194:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"139:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"166:5:69","nodeType":"YulTypedName","src":"166:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"176:7:69","nodeType":"YulTypedName","src":"176:7:69","type":""}],"src":"139:96:69"},{"body":{"nativeSrc":"306:53:69","nodeType":"YulBlock","src":"306:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"323:3:69","nodeType":"YulIdentifier","src":"323:3:69"},{"arguments":[{"name":"value","nativeSrc":"346:5:69","nodeType":"YulIdentifier","src":"346:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"328:17:69","nodeType":"YulIdentifier","src":"328:17:69"},"nativeSrc":"328:24:69","nodeType":"YulFunctionCall","src":"328:24:69"}],"functionName":{"name":"mstore","nativeSrc":"316:6:69","nodeType":"YulIdentifier","src":"316:6:69"},"nativeSrc":"316:37:69","nodeType":"YulFunctionCall","src":"316:37:69"},"nativeSrc":"316:37:69","nodeType":"YulExpressionStatement","src":"316:37:69"}]},"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"241:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"294:5:69","nodeType":"YulTypedName","src":"294:5:69","type":""},{"name":"pos","nativeSrc":"301:3:69","nodeType":"YulTypedName","src":"301:3:69","type":""}],"src":"241:118:69"},{"body":{"nativeSrc":"463:124:69","nodeType":"YulBlock","src":"463:124:69","statements":[{"nativeSrc":"473:26:69","nodeType":"YulAssignment","src":"473:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"485:9:69","nodeType":"YulIdentifier","src":"485:9:69"},{"kind":"number","nativeSrc":"496:2:69","nodeType":"YulLiteral","src":"496:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"481:3:69","nodeType":"YulIdentifier","src":"481:3:69"},"nativeSrc":"481:18:69","nodeType":"YulFunctionCall","src":"481:18:69"},"variableNames":[{"name":"tail","nativeSrc":"473:4:69","nodeType":"YulIdentifier","src":"473:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"553:6:69","nodeType":"YulIdentifier","src":"553:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"566:9:69","nodeType":"YulIdentifier","src":"566:9:69"},{"kind":"number","nativeSrc":"577:1:69","nodeType":"YulLiteral","src":"577:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"562:3:69","nodeType":"YulIdentifier","src":"562:3:69"},"nativeSrc":"562:17:69","nodeType":"YulFunctionCall","src":"562:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"509:43:69","nodeType":"YulIdentifier","src":"509:43:69"},"nativeSrc":"509:71:69","nodeType":"YulFunctionCall","src":"509:71:69"},"nativeSrc":"509:71:69","nodeType":"YulExpressionStatement","src":"509:71:69"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"365:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"435:9:69","nodeType":"YulTypedName","src":"435:9:69","type":""},{"name":"value0","nativeSrc":"447:6:69","nodeType":"YulTypedName","src":"447:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"458:4:69","nodeType":"YulTypedName","src":"458:4:69","type":""}],"src":"365:222:69"},{"body":{"nativeSrc":"633:35:69","nodeType":"YulBlock","src":"633:35:69","statements":[{"nativeSrc":"643:19:69","nodeType":"YulAssignment","src":"643:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"659:2:69","nodeType":"YulLiteral","src":"659:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"653:5:69","nodeType":"YulIdentifier","src":"653:5:69"},"nativeSrc":"653:9:69","nodeType":"YulFunctionCall","src":"653:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"643:6:69","nodeType":"YulIdentifier","src":"643:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"593:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"626:6:69","nodeType":"YulTypedName","src":"626:6:69","type":""}],"src":"593:75:69"},{"body":{"nativeSrc":"763:28:69","nodeType":"YulBlock","src":"763:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"780:1:69","nodeType":"YulLiteral","src":"780:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"783:1:69","nodeType":"YulLiteral","src":"783:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"773:6:69","nodeType":"YulIdentifier","src":"773:6:69"},"nativeSrc":"773:12:69","nodeType":"YulFunctionCall","src":"773:12:69"},"nativeSrc":"773:12:69","nodeType":"YulExpressionStatement","src":"773:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"674:117:69","nodeType":"YulFunctionDefinition","src":"674:117:69"},{"body":{"nativeSrc":"886:28:69","nodeType":"YulBlock","src":"886:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"903:1:69","nodeType":"YulLiteral","src":"903:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"906:1:69","nodeType":"YulLiteral","src":"906:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"896:6:69","nodeType":"YulIdentifier","src":"896:6:69"},"nativeSrc":"896:12:69","nodeType":"YulFunctionCall","src":"896:12:69"},"nativeSrc":"896:12:69","nodeType":"YulExpressionStatement","src":"896:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"797:117:69","nodeType":"YulFunctionDefinition","src":"797:117:69"},{"body":{"nativeSrc":"963:79:69","nodeType":"YulBlock","src":"963:79:69","statements":[{"body":{"nativeSrc":"1020:16:69","nodeType":"YulBlock","src":"1020:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1029:1:69","nodeType":"YulLiteral","src":"1029:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1032:1:69","nodeType":"YulLiteral","src":"1032:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1022:6:69","nodeType":"YulIdentifier","src":"1022:6:69"},"nativeSrc":"1022:12:69","nodeType":"YulFunctionCall","src":"1022:12:69"},"nativeSrc":"1022:12:69","nodeType":"YulExpressionStatement","src":"1022:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"986:5:69","nodeType":"YulIdentifier","src":"986:5:69"},{"arguments":[{"name":"value","nativeSrc":"1011:5:69","nodeType":"YulIdentifier","src":"1011:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"993:17:69","nodeType":"YulIdentifier","src":"993:17:69"},"nativeSrc":"993:24:69","nodeType":"YulFunctionCall","src":"993:24:69"}],"functionName":{"name":"eq","nativeSrc":"983:2:69","nodeType":"YulIdentifier","src":"983:2:69"},"nativeSrc":"983:35:69","nodeType":"YulFunctionCall","src":"983:35:69"}],"functionName":{"name":"iszero","nativeSrc":"976:6:69","nodeType":"YulIdentifier","src":"976:6:69"},"nativeSrc":"976:43:69","nodeType":"YulFunctionCall","src":"976:43:69"},"nativeSrc":"973:63:69","nodeType":"YulIf","src":"973:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"920:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"956:5:69","nodeType":"YulTypedName","src":"956:5:69","type":""}],"src":"920:122:69"},{"body":{"nativeSrc":"1100:87:69","nodeType":"YulBlock","src":"1100:87:69","statements":[{"nativeSrc":"1110:29:69","nodeType":"YulAssignment","src":"1110:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"1132:6:69","nodeType":"YulIdentifier","src":"1132:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"1119:12:69","nodeType":"YulIdentifier","src":"1119:12:69"},"nativeSrc":"1119:20:69","nodeType":"YulFunctionCall","src":"1119:20:69"},"variableNames":[{"name":"value","nativeSrc":"1110:5:69","nodeType":"YulIdentifier","src":"1110:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"1175:5:69","nodeType":"YulIdentifier","src":"1175:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"1148:26:69","nodeType":"YulIdentifier","src":"1148:26:69"},"nativeSrc":"1148:33:69","nodeType":"YulFunctionCall","src":"1148:33:69"},"nativeSrc":"1148:33:69","nodeType":"YulExpressionStatement","src":"1148:33:69"}]},"name":"abi_decode_t_address","nativeSrc":"1048:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"1078:6:69","nodeType":"YulTypedName","src":"1078:6:69","type":""},{"name":"end","nativeSrc":"1086:3:69","nodeType":"YulTypedName","src":"1086:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"1094:5:69","nodeType":"YulTypedName","src":"1094:5:69","type":""}],"src":"1048:139:69"},{"body":{"nativeSrc":"1259:263:69","nodeType":"YulBlock","src":"1259:263:69","statements":[{"body":{"nativeSrc":"1305:83:69","nodeType":"YulBlock","src":"1305:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"1307:77:69","nodeType":"YulIdentifier","src":"1307:77:69"},"nativeSrc":"1307:79:69","nodeType":"YulFunctionCall","src":"1307:79:69"},"nativeSrc":"1307:79:69","nodeType":"YulExpressionStatement","src":"1307:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"1280:7:69","nodeType":"YulIdentifier","src":"1280:7:69"},{"name":"headStart","nativeSrc":"1289:9:69","nodeType":"YulIdentifier","src":"1289:9:69"}],"functionName":{"name":"sub","nativeSrc":"1276:3:69","nodeType":"YulIdentifier","src":"1276:3:69"},"nativeSrc":"1276:23:69","nodeType":"YulFunctionCall","src":"1276:23:69"},{"kind":"number","nativeSrc":"1301:2:69","nodeType":"YulLiteral","src":"1301:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"1272:3:69","nodeType":"YulIdentifier","src":"1272:3:69"},"nativeSrc":"1272:32:69","nodeType":"YulFunctionCall","src":"1272:32:69"},"nativeSrc":"1269:119:69","nodeType":"YulIf","src":"1269:119:69"},{"nativeSrc":"1398:117:69","nodeType":"YulBlock","src":"1398:117:69","statements":[{"nativeSrc":"1413:15:69","nodeType":"YulVariableDeclaration","src":"1413:15:69","value":{"kind":"number","nativeSrc":"1427:1:69","nodeType":"YulLiteral","src":"1427:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"1417:6:69","nodeType":"YulTypedName","src":"1417:6:69","type":""}]},{"nativeSrc":"1442:63:69","nodeType":"YulAssignment","src":"1442:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1477:9:69","nodeType":"YulIdentifier","src":"1477:9:69"},{"name":"offset","nativeSrc":"1488:6:69","nodeType":"YulIdentifier","src":"1488:6:69"}],"functionName":{"name":"add","nativeSrc":"1473:3:69","nodeType":"YulIdentifier","src":"1473:3:69"},"nativeSrc":"1473:22:69","nodeType":"YulFunctionCall","src":"1473:22:69"},{"name":"dataEnd","nativeSrc":"1497:7:69","nodeType":"YulIdentifier","src":"1497:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"1452:20:69","nodeType":"YulIdentifier","src":"1452:20:69"},"nativeSrc":"1452:53:69","nodeType":"YulFunctionCall","src":"1452:53:69"},"variableNames":[{"name":"value0","nativeSrc":"1442:6:69","nodeType":"YulIdentifier","src":"1442:6:69"}]}]}]},"name":"abi_decode_tuple_t_address","nativeSrc":"1193:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1229:9:69","nodeType":"YulTypedName","src":"1229:9:69","type":""},{"name":"dataEnd","nativeSrc":"1240:7:69","nodeType":"YulTypedName","src":"1240:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"1252:6:69","nodeType":"YulTypedName","src":"1252:6:69","type":""}],"src":"1193:329:69"},{"body":{"nativeSrc":"1573:32:69","nodeType":"YulBlock","src":"1573:32:69","statements":[{"nativeSrc":"1583:16:69","nodeType":"YulAssignment","src":"1583:16:69","value":{"name":"value","nativeSrc":"1594:5:69","nodeType":"YulIdentifier","src":"1594:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"1583:7:69","nodeType":"YulIdentifier","src":"1583:7:69"}]}]},"name":"cleanup_t_uint256","nativeSrc":"1528:77:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1555:5:69","nodeType":"YulTypedName","src":"1555:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"1565:7:69","nodeType":"YulTypedName","src":"1565:7:69","type":""}],"src":"1528:77:69"},{"body":{"nativeSrc":"1676:53:69","nodeType":"YulBlock","src":"1676:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"1693:3:69","nodeType":"YulIdentifier","src":"1693:3:69"},{"arguments":[{"name":"value","nativeSrc":"1716:5:69","nodeType":"YulIdentifier","src":"1716:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"1698:17:69","nodeType":"YulIdentifier","src":"1698:17:69"},"nativeSrc":"1698:24:69","nodeType":"YulFunctionCall","src":"1698:24:69"}],"functionName":{"name":"mstore","nativeSrc":"1686:6:69","nodeType":"YulIdentifier","src":"1686:6:69"},"nativeSrc":"1686:37:69","nodeType":"YulFunctionCall","src":"1686:37:69"},"nativeSrc":"1686:37:69","nodeType":"YulExpressionStatement","src":"1686:37:69"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"1611:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1664:5:69","nodeType":"YulTypedName","src":"1664:5:69","type":""},{"name":"pos","nativeSrc":"1671:3:69","nodeType":"YulTypedName","src":"1671:3:69","type":""}],"src":"1611:118:69"},{"body":{"nativeSrc":"1833:124:69","nodeType":"YulBlock","src":"1833:124:69","statements":[{"nativeSrc":"1843:26:69","nodeType":"YulAssignment","src":"1843:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"1855:9:69","nodeType":"YulIdentifier","src":"1855:9:69"},{"kind":"number","nativeSrc":"1866:2:69","nodeType":"YulLiteral","src":"1866:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1851:3:69","nodeType":"YulIdentifier","src":"1851:3:69"},"nativeSrc":"1851:18:69","nodeType":"YulFunctionCall","src":"1851:18:69"},"variableNames":[{"name":"tail","nativeSrc":"1843:4:69","nodeType":"YulIdentifier","src":"1843:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"1923:6:69","nodeType":"YulIdentifier","src":"1923:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"1936:9:69","nodeType":"YulIdentifier","src":"1936:9:69"},{"kind":"number","nativeSrc":"1947:1:69","nodeType":"YulLiteral","src":"1947:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1932:3:69","nodeType":"YulIdentifier","src":"1932:3:69"},"nativeSrc":"1932:17:69","nodeType":"YulFunctionCall","src":"1932:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"1879:43:69","nodeType":"YulIdentifier","src":"1879:43:69"},"nativeSrc":"1879:71:69","nodeType":"YulFunctionCall","src":"1879:71:69"},"nativeSrc":"1879:71:69","nodeType":"YulExpressionStatement","src":"1879:71:69"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nativeSrc":"1735:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1805:9:69","nodeType":"YulTypedName","src":"1805:9:69","type":""},{"name":"value0","nativeSrc":"1817:6:69","nodeType":"YulTypedName","src":"1817:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1828:4:69","nodeType":"YulTypedName","src":"1828:4:69","type":""}],"src":"1735:222:69"},{"body":{"nativeSrc":"1995:28:69","nodeType":"YulBlock","src":"1995:28:69","statements":[{"nativeSrc":"2005:12:69","nodeType":"YulAssignment","src":"2005:12:69","value":{"name":"value","nativeSrc":"2012:5:69","nodeType":"YulIdentifier","src":"2012:5:69"},"variableNames":[{"name":"ret","nativeSrc":"2005:3:69","nodeType":"YulIdentifier","src":"2005:3:69"}]}]},"name":"identity","nativeSrc":"1963:60:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1981:5:69","nodeType":"YulTypedName","src":"1981:5:69","type":""}],"returnVariables":[{"name":"ret","nativeSrc":"1991:3:69","nodeType":"YulTypedName","src":"1991:3:69","type":""}],"src":"1963:60:69"},{"body":{"nativeSrc":"2089:82:69","nodeType":"YulBlock","src":"2089:82:69","statements":[{"nativeSrc":"2099:66:69","nodeType":"YulAssignment","src":"2099:66:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"2157:5:69","nodeType":"YulIdentifier","src":"2157:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"2139:17:69","nodeType":"YulIdentifier","src":"2139:17:69"},"nativeSrc":"2139:24:69","nodeType":"YulFunctionCall","src":"2139:24:69"}],"functionName":{"name":"identity","nativeSrc":"2130:8:69","nodeType":"YulIdentifier","src":"2130:8:69"},"nativeSrc":"2130:34:69","nodeType":"YulFunctionCall","src":"2130:34:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"2112:17:69","nodeType":"YulIdentifier","src":"2112:17:69"},"nativeSrc":"2112:53:69","nodeType":"YulFunctionCall","src":"2112:53:69"},"variableNames":[{"name":"converted","nativeSrc":"2099:9:69","nodeType":"YulIdentifier","src":"2099:9:69"}]}]},"name":"convert_t_uint160_to_t_uint160","nativeSrc":"2029:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2069:5:69","nodeType":"YulTypedName","src":"2069:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"2079:9:69","nodeType":"YulTypedName","src":"2079:9:69","type":""}],"src":"2029:142:69"},{"body":{"nativeSrc":"2237:66:69","nodeType":"YulBlock","src":"2237:66:69","statements":[{"nativeSrc":"2247:50:69","nodeType":"YulAssignment","src":"2247:50:69","value":{"arguments":[{"name":"value","nativeSrc":"2291:5:69","nodeType":"YulIdentifier","src":"2291:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_uint160","nativeSrc":"2260:30:69","nodeType":"YulIdentifier","src":"2260:30:69"},"nativeSrc":"2260:37:69","nodeType":"YulFunctionCall","src":"2260:37:69"},"variableNames":[{"name":"converted","nativeSrc":"2247:9:69","nodeType":"YulIdentifier","src":"2247:9:69"}]}]},"name":"convert_t_uint160_to_t_address","nativeSrc":"2177:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2217:5:69","nodeType":"YulTypedName","src":"2217:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"2227:9:69","nodeType":"YulTypedName","src":"2227:9:69","type":""}],"src":"2177:126:69"},{"body":{"nativeSrc":"2403:66:69","nodeType":"YulBlock","src":"2403:66:69","statements":[{"nativeSrc":"2413:50:69","nodeType":"YulAssignment","src":"2413:50:69","value":{"arguments":[{"name":"value","nativeSrc":"2457:5:69","nodeType":"YulIdentifier","src":"2457:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"2426:30:69","nodeType":"YulIdentifier","src":"2426:30:69"},"nativeSrc":"2426:37:69","nodeType":"YulFunctionCall","src":"2426:37:69"},"variableNames":[{"name":"converted","nativeSrc":"2413:9:69","nodeType":"YulIdentifier","src":"2413:9:69"}]}]},"name":"convert_t_contract$_ResilientOracleInterface_$16173_to_t_address","nativeSrc":"2309:160:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2383:5:69","nodeType":"YulTypedName","src":"2383:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"2393:9:69","nodeType":"YulTypedName","src":"2393:9:69","type":""}],"src":"2309:160:69"},{"body":{"nativeSrc":"2574:100:69","nodeType":"YulBlock","src":"2574:100:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"2591:3:69","nodeType":"YulIdentifier","src":"2591:3:69"},{"arguments":[{"name":"value","nativeSrc":"2661:5:69","nodeType":"YulIdentifier","src":"2661:5:69"}],"functionName":{"name":"convert_t_contract$_ResilientOracleInterface_$16173_to_t_address","nativeSrc":"2596:64:69","nodeType":"YulIdentifier","src":"2596:64:69"},"nativeSrc":"2596:71:69","nodeType":"YulFunctionCall","src":"2596:71:69"}],"functionName":{"name":"mstore","nativeSrc":"2584:6:69","nodeType":"YulIdentifier","src":"2584:6:69"},"nativeSrc":"2584:84:69","nodeType":"YulFunctionCall","src":"2584:84:69"},"nativeSrc":"2584:84:69","nodeType":"YulExpressionStatement","src":"2584:84:69"}]},"name":"abi_encode_t_contract$_ResilientOracleInterface_$16173_to_t_address_fromStack","nativeSrc":"2475:199:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2562:5:69","nodeType":"YulTypedName","src":"2562:5:69","type":""},{"name":"pos","nativeSrc":"2569:3:69","nodeType":"YulTypedName","src":"2569:3:69","type":""}],"src":"2475:199:69"},{"body":{"nativeSrc":"2812:158:69","nodeType":"YulBlock","src":"2812:158:69","statements":[{"nativeSrc":"2822:26:69","nodeType":"YulAssignment","src":"2822:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"2834:9:69","nodeType":"YulIdentifier","src":"2834:9:69"},{"kind":"number","nativeSrc":"2845:2:69","nodeType":"YulLiteral","src":"2845:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2830:3:69","nodeType":"YulIdentifier","src":"2830:3:69"},"nativeSrc":"2830:18:69","nodeType":"YulFunctionCall","src":"2830:18:69"},"variableNames":[{"name":"tail","nativeSrc":"2822:4:69","nodeType":"YulIdentifier","src":"2822:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"2936:6:69","nodeType":"YulIdentifier","src":"2936:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"2949:9:69","nodeType":"YulIdentifier","src":"2949:9:69"},{"kind":"number","nativeSrc":"2960:1:69","nodeType":"YulLiteral","src":"2960:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"2945:3:69","nodeType":"YulIdentifier","src":"2945:3:69"},"nativeSrc":"2945:17:69","nodeType":"YulFunctionCall","src":"2945:17:69"}],"functionName":{"name":"abi_encode_t_contract$_ResilientOracleInterface_$16173_to_t_address_fromStack","nativeSrc":"2858:77:69","nodeType":"YulIdentifier","src":"2858:77:69"},"nativeSrc":"2858:105:69","nodeType":"YulFunctionCall","src":"2858:105:69"},"nativeSrc":"2858:105:69","nodeType":"YulExpressionStatement","src":"2858:105:69"}]},"name":"abi_encode_tuple_t_contract$_ResilientOracleInterface_$16173__to_t_address__fromStack_reversed","nativeSrc":"2680:290:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2784:9:69","nodeType":"YulTypedName","src":"2784:9:69","type":""},{"name":"value0","nativeSrc":"2796:6:69","nodeType":"YulTypedName","src":"2796:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2807:4:69","nodeType":"YulTypedName","src":"2807:4:69","type":""}],"src":"2680:290:69"},{"body":{"nativeSrc":"3021:73:69","nodeType":"YulBlock","src":"3021:73:69","statements":[{"nativeSrc":"3031:57:69","nodeType":"YulAssignment","src":"3031:57:69","value":{"arguments":[{"name":"value","nativeSrc":"3046:5:69","nodeType":"YulIdentifier","src":"3046:5:69"},{"kind":"number","nativeSrc":"3053:34:69","nodeType":"YulLiteral","src":"3053:34:69","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"3042:3:69","nodeType":"YulIdentifier","src":"3042:3:69"},"nativeSrc":"3042:46:69","nodeType":"YulFunctionCall","src":"3042:46:69"},"variableNames":[{"name":"cleaned","nativeSrc":"3031:7:69","nodeType":"YulIdentifier","src":"3031:7:69"}]}]},"name":"cleanup_t_uint128","nativeSrc":"2976:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3003:5:69","nodeType":"YulTypedName","src":"3003:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"3013:7:69","nodeType":"YulTypedName","src":"3013:7:69","type":""}],"src":"2976:118:69"},{"body":{"nativeSrc":"3165:53:69","nodeType":"YulBlock","src":"3165:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"3182:3:69","nodeType":"YulIdentifier","src":"3182:3:69"},{"arguments":[{"name":"value","nativeSrc":"3205:5:69","nodeType":"YulIdentifier","src":"3205:5:69"}],"functionName":{"name":"cleanup_t_uint128","nativeSrc":"3187:17:69","nodeType":"YulIdentifier","src":"3187:17:69"},"nativeSrc":"3187:24:69","nodeType":"YulFunctionCall","src":"3187:24:69"}],"functionName":{"name":"mstore","nativeSrc":"3175:6:69","nodeType":"YulIdentifier","src":"3175:6:69"},"nativeSrc":"3175:37:69","nodeType":"YulFunctionCall","src":"3175:37:69"},"nativeSrc":"3175:37:69","nodeType":"YulExpressionStatement","src":"3175:37:69"}]},"name":"abi_encode_t_uint128_to_t_uint128_fromStack","nativeSrc":"3100:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3153:5:69","nodeType":"YulTypedName","src":"3153:5:69","type":""},{"name":"pos","nativeSrc":"3160:3:69","nodeType":"YulTypedName","src":"3160:3:69","type":""}],"src":"3100:118:69"},{"body":{"nativeSrc":"3322:124:69","nodeType":"YulBlock","src":"3322:124:69","statements":[{"nativeSrc":"3332:26:69","nodeType":"YulAssignment","src":"3332:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"3344:9:69","nodeType":"YulIdentifier","src":"3344:9:69"},{"kind":"number","nativeSrc":"3355:2:69","nodeType":"YulLiteral","src":"3355:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3340:3:69","nodeType":"YulIdentifier","src":"3340:3:69"},"nativeSrc":"3340:18:69","nodeType":"YulFunctionCall","src":"3340:18:69"},"variableNames":[{"name":"tail","nativeSrc":"3332:4:69","nodeType":"YulIdentifier","src":"3332:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"3412:6:69","nodeType":"YulIdentifier","src":"3412:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"3425:9:69","nodeType":"YulIdentifier","src":"3425:9:69"},{"kind":"number","nativeSrc":"3436:1:69","nodeType":"YulLiteral","src":"3436:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"3421:3:69","nodeType":"YulIdentifier","src":"3421:3:69"},"nativeSrc":"3421:17:69","nodeType":"YulFunctionCall","src":"3421:17:69"}],"functionName":{"name":"abi_encode_t_uint128_to_t_uint128_fromStack","nativeSrc":"3368:43:69","nodeType":"YulIdentifier","src":"3368:43:69"},"nativeSrc":"3368:71:69","nodeType":"YulFunctionCall","src":"3368:71:69"},"nativeSrc":"3368:71:69","nodeType":"YulExpressionStatement","src":"3368:71:69"}]},"name":"abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed","nativeSrc":"3224:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3294:9:69","nodeType":"YulTypedName","src":"3294:9:69","type":""},{"name":"value0","nativeSrc":"3306:6:69","nodeType":"YulTypedName","src":"3306:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3317:4:69","nodeType":"YulTypedName","src":"3317:4:69","type":""}],"src":"3224:222:69"},{"body":{"nativeSrc":"3494:48:69","nodeType":"YulBlock","src":"3494:48:69","statements":[{"nativeSrc":"3504:32:69","nodeType":"YulAssignment","src":"3504:32:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"3529:5:69","nodeType":"YulIdentifier","src":"3529:5:69"}],"functionName":{"name":"iszero","nativeSrc":"3522:6:69","nodeType":"YulIdentifier","src":"3522:6:69"},"nativeSrc":"3522:13:69","nodeType":"YulFunctionCall","src":"3522:13:69"}],"functionName":{"name":"iszero","nativeSrc":"3515:6:69","nodeType":"YulIdentifier","src":"3515:6:69"},"nativeSrc":"3515:21:69","nodeType":"YulFunctionCall","src":"3515:21:69"},"variableNames":[{"name":"cleaned","nativeSrc":"3504:7:69","nodeType":"YulIdentifier","src":"3504:7:69"}]}]},"name":"cleanup_t_bool","nativeSrc":"3452:90:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3476:5:69","nodeType":"YulTypedName","src":"3476:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"3486:7:69","nodeType":"YulTypedName","src":"3486:7:69","type":""}],"src":"3452:90:69"},{"body":{"nativeSrc":"3607:50:69","nodeType":"YulBlock","src":"3607:50:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"3624:3:69","nodeType":"YulIdentifier","src":"3624:3:69"},{"arguments":[{"name":"value","nativeSrc":"3644:5:69","nodeType":"YulIdentifier","src":"3644:5:69"}],"functionName":{"name":"cleanup_t_bool","nativeSrc":"3629:14:69","nodeType":"YulIdentifier","src":"3629:14:69"},"nativeSrc":"3629:21:69","nodeType":"YulFunctionCall","src":"3629:21:69"}],"functionName":{"name":"mstore","nativeSrc":"3617:6:69","nodeType":"YulIdentifier","src":"3617:6:69"},"nativeSrc":"3617:34:69","nodeType":"YulFunctionCall","src":"3617:34:69"},"nativeSrc":"3617:34:69","nodeType":"YulExpressionStatement","src":"3617:34:69"}]},"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"3548:109:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3595:5:69","nodeType":"YulTypedName","src":"3595:5:69","type":""},{"name":"pos","nativeSrc":"3602:3:69","nodeType":"YulTypedName","src":"3602:3:69","type":""}],"src":"3548:109:69"},{"body":{"nativeSrc":"3867:448:69","nodeType":"YulBlock","src":"3867:448:69","statements":[{"nativeSrc":"3877:27:69","nodeType":"YulAssignment","src":"3877:27:69","value":{"arguments":[{"name":"headStart","nativeSrc":"3889:9:69","nodeType":"YulIdentifier","src":"3889:9:69"},{"kind":"number","nativeSrc":"3900:3:69","nodeType":"YulLiteral","src":"3900:3:69","type":"","value":"160"}],"functionName":{"name":"add","nativeSrc":"3885:3:69","nodeType":"YulIdentifier","src":"3885:3:69"},"nativeSrc":"3885:19:69","nodeType":"YulFunctionCall","src":"3885:19:69"},"variableNames":[{"name":"tail","nativeSrc":"3877:4:69","nodeType":"YulIdentifier","src":"3877:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"3958:6:69","nodeType":"YulIdentifier","src":"3958:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"3971:9:69","nodeType":"YulIdentifier","src":"3971:9:69"},{"kind":"number","nativeSrc":"3982:1:69","nodeType":"YulLiteral","src":"3982:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"3967:3:69","nodeType":"YulIdentifier","src":"3967:3:69"},"nativeSrc":"3967:17:69","nodeType":"YulFunctionCall","src":"3967:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"3914:43:69","nodeType":"YulIdentifier","src":"3914:43:69"},"nativeSrc":"3914:71:69","nodeType":"YulFunctionCall","src":"3914:71:69"},"nativeSrc":"3914:71:69","nodeType":"YulExpressionStatement","src":"3914:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"4039:6:69","nodeType":"YulIdentifier","src":"4039:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"4052:9:69","nodeType":"YulIdentifier","src":"4052:9:69"},{"kind":"number","nativeSrc":"4063:2:69","nodeType":"YulLiteral","src":"4063:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4048:3:69","nodeType":"YulIdentifier","src":"4048:3:69"},"nativeSrc":"4048:18:69","nodeType":"YulFunctionCall","src":"4048:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"3995:43:69","nodeType":"YulIdentifier","src":"3995:43:69"},"nativeSrc":"3995:72:69","nodeType":"YulFunctionCall","src":"3995:72:69"},"nativeSrc":"3995:72:69","nodeType":"YulExpressionStatement","src":"3995:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"4121:6:69","nodeType":"YulIdentifier","src":"4121:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"4134:9:69","nodeType":"YulIdentifier","src":"4134:9:69"},{"kind":"number","nativeSrc":"4145:2:69","nodeType":"YulLiteral","src":"4145:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"4130:3:69","nodeType":"YulIdentifier","src":"4130:3:69"},"nativeSrc":"4130:18:69","nodeType":"YulFunctionCall","src":"4130:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"4077:43:69","nodeType":"YulIdentifier","src":"4077:43:69"},"nativeSrc":"4077:72:69","nodeType":"YulFunctionCall","src":"4077:72:69"},"nativeSrc":"4077:72:69","nodeType":"YulExpressionStatement","src":"4077:72:69"},{"expression":{"arguments":[{"name":"value3","nativeSrc":"4203:6:69","nodeType":"YulIdentifier","src":"4203:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"4216:9:69","nodeType":"YulIdentifier","src":"4216:9:69"},{"kind":"number","nativeSrc":"4227:2:69","nodeType":"YulLiteral","src":"4227:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"4212:3:69","nodeType":"YulIdentifier","src":"4212:3:69"},"nativeSrc":"4212:18:69","nodeType":"YulFunctionCall","src":"4212:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"4159:43:69","nodeType":"YulIdentifier","src":"4159:43:69"},"nativeSrc":"4159:72:69","nodeType":"YulFunctionCall","src":"4159:72:69"},"nativeSrc":"4159:72:69","nodeType":"YulExpressionStatement","src":"4159:72:69"},{"expression":{"arguments":[{"name":"value4","nativeSrc":"4279:6:69","nodeType":"YulIdentifier","src":"4279:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"4292:9:69","nodeType":"YulIdentifier","src":"4292:9:69"},{"kind":"number","nativeSrc":"4303:3:69","nodeType":"YulLiteral","src":"4303:3:69","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"4288:3:69","nodeType":"YulIdentifier","src":"4288:3:69"},"nativeSrc":"4288:19:69","nodeType":"YulFunctionCall","src":"4288:19:69"}],"functionName":{"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"4241:37:69","nodeType":"YulIdentifier","src":"4241:37:69"},"nativeSrc":"4241:67:69","nodeType":"YulFunctionCall","src":"4241:67:69"},"nativeSrc":"4241:67:69","nodeType":"YulExpressionStatement","src":"4241:67:69"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_bool__to_t_uint256_t_uint256_t_uint256_t_uint256_t_bool__fromStack_reversed","nativeSrc":"3663:652:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3807:9:69","nodeType":"YulTypedName","src":"3807:9:69","type":""},{"name":"value4","nativeSrc":"3819:6:69","nodeType":"YulTypedName","src":"3819:6:69","type":""},{"name":"value3","nativeSrc":"3827:6:69","nodeType":"YulTypedName","src":"3827:6:69","type":""},{"name":"value2","nativeSrc":"3835:6:69","nodeType":"YulTypedName","src":"3835:6:69","type":""},{"name":"value1","nativeSrc":"3843:6:69","nodeType":"YulTypedName","src":"3843:6:69","type":""},{"name":"value0","nativeSrc":"3851:6:69","nodeType":"YulTypedName","src":"3851:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3862:4:69","nodeType":"YulTypedName","src":"3862:4:69","type":""}],"src":"3663:652:69"},{"body":{"nativeSrc":"4364:79:69","nodeType":"YulBlock","src":"4364:79:69","statements":[{"body":{"nativeSrc":"4421:16:69","nodeType":"YulBlock","src":"4421:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4430:1:69","nodeType":"YulLiteral","src":"4430:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"4433:1:69","nodeType":"YulLiteral","src":"4433:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"4423:6:69","nodeType":"YulIdentifier","src":"4423:6:69"},"nativeSrc":"4423:12:69","nodeType":"YulFunctionCall","src":"4423:12:69"},"nativeSrc":"4423:12:69","nodeType":"YulExpressionStatement","src":"4423:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"4387:5:69","nodeType":"YulIdentifier","src":"4387:5:69"},{"arguments":[{"name":"value","nativeSrc":"4412:5:69","nodeType":"YulIdentifier","src":"4412:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"4394:17:69","nodeType":"YulIdentifier","src":"4394:17:69"},"nativeSrc":"4394:24:69","nodeType":"YulFunctionCall","src":"4394:24:69"}],"functionName":{"name":"eq","nativeSrc":"4384:2:69","nodeType":"YulIdentifier","src":"4384:2:69"},"nativeSrc":"4384:35:69","nodeType":"YulFunctionCall","src":"4384:35:69"}],"functionName":{"name":"iszero","nativeSrc":"4377:6:69","nodeType":"YulIdentifier","src":"4377:6:69"},"nativeSrc":"4377:43:69","nodeType":"YulFunctionCall","src":"4377:43:69"},"nativeSrc":"4374:63:69","nodeType":"YulIf","src":"4374:63:69"}]},"name":"validator_revert_t_uint256","nativeSrc":"4321:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4357:5:69","nodeType":"YulTypedName","src":"4357:5:69","type":""}],"src":"4321:122:69"},{"body":{"nativeSrc":"4501:87:69","nodeType":"YulBlock","src":"4501:87:69","statements":[{"nativeSrc":"4511:29:69","nodeType":"YulAssignment","src":"4511:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"4533:6:69","nodeType":"YulIdentifier","src":"4533:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"4520:12:69","nodeType":"YulIdentifier","src":"4520:12:69"},"nativeSrc":"4520:20:69","nodeType":"YulFunctionCall","src":"4520:20:69"},"variableNames":[{"name":"value","nativeSrc":"4511:5:69","nodeType":"YulIdentifier","src":"4511:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"4576:5:69","nodeType":"YulIdentifier","src":"4576:5:69"}],"functionName":{"name":"validator_revert_t_uint256","nativeSrc":"4549:26:69","nodeType":"YulIdentifier","src":"4549:26:69"},"nativeSrc":"4549:33:69","nodeType":"YulFunctionCall","src":"4549:33:69"},"nativeSrc":"4549:33:69","nodeType":"YulExpressionStatement","src":"4549:33:69"}]},"name":"abi_decode_t_uint256","nativeSrc":"4449:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"4479:6:69","nodeType":"YulTypedName","src":"4479:6:69","type":""},{"name":"end","nativeSrc":"4487:3:69","nodeType":"YulTypedName","src":"4487:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"4495:5:69","nodeType":"YulTypedName","src":"4495:5:69","type":""}],"src":"4449:139:69"},{"body":{"nativeSrc":"4677:391:69","nodeType":"YulBlock","src":"4677:391:69","statements":[{"body":{"nativeSrc":"4723:83:69","nodeType":"YulBlock","src":"4723:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"4725:77:69","nodeType":"YulIdentifier","src":"4725:77:69"},"nativeSrc":"4725:79:69","nodeType":"YulFunctionCall","src":"4725:79:69"},"nativeSrc":"4725:79:69","nodeType":"YulExpressionStatement","src":"4725:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"4698:7:69","nodeType":"YulIdentifier","src":"4698:7:69"},{"name":"headStart","nativeSrc":"4707:9:69","nodeType":"YulIdentifier","src":"4707:9:69"}],"functionName":{"name":"sub","nativeSrc":"4694:3:69","nodeType":"YulIdentifier","src":"4694:3:69"},"nativeSrc":"4694:23:69","nodeType":"YulFunctionCall","src":"4694:23:69"},{"kind":"number","nativeSrc":"4719:2:69","nodeType":"YulLiteral","src":"4719:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"4690:3:69","nodeType":"YulIdentifier","src":"4690:3:69"},"nativeSrc":"4690:32:69","nodeType":"YulFunctionCall","src":"4690:32:69"},"nativeSrc":"4687:119:69","nodeType":"YulIf","src":"4687:119:69"},{"nativeSrc":"4816:117:69","nodeType":"YulBlock","src":"4816:117:69","statements":[{"nativeSrc":"4831:15:69","nodeType":"YulVariableDeclaration","src":"4831:15:69","value":{"kind":"number","nativeSrc":"4845:1:69","nodeType":"YulLiteral","src":"4845:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"4835:6:69","nodeType":"YulTypedName","src":"4835:6:69","type":""}]},{"nativeSrc":"4860:63:69","nodeType":"YulAssignment","src":"4860:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4895:9:69","nodeType":"YulIdentifier","src":"4895:9:69"},{"name":"offset","nativeSrc":"4906:6:69","nodeType":"YulIdentifier","src":"4906:6:69"}],"functionName":{"name":"add","nativeSrc":"4891:3:69","nodeType":"YulIdentifier","src":"4891:3:69"},"nativeSrc":"4891:22:69","nodeType":"YulFunctionCall","src":"4891:22:69"},{"name":"dataEnd","nativeSrc":"4915:7:69","nodeType":"YulIdentifier","src":"4915:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"4870:20:69","nodeType":"YulIdentifier","src":"4870:20:69"},"nativeSrc":"4870:53:69","nodeType":"YulFunctionCall","src":"4870:53:69"},"variableNames":[{"name":"value0","nativeSrc":"4860:6:69","nodeType":"YulIdentifier","src":"4860:6:69"}]}]},{"nativeSrc":"4943:118:69","nodeType":"YulBlock","src":"4943:118:69","statements":[{"nativeSrc":"4958:16:69","nodeType":"YulVariableDeclaration","src":"4958:16:69","value":{"kind":"number","nativeSrc":"4972:2:69","nodeType":"YulLiteral","src":"4972:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"4962:6:69","nodeType":"YulTypedName","src":"4962:6:69","type":""}]},{"nativeSrc":"4988:63:69","nodeType":"YulAssignment","src":"4988:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5023:9:69","nodeType":"YulIdentifier","src":"5023:9:69"},{"name":"offset","nativeSrc":"5034:6:69","nodeType":"YulIdentifier","src":"5034:6:69"}],"functionName":{"name":"add","nativeSrc":"5019:3:69","nodeType":"YulIdentifier","src":"5019:3:69"},"nativeSrc":"5019:22:69","nodeType":"YulFunctionCall","src":"5019:22:69"},{"name":"dataEnd","nativeSrc":"5043:7:69","nodeType":"YulIdentifier","src":"5043:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"4998:20:69","nodeType":"YulIdentifier","src":"4998:20:69"},"nativeSrc":"4998:53:69","nodeType":"YulFunctionCall","src":"4998:53:69"},"variableNames":[{"name":"value1","nativeSrc":"4988:6:69","nodeType":"YulIdentifier","src":"4988:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint256t_address","nativeSrc":"4594:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4639:9:69","nodeType":"YulTypedName","src":"4639:9:69","type":""},{"name":"dataEnd","nativeSrc":"4650:7:69","nodeType":"YulTypedName","src":"4650:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"4662:6:69","nodeType":"YulTypedName","src":"4662:6:69","type":""},{"name":"value1","nativeSrc":"4670:6:69","nodeType":"YulTypedName","src":"4670:6:69","type":""}],"src":"4594:474:69"},{"body":{"nativeSrc":"5166:118:69","nodeType":"YulBlock","src":"5166:118:69","statements":[{"nativeSrc":"5176:26:69","nodeType":"YulAssignment","src":"5176:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"5188:9:69","nodeType":"YulIdentifier","src":"5188:9:69"},{"kind":"number","nativeSrc":"5199:2:69","nodeType":"YulLiteral","src":"5199:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5184:3:69","nodeType":"YulIdentifier","src":"5184:3:69"},"nativeSrc":"5184:18:69","nodeType":"YulFunctionCall","src":"5184:18:69"},"variableNames":[{"name":"tail","nativeSrc":"5176:4:69","nodeType":"YulIdentifier","src":"5176:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"5250:6:69","nodeType":"YulIdentifier","src":"5250:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"5263:9:69","nodeType":"YulIdentifier","src":"5263:9:69"},{"kind":"number","nativeSrc":"5274:1:69","nodeType":"YulLiteral","src":"5274:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5259:3:69","nodeType":"YulIdentifier","src":"5259:3:69"},"nativeSrc":"5259:17:69","nodeType":"YulFunctionCall","src":"5259:17:69"}],"functionName":{"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"5212:37:69","nodeType":"YulIdentifier","src":"5212:37:69"},"nativeSrc":"5212:65:69","nodeType":"YulFunctionCall","src":"5212:65:69"},"nativeSrc":"5212:65:69","nodeType":"YulExpressionStatement","src":"5212:65:69"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nativeSrc":"5074:210:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5138:9:69","nodeType":"YulTypedName","src":"5138:9:69","type":""},{"name":"value0","nativeSrc":"5150:6:69","nodeType":"YulTypedName","src":"5150:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"5161:4:69","nodeType":"YulTypedName","src":"5161:4:69","type":""}],"src":"5074:210:69"},{"body":{"nativeSrc":"5373:391:69","nodeType":"YulBlock","src":"5373:391:69","statements":[{"body":{"nativeSrc":"5419:83:69","nodeType":"YulBlock","src":"5419:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"5421:77:69","nodeType":"YulIdentifier","src":"5421:77:69"},"nativeSrc":"5421:79:69","nodeType":"YulFunctionCall","src":"5421:79:69"},"nativeSrc":"5421:79:69","nodeType":"YulExpressionStatement","src":"5421:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"5394:7:69","nodeType":"YulIdentifier","src":"5394:7:69"},{"name":"headStart","nativeSrc":"5403:9:69","nodeType":"YulIdentifier","src":"5403:9:69"}],"functionName":{"name":"sub","nativeSrc":"5390:3:69","nodeType":"YulIdentifier","src":"5390:3:69"},"nativeSrc":"5390:23:69","nodeType":"YulFunctionCall","src":"5390:23:69"},{"kind":"number","nativeSrc":"5415:2:69","nodeType":"YulLiteral","src":"5415:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"5386:3:69","nodeType":"YulIdentifier","src":"5386:3:69"},"nativeSrc":"5386:32:69","nodeType":"YulFunctionCall","src":"5386:32:69"},"nativeSrc":"5383:119:69","nodeType":"YulIf","src":"5383:119:69"},{"nativeSrc":"5512:117:69","nodeType":"YulBlock","src":"5512:117:69","statements":[{"nativeSrc":"5527:15:69","nodeType":"YulVariableDeclaration","src":"5527:15:69","value":{"kind":"number","nativeSrc":"5541:1:69","nodeType":"YulLiteral","src":"5541:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"5531:6:69","nodeType":"YulTypedName","src":"5531:6:69","type":""}]},{"nativeSrc":"5556:63:69","nodeType":"YulAssignment","src":"5556:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5591:9:69","nodeType":"YulIdentifier","src":"5591:9:69"},{"name":"offset","nativeSrc":"5602:6:69","nodeType":"YulIdentifier","src":"5602:6:69"}],"functionName":{"name":"add","nativeSrc":"5587:3:69","nodeType":"YulIdentifier","src":"5587:3:69"},"nativeSrc":"5587:22:69","nodeType":"YulFunctionCall","src":"5587:22:69"},{"name":"dataEnd","nativeSrc":"5611:7:69","nodeType":"YulIdentifier","src":"5611:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"5566:20:69","nodeType":"YulIdentifier","src":"5566:20:69"},"nativeSrc":"5566:53:69","nodeType":"YulFunctionCall","src":"5566:53:69"},"variableNames":[{"name":"value0","nativeSrc":"5556:6:69","nodeType":"YulIdentifier","src":"5556:6:69"}]}]},{"nativeSrc":"5639:118:69","nodeType":"YulBlock","src":"5639:118:69","statements":[{"nativeSrc":"5654:16:69","nodeType":"YulVariableDeclaration","src":"5654:16:69","value":{"kind":"number","nativeSrc":"5668:2:69","nodeType":"YulLiteral","src":"5668:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"5658:6:69","nodeType":"YulTypedName","src":"5658:6:69","type":""}]},{"nativeSrc":"5684:63:69","nodeType":"YulAssignment","src":"5684:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5719:9:69","nodeType":"YulIdentifier","src":"5719:9:69"},{"name":"offset","nativeSrc":"5730:6:69","nodeType":"YulIdentifier","src":"5730:6:69"}],"functionName":{"name":"add","nativeSrc":"5715:3:69","nodeType":"YulIdentifier","src":"5715:3:69"},"nativeSrc":"5715:22:69","nodeType":"YulFunctionCall","src":"5715:22:69"},{"name":"dataEnd","nativeSrc":"5739:7:69","nodeType":"YulIdentifier","src":"5739:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"5694:20:69","nodeType":"YulIdentifier","src":"5694:20:69"},"nativeSrc":"5694:53:69","nodeType":"YulFunctionCall","src":"5694:53:69"},"variableNames":[{"name":"value1","nativeSrc":"5684:6:69","nodeType":"YulIdentifier","src":"5684:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_address","nativeSrc":"5290:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5335:9:69","nodeType":"YulTypedName","src":"5335:9:69","type":""},{"name":"dataEnd","nativeSrc":"5346:7:69","nodeType":"YulTypedName","src":"5346:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"5358:6:69","nodeType":"YulTypedName","src":"5358:6:69","type":""},{"name":"value1","nativeSrc":"5366:6:69","nodeType":"YulTypedName","src":"5366:6:69","type":""}],"src":"5290:474:69"},{"body":{"nativeSrc":"5924:288:69","nodeType":"YulBlock","src":"5924:288:69","statements":[{"nativeSrc":"5934:26:69","nodeType":"YulAssignment","src":"5934:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"5946:9:69","nodeType":"YulIdentifier","src":"5946:9:69"},{"kind":"number","nativeSrc":"5957:2:69","nodeType":"YulLiteral","src":"5957:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"5942:3:69","nodeType":"YulIdentifier","src":"5942:3:69"},"nativeSrc":"5942:18:69","nodeType":"YulFunctionCall","src":"5942:18:69"},"variableNames":[{"name":"tail","nativeSrc":"5934:4:69","nodeType":"YulIdentifier","src":"5934:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"6014:6:69","nodeType":"YulIdentifier","src":"6014:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"6027:9:69","nodeType":"YulIdentifier","src":"6027:9:69"},{"kind":"number","nativeSrc":"6038:1:69","nodeType":"YulLiteral","src":"6038:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"6023:3:69","nodeType":"YulIdentifier","src":"6023:3:69"},"nativeSrc":"6023:17:69","nodeType":"YulFunctionCall","src":"6023:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"5970:43:69","nodeType":"YulIdentifier","src":"5970:43:69"},"nativeSrc":"5970:71:69","nodeType":"YulFunctionCall","src":"5970:71:69"},"nativeSrc":"5970:71:69","nodeType":"YulExpressionStatement","src":"5970:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"6095:6:69","nodeType":"YulIdentifier","src":"6095:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"6108:9:69","nodeType":"YulIdentifier","src":"6108:9:69"},{"kind":"number","nativeSrc":"6119:2:69","nodeType":"YulLiteral","src":"6119:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"6104:3:69","nodeType":"YulIdentifier","src":"6104:3:69"},"nativeSrc":"6104:18:69","nodeType":"YulFunctionCall","src":"6104:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"6051:43:69","nodeType":"YulIdentifier","src":"6051:43:69"},"nativeSrc":"6051:72:69","nodeType":"YulFunctionCall","src":"6051:72:69"},"nativeSrc":"6051:72:69","nodeType":"YulExpressionStatement","src":"6051:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"6177:6:69","nodeType":"YulIdentifier","src":"6177:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"6190:9:69","nodeType":"YulIdentifier","src":"6190:9:69"},{"kind":"number","nativeSrc":"6201:2:69","nodeType":"YulLiteral","src":"6201:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"6186:3:69","nodeType":"YulIdentifier","src":"6186:3:69"},"nativeSrc":"6186:18:69","nodeType":"YulFunctionCall","src":"6186:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"6133:43:69","nodeType":"YulIdentifier","src":"6133:43:69"},"nativeSrc":"6133:72:69","nodeType":"YulFunctionCall","src":"6133:72:69"},"nativeSrc":"6133:72:69","nodeType":"YulExpressionStatement","src":"6133:72:69"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"5770:442:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5880:9:69","nodeType":"YulTypedName","src":"5880:9:69","type":""},{"name":"value2","nativeSrc":"5892:6:69","nodeType":"YulTypedName","src":"5892:6:69","type":""},{"name":"value1","nativeSrc":"5900:6:69","nodeType":"YulTypedName","src":"5900:6:69","type":""},{"name":"value0","nativeSrc":"5908:6:69","nodeType":"YulTypedName","src":"5908:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"5919:4:69","nodeType":"YulTypedName","src":"5919:4:69","type":""}],"src":"5770:442:69"},{"body":{"nativeSrc":"6332:194:69","nodeType":"YulBlock","src":"6332:194:69","statements":[{"nativeSrc":"6342:26:69","nodeType":"YulAssignment","src":"6342:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"6354:9:69","nodeType":"YulIdentifier","src":"6354:9:69"},{"kind":"number","nativeSrc":"6365:2:69","nodeType":"YulLiteral","src":"6365:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"6350:3:69","nodeType":"YulIdentifier","src":"6350:3:69"},"nativeSrc":"6350:18:69","nodeType":"YulFunctionCall","src":"6350:18:69"},"variableNames":[{"name":"tail","nativeSrc":"6342:4:69","nodeType":"YulIdentifier","src":"6342:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"6416:6:69","nodeType":"YulIdentifier","src":"6416:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"6429:9:69","nodeType":"YulIdentifier","src":"6429:9:69"},{"kind":"number","nativeSrc":"6440:1:69","nodeType":"YulLiteral","src":"6440:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"6425:3:69","nodeType":"YulIdentifier","src":"6425:3:69"},"nativeSrc":"6425:17:69","nodeType":"YulFunctionCall","src":"6425:17:69"}],"functionName":{"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"6378:37:69","nodeType":"YulIdentifier","src":"6378:37:69"},"nativeSrc":"6378:65:69","nodeType":"YulFunctionCall","src":"6378:65:69"},"nativeSrc":"6378:65:69","nodeType":"YulExpressionStatement","src":"6378:65:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"6491:6:69","nodeType":"YulIdentifier","src":"6491:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"6504:9:69","nodeType":"YulIdentifier","src":"6504:9:69"},{"kind":"number","nativeSrc":"6515:2:69","nodeType":"YulLiteral","src":"6515:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"6500:3:69","nodeType":"YulIdentifier","src":"6500:3:69"},"nativeSrc":"6500:18:69","nodeType":"YulFunctionCall","src":"6500:18:69"}],"functionName":{"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"6453:37:69","nodeType":"YulIdentifier","src":"6453:37:69"},"nativeSrc":"6453:66:69","nodeType":"YulFunctionCall","src":"6453:66:69"},"nativeSrc":"6453:66:69","nodeType":"YulExpressionStatement","src":"6453:66:69"}]},"name":"abi_encode_tuple_t_bool_t_bool__to_t_bool_t_bool__fromStack_reversed","nativeSrc":"6218:308:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6296:9:69","nodeType":"YulTypedName","src":"6296:9:69","type":""},{"name":"value1","nativeSrc":"6308:6:69","nodeType":"YulTypedName","src":"6308:6:69","type":""},{"name":"value0","nativeSrc":"6316:6:69","nodeType":"YulTypedName","src":"6316:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"6327:4:69","nodeType":"YulTypedName","src":"6327:4:69","type":""}],"src":"6218:308:69"}]},"contents":"{\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint256(value))\n    }\n\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function identity(value) -> ret {\n        ret := value\n    }\n\n    function convert_t_uint160_to_t_uint160(value) -> converted {\n        converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n    }\n\n    function convert_t_uint160_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_uint160(value)\n    }\n\n    function convert_t_contract$_ResilientOracleInterface_$16173_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_ResilientOracleInterface_$16173_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_ResilientOracleInterface_$16173_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_ResilientOracleInterface_$16173__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_ResilientOracleInterface_$16173_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function cleanup_t_uint128(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffff)\n    }\n\n    function abi_encode_t_uint128_to_t_uint128_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint128(value))\n    }\n\n    function abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint128_to_t_uint128_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function cleanup_t_bool(value) -> cleaned {\n        cleaned := iszero(iszero(value))\n    }\n\n    function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n        mstore(pos, cleanup_t_bool(value))\n    }\n\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_bool__to_t_uint256_t_uint256_t_uint256_t_uint256_t_bool__fromStack_reversed(headStart , value4, value3, value2, value1, value0) -> tail {\n        tail := add(headStart, 160)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value3,  add(headStart, 96))\n\n        abi_encode_t_bool_to_t_bool_fromStack(value4,  add(headStart, 128))\n\n    }\n\n    function validator_revert_t_uint256(value) {\n        if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_uint256(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_uint256t_address(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_bool_to_t_bool_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function abi_encode_tuple_t_bool_t_bool__to_t_bool_t_bool__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_bool_to_t_bool_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_bool_to_t_bool_fromStack(value1,  add(headStart, 32))\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106101425760003560e01c8063afcff50f116100b8578063ce8536131161007c578063ce85361314610321578063d88b9d2e1461033b578063da6ab4f814610344578063e48603391461034d578063ee6b13fc14610387578063ef36bbde146103b057600080fd5b8063afcff50f146102a0578063b9eb69f6146102b3578063bd212c0e146102fc578063c3db3c3614610305578063c86d1a781461030e57600080fd5b8063856c3aa41161010a578063856c3aa4146101e657806388bead73146101ef5780638e8f294b146102025780639565d3d2146102535780639f6506ce1461028e578063a15753dc1461029757600080fd5b80631b9ce575146101475780631bffac8914610170578063487b0dfb1461019d5780637dc0d1d0146101a65780637ef82070146101c6575b600080fd5b600a5461015a906001600160a01b031681565b60405161016791906103f2565b60405180910390f35b61019061017e366004610422565b60136020526000908152604090205481565b6040516101679190610451565b610190600c5481565b6015546101b9906001600160a01b031681565b604051610167919061048f565b6009546101d9906001600160801b031681565b60405161016791906104ac565b61019060045481565b600b5461015a906001600160a01b031681565b610242610210366004610422565b600660205260009081526040902080546001820154600283015460038401546004909401549293919290919060ff1685565b6040516101679594939291906104c2565b61028161026136600461051f565b600d60209081526000928352604080842090915290825290205460ff1681565b604051610167919061055c565b61019060025481565b610190600e5481565b60165461015a906001600160a01b031681565b6102ed6102c136600461056a565b600760209081526000928352604080842090915290825290208054600182015460029092015490919083565b6040516101679392919061058c565b610190600f5481565b61019060105481565b60145461015a906001600160a01b031681565b6009546101d990600160801b90046001600160801b031681565b61019060015481565b61019060035481565b61037961035b366004610422565b60006020819052908152604090205460ff8082169161010090041682565b6040516101679291906105b4565b61015a610395366004610422565b6011602052600090815260409020546001600160a01b031681565b6101906103be366004610422565b60056020526000908152604090205481565b60006001600160a01b0382165b92915050565b6103ec816103d0565b82525050565b602081016103dd82846103e3565b610409816103d0565b811461041457600080fd5b50565b80356103dd81610400565b60006020828403121561043757610437600080fd5b60006104438484610417565b949350505050565b806103ec565b602081016103dd828461044b565b60006001600160a01b0382166103dd565b60006103dd8261045f565b60006103dd82610470565b6103ec8161047b565b602081016103dd8284610486565b6001600160801b0381166103ec565b602081016103dd828461049d565b8015156103ec565b60a081016104d0828861044b565b6104dd602083018761044b565b6104ea604083018661044b565b6104f7606083018561044b565b61050460808301846104ba565b9695505050505050565b80610409565b80356103dd8161050e565b6000806040838503121561053557610535600080fd5b60006105418585610514565b925050602061055285828601610417565b9150509250929050565b602081016103dd82846104ba565b6000806040838503121561058057610580600080fd5b60006105418585610417565b6060810161059a828661044b565b6105a7602083018561044b565b610443604083018461044b565b604081016105c282856104ba565b6105cf60208301846104ba565b939250505056fea2646970667358221220deb986e8ff49eaddf5dbaf7a4691eee3e68b742f49b1818c3e6fbb5b8e34ee5164736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x142 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAFCFF50F GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xCE853613 GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xCE853613 EQ PUSH2 0x321 JUMPI DUP1 PUSH4 0xD88B9D2E EQ PUSH2 0x33B JUMPI DUP1 PUSH4 0xDA6AB4F8 EQ PUSH2 0x344 JUMPI DUP1 PUSH4 0xE4860339 EQ PUSH2 0x34D JUMPI DUP1 PUSH4 0xEE6B13FC EQ PUSH2 0x387 JUMPI DUP1 PUSH4 0xEF36BBDE EQ PUSH2 0x3B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xAFCFF50F EQ PUSH2 0x2A0 JUMPI DUP1 PUSH4 0xB9EB69F6 EQ PUSH2 0x2B3 JUMPI DUP1 PUSH4 0xBD212C0E EQ PUSH2 0x2FC JUMPI DUP1 PUSH4 0xC3DB3C36 EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0xC86D1A78 EQ PUSH2 0x30E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x856C3AA4 GT PUSH2 0x10A JUMPI DUP1 PUSH4 0x856C3AA4 EQ PUSH2 0x1E6 JUMPI DUP1 PUSH4 0x88BEAD73 EQ PUSH2 0x1EF JUMPI DUP1 PUSH4 0x8E8F294B EQ PUSH2 0x202 JUMPI DUP1 PUSH4 0x9565D3D2 EQ PUSH2 0x253 JUMPI DUP1 PUSH4 0x9F6506CE EQ PUSH2 0x28E JUMPI DUP1 PUSH4 0xA15753DC EQ PUSH2 0x297 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1B9CE575 EQ PUSH2 0x147 JUMPI DUP1 PUSH4 0x1BFFAC89 EQ PUSH2 0x170 JUMPI DUP1 PUSH4 0x487B0DFB EQ PUSH2 0x19D JUMPI DUP1 PUSH4 0x7DC0D1D0 EQ PUSH2 0x1A6 JUMPI DUP1 PUSH4 0x7EF82070 EQ PUSH2 0x1C6 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xA SLOAD PUSH2 0x15A SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x167 SWAP2 SWAP1 PUSH2 0x3F2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x190 PUSH2 0x17E CALLDATASIZE PUSH1 0x4 PUSH2 0x422 JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x167 SWAP2 SWAP1 PUSH2 0x451 JUMP JUMPDEST PUSH2 0x190 PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH2 0x1B9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x167 SWAP2 SWAP1 PUSH2 0x48F JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH2 0x1D9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x167 SWAP2 SWAP1 PUSH2 0x4AC JUMP JUMPDEST PUSH2 0x190 PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xB SLOAD PUSH2 0x15A SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x242 PUSH2 0x210 CALLDATASIZE PUSH1 0x4 PUSH2 0x422 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 SWAP1 SWAP5 ADD SLOAD SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0xFF AND DUP6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x167 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4C2 JUMP JUMPDEST PUSH2 0x281 PUSH2 0x261 CALLDATASIZE PUSH1 0x4 PUSH2 0x51F JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x167 SWAP2 SWAP1 PUSH2 0x55C JUMP JUMPDEST PUSH2 0x190 PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x190 PUSH1 0xE SLOAD DUP2 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH2 0x15A SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2ED PUSH2 0x2C1 CALLDATASIZE PUSH1 0x4 PUSH2 0x56A JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD SWAP1 SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x167 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x58C JUMP JUMPDEST PUSH2 0x190 PUSH1 0xF SLOAD DUP2 JUMP JUMPDEST PUSH2 0x190 PUSH1 0x10 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH2 0x15A SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH2 0x1D9 SWAP1 PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x190 PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x190 PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x379 PUSH2 0x35B CALLDATASIZE PUSH1 0x4 PUSH2 0x422 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 SWAP1 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF DUP1 DUP3 AND SWAP2 PUSH2 0x100 SWAP1 DIV AND DUP3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x167 SWAP3 SWAP2 SWAP1 PUSH2 0x5B4 JUMP JUMPDEST PUSH2 0x15A PUSH2 0x395 CALLDATASIZE PUSH1 0x4 PUSH2 0x422 JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x190 PUSH2 0x3BE CALLDATASIZE PUSH1 0x4 PUSH2 0x422 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x3EC DUP2 PUSH2 0x3D0 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x3DD DUP3 DUP5 PUSH2 0x3E3 JUMP JUMPDEST PUSH2 0x409 DUP2 PUSH2 0x3D0 JUMP JUMPDEST DUP2 EQ PUSH2 0x414 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3DD DUP2 PUSH2 0x400 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x437 JUMPI PUSH2 0x437 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x443 DUP5 DUP5 PUSH2 0x417 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x3EC JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x3DD DUP3 DUP5 PUSH2 0x44B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3DD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3DD DUP3 PUSH2 0x45F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3DD DUP3 PUSH2 0x470 JUMP JUMPDEST PUSH2 0x3EC DUP2 PUSH2 0x47B JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x3DD DUP3 DUP5 PUSH2 0x486 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND PUSH2 0x3EC JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x3DD DUP3 DUP5 PUSH2 0x49D JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x3EC JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD PUSH2 0x4D0 DUP3 DUP9 PUSH2 0x44B JUMP JUMPDEST PUSH2 0x4DD PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x44B JUMP JUMPDEST PUSH2 0x4EA PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x44B JUMP JUMPDEST PUSH2 0x4F7 PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x44B JUMP JUMPDEST PUSH2 0x504 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x4BA JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x409 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3DD DUP2 PUSH2 0x50E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x535 JUMPI PUSH2 0x535 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x541 DUP6 DUP6 PUSH2 0x514 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x552 DUP6 DUP3 DUP7 ADD PUSH2 0x417 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x3DD DUP3 DUP5 PUSH2 0x4BA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x580 JUMPI PUSH2 0x580 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x541 DUP6 DUP6 PUSH2 0x417 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x59A DUP3 DUP7 PUSH2 0x44B JUMP JUMPDEST PUSH2 0x5A7 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x44B JUMP JUMPDEST PUSH2 0x443 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x44B JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x5C2 DUP3 DUP6 PUSH2 0x4BA JUMP JUMPDEST PUSH2 0x5CF PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x4BA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDE 0xB9 DUP7 0xE8 SELFDESTRUCT BLOBHASH 0xEA 0xDD CREATE2 0xDB 0xAF PUSH27 0x4691EEE3E68B742F49B1818C3E6FBB5B8E34EE5164736F6C634300 ADDMOD NOT STOP CALLER ","sourceMap":"259:3507:48:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2196:23;;;;;-1:-1:-1;;;;;2196:23:48;;;;;;;;;;:::i;:::-;;;;;;;;3236:54;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;2362:29::-;;;;;;3441:38;;;;;-1:-1:-1;;;;;3441:38:48;;;;;;;;;;:::i;2007:29::-;;;;;-1:-1:-1;;;;;2007:29:48;;;;;;;;;;:::i;1456:31::-;;;;;;2276:34;;;;;-1:-1:-1;;;;;2276:34:48;;;1687:41;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2477:66::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1240:29::-;;;;;;2591:37;;;;;;3539:27;;;;;-1:-1:-1;;;;;3539:27:48;;;1780:65;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2708:40::-;;;;;;2829:34;;;;;;3341:37;;;;;-1:-1:-1;;;;;3341:37:48;;;2121:31;;;;;-1:-1:-1;;;2121:31:48;;-1:-1:-1;;;;;2121:31:48;;;1148;;;;;;1347:29;;;;;;1046:39;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2944:49::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2944:49:48;;;1590:43;;;;;;:::i;:::-;;;;;;;;;;;;;;139:96:69;176:7;-1:-1:-1;;;;;73:54:69;;205:24;194:35;139:96;-1:-1:-1;;139:96:69:o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;496:2;481:18;;509:71;485:9;553:6;509:71;:::i;920:122::-;993:24;1011:5;993:24;:::i;:::-;986:5;983:35;973:63;;1032:1;1029;1022:12;973:63;920:122;:::o;1048:139::-;1119:20;;1148:33;1119:20;1148:33;:::i;1193:329::-;1252:6;1301:2;1289:9;1280:7;1276:23;1272:32;1269:119;;;1307:79;259:3507:48;;;1307:79:69;1427:1;1452:53;1497:7;1477:9;1452:53;:::i;:::-;1442:63;1193:329;-1:-1:-1;;;;1193:329:69:o;1611:118::-;1716:5;1698:24;1528:77;1735:222;1866:2;1851:18;;1879:71;1855:9;1923:6;1879:71;:::i;2029:142::-;2079:9;-1:-1:-1;;;;;73:54:69;;2112:53;7:126;2177;2227:9;2260:37;2291:5;2260:37;:::i;2309:160::-;2393:9;2426:37;2457:5;2426:37;:::i;2475:199::-;2596:71;2661:5;2596:71;:::i;2680:290::-;2845:2;2830:18;;2858:105;2834:9;2936:6;2858:105;:::i;3100:118::-;-1:-1:-1;;;;;3042:46:69;;3187:24;2976:118;3224:222;3355:2;3340:18;;3368:71;3344:9;3412:6;3368:71;:::i;3548:109::-;3522:13;;3515:21;3629;3452:90;3663:652;3900:3;3885:19;;3914:71;3889:9;3958:6;3914:71;:::i;:::-;3995:72;4063:2;4052:9;4048:18;4039:6;3995:72;:::i;:::-;4077;4145:2;4134:9;4130:18;4121:6;4077:72;:::i;:::-;4159;4227:2;4216:9;4212:18;4203:6;4159:72;:::i;:::-;4241:67;4303:3;4292:9;4288:19;4279:6;4241:67;:::i;:::-;3663:652;;;;;;;;:::o;4321:122::-;4412:5;4394:24;1528:77;4449:139;4520:20;;4549:33;4520:20;4549:33;:::i;4594:474::-;4662:6;4670;4719:2;4707:9;4698:7;4694:23;4690:32;4687:119;;;4725:79;259:3507:48;;;4725:79:69;4845:1;4870:53;4915:7;4895:9;4870:53;:::i;:::-;4860:63;;4816:117;4972:2;4998:53;5043:7;5034:6;5023:9;5019:22;4998:53;:::i;:::-;4988:63;;4943:118;4594:474;;;;;:::o;5074:210::-;5199:2;5184:18;;5212:65;5188:9;5250:6;5212:65;:::i;5290:474::-;5358:6;5366;5415:2;5403:9;5394:7;5390:23;5386:32;5383:119;;;5421:79;259:3507:48;;;5421:79:69;5541:1;5566:53;5611:7;5591:9;5566:53;:::i;5770:442::-;5957:2;5942:18;;5970:71;5946:9;6014:6;5970:71;:::i;:::-;6051:72;6119:2;6108:9;6104:18;6095:6;6051:72;:::i;:::-;6133;6201:2;6190:9;6186:18;6177:6;6133:72;:::i;6218:308::-;6365:2;6350:18;;6378:65;6354:9;6416:6;6378:65;:::i;:::-;6453:66;6515:2;6504:9;6500:18;6491:6;6453:66;:::i;:::-;6218:308;;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"309600","executionCost":"349","totalCost":"309949"},"external":{"alphaDenominator()":"2450","alphaNumerator()":"2523","interests(address,address)":"infinite","irrevocableLimit()":"2395","isScoreUpdated(uint256,address)":"infinite","markets(address)":"infinite","nextScoreUpdateRoundId()":"2505","oracle()":"infinite","pendingScoreUpdates()":"2461","poolRegistry()":"infinite","primeLiquidityProvider()":"infinite","revocableLimit()":"2438","stakedAt(address)":"infinite","tokens(address)":"infinite","totalIrrevocable()":"2416","totalRevocable()":"2483","totalScoreUpdatesRequired()":"2439","unreleasedPLPIncome(address)":"infinite","vTokenForAsset(address)":"infinite","xvsVault()":"infinite","xvsVaultPoolId()":"2440","xvsVaultRewardToken()":"infinite"}},"methodIdentifiers":{"alphaDenominator()":"ce853613","alphaNumerator()":"7ef82070","interests(address,address)":"b9eb69f6","irrevocableLimit()":"856c3aa4","isScoreUpdated(uint256,address)":"9565d3d2","markets(address)":"8e8f294b","nextScoreUpdateRoundId()":"a15753dc","oracle()":"7dc0d1d0","pendingScoreUpdates()":"c3db3c36","poolRegistry()":"afcff50f","primeLiquidityProvider()":"c86d1a78","revocableLimit()":"da6ab4f8","stakedAt(address)":"ef36bbde","tokens(address)":"e4860339","totalIrrevocable()":"d88b9d2e","totalRevocable()":"9f6506ce","totalScoreUpdatesRequired()":"bd212c0e","unreleasedPLPIncome(address)":"1bffac89","vTokenForAsset(address)":"ee6b13fc","xvsVault()":"1b9ce575","xvsVaultPoolId()":"487b0dfb","xvsVaultRewardToken()":"88bead73"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"alphaDenominator\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"alphaNumerator\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"interests\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"accrued\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"score\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rewardIndex\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"irrevocableLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isScoreUpdated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"markets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"supplyMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rewardIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sumOfMembersScore\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextScoreUpdateRoundId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contract ResilientOracleInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingScoreUpdates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"primeLiquidityProvider\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revocableLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"stakedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"tokens\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isIrrevocable\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalIrrevocable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalRevocable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalScoreUpdatesRequired\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"unreleasedPLPIncome\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"vTokenForAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xvsVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xvsVaultPoolId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xvsVaultRewardToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain.\"},\"unreleasedPLPIncome\":{\"details\":\"mapping of asset address => amount\"}},\"title\":\"PrimeStorageV1\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"alphaDenominator()\":{\"notice\":\"denominator of alpha. Ex: if alpha is 0.5 then this will be 2\"},\"alphaNumerator()\":{\"notice\":\"numerator of alpha. Ex: if alpha is 0.5 then this will be 1\"},\"interests(address,address)\":{\"notice\":\"vToken to user to user index\"},\"irrevocableLimit()\":{\"notice\":\"Indicates maximum irrevocable tokens that can be minted\"},\"isScoreUpdated(uint256,address)\":{\"notice\":\"mapping to check if a account's score was updated in the round\"},\"markets(address)\":{\"notice\":\"vToken to market configuration\"},\"nextScoreUpdateRoundId()\":{\"notice\":\"unique id for next round\"},\"oracle()\":{\"notice\":\"The address of ResilientOracle contract\"},\"pendingScoreUpdates()\":{\"notice\":\"total number of accounts whose score is yet to be updated\"},\"poolRegistry()\":{\"notice\":\"The address of PoolRegistry contract\"},\"primeLiquidityProvider()\":{\"notice\":\"The address of PLP contract\"},\"revocableLimit()\":{\"notice\":\"Indicates maximum revocable tokens that can be minted\"},\"stakedAt(address)\":{\"notice\":\"Tracks when prime token eligible users started staking for claiming prime token\"},\"tokens(address)\":{\"notice\":\"Mapping to get prime token's metadata\"},\"totalIrrevocable()\":{\"notice\":\"Tracks total irrevocable tokens minted\"},\"totalRevocable()\":{\"notice\":\"Tracks total revocable tokens minted\"},\"totalScoreUpdatesRequired()\":{\"notice\":\"total number of accounts whose score needs to be updated\"},\"unreleasedPLPIncome(address)\":{\"notice\":\"unreleased income from PLP that's already distributed to prime holders\"},\"vTokenForAsset(address)\":{\"notice\":\"mapping used to find if an asset is part of prime markets\"},\"xvsVault()\":{\"notice\":\"address of XVS vault\"},\"xvsVaultPoolId()\":{\"notice\":\"address of XVS vault pool id\"},\"xvsVaultRewardToken()\":{\"notice\":\"address of XVS vault reward token\"}},\"notice\":\"Storage for Prime Token\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol\":\"PrimeStorageV1\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\n/**\\n * @title PrimeStorageV1\\n * @author Venus\\n * @notice Storage for Prime Token\\n */\\ncontract PrimeStorageV1 {\\n    struct Token {\\n        bool exists;\\n        bool isIrrevocable;\\n    }\\n\\n    struct Market {\\n        uint256 supplyMultiplier;\\n        uint256 borrowMultiplier;\\n        uint256 rewardIndex;\\n        uint256 sumOfMembersScore;\\n        bool exists;\\n    }\\n\\n    struct Interest {\\n        uint256 accrued;\\n        uint256 score;\\n        uint256 rewardIndex;\\n    }\\n\\n    struct PendingReward {\\n        address vToken;\\n        address rewardToken;\\n        uint256 amount;\\n    }\\n\\n    /// @notice Base unit for computations, usually used in scaling (multiplications, divisions)\\n    uint256 internal constant EXP_SCALE = 1e18;\\n\\n    /// @notice maximum BPS = 100%\\n    uint256 internal constant MAXIMUM_BPS = 1e4;\\n\\n    /// @notice Mapping to get prime token's metadata\\n    mapping(address => Token) public tokens;\\n\\n    /// @notice  Tracks total irrevocable tokens minted\\n    uint256 public totalIrrevocable;\\n\\n    /// @notice  Tracks total revocable tokens minted\\n    uint256 public totalRevocable;\\n\\n    /// @notice  Indicates maximum revocable tokens that can be minted\\n    uint256 public revocableLimit;\\n\\n    /// @notice  Indicates maximum irrevocable tokens that can be minted\\n    uint256 public irrevocableLimit;\\n\\n    /// @notice Tracks when prime token eligible users started staking for claiming prime token\\n    mapping(address => uint256) public stakedAt;\\n\\n    /// @notice vToken to market configuration\\n    mapping(address => Market) public markets;\\n\\n    /// @notice vToken to user to user index\\n    mapping(address => mapping(address => Interest)) public interests;\\n\\n    /// @notice A list of boosted markets\\n    address[] internal _allMarkets;\\n\\n    /// @notice numerator of alpha. Ex: if alpha is 0.5 then this will be 1\\n    uint128 public alphaNumerator;\\n\\n    /// @notice denominator of alpha. Ex: if alpha is 0.5 then this will be 2\\n    uint128 public alphaDenominator;\\n\\n    /// @notice address of XVS vault\\n    address public xvsVault;\\n\\n    /// @notice address of XVS vault reward token\\n    address public xvsVaultRewardToken;\\n\\n    /// @notice address of XVS vault pool id\\n    uint256 public xvsVaultPoolId;\\n\\n    /// @notice mapping to check if a account's score was updated in the round\\n    mapping(uint256 => mapping(address => bool)) public isScoreUpdated;\\n\\n    /// @notice unique id for next round\\n    uint256 public nextScoreUpdateRoundId;\\n\\n    /// @notice total number of accounts whose score needs to be updated\\n    uint256 public totalScoreUpdatesRequired;\\n\\n    /// @notice total number of accounts whose score is yet to be updated\\n    uint256 public pendingScoreUpdates;\\n\\n    /// @notice mapping used to find if an asset is part of prime markets\\n    mapping(address => address) public vTokenForAsset;\\n\\n    /// @notice Address of core pool comptroller contract\\n    address internal corePoolComptroller;\\n\\n    /// @notice unreleased income from PLP that's already distributed to prime holders\\n    /// @dev mapping of asset address => amount\\n    mapping(address => uint256) public unreleasedPLPIncome;\\n\\n    /// @notice The address of PLP contract\\n    address public primeLiquidityProvider;\\n\\n    /// @notice The address of ResilientOracle contract\\n    ResilientOracleInterface public oracle;\\n\\n    /// @notice The address of PoolRegistry contract\\n    address public poolRegistry;\\n\\n    /// @dev This empty reserved space is put in place to allow future versions to add new\\n    /// variables without shifting down storage in the inheritance chain.\\n    uint256[26] private __gap;\\n}\\n\",\"keccak256\":\"0x5285c875114db2ea2be0b81b65722d5761806217022db733323c4e03365a95e7\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[{"astId":16662,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"tokens","offset":0,"slot":"0","type":"t_mapping(t_address,t_struct(Token)16623_storage)"},{"astId":16665,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"totalIrrevocable","offset":0,"slot":"1","type":"t_uint256"},{"astId":16668,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"totalRevocable","offset":0,"slot":"2","type":"t_uint256"},{"astId":16671,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"revocableLimit","offset":0,"slot":"3","type":"t_uint256"},{"astId":16674,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"irrevocableLimit","offset":0,"slot":"4","type":"t_uint256"},{"astId":16679,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"stakedAt","offset":0,"slot":"5","type":"t_mapping(t_address,t_uint256)"},{"astId":16685,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"markets","offset":0,"slot":"6","type":"t_mapping(t_address,t_struct(Market)16634_storage)"},{"astId":16693,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"interests","offset":0,"slot":"7","type":"t_mapping(t_address,t_mapping(t_address,t_struct(Interest)16641_storage))"},{"astId":16697,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"_allMarkets","offset":0,"slot":"8","type":"t_array(t_address)dyn_storage"},{"astId":16700,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"alphaNumerator","offset":0,"slot":"9","type":"t_uint128"},{"astId":16703,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"alphaDenominator","offset":16,"slot":"9","type":"t_uint128"},{"astId":16706,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"xvsVault","offset":0,"slot":"10","type":"t_address"},{"astId":16709,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"xvsVaultRewardToken","offset":0,"slot":"11","type":"t_address"},{"astId":16712,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"xvsVaultPoolId","offset":0,"slot":"12","type":"t_uint256"},{"astId":16719,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"isScoreUpdated","offset":0,"slot":"13","type":"t_mapping(t_uint256,t_mapping(t_address,t_bool))"},{"astId":16722,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"nextScoreUpdateRoundId","offset":0,"slot":"14","type":"t_uint256"},{"astId":16725,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"totalScoreUpdatesRequired","offset":0,"slot":"15","type":"t_uint256"},{"astId":16728,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"pendingScoreUpdates","offset":0,"slot":"16","type":"t_uint256"},{"astId":16733,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"vTokenForAsset","offset":0,"slot":"17","type":"t_mapping(t_address,t_address)"},{"astId":16736,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"corePoolComptroller","offset":0,"slot":"18","type":"t_address"},{"astId":16741,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"unreleasedPLPIncome","offset":0,"slot":"19","type":"t_mapping(t_address,t_uint256)"},{"astId":16744,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"primeLiquidityProvider","offset":0,"slot":"20","type":"t_address"},{"astId":16748,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"oracle","offset":0,"slot":"21","type":"t_contract(ResilientOracleInterface)16173"},{"astId":16751,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"poolRegistry","offset":0,"slot":"22","type":"t_address"},{"astId":16756,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"__gap","offset":0,"slot":"23","type":"t_array(t_uint256)26_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_uint256)26_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[26]","numberOfBytes":"832"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(ResilientOracleInterface)16173":{"encoding":"inplace","label":"contract ResilientOracleInterface","numberOfBytes":"20"},"t_mapping(t_address,t_address)":{"encoding":"mapping","key":"t_address","label":"mapping(address => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_mapping(t_address,t_struct(Interest)16641_storage))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => struct PrimeStorageV1.Interest))","numberOfBytes":"32","value":"t_mapping(t_address,t_struct(Interest)16641_storage)"},"t_mapping(t_address,t_struct(Interest)16641_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct PrimeStorageV1.Interest)","numberOfBytes":"32","value":"t_struct(Interest)16641_storage"},"t_mapping(t_address,t_struct(Market)16634_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct PrimeStorageV1.Market)","numberOfBytes":"32","value":"t_struct(Market)16634_storage"},"t_mapping(t_address,t_struct(Token)16623_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct PrimeStorageV1.Token)","numberOfBytes":"32","value":"t_struct(Token)16623_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_mapping(t_address,t_bool))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => bool))","numberOfBytes":"32","value":"t_mapping(t_address,t_bool)"},"t_struct(Interest)16641_storage":{"encoding":"inplace","label":"struct PrimeStorageV1.Interest","members":[{"astId":16636,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"accrued","offset":0,"slot":"0","type":"t_uint256"},{"astId":16638,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"score","offset":0,"slot":"1","type":"t_uint256"},{"astId":16640,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"rewardIndex","offset":0,"slot":"2","type":"t_uint256"}],"numberOfBytes":"96"},"t_struct(Market)16634_storage":{"encoding":"inplace","label":"struct PrimeStorageV1.Market","members":[{"astId":16625,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"supplyMultiplier","offset":0,"slot":"0","type":"t_uint256"},{"astId":16627,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"borrowMultiplier","offset":0,"slot":"1","type":"t_uint256"},{"astId":16629,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"rewardIndex","offset":0,"slot":"2","type":"t_uint256"},{"astId":16631,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"sumOfMembersScore","offset":0,"slot":"3","type":"t_uint256"},{"astId":16633,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"exists","offset":0,"slot":"4","type":"t_bool"}],"numberOfBytes":"160"},"t_struct(Token)16623_storage":{"encoding":"inplace","label":"struct PrimeStorageV1.Token","members":[{"astId":16620,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"exists","offset":0,"slot":"0","type":"t_bool"},{"astId":16622,"contract":"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol:PrimeStorageV1","label":"isIrrevocable","offset":1,"slot":"0","type":"t_bool"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"alphaDenominator()":{"notice":"denominator of alpha. Ex: if alpha is 0.5 then this will be 2"},"alphaNumerator()":{"notice":"numerator of alpha. Ex: if alpha is 0.5 then this will be 1"},"interests(address,address)":{"notice":"vToken to user to user index"},"irrevocableLimit()":{"notice":"Indicates maximum irrevocable tokens that can be minted"},"isScoreUpdated(uint256,address)":{"notice":"mapping to check if a account's score was updated in the round"},"markets(address)":{"notice":"vToken to market configuration"},"nextScoreUpdateRoundId()":{"notice":"unique id for next round"},"oracle()":{"notice":"The address of ResilientOracle contract"},"pendingScoreUpdates()":{"notice":"total number of accounts whose score is yet to be updated"},"poolRegistry()":{"notice":"The address of PoolRegistry contract"},"primeLiquidityProvider()":{"notice":"The address of PLP contract"},"revocableLimit()":{"notice":"Indicates maximum revocable tokens that can be minted"},"stakedAt(address)":{"notice":"Tracks when prime token eligible users started staking for claiming prime token"},"tokens(address)":{"notice":"Mapping to get prime token's metadata"},"totalIrrevocable()":{"notice":"Tracks total irrevocable tokens minted"},"totalRevocable()":{"notice":"Tracks total revocable tokens minted"},"totalScoreUpdatesRequired()":{"notice":"total number of accounts whose score needs to be updated"},"unreleasedPLPIncome(address)":{"notice":"unreleased income from PLP that's already distributed to prime holders"},"vTokenForAsset(address)":{"notice":"mapping used to find if an asset is part of prime markets"},"xvsVault()":{"notice":"address of XVS vault"},"xvsVaultPoolId()":{"notice":"address of XVS vault pool id"},"xvsVaultRewardToken()":{"notice":"address of XVS vault reward token"}},"notice":"Storage for Prime Token","version":1}}},"contracts/ERC4626/Interfaces/IComptroller.sol":{"IComptroller":{"abi":[{"inputs":[{"internalType":"address","name":"market","type":"address"},{"internalType":"enum Action","name":"action","type":"uint8"}],"name":"actionPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardDistributors","outputs":[{"internalType":"contract RewardsDistributor[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"supplyCaps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Venus","kind":"dev","methods":{},"title":"IComptroller","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"actionPaused(address,uint8)":"e85a2960","getRewardDistributors()":"61252fd1","supplyCaps(address)":"02c3bcbb"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"},{\"internalType\":\"enum Action\",\"name\":\"action\",\"type\":\"uint8\"}],\"name\":\"actionPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardDistributors\",\"outputs\":[{\"internalType\":\"contract RewardsDistributor[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"supplyCaps\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"kind\":\"dev\",\"methods\":{},\"title\":\"IComptroller\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Combined interface for the `Comptroller` contract, including both core and view functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ERC4626/Interfaces/IComptroller.sol\":\"IComptroller\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./OwnableUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership} and {acceptOwnership}.\\n *\\n * This module is used through inheritance. It will make available all functions\\n * from parent (Ownable).\\n */\\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\\n    address private _pendingOwner;\\n\\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\\n\\n    function __Ownable2Step_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable2Step_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Returns the address of the pending owner.\\n     */\\n    function pendingOwner() public view virtual returns (address) {\\n        return _pendingOwner;\\n    }\\n\\n    /**\\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\\n        _pendingOwner = newOwner;\\n        emit OwnershipTransferStarted(owner(), newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual override {\\n        delete _pendingOwner;\\n        super._transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev The new owner accepts the ownership transfer.\\n     */\\n    function acceptOwnership() public virtual {\\n        address sender = _msgSender();\\n        require(pendingOwner() == sender, \\\"Ownable2Step: caller is not the new owner\\\");\\n        _transferOwnership(sender);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x9140dabc466abab21b48b72dbda26736b1183a310d0e677d3719d201df026510\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * ==== Security Considerations\\n *\\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\\n * generally recommended is:\\n *\\n * ```solidity\\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\\n *     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\\n *     doThing(..., value);\\n * }\\n *\\n * function doThing(..., uint256 value) public {\\n *     token.safeTransferFrom(msg.sender, address(this), value);\\n *     ...\\n * }\\n * ```\\n *\\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\\n * {SafeERC20-safeTransferFrom}).\\n *\\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\\n * contracts should have entry points that don't rely on permit.\\n */\\ninterface IERC20PermitUpgradeable {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     *\\n     * CAUTION: See Security Considerations above.\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x07e881de3b9f6d2c07909f193f24b96c7fe4ea60013260f3f25aecd8bab3c2f8\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\nimport \\\"../extensions/IERC20PermitUpgradeable.sol\\\";\\nimport \\\"../../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20Upgradeable {\\n    using AddressUpgradeable for address;\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransfer(IERC20Upgradeable token, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    /**\\n     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeIncreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        uint256 oldAllowance = token.allowance(address(this), spender);\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));\\n    }\\n\\n    /**\\n     * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeDecreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));\\n        }\\n    }\\n\\n    /**\\n     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n     * to be set to zero before setting it to a non-zero value, such as USDT.\\n     */\\n    function forceApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);\\n\\n        if (!_callOptionalReturnBool(token, approvalCall)) {\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));\\n            _callOptionalReturn(token, approvalCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.\\n     * Revert on invalid signature.\\n     */\\n    function safePermit(\\n        IERC20PermitUpgradeable token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20Upgradeable token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        require(returndata.length == 0 || abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     *\\n     * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\\n     */\\n    function _callOptionalReturnBool(IERC20Upgradeable token, bytes memory data) private returns (bool) {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\\n        // and not revert is the subcall reverts.\\n\\n        (bool success, bytes memory returndata) = address(token).call(data);\\n        return\\n            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && AddressUpgradeable.isContract(address(token));\\n    }\\n}\\n\",\"keccak256\":\"0x23b997be73d3dd46885262704f0f8cfc7273fdadfe303d37969a9561373972b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n    /**\\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n     *\\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n     * {RoleAdminChanged} not being emitted signaling this.\\n     *\\n     * _Available since v3.1._\\n     */\\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n    /**\\n     * @dev Emitted when `account` is granted `role`.\\n     *\\n     * `sender` is the account that originated the contract call, an admin role\\n     * bearer except when using {AccessControl-_setupRole}.\\n     */\\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Emitted when `account` is revoked `role`.\\n     *\\n     * `sender` is the account that originated the contract call:\\n     *   - if using `revokeRole`, it is the admin role bearer\\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n     */\\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Returns `true` if `account` has been granted `role`.\\n     */\\n    function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n    /**\\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\\n     * {revokeRole}.\\n     *\\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n     */\\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n    /**\\n     * @dev Grants `role` to `account`.\\n     *\\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function grantRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from `account`.\\n     *\\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function revokeRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from the calling account.\\n     *\\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n     * purpose is to provide a mechanism for accounts to lose their privileges\\n     * if they are compromised (such as when a trusted device is misplaced).\\n     *\\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must be `account`.\\n     */\\n    function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\n\\nimport \\\"./IAccessControlManagerV8.sol\\\";\\n\\n/**\\n * @title AccessControlledV8\\n * @author Venus\\n * @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\\n * to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\\n */\\nabstract contract AccessControlledV8 is Initializable, Ownable2StepUpgradeable {\\n    /// @notice Access control manager contract\\n    IAccessControlManagerV8 internal _accessControlManager;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when access control manager contract address is changed\\n    event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager);\\n\\n    /// @notice Thrown when the action is prohibited by AccessControlManager\\n    error Unauthorized(address sender, address calledContract, string methodSignature);\\n\\n    function __AccessControlled_init(address accessControlManager_) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n    }\\n\\n    function __AccessControlled_init_unchained(address accessControlManager_) internal onlyInitializing {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Sets the address of AccessControlManager\\n     * @dev Admin function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     * @custom:event Emits NewAccessControlManager event\\n     * @custom:access Only Governance\\n     */\\n    function setAccessControlManager(address accessControlManager_) external onlyOwner {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Returns the address of the access control manager contract\\n     */\\n    function accessControlManager() external view returns (IAccessControlManagerV8) {\\n        return _accessControlManager;\\n    }\\n\\n    /**\\n     * @dev Internal function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     */\\n    function _setAccessControlManager(address accessControlManager_) internal {\\n        require(address(accessControlManager_) != address(0), \\\"invalid acess control manager address\\\");\\n        address oldAccessControlManager = address(_accessControlManager);\\n        _accessControlManager = IAccessControlManagerV8(accessControlManager_);\\n        emit NewAccessControlManager(oldAccessControlManager, accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Reverts if the call is not allowed by AccessControlManager\\n     * @param signature Method signature\\n     */\\n    function _checkAccessAllowed(string memory signature) internal view {\\n        bool isAllowedToCall = _accessControlManager.isAllowedToCall(msg.sender, signature);\\n\\n        if (!isAllowedToCall) {\\n            revert Unauthorized(msg.sender, address(this), signature);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe0fd441c84ac907cabc88db69ef04f6d7532d770c7e6a1dfe6e7d6305debb49\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport \\\"@openzeppelin/contracts/access/IAccessControl.sol\\\";\\n\\n/**\\n * @title IAccessControlManagerV8\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\\n */\\ninterface IAccessControlManagerV8 is IAccessControl {\\n    function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n    function revokeCallPermission(\\n        address contractAddress,\\n        string calldata functionSig,\\n        address accountToRevoke\\n    ) external;\\n\\n    function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n    function hasPermission(\\n        address account,\\n        address contractAddress,\\n        string calldata functionSig\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xaa29b098440d0b3a131c5ecdf25ce548790c1b5ac7bf9b5c0264b6af6f7a1e0b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Comptroller.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\n\\nimport { ComptrollerInterface, Action } from \\\"./ComptrollerInterface.sol\\\";\\nimport { ComptrollerStorage } from \\\"./ComptrollerStorage.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"./MaxLoopsLimitHelper.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title Comptroller\\n * @author Venus\\n * @notice The Comptroller is designed to provide checks for all minting, redeeming, transferring, borrowing, lending, repaying, liquidating,\\n * and seizing done by the `vToken` contract. Each pool has one `Comptroller` checking these interactions across markets. When a user interacts\\n * with a given market by one of these main actions, a call is made to a corresponding hook in the associated `Comptroller`, which either allows\\n * or reverts the transaction. These hooks also update supply and borrow rewards as they are called. The comptroller holds the logic for assessing\\n * liquidity snapshots of an account via the collateral factor and liquidation threshold. This check determines the collateral needed for a borrow,\\n * as well as how much of a borrow may be liquidated. A user may borrow a portion of their collateral with the maximum amount determined by the\\n * markets collateral factor. However, if their borrowed amount exceeds an amount calculated using the market\\u2019s corresponding liquidation threshold,\\n * the borrow is eligible for liquidation.\\n *\\n * The `Comptroller` also includes two functions `liquidateAccount()` and `healAccount()`, which are meant to handle accounts that do not exceed\\n * the `minLiquidatableCollateral` for the `Comptroller`:\\n *\\n * - `healAccount()`: This function is called to seize all of a given user\\u2019s collateral, requiring the `msg.sender` repay a certain percentage\\n * of the debt calculated by `collateral/(borrows*liquidationIncentive)`. The function can only be called if the calculated percentage does not exceed\\n * 100%, because otherwise no `badDebt` would be created and `liquidateAccount()` should be used instead. The difference in the actual amount of debt\\n * and debt paid off is recorded as `badDebt` for each market, which can then be auctioned off for the risk reserves of the associated pool.\\n * - `liquidateAccount()`: This function can only be called if the collateral seized will cover all borrows of an account, as well as the liquidation\\n * incentive. Otherwise, the pool will incur bad debt, in which case the function `healAccount()` should be used instead. This function skips the logic\\n * verifying that the repay amount does not exceed the close factor.\\n */\\ncontract Comptroller is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    ComptrollerStorage,\\n    ComptrollerInterface,\\n    ExponentialNoError,\\n    MaxLoopsLimitHelper\\n{\\n    // PoolRegistry, immutable to save on gas\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    address public immutable poolRegistry;\\n\\n    /// @notice Emitted when an account enters a market\\n    event MarketEntered(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when an account exits a market\\n    event MarketExited(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when close factor is changed by admin\\n    event NewCloseFactor(uint256 oldCloseFactorMantissa, uint256 newCloseFactorMantissa);\\n\\n    /// @notice Emitted when a collateral factor is changed by admin\\n    event NewCollateralFactor(VToken vToken, uint256 oldCollateralFactorMantissa, uint256 newCollateralFactorMantissa);\\n\\n    /// @notice Emitted when liquidation threshold is changed by admin\\n    event NewLiquidationThreshold(\\n        VToken vToken,\\n        uint256 oldLiquidationThresholdMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    );\\n\\n    /// @notice Emitted when liquidation incentive is changed by admin\\n    event NewLiquidationIncentive(uint256 oldLiquidationIncentiveMantissa, uint256 newLiquidationIncentiveMantissa);\\n\\n    /// @notice Emitted when price oracle is changed\\n    event NewPriceOracle(ResilientOracleInterface oldPriceOracle, ResilientOracleInterface newPriceOracle);\\n\\n    /// @notice Emitted when an action is paused on a market\\n    event ActionPausedMarket(VToken vToken, Action action, bool pauseState);\\n\\n    /// @notice Emitted when borrow cap for a vToken is changed\\n    event NewBorrowCap(VToken indexed vToken, uint256 newBorrowCap);\\n\\n    /// @notice Emitted when the collateral threshold (in USD) for non-batch liquidations is changed\\n    event NewMinLiquidatableCollateral(uint256 oldMinLiquidatableCollateral, uint256 newMinLiquidatableCollateral);\\n\\n    /// @notice Emitted when supply cap for a vToken is changed\\n    event NewSupplyCap(VToken indexed vToken, uint256 newSupplyCap);\\n\\n    /// @notice Emitted when a rewards distributor is added\\n    event NewRewardsDistributor(address indexed rewardsDistributor, address indexed rewardToken);\\n\\n    /// @notice Emitted when a market is supported\\n    event MarketSupported(VToken vToken);\\n\\n    /// @notice Emitted when prime token contract address is changed\\n    event NewPrimeToken(IPrime oldPrimeToken, IPrime newPrimeToken);\\n\\n    /// @notice Emitted when forced liquidation is enabled or disabled for a market\\n    event IsForcedLiquidationEnabledUpdated(address indexed vToken, bool enable);\\n\\n    /// @notice Emitted when a market is unlisted\\n    event MarketUnlisted(address indexed vToken);\\n    /// @notice Emitted when the borrowing or redeeming delegate rights are updated for an account\\n    event DelegateUpdated(address indexed approver, address indexed delegate, bool approved);\\n\\n    /// @notice Thrown when collateral factor exceeds the upper bound\\n    error InvalidCollateralFactor();\\n\\n    /// @notice Thrown when liquidation threshold exceeds the collateral factor\\n    error InvalidLiquidationThreshold();\\n\\n    /// @notice Thrown when the action is only available to specific sender, but the real sender was different\\n    error UnexpectedSender(address expectedSender, address actualSender);\\n\\n    /// @notice Thrown when the oracle returns an invalid price for some asset\\n    error PriceError(address vToken);\\n\\n    /// @notice Thrown if VToken unexpectedly returned a nonzero error code while trying to get account snapshot\\n    error SnapshotError(address vToken, address user);\\n\\n    /// @notice Thrown when the market is not listed\\n    error MarketNotListed(address market);\\n\\n    /// @notice Thrown when a market has an unexpected comptroller\\n    error ComptrollerMismatch();\\n\\n    /// @notice Thrown when user is not member of market\\n    error MarketNotCollateral(address vToken, address user);\\n\\n    /// @notice Thrown when borrow action is not paused\\n    error BorrowActionNotPaused();\\n\\n    /// @notice Thrown when mint action is not paused\\n    error MintActionNotPaused();\\n\\n    /// @notice Thrown when redeem action is not paused\\n    error RedeemActionNotPaused();\\n\\n    /// @notice Thrown when repay action is not paused\\n    error RepayActionNotPaused();\\n\\n    /// @notice Thrown when seize action is not paused\\n    error SeizeActionNotPaused();\\n\\n    /// @notice Thrown when exit market action is not paused\\n    error ExitMarketActionNotPaused();\\n\\n    /// @notice Thrown when transfer action is not paused\\n    error TransferActionNotPaused();\\n\\n    /// @notice Thrown when enter market action is not paused\\n    error EnterMarketActionNotPaused();\\n\\n    /// @notice Thrown when liquidate action is not paused\\n    error LiquidateActionNotPaused();\\n\\n    /// @notice Thrown when borrow cap is not zero\\n    error BorrowCapIsNotZero();\\n\\n    /// @notice Thrown when supply cap is not zero\\n    error SupplyCapIsNotZero();\\n\\n    /// @notice Thrown when collateral factor is not zero\\n    error CollateralFactorIsNotZero();\\n\\n    /**\\n     * @notice Thrown during the liquidation if user's total collateral amount is lower than\\n     *   a predefined threshold. In this case only batch liquidations (either liquidateAccount\\n     *   or healAccount) are available.\\n     */\\n    error MinimalCollateralViolated(uint256 expectedGreaterThan, uint256 actual);\\n    error CollateralExceedsThreshold(uint256 expectedLessThanOrEqualTo, uint256 actual);\\n    error InsufficientCollateral(uint256 collateralToSeize, uint256 availableCollateral);\\n\\n    /// @notice Thrown when the account doesn't have enough liquidity to redeem or borrow\\n    error InsufficientLiquidity();\\n\\n    /// @notice Thrown when trying to liquidate a healthy account\\n    error InsufficientShortfall();\\n\\n    /// @notice Thrown when trying to repay more than allowed by close factor\\n    error TooMuchRepay();\\n\\n    /// @notice Thrown if the user is trying to exit a market in which they have an outstanding debt\\n    error NonzeroBorrowBalance();\\n\\n    /// @notice Thrown when trying to perform an action that is paused\\n    error ActionPaused(address market, Action action);\\n\\n    /// @notice Thrown when trying to add a market that is already listed\\n    error MarketAlreadyListed(address market);\\n\\n    /// @notice Thrown if the supply cap is exceeded\\n    error SupplyCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if the borrow cap is exceeded\\n    error BorrowCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if delegate approval status is already set to the requested value\\n    error DelegationStatusUnchanged();\\n\\n    /// @param poolRegistry_ Pool registry address\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    /// @custom:error ZeroAddressNotAllowed is thrown when pool registry address is zero\\n    constructor(address poolRegistry_) {\\n        ensureNonzeroAddress(poolRegistry_);\\n\\n        poolRegistry = poolRegistry_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @param loopLimit Limit for the loops can iterate to avoid the DOS\\n     * @param accessControlManager Access control manager contract address\\n     */\\n    function initialize(uint256 loopLimit, address accessControlManager) external initializer {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager);\\n\\n        _setMaxLoopsLimit(loopLimit);\\n    }\\n\\n    /**\\n     * @notice Add assets to be included in account liquidity calculation; enabling them to be used as collateral\\n     * @param vTokens The list of addresses of the vToken markets to be enabled\\n     * @return errors An array of NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketEntered is emitted for each market on success\\n     * @custom:error ActionPaused error is thrown if entering any of the markets is paused\\n     * @custom:error MarketNotListed error is thrown if any of the markets is not listed\\n     * @custom:access Not restricted\\n     */\\n    function enterMarkets(address[] memory vTokens) external override returns (uint256[] memory) {\\n        uint256 len = vTokens.length;\\n\\n        uint256[] memory results = new uint256[](len);\\n        for (uint256 i; i < len; ++i) {\\n            VToken vToken = VToken(vTokens[i]);\\n\\n            _addToMarket(vToken, msg.sender);\\n            results[i] = NO_ERROR;\\n        }\\n\\n        return results;\\n    }\\n\\n    /**\\n     * @notice Unlist a market by setting isListed to false\\n     * @dev Checks if all actions are paused, borrow/supply caps is set to 0 and collateral factor is to 0.\\n     * @param market The address of the market (token) to unlist\\n     * @return uint256 Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketUnlisted is emitted on success\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error BorrowActionNotPaused error is thrown if borrow action is not paused\\n     * @custom:error MintActionNotPaused error is thrown if mint action is not paused\\n     * @custom:error RedeemActionNotPaused error is thrown if redeem action is not paused\\n     * @custom:error RepayActionNotPaused error is thrown if repay action is not paused\\n     * @custom:error EnterMarketActionNotPaused error is thrown if enter market action is not paused\\n     * @custom:error LiquidateActionNotPaused error is thrown if liquidate action is not paused\\n     * @custom:error BorrowCapIsNotZero error is thrown if borrow cap is not zero\\n     * @custom:error SupplyCapIsNotZero error is thrown if supply cap is not zero\\n     * @custom:error CollateralFactorIsNotZero error is thrown if collateral factor is not zero\\n     */\\n    function unlistMarket(address market) external returns (uint256) {\\n        _checkAccessAllowed(\\\"unlistMarket(address)\\\");\\n\\n        Market storage _market = markets[market];\\n\\n        if (!_market.isListed) {\\n            revert MarketNotListed(market);\\n        }\\n\\n        if (!actionPaused(market, Action.BORROW)) {\\n            revert BorrowActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.MINT)) {\\n            revert MintActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REDEEM)) {\\n            revert RedeemActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REPAY)) {\\n            revert RepayActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.SEIZE)) {\\n            revert SeizeActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.ENTER_MARKET)) {\\n            revert EnterMarketActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.LIQUIDATE)) {\\n            revert LiquidateActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.TRANSFER)) {\\n            revert TransferActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.EXIT_MARKET)) {\\n            revert ExitMarketActionNotPaused();\\n        }\\n\\n        if (borrowCaps[market] != 0) {\\n            revert BorrowCapIsNotZero();\\n        }\\n\\n        if (supplyCaps[market] != 0) {\\n            revert SupplyCapIsNotZero();\\n        }\\n\\n        if (_market.collateralFactorMantissa != 0) {\\n            revert CollateralFactorIsNotZero();\\n        }\\n\\n        _market.isListed = false;\\n        emit MarketUnlisted(market);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Grants or revokes the borrowing or redeeming delegate rights to / from an account\\n     *  If allowed, the delegate will be able to borrow funds on behalf of the sender\\n     *  Upon a delegated borrow, the delegate will receive the funds, and the borrower\\n     *  will see the debt on their account\\n     *  Upon a delegated redeem, the delegate will receive the redeemed amount and the approver\\n     *  will see a deduction in his vToken balance\\n     * @param delegate The address to update the rights for\\n     * @param approved Whether to grant (true) or revoke (false) the borrowing or redeeming rights\\n     * @custom:event DelegateUpdated emits on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when delegate address is zero\\n     * @custom:error DelegationStatusUnchanged is thrown if approval status is already set to the requested value\\n     * @custom:access Not restricted\\n     */\\n    function updateDelegate(address delegate, bool approved) external {\\n        ensureNonzeroAddress(delegate);\\n        if (approvedDelegates[msg.sender][delegate] == approved) {\\n            revert DelegationStatusUnchanged();\\n        }\\n\\n        approvedDelegates[msg.sender][delegate] = approved;\\n        emit DelegateUpdated(msg.sender, delegate, approved);\\n    }\\n\\n    /**\\n     * @notice Removes asset from sender's account liquidity calculation; disabling them as collateral\\n     * @dev Sender must not have an outstanding borrow balance in the asset,\\n     *  or be providing necessary collateral for an outstanding borrow.\\n     * @param vTokenAddress The address of the asset to be removed\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketExited is emitted on success\\n     * @custom:error ActionPaused error is thrown if exiting the market is paused\\n     * @custom:error NonzeroBorrowBalance error is thrown if the user has an outstanding borrow in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if exiting the market would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function exitMarket(address vTokenAddress) external override returns (uint256) {\\n        _checkActionPauseState(vTokenAddress, Action.EXIT_MARKET);\\n        VToken vToken = VToken(vTokenAddress);\\n        /* Get sender tokensHeld and amountOwed underlying from the vToken */\\n        (uint256 tokensHeld, uint256 amountOwed, ) = _safeGetAccountSnapshot(vToken, msg.sender);\\n\\n        /* Fail if the sender has a borrow balance */\\n        if (amountOwed != 0) {\\n            revert NonzeroBorrowBalance();\\n        }\\n\\n        /* Fail if the sender is not permitted to redeem all of their tokens */\\n        _checkRedeemAllowed(vTokenAddress, msg.sender, tokensHeld);\\n\\n        Market storage marketToExit = markets[address(vToken)];\\n\\n        /* Return true if the sender is not already \\u2018in\\u2019 the market */\\n        if (!marketToExit.accountMembership[msg.sender]) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Set vToken account membership to false */\\n        delete marketToExit.accountMembership[msg.sender];\\n\\n        /* Delete vToken from the account\\u2019s list of assets */\\n        // load into memory for faster iteration\\n        VToken[] memory userAssetList = accountAssets[msg.sender];\\n        uint256 len = userAssetList.length;\\n\\n        uint256 assetIndex = len;\\n        for (uint256 i; i < len; ++i) {\\n            if (userAssetList[i] == vToken) {\\n                assetIndex = i;\\n                break;\\n            }\\n        }\\n\\n        // We *must* have found the asset in the list or our redundant data structure is broken\\n        assert(assetIndex < len);\\n\\n        // copy last item in list to location of item to be removed, reduce length by 1\\n        VToken[] storage storedList = accountAssets[msg.sender];\\n        storedList[assetIndex] = storedList[storedList.length - 1];\\n        storedList.pop();\\n\\n        emit MarketExited(vToken, msg.sender);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /*** Policy Hooks ***/\\n\\n    /**\\n     * @notice Checks if the account should be allowed to mint tokens in the given market\\n     * @param vToken The market to verify the mint against\\n     * @param minter The account which would get the minted tokens\\n     * @param mintAmount The amount of underlying being supplied to the market in exchange for tokens\\n     * @custom:error ActionPaused error is thrown if supplying to this market is paused\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error SupplyCapExceeded error is thrown if the total supply exceeds the cap after minting\\n     * @custom:access Not restricted\\n     */\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external override {\\n        _checkActionPauseState(vToken, Action.MINT);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        uint256 supplyCap = supplyCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (supplyCap != type(uint256).max) {\\n            uint256 vTokenSupply = VToken(vToken).totalSupply();\\n            Exp memory exchangeRate = Exp({ mantissa: VToken(vToken).exchangeRateStored() });\\n            uint256 nextTotalSupply = mul_ScalarTruncateAddUInt(exchangeRate, vTokenSupply, mintAmount);\\n            if (nextTotalSupply > supplyCap) {\\n                revert SupplyCapExceeded(vToken, supplyCap);\\n            }\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, minter);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates mint, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being minted\\n     * @param minter The address minting the tokens\\n     * @param actualMintAmount The amount of the underlying asset being minted\\n     * @param mintTokens The number of tokens being minted\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function mintVerify(address vToken, address minter, uint256 actualMintAmount, uint256 mintTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(minter, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to redeem tokens in the given market\\n     * @param vToken The market to verify the redeem against\\n     * @param redeemer The account which would redeem the tokens\\n     * @param redeemTokens The number of vTokens to exchange for the underlying asset in the market\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external override {\\n        _checkActionPauseState(vToken, Action.REDEEM);\\n\\n        _checkRedeemAllowed(vToken, redeemer, redeemTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, redeemer);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates redeem, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being redeemed\\n     * @param redeemer The address redeeming the tokens\\n     * @param redeemAmount The amount of the underlying asset being redeemed\\n     * @param redeemTokens The number of tokens being redeemed\\n     */\\n    function redeemVerify(address vToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(redeemer, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates repayBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being repaid\\n     * @param payer The address repaying the borrow\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     */\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer, // solhint-disable-line no-unused-vars\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 borrowerIndex // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates liquidateBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     * @param seizeTokens The amount of collateral token that will be seized\\n     */\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenBorrowed);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenBorrowed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates seize, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param seizeTokens The number of collateral tokens to seize\\n     */\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenCollateral);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenCollateral);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates transfer, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being transferred\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function transferVerify(address vToken, address src, address dst, uint256 transferTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(src, vToken);\\n            prime.accrueInterestAndUpdateScore(dst, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to borrow the underlying asset of the given market\\n     * @param vToken The market to verify the borrow against\\n     * @param borrower The account which would borrow the asset\\n     * @param borrowAmount The amount of underlying the account would borrow\\n     * @custom:error ActionPaused error is thrown if borrowing is paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if there is not enough collateral to borrow\\n     * @custom:error BorrowCapExceeded is thrown if the borrow cap will be exceeded should this borrow succeed\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted if vToken is enabled as collateral, otherwise only vToken\\n     */\\n    /// disable-eslint\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external override {\\n        _checkActionPauseState(vToken, Action.BORROW);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (!markets[vToken].accountMembership[borrower]) {\\n            // only vTokens may call borrowAllowed if borrower not in market\\n            _checkSenderIs(vToken);\\n\\n            // attempt to add borrower to the market or revert\\n            _addToMarket(VToken(msg.sender), borrower);\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (oracle.getUnderlyingPrice(vToken) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 borrowCap = borrowCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (borrowCap != type(uint256).max) {\\n            uint256 totalBorrows = VToken(vToken).totalBorrows();\\n            uint256 badDebt = VToken(vToken).badDebt();\\n            uint256 nextTotalBorrows = totalBorrows + borrowAmount + badDebt;\\n            if (nextTotalBorrows > borrowCap) {\\n                revert BorrowCapExceeded(vToken, borrowCap);\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            borrower,\\n            VToken(vToken),\\n            0,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n\\n        Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates borrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset whose underlying is being borrowed\\n     * @param borrower The address borrowing the underlying\\n     * @param borrowAmount The amount of the underlying asset requested to borrow\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function borrowVerify(address vToken, address borrower, uint256 borrowAmount) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to repay a borrow in the given market\\n     * @param vToken The market to verify the repay against\\n     * @param borrower The account which would borrowed the asset\\n     * @custom:error ActionPaused error is thrown if repayments are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:access Not restricted\\n     */\\n    function preRepayHook(address vToken, address borrower) external override {\\n        _checkActionPauseState(vToken, Action.REPAY);\\n\\n        oracle.updatePrice(vToken);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the liquidation should be allowed to occur\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param borrower The address of the borrower\\n     * @param repayAmount The amount of underlying being repaid\\n     * @param skipLiquidityCheck Allows the borrow to be liquidated regardless of the account liquidity\\n     * @custom:error ActionPaused error is thrown if liquidations are paused in this market\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error TooMuchRepay error is thrown if the liquidator is trying to repay more than allowed by close factor\\n     * @custom:error MinimalCollateralViolated is thrown if the users' total collateral is lower than the threshold for non-batch liquidations\\n     * @custom:error InsufficientShortfall is thrown when trying to liquidate a healthy account\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     */\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        // Pause Action.LIQUIDATE on BORROWED TOKEN to prevent liquidating it.\\n        // If we want to pause liquidating to vTokenCollateral, we should pause\\n        // Action.SEIZE on it\\n        _checkActionPauseState(vTokenBorrowed, Action.LIQUIDATE);\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(address(vTokenBorrowed));\\n        }\\n        if (!markets[vTokenCollateral].isListed) {\\n            revert MarketNotListed(address(vTokenCollateral));\\n        }\\n\\n        uint256 borrowBalance = VToken(vTokenBorrowed).borrowBalanceStored(borrower);\\n\\n        /* Allow accounts to be liquidated if it is a forced liquidation */\\n        if (skipLiquidityCheck || isForcedLiquidationEnabled[vTokenBorrowed]) {\\n            if (repayAmount > borrowBalance) {\\n                revert TooMuchRepay();\\n            }\\n            return;\\n        }\\n\\n        /* The borrower must have shortfall and collateral > threshold in order to be liquidatable */\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral <= minLiquidatableCollateral) {\\n            /* The liquidator should use either liquidateAccount or healAccount */\\n            revert MinimalCollateralViolated(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        /* The liquidator may not repay more than what is allowed by the closeFactor */\\n        uint256 maxClose = mul_ScalarTruncate(Exp({ mantissa: closeFactorMantissa }), borrowBalance);\\n        if (repayAmount > maxClose) {\\n            revert TooMuchRepay();\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the seizing of assets should be allowed to occur\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param seizerContract Contract that tries to seize the asset (either borrowed vToken or Comptroller)\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @custom:error ActionPaused error is thrown if seizing this type of collateral is paused\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error ComptrollerMismatch error is when seizer contract or seized asset belong to different pools\\n     * @custom:access Not restricted\\n     */\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address seizerContract,\\n        address liquidator,\\n        address borrower\\n    ) external override {\\n        // Pause Action.SEIZE on COLLATERAL to prevent seizing it.\\n        // If we want to pause liquidating vTokenBorrowed, we should pause\\n        // Action.LIQUIDATE on it\\n        _checkActionPauseState(vTokenCollateral, Action.SEIZE);\\n\\n        Market storage market = markets[vTokenCollateral];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(vTokenCollateral);\\n        }\\n\\n        if (seizerContract == address(this)) {\\n            // If Comptroller is the seizer, just check if collateral's comptroller\\n            // is equal to the current address\\n            if (address(VToken(vTokenCollateral).comptroller()) != address(this)) {\\n                revert ComptrollerMismatch();\\n            }\\n        } else {\\n            // If the seizer is not the Comptroller, check that the seizer is a\\n            // listed market, and that the markets' comptrollers match\\n            if (!markets[seizerContract].isListed) {\\n                revert MarketNotListed(seizerContract);\\n            }\\n            if (VToken(vTokenCollateral).comptroller() != VToken(seizerContract).comptroller()) {\\n                revert ComptrollerMismatch();\\n            }\\n        }\\n\\n        if (!market.accountMembership[borrower]) {\\n            revert MarketNotCollateral(vTokenCollateral, borrower);\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vTokenCollateral);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, borrower);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, liquidator);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to transfer tokens in the given market\\n     * @param vToken The market to verify the transfer against\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external override {\\n        _checkActionPauseState(vToken, Action.TRANSFER);\\n\\n        // Currently the only consideration is whether or not\\n        //  the src is allowed to redeem this many tokens\\n        _checkRedeemAllowed(vToken, src, transferTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, src);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, dst);\\n        }\\n    }\\n\\n    /*** Pool-level operations ***/\\n\\n    /**\\n     * @notice Seizes all the remaining collateral, makes msg.sender repay the existing\\n     *   borrows, and treats the rest of the debt as bad debt (for each market).\\n     *   The sender has to repay a certain percentage of the debt, computed as\\n     *   collateral / (borrows * liquidationIncentive).\\n     * @param user account to heal\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for healing\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function healAccount(address user) external {\\n        VToken[] memory userAssets = getAssetsIn(user);\\n        uint256 userAssetsCount = userAssets.length;\\n\\n        address liquidator = msg.sender;\\n        {\\n            ResilientOracleInterface oracle_ = oracle;\\n            // We need all user's markets to be fresh for the computations to be correct\\n            for (uint256 i; i < userAssetsCount; ++i) {\\n                userAssets[i].accrueInterest();\\n                oracle_.updatePrice(address(userAssets[i]));\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(user, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        // percentage = collateral / (borrows * liquidation incentive)\\n        Exp memory collateral = Exp({ mantissa: snapshot.totalCollateral });\\n        Exp memory scaledBorrows = mul_(\\n            Exp({ mantissa: snapshot.borrows }),\\n            Exp({ mantissa: liquidationIncentiveMantissa })\\n        );\\n\\n        Exp memory percentage = div_(collateral, scaledBorrows);\\n        if (lessThanExp(Exp({ mantissa: MANTISSA_ONE }), percentage)) {\\n            revert CollateralExceedsThreshold(scaledBorrows.mantissa, collateral.mantissa);\\n        }\\n\\n        for (uint256 i; i < userAssetsCount; ++i) {\\n            VToken market = userAssets[i];\\n\\n            (uint256 tokens, uint256 borrowBalance, ) = _safeGetAccountSnapshot(market, user);\\n            uint256 repaymentAmount = mul_ScalarTruncate(percentage, borrowBalance);\\n\\n            // Seize the entire collateral\\n            if (tokens != 0) {\\n                market.seize(liquidator, user, tokens);\\n            }\\n            // Repay a certain percentage of the borrow, forgive the rest\\n            if (borrowBalance != 0) {\\n                market.healBorrow(liquidator, user, repaymentAmount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Liquidates all borrows of the borrower. Callable only if the collateral is less than\\n     *   a predefined threshold, and the account collateral can be seized to cover all borrows. If\\n     *   the collateral is higher than the threshold, use regular liquidations. If the collateral is\\n     *   below the threshold, and the account is insolvent, use healAccount.\\n     * @param borrower the borrower address\\n     * @param orders an array of liquidation orders\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for a batch liquidation\\n     * @custom:error InsufficientCollateral error is thrown when there is not enough collateral to cover the debt\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function liquidateAccount(address borrower, LiquidationOrder[] calldata orders) external {\\n        // We will accrue interest and update the oracle prices later during the liquidation\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            // You should use the regular vToken.liquidateBorrow(...) call\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        uint256 collateralToSeize = mul_ScalarTruncate(\\n            Exp({ mantissa: liquidationIncentiveMantissa }),\\n            snapshot.borrows\\n        );\\n        if (collateralToSeize >= snapshot.totalCollateral) {\\n            // There is not enough collateral to seize. Use healBorrow to repay some part of the borrow\\n            // and record bad debt.\\n            revert InsufficientCollateral(collateralToSeize, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        uint256 ordersCount = orders.length;\\n\\n        _ensureMaxLoops(ordersCount / 2);\\n\\n        for (uint256 i; i < ordersCount; ++i) {\\n            if (!markets[address(orders[i].vTokenBorrowed)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenBorrowed));\\n            }\\n            if (!markets[address(orders[i].vTokenCollateral)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenCollateral));\\n            }\\n\\n            LiquidationOrder calldata order = orders[i];\\n            order.vTokenBorrowed.forceLiquidateBorrow(\\n                msg.sender,\\n                borrower,\\n                order.repayAmount,\\n                order.vTokenCollateral,\\n                true\\n            );\\n        }\\n\\n        VToken[] memory borrowMarkets = getAssetsIn(borrower);\\n        uint256 marketsCount = borrowMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            (, uint256 borrowBalance, ) = _safeGetAccountSnapshot(borrowMarkets[i], borrower);\\n            require(borrowBalance == 0, \\\"Nonzero borrow balance after liquidation\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets the closeFactor to use when liquidating borrows\\n     * @param newCloseFactorMantissa New close factor, scaled by 1e18\\n     * @custom:event Emits NewCloseFactor on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCloseFactor(uint256 newCloseFactorMantissa) external {\\n        _checkAccessAllowed(\\\"setCloseFactor(uint256)\\\");\\n        require(MAX_CLOSE_FACTOR_MANTISSA >= newCloseFactorMantissa, \\\"Close factor greater than maximum close factor\\\");\\n        require(MIN_CLOSE_FACTOR_MANTISSA <= newCloseFactorMantissa, \\\"Close factor smaller than minimum close factor\\\");\\n\\n        uint256 oldCloseFactorMantissa = closeFactorMantissa;\\n        closeFactorMantissa = newCloseFactorMantissa;\\n        emit NewCloseFactor(oldCloseFactorMantissa, newCloseFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Sets the collateralFactor for a market\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param vToken The market to set the factor on\\n     * @param newCollateralFactorMantissa The new collateral factor, scaled by 1e18\\n     * @param newLiquidationThresholdMantissa The new liquidation threshold, scaled by 1e18\\n     * @custom:event Emits NewCollateralFactor when collateral factor is updated\\n     *    and NewLiquidationThreshold when liquidation threshold is updated\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InvalidCollateralFactor error is thrown when collateral factor is too high\\n     * @custom:error InvalidLiquidationThreshold error is thrown when liquidation threshold is lower than collateral factor\\n     * @custom:error PriceError is thrown when the oracle returns an invalid price for the asset\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCollateralFactor(\\n        VToken vToken,\\n        uint256 newCollateralFactorMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    ) external {\\n        _checkAccessAllowed(\\\"setCollateralFactor(address,uint256,uint256)\\\");\\n\\n        // Verify market is listed\\n        Market storage market = markets[address(vToken)];\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Check collateral factor <= 0.9\\n        if (newCollateralFactorMantissa > MAX_COLLATERAL_FACTOR_MANTISSA) {\\n            revert InvalidCollateralFactor();\\n        }\\n\\n        // Ensure that liquidation threshold <= 1\\n        if (newLiquidationThresholdMantissa > MANTISSA_ONE) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // Ensure that liquidation threshold >= CF\\n        if (newLiquidationThresholdMantissa < newCollateralFactorMantissa) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // If collateral factor != 0, fail if price == 0\\n        if (newCollateralFactorMantissa != 0 && oracle.getUnderlyingPrice(address(vToken)) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 oldCollateralFactorMantissa = market.collateralFactorMantissa;\\n        if (newCollateralFactorMantissa != oldCollateralFactorMantissa) {\\n            market.collateralFactorMantissa = newCollateralFactorMantissa;\\n            emit NewCollateralFactor(vToken, oldCollateralFactorMantissa, newCollateralFactorMantissa);\\n        }\\n\\n        uint256 oldLiquidationThresholdMantissa = market.liquidationThresholdMantissa;\\n        if (newLiquidationThresholdMantissa != oldLiquidationThresholdMantissa) {\\n            market.liquidationThresholdMantissa = newLiquidationThresholdMantissa;\\n            emit NewLiquidationThreshold(vToken, oldLiquidationThresholdMantissa, newLiquidationThresholdMantissa);\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets liquidationIncentive\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newLiquidationIncentiveMantissa New liquidationIncentive scaled by 1e18\\n     * @custom:event Emits NewLiquidationIncentive on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setLiquidationIncentive(uint256 newLiquidationIncentiveMantissa) external {\\n        require(newLiquidationIncentiveMantissa >= MANTISSA_ONE, \\\"liquidation incentive should be greater than 1e18\\\");\\n\\n        _checkAccessAllowed(\\\"setLiquidationIncentive(uint256)\\\");\\n\\n        // Save current value for use in log\\n        uint256 oldLiquidationIncentiveMantissa = liquidationIncentiveMantissa;\\n\\n        // Set liquidation incentive to new incentive\\n        liquidationIncentiveMantissa = newLiquidationIncentiveMantissa;\\n\\n        // Emit event with old incentive, new incentive\\n        emit NewLiquidationIncentive(oldLiquidationIncentiveMantissa, newLiquidationIncentiveMantissa);\\n    }\\n\\n    /**\\n     * @notice Add the market to the markets mapping and set it as listed\\n     * @dev Only callable by the PoolRegistry\\n     * @param vToken The address of the market (token) to list\\n     * @custom:error MarketAlreadyListed is thrown if the market is already listed in this pool\\n     * @custom:access Only PoolRegistry\\n     */\\n    function supportMarket(VToken vToken) external {\\n        _checkSenderIs(poolRegistry);\\n\\n        if (markets[address(vToken)].isListed) {\\n            revert MarketAlreadyListed(address(vToken));\\n        }\\n\\n        require(vToken.isVToken(), \\\"Comptroller: Invalid vToken\\\"); // Sanity check to make sure its really a VToken\\n\\n        Market storage newMarket = markets[address(vToken)];\\n        newMarket.isListed = true;\\n        newMarket.collateralFactorMantissa = 0;\\n        newMarket.liquidationThresholdMantissa = 0;\\n\\n        _addMarket(address(vToken));\\n\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            rewardsDistributors[i].initializeMarket(address(vToken));\\n        }\\n\\n        emit MarketSupported(vToken);\\n    }\\n\\n    /**\\n     * @notice Set the given borrow caps for the given vToken markets. Borrowing that brings total borrows to or above borrow cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A borrow cap of type(uint256).max corresponds to unlimited borrowing.\\n     * @dev Borrow caps smaller than the current total borrows are accepted. This way, new borrows will not be allowed\\n            until the total borrows amount goes below the new borrow cap\\n     * @param vTokens The addresses of the markets (tokens) to change the borrow caps for\\n     * @param newBorrowCaps The new borrow cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited borrowing.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketBorrowCaps(VToken[] calldata vTokens, uint256[] calldata newBorrowCaps) external {\\n        _checkAccessAllowed(\\\"setMarketBorrowCaps(address[],uint256[])\\\");\\n\\n        uint256 numMarkets = vTokens.length;\\n        uint256 numBorrowCaps = newBorrowCaps.length;\\n\\n        require(numMarkets != 0 && numMarkets == numBorrowCaps, \\\"invalid input\\\");\\n\\n        _ensureMaxLoops(numMarkets);\\n\\n        for (uint256 i; i < numMarkets; ++i) {\\n            borrowCaps[address(vTokens[i])] = newBorrowCaps[i];\\n            emit NewBorrowCap(vTokens[i], newBorrowCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given supply caps for the given vToken markets. Supply that brings total Supply to or above supply cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A supply cap of type(uint256).max corresponds to unlimited supply.\\n     * @dev Supply caps smaller than the current total supplies are accepted. This way, new supplies will not be allowed\\n            until the total supplies amount goes below the new supply cap\\n     * @param vTokens The addresses of the markets (tokens) to change the supply caps for\\n     * @param newSupplyCaps The new supply cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited supply.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketSupplyCaps(VToken[] calldata vTokens, uint256[] calldata newSupplyCaps) external {\\n        _checkAccessAllowed(\\\"setMarketSupplyCaps(address[],uint256[])\\\");\\n        uint256 vTokensCount = vTokens.length;\\n\\n        require(vTokensCount != 0, \\\"invalid number of markets\\\");\\n        require(vTokensCount == newSupplyCaps.length, \\\"invalid number of markets\\\");\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            supplyCaps[address(vTokens[i])] = newSupplyCaps[i];\\n            emit NewSupplyCap(vTokens[i], newSupplyCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Pause/unpause specified actions\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param marketsList Markets to pause/unpause the actions on\\n     * @param actionsList List of action ids to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setActionsPaused(VToken[] calldata marketsList, Action[] calldata actionsList, bool paused) external {\\n        _checkAccessAllowed(\\\"setActionsPaused(address[],uint256[],bool)\\\");\\n\\n        uint256 marketsCount = marketsList.length;\\n        uint256 actionsCount = actionsList.length;\\n\\n        _ensureMaxLoops(marketsCount * actionsCount);\\n\\n        for (uint256 marketIdx; marketIdx < marketsCount; ++marketIdx) {\\n            for (uint256 actionIdx; actionIdx < actionsCount; ++actionIdx) {\\n                _setActionPaused(address(marketsList[marketIdx]), actionsList[actionIdx], paused);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given collateral threshold for non-batch liquidations. Regular liquidations\\n     *   will fail if the collateral amount is less than this threshold. Liquidators should use batch\\n     *   operations like liquidateAccount or healAccount.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newMinLiquidatableCollateral The new min liquidatable collateral (in USD).\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMinLiquidatableCollateral(uint256 newMinLiquidatableCollateral) external {\\n        _checkAccessAllowed(\\\"setMinLiquidatableCollateral(uint256)\\\");\\n\\n        uint256 oldMinLiquidatableCollateral = minLiquidatableCollateral;\\n        minLiquidatableCollateral = newMinLiquidatableCollateral;\\n        emit NewMinLiquidatableCollateral(oldMinLiquidatableCollateral, newMinLiquidatableCollateral);\\n    }\\n\\n    /**\\n     * @notice Add a new RewardsDistributor and initialize it with all markets. We can add several RewardsDistributor\\n     * contracts with the same rewardToken, and there could be overlaping among them considering the last reward slot (block or second)\\n     * @dev Only callable by the admin\\n     * @param _rewardsDistributor Address of the RewardDistributor contract to add\\n     * @custom:access Only Governance\\n     * @custom:event Emits NewRewardsDistributor with distributor address\\n     */\\n    function addRewardsDistributor(RewardsDistributor _rewardsDistributor) external onlyOwner {\\n        require(!rewardsDistributorExists[address(_rewardsDistributor)], \\\"already exists\\\");\\n\\n        uint256 rewardsDistributorsLen = rewardsDistributors.length;\\n        _ensureMaxLoops(rewardsDistributorsLen + 1);\\n\\n        rewardsDistributors.push(_rewardsDistributor);\\n        rewardsDistributorExists[address(_rewardsDistributor)] = true;\\n\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            _rewardsDistributor.initializeMarket(address(allMarkets[i]));\\n        }\\n\\n        emit NewRewardsDistributor(address(_rewardsDistributor), address(_rewardsDistributor.rewardToken()));\\n    }\\n\\n    /**\\n     * @notice Sets a new price oracle for the Comptroller\\n     * @dev Only callable by the admin\\n     * @param newOracle Address of the new price oracle to set\\n     * @custom:event Emits NewPriceOracle on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when the new oracle address is zero\\n     */\\n    function setPriceOracle(ResilientOracleInterface newOracle) external onlyOwner {\\n        ensureNonzeroAddress(address(newOracle));\\n\\n        ResilientOracleInterface oldOracle = oracle;\\n        oracle = newOracle;\\n        emit NewPriceOracle(oldOracle, newOracle);\\n    }\\n\\n    /**\\n     * @notice Set the for loop iteration limit to avoid DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Sets the prime token contract for the comptroller\\n     * @param _prime Address of the Prime contract\\n     */\\n    function setPrimeToken(IPrime _prime) external onlyOwner {\\n        ensureNonzeroAddress(address(_prime));\\n\\n        emit NewPrimeToken(prime, _prime);\\n        prime = _prime;\\n    }\\n\\n    /**\\n     * @notice Enables forced liquidations for a market. If forced liquidation is enabled,\\n     * borrows in the market may be liquidated regardless of the account liquidity\\n     * @param vTokenBorrowed Borrowed vToken\\n     * @param enable Whether to enable forced liquidations\\n     */\\n    function setForcedLiquidation(address vTokenBorrowed, bool enable) external {\\n        _checkAccessAllowed(\\\"setForcedLiquidation(address,bool)\\\");\\n        ensureNonzeroAddress(vTokenBorrowed);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(vTokenBorrowed);\\n        }\\n\\n        isForcedLiquidationEnabled[vTokenBorrowed] = enable;\\n        emit IsForcedLiquidationEnabledUpdated(vTokenBorrowed, enable);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to liquidation threshold requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of liquidation threshold requirements,\\n     * @return shortfall Account shortfall below liquidation threshold requirements\\n     */\\n    function getAccountLiquidity(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getLiquidationThreshold);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to collateral requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of collateral requirements,\\n     * @return shortfall Account shortfall below collateral requirements\\n     */\\n    function getBorrowingPower(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getCollateralFactor);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine what the account liquidity would be if the given amounts were redeemed/borrowed\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Hypothetical account liquidity in excess of collateral requirements,\\n     * @return shortfall Hypothetical account shortfall below collateral requirements\\n     */\\n    function getHypotheticalAccountLiquidity(\\n        address account,\\n        address vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            account,\\n            VToken(vTokenModify),\\n            redeemTokens,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Return all of the markets\\n     * @dev The automatic getter may be used to access an individual market.\\n     * @return markets The list of market addresses\\n     */\\n    function getAllMarkets() external view override returns (VToken[] memory) {\\n        return allMarkets;\\n    }\\n\\n    /**\\n     * @notice Check if a market is marked as listed (active)\\n     * @param vToken vToken Address for the market to check\\n     * @return listed True if listed otherwise false\\n     */\\n    function isMarketListed(VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].isListed;\\n    }\\n\\n    /*** Assets You Are In ***/\\n\\n    /**\\n     * @notice Returns whether the given account is entered in a given market\\n     * @param account The address of the account to check\\n     * @param vToken The vToken to check\\n     * @return True if the account is in the market specified, otherwise false.\\n     */\\n    function checkMembership(address account, VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].accountMembership[account];\\n    }\\n\\n    /**\\n     * @notice Calculate number of tokens of collateral asset to seize given an underlying amount\\n     * @dev Used in liquidation (called in vToken.liquidateBorrowFresh)\\n     * @param vTokenBorrowed The address of the borrowed vToken\\n     * @param vTokenCollateral The address of the collateral vToken\\n     * @param actualRepayAmount The amount of vTokenBorrowed underlying to convert into vTokenCollateral tokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return tokensToSeize Number of vTokenCollateral tokens to be seized in a liquidation\\n     * @custom:error PriceError if the oracle returns an invalid price\\n     */\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 actualRepayAmount\\n    ) external view override returns (uint256 error, uint256 tokensToSeize) {\\n        /* Read oracle prices for borrowed and collateral markets */\\n        uint256 priceBorrowedMantissa = _safeGetUnderlyingPrice(VToken(vTokenBorrowed));\\n        uint256 priceCollateralMantissa = _safeGetUnderlyingPrice(VToken(vTokenCollateral));\\n\\n        /*\\n         * Get the exchange rate and calculate the number of collateral tokens to seize:\\n         *  seizeAmount = actualRepayAmount * liquidationIncentive * priceBorrowed / priceCollateral\\n         *  seizeTokens = seizeAmount / exchangeRate\\n         *   = actualRepayAmount * (liquidationIncentive * priceBorrowed) / (priceCollateral * exchangeRate)\\n         */\\n        uint256 exchangeRateMantissa = VToken(vTokenCollateral).exchangeRateStored(); // Note: reverts on error\\n        uint256 seizeTokens;\\n        Exp memory numerator;\\n        Exp memory denominator;\\n        Exp memory ratio;\\n\\n        numerator = mul_(Exp({ mantissa: liquidationIncentiveMantissa }), Exp({ mantissa: priceBorrowedMantissa }));\\n        denominator = mul_(Exp({ mantissa: priceCollateralMantissa }), Exp({ mantissa: exchangeRateMantissa }));\\n        ratio = div_(numerator, denominator);\\n\\n        seizeTokens = mul_ScalarTruncate(ratio, actualRepayAmount);\\n\\n        return (NO_ERROR, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Returns reward speed given a vToken\\n     * @param vToken The vToken to get the reward speeds for\\n     * @return rewardSpeeds Array of total supply and borrow speeds and reward token for all reward distributors\\n     */\\n    function getRewardsByMarket(address vToken) external view returns (RewardSpeeds[] memory rewardSpeeds) {\\n        uint256 rewardsDistributorsLength = rewardsDistributors.length;\\n        rewardSpeeds = new RewardSpeeds[](rewardsDistributorsLength);\\n        for (uint256 i; i < rewardsDistributorsLength; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            address rewardToken = address(rewardsDistributor.rewardToken());\\n            rewardSpeeds[i] = RewardSpeeds({\\n                rewardToken: rewardToken,\\n                supplySpeed: rewardsDistributor.rewardTokenSupplySpeeds(vToken),\\n                borrowSpeed: rewardsDistributor.rewardTokenBorrowSpeeds(vToken)\\n            });\\n        }\\n        return rewardSpeeds;\\n    }\\n\\n    /**\\n     * @notice Return all reward distributors for this pool\\n     * @return Array of RewardDistributor addresses\\n     */\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory) {\\n        return rewardsDistributors;\\n    }\\n\\n    /**\\n     * @notice A marker method that returns true for a valid Comptroller contract\\n     * @return Always true\\n     */\\n    function isComptroller() external pure override returns (bool) {\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Update the prices of all the tokens associated with the provided account\\n     * @param account Address of the account to get associated tokens with\\n     */\\n    function updatePrices(address account) public {\\n        VToken[] memory vTokens = getAssetsIn(account);\\n        uint256 vTokensCount = vTokens.length;\\n\\n        ResilientOracleInterface oracle_ = oracle;\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            oracle_.updatePrice(address(vTokens[i]));\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if a certain action is paused on a market\\n     * @param market vToken address\\n     * @param action Action to check\\n     * @return paused True if the action is paused otherwise false\\n     */\\n    function actionPaused(address market, Action action) public view returns (bool) {\\n        return _actionPaused[market][action];\\n    }\\n\\n    /**\\n     * @notice Returns the assets an account has entered\\n     * @param account The address of the account to pull assets for\\n     * @return A list with the assets the account has entered\\n     */\\n    function getAssetsIn(address account) public view returns (VToken[] memory) {\\n        uint256 len;\\n        VToken[] memory _accountAssets = accountAssets[account];\\n        uint256 _accountAssetsLength = _accountAssets.length;\\n\\n        VToken[] memory assetsIn = new VToken[](_accountAssetsLength);\\n\\n        for (uint256 i; i < _accountAssetsLength; ++i) {\\n            Market storage market = markets[address(_accountAssets[i])];\\n            if (market.isListed) {\\n                assetsIn[len] = _accountAssets[i];\\n                ++len;\\n            }\\n        }\\n\\n        assembly {\\n            mstore(assetsIn, len)\\n        }\\n\\n        return assetsIn;\\n    }\\n\\n    /**\\n     * @notice Add the market to the borrower's \\\"assets in\\\" for liquidity calculations\\n     * @param vToken The market to enter\\n     * @param borrower The address of the account to modify\\n     */\\n    function _addToMarket(VToken vToken, address borrower) internal {\\n        _checkActionPauseState(address(vToken), Action.ENTER_MARKET);\\n        Market storage marketToJoin = markets[address(vToken)];\\n\\n        if (!marketToJoin.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (marketToJoin.accountMembership[borrower]) {\\n            // already joined\\n            return;\\n        }\\n\\n        // survived the gauntlet, add to list\\n        // NOTE: we store these somewhat redundantly as a significant optimization\\n        //  this avoids having to iterate through the list for the most common use cases\\n        //  that is, only when we need to perform liquidity checks\\n        //  and not whenever we want to check if an account is in a particular market\\n        marketToJoin.accountMembership[borrower] = true;\\n        accountAssets[borrower].push(vToken);\\n\\n        emit MarketEntered(vToken, borrower);\\n    }\\n\\n    /**\\n     * @notice Internal function to validate that a market hasn't already been added\\n     * and if it hasn't adds it\\n     * @param vToken The market to support\\n     */\\n    function _addMarket(address vToken) internal {\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            if (allMarkets[i] == VToken(vToken)) {\\n                revert MarketAlreadyListed(vToken);\\n            }\\n        }\\n        allMarkets.push(VToken(vToken));\\n        marketsCount = allMarkets.length;\\n        _ensureMaxLoops(marketsCount);\\n    }\\n\\n    /**\\n     * @dev Pause/unpause an action on a market\\n     * @param market Market to pause/unpause the action on\\n     * @param action Action id to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     */\\n    function _setActionPaused(address market, Action action, bool paused) internal {\\n        require(markets[market].isListed, \\\"cannot pause a market that is not listed\\\");\\n        _actionPaused[market][action] = paused;\\n        emit ActionPausedMarket(VToken(market), action, paused);\\n    }\\n\\n    /**\\n     * @dev Internal function to check that vTokens can be safely redeemed for the underlying asset.\\n     * @param vToken Address of the vTokens to redeem\\n     * @param redeemer Account redeeming the tokens\\n     * @param redeemTokens The number of tokens to redeem\\n     */\\n    function _checkRedeemAllowed(address vToken, address redeemer, uint256 redeemTokens) internal {\\n        Market storage market = markets[vToken];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        /* If the redeemer is not 'in' the market, then we can bypass the liquidity check */\\n        if (!market.accountMembership[redeemer]) {\\n            return;\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(redeemer);\\n\\n        /* Otherwise, perform a hypothetical liquidity check to guard against shortfall */\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            redeemer,\\n            VToken(vToken),\\n            redeemTokens,\\n            0,\\n            _getCollateralFactor\\n        );\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n    }\\n\\n    /**\\n     * @notice Get the total collateral, weighted collateral, borrow balance, liquidity, shortfall\\n     * @param account The account to get the snapshot for\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n     *  liquidation threshold. Accepts the address of the vToken and returns the weight as Exp.\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getCurrentLiquiditySnapshot(\\n        address account,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        return _getHypotheticalLiquiditySnapshot(account, VToken(address(0)), 0, 0, weight);\\n    }\\n\\n    /**\\n     * @notice Determine what the supply/borrow balances would be if the given amounts were redeemed/borrowed\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n         liquidation threshold. Accepts the address of the VToken and returns the weight\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getHypotheticalLiquiditySnapshot(\\n        address account,\\n        VToken vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        // For each asset the account is in\\n        VToken[] memory assets = getAssetsIn(account);\\n        uint256 assetsCount = assets.length;\\n\\n        for (uint256 i; i < assetsCount; ++i) {\\n            VToken asset = assets[i];\\n\\n            // Read the balances and exchange rate from the vToken\\n            (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) = _safeGetAccountSnapshot(\\n                asset,\\n                account\\n            );\\n\\n            // Get the normalized price of the asset\\n            Exp memory oraclePrice = Exp({ mantissa: _safeGetUnderlyingPrice(asset) });\\n\\n            // Pre-compute conversion factors from vTokens -> usd\\n            Exp memory vTokenPrice = mul_(Exp({ mantissa: exchangeRateMantissa }), oraclePrice);\\n            Exp memory weightedVTokenPrice = mul_(weight(asset), vTokenPrice);\\n\\n            // weightedCollateral += weightedVTokenPrice * vTokenBalance\\n            snapshot.weightedCollateral = mul_ScalarTruncateAddUInt(\\n                weightedVTokenPrice,\\n                vTokenBalance,\\n                snapshot.weightedCollateral\\n            );\\n\\n            // totalCollateral += vTokenPrice * vTokenBalance\\n            snapshot.totalCollateral = mul_ScalarTruncateAddUInt(vTokenPrice, vTokenBalance, snapshot.totalCollateral);\\n\\n            // borrows += oraclePrice * borrowBalance\\n            snapshot.borrows = mul_ScalarTruncateAddUInt(oraclePrice, borrowBalance, snapshot.borrows);\\n\\n            // Calculate effects of interacting with vTokenModify\\n            if (asset == vTokenModify) {\\n                // redeem effect\\n                // effects += tokensToDenom * redeemTokens\\n                snapshot.effects = mul_ScalarTruncateAddUInt(weightedVTokenPrice, redeemTokens, snapshot.effects);\\n\\n                // borrow effect\\n                // effects += oraclePrice * borrowAmount\\n                snapshot.effects = mul_ScalarTruncateAddUInt(oraclePrice, borrowAmount, snapshot.effects);\\n            }\\n        }\\n\\n        uint256 borrowPlusEffects = snapshot.borrows + snapshot.effects;\\n        // These are safe, as the underflow condition is checked first\\n        unchecked {\\n            if (snapshot.weightedCollateral > borrowPlusEffects) {\\n                snapshot.liquidity = snapshot.weightedCollateral - borrowPlusEffects;\\n                snapshot.shortfall = 0;\\n            } else {\\n                snapshot.liquidity = 0;\\n                snapshot.shortfall = borrowPlusEffects - snapshot.weightedCollateral;\\n            }\\n        }\\n\\n        return snapshot;\\n    }\\n\\n    /**\\n     * @dev Retrieves price from oracle for an asset and checks it is nonzero\\n     * @param asset Address for asset to query price\\n     * @return Underlying price\\n     */\\n    function _safeGetUnderlyingPrice(VToken asset) internal view returns (uint256) {\\n        uint256 oraclePriceMantissa = oracle.getUnderlyingPrice(address(asset));\\n        if (oraclePriceMantissa == 0) {\\n            revert PriceError(address(asset));\\n        }\\n        return oraclePriceMantissa;\\n    }\\n\\n    /**\\n     * @dev Return collateral factor for a market\\n     * @param asset Address for asset\\n     * @return Collateral factor as exponential\\n     */\\n    function _getCollateralFactor(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].collateralFactorMantissa });\\n    }\\n\\n    /**\\n     * @dev Retrieves liquidation threshold for a market as an exponential\\n     * @param asset Address for asset to liquidation threshold\\n     * @return Liquidation threshold as exponential\\n     */\\n    function _getLiquidationThreshold(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].liquidationThresholdMantissa });\\n    }\\n\\n    /**\\n     * @dev Returns supply and borrow balances of user in vToken, reverts on failure\\n     * @param vToken Market to query\\n     * @param user Account address\\n     * @return vTokenBalance Balance of vTokens, the same as vToken.balanceOf(user)\\n     * @return borrowBalance Borrowed amount, including the interest\\n     * @return exchangeRateMantissa Stored exchange rate\\n     */\\n    function _safeGetAccountSnapshot(\\n        VToken vToken,\\n        address user\\n    ) internal view returns (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) {\\n        uint256 err;\\n        (err, vTokenBalance, borrowBalance, exchangeRateMantissa) = vToken.getAccountSnapshot(user);\\n        if (err != 0) {\\n            revert SnapshotError(address(vToken), user);\\n        }\\n        return (vTokenBalance, borrowBalance, exchangeRateMantissa);\\n    }\\n\\n    /// @notice Reverts if the call is not from expectedSender\\n    /// @param expectedSender Expected transaction sender\\n    function _checkSenderIs(address expectedSender) internal view {\\n        if (msg.sender != expectedSender) {\\n            revert UnexpectedSender(expectedSender, msg.sender);\\n        }\\n    }\\n\\n    /// @notice Reverts if a certain action is paused on a market\\n    /// @param market Market to check\\n    /// @param action Action to check\\n    function _checkActionPauseState(address market, Action action) private view {\\n        if (actionPaused(market, action)) {\\n            revert ActionPaused(market, action);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x7c6e1c6264e4681f82a9ac1bcd9155197a930033291ee5561ad97a56006f5e9c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\n\\nenum Action {\\n    MINT,\\n    REDEEM,\\n    BORROW,\\n    REPAY,\\n    SEIZE,\\n    LIQUIDATE,\\n    TRANSFER,\\n    ENTER_MARKET,\\n    EXIT_MARKET\\n}\\n\\n/**\\n * @title ComptrollerInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract.\\n */\\ninterface ComptrollerInterface {\\n    /*** Assets You Are In ***/\\n\\n    function enterMarkets(address[] calldata vTokens) external returns (uint256[] memory);\\n\\n    function exitMarket(address vToken) external returns (uint256);\\n\\n    /*** Policy Hooks ***/\\n\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external;\\n\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external;\\n\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external;\\n\\n    function preRepayHook(address vToken, address borrower) external;\\n\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external;\\n\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower\\n    ) external;\\n\\n    function borrowVerify(address vToken, address borrower, uint borrowAmount) external;\\n\\n    function mintVerify(address vToken, address minter, uint mintAmount, uint mintTokens) external;\\n\\n    function redeemVerify(address vToken, address redeemer, uint redeemAmount, uint redeemTokens) external;\\n\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer,\\n        address borrower,\\n        uint repayAmount,\\n        uint borrowerIndex\\n    ) external;\\n\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address liquidator,\\n        address borrower,\\n        uint repayAmount,\\n        uint seizeTokens\\n    ) external;\\n\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower,\\n        uint seizeTokens\\n    ) external;\\n\\n    function transferVerify(address vToken, address src, address dst, uint transferTokens) external;\\n\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external;\\n\\n    function isComptroller() external view returns (bool);\\n\\n    /*** Liquidity/Liquidation Calculations ***/\\n\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 repayAmount\\n    ) external view returns (uint256, uint256);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function actionPaused(address market, Action action) external view returns (bool);\\n}\\n\\n/**\\n * @title ComptrollerViewInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract, including only some util view functions.\\n */\\ninterface ComptrollerViewInterface {\\n    function markets(address) external view returns (bool, uint256);\\n\\n    function oracle() external view returns (ResilientOracleInterface);\\n\\n    function getAssetsIn(address) external view returns (VToken[] memory);\\n\\n    function closeFactorMantissa() external view returns (uint256);\\n\\n    function liquidationIncentiveMantissa() external view returns (uint256);\\n\\n    function minLiquidatableCollateral() external view returns (uint256);\\n\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function borrowCaps(address) external view returns (uint256);\\n\\n    function supplyCaps(address) external view returns (uint256);\\n\\n    function approvedDelegates(address user, address delegate) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xcbf7f9977472650c61345b7cbde23e81f626e1f8863bab4c6ce3dacfc7604919\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\nimport { Action } from \\\"./ComptrollerInterface.sol\\\";\\n\\n/**\\n * @title ComptrollerStorage\\n * @author Venus\\n * @notice Storage layout for the `Comptroller` contract.\\n */\\ncontract ComptrollerStorage {\\n    struct LiquidationOrder {\\n        VToken vTokenCollateral;\\n        VToken vTokenBorrowed;\\n        uint256 repayAmount;\\n    }\\n\\n    struct AccountLiquiditySnapshot {\\n        uint256 totalCollateral;\\n        uint256 weightedCollateral;\\n        uint256 borrows;\\n        uint256 effects;\\n        uint256 liquidity;\\n        uint256 shortfall;\\n    }\\n\\n    struct RewardSpeeds {\\n        address rewardToken;\\n        uint256 supplySpeed;\\n        uint256 borrowSpeed;\\n    }\\n\\n    struct Market {\\n        // Whether or not this market is listed\\n        bool isListed;\\n        //  Multiplier representing the most one can borrow against their collateral in this market.\\n        //  For instance, 0.9 to allow borrowing 90% of collateral value.\\n        //  Must be between 0 and 1, and stored as a mantissa.\\n        uint256 collateralFactorMantissa;\\n        //  Multiplier representing the collateralization after which the borrow is eligible\\n        //  for liquidation. For instance, 0.8 liquidate when the borrow is 80% of collateral\\n        //  value. Must be between 0 and collateral factor, stored as a mantissa.\\n        uint256 liquidationThresholdMantissa;\\n        // Per-market mapping of \\\"accounts in this asset\\\"\\n        mapping(address => bool) accountMembership;\\n    }\\n\\n    /**\\n     * @notice Oracle which gives the price of any given asset\\n     */\\n    ResilientOracleInterface public oracle;\\n\\n    /**\\n     * @notice Multiplier used to calculate the maximum repayAmount when liquidating a borrow\\n     */\\n    uint256 public closeFactorMantissa;\\n\\n    /**\\n     * @notice Multiplier representing the discount on collateral that a liquidator receives\\n     */\\n    uint256 public liquidationIncentiveMantissa;\\n\\n    /**\\n     * @notice Per-account mapping of \\\"assets you are in\\\"\\n     */\\n    mapping(address => VToken[]) public accountAssets;\\n\\n    /**\\n     * @notice Official mapping of vTokens -> Market metadata\\n     * @dev Used e.g. to determine if a market is supported\\n     */\\n    mapping(address => Market) public markets;\\n\\n    /// @notice A list of all markets\\n    VToken[] public allMarkets;\\n\\n    /// @notice Borrow caps enforced by borrowAllowed for each vToken address. Defaults to zero which restricts borrowing.\\n    mapping(address => uint256) public borrowCaps;\\n\\n    /// @notice Minimal collateral required for regular (non-batch) liquidations\\n    uint256 public minLiquidatableCollateral;\\n\\n    /// @notice Supply caps enforced by mintAllowed for each vToken address. Defaults to zero which corresponds to minting not allowed\\n    mapping(address => uint256) public supplyCaps;\\n\\n    /// @notice True if a certain action is paused on a certain market\\n    mapping(address => mapping(Action => bool)) internal _actionPaused;\\n\\n    // List of Reward Distributors added\\n    RewardsDistributor[] internal rewardsDistributors;\\n\\n    // Used to check if rewards distributor is added\\n    mapping(address => bool) internal rewardsDistributorExists;\\n\\n    /// @notice Flag indicating whether forced liquidation enabled for a market\\n    mapping(address => bool) public isForcedLiquidationEnabled;\\n\\n    uint256 internal constant NO_ERROR = 0;\\n\\n    // closeFactorMantissa must be strictly greater than this value\\n    uint256 internal constant MIN_CLOSE_FACTOR_MANTISSA = 0.05e18; // 0.05\\n\\n    // closeFactorMantissa must not exceed this value\\n    uint256 internal constant MAX_CLOSE_FACTOR_MANTISSA = 0.9e18; // 0.9\\n\\n    // No collateralFactorMantissa may exceed this value\\n    uint256 internal constant MAX_COLLATERAL_FACTOR_MANTISSA = 0.95e18; // 0.95\\n\\n    /// Prime token address\\n    IPrime public prime;\\n\\n    /// @notice Whether the delegate is allowed to borrow or redeem on behalf of the user\\n    //mapping(address user => mapping (address delegate => bool approved)) public approvedDelegates;\\n    mapping(address => mapping(address => bool)) public approvedDelegates;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4df44cb65ac152bac2be4b4545430e703005a74a55b72e144100b16421bd8bfd\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title TokenErrorReporter\\n * @author Venus\\n * @notice Errors that can be thrown by the `VToken` contract.\\n */\\ncontract TokenErrorReporter {\\n    uint256 public constant NO_ERROR = 0; // support legacy return codes\\n\\n    error TransferNotAllowed();\\n\\n    error MintFreshnessCheck();\\n\\n    error RedeemFreshnessCheck();\\n    error RedeemTransferOutNotPossible();\\n\\n    error BorrowFreshnessCheck();\\n    error BorrowCashNotAvailable();\\n    error DelegateNotApproved();\\n\\n    error RepayBorrowFreshnessCheck();\\n\\n    error HealBorrowUnauthorized();\\n    error ForceLiquidateBorrowUnauthorized();\\n\\n    error LiquidateFreshnessCheck();\\n    error LiquidateCollateralFreshnessCheck();\\n    error LiquidateAccrueCollateralInterestFailed(uint256 errorCode);\\n    error LiquidateLiquidatorIsBorrower();\\n    error LiquidateCloseAmountIsZero();\\n    error LiquidateCloseAmountIsUintMax();\\n\\n    error LiquidateSeizeLiquidatorIsBorrower();\\n\\n    error ProtocolSeizeShareTooBig();\\n\\n    error SetReserveFactorFreshCheck();\\n    error SetReserveFactorBoundsCheck();\\n\\n    error AddReservesFactorFreshCheck(uint256 actualAddAmount);\\n\\n    error ReduceReservesFreshCheck();\\n    error ReduceReservesCashNotAvailable();\\n    error ReduceReservesCashValidation();\\n\\n    error SetInterestRateModelFreshCheck();\\n}\\n\",\"keccak256\":\"0x7a7ced1caaac2d9242659ebd50b99f308c725ce958ac9e11f7ada404b1d97a7b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { EXP_SCALE as EXP_SCALE_, MANTISSA_ONE as MANTISSA_ONE_ } from \\\"./lib/constants.sol\\\";\\n\\n/**\\n * @title Exponential module for storing fixed-precision decimals\\n * @author Compound\\n * @notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.\\n *         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:\\n *         `Exp({mantissa: 5100000000000000000})`.\\n */\\ncontract ExponentialNoError {\\n    struct Exp {\\n        uint256 mantissa;\\n    }\\n\\n    struct Double {\\n        uint256 mantissa;\\n    }\\n\\n    uint256 internal constant EXP_SCALE = EXP_SCALE_;\\n    uint256 internal constant DOUBLE_SCALE = 1e36;\\n    uint256 internal constant HALF_EXP_SCALE = EXP_SCALE / 2;\\n    uint256 internal constant MANTISSA_ONE = MANTISSA_ONE_;\\n\\n    /**\\n     * @dev Truncates the given exp to a whole number value.\\n     *      For example, truncate(Exp{mantissa: 15 * EXP_SCALE}) = 15\\n     */\\n    function truncate(Exp memory exp) internal pure returns (uint256) {\\n        // Note: We are not using careful math here as we're performing a division that cannot fail\\n        return exp.mantissa / EXP_SCALE;\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, then truncate to return an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncate(Exp memory a, uint256 scalar) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return truncate(product);\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncateAddUInt(Exp memory a, uint256 scalar, uint256 addend) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return add_(truncate(product), addend);\\n    }\\n\\n    /**\\n     * @dev Checks if first Exp is less than second Exp.\\n     */\\n    function lessThanExp(Exp memory left, Exp memory right) internal pure returns (bool) {\\n        return left.mantissa < right.mantissa;\\n    }\\n\\n    function safe224(uint256 n, string memory errorMessage) internal pure returns (uint224) {\\n        require(n <= type(uint224).max, errorMessage);\\n        return uint224(n);\\n    }\\n\\n    function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) {\\n        require(n <= type(uint32).max, errorMessage);\\n        return uint32(n);\\n    }\\n\\n    function add_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a + b;\\n    }\\n\\n    function sub_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a - b;\\n    }\\n\\n    function mul_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b.mantissa) / EXP_SCALE });\\n    }\\n\\n    function mul_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / EXP_SCALE;\\n    }\\n\\n    function mul_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b.mantissa) / DOUBLE_SCALE });\\n    }\\n\\n    function mul_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / DOUBLE_SCALE;\\n    }\\n\\n    function mul_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a * b;\\n    }\\n\\n    function div_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(mul_(a.mantissa, EXP_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, EXP_SCALE), b.mantissa);\\n    }\\n\\n    function div_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a.mantissa, DOUBLE_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, DOUBLE_SCALE), b.mantissa);\\n    }\\n\\n    function div_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a / b;\\n    }\\n\\n    function fraction(uint256 a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a, DOUBLE_SCALE), b) });\\n    }\\n}\\n\",\"keccak256\":\"0x8afbe8a24fe3539c124e718681ed3dcebd24c40dd53095786c0155998213b9b0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title Compound's InterestRateModel Interface\\n * @author Compound\\n */\\nabstract contract InterestRateModel {\\n    /**\\n     * @notice Calculates the current borrow interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getBorrowRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Calculates the current supply interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param reserveFactorMantissa The current reserve factor the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getSupplyRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 reserveFactorMantissa,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is an InterestRateModel contract (for inspection)\\n     * @return Always true\\n     */\\n    function isInterestRateModel() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0xc4fda1ab75ebe4b187b707c4f10c58780f343cf343c537f641dc75d3cd28ab51\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title MaxLoopsLimitHelper\\n * @author Venus\\n * @notice Abstract contract used to avoid collection with too many items that would generate gas errors and DoS.\\n */\\nabstract contract MaxLoopsLimitHelper {\\n    // Limit for the loops to avoid the DOS\\n    uint256 public maxLoopsLimit;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when max loops limit is set\\n    event MaxLoopsLimitUpdated(uint256 oldMaxLoopsLimit, uint256 newmaxLoopsLimit);\\n\\n    /// @notice Thrown an error on maxLoopsLimit exceeds for any loop\\n    error MaxLoopsLimitExceeded(uint256 loopsLimit, uint256 requiredLoops);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function _setMaxLoopsLimit(uint256 limit) internal {\\n        require(limit > maxLoopsLimit, \\\"Comptroller: Invalid maxLoopsLimit\\\");\\n\\n        uint256 oldMaxLoopsLimit = maxLoopsLimit;\\n        maxLoopsLimit = limit;\\n\\n        emit MaxLoopsLimitUpdated(oldMaxLoopsLimit, limit);\\n    }\\n\\n    /**\\n     * @notice Compare the maxLoopsLimit with number of the times loop iterate\\n     * @param len Length of the loops iterate\\n     * @custom:error MaxLoopsLimitExceeded error is thrown when loops length exceeds maxLoopsLimit\\n     */\\n    function _ensureMaxLoops(uint256 len) internal view {\\n        if (len > maxLoopsLimit) {\\n            revert MaxLoopsLimitExceeded(maxLoopsLimit, len);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x4c25e30635485d162177effa384eee51768b0141a567a0da16ff6ad673274166\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\n\\nimport { ExponentialNoError } from \\\"../ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"../VToken.sol\\\";\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"../MaxLoopsLimitHelper.sol\\\";\\nimport { RewardsDistributorStorage } from \\\"./RewardsDistributorStorage.sol\\\";\\n\\n/**\\n * @title `RewardsDistributor`\\n * @author Venus\\n * @notice Contract used to configure, track and distribute rewards to users based on their actions (borrows and supplies) in the protocol.\\n * Users can receive additional rewards through a `RewardsDistributor`. Each `RewardsDistributor` proxy is initialized with a specific reward\\n * token and `Comptroller`, which can then distribute the reward token to users that supply or borrow in the associated pool.\\n * Authorized users can set the reward token borrow and supply speeds for each market in the pool. This sets a fixed amount of reward\\n * token to be released each slot (block or second) for borrowers and suppliers, which is distributed based on a user\\u2019s percentage of the borrows or supplies\\n * respectively. The owner can also set up reward distributions to contributor addresses (distinct from suppliers and borrowers) by setting\\n * their contributor reward token speed, which similarly allocates a fixed amount of reward token per slot (block or second).\\n *\\n * The owner has the ability to transfer any amount of reward tokens held by the contract to any other address. Rewards are not distributed\\n * automatically and must be claimed by a user calling `claimRewardToken()`. Users should be aware that it is up to the owner and other centralized\\n * entities to ensure that the `RewardsDistributor` holds enough tokens to distribute the accumulated rewards of users and contributors.\\n */\\ncontract RewardsDistributor is\\n    ExponentialNoError,\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    MaxLoopsLimitHelper,\\n    RewardsDistributorStorage,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    /// @notice The initial REWARD TOKEN index for a market\\n    uint224 public constant INITIAL_INDEX = 1e36;\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a supplier\\n    event DistributedSupplierRewardToken(\\n        VToken indexed vToken,\\n        address indexed supplier,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenSupplyIndex\\n    );\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a borrower\\n    event DistributedBorrowerRewardToken(\\n        VToken indexed vToken,\\n        address indexed borrower,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenBorrowIndex\\n    );\\n\\n    /// @notice Emitted when a new supply-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenSupplySpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when a new borrow-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenBorrowSpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when REWARD TOKEN is granted by admin\\n    event RewardTokenGranted(address indexed recipient, uint256 amount);\\n\\n    /// @notice Emitted when a new REWARD TOKEN speed is set for a contributor\\n    event ContributorRewardTokenSpeedUpdated(address indexed contributor, uint256 newSpeed);\\n\\n    /// @notice Emitted when a market is initialized\\n    event MarketInitialized(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token supply index is updated\\n    event RewardTokenSupplyIndexUpdated(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token borrow index is updated\\n    event RewardTokenBorrowIndexUpdated(address indexed vToken, Exp marketBorrowIndex);\\n\\n    /// @notice Emitted when a reward for contributor is updated\\n    event ContributorRewardsUpdated(address indexed contributor, uint256 rewardAccrued);\\n\\n    /// @notice Emitted when a reward token last rewarding block for supply is updated\\n    event SupplyLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding block for borrow is updated\\n    event BorrowLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for supply is updated\\n    event SupplyLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for borrow is updated\\n    event BorrowLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    modifier onlyComptroller() {\\n        require(address(comptroller) == msg.sender, \\\"Only comptroller can call this function\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice RewardsDistributor initializer\\n     * @dev Initializes the deployer to owner\\n     * @param comptroller_ Comptroller to attach the reward distributor to\\n     * @param rewardToken_ Reward token to distribute\\n     * @param loopsLimit_ Maximum number of iterations for the loops in this contract\\n     * @param accessControlManager_ AccessControlManager contract address\\n     */\\n    function initialize(\\n        Comptroller comptroller_,\\n        IERC20Upgradeable rewardToken_,\\n        uint256 loopsLimit_,\\n        address accessControlManager_\\n    ) external initializer {\\n        comptroller = comptroller_;\\n        rewardToken = rewardToken_;\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n\\n        _setMaxLoopsLimit(loopsLimit_);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken\\n     * @param vToken The address of the vToken to be initialized\\n     * @custom:event MarketInitialized emits on success\\n     * @custom:access Only Comptroller\\n     */\\n    function initializeMarket(address vToken) external onlyComptroller {\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        isTimeBased\\n            ? _initializeMarketTimestampBased(vToken, blockNumberOrTimestamp)\\n            : _initializeMarketBlockBased(vToken, safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\"));\\n\\n        emit MarketInitialized(vToken);\\n    }\\n\\n    /*** Reward Token Distribution ***/\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them\\n     *         Borrowers will begin to accrue after the first interaction with the protocol.\\n     * @dev This function should only be called when the user has a borrow position in the market\\n     *      (e.g. Comptroller.preBorrowHook, and Comptroller.preRepayHook)\\n     *      We avoid an external call to check if they are in the market to save gas because this function is called in many places\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function distributeBorrowerRewardToken(\\n        address vToken,\\n        address borrower,\\n        Exp memory marketBorrowIndex\\n    ) external onlyComptroller {\\n        _distributeBorrowerRewardToken(vToken, borrower, marketBorrowIndex);\\n    }\\n\\n    function updateRewardTokenSupplyIndex(address vToken) external onlyComptroller {\\n        _updateRewardTokenSupplyIndex(vToken);\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the recipient\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all\\n     * @param recipient The address of the recipient to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     */\\n    function grantRewardToken(address recipient, uint256 amount) external onlyOwner {\\n        uint256 amountLeft = _grantRewardToken(recipient, amount);\\n        require(amountLeft == 0, \\\"insufficient rewardToken for grant\\\");\\n        emit RewardTokenGranted(recipient, amount);\\n    }\\n\\n    function updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) external onlyComptroller {\\n        _updateRewardTokenBorrowIndex(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN borrow and supply speeds for the specified markets\\n     * @param vTokens The markets whose REWARD TOKEN speed to update\\n     * @param supplySpeeds New supply-side REWARD TOKEN speed for the corresponding market\\n     * @param borrowSpeeds New borrow-side REWARD TOKEN speed for the corresponding market\\n     */\\n    function setRewardTokenSpeeds(\\n        VToken[] memory vTokens,\\n        uint256[] memory supplySpeeds,\\n        uint256[] memory borrowSpeeds\\n    ) external {\\n        _checkAccessAllowed(\\\"setRewardTokenSpeeds(address[],uint256[],uint256[])\\\");\\n        uint256 numTokens = vTokens.length;\\n        require(numTokens == supplySpeeds.length && numTokens == borrowSpeeds.length, \\\"invalid setRewardTokenSpeeds\\\");\\n\\n        for (uint256 i; i < numTokens; ++i) {\\n            _setRewardTokenSpeed(vTokens[i], supplySpeeds[i], borrowSpeeds[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for the specified markets, used when contract is block based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlocks New supply-side REWARD TOKEN last rewarding block for the corresponding market\\n     * @param borrowLastRewardingBlocks New borrow-side REWARD TOKEN last rewarding block for the corresponding market\\n     */\\n    function setLastRewardingBlocks(\\n        VToken[] calldata vTokens,\\n        uint32[] calldata supplyLastRewardingBlocks,\\n        uint32[] calldata borrowLastRewardingBlocks\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlocks(address[],uint32[],uint32[])\\\");\\n        require(!isTimeBased, \\\"Block-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlocks.length && numTokens == borrowLastRewardingBlocks.length,\\n            \\\"RewardsDistributor::setLastRewardingBlocks invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlock(vTokens[i], supplyLastRewardingBlocks[i], borrowLastRewardingBlocks[i]);\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block timestamp for the specified markets, used when contract is time based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlockTimestamps New supply-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     * @param borrowLastRewardingBlockTimestamps New borrow-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     */\\n    function setLastRewardingBlockTimestamps(\\n        VToken[] calldata vTokens,\\n        uint256[] calldata supplyLastRewardingBlockTimestamps,\\n        uint256[] calldata borrowLastRewardingBlockTimestamps\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])\\\");\\n        require(isTimeBased, \\\"Time-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlockTimestamps.length &&\\n                numTokens == borrowLastRewardingBlockTimestamps.length,\\n            \\\"RewardsDistributor::setLastRewardingBlockTimestamps invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlockTimestamp(\\n                vTokens[i],\\n                supplyLastRewardingBlockTimestamps[i],\\n                borrowLastRewardingBlockTimestamps[i]\\n            );\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single contributor\\n     * @param contributor The contributor whose REWARD TOKEN speed to update\\n     * @param rewardTokenSpeed New REWARD TOKEN speed for contributor\\n     */\\n    function setContributorRewardTokenSpeed(address contributor, uint256 rewardTokenSpeed) external onlyOwner {\\n        // note that REWARD TOKEN speed could be set to 0 to halt liquidity rewards for a contributor\\n        updateContributorRewards(contributor);\\n        if (rewardTokenSpeed == 0) {\\n            // release storage\\n            delete lastContributorBlock[contributor];\\n        } else {\\n            lastContributorBlock[contributor] = getBlockNumberOrTimestamp();\\n        }\\n        rewardTokenContributorSpeeds[contributor] = rewardTokenSpeed;\\n\\n        emit ContributorRewardTokenSpeedUpdated(contributor, rewardTokenSpeed);\\n    }\\n\\n    function distributeSupplierRewardToken(address vToken, address supplier) external onlyComptroller {\\n        _distributeSupplierRewardToken(vToken, supplier);\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in all markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     */\\n    function claimRewardToken(address holder) external {\\n        return claimRewardToken(holder, comptroller.getAllMarkets());\\n    }\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Calculate additional accrued REWARD TOKEN for a contributor since last accrual\\n     * @param contributor The address to calculate contributor rewards for\\n     */\\n    function updateContributorRewards(address contributor) public {\\n        uint256 rewardTokenSpeed = rewardTokenContributorSpeeds[contributor];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n        uint256 deltaBlocksOrTimestamp = sub_(blockNumberOrTimestamp, lastContributorBlock[contributor]);\\n        if (deltaBlocksOrTimestamp > 0 && rewardTokenSpeed > 0) {\\n            uint256 newAccrued = mul_(deltaBlocksOrTimestamp, rewardTokenSpeed);\\n            uint256 contributorAccrued = add_(rewardTokenAccrued[contributor], newAccrued);\\n\\n            rewardTokenAccrued[contributor] = contributorAccrued;\\n            lastContributorBlock[contributor] = blockNumberOrTimestamp;\\n\\n            emit ContributorRewardsUpdated(contributor, rewardTokenAccrued[contributor]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in the specified markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     * @param vTokens The list of markets to claim REWARD TOKEN in\\n     */\\n    function claimRewardToken(address holder, VToken[] memory vTokens) public {\\n        uint256 vTokensCount = vTokens.length;\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            VToken vToken = vTokens[i];\\n            require(comptroller.isMarketListed(vToken), \\\"market must be listed\\\");\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n            _distributeBorrowerRewardToken(address(vToken), holder, borrowIndex);\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n            _distributeSupplierRewardToken(address(vToken), holder);\\n        }\\n        rewardTokenAccrued[holder] = _grantRewardToken(holder, rewardTokenAccrued[holder]);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for a single market.\\n     * @param vToken market's whose reward token last rewarding block to be updated\\n     * @param supplyLastRewardingBlock New supply-side REWARD TOKEN last rewarding block for market\\n     * @param borrowLastRewardingBlock New borrow-side REWARD TOKEN last rewarding block for market\\n     */\\n    function _setLastRewardingBlock(\\n        VToken vToken,\\n        uint32 supplyLastRewardingBlock,\\n        uint32 borrowLastRewardingBlock\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockNumber = getBlockNumberOrTimestamp();\\n\\n        require(supplyLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n        require(borrowLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n\\n        uint32 currentSupplyLastRewardingBlock = rewardTokenSupplyState[address(vToken)].lastRewardingBlock;\\n        uint32 currentBorrowLastRewardingBlock = rewardTokenBorrowState[address(vToken)].lastRewardingBlock;\\n\\n        require(\\n            currentSupplyLastRewardingBlock == 0 || currentSupplyLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlock == 0 || currentBorrowLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlock != supplyLastRewardingBlock) {\\n            rewardTokenSupplyState[address(vToken)].lastRewardingBlock = supplyLastRewardingBlock;\\n            emit SupplyLastRewardingBlockUpdated(address(vToken), supplyLastRewardingBlock);\\n        }\\n\\n        if (currentBorrowLastRewardingBlock != borrowLastRewardingBlock) {\\n            rewardTokenBorrowState[address(vToken)].lastRewardingBlock = borrowLastRewardingBlock;\\n            emit BorrowLastRewardingBlockUpdated(address(vToken), borrowLastRewardingBlock);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding timestamp for a single market.\\n     * @param vToken market's whose reward token last rewarding timestamp to be updated\\n     * @param supplyLastRewardingBlockTimestamp New supply-side REWARD TOKEN last rewarding timestamp for market\\n     * @param borrowLastRewardingBlockTimestamp New borrow-side REWARD TOKEN last rewarding timestamp for market\\n     */\\n    function _setLastRewardingBlockTimestamp(\\n        VToken vToken,\\n        uint256 supplyLastRewardingBlockTimestamp,\\n        uint256 borrowLastRewardingBlockTimestamp\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockTimestamp = getBlockNumberOrTimestamp();\\n\\n        require(\\n            supplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n        require(\\n            borrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n\\n        uint256 currentSupplyLastRewardingBlockTimestamp = rewardTokenSupplyStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n        uint256 currentBorrowLastRewardingBlockTimestamp = rewardTokenBorrowStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n\\n        require(\\n            currentSupplyLastRewardingBlockTimestamp == 0 || currentSupplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlockTimestamp == 0 || currentBorrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlockTimestamp != supplyLastRewardingBlockTimestamp) {\\n            rewardTokenSupplyStateTimeBased[address(vToken)].lastRewardingTimestamp = supplyLastRewardingBlockTimestamp;\\n            emit SupplyLastRewardingBlockTimestampUpdated(address(vToken), supplyLastRewardingBlockTimestamp);\\n        }\\n\\n        if (currentBorrowLastRewardingBlockTimestamp != borrowLastRewardingBlockTimestamp) {\\n            rewardTokenBorrowStateTimeBased[address(vToken)].lastRewardingTimestamp = borrowLastRewardingBlockTimestamp;\\n            emit BorrowLastRewardingBlockTimestampUpdated(address(vToken), borrowLastRewardingBlockTimestamp);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single market.\\n     * @param vToken market's whose reward token rate to be updated\\n     * @param supplySpeed New supply-side REWARD TOKEN speed for market\\n     * @param borrowSpeed New borrow-side REWARD TOKEN speed for market\\n     */\\n    function _setRewardTokenSpeed(VToken vToken, uint256 supplySpeed, uint256 borrowSpeed) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        if (rewardTokenSupplySpeeds[address(vToken)] != supplySpeed) {\\n            // Supply speed updated so let's update supply state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n\\n            // Update speed and emit event\\n            rewardTokenSupplySpeeds[address(vToken)] = supplySpeed;\\n            emit RewardTokenSupplySpeedUpdated(vToken, supplySpeed);\\n        }\\n\\n        if (rewardTokenBorrowSpeeds[address(vToken)] != borrowSpeed) {\\n            // Borrow speed updated so let's update borrow state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n\\n            // Update speed and emit event\\n            rewardTokenBorrowSpeeds[address(vToken)] = borrowSpeed;\\n            emit RewardTokenBorrowSpeedUpdated(vToken, borrowSpeed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculate REWARD TOKEN accrued by a supplier and possibly transfer it to them.\\n     * @param vToken The market in which the supplier is interacting\\n     * @param supplier The address of the supplier to distribute REWARD TOKEN to\\n     */\\n    function _distributeSupplierRewardToken(address vToken, address supplier) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n        uint256 supplierIndex = rewardTokenSupplierIndex[vToken][supplier];\\n\\n        // Update supplier's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenSupplierIndex[vToken][supplier] = supplyIndex;\\n\\n        if (supplierIndex == 0 && supplyIndex >= INITIAL_INDEX) {\\n            // Covers the case where users supplied tokens before the market's supply state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when supplier rewards were first\\n            // set for the market.\\n            supplierIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per vToken accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(supplyIndex, supplierIndex) });\\n\\n        uint256 supplierTokens = VToken(vToken).balanceOf(supplier);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerVToken\\n        uint256 supplierDelta = mul_(supplierTokens, deltaIndex);\\n\\n        uint256 supplierAccrued = add_(rewardTokenAccrued[supplier], supplierDelta);\\n        rewardTokenAccrued[supplier] = supplierAccrued;\\n\\n        emit DistributedSupplierRewardToken(VToken(vToken), supplier, supplierDelta, supplierAccrued, supplyIndex);\\n    }\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them.\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function _distributeBorrowerRewardToken(address vToken, address borrower, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n        uint256 borrowerIndex = rewardTokenBorrowerIndex[vToken][borrower];\\n\\n        // Update borrowers's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenBorrowerIndex[vToken][borrower] = borrowIndex;\\n\\n        if (borrowerIndex == 0 && borrowIndex >= INITIAL_INDEX) {\\n            // Covers the case where users borrowed tokens before the market's borrow state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when borrower rewards were first\\n            // set for the market.\\n            borrowerIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per borrowed unit accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(borrowIndex, borrowerIndex) });\\n\\n        uint256 borrowerAmount = div_(VToken(vToken).borrowBalanceStored(borrower), marketBorrowIndex);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerBorrowedUnit\\n        if (borrowerAmount != 0) {\\n            uint256 borrowerDelta = mul_(borrowerAmount, deltaIndex);\\n\\n            uint256 borrowerAccrued = add_(rewardTokenAccrued[borrower], borrowerDelta);\\n            rewardTokenAccrued[borrower] = borrowerAccrued;\\n\\n            emit DistributedBorrowerRewardToken(VToken(vToken), borrower, borrowerDelta, borrowerAccrued, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the user.\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all.\\n     * @param user The address of the user to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     * @return The amount of REWARD TOKEN which was NOT transferred to the user\\n     */\\n    function _grantRewardToken(address user, uint256 amount) internal returns (uint256) {\\n        uint256 rewardTokenRemaining = rewardToken.balanceOf(address(this));\\n        if (amount > 0 && amount <= rewardTokenRemaining) {\\n            rewardToken.safeTransfer(user, amount);\\n            return 0;\\n        }\\n        return amount;\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the supply index\\n     * @param vToken The market whose supply index to update\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenSupplyIndex(address vToken) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplySpeed = rewardTokenSupplySpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? supplyStateTimeBased.lastRewardingTimestamp\\n            : uint256(supplyState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? supplyStateTimeBased.timestamp : uint256(supplyState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && supplySpeed > 0) {\\n            uint256 supplyTokens = VToken(vToken).totalSupply();\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, supplySpeed);\\n            Double memory ratio = supplyTokens > 0\\n                ? fraction(accruedSinceUpdate, supplyTokens)\\n                : Double({ mantissa: 0 });\\n            uint224 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: supplyIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                supplyStateTimeBased.index = index;\\n                supplyStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                supplyState.index = index;\\n                supplyState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            isTimeBased ? supplyStateTimeBased.timestamp = blockNumberOrTimestamp : supplyState.block = uint32(\\n                blockNumberOrTimestamp\\n            );\\n        }\\n\\n        emit RewardTokenSupplyIndexUpdated(vToken);\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the borrow index\\n     * @param vToken The market whose borrow index to update\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowSpeed = rewardTokenBorrowSpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? borrowStateTimeBased.lastRewardingTimestamp\\n            : uint256(borrowState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? borrowStateTimeBased.timestamp : uint256(borrowState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && borrowSpeed > 0) {\\n            uint256 borrowAmount = div_(VToken(vToken).totalBorrows(), marketBorrowIndex);\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, borrowSpeed);\\n            Double memory ratio = borrowAmount > 0\\n                ? fraction(accruedSinceUpdate, borrowAmount)\\n                : Double({ mantissa: 0 });\\n            uint224 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: borrowIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                borrowStateTimeBased.index = index;\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.index = index;\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            if (isTimeBased) {\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        }\\n\\n        emit RewardTokenBorrowIndexUpdated(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is block-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockNumber current block number\\n     */\\n    function _initializeMarketBlockBased(address vToken, uint32 blockNumber) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block numbers\\n         */\\n        supplyState.block = borrowState.block = blockNumber;\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is time-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockTimestamp current block timestamp\\n     */\\n    function _initializeMarketTimestampBased(address vToken, uint256 blockTimestamp) internal {\\n        TimeBasedRewardToken storage supplyState = rewardTokenSupplyStateTimeBased[vToken];\\n        TimeBasedRewardToken storage borrowState = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block timestamp\\n         */\\n        supplyState.timestamp = borrowState.timestamp = blockTimestamp;\\n    }\\n}\\n\",\"keccak256\":\"0x3cc824e59c923cfe25c4f1a875959b7e9410cde8e73cd405de13f301298c697f\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\n\\n/**\\n * @title RewardsDistributorStorage\\n * @author Venus\\n * @dev Storage for RewardsDistributor\\n */\\ncontract RewardsDistributorStorage {\\n    struct RewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block number the index was last updated at\\n        uint32 block;\\n        // The block number at which to stop rewards\\n        uint32 lastRewardingBlock;\\n    }\\n\\n    struct TimeBasedRewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block timestamp the index was last updated at\\n        uint256 timestamp;\\n        // The block timestamp at which to stop rewards\\n        uint256 lastRewardingTimestamp;\\n    }\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => RewardToken) public rewardTokenSupplyState;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each supplier as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenSupplierIndex;\\n\\n    /// @notice The REWARD TOKEN accrued but not yet transferred to each user\\n    mapping(address => uint256) public rewardTokenAccrued;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding borrow market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenBorrowSpeeds;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding supply market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenSupplySpeeds;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => RewardToken) public rewardTokenBorrowState;\\n\\n    /// @notice The portion of REWARD TOKEN that each contributor receives per slot (block or second)\\n    mapping(address => uint256) public rewardTokenContributorSpeeds;\\n\\n    /// @notice Last slot (block or second) at which a contributor's REWARD TOKEN rewards have been allocated\\n    mapping(address => uint256) public lastContributorBlock;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each borrower as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenBorrowerIndex;\\n\\n    Comptroller internal comptroller;\\n\\n    IERC20Upgradeable public rewardToken;\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenSupplyStateTimeBased;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenBorrowStateTimeBased;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[37] private __gap;\\n}\\n\",\"keccak256\":\"0x70e5015a78a2acf95277949c8b4796e10b9ac194130be006d5e5217e158070c0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VToken.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IProtocolShareReserve } from \\\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\\\";\\n\\nimport { VTokenInterface } from \\\"./VTokenInterfaces.sol\\\";\\nimport { ComptrollerInterface, ComptrollerViewInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { TokenErrorReporter } from \\\"./ErrorReporter.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title VToken\\n * @author Venus\\n * @notice Each asset that is supported by a pool is integrated through an instance of the `VToken` contract. As outlined in the protocol overview,\\n * each isolated pool creates its own `vToken` corresponding to an asset. Within a given pool, each included `vToken` is referred to as a market of\\n * the pool. The main actions a user regularly interacts with in a market are:\\n\\n- mint/redeem of vTokens;\\n- transfer of vTokens;\\n- borrow/repay a loan on an underlying asset;\\n- liquidate a borrow or liquidate/heal an account.\\n\\n * A user supplies the underlying asset to a pool by minting `vTokens`, where the corresponding `vToken` amount is determined by the `exchangeRate`.\\n * The `exchangeRate` will change over time, dependent on a number of factors, some of which accrue interest. Additionally, once users have minted\\n * `vToken` in a pool, they can borrow any asset in the isolated pool by using their `vToken` as collateral. In order to borrow an asset or use a `vToken`\\n * as collateral, the user must be entered into each corresponding market (else, the `vToken` will not be considered collateral for a borrow). Note that\\n * a user may borrow up to a portion of their collateral determined by the market\\u2019s collateral factor. However, if their borrowed amount exceeds an amount\\n * calculated using the market\\u2019s corresponding liquidation threshold, the borrow is eligible for liquidation. When a user repays a borrow, they must also\\n * pay off interest accrued on the borrow.\\n * \\n * The Venus protocol includes unique mechanisms for healing an account and liquidating an account. These actions are performed in the `Comptroller`\\n * and consider all borrows and collateral for which a given account is entered within a market. These functions may only be called on an account with a\\n * total collateral amount that is no larger than a universal `minLiquidatableCollateral` value, which is used for all markets within a `Comptroller`.\\n * Both functions settle all of an account\\u2019s borrows, but `healAccount()` may add `badDebt` to a vToken. For more detail, see the description of\\n * `healAccount()` and `liquidateAccount()` in the `Comptroller` summary section below.\\n */\\ncontract VToken is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    VTokenInterface,\\n    ExponentialNoError,\\n    TokenErrorReporter,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    uint256 internal constant DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA = 5e16; // 5%\\n\\n    // Maximum fraction of interest that can be set aside for reserves\\n    uint256 internal constant MAX_RESERVE_FACTOR_MANTISSA = 1e18;\\n\\n    // Maximum borrow rate that can ever be applied per slot(block or second)\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 internal immutable MAX_BORROW_RATE_MANTISSA;\\n\\n    /**\\n     * Reentrancy Guard **\\n     */\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     */\\n    modifier nonReentrant() {\\n        require(_notEntered, \\\"re-entered\\\");\\n        _notEntered = false;\\n        _;\\n        _notEntered = true; // get a gas-refund post-Istanbul\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @param maxBorrowRateMantissa_ The maximum value of borrowing rate mantissa\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(\\n        bool timeBased_,\\n        uint256 blocksPerYear_,\\n        uint256 maxBorrowRateMantissa_\\n    ) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        require(maxBorrowRateMantissa_ <= 1e18, \\\"Max borrow rate must be <= 1e18\\\");\\n\\n        MAX_BORROW_RATE_MANTISSA = maxBorrowRateMantissa_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice Construct a new money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     * @custom:error ZeroAddressNotAllowed is thrown when admin address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     */\\n    function initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) external initializer {\\n        ensureNonzeroAddress(admin_);\\n\\n        // Initialize the market\\n        _initialize(\\n            underlying_,\\n            comptroller_,\\n            interestRateModel_,\\n            initialExchangeRateMantissa_,\\n            name_,\\n            symbol_,\\n            decimals_,\\n            admin_,\\n            accessControlManager_,\\n            riskManagement,\\n            reserveFactorMantissa_\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `msg.sender` to `dst`\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transfer(address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `src` to `dst`\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transferFrom(address src, address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, src, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Approve `spender` to transfer up to `amount` from `src`\\n     * @dev This will overwrite the approval amount for `spender`\\n     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\\n     * @param spender The address of the account which may transfer tokens\\n     * @param amount The number of tokens that are approved (uint256.max means infinite)\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function approve(address spender, uint256 amount) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        transferAllowances[src][spender] = amount;\\n        emit Approval(src, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Increase approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param addedValue The number of additional tokens spender can transfer\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 newAllowance = transferAllowances[src][spender];\\n        newAllowance += addedValue;\\n        transferAllowances[src][spender] = newAllowance;\\n\\n        emit Approval(src, spender, newAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Decreases approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param subtractedValue The number of tokens to remove from total approval\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 currentAllowance = transferAllowances[src][spender];\\n        require(currentAllowance >= subtractedValue, \\\"decreased allowance below zero\\\");\\n        unchecked {\\n            currentAllowance -= subtractedValue;\\n        }\\n\\n        transferAllowances[src][spender] = currentAllowance;\\n\\n        emit Approval(src, spender, currentAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Get the underlying balance of the `owner`\\n     * @dev This also accrues interest in a transaction\\n     * @param owner The address of the account to query\\n     * @return amount The amount of underlying owned by `owner`\\n     */\\n    function balanceOfUnderlying(address owner) external override returns (uint256) {\\n        Exp memory exchangeRate = Exp({ mantissa: exchangeRateCurrent() });\\n        return mul_ScalarTruncate(exchangeRate, accountTokens[owner]);\\n    }\\n\\n    /**\\n     * @notice Returns the current total borrows plus accrued interest\\n     * @return totalBorrows The total borrows with interest\\n     */\\n    function totalBorrowsCurrent() external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return totalBorrows;\\n    }\\n\\n    /**\\n     * @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\\n     * @param account The address whose balance should be calculated after updating borrowIndex\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceCurrent(address account) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Sender supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function mint(uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, msg.sender, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender calls on-behalf of minter. minter supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param minter User whom the supply will be attributed to\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when minter address is zero\\n     */\\n    function mintBehalf(address minter, uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(minter);\\n\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, minter, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for the underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function redeem(uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer The user on behalf of whom to redeem\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for a specified amount of underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     */\\n    function redeemUnderlying(uint256 redeemAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems underlying assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer, on behalf of whom to redeem\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemUnderlyingBehalf(\\n        address redeemer,\\n        uint256 redeemAmount\\n    ) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets from the protocol to their own address\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function borrow(uint256 borrowAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _borrowFresh(msg.sender, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the borrower using `comptroller.updateDelegate`\\n     * @param borrower The borrower, on behalf of whom to borrow\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error DelegateNotApproved is thrown if caller is not approved delegate\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function borrowBehalf(address borrower, uint256 borrowAmount) external override returns (uint256) {\\n        _ensureSenderIsDelegateOf(borrower);\\n        accrueInterest();\\n\\n        _borrowFresh(borrower, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays their own borrow\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrow(uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, msg.sender, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays a borrow belonging to borrower\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, borrower, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Not restricted\\n     */\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external override returns (uint256) {\\n        _liquidateBorrow(msg.sender, borrower, repayAmount, vTokenCollateral, false);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice sets protocol share accumulated from liquidations\\n     * @dev must be equal or less than liquidation incentive - 1\\n     * @param newProtocolSeizeShareMantissa_ new protocol share mantissa\\n     * @custom:event Emits NewProtocolSeizeShare event on success\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error ProtocolSeizeShareTooBig is thrown when the new seize share is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setProtocolSeizeShare(uint256 newProtocolSeizeShareMantissa_) external {\\n        _checkAccessAllowed(\\\"setProtocolSeizeShare(uint256)\\\");\\n        uint256 liquidationIncentive = ComptrollerViewInterface(address(comptroller)).liquidationIncentiveMantissa();\\n        if (newProtocolSeizeShareMantissa_ + MANTISSA_ONE > liquidationIncentive) {\\n            revert ProtocolSeizeShareTooBig();\\n        }\\n\\n        uint256 oldProtocolSeizeShareMantissa = protocolSeizeShareMantissa;\\n        protocolSeizeShareMantissa = newProtocolSeizeShareMantissa_;\\n        emit NewProtocolSeizeShare(oldProtocolSeizeShareMantissa, newProtocolSeizeShareMantissa_);\\n    }\\n\\n    /**\\n     * @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\\n     * @dev Admin function to accrue interest and set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     * @custom:event Emits NewReserveFactor event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error SetReserveFactorBoundsCheck is thrown when the new reserve factor is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external override nonReentrant {\\n        _checkAccessAllowed(\\\"setReserveFactor(uint256)\\\");\\n\\n        accrueInterest();\\n        _setReserveFactorFresh(newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Accrues interest and reduces reserves by transferring to the protocol reserve contract\\n     * @dev Gracefully return if reserves already reduced in accrueInterest\\n     * @param reduceAmount Amount of reduction to reserves\\n     * @custom:event Emits ReservesReduced event; may emit AccrueInterest\\n     * @custom:error ReduceReservesCashNotAvailable is thrown when the vToken does not have sufficient cash\\n     * @custom:error ReduceReservesCashValidation is thrown when trying to withdraw more cash than the reserves have\\n     * @custom:access Not restricted\\n     */\\n    function reduceReserves(uint256 reduceAmount) external override nonReentrant {\\n        accrueInterest();\\n        if (reduceReservesBlockNumber == getBlockNumberOrTimestamp()) return;\\n        _reduceReservesFresh(reduceAmount);\\n    }\\n\\n    /**\\n     * @notice The sender adds to reserves.\\n     * @param addAmount The amount of underlying token to add as reserves\\n     * @custom:event Emits ReservesAdded event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function addReserves(uint256 addAmount) external override nonReentrant {\\n        accrueInterest();\\n        _addReservesFresh(addAmount);\\n    }\\n\\n    /**\\n     * @notice accrues interest and updates the interest rate model using _setInterestRateModelFresh\\n     * @dev Admin function to accrue interest and update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     * @custom:event Emits NewMarketInterestRateModel event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external override {\\n        _checkAccessAllowed(\\\"setInterestRateModel(address)\\\");\\n\\n        accrueInterest();\\n        _setInterestRateModelFresh(newInterestRateModel);\\n    }\\n\\n    /**\\n     * @notice Repays a certain amount of debt, treats the rest of the borrow as bad debt, essentially\\n     *   \\\"forgiving\\\" the borrower. Healing is a situation that should rarely happen. However, some pools\\n     *   may list risky assets or be configured improperly \\u2013 we want to still handle such cases gracefully.\\n     *   We assume that Comptroller does the seizing, so this function is only available to Comptroller.\\n     * @dev This function does not call any Comptroller hooks (like \\\"healAllowed\\\"), because we assume\\n     *   the Comptroller does all the necessary checks before calling this function.\\n     * @param payer account who repays the debt\\n     * @param borrower account to heal\\n     * @param repayAmount amount to repay\\n     * @custom:event Emits RepayBorrow, BadDebtIncreased events; may emit AccrueInterest\\n     * @custom:error HealBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:access Only Comptroller\\n     */\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external override nonReentrant {\\n        if (repayAmount != 0) {\\n            comptroller.preRepayHook(address(this), borrower);\\n        }\\n\\n        if (msg.sender != address(comptroller)) {\\n            revert HealBorrowUnauthorized();\\n        }\\n\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 totalBorrowsNew = totalBorrows;\\n\\n        uint256 actualRepayAmount;\\n        if (repayAmount != 0) {\\n            // _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n            // We violate checks-effects-interactions here to account for tokens that take transfer fees\\n            actualRepayAmount = _doTransferIn(payer, repayAmount);\\n            totalBorrowsNew = totalBorrowsNew - actualRepayAmount;\\n            emit RepayBorrow(\\n                payer,\\n                borrower,\\n                actualRepayAmount,\\n                accountBorrowsPrev - actualRepayAmount,\\n                totalBorrowsNew\\n            );\\n        }\\n\\n        // The transaction will fail if trying to repay too much\\n        uint256 badDebtDelta = accountBorrowsPrev - actualRepayAmount;\\n        if (badDebtDelta != 0) {\\n            uint256 badDebtOld = badDebt;\\n            uint256 badDebtNew = badDebtOld + badDebtDelta;\\n            totalBorrowsNew = totalBorrowsNew - badDebtDelta;\\n            badDebt = badDebtNew;\\n\\n            // We treat healing as \\\"repayment\\\", where vToken is the payer\\n            emit RepayBorrow(address(this), borrower, badDebtDelta, 0, totalBorrowsNew);\\n            emit BadDebtIncreased(borrower, badDebtDelta, badDebtOld, badDebtNew);\\n        }\\n\\n        accountBorrows[borrower].principal = 0;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        emit HealBorrow(payer, borrower, repayAmount);\\n    }\\n\\n    /**\\n     * @notice The extended version of liquidations, callable only by Comptroller. May skip\\n     *  the close factor check. The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error ForceLiquidateBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Only Comptroller\\n     */\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        if (msg.sender != address(comptroller)) {\\n            revert ForceLiquidateBorrowUnauthorized();\\n        }\\n        _liquidateBorrow(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Will fail unless called by another vToken during the process of liquidation.\\n     *  It's absolutely critical to use msg.sender as the borrowed vToken and not a parameter.\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     * @custom:event Emits Transfer, ReservesAdded events\\n     * @custom:error LiquidateSeizeLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:access Not restricted\\n     */\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external override nonReentrant {\\n        _seize(msg.sender, liquidator, borrower, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Updates bad debt\\n     * @dev Called only when bad debt is recovered from auction\\n     * @param recoveredAmount_ The amount of bad debt recovered\\n     * @custom:event Emits BadDebtRecovered event\\n     * @custom:access Only Shortfall contract\\n     */\\n    function badDebtRecovered(uint256 recoveredAmount_) external {\\n        require(msg.sender == shortfall, \\\"only shortfall contract can update bad debt\\\");\\n        require(recoveredAmount_ <= badDebt, \\\"more than bad debt recovered from auction\\\");\\n\\n        uint256 badDebtOld = badDebt;\\n        uint256 badDebtNew = badDebtOld - recoveredAmount_;\\n        badDebt = badDebtNew;\\n\\n        emit BadDebtRecovered(badDebtOld, badDebtNew);\\n    }\\n\\n    /**\\n     * @notice Sets protocol share reserve contract address\\n     * @param protocolShareReserve_ The address of the protocol share reserve contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setProtocolShareReserve(address payable protocolShareReserve_) external onlyOwner {\\n        _setProtocolShareReserve(protocolShareReserve_);\\n    }\\n\\n    /**\\n     * @notice Sets shortfall contract address\\n     * @param shortfall_ The address of the shortfall contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setShortfallContract(address shortfall_) external onlyOwner {\\n        _setShortfallContract(shortfall_);\\n    }\\n\\n    /**\\n     * @notice A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)\\n     * @param token The address of the ERC-20 token to sweep\\n     * @custom:access Only Governance\\n     */\\n    function sweepToken(IERC20Upgradeable token) external override {\\n        require(msg.sender == owner(), \\\"VToken::sweepToken: only admin can sweep tokens\\\");\\n        require(address(token) != underlying, \\\"VToken::sweepToken: can not sweep underlying token\\\");\\n        uint256 balance = token.balanceOf(address(this));\\n        token.safeTransfer(owner(), balance);\\n\\n        emit SweepToken(address(token));\\n    }\\n\\n    /**\\n     * @notice A public function to set new threshold of slot(block or second) difference after which funds will be sent to the protocol share reserve\\n     * @param _newReduceReservesBlockOrTimestampDelta slot(block or second) difference value\\n     * @custom:access Only Governance\\n     */\\n    function setReduceReservesBlockDelta(uint256 _newReduceReservesBlockOrTimestampDelta) external {\\n        _checkAccessAllowed(\\\"setReduceReservesBlockDelta(uint256)\\\");\\n        require(_newReduceReservesBlockOrTimestampDelta > 0, \\\"Invalid Input\\\");\\n        emit NewReduceReservesBlockDelta(reduceReservesBlockDelta, _newReduceReservesBlockOrTimestampDelta);\\n        reduceReservesBlockDelta = _newReduceReservesBlockOrTimestampDelta;\\n    }\\n\\n    /**\\n     * @notice Get the current allowance from `owner` for `spender`\\n     * @param owner The address of the account which owns the tokens to be spent\\n     * @param spender The address of the account which may transfer tokens\\n     * @return amount The number of tokens allowed to be spent (type(uint256).max means infinite)\\n     */\\n    function allowance(address owner, address spender) external view override returns (uint256) {\\n        return transferAllowances[owner][spender];\\n    }\\n\\n    /**\\n     * @notice Get the token balance of the `owner`\\n     * @param owner The address of the account to query\\n     * @return amount The number of tokens owned by `owner`\\n     */\\n    function balanceOf(address owner) external view override returns (uint256) {\\n        return accountTokens[owner];\\n    }\\n\\n    /**\\n     * @notice Get a snapshot of the account's balances, and the cached exchange rate\\n     * @dev This is used by comptroller to more efficiently perform liquidity checks.\\n     * @param account Address of the account to snapshot\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return vTokenBalance User's balance of vTokens\\n     * @return borrowBalance Amount owed in terms of underlying\\n     * @return exchangeRate Stored exchange rate\\n     */\\n    function getAccountSnapshot(\\n        address account\\n    )\\n        external\\n        view\\n        override\\n        returns (uint256 error, uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRate)\\n    {\\n        return (NO_ERROR, accountTokens[account], _borrowBalanceStored(account), _exchangeRateStored());\\n    }\\n\\n    /**\\n     * @notice Get cash balance of this vToken in the underlying asset\\n     * @return cash The quantity of underlying asset owned by this contract\\n     */\\n    function getCash() external view override returns (uint256) {\\n        return _getCashPrior();\\n    }\\n\\n    /**\\n     * @notice Returns the current per slot(block or second) borrow interest rate for this vToken\\n     * @return rate The borrow interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function borrowRatePerBlock() external view override returns (uint256) {\\n        return interestRateModel.getBorrowRate(_getCashPrior(), totalBorrows, totalReserves, badDebt);\\n    }\\n\\n    /**\\n     * @notice Returns the current per-slot(block or second) supply interest rate for this v\\n     * @return rate The supply interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function supplyRatePerBlock() external view override returns (uint256) {\\n        return\\n            interestRateModel.getSupplyRate(\\n                _getCashPrior(),\\n                totalBorrows,\\n                totalReserves,\\n                reserveFactorMantissa,\\n                badDebt\\n            );\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceStored(address account) external view override returns (uint256) {\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateStored() external view override returns (uint256) {\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Accrue interest then return the up-to-date exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateCurrent() public override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Applies accrued interest to total borrows and reserves\\n     * @dev This calculates interest accrued from the last checkpointed slot(block or second)\\n     *  up to the current slot(block or second) and writes new checkpoint to storage and\\n     *  reduce spread reserves to protocol share reserve\\n     *  if currentSlot - reduceReservesBlockNumber >= slotDelta\\n     * @return Always NO_ERROR\\n     * @custom:event Emits AccrueInterest event on success\\n     * @custom:access Not restricted\\n     */\\n    function accrueInterest() public virtual override returns (uint256) {\\n        /* Remember the initial block number or timestamp */\\n        uint256 currentSlotNumber = getBlockNumberOrTimestamp();\\n        uint256 accrualSlotNumberPrior = accrualBlockNumber;\\n\\n        /* Short-circuit accumulating 0 interest */\\n        if (accrualSlotNumberPrior == currentSlotNumber) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Read the previous values out of storage */\\n        uint256 cashPrior = _getCashPrior();\\n        uint256 borrowsPrior = totalBorrows;\\n        uint256 reservesPrior = totalReserves;\\n        uint256 borrowIndexPrior = borrowIndex;\\n\\n        /* Calculate the current borrow interest rate */\\n        uint256 borrowRateMantissa = interestRateModel.getBorrowRate(cashPrior, borrowsPrior, reservesPrior, badDebt);\\n        require(borrowRateMantissa <= MAX_BORROW_RATE_MANTISSA, \\\"borrow rate is absurdly high\\\");\\n\\n        /* Calculate the number of slots elapsed since the last accrual */\\n        uint256 slotDelta = currentSlotNumber - accrualSlotNumberPrior;\\n\\n        /*\\n         * Calculate the interest accumulated into borrows and reserves and the new index:\\n         *  simpleInterestFactor = borrowRate * slotDelta\\n         *  interestAccumulated = simpleInterestFactor * totalBorrows\\n         *  totalBorrowsNew = interestAccumulated + totalBorrows\\n         *  totalReservesNew = interestAccumulated * reserveFactor + totalReserves\\n         *  borrowIndexNew = simpleInterestFactor * borrowIndex + borrowIndex\\n         */\\n\\n        Exp memory simpleInterestFactor = mul_(Exp({ mantissa: borrowRateMantissa }), slotDelta);\\n        uint256 interestAccumulated = mul_ScalarTruncate(simpleInterestFactor, borrowsPrior);\\n        uint256 totalBorrowsNew = interestAccumulated + borrowsPrior;\\n        uint256 totalReservesNew = mul_ScalarTruncateAddUInt(\\n            Exp({ mantissa: reserveFactorMantissa }),\\n            interestAccumulated,\\n            reservesPrior\\n        );\\n        uint256 borrowIndexNew = mul_ScalarTruncateAddUInt(simpleInterestFactor, borrowIndexPrior, borrowIndexPrior);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the previously calculated values into storage */\\n        accrualBlockNumber = currentSlotNumber;\\n        borrowIndex = borrowIndexNew;\\n        totalBorrows = totalBorrowsNew;\\n        totalReserves = totalReservesNew;\\n\\n        if (currentSlotNumber - reduceReservesBlockNumber >= reduceReservesBlockDelta) {\\n            reduceReservesBlockNumber = currentSlotNumber;\\n            if (cashPrior < totalReservesNew) {\\n                _reduceReservesFresh(cashPrior);\\n            } else {\\n                _reduceReservesFresh(totalReservesNew);\\n            }\\n        }\\n\\n        /* We emit an AccrueInterest event */\\n        emit AccrueInterest(cashPrior, interestAccumulated, borrowIndexNew, totalBorrowsNew);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice User supplies assets into the market and receives vTokens in exchange\\n     * @dev Assumes interest has already been accrued up to the current block or timestamp\\n     * @param payer The address of the account which is sending the assets for supply\\n     * @param minter The address of the account which is supplying the assets\\n     * @param mintAmount The amount of the underlying asset to supply\\n     */\\n    function _mintFresh(address payer, address minter, uint256 mintAmount) internal {\\n        /* Fail if mint not allowed */\\n        comptroller.preMintHook(address(this), minter, mintAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert MintFreshnessCheck();\\n        }\\n\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         *  We call `_doTransferIn` for the minter and the mintAmount.\\n         *  `_doTransferIn` reverts if anything goes wrong, since we can't be sure if\\n         *  side-effects occurred. The function returns the amount actually transferred,\\n         *  in case of a fee. On success, the vToken holds an additional `actualMintAmount`\\n         *  of cash.\\n         */\\n        uint256 actualMintAmount = _doTransferIn(payer, mintAmount);\\n\\n        /*\\n         * We get the current exchange rate and calculate the number of vTokens to be minted:\\n         *  mintTokens = actualMintAmount / exchangeRate\\n         */\\n\\n        uint256 mintTokens = div_(actualMintAmount, exchangeRate);\\n\\n        /*\\n         * We calculate the new total supply of vTokens and minter token balance, checking for overflow:\\n         *  totalSupplyNew = totalSupply + mintTokens\\n         *  accountTokensNew = accountTokens[minter] + mintTokens\\n         * And write them into storage\\n         */\\n        totalSupply = totalSupply + mintTokens;\\n        uint256 balanceAfter = accountTokens[minter] + mintTokens;\\n        accountTokens[minter] = balanceAfter;\\n\\n        /* We emit a Mint event, and a Transfer event */\\n        emit Mint(minter, actualMintAmount, mintTokens, balanceAfter);\\n        emit Transfer(address(0), minter, mintTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.mintVerify(address(this), minter, actualMintAmount, mintTokens);\\n    }\\n\\n    /**\\n     * @notice Redeemer redeems vTokens in exchange for the underlying assets, transferred to the receiver. Redeemer and receiver can be the same\\n     *   address, or different addresses if the receiver was previously approved by the redeemer as a valid delegate (see Comptroller.updateDelegate)\\n     * @dev Assumes interest has already been accrued up to the current slot(block or second)\\n     * @param redeemer The address of the account which is redeeming the tokens\\n     * @param receiver The receiver of the underlying tokens\\n     * @param redeemTokensIn The number of vTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     * @param redeemAmountIn The number of underlying tokens to receive from redeeming vTokens (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     */\\n    function _redeemFresh(address redeemer, address receiver, uint256 redeemTokensIn, uint256 redeemAmountIn) internal {\\n        require(redeemTokensIn == 0 || redeemAmountIn == 0, \\\"one of redeemTokensIn or redeemAmountIn must be zero\\\");\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RedeemFreshnessCheck();\\n        }\\n\\n        /* exchangeRate = invoke Exchange Rate Stored() */\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        uint256 redeemTokens;\\n        uint256 redeemAmount;\\n\\n        /* If redeemTokensIn > 0: */\\n        if (redeemTokensIn > 0) {\\n            /*\\n             * We calculate the exchange rate and the amount of underlying to be redeemed:\\n             *  redeemTokens = redeemTokensIn\\n             */\\n            redeemTokens = redeemTokensIn;\\n        } else {\\n            /*\\n             * We get the current exchange rate and calculate the amount to be redeemed:\\n             *  redeemTokens = redeemAmountIn / exchangeRate\\n             */\\n            redeemTokens = div_(redeemAmountIn, exchangeRate);\\n\\n            uint256 _redeemAmount = mul_(redeemTokens, exchangeRate);\\n            if (_redeemAmount != 0 && _redeemAmount != redeemAmountIn) redeemTokens++; // round up\\n        }\\n\\n        // redeemAmount = exchangeRate * redeemTokens\\n        redeemAmount = mul_ScalarTruncate(exchangeRate, redeemTokens);\\n\\n        // Revert if amount is zero\\n        if (redeemAmount == 0) {\\n            revert(\\\"redeemAmount is zero\\\");\\n        }\\n\\n        /* Fail if redeem not allowed */\\n        comptroller.preRedeemHook(address(this), redeemer, redeemTokens);\\n\\n        /* Fail gracefully if protocol has insufficient cash */\\n        if (_getCashPrior() - totalReserves < redeemAmount) {\\n            revert RedeemTransferOutNotPossible();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing reduced supply before external transfer.\\n         */\\n        totalSupply = totalSupply - redeemTokens;\\n        uint256 balanceAfter = accountTokens[redeemer] - redeemTokens;\\n        accountTokens[redeemer] = balanceAfter;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the redeemAmount.\\n         *  On success, the vToken has redeemAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, redeemAmount);\\n\\n        /* We emit a Transfer event, and a Redeem event */\\n        emit Transfer(redeemer, address(this), redeemTokens);\\n        emit Redeem(redeemer, redeemAmount, redeemTokens, balanceAfter);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.redeemVerify(address(this), redeemer, redeemAmount, redeemTokens);\\n    }\\n\\n    /**\\n     * @notice Users or their delegates borrow assets from the protocol\\n     * @param borrower User who borrows the assets\\n     * @param receiver The receiver of the tokens, if called by a delegate\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     */\\n    function _borrowFresh(address borrower, address receiver, uint256 borrowAmount) internal {\\n        /* Fail if borrow not allowed */\\n        comptroller.preBorrowHook(address(this), borrower, borrowAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert BorrowFreshnessCheck();\\n        }\\n\\n        /* Fail gracefully if protocol has insufficient underlying cash */\\n        if (_getCashPrior() - totalReserves < borrowAmount) {\\n            revert BorrowCashNotAvailable();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on overflow:\\n         *  accountBorrowNew = accountBorrow + borrowAmount\\n         *  totalBorrowsNew = totalBorrows + borrowAmount\\n         */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 accountBorrowsNew = accountBorrowsPrev + borrowAmount;\\n        uint256 totalBorrowsNew = totalBorrows + borrowAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing increased borrow before external transfer.\\n        `*/\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the borrowAmount.\\n         *  On success, the vToken borrowAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, borrowAmount);\\n\\n        /* We emit a Borrow event */\\n        emit Borrow(borrower, borrowAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.borrowVerify(address(this), borrower, borrowAmount);\\n    }\\n\\n    /**\\n     * @notice Borrows are repaid by another user (possibly the borrower).\\n     * @param payer the account paying off the borrow\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount the amount of underlying tokens being returned, or type(uint256).max for the full outstanding amount\\n     * @return (uint) the actual repayment amount.\\n     */\\n    function _repayBorrowFresh(address payer, address borrower, uint256 repayAmount) internal returns (uint256) {\\n        /* Fail if repayBorrow not allowed */\\n        comptroller.preRepayHook(address(this), borrower);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RepayBorrowFreshnessCheck();\\n        }\\n\\n        /* We fetch the amount the borrower owes, with accumulated interest */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n\\n        uint256 repayAmountFinal = repayAmount >= accountBorrowsPrev ? accountBorrowsPrev : repayAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We call _doTransferIn for the payer and the repayAmount\\n         *  On success, the vToken holds an additional repayAmount of cash.\\n         *  _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         *   it returns the amount actually transferred, in case of a fee.\\n         */\\n        uint256 actualRepayAmount = _doTransferIn(payer, repayAmountFinal);\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on underflow:\\n         *  accountBorrowsNew = accountBorrows - actualRepayAmount\\n         *  totalBorrowsNew = totalBorrows - actualRepayAmount\\n         */\\n        uint256 accountBorrowsNew = accountBorrowsPrev - actualRepayAmount;\\n        uint256 totalBorrowsNew = totalBorrows - actualRepayAmount;\\n\\n        /* We write the previously calculated values into storage */\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /* We emit a RepayBorrow event */\\n        emit RepayBorrow(payer, borrower, actualRepayAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.repayBorrowVerify(address(this), payer, borrower, actualRepayAmount, borrowIndex);\\n\\n        return actualRepayAmount;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal nonReentrant {\\n        accrueInterest();\\n\\n        uint256 error = vTokenCollateral.accrueInterest();\\n        if (error != NO_ERROR) {\\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted liquidation failed\\n            revert LiquidateAccrueCollateralInterestFailed(error);\\n        }\\n\\n        _liquidateBorrowFresh(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice The liquidator liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrowFresh(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal {\\n        /* Fail if liquidate not allowed */\\n        comptroller.preLiquidateHook(\\n            address(this),\\n            address(vTokenCollateral),\\n            borrower,\\n            repayAmount,\\n            skipLiquidityCheck\\n        );\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert LiquidateFreshnessCheck();\\n        }\\n\\n        /* Verify vTokenCollateral market's slot(block or second) number equals current slot(block or second) number */\\n        if (vTokenCollateral.accrualBlockNumber() != getBlockNumberOrTimestamp()) {\\n            revert LiquidateCollateralFreshnessCheck();\\n        }\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateLiquidatorIsBorrower();\\n        }\\n\\n        /* Fail if repayAmount = 0 */\\n        if (repayAmount == 0) {\\n            revert LiquidateCloseAmountIsZero();\\n        }\\n\\n        /* Fail if repayAmount = type(uint256).max */\\n        if (repayAmount == type(uint256).max) {\\n            revert LiquidateCloseAmountIsUintMax();\\n        }\\n\\n        /* Fail if repayBorrow fails */\\n        uint256 actualRepayAmount = _repayBorrowFresh(liquidator, borrower, repayAmount);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We calculate the number of collateral tokens that will be seized */\\n        (uint256 amountSeizeError, uint256 seizeTokens) = comptroller.liquidateCalculateSeizeTokens(\\n            address(this),\\n            address(vTokenCollateral),\\n            actualRepayAmount\\n        );\\n        require(amountSeizeError == NO_ERROR, \\\"LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED\\\");\\n\\n        /* Revert if borrower collateral token balance < seizeTokens */\\n        require(vTokenCollateral.balanceOf(borrower) >= seizeTokens, \\\"LIQUIDATE_SEIZE_TOO_MUCH\\\");\\n\\n        // If this is also the collateral, call _seize internally to avoid re-entrancy, otherwise make an external call\\n        if (address(vTokenCollateral) == address(this)) {\\n            _seize(address(this), liquidator, borrower, seizeTokens);\\n        } else {\\n            vTokenCollateral.seize(liquidator, borrower, seizeTokens);\\n        }\\n\\n        /* We emit a LiquidateBorrow event */\\n        emit LiquidateBorrow(liquidator, borrower, actualRepayAmount, address(vTokenCollateral), seizeTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.liquidateBorrowVerify(\\n            address(this),\\n            address(vTokenCollateral),\\n            liquidator,\\n            borrower,\\n            actualRepayAmount,\\n            seizeTokens\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Called only during an in-kind liquidation, or by liquidateBorrow during the liquidation of another VToken.\\n     *  It's absolutely critical to use msg.sender as the seizer vToken and not a parameter.\\n     * @param seizerContract The contract seizing the collateral (either borrowed vToken or Comptroller)\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     */\\n    function _seize(address seizerContract, address liquidator, address borrower, uint256 seizeTokens) internal {\\n        /* Fail if seize not allowed */\\n        comptroller.preSeizeHook(address(this), seizerContract, liquidator, borrower);\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateSeizeLiquidatorIsBorrower();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and liquidator token balances, failing on underflow/overflow:\\n         *  borrowerTokensNew = accountTokens[borrower] - seizeTokens\\n         *  liquidatorTokensNew = accountTokens[liquidator] + seizeTokens\\n         */\\n        uint256 liquidationIncentiveMantissa = ComptrollerViewInterface(address(comptroller))\\n            .liquidationIncentiveMantissa();\\n        uint256 numerator = mul_(seizeTokens, Exp({ mantissa: protocolSeizeShareMantissa }));\\n        uint256 protocolSeizeTokens = div_(numerator, Exp({ mantissa: liquidationIncentiveMantissa }));\\n        uint256 liquidatorSeizeTokens = seizeTokens - protocolSeizeTokens;\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n        uint256 protocolSeizeAmount = mul_ScalarTruncate(exchangeRate, protocolSeizeTokens);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the calculated values into storage */\\n        totalSupply = totalSupply - protocolSeizeTokens;\\n        accountTokens[borrower] = accountTokens[borrower] - seizeTokens;\\n        accountTokens[liquidator] = accountTokens[liquidator] + liquidatorSeizeTokens;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, protocolSeizeAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.LIQUIDATION\\n        );\\n\\n        /* Emit a Transfer event */\\n        emit Transfer(borrower, liquidator, liquidatorSeizeTokens);\\n        emit ProtocolSeize(borrower, protocolShareReserve, protocolSeizeAmount);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.seizeVerify(address(this), seizerContract, liquidator, borrower, seizeTokens);\\n    }\\n\\n    function _setComptroller(ComptrollerInterface newComptroller) internal {\\n        ComptrollerInterface oldComptroller = comptroller;\\n        // Ensure invoke comptroller.isComptroller() returns true\\n        require(newComptroller.isComptroller(), \\\"marker method returned false\\\");\\n\\n        // Set market's comptroller to newComptroller\\n        comptroller = newComptroller;\\n\\n        // Emit NewComptroller(oldComptroller, newComptroller)\\n        emit NewComptroller(oldComptroller, newComptroller);\\n    }\\n\\n    /**\\n     * @notice Sets a new reserve factor for the protocol (*requires fresh interest accrual)\\n     * @dev Admin function to set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     */\\n    function _setReserveFactorFresh(uint256 newReserveFactorMantissa) internal {\\n        // Verify market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetReserveFactorFreshCheck();\\n        }\\n\\n        // Check newReserveFactor \\u2264 maxReserveFactor\\n        if (newReserveFactorMantissa > MAX_RESERVE_FACTOR_MANTISSA) {\\n            revert SetReserveFactorBoundsCheck();\\n        }\\n\\n        uint256 oldReserveFactorMantissa = reserveFactorMantissa;\\n        reserveFactorMantissa = newReserveFactorMantissa;\\n\\n        emit NewReserveFactor(oldReserveFactorMantissa, newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Add reserves by transferring from caller\\n     * @dev Requires fresh interest accrual\\n     * @param addAmount Amount of addition to reserves\\n     * @return actualAddAmount The actual amount added, excluding the potential token fees\\n     */\\n    function _addReservesFresh(uint256 addAmount) internal returns (uint256) {\\n        // totalReserves + actualAddAmount\\n        uint256 totalReservesNew;\\n        uint256 actualAddAmount;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert AddReservesFactorFreshCheck(actualAddAmount);\\n        }\\n\\n        actualAddAmount = _doTransferIn(msg.sender, addAmount);\\n        totalReservesNew = totalReserves + actualAddAmount;\\n        totalReserves = totalReservesNew;\\n        emit ReservesAdded(msg.sender, actualAddAmount, totalReservesNew);\\n\\n        return actualAddAmount;\\n    }\\n\\n    /**\\n     * @notice Reduces reserves by transferring to the protocol reserve contract\\n     * @dev Requires fresh interest accrual\\n     * @param reduceAmount Amount of reduction to reserves\\n     */\\n    function _reduceReservesFresh(uint256 reduceAmount) internal {\\n        if (reduceAmount == 0) {\\n            return;\\n        }\\n        // totalReserves - reduceAmount\\n        uint256 totalReservesNew;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert ReduceReservesFreshCheck();\\n        }\\n\\n        // Fail gracefully if protocol has insufficient underlying cash\\n        if (_getCashPrior() < reduceAmount) {\\n            revert ReduceReservesCashNotAvailable();\\n        }\\n\\n        // Check reduceAmount \\u2264 reserves[n] (totalReserves)\\n        if (reduceAmount > totalReserves) {\\n            revert ReduceReservesCashValidation();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        totalReservesNew = totalReserves - reduceAmount;\\n\\n        // Store reserves[n+1] = reserves[n] - reduceAmount\\n        totalReserves = totalReservesNew;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, reduceAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.SPREAD\\n        );\\n\\n        emit SpreadReservesReduced(protocolShareReserve, reduceAmount, totalReservesNew);\\n    }\\n\\n    /**\\n     * @notice updates the interest rate model (*requires fresh interest accrual)\\n     * @dev Admin function to update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     */\\n    function _setInterestRateModelFresh(InterestRateModel newInterestRateModel) internal {\\n        // Used to store old model for use in the event that is emitted on success\\n        InterestRateModel oldInterestRateModel;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetInterestRateModelFreshCheck();\\n        }\\n\\n        // Track the market's current interest rate model\\n        oldInterestRateModel = interestRateModel;\\n\\n        // Ensure invoke newInterestRateModel.isInterestRateModel() returns true\\n        require(newInterestRateModel.isInterestRateModel(), \\\"marker method returned false\\\");\\n\\n        // Set the interest rate model to newInterestRateModel\\n        interestRateModel = newInterestRateModel;\\n\\n        // Emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel)\\n        emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel);\\n    }\\n\\n    /**\\n     * Safe Token **\\n     */\\n\\n    /**\\n     * @dev Similar to ERC-20 transfer, but handles tokens that have transfer fees.\\n     *      This function returns the actual amount received,\\n     *      which may be less than `amount` if there is a fee attached to the transfer.\\n     * @param from Sender of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     * @return Actual amount received\\n     */\\n    function _doTransferIn(address from, uint256 amount) internal virtual returns (uint256) {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        uint256 balanceBefore = token.balanceOf(address(this));\\n        token.safeTransferFrom(from, address(this), amount);\\n        uint256 balanceAfter = token.balanceOf(address(this));\\n        // Return the amount that was *actually* transferred\\n        return balanceAfter - balanceBefore;\\n    }\\n\\n    /**\\n     * @dev Just a regular ERC-20 transfer, reverts on failure\\n     * @param to Receiver of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     */\\n    function _doTransferOut(address to, uint256 amount) internal virtual {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        token.safeTransfer(to, amount);\\n    }\\n\\n    /**\\n     * @notice Transfer `tokens` tokens from `src` to `dst` by `spender`\\n     * @dev Called by both `transfer` and `transferFrom` internally\\n     * @param spender The address of the account performing the transfer\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param tokens The number of tokens to transfer\\n     */\\n    function _transferTokens(address spender, address src, address dst, uint256 tokens) internal {\\n        /* Fail if transfer not allowed */\\n        comptroller.preTransferHook(address(this), src, dst, tokens);\\n\\n        /* Do not allow self-transfers */\\n        if (src == dst) {\\n            revert TransferNotAllowed();\\n        }\\n\\n        /* Get the allowance, infinite for the account owner */\\n        uint256 startingAllowance;\\n        if (spender == src) {\\n            startingAllowance = type(uint256).max;\\n        } else {\\n            startingAllowance = transferAllowances[src][spender];\\n        }\\n\\n        /* Do the calculations, checking for {under,over}flow */\\n        uint256 allowanceNew = startingAllowance - tokens;\\n        uint256 srcTokensNew = accountTokens[src] - tokens;\\n        uint256 dstTokensNew = accountTokens[dst] + tokens;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n\\n        accountTokens[src] = srcTokensNew;\\n        accountTokens[dst] = dstTokensNew;\\n\\n        /* Eat some of the allowance (if necessary) */\\n        if (startingAllowance != type(uint256).max) {\\n            transferAllowances[src][spender] = allowanceNew;\\n        }\\n\\n        /* We emit a Transfer event */\\n        emit Transfer(src, dst, tokens);\\n\\n        comptroller.transferVerify(address(this), src, dst, tokens);\\n    }\\n\\n    /**\\n     * @notice Initialize the money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     */\\n    function _initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n        require(accrualBlockNumber == 0 && borrowIndex == 0, \\\"market may only be initialized once\\\");\\n\\n        // Set initial exchange rate\\n        initialExchangeRateMantissa = initialExchangeRateMantissa_;\\n        require(initialExchangeRateMantissa > 0, \\\"initial exchange rate must be greater than zero.\\\");\\n\\n        _setComptroller(comptroller_);\\n\\n        // Initialize slot(block or second) number and borrow index (slot(block or second) number mocks depend on comptroller being set)\\n        accrualBlockNumber = getBlockNumberOrTimestamp();\\n        borrowIndex = MANTISSA_ONE;\\n\\n        // Set the interest rate model (depends on slot(block or second) number / borrow index)\\n        _setInterestRateModelFresh(interestRateModel_);\\n\\n        _setReserveFactorFresh(reserveFactorMantissa_);\\n\\n        name = name_;\\n        symbol = symbol_;\\n        decimals = decimals_;\\n        _setShortfallContract(riskManagement.shortfall);\\n        _setProtocolShareReserve(riskManagement.protocolShareReserve);\\n        protocolSeizeShareMantissa = DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA;\\n\\n        // Set underlying and sanity check it\\n        underlying = underlying_;\\n        IERC20Upgradeable(underlying).totalSupply();\\n\\n        // The counter starts true to prevent changing it from zero to non-zero (i.e. smaller cost/refund)\\n        _notEntered = true;\\n        _transferOwnership(admin_);\\n    }\\n\\n    function _setShortfallContract(address shortfall_) internal {\\n        ensureNonzeroAddress(shortfall_);\\n        address oldShortfall = shortfall;\\n        shortfall = shortfall_;\\n        emit NewShortfallContract(oldShortfall, shortfall_);\\n    }\\n\\n    function _setProtocolShareReserve(address payable protocolShareReserve_) internal {\\n        ensureNonzeroAddress(protocolShareReserve_);\\n        address oldProtocolShareReserve = address(protocolShareReserve);\\n        protocolShareReserve = protocolShareReserve_;\\n        emit NewProtocolShareReserve(oldProtocolShareReserve, address(protocolShareReserve_));\\n    }\\n\\n    function _ensureSenderIsDelegateOf(address user) internal view {\\n        if (!ComptrollerViewInterface(address(comptroller)).approvedDelegates(user, msg.sender)) {\\n            revert DelegateNotApproved();\\n        }\\n    }\\n\\n    /**\\n     * @notice Gets balance of this contract in terms of the underlying\\n     * @dev This excludes the value of the current message, if any\\n     * @return The quantity of underlying tokens owned by this contract\\n     */\\n    function _getCashPrior() internal view virtual returns (uint256) {\\n        return IERC20Upgradeable(underlying).balanceOf(address(this));\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance the calculated balance\\n     */\\n    function _borrowBalanceStored(address account) internal view returns (uint256) {\\n        /* Get borrowBalance and borrowIndex */\\n        BorrowSnapshot memory borrowSnapshot = accountBorrows[account];\\n\\n        /* If borrowBalance = 0 then borrowIndex is likely also 0.\\n         * Rather than failing the calculation with a division by 0, we immediately return 0 in this case.\\n         */\\n        if (borrowSnapshot.principal == 0) {\\n            return 0;\\n        }\\n\\n        /* Calculate new borrow balance using the interest index:\\n         *  recentBorrowBalance = borrower.borrowBalance * market.borrowIndex / borrower.borrowIndex\\n         */\\n        uint256 principalTimesIndex = borrowSnapshot.principal * borrowIndex;\\n\\n        return principalTimesIndex / borrowSnapshot.interestIndex;\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function _exchangeRateStored() internal view virtual returns (uint256) {\\n        uint256 _totalSupply = totalSupply;\\n        if (_totalSupply == 0) {\\n            /*\\n             * If there are no tokens minted:\\n             *  exchangeRate = initialExchangeRate\\n             */\\n            return initialExchangeRateMantissa;\\n        }\\n        /*\\n         * Otherwise:\\n         *  exchangeRate = (totalCash + totalBorrows + badDebt - totalReserves) / totalSupply\\n         */\\n        uint256 totalCash = _getCashPrior();\\n        uint256 cashPlusBorrowsMinusReserves = totalCash + totalBorrows + badDebt - totalReserves;\\n        uint256 exchangeRate = (cashPlusBorrowsMinusReserves * EXP_SCALE) / _totalSupply;\\n\\n        return exchangeRate;\\n    }\\n}\\n\",\"keccak256\":\"0xa220ca317fe69b920b86e43f054c43b5f891f12160fd312c9a21668f969ee056\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { ComptrollerInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\n\\n/**\\n * @title VTokenStorage\\n * @author Venus\\n * @notice Storage layout used by the `VToken` contract\\n */\\n// solhint-disable-next-line max-states-count\\ncontract VTokenStorage {\\n    /**\\n     * @notice Container for borrow balance information\\n     * @member principal Total balance (with accrued interest), after applying the most recent balance-changing action\\n     * @member interestIndex Global borrowIndex as of the most recent balance-changing action\\n     */\\n    struct BorrowSnapshot {\\n        uint256 principal;\\n        uint256 interestIndex;\\n    }\\n\\n    /**\\n     * @dev Guard variable for re-entrancy checks\\n     */\\n    bool internal _notEntered;\\n\\n    /**\\n     * @notice Underlying asset for this VToken\\n     */\\n    address public underlying;\\n\\n    /**\\n     * @notice EIP-20 token name for this token\\n     */\\n    string public name;\\n\\n    /**\\n     * @notice EIP-20 token symbol for this token\\n     */\\n    string public symbol;\\n\\n    /**\\n     * @notice EIP-20 token decimals for this token\\n     */\\n    uint8 public decimals;\\n\\n    /**\\n     * @notice Protocol share Reserve contract address\\n     */\\n    address payable public protocolShareReserve;\\n\\n    /**\\n     * @notice Contract which oversees inter-vToken operations\\n     */\\n    ComptrollerInterface public comptroller;\\n\\n    /**\\n     * @notice Model which tells what the current interest rate should be\\n     */\\n    InterestRateModel public interestRateModel;\\n\\n    // Initial exchange rate used when minting the first VTokens (used when totalSupply = 0)\\n    uint256 internal initialExchangeRateMantissa;\\n\\n    /**\\n     * @notice Fraction of interest currently set aside for reserves\\n     */\\n    uint256 public reserveFactorMantissa;\\n\\n    /**\\n     * @notice Slot(block or second) number that interest was last accrued at\\n     */\\n    uint256 public accrualBlockNumber;\\n\\n    /**\\n     * @notice Accumulator of the total earned interest rate since the opening of the market\\n     */\\n    uint256 public borrowIndex;\\n\\n    /**\\n     * @notice Total amount of outstanding borrows of the underlying in this market\\n     */\\n    uint256 public totalBorrows;\\n\\n    /**\\n     * @notice Total amount of reserves of the underlying held in this market\\n     */\\n    uint256 public totalReserves;\\n\\n    /**\\n     * @notice Total number of tokens in circulation\\n     */\\n    uint256 public totalSupply;\\n\\n    /**\\n     * @notice Total bad debt of the market\\n     */\\n    uint256 public badDebt;\\n\\n    // Official record of token balances for each account\\n    mapping(address => uint256) internal accountTokens;\\n\\n    // Approved token transfer amounts on behalf of others\\n    mapping(address => mapping(address => uint256)) internal transferAllowances;\\n\\n    // Mapping of account addresses to outstanding borrow balances\\n    mapping(address => BorrowSnapshot) internal accountBorrows;\\n\\n    /**\\n     * @notice Share of seized collateral that is added to reserves\\n     */\\n    uint256 public protocolSeizeShareMantissa;\\n\\n    /**\\n     * @notice Storage of Shortfall contract address\\n     */\\n    address public shortfall;\\n\\n    /**\\n     * @notice delta slot (block or second) after which reserves will be reduced\\n     */\\n    uint256 public reduceReservesBlockDelta;\\n\\n    /**\\n     * @notice last slot (block or second) number at which reserves were reduced\\n     */\\n    uint256 public reduceReservesBlockNumber;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n}\\n\\n/**\\n * @title VTokenInterface\\n * @author Venus\\n * @notice Interface implemented by the `VToken` contract\\n */\\nabstract contract VTokenInterface is VTokenStorage {\\n    struct RiskManagementInit {\\n        address shortfall;\\n        address payable protocolShareReserve;\\n    }\\n\\n    /*** Market Events ***/\\n\\n    /**\\n     * @notice Event emitted when interest is accrued\\n     */\\n    event AccrueInterest(uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when tokens are minted\\n     */\\n    event Mint(address indexed minter, uint256 mintAmount, uint256 mintTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when tokens are redeemed\\n     */\\n    event Redeem(address indexed redeemer, uint256 redeemAmount, uint256 redeemTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when underlying is borrowed\\n     */\\n    event Borrow(address indexed borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when a borrow is repaid\\n     */\\n    event RepayBorrow(\\n        address indexed payer,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        uint256 accountBorrows,\\n        uint256 totalBorrows\\n    );\\n\\n    /**\\n     * @notice Event emitted when bad debt is accumulated on a market\\n     * @param borrower borrower to \\\"forgive\\\"\\n     * @param badDebtDelta amount of new bad debt recorded\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtIncreased(address indexed borrower, uint256 badDebtDelta, uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when bad debt is recovered via an auction\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtRecovered(uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when a borrow is liquidated\\n     */\\n    event LiquidateBorrow(\\n        address indexed liquidator,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        address indexed vTokenCollateral,\\n        uint256 seizeTokens\\n    );\\n\\n    /*** Admin Events ***/\\n\\n    /**\\n     * @notice Event emitted when comptroller is changed\\n     */\\n    event NewComptroller(ComptrollerInterface indexed oldComptroller, ComptrollerInterface indexed newComptroller);\\n\\n    /**\\n     * @notice Event emitted when shortfall contract address is changed\\n     */\\n    event NewShortfallContract(address indexed oldShortfall, address indexed newShortfall);\\n\\n    /**\\n     * @notice Event emitted when protocol share reserve contract address is changed\\n     */\\n    event NewProtocolShareReserve(address indexed oldProtocolShareReserve, address indexed newProtocolShareReserve);\\n\\n    /**\\n     * @notice Event emitted when interestRateModel is changed\\n     */\\n    event NewMarketInterestRateModel(\\n        InterestRateModel indexed oldInterestRateModel,\\n        InterestRateModel indexed newInterestRateModel\\n    );\\n\\n    /**\\n     * @notice Event emitted when protocol seize share is changed\\n     */\\n    event NewProtocolSeizeShare(uint256 oldProtocolSeizeShareMantissa, uint256 newProtocolSeizeShareMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserve factor is changed\\n     */\\n    event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserves are added\\n     */\\n    event ReservesAdded(address indexed benefactor, uint256 addAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice Event emitted when the spread reserves are reduced\\n     */\\n    event SpreadReservesReduced(address indexed protocolShareReserve, uint256 reduceAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice EIP20 Transfer event\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 amount);\\n\\n    /**\\n     * @notice EIP20 Approval event\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\\n\\n    /**\\n     * @notice Event emitted when healing the borrow\\n     */\\n    event HealBorrow(address indexed payer, address indexed borrower, uint256 repayAmount);\\n\\n    /**\\n     * @notice Event emitted when tokens are swept\\n     */\\n    event SweepToken(address indexed token);\\n\\n    /**\\n     * @notice Event emitted when reduce reserves slot (block or second) delta is changed\\n     */\\n    event NewReduceReservesBlockDelta(\\n        uint256 oldReduceReservesBlockOrTimestampDelta,\\n        uint256 newReduceReservesBlockOrTimestampDelta\\n    );\\n\\n    /**\\n     * @notice Event emitted when liquidation reserves are reduced\\n     */\\n    event ProtocolSeize(address indexed from, address indexed to, uint256 amount);\\n\\n    /*** User Interface ***/\\n\\n    function mint(uint256 mintAmount) external virtual returns (uint256);\\n\\n    function mintBehalf(address minter, uint256 mintAllowed) external virtual returns (uint256);\\n\\n    function redeem(uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemUnderlying(uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function redeemUnderlyingBehalf(address redeemer, uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function borrow(uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function borrowBehalf(address borrwwer, uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function repayBorrow(uint256 repayAmount) external virtual returns (uint256);\\n\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external virtual returns (uint256);\\n\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external virtual returns (uint256);\\n\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external virtual;\\n\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipCloseFactorCheck\\n    ) external virtual;\\n\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external virtual;\\n\\n    function transfer(address dst, uint256 amount) external virtual returns (bool);\\n\\n    function transferFrom(address src, address dst, uint256 amount) external virtual returns (bool);\\n\\n    function accrueInterest() external virtual returns (uint256);\\n\\n    function sweepToken(IERC20Upgradeable token) external virtual;\\n\\n    /*** Admin Functions ***/\\n\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external virtual;\\n\\n    function reduceReserves(uint256 reduceAmount) external virtual;\\n\\n    function exchangeRateCurrent() external virtual returns (uint256);\\n\\n    function borrowBalanceCurrent(address account) external virtual returns (uint256);\\n\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external virtual;\\n\\n    function addReserves(uint256 addAmount) external virtual;\\n\\n    function totalBorrowsCurrent() external virtual returns (uint256);\\n\\n    function balanceOfUnderlying(address owner) external virtual returns (uint256);\\n\\n    function approve(address spender, uint256 amount) external virtual returns (bool);\\n\\n    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool);\\n\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool);\\n\\n    function allowance(address owner, address spender) external view virtual returns (uint256);\\n\\n    function balanceOf(address owner) external view virtual returns (uint256);\\n\\n    function getAccountSnapshot(address account) external view virtual returns (uint256, uint256, uint256, uint256);\\n\\n    function borrowRatePerBlock() external view virtual returns (uint256);\\n\\n    function supplyRatePerBlock() external view virtual returns (uint256);\\n\\n    function borrowBalanceStored(address account) external view virtual returns (uint256);\\n\\n    function exchangeRateStored() external view virtual returns (uint256);\\n\\n    function getCash() external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is a VToken contract (for inspection)\\n     * @return Always true\\n     */\\n    function isVToken() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7c4cbb879e3a931cfee4fa7a9eb1978eddff18087a1c4f56decedb84c2479f1e\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\",\"keccak256\":\"0x54ab3a6f3bc87569ed12370f3470a1ec84cea9796d4d0ccf3d07dd4280c044aa\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/validators.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\\nerror ZeroAddressNotAllowed();\\n\\n/// @notice Checks if the provided address is nonzero, reverts otherwise\\n/// @param address_ Address to check\\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\\nfunction ensureNonzeroAddress(address address_) pure {\\n    if (address_ == address(0)) {\\n        revert ZeroAddressNotAllowed();\\n    }\\n}\\n\",\"keccak256\":\"0x93bdd5cfb100f0f9a1d446857e23c3633df6ab12c266333c978428edd96b1367\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface IProtocolShareReserve {\\n    /// @notice it represents the type of vToken income\\n    enum IncomeType {\\n        SPREAD,\\n        LIQUIDATION\\n    }\\n\\n    function updateAssetsState(\\n        address comptroller,\\n        address asset,\\n        IncomeType incomeType\\n    ) external;\\n}\\n\",\"keccak256\":\"0x5fddc5b63fdd850b3b5c83576cda50dcb27a205dbb1a23af17d9da0d9f04fa0a\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { SECONDS_PER_YEAR } from \\\"./constants.sol\\\";\\n\\nabstract contract TimeManagerV8 {\\n    /// @notice Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 public immutable blocksOrSecondsPerYear;\\n\\n    /// @notice Acknowledges if a contract is time based or not\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    bool public immutable isTimeBased;\\n\\n    /// @notice Stores the current block timestamp or block number depending on isTimeBased\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    function() view returns (uint256) private immutable _getCurrentSlot;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n\\n    /// @notice Thrown when blocks per year is invalid\\n    error InvalidBlocksPerYear();\\n\\n    /// @notice Thrown when time based but blocks per year is provided\\n    error InvalidTimeBasedConfiguration();\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block\\n     * If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:error InvalidBlocksPerYear is thrown if blocksPerYear entered is zero and timeBased is false\\n     * @custom:error InvalidTimeBasedConfiguration is thrown if blocksPerYear entered is non zero and timeBased is true\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) {\\n        if (!timeBased_ && blocksPerYear_ == 0) {\\n            revert InvalidBlocksPerYear();\\n        }\\n\\n        if (timeBased_ && blocksPerYear_ != 0) {\\n            revert InvalidTimeBasedConfiguration();\\n        }\\n\\n        isTimeBased = timeBased_;\\n        blocksOrSecondsPerYear = timeBased_ ? SECONDS_PER_YEAR : blocksPerYear_;\\n        _getCurrentSlot = timeBased_ ? _getBlockTimestamp : _getBlockNumber;\\n    }\\n\\n    /**\\n     * @dev Function to simply retrieve block number or block timestamp\\n     * @return Current block number or block timestamp\\n     */\\n    function getBlockNumberOrTimestamp() public view virtual returns (uint256) {\\n        return _getCurrentSlot();\\n    }\\n\\n    /**\\n     * @dev Returns the current timestamp in seconds\\n     * @return The current timestamp\\n     */\\n    function _getBlockTimestamp() private view returns (uint256) {\\n        return block.timestamp;\\n    }\\n\\n    /**\\n     * @dev Returns the current block number\\n     * @return The current block number\\n     */\\n    function _getBlockNumber() private view returns (uint256) {\\n        return block.number;\\n    }\\n}\\n\",\"keccak256\":\"0x57a2bbb9b8e02b1c0a5c0e305fef1328a22db56c3d4b148c362010a6e767243c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\",\"keccak256\":\"0x14de93ead464da249af31bea0e3bcfb62ec693bea3475fb4d90f055ac81dc5eb\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { PrimeStorageV1 } from \\\"../PrimeStorage.sol\\\";\\n\\n/**\\n * @title IPrime\\n * @author Venus\\n * @notice Interface for Prime Token\\n */\\ninterface IPrime {\\n    struct APRInfo {\\n        // supply APR of the user in BPS\\n        uint256 supplyAPR;\\n        // borrow APR of the user in BPS\\n        uint256 borrowAPR;\\n        // total score of the market\\n        uint256 totalScore;\\n        // score of the user\\n        uint256 userScore;\\n        // capped XVS balance of the user\\n        uint256 xvsBalanceForScore;\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    struct Capital {\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    /**\\n     * @notice Returns boosted pending interest accrued for a user for all markets\\n     * @param user the account for which to get the accrued interests\\n     * @return pendingRewards the number of underlying tokens accrued by the user for all markets\\n     */\\n    function getPendingRewards(address user) external returns (PrimeStorageV1.PendingReward[] memory pendingRewards);\\n\\n    /**\\n     * @notice Update total score of multiple users and market\\n     * @param users accounts for which we need to update score\\n     */\\n    function updateScores(address[] memory users) external;\\n\\n    /**\\n     * @notice Update value of alpha\\n     * @param _alphaNumerator numerator of alpha. If alpha is 0.5 then numerator is 1\\n     * @param _alphaDenominator denominator of alpha. If alpha is 0.5 then denominator is 2\\n     */\\n    function updateAlpha(uint128 _alphaNumerator, uint128 _alphaDenominator) external;\\n\\n    /**\\n     * @notice Update multipliers for a market\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier new supply multiplier for the market, scaled by 1e18\\n     * @param borrowMultiplier new borrow multiplier for the market, scaled by 1e18\\n     */\\n    function updateMultipliers(address market, uint256 supplyMultiplier, uint256 borrowMultiplier) external;\\n\\n    /**\\n     * @notice Add a market to prime program\\n     * @param comptroller address of the comptroller\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier the multiplier for supply cap. It should be converted to 1e18\\n     * @param borrowMultiplier the multiplier for borrow cap. It should be converted to 1e18\\n     */\\n    function addMarket(\\n        address comptroller,\\n        address market,\\n        uint256 supplyMultiplier,\\n        uint256 borrowMultiplier\\n    ) external;\\n\\n    /**\\n     * @notice Set limits for total tokens that can be minted\\n     * @param _irrevocableLimit total number of irrevocable tokens that can be minted\\n     * @param _revocableLimit total number of revocable tokens that can be minted\\n     */\\n    function setLimit(uint256 _irrevocableLimit, uint256 _revocableLimit) external;\\n\\n    /**\\n     * @notice Directly issue prime tokens to users\\n     * @param isIrrevocable are the tokens being issued\\n     * @param users list of address to issue tokens to\\n     */\\n    function issue(bool isIrrevocable, address[] calldata users) external;\\n\\n    /**\\n     * @notice Executed by XVSVault whenever user's XVSVault balance changes\\n     * @param user the account address whose balance was updated\\n     */\\n    function xvsUpdated(address user) external;\\n\\n    /**\\n     * @notice accrues interest and updates score for an user for a specific market\\n     * @param user the account address for which to accrue interest and update score\\n     * @param market the market for which to accrue interest and update score\\n     */\\n    function accrueInterestAndUpdateScore(address user, address market) external;\\n\\n    /**\\n     * @notice For claiming prime token when staking period is completed\\n     */\\n    function claim() external;\\n\\n    /**\\n     * @notice For burning any prime token\\n     * @param user the account address for which the prime token will be burned\\n     */\\n    function burn(address user) external;\\n\\n    /**\\n     * @notice To pause or unpause claiming of interest\\n     */\\n    function togglePause() external;\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken) external returns (uint256);\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @param user the user for which to claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Distributes income from market since last distribution\\n     * @param vToken the market for which to distribute the income\\n     */\\n    function accrueInterest(address vToken) external;\\n\\n    /**\\n     * @notice Returns boosted interest accrued for a user\\n     * @param vToken the market for which to fetch the accrued interest\\n     * @param user the account for which to get the accrued interest\\n     * @return interestAccrued the number of underlying tokens accrued by the user since the last accrual\\n     */\\n    function getInterestAccrued(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Retrieves an array of all available markets\\n     * @return an array of addresses representing all available markets\\n     */\\n    function getAllMarkets() external view returns (address[] memory);\\n\\n    /**\\n     * @notice fetch the numbers of seconds remaining for staking period to complete\\n     * @param user the account address for which we are checking the remaining time\\n     * @return timeRemaining the number of seconds the user needs to wait to claim prime token\\n     */\\n    function claimTimeRemaining(address user) external view returns (uint256);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for user for a given market\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function calculateAPR(address market, address user) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for estimated supply, borrow and XVS staked\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @param borrow hypothetical borrow amount\\n     * @param supply hypothetical supply amount\\n     * @param xvsStaked hypothetical staked XVS amount\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function estimateAPR(\\n        address market,\\n        address user,\\n        uint256 borrow,\\n        uint256 supply,\\n        uint256 xvsStaked\\n    ) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice the total income that's going to be distributed in a year to prime token holders\\n     * @param vToken the market for which to fetch the total income that's going to distributed in a year\\n     * @return amount the total income\\n     */\\n    function incomeDistributionYearly(address vToken) external view returns (uint256 amount);\\n\\n    /**\\n     * @notice Returns if user is a prime holder\\n     * @return isPrimeHolder true if user is a prime holder\\n     */\\n    function isUserPrimeHolder(address user) external view returns (bool);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param loopsLimit Number of loops limit\\n     */\\n    function setMaxLoopsLimit(uint256 loopsLimit) external;\\n\\n    /**\\n     * @notice Update staked at timestamp for multiple users\\n     * @param users accounts for which we need to update staked at timestamp\\n     * @param timestamps new staked at timestamp for the users\\n     */\\n    function setStakedAt(address[] calldata users, uint256[] calldata timestamps) external;\\n}\\n\",\"keccak256\":\"0xd112f60183416ad796093b4a83a80ddc1b8b655965f02ae55ca82e2a0c68f97d\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\n/**\\n * @title PrimeStorageV1\\n * @author Venus\\n * @notice Storage for Prime Token\\n */\\ncontract PrimeStorageV1 {\\n    struct Token {\\n        bool exists;\\n        bool isIrrevocable;\\n    }\\n\\n    struct Market {\\n        uint256 supplyMultiplier;\\n        uint256 borrowMultiplier;\\n        uint256 rewardIndex;\\n        uint256 sumOfMembersScore;\\n        bool exists;\\n    }\\n\\n    struct Interest {\\n        uint256 accrued;\\n        uint256 score;\\n        uint256 rewardIndex;\\n    }\\n\\n    struct PendingReward {\\n        address vToken;\\n        address rewardToken;\\n        uint256 amount;\\n    }\\n\\n    /// @notice Base unit for computations, usually used in scaling (multiplications, divisions)\\n    uint256 internal constant EXP_SCALE = 1e18;\\n\\n    /// @notice maximum BPS = 100%\\n    uint256 internal constant MAXIMUM_BPS = 1e4;\\n\\n    /// @notice Mapping to get prime token's metadata\\n    mapping(address => Token) public tokens;\\n\\n    /// @notice  Tracks total irrevocable tokens minted\\n    uint256 public totalIrrevocable;\\n\\n    /// @notice  Tracks total revocable tokens minted\\n    uint256 public totalRevocable;\\n\\n    /// @notice  Indicates maximum revocable tokens that can be minted\\n    uint256 public revocableLimit;\\n\\n    /// @notice  Indicates maximum irrevocable tokens that can be minted\\n    uint256 public irrevocableLimit;\\n\\n    /// @notice Tracks when prime token eligible users started staking for claiming prime token\\n    mapping(address => uint256) public stakedAt;\\n\\n    /// @notice vToken to market configuration\\n    mapping(address => Market) public markets;\\n\\n    /// @notice vToken to user to user index\\n    mapping(address => mapping(address => Interest)) public interests;\\n\\n    /// @notice A list of boosted markets\\n    address[] internal _allMarkets;\\n\\n    /// @notice numerator of alpha. Ex: if alpha is 0.5 then this will be 1\\n    uint128 public alphaNumerator;\\n\\n    /// @notice denominator of alpha. Ex: if alpha is 0.5 then this will be 2\\n    uint128 public alphaDenominator;\\n\\n    /// @notice address of XVS vault\\n    address public xvsVault;\\n\\n    /// @notice address of XVS vault reward token\\n    address public xvsVaultRewardToken;\\n\\n    /// @notice address of XVS vault pool id\\n    uint256 public xvsVaultPoolId;\\n\\n    /// @notice mapping to check if a account's score was updated in the round\\n    mapping(uint256 => mapping(address => bool)) public isScoreUpdated;\\n\\n    /// @notice unique id for next round\\n    uint256 public nextScoreUpdateRoundId;\\n\\n    /// @notice total number of accounts whose score needs to be updated\\n    uint256 public totalScoreUpdatesRequired;\\n\\n    /// @notice total number of accounts whose score is yet to be updated\\n    uint256 public pendingScoreUpdates;\\n\\n    /// @notice mapping used to find if an asset is part of prime markets\\n    mapping(address => address) public vTokenForAsset;\\n\\n    /// @notice Address of core pool comptroller contract\\n    address internal corePoolComptroller;\\n\\n    /// @notice unreleased income from PLP that's already distributed to prime holders\\n    /// @dev mapping of asset address => amount\\n    mapping(address => uint256) public unreleasedPLPIncome;\\n\\n    /// @notice The address of PLP contract\\n    address public primeLiquidityProvider;\\n\\n    /// @notice The address of ResilientOracle contract\\n    ResilientOracleInterface public oracle;\\n\\n    /// @notice The address of PoolRegistry contract\\n    address public poolRegistry;\\n\\n    /// @dev This empty reserved space is put in place to allow future versions to add new\\n    /// variables without shifting down storage in the inheritance chain.\\n    uint256[26] private __gap;\\n}\\n\",\"keccak256\":\"0x5285c875114db2ea2be0b81b65722d5761806217022db733323c4e03365a95e7\",\"license\":\"BSD-3-Clause\"},\"contracts/ERC4626/Interfaces/IComptroller.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Action } from \\\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\\\";\\nimport { RewardsDistributor } from \\\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\\\";\\n\\n/**\\n * @title IComptroller\\n * @author Venus\\n * @notice Combined interface for the `Comptroller` contract, including both core and view functions.\\n */\\ninterface IComptroller {\\n    function actionPaused(address market, Action action) external view returns (bool);\\n\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory);\\n\\n    function supplyCaps(address) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xc55d8fa6cb3e3907d0b9cf5d696afc18879d503278e40bed7f837403d0a4ed7e\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Combined interface for the `Comptroller` contract, including both core and view functions.","version":1}}},"contracts/ERC4626/Interfaces/IProtocolShareReserve.sol":{"IProtocolShareReserve":{"abi":[{"inputs":[{"internalType":"address","name":"comptroller","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"enum IProtocolShareReserve.IncomeType","name":"incomeType","type":"uint8"}],"name":"updateAssetsState","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"updateAssetsState(address,address,uint8)":"16faecec"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"enum IProtocolShareReserve.IncomeType\",\"name\":\"incomeType\",\"type\":\"uint8\"}],\"name\":\"updateAssetsState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ERC4626/Interfaces/IProtocolShareReserve.sol\":\"IProtocolShareReserve\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/ERC4626/Interfaces/IProtocolShareReserve.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface IProtocolShareReserve {\\n    /// @notice it represents the type of vToken income\\n    enum IncomeType {\\n        SPREAD,\\n        LIQUIDATION,\\n        ERC4626_WRAPPER_REWARDS,\\n        FLASHLOAN\\n    }\\n\\n    function updateAssetsState(address comptroller, address asset, IncomeType incomeType) external;\\n}\\n\",\"keccak256\":\"0x9ca700a59330cb3bb1b1fe1cbd93b02c06d6ba8f9457ab12e03e87bec0c41235\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/ERC4626/Interfaces/IRewardsDistributor.sol":{"IRewardsDistributor":{"abi":[{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"contract VToken[]","name":"vTokens","type":"address[]"}],"name":"claimRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20Upgradeable","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"claimRewardToken(address,address[])":"04caeb10","rewardToken()":"f7c618c1"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"contract VToken[]\",\"name\":\"vTokens\",\"type\":\"address[]\"}],\"name\":\"claimRewardToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardToken\",\"outputs\":[{\"internalType\":\"contract IERC20Upgradeable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ERC4626/Interfaces/IRewardsDistributor.sol\":\"IRewardsDistributor\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./OwnableUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership} and {acceptOwnership}.\\n *\\n * This module is used through inheritance. It will make available all functions\\n * from parent (Ownable).\\n */\\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\\n    address private _pendingOwner;\\n\\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\\n\\n    function __Ownable2Step_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable2Step_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Returns the address of the pending owner.\\n     */\\n    function pendingOwner() public view virtual returns (address) {\\n        return _pendingOwner;\\n    }\\n\\n    /**\\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\\n        _pendingOwner = newOwner;\\n        emit OwnershipTransferStarted(owner(), newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual override {\\n        delete _pendingOwner;\\n        super._transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev The new owner accepts the ownership transfer.\\n     */\\n    function acceptOwnership() public virtual {\\n        address sender = _msgSender();\\n        require(pendingOwner() == sender, \\\"Ownable2Step: caller is not the new owner\\\");\\n        _transferOwnership(sender);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x9140dabc466abab21b48b72dbda26736b1183a310d0e677d3719d201df026510\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * ==== Security Considerations\\n *\\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\\n * generally recommended is:\\n *\\n * ```solidity\\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\\n *     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\\n *     doThing(..., value);\\n * }\\n *\\n * function doThing(..., uint256 value) public {\\n *     token.safeTransferFrom(msg.sender, address(this), value);\\n *     ...\\n * }\\n * ```\\n *\\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\\n * {SafeERC20-safeTransferFrom}).\\n *\\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\\n * contracts should have entry points that don't rely on permit.\\n */\\ninterface IERC20PermitUpgradeable {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     *\\n     * CAUTION: See Security Considerations above.\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x07e881de3b9f6d2c07909f193f24b96c7fe4ea60013260f3f25aecd8bab3c2f8\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\nimport \\\"../extensions/IERC20PermitUpgradeable.sol\\\";\\nimport \\\"../../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20Upgradeable {\\n    using AddressUpgradeable for address;\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransfer(IERC20Upgradeable token, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    /**\\n     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeIncreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        uint256 oldAllowance = token.allowance(address(this), spender);\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));\\n    }\\n\\n    /**\\n     * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeDecreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));\\n        }\\n    }\\n\\n    /**\\n     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n     * to be set to zero before setting it to a non-zero value, such as USDT.\\n     */\\n    function forceApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);\\n\\n        if (!_callOptionalReturnBool(token, approvalCall)) {\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));\\n            _callOptionalReturn(token, approvalCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.\\n     * Revert on invalid signature.\\n     */\\n    function safePermit(\\n        IERC20PermitUpgradeable token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20Upgradeable token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        require(returndata.length == 0 || abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     *\\n     * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\\n     */\\n    function _callOptionalReturnBool(IERC20Upgradeable token, bytes memory data) private returns (bool) {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\\n        // and not revert is the subcall reverts.\\n\\n        (bool success, bytes memory returndata) = address(token).call(data);\\n        return\\n            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && AddressUpgradeable.isContract(address(token));\\n    }\\n}\\n\",\"keccak256\":\"0x23b997be73d3dd46885262704f0f8cfc7273fdadfe303d37969a9561373972b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n    /**\\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n     *\\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n     * {RoleAdminChanged} not being emitted signaling this.\\n     *\\n     * _Available since v3.1._\\n     */\\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n    /**\\n     * @dev Emitted when `account` is granted `role`.\\n     *\\n     * `sender` is the account that originated the contract call, an admin role\\n     * bearer except when using {AccessControl-_setupRole}.\\n     */\\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Emitted when `account` is revoked `role`.\\n     *\\n     * `sender` is the account that originated the contract call:\\n     *   - if using `revokeRole`, it is the admin role bearer\\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n     */\\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Returns `true` if `account` has been granted `role`.\\n     */\\n    function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n    /**\\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\\n     * {revokeRole}.\\n     *\\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n     */\\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n    /**\\n     * @dev Grants `role` to `account`.\\n     *\\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function grantRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from `account`.\\n     *\\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function revokeRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from the calling account.\\n     *\\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n     * purpose is to provide a mechanism for accounts to lose their privileges\\n     * if they are compromised (such as when a trusted device is misplaced).\\n     *\\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must be `account`.\\n     */\\n    function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\n\\nimport \\\"./IAccessControlManagerV8.sol\\\";\\n\\n/**\\n * @title AccessControlledV8\\n * @author Venus\\n * @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\\n * to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\\n */\\nabstract contract AccessControlledV8 is Initializable, Ownable2StepUpgradeable {\\n    /// @notice Access control manager contract\\n    IAccessControlManagerV8 internal _accessControlManager;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when access control manager contract address is changed\\n    event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager);\\n\\n    /// @notice Thrown when the action is prohibited by AccessControlManager\\n    error Unauthorized(address sender, address calledContract, string methodSignature);\\n\\n    function __AccessControlled_init(address accessControlManager_) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n    }\\n\\n    function __AccessControlled_init_unchained(address accessControlManager_) internal onlyInitializing {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Sets the address of AccessControlManager\\n     * @dev Admin function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     * @custom:event Emits NewAccessControlManager event\\n     * @custom:access Only Governance\\n     */\\n    function setAccessControlManager(address accessControlManager_) external onlyOwner {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Returns the address of the access control manager contract\\n     */\\n    function accessControlManager() external view returns (IAccessControlManagerV8) {\\n        return _accessControlManager;\\n    }\\n\\n    /**\\n     * @dev Internal function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     */\\n    function _setAccessControlManager(address accessControlManager_) internal {\\n        require(address(accessControlManager_) != address(0), \\\"invalid acess control manager address\\\");\\n        address oldAccessControlManager = address(_accessControlManager);\\n        _accessControlManager = IAccessControlManagerV8(accessControlManager_);\\n        emit NewAccessControlManager(oldAccessControlManager, accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Reverts if the call is not allowed by AccessControlManager\\n     * @param signature Method signature\\n     */\\n    function _checkAccessAllowed(string memory signature) internal view {\\n        bool isAllowedToCall = _accessControlManager.isAllowedToCall(msg.sender, signature);\\n\\n        if (!isAllowedToCall) {\\n            revert Unauthorized(msg.sender, address(this), signature);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe0fd441c84ac907cabc88db69ef04f6d7532d770c7e6a1dfe6e7d6305debb49\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport \\\"@openzeppelin/contracts/access/IAccessControl.sol\\\";\\n\\n/**\\n * @title IAccessControlManagerV8\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\\n */\\ninterface IAccessControlManagerV8 is IAccessControl {\\n    function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n    function revokeCallPermission(\\n        address contractAddress,\\n        string calldata functionSig,\\n        address accountToRevoke\\n    ) external;\\n\\n    function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n    function hasPermission(\\n        address account,\\n        address contractAddress,\\n        string calldata functionSig\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xaa29b098440d0b3a131c5ecdf25ce548790c1b5ac7bf9b5c0264b6af6f7a1e0b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Comptroller.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\n\\nimport { ComptrollerInterface, Action } from \\\"./ComptrollerInterface.sol\\\";\\nimport { ComptrollerStorage } from \\\"./ComptrollerStorage.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"./MaxLoopsLimitHelper.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title Comptroller\\n * @author Venus\\n * @notice The Comptroller is designed to provide checks for all minting, redeeming, transferring, borrowing, lending, repaying, liquidating,\\n * and seizing done by the `vToken` contract. Each pool has one `Comptroller` checking these interactions across markets. When a user interacts\\n * with a given market by one of these main actions, a call is made to a corresponding hook in the associated `Comptroller`, which either allows\\n * or reverts the transaction. These hooks also update supply and borrow rewards as they are called. The comptroller holds the logic for assessing\\n * liquidity snapshots of an account via the collateral factor and liquidation threshold. This check determines the collateral needed for a borrow,\\n * as well as how much of a borrow may be liquidated. A user may borrow a portion of their collateral with the maximum amount determined by the\\n * markets collateral factor. However, if their borrowed amount exceeds an amount calculated using the market\\u2019s corresponding liquidation threshold,\\n * the borrow is eligible for liquidation.\\n *\\n * The `Comptroller` also includes two functions `liquidateAccount()` and `healAccount()`, which are meant to handle accounts that do not exceed\\n * the `minLiquidatableCollateral` for the `Comptroller`:\\n *\\n * - `healAccount()`: This function is called to seize all of a given user\\u2019s collateral, requiring the `msg.sender` repay a certain percentage\\n * of the debt calculated by `collateral/(borrows*liquidationIncentive)`. The function can only be called if the calculated percentage does not exceed\\n * 100%, because otherwise no `badDebt` would be created and `liquidateAccount()` should be used instead. The difference in the actual amount of debt\\n * and debt paid off is recorded as `badDebt` for each market, which can then be auctioned off for the risk reserves of the associated pool.\\n * - `liquidateAccount()`: This function can only be called if the collateral seized will cover all borrows of an account, as well as the liquidation\\n * incentive. Otherwise, the pool will incur bad debt, in which case the function `healAccount()` should be used instead. This function skips the logic\\n * verifying that the repay amount does not exceed the close factor.\\n */\\ncontract Comptroller is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    ComptrollerStorage,\\n    ComptrollerInterface,\\n    ExponentialNoError,\\n    MaxLoopsLimitHelper\\n{\\n    // PoolRegistry, immutable to save on gas\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    address public immutable poolRegistry;\\n\\n    /// @notice Emitted when an account enters a market\\n    event MarketEntered(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when an account exits a market\\n    event MarketExited(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when close factor is changed by admin\\n    event NewCloseFactor(uint256 oldCloseFactorMantissa, uint256 newCloseFactorMantissa);\\n\\n    /// @notice Emitted when a collateral factor is changed by admin\\n    event NewCollateralFactor(VToken vToken, uint256 oldCollateralFactorMantissa, uint256 newCollateralFactorMantissa);\\n\\n    /// @notice Emitted when liquidation threshold is changed by admin\\n    event NewLiquidationThreshold(\\n        VToken vToken,\\n        uint256 oldLiquidationThresholdMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    );\\n\\n    /// @notice Emitted when liquidation incentive is changed by admin\\n    event NewLiquidationIncentive(uint256 oldLiquidationIncentiveMantissa, uint256 newLiquidationIncentiveMantissa);\\n\\n    /// @notice Emitted when price oracle is changed\\n    event NewPriceOracle(ResilientOracleInterface oldPriceOracle, ResilientOracleInterface newPriceOracle);\\n\\n    /// @notice Emitted when an action is paused on a market\\n    event ActionPausedMarket(VToken vToken, Action action, bool pauseState);\\n\\n    /// @notice Emitted when borrow cap for a vToken is changed\\n    event NewBorrowCap(VToken indexed vToken, uint256 newBorrowCap);\\n\\n    /// @notice Emitted when the collateral threshold (in USD) for non-batch liquidations is changed\\n    event NewMinLiquidatableCollateral(uint256 oldMinLiquidatableCollateral, uint256 newMinLiquidatableCollateral);\\n\\n    /// @notice Emitted when supply cap for a vToken is changed\\n    event NewSupplyCap(VToken indexed vToken, uint256 newSupplyCap);\\n\\n    /// @notice Emitted when a rewards distributor is added\\n    event NewRewardsDistributor(address indexed rewardsDistributor, address indexed rewardToken);\\n\\n    /// @notice Emitted when a market is supported\\n    event MarketSupported(VToken vToken);\\n\\n    /// @notice Emitted when prime token contract address is changed\\n    event NewPrimeToken(IPrime oldPrimeToken, IPrime newPrimeToken);\\n\\n    /// @notice Emitted when forced liquidation is enabled or disabled for a market\\n    event IsForcedLiquidationEnabledUpdated(address indexed vToken, bool enable);\\n\\n    /// @notice Emitted when a market is unlisted\\n    event MarketUnlisted(address indexed vToken);\\n    /// @notice Emitted when the borrowing or redeeming delegate rights are updated for an account\\n    event DelegateUpdated(address indexed approver, address indexed delegate, bool approved);\\n\\n    /// @notice Thrown when collateral factor exceeds the upper bound\\n    error InvalidCollateralFactor();\\n\\n    /// @notice Thrown when liquidation threshold exceeds the collateral factor\\n    error InvalidLiquidationThreshold();\\n\\n    /// @notice Thrown when the action is only available to specific sender, but the real sender was different\\n    error UnexpectedSender(address expectedSender, address actualSender);\\n\\n    /// @notice Thrown when the oracle returns an invalid price for some asset\\n    error PriceError(address vToken);\\n\\n    /// @notice Thrown if VToken unexpectedly returned a nonzero error code while trying to get account snapshot\\n    error SnapshotError(address vToken, address user);\\n\\n    /// @notice Thrown when the market is not listed\\n    error MarketNotListed(address market);\\n\\n    /// @notice Thrown when a market has an unexpected comptroller\\n    error ComptrollerMismatch();\\n\\n    /// @notice Thrown when user is not member of market\\n    error MarketNotCollateral(address vToken, address user);\\n\\n    /// @notice Thrown when borrow action is not paused\\n    error BorrowActionNotPaused();\\n\\n    /// @notice Thrown when mint action is not paused\\n    error MintActionNotPaused();\\n\\n    /// @notice Thrown when redeem action is not paused\\n    error RedeemActionNotPaused();\\n\\n    /// @notice Thrown when repay action is not paused\\n    error RepayActionNotPaused();\\n\\n    /// @notice Thrown when seize action is not paused\\n    error SeizeActionNotPaused();\\n\\n    /// @notice Thrown when exit market action is not paused\\n    error ExitMarketActionNotPaused();\\n\\n    /// @notice Thrown when transfer action is not paused\\n    error TransferActionNotPaused();\\n\\n    /// @notice Thrown when enter market action is not paused\\n    error EnterMarketActionNotPaused();\\n\\n    /// @notice Thrown when liquidate action is not paused\\n    error LiquidateActionNotPaused();\\n\\n    /// @notice Thrown when borrow cap is not zero\\n    error BorrowCapIsNotZero();\\n\\n    /// @notice Thrown when supply cap is not zero\\n    error SupplyCapIsNotZero();\\n\\n    /// @notice Thrown when collateral factor is not zero\\n    error CollateralFactorIsNotZero();\\n\\n    /**\\n     * @notice Thrown during the liquidation if user's total collateral amount is lower than\\n     *   a predefined threshold. In this case only batch liquidations (either liquidateAccount\\n     *   or healAccount) are available.\\n     */\\n    error MinimalCollateralViolated(uint256 expectedGreaterThan, uint256 actual);\\n    error CollateralExceedsThreshold(uint256 expectedLessThanOrEqualTo, uint256 actual);\\n    error InsufficientCollateral(uint256 collateralToSeize, uint256 availableCollateral);\\n\\n    /// @notice Thrown when the account doesn't have enough liquidity to redeem or borrow\\n    error InsufficientLiquidity();\\n\\n    /// @notice Thrown when trying to liquidate a healthy account\\n    error InsufficientShortfall();\\n\\n    /// @notice Thrown when trying to repay more than allowed by close factor\\n    error TooMuchRepay();\\n\\n    /// @notice Thrown if the user is trying to exit a market in which they have an outstanding debt\\n    error NonzeroBorrowBalance();\\n\\n    /// @notice Thrown when trying to perform an action that is paused\\n    error ActionPaused(address market, Action action);\\n\\n    /// @notice Thrown when trying to add a market that is already listed\\n    error MarketAlreadyListed(address market);\\n\\n    /// @notice Thrown if the supply cap is exceeded\\n    error SupplyCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if the borrow cap is exceeded\\n    error BorrowCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if delegate approval status is already set to the requested value\\n    error DelegationStatusUnchanged();\\n\\n    /// @param poolRegistry_ Pool registry address\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    /// @custom:error ZeroAddressNotAllowed is thrown when pool registry address is zero\\n    constructor(address poolRegistry_) {\\n        ensureNonzeroAddress(poolRegistry_);\\n\\n        poolRegistry = poolRegistry_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @param loopLimit Limit for the loops can iterate to avoid the DOS\\n     * @param accessControlManager Access control manager contract address\\n     */\\n    function initialize(uint256 loopLimit, address accessControlManager) external initializer {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager);\\n\\n        _setMaxLoopsLimit(loopLimit);\\n    }\\n\\n    /**\\n     * @notice Add assets to be included in account liquidity calculation; enabling them to be used as collateral\\n     * @param vTokens The list of addresses of the vToken markets to be enabled\\n     * @return errors An array of NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketEntered is emitted for each market on success\\n     * @custom:error ActionPaused error is thrown if entering any of the markets is paused\\n     * @custom:error MarketNotListed error is thrown if any of the markets is not listed\\n     * @custom:access Not restricted\\n     */\\n    function enterMarkets(address[] memory vTokens) external override returns (uint256[] memory) {\\n        uint256 len = vTokens.length;\\n\\n        uint256[] memory results = new uint256[](len);\\n        for (uint256 i; i < len; ++i) {\\n            VToken vToken = VToken(vTokens[i]);\\n\\n            _addToMarket(vToken, msg.sender);\\n            results[i] = NO_ERROR;\\n        }\\n\\n        return results;\\n    }\\n\\n    /**\\n     * @notice Unlist a market by setting isListed to false\\n     * @dev Checks if all actions are paused, borrow/supply caps is set to 0 and collateral factor is to 0.\\n     * @param market The address of the market (token) to unlist\\n     * @return uint256 Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketUnlisted is emitted on success\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error BorrowActionNotPaused error is thrown if borrow action is not paused\\n     * @custom:error MintActionNotPaused error is thrown if mint action is not paused\\n     * @custom:error RedeemActionNotPaused error is thrown if redeem action is not paused\\n     * @custom:error RepayActionNotPaused error is thrown if repay action is not paused\\n     * @custom:error EnterMarketActionNotPaused error is thrown if enter market action is not paused\\n     * @custom:error LiquidateActionNotPaused error is thrown if liquidate action is not paused\\n     * @custom:error BorrowCapIsNotZero error is thrown if borrow cap is not zero\\n     * @custom:error SupplyCapIsNotZero error is thrown if supply cap is not zero\\n     * @custom:error CollateralFactorIsNotZero error is thrown if collateral factor is not zero\\n     */\\n    function unlistMarket(address market) external returns (uint256) {\\n        _checkAccessAllowed(\\\"unlistMarket(address)\\\");\\n\\n        Market storage _market = markets[market];\\n\\n        if (!_market.isListed) {\\n            revert MarketNotListed(market);\\n        }\\n\\n        if (!actionPaused(market, Action.BORROW)) {\\n            revert BorrowActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.MINT)) {\\n            revert MintActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REDEEM)) {\\n            revert RedeemActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REPAY)) {\\n            revert RepayActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.SEIZE)) {\\n            revert SeizeActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.ENTER_MARKET)) {\\n            revert EnterMarketActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.LIQUIDATE)) {\\n            revert LiquidateActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.TRANSFER)) {\\n            revert TransferActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.EXIT_MARKET)) {\\n            revert ExitMarketActionNotPaused();\\n        }\\n\\n        if (borrowCaps[market] != 0) {\\n            revert BorrowCapIsNotZero();\\n        }\\n\\n        if (supplyCaps[market] != 0) {\\n            revert SupplyCapIsNotZero();\\n        }\\n\\n        if (_market.collateralFactorMantissa != 0) {\\n            revert CollateralFactorIsNotZero();\\n        }\\n\\n        _market.isListed = false;\\n        emit MarketUnlisted(market);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Grants or revokes the borrowing or redeeming delegate rights to / from an account\\n     *  If allowed, the delegate will be able to borrow funds on behalf of the sender\\n     *  Upon a delegated borrow, the delegate will receive the funds, and the borrower\\n     *  will see the debt on their account\\n     *  Upon a delegated redeem, the delegate will receive the redeemed amount and the approver\\n     *  will see a deduction in his vToken balance\\n     * @param delegate The address to update the rights for\\n     * @param approved Whether to grant (true) or revoke (false) the borrowing or redeeming rights\\n     * @custom:event DelegateUpdated emits on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when delegate address is zero\\n     * @custom:error DelegationStatusUnchanged is thrown if approval status is already set to the requested value\\n     * @custom:access Not restricted\\n     */\\n    function updateDelegate(address delegate, bool approved) external {\\n        ensureNonzeroAddress(delegate);\\n        if (approvedDelegates[msg.sender][delegate] == approved) {\\n            revert DelegationStatusUnchanged();\\n        }\\n\\n        approvedDelegates[msg.sender][delegate] = approved;\\n        emit DelegateUpdated(msg.sender, delegate, approved);\\n    }\\n\\n    /**\\n     * @notice Removes asset from sender's account liquidity calculation; disabling them as collateral\\n     * @dev Sender must not have an outstanding borrow balance in the asset,\\n     *  or be providing necessary collateral for an outstanding borrow.\\n     * @param vTokenAddress The address of the asset to be removed\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketExited is emitted on success\\n     * @custom:error ActionPaused error is thrown if exiting the market is paused\\n     * @custom:error NonzeroBorrowBalance error is thrown if the user has an outstanding borrow in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if exiting the market would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function exitMarket(address vTokenAddress) external override returns (uint256) {\\n        _checkActionPauseState(vTokenAddress, Action.EXIT_MARKET);\\n        VToken vToken = VToken(vTokenAddress);\\n        /* Get sender tokensHeld and amountOwed underlying from the vToken */\\n        (uint256 tokensHeld, uint256 amountOwed, ) = _safeGetAccountSnapshot(vToken, msg.sender);\\n\\n        /* Fail if the sender has a borrow balance */\\n        if (amountOwed != 0) {\\n            revert NonzeroBorrowBalance();\\n        }\\n\\n        /* Fail if the sender is not permitted to redeem all of their tokens */\\n        _checkRedeemAllowed(vTokenAddress, msg.sender, tokensHeld);\\n\\n        Market storage marketToExit = markets[address(vToken)];\\n\\n        /* Return true if the sender is not already \\u2018in\\u2019 the market */\\n        if (!marketToExit.accountMembership[msg.sender]) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Set vToken account membership to false */\\n        delete marketToExit.accountMembership[msg.sender];\\n\\n        /* Delete vToken from the account\\u2019s list of assets */\\n        // load into memory for faster iteration\\n        VToken[] memory userAssetList = accountAssets[msg.sender];\\n        uint256 len = userAssetList.length;\\n\\n        uint256 assetIndex = len;\\n        for (uint256 i; i < len; ++i) {\\n            if (userAssetList[i] == vToken) {\\n                assetIndex = i;\\n                break;\\n            }\\n        }\\n\\n        // We *must* have found the asset in the list or our redundant data structure is broken\\n        assert(assetIndex < len);\\n\\n        // copy last item in list to location of item to be removed, reduce length by 1\\n        VToken[] storage storedList = accountAssets[msg.sender];\\n        storedList[assetIndex] = storedList[storedList.length - 1];\\n        storedList.pop();\\n\\n        emit MarketExited(vToken, msg.sender);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /*** Policy Hooks ***/\\n\\n    /**\\n     * @notice Checks if the account should be allowed to mint tokens in the given market\\n     * @param vToken The market to verify the mint against\\n     * @param minter The account which would get the minted tokens\\n     * @param mintAmount The amount of underlying being supplied to the market in exchange for tokens\\n     * @custom:error ActionPaused error is thrown if supplying to this market is paused\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error SupplyCapExceeded error is thrown if the total supply exceeds the cap after minting\\n     * @custom:access Not restricted\\n     */\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external override {\\n        _checkActionPauseState(vToken, Action.MINT);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        uint256 supplyCap = supplyCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (supplyCap != type(uint256).max) {\\n            uint256 vTokenSupply = VToken(vToken).totalSupply();\\n            Exp memory exchangeRate = Exp({ mantissa: VToken(vToken).exchangeRateStored() });\\n            uint256 nextTotalSupply = mul_ScalarTruncateAddUInt(exchangeRate, vTokenSupply, mintAmount);\\n            if (nextTotalSupply > supplyCap) {\\n                revert SupplyCapExceeded(vToken, supplyCap);\\n            }\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, minter);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates mint, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being minted\\n     * @param minter The address minting the tokens\\n     * @param actualMintAmount The amount of the underlying asset being minted\\n     * @param mintTokens The number of tokens being minted\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function mintVerify(address vToken, address minter, uint256 actualMintAmount, uint256 mintTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(minter, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to redeem tokens in the given market\\n     * @param vToken The market to verify the redeem against\\n     * @param redeemer The account which would redeem the tokens\\n     * @param redeemTokens The number of vTokens to exchange for the underlying asset in the market\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external override {\\n        _checkActionPauseState(vToken, Action.REDEEM);\\n\\n        _checkRedeemAllowed(vToken, redeemer, redeemTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, redeemer);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates redeem, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being redeemed\\n     * @param redeemer The address redeeming the tokens\\n     * @param redeemAmount The amount of the underlying asset being redeemed\\n     * @param redeemTokens The number of tokens being redeemed\\n     */\\n    function redeemVerify(address vToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(redeemer, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates repayBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being repaid\\n     * @param payer The address repaying the borrow\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     */\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer, // solhint-disable-line no-unused-vars\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 borrowerIndex // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates liquidateBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     * @param seizeTokens The amount of collateral token that will be seized\\n     */\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenBorrowed);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenBorrowed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates seize, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param seizeTokens The number of collateral tokens to seize\\n     */\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenCollateral);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenCollateral);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates transfer, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being transferred\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function transferVerify(address vToken, address src, address dst, uint256 transferTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(src, vToken);\\n            prime.accrueInterestAndUpdateScore(dst, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to borrow the underlying asset of the given market\\n     * @param vToken The market to verify the borrow against\\n     * @param borrower The account which would borrow the asset\\n     * @param borrowAmount The amount of underlying the account would borrow\\n     * @custom:error ActionPaused error is thrown if borrowing is paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if there is not enough collateral to borrow\\n     * @custom:error BorrowCapExceeded is thrown if the borrow cap will be exceeded should this borrow succeed\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted if vToken is enabled as collateral, otherwise only vToken\\n     */\\n    /// disable-eslint\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external override {\\n        _checkActionPauseState(vToken, Action.BORROW);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (!markets[vToken].accountMembership[borrower]) {\\n            // only vTokens may call borrowAllowed if borrower not in market\\n            _checkSenderIs(vToken);\\n\\n            // attempt to add borrower to the market or revert\\n            _addToMarket(VToken(msg.sender), borrower);\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (oracle.getUnderlyingPrice(vToken) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 borrowCap = borrowCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (borrowCap != type(uint256).max) {\\n            uint256 totalBorrows = VToken(vToken).totalBorrows();\\n            uint256 badDebt = VToken(vToken).badDebt();\\n            uint256 nextTotalBorrows = totalBorrows + borrowAmount + badDebt;\\n            if (nextTotalBorrows > borrowCap) {\\n                revert BorrowCapExceeded(vToken, borrowCap);\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            borrower,\\n            VToken(vToken),\\n            0,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n\\n        Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates borrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset whose underlying is being borrowed\\n     * @param borrower The address borrowing the underlying\\n     * @param borrowAmount The amount of the underlying asset requested to borrow\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function borrowVerify(address vToken, address borrower, uint256 borrowAmount) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to repay a borrow in the given market\\n     * @param vToken The market to verify the repay against\\n     * @param borrower The account which would borrowed the asset\\n     * @custom:error ActionPaused error is thrown if repayments are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:access Not restricted\\n     */\\n    function preRepayHook(address vToken, address borrower) external override {\\n        _checkActionPauseState(vToken, Action.REPAY);\\n\\n        oracle.updatePrice(vToken);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the liquidation should be allowed to occur\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param borrower The address of the borrower\\n     * @param repayAmount The amount of underlying being repaid\\n     * @param skipLiquidityCheck Allows the borrow to be liquidated regardless of the account liquidity\\n     * @custom:error ActionPaused error is thrown if liquidations are paused in this market\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error TooMuchRepay error is thrown if the liquidator is trying to repay more than allowed by close factor\\n     * @custom:error MinimalCollateralViolated is thrown if the users' total collateral is lower than the threshold for non-batch liquidations\\n     * @custom:error InsufficientShortfall is thrown when trying to liquidate a healthy account\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     */\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        // Pause Action.LIQUIDATE on BORROWED TOKEN to prevent liquidating it.\\n        // If we want to pause liquidating to vTokenCollateral, we should pause\\n        // Action.SEIZE on it\\n        _checkActionPauseState(vTokenBorrowed, Action.LIQUIDATE);\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(address(vTokenBorrowed));\\n        }\\n        if (!markets[vTokenCollateral].isListed) {\\n            revert MarketNotListed(address(vTokenCollateral));\\n        }\\n\\n        uint256 borrowBalance = VToken(vTokenBorrowed).borrowBalanceStored(borrower);\\n\\n        /* Allow accounts to be liquidated if it is a forced liquidation */\\n        if (skipLiquidityCheck || isForcedLiquidationEnabled[vTokenBorrowed]) {\\n            if (repayAmount > borrowBalance) {\\n                revert TooMuchRepay();\\n            }\\n            return;\\n        }\\n\\n        /* The borrower must have shortfall and collateral > threshold in order to be liquidatable */\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral <= minLiquidatableCollateral) {\\n            /* The liquidator should use either liquidateAccount or healAccount */\\n            revert MinimalCollateralViolated(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        /* The liquidator may not repay more than what is allowed by the closeFactor */\\n        uint256 maxClose = mul_ScalarTruncate(Exp({ mantissa: closeFactorMantissa }), borrowBalance);\\n        if (repayAmount > maxClose) {\\n            revert TooMuchRepay();\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the seizing of assets should be allowed to occur\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param seizerContract Contract that tries to seize the asset (either borrowed vToken or Comptroller)\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @custom:error ActionPaused error is thrown if seizing this type of collateral is paused\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error ComptrollerMismatch error is when seizer contract or seized asset belong to different pools\\n     * @custom:access Not restricted\\n     */\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address seizerContract,\\n        address liquidator,\\n        address borrower\\n    ) external override {\\n        // Pause Action.SEIZE on COLLATERAL to prevent seizing it.\\n        // If we want to pause liquidating vTokenBorrowed, we should pause\\n        // Action.LIQUIDATE on it\\n        _checkActionPauseState(vTokenCollateral, Action.SEIZE);\\n\\n        Market storage market = markets[vTokenCollateral];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(vTokenCollateral);\\n        }\\n\\n        if (seizerContract == address(this)) {\\n            // If Comptroller is the seizer, just check if collateral's comptroller\\n            // is equal to the current address\\n            if (address(VToken(vTokenCollateral).comptroller()) != address(this)) {\\n                revert ComptrollerMismatch();\\n            }\\n        } else {\\n            // If the seizer is not the Comptroller, check that the seizer is a\\n            // listed market, and that the markets' comptrollers match\\n            if (!markets[seizerContract].isListed) {\\n                revert MarketNotListed(seizerContract);\\n            }\\n            if (VToken(vTokenCollateral).comptroller() != VToken(seizerContract).comptroller()) {\\n                revert ComptrollerMismatch();\\n            }\\n        }\\n\\n        if (!market.accountMembership[borrower]) {\\n            revert MarketNotCollateral(vTokenCollateral, borrower);\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vTokenCollateral);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, borrower);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, liquidator);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to transfer tokens in the given market\\n     * @param vToken The market to verify the transfer against\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external override {\\n        _checkActionPauseState(vToken, Action.TRANSFER);\\n\\n        // Currently the only consideration is whether or not\\n        //  the src is allowed to redeem this many tokens\\n        _checkRedeemAllowed(vToken, src, transferTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, src);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, dst);\\n        }\\n    }\\n\\n    /*** Pool-level operations ***/\\n\\n    /**\\n     * @notice Seizes all the remaining collateral, makes msg.sender repay the existing\\n     *   borrows, and treats the rest of the debt as bad debt (for each market).\\n     *   The sender has to repay a certain percentage of the debt, computed as\\n     *   collateral / (borrows * liquidationIncentive).\\n     * @param user account to heal\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for healing\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function healAccount(address user) external {\\n        VToken[] memory userAssets = getAssetsIn(user);\\n        uint256 userAssetsCount = userAssets.length;\\n\\n        address liquidator = msg.sender;\\n        {\\n            ResilientOracleInterface oracle_ = oracle;\\n            // We need all user's markets to be fresh for the computations to be correct\\n            for (uint256 i; i < userAssetsCount; ++i) {\\n                userAssets[i].accrueInterest();\\n                oracle_.updatePrice(address(userAssets[i]));\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(user, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        // percentage = collateral / (borrows * liquidation incentive)\\n        Exp memory collateral = Exp({ mantissa: snapshot.totalCollateral });\\n        Exp memory scaledBorrows = mul_(\\n            Exp({ mantissa: snapshot.borrows }),\\n            Exp({ mantissa: liquidationIncentiveMantissa })\\n        );\\n\\n        Exp memory percentage = div_(collateral, scaledBorrows);\\n        if (lessThanExp(Exp({ mantissa: MANTISSA_ONE }), percentage)) {\\n            revert CollateralExceedsThreshold(scaledBorrows.mantissa, collateral.mantissa);\\n        }\\n\\n        for (uint256 i; i < userAssetsCount; ++i) {\\n            VToken market = userAssets[i];\\n\\n            (uint256 tokens, uint256 borrowBalance, ) = _safeGetAccountSnapshot(market, user);\\n            uint256 repaymentAmount = mul_ScalarTruncate(percentage, borrowBalance);\\n\\n            // Seize the entire collateral\\n            if (tokens != 0) {\\n                market.seize(liquidator, user, tokens);\\n            }\\n            // Repay a certain percentage of the borrow, forgive the rest\\n            if (borrowBalance != 0) {\\n                market.healBorrow(liquidator, user, repaymentAmount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Liquidates all borrows of the borrower. Callable only if the collateral is less than\\n     *   a predefined threshold, and the account collateral can be seized to cover all borrows. If\\n     *   the collateral is higher than the threshold, use regular liquidations. If the collateral is\\n     *   below the threshold, and the account is insolvent, use healAccount.\\n     * @param borrower the borrower address\\n     * @param orders an array of liquidation orders\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for a batch liquidation\\n     * @custom:error InsufficientCollateral error is thrown when there is not enough collateral to cover the debt\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function liquidateAccount(address borrower, LiquidationOrder[] calldata orders) external {\\n        // We will accrue interest and update the oracle prices later during the liquidation\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            // You should use the regular vToken.liquidateBorrow(...) call\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        uint256 collateralToSeize = mul_ScalarTruncate(\\n            Exp({ mantissa: liquidationIncentiveMantissa }),\\n            snapshot.borrows\\n        );\\n        if (collateralToSeize >= snapshot.totalCollateral) {\\n            // There is not enough collateral to seize. Use healBorrow to repay some part of the borrow\\n            // and record bad debt.\\n            revert InsufficientCollateral(collateralToSeize, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        uint256 ordersCount = orders.length;\\n\\n        _ensureMaxLoops(ordersCount / 2);\\n\\n        for (uint256 i; i < ordersCount; ++i) {\\n            if (!markets[address(orders[i].vTokenBorrowed)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenBorrowed));\\n            }\\n            if (!markets[address(orders[i].vTokenCollateral)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenCollateral));\\n            }\\n\\n            LiquidationOrder calldata order = orders[i];\\n            order.vTokenBorrowed.forceLiquidateBorrow(\\n                msg.sender,\\n                borrower,\\n                order.repayAmount,\\n                order.vTokenCollateral,\\n                true\\n            );\\n        }\\n\\n        VToken[] memory borrowMarkets = getAssetsIn(borrower);\\n        uint256 marketsCount = borrowMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            (, uint256 borrowBalance, ) = _safeGetAccountSnapshot(borrowMarkets[i], borrower);\\n            require(borrowBalance == 0, \\\"Nonzero borrow balance after liquidation\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets the closeFactor to use when liquidating borrows\\n     * @param newCloseFactorMantissa New close factor, scaled by 1e18\\n     * @custom:event Emits NewCloseFactor on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCloseFactor(uint256 newCloseFactorMantissa) external {\\n        _checkAccessAllowed(\\\"setCloseFactor(uint256)\\\");\\n        require(MAX_CLOSE_FACTOR_MANTISSA >= newCloseFactorMantissa, \\\"Close factor greater than maximum close factor\\\");\\n        require(MIN_CLOSE_FACTOR_MANTISSA <= newCloseFactorMantissa, \\\"Close factor smaller than minimum close factor\\\");\\n\\n        uint256 oldCloseFactorMantissa = closeFactorMantissa;\\n        closeFactorMantissa = newCloseFactorMantissa;\\n        emit NewCloseFactor(oldCloseFactorMantissa, newCloseFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Sets the collateralFactor for a market\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param vToken The market to set the factor on\\n     * @param newCollateralFactorMantissa The new collateral factor, scaled by 1e18\\n     * @param newLiquidationThresholdMantissa The new liquidation threshold, scaled by 1e18\\n     * @custom:event Emits NewCollateralFactor when collateral factor is updated\\n     *    and NewLiquidationThreshold when liquidation threshold is updated\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InvalidCollateralFactor error is thrown when collateral factor is too high\\n     * @custom:error InvalidLiquidationThreshold error is thrown when liquidation threshold is lower than collateral factor\\n     * @custom:error PriceError is thrown when the oracle returns an invalid price for the asset\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCollateralFactor(\\n        VToken vToken,\\n        uint256 newCollateralFactorMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    ) external {\\n        _checkAccessAllowed(\\\"setCollateralFactor(address,uint256,uint256)\\\");\\n\\n        // Verify market is listed\\n        Market storage market = markets[address(vToken)];\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Check collateral factor <= 0.9\\n        if (newCollateralFactorMantissa > MAX_COLLATERAL_FACTOR_MANTISSA) {\\n            revert InvalidCollateralFactor();\\n        }\\n\\n        // Ensure that liquidation threshold <= 1\\n        if (newLiquidationThresholdMantissa > MANTISSA_ONE) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // Ensure that liquidation threshold >= CF\\n        if (newLiquidationThresholdMantissa < newCollateralFactorMantissa) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // If collateral factor != 0, fail if price == 0\\n        if (newCollateralFactorMantissa != 0 && oracle.getUnderlyingPrice(address(vToken)) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 oldCollateralFactorMantissa = market.collateralFactorMantissa;\\n        if (newCollateralFactorMantissa != oldCollateralFactorMantissa) {\\n            market.collateralFactorMantissa = newCollateralFactorMantissa;\\n            emit NewCollateralFactor(vToken, oldCollateralFactorMantissa, newCollateralFactorMantissa);\\n        }\\n\\n        uint256 oldLiquidationThresholdMantissa = market.liquidationThresholdMantissa;\\n        if (newLiquidationThresholdMantissa != oldLiquidationThresholdMantissa) {\\n            market.liquidationThresholdMantissa = newLiquidationThresholdMantissa;\\n            emit NewLiquidationThreshold(vToken, oldLiquidationThresholdMantissa, newLiquidationThresholdMantissa);\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets liquidationIncentive\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newLiquidationIncentiveMantissa New liquidationIncentive scaled by 1e18\\n     * @custom:event Emits NewLiquidationIncentive on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setLiquidationIncentive(uint256 newLiquidationIncentiveMantissa) external {\\n        require(newLiquidationIncentiveMantissa >= MANTISSA_ONE, \\\"liquidation incentive should be greater than 1e18\\\");\\n\\n        _checkAccessAllowed(\\\"setLiquidationIncentive(uint256)\\\");\\n\\n        // Save current value for use in log\\n        uint256 oldLiquidationIncentiveMantissa = liquidationIncentiveMantissa;\\n\\n        // Set liquidation incentive to new incentive\\n        liquidationIncentiveMantissa = newLiquidationIncentiveMantissa;\\n\\n        // Emit event with old incentive, new incentive\\n        emit NewLiquidationIncentive(oldLiquidationIncentiveMantissa, newLiquidationIncentiveMantissa);\\n    }\\n\\n    /**\\n     * @notice Add the market to the markets mapping and set it as listed\\n     * @dev Only callable by the PoolRegistry\\n     * @param vToken The address of the market (token) to list\\n     * @custom:error MarketAlreadyListed is thrown if the market is already listed in this pool\\n     * @custom:access Only PoolRegistry\\n     */\\n    function supportMarket(VToken vToken) external {\\n        _checkSenderIs(poolRegistry);\\n\\n        if (markets[address(vToken)].isListed) {\\n            revert MarketAlreadyListed(address(vToken));\\n        }\\n\\n        require(vToken.isVToken(), \\\"Comptroller: Invalid vToken\\\"); // Sanity check to make sure its really a VToken\\n\\n        Market storage newMarket = markets[address(vToken)];\\n        newMarket.isListed = true;\\n        newMarket.collateralFactorMantissa = 0;\\n        newMarket.liquidationThresholdMantissa = 0;\\n\\n        _addMarket(address(vToken));\\n\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            rewardsDistributors[i].initializeMarket(address(vToken));\\n        }\\n\\n        emit MarketSupported(vToken);\\n    }\\n\\n    /**\\n     * @notice Set the given borrow caps for the given vToken markets. Borrowing that brings total borrows to or above borrow cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A borrow cap of type(uint256).max corresponds to unlimited borrowing.\\n     * @dev Borrow caps smaller than the current total borrows are accepted. This way, new borrows will not be allowed\\n            until the total borrows amount goes below the new borrow cap\\n     * @param vTokens The addresses of the markets (tokens) to change the borrow caps for\\n     * @param newBorrowCaps The new borrow cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited borrowing.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketBorrowCaps(VToken[] calldata vTokens, uint256[] calldata newBorrowCaps) external {\\n        _checkAccessAllowed(\\\"setMarketBorrowCaps(address[],uint256[])\\\");\\n\\n        uint256 numMarkets = vTokens.length;\\n        uint256 numBorrowCaps = newBorrowCaps.length;\\n\\n        require(numMarkets != 0 && numMarkets == numBorrowCaps, \\\"invalid input\\\");\\n\\n        _ensureMaxLoops(numMarkets);\\n\\n        for (uint256 i; i < numMarkets; ++i) {\\n            borrowCaps[address(vTokens[i])] = newBorrowCaps[i];\\n            emit NewBorrowCap(vTokens[i], newBorrowCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given supply caps for the given vToken markets. Supply that brings total Supply to or above supply cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A supply cap of type(uint256).max corresponds to unlimited supply.\\n     * @dev Supply caps smaller than the current total supplies are accepted. This way, new supplies will not be allowed\\n            until the total supplies amount goes below the new supply cap\\n     * @param vTokens The addresses of the markets (tokens) to change the supply caps for\\n     * @param newSupplyCaps The new supply cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited supply.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketSupplyCaps(VToken[] calldata vTokens, uint256[] calldata newSupplyCaps) external {\\n        _checkAccessAllowed(\\\"setMarketSupplyCaps(address[],uint256[])\\\");\\n        uint256 vTokensCount = vTokens.length;\\n\\n        require(vTokensCount != 0, \\\"invalid number of markets\\\");\\n        require(vTokensCount == newSupplyCaps.length, \\\"invalid number of markets\\\");\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            supplyCaps[address(vTokens[i])] = newSupplyCaps[i];\\n            emit NewSupplyCap(vTokens[i], newSupplyCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Pause/unpause specified actions\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param marketsList Markets to pause/unpause the actions on\\n     * @param actionsList List of action ids to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setActionsPaused(VToken[] calldata marketsList, Action[] calldata actionsList, bool paused) external {\\n        _checkAccessAllowed(\\\"setActionsPaused(address[],uint256[],bool)\\\");\\n\\n        uint256 marketsCount = marketsList.length;\\n        uint256 actionsCount = actionsList.length;\\n\\n        _ensureMaxLoops(marketsCount * actionsCount);\\n\\n        for (uint256 marketIdx; marketIdx < marketsCount; ++marketIdx) {\\n            for (uint256 actionIdx; actionIdx < actionsCount; ++actionIdx) {\\n                _setActionPaused(address(marketsList[marketIdx]), actionsList[actionIdx], paused);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given collateral threshold for non-batch liquidations. Regular liquidations\\n     *   will fail if the collateral amount is less than this threshold. Liquidators should use batch\\n     *   operations like liquidateAccount or healAccount.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newMinLiquidatableCollateral The new min liquidatable collateral (in USD).\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMinLiquidatableCollateral(uint256 newMinLiquidatableCollateral) external {\\n        _checkAccessAllowed(\\\"setMinLiquidatableCollateral(uint256)\\\");\\n\\n        uint256 oldMinLiquidatableCollateral = minLiquidatableCollateral;\\n        minLiquidatableCollateral = newMinLiquidatableCollateral;\\n        emit NewMinLiquidatableCollateral(oldMinLiquidatableCollateral, newMinLiquidatableCollateral);\\n    }\\n\\n    /**\\n     * @notice Add a new RewardsDistributor and initialize it with all markets. We can add several RewardsDistributor\\n     * contracts with the same rewardToken, and there could be overlaping among them considering the last reward slot (block or second)\\n     * @dev Only callable by the admin\\n     * @param _rewardsDistributor Address of the RewardDistributor contract to add\\n     * @custom:access Only Governance\\n     * @custom:event Emits NewRewardsDistributor with distributor address\\n     */\\n    function addRewardsDistributor(RewardsDistributor _rewardsDistributor) external onlyOwner {\\n        require(!rewardsDistributorExists[address(_rewardsDistributor)], \\\"already exists\\\");\\n\\n        uint256 rewardsDistributorsLen = rewardsDistributors.length;\\n        _ensureMaxLoops(rewardsDistributorsLen + 1);\\n\\n        rewardsDistributors.push(_rewardsDistributor);\\n        rewardsDistributorExists[address(_rewardsDistributor)] = true;\\n\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            _rewardsDistributor.initializeMarket(address(allMarkets[i]));\\n        }\\n\\n        emit NewRewardsDistributor(address(_rewardsDistributor), address(_rewardsDistributor.rewardToken()));\\n    }\\n\\n    /**\\n     * @notice Sets a new price oracle for the Comptroller\\n     * @dev Only callable by the admin\\n     * @param newOracle Address of the new price oracle to set\\n     * @custom:event Emits NewPriceOracle on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when the new oracle address is zero\\n     */\\n    function setPriceOracle(ResilientOracleInterface newOracle) external onlyOwner {\\n        ensureNonzeroAddress(address(newOracle));\\n\\n        ResilientOracleInterface oldOracle = oracle;\\n        oracle = newOracle;\\n        emit NewPriceOracle(oldOracle, newOracle);\\n    }\\n\\n    /**\\n     * @notice Set the for loop iteration limit to avoid DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Sets the prime token contract for the comptroller\\n     * @param _prime Address of the Prime contract\\n     */\\n    function setPrimeToken(IPrime _prime) external onlyOwner {\\n        ensureNonzeroAddress(address(_prime));\\n\\n        emit NewPrimeToken(prime, _prime);\\n        prime = _prime;\\n    }\\n\\n    /**\\n     * @notice Enables forced liquidations for a market. If forced liquidation is enabled,\\n     * borrows in the market may be liquidated regardless of the account liquidity\\n     * @param vTokenBorrowed Borrowed vToken\\n     * @param enable Whether to enable forced liquidations\\n     */\\n    function setForcedLiquidation(address vTokenBorrowed, bool enable) external {\\n        _checkAccessAllowed(\\\"setForcedLiquidation(address,bool)\\\");\\n        ensureNonzeroAddress(vTokenBorrowed);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(vTokenBorrowed);\\n        }\\n\\n        isForcedLiquidationEnabled[vTokenBorrowed] = enable;\\n        emit IsForcedLiquidationEnabledUpdated(vTokenBorrowed, enable);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to liquidation threshold requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of liquidation threshold requirements,\\n     * @return shortfall Account shortfall below liquidation threshold requirements\\n     */\\n    function getAccountLiquidity(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getLiquidationThreshold);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to collateral requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of collateral requirements,\\n     * @return shortfall Account shortfall below collateral requirements\\n     */\\n    function getBorrowingPower(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getCollateralFactor);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine what the account liquidity would be if the given amounts were redeemed/borrowed\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Hypothetical account liquidity in excess of collateral requirements,\\n     * @return shortfall Hypothetical account shortfall below collateral requirements\\n     */\\n    function getHypotheticalAccountLiquidity(\\n        address account,\\n        address vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            account,\\n            VToken(vTokenModify),\\n            redeemTokens,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Return all of the markets\\n     * @dev The automatic getter may be used to access an individual market.\\n     * @return markets The list of market addresses\\n     */\\n    function getAllMarkets() external view override returns (VToken[] memory) {\\n        return allMarkets;\\n    }\\n\\n    /**\\n     * @notice Check if a market is marked as listed (active)\\n     * @param vToken vToken Address for the market to check\\n     * @return listed True if listed otherwise false\\n     */\\n    function isMarketListed(VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].isListed;\\n    }\\n\\n    /*** Assets You Are In ***/\\n\\n    /**\\n     * @notice Returns whether the given account is entered in a given market\\n     * @param account The address of the account to check\\n     * @param vToken The vToken to check\\n     * @return True if the account is in the market specified, otherwise false.\\n     */\\n    function checkMembership(address account, VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].accountMembership[account];\\n    }\\n\\n    /**\\n     * @notice Calculate number of tokens of collateral asset to seize given an underlying amount\\n     * @dev Used in liquidation (called in vToken.liquidateBorrowFresh)\\n     * @param vTokenBorrowed The address of the borrowed vToken\\n     * @param vTokenCollateral The address of the collateral vToken\\n     * @param actualRepayAmount The amount of vTokenBorrowed underlying to convert into vTokenCollateral tokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return tokensToSeize Number of vTokenCollateral tokens to be seized in a liquidation\\n     * @custom:error PriceError if the oracle returns an invalid price\\n     */\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 actualRepayAmount\\n    ) external view override returns (uint256 error, uint256 tokensToSeize) {\\n        /* Read oracle prices for borrowed and collateral markets */\\n        uint256 priceBorrowedMantissa = _safeGetUnderlyingPrice(VToken(vTokenBorrowed));\\n        uint256 priceCollateralMantissa = _safeGetUnderlyingPrice(VToken(vTokenCollateral));\\n\\n        /*\\n         * Get the exchange rate and calculate the number of collateral tokens to seize:\\n         *  seizeAmount = actualRepayAmount * liquidationIncentive * priceBorrowed / priceCollateral\\n         *  seizeTokens = seizeAmount / exchangeRate\\n         *   = actualRepayAmount * (liquidationIncentive * priceBorrowed) / (priceCollateral * exchangeRate)\\n         */\\n        uint256 exchangeRateMantissa = VToken(vTokenCollateral).exchangeRateStored(); // Note: reverts on error\\n        uint256 seizeTokens;\\n        Exp memory numerator;\\n        Exp memory denominator;\\n        Exp memory ratio;\\n\\n        numerator = mul_(Exp({ mantissa: liquidationIncentiveMantissa }), Exp({ mantissa: priceBorrowedMantissa }));\\n        denominator = mul_(Exp({ mantissa: priceCollateralMantissa }), Exp({ mantissa: exchangeRateMantissa }));\\n        ratio = div_(numerator, denominator);\\n\\n        seizeTokens = mul_ScalarTruncate(ratio, actualRepayAmount);\\n\\n        return (NO_ERROR, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Returns reward speed given a vToken\\n     * @param vToken The vToken to get the reward speeds for\\n     * @return rewardSpeeds Array of total supply and borrow speeds and reward token for all reward distributors\\n     */\\n    function getRewardsByMarket(address vToken) external view returns (RewardSpeeds[] memory rewardSpeeds) {\\n        uint256 rewardsDistributorsLength = rewardsDistributors.length;\\n        rewardSpeeds = new RewardSpeeds[](rewardsDistributorsLength);\\n        for (uint256 i; i < rewardsDistributorsLength; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            address rewardToken = address(rewardsDistributor.rewardToken());\\n            rewardSpeeds[i] = RewardSpeeds({\\n                rewardToken: rewardToken,\\n                supplySpeed: rewardsDistributor.rewardTokenSupplySpeeds(vToken),\\n                borrowSpeed: rewardsDistributor.rewardTokenBorrowSpeeds(vToken)\\n            });\\n        }\\n        return rewardSpeeds;\\n    }\\n\\n    /**\\n     * @notice Return all reward distributors for this pool\\n     * @return Array of RewardDistributor addresses\\n     */\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory) {\\n        return rewardsDistributors;\\n    }\\n\\n    /**\\n     * @notice A marker method that returns true for a valid Comptroller contract\\n     * @return Always true\\n     */\\n    function isComptroller() external pure override returns (bool) {\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Update the prices of all the tokens associated with the provided account\\n     * @param account Address of the account to get associated tokens with\\n     */\\n    function updatePrices(address account) public {\\n        VToken[] memory vTokens = getAssetsIn(account);\\n        uint256 vTokensCount = vTokens.length;\\n\\n        ResilientOracleInterface oracle_ = oracle;\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            oracle_.updatePrice(address(vTokens[i]));\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if a certain action is paused on a market\\n     * @param market vToken address\\n     * @param action Action to check\\n     * @return paused True if the action is paused otherwise false\\n     */\\n    function actionPaused(address market, Action action) public view returns (bool) {\\n        return _actionPaused[market][action];\\n    }\\n\\n    /**\\n     * @notice Returns the assets an account has entered\\n     * @param account The address of the account to pull assets for\\n     * @return A list with the assets the account has entered\\n     */\\n    function getAssetsIn(address account) public view returns (VToken[] memory) {\\n        uint256 len;\\n        VToken[] memory _accountAssets = accountAssets[account];\\n        uint256 _accountAssetsLength = _accountAssets.length;\\n\\n        VToken[] memory assetsIn = new VToken[](_accountAssetsLength);\\n\\n        for (uint256 i; i < _accountAssetsLength; ++i) {\\n            Market storage market = markets[address(_accountAssets[i])];\\n            if (market.isListed) {\\n                assetsIn[len] = _accountAssets[i];\\n                ++len;\\n            }\\n        }\\n\\n        assembly {\\n            mstore(assetsIn, len)\\n        }\\n\\n        return assetsIn;\\n    }\\n\\n    /**\\n     * @notice Add the market to the borrower's \\\"assets in\\\" for liquidity calculations\\n     * @param vToken The market to enter\\n     * @param borrower The address of the account to modify\\n     */\\n    function _addToMarket(VToken vToken, address borrower) internal {\\n        _checkActionPauseState(address(vToken), Action.ENTER_MARKET);\\n        Market storage marketToJoin = markets[address(vToken)];\\n\\n        if (!marketToJoin.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (marketToJoin.accountMembership[borrower]) {\\n            // already joined\\n            return;\\n        }\\n\\n        // survived the gauntlet, add to list\\n        // NOTE: we store these somewhat redundantly as a significant optimization\\n        //  this avoids having to iterate through the list for the most common use cases\\n        //  that is, only when we need to perform liquidity checks\\n        //  and not whenever we want to check if an account is in a particular market\\n        marketToJoin.accountMembership[borrower] = true;\\n        accountAssets[borrower].push(vToken);\\n\\n        emit MarketEntered(vToken, borrower);\\n    }\\n\\n    /**\\n     * @notice Internal function to validate that a market hasn't already been added\\n     * and if it hasn't adds it\\n     * @param vToken The market to support\\n     */\\n    function _addMarket(address vToken) internal {\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            if (allMarkets[i] == VToken(vToken)) {\\n                revert MarketAlreadyListed(vToken);\\n            }\\n        }\\n        allMarkets.push(VToken(vToken));\\n        marketsCount = allMarkets.length;\\n        _ensureMaxLoops(marketsCount);\\n    }\\n\\n    /**\\n     * @dev Pause/unpause an action on a market\\n     * @param market Market to pause/unpause the action on\\n     * @param action Action id to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     */\\n    function _setActionPaused(address market, Action action, bool paused) internal {\\n        require(markets[market].isListed, \\\"cannot pause a market that is not listed\\\");\\n        _actionPaused[market][action] = paused;\\n        emit ActionPausedMarket(VToken(market), action, paused);\\n    }\\n\\n    /**\\n     * @dev Internal function to check that vTokens can be safely redeemed for the underlying asset.\\n     * @param vToken Address of the vTokens to redeem\\n     * @param redeemer Account redeeming the tokens\\n     * @param redeemTokens The number of tokens to redeem\\n     */\\n    function _checkRedeemAllowed(address vToken, address redeemer, uint256 redeemTokens) internal {\\n        Market storage market = markets[vToken];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        /* If the redeemer is not 'in' the market, then we can bypass the liquidity check */\\n        if (!market.accountMembership[redeemer]) {\\n            return;\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(redeemer);\\n\\n        /* Otherwise, perform a hypothetical liquidity check to guard against shortfall */\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            redeemer,\\n            VToken(vToken),\\n            redeemTokens,\\n            0,\\n            _getCollateralFactor\\n        );\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n    }\\n\\n    /**\\n     * @notice Get the total collateral, weighted collateral, borrow balance, liquidity, shortfall\\n     * @param account The account to get the snapshot for\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n     *  liquidation threshold. Accepts the address of the vToken and returns the weight as Exp.\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getCurrentLiquiditySnapshot(\\n        address account,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        return _getHypotheticalLiquiditySnapshot(account, VToken(address(0)), 0, 0, weight);\\n    }\\n\\n    /**\\n     * @notice Determine what the supply/borrow balances would be if the given amounts were redeemed/borrowed\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n         liquidation threshold. Accepts the address of the VToken and returns the weight\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getHypotheticalLiquiditySnapshot(\\n        address account,\\n        VToken vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        // For each asset the account is in\\n        VToken[] memory assets = getAssetsIn(account);\\n        uint256 assetsCount = assets.length;\\n\\n        for (uint256 i; i < assetsCount; ++i) {\\n            VToken asset = assets[i];\\n\\n            // Read the balances and exchange rate from the vToken\\n            (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) = _safeGetAccountSnapshot(\\n                asset,\\n                account\\n            );\\n\\n            // Get the normalized price of the asset\\n            Exp memory oraclePrice = Exp({ mantissa: _safeGetUnderlyingPrice(asset) });\\n\\n            // Pre-compute conversion factors from vTokens -> usd\\n            Exp memory vTokenPrice = mul_(Exp({ mantissa: exchangeRateMantissa }), oraclePrice);\\n            Exp memory weightedVTokenPrice = mul_(weight(asset), vTokenPrice);\\n\\n            // weightedCollateral += weightedVTokenPrice * vTokenBalance\\n            snapshot.weightedCollateral = mul_ScalarTruncateAddUInt(\\n                weightedVTokenPrice,\\n                vTokenBalance,\\n                snapshot.weightedCollateral\\n            );\\n\\n            // totalCollateral += vTokenPrice * vTokenBalance\\n            snapshot.totalCollateral = mul_ScalarTruncateAddUInt(vTokenPrice, vTokenBalance, snapshot.totalCollateral);\\n\\n            // borrows += oraclePrice * borrowBalance\\n            snapshot.borrows = mul_ScalarTruncateAddUInt(oraclePrice, borrowBalance, snapshot.borrows);\\n\\n            // Calculate effects of interacting with vTokenModify\\n            if (asset == vTokenModify) {\\n                // redeem effect\\n                // effects += tokensToDenom * redeemTokens\\n                snapshot.effects = mul_ScalarTruncateAddUInt(weightedVTokenPrice, redeemTokens, snapshot.effects);\\n\\n                // borrow effect\\n                // effects += oraclePrice * borrowAmount\\n                snapshot.effects = mul_ScalarTruncateAddUInt(oraclePrice, borrowAmount, snapshot.effects);\\n            }\\n        }\\n\\n        uint256 borrowPlusEffects = snapshot.borrows + snapshot.effects;\\n        // These are safe, as the underflow condition is checked first\\n        unchecked {\\n            if (snapshot.weightedCollateral > borrowPlusEffects) {\\n                snapshot.liquidity = snapshot.weightedCollateral - borrowPlusEffects;\\n                snapshot.shortfall = 0;\\n            } else {\\n                snapshot.liquidity = 0;\\n                snapshot.shortfall = borrowPlusEffects - snapshot.weightedCollateral;\\n            }\\n        }\\n\\n        return snapshot;\\n    }\\n\\n    /**\\n     * @dev Retrieves price from oracle for an asset and checks it is nonzero\\n     * @param asset Address for asset to query price\\n     * @return Underlying price\\n     */\\n    function _safeGetUnderlyingPrice(VToken asset) internal view returns (uint256) {\\n        uint256 oraclePriceMantissa = oracle.getUnderlyingPrice(address(asset));\\n        if (oraclePriceMantissa == 0) {\\n            revert PriceError(address(asset));\\n        }\\n        return oraclePriceMantissa;\\n    }\\n\\n    /**\\n     * @dev Return collateral factor for a market\\n     * @param asset Address for asset\\n     * @return Collateral factor as exponential\\n     */\\n    function _getCollateralFactor(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].collateralFactorMantissa });\\n    }\\n\\n    /**\\n     * @dev Retrieves liquidation threshold for a market as an exponential\\n     * @param asset Address for asset to liquidation threshold\\n     * @return Liquidation threshold as exponential\\n     */\\n    function _getLiquidationThreshold(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].liquidationThresholdMantissa });\\n    }\\n\\n    /**\\n     * @dev Returns supply and borrow balances of user in vToken, reverts on failure\\n     * @param vToken Market to query\\n     * @param user Account address\\n     * @return vTokenBalance Balance of vTokens, the same as vToken.balanceOf(user)\\n     * @return borrowBalance Borrowed amount, including the interest\\n     * @return exchangeRateMantissa Stored exchange rate\\n     */\\n    function _safeGetAccountSnapshot(\\n        VToken vToken,\\n        address user\\n    ) internal view returns (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) {\\n        uint256 err;\\n        (err, vTokenBalance, borrowBalance, exchangeRateMantissa) = vToken.getAccountSnapshot(user);\\n        if (err != 0) {\\n            revert SnapshotError(address(vToken), user);\\n        }\\n        return (vTokenBalance, borrowBalance, exchangeRateMantissa);\\n    }\\n\\n    /// @notice Reverts if the call is not from expectedSender\\n    /// @param expectedSender Expected transaction sender\\n    function _checkSenderIs(address expectedSender) internal view {\\n        if (msg.sender != expectedSender) {\\n            revert UnexpectedSender(expectedSender, msg.sender);\\n        }\\n    }\\n\\n    /// @notice Reverts if a certain action is paused on a market\\n    /// @param market Market to check\\n    /// @param action Action to check\\n    function _checkActionPauseState(address market, Action action) private view {\\n        if (actionPaused(market, action)) {\\n            revert ActionPaused(market, action);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x7c6e1c6264e4681f82a9ac1bcd9155197a930033291ee5561ad97a56006f5e9c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\n\\nenum Action {\\n    MINT,\\n    REDEEM,\\n    BORROW,\\n    REPAY,\\n    SEIZE,\\n    LIQUIDATE,\\n    TRANSFER,\\n    ENTER_MARKET,\\n    EXIT_MARKET\\n}\\n\\n/**\\n * @title ComptrollerInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract.\\n */\\ninterface ComptrollerInterface {\\n    /*** Assets You Are In ***/\\n\\n    function enterMarkets(address[] calldata vTokens) external returns (uint256[] memory);\\n\\n    function exitMarket(address vToken) external returns (uint256);\\n\\n    /*** Policy Hooks ***/\\n\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external;\\n\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external;\\n\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external;\\n\\n    function preRepayHook(address vToken, address borrower) external;\\n\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external;\\n\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower\\n    ) external;\\n\\n    function borrowVerify(address vToken, address borrower, uint borrowAmount) external;\\n\\n    function mintVerify(address vToken, address minter, uint mintAmount, uint mintTokens) external;\\n\\n    function redeemVerify(address vToken, address redeemer, uint redeemAmount, uint redeemTokens) external;\\n\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer,\\n        address borrower,\\n        uint repayAmount,\\n        uint borrowerIndex\\n    ) external;\\n\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address liquidator,\\n        address borrower,\\n        uint repayAmount,\\n        uint seizeTokens\\n    ) external;\\n\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower,\\n        uint seizeTokens\\n    ) external;\\n\\n    function transferVerify(address vToken, address src, address dst, uint transferTokens) external;\\n\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external;\\n\\n    function isComptroller() external view returns (bool);\\n\\n    /*** Liquidity/Liquidation Calculations ***/\\n\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 repayAmount\\n    ) external view returns (uint256, uint256);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function actionPaused(address market, Action action) external view returns (bool);\\n}\\n\\n/**\\n * @title ComptrollerViewInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract, including only some util view functions.\\n */\\ninterface ComptrollerViewInterface {\\n    function markets(address) external view returns (bool, uint256);\\n\\n    function oracle() external view returns (ResilientOracleInterface);\\n\\n    function getAssetsIn(address) external view returns (VToken[] memory);\\n\\n    function closeFactorMantissa() external view returns (uint256);\\n\\n    function liquidationIncentiveMantissa() external view returns (uint256);\\n\\n    function minLiquidatableCollateral() external view returns (uint256);\\n\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function borrowCaps(address) external view returns (uint256);\\n\\n    function supplyCaps(address) external view returns (uint256);\\n\\n    function approvedDelegates(address user, address delegate) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xcbf7f9977472650c61345b7cbde23e81f626e1f8863bab4c6ce3dacfc7604919\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\nimport { Action } from \\\"./ComptrollerInterface.sol\\\";\\n\\n/**\\n * @title ComptrollerStorage\\n * @author Venus\\n * @notice Storage layout for the `Comptroller` contract.\\n */\\ncontract ComptrollerStorage {\\n    struct LiquidationOrder {\\n        VToken vTokenCollateral;\\n        VToken vTokenBorrowed;\\n        uint256 repayAmount;\\n    }\\n\\n    struct AccountLiquiditySnapshot {\\n        uint256 totalCollateral;\\n        uint256 weightedCollateral;\\n        uint256 borrows;\\n        uint256 effects;\\n        uint256 liquidity;\\n        uint256 shortfall;\\n    }\\n\\n    struct RewardSpeeds {\\n        address rewardToken;\\n        uint256 supplySpeed;\\n        uint256 borrowSpeed;\\n    }\\n\\n    struct Market {\\n        // Whether or not this market is listed\\n        bool isListed;\\n        //  Multiplier representing the most one can borrow against their collateral in this market.\\n        //  For instance, 0.9 to allow borrowing 90% of collateral value.\\n        //  Must be between 0 and 1, and stored as a mantissa.\\n        uint256 collateralFactorMantissa;\\n        //  Multiplier representing the collateralization after which the borrow is eligible\\n        //  for liquidation. For instance, 0.8 liquidate when the borrow is 80% of collateral\\n        //  value. Must be between 0 and collateral factor, stored as a mantissa.\\n        uint256 liquidationThresholdMantissa;\\n        // Per-market mapping of \\\"accounts in this asset\\\"\\n        mapping(address => bool) accountMembership;\\n    }\\n\\n    /**\\n     * @notice Oracle which gives the price of any given asset\\n     */\\n    ResilientOracleInterface public oracle;\\n\\n    /**\\n     * @notice Multiplier used to calculate the maximum repayAmount when liquidating a borrow\\n     */\\n    uint256 public closeFactorMantissa;\\n\\n    /**\\n     * @notice Multiplier representing the discount on collateral that a liquidator receives\\n     */\\n    uint256 public liquidationIncentiveMantissa;\\n\\n    /**\\n     * @notice Per-account mapping of \\\"assets you are in\\\"\\n     */\\n    mapping(address => VToken[]) public accountAssets;\\n\\n    /**\\n     * @notice Official mapping of vTokens -> Market metadata\\n     * @dev Used e.g. to determine if a market is supported\\n     */\\n    mapping(address => Market) public markets;\\n\\n    /// @notice A list of all markets\\n    VToken[] public allMarkets;\\n\\n    /// @notice Borrow caps enforced by borrowAllowed for each vToken address. Defaults to zero which restricts borrowing.\\n    mapping(address => uint256) public borrowCaps;\\n\\n    /// @notice Minimal collateral required for regular (non-batch) liquidations\\n    uint256 public minLiquidatableCollateral;\\n\\n    /// @notice Supply caps enforced by mintAllowed for each vToken address. Defaults to zero which corresponds to minting not allowed\\n    mapping(address => uint256) public supplyCaps;\\n\\n    /// @notice True if a certain action is paused on a certain market\\n    mapping(address => mapping(Action => bool)) internal _actionPaused;\\n\\n    // List of Reward Distributors added\\n    RewardsDistributor[] internal rewardsDistributors;\\n\\n    // Used to check if rewards distributor is added\\n    mapping(address => bool) internal rewardsDistributorExists;\\n\\n    /// @notice Flag indicating whether forced liquidation enabled for a market\\n    mapping(address => bool) public isForcedLiquidationEnabled;\\n\\n    uint256 internal constant NO_ERROR = 0;\\n\\n    // closeFactorMantissa must be strictly greater than this value\\n    uint256 internal constant MIN_CLOSE_FACTOR_MANTISSA = 0.05e18; // 0.05\\n\\n    // closeFactorMantissa must not exceed this value\\n    uint256 internal constant MAX_CLOSE_FACTOR_MANTISSA = 0.9e18; // 0.9\\n\\n    // No collateralFactorMantissa may exceed this value\\n    uint256 internal constant MAX_COLLATERAL_FACTOR_MANTISSA = 0.95e18; // 0.95\\n\\n    /// Prime token address\\n    IPrime public prime;\\n\\n    /// @notice Whether the delegate is allowed to borrow or redeem on behalf of the user\\n    //mapping(address user => mapping (address delegate => bool approved)) public approvedDelegates;\\n    mapping(address => mapping(address => bool)) public approvedDelegates;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4df44cb65ac152bac2be4b4545430e703005a74a55b72e144100b16421bd8bfd\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title TokenErrorReporter\\n * @author Venus\\n * @notice Errors that can be thrown by the `VToken` contract.\\n */\\ncontract TokenErrorReporter {\\n    uint256 public constant NO_ERROR = 0; // support legacy return codes\\n\\n    error TransferNotAllowed();\\n\\n    error MintFreshnessCheck();\\n\\n    error RedeemFreshnessCheck();\\n    error RedeemTransferOutNotPossible();\\n\\n    error BorrowFreshnessCheck();\\n    error BorrowCashNotAvailable();\\n    error DelegateNotApproved();\\n\\n    error RepayBorrowFreshnessCheck();\\n\\n    error HealBorrowUnauthorized();\\n    error ForceLiquidateBorrowUnauthorized();\\n\\n    error LiquidateFreshnessCheck();\\n    error LiquidateCollateralFreshnessCheck();\\n    error LiquidateAccrueCollateralInterestFailed(uint256 errorCode);\\n    error LiquidateLiquidatorIsBorrower();\\n    error LiquidateCloseAmountIsZero();\\n    error LiquidateCloseAmountIsUintMax();\\n\\n    error LiquidateSeizeLiquidatorIsBorrower();\\n\\n    error ProtocolSeizeShareTooBig();\\n\\n    error SetReserveFactorFreshCheck();\\n    error SetReserveFactorBoundsCheck();\\n\\n    error AddReservesFactorFreshCheck(uint256 actualAddAmount);\\n\\n    error ReduceReservesFreshCheck();\\n    error ReduceReservesCashNotAvailable();\\n    error ReduceReservesCashValidation();\\n\\n    error SetInterestRateModelFreshCheck();\\n}\\n\",\"keccak256\":\"0x7a7ced1caaac2d9242659ebd50b99f308c725ce958ac9e11f7ada404b1d97a7b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { EXP_SCALE as EXP_SCALE_, MANTISSA_ONE as MANTISSA_ONE_ } from \\\"./lib/constants.sol\\\";\\n\\n/**\\n * @title Exponential module for storing fixed-precision decimals\\n * @author Compound\\n * @notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.\\n *         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:\\n *         `Exp({mantissa: 5100000000000000000})`.\\n */\\ncontract ExponentialNoError {\\n    struct Exp {\\n        uint256 mantissa;\\n    }\\n\\n    struct Double {\\n        uint256 mantissa;\\n    }\\n\\n    uint256 internal constant EXP_SCALE = EXP_SCALE_;\\n    uint256 internal constant DOUBLE_SCALE = 1e36;\\n    uint256 internal constant HALF_EXP_SCALE = EXP_SCALE / 2;\\n    uint256 internal constant MANTISSA_ONE = MANTISSA_ONE_;\\n\\n    /**\\n     * @dev Truncates the given exp to a whole number value.\\n     *      For example, truncate(Exp{mantissa: 15 * EXP_SCALE}) = 15\\n     */\\n    function truncate(Exp memory exp) internal pure returns (uint256) {\\n        // Note: We are not using careful math here as we're performing a division that cannot fail\\n        return exp.mantissa / EXP_SCALE;\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, then truncate to return an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncate(Exp memory a, uint256 scalar) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return truncate(product);\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncateAddUInt(Exp memory a, uint256 scalar, uint256 addend) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return add_(truncate(product), addend);\\n    }\\n\\n    /**\\n     * @dev Checks if first Exp is less than second Exp.\\n     */\\n    function lessThanExp(Exp memory left, Exp memory right) internal pure returns (bool) {\\n        return left.mantissa < right.mantissa;\\n    }\\n\\n    function safe224(uint256 n, string memory errorMessage) internal pure returns (uint224) {\\n        require(n <= type(uint224).max, errorMessage);\\n        return uint224(n);\\n    }\\n\\n    function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) {\\n        require(n <= type(uint32).max, errorMessage);\\n        return uint32(n);\\n    }\\n\\n    function add_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a + b;\\n    }\\n\\n    function sub_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a - b;\\n    }\\n\\n    function mul_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b.mantissa) / EXP_SCALE });\\n    }\\n\\n    function mul_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / EXP_SCALE;\\n    }\\n\\n    function mul_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b.mantissa) / DOUBLE_SCALE });\\n    }\\n\\n    function mul_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / DOUBLE_SCALE;\\n    }\\n\\n    function mul_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a * b;\\n    }\\n\\n    function div_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(mul_(a.mantissa, EXP_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, EXP_SCALE), b.mantissa);\\n    }\\n\\n    function div_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a.mantissa, DOUBLE_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, DOUBLE_SCALE), b.mantissa);\\n    }\\n\\n    function div_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a / b;\\n    }\\n\\n    function fraction(uint256 a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a, DOUBLE_SCALE), b) });\\n    }\\n}\\n\",\"keccak256\":\"0x8afbe8a24fe3539c124e718681ed3dcebd24c40dd53095786c0155998213b9b0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title Compound's InterestRateModel Interface\\n * @author Compound\\n */\\nabstract contract InterestRateModel {\\n    /**\\n     * @notice Calculates the current borrow interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getBorrowRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Calculates the current supply interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param reserveFactorMantissa The current reserve factor the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getSupplyRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 reserveFactorMantissa,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is an InterestRateModel contract (for inspection)\\n     * @return Always true\\n     */\\n    function isInterestRateModel() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0xc4fda1ab75ebe4b187b707c4f10c58780f343cf343c537f641dc75d3cd28ab51\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title MaxLoopsLimitHelper\\n * @author Venus\\n * @notice Abstract contract used to avoid collection with too many items that would generate gas errors and DoS.\\n */\\nabstract contract MaxLoopsLimitHelper {\\n    // Limit for the loops to avoid the DOS\\n    uint256 public maxLoopsLimit;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when max loops limit is set\\n    event MaxLoopsLimitUpdated(uint256 oldMaxLoopsLimit, uint256 newmaxLoopsLimit);\\n\\n    /// @notice Thrown an error on maxLoopsLimit exceeds for any loop\\n    error MaxLoopsLimitExceeded(uint256 loopsLimit, uint256 requiredLoops);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function _setMaxLoopsLimit(uint256 limit) internal {\\n        require(limit > maxLoopsLimit, \\\"Comptroller: Invalid maxLoopsLimit\\\");\\n\\n        uint256 oldMaxLoopsLimit = maxLoopsLimit;\\n        maxLoopsLimit = limit;\\n\\n        emit MaxLoopsLimitUpdated(oldMaxLoopsLimit, limit);\\n    }\\n\\n    /**\\n     * @notice Compare the maxLoopsLimit with number of the times loop iterate\\n     * @param len Length of the loops iterate\\n     * @custom:error MaxLoopsLimitExceeded error is thrown when loops length exceeds maxLoopsLimit\\n     */\\n    function _ensureMaxLoops(uint256 len) internal view {\\n        if (len > maxLoopsLimit) {\\n            revert MaxLoopsLimitExceeded(maxLoopsLimit, len);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x4c25e30635485d162177effa384eee51768b0141a567a0da16ff6ad673274166\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\n\\nimport { ExponentialNoError } from \\\"../ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"../VToken.sol\\\";\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"../MaxLoopsLimitHelper.sol\\\";\\nimport { RewardsDistributorStorage } from \\\"./RewardsDistributorStorage.sol\\\";\\n\\n/**\\n * @title `RewardsDistributor`\\n * @author Venus\\n * @notice Contract used to configure, track and distribute rewards to users based on their actions (borrows and supplies) in the protocol.\\n * Users can receive additional rewards through a `RewardsDistributor`. Each `RewardsDistributor` proxy is initialized with a specific reward\\n * token and `Comptroller`, which can then distribute the reward token to users that supply or borrow in the associated pool.\\n * Authorized users can set the reward token borrow and supply speeds for each market in the pool. This sets a fixed amount of reward\\n * token to be released each slot (block or second) for borrowers and suppliers, which is distributed based on a user\\u2019s percentage of the borrows or supplies\\n * respectively. The owner can also set up reward distributions to contributor addresses (distinct from suppliers and borrowers) by setting\\n * their contributor reward token speed, which similarly allocates a fixed amount of reward token per slot (block or second).\\n *\\n * The owner has the ability to transfer any amount of reward tokens held by the contract to any other address. Rewards are not distributed\\n * automatically and must be claimed by a user calling `claimRewardToken()`. Users should be aware that it is up to the owner and other centralized\\n * entities to ensure that the `RewardsDistributor` holds enough tokens to distribute the accumulated rewards of users and contributors.\\n */\\ncontract RewardsDistributor is\\n    ExponentialNoError,\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    MaxLoopsLimitHelper,\\n    RewardsDistributorStorage,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    /// @notice The initial REWARD TOKEN index for a market\\n    uint224 public constant INITIAL_INDEX = 1e36;\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a supplier\\n    event DistributedSupplierRewardToken(\\n        VToken indexed vToken,\\n        address indexed supplier,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenSupplyIndex\\n    );\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a borrower\\n    event DistributedBorrowerRewardToken(\\n        VToken indexed vToken,\\n        address indexed borrower,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenBorrowIndex\\n    );\\n\\n    /// @notice Emitted when a new supply-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenSupplySpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when a new borrow-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenBorrowSpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when REWARD TOKEN is granted by admin\\n    event RewardTokenGranted(address indexed recipient, uint256 amount);\\n\\n    /// @notice Emitted when a new REWARD TOKEN speed is set for a contributor\\n    event ContributorRewardTokenSpeedUpdated(address indexed contributor, uint256 newSpeed);\\n\\n    /// @notice Emitted when a market is initialized\\n    event MarketInitialized(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token supply index is updated\\n    event RewardTokenSupplyIndexUpdated(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token borrow index is updated\\n    event RewardTokenBorrowIndexUpdated(address indexed vToken, Exp marketBorrowIndex);\\n\\n    /// @notice Emitted when a reward for contributor is updated\\n    event ContributorRewardsUpdated(address indexed contributor, uint256 rewardAccrued);\\n\\n    /// @notice Emitted when a reward token last rewarding block for supply is updated\\n    event SupplyLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding block for borrow is updated\\n    event BorrowLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for supply is updated\\n    event SupplyLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for borrow is updated\\n    event BorrowLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    modifier onlyComptroller() {\\n        require(address(comptroller) == msg.sender, \\\"Only comptroller can call this function\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice RewardsDistributor initializer\\n     * @dev Initializes the deployer to owner\\n     * @param comptroller_ Comptroller to attach the reward distributor to\\n     * @param rewardToken_ Reward token to distribute\\n     * @param loopsLimit_ Maximum number of iterations for the loops in this contract\\n     * @param accessControlManager_ AccessControlManager contract address\\n     */\\n    function initialize(\\n        Comptroller comptroller_,\\n        IERC20Upgradeable rewardToken_,\\n        uint256 loopsLimit_,\\n        address accessControlManager_\\n    ) external initializer {\\n        comptroller = comptroller_;\\n        rewardToken = rewardToken_;\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n\\n        _setMaxLoopsLimit(loopsLimit_);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken\\n     * @param vToken The address of the vToken to be initialized\\n     * @custom:event MarketInitialized emits on success\\n     * @custom:access Only Comptroller\\n     */\\n    function initializeMarket(address vToken) external onlyComptroller {\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        isTimeBased\\n            ? _initializeMarketTimestampBased(vToken, blockNumberOrTimestamp)\\n            : _initializeMarketBlockBased(vToken, safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\"));\\n\\n        emit MarketInitialized(vToken);\\n    }\\n\\n    /*** Reward Token Distribution ***/\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them\\n     *         Borrowers will begin to accrue after the first interaction with the protocol.\\n     * @dev This function should only be called when the user has a borrow position in the market\\n     *      (e.g. Comptroller.preBorrowHook, and Comptroller.preRepayHook)\\n     *      We avoid an external call to check if they are in the market to save gas because this function is called in many places\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function distributeBorrowerRewardToken(\\n        address vToken,\\n        address borrower,\\n        Exp memory marketBorrowIndex\\n    ) external onlyComptroller {\\n        _distributeBorrowerRewardToken(vToken, borrower, marketBorrowIndex);\\n    }\\n\\n    function updateRewardTokenSupplyIndex(address vToken) external onlyComptroller {\\n        _updateRewardTokenSupplyIndex(vToken);\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the recipient\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all\\n     * @param recipient The address of the recipient to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     */\\n    function grantRewardToken(address recipient, uint256 amount) external onlyOwner {\\n        uint256 amountLeft = _grantRewardToken(recipient, amount);\\n        require(amountLeft == 0, \\\"insufficient rewardToken for grant\\\");\\n        emit RewardTokenGranted(recipient, amount);\\n    }\\n\\n    function updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) external onlyComptroller {\\n        _updateRewardTokenBorrowIndex(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN borrow and supply speeds for the specified markets\\n     * @param vTokens The markets whose REWARD TOKEN speed to update\\n     * @param supplySpeeds New supply-side REWARD TOKEN speed for the corresponding market\\n     * @param borrowSpeeds New borrow-side REWARD TOKEN speed for the corresponding market\\n     */\\n    function setRewardTokenSpeeds(\\n        VToken[] memory vTokens,\\n        uint256[] memory supplySpeeds,\\n        uint256[] memory borrowSpeeds\\n    ) external {\\n        _checkAccessAllowed(\\\"setRewardTokenSpeeds(address[],uint256[],uint256[])\\\");\\n        uint256 numTokens = vTokens.length;\\n        require(numTokens == supplySpeeds.length && numTokens == borrowSpeeds.length, \\\"invalid setRewardTokenSpeeds\\\");\\n\\n        for (uint256 i; i < numTokens; ++i) {\\n            _setRewardTokenSpeed(vTokens[i], supplySpeeds[i], borrowSpeeds[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for the specified markets, used when contract is block based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlocks New supply-side REWARD TOKEN last rewarding block for the corresponding market\\n     * @param borrowLastRewardingBlocks New borrow-side REWARD TOKEN last rewarding block for the corresponding market\\n     */\\n    function setLastRewardingBlocks(\\n        VToken[] calldata vTokens,\\n        uint32[] calldata supplyLastRewardingBlocks,\\n        uint32[] calldata borrowLastRewardingBlocks\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlocks(address[],uint32[],uint32[])\\\");\\n        require(!isTimeBased, \\\"Block-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlocks.length && numTokens == borrowLastRewardingBlocks.length,\\n            \\\"RewardsDistributor::setLastRewardingBlocks invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlock(vTokens[i], supplyLastRewardingBlocks[i], borrowLastRewardingBlocks[i]);\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block timestamp for the specified markets, used when contract is time based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlockTimestamps New supply-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     * @param borrowLastRewardingBlockTimestamps New borrow-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     */\\n    function setLastRewardingBlockTimestamps(\\n        VToken[] calldata vTokens,\\n        uint256[] calldata supplyLastRewardingBlockTimestamps,\\n        uint256[] calldata borrowLastRewardingBlockTimestamps\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])\\\");\\n        require(isTimeBased, \\\"Time-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlockTimestamps.length &&\\n                numTokens == borrowLastRewardingBlockTimestamps.length,\\n            \\\"RewardsDistributor::setLastRewardingBlockTimestamps invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlockTimestamp(\\n                vTokens[i],\\n                supplyLastRewardingBlockTimestamps[i],\\n                borrowLastRewardingBlockTimestamps[i]\\n            );\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single contributor\\n     * @param contributor The contributor whose REWARD TOKEN speed to update\\n     * @param rewardTokenSpeed New REWARD TOKEN speed for contributor\\n     */\\n    function setContributorRewardTokenSpeed(address contributor, uint256 rewardTokenSpeed) external onlyOwner {\\n        // note that REWARD TOKEN speed could be set to 0 to halt liquidity rewards for a contributor\\n        updateContributorRewards(contributor);\\n        if (rewardTokenSpeed == 0) {\\n            // release storage\\n            delete lastContributorBlock[contributor];\\n        } else {\\n            lastContributorBlock[contributor] = getBlockNumberOrTimestamp();\\n        }\\n        rewardTokenContributorSpeeds[contributor] = rewardTokenSpeed;\\n\\n        emit ContributorRewardTokenSpeedUpdated(contributor, rewardTokenSpeed);\\n    }\\n\\n    function distributeSupplierRewardToken(address vToken, address supplier) external onlyComptroller {\\n        _distributeSupplierRewardToken(vToken, supplier);\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in all markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     */\\n    function claimRewardToken(address holder) external {\\n        return claimRewardToken(holder, comptroller.getAllMarkets());\\n    }\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Calculate additional accrued REWARD TOKEN for a contributor since last accrual\\n     * @param contributor The address to calculate contributor rewards for\\n     */\\n    function updateContributorRewards(address contributor) public {\\n        uint256 rewardTokenSpeed = rewardTokenContributorSpeeds[contributor];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n        uint256 deltaBlocksOrTimestamp = sub_(blockNumberOrTimestamp, lastContributorBlock[contributor]);\\n        if (deltaBlocksOrTimestamp > 0 && rewardTokenSpeed > 0) {\\n            uint256 newAccrued = mul_(deltaBlocksOrTimestamp, rewardTokenSpeed);\\n            uint256 contributorAccrued = add_(rewardTokenAccrued[contributor], newAccrued);\\n\\n            rewardTokenAccrued[contributor] = contributorAccrued;\\n            lastContributorBlock[contributor] = blockNumberOrTimestamp;\\n\\n            emit ContributorRewardsUpdated(contributor, rewardTokenAccrued[contributor]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in the specified markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     * @param vTokens The list of markets to claim REWARD TOKEN in\\n     */\\n    function claimRewardToken(address holder, VToken[] memory vTokens) public {\\n        uint256 vTokensCount = vTokens.length;\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            VToken vToken = vTokens[i];\\n            require(comptroller.isMarketListed(vToken), \\\"market must be listed\\\");\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n            _distributeBorrowerRewardToken(address(vToken), holder, borrowIndex);\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n            _distributeSupplierRewardToken(address(vToken), holder);\\n        }\\n        rewardTokenAccrued[holder] = _grantRewardToken(holder, rewardTokenAccrued[holder]);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for a single market.\\n     * @param vToken market's whose reward token last rewarding block to be updated\\n     * @param supplyLastRewardingBlock New supply-side REWARD TOKEN last rewarding block for market\\n     * @param borrowLastRewardingBlock New borrow-side REWARD TOKEN last rewarding block for market\\n     */\\n    function _setLastRewardingBlock(\\n        VToken vToken,\\n        uint32 supplyLastRewardingBlock,\\n        uint32 borrowLastRewardingBlock\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockNumber = getBlockNumberOrTimestamp();\\n\\n        require(supplyLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n        require(borrowLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n\\n        uint32 currentSupplyLastRewardingBlock = rewardTokenSupplyState[address(vToken)].lastRewardingBlock;\\n        uint32 currentBorrowLastRewardingBlock = rewardTokenBorrowState[address(vToken)].lastRewardingBlock;\\n\\n        require(\\n            currentSupplyLastRewardingBlock == 0 || currentSupplyLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlock == 0 || currentBorrowLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlock != supplyLastRewardingBlock) {\\n            rewardTokenSupplyState[address(vToken)].lastRewardingBlock = supplyLastRewardingBlock;\\n            emit SupplyLastRewardingBlockUpdated(address(vToken), supplyLastRewardingBlock);\\n        }\\n\\n        if (currentBorrowLastRewardingBlock != borrowLastRewardingBlock) {\\n            rewardTokenBorrowState[address(vToken)].lastRewardingBlock = borrowLastRewardingBlock;\\n            emit BorrowLastRewardingBlockUpdated(address(vToken), borrowLastRewardingBlock);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding timestamp for a single market.\\n     * @param vToken market's whose reward token last rewarding timestamp to be updated\\n     * @param supplyLastRewardingBlockTimestamp New supply-side REWARD TOKEN last rewarding timestamp for market\\n     * @param borrowLastRewardingBlockTimestamp New borrow-side REWARD TOKEN last rewarding timestamp for market\\n     */\\n    function _setLastRewardingBlockTimestamp(\\n        VToken vToken,\\n        uint256 supplyLastRewardingBlockTimestamp,\\n        uint256 borrowLastRewardingBlockTimestamp\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockTimestamp = getBlockNumberOrTimestamp();\\n\\n        require(\\n            supplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n        require(\\n            borrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n\\n        uint256 currentSupplyLastRewardingBlockTimestamp = rewardTokenSupplyStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n        uint256 currentBorrowLastRewardingBlockTimestamp = rewardTokenBorrowStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n\\n        require(\\n            currentSupplyLastRewardingBlockTimestamp == 0 || currentSupplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlockTimestamp == 0 || currentBorrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlockTimestamp != supplyLastRewardingBlockTimestamp) {\\n            rewardTokenSupplyStateTimeBased[address(vToken)].lastRewardingTimestamp = supplyLastRewardingBlockTimestamp;\\n            emit SupplyLastRewardingBlockTimestampUpdated(address(vToken), supplyLastRewardingBlockTimestamp);\\n        }\\n\\n        if (currentBorrowLastRewardingBlockTimestamp != borrowLastRewardingBlockTimestamp) {\\n            rewardTokenBorrowStateTimeBased[address(vToken)].lastRewardingTimestamp = borrowLastRewardingBlockTimestamp;\\n            emit BorrowLastRewardingBlockTimestampUpdated(address(vToken), borrowLastRewardingBlockTimestamp);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single market.\\n     * @param vToken market's whose reward token rate to be updated\\n     * @param supplySpeed New supply-side REWARD TOKEN speed for market\\n     * @param borrowSpeed New borrow-side REWARD TOKEN speed for market\\n     */\\n    function _setRewardTokenSpeed(VToken vToken, uint256 supplySpeed, uint256 borrowSpeed) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        if (rewardTokenSupplySpeeds[address(vToken)] != supplySpeed) {\\n            // Supply speed updated so let's update supply state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n\\n            // Update speed and emit event\\n            rewardTokenSupplySpeeds[address(vToken)] = supplySpeed;\\n            emit RewardTokenSupplySpeedUpdated(vToken, supplySpeed);\\n        }\\n\\n        if (rewardTokenBorrowSpeeds[address(vToken)] != borrowSpeed) {\\n            // Borrow speed updated so let's update borrow state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n\\n            // Update speed and emit event\\n            rewardTokenBorrowSpeeds[address(vToken)] = borrowSpeed;\\n            emit RewardTokenBorrowSpeedUpdated(vToken, borrowSpeed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculate REWARD TOKEN accrued by a supplier and possibly transfer it to them.\\n     * @param vToken The market in which the supplier is interacting\\n     * @param supplier The address of the supplier to distribute REWARD TOKEN to\\n     */\\n    function _distributeSupplierRewardToken(address vToken, address supplier) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n        uint256 supplierIndex = rewardTokenSupplierIndex[vToken][supplier];\\n\\n        // Update supplier's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenSupplierIndex[vToken][supplier] = supplyIndex;\\n\\n        if (supplierIndex == 0 && supplyIndex >= INITIAL_INDEX) {\\n            // Covers the case where users supplied tokens before the market's supply state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when supplier rewards were first\\n            // set for the market.\\n            supplierIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per vToken accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(supplyIndex, supplierIndex) });\\n\\n        uint256 supplierTokens = VToken(vToken).balanceOf(supplier);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerVToken\\n        uint256 supplierDelta = mul_(supplierTokens, deltaIndex);\\n\\n        uint256 supplierAccrued = add_(rewardTokenAccrued[supplier], supplierDelta);\\n        rewardTokenAccrued[supplier] = supplierAccrued;\\n\\n        emit DistributedSupplierRewardToken(VToken(vToken), supplier, supplierDelta, supplierAccrued, supplyIndex);\\n    }\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them.\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function _distributeBorrowerRewardToken(address vToken, address borrower, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n        uint256 borrowerIndex = rewardTokenBorrowerIndex[vToken][borrower];\\n\\n        // Update borrowers's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenBorrowerIndex[vToken][borrower] = borrowIndex;\\n\\n        if (borrowerIndex == 0 && borrowIndex >= INITIAL_INDEX) {\\n            // Covers the case where users borrowed tokens before the market's borrow state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when borrower rewards were first\\n            // set for the market.\\n            borrowerIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per borrowed unit accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(borrowIndex, borrowerIndex) });\\n\\n        uint256 borrowerAmount = div_(VToken(vToken).borrowBalanceStored(borrower), marketBorrowIndex);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerBorrowedUnit\\n        if (borrowerAmount != 0) {\\n            uint256 borrowerDelta = mul_(borrowerAmount, deltaIndex);\\n\\n            uint256 borrowerAccrued = add_(rewardTokenAccrued[borrower], borrowerDelta);\\n            rewardTokenAccrued[borrower] = borrowerAccrued;\\n\\n            emit DistributedBorrowerRewardToken(VToken(vToken), borrower, borrowerDelta, borrowerAccrued, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the user.\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all.\\n     * @param user The address of the user to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     * @return The amount of REWARD TOKEN which was NOT transferred to the user\\n     */\\n    function _grantRewardToken(address user, uint256 amount) internal returns (uint256) {\\n        uint256 rewardTokenRemaining = rewardToken.balanceOf(address(this));\\n        if (amount > 0 && amount <= rewardTokenRemaining) {\\n            rewardToken.safeTransfer(user, amount);\\n            return 0;\\n        }\\n        return amount;\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the supply index\\n     * @param vToken The market whose supply index to update\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenSupplyIndex(address vToken) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplySpeed = rewardTokenSupplySpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? supplyStateTimeBased.lastRewardingTimestamp\\n            : uint256(supplyState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? supplyStateTimeBased.timestamp : uint256(supplyState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && supplySpeed > 0) {\\n            uint256 supplyTokens = VToken(vToken).totalSupply();\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, supplySpeed);\\n            Double memory ratio = supplyTokens > 0\\n                ? fraction(accruedSinceUpdate, supplyTokens)\\n                : Double({ mantissa: 0 });\\n            uint224 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: supplyIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                supplyStateTimeBased.index = index;\\n                supplyStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                supplyState.index = index;\\n                supplyState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            isTimeBased ? supplyStateTimeBased.timestamp = blockNumberOrTimestamp : supplyState.block = uint32(\\n                blockNumberOrTimestamp\\n            );\\n        }\\n\\n        emit RewardTokenSupplyIndexUpdated(vToken);\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the borrow index\\n     * @param vToken The market whose borrow index to update\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowSpeed = rewardTokenBorrowSpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? borrowStateTimeBased.lastRewardingTimestamp\\n            : uint256(borrowState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? borrowStateTimeBased.timestamp : uint256(borrowState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && borrowSpeed > 0) {\\n            uint256 borrowAmount = div_(VToken(vToken).totalBorrows(), marketBorrowIndex);\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, borrowSpeed);\\n            Double memory ratio = borrowAmount > 0\\n                ? fraction(accruedSinceUpdate, borrowAmount)\\n                : Double({ mantissa: 0 });\\n            uint224 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: borrowIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                borrowStateTimeBased.index = index;\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.index = index;\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            if (isTimeBased) {\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        }\\n\\n        emit RewardTokenBorrowIndexUpdated(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is block-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockNumber current block number\\n     */\\n    function _initializeMarketBlockBased(address vToken, uint32 blockNumber) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block numbers\\n         */\\n        supplyState.block = borrowState.block = blockNumber;\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is time-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockTimestamp current block timestamp\\n     */\\n    function _initializeMarketTimestampBased(address vToken, uint256 blockTimestamp) internal {\\n        TimeBasedRewardToken storage supplyState = rewardTokenSupplyStateTimeBased[vToken];\\n        TimeBasedRewardToken storage borrowState = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block timestamp\\n         */\\n        supplyState.timestamp = borrowState.timestamp = blockTimestamp;\\n    }\\n}\\n\",\"keccak256\":\"0x3cc824e59c923cfe25c4f1a875959b7e9410cde8e73cd405de13f301298c697f\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\n\\n/**\\n * @title RewardsDistributorStorage\\n * @author Venus\\n * @dev Storage for RewardsDistributor\\n */\\ncontract RewardsDistributorStorage {\\n    struct RewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block number the index was last updated at\\n        uint32 block;\\n        // The block number at which to stop rewards\\n        uint32 lastRewardingBlock;\\n    }\\n\\n    struct TimeBasedRewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block timestamp the index was last updated at\\n        uint256 timestamp;\\n        // The block timestamp at which to stop rewards\\n        uint256 lastRewardingTimestamp;\\n    }\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => RewardToken) public rewardTokenSupplyState;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each supplier as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenSupplierIndex;\\n\\n    /// @notice The REWARD TOKEN accrued but not yet transferred to each user\\n    mapping(address => uint256) public rewardTokenAccrued;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding borrow market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenBorrowSpeeds;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding supply market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenSupplySpeeds;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => RewardToken) public rewardTokenBorrowState;\\n\\n    /// @notice The portion of REWARD TOKEN that each contributor receives per slot (block or second)\\n    mapping(address => uint256) public rewardTokenContributorSpeeds;\\n\\n    /// @notice Last slot (block or second) at which a contributor's REWARD TOKEN rewards have been allocated\\n    mapping(address => uint256) public lastContributorBlock;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each borrower as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenBorrowerIndex;\\n\\n    Comptroller internal comptroller;\\n\\n    IERC20Upgradeable public rewardToken;\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenSupplyStateTimeBased;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenBorrowStateTimeBased;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[37] private __gap;\\n}\\n\",\"keccak256\":\"0x70e5015a78a2acf95277949c8b4796e10b9ac194130be006d5e5217e158070c0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VToken.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IProtocolShareReserve } from \\\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\\\";\\n\\nimport { VTokenInterface } from \\\"./VTokenInterfaces.sol\\\";\\nimport { ComptrollerInterface, ComptrollerViewInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { TokenErrorReporter } from \\\"./ErrorReporter.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title VToken\\n * @author Venus\\n * @notice Each asset that is supported by a pool is integrated through an instance of the `VToken` contract. As outlined in the protocol overview,\\n * each isolated pool creates its own `vToken` corresponding to an asset. Within a given pool, each included `vToken` is referred to as a market of\\n * the pool. The main actions a user regularly interacts with in a market are:\\n\\n- mint/redeem of vTokens;\\n- transfer of vTokens;\\n- borrow/repay a loan on an underlying asset;\\n- liquidate a borrow or liquidate/heal an account.\\n\\n * A user supplies the underlying asset to a pool by minting `vTokens`, where the corresponding `vToken` amount is determined by the `exchangeRate`.\\n * The `exchangeRate` will change over time, dependent on a number of factors, some of which accrue interest. Additionally, once users have minted\\n * `vToken` in a pool, they can borrow any asset in the isolated pool by using their `vToken` as collateral. In order to borrow an asset or use a `vToken`\\n * as collateral, the user must be entered into each corresponding market (else, the `vToken` will not be considered collateral for a borrow). Note that\\n * a user may borrow up to a portion of their collateral determined by the market\\u2019s collateral factor. However, if their borrowed amount exceeds an amount\\n * calculated using the market\\u2019s corresponding liquidation threshold, the borrow is eligible for liquidation. When a user repays a borrow, they must also\\n * pay off interest accrued on the borrow.\\n * \\n * The Venus protocol includes unique mechanisms for healing an account and liquidating an account. These actions are performed in the `Comptroller`\\n * and consider all borrows and collateral for which a given account is entered within a market. These functions may only be called on an account with a\\n * total collateral amount that is no larger than a universal `minLiquidatableCollateral` value, which is used for all markets within a `Comptroller`.\\n * Both functions settle all of an account\\u2019s borrows, but `healAccount()` may add `badDebt` to a vToken. For more detail, see the description of\\n * `healAccount()` and `liquidateAccount()` in the `Comptroller` summary section below.\\n */\\ncontract VToken is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    VTokenInterface,\\n    ExponentialNoError,\\n    TokenErrorReporter,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    uint256 internal constant DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA = 5e16; // 5%\\n\\n    // Maximum fraction of interest that can be set aside for reserves\\n    uint256 internal constant MAX_RESERVE_FACTOR_MANTISSA = 1e18;\\n\\n    // Maximum borrow rate that can ever be applied per slot(block or second)\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 internal immutable MAX_BORROW_RATE_MANTISSA;\\n\\n    /**\\n     * Reentrancy Guard **\\n     */\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     */\\n    modifier nonReentrant() {\\n        require(_notEntered, \\\"re-entered\\\");\\n        _notEntered = false;\\n        _;\\n        _notEntered = true; // get a gas-refund post-Istanbul\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @param maxBorrowRateMantissa_ The maximum value of borrowing rate mantissa\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(\\n        bool timeBased_,\\n        uint256 blocksPerYear_,\\n        uint256 maxBorrowRateMantissa_\\n    ) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        require(maxBorrowRateMantissa_ <= 1e18, \\\"Max borrow rate must be <= 1e18\\\");\\n\\n        MAX_BORROW_RATE_MANTISSA = maxBorrowRateMantissa_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice Construct a new money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     * @custom:error ZeroAddressNotAllowed is thrown when admin address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     */\\n    function initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) external initializer {\\n        ensureNonzeroAddress(admin_);\\n\\n        // Initialize the market\\n        _initialize(\\n            underlying_,\\n            comptroller_,\\n            interestRateModel_,\\n            initialExchangeRateMantissa_,\\n            name_,\\n            symbol_,\\n            decimals_,\\n            admin_,\\n            accessControlManager_,\\n            riskManagement,\\n            reserveFactorMantissa_\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `msg.sender` to `dst`\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transfer(address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `src` to `dst`\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transferFrom(address src, address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, src, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Approve `spender` to transfer up to `amount` from `src`\\n     * @dev This will overwrite the approval amount for `spender`\\n     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\\n     * @param spender The address of the account which may transfer tokens\\n     * @param amount The number of tokens that are approved (uint256.max means infinite)\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function approve(address spender, uint256 amount) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        transferAllowances[src][spender] = amount;\\n        emit Approval(src, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Increase approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param addedValue The number of additional tokens spender can transfer\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 newAllowance = transferAllowances[src][spender];\\n        newAllowance += addedValue;\\n        transferAllowances[src][spender] = newAllowance;\\n\\n        emit Approval(src, spender, newAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Decreases approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param subtractedValue The number of tokens to remove from total approval\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 currentAllowance = transferAllowances[src][spender];\\n        require(currentAllowance >= subtractedValue, \\\"decreased allowance below zero\\\");\\n        unchecked {\\n            currentAllowance -= subtractedValue;\\n        }\\n\\n        transferAllowances[src][spender] = currentAllowance;\\n\\n        emit Approval(src, spender, currentAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Get the underlying balance of the `owner`\\n     * @dev This also accrues interest in a transaction\\n     * @param owner The address of the account to query\\n     * @return amount The amount of underlying owned by `owner`\\n     */\\n    function balanceOfUnderlying(address owner) external override returns (uint256) {\\n        Exp memory exchangeRate = Exp({ mantissa: exchangeRateCurrent() });\\n        return mul_ScalarTruncate(exchangeRate, accountTokens[owner]);\\n    }\\n\\n    /**\\n     * @notice Returns the current total borrows plus accrued interest\\n     * @return totalBorrows The total borrows with interest\\n     */\\n    function totalBorrowsCurrent() external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return totalBorrows;\\n    }\\n\\n    /**\\n     * @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\\n     * @param account The address whose balance should be calculated after updating borrowIndex\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceCurrent(address account) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Sender supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function mint(uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, msg.sender, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender calls on-behalf of minter. minter supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param minter User whom the supply will be attributed to\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when minter address is zero\\n     */\\n    function mintBehalf(address minter, uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(minter);\\n\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, minter, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for the underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function redeem(uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer The user on behalf of whom to redeem\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for a specified amount of underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     */\\n    function redeemUnderlying(uint256 redeemAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems underlying assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer, on behalf of whom to redeem\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemUnderlyingBehalf(\\n        address redeemer,\\n        uint256 redeemAmount\\n    ) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets from the protocol to their own address\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function borrow(uint256 borrowAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _borrowFresh(msg.sender, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the borrower using `comptroller.updateDelegate`\\n     * @param borrower The borrower, on behalf of whom to borrow\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error DelegateNotApproved is thrown if caller is not approved delegate\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function borrowBehalf(address borrower, uint256 borrowAmount) external override returns (uint256) {\\n        _ensureSenderIsDelegateOf(borrower);\\n        accrueInterest();\\n\\n        _borrowFresh(borrower, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays their own borrow\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrow(uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, msg.sender, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays a borrow belonging to borrower\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, borrower, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Not restricted\\n     */\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external override returns (uint256) {\\n        _liquidateBorrow(msg.sender, borrower, repayAmount, vTokenCollateral, false);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice sets protocol share accumulated from liquidations\\n     * @dev must be equal or less than liquidation incentive - 1\\n     * @param newProtocolSeizeShareMantissa_ new protocol share mantissa\\n     * @custom:event Emits NewProtocolSeizeShare event on success\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error ProtocolSeizeShareTooBig is thrown when the new seize share is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setProtocolSeizeShare(uint256 newProtocolSeizeShareMantissa_) external {\\n        _checkAccessAllowed(\\\"setProtocolSeizeShare(uint256)\\\");\\n        uint256 liquidationIncentive = ComptrollerViewInterface(address(comptroller)).liquidationIncentiveMantissa();\\n        if (newProtocolSeizeShareMantissa_ + MANTISSA_ONE > liquidationIncentive) {\\n            revert ProtocolSeizeShareTooBig();\\n        }\\n\\n        uint256 oldProtocolSeizeShareMantissa = protocolSeizeShareMantissa;\\n        protocolSeizeShareMantissa = newProtocolSeizeShareMantissa_;\\n        emit NewProtocolSeizeShare(oldProtocolSeizeShareMantissa, newProtocolSeizeShareMantissa_);\\n    }\\n\\n    /**\\n     * @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\\n     * @dev Admin function to accrue interest and set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     * @custom:event Emits NewReserveFactor event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error SetReserveFactorBoundsCheck is thrown when the new reserve factor is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external override nonReentrant {\\n        _checkAccessAllowed(\\\"setReserveFactor(uint256)\\\");\\n\\n        accrueInterest();\\n        _setReserveFactorFresh(newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Accrues interest and reduces reserves by transferring to the protocol reserve contract\\n     * @dev Gracefully return if reserves already reduced in accrueInterest\\n     * @param reduceAmount Amount of reduction to reserves\\n     * @custom:event Emits ReservesReduced event; may emit AccrueInterest\\n     * @custom:error ReduceReservesCashNotAvailable is thrown when the vToken does not have sufficient cash\\n     * @custom:error ReduceReservesCashValidation is thrown when trying to withdraw more cash than the reserves have\\n     * @custom:access Not restricted\\n     */\\n    function reduceReserves(uint256 reduceAmount) external override nonReentrant {\\n        accrueInterest();\\n        if (reduceReservesBlockNumber == getBlockNumberOrTimestamp()) return;\\n        _reduceReservesFresh(reduceAmount);\\n    }\\n\\n    /**\\n     * @notice The sender adds to reserves.\\n     * @param addAmount The amount of underlying token to add as reserves\\n     * @custom:event Emits ReservesAdded event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function addReserves(uint256 addAmount) external override nonReentrant {\\n        accrueInterest();\\n        _addReservesFresh(addAmount);\\n    }\\n\\n    /**\\n     * @notice accrues interest and updates the interest rate model using _setInterestRateModelFresh\\n     * @dev Admin function to accrue interest and update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     * @custom:event Emits NewMarketInterestRateModel event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external override {\\n        _checkAccessAllowed(\\\"setInterestRateModel(address)\\\");\\n\\n        accrueInterest();\\n        _setInterestRateModelFresh(newInterestRateModel);\\n    }\\n\\n    /**\\n     * @notice Repays a certain amount of debt, treats the rest of the borrow as bad debt, essentially\\n     *   \\\"forgiving\\\" the borrower. Healing is a situation that should rarely happen. However, some pools\\n     *   may list risky assets or be configured improperly \\u2013 we want to still handle such cases gracefully.\\n     *   We assume that Comptroller does the seizing, so this function is only available to Comptroller.\\n     * @dev This function does not call any Comptroller hooks (like \\\"healAllowed\\\"), because we assume\\n     *   the Comptroller does all the necessary checks before calling this function.\\n     * @param payer account who repays the debt\\n     * @param borrower account to heal\\n     * @param repayAmount amount to repay\\n     * @custom:event Emits RepayBorrow, BadDebtIncreased events; may emit AccrueInterest\\n     * @custom:error HealBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:access Only Comptroller\\n     */\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external override nonReentrant {\\n        if (repayAmount != 0) {\\n            comptroller.preRepayHook(address(this), borrower);\\n        }\\n\\n        if (msg.sender != address(comptroller)) {\\n            revert HealBorrowUnauthorized();\\n        }\\n\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 totalBorrowsNew = totalBorrows;\\n\\n        uint256 actualRepayAmount;\\n        if (repayAmount != 0) {\\n            // _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n            // We violate checks-effects-interactions here to account for tokens that take transfer fees\\n            actualRepayAmount = _doTransferIn(payer, repayAmount);\\n            totalBorrowsNew = totalBorrowsNew - actualRepayAmount;\\n            emit RepayBorrow(\\n                payer,\\n                borrower,\\n                actualRepayAmount,\\n                accountBorrowsPrev - actualRepayAmount,\\n                totalBorrowsNew\\n            );\\n        }\\n\\n        // The transaction will fail if trying to repay too much\\n        uint256 badDebtDelta = accountBorrowsPrev - actualRepayAmount;\\n        if (badDebtDelta != 0) {\\n            uint256 badDebtOld = badDebt;\\n            uint256 badDebtNew = badDebtOld + badDebtDelta;\\n            totalBorrowsNew = totalBorrowsNew - badDebtDelta;\\n            badDebt = badDebtNew;\\n\\n            // We treat healing as \\\"repayment\\\", where vToken is the payer\\n            emit RepayBorrow(address(this), borrower, badDebtDelta, 0, totalBorrowsNew);\\n            emit BadDebtIncreased(borrower, badDebtDelta, badDebtOld, badDebtNew);\\n        }\\n\\n        accountBorrows[borrower].principal = 0;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        emit HealBorrow(payer, borrower, repayAmount);\\n    }\\n\\n    /**\\n     * @notice The extended version of liquidations, callable only by Comptroller. May skip\\n     *  the close factor check. The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error ForceLiquidateBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Only Comptroller\\n     */\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        if (msg.sender != address(comptroller)) {\\n            revert ForceLiquidateBorrowUnauthorized();\\n        }\\n        _liquidateBorrow(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Will fail unless called by another vToken during the process of liquidation.\\n     *  It's absolutely critical to use msg.sender as the borrowed vToken and not a parameter.\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     * @custom:event Emits Transfer, ReservesAdded events\\n     * @custom:error LiquidateSeizeLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:access Not restricted\\n     */\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external override nonReentrant {\\n        _seize(msg.sender, liquidator, borrower, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Updates bad debt\\n     * @dev Called only when bad debt is recovered from auction\\n     * @param recoveredAmount_ The amount of bad debt recovered\\n     * @custom:event Emits BadDebtRecovered event\\n     * @custom:access Only Shortfall contract\\n     */\\n    function badDebtRecovered(uint256 recoveredAmount_) external {\\n        require(msg.sender == shortfall, \\\"only shortfall contract can update bad debt\\\");\\n        require(recoveredAmount_ <= badDebt, \\\"more than bad debt recovered from auction\\\");\\n\\n        uint256 badDebtOld = badDebt;\\n        uint256 badDebtNew = badDebtOld - recoveredAmount_;\\n        badDebt = badDebtNew;\\n\\n        emit BadDebtRecovered(badDebtOld, badDebtNew);\\n    }\\n\\n    /**\\n     * @notice Sets protocol share reserve contract address\\n     * @param protocolShareReserve_ The address of the protocol share reserve contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setProtocolShareReserve(address payable protocolShareReserve_) external onlyOwner {\\n        _setProtocolShareReserve(protocolShareReserve_);\\n    }\\n\\n    /**\\n     * @notice Sets shortfall contract address\\n     * @param shortfall_ The address of the shortfall contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setShortfallContract(address shortfall_) external onlyOwner {\\n        _setShortfallContract(shortfall_);\\n    }\\n\\n    /**\\n     * @notice A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)\\n     * @param token The address of the ERC-20 token to sweep\\n     * @custom:access Only Governance\\n     */\\n    function sweepToken(IERC20Upgradeable token) external override {\\n        require(msg.sender == owner(), \\\"VToken::sweepToken: only admin can sweep tokens\\\");\\n        require(address(token) != underlying, \\\"VToken::sweepToken: can not sweep underlying token\\\");\\n        uint256 balance = token.balanceOf(address(this));\\n        token.safeTransfer(owner(), balance);\\n\\n        emit SweepToken(address(token));\\n    }\\n\\n    /**\\n     * @notice A public function to set new threshold of slot(block or second) difference after which funds will be sent to the protocol share reserve\\n     * @param _newReduceReservesBlockOrTimestampDelta slot(block or second) difference value\\n     * @custom:access Only Governance\\n     */\\n    function setReduceReservesBlockDelta(uint256 _newReduceReservesBlockOrTimestampDelta) external {\\n        _checkAccessAllowed(\\\"setReduceReservesBlockDelta(uint256)\\\");\\n        require(_newReduceReservesBlockOrTimestampDelta > 0, \\\"Invalid Input\\\");\\n        emit NewReduceReservesBlockDelta(reduceReservesBlockDelta, _newReduceReservesBlockOrTimestampDelta);\\n        reduceReservesBlockDelta = _newReduceReservesBlockOrTimestampDelta;\\n    }\\n\\n    /**\\n     * @notice Get the current allowance from `owner` for `spender`\\n     * @param owner The address of the account which owns the tokens to be spent\\n     * @param spender The address of the account which may transfer tokens\\n     * @return amount The number of tokens allowed to be spent (type(uint256).max means infinite)\\n     */\\n    function allowance(address owner, address spender) external view override returns (uint256) {\\n        return transferAllowances[owner][spender];\\n    }\\n\\n    /**\\n     * @notice Get the token balance of the `owner`\\n     * @param owner The address of the account to query\\n     * @return amount The number of tokens owned by `owner`\\n     */\\n    function balanceOf(address owner) external view override returns (uint256) {\\n        return accountTokens[owner];\\n    }\\n\\n    /**\\n     * @notice Get a snapshot of the account's balances, and the cached exchange rate\\n     * @dev This is used by comptroller to more efficiently perform liquidity checks.\\n     * @param account Address of the account to snapshot\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return vTokenBalance User's balance of vTokens\\n     * @return borrowBalance Amount owed in terms of underlying\\n     * @return exchangeRate Stored exchange rate\\n     */\\n    function getAccountSnapshot(\\n        address account\\n    )\\n        external\\n        view\\n        override\\n        returns (uint256 error, uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRate)\\n    {\\n        return (NO_ERROR, accountTokens[account], _borrowBalanceStored(account), _exchangeRateStored());\\n    }\\n\\n    /**\\n     * @notice Get cash balance of this vToken in the underlying asset\\n     * @return cash The quantity of underlying asset owned by this contract\\n     */\\n    function getCash() external view override returns (uint256) {\\n        return _getCashPrior();\\n    }\\n\\n    /**\\n     * @notice Returns the current per slot(block or second) borrow interest rate for this vToken\\n     * @return rate The borrow interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function borrowRatePerBlock() external view override returns (uint256) {\\n        return interestRateModel.getBorrowRate(_getCashPrior(), totalBorrows, totalReserves, badDebt);\\n    }\\n\\n    /**\\n     * @notice Returns the current per-slot(block or second) supply interest rate for this v\\n     * @return rate The supply interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function supplyRatePerBlock() external view override returns (uint256) {\\n        return\\n            interestRateModel.getSupplyRate(\\n                _getCashPrior(),\\n                totalBorrows,\\n                totalReserves,\\n                reserveFactorMantissa,\\n                badDebt\\n            );\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceStored(address account) external view override returns (uint256) {\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateStored() external view override returns (uint256) {\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Accrue interest then return the up-to-date exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateCurrent() public override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Applies accrued interest to total borrows and reserves\\n     * @dev This calculates interest accrued from the last checkpointed slot(block or second)\\n     *  up to the current slot(block or second) and writes new checkpoint to storage and\\n     *  reduce spread reserves to protocol share reserve\\n     *  if currentSlot - reduceReservesBlockNumber >= slotDelta\\n     * @return Always NO_ERROR\\n     * @custom:event Emits AccrueInterest event on success\\n     * @custom:access Not restricted\\n     */\\n    function accrueInterest() public virtual override returns (uint256) {\\n        /* Remember the initial block number or timestamp */\\n        uint256 currentSlotNumber = getBlockNumberOrTimestamp();\\n        uint256 accrualSlotNumberPrior = accrualBlockNumber;\\n\\n        /* Short-circuit accumulating 0 interest */\\n        if (accrualSlotNumberPrior == currentSlotNumber) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Read the previous values out of storage */\\n        uint256 cashPrior = _getCashPrior();\\n        uint256 borrowsPrior = totalBorrows;\\n        uint256 reservesPrior = totalReserves;\\n        uint256 borrowIndexPrior = borrowIndex;\\n\\n        /* Calculate the current borrow interest rate */\\n        uint256 borrowRateMantissa = interestRateModel.getBorrowRate(cashPrior, borrowsPrior, reservesPrior, badDebt);\\n        require(borrowRateMantissa <= MAX_BORROW_RATE_MANTISSA, \\\"borrow rate is absurdly high\\\");\\n\\n        /* Calculate the number of slots elapsed since the last accrual */\\n        uint256 slotDelta = currentSlotNumber - accrualSlotNumberPrior;\\n\\n        /*\\n         * Calculate the interest accumulated into borrows and reserves and the new index:\\n         *  simpleInterestFactor = borrowRate * slotDelta\\n         *  interestAccumulated = simpleInterestFactor * totalBorrows\\n         *  totalBorrowsNew = interestAccumulated + totalBorrows\\n         *  totalReservesNew = interestAccumulated * reserveFactor + totalReserves\\n         *  borrowIndexNew = simpleInterestFactor * borrowIndex + borrowIndex\\n         */\\n\\n        Exp memory simpleInterestFactor = mul_(Exp({ mantissa: borrowRateMantissa }), slotDelta);\\n        uint256 interestAccumulated = mul_ScalarTruncate(simpleInterestFactor, borrowsPrior);\\n        uint256 totalBorrowsNew = interestAccumulated + borrowsPrior;\\n        uint256 totalReservesNew = mul_ScalarTruncateAddUInt(\\n            Exp({ mantissa: reserveFactorMantissa }),\\n            interestAccumulated,\\n            reservesPrior\\n        );\\n        uint256 borrowIndexNew = mul_ScalarTruncateAddUInt(simpleInterestFactor, borrowIndexPrior, borrowIndexPrior);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the previously calculated values into storage */\\n        accrualBlockNumber = currentSlotNumber;\\n        borrowIndex = borrowIndexNew;\\n        totalBorrows = totalBorrowsNew;\\n        totalReserves = totalReservesNew;\\n\\n        if (currentSlotNumber - reduceReservesBlockNumber >= reduceReservesBlockDelta) {\\n            reduceReservesBlockNumber = currentSlotNumber;\\n            if (cashPrior < totalReservesNew) {\\n                _reduceReservesFresh(cashPrior);\\n            } else {\\n                _reduceReservesFresh(totalReservesNew);\\n            }\\n        }\\n\\n        /* We emit an AccrueInterest event */\\n        emit AccrueInterest(cashPrior, interestAccumulated, borrowIndexNew, totalBorrowsNew);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice User supplies assets into the market and receives vTokens in exchange\\n     * @dev Assumes interest has already been accrued up to the current block or timestamp\\n     * @param payer The address of the account which is sending the assets for supply\\n     * @param minter The address of the account which is supplying the assets\\n     * @param mintAmount The amount of the underlying asset to supply\\n     */\\n    function _mintFresh(address payer, address minter, uint256 mintAmount) internal {\\n        /* Fail if mint not allowed */\\n        comptroller.preMintHook(address(this), minter, mintAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert MintFreshnessCheck();\\n        }\\n\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         *  We call `_doTransferIn` for the minter and the mintAmount.\\n         *  `_doTransferIn` reverts if anything goes wrong, since we can't be sure if\\n         *  side-effects occurred. The function returns the amount actually transferred,\\n         *  in case of a fee. On success, the vToken holds an additional `actualMintAmount`\\n         *  of cash.\\n         */\\n        uint256 actualMintAmount = _doTransferIn(payer, mintAmount);\\n\\n        /*\\n         * We get the current exchange rate and calculate the number of vTokens to be minted:\\n         *  mintTokens = actualMintAmount / exchangeRate\\n         */\\n\\n        uint256 mintTokens = div_(actualMintAmount, exchangeRate);\\n\\n        /*\\n         * We calculate the new total supply of vTokens and minter token balance, checking for overflow:\\n         *  totalSupplyNew = totalSupply + mintTokens\\n         *  accountTokensNew = accountTokens[minter] + mintTokens\\n         * And write them into storage\\n         */\\n        totalSupply = totalSupply + mintTokens;\\n        uint256 balanceAfter = accountTokens[minter] + mintTokens;\\n        accountTokens[minter] = balanceAfter;\\n\\n        /* We emit a Mint event, and a Transfer event */\\n        emit Mint(minter, actualMintAmount, mintTokens, balanceAfter);\\n        emit Transfer(address(0), minter, mintTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.mintVerify(address(this), minter, actualMintAmount, mintTokens);\\n    }\\n\\n    /**\\n     * @notice Redeemer redeems vTokens in exchange for the underlying assets, transferred to the receiver. Redeemer and receiver can be the same\\n     *   address, or different addresses if the receiver was previously approved by the redeemer as a valid delegate (see Comptroller.updateDelegate)\\n     * @dev Assumes interest has already been accrued up to the current slot(block or second)\\n     * @param redeemer The address of the account which is redeeming the tokens\\n     * @param receiver The receiver of the underlying tokens\\n     * @param redeemTokensIn The number of vTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     * @param redeemAmountIn The number of underlying tokens to receive from redeeming vTokens (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     */\\n    function _redeemFresh(address redeemer, address receiver, uint256 redeemTokensIn, uint256 redeemAmountIn) internal {\\n        require(redeemTokensIn == 0 || redeemAmountIn == 0, \\\"one of redeemTokensIn or redeemAmountIn must be zero\\\");\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RedeemFreshnessCheck();\\n        }\\n\\n        /* exchangeRate = invoke Exchange Rate Stored() */\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        uint256 redeemTokens;\\n        uint256 redeemAmount;\\n\\n        /* If redeemTokensIn > 0: */\\n        if (redeemTokensIn > 0) {\\n            /*\\n             * We calculate the exchange rate and the amount of underlying to be redeemed:\\n             *  redeemTokens = redeemTokensIn\\n             */\\n            redeemTokens = redeemTokensIn;\\n        } else {\\n            /*\\n             * We get the current exchange rate and calculate the amount to be redeemed:\\n             *  redeemTokens = redeemAmountIn / exchangeRate\\n             */\\n            redeemTokens = div_(redeemAmountIn, exchangeRate);\\n\\n            uint256 _redeemAmount = mul_(redeemTokens, exchangeRate);\\n            if (_redeemAmount != 0 && _redeemAmount != redeemAmountIn) redeemTokens++; // round up\\n        }\\n\\n        // redeemAmount = exchangeRate * redeemTokens\\n        redeemAmount = mul_ScalarTruncate(exchangeRate, redeemTokens);\\n\\n        // Revert if amount is zero\\n        if (redeemAmount == 0) {\\n            revert(\\\"redeemAmount is zero\\\");\\n        }\\n\\n        /* Fail if redeem not allowed */\\n        comptroller.preRedeemHook(address(this), redeemer, redeemTokens);\\n\\n        /* Fail gracefully if protocol has insufficient cash */\\n        if (_getCashPrior() - totalReserves < redeemAmount) {\\n            revert RedeemTransferOutNotPossible();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing reduced supply before external transfer.\\n         */\\n        totalSupply = totalSupply - redeemTokens;\\n        uint256 balanceAfter = accountTokens[redeemer] - redeemTokens;\\n        accountTokens[redeemer] = balanceAfter;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the redeemAmount.\\n         *  On success, the vToken has redeemAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, redeemAmount);\\n\\n        /* We emit a Transfer event, and a Redeem event */\\n        emit Transfer(redeemer, address(this), redeemTokens);\\n        emit Redeem(redeemer, redeemAmount, redeemTokens, balanceAfter);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.redeemVerify(address(this), redeemer, redeemAmount, redeemTokens);\\n    }\\n\\n    /**\\n     * @notice Users or their delegates borrow assets from the protocol\\n     * @param borrower User who borrows the assets\\n     * @param receiver The receiver of the tokens, if called by a delegate\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     */\\n    function _borrowFresh(address borrower, address receiver, uint256 borrowAmount) internal {\\n        /* Fail if borrow not allowed */\\n        comptroller.preBorrowHook(address(this), borrower, borrowAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert BorrowFreshnessCheck();\\n        }\\n\\n        /* Fail gracefully if protocol has insufficient underlying cash */\\n        if (_getCashPrior() - totalReserves < borrowAmount) {\\n            revert BorrowCashNotAvailable();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on overflow:\\n         *  accountBorrowNew = accountBorrow + borrowAmount\\n         *  totalBorrowsNew = totalBorrows + borrowAmount\\n         */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 accountBorrowsNew = accountBorrowsPrev + borrowAmount;\\n        uint256 totalBorrowsNew = totalBorrows + borrowAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing increased borrow before external transfer.\\n        `*/\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the borrowAmount.\\n         *  On success, the vToken borrowAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, borrowAmount);\\n\\n        /* We emit a Borrow event */\\n        emit Borrow(borrower, borrowAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.borrowVerify(address(this), borrower, borrowAmount);\\n    }\\n\\n    /**\\n     * @notice Borrows are repaid by another user (possibly the borrower).\\n     * @param payer the account paying off the borrow\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount the amount of underlying tokens being returned, or type(uint256).max for the full outstanding amount\\n     * @return (uint) the actual repayment amount.\\n     */\\n    function _repayBorrowFresh(address payer, address borrower, uint256 repayAmount) internal returns (uint256) {\\n        /* Fail if repayBorrow not allowed */\\n        comptroller.preRepayHook(address(this), borrower);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RepayBorrowFreshnessCheck();\\n        }\\n\\n        /* We fetch the amount the borrower owes, with accumulated interest */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n\\n        uint256 repayAmountFinal = repayAmount >= accountBorrowsPrev ? accountBorrowsPrev : repayAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We call _doTransferIn for the payer and the repayAmount\\n         *  On success, the vToken holds an additional repayAmount of cash.\\n         *  _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         *   it returns the amount actually transferred, in case of a fee.\\n         */\\n        uint256 actualRepayAmount = _doTransferIn(payer, repayAmountFinal);\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on underflow:\\n         *  accountBorrowsNew = accountBorrows - actualRepayAmount\\n         *  totalBorrowsNew = totalBorrows - actualRepayAmount\\n         */\\n        uint256 accountBorrowsNew = accountBorrowsPrev - actualRepayAmount;\\n        uint256 totalBorrowsNew = totalBorrows - actualRepayAmount;\\n\\n        /* We write the previously calculated values into storage */\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /* We emit a RepayBorrow event */\\n        emit RepayBorrow(payer, borrower, actualRepayAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.repayBorrowVerify(address(this), payer, borrower, actualRepayAmount, borrowIndex);\\n\\n        return actualRepayAmount;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal nonReentrant {\\n        accrueInterest();\\n\\n        uint256 error = vTokenCollateral.accrueInterest();\\n        if (error != NO_ERROR) {\\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted liquidation failed\\n            revert LiquidateAccrueCollateralInterestFailed(error);\\n        }\\n\\n        _liquidateBorrowFresh(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice The liquidator liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrowFresh(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal {\\n        /* Fail if liquidate not allowed */\\n        comptroller.preLiquidateHook(\\n            address(this),\\n            address(vTokenCollateral),\\n            borrower,\\n            repayAmount,\\n            skipLiquidityCheck\\n        );\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert LiquidateFreshnessCheck();\\n        }\\n\\n        /* Verify vTokenCollateral market's slot(block or second) number equals current slot(block or second) number */\\n        if (vTokenCollateral.accrualBlockNumber() != getBlockNumberOrTimestamp()) {\\n            revert LiquidateCollateralFreshnessCheck();\\n        }\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateLiquidatorIsBorrower();\\n        }\\n\\n        /* Fail if repayAmount = 0 */\\n        if (repayAmount == 0) {\\n            revert LiquidateCloseAmountIsZero();\\n        }\\n\\n        /* Fail if repayAmount = type(uint256).max */\\n        if (repayAmount == type(uint256).max) {\\n            revert LiquidateCloseAmountIsUintMax();\\n        }\\n\\n        /* Fail if repayBorrow fails */\\n        uint256 actualRepayAmount = _repayBorrowFresh(liquidator, borrower, repayAmount);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We calculate the number of collateral tokens that will be seized */\\n        (uint256 amountSeizeError, uint256 seizeTokens) = comptroller.liquidateCalculateSeizeTokens(\\n            address(this),\\n            address(vTokenCollateral),\\n            actualRepayAmount\\n        );\\n        require(amountSeizeError == NO_ERROR, \\\"LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED\\\");\\n\\n        /* Revert if borrower collateral token balance < seizeTokens */\\n        require(vTokenCollateral.balanceOf(borrower) >= seizeTokens, \\\"LIQUIDATE_SEIZE_TOO_MUCH\\\");\\n\\n        // If this is also the collateral, call _seize internally to avoid re-entrancy, otherwise make an external call\\n        if (address(vTokenCollateral) == address(this)) {\\n            _seize(address(this), liquidator, borrower, seizeTokens);\\n        } else {\\n            vTokenCollateral.seize(liquidator, borrower, seizeTokens);\\n        }\\n\\n        /* We emit a LiquidateBorrow event */\\n        emit LiquidateBorrow(liquidator, borrower, actualRepayAmount, address(vTokenCollateral), seizeTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.liquidateBorrowVerify(\\n            address(this),\\n            address(vTokenCollateral),\\n            liquidator,\\n            borrower,\\n            actualRepayAmount,\\n            seizeTokens\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Called only during an in-kind liquidation, or by liquidateBorrow during the liquidation of another VToken.\\n     *  It's absolutely critical to use msg.sender as the seizer vToken and not a parameter.\\n     * @param seizerContract The contract seizing the collateral (either borrowed vToken or Comptroller)\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     */\\n    function _seize(address seizerContract, address liquidator, address borrower, uint256 seizeTokens) internal {\\n        /* Fail if seize not allowed */\\n        comptroller.preSeizeHook(address(this), seizerContract, liquidator, borrower);\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateSeizeLiquidatorIsBorrower();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and liquidator token balances, failing on underflow/overflow:\\n         *  borrowerTokensNew = accountTokens[borrower] - seizeTokens\\n         *  liquidatorTokensNew = accountTokens[liquidator] + seizeTokens\\n         */\\n        uint256 liquidationIncentiveMantissa = ComptrollerViewInterface(address(comptroller))\\n            .liquidationIncentiveMantissa();\\n        uint256 numerator = mul_(seizeTokens, Exp({ mantissa: protocolSeizeShareMantissa }));\\n        uint256 protocolSeizeTokens = div_(numerator, Exp({ mantissa: liquidationIncentiveMantissa }));\\n        uint256 liquidatorSeizeTokens = seizeTokens - protocolSeizeTokens;\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n        uint256 protocolSeizeAmount = mul_ScalarTruncate(exchangeRate, protocolSeizeTokens);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the calculated values into storage */\\n        totalSupply = totalSupply - protocolSeizeTokens;\\n        accountTokens[borrower] = accountTokens[borrower] - seizeTokens;\\n        accountTokens[liquidator] = accountTokens[liquidator] + liquidatorSeizeTokens;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, protocolSeizeAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.LIQUIDATION\\n        );\\n\\n        /* Emit a Transfer event */\\n        emit Transfer(borrower, liquidator, liquidatorSeizeTokens);\\n        emit ProtocolSeize(borrower, protocolShareReserve, protocolSeizeAmount);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.seizeVerify(address(this), seizerContract, liquidator, borrower, seizeTokens);\\n    }\\n\\n    function _setComptroller(ComptrollerInterface newComptroller) internal {\\n        ComptrollerInterface oldComptroller = comptroller;\\n        // Ensure invoke comptroller.isComptroller() returns true\\n        require(newComptroller.isComptroller(), \\\"marker method returned false\\\");\\n\\n        // Set market's comptroller to newComptroller\\n        comptroller = newComptroller;\\n\\n        // Emit NewComptroller(oldComptroller, newComptroller)\\n        emit NewComptroller(oldComptroller, newComptroller);\\n    }\\n\\n    /**\\n     * @notice Sets a new reserve factor for the protocol (*requires fresh interest accrual)\\n     * @dev Admin function to set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     */\\n    function _setReserveFactorFresh(uint256 newReserveFactorMantissa) internal {\\n        // Verify market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetReserveFactorFreshCheck();\\n        }\\n\\n        // Check newReserveFactor \\u2264 maxReserveFactor\\n        if (newReserveFactorMantissa > MAX_RESERVE_FACTOR_MANTISSA) {\\n            revert SetReserveFactorBoundsCheck();\\n        }\\n\\n        uint256 oldReserveFactorMantissa = reserveFactorMantissa;\\n        reserveFactorMantissa = newReserveFactorMantissa;\\n\\n        emit NewReserveFactor(oldReserveFactorMantissa, newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Add reserves by transferring from caller\\n     * @dev Requires fresh interest accrual\\n     * @param addAmount Amount of addition to reserves\\n     * @return actualAddAmount The actual amount added, excluding the potential token fees\\n     */\\n    function _addReservesFresh(uint256 addAmount) internal returns (uint256) {\\n        // totalReserves + actualAddAmount\\n        uint256 totalReservesNew;\\n        uint256 actualAddAmount;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert AddReservesFactorFreshCheck(actualAddAmount);\\n        }\\n\\n        actualAddAmount = _doTransferIn(msg.sender, addAmount);\\n        totalReservesNew = totalReserves + actualAddAmount;\\n        totalReserves = totalReservesNew;\\n        emit ReservesAdded(msg.sender, actualAddAmount, totalReservesNew);\\n\\n        return actualAddAmount;\\n    }\\n\\n    /**\\n     * @notice Reduces reserves by transferring to the protocol reserve contract\\n     * @dev Requires fresh interest accrual\\n     * @param reduceAmount Amount of reduction to reserves\\n     */\\n    function _reduceReservesFresh(uint256 reduceAmount) internal {\\n        if (reduceAmount == 0) {\\n            return;\\n        }\\n        // totalReserves - reduceAmount\\n        uint256 totalReservesNew;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert ReduceReservesFreshCheck();\\n        }\\n\\n        // Fail gracefully if protocol has insufficient underlying cash\\n        if (_getCashPrior() < reduceAmount) {\\n            revert ReduceReservesCashNotAvailable();\\n        }\\n\\n        // Check reduceAmount \\u2264 reserves[n] (totalReserves)\\n        if (reduceAmount > totalReserves) {\\n            revert ReduceReservesCashValidation();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        totalReservesNew = totalReserves - reduceAmount;\\n\\n        // Store reserves[n+1] = reserves[n] - reduceAmount\\n        totalReserves = totalReservesNew;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, reduceAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.SPREAD\\n        );\\n\\n        emit SpreadReservesReduced(protocolShareReserve, reduceAmount, totalReservesNew);\\n    }\\n\\n    /**\\n     * @notice updates the interest rate model (*requires fresh interest accrual)\\n     * @dev Admin function to update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     */\\n    function _setInterestRateModelFresh(InterestRateModel newInterestRateModel) internal {\\n        // Used to store old model for use in the event that is emitted on success\\n        InterestRateModel oldInterestRateModel;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetInterestRateModelFreshCheck();\\n        }\\n\\n        // Track the market's current interest rate model\\n        oldInterestRateModel = interestRateModel;\\n\\n        // Ensure invoke newInterestRateModel.isInterestRateModel() returns true\\n        require(newInterestRateModel.isInterestRateModel(), \\\"marker method returned false\\\");\\n\\n        // Set the interest rate model to newInterestRateModel\\n        interestRateModel = newInterestRateModel;\\n\\n        // Emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel)\\n        emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel);\\n    }\\n\\n    /**\\n     * Safe Token **\\n     */\\n\\n    /**\\n     * @dev Similar to ERC-20 transfer, but handles tokens that have transfer fees.\\n     *      This function returns the actual amount received,\\n     *      which may be less than `amount` if there is a fee attached to the transfer.\\n     * @param from Sender of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     * @return Actual amount received\\n     */\\n    function _doTransferIn(address from, uint256 amount) internal virtual returns (uint256) {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        uint256 balanceBefore = token.balanceOf(address(this));\\n        token.safeTransferFrom(from, address(this), amount);\\n        uint256 balanceAfter = token.balanceOf(address(this));\\n        // Return the amount that was *actually* transferred\\n        return balanceAfter - balanceBefore;\\n    }\\n\\n    /**\\n     * @dev Just a regular ERC-20 transfer, reverts on failure\\n     * @param to Receiver of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     */\\n    function _doTransferOut(address to, uint256 amount) internal virtual {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        token.safeTransfer(to, amount);\\n    }\\n\\n    /**\\n     * @notice Transfer `tokens` tokens from `src` to `dst` by `spender`\\n     * @dev Called by both `transfer` and `transferFrom` internally\\n     * @param spender The address of the account performing the transfer\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param tokens The number of tokens to transfer\\n     */\\n    function _transferTokens(address spender, address src, address dst, uint256 tokens) internal {\\n        /* Fail if transfer not allowed */\\n        comptroller.preTransferHook(address(this), src, dst, tokens);\\n\\n        /* Do not allow self-transfers */\\n        if (src == dst) {\\n            revert TransferNotAllowed();\\n        }\\n\\n        /* Get the allowance, infinite for the account owner */\\n        uint256 startingAllowance;\\n        if (spender == src) {\\n            startingAllowance = type(uint256).max;\\n        } else {\\n            startingAllowance = transferAllowances[src][spender];\\n        }\\n\\n        /* Do the calculations, checking for {under,over}flow */\\n        uint256 allowanceNew = startingAllowance - tokens;\\n        uint256 srcTokensNew = accountTokens[src] - tokens;\\n        uint256 dstTokensNew = accountTokens[dst] + tokens;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n\\n        accountTokens[src] = srcTokensNew;\\n        accountTokens[dst] = dstTokensNew;\\n\\n        /* Eat some of the allowance (if necessary) */\\n        if (startingAllowance != type(uint256).max) {\\n            transferAllowances[src][spender] = allowanceNew;\\n        }\\n\\n        /* We emit a Transfer event */\\n        emit Transfer(src, dst, tokens);\\n\\n        comptroller.transferVerify(address(this), src, dst, tokens);\\n    }\\n\\n    /**\\n     * @notice Initialize the money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     */\\n    function _initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n        require(accrualBlockNumber == 0 && borrowIndex == 0, \\\"market may only be initialized once\\\");\\n\\n        // Set initial exchange rate\\n        initialExchangeRateMantissa = initialExchangeRateMantissa_;\\n        require(initialExchangeRateMantissa > 0, \\\"initial exchange rate must be greater than zero.\\\");\\n\\n        _setComptroller(comptroller_);\\n\\n        // Initialize slot(block or second) number and borrow index (slot(block or second) number mocks depend on comptroller being set)\\n        accrualBlockNumber = getBlockNumberOrTimestamp();\\n        borrowIndex = MANTISSA_ONE;\\n\\n        // Set the interest rate model (depends on slot(block or second) number / borrow index)\\n        _setInterestRateModelFresh(interestRateModel_);\\n\\n        _setReserveFactorFresh(reserveFactorMantissa_);\\n\\n        name = name_;\\n        symbol = symbol_;\\n        decimals = decimals_;\\n        _setShortfallContract(riskManagement.shortfall);\\n        _setProtocolShareReserve(riskManagement.protocolShareReserve);\\n        protocolSeizeShareMantissa = DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA;\\n\\n        // Set underlying and sanity check it\\n        underlying = underlying_;\\n        IERC20Upgradeable(underlying).totalSupply();\\n\\n        // The counter starts true to prevent changing it from zero to non-zero (i.e. smaller cost/refund)\\n        _notEntered = true;\\n        _transferOwnership(admin_);\\n    }\\n\\n    function _setShortfallContract(address shortfall_) internal {\\n        ensureNonzeroAddress(shortfall_);\\n        address oldShortfall = shortfall;\\n        shortfall = shortfall_;\\n        emit NewShortfallContract(oldShortfall, shortfall_);\\n    }\\n\\n    function _setProtocolShareReserve(address payable protocolShareReserve_) internal {\\n        ensureNonzeroAddress(protocolShareReserve_);\\n        address oldProtocolShareReserve = address(protocolShareReserve);\\n        protocolShareReserve = protocolShareReserve_;\\n        emit NewProtocolShareReserve(oldProtocolShareReserve, address(protocolShareReserve_));\\n    }\\n\\n    function _ensureSenderIsDelegateOf(address user) internal view {\\n        if (!ComptrollerViewInterface(address(comptroller)).approvedDelegates(user, msg.sender)) {\\n            revert DelegateNotApproved();\\n        }\\n    }\\n\\n    /**\\n     * @notice Gets balance of this contract in terms of the underlying\\n     * @dev This excludes the value of the current message, if any\\n     * @return The quantity of underlying tokens owned by this contract\\n     */\\n    function _getCashPrior() internal view virtual returns (uint256) {\\n        return IERC20Upgradeable(underlying).balanceOf(address(this));\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance the calculated balance\\n     */\\n    function _borrowBalanceStored(address account) internal view returns (uint256) {\\n        /* Get borrowBalance and borrowIndex */\\n        BorrowSnapshot memory borrowSnapshot = accountBorrows[account];\\n\\n        /* If borrowBalance = 0 then borrowIndex is likely also 0.\\n         * Rather than failing the calculation with a division by 0, we immediately return 0 in this case.\\n         */\\n        if (borrowSnapshot.principal == 0) {\\n            return 0;\\n        }\\n\\n        /* Calculate new borrow balance using the interest index:\\n         *  recentBorrowBalance = borrower.borrowBalance * market.borrowIndex / borrower.borrowIndex\\n         */\\n        uint256 principalTimesIndex = borrowSnapshot.principal * borrowIndex;\\n\\n        return principalTimesIndex / borrowSnapshot.interestIndex;\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function _exchangeRateStored() internal view virtual returns (uint256) {\\n        uint256 _totalSupply = totalSupply;\\n        if (_totalSupply == 0) {\\n            /*\\n             * If there are no tokens minted:\\n             *  exchangeRate = initialExchangeRate\\n             */\\n            return initialExchangeRateMantissa;\\n        }\\n        /*\\n         * Otherwise:\\n         *  exchangeRate = (totalCash + totalBorrows + badDebt - totalReserves) / totalSupply\\n         */\\n        uint256 totalCash = _getCashPrior();\\n        uint256 cashPlusBorrowsMinusReserves = totalCash + totalBorrows + badDebt - totalReserves;\\n        uint256 exchangeRate = (cashPlusBorrowsMinusReserves * EXP_SCALE) / _totalSupply;\\n\\n        return exchangeRate;\\n    }\\n}\\n\",\"keccak256\":\"0xa220ca317fe69b920b86e43f054c43b5f891f12160fd312c9a21668f969ee056\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { ComptrollerInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\n\\n/**\\n * @title VTokenStorage\\n * @author Venus\\n * @notice Storage layout used by the `VToken` contract\\n */\\n// solhint-disable-next-line max-states-count\\ncontract VTokenStorage {\\n    /**\\n     * @notice Container for borrow balance information\\n     * @member principal Total balance (with accrued interest), after applying the most recent balance-changing action\\n     * @member interestIndex Global borrowIndex as of the most recent balance-changing action\\n     */\\n    struct BorrowSnapshot {\\n        uint256 principal;\\n        uint256 interestIndex;\\n    }\\n\\n    /**\\n     * @dev Guard variable for re-entrancy checks\\n     */\\n    bool internal _notEntered;\\n\\n    /**\\n     * @notice Underlying asset for this VToken\\n     */\\n    address public underlying;\\n\\n    /**\\n     * @notice EIP-20 token name for this token\\n     */\\n    string public name;\\n\\n    /**\\n     * @notice EIP-20 token symbol for this token\\n     */\\n    string public symbol;\\n\\n    /**\\n     * @notice EIP-20 token decimals for this token\\n     */\\n    uint8 public decimals;\\n\\n    /**\\n     * @notice Protocol share Reserve contract address\\n     */\\n    address payable public protocolShareReserve;\\n\\n    /**\\n     * @notice Contract which oversees inter-vToken operations\\n     */\\n    ComptrollerInterface public comptroller;\\n\\n    /**\\n     * @notice Model which tells what the current interest rate should be\\n     */\\n    InterestRateModel public interestRateModel;\\n\\n    // Initial exchange rate used when minting the first VTokens (used when totalSupply = 0)\\n    uint256 internal initialExchangeRateMantissa;\\n\\n    /**\\n     * @notice Fraction of interest currently set aside for reserves\\n     */\\n    uint256 public reserveFactorMantissa;\\n\\n    /**\\n     * @notice Slot(block or second) number that interest was last accrued at\\n     */\\n    uint256 public accrualBlockNumber;\\n\\n    /**\\n     * @notice Accumulator of the total earned interest rate since the opening of the market\\n     */\\n    uint256 public borrowIndex;\\n\\n    /**\\n     * @notice Total amount of outstanding borrows of the underlying in this market\\n     */\\n    uint256 public totalBorrows;\\n\\n    /**\\n     * @notice Total amount of reserves of the underlying held in this market\\n     */\\n    uint256 public totalReserves;\\n\\n    /**\\n     * @notice Total number of tokens in circulation\\n     */\\n    uint256 public totalSupply;\\n\\n    /**\\n     * @notice Total bad debt of the market\\n     */\\n    uint256 public badDebt;\\n\\n    // Official record of token balances for each account\\n    mapping(address => uint256) internal accountTokens;\\n\\n    // Approved token transfer amounts on behalf of others\\n    mapping(address => mapping(address => uint256)) internal transferAllowances;\\n\\n    // Mapping of account addresses to outstanding borrow balances\\n    mapping(address => BorrowSnapshot) internal accountBorrows;\\n\\n    /**\\n     * @notice Share of seized collateral that is added to reserves\\n     */\\n    uint256 public protocolSeizeShareMantissa;\\n\\n    /**\\n     * @notice Storage of Shortfall contract address\\n     */\\n    address public shortfall;\\n\\n    /**\\n     * @notice delta slot (block or second) after which reserves will be reduced\\n     */\\n    uint256 public reduceReservesBlockDelta;\\n\\n    /**\\n     * @notice last slot (block or second) number at which reserves were reduced\\n     */\\n    uint256 public reduceReservesBlockNumber;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n}\\n\\n/**\\n * @title VTokenInterface\\n * @author Venus\\n * @notice Interface implemented by the `VToken` contract\\n */\\nabstract contract VTokenInterface is VTokenStorage {\\n    struct RiskManagementInit {\\n        address shortfall;\\n        address payable protocolShareReserve;\\n    }\\n\\n    /*** Market Events ***/\\n\\n    /**\\n     * @notice Event emitted when interest is accrued\\n     */\\n    event AccrueInterest(uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when tokens are minted\\n     */\\n    event Mint(address indexed minter, uint256 mintAmount, uint256 mintTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when tokens are redeemed\\n     */\\n    event Redeem(address indexed redeemer, uint256 redeemAmount, uint256 redeemTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when underlying is borrowed\\n     */\\n    event Borrow(address indexed borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when a borrow is repaid\\n     */\\n    event RepayBorrow(\\n        address indexed payer,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        uint256 accountBorrows,\\n        uint256 totalBorrows\\n    );\\n\\n    /**\\n     * @notice Event emitted when bad debt is accumulated on a market\\n     * @param borrower borrower to \\\"forgive\\\"\\n     * @param badDebtDelta amount of new bad debt recorded\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtIncreased(address indexed borrower, uint256 badDebtDelta, uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when bad debt is recovered via an auction\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtRecovered(uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when a borrow is liquidated\\n     */\\n    event LiquidateBorrow(\\n        address indexed liquidator,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        address indexed vTokenCollateral,\\n        uint256 seizeTokens\\n    );\\n\\n    /*** Admin Events ***/\\n\\n    /**\\n     * @notice Event emitted when comptroller is changed\\n     */\\n    event NewComptroller(ComptrollerInterface indexed oldComptroller, ComptrollerInterface indexed newComptroller);\\n\\n    /**\\n     * @notice Event emitted when shortfall contract address is changed\\n     */\\n    event NewShortfallContract(address indexed oldShortfall, address indexed newShortfall);\\n\\n    /**\\n     * @notice Event emitted when protocol share reserve contract address is changed\\n     */\\n    event NewProtocolShareReserve(address indexed oldProtocolShareReserve, address indexed newProtocolShareReserve);\\n\\n    /**\\n     * @notice Event emitted when interestRateModel is changed\\n     */\\n    event NewMarketInterestRateModel(\\n        InterestRateModel indexed oldInterestRateModel,\\n        InterestRateModel indexed newInterestRateModel\\n    );\\n\\n    /**\\n     * @notice Event emitted when protocol seize share is changed\\n     */\\n    event NewProtocolSeizeShare(uint256 oldProtocolSeizeShareMantissa, uint256 newProtocolSeizeShareMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserve factor is changed\\n     */\\n    event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserves are added\\n     */\\n    event ReservesAdded(address indexed benefactor, uint256 addAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice Event emitted when the spread reserves are reduced\\n     */\\n    event SpreadReservesReduced(address indexed protocolShareReserve, uint256 reduceAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice EIP20 Transfer event\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 amount);\\n\\n    /**\\n     * @notice EIP20 Approval event\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\\n\\n    /**\\n     * @notice Event emitted when healing the borrow\\n     */\\n    event HealBorrow(address indexed payer, address indexed borrower, uint256 repayAmount);\\n\\n    /**\\n     * @notice Event emitted when tokens are swept\\n     */\\n    event SweepToken(address indexed token);\\n\\n    /**\\n     * @notice Event emitted when reduce reserves slot (block or second) delta is changed\\n     */\\n    event NewReduceReservesBlockDelta(\\n        uint256 oldReduceReservesBlockOrTimestampDelta,\\n        uint256 newReduceReservesBlockOrTimestampDelta\\n    );\\n\\n    /**\\n     * @notice Event emitted when liquidation reserves are reduced\\n     */\\n    event ProtocolSeize(address indexed from, address indexed to, uint256 amount);\\n\\n    /*** User Interface ***/\\n\\n    function mint(uint256 mintAmount) external virtual returns (uint256);\\n\\n    function mintBehalf(address minter, uint256 mintAllowed) external virtual returns (uint256);\\n\\n    function redeem(uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemUnderlying(uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function redeemUnderlyingBehalf(address redeemer, uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function borrow(uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function borrowBehalf(address borrwwer, uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function repayBorrow(uint256 repayAmount) external virtual returns (uint256);\\n\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external virtual returns (uint256);\\n\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external virtual returns (uint256);\\n\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external virtual;\\n\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipCloseFactorCheck\\n    ) external virtual;\\n\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external virtual;\\n\\n    function transfer(address dst, uint256 amount) external virtual returns (bool);\\n\\n    function transferFrom(address src, address dst, uint256 amount) external virtual returns (bool);\\n\\n    function accrueInterest() external virtual returns (uint256);\\n\\n    function sweepToken(IERC20Upgradeable token) external virtual;\\n\\n    /*** Admin Functions ***/\\n\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external virtual;\\n\\n    function reduceReserves(uint256 reduceAmount) external virtual;\\n\\n    function exchangeRateCurrent() external virtual returns (uint256);\\n\\n    function borrowBalanceCurrent(address account) external virtual returns (uint256);\\n\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external virtual;\\n\\n    function addReserves(uint256 addAmount) external virtual;\\n\\n    function totalBorrowsCurrent() external virtual returns (uint256);\\n\\n    function balanceOfUnderlying(address owner) external virtual returns (uint256);\\n\\n    function approve(address spender, uint256 amount) external virtual returns (bool);\\n\\n    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool);\\n\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool);\\n\\n    function allowance(address owner, address spender) external view virtual returns (uint256);\\n\\n    function balanceOf(address owner) external view virtual returns (uint256);\\n\\n    function getAccountSnapshot(address account) external view virtual returns (uint256, uint256, uint256, uint256);\\n\\n    function borrowRatePerBlock() external view virtual returns (uint256);\\n\\n    function supplyRatePerBlock() external view virtual returns (uint256);\\n\\n    function borrowBalanceStored(address account) external view virtual returns (uint256);\\n\\n    function exchangeRateStored() external view virtual returns (uint256);\\n\\n    function getCash() external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is a VToken contract (for inspection)\\n     * @return Always true\\n     */\\n    function isVToken() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7c4cbb879e3a931cfee4fa7a9eb1978eddff18087a1c4f56decedb84c2479f1e\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\",\"keccak256\":\"0x54ab3a6f3bc87569ed12370f3470a1ec84cea9796d4d0ccf3d07dd4280c044aa\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/validators.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\\nerror ZeroAddressNotAllowed();\\n\\n/// @notice Checks if the provided address is nonzero, reverts otherwise\\n/// @param address_ Address to check\\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\\nfunction ensureNonzeroAddress(address address_) pure {\\n    if (address_ == address(0)) {\\n        revert ZeroAddressNotAllowed();\\n    }\\n}\\n\",\"keccak256\":\"0x93bdd5cfb100f0f9a1d446857e23c3633df6ab12c266333c978428edd96b1367\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface IProtocolShareReserve {\\n    /// @notice it represents the type of vToken income\\n    enum IncomeType {\\n        SPREAD,\\n        LIQUIDATION\\n    }\\n\\n    function updateAssetsState(\\n        address comptroller,\\n        address asset,\\n        IncomeType incomeType\\n    ) external;\\n}\\n\",\"keccak256\":\"0x5fddc5b63fdd850b3b5c83576cda50dcb27a205dbb1a23af17d9da0d9f04fa0a\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { SECONDS_PER_YEAR } from \\\"./constants.sol\\\";\\n\\nabstract contract TimeManagerV8 {\\n    /// @notice Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 public immutable blocksOrSecondsPerYear;\\n\\n    /// @notice Acknowledges if a contract is time based or not\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    bool public immutable isTimeBased;\\n\\n    /// @notice Stores the current block timestamp or block number depending on isTimeBased\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    function() view returns (uint256) private immutable _getCurrentSlot;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n\\n    /// @notice Thrown when blocks per year is invalid\\n    error InvalidBlocksPerYear();\\n\\n    /// @notice Thrown when time based but blocks per year is provided\\n    error InvalidTimeBasedConfiguration();\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block\\n     * If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:error InvalidBlocksPerYear is thrown if blocksPerYear entered is zero and timeBased is false\\n     * @custom:error InvalidTimeBasedConfiguration is thrown if blocksPerYear entered is non zero and timeBased is true\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) {\\n        if (!timeBased_ && blocksPerYear_ == 0) {\\n            revert InvalidBlocksPerYear();\\n        }\\n\\n        if (timeBased_ && blocksPerYear_ != 0) {\\n            revert InvalidTimeBasedConfiguration();\\n        }\\n\\n        isTimeBased = timeBased_;\\n        blocksOrSecondsPerYear = timeBased_ ? SECONDS_PER_YEAR : blocksPerYear_;\\n        _getCurrentSlot = timeBased_ ? _getBlockTimestamp : _getBlockNumber;\\n    }\\n\\n    /**\\n     * @dev Function to simply retrieve block number or block timestamp\\n     * @return Current block number or block timestamp\\n     */\\n    function getBlockNumberOrTimestamp() public view virtual returns (uint256) {\\n        return _getCurrentSlot();\\n    }\\n\\n    /**\\n     * @dev Returns the current timestamp in seconds\\n     * @return The current timestamp\\n     */\\n    function _getBlockTimestamp() private view returns (uint256) {\\n        return block.timestamp;\\n    }\\n\\n    /**\\n     * @dev Returns the current block number\\n     * @return The current block number\\n     */\\n    function _getBlockNumber() private view returns (uint256) {\\n        return block.number;\\n    }\\n}\\n\",\"keccak256\":\"0x57a2bbb9b8e02b1c0a5c0e305fef1328a22db56c3d4b148c362010a6e767243c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\",\"keccak256\":\"0x14de93ead464da249af31bea0e3bcfb62ec693bea3475fb4d90f055ac81dc5eb\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { PrimeStorageV1 } from \\\"../PrimeStorage.sol\\\";\\n\\n/**\\n * @title IPrime\\n * @author Venus\\n * @notice Interface for Prime Token\\n */\\ninterface IPrime {\\n    struct APRInfo {\\n        // supply APR of the user in BPS\\n        uint256 supplyAPR;\\n        // borrow APR of the user in BPS\\n        uint256 borrowAPR;\\n        // total score of the market\\n        uint256 totalScore;\\n        // score of the user\\n        uint256 userScore;\\n        // capped XVS balance of the user\\n        uint256 xvsBalanceForScore;\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    struct Capital {\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    /**\\n     * @notice Returns boosted pending interest accrued for a user for all markets\\n     * @param user the account for which to get the accrued interests\\n     * @return pendingRewards the number of underlying tokens accrued by the user for all markets\\n     */\\n    function getPendingRewards(address user) external returns (PrimeStorageV1.PendingReward[] memory pendingRewards);\\n\\n    /**\\n     * @notice Update total score of multiple users and market\\n     * @param users accounts for which we need to update score\\n     */\\n    function updateScores(address[] memory users) external;\\n\\n    /**\\n     * @notice Update value of alpha\\n     * @param _alphaNumerator numerator of alpha. If alpha is 0.5 then numerator is 1\\n     * @param _alphaDenominator denominator of alpha. If alpha is 0.5 then denominator is 2\\n     */\\n    function updateAlpha(uint128 _alphaNumerator, uint128 _alphaDenominator) external;\\n\\n    /**\\n     * @notice Update multipliers for a market\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier new supply multiplier for the market, scaled by 1e18\\n     * @param borrowMultiplier new borrow multiplier for the market, scaled by 1e18\\n     */\\n    function updateMultipliers(address market, uint256 supplyMultiplier, uint256 borrowMultiplier) external;\\n\\n    /**\\n     * @notice Add a market to prime program\\n     * @param comptroller address of the comptroller\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier the multiplier for supply cap. It should be converted to 1e18\\n     * @param borrowMultiplier the multiplier for borrow cap. It should be converted to 1e18\\n     */\\n    function addMarket(\\n        address comptroller,\\n        address market,\\n        uint256 supplyMultiplier,\\n        uint256 borrowMultiplier\\n    ) external;\\n\\n    /**\\n     * @notice Set limits for total tokens that can be minted\\n     * @param _irrevocableLimit total number of irrevocable tokens that can be minted\\n     * @param _revocableLimit total number of revocable tokens that can be minted\\n     */\\n    function setLimit(uint256 _irrevocableLimit, uint256 _revocableLimit) external;\\n\\n    /**\\n     * @notice Directly issue prime tokens to users\\n     * @param isIrrevocable are the tokens being issued\\n     * @param users list of address to issue tokens to\\n     */\\n    function issue(bool isIrrevocable, address[] calldata users) external;\\n\\n    /**\\n     * @notice Executed by XVSVault whenever user's XVSVault balance changes\\n     * @param user the account address whose balance was updated\\n     */\\n    function xvsUpdated(address user) external;\\n\\n    /**\\n     * @notice accrues interest and updates score for an user for a specific market\\n     * @param user the account address for which to accrue interest and update score\\n     * @param market the market for which to accrue interest and update score\\n     */\\n    function accrueInterestAndUpdateScore(address user, address market) external;\\n\\n    /**\\n     * @notice For claiming prime token when staking period is completed\\n     */\\n    function claim() external;\\n\\n    /**\\n     * @notice For burning any prime token\\n     * @param user the account address for which the prime token will be burned\\n     */\\n    function burn(address user) external;\\n\\n    /**\\n     * @notice To pause or unpause claiming of interest\\n     */\\n    function togglePause() external;\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken) external returns (uint256);\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @param user the user for which to claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Distributes income from market since last distribution\\n     * @param vToken the market for which to distribute the income\\n     */\\n    function accrueInterest(address vToken) external;\\n\\n    /**\\n     * @notice Returns boosted interest accrued for a user\\n     * @param vToken the market for which to fetch the accrued interest\\n     * @param user the account for which to get the accrued interest\\n     * @return interestAccrued the number of underlying tokens accrued by the user since the last accrual\\n     */\\n    function getInterestAccrued(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Retrieves an array of all available markets\\n     * @return an array of addresses representing all available markets\\n     */\\n    function getAllMarkets() external view returns (address[] memory);\\n\\n    /**\\n     * @notice fetch the numbers of seconds remaining for staking period to complete\\n     * @param user the account address for which we are checking the remaining time\\n     * @return timeRemaining the number of seconds the user needs to wait to claim prime token\\n     */\\n    function claimTimeRemaining(address user) external view returns (uint256);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for user for a given market\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function calculateAPR(address market, address user) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for estimated supply, borrow and XVS staked\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @param borrow hypothetical borrow amount\\n     * @param supply hypothetical supply amount\\n     * @param xvsStaked hypothetical staked XVS amount\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function estimateAPR(\\n        address market,\\n        address user,\\n        uint256 borrow,\\n        uint256 supply,\\n        uint256 xvsStaked\\n    ) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice the total income that's going to be distributed in a year to prime token holders\\n     * @param vToken the market for which to fetch the total income that's going to distributed in a year\\n     * @return amount the total income\\n     */\\n    function incomeDistributionYearly(address vToken) external view returns (uint256 amount);\\n\\n    /**\\n     * @notice Returns if user is a prime holder\\n     * @return isPrimeHolder true if user is a prime holder\\n     */\\n    function isUserPrimeHolder(address user) external view returns (bool);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param loopsLimit Number of loops limit\\n     */\\n    function setMaxLoopsLimit(uint256 loopsLimit) external;\\n\\n    /**\\n     * @notice Update staked at timestamp for multiple users\\n     * @param users accounts for which we need to update staked at timestamp\\n     * @param timestamps new staked at timestamp for the users\\n     */\\n    function setStakedAt(address[] calldata users, uint256[] calldata timestamps) external;\\n}\\n\",\"keccak256\":\"0xd112f60183416ad796093b4a83a80ddc1b8b655965f02ae55ca82e2a0c68f97d\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\n/**\\n * @title PrimeStorageV1\\n * @author Venus\\n * @notice Storage for Prime Token\\n */\\ncontract PrimeStorageV1 {\\n    struct Token {\\n        bool exists;\\n        bool isIrrevocable;\\n    }\\n\\n    struct Market {\\n        uint256 supplyMultiplier;\\n        uint256 borrowMultiplier;\\n        uint256 rewardIndex;\\n        uint256 sumOfMembersScore;\\n        bool exists;\\n    }\\n\\n    struct Interest {\\n        uint256 accrued;\\n        uint256 score;\\n        uint256 rewardIndex;\\n    }\\n\\n    struct PendingReward {\\n        address vToken;\\n        address rewardToken;\\n        uint256 amount;\\n    }\\n\\n    /// @notice Base unit for computations, usually used in scaling (multiplications, divisions)\\n    uint256 internal constant EXP_SCALE = 1e18;\\n\\n    /// @notice maximum BPS = 100%\\n    uint256 internal constant MAXIMUM_BPS = 1e4;\\n\\n    /// @notice Mapping to get prime token's metadata\\n    mapping(address => Token) public tokens;\\n\\n    /// @notice  Tracks total irrevocable tokens minted\\n    uint256 public totalIrrevocable;\\n\\n    /// @notice  Tracks total revocable tokens minted\\n    uint256 public totalRevocable;\\n\\n    /// @notice  Indicates maximum revocable tokens that can be minted\\n    uint256 public revocableLimit;\\n\\n    /// @notice  Indicates maximum irrevocable tokens that can be minted\\n    uint256 public irrevocableLimit;\\n\\n    /// @notice Tracks when prime token eligible users started staking for claiming prime token\\n    mapping(address => uint256) public stakedAt;\\n\\n    /// @notice vToken to market configuration\\n    mapping(address => Market) public markets;\\n\\n    /// @notice vToken to user to user index\\n    mapping(address => mapping(address => Interest)) public interests;\\n\\n    /// @notice A list of boosted markets\\n    address[] internal _allMarkets;\\n\\n    /// @notice numerator of alpha. Ex: if alpha is 0.5 then this will be 1\\n    uint128 public alphaNumerator;\\n\\n    /// @notice denominator of alpha. Ex: if alpha is 0.5 then this will be 2\\n    uint128 public alphaDenominator;\\n\\n    /// @notice address of XVS vault\\n    address public xvsVault;\\n\\n    /// @notice address of XVS vault reward token\\n    address public xvsVaultRewardToken;\\n\\n    /// @notice address of XVS vault pool id\\n    uint256 public xvsVaultPoolId;\\n\\n    /// @notice mapping to check if a account's score was updated in the round\\n    mapping(uint256 => mapping(address => bool)) public isScoreUpdated;\\n\\n    /// @notice unique id for next round\\n    uint256 public nextScoreUpdateRoundId;\\n\\n    /// @notice total number of accounts whose score needs to be updated\\n    uint256 public totalScoreUpdatesRequired;\\n\\n    /// @notice total number of accounts whose score is yet to be updated\\n    uint256 public pendingScoreUpdates;\\n\\n    /// @notice mapping used to find if an asset is part of prime markets\\n    mapping(address => address) public vTokenForAsset;\\n\\n    /// @notice Address of core pool comptroller contract\\n    address internal corePoolComptroller;\\n\\n    /// @notice unreleased income from PLP that's already distributed to prime holders\\n    /// @dev mapping of asset address => amount\\n    mapping(address => uint256) public unreleasedPLPIncome;\\n\\n    /// @notice The address of PLP contract\\n    address public primeLiquidityProvider;\\n\\n    /// @notice The address of ResilientOracle contract\\n    ResilientOracleInterface public oracle;\\n\\n    /// @notice The address of PoolRegistry contract\\n    address public poolRegistry;\\n\\n    /// @dev This empty reserved space is put in place to allow future versions to add new\\n    /// variables without shifting down storage in the inheritance chain.\\n    uint256[26] private __gap;\\n}\\n\",\"keccak256\":\"0x5285c875114db2ea2be0b81b65722d5761806217022db733323c4e03365a95e7\",\"license\":\"BSD-3-Clause\"},\"contracts/ERC4626/Interfaces/IRewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { VToken } from \\\"@venusprotocol/isolated-pools/contracts/VToken.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nabstract contract IRewardsDistributor {\\n    struct RewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block number the index was last updated at\\n        uint32 block;\\n        // The block number at which to stop rewards\\n        uint32 lastRewardingBlock;\\n    }\\n\\n    IERC20Upgradeable public rewardToken;\\n\\n    function claimRewardToken(address holder, VToken[] memory vTokens) external virtual;\\n}\\n\",\"keccak256\":\"0x525b75432594be239774baf1732c1afb6d049d794e3b8db7725ae23dc6f4be8a\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[{"astId":16824,"contract":"contracts/ERC4626/Interfaces/IRewardsDistributor.sol:IRewardsDistributor","label":"rewardToken","offset":0,"slot":"0","type":"t_contract(IERC20Upgradeable)1352"}],"types":{"t_contract(IERC20Upgradeable)1352":{"encoding":"inplace","label":"contract IERC20Upgradeable","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/ERC4626/VenusERC4626.sol":{"VenusERC4626":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ERC4626__DepositMoreThanMax","type":"error"},{"inputs":[],"name":"ERC4626__MintMoreThanMax","type":"error"},{"inputs":[],"name":"ERC4626__RedeemMoreThanMax","type":"error"},{"inputs":[],"name":"ERC4626__WithdrawMoreThanMax","type":"error"},{"inputs":[{"internalType":"string","name":"operation","type":"string"}],"name":"ERC4626__ZeroAmount","type":"error"},{"inputs":[{"internalType":"uint256","name":"loopsLimit","type":"uint256"},{"internalType":"uint256","name":"requiredLoops","type":"uint256"}],"name":"MaxLoopsLimitExceeded","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"calledContract","type":"address"},{"internalType":"string","name":"methodSignature","type":"string"}],"name":"Unauthorized","type":"error"},{"inputs":[{"internalType":"uint256","name":"errorCode","type":"uint256"}],"name":"VenusERC4626__VenusError","type":"error"},{"inputs":[],"name":"ZeroAddressNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"rewardToken","type":"address"}],"name":"ClaimRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMaxLoopsLimit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newmaxLoopsLimit","type":"uint256"}],"name":"MaxLoopsLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAccessControlManager","type":"address"},{"indexed":false,"internalType":"address","name":"newAccessControlManager","type":"address"}],"name":"NewAccessControlManager","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldRecipient","type":"address"},{"indexed":true,"internalType":"address","name":"newRecipient","type":"address"}],"name":"RewardRecipientUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SweepToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accessControlManager","outputs":[{"internalType":"contract IAccessControlManagerV8","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"comptroller","outputs":[{"internalType":"contract IComptroller","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken_","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"accessControlManager_","type":"address"},{"internalType":"address","name":"rewardRecipient_","type":"address"},{"internalType":"uint256","name":"loopsLimit_","type":"uint256"},{"internalType":"address","name":"vaultOwner_","type":"address"}],"name":"initialize2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLoopsLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"accessControlManager_","type":"address"}],"name":"setAccessControlManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"loopsLimit","type":"uint256"}],"name":"setMaxLoopsLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRecipient","type":"address"}],"name":"setRewardRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20Upgradeable","name":"token","type":"address"}],"name":"sweepToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vToken","outputs":[{"internalType":"contract VToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"errors":{"ERC4626__DepositMoreThanMax()":[{"details":"This error is triggered if the deposit amount is greater than `maxDeposit(receiver)`."}],"ERC4626__MintMoreThanMax()":[{"details":"This error is triggered if the mint amount is greater than `maxMint(receiver)`."}],"ERC4626__RedeemMoreThanMax()":[{"details":"This error is triggered if the redemption amount is greater than `maxRedeem(owner)`."}],"ERC4626__WithdrawMoreThanMax()":[{"details":"This error is triggered if the withdrawal amount is greater than `maxWithdraw(owner)`."}],"ERC4626__ZeroAmount(string)":[{"details":"This error prevents unnecessary transactions with zero amounts in deposit, withdraw, mint, or redeem operations.","params":{"operation":"The name of the operation that failed (e.g., \"deposit\", \"withdraw\", \"mint\", \"redeem\")."}}],"VenusERC4626__VenusError(uint256)":[{"details":"This error is triggered if a Venus operation (such as minting or redeeming vTokens) fails.","params":{"errorCode":"The error code returned by the Venus protocol."}}]},"events":{"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"ClaimRewards(uint256,address)":{"params":{"amount":"The amount of reward tokens claimed.","rewardToken":"The address of the reward token claimed."}},"Initialized(uint8)":{"details":"Triggered when the contract has been initialized or reinitialized."},"RewardRecipientUpdated(address,address)":{"params":{"newRecipient":"The new reward recipient address.","oldRecipient":"The previous reward recipient address."}},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"kind":"dev","methods":{"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"asset()":{"details":"See {IERC4626-asset}. "},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"claimRewards()":{"details":"Iterates through all reward distributors fetched from the comptroller, claims rewards, and transfers them if available."},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"convertToAssets(uint256)":{"details":"See {IERC4626-convertToAssets}. "},"convertToShares(uint256)":{"details":"See {IERC4626-convertToShares}. "},"decimals()":{"details":"Decimals are computed by adding the decimal offset on top of the underlying asset's decimals. This \"original\" value is cached during construction of the vault contract. If this read operation fails (e.g., the asset has not been created yet), a default of 18 is used to represent the underlying asset's decimals. See {IERC20Metadata-decimals}."},"decreaseAllowance(address,uint256)":{"details":"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."},"deposit(uint256,address)":{"details":"See {IERC4626-deposit}. "},"increaseAllowance(address,uint256)":{"details":"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."},"initialize(address)":{"details":"`initialize2` should be invoked to complete the configuration of the vault","params":{"vToken_":"The VToken associated with the vault, representing the yield-bearing asset."}},"initialize2(address,address,uint256,address)":{"params":{"accessControlManager_":"Address of the ACM contract","loopsLimit_":"The maximum number of loops allowed for reward distribution.","rewardRecipient_":"The address that will receive rewards generated by the vault.","vaultOwner_":"The owner that will be set for the created vault"}},"maxDeposit(address)":{"details":"If minting is paused or the supply cap is reached, returns 0.","params":{"":"/*account*/ The address of the account."},"returns":{"_0":"The maximum amount of assets that can be deposited."}},"maxMint(address)":{"details":"This is derived from the maximum deposit amount converted to shares.","params":{"":"/*account*/ The address of the account."},"returns":{"_0":"The maximum number of shares that can be minted."}},"maxRedeem(address)":{"details":"Redemption is limited by the available cash in the vault.","params":{"receiver":"The address of the account redeeming."},"returns":{"_0":"The maximum number of shares that can be redeemed."}},"maxWithdraw(address)":{"details":"The withdrawable amount is limited by the available cash in the vault.","params":{"receiver":"The address of the account withdrawing."},"returns":{"_0":"The maximum amount of assets that can be withdrawn."}},"mint(uint256,address)":{"details":"The minted shares are calculated considering the minted VTokensIt can mint slightly fewer shares than requested, because VToken.mint rounds down"},"name()":{"details":"Returns the name of the token."},"owner()":{"details":"Returns the address of the current owner."},"pendingOwner()":{"details":"Returns the address of the pending owner."},"previewDeposit(uint256)":{"details":"See {IERC4626-previewDeposit}. "},"previewMint(uint256)":{"details":"See {IERC4626-previewMint}. "},"previewRedeem(uint256)":{"details":"See {IERC4626-previewRedeem}. "},"previewWithdraw(uint256)":{"details":"See {IERC4626-previewWithdraw}. "},"redeem(uint256,address,address)":{"details":"See {IERC4626-redeem}. "},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"setAccessControlManager(address)":{"custom:access":"Only Governance","custom:event":"Emits NewAccessControlManager event","details":"Admin function to set address of AccessControlManager","params":{"accessControlManager_":"The new address of the AccessControlManager"}},"setMaxLoopsLimit(uint256)":{"custom:access":"Controlled by ACM","custom:event":"Emits MaxLoopsLimitUpdated event on success","params":{"loopsLimit":"Number of loops limit"}},"setRewardRecipient(address)":{"custom:access":"Controlled by ACM","params":{"newRecipient":"The address of the new reward recipient"}},"sweepToken(address)":{"custom:access":"Only owner","custom:event":"SweepToken emits on success","params":{"token":"Address of the token"}},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalAssets()":{"returns":{"_0":"Amount of assets deposited"}},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`."},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."},"withdraw(uint256,address,address)":{"details":"Receiver can receive slightly more assets than requested, because VToken.redeemUnderlying rounds upThe shares to burn are calculated considering the actual transferred assets, not the requested ones"}},"title":"VenusERC4626","version":1},"evm":{"bytecode":{"functionDebugData":{"@_16950":{"entryPoint":null,"id":16950,"parameterSlots":0,"returnSlots":0},"@_disableInitializers_557":{"entryPoint":30,"id":557,"parameterSlots":0,"returnSlots":0},"abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_uint8_to_t_uint8_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":165,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":246,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_uint8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:1638:69","nodeType":"YulBlock","src":"0:1638:69","statements":[{"body":{"nativeSrc":"103:73:69","nodeType":"YulBlock","src":"103:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"120:3:69","nodeType":"YulIdentifier","src":"120:3:69"},{"name":"length","nativeSrc":"125:6:69","nodeType":"YulIdentifier","src":"125:6:69"}],"functionName":{"name":"mstore","nativeSrc":"113:6:69","nodeType":"YulIdentifier","src":"113:6:69"},"nativeSrc":"113:19:69","nodeType":"YulFunctionCall","src":"113:19:69"},"nativeSrc":"113:19:69","nodeType":"YulExpressionStatement","src":"113:19:69"},{"nativeSrc":"141:29:69","nodeType":"YulAssignment","src":"141:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"160:3:69","nodeType":"YulIdentifier","src":"160:3:69"},{"kind":"number","nativeSrc":"165:4:69","nodeType":"YulLiteral","src":"165:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"156:3:69","nodeType":"YulIdentifier","src":"156:3:69"},"nativeSrc":"156:14:69","nodeType":"YulFunctionCall","src":"156:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"141:11:69","nodeType":"YulIdentifier","src":"141:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"7:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"75:3:69","nodeType":"YulTypedName","src":"75:3:69","type":""},{"name":"length","nativeSrc":"80:6:69","nodeType":"YulTypedName","src":"80:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"91:11:69","nodeType":"YulTypedName","src":"91:11:69","type":""}],"src":"7:169:69"},{"body":{"nativeSrc":"288:120:69","nodeType":"YulBlock","src":"288:120:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},{"kind":"number","nativeSrc":"318:1:69","nodeType":"YulLiteral","src":"318:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"306:3:69","nodeType":"YulIdentifier","src":"306:3:69"},"nativeSrc":"306:14:69","nodeType":"YulFunctionCall","src":"306:14:69"},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320696e697469","kind":"string","nativeSrc":"322:34:69","nodeType":"YulLiteral","src":"322:34:69","type":"","value":"Initializable: contract is initi"}],"functionName":{"name":"mstore","nativeSrc":"299:6:69","nodeType":"YulIdentifier","src":"299:6:69"},"nativeSrc":"299:58:69","nodeType":"YulFunctionCall","src":"299:58:69"},"nativeSrc":"299:58:69","nodeType":"YulExpressionStatement","src":"299:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"378:6:69","nodeType":"YulIdentifier","src":"378:6:69"},{"kind":"number","nativeSrc":"386:2:69","nodeType":"YulLiteral","src":"386:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"374:3:69","nodeType":"YulIdentifier","src":"374:3:69"},"nativeSrc":"374:15:69","nodeType":"YulFunctionCall","src":"374:15:69"},{"hexValue":"616c697a696e67","kind":"string","nativeSrc":"391:9:69","nodeType":"YulLiteral","src":"391:9:69","type":"","value":"alizing"}],"functionName":{"name":"mstore","nativeSrc":"367:6:69","nodeType":"YulIdentifier","src":"367:6:69"},"nativeSrc":"367:34:69","nodeType":"YulFunctionCall","src":"367:34:69"},"nativeSrc":"367:34:69","nodeType":"YulExpressionStatement","src":"367:34:69"}]},"name":"store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a","nativeSrc":"182:226:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"280:6:69","nodeType":"YulTypedName","src":"280:6:69","type":""}],"src":"182:226:69"},{"body":{"nativeSrc":"560:220:69","nodeType":"YulBlock","src":"560:220:69","statements":[{"nativeSrc":"570:74:69","nodeType":"YulAssignment","src":"570:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"636:3:69","nodeType":"YulIdentifier","src":"636:3:69"},{"kind":"number","nativeSrc":"641:2:69","nodeType":"YulLiteral","src":"641:2:69","type":"","value":"39"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"577:58:69","nodeType":"YulIdentifier","src":"577:58:69"},"nativeSrc":"577:67:69","nodeType":"YulFunctionCall","src":"577:67:69"},"variableNames":[{"name":"pos","nativeSrc":"570:3:69","nodeType":"YulIdentifier","src":"570:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"742:3:69","nodeType":"YulIdentifier","src":"742:3:69"}],"functionName":{"name":"store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a","nativeSrc":"653:88:69","nodeType":"YulIdentifier","src":"653:88:69"},"nativeSrc":"653:93:69","nodeType":"YulFunctionCall","src":"653:93:69"},"nativeSrc":"653:93:69","nodeType":"YulExpressionStatement","src":"653:93:69"},{"nativeSrc":"755:19:69","nodeType":"YulAssignment","src":"755:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"766:3:69","nodeType":"YulIdentifier","src":"766:3:69"},{"kind":"number","nativeSrc":"771:2:69","nodeType":"YulLiteral","src":"771:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"762:3:69","nodeType":"YulIdentifier","src":"762:3:69"},"nativeSrc":"762:12:69","nodeType":"YulFunctionCall","src":"762:12:69"},"variableNames":[{"name":"end","nativeSrc":"755:3:69","nodeType":"YulIdentifier","src":"755:3:69"}]}]},"name":"abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack","nativeSrc":"414:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"548:3:69","nodeType":"YulTypedName","src":"548:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"556:3:69","nodeType":"YulTypedName","src":"556:3:69","type":""}],"src":"414:366:69"},{"body":{"nativeSrc":"957:248:69","nodeType":"YulBlock","src":"957:248:69","statements":[{"nativeSrc":"967:26:69","nodeType":"YulAssignment","src":"967:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"979:9:69","nodeType":"YulIdentifier","src":"979:9:69"},{"kind":"number","nativeSrc":"990:2:69","nodeType":"YulLiteral","src":"990:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"975:3:69","nodeType":"YulIdentifier","src":"975:3:69"},"nativeSrc":"975:18:69","nodeType":"YulFunctionCall","src":"975:18:69"},"variableNames":[{"name":"tail","nativeSrc":"967:4:69","nodeType":"YulIdentifier","src":"967:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1014:9:69","nodeType":"YulIdentifier","src":"1014:9:69"},{"kind":"number","nativeSrc":"1025:1:69","nodeType":"YulLiteral","src":"1025:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1010:3:69","nodeType":"YulIdentifier","src":"1010:3:69"},"nativeSrc":"1010:17:69","nodeType":"YulFunctionCall","src":"1010:17:69"},{"arguments":[{"name":"tail","nativeSrc":"1033:4:69","nodeType":"YulIdentifier","src":"1033:4:69"},{"name":"headStart","nativeSrc":"1039:9:69","nodeType":"YulIdentifier","src":"1039:9:69"}],"functionName":{"name":"sub","nativeSrc":"1029:3:69","nodeType":"YulIdentifier","src":"1029:3:69"},"nativeSrc":"1029:20:69","nodeType":"YulFunctionCall","src":"1029:20:69"}],"functionName":{"name":"mstore","nativeSrc":"1003:6:69","nodeType":"YulIdentifier","src":"1003:6:69"},"nativeSrc":"1003:47:69","nodeType":"YulFunctionCall","src":"1003:47:69"},"nativeSrc":"1003:47:69","nodeType":"YulExpressionStatement","src":"1003:47:69"},{"nativeSrc":"1059:139:69","nodeType":"YulAssignment","src":"1059:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"1193:4:69","nodeType":"YulIdentifier","src":"1193:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack","nativeSrc":"1067:124:69","nodeType":"YulIdentifier","src":"1067:124:69"},"nativeSrc":"1067:131:69","nodeType":"YulFunctionCall","src":"1067:131:69"},"variableNames":[{"name":"tail","nativeSrc":"1059:4:69","nodeType":"YulIdentifier","src":"1059:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"786:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"937:9:69","nodeType":"YulTypedName","src":"937:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"952:4:69","nodeType":"YulTypedName","src":"952:4:69","type":""}],"src":"786:419:69"},{"body":{"nativeSrc":"1254:43:69","nodeType":"YulBlock","src":"1254:43:69","statements":[{"nativeSrc":"1264:27:69","nodeType":"YulAssignment","src":"1264:27:69","value":{"arguments":[{"name":"value","nativeSrc":"1279:5:69","nodeType":"YulIdentifier","src":"1279:5:69"},{"kind":"number","nativeSrc":"1286:4:69","nodeType":"YulLiteral","src":"1286:4:69","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"1275:3:69","nodeType":"YulIdentifier","src":"1275:3:69"},"nativeSrc":"1275:16:69","nodeType":"YulFunctionCall","src":"1275:16:69"},"variableNames":[{"name":"cleaned","nativeSrc":"1264:7:69","nodeType":"YulIdentifier","src":"1264:7:69"}]}]},"name":"cleanup_t_uint8","nativeSrc":"1211:86:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1236:5:69","nodeType":"YulTypedName","src":"1236:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"1246:7:69","nodeType":"YulTypedName","src":"1246:7:69","type":""}],"src":"1211:86:69"},{"body":{"nativeSrc":"1364:51:69","nodeType":"YulBlock","src":"1364:51:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"1381:3:69","nodeType":"YulIdentifier","src":"1381:3:69"},{"arguments":[{"name":"value","nativeSrc":"1402:5:69","nodeType":"YulIdentifier","src":"1402:5:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"1386:15:69","nodeType":"YulIdentifier","src":"1386:15:69"},"nativeSrc":"1386:22:69","nodeType":"YulFunctionCall","src":"1386:22:69"}],"functionName":{"name":"mstore","nativeSrc":"1374:6:69","nodeType":"YulIdentifier","src":"1374:6:69"},"nativeSrc":"1374:35:69","nodeType":"YulFunctionCall","src":"1374:35:69"},"nativeSrc":"1374:35:69","nodeType":"YulExpressionStatement","src":"1374:35:69"}]},"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"1303:112:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1352:5:69","nodeType":"YulTypedName","src":"1352:5:69","type":""},{"name":"pos","nativeSrc":"1359:3:69","nodeType":"YulTypedName","src":"1359:3:69","type":""}],"src":"1303:112:69"},{"body":{"nativeSrc":"1515:120:69","nodeType":"YulBlock","src":"1515:120:69","statements":[{"nativeSrc":"1525:26:69","nodeType":"YulAssignment","src":"1525:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"1537:9:69","nodeType":"YulIdentifier","src":"1537:9:69"},{"kind":"number","nativeSrc":"1548:2:69","nodeType":"YulLiteral","src":"1548:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1533:3:69","nodeType":"YulIdentifier","src":"1533:3:69"},"nativeSrc":"1533:18:69","nodeType":"YulFunctionCall","src":"1533:18:69"},"variableNames":[{"name":"tail","nativeSrc":"1525:4:69","nodeType":"YulIdentifier","src":"1525:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"1601:6:69","nodeType":"YulIdentifier","src":"1601:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"1614:9:69","nodeType":"YulIdentifier","src":"1614:9:69"},{"kind":"number","nativeSrc":"1625:1:69","nodeType":"YulLiteral","src":"1625:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1610:3:69","nodeType":"YulIdentifier","src":"1610:3:69"},"nativeSrc":"1610:17:69","nodeType":"YulFunctionCall","src":"1610:17:69"}],"functionName":{"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"1561:39:69","nodeType":"YulIdentifier","src":"1561:39:69"},"nativeSrc":"1561:67:69","nodeType":"YulFunctionCall","src":"1561:67:69"},"nativeSrc":"1561:67:69","nodeType":"YulExpressionStatement","src":"1561:67:69"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nativeSrc":"1421:214:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1487:9:69","nodeType":"YulTypedName","src":"1487:9:69","type":""},{"name":"value0","nativeSrc":"1499:6:69","nodeType":"YulTypedName","src":"1499:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1510:4:69","nodeType":"YulTypedName","src":"1510:4:69","type":""}],"src":"1421:214:69"}]},"contents":"{\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a(memPtr) {\n\n        mstore(add(memPtr, 0), \"Initializable: contract is initi\")\n\n        mstore(add(memPtr, 32), \"alizing\")\n\n    }\n\n    function abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 39)\n        store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function cleanup_t_uint8(value) -> cleaned {\n        cleaned := and(value, 0xff)\n    }\n\n    function abi_encode_t_uint8_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint8_to_t_uint8_fromStack(value0,  add(headStart, 0))\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b5061001961001e565b610105565b600054610100900460ff161561004f5760405162461bcd60e51b8152600401610046906100a5565b60405180910390fd5b60005460ff908116146100a3576000805460ff191660ff9081179091556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989161009a916100f6565b60405180910390a15b565b602080825281016100f081602781527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469602082015266616c697a696e6760c81b604082015260600190565b92915050565b60ff82168152602081016100f0565b614951806101146000396000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c806380d45a2d11610151578063be26317e116100c3578063d905777e11610087578063d905777e14610543578063dd62ed3e14610556578063e30c397814610569578063e521136f1461057a578063ef8b30f71461051d578063f2fde38b1461058d57600080fd5b8063be26317e146104ed578063c4d66de8146104f7578063c63d75b61461050a578063c6e6f5921461051d578063ce96cb771461053057600080fd5b8063a457c2d711610115578063a457c2d71461047d578063a9059cbb14610490578063b3d7f6b9146104a3578063b460af94146104b6578063b4a0bdf3146104c9578063ba087652146104da57600080fd5b806380d45a2d1461042a5780638da5cb5b1461043d57806394bf804d1461044e57806395d89b41146104615780639bb1a99c1461046957600080fd5b8063372500ab116101ea5780634cdad506116101ae5780634cdad506146102ac5780635fe3b567146103bd5780636e553f65146103de57806370a08231146103f1578063715018a61461041a57806379ba50971461042257600080fd5b8063372500ab1461036b57806338d52e0f146103735780633950935114610384578063402d267d1461039757806341e11a5a146103aa57600080fd5b80630e32cb861161023c5780630e32cb86146102f257806317f333401461030757806318160ddd146103285780631be195601461033057806323b872dd14610343578063313ce5671461035657600080fd5b806301e1d1141461027957806306fdde031461029757806307a2d13a146102ac578063095ea7b3146102bf5780630a28a477146102df575b600080fd5b6102816105a0565b60405161028e91906134b9565b60405180910390f35b61029f6106ae565b60405161028e919061351d565b6102816102ba366004613546565b610740565b6102d26102cd36600461358c565b610753565b60405161028e91906135d1565b6102816102ed366004613546565b61076b565b6103056103003660046135df565b610778565b005b6101935461031b906001600160a01b031681565b60405161028e9190613609565b603554610281565b61030561033e366004613636565b61078c565b6102d2610351366004613657565b61087e565b61035e6108a4565b60405161028e91906136b0565b6103056108c5565b6065546001600160a01b031661031b565b6102d261039236600461358c565b610bc7565b6102816103a53660046135df565b610be9565b6103056103b83660046136be565b610e21565b610192546103d1906001600160a01b031681565b60405161028e9190613764565b6102816103ec366004613772565b610ef3565b6102816103ff3660046135df565b6001600160a01b031660009081526033602052604090205490565b610305611038565b61030561104c565b610305610438366004613546565b611081565b6097546001600160a01b031661031b565b61028161045c366004613772565b6110c8565b61029f6111e7565b610191546103d1906001600160a01b031681565b6102d261048b36600461358c565b6111f6565b6102d261049e36600461358c565b61123e565b6102816104b1366004613546565b61124c565b6102816104c43660046137a5565b611259565b60fb546001600160a01b03166103d1565b6102816104e83660046137a5565b61136b565b61028161012d5481565b6103056105053660046135df565b611494565b6102816105183660046135df565b611698565b61028161052b366004613546565b6116a7565b61028161053e3660046135df565b6116b4565b6102816105513660046135df565b61188c565b6102816105643660046137eb565b611a6e565b60c9546001600160a01b031661031b565b6103056105883660046135df565b611a99565b61030561059b3660046135df565b611ae0565b6000670de0b6b3a764000061019160009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106239190613818565b610191546040516370a0823160e01b81526001600160a01b03909116906370a0823190610654903090600401613609565b602060405180830381865afa158015610671573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106959190613818565b61069f919061384f565b6106a99190613884565b905090565b6060603680546106bd906138ae565b80601f01602080910402602001604051908101604052809291908181526020018280546106e9906138ae565b80156107365780601f1061070b57610100808354040283529160200191610736565b820191906000526020600020905b81548152906001019060200180831161071957829003601f168201915b5050505050905090565b600061074d826000611b51565b92915050565b600033610761818585611b92565b5060019392505050565b600061074d826001611c39565b610780611c71565b61078981611c9b565b50565b610794611c71565b6040516370a0823160e01b81526000906001600160a01b038316906370a08231906107c3903090600401613609565b602060405180830381865afa1580156107e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108049190613818565b9050801561087a5760006108206097546001600160a01b031690565b905061082d838284611d14565b806001600160a01b0316836001600160a01b03167f6d25be279134f4ecaa4770aff0c3d916d9e7c5ef37b65ed95dbdba411f5d54d58460405161087091906134b9565b60405180910390a3505b5050565b60003361088c858285611d6f565b610897858585611db9565b60019150505b9392505050565b60006108ae611ea9565b6065546106a99190600160a01b900460ff166138da565b610192546101915461019354604080516361252fd160e01b815290516001600160a01b0394851694938416939092169160009185916361252fd19160048082019286929091908290030181865afa158015610924573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261094c9190810190613a09565b90506109588151611f29565b60005b8151811015610bc057600082828151811061097857610978613a44565b602002602001015190506000816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e69190613a5a565b60408051600180825281830190925291925060009190602080830190803683370190505090508681600081518110610a2057610a20613a44565b6001600160a01b039283166020918202929092010152604051624caeb160e41b8152908416906304caeb1090610a5c9030908590600401613ad8565b600060405180830381600087803b158015610a7657600080fd5b505af1158015610a8a573d6000803e3d6000fd5b50506040516370a0823160e01b8152600092506001600160a01b03851691506370a0823190610abd903090600401613609565b602060405180830381865afa158015610ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afe9190613818565b90508015610b6f57610b11838883611d14565b6040516305bebb3b60e21b81526001600160a01b038816906316faecec90610b42908c908790600290600401613b3c565b600060405180830381600087803b158015610b5c57600080fd5b505af1925050508015610b6d575060015b505b826001600160a01b03167fba56c3ab1f752776eef60db959a4e6b643e89595315edbbd945e104623fa03ba82604051610ba891906134b9565b60405180910390a250506001909201915061095b9050565b5050505050565b600033610761818585610bda8383611a6e565b610be49190613b64565b611b92565b6101925461019154604051630742d14b60e51b81526000926001600160a01b039081169263e85a296092610c2592909116908590600401613ba5565b602060405180830381865afa158015610c42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c669190613bd3565b15610c7357506000919050565b61019254610191546040516302c3bcbb60e01b81526000926001600160a01b03908116926302c3bcbb92610cad9290911690600401613609565b602060405180830381865afa158015610cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cee9190613818565b90506000670de0b6b3a764000061019160009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d739190613818565b61019160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610deb9190613818565b610df5919061384f565b610dff9190613884565b9050808211610e0f576000610e19565b610e198183613bf4565b949350505050565b600054600290610100900460ff16158015610e43575060005460ff8083169116105b610e685760405162461bcd60e51b8152600401610e5f90613c55565b60405180910390fd5b6000805461ffff191660ff831617610100179055610e8582611f54565b610e8e85611f7b565b610e9783611fb3565b610ea084612010565b610ea982612077565b6000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890610ee49083906136b0565b60405180910390a15050505050565b6000610efd612090565b610f0682611f54565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f809190613818565b5082600003610fa2576040516304dd32c560e11b8152600401610e5f90613c86565b610fab82610be9565b831115610fcb576040516326ac6ee160e01b815260040160405180910390fd5b6000610fd6846116a7565b905080600003610ff9576040516304dd32c560e11b8152600401610e5f90613c86565b600061100460355490565b9050611012338587856120bb565b60008161101e60355490565b6110289190613bf4565b935050505061074d600161015f55565b611040611c71565b61104a6000612077565b565b60c95433906001600160a01b031681146110785760405162461bcd60e51b8152600401610e5f90613cdc565b61078981612077565b6110bf6040518060400160405280601981526020017f7365744d61784c6f6f70734c696d69742875696e74323536290000000000000081525061245f565b61078981611fb3565b60006110d2612090565b6110db82611f54565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611131573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111559190613818565b5082600003611177576040516304dd32c560e11b8152600401610e5f90613d07565b61118082611698565b8311156111a0576040516340868f7960e01b815260040160405180910390fd5b60006111ab8461124c565b9050806000036111ce576040516304dd32c560e11b8152600401610e5f90613d07565b6111da338483876120bb565b905061074d600161015f55565b6060603780546106bd906138ae565b600033816112048286611a6e565b9050838110156112265760405162461bcd60e51b8152600401610e5f90613d59565b6112338286868403611b92565b506001949350505050565b600033610761818585611db9565b600061074d826001611b51565b6000611263612090565b61126c83611f54565b61127582611f54565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156112cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ef9190613818565b5083600003611311576040516304dd32c560e11b8152600401610e5f90613d88565b61131a826116b4565b84111561133a5760405163e9ed951560e01b815260040160405180910390fd5b600080611346866124f9565b9150915061135d6113543390565b868685856127ed565b91505061089d600161015f55565b6000611375612090565b61137e83611f54565b61138782611f54565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156113dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114019190613818565b5083600003611423576040516304dd32c560e11b8152600401610e5f90613db5565b61142c8261188c565b84111561144c57604051638890247960e01b815260040160405180910390fd5b600061145785612890565b90508060000361147a576040516304dd32c560e11b8152600401610e5f90613db5565b61148733858584896127ed565b905061089d600161015f55565b600054610100900460ff16158080156114b45750600054600160ff909116105b806114ce5750303b1580156114ce575060005460ff166001145b6114ea5760405162461bcd60e51b8152600401610e5f90613c55565b6000805460ff19166001179055801561150d576000805461ff0019166101001790555b61151682611f54565b61019180546001600160a01b0319166001600160a01b03841690811790915560408051635fe3b56760e01b81529051635fe3b567916004808201926020929091908290030181865afa158015611570573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115949190613a5a565b61019280546001600160a01b0319166001600160a01b039283161790556101915460408051636f307dc360e01b815290516000939290921691636f307dc3916004808201926020929091908290030181865afa1580156115f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161c9190613dd0565b905061163861162a82612ad3565b61163383612b61565b612bd9565b61164181612c0a565b611649612c3a565b50801561087a576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989061168c90600190613e05565b60405180910390a15050565b600061074d61052b6000610be9565b600061074d826000611c39565b6101925461019154604051630742d14b60e51b81526000926001600160a01b039081169263e85a2960926116f19290911690600190600401613ba5565b602060405180830381865afa15801561170e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117329190613bd3565b1561173f57506000919050565b6101915460408051631d8e90d160e11b815290516000926001600160a01b031691633b1d21a29160048083019260209291908290030181865afa15801561178a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ae9190613818565b9050600061019160009054906101000a90046001600160a01b03166001600160a01b0316638f840ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182a9190613818565b905060006118506102ba866001600160a01b031660009081526033602052604090205490565b90508183101561186557506000949350505050565b60006118718385613bf4565b90508181106118805781611882565b805b9695505050505050565b6101925461019154604051630742d14b60e51b81526000926001600160a01b039081169263e85a2960926118c99290911690600190600401613ba5565b602060405180830381865afa1580156118e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190a9190613bd3565b1561191757506000919050565b6101915460408051631d8e90d160e11b815290516000926001600160a01b031691633b1d21a29160048083019260209291908290030181865afa158015611962573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119869190613818565b9050600061019160009054906101000a90046001600160a01b03166001600160a01b0316638f840ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a029190613818565b905080821015611a16575060009392505050565b6000611a228284613bf4565b90506000611a2f826116a7565b90506000611a52876001600160a01b031660009081526033602052604090205490565b9050808210611a615780611a63565b815b979650505050505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b611ad76040518060400160405280601b81526020017f736574526577617264526563697069656e74286164647265737329000000000081525061245f565b61078981612010565b611ae8611c71565b60c980546001600160a01b0383166001600160a01b03199091168117909155611b196097546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600061089d611b5e6105a0565b611b69906001613b64565b611b71611ea9565b611b7c90600a613f21565b603554611b899190613b64565b85919085612c69565b6001600160a01b038316611bb85760405162461bcd60e51b8152600401610e5f90613f77565b6001600160a01b038216611bde5760405162461bcd60e51b8152600401610e5f90613fc6565b6001600160a01b0380841660008181526034602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108709085906134b9565b600061089d611c46611ea9565b611c5190600a613f21565b603554611c5e9190613b64565b611c666105a0565b611b89906001613b64565b6097546001600160a01b0316331461104a5760405162461bcd60e51b8152600401610e5f90614008565b6001600160a01b038116611cc15760405162461bcd60e51b8152600401610e5f9061405a565b60fb80546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa09061168c908390859061406a565b611d6a8363a9059cbb60e01b8484604051602401611d33929190614085565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612cc6565b505050565b6000611d7b8484611a6e565b90506000198114611db35781811015611da65760405162461bcd60e51b8152600401610e5f906140d4565b611db38484848403611b92565b50505050565b6001600160a01b038316611ddf5760405162461bcd60e51b8152600401610e5f90614126565b6001600160a01b038216611e055760405162461bcd60e51b8152600401610e5f90614176565b6001600160a01b03831660009081526033602052604090205481811015611e3e5760405162461bcd60e51b8152600401610e5f906141c9565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e9c9086906134b9565b60405180910390a3611db3565b6000611ebd6065546001600160a01b031690565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611efa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1e91906141ed565b6106a990601261420e565b61012d548111156107895761012d548160405163792bfb1b60e11b8152600401610e5f92919061422b565b6001600160a01b038116610789576040516342bcdf7f60e11b815260040160405180910390fd5b600054610100900460ff16611fa25760405162461bcd60e51b8152600401610e5f90614281565b611faa612d58565b61078981612d87565b61012d548111611fd55760405162461bcd60e51b8152600401610e5f906142d0565b61012d8054908290556040517fc2d09fef144f7c8a86f71ea459f8fc17f675768eb1ae369cbd77fb31d467aafa9061168c908390859061422b565b61201981611f54565b610193546040516001600160a01b038084169216907fc8c11bb97ac2ffa10ce2e2a98f4c1fd8df84cfa2e1a15e013ed2383ab1f527ad90600090a361019380546001600160a01b0319166001600160a01b0392909216919091179055565b60c980546001600160a01b031916905561078981612dae565b600261015f54036120b35760405162461bcd60e51b8152600401610e5f90614314565b600261015f55565b60006120cf6065546001600160a01b031690565b6001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016120fa9190613609565b602060405180830381865afa158015612117573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213b9190613818565b610191546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190612172903090600401613609565b602060405180830381865afa15801561218f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b39190613818565b90506121d26121ca6065546001600160a01b031690565b873087612e00565b6000826121e76065546001600160a01b031690565b6001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016122129190613609565b602060405180830381865afa15801561222f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122539190613818565b61225d9190613bf4565b905061226881612e21565b610191546040516370a0823160e01b815260009184916001600160a01b03909116906370a082319061229e903090600401613609565b602060405180830381865afa1580156122bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122df9190613818565b6122e99190613bf4565b90508060000361230c576040516304dd32c560e11b8152600401610e5f90614358565b6000670de0b6b3a764000061019160009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561236b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238f9190613818565b612399908461384f565b6123a39190613884565b905060006123f26123b2611ea9565b6123bd90600a613f21565b6035546123ca9190613b64565b836123d36105a0565b6123de906001613b64565b6123e89190613bf4565b8491906000612c69565b90506123fe8982612eed565b886001600160a01b03168a6001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78a8460405161244392919061422b565b60405180910390a350505050505050505050565b600161015f55565b60fb546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab906124929033908690600401614368565b602060405180830381865afa1580156124af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d39190613bd3565b90508061087a57333083604051634a3fa29360e01b8152600401610e5f93929190614388565b60008060006125106065546001600160a01b031690565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016125409190613609565b602060405180830381865afa15801561255d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125819190613818565b610191546040516370a0823160e01b81529192506000916001600160a01b03909116906370a08231906125b8903090600401613609565b602060405180830381865afa1580156125d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f99190613818565b6101915460405163852a12e360e01b81529192506000916001600160a01b039091169063852a12e390612630908a906004016134b9565b6020604051808303816000875af115801561264f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126739190613818565b905080156126965780604051630864657760e21b8152600401610e5f91906134b9565b6040516370a0823160e01b815283906001600160a01b038616906370a08231906126c4903090600401613609565b602060405180830381865afa1580156126e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127059190613818565b61270f9190613bf4565b610191546040516370a0823160e01b81529197506000916001600160a01b03909116906370a0823190612746903090600401613609565b602060405180830381865afa158015612763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127879190613818565b6127919084613bf4565b9050806000036127b4576040516304dd32c560e11b8152600401610e5f906143e7565b6127e16127bf611ea9565b6127ca90600a613f21565b6035546127d79190613b64565b8290856001612c69565b95505050505050915091565b826001600160a01b0316856001600160a01b03161461281157612811838683611d6f565b61281b8382612f83565b606554612832906001600160a01b03168584611d14565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db858560405161288192919061422b565b60405180910390a45050505050565b6000806128a56065546001600160a01b031690565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016128d59190613609565b602060405180830381865afa1580156128f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129169190613818565b610191546040516370a0823160e01b81529192506000916129ba916001600160a01b0316906370a082319061294f903090600401613609565b602060405180830381865afa15801561296c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129909190613818565b612998611ea9565b6129a390600a613f21565b6035546129b09190613b64565b8791906000612c69565b6101915460405163db006a7560e01b81529192506000916001600160a01b039091169063db006a75906129f19085906004016134b9565b6020604051808303816000875af1158015612a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a349190613818565b90508015612a575780604051630864657760e21b8152600401610e5f91906134b9565b6040516370a0823160e01b81526000906001600160a01b038616906370a0823190612a86903090600401613609565b602060405180830381865afa158015612aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac79190613818565b9050611a638482613bf4565b6060816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612b13573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b3b9190810190614482565b604051602001612b4b91906144df565b6040516020818303038152906040529050919050565b6060816001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612bc99190810190614482565b604051602001612b4b919061450e565b600054610100900460ff16612c005760405162461bcd60e51b8152600401610e5f90614281565b61087a828261303a565b600054610100900460ff16612c315760405162461bcd60e51b8152600401610e5f90614281565b6107898161307a565b600054610100900460ff16612c615760405162461bcd60e51b8152600401610e5f90614281565b61104a6130ff565b600080612c77868686613126565b90506001836002811115612c8d57612c8d613af8565b148015612caa575060008480612ca557612ca561386e565b868809115b15612cbd57612cba600182613b64565b90505b95945050505050565b6000612d1b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131e89092919063ffffffff16565b9050805160001480612d3c575080806020019051810190612d3c9190613bd3565b611d6a5760405162461bcd60e51b8152600401610e5f9061456b565b600054610100900460ff16612d7f5760405162461bcd60e51b8152600401610e5f90614281565b61104a6131f7565b600054610100900460ff166107805760405162461bcd60e51b8152600401610e5f90614281565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611db3846323b872dd60e01b858585604051602401611d339392919061457b565b61019154612e55906001600160a01b031682612e456065546001600160a01b031690565b6001600160a01b03169190613227565b6101915460405163140e25ad60e31b81526000916001600160a01b03169063a0712d6890612e879085906004016134b9565b6020604051808303816000875af1158015612ea6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eca9190613818565b9050801561087a5780604051630864657760e21b8152600401610e5f91906134b9565b6001600160a01b038216612f135760405162461bcd60e51b8152600401610e5f906145d7565b8060356000828254612f259190613b64565b90915550506001600160a01b038216600081815260336020526040808220805485019055517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612f779085906134b9565b60405180910390a35050565b6001600160a01b038216612fa95760405162461bcd60e51b8152600401610e5f90614625565b6001600160a01b03821660009081526033602052604090205481811015612fe25760405162461bcd60e51b8152600401610e5f90614674565b6001600160a01b0383166000818152603360205260408082208585039055603580548690039055519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906108709086906134b9565b600054610100900460ff166130615760405162461bcd60e51b8152600401610e5f90614281565b603661306d8382614715565b506037611d6a8282614715565b600054610100900460ff166130a15760405162461bcd60e51b8152600401610e5f90614281565b6000806130ad836132db565b91509150816130bd5760126130bf565b805b606580546001600160a01b039095166001600160a01b031960ff93909316600160a01b02929092166001600160a81b031990951694909417179092555050565b600054610100900460ff166124575760405162461bcd60e51b8152600401610e5f90614281565b6000808060001985870985870292508281108382030391505080600003613160578382816131565761315661386e565b049250505061089d565b80841161317f5760405162461bcd60e51b8152600401610e5f90614805565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6060610e1984846000856133b7565b600054610100900460ff1661321e5760405162461bcd60e51b8152600401610e5f90614281565b61104a33612077565b8015806132a05750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e9061325d903090869060040161406a565b602060405180830381865afa15801561327a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329e9190613818565b155b6132bc5760405162461bcd60e51b8152600401610e5f90614868565b611d6a8363095ea7b360e01b8484604051602401611d33929190614085565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290516000918291829182916001600160a01b0387169161332291614878565b600060405180830381855afa9150503d806000811461335d576040519150601f19603f3d011682016040523d82523d6000602084013e613362565b606091505b509150915081801561337657506020815110155b156133aa576000818060200190518101906133919190613818565b905060ff81116133a8576001969095509350505050565b505b5060009485945092505050565b6060824710156133d95760405162461bcd60e51b8152600401610e5f906148c7565b600080866001600160a01b031685876040516133f59190614878565b60006040518083038185875af1925050503d8060008114613432576040519150601f19603f3d011682016040523d82523d6000602084013e613437565b606091505b5091509150611a63878383876060831561348257825160000361347b576001600160a01b0385163b61347b5760405162461bcd60e51b8152600401610e5f9061490b565b5081610e19565b610e1983838151156134975781518083602001fd5b8060405162461bcd60e51b8152600401610e5f919061351d565b805b82525050565b6020810161074d82846134b1565b60005b838110156134e25781810151838201526020016134ca565b50506000910152565b60006134f5825190565b80845260208401935061350c8185602086016134c7565b601f01601f19169290920192915050565b6020808252810161089d81846134eb565b805b811461078957600080fd5b803561074d8161352e565b60006020828403121561355b5761355b600080fd5b6000610e19848461353b565b60006001600160a01b03821661074d565b61353081613567565b803561074d81613578565b600080604083850312156135a2576135a2600080fd5b60006135ae8585613581565b92505060206135bf8582860161353b565b9150509250929050565b8015156134b3565b6020810161074d82846135c9565b6000602082840312156135f4576135f4600080fd5b6000610e198484613581565b6134b381613567565b6020810161074d8284613600565b600061074d82613567565b61353081613617565b803561074d81613622565b60006020828403121561364b5761364b600080fd5b6000610e19848461362b565b60008060006060848603121561366f5761366f600080fd5b600061367b8686613581565b935050602061368c86828701613581565b925050604061369d8682870161353b565b9150509250925092565b60ff81166134b3565b6020810161074d82846136a7565b600080600080608085870312156136d7576136d7600080fd5b60006136e38787613581565b94505060206136f487828801613581565b93505060406137058782880161353b565b925050606061371687828801613581565b91505092959194509250565b600061074d6001600160a01b038316613739565b90565b6001600160a01b031690565b600061074d82613722565b600061074d82613745565b6134b381613750565b6020810161074d828461375b565b6000806040838503121561378857613788600080fd5b6000613794858561353b565b92505060206135bf85828601613581565b6000806000606084860312156137bd576137bd600080fd5b60006137c9868661353b565b93505060206137da86828701613581565b925050604061369d86828701613581565b6000806040838503121561380157613801600080fd5b60006137948585613581565b805161074d8161352e565b60006020828403121561382d5761382d600080fd5b6000610e19848461380d565b634e487b7160e01b600052601160045260246000fd5b81810280821583820485141761386757613867613839565b5092915050565b634e487b7160e01b600052601260045260246000fd5b6000826138935761389361386e565b500490565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806138c257607f821691505b6020821081036138d4576138d4613898565b50919050565b60ff91821691908116908282019081111561074d5761074d613839565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715613933576139336138f7565b6040525050565b600061394560405190565b9050613951828261390d565b919050565b600067ffffffffffffffff821115613970576139706138f7565b5060209081020190565b805161074d81613622565b600061399861399384613956565b61393a565b838152905060208082019084028301858111156139b7576139b7600080fd5b835b818110156139db57806139cc888261397a565b845250602092830192016139b9565b5050509392505050565b600082601f8301126139f9576139f9600080fd5b8151610e19848260208601613985565b600060208284031215613a1e57613a1e600080fd5b815167ffffffffffffffff811115613a3857613a38600080fd5b610e19848285016139e5565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613a6f57613a6f600080fd5b6000610e19848461397a565b6000613a87838361375b565b505060200190565b6000613a99825190565b80845260209384019383018060005b83811015613acd578151613abc8882613a7b565b975060208301925050600101613aa8565b509495945050505050565b60408101613ae68285613600565b8181036020830152610e198184613a8f565b634e487b7160e01b600052602160045260246000fd5b6004811061078957610789613af8565b8061395181613b0e565b600061074d82613b1e565b6134b381613b28565b60608101613b4a8286613600565b613b576020830185613600565b610e196040830184613b33565b8082018082111561074d5761074d613839565b6009811061078957610789613af8565b8061395181613b77565b600061074d82613b87565b6134b381613b91565b60408101613bb38285613600565b61089d6020830184613b9c565b801515613530565b805161074d81613bc0565b600060208284031215613be857613be8600080fd5b6000610e198484613bc8565b8181038181111561074d5761074d613839565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015291505b5060400190565b6020808252810161074d81613c07565b600781526000602082016619195c1bdcda5d60ca1b815291505b5060200190565b6020808252810161074d81613c65565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b60208201529150613c4e565b6020808252810161074d81613c96565b60048152600060208201631b5a5b9d60e21b81529150613c7f565b6020808252810161074d81613cec565b602581526000602082017f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77815264207a65726f60d81b60208201529150613c4e565b6020808252810161074d81613d17565b6008815260006020820167776974686472617760c01b81529150613c7f565b6020808252810161074d81613d69565b600681526000602082016572656465656d60d01b81529150613c7f565b6020808252810161074d81613d98565b805161074d81613578565b600060208284031215613de557613de5600080fd5b6000610e198484613dc5565b600060ff821661074d565b6134b381613df1565b6020810161074d8284613dfc565b80825b6001851115613e5257808604811115613e3157613e31613839565b6001851615613e3f57908102905b8002613e4b8560011c90565b9450613e16565b94509492505050565b600082613e6a5750600161089d565b81613e775750600061089d565b8160018114613e8d5760028114613e9757613ec4565b600191505061089d565b60ff841115613ea857613ea8613839565b8360020a915084821115613ebe57613ebe613839565b5061089d565b5060208310610133831016604e8410600b8410161715613ef7575081810a83811115613ef257613ef2613839565b61089d565b613f048484846001613e13565b92509050818404811115613f1a57613f1a613839565b0292915050565b600060ff8316925061089d6000198484613e5b565b602481526000602082017f45524332303a20617070726f76652066726f6d20746865207a65726f206164648152637265737360e01b60208201529150613c4e565b6020808252810161074d81613f36565b602281526000602082017f45524332303a20617070726f766520746f20746865207a65726f206164647265815261737360f01b60208201529150613c4e565b6020808252810161074d81613f87565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081526000613c7f565b6020808252810161074d81613fd6565b602581526000602082017f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b60208201529150613c4e565b6020808252810161074d81614018565b604081016140788285613600565b61089d6020830184613600565b604081016140938285613600565b61089d60208301846134b1565b601d81526000602082017f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000081529150613c7f565b6020808252810161074d816140a0565b602581526000602082017f45524332303a207472616e736665722066726f6d20746865207a65726f206164815264647265737360d81b60208201529150613c4e565b6020808252810161074d816140e4565b602381526000602082017f45524332303a207472616e7366657220746f20746865207a65726f206164647281526265737360e81b60208201529150613c4e565b6020808252810161074d81614136565b602681526000602082017f45524332303a207472616e7366657220616d6f756e7420657863656564732062815265616c616e636560d01b60208201529150613c4e565b6020808252810161074d81614186565b60ff8116613530565b805161074d816141d9565b60006020828403121561420257614202600080fd5b6000610e1984846141e2565b60ff91821691908116908282039081111561074d5761074d613839565b6040810161409382856134b1565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150613c4e565b6020808252810161074d81614239565b602281526000602082017f436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d8152611a5d60f21b60208201529150613c4e565b6020808252810161074d81614291565b601f81526000602082017f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081529150613c7f565b6020808252810161074d816142e0565b601b81526000602082017f76546f6b656e735265636569766564206174205f6465706f736974000000000081529150613c7f565b6020808252810161074d81614324565b604081016143768285613600565b8181036020830152610e1981846134eb565b606081016143968286613600565b6143a36020830185613600565b8181036040830152612cbd81846134eb565b60208082527f61637475616c56546f6b656e73206174205f6265666f7265576974686472617791019081526000613c7f565b6020808252810161074d816143b5565b600067ffffffffffffffff821115614411576144116138f7565b601f19601f83011660200192915050565b6000614430613993846143f7565b90508281526020810184848401111561444b5761444b600080fd5b6144568482856134c7565b509392505050565b600082601f83011261447257614472600080fd5b8151610e19848260208601614422565b60006020828403121561449757614497600080fd5b815167ffffffffffffffff8111156144b1576144b1600080fd5b610e198482850161445e565b60006144c7825190565b6144d58185602086016134c7565b9290920192915050565b75022a9219a1b191b16abb930b83832b2102b32b73ab9960551b81526000601682015b915061089d82846144bd565b643b1a1b191b60d91b8152600060058201614502565b602a81526000602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b60208201529150613c4e565b6020808252810161074d81614524565b606081016145898286613600565b6145966020830185613600565b610e1960408301846134b1565b601f81526000602082017f45524332303a206d696e7420746f20746865207a65726f20616464726573730081529150613c7f565b6020808252810161074d816145a3565b602181526000602082017f45524332303a206275726e2066726f6d20746865207a65726f206164647265738152607360f81b60208201529150613c4e565b6020808252810161074d816145e7565b602281526000602082017f45524332303a206275726e20616d6f756e7420657863656564732062616c616e815261636560f01b60208201529150613c4e565b6020808252810161074d81614635565b600061074d6137368381565b61469983614684565b815460001960089490940293841b1916921b91909117905550565b6000611d6a818484614690565b8181101561087a576146d46000826146b4565b6001016146c1565b601f821115611d6a576000818152602090206020601f850104810160208510156147035750805b610bc06020601f8601048301826146c1565b815167ffffffffffffffff81111561472f5761472f6138f7565b61473982546138ae565b6147448282856146dc565b6020601f83116001811461477857600084156147605750858201515b600019600886021c19811660028602178655506147d1565b600085815260208120601f198616915b828110156147a85788850151825560209485019460019092019101614788565b868310156147c45784890151600019601f89166008021c191682555b6001600288020188555050505b505050505050565b60158152600060208201744d6174683a206d756c446976206f766572666c6f7760581b81529150613c7f565b6020808252810161074d816147d9565b603681526000602082017f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60208201529150613c4e565b6020808252810161074d81614815565b600061089d82846144bd565b602681526000602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f8152651c8818d85b1b60d21b60208201529150613c4e565b6020808252810161074d81614884565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150613c7f565b6020808252810161074d816148d756fea264697066735822122094d0079d5c5c4e933c1f74396514ba6540d1c30d307d4c8d004e4e436033887064736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19 PUSH2 0x1E JUMP JUMPDEST PUSH2 0x105 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x4F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x46 SWAP1 PUSH2 0xA5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF SWAP1 DUP2 AND EQ PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP2 PUSH2 0x9A SWAP2 PUSH2 0xF6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xF0 DUP2 PUSH1 0x27 DUP2 MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320696E697469 PUSH1 0x20 DUP3 ADD MSTORE PUSH7 0x616C697A696E67 PUSH1 0xC8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xFF DUP3 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD PUSH2 0xF0 JUMP JUMPDEST PUSH2 0x4951 DUP1 PUSH2 0x114 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x274 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x80D45A2D GT PUSH2 0x151 JUMPI DUP1 PUSH4 0xBE26317E GT PUSH2 0xC3 JUMPI DUP1 PUSH4 0xD905777E GT PUSH2 0x87 JUMPI DUP1 PUSH4 0xD905777E EQ PUSH2 0x543 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x556 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x569 JUMPI DUP1 PUSH4 0xE521136F EQ PUSH2 0x57A JUMPI DUP1 PUSH4 0xEF8B30F7 EQ PUSH2 0x51D JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x58D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBE26317E EQ PUSH2 0x4ED JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x4F7 JUMPI DUP1 PUSH4 0xC63D75B6 EQ PUSH2 0x50A JUMPI DUP1 PUSH4 0xC6E6F592 EQ PUSH2 0x51D JUMPI DUP1 PUSH4 0xCE96CB77 EQ PUSH2 0x530 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x115 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x47D JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x490 JUMPI DUP1 PUSH4 0xB3D7F6B9 EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xB460AF94 EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xB4A0BDF3 EQ PUSH2 0x4C9 JUMPI DUP1 PUSH4 0xBA087652 EQ PUSH2 0x4DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x80D45A2D EQ PUSH2 0x42A JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x43D JUMPI DUP1 PUSH4 0x94BF804D EQ PUSH2 0x44E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x461 JUMPI DUP1 PUSH4 0x9BB1A99C EQ PUSH2 0x469 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x372500AB GT PUSH2 0x1EA JUMPI DUP1 PUSH4 0x4CDAD506 GT PUSH2 0x1AE JUMPI DUP1 PUSH4 0x4CDAD506 EQ PUSH2 0x2AC JUMPI DUP1 PUSH4 0x5FE3B567 EQ PUSH2 0x3BD JUMPI DUP1 PUSH4 0x6E553F65 EQ PUSH2 0x3DE JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3F1 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x41A JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x422 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x372500AB EQ PUSH2 0x36B JUMPI DUP1 PUSH4 0x38D52E0F EQ PUSH2 0x373 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x384 JUMPI DUP1 PUSH4 0x402D267D EQ PUSH2 0x397 JUMPI DUP1 PUSH4 0x41E11A5A EQ PUSH2 0x3AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE32CB86 GT PUSH2 0x23C JUMPI DUP1 PUSH4 0xE32CB86 EQ PUSH2 0x2F2 JUMPI DUP1 PUSH4 0x17F33340 EQ PUSH2 0x307 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x328 JUMPI DUP1 PUSH4 0x1BE19560 EQ PUSH2 0x330 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x343 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x356 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1E1D114 EQ PUSH2 0x279 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x297 JUMPI DUP1 PUSH4 0x7A2D13A EQ PUSH2 0x2AC JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x2BF JUMPI DUP1 PUSH4 0xA28A477 EQ PUSH2 0x2DF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x281 PUSH2 0x5A0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x28E SWAP2 SWAP1 PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x29F PUSH2 0x6AE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x28E SWAP2 SWAP1 PUSH2 0x351D JUMP JUMPDEST PUSH2 0x281 PUSH2 0x2BA CALLDATASIZE PUSH1 0x4 PUSH2 0x3546 JUMP JUMPDEST PUSH2 0x740 JUMP JUMPDEST PUSH2 0x2D2 PUSH2 0x2CD CALLDATASIZE PUSH1 0x4 PUSH2 0x358C JUMP JUMPDEST PUSH2 0x753 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x28E SWAP2 SWAP1 PUSH2 0x35D1 JUMP JUMPDEST PUSH2 0x281 PUSH2 0x2ED CALLDATASIZE PUSH1 0x4 PUSH2 0x3546 JUMP JUMPDEST PUSH2 0x76B JUMP JUMPDEST PUSH2 0x305 PUSH2 0x300 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DF JUMP JUMPDEST PUSH2 0x778 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x193 SLOAD PUSH2 0x31B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x28E SWAP2 SWAP1 PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH2 0x281 JUMP JUMPDEST PUSH2 0x305 PUSH2 0x33E CALLDATASIZE PUSH1 0x4 PUSH2 0x3636 JUMP JUMPDEST PUSH2 0x78C JUMP JUMPDEST PUSH2 0x2D2 PUSH2 0x351 CALLDATASIZE PUSH1 0x4 PUSH2 0x3657 JUMP JUMPDEST PUSH2 0x87E JUMP JUMPDEST PUSH2 0x35E PUSH2 0x8A4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x28E SWAP2 SWAP1 PUSH2 0x36B0 JUMP JUMPDEST PUSH2 0x305 PUSH2 0x8C5 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x31B JUMP JUMPDEST PUSH2 0x2D2 PUSH2 0x392 CALLDATASIZE PUSH1 0x4 PUSH2 0x358C JUMP JUMPDEST PUSH2 0xBC7 JUMP JUMPDEST PUSH2 0x281 PUSH2 0x3A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DF JUMP JUMPDEST PUSH2 0xBE9 JUMP JUMPDEST PUSH2 0x305 PUSH2 0x3B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x36BE JUMP JUMPDEST PUSH2 0xE21 JUMP JUMPDEST PUSH2 0x192 SLOAD PUSH2 0x3D1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x28E SWAP2 SWAP1 PUSH2 0x3764 JUMP JUMPDEST PUSH2 0x281 PUSH2 0x3EC CALLDATASIZE PUSH1 0x4 PUSH2 0x3772 JUMP JUMPDEST PUSH2 0xEF3 JUMP JUMPDEST PUSH2 0x281 PUSH2 0x3FF CALLDATASIZE PUSH1 0x4 PUSH2 0x35DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x305 PUSH2 0x1038 JUMP JUMPDEST PUSH2 0x305 PUSH2 0x104C JUMP JUMPDEST PUSH2 0x305 PUSH2 0x438 CALLDATASIZE PUSH1 0x4 PUSH2 0x3546 JUMP JUMPDEST PUSH2 0x1081 JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x31B JUMP JUMPDEST PUSH2 0x281 PUSH2 0x45C CALLDATASIZE PUSH1 0x4 PUSH2 0x3772 JUMP JUMPDEST PUSH2 0x10C8 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x11E7 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH2 0x3D1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2D2 PUSH2 0x48B CALLDATASIZE PUSH1 0x4 PUSH2 0x358C JUMP JUMPDEST PUSH2 0x11F6 JUMP JUMPDEST PUSH2 0x2D2 PUSH2 0x49E CALLDATASIZE PUSH1 0x4 PUSH2 0x358C JUMP JUMPDEST PUSH2 0x123E JUMP JUMPDEST PUSH2 0x281 PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3546 JUMP JUMPDEST PUSH2 0x124C JUMP JUMPDEST PUSH2 0x281 PUSH2 0x4C4 CALLDATASIZE PUSH1 0x4 PUSH2 0x37A5 JUMP JUMPDEST PUSH2 0x1259 JUMP JUMPDEST PUSH1 0xFB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3D1 JUMP JUMPDEST PUSH2 0x281 PUSH2 0x4E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x37A5 JUMP JUMPDEST PUSH2 0x136B JUMP JUMPDEST PUSH2 0x281 PUSH2 0x12D SLOAD DUP2 JUMP JUMPDEST PUSH2 0x305 PUSH2 0x505 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DF JUMP JUMPDEST PUSH2 0x1494 JUMP JUMPDEST PUSH2 0x281 PUSH2 0x518 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DF JUMP JUMPDEST PUSH2 0x1698 JUMP JUMPDEST PUSH2 0x281 PUSH2 0x52B CALLDATASIZE PUSH1 0x4 PUSH2 0x3546 JUMP JUMPDEST PUSH2 0x16A7 JUMP JUMPDEST PUSH2 0x281 PUSH2 0x53E CALLDATASIZE PUSH1 0x4 PUSH2 0x35DF JUMP JUMPDEST PUSH2 0x16B4 JUMP JUMPDEST PUSH2 0x281 PUSH2 0x551 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DF JUMP JUMPDEST PUSH2 0x188C JUMP JUMPDEST PUSH2 0x281 PUSH2 0x564 CALLDATASIZE PUSH1 0x4 PUSH2 0x37EB JUMP JUMPDEST PUSH2 0x1A6E JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x31B JUMP JUMPDEST PUSH2 0x305 PUSH2 0x588 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DF JUMP JUMPDEST PUSH2 0x1A99 JUMP JUMPDEST PUSH2 0x305 PUSH2 0x59B CALLDATASIZE PUSH1 0x4 PUSH2 0x35DF JUMP JUMPDEST PUSH2 0x1AE0 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x182DF0F5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5FF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x623 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x654 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x671 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x695 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x69F SWAP2 SWAP1 PUSH2 0x384F JUMP JUMPDEST PUSH2 0x6A9 SWAP2 SWAP1 PUSH2 0x3884 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x36 DUP1 SLOAD PUSH2 0x6BD SWAP1 PUSH2 0x38AE JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x6E9 SWAP1 PUSH2 0x38AE JUMP JUMPDEST DUP1 ISZERO PUSH2 0x736 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x70B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x736 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x719 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D DUP3 PUSH1 0x0 PUSH2 0x1B51 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x761 DUP2 DUP6 DUP6 PUSH2 0x1B92 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D DUP3 PUSH1 0x1 PUSH2 0x1C39 JUMP JUMPDEST PUSH2 0x780 PUSH2 0x1C71 JUMP JUMPDEST PUSH2 0x789 DUP2 PUSH2 0x1C9B JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x794 PUSH2 0x1C71 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x7C3 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x804 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x87A JUMPI PUSH1 0x0 PUSH2 0x820 PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x82D DUP4 DUP3 DUP5 PUSH2 0x1D14 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x6D25BE279134F4ECAA4770AFF0C3D916D9E7C5EF37B65ED95DBDBA411F5D54D5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x870 SWAP2 SWAP1 PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x88C DUP6 DUP3 DUP6 PUSH2 0x1D6F JUMP JUMPDEST PUSH2 0x897 DUP6 DUP6 DUP6 PUSH2 0x1DB9 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8AE PUSH2 0x1EA9 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH2 0x6A9 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x38DA JUMP JUMPDEST PUSH2 0x192 SLOAD PUSH2 0x191 SLOAD PUSH2 0x193 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x61252FD1 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP5 SWAP4 DUP5 AND SWAP4 SWAP1 SWAP3 AND SWAP2 PUSH1 0x0 SWAP2 DUP6 SWAP2 PUSH4 0x61252FD1 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 DUP7 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x924 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x94C SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3A09 JUMP JUMPDEST SWAP1 POP PUSH2 0x958 DUP2 MLOAD PUSH2 0x1F29 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xBC0 JUMPI PUSH1 0x0 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x978 JUMPI PUSH2 0x978 PUSH2 0x3A44 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF7C618C1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9E6 SWAP2 SWAP1 PUSH2 0x3A5A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP7 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xA20 JUMPI PUSH2 0xA20 PUSH2 0x3A44 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x20 SWAP2 DUP3 MUL SWAP3 SWAP1 SWAP3 ADD ADD MSTORE PUSH1 0x40 MLOAD PUSH3 0x4CAEB1 PUSH1 0xE4 SHL DUP2 MSTORE SWAP1 DUP5 AND SWAP1 PUSH4 0x4CAEB10 SWAP1 PUSH2 0xA5C SWAP1 ADDRESS SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x3AD8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA8A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 POP PUSH4 0x70A08231 SWAP1 PUSH2 0xABD SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xADA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAFE SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0xB6F JUMPI PUSH2 0xB11 DUP4 DUP9 DUP4 PUSH2 0x1D14 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5BEBB3B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP1 PUSH4 0x16FAECEC SWAP1 PUSH2 0xB42 SWAP1 DUP13 SWAP1 DUP8 SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x4 ADD PUSH2 0x3B3C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0xB6D JUMPI POP PUSH1 0x1 JUMPDEST POP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xBA56C3AB1F752776EEF60DB959A4E6B643E89595315EDBBD945E104623FA03BA DUP3 PUSH1 0x40 MLOAD PUSH2 0xBA8 SWAP2 SWAP1 PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 POP PUSH2 0x95B SWAP1 POP JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x761 DUP2 DUP6 DUP6 PUSH2 0xBDA DUP4 DUP4 PUSH2 0x1A6E JUMP JUMPDEST PUSH2 0xBE4 SWAP2 SWAP1 PUSH2 0x3B64 JUMP JUMPDEST PUSH2 0x1B92 JUMP JUMPDEST PUSH2 0x192 SLOAD PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x742D14B PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP3 PUSH4 0xE85A2960 SWAP3 PUSH2 0xC25 SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x3BA5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC42 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC66 SWAP2 SWAP1 PUSH2 0x3BD3 JUMP JUMPDEST ISZERO PUSH2 0xC73 JUMPI POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x192 SLOAD PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x2C3BCBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP3 PUSH4 0x2C3BCBB SWAP3 PUSH2 0xCAD SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCCA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCEE SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x182DF0F5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD4F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD73 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDC7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDEB SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0xDF5 SWAP2 SWAP1 PUSH2 0x384F JUMP JUMPDEST PUSH2 0xDFF SWAP2 SWAP1 PUSH2 0x3884 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT PUSH2 0xE0F JUMPI PUSH1 0x0 PUSH2 0xE19 JUMP JUMPDEST PUSH2 0xE19 DUP2 DUP4 PUSH2 0x3BF4 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x2 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xE43 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF DUP1 DUP4 AND SWAP2 AND LT JUMPDEST PUSH2 0xE68 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3C55 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFFFF NOT AND PUSH1 0xFF DUP4 AND OR PUSH2 0x100 OR SWAP1 SSTORE PUSH2 0xE85 DUP3 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0xE8E DUP6 PUSH2 0x1F7B JUMP JUMPDEST PUSH2 0xE97 DUP4 PUSH2 0x1FB3 JUMP JUMPDEST PUSH2 0xEA0 DUP5 PUSH2 0x2010 JUMP JUMPDEST PUSH2 0xEA9 DUP3 PUSH2 0x2077 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH2 0xEE4 SWAP1 DUP4 SWAP1 PUSH2 0x36B0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEFD PUSH2 0x2090 JUMP JUMPDEST PUSH2 0xF06 DUP3 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA6AFED95 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF5C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF80 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST POP DUP3 PUSH1 0x0 SUB PUSH2 0xFA2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3C86 JUMP JUMPDEST PUSH2 0xFAB DUP3 PUSH2 0xBE9 JUMP JUMPDEST DUP4 GT ISZERO PUSH2 0xFCB JUMPI PUSH1 0x40 MLOAD PUSH4 0x26AC6EE1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xFD6 DUP5 PUSH2 0x16A7 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0xFF9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3C86 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1004 PUSH1 0x35 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x1012 CALLER DUP6 DUP8 DUP6 PUSH2 0x20BB JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x101E PUSH1 0x35 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1028 SWAP2 SWAP1 PUSH2 0x3BF4 JUMP JUMPDEST SWAP4 POP POP POP POP PUSH2 0x74D PUSH1 0x1 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH2 0x1040 PUSH2 0x1C71 JUMP JUMPDEST PUSH2 0x104A PUSH1 0x0 PUSH2 0x2077 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0xC9 SLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 EQ PUSH2 0x1078 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3CDC JUMP JUMPDEST PUSH2 0x789 DUP2 PUSH2 0x2077 JUMP JUMPDEST PUSH2 0x10BF PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x19 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x7365744D61784C6F6F70734C696D69742875696E743235362900000000000000 DUP2 MSTORE POP PUSH2 0x245F JUMP JUMPDEST PUSH2 0x789 DUP2 PUSH2 0x1FB3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10D2 PUSH2 0x2090 JUMP JUMPDEST PUSH2 0x10DB DUP3 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA6AFED95 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1131 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1155 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST POP DUP3 PUSH1 0x0 SUB PUSH2 0x1177 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3D07 JUMP JUMPDEST PUSH2 0x1180 DUP3 PUSH2 0x1698 JUMP JUMPDEST DUP4 GT ISZERO PUSH2 0x11A0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x40868F79 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x11AB DUP5 PUSH2 0x124C JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x11CE JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3D07 JUMP JUMPDEST PUSH2 0x11DA CALLER DUP5 DUP4 DUP8 PUSH2 0x20BB JUMP JUMPDEST SWAP1 POP PUSH2 0x74D PUSH1 0x1 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x6BD SWAP1 PUSH2 0x38AE JUMP JUMPDEST PUSH1 0x0 CALLER DUP2 PUSH2 0x1204 DUP3 DUP7 PUSH2 0x1A6E JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x1226 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3D59 JUMP JUMPDEST PUSH2 0x1233 DUP3 DUP7 DUP7 DUP5 SUB PUSH2 0x1B92 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x761 DUP2 DUP6 DUP6 PUSH2 0x1DB9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D DUP3 PUSH1 0x1 PUSH2 0x1B51 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1263 PUSH2 0x2090 JUMP JUMPDEST PUSH2 0x126C DUP4 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0x1275 DUP3 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA6AFED95 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x12CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12EF SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST POP DUP4 PUSH1 0x0 SUB PUSH2 0x1311 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3D88 JUMP JUMPDEST PUSH2 0x131A DUP3 PUSH2 0x16B4 JUMP JUMPDEST DUP5 GT ISZERO PUSH2 0x133A JUMPI PUSH1 0x40 MLOAD PUSH4 0xE9ED9515 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1346 DUP7 PUSH2 0x24F9 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x135D PUSH2 0x1354 CALLER SWAP1 JUMP JUMPDEST DUP7 DUP7 DUP6 DUP6 PUSH2 0x27ED JUMP JUMPDEST SWAP2 POP POP PUSH2 0x89D PUSH1 0x1 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1375 PUSH2 0x2090 JUMP JUMPDEST PUSH2 0x137E DUP4 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0x1387 DUP3 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA6AFED95 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x13DD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1401 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST POP DUP4 PUSH1 0x0 SUB PUSH2 0x1423 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3DB5 JUMP JUMPDEST PUSH2 0x142C DUP3 PUSH2 0x188C JUMP JUMPDEST DUP5 GT ISZERO PUSH2 0x144C JUMPI PUSH1 0x40 MLOAD PUSH4 0x88902479 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1457 DUP6 PUSH2 0x2890 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x147A JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3DB5 JUMP JUMPDEST PUSH2 0x1487 CALLER DUP6 DUP6 DUP5 DUP10 PUSH2 0x27ED JUMP JUMPDEST SWAP1 POP PUSH2 0x89D PUSH1 0x1 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x14B4 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x14CE JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x14CE JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x14EA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3C55 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x150D JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x1516 DUP3 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0x191 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x5FE3B567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH4 0x5FE3B567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1570 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1594 SWAP2 SWAP1 PUSH2 0x3A5A JUMP JUMPDEST PUSH2 0x192 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH2 0x191 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x6F307DC3 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP4 SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x6F307DC3 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x161C SWAP2 SWAP1 PUSH2 0x3DD0 JUMP JUMPDEST SWAP1 POP PUSH2 0x1638 PUSH2 0x162A DUP3 PUSH2 0x2AD3 JUMP JUMPDEST PUSH2 0x1633 DUP4 PUSH2 0x2B61 JUMP JUMPDEST PUSH2 0x2BD9 JUMP JUMPDEST PUSH2 0x1641 DUP2 PUSH2 0x2C0A JUMP JUMPDEST PUSH2 0x1649 PUSH2 0x2C3A JUMP JUMPDEST POP DUP1 ISZERO PUSH2 0x87A JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH2 0x168C SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x3E05 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D PUSH2 0x52B PUSH1 0x0 PUSH2 0xBE9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D DUP3 PUSH1 0x0 PUSH2 0x1C39 JUMP JUMPDEST PUSH2 0x192 SLOAD PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x742D14B PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP3 PUSH4 0xE85A2960 SWAP3 PUSH2 0x16F1 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x1 SWAP1 PUSH1 0x4 ADD PUSH2 0x3BA5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x170E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1732 SWAP2 SWAP1 PUSH2 0x3BD3 JUMP JUMPDEST ISZERO PUSH2 0x173F JUMPI POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1D8E90D1 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x3B1D21A2 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x178A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17AE SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8F840DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1806 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x182A SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1850 PUSH2 0x2BA DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP2 DUP4 LT ISZERO PUSH2 0x1865 JUMPI POP PUSH1 0x0 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1871 DUP4 DUP6 PUSH2 0x3BF4 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 LT PUSH2 0x1880 JUMPI DUP2 PUSH2 0x1882 JUMP JUMPDEST DUP1 JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x192 SLOAD PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x742D14B PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP3 PUSH4 0xE85A2960 SWAP3 PUSH2 0x18C9 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x1 SWAP1 PUSH1 0x4 ADD PUSH2 0x3BA5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x190A SWAP2 SWAP1 PUSH2 0x3BD3 JUMP JUMPDEST ISZERO PUSH2 0x1917 JUMPI POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1D8E90D1 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x3B1D21A2 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1962 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1986 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8F840DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19DE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A02 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0x1A16 JUMPI POP PUSH1 0x0 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A22 DUP3 DUP5 PUSH2 0x3BF4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1A2F DUP3 PUSH2 0x16A7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1A52 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT PUSH2 0x1A61 JUMPI DUP1 PUSH2 0x1A63 JUMP JUMPDEST DUP2 JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1AD7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x736574526577617264526563697069656E742861646472657373290000000000 DUP2 MSTORE POP PUSH2 0x245F JUMP JUMPDEST PUSH2 0x789 DUP2 PUSH2 0x2010 JUMP JUMPDEST PUSH2 0x1AE8 PUSH2 0x1C71 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH2 0x1B19 PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x89D PUSH2 0x1B5E PUSH2 0x5A0 JUMP JUMPDEST PUSH2 0x1B69 SWAP1 PUSH1 0x1 PUSH2 0x3B64 JUMP JUMPDEST PUSH2 0x1B71 PUSH2 0x1EA9 JUMP JUMPDEST PUSH2 0x1B7C SWAP1 PUSH1 0xA PUSH2 0x3F21 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH2 0x1B89 SWAP2 SWAP1 PUSH2 0x3B64 JUMP JUMPDEST DUP6 SWAP2 SWAP1 DUP6 PUSH2 0x2C69 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1BB8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3F77 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1BDE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3FC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x870 SWAP1 DUP6 SWAP1 PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x89D PUSH2 0x1C46 PUSH2 0x1EA9 JUMP JUMPDEST PUSH2 0x1C51 SWAP1 PUSH1 0xA PUSH2 0x3F21 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH2 0x1C5E SWAP2 SWAP1 PUSH2 0x3B64 JUMP JUMPDEST PUSH2 0x1C66 PUSH2 0x5A0 JUMP JUMPDEST PUSH2 0x1B89 SWAP1 PUSH1 0x1 PUSH2 0x3B64 JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x104A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4008 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1CC1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x405A JUMP JUMPDEST PUSH1 0xFB DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP1 PUSH32 0x66FD58E82F7B31A2A5C30E0888F3093EFE4E111B00CD2B0C31FE014601293AA0 SWAP1 PUSH2 0x168C SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x406A JUMP JUMPDEST PUSH2 0x1D6A DUP4 PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1D33 SWAP3 SWAP2 SWAP1 PUSH2 0x4085 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x2CC6 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D7B DUP5 DUP5 PUSH2 0x1A6E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x1DB3 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x1DA6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x40D4 JUMP JUMPDEST PUSH2 0x1DB3 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x1B92 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1DDF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4126 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1E05 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4176 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x1E3E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x41C9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE SWAP3 DUP7 AND DUP1 DUP3 MSTORE SWAP1 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE SWAP2 MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x1E9C SWAP1 DUP7 SWAP1 PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x1DB3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1EBD PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1EFA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F1E SWAP2 SWAP1 PUSH2 0x41ED JUMP JUMPDEST PUSH2 0x6A9 SWAP1 PUSH1 0x12 PUSH2 0x420E JUMP JUMPDEST PUSH2 0x12D SLOAD DUP2 GT ISZERO PUSH2 0x789 JUMPI PUSH2 0x12D SLOAD DUP2 PUSH1 0x40 MLOAD PUSH4 0x792BFB1B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP3 SWAP2 SWAP1 PUSH2 0x422B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x789 JUMPI PUSH1 0x40 MLOAD PUSH4 0x42BCDF7F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1FA2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4281 JUMP JUMPDEST PUSH2 0x1FAA PUSH2 0x2D58 JUMP JUMPDEST PUSH2 0x789 DUP2 PUSH2 0x2D87 JUMP JUMPDEST PUSH2 0x12D SLOAD DUP2 GT PUSH2 0x1FD5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x42D0 JUMP JUMPDEST PUSH2 0x12D DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC2D09FEF144F7C8A86F71EA459F8FC17F675768EB1AE369CBD77FB31D467AAFA SWAP1 PUSH2 0x168C SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x422B JUMP JUMPDEST PUSH2 0x2019 DUP2 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0x193 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 AND SWAP1 PUSH32 0xC8C11BB97AC2FFA10CE2E2A98F4C1FD8DF84CFA2E1A15E013ED2383AB1F527AD SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH2 0x193 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH2 0x789 DUP2 PUSH2 0x2DAE JUMP JUMPDEST PUSH1 0x2 PUSH2 0x15F SLOAD SUB PUSH2 0x20B3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4314 JUMP JUMPDEST PUSH1 0x2 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x20CF PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20FA SWAP2 SWAP1 PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2117 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x213B SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2172 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x218F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x21B3 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP PUSH2 0x21D2 PUSH2 0x21CA PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP8 ADDRESS DUP8 PUSH2 0x2E00 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x21E7 PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2212 SWAP2 SWAP1 PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x222F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2253 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x225D SWAP2 SWAP1 PUSH2 0x3BF4 JUMP JUMPDEST SWAP1 POP PUSH2 0x2268 DUP2 PUSH2 0x2E21 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x229E SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22BB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22DF SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x22E9 SWAP2 SWAP1 PUSH2 0x3BF4 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x230C JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4358 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x182DF0F5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x236B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x238F SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x2399 SWAP1 DUP5 PUSH2 0x384F JUMP JUMPDEST PUSH2 0x23A3 SWAP2 SWAP1 PUSH2 0x3884 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x23F2 PUSH2 0x23B2 PUSH2 0x1EA9 JUMP JUMPDEST PUSH2 0x23BD SWAP1 PUSH1 0xA PUSH2 0x3F21 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH2 0x23CA SWAP2 SWAP1 PUSH2 0x3B64 JUMP JUMPDEST DUP4 PUSH2 0x23D3 PUSH2 0x5A0 JUMP JUMPDEST PUSH2 0x23DE SWAP1 PUSH1 0x1 PUSH2 0x3B64 JUMP JUMPDEST PUSH2 0x23E8 SWAP2 SWAP1 PUSH2 0x3BF4 JUMP JUMPDEST DUP5 SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2C69 JUMP JUMPDEST SWAP1 POP PUSH2 0x23FE DUP10 DUP3 PUSH2 0x2EED JUMP JUMPDEST DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDCBC1C05240F31FF3AD067EF1EE35CE4997762752E3A095284754544F4C709D7 DUP11 DUP5 PUSH1 0x40 MLOAD PUSH2 0x2443 SWAP3 SWAP2 SWAP1 PUSH2 0x422B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH1 0xFB SLOAD PUSH1 0x40 MLOAD PUSH4 0x18C5E8AB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x18C5E8AB SWAP1 PUSH2 0x2492 SWAP1 CALLER SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x4368 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24AF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x24D3 SWAP2 SWAP1 PUSH2 0x3BD3 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x87A JUMPI CALLER ADDRESS DUP4 PUSH1 0x40 MLOAD PUSH4 0x4A3FA293 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4388 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2510 PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2540 SWAP2 SWAP1 PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x255D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2581 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x25B8 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x25D5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x25F9 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x852A12E3 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x852A12E3 SWAP1 PUSH2 0x2630 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x264F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2673 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2696 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH4 0x8646577 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP2 SWAP1 PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x26C4 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26E1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2705 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x270F SWAP2 SWAP1 PUSH2 0x3BF4 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP8 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2746 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2763 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2787 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x2791 SWAP1 DUP5 PUSH2 0x3BF4 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x27B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x43E7 JUMP JUMPDEST PUSH2 0x27E1 PUSH2 0x27BF PUSH2 0x1EA9 JUMP JUMPDEST PUSH2 0x27CA SWAP1 PUSH1 0xA PUSH2 0x3F21 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH2 0x27D7 SWAP2 SWAP1 PUSH2 0x3B64 JUMP JUMPDEST DUP3 SWAP1 DUP6 PUSH1 0x1 PUSH2 0x2C69 JUMP JUMPDEST SWAP6 POP POP POP POP POP POP SWAP2 POP SWAP2 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x2811 JUMPI PUSH2 0x2811 DUP4 DUP7 DUP4 PUSH2 0x1D6F JUMP JUMPDEST PUSH2 0x281B DUP4 DUP3 PUSH2 0x2F83 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH2 0x2832 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP5 PUSH2 0x1D14 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFBDE797D201C681B91056529119E0B02407C7BB96A4A2C75C01FC9667232C8DB DUP6 DUP6 PUSH1 0x40 MLOAD PUSH2 0x2881 SWAP3 SWAP2 SWAP1 PUSH2 0x422B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x28A5 PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x28D5 SWAP2 SWAP1 PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x28F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2916 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH2 0x29BA SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x294F SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x296C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2990 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x2998 PUSH2 0x1EA9 JUMP JUMPDEST PUSH2 0x29A3 SWAP1 PUSH1 0xA PUSH2 0x3F21 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH2 0x29B0 SWAP2 SWAP1 PUSH2 0x3B64 JUMP JUMPDEST DUP8 SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2C69 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0xDB006A75 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xDB006A75 SWAP1 PUSH2 0x29F1 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2A10 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A34 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2A57 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH4 0x8646577 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP2 SWAP1 PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2A86 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2AA3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2AC7 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP PUSH2 0x1A63 DUP5 DUP3 PUSH2 0x3BF4 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6FDDE03 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B13 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2B3B SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x4482 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2B4B SWAP2 SWAP1 PUSH2 0x44DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2BA1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2BC9 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x4482 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2B4B SWAP2 SWAP1 PUSH2 0x450E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2C00 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4281 JUMP JUMPDEST PUSH2 0x87A DUP3 DUP3 PUSH2 0x303A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2C31 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4281 JUMP JUMPDEST PUSH2 0x789 DUP2 PUSH2 0x307A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2C61 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4281 JUMP JUMPDEST PUSH2 0x104A PUSH2 0x30FF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2C77 DUP7 DUP7 DUP7 PUSH2 0x3126 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP4 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2C8D JUMPI PUSH2 0x2C8D PUSH2 0x3AF8 JUMP JUMPDEST EQ DUP1 ISZERO PUSH2 0x2CAA JUMPI POP PUSH1 0x0 DUP5 DUP1 PUSH2 0x2CA5 JUMPI PUSH2 0x2CA5 PUSH2 0x386E JUMP JUMPDEST DUP7 DUP9 MULMOD GT JUMPDEST ISZERO PUSH2 0x2CBD JUMPI PUSH2 0x2CBA PUSH1 0x1 DUP3 PUSH2 0x3B64 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D1B DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x31E8 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH1 0x0 EQ DUP1 PUSH2 0x2D3C JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2D3C SWAP2 SWAP1 PUSH2 0x3BD3 JUMP JUMPDEST PUSH2 0x1D6A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x456B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2D7F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4281 JUMP JUMPDEST PUSH2 0x104A PUSH2 0x31F7 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x780 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4281 JUMP JUMPDEST PUSH1 0x97 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x1DB3 DUP5 PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1D33 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x457B JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH2 0x2E55 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH2 0x2E45 PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 PUSH2 0x3227 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x140E25AD PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xA0712D68 SWAP1 PUSH2 0x2E87 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2EA6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2ECA SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x87A JUMPI DUP1 PUSH1 0x40 MLOAD PUSH4 0x8646577 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP2 SWAP1 PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2F13 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x45D7 JUMP JUMPDEST DUP1 PUSH1 0x35 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x2F25 SWAP2 SWAP1 PUSH2 0x3B64 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP6 ADD SWAP1 SSTORE MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x2F77 SWAP1 DUP6 SWAP1 PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2FA9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4625 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x2FE2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4674 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP6 DUP6 SUB SWAP1 SSTORE PUSH1 0x35 DUP1 SLOAD DUP7 SWAP1 SUB SWAP1 SSTORE MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x870 SWAP1 DUP7 SWAP1 PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3061 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4281 JUMP JUMPDEST PUSH1 0x36 PUSH2 0x306D DUP4 DUP3 PUSH2 0x4715 JUMP JUMPDEST POP PUSH1 0x37 PUSH2 0x1D6A DUP3 DUP3 PUSH2 0x4715 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x30A1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4281 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x30AD DUP4 PUSH2 0x32DB JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH2 0x30BD JUMPI PUSH1 0x12 PUSH2 0x30BF JUMP JUMPDEST DUP1 JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP6 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT PUSH1 0xFF SWAP4 SWAP1 SWAP4 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL SWAP3 SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR OR SWAP1 SWAP3 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2457 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4281 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 SUB PUSH2 0x3160 JUMPI DUP4 DUP3 DUP2 PUSH2 0x3156 JUMPI PUSH2 0x3156 PUSH2 0x386E JUMP JUMPDEST DIV SWAP3 POP POP POP PUSH2 0x89D JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x317F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4805 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x1 DUP8 NOT DUP2 ADD DUP9 AND SWAP8 DUP9 SWAP1 DIV PUSH1 0x3 DUP2 MUL DUP4 XOR DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL SWAP1 DUP2 MUL SWAP1 SWAP3 SUB SWAP1 SWAP2 MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xE19 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x33B7 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x321E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4281 JUMP JUMPDEST PUSH2 0x104A CALLER PUSH2 0x2077 JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x32A0 JUMPI POP PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH2 0x325D SWAP1 ADDRESS SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x406A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x327A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x329E SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x32BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4868 JUMP JUMPDEST PUSH2 0x1D6A DUP4 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1D33 SWAP3 SWAP2 SWAP1 PUSH2 0x4085 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP2 MSTORE PUSH1 0x24 DUP2 ADD DUP3 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH2 0x3322 SWAP2 PUSH2 0x4878 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x335D JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3362 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x3376 JUMPI POP PUSH1 0x20 DUP2 MLOAD LT ISZERO JUMPDEST ISZERO PUSH2 0x33AA JUMPI PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x3391 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP PUSH1 0xFF DUP2 GT PUSH2 0x33A8 JUMPI PUSH1 0x1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST POP JUMPDEST POP PUSH1 0x0 SWAP5 DUP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x33D9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x48C7 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x33F5 SWAP2 SWAP1 PUSH2 0x4878 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3432 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3437 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1A63 DUP8 DUP4 DUP4 DUP8 PUSH1 0x60 DUP4 ISZERO PUSH2 0x3482 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x347B JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x347B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x490B JUMP JUMPDEST POP DUP2 PUSH2 0xE19 JUMP JUMPDEST PUSH2 0xE19 DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x3497 JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP2 SWAP1 PUSH2 0x351D JUMP JUMPDEST DUP1 JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x74D DUP3 DUP5 PUSH2 0x34B1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x34E2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x34CA JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34F5 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x350C DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x34C7 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x89D DUP2 DUP5 PUSH2 0x34EB JUMP JUMPDEST DUP1 JUMPDEST DUP2 EQ PUSH2 0x789 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x74D DUP2 PUSH2 0x352E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x355B JUMPI PUSH2 0x355B PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE19 DUP5 DUP5 PUSH2 0x353B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x74D JUMP JUMPDEST PUSH2 0x3530 DUP2 PUSH2 0x3567 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x74D DUP2 PUSH2 0x3578 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x35A2 JUMPI PUSH2 0x35A2 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x35AE DUP6 DUP6 PUSH2 0x3581 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x35BF DUP6 DUP3 DUP7 ADD PUSH2 0x353B JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x34B3 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x74D DUP3 DUP5 PUSH2 0x35C9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x35F4 JUMPI PUSH2 0x35F4 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE19 DUP5 DUP5 PUSH2 0x3581 JUMP JUMPDEST PUSH2 0x34B3 DUP2 PUSH2 0x3567 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x74D DUP3 DUP5 PUSH2 0x3600 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D DUP3 PUSH2 0x3567 JUMP JUMPDEST PUSH2 0x3530 DUP2 PUSH2 0x3617 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x74D DUP2 PUSH2 0x3622 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x364B JUMPI PUSH2 0x364B PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE19 DUP5 DUP5 PUSH2 0x362B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x366F JUMPI PUSH2 0x366F PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x367B DUP7 DUP7 PUSH2 0x3581 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x368C DUP7 DUP3 DUP8 ADD PUSH2 0x3581 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x369D DUP7 DUP3 DUP8 ADD PUSH2 0x353B JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0xFF DUP2 AND PUSH2 0x34B3 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x74D DUP3 DUP5 PUSH2 0x36A7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x36D7 JUMPI PUSH2 0x36D7 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x36E3 DUP8 DUP8 PUSH2 0x3581 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x36F4 DUP8 DUP3 DUP9 ADD PUSH2 0x3581 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x3705 DUP8 DUP3 DUP9 ADD PUSH2 0x353B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0x3716 DUP8 DUP3 DUP9 ADD PUSH2 0x3581 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x3739 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D DUP3 PUSH2 0x3722 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D DUP3 PUSH2 0x3745 JUMP JUMPDEST PUSH2 0x34B3 DUP2 PUSH2 0x3750 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x74D DUP3 DUP5 PUSH2 0x375B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3788 JUMPI PUSH2 0x3788 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3794 DUP6 DUP6 PUSH2 0x353B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x35BF DUP6 DUP3 DUP7 ADD PUSH2 0x3581 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x37BD JUMPI PUSH2 0x37BD PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x37C9 DUP7 DUP7 PUSH2 0x353B JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x37DA DUP7 DUP3 DUP8 ADD PUSH2 0x3581 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x369D DUP7 DUP3 DUP8 ADD PUSH2 0x3581 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3801 JUMPI PUSH2 0x3801 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3794 DUP6 DUP6 PUSH2 0x3581 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x74D DUP2 PUSH2 0x352E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x382D JUMPI PUSH2 0x382D PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE19 DUP5 DUP5 PUSH2 0x380D JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 MUL DUP1 DUP3 ISZERO DUP4 DUP3 DIV DUP6 EQ OR PUSH2 0x3867 JUMPI PUSH2 0x3867 PUSH2 0x3839 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3893 JUMPI PUSH2 0x3893 PUSH2 0x386E JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP2 DIV PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x38C2 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x38D4 JUMPI PUSH2 0x38D4 PUSH2 0x3898 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xFF SWAP2 DUP3 AND SWAP2 SWAP1 DUP2 AND SWAP1 DUP3 DUP3 ADD SWAP1 DUP2 GT ISZERO PUSH2 0x74D JUMPI PUSH2 0x74D PUSH2 0x3839 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x3933 JUMPI PUSH2 0x3933 PUSH2 0x38F7 JUMP JUMPDEST PUSH1 0x40 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3945 PUSH1 0x40 MLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x3951 DUP3 DUP3 PUSH2 0x390D JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x3970 JUMPI PUSH2 0x3970 PUSH2 0x38F7 JUMP JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x74D DUP2 PUSH2 0x3622 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3998 PUSH2 0x3993 DUP5 PUSH2 0x3956 JUMP JUMPDEST PUSH2 0x393A JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP1 POP PUSH1 0x20 DUP1 DUP3 ADD SWAP1 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x39B7 JUMPI PUSH2 0x39B7 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x39DB JUMPI DUP1 PUSH2 0x39CC DUP9 DUP3 PUSH2 0x397A JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x39B9 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x39F9 JUMPI PUSH2 0x39F9 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xE19 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x3985 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3A1E JUMPI PUSH2 0x3A1E PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3A38 JUMPI PUSH2 0x3A38 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE19 DUP5 DUP3 DUP6 ADD PUSH2 0x39E5 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3A6F JUMPI PUSH2 0x3A6F PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE19 DUP5 DUP5 PUSH2 0x397A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A87 DUP4 DUP4 PUSH2 0x375B JUMP JUMPDEST POP POP PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A99 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 DUP4 ADD DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3ACD JUMPI DUP2 MLOAD PUSH2 0x3ABC DUP9 DUP3 PUSH2 0x3A7B JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x3AA8 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x3AE6 DUP3 DUP6 PUSH2 0x3600 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0xE19 DUP2 DUP5 PUSH2 0x3A8F JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x4 DUP2 LT PUSH2 0x789 JUMPI PUSH2 0x789 PUSH2 0x3AF8 JUMP JUMPDEST DUP1 PUSH2 0x3951 DUP2 PUSH2 0x3B0E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D DUP3 PUSH2 0x3B1E JUMP JUMPDEST PUSH2 0x34B3 DUP2 PUSH2 0x3B28 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x3B4A DUP3 DUP7 PUSH2 0x3600 JUMP JUMPDEST PUSH2 0x3B57 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x3600 JUMP JUMPDEST PUSH2 0xE19 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x3B33 JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x74D JUMPI PUSH2 0x74D PUSH2 0x3839 JUMP JUMPDEST PUSH1 0x9 DUP2 LT PUSH2 0x789 JUMPI PUSH2 0x789 PUSH2 0x3AF8 JUMP JUMPDEST DUP1 PUSH2 0x3951 DUP2 PUSH2 0x3B77 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D DUP3 PUSH2 0x3B87 JUMP JUMPDEST PUSH2 0x34B3 DUP2 PUSH2 0x3B91 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x3BB3 DUP3 DUP6 PUSH2 0x3600 JUMP JUMPDEST PUSH2 0x89D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3B9C JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x3530 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x74D DUP2 PUSH2 0x3BC0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BE8 JUMPI PUSH2 0x3BE8 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE19 DUP5 DUP5 PUSH2 0x3BC8 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x74D JUMPI PUSH2 0x74D PUSH2 0x3839 JUMP JUMPDEST PUSH1 0x2E DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 DUP2 MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x3C07 JUMP JUMPDEST PUSH1 0x7 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH7 0x19195C1BDCDA5D PUSH1 0xCA SHL DUP2 MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x3C65 JUMP JUMPDEST PUSH1 0x29 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4F776E61626C6532537465703A2063616C6C6572206973206E6F742074686520 DUP2 MSTORE PUSH9 0x3732BB9037BBB732B9 PUSH1 0xB9 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x3C96 JUMP JUMPDEST PUSH1 0x4 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH4 0x1B5A5B9D PUSH1 0xE2 SHL DUP2 MSTORE SWAP2 POP PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x3CEC JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 DUP2 MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x3D17 JUMP JUMPDEST PUSH1 0x8 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH8 0x7769746864726177 PUSH1 0xC0 SHL DUP2 MSTORE SWAP2 POP PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x3D69 JUMP JUMPDEST PUSH1 0x6 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH6 0x72656465656D PUSH1 0xD0 SHL DUP2 MSTORE SWAP2 POP PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x3D98 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x74D DUP2 PUSH2 0x3578 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3DE5 JUMPI PUSH2 0x3DE5 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE19 DUP5 DUP5 PUSH2 0x3DC5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND PUSH2 0x74D JUMP JUMPDEST PUSH2 0x34B3 DUP2 PUSH2 0x3DF1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x74D DUP3 DUP5 PUSH2 0x3DFC JUMP JUMPDEST DUP1 DUP3 JUMPDEST PUSH1 0x1 DUP6 GT ISZERO PUSH2 0x3E52 JUMPI DUP1 DUP7 DIV DUP2 GT ISZERO PUSH2 0x3E31 JUMPI PUSH2 0x3E31 PUSH2 0x3839 JUMP JUMPDEST PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x3E3F JUMPI SWAP1 DUP2 MUL SWAP1 JUMPDEST DUP1 MUL PUSH2 0x3E4B DUP6 PUSH1 0x1 SHR SWAP1 JUMP JUMPDEST SWAP5 POP PUSH2 0x3E16 JUMP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3E6A JUMPI POP PUSH1 0x1 PUSH2 0x89D JUMP JUMPDEST DUP2 PUSH2 0x3E77 JUMPI POP PUSH1 0x0 PUSH2 0x89D JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x3E8D JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x3E97 JUMPI PUSH2 0x3EC4 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x89D JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x3EA8 JUMPI PUSH2 0x3EA8 PUSH2 0x3839 JUMP JUMPDEST DUP4 PUSH1 0x2 EXP SWAP2 POP DUP5 DUP3 GT ISZERO PUSH2 0x3EBE JUMPI PUSH2 0x3EBE PUSH2 0x3839 JUMP JUMPDEST POP PUSH2 0x89D JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x3EF7 JUMPI POP DUP2 DUP2 EXP DUP4 DUP2 GT ISZERO PUSH2 0x3EF2 JUMPI PUSH2 0x3EF2 PUSH2 0x3839 JUMP JUMPDEST PUSH2 0x89D JUMP JUMPDEST PUSH2 0x3F04 DUP5 DUP5 DUP5 PUSH1 0x1 PUSH2 0x3E13 JUMP JUMPDEST SWAP3 POP SWAP1 POP DUP2 DUP5 DIV DUP2 GT ISZERO PUSH2 0x3F1A JUMPI PUSH2 0x3F1A PUSH2 0x3839 JUMP JUMPDEST MUL SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP4 AND SWAP3 POP PUSH2 0x89D PUSH1 0x0 NOT DUP5 DUP5 PUSH2 0x3E5B JUMP JUMPDEST PUSH1 0x24 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 DUP2 MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x3F36 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 DUP2 MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x3F87 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 SWAP2 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x3FD6 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x696E76616C696420616365737320636F6E74726F6C206D616E61676572206164 DUP2 MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x4018 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4078 DUP3 DUP6 PUSH2 0x3600 JUMP JUMPDEST PUSH2 0x89D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3600 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4093 DUP3 DUP6 PUSH2 0x3600 JUMP JUMPDEST PUSH2 0x89D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x34B1 JUMP JUMPDEST PUSH1 0x1D DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 DUP2 MSTORE SWAP2 POP PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x40A0 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 DUP2 MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x40E4 JUMP JUMPDEST PUSH1 0x23 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 DUP2 MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x4136 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 DUP2 MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x4186 JUMP JUMPDEST PUSH1 0xFF DUP2 AND PUSH2 0x3530 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x74D DUP2 PUSH2 0x41D9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4202 JUMPI PUSH2 0x4202 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE19 DUP5 DUP5 PUSH2 0x41E2 JUMP JUMPDEST PUSH1 0xFF SWAP2 DUP3 AND SWAP2 SWAP1 DUP2 AND SWAP1 DUP3 DUP3 SUB SWAP1 DUP2 GT ISZERO PUSH2 0x74D JUMPI PUSH2 0x74D PUSH2 0x3839 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4093 DUP3 DUP6 PUSH2 0x34B1 JUMP JUMPDEST PUSH1 0x2B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 DUP2 MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x4239 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x436F6D7074726F6C6C65723A20496E76616C6964206D61784C6F6F70734C696D DUP2 MSTORE PUSH2 0x1A5D PUSH1 0xF2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x4291 JUMP JUMPDEST PUSH1 0x1F DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 DUP2 MSTORE SWAP2 POP PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x42E0 JUMP JUMPDEST PUSH1 0x1B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x76546F6B656E735265636569766564206174205F6465706F7369740000000000 DUP2 MSTORE SWAP2 POP PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x4324 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4376 DUP3 DUP6 PUSH2 0x3600 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0xE19 DUP2 DUP5 PUSH2 0x34EB JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4396 DUP3 DUP7 PUSH2 0x3600 JUMP JUMPDEST PUSH2 0x43A3 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x3600 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x2CBD DUP2 DUP5 PUSH2 0x34EB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH32 0x61637475616C56546F6B656E73206174205F6265666F72655769746864726177 SWAP2 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x43B5 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4411 JUMPI PUSH2 0x4411 PUSH2 0x38F7 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4430 PUSH2 0x3993 DUP5 PUSH2 0x43F7 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x444B JUMPI PUSH2 0x444B PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4456 DUP5 DUP3 DUP6 PUSH2 0x34C7 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4472 JUMPI PUSH2 0x4472 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xE19 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x4422 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4497 JUMPI PUSH2 0x4497 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x44B1 JUMPI PUSH2 0x44B1 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE19 DUP5 DUP3 DUP6 ADD PUSH2 0x445E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x44C7 DUP3 MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x44D5 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x34C7 JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH22 0x22A9219A1B191B16ABB930B83832B2102B32B73AB99 PUSH1 0x55 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x16 DUP3 ADD JUMPDEST SWAP2 POP PUSH2 0x89D DUP3 DUP5 PUSH2 0x44BD JUMP JUMPDEST PUSH5 0x3B1A1B191B PUSH1 0xD9 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x5 DUP3 ADD PUSH2 0x4502 JUMP JUMPDEST PUSH1 0x2A DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E DUP2 MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x4524 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4589 DUP3 DUP7 PUSH2 0x3600 JUMP JUMPDEST PUSH2 0x4596 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x3600 JUMP JUMPDEST PUSH2 0xE19 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x34B1 JUMP JUMPDEST PUSH1 0x1F DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 DUP2 MSTORE SWAP2 POP PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x45A3 JUMP JUMPDEST PUSH1 0x21 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A206275726E2066726F6D20746865207A65726F20616464726573 DUP2 MSTORE PUSH1 0x73 PUSH1 0xF8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x45E7 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A206275726E20616D6F756E7420657863656564732062616C616E DUP2 MSTORE PUSH2 0x6365 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x4635 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D PUSH2 0x3736 DUP4 DUP2 JUMP JUMPDEST PUSH2 0x4699 DUP4 PUSH2 0x4684 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 NOT PUSH1 0x8 SWAP5 SWAP1 SWAP5 MUL SWAP4 DUP5 SHL NOT AND SWAP3 SHL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D6A DUP2 DUP5 DUP5 PUSH2 0x4690 JUMP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x87A JUMPI PUSH2 0x46D4 PUSH1 0x0 DUP3 PUSH2 0x46B4 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x46C1 JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x1D6A JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH1 0x20 PUSH1 0x1F DUP6 ADD DIV DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x4703 JUMPI POP DUP1 JUMPDEST PUSH2 0xBC0 PUSH1 0x20 PUSH1 0x1F DUP7 ADD DIV DUP4 ADD DUP3 PUSH2 0x46C1 JUMP JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x472F JUMPI PUSH2 0x472F PUSH2 0x38F7 JUMP JUMPDEST PUSH2 0x4739 DUP3 SLOAD PUSH2 0x38AE JUMP JUMPDEST PUSH2 0x4744 DUP3 DUP3 DUP6 PUSH2 0x46DC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x4778 JUMPI PUSH1 0x0 DUP5 ISZERO PUSH2 0x4760 JUMPI POP DUP6 DUP3 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x8 DUP7 MUL SHR NOT DUP2 AND PUSH1 0x2 DUP7 MUL OR DUP7 SSTORE POP PUSH2 0x47D1 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x47A8 JUMPI DUP9 DUP6 ADD MLOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x4788 JUMP JUMPDEST DUP7 DUP4 LT ISZERO PUSH2 0x47C4 JUMPI DUP5 DUP10 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x1F DUP10 AND PUSH1 0x8 MUL SHR NOT AND DUP3 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x2 DUP9 MUL ADD DUP9 SSTORE POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH21 0x4D6174683A206D756C446976206F766572666C6F77 PUSH1 0x58 SHL DUP2 MSTORE SWAP2 POP PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x47D9 JUMP JUMPDEST PUSH1 0x36 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F DUP2 MSTORE PUSH22 0x20746F206E6F6E2D7A65726F20616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x4815 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x89D DUP3 DUP5 PUSH2 0x44BD JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F DUP2 MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x4884 JUMP JUMPDEST PUSH1 0x1D DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 DUP2 MSTORE SWAP2 POP PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x48D7 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP5 0xD0 SMOD SWAP14 TLOAD TLOAD 0x4E SWAP4 EXTCODECOPY 0x1F PUSH21 0x396514BA6540D1C30D307D4C8D004E4E4360338870 PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ","sourceMap":"1707:21011:52:-:0;;;4626:177;;;;;;;;;-1:-1:-1;4774:22:52;:20;:22::i;:::-;1707:21011;;5939:280:3;6007:13;;;;;;;6006:14;5998:66;;;;-1:-1:-1;;;5998:66:3;;;;;;;:::i;:::-;;;;;;;;;6078:12;;6094:15;6078:12;;;:31;6074:139;;6125:12;:30;;-1:-1:-1;;6125:30:3;6140:15;6125:30;;;;;;6174:28;;;;;;;:::i;:::-;;;;;;;;6074:139;5939:280::o;786:419:69:-;990:2;1003:47;;;975:18;;1067:131;975:18;641:2;113:19;;322:34;165:4;156:14;;299:58;-1:-1:-1;;;374:15:69;;;367:34;762:12;;;414:366;1067:131;1059:139;786:419;-1:-1:-1;;786:419:69:o;1421:214::-;1286:4;1275:16;;1374:35;;1548:2;1533:18;;1561:67;1303:112;1421:214;1707:21011:52;;;;;;"},"deployedBytecode":{"functionDebugData":{"@__AccessControlled_init_4931":{"entryPoint":8059,"id":4931,"parameterSlots":1,"returnSlots":0},"@__AccessControlled_init_unchained_4943":{"entryPoint":11655,"id":4943,"parameterSlots":1,"returnSlots":0},"@__ERC20_init_709":{"entryPoint":11225,"id":709,"parameterSlots":2,"returnSlots":0},"@__ERC20_init_unchained_727":{"entryPoint":12346,"id":727,"parameterSlots":2,"returnSlots":0},"@__ERC4626_init_1389":{"entryPoint":11274,"id":1389,"parameterSlots":1,"returnSlots":0},"@__ERC4626_init_unchained_1417":{"entryPoint":12410,"id":1417,"parameterSlots":1,"returnSlots":0},"@__Ownable2Step_init_26":{"entryPoint":11608,"id":26,"parameterSlots":0,"returnSlots":0},"@__Ownable_init_unchained_145":{"entryPoint":12791,"id":145,"parameterSlots":0,"returnSlots":0},"@__ReentrancyGuard_init_600":{"entryPoint":11322,"id":600,"parameterSlots":0,"returnSlots":0},"@__ReentrancyGuard_init_unchained_610":{"entryPoint":12543,"id":610,"parameterSlots":0,"returnSlots":0},"@_afterTokenTransfer_1268":{"entryPoint":null,"id":1268,"parameterSlots":3,"returnSlots":0},"@_approve_1203":{"entryPoint":7058,"id":1203,"parameterSlots":3,"returnSlots":0},"@_beforeRedeem_17860":{"entryPoint":10384,"id":17860,"parameterSlots":1,"returnSlots":1},"@_beforeTokenTransfer_1257":{"entryPoint":null,"id":1257,"parameterSlots":3,"returnSlots":0},"@_beforeWithdraw_17965":{"entryPoint":9465,"id":17965,"parameterSlots":1,"returnSlots":2},"@_burn_1158":{"entryPoint":12163,"id":1158,"parameterSlots":2,"returnSlots":0},"@_callOptionalReturn_2391":{"entryPoint":11462,"id":2391,"parameterSlots":2,"returnSlots":0},"@_checkAccessAllowed_5034":{"entryPoint":9311,"id":5034,"parameterSlots":1,"returnSlots":0},"@_checkOwner_176":{"entryPoint":7281,"id":176,"parameterSlots":0,"returnSlots":0},"@_convertToAssets_1905":{"entryPoint":6993,"id":1905,"parameterSlots":2,"returnSlots":1},"@_convertToShares_1877":{"entryPoint":7225,"id":1877,"parameterSlots":2,"returnSlots":1},"@_decimalsOffset_18174":{"entryPoint":7849,"id":18174,"parameterSlots":0,"returnSlots":1},"@_deposit_18157":{"entryPoint":8379,"id":18157,"parameterSlots":4,"returnSlots":0},"@_ensureMaxLoops_10334":{"entryPoint":7977,"id":10334,"parameterSlots":1,"returnSlots":0},"@_generateVaultName_18195":{"entryPoint":10963,"id":18195,"parameterSlots":1,"returnSlots":1},"@_generateVaultSymbol_18216":{"entryPoint":11105,"id":18216,"parameterSlots":1,"returnSlots":1},"@_mintVTokens_18000":{"entryPoint":11809,"id":18000,"parameterSlots":1,"returnSlots":0},"@_mint_1086":{"entryPoint":12013,"id":1086,"parameterSlots":2,"returnSlots":0},"@_msgSender_2798":{"entryPoint":null,"id":2798,"parameterSlots":0,"returnSlots":1},"@_nonReentrantAfter_644":{"entryPoint":9303,"id":644,"parameterSlots":0,"returnSlots":0},"@_nonReentrantBefore_636":{"entryPoint":8336,"id":636,"parameterSlots":0,"returnSlots":0},"@_revert_2769":{"entryPoint":null,"id":2769,"parameterSlots":2,"returnSlots":0},"@_setAccessControlManager_5004":{"entryPoint":7323,"id":5004,"parameterSlots":1,"returnSlots":0},"@_setMaxLoopsLimit_10317":{"entryPoint":8115,"id":10317,"parameterSlots":1,"returnSlots":0},"@_setRewardRecipient_18020":{"entryPoint":8208,"id":18020,"parameterSlots":1,"returnSlots":0},"@_spendAllowance_1246":{"entryPoint":7535,"id":1246,"parameterSlots":3,"returnSlots":0},"@_transferOwnership_233":{"entryPoint":11694,"id":233,"parameterSlots":1,"returnSlots":0},"@_transferOwnership_78":{"entryPoint":8311,"id":78,"parameterSlots":1,"returnSlots":0},"@_transfer_1029":{"entryPoint":7609,"id":1029,"parameterSlots":3,"returnSlots":0},"@_tryGetAssetDecimals_1484":{"entryPoint":13019,"id":1484,"parameterSlots":1,"returnSlots":2},"@_withdraw_1989":{"entryPoint":10221,"id":1989,"parameterSlots":5,"returnSlots":0},"@acceptOwnership_100":{"entryPoint":4172,"id":100,"parameterSlots":0,"returnSlots":0},"@accessControlManager_4966":{"entryPoint":null,"id":4966,"parameterSlots":0,"returnSlots":1},"@allowance_824":{"entryPoint":6766,"id":824,"parameterSlots":2,"returnSlots":1},"@approve_849":{"entryPoint":1875,"id":849,"parameterSlots":2,"returnSlots":1},"@asset_1512":{"entryPoint":null,"id":1512,"parameterSlots":0,"returnSlots":1},"@balanceOf_781":{"entryPoint":null,"id":781,"parameterSlots":1,"returnSlots":1},"@claimRewards_17228":{"entryPoint":2245,"id":17228,"parameterSlots":0,"returnSlots":0},"@comptroller_16894":{"entryPoint":null,"id":16894,"parameterSlots":0,"returnSlots":0},"@convertToAssets_1562":{"entryPoint":1856,"id":1562,"parameterSlots":1,"returnSlots":1},"@convertToShares_1545":{"entryPoint":5799,"id":1545,"parameterSlots":1,"returnSlots":1},"@decimals_1499":{"entryPoint":2212,"id":1499,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_952":{"entryPoint":4598,"id":952,"parameterSlots":2,"returnSlots":1},"@deposit_17343":{"entryPoint":3827,"id":17343,"parameterSlots":2,"returnSlots":1},"@ensureNonzeroAddress_16359":{"entryPoint":8020,"id":16359,"parameterSlots":1,"returnSlots":0},"@functionCallWithValue_2594":{"entryPoint":13239,"id":2594,"parameterSlots":4,"returnSlots":1},"@functionCall_2530":{"entryPoint":12776,"id":2530,"parameterSlots":3,"returnSlots":1},"@increaseAllowance_911":{"entryPoint":3015,"id":911,"parameterSlots":2,"returnSlots":1},"@initialize2_17264":{"entryPoint":3617,"id":17264,"parameterSlots":4,"returnSlots":0},"@initialize_17005":{"entryPoint":5268,"id":17005,"parameterSlots":1,"returnSlots":0},"@isContract_2458":{"entryPoint":null,"id":2458,"parameterSlots":1,"returnSlots":1},"@maxDeposit_17629":{"entryPoint":3049,"id":17629,"parameterSlots":1,"returnSlots":1},"@maxLoopsLimit_10271":{"entryPoint":null,"id":10271,"parameterSlots":0,"returnSlots":0},"@maxMint_17648":{"entryPoint":5784,"id":17648,"parameterSlots":1,"returnSlots":1},"@maxRedeem_17780":{"entryPoint":6284,"id":17780,"parameterSlots":1,"returnSlots":1},"@maxWithdraw_17712":{"entryPoint":5812,"id":17712,"parameterSlots":1,"returnSlots":1},"@mint_17410":{"entryPoint":4296,"id":17410,"parameterSlots":2,"returnSlots":1},"@mulDiv_3035":{"entryPoint":12582,"id":3035,"parameterSlots":3,"returnSlots":1},"@mulDiv_3079":{"entryPoint":11369,"id":3079,"parameterSlots":4,"returnSlots":1},"@name_737":{"entryPoint":1710,"id":737,"parameterSlots":0,"returnSlots":1},"@owner_162":{"entryPoint":null,"id":162,"parameterSlots":0,"returnSlots":1},"@pendingOwner_41":{"entryPoint":null,"id":41,"parameterSlots":0,"returnSlots":1},"@previewDeposit_1644":{"entryPoint":null,"id":1644,"parameterSlots":1,"returnSlots":1},"@previewMint_1661":{"entryPoint":4684,"id":1661,"parameterSlots":1,"returnSlots":1},"@previewRedeem_1695":{"entryPoint":null,"id":1695,"parameterSlots":1,"returnSlots":1},"@previewWithdraw_1678":{"entryPoint":1899,"id":1678,"parameterSlots":1,"returnSlots":1},"@redeem_17551":{"entryPoint":4971,"id":17551,"parameterSlots":3,"returnSlots":1},"@renounceOwnership_190":{"entryPoint":4152,"id":190,"parameterSlots":0,"returnSlots":0},"@rewardRecipient_16897":{"entryPoint":null,"id":16897,"parameterSlots":0,"returnSlots":0},"@safeApprove_2168":{"entryPoint":12839,"id":2168,"parameterSlots":3,"returnSlots":0},"@safeTransferFrom_2124":{"entryPoint":11776,"id":2124,"parameterSlots":4,"returnSlots":0},"@safeTransfer_2097":{"entryPoint":7444,"id":2097,"parameterSlots":3,"returnSlots":0},"@setAccessControlManager_4956":{"entryPoint":1912,"id":4956,"parameterSlots":1,"returnSlots":0},"@setMaxLoopsLimit_17020":{"entryPoint":4225,"id":17020,"parameterSlots":1,"returnSlots":0},"@setRewardRecipient_17035":{"entryPoint":6809,"id":17035,"parameterSlots":1,"returnSlots":0},"@sweepToken_17082":{"entryPoint":1932,"id":17082,"parameterSlots":1,"returnSlots":0},"@symbol_747":{"entryPoint":4583,"id":747,"parameterSlots":0,"returnSlots":1},"@totalAssets_17574":{"entryPoint":1440,"id":17574,"parameterSlots":0,"returnSlots":1},"@totalSupply_767":{"entryPoint":null,"id":767,"parameterSlots":0,"returnSlots":1},"@transferFrom_882":{"entryPoint":2174,"id":882,"parameterSlots":3,"returnSlots":1},"@transferOwnership_61":{"entryPoint":6880,"id":61,"parameterSlots":1,"returnSlots":0},"@transfer_806":{"entryPoint":4670,"id":806,"parameterSlots":2,"returnSlots":1},"@vToken_16890":{"entryPoint":null,"id":16890,"parameterSlots":0,"returnSlots":0},"@verifyCallResultFromTarget_2725":{"entryPoint":null,"id":2725,"parameterSlots":4,"returnSlots":1},"@withdraw_17477":{"entryPoint":4697,"id":17477,"parameterSlots":3,"returnSlots":1},"abi_decode_available_length_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory":{"entryPoint":14725,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_available_length_t_string_memory_ptr_fromMemory":{"entryPoint":17442,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_t_address":{"entryPoint":13697,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_address_fromMemory":{"entryPoint":15813,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory":{"entryPoint":14821,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_bool_fromMemory":{"entryPoint":15304,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_ComptrollerInterface_$9353_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_IERC20Upgradeable_$1352":{"entryPoint":13867,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_IERC20Upgradeable_$1352_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_RewardsDistributor_$12324_fromMemory":{"entryPoint":14714,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_string_memory_ptr_fromMemory":{"entryPoint":17502,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_uint256":{"entryPoint":13627,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_uint256_fromMemory":{"entryPoint":14349,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_uint8_fromMemory":{"entryPoint":16866,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":13791,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":15824,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":14315,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":13911,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_address":{"entryPoint":14014,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":13708,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory":{"entryPoint":14857,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":15315,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_ComptrollerInterface_$9353_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IERC20Upgradeable_$1352":{"entryPoint":13878,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IERC20Upgradeable_$1352_fromMemory":{"entryPoint":14938,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_string_memory_ptr_fromMemory":{"entryPoint":17538,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":13638,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":14360,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_address":{"entryPoint":14194,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256t_addresst_address":{"entryPoint":14245,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint8_fromMemory":{"entryPoint":16877,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encodeUpdatedPos_t_contract$_VToken_$15506_to_t_address":{"entryPoint":14971,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_address_to_t_address_fromStack":{"entryPoint":13824,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack":{"entryPoint":14991,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_bool_to_t_bool_fromStack":{"entryPoint":13769,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_IComptroller_$16789_to_t_address_fromStack":{"entryPoint":14171,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_VToken_$15506_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_enum$_Action_$9148_to_t_uint8_fromStack":{"entryPoint":15260,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_enum$_IncomeType_$16797_to_t_uint8_fromStack":{"entryPoint":15155,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_rational_1_by_1_to_t_uint8_fromStack":{"entryPoint":15868,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack":{"entryPoint":13547,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":17597,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f_to_t_string_memory_ptr_fromStack":{"entryPoint":16694,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd_to_t_string_memory_ptr_fromStack":{"entryPoint":17973,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack":{"entryPoint":15510,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack":{"entryPoint":17041,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029_to_t_string_memory_ptr_fromStack":{"entryPoint":16263,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609_to_t_string_memory_ptr_fromStack":{"entryPoint":15768,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe_to_t_string_memory_ptr_fromStack":{"entryPoint":16544,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6_to_t_string_memory_ptr_fromStack":{"entryPoint":16774,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526_to_t_string_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01_to_t_string_memory_ptr_fromStack":{"entryPoint":15461,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack":{"entryPoint":16408,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack":{"entryPoint":18564,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137_to_t_string_memory_ptr_fromStack":{"entryPoint":17188,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack":{"entryPoint":15367,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f_to_t_string_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77_to_t_string_memory_ptr_fromStack":{"entryPoint":15721,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack":{"entryPoint":16342,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f_to_t_string_memory_ptr_fromStack":{"entryPoint":17895,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea_to_t_string_memory_ptr_fromStack":{"entryPoint":16612,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208_to_t_string_memory_ptr_fromStack":{"entryPoint":16182,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack":{"entryPoint":18647,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack":{"entryPoint":16953,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851_to_t_string_memory_ptr_fromStack":{"entryPoint":18393,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354_to_t_string_memory_ptr_fromStack":{"entryPoint":15596,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack":{"entryPoint":17700,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619_to_t_string_memory_ptr_fromStack":{"entryPoint":17120,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25_to_t_string_memory_ptr_fromStack":{"entryPoint":18453,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8_to_t_string_memory_ptr_fromStack":{"entryPoint":15639,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e_to_t_string_memory_ptr_fromStack":{"entryPoint":17827,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e_to_t_string_memory_ptr_fromStack":{"entryPoint":17333,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_uint256_to_t_uint256_fromStack":{"entryPoint":13489,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_uint8_to_t_uint8_fromStack":{"entryPoint":13991,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":18552,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":17678,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":17631,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":13833,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":16490,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_enum$_IncomeType_$16797__to_t_address_t_address_t_uint8__fromStack_reversed":{"entryPoint":15164,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_string_memory_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed":{"entryPoint":17288,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":17787,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr__to_t_address_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":15064,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_enum$_Action_$9148__to_t_address_t_uint8__fromStack_reversed":{"entryPoint":15269,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_string_memory_ptr__to_t_address_t_string_memory_ptr__fromStack_reversed":{"entryPoint":17256,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":16517,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":13777,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IAccessControlManagerV8_$5080__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IComptroller_$16789__to_t_address__fromStack_reversed":{"entryPoint":14180,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_VToken_$15506__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed":{"entryPoint":15877,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":13597,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":16758,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":18036,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15580,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":17104,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":16326,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15797,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":16596,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":16841,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15494,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":16474,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":18631,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":17240,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15445,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15752,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":16392,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":17957,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":16678,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":16247,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":18699,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":17025,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":18437,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15623,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":17771,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":17172,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":18536,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15705,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":17879,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":17383,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":13497,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":16939,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":14000,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":14650,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr":{"entryPoint":14678,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_t_string_memory_ptr":{"entryPoint":17399,"id":null,"parameterSlots":1,"returnSlots":1},"array_dataslot_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_dataslot_t_string_storage":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_bytes_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_string_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_nextElement_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":15204,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint8":{"entryPoint":14554,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":14468,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":15891,"id":null,"parameterSlots":4,"returnSlots":2},"checked_exp_t_uint256_t_uint8":{"entryPoint":16161,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":15963,"id":null,"parameterSlots":3,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":14415,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":15348,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint8":{"entryPoint":16910,"id":null,"parameterSlots":2,"returnSlots":1},"clean_up_bytearray_end_slots_t_string_storage":{"entryPoint":18140,"id":null,"parameterSlots":3,"returnSlots":0},"cleanup_t_address":{"entryPoint":13671,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_bool":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_ComptrollerInterface_$9353":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_IERC20Upgradeable_$1352":{"entryPoint":13847,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_RewardsDistributor_$12324":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_enum$_Action_$9148":{"entryPoint":15239,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_enum$_IncomeType_$16797":{"entryPoint":15134,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_rational_1_by_1":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"clear_storage_range_t_bytes1":{"entryPoint":18113,"id":null,"parameterSlots":2,"returnSlots":0},"convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_IComptroller_$16789_to_t_address":{"entryPoint":14160,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_VToken_$15506_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_enum$_Action_$9148_to_t_uint8":{"entryPoint":15249,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_enum$_IncomeType_$16797_to_t_uint8":{"entryPoint":15144,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_rational_1_by_1_to_t_uint8":{"entryPoint":15857,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint160_to_t_address":{"entryPoint":14149,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint160_to_t_uint160":{"entryPoint":14114,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint256_to_t_uint256":{"entryPoint":18052,"id":null,"parameterSlots":1,"returnSlots":1},"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage":{"entryPoint":18197,"id":null,"parameterSlots":2,"returnSlots":0},"copy_memory_to_memory_with_cleanup":{"entryPoint":13511,"id":null,"parameterSlots":3,"returnSlots":0},"divide_by_32_ceil":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"extract_byte_array_length":{"entryPoint":14510,"id":null,"parameterSlots":1,"returnSlots":1},"extract_used_part_and_set_length_of_short_byte_array":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":14605,"id":null,"parameterSlots":2,"returnSlots":0},"identity":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mask_bytes_dynamic":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":14393,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":14446,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":15096,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x22":{"entryPoint":14488,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":14916,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":14583,"id":null,"parameterSlots":0,"returnSlots":0},"prepare_store_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"round_up_to_mul_of_32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"shift_left_dynamic":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"shift_right_1_unsigned":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"shift_right_unsigned_dynamic":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"storage_set_to_zero_t_uint256":{"entryPoint":18100,"id":null,"parameterSlots":2,"returnSlots":0},"store_literal_in_memory_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"update_byte_slice_dynamic32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"update_storage_value_t_uint256_to_t_uint256":{"entryPoint":18064,"id":null,"parameterSlots":3,"returnSlots":0},"validator_assert_t_enum$_Action_$9148":{"entryPoint":15223,"id":null,"parameterSlots":1,"returnSlots":0},"validator_assert_t_enum$_IncomeType_$16797":{"entryPoint":15118,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_address":{"entryPoint":13688,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_bool":{"entryPoint":15296,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_ComptrollerInterface_$9353":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_IERC20Upgradeable_$1352":{"entryPoint":13858,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_RewardsDistributor_$12324":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_uint256":{"entryPoint":13614,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_uint8":{"entryPoint":16857,"id":null,"parameterSlots":1,"returnSlots":0},"zero_value_for_split_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1}},"generatedSources":[{"ast":{"nativeSrc":"0:69107:69","nodeType":"YulBlock","src":"0:69107:69","statements":[{"body":{"nativeSrc":"52:32:69","nodeType":"YulBlock","src":"52:32:69","statements":[{"nativeSrc":"62:16:69","nodeType":"YulAssignment","src":"62:16:69","value":{"name":"value","nativeSrc":"73:5:69","nodeType":"YulIdentifier","src":"73:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"62:7:69","nodeType":"YulIdentifier","src":"62:7:69"}]}]},"name":"cleanup_t_uint256","nativeSrc":"7:77:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"34:5:69","nodeType":"YulTypedName","src":"34:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"44:7:69","nodeType":"YulTypedName","src":"44:7:69","type":""}],"src":"7:77:69"},{"body":{"nativeSrc":"155:53:69","nodeType":"YulBlock","src":"155:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"172:3:69","nodeType":"YulIdentifier","src":"172:3:69"},{"arguments":[{"name":"value","nativeSrc":"195:5:69","nodeType":"YulIdentifier","src":"195:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"177:17:69","nodeType":"YulIdentifier","src":"177:17:69"},"nativeSrc":"177:24:69","nodeType":"YulFunctionCall","src":"177:24:69"}],"functionName":{"name":"mstore","nativeSrc":"165:6:69","nodeType":"YulIdentifier","src":"165:6:69"},"nativeSrc":"165:37:69","nodeType":"YulFunctionCall","src":"165:37:69"},"nativeSrc":"165:37:69","nodeType":"YulExpressionStatement","src":"165:37:69"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"90:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"143:5:69","nodeType":"YulTypedName","src":"143:5:69","type":""},{"name":"pos","nativeSrc":"150:3:69","nodeType":"YulTypedName","src":"150:3:69","type":""}],"src":"90:118:69"},{"body":{"nativeSrc":"312:124:69","nodeType":"YulBlock","src":"312:124:69","statements":[{"nativeSrc":"322:26:69","nodeType":"YulAssignment","src":"322:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"334:9:69","nodeType":"YulIdentifier","src":"334:9:69"},{"kind":"number","nativeSrc":"345:2:69","nodeType":"YulLiteral","src":"345:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"330:3:69","nodeType":"YulIdentifier","src":"330:3:69"},"nativeSrc":"330:18:69","nodeType":"YulFunctionCall","src":"330:18:69"},"variableNames":[{"name":"tail","nativeSrc":"322:4:69","nodeType":"YulIdentifier","src":"322:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"402:6:69","nodeType":"YulIdentifier","src":"402:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"415:9:69","nodeType":"YulIdentifier","src":"415:9:69"},{"kind":"number","nativeSrc":"426:1:69","nodeType":"YulLiteral","src":"426:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"411:3:69","nodeType":"YulIdentifier","src":"411:3:69"},"nativeSrc":"411:17:69","nodeType":"YulFunctionCall","src":"411:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"358:43:69","nodeType":"YulIdentifier","src":"358:43:69"},"nativeSrc":"358:71:69","nodeType":"YulFunctionCall","src":"358:71:69"},"nativeSrc":"358:71:69","nodeType":"YulExpressionStatement","src":"358:71:69"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nativeSrc":"214:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"284:9:69","nodeType":"YulTypedName","src":"284:9:69","type":""},{"name":"value0","nativeSrc":"296:6:69","nodeType":"YulTypedName","src":"296:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"307:4:69","nodeType":"YulTypedName","src":"307:4:69","type":""}],"src":"214:222:69"},{"body":{"nativeSrc":"501:40:69","nodeType":"YulBlock","src":"501:40:69","statements":[{"nativeSrc":"512:22:69","nodeType":"YulAssignment","src":"512:22:69","value":{"arguments":[{"name":"value","nativeSrc":"528:5:69","nodeType":"YulIdentifier","src":"528:5:69"}],"functionName":{"name":"mload","nativeSrc":"522:5:69","nodeType":"YulIdentifier","src":"522:5:69"},"nativeSrc":"522:12:69","nodeType":"YulFunctionCall","src":"522:12:69"},"variableNames":[{"name":"length","nativeSrc":"512:6:69","nodeType":"YulIdentifier","src":"512:6:69"}]}]},"name":"array_length_t_string_memory_ptr","nativeSrc":"442:99:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"484:5:69","nodeType":"YulTypedName","src":"484:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"494:6:69","nodeType":"YulTypedName","src":"494:6:69","type":""}],"src":"442:99:69"},{"body":{"nativeSrc":"643:73:69","nodeType":"YulBlock","src":"643:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"660:3:69","nodeType":"YulIdentifier","src":"660:3:69"},{"name":"length","nativeSrc":"665:6:69","nodeType":"YulIdentifier","src":"665:6:69"}],"functionName":{"name":"mstore","nativeSrc":"653:6:69","nodeType":"YulIdentifier","src":"653:6:69"},"nativeSrc":"653:19:69","nodeType":"YulFunctionCall","src":"653:19:69"},"nativeSrc":"653:19:69","nodeType":"YulExpressionStatement","src":"653:19:69"},{"nativeSrc":"681:29:69","nodeType":"YulAssignment","src":"681:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"700:3:69","nodeType":"YulIdentifier","src":"700:3:69"},{"kind":"number","nativeSrc":"705:4:69","nodeType":"YulLiteral","src":"705:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"696:3:69","nodeType":"YulIdentifier","src":"696:3:69"},"nativeSrc":"696:14:69","nodeType":"YulFunctionCall","src":"696:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"681:11:69","nodeType":"YulIdentifier","src":"681:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"547:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"615:3:69","nodeType":"YulTypedName","src":"615:3:69","type":""},{"name":"length","nativeSrc":"620:6:69","nodeType":"YulTypedName","src":"620:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"631:11:69","nodeType":"YulTypedName","src":"631:11:69","type":""}],"src":"547:169:69"},{"body":{"nativeSrc":"784:186:69","nodeType":"YulBlock","src":"784:186:69","statements":[{"nativeSrc":"795:10:69","nodeType":"YulVariableDeclaration","src":"795:10:69","value":{"kind":"number","nativeSrc":"804:1:69","nodeType":"YulLiteral","src":"804:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"799:1:69","nodeType":"YulTypedName","src":"799:1:69","type":""}]},{"body":{"nativeSrc":"864:63:69","nodeType":"YulBlock","src":"864:63:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"889:3:69","nodeType":"YulIdentifier","src":"889:3:69"},{"name":"i","nativeSrc":"894:1:69","nodeType":"YulIdentifier","src":"894:1:69"}],"functionName":{"name":"add","nativeSrc":"885:3:69","nodeType":"YulIdentifier","src":"885:3:69"},"nativeSrc":"885:11:69","nodeType":"YulFunctionCall","src":"885:11:69"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"908:3:69","nodeType":"YulIdentifier","src":"908:3:69"},{"name":"i","nativeSrc":"913:1:69","nodeType":"YulIdentifier","src":"913:1:69"}],"functionName":{"name":"add","nativeSrc":"904:3:69","nodeType":"YulIdentifier","src":"904:3:69"},"nativeSrc":"904:11:69","nodeType":"YulFunctionCall","src":"904:11:69"}],"functionName":{"name":"mload","nativeSrc":"898:5:69","nodeType":"YulIdentifier","src":"898:5:69"},"nativeSrc":"898:18:69","nodeType":"YulFunctionCall","src":"898:18:69"}],"functionName":{"name":"mstore","nativeSrc":"878:6:69","nodeType":"YulIdentifier","src":"878:6:69"},"nativeSrc":"878:39:69","nodeType":"YulFunctionCall","src":"878:39:69"},"nativeSrc":"878:39:69","nodeType":"YulExpressionStatement","src":"878:39:69"}]},"condition":{"arguments":[{"name":"i","nativeSrc":"825:1:69","nodeType":"YulIdentifier","src":"825:1:69"},{"name":"length","nativeSrc":"828:6:69","nodeType":"YulIdentifier","src":"828:6:69"}],"functionName":{"name":"lt","nativeSrc":"822:2:69","nodeType":"YulIdentifier","src":"822:2:69"},"nativeSrc":"822:13:69","nodeType":"YulFunctionCall","src":"822:13:69"},"nativeSrc":"814:113:69","nodeType":"YulForLoop","post":{"nativeSrc":"836:19:69","nodeType":"YulBlock","src":"836:19:69","statements":[{"nativeSrc":"838:15:69","nodeType":"YulAssignment","src":"838:15:69","value":{"arguments":[{"name":"i","nativeSrc":"847:1:69","nodeType":"YulIdentifier","src":"847:1:69"},{"kind":"number","nativeSrc":"850:2:69","nodeType":"YulLiteral","src":"850:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"843:3:69","nodeType":"YulIdentifier","src":"843:3:69"},"nativeSrc":"843:10:69","nodeType":"YulFunctionCall","src":"843:10:69"},"variableNames":[{"name":"i","nativeSrc":"838:1:69","nodeType":"YulIdentifier","src":"838:1:69"}]}]},"pre":{"nativeSrc":"818:3:69","nodeType":"YulBlock","src":"818:3:69","statements":[]},"src":"814:113:69"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"947:3:69","nodeType":"YulIdentifier","src":"947:3:69"},{"name":"length","nativeSrc":"952:6:69","nodeType":"YulIdentifier","src":"952:6:69"}],"functionName":{"name":"add","nativeSrc":"943:3:69","nodeType":"YulIdentifier","src":"943:3:69"},"nativeSrc":"943:16:69","nodeType":"YulFunctionCall","src":"943:16:69"},{"kind":"number","nativeSrc":"961:1:69","nodeType":"YulLiteral","src":"961:1:69","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"936:6:69","nodeType":"YulIdentifier","src":"936:6:69"},"nativeSrc":"936:27:69","nodeType":"YulFunctionCall","src":"936:27:69"},"nativeSrc":"936:27:69","nodeType":"YulExpressionStatement","src":"936:27:69"}]},"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"722:248:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"766:3:69","nodeType":"YulTypedName","src":"766:3:69","type":""},{"name":"dst","nativeSrc":"771:3:69","nodeType":"YulTypedName","src":"771:3:69","type":""},{"name":"length","nativeSrc":"776:6:69","nodeType":"YulTypedName","src":"776:6:69","type":""}],"src":"722:248:69"},{"body":{"nativeSrc":"1024:54:69","nodeType":"YulBlock","src":"1024:54:69","statements":[{"nativeSrc":"1034:38:69","nodeType":"YulAssignment","src":"1034:38:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1052:5:69","nodeType":"YulIdentifier","src":"1052:5:69"},{"kind":"number","nativeSrc":"1059:2:69","nodeType":"YulLiteral","src":"1059:2:69","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"1048:3:69","nodeType":"YulIdentifier","src":"1048:3:69"},"nativeSrc":"1048:14:69","nodeType":"YulFunctionCall","src":"1048:14:69"},{"arguments":[{"kind":"number","nativeSrc":"1068:2:69","nodeType":"YulLiteral","src":"1068:2:69","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"1064:3:69","nodeType":"YulIdentifier","src":"1064:3:69"},"nativeSrc":"1064:7:69","nodeType":"YulFunctionCall","src":"1064:7:69"}],"functionName":{"name":"and","nativeSrc":"1044:3:69","nodeType":"YulIdentifier","src":"1044:3:69"},"nativeSrc":"1044:28:69","nodeType":"YulFunctionCall","src":"1044:28:69"},"variableNames":[{"name":"result","nativeSrc":"1034:6:69","nodeType":"YulIdentifier","src":"1034:6:69"}]}]},"name":"round_up_to_mul_of_32","nativeSrc":"976:102:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1007:5:69","nodeType":"YulTypedName","src":"1007:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"1017:6:69","nodeType":"YulTypedName","src":"1017:6:69","type":""}],"src":"976:102:69"},{"body":{"nativeSrc":"1176:285:69","nodeType":"YulBlock","src":"1176:285:69","statements":[{"nativeSrc":"1186:53:69","nodeType":"YulVariableDeclaration","src":"1186:53:69","value":{"arguments":[{"name":"value","nativeSrc":"1233:5:69","nodeType":"YulIdentifier","src":"1233:5:69"}],"functionName":{"name":"array_length_t_string_memory_ptr","nativeSrc":"1200:32:69","nodeType":"YulIdentifier","src":"1200:32:69"},"nativeSrc":"1200:39:69","nodeType":"YulFunctionCall","src":"1200:39:69"},"variables":[{"name":"length","nativeSrc":"1190:6:69","nodeType":"YulTypedName","src":"1190:6:69","type":""}]},{"nativeSrc":"1248:78:69","nodeType":"YulAssignment","src":"1248:78:69","value":{"arguments":[{"name":"pos","nativeSrc":"1314:3:69","nodeType":"YulIdentifier","src":"1314:3:69"},{"name":"length","nativeSrc":"1319:6:69","nodeType":"YulIdentifier","src":"1319:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"1255:58:69","nodeType":"YulIdentifier","src":"1255:58:69"},"nativeSrc":"1255:71:69","nodeType":"YulFunctionCall","src":"1255:71:69"},"variableNames":[{"name":"pos","nativeSrc":"1248:3:69","nodeType":"YulIdentifier","src":"1248:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1374:5:69","nodeType":"YulIdentifier","src":"1374:5:69"},{"kind":"number","nativeSrc":"1381:4:69","nodeType":"YulLiteral","src":"1381:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1370:3:69","nodeType":"YulIdentifier","src":"1370:3:69"},"nativeSrc":"1370:16:69","nodeType":"YulFunctionCall","src":"1370:16:69"},{"name":"pos","nativeSrc":"1388:3:69","nodeType":"YulIdentifier","src":"1388:3:69"},{"name":"length","nativeSrc":"1393:6:69","nodeType":"YulIdentifier","src":"1393:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"1335:34:69","nodeType":"YulIdentifier","src":"1335:34:69"},"nativeSrc":"1335:65:69","nodeType":"YulFunctionCall","src":"1335:65:69"},"nativeSrc":"1335:65:69","nodeType":"YulExpressionStatement","src":"1335:65:69"},{"nativeSrc":"1409:46:69","nodeType":"YulAssignment","src":"1409:46:69","value":{"arguments":[{"name":"pos","nativeSrc":"1420:3:69","nodeType":"YulIdentifier","src":"1420:3:69"},{"arguments":[{"name":"length","nativeSrc":"1447:6:69","nodeType":"YulIdentifier","src":"1447:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"1425:21:69","nodeType":"YulIdentifier","src":"1425:21:69"},"nativeSrc":"1425:29:69","nodeType":"YulFunctionCall","src":"1425:29:69"}],"functionName":{"name":"add","nativeSrc":"1416:3:69","nodeType":"YulIdentifier","src":"1416:3:69"},"nativeSrc":"1416:39:69","nodeType":"YulFunctionCall","src":"1416:39:69"},"variableNames":[{"name":"end","nativeSrc":"1409:3:69","nodeType":"YulIdentifier","src":"1409:3:69"}]}]},"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"1084:377:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1157:5:69","nodeType":"YulTypedName","src":"1157:5:69","type":""},{"name":"pos","nativeSrc":"1164:3:69","nodeType":"YulTypedName","src":"1164:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"1172:3:69","nodeType":"YulTypedName","src":"1172:3:69","type":""}],"src":"1084:377:69"},{"body":{"nativeSrc":"1585:195:69","nodeType":"YulBlock","src":"1585:195:69","statements":[{"nativeSrc":"1595:26:69","nodeType":"YulAssignment","src":"1595:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"1607:9:69","nodeType":"YulIdentifier","src":"1607:9:69"},{"kind":"number","nativeSrc":"1618:2:69","nodeType":"YulLiteral","src":"1618:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1603:3:69","nodeType":"YulIdentifier","src":"1603:3:69"},"nativeSrc":"1603:18:69","nodeType":"YulFunctionCall","src":"1603:18:69"},"variableNames":[{"name":"tail","nativeSrc":"1595:4:69","nodeType":"YulIdentifier","src":"1595:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1642:9:69","nodeType":"YulIdentifier","src":"1642:9:69"},{"kind":"number","nativeSrc":"1653:1:69","nodeType":"YulLiteral","src":"1653:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1638:3:69","nodeType":"YulIdentifier","src":"1638:3:69"},"nativeSrc":"1638:17:69","nodeType":"YulFunctionCall","src":"1638:17:69"},{"arguments":[{"name":"tail","nativeSrc":"1661:4:69","nodeType":"YulIdentifier","src":"1661:4:69"},{"name":"headStart","nativeSrc":"1667:9:69","nodeType":"YulIdentifier","src":"1667:9:69"}],"functionName":{"name":"sub","nativeSrc":"1657:3:69","nodeType":"YulIdentifier","src":"1657:3:69"},"nativeSrc":"1657:20:69","nodeType":"YulFunctionCall","src":"1657:20:69"}],"functionName":{"name":"mstore","nativeSrc":"1631:6:69","nodeType":"YulIdentifier","src":"1631:6:69"},"nativeSrc":"1631:47:69","nodeType":"YulFunctionCall","src":"1631:47:69"},"nativeSrc":"1631:47:69","nodeType":"YulExpressionStatement","src":"1631:47:69"},{"nativeSrc":"1687:86:69","nodeType":"YulAssignment","src":"1687:86:69","value":{"arguments":[{"name":"value0","nativeSrc":"1759:6:69","nodeType":"YulIdentifier","src":"1759:6:69"},{"name":"tail","nativeSrc":"1768:4:69","nodeType":"YulIdentifier","src":"1768:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"1695:63:69","nodeType":"YulIdentifier","src":"1695:63:69"},"nativeSrc":"1695:78:69","nodeType":"YulFunctionCall","src":"1695:78:69"},"variableNames":[{"name":"tail","nativeSrc":"1687:4:69","nodeType":"YulIdentifier","src":"1687:4:69"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"1467:313:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1557:9:69","nodeType":"YulTypedName","src":"1557:9:69","type":""},{"name":"value0","nativeSrc":"1569:6:69","nodeType":"YulTypedName","src":"1569:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1580:4:69","nodeType":"YulTypedName","src":"1580:4:69","type":""}],"src":"1467:313:69"},{"body":{"nativeSrc":"1826:35:69","nodeType":"YulBlock","src":"1826:35:69","statements":[{"nativeSrc":"1836:19:69","nodeType":"YulAssignment","src":"1836:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"1852:2:69","nodeType":"YulLiteral","src":"1852:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"1846:5:69","nodeType":"YulIdentifier","src":"1846:5:69"},"nativeSrc":"1846:9:69","nodeType":"YulFunctionCall","src":"1846:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"1836:6:69","nodeType":"YulIdentifier","src":"1836:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"1786:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"1819:6:69","nodeType":"YulTypedName","src":"1819:6:69","type":""}],"src":"1786:75:69"},{"body":{"nativeSrc":"1956:28:69","nodeType":"YulBlock","src":"1956:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1973:1:69","nodeType":"YulLiteral","src":"1973:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1976:1:69","nodeType":"YulLiteral","src":"1976:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1966:6:69","nodeType":"YulIdentifier","src":"1966:6:69"},"nativeSrc":"1966:12:69","nodeType":"YulFunctionCall","src":"1966:12:69"},"nativeSrc":"1966:12:69","nodeType":"YulExpressionStatement","src":"1966:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"1867:117:69","nodeType":"YulFunctionDefinition","src":"1867:117:69"},{"body":{"nativeSrc":"2079:28:69","nodeType":"YulBlock","src":"2079:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2096:1:69","nodeType":"YulLiteral","src":"2096:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"2099:1:69","nodeType":"YulLiteral","src":"2099:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2089:6:69","nodeType":"YulIdentifier","src":"2089:6:69"},"nativeSrc":"2089:12:69","nodeType":"YulFunctionCall","src":"2089:12:69"},"nativeSrc":"2089:12:69","nodeType":"YulExpressionStatement","src":"2089:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"1990:117:69","nodeType":"YulFunctionDefinition","src":"1990:117:69"},{"body":{"nativeSrc":"2156:79:69","nodeType":"YulBlock","src":"2156:79:69","statements":[{"body":{"nativeSrc":"2213:16:69","nodeType":"YulBlock","src":"2213:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2222:1:69","nodeType":"YulLiteral","src":"2222:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"2225:1:69","nodeType":"YulLiteral","src":"2225:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2215:6:69","nodeType":"YulIdentifier","src":"2215:6:69"},"nativeSrc":"2215:12:69","nodeType":"YulFunctionCall","src":"2215:12:69"},"nativeSrc":"2215:12:69","nodeType":"YulExpressionStatement","src":"2215:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"2179:5:69","nodeType":"YulIdentifier","src":"2179:5:69"},{"arguments":[{"name":"value","nativeSrc":"2204:5:69","nodeType":"YulIdentifier","src":"2204:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"2186:17:69","nodeType":"YulIdentifier","src":"2186:17:69"},"nativeSrc":"2186:24:69","nodeType":"YulFunctionCall","src":"2186:24:69"}],"functionName":{"name":"eq","nativeSrc":"2176:2:69","nodeType":"YulIdentifier","src":"2176:2:69"},"nativeSrc":"2176:35:69","nodeType":"YulFunctionCall","src":"2176:35:69"}],"functionName":{"name":"iszero","nativeSrc":"2169:6:69","nodeType":"YulIdentifier","src":"2169:6:69"},"nativeSrc":"2169:43:69","nodeType":"YulFunctionCall","src":"2169:43:69"},"nativeSrc":"2166:63:69","nodeType":"YulIf","src":"2166:63:69"}]},"name":"validator_revert_t_uint256","nativeSrc":"2113:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2149:5:69","nodeType":"YulTypedName","src":"2149:5:69","type":""}],"src":"2113:122:69"},{"body":{"nativeSrc":"2293:87:69","nodeType":"YulBlock","src":"2293:87:69","statements":[{"nativeSrc":"2303:29:69","nodeType":"YulAssignment","src":"2303:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"2325:6:69","nodeType":"YulIdentifier","src":"2325:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"2312:12:69","nodeType":"YulIdentifier","src":"2312:12:69"},"nativeSrc":"2312:20:69","nodeType":"YulFunctionCall","src":"2312:20:69"},"variableNames":[{"name":"value","nativeSrc":"2303:5:69","nodeType":"YulIdentifier","src":"2303:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"2368:5:69","nodeType":"YulIdentifier","src":"2368:5:69"}],"functionName":{"name":"validator_revert_t_uint256","nativeSrc":"2341:26:69","nodeType":"YulIdentifier","src":"2341:26:69"},"nativeSrc":"2341:33:69","nodeType":"YulFunctionCall","src":"2341:33:69"},"nativeSrc":"2341:33:69","nodeType":"YulExpressionStatement","src":"2341:33:69"}]},"name":"abi_decode_t_uint256","nativeSrc":"2241:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"2271:6:69","nodeType":"YulTypedName","src":"2271:6:69","type":""},{"name":"end","nativeSrc":"2279:3:69","nodeType":"YulTypedName","src":"2279:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"2287:5:69","nodeType":"YulTypedName","src":"2287:5:69","type":""}],"src":"2241:139:69"},{"body":{"nativeSrc":"2452:263:69","nodeType":"YulBlock","src":"2452:263:69","statements":[{"body":{"nativeSrc":"2498:83:69","nodeType":"YulBlock","src":"2498:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"2500:77:69","nodeType":"YulIdentifier","src":"2500:77:69"},"nativeSrc":"2500:79:69","nodeType":"YulFunctionCall","src":"2500:79:69"},"nativeSrc":"2500:79:69","nodeType":"YulExpressionStatement","src":"2500:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"2473:7:69","nodeType":"YulIdentifier","src":"2473:7:69"},{"name":"headStart","nativeSrc":"2482:9:69","nodeType":"YulIdentifier","src":"2482:9:69"}],"functionName":{"name":"sub","nativeSrc":"2469:3:69","nodeType":"YulIdentifier","src":"2469:3:69"},"nativeSrc":"2469:23:69","nodeType":"YulFunctionCall","src":"2469:23:69"},{"kind":"number","nativeSrc":"2494:2:69","nodeType":"YulLiteral","src":"2494:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"2465:3:69","nodeType":"YulIdentifier","src":"2465:3:69"},"nativeSrc":"2465:32:69","nodeType":"YulFunctionCall","src":"2465:32:69"},"nativeSrc":"2462:119:69","nodeType":"YulIf","src":"2462:119:69"},{"nativeSrc":"2591:117:69","nodeType":"YulBlock","src":"2591:117:69","statements":[{"nativeSrc":"2606:15:69","nodeType":"YulVariableDeclaration","src":"2606:15:69","value":{"kind":"number","nativeSrc":"2620:1:69","nodeType":"YulLiteral","src":"2620:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"2610:6:69","nodeType":"YulTypedName","src":"2610:6:69","type":""}]},{"nativeSrc":"2635:63:69","nodeType":"YulAssignment","src":"2635:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2670:9:69","nodeType":"YulIdentifier","src":"2670:9:69"},{"name":"offset","nativeSrc":"2681:6:69","nodeType":"YulIdentifier","src":"2681:6:69"}],"functionName":{"name":"add","nativeSrc":"2666:3:69","nodeType":"YulIdentifier","src":"2666:3:69"},"nativeSrc":"2666:22:69","nodeType":"YulFunctionCall","src":"2666:22:69"},{"name":"dataEnd","nativeSrc":"2690:7:69","nodeType":"YulIdentifier","src":"2690:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"2645:20:69","nodeType":"YulIdentifier","src":"2645:20:69"},"nativeSrc":"2645:53:69","nodeType":"YulFunctionCall","src":"2645:53:69"},"variableNames":[{"name":"value0","nativeSrc":"2635:6:69","nodeType":"YulIdentifier","src":"2635:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint256","nativeSrc":"2386:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2422:9:69","nodeType":"YulTypedName","src":"2422:9:69","type":""},{"name":"dataEnd","nativeSrc":"2433:7:69","nodeType":"YulTypedName","src":"2433:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"2445:6:69","nodeType":"YulTypedName","src":"2445:6:69","type":""}],"src":"2386:329:69"},{"body":{"nativeSrc":"2766:81:69","nodeType":"YulBlock","src":"2766:81:69","statements":[{"nativeSrc":"2776:65:69","nodeType":"YulAssignment","src":"2776:65:69","value":{"arguments":[{"name":"value","nativeSrc":"2791:5:69","nodeType":"YulIdentifier","src":"2791:5:69"},{"kind":"number","nativeSrc":"2798:42:69","nodeType":"YulLiteral","src":"2798:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"2787:3:69","nodeType":"YulIdentifier","src":"2787:3:69"},"nativeSrc":"2787:54:69","nodeType":"YulFunctionCall","src":"2787:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"2776:7:69","nodeType":"YulIdentifier","src":"2776:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"2721:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2748:5:69","nodeType":"YulTypedName","src":"2748:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"2758:7:69","nodeType":"YulTypedName","src":"2758:7:69","type":""}],"src":"2721:126:69"},{"body":{"nativeSrc":"2898:51:69","nodeType":"YulBlock","src":"2898:51:69","statements":[{"nativeSrc":"2908:35:69","nodeType":"YulAssignment","src":"2908:35:69","value":{"arguments":[{"name":"value","nativeSrc":"2937:5:69","nodeType":"YulIdentifier","src":"2937:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"2919:17:69","nodeType":"YulIdentifier","src":"2919:17:69"},"nativeSrc":"2919:24:69","nodeType":"YulFunctionCall","src":"2919:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"2908:7:69","nodeType":"YulIdentifier","src":"2908:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"2853:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2880:5:69","nodeType":"YulTypedName","src":"2880:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"2890:7:69","nodeType":"YulTypedName","src":"2890:7:69","type":""}],"src":"2853:96:69"},{"body":{"nativeSrc":"2998:79:69","nodeType":"YulBlock","src":"2998:79:69","statements":[{"body":{"nativeSrc":"3055:16:69","nodeType":"YulBlock","src":"3055:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3064:1:69","nodeType":"YulLiteral","src":"3064:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"3067:1:69","nodeType":"YulLiteral","src":"3067:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"3057:6:69","nodeType":"YulIdentifier","src":"3057:6:69"},"nativeSrc":"3057:12:69","nodeType":"YulFunctionCall","src":"3057:12:69"},"nativeSrc":"3057:12:69","nodeType":"YulExpressionStatement","src":"3057:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"3021:5:69","nodeType":"YulIdentifier","src":"3021:5:69"},{"arguments":[{"name":"value","nativeSrc":"3046:5:69","nodeType":"YulIdentifier","src":"3046:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"3028:17:69","nodeType":"YulIdentifier","src":"3028:17:69"},"nativeSrc":"3028:24:69","nodeType":"YulFunctionCall","src":"3028:24:69"}],"functionName":{"name":"eq","nativeSrc":"3018:2:69","nodeType":"YulIdentifier","src":"3018:2:69"},"nativeSrc":"3018:35:69","nodeType":"YulFunctionCall","src":"3018:35:69"}],"functionName":{"name":"iszero","nativeSrc":"3011:6:69","nodeType":"YulIdentifier","src":"3011:6:69"},"nativeSrc":"3011:43:69","nodeType":"YulFunctionCall","src":"3011:43:69"},"nativeSrc":"3008:63:69","nodeType":"YulIf","src":"3008:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"2955:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2991:5:69","nodeType":"YulTypedName","src":"2991:5:69","type":""}],"src":"2955:122:69"},{"body":{"nativeSrc":"3135:87:69","nodeType":"YulBlock","src":"3135:87:69","statements":[{"nativeSrc":"3145:29:69","nodeType":"YulAssignment","src":"3145:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"3167:6:69","nodeType":"YulIdentifier","src":"3167:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"3154:12:69","nodeType":"YulIdentifier","src":"3154:12:69"},"nativeSrc":"3154:20:69","nodeType":"YulFunctionCall","src":"3154:20:69"},"variableNames":[{"name":"value","nativeSrc":"3145:5:69","nodeType":"YulIdentifier","src":"3145:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"3210:5:69","nodeType":"YulIdentifier","src":"3210:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"3183:26:69","nodeType":"YulIdentifier","src":"3183:26:69"},"nativeSrc":"3183:33:69","nodeType":"YulFunctionCall","src":"3183:33:69"},"nativeSrc":"3183:33:69","nodeType":"YulExpressionStatement","src":"3183:33:69"}]},"name":"abi_decode_t_address","nativeSrc":"3083:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"3113:6:69","nodeType":"YulTypedName","src":"3113:6:69","type":""},{"name":"end","nativeSrc":"3121:3:69","nodeType":"YulTypedName","src":"3121:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"3129:5:69","nodeType":"YulTypedName","src":"3129:5:69","type":""}],"src":"3083:139:69"},{"body":{"nativeSrc":"3311:391:69","nodeType":"YulBlock","src":"3311:391:69","statements":[{"body":{"nativeSrc":"3357:83:69","nodeType":"YulBlock","src":"3357:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"3359:77:69","nodeType":"YulIdentifier","src":"3359:77:69"},"nativeSrc":"3359:79:69","nodeType":"YulFunctionCall","src":"3359:79:69"},"nativeSrc":"3359:79:69","nodeType":"YulExpressionStatement","src":"3359:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"3332:7:69","nodeType":"YulIdentifier","src":"3332:7:69"},{"name":"headStart","nativeSrc":"3341:9:69","nodeType":"YulIdentifier","src":"3341:9:69"}],"functionName":{"name":"sub","nativeSrc":"3328:3:69","nodeType":"YulIdentifier","src":"3328:3:69"},"nativeSrc":"3328:23:69","nodeType":"YulFunctionCall","src":"3328:23:69"},{"kind":"number","nativeSrc":"3353:2:69","nodeType":"YulLiteral","src":"3353:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"3324:3:69","nodeType":"YulIdentifier","src":"3324:3:69"},"nativeSrc":"3324:32:69","nodeType":"YulFunctionCall","src":"3324:32:69"},"nativeSrc":"3321:119:69","nodeType":"YulIf","src":"3321:119:69"},{"nativeSrc":"3450:117:69","nodeType":"YulBlock","src":"3450:117:69","statements":[{"nativeSrc":"3465:15:69","nodeType":"YulVariableDeclaration","src":"3465:15:69","value":{"kind":"number","nativeSrc":"3479:1:69","nodeType":"YulLiteral","src":"3479:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"3469:6:69","nodeType":"YulTypedName","src":"3469:6:69","type":""}]},{"nativeSrc":"3494:63:69","nodeType":"YulAssignment","src":"3494:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3529:9:69","nodeType":"YulIdentifier","src":"3529:9:69"},{"name":"offset","nativeSrc":"3540:6:69","nodeType":"YulIdentifier","src":"3540:6:69"}],"functionName":{"name":"add","nativeSrc":"3525:3:69","nodeType":"YulIdentifier","src":"3525:3:69"},"nativeSrc":"3525:22:69","nodeType":"YulFunctionCall","src":"3525:22:69"},{"name":"dataEnd","nativeSrc":"3549:7:69","nodeType":"YulIdentifier","src":"3549:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"3504:20:69","nodeType":"YulIdentifier","src":"3504:20:69"},"nativeSrc":"3504:53:69","nodeType":"YulFunctionCall","src":"3504:53:69"},"variableNames":[{"name":"value0","nativeSrc":"3494:6:69","nodeType":"YulIdentifier","src":"3494:6:69"}]}]},{"nativeSrc":"3577:118:69","nodeType":"YulBlock","src":"3577:118:69","statements":[{"nativeSrc":"3592:16:69","nodeType":"YulVariableDeclaration","src":"3592:16:69","value":{"kind":"number","nativeSrc":"3606:2:69","nodeType":"YulLiteral","src":"3606:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"3596:6:69","nodeType":"YulTypedName","src":"3596:6:69","type":""}]},{"nativeSrc":"3622:63:69","nodeType":"YulAssignment","src":"3622:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3657:9:69","nodeType":"YulIdentifier","src":"3657:9:69"},{"name":"offset","nativeSrc":"3668:6:69","nodeType":"YulIdentifier","src":"3668:6:69"}],"functionName":{"name":"add","nativeSrc":"3653:3:69","nodeType":"YulIdentifier","src":"3653:3:69"},"nativeSrc":"3653:22:69","nodeType":"YulFunctionCall","src":"3653:22:69"},{"name":"dataEnd","nativeSrc":"3677:7:69","nodeType":"YulIdentifier","src":"3677:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"3632:20:69","nodeType":"YulIdentifier","src":"3632:20:69"},"nativeSrc":"3632:53:69","nodeType":"YulFunctionCall","src":"3632:53:69"},"variableNames":[{"name":"value1","nativeSrc":"3622:6:69","nodeType":"YulIdentifier","src":"3622:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nativeSrc":"3228:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3273:9:69","nodeType":"YulTypedName","src":"3273:9:69","type":""},{"name":"dataEnd","nativeSrc":"3284:7:69","nodeType":"YulTypedName","src":"3284:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"3296:6:69","nodeType":"YulTypedName","src":"3296:6:69","type":""},{"name":"value1","nativeSrc":"3304:6:69","nodeType":"YulTypedName","src":"3304:6:69","type":""}],"src":"3228:474:69"},{"body":{"nativeSrc":"3750:48:69","nodeType":"YulBlock","src":"3750:48:69","statements":[{"nativeSrc":"3760:32:69","nodeType":"YulAssignment","src":"3760:32:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"3785:5:69","nodeType":"YulIdentifier","src":"3785:5:69"}],"functionName":{"name":"iszero","nativeSrc":"3778:6:69","nodeType":"YulIdentifier","src":"3778:6:69"},"nativeSrc":"3778:13:69","nodeType":"YulFunctionCall","src":"3778:13:69"}],"functionName":{"name":"iszero","nativeSrc":"3771:6:69","nodeType":"YulIdentifier","src":"3771:6:69"},"nativeSrc":"3771:21:69","nodeType":"YulFunctionCall","src":"3771:21:69"},"variableNames":[{"name":"cleaned","nativeSrc":"3760:7:69","nodeType":"YulIdentifier","src":"3760:7:69"}]}]},"name":"cleanup_t_bool","nativeSrc":"3708:90:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3732:5:69","nodeType":"YulTypedName","src":"3732:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"3742:7:69","nodeType":"YulTypedName","src":"3742:7:69","type":""}],"src":"3708:90:69"},{"body":{"nativeSrc":"3863:50:69","nodeType":"YulBlock","src":"3863:50:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"3880:3:69","nodeType":"YulIdentifier","src":"3880:3:69"},{"arguments":[{"name":"value","nativeSrc":"3900:5:69","nodeType":"YulIdentifier","src":"3900:5:69"}],"functionName":{"name":"cleanup_t_bool","nativeSrc":"3885:14:69","nodeType":"YulIdentifier","src":"3885:14:69"},"nativeSrc":"3885:21:69","nodeType":"YulFunctionCall","src":"3885:21:69"}],"functionName":{"name":"mstore","nativeSrc":"3873:6:69","nodeType":"YulIdentifier","src":"3873:6:69"},"nativeSrc":"3873:34:69","nodeType":"YulFunctionCall","src":"3873:34:69"},"nativeSrc":"3873:34:69","nodeType":"YulExpressionStatement","src":"3873:34:69"}]},"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"3804:109:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3851:5:69","nodeType":"YulTypedName","src":"3851:5:69","type":""},{"name":"pos","nativeSrc":"3858:3:69","nodeType":"YulTypedName","src":"3858:3:69","type":""}],"src":"3804:109:69"},{"body":{"nativeSrc":"4011:118:69","nodeType":"YulBlock","src":"4011:118:69","statements":[{"nativeSrc":"4021:26:69","nodeType":"YulAssignment","src":"4021:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"4033:9:69","nodeType":"YulIdentifier","src":"4033:9:69"},{"kind":"number","nativeSrc":"4044:2:69","nodeType":"YulLiteral","src":"4044:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4029:3:69","nodeType":"YulIdentifier","src":"4029:3:69"},"nativeSrc":"4029:18:69","nodeType":"YulFunctionCall","src":"4029:18:69"},"variableNames":[{"name":"tail","nativeSrc":"4021:4:69","nodeType":"YulIdentifier","src":"4021:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"4095:6:69","nodeType":"YulIdentifier","src":"4095:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"4108:9:69","nodeType":"YulIdentifier","src":"4108:9:69"},{"kind":"number","nativeSrc":"4119:1:69","nodeType":"YulLiteral","src":"4119:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4104:3:69","nodeType":"YulIdentifier","src":"4104:3:69"},"nativeSrc":"4104:17:69","nodeType":"YulFunctionCall","src":"4104:17:69"}],"functionName":{"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"4057:37:69","nodeType":"YulIdentifier","src":"4057:37:69"},"nativeSrc":"4057:65:69","nodeType":"YulFunctionCall","src":"4057:65:69"},"nativeSrc":"4057:65:69","nodeType":"YulExpressionStatement","src":"4057:65:69"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nativeSrc":"3919:210:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3983:9:69","nodeType":"YulTypedName","src":"3983:9:69","type":""},{"name":"value0","nativeSrc":"3995:6:69","nodeType":"YulTypedName","src":"3995:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4006:4:69","nodeType":"YulTypedName","src":"4006:4:69","type":""}],"src":"3919:210:69"},{"body":{"nativeSrc":"4201:263:69","nodeType":"YulBlock","src":"4201:263:69","statements":[{"body":{"nativeSrc":"4247:83:69","nodeType":"YulBlock","src":"4247:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"4249:77:69","nodeType":"YulIdentifier","src":"4249:77:69"},"nativeSrc":"4249:79:69","nodeType":"YulFunctionCall","src":"4249:79:69"},"nativeSrc":"4249:79:69","nodeType":"YulExpressionStatement","src":"4249:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"4222:7:69","nodeType":"YulIdentifier","src":"4222:7:69"},{"name":"headStart","nativeSrc":"4231:9:69","nodeType":"YulIdentifier","src":"4231:9:69"}],"functionName":{"name":"sub","nativeSrc":"4218:3:69","nodeType":"YulIdentifier","src":"4218:3:69"},"nativeSrc":"4218:23:69","nodeType":"YulFunctionCall","src":"4218:23:69"},{"kind":"number","nativeSrc":"4243:2:69","nodeType":"YulLiteral","src":"4243:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"4214:3:69","nodeType":"YulIdentifier","src":"4214:3:69"},"nativeSrc":"4214:32:69","nodeType":"YulFunctionCall","src":"4214:32:69"},"nativeSrc":"4211:119:69","nodeType":"YulIf","src":"4211:119:69"},{"nativeSrc":"4340:117:69","nodeType":"YulBlock","src":"4340:117:69","statements":[{"nativeSrc":"4355:15:69","nodeType":"YulVariableDeclaration","src":"4355:15:69","value":{"kind":"number","nativeSrc":"4369:1:69","nodeType":"YulLiteral","src":"4369:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"4359:6:69","nodeType":"YulTypedName","src":"4359:6:69","type":""}]},{"nativeSrc":"4384:63:69","nodeType":"YulAssignment","src":"4384:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4419:9:69","nodeType":"YulIdentifier","src":"4419:9:69"},{"name":"offset","nativeSrc":"4430:6:69","nodeType":"YulIdentifier","src":"4430:6:69"}],"functionName":{"name":"add","nativeSrc":"4415:3:69","nodeType":"YulIdentifier","src":"4415:3:69"},"nativeSrc":"4415:22:69","nodeType":"YulFunctionCall","src":"4415:22:69"},{"name":"dataEnd","nativeSrc":"4439:7:69","nodeType":"YulIdentifier","src":"4439:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"4394:20:69","nodeType":"YulIdentifier","src":"4394:20:69"},"nativeSrc":"4394:53:69","nodeType":"YulFunctionCall","src":"4394:53:69"},"variableNames":[{"name":"value0","nativeSrc":"4384:6:69","nodeType":"YulIdentifier","src":"4384:6:69"}]}]}]},"name":"abi_decode_tuple_t_address","nativeSrc":"4135:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4171:9:69","nodeType":"YulTypedName","src":"4171:9:69","type":""},{"name":"dataEnd","nativeSrc":"4182:7:69","nodeType":"YulTypedName","src":"4182:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"4194:6:69","nodeType":"YulTypedName","src":"4194:6:69","type":""}],"src":"4135:329:69"},{"body":{"nativeSrc":"4535:53:69","nodeType":"YulBlock","src":"4535:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"4552:3:69","nodeType":"YulIdentifier","src":"4552:3:69"},{"arguments":[{"name":"value","nativeSrc":"4575:5:69","nodeType":"YulIdentifier","src":"4575:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"4557:17:69","nodeType":"YulIdentifier","src":"4557:17:69"},"nativeSrc":"4557:24:69","nodeType":"YulFunctionCall","src":"4557:24:69"}],"functionName":{"name":"mstore","nativeSrc":"4545:6:69","nodeType":"YulIdentifier","src":"4545:6:69"},"nativeSrc":"4545:37:69","nodeType":"YulFunctionCall","src":"4545:37:69"},"nativeSrc":"4545:37:69","nodeType":"YulExpressionStatement","src":"4545:37:69"}]},"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"4470:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4523:5:69","nodeType":"YulTypedName","src":"4523:5:69","type":""},{"name":"pos","nativeSrc":"4530:3:69","nodeType":"YulTypedName","src":"4530:3:69","type":""}],"src":"4470:118:69"},{"body":{"nativeSrc":"4692:124:69","nodeType":"YulBlock","src":"4692:124:69","statements":[{"nativeSrc":"4702:26:69","nodeType":"YulAssignment","src":"4702:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"4714:9:69","nodeType":"YulIdentifier","src":"4714:9:69"},{"kind":"number","nativeSrc":"4725:2:69","nodeType":"YulLiteral","src":"4725:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4710:3:69","nodeType":"YulIdentifier","src":"4710:3:69"},"nativeSrc":"4710:18:69","nodeType":"YulFunctionCall","src":"4710:18:69"},"variableNames":[{"name":"tail","nativeSrc":"4702:4:69","nodeType":"YulIdentifier","src":"4702:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"4782:6:69","nodeType":"YulIdentifier","src":"4782:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"4795:9:69","nodeType":"YulIdentifier","src":"4795:9:69"},{"kind":"number","nativeSrc":"4806:1:69","nodeType":"YulLiteral","src":"4806:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4791:3:69","nodeType":"YulIdentifier","src":"4791:3:69"},"nativeSrc":"4791:17:69","nodeType":"YulFunctionCall","src":"4791:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"4738:43:69","nodeType":"YulIdentifier","src":"4738:43:69"},"nativeSrc":"4738:71:69","nodeType":"YulFunctionCall","src":"4738:71:69"},"nativeSrc":"4738:71:69","nodeType":"YulExpressionStatement","src":"4738:71:69"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"4594:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4664:9:69","nodeType":"YulTypedName","src":"4664:9:69","type":""},{"name":"value0","nativeSrc":"4676:6:69","nodeType":"YulTypedName","src":"4676:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4687:4:69","nodeType":"YulTypedName","src":"4687:4:69","type":""}],"src":"4594:222:69"},{"body":{"nativeSrc":"4893:51:69","nodeType":"YulBlock","src":"4893:51:69","statements":[{"nativeSrc":"4903:35:69","nodeType":"YulAssignment","src":"4903:35:69","value":{"arguments":[{"name":"value","nativeSrc":"4932:5:69","nodeType":"YulIdentifier","src":"4932:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"4914:17:69","nodeType":"YulIdentifier","src":"4914:17:69"},"nativeSrc":"4914:24:69","nodeType":"YulFunctionCall","src":"4914:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"4903:7:69","nodeType":"YulIdentifier","src":"4903:7:69"}]}]},"name":"cleanup_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"4822:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4875:5:69","nodeType":"YulTypedName","src":"4875:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"4885:7:69","nodeType":"YulTypedName","src":"4885:7:69","type":""}],"src":"4822:122:69"},{"body":{"nativeSrc":"5019:105:69","nodeType":"YulBlock","src":"5019:105:69","statements":[{"body":{"nativeSrc":"5102:16:69","nodeType":"YulBlock","src":"5102:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"5111:1:69","nodeType":"YulLiteral","src":"5111:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"5114:1:69","nodeType":"YulLiteral","src":"5114:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"5104:6:69","nodeType":"YulIdentifier","src":"5104:6:69"},"nativeSrc":"5104:12:69","nodeType":"YulFunctionCall","src":"5104:12:69"},"nativeSrc":"5104:12:69","nodeType":"YulExpressionStatement","src":"5104:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"5042:5:69","nodeType":"YulIdentifier","src":"5042:5:69"},{"arguments":[{"name":"value","nativeSrc":"5093:5:69","nodeType":"YulIdentifier","src":"5093:5:69"}],"functionName":{"name":"cleanup_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"5049:43:69","nodeType":"YulIdentifier","src":"5049:43:69"},"nativeSrc":"5049:50:69","nodeType":"YulFunctionCall","src":"5049:50:69"}],"functionName":{"name":"eq","nativeSrc":"5039:2:69","nodeType":"YulIdentifier","src":"5039:2:69"},"nativeSrc":"5039:61:69","nodeType":"YulFunctionCall","src":"5039:61:69"}],"functionName":{"name":"iszero","nativeSrc":"5032:6:69","nodeType":"YulIdentifier","src":"5032:6:69"},"nativeSrc":"5032:69:69","nodeType":"YulFunctionCall","src":"5032:69:69"},"nativeSrc":"5029:89:69","nodeType":"YulIf","src":"5029:89:69"}]},"name":"validator_revert_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"4950:174:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"5012:5:69","nodeType":"YulTypedName","src":"5012:5:69","type":""}],"src":"4950:174:69"},{"body":{"nativeSrc":"5208:113:69","nodeType":"YulBlock","src":"5208:113:69","statements":[{"nativeSrc":"5218:29:69","nodeType":"YulAssignment","src":"5218:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"5240:6:69","nodeType":"YulIdentifier","src":"5240:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"5227:12:69","nodeType":"YulIdentifier","src":"5227:12:69"},"nativeSrc":"5227:20:69","nodeType":"YulFunctionCall","src":"5227:20:69"},"variableNames":[{"name":"value","nativeSrc":"5218:5:69","nodeType":"YulIdentifier","src":"5218:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"5309:5:69","nodeType":"YulIdentifier","src":"5309:5:69"}],"functionName":{"name":"validator_revert_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"5256:52:69","nodeType":"YulIdentifier","src":"5256:52:69"},"nativeSrc":"5256:59:69","nodeType":"YulFunctionCall","src":"5256:59:69"},"nativeSrc":"5256:59:69","nodeType":"YulExpressionStatement","src":"5256:59:69"}]},"name":"abi_decode_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"5130:191:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"5186:6:69","nodeType":"YulTypedName","src":"5186:6:69","type":""},{"name":"end","nativeSrc":"5194:3:69","nodeType":"YulTypedName","src":"5194:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"5202:5:69","nodeType":"YulTypedName","src":"5202:5:69","type":""}],"src":"5130:191:69"},{"body":{"nativeSrc":"5419:289:69","nodeType":"YulBlock","src":"5419:289:69","statements":[{"body":{"nativeSrc":"5465:83:69","nodeType":"YulBlock","src":"5465:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"5467:77:69","nodeType":"YulIdentifier","src":"5467:77:69"},"nativeSrc":"5467:79:69","nodeType":"YulFunctionCall","src":"5467:79:69"},"nativeSrc":"5467:79:69","nodeType":"YulExpressionStatement","src":"5467:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"5440:7:69","nodeType":"YulIdentifier","src":"5440:7:69"},{"name":"headStart","nativeSrc":"5449:9:69","nodeType":"YulIdentifier","src":"5449:9:69"}],"functionName":{"name":"sub","nativeSrc":"5436:3:69","nodeType":"YulIdentifier","src":"5436:3:69"},"nativeSrc":"5436:23:69","nodeType":"YulFunctionCall","src":"5436:23:69"},{"kind":"number","nativeSrc":"5461:2:69","nodeType":"YulLiteral","src":"5461:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"5432:3:69","nodeType":"YulIdentifier","src":"5432:3:69"},"nativeSrc":"5432:32:69","nodeType":"YulFunctionCall","src":"5432:32:69"},"nativeSrc":"5429:119:69","nodeType":"YulIf","src":"5429:119:69"},{"nativeSrc":"5558:143:69","nodeType":"YulBlock","src":"5558:143:69","statements":[{"nativeSrc":"5573:15:69","nodeType":"YulVariableDeclaration","src":"5573:15:69","value":{"kind":"number","nativeSrc":"5587:1:69","nodeType":"YulLiteral","src":"5587:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"5577:6:69","nodeType":"YulTypedName","src":"5577:6:69","type":""}]},{"nativeSrc":"5602:89:69","nodeType":"YulAssignment","src":"5602:89:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5663:9:69","nodeType":"YulIdentifier","src":"5663:9:69"},{"name":"offset","nativeSrc":"5674:6:69","nodeType":"YulIdentifier","src":"5674:6:69"}],"functionName":{"name":"add","nativeSrc":"5659:3:69","nodeType":"YulIdentifier","src":"5659:3:69"},"nativeSrc":"5659:22:69","nodeType":"YulFunctionCall","src":"5659:22:69"},{"name":"dataEnd","nativeSrc":"5683:7:69","nodeType":"YulIdentifier","src":"5683:7:69"}],"functionName":{"name":"abi_decode_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"5612:46:69","nodeType":"YulIdentifier","src":"5612:46:69"},"nativeSrc":"5612:79:69","nodeType":"YulFunctionCall","src":"5612:79:69"},"variableNames":[{"name":"value0","nativeSrc":"5602:6:69","nodeType":"YulIdentifier","src":"5602:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"5327:381:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5389:9:69","nodeType":"YulTypedName","src":"5389:9:69","type":""},{"name":"dataEnd","nativeSrc":"5400:7:69","nodeType":"YulTypedName","src":"5400:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"5412:6:69","nodeType":"YulTypedName","src":"5412:6:69","type":""}],"src":"5327:381:69"},{"body":{"nativeSrc":"5814:519:69","nodeType":"YulBlock","src":"5814:519:69","statements":[{"body":{"nativeSrc":"5860:83:69","nodeType":"YulBlock","src":"5860:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"5862:77:69","nodeType":"YulIdentifier","src":"5862:77:69"},"nativeSrc":"5862:79:69","nodeType":"YulFunctionCall","src":"5862:79:69"},"nativeSrc":"5862:79:69","nodeType":"YulExpressionStatement","src":"5862:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"5835:7:69","nodeType":"YulIdentifier","src":"5835:7:69"},{"name":"headStart","nativeSrc":"5844:9:69","nodeType":"YulIdentifier","src":"5844:9:69"}],"functionName":{"name":"sub","nativeSrc":"5831:3:69","nodeType":"YulIdentifier","src":"5831:3:69"},"nativeSrc":"5831:23:69","nodeType":"YulFunctionCall","src":"5831:23:69"},{"kind":"number","nativeSrc":"5856:2:69","nodeType":"YulLiteral","src":"5856:2:69","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"5827:3:69","nodeType":"YulIdentifier","src":"5827:3:69"},"nativeSrc":"5827:32:69","nodeType":"YulFunctionCall","src":"5827:32:69"},"nativeSrc":"5824:119:69","nodeType":"YulIf","src":"5824:119:69"},{"nativeSrc":"5953:117:69","nodeType":"YulBlock","src":"5953:117:69","statements":[{"nativeSrc":"5968:15:69","nodeType":"YulVariableDeclaration","src":"5968:15:69","value":{"kind":"number","nativeSrc":"5982:1:69","nodeType":"YulLiteral","src":"5982:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"5972:6:69","nodeType":"YulTypedName","src":"5972:6:69","type":""}]},{"nativeSrc":"5997:63:69","nodeType":"YulAssignment","src":"5997:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6032:9:69","nodeType":"YulIdentifier","src":"6032:9:69"},{"name":"offset","nativeSrc":"6043:6:69","nodeType":"YulIdentifier","src":"6043:6:69"}],"functionName":{"name":"add","nativeSrc":"6028:3:69","nodeType":"YulIdentifier","src":"6028:3:69"},"nativeSrc":"6028:22:69","nodeType":"YulFunctionCall","src":"6028:22:69"},{"name":"dataEnd","nativeSrc":"6052:7:69","nodeType":"YulIdentifier","src":"6052:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"6007:20:69","nodeType":"YulIdentifier","src":"6007:20:69"},"nativeSrc":"6007:53:69","nodeType":"YulFunctionCall","src":"6007:53:69"},"variableNames":[{"name":"value0","nativeSrc":"5997:6:69","nodeType":"YulIdentifier","src":"5997:6:69"}]}]},{"nativeSrc":"6080:118:69","nodeType":"YulBlock","src":"6080:118:69","statements":[{"nativeSrc":"6095:16:69","nodeType":"YulVariableDeclaration","src":"6095:16:69","value":{"kind":"number","nativeSrc":"6109:2:69","nodeType":"YulLiteral","src":"6109:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"6099:6:69","nodeType":"YulTypedName","src":"6099:6:69","type":""}]},{"nativeSrc":"6125:63:69","nodeType":"YulAssignment","src":"6125:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6160:9:69","nodeType":"YulIdentifier","src":"6160:9:69"},{"name":"offset","nativeSrc":"6171:6:69","nodeType":"YulIdentifier","src":"6171:6:69"}],"functionName":{"name":"add","nativeSrc":"6156:3:69","nodeType":"YulIdentifier","src":"6156:3:69"},"nativeSrc":"6156:22:69","nodeType":"YulFunctionCall","src":"6156:22:69"},{"name":"dataEnd","nativeSrc":"6180:7:69","nodeType":"YulIdentifier","src":"6180:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"6135:20:69","nodeType":"YulIdentifier","src":"6135:20:69"},"nativeSrc":"6135:53:69","nodeType":"YulFunctionCall","src":"6135:53:69"},"variableNames":[{"name":"value1","nativeSrc":"6125:6:69","nodeType":"YulIdentifier","src":"6125:6:69"}]}]},{"nativeSrc":"6208:118:69","nodeType":"YulBlock","src":"6208:118:69","statements":[{"nativeSrc":"6223:16:69","nodeType":"YulVariableDeclaration","src":"6223:16:69","value":{"kind":"number","nativeSrc":"6237:2:69","nodeType":"YulLiteral","src":"6237:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"6227:6:69","nodeType":"YulTypedName","src":"6227:6:69","type":""}]},{"nativeSrc":"6253:63:69","nodeType":"YulAssignment","src":"6253:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6288:9:69","nodeType":"YulIdentifier","src":"6288:9:69"},{"name":"offset","nativeSrc":"6299:6:69","nodeType":"YulIdentifier","src":"6299:6:69"}],"functionName":{"name":"add","nativeSrc":"6284:3:69","nodeType":"YulIdentifier","src":"6284:3:69"},"nativeSrc":"6284:22:69","nodeType":"YulFunctionCall","src":"6284:22:69"},{"name":"dataEnd","nativeSrc":"6308:7:69","nodeType":"YulIdentifier","src":"6308:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"6263:20:69","nodeType":"YulIdentifier","src":"6263:20:69"},"nativeSrc":"6263:53:69","nodeType":"YulFunctionCall","src":"6263:53:69"},"variableNames":[{"name":"value2","nativeSrc":"6253:6:69","nodeType":"YulIdentifier","src":"6253:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nativeSrc":"5714:619:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5768:9:69","nodeType":"YulTypedName","src":"5768:9:69","type":""},{"name":"dataEnd","nativeSrc":"5779:7:69","nodeType":"YulTypedName","src":"5779:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"5791:6:69","nodeType":"YulTypedName","src":"5791:6:69","type":""},{"name":"value1","nativeSrc":"5799:6:69","nodeType":"YulTypedName","src":"5799:6:69","type":""},{"name":"value2","nativeSrc":"5807:6:69","nodeType":"YulTypedName","src":"5807:6:69","type":""}],"src":"5714:619:69"},{"body":{"nativeSrc":"6382:43:69","nodeType":"YulBlock","src":"6382:43:69","statements":[{"nativeSrc":"6392:27:69","nodeType":"YulAssignment","src":"6392:27:69","value":{"arguments":[{"name":"value","nativeSrc":"6407:5:69","nodeType":"YulIdentifier","src":"6407:5:69"},{"kind":"number","nativeSrc":"6414:4:69","nodeType":"YulLiteral","src":"6414:4:69","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"6403:3:69","nodeType":"YulIdentifier","src":"6403:3:69"},"nativeSrc":"6403:16:69","nodeType":"YulFunctionCall","src":"6403:16:69"},"variableNames":[{"name":"cleaned","nativeSrc":"6392:7:69","nodeType":"YulIdentifier","src":"6392:7:69"}]}]},"name":"cleanup_t_uint8","nativeSrc":"6339:86:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"6364:5:69","nodeType":"YulTypedName","src":"6364:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"6374:7:69","nodeType":"YulTypedName","src":"6374:7:69","type":""}],"src":"6339:86:69"},{"body":{"nativeSrc":"6492:51:69","nodeType":"YulBlock","src":"6492:51:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"6509:3:69","nodeType":"YulIdentifier","src":"6509:3:69"},{"arguments":[{"name":"value","nativeSrc":"6530:5:69","nodeType":"YulIdentifier","src":"6530:5:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"6514:15:69","nodeType":"YulIdentifier","src":"6514:15:69"},"nativeSrc":"6514:22:69","nodeType":"YulFunctionCall","src":"6514:22:69"}],"functionName":{"name":"mstore","nativeSrc":"6502:6:69","nodeType":"YulIdentifier","src":"6502:6:69"},"nativeSrc":"6502:35:69","nodeType":"YulFunctionCall","src":"6502:35:69"},"nativeSrc":"6502:35:69","nodeType":"YulExpressionStatement","src":"6502:35:69"}]},"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"6431:112:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"6480:5:69","nodeType":"YulTypedName","src":"6480:5:69","type":""},{"name":"pos","nativeSrc":"6487:3:69","nodeType":"YulTypedName","src":"6487:3:69","type":""}],"src":"6431:112:69"},{"body":{"nativeSrc":"6643:120:69","nodeType":"YulBlock","src":"6643:120:69","statements":[{"nativeSrc":"6653:26:69","nodeType":"YulAssignment","src":"6653:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"6665:9:69","nodeType":"YulIdentifier","src":"6665:9:69"},{"kind":"number","nativeSrc":"6676:2:69","nodeType":"YulLiteral","src":"6676:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"6661:3:69","nodeType":"YulIdentifier","src":"6661:3:69"},"nativeSrc":"6661:18:69","nodeType":"YulFunctionCall","src":"6661:18:69"},"variableNames":[{"name":"tail","nativeSrc":"6653:4:69","nodeType":"YulIdentifier","src":"6653:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"6729:6:69","nodeType":"YulIdentifier","src":"6729:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"6742:9:69","nodeType":"YulIdentifier","src":"6742:9:69"},{"kind":"number","nativeSrc":"6753:1:69","nodeType":"YulLiteral","src":"6753:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"6738:3:69","nodeType":"YulIdentifier","src":"6738:3:69"},"nativeSrc":"6738:17:69","nodeType":"YulFunctionCall","src":"6738:17:69"}],"functionName":{"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"6689:39:69","nodeType":"YulIdentifier","src":"6689:39:69"},"nativeSrc":"6689:67:69","nodeType":"YulFunctionCall","src":"6689:67:69"},"nativeSrc":"6689:67:69","nodeType":"YulExpressionStatement","src":"6689:67:69"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nativeSrc":"6549:214:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6615:9:69","nodeType":"YulTypedName","src":"6615:9:69","type":""},{"name":"value0","nativeSrc":"6627:6:69","nodeType":"YulTypedName","src":"6627:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"6638:4:69","nodeType":"YulTypedName","src":"6638:4:69","type":""}],"src":"6549:214:69"},{"body":{"nativeSrc":"6886:648:69","nodeType":"YulBlock","src":"6886:648:69","statements":[{"body":{"nativeSrc":"6933:83:69","nodeType":"YulBlock","src":"6933:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"6935:77:69","nodeType":"YulIdentifier","src":"6935:77:69"},"nativeSrc":"6935:79:69","nodeType":"YulFunctionCall","src":"6935:79:69"},"nativeSrc":"6935:79:69","nodeType":"YulExpressionStatement","src":"6935:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"6907:7:69","nodeType":"YulIdentifier","src":"6907:7:69"},{"name":"headStart","nativeSrc":"6916:9:69","nodeType":"YulIdentifier","src":"6916:9:69"}],"functionName":{"name":"sub","nativeSrc":"6903:3:69","nodeType":"YulIdentifier","src":"6903:3:69"},"nativeSrc":"6903:23:69","nodeType":"YulFunctionCall","src":"6903:23:69"},{"kind":"number","nativeSrc":"6928:3:69","nodeType":"YulLiteral","src":"6928:3:69","type":"","value":"128"}],"functionName":{"name":"slt","nativeSrc":"6899:3:69","nodeType":"YulIdentifier","src":"6899:3:69"},"nativeSrc":"6899:33:69","nodeType":"YulFunctionCall","src":"6899:33:69"},"nativeSrc":"6896:120:69","nodeType":"YulIf","src":"6896:120:69"},{"nativeSrc":"7026:117:69","nodeType":"YulBlock","src":"7026:117:69","statements":[{"nativeSrc":"7041:15:69","nodeType":"YulVariableDeclaration","src":"7041:15:69","value":{"kind":"number","nativeSrc":"7055:1:69","nodeType":"YulLiteral","src":"7055:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"7045:6:69","nodeType":"YulTypedName","src":"7045:6:69","type":""}]},{"nativeSrc":"7070:63:69","nodeType":"YulAssignment","src":"7070:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7105:9:69","nodeType":"YulIdentifier","src":"7105:9:69"},{"name":"offset","nativeSrc":"7116:6:69","nodeType":"YulIdentifier","src":"7116:6:69"}],"functionName":{"name":"add","nativeSrc":"7101:3:69","nodeType":"YulIdentifier","src":"7101:3:69"},"nativeSrc":"7101:22:69","nodeType":"YulFunctionCall","src":"7101:22:69"},{"name":"dataEnd","nativeSrc":"7125:7:69","nodeType":"YulIdentifier","src":"7125:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"7080:20:69","nodeType":"YulIdentifier","src":"7080:20:69"},"nativeSrc":"7080:53:69","nodeType":"YulFunctionCall","src":"7080:53:69"},"variableNames":[{"name":"value0","nativeSrc":"7070:6:69","nodeType":"YulIdentifier","src":"7070:6:69"}]}]},{"nativeSrc":"7153:118:69","nodeType":"YulBlock","src":"7153:118:69","statements":[{"nativeSrc":"7168:16:69","nodeType":"YulVariableDeclaration","src":"7168:16:69","value":{"kind":"number","nativeSrc":"7182:2:69","nodeType":"YulLiteral","src":"7182:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"7172:6:69","nodeType":"YulTypedName","src":"7172:6:69","type":""}]},{"nativeSrc":"7198:63:69","nodeType":"YulAssignment","src":"7198:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7233:9:69","nodeType":"YulIdentifier","src":"7233:9:69"},{"name":"offset","nativeSrc":"7244:6:69","nodeType":"YulIdentifier","src":"7244:6:69"}],"functionName":{"name":"add","nativeSrc":"7229:3:69","nodeType":"YulIdentifier","src":"7229:3:69"},"nativeSrc":"7229:22:69","nodeType":"YulFunctionCall","src":"7229:22:69"},{"name":"dataEnd","nativeSrc":"7253:7:69","nodeType":"YulIdentifier","src":"7253:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"7208:20:69","nodeType":"YulIdentifier","src":"7208:20:69"},"nativeSrc":"7208:53:69","nodeType":"YulFunctionCall","src":"7208:53:69"},"variableNames":[{"name":"value1","nativeSrc":"7198:6:69","nodeType":"YulIdentifier","src":"7198:6:69"}]}]},{"nativeSrc":"7281:118:69","nodeType":"YulBlock","src":"7281:118:69","statements":[{"nativeSrc":"7296:16:69","nodeType":"YulVariableDeclaration","src":"7296:16:69","value":{"kind":"number","nativeSrc":"7310:2:69","nodeType":"YulLiteral","src":"7310:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"7300:6:69","nodeType":"YulTypedName","src":"7300:6:69","type":""}]},{"nativeSrc":"7326:63:69","nodeType":"YulAssignment","src":"7326:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7361:9:69","nodeType":"YulIdentifier","src":"7361:9:69"},{"name":"offset","nativeSrc":"7372:6:69","nodeType":"YulIdentifier","src":"7372:6:69"}],"functionName":{"name":"add","nativeSrc":"7357:3:69","nodeType":"YulIdentifier","src":"7357:3:69"},"nativeSrc":"7357:22:69","nodeType":"YulFunctionCall","src":"7357:22:69"},{"name":"dataEnd","nativeSrc":"7381:7:69","nodeType":"YulIdentifier","src":"7381:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"7336:20:69","nodeType":"YulIdentifier","src":"7336:20:69"},"nativeSrc":"7336:53:69","nodeType":"YulFunctionCall","src":"7336:53:69"},"variableNames":[{"name":"value2","nativeSrc":"7326:6:69","nodeType":"YulIdentifier","src":"7326:6:69"}]}]},{"nativeSrc":"7409:118:69","nodeType":"YulBlock","src":"7409:118:69","statements":[{"nativeSrc":"7424:16:69","nodeType":"YulVariableDeclaration","src":"7424:16:69","value":{"kind":"number","nativeSrc":"7438:2:69","nodeType":"YulLiteral","src":"7438:2:69","type":"","value":"96"},"variables":[{"name":"offset","nativeSrc":"7428:6:69","nodeType":"YulTypedName","src":"7428:6:69","type":""}]},{"nativeSrc":"7454:63:69","nodeType":"YulAssignment","src":"7454:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7489:9:69","nodeType":"YulIdentifier","src":"7489:9:69"},{"name":"offset","nativeSrc":"7500:6:69","nodeType":"YulIdentifier","src":"7500:6:69"}],"functionName":{"name":"add","nativeSrc":"7485:3:69","nodeType":"YulIdentifier","src":"7485:3:69"},"nativeSrc":"7485:22:69","nodeType":"YulFunctionCall","src":"7485:22:69"},{"name":"dataEnd","nativeSrc":"7509:7:69","nodeType":"YulIdentifier","src":"7509:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"7464:20:69","nodeType":"YulIdentifier","src":"7464:20:69"},"nativeSrc":"7464:53:69","nodeType":"YulFunctionCall","src":"7464:53:69"},"variableNames":[{"name":"value3","nativeSrc":"7454:6:69","nodeType":"YulIdentifier","src":"7454:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_address","nativeSrc":"6769:765:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6832:9:69","nodeType":"YulTypedName","src":"6832:9:69","type":""},{"name":"dataEnd","nativeSrc":"6843:7:69","nodeType":"YulTypedName","src":"6843:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"6855:6:69","nodeType":"YulTypedName","src":"6855:6:69","type":""},{"name":"value1","nativeSrc":"6863:6:69","nodeType":"YulTypedName","src":"6863:6:69","type":""},{"name":"value2","nativeSrc":"6871:6:69","nodeType":"YulTypedName","src":"6871:6:69","type":""},{"name":"value3","nativeSrc":"6879:6:69","nodeType":"YulTypedName","src":"6879:6:69","type":""}],"src":"6769:765:69"},{"body":{"nativeSrc":"7572:28:69","nodeType":"YulBlock","src":"7572:28:69","statements":[{"nativeSrc":"7582:12:69","nodeType":"YulAssignment","src":"7582:12:69","value":{"name":"value","nativeSrc":"7589:5:69","nodeType":"YulIdentifier","src":"7589:5:69"},"variableNames":[{"name":"ret","nativeSrc":"7582:3:69","nodeType":"YulIdentifier","src":"7582:3:69"}]}]},"name":"identity","nativeSrc":"7540:60:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7558:5:69","nodeType":"YulTypedName","src":"7558:5:69","type":""}],"returnVariables":[{"name":"ret","nativeSrc":"7568:3:69","nodeType":"YulTypedName","src":"7568:3:69","type":""}],"src":"7540:60:69"},{"body":{"nativeSrc":"7666:82:69","nodeType":"YulBlock","src":"7666:82:69","statements":[{"nativeSrc":"7676:66:69","nodeType":"YulAssignment","src":"7676:66:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"7734:5:69","nodeType":"YulIdentifier","src":"7734:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"7716:17:69","nodeType":"YulIdentifier","src":"7716:17:69"},"nativeSrc":"7716:24:69","nodeType":"YulFunctionCall","src":"7716:24:69"}],"functionName":{"name":"identity","nativeSrc":"7707:8:69","nodeType":"YulIdentifier","src":"7707:8:69"},"nativeSrc":"7707:34:69","nodeType":"YulFunctionCall","src":"7707:34:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"7689:17:69","nodeType":"YulIdentifier","src":"7689:17:69"},"nativeSrc":"7689:53:69","nodeType":"YulFunctionCall","src":"7689:53:69"},"variableNames":[{"name":"converted","nativeSrc":"7676:9:69","nodeType":"YulIdentifier","src":"7676:9:69"}]}]},"name":"convert_t_uint160_to_t_uint160","nativeSrc":"7606:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7646:5:69","nodeType":"YulTypedName","src":"7646:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"7656:9:69","nodeType":"YulTypedName","src":"7656:9:69","type":""}],"src":"7606:142:69"},{"body":{"nativeSrc":"7814:66:69","nodeType":"YulBlock","src":"7814:66:69","statements":[{"nativeSrc":"7824:50:69","nodeType":"YulAssignment","src":"7824:50:69","value":{"arguments":[{"name":"value","nativeSrc":"7868:5:69","nodeType":"YulIdentifier","src":"7868:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_uint160","nativeSrc":"7837:30:69","nodeType":"YulIdentifier","src":"7837:30:69"},"nativeSrc":"7837:37:69","nodeType":"YulFunctionCall","src":"7837:37:69"},"variableNames":[{"name":"converted","nativeSrc":"7824:9:69","nodeType":"YulIdentifier","src":"7824:9:69"}]}]},"name":"convert_t_uint160_to_t_address","nativeSrc":"7754:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7794:5:69","nodeType":"YulTypedName","src":"7794:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"7804:9:69","nodeType":"YulTypedName","src":"7804:9:69","type":""}],"src":"7754:126:69"},{"body":{"nativeSrc":"7968:66:69","nodeType":"YulBlock","src":"7968:66:69","statements":[{"nativeSrc":"7978:50:69","nodeType":"YulAssignment","src":"7978:50:69","value":{"arguments":[{"name":"value","nativeSrc":"8022:5:69","nodeType":"YulIdentifier","src":"8022:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"7991:30:69","nodeType":"YulIdentifier","src":"7991:30:69"},"nativeSrc":"7991:37:69","nodeType":"YulFunctionCall","src":"7991:37:69"},"variableNames":[{"name":"converted","nativeSrc":"7978:9:69","nodeType":"YulIdentifier","src":"7978:9:69"}]}]},"name":"convert_t_contract$_IComptroller_$16789_to_t_address","nativeSrc":"7886:148:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7948:5:69","nodeType":"YulTypedName","src":"7948:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"7958:9:69","nodeType":"YulTypedName","src":"7958:9:69","type":""}],"src":"7886:148:69"},{"body":{"nativeSrc":"8127:88:69","nodeType":"YulBlock","src":"8127:88:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"8144:3:69","nodeType":"YulIdentifier","src":"8144:3:69"},{"arguments":[{"name":"value","nativeSrc":"8202:5:69","nodeType":"YulIdentifier","src":"8202:5:69"}],"functionName":{"name":"convert_t_contract$_IComptroller_$16789_to_t_address","nativeSrc":"8149:52:69","nodeType":"YulIdentifier","src":"8149:52:69"},"nativeSrc":"8149:59:69","nodeType":"YulFunctionCall","src":"8149:59:69"}],"functionName":{"name":"mstore","nativeSrc":"8137:6:69","nodeType":"YulIdentifier","src":"8137:6:69"},"nativeSrc":"8137:72:69","nodeType":"YulFunctionCall","src":"8137:72:69"},"nativeSrc":"8137:72:69","nodeType":"YulExpressionStatement","src":"8137:72:69"}]},"name":"abi_encode_t_contract$_IComptroller_$16789_to_t_address_fromStack","nativeSrc":"8040:175:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"8115:5:69","nodeType":"YulTypedName","src":"8115:5:69","type":""},{"name":"pos","nativeSrc":"8122:3:69","nodeType":"YulTypedName","src":"8122:3:69","type":""}],"src":"8040:175:69"},{"body":{"nativeSrc":"8341:146:69","nodeType":"YulBlock","src":"8341:146:69","statements":[{"nativeSrc":"8351:26:69","nodeType":"YulAssignment","src":"8351:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"8363:9:69","nodeType":"YulIdentifier","src":"8363:9:69"},{"kind":"number","nativeSrc":"8374:2:69","nodeType":"YulLiteral","src":"8374:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8359:3:69","nodeType":"YulIdentifier","src":"8359:3:69"},"nativeSrc":"8359:18:69","nodeType":"YulFunctionCall","src":"8359:18:69"},"variableNames":[{"name":"tail","nativeSrc":"8351:4:69","nodeType":"YulIdentifier","src":"8351:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"8453:6:69","nodeType":"YulIdentifier","src":"8453:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"8466:9:69","nodeType":"YulIdentifier","src":"8466:9:69"},{"kind":"number","nativeSrc":"8477:1:69","nodeType":"YulLiteral","src":"8477:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"8462:3:69","nodeType":"YulIdentifier","src":"8462:3:69"},"nativeSrc":"8462:17:69","nodeType":"YulFunctionCall","src":"8462:17:69"}],"functionName":{"name":"abi_encode_t_contract$_IComptroller_$16789_to_t_address_fromStack","nativeSrc":"8387:65:69","nodeType":"YulIdentifier","src":"8387:65:69"},"nativeSrc":"8387:93:69","nodeType":"YulFunctionCall","src":"8387:93:69"},"nativeSrc":"8387:93:69","nodeType":"YulExpressionStatement","src":"8387:93:69"}]},"name":"abi_encode_tuple_t_contract$_IComptroller_$16789__to_t_address__fromStack_reversed","nativeSrc":"8221:266:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8313:9:69","nodeType":"YulTypedName","src":"8313:9:69","type":""},{"name":"value0","nativeSrc":"8325:6:69","nodeType":"YulTypedName","src":"8325:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"8336:4:69","nodeType":"YulTypedName","src":"8336:4:69","type":""}],"src":"8221:266:69"},{"body":{"nativeSrc":"8576:391:69","nodeType":"YulBlock","src":"8576:391:69","statements":[{"body":{"nativeSrc":"8622:83:69","nodeType":"YulBlock","src":"8622:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"8624:77:69","nodeType":"YulIdentifier","src":"8624:77:69"},"nativeSrc":"8624:79:69","nodeType":"YulFunctionCall","src":"8624:79:69"},"nativeSrc":"8624:79:69","nodeType":"YulExpressionStatement","src":"8624:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"8597:7:69","nodeType":"YulIdentifier","src":"8597:7:69"},{"name":"headStart","nativeSrc":"8606:9:69","nodeType":"YulIdentifier","src":"8606:9:69"}],"functionName":{"name":"sub","nativeSrc":"8593:3:69","nodeType":"YulIdentifier","src":"8593:3:69"},"nativeSrc":"8593:23:69","nodeType":"YulFunctionCall","src":"8593:23:69"},{"kind":"number","nativeSrc":"8618:2:69","nodeType":"YulLiteral","src":"8618:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"8589:3:69","nodeType":"YulIdentifier","src":"8589:3:69"},"nativeSrc":"8589:32:69","nodeType":"YulFunctionCall","src":"8589:32:69"},"nativeSrc":"8586:119:69","nodeType":"YulIf","src":"8586:119:69"},{"nativeSrc":"8715:117:69","nodeType":"YulBlock","src":"8715:117:69","statements":[{"nativeSrc":"8730:15:69","nodeType":"YulVariableDeclaration","src":"8730:15:69","value":{"kind":"number","nativeSrc":"8744:1:69","nodeType":"YulLiteral","src":"8744:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"8734:6:69","nodeType":"YulTypedName","src":"8734:6:69","type":""}]},{"nativeSrc":"8759:63:69","nodeType":"YulAssignment","src":"8759:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8794:9:69","nodeType":"YulIdentifier","src":"8794:9:69"},{"name":"offset","nativeSrc":"8805:6:69","nodeType":"YulIdentifier","src":"8805:6:69"}],"functionName":{"name":"add","nativeSrc":"8790:3:69","nodeType":"YulIdentifier","src":"8790:3:69"},"nativeSrc":"8790:22:69","nodeType":"YulFunctionCall","src":"8790:22:69"},{"name":"dataEnd","nativeSrc":"8814:7:69","nodeType":"YulIdentifier","src":"8814:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"8769:20:69","nodeType":"YulIdentifier","src":"8769:20:69"},"nativeSrc":"8769:53:69","nodeType":"YulFunctionCall","src":"8769:53:69"},"variableNames":[{"name":"value0","nativeSrc":"8759:6:69","nodeType":"YulIdentifier","src":"8759:6:69"}]}]},{"nativeSrc":"8842:118:69","nodeType":"YulBlock","src":"8842:118:69","statements":[{"nativeSrc":"8857:16:69","nodeType":"YulVariableDeclaration","src":"8857:16:69","value":{"kind":"number","nativeSrc":"8871:2:69","nodeType":"YulLiteral","src":"8871:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"8861:6:69","nodeType":"YulTypedName","src":"8861:6:69","type":""}]},{"nativeSrc":"8887:63:69","nodeType":"YulAssignment","src":"8887:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8922:9:69","nodeType":"YulIdentifier","src":"8922:9:69"},{"name":"offset","nativeSrc":"8933:6:69","nodeType":"YulIdentifier","src":"8933:6:69"}],"functionName":{"name":"add","nativeSrc":"8918:3:69","nodeType":"YulIdentifier","src":"8918:3:69"},"nativeSrc":"8918:22:69","nodeType":"YulFunctionCall","src":"8918:22:69"},{"name":"dataEnd","nativeSrc":"8942:7:69","nodeType":"YulIdentifier","src":"8942:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"8897:20:69","nodeType":"YulIdentifier","src":"8897:20:69"},"nativeSrc":"8897:53:69","nodeType":"YulFunctionCall","src":"8897:53:69"},"variableNames":[{"name":"value1","nativeSrc":"8887:6:69","nodeType":"YulIdentifier","src":"8887:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint256t_address","nativeSrc":"8493:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8538:9:69","nodeType":"YulTypedName","src":"8538:9:69","type":""},{"name":"dataEnd","nativeSrc":"8549:7:69","nodeType":"YulTypedName","src":"8549:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"8561:6:69","nodeType":"YulTypedName","src":"8561:6:69","type":""},{"name":"value1","nativeSrc":"8569:6:69","nodeType":"YulTypedName","src":"8569:6:69","type":""}],"src":"8493:474:69"},{"body":{"nativeSrc":"9049:66:69","nodeType":"YulBlock","src":"9049:66:69","statements":[{"nativeSrc":"9059:50:69","nodeType":"YulAssignment","src":"9059:50:69","value":{"arguments":[{"name":"value","nativeSrc":"9103:5:69","nodeType":"YulIdentifier","src":"9103:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"9072:30:69","nodeType":"YulIdentifier","src":"9072:30:69"},"nativeSrc":"9072:37:69","nodeType":"YulFunctionCall","src":"9072:37:69"},"variableNames":[{"name":"converted","nativeSrc":"9059:9:69","nodeType":"YulIdentifier","src":"9059:9:69"}]}]},"name":"convert_t_contract$_VToken_$15506_to_t_address","nativeSrc":"8973:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"9029:5:69","nodeType":"YulTypedName","src":"9029:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"9039:9:69","nodeType":"YulTypedName","src":"9039:9:69","type":""}],"src":"8973:142:69"},{"body":{"nativeSrc":"9202:82:69","nodeType":"YulBlock","src":"9202:82:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"9219:3:69","nodeType":"YulIdentifier","src":"9219:3:69"},{"arguments":[{"name":"value","nativeSrc":"9271:5:69","nodeType":"YulIdentifier","src":"9271:5:69"}],"functionName":{"name":"convert_t_contract$_VToken_$15506_to_t_address","nativeSrc":"9224:46:69","nodeType":"YulIdentifier","src":"9224:46:69"},"nativeSrc":"9224:53:69","nodeType":"YulFunctionCall","src":"9224:53:69"}],"functionName":{"name":"mstore","nativeSrc":"9212:6:69","nodeType":"YulIdentifier","src":"9212:6:69"},"nativeSrc":"9212:66:69","nodeType":"YulFunctionCall","src":"9212:66:69"},"nativeSrc":"9212:66:69","nodeType":"YulExpressionStatement","src":"9212:66:69"}]},"name":"abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack","nativeSrc":"9121:163:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"9190:5:69","nodeType":"YulTypedName","src":"9190:5:69","type":""},{"name":"pos","nativeSrc":"9197:3:69","nodeType":"YulTypedName","src":"9197:3:69","type":""}],"src":"9121:163:69"},{"body":{"nativeSrc":"9404:140:69","nodeType":"YulBlock","src":"9404:140:69","statements":[{"nativeSrc":"9414:26:69","nodeType":"YulAssignment","src":"9414:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"9426:9:69","nodeType":"YulIdentifier","src":"9426:9:69"},{"kind":"number","nativeSrc":"9437:2:69","nodeType":"YulLiteral","src":"9437:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"9422:3:69","nodeType":"YulIdentifier","src":"9422:3:69"},"nativeSrc":"9422:18:69","nodeType":"YulFunctionCall","src":"9422:18:69"},"variableNames":[{"name":"tail","nativeSrc":"9414:4:69","nodeType":"YulIdentifier","src":"9414:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"9510:6:69","nodeType":"YulIdentifier","src":"9510:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"9523:9:69","nodeType":"YulIdentifier","src":"9523:9:69"},{"kind":"number","nativeSrc":"9534:1:69","nodeType":"YulLiteral","src":"9534:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"9519:3:69","nodeType":"YulIdentifier","src":"9519:3:69"},"nativeSrc":"9519:17:69","nodeType":"YulFunctionCall","src":"9519:17:69"}],"functionName":{"name":"abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack","nativeSrc":"9450:59:69","nodeType":"YulIdentifier","src":"9450:59:69"},"nativeSrc":"9450:87:69","nodeType":"YulFunctionCall","src":"9450:87:69"},"nativeSrc":"9450:87:69","nodeType":"YulExpressionStatement","src":"9450:87:69"}]},"name":"abi_encode_tuple_t_contract$_VToken_$15506__to_t_address__fromStack_reversed","nativeSrc":"9290:254:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"9376:9:69","nodeType":"YulTypedName","src":"9376:9:69","type":""},{"name":"value0","nativeSrc":"9388:6:69","nodeType":"YulTypedName","src":"9388:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"9399:4:69","nodeType":"YulTypedName","src":"9399:4:69","type":""}],"src":"9290:254:69"},{"body":{"nativeSrc":"9650:519:69","nodeType":"YulBlock","src":"9650:519:69","statements":[{"body":{"nativeSrc":"9696:83:69","nodeType":"YulBlock","src":"9696:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"9698:77:69","nodeType":"YulIdentifier","src":"9698:77:69"},"nativeSrc":"9698:79:69","nodeType":"YulFunctionCall","src":"9698:79:69"},"nativeSrc":"9698:79:69","nodeType":"YulExpressionStatement","src":"9698:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"9671:7:69","nodeType":"YulIdentifier","src":"9671:7:69"},{"name":"headStart","nativeSrc":"9680:9:69","nodeType":"YulIdentifier","src":"9680:9:69"}],"functionName":{"name":"sub","nativeSrc":"9667:3:69","nodeType":"YulIdentifier","src":"9667:3:69"},"nativeSrc":"9667:23:69","nodeType":"YulFunctionCall","src":"9667:23:69"},{"kind":"number","nativeSrc":"9692:2:69","nodeType":"YulLiteral","src":"9692:2:69","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"9663:3:69","nodeType":"YulIdentifier","src":"9663:3:69"},"nativeSrc":"9663:32:69","nodeType":"YulFunctionCall","src":"9663:32:69"},"nativeSrc":"9660:119:69","nodeType":"YulIf","src":"9660:119:69"},{"nativeSrc":"9789:117:69","nodeType":"YulBlock","src":"9789:117:69","statements":[{"nativeSrc":"9804:15:69","nodeType":"YulVariableDeclaration","src":"9804:15:69","value":{"kind":"number","nativeSrc":"9818:1:69","nodeType":"YulLiteral","src":"9818:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"9808:6:69","nodeType":"YulTypedName","src":"9808:6:69","type":""}]},{"nativeSrc":"9833:63:69","nodeType":"YulAssignment","src":"9833:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"9868:9:69","nodeType":"YulIdentifier","src":"9868:9:69"},{"name":"offset","nativeSrc":"9879:6:69","nodeType":"YulIdentifier","src":"9879:6:69"}],"functionName":{"name":"add","nativeSrc":"9864:3:69","nodeType":"YulIdentifier","src":"9864:3:69"},"nativeSrc":"9864:22:69","nodeType":"YulFunctionCall","src":"9864:22:69"},{"name":"dataEnd","nativeSrc":"9888:7:69","nodeType":"YulIdentifier","src":"9888:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"9843:20:69","nodeType":"YulIdentifier","src":"9843:20:69"},"nativeSrc":"9843:53:69","nodeType":"YulFunctionCall","src":"9843:53:69"},"variableNames":[{"name":"value0","nativeSrc":"9833:6:69","nodeType":"YulIdentifier","src":"9833:6:69"}]}]},{"nativeSrc":"9916:118:69","nodeType":"YulBlock","src":"9916:118:69","statements":[{"nativeSrc":"9931:16:69","nodeType":"YulVariableDeclaration","src":"9931:16:69","value":{"kind":"number","nativeSrc":"9945:2:69","nodeType":"YulLiteral","src":"9945:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"9935:6:69","nodeType":"YulTypedName","src":"9935:6:69","type":""}]},{"nativeSrc":"9961:63:69","nodeType":"YulAssignment","src":"9961:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"9996:9:69","nodeType":"YulIdentifier","src":"9996:9:69"},{"name":"offset","nativeSrc":"10007:6:69","nodeType":"YulIdentifier","src":"10007:6:69"}],"functionName":{"name":"add","nativeSrc":"9992:3:69","nodeType":"YulIdentifier","src":"9992:3:69"},"nativeSrc":"9992:22:69","nodeType":"YulFunctionCall","src":"9992:22:69"},{"name":"dataEnd","nativeSrc":"10016:7:69","nodeType":"YulIdentifier","src":"10016:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"9971:20:69","nodeType":"YulIdentifier","src":"9971:20:69"},"nativeSrc":"9971:53:69","nodeType":"YulFunctionCall","src":"9971:53:69"},"variableNames":[{"name":"value1","nativeSrc":"9961:6:69","nodeType":"YulIdentifier","src":"9961:6:69"}]}]},{"nativeSrc":"10044:118:69","nodeType":"YulBlock","src":"10044:118:69","statements":[{"nativeSrc":"10059:16:69","nodeType":"YulVariableDeclaration","src":"10059:16:69","value":{"kind":"number","nativeSrc":"10073:2:69","nodeType":"YulLiteral","src":"10073:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"10063:6:69","nodeType":"YulTypedName","src":"10063:6:69","type":""}]},{"nativeSrc":"10089:63:69","nodeType":"YulAssignment","src":"10089:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10124:9:69","nodeType":"YulIdentifier","src":"10124:9:69"},{"name":"offset","nativeSrc":"10135:6:69","nodeType":"YulIdentifier","src":"10135:6:69"}],"functionName":{"name":"add","nativeSrc":"10120:3:69","nodeType":"YulIdentifier","src":"10120:3:69"},"nativeSrc":"10120:22:69","nodeType":"YulFunctionCall","src":"10120:22:69"},{"name":"dataEnd","nativeSrc":"10144:7:69","nodeType":"YulIdentifier","src":"10144:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"10099:20:69","nodeType":"YulIdentifier","src":"10099:20:69"},"nativeSrc":"10099:53:69","nodeType":"YulFunctionCall","src":"10099:53:69"},"variableNames":[{"name":"value2","nativeSrc":"10089:6:69","nodeType":"YulIdentifier","src":"10089:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint256t_addresst_address","nativeSrc":"9550:619:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"9604:9:69","nodeType":"YulTypedName","src":"9604:9:69","type":""},{"name":"dataEnd","nativeSrc":"9615:7:69","nodeType":"YulTypedName","src":"9615:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"9627:6:69","nodeType":"YulTypedName","src":"9627:6:69","type":""},{"name":"value1","nativeSrc":"9635:6:69","nodeType":"YulTypedName","src":"9635:6:69","type":""},{"name":"value2","nativeSrc":"9643:6:69","nodeType":"YulTypedName","src":"9643:6:69","type":""}],"src":"9550:619:69"},{"body":{"nativeSrc":"10267:66:69","nodeType":"YulBlock","src":"10267:66:69","statements":[{"nativeSrc":"10277:50:69","nodeType":"YulAssignment","src":"10277:50:69","value":{"arguments":[{"name":"value","nativeSrc":"10321:5:69","nodeType":"YulIdentifier","src":"10321:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"10290:30:69","nodeType":"YulIdentifier","src":"10290:30:69"},"nativeSrc":"10290:37:69","nodeType":"YulFunctionCall","src":"10290:37:69"},"variableNames":[{"name":"converted","nativeSrc":"10277:9:69","nodeType":"YulIdentifier","src":"10277:9:69"}]}]},"name":"convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address","nativeSrc":"10175:158:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"10247:5:69","nodeType":"YulTypedName","src":"10247:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"10257:9:69","nodeType":"YulTypedName","src":"10257:9:69","type":""}],"src":"10175:158:69"},{"body":{"nativeSrc":"10436:98:69","nodeType":"YulBlock","src":"10436:98:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"10453:3:69","nodeType":"YulIdentifier","src":"10453:3:69"},{"arguments":[{"name":"value","nativeSrc":"10521:5:69","nodeType":"YulIdentifier","src":"10521:5:69"}],"functionName":{"name":"convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address","nativeSrc":"10458:62:69","nodeType":"YulIdentifier","src":"10458:62:69"},"nativeSrc":"10458:69:69","nodeType":"YulFunctionCall","src":"10458:69:69"}],"functionName":{"name":"mstore","nativeSrc":"10446:6:69","nodeType":"YulIdentifier","src":"10446:6:69"},"nativeSrc":"10446:82:69","nodeType":"YulFunctionCall","src":"10446:82:69"},"nativeSrc":"10446:82:69","nodeType":"YulExpressionStatement","src":"10446:82:69"}]},"name":"abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack","nativeSrc":"10339:195:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"10424:5:69","nodeType":"YulTypedName","src":"10424:5:69","type":""},{"name":"pos","nativeSrc":"10431:3:69","nodeType":"YulTypedName","src":"10431:3:69","type":""}],"src":"10339:195:69"},{"body":{"nativeSrc":"10670:156:69","nodeType":"YulBlock","src":"10670:156:69","statements":[{"nativeSrc":"10680:26:69","nodeType":"YulAssignment","src":"10680:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"10692:9:69","nodeType":"YulIdentifier","src":"10692:9:69"},{"kind":"number","nativeSrc":"10703:2:69","nodeType":"YulLiteral","src":"10703:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"10688:3:69","nodeType":"YulIdentifier","src":"10688:3:69"},"nativeSrc":"10688:18:69","nodeType":"YulFunctionCall","src":"10688:18:69"},"variableNames":[{"name":"tail","nativeSrc":"10680:4:69","nodeType":"YulIdentifier","src":"10680:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"10792:6:69","nodeType":"YulIdentifier","src":"10792:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"10805:9:69","nodeType":"YulIdentifier","src":"10805:9:69"},{"kind":"number","nativeSrc":"10816:1:69","nodeType":"YulLiteral","src":"10816:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"10801:3:69","nodeType":"YulIdentifier","src":"10801:3:69"},"nativeSrc":"10801:17:69","nodeType":"YulFunctionCall","src":"10801:17:69"}],"functionName":{"name":"abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack","nativeSrc":"10716:75:69","nodeType":"YulIdentifier","src":"10716:75:69"},"nativeSrc":"10716:103:69","nodeType":"YulFunctionCall","src":"10716:103:69"},"nativeSrc":"10716:103:69","nodeType":"YulExpressionStatement","src":"10716:103:69"}]},"name":"abi_encode_tuple_t_contract$_IAccessControlManagerV8_$5080__to_t_address__fromStack_reversed","nativeSrc":"10540:286:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"10642:9:69","nodeType":"YulTypedName","src":"10642:9:69","type":""},{"name":"value0","nativeSrc":"10654:6:69","nodeType":"YulTypedName","src":"10654:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"10665:4:69","nodeType":"YulTypedName","src":"10665:4:69","type":""}],"src":"10540:286:69"},{"body":{"nativeSrc":"10915:391:69","nodeType":"YulBlock","src":"10915:391:69","statements":[{"body":{"nativeSrc":"10961:83:69","nodeType":"YulBlock","src":"10961:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"10963:77:69","nodeType":"YulIdentifier","src":"10963:77:69"},"nativeSrc":"10963:79:69","nodeType":"YulFunctionCall","src":"10963:79:69"},"nativeSrc":"10963:79:69","nodeType":"YulExpressionStatement","src":"10963:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"10936:7:69","nodeType":"YulIdentifier","src":"10936:7:69"},{"name":"headStart","nativeSrc":"10945:9:69","nodeType":"YulIdentifier","src":"10945:9:69"}],"functionName":{"name":"sub","nativeSrc":"10932:3:69","nodeType":"YulIdentifier","src":"10932:3:69"},"nativeSrc":"10932:23:69","nodeType":"YulFunctionCall","src":"10932:23:69"},{"kind":"number","nativeSrc":"10957:2:69","nodeType":"YulLiteral","src":"10957:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"10928:3:69","nodeType":"YulIdentifier","src":"10928:3:69"},"nativeSrc":"10928:32:69","nodeType":"YulFunctionCall","src":"10928:32:69"},"nativeSrc":"10925:119:69","nodeType":"YulIf","src":"10925:119:69"},{"nativeSrc":"11054:117:69","nodeType":"YulBlock","src":"11054:117:69","statements":[{"nativeSrc":"11069:15:69","nodeType":"YulVariableDeclaration","src":"11069:15:69","value":{"kind":"number","nativeSrc":"11083:1:69","nodeType":"YulLiteral","src":"11083:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"11073:6:69","nodeType":"YulTypedName","src":"11073:6:69","type":""}]},{"nativeSrc":"11098:63:69","nodeType":"YulAssignment","src":"11098:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"11133:9:69","nodeType":"YulIdentifier","src":"11133:9:69"},{"name":"offset","nativeSrc":"11144:6:69","nodeType":"YulIdentifier","src":"11144:6:69"}],"functionName":{"name":"add","nativeSrc":"11129:3:69","nodeType":"YulIdentifier","src":"11129:3:69"},"nativeSrc":"11129:22:69","nodeType":"YulFunctionCall","src":"11129:22:69"},{"name":"dataEnd","nativeSrc":"11153:7:69","nodeType":"YulIdentifier","src":"11153:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"11108:20:69","nodeType":"YulIdentifier","src":"11108:20:69"},"nativeSrc":"11108:53:69","nodeType":"YulFunctionCall","src":"11108:53:69"},"variableNames":[{"name":"value0","nativeSrc":"11098:6:69","nodeType":"YulIdentifier","src":"11098:6:69"}]}]},{"nativeSrc":"11181:118:69","nodeType":"YulBlock","src":"11181:118:69","statements":[{"nativeSrc":"11196:16:69","nodeType":"YulVariableDeclaration","src":"11196:16:69","value":{"kind":"number","nativeSrc":"11210:2:69","nodeType":"YulLiteral","src":"11210:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"11200:6:69","nodeType":"YulTypedName","src":"11200:6:69","type":""}]},{"nativeSrc":"11226:63:69","nodeType":"YulAssignment","src":"11226:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"11261:9:69","nodeType":"YulIdentifier","src":"11261:9:69"},{"name":"offset","nativeSrc":"11272:6:69","nodeType":"YulIdentifier","src":"11272:6:69"}],"functionName":{"name":"add","nativeSrc":"11257:3:69","nodeType":"YulIdentifier","src":"11257:3:69"},"nativeSrc":"11257:22:69","nodeType":"YulFunctionCall","src":"11257:22:69"},{"name":"dataEnd","nativeSrc":"11281:7:69","nodeType":"YulIdentifier","src":"11281:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"11236:20:69","nodeType":"YulIdentifier","src":"11236:20:69"},"nativeSrc":"11236:53:69","nodeType":"YulFunctionCall","src":"11236:53:69"},"variableNames":[{"name":"value1","nativeSrc":"11226:6:69","nodeType":"YulIdentifier","src":"11226:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_address","nativeSrc":"10832:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"10877:9:69","nodeType":"YulTypedName","src":"10877:9:69","type":""},{"name":"dataEnd","nativeSrc":"10888:7:69","nodeType":"YulTypedName","src":"10888:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"10900:6:69","nodeType":"YulTypedName","src":"10900:6:69","type":""},{"name":"value1","nativeSrc":"10908:6:69","nodeType":"YulTypedName","src":"10908:6:69","type":""}],"src":"10832:474:69"},{"body":{"nativeSrc":"11375:80:69","nodeType":"YulBlock","src":"11375:80:69","statements":[{"nativeSrc":"11385:22:69","nodeType":"YulAssignment","src":"11385:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"11400:6:69","nodeType":"YulIdentifier","src":"11400:6:69"}],"functionName":{"name":"mload","nativeSrc":"11394:5:69","nodeType":"YulIdentifier","src":"11394:5:69"},"nativeSrc":"11394:13:69","nodeType":"YulFunctionCall","src":"11394:13:69"},"variableNames":[{"name":"value","nativeSrc":"11385:5:69","nodeType":"YulIdentifier","src":"11385:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"11443:5:69","nodeType":"YulIdentifier","src":"11443:5:69"}],"functionName":{"name":"validator_revert_t_uint256","nativeSrc":"11416:26:69","nodeType":"YulIdentifier","src":"11416:26:69"},"nativeSrc":"11416:33:69","nodeType":"YulFunctionCall","src":"11416:33:69"},"nativeSrc":"11416:33:69","nodeType":"YulExpressionStatement","src":"11416:33:69"}]},"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"11312:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"11353:6:69","nodeType":"YulTypedName","src":"11353:6:69","type":""},{"name":"end","nativeSrc":"11361:3:69","nodeType":"YulTypedName","src":"11361:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"11369:5:69","nodeType":"YulTypedName","src":"11369:5:69","type":""}],"src":"11312:143:69"},{"body":{"nativeSrc":"11538:274:69","nodeType":"YulBlock","src":"11538:274:69","statements":[{"body":{"nativeSrc":"11584:83:69","nodeType":"YulBlock","src":"11584:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"11586:77:69","nodeType":"YulIdentifier","src":"11586:77:69"},"nativeSrc":"11586:79:69","nodeType":"YulFunctionCall","src":"11586:79:69"},"nativeSrc":"11586:79:69","nodeType":"YulExpressionStatement","src":"11586:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"11559:7:69","nodeType":"YulIdentifier","src":"11559:7:69"},{"name":"headStart","nativeSrc":"11568:9:69","nodeType":"YulIdentifier","src":"11568:9:69"}],"functionName":{"name":"sub","nativeSrc":"11555:3:69","nodeType":"YulIdentifier","src":"11555:3:69"},"nativeSrc":"11555:23:69","nodeType":"YulFunctionCall","src":"11555:23:69"},{"kind":"number","nativeSrc":"11580:2:69","nodeType":"YulLiteral","src":"11580:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"11551:3:69","nodeType":"YulIdentifier","src":"11551:3:69"},"nativeSrc":"11551:32:69","nodeType":"YulFunctionCall","src":"11551:32:69"},"nativeSrc":"11548:119:69","nodeType":"YulIf","src":"11548:119:69"},{"nativeSrc":"11677:128:69","nodeType":"YulBlock","src":"11677:128:69","statements":[{"nativeSrc":"11692:15:69","nodeType":"YulVariableDeclaration","src":"11692:15:69","value":{"kind":"number","nativeSrc":"11706:1:69","nodeType":"YulLiteral","src":"11706:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"11696:6:69","nodeType":"YulTypedName","src":"11696:6:69","type":""}]},{"nativeSrc":"11721:74:69","nodeType":"YulAssignment","src":"11721:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"11767:9:69","nodeType":"YulIdentifier","src":"11767:9:69"},{"name":"offset","nativeSrc":"11778:6:69","nodeType":"YulIdentifier","src":"11778:6:69"}],"functionName":{"name":"add","nativeSrc":"11763:3:69","nodeType":"YulIdentifier","src":"11763:3:69"},"nativeSrc":"11763:22:69","nodeType":"YulFunctionCall","src":"11763:22:69"},{"name":"dataEnd","nativeSrc":"11787:7:69","nodeType":"YulIdentifier","src":"11787:7:69"}],"functionName":{"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"11731:31:69","nodeType":"YulIdentifier","src":"11731:31:69"},"nativeSrc":"11731:64:69","nodeType":"YulFunctionCall","src":"11731:64:69"},"variableNames":[{"name":"value0","nativeSrc":"11721:6:69","nodeType":"YulIdentifier","src":"11721:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nativeSrc":"11461:351:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"11508:9:69","nodeType":"YulTypedName","src":"11508:9:69","type":""},{"name":"dataEnd","nativeSrc":"11519:7:69","nodeType":"YulTypedName","src":"11519:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"11531:6:69","nodeType":"YulTypedName","src":"11531:6:69","type":""}],"src":"11461:351:69"},{"body":{"nativeSrc":"11846:152:69","nodeType":"YulBlock","src":"11846:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"11863:1:69","nodeType":"YulLiteral","src":"11863:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"11866:77:69","nodeType":"YulLiteral","src":"11866:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"11856:6:69","nodeType":"YulIdentifier","src":"11856:6:69"},"nativeSrc":"11856:88:69","nodeType":"YulFunctionCall","src":"11856:88:69"},"nativeSrc":"11856:88:69","nodeType":"YulExpressionStatement","src":"11856:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"11960:1:69","nodeType":"YulLiteral","src":"11960:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"11963:4:69","nodeType":"YulLiteral","src":"11963:4:69","type":"","value":"0x11"}],"functionName":{"name":"mstore","nativeSrc":"11953:6:69","nodeType":"YulIdentifier","src":"11953:6:69"},"nativeSrc":"11953:15:69","nodeType":"YulFunctionCall","src":"11953:15:69"},"nativeSrc":"11953:15:69","nodeType":"YulExpressionStatement","src":"11953:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"11984:1:69","nodeType":"YulLiteral","src":"11984:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"11987:4:69","nodeType":"YulLiteral","src":"11987:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"11977:6:69","nodeType":"YulIdentifier","src":"11977:6:69"},"nativeSrc":"11977:15:69","nodeType":"YulFunctionCall","src":"11977:15:69"},"nativeSrc":"11977:15:69","nodeType":"YulExpressionStatement","src":"11977:15:69"}]},"name":"panic_error_0x11","nativeSrc":"11818:180:69","nodeType":"YulFunctionDefinition","src":"11818:180:69"},{"body":{"nativeSrc":"12052:362:69","nodeType":"YulBlock","src":"12052:362:69","statements":[{"nativeSrc":"12062:25:69","nodeType":"YulAssignment","src":"12062:25:69","value":{"arguments":[{"name":"x","nativeSrc":"12085:1:69","nodeType":"YulIdentifier","src":"12085:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"12067:17:69","nodeType":"YulIdentifier","src":"12067:17:69"},"nativeSrc":"12067:20:69","nodeType":"YulFunctionCall","src":"12067:20:69"},"variableNames":[{"name":"x","nativeSrc":"12062:1:69","nodeType":"YulIdentifier","src":"12062:1:69"}]},{"nativeSrc":"12096:25:69","nodeType":"YulAssignment","src":"12096:25:69","value":{"arguments":[{"name":"y","nativeSrc":"12119:1:69","nodeType":"YulIdentifier","src":"12119:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"12101:17:69","nodeType":"YulIdentifier","src":"12101:17:69"},"nativeSrc":"12101:20:69","nodeType":"YulFunctionCall","src":"12101:20:69"},"variableNames":[{"name":"y","nativeSrc":"12096:1:69","nodeType":"YulIdentifier","src":"12096:1:69"}]},{"nativeSrc":"12130:28:69","nodeType":"YulVariableDeclaration","src":"12130:28:69","value":{"arguments":[{"name":"x","nativeSrc":"12153:1:69","nodeType":"YulIdentifier","src":"12153:1:69"},{"name":"y","nativeSrc":"12156:1:69","nodeType":"YulIdentifier","src":"12156:1:69"}],"functionName":{"name":"mul","nativeSrc":"12149:3:69","nodeType":"YulIdentifier","src":"12149:3:69"},"nativeSrc":"12149:9:69","nodeType":"YulFunctionCall","src":"12149:9:69"},"variables":[{"name":"product_raw","nativeSrc":"12134:11:69","nodeType":"YulTypedName","src":"12134:11:69","type":""}]},{"nativeSrc":"12167:41:69","nodeType":"YulAssignment","src":"12167:41:69","value":{"arguments":[{"name":"product_raw","nativeSrc":"12196:11:69","nodeType":"YulIdentifier","src":"12196:11:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"12178:17:69","nodeType":"YulIdentifier","src":"12178:17:69"},"nativeSrc":"12178:30:69","nodeType":"YulFunctionCall","src":"12178:30:69"},"variableNames":[{"name":"product","nativeSrc":"12167:7:69","nodeType":"YulIdentifier","src":"12167:7:69"}]},{"body":{"nativeSrc":"12385:22:69","nodeType":"YulBlock","src":"12385:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"12387:16:69","nodeType":"YulIdentifier","src":"12387:16:69"},"nativeSrc":"12387:18:69","nodeType":"YulFunctionCall","src":"12387:18:69"},"nativeSrc":"12387:18:69","nodeType":"YulExpressionStatement","src":"12387:18:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nativeSrc":"12318:1:69","nodeType":"YulIdentifier","src":"12318:1:69"}],"functionName":{"name":"iszero","nativeSrc":"12311:6:69","nodeType":"YulIdentifier","src":"12311:6:69"},"nativeSrc":"12311:9:69","nodeType":"YulFunctionCall","src":"12311:9:69"},{"arguments":[{"name":"y","nativeSrc":"12341:1:69","nodeType":"YulIdentifier","src":"12341:1:69"},{"arguments":[{"name":"product","nativeSrc":"12348:7:69","nodeType":"YulIdentifier","src":"12348:7:69"},{"name":"x","nativeSrc":"12357:1:69","nodeType":"YulIdentifier","src":"12357:1:69"}],"functionName":{"name":"div","nativeSrc":"12344:3:69","nodeType":"YulIdentifier","src":"12344:3:69"},"nativeSrc":"12344:15:69","nodeType":"YulFunctionCall","src":"12344:15:69"}],"functionName":{"name":"eq","nativeSrc":"12338:2:69","nodeType":"YulIdentifier","src":"12338:2:69"},"nativeSrc":"12338:22:69","nodeType":"YulFunctionCall","src":"12338:22:69"}],"functionName":{"name":"or","nativeSrc":"12291:2:69","nodeType":"YulIdentifier","src":"12291:2:69"},"nativeSrc":"12291:83:69","nodeType":"YulFunctionCall","src":"12291:83:69"}],"functionName":{"name":"iszero","nativeSrc":"12271:6:69","nodeType":"YulIdentifier","src":"12271:6:69"},"nativeSrc":"12271:113:69","nodeType":"YulFunctionCall","src":"12271:113:69"},"nativeSrc":"12268:139:69","nodeType":"YulIf","src":"12268:139:69"}]},"name":"checked_mul_t_uint256","nativeSrc":"12004:410:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"12035:1:69","nodeType":"YulTypedName","src":"12035:1:69","type":""},{"name":"y","nativeSrc":"12038:1:69","nodeType":"YulTypedName","src":"12038:1:69","type":""}],"returnVariables":[{"name":"product","nativeSrc":"12044:7:69","nodeType":"YulTypedName","src":"12044:7:69","type":""}],"src":"12004:410:69"},{"body":{"nativeSrc":"12448:152:69","nodeType":"YulBlock","src":"12448:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"12465:1:69","nodeType":"YulLiteral","src":"12465:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"12468:77:69","nodeType":"YulLiteral","src":"12468:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"12458:6:69","nodeType":"YulIdentifier","src":"12458:6:69"},"nativeSrc":"12458:88:69","nodeType":"YulFunctionCall","src":"12458:88:69"},"nativeSrc":"12458:88:69","nodeType":"YulExpressionStatement","src":"12458:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"12562:1:69","nodeType":"YulLiteral","src":"12562:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"12565:4:69","nodeType":"YulLiteral","src":"12565:4:69","type":"","value":"0x12"}],"functionName":{"name":"mstore","nativeSrc":"12555:6:69","nodeType":"YulIdentifier","src":"12555:6:69"},"nativeSrc":"12555:15:69","nodeType":"YulFunctionCall","src":"12555:15:69"},"nativeSrc":"12555:15:69","nodeType":"YulExpressionStatement","src":"12555:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"12586:1:69","nodeType":"YulLiteral","src":"12586:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"12589:4:69","nodeType":"YulLiteral","src":"12589:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"12579:6:69","nodeType":"YulIdentifier","src":"12579:6:69"},"nativeSrc":"12579:15:69","nodeType":"YulFunctionCall","src":"12579:15:69"},"nativeSrc":"12579:15:69","nodeType":"YulExpressionStatement","src":"12579:15:69"}]},"name":"panic_error_0x12","nativeSrc":"12420:180:69","nodeType":"YulFunctionDefinition","src":"12420:180:69"},{"body":{"nativeSrc":"12648:143:69","nodeType":"YulBlock","src":"12648:143:69","statements":[{"nativeSrc":"12658:25:69","nodeType":"YulAssignment","src":"12658:25:69","value":{"arguments":[{"name":"x","nativeSrc":"12681:1:69","nodeType":"YulIdentifier","src":"12681:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"12663:17:69","nodeType":"YulIdentifier","src":"12663:17:69"},"nativeSrc":"12663:20:69","nodeType":"YulFunctionCall","src":"12663:20:69"},"variableNames":[{"name":"x","nativeSrc":"12658:1:69","nodeType":"YulIdentifier","src":"12658:1:69"}]},{"nativeSrc":"12692:25:69","nodeType":"YulAssignment","src":"12692:25:69","value":{"arguments":[{"name":"y","nativeSrc":"12715:1:69","nodeType":"YulIdentifier","src":"12715:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"12697:17:69","nodeType":"YulIdentifier","src":"12697:17:69"},"nativeSrc":"12697:20:69","nodeType":"YulFunctionCall","src":"12697:20:69"},"variableNames":[{"name":"y","nativeSrc":"12692:1:69","nodeType":"YulIdentifier","src":"12692:1:69"}]},{"body":{"nativeSrc":"12739:22:69","nodeType":"YulBlock","src":"12739:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x12","nativeSrc":"12741:16:69","nodeType":"YulIdentifier","src":"12741:16:69"},"nativeSrc":"12741:18:69","nodeType":"YulFunctionCall","src":"12741:18:69"},"nativeSrc":"12741:18:69","nodeType":"YulExpressionStatement","src":"12741:18:69"}]},"condition":{"arguments":[{"name":"y","nativeSrc":"12736:1:69","nodeType":"YulIdentifier","src":"12736:1:69"}],"functionName":{"name":"iszero","nativeSrc":"12729:6:69","nodeType":"YulIdentifier","src":"12729:6:69"},"nativeSrc":"12729:9:69","nodeType":"YulFunctionCall","src":"12729:9:69"},"nativeSrc":"12726:35:69","nodeType":"YulIf","src":"12726:35:69"},{"nativeSrc":"12771:14:69","nodeType":"YulAssignment","src":"12771:14:69","value":{"arguments":[{"name":"x","nativeSrc":"12780:1:69","nodeType":"YulIdentifier","src":"12780:1:69"},{"name":"y","nativeSrc":"12783:1:69","nodeType":"YulIdentifier","src":"12783:1:69"}],"functionName":{"name":"div","nativeSrc":"12776:3:69","nodeType":"YulIdentifier","src":"12776:3:69"},"nativeSrc":"12776:9:69","nodeType":"YulFunctionCall","src":"12776:9:69"},"variableNames":[{"name":"r","nativeSrc":"12771:1:69","nodeType":"YulIdentifier","src":"12771:1:69"}]}]},"name":"checked_div_t_uint256","nativeSrc":"12606:185:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"12637:1:69","nodeType":"YulTypedName","src":"12637:1:69","type":""},{"name":"y","nativeSrc":"12640:1:69","nodeType":"YulTypedName","src":"12640:1:69","type":""}],"returnVariables":[{"name":"r","nativeSrc":"12646:1:69","nodeType":"YulTypedName","src":"12646:1:69","type":""}],"src":"12606:185:69"},{"body":{"nativeSrc":"12825:152:69","nodeType":"YulBlock","src":"12825:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"12842:1:69","nodeType":"YulLiteral","src":"12842:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"12845:77:69","nodeType":"YulLiteral","src":"12845:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"12835:6:69","nodeType":"YulIdentifier","src":"12835:6:69"},"nativeSrc":"12835:88:69","nodeType":"YulFunctionCall","src":"12835:88:69"},"nativeSrc":"12835:88:69","nodeType":"YulExpressionStatement","src":"12835:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"12939:1:69","nodeType":"YulLiteral","src":"12939:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"12942:4:69","nodeType":"YulLiteral","src":"12942:4:69","type":"","value":"0x22"}],"functionName":{"name":"mstore","nativeSrc":"12932:6:69","nodeType":"YulIdentifier","src":"12932:6:69"},"nativeSrc":"12932:15:69","nodeType":"YulFunctionCall","src":"12932:15:69"},"nativeSrc":"12932:15:69","nodeType":"YulExpressionStatement","src":"12932:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"12963:1:69","nodeType":"YulLiteral","src":"12963:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"12966:4:69","nodeType":"YulLiteral","src":"12966:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"12956:6:69","nodeType":"YulIdentifier","src":"12956:6:69"},"nativeSrc":"12956:15:69","nodeType":"YulFunctionCall","src":"12956:15:69"},"nativeSrc":"12956:15:69","nodeType":"YulExpressionStatement","src":"12956:15:69"}]},"name":"panic_error_0x22","nativeSrc":"12797:180:69","nodeType":"YulFunctionDefinition","src":"12797:180:69"},{"body":{"nativeSrc":"13034:269:69","nodeType":"YulBlock","src":"13034:269:69","statements":[{"nativeSrc":"13044:22:69","nodeType":"YulAssignment","src":"13044:22:69","value":{"arguments":[{"name":"data","nativeSrc":"13058:4:69","nodeType":"YulIdentifier","src":"13058:4:69"},{"kind":"number","nativeSrc":"13064:1:69","nodeType":"YulLiteral","src":"13064:1:69","type":"","value":"2"}],"functionName":{"name":"div","nativeSrc":"13054:3:69","nodeType":"YulIdentifier","src":"13054:3:69"},"nativeSrc":"13054:12:69","nodeType":"YulFunctionCall","src":"13054:12:69"},"variableNames":[{"name":"length","nativeSrc":"13044:6:69","nodeType":"YulIdentifier","src":"13044:6:69"}]},{"nativeSrc":"13075:38:69","nodeType":"YulVariableDeclaration","src":"13075:38:69","value":{"arguments":[{"name":"data","nativeSrc":"13105:4:69","nodeType":"YulIdentifier","src":"13105:4:69"},{"kind":"number","nativeSrc":"13111:1:69","nodeType":"YulLiteral","src":"13111:1:69","type":"","value":"1"}],"functionName":{"name":"and","nativeSrc":"13101:3:69","nodeType":"YulIdentifier","src":"13101:3:69"},"nativeSrc":"13101:12:69","nodeType":"YulFunctionCall","src":"13101:12:69"},"variables":[{"name":"outOfPlaceEncoding","nativeSrc":"13079:18:69","nodeType":"YulTypedName","src":"13079:18:69","type":""}]},{"body":{"nativeSrc":"13152:51:69","nodeType":"YulBlock","src":"13152:51:69","statements":[{"nativeSrc":"13166:27:69","nodeType":"YulAssignment","src":"13166:27:69","value":{"arguments":[{"name":"length","nativeSrc":"13180:6:69","nodeType":"YulIdentifier","src":"13180:6:69"},{"kind":"number","nativeSrc":"13188:4:69","nodeType":"YulLiteral","src":"13188:4:69","type":"","value":"0x7f"}],"functionName":{"name":"and","nativeSrc":"13176:3:69","nodeType":"YulIdentifier","src":"13176:3:69"},"nativeSrc":"13176:17:69","nodeType":"YulFunctionCall","src":"13176:17:69"},"variableNames":[{"name":"length","nativeSrc":"13166:6:69","nodeType":"YulIdentifier","src":"13166:6:69"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nativeSrc":"13132:18:69","nodeType":"YulIdentifier","src":"13132:18:69"}],"functionName":{"name":"iszero","nativeSrc":"13125:6:69","nodeType":"YulIdentifier","src":"13125:6:69"},"nativeSrc":"13125:26:69","nodeType":"YulFunctionCall","src":"13125:26:69"},"nativeSrc":"13122:81:69","nodeType":"YulIf","src":"13122:81:69"},{"body":{"nativeSrc":"13255:42:69","nodeType":"YulBlock","src":"13255:42:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x22","nativeSrc":"13269:16:69","nodeType":"YulIdentifier","src":"13269:16:69"},"nativeSrc":"13269:18:69","nodeType":"YulFunctionCall","src":"13269:18:69"},"nativeSrc":"13269:18:69","nodeType":"YulExpressionStatement","src":"13269:18:69"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nativeSrc":"13219:18:69","nodeType":"YulIdentifier","src":"13219:18:69"},{"arguments":[{"name":"length","nativeSrc":"13242:6:69","nodeType":"YulIdentifier","src":"13242:6:69"},{"kind":"number","nativeSrc":"13250:2:69","nodeType":"YulLiteral","src":"13250:2:69","type":"","value":"32"}],"functionName":{"name":"lt","nativeSrc":"13239:2:69","nodeType":"YulIdentifier","src":"13239:2:69"},"nativeSrc":"13239:14:69","nodeType":"YulFunctionCall","src":"13239:14:69"}],"functionName":{"name":"eq","nativeSrc":"13216:2:69","nodeType":"YulIdentifier","src":"13216:2:69"},"nativeSrc":"13216:38:69","nodeType":"YulFunctionCall","src":"13216:38:69"},"nativeSrc":"13213:84:69","nodeType":"YulIf","src":"13213:84:69"}]},"name":"extract_byte_array_length","nativeSrc":"12983:320:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nativeSrc":"13018:4:69","nodeType":"YulTypedName","src":"13018:4:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"13027:6:69","nodeType":"YulTypedName","src":"13027:6:69","type":""}],"src":"12983:320:69"},{"body":{"nativeSrc":"13351:146:69","nodeType":"YulBlock","src":"13351:146:69","statements":[{"nativeSrc":"13361:23:69","nodeType":"YulAssignment","src":"13361:23:69","value":{"arguments":[{"name":"x","nativeSrc":"13382:1:69","nodeType":"YulIdentifier","src":"13382:1:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"13366:15:69","nodeType":"YulIdentifier","src":"13366:15:69"},"nativeSrc":"13366:18:69","nodeType":"YulFunctionCall","src":"13366:18:69"},"variableNames":[{"name":"x","nativeSrc":"13361:1:69","nodeType":"YulIdentifier","src":"13361:1:69"}]},{"nativeSrc":"13393:23:69","nodeType":"YulAssignment","src":"13393:23:69","value":{"arguments":[{"name":"y","nativeSrc":"13414:1:69","nodeType":"YulIdentifier","src":"13414:1:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"13398:15:69","nodeType":"YulIdentifier","src":"13398:15:69"},"nativeSrc":"13398:18:69","nodeType":"YulFunctionCall","src":"13398:18:69"},"variableNames":[{"name":"y","nativeSrc":"13393:1:69","nodeType":"YulIdentifier","src":"13393:1:69"}]},{"nativeSrc":"13425:16:69","nodeType":"YulAssignment","src":"13425:16:69","value":{"arguments":[{"name":"x","nativeSrc":"13436:1:69","nodeType":"YulIdentifier","src":"13436:1:69"},{"name":"y","nativeSrc":"13439:1:69","nodeType":"YulIdentifier","src":"13439:1:69"}],"functionName":{"name":"add","nativeSrc":"13432:3:69","nodeType":"YulIdentifier","src":"13432:3:69"},"nativeSrc":"13432:9:69","nodeType":"YulFunctionCall","src":"13432:9:69"},"variableNames":[{"name":"sum","nativeSrc":"13425:3:69","nodeType":"YulIdentifier","src":"13425:3:69"}]},{"body":{"nativeSrc":"13468:22:69","nodeType":"YulBlock","src":"13468:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"13470:16:69","nodeType":"YulIdentifier","src":"13470:16:69"},"nativeSrc":"13470:18:69","nodeType":"YulFunctionCall","src":"13470:18:69"},"nativeSrc":"13470:18:69","nodeType":"YulExpressionStatement","src":"13470:18:69"}]},"condition":{"arguments":[{"name":"sum","nativeSrc":"13457:3:69","nodeType":"YulIdentifier","src":"13457:3:69"},{"kind":"number","nativeSrc":"13462:4:69","nodeType":"YulLiteral","src":"13462:4:69","type":"","value":"0xff"}],"functionName":{"name":"gt","nativeSrc":"13454:2:69","nodeType":"YulIdentifier","src":"13454:2:69"},"nativeSrc":"13454:13:69","nodeType":"YulFunctionCall","src":"13454:13:69"},"nativeSrc":"13451:39:69","nodeType":"YulIf","src":"13451:39:69"}]},"name":"checked_add_t_uint8","nativeSrc":"13309:188:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"13338:1:69","nodeType":"YulTypedName","src":"13338:1:69","type":""},{"name":"y","nativeSrc":"13341:1:69","nodeType":"YulTypedName","src":"13341:1:69","type":""}],"returnVariables":[{"name":"sum","nativeSrc":"13347:3:69","nodeType":"YulTypedName","src":"13347:3:69","type":""}],"src":"13309:188:69"},{"body":{"nativeSrc":"13592:28:69","nodeType":"YulBlock","src":"13592:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"13609:1:69","nodeType":"YulLiteral","src":"13609:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"13612:1:69","nodeType":"YulLiteral","src":"13612:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"13602:6:69","nodeType":"YulIdentifier","src":"13602:6:69"},"nativeSrc":"13602:12:69","nodeType":"YulFunctionCall","src":"13602:12:69"},"nativeSrc":"13602:12:69","nodeType":"YulExpressionStatement","src":"13602:12:69"}]},"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"13503:117:69","nodeType":"YulFunctionDefinition","src":"13503:117:69"},{"body":{"nativeSrc":"13654:152:69","nodeType":"YulBlock","src":"13654:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"13671:1:69","nodeType":"YulLiteral","src":"13671:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"13674:77:69","nodeType":"YulLiteral","src":"13674:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"13664:6:69","nodeType":"YulIdentifier","src":"13664:6:69"},"nativeSrc":"13664:88:69","nodeType":"YulFunctionCall","src":"13664:88:69"},"nativeSrc":"13664:88:69","nodeType":"YulExpressionStatement","src":"13664:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"13768:1:69","nodeType":"YulLiteral","src":"13768:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"13771:4:69","nodeType":"YulLiteral","src":"13771:4:69","type":"","value":"0x41"}],"functionName":{"name":"mstore","nativeSrc":"13761:6:69","nodeType":"YulIdentifier","src":"13761:6:69"},"nativeSrc":"13761:15:69","nodeType":"YulFunctionCall","src":"13761:15:69"},"nativeSrc":"13761:15:69","nodeType":"YulExpressionStatement","src":"13761:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"13792:1:69","nodeType":"YulLiteral","src":"13792:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"13795:4:69","nodeType":"YulLiteral","src":"13795:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"13785:6:69","nodeType":"YulIdentifier","src":"13785:6:69"},"nativeSrc":"13785:15:69","nodeType":"YulFunctionCall","src":"13785:15:69"},"nativeSrc":"13785:15:69","nodeType":"YulExpressionStatement","src":"13785:15:69"}]},"name":"panic_error_0x41","nativeSrc":"13626:180:69","nodeType":"YulFunctionDefinition","src":"13626:180:69"},{"body":{"nativeSrc":"13855:238:69","nodeType":"YulBlock","src":"13855:238:69","statements":[{"nativeSrc":"13865:58:69","nodeType":"YulVariableDeclaration","src":"13865:58:69","value":{"arguments":[{"name":"memPtr","nativeSrc":"13887:6:69","nodeType":"YulIdentifier","src":"13887:6:69"},{"arguments":[{"name":"size","nativeSrc":"13917:4:69","nodeType":"YulIdentifier","src":"13917:4:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"13895:21:69","nodeType":"YulIdentifier","src":"13895:21:69"},"nativeSrc":"13895:27:69","nodeType":"YulFunctionCall","src":"13895:27:69"}],"functionName":{"name":"add","nativeSrc":"13883:3:69","nodeType":"YulIdentifier","src":"13883:3:69"},"nativeSrc":"13883:40:69","nodeType":"YulFunctionCall","src":"13883:40:69"},"variables":[{"name":"newFreePtr","nativeSrc":"13869:10:69","nodeType":"YulTypedName","src":"13869:10:69","type":""}]},{"body":{"nativeSrc":"14034:22:69","nodeType":"YulBlock","src":"14034:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"14036:16:69","nodeType":"YulIdentifier","src":"14036:16:69"},"nativeSrc":"14036:18:69","nodeType":"YulFunctionCall","src":"14036:18:69"},"nativeSrc":"14036:18:69","nodeType":"YulExpressionStatement","src":"14036:18:69"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nativeSrc":"13977:10:69","nodeType":"YulIdentifier","src":"13977:10:69"},{"kind":"number","nativeSrc":"13989:18:69","nodeType":"YulLiteral","src":"13989:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"13974:2:69","nodeType":"YulIdentifier","src":"13974:2:69"},"nativeSrc":"13974:34:69","nodeType":"YulFunctionCall","src":"13974:34:69"},{"arguments":[{"name":"newFreePtr","nativeSrc":"14013:10:69","nodeType":"YulIdentifier","src":"14013:10:69"},{"name":"memPtr","nativeSrc":"14025:6:69","nodeType":"YulIdentifier","src":"14025:6:69"}],"functionName":{"name":"lt","nativeSrc":"14010:2:69","nodeType":"YulIdentifier","src":"14010:2:69"},"nativeSrc":"14010:22:69","nodeType":"YulFunctionCall","src":"14010:22:69"}],"functionName":{"name":"or","nativeSrc":"13971:2:69","nodeType":"YulIdentifier","src":"13971:2:69"},"nativeSrc":"13971:62:69","nodeType":"YulFunctionCall","src":"13971:62:69"},"nativeSrc":"13968:88:69","nodeType":"YulIf","src":"13968:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"14072:2:69","nodeType":"YulLiteral","src":"14072:2:69","type":"","value":"64"},{"name":"newFreePtr","nativeSrc":"14076:10:69","nodeType":"YulIdentifier","src":"14076:10:69"}],"functionName":{"name":"mstore","nativeSrc":"14065:6:69","nodeType":"YulIdentifier","src":"14065:6:69"},"nativeSrc":"14065:22:69","nodeType":"YulFunctionCall","src":"14065:22:69"},"nativeSrc":"14065:22:69","nodeType":"YulExpressionStatement","src":"14065:22:69"}]},"name":"finalize_allocation","nativeSrc":"13812:281:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"13841:6:69","nodeType":"YulTypedName","src":"13841:6:69","type":""},{"name":"size","nativeSrc":"13849:4:69","nodeType":"YulTypedName","src":"13849:4:69","type":""}],"src":"13812:281:69"},{"body":{"nativeSrc":"14140:88:69","nodeType":"YulBlock","src":"14140:88:69","statements":[{"nativeSrc":"14150:30:69","nodeType":"YulAssignment","src":"14150:30:69","value":{"arguments":[],"functionName":{"name":"allocate_unbounded","nativeSrc":"14160:18:69","nodeType":"YulIdentifier","src":"14160:18:69"},"nativeSrc":"14160:20:69","nodeType":"YulFunctionCall","src":"14160:20:69"},"variableNames":[{"name":"memPtr","nativeSrc":"14150:6:69","nodeType":"YulIdentifier","src":"14150:6:69"}]},{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"14209:6:69","nodeType":"YulIdentifier","src":"14209:6:69"},{"name":"size","nativeSrc":"14217:4:69","nodeType":"YulIdentifier","src":"14217:4:69"}],"functionName":{"name":"finalize_allocation","nativeSrc":"14189:19:69","nodeType":"YulIdentifier","src":"14189:19:69"},"nativeSrc":"14189:33:69","nodeType":"YulFunctionCall","src":"14189:33:69"},"nativeSrc":"14189:33:69","nodeType":"YulExpressionStatement","src":"14189:33:69"}]},"name":"allocate_memory","nativeSrc":"14099:129:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nativeSrc":"14124:4:69","nodeType":"YulTypedName","src":"14124:4:69","type":""}],"returnVariables":[{"name":"memPtr","nativeSrc":"14133:6:69","nodeType":"YulTypedName","src":"14133:6:69","type":""}],"src":"14099:129:69"},{"body":{"nativeSrc":"14344:229:69","nodeType":"YulBlock","src":"14344:229:69","statements":[{"body":{"nativeSrc":"14449:22:69","nodeType":"YulBlock","src":"14449:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"14451:16:69","nodeType":"YulIdentifier","src":"14451:16:69"},"nativeSrc":"14451:18:69","nodeType":"YulFunctionCall","src":"14451:18:69"},"nativeSrc":"14451:18:69","nodeType":"YulExpressionStatement","src":"14451:18:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"14421:6:69","nodeType":"YulIdentifier","src":"14421:6:69"},{"kind":"number","nativeSrc":"14429:18:69","nodeType":"YulLiteral","src":"14429:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"14418:2:69","nodeType":"YulIdentifier","src":"14418:2:69"},"nativeSrc":"14418:30:69","nodeType":"YulFunctionCall","src":"14418:30:69"},"nativeSrc":"14415:56:69","nodeType":"YulIf","src":"14415:56:69"},{"nativeSrc":"14481:25:69","nodeType":"YulAssignment","src":"14481:25:69","value":{"arguments":[{"name":"length","nativeSrc":"14493:6:69","nodeType":"YulIdentifier","src":"14493:6:69"},{"kind":"number","nativeSrc":"14501:4:69","nodeType":"YulLiteral","src":"14501:4:69","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"14489:3:69","nodeType":"YulIdentifier","src":"14489:3:69"},"nativeSrc":"14489:17:69","nodeType":"YulFunctionCall","src":"14489:17:69"},"variableNames":[{"name":"size","nativeSrc":"14481:4:69","nodeType":"YulIdentifier","src":"14481:4:69"}]},{"nativeSrc":"14543:23:69","nodeType":"YulAssignment","src":"14543:23:69","value":{"arguments":[{"name":"size","nativeSrc":"14555:4:69","nodeType":"YulIdentifier","src":"14555:4:69"},{"kind":"number","nativeSrc":"14561:4:69","nodeType":"YulLiteral","src":"14561:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"14551:3:69","nodeType":"YulIdentifier","src":"14551:3:69"},"nativeSrc":"14551:15:69","nodeType":"YulFunctionCall","src":"14551:15:69"},"variableNames":[{"name":"size","nativeSrc":"14543:4:69","nodeType":"YulIdentifier","src":"14543:4:69"}]}]},"name":"array_allocation_size_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr","nativeSrc":"14234:339:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nativeSrc":"14328:6:69","nodeType":"YulTypedName","src":"14328:6:69","type":""}],"returnVariables":[{"name":"size","nativeSrc":"14339:4:69","nodeType":"YulTypedName","src":"14339:4:69","type":""}],"src":"14234:339:69"},{"body":{"nativeSrc":"14668:28:69","nodeType":"YulBlock","src":"14668:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"14685:1:69","nodeType":"YulLiteral","src":"14685:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"14688:1:69","nodeType":"YulLiteral","src":"14688:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"14678:6:69","nodeType":"YulIdentifier","src":"14678:6:69"},"nativeSrc":"14678:12:69","nodeType":"YulFunctionCall","src":"14678:12:69"},"nativeSrc":"14678:12:69","nodeType":"YulExpressionStatement","src":"14678:12:69"}]},"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"14579:117:69","nodeType":"YulFunctionDefinition","src":"14579:117:69"},{"body":{"nativeSrc":"14775:51:69","nodeType":"YulBlock","src":"14775:51:69","statements":[{"nativeSrc":"14785:35:69","nodeType":"YulAssignment","src":"14785:35:69","value":{"arguments":[{"name":"value","nativeSrc":"14814:5:69","nodeType":"YulIdentifier","src":"14814:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"14796:17:69","nodeType":"YulIdentifier","src":"14796:17:69"},"nativeSrc":"14796:24:69","nodeType":"YulFunctionCall","src":"14796:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"14785:7:69","nodeType":"YulIdentifier","src":"14785:7:69"}]}]},"name":"cleanup_t_contract$_RewardsDistributor_$12324","nativeSrc":"14702:124:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"14757:5:69","nodeType":"YulTypedName","src":"14757:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"14767:7:69","nodeType":"YulTypedName","src":"14767:7:69","type":""}],"src":"14702:124:69"},{"body":{"nativeSrc":"14903:107:69","nodeType":"YulBlock","src":"14903:107:69","statements":[{"body":{"nativeSrc":"14988:16:69","nodeType":"YulBlock","src":"14988:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"14997:1:69","nodeType":"YulLiteral","src":"14997:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"15000:1:69","nodeType":"YulLiteral","src":"15000:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"14990:6:69","nodeType":"YulIdentifier","src":"14990:6:69"},"nativeSrc":"14990:12:69","nodeType":"YulFunctionCall","src":"14990:12:69"},"nativeSrc":"14990:12:69","nodeType":"YulExpressionStatement","src":"14990:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"14926:5:69","nodeType":"YulIdentifier","src":"14926:5:69"},{"arguments":[{"name":"value","nativeSrc":"14979:5:69","nodeType":"YulIdentifier","src":"14979:5:69"}],"functionName":{"name":"cleanup_t_contract$_RewardsDistributor_$12324","nativeSrc":"14933:45:69","nodeType":"YulIdentifier","src":"14933:45:69"},"nativeSrc":"14933:52:69","nodeType":"YulFunctionCall","src":"14933:52:69"}],"functionName":{"name":"eq","nativeSrc":"14923:2:69","nodeType":"YulIdentifier","src":"14923:2:69"},"nativeSrc":"14923:63:69","nodeType":"YulFunctionCall","src":"14923:63:69"}],"functionName":{"name":"iszero","nativeSrc":"14916:6:69","nodeType":"YulIdentifier","src":"14916:6:69"},"nativeSrc":"14916:71:69","nodeType":"YulFunctionCall","src":"14916:71:69"},"nativeSrc":"14913:91:69","nodeType":"YulIf","src":"14913:91:69"}]},"name":"validator_revert_t_contract$_RewardsDistributor_$12324","nativeSrc":"14832:178:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"14896:5:69","nodeType":"YulTypedName","src":"14896:5:69","type":""}],"src":"14832:178:69"},{"body":{"nativeSrc":"15107:108:69","nodeType":"YulBlock","src":"15107:108:69","statements":[{"nativeSrc":"15117:22:69","nodeType":"YulAssignment","src":"15117:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"15132:6:69","nodeType":"YulIdentifier","src":"15132:6:69"}],"functionName":{"name":"mload","nativeSrc":"15126:5:69","nodeType":"YulIdentifier","src":"15126:5:69"},"nativeSrc":"15126:13:69","nodeType":"YulFunctionCall","src":"15126:13:69"},"variableNames":[{"name":"value","nativeSrc":"15117:5:69","nodeType":"YulIdentifier","src":"15117:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"15203:5:69","nodeType":"YulIdentifier","src":"15203:5:69"}],"functionName":{"name":"validator_revert_t_contract$_RewardsDistributor_$12324","nativeSrc":"15148:54:69","nodeType":"YulIdentifier","src":"15148:54:69"},"nativeSrc":"15148:61:69","nodeType":"YulFunctionCall","src":"15148:61:69"},"nativeSrc":"15148:61:69","nodeType":"YulExpressionStatement","src":"15148:61:69"}]},"name":"abi_decode_t_contract$_RewardsDistributor_$12324_fromMemory","nativeSrc":"15016:199:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"15085:6:69","nodeType":"YulTypedName","src":"15085:6:69","type":""},{"name":"end","nativeSrc":"15093:3:69","nodeType":"YulTypedName","src":"15093:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"15101:5:69","nodeType":"YulTypedName","src":"15101:5:69","type":""}],"src":"15016:199:69"},{"body":{"nativeSrc":"15399:675:69","nodeType":"YulBlock","src":"15399:675:69","statements":[{"nativeSrc":"15409:118:69","nodeType":"YulAssignment","src":"15409:118:69","value":{"arguments":[{"arguments":[{"name":"length","nativeSrc":"15519:6:69","nodeType":"YulIdentifier","src":"15519:6:69"}],"functionName":{"name":"array_allocation_size_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr","nativeSrc":"15434:84:69","nodeType":"YulIdentifier","src":"15434:84:69"},"nativeSrc":"15434:92:69","nodeType":"YulFunctionCall","src":"15434:92:69"}],"functionName":{"name":"allocate_memory","nativeSrc":"15418:15:69","nodeType":"YulIdentifier","src":"15418:15:69"},"nativeSrc":"15418:109:69","nodeType":"YulFunctionCall","src":"15418:109:69"},"variableNames":[{"name":"array","nativeSrc":"15409:5:69","nodeType":"YulIdentifier","src":"15409:5:69"}]},{"nativeSrc":"15536:16:69","nodeType":"YulVariableDeclaration","src":"15536:16:69","value":{"name":"array","nativeSrc":"15547:5:69","nodeType":"YulIdentifier","src":"15547:5:69"},"variables":[{"name":"dst","nativeSrc":"15540:3:69","nodeType":"YulTypedName","src":"15540:3:69","type":""}]},{"expression":{"arguments":[{"name":"array","nativeSrc":"15569:5:69","nodeType":"YulIdentifier","src":"15569:5:69"},{"name":"length","nativeSrc":"15576:6:69","nodeType":"YulIdentifier","src":"15576:6:69"}],"functionName":{"name":"mstore","nativeSrc":"15562:6:69","nodeType":"YulIdentifier","src":"15562:6:69"},"nativeSrc":"15562:21:69","nodeType":"YulFunctionCall","src":"15562:21:69"},"nativeSrc":"15562:21:69","nodeType":"YulExpressionStatement","src":"15562:21:69"},{"nativeSrc":"15592:23:69","nodeType":"YulAssignment","src":"15592:23:69","value":{"arguments":[{"name":"array","nativeSrc":"15603:5:69","nodeType":"YulIdentifier","src":"15603:5:69"},{"kind":"number","nativeSrc":"15610:4:69","nodeType":"YulLiteral","src":"15610:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"15599:3:69","nodeType":"YulIdentifier","src":"15599:3:69"},"nativeSrc":"15599:16:69","nodeType":"YulFunctionCall","src":"15599:16:69"},"variableNames":[{"name":"dst","nativeSrc":"15592:3:69","nodeType":"YulIdentifier","src":"15592:3:69"}]},{"nativeSrc":"15625:44:69","nodeType":"YulVariableDeclaration","src":"15625:44:69","value":{"arguments":[{"name":"offset","nativeSrc":"15643:6:69","nodeType":"YulIdentifier","src":"15643:6:69"},{"arguments":[{"name":"length","nativeSrc":"15655:6:69","nodeType":"YulIdentifier","src":"15655:6:69"},{"kind":"number","nativeSrc":"15663:4:69","nodeType":"YulLiteral","src":"15663:4:69","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"15651:3:69","nodeType":"YulIdentifier","src":"15651:3:69"},"nativeSrc":"15651:17:69","nodeType":"YulFunctionCall","src":"15651:17:69"}],"functionName":{"name":"add","nativeSrc":"15639:3:69","nodeType":"YulIdentifier","src":"15639:3:69"},"nativeSrc":"15639:30:69","nodeType":"YulFunctionCall","src":"15639:30:69"},"variables":[{"name":"srcEnd","nativeSrc":"15629:6:69","nodeType":"YulTypedName","src":"15629:6:69","type":""}]},{"body":{"nativeSrc":"15697:103:69","nodeType":"YulBlock","src":"15697:103:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"15711:77:69","nodeType":"YulIdentifier","src":"15711:77:69"},"nativeSrc":"15711:79:69","nodeType":"YulFunctionCall","src":"15711:79:69"},"nativeSrc":"15711:79:69","nodeType":"YulExpressionStatement","src":"15711:79:69"}]},"condition":{"arguments":[{"name":"srcEnd","nativeSrc":"15684:6:69","nodeType":"YulIdentifier","src":"15684:6:69"},{"name":"end","nativeSrc":"15692:3:69","nodeType":"YulIdentifier","src":"15692:3:69"}],"functionName":{"name":"gt","nativeSrc":"15681:2:69","nodeType":"YulIdentifier","src":"15681:2:69"},"nativeSrc":"15681:15:69","nodeType":"YulFunctionCall","src":"15681:15:69"},"nativeSrc":"15678:122:69","nodeType":"YulIf","src":"15678:122:69"},{"body":{"nativeSrc":"15885:183:69","nodeType":"YulBlock","src":"15885:183:69","statements":[{"nativeSrc":"15900:21:69","nodeType":"YulVariableDeclaration","src":"15900:21:69","value":{"name":"src","nativeSrc":"15918:3:69","nodeType":"YulIdentifier","src":"15918:3:69"},"variables":[{"name":"elementPos","nativeSrc":"15904:10:69","nodeType":"YulTypedName","src":"15904:10:69","type":""}]},{"expression":{"arguments":[{"name":"dst","nativeSrc":"15942:3:69","nodeType":"YulIdentifier","src":"15942:3:69"},{"arguments":[{"name":"elementPos","nativeSrc":"16007:10:69","nodeType":"YulIdentifier","src":"16007:10:69"},{"name":"end","nativeSrc":"16019:3:69","nodeType":"YulIdentifier","src":"16019:3:69"}],"functionName":{"name":"abi_decode_t_contract$_RewardsDistributor_$12324_fromMemory","nativeSrc":"15947:59:69","nodeType":"YulIdentifier","src":"15947:59:69"},"nativeSrc":"15947:76:69","nodeType":"YulFunctionCall","src":"15947:76:69"}],"functionName":{"name":"mstore","nativeSrc":"15935:6:69","nodeType":"YulIdentifier","src":"15935:6:69"},"nativeSrc":"15935:89:69","nodeType":"YulFunctionCall","src":"15935:89:69"},"nativeSrc":"15935:89:69","nodeType":"YulExpressionStatement","src":"15935:89:69"},{"nativeSrc":"16037:21:69","nodeType":"YulAssignment","src":"16037:21:69","value":{"arguments":[{"name":"dst","nativeSrc":"16048:3:69","nodeType":"YulIdentifier","src":"16048:3:69"},{"kind":"number","nativeSrc":"16053:4:69","nodeType":"YulLiteral","src":"16053:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"16044:3:69","nodeType":"YulIdentifier","src":"16044:3:69"},"nativeSrc":"16044:14:69","nodeType":"YulFunctionCall","src":"16044:14:69"},"variableNames":[{"name":"dst","nativeSrc":"16037:3:69","nodeType":"YulIdentifier","src":"16037:3:69"}]}]},"condition":{"arguments":[{"name":"src","nativeSrc":"15838:3:69","nodeType":"YulIdentifier","src":"15838:3:69"},{"name":"srcEnd","nativeSrc":"15843:6:69","nodeType":"YulIdentifier","src":"15843:6:69"}],"functionName":{"name":"lt","nativeSrc":"15835:2:69","nodeType":"YulIdentifier","src":"15835:2:69"},"nativeSrc":"15835:15:69","nodeType":"YulFunctionCall","src":"15835:15:69"},"nativeSrc":"15809:259:69","nodeType":"YulForLoop","post":{"nativeSrc":"15851:25:69","nodeType":"YulBlock","src":"15851:25:69","statements":[{"nativeSrc":"15853:21:69","nodeType":"YulAssignment","src":"15853:21:69","value":{"arguments":[{"name":"src","nativeSrc":"15864:3:69","nodeType":"YulIdentifier","src":"15864:3:69"},{"kind":"number","nativeSrc":"15869:4:69","nodeType":"YulLiteral","src":"15869:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"15860:3:69","nodeType":"YulIdentifier","src":"15860:3:69"},"nativeSrc":"15860:14:69","nodeType":"YulFunctionCall","src":"15860:14:69"},"variableNames":[{"name":"src","nativeSrc":"15853:3:69","nodeType":"YulIdentifier","src":"15853:3:69"}]}]},"pre":{"nativeSrc":"15813:21:69","nodeType":"YulBlock","src":"15813:21:69","statements":[{"nativeSrc":"15815:17:69","nodeType":"YulVariableDeclaration","src":"15815:17:69","value":{"name":"offset","nativeSrc":"15826:6:69","nodeType":"YulIdentifier","src":"15826:6:69"},"variables":[{"name":"src","nativeSrc":"15819:3:69","nodeType":"YulTypedName","src":"15819:3:69","type":""}]}]},"src":"15809:259:69"}]},"name":"abi_decode_available_length_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory","nativeSrc":"15258:816:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"15369:6:69","nodeType":"YulTypedName","src":"15369:6:69","type":""},{"name":"length","nativeSrc":"15377:6:69","nodeType":"YulTypedName","src":"15377:6:69","type":""},{"name":"end","nativeSrc":"15385:3:69","nodeType":"YulTypedName","src":"15385:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"15393:5:69","nodeType":"YulTypedName","src":"15393:5:69","type":""}],"src":"15258:816:69"},{"body":{"nativeSrc":"16233:325:69","nodeType":"YulBlock","src":"16233:325:69","statements":[{"body":{"nativeSrc":"16282:83:69","nodeType":"YulBlock","src":"16282:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"16284:77:69","nodeType":"YulIdentifier","src":"16284:77:69"},"nativeSrc":"16284:79:69","nodeType":"YulFunctionCall","src":"16284:79:69"},"nativeSrc":"16284:79:69","nodeType":"YulExpressionStatement","src":"16284:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"16261:6:69","nodeType":"YulIdentifier","src":"16261:6:69"},{"kind":"number","nativeSrc":"16269:4:69","nodeType":"YulLiteral","src":"16269:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"16257:3:69","nodeType":"YulIdentifier","src":"16257:3:69"},"nativeSrc":"16257:17:69","nodeType":"YulFunctionCall","src":"16257:17:69"},{"name":"end","nativeSrc":"16276:3:69","nodeType":"YulIdentifier","src":"16276:3:69"}],"functionName":{"name":"slt","nativeSrc":"16253:3:69","nodeType":"YulIdentifier","src":"16253:3:69"},"nativeSrc":"16253:27:69","nodeType":"YulFunctionCall","src":"16253:27:69"}],"functionName":{"name":"iszero","nativeSrc":"16246:6:69","nodeType":"YulIdentifier","src":"16246:6:69"},"nativeSrc":"16246:35:69","nodeType":"YulFunctionCall","src":"16246:35:69"},"nativeSrc":"16243:122:69","nodeType":"YulIf","src":"16243:122:69"},{"nativeSrc":"16374:27:69","nodeType":"YulVariableDeclaration","src":"16374:27:69","value":{"arguments":[{"name":"offset","nativeSrc":"16394:6:69","nodeType":"YulIdentifier","src":"16394:6:69"}],"functionName":{"name":"mload","nativeSrc":"16388:5:69","nodeType":"YulIdentifier","src":"16388:5:69"},"nativeSrc":"16388:13:69","nodeType":"YulFunctionCall","src":"16388:13:69"},"variables":[{"name":"length","nativeSrc":"16378:6:69","nodeType":"YulTypedName","src":"16378:6:69","type":""}]},{"nativeSrc":"16410:142:69","nodeType":"YulAssignment","src":"16410:142:69","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"16525:6:69","nodeType":"YulIdentifier","src":"16525:6:69"},{"kind":"number","nativeSrc":"16533:4:69","nodeType":"YulLiteral","src":"16533:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"16521:3:69","nodeType":"YulIdentifier","src":"16521:3:69"},"nativeSrc":"16521:17:69","nodeType":"YulFunctionCall","src":"16521:17:69"},{"name":"length","nativeSrc":"16540:6:69","nodeType":"YulIdentifier","src":"16540:6:69"},{"name":"end","nativeSrc":"16548:3:69","nodeType":"YulIdentifier","src":"16548:3:69"}],"functionName":{"name":"abi_decode_available_length_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory","nativeSrc":"16419:101:69","nodeType":"YulIdentifier","src":"16419:101:69"},"nativeSrc":"16419:133:69","nodeType":"YulFunctionCall","src":"16419:133:69"},"variableNames":[{"name":"array","nativeSrc":"16410:5:69","nodeType":"YulIdentifier","src":"16410:5:69"}]}]},"name":"abi_decode_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory","nativeSrc":"16117:441:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"16211:6:69","nodeType":"YulTypedName","src":"16211:6:69","type":""},{"name":"end","nativeSrc":"16219:3:69","nodeType":"YulTypedName","src":"16219:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"16227:5:69","nodeType":"YulTypedName","src":"16227:5:69","type":""}],"src":"16117:441:69"},{"body":{"nativeSrc":"16694:480:69","nodeType":"YulBlock","src":"16694:480:69","statements":[{"body":{"nativeSrc":"16740:83:69","nodeType":"YulBlock","src":"16740:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"16742:77:69","nodeType":"YulIdentifier","src":"16742:77:69"},"nativeSrc":"16742:79:69","nodeType":"YulFunctionCall","src":"16742:79:69"},"nativeSrc":"16742:79:69","nodeType":"YulExpressionStatement","src":"16742:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"16715:7:69","nodeType":"YulIdentifier","src":"16715:7:69"},{"name":"headStart","nativeSrc":"16724:9:69","nodeType":"YulIdentifier","src":"16724:9:69"}],"functionName":{"name":"sub","nativeSrc":"16711:3:69","nodeType":"YulIdentifier","src":"16711:3:69"},"nativeSrc":"16711:23:69","nodeType":"YulFunctionCall","src":"16711:23:69"},{"kind":"number","nativeSrc":"16736:2:69","nodeType":"YulLiteral","src":"16736:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"16707:3:69","nodeType":"YulIdentifier","src":"16707:3:69"},"nativeSrc":"16707:32:69","nodeType":"YulFunctionCall","src":"16707:32:69"},"nativeSrc":"16704:119:69","nodeType":"YulIf","src":"16704:119:69"},{"nativeSrc":"16833:334:69","nodeType":"YulBlock","src":"16833:334:69","statements":[{"nativeSrc":"16848:38:69","nodeType":"YulVariableDeclaration","src":"16848:38:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"16872:9:69","nodeType":"YulIdentifier","src":"16872:9:69"},{"kind":"number","nativeSrc":"16883:1:69","nodeType":"YulLiteral","src":"16883:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"16868:3:69","nodeType":"YulIdentifier","src":"16868:3:69"},"nativeSrc":"16868:17:69","nodeType":"YulFunctionCall","src":"16868:17:69"}],"functionName":{"name":"mload","nativeSrc":"16862:5:69","nodeType":"YulIdentifier","src":"16862:5:69"},"nativeSrc":"16862:24:69","nodeType":"YulFunctionCall","src":"16862:24:69"},"variables":[{"name":"offset","nativeSrc":"16852:6:69","nodeType":"YulTypedName","src":"16852:6:69","type":""}]},{"body":{"nativeSrc":"16933:83:69","nodeType":"YulBlock","src":"16933:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"16935:77:69","nodeType":"YulIdentifier","src":"16935:77:69"},"nativeSrc":"16935:79:69","nodeType":"YulFunctionCall","src":"16935:79:69"},"nativeSrc":"16935:79:69","nodeType":"YulExpressionStatement","src":"16935:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"16905:6:69","nodeType":"YulIdentifier","src":"16905:6:69"},{"kind":"number","nativeSrc":"16913:18:69","nodeType":"YulLiteral","src":"16913:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"16902:2:69","nodeType":"YulIdentifier","src":"16902:2:69"},"nativeSrc":"16902:30:69","nodeType":"YulFunctionCall","src":"16902:30:69"},"nativeSrc":"16899:117:69","nodeType":"YulIf","src":"16899:117:69"},{"nativeSrc":"17030:127:69","nodeType":"YulAssignment","src":"17030:127:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"17129:9:69","nodeType":"YulIdentifier","src":"17129:9:69"},{"name":"offset","nativeSrc":"17140:6:69","nodeType":"YulIdentifier","src":"17140:6:69"}],"functionName":{"name":"add","nativeSrc":"17125:3:69","nodeType":"YulIdentifier","src":"17125:3:69"},"nativeSrc":"17125:22:69","nodeType":"YulFunctionCall","src":"17125:22:69"},{"name":"dataEnd","nativeSrc":"17149:7:69","nodeType":"YulIdentifier","src":"17149:7:69"}],"functionName":{"name":"abi_decode_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory","nativeSrc":"17040:84:69","nodeType":"YulIdentifier","src":"17040:84:69"},"nativeSrc":"17040:117:69","nodeType":"YulFunctionCall","src":"17040:117:69"},"variableNames":[{"name":"value0","nativeSrc":"17030:6:69","nodeType":"YulIdentifier","src":"17030:6:69"}]}]}]},"name":"abi_decode_tuple_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory","nativeSrc":"16564:610:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"16664:9:69","nodeType":"YulTypedName","src":"16664:9:69","type":""},{"name":"dataEnd","nativeSrc":"16675:7:69","nodeType":"YulTypedName","src":"16675:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"16687:6:69","nodeType":"YulTypedName","src":"16687:6:69","type":""}],"src":"16564:610:69"},{"body":{"nativeSrc":"17208:152:69","nodeType":"YulBlock","src":"17208:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"17225:1:69","nodeType":"YulLiteral","src":"17225:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"17228:77:69","nodeType":"YulLiteral","src":"17228:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"17218:6:69","nodeType":"YulIdentifier","src":"17218:6:69"},"nativeSrc":"17218:88:69","nodeType":"YulFunctionCall","src":"17218:88:69"},"nativeSrc":"17218:88:69","nodeType":"YulExpressionStatement","src":"17218:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"17322:1:69","nodeType":"YulLiteral","src":"17322:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"17325:4:69","nodeType":"YulLiteral","src":"17325:4:69","type":"","value":"0x32"}],"functionName":{"name":"mstore","nativeSrc":"17315:6:69","nodeType":"YulIdentifier","src":"17315:6:69"},"nativeSrc":"17315:15:69","nodeType":"YulFunctionCall","src":"17315:15:69"},"nativeSrc":"17315:15:69","nodeType":"YulExpressionStatement","src":"17315:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"17346:1:69","nodeType":"YulLiteral","src":"17346:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"17349:4:69","nodeType":"YulLiteral","src":"17349:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"17339:6:69","nodeType":"YulIdentifier","src":"17339:6:69"},"nativeSrc":"17339:15:69","nodeType":"YulFunctionCall","src":"17339:15:69"},"nativeSrc":"17339:15:69","nodeType":"YulExpressionStatement","src":"17339:15:69"}]},"name":"panic_error_0x32","nativeSrc":"17180:180:69","nodeType":"YulFunctionDefinition","src":"17180:180:69"},{"body":{"nativeSrc":"17455:106:69","nodeType":"YulBlock","src":"17455:106:69","statements":[{"nativeSrc":"17465:22:69","nodeType":"YulAssignment","src":"17465:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"17480:6:69","nodeType":"YulIdentifier","src":"17480:6:69"}],"functionName":{"name":"mload","nativeSrc":"17474:5:69","nodeType":"YulIdentifier","src":"17474:5:69"},"nativeSrc":"17474:13:69","nodeType":"YulFunctionCall","src":"17474:13:69"},"variableNames":[{"name":"value","nativeSrc":"17465:5:69","nodeType":"YulIdentifier","src":"17465:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"17549:5:69","nodeType":"YulIdentifier","src":"17549:5:69"}],"functionName":{"name":"validator_revert_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"17496:52:69","nodeType":"YulIdentifier","src":"17496:52:69"},"nativeSrc":"17496:59:69","nodeType":"YulFunctionCall","src":"17496:59:69"},"nativeSrc":"17496:59:69","nodeType":"YulExpressionStatement","src":"17496:59:69"}]},"name":"abi_decode_t_contract$_IERC20Upgradeable_$1352_fromMemory","nativeSrc":"17366:195:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"17433:6:69","nodeType":"YulTypedName","src":"17433:6:69","type":""},{"name":"end","nativeSrc":"17441:3:69","nodeType":"YulTypedName","src":"17441:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"17449:5:69","nodeType":"YulTypedName","src":"17449:5:69","type":""}],"src":"17366:195:69"},{"body":{"nativeSrc":"17670:300:69","nodeType":"YulBlock","src":"17670:300:69","statements":[{"body":{"nativeSrc":"17716:83:69","nodeType":"YulBlock","src":"17716:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"17718:77:69","nodeType":"YulIdentifier","src":"17718:77:69"},"nativeSrc":"17718:79:69","nodeType":"YulFunctionCall","src":"17718:79:69"},"nativeSrc":"17718:79:69","nodeType":"YulExpressionStatement","src":"17718:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"17691:7:69","nodeType":"YulIdentifier","src":"17691:7:69"},{"name":"headStart","nativeSrc":"17700:9:69","nodeType":"YulIdentifier","src":"17700:9:69"}],"functionName":{"name":"sub","nativeSrc":"17687:3:69","nodeType":"YulIdentifier","src":"17687:3:69"},"nativeSrc":"17687:23:69","nodeType":"YulFunctionCall","src":"17687:23:69"},{"kind":"number","nativeSrc":"17712:2:69","nodeType":"YulLiteral","src":"17712:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"17683:3:69","nodeType":"YulIdentifier","src":"17683:3:69"},"nativeSrc":"17683:32:69","nodeType":"YulFunctionCall","src":"17683:32:69"},"nativeSrc":"17680:119:69","nodeType":"YulIf","src":"17680:119:69"},{"nativeSrc":"17809:154:69","nodeType":"YulBlock","src":"17809:154:69","statements":[{"nativeSrc":"17824:15:69","nodeType":"YulVariableDeclaration","src":"17824:15:69","value":{"kind":"number","nativeSrc":"17838:1:69","nodeType":"YulLiteral","src":"17838:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"17828:6:69","nodeType":"YulTypedName","src":"17828:6:69","type":""}]},{"nativeSrc":"17853:100:69","nodeType":"YulAssignment","src":"17853:100:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"17925:9:69","nodeType":"YulIdentifier","src":"17925:9:69"},{"name":"offset","nativeSrc":"17936:6:69","nodeType":"YulIdentifier","src":"17936:6:69"}],"functionName":{"name":"add","nativeSrc":"17921:3:69","nodeType":"YulIdentifier","src":"17921:3:69"},"nativeSrc":"17921:22:69","nodeType":"YulFunctionCall","src":"17921:22:69"},{"name":"dataEnd","nativeSrc":"17945:7:69","nodeType":"YulIdentifier","src":"17945:7:69"}],"functionName":{"name":"abi_decode_t_contract$_IERC20Upgradeable_$1352_fromMemory","nativeSrc":"17863:57:69","nodeType":"YulIdentifier","src":"17863:57:69"},"nativeSrc":"17863:90:69","nodeType":"YulFunctionCall","src":"17863:90:69"},"variableNames":[{"name":"value0","nativeSrc":"17853:6:69","nodeType":"YulIdentifier","src":"17853:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_IERC20Upgradeable_$1352_fromMemory","nativeSrc":"17567:403:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"17640:9:69","nodeType":"YulTypedName","src":"17640:9:69","type":""},{"name":"dataEnd","nativeSrc":"17651:7:69","nodeType":"YulTypedName","src":"17651:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"17663:6:69","nodeType":"YulTypedName","src":"17663:6:69","type":""}],"src":"17567:403:69"},{"body":{"nativeSrc":"18066:40:69","nodeType":"YulBlock","src":"18066:40:69","statements":[{"nativeSrc":"18077:22:69","nodeType":"YulAssignment","src":"18077:22:69","value":{"arguments":[{"name":"value","nativeSrc":"18093:5:69","nodeType":"YulIdentifier","src":"18093:5:69"}],"functionName":{"name":"mload","nativeSrc":"18087:5:69","nodeType":"YulIdentifier","src":"18087:5:69"},"nativeSrc":"18087:12:69","nodeType":"YulFunctionCall","src":"18087:12:69"},"variableNames":[{"name":"length","nativeSrc":"18077:6:69","nodeType":"YulIdentifier","src":"18077:6:69"}]}]},"name":"array_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"17976:130:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"18049:5:69","nodeType":"YulTypedName","src":"18049:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"18059:6:69","nodeType":"YulTypedName","src":"18059:6:69","type":""}],"src":"17976:130:69"},{"body":{"nativeSrc":"18223:73:69","nodeType":"YulBlock","src":"18223:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"18240:3:69","nodeType":"YulIdentifier","src":"18240:3:69"},{"name":"length","nativeSrc":"18245:6:69","nodeType":"YulIdentifier","src":"18245:6:69"}],"functionName":{"name":"mstore","nativeSrc":"18233:6:69","nodeType":"YulIdentifier","src":"18233:6:69"},"nativeSrc":"18233:19:69","nodeType":"YulFunctionCall","src":"18233:19:69"},"nativeSrc":"18233:19:69","nodeType":"YulExpressionStatement","src":"18233:19:69"},{"nativeSrc":"18261:29:69","nodeType":"YulAssignment","src":"18261:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"18280:3:69","nodeType":"YulIdentifier","src":"18280:3:69"},{"kind":"number","nativeSrc":"18285:4:69","nodeType":"YulLiteral","src":"18285:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18276:3:69","nodeType":"YulIdentifier","src":"18276:3:69"},"nativeSrc":"18276:14:69","nodeType":"YulFunctionCall","src":"18276:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"18261:11:69","nodeType":"YulIdentifier","src":"18261:11:69"}]}]},"name":"array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack","nativeSrc":"18112:184:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"18195:3:69","nodeType":"YulTypedName","src":"18195:3:69","type":""},{"name":"length","nativeSrc":"18200:6:69","nodeType":"YulTypedName","src":"18200:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"18211:11:69","nodeType":"YulTypedName","src":"18211:11:69","type":""}],"src":"18112:184:69"},{"body":{"nativeSrc":"18390:60:69","nodeType":"YulBlock","src":"18390:60:69","statements":[{"nativeSrc":"18400:11:69","nodeType":"YulAssignment","src":"18400:11:69","value":{"name":"ptr","nativeSrc":"18408:3:69","nodeType":"YulIdentifier","src":"18408:3:69"},"variableNames":[{"name":"data","nativeSrc":"18400:4:69","nodeType":"YulIdentifier","src":"18400:4:69"}]},{"nativeSrc":"18421:22:69","nodeType":"YulAssignment","src":"18421:22:69","value":{"arguments":[{"name":"ptr","nativeSrc":"18433:3:69","nodeType":"YulIdentifier","src":"18433:3:69"},{"kind":"number","nativeSrc":"18438:4:69","nodeType":"YulLiteral","src":"18438:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18429:3:69","nodeType":"YulIdentifier","src":"18429:3:69"},"nativeSrc":"18429:14:69","nodeType":"YulFunctionCall","src":"18429:14:69"},"variableNames":[{"name":"data","nativeSrc":"18421:4:69","nodeType":"YulIdentifier","src":"18421:4:69"}]}]},"name":"array_dataslot_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"18302:148:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nativeSrc":"18377:3:69","nodeType":"YulTypedName","src":"18377:3:69","type":""}],"returnVariables":[{"name":"data","nativeSrc":"18385:4:69","nodeType":"YulTypedName","src":"18385:4:69","type":""}],"src":"18302:148:69"},{"body":{"nativeSrc":"18527:82:69","nodeType":"YulBlock","src":"18527:82:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"18544:3:69","nodeType":"YulIdentifier","src":"18544:3:69"},{"arguments":[{"name":"value","nativeSrc":"18596:5:69","nodeType":"YulIdentifier","src":"18596:5:69"}],"functionName":{"name":"convert_t_contract$_VToken_$15506_to_t_address","nativeSrc":"18549:46:69","nodeType":"YulIdentifier","src":"18549:46:69"},"nativeSrc":"18549:53:69","nodeType":"YulFunctionCall","src":"18549:53:69"}],"functionName":{"name":"mstore","nativeSrc":"18537:6:69","nodeType":"YulIdentifier","src":"18537:6:69"},"nativeSrc":"18537:66:69","nodeType":"YulFunctionCall","src":"18537:66:69"},"nativeSrc":"18537:66:69","nodeType":"YulExpressionStatement","src":"18537:66:69"}]},"name":"abi_encode_t_contract$_VToken_$15506_to_t_address","nativeSrc":"18456:153:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"18515:5:69","nodeType":"YulTypedName","src":"18515:5:69","type":""},{"name":"pos","nativeSrc":"18522:3:69","nodeType":"YulTypedName","src":"18522:3:69","type":""}],"src":"18456:153:69"},{"body":{"nativeSrc":"18711:115:69","nodeType":"YulBlock","src":"18711:115:69","statements":[{"expression":{"arguments":[{"name":"value0","nativeSrc":"18771:6:69","nodeType":"YulIdentifier","src":"18771:6:69"},{"name":"pos","nativeSrc":"18779:3:69","nodeType":"YulIdentifier","src":"18779:3:69"}],"functionName":{"name":"abi_encode_t_contract$_VToken_$15506_to_t_address","nativeSrc":"18721:49:69","nodeType":"YulIdentifier","src":"18721:49:69"},"nativeSrc":"18721:62:69","nodeType":"YulFunctionCall","src":"18721:62:69"},"nativeSrc":"18721:62:69","nodeType":"YulExpressionStatement","src":"18721:62:69"},{"nativeSrc":"18792:28:69","nodeType":"YulAssignment","src":"18792:28:69","value":{"arguments":[{"name":"pos","nativeSrc":"18810:3:69","nodeType":"YulIdentifier","src":"18810:3:69"},{"kind":"number","nativeSrc":"18815:4:69","nodeType":"YulLiteral","src":"18815:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18806:3:69","nodeType":"YulIdentifier","src":"18806:3:69"},"nativeSrc":"18806:14:69","nodeType":"YulFunctionCall","src":"18806:14:69"},"variableNames":[{"name":"updatedPos","nativeSrc":"18792:10:69","nodeType":"YulIdentifier","src":"18792:10:69"}]}]},"name":"abi_encodeUpdatedPos_t_contract$_VToken_$15506_to_t_address","nativeSrc":"18615:211:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value0","nativeSrc":"18684:6:69","nodeType":"YulTypedName","src":"18684:6:69","type":""},{"name":"pos","nativeSrc":"18692:3:69","nodeType":"YulTypedName","src":"18692:3:69","type":""}],"returnVariables":[{"name":"updatedPos","nativeSrc":"18700:10:69","nodeType":"YulTypedName","src":"18700:10:69","type":""}],"src":"18615:211:69"},{"body":{"nativeSrc":"18923:38:69","nodeType":"YulBlock","src":"18923:38:69","statements":[{"nativeSrc":"18933:22:69","nodeType":"YulAssignment","src":"18933:22:69","value":{"arguments":[{"name":"ptr","nativeSrc":"18945:3:69","nodeType":"YulIdentifier","src":"18945:3:69"},{"kind":"number","nativeSrc":"18950:4:69","nodeType":"YulLiteral","src":"18950:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18941:3:69","nodeType":"YulIdentifier","src":"18941:3:69"},"nativeSrc":"18941:14:69","nodeType":"YulFunctionCall","src":"18941:14:69"},"variableNames":[{"name":"next","nativeSrc":"18933:4:69","nodeType":"YulIdentifier","src":"18933:4:69"}]}]},"name":"array_nextElement_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"18832:129:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nativeSrc":"18910:3:69","nodeType":"YulTypedName","src":"18910:3:69","type":""}],"returnVariables":[{"name":"next","nativeSrc":"18918:4:69","nodeType":"YulTypedName","src":"18918:4:69","type":""}],"src":"18832:129:69"},{"body":{"nativeSrc":"19145:672:69","nodeType":"YulBlock","src":"19145:672:69","statements":[{"nativeSrc":"19155:84:69","nodeType":"YulVariableDeclaration","src":"19155:84:69","value":{"arguments":[{"name":"value","nativeSrc":"19233:5:69","nodeType":"YulIdentifier","src":"19233:5:69"}],"functionName":{"name":"array_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"19169:63:69","nodeType":"YulIdentifier","src":"19169:63:69"},"nativeSrc":"19169:70:69","nodeType":"YulFunctionCall","src":"19169:70:69"},"variables":[{"name":"length","nativeSrc":"19159:6:69","nodeType":"YulTypedName","src":"19159:6:69","type":""}]},{"nativeSrc":"19248:93:69","nodeType":"YulAssignment","src":"19248:93:69","value":{"arguments":[{"name":"pos","nativeSrc":"19329:3:69","nodeType":"YulIdentifier","src":"19329:3:69"},{"name":"length","nativeSrc":"19334:6:69","nodeType":"YulIdentifier","src":"19334:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack","nativeSrc":"19255:73:69","nodeType":"YulIdentifier","src":"19255:73:69"},"nativeSrc":"19255:86:69","nodeType":"YulFunctionCall","src":"19255:86:69"},"variableNames":[{"name":"pos","nativeSrc":"19248:3:69","nodeType":"YulIdentifier","src":"19248:3:69"}]},{"nativeSrc":"19350:87:69","nodeType":"YulVariableDeclaration","src":"19350:87:69","value":{"arguments":[{"name":"value","nativeSrc":"19431:5:69","nodeType":"YulIdentifier","src":"19431:5:69"}],"functionName":{"name":"array_dataslot_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"19365:65:69","nodeType":"YulIdentifier","src":"19365:65:69"},"nativeSrc":"19365:72:69","nodeType":"YulFunctionCall","src":"19365:72:69"},"variables":[{"name":"baseRef","nativeSrc":"19354:7:69","nodeType":"YulTypedName","src":"19354:7:69","type":""}]},{"nativeSrc":"19446:21:69","nodeType":"YulVariableDeclaration","src":"19446:21:69","value":{"name":"baseRef","nativeSrc":"19460:7:69","nodeType":"YulIdentifier","src":"19460:7:69"},"variables":[{"name":"srcPtr","nativeSrc":"19450:6:69","nodeType":"YulTypedName","src":"19450:6:69","type":""}]},{"body":{"nativeSrc":"19536:256:69","nodeType":"YulBlock","src":"19536:256:69","statements":[{"nativeSrc":"19550:34:69","nodeType":"YulVariableDeclaration","src":"19550:34:69","value":{"arguments":[{"name":"srcPtr","nativeSrc":"19577:6:69","nodeType":"YulIdentifier","src":"19577:6:69"}],"functionName":{"name":"mload","nativeSrc":"19571:5:69","nodeType":"YulIdentifier","src":"19571:5:69"},"nativeSrc":"19571:13:69","nodeType":"YulFunctionCall","src":"19571:13:69"},"variables":[{"name":"elementValue0","nativeSrc":"19554:13:69","nodeType":"YulTypedName","src":"19554:13:69","type":""}]},{"nativeSrc":"19597:86:69","nodeType":"YulAssignment","src":"19597:86:69","value":{"arguments":[{"name":"elementValue0","nativeSrc":"19664:13:69","nodeType":"YulIdentifier","src":"19664:13:69"},{"name":"pos","nativeSrc":"19679:3:69","nodeType":"YulIdentifier","src":"19679:3:69"}],"functionName":{"name":"abi_encodeUpdatedPos_t_contract$_VToken_$15506_to_t_address","nativeSrc":"19604:59:69","nodeType":"YulIdentifier","src":"19604:59:69"},"nativeSrc":"19604:79:69","nodeType":"YulFunctionCall","src":"19604:79:69"},"variableNames":[{"name":"pos","nativeSrc":"19597:3:69","nodeType":"YulIdentifier","src":"19597:3:69"}]},{"nativeSrc":"19696:86:69","nodeType":"YulAssignment","src":"19696:86:69","value":{"arguments":[{"name":"srcPtr","nativeSrc":"19775:6:69","nodeType":"YulIdentifier","src":"19775:6:69"}],"functionName":{"name":"array_nextElement_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"19706:68:69","nodeType":"YulIdentifier","src":"19706:68:69"},"nativeSrc":"19706:76:69","nodeType":"YulFunctionCall","src":"19706:76:69"},"variableNames":[{"name":"srcPtr","nativeSrc":"19696:6:69","nodeType":"YulIdentifier","src":"19696:6:69"}]}]},"condition":{"arguments":[{"name":"i","nativeSrc":"19498:1:69","nodeType":"YulIdentifier","src":"19498:1:69"},{"name":"length","nativeSrc":"19501:6:69","nodeType":"YulIdentifier","src":"19501:6:69"}],"functionName":{"name":"lt","nativeSrc":"19495:2:69","nodeType":"YulIdentifier","src":"19495:2:69"},"nativeSrc":"19495:13:69","nodeType":"YulFunctionCall","src":"19495:13:69"},"nativeSrc":"19476:316:69","nodeType":"YulForLoop","post":{"nativeSrc":"19509:18:69","nodeType":"YulBlock","src":"19509:18:69","statements":[{"nativeSrc":"19511:14:69","nodeType":"YulAssignment","src":"19511:14:69","value":{"arguments":[{"name":"i","nativeSrc":"19520:1:69","nodeType":"YulIdentifier","src":"19520:1:69"},{"kind":"number","nativeSrc":"19523:1:69","nodeType":"YulLiteral","src":"19523:1:69","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"19516:3:69","nodeType":"YulIdentifier","src":"19516:3:69"},"nativeSrc":"19516:9:69","nodeType":"YulFunctionCall","src":"19516:9:69"},"variableNames":[{"name":"i","nativeSrc":"19511:1:69","nodeType":"YulIdentifier","src":"19511:1:69"}]}]},"pre":{"nativeSrc":"19480:14:69","nodeType":"YulBlock","src":"19480:14:69","statements":[{"nativeSrc":"19482:10:69","nodeType":"YulVariableDeclaration","src":"19482:10:69","value":{"kind":"number","nativeSrc":"19491:1:69","nodeType":"YulLiteral","src":"19491:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"19486:1:69","nodeType":"YulTypedName","src":"19486:1:69","type":""}]}]},"src":"19476:316:69"},{"nativeSrc":"19801:10:69","nodeType":"YulAssignment","src":"19801:10:69","value":{"name":"pos","nativeSrc":"19808:3:69","nodeType":"YulIdentifier","src":"19808:3:69"},"variableNames":[{"name":"end","nativeSrc":"19801:3:69","nodeType":"YulIdentifier","src":"19801:3:69"}]}]},"name":"abi_encode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack","nativeSrc":"19005:812:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"19124:5:69","nodeType":"YulTypedName","src":"19124:5:69","type":""},{"name":"pos","nativeSrc":"19131:3:69","nodeType":"YulTypedName","src":"19131:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"19140:3:69","nodeType":"YulTypedName","src":"19140:3:69","type":""}],"src":"19005:812:69"},{"body":{"nativeSrc":"20015:323:69","nodeType":"YulBlock","src":"20015:323:69","statements":[{"nativeSrc":"20025:26:69","nodeType":"YulAssignment","src":"20025:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"20037:9:69","nodeType":"YulIdentifier","src":"20037:9:69"},{"kind":"number","nativeSrc":"20048:2:69","nodeType":"YulLiteral","src":"20048:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"20033:3:69","nodeType":"YulIdentifier","src":"20033:3:69"},"nativeSrc":"20033:18:69","nodeType":"YulFunctionCall","src":"20033:18:69"},"variableNames":[{"name":"tail","nativeSrc":"20025:4:69","nodeType":"YulIdentifier","src":"20025:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"20105:6:69","nodeType":"YulIdentifier","src":"20105:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"20118:9:69","nodeType":"YulIdentifier","src":"20118:9:69"},{"kind":"number","nativeSrc":"20129:1:69","nodeType":"YulLiteral","src":"20129:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"20114:3:69","nodeType":"YulIdentifier","src":"20114:3:69"},"nativeSrc":"20114:17:69","nodeType":"YulFunctionCall","src":"20114:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"20061:43:69","nodeType":"YulIdentifier","src":"20061:43:69"},"nativeSrc":"20061:71:69","nodeType":"YulFunctionCall","src":"20061:71:69"},"nativeSrc":"20061:71:69","nodeType":"YulExpressionStatement","src":"20061:71:69"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"20153:9:69","nodeType":"YulIdentifier","src":"20153:9:69"},{"kind":"number","nativeSrc":"20164:2:69","nodeType":"YulLiteral","src":"20164:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"20149:3:69","nodeType":"YulIdentifier","src":"20149:3:69"},"nativeSrc":"20149:18:69","nodeType":"YulFunctionCall","src":"20149:18:69"},{"arguments":[{"name":"tail","nativeSrc":"20173:4:69","nodeType":"YulIdentifier","src":"20173:4:69"},{"name":"headStart","nativeSrc":"20179:9:69","nodeType":"YulIdentifier","src":"20179:9:69"}],"functionName":{"name":"sub","nativeSrc":"20169:3:69","nodeType":"YulIdentifier","src":"20169:3:69"},"nativeSrc":"20169:20:69","nodeType":"YulFunctionCall","src":"20169:20:69"}],"functionName":{"name":"mstore","nativeSrc":"20142:6:69","nodeType":"YulIdentifier","src":"20142:6:69"},"nativeSrc":"20142:48:69","nodeType":"YulFunctionCall","src":"20142:48:69"},"nativeSrc":"20142:48:69","nodeType":"YulExpressionStatement","src":"20142:48:69"},{"nativeSrc":"20199:132:69","nodeType":"YulAssignment","src":"20199:132:69","value":{"arguments":[{"name":"value1","nativeSrc":"20317:6:69","nodeType":"YulIdentifier","src":"20317:6:69"},{"name":"tail","nativeSrc":"20326:4:69","nodeType":"YulIdentifier","src":"20326:4:69"}],"functionName":{"name":"abi_encode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack","nativeSrc":"20207:109:69","nodeType":"YulIdentifier","src":"20207:109:69"},"nativeSrc":"20207:124:69","nodeType":"YulFunctionCall","src":"20207:124:69"},"variableNames":[{"name":"tail","nativeSrc":"20199:4:69","nodeType":"YulIdentifier","src":"20199:4:69"}]}]},"name":"abi_encode_tuple_t_address_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr__to_t_address_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nativeSrc":"19823:515:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"19979:9:69","nodeType":"YulTypedName","src":"19979:9:69","type":""},{"name":"value1","nativeSrc":"19991:6:69","nodeType":"YulTypedName","src":"19991:6:69","type":""},{"name":"value0","nativeSrc":"19999:6:69","nodeType":"YulTypedName","src":"19999:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"20010:4:69","nodeType":"YulTypedName","src":"20010:4:69","type":""}],"src":"19823:515:69"},{"body":{"nativeSrc":"20372:152:69","nodeType":"YulBlock","src":"20372:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"20389:1:69","nodeType":"YulLiteral","src":"20389:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"20392:77:69","nodeType":"YulLiteral","src":"20392:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"20382:6:69","nodeType":"YulIdentifier","src":"20382:6:69"},"nativeSrc":"20382:88:69","nodeType":"YulFunctionCall","src":"20382:88:69"},"nativeSrc":"20382:88:69","nodeType":"YulExpressionStatement","src":"20382:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"20486:1:69","nodeType":"YulLiteral","src":"20486:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"20489:4:69","nodeType":"YulLiteral","src":"20489:4:69","type":"","value":"0x21"}],"functionName":{"name":"mstore","nativeSrc":"20479:6:69","nodeType":"YulIdentifier","src":"20479:6:69"},"nativeSrc":"20479:15:69","nodeType":"YulFunctionCall","src":"20479:15:69"},"nativeSrc":"20479:15:69","nodeType":"YulExpressionStatement","src":"20479:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"20510:1:69","nodeType":"YulLiteral","src":"20510:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"20513:4:69","nodeType":"YulLiteral","src":"20513:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"20503:6:69","nodeType":"YulIdentifier","src":"20503:6:69"},"nativeSrc":"20503:15:69","nodeType":"YulFunctionCall","src":"20503:15:69"},"nativeSrc":"20503:15:69","nodeType":"YulExpressionStatement","src":"20503:15:69"}]},"name":"panic_error_0x21","nativeSrc":"20344:180:69","nodeType":"YulFunctionDefinition","src":"20344:180:69"},{"body":{"nativeSrc":"20589:62:69","nodeType":"YulBlock","src":"20589:62:69","statements":[{"body":{"nativeSrc":"20623:22:69","nodeType":"YulBlock","src":"20623:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x21","nativeSrc":"20625:16:69","nodeType":"YulIdentifier","src":"20625:16:69"},"nativeSrc":"20625:18:69","nodeType":"YulFunctionCall","src":"20625:18:69"},"nativeSrc":"20625:18:69","nodeType":"YulExpressionStatement","src":"20625:18:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"20612:5:69","nodeType":"YulIdentifier","src":"20612:5:69"},{"kind":"number","nativeSrc":"20619:1:69","nodeType":"YulLiteral","src":"20619:1:69","type":"","value":"4"}],"functionName":{"name":"lt","nativeSrc":"20609:2:69","nodeType":"YulIdentifier","src":"20609:2:69"},"nativeSrc":"20609:12:69","nodeType":"YulFunctionCall","src":"20609:12:69"}],"functionName":{"name":"iszero","nativeSrc":"20602:6:69","nodeType":"YulIdentifier","src":"20602:6:69"},"nativeSrc":"20602:20:69","nodeType":"YulFunctionCall","src":"20602:20:69"},"nativeSrc":"20599:46:69","nodeType":"YulIf","src":"20599:46:69"}]},"name":"validator_assert_t_enum$_IncomeType_$16797","nativeSrc":"20530:121:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"20582:5:69","nodeType":"YulTypedName","src":"20582:5:69","type":""}],"src":"20530:121:69"},{"body":{"nativeSrc":"20718:82:69","nodeType":"YulBlock","src":"20718:82:69","statements":[{"nativeSrc":"20728:16:69","nodeType":"YulAssignment","src":"20728:16:69","value":{"name":"value","nativeSrc":"20739:5:69","nodeType":"YulIdentifier","src":"20739:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"20728:7:69","nodeType":"YulIdentifier","src":"20728:7:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"20788:5:69","nodeType":"YulIdentifier","src":"20788:5:69"}],"functionName":{"name":"validator_assert_t_enum$_IncomeType_$16797","nativeSrc":"20745:42:69","nodeType":"YulIdentifier","src":"20745:42:69"},"nativeSrc":"20745:49:69","nodeType":"YulFunctionCall","src":"20745:49:69"},"nativeSrc":"20745:49:69","nodeType":"YulExpressionStatement","src":"20745:49:69"}]},"name":"cleanup_t_enum$_IncomeType_$16797","nativeSrc":"20657:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"20700:5:69","nodeType":"YulTypedName","src":"20700:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"20710:7:69","nodeType":"YulTypedName","src":"20710:7:69","type":""}],"src":"20657:143:69"},{"body":{"nativeSrc":"20880:69:69","nodeType":"YulBlock","src":"20880:69:69","statements":[{"nativeSrc":"20890:53:69","nodeType":"YulAssignment","src":"20890:53:69","value":{"arguments":[{"name":"value","nativeSrc":"20937:5:69","nodeType":"YulIdentifier","src":"20937:5:69"}],"functionName":{"name":"cleanup_t_enum$_IncomeType_$16797","nativeSrc":"20903:33:69","nodeType":"YulIdentifier","src":"20903:33:69"},"nativeSrc":"20903:40:69","nodeType":"YulFunctionCall","src":"20903:40:69"},"variableNames":[{"name":"converted","nativeSrc":"20890:9:69","nodeType":"YulIdentifier","src":"20890:9:69"}]}]},"name":"convert_t_enum$_IncomeType_$16797_to_t_uint8","nativeSrc":"20806:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"20860:5:69","nodeType":"YulTypedName","src":"20860:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"20870:9:69","nodeType":"YulTypedName","src":"20870:9:69","type":""}],"src":"20806:143:69"},{"body":{"nativeSrc":"21034:80:69","nodeType":"YulBlock","src":"21034:80:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"21051:3:69","nodeType":"YulIdentifier","src":"21051:3:69"},{"arguments":[{"name":"value","nativeSrc":"21101:5:69","nodeType":"YulIdentifier","src":"21101:5:69"}],"functionName":{"name":"convert_t_enum$_IncomeType_$16797_to_t_uint8","nativeSrc":"21056:44:69","nodeType":"YulIdentifier","src":"21056:44:69"},"nativeSrc":"21056:51:69","nodeType":"YulFunctionCall","src":"21056:51:69"}],"functionName":{"name":"mstore","nativeSrc":"21044:6:69","nodeType":"YulIdentifier","src":"21044:6:69"},"nativeSrc":"21044:64:69","nodeType":"YulFunctionCall","src":"21044:64:69"},"nativeSrc":"21044:64:69","nodeType":"YulExpressionStatement","src":"21044:64:69"}]},"name":"abi_encode_t_enum$_IncomeType_$16797_to_t_uint8_fromStack","nativeSrc":"20955:159:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"21022:5:69","nodeType":"YulTypedName","src":"21022:5:69","type":""},{"name":"pos","nativeSrc":"21029:3:69","nodeType":"YulTypedName","src":"21029:3:69","type":""}],"src":"20955:159:69"},{"body":{"nativeSrc":"21288:302:69","nodeType":"YulBlock","src":"21288:302:69","statements":[{"nativeSrc":"21298:26:69","nodeType":"YulAssignment","src":"21298:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"21310:9:69","nodeType":"YulIdentifier","src":"21310:9:69"},{"kind":"number","nativeSrc":"21321:2:69","nodeType":"YulLiteral","src":"21321:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"21306:3:69","nodeType":"YulIdentifier","src":"21306:3:69"},"nativeSrc":"21306:18:69","nodeType":"YulFunctionCall","src":"21306:18:69"},"variableNames":[{"name":"tail","nativeSrc":"21298:4:69","nodeType":"YulIdentifier","src":"21298:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"21378:6:69","nodeType":"YulIdentifier","src":"21378:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"21391:9:69","nodeType":"YulIdentifier","src":"21391:9:69"},{"kind":"number","nativeSrc":"21402:1:69","nodeType":"YulLiteral","src":"21402:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"21387:3:69","nodeType":"YulIdentifier","src":"21387:3:69"},"nativeSrc":"21387:17:69","nodeType":"YulFunctionCall","src":"21387:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"21334:43:69","nodeType":"YulIdentifier","src":"21334:43:69"},"nativeSrc":"21334:71:69","nodeType":"YulFunctionCall","src":"21334:71:69"},"nativeSrc":"21334:71:69","nodeType":"YulExpressionStatement","src":"21334:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"21459:6:69","nodeType":"YulIdentifier","src":"21459:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"21472:9:69","nodeType":"YulIdentifier","src":"21472:9:69"},{"kind":"number","nativeSrc":"21483:2:69","nodeType":"YulLiteral","src":"21483:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"21468:3:69","nodeType":"YulIdentifier","src":"21468:3:69"},"nativeSrc":"21468:18:69","nodeType":"YulFunctionCall","src":"21468:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"21415:43:69","nodeType":"YulIdentifier","src":"21415:43:69"},"nativeSrc":"21415:72:69","nodeType":"YulFunctionCall","src":"21415:72:69"},"nativeSrc":"21415:72:69","nodeType":"YulExpressionStatement","src":"21415:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"21555:6:69","nodeType":"YulIdentifier","src":"21555:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"21568:9:69","nodeType":"YulIdentifier","src":"21568:9:69"},{"kind":"number","nativeSrc":"21579:2:69","nodeType":"YulLiteral","src":"21579:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"21564:3:69","nodeType":"YulIdentifier","src":"21564:3:69"},"nativeSrc":"21564:18:69","nodeType":"YulFunctionCall","src":"21564:18:69"}],"functionName":{"name":"abi_encode_t_enum$_IncomeType_$16797_to_t_uint8_fromStack","nativeSrc":"21497:57:69","nodeType":"YulIdentifier","src":"21497:57:69"},"nativeSrc":"21497:86:69","nodeType":"YulFunctionCall","src":"21497:86:69"},"nativeSrc":"21497:86:69","nodeType":"YulExpressionStatement","src":"21497:86:69"}]},"name":"abi_encode_tuple_t_address_t_address_t_enum$_IncomeType_$16797__to_t_address_t_address_t_uint8__fromStack_reversed","nativeSrc":"21120:470:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"21244:9:69","nodeType":"YulTypedName","src":"21244:9:69","type":""},{"name":"value2","nativeSrc":"21256:6:69","nodeType":"YulTypedName","src":"21256:6:69","type":""},{"name":"value1","nativeSrc":"21264:6:69","nodeType":"YulTypedName","src":"21264:6:69","type":""},{"name":"value0","nativeSrc":"21272:6:69","nodeType":"YulTypedName","src":"21272:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"21283:4:69","nodeType":"YulTypedName","src":"21283:4:69","type":""}],"src":"21120:470:69"},{"body":{"nativeSrc":"21640:147:69","nodeType":"YulBlock","src":"21640:147:69","statements":[{"nativeSrc":"21650:25:69","nodeType":"YulAssignment","src":"21650:25:69","value":{"arguments":[{"name":"x","nativeSrc":"21673:1:69","nodeType":"YulIdentifier","src":"21673:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"21655:17:69","nodeType":"YulIdentifier","src":"21655:17:69"},"nativeSrc":"21655:20:69","nodeType":"YulFunctionCall","src":"21655:20:69"},"variableNames":[{"name":"x","nativeSrc":"21650:1:69","nodeType":"YulIdentifier","src":"21650:1:69"}]},{"nativeSrc":"21684:25:69","nodeType":"YulAssignment","src":"21684:25:69","value":{"arguments":[{"name":"y","nativeSrc":"21707:1:69","nodeType":"YulIdentifier","src":"21707:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"21689:17:69","nodeType":"YulIdentifier","src":"21689:17:69"},"nativeSrc":"21689:20:69","nodeType":"YulFunctionCall","src":"21689:20:69"},"variableNames":[{"name":"y","nativeSrc":"21684:1:69","nodeType":"YulIdentifier","src":"21684:1:69"}]},{"nativeSrc":"21718:16:69","nodeType":"YulAssignment","src":"21718:16:69","value":{"arguments":[{"name":"x","nativeSrc":"21729:1:69","nodeType":"YulIdentifier","src":"21729:1:69"},{"name":"y","nativeSrc":"21732:1:69","nodeType":"YulIdentifier","src":"21732:1:69"}],"functionName":{"name":"add","nativeSrc":"21725:3:69","nodeType":"YulIdentifier","src":"21725:3:69"},"nativeSrc":"21725:9:69","nodeType":"YulFunctionCall","src":"21725:9:69"},"variableNames":[{"name":"sum","nativeSrc":"21718:3:69","nodeType":"YulIdentifier","src":"21718:3:69"}]},{"body":{"nativeSrc":"21758:22:69","nodeType":"YulBlock","src":"21758:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"21760:16:69","nodeType":"YulIdentifier","src":"21760:16:69"},"nativeSrc":"21760:18:69","nodeType":"YulFunctionCall","src":"21760:18:69"},"nativeSrc":"21760:18:69","nodeType":"YulExpressionStatement","src":"21760:18:69"}]},"condition":{"arguments":[{"name":"x","nativeSrc":"21750:1:69","nodeType":"YulIdentifier","src":"21750:1:69"},{"name":"sum","nativeSrc":"21753:3:69","nodeType":"YulIdentifier","src":"21753:3:69"}],"functionName":{"name":"gt","nativeSrc":"21747:2:69","nodeType":"YulIdentifier","src":"21747:2:69"},"nativeSrc":"21747:10:69","nodeType":"YulFunctionCall","src":"21747:10:69"},"nativeSrc":"21744:36:69","nodeType":"YulIf","src":"21744:36:69"}]},"name":"checked_add_t_uint256","nativeSrc":"21596:191:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"21627:1:69","nodeType":"YulTypedName","src":"21627:1:69","type":""},{"name":"y","nativeSrc":"21630:1:69","nodeType":"YulTypedName","src":"21630:1:69","type":""}],"returnVariables":[{"name":"sum","nativeSrc":"21636:3:69","nodeType":"YulTypedName","src":"21636:3:69","type":""}],"src":"21596:191:69"},{"body":{"nativeSrc":"21847:62:69","nodeType":"YulBlock","src":"21847:62:69","statements":[{"body":{"nativeSrc":"21881:22:69","nodeType":"YulBlock","src":"21881:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x21","nativeSrc":"21883:16:69","nodeType":"YulIdentifier","src":"21883:16:69"},"nativeSrc":"21883:18:69","nodeType":"YulFunctionCall","src":"21883:18:69"},"nativeSrc":"21883:18:69","nodeType":"YulExpressionStatement","src":"21883:18:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"21870:5:69","nodeType":"YulIdentifier","src":"21870:5:69"},{"kind":"number","nativeSrc":"21877:1:69","nodeType":"YulLiteral","src":"21877:1:69","type":"","value":"9"}],"functionName":{"name":"lt","nativeSrc":"21867:2:69","nodeType":"YulIdentifier","src":"21867:2:69"},"nativeSrc":"21867:12:69","nodeType":"YulFunctionCall","src":"21867:12:69"}],"functionName":{"name":"iszero","nativeSrc":"21860:6:69","nodeType":"YulIdentifier","src":"21860:6:69"},"nativeSrc":"21860:20:69","nodeType":"YulFunctionCall","src":"21860:20:69"},"nativeSrc":"21857:46:69","nodeType":"YulIf","src":"21857:46:69"}]},"name":"validator_assert_t_enum$_Action_$9148","nativeSrc":"21793:116:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"21840:5:69","nodeType":"YulTypedName","src":"21840:5:69","type":""}],"src":"21793:116:69"},{"body":{"nativeSrc":"21971:77:69","nodeType":"YulBlock","src":"21971:77:69","statements":[{"nativeSrc":"21981:16:69","nodeType":"YulAssignment","src":"21981:16:69","value":{"name":"value","nativeSrc":"21992:5:69","nodeType":"YulIdentifier","src":"21992:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"21981:7:69","nodeType":"YulIdentifier","src":"21981:7:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"22036:5:69","nodeType":"YulIdentifier","src":"22036:5:69"}],"functionName":{"name":"validator_assert_t_enum$_Action_$9148","nativeSrc":"21998:37:69","nodeType":"YulIdentifier","src":"21998:37:69"},"nativeSrc":"21998:44:69","nodeType":"YulFunctionCall","src":"21998:44:69"},"nativeSrc":"21998:44:69","nodeType":"YulExpressionStatement","src":"21998:44:69"}]},"name":"cleanup_t_enum$_Action_$9148","nativeSrc":"21915:133:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"21953:5:69","nodeType":"YulTypedName","src":"21953:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"21963:7:69","nodeType":"YulTypedName","src":"21963:7:69","type":""}],"src":"21915:133:69"},{"body":{"nativeSrc":"22123:64:69","nodeType":"YulBlock","src":"22123:64:69","statements":[{"nativeSrc":"22133:48:69","nodeType":"YulAssignment","src":"22133:48:69","value":{"arguments":[{"name":"value","nativeSrc":"22175:5:69","nodeType":"YulIdentifier","src":"22175:5:69"}],"functionName":{"name":"cleanup_t_enum$_Action_$9148","nativeSrc":"22146:28:69","nodeType":"YulIdentifier","src":"22146:28:69"},"nativeSrc":"22146:35:69","nodeType":"YulFunctionCall","src":"22146:35:69"},"variableNames":[{"name":"converted","nativeSrc":"22133:9:69","nodeType":"YulIdentifier","src":"22133:9:69"}]}]},"name":"convert_t_enum$_Action_$9148_to_t_uint8","nativeSrc":"22054:133:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"22103:5:69","nodeType":"YulTypedName","src":"22103:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"22113:9:69","nodeType":"YulTypedName","src":"22113:9:69","type":""}],"src":"22054:133:69"},{"body":{"nativeSrc":"22267:75:69","nodeType":"YulBlock","src":"22267:75:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"22284:3:69","nodeType":"YulIdentifier","src":"22284:3:69"},{"arguments":[{"name":"value","nativeSrc":"22329:5:69","nodeType":"YulIdentifier","src":"22329:5:69"}],"functionName":{"name":"convert_t_enum$_Action_$9148_to_t_uint8","nativeSrc":"22289:39:69","nodeType":"YulIdentifier","src":"22289:39:69"},"nativeSrc":"22289:46:69","nodeType":"YulFunctionCall","src":"22289:46:69"}],"functionName":{"name":"mstore","nativeSrc":"22277:6:69","nodeType":"YulIdentifier","src":"22277:6:69"},"nativeSrc":"22277:59:69","nodeType":"YulFunctionCall","src":"22277:59:69"},"nativeSrc":"22277:59:69","nodeType":"YulExpressionStatement","src":"22277:59:69"}]},"name":"abi_encode_t_enum$_Action_$9148_to_t_uint8_fromStack","nativeSrc":"22193:149:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"22255:5:69","nodeType":"YulTypedName","src":"22255:5:69","type":""},{"name":"pos","nativeSrc":"22262:3:69","nodeType":"YulTypedName","src":"22262:3:69","type":""}],"src":"22193:149:69"},{"body":{"nativeSrc":"22483:215:69","nodeType":"YulBlock","src":"22483:215:69","statements":[{"nativeSrc":"22493:26:69","nodeType":"YulAssignment","src":"22493:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"22505:9:69","nodeType":"YulIdentifier","src":"22505:9:69"},{"kind":"number","nativeSrc":"22516:2:69","nodeType":"YulLiteral","src":"22516:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"22501:3:69","nodeType":"YulIdentifier","src":"22501:3:69"},"nativeSrc":"22501:18:69","nodeType":"YulFunctionCall","src":"22501:18:69"},"variableNames":[{"name":"tail","nativeSrc":"22493:4:69","nodeType":"YulIdentifier","src":"22493:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"22573:6:69","nodeType":"YulIdentifier","src":"22573:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"22586:9:69","nodeType":"YulIdentifier","src":"22586:9:69"},{"kind":"number","nativeSrc":"22597:1:69","nodeType":"YulLiteral","src":"22597:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"22582:3:69","nodeType":"YulIdentifier","src":"22582:3:69"},"nativeSrc":"22582:17:69","nodeType":"YulFunctionCall","src":"22582:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"22529:43:69","nodeType":"YulIdentifier","src":"22529:43:69"},"nativeSrc":"22529:71:69","nodeType":"YulFunctionCall","src":"22529:71:69"},"nativeSrc":"22529:71:69","nodeType":"YulExpressionStatement","src":"22529:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"22663:6:69","nodeType":"YulIdentifier","src":"22663:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"22676:9:69","nodeType":"YulIdentifier","src":"22676:9:69"},{"kind":"number","nativeSrc":"22687:2:69","nodeType":"YulLiteral","src":"22687:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"22672:3:69","nodeType":"YulIdentifier","src":"22672:3:69"},"nativeSrc":"22672:18:69","nodeType":"YulFunctionCall","src":"22672:18:69"}],"functionName":{"name":"abi_encode_t_enum$_Action_$9148_to_t_uint8_fromStack","nativeSrc":"22610:52:69","nodeType":"YulIdentifier","src":"22610:52:69"},"nativeSrc":"22610:81:69","nodeType":"YulFunctionCall","src":"22610:81:69"},"nativeSrc":"22610:81:69","nodeType":"YulExpressionStatement","src":"22610:81:69"}]},"name":"abi_encode_tuple_t_address_t_enum$_Action_$9148__to_t_address_t_uint8__fromStack_reversed","nativeSrc":"22348:350:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"22447:9:69","nodeType":"YulTypedName","src":"22447:9:69","type":""},{"name":"value1","nativeSrc":"22459:6:69","nodeType":"YulTypedName","src":"22459:6:69","type":""},{"name":"value0","nativeSrc":"22467:6:69","nodeType":"YulTypedName","src":"22467:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"22478:4:69","nodeType":"YulTypedName","src":"22478:4:69","type":""}],"src":"22348:350:69"},{"body":{"nativeSrc":"22744:76:69","nodeType":"YulBlock","src":"22744:76:69","statements":[{"body":{"nativeSrc":"22798:16:69","nodeType":"YulBlock","src":"22798:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"22807:1:69","nodeType":"YulLiteral","src":"22807:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"22810:1:69","nodeType":"YulLiteral","src":"22810:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"22800:6:69","nodeType":"YulIdentifier","src":"22800:6:69"},"nativeSrc":"22800:12:69","nodeType":"YulFunctionCall","src":"22800:12:69"},"nativeSrc":"22800:12:69","nodeType":"YulExpressionStatement","src":"22800:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"22767:5:69","nodeType":"YulIdentifier","src":"22767:5:69"},{"arguments":[{"name":"value","nativeSrc":"22789:5:69","nodeType":"YulIdentifier","src":"22789:5:69"}],"functionName":{"name":"cleanup_t_bool","nativeSrc":"22774:14:69","nodeType":"YulIdentifier","src":"22774:14:69"},"nativeSrc":"22774:21:69","nodeType":"YulFunctionCall","src":"22774:21:69"}],"functionName":{"name":"eq","nativeSrc":"22764:2:69","nodeType":"YulIdentifier","src":"22764:2:69"},"nativeSrc":"22764:32:69","nodeType":"YulFunctionCall","src":"22764:32:69"}],"functionName":{"name":"iszero","nativeSrc":"22757:6:69","nodeType":"YulIdentifier","src":"22757:6:69"},"nativeSrc":"22757:40:69","nodeType":"YulFunctionCall","src":"22757:40:69"},"nativeSrc":"22754:60:69","nodeType":"YulIf","src":"22754:60:69"}]},"name":"validator_revert_t_bool","nativeSrc":"22704:116:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"22737:5:69","nodeType":"YulTypedName","src":"22737:5:69","type":""}],"src":"22704:116:69"},{"body":{"nativeSrc":"22886:77:69","nodeType":"YulBlock","src":"22886:77:69","statements":[{"nativeSrc":"22896:22:69","nodeType":"YulAssignment","src":"22896:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"22911:6:69","nodeType":"YulIdentifier","src":"22911:6:69"}],"functionName":{"name":"mload","nativeSrc":"22905:5:69","nodeType":"YulIdentifier","src":"22905:5:69"},"nativeSrc":"22905:13:69","nodeType":"YulFunctionCall","src":"22905:13:69"},"variableNames":[{"name":"value","nativeSrc":"22896:5:69","nodeType":"YulIdentifier","src":"22896:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"22951:5:69","nodeType":"YulIdentifier","src":"22951:5:69"}],"functionName":{"name":"validator_revert_t_bool","nativeSrc":"22927:23:69","nodeType":"YulIdentifier","src":"22927:23:69"},"nativeSrc":"22927:30:69","nodeType":"YulFunctionCall","src":"22927:30:69"},"nativeSrc":"22927:30:69","nodeType":"YulExpressionStatement","src":"22927:30:69"}]},"name":"abi_decode_t_bool_fromMemory","nativeSrc":"22826:137:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"22864:6:69","nodeType":"YulTypedName","src":"22864:6:69","type":""},{"name":"end","nativeSrc":"22872:3:69","nodeType":"YulTypedName","src":"22872:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"22880:5:69","nodeType":"YulTypedName","src":"22880:5:69","type":""}],"src":"22826:137:69"},{"body":{"nativeSrc":"23043:271:69","nodeType":"YulBlock","src":"23043:271:69","statements":[{"body":{"nativeSrc":"23089:83:69","nodeType":"YulBlock","src":"23089:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"23091:77:69","nodeType":"YulIdentifier","src":"23091:77:69"},"nativeSrc":"23091:79:69","nodeType":"YulFunctionCall","src":"23091:79:69"},"nativeSrc":"23091:79:69","nodeType":"YulExpressionStatement","src":"23091:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"23064:7:69","nodeType":"YulIdentifier","src":"23064:7:69"},{"name":"headStart","nativeSrc":"23073:9:69","nodeType":"YulIdentifier","src":"23073:9:69"}],"functionName":{"name":"sub","nativeSrc":"23060:3:69","nodeType":"YulIdentifier","src":"23060:3:69"},"nativeSrc":"23060:23:69","nodeType":"YulFunctionCall","src":"23060:23:69"},{"kind":"number","nativeSrc":"23085:2:69","nodeType":"YulLiteral","src":"23085:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"23056:3:69","nodeType":"YulIdentifier","src":"23056:3:69"},"nativeSrc":"23056:32:69","nodeType":"YulFunctionCall","src":"23056:32:69"},"nativeSrc":"23053:119:69","nodeType":"YulIf","src":"23053:119:69"},{"nativeSrc":"23182:125:69","nodeType":"YulBlock","src":"23182:125:69","statements":[{"nativeSrc":"23197:15:69","nodeType":"YulVariableDeclaration","src":"23197:15:69","value":{"kind":"number","nativeSrc":"23211:1:69","nodeType":"YulLiteral","src":"23211:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"23201:6:69","nodeType":"YulTypedName","src":"23201:6:69","type":""}]},{"nativeSrc":"23226:71:69","nodeType":"YulAssignment","src":"23226:71:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"23269:9:69","nodeType":"YulIdentifier","src":"23269:9:69"},{"name":"offset","nativeSrc":"23280:6:69","nodeType":"YulIdentifier","src":"23280:6:69"}],"functionName":{"name":"add","nativeSrc":"23265:3:69","nodeType":"YulIdentifier","src":"23265:3:69"},"nativeSrc":"23265:22:69","nodeType":"YulFunctionCall","src":"23265:22:69"},{"name":"dataEnd","nativeSrc":"23289:7:69","nodeType":"YulIdentifier","src":"23289:7:69"}],"functionName":{"name":"abi_decode_t_bool_fromMemory","nativeSrc":"23236:28:69","nodeType":"YulIdentifier","src":"23236:28:69"},"nativeSrc":"23236:61:69","nodeType":"YulFunctionCall","src":"23236:61:69"},"variableNames":[{"name":"value0","nativeSrc":"23226:6:69","nodeType":"YulIdentifier","src":"23226:6:69"}]}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nativeSrc":"22969:345:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"23013:9:69","nodeType":"YulTypedName","src":"23013:9:69","type":""},{"name":"dataEnd","nativeSrc":"23024:7:69","nodeType":"YulTypedName","src":"23024:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"23036:6:69","nodeType":"YulTypedName","src":"23036:6:69","type":""}],"src":"22969:345:69"},{"body":{"nativeSrc":"23365:149:69","nodeType":"YulBlock","src":"23365:149:69","statements":[{"nativeSrc":"23375:25:69","nodeType":"YulAssignment","src":"23375:25:69","value":{"arguments":[{"name":"x","nativeSrc":"23398:1:69","nodeType":"YulIdentifier","src":"23398:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"23380:17:69","nodeType":"YulIdentifier","src":"23380:17:69"},"nativeSrc":"23380:20:69","nodeType":"YulFunctionCall","src":"23380:20:69"},"variableNames":[{"name":"x","nativeSrc":"23375:1:69","nodeType":"YulIdentifier","src":"23375:1:69"}]},{"nativeSrc":"23409:25:69","nodeType":"YulAssignment","src":"23409:25:69","value":{"arguments":[{"name":"y","nativeSrc":"23432:1:69","nodeType":"YulIdentifier","src":"23432:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"23414:17:69","nodeType":"YulIdentifier","src":"23414:17:69"},"nativeSrc":"23414:20:69","nodeType":"YulFunctionCall","src":"23414:20:69"},"variableNames":[{"name":"y","nativeSrc":"23409:1:69","nodeType":"YulIdentifier","src":"23409:1:69"}]},{"nativeSrc":"23443:17:69","nodeType":"YulAssignment","src":"23443:17:69","value":{"arguments":[{"name":"x","nativeSrc":"23455:1:69","nodeType":"YulIdentifier","src":"23455:1:69"},{"name":"y","nativeSrc":"23458:1:69","nodeType":"YulIdentifier","src":"23458:1:69"}],"functionName":{"name":"sub","nativeSrc":"23451:3:69","nodeType":"YulIdentifier","src":"23451:3:69"},"nativeSrc":"23451:9:69","nodeType":"YulFunctionCall","src":"23451:9:69"},"variableNames":[{"name":"diff","nativeSrc":"23443:4:69","nodeType":"YulIdentifier","src":"23443:4:69"}]},{"body":{"nativeSrc":"23485:22:69","nodeType":"YulBlock","src":"23485:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"23487:16:69","nodeType":"YulIdentifier","src":"23487:16:69"},"nativeSrc":"23487:18:69","nodeType":"YulFunctionCall","src":"23487:18:69"},"nativeSrc":"23487:18:69","nodeType":"YulExpressionStatement","src":"23487:18:69"}]},"condition":{"arguments":[{"name":"diff","nativeSrc":"23476:4:69","nodeType":"YulIdentifier","src":"23476:4:69"},{"name":"x","nativeSrc":"23482:1:69","nodeType":"YulIdentifier","src":"23482:1:69"}],"functionName":{"name":"gt","nativeSrc":"23473:2:69","nodeType":"YulIdentifier","src":"23473:2:69"},"nativeSrc":"23473:11:69","nodeType":"YulFunctionCall","src":"23473:11:69"},"nativeSrc":"23470:37:69","nodeType":"YulIf","src":"23470:37:69"}]},"name":"checked_sub_t_uint256","nativeSrc":"23320:194:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"23351:1:69","nodeType":"YulTypedName","src":"23351:1:69","type":""},{"name":"y","nativeSrc":"23354:1:69","nodeType":"YulTypedName","src":"23354:1:69","type":""}],"returnVariables":[{"name":"diff","nativeSrc":"23360:4:69","nodeType":"YulTypedName","src":"23360:4:69","type":""}],"src":"23320:194:69"},{"body":{"nativeSrc":"23626:127:69","nodeType":"YulBlock","src":"23626:127:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"23648:6:69","nodeType":"YulIdentifier","src":"23648:6:69"},{"kind":"number","nativeSrc":"23656:1:69","nodeType":"YulLiteral","src":"23656:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"23644:3:69","nodeType":"YulIdentifier","src":"23644:3:69"},"nativeSrc":"23644:14:69","nodeType":"YulFunctionCall","src":"23644:14:69"},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320616c726561","kind":"string","nativeSrc":"23660:34:69","nodeType":"YulLiteral","src":"23660:34:69","type":"","value":"Initializable: contract is alrea"}],"functionName":{"name":"mstore","nativeSrc":"23637:6:69","nodeType":"YulIdentifier","src":"23637:6:69"},"nativeSrc":"23637:58:69","nodeType":"YulFunctionCall","src":"23637:58:69"},"nativeSrc":"23637:58:69","nodeType":"YulExpressionStatement","src":"23637:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"23716:6:69","nodeType":"YulIdentifier","src":"23716:6:69"},{"kind":"number","nativeSrc":"23724:2:69","nodeType":"YulLiteral","src":"23724:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"23712:3:69","nodeType":"YulIdentifier","src":"23712:3:69"},"nativeSrc":"23712:15:69","nodeType":"YulFunctionCall","src":"23712:15:69"},{"hexValue":"647920696e697469616c697a6564","kind":"string","nativeSrc":"23729:16:69","nodeType":"YulLiteral","src":"23729:16:69","type":"","value":"dy initialized"}],"functionName":{"name":"mstore","nativeSrc":"23705:6:69","nodeType":"YulIdentifier","src":"23705:6:69"},"nativeSrc":"23705:41:69","nodeType":"YulFunctionCall","src":"23705:41:69"},"nativeSrc":"23705:41:69","nodeType":"YulExpressionStatement","src":"23705:41:69"}]},"name":"store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","nativeSrc":"23520:233:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"23618:6:69","nodeType":"YulTypedName","src":"23618:6:69","type":""}],"src":"23520:233:69"},{"body":{"nativeSrc":"23905:220:69","nodeType":"YulBlock","src":"23905:220:69","statements":[{"nativeSrc":"23915:74:69","nodeType":"YulAssignment","src":"23915:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"23981:3:69","nodeType":"YulIdentifier","src":"23981:3:69"},{"kind":"number","nativeSrc":"23986:2:69","nodeType":"YulLiteral","src":"23986:2:69","type":"","value":"46"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"23922:58:69","nodeType":"YulIdentifier","src":"23922:58:69"},"nativeSrc":"23922:67:69","nodeType":"YulFunctionCall","src":"23922:67:69"},"variableNames":[{"name":"pos","nativeSrc":"23915:3:69","nodeType":"YulIdentifier","src":"23915:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"24087:3:69","nodeType":"YulIdentifier","src":"24087:3:69"}],"functionName":{"name":"store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","nativeSrc":"23998:88:69","nodeType":"YulIdentifier","src":"23998:88:69"},"nativeSrc":"23998:93:69","nodeType":"YulFunctionCall","src":"23998:93:69"},"nativeSrc":"23998:93:69","nodeType":"YulExpressionStatement","src":"23998:93:69"},{"nativeSrc":"24100:19:69","nodeType":"YulAssignment","src":"24100:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"24111:3:69","nodeType":"YulIdentifier","src":"24111:3:69"},{"kind":"number","nativeSrc":"24116:2:69","nodeType":"YulLiteral","src":"24116:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"24107:3:69","nodeType":"YulIdentifier","src":"24107:3:69"},"nativeSrc":"24107:12:69","nodeType":"YulFunctionCall","src":"24107:12:69"},"variableNames":[{"name":"end","nativeSrc":"24100:3:69","nodeType":"YulIdentifier","src":"24100:3:69"}]}]},"name":"abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack","nativeSrc":"23759:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"23893:3:69","nodeType":"YulTypedName","src":"23893:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"23901:3:69","nodeType":"YulTypedName","src":"23901:3:69","type":""}],"src":"23759:366:69"},{"body":{"nativeSrc":"24302:248:69","nodeType":"YulBlock","src":"24302:248:69","statements":[{"nativeSrc":"24312:26:69","nodeType":"YulAssignment","src":"24312:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"24324:9:69","nodeType":"YulIdentifier","src":"24324:9:69"},{"kind":"number","nativeSrc":"24335:2:69","nodeType":"YulLiteral","src":"24335:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"24320:3:69","nodeType":"YulIdentifier","src":"24320:3:69"},"nativeSrc":"24320:18:69","nodeType":"YulFunctionCall","src":"24320:18:69"},"variableNames":[{"name":"tail","nativeSrc":"24312:4:69","nodeType":"YulIdentifier","src":"24312:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"24359:9:69","nodeType":"YulIdentifier","src":"24359:9:69"},{"kind":"number","nativeSrc":"24370:1:69","nodeType":"YulLiteral","src":"24370:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"24355:3:69","nodeType":"YulIdentifier","src":"24355:3:69"},"nativeSrc":"24355:17:69","nodeType":"YulFunctionCall","src":"24355:17:69"},{"arguments":[{"name":"tail","nativeSrc":"24378:4:69","nodeType":"YulIdentifier","src":"24378:4:69"},{"name":"headStart","nativeSrc":"24384:9:69","nodeType":"YulIdentifier","src":"24384:9:69"}],"functionName":{"name":"sub","nativeSrc":"24374:3:69","nodeType":"YulIdentifier","src":"24374:3:69"},"nativeSrc":"24374:20:69","nodeType":"YulFunctionCall","src":"24374:20:69"}],"functionName":{"name":"mstore","nativeSrc":"24348:6:69","nodeType":"YulIdentifier","src":"24348:6:69"},"nativeSrc":"24348:47:69","nodeType":"YulFunctionCall","src":"24348:47:69"},"nativeSrc":"24348:47:69","nodeType":"YulExpressionStatement","src":"24348:47:69"},{"nativeSrc":"24404:139:69","nodeType":"YulAssignment","src":"24404:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"24538:4:69","nodeType":"YulIdentifier","src":"24538:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack","nativeSrc":"24412:124:69","nodeType":"YulIdentifier","src":"24412:124:69"},"nativeSrc":"24412:131:69","nodeType":"YulFunctionCall","src":"24412:131:69"},"variableNames":[{"name":"tail","nativeSrc":"24404:4:69","nodeType":"YulIdentifier","src":"24404:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"24131:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"24282:9:69","nodeType":"YulTypedName","src":"24282:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"24297:4:69","nodeType":"YulTypedName","src":"24297:4:69","type":""}],"src":"24131:419:69"},{"body":{"nativeSrc":"24662:51:69","nodeType":"YulBlock","src":"24662:51:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"24684:6:69","nodeType":"YulIdentifier","src":"24684:6:69"},{"kind":"number","nativeSrc":"24692:1:69","nodeType":"YulLiteral","src":"24692:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"24680:3:69","nodeType":"YulIdentifier","src":"24680:3:69"},"nativeSrc":"24680:14:69","nodeType":"YulFunctionCall","src":"24680:14:69"},{"hexValue":"6465706f736974","kind":"string","nativeSrc":"24696:9:69","nodeType":"YulLiteral","src":"24696:9:69","type":"","value":"deposit"}],"functionName":{"name":"mstore","nativeSrc":"24673:6:69","nodeType":"YulIdentifier","src":"24673:6:69"},"nativeSrc":"24673:33:69","nodeType":"YulFunctionCall","src":"24673:33:69"},"nativeSrc":"24673:33:69","nodeType":"YulExpressionStatement","src":"24673:33:69"}]},"name":"store_literal_in_memory_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01","nativeSrc":"24556:157:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"24654:6:69","nodeType":"YulTypedName","src":"24654:6:69","type":""}],"src":"24556:157:69"},{"body":{"nativeSrc":"24865:219:69","nodeType":"YulBlock","src":"24865:219:69","statements":[{"nativeSrc":"24875:73:69","nodeType":"YulAssignment","src":"24875:73:69","value":{"arguments":[{"name":"pos","nativeSrc":"24941:3:69","nodeType":"YulIdentifier","src":"24941:3:69"},{"kind":"number","nativeSrc":"24946:1:69","nodeType":"YulLiteral","src":"24946:1:69","type":"","value":"7"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"24882:58:69","nodeType":"YulIdentifier","src":"24882:58:69"},"nativeSrc":"24882:66:69","nodeType":"YulFunctionCall","src":"24882:66:69"},"variableNames":[{"name":"pos","nativeSrc":"24875:3:69","nodeType":"YulIdentifier","src":"24875:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"25046:3:69","nodeType":"YulIdentifier","src":"25046:3:69"}],"functionName":{"name":"store_literal_in_memory_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01","nativeSrc":"24957:88:69","nodeType":"YulIdentifier","src":"24957:88:69"},"nativeSrc":"24957:93:69","nodeType":"YulFunctionCall","src":"24957:93:69"},"nativeSrc":"24957:93:69","nodeType":"YulExpressionStatement","src":"24957:93:69"},{"nativeSrc":"25059:19:69","nodeType":"YulAssignment","src":"25059:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"25070:3:69","nodeType":"YulIdentifier","src":"25070:3:69"},{"kind":"number","nativeSrc":"25075:2:69","nodeType":"YulLiteral","src":"25075:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"25066:3:69","nodeType":"YulIdentifier","src":"25066:3:69"},"nativeSrc":"25066:12:69","nodeType":"YulFunctionCall","src":"25066:12:69"},"variableNames":[{"name":"end","nativeSrc":"25059:3:69","nodeType":"YulIdentifier","src":"25059:3:69"}]}]},"name":"abi_encode_t_stringliteral_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01_to_t_string_memory_ptr_fromStack","nativeSrc":"24719:365:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"24853:3:69","nodeType":"YulTypedName","src":"24853:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"24861:3:69","nodeType":"YulTypedName","src":"24861:3:69","type":""}],"src":"24719:365:69"},{"body":{"nativeSrc":"25261:248:69","nodeType":"YulBlock","src":"25261:248:69","statements":[{"nativeSrc":"25271:26:69","nodeType":"YulAssignment","src":"25271:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"25283:9:69","nodeType":"YulIdentifier","src":"25283:9:69"},{"kind":"number","nativeSrc":"25294:2:69","nodeType":"YulLiteral","src":"25294:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"25279:3:69","nodeType":"YulIdentifier","src":"25279:3:69"},"nativeSrc":"25279:18:69","nodeType":"YulFunctionCall","src":"25279:18:69"},"variableNames":[{"name":"tail","nativeSrc":"25271:4:69","nodeType":"YulIdentifier","src":"25271:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"25318:9:69","nodeType":"YulIdentifier","src":"25318:9:69"},{"kind":"number","nativeSrc":"25329:1:69","nodeType":"YulLiteral","src":"25329:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"25314:3:69","nodeType":"YulIdentifier","src":"25314:3:69"},"nativeSrc":"25314:17:69","nodeType":"YulFunctionCall","src":"25314:17:69"},{"arguments":[{"name":"tail","nativeSrc":"25337:4:69","nodeType":"YulIdentifier","src":"25337:4:69"},{"name":"headStart","nativeSrc":"25343:9:69","nodeType":"YulIdentifier","src":"25343:9:69"}],"functionName":{"name":"sub","nativeSrc":"25333:3:69","nodeType":"YulIdentifier","src":"25333:3:69"},"nativeSrc":"25333:20:69","nodeType":"YulFunctionCall","src":"25333:20:69"}],"functionName":{"name":"mstore","nativeSrc":"25307:6:69","nodeType":"YulIdentifier","src":"25307:6:69"},"nativeSrc":"25307:47:69","nodeType":"YulFunctionCall","src":"25307:47:69"},"nativeSrc":"25307:47:69","nodeType":"YulExpressionStatement","src":"25307:47:69"},{"nativeSrc":"25363:139:69","nodeType":"YulAssignment","src":"25363:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"25497:4:69","nodeType":"YulIdentifier","src":"25497:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01_to_t_string_memory_ptr_fromStack","nativeSrc":"25371:124:69","nodeType":"YulIdentifier","src":"25371:124:69"},"nativeSrc":"25371:131:69","nodeType":"YulFunctionCall","src":"25371:131:69"},"variableNames":[{"name":"tail","nativeSrc":"25363:4:69","nodeType":"YulIdentifier","src":"25363:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"25090:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"25241:9:69","nodeType":"YulTypedName","src":"25241:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"25256:4:69","nodeType":"YulTypedName","src":"25256:4:69","type":""}],"src":"25090:419:69"},{"body":{"nativeSrc":"25621:122:69","nodeType":"YulBlock","src":"25621:122:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"25643:6:69","nodeType":"YulIdentifier","src":"25643:6:69"},{"kind":"number","nativeSrc":"25651:1:69","nodeType":"YulLiteral","src":"25651:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"25639:3:69","nodeType":"YulIdentifier","src":"25639:3:69"},"nativeSrc":"25639:14:69","nodeType":"YulFunctionCall","src":"25639:14:69"},{"hexValue":"4f776e61626c6532537465703a2063616c6c6572206973206e6f742074686520","kind":"string","nativeSrc":"25655:34:69","nodeType":"YulLiteral","src":"25655:34:69","type":"","value":"Ownable2Step: caller is not the "}],"functionName":{"name":"mstore","nativeSrc":"25632:6:69","nodeType":"YulIdentifier","src":"25632:6:69"},"nativeSrc":"25632:58:69","nodeType":"YulFunctionCall","src":"25632:58:69"},"nativeSrc":"25632:58:69","nodeType":"YulExpressionStatement","src":"25632:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"25711:6:69","nodeType":"YulIdentifier","src":"25711:6:69"},{"kind":"number","nativeSrc":"25719:2:69","nodeType":"YulLiteral","src":"25719:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"25707:3:69","nodeType":"YulIdentifier","src":"25707:3:69"},"nativeSrc":"25707:15:69","nodeType":"YulFunctionCall","src":"25707:15:69"},{"hexValue":"6e6577206f776e6572","kind":"string","nativeSrc":"25724:11:69","nodeType":"YulLiteral","src":"25724:11:69","type":"","value":"new owner"}],"functionName":{"name":"mstore","nativeSrc":"25700:6:69","nodeType":"YulIdentifier","src":"25700:6:69"},"nativeSrc":"25700:36:69","nodeType":"YulFunctionCall","src":"25700:36:69"},"nativeSrc":"25700:36:69","nodeType":"YulExpressionStatement","src":"25700:36:69"}]},"name":"store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc","nativeSrc":"25515:228:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"25613:6:69","nodeType":"YulTypedName","src":"25613:6:69","type":""}],"src":"25515:228:69"},{"body":{"nativeSrc":"25895:220:69","nodeType":"YulBlock","src":"25895:220:69","statements":[{"nativeSrc":"25905:74:69","nodeType":"YulAssignment","src":"25905:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"25971:3:69","nodeType":"YulIdentifier","src":"25971:3:69"},{"kind":"number","nativeSrc":"25976:2:69","nodeType":"YulLiteral","src":"25976:2:69","type":"","value":"41"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"25912:58:69","nodeType":"YulIdentifier","src":"25912:58:69"},"nativeSrc":"25912:67:69","nodeType":"YulFunctionCall","src":"25912:67:69"},"variableNames":[{"name":"pos","nativeSrc":"25905:3:69","nodeType":"YulIdentifier","src":"25905:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"26077:3:69","nodeType":"YulIdentifier","src":"26077:3:69"}],"functionName":{"name":"store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc","nativeSrc":"25988:88:69","nodeType":"YulIdentifier","src":"25988:88:69"},"nativeSrc":"25988:93:69","nodeType":"YulFunctionCall","src":"25988:93:69"},"nativeSrc":"25988:93:69","nodeType":"YulExpressionStatement","src":"25988:93:69"},{"nativeSrc":"26090:19:69","nodeType":"YulAssignment","src":"26090:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"26101:3:69","nodeType":"YulIdentifier","src":"26101:3:69"},{"kind":"number","nativeSrc":"26106:2:69","nodeType":"YulLiteral","src":"26106:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"26097:3:69","nodeType":"YulIdentifier","src":"26097:3:69"},"nativeSrc":"26097:12:69","nodeType":"YulFunctionCall","src":"26097:12:69"},"variableNames":[{"name":"end","nativeSrc":"26090:3:69","nodeType":"YulIdentifier","src":"26090:3:69"}]}]},"name":"abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack","nativeSrc":"25749:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"25883:3:69","nodeType":"YulTypedName","src":"25883:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"25891:3:69","nodeType":"YulTypedName","src":"25891:3:69","type":""}],"src":"25749:366:69"},{"body":{"nativeSrc":"26292:248:69","nodeType":"YulBlock","src":"26292:248:69","statements":[{"nativeSrc":"26302:26:69","nodeType":"YulAssignment","src":"26302:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"26314:9:69","nodeType":"YulIdentifier","src":"26314:9:69"},{"kind":"number","nativeSrc":"26325:2:69","nodeType":"YulLiteral","src":"26325:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"26310:3:69","nodeType":"YulIdentifier","src":"26310:3:69"},"nativeSrc":"26310:18:69","nodeType":"YulFunctionCall","src":"26310:18:69"},"variableNames":[{"name":"tail","nativeSrc":"26302:4:69","nodeType":"YulIdentifier","src":"26302:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"26349:9:69","nodeType":"YulIdentifier","src":"26349:9:69"},{"kind":"number","nativeSrc":"26360:1:69","nodeType":"YulLiteral","src":"26360:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"26345:3:69","nodeType":"YulIdentifier","src":"26345:3:69"},"nativeSrc":"26345:17:69","nodeType":"YulFunctionCall","src":"26345:17:69"},{"arguments":[{"name":"tail","nativeSrc":"26368:4:69","nodeType":"YulIdentifier","src":"26368:4:69"},{"name":"headStart","nativeSrc":"26374:9:69","nodeType":"YulIdentifier","src":"26374:9:69"}],"functionName":{"name":"sub","nativeSrc":"26364:3:69","nodeType":"YulIdentifier","src":"26364:3:69"},"nativeSrc":"26364:20:69","nodeType":"YulFunctionCall","src":"26364:20:69"}],"functionName":{"name":"mstore","nativeSrc":"26338:6:69","nodeType":"YulIdentifier","src":"26338:6:69"},"nativeSrc":"26338:47:69","nodeType":"YulFunctionCall","src":"26338:47:69"},"nativeSrc":"26338:47:69","nodeType":"YulExpressionStatement","src":"26338:47:69"},{"nativeSrc":"26394:139:69","nodeType":"YulAssignment","src":"26394:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"26528:4:69","nodeType":"YulIdentifier","src":"26528:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack","nativeSrc":"26402:124:69","nodeType":"YulIdentifier","src":"26402:124:69"},"nativeSrc":"26402:131:69","nodeType":"YulFunctionCall","src":"26402:131:69"},"variableNames":[{"name":"tail","nativeSrc":"26394:4:69","nodeType":"YulIdentifier","src":"26394:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"26121:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"26272:9:69","nodeType":"YulTypedName","src":"26272:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"26287:4:69","nodeType":"YulTypedName","src":"26287:4:69","type":""}],"src":"26121:419:69"},{"body":{"nativeSrc":"26652:48:69","nodeType":"YulBlock","src":"26652:48:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"26674:6:69","nodeType":"YulIdentifier","src":"26674:6:69"},{"kind":"number","nativeSrc":"26682:1:69","nodeType":"YulLiteral","src":"26682:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"26670:3:69","nodeType":"YulIdentifier","src":"26670:3:69"},"nativeSrc":"26670:14:69","nodeType":"YulFunctionCall","src":"26670:14:69"},{"hexValue":"6d696e74","kind":"string","nativeSrc":"26686:6:69","nodeType":"YulLiteral","src":"26686:6:69","type":"","value":"mint"}],"functionName":{"name":"mstore","nativeSrc":"26663:6:69","nodeType":"YulIdentifier","src":"26663:6:69"},"nativeSrc":"26663:30:69","nodeType":"YulFunctionCall","src":"26663:30:69"},"nativeSrc":"26663:30:69","nodeType":"YulExpressionStatement","src":"26663:30:69"}]},"name":"store_literal_in_memory_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354","nativeSrc":"26546:154:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"26644:6:69","nodeType":"YulTypedName","src":"26644:6:69","type":""}],"src":"26546:154:69"},{"body":{"nativeSrc":"26852:219:69","nodeType":"YulBlock","src":"26852:219:69","statements":[{"nativeSrc":"26862:73:69","nodeType":"YulAssignment","src":"26862:73:69","value":{"arguments":[{"name":"pos","nativeSrc":"26928:3:69","nodeType":"YulIdentifier","src":"26928:3:69"},{"kind":"number","nativeSrc":"26933:1:69","nodeType":"YulLiteral","src":"26933:1:69","type":"","value":"4"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"26869:58:69","nodeType":"YulIdentifier","src":"26869:58:69"},"nativeSrc":"26869:66:69","nodeType":"YulFunctionCall","src":"26869:66:69"},"variableNames":[{"name":"pos","nativeSrc":"26862:3:69","nodeType":"YulIdentifier","src":"26862:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"27033:3:69","nodeType":"YulIdentifier","src":"27033:3:69"}],"functionName":{"name":"store_literal_in_memory_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354","nativeSrc":"26944:88:69","nodeType":"YulIdentifier","src":"26944:88:69"},"nativeSrc":"26944:93:69","nodeType":"YulFunctionCall","src":"26944:93:69"},"nativeSrc":"26944:93:69","nodeType":"YulExpressionStatement","src":"26944:93:69"},{"nativeSrc":"27046:19:69","nodeType":"YulAssignment","src":"27046:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"27057:3:69","nodeType":"YulIdentifier","src":"27057:3:69"},{"kind":"number","nativeSrc":"27062:2:69","nodeType":"YulLiteral","src":"27062:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"27053:3:69","nodeType":"YulIdentifier","src":"27053:3:69"},"nativeSrc":"27053:12:69","nodeType":"YulFunctionCall","src":"27053:12:69"},"variableNames":[{"name":"end","nativeSrc":"27046:3:69","nodeType":"YulIdentifier","src":"27046:3:69"}]}]},"name":"abi_encode_t_stringliteral_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354_to_t_string_memory_ptr_fromStack","nativeSrc":"26706:365:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"26840:3:69","nodeType":"YulTypedName","src":"26840:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"26848:3:69","nodeType":"YulTypedName","src":"26848:3:69","type":""}],"src":"26706:365:69"},{"body":{"nativeSrc":"27248:248:69","nodeType":"YulBlock","src":"27248:248:69","statements":[{"nativeSrc":"27258:26:69","nodeType":"YulAssignment","src":"27258:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"27270:9:69","nodeType":"YulIdentifier","src":"27270:9:69"},{"kind":"number","nativeSrc":"27281:2:69","nodeType":"YulLiteral","src":"27281:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"27266:3:69","nodeType":"YulIdentifier","src":"27266:3:69"},"nativeSrc":"27266:18:69","nodeType":"YulFunctionCall","src":"27266:18:69"},"variableNames":[{"name":"tail","nativeSrc":"27258:4:69","nodeType":"YulIdentifier","src":"27258:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"27305:9:69","nodeType":"YulIdentifier","src":"27305:9:69"},{"kind":"number","nativeSrc":"27316:1:69","nodeType":"YulLiteral","src":"27316:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"27301:3:69","nodeType":"YulIdentifier","src":"27301:3:69"},"nativeSrc":"27301:17:69","nodeType":"YulFunctionCall","src":"27301:17:69"},{"arguments":[{"name":"tail","nativeSrc":"27324:4:69","nodeType":"YulIdentifier","src":"27324:4:69"},{"name":"headStart","nativeSrc":"27330:9:69","nodeType":"YulIdentifier","src":"27330:9:69"}],"functionName":{"name":"sub","nativeSrc":"27320:3:69","nodeType":"YulIdentifier","src":"27320:3:69"},"nativeSrc":"27320:20:69","nodeType":"YulFunctionCall","src":"27320:20:69"}],"functionName":{"name":"mstore","nativeSrc":"27294:6:69","nodeType":"YulIdentifier","src":"27294:6:69"},"nativeSrc":"27294:47:69","nodeType":"YulFunctionCall","src":"27294:47:69"},"nativeSrc":"27294:47:69","nodeType":"YulExpressionStatement","src":"27294:47:69"},{"nativeSrc":"27350:139:69","nodeType":"YulAssignment","src":"27350:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"27484:4:69","nodeType":"YulIdentifier","src":"27484:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354_to_t_string_memory_ptr_fromStack","nativeSrc":"27358:124:69","nodeType":"YulIdentifier","src":"27358:124:69"},"nativeSrc":"27358:131:69","nodeType":"YulFunctionCall","src":"27358:131:69"},"variableNames":[{"name":"tail","nativeSrc":"27350:4:69","nodeType":"YulIdentifier","src":"27350:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"27077:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"27228:9:69","nodeType":"YulTypedName","src":"27228:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"27243:4:69","nodeType":"YulTypedName","src":"27243:4:69","type":""}],"src":"27077:419:69"},{"body":{"nativeSrc":"27608:118:69","nodeType":"YulBlock","src":"27608:118:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"27630:6:69","nodeType":"YulIdentifier","src":"27630:6:69"},{"kind":"number","nativeSrc":"27638:1:69","nodeType":"YulLiteral","src":"27638:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"27626:3:69","nodeType":"YulIdentifier","src":"27626:3:69"},"nativeSrc":"27626:14:69","nodeType":"YulFunctionCall","src":"27626:14:69"},{"hexValue":"45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77","kind":"string","nativeSrc":"27642:34:69","nodeType":"YulLiteral","src":"27642:34:69","type":"","value":"ERC20: decreased allowance below"}],"functionName":{"name":"mstore","nativeSrc":"27619:6:69","nodeType":"YulIdentifier","src":"27619:6:69"},"nativeSrc":"27619:58:69","nodeType":"YulFunctionCall","src":"27619:58:69"},"nativeSrc":"27619:58:69","nodeType":"YulExpressionStatement","src":"27619:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"27698:6:69","nodeType":"YulIdentifier","src":"27698:6:69"},{"kind":"number","nativeSrc":"27706:2:69","nodeType":"YulLiteral","src":"27706:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"27694:3:69","nodeType":"YulIdentifier","src":"27694:3:69"},"nativeSrc":"27694:15:69","nodeType":"YulFunctionCall","src":"27694:15:69"},{"hexValue":"207a65726f","kind":"string","nativeSrc":"27711:7:69","nodeType":"YulLiteral","src":"27711:7:69","type":"","value":" zero"}],"functionName":{"name":"mstore","nativeSrc":"27687:6:69","nodeType":"YulIdentifier","src":"27687:6:69"},"nativeSrc":"27687:32:69","nodeType":"YulFunctionCall","src":"27687:32:69"},"nativeSrc":"27687:32:69","nodeType":"YulExpressionStatement","src":"27687:32:69"}]},"name":"store_literal_in_memory_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8","nativeSrc":"27502:224:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"27600:6:69","nodeType":"YulTypedName","src":"27600:6:69","type":""}],"src":"27502:224:69"},{"body":{"nativeSrc":"27878:220:69","nodeType":"YulBlock","src":"27878:220:69","statements":[{"nativeSrc":"27888:74:69","nodeType":"YulAssignment","src":"27888:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"27954:3:69","nodeType":"YulIdentifier","src":"27954:3:69"},{"kind":"number","nativeSrc":"27959:2:69","nodeType":"YulLiteral","src":"27959:2:69","type":"","value":"37"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"27895:58:69","nodeType":"YulIdentifier","src":"27895:58:69"},"nativeSrc":"27895:67:69","nodeType":"YulFunctionCall","src":"27895:67:69"},"variableNames":[{"name":"pos","nativeSrc":"27888:3:69","nodeType":"YulIdentifier","src":"27888:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"28060:3:69","nodeType":"YulIdentifier","src":"28060:3:69"}],"functionName":{"name":"store_literal_in_memory_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8","nativeSrc":"27971:88:69","nodeType":"YulIdentifier","src":"27971:88:69"},"nativeSrc":"27971:93:69","nodeType":"YulFunctionCall","src":"27971:93:69"},"nativeSrc":"27971:93:69","nodeType":"YulExpressionStatement","src":"27971:93:69"},{"nativeSrc":"28073:19:69","nodeType":"YulAssignment","src":"28073:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"28084:3:69","nodeType":"YulIdentifier","src":"28084:3:69"},{"kind":"number","nativeSrc":"28089:2:69","nodeType":"YulLiteral","src":"28089:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"28080:3:69","nodeType":"YulIdentifier","src":"28080:3:69"},"nativeSrc":"28080:12:69","nodeType":"YulFunctionCall","src":"28080:12:69"},"variableNames":[{"name":"end","nativeSrc":"28073:3:69","nodeType":"YulIdentifier","src":"28073:3:69"}]}]},"name":"abi_encode_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8_to_t_string_memory_ptr_fromStack","nativeSrc":"27732:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"27866:3:69","nodeType":"YulTypedName","src":"27866:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"27874:3:69","nodeType":"YulTypedName","src":"27874:3:69","type":""}],"src":"27732:366:69"},{"body":{"nativeSrc":"28275:248:69","nodeType":"YulBlock","src":"28275:248:69","statements":[{"nativeSrc":"28285:26:69","nodeType":"YulAssignment","src":"28285:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"28297:9:69","nodeType":"YulIdentifier","src":"28297:9:69"},{"kind":"number","nativeSrc":"28308:2:69","nodeType":"YulLiteral","src":"28308:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"28293:3:69","nodeType":"YulIdentifier","src":"28293:3:69"},"nativeSrc":"28293:18:69","nodeType":"YulFunctionCall","src":"28293:18:69"},"variableNames":[{"name":"tail","nativeSrc":"28285:4:69","nodeType":"YulIdentifier","src":"28285:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"28332:9:69","nodeType":"YulIdentifier","src":"28332:9:69"},{"kind":"number","nativeSrc":"28343:1:69","nodeType":"YulLiteral","src":"28343:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"28328:3:69","nodeType":"YulIdentifier","src":"28328:3:69"},"nativeSrc":"28328:17:69","nodeType":"YulFunctionCall","src":"28328:17:69"},{"arguments":[{"name":"tail","nativeSrc":"28351:4:69","nodeType":"YulIdentifier","src":"28351:4:69"},{"name":"headStart","nativeSrc":"28357:9:69","nodeType":"YulIdentifier","src":"28357:9:69"}],"functionName":{"name":"sub","nativeSrc":"28347:3:69","nodeType":"YulIdentifier","src":"28347:3:69"},"nativeSrc":"28347:20:69","nodeType":"YulFunctionCall","src":"28347:20:69"}],"functionName":{"name":"mstore","nativeSrc":"28321:6:69","nodeType":"YulIdentifier","src":"28321:6:69"},"nativeSrc":"28321:47:69","nodeType":"YulFunctionCall","src":"28321:47:69"},"nativeSrc":"28321:47:69","nodeType":"YulExpressionStatement","src":"28321:47:69"},{"nativeSrc":"28377:139:69","nodeType":"YulAssignment","src":"28377:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"28511:4:69","nodeType":"YulIdentifier","src":"28511:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8_to_t_string_memory_ptr_fromStack","nativeSrc":"28385:124:69","nodeType":"YulIdentifier","src":"28385:124:69"},"nativeSrc":"28385:131:69","nodeType":"YulFunctionCall","src":"28385:131:69"},"variableNames":[{"name":"tail","nativeSrc":"28377:4:69","nodeType":"YulIdentifier","src":"28377:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"28104:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"28255:9:69","nodeType":"YulTypedName","src":"28255:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"28270:4:69","nodeType":"YulTypedName","src":"28270:4:69","type":""}],"src":"28104:419:69"},{"body":{"nativeSrc":"28635:52:69","nodeType":"YulBlock","src":"28635:52:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"28657:6:69","nodeType":"YulIdentifier","src":"28657:6:69"},{"kind":"number","nativeSrc":"28665:1:69","nodeType":"YulLiteral","src":"28665:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"28653:3:69","nodeType":"YulIdentifier","src":"28653:3:69"},"nativeSrc":"28653:14:69","nodeType":"YulFunctionCall","src":"28653:14:69"},{"hexValue":"7769746864726177","kind":"string","nativeSrc":"28669:10:69","nodeType":"YulLiteral","src":"28669:10:69","type":"","value":"withdraw"}],"functionName":{"name":"mstore","nativeSrc":"28646:6:69","nodeType":"YulIdentifier","src":"28646:6:69"},"nativeSrc":"28646:34:69","nodeType":"YulFunctionCall","src":"28646:34:69"},"nativeSrc":"28646:34:69","nodeType":"YulExpressionStatement","src":"28646:34:69"}]},"name":"store_literal_in_memory_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77","nativeSrc":"28529:158:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"28627:6:69","nodeType":"YulTypedName","src":"28627:6:69","type":""}],"src":"28529:158:69"},{"body":{"nativeSrc":"28839:219:69","nodeType":"YulBlock","src":"28839:219:69","statements":[{"nativeSrc":"28849:73:69","nodeType":"YulAssignment","src":"28849:73:69","value":{"arguments":[{"name":"pos","nativeSrc":"28915:3:69","nodeType":"YulIdentifier","src":"28915:3:69"},{"kind":"number","nativeSrc":"28920:1:69","nodeType":"YulLiteral","src":"28920:1:69","type":"","value":"8"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"28856:58:69","nodeType":"YulIdentifier","src":"28856:58:69"},"nativeSrc":"28856:66:69","nodeType":"YulFunctionCall","src":"28856:66:69"},"variableNames":[{"name":"pos","nativeSrc":"28849:3:69","nodeType":"YulIdentifier","src":"28849:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"29020:3:69","nodeType":"YulIdentifier","src":"29020:3:69"}],"functionName":{"name":"store_literal_in_memory_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77","nativeSrc":"28931:88:69","nodeType":"YulIdentifier","src":"28931:88:69"},"nativeSrc":"28931:93:69","nodeType":"YulFunctionCall","src":"28931:93:69"},"nativeSrc":"28931:93:69","nodeType":"YulExpressionStatement","src":"28931:93:69"},{"nativeSrc":"29033:19:69","nodeType":"YulAssignment","src":"29033:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"29044:3:69","nodeType":"YulIdentifier","src":"29044:3:69"},{"kind":"number","nativeSrc":"29049:2:69","nodeType":"YulLiteral","src":"29049:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"29040:3:69","nodeType":"YulIdentifier","src":"29040:3:69"},"nativeSrc":"29040:12:69","nodeType":"YulFunctionCall","src":"29040:12:69"},"variableNames":[{"name":"end","nativeSrc":"29033:3:69","nodeType":"YulIdentifier","src":"29033:3:69"}]}]},"name":"abi_encode_t_stringliteral_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77_to_t_string_memory_ptr_fromStack","nativeSrc":"28693:365:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"28827:3:69","nodeType":"YulTypedName","src":"28827:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"28835:3:69","nodeType":"YulTypedName","src":"28835:3:69","type":""}],"src":"28693:365:69"},{"body":{"nativeSrc":"29235:248:69","nodeType":"YulBlock","src":"29235:248:69","statements":[{"nativeSrc":"29245:26:69","nodeType":"YulAssignment","src":"29245:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"29257:9:69","nodeType":"YulIdentifier","src":"29257:9:69"},{"kind":"number","nativeSrc":"29268:2:69","nodeType":"YulLiteral","src":"29268:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"29253:3:69","nodeType":"YulIdentifier","src":"29253:3:69"},"nativeSrc":"29253:18:69","nodeType":"YulFunctionCall","src":"29253:18:69"},"variableNames":[{"name":"tail","nativeSrc":"29245:4:69","nodeType":"YulIdentifier","src":"29245:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"29292:9:69","nodeType":"YulIdentifier","src":"29292:9:69"},{"kind":"number","nativeSrc":"29303:1:69","nodeType":"YulLiteral","src":"29303:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"29288:3:69","nodeType":"YulIdentifier","src":"29288:3:69"},"nativeSrc":"29288:17:69","nodeType":"YulFunctionCall","src":"29288:17:69"},{"arguments":[{"name":"tail","nativeSrc":"29311:4:69","nodeType":"YulIdentifier","src":"29311:4:69"},{"name":"headStart","nativeSrc":"29317:9:69","nodeType":"YulIdentifier","src":"29317:9:69"}],"functionName":{"name":"sub","nativeSrc":"29307:3:69","nodeType":"YulIdentifier","src":"29307:3:69"},"nativeSrc":"29307:20:69","nodeType":"YulFunctionCall","src":"29307:20:69"}],"functionName":{"name":"mstore","nativeSrc":"29281:6:69","nodeType":"YulIdentifier","src":"29281:6:69"},"nativeSrc":"29281:47:69","nodeType":"YulFunctionCall","src":"29281:47:69"},"nativeSrc":"29281:47:69","nodeType":"YulExpressionStatement","src":"29281:47:69"},{"nativeSrc":"29337:139:69","nodeType":"YulAssignment","src":"29337:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"29471:4:69","nodeType":"YulIdentifier","src":"29471:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77_to_t_string_memory_ptr_fromStack","nativeSrc":"29345:124:69","nodeType":"YulIdentifier","src":"29345:124:69"},"nativeSrc":"29345:131:69","nodeType":"YulFunctionCall","src":"29345:131:69"},"variableNames":[{"name":"tail","nativeSrc":"29337:4:69","nodeType":"YulIdentifier","src":"29337:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"29064:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"29215:9:69","nodeType":"YulTypedName","src":"29215:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"29230:4:69","nodeType":"YulTypedName","src":"29230:4:69","type":""}],"src":"29064:419:69"},{"body":{"nativeSrc":"29595:50:69","nodeType":"YulBlock","src":"29595:50:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"29617:6:69","nodeType":"YulIdentifier","src":"29617:6:69"},{"kind":"number","nativeSrc":"29625:1:69","nodeType":"YulLiteral","src":"29625:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"29613:3:69","nodeType":"YulIdentifier","src":"29613:3:69"},"nativeSrc":"29613:14:69","nodeType":"YulFunctionCall","src":"29613:14:69"},{"hexValue":"72656465656d","kind":"string","nativeSrc":"29629:8:69","nodeType":"YulLiteral","src":"29629:8:69","type":"","value":"redeem"}],"functionName":{"name":"mstore","nativeSrc":"29606:6:69","nodeType":"YulIdentifier","src":"29606:6:69"},"nativeSrc":"29606:32:69","nodeType":"YulFunctionCall","src":"29606:32:69"},"nativeSrc":"29606:32:69","nodeType":"YulExpressionStatement","src":"29606:32:69"}]},"name":"store_literal_in_memory_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609","nativeSrc":"29489:156:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"29587:6:69","nodeType":"YulTypedName","src":"29587:6:69","type":""}],"src":"29489:156:69"},{"body":{"nativeSrc":"29797:219:69","nodeType":"YulBlock","src":"29797:219:69","statements":[{"nativeSrc":"29807:73:69","nodeType":"YulAssignment","src":"29807:73:69","value":{"arguments":[{"name":"pos","nativeSrc":"29873:3:69","nodeType":"YulIdentifier","src":"29873:3:69"},{"kind":"number","nativeSrc":"29878:1:69","nodeType":"YulLiteral","src":"29878:1:69","type":"","value":"6"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"29814:58:69","nodeType":"YulIdentifier","src":"29814:58:69"},"nativeSrc":"29814:66:69","nodeType":"YulFunctionCall","src":"29814:66:69"},"variableNames":[{"name":"pos","nativeSrc":"29807:3:69","nodeType":"YulIdentifier","src":"29807:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"29978:3:69","nodeType":"YulIdentifier","src":"29978:3:69"}],"functionName":{"name":"store_literal_in_memory_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609","nativeSrc":"29889:88:69","nodeType":"YulIdentifier","src":"29889:88:69"},"nativeSrc":"29889:93:69","nodeType":"YulFunctionCall","src":"29889:93:69"},"nativeSrc":"29889:93:69","nodeType":"YulExpressionStatement","src":"29889:93:69"},{"nativeSrc":"29991:19:69","nodeType":"YulAssignment","src":"29991:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"30002:3:69","nodeType":"YulIdentifier","src":"30002:3:69"},{"kind":"number","nativeSrc":"30007:2:69","nodeType":"YulLiteral","src":"30007:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"29998:3:69","nodeType":"YulIdentifier","src":"29998:3:69"},"nativeSrc":"29998:12:69","nodeType":"YulFunctionCall","src":"29998:12:69"},"variableNames":[{"name":"end","nativeSrc":"29991:3:69","nodeType":"YulIdentifier","src":"29991:3:69"}]}]},"name":"abi_encode_t_stringliteral_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609_to_t_string_memory_ptr_fromStack","nativeSrc":"29651:365:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"29785:3:69","nodeType":"YulTypedName","src":"29785:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"29793:3:69","nodeType":"YulTypedName","src":"29793:3:69","type":""}],"src":"29651:365:69"},{"body":{"nativeSrc":"30193:248:69","nodeType":"YulBlock","src":"30193:248:69","statements":[{"nativeSrc":"30203:26:69","nodeType":"YulAssignment","src":"30203:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"30215:9:69","nodeType":"YulIdentifier","src":"30215:9:69"},{"kind":"number","nativeSrc":"30226:2:69","nodeType":"YulLiteral","src":"30226:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"30211:3:69","nodeType":"YulIdentifier","src":"30211:3:69"},"nativeSrc":"30211:18:69","nodeType":"YulFunctionCall","src":"30211:18:69"},"variableNames":[{"name":"tail","nativeSrc":"30203:4:69","nodeType":"YulIdentifier","src":"30203:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"30250:9:69","nodeType":"YulIdentifier","src":"30250:9:69"},{"kind":"number","nativeSrc":"30261:1:69","nodeType":"YulLiteral","src":"30261:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"30246:3:69","nodeType":"YulIdentifier","src":"30246:3:69"},"nativeSrc":"30246:17:69","nodeType":"YulFunctionCall","src":"30246:17:69"},{"arguments":[{"name":"tail","nativeSrc":"30269:4:69","nodeType":"YulIdentifier","src":"30269:4:69"},{"name":"headStart","nativeSrc":"30275:9:69","nodeType":"YulIdentifier","src":"30275:9:69"}],"functionName":{"name":"sub","nativeSrc":"30265:3:69","nodeType":"YulIdentifier","src":"30265:3:69"},"nativeSrc":"30265:20:69","nodeType":"YulFunctionCall","src":"30265:20:69"}],"functionName":{"name":"mstore","nativeSrc":"30239:6:69","nodeType":"YulIdentifier","src":"30239:6:69"},"nativeSrc":"30239:47:69","nodeType":"YulFunctionCall","src":"30239:47:69"},"nativeSrc":"30239:47:69","nodeType":"YulExpressionStatement","src":"30239:47:69"},{"nativeSrc":"30295:139:69","nodeType":"YulAssignment","src":"30295:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"30429:4:69","nodeType":"YulIdentifier","src":"30429:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609_to_t_string_memory_ptr_fromStack","nativeSrc":"30303:124:69","nodeType":"YulIdentifier","src":"30303:124:69"},"nativeSrc":"30303:131:69","nodeType":"YulFunctionCall","src":"30303:131:69"},"variableNames":[{"name":"tail","nativeSrc":"30295:4:69","nodeType":"YulIdentifier","src":"30295:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"30022:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"30173:9:69","nodeType":"YulTypedName","src":"30173:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"30188:4:69","nodeType":"YulTypedName","src":"30188:4:69","type":""}],"src":"30022:419:69"},{"body":{"nativeSrc":"30521:51:69","nodeType":"YulBlock","src":"30521:51:69","statements":[{"nativeSrc":"30531:35:69","nodeType":"YulAssignment","src":"30531:35:69","value":{"arguments":[{"name":"value","nativeSrc":"30560:5:69","nodeType":"YulIdentifier","src":"30560:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"30542:17:69","nodeType":"YulIdentifier","src":"30542:17:69"},"nativeSrc":"30542:24:69","nodeType":"YulFunctionCall","src":"30542:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"30531:7:69","nodeType":"YulIdentifier","src":"30531:7:69"}]}]},"name":"cleanup_t_contract$_ComptrollerInterface_$9353","nativeSrc":"30447:125:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"30503:5:69","nodeType":"YulTypedName","src":"30503:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"30513:7:69","nodeType":"YulTypedName","src":"30513:7:69","type":""}],"src":"30447:125:69"},{"body":{"nativeSrc":"30650:108:69","nodeType":"YulBlock","src":"30650:108:69","statements":[{"body":{"nativeSrc":"30736:16:69","nodeType":"YulBlock","src":"30736:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"30745:1:69","nodeType":"YulLiteral","src":"30745:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"30748:1:69","nodeType":"YulLiteral","src":"30748:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"30738:6:69","nodeType":"YulIdentifier","src":"30738:6:69"},"nativeSrc":"30738:12:69","nodeType":"YulFunctionCall","src":"30738:12:69"},"nativeSrc":"30738:12:69","nodeType":"YulExpressionStatement","src":"30738:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"30673:5:69","nodeType":"YulIdentifier","src":"30673:5:69"},{"arguments":[{"name":"value","nativeSrc":"30727:5:69","nodeType":"YulIdentifier","src":"30727:5:69"}],"functionName":{"name":"cleanup_t_contract$_ComptrollerInterface_$9353","nativeSrc":"30680:46:69","nodeType":"YulIdentifier","src":"30680:46:69"},"nativeSrc":"30680:53:69","nodeType":"YulFunctionCall","src":"30680:53:69"}],"functionName":{"name":"eq","nativeSrc":"30670:2:69","nodeType":"YulIdentifier","src":"30670:2:69"},"nativeSrc":"30670:64:69","nodeType":"YulFunctionCall","src":"30670:64:69"}],"functionName":{"name":"iszero","nativeSrc":"30663:6:69","nodeType":"YulIdentifier","src":"30663:6:69"},"nativeSrc":"30663:72:69","nodeType":"YulFunctionCall","src":"30663:72:69"},"nativeSrc":"30660:92:69","nodeType":"YulIf","src":"30660:92:69"}]},"name":"validator_revert_t_contract$_ComptrollerInterface_$9353","nativeSrc":"30578:180:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"30643:5:69","nodeType":"YulTypedName","src":"30643:5:69","type":""}],"src":"30578:180:69"},{"body":{"nativeSrc":"30856:109:69","nodeType":"YulBlock","src":"30856:109:69","statements":[{"nativeSrc":"30866:22:69","nodeType":"YulAssignment","src":"30866:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"30881:6:69","nodeType":"YulIdentifier","src":"30881:6:69"}],"functionName":{"name":"mload","nativeSrc":"30875:5:69","nodeType":"YulIdentifier","src":"30875:5:69"},"nativeSrc":"30875:13:69","nodeType":"YulFunctionCall","src":"30875:13:69"},"variableNames":[{"name":"value","nativeSrc":"30866:5:69","nodeType":"YulIdentifier","src":"30866:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"30953:5:69","nodeType":"YulIdentifier","src":"30953:5:69"}],"functionName":{"name":"validator_revert_t_contract$_ComptrollerInterface_$9353","nativeSrc":"30897:55:69","nodeType":"YulIdentifier","src":"30897:55:69"},"nativeSrc":"30897:62:69","nodeType":"YulFunctionCall","src":"30897:62:69"},"nativeSrc":"30897:62:69","nodeType":"YulExpressionStatement","src":"30897:62:69"}]},"name":"abi_decode_t_contract$_ComptrollerInterface_$9353_fromMemory","nativeSrc":"30764:201:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"30834:6:69","nodeType":"YulTypedName","src":"30834:6:69","type":""},{"name":"end","nativeSrc":"30842:3:69","nodeType":"YulTypedName","src":"30842:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"30850:5:69","nodeType":"YulTypedName","src":"30850:5:69","type":""}],"src":"30764:201:69"},{"body":{"nativeSrc":"31077:303:69","nodeType":"YulBlock","src":"31077:303:69","statements":[{"body":{"nativeSrc":"31123:83:69","nodeType":"YulBlock","src":"31123:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"31125:77:69","nodeType":"YulIdentifier","src":"31125:77:69"},"nativeSrc":"31125:79:69","nodeType":"YulFunctionCall","src":"31125:79:69"},"nativeSrc":"31125:79:69","nodeType":"YulExpressionStatement","src":"31125:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"31098:7:69","nodeType":"YulIdentifier","src":"31098:7:69"},{"name":"headStart","nativeSrc":"31107:9:69","nodeType":"YulIdentifier","src":"31107:9:69"}],"functionName":{"name":"sub","nativeSrc":"31094:3:69","nodeType":"YulIdentifier","src":"31094:3:69"},"nativeSrc":"31094:23:69","nodeType":"YulFunctionCall","src":"31094:23:69"},{"kind":"number","nativeSrc":"31119:2:69","nodeType":"YulLiteral","src":"31119:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"31090:3:69","nodeType":"YulIdentifier","src":"31090:3:69"},"nativeSrc":"31090:32:69","nodeType":"YulFunctionCall","src":"31090:32:69"},"nativeSrc":"31087:119:69","nodeType":"YulIf","src":"31087:119:69"},{"nativeSrc":"31216:157:69","nodeType":"YulBlock","src":"31216:157:69","statements":[{"nativeSrc":"31231:15:69","nodeType":"YulVariableDeclaration","src":"31231:15:69","value":{"kind":"number","nativeSrc":"31245:1:69","nodeType":"YulLiteral","src":"31245:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"31235:6:69","nodeType":"YulTypedName","src":"31235:6:69","type":""}]},{"nativeSrc":"31260:103:69","nodeType":"YulAssignment","src":"31260:103:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"31335:9:69","nodeType":"YulIdentifier","src":"31335:9:69"},{"name":"offset","nativeSrc":"31346:6:69","nodeType":"YulIdentifier","src":"31346:6:69"}],"functionName":{"name":"add","nativeSrc":"31331:3:69","nodeType":"YulIdentifier","src":"31331:3:69"},"nativeSrc":"31331:22:69","nodeType":"YulFunctionCall","src":"31331:22:69"},{"name":"dataEnd","nativeSrc":"31355:7:69","nodeType":"YulIdentifier","src":"31355:7:69"}],"functionName":{"name":"abi_decode_t_contract$_ComptrollerInterface_$9353_fromMemory","nativeSrc":"31270:60:69","nodeType":"YulIdentifier","src":"31270:60:69"},"nativeSrc":"31270:93:69","nodeType":"YulFunctionCall","src":"31270:93:69"},"variableNames":[{"name":"value0","nativeSrc":"31260:6:69","nodeType":"YulIdentifier","src":"31260:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_ComptrollerInterface_$9353_fromMemory","nativeSrc":"30971:409:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"31047:9:69","nodeType":"YulTypedName","src":"31047:9:69","type":""},{"name":"dataEnd","nativeSrc":"31058:7:69","nodeType":"YulTypedName","src":"31058:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"31070:6:69","nodeType":"YulTypedName","src":"31070:6:69","type":""}],"src":"30971:409:69"},{"body":{"nativeSrc":"31449:80:69","nodeType":"YulBlock","src":"31449:80:69","statements":[{"nativeSrc":"31459:22:69","nodeType":"YulAssignment","src":"31459:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"31474:6:69","nodeType":"YulIdentifier","src":"31474:6:69"}],"functionName":{"name":"mload","nativeSrc":"31468:5:69","nodeType":"YulIdentifier","src":"31468:5:69"},"nativeSrc":"31468:13:69","nodeType":"YulFunctionCall","src":"31468:13:69"},"variableNames":[{"name":"value","nativeSrc":"31459:5:69","nodeType":"YulIdentifier","src":"31459:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"31517:5:69","nodeType":"YulIdentifier","src":"31517:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"31490:26:69","nodeType":"YulIdentifier","src":"31490:26:69"},"nativeSrc":"31490:33:69","nodeType":"YulFunctionCall","src":"31490:33:69"},"nativeSrc":"31490:33:69","nodeType":"YulExpressionStatement","src":"31490:33:69"}]},"name":"abi_decode_t_address_fromMemory","nativeSrc":"31386:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"31427:6:69","nodeType":"YulTypedName","src":"31427:6:69","type":""},{"name":"end","nativeSrc":"31435:3:69","nodeType":"YulTypedName","src":"31435:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"31443:5:69","nodeType":"YulTypedName","src":"31443:5:69","type":""}],"src":"31386:143:69"},{"body":{"nativeSrc":"31612:274:69","nodeType":"YulBlock","src":"31612:274:69","statements":[{"body":{"nativeSrc":"31658:83:69","nodeType":"YulBlock","src":"31658:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"31660:77:69","nodeType":"YulIdentifier","src":"31660:77:69"},"nativeSrc":"31660:79:69","nodeType":"YulFunctionCall","src":"31660:79:69"},"nativeSrc":"31660:79:69","nodeType":"YulExpressionStatement","src":"31660:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"31633:7:69","nodeType":"YulIdentifier","src":"31633:7:69"},{"name":"headStart","nativeSrc":"31642:9:69","nodeType":"YulIdentifier","src":"31642:9:69"}],"functionName":{"name":"sub","nativeSrc":"31629:3:69","nodeType":"YulIdentifier","src":"31629:3:69"},"nativeSrc":"31629:23:69","nodeType":"YulFunctionCall","src":"31629:23:69"},{"kind":"number","nativeSrc":"31654:2:69","nodeType":"YulLiteral","src":"31654:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"31625:3:69","nodeType":"YulIdentifier","src":"31625:3:69"},"nativeSrc":"31625:32:69","nodeType":"YulFunctionCall","src":"31625:32:69"},"nativeSrc":"31622:119:69","nodeType":"YulIf","src":"31622:119:69"},{"nativeSrc":"31751:128:69","nodeType":"YulBlock","src":"31751:128:69","statements":[{"nativeSrc":"31766:15:69","nodeType":"YulVariableDeclaration","src":"31766:15:69","value":{"kind":"number","nativeSrc":"31780:1:69","nodeType":"YulLiteral","src":"31780:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"31770:6:69","nodeType":"YulTypedName","src":"31770:6:69","type":""}]},{"nativeSrc":"31795:74:69","nodeType":"YulAssignment","src":"31795:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"31841:9:69","nodeType":"YulIdentifier","src":"31841:9:69"},{"name":"offset","nativeSrc":"31852:6:69","nodeType":"YulIdentifier","src":"31852:6:69"}],"functionName":{"name":"add","nativeSrc":"31837:3:69","nodeType":"YulIdentifier","src":"31837:3:69"},"nativeSrc":"31837:22:69","nodeType":"YulFunctionCall","src":"31837:22:69"},{"name":"dataEnd","nativeSrc":"31861:7:69","nodeType":"YulIdentifier","src":"31861:7:69"}],"functionName":{"name":"abi_decode_t_address_fromMemory","nativeSrc":"31805:31:69","nodeType":"YulIdentifier","src":"31805:31:69"},"nativeSrc":"31805:64:69","nodeType":"YulFunctionCall","src":"31805:64:69"},"variableNames":[{"name":"value0","nativeSrc":"31795:6:69","nodeType":"YulIdentifier","src":"31795:6:69"}]}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nativeSrc":"31535:351:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"31582:9:69","nodeType":"YulTypedName","src":"31582:9:69","type":""},{"name":"dataEnd","nativeSrc":"31593:7:69","nodeType":"YulTypedName","src":"31593:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"31605:6:69","nodeType":"YulTypedName","src":"31605:6:69","type":""}],"src":"31535:351:69"},{"body":{"nativeSrc":"31945:32:69","nodeType":"YulBlock","src":"31945:32:69","statements":[{"nativeSrc":"31955:16:69","nodeType":"YulAssignment","src":"31955:16:69","value":{"name":"value","nativeSrc":"31966:5:69","nodeType":"YulIdentifier","src":"31966:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"31955:7:69","nodeType":"YulIdentifier","src":"31955:7:69"}]}]},"name":"cleanup_t_rational_1_by_1","nativeSrc":"31892:85:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"31927:5:69","nodeType":"YulTypedName","src":"31927:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"31937:7:69","nodeType":"YulTypedName","src":"31937:7:69","type":""}],"src":"31892:85:69"},{"body":{"nativeSrc":"32049:88:69","nodeType":"YulBlock","src":"32049:88:69","statements":[{"nativeSrc":"32059:72:69","nodeType":"YulAssignment","src":"32059:72:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"32123:5:69","nodeType":"YulIdentifier","src":"32123:5:69"}],"functionName":{"name":"cleanup_t_rational_1_by_1","nativeSrc":"32097:25:69","nodeType":"YulIdentifier","src":"32097:25:69"},"nativeSrc":"32097:32:69","nodeType":"YulFunctionCall","src":"32097:32:69"}],"functionName":{"name":"identity","nativeSrc":"32088:8:69","nodeType":"YulIdentifier","src":"32088:8:69"},"nativeSrc":"32088:42:69","nodeType":"YulFunctionCall","src":"32088:42:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"32072:15:69","nodeType":"YulIdentifier","src":"32072:15:69"},"nativeSrc":"32072:59:69","nodeType":"YulFunctionCall","src":"32072:59:69"},"variableNames":[{"name":"converted","nativeSrc":"32059:9:69","nodeType":"YulIdentifier","src":"32059:9:69"}]}]},"name":"convert_t_rational_1_by_1_to_t_uint8","nativeSrc":"31983:154:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"32029:5:69","nodeType":"YulTypedName","src":"32029:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"32039:9:69","nodeType":"YulTypedName","src":"32039:9:69","type":""}],"src":"31983:154:69"},{"body":{"nativeSrc":"32214:72:69","nodeType":"YulBlock","src":"32214:72:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"32231:3:69","nodeType":"YulIdentifier","src":"32231:3:69"},{"arguments":[{"name":"value","nativeSrc":"32273:5:69","nodeType":"YulIdentifier","src":"32273:5:69"}],"functionName":{"name":"convert_t_rational_1_by_1_to_t_uint8","nativeSrc":"32236:36:69","nodeType":"YulIdentifier","src":"32236:36:69"},"nativeSrc":"32236:43:69","nodeType":"YulFunctionCall","src":"32236:43:69"}],"functionName":{"name":"mstore","nativeSrc":"32224:6:69","nodeType":"YulIdentifier","src":"32224:6:69"},"nativeSrc":"32224:56:69","nodeType":"YulFunctionCall","src":"32224:56:69"},"nativeSrc":"32224:56:69","nodeType":"YulExpressionStatement","src":"32224:56:69"}]},"name":"abi_encode_t_rational_1_by_1_to_t_uint8_fromStack","nativeSrc":"32143:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"32202:5:69","nodeType":"YulTypedName","src":"32202:5:69","type":""},{"name":"pos","nativeSrc":"32209:3:69","nodeType":"YulTypedName","src":"32209:3:69","type":""}],"src":"32143:143:69"},{"body":{"nativeSrc":"32396:130:69","nodeType":"YulBlock","src":"32396:130:69","statements":[{"nativeSrc":"32406:26:69","nodeType":"YulAssignment","src":"32406:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"32418:9:69","nodeType":"YulIdentifier","src":"32418:9:69"},{"kind":"number","nativeSrc":"32429:2:69","nodeType":"YulLiteral","src":"32429:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"32414:3:69","nodeType":"YulIdentifier","src":"32414:3:69"},"nativeSrc":"32414:18:69","nodeType":"YulFunctionCall","src":"32414:18:69"},"variableNames":[{"name":"tail","nativeSrc":"32406:4:69","nodeType":"YulIdentifier","src":"32406:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"32492:6:69","nodeType":"YulIdentifier","src":"32492:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"32505:9:69","nodeType":"YulIdentifier","src":"32505:9:69"},{"kind":"number","nativeSrc":"32516:1:69","nodeType":"YulLiteral","src":"32516:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"32501:3:69","nodeType":"YulIdentifier","src":"32501:3:69"},"nativeSrc":"32501:17:69","nodeType":"YulFunctionCall","src":"32501:17:69"}],"functionName":{"name":"abi_encode_t_rational_1_by_1_to_t_uint8_fromStack","nativeSrc":"32442:49:69","nodeType":"YulIdentifier","src":"32442:49:69"},"nativeSrc":"32442:77:69","nodeType":"YulFunctionCall","src":"32442:77:69"},"nativeSrc":"32442:77:69","nodeType":"YulExpressionStatement","src":"32442:77:69"}]},"name":"abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed","nativeSrc":"32292:234:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"32368:9:69","nodeType":"YulTypedName","src":"32368:9:69","type":""},{"name":"value0","nativeSrc":"32380:6:69","nodeType":"YulTypedName","src":"32380:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"32391:4:69","nodeType":"YulTypedName","src":"32391:4:69","type":""}],"src":"32292:234:69"},{"body":{"nativeSrc":"32583:51:69","nodeType":"YulBlock","src":"32583:51:69","statements":[{"nativeSrc":"32593:34:69","nodeType":"YulAssignment","src":"32593:34:69","value":{"arguments":[{"kind":"number","nativeSrc":"32618:1:69","nodeType":"YulLiteral","src":"32618:1:69","type":"","value":"1"},{"name":"value","nativeSrc":"32621:5:69","nodeType":"YulIdentifier","src":"32621:5:69"}],"functionName":{"name":"shr","nativeSrc":"32614:3:69","nodeType":"YulIdentifier","src":"32614:3:69"},"nativeSrc":"32614:13:69","nodeType":"YulFunctionCall","src":"32614:13:69"},"variableNames":[{"name":"newValue","nativeSrc":"32593:8:69","nodeType":"YulIdentifier","src":"32593:8:69"}]}]},"name":"shift_right_1_unsigned","nativeSrc":"32532:102:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"32564:5:69","nodeType":"YulTypedName","src":"32564:5:69","type":""}],"returnVariables":[{"name":"newValue","nativeSrc":"32574:8:69","nodeType":"YulTypedName","src":"32574:8:69","type":""}],"src":"32532:102:69"},{"body":{"nativeSrc":"32713:775:69","nodeType":"YulBlock","src":"32713:775:69","statements":[{"nativeSrc":"32723:15:69","nodeType":"YulAssignment","src":"32723:15:69","value":{"name":"_power","nativeSrc":"32732:6:69","nodeType":"YulIdentifier","src":"32732:6:69"},"variableNames":[{"name":"power","nativeSrc":"32723:5:69","nodeType":"YulIdentifier","src":"32723:5:69"}]},{"nativeSrc":"32747:14:69","nodeType":"YulAssignment","src":"32747:14:69","value":{"name":"_base","nativeSrc":"32756:5:69","nodeType":"YulIdentifier","src":"32756:5:69"},"variableNames":[{"name":"base","nativeSrc":"32747:4:69","nodeType":"YulIdentifier","src":"32747:4:69"}]},{"body":{"nativeSrc":"32805:677:69","nodeType":"YulBlock","src":"32805:677:69","statements":[{"body":{"nativeSrc":"32893:22:69","nodeType":"YulBlock","src":"32893:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"32895:16:69","nodeType":"YulIdentifier","src":"32895:16:69"},"nativeSrc":"32895:18:69","nodeType":"YulFunctionCall","src":"32895:18:69"},"nativeSrc":"32895:18:69","nodeType":"YulExpressionStatement","src":"32895:18:69"}]},"condition":{"arguments":[{"name":"base","nativeSrc":"32871:4:69","nodeType":"YulIdentifier","src":"32871:4:69"},{"arguments":[{"name":"max","nativeSrc":"32881:3:69","nodeType":"YulIdentifier","src":"32881:3:69"},{"name":"base","nativeSrc":"32886:4:69","nodeType":"YulIdentifier","src":"32886:4:69"}],"functionName":{"name":"div","nativeSrc":"32877:3:69","nodeType":"YulIdentifier","src":"32877:3:69"},"nativeSrc":"32877:14:69","nodeType":"YulFunctionCall","src":"32877:14:69"}],"functionName":{"name":"gt","nativeSrc":"32868:2:69","nodeType":"YulIdentifier","src":"32868:2:69"},"nativeSrc":"32868:24:69","nodeType":"YulFunctionCall","src":"32868:24:69"},"nativeSrc":"32865:50:69","nodeType":"YulIf","src":"32865:50:69"},{"body":{"nativeSrc":"32960:419:69","nodeType":"YulBlock","src":"32960:419:69","statements":[{"nativeSrc":"33340:25:69","nodeType":"YulAssignment","src":"33340:25:69","value":{"arguments":[{"name":"power","nativeSrc":"33353:5:69","nodeType":"YulIdentifier","src":"33353:5:69"},{"name":"base","nativeSrc":"33360:4:69","nodeType":"YulIdentifier","src":"33360:4:69"}],"functionName":{"name":"mul","nativeSrc":"33349:3:69","nodeType":"YulIdentifier","src":"33349:3:69"},"nativeSrc":"33349:16:69","nodeType":"YulFunctionCall","src":"33349:16:69"},"variableNames":[{"name":"power","nativeSrc":"33340:5:69","nodeType":"YulIdentifier","src":"33340:5:69"}]}]},"condition":{"arguments":[{"name":"exponent","nativeSrc":"32935:8:69","nodeType":"YulIdentifier","src":"32935:8:69"},{"kind":"number","nativeSrc":"32945:1:69","nodeType":"YulLiteral","src":"32945:1:69","type":"","value":"1"}],"functionName":{"name":"and","nativeSrc":"32931:3:69","nodeType":"YulIdentifier","src":"32931:3:69"},"nativeSrc":"32931:16:69","nodeType":"YulFunctionCall","src":"32931:16:69"},"nativeSrc":"32928:451:69","nodeType":"YulIf","src":"32928:451:69"},{"nativeSrc":"33392:23:69","nodeType":"YulAssignment","src":"33392:23:69","value":{"arguments":[{"name":"base","nativeSrc":"33404:4:69","nodeType":"YulIdentifier","src":"33404:4:69"},{"name":"base","nativeSrc":"33410:4:69","nodeType":"YulIdentifier","src":"33410:4:69"}],"functionName":{"name":"mul","nativeSrc":"33400:3:69","nodeType":"YulIdentifier","src":"33400:3:69"},"nativeSrc":"33400:15:69","nodeType":"YulFunctionCall","src":"33400:15:69"},"variableNames":[{"name":"base","nativeSrc":"33392:4:69","nodeType":"YulIdentifier","src":"33392:4:69"}]},{"nativeSrc":"33428:44:69","nodeType":"YulAssignment","src":"33428:44:69","value":{"arguments":[{"name":"exponent","nativeSrc":"33463:8:69","nodeType":"YulIdentifier","src":"33463:8:69"}],"functionName":{"name":"shift_right_1_unsigned","nativeSrc":"33440:22:69","nodeType":"YulIdentifier","src":"33440:22:69"},"nativeSrc":"33440:32:69","nodeType":"YulFunctionCall","src":"33440:32:69"},"variableNames":[{"name":"exponent","nativeSrc":"33428:8:69","nodeType":"YulIdentifier","src":"33428:8:69"}]}]},"condition":{"arguments":[{"name":"exponent","nativeSrc":"32781:8:69","nodeType":"YulIdentifier","src":"32781:8:69"},{"kind":"number","nativeSrc":"32791:1:69","nodeType":"YulLiteral","src":"32791:1:69","type":"","value":"1"}],"functionName":{"name":"gt","nativeSrc":"32778:2:69","nodeType":"YulIdentifier","src":"32778:2:69"},"nativeSrc":"32778:15:69","nodeType":"YulFunctionCall","src":"32778:15:69"},"nativeSrc":"32770:712:69","nodeType":"YulForLoop","post":{"nativeSrc":"32794:2:69","nodeType":"YulBlock","src":"32794:2:69","statements":[]},"pre":{"nativeSrc":"32774:3:69","nodeType":"YulBlock","src":"32774:3:69","statements":[]},"src":"32770:712:69"}]},"name":"checked_exp_helper","nativeSrc":"32640:848:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"_power","nativeSrc":"32668:6:69","nodeType":"YulTypedName","src":"32668:6:69","type":""},{"name":"_base","nativeSrc":"32676:5:69","nodeType":"YulTypedName","src":"32676:5:69","type":""},{"name":"exponent","nativeSrc":"32683:8:69","nodeType":"YulTypedName","src":"32683:8:69","type":""},{"name":"max","nativeSrc":"32693:3:69","nodeType":"YulTypedName","src":"32693:3:69","type":""}],"returnVariables":[{"name":"power","nativeSrc":"32701:5:69","nodeType":"YulTypedName","src":"32701:5:69","type":""},{"name":"base","nativeSrc":"32708:4:69","nodeType":"YulTypedName","src":"32708:4:69","type":""}],"src":"32640:848:69"},{"body":{"nativeSrc":"33554:1013:69","nodeType":"YulBlock","src":"33554:1013:69","statements":[{"body":{"nativeSrc":"33749:20:69","nodeType":"YulBlock","src":"33749:20:69","statements":[{"nativeSrc":"33751:10:69","nodeType":"YulAssignment","src":"33751:10:69","value":{"kind":"number","nativeSrc":"33760:1:69","nodeType":"YulLiteral","src":"33760:1:69","type":"","value":"1"},"variableNames":[{"name":"power","nativeSrc":"33751:5:69","nodeType":"YulIdentifier","src":"33751:5:69"}]},{"nativeSrc":"33762:5:69","nodeType":"YulLeave","src":"33762:5:69"}]},"condition":{"arguments":[{"name":"exponent","nativeSrc":"33739:8:69","nodeType":"YulIdentifier","src":"33739:8:69"}],"functionName":{"name":"iszero","nativeSrc":"33732:6:69","nodeType":"YulIdentifier","src":"33732:6:69"},"nativeSrc":"33732:16:69","nodeType":"YulFunctionCall","src":"33732:16:69"},"nativeSrc":"33729:40:69","nodeType":"YulIf","src":"33729:40:69"},{"body":{"nativeSrc":"33794:20:69","nodeType":"YulBlock","src":"33794:20:69","statements":[{"nativeSrc":"33796:10:69","nodeType":"YulAssignment","src":"33796:10:69","value":{"kind":"number","nativeSrc":"33805:1:69","nodeType":"YulLiteral","src":"33805:1:69","type":"","value":"0"},"variableNames":[{"name":"power","nativeSrc":"33796:5:69","nodeType":"YulIdentifier","src":"33796:5:69"}]},{"nativeSrc":"33807:5:69","nodeType":"YulLeave","src":"33807:5:69"}]},"condition":{"arguments":[{"name":"base","nativeSrc":"33788:4:69","nodeType":"YulIdentifier","src":"33788:4:69"}],"functionName":{"name":"iszero","nativeSrc":"33781:6:69","nodeType":"YulIdentifier","src":"33781:6:69"},"nativeSrc":"33781:12:69","nodeType":"YulFunctionCall","src":"33781:12:69"},"nativeSrc":"33778:36:69","nodeType":"YulIf","src":"33778:36:69"},{"cases":[{"body":{"nativeSrc":"33924:20:69","nodeType":"YulBlock","src":"33924:20:69","statements":[{"nativeSrc":"33926:10:69","nodeType":"YulAssignment","src":"33926:10:69","value":{"kind":"number","nativeSrc":"33935:1:69","nodeType":"YulLiteral","src":"33935:1:69","type":"","value":"1"},"variableNames":[{"name":"power","nativeSrc":"33926:5:69","nodeType":"YulIdentifier","src":"33926:5:69"}]},{"nativeSrc":"33937:5:69","nodeType":"YulLeave","src":"33937:5:69"}]},"nativeSrc":"33917:27:69","nodeType":"YulCase","src":"33917:27:69","value":{"kind":"number","nativeSrc":"33922:1:69","nodeType":"YulLiteral","src":"33922:1:69","type":"","value":"1"}},{"body":{"nativeSrc":"33968:176:69","nodeType":"YulBlock","src":"33968:176:69","statements":[{"body":{"nativeSrc":"34003:22:69","nodeType":"YulBlock","src":"34003:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"34005:16:69","nodeType":"YulIdentifier","src":"34005:16:69"},"nativeSrc":"34005:18:69","nodeType":"YulFunctionCall","src":"34005:18:69"},"nativeSrc":"34005:18:69","nodeType":"YulExpressionStatement","src":"34005:18:69"}]},"condition":{"arguments":[{"name":"exponent","nativeSrc":"33988:8:69","nodeType":"YulIdentifier","src":"33988:8:69"},{"kind":"number","nativeSrc":"33998:3:69","nodeType":"YulLiteral","src":"33998:3:69","type":"","value":"255"}],"functionName":{"name":"gt","nativeSrc":"33985:2:69","nodeType":"YulIdentifier","src":"33985:2:69"},"nativeSrc":"33985:17:69","nodeType":"YulFunctionCall","src":"33985:17:69"},"nativeSrc":"33982:43:69","nodeType":"YulIf","src":"33982:43:69"},{"nativeSrc":"34038:25:69","nodeType":"YulAssignment","src":"34038:25:69","value":{"arguments":[{"kind":"number","nativeSrc":"34051:1:69","nodeType":"YulLiteral","src":"34051:1:69","type":"","value":"2"},{"name":"exponent","nativeSrc":"34054:8:69","nodeType":"YulIdentifier","src":"34054:8:69"}],"functionName":{"name":"exp","nativeSrc":"34047:3:69","nodeType":"YulIdentifier","src":"34047:3:69"},"nativeSrc":"34047:16:69","nodeType":"YulFunctionCall","src":"34047:16:69"},"variableNames":[{"name":"power","nativeSrc":"34038:5:69","nodeType":"YulIdentifier","src":"34038:5:69"}]},{"body":{"nativeSrc":"34094:22:69","nodeType":"YulBlock","src":"34094:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"34096:16:69","nodeType":"YulIdentifier","src":"34096:16:69"},"nativeSrc":"34096:18:69","nodeType":"YulFunctionCall","src":"34096:18:69"},"nativeSrc":"34096:18:69","nodeType":"YulExpressionStatement","src":"34096:18:69"}]},"condition":{"arguments":[{"name":"power","nativeSrc":"34082:5:69","nodeType":"YulIdentifier","src":"34082:5:69"},{"name":"max","nativeSrc":"34089:3:69","nodeType":"YulIdentifier","src":"34089:3:69"}],"functionName":{"name":"gt","nativeSrc":"34079:2:69","nodeType":"YulIdentifier","src":"34079:2:69"},"nativeSrc":"34079:14:69","nodeType":"YulFunctionCall","src":"34079:14:69"},"nativeSrc":"34076:40:69","nodeType":"YulIf","src":"34076:40:69"},{"nativeSrc":"34129:5:69","nodeType":"YulLeave","src":"34129:5:69"}]},"nativeSrc":"33953:191:69","nodeType":"YulCase","src":"33953:191:69","value":{"kind":"number","nativeSrc":"33958:1:69","nodeType":"YulLiteral","src":"33958:1:69","type":"","value":"2"}}],"expression":{"name":"base","nativeSrc":"33874:4:69","nodeType":"YulIdentifier","src":"33874:4:69"},"nativeSrc":"33867:277:69","nodeType":"YulSwitch","src":"33867:277:69"},{"body":{"nativeSrc":"34276:123:69","nodeType":"YulBlock","src":"34276:123:69","statements":[{"nativeSrc":"34290:28:69","nodeType":"YulAssignment","src":"34290:28:69","value":{"arguments":[{"name":"base","nativeSrc":"34303:4:69","nodeType":"YulIdentifier","src":"34303:4:69"},{"name":"exponent","nativeSrc":"34309:8:69","nodeType":"YulIdentifier","src":"34309:8:69"}],"functionName":{"name":"exp","nativeSrc":"34299:3:69","nodeType":"YulIdentifier","src":"34299:3:69"},"nativeSrc":"34299:19:69","nodeType":"YulFunctionCall","src":"34299:19:69"},"variableNames":[{"name":"power","nativeSrc":"34290:5:69","nodeType":"YulIdentifier","src":"34290:5:69"}]},{"body":{"nativeSrc":"34349:22:69","nodeType":"YulBlock","src":"34349:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"34351:16:69","nodeType":"YulIdentifier","src":"34351:16:69"},"nativeSrc":"34351:18:69","nodeType":"YulFunctionCall","src":"34351:18:69"},"nativeSrc":"34351:18:69","nodeType":"YulExpressionStatement","src":"34351:18:69"}]},"condition":{"arguments":[{"name":"power","nativeSrc":"34337:5:69","nodeType":"YulIdentifier","src":"34337:5:69"},{"name":"max","nativeSrc":"34344:3:69","nodeType":"YulIdentifier","src":"34344:3:69"}],"functionName":{"name":"gt","nativeSrc":"34334:2:69","nodeType":"YulIdentifier","src":"34334:2:69"},"nativeSrc":"34334:14:69","nodeType":"YulFunctionCall","src":"34334:14:69"},"nativeSrc":"34331:40:69","nodeType":"YulIf","src":"34331:40:69"},{"nativeSrc":"34384:5:69","nodeType":"YulLeave","src":"34384:5:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nativeSrc":"34179:4:69","nodeType":"YulIdentifier","src":"34179:4:69"},{"kind":"number","nativeSrc":"34185:2:69","nodeType":"YulLiteral","src":"34185:2:69","type":"","value":"11"}],"functionName":{"name":"lt","nativeSrc":"34176:2:69","nodeType":"YulIdentifier","src":"34176:2:69"},"nativeSrc":"34176:12:69","nodeType":"YulFunctionCall","src":"34176:12:69"},{"arguments":[{"name":"exponent","nativeSrc":"34193:8:69","nodeType":"YulIdentifier","src":"34193:8:69"},{"kind":"number","nativeSrc":"34203:2:69","nodeType":"YulLiteral","src":"34203:2:69","type":"","value":"78"}],"functionName":{"name":"lt","nativeSrc":"34190:2:69","nodeType":"YulIdentifier","src":"34190:2:69"},"nativeSrc":"34190:16:69","nodeType":"YulFunctionCall","src":"34190:16:69"}],"functionName":{"name":"and","nativeSrc":"34172:3:69","nodeType":"YulIdentifier","src":"34172:3:69"},"nativeSrc":"34172:35:69","nodeType":"YulFunctionCall","src":"34172:35:69"},{"arguments":[{"arguments":[{"name":"base","nativeSrc":"34228:4:69","nodeType":"YulIdentifier","src":"34228:4:69"},{"kind":"number","nativeSrc":"34234:3:69","nodeType":"YulLiteral","src":"34234:3:69","type":"","value":"307"}],"functionName":{"name":"lt","nativeSrc":"34225:2:69","nodeType":"YulIdentifier","src":"34225:2:69"},"nativeSrc":"34225:13:69","nodeType":"YulFunctionCall","src":"34225:13:69"},{"arguments":[{"name":"exponent","nativeSrc":"34243:8:69","nodeType":"YulIdentifier","src":"34243:8:69"},{"kind":"number","nativeSrc":"34253:2:69","nodeType":"YulLiteral","src":"34253:2:69","type":"","value":"32"}],"functionName":{"name":"lt","nativeSrc":"34240:2:69","nodeType":"YulIdentifier","src":"34240:2:69"},"nativeSrc":"34240:16:69","nodeType":"YulFunctionCall","src":"34240:16:69"}],"functionName":{"name":"and","nativeSrc":"34221:3:69","nodeType":"YulIdentifier","src":"34221:3:69"},"nativeSrc":"34221:36:69","nodeType":"YulFunctionCall","src":"34221:36:69"}],"functionName":{"name":"or","nativeSrc":"34156:2:69","nodeType":"YulIdentifier","src":"34156:2:69"},"nativeSrc":"34156:111:69","nodeType":"YulFunctionCall","src":"34156:111:69"},"nativeSrc":"34153:246:69","nodeType":"YulIf","src":"34153:246:69"},{"nativeSrc":"34409:57:69","nodeType":"YulAssignment","src":"34409:57:69","value":{"arguments":[{"kind":"number","nativeSrc":"34443:1:69","nodeType":"YulLiteral","src":"34443:1:69","type":"","value":"1"},{"name":"base","nativeSrc":"34446:4:69","nodeType":"YulIdentifier","src":"34446:4:69"},{"name":"exponent","nativeSrc":"34452:8:69","nodeType":"YulIdentifier","src":"34452:8:69"},{"name":"max","nativeSrc":"34462:3:69","nodeType":"YulIdentifier","src":"34462:3:69"}],"functionName":{"name":"checked_exp_helper","nativeSrc":"34424:18:69","nodeType":"YulIdentifier","src":"34424:18:69"},"nativeSrc":"34424:42:69","nodeType":"YulFunctionCall","src":"34424:42:69"},"variableNames":[{"name":"power","nativeSrc":"34409:5:69","nodeType":"YulIdentifier","src":"34409:5:69"},{"name":"base","nativeSrc":"34416:4:69","nodeType":"YulIdentifier","src":"34416:4:69"}]},{"body":{"nativeSrc":"34505:22:69","nodeType":"YulBlock","src":"34505:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"34507:16:69","nodeType":"YulIdentifier","src":"34507:16:69"},"nativeSrc":"34507:18:69","nodeType":"YulFunctionCall","src":"34507:18:69"},"nativeSrc":"34507:18:69","nodeType":"YulExpressionStatement","src":"34507:18:69"}]},"condition":{"arguments":[{"name":"power","nativeSrc":"34482:5:69","nodeType":"YulIdentifier","src":"34482:5:69"},{"arguments":[{"name":"max","nativeSrc":"34493:3:69","nodeType":"YulIdentifier","src":"34493:3:69"},{"name":"base","nativeSrc":"34498:4:69","nodeType":"YulIdentifier","src":"34498:4:69"}],"functionName":{"name":"div","nativeSrc":"34489:3:69","nodeType":"YulIdentifier","src":"34489:3:69"},"nativeSrc":"34489:14:69","nodeType":"YulFunctionCall","src":"34489:14:69"}],"functionName":{"name":"gt","nativeSrc":"34479:2:69","nodeType":"YulIdentifier","src":"34479:2:69"},"nativeSrc":"34479:25:69","nodeType":"YulFunctionCall","src":"34479:25:69"},"nativeSrc":"34476:51:69","nodeType":"YulIf","src":"34476:51:69"},{"nativeSrc":"34536:25:69","nodeType":"YulAssignment","src":"34536:25:69","value":{"arguments":[{"name":"power","nativeSrc":"34549:5:69","nodeType":"YulIdentifier","src":"34549:5:69"},{"name":"base","nativeSrc":"34556:4:69","nodeType":"YulIdentifier","src":"34556:4:69"}],"functionName":{"name":"mul","nativeSrc":"34545:3:69","nodeType":"YulIdentifier","src":"34545:3:69"},"nativeSrc":"34545:16:69","nodeType":"YulFunctionCall","src":"34545:16:69"},"variableNames":[{"name":"power","nativeSrc":"34536:5:69","nodeType":"YulIdentifier","src":"34536:5:69"}]}]},"name":"checked_exp_unsigned","nativeSrc":"33494:1073:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nativeSrc":"33524:4:69","nodeType":"YulTypedName","src":"33524:4:69","type":""},{"name":"exponent","nativeSrc":"33530:8:69","nodeType":"YulTypedName","src":"33530:8:69","type":""},{"name":"max","nativeSrc":"33540:3:69","nodeType":"YulTypedName","src":"33540:3:69","type":""}],"returnVariables":[{"name":"power","nativeSrc":"33548:5:69","nodeType":"YulTypedName","src":"33548:5:69","type":""}],"src":"33494:1073:69"},{"body":{"nativeSrc":"34637:217:69","nodeType":"YulBlock","src":"34637:217:69","statements":[{"nativeSrc":"34647:31:69","nodeType":"YulAssignment","src":"34647:31:69","value":{"arguments":[{"name":"base","nativeSrc":"34673:4:69","nodeType":"YulIdentifier","src":"34673:4:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"34655:17:69","nodeType":"YulIdentifier","src":"34655:17:69"},"nativeSrc":"34655:23:69","nodeType":"YulFunctionCall","src":"34655:23:69"},"variableNames":[{"name":"base","nativeSrc":"34647:4:69","nodeType":"YulIdentifier","src":"34647:4:69"}]},{"nativeSrc":"34687:37:69","nodeType":"YulAssignment","src":"34687:37:69","value":{"arguments":[{"name":"exponent","nativeSrc":"34715:8:69","nodeType":"YulIdentifier","src":"34715:8:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"34699:15:69","nodeType":"YulIdentifier","src":"34699:15:69"},"nativeSrc":"34699:25:69","nodeType":"YulFunctionCall","src":"34699:25:69"},"variableNames":[{"name":"exponent","nativeSrc":"34687:8:69","nodeType":"YulIdentifier","src":"34687:8:69"}]},{"nativeSrc":"34734:113:69","nodeType":"YulAssignment","src":"34734:113:69","value":{"arguments":[{"name":"base","nativeSrc":"34764:4:69","nodeType":"YulIdentifier","src":"34764:4:69"},{"name":"exponent","nativeSrc":"34770:8:69","nodeType":"YulIdentifier","src":"34770:8:69"},{"kind":"number","nativeSrc":"34780:66:69","nodeType":"YulLiteral","src":"34780:66:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"checked_exp_unsigned","nativeSrc":"34743:20:69","nodeType":"YulIdentifier","src":"34743:20:69"},"nativeSrc":"34743:104:69","nodeType":"YulFunctionCall","src":"34743:104:69"},"variableNames":[{"name":"power","nativeSrc":"34734:5:69","nodeType":"YulIdentifier","src":"34734:5:69"}]}]},"name":"checked_exp_t_uint256_t_uint8","nativeSrc":"34573:281:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nativeSrc":"34612:4:69","nodeType":"YulTypedName","src":"34612:4:69","type":""},{"name":"exponent","nativeSrc":"34618:8:69","nodeType":"YulTypedName","src":"34618:8:69","type":""}],"returnVariables":[{"name":"power","nativeSrc":"34631:5:69","nodeType":"YulTypedName","src":"34631:5:69","type":""}],"src":"34573:281:69"},{"body":{"nativeSrc":"34966:117:69","nodeType":"YulBlock","src":"34966:117:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"34988:6:69","nodeType":"YulIdentifier","src":"34988:6:69"},{"kind":"number","nativeSrc":"34996:1:69","nodeType":"YulLiteral","src":"34996:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"34984:3:69","nodeType":"YulIdentifier","src":"34984:3:69"},"nativeSrc":"34984:14:69","nodeType":"YulFunctionCall","src":"34984:14:69"},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f20616464","kind":"string","nativeSrc":"35000:34:69","nodeType":"YulLiteral","src":"35000:34:69","type":"","value":"ERC20: approve from the zero add"}],"functionName":{"name":"mstore","nativeSrc":"34977:6:69","nodeType":"YulIdentifier","src":"34977:6:69"},"nativeSrc":"34977:58:69","nodeType":"YulFunctionCall","src":"34977:58:69"},"nativeSrc":"34977:58:69","nodeType":"YulExpressionStatement","src":"34977:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"35056:6:69","nodeType":"YulIdentifier","src":"35056:6:69"},{"kind":"number","nativeSrc":"35064:2:69","nodeType":"YulLiteral","src":"35064:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"35052:3:69","nodeType":"YulIdentifier","src":"35052:3:69"},"nativeSrc":"35052:15:69","nodeType":"YulFunctionCall","src":"35052:15:69"},{"hexValue":"72657373","kind":"string","nativeSrc":"35069:6:69","nodeType":"YulLiteral","src":"35069:6:69","type":"","value":"ress"}],"functionName":{"name":"mstore","nativeSrc":"35045:6:69","nodeType":"YulIdentifier","src":"35045:6:69"},"nativeSrc":"35045:31:69","nodeType":"YulFunctionCall","src":"35045:31:69"},"nativeSrc":"35045:31:69","nodeType":"YulExpressionStatement","src":"35045:31:69"}]},"name":"store_literal_in_memory_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208","nativeSrc":"34860:223:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"34958:6:69","nodeType":"YulTypedName","src":"34958:6:69","type":""}],"src":"34860:223:69"},{"body":{"nativeSrc":"35235:220:69","nodeType":"YulBlock","src":"35235:220:69","statements":[{"nativeSrc":"35245:74:69","nodeType":"YulAssignment","src":"35245:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"35311:3:69","nodeType":"YulIdentifier","src":"35311:3:69"},{"kind":"number","nativeSrc":"35316:2:69","nodeType":"YulLiteral","src":"35316:2:69","type":"","value":"36"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"35252:58:69","nodeType":"YulIdentifier","src":"35252:58:69"},"nativeSrc":"35252:67:69","nodeType":"YulFunctionCall","src":"35252:67:69"},"variableNames":[{"name":"pos","nativeSrc":"35245:3:69","nodeType":"YulIdentifier","src":"35245:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"35417:3:69","nodeType":"YulIdentifier","src":"35417:3:69"}],"functionName":{"name":"store_literal_in_memory_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208","nativeSrc":"35328:88:69","nodeType":"YulIdentifier","src":"35328:88:69"},"nativeSrc":"35328:93:69","nodeType":"YulFunctionCall","src":"35328:93:69"},"nativeSrc":"35328:93:69","nodeType":"YulExpressionStatement","src":"35328:93:69"},{"nativeSrc":"35430:19:69","nodeType":"YulAssignment","src":"35430:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"35441:3:69","nodeType":"YulIdentifier","src":"35441:3:69"},{"kind":"number","nativeSrc":"35446:2:69","nodeType":"YulLiteral","src":"35446:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"35437:3:69","nodeType":"YulIdentifier","src":"35437:3:69"},"nativeSrc":"35437:12:69","nodeType":"YulFunctionCall","src":"35437:12:69"},"variableNames":[{"name":"end","nativeSrc":"35430:3:69","nodeType":"YulIdentifier","src":"35430:3:69"}]}]},"name":"abi_encode_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208_to_t_string_memory_ptr_fromStack","nativeSrc":"35089:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"35223:3:69","nodeType":"YulTypedName","src":"35223:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"35231:3:69","nodeType":"YulTypedName","src":"35231:3:69","type":""}],"src":"35089:366:69"},{"body":{"nativeSrc":"35632:248:69","nodeType":"YulBlock","src":"35632:248:69","statements":[{"nativeSrc":"35642:26:69","nodeType":"YulAssignment","src":"35642:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"35654:9:69","nodeType":"YulIdentifier","src":"35654:9:69"},{"kind":"number","nativeSrc":"35665:2:69","nodeType":"YulLiteral","src":"35665:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"35650:3:69","nodeType":"YulIdentifier","src":"35650:3:69"},"nativeSrc":"35650:18:69","nodeType":"YulFunctionCall","src":"35650:18:69"},"variableNames":[{"name":"tail","nativeSrc":"35642:4:69","nodeType":"YulIdentifier","src":"35642:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"35689:9:69","nodeType":"YulIdentifier","src":"35689:9:69"},{"kind":"number","nativeSrc":"35700:1:69","nodeType":"YulLiteral","src":"35700:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"35685:3:69","nodeType":"YulIdentifier","src":"35685:3:69"},"nativeSrc":"35685:17:69","nodeType":"YulFunctionCall","src":"35685:17:69"},{"arguments":[{"name":"tail","nativeSrc":"35708:4:69","nodeType":"YulIdentifier","src":"35708:4:69"},{"name":"headStart","nativeSrc":"35714:9:69","nodeType":"YulIdentifier","src":"35714:9:69"}],"functionName":{"name":"sub","nativeSrc":"35704:3:69","nodeType":"YulIdentifier","src":"35704:3:69"},"nativeSrc":"35704:20:69","nodeType":"YulFunctionCall","src":"35704:20:69"}],"functionName":{"name":"mstore","nativeSrc":"35678:6:69","nodeType":"YulIdentifier","src":"35678:6:69"},"nativeSrc":"35678:47:69","nodeType":"YulFunctionCall","src":"35678:47:69"},"nativeSrc":"35678:47:69","nodeType":"YulExpressionStatement","src":"35678:47:69"},{"nativeSrc":"35734:139:69","nodeType":"YulAssignment","src":"35734:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"35868:4:69","nodeType":"YulIdentifier","src":"35868:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208_to_t_string_memory_ptr_fromStack","nativeSrc":"35742:124:69","nodeType":"YulIdentifier","src":"35742:124:69"},"nativeSrc":"35742:131:69","nodeType":"YulFunctionCall","src":"35742:131:69"},"variableNames":[{"name":"tail","nativeSrc":"35734:4:69","nodeType":"YulIdentifier","src":"35734:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"35461:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"35612:9:69","nodeType":"YulTypedName","src":"35612:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"35627:4:69","nodeType":"YulTypedName","src":"35627:4:69","type":""}],"src":"35461:419:69"},{"body":{"nativeSrc":"35992:115:69","nodeType":"YulBlock","src":"35992:115:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"36014:6:69","nodeType":"YulIdentifier","src":"36014:6:69"},{"kind":"number","nativeSrc":"36022:1:69","nodeType":"YulLiteral","src":"36022:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"36010:3:69","nodeType":"YulIdentifier","src":"36010:3:69"},"nativeSrc":"36010:14:69","nodeType":"YulFunctionCall","src":"36010:14:69"},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f206164647265","kind":"string","nativeSrc":"36026:34:69","nodeType":"YulLiteral","src":"36026:34:69","type":"","value":"ERC20: approve to the zero addre"}],"functionName":{"name":"mstore","nativeSrc":"36003:6:69","nodeType":"YulIdentifier","src":"36003:6:69"},"nativeSrc":"36003:58:69","nodeType":"YulFunctionCall","src":"36003:58:69"},"nativeSrc":"36003:58:69","nodeType":"YulExpressionStatement","src":"36003:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"36082:6:69","nodeType":"YulIdentifier","src":"36082:6:69"},{"kind":"number","nativeSrc":"36090:2:69","nodeType":"YulLiteral","src":"36090:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"36078:3:69","nodeType":"YulIdentifier","src":"36078:3:69"},"nativeSrc":"36078:15:69","nodeType":"YulFunctionCall","src":"36078:15:69"},{"hexValue":"7373","kind":"string","nativeSrc":"36095:4:69","nodeType":"YulLiteral","src":"36095:4:69","type":"","value":"ss"}],"functionName":{"name":"mstore","nativeSrc":"36071:6:69","nodeType":"YulIdentifier","src":"36071:6:69"},"nativeSrc":"36071:29:69","nodeType":"YulFunctionCall","src":"36071:29:69"},"nativeSrc":"36071:29:69","nodeType":"YulExpressionStatement","src":"36071:29:69"}]},"name":"store_literal_in_memory_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029","nativeSrc":"35886:221:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"35984:6:69","nodeType":"YulTypedName","src":"35984:6:69","type":""}],"src":"35886:221:69"},{"body":{"nativeSrc":"36259:220:69","nodeType":"YulBlock","src":"36259:220:69","statements":[{"nativeSrc":"36269:74:69","nodeType":"YulAssignment","src":"36269:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"36335:3:69","nodeType":"YulIdentifier","src":"36335:3:69"},{"kind":"number","nativeSrc":"36340:2:69","nodeType":"YulLiteral","src":"36340:2:69","type":"","value":"34"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"36276:58:69","nodeType":"YulIdentifier","src":"36276:58:69"},"nativeSrc":"36276:67:69","nodeType":"YulFunctionCall","src":"36276:67:69"},"variableNames":[{"name":"pos","nativeSrc":"36269:3:69","nodeType":"YulIdentifier","src":"36269:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"36441:3:69","nodeType":"YulIdentifier","src":"36441:3:69"}],"functionName":{"name":"store_literal_in_memory_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029","nativeSrc":"36352:88:69","nodeType":"YulIdentifier","src":"36352:88:69"},"nativeSrc":"36352:93:69","nodeType":"YulFunctionCall","src":"36352:93:69"},"nativeSrc":"36352:93:69","nodeType":"YulExpressionStatement","src":"36352:93:69"},{"nativeSrc":"36454:19:69","nodeType":"YulAssignment","src":"36454:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"36465:3:69","nodeType":"YulIdentifier","src":"36465:3:69"},{"kind":"number","nativeSrc":"36470:2:69","nodeType":"YulLiteral","src":"36470:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"36461:3:69","nodeType":"YulIdentifier","src":"36461:3:69"},"nativeSrc":"36461:12:69","nodeType":"YulFunctionCall","src":"36461:12:69"},"variableNames":[{"name":"end","nativeSrc":"36454:3:69","nodeType":"YulIdentifier","src":"36454:3:69"}]}]},"name":"abi_encode_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029_to_t_string_memory_ptr_fromStack","nativeSrc":"36113:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"36247:3:69","nodeType":"YulTypedName","src":"36247:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"36255:3:69","nodeType":"YulTypedName","src":"36255:3:69","type":""}],"src":"36113:366:69"},{"body":{"nativeSrc":"36656:248:69","nodeType":"YulBlock","src":"36656:248:69","statements":[{"nativeSrc":"36666:26:69","nodeType":"YulAssignment","src":"36666:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"36678:9:69","nodeType":"YulIdentifier","src":"36678:9:69"},{"kind":"number","nativeSrc":"36689:2:69","nodeType":"YulLiteral","src":"36689:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"36674:3:69","nodeType":"YulIdentifier","src":"36674:3:69"},"nativeSrc":"36674:18:69","nodeType":"YulFunctionCall","src":"36674:18:69"},"variableNames":[{"name":"tail","nativeSrc":"36666:4:69","nodeType":"YulIdentifier","src":"36666:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"36713:9:69","nodeType":"YulIdentifier","src":"36713:9:69"},{"kind":"number","nativeSrc":"36724:1:69","nodeType":"YulLiteral","src":"36724:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"36709:3:69","nodeType":"YulIdentifier","src":"36709:3:69"},"nativeSrc":"36709:17:69","nodeType":"YulFunctionCall","src":"36709:17:69"},{"arguments":[{"name":"tail","nativeSrc":"36732:4:69","nodeType":"YulIdentifier","src":"36732:4:69"},{"name":"headStart","nativeSrc":"36738:9:69","nodeType":"YulIdentifier","src":"36738:9:69"}],"functionName":{"name":"sub","nativeSrc":"36728:3:69","nodeType":"YulIdentifier","src":"36728:3:69"},"nativeSrc":"36728:20:69","nodeType":"YulFunctionCall","src":"36728:20:69"}],"functionName":{"name":"mstore","nativeSrc":"36702:6:69","nodeType":"YulIdentifier","src":"36702:6:69"},"nativeSrc":"36702:47:69","nodeType":"YulFunctionCall","src":"36702:47:69"},"nativeSrc":"36702:47:69","nodeType":"YulExpressionStatement","src":"36702:47:69"},{"nativeSrc":"36758:139:69","nodeType":"YulAssignment","src":"36758:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"36892:4:69","nodeType":"YulIdentifier","src":"36892:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029_to_t_string_memory_ptr_fromStack","nativeSrc":"36766:124:69","nodeType":"YulIdentifier","src":"36766:124:69"},"nativeSrc":"36766:131:69","nodeType":"YulFunctionCall","src":"36766:131:69"},"variableNames":[{"name":"tail","nativeSrc":"36758:4:69","nodeType":"YulIdentifier","src":"36758:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"36485:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"36636:9:69","nodeType":"YulTypedName","src":"36636:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"36651:4:69","nodeType":"YulTypedName","src":"36651:4:69","type":""}],"src":"36485:419:69"},{"body":{"nativeSrc":"37016:76:69","nodeType":"YulBlock","src":"37016:76:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"37038:6:69","nodeType":"YulIdentifier","src":"37038:6:69"},{"kind":"number","nativeSrc":"37046:1:69","nodeType":"YulLiteral","src":"37046:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"37034:3:69","nodeType":"YulIdentifier","src":"37034:3:69"},"nativeSrc":"37034:14:69","nodeType":"YulFunctionCall","src":"37034:14:69"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nativeSrc":"37050:34:69","nodeType":"YulLiteral","src":"37050:34:69","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nativeSrc":"37027:6:69","nodeType":"YulIdentifier","src":"37027:6:69"},"nativeSrc":"37027:58:69","nodeType":"YulFunctionCall","src":"37027:58:69"},"nativeSrc":"37027:58:69","nodeType":"YulExpressionStatement","src":"37027:58:69"}]},"name":"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","nativeSrc":"36910:182:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"37008:6:69","nodeType":"YulTypedName","src":"37008:6:69","type":""}],"src":"36910:182:69"},{"body":{"nativeSrc":"37244:220:69","nodeType":"YulBlock","src":"37244:220:69","statements":[{"nativeSrc":"37254:74:69","nodeType":"YulAssignment","src":"37254:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"37320:3:69","nodeType":"YulIdentifier","src":"37320:3:69"},{"kind":"number","nativeSrc":"37325:2:69","nodeType":"YulLiteral","src":"37325:2:69","type":"","value":"32"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"37261:58:69","nodeType":"YulIdentifier","src":"37261:58:69"},"nativeSrc":"37261:67:69","nodeType":"YulFunctionCall","src":"37261:67:69"},"variableNames":[{"name":"pos","nativeSrc":"37254:3:69","nodeType":"YulIdentifier","src":"37254:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"37426:3:69","nodeType":"YulIdentifier","src":"37426:3:69"}],"functionName":{"name":"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","nativeSrc":"37337:88:69","nodeType":"YulIdentifier","src":"37337:88:69"},"nativeSrc":"37337:93:69","nodeType":"YulFunctionCall","src":"37337:93:69"},"nativeSrc":"37337:93:69","nodeType":"YulExpressionStatement","src":"37337:93:69"},{"nativeSrc":"37439:19:69","nodeType":"YulAssignment","src":"37439:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"37450:3:69","nodeType":"YulIdentifier","src":"37450:3:69"},{"kind":"number","nativeSrc":"37455:2:69","nodeType":"YulLiteral","src":"37455:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"37446:3:69","nodeType":"YulIdentifier","src":"37446:3:69"},"nativeSrc":"37446:12:69","nodeType":"YulFunctionCall","src":"37446:12:69"},"variableNames":[{"name":"end","nativeSrc":"37439:3:69","nodeType":"YulIdentifier","src":"37439:3:69"}]}]},"name":"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack","nativeSrc":"37098:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"37232:3:69","nodeType":"YulTypedName","src":"37232:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"37240:3:69","nodeType":"YulTypedName","src":"37240:3:69","type":""}],"src":"37098:366:69"},{"body":{"nativeSrc":"37641:248:69","nodeType":"YulBlock","src":"37641:248:69","statements":[{"nativeSrc":"37651:26:69","nodeType":"YulAssignment","src":"37651:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"37663:9:69","nodeType":"YulIdentifier","src":"37663:9:69"},{"kind":"number","nativeSrc":"37674:2:69","nodeType":"YulLiteral","src":"37674:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"37659:3:69","nodeType":"YulIdentifier","src":"37659:3:69"},"nativeSrc":"37659:18:69","nodeType":"YulFunctionCall","src":"37659:18:69"},"variableNames":[{"name":"tail","nativeSrc":"37651:4:69","nodeType":"YulIdentifier","src":"37651:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"37698:9:69","nodeType":"YulIdentifier","src":"37698:9:69"},{"kind":"number","nativeSrc":"37709:1:69","nodeType":"YulLiteral","src":"37709:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"37694:3:69","nodeType":"YulIdentifier","src":"37694:3:69"},"nativeSrc":"37694:17:69","nodeType":"YulFunctionCall","src":"37694:17:69"},{"arguments":[{"name":"tail","nativeSrc":"37717:4:69","nodeType":"YulIdentifier","src":"37717:4:69"},{"name":"headStart","nativeSrc":"37723:9:69","nodeType":"YulIdentifier","src":"37723:9:69"}],"functionName":{"name":"sub","nativeSrc":"37713:3:69","nodeType":"YulIdentifier","src":"37713:3:69"},"nativeSrc":"37713:20:69","nodeType":"YulFunctionCall","src":"37713:20:69"}],"functionName":{"name":"mstore","nativeSrc":"37687:6:69","nodeType":"YulIdentifier","src":"37687:6:69"},"nativeSrc":"37687:47:69","nodeType":"YulFunctionCall","src":"37687:47:69"},"nativeSrc":"37687:47:69","nodeType":"YulExpressionStatement","src":"37687:47:69"},{"nativeSrc":"37743:139:69","nodeType":"YulAssignment","src":"37743:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"37877:4:69","nodeType":"YulIdentifier","src":"37877:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack","nativeSrc":"37751:124:69","nodeType":"YulIdentifier","src":"37751:124:69"},"nativeSrc":"37751:131:69","nodeType":"YulFunctionCall","src":"37751:131:69"},"variableNames":[{"name":"tail","nativeSrc":"37743:4:69","nodeType":"YulIdentifier","src":"37743:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"37470:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"37621:9:69","nodeType":"YulTypedName","src":"37621:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"37636:4:69","nodeType":"YulTypedName","src":"37636:4:69","type":""}],"src":"37470:419:69"},{"body":{"nativeSrc":"38001:118:69","nodeType":"YulBlock","src":"38001:118:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"38023:6:69","nodeType":"YulIdentifier","src":"38023:6:69"},{"kind":"number","nativeSrc":"38031:1:69","nodeType":"YulLiteral","src":"38031:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"38019:3:69","nodeType":"YulIdentifier","src":"38019:3:69"},"nativeSrc":"38019:14:69","nodeType":"YulFunctionCall","src":"38019:14:69"},{"hexValue":"696e76616c696420616365737320636f6e74726f6c206d616e61676572206164","kind":"string","nativeSrc":"38035:34:69","nodeType":"YulLiteral","src":"38035:34:69","type":"","value":"invalid acess control manager ad"}],"functionName":{"name":"mstore","nativeSrc":"38012:6:69","nodeType":"YulIdentifier","src":"38012:6:69"},"nativeSrc":"38012:58:69","nodeType":"YulFunctionCall","src":"38012:58:69"},"nativeSrc":"38012:58:69","nodeType":"YulExpressionStatement","src":"38012:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"38091:6:69","nodeType":"YulIdentifier","src":"38091:6:69"},{"kind":"number","nativeSrc":"38099:2:69","nodeType":"YulLiteral","src":"38099:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"38087:3:69","nodeType":"YulIdentifier","src":"38087:3:69"},"nativeSrc":"38087:15:69","nodeType":"YulFunctionCall","src":"38087:15:69"},{"hexValue":"6472657373","kind":"string","nativeSrc":"38104:7:69","nodeType":"YulLiteral","src":"38104:7:69","type":"","value":"dress"}],"functionName":{"name":"mstore","nativeSrc":"38080:6:69","nodeType":"YulIdentifier","src":"38080:6:69"},"nativeSrc":"38080:32:69","nodeType":"YulFunctionCall","src":"38080:32:69"},"nativeSrc":"38080:32:69","nodeType":"YulExpressionStatement","src":"38080:32:69"}]},"name":"store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb","nativeSrc":"37895:224:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"37993:6:69","nodeType":"YulTypedName","src":"37993:6:69","type":""}],"src":"37895:224:69"},{"body":{"nativeSrc":"38271:220:69","nodeType":"YulBlock","src":"38271:220:69","statements":[{"nativeSrc":"38281:74:69","nodeType":"YulAssignment","src":"38281:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"38347:3:69","nodeType":"YulIdentifier","src":"38347:3:69"},{"kind":"number","nativeSrc":"38352:2:69","nodeType":"YulLiteral","src":"38352:2:69","type":"","value":"37"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"38288:58:69","nodeType":"YulIdentifier","src":"38288:58:69"},"nativeSrc":"38288:67:69","nodeType":"YulFunctionCall","src":"38288:67:69"},"variableNames":[{"name":"pos","nativeSrc":"38281:3:69","nodeType":"YulIdentifier","src":"38281:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"38453:3:69","nodeType":"YulIdentifier","src":"38453:3:69"}],"functionName":{"name":"store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb","nativeSrc":"38364:88:69","nodeType":"YulIdentifier","src":"38364:88:69"},"nativeSrc":"38364:93:69","nodeType":"YulFunctionCall","src":"38364:93:69"},"nativeSrc":"38364:93:69","nodeType":"YulExpressionStatement","src":"38364:93:69"},{"nativeSrc":"38466:19:69","nodeType":"YulAssignment","src":"38466:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"38477:3:69","nodeType":"YulIdentifier","src":"38477:3:69"},{"kind":"number","nativeSrc":"38482:2:69","nodeType":"YulLiteral","src":"38482:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"38473:3:69","nodeType":"YulIdentifier","src":"38473:3:69"},"nativeSrc":"38473:12:69","nodeType":"YulFunctionCall","src":"38473:12:69"},"variableNames":[{"name":"end","nativeSrc":"38466:3:69","nodeType":"YulIdentifier","src":"38466:3:69"}]}]},"name":"abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack","nativeSrc":"38125:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"38259:3:69","nodeType":"YulTypedName","src":"38259:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"38267:3:69","nodeType":"YulTypedName","src":"38267:3:69","type":""}],"src":"38125:366:69"},{"body":{"nativeSrc":"38668:248:69","nodeType":"YulBlock","src":"38668:248:69","statements":[{"nativeSrc":"38678:26:69","nodeType":"YulAssignment","src":"38678:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"38690:9:69","nodeType":"YulIdentifier","src":"38690:9:69"},{"kind":"number","nativeSrc":"38701:2:69","nodeType":"YulLiteral","src":"38701:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"38686:3:69","nodeType":"YulIdentifier","src":"38686:3:69"},"nativeSrc":"38686:18:69","nodeType":"YulFunctionCall","src":"38686:18:69"},"variableNames":[{"name":"tail","nativeSrc":"38678:4:69","nodeType":"YulIdentifier","src":"38678:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"38725:9:69","nodeType":"YulIdentifier","src":"38725:9:69"},{"kind":"number","nativeSrc":"38736:1:69","nodeType":"YulLiteral","src":"38736:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"38721:3:69","nodeType":"YulIdentifier","src":"38721:3:69"},"nativeSrc":"38721:17:69","nodeType":"YulFunctionCall","src":"38721:17:69"},{"arguments":[{"name":"tail","nativeSrc":"38744:4:69","nodeType":"YulIdentifier","src":"38744:4:69"},{"name":"headStart","nativeSrc":"38750:9:69","nodeType":"YulIdentifier","src":"38750:9:69"}],"functionName":{"name":"sub","nativeSrc":"38740:3:69","nodeType":"YulIdentifier","src":"38740:3:69"},"nativeSrc":"38740:20:69","nodeType":"YulFunctionCall","src":"38740:20:69"}],"functionName":{"name":"mstore","nativeSrc":"38714:6:69","nodeType":"YulIdentifier","src":"38714:6:69"},"nativeSrc":"38714:47:69","nodeType":"YulFunctionCall","src":"38714:47:69"},"nativeSrc":"38714:47:69","nodeType":"YulExpressionStatement","src":"38714:47:69"},{"nativeSrc":"38770:139:69","nodeType":"YulAssignment","src":"38770:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"38904:4:69","nodeType":"YulIdentifier","src":"38904:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack","nativeSrc":"38778:124:69","nodeType":"YulIdentifier","src":"38778:124:69"},"nativeSrc":"38778:131:69","nodeType":"YulFunctionCall","src":"38778:131:69"},"variableNames":[{"name":"tail","nativeSrc":"38770:4:69","nodeType":"YulIdentifier","src":"38770:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"38497:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"38648:9:69","nodeType":"YulTypedName","src":"38648:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"38663:4:69","nodeType":"YulTypedName","src":"38663:4:69","type":""}],"src":"38497:419:69"},{"body":{"nativeSrc":"39048:206:69","nodeType":"YulBlock","src":"39048:206:69","statements":[{"nativeSrc":"39058:26:69","nodeType":"YulAssignment","src":"39058:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"39070:9:69","nodeType":"YulIdentifier","src":"39070:9:69"},{"kind":"number","nativeSrc":"39081:2:69","nodeType":"YulLiteral","src":"39081:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"39066:3:69","nodeType":"YulIdentifier","src":"39066:3:69"},"nativeSrc":"39066:18:69","nodeType":"YulFunctionCall","src":"39066:18:69"},"variableNames":[{"name":"tail","nativeSrc":"39058:4:69","nodeType":"YulIdentifier","src":"39058:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"39138:6:69","nodeType":"YulIdentifier","src":"39138:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"39151:9:69","nodeType":"YulIdentifier","src":"39151:9:69"},{"kind":"number","nativeSrc":"39162:1:69","nodeType":"YulLiteral","src":"39162:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"39147:3:69","nodeType":"YulIdentifier","src":"39147:3:69"},"nativeSrc":"39147:17:69","nodeType":"YulFunctionCall","src":"39147:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"39094:43:69","nodeType":"YulIdentifier","src":"39094:43:69"},"nativeSrc":"39094:71:69","nodeType":"YulFunctionCall","src":"39094:71:69"},"nativeSrc":"39094:71:69","nodeType":"YulExpressionStatement","src":"39094:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"39219:6:69","nodeType":"YulIdentifier","src":"39219:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"39232:9:69","nodeType":"YulIdentifier","src":"39232:9:69"},{"kind":"number","nativeSrc":"39243:2:69","nodeType":"YulLiteral","src":"39243:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"39228:3:69","nodeType":"YulIdentifier","src":"39228:3:69"},"nativeSrc":"39228:18:69","nodeType":"YulFunctionCall","src":"39228:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"39175:43:69","nodeType":"YulIdentifier","src":"39175:43:69"},"nativeSrc":"39175:72:69","nodeType":"YulFunctionCall","src":"39175:72:69"},"nativeSrc":"39175:72:69","nodeType":"YulExpressionStatement","src":"39175:72:69"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nativeSrc":"38922:332:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"39012:9:69","nodeType":"YulTypedName","src":"39012:9:69","type":""},{"name":"value1","nativeSrc":"39024:6:69","nodeType":"YulTypedName","src":"39024:6:69","type":""},{"name":"value0","nativeSrc":"39032:6:69","nodeType":"YulTypedName","src":"39032:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"39043:4:69","nodeType":"YulTypedName","src":"39043:4:69","type":""}],"src":"38922:332:69"},{"body":{"nativeSrc":"39386:206:69","nodeType":"YulBlock","src":"39386:206:69","statements":[{"nativeSrc":"39396:26:69","nodeType":"YulAssignment","src":"39396:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"39408:9:69","nodeType":"YulIdentifier","src":"39408:9:69"},{"kind":"number","nativeSrc":"39419:2:69","nodeType":"YulLiteral","src":"39419:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"39404:3:69","nodeType":"YulIdentifier","src":"39404:3:69"},"nativeSrc":"39404:18:69","nodeType":"YulFunctionCall","src":"39404:18:69"},"variableNames":[{"name":"tail","nativeSrc":"39396:4:69","nodeType":"YulIdentifier","src":"39396:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"39476:6:69","nodeType":"YulIdentifier","src":"39476:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"39489:9:69","nodeType":"YulIdentifier","src":"39489:9:69"},{"kind":"number","nativeSrc":"39500:1:69","nodeType":"YulLiteral","src":"39500:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"39485:3:69","nodeType":"YulIdentifier","src":"39485:3:69"},"nativeSrc":"39485:17:69","nodeType":"YulFunctionCall","src":"39485:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"39432:43:69","nodeType":"YulIdentifier","src":"39432:43:69"},"nativeSrc":"39432:71:69","nodeType":"YulFunctionCall","src":"39432:71:69"},"nativeSrc":"39432:71:69","nodeType":"YulExpressionStatement","src":"39432:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"39557:6:69","nodeType":"YulIdentifier","src":"39557:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"39570:9:69","nodeType":"YulIdentifier","src":"39570:9:69"},{"kind":"number","nativeSrc":"39581:2:69","nodeType":"YulLiteral","src":"39581:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"39566:3:69","nodeType":"YulIdentifier","src":"39566:3:69"},"nativeSrc":"39566:18:69","nodeType":"YulFunctionCall","src":"39566:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"39513:43:69","nodeType":"YulIdentifier","src":"39513:43:69"},"nativeSrc":"39513:72:69","nodeType":"YulFunctionCall","src":"39513:72:69"},"nativeSrc":"39513:72:69","nodeType":"YulExpressionStatement","src":"39513:72:69"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nativeSrc":"39260:332:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"39350:9:69","nodeType":"YulTypedName","src":"39350:9:69","type":""},{"name":"value1","nativeSrc":"39362:6:69","nodeType":"YulTypedName","src":"39362:6:69","type":""},{"name":"value0","nativeSrc":"39370:6:69","nodeType":"YulTypedName","src":"39370:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"39381:4:69","nodeType":"YulTypedName","src":"39381:4:69","type":""}],"src":"39260:332:69"},{"body":{"nativeSrc":"39704:73:69","nodeType":"YulBlock","src":"39704:73:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"39726:6:69","nodeType":"YulIdentifier","src":"39726:6:69"},{"kind":"number","nativeSrc":"39734:1:69","nodeType":"YulLiteral","src":"39734:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"39722:3:69","nodeType":"YulIdentifier","src":"39722:3:69"},"nativeSrc":"39722:14:69","nodeType":"YulFunctionCall","src":"39722:14:69"},{"hexValue":"45524332303a20696e73756666696369656e7420616c6c6f77616e6365","kind":"string","nativeSrc":"39738:31:69","nodeType":"YulLiteral","src":"39738:31:69","type":"","value":"ERC20: insufficient allowance"}],"functionName":{"name":"mstore","nativeSrc":"39715:6:69","nodeType":"YulIdentifier","src":"39715:6:69"},"nativeSrc":"39715:55:69","nodeType":"YulFunctionCall","src":"39715:55:69"},"nativeSrc":"39715:55:69","nodeType":"YulExpressionStatement","src":"39715:55:69"}]},"name":"store_literal_in_memory_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe","nativeSrc":"39598:179:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"39696:6:69","nodeType":"YulTypedName","src":"39696:6:69","type":""}],"src":"39598:179:69"},{"body":{"nativeSrc":"39929:220:69","nodeType":"YulBlock","src":"39929:220:69","statements":[{"nativeSrc":"39939:74:69","nodeType":"YulAssignment","src":"39939:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"40005:3:69","nodeType":"YulIdentifier","src":"40005:3:69"},{"kind":"number","nativeSrc":"40010:2:69","nodeType":"YulLiteral","src":"40010:2:69","type":"","value":"29"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"39946:58:69","nodeType":"YulIdentifier","src":"39946:58:69"},"nativeSrc":"39946:67:69","nodeType":"YulFunctionCall","src":"39946:67:69"},"variableNames":[{"name":"pos","nativeSrc":"39939:3:69","nodeType":"YulIdentifier","src":"39939:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"40111:3:69","nodeType":"YulIdentifier","src":"40111:3:69"}],"functionName":{"name":"store_literal_in_memory_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe","nativeSrc":"40022:88:69","nodeType":"YulIdentifier","src":"40022:88:69"},"nativeSrc":"40022:93:69","nodeType":"YulFunctionCall","src":"40022:93:69"},"nativeSrc":"40022:93:69","nodeType":"YulExpressionStatement","src":"40022:93:69"},{"nativeSrc":"40124:19:69","nodeType":"YulAssignment","src":"40124:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"40135:3:69","nodeType":"YulIdentifier","src":"40135:3:69"},{"kind":"number","nativeSrc":"40140:2:69","nodeType":"YulLiteral","src":"40140:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"40131:3:69","nodeType":"YulIdentifier","src":"40131:3:69"},"nativeSrc":"40131:12:69","nodeType":"YulFunctionCall","src":"40131:12:69"},"variableNames":[{"name":"end","nativeSrc":"40124:3:69","nodeType":"YulIdentifier","src":"40124:3:69"}]}]},"name":"abi_encode_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe_to_t_string_memory_ptr_fromStack","nativeSrc":"39783:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"39917:3:69","nodeType":"YulTypedName","src":"39917:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"39925:3:69","nodeType":"YulTypedName","src":"39925:3:69","type":""}],"src":"39783:366:69"},{"body":{"nativeSrc":"40326:248:69","nodeType":"YulBlock","src":"40326:248:69","statements":[{"nativeSrc":"40336:26:69","nodeType":"YulAssignment","src":"40336:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"40348:9:69","nodeType":"YulIdentifier","src":"40348:9:69"},{"kind":"number","nativeSrc":"40359:2:69","nodeType":"YulLiteral","src":"40359:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"40344:3:69","nodeType":"YulIdentifier","src":"40344:3:69"},"nativeSrc":"40344:18:69","nodeType":"YulFunctionCall","src":"40344:18:69"},"variableNames":[{"name":"tail","nativeSrc":"40336:4:69","nodeType":"YulIdentifier","src":"40336:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"40383:9:69","nodeType":"YulIdentifier","src":"40383:9:69"},{"kind":"number","nativeSrc":"40394:1:69","nodeType":"YulLiteral","src":"40394:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"40379:3:69","nodeType":"YulIdentifier","src":"40379:3:69"},"nativeSrc":"40379:17:69","nodeType":"YulFunctionCall","src":"40379:17:69"},{"arguments":[{"name":"tail","nativeSrc":"40402:4:69","nodeType":"YulIdentifier","src":"40402:4:69"},{"name":"headStart","nativeSrc":"40408:9:69","nodeType":"YulIdentifier","src":"40408:9:69"}],"functionName":{"name":"sub","nativeSrc":"40398:3:69","nodeType":"YulIdentifier","src":"40398:3:69"},"nativeSrc":"40398:20:69","nodeType":"YulFunctionCall","src":"40398:20:69"}],"functionName":{"name":"mstore","nativeSrc":"40372:6:69","nodeType":"YulIdentifier","src":"40372:6:69"},"nativeSrc":"40372:47:69","nodeType":"YulFunctionCall","src":"40372:47:69"},"nativeSrc":"40372:47:69","nodeType":"YulExpressionStatement","src":"40372:47:69"},{"nativeSrc":"40428:139:69","nodeType":"YulAssignment","src":"40428:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"40562:4:69","nodeType":"YulIdentifier","src":"40562:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe_to_t_string_memory_ptr_fromStack","nativeSrc":"40436:124:69","nodeType":"YulIdentifier","src":"40436:124:69"},"nativeSrc":"40436:131:69","nodeType":"YulFunctionCall","src":"40436:131:69"},"variableNames":[{"name":"tail","nativeSrc":"40428:4:69","nodeType":"YulIdentifier","src":"40428:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"40155:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"40306:9:69","nodeType":"YulTypedName","src":"40306:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"40321:4:69","nodeType":"YulTypedName","src":"40321:4:69","type":""}],"src":"40155:419:69"},{"body":{"nativeSrc":"40686:118:69","nodeType":"YulBlock","src":"40686:118:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"40708:6:69","nodeType":"YulIdentifier","src":"40708:6:69"},{"kind":"number","nativeSrc":"40716:1:69","nodeType":"YulLiteral","src":"40716:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"40704:3:69","nodeType":"YulIdentifier","src":"40704:3:69"},"nativeSrc":"40704:14:69","nodeType":"YulFunctionCall","src":"40704:14:69"},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f206164","kind":"string","nativeSrc":"40720:34:69","nodeType":"YulLiteral","src":"40720:34:69","type":"","value":"ERC20: transfer from the zero ad"}],"functionName":{"name":"mstore","nativeSrc":"40697:6:69","nodeType":"YulIdentifier","src":"40697:6:69"},"nativeSrc":"40697:58:69","nodeType":"YulFunctionCall","src":"40697:58:69"},"nativeSrc":"40697:58:69","nodeType":"YulExpressionStatement","src":"40697:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"40776:6:69","nodeType":"YulIdentifier","src":"40776:6:69"},{"kind":"number","nativeSrc":"40784:2:69","nodeType":"YulLiteral","src":"40784:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"40772:3:69","nodeType":"YulIdentifier","src":"40772:3:69"},"nativeSrc":"40772:15:69","nodeType":"YulFunctionCall","src":"40772:15:69"},{"hexValue":"6472657373","kind":"string","nativeSrc":"40789:7:69","nodeType":"YulLiteral","src":"40789:7:69","type":"","value":"dress"}],"functionName":{"name":"mstore","nativeSrc":"40765:6:69","nodeType":"YulIdentifier","src":"40765:6:69"},"nativeSrc":"40765:32:69","nodeType":"YulFunctionCall","src":"40765:32:69"},"nativeSrc":"40765:32:69","nodeType":"YulExpressionStatement","src":"40765:32:69"}]},"name":"store_literal_in_memory_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea","nativeSrc":"40580:224:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"40678:6:69","nodeType":"YulTypedName","src":"40678:6:69","type":""}],"src":"40580:224:69"},{"body":{"nativeSrc":"40956:220:69","nodeType":"YulBlock","src":"40956:220:69","statements":[{"nativeSrc":"40966:74:69","nodeType":"YulAssignment","src":"40966:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"41032:3:69","nodeType":"YulIdentifier","src":"41032:3:69"},{"kind":"number","nativeSrc":"41037:2:69","nodeType":"YulLiteral","src":"41037:2:69","type":"","value":"37"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"40973:58:69","nodeType":"YulIdentifier","src":"40973:58:69"},"nativeSrc":"40973:67:69","nodeType":"YulFunctionCall","src":"40973:67:69"},"variableNames":[{"name":"pos","nativeSrc":"40966:3:69","nodeType":"YulIdentifier","src":"40966:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"41138:3:69","nodeType":"YulIdentifier","src":"41138:3:69"}],"functionName":{"name":"store_literal_in_memory_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea","nativeSrc":"41049:88:69","nodeType":"YulIdentifier","src":"41049:88:69"},"nativeSrc":"41049:93:69","nodeType":"YulFunctionCall","src":"41049:93:69"},"nativeSrc":"41049:93:69","nodeType":"YulExpressionStatement","src":"41049:93:69"},{"nativeSrc":"41151:19:69","nodeType":"YulAssignment","src":"41151:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"41162:3:69","nodeType":"YulIdentifier","src":"41162:3:69"},{"kind":"number","nativeSrc":"41167:2:69","nodeType":"YulLiteral","src":"41167:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"41158:3:69","nodeType":"YulIdentifier","src":"41158:3:69"},"nativeSrc":"41158:12:69","nodeType":"YulFunctionCall","src":"41158:12:69"},"variableNames":[{"name":"end","nativeSrc":"41151:3:69","nodeType":"YulIdentifier","src":"41151:3:69"}]}]},"name":"abi_encode_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea_to_t_string_memory_ptr_fromStack","nativeSrc":"40810:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"40944:3:69","nodeType":"YulTypedName","src":"40944:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"40952:3:69","nodeType":"YulTypedName","src":"40952:3:69","type":""}],"src":"40810:366:69"},{"body":{"nativeSrc":"41353:248:69","nodeType":"YulBlock","src":"41353:248:69","statements":[{"nativeSrc":"41363:26:69","nodeType":"YulAssignment","src":"41363:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"41375:9:69","nodeType":"YulIdentifier","src":"41375:9:69"},{"kind":"number","nativeSrc":"41386:2:69","nodeType":"YulLiteral","src":"41386:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"41371:3:69","nodeType":"YulIdentifier","src":"41371:3:69"},"nativeSrc":"41371:18:69","nodeType":"YulFunctionCall","src":"41371:18:69"},"variableNames":[{"name":"tail","nativeSrc":"41363:4:69","nodeType":"YulIdentifier","src":"41363:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"41410:9:69","nodeType":"YulIdentifier","src":"41410:9:69"},{"kind":"number","nativeSrc":"41421:1:69","nodeType":"YulLiteral","src":"41421:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"41406:3:69","nodeType":"YulIdentifier","src":"41406:3:69"},"nativeSrc":"41406:17:69","nodeType":"YulFunctionCall","src":"41406:17:69"},{"arguments":[{"name":"tail","nativeSrc":"41429:4:69","nodeType":"YulIdentifier","src":"41429:4:69"},{"name":"headStart","nativeSrc":"41435:9:69","nodeType":"YulIdentifier","src":"41435:9:69"}],"functionName":{"name":"sub","nativeSrc":"41425:3:69","nodeType":"YulIdentifier","src":"41425:3:69"},"nativeSrc":"41425:20:69","nodeType":"YulFunctionCall","src":"41425:20:69"}],"functionName":{"name":"mstore","nativeSrc":"41399:6:69","nodeType":"YulIdentifier","src":"41399:6:69"},"nativeSrc":"41399:47:69","nodeType":"YulFunctionCall","src":"41399:47:69"},"nativeSrc":"41399:47:69","nodeType":"YulExpressionStatement","src":"41399:47:69"},{"nativeSrc":"41455:139:69","nodeType":"YulAssignment","src":"41455:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"41589:4:69","nodeType":"YulIdentifier","src":"41589:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea_to_t_string_memory_ptr_fromStack","nativeSrc":"41463:124:69","nodeType":"YulIdentifier","src":"41463:124:69"},"nativeSrc":"41463:131:69","nodeType":"YulFunctionCall","src":"41463:131:69"},"variableNames":[{"name":"tail","nativeSrc":"41455:4:69","nodeType":"YulIdentifier","src":"41455:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"41182:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"41333:9:69","nodeType":"YulTypedName","src":"41333:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"41348:4:69","nodeType":"YulTypedName","src":"41348:4:69","type":""}],"src":"41182:419:69"},{"body":{"nativeSrc":"41713:116:69","nodeType":"YulBlock","src":"41713:116:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"41735:6:69","nodeType":"YulIdentifier","src":"41735:6:69"},{"kind":"number","nativeSrc":"41743:1:69","nodeType":"YulLiteral","src":"41743:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"41731:3:69","nodeType":"YulIdentifier","src":"41731:3:69"},"nativeSrc":"41731:14:69","nodeType":"YulFunctionCall","src":"41731:14:69"},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472","kind":"string","nativeSrc":"41747:34:69","nodeType":"YulLiteral","src":"41747:34:69","type":"","value":"ERC20: transfer to the zero addr"}],"functionName":{"name":"mstore","nativeSrc":"41724:6:69","nodeType":"YulIdentifier","src":"41724:6:69"},"nativeSrc":"41724:58:69","nodeType":"YulFunctionCall","src":"41724:58:69"},"nativeSrc":"41724:58:69","nodeType":"YulExpressionStatement","src":"41724:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"41803:6:69","nodeType":"YulIdentifier","src":"41803:6:69"},{"kind":"number","nativeSrc":"41811:2:69","nodeType":"YulLiteral","src":"41811:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"41799:3:69","nodeType":"YulIdentifier","src":"41799:3:69"},"nativeSrc":"41799:15:69","nodeType":"YulFunctionCall","src":"41799:15:69"},{"hexValue":"657373","kind":"string","nativeSrc":"41816:5:69","nodeType":"YulLiteral","src":"41816:5:69","type":"","value":"ess"}],"functionName":{"name":"mstore","nativeSrc":"41792:6:69","nodeType":"YulIdentifier","src":"41792:6:69"},"nativeSrc":"41792:30:69","nodeType":"YulFunctionCall","src":"41792:30:69"},"nativeSrc":"41792:30:69","nodeType":"YulExpressionStatement","src":"41792:30:69"}]},"name":"store_literal_in_memory_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f","nativeSrc":"41607:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"41705:6:69","nodeType":"YulTypedName","src":"41705:6:69","type":""}],"src":"41607:222:69"},{"body":{"nativeSrc":"41981:220:69","nodeType":"YulBlock","src":"41981:220:69","statements":[{"nativeSrc":"41991:74:69","nodeType":"YulAssignment","src":"41991:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"42057:3:69","nodeType":"YulIdentifier","src":"42057:3:69"},{"kind":"number","nativeSrc":"42062:2:69","nodeType":"YulLiteral","src":"42062:2:69","type":"","value":"35"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"41998:58:69","nodeType":"YulIdentifier","src":"41998:58:69"},"nativeSrc":"41998:67:69","nodeType":"YulFunctionCall","src":"41998:67:69"},"variableNames":[{"name":"pos","nativeSrc":"41991:3:69","nodeType":"YulIdentifier","src":"41991:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"42163:3:69","nodeType":"YulIdentifier","src":"42163:3:69"}],"functionName":{"name":"store_literal_in_memory_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f","nativeSrc":"42074:88:69","nodeType":"YulIdentifier","src":"42074:88:69"},"nativeSrc":"42074:93:69","nodeType":"YulFunctionCall","src":"42074:93:69"},"nativeSrc":"42074:93:69","nodeType":"YulExpressionStatement","src":"42074:93:69"},{"nativeSrc":"42176:19:69","nodeType":"YulAssignment","src":"42176:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"42187:3:69","nodeType":"YulIdentifier","src":"42187:3:69"},{"kind":"number","nativeSrc":"42192:2:69","nodeType":"YulLiteral","src":"42192:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"42183:3:69","nodeType":"YulIdentifier","src":"42183:3:69"},"nativeSrc":"42183:12:69","nodeType":"YulFunctionCall","src":"42183:12:69"},"variableNames":[{"name":"end","nativeSrc":"42176:3:69","nodeType":"YulIdentifier","src":"42176:3:69"}]}]},"name":"abi_encode_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f_to_t_string_memory_ptr_fromStack","nativeSrc":"41835:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"41969:3:69","nodeType":"YulTypedName","src":"41969:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"41977:3:69","nodeType":"YulTypedName","src":"41977:3:69","type":""}],"src":"41835:366:69"},{"body":{"nativeSrc":"42378:248:69","nodeType":"YulBlock","src":"42378:248:69","statements":[{"nativeSrc":"42388:26:69","nodeType":"YulAssignment","src":"42388:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"42400:9:69","nodeType":"YulIdentifier","src":"42400:9:69"},{"kind":"number","nativeSrc":"42411:2:69","nodeType":"YulLiteral","src":"42411:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"42396:3:69","nodeType":"YulIdentifier","src":"42396:3:69"},"nativeSrc":"42396:18:69","nodeType":"YulFunctionCall","src":"42396:18:69"},"variableNames":[{"name":"tail","nativeSrc":"42388:4:69","nodeType":"YulIdentifier","src":"42388:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"42435:9:69","nodeType":"YulIdentifier","src":"42435:9:69"},{"kind":"number","nativeSrc":"42446:1:69","nodeType":"YulLiteral","src":"42446:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"42431:3:69","nodeType":"YulIdentifier","src":"42431:3:69"},"nativeSrc":"42431:17:69","nodeType":"YulFunctionCall","src":"42431:17:69"},{"arguments":[{"name":"tail","nativeSrc":"42454:4:69","nodeType":"YulIdentifier","src":"42454:4:69"},{"name":"headStart","nativeSrc":"42460:9:69","nodeType":"YulIdentifier","src":"42460:9:69"}],"functionName":{"name":"sub","nativeSrc":"42450:3:69","nodeType":"YulIdentifier","src":"42450:3:69"},"nativeSrc":"42450:20:69","nodeType":"YulFunctionCall","src":"42450:20:69"}],"functionName":{"name":"mstore","nativeSrc":"42424:6:69","nodeType":"YulIdentifier","src":"42424:6:69"},"nativeSrc":"42424:47:69","nodeType":"YulFunctionCall","src":"42424:47:69"},"nativeSrc":"42424:47:69","nodeType":"YulExpressionStatement","src":"42424:47:69"},{"nativeSrc":"42480:139:69","nodeType":"YulAssignment","src":"42480:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"42614:4:69","nodeType":"YulIdentifier","src":"42614:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f_to_t_string_memory_ptr_fromStack","nativeSrc":"42488:124:69","nodeType":"YulIdentifier","src":"42488:124:69"},"nativeSrc":"42488:131:69","nodeType":"YulFunctionCall","src":"42488:131:69"},"variableNames":[{"name":"tail","nativeSrc":"42480:4:69","nodeType":"YulIdentifier","src":"42480:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"42207:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"42358:9:69","nodeType":"YulTypedName","src":"42358:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"42373:4:69","nodeType":"YulTypedName","src":"42373:4:69","type":""}],"src":"42207:419:69"},{"body":{"nativeSrc":"42738:119:69","nodeType":"YulBlock","src":"42738:119:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"42760:6:69","nodeType":"YulIdentifier","src":"42760:6:69"},{"kind":"number","nativeSrc":"42768:1:69","nodeType":"YulLiteral","src":"42768:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"42756:3:69","nodeType":"YulIdentifier","src":"42756:3:69"},"nativeSrc":"42756:14:69","nodeType":"YulFunctionCall","src":"42756:14:69"},{"hexValue":"45524332303a207472616e7366657220616d6f756e7420657863656564732062","kind":"string","nativeSrc":"42772:34:69","nodeType":"YulLiteral","src":"42772:34:69","type":"","value":"ERC20: transfer amount exceeds b"}],"functionName":{"name":"mstore","nativeSrc":"42749:6:69","nodeType":"YulIdentifier","src":"42749:6:69"},"nativeSrc":"42749:58:69","nodeType":"YulFunctionCall","src":"42749:58:69"},"nativeSrc":"42749:58:69","nodeType":"YulExpressionStatement","src":"42749:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"42828:6:69","nodeType":"YulIdentifier","src":"42828:6:69"},{"kind":"number","nativeSrc":"42836:2:69","nodeType":"YulLiteral","src":"42836:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"42824:3:69","nodeType":"YulIdentifier","src":"42824:3:69"},"nativeSrc":"42824:15:69","nodeType":"YulFunctionCall","src":"42824:15:69"},{"hexValue":"616c616e6365","kind":"string","nativeSrc":"42841:8:69","nodeType":"YulLiteral","src":"42841:8:69","type":"","value":"alance"}],"functionName":{"name":"mstore","nativeSrc":"42817:6:69","nodeType":"YulIdentifier","src":"42817:6:69"},"nativeSrc":"42817:33:69","nodeType":"YulFunctionCall","src":"42817:33:69"},"nativeSrc":"42817:33:69","nodeType":"YulExpressionStatement","src":"42817:33:69"}]},"name":"store_literal_in_memory_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6","nativeSrc":"42632:225:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"42730:6:69","nodeType":"YulTypedName","src":"42730:6:69","type":""}],"src":"42632:225:69"},{"body":{"nativeSrc":"43009:220:69","nodeType":"YulBlock","src":"43009:220:69","statements":[{"nativeSrc":"43019:74:69","nodeType":"YulAssignment","src":"43019:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"43085:3:69","nodeType":"YulIdentifier","src":"43085:3:69"},{"kind":"number","nativeSrc":"43090:2:69","nodeType":"YulLiteral","src":"43090:2:69","type":"","value":"38"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"43026:58:69","nodeType":"YulIdentifier","src":"43026:58:69"},"nativeSrc":"43026:67:69","nodeType":"YulFunctionCall","src":"43026:67:69"},"variableNames":[{"name":"pos","nativeSrc":"43019:3:69","nodeType":"YulIdentifier","src":"43019:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"43191:3:69","nodeType":"YulIdentifier","src":"43191:3:69"}],"functionName":{"name":"store_literal_in_memory_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6","nativeSrc":"43102:88:69","nodeType":"YulIdentifier","src":"43102:88:69"},"nativeSrc":"43102:93:69","nodeType":"YulFunctionCall","src":"43102:93:69"},"nativeSrc":"43102:93:69","nodeType":"YulExpressionStatement","src":"43102:93:69"},{"nativeSrc":"43204:19:69","nodeType":"YulAssignment","src":"43204:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"43215:3:69","nodeType":"YulIdentifier","src":"43215:3:69"},{"kind":"number","nativeSrc":"43220:2:69","nodeType":"YulLiteral","src":"43220:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"43211:3:69","nodeType":"YulIdentifier","src":"43211:3:69"},"nativeSrc":"43211:12:69","nodeType":"YulFunctionCall","src":"43211:12:69"},"variableNames":[{"name":"end","nativeSrc":"43204:3:69","nodeType":"YulIdentifier","src":"43204:3:69"}]}]},"name":"abi_encode_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6_to_t_string_memory_ptr_fromStack","nativeSrc":"42863:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"42997:3:69","nodeType":"YulTypedName","src":"42997:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"43005:3:69","nodeType":"YulTypedName","src":"43005:3:69","type":""}],"src":"42863:366:69"},{"body":{"nativeSrc":"43406:248:69","nodeType":"YulBlock","src":"43406:248:69","statements":[{"nativeSrc":"43416:26:69","nodeType":"YulAssignment","src":"43416:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"43428:9:69","nodeType":"YulIdentifier","src":"43428:9:69"},{"kind":"number","nativeSrc":"43439:2:69","nodeType":"YulLiteral","src":"43439:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"43424:3:69","nodeType":"YulIdentifier","src":"43424:3:69"},"nativeSrc":"43424:18:69","nodeType":"YulFunctionCall","src":"43424:18:69"},"variableNames":[{"name":"tail","nativeSrc":"43416:4:69","nodeType":"YulIdentifier","src":"43416:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"43463:9:69","nodeType":"YulIdentifier","src":"43463:9:69"},{"kind":"number","nativeSrc":"43474:1:69","nodeType":"YulLiteral","src":"43474:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"43459:3:69","nodeType":"YulIdentifier","src":"43459:3:69"},"nativeSrc":"43459:17:69","nodeType":"YulFunctionCall","src":"43459:17:69"},{"arguments":[{"name":"tail","nativeSrc":"43482:4:69","nodeType":"YulIdentifier","src":"43482:4:69"},{"name":"headStart","nativeSrc":"43488:9:69","nodeType":"YulIdentifier","src":"43488:9:69"}],"functionName":{"name":"sub","nativeSrc":"43478:3:69","nodeType":"YulIdentifier","src":"43478:3:69"},"nativeSrc":"43478:20:69","nodeType":"YulFunctionCall","src":"43478:20:69"}],"functionName":{"name":"mstore","nativeSrc":"43452:6:69","nodeType":"YulIdentifier","src":"43452:6:69"},"nativeSrc":"43452:47:69","nodeType":"YulFunctionCall","src":"43452:47:69"},"nativeSrc":"43452:47:69","nodeType":"YulExpressionStatement","src":"43452:47:69"},{"nativeSrc":"43508:139:69","nodeType":"YulAssignment","src":"43508:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"43642:4:69","nodeType":"YulIdentifier","src":"43642:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6_to_t_string_memory_ptr_fromStack","nativeSrc":"43516:124:69","nodeType":"YulIdentifier","src":"43516:124:69"},"nativeSrc":"43516:131:69","nodeType":"YulFunctionCall","src":"43516:131:69"},"variableNames":[{"name":"tail","nativeSrc":"43508:4:69","nodeType":"YulIdentifier","src":"43508:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"43235:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"43386:9:69","nodeType":"YulTypedName","src":"43386:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"43401:4:69","nodeType":"YulTypedName","src":"43401:4:69","type":""}],"src":"43235:419:69"},{"body":{"nativeSrc":"43701:77:69","nodeType":"YulBlock","src":"43701:77:69","statements":[{"body":{"nativeSrc":"43756:16:69","nodeType":"YulBlock","src":"43756:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"43765:1:69","nodeType":"YulLiteral","src":"43765:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"43768:1:69","nodeType":"YulLiteral","src":"43768:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"43758:6:69","nodeType":"YulIdentifier","src":"43758:6:69"},"nativeSrc":"43758:12:69","nodeType":"YulFunctionCall","src":"43758:12:69"},"nativeSrc":"43758:12:69","nodeType":"YulExpressionStatement","src":"43758:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"43724:5:69","nodeType":"YulIdentifier","src":"43724:5:69"},{"arguments":[{"name":"value","nativeSrc":"43747:5:69","nodeType":"YulIdentifier","src":"43747:5:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"43731:15:69","nodeType":"YulIdentifier","src":"43731:15:69"},"nativeSrc":"43731:22:69","nodeType":"YulFunctionCall","src":"43731:22:69"}],"functionName":{"name":"eq","nativeSrc":"43721:2:69","nodeType":"YulIdentifier","src":"43721:2:69"},"nativeSrc":"43721:33:69","nodeType":"YulFunctionCall","src":"43721:33:69"}],"functionName":{"name":"iszero","nativeSrc":"43714:6:69","nodeType":"YulIdentifier","src":"43714:6:69"},"nativeSrc":"43714:41:69","nodeType":"YulFunctionCall","src":"43714:41:69"},"nativeSrc":"43711:61:69","nodeType":"YulIf","src":"43711:61:69"}]},"name":"validator_revert_t_uint8","nativeSrc":"43660:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"43694:5:69","nodeType":"YulTypedName","src":"43694:5:69","type":""}],"src":"43660:118:69"},{"body":{"nativeSrc":"43845:78:69","nodeType":"YulBlock","src":"43845:78:69","statements":[{"nativeSrc":"43855:22:69","nodeType":"YulAssignment","src":"43855:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"43870:6:69","nodeType":"YulIdentifier","src":"43870:6:69"}],"functionName":{"name":"mload","nativeSrc":"43864:5:69","nodeType":"YulIdentifier","src":"43864:5:69"},"nativeSrc":"43864:13:69","nodeType":"YulFunctionCall","src":"43864:13:69"},"variableNames":[{"name":"value","nativeSrc":"43855:5:69","nodeType":"YulIdentifier","src":"43855:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"43911:5:69","nodeType":"YulIdentifier","src":"43911:5:69"}],"functionName":{"name":"validator_revert_t_uint8","nativeSrc":"43886:24:69","nodeType":"YulIdentifier","src":"43886:24:69"},"nativeSrc":"43886:31:69","nodeType":"YulFunctionCall","src":"43886:31:69"},"nativeSrc":"43886:31:69","nodeType":"YulExpressionStatement","src":"43886:31:69"}]},"name":"abi_decode_t_uint8_fromMemory","nativeSrc":"43784:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"43823:6:69","nodeType":"YulTypedName","src":"43823:6:69","type":""},{"name":"end","nativeSrc":"43831:3:69","nodeType":"YulTypedName","src":"43831:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"43839:5:69","nodeType":"YulTypedName","src":"43839:5:69","type":""}],"src":"43784:139:69"},{"body":{"nativeSrc":"44004:272:69","nodeType":"YulBlock","src":"44004:272:69","statements":[{"body":{"nativeSrc":"44050:83:69","nodeType":"YulBlock","src":"44050:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"44052:77:69","nodeType":"YulIdentifier","src":"44052:77:69"},"nativeSrc":"44052:79:69","nodeType":"YulFunctionCall","src":"44052:79:69"},"nativeSrc":"44052:79:69","nodeType":"YulExpressionStatement","src":"44052:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"44025:7:69","nodeType":"YulIdentifier","src":"44025:7:69"},{"name":"headStart","nativeSrc":"44034:9:69","nodeType":"YulIdentifier","src":"44034:9:69"}],"functionName":{"name":"sub","nativeSrc":"44021:3:69","nodeType":"YulIdentifier","src":"44021:3:69"},"nativeSrc":"44021:23:69","nodeType":"YulFunctionCall","src":"44021:23:69"},{"kind":"number","nativeSrc":"44046:2:69","nodeType":"YulLiteral","src":"44046:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"44017:3:69","nodeType":"YulIdentifier","src":"44017:3:69"},"nativeSrc":"44017:32:69","nodeType":"YulFunctionCall","src":"44017:32:69"},"nativeSrc":"44014:119:69","nodeType":"YulIf","src":"44014:119:69"},{"nativeSrc":"44143:126:69","nodeType":"YulBlock","src":"44143:126:69","statements":[{"nativeSrc":"44158:15:69","nodeType":"YulVariableDeclaration","src":"44158:15:69","value":{"kind":"number","nativeSrc":"44172:1:69","nodeType":"YulLiteral","src":"44172:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"44162:6:69","nodeType":"YulTypedName","src":"44162:6:69","type":""}]},{"nativeSrc":"44187:72:69","nodeType":"YulAssignment","src":"44187:72:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"44231:9:69","nodeType":"YulIdentifier","src":"44231:9:69"},{"name":"offset","nativeSrc":"44242:6:69","nodeType":"YulIdentifier","src":"44242:6:69"}],"functionName":{"name":"add","nativeSrc":"44227:3:69","nodeType":"YulIdentifier","src":"44227:3:69"},"nativeSrc":"44227:22:69","nodeType":"YulFunctionCall","src":"44227:22:69"},{"name":"dataEnd","nativeSrc":"44251:7:69","nodeType":"YulIdentifier","src":"44251:7:69"}],"functionName":{"name":"abi_decode_t_uint8_fromMemory","nativeSrc":"44197:29:69","nodeType":"YulIdentifier","src":"44197:29:69"},"nativeSrc":"44197:62:69","nodeType":"YulFunctionCall","src":"44197:62:69"},"variableNames":[{"name":"value0","nativeSrc":"44187:6:69","nodeType":"YulIdentifier","src":"44187:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint8_fromMemory","nativeSrc":"43929:347:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"43974:9:69","nodeType":"YulTypedName","src":"43974:9:69","type":""},{"name":"dataEnd","nativeSrc":"43985:7:69","nodeType":"YulTypedName","src":"43985:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"43997:6:69","nodeType":"YulTypedName","src":"43997:6:69","type":""}],"src":"43929:347:69"},{"body":{"nativeSrc":"44325:148:69","nodeType":"YulBlock","src":"44325:148:69","statements":[{"nativeSrc":"44335:23:69","nodeType":"YulAssignment","src":"44335:23:69","value":{"arguments":[{"name":"x","nativeSrc":"44356:1:69","nodeType":"YulIdentifier","src":"44356:1:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"44340:15:69","nodeType":"YulIdentifier","src":"44340:15:69"},"nativeSrc":"44340:18:69","nodeType":"YulFunctionCall","src":"44340:18:69"},"variableNames":[{"name":"x","nativeSrc":"44335:1:69","nodeType":"YulIdentifier","src":"44335:1:69"}]},{"nativeSrc":"44367:23:69","nodeType":"YulAssignment","src":"44367:23:69","value":{"arguments":[{"name":"y","nativeSrc":"44388:1:69","nodeType":"YulIdentifier","src":"44388:1:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"44372:15:69","nodeType":"YulIdentifier","src":"44372:15:69"},"nativeSrc":"44372:18:69","nodeType":"YulFunctionCall","src":"44372:18:69"},"variableNames":[{"name":"y","nativeSrc":"44367:1:69","nodeType":"YulIdentifier","src":"44367:1:69"}]},{"nativeSrc":"44399:17:69","nodeType":"YulAssignment","src":"44399:17:69","value":{"arguments":[{"name":"x","nativeSrc":"44411:1:69","nodeType":"YulIdentifier","src":"44411:1:69"},{"name":"y","nativeSrc":"44414:1:69","nodeType":"YulIdentifier","src":"44414:1:69"}],"functionName":{"name":"sub","nativeSrc":"44407:3:69","nodeType":"YulIdentifier","src":"44407:3:69"},"nativeSrc":"44407:9:69","nodeType":"YulFunctionCall","src":"44407:9:69"},"variableNames":[{"name":"diff","nativeSrc":"44399:4:69","nodeType":"YulIdentifier","src":"44399:4:69"}]},{"body":{"nativeSrc":"44444:22:69","nodeType":"YulBlock","src":"44444:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"44446:16:69","nodeType":"YulIdentifier","src":"44446:16:69"},"nativeSrc":"44446:18:69","nodeType":"YulFunctionCall","src":"44446:18:69"},"nativeSrc":"44446:18:69","nodeType":"YulExpressionStatement","src":"44446:18:69"}]},"condition":{"arguments":[{"name":"diff","nativeSrc":"44432:4:69","nodeType":"YulIdentifier","src":"44432:4:69"},{"kind":"number","nativeSrc":"44438:4:69","nodeType":"YulLiteral","src":"44438:4:69","type":"","value":"0xff"}],"functionName":{"name":"gt","nativeSrc":"44429:2:69","nodeType":"YulIdentifier","src":"44429:2:69"},"nativeSrc":"44429:14:69","nodeType":"YulFunctionCall","src":"44429:14:69"},"nativeSrc":"44426:40:69","nodeType":"YulIf","src":"44426:40:69"}]},"name":"checked_sub_t_uint8","nativeSrc":"44282:191:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"44311:1:69","nodeType":"YulTypedName","src":"44311:1:69","type":""},{"name":"y","nativeSrc":"44314:1:69","nodeType":"YulTypedName","src":"44314:1:69","type":""}],"returnVariables":[{"name":"diff","nativeSrc":"44320:4:69","nodeType":"YulTypedName","src":"44320:4:69","type":""}],"src":"44282:191:69"},{"body":{"nativeSrc":"44605:206:69","nodeType":"YulBlock","src":"44605:206:69","statements":[{"nativeSrc":"44615:26:69","nodeType":"YulAssignment","src":"44615:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"44627:9:69","nodeType":"YulIdentifier","src":"44627:9:69"},{"kind":"number","nativeSrc":"44638:2:69","nodeType":"YulLiteral","src":"44638:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"44623:3:69","nodeType":"YulIdentifier","src":"44623:3:69"},"nativeSrc":"44623:18:69","nodeType":"YulFunctionCall","src":"44623:18:69"},"variableNames":[{"name":"tail","nativeSrc":"44615:4:69","nodeType":"YulIdentifier","src":"44615:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"44695:6:69","nodeType":"YulIdentifier","src":"44695:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"44708:9:69","nodeType":"YulIdentifier","src":"44708:9:69"},{"kind":"number","nativeSrc":"44719:1:69","nodeType":"YulLiteral","src":"44719:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"44704:3:69","nodeType":"YulIdentifier","src":"44704:3:69"},"nativeSrc":"44704:17:69","nodeType":"YulFunctionCall","src":"44704:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"44651:43:69","nodeType":"YulIdentifier","src":"44651:43:69"},"nativeSrc":"44651:71:69","nodeType":"YulFunctionCall","src":"44651:71:69"},"nativeSrc":"44651:71:69","nodeType":"YulExpressionStatement","src":"44651:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"44776:6:69","nodeType":"YulIdentifier","src":"44776:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"44789:9:69","nodeType":"YulIdentifier","src":"44789:9:69"},{"kind":"number","nativeSrc":"44800:2:69","nodeType":"YulLiteral","src":"44800:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"44785:3:69","nodeType":"YulIdentifier","src":"44785:3:69"},"nativeSrc":"44785:18:69","nodeType":"YulFunctionCall","src":"44785:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"44732:43:69","nodeType":"YulIdentifier","src":"44732:43:69"},"nativeSrc":"44732:72:69","nodeType":"YulFunctionCall","src":"44732:72:69"},"nativeSrc":"44732:72:69","nodeType":"YulExpressionStatement","src":"44732:72:69"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"44479:332:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"44569:9:69","nodeType":"YulTypedName","src":"44569:9:69","type":""},{"name":"value1","nativeSrc":"44581:6:69","nodeType":"YulTypedName","src":"44581:6:69","type":""},{"name":"value0","nativeSrc":"44589:6:69","nodeType":"YulTypedName","src":"44589:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"44600:4:69","nodeType":"YulTypedName","src":"44600:4:69","type":""}],"src":"44479:332:69"},{"body":{"nativeSrc":"44923:124:69","nodeType":"YulBlock","src":"44923:124:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"44945:6:69","nodeType":"YulIdentifier","src":"44945:6:69"},{"kind":"number","nativeSrc":"44953:1:69","nodeType":"YulLiteral","src":"44953:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"44941:3:69","nodeType":"YulIdentifier","src":"44941:3:69"},"nativeSrc":"44941:14:69","nodeType":"YulFunctionCall","src":"44941:14:69"},{"hexValue":"496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069","kind":"string","nativeSrc":"44957:34:69","nodeType":"YulLiteral","src":"44957:34:69","type":"","value":"Initializable: contract is not i"}],"functionName":{"name":"mstore","nativeSrc":"44934:6:69","nodeType":"YulIdentifier","src":"44934:6:69"},"nativeSrc":"44934:58:69","nodeType":"YulFunctionCall","src":"44934:58:69"},"nativeSrc":"44934:58:69","nodeType":"YulExpressionStatement","src":"44934:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"45013:6:69","nodeType":"YulIdentifier","src":"45013:6:69"},{"kind":"number","nativeSrc":"45021:2:69","nodeType":"YulLiteral","src":"45021:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"45009:3:69","nodeType":"YulIdentifier","src":"45009:3:69"},"nativeSrc":"45009:15:69","nodeType":"YulFunctionCall","src":"45009:15:69"},{"hexValue":"6e697469616c697a696e67","kind":"string","nativeSrc":"45026:13:69","nodeType":"YulLiteral","src":"45026:13:69","type":"","value":"nitializing"}],"functionName":{"name":"mstore","nativeSrc":"45002:6:69","nodeType":"YulIdentifier","src":"45002:6:69"},"nativeSrc":"45002:38:69","nodeType":"YulFunctionCall","src":"45002:38:69"},"nativeSrc":"45002:38:69","nodeType":"YulExpressionStatement","src":"45002:38:69"}]},"name":"store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b","nativeSrc":"44817:230:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"44915:6:69","nodeType":"YulTypedName","src":"44915:6:69","type":""}],"src":"44817:230:69"},{"body":{"nativeSrc":"45199:220:69","nodeType":"YulBlock","src":"45199:220:69","statements":[{"nativeSrc":"45209:74:69","nodeType":"YulAssignment","src":"45209:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"45275:3:69","nodeType":"YulIdentifier","src":"45275:3:69"},{"kind":"number","nativeSrc":"45280:2:69","nodeType":"YulLiteral","src":"45280:2:69","type":"","value":"43"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"45216:58:69","nodeType":"YulIdentifier","src":"45216:58:69"},"nativeSrc":"45216:67:69","nodeType":"YulFunctionCall","src":"45216:67:69"},"variableNames":[{"name":"pos","nativeSrc":"45209:3:69","nodeType":"YulIdentifier","src":"45209:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"45381:3:69","nodeType":"YulIdentifier","src":"45381:3:69"}],"functionName":{"name":"store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b","nativeSrc":"45292:88:69","nodeType":"YulIdentifier","src":"45292:88:69"},"nativeSrc":"45292:93:69","nodeType":"YulFunctionCall","src":"45292:93:69"},"nativeSrc":"45292:93:69","nodeType":"YulExpressionStatement","src":"45292:93:69"},{"nativeSrc":"45394:19:69","nodeType":"YulAssignment","src":"45394:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"45405:3:69","nodeType":"YulIdentifier","src":"45405:3:69"},{"kind":"number","nativeSrc":"45410:2:69","nodeType":"YulLiteral","src":"45410:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"45401:3:69","nodeType":"YulIdentifier","src":"45401:3:69"},"nativeSrc":"45401:12:69","nodeType":"YulFunctionCall","src":"45401:12:69"},"variableNames":[{"name":"end","nativeSrc":"45394:3:69","nodeType":"YulIdentifier","src":"45394:3:69"}]}]},"name":"abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack","nativeSrc":"45053:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"45187:3:69","nodeType":"YulTypedName","src":"45187:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"45195:3:69","nodeType":"YulTypedName","src":"45195:3:69","type":""}],"src":"45053:366:69"},{"body":{"nativeSrc":"45596:248:69","nodeType":"YulBlock","src":"45596:248:69","statements":[{"nativeSrc":"45606:26:69","nodeType":"YulAssignment","src":"45606:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"45618:9:69","nodeType":"YulIdentifier","src":"45618:9:69"},{"kind":"number","nativeSrc":"45629:2:69","nodeType":"YulLiteral","src":"45629:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"45614:3:69","nodeType":"YulIdentifier","src":"45614:3:69"},"nativeSrc":"45614:18:69","nodeType":"YulFunctionCall","src":"45614:18:69"},"variableNames":[{"name":"tail","nativeSrc":"45606:4:69","nodeType":"YulIdentifier","src":"45606:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"45653:9:69","nodeType":"YulIdentifier","src":"45653:9:69"},{"kind":"number","nativeSrc":"45664:1:69","nodeType":"YulLiteral","src":"45664:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"45649:3:69","nodeType":"YulIdentifier","src":"45649:3:69"},"nativeSrc":"45649:17:69","nodeType":"YulFunctionCall","src":"45649:17:69"},{"arguments":[{"name":"tail","nativeSrc":"45672:4:69","nodeType":"YulIdentifier","src":"45672:4:69"},{"name":"headStart","nativeSrc":"45678:9:69","nodeType":"YulIdentifier","src":"45678:9:69"}],"functionName":{"name":"sub","nativeSrc":"45668:3:69","nodeType":"YulIdentifier","src":"45668:3:69"},"nativeSrc":"45668:20:69","nodeType":"YulFunctionCall","src":"45668:20:69"}],"functionName":{"name":"mstore","nativeSrc":"45642:6:69","nodeType":"YulIdentifier","src":"45642:6:69"},"nativeSrc":"45642:47:69","nodeType":"YulFunctionCall","src":"45642:47:69"},"nativeSrc":"45642:47:69","nodeType":"YulExpressionStatement","src":"45642:47:69"},{"nativeSrc":"45698:139:69","nodeType":"YulAssignment","src":"45698:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"45832:4:69","nodeType":"YulIdentifier","src":"45832:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack","nativeSrc":"45706:124:69","nodeType":"YulIdentifier","src":"45706:124:69"},"nativeSrc":"45706:131:69","nodeType":"YulFunctionCall","src":"45706:131:69"},"variableNames":[{"name":"tail","nativeSrc":"45698:4:69","nodeType":"YulIdentifier","src":"45698:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"45425:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"45576:9:69","nodeType":"YulTypedName","src":"45576:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"45591:4:69","nodeType":"YulTypedName","src":"45591:4:69","type":""}],"src":"45425:419:69"},{"body":{"nativeSrc":"45956:115:69","nodeType":"YulBlock","src":"45956:115:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"45978:6:69","nodeType":"YulIdentifier","src":"45978:6:69"},{"kind":"number","nativeSrc":"45986:1:69","nodeType":"YulLiteral","src":"45986:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"45974:3:69","nodeType":"YulIdentifier","src":"45974:3:69"},"nativeSrc":"45974:14:69","nodeType":"YulFunctionCall","src":"45974:14:69"},{"hexValue":"436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d","kind":"string","nativeSrc":"45990:34:69","nodeType":"YulLiteral","src":"45990:34:69","type":"","value":"Comptroller: Invalid maxLoopsLim"}],"functionName":{"name":"mstore","nativeSrc":"45967:6:69","nodeType":"YulIdentifier","src":"45967:6:69"},"nativeSrc":"45967:58:69","nodeType":"YulFunctionCall","src":"45967:58:69"},"nativeSrc":"45967:58:69","nodeType":"YulExpressionStatement","src":"45967:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"46046:6:69","nodeType":"YulIdentifier","src":"46046:6:69"},{"kind":"number","nativeSrc":"46054:2:69","nodeType":"YulLiteral","src":"46054:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"46042:3:69","nodeType":"YulIdentifier","src":"46042:3:69"},"nativeSrc":"46042:15:69","nodeType":"YulFunctionCall","src":"46042:15:69"},{"hexValue":"6974","kind":"string","nativeSrc":"46059:4:69","nodeType":"YulLiteral","src":"46059:4:69","type":"","value":"it"}],"functionName":{"name":"mstore","nativeSrc":"46035:6:69","nodeType":"YulIdentifier","src":"46035:6:69"},"nativeSrc":"46035:29:69","nodeType":"YulFunctionCall","src":"46035:29:69"},"nativeSrc":"46035:29:69","nodeType":"YulExpressionStatement","src":"46035:29:69"}]},"name":"store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032","nativeSrc":"45850:221:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"45948:6:69","nodeType":"YulTypedName","src":"45948:6:69","type":""}],"src":"45850:221:69"},{"body":{"nativeSrc":"46223:220:69","nodeType":"YulBlock","src":"46223:220:69","statements":[{"nativeSrc":"46233:74:69","nodeType":"YulAssignment","src":"46233:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"46299:3:69","nodeType":"YulIdentifier","src":"46299:3:69"},{"kind":"number","nativeSrc":"46304:2:69","nodeType":"YulLiteral","src":"46304:2:69","type":"","value":"34"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"46240:58:69","nodeType":"YulIdentifier","src":"46240:58:69"},"nativeSrc":"46240:67:69","nodeType":"YulFunctionCall","src":"46240:67:69"},"variableNames":[{"name":"pos","nativeSrc":"46233:3:69","nodeType":"YulIdentifier","src":"46233:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"46405:3:69","nodeType":"YulIdentifier","src":"46405:3:69"}],"functionName":{"name":"store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032","nativeSrc":"46316:88:69","nodeType":"YulIdentifier","src":"46316:88:69"},"nativeSrc":"46316:93:69","nodeType":"YulFunctionCall","src":"46316:93:69"},"nativeSrc":"46316:93:69","nodeType":"YulExpressionStatement","src":"46316:93:69"},{"nativeSrc":"46418:19:69","nodeType":"YulAssignment","src":"46418:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"46429:3:69","nodeType":"YulIdentifier","src":"46429:3:69"},{"kind":"number","nativeSrc":"46434:2:69","nodeType":"YulLiteral","src":"46434:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"46425:3:69","nodeType":"YulIdentifier","src":"46425:3:69"},"nativeSrc":"46425:12:69","nodeType":"YulFunctionCall","src":"46425:12:69"},"variableNames":[{"name":"end","nativeSrc":"46418:3:69","nodeType":"YulIdentifier","src":"46418:3:69"}]}]},"name":"abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack","nativeSrc":"46077:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"46211:3:69","nodeType":"YulTypedName","src":"46211:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"46219:3:69","nodeType":"YulTypedName","src":"46219:3:69","type":""}],"src":"46077:366:69"},{"body":{"nativeSrc":"46620:248:69","nodeType":"YulBlock","src":"46620:248:69","statements":[{"nativeSrc":"46630:26:69","nodeType":"YulAssignment","src":"46630:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"46642:9:69","nodeType":"YulIdentifier","src":"46642:9:69"},{"kind":"number","nativeSrc":"46653:2:69","nodeType":"YulLiteral","src":"46653:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"46638:3:69","nodeType":"YulIdentifier","src":"46638:3:69"},"nativeSrc":"46638:18:69","nodeType":"YulFunctionCall","src":"46638:18:69"},"variableNames":[{"name":"tail","nativeSrc":"46630:4:69","nodeType":"YulIdentifier","src":"46630:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"46677:9:69","nodeType":"YulIdentifier","src":"46677:9:69"},{"kind":"number","nativeSrc":"46688:1:69","nodeType":"YulLiteral","src":"46688:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"46673:3:69","nodeType":"YulIdentifier","src":"46673:3:69"},"nativeSrc":"46673:17:69","nodeType":"YulFunctionCall","src":"46673:17:69"},{"arguments":[{"name":"tail","nativeSrc":"46696:4:69","nodeType":"YulIdentifier","src":"46696:4:69"},{"name":"headStart","nativeSrc":"46702:9:69","nodeType":"YulIdentifier","src":"46702:9:69"}],"functionName":{"name":"sub","nativeSrc":"46692:3:69","nodeType":"YulIdentifier","src":"46692:3:69"},"nativeSrc":"46692:20:69","nodeType":"YulFunctionCall","src":"46692:20:69"}],"functionName":{"name":"mstore","nativeSrc":"46666:6:69","nodeType":"YulIdentifier","src":"46666:6:69"},"nativeSrc":"46666:47:69","nodeType":"YulFunctionCall","src":"46666:47:69"},"nativeSrc":"46666:47:69","nodeType":"YulExpressionStatement","src":"46666:47:69"},{"nativeSrc":"46722:139:69","nodeType":"YulAssignment","src":"46722:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"46856:4:69","nodeType":"YulIdentifier","src":"46856:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack","nativeSrc":"46730:124:69","nodeType":"YulIdentifier","src":"46730:124:69"},"nativeSrc":"46730:131:69","nodeType":"YulFunctionCall","src":"46730:131:69"},"variableNames":[{"name":"tail","nativeSrc":"46722:4:69","nodeType":"YulIdentifier","src":"46722:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"46449:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"46600:9:69","nodeType":"YulTypedName","src":"46600:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"46615:4:69","nodeType":"YulTypedName","src":"46615:4:69","type":""}],"src":"46449:419:69"},{"body":{"nativeSrc":"46980:75:69","nodeType":"YulBlock","src":"46980:75:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"47002:6:69","nodeType":"YulIdentifier","src":"47002:6:69"},{"kind":"number","nativeSrc":"47010:1:69","nodeType":"YulLiteral","src":"47010:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"46998:3:69","nodeType":"YulIdentifier","src":"46998:3:69"},"nativeSrc":"46998:14:69","nodeType":"YulFunctionCall","src":"46998:14:69"},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","kind":"string","nativeSrc":"47014:33:69","nodeType":"YulLiteral","src":"47014:33:69","type":"","value":"ReentrancyGuard: reentrant call"}],"functionName":{"name":"mstore","nativeSrc":"46991:6:69","nodeType":"YulIdentifier","src":"46991:6:69"},"nativeSrc":"46991:57:69","nodeType":"YulFunctionCall","src":"46991:57:69"},"nativeSrc":"46991:57:69","nodeType":"YulExpressionStatement","src":"46991:57:69"}]},"name":"store_literal_in_memory_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619","nativeSrc":"46874:181:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"46972:6:69","nodeType":"YulTypedName","src":"46972:6:69","type":""}],"src":"46874:181:69"},{"body":{"nativeSrc":"47207:220:69","nodeType":"YulBlock","src":"47207:220:69","statements":[{"nativeSrc":"47217:74:69","nodeType":"YulAssignment","src":"47217:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"47283:3:69","nodeType":"YulIdentifier","src":"47283:3:69"},{"kind":"number","nativeSrc":"47288:2:69","nodeType":"YulLiteral","src":"47288:2:69","type":"","value":"31"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"47224:58:69","nodeType":"YulIdentifier","src":"47224:58:69"},"nativeSrc":"47224:67:69","nodeType":"YulFunctionCall","src":"47224:67:69"},"variableNames":[{"name":"pos","nativeSrc":"47217:3:69","nodeType":"YulIdentifier","src":"47217:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"47389:3:69","nodeType":"YulIdentifier","src":"47389:3:69"}],"functionName":{"name":"store_literal_in_memory_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619","nativeSrc":"47300:88:69","nodeType":"YulIdentifier","src":"47300:88:69"},"nativeSrc":"47300:93:69","nodeType":"YulFunctionCall","src":"47300:93:69"},"nativeSrc":"47300:93:69","nodeType":"YulExpressionStatement","src":"47300:93:69"},{"nativeSrc":"47402:19:69","nodeType":"YulAssignment","src":"47402:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"47413:3:69","nodeType":"YulIdentifier","src":"47413:3:69"},{"kind":"number","nativeSrc":"47418:2:69","nodeType":"YulLiteral","src":"47418:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"47409:3:69","nodeType":"YulIdentifier","src":"47409:3:69"},"nativeSrc":"47409:12:69","nodeType":"YulFunctionCall","src":"47409:12:69"},"variableNames":[{"name":"end","nativeSrc":"47402:3:69","nodeType":"YulIdentifier","src":"47402:3:69"}]}]},"name":"abi_encode_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619_to_t_string_memory_ptr_fromStack","nativeSrc":"47061:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"47195:3:69","nodeType":"YulTypedName","src":"47195:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"47203:3:69","nodeType":"YulTypedName","src":"47203:3:69","type":""}],"src":"47061:366:69"},{"body":{"nativeSrc":"47604:248:69","nodeType":"YulBlock","src":"47604:248:69","statements":[{"nativeSrc":"47614:26:69","nodeType":"YulAssignment","src":"47614:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"47626:9:69","nodeType":"YulIdentifier","src":"47626:9:69"},{"kind":"number","nativeSrc":"47637:2:69","nodeType":"YulLiteral","src":"47637:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"47622:3:69","nodeType":"YulIdentifier","src":"47622:3:69"},"nativeSrc":"47622:18:69","nodeType":"YulFunctionCall","src":"47622:18:69"},"variableNames":[{"name":"tail","nativeSrc":"47614:4:69","nodeType":"YulIdentifier","src":"47614:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"47661:9:69","nodeType":"YulIdentifier","src":"47661:9:69"},{"kind":"number","nativeSrc":"47672:1:69","nodeType":"YulLiteral","src":"47672:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"47657:3:69","nodeType":"YulIdentifier","src":"47657:3:69"},"nativeSrc":"47657:17:69","nodeType":"YulFunctionCall","src":"47657:17:69"},{"arguments":[{"name":"tail","nativeSrc":"47680:4:69","nodeType":"YulIdentifier","src":"47680:4:69"},{"name":"headStart","nativeSrc":"47686:9:69","nodeType":"YulIdentifier","src":"47686:9:69"}],"functionName":{"name":"sub","nativeSrc":"47676:3:69","nodeType":"YulIdentifier","src":"47676:3:69"},"nativeSrc":"47676:20:69","nodeType":"YulFunctionCall","src":"47676:20:69"}],"functionName":{"name":"mstore","nativeSrc":"47650:6:69","nodeType":"YulIdentifier","src":"47650:6:69"},"nativeSrc":"47650:47:69","nodeType":"YulFunctionCall","src":"47650:47:69"},"nativeSrc":"47650:47:69","nodeType":"YulExpressionStatement","src":"47650:47:69"},{"nativeSrc":"47706:139:69","nodeType":"YulAssignment","src":"47706:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"47840:4:69","nodeType":"YulIdentifier","src":"47840:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619_to_t_string_memory_ptr_fromStack","nativeSrc":"47714:124:69","nodeType":"YulIdentifier","src":"47714:124:69"},"nativeSrc":"47714:131:69","nodeType":"YulFunctionCall","src":"47714:131:69"},"variableNames":[{"name":"tail","nativeSrc":"47706:4:69","nodeType":"YulIdentifier","src":"47706:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"47433:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"47584:9:69","nodeType":"YulTypedName","src":"47584:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"47599:4:69","nodeType":"YulTypedName","src":"47599:4:69","type":""}],"src":"47433:419:69"},{"body":{"nativeSrc":"47964:71:69","nodeType":"YulBlock","src":"47964:71:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"47986:6:69","nodeType":"YulIdentifier","src":"47986:6:69"},{"kind":"number","nativeSrc":"47994:1:69","nodeType":"YulLiteral","src":"47994:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"47982:3:69","nodeType":"YulIdentifier","src":"47982:3:69"},"nativeSrc":"47982:14:69","nodeType":"YulFunctionCall","src":"47982:14:69"},{"hexValue":"76546f6b656e735265636569766564206174205f6465706f736974","kind":"string","nativeSrc":"47998:29:69","nodeType":"YulLiteral","src":"47998:29:69","type":"","value":"vTokensReceived at _deposit"}],"functionName":{"name":"mstore","nativeSrc":"47975:6:69","nodeType":"YulIdentifier","src":"47975:6:69"},"nativeSrc":"47975:53:69","nodeType":"YulFunctionCall","src":"47975:53:69"},"nativeSrc":"47975:53:69","nodeType":"YulExpressionStatement","src":"47975:53:69"}]},"name":"store_literal_in_memory_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137","nativeSrc":"47858:177:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"47956:6:69","nodeType":"YulTypedName","src":"47956:6:69","type":""}],"src":"47858:177:69"},{"body":{"nativeSrc":"48187:220:69","nodeType":"YulBlock","src":"48187:220:69","statements":[{"nativeSrc":"48197:74:69","nodeType":"YulAssignment","src":"48197:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"48263:3:69","nodeType":"YulIdentifier","src":"48263:3:69"},{"kind":"number","nativeSrc":"48268:2:69","nodeType":"YulLiteral","src":"48268:2:69","type":"","value":"27"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"48204:58:69","nodeType":"YulIdentifier","src":"48204:58:69"},"nativeSrc":"48204:67:69","nodeType":"YulFunctionCall","src":"48204:67:69"},"variableNames":[{"name":"pos","nativeSrc":"48197:3:69","nodeType":"YulIdentifier","src":"48197:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"48369:3:69","nodeType":"YulIdentifier","src":"48369:3:69"}],"functionName":{"name":"store_literal_in_memory_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137","nativeSrc":"48280:88:69","nodeType":"YulIdentifier","src":"48280:88:69"},"nativeSrc":"48280:93:69","nodeType":"YulFunctionCall","src":"48280:93:69"},"nativeSrc":"48280:93:69","nodeType":"YulExpressionStatement","src":"48280:93:69"},{"nativeSrc":"48382:19:69","nodeType":"YulAssignment","src":"48382:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"48393:3:69","nodeType":"YulIdentifier","src":"48393:3:69"},{"kind":"number","nativeSrc":"48398:2:69","nodeType":"YulLiteral","src":"48398:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"48389:3:69","nodeType":"YulIdentifier","src":"48389:3:69"},"nativeSrc":"48389:12:69","nodeType":"YulFunctionCall","src":"48389:12:69"},"variableNames":[{"name":"end","nativeSrc":"48382:3:69","nodeType":"YulIdentifier","src":"48382:3:69"}]}]},"name":"abi_encode_t_stringliteral_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137_to_t_string_memory_ptr_fromStack","nativeSrc":"48041:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"48175:3:69","nodeType":"YulTypedName","src":"48175:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"48183:3:69","nodeType":"YulTypedName","src":"48183:3:69","type":""}],"src":"48041:366:69"},{"body":{"nativeSrc":"48584:248:69","nodeType":"YulBlock","src":"48584:248:69","statements":[{"nativeSrc":"48594:26:69","nodeType":"YulAssignment","src":"48594:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"48606:9:69","nodeType":"YulIdentifier","src":"48606:9:69"},{"kind":"number","nativeSrc":"48617:2:69","nodeType":"YulLiteral","src":"48617:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"48602:3:69","nodeType":"YulIdentifier","src":"48602:3:69"},"nativeSrc":"48602:18:69","nodeType":"YulFunctionCall","src":"48602:18:69"},"variableNames":[{"name":"tail","nativeSrc":"48594:4:69","nodeType":"YulIdentifier","src":"48594:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"48641:9:69","nodeType":"YulIdentifier","src":"48641:9:69"},{"kind":"number","nativeSrc":"48652:1:69","nodeType":"YulLiteral","src":"48652:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"48637:3:69","nodeType":"YulIdentifier","src":"48637:3:69"},"nativeSrc":"48637:17:69","nodeType":"YulFunctionCall","src":"48637:17:69"},{"arguments":[{"name":"tail","nativeSrc":"48660:4:69","nodeType":"YulIdentifier","src":"48660:4:69"},{"name":"headStart","nativeSrc":"48666:9:69","nodeType":"YulIdentifier","src":"48666:9:69"}],"functionName":{"name":"sub","nativeSrc":"48656:3:69","nodeType":"YulIdentifier","src":"48656:3:69"},"nativeSrc":"48656:20:69","nodeType":"YulFunctionCall","src":"48656:20:69"}],"functionName":{"name":"mstore","nativeSrc":"48630:6:69","nodeType":"YulIdentifier","src":"48630:6:69"},"nativeSrc":"48630:47:69","nodeType":"YulFunctionCall","src":"48630:47:69"},"nativeSrc":"48630:47:69","nodeType":"YulExpressionStatement","src":"48630:47:69"},{"nativeSrc":"48686:139:69","nodeType":"YulAssignment","src":"48686:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"48820:4:69","nodeType":"YulIdentifier","src":"48820:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137_to_t_string_memory_ptr_fromStack","nativeSrc":"48694:124:69","nodeType":"YulIdentifier","src":"48694:124:69"},"nativeSrc":"48694:131:69","nodeType":"YulFunctionCall","src":"48694:131:69"},"variableNames":[{"name":"tail","nativeSrc":"48686:4:69","nodeType":"YulIdentifier","src":"48686:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"48413:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"48564:9:69","nodeType":"YulTypedName","src":"48564:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"48579:4:69","nodeType":"YulTypedName","src":"48579:4:69","type":""}],"src":"48413:419:69"},{"body":{"nativeSrc":"48984:277:69","nodeType":"YulBlock","src":"48984:277:69","statements":[{"nativeSrc":"48994:26:69","nodeType":"YulAssignment","src":"48994:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"49006:9:69","nodeType":"YulIdentifier","src":"49006:9:69"},{"kind":"number","nativeSrc":"49017:2:69","nodeType":"YulLiteral","src":"49017:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"49002:3:69","nodeType":"YulIdentifier","src":"49002:3:69"},"nativeSrc":"49002:18:69","nodeType":"YulFunctionCall","src":"49002:18:69"},"variableNames":[{"name":"tail","nativeSrc":"48994:4:69","nodeType":"YulIdentifier","src":"48994:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"49074:6:69","nodeType":"YulIdentifier","src":"49074:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"49087:9:69","nodeType":"YulIdentifier","src":"49087:9:69"},{"kind":"number","nativeSrc":"49098:1:69","nodeType":"YulLiteral","src":"49098:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"49083:3:69","nodeType":"YulIdentifier","src":"49083:3:69"},"nativeSrc":"49083:17:69","nodeType":"YulFunctionCall","src":"49083:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"49030:43:69","nodeType":"YulIdentifier","src":"49030:43:69"},"nativeSrc":"49030:71:69","nodeType":"YulFunctionCall","src":"49030:71:69"},"nativeSrc":"49030:71:69","nodeType":"YulExpressionStatement","src":"49030:71:69"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"49122:9:69","nodeType":"YulIdentifier","src":"49122:9:69"},{"kind":"number","nativeSrc":"49133:2:69","nodeType":"YulLiteral","src":"49133:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"49118:3:69","nodeType":"YulIdentifier","src":"49118:3:69"},"nativeSrc":"49118:18:69","nodeType":"YulFunctionCall","src":"49118:18:69"},{"arguments":[{"name":"tail","nativeSrc":"49142:4:69","nodeType":"YulIdentifier","src":"49142:4:69"},{"name":"headStart","nativeSrc":"49148:9:69","nodeType":"YulIdentifier","src":"49148:9:69"}],"functionName":{"name":"sub","nativeSrc":"49138:3:69","nodeType":"YulIdentifier","src":"49138:3:69"},"nativeSrc":"49138:20:69","nodeType":"YulFunctionCall","src":"49138:20:69"}],"functionName":{"name":"mstore","nativeSrc":"49111:6:69","nodeType":"YulIdentifier","src":"49111:6:69"},"nativeSrc":"49111:48:69","nodeType":"YulFunctionCall","src":"49111:48:69"},"nativeSrc":"49111:48:69","nodeType":"YulExpressionStatement","src":"49111:48:69"},{"nativeSrc":"49168:86:69","nodeType":"YulAssignment","src":"49168:86:69","value":{"arguments":[{"name":"value1","nativeSrc":"49240:6:69","nodeType":"YulIdentifier","src":"49240:6:69"},{"name":"tail","nativeSrc":"49249:4:69","nodeType":"YulIdentifier","src":"49249:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"49176:63:69","nodeType":"YulIdentifier","src":"49176:63:69"},"nativeSrc":"49176:78:69","nodeType":"YulFunctionCall","src":"49176:78:69"},"variableNames":[{"name":"tail","nativeSrc":"49168:4:69","nodeType":"YulIdentifier","src":"49168:4:69"}]}]},"name":"abi_encode_tuple_t_address_t_string_memory_ptr__to_t_address_t_string_memory_ptr__fromStack_reversed","nativeSrc":"48838:423:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"48948:9:69","nodeType":"YulTypedName","src":"48948:9:69","type":""},{"name":"value1","nativeSrc":"48960:6:69","nodeType":"YulTypedName","src":"48960:6:69","type":""},{"name":"value0","nativeSrc":"48968:6:69","nodeType":"YulTypedName","src":"48968:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"48979:4:69","nodeType":"YulTypedName","src":"48979:4:69","type":""}],"src":"48838:423:69"},{"body":{"nativeSrc":"49441:359:69","nodeType":"YulBlock","src":"49441:359:69","statements":[{"nativeSrc":"49451:26:69","nodeType":"YulAssignment","src":"49451:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"49463:9:69","nodeType":"YulIdentifier","src":"49463:9:69"},{"kind":"number","nativeSrc":"49474:2:69","nodeType":"YulLiteral","src":"49474:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"49459:3:69","nodeType":"YulIdentifier","src":"49459:3:69"},"nativeSrc":"49459:18:69","nodeType":"YulFunctionCall","src":"49459:18:69"},"variableNames":[{"name":"tail","nativeSrc":"49451:4:69","nodeType":"YulIdentifier","src":"49451:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"49531:6:69","nodeType":"YulIdentifier","src":"49531:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"49544:9:69","nodeType":"YulIdentifier","src":"49544:9:69"},{"kind":"number","nativeSrc":"49555:1:69","nodeType":"YulLiteral","src":"49555:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"49540:3:69","nodeType":"YulIdentifier","src":"49540:3:69"},"nativeSrc":"49540:17:69","nodeType":"YulFunctionCall","src":"49540:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"49487:43:69","nodeType":"YulIdentifier","src":"49487:43:69"},"nativeSrc":"49487:71:69","nodeType":"YulFunctionCall","src":"49487:71:69"},"nativeSrc":"49487:71:69","nodeType":"YulExpressionStatement","src":"49487:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"49612:6:69","nodeType":"YulIdentifier","src":"49612:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"49625:9:69","nodeType":"YulIdentifier","src":"49625:9:69"},{"kind":"number","nativeSrc":"49636:2:69","nodeType":"YulLiteral","src":"49636:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"49621:3:69","nodeType":"YulIdentifier","src":"49621:3:69"},"nativeSrc":"49621:18:69","nodeType":"YulFunctionCall","src":"49621:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"49568:43:69","nodeType":"YulIdentifier","src":"49568:43:69"},"nativeSrc":"49568:72:69","nodeType":"YulFunctionCall","src":"49568:72:69"},"nativeSrc":"49568:72:69","nodeType":"YulExpressionStatement","src":"49568:72:69"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"49661:9:69","nodeType":"YulIdentifier","src":"49661:9:69"},{"kind":"number","nativeSrc":"49672:2:69","nodeType":"YulLiteral","src":"49672:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"49657:3:69","nodeType":"YulIdentifier","src":"49657:3:69"},"nativeSrc":"49657:18:69","nodeType":"YulFunctionCall","src":"49657:18:69"},{"arguments":[{"name":"tail","nativeSrc":"49681:4:69","nodeType":"YulIdentifier","src":"49681:4:69"},{"name":"headStart","nativeSrc":"49687:9:69","nodeType":"YulIdentifier","src":"49687:9:69"}],"functionName":{"name":"sub","nativeSrc":"49677:3:69","nodeType":"YulIdentifier","src":"49677:3:69"},"nativeSrc":"49677:20:69","nodeType":"YulFunctionCall","src":"49677:20:69"}],"functionName":{"name":"mstore","nativeSrc":"49650:6:69","nodeType":"YulIdentifier","src":"49650:6:69"},"nativeSrc":"49650:48:69","nodeType":"YulFunctionCall","src":"49650:48:69"},"nativeSrc":"49650:48:69","nodeType":"YulExpressionStatement","src":"49650:48:69"},{"nativeSrc":"49707:86:69","nodeType":"YulAssignment","src":"49707:86:69","value":{"arguments":[{"name":"value2","nativeSrc":"49779:6:69","nodeType":"YulIdentifier","src":"49779:6:69"},{"name":"tail","nativeSrc":"49788:4:69","nodeType":"YulIdentifier","src":"49788:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"49715:63:69","nodeType":"YulIdentifier","src":"49715:63:69"},"nativeSrc":"49715:78:69","nodeType":"YulFunctionCall","src":"49715:78:69"},"variableNames":[{"name":"tail","nativeSrc":"49707:4:69","nodeType":"YulIdentifier","src":"49707:4:69"}]}]},"name":"abi_encode_tuple_t_address_t_address_t_string_memory_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed","nativeSrc":"49267:533:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"49397:9:69","nodeType":"YulTypedName","src":"49397:9:69","type":""},{"name":"value2","nativeSrc":"49409:6:69","nodeType":"YulTypedName","src":"49409:6:69","type":""},{"name":"value1","nativeSrc":"49417:6:69","nodeType":"YulTypedName","src":"49417:6:69","type":""},{"name":"value0","nativeSrc":"49425:6:69","nodeType":"YulTypedName","src":"49425:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"49436:4:69","nodeType":"YulTypedName","src":"49436:4:69","type":""}],"src":"49267:533:69"},{"body":{"nativeSrc":"49912:76:69","nodeType":"YulBlock","src":"49912:76:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"49934:6:69","nodeType":"YulIdentifier","src":"49934:6:69"},{"kind":"number","nativeSrc":"49942:1:69","nodeType":"YulLiteral","src":"49942:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"49930:3:69","nodeType":"YulIdentifier","src":"49930:3:69"},"nativeSrc":"49930:14:69","nodeType":"YulFunctionCall","src":"49930:14:69"},{"hexValue":"61637475616c56546f6b656e73206174205f6265666f72655769746864726177","kind":"string","nativeSrc":"49946:34:69","nodeType":"YulLiteral","src":"49946:34:69","type":"","value":"actualVTokens at _beforeWithdraw"}],"functionName":{"name":"mstore","nativeSrc":"49923:6:69","nodeType":"YulIdentifier","src":"49923:6:69"},"nativeSrc":"49923:58:69","nodeType":"YulFunctionCall","src":"49923:58:69"},"nativeSrc":"49923:58:69","nodeType":"YulExpressionStatement","src":"49923:58:69"}]},"name":"store_literal_in_memory_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e","nativeSrc":"49806:182:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"49904:6:69","nodeType":"YulTypedName","src":"49904:6:69","type":""}],"src":"49806:182:69"},{"body":{"nativeSrc":"50140:220:69","nodeType":"YulBlock","src":"50140:220:69","statements":[{"nativeSrc":"50150:74:69","nodeType":"YulAssignment","src":"50150:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"50216:3:69","nodeType":"YulIdentifier","src":"50216:3:69"},{"kind":"number","nativeSrc":"50221:2:69","nodeType":"YulLiteral","src":"50221:2:69","type":"","value":"32"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"50157:58:69","nodeType":"YulIdentifier","src":"50157:58:69"},"nativeSrc":"50157:67:69","nodeType":"YulFunctionCall","src":"50157:67:69"},"variableNames":[{"name":"pos","nativeSrc":"50150:3:69","nodeType":"YulIdentifier","src":"50150:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"50322:3:69","nodeType":"YulIdentifier","src":"50322:3:69"}],"functionName":{"name":"store_literal_in_memory_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e","nativeSrc":"50233:88:69","nodeType":"YulIdentifier","src":"50233:88:69"},"nativeSrc":"50233:93:69","nodeType":"YulFunctionCall","src":"50233:93:69"},"nativeSrc":"50233:93:69","nodeType":"YulExpressionStatement","src":"50233:93:69"},{"nativeSrc":"50335:19:69","nodeType":"YulAssignment","src":"50335:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"50346:3:69","nodeType":"YulIdentifier","src":"50346:3:69"},{"kind":"number","nativeSrc":"50351:2:69","nodeType":"YulLiteral","src":"50351:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"50342:3:69","nodeType":"YulIdentifier","src":"50342:3:69"},"nativeSrc":"50342:12:69","nodeType":"YulFunctionCall","src":"50342:12:69"},"variableNames":[{"name":"end","nativeSrc":"50335:3:69","nodeType":"YulIdentifier","src":"50335:3:69"}]}]},"name":"abi_encode_t_stringliteral_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e_to_t_string_memory_ptr_fromStack","nativeSrc":"49994:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"50128:3:69","nodeType":"YulTypedName","src":"50128:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"50136:3:69","nodeType":"YulTypedName","src":"50136:3:69","type":""}],"src":"49994:366:69"},{"body":{"nativeSrc":"50537:248:69","nodeType":"YulBlock","src":"50537:248:69","statements":[{"nativeSrc":"50547:26:69","nodeType":"YulAssignment","src":"50547:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"50559:9:69","nodeType":"YulIdentifier","src":"50559:9:69"},{"kind":"number","nativeSrc":"50570:2:69","nodeType":"YulLiteral","src":"50570:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"50555:3:69","nodeType":"YulIdentifier","src":"50555:3:69"},"nativeSrc":"50555:18:69","nodeType":"YulFunctionCall","src":"50555:18:69"},"variableNames":[{"name":"tail","nativeSrc":"50547:4:69","nodeType":"YulIdentifier","src":"50547:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"50594:9:69","nodeType":"YulIdentifier","src":"50594:9:69"},{"kind":"number","nativeSrc":"50605:1:69","nodeType":"YulLiteral","src":"50605:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"50590:3:69","nodeType":"YulIdentifier","src":"50590:3:69"},"nativeSrc":"50590:17:69","nodeType":"YulFunctionCall","src":"50590:17:69"},{"arguments":[{"name":"tail","nativeSrc":"50613:4:69","nodeType":"YulIdentifier","src":"50613:4:69"},{"name":"headStart","nativeSrc":"50619:9:69","nodeType":"YulIdentifier","src":"50619:9:69"}],"functionName":{"name":"sub","nativeSrc":"50609:3:69","nodeType":"YulIdentifier","src":"50609:3:69"},"nativeSrc":"50609:20:69","nodeType":"YulFunctionCall","src":"50609:20:69"}],"functionName":{"name":"mstore","nativeSrc":"50583:6:69","nodeType":"YulIdentifier","src":"50583:6:69"},"nativeSrc":"50583:47:69","nodeType":"YulFunctionCall","src":"50583:47:69"},"nativeSrc":"50583:47:69","nodeType":"YulExpressionStatement","src":"50583:47:69"},{"nativeSrc":"50639:139:69","nodeType":"YulAssignment","src":"50639:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"50773:4:69","nodeType":"YulIdentifier","src":"50773:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e_to_t_string_memory_ptr_fromStack","nativeSrc":"50647:124:69","nodeType":"YulIdentifier","src":"50647:124:69"},"nativeSrc":"50647:131:69","nodeType":"YulFunctionCall","src":"50647:131:69"},"variableNames":[{"name":"tail","nativeSrc":"50639:4:69","nodeType":"YulIdentifier","src":"50639:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"50366:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"50517:9:69","nodeType":"YulTypedName","src":"50517:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"50532:4:69","nodeType":"YulTypedName","src":"50532:4:69","type":""}],"src":"50366:419:69"},{"body":{"nativeSrc":"50880:28:69","nodeType":"YulBlock","src":"50880:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"50897:1:69","nodeType":"YulLiteral","src":"50897:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"50900:1:69","nodeType":"YulLiteral","src":"50900:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"50890:6:69","nodeType":"YulIdentifier","src":"50890:6:69"},"nativeSrc":"50890:12:69","nodeType":"YulFunctionCall","src":"50890:12:69"},"nativeSrc":"50890:12:69","nodeType":"YulExpressionStatement","src":"50890:12:69"}]},"name":"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae","nativeSrc":"50791:117:69","nodeType":"YulFunctionDefinition","src":"50791:117:69"},{"body":{"nativeSrc":"50981:241:69","nodeType":"YulBlock","src":"50981:241:69","statements":[{"body":{"nativeSrc":"51086:22:69","nodeType":"YulBlock","src":"51086:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"51088:16:69","nodeType":"YulIdentifier","src":"51088:16:69"},"nativeSrc":"51088:18:69","nodeType":"YulFunctionCall","src":"51088:18:69"},"nativeSrc":"51088:18:69","nodeType":"YulExpressionStatement","src":"51088:18:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"51058:6:69","nodeType":"YulIdentifier","src":"51058:6:69"},{"kind":"number","nativeSrc":"51066:18:69","nodeType":"YulLiteral","src":"51066:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"51055:2:69","nodeType":"YulIdentifier","src":"51055:2:69"},"nativeSrc":"51055:30:69","nodeType":"YulFunctionCall","src":"51055:30:69"},"nativeSrc":"51052:56:69","nodeType":"YulIf","src":"51052:56:69"},{"nativeSrc":"51118:37:69","nodeType":"YulAssignment","src":"51118:37:69","value":{"arguments":[{"name":"length","nativeSrc":"51148:6:69","nodeType":"YulIdentifier","src":"51148:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"51126:21:69","nodeType":"YulIdentifier","src":"51126:21:69"},"nativeSrc":"51126:29:69","nodeType":"YulFunctionCall","src":"51126:29:69"},"variableNames":[{"name":"size","nativeSrc":"51118:4:69","nodeType":"YulIdentifier","src":"51118:4:69"}]},{"nativeSrc":"51192:23:69","nodeType":"YulAssignment","src":"51192:23:69","value":{"arguments":[{"name":"size","nativeSrc":"51204:4:69","nodeType":"YulIdentifier","src":"51204:4:69"},{"kind":"number","nativeSrc":"51210:4:69","nodeType":"YulLiteral","src":"51210:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"51200:3:69","nodeType":"YulIdentifier","src":"51200:3:69"},"nativeSrc":"51200:15:69","nodeType":"YulFunctionCall","src":"51200:15:69"},"variableNames":[{"name":"size","nativeSrc":"51192:4:69","nodeType":"YulIdentifier","src":"51192:4:69"}]}]},"name":"array_allocation_size_t_string_memory_ptr","nativeSrc":"50914:308:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nativeSrc":"50965:6:69","nodeType":"YulTypedName","src":"50965:6:69","type":""}],"returnVariables":[{"name":"size","nativeSrc":"50976:4:69","nodeType":"YulTypedName","src":"50976:4:69","type":""}],"src":"50914:308:69"},{"body":{"nativeSrc":"51323:339:69","nodeType":"YulBlock","src":"51323:339:69","statements":[{"nativeSrc":"51333:75:69","nodeType":"YulAssignment","src":"51333:75:69","value":{"arguments":[{"arguments":[{"name":"length","nativeSrc":"51400:6:69","nodeType":"YulIdentifier","src":"51400:6:69"}],"functionName":{"name":"array_allocation_size_t_string_memory_ptr","nativeSrc":"51358:41:69","nodeType":"YulIdentifier","src":"51358:41:69"},"nativeSrc":"51358:49:69","nodeType":"YulFunctionCall","src":"51358:49:69"}],"functionName":{"name":"allocate_memory","nativeSrc":"51342:15:69","nodeType":"YulIdentifier","src":"51342:15:69"},"nativeSrc":"51342:66:69","nodeType":"YulFunctionCall","src":"51342:66:69"},"variableNames":[{"name":"array","nativeSrc":"51333:5:69","nodeType":"YulIdentifier","src":"51333:5:69"}]},{"expression":{"arguments":[{"name":"array","nativeSrc":"51424:5:69","nodeType":"YulIdentifier","src":"51424:5:69"},{"name":"length","nativeSrc":"51431:6:69","nodeType":"YulIdentifier","src":"51431:6:69"}],"functionName":{"name":"mstore","nativeSrc":"51417:6:69","nodeType":"YulIdentifier","src":"51417:6:69"},"nativeSrc":"51417:21:69","nodeType":"YulFunctionCall","src":"51417:21:69"},"nativeSrc":"51417:21:69","nodeType":"YulExpressionStatement","src":"51417:21:69"},{"nativeSrc":"51447:27:69","nodeType":"YulVariableDeclaration","src":"51447:27:69","value":{"arguments":[{"name":"array","nativeSrc":"51462:5:69","nodeType":"YulIdentifier","src":"51462:5:69"},{"kind":"number","nativeSrc":"51469:4:69","nodeType":"YulLiteral","src":"51469:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"51458:3:69","nodeType":"YulIdentifier","src":"51458:3:69"},"nativeSrc":"51458:16:69","nodeType":"YulFunctionCall","src":"51458:16:69"},"variables":[{"name":"dst","nativeSrc":"51451:3:69","nodeType":"YulTypedName","src":"51451:3:69","type":""}]},{"body":{"nativeSrc":"51512:83:69","nodeType":"YulBlock","src":"51512:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae","nativeSrc":"51514:77:69","nodeType":"YulIdentifier","src":"51514:77:69"},"nativeSrc":"51514:79:69","nodeType":"YulFunctionCall","src":"51514:79:69"},"nativeSrc":"51514:79:69","nodeType":"YulExpressionStatement","src":"51514:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"src","nativeSrc":"51493:3:69","nodeType":"YulIdentifier","src":"51493:3:69"},{"name":"length","nativeSrc":"51498:6:69","nodeType":"YulIdentifier","src":"51498:6:69"}],"functionName":{"name":"add","nativeSrc":"51489:3:69","nodeType":"YulIdentifier","src":"51489:3:69"},"nativeSrc":"51489:16:69","nodeType":"YulFunctionCall","src":"51489:16:69"},{"name":"end","nativeSrc":"51507:3:69","nodeType":"YulIdentifier","src":"51507:3:69"}],"functionName":{"name":"gt","nativeSrc":"51486:2:69","nodeType":"YulIdentifier","src":"51486:2:69"},"nativeSrc":"51486:25:69","nodeType":"YulFunctionCall","src":"51486:25:69"},"nativeSrc":"51483:112:69","nodeType":"YulIf","src":"51483:112:69"},{"expression":{"arguments":[{"name":"src","nativeSrc":"51639:3:69","nodeType":"YulIdentifier","src":"51639:3:69"},{"name":"dst","nativeSrc":"51644:3:69","nodeType":"YulIdentifier","src":"51644:3:69"},{"name":"length","nativeSrc":"51649:6:69","nodeType":"YulIdentifier","src":"51649:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"51604:34:69","nodeType":"YulIdentifier","src":"51604:34:69"},"nativeSrc":"51604:52:69","nodeType":"YulFunctionCall","src":"51604:52:69"},"nativeSrc":"51604:52:69","nodeType":"YulExpressionStatement","src":"51604:52:69"}]},"name":"abi_decode_available_length_t_string_memory_ptr_fromMemory","nativeSrc":"51228:434:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"51296:3:69","nodeType":"YulTypedName","src":"51296:3:69","type":""},{"name":"length","nativeSrc":"51301:6:69","nodeType":"YulTypedName","src":"51301:6:69","type":""},{"name":"end","nativeSrc":"51309:3:69","nodeType":"YulTypedName","src":"51309:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"51317:5:69","nodeType":"YulTypedName","src":"51317:5:69","type":""}],"src":"51228:434:69"},{"body":{"nativeSrc":"51755:282:69","nodeType":"YulBlock","src":"51755:282:69","statements":[{"body":{"nativeSrc":"51804:83:69","nodeType":"YulBlock","src":"51804:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"51806:77:69","nodeType":"YulIdentifier","src":"51806:77:69"},"nativeSrc":"51806:79:69","nodeType":"YulFunctionCall","src":"51806:79:69"},"nativeSrc":"51806:79:69","nodeType":"YulExpressionStatement","src":"51806:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"51783:6:69","nodeType":"YulIdentifier","src":"51783:6:69"},{"kind":"number","nativeSrc":"51791:4:69","nodeType":"YulLiteral","src":"51791:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"51779:3:69","nodeType":"YulIdentifier","src":"51779:3:69"},"nativeSrc":"51779:17:69","nodeType":"YulFunctionCall","src":"51779:17:69"},{"name":"end","nativeSrc":"51798:3:69","nodeType":"YulIdentifier","src":"51798:3:69"}],"functionName":{"name":"slt","nativeSrc":"51775:3:69","nodeType":"YulIdentifier","src":"51775:3:69"},"nativeSrc":"51775:27:69","nodeType":"YulFunctionCall","src":"51775:27:69"}],"functionName":{"name":"iszero","nativeSrc":"51768:6:69","nodeType":"YulIdentifier","src":"51768:6:69"},"nativeSrc":"51768:35:69","nodeType":"YulFunctionCall","src":"51768:35:69"},"nativeSrc":"51765:122:69","nodeType":"YulIf","src":"51765:122:69"},{"nativeSrc":"51896:27:69","nodeType":"YulVariableDeclaration","src":"51896:27:69","value":{"arguments":[{"name":"offset","nativeSrc":"51916:6:69","nodeType":"YulIdentifier","src":"51916:6:69"}],"functionName":{"name":"mload","nativeSrc":"51910:5:69","nodeType":"YulIdentifier","src":"51910:5:69"},"nativeSrc":"51910:13:69","nodeType":"YulFunctionCall","src":"51910:13:69"},"variables":[{"name":"length","nativeSrc":"51900:6:69","nodeType":"YulTypedName","src":"51900:6:69","type":""}]},{"nativeSrc":"51932:99:69","nodeType":"YulAssignment","src":"51932:99:69","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"52004:6:69","nodeType":"YulIdentifier","src":"52004:6:69"},{"kind":"number","nativeSrc":"52012:4:69","nodeType":"YulLiteral","src":"52012:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"52000:3:69","nodeType":"YulIdentifier","src":"52000:3:69"},"nativeSrc":"52000:17:69","nodeType":"YulFunctionCall","src":"52000:17:69"},{"name":"length","nativeSrc":"52019:6:69","nodeType":"YulIdentifier","src":"52019:6:69"},{"name":"end","nativeSrc":"52027:3:69","nodeType":"YulIdentifier","src":"52027:3:69"}],"functionName":{"name":"abi_decode_available_length_t_string_memory_ptr_fromMemory","nativeSrc":"51941:58:69","nodeType":"YulIdentifier","src":"51941:58:69"},"nativeSrc":"51941:90:69","nodeType":"YulFunctionCall","src":"51941:90:69"},"variableNames":[{"name":"array","nativeSrc":"51932:5:69","nodeType":"YulIdentifier","src":"51932:5:69"}]}]},"name":"abi_decode_t_string_memory_ptr_fromMemory","nativeSrc":"51682:355:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"51733:6:69","nodeType":"YulTypedName","src":"51733:6:69","type":""},{"name":"end","nativeSrc":"51741:3:69","nodeType":"YulTypedName","src":"51741:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"51749:5:69","nodeType":"YulTypedName","src":"51749:5:69","type":""}],"src":"51682:355:69"},{"body":{"nativeSrc":"52130:437:69","nodeType":"YulBlock","src":"52130:437:69","statements":[{"body":{"nativeSrc":"52176:83:69","nodeType":"YulBlock","src":"52176:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"52178:77:69","nodeType":"YulIdentifier","src":"52178:77:69"},"nativeSrc":"52178:79:69","nodeType":"YulFunctionCall","src":"52178:79:69"},"nativeSrc":"52178:79:69","nodeType":"YulExpressionStatement","src":"52178:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"52151:7:69","nodeType":"YulIdentifier","src":"52151:7:69"},{"name":"headStart","nativeSrc":"52160:9:69","nodeType":"YulIdentifier","src":"52160:9:69"}],"functionName":{"name":"sub","nativeSrc":"52147:3:69","nodeType":"YulIdentifier","src":"52147:3:69"},"nativeSrc":"52147:23:69","nodeType":"YulFunctionCall","src":"52147:23:69"},{"kind":"number","nativeSrc":"52172:2:69","nodeType":"YulLiteral","src":"52172:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"52143:3:69","nodeType":"YulIdentifier","src":"52143:3:69"},"nativeSrc":"52143:32:69","nodeType":"YulFunctionCall","src":"52143:32:69"},"nativeSrc":"52140:119:69","nodeType":"YulIf","src":"52140:119:69"},{"nativeSrc":"52269:291:69","nodeType":"YulBlock","src":"52269:291:69","statements":[{"nativeSrc":"52284:38:69","nodeType":"YulVariableDeclaration","src":"52284:38:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"52308:9:69","nodeType":"YulIdentifier","src":"52308:9:69"},{"kind":"number","nativeSrc":"52319:1:69","nodeType":"YulLiteral","src":"52319:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"52304:3:69","nodeType":"YulIdentifier","src":"52304:3:69"},"nativeSrc":"52304:17:69","nodeType":"YulFunctionCall","src":"52304:17:69"}],"functionName":{"name":"mload","nativeSrc":"52298:5:69","nodeType":"YulIdentifier","src":"52298:5:69"},"nativeSrc":"52298:24:69","nodeType":"YulFunctionCall","src":"52298:24:69"},"variables":[{"name":"offset","nativeSrc":"52288:6:69","nodeType":"YulTypedName","src":"52288:6:69","type":""}]},{"body":{"nativeSrc":"52369:83:69","nodeType":"YulBlock","src":"52369:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"52371:77:69","nodeType":"YulIdentifier","src":"52371:77:69"},"nativeSrc":"52371:79:69","nodeType":"YulFunctionCall","src":"52371:79:69"},"nativeSrc":"52371:79:69","nodeType":"YulExpressionStatement","src":"52371:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"52341:6:69","nodeType":"YulIdentifier","src":"52341:6:69"},{"kind":"number","nativeSrc":"52349:18:69","nodeType":"YulLiteral","src":"52349:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"52338:2:69","nodeType":"YulIdentifier","src":"52338:2:69"},"nativeSrc":"52338:30:69","nodeType":"YulFunctionCall","src":"52338:30:69"},"nativeSrc":"52335:117:69","nodeType":"YulIf","src":"52335:117:69"},{"nativeSrc":"52466:84:69","nodeType":"YulAssignment","src":"52466:84:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"52522:9:69","nodeType":"YulIdentifier","src":"52522:9:69"},{"name":"offset","nativeSrc":"52533:6:69","nodeType":"YulIdentifier","src":"52533:6:69"}],"functionName":{"name":"add","nativeSrc":"52518:3:69","nodeType":"YulIdentifier","src":"52518:3:69"},"nativeSrc":"52518:22:69","nodeType":"YulFunctionCall","src":"52518:22:69"},{"name":"dataEnd","nativeSrc":"52542:7:69","nodeType":"YulIdentifier","src":"52542:7:69"}],"functionName":{"name":"abi_decode_t_string_memory_ptr_fromMemory","nativeSrc":"52476:41:69","nodeType":"YulIdentifier","src":"52476:41:69"},"nativeSrc":"52476:74:69","nodeType":"YulFunctionCall","src":"52476:74:69"},"variableNames":[{"name":"value0","nativeSrc":"52466:6:69","nodeType":"YulIdentifier","src":"52466:6:69"}]}]}]},"name":"abi_decode_tuple_t_string_memory_ptr_fromMemory","nativeSrc":"52043:524:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"52100:9:69","nodeType":"YulTypedName","src":"52100:9:69","type":""},{"name":"dataEnd","nativeSrc":"52111:7:69","nodeType":"YulTypedName","src":"52111:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"52123:6:69","nodeType":"YulTypedName","src":"52123:6:69","type":""}],"src":"52043:524:69"},{"body":{"nativeSrc":"52687:34:69","nodeType":"YulBlock","src":"52687:34:69","statements":[{"nativeSrc":"52697:18:69","nodeType":"YulAssignment","src":"52697:18:69","value":{"name":"pos","nativeSrc":"52712:3:69","nodeType":"YulIdentifier","src":"52712:3:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"52697:11:69","nodeType":"YulIdentifier","src":"52697:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"52573:148:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"52659:3:69","nodeType":"YulTypedName","src":"52659:3:69","type":""},{"name":"length","nativeSrc":"52664:6:69","nodeType":"YulTypedName","src":"52664:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"52675:11:69","nodeType":"YulTypedName","src":"52675:11:69","type":""}],"src":"52573:148:69"},{"body":{"nativeSrc":"52833:66:69","nodeType":"YulBlock","src":"52833:66:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"52855:6:69","nodeType":"YulIdentifier","src":"52855:6:69"},{"kind":"number","nativeSrc":"52863:1:69","nodeType":"YulLiteral","src":"52863:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"52851:3:69","nodeType":"YulIdentifier","src":"52851:3:69"},"nativeSrc":"52851:14:69","nodeType":"YulFunctionCall","src":"52851:14:69"},{"hexValue":"455243343632362d577261707065642056656e757320","kind":"string","nativeSrc":"52867:24:69","nodeType":"YulLiteral","src":"52867:24:69","type":"","value":"ERC4626-Wrapped Venus "}],"functionName":{"name":"mstore","nativeSrc":"52844:6:69","nodeType":"YulIdentifier","src":"52844:6:69"},"nativeSrc":"52844:48:69","nodeType":"YulFunctionCall","src":"52844:48:69"},"nativeSrc":"52844:48:69","nodeType":"YulExpressionStatement","src":"52844:48:69"}]},"name":"store_literal_in_memory_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f","nativeSrc":"52727:172:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"52825:6:69","nodeType":"YulTypedName","src":"52825:6:69","type":""}],"src":"52727:172:69"},{"body":{"nativeSrc":"53069:238:69","nodeType":"YulBlock","src":"53069:238:69","statements":[{"nativeSrc":"53079:92:69","nodeType":"YulAssignment","src":"53079:92:69","value":{"arguments":[{"name":"pos","nativeSrc":"53163:3:69","nodeType":"YulIdentifier","src":"53163:3:69"},{"kind":"number","nativeSrc":"53168:2:69","nodeType":"YulLiteral","src":"53168:2:69","type":"","value":"22"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"53086:76:69","nodeType":"YulIdentifier","src":"53086:76:69"},"nativeSrc":"53086:85:69","nodeType":"YulFunctionCall","src":"53086:85:69"},"variableNames":[{"name":"pos","nativeSrc":"53079:3:69","nodeType":"YulIdentifier","src":"53079:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"53269:3:69","nodeType":"YulIdentifier","src":"53269:3:69"}],"functionName":{"name":"store_literal_in_memory_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f","nativeSrc":"53180:88:69","nodeType":"YulIdentifier","src":"53180:88:69"},"nativeSrc":"53180:93:69","nodeType":"YulFunctionCall","src":"53180:93:69"},"nativeSrc":"53180:93:69","nodeType":"YulExpressionStatement","src":"53180:93:69"},{"nativeSrc":"53282:19:69","nodeType":"YulAssignment","src":"53282:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"53293:3:69","nodeType":"YulIdentifier","src":"53293:3:69"},{"kind":"number","nativeSrc":"53298:2:69","nodeType":"YulLiteral","src":"53298:2:69","type":"","value":"22"}],"functionName":{"name":"add","nativeSrc":"53289:3:69","nodeType":"YulIdentifier","src":"53289:3:69"},"nativeSrc":"53289:12:69","nodeType":"YulFunctionCall","src":"53289:12:69"},"variableNames":[{"name":"end","nativeSrc":"53282:3:69","nodeType":"YulIdentifier","src":"53282:3:69"}]}]},"name":"abi_encode_t_stringliteral_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f_to_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"52905:402:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"53057:3:69","nodeType":"YulTypedName","src":"53057:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"53065:3:69","nodeType":"YulTypedName","src":"53065:3:69","type":""}],"src":"52905:402:69"},{"body":{"nativeSrc":"53423:280:69","nodeType":"YulBlock","src":"53423:280:69","statements":[{"nativeSrc":"53433:53:69","nodeType":"YulVariableDeclaration","src":"53433:53:69","value":{"arguments":[{"name":"value","nativeSrc":"53480:5:69","nodeType":"YulIdentifier","src":"53480:5:69"}],"functionName":{"name":"array_length_t_string_memory_ptr","nativeSrc":"53447:32:69","nodeType":"YulIdentifier","src":"53447:32:69"},"nativeSrc":"53447:39:69","nodeType":"YulFunctionCall","src":"53447:39:69"},"variables":[{"name":"length","nativeSrc":"53437:6:69","nodeType":"YulTypedName","src":"53437:6:69","type":""}]},{"nativeSrc":"53495:96:69","nodeType":"YulAssignment","src":"53495:96:69","value":{"arguments":[{"name":"pos","nativeSrc":"53579:3:69","nodeType":"YulIdentifier","src":"53579:3:69"},{"name":"length","nativeSrc":"53584:6:69","nodeType":"YulIdentifier","src":"53584:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"53502:76:69","nodeType":"YulIdentifier","src":"53502:76:69"},"nativeSrc":"53502:89:69","nodeType":"YulFunctionCall","src":"53502:89:69"},"variableNames":[{"name":"pos","nativeSrc":"53495:3:69","nodeType":"YulIdentifier","src":"53495:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"53639:5:69","nodeType":"YulIdentifier","src":"53639:5:69"},{"kind":"number","nativeSrc":"53646:4:69","nodeType":"YulLiteral","src":"53646:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"53635:3:69","nodeType":"YulIdentifier","src":"53635:3:69"},"nativeSrc":"53635:16:69","nodeType":"YulFunctionCall","src":"53635:16:69"},{"name":"pos","nativeSrc":"53653:3:69","nodeType":"YulIdentifier","src":"53653:3:69"},{"name":"length","nativeSrc":"53658:6:69","nodeType":"YulIdentifier","src":"53658:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"53600:34:69","nodeType":"YulIdentifier","src":"53600:34:69"},"nativeSrc":"53600:65:69","nodeType":"YulFunctionCall","src":"53600:65:69"},"nativeSrc":"53600:65:69","nodeType":"YulExpressionStatement","src":"53600:65:69"},{"nativeSrc":"53674:23:69","nodeType":"YulAssignment","src":"53674:23:69","value":{"arguments":[{"name":"pos","nativeSrc":"53685:3:69","nodeType":"YulIdentifier","src":"53685:3:69"},{"name":"length","nativeSrc":"53690:6:69","nodeType":"YulIdentifier","src":"53690:6:69"}],"functionName":{"name":"add","nativeSrc":"53681:3:69","nodeType":"YulIdentifier","src":"53681:3:69"},"nativeSrc":"53681:16:69","nodeType":"YulFunctionCall","src":"53681:16:69"},"variableNames":[{"name":"end","nativeSrc":"53674:3:69","nodeType":"YulIdentifier","src":"53674:3:69"}]}]},"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"53313:390:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"53404:5:69","nodeType":"YulTypedName","src":"53404:5:69","type":""},{"name":"pos","nativeSrc":"53411:3:69","nodeType":"YulTypedName","src":"53411:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"53419:3:69","nodeType":"YulTypedName","src":"53419:3:69","type":""}],"src":"53313:390:69"},{"body":{"nativeSrc":"53946:304:69","nodeType":"YulBlock","src":"53946:304:69","statements":[{"nativeSrc":"53957:155:69","nodeType":"YulAssignment","src":"53957:155:69","value":{"arguments":[{"name":"pos","nativeSrc":"54108:3:69","nodeType":"YulIdentifier","src":"54108:3:69"}],"functionName":{"name":"abi_encode_t_stringliteral_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f_to_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"53964:142:69","nodeType":"YulIdentifier","src":"53964:142:69"},"nativeSrc":"53964:148:69","nodeType":"YulFunctionCall","src":"53964:148:69"},"variableNames":[{"name":"pos","nativeSrc":"53957:3:69","nodeType":"YulIdentifier","src":"53957:3:69"}]},{"nativeSrc":"54122:102:69","nodeType":"YulAssignment","src":"54122:102:69","value":{"arguments":[{"name":"value0","nativeSrc":"54211:6:69","nodeType":"YulIdentifier","src":"54211:6:69"},{"name":"pos","nativeSrc":"54220:3:69","nodeType":"YulIdentifier","src":"54220:3:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"54129:81:69","nodeType":"YulIdentifier","src":"54129:81:69"},"nativeSrc":"54129:95:69","nodeType":"YulFunctionCall","src":"54129:95:69"},"variableNames":[{"name":"pos","nativeSrc":"54122:3:69","nodeType":"YulIdentifier","src":"54122:3:69"}]},{"nativeSrc":"54234:10:69","nodeType":"YulAssignment","src":"54234:10:69","value":{"name":"pos","nativeSrc":"54241:3:69","nodeType":"YulIdentifier","src":"54241:3:69"},"variableNames":[{"name":"end","nativeSrc":"54234:3:69","nodeType":"YulIdentifier","src":"54234:3:69"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed","nativeSrc":"53709:541:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"53925:3:69","nodeType":"YulTypedName","src":"53925:3:69","type":""},{"name":"value0","nativeSrc":"53931:6:69","nodeType":"YulTypedName","src":"53931:6:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"53942:3:69","nodeType":"YulTypedName","src":"53942:3:69","type":""}],"src":"53709:541:69"},{"body":{"nativeSrc":"54362:49:69","nodeType":"YulBlock","src":"54362:49:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"54384:6:69","nodeType":"YulIdentifier","src":"54384:6:69"},{"kind":"number","nativeSrc":"54392:1:69","nodeType":"YulLiteral","src":"54392:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"54380:3:69","nodeType":"YulIdentifier","src":"54380:3:69"},"nativeSrc":"54380:14:69","nodeType":"YulFunctionCall","src":"54380:14:69"},{"hexValue":"7634363236","kind":"string","nativeSrc":"54396:7:69","nodeType":"YulLiteral","src":"54396:7:69","type":"","value":"v4626"}],"functionName":{"name":"mstore","nativeSrc":"54373:6:69","nodeType":"YulIdentifier","src":"54373:6:69"},"nativeSrc":"54373:31:69","nodeType":"YulFunctionCall","src":"54373:31:69"},"nativeSrc":"54373:31:69","nodeType":"YulExpressionStatement","src":"54373:31:69"}]},"name":"store_literal_in_memory_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526","nativeSrc":"54256:155:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"54354:6:69","nodeType":"YulTypedName","src":"54354:6:69","type":""}],"src":"54256:155:69"},{"body":{"nativeSrc":"54581:236:69","nodeType":"YulBlock","src":"54581:236:69","statements":[{"nativeSrc":"54591:91:69","nodeType":"YulAssignment","src":"54591:91:69","value":{"arguments":[{"name":"pos","nativeSrc":"54675:3:69","nodeType":"YulIdentifier","src":"54675:3:69"},{"kind":"number","nativeSrc":"54680:1:69","nodeType":"YulLiteral","src":"54680:1:69","type":"","value":"5"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"54598:76:69","nodeType":"YulIdentifier","src":"54598:76:69"},"nativeSrc":"54598:84:69","nodeType":"YulFunctionCall","src":"54598:84:69"},"variableNames":[{"name":"pos","nativeSrc":"54591:3:69","nodeType":"YulIdentifier","src":"54591:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"54780:3:69","nodeType":"YulIdentifier","src":"54780:3:69"}],"functionName":{"name":"store_literal_in_memory_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526","nativeSrc":"54691:88:69","nodeType":"YulIdentifier","src":"54691:88:69"},"nativeSrc":"54691:93:69","nodeType":"YulFunctionCall","src":"54691:93:69"},"nativeSrc":"54691:93:69","nodeType":"YulExpressionStatement","src":"54691:93:69"},{"nativeSrc":"54793:18:69","nodeType":"YulAssignment","src":"54793:18:69","value":{"arguments":[{"name":"pos","nativeSrc":"54804:3:69","nodeType":"YulIdentifier","src":"54804:3:69"},{"kind":"number","nativeSrc":"54809:1:69","nodeType":"YulLiteral","src":"54809:1:69","type":"","value":"5"}],"functionName":{"name":"add","nativeSrc":"54800:3:69","nodeType":"YulIdentifier","src":"54800:3:69"},"nativeSrc":"54800:11:69","nodeType":"YulFunctionCall","src":"54800:11:69"},"variableNames":[{"name":"end","nativeSrc":"54793:3:69","nodeType":"YulIdentifier","src":"54793:3:69"}]}]},"name":"abi_encode_t_stringliteral_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526_to_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"54417:400:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"54569:3:69","nodeType":"YulTypedName","src":"54569:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"54577:3:69","nodeType":"YulTypedName","src":"54577:3:69","type":""}],"src":"54417:400:69"},{"body":{"nativeSrc":"55060:304:69","nodeType":"YulBlock","src":"55060:304:69","statements":[{"nativeSrc":"55071:155:69","nodeType":"YulAssignment","src":"55071:155:69","value":{"arguments":[{"name":"pos","nativeSrc":"55222:3:69","nodeType":"YulIdentifier","src":"55222:3:69"}],"functionName":{"name":"abi_encode_t_stringliteral_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526_to_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"55078:142:69","nodeType":"YulIdentifier","src":"55078:142:69"},"nativeSrc":"55078:148:69","nodeType":"YulFunctionCall","src":"55078:148:69"},"variableNames":[{"name":"pos","nativeSrc":"55071:3:69","nodeType":"YulIdentifier","src":"55071:3:69"}]},{"nativeSrc":"55236:102:69","nodeType":"YulAssignment","src":"55236:102:69","value":{"arguments":[{"name":"value0","nativeSrc":"55325:6:69","nodeType":"YulIdentifier","src":"55325:6:69"},{"name":"pos","nativeSrc":"55334:3:69","nodeType":"YulIdentifier","src":"55334:3:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"55243:81:69","nodeType":"YulIdentifier","src":"55243:81:69"},"nativeSrc":"55243:95:69","nodeType":"YulFunctionCall","src":"55243:95:69"},"variableNames":[{"name":"pos","nativeSrc":"55236:3:69","nodeType":"YulIdentifier","src":"55236:3:69"}]},{"nativeSrc":"55348:10:69","nodeType":"YulAssignment","src":"55348:10:69","value":{"name":"pos","nativeSrc":"55355:3:69","nodeType":"YulIdentifier","src":"55355:3:69"},"variableNames":[{"name":"end","nativeSrc":"55348:3:69","nodeType":"YulIdentifier","src":"55348:3:69"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed","nativeSrc":"54823:541:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"55039:3:69","nodeType":"YulTypedName","src":"55039:3:69","type":""},{"name":"value0","nativeSrc":"55045:6:69","nodeType":"YulTypedName","src":"55045:6:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"55056:3:69","nodeType":"YulTypedName","src":"55056:3:69","type":""}],"src":"54823:541:69"},{"body":{"nativeSrc":"55476:123:69","nodeType":"YulBlock","src":"55476:123:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"55498:6:69","nodeType":"YulIdentifier","src":"55498:6:69"},{"kind":"number","nativeSrc":"55506:1:69","nodeType":"YulLiteral","src":"55506:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"55494:3:69","nodeType":"YulIdentifier","src":"55494:3:69"},"nativeSrc":"55494:14:69","nodeType":"YulFunctionCall","src":"55494:14:69"},{"hexValue":"5361666545524332303a204552433230206f7065726174696f6e20646964206e","kind":"string","nativeSrc":"55510:34:69","nodeType":"YulLiteral","src":"55510:34:69","type":"","value":"SafeERC20: ERC20 operation did n"}],"functionName":{"name":"mstore","nativeSrc":"55487:6:69","nodeType":"YulIdentifier","src":"55487:6:69"},"nativeSrc":"55487:58:69","nodeType":"YulFunctionCall","src":"55487:58:69"},"nativeSrc":"55487:58:69","nodeType":"YulExpressionStatement","src":"55487:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"55566:6:69","nodeType":"YulIdentifier","src":"55566:6:69"},{"kind":"number","nativeSrc":"55574:2:69","nodeType":"YulLiteral","src":"55574:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"55562:3:69","nodeType":"YulIdentifier","src":"55562:3:69"},"nativeSrc":"55562:15:69","nodeType":"YulFunctionCall","src":"55562:15:69"},{"hexValue":"6f742073756363656564","kind":"string","nativeSrc":"55579:12:69","nodeType":"YulLiteral","src":"55579:12:69","type":"","value":"ot succeed"}],"functionName":{"name":"mstore","nativeSrc":"55555:6:69","nodeType":"YulIdentifier","src":"55555:6:69"},"nativeSrc":"55555:37:69","nodeType":"YulFunctionCall","src":"55555:37:69"},"nativeSrc":"55555:37:69","nodeType":"YulExpressionStatement","src":"55555:37:69"}]},"name":"store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd","nativeSrc":"55370:229:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"55468:6:69","nodeType":"YulTypedName","src":"55468:6:69","type":""}],"src":"55370:229:69"},{"body":{"nativeSrc":"55751:220:69","nodeType":"YulBlock","src":"55751:220:69","statements":[{"nativeSrc":"55761:74:69","nodeType":"YulAssignment","src":"55761:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"55827:3:69","nodeType":"YulIdentifier","src":"55827:3:69"},{"kind":"number","nativeSrc":"55832:2:69","nodeType":"YulLiteral","src":"55832:2:69","type":"","value":"42"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"55768:58:69","nodeType":"YulIdentifier","src":"55768:58:69"},"nativeSrc":"55768:67:69","nodeType":"YulFunctionCall","src":"55768:67:69"},"variableNames":[{"name":"pos","nativeSrc":"55761:3:69","nodeType":"YulIdentifier","src":"55761:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"55933:3:69","nodeType":"YulIdentifier","src":"55933:3:69"}],"functionName":{"name":"store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd","nativeSrc":"55844:88:69","nodeType":"YulIdentifier","src":"55844:88:69"},"nativeSrc":"55844:93:69","nodeType":"YulFunctionCall","src":"55844:93:69"},"nativeSrc":"55844:93:69","nodeType":"YulExpressionStatement","src":"55844:93:69"},{"nativeSrc":"55946:19:69","nodeType":"YulAssignment","src":"55946:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"55957:3:69","nodeType":"YulIdentifier","src":"55957:3:69"},{"kind":"number","nativeSrc":"55962:2:69","nodeType":"YulLiteral","src":"55962:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"55953:3:69","nodeType":"YulIdentifier","src":"55953:3:69"},"nativeSrc":"55953:12:69","nodeType":"YulFunctionCall","src":"55953:12:69"},"variableNames":[{"name":"end","nativeSrc":"55946:3:69","nodeType":"YulIdentifier","src":"55946:3:69"}]}]},"name":"abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack","nativeSrc":"55605:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"55739:3:69","nodeType":"YulTypedName","src":"55739:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"55747:3:69","nodeType":"YulTypedName","src":"55747:3:69","type":""}],"src":"55605:366:69"},{"body":{"nativeSrc":"56148:248:69","nodeType":"YulBlock","src":"56148:248:69","statements":[{"nativeSrc":"56158:26:69","nodeType":"YulAssignment","src":"56158:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"56170:9:69","nodeType":"YulIdentifier","src":"56170:9:69"},{"kind":"number","nativeSrc":"56181:2:69","nodeType":"YulLiteral","src":"56181:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"56166:3:69","nodeType":"YulIdentifier","src":"56166:3:69"},"nativeSrc":"56166:18:69","nodeType":"YulFunctionCall","src":"56166:18:69"},"variableNames":[{"name":"tail","nativeSrc":"56158:4:69","nodeType":"YulIdentifier","src":"56158:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"56205:9:69","nodeType":"YulIdentifier","src":"56205:9:69"},{"kind":"number","nativeSrc":"56216:1:69","nodeType":"YulLiteral","src":"56216:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"56201:3:69","nodeType":"YulIdentifier","src":"56201:3:69"},"nativeSrc":"56201:17:69","nodeType":"YulFunctionCall","src":"56201:17:69"},{"arguments":[{"name":"tail","nativeSrc":"56224:4:69","nodeType":"YulIdentifier","src":"56224:4:69"},{"name":"headStart","nativeSrc":"56230:9:69","nodeType":"YulIdentifier","src":"56230:9:69"}],"functionName":{"name":"sub","nativeSrc":"56220:3:69","nodeType":"YulIdentifier","src":"56220:3:69"},"nativeSrc":"56220:20:69","nodeType":"YulFunctionCall","src":"56220:20:69"}],"functionName":{"name":"mstore","nativeSrc":"56194:6:69","nodeType":"YulIdentifier","src":"56194:6:69"},"nativeSrc":"56194:47:69","nodeType":"YulFunctionCall","src":"56194:47:69"},"nativeSrc":"56194:47:69","nodeType":"YulExpressionStatement","src":"56194:47:69"},{"nativeSrc":"56250:139:69","nodeType":"YulAssignment","src":"56250:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"56384:4:69","nodeType":"YulIdentifier","src":"56384:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack","nativeSrc":"56258:124:69","nodeType":"YulIdentifier","src":"56258:124:69"},"nativeSrc":"56258:131:69","nodeType":"YulFunctionCall","src":"56258:131:69"},"variableNames":[{"name":"tail","nativeSrc":"56250:4:69","nodeType":"YulIdentifier","src":"56250:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"55977:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"56128:9:69","nodeType":"YulTypedName","src":"56128:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"56143:4:69","nodeType":"YulTypedName","src":"56143:4:69","type":""}],"src":"55977:419:69"},{"body":{"nativeSrc":"56556:288:69","nodeType":"YulBlock","src":"56556:288:69","statements":[{"nativeSrc":"56566:26:69","nodeType":"YulAssignment","src":"56566:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"56578:9:69","nodeType":"YulIdentifier","src":"56578:9:69"},{"kind":"number","nativeSrc":"56589:2:69","nodeType":"YulLiteral","src":"56589:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"56574:3:69","nodeType":"YulIdentifier","src":"56574:3:69"},"nativeSrc":"56574:18:69","nodeType":"YulFunctionCall","src":"56574:18:69"},"variableNames":[{"name":"tail","nativeSrc":"56566:4:69","nodeType":"YulIdentifier","src":"56566:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"56646:6:69","nodeType":"YulIdentifier","src":"56646:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"56659:9:69","nodeType":"YulIdentifier","src":"56659:9:69"},{"kind":"number","nativeSrc":"56670:1:69","nodeType":"YulLiteral","src":"56670:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"56655:3:69","nodeType":"YulIdentifier","src":"56655:3:69"},"nativeSrc":"56655:17:69","nodeType":"YulFunctionCall","src":"56655:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"56602:43:69","nodeType":"YulIdentifier","src":"56602:43:69"},"nativeSrc":"56602:71:69","nodeType":"YulFunctionCall","src":"56602:71:69"},"nativeSrc":"56602:71:69","nodeType":"YulExpressionStatement","src":"56602:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"56727:6:69","nodeType":"YulIdentifier","src":"56727:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"56740:9:69","nodeType":"YulIdentifier","src":"56740:9:69"},{"kind":"number","nativeSrc":"56751:2:69","nodeType":"YulLiteral","src":"56751:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"56736:3:69","nodeType":"YulIdentifier","src":"56736:3:69"},"nativeSrc":"56736:18:69","nodeType":"YulFunctionCall","src":"56736:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"56683:43:69","nodeType":"YulIdentifier","src":"56683:43:69"},"nativeSrc":"56683:72:69","nodeType":"YulFunctionCall","src":"56683:72:69"},"nativeSrc":"56683:72:69","nodeType":"YulExpressionStatement","src":"56683:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"56809:6:69","nodeType":"YulIdentifier","src":"56809:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"56822:9:69","nodeType":"YulIdentifier","src":"56822:9:69"},{"kind":"number","nativeSrc":"56833:2:69","nodeType":"YulLiteral","src":"56833:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"56818:3:69","nodeType":"YulIdentifier","src":"56818:3:69"},"nativeSrc":"56818:18:69","nodeType":"YulFunctionCall","src":"56818:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"56765:43:69","nodeType":"YulIdentifier","src":"56765:43:69"},"nativeSrc":"56765:72:69","nodeType":"YulFunctionCall","src":"56765:72:69"},"nativeSrc":"56765:72:69","nodeType":"YulExpressionStatement","src":"56765:72:69"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nativeSrc":"56402:442:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"56512:9:69","nodeType":"YulTypedName","src":"56512:9:69","type":""},{"name":"value2","nativeSrc":"56524:6:69","nodeType":"YulTypedName","src":"56524:6:69","type":""},{"name":"value1","nativeSrc":"56532:6:69","nodeType":"YulTypedName","src":"56532:6:69","type":""},{"name":"value0","nativeSrc":"56540:6:69","nodeType":"YulTypedName","src":"56540:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"56551:4:69","nodeType":"YulTypedName","src":"56551:4:69","type":""}],"src":"56402:442:69"},{"body":{"nativeSrc":"56956:75:69","nodeType":"YulBlock","src":"56956:75:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"56978:6:69","nodeType":"YulIdentifier","src":"56978:6:69"},{"kind":"number","nativeSrc":"56986:1:69","nodeType":"YulLiteral","src":"56986:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"56974:3:69","nodeType":"YulIdentifier","src":"56974:3:69"},"nativeSrc":"56974:14:69","nodeType":"YulFunctionCall","src":"56974:14:69"},{"hexValue":"45524332303a206d696e7420746f20746865207a65726f2061646472657373","kind":"string","nativeSrc":"56990:33:69","nodeType":"YulLiteral","src":"56990:33:69","type":"","value":"ERC20: mint to the zero address"}],"functionName":{"name":"mstore","nativeSrc":"56967:6:69","nodeType":"YulIdentifier","src":"56967:6:69"},"nativeSrc":"56967:57:69","nodeType":"YulFunctionCall","src":"56967:57:69"},"nativeSrc":"56967:57:69","nodeType":"YulExpressionStatement","src":"56967:57:69"}]},"name":"store_literal_in_memory_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e","nativeSrc":"56850:181:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"56948:6:69","nodeType":"YulTypedName","src":"56948:6:69","type":""}],"src":"56850:181:69"},{"body":{"nativeSrc":"57183:220:69","nodeType":"YulBlock","src":"57183:220:69","statements":[{"nativeSrc":"57193:74:69","nodeType":"YulAssignment","src":"57193:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"57259:3:69","nodeType":"YulIdentifier","src":"57259:3:69"},{"kind":"number","nativeSrc":"57264:2:69","nodeType":"YulLiteral","src":"57264:2:69","type":"","value":"31"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"57200:58:69","nodeType":"YulIdentifier","src":"57200:58:69"},"nativeSrc":"57200:67:69","nodeType":"YulFunctionCall","src":"57200:67:69"},"variableNames":[{"name":"pos","nativeSrc":"57193:3:69","nodeType":"YulIdentifier","src":"57193:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"57365:3:69","nodeType":"YulIdentifier","src":"57365:3:69"}],"functionName":{"name":"store_literal_in_memory_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e","nativeSrc":"57276:88:69","nodeType":"YulIdentifier","src":"57276:88:69"},"nativeSrc":"57276:93:69","nodeType":"YulFunctionCall","src":"57276:93:69"},"nativeSrc":"57276:93:69","nodeType":"YulExpressionStatement","src":"57276:93:69"},{"nativeSrc":"57378:19:69","nodeType":"YulAssignment","src":"57378:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"57389:3:69","nodeType":"YulIdentifier","src":"57389:3:69"},{"kind":"number","nativeSrc":"57394:2:69","nodeType":"YulLiteral","src":"57394:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"57385:3:69","nodeType":"YulIdentifier","src":"57385:3:69"},"nativeSrc":"57385:12:69","nodeType":"YulFunctionCall","src":"57385:12:69"},"variableNames":[{"name":"end","nativeSrc":"57378:3:69","nodeType":"YulIdentifier","src":"57378:3:69"}]}]},"name":"abi_encode_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e_to_t_string_memory_ptr_fromStack","nativeSrc":"57037:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"57171:3:69","nodeType":"YulTypedName","src":"57171:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"57179:3:69","nodeType":"YulTypedName","src":"57179:3:69","type":""}],"src":"57037:366:69"},{"body":{"nativeSrc":"57580:248:69","nodeType":"YulBlock","src":"57580:248:69","statements":[{"nativeSrc":"57590:26:69","nodeType":"YulAssignment","src":"57590:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"57602:9:69","nodeType":"YulIdentifier","src":"57602:9:69"},{"kind":"number","nativeSrc":"57613:2:69","nodeType":"YulLiteral","src":"57613:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"57598:3:69","nodeType":"YulIdentifier","src":"57598:3:69"},"nativeSrc":"57598:18:69","nodeType":"YulFunctionCall","src":"57598:18:69"},"variableNames":[{"name":"tail","nativeSrc":"57590:4:69","nodeType":"YulIdentifier","src":"57590:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"57637:9:69","nodeType":"YulIdentifier","src":"57637:9:69"},{"kind":"number","nativeSrc":"57648:1:69","nodeType":"YulLiteral","src":"57648:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"57633:3:69","nodeType":"YulIdentifier","src":"57633:3:69"},"nativeSrc":"57633:17:69","nodeType":"YulFunctionCall","src":"57633:17:69"},{"arguments":[{"name":"tail","nativeSrc":"57656:4:69","nodeType":"YulIdentifier","src":"57656:4:69"},{"name":"headStart","nativeSrc":"57662:9:69","nodeType":"YulIdentifier","src":"57662:9:69"}],"functionName":{"name":"sub","nativeSrc":"57652:3:69","nodeType":"YulIdentifier","src":"57652:3:69"},"nativeSrc":"57652:20:69","nodeType":"YulFunctionCall","src":"57652:20:69"}],"functionName":{"name":"mstore","nativeSrc":"57626:6:69","nodeType":"YulIdentifier","src":"57626:6:69"},"nativeSrc":"57626:47:69","nodeType":"YulFunctionCall","src":"57626:47:69"},"nativeSrc":"57626:47:69","nodeType":"YulExpressionStatement","src":"57626:47:69"},{"nativeSrc":"57682:139:69","nodeType":"YulAssignment","src":"57682:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"57816:4:69","nodeType":"YulIdentifier","src":"57816:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e_to_t_string_memory_ptr_fromStack","nativeSrc":"57690:124:69","nodeType":"YulIdentifier","src":"57690:124:69"},"nativeSrc":"57690:131:69","nodeType":"YulFunctionCall","src":"57690:131:69"},"variableNames":[{"name":"tail","nativeSrc":"57682:4:69","nodeType":"YulIdentifier","src":"57682:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"57409:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"57560:9:69","nodeType":"YulTypedName","src":"57560:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"57575:4:69","nodeType":"YulTypedName","src":"57575:4:69","type":""}],"src":"57409:419:69"},{"body":{"nativeSrc":"57940:114:69","nodeType":"YulBlock","src":"57940:114:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"57962:6:69","nodeType":"YulIdentifier","src":"57962:6:69"},{"kind":"number","nativeSrc":"57970:1:69","nodeType":"YulLiteral","src":"57970:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"57958:3:69","nodeType":"YulIdentifier","src":"57958:3:69"},"nativeSrc":"57958:14:69","nodeType":"YulFunctionCall","src":"57958:14:69"},{"hexValue":"45524332303a206275726e2066726f6d20746865207a65726f20616464726573","kind":"string","nativeSrc":"57974:34:69","nodeType":"YulLiteral","src":"57974:34:69","type":"","value":"ERC20: burn from the zero addres"}],"functionName":{"name":"mstore","nativeSrc":"57951:6:69","nodeType":"YulIdentifier","src":"57951:6:69"},"nativeSrc":"57951:58:69","nodeType":"YulFunctionCall","src":"57951:58:69"},"nativeSrc":"57951:58:69","nodeType":"YulExpressionStatement","src":"57951:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"58030:6:69","nodeType":"YulIdentifier","src":"58030:6:69"},{"kind":"number","nativeSrc":"58038:2:69","nodeType":"YulLiteral","src":"58038:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"58026:3:69","nodeType":"YulIdentifier","src":"58026:3:69"},"nativeSrc":"58026:15:69","nodeType":"YulFunctionCall","src":"58026:15:69"},{"hexValue":"73","kind":"string","nativeSrc":"58043:3:69","nodeType":"YulLiteral","src":"58043:3:69","type":"","value":"s"}],"functionName":{"name":"mstore","nativeSrc":"58019:6:69","nodeType":"YulIdentifier","src":"58019:6:69"},"nativeSrc":"58019:28:69","nodeType":"YulFunctionCall","src":"58019:28:69"},"nativeSrc":"58019:28:69","nodeType":"YulExpressionStatement","src":"58019:28:69"}]},"name":"store_literal_in_memory_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f","nativeSrc":"57834:220:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"57932:6:69","nodeType":"YulTypedName","src":"57932:6:69","type":""}],"src":"57834:220:69"},{"body":{"nativeSrc":"58206:220:69","nodeType":"YulBlock","src":"58206:220:69","statements":[{"nativeSrc":"58216:74:69","nodeType":"YulAssignment","src":"58216:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"58282:3:69","nodeType":"YulIdentifier","src":"58282:3:69"},{"kind":"number","nativeSrc":"58287:2:69","nodeType":"YulLiteral","src":"58287:2:69","type":"","value":"33"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"58223:58:69","nodeType":"YulIdentifier","src":"58223:58:69"},"nativeSrc":"58223:67:69","nodeType":"YulFunctionCall","src":"58223:67:69"},"variableNames":[{"name":"pos","nativeSrc":"58216:3:69","nodeType":"YulIdentifier","src":"58216:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"58388:3:69","nodeType":"YulIdentifier","src":"58388:3:69"}],"functionName":{"name":"store_literal_in_memory_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f","nativeSrc":"58299:88:69","nodeType":"YulIdentifier","src":"58299:88:69"},"nativeSrc":"58299:93:69","nodeType":"YulFunctionCall","src":"58299:93:69"},"nativeSrc":"58299:93:69","nodeType":"YulExpressionStatement","src":"58299:93:69"},{"nativeSrc":"58401:19:69","nodeType":"YulAssignment","src":"58401:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"58412:3:69","nodeType":"YulIdentifier","src":"58412:3:69"},{"kind":"number","nativeSrc":"58417:2:69","nodeType":"YulLiteral","src":"58417:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"58408:3:69","nodeType":"YulIdentifier","src":"58408:3:69"},"nativeSrc":"58408:12:69","nodeType":"YulFunctionCall","src":"58408:12:69"},"variableNames":[{"name":"end","nativeSrc":"58401:3:69","nodeType":"YulIdentifier","src":"58401:3:69"}]}]},"name":"abi_encode_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f_to_t_string_memory_ptr_fromStack","nativeSrc":"58060:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"58194:3:69","nodeType":"YulTypedName","src":"58194:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"58202:3:69","nodeType":"YulTypedName","src":"58202:3:69","type":""}],"src":"58060:366:69"},{"body":{"nativeSrc":"58603:248:69","nodeType":"YulBlock","src":"58603:248:69","statements":[{"nativeSrc":"58613:26:69","nodeType":"YulAssignment","src":"58613:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"58625:9:69","nodeType":"YulIdentifier","src":"58625:9:69"},{"kind":"number","nativeSrc":"58636:2:69","nodeType":"YulLiteral","src":"58636:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"58621:3:69","nodeType":"YulIdentifier","src":"58621:3:69"},"nativeSrc":"58621:18:69","nodeType":"YulFunctionCall","src":"58621:18:69"},"variableNames":[{"name":"tail","nativeSrc":"58613:4:69","nodeType":"YulIdentifier","src":"58613:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"58660:9:69","nodeType":"YulIdentifier","src":"58660:9:69"},{"kind":"number","nativeSrc":"58671:1:69","nodeType":"YulLiteral","src":"58671:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"58656:3:69","nodeType":"YulIdentifier","src":"58656:3:69"},"nativeSrc":"58656:17:69","nodeType":"YulFunctionCall","src":"58656:17:69"},{"arguments":[{"name":"tail","nativeSrc":"58679:4:69","nodeType":"YulIdentifier","src":"58679:4:69"},{"name":"headStart","nativeSrc":"58685:9:69","nodeType":"YulIdentifier","src":"58685:9:69"}],"functionName":{"name":"sub","nativeSrc":"58675:3:69","nodeType":"YulIdentifier","src":"58675:3:69"},"nativeSrc":"58675:20:69","nodeType":"YulFunctionCall","src":"58675:20:69"}],"functionName":{"name":"mstore","nativeSrc":"58649:6:69","nodeType":"YulIdentifier","src":"58649:6:69"},"nativeSrc":"58649:47:69","nodeType":"YulFunctionCall","src":"58649:47:69"},"nativeSrc":"58649:47:69","nodeType":"YulExpressionStatement","src":"58649:47:69"},{"nativeSrc":"58705:139:69","nodeType":"YulAssignment","src":"58705:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"58839:4:69","nodeType":"YulIdentifier","src":"58839:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f_to_t_string_memory_ptr_fromStack","nativeSrc":"58713:124:69","nodeType":"YulIdentifier","src":"58713:124:69"},"nativeSrc":"58713:131:69","nodeType":"YulFunctionCall","src":"58713:131:69"},"variableNames":[{"name":"tail","nativeSrc":"58705:4:69","nodeType":"YulIdentifier","src":"58705:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"58432:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"58583:9:69","nodeType":"YulTypedName","src":"58583:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"58598:4:69","nodeType":"YulTypedName","src":"58598:4:69","type":""}],"src":"58432:419:69"},{"body":{"nativeSrc":"58963:115:69","nodeType":"YulBlock","src":"58963:115:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"58985:6:69","nodeType":"YulIdentifier","src":"58985:6:69"},{"kind":"number","nativeSrc":"58993:1:69","nodeType":"YulLiteral","src":"58993:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"58981:3:69","nodeType":"YulIdentifier","src":"58981:3:69"},"nativeSrc":"58981:14:69","nodeType":"YulFunctionCall","src":"58981:14:69"},{"hexValue":"45524332303a206275726e20616d6f756e7420657863656564732062616c616e","kind":"string","nativeSrc":"58997:34:69","nodeType":"YulLiteral","src":"58997:34:69","type":"","value":"ERC20: burn amount exceeds balan"}],"functionName":{"name":"mstore","nativeSrc":"58974:6:69","nodeType":"YulIdentifier","src":"58974:6:69"},"nativeSrc":"58974:58:69","nodeType":"YulFunctionCall","src":"58974:58:69"},"nativeSrc":"58974:58:69","nodeType":"YulExpressionStatement","src":"58974:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"59053:6:69","nodeType":"YulIdentifier","src":"59053:6:69"},{"kind":"number","nativeSrc":"59061:2:69","nodeType":"YulLiteral","src":"59061:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"59049:3:69","nodeType":"YulIdentifier","src":"59049:3:69"},"nativeSrc":"59049:15:69","nodeType":"YulFunctionCall","src":"59049:15:69"},{"hexValue":"6365","kind":"string","nativeSrc":"59066:4:69","nodeType":"YulLiteral","src":"59066:4:69","type":"","value":"ce"}],"functionName":{"name":"mstore","nativeSrc":"59042:6:69","nodeType":"YulIdentifier","src":"59042:6:69"},"nativeSrc":"59042:29:69","nodeType":"YulFunctionCall","src":"59042:29:69"},"nativeSrc":"59042:29:69","nodeType":"YulExpressionStatement","src":"59042:29:69"}]},"name":"store_literal_in_memory_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd","nativeSrc":"58857:221:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"58955:6:69","nodeType":"YulTypedName","src":"58955:6:69","type":""}],"src":"58857:221:69"},{"body":{"nativeSrc":"59230:220:69","nodeType":"YulBlock","src":"59230:220:69","statements":[{"nativeSrc":"59240:74:69","nodeType":"YulAssignment","src":"59240:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"59306:3:69","nodeType":"YulIdentifier","src":"59306:3:69"},{"kind":"number","nativeSrc":"59311:2:69","nodeType":"YulLiteral","src":"59311:2:69","type":"","value":"34"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"59247:58:69","nodeType":"YulIdentifier","src":"59247:58:69"},"nativeSrc":"59247:67:69","nodeType":"YulFunctionCall","src":"59247:67:69"},"variableNames":[{"name":"pos","nativeSrc":"59240:3:69","nodeType":"YulIdentifier","src":"59240:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"59412:3:69","nodeType":"YulIdentifier","src":"59412:3:69"}],"functionName":{"name":"store_literal_in_memory_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd","nativeSrc":"59323:88:69","nodeType":"YulIdentifier","src":"59323:88:69"},"nativeSrc":"59323:93:69","nodeType":"YulFunctionCall","src":"59323:93:69"},"nativeSrc":"59323:93:69","nodeType":"YulExpressionStatement","src":"59323:93:69"},{"nativeSrc":"59425:19:69","nodeType":"YulAssignment","src":"59425:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"59436:3:69","nodeType":"YulIdentifier","src":"59436:3:69"},{"kind":"number","nativeSrc":"59441:2:69","nodeType":"YulLiteral","src":"59441:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"59432:3:69","nodeType":"YulIdentifier","src":"59432:3:69"},"nativeSrc":"59432:12:69","nodeType":"YulFunctionCall","src":"59432:12:69"},"variableNames":[{"name":"end","nativeSrc":"59425:3:69","nodeType":"YulIdentifier","src":"59425:3:69"}]}]},"name":"abi_encode_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd_to_t_string_memory_ptr_fromStack","nativeSrc":"59084:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"59218:3:69","nodeType":"YulTypedName","src":"59218:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"59226:3:69","nodeType":"YulTypedName","src":"59226:3:69","type":""}],"src":"59084:366:69"},{"body":{"nativeSrc":"59627:248:69","nodeType":"YulBlock","src":"59627:248:69","statements":[{"nativeSrc":"59637:26:69","nodeType":"YulAssignment","src":"59637:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"59649:9:69","nodeType":"YulIdentifier","src":"59649:9:69"},{"kind":"number","nativeSrc":"59660:2:69","nodeType":"YulLiteral","src":"59660:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"59645:3:69","nodeType":"YulIdentifier","src":"59645:3:69"},"nativeSrc":"59645:18:69","nodeType":"YulFunctionCall","src":"59645:18:69"},"variableNames":[{"name":"tail","nativeSrc":"59637:4:69","nodeType":"YulIdentifier","src":"59637:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"59684:9:69","nodeType":"YulIdentifier","src":"59684:9:69"},{"kind":"number","nativeSrc":"59695:1:69","nodeType":"YulLiteral","src":"59695:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"59680:3:69","nodeType":"YulIdentifier","src":"59680:3:69"},"nativeSrc":"59680:17:69","nodeType":"YulFunctionCall","src":"59680:17:69"},{"arguments":[{"name":"tail","nativeSrc":"59703:4:69","nodeType":"YulIdentifier","src":"59703:4:69"},{"name":"headStart","nativeSrc":"59709:9:69","nodeType":"YulIdentifier","src":"59709:9:69"}],"functionName":{"name":"sub","nativeSrc":"59699:3:69","nodeType":"YulIdentifier","src":"59699:3:69"},"nativeSrc":"59699:20:69","nodeType":"YulFunctionCall","src":"59699:20:69"}],"functionName":{"name":"mstore","nativeSrc":"59673:6:69","nodeType":"YulIdentifier","src":"59673:6:69"},"nativeSrc":"59673:47:69","nodeType":"YulFunctionCall","src":"59673:47:69"},"nativeSrc":"59673:47:69","nodeType":"YulExpressionStatement","src":"59673:47:69"},{"nativeSrc":"59729:139:69","nodeType":"YulAssignment","src":"59729:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"59863:4:69","nodeType":"YulIdentifier","src":"59863:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd_to_t_string_memory_ptr_fromStack","nativeSrc":"59737:124:69","nodeType":"YulIdentifier","src":"59737:124:69"},"nativeSrc":"59737:131:69","nodeType":"YulFunctionCall","src":"59737:131:69"},"variableNames":[{"name":"tail","nativeSrc":"59729:4:69","nodeType":"YulIdentifier","src":"59729:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"59456:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"59607:9:69","nodeType":"YulTypedName","src":"59607:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"59622:4:69","nodeType":"YulTypedName","src":"59622:4:69","type":""}],"src":"59456:419:69"},{"body":{"nativeSrc":"59935:87:69","nodeType":"YulBlock","src":"59935:87:69","statements":[{"nativeSrc":"59945:11:69","nodeType":"YulAssignment","src":"59945:11:69","value":{"name":"ptr","nativeSrc":"59953:3:69","nodeType":"YulIdentifier","src":"59953:3:69"},"variableNames":[{"name":"data","nativeSrc":"59945:4:69","nodeType":"YulIdentifier","src":"59945:4:69"}]},{"expression":{"arguments":[{"kind":"number","nativeSrc":"59973:1:69","nodeType":"YulLiteral","src":"59973:1:69","type":"","value":"0"},{"name":"ptr","nativeSrc":"59976:3:69","nodeType":"YulIdentifier","src":"59976:3:69"}],"functionName":{"name":"mstore","nativeSrc":"59966:6:69","nodeType":"YulIdentifier","src":"59966:6:69"},"nativeSrc":"59966:14:69","nodeType":"YulFunctionCall","src":"59966:14:69"},"nativeSrc":"59966:14:69","nodeType":"YulExpressionStatement","src":"59966:14:69"},{"nativeSrc":"59989:26:69","nodeType":"YulAssignment","src":"59989:26:69","value":{"arguments":[{"kind":"number","nativeSrc":"60007:1:69","nodeType":"YulLiteral","src":"60007:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"60010:4:69","nodeType":"YulLiteral","src":"60010:4:69","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nativeSrc":"59997:9:69","nodeType":"YulIdentifier","src":"59997:9:69"},"nativeSrc":"59997:18:69","nodeType":"YulFunctionCall","src":"59997:18:69"},"variableNames":[{"name":"data","nativeSrc":"59989:4:69","nodeType":"YulIdentifier","src":"59989:4:69"}]}]},"name":"array_dataslot_t_string_storage","nativeSrc":"59881:141:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nativeSrc":"59922:3:69","nodeType":"YulTypedName","src":"59922:3:69","type":""}],"returnVariables":[{"name":"data","nativeSrc":"59930:4:69","nodeType":"YulTypedName","src":"59930:4:69","type":""}],"src":"59881:141:69"},{"body":{"nativeSrc":"60072:49:69","nodeType":"YulBlock","src":"60072:49:69","statements":[{"nativeSrc":"60082:33:69","nodeType":"YulAssignment","src":"60082:33:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"60100:5:69","nodeType":"YulIdentifier","src":"60100:5:69"},{"kind":"number","nativeSrc":"60107:2:69","nodeType":"YulLiteral","src":"60107:2:69","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"60096:3:69","nodeType":"YulIdentifier","src":"60096:3:69"},"nativeSrc":"60096:14:69","nodeType":"YulFunctionCall","src":"60096:14:69"},{"kind":"number","nativeSrc":"60112:2:69","nodeType":"YulLiteral","src":"60112:2:69","type":"","value":"32"}],"functionName":{"name":"div","nativeSrc":"60092:3:69","nodeType":"YulIdentifier","src":"60092:3:69"},"nativeSrc":"60092:23:69","nodeType":"YulFunctionCall","src":"60092:23:69"},"variableNames":[{"name":"result","nativeSrc":"60082:6:69","nodeType":"YulIdentifier","src":"60082:6:69"}]}]},"name":"divide_by_32_ceil","nativeSrc":"60028:93:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"60055:5:69","nodeType":"YulTypedName","src":"60055:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"60065:6:69","nodeType":"YulTypedName","src":"60065:6:69","type":""}],"src":"60028:93:69"},{"body":{"nativeSrc":"60180:54:69","nodeType":"YulBlock","src":"60180:54:69","statements":[{"nativeSrc":"60190:37:69","nodeType":"YulAssignment","src":"60190:37:69","value":{"arguments":[{"name":"bits","nativeSrc":"60215:4:69","nodeType":"YulIdentifier","src":"60215:4:69"},{"name":"value","nativeSrc":"60221:5:69","nodeType":"YulIdentifier","src":"60221:5:69"}],"functionName":{"name":"shl","nativeSrc":"60211:3:69","nodeType":"YulIdentifier","src":"60211:3:69"},"nativeSrc":"60211:16:69","nodeType":"YulFunctionCall","src":"60211:16:69"},"variableNames":[{"name":"newValue","nativeSrc":"60190:8:69","nodeType":"YulIdentifier","src":"60190:8:69"}]}]},"name":"shift_left_dynamic","nativeSrc":"60127:107:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"bits","nativeSrc":"60155:4:69","nodeType":"YulTypedName","src":"60155:4:69","type":""},{"name":"value","nativeSrc":"60161:5:69","nodeType":"YulTypedName","src":"60161:5:69","type":""}],"returnVariables":[{"name":"newValue","nativeSrc":"60171:8:69","nodeType":"YulTypedName","src":"60171:8:69","type":""}],"src":"60127:107:69"},{"body":{"nativeSrc":"60316:317:69","nodeType":"YulBlock","src":"60316:317:69","statements":[{"nativeSrc":"60326:35:69","nodeType":"YulVariableDeclaration","src":"60326:35:69","value":{"arguments":[{"name":"shiftBytes","nativeSrc":"60347:10:69","nodeType":"YulIdentifier","src":"60347:10:69"},{"kind":"number","nativeSrc":"60359:1:69","nodeType":"YulLiteral","src":"60359:1:69","type":"","value":"8"}],"functionName":{"name":"mul","nativeSrc":"60343:3:69","nodeType":"YulIdentifier","src":"60343:3:69"},"nativeSrc":"60343:18:69","nodeType":"YulFunctionCall","src":"60343:18:69"},"variables":[{"name":"shiftBits","nativeSrc":"60330:9:69","nodeType":"YulTypedName","src":"60330:9:69","type":""}]},{"nativeSrc":"60370:109:69","nodeType":"YulVariableDeclaration","src":"60370:109:69","value":{"arguments":[{"name":"shiftBits","nativeSrc":"60401:9:69","nodeType":"YulIdentifier","src":"60401:9:69"},{"kind":"number","nativeSrc":"60412:66:69","nodeType":"YulLiteral","src":"60412:66:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"shift_left_dynamic","nativeSrc":"60382:18:69","nodeType":"YulIdentifier","src":"60382:18:69"},"nativeSrc":"60382:97:69","nodeType":"YulFunctionCall","src":"60382:97:69"},"variables":[{"name":"mask","nativeSrc":"60374:4:69","nodeType":"YulTypedName","src":"60374:4:69","type":""}]},{"nativeSrc":"60488:51:69","nodeType":"YulAssignment","src":"60488:51:69","value":{"arguments":[{"name":"shiftBits","nativeSrc":"60519:9:69","nodeType":"YulIdentifier","src":"60519:9:69"},{"name":"toInsert","nativeSrc":"60530:8:69","nodeType":"YulIdentifier","src":"60530:8:69"}],"functionName":{"name":"shift_left_dynamic","nativeSrc":"60500:18:69","nodeType":"YulIdentifier","src":"60500:18:69"},"nativeSrc":"60500:39:69","nodeType":"YulFunctionCall","src":"60500:39:69"},"variableNames":[{"name":"toInsert","nativeSrc":"60488:8:69","nodeType":"YulIdentifier","src":"60488:8:69"}]},{"nativeSrc":"60548:30:69","nodeType":"YulAssignment","src":"60548:30:69","value":{"arguments":[{"name":"value","nativeSrc":"60561:5:69","nodeType":"YulIdentifier","src":"60561:5:69"},{"arguments":[{"name":"mask","nativeSrc":"60572:4:69","nodeType":"YulIdentifier","src":"60572:4:69"}],"functionName":{"name":"not","nativeSrc":"60568:3:69","nodeType":"YulIdentifier","src":"60568:3:69"},"nativeSrc":"60568:9:69","nodeType":"YulFunctionCall","src":"60568:9:69"}],"functionName":{"name":"and","nativeSrc":"60557:3:69","nodeType":"YulIdentifier","src":"60557:3:69"},"nativeSrc":"60557:21:69","nodeType":"YulFunctionCall","src":"60557:21:69"},"variableNames":[{"name":"value","nativeSrc":"60548:5:69","nodeType":"YulIdentifier","src":"60548:5:69"}]},{"nativeSrc":"60587:40:69","nodeType":"YulAssignment","src":"60587:40:69","value":{"arguments":[{"name":"value","nativeSrc":"60600:5:69","nodeType":"YulIdentifier","src":"60600:5:69"},{"arguments":[{"name":"toInsert","nativeSrc":"60611:8:69","nodeType":"YulIdentifier","src":"60611:8:69"},{"name":"mask","nativeSrc":"60621:4:69","nodeType":"YulIdentifier","src":"60621:4:69"}],"functionName":{"name":"and","nativeSrc":"60607:3:69","nodeType":"YulIdentifier","src":"60607:3:69"},"nativeSrc":"60607:19:69","nodeType":"YulFunctionCall","src":"60607:19:69"}],"functionName":{"name":"or","nativeSrc":"60597:2:69","nodeType":"YulIdentifier","src":"60597:2:69"},"nativeSrc":"60597:30:69","nodeType":"YulFunctionCall","src":"60597:30:69"},"variableNames":[{"name":"result","nativeSrc":"60587:6:69","nodeType":"YulIdentifier","src":"60587:6:69"}]}]},"name":"update_byte_slice_dynamic32","nativeSrc":"60240:393:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"60277:5:69","nodeType":"YulTypedName","src":"60277:5:69","type":""},{"name":"shiftBytes","nativeSrc":"60284:10:69","nodeType":"YulTypedName","src":"60284:10:69","type":""},{"name":"toInsert","nativeSrc":"60296:8:69","nodeType":"YulTypedName","src":"60296:8:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"60309:6:69","nodeType":"YulTypedName","src":"60309:6:69","type":""}],"src":"60240:393:69"},{"body":{"nativeSrc":"60699:82:69","nodeType":"YulBlock","src":"60699:82:69","statements":[{"nativeSrc":"60709:66:69","nodeType":"YulAssignment","src":"60709:66:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"60767:5:69","nodeType":"YulIdentifier","src":"60767:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"60749:17:69","nodeType":"YulIdentifier","src":"60749:17:69"},"nativeSrc":"60749:24:69","nodeType":"YulFunctionCall","src":"60749:24:69"}],"functionName":{"name":"identity","nativeSrc":"60740:8:69","nodeType":"YulIdentifier","src":"60740:8:69"},"nativeSrc":"60740:34:69","nodeType":"YulFunctionCall","src":"60740:34:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"60722:17:69","nodeType":"YulIdentifier","src":"60722:17:69"},"nativeSrc":"60722:53:69","nodeType":"YulFunctionCall","src":"60722:53:69"},"variableNames":[{"name":"converted","nativeSrc":"60709:9:69","nodeType":"YulIdentifier","src":"60709:9:69"}]}]},"name":"convert_t_uint256_to_t_uint256","nativeSrc":"60639:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"60679:5:69","nodeType":"YulTypedName","src":"60679:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"60689:9:69","nodeType":"YulTypedName","src":"60689:9:69","type":""}],"src":"60639:142:69"},{"body":{"nativeSrc":"60834:28:69","nodeType":"YulBlock","src":"60834:28:69","statements":[{"nativeSrc":"60844:12:69","nodeType":"YulAssignment","src":"60844:12:69","value":{"name":"value","nativeSrc":"60851:5:69","nodeType":"YulIdentifier","src":"60851:5:69"},"variableNames":[{"name":"ret","nativeSrc":"60844:3:69","nodeType":"YulIdentifier","src":"60844:3:69"}]}]},"name":"prepare_store_t_uint256","nativeSrc":"60787:75:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"60820:5:69","nodeType":"YulTypedName","src":"60820:5:69","type":""}],"returnVariables":[{"name":"ret","nativeSrc":"60830:3:69","nodeType":"YulTypedName","src":"60830:3:69","type":""}],"src":"60787:75:69"},{"body":{"nativeSrc":"60944:193:69","nodeType":"YulBlock","src":"60944:193:69","statements":[{"nativeSrc":"60954:63:69","nodeType":"YulVariableDeclaration","src":"60954:63:69","value":{"arguments":[{"name":"value_0","nativeSrc":"61009:7:69","nodeType":"YulIdentifier","src":"61009:7:69"}],"functionName":{"name":"convert_t_uint256_to_t_uint256","nativeSrc":"60978:30:69","nodeType":"YulIdentifier","src":"60978:30:69"},"nativeSrc":"60978:39:69","nodeType":"YulFunctionCall","src":"60978:39:69"},"variables":[{"name":"convertedValue_0","nativeSrc":"60958:16:69","nodeType":"YulTypedName","src":"60958:16:69","type":""}]},{"expression":{"arguments":[{"name":"slot","nativeSrc":"61033:4:69","nodeType":"YulIdentifier","src":"61033:4:69"},{"arguments":[{"arguments":[{"name":"slot","nativeSrc":"61073:4:69","nodeType":"YulIdentifier","src":"61073:4:69"}],"functionName":{"name":"sload","nativeSrc":"61067:5:69","nodeType":"YulIdentifier","src":"61067:5:69"},"nativeSrc":"61067:11:69","nodeType":"YulFunctionCall","src":"61067:11:69"},{"name":"offset","nativeSrc":"61080:6:69","nodeType":"YulIdentifier","src":"61080:6:69"},{"arguments":[{"name":"convertedValue_0","nativeSrc":"61112:16:69","nodeType":"YulIdentifier","src":"61112:16:69"}],"functionName":{"name":"prepare_store_t_uint256","nativeSrc":"61088:23:69","nodeType":"YulIdentifier","src":"61088:23:69"},"nativeSrc":"61088:41:69","nodeType":"YulFunctionCall","src":"61088:41:69"}],"functionName":{"name":"update_byte_slice_dynamic32","nativeSrc":"61039:27:69","nodeType":"YulIdentifier","src":"61039:27:69"},"nativeSrc":"61039:91:69","nodeType":"YulFunctionCall","src":"61039:91:69"}],"functionName":{"name":"sstore","nativeSrc":"61026:6:69","nodeType":"YulIdentifier","src":"61026:6:69"},"nativeSrc":"61026:105:69","nodeType":"YulFunctionCall","src":"61026:105:69"},"nativeSrc":"61026:105:69","nodeType":"YulExpressionStatement","src":"61026:105:69"}]},"name":"update_storage_value_t_uint256_to_t_uint256","nativeSrc":"60868:269:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nativeSrc":"60921:4:69","nodeType":"YulTypedName","src":"60921:4:69","type":""},{"name":"offset","nativeSrc":"60927:6:69","nodeType":"YulTypedName","src":"60927:6:69","type":""},{"name":"value_0","nativeSrc":"60935:7:69","nodeType":"YulTypedName","src":"60935:7:69","type":""}],"src":"60868:269:69"},{"body":{"nativeSrc":"61192:24:69","nodeType":"YulBlock","src":"61192:24:69","statements":[{"nativeSrc":"61202:8:69","nodeType":"YulAssignment","src":"61202:8:69","value":{"kind":"number","nativeSrc":"61209:1:69","nodeType":"YulLiteral","src":"61209:1:69","type":"","value":"0"},"variableNames":[{"name":"ret","nativeSrc":"61202:3:69","nodeType":"YulIdentifier","src":"61202:3:69"}]}]},"name":"zero_value_for_split_t_uint256","nativeSrc":"61143:73:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"ret","nativeSrc":"61188:3:69","nodeType":"YulTypedName","src":"61188:3:69","type":""}],"src":"61143:73:69"},{"body":{"nativeSrc":"61275:136:69","nodeType":"YulBlock","src":"61275:136:69","statements":[{"nativeSrc":"61285:46:69","nodeType":"YulVariableDeclaration","src":"61285:46:69","value":{"arguments":[],"functionName":{"name":"zero_value_for_split_t_uint256","nativeSrc":"61299:30:69","nodeType":"YulIdentifier","src":"61299:30:69"},"nativeSrc":"61299:32:69","nodeType":"YulFunctionCall","src":"61299:32:69"},"variables":[{"name":"zero_0","nativeSrc":"61289:6:69","nodeType":"YulTypedName","src":"61289:6:69","type":""}]},{"expression":{"arguments":[{"name":"slot","nativeSrc":"61384:4:69","nodeType":"YulIdentifier","src":"61384:4:69"},{"name":"offset","nativeSrc":"61390:6:69","nodeType":"YulIdentifier","src":"61390:6:69"},{"name":"zero_0","nativeSrc":"61398:6:69","nodeType":"YulIdentifier","src":"61398:6:69"}],"functionName":{"name":"update_storage_value_t_uint256_to_t_uint256","nativeSrc":"61340:43:69","nodeType":"YulIdentifier","src":"61340:43:69"},"nativeSrc":"61340:65:69","nodeType":"YulFunctionCall","src":"61340:65:69"},"nativeSrc":"61340:65:69","nodeType":"YulExpressionStatement","src":"61340:65:69"}]},"name":"storage_set_to_zero_t_uint256","nativeSrc":"61222:189:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nativeSrc":"61261:4:69","nodeType":"YulTypedName","src":"61261:4:69","type":""},{"name":"offset","nativeSrc":"61267:6:69","nodeType":"YulTypedName","src":"61267:6:69","type":""}],"src":"61222:189:69"},{"body":{"nativeSrc":"61467:136:69","nodeType":"YulBlock","src":"61467:136:69","statements":[{"body":{"nativeSrc":"61534:63:69","nodeType":"YulBlock","src":"61534:63:69","statements":[{"expression":{"arguments":[{"name":"start","nativeSrc":"61578:5:69","nodeType":"YulIdentifier","src":"61578:5:69"},{"kind":"number","nativeSrc":"61585:1:69","nodeType":"YulLiteral","src":"61585:1:69","type":"","value":"0"}],"functionName":{"name":"storage_set_to_zero_t_uint256","nativeSrc":"61548:29:69","nodeType":"YulIdentifier","src":"61548:29:69"},"nativeSrc":"61548:39:69","nodeType":"YulFunctionCall","src":"61548:39:69"},"nativeSrc":"61548:39:69","nodeType":"YulExpressionStatement","src":"61548:39:69"}]},"condition":{"arguments":[{"name":"start","nativeSrc":"61487:5:69","nodeType":"YulIdentifier","src":"61487:5:69"},{"name":"end","nativeSrc":"61494:3:69","nodeType":"YulIdentifier","src":"61494:3:69"}],"functionName":{"name":"lt","nativeSrc":"61484:2:69","nodeType":"YulIdentifier","src":"61484:2:69"},"nativeSrc":"61484:14:69","nodeType":"YulFunctionCall","src":"61484:14:69"},"nativeSrc":"61477:120:69","nodeType":"YulForLoop","post":{"nativeSrc":"61499:26:69","nodeType":"YulBlock","src":"61499:26:69","statements":[{"nativeSrc":"61501:22:69","nodeType":"YulAssignment","src":"61501:22:69","value":{"arguments":[{"name":"start","nativeSrc":"61514:5:69","nodeType":"YulIdentifier","src":"61514:5:69"},{"kind":"number","nativeSrc":"61521:1:69","nodeType":"YulLiteral","src":"61521:1:69","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"61510:3:69","nodeType":"YulIdentifier","src":"61510:3:69"},"nativeSrc":"61510:13:69","nodeType":"YulFunctionCall","src":"61510:13:69"},"variableNames":[{"name":"start","nativeSrc":"61501:5:69","nodeType":"YulIdentifier","src":"61501:5:69"}]}]},"pre":{"nativeSrc":"61481:2:69","nodeType":"YulBlock","src":"61481:2:69","statements":[]},"src":"61477:120:69"}]},"name":"clear_storage_range_t_bytes1","nativeSrc":"61417:186:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nativeSrc":"61455:5:69","nodeType":"YulTypedName","src":"61455:5:69","type":""},{"name":"end","nativeSrc":"61462:3:69","nodeType":"YulTypedName","src":"61462:3:69","type":""}],"src":"61417:186:69"},{"body":{"nativeSrc":"61688:464:69","nodeType":"YulBlock","src":"61688:464:69","statements":[{"body":{"nativeSrc":"61714:431:69","nodeType":"YulBlock","src":"61714:431:69","statements":[{"nativeSrc":"61728:54:69","nodeType":"YulVariableDeclaration","src":"61728:54:69","value":{"arguments":[{"name":"array","nativeSrc":"61776:5:69","nodeType":"YulIdentifier","src":"61776:5:69"}],"functionName":{"name":"array_dataslot_t_string_storage","nativeSrc":"61744:31:69","nodeType":"YulIdentifier","src":"61744:31:69"},"nativeSrc":"61744:38:69","nodeType":"YulFunctionCall","src":"61744:38:69"},"variables":[{"name":"dataArea","nativeSrc":"61732:8:69","nodeType":"YulTypedName","src":"61732:8:69","type":""}]},{"nativeSrc":"61795:63:69","nodeType":"YulVariableDeclaration","src":"61795:63:69","value":{"arguments":[{"name":"dataArea","nativeSrc":"61818:8:69","nodeType":"YulIdentifier","src":"61818:8:69"},{"arguments":[{"name":"startIndex","nativeSrc":"61846:10:69","nodeType":"YulIdentifier","src":"61846:10:69"}],"functionName":{"name":"divide_by_32_ceil","nativeSrc":"61828:17:69","nodeType":"YulIdentifier","src":"61828:17:69"},"nativeSrc":"61828:29:69","nodeType":"YulFunctionCall","src":"61828:29:69"}],"functionName":{"name":"add","nativeSrc":"61814:3:69","nodeType":"YulIdentifier","src":"61814:3:69"},"nativeSrc":"61814:44:69","nodeType":"YulFunctionCall","src":"61814:44:69"},"variables":[{"name":"deleteStart","nativeSrc":"61799:11:69","nodeType":"YulTypedName","src":"61799:11:69","type":""}]},{"body":{"nativeSrc":"62015:27:69","nodeType":"YulBlock","src":"62015:27:69","statements":[{"nativeSrc":"62017:23:69","nodeType":"YulAssignment","src":"62017:23:69","value":{"name":"dataArea","nativeSrc":"62032:8:69","nodeType":"YulIdentifier","src":"62032:8:69"},"variableNames":[{"name":"deleteStart","nativeSrc":"62017:11:69","nodeType":"YulIdentifier","src":"62017:11:69"}]}]},"condition":{"arguments":[{"name":"startIndex","nativeSrc":"61999:10:69","nodeType":"YulIdentifier","src":"61999:10:69"},{"kind":"number","nativeSrc":"62011:2:69","nodeType":"YulLiteral","src":"62011:2:69","type":"","value":"32"}],"functionName":{"name":"lt","nativeSrc":"61996:2:69","nodeType":"YulIdentifier","src":"61996:2:69"},"nativeSrc":"61996:18:69","nodeType":"YulFunctionCall","src":"61996:18:69"},"nativeSrc":"61993:49:69","nodeType":"YulIf","src":"61993:49:69"},{"expression":{"arguments":[{"name":"deleteStart","nativeSrc":"62084:11:69","nodeType":"YulIdentifier","src":"62084:11:69"},{"arguments":[{"name":"dataArea","nativeSrc":"62101:8:69","nodeType":"YulIdentifier","src":"62101:8:69"},{"arguments":[{"name":"len","nativeSrc":"62129:3:69","nodeType":"YulIdentifier","src":"62129:3:69"}],"functionName":{"name":"divide_by_32_ceil","nativeSrc":"62111:17:69","nodeType":"YulIdentifier","src":"62111:17:69"},"nativeSrc":"62111:22:69","nodeType":"YulFunctionCall","src":"62111:22:69"}],"functionName":{"name":"add","nativeSrc":"62097:3:69","nodeType":"YulIdentifier","src":"62097:3:69"},"nativeSrc":"62097:37:69","nodeType":"YulFunctionCall","src":"62097:37:69"}],"functionName":{"name":"clear_storage_range_t_bytes1","nativeSrc":"62055:28:69","nodeType":"YulIdentifier","src":"62055:28:69"},"nativeSrc":"62055:80:69","nodeType":"YulFunctionCall","src":"62055:80:69"},"nativeSrc":"62055:80:69","nodeType":"YulExpressionStatement","src":"62055:80:69"}]},"condition":{"arguments":[{"name":"len","nativeSrc":"61705:3:69","nodeType":"YulIdentifier","src":"61705:3:69"},{"kind":"number","nativeSrc":"61710:2:69","nodeType":"YulLiteral","src":"61710:2:69","type":"","value":"31"}],"functionName":{"name":"gt","nativeSrc":"61702:2:69","nodeType":"YulIdentifier","src":"61702:2:69"},"nativeSrc":"61702:11:69","nodeType":"YulFunctionCall","src":"61702:11:69"},"nativeSrc":"61699:446:69","nodeType":"YulIf","src":"61699:446:69"}]},"name":"clean_up_bytearray_end_slots_t_string_storage","nativeSrc":"61609:543:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nativeSrc":"61664:5:69","nodeType":"YulTypedName","src":"61664:5:69","type":""},{"name":"len","nativeSrc":"61671:3:69","nodeType":"YulTypedName","src":"61671:3:69","type":""},{"name":"startIndex","nativeSrc":"61676:10:69","nodeType":"YulTypedName","src":"61676:10:69","type":""}],"src":"61609:543:69"},{"body":{"nativeSrc":"62221:54:69","nodeType":"YulBlock","src":"62221:54:69","statements":[{"nativeSrc":"62231:37:69","nodeType":"YulAssignment","src":"62231:37:69","value":{"arguments":[{"name":"bits","nativeSrc":"62256:4:69","nodeType":"YulIdentifier","src":"62256:4:69"},{"name":"value","nativeSrc":"62262:5:69","nodeType":"YulIdentifier","src":"62262:5:69"}],"functionName":{"name":"shr","nativeSrc":"62252:3:69","nodeType":"YulIdentifier","src":"62252:3:69"},"nativeSrc":"62252:16:69","nodeType":"YulFunctionCall","src":"62252:16:69"},"variableNames":[{"name":"newValue","nativeSrc":"62231:8:69","nodeType":"YulIdentifier","src":"62231:8:69"}]}]},"name":"shift_right_unsigned_dynamic","nativeSrc":"62158:117:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"bits","nativeSrc":"62196:4:69","nodeType":"YulTypedName","src":"62196:4:69","type":""},{"name":"value","nativeSrc":"62202:5:69","nodeType":"YulTypedName","src":"62202:5:69","type":""}],"returnVariables":[{"name":"newValue","nativeSrc":"62212:8:69","nodeType":"YulTypedName","src":"62212:8:69","type":""}],"src":"62158:117:69"},{"body":{"nativeSrc":"62332:118:69","nodeType":"YulBlock","src":"62332:118:69","statements":[{"nativeSrc":"62342:68:69","nodeType":"YulVariableDeclaration","src":"62342:68:69","value":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"62391:1:69","nodeType":"YulLiteral","src":"62391:1:69","type":"","value":"8"},{"name":"bytes","nativeSrc":"62394:5:69","nodeType":"YulIdentifier","src":"62394:5:69"}],"functionName":{"name":"mul","nativeSrc":"62387:3:69","nodeType":"YulIdentifier","src":"62387:3:69"},"nativeSrc":"62387:13:69","nodeType":"YulFunctionCall","src":"62387:13:69"},{"arguments":[{"kind":"number","nativeSrc":"62406:1:69","nodeType":"YulLiteral","src":"62406:1:69","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"62402:3:69","nodeType":"YulIdentifier","src":"62402:3:69"},"nativeSrc":"62402:6:69","nodeType":"YulFunctionCall","src":"62402:6:69"}],"functionName":{"name":"shift_right_unsigned_dynamic","nativeSrc":"62358:28:69","nodeType":"YulIdentifier","src":"62358:28:69"},"nativeSrc":"62358:51:69","nodeType":"YulFunctionCall","src":"62358:51:69"}],"functionName":{"name":"not","nativeSrc":"62354:3:69","nodeType":"YulIdentifier","src":"62354:3:69"},"nativeSrc":"62354:56:69","nodeType":"YulFunctionCall","src":"62354:56:69"},"variables":[{"name":"mask","nativeSrc":"62346:4:69","nodeType":"YulTypedName","src":"62346:4:69","type":""}]},{"nativeSrc":"62419:25:69","nodeType":"YulAssignment","src":"62419:25:69","value":{"arguments":[{"name":"data","nativeSrc":"62433:4:69","nodeType":"YulIdentifier","src":"62433:4:69"},{"name":"mask","nativeSrc":"62439:4:69","nodeType":"YulIdentifier","src":"62439:4:69"}],"functionName":{"name":"and","nativeSrc":"62429:3:69","nodeType":"YulIdentifier","src":"62429:3:69"},"nativeSrc":"62429:15:69","nodeType":"YulFunctionCall","src":"62429:15:69"},"variableNames":[{"name":"result","nativeSrc":"62419:6:69","nodeType":"YulIdentifier","src":"62419:6:69"}]}]},"name":"mask_bytes_dynamic","nativeSrc":"62281:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nativeSrc":"62309:4:69","nodeType":"YulTypedName","src":"62309:4:69","type":""},{"name":"bytes","nativeSrc":"62315:5:69","nodeType":"YulTypedName","src":"62315:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"62325:6:69","nodeType":"YulTypedName","src":"62325:6:69","type":""}],"src":"62281:169:69"},{"body":{"nativeSrc":"62536:214:69","nodeType":"YulBlock","src":"62536:214:69","statements":[{"nativeSrc":"62669:37:69","nodeType":"YulAssignment","src":"62669:37:69","value":{"arguments":[{"name":"data","nativeSrc":"62696:4:69","nodeType":"YulIdentifier","src":"62696:4:69"},{"name":"len","nativeSrc":"62702:3:69","nodeType":"YulIdentifier","src":"62702:3:69"}],"functionName":{"name":"mask_bytes_dynamic","nativeSrc":"62677:18:69","nodeType":"YulIdentifier","src":"62677:18:69"},"nativeSrc":"62677:29:69","nodeType":"YulFunctionCall","src":"62677:29:69"},"variableNames":[{"name":"data","nativeSrc":"62669:4:69","nodeType":"YulIdentifier","src":"62669:4:69"}]},{"nativeSrc":"62715:29:69","nodeType":"YulAssignment","src":"62715:29:69","value":{"arguments":[{"name":"data","nativeSrc":"62726:4:69","nodeType":"YulIdentifier","src":"62726:4:69"},{"arguments":[{"kind":"number","nativeSrc":"62736:1:69","nodeType":"YulLiteral","src":"62736:1:69","type":"","value":"2"},{"name":"len","nativeSrc":"62739:3:69","nodeType":"YulIdentifier","src":"62739:3:69"}],"functionName":{"name":"mul","nativeSrc":"62732:3:69","nodeType":"YulIdentifier","src":"62732:3:69"},"nativeSrc":"62732:11:69","nodeType":"YulFunctionCall","src":"62732:11:69"}],"functionName":{"name":"or","nativeSrc":"62723:2:69","nodeType":"YulIdentifier","src":"62723:2:69"},"nativeSrc":"62723:21:69","nodeType":"YulFunctionCall","src":"62723:21:69"},"variableNames":[{"name":"used","nativeSrc":"62715:4:69","nodeType":"YulIdentifier","src":"62715:4:69"}]}]},"name":"extract_used_part_and_set_length_of_short_byte_array","nativeSrc":"62455:295:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nativeSrc":"62517:4:69","nodeType":"YulTypedName","src":"62517:4:69","type":""},{"name":"len","nativeSrc":"62523:3:69","nodeType":"YulTypedName","src":"62523:3:69","type":""}],"returnVariables":[{"name":"used","nativeSrc":"62531:4:69","nodeType":"YulTypedName","src":"62531:4:69","type":""}],"src":"62455:295:69"},{"body":{"nativeSrc":"62847:1303:69","nodeType":"YulBlock","src":"62847:1303:69","statements":[{"nativeSrc":"62858:51:69","nodeType":"YulVariableDeclaration","src":"62858:51:69","value":{"arguments":[{"name":"src","nativeSrc":"62905:3:69","nodeType":"YulIdentifier","src":"62905:3:69"}],"functionName":{"name":"array_length_t_string_memory_ptr","nativeSrc":"62872:32:69","nodeType":"YulIdentifier","src":"62872:32:69"},"nativeSrc":"62872:37:69","nodeType":"YulFunctionCall","src":"62872:37:69"},"variables":[{"name":"newLen","nativeSrc":"62862:6:69","nodeType":"YulTypedName","src":"62862:6:69","type":""}]},{"body":{"nativeSrc":"62994:22:69","nodeType":"YulBlock","src":"62994:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"62996:16:69","nodeType":"YulIdentifier","src":"62996:16:69"},"nativeSrc":"62996:18:69","nodeType":"YulFunctionCall","src":"62996:18:69"},"nativeSrc":"62996:18:69","nodeType":"YulExpressionStatement","src":"62996:18:69"}]},"condition":{"arguments":[{"name":"newLen","nativeSrc":"62966:6:69","nodeType":"YulIdentifier","src":"62966:6:69"},{"kind":"number","nativeSrc":"62974:18:69","nodeType":"YulLiteral","src":"62974:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"62963:2:69","nodeType":"YulIdentifier","src":"62963:2:69"},"nativeSrc":"62963:30:69","nodeType":"YulFunctionCall","src":"62963:30:69"},"nativeSrc":"62960:56:69","nodeType":"YulIf","src":"62960:56:69"},{"nativeSrc":"63026:52:69","nodeType":"YulVariableDeclaration","src":"63026:52:69","value":{"arguments":[{"arguments":[{"name":"slot","nativeSrc":"63072:4:69","nodeType":"YulIdentifier","src":"63072:4:69"}],"functionName":{"name":"sload","nativeSrc":"63066:5:69","nodeType":"YulIdentifier","src":"63066:5:69"},"nativeSrc":"63066:11:69","nodeType":"YulFunctionCall","src":"63066:11:69"}],"functionName":{"name":"extract_byte_array_length","nativeSrc":"63040:25:69","nodeType":"YulIdentifier","src":"63040:25:69"},"nativeSrc":"63040:38:69","nodeType":"YulFunctionCall","src":"63040:38:69"},"variables":[{"name":"oldLen","nativeSrc":"63030:6:69","nodeType":"YulTypedName","src":"63030:6:69","type":""}]},{"expression":{"arguments":[{"name":"slot","nativeSrc":"63171:4:69","nodeType":"YulIdentifier","src":"63171:4:69"},{"name":"oldLen","nativeSrc":"63177:6:69","nodeType":"YulIdentifier","src":"63177:6:69"},{"name":"newLen","nativeSrc":"63185:6:69","nodeType":"YulIdentifier","src":"63185:6:69"}],"functionName":{"name":"clean_up_bytearray_end_slots_t_string_storage","nativeSrc":"63125:45:69","nodeType":"YulIdentifier","src":"63125:45:69"},"nativeSrc":"63125:67:69","nodeType":"YulFunctionCall","src":"63125:67:69"},"nativeSrc":"63125:67:69","nodeType":"YulExpressionStatement","src":"63125:67:69"},{"nativeSrc":"63202:18:69","nodeType":"YulVariableDeclaration","src":"63202:18:69","value":{"kind":"number","nativeSrc":"63219:1:69","nodeType":"YulLiteral","src":"63219:1:69","type":"","value":"0"},"variables":[{"name":"srcOffset","nativeSrc":"63206:9:69","nodeType":"YulTypedName","src":"63206:9:69","type":""}]},{"nativeSrc":"63230:17:69","nodeType":"YulAssignment","src":"63230:17:69","value":{"kind":"number","nativeSrc":"63243:4:69","nodeType":"YulLiteral","src":"63243:4:69","type":"","value":"0x20"},"variableNames":[{"name":"srcOffset","nativeSrc":"63230:9:69","nodeType":"YulIdentifier","src":"63230:9:69"}]},{"cases":[{"body":{"nativeSrc":"63294:611:69","nodeType":"YulBlock","src":"63294:611:69","statements":[{"nativeSrc":"63308:37:69","nodeType":"YulVariableDeclaration","src":"63308:37:69","value":{"arguments":[{"name":"newLen","nativeSrc":"63327:6:69","nodeType":"YulIdentifier","src":"63327:6:69"},{"arguments":[{"kind":"number","nativeSrc":"63339:4:69","nodeType":"YulLiteral","src":"63339:4:69","type":"","value":"0x1f"}],"functionName":{"name":"not","nativeSrc":"63335:3:69","nodeType":"YulIdentifier","src":"63335:3:69"},"nativeSrc":"63335:9:69","nodeType":"YulFunctionCall","src":"63335:9:69"}],"functionName":{"name":"and","nativeSrc":"63323:3:69","nodeType":"YulIdentifier","src":"63323:3:69"},"nativeSrc":"63323:22:69","nodeType":"YulFunctionCall","src":"63323:22:69"},"variables":[{"name":"loopEnd","nativeSrc":"63312:7:69","nodeType":"YulTypedName","src":"63312:7:69","type":""}]},{"nativeSrc":"63359:51:69","nodeType":"YulVariableDeclaration","src":"63359:51:69","value":{"arguments":[{"name":"slot","nativeSrc":"63405:4:69","nodeType":"YulIdentifier","src":"63405:4:69"}],"functionName":{"name":"array_dataslot_t_string_storage","nativeSrc":"63373:31:69","nodeType":"YulIdentifier","src":"63373:31:69"},"nativeSrc":"63373:37:69","nodeType":"YulFunctionCall","src":"63373:37:69"},"variables":[{"name":"dstPtr","nativeSrc":"63363:6:69","nodeType":"YulTypedName","src":"63363:6:69","type":""}]},{"nativeSrc":"63423:10:69","nodeType":"YulVariableDeclaration","src":"63423:10:69","value":{"kind":"number","nativeSrc":"63432:1:69","nodeType":"YulLiteral","src":"63432:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"63427:1:69","nodeType":"YulTypedName","src":"63427:1:69","type":""}]},{"body":{"nativeSrc":"63491:163:69","nodeType":"YulBlock","src":"63491:163:69","statements":[{"expression":{"arguments":[{"name":"dstPtr","nativeSrc":"63516:6:69","nodeType":"YulIdentifier","src":"63516:6:69"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"63534:3:69","nodeType":"YulIdentifier","src":"63534:3:69"},{"name":"srcOffset","nativeSrc":"63539:9:69","nodeType":"YulIdentifier","src":"63539:9:69"}],"functionName":{"name":"add","nativeSrc":"63530:3:69","nodeType":"YulIdentifier","src":"63530:3:69"},"nativeSrc":"63530:19:69","nodeType":"YulFunctionCall","src":"63530:19:69"}],"functionName":{"name":"mload","nativeSrc":"63524:5:69","nodeType":"YulIdentifier","src":"63524:5:69"},"nativeSrc":"63524:26:69","nodeType":"YulFunctionCall","src":"63524:26:69"}],"functionName":{"name":"sstore","nativeSrc":"63509:6:69","nodeType":"YulIdentifier","src":"63509:6:69"},"nativeSrc":"63509:42:69","nodeType":"YulFunctionCall","src":"63509:42:69"},"nativeSrc":"63509:42:69","nodeType":"YulExpressionStatement","src":"63509:42:69"},{"nativeSrc":"63568:24:69","nodeType":"YulAssignment","src":"63568:24:69","value":{"arguments":[{"name":"dstPtr","nativeSrc":"63582:6:69","nodeType":"YulIdentifier","src":"63582:6:69"},{"kind":"number","nativeSrc":"63590:1:69","nodeType":"YulLiteral","src":"63590:1:69","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"63578:3:69","nodeType":"YulIdentifier","src":"63578:3:69"},"nativeSrc":"63578:14:69","nodeType":"YulFunctionCall","src":"63578:14:69"},"variableNames":[{"name":"dstPtr","nativeSrc":"63568:6:69","nodeType":"YulIdentifier","src":"63568:6:69"}]},{"nativeSrc":"63609:31:69","nodeType":"YulAssignment","src":"63609:31:69","value":{"arguments":[{"name":"srcOffset","nativeSrc":"63626:9:69","nodeType":"YulIdentifier","src":"63626:9:69"},{"kind":"number","nativeSrc":"63637:2:69","nodeType":"YulLiteral","src":"63637:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"63622:3:69","nodeType":"YulIdentifier","src":"63622:3:69"},"nativeSrc":"63622:18:69","nodeType":"YulFunctionCall","src":"63622:18:69"},"variableNames":[{"name":"srcOffset","nativeSrc":"63609:9:69","nodeType":"YulIdentifier","src":"63609:9:69"}]}]},"condition":{"arguments":[{"name":"i","nativeSrc":"63457:1:69","nodeType":"YulIdentifier","src":"63457:1:69"},{"name":"loopEnd","nativeSrc":"63460:7:69","nodeType":"YulIdentifier","src":"63460:7:69"}],"functionName":{"name":"lt","nativeSrc":"63454:2:69","nodeType":"YulIdentifier","src":"63454:2:69"},"nativeSrc":"63454:14:69","nodeType":"YulFunctionCall","src":"63454:14:69"},"nativeSrc":"63446:208:69","nodeType":"YulForLoop","post":{"nativeSrc":"63469:21:69","nodeType":"YulBlock","src":"63469:21:69","statements":[{"nativeSrc":"63471:17:69","nodeType":"YulAssignment","src":"63471:17:69","value":{"arguments":[{"name":"i","nativeSrc":"63480:1:69","nodeType":"YulIdentifier","src":"63480:1:69"},{"kind":"number","nativeSrc":"63483:4:69","nodeType":"YulLiteral","src":"63483:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"63476:3:69","nodeType":"YulIdentifier","src":"63476:3:69"},"nativeSrc":"63476:12:69","nodeType":"YulFunctionCall","src":"63476:12:69"},"variableNames":[{"name":"i","nativeSrc":"63471:1:69","nodeType":"YulIdentifier","src":"63471:1:69"}]}]},"pre":{"nativeSrc":"63450:3:69","nodeType":"YulBlock","src":"63450:3:69","statements":[]},"src":"63446:208:69"},{"body":{"nativeSrc":"63690:156:69","nodeType":"YulBlock","src":"63690:156:69","statements":[{"nativeSrc":"63708:43:69","nodeType":"YulVariableDeclaration","src":"63708:43:69","value":{"arguments":[{"arguments":[{"name":"src","nativeSrc":"63735:3:69","nodeType":"YulIdentifier","src":"63735:3:69"},{"name":"srcOffset","nativeSrc":"63740:9:69","nodeType":"YulIdentifier","src":"63740:9:69"}],"functionName":{"name":"add","nativeSrc":"63731:3:69","nodeType":"YulIdentifier","src":"63731:3:69"},"nativeSrc":"63731:19:69","nodeType":"YulFunctionCall","src":"63731:19:69"}],"functionName":{"name":"mload","nativeSrc":"63725:5:69","nodeType":"YulIdentifier","src":"63725:5:69"},"nativeSrc":"63725:26:69","nodeType":"YulFunctionCall","src":"63725:26:69"},"variables":[{"name":"lastValue","nativeSrc":"63712:9:69","nodeType":"YulTypedName","src":"63712:9:69","type":""}]},{"expression":{"arguments":[{"name":"dstPtr","nativeSrc":"63775:6:69","nodeType":"YulIdentifier","src":"63775:6:69"},{"arguments":[{"name":"lastValue","nativeSrc":"63802:9:69","nodeType":"YulIdentifier","src":"63802:9:69"},{"arguments":[{"name":"newLen","nativeSrc":"63817:6:69","nodeType":"YulIdentifier","src":"63817:6:69"},{"kind":"number","nativeSrc":"63825:4:69","nodeType":"YulLiteral","src":"63825:4:69","type":"","value":"0x1f"}],"functionName":{"name":"and","nativeSrc":"63813:3:69","nodeType":"YulIdentifier","src":"63813:3:69"},"nativeSrc":"63813:17:69","nodeType":"YulFunctionCall","src":"63813:17:69"}],"functionName":{"name":"mask_bytes_dynamic","nativeSrc":"63783:18:69","nodeType":"YulIdentifier","src":"63783:18:69"},"nativeSrc":"63783:48:69","nodeType":"YulFunctionCall","src":"63783:48:69"}],"functionName":{"name":"sstore","nativeSrc":"63768:6:69","nodeType":"YulIdentifier","src":"63768:6:69"},"nativeSrc":"63768:64:69","nodeType":"YulFunctionCall","src":"63768:64:69"},"nativeSrc":"63768:64:69","nodeType":"YulExpressionStatement","src":"63768:64:69"}]},"condition":{"arguments":[{"name":"loopEnd","nativeSrc":"63673:7:69","nodeType":"YulIdentifier","src":"63673:7:69"},{"name":"newLen","nativeSrc":"63682:6:69","nodeType":"YulIdentifier","src":"63682:6:69"}],"functionName":{"name":"lt","nativeSrc":"63670:2:69","nodeType":"YulIdentifier","src":"63670:2:69"},"nativeSrc":"63670:19:69","nodeType":"YulFunctionCall","src":"63670:19:69"},"nativeSrc":"63667:179:69","nodeType":"YulIf","src":"63667:179:69"},{"expression":{"arguments":[{"name":"slot","nativeSrc":"63866:4:69","nodeType":"YulIdentifier","src":"63866:4:69"},{"arguments":[{"arguments":[{"name":"newLen","nativeSrc":"63880:6:69","nodeType":"YulIdentifier","src":"63880:6:69"},{"kind":"number","nativeSrc":"63888:1:69","nodeType":"YulLiteral","src":"63888:1:69","type":"","value":"2"}],"functionName":{"name":"mul","nativeSrc":"63876:3:69","nodeType":"YulIdentifier","src":"63876:3:69"},"nativeSrc":"63876:14:69","nodeType":"YulFunctionCall","src":"63876:14:69"},{"kind":"number","nativeSrc":"63892:1:69","nodeType":"YulLiteral","src":"63892:1:69","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"63872:3:69","nodeType":"YulIdentifier","src":"63872:3:69"},"nativeSrc":"63872:22:69","nodeType":"YulFunctionCall","src":"63872:22:69"}],"functionName":{"name":"sstore","nativeSrc":"63859:6:69","nodeType":"YulIdentifier","src":"63859:6:69"},"nativeSrc":"63859:36:69","nodeType":"YulFunctionCall","src":"63859:36:69"},"nativeSrc":"63859:36:69","nodeType":"YulExpressionStatement","src":"63859:36:69"}]},"nativeSrc":"63287:618:69","nodeType":"YulCase","src":"63287:618:69","value":{"kind":"number","nativeSrc":"63292:1:69","nodeType":"YulLiteral","src":"63292:1:69","type":"","value":"1"}},{"body":{"nativeSrc":"63922:222:69","nodeType":"YulBlock","src":"63922:222:69","statements":[{"nativeSrc":"63936:14:69","nodeType":"YulVariableDeclaration","src":"63936:14:69","value":{"kind":"number","nativeSrc":"63949:1:69","nodeType":"YulLiteral","src":"63949:1:69","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"63940:5:69","nodeType":"YulTypedName","src":"63940:5:69","type":""}]},{"body":{"nativeSrc":"63973:67:69","nodeType":"YulBlock","src":"63973:67:69","statements":[{"nativeSrc":"63991:35:69","nodeType":"YulAssignment","src":"63991:35:69","value":{"arguments":[{"arguments":[{"name":"src","nativeSrc":"64010:3:69","nodeType":"YulIdentifier","src":"64010:3:69"},{"name":"srcOffset","nativeSrc":"64015:9:69","nodeType":"YulIdentifier","src":"64015:9:69"}],"functionName":{"name":"add","nativeSrc":"64006:3:69","nodeType":"YulIdentifier","src":"64006:3:69"},"nativeSrc":"64006:19:69","nodeType":"YulFunctionCall","src":"64006:19:69"}],"functionName":{"name":"mload","nativeSrc":"64000:5:69","nodeType":"YulIdentifier","src":"64000:5:69"},"nativeSrc":"64000:26:69","nodeType":"YulFunctionCall","src":"64000:26:69"},"variableNames":[{"name":"value","nativeSrc":"63991:5:69","nodeType":"YulIdentifier","src":"63991:5:69"}]}]},"condition":{"name":"newLen","nativeSrc":"63966:6:69","nodeType":"YulIdentifier","src":"63966:6:69"},"nativeSrc":"63963:77:69","nodeType":"YulIf","src":"63963:77:69"},{"expression":{"arguments":[{"name":"slot","nativeSrc":"64060:4:69","nodeType":"YulIdentifier","src":"64060:4:69"},{"arguments":[{"name":"value","nativeSrc":"64119:5:69","nodeType":"YulIdentifier","src":"64119:5:69"},{"name":"newLen","nativeSrc":"64126:6:69","nodeType":"YulIdentifier","src":"64126:6:69"}],"functionName":{"name":"extract_used_part_and_set_length_of_short_byte_array","nativeSrc":"64066:52:69","nodeType":"YulIdentifier","src":"64066:52:69"},"nativeSrc":"64066:67:69","nodeType":"YulFunctionCall","src":"64066:67:69"}],"functionName":{"name":"sstore","nativeSrc":"64053:6:69","nodeType":"YulIdentifier","src":"64053:6:69"},"nativeSrc":"64053:81:69","nodeType":"YulFunctionCall","src":"64053:81:69"},"nativeSrc":"64053:81:69","nodeType":"YulExpressionStatement","src":"64053:81:69"}]},"nativeSrc":"63914:230:69","nodeType":"YulCase","src":"63914:230:69","value":"default"}],"expression":{"arguments":[{"name":"newLen","nativeSrc":"63267:6:69","nodeType":"YulIdentifier","src":"63267:6:69"},{"kind":"number","nativeSrc":"63275:2:69","nodeType":"YulLiteral","src":"63275:2:69","type":"","value":"31"}],"functionName":{"name":"gt","nativeSrc":"63264:2:69","nodeType":"YulIdentifier","src":"63264:2:69"},"nativeSrc":"63264:14:69","nodeType":"YulFunctionCall","src":"63264:14:69"},"nativeSrc":"63257:887:69","nodeType":"YulSwitch","src":"63257:887:69"}]},"name":"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage","nativeSrc":"62755:1395:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nativeSrc":"62836:4:69","nodeType":"YulTypedName","src":"62836:4:69","type":""},{"name":"src","nativeSrc":"62842:3:69","nodeType":"YulTypedName","src":"62842:3:69","type":""}],"src":"62755:1395:69"},{"body":{"nativeSrc":"64262:65:69","nodeType":"YulBlock","src":"64262:65:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"64284:6:69","nodeType":"YulIdentifier","src":"64284:6:69"},{"kind":"number","nativeSrc":"64292:1:69","nodeType":"YulLiteral","src":"64292:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"64280:3:69","nodeType":"YulIdentifier","src":"64280:3:69"},"nativeSrc":"64280:14:69","nodeType":"YulFunctionCall","src":"64280:14:69"},{"hexValue":"4d6174683a206d756c446976206f766572666c6f77","kind":"string","nativeSrc":"64296:23:69","nodeType":"YulLiteral","src":"64296:23:69","type":"","value":"Math: mulDiv overflow"}],"functionName":{"name":"mstore","nativeSrc":"64273:6:69","nodeType":"YulIdentifier","src":"64273:6:69"},"nativeSrc":"64273:47:69","nodeType":"YulFunctionCall","src":"64273:47:69"},"nativeSrc":"64273:47:69","nodeType":"YulExpressionStatement","src":"64273:47:69"}]},"name":"store_literal_in_memory_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851","nativeSrc":"64156:171:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"64254:6:69","nodeType":"YulTypedName","src":"64254:6:69","type":""}],"src":"64156:171:69"},{"body":{"nativeSrc":"64479:220:69","nodeType":"YulBlock","src":"64479:220:69","statements":[{"nativeSrc":"64489:74:69","nodeType":"YulAssignment","src":"64489:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"64555:3:69","nodeType":"YulIdentifier","src":"64555:3:69"},{"kind":"number","nativeSrc":"64560:2:69","nodeType":"YulLiteral","src":"64560:2:69","type":"","value":"21"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"64496:58:69","nodeType":"YulIdentifier","src":"64496:58:69"},"nativeSrc":"64496:67:69","nodeType":"YulFunctionCall","src":"64496:67:69"},"variableNames":[{"name":"pos","nativeSrc":"64489:3:69","nodeType":"YulIdentifier","src":"64489:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"64661:3:69","nodeType":"YulIdentifier","src":"64661:3:69"}],"functionName":{"name":"store_literal_in_memory_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851","nativeSrc":"64572:88:69","nodeType":"YulIdentifier","src":"64572:88:69"},"nativeSrc":"64572:93:69","nodeType":"YulFunctionCall","src":"64572:93:69"},"nativeSrc":"64572:93:69","nodeType":"YulExpressionStatement","src":"64572:93:69"},{"nativeSrc":"64674:19:69","nodeType":"YulAssignment","src":"64674:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"64685:3:69","nodeType":"YulIdentifier","src":"64685:3:69"},{"kind":"number","nativeSrc":"64690:2:69","nodeType":"YulLiteral","src":"64690:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"64681:3:69","nodeType":"YulIdentifier","src":"64681:3:69"},"nativeSrc":"64681:12:69","nodeType":"YulFunctionCall","src":"64681:12:69"},"variableNames":[{"name":"end","nativeSrc":"64674:3:69","nodeType":"YulIdentifier","src":"64674:3:69"}]}]},"name":"abi_encode_t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851_to_t_string_memory_ptr_fromStack","nativeSrc":"64333:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"64467:3:69","nodeType":"YulTypedName","src":"64467:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"64475:3:69","nodeType":"YulTypedName","src":"64475:3:69","type":""}],"src":"64333:366:69"},{"body":{"nativeSrc":"64876:248:69","nodeType":"YulBlock","src":"64876:248:69","statements":[{"nativeSrc":"64886:26:69","nodeType":"YulAssignment","src":"64886:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"64898:9:69","nodeType":"YulIdentifier","src":"64898:9:69"},{"kind":"number","nativeSrc":"64909:2:69","nodeType":"YulLiteral","src":"64909:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"64894:3:69","nodeType":"YulIdentifier","src":"64894:3:69"},"nativeSrc":"64894:18:69","nodeType":"YulFunctionCall","src":"64894:18:69"},"variableNames":[{"name":"tail","nativeSrc":"64886:4:69","nodeType":"YulIdentifier","src":"64886:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"64933:9:69","nodeType":"YulIdentifier","src":"64933:9:69"},{"kind":"number","nativeSrc":"64944:1:69","nodeType":"YulLiteral","src":"64944:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"64929:3:69","nodeType":"YulIdentifier","src":"64929:3:69"},"nativeSrc":"64929:17:69","nodeType":"YulFunctionCall","src":"64929:17:69"},{"arguments":[{"name":"tail","nativeSrc":"64952:4:69","nodeType":"YulIdentifier","src":"64952:4:69"},{"name":"headStart","nativeSrc":"64958:9:69","nodeType":"YulIdentifier","src":"64958:9:69"}],"functionName":{"name":"sub","nativeSrc":"64948:3:69","nodeType":"YulIdentifier","src":"64948:3:69"},"nativeSrc":"64948:20:69","nodeType":"YulFunctionCall","src":"64948:20:69"}],"functionName":{"name":"mstore","nativeSrc":"64922:6:69","nodeType":"YulIdentifier","src":"64922:6:69"},"nativeSrc":"64922:47:69","nodeType":"YulFunctionCall","src":"64922:47:69"},"nativeSrc":"64922:47:69","nodeType":"YulExpressionStatement","src":"64922:47:69"},{"nativeSrc":"64978:139:69","nodeType":"YulAssignment","src":"64978:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"65112:4:69","nodeType":"YulIdentifier","src":"65112:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851_to_t_string_memory_ptr_fromStack","nativeSrc":"64986:124:69","nodeType":"YulIdentifier","src":"64986:124:69"},"nativeSrc":"64986:131:69","nodeType":"YulFunctionCall","src":"64986:131:69"},"variableNames":[{"name":"tail","nativeSrc":"64978:4:69","nodeType":"YulIdentifier","src":"64978:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"64705:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"64856:9:69","nodeType":"YulTypedName","src":"64856:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"64871:4:69","nodeType":"YulTypedName","src":"64871:4:69","type":""}],"src":"64705:419:69"},{"body":{"nativeSrc":"65236:135:69","nodeType":"YulBlock","src":"65236:135:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"65258:6:69","nodeType":"YulIdentifier","src":"65258:6:69"},{"kind":"number","nativeSrc":"65266:1:69","nodeType":"YulLiteral","src":"65266:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"65254:3:69","nodeType":"YulIdentifier","src":"65254:3:69"},"nativeSrc":"65254:14:69","nodeType":"YulFunctionCall","src":"65254:14:69"},{"hexValue":"5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f","kind":"string","nativeSrc":"65270:34:69","nodeType":"YulLiteral","src":"65270:34:69","type":"","value":"SafeERC20: approve from non-zero"}],"functionName":{"name":"mstore","nativeSrc":"65247:6:69","nodeType":"YulIdentifier","src":"65247:6:69"},"nativeSrc":"65247:58:69","nodeType":"YulFunctionCall","src":"65247:58:69"},"nativeSrc":"65247:58:69","nodeType":"YulExpressionStatement","src":"65247:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"65326:6:69","nodeType":"YulIdentifier","src":"65326:6:69"},{"kind":"number","nativeSrc":"65334:2:69","nodeType":"YulLiteral","src":"65334:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"65322:3:69","nodeType":"YulIdentifier","src":"65322:3:69"},"nativeSrc":"65322:15:69","nodeType":"YulFunctionCall","src":"65322:15:69"},{"hexValue":"20746f206e6f6e2d7a65726f20616c6c6f77616e6365","kind":"string","nativeSrc":"65339:24:69","nodeType":"YulLiteral","src":"65339:24:69","type":"","value":" to non-zero allowance"}],"functionName":{"name":"mstore","nativeSrc":"65315:6:69","nodeType":"YulIdentifier","src":"65315:6:69"},"nativeSrc":"65315:49:69","nodeType":"YulFunctionCall","src":"65315:49:69"},"nativeSrc":"65315:49:69","nodeType":"YulExpressionStatement","src":"65315:49:69"}]},"name":"store_literal_in_memory_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25","nativeSrc":"65130:241:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"65228:6:69","nodeType":"YulTypedName","src":"65228:6:69","type":""}],"src":"65130:241:69"},{"body":{"nativeSrc":"65523:220:69","nodeType":"YulBlock","src":"65523:220:69","statements":[{"nativeSrc":"65533:74:69","nodeType":"YulAssignment","src":"65533:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"65599:3:69","nodeType":"YulIdentifier","src":"65599:3:69"},{"kind":"number","nativeSrc":"65604:2:69","nodeType":"YulLiteral","src":"65604:2:69","type":"","value":"54"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"65540:58:69","nodeType":"YulIdentifier","src":"65540:58:69"},"nativeSrc":"65540:67:69","nodeType":"YulFunctionCall","src":"65540:67:69"},"variableNames":[{"name":"pos","nativeSrc":"65533:3:69","nodeType":"YulIdentifier","src":"65533:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"65705:3:69","nodeType":"YulIdentifier","src":"65705:3:69"}],"functionName":{"name":"store_literal_in_memory_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25","nativeSrc":"65616:88:69","nodeType":"YulIdentifier","src":"65616:88:69"},"nativeSrc":"65616:93:69","nodeType":"YulFunctionCall","src":"65616:93:69"},"nativeSrc":"65616:93:69","nodeType":"YulExpressionStatement","src":"65616:93:69"},{"nativeSrc":"65718:19:69","nodeType":"YulAssignment","src":"65718:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"65729:3:69","nodeType":"YulIdentifier","src":"65729:3:69"},{"kind":"number","nativeSrc":"65734:2:69","nodeType":"YulLiteral","src":"65734:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"65725:3:69","nodeType":"YulIdentifier","src":"65725:3:69"},"nativeSrc":"65725:12:69","nodeType":"YulFunctionCall","src":"65725:12:69"},"variableNames":[{"name":"end","nativeSrc":"65718:3:69","nodeType":"YulIdentifier","src":"65718:3:69"}]}]},"name":"abi_encode_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25_to_t_string_memory_ptr_fromStack","nativeSrc":"65377:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"65511:3:69","nodeType":"YulTypedName","src":"65511:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"65519:3:69","nodeType":"YulTypedName","src":"65519:3:69","type":""}],"src":"65377:366:69"},{"body":{"nativeSrc":"65920:248:69","nodeType":"YulBlock","src":"65920:248:69","statements":[{"nativeSrc":"65930:26:69","nodeType":"YulAssignment","src":"65930:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"65942:9:69","nodeType":"YulIdentifier","src":"65942:9:69"},{"kind":"number","nativeSrc":"65953:2:69","nodeType":"YulLiteral","src":"65953:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"65938:3:69","nodeType":"YulIdentifier","src":"65938:3:69"},"nativeSrc":"65938:18:69","nodeType":"YulFunctionCall","src":"65938:18:69"},"variableNames":[{"name":"tail","nativeSrc":"65930:4:69","nodeType":"YulIdentifier","src":"65930:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"65977:9:69","nodeType":"YulIdentifier","src":"65977:9:69"},{"kind":"number","nativeSrc":"65988:1:69","nodeType":"YulLiteral","src":"65988:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"65973:3:69","nodeType":"YulIdentifier","src":"65973:3:69"},"nativeSrc":"65973:17:69","nodeType":"YulFunctionCall","src":"65973:17:69"},{"arguments":[{"name":"tail","nativeSrc":"65996:4:69","nodeType":"YulIdentifier","src":"65996:4:69"},{"name":"headStart","nativeSrc":"66002:9:69","nodeType":"YulIdentifier","src":"66002:9:69"}],"functionName":{"name":"sub","nativeSrc":"65992:3:69","nodeType":"YulIdentifier","src":"65992:3:69"},"nativeSrc":"65992:20:69","nodeType":"YulFunctionCall","src":"65992:20:69"}],"functionName":{"name":"mstore","nativeSrc":"65966:6:69","nodeType":"YulIdentifier","src":"65966:6:69"},"nativeSrc":"65966:47:69","nodeType":"YulFunctionCall","src":"65966:47:69"},"nativeSrc":"65966:47:69","nodeType":"YulExpressionStatement","src":"65966:47:69"},{"nativeSrc":"66022:139:69","nodeType":"YulAssignment","src":"66022:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"66156:4:69","nodeType":"YulIdentifier","src":"66156:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25_to_t_string_memory_ptr_fromStack","nativeSrc":"66030:124:69","nodeType":"YulIdentifier","src":"66030:124:69"},"nativeSrc":"66030:131:69","nodeType":"YulFunctionCall","src":"66030:131:69"},"variableNames":[{"name":"tail","nativeSrc":"66022:4:69","nodeType":"YulIdentifier","src":"66022:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"65749:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"65900:9:69","nodeType":"YulTypedName","src":"65900:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"65915:4:69","nodeType":"YulTypedName","src":"65915:4:69","type":""}],"src":"65749:419:69"},{"body":{"nativeSrc":"66232:40:69","nodeType":"YulBlock","src":"66232:40:69","statements":[{"nativeSrc":"66243:22:69","nodeType":"YulAssignment","src":"66243:22:69","value":{"arguments":[{"name":"value","nativeSrc":"66259:5:69","nodeType":"YulIdentifier","src":"66259:5:69"}],"functionName":{"name":"mload","nativeSrc":"66253:5:69","nodeType":"YulIdentifier","src":"66253:5:69"},"nativeSrc":"66253:12:69","nodeType":"YulFunctionCall","src":"66253:12:69"},"variableNames":[{"name":"length","nativeSrc":"66243:6:69","nodeType":"YulIdentifier","src":"66243:6:69"}]}]},"name":"array_length_t_bytes_memory_ptr","nativeSrc":"66174:98:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"66215:5:69","nodeType":"YulTypedName","src":"66215:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"66225:6:69","nodeType":"YulTypedName","src":"66225:6:69","type":""}],"src":"66174:98:69"},{"body":{"nativeSrc":"66391:34:69","nodeType":"YulBlock","src":"66391:34:69","statements":[{"nativeSrc":"66401:18:69","nodeType":"YulAssignment","src":"66401:18:69","value":{"name":"pos","nativeSrc":"66416:3:69","nodeType":"YulIdentifier","src":"66416:3:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"66401:11:69","nodeType":"YulIdentifier","src":"66401:11:69"}]}]},"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"66278:147:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"66363:3:69","nodeType":"YulTypedName","src":"66363:3:69","type":""},{"name":"length","nativeSrc":"66368:6:69","nodeType":"YulTypedName","src":"66368:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"66379:11:69","nodeType":"YulTypedName","src":"66379:11:69","type":""}],"src":"66278:147:69"},{"body":{"nativeSrc":"66539:278:69","nodeType":"YulBlock","src":"66539:278:69","statements":[{"nativeSrc":"66549:52:69","nodeType":"YulVariableDeclaration","src":"66549:52:69","value":{"arguments":[{"name":"value","nativeSrc":"66595:5:69","nodeType":"YulIdentifier","src":"66595:5:69"}],"functionName":{"name":"array_length_t_bytes_memory_ptr","nativeSrc":"66563:31:69","nodeType":"YulIdentifier","src":"66563:31:69"},"nativeSrc":"66563:38:69","nodeType":"YulFunctionCall","src":"66563:38:69"},"variables":[{"name":"length","nativeSrc":"66553:6:69","nodeType":"YulTypedName","src":"66553:6:69","type":""}]},{"nativeSrc":"66610:95:69","nodeType":"YulAssignment","src":"66610:95:69","value":{"arguments":[{"name":"pos","nativeSrc":"66693:3:69","nodeType":"YulIdentifier","src":"66693:3:69"},{"name":"length","nativeSrc":"66698:6:69","nodeType":"YulIdentifier","src":"66698:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"66617:75:69","nodeType":"YulIdentifier","src":"66617:75:69"},"nativeSrc":"66617:88:69","nodeType":"YulFunctionCall","src":"66617:88:69"},"variableNames":[{"name":"pos","nativeSrc":"66610:3:69","nodeType":"YulIdentifier","src":"66610:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"66753:5:69","nodeType":"YulIdentifier","src":"66753:5:69"},{"kind":"number","nativeSrc":"66760:4:69","nodeType":"YulLiteral","src":"66760:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"66749:3:69","nodeType":"YulIdentifier","src":"66749:3:69"},"nativeSrc":"66749:16:69","nodeType":"YulFunctionCall","src":"66749:16:69"},{"name":"pos","nativeSrc":"66767:3:69","nodeType":"YulIdentifier","src":"66767:3:69"},{"name":"length","nativeSrc":"66772:6:69","nodeType":"YulIdentifier","src":"66772:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"66714:34:69","nodeType":"YulIdentifier","src":"66714:34:69"},"nativeSrc":"66714:65:69","nodeType":"YulFunctionCall","src":"66714:65:69"},"nativeSrc":"66714:65:69","nodeType":"YulExpressionStatement","src":"66714:65:69"},{"nativeSrc":"66788:23:69","nodeType":"YulAssignment","src":"66788:23:69","value":{"arguments":[{"name":"pos","nativeSrc":"66799:3:69","nodeType":"YulIdentifier","src":"66799:3:69"},{"name":"length","nativeSrc":"66804:6:69","nodeType":"YulIdentifier","src":"66804:6:69"}],"functionName":{"name":"add","nativeSrc":"66795:3:69","nodeType":"YulIdentifier","src":"66795:3:69"},"nativeSrc":"66795:16:69","nodeType":"YulFunctionCall","src":"66795:16:69"},"variableNames":[{"name":"end","nativeSrc":"66788:3:69","nodeType":"YulIdentifier","src":"66788:3:69"}]}]},"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"66431:386:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"66520:5:69","nodeType":"YulTypedName","src":"66520:5:69","type":""},{"name":"pos","nativeSrc":"66527:3:69","nodeType":"YulTypedName","src":"66527:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"66535:3:69","nodeType":"YulTypedName","src":"66535:3:69","type":""}],"src":"66431:386:69"},{"body":{"nativeSrc":"66957:137:69","nodeType":"YulBlock","src":"66957:137:69","statements":[{"nativeSrc":"66968:100:69","nodeType":"YulAssignment","src":"66968:100:69","value":{"arguments":[{"name":"value0","nativeSrc":"67055:6:69","nodeType":"YulIdentifier","src":"67055:6:69"},{"name":"pos","nativeSrc":"67064:3:69","nodeType":"YulIdentifier","src":"67064:3:69"}],"functionName":{"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"66975:79:69","nodeType":"YulIdentifier","src":"66975:79:69"},"nativeSrc":"66975:93:69","nodeType":"YulFunctionCall","src":"66975:93:69"},"variableNames":[{"name":"pos","nativeSrc":"66968:3:69","nodeType":"YulIdentifier","src":"66968:3:69"}]},{"nativeSrc":"67078:10:69","nodeType":"YulAssignment","src":"67078:10:69","value":{"name":"pos","nativeSrc":"67085:3:69","nodeType":"YulIdentifier","src":"67085:3:69"},"variableNames":[{"name":"end","nativeSrc":"67078:3:69","nodeType":"YulIdentifier","src":"67078:3:69"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nativeSrc":"66823:271:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"66936:3:69","nodeType":"YulTypedName","src":"66936:3:69","type":""},{"name":"value0","nativeSrc":"66942:6:69","nodeType":"YulTypedName","src":"66942:6:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"66953:3:69","nodeType":"YulTypedName","src":"66953:3:69","type":""}],"src":"66823:271:69"},{"body":{"nativeSrc":"67206:119:69","nodeType":"YulBlock","src":"67206:119:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"67228:6:69","nodeType":"YulIdentifier","src":"67228:6:69"},{"kind":"number","nativeSrc":"67236:1:69","nodeType":"YulLiteral","src":"67236:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"67224:3:69","nodeType":"YulIdentifier","src":"67224:3:69"},"nativeSrc":"67224:14:69","nodeType":"YulFunctionCall","src":"67224:14:69"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f","kind":"string","nativeSrc":"67240:34:69","nodeType":"YulLiteral","src":"67240:34:69","type":"","value":"Address: insufficient balance fo"}],"functionName":{"name":"mstore","nativeSrc":"67217:6:69","nodeType":"YulIdentifier","src":"67217:6:69"},"nativeSrc":"67217:58:69","nodeType":"YulFunctionCall","src":"67217:58:69"},"nativeSrc":"67217:58:69","nodeType":"YulExpressionStatement","src":"67217:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"67296:6:69","nodeType":"YulIdentifier","src":"67296:6:69"},{"kind":"number","nativeSrc":"67304:2:69","nodeType":"YulLiteral","src":"67304:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"67292:3:69","nodeType":"YulIdentifier","src":"67292:3:69"},"nativeSrc":"67292:15:69","nodeType":"YulFunctionCall","src":"67292:15:69"},{"hexValue":"722063616c6c","kind":"string","nativeSrc":"67309:8:69","nodeType":"YulLiteral","src":"67309:8:69","type":"","value":"r call"}],"functionName":{"name":"mstore","nativeSrc":"67285:6:69","nodeType":"YulIdentifier","src":"67285:6:69"},"nativeSrc":"67285:33:69","nodeType":"YulFunctionCall","src":"67285:33:69"},"nativeSrc":"67285:33:69","nodeType":"YulExpressionStatement","src":"67285:33:69"}]},"name":"store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","nativeSrc":"67100:225:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"67198:6:69","nodeType":"YulTypedName","src":"67198:6:69","type":""}],"src":"67100:225:69"},{"body":{"nativeSrc":"67477:220:69","nodeType":"YulBlock","src":"67477:220:69","statements":[{"nativeSrc":"67487:74:69","nodeType":"YulAssignment","src":"67487:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"67553:3:69","nodeType":"YulIdentifier","src":"67553:3:69"},{"kind":"number","nativeSrc":"67558:2:69","nodeType":"YulLiteral","src":"67558:2:69","type":"","value":"38"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"67494:58:69","nodeType":"YulIdentifier","src":"67494:58:69"},"nativeSrc":"67494:67:69","nodeType":"YulFunctionCall","src":"67494:67:69"},"variableNames":[{"name":"pos","nativeSrc":"67487:3:69","nodeType":"YulIdentifier","src":"67487:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"67659:3:69","nodeType":"YulIdentifier","src":"67659:3:69"}],"functionName":{"name":"store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","nativeSrc":"67570:88:69","nodeType":"YulIdentifier","src":"67570:88:69"},"nativeSrc":"67570:93:69","nodeType":"YulFunctionCall","src":"67570:93:69"},"nativeSrc":"67570:93:69","nodeType":"YulExpressionStatement","src":"67570:93:69"},{"nativeSrc":"67672:19:69","nodeType":"YulAssignment","src":"67672:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"67683:3:69","nodeType":"YulIdentifier","src":"67683:3:69"},{"kind":"number","nativeSrc":"67688:2:69","nodeType":"YulLiteral","src":"67688:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"67679:3:69","nodeType":"YulIdentifier","src":"67679:3:69"},"nativeSrc":"67679:12:69","nodeType":"YulFunctionCall","src":"67679:12:69"},"variableNames":[{"name":"end","nativeSrc":"67672:3:69","nodeType":"YulIdentifier","src":"67672:3:69"}]}]},"name":"abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack","nativeSrc":"67331:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"67465:3:69","nodeType":"YulTypedName","src":"67465:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"67473:3:69","nodeType":"YulTypedName","src":"67473:3:69","type":""}],"src":"67331:366:69"},{"body":{"nativeSrc":"67874:248:69","nodeType":"YulBlock","src":"67874:248:69","statements":[{"nativeSrc":"67884:26:69","nodeType":"YulAssignment","src":"67884:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"67896:9:69","nodeType":"YulIdentifier","src":"67896:9:69"},{"kind":"number","nativeSrc":"67907:2:69","nodeType":"YulLiteral","src":"67907:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"67892:3:69","nodeType":"YulIdentifier","src":"67892:3:69"},"nativeSrc":"67892:18:69","nodeType":"YulFunctionCall","src":"67892:18:69"},"variableNames":[{"name":"tail","nativeSrc":"67884:4:69","nodeType":"YulIdentifier","src":"67884:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"67931:9:69","nodeType":"YulIdentifier","src":"67931:9:69"},{"kind":"number","nativeSrc":"67942:1:69","nodeType":"YulLiteral","src":"67942:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"67927:3:69","nodeType":"YulIdentifier","src":"67927:3:69"},"nativeSrc":"67927:17:69","nodeType":"YulFunctionCall","src":"67927:17:69"},{"arguments":[{"name":"tail","nativeSrc":"67950:4:69","nodeType":"YulIdentifier","src":"67950:4:69"},{"name":"headStart","nativeSrc":"67956:9:69","nodeType":"YulIdentifier","src":"67956:9:69"}],"functionName":{"name":"sub","nativeSrc":"67946:3:69","nodeType":"YulIdentifier","src":"67946:3:69"},"nativeSrc":"67946:20:69","nodeType":"YulFunctionCall","src":"67946:20:69"}],"functionName":{"name":"mstore","nativeSrc":"67920:6:69","nodeType":"YulIdentifier","src":"67920:6:69"},"nativeSrc":"67920:47:69","nodeType":"YulFunctionCall","src":"67920:47:69"},"nativeSrc":"67920:47:69","nodeType":"YulExpressionStatement","src":"67920:47:69"},{"nativeSrc":"67976:139:69","nodeType":"YulAssignment","src":"67976:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"68110:4:69","nodeType":"YulIdentifier","src":"68110:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack","nativeSrc":"67984:124:69","nodeType":"YulIdentifier","src":"67984:124:69"},"nativeSrc":"67984:131:69","nodeType":"YulFunctionCall","src":"67984:131:69"},"variableNames":[{"name":"tail","nativeSrc":"67976:4:69","nodeType":"YulIdentifier","src":"67976:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"67703:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"67854:9:69","nodeType":"YulTypedName","src":"67854:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"67869:4:69","nodeType":"YulTypedName","src":"67869:4:69","type":""}],"src":"67703:419:69"},{"body":{"nativeSrc":"68234:73:69","nodeType":"YulBlock","src":"68234:73:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"68256:6:69","nodeType":"YulIdentifier","src":"68256:6:69"},{"kind":"number","nativeSrc":"68264:1:69","nodeType":"YulLiteral","src":"68264:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"68252:3:69","nodeType":"YulIdentifier","src":"68252:3:69"},"nativeSrc":"68252:14:69","nodeType":"YulFunctionCall","src":"68252:14:69"},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","kind":"string","nativeSrc":"68268:31:69","nodeType":"YulLiteral","src":"68268:31:69","type":"","value":"Address: call to non-contract"}],"functionName":{"name":"mstore","nativeSrc":"68245:6:69","nodeType":"YulIdentifier","src":"68245:6:69"},"nativeSrc":"68245:55:69","nodeType":"YulFunctionCall","src":"68245:55:69"},"nativeSrc":"68245:55:69","nodeType":"YulExpressionStatement","src":"68245:55:69"}]},"name":"store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","nativeSrc":"68128:179:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"68226:6:69","nodeType":"YulTypedName","src":"68226:6:69","type":""}],"src":"68128:179:69"},{"body":{"nativeSrc":"68459:220:69","nodeType":"YulBlock","src":"68459:220:69","statements":[{"nativeSrc":"68469:74:69","nodeType":"YulAssignment","src":"68469:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"68535:3:69","nodeType":"YulIdentifier","src":"68535:3:69"},{"kind":"number","nativeSrc":"68540:2:69","nodeType":"YulLiteral","src":"68540:2:69","type":"","value":"29"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"68476:58:69","nodeType":"YulIdentifier","src":"68476:58:69"},"nativeSrc":"68476:67:69","nodeType":"YulFunctionCall","src":"68476:67:69"},"variableNames":[{"name":"pos","nativeSrc":"68469:3:69","nodeType":"YulIdentifier","src":"68469:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"68641:3:69","nodeType":"YulIdentifier","src":"68641:3:69"}],"functionName":{"name":"store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","nativeSrc":"68552:88:69","nodeType":"YulIdentifier","src":"68552:88:69"},"nativeSrc":"68552:93:69","nodeType":"YulFunctionCall","src":"68552:93:69"},"nativeSrc":"68552:93:69","nodeType":"YulExpressionStatement","src":"68552:93:69"},{"nativeSrc":"68654:19:69","nodeType":"YulAssignment","src":"68654:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"68665:3:69","nodeType":"YulIdentifier","src":"68665:3:69"},{"kind":"number","nativeSrc":"68670:2:69","nodeType":"YulLiteral","src":"68670:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"68661:3:69","nodeType":"YulIdentifier","src":"68661:3:69"},"nativeSrc":"68661:12:69","nodeType":"YulFunctionCall","src":"68661:12:69"},"variableNames":[{"name":"end","nativeSrc":"68654:3:69","nodeType":"YulIdentifier","src":"68654:3:69"}]}]},"name":"abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack","nativeSrc":"68313:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"68447:3:69","nodeType":"YulTypedName","src":"68447:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"68455:3:69","nodeType":"YulTypedName","src":"68455:3:69","type":""}],"src":"68313:366:69"},{"body":{"nativeSrc":"68856:248:69","nodeType":"YulBlock","src":"68856:248:69","statements":[{"nativeSrc":"68866:26:69","nodeType":"YulAssignment","src":"68866:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"68878:9:69","nodeType":"YulIdentifier","src":"68878:9:69"},{"kind":"number","nativeSrc":"68889:2:69","nodeType":"YulLiteral","src":"68889:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"68874:3:69","nodeType":"YulIdentifier","src":"68874:3:69"},"nativeSrc":"68874:18:69","nodeType":"YulFunctionCall","src":"68874:18:69"},"variableNames":[{"name":"tail","nativeSrc":"68866:4:69","nodeType":"YulIdentifier","src":"68866:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"68913:9:69","nodeType":"YulIdentifier","src":"68913:9:69"},{"kind":"number","nativeSrc":"68924:1:69","nodeType":"YulLiteral","src":"68924:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"68909:3:69","nodeType":"YulIdentifier","src":"68909:3:69"},"nativeSrc":"68909:17:69","nodeType":"YulFunctionCall","src":"68909:17:69"},{"arguments":[{"name":"tail","nativeSrc":"68932:4:69","nodeType":"YulIdentifier","src":"68932:4:69"},{"name":"headStart","nativeSrc":"68938:9:69","nodeType":"YulIdentifier","src":"68938:9:69"}],"functionName":{"name":"sub","nativeSrc":"68928:3:69","nodeType":"YulIdentifier","src":"68928:3:69"},"nativeSrc":"68928:20:69","nodeType":"YulFunctionCall","src":"68928:20:69"}],"functionName":{"name":"mstore","nativeSrc":"68902:6:69","nodeType":"YulIdentifier","src":"68902:6:69"},"nativeSrc":"68902:47:69","nodeType":"YulFunctionCall","src":"68902:47:69"},"nativeSrc":"68902:47:69","nodeType":"YulExpressionStatement","src":"68902:47:69"},{"nativeSrc":"68958:139:69","nodeType":"YulAssignment","src":"68958:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"69092:4:69","nodeType":"YulIdentifier","src":"69092:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack","nativeSrc":"68966:124:69","nodeType":"YulIdentifier","src":"68966:124:69"},"nativeSrc":"68966:131:69","nodeType":"YulFunctionCall","src":"68966:131:69"},"variableNames":[{"name":"tail","nativeSrc":"68958:4:69","nodeType":"YulIdentifier","src":"68958:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"68685:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"68836:9:69","nodeType":"YulTypedName","src":"68836:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"68851:4:69","nodeType":"YulTypedName","src":"68851:4:69","type":""}],"src":"68685:419:69"}]},"contents":"{\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint256(value))\n    }\n\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function array_length_t_string_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function copy_memory_to_memory_with_cleanup(src, dst, length) {\n\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n        let length := array_length_t_string_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0,  tail)\n\n    }\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function validator_revert_t_uint256(value) {\n        if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_uint256(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_bool(value) -> cleaned {\n        cleaned := iszero(iszero(value))\n    }\n\n    function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n        mstore(pos, cleanup_t_bool(value))\n    }\n\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_bool_to_t_bool_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function cleanup_t_contract$_IERC20Upgradeable_$1352(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function validator_revert_t_contract$_IERC20Upgradeable_$1352(value) {\n        if iszero(eq(value, cleanup_t_contract$_IERC20Upgradeable_$1352(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_IERC20Upgradeable_$1352(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_contract$_IERC20Upgradeable_$1352(value)\n    }\n\n    function abi_decode_tuple_t_contract$_IERC20Upgradeable_$1352(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_IERC20Upgradeable_$1352(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_uint8(value) -> cleaned {\n        cleaned := and(value, 0xff)\n    }\n\n    function abi_encode_t_uint8_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint8_to_t_uint8_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3 {\n        if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 96\n\n            value3 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function identity(value) -> ret {\n        ret := value\n    }\n\n    function convert_t_uint160_to_t_uint160(value) -> converted {\n        converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n    }\n\n    function convert_t_uint160_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_uint160(value)\n    }\n\n    function convert_t_contract$_IComptroller_$16789_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_IComptroller_$16789_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_IComptroller_$16789_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_IComptroller_$16789__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_IComptroller_$16789_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_uint256t_address(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function convert_t_contract$_VToken_$15506_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_VToken_$15506_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_VToken_$15506__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_uint256t_addresst_address(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_IAccessControlManagerV8_$5080__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function panic_error_0x11() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n\n    function checked_mul_t_uint256(x, y) -> product {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        let product_raw := mul(x, y)\n        product := cleanup_t_uint256(product_raw)\n\n        // overflow, if x != 0 and y != product/x\n        if iszero(\n            or(\n                iszero(x),\n                eq(y, div(product, x))\n            )\n        ) { panic_error_0x11() }\n\n    }\n\n    function panic_error_0x12() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n\n    function checked_div_t_uint256(x, y) -> r {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        if iszero(y) { panic_error_0x12() }\n\n        r := div(x, y)\n    }\n\n    function panic_error_0x22() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x22)\n        revert(0, 0x24)\n    }\n\n    function extract_byte_array_length(data) -> length {\n        length := div(data, 2)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) {\n            length := and(length, 0x7f)\n        }\n\n        if eq(outOfPlaceEncoding, lt(length, 32)) {\n            panic_error_0x22()\n        }\n    }\n\n    function checked_add_t_uint8(x, y) -> sum {\n        x := cleanup_t_uint8(x)\n        y := cleanup_t_uint8(y)\n        sum := add(x, y)\n\n        if gt(sum, 0xff) { panic_error_0x11() }\n\n    }\n\n    function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n        revert(0, 0)\n    }\n\n    function panic_error_0x41() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n\n    function finalize_allocation(memPtr, size) {\n        let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n        // protect against overflow\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n\n    function allocate_memory(size) -> memPtr {\n        memPtr := allocate_unbounded()\n        finalize_allocation(memPtr, size)\n    }\n\n    function array_allocation_size_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr(length) -> size {\n        // Make sure we can allocate memory without overflow\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n        size := mul(length, 0x20)\n\n        // add length slot\n        size := add(size, 0x20)\n\n    }\n\n    function revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_contract$_RewardsDistributor_$12324(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function validator_revert_t_contract$_RewardsDistributor_$12324(value) {\n        if iszero(eq(value, cleanup_t_contract$_RewardsDistributor_$12324(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_RewardsDistributor_$12324_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_contract$_RewardsDistributor_$12324(value)\n    }\n\n    // contract RewardsDistributor[]\n    function abi_decode_available_length_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory(offset, length, end) -> array {\n        array := allocate_memory(array_allocation_size_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr(length))\n        let dst := array\n\n        mstore(array, length)\n        dst := add(array, 0x20)\n\n        let srcEnd := add(offset, mul(length, 0x20))\n        if gt(srcEnd, end) {\n            revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n        }\n        for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n        {\n\n            let elementPos := src\n\n            mstore(dst, abi_decode_t_contract$_RewardsDistributor_$12324_fromMemory(elementPos, end))\n            dst := add(dst, 0x20)\n        }\n    }\n\n    // contract RewardsDistributor[]\n    function abi_decode_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory(offset, end) -> array {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        let length := mload(offset)\n        array := abi_decode_available_length_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory(add(offset, 0x20), length, end)\n    }\n\n    function abi_decode_tuple_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := mload(add(headStart, 0))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value0 := abi_decode_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function panic_error_0x32() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n\n    function abi_decode_t_contract$_IERC20Upgradeable_$1352_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_contract$_IERC20Upgradeable_$1352(value)\n    }\n\n    function abi_decode_tuple_t_contract$_IERC20Upgradeable_$1352_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_IERC20Upgradeable_$1352_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function array_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function array_dataslot_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(ptr) -> data {\n        data := ptr\n\n        data := add(ptr, 0x20)\n\n    }\n\n    function abi_encode_t_contract$_VToken_$15506_to_t_address(value, pos) {\n        mstore(pos, convert_t_contract$_VToken_$15506_to_t_address(value))\n    }\n\n    function abi_encodeUpdatedPos_t_contract$_VToken_$15506_to_t_address(value0, pos) -> updatedPos {\n        abi_encode_t_contract$_VToken_$15506_to_t_address(value0, pos)\n        updatedPos := add(pos, 0x20)\n    }\n\n    function array_nextElement_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(ptr) -> next {\n        next := add(ptr, 0x20)\n    }\n\n    // contract VToken[] -> address[]\n    function abi_encode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack(value, pos)  -> end  {\n        let length := array_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack(pos, length)\n        let baseRef := array_dataslot_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(value)\n        let srcPtr := baseRef\n        for { let i := 0 } lt(i, length) { i := add(i, 1) }\n        {\n            let elementValue0 := mload(srcPtr)\n            pos := abi_encodeUpdatedPos_t_contract$_VToken_$15506_to_t_address(elementValue0, pos)\n            srcPtr := array_nextElement_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(srcPtr)\n        }\n        end := pos\n    }\n\n    function abi_encode_tuple_t_address_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr__to_t_address_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        mstore(add(headStart, 32), sub(tail, headStart))\n        tail := abi_encode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack(value1,  tail)\n\n    }\n\n    function panic_error_0x21() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n\n    function validator_assert_t_enum$_IncomeType_$16797(value) {\n        if iszero(lt(value, 4)) { panic_error_0x21() }\n    }\n\n    function cleanup_t_enum$_IncomeType_$16797(value) -> cleaned {\n        cleaned := value validator_assert_t_enum$_IncomeType_$16797(value)\n    }\n\n    function convert_t_enum$_IncomeType_$16797_to_t_uint8(value) -> converted {\n        converted := cleanup_t_enum$_IncomeType_$16797(value)\n    }\n\n    function abi_encode_t_enum$_IncomeType_$16797_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, convert_t_enum$_IncomeType_$16797_to_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_enum$_IncomeType_$16797__to_t_address_t_address_t_uint8__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_enum$_IncomeType_$16797_to_t_uint8_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function checked_add_t_uint256(x, y) -> sum {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        sum := add(x, y)\n\n        if gt(x, sum) { panic_error_0x11() }\n\n    }\n\n    function validator_assert_t_enum$_Action_$9148(value) {\n        if iszero(lt(value, 9)) { panic_error_0x21() }\n    }\n\n    function cleanup_t_enum$_Action_$9148(value) -> cleaned {\n        cleaned := value validator_assert_t_enum$_Action_$9148(value)\n    }\n\n    function convert_t_enum$_Action_$9148_to_t_uint8(value) -> converted {\n        converted := cleanup_t_enum$_Action_$9148(value)\n    }\n\n    function abi_encode_t_enum$_Action_$9148_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, convert_t_enum$_Action_$9148_to_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_address_t_enum$_Action_$9148__to_t_address_t_uint8__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_enum$_Action_$9148_to_t_uint8_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function validator_revert_t_bool(value) {\n        if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_bool_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_bool(value)\n    }\n\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_bool_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function checked_sub_t_uint256(x, y) -> diff {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        diff := sub(x, y)\n\n        if gt(diff, x) { panic_error_0x11() }\n\n    }\n\n    function store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759(memPtr) {\n\n        mstore(add(memPtr, 0), \"Initializable: contract is alrea\")\n\n        mstore(add(memPtr, 32), \"dy initialized\")\n\n    }\n\n    function abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 46)\n        store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01(memPtr) {\n\n        mstore(add(memPtr, 0), \"deposit\")\n\n    }\n\n    function abi_encode_t_stringliteral_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 7)\n        store_literal_in_memory_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc(memPtr) {\n\n        mstore(add(memPtr, 0), \"Ownable2Step: caller is not the \")\n\n        mstore(add(memPtr, 32), \"new owner\")\n\n    }\n\n    function abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 41)\n        store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354(memPtr) {\n\n        mstore(add(memPtr, 0), \"mint\")\n\n    }\n\n    function abi_encode_t_stringliteral_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 4)\n        store_literal_in_memory_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: decreased allowance below\")\n\n        mstore(add(memPtr, 32), \" zero\")\n\n    }\n\n    function abi_encode_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 37)\n        store_literal_in_memory_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77(memPtr) {\n\n        mstore(add(memPtr, 0), \"withdraw\")\n\n    }\n\n    function abi_encode_t_stringliteral_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 8)\n        store_literal_in_memory_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609(memPtr) {\n\n        mstore(add(memPtr, 0), \"redeem\")\n\n    }\n\n    function abi_encode_t_stringliteral_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 6)\n        store_literal_in_memory_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function cleanup_t_contract$_ComptrollerInterface_$9353(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function validator_revert_t_contract$_ComptrollerInterface_$9353(value) {\n        if iszero(eq(value, cleanup_t_contract$_ComptrollerInterface_$9353(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_ComptrollerInterface_$9353_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_contract$_ComptrollerInterface_$9353(value)\n    }\n\n    function abi_decode_tuple_t_contract$_ComptrollerInterface_$9353_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_ComptrollerInterface_$9353_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_t_address_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_rational_1_by_1(value) -> cleaned {\n        cleaned := value\n    }\n\n    function convert_t_rational_1_by_1_to_t_uint8(value) -> converted {\n        converted := cleanup_t_uint8(identity(cleanup_t_rational_1_by_1(value)))\n    }\n\n    function abi_encode_t_rational_1_by_1_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, convert_t_rational_1_by_1_to_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_rational_1_by_1_to_t_uint8_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function shift_right_1_unsigned(value) -> newValue {\n        newValue :=\n\n        shr(1, value)\n\n    }\n\n    function checked_exp_helper(_power, _base, exponent, max) -> power, base {\n        power := _power\n        base  := _base\n        for { } gt(exponent, 1) {}\n        {\n            // overflow check for base * base\n            if gt(base, div(max, base)) { panic_error_0x11() }\n            if and(exponent, 1)\n            {\n                // No checks for power := mul(power, base) needed, because the check\n                // for base * base above is sufficient, since:\n                // |power| <= base (proof by induction) and thus:\n                // |power * base| <= base * base <= max <= |min| (for signed)\n                // (this is equally true for signed and unsigned exp)\n                power := mul(power, base)\n            }\n            base := mul(base, base)\n            exponent := shift_right_1_unsigned(exponent)\n        }\n    }\n\n    function checked_exp_unsigned(base, exponent, max) -> power {\n        // This function currently cannot be inlined because of the\n        // \"leave\" statements. We have to improve the optimizer.\n\n        // Note that 0**0 == 1\n        if iszero(exponent) { power := 1 leave }\n        if iszero(base) { power := 0 leave }\n\n        // Specializations for small bases\n        switch base\n        // 0 is handled above\n        case 1 { power := 1 leave }\n        case 2\n        {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := exp(2, exponent)\n            if gt(power, max) { panic_error_0x11() }\n            leave\n        }\n        if or(\n            and(lt(base, 11), lt(exponent, 78)),\n            and(lt(base, 307), lt(exponent, 32))\n        )\n        {\n            power := exp(base, exponent)\n            if gt(power, max) { panic_error_0x11() }\n            leave\n        }\n\n        power, base := checked_exp_helper(1, base, exponent, max)\n\n        if gt(power, div(max, base)) { panic_error_0x11() }\n        power := mul(power, base)\n    }\n\n    function checked_exp_t_uint256_t_uint8(base, exponent) -> power {\n        base := cleanup_t_uint256(base)\n        exponent := cleanup_t_uint8(exponent)\n\n        power := checked_exp_unsigned(base, exponent, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n\n    }\n\n    function store_literal_in_memory_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: approve from the zero add\")\n\n        mstore(add(memPtr, 32), \"ress\")\n\n    }\n\n    function abi_encode_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 36)\n        store_literal_in_memory_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: approve to the zero addre\")\n\n        mstore(add(memPtr, 32), \"ss\")\n\n    }\n\n    function abi_encode_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 34)\n        store_literal_in_memory_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe(memPtr) {\n\n        mstore(add(memPtr, 0), \"Ownable: caller is not the owner\")\n\n    }\n\n    function abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 32)\n        store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb(memPtr) {\n\n        mstore(add(memPtr, 0), \"invalid acess control manager ad\")\n\n        mstore(add(memPtr, 32), \"dress\")\n\n    }\n\n    function abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 37)\n        store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function store_literal_in_memory_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: insufficient allowance\")\n\n    }\n\n    function abi_encode_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 29)\n        store_literal_in_memory_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: transfer from the zero ad\")\n\n        mstore(add(memPtr, 32), \"dress\")\n\n    }\n\n    function abi_encode_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 37)\n        store_literal_in_memory_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: transfer to the zero addr\")\n\n        mstore(add(memPtr, 32), \"ess\")\n\n    }\n\n    function abi_encode_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 35)\n        store_literal_in_memory_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: transfer amount exceeds b\")\n\n        mstore(add(memPtr, 32), \"alance\")\n\n    }\n\n    function abi_encode_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 38)\n        store_literal_in_memory_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function validator_revert_t_uint8(value) {\n        if iszero(eq(value, cleanup_t_uint8(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_uint8_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_uint8(value)\n    }\n\n    function abi_decode_tuple_t_uint8_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint8_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function checked_sub_t_uint8(x, y) -> diff {\n        x := cleanup_t_uint8(x)\n        y := cleanup_t_uint8(y)\n        diff := sub(x, y)\n\n        if gt(diff, 0xff) { panic_error_0x11() }\n\n    }\n\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b(memPtr) {\n\n        mstore(add(memPtr, 0), \"Initializable: contract is not i\")\n\n        mstore(add(memPtr, 32), \"nitializing\")\n\n    }\n\n    function abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 43)\n        store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032(memPtr) {\n\n        mstore(add(memPtr, 0), \"Comptroller: Invalid maxLoopsLim\")\n\n        mstore(add(memPtr, 32), \"it\")\n\n    }\n\n    function abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 34)\n        store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619(memPtr) {\n\n        mstore(add(memPtr, 0), \"ReentrancyGuard: reentrant call\")\n\n    }\n\n    function abi_encode_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 31)\n        store_literal_in_memory_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137(memPtr) {\n\n        mstore(add(memPtr, 0), \"vTokensReceived at _deposit\")\n\n    }\n\n    function abi_encode_t_stringliteral_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 27)\n        store_literal_in_memory_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_address_t_string_memory_ptr__to_t_address_t_string_memory_ptr__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        mstore(add(headStart, 32), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value1,  tail)\n\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_string_memory_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        mstore(add(headStart, 64), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value2,  tail)\n\n    }\n\n    function store_literal_in_memory_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e(memPtr) {\n\n        mstore(add(memPtr, 0), \"actualVTokens at _beforeWithdraw\")\n\n    }\n\n    function abi_encode_t_stringliteral_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 32)\n        store_literal_in_memory_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n        revert(0, 0)\n    }\n\n    function array_allocation_size_t_string_memory_ptr(length) -> size {\n        // Make sure we can allocate memory without overflow\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n        size := round_up_to_mul_of_32(length)\n\n        // add length slot\n        size := add(size, 0x20)\n\n    }\n\n    function abi_decode_available_length_t_string_memory_ptr_fromMemory(src, length, end) -> array {\n        array := allocate_memory(array_allocation_size_t_string_memory_ptr(length))\n        mstore(array, length)\n        let dst := add(array, 0x20)\n        if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n        copy_memory_to_memory_with_cleanup(src, dst, length)\n    }\n\n    // string\n    function abi_decode_t_string_memory_ptr_fromMemory(offset, end) -> array {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        let length := mload(offset)\n        array := abi_decode_available_length_t_string_memory_ptr_fromMemory(add(offset, 0x20), length, end)\n    }\n\n    function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := mload(add(headStart, 0))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value0 := abi_decode_t_string_memory_ptr_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n        updated_pos := pos\n    }\n\n    function store_literal_in_memory_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC4626-Wrapped Venus \")\n\n    }\n\n    function abi_encode_t_stringliteral_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f_to_t_string_memory_ptr_nonPadded_inplace_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, 22)\n        store_literal_in_memory_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f(pos)\n        end := add(pos, 22)\n    }\n\n    function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n        let length := array_length_t_string_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, length)\n    }\n\n    function abi_encode_tuple_packed_t_stringliteral_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n        pos := abi_encode_t_stringliteral_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f_to_t_string_memory_ptr_nonPadded_inplace_fromStack( pos)\n\n        pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value0,  pos)\n\n        end := pos\n    }\n\n    function store_literal_in_memory_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526(memPtr) {\n\n        mstore(add(memPtr, 0), \"v4626\")\n\n    }\n\n    function abi_encode_t_stringliteral_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526_to_t_string_memory_ptr_nonPadded_inplace_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, 5)\n        store_literal_in_memory_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526(pos)\n        end := add(pos, 5)\n    }\n\n    function abi_encode_tuple_packed_t_stringliteral_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n        pos := abi_encode_t_stringliteral_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526_to_t_string_memory_ptr_nonPadded_inplace_fromStack( pos)\n\n        pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value0,  pos)\n\n        end := pos\n    }\n\n    function store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd(memPtr) {\n\n        mstore(add(memPtr, 0), \"SafeERC20: ERC20 operation did n\")\n\n        mstore(add(memPtr, 32), \"ot succeed\")\n\n    }\n\n    function abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 42)\n        store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function store_literal_in_memory_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: mint to the zero address\")\n\n    }\n\n    function abi_encode_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 31)\n        store_literal_in_memory_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: burn from the zero addres\")\n\n        mstore(add(memPtr, 32), \"s\")\n\n    }\n\n    function abi_encode_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 33)\n        store_literal_in_memory_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: burn amount exceeds balan\")\n\n        mstore(add(memPtr, 32), \"ce\")\n\n    }\n\n    function abi_encode_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 34)\n        store_literal_in_memory_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function array_dataslot_t_string_storage(ptr) -> data {\n        data := ptr\n\n        mstore(0, ptr)\n        data := keccak256(0, 0x20)\n\n    }\n\n    function divide_by_32_ceil(value) -> result {\n        result := div(add(value, 31), 32)\n    }\n\n    function shift_left_dynamic(bits, value) -> newValue {\n        newValue :=\n\n        shl(bits, value)\n\n    }\n\n    function update_byte_slice_dynamic32(value, shiftBytes, toInsert) -> result {\n        let shiftBits := mul(shiftBytes, 8)\n        let mask := shift_left_dynamic(shiftBits, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n        toInsert := shift_left_dynamic(shiftBits, toInsert)\n        value := and(value, not(mask))\n        result := or(value, and(toInsert, mask))\n    }\n\n    function convert_t_uint256_to_t_uint256(value) -> converted {\n        converted := cleanup_t_uint256(identity(cleanup_t_uint256(value)))\n    }\n\n    function prepare_store_t_uint256(value) -> ret {\n        ret := value\n    }\n\n    function update_storage_value_t_uint256_to_t_uint256(slot, offset, value_0) {\n        let convertedValue_0 := convert_t_uint256_to_t_uint256(value_0)\n        sstore(slot, update_byte_slice_dynamic32(sload(slot), offset, prepare_store_t_uint256(convertedValue_0)))\n    }\n\n    function zero_value_for_split_t_uint256() -> ret {\n        ret := 0\n    }\n\n    function storage_set_to_zero_t_uint256(slot, offset) {\n        let zero_0 := zero_value_for_split_t_uint256()\n        update_storage_value_t_uint256_to_t_uint256(slot, offset, zero_0)\n    }\n\n    function clear_storage_range_t_bytes1(start, end) {\n        for {} lt(start, end) { start := add(start, 1) }\n        {\n            storage_set_to_zero_t_uint256(start, 0)\n        }\n    }\n\n    function clean_up_bytearray_end_slots_t_string_storage(array, len, startIndex) {\n\n        if gt(len, 31) {\n            let dataArea := array_dataslot_t_string_storage(array)\n            let deleteStart := add(dataArea, divide_by_32_ceil(startIndex))\n            // If we are clearing array to be short byte array, we want to clear only data starting from array data area.\n            if lt(startIndex, 32) { deleteStart := dataArea }\n            clear_storage_range_t_bytes1(deleteStart, add(dataArea, divide_by_32_ceil(len)))\n        }\n\n    }\n\n    function shift_right_unsigned_dynamic(bits, value) -> newValue {\n        newValue :=\n\n        shr(bits, value)\n\n    }\n\n    function mask_bytes_dynamic(data, bytes) -> result {\n        let mask := not(shift_right_unsigned_dynamic(mul(8, bytes), not(0)))\n        result := and(data, mask)\n    }\n    function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used {\n        // we want to save only elements that are part of the array after resizing\n        // others should be set to zero\n        data := mask_bytes_dynamic(data, len)\n        used := or(data, mul(2, len))\n    }\n    function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src) {\n\n        let newLen := array_length_t_string_memory_ptr(src)\n        // Make sure array length is sane\n        if gt(newLen, 0xffffffffffffffff) { panic_error_0x41() }\n\n        let oldLen := extract_byte_array_length(sload(slot))\n\n        // potentially truncate data\n        clean_up_bytearray_end_slots_t_string_storage(slot, oldLen, newLen)\n\n        let srcOffset := 0\n\n        srcOffset := 0x20\n\n        switch gt(newLen, 31)\n        case 1 {\n            let loopEnd := and(newLen, not(0x1f))\n\n            let dstPtr := array_dataslot_t_string_storage(slot)\n            let i := 0\n            for { } lt(i, loopEnd) { i := add(i, 0x20) } {\n                sstore(dstPtr, mload(add(src, srcOffset)))\n                dstPtr := add(dstPtr, 1)\n                srcOffset := add(srcOffset, 32)\n            }\n            if lt(loopEnd, newLen) {\n                let lastValue := mload(add(src, srcOffset))\n                sstore(dstPtr, mask_bytes_dynamic(lastValue, and(newLen, 0x1f)))\n            }\n            sstore(slot, add(mul(newLen, 2), 1))\n        }\n        default {\n            let value := 0\n            if newLen {\n                value := mload(add(src, srcOffset))\n            }\n            sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n        }\n    }\n\n    function store_literal_in_memory_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851(memPtr) {\n\n        mstore(add(memPtr, 0), \"Math: mulDiv overflow\")\n\n    }\n\n    function abi_encode_t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 21)\n        store_literal_in_memory_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25(memPtr) {\n\n        mstore(add(memPtr, 0), \"SafeERC20: approve from non-zero\")\n\n        mstore(add(memPtr, 32), \" to non-zero allowance\")\n\n    }\n\n    function abi_encode_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 54)\n        store_literal_in_memory_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function array_length_t_bytes_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n        updated_pos := pos\n    }\n\n    function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n        let length := array_length_t_bytes_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, length)\n    }\n\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n        pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0,  pos)\n\n        end := pos\n    }\n\n    function store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c(memPtr) {\n\n        mstore(add(memPtr, 0), \"Address: insufficient balance fo\")\n\n        mstore(add(memPtr, 32), \"r call\")\n\n    }\n\n    function abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 38)\n        store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad(memPtr) {\n\n        mstore(add(memPtr, 0), \"Address: call to non-contract\")\n\n    }\n\n    function abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 29)\n        store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106102745760003560e01c806380d45a2d11610151578063be26317e116100c3578063d905777e11610087578063d905777e14610543578063dd62ed3e14610556578063e30c397814610569578063e521136f1461057a578063ef8b30f71461051d578063f2fde38b1461058d57600080fd5b8063be26317e146104ed578063c4d66de8146104f7578063c63d75b61461050a578063c6e6f5921461051d578063ce96cb771461053057600080fd5b8063a457c2d711610115578063a457c2d71461047d578063a9059cbb14610490578063b3d7f6b9146104a3578063b460af94146104b6578063b4a0bdf3146104c9578063ba087652146104da57600080fd5b806380d45a2d1461042a5780638da5cb5b1461043d57806394bf804d1461044e57806395d89b41146104615780639bb1a99c1461046957600080fd5b8063372500ab116101ea5780634cdad506116101ae5780634cdad506146102ac5780635fe3b567146103bd5780636e553f65146103de57806370a08231146103f1578063715018a61461041a57806379ba50971461042257600080fd5b8063372500ab1461036b57806338d52e0f146103735780633950935114610384578063402d267d1461039757806341e11a5a146103aa57600080fd5b80630e32cb861161023c5780630e32cb86146102f257806317f333401461030757806318160ddd146103285780631be195601461033057806323b872dd14610343578063313ce5671461035657600080fd5b806301e1d1141461027957806306fdde031461029757806307a2d13a146102ac578063095ea7b3146102bf5780630a28a477146102df575b600080fd5b6102816105a0565b60405161028e91906134b9565b60405180910390f35b61029f6106ae565b60405161028e919061351d565b6102816102ba366004613546565b610740565b6102d26102cd36600461358c565b610753565b60405161028e91906135d1565b6102816102ed366004613546565b61076b565b6103056103003660046135df565b610778565b005b6101935461031b906001600160a01b031681565b60405161028e9190613609565b603554610281565b61030561033e366004613636565b61078c565b6102d2610351366004613657565b61087e565b61035e6108a4565b60405161028e91906136b0565b6103056108c5565b6065546001600160a01b031661031b565b6102d261039236600461358c565b610bc7565b6102816103a53660046135df565b610be9565b6103056103b83660046136be565b610e21565b610192546103d1906001600160a01b031681565b60405161028e9190613764565b6102816103ec366004613772565b610ef3565b6102816103ff3660046135df565b6001600160a01b031660009081526033602052604090205490565b610305611038565b61030561104c565b610305610438366004613546565b611081565b6097546001600160a01b031661031b565b61028161045c366004613772565b6110c8565b61029f6111e7565b610191546103d1906001600160a01b031681565b6102d261048b36600461358c565b6111f6565b6102d261049e36600461358c565b61123e565b6102816104b1366004613546565b61124c565b6102816104c43660046137a5565b611259565b60fb546001600160a01b03166103d1565b6102816104e83660046137a5565b61136b565b61028161012d5481565b6103056105053660046135df565b611494565b6102816105183660046135df565b611698565b61028161052b366004613546565b6116a7565b61028161053e3660046135df565b6116b4565b6102816105513660046135df565b61188c565b6102816105643660046137eb565b611a6e565b60c9546001600160a01b031661031b565b6103056105883660046135df565b611a99565b61030561059b3660046135df565b611ae0565b6000670de0b6b3a764000061019160009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106239190613818565b610191546040516370a0823160e01b81526001600160a01b03909116906370a0823190610654903090600401613609565b602060405180830381865afa158015610671573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106959190613818565b61069f919061384f565b6106a99190613884565b905090565b6060603680546106bd906138ae565b80601f01602080910402602001604051908101604052809291908181526020018280546106e9906138ae565b80156107365780601f1061070b57610100808354040283529160200191610736565b820191906000526020600020905b81548152906001019060200180831161071957829003601f168201915b5050505050905090565b600061074d826000611b51565b92915050565b600033610761818585611b92565b5060019392505050565b600061074d826001611c39565b610780611c71565b61078981611c9b565b50565b610794611c71565b6040516370a0823160e01b81526000906001600160a01b038316906370a08231906107c3903090600401613609565b602060405180830381865afa1580156107e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108049190613818565b9050801561087a5760006108206097546001600160a01b031690565b905061082d838284611d14565b806001600160a01b0316836001600160a01b03167f6d25be279134f4ecaa4770aff0c3d916d9e7c5ef37b65ed95dbdba411f5d54d58460405161087091906134b9565b60405180910390a3505b5050565b60003361088c858285611d6f565b610897858585611db9565b60019150505b9392505050565b60006108ae611ea9565b6065546106a99190600160a01b900460ff166138da565b610192546101915461019354604080516361252fd160e01b815290516001600160a01b0394851694938416939092169160009185916361252fd19160048082019286929091908290030181865afa158015610924573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261094c9190810190613a09565b90506109588151611f29565b60005b8151811015610bc057600082828151811061097857610978613a44565b602002602001015190506000816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e69190613a5a565b60408051600180825281830190925291925060009190602080830190803683370190505090508681600081518110610a2057610a20613a44565b6001600160a01b039283166020918202929092010152604051624caeb160e41b8152908416906304caeb1090610a5c9030908590600401613ad8565b600060405180830381600087803b158015610a7657600080fd5b505af1158015610a8a573d6000803e3d6000fd5b50506040516370a0823160e01b8152600092506001600160a01b03851691506370a0823190610abd903090600401613609565b602060405180830381865afa158015610ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afe9190613818565b90508015610b6f57610b11838883611d14565b6040516305bebb3b60e21b81526001600160a01b038816906316faecec90610b42908c908790600290600401613b3c565b600060405180830381600087803b158015610b5c57600080fd5b505af1925050508015610b6d575060015b505b826001600160a01b03167fba56c3ab1f752776eef60db959a4e6b643e89595315edbbd945e104623fa03ba82604051610ba891906134b9565b60405180910390a250506001909201915061095b9050565b5050505050565b600033610761818585610bda8383611a6e565b610be49190613b64565b611b92565b6101925461019154604051630742d14b60e51b81526000926001600160a01b039081169263e85a296092610c2592909116908590600401613ba5565b602060405180830381865afa158015610c42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c669190613bd3565b15610c7357506000919050565b61019254610191546040516302c3bcbb60e01b81526000926001600160a01b03908116926302c3bcbb92610cad9290911690600401613609565b602060405180830381865afa158015610cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cee9190613818565b90506000670de0b6b3a764000061019160009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d739190613818565b61019160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610deb9190613818565b610df5919061384f565b610dff9190613884565b9050808211610e0f576000610e19565b610e198183613bf4565b949350505050565b600054600290610100900460ff16158015610e43575060005460ff8083169116105b610e685760405162461bcd60e51b8152600401610e5f90613c55565b60405180910390fd5b6000805461ffff191660ff831617610100179055610e8582611f54565b610e8e85611f7b565b610e9783611fb3565b610ea084612010565b610ea982612077565b6000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890610ee49083906136b0565b60405180910390a15050505050565b6000610efd612090565b610f0682611f54565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f809190613818565b5082600003610fa2576040516304dd32c560e11b8152600401610e5f90613c86565b610fab82610be9565b831115610fcb576040516326ac6ee160e01b815260040160405180910390fd5b6000610fd6846116a7565b905080600003610ff9576040516304dd32c560e11b8152600401610e5f90613c86565b600061100460355490565b9050611012338587856120bb565b60008161101e60355490565b6110289190613bf4565b935050505061074d600161015f55565b611040611c71565b61104a6000612077565b565b60c95433906001600160a01b031681146110785760405162461bcd60e51b8152600401610e5f90613cdc565b61078981612077565b6110bf6040518060400160405280601981526020017f7365744d61784c6f6f70734c696d69742875696e74323536290000000000000081525061245f565b61078981611fb3565b60006110d2612090565b6110db82611f54565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611131573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111559190613818565b5082600003611177576040516304dd32c560e11b8152600401610e5f90613d07565b61118082611698565b8311156111a0576040516340868f7960e01b815260040160405180910390fd5b60006111ab8461124c565b9050806000036111ce576040516304dd32c560e11b8152600401610e5f90613d07565b6111da338483876120bb565b905061074d600161015f55565b6060603780546106bd906138ae565b600033816112048286611a6e565b9050838110156112265760405162461bcd60e51b8152600401610e5f90613d59565b6112338286868403611b92565b506001949350505050565b600033610761818585611db9565b600061074d826001611b51565b6000611263612090565b61126c83611f54565b61127582611f54565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156112cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ef9190613818565b5083600003611311576040516304dd32c560e11b8152600401610e5f90613d88565b61131a826116b4565b84111561133a5760405163e9ed951560e01b815260040160405180910390fd5b600080611346866124f9565b9150915061135d6113543390565b868685856127ed565b91505061089d600161015f55565b6000611375612090565b61137e83611f54565b61138782611f54565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156113dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114019190613818565b5083600003611423576040516304dd32c560e11b8152600401610e5f90613db5565b61142c8261188c565b84111561144c57604051638890247960e01b815260040160405180910390fd5b600061145785612890565b90508060000361147a576040516304dd32c560e11b8152600401610e5f90613db5565b61148733858584896127ed565b905061089d600161015f55565b600054610100900460ff16158080156114b45750600054600160ff909116105b806114ce5750303b1580156114ce575060005460ff166001145b6114ea5760405162461bcd60e51b8152600401610e5f90613c55565b6000805460ff19166001179055801561150d576000805461ff0019166101001790555b61151682611f54565b61019180546001600160a01b0319166001600160a01b03841690811790915560408051635fe3b56760e01b81529051635fe3b567916004808201926020929091908290030181865afa158015611570573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115949190613a5a565b61019280546001600160a01b0319166001600160a01b039283161790556101915460408051636f307dc360e01b815290516000939290921691636f307dc3916004808201926020929091908290030181865afa1580156115f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161c9190613dd0565b905061163861162a82612ad3565b61163383612b61565b612bd9565b61164181612c0a565b611649612c3a565b50801561087a576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989061168c90600190613e05565b60405180910390a15050565b600061074d61052b6000610be9565b600061074d826000611c39565b6101925461019154604051630742d14b60e51b81526000926001600160a01b039081169263e85a2960926116f19290911690600190600401613ba5565b602060405180830381865afa15801561170e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117329190613bd3565b1561173f57506000919050565b6101915460408051631d8e90d160e11b815290516000926001600160a01b031691633b1d21a29160048083019260209291908290030181865afa15801561178a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ae9190613818565b9050600061019160009054906101000a90046001600160a01b03166001600160a01b0316638f840ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182a9190613818565b905060006118506102ba866001600160a01b031660009081526033602052604090205490565b90508183101561186557506000949350505050565b60006118718385613bf4565b90508181106118805781611882565b805b9695505050505050565b6101925461019154604051630742d14b60e51b81526000926001600160a01b039081169263e85a2960926118c99290911690600190600401613ba5565b602060405180830381865afa1580156118e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190a9190613bd3565b1561191757506000919050565b6101915460408051631d8e90d160e11b815290516000926001600160a01b031691633b1d21a29160048083019260209291908290030181865afa158015611962573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119869190613818565b9050600061019160009054906101000a90046001600160a01b03166001600160a01b0316638f840ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a029190613818565b905080821015611a16575060009392505050565b6000611a228284613bf4565b90506000611a2f826116a7565b90506000611a52876001600160a01b031660009081526033602052604090205490565b9050808210611a615780611a63565b815b979650505050505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b611ad76040518060400160405280601b81526020017f736574526577617264526563697069656e74286164647265737329000000000081525061245f565b61078981612010565b611ae8611c71565b60c980546001600160a01b0383166001600160a01b03199091168117909155611b196097546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600061089d611b5e6105a0565b611b69906001613b64565b611b71611ea9565b611b7c90600a613f21565b603554611b899190613b64565b85919085612c69565b6001600160a01b038316611bb85760405162461bcd60e51b8152600401610e5f90613f77565b6001600160a01b038216611bde5760405162461bcd60e51b8152600401610e5f90613fc6565b6001600160a01b0380841660008181526034602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108709085906134b9565b600061089d611c46611ea9565b611c5190600a613f21565b603554611c5e9190613b64565b611c666105a0565b611b89906001613b64565b6097546001600160a01b0316331461104a5760405162461bcd60e51b8152600401610e5f90614008565b6001600160a01b038116611cc15760405162461bcd60e51b8152600401610e5f9061405a565b60fb80546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa09061168c908390859061406a565b611d6a8363a9059cbb60e01b8484604051602401611d33929190614085565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612cc6565b505050565b6000611d7b8484611a6e565b90506000198114611db35781811015611da65760405162461bcd60e51b8152600401610e5f906140d4565b611db38484848403611b92565b50505050565b6001600160a01b038316611ddf5760405162461bcd60e51b8152600401610e5f90614126565b6001600160a01b038216611e055760405162461bcd60e51b8152600401610e5f90614176565b6001600160a01b03831660009081526033602052604090205481811015611e3e5760405162461bcd60e51b8152600401610e5f906141c9565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e9c9086906134b9565b60405180910390a3611db3565b6000611ebd6065546001600160a01b031690565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611efa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1e91906141ed565b6106a990601261420e565b61012d548111156107895761012d548160405163792bfb1b60e11b8152600401610e5f92919061422b565b6001600160a01b038116610789576040516342bcdf7f60e11b815260040160405180910390fd5b600054610100900460ff16611fa25760405162461bcd60e51b8152600401610e5f90614281565b611faa612d58565b61078981612d87565b61012d548111611fd55760405162461bcd60e51b8152600401610e5f906142d0565b61012d8054908290556040517fc2d09fef144f7c8a86f71ea459f8fc17f675768eb1ae369cbd77fb31d467aafa9061168c908390859061422b565b61201981611f54565b610193546040516001600160a01b038084169216907fc8c11bb97ac2ffa10ce2e2a98f4c1fd8df84cfa2e1a15e013ed2383ab1f527ad90600090a361019380546001600160a01b0319166001600160a01b0392909216919091179055565b60c980546001600160a01b031916905561078981612dae565b600261015f54036120b35760405162461bcd60e51b8152600401610e5f90614314565b600261015f55565b60006120cf6065546001600160a01b031690565b6001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016120fa9190613609565b602060405180830381865afa158015612117573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213b9190613818565b610191546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190612172903090600401613609565b602060405180830381865afa15801561218f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b39190613818565b90506121d26121ca6065546001600160a01b031690565b873087612e00565b6000826121e76065546001600160a01b031690565b6001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016122129190613609565b602060405180830381865afa15801561222f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122539190613818565b61225d9190613bf4565b905061226881612e21565b610191546040516370a0823160e01b815260009184916001600160a01b03909116906370a082319061229e903090600401613609565b602060405180830381865afa1580156122bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122df9190613818565b6122e99190613bf4565b90508060000361230c576040516304dd32c560e11b8152600401610e5f90614358565b6000670de0b6b3a764000061019160009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561236b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238f9190613818565b612399908461384f565b6123a39190613884565b905060006123f26123b2611ea9565b6123bd90600a613f21565b6035546123ca9190613b64565b836123d36105a0565b6123de906001613b64565b6123e89190613bf4565b8491906000612c69565b90506123fe8982612eed565b886001600160a01b03168a6001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78a8460405161244392919061422b565b60405180910390a350505050505050505050565b600161015f55565b60fb546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab906124929033908690600401614368565b602060405180830381865afa1580156124af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d39190613bd3565b90508061087a57333083604051634a3fa29360e01b8152600401610e5f93929190614388565b60008060006125106065546001600160a01b031690565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016125409190613609565b602060405180830381865afa15801561255d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125819190613818565b610191546040516370a0823160e01b81529192506000916001600160a01b03909116906370a08231906125b8903090600401613609565b602060405180830381865afa1580156125d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f99190613818565b6101915460405163852a12e360e01b81529192506000916001600160a01b039091169063852a12e390612630908a906004016134b9565b6020604051808303816000875af115801561264f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126739190613818565b905080156126965780604051630864657760e21b8152600401610e5f91906134b9565b6040516370a0823160e01b815283906001600160a01b038616906370a08231906126c4903090600401613609565b602060405180830381865afa1580156126e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127059190613818565b61270f9190613bf4565b610191546040516370a0823160e01b81529197506000916001600160a01b03909116906370a0823190612746903090600401613609565b602060405180830381865afa158015612763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127879190613818565b6127919084613bf4565b9050806000036127b4576040516304dd32c560e11b8152600401610e5f906143e7565b6127e16127bf611ea9565b6127ca90600a613f21565b6035546127d79190613b64565b8290856001612c69565b95505050505050915091565b826001600160a01b0316856001600160a01b03161461281157612811838683611d6f565b61281b8382612f83565b606554612832906001600160a01b03168584611d14565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db858560405161288192919061422b565b60405180910390a45050505050565b6000806128a56065546001600160a01b031690565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016128d59190613609565b602060405180830381865afa1580156128f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129169190613818565b610191546040516370a0823160e01b81529192506000916129ba916001600160a01b0316906370a082319061294f903090600401613609565b602060405180830381865afa15801561296c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129909190613818565b612998611ea9565b6129a390600a613f21565b6035546129b09190613b64565b8791906000612c69565b6101915460405163db006a7560e01b81529192506000916001600160a01b039091169063db006a75906129f19085906004016134b9565b6020604051808303816000875af1158015612a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a349190613818565b90508015612a575780604051630864657760e21b8152600401610e5f91906134b9565b6040516370a0823160e01b81526000906001600160a01b038616906370a0823190612a86903090600401613609565b602060405180830381865afa158015612aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac79190613818565b9050611a638482613bf4565b6060816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612b13573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b3b9190810190614482565b604051602001612b4b91906144df565b6040516020818303038152906040529050919050565b6060816001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612bc99190810190614482565b604051602001612b4b919061450e565b600054610100900460ff16612c005760405162461bcd60e51b8152600401610e5f90614281565b61087a828261303a565b600054610100900460ff16612c315760405162461bcd60e51b8152600401610e5f90614281565b6107898161307a565b600054610100900460ff16612c615760405162461bcd60e51b8152600401610e5f90614281565b61104a6130ff565b600080612c77868686613126565b90506001836002811115612c8d57612c8d613af8565b148015612caa575060008480612ca557612ca561386e565b868809115b15612cbd57612cba600182613b64565b90505b95945050505050565b6000612d1b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131e89092919063ffffffff16565b9050805160001480612d3c575080806020019051810190612d3c9190613bd3565b611d6a5760405162461bcd60e51b8152600401610e5f9061456b565b600054610100900460ff16612d7f5760405162461bcd60e51b8152600401610e5f90614281565b61104a6131f7565b600054610100900460ff166107805760405162461bcd60e51b8152600401610e5f90614281565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611db3846323b872dd60e01b858585604051602401611d339392919061457b565b61019154612e55906001600160a01b031682612e456065546001600160a01b031690565b6001600160a01b03169190613227565b6101915460405163140e25ad60e31b81526000916001600160a01b03169063a0712d6890612e879085906004016134b9565b6020604051808303816000875af1158015612ea6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eca9190613818565b9050801561087a5780604051630864657760e21b8152600401610e5f91906134b9565b6001600160a01b038216612f135760405162461bcd60e51b8152600401610e5f906145d7565b8060356000828254612f259190613b64565b90915550506001600160a01b038216600081815260336020526040808220805485019055517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612f779085906134b9565b60405180910390a35050565b6001600160a01b038216612fa95760405162461bcd60e51b8152600401610e5f90614625565b6001600160a01b03821660009081526033602052604090205481811015612fe25760405162461bcd60e51b8152600401610e5f90614674565b6001600160a01b0383166000818152603360205260408082208585039055603580548690039055519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906108709086906134b9565b600054610100900460ff166130615760405162461bcd60e51b8152600401610e5f90614281565b603661306d8382614715565b506037611d6a8282614715565b600054610100900460ff166130a15760405162461bcd60e51b8152600401610e5f90614281565b6000806130ad836132db565b91509150816130bd5760126130bf565b805b606580546001600160a01b039095166001600160a01b031960ff93909316600160a01b02929092166001600160a81b031990951694909417179092555050565b600054610100900460ff166124575760405162461bcd60e51b8152600401610e5f90614281565b6000808060001985870985870292508281108382030391505080600003613160578382816131565761315661386e565b049250505061089d565b80841161317f5760405162461bcd60e51b8152600401610e5f90614805565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6060610e1984846000856133b7565b600054610100900460ff1661321e5760405162461bcd60e51b8152600401610e5f90614281565b61104a33612077565b8015806132a05750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e9061325d903090869060040161406a565b602060405180830381865afa15801561327a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329e9190613818565b155b6132bc5760405162461bcd60e51b8152600401610e5f90614868565b611d6a8363095ea7b360e01b8484604051602401611d33929190614085565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290516000918291829182916001600160a01b0387169161332291614878565b600060405180830381855afa9150503d806000811461335d576040519150601f19603f3d011682016040523d82523d6000602084013e613362565b606091505b509150915081801561337657506020815110155b156133aa576000818060200190518101906133919190613818565b905060ff81116133a8576001969095509350505050565b505b5060009485945092505050565b6060824710156133d95760405162461bcd60e51b8152600401610e5f906148c7565b600080866001600160a01b031685876040516133f59190614878565b60006040518083038185875af1925050503d8060008114613432576040519150601f19603f3d011682016040523d82523d6000602084013e613437565b606091505b5091509150611a63878383876060831561348257825160000361347b576001600160a01b0385163b61347b5760405162461bcd60e51b8152600401610e5f9061490b565b5081610e19565b610e1983838151156134975781518083602001fd5b8060405162461bcd60e51b8152600401610e5f919061351d565b805b82525050565b6020810161074d82846134b1565b60005b838110156134e25781810151838201526020016134ca565b50506000910152565b60006134f5825190565b80845260208401935061350c8185602086016134c7565b601f01601f19169290920192915050565b6020808252810161089d81846134eb565b805b811461078957600080fd5b803561074d8161352e565b60006020828403121561355b5761355b600080fd5b6000610e19848461353b565b60006001600160a01b03821661074d565b61353081613567565b803561074d81613578565b600080604083850312156135a2576135a2600080fd5b60006135ae8585613581565b92505060206135bf8582860161353b565b9150509250929050565b8015156134b3565b6020810161074d82846135c9565b6000602082840312156135f4576135f4600080fd5b6000610e198484613581565b6134b381613567565b6020810161074d8284613600565b600061074d82613567565b61353081613617565b803561074d81613622565b60006020828403121561364b5761364b600080fd5b6000610e19848461362b565b60008060006060848603121561366f5761366f600080fd5b600061367b8686613581565b935050602061368c86828701613581565b925050604061369d8682870161353b565b9150509250925092565b60ff81166134b3565b6020810161074d82846136a7565b600080600080608085870312156136d7576136d7600080fd5b60006136e38787613581565b94505060206136f487828801613581565b93505060406137058782880161353b565b925050606061371687828801613581565b91505092959194509250565b600061074d6001600160a01b038316613739565b90565b6001600160a01b031690565b600061074d82613722565b600061074d82613745565b6134b381613750565b6020810161074d828461375b565b6000806040838503121561378857613788600080fd5b6000613794858561353b565b92505060206135bf85828601613581565b6000806000606084860312156137bd576137bd600080fd5b60006137c9868661353b565b93505060206137da86828701613581565b925050604061369d86828701613581565b6000806040838503121561380157613801600080fd5b60006137948585613581565b805161074d8161352e565b60006020828403121561382d5761382d600080fd5b6000610e19848461380d565b634e487b7160e01b600052601160045260246000fd5b81810280821583820485141761386757613867613839565b5092915050565b634e487b7160e01b600052601260045260246000fd5b6000826138935761389361386e565b500490565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806138c257607f821691505b6020821081036138d4576138d4613898565b50919050565b60ff91821691908116908282019081111561074d5761074d613839565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715613933576139336138f7565b6040525050565b600061394560405190565b9050613951828261390d565b919050565b600067ffffffffffffffff821115613970576139706138f7565b5060209081020190565b805161074d81613622565b600061399861399384613956565b61393a565b838152905060208082019084028301858111156139b7576139b7600080fd5b835b818110156139db57806139cc888261397a565b845250602092830192016139b9565b5050509392505050565b600082601f8301126139f9576139f9600080fd5b8151610e19848260208601613985565b600060208284031215613a1e57613a1e600080fd5b815167ffffffffffffffff811115613a3857613a38600080fd5b610e19848285016139e5565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613a6f57613a6f600080fd5b6000610e19848461397a565b6000613a87838361375b565b505060200190565b6000613a99825190565b80845260209384019383018060005b83811015613acd578151613abc8882613a7b565b975060208301925050600101613aa8565b509495945050505050565b60408101613ae68285613600565b8181036020830152610e198184613a8f565b634e487b7160e01b600052602160045260246000fd5b6004811061078957610789613af8565b8061395181613b0e565b600061074d82613b1e565b6134b381613b28565b60608101613b4a8286613600565b613b576020830185613600565b610e196040830184613b33565b8082018082111561074d5761074d613839565b6009811061078957610789613af8565b8061395181613b77565b600061074d82613b87565b6134b381613b91565b60408101613bb38285613600565b61089d6020830184613b9c565b801515613530565b805161074d81613bc0565b600060208284031215613be857613be8600080fd5b6000610e198484613bc8565b8181038181111561074d5761074d613839565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015291505b5060400190565b6020808252810161074d81613c07565b600781526000602082016619195c1bdcda5d60ca1b815291505b5060200190565b6020808252810161074d81613c65565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b60208201529150613c4e565b6020808252810161074d81613c96565b60048152600060208201631b5a5b9d60e21b81529150613c7f565b6020808252810161074d81613cec565b602581526000602082017f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77815264207a65726f60d81b60208201529150613c4e565b6020808252810161074d81613d17565b6008815260006020820167776974686472617760c01b81529150613c7f565b6020808252810161074d81613d69565b600681526000602082016572656465656d60d01b81529150613c7f565b6020808252810161074d81613d98565b805161074d81613578565b600060208284031215613de557613de5600080fd5b6000610e198484613dc5565b600060ff821661074d565b6134b381613df1565b6020810161074d8284613dfc565b80825b6001851115613e5257808604811115613e3157613e31613839565b6001851615613e3f57908102905b8002613e4b8560011c90565b9450613e16565b94509492505050565b600082613e6a5750600161089d565b81613e775750600061089d565b8160018114613e8d5760028114613e9757613ec4565b600191505061089d565b60ff841115613ea857613ea8613839565b8360020a915084821115613ebe57613ebe613839565b5061089d565b5060208310610133831016604e8410600b8410161715613ef7575081810a83811115613ef257613ef2613839565b61089d565b613f048484846001613e13565b92509050818404811115613f1a57613f1a613839565b0292915050565b600060ff8316925061089d6000198484613e5b565b602481526000602082017f45524332303a20617070726f76652066726f6d20746865207a65726f206164648152637265737360e01b60208201529150613c4e565b6020808252810161074d81613f36565b602281526000602082017f45524332303a20617070726f766520746f20746865207a65726f206164647265815261737360f01b60208201529150613c4e565b6020808252810161074d81613f87565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081526000613c7f565b6020808252810161074d81613fd6565b602581526000602082017f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b60208201529150613c4e565b6020808252810161074d81614018565b604081016140788285613600565b61089d6020830184613600565b604081016140938285613600565b61089d60208301846134b1565b601d81526000602082017f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000081529150613c7f565b6020808252810161074d816140a0565b602581526000602082017f45524332303a207472616e736665722066726f6d20746865207a65726f206164815264647265737360d81b60208201529150613c4e565b6020808252810161074d816140e4565b602381526000602082017f45524332303a207472616e7366657220746f20746865207a65726f206164647281526265737360e81b60208201529150613c4e565b6020808252810161074d81614136565b602681526000602082017f45524332303a207472616e7366657220616d6f756e7420657863656564732062815265616c616e636560d01b60208201529150613c4e565b6020808252810161074d81614186565b60ff8116613530565b805161074d816141d9565b60006020828403121561420257614202600080fd5b6000610e1984846141e2565b60ff91821691908116908282039081111561074d5761074d613839565b6040810161409382856134b1565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150613c4e565b6020808252810161074d81614239565b602281526000602082017f436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d8152611a5d60f21b60208201529150613c4e565b6020808252810161074d81614291565b601f81526000602082017f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081529150613c7f565b6020808252810161074d816142e0565b601b81526000602082017f76546f6b656e735265636569766564206174205f6465706f736974000000000081529150613c7f565b6020808252810161074d81614324565b604081016143768285613600565b8181036020830152610e1981846134eb565b606081016143968286613600565b6143a36020830185613600565b8181036040830152612cbd81846134eb565b60208082527f61637475616c56546f6b656e73206174205f6265666f7265576974686472617791019081526000613c7f565b6020808252810161074d816143b5565b600067ffffffffffffffff821115614411576144116138f7565b601f19601f83011660200192915050565b6000614430613993846143f7565b90508281526020810184848401111561444b5761444b600080fd5b6144568482856134c7565b509392505050565b600082601f83011261447257614472600080fd5b8151610e19848260208601614422565b60006020828403121561449757614497600080fd5b815167ffffffffffffffff8111156144b1576144b1600080fd5b610e198482850161445e565b60006144c7825190565b6144d58185602086016134c7565b9290920192915050565b75022a9219a1b191b16abb930b83832b2102b32b73ab9960551b81526000601682015b915061089d82846144bd565b643b1a1b191b60d91b8152600060058201614502565b602a81526000602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b60208201529150613c4e565b6020808252810161074d81614524565b606081016145898286613600565b6145966020830185613600565b610e1960408301846134b1565b601f81526000602082017f45524332303a206d696e7420746f20746865207a65726f20616464726573730081529150613c7f565b6020808252810161074d816145a3565b602181526000602082017f45524332303a206275726e2066726f6d20746865207a65726f206164647265738152607360f81b60208201529150613c4e565b6020808252810161074d816145e7565b602281526000602082017f45524332303a206275726e20616d6f756e7420657863656564732062616c616e815261636560f01b60208201529150613c4e565b6020808252810161074d81614635565b600061074d6137368381565b61469983614684565b815460001960089490940293841b1916921b91909117905550565b6000611d6a818484614690565b8181101561087a576146d46000826146b4565b6001016146c1565b601f821115611d6a576000818152602090206020601f850104810160208510156147035750805b610bc06020601f8601048301826146c1565b815167ffffffffffffffff81111561472f5761472f6138f7565b61473982546138ae565b6147448282856146dc565b6020601f83116001811461477857600084156147605750858201515b600019600886021c19811660028602178655506147d1565b600085815260208120601f198616915b828110156147a85788850151825560209485019460019092019101614788565b868310156147c45784890151600019601f89166008021c191682555b6001600288020188555050505b505050505050565b60158152600060208201744d6174683a206d756c446976206f766572666c6f7760581b81529150613c7f565b6020808252810161074d816147d9565b603681526000602082017f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60208201529150613c4e565b6020808252810161074d81614815565b600061089d82846144bd565b602681526000602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f8152651c8818d85b1b60d21b60208201529150613c4e565b6020808252810161074d81614884565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150613c7f565b6020808252810161074d816148d756fea264697066735822122094d0079d5c5c4e933c1f74396514ba6540d1c30d307d4c8d004e4e436033887064736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x274 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x80D45A2D GT PUSH2 0x151 JUMPI DUP1 PUSH4 0xBE26317E GT PUSH2 0xC3 JUMPI DUP1 PUSH4 0xD905777E GT PUSH2 0x87 JUMPI DUP1 PUSH4 0xD905777E EQ PUSH2 0x543 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x556 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x569 JUMPI DUP1 PUSH4 0xE521136F EQ PUSH2 0x57A JUMPI DUP1 PUSH4 0xEF8B30F7 EQ PUSH2 0x51D JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x58D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBE26317E EQ PUSH2 0x4ED JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x4F7 JUMPI DUP1 PUSH4 0xC63D75B6 EQ PUSH2 0x50A JUMPI DUP1 PUSH4 0xC6E6F592 EQ PUSH2 0x51D JUMPI DUP1 PUSH4 0xCE96CB77 EQ PUSH2 0x530 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x115 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x47D JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x490 JUMPI DUP1 PUSH4 0xB3D7F6B9 EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xB460AF94 EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xB4A0BDF3 EQ PUSH2 0x4C9 JUMPI DUP1 PUSH4 0xBA087652 EQ PUSH2 0x4DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x80D45A2D EQ PUSH2 0x42A JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x43D JUMPI DUP1 PUSH4 0x94BF804D EQ PUSH2 0x44E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x461 JUMPI DUP1 PUSH4 0x9BB1A99C EQ PUSH2 0x469 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x372500AB GT PUSH2 0x1EA JUMPI DUP1 PUSH4 0x4CDAD506 GT PUSH2 0x1AE JUMPI DUP1 PUSH4 0x4CDAD506 EQ PUSH2 0x2AC JUMPI DUP1 PUSH4 0x5FE3B567 EQ PUSH2 0x3BD JUMPI DUP1 PUSH4 0x6E553F65 EQ PUSH2 0x3DE JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3F1 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x41A JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x422 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x372500AB EQ PUSH2 0x36B JUMPI DUP1 PUSH4 0x38D52E0F EQ PUSH2 0x373 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x384 JUMPI DUP1 PUSH4 0x402D267D EQ PUSH2 0x397 JUMPI DUP1 PUSH4 0x41E11A5A EQ PUSH2 0x3AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE32CB86 GT PUSH2 0x23C JUMPI DUP1 PUSH4 0xE32CB86 EQ PUSH2 0x2F2 JUMPI DUP1 PUSH4 0x17F33340 EQ PUSH2 0x307 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x328 JUMPI DUP1 PUSH4 0x1BE19560 EQ PUSH2 0x330 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x343 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x356 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1E1D114 EQ PUSH2 0x279 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x297 JUMPI DUP1 PUSH4 0x7A2D13A EQ PUSH2 0x2AC JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x2BF JUMPI DUP1 PUSH4 0xA28A477 EQ PUSH2 0x2DF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x281 PUSH2 0x5A0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x28E SWAP2 SWAP1 PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x29F PUSH2 0x6AE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x28E SWAP2 SWAP1 PUSH2 0x351D JUMP JUMPDEST PUSH2 0x281 PUSH2 0x2BA CALLDATASIZE PUSH1 0x4 PUSH2 0x3546 JUMP JUMPDEST PUSH2 0x740 JUMP JUMPDEST PUSH2 0x2D2 PUSH2 0x2CD CALLDATASIZE PUSH1 0x4 PUSH2 0x358C JUMP JUMPDEST PUSH2 0x753 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x28E SWAP2 SWAP1 PUSH2 0x35D1 JUMP JUMPDEST PUSH2 0x281 PUSH2 0x2ED CALLDATASIZE PUSH1 0x4 PUSH2 0x3546 JUMP JUMPDEST PUSH2 0x76B JUMP JUMPDEST PUSH2 0x305 PUSH2 0x300 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DF JUMP JUMPDEST PUSH2 0x778 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x193 SLOAD PUSH2 0x31B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x28E SWAP2 SWAP1 PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH2 0x281 JUMP JUMPDEST PUSH2 0x305 PUSH2 0x33E CALLDATASIZE PUSH1 0x4 PUSH2 0x3636 JUMP JUMPDEST PUSH2 0x78C JUMP JUMPDEST PUSH2 0x2D2 PUSH2 0x351 CALLDATASIZE PUSH1 0x4 PUSH2 0x3657 JUMP JUMPDEST PUSH2 0x87E JUMP JUMPDEST PUSH2 0x35E PUSH2 0x8A4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x28E SWAP2 SWAP1 PUSH2 0x36B0 JUMP JUMPDEST PUSH2 0x305 PUSH2 0x8C5 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x31B JUMP JUMPDEST PUSH2 0x2D2 PUSH2 0x392 CALLDATASIZE PUSH1 0x4 PUSH2 0x358C JUMP JUMPDEST PUSH2 0xBC7 JUMP JUMPDEST PUSH2 0x281 PUSH2 0x3A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DF JUMP JUMPDEST PUSH2 0xBE9 JUMP JUMPDEST PUSH2 0x305 PUSH2 0x3B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x36BE JUMP JUMPDEST PUSH2 0xE21 JUMP JUMPDEST PUSH2 0x192 SLOAD PUSH2 0x3D1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x28E SWAP2 SWAP1 PUSH2 0x3764 JUMP JUMPDEST PUSH2 0x281 PUSH2 0x3EC CALLDATASIZE PUSH1 0x4 PUSH2 0x3772 JUMP JUMPDEST PUSH2 0xEF3 JUMP JUMPDEST PUSH2 0x281 PUSH2 0x3FF CALLDATASIZE PUSH1 0x4 PUSH2 0x35DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x305 PUSH2 0x1038 JUMP JUMPDEST PUSH2 0x305 PUSH2 0x104C JUMP JUMPDEST PUSH2 0x305 PUSH2 0x438 CALLDATASIZE PUSH1 0x4 PUSH2 0x3546 JUMP JUMPDEST PUSH2 0x1081 JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x31B JUMP JUMPDEST PUSH2 0x281 PUSH2 0x45C CALLDATASIZE PUSH1 0x4 PUSH2 0x3772 JUMP JUMPDEST PUSH2 0x10C8 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x11E7 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH2 0x3D1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2D2 PUSH2 0x48B CALLDATASIZE PUSH1 0x4 PUSH2 0x358C JUMP JUMPDEST PUSH2 0x11F6 JUMP JUMPDEST PUSH2 0x2D2 PUSH2 0x49E CALLDATASIZE PUSH1 0x4 PUSH2 0x358C JUMP JUMPDEST PUSH2 0x123E JUMP JUMPDEST PUSH2 0x281 PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3546 JUMP JUMPDEST PUSH2 0x124C JUMP JUMPDEST PUSH2 0x281 PUSH2 0x4C4 CALLDATASIZE PUSH1 0x4 PUSH2 0x37A5 JUMP JUMPDEST PUSH2 0x1259 JUMP JUMPDEST PUSH1 0xFB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3D1 JUMP JUMPDEST PUSH2 0x281 PUSH2 0x4E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x37A5 JUMP JUMPDEST PUSH2 0x136B JUMP JUMPDEST PUSH2 0x281 PUSH2 0x12D SLOAD DUP2 JUMP JUMPDEST PUSH2 0x305 PUSH2 0x505 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DF JUMP JUMPDEST PUSH2 0x1494 JUMP JUMPDEST PUSH2 0x281 PUSH2 0x518 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DF JUMP JUMPDEST PUSH2 0x1698 JUMP JUMPDEST PUSH2 0x281 PUSH2 0x52B CALLDATASIZE PUSH1 0x4 PUSH2 0x3546 JUMP JUMPDEST PUSH2 0x16A7 JUMP JUMPDEST PUSH2 0x281 PUSH2 0x53E CALLDATASIZE PUSH1 0x4 PUSH2 0x35DF JUMP JUMPDEST PUSH2 0x16B4 JUMP JUMPDEST PUSH2 0x281 PUSH2 0x551 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DF JUMP JUMPDEST PUSH2 0x188C JUMP JUMPDEST PUSH2 0x281 PUSH2 0x564 CALLDATASIZE PUSH1 0x4 PUSH2 0x37EB JUMP JUMPDEST PUSH2 0x1A6E JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x31B JUMP JUMPDEST PUSH2 0x305 PUSH2 0x588 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DF JUMP JUMPDEST PUSH2 0x1A99 JUMP JUMPDEST PUSH2 0x305 PUSH2 0x59B CALLDATASIZE PUSH1 0x4 PUSH2 0x35DF JUMP JUMPDEST PUSH2 0x1AE0 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x182DF0F5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5FF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x623 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x654 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x671 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x695 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x69F SWAP2 SWAP1 PUSH2 0x384F JUMP JUMPDEST PUSH2 0x6A9 SWAP2 SWAP1 PUSH2 0x3884 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x36 DUP1 SLOAD PUSH2 0x6BD SWAP1 PUSH2 0x38AE JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x6E9 SWAP1 PUSH2 0x38AE JUMP JUMPDEST DUP1 ISZERO PUSH2 0x736 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x70B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x736 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x719 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D DUP3 PUSH1 0x0 PUSH2 0x1B51 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x761 DUP2 DUP6 DUP6 PUSH2 0x1B92 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D DUP3 PUSH1 0x1 PUSH2 0x1C39 JUMP JUMPDEST PUSH2 0x780 PUSH2 0x1C71 JUMP JUMPDEST PUSH2 0x789 DUP2 PUSH2 0x1C9B JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x794 PUSH2 0x1C71 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x7C3 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x804 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x87A JUMPI PUSH1 0x0 PUSH2 0x820 PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x82D DUP4 DUP3 DUP5 PUSH2 0x1D14 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x6D25BE279134F4ECAA4770AFF0C3D916D9E7C5EF37B65ED95DBDBA411F5D54D5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x870 SWAP2 SWAP1 PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x88C DUP6 DUP3 DUP6 PUSH2 0x1D6F JUMP JUMPDEST PUSH2 0x897 DUP6 DUP6 DUP6 PUSH2 0x1DB9 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8AE PUSH2 0x1EA9 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH2 0x6A9 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x38DA JUMP JUMPDEST PUSH2 0x192 SLOAD PUSH2 0x191 SLOAD PUSH2 0x193 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x61252FD1 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP5 SWAP4 DUP5 AND SWAP4 SWAP1 SWAP3 AND SWAP2 PUSH1 0x0 SWAP2 DUP6 SWAP2 PUSH4 0x61252FD1 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 DUP7 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x924 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x94C SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3A09 JUMP JUMPDEST SWAP1 POP PUSH2 0x958 DUP2 MLOAD PUSH2 0x1F29 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xBC0 JUMPI PUSH1 0x0 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x978 JUMPI PUSH2 0x978 PUSH2 0x3A44 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF7C618C1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9E6 SWAP2 SWAP1 PUSH2 0x3A5A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP7 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xA20 JUMPI PUSH2 0xA20 PUSH2 0x3A44 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x20 SWAP2 DUP3 MUL SWAP3 SWAP1 SWAP3 ADD ADD MSTORE PUSH1 0x40 MLOAD PUSH3 0x4CAEB1 PUSH1 0xE4 SHL DUP2 MSTORE SWAP1 DUP5 AND SWAP1 PUSH4 0x4CAEB10 SWAP1 PUSH2 0xA5C SWAP1 ADDRESS SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x3AD8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA8A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 POP PUSH4 0x70A08231 SWAP1 PUSH2 0xABD SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xADA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAFE SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0xB6F JUMPI PUSH2 0xB11 DUP4 DUP9 DUP4 PUSH2 0x1D14 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5BEBB3B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP1 PUSH4 0x16FAECEC SWAP1 PUSH2 0xB42 SWAP1 DUP13 SWAP1 DUP8 SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x4 ADD PUSH2 0x3B3C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0xB6D JUMPI POP PUSH1 0x1 JUMPDEST POP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xBA56C3AB1F752776EEF60DB959A4E6B643E89595315EDBBD945E104623FA03BA DUP3 PUSH1 0x40 MLOAD PUSH2 0xBA8 SWAP2 SWAP1 PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 POP PUSH2 0x95B SWAP1 POP JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x761 DUP2 DUP6 DUP6 PUSH2 0xBDA DUP4 DUP4 PUSH2 0x1A6E JUMP JUMPDEST PUSH2 0xBE4 SWAP2 SWAP1 PUSH2 0x3B64 JUMP JUMPDEST PUSH2 0x1B92 JUMP JUMPDEST PUSH2 0x192 SLOAD PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x742D14B PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP3 PUSH4 0xE85A2960 SWAP3 PUSH2 0xC25 SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x3BA5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC42 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC66 SWAP2 SWAP1 PUSH2 0x3BD3 JUMP JUMPDEST ISZERO PUSH2 0xC73 JUMPI POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x192 SLOAD PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x2C3BCBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP3 PUSH4 0x2C3BCBB SWAP3 PUSH2 0xCAD SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCCA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCEE SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x182DF0F5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD4F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD73 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDC7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDEB SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0xDF5 SWAP2 SWAP1 PUSH2 0x384F JUMP JUMPDEST PUSH2 0xDFF SWAP2 SWAP1 PUSH2 0x3884 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT PUSH2 0xE0F JUMPI PUSH1 0x0 PUSH2 0xE19 JUMP JUMPDEST PUSH2 0xE19 DUP2 DUP4 PUSH2 0x3BF4 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x2 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xE43 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF DUP1 DUP4 AND SWAP2 AND LT JUMPDEST PUSH2 0xE68 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3C55 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFFFF NOT AND PUSH1 0xFF DUP4 AND OR PUSH2 0x100 OR SWAP1 SSTORE PUSH2 0xE85 DUP3 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0xE8E DUP6 PUSH2 0x1F7B JUMP JUMPDEST PUSH2 0xE97 DUP4 PUSH2 0x1FB3 JUMP JUMPDEST PUSH2 0xEA0 DUP5 PUSH2 0x2010 JUMP JUMPDEST PUSH2 0xEA9 DUP3 PUSH2 0x2077 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH2 0xEE4 SWAP1 DUP4 SWAP1 PUSH2 0x36B0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEFD PUSH2 0x2090 JUMP JUMPDEST PUSH2 0xF06 DUP3 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA6AFED95 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF5C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF80 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST POP DUP3 PUSH1 0x0 SUB PUSH2 0xFA2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3C86 JUMP JUMPDEST PUSH2 0xFAB DUP3 PUSH2 0xBE9 JUMP JUMPDEST DUP4 GT ISZERO PUSH2 0xFCB JUMPI PUSH1 0x40 MLOAD PUSH4 0x26AC6EE1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xFD6 DUP5 PUSH2 0x16A7 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0xFF9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3C86 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1004 PUSH1 0x35 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x1012 CALLER DUP6 DUP8 DUP6 PUSH2 0x20BB JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x101E PUSH1 0x35 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1028 SWAP2 SWAP1 PUSH2 0x3BF4 JUMP JUMPDEST SWAP4 POP POP POP POP PUSH2 0x74D PUSH1 0x1 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH2 0x1040 PUSH2 0x1C71 JUMP JUMPDEST PUSH2 0x104A PUSH1 0x0 PUSH2 0x2077 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0xC9 SLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 EQ PUSH2 0x1078 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3CDC JUMP JUMPDEST PUSH2 0x789 DUP2 PUSH2 0x2077 JUMP JUMPDEST PUSH2 0x10BF PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x19 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x7365744D61784C6F6F70734C696D69742875696E743235362900000000000000 DUP2 MSTORE POP PUSH2 0x245F JUMP JUMPDEST PUSH2 0x789 DUP2 PUSH2 0x1FB3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10D2 PUSH2 0x2090 JUMP JUMPDEST PUSH2 0x10DB DUP3 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA6AFED95 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1131 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1155 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST POP DUP3 PUSH1 0x0 SUB PUSH2 0x1177 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3D07 JUMP JUMPDEST PUSH2 0x1180 DUP3 PUSH2 0x1698 JUMP JUMPDEST DUP4 GT ISZERO PUSH2 0x11A0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x40868F79 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x11AB DUP5 PUSH2 0x124C JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x11CE JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3D07 JUMP JUMPDEST PUSH2 0x11DA CALLER DUP5 DUP4 DUP8 PUSH2 0x20BB JUMP JUMPDEST SWAP1 POP PUSH2 0x74D PUSH1 0x1 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x6BD SWAP1 PUSH2 0x38AE JUMP JUMPDEST PUSH1 0x0 CALLER DUP2 PUSH2 0x1204 DUP3 DUP7 PUSH2 0x1A6E JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x1226 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3D59 JUMP JUMPDEST PUSH2 0x1233 DUP3 DUP7 DUP7 DUP5 SUB PUSH2 0x1B92 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x761 DUP2 DUP6 DUP6 PUSH2 0x1DB9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D DUP3 PUSH1 0x1 PUSH2 0x1B51 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1263 PUSH2 0x2090 JUMP JUMPDEST PUSH2 0x126C DUP4 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0x1275 DUP3 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA6AFED95 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x12CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12EF SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST POP DUP4 PUSH1 0x0 SUB PUSH2 0x1311 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3D88 JUMP JUMPDEST PUSH2 0x131A DUP3 PUSH2 0x16B4 JUMP JUMPDEST DUP5 GT ISZERO PUSH2 0x133A JUMPI PUSH1 0x40 MLOAD PUSH4 0xE9ED9515 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1346 DUP7 PUSH2 0x24F9 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x135D PUSH2 0x1354 CALLER SWAP1 JUMP JUMPDEST DUP7 DUP7 DUP6 DUP6 PUSH2 0x27ED JUMP JUMPDEST SWAP2 POP POP PUSH2 0x89D PUSH1 0x1 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1375 PUSH2 0x2090 JUMP JUMPDEST PUSH2 0x137E DUP4 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0x1387 DUP3 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA6AFED95 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x13DD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1401 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST POP DUP4 PUSH1 0x0 SUB PUSH2 0x1423 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3DB5 JUMP JUMPDEST PUSH2 0x142C DUP3 PUSH2 0x188C JUMP JUMPDEST DUP5 GT ISZERO PUSH2 0x144C JUMPI PUSH1 0x40 MLOAD PUSH4 0x88902479 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1457 DUP6 PUSH2 0x2890 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x147A JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3DB5 JUMP JUMPDEST PUSH2 0x1487 CALLER DUP6 DUP6 DUP5 DUP10 PUSH2 0x27ED JUMP JUMPDEST SWAP1 POP PUSH2 0x89D PUSH1 0x1 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x14B4 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x14CE JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x14CE JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x14EA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3C55 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x150D JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x1516 DUP3 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0x191 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x5FE3B567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH4 0x5FE3B567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1570 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1594 SWAP2 SWAP1 PUSH2 0x3A5A JUMP JUMPDEST PUSH2 0x192 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH2 0x191 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x6F307DC3 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP4 SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x6F307DC3 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x161C SWAP2 SWAP1 PUSH2 0x3DD0 JUMP JUMPDEST SWAP1 POP PUSH2 0x1638 PUSH2 0x162A DUP3 PUSH2 0x2AD3 JUMP JUMPDEST PUSH2 0x1633 DUP4 PUSH2 0x2B61 JUMP JUMPDEST PUSH2 0x2BD9 JUMP JUMPDEST PUSH2 0x1641 DUP2 PUSH2 0x2C0A JUMP JUMPDEST PUSH2 0x1649 PUSH2 0x2C3A JUMP JUMPDEST POP DUP1 ISZERO PUSH2 0x87A JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH2 0x168C SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x3E05 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D PUSH2 0x52B PUSH1 0x0 PUSH2 0xBE9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D DUP3 PUSH1 0x0 PUSH2 0x1C39 JUMP JUMPDEST PUSH2 0x192 SLOAD PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x742D14B PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP3 PUSH4 0xE85A2960 SWAP3 PUSH2 0x16F1 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x1 SWAP1 PUSH1 0x4 ADD PUSH2 0x3BA5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x170E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1732 SWAP2 SWAP1 PUSH2 0x3BD3 JUMP JUMPDEST ISZERO PUSH2 0x173F JUMPI POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1D8E90D1 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x3B1D21A2 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x178A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17AE SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8F840DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1806 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x182A SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1850 PUSH2 0x2BA DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP2 DUP4 LT ISZERO PUSH2 0x1865 JUMPI POP PUSH1 0x0 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1871 DUP4 DUP6 PUSH2 0x3BF4 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 LT PUSH2 0x1880 JUMPI DUP2 PUSH2 0x1882 JUMP JUMPDEST DUP1 JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x192 SLOAD PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x742D14B PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP3 PUSH4 0xE85A2960 SWAP3 PUSH2 0x18C9 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x1 SWAP1 PUSH1 0x4 ADD PUSH2 0x3BA5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x190A SWAP2 SWAP1 PUSH2 0x3BD3 JUMP JUMPDEST ISZERO PUSH2 0x1917 JUMPI POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1D8E90D1 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x3B1D21A2 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1962 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1986 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8F840DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19DE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A02 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0x1A16 JUMPI POP PUSH1 0x0 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A22 DUP3 DUP5 PUSH2 0x3BF4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1A2F DUP3 PUSH2 0x16A7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1A52 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT PUSH2 0x1A61 JUMPI DUP1 PUSH2 0x1A63 JUMP JUMPDEST DUP2 JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1AD7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x736574526577617264526563697069656E742861646472657373290000000000 DUP2 MSTORE POP PUSH2 0x245F JUMP JUMPDEST PUSH2 0x789 DUP2 PUSH2 0x2010 JUMP JUMPDEST PUSH2 0x1AE8 PUSH2 0x1C71 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH2 0x1B19 PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x89D PUSH2 0x1B5E PUSH2 0x5A0 JUMP JUMPDEST PUSH2 0x1B69 SWAP1 PUSH1 0x1 PUSH2 0x3B64 JUMP JUMPDEST PUSH2 0x1B71 PUSH2 0x1EA9 JUMP JUMPDEST PUSH2 0x1B7C SWAP1 PUSH1 0xA PUSH2 0x3F21 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH2 0x1B89 SWAP2 SWAP1 PUSH2 0x3B64 JUMP JUMPDEST DUP6 SWAP2 SWAP1 DUP6 PUSH2 0x2C69 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1BB8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3F77 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1BDE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x3FC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x870 SWAP1 DUP6 SWAP1 PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x89D PUSH2 0x1C46 PUSH2 0x1EA9 JUMP JUMPDEST PUSH2 0x1C51 SWAP1 PUSH1 0xA PUSH2 0x3F21 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH2 0x1C5E SWAP2 SWAP1 PUSH2 0x3B64 JUMP JUMPDEST PUSH2 0x1C66 PUSH2 0x5A0 JUMP JUMPDEST PUSH2 0x1B89 SWAP1 PUSH1 0x1 PUSH2 0x3B64 JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x104A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4008 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1CC1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x405A JUMP JUMPDEST PUSH1 0xFB DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP1 PUSH32 0x66FD58E82F7B31A2A5C30E0888F3093EFE4E111B00CD2B0C31FE014601293AA0 SWAP1 PUSH2 0x168C SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x406A JUMP JUMPDEST PUSH2 0x1D6A DUP4 PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1D33 SWAP3 SWAP2 SWAP1 PUSH2 0x4085 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x2CC6 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D7B DUP5 DUP5 PUSH2 0x1A6E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x1DB3 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x1DA6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x40D4 JUMP JUMPDEST PUSH2 0x1DB3 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x1B92 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1DDF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4126 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1E05 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4176 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x1E3E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x41C9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE SWAP3 DUP7 AND DUP1 DUP3 MSTORE SWAP1 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE SWAP2 MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x1E9C SWAP1 DUP7 SWAP1 PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x1DB3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1EBD PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1EFA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F1E SWAP2 SWAP1 PUSH2 0x41ED JUMP JUMPDEST PUSH2 0x6A9 SWAP1 PUSH1 0x12 PUSH2 0x420E JUMP JUMPDEST PUSH2 0x12D SLOAD DUP2 GT ISZERO PUSH2 0x789 JUMPI PUSH2 0x12D SLOAD DUP2 PUSH1 0x40 MLOAD PUSH4 0x792BFB1B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP3 SWAP2 SWAP1 PUSH2 0x422B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x789 JUMPI PUSH1 0x40 MLOAD PUSH4 0x42BCDF7F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1FA2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4281 JUMP JUMPDEST PUSH2 0x1FAA PUSH2 0x2D58 JUMP JUMPDEST PUSH2 0x789 DUP2 PUSH2 0x2D87 JUMP JUMPDEST PUSH2 0x12D SLOAD DUP2 GT PUSH2 0x1FD5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x42D0 JUMP JUMPDEST PUSH2 0x12D DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC2D09FEF144F7C8A86F71EA459F8FC17F675768EB1AE369CBD77FB31D467AAFA SWAP1 PUSH2 0x168C SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x422B JUMP JUMPDEST PUSH2 0x2019 DUP2 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0x193 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 AND SWAP1 PUSH32 0xC8C11BB97AC2FFA10CE2E2A98F4C1FD8DF84CFA2E1A15E013ED2383AB1F527AD SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH2 0x193 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH2 0x789 DUP2 PUSH2 0x2DAE JUMP JUMPDEST PUSH1 0x2 PUSH2 0x15F SLOAD SUB PUSH2 0x20B3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4314 JUMP JUMPDEST PUSH1 0x2 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x20CF PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20FA SWAP2 SWAP1 PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2117 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x213B SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2172 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x218F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x21B3 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP PUSH2 0x21D2 PUSH2 0x21CA PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP8 ADDRESS DUP8 PUSH2 0x2E00 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x21E7 PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2212 SWAP2 SWAP1 PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x222F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2253 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x225D SWAP2 SWAP1 PUSH2 0x3BF4 JUMP JUMPDEST SWAP1 POP PUSH2 0x2268 DUP2 PUSH2 0x2E21 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x229E SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22BB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22DF SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x22E9 SWAP2 SWAP1 PUSH2 0x3BF4 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x230C JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4358 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x182DF0F5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x236B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x238F SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x2399 SWAP1 DUP5 PUSH2 0x384F JUMP JUMPDEST PUSH2 0x23A3 SWAP2 SWAP1 PUSH2 0x3884 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x23F2 PUSH2 0x23B2 PUSH2 0x1EA9 JUMP JUMPDEST PUSH2 0x23BD SWAP1 PUSH1 0xA PUSH2 0x3F21 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH2 0x23CA SWAP2 SWAP1 PUSH2 0x3B64 JUMP JUMPDEST DUP4 PUSH2 0x23D3 PUSH2 0x5A0 JUMP JUMPDEST PUSH2 0x23DE SWAP1 PUSH1 0x1 PUSH2 0x3B64 JUMP JUMPDEST PUSH2 0x23E8 SWAP2 SWAP1 PUSH2 0x3BF4 JUMP JUMPDEST DUP5 SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2C69 JUMP JUMPDEST SWAP1 POP PUSH2 0x23FE DUP10 DUP3 PUSH2 0x2EED JUMP JUMPDEST DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDCBC1C05240F31FF3AD067EF1EE35CE4997762752E3A095284754544F4C709D7 DUP11 DUP5 PUSH1 0x40 MLOAD PUSH2 0x2443 SWAP3 SWAP2 SWAP1 PUSH2 0x422B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH1 0xFB SLOAD PUSH1 0x40 MLOAD PUSH4 0x18C5E8AB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x18C5E8AB SWAP1 PUSH2 0x2492 SWAP1 CALLER SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x4368 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24AF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x24D3 SWAP2 SWAP1 PUSH2 0x3BD3 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x87A JUMPI CALLER ADDRESS DUP4 PUSH1 0x40 MLOAD PUSH4 0x4A3FA293 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4388 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2510 PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2540 SWAP2 SWAP1 PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x255D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2581 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x25B8 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x25D5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x25F9 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x852A12E3 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x852A12E3 SWAP1 PUSH2 0x2630 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x264F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2673 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2696 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH4 0x8646577 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP2 SWAP1 PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x26C4 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26E1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2705 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x270F SWAP2 SWAP1 PUSH2 0x3BF4 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP8 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2746 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2763 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2787 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x2791 SWAP1 DUP5 PUSH2 0x3BF4 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x27B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x43E7 JUMP JUMPDEST PUSH2 0x27E1 PUSH2 0x27BF PUSH2 0x1EA9 JUMP JUMPDEST PUSH2 0x27CA SWAP1 PUSH1 0xA PUSH2 0x3F21 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH2 0x27D7 SWAP2 SWAP1 PUSH2 0x3B64 JUMP JUMPDEST DUP3 SWAP1 DUP6 PUSH1 0x1 PUSH2 0x2C69 JUMP JUMPDEST SWAP6 POP POP POP POP POP POP SWAP2 POP SWAP2 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x2811 JUMPI PUSH2 0x2811 DUP4 DUP7 DUP4 PUSH2 0x1D6F JUMP JUMPDEST PUSH2 0x281B DUP4 DUP3 PUSH2 0x2F83 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH2 0x2832 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP5 PUSH2 0x1D14 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFBDE797D201C681B91056529119E0B02407C7BB96A4A2C75C01FC9667232C8DB DUP6 DUP6 PUSH1 0x40 MLOAD PUSH2 0x2881 SWAP3 SWAP2 SWAP1 PUSH2 0x422B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x28A5 PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x28D5 SWAP2 SWAP1 PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x28F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2916 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH2 0x29BA SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x294F SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x296C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2990 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST PUSH2 0x2998 PUSH2 0x1EA9 JUMP JUMPDEST PUSH2 0x29A3 SWAP1 PUSH1 0xA PUSH2 0x3F21 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH2 0x29B0 SWAP2 SWAP1 PUSH2 0x3B64 JUMP JUMPDEST DUP8 SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2C69 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0xDB006A75 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xDB006A75 SWAP1 PUSH2 0x29F1 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2A10 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A34 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2A57 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH4 0x8646577 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP2 SWAP1 PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2A86 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3609 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2AA3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2AC7 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP PUSH2 0x1A63 DUP5 DUP3 PUSH2 0x3BF4 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6FDDE03 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B13 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2B3B SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x4482 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2B4B SWAP2 SWAP1 PUSH2 0x44DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2BA1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2BC9 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x4482 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2B4B SWAP2 SWAP1 PUSH2 0x450E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2C00 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4281 JUMP JUMPDEST PUSH2 0x87A DUP3 DUP3 PUSH2 0x303A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2C31 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4281 JUMP JUMPDEST PUSH2 0x789 DUP2 PUSH2 0x307A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2C61 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4281 JUMP JUMPDEST PUSH2 0x104A PUSH2 0x30FF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2C77 DUP7 DUP7 DUP7 PUSH2 0x3126 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP4 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2C8D JUMPI PUSH2 0x2C8D PUSH2 0x3AF8 JUMP JUMPDEST EQ DUP1 ISZERO PUSH2 0x2CAA JUMPI POP PUSH1 0x0 DUP5 DUP1 PUSH2 0x2CA5 JUMPI PUSH2 0x2CA5 PUSH2 0x386E JUMP JUMPDEST DUP7 DUP9 MULMOD GT JUMPDEST ISZERO PUSH2 0x2CBD JUMPI PUSH2 0x2CBA PUSH1 0x1 DUP3 PUSH2 0x3B64 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D1B DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x31E8 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH1 0x0 EQ DUP1 PUSH2 0x2D3C JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2D3C SWAP2 SWAP1 PUSH2 0x3BD3 JUMP JUMPDEST PUSH2 0x1D6A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x456B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2D7F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4281 JUMP JUMPDEST PUSH2 0x104A PUSH2 0x31F7 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x780 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4281 JUMP JUMPDEST PUSH1 0x97 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x1DB3 DUP5 PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1D33 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x457B JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH2 0x2E55 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH2 0x2E45 PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 PUSH2 0x3227 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x140E25AD PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xA0712D68 SWAP1 PUSH2 0x2E87 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2EA6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2ECA SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x87A JUMPI DUP1 PUSH1 0x40 MLOAD PUSH4 0x8646577 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP2 SWAP1 PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2F13 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x45D7 JUMP JUMPDEST DUP1 PUSH1 0x35 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x2F25 SWAP2 SWAP1 PUSH2 0x3B64 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP6 ADD SWAP1 SSTORE MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x2F77 SWAP1 DUP6 SWAP1 PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2FA9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4625 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x2FE2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4674 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP6 DUP6 SUB SWAP1 SSTORE PUSH1 0x35 DUP1 SLOAD DUP7 SWAP1 SUB SWAP1 SSTORE MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x870 SWAP1 DUP7 SWAP1 PUSH2 0x34B9 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3061 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4281 JUMP JUMPDEST PUSH1 0x36 PUSH2 0x306D DUP4 DUP3 PUSH2 0x4715 JUMP JUMPDEST POP PUSH1 0x37 PUSH2 0x1D6A DUP3 DUP3 PUSH2 0x4715 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x30A1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4281 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x30AD DUP4 PUSH2 0x32DB JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH2 0x30BD JUMPI PUSH1 0x12 PUSH2 0x30BF JUMP JUMPDEST DUP1 JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP6 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT PUSH1 0xFF SWAP4 SWAP1 SWAP4 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL SWAP3 SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR OR SWAP1 SWAP3 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2457 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4281 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 SUB PUSH2 0x3160 JUMPI DUP4 DUP3 DUP2 PUSH2 0x3156 JUMPI PUSH2 0x3156 PUSH2 0x386E JUMP JUMPDEST DIV SWAP3 POP POP POP PUSH2 0x89D JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x317F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4805 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x1 DUP8 NOT DUP2 ADD DUP9 AND SWAP8 DUP9 SWAP1 DIV PUSH1 0x3 DUP2 MUL DUP4 XOR DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL SWAP1 DUP2 MUL SWAP1 SWAP3 SUB SWAP1 SWAP2 MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xE19 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x33B7 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x321E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4281 JUMP JUMPDEST PUSH2 0x104A CALLER PUSH2 0x2077 JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x32A0 JUMPI POP PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH2 0x325D SWAP1 ADDRESS SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x406A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x327A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x329E SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x32BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x4868 JUMP JUMPDEST PUSH2 0x1D6A DUP4 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1D33 SWAP3 SWAP2 SWAP1 PUSH2 0x4085 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP2 MSTORE PUSH1 0x24 DUP2 ADD DUP3 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH2 0x3322 SWAP2 PUSH2 0x4878 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x335D JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3362 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x3376 JUMPI POP PUSH1 0x20 DUP2 MLOAD LT ISZERO JUMPDEST ISZERO PUSH2 0x33AA JUMPI PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x3391 SWAP2 SWAP1 PUSH2 0x3818 JUMP JUMPDEST SWAP1 POP PUSH1 0xFF DUP2 GT PUSH2 0x33A8 JUMPI PUSH1 0x1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST POP JUMPDEST POP PUSH1 0x0 SWAP5 DUP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x33D9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x48C7 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x33F5 SWAP2 SWAP1 PUSH2 0x4878 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3432 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3437 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1A63 DUP8 DUP4 DUP4 DUP8 PUSH1 0x60 DUP4 ISZERO PUSH2 0x3482 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x347B JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x347B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP1 PUSH2 0x490B JUMP JUMPDEST POP DUP2 PUSH2 0xE19 JUMP JUMPDEST PUSH2 0xE19 DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x3497 JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE5F SWAP2 SWAP1 PUSH2 0x351D JUMP JUMPDEST DUP1 JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x74D DUP3 DUP5 PUSH2 0x34B1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x34E2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x34CA JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34F5 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x350C DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x34C7 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x89D DUP2 DUP5 PUSH2 0x34EB JUMP JUMPDEST DUP1 JUMPDEST DUP2 EQ PUSH2 0x789 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x74D DUP2 PUSH2 0x352E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x355B JUMPI PUSH2 0x355B PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE19 DUP5 DUP5 PUSH2 0x353B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x74D JUMP JUMPDEST PUSH2 0x3530 DUP2 PUSH2 0x3567 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x74D DUP2 PUSH2 0x3578 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x35A2 JUMPI PUSH2 0x35A2 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x35AE DUP6 DUP6 PUSH2 0x3581 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x35BF DUP6 DUP3 DUP7 ADD PUSH2 0x353B JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x34B3 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x74D DUP3 DUP5 PUSH2 0x35C9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x35F4 JUMPI PUSH2 0x35F4 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE19 DUP5 DUP5 PUSH2 0x3581 JUMP JUMPDEST PUSH2 0x34B3 DUP2 PUSH2 0x3567 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x74D DUP3 DUP5 PUSH2 0x3600 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D DUP3 PUSH2 0x3567 JUMP JUMPDEST PUSH2 0x3530 DUP2 PUSH2 0x3617 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x74D DUP2 PUSH2 0x3622 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x364B JUMPI PUSH2 0x364B PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE19 DUP5 DUP5 PUSH2 0x362B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x366F JUMPI PUSH2 0x366F PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x367B DUP7 DUP7 PUSH2 0x3581 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x368C DUP7 DUP3 DUP8 ADD PUSH2 0x3581 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x369D DUP7 DUP3 DUP8 ADD PUSH2 0x353B JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0xFF DUP2 AND PUSH2 0x34B3 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x74D DUP3 DUP5 PUSH2 0x36A7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x36D7 JUMPI PUSH2 0x36D7 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x36E3 DUP8 DUP8 PUSH2 0x3581 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x36F4 DUP8 DUP3 DUP9 ADD PUSH2 0x3581 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x3705 DUP8 DUP3 DUP9 ADD PUSH2 0x353B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0x3716 DUP8 DUP3 DUP9 ADD PUSH2 0x3581 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x3739 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D DUP3 PUSH2 0x3722 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D DUP3 PUSH2 0x3745 JUMP JUMPDEST PUSH2 0x34B3 DUP2 PUSH2 0x3750 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x74D DUP3 DUP5 PUSH2 0x375B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3788 JUMPI PUSH2 0x3788 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3794 DUP6 DUP6 PUSH2 0x353B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x35BF DUP6 DUP3 DUP7 ADD PUSH2 0x3581 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x37BD JUMPI PUSH2 0x37BD PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x37C9 DUP7 DUP7 PUSH2 0x353B JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x37DA DUP7 DUP3 DUP8 ADD PUSH2 0x3581 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x369D DUP7 DUP3 DUP8 ADD PUSH2 0x3581 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3801 JUMPI PUSH2 0x3801 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3794 DUP6 DUP6 PUSH2 0x3581 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x74D DUP2 PUSH2 0x352E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x382D JUMPI PUSH2 0x382D PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE19 DUP5 DUP5 PUSH2 0x380D JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 MUL DUP1 DUP3 ISZERO DUP4 DUP3 DIV DUP6 EQ OR PUSH2 0x3867 JUMPI PUSH2 0x3867 PUSH2 0x3839 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3893 JUMPI PUSH2 0x3893 PUSH2 0x386E JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP2 DIV PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x38C2 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x38D4 JUMPI PUSH2 0x38D4 PUSH2 0x3898 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xFF SWAP2 DUP3 AND SWAP2 SWAP1 DUP2 AND SWAP1 DUP3 DUP3 ADD SWAP1 DUP2 GT ISZERO PUSH2 0x74D JUMPI PUSH2 0x74D PUSH2 0x3839 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x3933 JUMPI PUSH2 0x3933 PUSH2 0x38F7 JUMP JUMPDEST PUSH1 0x40 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3945 PUSH1 0x40 MLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x3951 DUP3 DUP3 PUSH2 0x390D JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x3970 JUMPI PUSH2 0x3970 PUSH2 0x38F7 JUMP JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x74D DUP2 PUSH2 0x3622 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3998 PUSH2 0x3993 DUP5 PUSH2 0x3956 JUMP JUMPDEST PUSH2 0x393A JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP1 POP PUSH1 0x20 DUP1 DUP3 ADD SWAP1 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x39B7 JUMPI PUSH2 0x39B7 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x39DB JUMPI DUP1 PUSH2 0x39CC DUP9 DUP3 PUSH2 0x397A JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x39B9 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x39F9 JUMPI PUSH2 0x39F9 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xE19 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x3985 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3A1E JUMPI PUSH2 0x3A1E PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3A38 JUMPI PUSH2 0x3A38 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE19 DUP5 DUP3 DUP6 ADD PUSH2 0x39E5 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3A6F JUMPI PUSH2 0x3A6F PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE19 DUP5 DUP5 PUSH2 0x397A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A87 DUP4 DUP4 PUSH2 0x375B JUMP JUMPDEST POP POP PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A99 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 DUP4 ADD DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3ACD JUMPI DUP2 MLOAD PUSH2 0x3ABC DUP9 DUP3 PUSH2 0x3A7B JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x3AA8 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x3AE6 DUP3 DUP6 PUSH2 0x3600 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0xE19 DUP2 DUP5 PUSH2 0x3A8F JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x4 DUP2 LT PUSH2 0x789 JUMPI PUSH2 0x789 PUSH2 0x3AF8 JUMP JUMPDEST DUP1 PUSH2 0x3951 DUP2 PUSH2 0x3B0E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D DUP3 PUSH2 0x3B1E JUMP JUMPDEST PUSH2 0x34B3 DUP2 PUSH2 0x3B28 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x3B4A DUP3 DUP7 PUSH2 0x3600 JUMP JUMPDEST PUSH2 0x3B57 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x3600 JUMP JUMPDEST PUSH2 0xE19 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x3B33 JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x74D JUMPI PUSH2 0x74D PUSH2 0x3839 JUMP JUMPDEST PUSH1 0x9 DUP2 LT PUSH2 0x789 JUMPI PUSH2 0x789 PUSH2 0x3AF8 JUMP JUMPDEST DUP1 PUSH2 0x3951 DUP2 PUSH2 0x3B77 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D DUP3 PUSH2 0x3B87 JUMP JUMPDEST PUSH2 0x34B3 DUP2 PUSH2 0x3B91 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x3BB3 DUP3 DUP6 PUSH2 0x3600 JUMP JUMPDEST PUSH2 0x89D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3B9C JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x3530 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x74D DUP2 PUSH2 0x3BC0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BE8 JUMPI PUSH2 0x3BE8 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE19 DUP5 DUP5 PUSH2 0x3BC8 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x74D JUMPI PUSH2 0x74D PUSH2 0x3839 JUMP JUMPDEST PUSH1 0x2E DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 DUP2 MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x3C07 JUMP JUMPDEST PUSH1 0x7 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH7 0x19195C1BDCDA5D PUSH1 0xCA SHL DUP2 MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x3C65 JUMP JUMPDEST PUSH1 0x29 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4F776E61626C6532537465703A2063616C6C6572206973206E6F742074686520 DUP2 MSTORE PUSH9 0x3732BB9037BBB732B9 PUSH1 0xB9 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x3C96 JUMP JUMPDEST PUSH1 0x4 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH4 0x1B5A5B9D PUSH1 0xE2 SHL DUP2 MSTORE SWAP2 POP PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x3CEC JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 DUP2 MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x3D17 JUMP JUMPDEST PUSH1 0x8 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH8 0x7769746864726177 PUSH1 0xC0 SHL DUP2 MSTORE SWAP2 POP PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x3D69 JUMP JUMPDEST PUSH1 0x6 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH6 0x72656465656D PUSH1 0xD0 SHL DUP2 MSTORE SWAP2 POP PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x3D98 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x74D DUP2 PUSH2 0x3578 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3DE5 JUMPI PUSH2 0x3DE5 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE19 DUP5 DUP5 PUSH2 0x3DC5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND PUSH2 0x74D JUMP JUMPDEST PUSH2 0x34B3 DUP2 PUSH2 0x3DF1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x74D DUP3 DUP5 PUSH2 0x3DFC JUMP JUMPDEST DUP1 DUP3 JUMPDEST PUSH1 0x1 DUP6 GT ISZERO PUSH2 0x3E52 JUMPI DUP1 DUP7 DIV DUP2 GT ISZERO PUSH2 0x3E31 JUMPI PUSH2 0x3E31 PUSH2 0x3839 JUMP JUMPDEST PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x3E3F JUMPI SWAP1 DUP2 MUL SWAP1 JUMPDEST DUP1 MUL PUSH2 0x3E4B DUP6 PUSH1 0x1 SHR SWAP1 JUMP JUMPDEST SWAP5 POP PUSH2 0x3E16 JUMP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3E6A JUMPI POP PUSH1 0x1 PUSH2 0x89D JUMP JUMPDEST DUP2 PUSH2 0x3E77 JUMPI POP PUSH1 0x0 PUSH2 0x89D JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x3E8D JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x3E97 JUMPI PUSH2 0x3EC4 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x89D JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x3EA8 JUMPI PUSH2 0x3EA8 PUSH2 0x3839 JUMP JUMPDEST DUP4 PUSH1 0x2 EXP SWAP2 POP DUP5 DUP3 GT ISZERO PUSH2 0x3EBE JUMPI PUSH2 0x3EBE PUSH2 0x3839 JUMP JUMPDEST POP PUSH2 0x89D JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x3EF7 JUMPI POP DUP2 DUP2 EXP DUP4 DUP2 GT ISZERO PUSH2 0x3EF2 JUMPI PUSH2 0x3EF2 PUSH2 0x3839 JUMP JUMPDEST PUSH2 0x89D JUMP JUMPDEST PUSH2 0x3F04 DUP5 DUP5 DUP5 PUSH1 0x1 PUSH2 0x3E13 JUMP JUMPDEST SWAP3 POP SWAP1 POP DUP2 DUP5 DIV DUP2 GT ISZERO PUSH2 0x3F1A JUMPI PUSH2 0x3F1A PUSH2 0x3839 JUMP JUMPDEST MUL SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP4 AND SWAP3 POP PUSH2 0x89D PUSH1 0x0 NOT DUP5 DUP5 PUSH2 0x3E5B JUMP JUMPDEST PUSH1 0x24 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 DUP2 MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x3F36 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 DUP2 MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x3F87 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 SWAP2 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x3FD6 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x696E76616C696420616365737320636F6E74726F6C206D616E61676572206164 DUP2 MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x4018 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4078 DUP3 DUP6 PUSH2 0x3600 JUMP JUMPDEST PUSH2 0x89D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3600 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4093 DUP3 DUP6 PUSH2 0x3600 JUMP JUMPDEST PUSH2 0x89D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x34B1 JUMP JUMPDEST PUSH1 0x1D DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 DUP2 MSTORE SWAP2 POP PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x40A0 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 DUP2 MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x40E4 JUMP JUMPDEST PUSH1 0x23 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 DUP2 MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x4136 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 DUP2 MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x4186 JUMP JUMPDEST PUSH1 0xFF DUP2 AND PUSH2 0x3530 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x74D DUP2 PUSH2 0x41D9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4202 JUMPI PUSH2 0x4202 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE19 DUP5 DUP5 PUSH2 0x41E2 JUMP JUMPDEST PUSH1 0xFF SWAP2 DUP3 AND SWAP2 SWAP1 DUP2 AND SWAP1 DUP3 DUP3 SUB SWAP1 DUP2 GT ISZERO PUSH2 0x74D JUMPI PUSH2 0x74D PUSH2 0x3839 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4093 DUP3 DUP6 PUSH2 0x34B1 JUMP JUMPDEST PUSH1 0x2B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 DUP2 MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x4239 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x436F6D7074726F6C6C65723A20496E76616C6964206D61784C6F6F70734C696D DUP2 MSTORE PUSH2 0x1A5D PUSH1 0xF2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x4291 JUMP JUMPDEST PUSH1 0x1F DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 DUP2 MSTORE SWAP2 POP PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x42E0 JUMP JUMPDEST PUSH1 0x1B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x76546F6B656E735265636569766564206174205F6465706F7369740000000000 DUP2 MSTORE SWAP2 POP PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x4324 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4376 DUP3 DUP6 PUSH2 0x3600 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0xE19 DUP2 DUP5 PUSH2 0x34EB JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4396 DUP3 DUP7 PUSH2 0x3600 JUMP JUMPDEST PUSH2 0x43A3 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x3600 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x2CBD DUP2 DUP5 PUSH2 0x34EB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH32 0x61637475616C56546F6B656E73206174205F6265666F72655769746864726177 SWAP2 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x43B5 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4411 JUMPI PUSH2 0x4411 PUSH2 0x38F7 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4430 PUSH2 0x3993 DUP5 PUSH2 0x43F7 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x444B JUMPI PUSH2 0x444B PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4456 DUP5 DUP3 DUP6 PUSH2 0x34C7 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4472 JUMPI PUSH2 0x4472 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xE19 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x4422 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4497 JUMPI PUSH2 0x4497 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x44B1 JUMPI PUSH2 0x44B1 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE19 DUP5 DUP3 DUP6 ADD PUSH2 0x445E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x44C7 DUP3 MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x44D5 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x34C7 JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH22 0x22A9219A1B191B16ABB930B83832B2102B32B73AB99 PUSH1 0x55 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x16 DUP3 ADD JUMPDEST SWAP2 POP PUSH2 0x89D DUP3 DUP5 PUSH2 0x44BD JUMP JUMPDEST PUSH5 0x3B1A1B191B PUSH1 0xD9 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x5 DUP3 ADD PUSH2 0x4502 JUMP JUMPDEST PUSH1 0x2A DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E DUP2 MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x4524 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4589 DUP3 DUP7 PUSH2 0x3600 JUMP JUMPDEST PUSH2 0x4596 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x3600 JUMP JUMPDEST PUSH2 0xE19 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x34B1 JUMP JUMPDEST PUSH1 0x1F DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 DUP2 MSTORE SWAP2 POP PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x45A3 JUMP JUMPDEST PUSH1 0x21 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A206275726E2066726F6D20746865207A65726F20616464726573 DUP2 MSTORE PUSH1 0x73 PUSH1 0xF8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x45E7 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A206275726E20616D6F756E7420657863656564732062616C616E DUP2 MSTORE PUSH2 0x6365 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x4635 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74D PUSH2 0x3736 DUP4 DUP2 JUMP JUMPDEST PUSH2 0x4699 DUP4 PUSH2 0x4684 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 NOT PUSH1 0x8 SWAP5 SWAP1 SWAP5 MUL SWAP4 DUP5 SHL NOT AND SWAP3 SHL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D6A DUP2 DUP5 DUP5 PUSH2 0x4690 JUMP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x87A JUMPI PUSH2 0x46D4 PUSH1 0x0 DUP3 PUSH2 0x46B4 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x46C1 JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x1D6A JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH1 0x20 PUSH1 0x1F DUP6 ADD DIV DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x4703 JUMPI POP DUP1 JUMPDEST PUSH2 0xBC0 PUSH1 0x20 PUSH1 0x1F DUP7 ADD DIV DUP4 ADD DUP3 PUSH2 0x46C1 JUMP JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x472F JUMPI PUSH2 0x472F PUSH2 0x38F7 JUMP JUMPDEST PUSH2 0x4739 DUP3 SLOAD PUSH2 0x38AE JUMP JUMPDEST PUSH2 0x4744 DUP3 DUP3 DUP6 PUSH2 0x46DC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x4778 JUMPI PUSH1 0x0 DUP5 ISZERO PUSH2 0x4760 JUMPI POP DUP6 DUP3 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x8 DUP7 MUL SHR NOT DUP2 AND PUSH1 0x2 DUP7 MUL OR DUP7 SSTORE POP PUSH2 0x47D1 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x47A8 JUMPI DUP9 DUP6 ADD MLOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x4788 JUMP JUMPDEST DUP7 DUP4 LT ISZERO PUSH2 0x47C4 JUMPI DUP5 DUP10 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x1F DUP10 AND PUSH1 0x8 MUL SHR NOT AND DUP3 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x2 DUP9 MUL ADD DUP9 SSTORE POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH21 0x4D6174683A206D756C446976206F766572666C6F77 PUSH1 0x58 SHL DUP2 MSTORE SWAP2 POP PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x47D9 JUMP JUMPDEST PUSH1 0x36 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F DUP2 MSTORE PUSH22 0x20746F206E6F6E2D7A65726F20616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x4815 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x89D DUP3 DUP5 PUSH2 0x44BD JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F DUP2 MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x4884 JUMP JUMPDEST PUSH1 0x1D DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 DUP2 MSTORE SWAP2 POP PUSH2 0x3C7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x74D DUP2 PUSH2 0x48D7 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP5 0xD0 SMOD SWAP14 TLOAD TLOAD 0x4E SWAP4 EXTCODECOPY 0x1F PUSH21 0x396514BA6540D1C30D307D4C8D004E4E4360338870 PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ","sourceMap":"1707:21011:52:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12769:169;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2516:98:5;;;:::i;:::-;;;;;;;:::i;5831:167:7:-;;;;;;:::i;:::-;;:::i;4802:197:5:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7199:165:7:-;;;;;;:::i;:::-;;:::i;2102:147:26:-;;;;;;:::i;:::-;;:::i;:::-;;2328:30:52;;;;;-1:-1:-1;;;;;2328:30:52;;;;;;;;;;:::i;3613:106:5:-;3700:12;;3613:106;;6494:338:52;;;;;;:::i;:::-;;:::i;5561:256:5:-;;;;;;:::i;:::-;;:::i;5061:173:7:-;;;:::i;:::-;;;;;;;:::i;7102:1543:52:-;;;:::i;5278:103:7:-;5367:6;;-1:-1:-1;;;;;5367:6:7;5278:103;;6212:234:5;;;;;;:::i;:::-;;:::i;13222:436:52:-;;;;;;:::i;:::-;;:::i;9095:417::-;;;;;;:::i;:::-;;:::i;2214:31::-;;;;;-1:-1:-1;;;;;2214:31:52;;;;;;;;;;:::i;9557:716::-;;;;;;:::i;:::-;;:::i;3777:125:5:-;;;;;;:::i;:::-;-1:-1:-1;;;;;3877:18:5;3851:7;3877:18;;;:9;:18;;;;;;;3777:125;2085:101:1;;;:::i;2031:212:0:-;;;:::i;5767:159:52:-;;;;;;:::i;:::-;;:::i;1462:85:1:-;1534:6;;-1:-1:-1;;;;;1534:6:1;1462:85;;10490:572:52;;;;;;:::i;:::-;;:::i;2727:102:5:-;;;:::i;2104:20:52:-;;;;;-1:-1:-1;;;;;2104:20:52;;;6933:427:5;;;;;;:::i;:::-;;:::i;4098:189::-;;;;;;:::i;:::-;;:::i;6984:161:7:-;;;;;;:::i;:::-;;:::i;11333:614:52:-;;;;;;:::i;:::-;;:::i;2345:125:26:-;2442:21;;-1:-1:-1;;;;;2442:21:26;2345:125;;11992:667:52;;;;;;:::i;:::-;;:::i;323:28:34:-;;;;;;5101:420:52;;;;;;:::i;:::-;;:::i;13939:148::-;;;;;;:::i;:::-;;:::i;5610:167:7:-;;;;;;:::i;:::-;;:::i;14375:591:52:-;;;;;;:::i;:::-;;:::i;15247:664::-;;;;;;:::i;:::-;;:::i;4345:149:5:-;;;;;;:::i;:::-;;:::i;1144:99:0:-;1223:13;;-1:-1:-1;;;;;1223:13:0;1144:99;;6093:169:52;;;;;;:::i;:::-;;:::i;1436:178:0:-;;;;;;:::i;:::-;;:::i;12769:169:52:-;12830:7;287:4:40;12891:6:52;;;;;;;;;-1:-1:-1;;;;;12891:6:52;-1:-1:-1;;;;;12891:25:52;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12857:6;;:31;;-1:-1:-1;;;12857:31:52;;-1:-1:-1;;;;;12857:6:52;;;;:16;;:31;;12882:4;;12857:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;;;:::i;:::-;12856:75;;;;:::i;:::-;12849:82;;12769:169;:::o;2516:98:5:-;2570:13;2602:5;2595:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2516:98;:::o;5831:167:7:-;5910:7;5936:55;5953:6;5961:29;5936:16;:55::i;:::-;5929:62;5831:167;-1:-1:-1;;5831:167:7:o;4802:197:5:-;4885:4;965:10:12;4939:32:5;965:10:12;4955:7:5;4964:6;4939:8;:32::i;:::-;-1:-1:-1;4988:4:5;;4802:197;-1:-1:-1;;;4802:197:5:o;7199:165:7:-;7278:7;7304:53;7321:6;7329:27;7304:16;:53::i;2102:147:26:-;1355:13:1;:11;:13::i;:::-;2195:47:26::1;2220:21;2195:24;:47::i;:::-;2102:147:::0;:::o;6494:338:52:-;1355:13:1;:11;:13::i;:::-;6586:30:52::1;::::0;-1:-1:-1;;;6586:30:52;;6568:15:::1;::::0;-1:-1:-1;;;;;6586:15:52;::::1;::::0;::::1;::::0;:30:::1;::::0;6610:4:::1;::::0;6586:30:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6568:48:::0;-1:-1:-1;6631:11:52;;6627:199:::1;;6658:14;6675:7;1534:6:1::0;;-1:-1:-1;;;;;1534:6:1;;1462:85;6675:7:52::1;6658:24;;6696:57;6730:5;6737:6;6745:7;6696:33;:57::i;:::-;6799:6;-1:-1:-1::0;;;;;6772:43:52::1;6791:5;-1:-1:-1::0;;;;;6772:43:52::1;;6807:7;6772:43;;;;;;:::i;:::-;;;;;;;;6644:182;6627:199;6558:274;6494:338:::0;:::o;5561:256:5:-;5658:4;965:10:12;5714:38:5;5730:4;965:10:12;5745:6:5;5714:15;:38::i;:::-;5762:27;5772:4;5778:2;5782:6;5762:9;:27::i;:::-;5806:4;5799:11;;;5561:256;;;;;;:::o;5061:173:7:-;5164:5;5210:17;:15;:17::i;:::-;5188:19;;:39;;;-1:-1:-1;;;5188:19:7;;;;:39;:::i;7102:1543:52:-;7173:11;;7211:6;;7254:15;;7329:36;;;-1:-1:-1;;;7329:36:52;;;;-1:-1:-1;;;;;7173:11:52;;;;7211:6;;;;7254:15;;;;7145:25;;7173:11;;7329:34;;:36;;;;;7145:25;;7329:36;;;;;;;;7173:11;7329:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7329:36:52;;;;;;;;;;;;:::i;:::-;7280:85;;7376:42;7392:18;:25;7376:15;:42::i;:::-;7434:9;7429:1210;7453:18;:25;7449:1;:29;7429:1210;;;7499:36;7538:18;7557:1;7538:21;;;;;;;;:::i;:::-;;;;;;;7499:60;;7573:29;7631:17;-1:-1:-1;;;;;7631:29:52;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7705:15;;;7718:1;7705:15;;;;;;;;;7573:91;;-1:-1:-1;7679:23:52;;7705:15;;;;;;;;;;;;-1:-1:-1;7705:15:52;7679:41;;7747:7;7734;7742:1;7734:10;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7734:20:52;;;:10;;;;;;;;;:20;7768:78;;-1:-1:-1;;;7768:78:52;;:54;;;;;;:78;;7831:4;;7838:7;;7768:78;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7884:36:52;;-1:-1:-1;;;7884:36:52;;7860:21;;-1:-1:-1;;;;;;7884:21:52;;;-1:-1:-1;7884:21:52;;:36;;7914:4;;7884:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7860:60;-1:-1:-1;7939:17:52;;7935:626;;7976:79;8010:11;8023:16;8041:13;7976:33;:79::i;:::-;8265:254;;-1:-1:-1;;;8265:254:52;;-1:-1:-1;;;;;8265:57:52;;;;;:254;;8356:12;;8403:11;;8441:56;;8265:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8241:306;;8615:11;-1:-1:-1;;;;;8579:49:52;;8592:13;8579:49;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;7480:3:52;;;;;-1:-1:-1;7429:1210:52;;-1:-1:-1;7429:1210:52;;;7135:1510;;;;7102:1543::o;6212:234:5:-;6300:4;965:10:12;6354:64:5;965:10:12;6370:7:5;6407:10;6379:25;965:10:12;6370:7:5;6379:9;:25::i;:::-;:38;;;;:::i;:::-;6354:8;:64::i;13222:436:52:-;13324:11;;13357:6;;13324:54;;-1:-1:-1;;;13324:54:52;;13301:7;;-1:-1:-1;;;;;13324:11:52;;;;:24;;:54;;13357:6;;;;13301:7;;13324:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13320:93;;;-1:-1:-1;13401:1:52;;13222:436;-1:-1:-1;13222:436:52:o;13320:93::-;13443:11;;13474:6;;13443:39;;-1:-1:-1;;;13443:39:52;;13423:17;;-1:-1:-1;;;;;13443:11:52;;;;:22;;:39;;13474:6;;;;13443:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13423:59;;13492:20;287:4:40;13539:6:52;;;;;;;;;-1:-1:-1;;;;;13539:6:52;-1:-1:-1;;;;;13539:25:52;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13516:6;;;;;;;;;-1:-1:-1;;;;;13516:6:52;-1:-1:-1;;;;;13516:18:52;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;;:::i;:::-;13515:64;;;;:::i;:::-;13492:87;;13608:12;13596:9;:24;:55;;13650:1;13596:55;;;13623:24;13635:12;13623:9;:24;:::i;:::-;13589:62;13222:436;-1:-1:-1;;;;13222:436:52:o;9095:417::-;4882:13:3;;9274:1:52;;4882:13:3;;;;;4881:14;:40;;;;-1:-1:-1;4899:12:3;;:22;;;;:12;;:22;4881:40;4873:99;;;;-1:-1:-1;;;4873:99:3;;;;;;;:::i;:::-;;;;;;;;;4982:12;:22;;-1:-1:-1;;5014:20:3;4982:22;;;5014:20;4982:22;5014:20;;;9287:33:52::1;9308:11:::0;9287:20:::1;:33::i;:::-;9331:46;9355:21;9331:23;:46::i;:::-;9387:30;9405:11;9387:17;:30::i;:::-;9427:37;9447:16;9427:19;:37::i;:::-;9474:31;9493:11;9474:18;:31::i;:::-;5071:5:3::0;5055:21;;-1:-1:-1;;5055:21:3;;;5091:20;;;;;;5103:7;;5091:20;:::i;:::-;;;;;;;;9095:417:52;;;;;:::o;9557:716::-;9646:7;2526:21:4;:19;:21::i;:::-;9665:30:52::1;9686:8;9665:20;:30::i;:::-;9706:6;;;;;;;;;-1:-1:-1::0;;;;;9706:6:52::1;-1:-1:-1::0;;;;;9706:21:52::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9743:6;9753:1;9743:11:::0;9739:79:::1;;9777:30;;-1:-1:-1::0;;;9777:30:52::1;;;;;;;:::i;9739:79::-;9840:20;9851:8;9840:10;:20::i;:::-;9831:6;:29;9827:96;;;9883:29;;-1:-1:-1::0;;;9883:29:52::1;;;;;;;;;;;9827:96;9933:14;9950:22;9965:6;9950:14;:22::i;:::-;9933:39;;9986:6;9996:1;9986:11:::0;9982:79:::1;;10020:30;;-1:-1:-1::0;;;10020:30:52::1;;;;;;;:::i;9982:79::-;10071:25;10099:13;3700:12:5::0;;;3613:106;10099:13:52::1;10071:41:::0;-1:-1:-1;10122:48:52::1;965:10:12::0;10145:8:52::1;10155:6;10163;10122:8;:48::i;:::-;10180:20;10219:17;10203:13;3700:12:5::0;;;3613:106;10203:13:52::1;:33;;;;:::i;:::-;10180:56:::0;-1:-1:-1;;;;2568:20:4;1808:1;3074:7;:22;2894:209;2085:101:1;1355:13;:11;:13::i;:::-;2149:30:::1;2176:1;2149:18;:30::i;:::-;2085:101::o:0;2031:212:0:-;1223:13;;965:10:12;;-1:-1:-1;;;;;1223:13:0;2130:24;;2122:78;;;;-1:-1:-1;;;2122:78:0;;;;;;;:::i;:::-;2210:26;2229:6;2210:18;:26::i;5767:159:52:-;5832:48;;;;;;;;;;;;;;;;;;:19;:48::i;:::-;5890:29;5908:10;5890:17;:29::i;10490:572::-;10576:7;2526:21:4;:19;:21::i;:::-;10595:30:52::1;10616:8;10595:20;:30::i;:::-;10636:6;;;;;;;;;-1:-1:-1::0;;;;;10636:6:52::1;-1:-1:-1::0;;;;;10636:21:52::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10673:6;10683:1;10673:11:::0;10669:76:::1;;10707:27;;-1:-1:-1::0;;;10707:27:52::1;;;;;;;:::i;10669:76::-;10767:17;10775:8;10767:7;:17::i;:::-;10758:6;:26;10754:90;;;10807:26;;-1:-1:-1::0;;;10807:26:52::1;;;;;;;;;;;10754:90;10853:14;10870:19;10882:6;10870:11;:19::i;:::-;10853:36;;10903:6;10913:1;10903:11:::0;10899:76:::1;;10937:27;;-1:-1:-1::0;;;10937:27:52::1;;;;;;;:::i;10899:76::-;10984:48;965:10:12::0;11007:8:52::1;11017:6;11025;10984:8;:48::i;:::-;11049:6:::0;-1:-1:-1;2568:20:4;1808:1;3074:7;:22;2894:209;2727:102:5;2783:13;2815:7;2808:14;;;;;:::i;6933:427::-;7026:4;965:10:12;7026:4:5;7107:25;965:10:12;7124:7:5;7107:9;:25::i;:::-;7080:52;;7170:15;7150:16;:35;;7142:85;;;;-1:-1:-1;;;7142:85:5;;;;;;;:::i;:::-;7261:60;7270:5;7277:7;7305:15;7286:16;:34;7261:8;:60::i;:::-;-1:-1:-1;7349:4:5;;6933:427;-1:-1:-1;;;;6933:427:5:o;4098:189::-;4177:4;965:10:12;4231:28:5;965:10:12;4248:2:5;4252:6;4231:9;:28::i;6984:161:7:-;7059:7;7085:53;7102:6;7110:27;7085:16;:53::i;11333:614:52:-;11438:7;2526:21:4;:19;:21::i;:::-;11457:30:52::1;11478:8;11457:20;:30::i;:::-;11497:27;11518:5;11497:20;:27::i;:::-;11535:6;;;;;;;;;-1:-1:-1::0;;;;;11535:6:52::1;-1:-1:-1::0;;;;;11535:21:52::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11572:6;11582:1;11572:11:::0;11568:80:::1;;11606:31;;-1:-1:-1::0;;;11606:31:52::1;;;;;;;:::i;11568:80::-;11670:18;11682:5;11670:11;:18::i;:::-;11661:6;:27;11657:95;;;11711:30;;-1:-1:-1::0;;;11711:30:52::1;;;;;;;;;;;11657:95;11763:20;11785::::0;11809:23:::1;11825:6;11809:15;:23::i;:::-;11762:70;;;;11842:68;11852:12;965:10:12::0;;886:96;11852:12:52::1;11866:8;11876:5;11883:12;11897;11842:9;:68::i;:::-;11928:12:::0;-1:-1:-1;;2568:20:4;1808:1;3074:7;:22;2894:209;11992:667:52;12095:7;2526:21:4;:19;:21::i;:::-;12114:30:52::1;12135:8;12114:20;:30::i;:::-;12154:27;12175:5;12154:20;:27::i;:::-;12192:6;;;;;;;;;-1:-1:-1::0;;;;;12192:6:52::1;-1:-1:-1::0;;;;;12192:21:52::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12229:6;12239:1;12229:11:::0;12225:78:::1;;12263:29;;-1:-1:-1::0;;;12263:29:52::1;;;;;;;:::i;12225:78::-;12325:16;12335:5;12325:9;:16::i;:::-;12316:6;:25;12312:91;;;12364:28;;-1:-1:-1::0;;;12364:28:52::1;;;;;;;;;;;12312:91;12413:20;12436:21;12450:6;12436:13;:21::i;:::-;12413:44;;12471:12;12487:1;12471:17:::0;12467:84:::1;;12511:29;;-1:-1:-1::0;;;12511:29:52::1;;;;;;;:::i;12467:84::-;12561:62;965:10:12::0;12585:8:52::1;12595:5;12602:12;12616:6;12561:9;:62::i;:::-;12640:12:::0;-1:-1:-1;2568:20:4;1808:1;3074:7;:22;2894:209;5101:420:52;3279:19:3;3302:13;;;;;;3301:14;;3347:34;;;;-1:-1:-1;3365:12:3;;3380:1;3365:12;;;;:16;3347:34;3346:108;;;-1:-1:-1;3426:4:3;1713:19:11;:23;;;3387:66:3;;-1:-1:-1;3436:12:3;;;;;:17;3387:66;3325:201;;;;-1:-1:-1;;;3325:201:3;;;;;;;:::i;:::-;3536:12;:16;;-1:-1:-1;;3536:16:3;3551:1;3536:16;;;3562:65;;;;3596:13;:20;;-1:-1:-1;;3596:20:3;;;;;3562:65;5167:29:52::1;5188:7;5167:20;:29::i;:::-;5207:6;:24:::0;;-1:-1:-1;;;;;;5207:24:52::1;-1:-1:-1::0;;;;;5207:24:52;::::1;::::0;;::::1;::::0;;;5276:20:::1;::::0;;-1:-1:-1;;;5276:20:52;;;;:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;5207:24;5276:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5241:11;:57:::0;;-1:-1:-1;;;;;;5241:57:52::1;-1:-1:-1::0;;;;;5241:57:52;;::::1;;::::0;;5350:6:::1;::::0;:19:::1;::::0;;-1:-1:-1;;;5350:19:52;;;;-1:-1:-1;;5350:6:52;;;::::1;::::0;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:6;:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5308:62;;5381:68;5394:25;5413:5;5394:18;:25::i;:::-;5421:27;5442:5;5421:20;:27::i;:::-;5381:12;:68::i;:::-;5459:21;5474:5;5459:14;:21::i;:::-;5490:24;:22;:24::i;:::-;5157:364;3651:14:3::0;3647:99;;;3697:5;3681:21;;-1:-1:-1;;3681:21:3;;;3721:14;;;;;;3681:13;;3721:14;:::i;:::-;;;;;;;;3269:483;5101:420:52;:::o;13939:148::-;14015:7;14041:39;14057:22;14076:1;14057:10;:22::i;5610:167:7:-;5689:7;5715:55;5732:6;5740:29;5715:16;:55::i;14375:591:52:-;14475:11;;14508:6;;14475:56;;-1:-1:-1;;;14475:56:52;;14452:7;;-1:-1:-1;;;;;14475:11:52;;;;:24;;:56;;14508:6;;;;14475:11;;:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14471:95;;;-1:-1:-1;14554:1:52;;14375:591;-1:-1:-1;14375:591:52:o;14471:95::-;14591:6;;:16;;;-1:-1:-1;;;14591:16:52;;;;14576:12;;-1:-1:-1;;;;;14591:6:52;;:14;;:16;;;;;;;;;;;;;;:6;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14576:31;;14617:21;14641:6;;;;;;;;;-1:-1:-1;;;;;14641:6:52;-1:-1:-1;;;;;14641:20:52;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14617:46;;14673:21;14697:36;14713:19;14723:8;-1:-1:-1;;;;;3877:18:5;3851:7;3877:18;;;:9;:18;;;;;;;3777:125;14697:36:52;14673:60;;14755:13;14748:4;:20;14744:216;;;-1:-1:-1;14791:1:52;;14375:591;-1:-1:-1;;;;14375:591:52:o;14744:216::-;14823:21;14847:20;14854:13;14847:4;:20;:::i;:::-;14823:44;;14904:13;14888;:29;:61;;14936:13;14888:61;;;14920:13;14888:61;14881:68;14375:591;-1:-1:-1;;;;;;14375:591:52:o;15247:664::-;15345:11;;15378:6;;15345:56;;-1:-1:-1;;;15345:56:52;;15322:7;;-1:-1:-1;;;;;15345:11:52;;;;:24;;:56;;15378:6;;;;15345:11;;:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15341:95;;;-1:-1:-1;15424:1:52;;15247:664;-1:-1:-1;15247:664:52:o;15341:95::-;15461:6;;:16;;;-1:-1:-1;;;15461:16:52;;;;15446:12;;-1:-1:-1;;;;;15461:6:52;;:14;;:16;;;;;;;;;;;;;;:6;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15446:31;;15487:21;15511:6;;;;;;;;;-1:-1:-1;;;;;15511:6:52;-1:-1:-1;;;;;15511:20:52;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15487:46;;15554:13;15547:4;:20;15543:362;;;-1:-1:-1;15590:1:52;;15247:664;-1:-1:-1;;;15247:664:52:o;15543:362::-;15622:21;15646:20;15653:13;15646:4;:20;:::i;:::-;15622:44;;15680:29;15712:30;15728:13;15712:15;:30::i;:::-;15680:62;;15756:20;15779:19;15789:8;-1:-1:-1;;;;;3877:18:5;3851:7;3877:18;;;:9;:18;;;;;;;3777:125;15779:19:52;15756:42;;15843:12;15819:21;:36;:75;;15882:12;15819:75;;;15858:21;15819:75;15812:82;15247:664;-1:-1:-1;;;;;;;15247:664:52:o;4345:149:5:-;-1:-1:-1;;;;;4460:18:5;;;4434:7;4460:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4345:149::o;6093:169:52:-;6162:50;;;;;;;;;;;;;;;;;;:19;:50::i;:::-;6222:33;6242:12;6222:19;:33::i;1436:178:0:-;1355:13:1;:11;:13::i;:::-;1525::0::1;:24:::0;;-1:-1:-1;;;;;1525:24:0;::::1;-1:-1:-1::0;;;;;;1525:24:0;;::::1;::::0;::::1;::::0;;;1589:7:::1;1534:6:1::0;;-1:-1:-1;;;;;1534:6:1;;1462:85;1589:7:0::1;-1:-1:-1::0;;;;;1564:43:0::1;;;;;;;;;;;1436:178:::0;:::o;9746:224:7:-;9854:7;9880:83;9894:13;:11;:13::i;:::-;:17;;9910:1;9894:17;:::i;:::-;9935;:15;:17::i;:::-;9929:23;;:2;:23;:::i;:::-;3700:12:5;;9913:39:7;;;;:::i;:::-;9880:6;;:83;9954:8;9880:13;:83::i;10815:340:5:-;-1:-1:-1;;;;;10916:19:5;;10908:68;;;;-1:-1:-1;;;10908:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;10994:21:5;;10986:68;;;;-1:-1:-1;;;10986:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;11065:18:5;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;11116:32;;;;;11095:6;;11116:32;:::i;9398:224:7:-;9506:7;9532:83;9568:17;:15;:17::i;:::-;9562:23;;:2;:23;:::i;:::-;3700:12:5;;9546:39:7;;;;:::i;:::-;9587:13;:11;:13::i;:::-;:17;;9603:1;9587:17;:::i;1620:130:1:-;1534:6;;-1:-1:-1;;;;;1534:6:1;965:10:12;1683:23:1;1675:68;;;;-1:-1:-1;;;1675:68:1;;;;;;;:::i;2641:425:26:-;-1:-1:-1;;;;;2733:44:26;;2725:94;;;;-1:-1:-1;;;2725:94:26;;;;;;;:::i;:::-;2871:21;;;-1:-1:-1;;;;;2903:70:26;;;-1:-1:-1;;;;;;2903:70:26;;;;;;2988:71;;2871:21;;;2988:71;;;;2871:21;;2951;;2988:71;:::i;996:186:10:-;1089:86;1109:5;1139:23;;;1164:2;1168:5;1116:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1116:58:10;;;;;;;;;;;;;;-1:-1:-1;;;;;1116:58:10;-1:-1:-1;;;;;;1116:58:10;;;;;;;;;;1089:19;:86::i;:::-;996:186;;;:::o;11436:411:5:-;11536:24;11563:25;11573:5;11580:7;11563:9;:25::i;:::-;11536:52;;-1:-1:-1;;11602:16:5;:37;11598:243;;11683:6;11663:16;:26;;11655:68;;;;-1:-1:-1;;;11655:68:5;;;;;;;:::i;:::-;11765:51;11774:5;11781:7;11809:6;11790:16;:25;11765:8;:51::i;:::-;11526:321;11436:411;;;:::o;7814:788::-;-1:-1:-1;;;;;7910:18:5;;7902:68;;;;-1:-1:-1;;;7902:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;7988:16:5;;7980:64;;;;-1:-1:-1;;;7980:64:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;8126:15:5;;8104:19;8126:15;;;:9;:15;;;;;;8159:21;;;;8151:72;;;;-1:-1:-1;;;8151:72:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;8257:15:5;;;;;;;:9;:15;;;;;;8275:20;;;8257:38;;8472:13;;;;;;;;;;:23;;;;;;8521:26;;;;;;8289:6;;8521:26;:::i;:::-;;;;;;;;8558:37;996:186:10;21712:139:52;21779:5;21825:7;5367:6:7;;-1:-1:-1;;;;;5367:6:7;;5278:103;21825:7:52;-1:-1:-1;;;;;21808:34:52;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21803:41;;:2;:41;:::i;1612:166:34:-;1684:13;;1678:3;:19;1674:98;;;1742:13;;1757:3;1720:41;;-1:-1:-1;;;1720:41:34;;;;;;;;;:::i;485:136:46:-;-1:-1:-1;;;;;548:22:46;;544:75;;589:23;;-1:-1:-1;;;589:23:46;;;;;;;;;;;1419:194:26;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;1519:21:26::1;:19;:21::i;:::-;1550:56;1584:21;1550:33;:56::i;1087:279:34:-:0;1164:13;;1156:5;:21;1148:68;;;;-1:-1:-1;;;1148:68:34;;;;;;;:::i;:::-;1254:13;;;1277:21;;;;1314:45;;;;;;1254:13;;1293:5;;1314:45;:::i;19331:220:52:-;19401:34;19422:12;19401:20;:34::i;:::-;19474:15;;19451:53;;-1:-1:-1;;;;;19451:53:52;;;;19474:15;;19451:53;;19474:15;;19451:53;19514:15;:30;;-1:-1:-1;;;;;;19514:30:52;-1:-1:-1;;;;;19514:30:52;;;;;;;;;;19331:220::o;1798:153:0:-;1887:13;1880:20;;-1:-1:-1;;;;;;1880:20:0;;;1910:34;1935:8;1910:24;:34::i;2601:287:4:-;1851:1;2733:7;;:19;2725:63;;;;-1:-1:-1;;;2725:63:4;;;;;;;:::i;:::-;1851:1;2863:7;:18;2601:287::o;19843:1696:52:-;19997:26;20044:7;5367:6:7;;-1:-1:-1;;;;;5367:6:7;;5278:103;20044:7:52;-1:-1:-1;;;;;20026:36:52;;20071:4;20026:51;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20117:6;;:31;;-1:-1:-1;;;20117:31:52;;19997:80;;-1:-1:-1;20087:27:52;;-1:-1:-1;;;;;20117:6:52;;;;:16;;:31;;20142:4;;20117:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20087:61;;20221:96;20277:7;5367:6:7;;-1:-1:-1;;;;;5367:6:7;;5278:103;20277:7:52;20287:6;20303:4;20310:6;20221:37;:96::i;:::-;20410:22;20489:18;20453:7;5367:6:7;;-1:-1:-1;;;;;5367:6:7;;5278:103;20453:7:52;-1:-1:-1;;;;;20435:36:52;;20480:4;20435:51;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:72;;;;:::i;:::-;20410:97;;20566:28;20579:14;20566:12;:28::i;:::-;20676:6;;:31;;-1:-1:-1;;;20676:31:52;;20650:23;;20710:19;;-1:-1:-1;;;;;20676:6:52;;;;:16;;:31;;20701:4;;20676:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;;:::i;:::-;20650:79;;20743:15;20762:1;20743:20;20739:108;;20786:50;;-1:-1:-1;;;20786:50:52;;;;;;;:::i;20739:108::-;20856:25;287:4:40;20903:6:52;;;;;;;;;-1:-1:-1;;;;;20903:6:52;-1:-1:-1;;;;;20903:25:52;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20885:45;;:15;:45;:::i;:::-;20884:59;;;;:::i;:::-;20856:87;;21112:20;21135:248;21195:17;:15;:17::i;:::-;21189:23;;:2;:23;:::i;:::-;3700:12:5;;21173:39:52;;;;:::i;:::-;21246:17;21226:13;:11;:13::i;:::-;:17;;21242:1;21226:17;:::i;:::-;:37;;;;:::i;:::-;21135:17;;:248;21344:29;21135:24;:248::i;:::-;21112:271;;21440:29;21446:8;21456:12;21440:5;:29::i;:::-;21501:8;-1:-1:-1;;;;;21485:47:52;21493:6;-1:-1:-1;;;;;21485:47:52;;21511:6;21519:12;21485:47;;;;;;;:::i;:::-;;;;;;;;19945:1594;;;;;;19843:1696;;;;:::o;2894:209:4:-;1808:1;3074:7;:22;2894:209::o;3203:282:26:-;3304:21;;:60;;-1:-1:-1;;;3304:60:26;;3281:20;;-1:-1:-1;;;;;3304:21:26;;:37;;:60;;3342:10;;3354:9;;3304:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3281:83;;3380:15;3375:104;;3431:10;3451:4;3458:9;3418:50;;-1:-1:-1;;;3418:50:26;;;;;;;;;;:::i;17477:1061:52:-;17536:20;17558;17590:23;17634:7;5367:6:7;;-1:-1:-1;;;;;5367:6:7;;5278:103;17634:7:52;17590:52;;17652:21;17676:5;-1:-1:-1;;;;;17676:15:52;;17700:4;17676:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17746:6;;:31;;-1:-1:-1;;;17746:31:52;;17652:54;;-1:-1:-1;17716:27:52;;-1:-1:-1;;;;;17746:6:52;;;;:16;;:31;;17771:4;;17746:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17808:6;;:31;;-1:-1:-1;;;17808:31:52;;17716:61;;-1:-1:-1;17788:17:52;;-1:-1:-1;;;;;17808:6:52;;;;:23;;:31;;17832:6;;17808:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17788:51;-1:-1:-1;17853:21:52;;17849:94;;17922:9;17897:35;;-1:-1:-1;;;17897:35:52;;;;;;;;:::i;17849:94::-;18033:30;;-1:-1:-1;;;18033:30:52;;18066:13;;-1:-1:-1;;;;;18033:15:52;;;;;:30;;18057:4;;18033:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;;;:::i;:::-;18136:6;;:31;;-1:-1:-1;;;18136:31:52;;18018:61;;-1:-1:-1;18090:21:52;;-1:-1:-1;;;;;18136:6:52;;;;:16;;:31;;18161:4;;18136:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18114:53;;:19;:53;:::i;:::-;18090:77;;18181:13;18198:1;18181:18;18177:111;;18222:55;;-1:-1:-1;;;18222:55:52;;;;;;;:::i;18177:111::-;18374:157;18430:17;:15;:17::i;:::-;18424:23;;:2;:23;:::i;:::-;3700:12:5;;18408:39:52;;;;:::i;:::-;18374:13;;18461:19;18494:27;18374:20;:157::i;:::-;18359:172;;17580:958;;;;;17477:1061;;;:::o;10942:925:7:-;11129:5;-1:-1:-1;;;;;11119:15:7;:6;-1:-1:-1;;;;;11119:15:7;;11115:84;;11150:38;11166:5;11173:6;11181;11150:15;:38::i;:::-;11706:20;11712:5;11719:6;11706:5;:20::i;:::-;11770:6;;11736:59;;-1:-1:-1;;;;;11770:6:7;11778:8;11788:6;11736:33;:59::i;:::-;11838:5;-1:-1:-1;;;;;11811:49:7;11828:8;-1:-1:-1;;;;;11811:49:7;11820:6;-1:-1:-1;;;;;11811:49:7;;11845:6;11853;11811:49;;;;;;;:::i;:::-;;;;;;;;10942:925;;;;;:::o;16174:828:52:-;16231:7;16250:23;16294:7;5367:6:7;;-1:-1:-1;;;;;5367:6:7;;5278:103;16294:7:52;16250:52;;16312:21;16336:5;-1:-1:-1;;;;;16336:15:52;;16360:4;16336:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16518:6;;:31;;-1:-1:-1;;;16518:31:52;;16312:54;;-1:-1:-1;16473:15:52;;16491:164;;-1:-1:-1;;;;;16518:6:52;;:16;;:31;;16543:4;;16518:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16585:17;:15;:17::i;:::-;16579:23;;:2;:23;:::i;:::-;3700:12:5;;16563:39:52;;;;:::i;:::-;16491:6;;:164;16616:29;16491:13;:164::i;:::-;16686:6;;:22;;-1:-1:-1;;;16686:22:52;;16473:182;;-1:-1:-1;16666:17:52;;-1:-1:-1;;;;;16686:6:52;;;;:13;;:22;;16473:182;;16686:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16666:42;-1:-1:-1;16722:21:52;;16718:94;;16791:9;16766:35;;-1:-1:-1;;;16766:35:52;;;;;;;;:::i;16718:94::-;16845:30;;-1:-1:-1;;;16845:30:52;;16822:20;;-1:-1:-1;;;;;16845:15:52;;;;;:30;;16869:4;;16845:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16822:53;-1:-1:-1;16967:28:52;16982:13;16822:53;16967:28;:::i;22106:180::-;22182:13;22264:6;-1:-1:-1;;;;;22264:11:52;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22264:13:52;;;;;;;;;;;;:::i;:::-;22221:57;;;;;;;;:::i;:::-;;;;;;;;;;;;;22207:72;;22106:180;;;:::o;22549:167::-;22627:13;22692:6;-1:-1:-1;;;;;22692:13:52;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22692:15:52;;;;;;;;;;;;:::i;:::-;22666:42;;;;;;;;:::i;2139:147:5:-;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;2241:38:5::1;2264:5;2271:7;2241:22;:38::i;3560:125:7:-:0;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;3646:32:7::1;3671:6;3646:24;:32::i;1889:111:4:-:0;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;1959:34:4::1;:32;:34::i;6023:299:13:-:0;6124:7;6143:14;6160:25;6167:1;6170;6173:11;6160:6;:25::i;:::-;6143:42;-1:-1:-1;6211:11:13;6199:8;:23;;;;;;;;:::i;:::-;;:56;;;;;6254:1;6239:11;6226:25;;;;;:::i;:::-;6236:1;6233;6226:25;:29;6199:56;6195:98;;;6271:11;6281:1;6271:11;;:::i;:::-;;;6195:98;6309:6;6023:299;-1:-1:-1;;;;;6023:299:13:o;5328:653:10:-;5758:23;5784:69;5812:4;5784:69;;;;;;;;;;;;;;;;;5792:5;-1:-1:-1;;;;;5784:27:10;;;:69;;;;;:::i;:::-;5758:95;;5871:10;:17;5892:1;5871:22;:56;;;;5908:10;5897:30;;;;;;;;;;;;:::i;:::-;5863:111;;;;-1:-1:-1;;;5863:111:10;;;;;;;:::i;889:100:0:-;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;956:26:0::1;:24;:26::i;1619:164:26:-:0;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;2687:187:1:-;2779:6;;;-1:-1:-1;;;;;2795:17:1;;;-1:-1:-1;;;;;;2795:17:1;;;;;;;2827:40;;2779:6;;;2795:17;2779:6;;2827:40;;2760:16;;2827:40;2750:124;2687:187;:::o;1421:214:10:-;1532:96;1552:5;1582:27;;;1611:4;1617:2;1621:5;1559:68;;;;;;;;;;:::i;18733:278:52:-;18836:6;;18790:62;;-1:-1:-1;;;;;18836:6:52;18845;18807:7;5367:6:7;;-1:-1:-1;;;;;5367:6:7;;5278:103;18807:7:52;-1:-1:-1;;;;;18790:37:52;;:62;:37;:62::i;:::-;18882:6;;:19;;-1:-1:-1;;;18882:19:52;;18862:17;;-1:-1:-1;;;;;18882:6:52;;:11;;:19;;18894:6;;18882:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18862:39;-1:-1:-1;18915:21:52;;18911:94;;18984:9;18959:35;;-1:-1:-1;;;18959:35:52;;;;;;;;:::i;8878:535:5:-;-1:-1:-1;;;;;8961:21:5;;8953:65;;;;-1:-1:-1;;;8953:65:5;;;;;;;:::i;:::-;9105:6;9089:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;9257:18:5;;;;;;:9;:18;;;;;;:28;;;;;;9310:37;;;;;9279:6;;9310:37;:::i;:::-;;;;;;;;6558:274:52::1;6494:338:::0;:::o;9733:659:5:-;-1:-1:-1;;;;;9816:21:5;;9808:67;;;;-1:-1:-1;;;9808:67:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;9971:18:5;;9946:22;9971:18;;;:9;:18;;;;;;10007:24;;;;9999:71;;;;-1:-1:-1;;;9999:71:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;10104:18:5;;;;;;:9;:18;;;;;;10125:23;;;10104:44;;10241:12;:22;;;;;;;10289:37;10104:18;;;10289:37;;;;10142:6;;10289:37;:::i;2292:159::-;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;2404:5:5::1;:13;2412:5:::0;2404;:13:::1;:::i;:::-;-1:-1:-1::0;2427:7:5::1;:17;2437:7:::0;2427;:17:::1;:::i;3691:254:7:-:0;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;3788:12:7::1;3802:19:::0;3825:28:::1;3846:6;3825:20;:28::i;:::-;3787:66;;;;3885:7;:28;;3911:2;3885:28;;;3895:13;3885:28;3863:19;:50:::0;;-1:-1:-1;;;;;3923:15:7;;::::1;-1:-1:-1::0;;;;;;3863:50:7::1;::::0;;;::::1;-1:-1:-1::0;;;3863:50:7::1;3923:15:::0;;;;-1:-1:-1;;;;;;3923:15:7;;;;;;;::::1;::::0;;;-1:-1:-1;;3691:254:7:o;2006:109:4:-;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;1678:4213:13:-;1760:14;;;-1:-1:-1;;2297:1:13;2294;2287:20;2340:1;2337;2333:9;2324:18;;2395:5;2391:2;2388:13;2380:5;2376:2;2372:14;2368:34;2359:43;;2259:157;2497:5;2506:1;2497:10;2493:368;;2835:11;2827:5;:19;;;;;:::i;:::-;;2820:26;;;;;;2493:368;2985:5;2971:11;:19;2963:53;;;;-1:-1:-1;;;2963:53:13;;;;;;;:::i;:::-;3272:17;3407:11;3404:1;3401;3394:25;4785:1;3955;3940:12;;:16;;3925:32;;4060:22;;;;4766:1;:15;;4765:21;;5018;;;5014:25;;5003:36;5087:21;;;5083:25;;5072:36;5157:21;;;5153:25;;5142:36;5227:21;;;5223:25;;5212:36;5297:21;;;5293:25;;5282:36;5368:21;;;5364:25;;;5353:36;;;3910:12;4305;;;4301:23;;;4297:31;;;3521:20;;;3510:32;;;4417:12;;;;3568:21;;4158:16;;;;4408:21;;;;5832:15;;;-1:-1:-1;;;;1678:4213:13:o;4119:223:11:-;4252:12;4283:52;4305:6;4313:4;4319:1;4322:12;4283:21;:52::i;1125:111:1:-;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;1197:32:1::1;965:10:12::0;1197:18:1::1;:32::i;1895:584:10:-:0;2231:10;;;2230:62;;-1:-1:-1;2247:39:10;;-1:-1:-1;;;2247:39:10;;-1:-1:-1;;;;;2247:15:10;;;;;:39;;2271:4;;2278:7;;2247:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;2230:62;2209:163;;;;-1:-1:-1;;;2209:163:10;;;;;;;:::i;:::-;2382:90;2402:5;2432:22;;;2456:7;2465:5;2409:62;;;;;;;;;:::i;4088:568:7:-;4276:67;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4276:67:7;-1:-1:-1;;;4276:67:7;;;4236:117;;4166:4;;;;;;;;-1:-1:-1;;;;;4236:26:7;;;:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4189:164;;;;4367:7;:39;;;;;4404:2;4378:15;:22;:28;;4367:39;4363:260;;;4422:24;4460:15;4449:38;;;;;;;;;;;;:::i;:::-;4422:65;-1:-1:-1;4525:15:7;4505:35;;4501:112;;4568:4;;4580:16;;-1:-1:-1;4088:568:7;-1:-1:-1;;;;4088:568:7:o;4501:112::-;4408:215;4363:260;-1:-1:-1;4640:5:7;;;;-1:-1:-1;4088:568:7;-1:-1:-1;;;4088:568:7:o;5176:446:11:-;5341:12;5398:5;5373:21;:30;;5365:81;;;;-1:-1:-1;;;5365:81:11;;;;;;;:::i;:::-;5457:12;5471:23;5498:6;-1:-1:-1;;;;;5498:11:11;5517:5;5524:4;5498:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5456:73;;;;5546:69;5573:6;5581:7;5590:10;5602:12;7862;7890:7;7886:418;;;7917:10;:17;7938:1;7917:22;7913:286;;-1:-1:-1;;;;;1713:19:11;;;8124:60;;;;-1:-1:-1;;;8124:60:11;;;;;;;:::i;:::-;-1:-1:-1;8219:10:11;8212:17;;7886:418;8260:33;8268:10;8280:12;8991:17;;:21;8987:379;;9219:10;9213:17;9275:15;9262:10;9258:2;9254:19;9247:44;8987:379;9342:12;9335:20;;-1:-1:-1;;;9335:20:11;;;;;;;;:::i;90:118:69:-;195:5;177:24;172:3;165:37;90:118;;:::o;214:222::-;345:2;330:18;;358:71;334:9;402:6;358:71;:::i;722:248::-;804:1;814:113;828:6;825:1;822:13;814:113;;;904:11;;;898:18;885:11;;;878:39;850:2;843:10;814:113;;;-1:-1:-1;;961:1:69;943:16;;936:27;722:248::o;1084:377::-;1172:3;1200:39;1233:5;522:12;;442:99;1200:39;653:19;;;705:4;696:14;;1248:78;;1335:65;1393:6;1388:3;1381:4;1374:5;1370:16;1335:65;:::i;:::-;1068:2;1048:14;-1:-1:-1;;1044:28:69;1416:39;;;;;;-1:-1:-1;;1084:377:69:o;1467:313::-;1618:2;1631:47;;;1603:18;;1695:78;1603:18;1759:6;1695:78;:::i;2113:122::-;2204:5;2186:24;2179:5;2176:35;2166:63;;2225:1;2222;2215:12;2241:139;2312:20;;2341:33;2312:20;2341:33;:::i;2386:329::-;2445:6;2494:2;2482:9;2473:7;2469:23;2465:32;2462:119;;;2500:79;1707:21011:52;;;2500:79:69;2620:1;2645:53;2690:7;2670:9;2645:53;:::i;2853:96::-;2890:7;-1:-1:-1;;;;;2787:54:69;;2919:24;2721:126;2955:122;3028:24;3046:5;3028:24;:::i;3083:139::-;3154:20;;3183:33;3154:20;3183:33;:::i;3228:474::-;3296:6;3304;3353:2;3341:9;3332:7;3328:23;3324:32;3321:119;;;3359:79;1707:21011:52;;;3359:79:69;3479:1;3504:53;3549:7;3529:9;3504:53;:::i;:::-;3494:63;;3450:117;3606:2;3632:53;3677:7;3668:6;3657:9;3653:22;3632:53;:::i;:::-;3622:63;;3577:118;3228:474;;;;;:::o;3804:109::-;3778:13;;3771:21;3885;3708:90;3919:210;4044:2;4029:18;;4057:65;4033:9;4095:6;4057:65;:::i;4135:329::-;4194:6;4243:2;4231:9;4222:7;4218:23;4214:32;4211:119;;;4249:79;1707:21011:52;;;4249:79:69;4369:1;4394:53;4439:7;4419:9;4394:53;:::i;4470:118::-;4557:24;4575:5;4557:24;:::i;4594:222::-;4725:2;4710:18;;4738:71;4714:9;4782:6;4738:71;:::i;4822:122::-;4885:7;4914:24;4932:5;4914:24;:::i;4950:174::-;5049:50;5093:5;5049:50;:::i;5130:191::-;5227:20;;5256:59;5227:20;5256:59;:::i;5327:381::-;5412:6;5461:2;5449:9;5440:7;5436:23;5432:32;5429:119;;;5467:79;1707:21011:52;;;5467:79:69;5587:1;5612:79;5683:7;5663:9;5612:79;:::i;5714:619::-;5791:6;5799;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;1707:21011:52;;;5862:79:69;5982:1;6007:53;6052:7;6032:9;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;6237:2;6263:53;6308:7;6299:6;6288:9;6284:22;6263:53;:::i;:::-;6253:63;;6208:118;5714:619;;;;;:::o;6431:112::-;6414:4;6403:16;;6514:22;6339:86;6549:214;6676:2;6661:18;;6689:67;6665:9;6729:6;6689:67;:::i;6769:765::-;6855:6;6863;6871;6879;6928:3;6916:9;6907:7;6903:23;6899:33;6896:120;;;6935:79;1707:21011:52;;;6935:79:69;7055:1;7080:53;7125:7;7105:9;7080:53;:::i;:::-;7070:63;;7026:117;7182:2;7208:53;7253:7;7244:6;7233:9;7229:22;7208:53;:::i;:::-;7198:63;;7153:118;7310:2;7336:53;7381:7;7372:6;7361:9;7357:22;7336:53;:::i;:::-;7326:63;;7281:118;7438:2;7464:53;7509:7;7500:6;7489:9;7485:22;7464:53;:::i;:::-;7454:63;;7409:118;6769:765;;;;;;;:::o;7606:142::-;7656:9;7689:53;-1:-1:-1;;;;;2787:54:69;;7707:34;7:77;7716:24;73:5;7:77;7707:34;-1:-1:-1;;;;;2787:54:69;;2721:126;7754;7804:9;7837:37;7868:5;7837:37;:::i;7886:148::-;7958:9;7991:37;8022:5;7991:37;:::i;8040:175::-;8149:59;8202:5;8149:59;:::i;8221:266::-;8374:2;8359:18;;8387:93;8363:9;8453:6;8387:93;:::i;8493:474::-;8561:6;8569;8618:2;8606:9;8597:7;8593:23;8589:32;8586:119;;;8624:79;1707:21011:52;;;8624:79:69;8744:1;8769:53;8814:7;8794:9;8769:53;:::i;:::-;8759:63;;8715:117;8871:2;8897:53;8942:7;8933:6;8922:9;8918:22;8897:53;:::i;9550:619::-;9627:6;9635;9643;9692:2;9680:9;9671:7;9667:23;9663:32;9660:119;;;9698:79;1707:21011:52;;;9698:79:69;9818:1;9843:53;9888:7;9868:9;9843:53;:::i;:::-;9833:63;;9789:117;9945:2;9971:53;10016:7;10007:6;9996:9;9992:22;9971:53;:::i;:::-;9961:63;;9916:118;10073:2;10099:53;10144:7;10135:6;10124:9;10120:22;10099:53;:::i;10832:474::-;10900:6;10908;10957:2;10945:9;10936:7;10932:23;10928:32;10925:119;;;10963:79;1707:21011:52;;;10963:79:69;11083:1;11108:53;11153:7;11133:9;11108:53;:::i;11312:143::-;11394:13;;11416:33;11394:13;11416:33;:::i;11461:351::-;11531:6;11580:2;11568:9;11559:7;11555:23;11551:32;11548:119;;;11586:79;1707:21011:52;;;11586:79:69;11706:1;11731:64;11787:7;11767:9;11731:64;:::i;11818:180::-;-1:-1:-1;;;11863:1:69;11856:88;11963:4;11960:1;11953:15;11987:4;11984:1;11977:15;12004:410;12149:9;;;;12311;;12344:15;;;12338:22;;12291:83;12268:139;;12387:18;;:::i;:::-;12052:362;12004:410;;;;:::o;12420:180::-;-1:-1:-1;;;12465:1:69;12458:88;12565:4;12562:1;12555:15;12589:4;12586:1;12579:15;12606:185;12646:1;12736;12726:35;;12741:18;;:::i;:::-;-1:-1:-1;12776:9:69;;12606:185::o;12797:180::-;-1:-1:-1;;;12842:1:69;12835:88;12942:4;12939:1;12932:15;12966:4;12963:1;12956:15;12983:320;13064:1;13054:12;;13111:1;13101:12;;;13122:81;;13188:4;13180:6;13176:17;13166:27;;13122:81;13250:2;13242:6;13239:14;13219:18;13216:38;13213:84;;13269:18;;:::i;:::-;13034:269;12983:320;;;:::o;13309:188::-;6414:4;6403:16;;;;;;;;13432:9;;;;13454:13;;13451:39;;;13470:18;;:::i;13626:180::-;-1:-1:-1;;;13671:1:69;13664:88;13771:4;13768:1;13761:15;13795:4;13792:1;13785:15;13812:281;-1:-1:-1;;1068:2:69;1048:14;;1044:28;13887:6;13883:40;14025:6;14013:10;14010:22;13989:18;13977:10;13974:34;13971:62;13968:88;;;14036:18;;:::i;:::-;14072:2;14065:22;-1:-1:-1;;13812:281:69:o;14099:129::-;14133:6;14160:20;1852:2;1846:9;;1786:75;14160:20;14150:30;;14189:33;14217:4;14209:6;14189:33;:::i;:::-;14099:129;;;:::o;14234:339::-;14339:4;14429:18;14421:6;14418:30;14415:56;;;14451:18;;:::i;:::-;-1:-1:-1;14501:4:69;14489:17;;;14551:15;;14234:339::o;15016:199::-;15126:13;;15148:61;15126:13;15148:61;:::i;15258:816::-;15393:5;15418:109;15434:92;15519:6;15434:92;:::i;:::-;15418:109;:::i;:::-;15562:21;;;15409:118;-1:-1:-1;15610:4:69;15599:16;;;;15651:17;;15639:30;;15681:15;;;15678:122;;;15711:79;1707:21011:52;;;15711:79:69;15826:6;15809:259;15843:6;15838:3;15835:15;15809:259;;;15918:3;15947:76;16019:3;16007:10;15947:76;:::i;:::-;15935:89;;-1:-1:-1;16053:4:69;16044:14;;;;15860;15809:259;;;15813:21;15399:675;;15258:816;;;;;:::o;16117:441::-;16227:5;16276:3;16269:4;16261:6;16257:17;16253:27;16243:122;;16284:79;1707:21011:52;;;16284:79:69;16394:6;16388:13;16419:133;16548:3;16540:6;16533:4;16525:6;16521:17;16419:133;:::i;16564:610::-;16687:6;16736:2;16724:9;16715:7;16711:23;16707:32;16704:119;;;16742:79;1707:21011:52;;;16742:79:69;16862:24;;16913:18;16902:30;;16899:117;;;16935:79;1707:21011:52;;;16935:79:69;17040:117;17149:7;17140:6;17129:9;17125:22;17040:117;:::i;17180:180::-;-1:-1:-1;;;17225:1:69;17218:88;17325:4;17322:1;17315:15;17349:4;17346:1;17339:15;17567:403;17663:6;17712:2;17700:9;17691:7;17687:23;17683:32;17680:119;;;17718:79;1707:21011:52;;;17718:79:69;17838:1;17863:90;17945:7;17925:9;17863:90;:::i;18615:211::-;18700:10;18721:62;18779:3;18771:6;18721:62;:::i;:::-;-1:-1:-1;;18815:4:69;18806:14;;18615:211::o;19005:812::-;19140:3;19169:70;19233:5;522:12;;442:99;19169:70;653:19;;;705:4;696:14;;;;18429;;;19491:1;19476:316;19501:6;19498:1;19495:13;19476:316;;;19577:6;19571:13;19604:79;19679:3;19664:13;19604:79;:::i;:::-;19597:86;-1:-1:-1;18950:4:69;18941:14;;19696:86;-1:-1:-1;;19523:1:69;19516:9;19476:316;;;-1:-1:-1;19808:3:69;;19005:812;-1:-1:-1;;;;;19005:812:69:o;19823:515::-;20048:2;20033:18;;20061:71;20037:9;20105:6;20061:71;:::i;:::-;20179:9;20173:4;20169:20;20164:2;20153:9;20149:18;20142:48;20207:124;20326:4;20317:6;20207:124;:::i;20344:180::-;-1:-1:-1;;;20389:1:69;20382:88;20489:4;20486:1;20479:15;20513:4;20510:1;20503:15;20530:121;20619:1;20612:5;20609:12;20599:46;;20625:18;;:::i;20657:143::-;20739:5;20745:49;20739:5;20745:49;:::i;20806:143::-;20870:9;20903:40;20937:5;20903:40;:::i;20955:159::-;21056:51;21101:5;21056:51;:::i;21120:470::-;21321:2;21306:18;;21334:71;21310:9;21378:6;21334:71;:::i;:::-;21415:72;21483:2;21472:9;21468:18;21459:6;21415:72;:::i;:::-;21497:86;21579:2;21568:9;21564:18;21555:6;21497:86;:::i;21596:191::-;21725:9;;;21747:10;;;21744:36;;;21760:18;;:::i;21793:116::-;21877:1;21870:5;21867:12;21857:46;;21883:18;;:::i;21915:133::-;21992:5;21998:44;21992:5;21998:44;:::i;22054:133::-;22113:9;22146:35;22175:5;22146:35;:::i;22193:149::-;22289:46;22329:5;22289:46;:::i;22348:350::-;22516:2;22501:18;;22529:71;22505:9;22573:6;22529:71;:::i;:::-;22610:81;22687:2;22676:9;22672:18;22663:6;22610:81;:::i;22704:116::-;3778:13;;3771:21;22774;3708:90;22826:137;22905:13;;22927:30;22905:13;22927:30;:::i;22969:345::-;23036:6;23085:2;23073:9;23064:7;23060:23;23056:32;23053:119;;;23091:79;1707:21011:52;;;23091:79:69;23211:1;23236:61;23289:7;23269:9;23236:61;:::i;23320:194::-;23451:9;;;23473:11;;;23470:37;;;23487:18;;:::i;23759:366::-;23986:2;653:19;;23901:3;705:4;696:14;;23660:34;23637:58;;-1:-1:-1;;;23724:2:69;23712:15;;23705:41;23915:74;-1:-1:-1;23998:93:69;-1:-1:-1;24116:2:69;24107:12;;23759:366::o;24131:419::-;24335:2;24348:47;;;24320:18;;24412:131;24320:18;24412:131;:::i;24719:365::-;24946:1;653:19;;24861:3;705:4;696:14;;-1:-1:-1;;;24673:33:69;;24875:73;-1:-1:-1;24957:93:69;-1:-1:-1;25075:2:69;25066:12;;24719:365::o;25090:419::-;25294:2;25307:47;;;25279:18;;25371:131;25279:18;25371:131;:::i;25749:366::-;25976:2;653:19;;25891:3;705:4;696:14;;25655:34;25632:58;;-1:-1:-1;;;25719:2:69;25707:15;;25700:36;25905:74;-1:-1:-1;25988:93:69;25515:228;26121:419;26325:2;26338:47;;;26310:18;;26402:131;26310:18;26402:131;:::i;26706:365::-;26933:1;653:19;;26848:3;705:4;696:14;;-1:-1:-1;;;26663:30:69;;26862:73;-1:-1:-1;26944:93:69;26546:154;27077:419;27281:2;27294:47;;;27266:18;;27358:131;27266:18;27358:131;:::i;27732:366::-;27959:2;653:19;;27874:3;705:4;696:14;;27642:34;27619:58;;-1:-1:-1;;;27706:2:69;27694:15;;27687:32;27888:74;-1:-1:-1;27971:93:69;27502:224;28104:419;28308:2;28321:47;;;28293:18;;28385:131;28293:18;28385:131;:::i;28693:365::-;28920:1;653:19;;28835:3;705:4;696:14;;-1:-1:-1;;;28646:34:69;;28849:73;-1:-1:-1;28931:93:69;28529:158;29064:419;29268:2;29281:47;;;29253:18;;29345:131;29253:18;29345:131;:::i;29651:365::-;29878:1;653:19;;29793:3;705:4;696:14;;-1:-1:-1;;;29606:32:69;;29807:73;-1:-1:-1;29889:93:69;29489:156;30022:419;30226:2;30239:47;;;30211:18;;30303:131;30211:18;30303:131;:::i;31386:143::-;31468:13;;31490:33;31468:13;31490:33;:::i;31535:351::-;31605:6;31654:2;31642:9;31633:7;31629:23;31625:32;31622:119;;;31660:79;1707:21011:52;;;31660:79:69;31780:1;31805:64;31861:7;31841:9;31805:64;:::i;31983:154::-;32039:9;6414:4;6403:16;;32072:59;6339:86;32143:143;32236:43;32273:5;32236:43;:::i;32292:234::-;32429:2;32414:18;;32442:77;32418:9;32492:6;32442:77;:::i;32640:848::-;32732:6;32756:5;32770:712;32791:1;32781:8;32778:15;32770:712;;;32886:4;32881:3;32877:14;32871:4;32868:24;32865:50;;;32895:18;;:::i;:::-;32945:1;32935:8;32931:16;32928:451;;;33349:16;;;;32928:451;33400:15;;33440:32;33463:8;32618:1;32614:13;;32532:102;33440:32;33428:44;;32770:712;;;32640:848;;;;;;;:::o;33494:1073::-;33548:5;33739:8;33729:40;;-1:-1:-1;33760:1:69;33762:5;;33729:40;33788:4;33778:36;;-1:-1:-1;33805:1:69;33807:5;;33778:36;33874:4;33922:1;33917:27;;;;33958:1;33953:191;;;;33867:277;;33917:27;33935:1;33926:10;;33937:5;;;33953:191;33998:3;33988:8;33985:17;33982:43;;;34005:18;;:::i;:::-;34054:8;34051:1;34047:16;34038:25;;34089:3;34082:5;34079:14;34076:40;;;34096:18;;:::i;:::-;34129:5;;;33867:277;;34253:2;34243:8;34240:16;34234:3;34228:4;34225:13;34221:36;34203:2;34193:8;34190:16;34185:2;34179:4;34176:12;34172:35;34156:111;34153:246;;;-1:-1:-1;34299:19:69;;;34334:14;;;34331:40;;;34351:18;;:::i;:::-;34384:5;;34153:246;34424:42;34462:3;34452:8;34446:4;34443:1;34424:42;:::i;:::-;34409:57;;;;34498:4;34493:3;34489:14;34482:5;34479:25;34476:51;;;34507:18;;:::i;:::-;34545:16;;33494:1073;-1:-1:-1;;33494:1073:69:o;34573:281::-;34631:5;6414:4;6403:16;;34687:37;;34743:104;-1:-1:-1;;34770:8:69;34764:4;34743:104;:::i;35089:366::-;35316:2;653:19;;35231:3;705:4;696:14;;35000:34;34977:58;;-1:-1:-1;;;35064:2:69;35052:15;;35045:31;35245:74;-1:-1:-1;35328:93:69;34860:223;35461:419;35665:2;35678:47;;;35650:18;;35742:131;35650:18;35742:131;:::i;36113:366::-;36340:2;653:19;;36255:3;705:4;696:14;;36026:34;36003:58;;-1:-1:-1;;;36090:2:69;36078:15;;36071:29;36269:74;-1:-1:-1;36352:93:69;35886:221;36485:419;36689:2;36702:47;;;36674:18;;36766:131;36674:18;36766:131;:::i;37098:366::-;37325:2;653:19;;;37050:34;696:14;;37027:58;;;37240:3;37337:93;36910:182;37470:419;37674:2;37687:47;;;37659:18;;37751:131;37659:18;37751:131;:::i;38125:366::-;38352:2;653:19;;38267:3;705:4;696:14;;38035:34;38012:58;;-1:-1:-1;;;38099:2:69;38087:15;;38080:32;38281:74;-1:-1:-1;38364:93:69;37895:224;38497:419;38701:2;38714:47;;;38686:18;;38778:131;38686:18;38778:131;:::i;38922:332::-;39081:2;39066:18;;39094:71;39070:9;39138:6;39094:71;:::i;:::-;39175:72;39243:2;39232:9;39228:18;39219:6;39175:72;:::i;39260:332::-;39419:2;39404:18;;39432:71;39408:9;39476:6;39432:71;:::i;:::-;39513:72;39581:2;39570:9;39566:18;39557:6;39513:72;:::i;39783:366::-;40010:2;653:19;;39925:3;705:4;696:14;;39738:31;39715:55;;39939:74;-1:-1:-1;40022:93:69;39598:179;40155:419;40359:2;40372:47;;;40344:18;;40436:131;40344:18;40436:131;:::i;40810:366::-;41037:2;653:19;;40952:3;705:4;696:14;;40720:34;40697:58;;-1:-1:-1;;;40784:2:69;40772:15;;40765:32;40966:74;-1:-1:-1;41049:93:69;40580:224;41182:419;41386:2;41399:47;;;41371:18;;41463:131;41371:18;41463:131;:::i;41835:366::-;42062:2;653:19;;41977:3;705:4;696:14;;41747:34;41724:58;;-1:-1:-1;;;41811:2:69;41799:15;;41792:30;41991:74;-1:-1:-1;42074:93:69;41607:222;42207:419;42411:2;42424:47;;;42396:18;;42488:131;42396:18;42488:131;:::i;42863:366::-;43090:2;653:19;;43005:3;705:4;696:14;;42772:34;42749:58;;-1:-1:-1;;;42836:2:69;42824:15;;42817:33;43019:74;-1:-1:-1;43102:93:69;42632:225;43235:419;43439:2;43452:47;;;43424:18;;43516:131;43424:18;43516:131;:::i;43660:118::-;6414:4;6403:16;;43731:22;6339:86;43784:139;43864:13;;43886:31;43864:13;43886:31;:::i;43929:347::-;43997:6;44046:2;44034:9;44025:7;44021:23;44017:32;44014:119;;;44052:79;1707:21011:52;;;44052:79:69;44172:1;44197:62;44251:7;44231:9;44197:62;:::i;44282:191::-;6414:4;6403:16;;;;;;;;44407:9;;;;44429:14;;44426:40;;;44446:18;;:::i;44479:332::-;44638:2;44623:18;;44651:71;44627:9;44695:6;44651:71;:::i;45053:366::-;45280:2;653:19;;45195:3;705:4;696:14;;44957:34;44934:58;;-1:-1:-1;;;45021:2:69;45009:15;;45002:38;45209:74;-1:-1:-1;45292:93:69;44817:230;45425:419;45629:2;45642:47;;;45614:18;;45706:131;45614:18;45706:131;:::i;46077:366::-;46304:2;653:19;;46219:3;705:4;696:14;;45990:34;45967:58;;-1:-1:-1;;;46054:2:69;46042:15;;46035:29;46233:74;-1:-1:-1;46316:93:69;45850:221;46449:419;46653:2;46666:47;;;46638:18;;46730:131;46638:18;46730:131;:::i;47061:366::-;47288:2;653:19;;47203:3;705:4;696:14;;47014:33;46991:57;;47217:74;-1:-1:-1;47300:93:69;46874:181;47433:419;47637:2;47650:47;;;47622:18;;47714:131;47622:18;47714:131;:::i;48041:366::-;48268:2;653:19;;48183:3;705:4;696:14;;47998:29;47975:53;;48197:74;-1:-1:-1;48280:93:69;47858:177;48413:419;48617:2;48630:47;;;48602:18;;48694:131;48602:18;48694:131;:::i;48838:423::-;49017:2;49002:18;;49030:71;49006:9;49074:6;49030:71;:::i;:::-;49148:9;49142:4;49138:20;49133:2;49122:9;49118:18;49111:48;49176:78;49249:4;49240:6;49176:78;:::i;49267:533::-;49474:2;49459:18;;49487:71;49463:9;49531:6;49487:71;:::i;:::-;49568:72;49636:2;49625:9;49621:18;49612:6;49568:72;:::i;:::-;49687:9;49681:4;49677:20;49672:2;49661:9;49657:18;49650:48;49715:78;49788:4;49779:6;49715:78;:::i;49994:366::-;50221:2;653:19;;;49946:34;696:14;;49923:58;;;50136:3;50233:93;49806:182;50366:419;50570:2;50583:47;;;50555:18;;50647:131;50555:18;50647:131;:::i;50914:308::-;50976:4;51066:18;51058:6;51055:30;51052:56;;;51088:18;;:::i;:::-;-1:-1:-1;;1068:2:69;1048:14;;1044:28;51210:4;51200:15;;50914:308;-1:-1:-1;;50914:308:69:o;51228:434::-;51317:5;51342:66;51358:49;51400:6;51358:49;:::i;51342:66::-;51333:75;;51431:6;51424:5;51417:21;51469:4;51462:5;51458:16;51507:3;51498:6;51493:3;51489:16;51486:25;51483:112;;;51514:79;1707:21011:52;;;51514:79:69;51604:52;51649:6;51644:3;51639;51604:52;:::i;:::-;51323:339;51228:434;;;;;:::o;51682:355::-;51749:5;51798:3;51791:4;51783:6;51779:17;51775:27;51765:122;;51806:79;1707:21011:52;;;51806:79:69;51916:6;51910:13;51941:90;52027:3;52019:6;52012:4;52004:6;52000:17;51941:90;:::i;52043:524::-;52123:6;52172:2;52160:9;52151:7;52147:23;52143:32;52140:119;;;52178:79;1707:21011:52;;;52178:79:69;52298:24;;52349:18;52338:30;;52335:117;;;52371:79;1707:21011:52;;;52371:79:69;52476:74;52542:7;52533:6;52522:9;52518:22;52476:74;:::i;53313:390::-;53419:3;53447:39;53480:5;522:12;;442:99;53447:39;53600:65;53658:6;53653:3;53646:4;53639:5;53635:16;53600:65;:::i;:::-;53681:16;;;;;53313:390;-1:-1:-1;;53313:390:69:o;53709:541::-;-1:-1:-1;;;52844:48:69;;53942:3;53298:2;53289:12;;53964:148;53957:155;;54129:95;54220:3;54211:6;54129:95;:::i;54823:541::-;-1:-1:-1;;;54373:31:69;;55056:3;54809:1;54800:11;;55078:148;54417:400;55605:366;55832:2;653:19;;55747:3;705:4;696:14;;55510:34;55487:58;;-1:-1:-1;;;55574:2:69;55562:15;;55555:37;55761:74;-1:-1:-1;55844:93:69;55370:229;55977:419;56181:2;56194:47;;;56166:18;;56258:131;56166:18;56258:131;:::i;56402:442::-;56589:2;56574:18;;56602:71;56578:9;56646:6;56602:71;:::i;:::-;56683:72;56751:2;56740:9;56736:18;56727:6;56683:72;:::i;:::-;56765;56833:2;56822:9;56818:18;56809:6;56765:72;:::i;57037:366::-;57264:2;653:19;;57179:3;705:4;696:14;;56990:33;56967:57;;57193:74;-1:-1:-1;57276:93:69;56850:181;57409:419;57613:2;57626:47;;;57598:18;;57690:131;57598:18;57690:131;:::i;58060:366::-;58287:2;653:19;;58202:3;705:4;696:14;;57974:34;57951:58;;-1:-1:-1;;;58038:2:69;58026:15;;58019:28;58216:74;-1:-1:-1;58299:93:69;57834:220;58432:419;58636:2;58649:47;;;58621:18;;58713:131;58621:18;58713:131;:::i;59084:366::-;59311:2;653:19;;59226:3;705:4;696:14;;58997:34;58974:58;;-1:-1:-1;;;59061:2:69;59049:15;;59042:29;59240:74;-1:-1:-1;59323:93:69;58857:221;59456:419;59660:2;59673:47;;;59645:18;;59737:131;59645:18;59737:131;:::i;60639:142::-;60689:9;60722:53;60740:34;60767:5;60740:34;7:77;60868:269;60978:39;61009:7;60978:39;:::i;:::-;61067:11;;-1:-1:-1;;60359:1:69;60343:18;;;;60211:16;;;60568:9;60557:21;60211:16;;60597:30;;;;61026:105;;-1:-1:-1;60868:269:69:o;61222:189::-;61188:3;61340:65;61398:6;61390;61384:4;61340:65;:::i;61417:186::-;61494:3;61487:5;61484:14;61477:120;;;61548:39;61585:1;61578:5;61548:39;:::i;:::-;61521:1;61510:13;61477:120;;61609:543;61710:2;61705:3;61702:11;61699:446;;;59930:4;59966:14;;;60010:4;59997:18;;60112:2;60107;60096:14;;60092:23;61818:8;61814:44;62011:2;61999:10;61996:18;61993:49;;;-1:-1:-1;62032:8:69;61993:49;62055:80;60112:2;60107;60096:14;;60092:23;62101:8;62097:37;62084:11;62055:80;:::i;62755:1395::-;522:12;;62974:18;62966:6;62963:30;62960:56;;;62996:18;;:::i;:::-;63040:38;63072:4;63066:11;63040:38;:::i;:::-;63125:67;63185:6;63177;63171:4;63125:67;:::i;:::-;63243:4;63275:2;63264:14;;63292:1;63287:618;;;;63949:1;63966:6;63963:77;;;-1:-1:-1;64006:19:69;;;64000:26;63963:77;-1:-1:-1;;62391:1:69;62387:13;;62252:16;62354:56;62429:15;;62736:1;62732:11;;62723:21;64060:4;64053:81;63922:222;63257:887;;63287:618;59930:4;59966:14;;;60010:4;59997:18;;-1:-1:-1;;63323:22:69;;;63446:208;63460:7;63457:1;63454:14;63446:208;;;63530:19;;;63524:26;63509:42;;63637:2;63622:18;;;;63590:1;63578:14;;;;63476:12;63446:208;;;63682:6;63673:7;63670:19;63667:179;;;63731:19;;;63725:26;-1:-1:-1;;63825:4:69;63813:17;;62391:1;62387:13;62252:16;62354:56;62429:15;63768:64;;63667:179;63892:1;63888;63880:6;63876:14;63872:22;63866:4;63859:36;63294:611;;;63257:887;;62847:1303;;;62755:1395;;:::o;64333:366::-;64560:2;653:19;;64475:3;705:4;696:14;;-1:-1:-1;;;64273:47:69;;64489:74;-1:-1:-1;64572:93:69;64156:171;64705:419;64909:2;64922:47;;;64894:18;;64986:131;64894:18;64986:131;:::i;65377:366::-;65604:2;653:19;;65519:3;705:4;696:14;;65270:34;65247:58;;-1:-1:-1;;;65334:2:69;65322:15;;65315:49;65533:74;-1:-1:-1;65616:93:69;65130:241;65749:419;65953:2;65966:47;;;65938:18;;66030:131;65938:18;66030:131;:::i;66823:271::-;66953:3;66975:93;67064:3;67055:6;66975:93;:::i;67331:366::-;67558:2;653:19;;67473:3;705:4;696:14;;67240:34;67217:58;;-1:-1:-1;;;67304:2:69;67292:15;;67285:33;67487:74;-1:-1:-1;67570:93:69;67100:225;67703:419;67907:2;67920:47;;;67892:18;;67984:131;67892:18;67984:131;:::i;68313:366::-;68540:2;653:19;;68455:3;705:4;696:14;;68268:31;68245:55;;68469:74;-1:-1:-1;68552:93:69;68128:179;68685:419;68889:2;68902:47;;;68874:18;;68966:131;68874:18;68966:131;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"3753800","executionCost":"33892","totalCost":"3787692"},"external":{"acceptOwnership()":"infinite","accessControlManager()":"infinite","allowance(address,address)":"infinite","approve(address,uint256)":"infinite","asset()":"infinite","balanceOf(address)":"infinite","claimRewards()":"infinite","comptroller()":"infinite","convertToAssets(uint256)":"infinite","convertToShares(uint256)":"infinite","decimals()":"infinite","decreaseAllowance(address,uint256)":"infinite","deposit(uint256,address)":"infinite","increaseAllowance(address,uint256)":"infinite","initialize(address)":"infinite","initialize2(address,address,uint256,address)":"infinite","maxDeposit(address)":"infinite","maxLoopsLimit()":"2406","maxMint(address)":"infinite","maxRedeem(address)":"infinite","maxWithdraw(address)":"infinite","mint(uint256,address)":"infinite","name()":"infinite","owner()":"infinite","pendingOwner()":"infinite","previewDeposit(uint256)":"infinite","previewMint(uint256)":"infinite","previewRedeem(uint256)":"infinite","previewWithdraw(uint256)":"infinite","redeem(uint256,address,address)":"infinite","renounceOwnership()":"infinite","rewardRecipient()":"infinite","setAccessControlManager(address)":"infinite","setMaxLoopsLimit(uint256)":"infinite","setRewardRecipient(address)":"infinite","sweepToken(address)":"infinite","symbol()":"infinite","totalAssets()":"infinite","totalSupply()":"2448","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite","transferOwnership(address)":"infinite","vToken()":"infinite","withdraw(uint256,address,address)":"infinite"},"internal":{"_beforeRedeem(uint256)":"infinite","_beforeWithdraw(uint256)":"infinite","_decimalsOffset()":"infinite","_deposit(address,address,uint256,uint256)":"infinite","_generateVaultName(contract ERC20Upgradeable)":"infinite","_generateVaultSymbol(contract ERC20Upgradeable)":"infinite","_mintVTokens(uint256)":"infinite","_setRewardRecipient(address)":"infinite"}},"methodIdentifiers":{"acceptOwnership()":"79ba5097","accessControlManager()":"b4a0bdf3","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","asset()":"38d52e0f","balanceOf(address)":"70a08231","claimRewards()":"372500ab","comptroller()":"5fe3b567","convertToAssets(uint256)":"07a2d13a","convertToShares(uint256)":"c6e6f592","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","deposit(uint256,address)":"6e553f65","increaseAllowance(address,uint256)":"39509351","initialize(address)":"c4d66de8","initialize2(address,address,uint256,address)":"41e11a5a","maxDeposit(address)":"402d267d","maxLoopsLimit()":"be26317e","maxMint(address)":"c63d75b6","maxRedeem(address)":"d905777e","maxWithdraw(address)":"ce96cb77","mint(uint256,address)":"94bf804d","name()":"06fdde03","owner()":"8da5cb5b","pendingOwner()":"e30c3978","previewDeposit(uint256)":"ef8b30f7","previewMint(uint256)":"b3d7f6b9","previewRedeem(uint256)":"4cdad506","previewWithdraw(uint256)":"0a28a477","redeem(uint256,address,address)":"ba087652","renounceOwnership()":"715018a6","rewardRecipient()":"17f33340","setAccessControlManager(address)":"0e32cb86","setMaxLoopsLimit(uint256)":"80d45a2d","setRewardRecipient(address)":"e521136f","sweepToken(address)":"1be19560","symbol()":"95d89b41","totalAssets()":"01e1d114","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b","vToken()":"9bb1a99c","withdraw(uint256,address,address)":"b460af94"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ERC4626__DepositMoreThanMax\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC4626__MintMoreThanMax\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC4626__RedeemMoreThanMax\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC4626__WithdrawMoreThanMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"operation\",\"type\":\"string\"}],\"name\":\"ERC4626__ZeroAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loopsLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredLoops\",\"type\":\"uint256\"}],\"name\":\"MaxLoopsLimitExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"calledContract\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"methodSignature\",\"type\":\"string\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"errorCode\",\"type\":\"uint256\"}],\"name\":\"VenusERC4626__VenusError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"}],\"name\":\"ClaimRewards\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldMaxLoopsLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newmaxLoopsLimit\",\"type\":\"uint256\"}],\"name\":\"MaxLoopsLimitUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAccessControlManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAccessControlManager\",\"type\":\"address\"}],\"name\":\"NewAccessControlManager\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRecipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRecipient\",\"type\":\"address\"}],\"name\":\"RewardRecipientUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SweepToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"accessControlManager\",\"outputs\":[{\"internalType\":\"contract IAccessControlManagerV8\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"comptroller\",\"outputs\":[{\"internalType\":\"contract IComptroller\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"convertToAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"convertToShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"accessControlManager_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"loopsLimit_\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"vaultOwner_\",\"type\":\"address\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxLoopsLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"maxMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"accessControlManager_\",\"type\":\"address\"}],\"name\":\"setAccessControlManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loopsLimit\",\"type\":\"uint256\"}],\"name\":\"setMaxLoopsLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRecipient\",\"type\":\"address\"}],\"name\":\"setRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Upgradeable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vToken\",\"outputs\":[{\"internalType\":\"contract VToken\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC4626__DepositMoreThanMax()\":[{\"details\":\"This error is triggered if the deposit amount is greater than `maxDeposit(receiver)`.\"}],\"ERC4626__MintMoreThanMax()\":[{\"details\":\"This error is triggered if the mint amount is greater than `maxMint(receiver)`.\"}],\"ERC4626__RedeemMoreThanMax()\":[{\"details\":\"This error is triggered if the redemption amount is greater than `maxRedeem(owner)`.\"}],\"ERC4626__WithdrawMoreThanMax()\":[{\"details\":\"This error is triggered if the withdrawal amount is greater than `maxWithdraw(owner)`.\"}],\"ERC4626__ZeroAmount(string)\":[{\"details\":\"This error prevents unnecessary transactions with zero amounts in deposit, withdraw, mint, or redeem operations.\",\"params\":{\"operation\":\"The name of the operation that failed (e.g., \\\"deposit\\\", \\\"withdraw\\\", \\\"mint\\\", \\\"redeem\\\").\"}}],\"VenusERC4626__VenusError(uint256)\":[{\"details\":\"This error is triggered if a Venus operation (such as minting or redeeming vTokens) fails.\",\"params\":{\"errorCode\":\"The error code returned by the Venus protocol.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"ClaimRewards(uint256,address)\":{\"params\":{\"amount\":\"The amount of reward tokens claimed.\",\"rewardToken\":\"The address of the reward token claimed.\"}},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RewardRecipientUpdated(address,address)\":{\"params\":{\"newRecipient\":\"The new reward recipient address.\",\"oldRecipient\":\"The previous reward recipient address.\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"asset()\":{\"details\":\"See {IERC4626-asset}. \"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"claimRewards()\":{\"details\":\"Iterates through all reward distributors fetched from the comptroller, claims rewards, and transfers them if available.\"},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"convertToAssets(uint256)\":{\"details\":\"See {IERC4626-convertToAssets}. \"},\"convertToShares(uint256)\":{\"details\":\"See {IERC4626-convertToShares}. \"},\"decimals()\":{\"details\":\"Decimals are computed by adding the decimal offset on top of the underlying asset's decimals. This \\\"original\\\" value is cached during construction of the vault contract. If this read operation fails (e.g., the asset has not been created yet), a default of 18 is used to represent the underlying asset's decimals. See {IERC20Metadata-decimals}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"deposit(uint256,address)\":{\"details\":\"See {IERC4626-deposit}. \"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"initialize(address)\":{\"details\":\"`initialize2` should be invoked to complete the configuration of the vault\",\"params\":{\"vToken_\":\"The VToken associated with the vault, representing the yield-bearing asset.\"}},\"initialize2(address,address,uint256,address)\":{\"params\":{\"accessControlManager_\":\"Address of the ACM contract\",\"loopsLimit_\":\"The maximum number of loops allowed for reward distribution.\",\"rewardRecipient_\":\"The address that will receive rewards generated by the vault.\",\"vaultOwner_\":\"The owner that will be set for the created vault\"}},\"maxDeposit(address)\":{\"details\":\"If minting is paused or the supply cap is reached, returns 0.\",\"params\":{\"\":\"/*account*/ The address of the account.\"},\"returns\":{\"_0\":\"The maximum amount of assets that can be deposited.\"}},\"maxMint(address)\":{\"details\":\"This is derived from the maximum deposit amount converted to shares.\",\"params\":{\"\":\"/*account*/ The address of the account.\"},\"returns\":{\"_0\":\"The maximum number of shares that can be minted.\"}},\"maxRedeem(address)\":{\"details\":\"Redemption is limited by the available cash in the vault.\",\"params\":{\"receiver\":\"The address of the account redeeming.\"},\"returns\":{\"_0\":\"The maximum number of shares that can be redeemed.\"}},\"maxWithdraw(address)\":{\"details\":\"The withdrawable amount is limited by the available cash in the vault.\",\"params\":{\"receiver\":\"The address of the account withdrawing.\"},\"returns\":{\"_0\":\"The maximum amount of assets that can be withdrawn.\"}},\"mint(uint256,address)\":{\"details\":\"The minted shares are calculated considering the minted VTokensIt can mint slightly fewer shares than requested, because VToken.mint rounds down\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"previewDeposit(uint256)\":{\"details\":\"See {IERC4626-previewDeposit}. \"},\"previewMint(uint256)\":{\"details\":\"See {IERC4626-previewMint}. \"},\"previewRedeem(uint256)\":{\"details\":\"See {IERC4626-previewRedeem}. \"},\"previewWithdraw(uint256)\":{\"details\":\"See {IERC4626-previewWithdraw}. \"},\"redeem(uint256,address,address)\":{\"details\":\"See {IERC4626-redeem}. \"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setAccessControlManager(address)\":{\"custom:access\":\"Only Governance\",\"custom:event\":\"Emits NewAccessControlManager event\",\"details\":\"Admin function to set address of AccessControlManager\",\"params\":{\"accessControlManager_\":\"The new address of the AccessControlManager\"}},\"setMaxLoopsLimit(uint256)\":{\"custom:access\":\"Controlled by ACM\",\"custom:event\":\"Emits MaxLoopsLimitUpdated event on success\",\"params\":{\"loopsLimit\":\"Number of loops limit\"}},\"setRewardRecipient(address)\":{\"custom:access\":\"Controlled by ACM\",\"params\":{\"newRecipient\":\"The address of the new reward recipient\"}},\"sweepToken(address)\":{\"custom:access\":\"Only owner\",\"custom:event\":\"SweepToken emits on success\",\"params\":{\"token\":\"Address of the token\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalAssets()\":{\"returns\":{\"_0\":\"Amount of assets deposited\"}},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"},\"withdraw(uint256,address,address)\":{\"details\":\"Receiver can receive slightly more assets than requested, because VToken.redeemUnderlying rounds upThe shares to burn are calculated considering the actual transferred assets, not the requested ones\"}},\"title\":\"VenusERC4626\",\"version\":1},\"userdoc\":{\"errors\":{\"ERC4626__DepositMoreThanMax()\":[{\"notice\":\"Thrown when a deposit exceeds the maximum allowed limit.\"}],\"ERC4626__MintMoreThanMax()\":[{\"notice\":\"Thrown when a mint operation exceeds the maximum allowed limit.\"}],\"ERC4626__RedeemMoreThanMax()\":[{\"notice\":\"Thrown when a redemption exceeds the maximum redeemable shares.\"}],\"ERC4626__WithdrawMoreThanMax()\":[{\"notice\":\"Thrown when a withdrawal exceeds the maximum available assets.\"}],\"ERC4626__ZeroAmount(string)\":[{\"notice\":\"Thrown when attempting an operation with a zero amount.\"}],\"MaxLoopsLimitExceeded(uint256,uint256)\":[{\"notice\":\"Thrown an error on maxLoopsLimit exceeds for any loop\"}],\"Unauthorized(address,address,string)\":[{\"notice\":\"Thrown when the action is prohibited by AccessControlManager\"}],\"VenusERC4626__VenusError(uint256)\":[{\"notice\":\"Thrown when a Venus protocol call returns an error.\"}],\"ZeroAddressNotAllowed()\":[{\"notice\":\"Thrown if the supplied address is a zero address where it is not allowed\"}]},\"events\":{\"ClaimRewards(uint256,address)\":{\"notice\":\"Emitted when rewards are claimed.\"},\"MaxLoopsLimitUpdated(uint256,uint256)\":{\"notice\":\"Emitted when max loops limit is set\"},\"NewAccessControlManager(address,address)\":{\"notice\":\"Emitted when access control manager contract address is changed\"},\"RewardRecipientUpdated(address,address)\":{\"notice\":\"Emitted when the reward recipient address is updated.\"},\"SweepToken(address,address,uint256)\":{\"notice\":\"Event emitted when tokens are swept\"}},\"kind\":\"user\",\"methods\":{\"accessControlManager()\":{\"notice\":\"Returns the address of the access control manager contract\"},\"claimRewards()\":{\"notice\":\"Claims rewards from all reward distributors associated with the VToken and transfers them to the reward recipient.\"},\"comptroller()\":{\"notice\":\"The Venus Comptroller contract, responsible for market operations.\"},\"initialize(address)\":{\"notice\":\"Initializes the VenusERC4626 vault, only with the VToken address associated to the vault\"},\"initialize2(address,address,uint256,address)\":{\"notice\":\"Second function to invoke to complete the configuration of the vault, setting the rest of the attributes\"},\"maxDeposit(address)\":{\"notice\":\"Returns the maximum deposit allowed based on Venus supply caps.\"},\"maxMint(address)\":{\"notice\":\"Returns the maximum amount of shares that can be minted.\"},\"maxRedeem(address)\":{\"notice\":\"Returns the maximum amount of shares that can be redeemed.\"},\"maxWithdraw(address)\":{\"notice\":\"Returns the maximum amount that can be withdrawn.\"},\"rewardRecipient()\":{\"notice\":\"The recipient of rewards distributed by the Venus Protocol.\"},\"setAccessControlManager(address)\":{\"notice\":\"Sets the address of AccessControlManager\"},\"setMaxLoopsLimit(uint256)\":{\"notice\":\"Set the limit for the loops can iterate to avoid the DOS\"},\"setRewardRecipient(address)\":{\"notice\":\"Sets a new reward recipient address\"},\"sweepToken(address)\":{\"notice\":\"Sweeps the input token address tokens from the contract and sends them to the owner\"},\"totalAssets()\":{\"notice\":\"Returns the total amount of assets deposited\"},\"vToken()\":{\"notice\":\"The Venus vToken associated with this ERC4626 vault.\"}},\"notice\":\"ERC4626 wrapper for Venus vTokens, enabling standard ERC4626 vault interactions with Venus Protocol.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ERC4626/VenusERC4626.sol\":\"VenusERC4626\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./OwnableUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership} and {acceptOwnership}.\\n *\\n * This module is used through inheritance. It will make available all functions\\n * from parent (Ownable).\\n */\\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\\n    address private _pendingOwner;\\n\\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\\n\\n    function __Ownable2Step_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable2Step_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Returns the address of the pending owner.\\n     */\\n    function pendingOwner() public view virtual returns (address) {\\n        return _pendingOwner;\\n    }\\n\\n    /**\\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\\n        _pendingOwner = newOwner;\\n        emit OwnershipTransferStarted(owner(), newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual override {\\n        delete _pendingOwner;\\n        super._transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev The new owner accepts the ownership transfer.\\n     */\\n    function acceptOwnership() public virtual {\\n        address sender = _msgSender();\\n        require(pendingOwner() == sender, \\\"Ownable2Step: caller is not the new owner\\\");\\n        _transferOwnership(sender);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x9140dabc466abab21b48b72dbda26736b1183a310d0e677d3719d201df026510\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/interfaces/IERC4626Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC4626.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../token/ERC20/IERC20Upgradeable.sol\\\";\\nimport \\\"../token/ERC20/extensions/IERC20MetadataUpgradeable.sol\\\";\\n\\n/**\\n * @dev Interface of the ERC4626 \\\"Tokenized Vault Standard\\\", as defined in\\n * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\\n *\\n * _Available since v4.7._\\n */\\ninterface IERC4626Upgradeable is IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);\\n\\n    event Withdraw(\\n        address indexed sender,\\n        address indexed receiver,\\n        address indexed owner,\\n        uint256 assets,\\n        uint256 shares\\n    );\\n\\n    /**\\n     * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\\n     *\\n     * - MUST be an ERC-20 token contract.\\n     * - MUST NOT revert.\\n     */\\n    function asset() external view returns (address assetTokenAddress);\\n\\n    /**\\n     * @dev Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault.\\n     *\\n     * - SHOULD include any compounding that occurs from yield.\\n     * - MUST be inclusive of any fees that are charged against assets in the Vault.\\n     * - MUST NOT revert.\\n     */\\n    function totalAssets() external view returns (uint256 totalManagedAssets);\\n\\n    /**\\n     * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\\n     * scenario where all the conditions are met.\\n     *\\n     * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\\n     * - MUST NOT show any variations depending on the caller.\\n     * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the\\n     * \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and\\n     * from.\\n     */\\n    function convertToShares(uint256 assets) external view returns (uint256 shares);\\n\\n    /**\\n     * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\\n     * scenario where all the conditions are met.\\n     *\\n     * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\\n     * - MUST NOT show any variations depending on the caller.\\n     * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the\\n     * \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and\\n     * from.\\n     */\\n    function convertToAssets(uint256 shares) external view returns (uint256 assets);\\n\\n    /**\\n     * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\\n     * through a deposit call.\\n     *\\n     * - MUST return a limited value if receiver is subject to some deposit limit.\\n     * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\\n     * - MUST NOT revert.\\n     */\\n    function maxDeposit(address receiver) external view returns (uint256 maxAssets);\\n\\n    /**\\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\\n     * current on-chain conditions.\\n     *\\n     * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\\n     *   call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\\n     *   in the same transaction.\\n     * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\\n     *   deposit would be accepted, regardless if the user has enough tokens approved, etc.\\n     * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\\n     * share price or some other type of condition, meaning the depositor will lose assets by depositing.\\n     */\\n    function previewDeposit(uint256 assets) external view returns (uint256 shares);\\n\\n    /**\\n     * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\\n     *\\n     * - MUST emit the Deposit event.\\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\\n     *   deposit execution, and are accounted for during deposit.\\n     * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\\n     *   approving enough underlying tokens to the Vault contract, etc).\\n     *\\n     * NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\\n     */\\n    function deposit(uint256 assets, address receiver) external returns (uint256 shares);\\n\\n    /**\\n     * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\\n     * - MUST return a limited value if receiver is subject to some mint limit.\\n     * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\\n     * - MUST NOT revert.\\n     */\\n    function maxMint(address receiver) external view returns (uint256 maxShares);\\n\\n    /**\\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\\n     * current on-chain conditions.\\n     *\\n     * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\\n     *   in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\\n     *   same transaction.\\n     * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\\n     *   would be accepted, regardless if the user has enough tokens approved, etc.\\n     * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\\n     * share price or some other type of condition, meaning the depositor will lose assets by minting.\\n     */\\n    function previewMint(uint256 shares) external view returns (uint256 assets);\\n\\n    /**\\n     * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\\n     *\\n     * - MUST emit the Deposit event.\\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\\n     *   execution, and are accounted for during mint.\\n     * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\\n     *   approving enough underlying tokens to the Vault contract, etc).\\n     *\\n     * NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\\n     */\\n    function mint(uint256 shares, address receiver) external returns (uint256 assets);\\n\\n    /**\\n     * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\\n     * Vault, through a withdraw call.\\n     *\\n     * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\\n     * - MUST NOT revert.\\n     */\\n    function maxWithdraw(address owner) external view returns (uint256 maxAssets);\\n\\n    /**\\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\\n     * given current on-chain conditions.\\n     *\\n     * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\\n     *   call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\\n     *   called\\n     *   in the same transaction.\\n     * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\\n     *   the withdrawal would be accepted, regardless if the user has enough shares, etc.\\n     * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\\n     * share price or some other type of condition, meaning the depositor will lose assets by depositing.\\n     */\\n    function previewWithdraw(uint256 assets) external view returns (uint256 shares);\\n\\n    /**\\n     * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\\n     *\\n     * - MUST emit the Withdraw event.\\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\\n     *   withdraw execution, and are accounted for during withdraw.\\n     * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\\n     *   not having enough shares, etc).\\n     *\\n     * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\\n     * Those methods should be performed separately.\\n     */\\n    function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);\\n\\n    /**\\n     * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\\n     * through a redeem call.\\n     *\\n     * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\\n     * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\\n     * - MUST NOT revert.\\n     */\\n    function maxRedeem(address owner) external view returns (uint256 maxShares);\\n\\n    /**\\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\\n     * given current on-chain conditions.\\n     *\\n     * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\\n     *   in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\\n     *   same transaction.\\n     * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\\n     *   redemption would be accepted, regardless if the user has enough shares, etc.\\n     * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\\n     * share price or some other type of condition, meaning the depositor will lose assets by redeeming.\\n     */\\n    function previewRedeem(uint256 shares) external view returns (uint256 assets);\\n\\n    /**\\n     * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\\n     *\\n     * - MUST emit the Withdraw event.\\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\\n     *   redeem execution, and are accounted for during redeem.\\n     * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\\n     *   not having enough shares, etc).\\n     *\\n     * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\\n     * Those methods should be performed separately.\\n     */\\n    function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);\\n}\\n\",\"keccak256\":\"0xf867351fb48f5c0e3b45f085ce60f374b785417f84370cb2ffb57f421931e7eb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuardUpgradeable is Initializable {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    function __ReentrancyGuard_init() internal onlyInitializing {\\n        __ReentrancyGuard_init_unchained();\\n    }\\n\\n    function __ReentrancyGuard_init_unchained() internal onlyInitializing {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Returns true if the reentrancy guard is currently set to \\\"entered\\\", which indicates there is a\\n     * `nonReentrant` function in the call stack.\\n     */\\n    function _reentrancyGuardEntered() internal view returns (bool) {\\n        return _status == _ENTERED;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2025ccf05f6f1f2fd4e078e552836f525a1864e3854ed555047cd732320ab29b\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xa9311aeb22f459e57d4dac77ee76cf43fb28ad3215278456211b5852b0e9e970\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/ERC4626.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../utils/SafeERC20Upgradeable.sol\\\";\\nimport \\\"../../../interfaces/IERC4626Upgradeable.sol\\\";\\nimport \\\"../../../utils/math/MathUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the ERC4626 \\\"Tokenized Vault Standard\\\" as defined in\\n * https://eips.ethereum.org/EIPS/eip-4626[EIP-4626].\\n *\\n * This extension allows the minting and burning of \\\"shares\\\" (represented using the ERC20 inheritance) in exchange for\\n * underlying \\\"assets\\\" through standardized {deposit}, {mint}, {redeem} and {burn} workflows. This contract extends\\n * the ERC20 standard. Any additional extensions included along it would affect the \\\"shares\\\" token represented by this\\n * contract and not the \\\"assets\\\" token which is an independent contract.\\n *\\n * [CAUTION]\\n * ====\\n * In empty (or nearly empty) ERC-4626 vaults, deposits are at high risk of being stolen through frontrunning\\n * with a \\\"donation\\\" to the vault that inflates the price of a share. This is variously known as a donation or inflation\\n * attack and is essentially a problem of slippage. Vault deployers can protect against this attack by making an initial\\n * deposit of a non-trivial amount of the asset, such that price manipulation becomes infeasible. Withdrawals may\\n * similarly be affected by slippage. Users can protect against this attack as well as unexpected slippage in general by\\n * verifying the amount received is as expected, using a wrapper that performs these checks such as\\n * https://github.com/fei-protocol/ERC4626#erc4626router-and-base[ERC4626Router].\\n *\\n * Since v4.9, this implementation uses virtual assets and shares to mitigate that risk. The `_decimalsOffset()`\\n * corresponds to an offset in the decimal representation between the underlying asset's decimals and the vault\\n * decimals. This offset also determines the rate of virtual shares to virtual assets in the vault, which itself\\n * determines the initial exchange rate. While not fully preventing the attack, analysis shows that the default offset\\n * (0) makes it non-profitable, as a result of the value being captured by the virtual shares (out of the attacker's\\n * donation) matching the attacker's expected gains. With a larger offset, the attack becomes orders of magnitude more\\n * expensive than it is profitable. More details about the underlying math can be found\\n * xref:erc4626.adoc#inflation-attack[here].\\n *\\n * The drawback of this approach is that the virtual shares do capture (a very small) part of the value being accrued\\n * to the vault. Also, if the vault experiences losses, the users try to exit the vault, the virtual shares and assets\\n * will cause the first user to exit to experience reduced losses in detriment to the last users that will experience\\n * bigger losses. Developers willing to revert back to the pre-v4.9 behavior just need to override the\\n * `_convertToShares` and `_convertToAssets` functions.\\n *\\n * To learn more, check out our xref:ROOT:erc4626.adoc[ERC-4626 guide].\\n * ====\\n *\\n * _Available since v4.7._\\n */\\nabstract contract ERC4626Upgradeable is Initializable, ERC20Upgradeable, IERC4626Upgradeable {\\n    using MathUpgradeable for uint256;\\n\\n    IERC20Upgradeable private _asset;\\n    uint8 private _underlyingDecimals;\\n\\n    /**\\n     * @dev Set the underlying asset contract. This must be an ERC20-compatible contract (ERC20 or ERC777).\\n     */\\n    function __ERC4626_init(IERC20Upgradeable asset_) internal onlyInitializing {\\n        __ERC4626_init_unchained(asset_);\\n    }\\n\\n    function __ERC4626_init_unchained(IERC20Upgradeable asset_) internal onlyInitializing {\\n        (bool success, uint8 assetDecimals) = _tryGetAssetDecimals(asset_);\\n        _underlyingDecimals = success ? assetDecimals : 18;\\n        _asset = asset_;\\n    }\\n\\n    /**\\n     * @dev Attempts to fetch the asset decimals. A return value of false indicates that the attempt failed in some way.\\n     */\\n    function _tryGetAssetDecimals(IERC20Upgradeable asset_) private view returns (bool, uint8) {\\n        (bool success, bytes memory encodedDecimals) = address(asset_).staticcall(\\n            abi.encodeWithSelector(IERC20MetadataUpgradeable.decimals.selector)\\n        );\\n        if (success && encodedDecimals.length >= 32) {\\n            uint256 returnedDecimals = abi.decode(encodedDecimals, (uint256));\\n            if (returnedDecimals <= type(uint8).max) {\\n                return (true, uint8(returnedDecimals));\\n            }\\n        }\\n        return (false, 0);\\n    }\\n\\n    /**\\n     * @dev Decimals are computed by adding the decimal offset on top of the underlying asset's decimals. This\\n     * \\\"original\\\" value is cached during construction of the vault contract. If this read operation fails (e.g., the\\n     * asset has not been created yet), a default of 18 is used to represent the underlying asset's decimals.\\n     *\\n     * See {IERC20Metadata-decimals}.\\n     */\\n    function decimals() public view virtual override(IERC20MetadataUpgradeable, ERC20Upgradeable) returns (uint8) {\\n        return _underlyingDecimals + _decimalsOffset();\\n    }\\n\\n    /** @dev See {IERC4626-asset}. */\\n    function asset() public view virtual override returns (address) {\\n        return address(_asset);\\n    }\\n\\n    /** @dev See {IERC4626-totalAssets}. */\\n    function totalAssets() public view virtual override returns (uint256) {\\n        return _asset.balanceOf(address(this));\\n    }\\n\\n    /** @dev See {IERC4626-convertToShares}. */\\n    function convertToShares(uint256 assets) public view virtual override returns (uint256) {\\n        return _convertToShares(assets, MathUpgradeable.Rounding.Down);\\n    }\\n\\n    /** @dev See {IERC4626-convertToAssets}. */\\n    function convertToAssets(uint256 shares) public view virtual override returns (uint256) {\\n        return _convertToAssets(shares, MathUpgradeable.Rounding.Down);\\n    }\\n\\n    /** @dev See {IERC4626-maxDeposit}. */\\n    function maxDeposit(address) public view virtual override returns (uint256) {\\n        return type(uint256).max;\\n    }\\n\\n    /** @dev See {IERC4626-maxMint}. */\\n    function maxMint(address) public view virtual override returns (uint256) {\\n        return type(uint256).max;\\n    }\\n\\n    /** @dev See {IERC4626-maxWithdraw}. */\\n    function maxWithdraw(address owner) public view virtual override returns (uint256) {\\n        return _convertToAssets(balanceOf(owner), MathUpgradeable.Rounding.Down);\\n    }\\n\\n    /** @dev See {IERC4626-maxRedeem}. */\\n    function maxRedeem(address owner) public view virtual override returns (uint256) {\\n        return balanceOf(owner);\\n    }\\n\\n    /** @dev See {IERC4626-previewDeposit}. */\\n    function previewDeposit(uint256 assets) public view virtual override returns (uint256) {\\n        return _convertToShares(assets, MathUpgradeable.Rounding.Down);\\n    }\\n\\n    /** @dev See {IERC4626-previewMint}. */\\n    function previewMint(uint256 shares) public view virtual override returns (uint256) {\\n        return _convertToAssets(shares, MathUpgradeable.Rounding.Up);\\n    }\\n\\n    /** @dev See {IERC4626-previewWithdraw}. */\\n    function previewWithdraw(uint256 assets) public view virtual override returns (uint256) {\\n        return _convertToShares(assets, MathUpgradeable.Rounding.Up);\\n    }\\n\\n    /** @dev See {IERC4626-previewRedeem}. */\\n    function previewRedeem(uint256 shares) public view virtual override returns (uint256) {\\n        return _convertToAssets(shares, MathUpgradeable.Rounding.Down);\\n    }\\n\\n    /** @dev See {IERC4626-deposit}. */\\n    function deposit(uint256 assets, address receiver) public virtual override returns (uint256) {\\n        require(assets <= maxDeposit(receiver), \\\"ERC4626: deposit more than max\\\");\\n\\n        uint256 shares = previewDeposit(assets);\\n        _deposit(_msgSender(), receiver, assets, shares);\\n\\n        return shares;\\n    }\\n\\n    /** @dev See {IERC4626-mint}.\\n     *\\n     * As opposed to {deposit}, minting is allowed even if the vault is in a state where the price of a share is zero.\\n     * In this case, the shares will be minted without requiring any assets to be deposited.\\n     */\\n    function mint(uint256 shares, address receiver) public virtual override returns (uint256) {\\n        require(shares <= maxMint(receiver), \\\"ERC4626: mint more than max\\\");\\n\\n        uint256 assets = previewMint(shares);\\n        _deposit(_msgSender(), receiver, assets, shares);\\n\\n        return assets;\\n    }\\n\\n    /** @dev See {IERC4626-withdraw}. */\\n    function withdraw(uint256 assets, address receiver, address owner) public virtual override returns (uint256) {\\n        require(assets <= maxWithdraw(owner), \\\"ERC4626: withdraw more than max\\\");\\n\\n        uint256 shares = previewWithdraw(assets);\\n        _withdraw(_msgSender(), receiver, owner, assets, shares);\\n\\n        return shares;\\n    }\\n\\n    /** @dev See {IERC4626-redeem}. */\\n    function redeem(uint256 shares, address receiver, address owner) public virtual override returns (uint256) {\\n        require(shares <= maxRedeem(owner), \\\"ERC4626: redeem more than max\\\");\\n\\n        uint256 assets = previewRedeem(shares);\\n        _withdraw(_msgSender(), receiver, owner, assets, shares);\\n\\n        return assets;\\n    }\\n\\n    /**\\n     * @dev Internal conversion function (from assets to shares) with support for rounding direction.\\n     */\\n    function _convertToShares(uint256 assets, MathUpgradeable.Rounding rounding) internal view virtual returns (uint256) {\\n        return assets.mulDiv(totalSupply() + 10 ** _decimalsOffset(), totalAssets() + 1, rounding);\\n    }\\n\\n    /**\\n     * @dev Internal conversion function (from shares to assets) with support for rounding direction.\\n     */\\n    function _convertToAssets(uint256 shares, MathUpgradeable.Rounding rounding) internal view virtual returns (uint256) {\\n        return shares.mulDiv(totalAssets() + 1, totalSupply() + 10 ** _decimalsOffset(), rounding);\\n    }\\n\\n    /**\\n     * @dev Deposit/mint common workflow.\\n     */\\n    function _deposit(address caller, address receiver, uint256 assets, uint256 shares) internal virtual {\\n        // If _asset is ERC777, `transferFrom` can trigger a reentrancy BEFORE the transfer happens through the\\n        // `tokensToSend` hook. On the other hand, the `tokenReceived` hook, that is triggered after the transfer,\\n        // calls the vault, which is assumed not malicious.\\n        //\\n        // Conclusion: we need to do the transfer before we mint so that any reentrancy would happen before the\\n        // assets are transferred and before the shares are minted, which is a valid state.\\n        // slither-disable-next-line reentrancy-no-eth\\n        SafeERC20Upgradeable.safeTransferFrom(_asset, caller, address(this), assets);\\n        _mint(receiver, shares);\\n\\n        emit Deposit(caller, receiver, assets, shares);\\n    }\\n\\n    /**\\n     * @dev Withdraw/redeem common workflow.\\n     */\\n    function _withdraw(\\n        address caller,\\n        address receiver,\\n        address owner,\\n        uint256 assets,\\n        uint256 shares\\n    ) internal virtual {\\n        if (caller != owner) {\\n            _spendAllowance(owner, caller, shares);\\n        }\\n\\n        // If _asset is ERC777, `transfer` can trigger a reentrancy AFTER the transfer happens through the\\n        // `tokensReceived` hook. On the other hand, the `tokensToSend` hook, that is triggered before the transfer,\\n        // calls the vault, which is assumed not malicious.\\n        //\\n        // Conclusion: we need to do the transfer after the burn so that any reentrancy would happen after the\\n        // shares are burned and after the assets are transferred, which is a valid state.\\n        _burn(owner, shares);\\n        SafeERC20Upgradeable.safeTransfer(_asset, receiver, assets);\\n\\n        emit Withdraw(caller, receiver, owner, assets, shares);\\n    }\\n\\n    function _decimalsOffset() internal view virtual returns (uint8) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x48a2c0285b0ce8bf768b780142e82ccf08208b343439770464f2cc46c0cef3f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * ==== Security Considerations\\n *\\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\\n * generally recommended is:\\n *\\n * ```solidity\\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\\n *     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\\n *     doThing(..., value);\\n * }\\n *\\n * function doThing(..., uint256 value) public {\\n *     token.safeTransferFrom(msg.sender, address(this), value);\\n *     ...\\n * }\\n * ```\\n *\\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\\n * {SafeERC20-safeTransferFrom}).\\n *\\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\\n * contracts should have entry points that don't rely on permit.\\n */\\ninterface IERC20PermitUpgradeable {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     *\\n     * CAUTION: See Security Considerations above.\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x07e881de3b9f6d2c07909f193f24b96c7fe4ea60013260f3f25aecd8bab3c2f8\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\nimport \\\"../extensions/IERC20PermitUpgradeable.sol\\\";\\nimport \\\"../../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20Upgradeable {\\n    using AddressUpgradeable for address;\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransfer(IERC20Upgradeable token, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    /**\\n     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeIncreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        uint256 oldAllowance = token.allowance(address(this), spender);\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));\\n    }\\n\\n    /**\\n     * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeDecreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));\\n        }\\n    }\\n\\n    /**\\n     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n     * to be set to zero before setting it to a non-zero value, such as USDT.\\n     */\\n    function forceApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);\\n\\n        if (!_callOptionalReturnBool(token, approvalCall)) {\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));\\n            _callOptionalReturn(token, approvalCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.\\n     * Revert on invalid signature.\\n     */\\n    function safePermit(\\n        IERC20PermitUpgradeable token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20Upgradeable token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        require(returndata.length == 0 || abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     *\\n     * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\\n     */\\n    function _callOptionalReturnBool(IERC20Upgradeable token, bytes memory data) private returns (bool) {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\\n        // and not revert is the subcall reverts.\\n\\n        (bool success, bytes memory returndata) = address(token).call(data);\\n        return\\n            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && AddressUpgradeable.isContract(address(token));\\n    }\\n}\\n\",\"keccak256\":\"0x23b997be73d3dd46885262704f0f8cfc7273fdadfe303d37969a9561373972b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary MathUpgradeable {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n                // The surrounding unchecked block does not change this fact.\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10 ** 64) {\\n                value /= 10 ** 64;\\n                result += 64;\\n            }\\n            if (value >= 10 ** 32) {\\n                value /= 10 ** 32;\\n                result += 32;\\n            }\\n            if (value >= 10 ** 16) {\\n                value /= 10 ** 16;\\n                result += 16;\\n            }\\n            if (value >= 10 ** 8) {\\n                value /= 10 ** 8;\\n                result += 8;\\n            }\\n            if (value >= 10 ** 4) {\\n                value /= 10 ** 4;\\n                result += 4;\\n            }\\n            if (value >= 10 ** 2) {\\n                value /= 10 ** 2;\\n                result += 2;\\n            }\\n            if (value >= 10 ** 1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2bc0007987c229ae7624eb29be6a9b84f6a6a5872f76248b15208b131ea41c4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n    /**\\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n     *\\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n     * {RoleAdminChanged} not being emitted signaling this.\\n     *\\n     * _Available since v3.1._\\n     */\\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n    /**\\n     * @dev Emitted when `account` is granted `role`.\\n     *\\n     * `sender` is the account that originated the contract call, an admin role\\n     * bearer except when using {AccessControl-_setupRole}.\\n     */\\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Emitted when `account` is revoked `role`.\\n     *\\n     * `sender` is the account that originated the contract call:\\n     *   - if using `revokeRole`, it is the admin role bearer\\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n     */\\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Returns `true` if `account` has been granted `role`.\\n     */\\n    function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n    /**\\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\\n     * {revokeRole}.\\n     *\\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n     */\\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n    /**\\n     * @dev Grants `role` to `account`.\\n     *\\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function grantRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from `account`.\\n     *\\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function revokeRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from the calling account.\\n     *\\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n     * purpose is to provide a mechanism for accounts to lose their privileges\\n     * if they are compromised (such as when a trusted device is misplaced).\\n     *\\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must be `account`.\\n     */\\n    function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\n\\nimport \\\"./IAccessControlManagerV8.sol\\\";\\n\\n/**\\n * @title AccessControlledV8\\n * @author Venus\\n * @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\\n * to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\\n */\\nabstract contract AccessControlledV8 is Initializable, Ownable2StepUpgradeable {\\n    /// @notice Access control manager contract\\n    IAccessControlManagerV8 internal _accessControlManager;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when access control manager contract address is changed\\n    event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager);\\n\\n    /// @notice Thrown when the action is prohibited by AccessControlManager\\n    error Unauthorized(address sender, address calledContract, string methodSignature);\\n\\n    function __AccessControlled_init(address accessControlManager_) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n    }\\n\\n    function __AccessControlled_init_unchained(address accessControlManager_) internal onlyInitializing {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Sets the address of AccessControlManager\\n     * @dev Admin function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     * @custom:event Emits NewAccessControlManager event\\n     * @custom:access Only Governance\\n     */\\n    function setAccessControlManager(address accessControlManager_) external onlyOwner {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Returns the address of the access control manager contract\\n     */\\n    function accessControlManager() external view returns (IAccessControlManagerV8) {\\n        return _accessControlManager;\\n    }\\n\\n    /**\\n     * @dev Internal function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     */\\n    function _setAccessControlManager(address accessControlManager_) internal {\\n        require(address(accessControlManager_) != address(0), \\\"invalid acess control manager address\\\");\\n        address oldAccessControlManager = address(_accessControlManager);\\n        _accessControlManager = IAccessControlManagerV8(accessControlManager_);\\n        emit NewAccessControlManager(oldAccessControlManager, accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Reverts if the call is not allowed by AccessControlManager\\n     * @param signature Method signature\\n     */\\n    function _checkAccessAllowed(string memory signature) internal view {\\n        bool isAllowedToCall = _accessControlManager.isAllowedToCall(msg.sender, signature);\\n\\n        if (!isAllowedToCall) {\\n            revert Unauthorized(msg.sender, address(this), signature);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe0fd441c84ac907cabc88db69ef04f6d7532d770c7e6a1dfe6e7d6305debb49\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport \\\"@openzeppelin/contracts/access/IAccessControl.sol\\\";\\n\\n/**\\n * @title IAccessControlManagerV8\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\\n */\\ninterface IAccessControlManagerV8 is IAccessControl {\\n    function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n    function revokeCallPermission(\\n        address contractAddress,\\n        string calldata functionSig,\\n        address accountToRevoke\\n    ) external;\\n\\n    function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n    function hasPermission(\\n        address account,\\n        address contractAddress,\\n        string calldata functionSig\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xaa29b098440d0b3a131c5ecdf25ce548790c1b5ac7bf9b5c0264b6af6f7a1e0b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Comptroller.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\n\\nimport { ComptrollerInterface, Action } from \\\"./ComptrollerInterface.sol\\\";\\nimport { ComptrollerStorage } from \\\"./ComptrollerStorage.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"./MaxLoopsLimitHelper.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title Comptroller\\n * @author Venus\\n * @notice The Comptroller is designed to provide checks for all minting, redeeming, transferring, borrowing, lending, repaying, liquidating,\\n * and seizing done by the `vToken` contract. Each pool has one `Comptroller` checking these interactions across markets. When a user interacts\\n * with a given market by one of these main actions, a call is made to a corresponding hook in the associated `Comptroller`, which either allows\\n * or reverts the transaction. These hooks also update supply and borrow rewards as they are called. The comptroller holds the logic for assessing\\n * liquidity snapshots of an account via the collateral factor and liquidation threshold. This check determines the collateral needed for a borrow,\\n * as well as how much of a borrow may be liquidated. A user may borrow a portion of their collateral with the maximum amount determined by the\\n * markets collateral factor. However, if their borrowed amount exceeds an amount calculated using the market\\u2019s corresponding liquidation threshold,\\n * the borrow is eligible for liquidation.\\n *\\n * The `Comptroller` also includes two functions `liquidateAccount()` and `healAccount()`, which are meant to handle accounts that do not exceed\\n * the `minLiquidatableCollateral` for the `Comptroller`:\\n *\\n * - `healAccount()`: This function is called to seize all of a given user\\u2019s collateral, requiring the `msg.sender` repay a certain percentage\\n * of the debt calculated by `collateral/(borrows*liquidationIncentive)`. The function can only be called if the calculated percentage does not exceed\\n * 100%, because otherwise no `badDebt` would be created and `liquidateAccount()` should be used instead. The difference in the actual amount of debt\\n * and debt paid off is recorded as `badDebt` for each market, which can then be auctioned off for the risk reserves of the associated pool.\\n * - `liquidateAccount()`: This function can only be called if the collateral seized will cover all borrows of an account, as well as the liquidation\\n * incentive. Otherwise, the pool will incur bad debt, in which case the function `healAccount()` should be used instead. This function skips the logic\\n * verifying that the repay amount does not exceed the close factor.\\n */\\ncontract Comptroller is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    ComptrollerStorage,\\n    ComptrollerInterface,\\n    ExponentialNoError,\\n    MaxLoopsLimitHelper\\n{\\n    // PoolRegistry, immutable to save on gas\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    address public immutable poolRegistry;\\n\\n    /// @notice Emitted when an account enters a market\\n    event MarketEntered(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when an account exits a market\\n    event MarketExited(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when close factor is changed by admin\\n    event NewCloseFactor(uint256 oldCloseFactorMantissa, uint256 newCloseFactorMantissa);\\n\\n    /// @notice Emitted when a collateral factor is changed by admin\\n    event NewCollateralFactor(VToken vToken, uint256 oldCollateralFactorMantissa, uint256 newCollateralFactorMantissa);\\n\\n    /// @notice Emitted when liquidation threshold is changed by admin\\n    event NewLiquidationThreshold(\\n        VToken vToken,\\n        uint256 oldLiquidationThresholdMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    );\\n\\n    /// @notice Emitted when liquidation incentive is changed by admin\\n    event NewLiquidationIncentive(uint256 oldLiquidationIncentiveMantissa, uint256 newLiquidationIncentiveMantissa);\\n\\n    /// @notice Emitted when price oracle is changed\\n    event NewPriceOracle(ResilientOracleInterface oldPriceOracle, ResilientOracleInterface newPriceOracle);\\n\\n    /// @notice Emitted when an action is paused on a market\\n    event ActionPausedMarket(VToken vToken, Action action, bool pauseState);\\n\\n    /// @notice Emitted when borrow cap for a vToken is changed\\n    event NewBorrowCap(VToken indexed vToken, uint256 newBorrowCap);\\n\\n    /// @notice Emitted when the collateral threshold (in USD) for non-batch liquidations is changed\\n    event NewMinLiquidatableCollateral(uint256 oldMinLiquidatableCollateral, uint256 newMinLiquidatableCollateral);\\n\\n    /// @notice Emitted when supply cap for a vToken is changed\\n    event NewSupplyCap(VToken indexed vToken, uint256 newSupplyCap);\\n\\n    /// @notice Emitted when a rewards distributor is added\\n    event NewRewardsDistributor(address indexed rewardsDistributor, address indexed rewardToken);\\n\\n    /// @notice Emitted when a market is supported\\n    event MarketSupported(VToken vToken);\\n\\n    /// @notice Emitted when prime token contract address is changed\\n    event NewPrimeToken(IPrime oldPrimeToken, IPrime newPrimeToken);\\n\\n    /// @notice Emitted when forced liquidation is enabled or disabled for a market\\n    event IsForcedLiquidationEnabledUpdated(address indexed vToken, bool enable);\\n\\n    /// @notice Emitted when a market is unlisted\\n    event MarketUnlisted(address indexed vToken);\\n    /// @notice Emitted when the borrowing or redeeming delegate rights are updated for an account\\n    event DelegateUpdated(address indexed approver, address indexed delegate, bool approved);\\n\\n    /// @notice Thrown when collateral factor exceeds the upper bound\\n    error InvalidCollateralFactor();\\n\\n    /// @notice Thrown when liquidation threshold exceeds the collateral factor\\n    error InvalidLiquidationThreshold();\\n\\n    /// @notice Thrown when the action is only available to specific sender, but the real sender was different\\n    error UnexpectedSender(address expectedSender, address actualSender);\\n\\n    /// @notice Thrown when the oracle returns an invalid price for some asset\\n    error PriceError(address vToken);\\n\\n    /// @notice Thrown if VToken unexpectedly returned a nonzero error code while trying to get account snapshot\\n    error SnapshotError(address vToken, address user);\\n\\n    /// @notice Thrown when the market is not listed\\n    error MarketNotListed(address market);\\n\\n    /// @notice Thrown when a market has an unexpected comptroller\\n    error ComptrollerMismatch();\\n\\n    /// @notice Thrown when user is not member of market\\n    error MarketNotCollateral(address vToken, address user);\\n\\n    /// @notice Thrown when borrow action is not paused\\n    error BorrowActionNotPaused();\\n\\n    /// @notice Thrown when mint action is not paused\\n    error MintActionNotPaused();\\n\\n    /// @notice Thrown when redeem action is not paused\\n    error RedeemActionNotPaused();\\n\\n    /// @notice Thrown when repay action is not paused\\n    error RepayActionNotPaused();\\n\\n    /// @notice Thrown when seize action is not paused\\n    error SeizeActionNotPaused();\\n\\n    /// @notice Thrown when exit market action is not paused\\n    error ExitMarketActionNotPaused();\\n\\n    /// @notice Thrown when transfer action is not paused\\n    error TransferActionNotPaused();\\n\\n    /// @notice Thrown when enter market action is not paused\\n    error EnterMarketActionNotPaused();\\n\\n    /// @notice Thrown when liquidate action is not paused\\n    error LiquidateActionNotPaused();\\n\\n    /// @notice Thrown when borrow cap is not zero\\n    error BorrowCapIsNotZero();\\n\\n    /// @notice Thrown when supply cap is not zero\\n    error SupplyCapIsNotZero();\\n\\n    /// @notice Thrown when collateral factor is not zero\\n    error CollateralFactorIsNotZero();\\n\\n    /**\\n     * @notice Thrown during the liquidation if user's total collateral amount is lower than\\n     *   a predefined threshold. In this case only batch liquidations (either liquidateAccount\\n     *   or healAccount) are available.\\n     */\\n    error MinimalCollateralViolated(uint256 expectedGreaterThan, uint256 actual);\\n    error CollateralExceedsThreshold(uint256 expectedLessThanOrEqualTo, uint256 actual);\\n    error InsufficientCollateral(uint256 collateralToSeize, uint256 availableCollateral);\\n\\n    /// @notice Thrown when the account doesn't have enough liquidity to redeem or borrow\\n    error InsufficientLiquidity();\\n\\n    /// @notice Thrown when trying to liquidate a healthy account\\n    error InsufficientShortfall();\\n\\n    /// @notice Thrown when trying to repay more than allowed by close factor\\n    error TooMuchRepay();\\n\\n    /// @notice Thrown if the user is trying to exit a market in which they have an outstanding debt\\n    error NonzeroBorrowBalance();\\n\\n    /// @notice Thrown when trying to perform an action that is paused\\n    error ActionPaused(address market, Action action);\\n\\n    /// @notice Thrown when trying to add a market that is already listed\\n    error MarketAlreadyListed(address market);\\n\\n    /// @notice Thrown if the supply cap is exceeded\\n    error SupplyCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if the borrow cap is exceeded\\n    error BorrowCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if delegate approval status is already set to the requested value\\n    error DelegationStatusUnchanged();\\n\\n    /// @param poolRegistry_ Pool registry address\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    /// @custom:error ZeroAddressNotAllowed is thrown when pool registry address is zero\\n    constructor(address poolRegistry_) {\\n        ensureNonzeroAddress(poolRegistry_);\\n\\n        poolRegistry = poolRegistry_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @param loopLimit Limit for the loops can iterate to avoid the DOS\\n     * @param accessControlManager Access control manager contract address\\n     */\\n    function initialize(uint256 loopLimit, address accessControlManager) external initializer {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager);\\n\\n        _setMaxLoopsLimit(loopLimit);\\n    }\\n\\n    /**\\n     * @notice Add assets to be included in account liquidity calculation; enabling them to be used as collateral\\n     * @param vTokens The list of addresses of the vToken markets to be enabled\\n     * @return errors An array of NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketEntered is emitted for each market on success\\n     * @custom:error ActionPaused error is thrown if entering any of the markets is paused\\n     * @custom:error MarketNotListed error is thrown if any of the markets is not listed\\n     * @custom:access Not restricted\\n     */\\n    function enterMarkets(address[] memory vTokens) external override returns (uint256[] memory) {\\n        uint256 len = vTokens.length;\\n\\n        uint256[] memory results = new uint256[](len);\\n        for (uint256 i; i < len; ++i) {\\n            VToken vToken = VToken(vTokens[i]);\\n\\n            _addToMarket(vToken, msg.sender);\\n            results[i] = NO_ERROR;\\n        }\\n\\n        return results;\\n    }\\n\\n    /**\\n     * @notice Unlist a market by setting isListed to false\\n     * @dev Checks if all actions are paused, borrow/supply caps is set to 0 and collateral factor is to 0.\\n     * @param market The address of the market (token) to unlist\\n     * @return uint256 Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketUnlisted is emitted on success\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error BorrowActionNotPaused error is thrown if borrow action is not paused\\n     * @custom:error MintActionNotPaused error is thrown if mint action is not paused\\n     * @custom:error RedeemActionNotPaused error is thrown if redeem action is not paused\\n     * @custom:error RepayActionNotPaused error is thrown if repay action is not paused\\n     * @custom:error EnterMarketActionNotPaused error is thrown if enter market action is not paused\\n     * @custom:error LiquidateActionNotPaused error is thrown if liquidate action is not paused\\n     * @custom:error BorrowCapIsNotZero error is thrown if borrow cap is not zero\\n     * @custom:error SupplyCapIsNotZero error is thrown if supply cap is not zero\\n     * @custom:error CollateralFactorIsNotZero error is thrown if collateral factor is not zero\\n     */\\n    function unlistMarket(address market) external returns (uint256) {\\n        _checkAccessAllowed(\\\"unlistMarket(address)\\\");\\n\\n        Market storage _market = markets[market];\\n\\n        if (!_market.isListed) {\\n            revert MarketNotListed(market);\\n        }\\n\\n        if (!actionPaused(market, Action.BORROW)) {\\n            revert BorrowActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.MINT)) {\\n            revert MintActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REDEEM)) {\\n            revert RedeemActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REPAY)) {\\n            revert RepayActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.SEIZE)) {\\n            revert SeizeActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.ENTER_MARKET)) {\\n            revert EnterMarketActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.LIQUIDATE)) {\\n            revert LiquidateActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.TRANSFER)) {\\n            revert TransferActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.EXIT_MARKET)) {\\n            revert ExitMarketActionNotPaused();\\n        }\\n\\n        if (borrowCaps[market] != 0) {\\n            revert BorrowCapIsNotZero();\\n        }\\n\\n        if (supplyCaps[market] != 0) {\\n            revert SupplyCapIsNotZero();\\n        }\\n\\n        if (_market.collateralFactorMantissa != 0) {\\n            revert CollateralFactorIsNotZero();\\n        }\\n\\n        _market.isListed = false;\\n        emit MarketUnlisted(market);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Grants or revokes the borrowing or redeeming delegate rights to / from an account\\n     *  If allowed, the delegate will be able to borrow funds on behalf of the sender\\n     *  Upon a delegated borrow, the delegate will receive the funds, and the borrower\\n     *  will see the debt on their account\\n     *  Upon a delegated redeem, the delegate will receive the redeemed amount and the approver\\n     *  will see a deduction in his vToken balance\\n     * @param delegate The address to update the rights for\\n     * @param approved Whether to grant (true) or revoke (false) the borrowing or redeeming rights\\n     * @custom:event DelegateUpdated emits on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when delegate address is zero\\n     * @custom:error DelegationStatusUnchanged is thrown if approval status is already set to the requested value\\n     * @custom:access Not restricted\\n     */\\n    function updateDelegate(address delegate, bool approved) external {\\n        ensureNonzeroAddress(delegate);\\n        if (approvedDelegates[msg.sender][delegate] == approved) {\\n            revert DelegationStatusUnchanged();\\n        }\\n\\n        approvedDelegates[msg.sender][delegate] = approved;\\n        emit DelegateUpdated(msg.sender, delegate, approved);\\n    }\\n\\n    /**\\n     * @notice Removes asset from sender's account liquidity calculation; disabling them as collateral\\n     * @dev Sender must not have an outstanding borrow balance in the asset,\\n     *  or be providing necessary collateral for an outstanding borrow.\\n     * @param vTokenAddress The address of the asset to be removed\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketExited is emitted on success\\n     * @custom:error ActionPaused error is thrown if exiting the market is paused\\n     * @custom:error NonzeroBorrowBalance error is thrown if the user has an outstanding borrow in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if exiting the market would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function exitMarket(address vTokenAddress) external override returns (uint256) {\\n        _checkActionPauseState(vTokenAddress, Action.EXIT_MARKET);\\n        VToken vToken = VToken(vTokenAddress);\\n        /* Get sender tokensHeld and amountOwed underlying from the vToken */\\n        (uint256 tokensHeld, uint256 amountOwed, ) = _safeGetAccountSnapshot(vToken, msg.sender);\\n\\n        /* Fail if the sender has a borrow balance */\\n        if (amountOwed != 0) {\\n            revert NonzeroBorrowBalance();\\n        }\\n\\n        /* Fail if the sender is not permitted to redeem all of their tokens */\\n        _checkRedeemAllowed(vTokenAddress, msg.sender, tokensHeld);\\n\\n        Market storage marketToExit = markets[address(vToken)];\\n\\n        /* Return true if the sender is not already \\u2018in\\u2019 the market */\\n        if (!marketToExit.accountMembership[msg.sender]) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Set vToken account membership to false */\\n        delete marketToExit.accountMembership[msg.sender];\\n\\n        /* Delete vToken from the account\\u2019s list of assets */\\n        // load into memory for faster iteration\\n        VToken[] memory userAssetList = accountAssets[msg.sender];\\n        uint256 len = userAssetList.length;\\n\\n        uint256 assetIndex = len;\\n        for (uint256 i; i < len; ++i) {\\n            if (userAssetList[i] == vToken) {\\n                assetIndex = i;\\n                break;\\n            }\\n        }\\n\\n        // We *must* have found the asset in the list or our redundant data structure is broken\\n        assert(assetIndex < len);\\n\\n        // copy last item in list to location of item to be removed, reduce length by 1\\n        VToken[] storage storedList = accountAssets[msg.sender];\\n        storedList[assetIndex] = storedList[storedList.length - 1];\\n        storedList.pop();\\n\\n        emit MarketExited(vToken, msg.sender);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /*** Policy Hooks ***/\\n\\n    /**\\n     * @notice Checks if the account should be allowed to mint tokens in the given market\\n     * @param vToken The market to verify the mint against\\n     * @param minter The account which would get the minted tokens\\n     * @param mintAmount The amount of underlying being supplied to the market in exchange for tokens\\n     * @custom:error ActionPaused error is thrown if supplying to this market is paused\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error SupplyCapExceeded error is thrown if the total supply exceeds the cap after minting\\n     * @custom:access Not restricted\\n     */\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external override {\\n        _checkActionPauseState(vToken, Action.MINT);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        uint256 supplyCap = supplyCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (supplyCap != type(uint256).max) {\\n            uint256 vTokenSupply = VToken(vToken).totalSupply();\\n            Exp memory exchangeRate = Exp({ mantissa: VToken(vToken).exchangeRateStored() });\\n            uint256 nextTotalSupply = mul_ScalarTruncateAddUInt(exchangeRate, vTokenSupply, mintAmount);\\n            if (nextTotalSupply > supplyCap) {\\n                revert SupplyCapExceeded(vToken, supplyCap);\\n            }\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, minter);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates mint, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being minted\\n     * @param minter The address minting the tokens\\n     * @param actualMintAmount The amount of the underlying asset being minted\\n     * @param mintTokens The number of tokens being minted\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function mintVerify(address vToken, address minter, uint256 actualMintAmount, uint256 mintTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(minter, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to redeem tokens in the given market\\n     * @param vToken The market to verify the redeem against\\n     * @param redeemer The account which would redeem the tokens\\n     * @param redeemTokens The number of vTokens to exchange for the underlying asset in the market\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external override {\\n        _checkActionPauseState(vToken, Action.REDEEM);\\n\\n        _checkRedeemAllowed(vToken, redeemer, redeemTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, redeemer);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates redeem, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being redeemed\\n     * @param redeemer The address redeeming the tokens\\n     * @param redeemAmount The amount of the underlying asset being redeemed\\n     * @param redeemTokens The number of tokens being redeemed\\n     */\\n    function redeemVerify(address vToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(redeemer, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates repayBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being repaid\\n     * @param payer The address repaying the borrow\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     */\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer, // solhint-disable-line no-unused-vars\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 borrowerIndex // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates liquidateBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     * @param seizeTokens The amount of collateral token that will be seized\\n     */\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenBorrowed);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenBorrowed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates seize, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param seizeTokens The number of collateral tokens to seize\\n     */\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenCollateral);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenCollateral);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates transfer, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being transferred\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function transferVerify(address vToken, address src, address dst, uint256 transferTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(src, vToken);\\n            prime.accrueInterestAndUpdateScore(dst, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to borrow the underlying asset of the given market\\n     * @param vToken The market to verify the borrow against\\n     * @param borrower The account which would borrow the asset\\n     * @param borrowAmount The amount of underlying the account would borrow\\n     * @custom:error ActionPaused error is thrown if borrowing is paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if there is not enough collateral to borrow\\n     * @custom:error BorrowCapExceeded is thrown if the borrow cap will be exceeded should this borrow succeed\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted if vToken is enabled as collateral, otherwise only vToken\\n     */\\n    /// disable-eslint\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external override {\\n        _checkActionPauseState(vToken, Action.BORROW);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (!markets[vToken].accountMembership[borrower]) {\\n            // only vTokens may call borrowAllowed if borrower not in market\\n            _checkSenderIs(vToken);\\n\\n            // attempt to add borrower to the market or revert\\n            _addToMarket(VToken(msg.sender), borrower);\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (oracle.getUnderlyingPrice(vToken) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 borrowCap = borrowCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (borrowCap != type(uint256).max) {\\n            uint256 totalBorrows = VToken(vToken).totalBorrows();\\n            uint256 badDebt = VToken(vToken).badDebt();\\n            uint256 nextTotalBorrows = totalBorrows + borrowAmount + badDebt;\\n            if (nextTotalBorrows > borrowCap) {\\n                revert BorrowCapExceeded(vToken, borrowCap);\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            borrower,\\n            VToken(vToken),\\n            0,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n\\n        Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates borrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset whose underlying is being borrowed\\n     * @param borrower The address borrowing the underlying\\n     * @param borrowAmount The amount of the underlying asset requested to borrow\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function borrowVerify(address vToken, address borrower, uint256 borrowAmount) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to repay a borrow in the given market\\n     * @param vToken The market to verify the repay against\\n     * @param borrower The account which would borrowed the asset\\n     * @custom:error ActionPaused error is thrown if repayments are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:access Not restricted\\n     */\\n    function preRepayHook(address vToken, address borrower) external override {\\n        _checkActionPauseState(vToken, Action.REPAY);\\n\\n        oracle.updatePrice(vToken);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the liquidation should be allowed to occur\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param borrower The address of the borrower\\n     * @param repayAmount The amount of underlying being repaid\\n     * @param skipLiquidityCheck Allows the borrow to be liquidated regardless of the account liquidity\\n     * @custom:error ActionPaused error is thrown if liquidations are paused in this market\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error TooMuchRepay error is thrown if the liquidator is trying to repay more than allowed by close factor\\n     * @custom:error MinimalCollateralViolated is thrown if the users' total collateral is lower than the threshold for non-batch liquidations\\n     * @custom:error InsufficientShortfall is thrown when trying to liquidate a healthy account\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     */\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        // Pause Action.LIQUIDATE on BORROWED TOKEN to prevent liquidating it.\\n        // If we want to pause liquidating to vTokenCollateral, we should pause\\n        // Action.SEIZE on it\\n        _checkActionPauseState(vTokenBorrowed, Action.LIQUIDATE);\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(address(vTokenBorrowed));\\n        }\\n        if (!markets[vTokenCollateral].isListed) {\\n            revert MarketNotListed(address(vTokenCollateral));\\n        }\\n\\n        uint256 borrowBalance = VToken(vTokenBorrowed).borrowBalanceStored(borrower);\\n\\n        /* Allow accounts to be liquidated if it is a forced liquidation */\\n        if (skipLiquidityCheck || isForcedLiquidationEnabled[vTokenBorrowed]) {\\n            if (repayAmount > borrowBalance) {\\n                revert TooMuchRepay();\\n            }\\n            return;\\n        }\\n\\n        /* The borrower must have shortfall and collateral > threshold in order to be liquidatable */\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral <= minLiquidatableCollateral) {\\n            /* The liquidator should use either liquidateAccount or healAccount */\\n            revert MinimalCollateralViolated(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        /* The liquidator may not repay more than what is allowed by the closeFactor */\\n        uint256 maxClose = mul_ScalarTruncate(Exp({ mantissa: closeFactorMantissa }), borrowBalance);\\n        if (repayAmount > maxClose) {\\n            revert TooMuchRepay();\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the seizing of assets should be allowed to occur\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param seizerContract Contract that tries to seize the asset (either borrowed vToken or Comptroller)\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @custom:error ActionPaused error is thrown if seizing this type of collateral is paused\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error ComptrollerMismatch error is when seizer contract or seized asset belong to different pools\\n     * @custom:access Not restricted\\n     */\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address seizerContract,\\n        address liquidator,\\n        address borrower\\n    ) external override {\\n        // Pause Action.SEIZE on COLLATERAL to prevent seizing it.\\n        // If we want to pause liquidating vTokenBorrowed, we should pause\\n        // Action.LIQUIDATE on it\\n        _checkActionPauseState(vTokenCollateral, Action.SEIZE);\\n\\n        Market storage market = markets[vTokenCollateral];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(vTokenCollateral);\\n        }\\n\\n        if (seizerContract == address(this)) {\\n            // If Comptroller is the seizer, just check if collateral's comptroller\\n            // is equal to the current address\\n            if (address(VToken(vTokenCollateral).comptroller()) != address(this)) {\\n                revert ComptrollerMismatch();\\n            }\\n        } else {\\n            // If the seizer is not the Comptroller, check that the seizer is a\\n            // listed market, and that the markets' comptrollers match\\n            if (!markets[seizerContract].isListed) {\\n                revert MarketNotListed(seizerContract);\\n            }\\n            if (VToken(vTokenCollateral).comptroller() != VToken(seizerContract).comptroller()) {\\n                revert ComptrollerMismatch();\\n            }\\n        }\\n\\n        if (!market.accountMembership[borrower]) {\\n            revert MarketNotCollateral(vTokenCollateral, borrower);\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vTokenCollateral);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, borrower);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, liquidator);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to transfer tokens in the given market\\n     * @param vToken The market to verify the transfer against\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external override {\\n        _checkActionPauseState(vToken, Action.TRANSFER);\\n\\n        // Currently the only consideration is whether or not\\n        //  the src is allowed to redeem this many tokens\\n        _checkRedeemAllowed(vToken, src, transferTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, src);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, dst);\\n        }\\n    }\\n\\n    /*** Pool-level operations ***/\\n\\n    /**\\n     * @notice Seizes all the remaining collateral, makes msg.sender repay the existing\\n     *   borrows, and treats the rest of the debt as bad debt (for each market).\\n     *   The sender has to repay a certain percentage of the debt, computed as\\n     *   collateral / (borrows * liquidationIncentive).\\n     * @param user account to heal\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for healing\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function healAccount(address user) external {\\n        VToken[] memory userAssets = getAssetsIn(user);\\n        uint256 userAssetsCount = userAssets.length;\\n\\n        address liquidator = msg.sender;\\n        {\\n            ResilientOracleInterface oracle_ = oracle;\\n            // We need all user's markets to be fresh for the computations to be correct\\n            for (uint256 i; i < userAssetsCount; ++i) {\\n                userAssets[i].accrueInterest();\\n                oracle_.updatePrice(address(userAssets[i]));\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(user, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        // percentage = collateral / (borrows * liquidation incentive)\\n        Exp memory collateral = Exp({ mantissa: snapshot.totalCollateral });\\n        Exp memory scaledBorrows = mul_(\\n            Exp({ mantissa: snapshot.borrows }),\\n            Exp({ mantissa: liquidationIncentiveMantissa })\\n        );\\n\\n        Exp memory percentage = div_(collateral, scaledBorrows);\\n        if (lessThanExp(Exp({ mantissa: MANTISSA_ONE }), percentage)) {\\n            revert CollateralExceedsThreshold(scaledBorrows.mantissa, collateral.mantissa);\\n        }\\n\\n        for (uint256 i; i < userAssetsCount; ++i) {\\n            VToken market = userAssets[i];\\n\\n            (uint256 tokens, uint256 borrowBalance, ) = _safeGetAccountSnapshot(market, user);\\n            uint256 repaymentAmount = mul_ScalarTruncate(percentage, borrowBalance);\\n\\n            // Seize the entire collateral\\n            if (tokens != 0) {\\n                market.seize(liquidator, user, tokens);\\n            }\\n            // Repay a certain percentage of the borrow, forgive the rest\\n            if (borrowBalance != 0) {\\n                market.healBorrow(liquidator, user, repaymentAmount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Liquidates all borrows of the borrower. Callable only if the collateral is less than\\n     *   a predefined threshold, and the account collateral can be seized to cover all borrows. If\\n     *   the collateral is higher than the threshold, use regular liquidations. If the collateral is\\n     *   below the threshold, and the account is insolvent, use healAccount.\\n     * @param borrower the borrower address\\n     * @param orders an array of liquidation orders\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for a batch liquidation\\n     * @custom:error InsufficientCollateral error is thrown when there is not enough collateral to cover the debt\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function liquidateAccount(address borrower, LiquidationOrder[] calldata orders) external {\\n        // We will accrue interest and update the oracle prices later during the liquidation\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            // You should use the regular vToken.liquidateBorrow(...) call\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        uint256 collateralToSeize = mul_ScalarTruncate(\\n            Exp({ mantissa: liquidationIncentiveMantissa }),\\n            snapshot.borrows\\n        );\\n        if (collateralToSeize >= snapshot.totalCollateral) {\\n            // There is not enough collateral to seize. Use healBorrow to repay some part of the borrow\\n            // and record bad debt.\\n            revert InsufficientCollateral(collateralToSeize, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        uint256 ordersCount = orders.length;\\n\\n        _ensureMaxLoops(ordersCount / 2);\\n\\n        for (uint256 i; i < ordersCount; ++i) {\\n            if (!markets[address(orders[i].vTokenBorrowed)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenBorrowed));\\n            }\\n            if (!markets[address(orders[i].vTokenCollateral)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenCollateral));\\n            }\\n\\n            LiquidationOrder calldata order = orders[i];\\n            order.vTokenBorrowed.forceLiquidateBorrow(\\n                msg.sender,\\n                borrower,\\n                order.repayAmount,\\n                order.vTokenCollateral,\\n                true\\n            );\\n        }\\n\\n        VToken[] memory borrowMarkets = getAssetsIn(borrower);\\n        uint256 marketsCount = borrowMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            (, uint256 borrowBalance, ) = _safeGetAccountSnapshot(borrowMarkets[i], borrower);\\n            require(borrowBalance == 0, \\\"Nonzero borrow balance after liquidation\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets the closeFactor to use when liquidating borrows\\n     * @param newCloseFactorMantissa New close factor, scaled by 1e18\\n     * @custom:event Emits NewCloseFactor on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCloseFactor(uint256 newCloseFactorMantissa) external {\\n        _checkAccessAllowed(\\\"setCloseFactor(uint256)\\\");\\n        require(MAX_CLOSE_FACTOR_MANTISSA >= newCloseFactorMantissa, \\\"Close factor greater than maximum close factor\\\");\\n        require(MIN_CLOSE_FACTOR_MANTISSA <= newCloseFactorMantissa, \\\"Close factor smaller than minimum close factor\\\");\\n\\n        uint256 oldCloseFactorMantissa = closeFactorMantissa;\\n        closeFactorMantissa = newCloseFactorMantissa;\\n        emit NewCloseFactor(oldCloseFactorMantissa, newCloseFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Sets the collateralFactor for a market\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param vToken The market to set the factor on\\n     * @param newCollateralFactorMantissa The new collateral factor, scaled by 1e18\\n     * @param newLiquidationThresholdMantissa The new liquidation threshold, scaled by 1e18\\n     * @custom:event Emits NewCollateralFactor when collateral factor is updated\\n     *    and NewLiquidationThreshold when liquidation threshold is updated\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InvalidCollateralFactor error is thrown when collateral factor is too high\\n     * @custom:error InvalidLiquidationThreshold error is thrown when liquidation threshold is lower than collateral factor\\n     * @custom:error PriceError is thrown when the oracle returns an invalid price for the asset\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCollateralFactor(\\n        VToken vToken,\\n        uint256 newCollateralFactorMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    ) external {\\n        _checkAccessAllowed(\\\"setCollateralFactor(address,uint256,uint256)\\\");\\n\\n        // Verify market is listed\\n        Market storage market = markets[address(vToken)];\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Check collateral factor <= 0.9\\n        if (newCollateralFactorMantissa > MAX_COLLATERAL_FACTOR_MANTISSA) {\\n            revert InvalidCollateralFactor();\\n        }\\n\\n        // Ensure that liquidation threshold <= 1\\n        if (newLiquidationThresholdMantissa > MANTISSA_ONE) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // Ensure that liquidation threshold >= CF\\n        if (newLiquidationThresholdMantissa < newCollateralFactorMantissa) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // If collateral factor != 0, fail if price == 0\\n        if (newCollateralFactorMantissa != 0 && oracle.getUnderlyingPrice(address(vToken)) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 oldCollateralFactorMantissa = market.collateralFactorMantissa;\\n        if (newCollateralFactorMantissa != oldCollateralFactorMantissa) {\\n            market.collateralFactorMantissa = newCollateralFactorMantissa;\\n            emit NewCollateralFactor(vToken, oldCollateralFactorMantissa, newCollateralFactorMantissa);\\n        }\\n\\n        uint256 oldLiquidationThresholdMantissa = market.liquidationThresholdMantissa;\\n        if (newLiquidationThresholdMantissa != oldLiquidationThresholdMantissa) {\\n            market.liquidationThresholdMantissa = newLiquidationThresholdMantissa;\\n            emit NewLiquidationThreshold(vToken, oldLiquidationThresholdMantissa, newLiquidationThresholdMantissa);\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets liquidationIncentive\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newLiquidationIncentiveMantissa New liquidationIncentive scaled by 1e18\\n     * @custom:event Emits NewLiquidationIncentive on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setLiquidationIncentive(uint256 newLiquidationIncentiveMantissa) external {\\n        require(newLiquidationIncentiveMantissa >= MANTISSA_ONE, \\\"liquidation incentive should be greater than 1e18\\\");\\n\\n        _checkAccessAllowed(\\\"setLiquidationIncentive(uint256)\\\");\\n\\n        // Save current value for use in log\\n        uint256 oldLiquidationIncentiveMantissa = liquidationIncentiveMantissa;\\n\\n        // Set liquidation incentive to new incentive\\n        liquidationIncentiveMantissa = newLiquidationIncentiveMantissa;\\n\\n        // Emit event with old incentive, new incentive\\n        emit NewLiquidationIncentive(oldLiquidationIncentiveMantissa, newLiquidationIncentiveMantissa);\\n    }\\n\\n    /**\\n     * @notice Add the market to the markets mapping and set it as listed\\n     * @dev Only callable by the PoolRegistry\\n     * @param vToken The address of the market (token) to list\\n     * @custom:error MarketAlreadyListed is thrown if the market is already listed in this pool\\n     * @custom:access Only PoolRegistry\\n     */\\n    function supportMarket(VToken vToken) external {\\n        _checkSenderIs(poolRegistry);\\n\\n        if (markets[address(vToken)].isListed) {\\n            revert MarketAlreadyListed(address(vToken));\\n        }\\n\\n        require(vToken.isVToken(), \\\"Comptroller: Invalid vToken\\\"); // Sanity check to make sure its really a VToken\\n\\n        Market storage newMarket = markets[address(vToken)];\\n        newMarket.isListed = true;\\n        newMarket.collateralFactorMantissa = 0;\\n        newMarket.liquidationThresholdMantissa = 0;\\n\\n        _addMarket(address(vToken));\\n\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            rewardsDistributors[i].initializeMarket(address(vToken));\\n        }\\n\\n        emit MarketSupported(vToken);\\n    }\\n\\n    /**\\n     * @notice Set the given borrow caps for the given vToken markets. Borrowing that brings total borrows to or above borrow cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A borrow cap of type(uint256).max corresponds to unlimited borrowing.\\n     * @dev Borrow caps smaller than the current total borrows are accepted. This way, new borrows will not be allowed\\n            until the total borrows amount goes below the new borrow cap\\n     * @param vTokens The addresses of the markets (tokens) to change the borrow caps for\\n     * @param newBorrowCaps The new borrow cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited borrowing.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketBorrowCaps(VToken[] calldata vTokens, uint256[] calldata newBorrowCaps) external {\\n        _checkAccessAllowed(\\\"setMarketBorrowCaps(address[],uint256[])\\\");\\n\\n        uint256 numMarkets = vTokens.length;\\n        uint256 numBorrowCaps = newBorrowCaps.length;\\n\\n        require(numMarkets != 0 && numMarkets == numBorrowCaps, \\\"invalid input\\\");\\n\\n        _ensureMaxLoops(numMarkets);\\n\\n        for (uint256 i; i < numMarkets; ++i) {\\n            borrowCaps[address(vTokens[i])] = newBorrowCaps[i];\\n            emit NewBorrowCap(vTokens[i], newBorrowCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given supply caps for the given vToken markets. Supply that brings total Supply to or above supply cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A supply cap of type(uint256).max corresponds to unlimited supply.\\n     * @dev Supply caps smaller than the current total supplies are accepted. This way, new supplies will not be allowed\\n            until the total supplies amount goes below the new supply cap\\n     * @param vTokens The addresses of the markets (tokens) to change the supply caps for\\n     * @param newSupplyCaps The new supply cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited supply.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketSupplyCaps(VToken[] calldata vTokens, uint256[] calldata newSupplyCaps) external {\\n        _checkAccessAllowed(\\\"setMarketSupplyCaps(address[],uint256[])\\\");\\n        uint256 vTokensCount = vTokens.length;\\n\\n        require(vTokensCount != 0, \\\"invalid number of markets\\\");\\n        require(vTokensCount == newSupplyCaps.length, \\\"invalid number of markets\\\");\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            supplyCaps[address(vTokens[i])] = newSupplyCaps[i];\\n            emit NewSupplyCap(vTokens[i], newSupplyCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Pause/unpause specified actions\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param marketsList Markets to pause/unpause the actions on\\n     * @param actionsList List of action ids to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setActionsPaused(VToken[] calldata marketsList, Action[] calldata actionsList, bool paused) external {\\n        _checkAccessAllowed(\\\"setActionsPaused(address[],uint256[],bool)\\\");\\n\\n        uint256 marketsCount = marketsList.length;\\n        uint256 actionsCount = actionsList.length;\\n\\n        _ensureMaxLoops(marketsCount * actionsCount);\\n\\n        for (uint256 marketIdx; marketIdx < marketsCount; ++marketIdx) {\\n            for (uint256 actionIdx; actionIdx < actionsCount; ++actionIdx) {\\n                _setActionPaused(address(marketsList[marketIdx]), actionsList[actionIdx], paused);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given collateral threshold for non-batch liquidations. Regular liquidations\\n     *   will fail if the collateral amount is less than this threshold. Liquidators should use batch\\n     *   operations like liquidateAccount or healAccount.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newMinLiquidatableCollateral The new min liquidatable collateral (in USD).\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMinLiquidatableCollateral(uint256 newMinLiquidatableCollateral) external {\\n        _checkAccessAllowed(\\\"setMinLiquidatableCollateral(uint256)\\\");\\n\\n        uint256 oldMinLiquidatableCollateral = minLiquidatableCollateral;\\n        minLiquidatableCollateral = newMinLiquidatableCollateral;\\n        emit NewMinLiquidatableCollateral(oldMinLiquidatableCollateral, newMinLiquidatableCollateral);\\n    }\\n\\n    /**\\n     * @notice Add a new RewardsDistributor and initialize it with all markets. We can add several RewardsDistributor\\n     * contracts with the same rewardToken, and there could be overlaping among them considering the last reward slot (block or second)\\n     * @dev Only callable by the admin\\n     * @param _rewardsDistributor Address of the RewardDistributor contract to add\\n     * @custom:access Only Governance\\n     * @custom:event Emits NewRewardsDistributor with distributor address\\n     */\\n    function addRewardsDistributor(RewardsDistributor _rewardsDistributor) external onlyOwner {\\n        require(!rewardsDistributorExists[address(_rewardsDistributor)], \\\"already exists\\\");\\n\\n        uint256 rewardsDistributorsLen = rewardsDistributors.length;\\n        _ensureMaxLoops(rewardsDistributorsLen + 1);\\n\\n        rewardsDistributors.push(_rewardsDistributor);\\n        rewardsDistributorExists[address(_rewardsDistributor)] = true;\\n\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            _rewardsDistributor.initializeMarket(address(allMarkets[i]));\\n        }\\n\\n        emit NewRewardsDistributor(address(_rewardsDistributor), address(_rewardsDistributor.rewardToken()));\\n    }\\n\\n    /**\\n     * @notice Sets a new price oracle for the Comptroller\\n     * @dev Only callable by the admin\\n     * @param newOracle Address of the new price oracle to set\\n     * @custom:event Emits NewPriceOracle on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when the new oracle address is zero\\n     */\\n    function setPriceOracle(ResilientOracleInterface newOracle) external onlyOwner {\\n        ensureNonzeroAddress(address(newOracle));\\n\\n        ResilientOracleInterface oldOracle = oracle;\\n        oracle = newOracle;\\n        emit NewPriceOracle(oldOracle, newOracle);\\n    }\\n\\n    /**\\n     * @notice Set the for loop iteration limit to avoid DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Sets the prime token contract for the comptroller\\n     * @param _prime Address of the Prime contract\\n     */\\n    function setPrimeToken(IPrime _prime) external onlyOwner {\\n        ensureNonzeroAddress(address(_prime));\\n\\n        emit NewPrimeToken(prime, _prime);\\n        prime = _prime;\\n    }\\n\\n    /**\\n     * @notice Enables forced liquidations for a market. If forced liquidation is enabled,\\n     * borrows in the market may be liquidated regardless of the account liquidity\\n     * @param vTokenBorrowed Borrowed vToken\\n     * @param enable Whether to enable forced liquidations\\n     */\\n    function setForcedLiquidation(address vTokenBorrowed, bool enable) external {\\n        _checkAccessAllowed(\\\"setForcedLiquidation(address,bool)\\\");\\n        ensureNonzeroAddress(vTokenBorrowed);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(vTokenBorrowed);\\n        }\\n\\n        isForcedLiquidationEnabled[vTokenBorrowed] = enable;\\n        emit IsForcedLiquidationEnabledUpdated(vTokenBorrowed, enable);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to liquidation threshold requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of liquidation threshold requirements,\\n     * @return shortfall Account shortfall below liquidation threshold requirements\\n     */\\n    function getAccountLiquidity(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getLiquidationThreshold);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to collateral requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of collateral requirements,\\n     * @return shortfall Account shortfall below collateral requirements\\n     */\\n    function getBorrowingPower(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getCollateralFactor);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine what the account liquidity would be if the given amounts were redeemed/borrowed\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Hypothetical account liquidity in excess of collateral requirements,\\n     * @return shortfall Hypothetical account shortfall below collateral requirements\\n     */\\n    function getHypotheticalAccountLiquidity(\\n        address account,\\n        address vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            account,\\n            VToken(vTokenModify),\\n            redeemTokens,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Return all of the markets\\n     * @dev The automatic getter may be used to access an individual market.\\n     * @return markets The list of market addresses\\n     */\\n    function getAllMarkets() external view override returns (VToken[] memory) {\\n        return allMarkets;\\n    }\\n\\n    /**\\n     * @notice Check if a market is marked as listed (active)\\n     * @param vToken vToken Address for the market to check\\n     * @return listed True if listed otherwise false\\n     */\\n    function isMarketListed(VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].isListed;\\n    }\\n\\n    /*** Assets You Are In ***/\\n\\n    /**\\n     * @notice Returns whether the given account is entered in a given market\\n     * @param account The address of the account to check\\n     * @param vToken The vToken to check\\n     * @return True if the account is in the market specified, otherwise false.\\n     */\\n    function checkMembership(address account, VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].accountMembership[account];\\n    }\\n\\n    /**\\n     * @notice Calculate number of tokens of collateral asset to seize given an underlying amount\\n     * @dev Used in liquidation (called in vToken.liquidateBorrowFresh)\\n     * @param vTokenBorrowed The address of the borrowed vToken\\n     * @param vTokenCollateral The address of the collateral vToken\\n     * @param actualRepayAmount The amount of vTokenBorrowed underlying to convert into vTokenCollateral tokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return tokensToSeize Number of vTokenCollateral tokens to be seized in a liquidation\\n     * @custom:error PriceError if the oracle returns an invalid price\\n     */\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 actualRepayAmount\\n    ) external view override returns (uint256 error, uint256 tokensToSeize) {\\n        /* Read oracle prices for borrowed and collateral markets */\\n        uint256 priceBorrowedMantissa = _safeGetUnderlyingPrice(VToken(vTokenBorrowed));\\n        uint256 priceCollateralMantissa = _safeGetUnderlyingPrice(VToken(vTokenCollateral));\\n\\n        /*\\n         * Get the exchange rate and calculate the number of collateral tokens to seize:\\n         *  seizeAmount = actualRepayAmount * liquidationIncentive * priceBorrowed / priceCollateral\\n         *  seizeTokens = seizeAmount / exchangeRate\\n         *   = actualRepayAmount * (liquidationIncentive * priceBorrowed) / (priceCollateral * exchangeRate)\\n         */\\n        uint256 exchangeRateMantissa = VToken(vTokenCollateral).exchangeRateStored(); // Note: reverts on error\\n        uint256 seizeTokens;\\n        Exp memory numerator;\\n        Exp memory denominator;\\n        Exp memory ratio;\\n\\n        numerator = mul_(Exp({ mantissa: liquidationIncentiveMantissa }), Exp({ mantissa: priceBorrowedMantissa }));\\n        denominator = mul_(Exp({ mantissa: priceCollateralMantissa }), Exp({ mantissa: exchangeRateMantissa }));\\n        ratio = div_(numerator, denominator);\\n\\n        seizeTokens = mul_ScalarTruncate(ratio, actualRepayAmount);\\n\\n        return (NO_ERROR, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Returns reward speed given a vToken\\n     * @param vToken The vToken to get the reward speeds for\\n     * @return rewardSpeeds Array of total supply and borrow speeds and reward token for all reward distributors\\n     */\\n    function getRewardsByMarket(address vToken) external view returns (RewardSpeeds[] memory rewardSpeeds) {\\n        uint256 rewardsDistributorsLength = rewardsDistributors.length;\\n        rewardSpeeds = new RewardSpeeds[](rewardsDistributorsLength);\\n        for (uint256 i; i < rewardsDistributorsLength; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            address rewardToken = address(rewardsDistributor.rewardToken());\\n            rewardSpeeds[i] = RewardSpeeds({\\n                rewardToken: rewardToken,\\n                supplySpeed: rewardsDistributor.rewardTokenSupplySpeeds(vToken),\\n                borrowSpeed: rewardsDistributor.rewardTokenBorrowSpeeds(vToken)\\n            });\\n        }\\n        return rewardSpeeds;\\n    }\\n\\n    /**\\n     * @notice Return all reward distributors for this pool\\n     * @return Array of RewardDistributor addresses\\n     */\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory) {\\n        return rewardsDistributors;\\n    }\\n\\n    /**\\n     * @notice A marker method that returns true for a valid Comptroller contract\\n     * @return Always true\\n     */\\n    function isComptroller() external pure override returns (bool) {\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Update the prices of all the tokens associated with the provided account\\n     * @param account Address of the account to get associated tokens with\\n     */\\n    function updatePrices(address account) public {\\n        VToken[] memory vTokens = getAssetsIn(account);\\n        uint256 vTokensCount = vTokens.length;\\n\\n        ResilientOracleInterface oracle_ = oracle;\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            oracle_.updatePrice(address(vTokens[i]));\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if a certain action is paused on a market\\n     * @param market vToken address\\n     * @param action Action to check\\n     * @return paused True if the action is paused otherwise false\\n     */\\n    function actionPaused(address market, Action action) public view returns (bool) {\\n        return _actionPaused[market][action];\\n    }\\n\\n    /**\\n     * @notice Returns the assets an account has entered\\n     * @param account The address of the account to pull assets for\\n     * @return A list with the assets the account has entered\\n     */\\n    function getAssetsIn(address account) public view returns (VToken[] memory) {\\n        uint256 len;\\n        VToken[] memory _accountAssets = accountAssets[account];\\n        uint256 _accountAssetsLength = _accountAssets.length;\\n\\n        VToken[] memory assetsIn = new VToken[](_accountAssetsLength);\\n\\n        for (uint256 i; i < _accountAssetsLength; ++i) {\\n            Market storage market = markets[address(_accountAssets[i])];\\n            if (market.isListed) {\\n                assetsIn[len] = _accountAssets[i];\\n                ++len;\\n            }\\n        }\\n\\n        assembly {\\n            mstore(assetsIn, len)\\n        }\\n\\n        return assetsIn;\\n    }\\n\\n    /**\\n     * @notice Add the market to the borrower's \\\"assets in\\\" for liquidity calculations\\n     * @param vToken The market to enter\\n     * @param borrower The address of the account to modify\\n     */\\n    function _addToMarket(VToken vToken, address borrower) internal {\\n        _checkActionPauseState(address(vToken), Action.ENTER_MARKET);\\n        Market storage marketToJoin = markets[address(vToken)];\\n\\n        if (!marketToJoin.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (marketToJoin.accountMembership[borrower]) {\\n            // already joined\\n            return;\\n        }\\n\\n        // survived the gauntlet, add to list\\n        // NOTE: we store these somewhat redundantly as a significant optimization\\n        //  this avoids having to iterate through the list for the most common use cases\\n        //  that is, only when we need to perform liquidity checks\\n        //  and not whenever we want to check if an account is in a particular market\\n        marketToJoin.accountMembership[borrower] = true;\\n        accountAssets[borrower].push(vToken);\\n\\n        emit MarketEntered(vToken, borrower);\\n    }\\n\\n    /**\\n     * @notice Internal function to validate that a market hasn't already been added\\n     * and if it hasn't adds it\\n     * @param vToken The market to support\\n     */\\n    function _addMarket(address vToken) internal {\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            if (allMarkets[i] == VToken(vToken)) {\\n                revert MarketAlreadyListed(vToken);\\n            }\\n        }\\n        allMarkets.push(VToken(vToken));\\n        marketsCount = allMarkets.length;\\n        _ensureMaxLoops(marketsCount);\\n    }\\n\\n    /**\\n     * @dev Pause/unpause an action on a market\\n     * @param market Market to pause/unpause the action on\\n     * @param action Action id to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     */\\n    function _setActionPaused(address market, Action action, bool paused) internal {\\n        require(markets[market].isListed, \\\"cannot pause a market that is not listed\\\");\\n        _actionPaused[market][action] = paused;\\n        emit ActionPausedMarket(VToken(market), action, paused);\\n    }\\n\\n    /**\\n     * @dev Internal function to check that vTokens can be safely redeemed for the underlying asset.\\n     * @param vToken Address of the vTokens to redeem\\n     * @param redeemer Account redeeming the tokens\\n     * @param redeemTokens The number of tokens to redeem\\n     */\\n    function _checkRedeemAllowed(address vToken, address redeemer, uint256 redeemTokens) internal {\\n        Market storage market = markets[vToken];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        /* If the redeemer is not 'in' the market, then we can bypass the liquidity check */\\n        if (!market.accountMembership[redeemer]) {\\n            return;\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(redeemer);\\n\\n        /* Otherwise, perform a hypothetical liquidity check to guard against shortfall */\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            redeemer,\\n            VToken(vToken),\\n            redeemTokens,\\n            0,\\n            _getCollateralFactor\\n        );\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n    }\\n\\n    /**\\n     * @notice Get the total collateral, weighted collateral, borrow balance, liquidity, shortfall\\n     * @param account The account to get the snapshot for\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n     *  liquidation threshold. Accepts the address of the vToken and returns the weight as Exp.\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getCurrentLiquiditySnapshot(\\n        address account,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        return _getHypotheticalLiquiditySnapshot(account, VToken(address(0)), 0, 0, weight);\\n    }\\n\\n    /**\\n     * @notice Determine what the supply/borrow balances would be if the given amounts were redeemed/borrowed\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n         liquidation threshold. Accepts the address of the VToken and returns the weight\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getHypotheticalLiquiditySnapshot(\\n        address account,\\n        VToken vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        // For each asset the account is in\\n        VToken[] memory assets = getAssetsIn(account);\\n        uint256 assetsCount = assets.length;\\n\\n        for (uint256 i; i < assetsCount; ++i) {\\n            VToken asset = assets[i];\\n\\n            // Read the balances and exchange rate from the vToken\\n            (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) = _safeGetAccountSnapshot(\\n                asset,\\n                account\\n            );\\n\\n            // Get the normalized price of the asset\\n            Exp memory oraclePrice = Exp({ mantissa: _safeGetUnderlyingPrice(asset) });\\n\\n            // Pre-compute conversion factors from vTokens -> usd\\n            Exp memory vTokenPrice = mul_(Exp({ mantissa: exchangeRateMantissa }), oraclePrice);\\n            Exp memory weightedVTokenPrice = mul_(weight(asset), vTokenPrice);\\n\\n            // weightedCollateral += weightedVTokenPrice * vTokenBalance\\n            snapshot.weightedCollateral = mul_ScalarTruncateAddUInt(\\n                weightedVTokenPrice,\\n                vTokenBalance,\\n                snapshot.weightedCollateral\\n            );\\n\\n            // totalCollateral += vTokenPrice * vTokenBalance\\n            snapshot.totalCollateral = mul_ScalarTruncateAddUInt(vTokenPrice, vTokenBalance, snapshot.totalCollateral);\\n\\n            // borrows += oraclePrice * borrowBalance\\n            snapshot.borrows = mul_ScalarTruncateAddUInt(oraclePrice, borrowBalance, snapshot.borrows);\\n\\n            // Calculate effects of interacting with vTokenModify\\n            if (asset == vTokenModify) {\\n                // redeem effect\\n                // effects += tokensToDenom * redeemTokens\\n                snapshot.effects = mul_ScalarTruncateAddUInt(weightedVTokenPrice, redeemTokens, snapshot.effects);\\n\\n                // borrow effect\\n                // effects += oraclePrice * borrowAmount\\n                snapshot.effects = mul_ScalarTruncateAddUInt(oraclePrice, borrowAmount, snapshot.effects);\\n            }\\n        }\\n\\n        uint256 borrowPlusEffects = snapshot.borrows + snapshot.effects;\\n        // These are safe, as the underflow condition is checked first\\n        unchecked {\\n            if (snapshot.weightedCollateral > borrowPlusEffects) {\\n                snapshot.liquidity = snapshot.weightedCollateral - borrowPlusEffects;\\n                snapshot.shortfall = 0;\\n            } else {\\n                snapshot.liquidity = 0;\\n                snapshot.shortfall = borrowPlusEffects - snapshot.weightedCollateral;\\n            }\\n        }\\n\\n        return snapshot;\\n    }\\n\\n    /**\\n     * @dev Retrieves price from oracle for an asset and checks it is nonzero\\n     * @param asset Address for asset to query price\\n     * @return Underlying price\\n     */\\n    function _safeGetUnderlyingPrice(VToken asset) internal view returns (uint256) {\\n        uint256 oraclePriceMantissa = oracle.getUnderlyingPrice(address(asset));\\n        if (oraclePriceMantissa == 0) {\\n            revert PriceError(address(asset));\\n        }\\n        return oraclePriceMantissa;\\n    }\\n\\n    /**\\n     * @dev Return collateral factor for a market\\n     * @param asset Address for asset\\n     * @return Collateral factor as exponential\\n     */\\n    function _getCollateralFactor(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].collateralFactorMantissa });\\n    }\\n\\n    /**\\n     * @dev Retrieves liquidation threshold for a market as an exponential\\n     * @param asset Address for asset to liquidation threshold\\n     * @return Liquidation threshold as exponential\\n     */\\n    function _getLiquidationThreshold(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].liquidationThresholdMantissa });\\n    }\\n\\n    /**\\n     * @dev Returns supply and borrow balances of user in vToken, reverts on failure\\n     * @param vToken Market to query\\n     * @param user Account address\\n     * @return vTokenBalance Balance of vTokens, the same as vToken.balanceOf(user)\\n     * @return borrowBalance Borrowed amount, including the interest\\n     * @return exchangeRateMantissa Stored exchange rate\\n     */\\n    function _safeGetAccountSnapshot(\\n        VToken vToken,\\n        address user\\n    ) internal view returns (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) {\\n        uint256 err;\\n        (err, vTokenBalance, borrowBalance, exchangeRateMantissa) = vToken.getAccountSnapshot(user);\\n        if (err != 0) {\\n            revert SnapshotError(address(vToken), user);\\n        }\\n        return (vTokenBalance, borrowBalance, exchangeRateMantissa);\\n    }\\n\\n    /// @notice Reverts if the call is not from expectedSender\\n    /// @param expectedSender Expected transaction sender\\n    function _checkSenderIs(address expectedSender) internal view {\\n        if (msg.sender != expectedSender) {\\n            revert UnexpectedSender(expectedSender, msg.sender);\\n        }\\n    }\\n\\n    /// @notice Reverts if a certain action is paused on a market\\n    /// @param market Market to check\\n    /// @param action Action to check\\n    function _checkActionPauseState(address market, Action action) private view {\\n        if (actionPaused(market, action)) {\\n            revert ActionPaused(market, action);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x7c6e1c6264e4681f82a9ac1bcd9155197a930033291ee5561ad97a56006f5e9c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\n\\nenum Action {\\n    MINT,\\n    REDEEM,\\n    BORROW,\\n    REPAY,\\n    SEIZE,\\n    LIQUIDATE,\\n    TRANSFER,\\n    ENTER_MARKET,\\n    EXIT_MARKET\\n}\\n\\n/**\\n * @title ComptrollerInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract.\\n */\\ninterface ComptrollerInterface {\\n    /*** Assets You Are In ***/\\n\\n    function enterMarkets(address[] calldata vTokens) external returns (uint256[] memory);\\n\\n    function exitMarket(address vToken) external returns (uint256);\\n\\n    /*** Policy Hooks ***/\\n\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external;\\n\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external;\\n\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external;\\n\\n    function preRepayHook(address vToken, address borrower) external;\\n\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external;\\n\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower\\n    ) external;\\n\\n    function borrowVerify(address vToken, address borrower, uint borrowAmount) external;\\n\\n    function mintVerify(address vToken, address minter, uint mintAmount, uint mintTokens) external;\\n\\n    function redeemVerify(address vToken, address redeemer, uint redeemAmount, uint redeemTokens) external;\\n\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer,\\n        address borrower,\\n        uint repayAmount,\\n        uint borrowerIndex\\n    ) external;\\n\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address liquidator,\\n        address borrower,\\n        uint repayAmount,\\n        uint seizeTokens\\n    ) external;\\n\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower,\\n        uint seizeTokens\\n    ) external;\\n\\n    function transferVerify(address vToken, address src, address dst, uint transferTokens) external;\\n\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external;\\n\\n    function isComptroller() external view returns (bool);\\n\\n    /*** Liquidity/Liquidation Calculations ***/\\n\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 repayAmount\\n    ) external view returns (uint256, uint256);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function actionPaused(address market, Action action) external view returns (bool);\\n}\\n\\n/**\\n * @title ComptrollerViewInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract, including only some util view functions.\\n */\\ninterface ComptrollerViewInterface {\\n    function markets(address) external view returns (bool, uint256);\\n\\n    function oracle() external view returns (ResilientOracleInterface);\\n\\n    function getAssetsIn(address) external view returns (VToken[] memory);\\n\\n    function closeFactorMantissa() external view returns (uint256);\\n\\n    function liquidationIncentiveMantissa() external view returns (uint256);\\n\\n    function minLiquidatableCollateral() external view returns (uint256);\\n\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function borrowCaps(address) external view returns (uint256);\\n\\n    function supplyCaps(address) external view returns (uint256);\\n\\n    function approvedDelegates(address user, address delegate) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xcbf7f9977472650c61345b7cbde23e81f626e1f8863bab4c6ce3dacfc7604919\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\nimport { Action } from \\\"./ComptrollerInterface.sol\\\";\\n\\n/**\\n * @title ComptrollerStorage\\n * @author Venus\\n * @notice Storage layout for the `Comptroller` contract.\\n */\\ncontract ComptrollerStorage {\\n    struct LiquidationOrder {\\n        VToken vTokenCollateral;\\n        VToken vTokenBorrowed;\\n        uint256 repayAmount;\\n    }\\n\\n    struct AccountLiquiditySnapshot {\\n        uint256 totalCollateral;\\n        uint256 weightedCollateral;\\n        uint256 borrows;\\n        uint256 effects;\\n        uint256 liquidity;\\n        uint256 shortfall;\\n    }\\n\\n    struct RewardSpeeds {\\n        address rewardToken;\\n        uint256 supplySpeed;\\n        uint256 borrowSpeed;\\n    }\\n\\n    struct Market {\\n        // Whether or not this market is listed\\n        bool isListed;\\n        //  Multiplier representing the most one can borrow against their collateral in this market.\\n        //  For instance, 0.9 to allow borrowing 90% of collateral value.\\n        //  Must be between 0 and 1, and stored as a mantissa.\\n        uint256 collateralFactorMantissa;\\n        //  Multiplier representing the collateralization after which the borrow is eligible\\n        //  for liquidation. For instance, 0.8 liquidate when the borrow is 80% of collateral\\n        //  value. Must be between 0 and collateral factor, stored as a mantissa.\\n        uint256 liquidationThresholdMantissa;\\n        // Per-market mapping of \\\"accounts in this asset\\\"\\n        mapping(address => bool) accountMembership;\\n    }\\n\\n    /**\\n     * @notice Oracle which gives the price of any given asset\\n     */\\n    ResilientOracleInterface public oracle;\\n\\n    /**\\n     * @notice Multiplier used to calculate the maximum repayAmount when liquidating a borrow\\n     */\\n    uint256 public closeFactorMantissa;\\n\\n    /**\\n     * @notice Multiplier representing the discount on collateral that a liquidator receives\\n     */\\n    uint256 public liquidationIncentiveMantissa;\\n\\n    /**\\n     * @notice Per-account mapping of \\\"assets you are in\\\"\\n     */\\n    mapping(address => VToken[]) public accountAssets;\\n\\n    /**\\n     * @notice Official mapping of vTokens -> Market metadata\\n     * @dev Used e.g. to determine if a market is supported\\n     */\\n    mapping(address => Market) public markets;\\n\\n    /// @notice A list of all markets\\n    VToken[] public allMarkets;\\n\\n    /// @notice Borrow caps enforced by borrowAllowed for each vToken address. Defaults to zero which restricts borrowing.\\n    mapping(address => uint256) public borrowCaps;\\n\\n    /// @notice Minimal collateral required for regular (non-batch) liquidations\\n    uint256 public minLiquidatableCollateral;\\n\\n    /// @notice Supply caps enforced by mintAllowed for each vToken address. Defaults to zero which corresponds to minting not allowed\\n    mapping(address => uint256) public supplyCaps;\\n\\n    /// @notice True if a certain action is paused on a certain market\\n    mapping(address => mapping(Action => bool)) internal _actionPaused;\\n\\n    // List of Reward Distributors added\\n    RewardsDistributor[] internal rewardsDistributors;\\n\\n    // Used to check if rewards distributor is added\\n    mapping(address => bool) internal rewardsDistributorExists;\\n\\n    /// @notice Flag indicating whether forced liquidation enabled for a market\\n    mapping(address => bool) public isForcedLiquidationEnabled;\\n\\n    uint256 internal constant NO_ERROR = 0;\\n\\n    // closeFactorMantissa must be strictly greater than this value\\n    uint256 internal constant MIN_CLOSE_FACTOR_MANTISSA = 0.05e18; // 0.05\\n\\n    // closeFactorMantissa must not exceed this value\\n    uint256 internal constant MAX_CLOSE_FACTOR_MANTISSA = 0.9e18; // 0.9\\n\\n    // No collateralFactorMantissa may exceed this value\\n    uint256 internal constant MAX_COLLATERAL_FACTOR_MANTISSA = 0.95e18; // 0.95\\n\\n    /// Prime token address\\n    IPrime public prime;\\n\\n    /// @notice Whether the delegate is allowed to borrow or redeem on behalf of the user\\n    //mapping(address user => mapping (address delegate => bool approved)) public approvedDelegates;\\n    mapping(address => mapping(address => bool)) public approvedDelegates;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4df44cb65ac152bac2be4b4545430e703005a74a55b72e144100b16421bd8bfd\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title TokenErrorReporter\\n * @author Venus\\n * @notice Errors that can be thrown by the `VToken` contract.\\n */\\ncontract TokenErrorReporter {\\n    uint256 public constant NO_ERROR = 0; // support legacy return codes\\n\\n    error TransferNotAllowed();\\n\\n    error MintFreshnessCheck();\\n\\n    error RedeemFreshnessCheck();\\n    error RedeemTransferOutNotPossible();\\n\\n    error BorrowFreshnessCheck();\\n    error BorrowCashNotAvailable();\\n    error DelegateNotApproved();\\n\\n    error RepayBorrowFreshnessCheck();\\n\\n    error HealBorrowUnauthorized();\\n    error ForceLiquidateBorrowUnauthorized();\\n\\n    error LiquidateFreshnessCheck();\\n    error LiquidateCollateralFreshnessCheck();\\n    error LiquidateAccrueCollateralInterestFailed(uint256 errorCode);\\n    error LiquidateLiquidatorIsBorrower();\\n    error LiquidateCloseAmountIsZero();\\n    error LiquidateCloseAmountIsUintMax();\\n\\n    error LiquidateSeizeLiquidatorIsBorrower();\\n\\n    error ProtocolSeizeShareTooBig();\\n\\n    error SetReserveFactorFreshCheck();\\n    error SetReserveFactorBoundsCheck();\\n\\n    error AddReservesFactorFreshCheck(uint256 actualAddAmount);\\n\\n    error ReduceReservesFreshCheck();\\n    error ReduceReservesCashNotAvailable();\\n    error ReduceReservesCashValidation();\\n\\n    error SetInterestRateModelFreshCheck();\\n}\\n\",\"keccak256\":\"0x7a7ced1caaac2d9242659ebd50b99f308c725ce958ac9e11f7ada404b1d97a7b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { EXP_SCALE as EXP_SCALE_, MANTISSA_ONE as MANTISSA_ONE_ } from \\\"./lib/constants.sol\\\";\\n\\n/**\\n * @title Exponential module for storing fixed-precision decimals\\n * @author Compound\\n * @notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.\\n *         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:\\n *         `Exp({mantissa: 5100000000000000000})`.\\n */\\ncontract ExponentialNoError {\\n    struct Exp {\\n        uint256 mantissa;\\n    }\\n\\n    struct Double {\\n        uint256 mantissa;\\n    }\\n\\n    uint256 internal constant EXP_SCALE = EXP_SCALE_;\\n    uint256 internal constant DOUBLE_SCALE = 1e36;\\n    uint256 internal constant HALF_EXP_SCALE = EXP_SCALE / 2;\\n    uint256 internal constant MANTISSA_ONE = MANTISSA_ONE_;\\n\\n    /**\\n     * @dev Truncates the given exp to a whole number value.\\n     *      For example, truncate(Exp{mantissa: 15 * EXP_SCALE}) = 15\\n     */\\n    function truncate(Exp memory exp) internal pure returns (uint256) {\\n        // Note: We are not using careful math here as we're performing a division that cannot fail\\n        return exp.mantissa / EXP_SCALE;\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, then truncate to return an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncate(Exp memory a, uint256 scalar) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return truncate(product);\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncateAddUInt(Exp memory a, uint256 scalar, uint256 addend) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return add_(truncate(product), addend);\\n    }\\n\\n    /**\\n     * @dev Checks if first Exp is less than second Exp.\\n     */\\n    function lessThanExp(Exp memory left, Exp memory right) internal pure returns (bool) {\\n        return left.mantissa < right.mantissa;\\n    }\\n\\n    function safe224(uint256 n, string memory errorMessage) internal pure returns (uint224) {\\n        require(n <= type(uint224).max, errorMessage);\\n        return uint224(n);\\n    }\\n\\n    function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) {\\n        require(n <= type(uint32).max, errorMessage);\\n        return uint32(n);\\n    }\\n\\n    function add_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a + b;\\n    }\\n\\n    function sub_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a - b;\\n    }\\n\\n    function mul_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b.mantissa) / EXP_SCALE });\\n    }\\n\\n    function mul_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / EXP_SCALE;\\n    }\\n\\n    function mul_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b.mantissa) / DOUBLE_SCALE });\\n    }\\n\\n    function mul_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / DOUBLE_SCALE;\\n    }\\n\\n    function mul_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a * b;\\n    }\\n\\n    function div_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(mul_(a.mantissa, EXP_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, EXP_SCALE), b.mantissa);\\n    }\\n\\n    function div_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a.mantissa, DOUBLE_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, DOUBLE_SCALE), b.mantissa);\\n    }\\n\\n    function div_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a / b;\\n    }\\n\\n    function fraction(uint256 a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a, DOUBLE_SCALE), b) });\\n    }\\n}\\n\",\"keccak256\":\"0x8afbe8a24fe3539c124e718681ed3dcebd24c40dd53095786c0155998213b9b0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title Compound's InterestRateModel Interface\\n * @author Compound\\n */\\nabstract contract InterestRateModel {\\n    /**\\n     * @notice Calculates the current borrow interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getBorrowRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Calculates the current supply interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param reserveFactorMantissa The current reserve factor the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getSupplyRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 reserveFactorMantissa,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is an InterestRateModel contract (for inspection)\\n     * @return Always true\\n     */\\n    function isInterestRateModel() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0xc4fda1ab75ebe4b187b707c4f10c58780f343cf343c537f641dc75d3cd28ab51\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title MaxLoopsLimitHelper\\n * @author Venus\\n * @notice Abstract contract used to avoid collection with too many items that would generate gas errors and DoS.\\n */\\nabstract contract MaxLoopsLimitHelper {\\n    // Limit for the loops to avoid the DOS\\n    uint256 public maxLoopsLimit;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when max loops limit is set\\n    event MaxLoopsLimitUpdated(uint256 oldMaxLoopsLimit, uint256 newmaxLoopsLimit);\\n\\n    /// @notice Thrown an error on maxLoopsLimit exceeds for any loop\\n    error MaxLoopsLimitExceeded(uint256 loopsLimit, uint256 requiredLoops);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function _setMaxLoopsLimit(uint256 limit) internal {\\n        require(limit > maxLoopsLimit, \\\"Comptroller: Invalid maxLoopsLimit\\\");\\n\\n        uint256 oldMaxLoopsLimit = maxLoopsLimit;\\n        maxLoopsLimit = limit;\\n\\n        emit MaxLoopsLimitUpdated(oldMaxLoopsLimit, limit);\\n    }\\n\\n    /**\\n     * @notice Compare the maxLoopsLimit with number of the times loop iterate\\n     * @param len Length of the loops iterate\\n     * @custom:error MaxLoopsLimitExceeded error is thrown when loops length exceeds maxLoopsLimit\\n     */\\n    function _ensureMaxLoops(uint256 len) internal view {\\n        if (len > maxLoopsLimit) {\\n            revert MaxLoopsLimitExceeded(maxLoopsLimit, len);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x4c25e30635485d162177effa384eee51768b0141a567a0da16ff6ad673274166\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\n\\nimport { ExponentialNoError } from \\\"../ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"../VToken.sol\\\";\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"../MaxLoopsLimitHelper.sol\\\";\\nimport { RewardsDistributorStorage } from \\\"./RewardsDistributorStorage.sol\\\";\\n\\n/**\\n * @title `RewardsDistributor`\\n * @author Venus\\n * @notice Contract used to configure, track and distribute rewards to users based on their actions (borrows and supplies) in the protocol.\\n * Users can receive additional rewards through a `RewardsDistributor`. Each `RewardsDistributor` proxy is initialized with a specific reward\\n * token and `Comptroller`, which can then distribute the reward token to users that supply or borrow in the associated pool.\\n * Authorized users can set the reward token borrow and supply speeds for each market in the pool. This sets a fixed amount of reward\\n * token to be released each slot (block or second) for borrowers and suppliers, which is distributed based on a user\\u2019s percentage of the borrows or supplies\\n * respectively. The owner can also set up reward distributions to contributor addresses (distinct from suppliers and borrowers) by setting\\n * their contributor reward token speed, which similarly allocates a fixed amount of reward token per slot (block or second).\\n *\\n * The owner has the ability to transfer any amount of reward tokens held by the contract to any other address. Rewards are not distributed\\n * automatically and must be claimed by a user calling `claimRewardToken()`. Users should be aware that it is up to the owner and other centralized\\n * entities to ensure that the `RewardsDistributor` holds enough tokens to distribute the accumulated rewards of users and contributors.\\n */\\ncontract RewardsDistributor is\\n    ExponentialNoError,\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    MaxLoopsLimitHelper,\\n    RewardsDistributorStorage,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    /// @notice The initial REWARD TOKEN index for a market\\n    uint224 public constant INITIAL_INDEX = 1e36;\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a supplier\\n    event DistributedSupplierRewardToken(\\n        VToken indexed vToken,\\n        address indexed supplier,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenSupplyIndex\\n    );\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a borrower\\n    event DistributedBorrowerRewardToken(\\n        VToken indexed vToken,\\n        address indexed borrower,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenBorrowIndex\\n    );\\n\\n    /// @notice Emitted when a new supply-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenSupplySpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when a new borrow-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenBorrowSpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when REWARD TOKEN is granted by admin\\n    event RewardTokenGranted(address indexed recipient, uint256 amount);\\n\\n    /// @notice Emitted when a new REWARD TOKEN speed is set for a contributor\\n    event ContributorRewardTokenSpeedUpdated(address indexed contributor, uint256 newSpeed);\\n\\n    /// @notice Emitted when a market is initialized\\n    event MarketInitialized(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token supply index is updated\\n    event RewardTokenSupplyIndexUpdated(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token borrow index is updated\\n    event RewardTokenBorrowIndexUpdated(address indexed vToken, Exp marketBorrowIndex);\\n\\n    /// @notice Emitted when a reward for contributor is updated\\n    event ContributorRewardsUpdated(address indexed contributor, uint256 rewardAccrued);\\n\\n    /// @notice Emitted when a reward token last rewarding block for supply is updated\\n    event SupplyLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding block for borrow is updated\\n    event BorrowLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for supply is updated\\n    event SupplyLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for borrow is updated\\n    event BorrowLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    modifier onlyComptroller() {\\n        require(address(comptroller) == msg.sender, \\\"Only comptroller can call this function\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice RewardsDistributor initializer\\n     * @dev Initializes the deployer to owner\\n     * @param comptroller_ Comptroller to attach the reward distributor to\\n     * @param rewardToken_ Reward token to distribute\\n     * @param loopsLimit_ Maximum number of iterations for the loops in this contract\\n     * @param accessControlManager_ AccessControlManager contract address\\n     */\\n    function initialize(\\n        Comptroller comptroller_,\\n        IERC20Upgradeable rewardToken_,\\n        uint256 loopsLimit_,\\n        address accessControlManager_\\n    ) external initializer {\\n        comptroller = comptroller_;\\n        rewardToken = rewardToken_;\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n\\n        _setMaxLoopsLimit(loopsLimit_);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken\\n     * @param vToken The address of the vToken to be initialized\\n     * @custom:event MarketInitialized emits on success\\n     * @custom:access Only Comptroller\\n     */\\n    function initializeMarket(address vToken) external onlyComptroller {\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        isTimeBased\\n            ? _initializeMarketTimestampBased(vToken, blockNumberOrTimestamp)\\n            : _initializeMarketBlockBased(vToken, safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\"));\\n\\n        emit MarketInitialized(vToken);\\n    }\\n\\n    /*** Reward Token Distribution ***/\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them\\n     *         Borrowers will begin to accrue after the first interaction with the protocol.\\n     * @dev This function should only be called when the user has a borrow position in the market\\n     *      (e.g. Comptroller.preBorrowHook, and Comptroller.preRepayHook)\\n     *      We avoid an external call to check if they are in the market to save gas because this function is called in many places\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function distributeBorrowerRewardToken(\\n        address vToken,\\n        address borrower,\\n        Exp memory marketBorrowIndex\\n    ) external onlyComptroller {\\n        _distributeBorrowerRewardToken(vToken, borrower, marketBorrowIndex);\\n    }\\n\\n    function updateRewardTokenSupplyIndex(address vToken) external onlyComptroller {\\n        _updateRewardTokenSupplyIndex(vToken);\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the recipient\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all\\n     * @param recipient The address of the recipient to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     */\\n    function grantRewardToken(address recipient, uint256 amount) external onlyOwner {\\n        uint256 amountLeft = _grantRewardToken(recipient, amount);\\n        require(amountLeft == 0, \\\"insufficient rewardToken for grant\\\");\\n        emit RewardTokenGranted(recipient, amount);\\n    }\\n\\n    function updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) external onlyComptroller {\\n        _updateRewardTokenBorrowIndex(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN borrow and supply speeds for the specified markets\\n     * @param vTokens The markets whose REWARD TOKEN speed to update\\n     * @param supplySpeeds New supply-side REWARD TOKEN speed for the corresponding market\\n     * @param borrowSpeeds New borrow-side REWARD TOKEN speed for the corresponding market\\n     */\\n    function setRewardTokenSpeeds(\\n        VToken[] memory vTokens,\\n        uint256[] memory supplySpeeds,\\n        uint256[] memory borrowSpeeds\\n    ) external {\\n        _checkAccessAllowed(\\\"setRewardTokenSpeeds(address[],uint256[],uint256[])\\\");\\n        uint256 numTokens = vTokens.length;\\n        require(numTokens == supplySpeeds.length && numTokens == borrowSpeeds.length, \\\"invalid setRewardTokenSpeeds\\\");\\n\\n        for (uint256 i; i < numTokens; ++i) {\\n            _setRewardTokenSpeed(vTokens[i], supplySpeeds[i], borrowSpeeds[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for the specified markets, used when contract is block based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlocks New supply-side REWARD TOKEN last rewarding block for the corresponding market\\n     * @param borrowLastRewardingBlocks New borrow-side REWARD TOKEN last rewarding block for the corresponding market\\n     */\\n    function setLastRewardingBlocks(\\n        VToken[] calldata vTokens,\\n        uint32[] calldata supplyLastRewardingBlocks,\\n        uint32[] calldata borrowLastRewardingBlocks\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlocks(address[],uint32[],uint32[])\\\");\\n        require(!isTimeBased, \\\"Block-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlocks.length && numTokens == borrowLastRewardingBlocks.length,\\n            \\\"RewardsDistributor::setLastRewardingBlocks invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlock(vTokens[i], supplyLastRewardingBlocks[i], borrowLastRewardingBlocks[i]);\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block timestamp for the specified markets, used when contract is time based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlockTimestamps New supply-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     * @param borrowLastRewardingBlockTimestamps New borrow-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     */\\n    function setLastRewardingBlockTimestamps(\\n        VToken[] calldata vTokens,\\n        uint256[] calldata supplyLastRewardingBlockTimestamps,\\n        uint256[] calldata borrowLastRewardingBlockTimestamps\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])\\\");\\n        require(isTimeBased, \\\"Time-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlockTimestamps.length &&\\n                numTokens == borrowLastRewardingBlockTimestamps.length,\\n            \\\"RewardsDistributor::setLastRewardingBlockTimestamps invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlockTimestamp(\\n                vTokens[i],\\n                supplyLastRewardingBlockTimestamps[i],\\n                borrowLastRewardingBlockTimestamps[i]\\n            );\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single contributor\\n     * @param contributor The contributor whose REWARD TOKEN speed to update\\n     * @param rewardTokenSpeed New REWARD TOKEN speed for contributor\\n     */\\n    function setContributorRewardTokenSpeed(address contributor, uint256 rewardTokenSpeed) external onlyOwner {\\n        // note that REWARD TOKEN speed could be set to 0 to halt liquidity rewards for a contributor\\n        updateContributorRewards(contributor);\\n        if (rewardTokenSpeed == 0) {\\n            // release storage\\n            delete lastContributorBlock[contributor];\\n        } else {\\n            lastContributorBlock[contributor] = getBlockNumberOrTimestamp();\\n        }\\n        rewardTokenContributorSpeeds[contributor] = rewardTokenSpeed;\\n\\n        emit ContributorRewardTokenSpeedUpdated(contributor, rewardTokenSpeed);\\n    }\\n\\n    function distributeSupplierRewardToken(address vToken, address supplier) external onlyComptroller {\\n        _distributeSupplierRewardToken(vToken, supplier);\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in all markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     */\\n    function claimRewardToken(address holder) external {\\n        return claimRewardToken(holder, comptroller.getAllMarkets());\\n    }\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Calculate additional accrued REWARD TOKEN for a contributor since last accrual\\n     * @param contributor The address to calculate contributor rewards for\\n     */\\n    function updateContributorRewards(address contributor) public {\\n        uint256 rewardTokenSpeed = rewardTokenContributorSpeeds[contributor];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n        uint256 deltaBlocksOrTimestamp = sub_(blockNumberOrTimestamp, lastContributorBlock[contributor]);\\n        if (deltaBlocksOrTimestamp > 0 && rewardTokenSpeed > 0) {\\n            uint256 newAccrued = mul_(deltaBlocksOrTimestamp, rewardTokenSpeed);\\n            uint256 contributorAccrued = add_(rewardTokenAccrued[contributor], newAccrued);\\n\\n            rewardTokenAccrued[contributor] = contributorAccrued;\\n            lastContributorBlock[contributor] = blockNumberOrTimestamp;\\n\\n            emit ContributorRewardsUpdated(contributor, rewardTokenAccrued[contributor]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in the specified markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     * @param vTokens The list of markets to claim REWARD TOKEN in\\n     */\\n    function claimRewardToken(address holder, VToken[] memory vTokens) public {\\n        uint256 vTokensCount = vTokens.length;\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            VToken vToken = vTokens[i];\\n            require(comptroller.isMarketListed(vToken), \\\"market must be listed\\\");\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n            _distributeBorrowerRewardToken(address(vToken), holder, borrowIndex);\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n            _distributeSupplierRewardToken(address(vToken), holder);\\n        }\\n        rewardTokenAccrued[holder] = _grantRewardToken(holder, rewardTokenAccrued[holder]);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for a single market.\\n     * @param vToken market's whose reward token last rewarding block to be updated\\n     * @param supplyLastRewardingBlock New supply-side REWARD TOKEN last rewarding block for market\\n     * @param borrowLastRewardingBlock New borrow-side REWARD TOKEN last rewarding block for market\\n     */\\n    function _setLastRewardingBlock(\\n        VToken vToken,\\n        uint32 supplyLastRewardingBlock,\\n        uint32 borrowLastRewardingBlock\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockNumber = getBlockNumberOrTimestamp();\\n\\n        require(supplyLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n        require(borrowLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n\\n        uint32 currentSupplyLastRewardingBlock = rewardTokenSupplyState[address(vToken)].lastRewardingBlock;\\n        uint32 currentBorrowLastRewardingBlock = rewardTokenBorrowState[address(vToken)].lastRewardingBlock;\\n\\n        require(\\n            currentSupplyLastRewardingBlock == 0 || currentSupplyLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlock == 0 || currentBorrowLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlock != supplyLastRewardingBlock) {\\n            rewardTokenSupplyState[address(vToken)].lastRewardingBlock = supplyLastRewardingBlock;\\n            emit SupplyLastRewardingBlockUpdated(address(vToken), supplyLastRewardingBlock);\\n        }\\n\\n        if (currentBorrowLastRewardingBlock != borrowLastRewardingBlock) {\\n            rewardTokenBorrowState[address(vToken)].lastRewardingBlock = borrowLastRewardingBlock;\\n            emit BorrowLastRewardingBlockUpdated(address(vToken), borrowLastRewardingBlock);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding timestamp for a single market.\\n     * @param vToken market's whose reward token last rewarding timestamp to be updated\\n     * @param supplyLastRewardingBlockTimestamp New supply-side REWARD TOKEN last rewarding timestamp for market\\n     * @param borrowLastRewardingBlockTimestamp New borrow-side REWARD TOKEN last rewarding timestamp for market\\n     */\\n    function _setLastRewardingBlockTimestamp(\\n        VToken vToken,\\n        uint256 supplyLastRewardingBlockTimestamp,\\n        uint256 borrowLastRewardingBlockTimestamp\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockTimestamp = getBlockNumberOrTimestamp();\\n\\n        require(\\n            supplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n        require(\\n            borrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n\\n        uint256 currentSupplyLastRewardingBlockTimestamp = rewardTokenSupplyStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n        uint256 currentBorrowLastRewardingBlockTimestamp = rewardTokenBorrowStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n\\n        require(\\n            currentSupplyLastRewardingBlockTimestamp == 0 || currentSupplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlockTimestamp == 0 || currentBorrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlockTimestamp != supplyLastRewardingBlockTimestamp) {\\n            rewardTokenSupplyStateTimeBased[address(vToken)].lastRewardingTimestamp = supplyLastRewardingBlockTimestamp;\\n            emit SupplyLastRewardingBlockTimestampUpdated(address(vToken), supplyLastRewardingBlockTimestamp);\\n        }\\n\\n        if (currentBorrowLastRewardingBlockTimestamp != borrowLastRewardingBlockTimestamp) {\\n            rewardTokenBorrowStateTimeBased[address(vToken)].lastRewardingTimestamp = borrowLastRewardingBlockTimestamp;\\n            emit BorrowLastRewardingBlockTimestampUpdated(address(vToken), borrowLastRewardingBlockTimestamp);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single market.\\n     * @param vToken market's whose reward token rate to be updated\\n     * @param supplySpeed New supply-side REWARD TOKEN speed for market\\n     * @param borrowSpeed New borrow-side REWARD TOKEN speed for market\\n     */\\n    function _setRewardTokenSpeed(VToken vToken, uint256 supplySpeed, uint256 borrowSpeed) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        if (rewardTokenSupplySpeeds[address(vToken)] != supplySpeed) {\\n            // Supply speed updated so let's update supply state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n\\n            // Update speed and emit event\\n            rewardTokenSupplySpeeds[address(vToken)] = supplySpeed;\\n            emit RewardTokenSupplySpeedUpdated(vToken, supplySpeed);\\n        }\\n\\n        if (rewardTokenBorrowSpeeds[address(vToken)] != borrowSpeed) {\\n            // Borrow speed updated so let's update borrow state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n\\n            // Update speed and emit event\\n            rewardTokenBorrowSpeeds[address(vToken)] = borrowSpeed;\\n            emit RewardTokenBorrowSpeedUpdated(vToken, borrowSpeed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculate REWARD TOKEN accrued by a supplier and possibly transfer it to them.\\n     * @param vToken The market in which the supplier is interacting\\n     * @param supplier The address of the supplier to distribute REWARD TOKEN to\\n     */\\n    function _distributeSupplierRewardToken(address vToken, address supplier) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n        uint256 supplierIndex = rewardTokenSupplierIndex[vToken][supplier];\\n\\n        // Update supplier's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenSupplierIndex[vToken][supplier] = supplyIndex;\\n\\n        if (supplierIndex == 0 && supplyIndex >= INITIAL_INDEX) {\\n            // Covers the case where users supplied tokens before the market's supply state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when supplier rewards were first\\n            // set for the market.\\n            supplierIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per vToken accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(supplyIndex, supplierIndex) });\\n\\n        uint256 supplierTokens = VToken(vToken).balanceOf(supplier);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerVToken\\n        uint256 supplierDelta = mul_(supplierTokens, deltaIndex);\\n\\n        uint256 supplierAccrued = add_(rewardTokenAccrued[supplier], supplierDelta);\\n        rewardTokenAccrued[supplier] = supplierAccrued;\\n\\n        emit DistributedSupplierRewardToken(VToken(vToken), supplier, supplierDelta, supplierAccrued, supplyIndex);\\n    }\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them.\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function _distributeBorrowerRewardToken(address vToken, address borrower, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n        uint256 borrowerIndex = rewardTokenBorrowerIndex[vToken][borrower];\\n\\n        // Update borrowers's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenBorrowerIndex[vToken][borrower] = borrowIndex;\\n\\n        if (borrowerIndex == 0 && borrowIndex >= INITIAL_INDEX) {\\n            // Covers the case where users borrowed tokens before the market's borrow state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when borrower rewards were first\\n            // set for the market.\\n            borrowerIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per borrowed unit accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(borrowIndex, borrowerIndex) });\\n\\n        uint256 borrowerAmount = div_(VToken(vToken).borrowBalanceStored(borrower), marketBorrowIndex);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerBorrowedUnit\\n        if (borrowerAmount != 0) {\\n            uint256 borrowerDelta = mul_(borrowerAmount, deltaIndex);\\n\\n            uint256 borrowerAccrued = add_(rewardTokenAccrued[borrower], borrowerDelta);\\n            rewardTokenAccrued[borrower] = borrowerAccrued;\\n\\n            emit DistributedBorrowerRewardToken(VToken(vToken), borrower, borrowerDelta, borrowerAccrued, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the user.\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all.\\n     * @param user The address of the user to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     * @return The amount of REWARD TOKEN which was NOT transferred to the user\\n     */\\n    function _grantRewardToken(address user, uint256 amount) internal returns (uint256) {\\n        uint256 rewardTokenRemaining = rewardToken.balanceOf(address(this));\\n        if (amount > 0 && amount <= rewardTokenRemaining) {\\n            rewardToken.safeTransfer(user, amount);\\n            return 0;\\n        }\\n        return amount;\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the supply index\\n     * @param vToken The market whose supply index to update\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenSupplyIndex(address vToken) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplySpeed = rewardTokenSupplySpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? supplyStateTimeBased.lastRewardingTimestamp\\n            : uint256(supplyState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? supplyStateTimeBased.timestamp : uint256(supplyState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && supplySpeed > 0) {\\n            uint256 supplyTokens = VToken(vToken).totalSupply();\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, supplySpeed);\\n            Double memory ratio = supplyTokens > 0\\n                ? fraction(accruedSinceUpdate, supplyTokens)\\n                : Double({ mantissa: 0 });\\n            uint224 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: supplyIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                supplyStateTimeBased.index = index;\\n                supplyStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                supplyState.index = index;\\n                supplyState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            isTimeBased ? supplyStateTimeBased.timestamp = blockNumberOrTimestamp : supplyState.block = uint32(\\n                blockNumberOrTimestamp\\n            );\\n        }\\n\\n        emit RewardTokenSupplyIndexUpdated(vToken);\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the borrow index\\n     * @param vToken The market whose borrow index to update\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowSpeed = rewardTokenBorrowSpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? borrowStateTimeBased.lastRewardingTimestamp\\n            : uint256(borrowState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? borrowStateTimeBased.timestamp : uint256(borrowState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && borrowSpeed > 0) {\\n            uint256 borrowAmount = div_(VToken(vToken).totalBorrows(), marketBorrowIndex);\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, borrowSpeed);\\n            Double memory ratio = borrowAmount > 0\\n                ? fraction(accruedSinceUpdate, borrowAmount)\\n                : Double({ mantissa: 0 });\\n            uint224 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: borrowIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                borrowStateTimeBased.index = index;\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.index = index;\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            if (isTimeBased) {\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        }\\n\\n        emit RewardTokenBorrowIndexUpdated(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is block-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockNumber current block number\\n     */\\n    function _initializeMarketBlockBased(address vToken, uint32 blockNumber) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block numbers\\n         */\\n        supplyState.block = borrowState.block = blockNumber;\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is time-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockTimestamp current block timestamp\\n     */\\n    function _initializeMarketTimestampBased(address vToken, uint256 blockTimestamp) internal {\\n        TimeBasedRewardToken storage supplyState = rewardTokenSupplyStateTimeBased[vToken];\\n        TimeBasedRewardToken storage borrowState = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block timestamp\\n         */\\n        supplyState.timestamp = borrowState.timestamp = blockTimestamp;\\n    }\\n}\\n\",\"keccak256\":\"0x3cc824e59c923cfe25c4f1a875959b7e9410cde8e73cd405de13f301298c697f\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\n\\n/**\\n * @title RewardsDistributorStorage\\n * @author Venus\\n * @dev Storage for RewardsDistributor\\n */\\ncontract RewardsDistributorStorage {\\n    struct RewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block number the index was last updated at\\n        uint32 block;\\n        // The block number at which to stop rewards\\n        uint32 lastRewardingBlock;\\n    }\\n\\n    struct TimeBasedRewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block timestamp the index was last updated at\\n        uint256 timestamp;\\n        // The block timestamp at which to stop rewards\\n        uint256 lastRewardingTimestamp;\\n    }\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => RewardToken) public rewardTokenSupplyState;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each supplier as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenSupplierIndex;\\n\\n    /// @notice The REWARD TOKEN accrued but not yet transferred to each user\\n    mapping(address => uint256) public rewardTokenAccrued;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding borrow market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenBorrowSpeeds;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding supply market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenSupplySpeeds;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => RewardToken) public rewardTokenBorrowState;\\n\\n    /// @notice The portion of REWARD TOKEN that each contributor receives per slot (block or second)\\n    mapping(address => uint256) public rewardTokenContributorSpeeds;\\n\\n    /// @notice Last slot (block or second) at which a contributor's REWARD TOKEN rewards have been allocated\\n    mapping(address => uint256) public lastContributorBlock;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each borrower as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenBorrowerIndex;\\n\\n    Comptroller internal comptroller;\\n\\n    IERC20Upgradeable public rewardToken;\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenSupplyStateTimeBased;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenBorrowStateTimeBased;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[37] private __gap;\\n}\\n\",\"keccak256\":\"0x70e5015a78a2acf95277949c8b4796e10b9ac194130be006d5e5217e158070c0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VToken.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IProtocolShareReserve } from \\\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\\\";\\n\\nimport { VTokenInterface } from \\\"./VTokenInterfaces.sol\\\";\\nimport { ComptrollerInterface, ComptrollerViewInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { TokenErrorReporter } from \\\"./ErrorReporter.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title VToken\\n * @author Venus\\n * @notice Each asset that is supported by a pool is integrated through an instance of the `VToken` contract. As outlined in the protocol overview,\\n * each isolated pool creates its own `vToken` corresponding to an asset. Within a given pool, each included `vToken` is referred to as a market of\\n * the pool. The main actions a user regularly interacts with in a market are:\\n\\n- mint/redeem of vTokens;\\n- transfer of vTokens;\\n- borrow/repay a loan on an underlying asset;\\n- liquidate a borrow or liquidate/heal an account.\\n\\n * A user supplies the underlying asset to a pool by minting `vTokens`, where the corresponding `vToken` amount is determined by the `exchangeRate`.\\n * The `exchangeRate` will change over time, dependent on a number of factors, some of which accrue interest. Additionally, once users have minted\\n * `vToken` in a pool, they can borrow any asset in the isolated pool by using their `vToken` as collateral. In order to borrow an asset or use a `vToken`\\n * as collateral, the user must be entered into each corresponding market (else, the `vToken` will not be considered collateral for a borrow). Note that\\n * a user may borrow up to a portion of their collateral determined by the market\\u2019s collateral factor. However, if their borrowed amount exceeds an amount\\n * calculated using the market\\u2019s corresponding liquidation threshold, the borrow is eligible for liquidation. When a user repays a borrow, they must also\\n * pay off interest accrued on the borrow.\\n * \\n * The Venus protocol includes unique mechanisms for healing an account and liquidating an account. These actions are performed in the `Comptroller`\\n * and consider all borrows and collateral for which a given account is entered within a market. These functions may only be called on an account with a\\n * total collateral amount that is no larger than a universal `minLiquidatableCollateral` value, which is used for all markets within a `Comptroller`.\\n * Both functions settle all of an account\\u2019s borrows, but `healAccount()` may add `badDebt` to a vToken. For more detail, see the description of\\n * `healAccount()` and `liquidateAccount()` in the `Comptroller` summary section below.\\n */\\ncontract VToken is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    VTokenInterface,\\n    ExponentialNoError,\\n    TokenErrorReporter,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    uint256 internal constant DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA = 5e16; // 5%\\n\\n    // Maximum fraction of interest that can be set aside for reserves\\n    uint256 internal constant MAX_RESERVE_FACTOR_MANTISSA = 1e18;\\n\\n    // Maximum borrow rate that can ever be applied per slot(block or second)\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 internal immutable MAX_BORROW_RATE_MANTISSA;\\n\\n    /**\\n     * Reentrancy Guard **\\n     */\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     */\\n    modifier nonReentrant() {\\n        require(_notEntered, \\\"re-entered\\\");\\n        _notEntered = false;\\n        _;\\n        _notEntered = true; // get a gas-refund post-Istanbul\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @param maxBorrowRateMantissa_ The maximum value of borrowing rate mantissa\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(\\n        bool timeBased_,\\n        uint256 blocksPerYear_,\\n        uint256 maxBorrowRateMantissa_\\n    ) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        require(maxBorrowRateMantissa_ <= 1e18, \\\"Max borrow rate must be <= 1e18\\\");\\n\\n        MAX_BORROW_RATE_MANTISSA = maxBorrowRateMantissa_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice Construct a new money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     * @custom:error ZeroAddressNotAllowed is thrown when admin address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     */\\n    function initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) external initializer {\\n        ensureNonzeroAddress(admin_);\\n\\n        // Initialize the market\\n        _initialize(\\n            underlying_,\\n            comptroller_,\\n            interestRateModel_,\\n            initialExchangeRateMantissa_,\\n            name_,\\n            symbol_,\\n            decimals_,\\n            admin_,\\n            accessControlManager_,\\n            riskManagement,\\n            reserveFactorMantissa_\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `msg.sender` to `dst`\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transfer(address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `src` to `dst`\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transferFrom(address src, address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, src, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Approve `spender` to transfer up to `amount` from `src`\\n     * @dev This will overwrite the approval amount for `spender`\\n     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\\n     * @param spender The address of the account which may transfer tokens\\n     * @param amount The number of tokens that are approved (uint256.max means infinite)\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function approve(address spender, uint256 amount) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        transferAllowances[src][spender] = amount;\\n        emit Approval(src, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Increase approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param addedValue The number of additional tokens spender can transfer\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 newAllowance = transferAllowances[src][spender];\\n        newAllowance += addedValue;\\n        transferAllowances[src][spender] = newAllowance;\\n\\n        emit Approval(src, spender, newAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Decreases approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param subtractedValue The number of tokens to remove from total approval\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 currentAllowance = transferAllowances[src][spender];\\n        require(currentAllowance >= subtractedValue, \\\"decreased allowance below zero\\\");\\n        unchecked {\\n            currentAllowance -= subtractedValue;\\n        }\\n\\n        transferAllowances[src][spender] = currentAllowance;\\n\\n        emit Approval(src, spender, currentAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Get the underlying balance of the `owner`\\n     * @dev This also accrues interest in a transaction\\n     * @param owner The address of the account to query\\n     * @return amount The amount of underlying owned by `owner`\\n     */\\n    function balanceOfUnderlying(address owner) external override returns (uint256) {\\n        Exp memory exchangeRate = Exp({ mantissa: exchangeRateCurrent() });\\n        return mul_ScalarTruncate(exchangeRate, accountTokens[owner]);\\n    }\\n\\n    /**\\n     * @notice Returns the current total borrows plus accrued interest\\n     * @return totalBorrows The total borrows with interest\\n     */\\n    function totalBorrowsCurrent() external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return totalBorrows;\\n    }\\n\\n    /**\\n     * @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\\n     * @param account The address whose balance should be calculated after updating borrowIndex\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceCurrent(address account) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Sender supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function mint(uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, msg.sender, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender calls on-behalf of minter. minter supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param minter User whom the supply will be attributed to\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when minter address is zero\\n     */\\n    function mintBehalf(address minter, uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(minter);\\n\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, minter, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for the underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function redeem(uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer The user on behalf of whom to redeem\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for a specified amount of underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     */\\n    function redeemUnderlying(uint256 redeemAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems underlying assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer, on behalf of whom to redeem\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemUnderlyingBehalf(\\n        address redeemer,\\n        uint256 redeemAmount\\n    ) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets from the protocol to their own address\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function borrow(uint256 borrowAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _borrowFresh(msg.sender, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the borrower using `comptroller.updateDelegate`\\n     * @param borrower The borrower, on behalf of whom to borrow\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error DelegateNotApproved is thrown if caller is not approved delegate\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function borrowBehalf(address borrower, uint256 borrowAmount) external override returns (uint256) {\\n        _ensureSenderIsDelegateOf(borrower);\\n        accrueInterest();\\n\\n        _borrowFresh(borrower, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays their own borrow\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrow(uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, msg.sender, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays a borrow belonging to borrower\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, borrower, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Not restricted\\n     */\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external override returns (uint256) {\\n        _liquidateBorrow(msg.sender, borrower, repayAmount, vTokenCollateral, false);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice sets protocol share accumulated from liquidations\\n     * @dev must be equal or less than liquidation incentive - 1\\n     * @param newProtocolSeizeShareMantissa_ new protocol share mantissa\\n     * @custom:event Emits NewProtocolSeizeShare event on success\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error ProtocolSeizeShareTooBig is thrown when the new seize share is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setProtocolSeizeShare(uint256 newProtocolSeizeShareMantissa_) external {\\n        _checkAccessAllowed(\\\"setProtocolSeizeShare(uint256)\\\");\\n        uint256 liquidationIncentive = ComptrollerViewInterface(address(comptroller)).liquidationIncentiveMantissa();\\n        if (newProtocolSeizeShareMantissa_ + MANTISSA_ONE > liquidationIncentive) {\\n            revert ProtocolSeizeShareTooBig();\\n        }\\n\\n        uint256 oldProtocolSeizeShareMantissa = protocolSeizeShareMantissa;\\n        protocolSeizeShareMantissa = newProtocolSeizeShareMantissa_;\\n        emit NewProtocolSeizeShare(oldProtocolSeizeShareMantissa, newProtocolSeizeShareMantissa_);\\n    }\\n\\n    /**\\n     * @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\\n     * @dev Admin function to accrue interest and set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     * @custom:event Emits NewReserveFactor event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error SetReserveFactorBoundsCheck is thrown when the new reserve factor is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external override nonReentrant {\\n        _checkAccessAllowed(\\\"setReserveFactor(uint256)\\\");\\n\\n        accrueInterest();\\n        _setReserveFactorFresh(newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Accrues interest and reduces reserves by transferring to the protocol reserve contract\\n     * @dev Gracefully return if reserves already reduced in accrueInterest\\n     * @param reduceAmount Amount of reduction to reserves\\n     * @custom:event Emits ReservesReduced event; may emit AccrueInterest\\n     * @custom:error ReduceReservesCashNotAvailable is thrown when the vToken does not have sufficient cash\\n     * @custom:error ReduceReservesCashValidation is thrown when trying to withdraw more cash than the reserves have\\n     * @custom:access Not restricted\\n     */\\n    function reduceReserves(uint256 reduceAmount) external override nonReentrant {\\n        accrueInterest();\\n        if (reduceReservesBlockNumber == getBlockNumberOrTimestamp()) return;\\n        _reduceReservesFresh(reduceAmount);\\n    }\\n\\n    /**\\n     * @notice The sender adds to reserves.\\n     * @param addAmount The amount of underlying token to add as reserves\\n     * @custom:event Emits ReservesAdded event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function addReserves(uint256 addAmount) external override nonReentrant {\\n        accrueInterest();\\n        _addReservesFresh(addAmount);\\n    }\\n\\n    /**\\n     * @notice accrues interest and updates the interest rate model using _setInterestRateModelFresh\\n     * @dev Admin function to accrue interest and update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     * @custom:event Emits NewMarketInterestRateModel event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external override {\\n        _checkAccessAllowed(\\\"setInterestRateModel(address)\\\");\\n\\n        accrueInterest();\\n        _setInterestRateModelFresh(newInterestRateModel);\\n    }\\n\\n    /**\\n     * @notice Repays a certain amount of debt, treats the rest of the borrow as bad debt, essentially\\n     *   \\\"forgiving\\\" the borrower. Healing is a situation that should rarely happen. However, some pools\\n     *   may list risky assets or be configured improperly \\u2013 we want to still handle such cases gracefully.\\n     *   We assume that Comptroller does the seizing, so this function is only available to Comptroller.\\n     * @dev This function does not call any Comptroller hooks (like \\\"healAllowed\\\"), because we assume\\n     *   the Comptroller does all the necessary checks before calling this function.\\n     * @param payer account who repays the debt\\n     * @param borrower account to heal\\n     * @param repayAmount amount to repay\\n     * @custom:event Emits RepayBorrow, BadDebtIncreased events; may emit AccrueInterest\\n     * @custom:error HealBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:access Only Comptroller\\n     */\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external override nonReentrant {\\n        if (repayAmount != 0) {\\n            comptroller.preRepayHook(address(this), borrower);\\n        }\\n\\n        if (msg.sender != address(comptroller)) {\\n            revert HealBorrowUnauthorized();\\n        }\\n\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 totalBorrowsNew = totalBorrows;\\n\\n        uint256 actualRepayAmount;\\n        if (repayAmount != 0) {\\n            // _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n            // We violate checks-effects-interactions here to account for tokens that take transfer fees\\n            actualRepayAmount = _doTransferIn(payer, repayAmount);\\n            totalBorrowsNew = totalBorrowsNew - actualRepayAmount;\\n            emit RepayBorrow(\\n                payer,\\n                borrower,\\n                actualRepayAmount,\\n                accountBorrowsPrev - actualRepayAmount,\\n                totalBorrowsNew\\n            );\\n        }\\n\\n        // The transaction will fail if trying to repay too much\\n        uint256 badDebtDelta = accountBorrowsPrev - actualRepayAmount;\\n        if (badDebtDelta != 0) {\\n            uint256 badDebtOld = badDebt;\\n            uint256 badDebtNew = badDebtOld + badDebtDelta;\\n            totalBorrowsNew = totalBorrowsNew - badDebtDelta;\\n            badDebt = badDebtNew;\\n\\n            // We treat healing as \\\"repayment\\\", where vToken is the payer\\n            emit RepayBorrow(address(this), borrower, badDebtDelta, 0, totalBorrowsNew);\\n            emit BadDebtIncreased(borrower, badDebtDelta, badDebtOld, badDebtNew);\\n        }\\n\\n        accountBorrows[borrower].principal = 0;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        emit HealBorrow(payer, borrower, repayAmount);\\n    }\\n\\n    /**\\n     * @notice The extended version of liquidations, callable only by Comptroller. May skip\\n     *  the close factor check. The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error ForceLiquidateBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Only Comptroller\\n     */\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        if (msg.sender != address(comptroller)) {\\n            revert ForceLiquidateBorrowUnauthorized();\\n        }\\n        _liquidateBorrow(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Will fail unless called by another vToken during the process of liquidation.\\n     *  It's absolutely critical to use msg.sender as the borrowed vToken and not a parameter.\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     * @custom:event Emits Transfer, ReservesAdded events\\n     * @custom:error LiquidateSeizeLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:access Not restricted\\n     */\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external override nonReentrant {\\n        _seize(msg.sender, liquidator, borrower, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Updates bad debt\\n     * @dev Called only when bad debt is recovered from auction\\n     * @param recoveredAmount_ The amount of bad debt recovered\\n     * @custom:event Emits BadDebtRecovered event\\n     * @custom:access Only Shortfall contract\\n     */\\n    function badDebtRecovered(uint256 recoveredAmount_) external {\\n        require(msg.sender == shortfall, \\\"only shortfall contract can update bad debt\\\");\\n        require(recoveredAmount_ <= badDebt, \\\"more than bad debt recovered from auction\\\");\\n\\n        uint256 badDebtOld = badDebt;\\n        uint256 badDebtNew = badDebtOld - recoveredAmount_;\\n        badDebt = badDebtNew;\\n\\n        emit BadDebtRecovered(badDebtOld, badDebtNew);\\n    }\\n\\n    /**\\n     * @notice Sets protocol share reserve contract address\\n     * @param protocolShareReserve_ The address of the protocol share reserve contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setProtocolShareReserve(address payable protocolShareReserve_) external onlyOwner {\\n        _setProtocolShareReserve(protocolShareReserve_);\\n    }\\n\\n    /**\\n     * @notice Sets shortfall contract address\\n     * @param shortfall_ The address of the shortfall contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setShortfallContract(address shortfall_) external onlyOwner {\\n        _setShortfallContract(shortfall_);\\n    }\\n\\n    /**\\n     * @notice A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)\\n     * @param token The address of the ERC-20 token to sweep\\n     * @custom:access Only Governance\\n     */\\n    function sweepToken(IERC20Upgradeable token) external override {\\n        require(msg.sender == owner(), \\\"VToken::sweepToken: only admin can sweep tokens\\\");\\n        require(address(token) != underlying, \\\"VToken::sweepToken: can not sweep underlying token\\\");\\n        uint256 balance = token.balanceOf(address(this));\\n        token.safeTransfer(owner(), balance);\\n\\n        emit SweepToken(address(token));\\n    }\\n\\n    /**\\n     * @notice A public function to set new threshold of slot(block or second) difference after which funds will be sent to the protocol share reserve\\n     * @param _newReduceReservesBlockOrTimestampDelta slot(block or second) difference value\\n     * @custom:access Only Governance\\n     */\\n    function setReduceReservesBlockDelta(uint256 _newReduceReservesBlockOrTimestampDelta) external {\\n        _checkAccessAllowed(\\\"setReduceReservesBlockDelta(uint256)\\\");\\n        require(_newReduceReservesBlockOrTimestampDelta > 0, \\\"Invalid Input\\\");\\n        emit NewReduceReservesBlockDelta(reduceReservesBlockDelta, _newReduceReservesBlockOrTimestampDelta);\\n        reduceReservesBlockDelta = _newReduceReservesBlockOrTimestampDelta;\\n    }\\n\\n    /**\\n     * @notice Get the current allowance from `owner` for `spender`\\n     * @param owner The address of the account which owns the tokens to be spent\\n     * @param spender The address of the account which may transfer tokens\\n     * @return amount The number of tokens allowed to be spent (type(uint256).max means infinite)\\n     */\\n    function allowance(address owner, address spender) external view override returns (uint256) {\\n        return transferAllowances[owner][spender];\\n    }\\n\\n    /**\\n     * @notice Get the token balance of the `owner`\\n     * @param owner The address of the account to query\\n     * @return amount The number of tokens owned by `owner`\\n     */\\n    function balanceOf(address owner) external view override returns (uint256) {\\n        return accountTokens[owner];\\n    }\\n\\n    /**\\n     * @notice Get a snapshot of the account's balances, and the cached exchange rate\\n     * @dev This is used by comptroller to more efficiently perform liquidity checks.\\n     * @param account Address of the account to snapshot\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return vTokenBalance User's balance of vTokens\\n     * @return borrowBalance Amount owed in terms of underlying\\n     * @return exchangeRate Stored exchange rate\\n     */\\n    function getAccountSnapshot(\\n        address account\\n    )\\n        external\\n        view\\n        override\\n        returns (uint256 error, uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRate)\\n    {\\n        return (NO_ERROR, accountTokens[account], _borrowBalanceStored(account), _exchangeRateStored());\\n    }\\n\\n    /**\\n     * @notice Get cash balance of this vToken in the underlying asset\\n     * @return cash The quantity of underlying asset owned by this contract\\n     */\\n    function getCash() external view override returns (uint256) {\\n        return _getCashPrior();\\n    }\\n\\n    /**\\n     * @notice Returns the current per slot(block or second) borrow interest rate for this vToken\\n     * @return rate The borrow interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function borrowRatePerBlock() external view override returns (uint256) {\\n        return interestRateModel.getBorrowRate(_getCashPrior(), totalBorrows, totalReserves, badDebt);\\n    }\\n\\n    /**\\n     * @notice Returns the current per-slot(block or second) supply interest rate for this v\\n     * @return rate The supply interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function supplyRatePerBlock() external view override returns (uint256) {\\n        return\\n            interestRateModel.getSupplyRate(\\n                _getCashPrior(),\\n                totalBorrows,\\n                totalReserves,\\n                reserveFactorMantissa,\\n                badDebt\\n            );\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceStored(address account) external view override returns (uint256) {\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateStored() external view override returns (uint256) {\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Accrue interest then return the up-to-date exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateCurrent() public override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Applies accrued interest to total borrows and reserves\\n     * @dev This calculates interest accrued from the last checkpointed slot(block or second)\\n     *  up to the current slot(block or second) and writes new checkpoint to storage and\\n     *  reduce spread reserves to protocol share reserve\\n     *  if currentSlot - reduceReservesBlockNumber >= slotDelta\\n     * @return Always NO_ERROR\\n     * @custom:event Emits AccrueInterest event on success\\n     * @custom:access Not restricted\\n     */\\n    function accrueInterest() public virtual override returns (uint256) {\\n        /* Remember the initial block number or timestamp */\\n        uint256 currentSlotNumber = getBlockNumberOrTimestamp();\\n        uint256 accrualSlotNumberPrior = accrualBlockNumber;\\n\\n        /* Short-circuit accumulating 0 interest */\\n        if (accrualSlotNumberPrior == currentSlotNumber) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Read the previous values out of storage */\\n        uint256 cashPrior = _getCashPrior();\\n        uint256 borrowsPrior = totalBorrows;\\n        uint256 reservesPrior = totalReserves;\\n        uint256 borrowIndexPrior = borrowIndex;\\n\\n        /* Calculate the current borrow interest rate */\\n        uint256 borrowRateMantissa = interestRateModel.getBorrowRate(cashPrior, borrowsPrior, reservesPrior, badDebt);\\n        require(borrowRateMantissa <= MAX_BORROW_RATE_MANTISSA, \\\"borrow rate is absurdly high\\\");\\n\\n        /* Calculate the number of slots elapsed since the last accrual */\\n        uint256 slotDelta = currentSlotNumber - accrualSlotNumberPrior;\\n\\n        /*\\n         * Calculate the interest accumulated into borrows and reserves and the new index:\\n         *  simpleInterestFactor = borrowRate * slotDelta\\n         *  interestAccumulated = simpleInterestFactor * totalBorrows\\n         *  totalBorrowsNew = interestAccumulated + totalBorrows\\n         *  totalReservesNew = interestAccumulated * reserveFactor + totalReserves\\n         *  borrowIndexNew = simpleInterestFactor * borrowIndex + borrowIndex\\n         */\\n\\n        Exp memory simpleInterestFactor = mul_(Exp({ mantissa: borrowRateMantissa }), slotDelta);\\n        uint256 interestAccumulated = mul_ScalarTruncate(simpleInterestFactor, borrowsPrior);\\n        uint256 totalBorrowsNew = interestAccumulated + borrowsPrior;\\n        uint256 totalReservesNew = mul_ScalarTruncateAddUInt(\\n            Exp({ mantissa: reserveFactorMantissa }),\\n            interestAccumulated,\\n            reservesPrior\\n        );\\n        uint256 borrowIndexNew = mul_ScalarTruncateAddUInt(simpleInterestFactor, borrowIndexPrior, borrowIndexPrior);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the previously calculated values into storage */\\n        accrualBlockNumber = currentSlotNumber;\\n        borrowIndex = borrowIndexNew;\\n        totalBorrows = totalBorrowsNew;\\n        totalReserves = totalReservesNew;\\n\\n        if (currentSlotNumber - reduceReservesBlockNumber >= reduceReservesBlockDelta) {\\n            reduceReservesBlockNumber = currentSlotNumber;\\n            if (cashPrior < totalReservesNew) {\\n                _reduceReservesFresh(cashPrior);\\n            } else {\\n                _reduceReservesFresh(totalReservesNew);\\n            }\\n        }\\n\\n        /* We emit an AccrueInterest event */\\n        emit AccrueInterest(cashPrior, interestAccumulated, borrowIndexNew, totalBorrowsNew);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice User supplies assets into the market and receives vTokens in exchange\\n     * @dev Assumes interest has already been accrued up to the current block or timestamp\\n     * @param payer The address of the account which is sending the assets for supply\\n     * @param minter The address of the account which is supplying the assets\\n     * @param mintAmount The amount of the underlying asset to supply\\n     */\\n    function _mintFresh(address payer, address minter, uint256 mintAmount) internal {\\n        /* Fail if mint not allowed */\\n        comptroller.preMintHook(address(this), minter, mintAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert MintFreshnessCheck();\\n        }\\n\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         *  We call `_doTransferIn` for the minter and the mintAmount.\\n         *  `_doTransferIn` reverts if anything goes wrong, since we can't be sure if\\n         *  side-effects occurred. The function returns the amount actually transferred,\\n         *  in case of a fee. On success, the vToken holds an additional `actualMintAmount`\\n         *  of cash.\\n         */\\n        uint256 actualMintAmount = _doTransferIn(payer, mintAmount);\\n\\n        /*\\n         * We get the current exchange rate and calculate the number of vTokens to be minted:\\n         *  mintTokens = actualMintAmount / exchangeRate\\n         */\\n\\n        uint256 mintTokens = div_(actualMintAmount, exchangeRate);\\n\\n        /*\\n         * We calculate the new total supply of vTokens and minter token balance, checking for overflow:\\n         *  totalSupplyNew = totalSupply + mintTokens\\n         *  accountTokensNew = accountTokens[minter] + mintTokens\\n         * And write them into storage\\n         */\\n        totalSupply = totalSupply + mintTokens;\\n        uint256 balanceAfter = accountTokens[minter] + mintTokens;\\n        accountTokens[minter] = balanceAfter;\\n\\n        /* We emit a Mint event, and a Transfer event */\\n        emit Mint(minter, actualMintAmount, mintTokens, balanceAfter);\\n        emit Transfer(address(0), minter, mintTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.mintVerify(address(this), minter, actualMintAmount, mintTokens);\\n    }\\n\\n    /**\\n     * @notice Redeemer redeems vTokens in exchange for the underlying assets, transferred to the receiver. Redeemer and receiver can be the same\\n     *   address, or different addresses if the receiver was previously approved by the redeemer as a valid delegate (see Comptroller.updateDelegate)\\n     * @dev Assumes interest has already been accrued up to the current slot(block or second)\\n     * @param redeemer The address of the account which is redeeming the tokens\\n     * @param receiver The receiver of the underlying tokens\\n     * @param redeemTokensIn The number of vTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     * @param redeemAmountIn The number of underlying tokens to receive from redeeming vTokens (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     */\\n    function _redeemFresh(address redeemer, address receiver, uint256 redeemTokensIn, uint256 redeemAmountIn) internal {\\n        require(redeemTokensIn == 0 || redeemAmountIn == 0, \\\"one of redeemTokensIn or redeemAmountIn must be zero\\\");\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RedeemFreshnessCheck();\\n        }\\n\\n        /* exchangeRate = invoke Exchange Rate Stored() */\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        uint256 redeemTokens;\\n        uint256 redeemAmount;\\n\\n        /* If redeemTokensIn > 0: */\\n        if (redeemTokensIn > 0) {\\n            /*\\n             * We calculate the exchange rate and the amount of underlying to be redeemed:\\n             *  redeemTokens = redeemTokensIn\\n             */\\n            redeemTokens = redeemTokensIn;\\n        } else {\\n            /*\\n             * We get the current exchange rate and calculate the amount to be redeemed:\\n             *  redeemTokens = redeemAmountIn / exchangeRate\\n             */\\n            redeemTokens = div_(redeemAmountIn, exchangeRate);\\n\\n            uint256 _redeemAmount = mul_(redeemTokens, exchangeRate);\\n            if (_redeemAmount != 0 && _redeemAmount != redeemAmountIn) redeemTokens++; // round up\\n        }\\n\\n        // redeemAmount = exchangeRate * redeemTokens\\n        redeemAmount = mul_ScalarTruncate(exchangeRate, redeemTokens);\\n\\n        // Revert if amount is zero\\n        if (redeemAmount == 0) {\\n            revert(\\\"redeemAmount is zero\\\");\\n        }\\n\\n        /* Fail if redeem not allowed */\\n        comptroller.preRedeemHook(address(this), redeemer, redeemTokens);\\n\\n        /* Fail gracefully if protocol has insufficient cash */\\n        if (_getCashPrior() - totalReserves < redeemAmount) {\\n            revert RedeemTransferOutNotPossible();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing reduced supply before external transfer.\\n         */\\n        totalSupply = totalSupply - redeemTokens;\\n        uint256 balanceAfter = accountTokens[redeemer] - redeemTokens;\\n        accountTokens[redeemer] = balanceAfter;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the redeemAmount.\\n         *  On success, the vToken has redeemAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, redeemAmount);\\n\\n        /* We emit a Transfer event, and a Redeem event */\\n        emit Transfer(redeemer, address(this), redeemTokens);\\n        emit Redeem(redeemer, redeemAmount, redeemTokens, balanceAfter);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.redeemVerify(address(this), redeemer, redeemAmount, redeemTokens);\\n    }\\n\\n    /**\\n     * @notice Users or their delegates borrow assets from the protocol\\n     * @param borrower User who borrows the assets\\n     * @param receiver The receiver of the tokens, if called by a delegate\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     */\\n    function _borrowFresh(address borrower, address receiver, uint256 borrowAmount) internal {\\n        /* Fail if borrow not allowed */\\n        comptroller.preBorrowHook(address(this), borrower, borrowAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert BorrowFreshnessCheck();\\n        }\\n\\n        /* Fail gracefully if protocol has insufficient underlying cash */\\n        if (_getCashPrior() - totalReserves < borrowAmount) {\\n            revert BorrowCashNotAvailable();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on overflow:\\n         *  accountBorrowNew = accountBorrow + borrowAmount\\n         *  totalBorrowsNew = totalBorrows + borrowAmount\\n         */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 accountBorrowsNew = accountBorrowsPrev + borrowAmount;\\n        uint256 totalBorrowsNew = totalBorrows + borrowAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing increased borrow before external transfer.\\n        `*/\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the borrowAmount.\\n         *  On success, the vToken borrowAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, borrowAmount);\\n\\n        /* We emit a Borrow event */\\n        emit Borrow(borrower, borrowAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.borrowVerify(address(this), borrower, borrowAmount);\\n    }\\n\\n    /**\\n     * @notice Borrows are repaid by another user (possibly the borrower).\\n     * @param payer the account paying off the borrow\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount the amount of underlying tokens being returned, or type(uint256).max for the full outstanding amount\\n     * @return (uint) the actual repayment amount.\\n     */\\n    function _repayBorrowFresh(address payer, address borrower, uint256 repayAmount) internal returns (uint256) {\\n        /* Fail if repayBorrow not allowed */\\n        comptroller.preRepayHook(address(this), borrower);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RepayBorrowFreshnessCheck();\\n        }\\n\\n        /* We fetch the amount the borrower owes, with accumulated interest */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n\\n        uint256 repayAmountFinal = repayAmount >= accountBorrowsPrev ? accountBorrowsPrev : repayAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We call _doTransferIn for the payer and the repayAmount\\n         *  On success, the vToken holds an additional repayAmount of cash.\\n         *  _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         *   it returns the amount actually transferred, in case of a fee.\\n         */\\n        uint256 actualRepayAmount = _doTransferIn(payer, repayAmountFinal);\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on underflow:\\n         *  accountBorrowsNew = accountBorrows - actualRepayAmount\\n         *  totalBorrowsNew = totalBorrows - actualRepayAmount\\n         */\\n        uint256 accountBorrowsNew = accountBorrowsPrev - actualRepayAmount;\\n        uint256 totalBorrowsNew = totalBorrows - actualRepayAmount;\\n\\n        /* We write the previously calculated values into storage */\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /* We emit a RepayBorrow event */\\n        emit RepayBorrow(payer, borrower, actualRepayAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.repayBorrowVerify(address(this), payer, borrower, actualRepayAmount, borrowIndex);\\n\\n        return actualRepayAmount;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal nonReentrant {\\n        accrueInterest();\\n\\n        uint256 error = vTokenCollateral.accrueInterest();\\n        if (error != NO_ERROR) {\\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted liquidation failed\\n            revert LiquidateAccrueCollateralInterestFailed(error);\\n        }\\n\\n        _liquidateBorrowFresh(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice The liquidator liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrowFresh(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal {\\n        /* Fail if liquidate not allowed */\\n        comptroller.preLiquidateHook(\\n            address(this),\\n            address(vTokenCollateral),\\n            borrower,\\n            repayAmount,\\n            skipLiquidityCheck\\n        );\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert LiquidateFreshnessCheck();\\n        }\\n\\n        /* Verify vTokenCollateral market's slot(block or second) number equals current slot(block or second) number */\\n        if (vTokenCollateral.accrualBlockNumber() != getBlockNumberOrTimestamp()) {\\n            revert LiquidateCollateralFreshnessCheck();\\n        }\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateLiquidatorIsBorrower();\\n        }\\n\\n        /* Fail if repayAmount = 0 */\\n        if (repayAmount == 0) {\\n            revert LiquidateCloseAmountIsZero();\\n        }\\n\\n        /* Fail if repayAmount = type(uint256).max */\\n        if (repayAmount == type(uint256).max) {\\n            revert LiquidateCloseAmountIsUintMax();\\n        }\\n\\n        /* Fail if repayBorrow fails */\\n        uint256 actualRepayAmount = _repayBorrowFresh(liquidator, borrower, repayAmount);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We calculate the number of collateral tokens that will be seized */\\n        (uint256 amountSeizeError, uint256 seizeTokens) = comptroller.liquidateCalculateSeizeTokens(\\n            address(this),\\n            address(vTokenCollateral),\\n            actualRepayAmount\\n        );\\n        require(amountSeizeError == NO_ERROR, \\\"LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED\\\");\\n\\n        /* Revert if borrower collateral token balance < seizeTokens */\\n        require(vTokenCollateral.balanceOf(borrower) >= seizeTokens, \\\"LIQUIDATE_SEIZE_TOO_MUCH\\\");\\n\\n        // If this is also the collateral, call _seize internally to avoid re-entrancy, otherwise make an external call\\n        if (address(vTokenCollateral) == address(this)) {\\n            _seize(address(this), liquidator, borrower, seizeTokens);\\n        } else {\\n            vTokenCollateral.seize(liquidator, borrower, seizeTokens);\\n        }\\n\\n        /* We emit a LiquidateBorrow event */\\n        emit LiquidateBorrow(liquidator, borrower, actualRepayAmount, address(vTokenCollateral), seizeTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.liquidateBorrowVerify(\\n            address(this),\\n            address(vTokenCollateral),\\n            liquidator,\\n            borrower,\\n            actualRepayAmount,\\n            seizeTokens\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Called only during an in-kind liquidation, or by liquidateBorrow during the liquidation of another VToken.\\n     *  It's absolutely critical to use msg.sender as the seizer vToken and not a parameter.\\n     * @param seizerContract The contract seizing the collateral (either borrowed vToken or Comptroller)\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     */\\n    function _seize(address seizerContract, address liquidator, address borrower, uint256 seizeTokens) internal {\\n        /* Fail if seize not allowed */\\n        comptroller.preSeizeHook(address(this), seizerContract, liquidator, borrower);\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateSeizeLiquidatorIsBorrower();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and liquidator token balances, failing on underflow/overflow:\\n         *  borrowerTokensNew = accountTokens[borrower] - seizeTokens\\n         *  liquidatorTokensNew = accountTokens[liquidator] + seizeTokens\\n         */\\n        uint256 liquidationIncentiveMantissa = ComptrollerViewInterface(address(comptroller))\\n            .liquidationIncentiveMantissa();\\n        uint256 numerator = mul_(seizeTokens, Exp({ mantissa: protocolSeizeShareMantissa }));\\n        uint256 protocolSeizeTokens = div_(numerator, Exp({ mantissa: liquidationIncentiveMantissa }));\\n        uint256 liquidatorSeizeTokens = seizeTokens - protocolSeizeTokens;\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n        uint256 protocolSeizeAmount = mul_ScalarTruncate(exchangeRate, protocolSeizeTokens);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the calculated values into storage */\\n        totalSupply = totalSupply - protocolSeizeTokens;\\n        accountTokens[borrower] = accountTokens[borrower] - seizeTokens;\\n        accountTokens[liquidator] = accountTokens[liquidator] + liquidatorSeizeTokens;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, protocolSeizeAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.LIQUIDATION\\n        );\\n\\n        /* Emit a Transfer event */\\n        emit Transfer(borrower, liquidator, liquidatorSeizeTokens);\\n        emit ProtocolSeize(borrower, protocolShareReserve, protocolSeizeAmount);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.seizeVerify(address(this), seizerContract, liquidator, borrower, seizeTokens);\\n    }\\n\\n    function _setComptroller(ComptrollerInterface newComptroller) internal {\\n        ComptrollerInterface oldComptroller = comptroller;\\n        // Ensure invoke comptroller.isComptroller() returns true\\n        require(newComptroller.isComptroller(), \\\"marker method returned false\\\");\\n\\n        // Set market's comptroller to newComptroller\\n        comptroller = newComptroller;\\n\\n        // Emit NewComptroller(oldComptroller, newComptroller)\\n        emit NewComptroller(oldComptroller, newComptroller);\\n    }\\n\\n    /**\\n     * @notice Sets a new reserve factor for the protocol (*requires fresh interest accrual)\\n     * @dev Admin function to set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     */\\n    function _setReserveFactorFresh(uint256 newReserveFactorMantissa) internal {\\n        // Verify market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetReserveFactorFreshCheck();\\n        }\\n\\n        // Check newReserveFactor \\u2264 maxReserveFactor\\n        if (newReserveFactorMantissa > MAX_RESERVE_FACTOR_MANTISSA) {\\n            revert SetReserveFactorBoundsCheck();\\n        }\\n\\n        uint256 oldReserveFactorMantissa = reserveFactorMantissa;\\n        reserveFactorMantissa = newReserveFactorMantissa;\\n\\n        emit NewReserveFactor(oldReserveFactorMantissa, newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Add reserves by transferring from caller\\n     * @dev Requires fresh interest accrual\\n     * @param addAmount Amount of addition to reserves\\n     * @return actualAddAmount The actual amount added, excluding the potential token fees\\n     */\\n    function _addReservesFresh(uint256 addAmount) internal returns (uint256) {\\n        // totalReserves + actualAddAmount\\n        uint256 totalReservesNew;\\n        uint256 actualAddAmount;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert AddReservesFactorFreshCheck(actualAddAmount);\\n        }\\n\\n        actualAddAmount = _doTransferIn(msg.sender, addAmount);\\n        totalReservesNew = totalReserves + actualAddAmount;\\n        totalReserves = totalReservesNew;\\n        emit ReservesAdded(msg.sender, actualAddAmount, totalReservesNew);\\n\\n        return actualAddAmount;\\n    }\\n\\n    /**\\n     * @notice Reduces reserves by transferring to the protocol reserve contract\\n     * @dev Requires fresh interest accrual\\n     * @param reduceAmount Amount of reduction to reserves\\n     */\\n    function _reduceReservesFresh(uint256 reduceAmount) internal {\\n        if (reduceAmount == 0) {\\n            return;\\n        }\\n        // totalReserves - reduceAmount\\n        uint256 totalReservesNew;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert ReduceReservesFreshCheck();\\n        }\\n\\n        // Fail gracefully if protocol has insufficient underlying cash\\n        if (_getCashPrior() < reduceAmount) {\\n            revert ReduceReservesCashNotAvailable();\\n        }\\n\\n        // Check reduceAmount \\u2264 reserves[n] (totalReserves)\\n        if (reduceAmount > totalReserves) {\\n            revert ReduceReservesCashValidation();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        totalReservesNew = totalReserves - reduceAmount;\\n\\n        // Store reserves[n+1] = reserves[n] - reduceAmount\\n        totalReserves = totalReservesNew;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, reduceAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.SPREAD\\n        );\\n\\n        emit SpreadReservesReduced(protocolShareReserve, reduceAmount, totalReservesNew);\\n    }\\n\\n    /**\\n     * @notice updates the interest rate model (*requires fresh interest accrual)\\n     * @dev Admin function to update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     */\\n    function _setInterestRateModelFresh(InterestRateModel newInterestRateModel) internal {\\n        // Used to store old model for use in the event that is emitted on success\\n        InterestRateModel oldInterestRateModel;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetInterestRateModelFreshCheck();\\n        }\\n\\n        // Track the market's current interest rate model\\n        oldInterestRateModel = interestRateModel;\\n\\n        // Ensure invoke newInterestRateModel.isInterestRateModel() returns true\\n        require(newInterestRateModel.isInterestRateModel(), \\\"marker method returned false\\\");\\n\\n        // Set the interest rate model to newInterestRateModel\\n        interestRateModel = newInterestRateModel;\\n\\n        // Emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel)\\n        emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel);\\n    }\\n\\n    /**\\n     * Safe Token **\\n     */\\n\\n    /**\\n     * @dev Similar to ERC-20 transfer, but handles tokens that have transfer fees.\\n     *      This function returns the actual amount received,\\n     *      which may be less than `amount` if there is a fee attached to the transfer.\\n     * @param from Sender of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     * @return Actual amount received\\n     */\\n    function _doTransferIn(address from, uint256 amount) internal virtual returns (uint256) {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        uint256 balanceBefore = token.balanceOf(address(this));\\n        token.safeTransferFrom(from, address(this), amount);\\n        uint256 balanceAfter = token.balanceOf(address(this));\\n        // Return the amount that was *actually* transferred\\n        return balanceAfter - balanceBefore;\\n    }\\n\\n    /**\\n     * @dev Just a regular ERC-20 transfer, reverts on failure\\n     * @param to Receiver of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     */\\n    function _doTransferOut(address to, uint256 amount) internal virtual {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        token.safeTransfer(to, amount);\\n    }\\n\\n    /**\\n     * @notice Transfer `tokens` tokens from `src` to `dst` by `spender`\\n     * @dev Called by both `transfer` and `transferFrom` internally\\n     * @param spender The address of the account performing the transfer\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param tokens The number of tokens to transfer\\n     */\\n    function _transferTokens(address spender, address src, address dst, uint256 tokens) internal {\\n        /* Fail if transfer not allowed */\\n        comptroller.preTransferHook(address(this), src, dst, tokens);\\n\\n        /* Do not allow self-transfers */\\n        if (src == dst) {\\n            revert TransferNotAllowed();\\n        }\\n\\n        /* Get the allowance, infinite for the account owner */\\n        uint256 startingAllowance;\\n        if (spender == src) {\\n            startingAllowance = type(uint256).max;\\n        } else {\\n            startingAllowance = transferAllowances[src][spender];\\n        }\\n\\n        /* Do the calculations, checking for {under,over}flow */\\n        uint256 allowanceNew = startingAllowance - tokens;\\n        uint256 srcTokensNew = accountTokens[src] - tokens;\\n        uint256 dstTokensNew = accountTokens[dst] + tokens;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n\\n        accountTokens[src] = srcTokensNew;\\n        accountTokens[dst] = dstTokensNew;\\n\\n        /* Eat some of the allowance (if necessary) */\\n        if (startingAllowance != type(uint256).max) {\\n            transferAllowances[src][spender] = allowanceNew;\\n        }\\n\\n        /* We emit a Transfer event */\\n        emit Transfer(src, dst, tokens);\\n\\n        comptroller.transferVerify(address(this), src, dst, tokens);\\n    }\\n\\n    /**\\n     * @notice Initialize the money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     */\\n    function _initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n        require(accrualBlockNumber == 0 && borrowIndex == 0, \\\"market may only be initialized once\\\");\\n\\n        // Set initial exchange rate\\n        initialExchangeRateMantissa = initialExchangeRateMantissa_;\\n        require(initialExchangeRateMantissa > 0, \\\"initial exchange rate must be greater than zero.\\\");\\n\\n        _setComptroller(comptroller_);\\n\\n        // Initialize slot(block or second) number and borrow index (slot(block or second) number mocks depend on comptroller being set)\\n        accrualBlockNumber = getBlockNumberOrTimestamp();\\n        borrowIndex = MANTISSA_ONE;\\n\\n        // Set the interest rate model (depends on slot(block or second) number / borrow index)\\n        _setInterestRateModelFresh(interestRateModel_);\\n\\n        _setReserveFactorFresh(reserveFactorMantissa_);\\n\\n        name = name_;\\n        symbol = symbol_;\\n        decimals = decimals_;\\n        _setShortfallContract(riskManagement.shortfall);\\n        _setProtocolShareReserve(riskManagement.protocolShareReserve);\\n        protocolSeizeShareMantissa = DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA;\\n\\n        // Set underlying and sanity check it\\n        underlying = underlying_;\\n        IERC20Upgradeable(underlying).totalSupply();\\n\\n        // The counter starts true to prevent changing it from zero to non-zero (i.e. smaller cost/refund)\\n        _notEntered = true;\\n        _transferOwnership(admin_);\\n    }\\n\\n    function _setShortfallContract(address shortfall_) internal {\\n        ensureNonzeroAddress(shortfall_);\\n        address oldShortfall = shortfall;\\n        shortfall = shortfall_;\\n        emit NewShortfallContract(oldShortfall, shortfall_);\\n    }\\n\\n    function _setProtocolShareReserve(address payable protocolShareReserve_) internal {\\n        ensureNonzeroAddress(protocolShareReserve_);\\n        address oldProtocolShareReserve = address(protocolShareReserve);\\n        protocolShareReserve = protocolShareReserve_;\\n        emit NewProtocolShareReserve(oldProtocolShareReserve, address(protocolShareReserve_));\\n    }\\n\\n    function _ensureSenderIsDelegateOf(address user) internal view {\\n        if (!ComptrollerViewInterface(address(comptroller)).approvedDelegates(user, msg.sender)) {\\n            revert DelegateNotApproved();\\n        }\\n    }\\n\\n    /**\\n     * @notice Gets balance of this contract in terms of the underlying\\n     * @dev This excludes the value of the current message, if any\\n     * @return The quantity of underlying tokens owned by this contract\\n     */\\n    function _getCashPrior() internal view virtual returns (uint256) {\\n        return IERC20Upgradeable(underlying).balanceOf(address(this));\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance the calculated balance\\n     */\\n    function _borrowBalanceStored(address account) internal view returns (uint256) {\\n        /* Get borrowBalance and borrowIndex */\\n        BorrowSnapshot memory borrowSnapshot = accountBorrows[account];\\n\\n        /* If borrowBalance = 0 then borrowIndex is likely also 0.\\n         * Rather than failing the calculation with a division by 0, we immediately return 0 in this case.\\n         */\\n        if (borrowSnapshot.principal == 0) {\\n            return 0;\\n        }\\n\\n        /* Calculate new borrow balance using the interest index:\\n         *  recentBorrowBalance = borrower.borrowBalance * market.borrowIndex / borrower.borrowIndex\\n         */\\n        uint256 principalTimesIndex = borrowSnapshot.principal * borrowIndex;\\n\\n        return principalTimesIndex / borrowSnapshot.interestIndex;\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function _exchangeRateStored() internal view virtual returns (uint256) {\\n        uint256 _totalSupply = totalSupply;\\n        if (_totalSupply == 0) {\\n            /*\\n             * If there are no tokens minted:\\n             *  exchangeRate = initialExchangeRate\\n             */\\n            return initialExchangeRateMantissa;\\n        }\\n        /*\\n         * Otherwise:\\n         *  exchangeRate = (totalCash + totalBorrows + badDebt - totalReserves) / totalSupply\\n         */\\n        uint256 totalCash = _getCashPrior();\\n        uint256 cashPlusBorrowsMinusReserves = totalCash + totalBorrows + badDebt - totalReserves;\\n        uint256 exchangeRate = (cashPlusBorrowsMinusReserves * EXP_SCALE) / _totalSupply;\\n\\n        return exchangeRate;\\n    }\\n}\\n\",\"keccak256\":\"0xa220ca317fe69b920b86e43f054c43b5f891f12160fd312c9a21668f969ee056\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { ComptrollerInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\n\\n/**\\n * @title VTokenStorage\\n * @author Venus\\n * @notice Storage layout used by the `VToken` contract\\n */\\n// solhint-disable-next-line max-states-count\\ncontract VTokenStorage {\\n    /**\\n     * @notice Container for borrow balance information\\n     * @member principal Total balance (with accrued interest), after applying the most recent balance-changing action\\n     * @member interestIndex Global borrowIndex as of the most recent balance-changing action\\n     */\\n    struct BorrowSnapshot {\\n        uint256 principal;\\n        uint256 interestIndex;\\n    }\\n\\n    /**\\n     * @dev Guard variable for re-entrancy checks\\n     */\\n    bool internal _notEntered;\\n\\n    /**\\n     * @notice Underlying asset for this VToken\\n     */\\n    address public underlying;\\n\\n    /**\\n     * @notice EIP-20 token name for this token\\n     */\\n    string public name;\\n\\n    /**\\n     * @notice EIP-20 token symbol for this token\\n     */\\n    string public symbol;\\n\\n    /**\\n     * @notice EIP-20 token decimals for this token\\n     */\\n    uint8 public decimals;\\n\\n    /**\\n     * @notice Protocol share Reserve contract address\\n     */\\n    address payable public protocolShareReserve;\\n\\n    /**\\n     * @notice Contract which oversees inter-vToken operations\\n     */\\n    ComptrollerInterface public comptroller;\\n\\n    /**\\n     * @notice Model which tells what the current interest rate should be\\n     */\\n    InterestRateModel public interestRateModel;\\n\\n    // Initial exchange rate used when minting the first VTokens (used when totalSupply = 0)\\n    uint256 internal initialExchangeRateMantissa;\\n\\n    /**\\n     * @notice Fraction of interest currently set aside for reserves\\n     */\\n    uint256 public reserveFactorMantissa;\\n\\n    /**\\n     * @notice Slot(block or second) number that interest was last accrued at\\n     */\\n    uint256 public accrualBlockNumber;\\n\\n    /**\\n     * @notice Accumulator of the total earned interest rate since the opening of the market\\n     */\\n    uint256 public borrowIndex;\\n\\n    /**\\n     * @notice Total amount of outstanding borrows of the underlying in this market\\n     */\\n    uint256 public totalBorrows;\\n\\n    /**\\n     * @notice Total amount of reserves of the underlying held in this market\\n     */\\n    uint256 public totalReserves;\\n\\n    /**\\n     * @notice Total number of tokens in circulation\\n     */\\n    uint256 public totalSupply;\\n\\n    /**\\n     * @notice Total bad debt of the market\\n     */\\n    uint256 public badDebt;\\n\\n    // Official record of token balances for each account\\n    mapping(address => uint256) internal accountTokens;\\n\\n    // Approved token transfer amounts on behalf of others\\n    mapping(address => mapping(address => uint256)) internal transferAllowances;\\n\\n    // Mapping of account addresses to outstanding borrow balances\\n    mapping(address => BorrowSnapshot) internal accountBorrows;\\n\\n    /**\\n     * @notice Share of seized collateral that is added to reserves\\n     */\\n    uint256 public protocolSeizeShareMantissa;\\n\\n    /**\\n     * @notice Storage of Shortfall contract address\\n     */\\n    address public shortfall;\\n\\n    /**\\n     * @notice delta slot (block or second) after which reserves will be reduced\\n     */\\n    uint256 public reduceReservesBlockDelta;\\n\\n    /**\\n     * @notice last slot (block or second) number at which reserves were reduced\\n     */\\n    uint256 public reduceReservesBlockNumber;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n}\\n\\n/**\\n * @title VTokenInterface\\n * @author Venus\\n * @notice Interface implemented by the `VToken` contract\\n */\\nabstract contract VTokenInterface is VTokenStorage {\\n    struct RiskManagementInit {\\n        address shortfall;\\n        address payable protocolShareReserve;\\n    }\\n\\n    /*** Market Events ***/\\n\\n    /**\\n     * @notice Event emitted when interest is accrued\\n     */\\n    event AccrueInterest(uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when tokens are minted\\n     */\\n    event Mint(address indexed minter, uint256 mintAmount, uint256 mintTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when tokens are redeemed\\n     */\\n    event Redeem(address indexed redeemer, uint256 redeemAmount, uint256 redeemTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when underlying is borrowed\\n     */\\n    event Borrow(address indexed borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when a borrow is repaid\\n     */\\n    event RepayBorrow(\\n        address indexed payer,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        uint256 accountBorrows,\\n        uint256 totalBorrows\\n    );\\n\\n    /**\\n     * @notice Event emitted when bad debt is accumulated on a market\\n     * @param borrower borrower to \\\"forgive\\\"\\n     * @param badDebtDelta amount of new bad debt recorded\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtIncreased(address indexed borrower, uint256 badDebtDelta, uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when bad debt is recovered via an auction\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtRecovered(uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when a borrow is liquidated\\n     */\\n    event LiquidateBorrow(\\n        address indexed liquidator,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        address indexed vTokenCollateral,\\n        uint256 seizeTokens\\n    );\\n\\n    /*** Admin Events ***/\\n\\n    /**\\n     * @notice Event emitted when comptroller is changed\\n     */\\n    event NewComptroller(ComptrollerInterface indexed oldComptroller, ComptrollerInterface indexed newComptroller);\\n\\n    /**\\n     * @notice Event emitted when shortfall contract address is changed\\n     */\\n    event NewShortfallContract(address indexed oldShortfall, address indexed newShortfall);\\n\\n    /**\\n     * @notice Event emitted when protocol share reserve contract address is changed\\n     */\\n    event NewProtocolShareReserve(address indexed oldProtocolShareReserve, address indexed newProtocolShareReserve);\\n\\n    /**\\n     * @notice Event emitted when interestRateModel is changed\\n     */\\n    event NewMarketInterestRateModel(\\n        InterestRateModel indexed oldInterestRateModel,\\n        InterestRateModel indexed newInterestRateModel\\n    );\\n\\n    /**\\n     * @notice Event emitted when protocol seize share is changed\\n     */\\n    event NewProtocolSeizeShare(uint256 oldProtocolSeizeShareMantissa, uint256 newProtocolSeizeShareMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserve factor is changed\\n     */\\n    event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserves are added\\n     */\\n    event ReservesAdded(address indexed benefactor, uint256 addAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice Event emitted when the spread reserves are reduced\\n     */\\n    event SpreadReservesReduced(address indexed protocolShareReserve, uint256 reduceAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice EIP20 Transfer event\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 amount);\\n\\n    /**\\n     * @notice EIP20 Approval event\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\\n\\n    /**\\n     * @notice Event emitted when healing the borrow\\n     */\\n    event HealBorrow(address indexed payer, address indexed borrower, uint256 repayAmount);\\n\\n    /**\\n     * @notice Event emitted when tokens are swept\\n     */\\n    event SweepToken(address indexed token);\\n\\n    /**\\n     * @notice Event emitted when reduce reserves slot (block or second) delta is changed\\n     */\\n    event NewReduceReservesBlockDelta(\\n        uint256 oldReduceReservesBlockOrTimestampDelta,\\n        uint256 newReduceReservesBlockOrTimestampDelta\\n    );\\n\\n    /**\\n     * @notice Event emitted when liquidation reserves are reduced\\n     */\\n    event ProtocolSeize(address indexed from, address indexed to, uint256 amount);\\n\\n    /*** User Interface ***/\\n\\n    function mint(uint256 mintAmount) external virtual returns (uint256);\\n\\n    function mintBehalf(address minter, uint256 mintAllowed) external virtual returns (uint256);\\n\\n    function redeem(uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemUnderlying(uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function redeemUnderlyingBehalf(address redeemer, uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function borrow(uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function borrowBehalf(address borrwwer, uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function repayBorrow(uint256 repayAmount) external virtual returns (uint256);\\n\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external virtual returns (uint256);\\n\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external virtual returns (uint256);\\n\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external virtual;\\n\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipCloseFactorCheck\\n    ) external virtual;\\n\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external virtual;\\n\\n    function transfer(address dst, uint256 amount) external virtual returns (bool);\\n\\n    function transferFrom(address src, address dst, uint256 amount) external virtual returns (bool);\\n\\n    function accrueInterest() external virtual returns (uint256);\\n\\n    function sweepToken(IERC20Upgradeable token) external virtual;\\n\\n    /*** Admin Functions ***/\\n\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external virtual;\\n\\n    function reduceReserves(uint256 reduceAmount) external virtual;\\n\\n    function exchangeRateCurrent() external virtual returns (uint256);\\n\\n    function borrowBalanceCurrent(address account) external virtual returns (uint256);\\n\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external virtual;\\n\\n    function addReserves(uint256 addAmount) external virtual;\\n\\n    function totalBorrowsCurrent() external virtual returns (uint256);\\n\\n    function balanceOfUnderlying(address owner) external virtual returns (uint256);\\n\\n    function approve(address spender, uint256 amount) external virtual returns (bool);\\n\\n    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool);\\n\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool);\\n\\n    function allowance(address owner, address spender) external view virtual returns (uint256);\\n\\n    function balanceOf(address owner) external view virtual returns (uint256);\\n\\n    function getAccountSnapshot(address account) external view virtual returns (uint256, uint256, uint256, uint256);\\n\\n    function borrowRatePerBlock() external view virtual returns (uint256);\\n\\n    function supplyRatePerBlock() external view virtual returns (uint256);\\n\\n    function borrowBalanceStored(address account) external view virtual returns (uint256);\\n\\n    function exchangeRateStored() external view virtual returns (uint256);\\n\\n    function getCash() external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is a VToken contract (for inspection)\\n     * @return Always true\\n     */\\n    function isVToken() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7c4cbb879e3a931cfee4fa7a9eb1978eddff18087a1c4f56decedb84c2479f1e\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\",\"keccak256\":\"0x54ab3a6f3bc87569ed12370f3470a1ec84cea9796d4d0ccf3d07dd4280c044aa\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/validators.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\\nerror ZeroAddressNotAllowed();\\n\\n/// @notice Checks if the provided address is nonzero, reverts otherwise\\n/// @param address_ Address to check\\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\\nfunction ensureNonzeroAddress(address address_) pure {\\n    if (address_ == address(0)) {\\n        revert ZeroAddressNotAllowed();\\n    }\\n}\\n\",\"keccak256\":\"0x93bdd5cfb100f0f9a1d446857e23c3633df6ab12c266333c978428edd96b1367\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface IProtocolShareReserve {\\n    /// @notice it represents the type of vToken income\\n    enum IncomeType {\\n        SPREAD,\\n        LIQUIDATION\\n    }\\n\\n    function updateAssetsState(\\n        address comptroller,\\n        address asset,\\n        IncomeType incomeType\\n    ) external;\\n}\\n\",\"keccak256\":\"0x5fddc5b63fdd850b3b5c83576cda50dcb27a205dbb1a23af17d9da0d9f04fa0a\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { SECONDS_PER_YEAR } from \\\"./constants.sol\\\";\\n\\nabstract contract TimeManagerV8 {\\n    /// @notice Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 public immutable blocksOrSecondsPerYear;\\n\\n    /// @notice Acknowledges if a contract is time based or not\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    bool public immutable isTimeBased;\\n\\n    /// @notice Stores the current block timestamp or block number depending on isTimeBased\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    function() view returns (uint256) private immutable _getCurrentSlot;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n\\n    /// @notice Thrown when blocks per year is invalid\\n    error InvalidBlocksPerYear();\\n\\n    /// @notice Thrown when time based but blocks per year is provided\\n    error InvalidTimeBasedConfiguration();\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block\\n     * If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:error InvalidBlocksPerYear is thrown if blocksPerYear entered is zero and timeBased is false\\n     * @custom:error InvalidTimeBasedConfiguration is thrown if blocksPerYear entered is non zero and timeBased is true\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) {\\n        if (!timeBased_ && blocksPerYear_ == 0) {\\n            revert InvalidBlocksPerYear();\\n        }\\n\\n        if (timeBased_ && blocksPerYear_ != 0) {\\n            revert InvalidTimeBasedConfiguration();\\n        }\\n\\n        isTimeBased = timeBased_;\\n        blocksOrSecondsPerYear = timeBased_ ? SECONDS_PER_YEAR : blocksPerYear_;\\n        _getCurrentSlot = timeBased_ ? _getBlockTimestamp : _getBlockNumber;\\n    }\\n\\n    /**\\n     * @dev Function to simply retrieve block number or block timestamp\\n     * @return Current block number or block timestamp\\n     */\\n    function getBlockNumberOrTimestamp() public view virtual returns (uint256) {\\n        return _getCurrentSlot();\\n    }\\n\\n    /**\\n     * @dev Returns the current timestamp in seconds\\n     * @return The current timestamp\\n     */\\n    function _getBlockTimestamp() private view returns (uint256) {\\n        return block.timestamp;\\n    }\\n\\n    /**\\n     * @dev Returns the current block number\\n     * @return The current block number\\n     */\\n    function _getBlockNumber() private view returns (uint256) {\\n        return block.number;\\n    }\\n}\\n\",\"keccak256\":\"0x57a2bbb9b8e02b1c0a5c0e305fef1328a22db56c3d4b148c362010a6e767243c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\",\"keccak256\":\"0x14de93ead464da249af31bea0e3bcfb62ec693bea3475fb4d90f055ac81dc5eb\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/validators.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\\nerror ZeroAddressNotAllowed();\\n\\n/// @notice Thrown if the supplied value is 0 where it is not allowed\\nerror ZeroValueNotAllowed();\\n\\n/// @notice Checks if the provided address is nonzero, reverts otherwise\\n/// @param address_ Address to check\\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\\nfunction ensureNonzeroAddress(address address_) pure {\\n    if (address_ == address(0)) {\\n        revert ZeroAddressNotAllowed();\\n    }\\n}\\n\\n/// @notice Checks if the provided value is nonzero, reverts otherwise\\n/// @param value_ Value to check\\n/// @custom:error ZeroValueNotAllowed is thrown if the provided value is 0\\nfunction ensureNonzeroValue(uint256 value_) pure {\\n    if (value_ == 0) {\\n        revert ZeroValueNotAllowed();\\n    }\\n}\\n\",\"keccak256\":\"0xdb88e14d50dd21889ca3329d755673d022c47e8da005b6a545c7f69c2c4b7b86\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { PrimeStorageV1 } from \\\"../PrimeStorage.sol\\\";\\n\\n/**\\n * @title IPrime\\n * @author Venus\\n * @notice Interface for Prime Token\\n */\\ninterface IPrime {\\n    struct APRInfo {\\n        // supply APR of the user in BPS\\n        uint256 supplyAPR;\\n        // borrow APR of the user in BPS\\n        uint256 borrowAPR;\\n        // total score of the market\\n        uint256 totalScore;\\n        // score of the user\\n        uint256 userScore;\\n        // capped XVS balance of the user\\n        uint256 xvsBalanceForScore;\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    struct Capital {\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    /**\\n     * @notice Returns boosted pending interest accrued for a user for all markets\\n     * @param user the account for which to get the accrued interests\\n     * @return pendingRewards the number of underlying tokens accrued by the user for all markets\\n     */\\n    function getPendingRewards(address user) external returns (PrimeStorageV1.PendingReward[] memory pendingRewards);\\n\\n    /**\\n     * @notice Update total score of multiple users and market\\n     * @param users accounts for which we need to update score\\n     */\\n    function updateScores(address[] memory users) external;\\n\\n    /**\\n     * @notice Update value of alpha\\n     * @param _alphaNumerator numerator of alpha. If alpha is 0.5 then numerator is 1\\n     * @param _alphaDenominator denominator of alpha. If alpha is 0.5 then denominator is 2\\n     */\\n    function updateAlpha(uint128 _alphaNumerator, uint128 _alphaDenominator) external;\\n\\n    /**\\n     * @notice Update multipliers for a market\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier new supply multiplier for the market, scaled by 1e18\\n     * @param borrowMultiplier new borrow multiplier for the market, scaled by 1e18\\n     */\\n    function updateMultipliers(address market, uint256 supplyMultiplier, uint256 borrowMultiplier) external;\\n\\n    /**\\n     * @notice Add a market to prime program\\n     * @param comptroller address of the comptroller\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier the multiplier for supply cap. It should be converted to 1e18\\n     * @param borrowMultiplier the multiplier for borrow cap. It should be converted to 1e18\\n     */\\n    function addMarket(\\n        address comptroller,\\n        address market,\\n        uint256 supplyMultiplier,\\n        uint256 borrowMultiplier\\n    ) external;\\n\\n    /**\\n     * @notice Set limits for total tokens that can be minted\\n     * @param _irrevocableLimit total number of irrevocable tokens that can be minted\\n     * @param _revocableLimit total number of revocable tokens that can be minted\\n     */\\n    function setLimit(uint256 _irrevocableLimit, uint256 _revocableLimit) external;\\n\\n    /**\\n     * @notice Directly issue prime tokens to users\\n     * @param isIrrevocable are the tokens being issued\\n     * @param users list of address to issue tokens to\\n     */\\n    function issue(bool isIrrevocable, address[] calldata users) external;\\n\\n    /**\\n     * @notice Executed by XVSVault whenever user's XVSVault balance changes\\n     * @param user the account address whose balance was updated\\n     */\\n    function xvsUpdated(address user) external;\\n\\n    /**\\n     * @notice accrues interest and updates score for an user for a specific market\\n     * @param user the account address for which to accrue interest and update score\\n     * @param market the market for which to accrue interest and update score\\n     */\\n    function accrueInterestAndUpdateScore(address user, address market) external;\\n\\n    /**\\n     * @notice For claiming prime token when staking period is completed\\n     */\\n    function claim() external;\\n\\n    /**\\n     * @notice For burning any prime token\\n     * @param user the account address for which the prime token will be burned\\n     */\\n    function burn(address user) external;\\n\\n    /**\\n     * @notice To pause or unpause claiming of interest\\n     */\\n    function togglePause() external;\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken) external returns (uint256);\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @param user the user for which to claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Distributes income from market since last distribution\\n     * @param vToken the market for which to distribute the income\\n     */\\n    function accrueInterest(address vToken) external;\\n\\n    /**\\n     * @notice Returns boosted interest accrued for a user\\n     * @param vToken the market for which to fetch the accrued interest\\n     * @param user the account for which to get the accrued interest\\n     * @return interestAccrued the number of underlying tokens accrued by the user since the last accrual\\n     */\\n    function getInterestAccrued(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Retrieves an array of all available markets\\n     * @return an array of addresses representing all available markets\\n     */\\n    function getAllMarkets() external view returns (address[] memory);\\n\\n    /**\\n     * @notice fetch the numbers of seconds remaining for staking period to complete\\n     * @param user the account address for which we are checking the remaining time\\n     * @return timeRemaining the number of seconds the user needs to wait to claim prime token\\n     */\\n    function claimTimeRemaining(address user) external view returns (uint256);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for user for a given market\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function calculateAPR(address market, address user) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for estimated supply, borrow and XVS staked\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @param borrow hypothetical borrow amount\\n     * @param supply hypothetical supply amount\\n     * @param xvsStaked hypothetical staked XVS amount\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function estimateAPR(\\n        address market,\\n        address user,\\n        uint256 borrow,\\n        uint256 supply,\\n        uint256 xvsStaked\\n    ) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice the total income that's going to be distributed in a year to prime token holders\\n     * @param vToken the market for which to fetch the total income that's going to distributed in a year\\n     * @return amount the total income\\n     */\\n    function incomeDistributionYearly(address vToken) external view returns (uint256 amount);\\n\\n    /**\\n     * @notice Returns if user is a prime holder\\n     * @return isPrimeHolder true if user is a prime holder\\n     */\\n    function isUserPrimeHolder(address user) external view returns (bool);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param loopsLimit Number of loops limit\\n     */\\n    function setMaxLoopsLimit(uint256 loopsLimit) external;\\n\\n    /**\\n     * @notice Update staked at timestamp for multiple users\\n     * @param users accounts for which we need to update staked at timestamp\\n     * @param timestamps new staked at timestamp for the users\\n     */\\n    function setStakedAt(address[] calldata users, uint256[] calldata timestamps) external;\\n}\\n\",\"keccak256\":\"0xd112f60183416ad796093b4a83a80ddc1b8b655965f02ae55ca82e2a0c68f97d\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\n/**\\n * @title PrimeStorageV1\\n * @author Venus\\n * @notice Storage for Prime Token\\n */\\ncontract PrimeStorageV1 {\\n    struct Token {\\n        bool exists;\\n        bool isIrrevocable;\\n    }\\n\\n    struct Market {\\n        uint256 supplyMultiplier;\\n        uint256 borrowMultiplier;\\n        uint256 rewardIndex;\\n        uint256 sumOfMembersScore;\\n        bool exists;\\n    }\\n\\n    struct Interest {\\n        uint256 accrued;\\n        uint256 score;\\n        uint256 rewardIndex;\\n    }\\n\\n    struct PendingReward {\\n        address vToken;\\n        address rewardToken;\\n        uint256 amount;\\n    }\\n\\n    /// @notice Base unit for computations, usually used in scaling (multiplications, divisions)\\n    uint256 internal constant EXP_SCALE = 1e18;\\n\\n    /// @notice maximum BPS = 100%\\n    uint256 internal constant MAXIMUM_BPS = 1e4;\\n\\n    /// @notice Mapping to get prime token's metadata\\n    mapping(address => Token) public tokens;\\n\\n    /// @notice  Tracks total irrevocable tokens minted\\n    uint256 public totalIrrevocable;\\n\\n    /// @notice  Tracks total revocable tokens minted\\n    uint256 public totalRevocable;\\n\\n    /// @notice  Indicates maximum revocable tokens that can be minted\\n    uint256 public revocableLimit;\\n\\n    /// @notice  Indicates maximum irrevocable tokens that can be minted\\n    uint256 public irrevocableLimit;\\n\\n    /// @notice Tracks when prime token eligible users started staking for claiming prime token\\n    mapping(address => uint256) public stakedAt;\\n\\n    /// @notice vToken to market configuration\\n    mapping(address => Market) public markets;\\n\\n    /// @notice vToken to user to user index\\n    mapping(address => mapping(address => Interest)) public interests;\\n\\n    /// @notice A list of boosted markets\\n    address[] internal _allMarkets;\\n\\n    /// @notice numerator of alpha. Ex: if alpha is 0.5 then this will be 1\\n    uint128 public alphaNumerator;\\n\\n    /// @notice denominator of alpha. Ex: if alpha is 0.5 then this will be 2\\n    uint128 public alphaDenominator;\\n\\n    /// @notice address of XVS vault\\n    address public xvsVault;\\n\\n    /// @notice address of XVS vault reward token\\n    address public xvsVaultRewardToken;\\n\\n    /// @notice address of XVS vault pool id\\n    uint256 public xvsVaultPoolId;\\n\\n    /// @notice mapping to check if a account's score was updated in the round\\n    mapping(uint256 => mapping(address => bool)) public isScoreUpdated;\\n\\n    /// @notice unique id for next round\\n    uint256 public nextScoreUpdateRoundId;\\n\\n    /// @notice total number of accounts whose score needs to be updated\\n    uint256 public totalScoreUpdatesRequired;\\n\\n    /// @notice total number of accounts whose score is yet to be updated\\n    uint256 public pendingScoreUpdates;\\n\\n    /// @notice mapping used to find if an asset is part of prime markets\\n    mapping(address => address) public vTokenForAsset;\\n\\n    /// @notice Address of core pool comptroller contract\\n    address internal corePoolComptroller;\\n\\n    /// @notice unreleased income from PLP that's already distributed to prime holders\\n    /// @dev mapping of asset address => amount\\n    mapping(address => uint256) public unreleasedPLPIncome;\\n\\n    /// @notice The address of PLP contract\\n    address public primeLiquidityProvider;\\n\\n    /// @notice The address of ResilientOracle contract\\n    ResilientOracleInterface public oracle;\\n\\n    /// @notice The address of PoolRegistry contract\\n    address public poolRegistry;\\n\\n    /// @dev This empty reserved space is put in place to allow future versions to add new\\n    /// variables without shifting down storage in the inheritance chain.\\n    uint256[26] private __gap;\\n}\\n\",\"keccak256\":\"0x5285c875114db2ea2be0b81b65722d5761806217022db733323c4e03365a95e7\",\"license\":\"BSD-3-Clause\"},\"contracts/ERC4626/Interfaces/IComptroller.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Action } from \\\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\\\";\\nimport { RewardsDistributor } from \\\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\\\";\\n\\n/**\\n * @title IComptroller\\n * @author Venus\\n * @notice Combined interface for the `Comptroller` contract, including both core and view functions.\\n */\\ninterface IComptroller {\\n    function actionPaused(address market, Action action) external view returns (bool);\\n\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory);\\n\\n    function supplyCaps(address) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xc55d8fa6cb3e3907d0b9cf5d696afc18879d503278e40bed7f837403d0a4ed7e\",\"license\":\"BSD-3-Clause\"},\"contracts/ERC4626/Interfaces/IProtocolShareReserve.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface IProtocolShareReserve {\\n    /// @notice it represents the type of vToken income\\n    enum IncomeType {\\n        SPREAD,\\n        LIQUIDATION,\\n        ERC4626_WRAPPER_REWARDS,\\n        FLASHLOAN\\n    }\\n\\n    function updateAssetsState(address comptroller, address asset, IncomeType incomeType) external;\\n}\\n\",\"keccak256\":\"0x9ca700a59330cb3bb1b1fe1cbd93b02c06d6ba8f9457ab12e03e87bec0c41235\",\"license\":\"BSD-3-Clause\"},\"contracts/ERC4626/VenusERC4626.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ERC4626Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { ERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\\\";\\nimport { ReentrancyGuardUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol\\\";\\nimport { MathUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\n\\nimport { IProtocolShareReserve } from \\\"./Interfaces/IProtocolShareReserve.sol\\\";\\nimport { RewardsDistributor } from \\\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\\\";\\nimport { IComptroller } from \\\"./Interfaces/IComptroller.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"@venusprotocol/solidity-utilities/contracts/validators.sol\\\";\\n\\nimport { Action } from \\\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\\\";\\nimport { EXP_SCALE } from \\\"@venusprotocol/isolated-pools/contracts/lib/constants.sol\\\";\\nimport { VToken } from \\\"@venusprotocol/isolated-pools/contracts/VToken.sol\\\";\\n\\n/// @title VenusERC4626\\n/// @notice ERC4626 wrapper for Venus vTokens, enabling standard ERC4626 vault interactions with Venus Protocol.\\ncontract VenusERC4626 is ERC4626Upgradeable, AccessControlledV8, MaxLoopsLimitHelper, ReentrancyGuardUpgradeable {\\n    using MathUpgradeable for uint256;\\n    using SafeERC20Upgradeable for ERC20Upgradeable;\\n\\n    /// @notice Error code representing no errors in Venus operations.\\n    uint256 internal constant NO_ERROR = 0;\\n\\n    /// @notice The Venus vToken associated with this ERC4626 vault.\\n    VToken public vToken;\\n\\n    /// @notice The Venus Comptroller contract, responsible for market operations.\\n    IComptroller public comptroller;\\n\\n    /// @notice The recipient of rewards distributed by the Venus Protocol.\\n    address public rewardRecipient;\\n\\n    /// @notice Emitted when rewards are claimed.\\n    /// @param amount The amount of reward tokens claimed.\\n    /// @param rewardToken The address of the reward token claimed.\\n    event ClaimRewards(uint256 amount, address indexed rewardToken);\\n\\n    /// @notice Emitted when the reward recipient address is updated.\\n    /// @param oldRecipient The previous reward recipient address.\\n    /// @param newRecipient The new reward recipient address.\\n    event RewardRecipientUpdated(address indexed oldRecipient, address indexed newRecipient);\\n\\n    /// @notice Event emitted when tokens are swept\\n    event SweepToken(address indexed token, address indexed receiver, uint256 amount);\\n\\n    /// @notice Thrown when a Venus protocol call returns an error.\\n    /// @dev This error is triggered if a Venus operation (such as minting or redeeming vTokens) fails.\\n    /// @param errorCode The error code returned by the Venus protocol.\\n    error VenusERC4626__VenusError(uint256 errorCode);\\n\\n    /// @notice Thrown when a deposit exceeds the maximum allowed limit.\\n    /// @dev This error is triggered if the deposit amount is greater than `maxDeposit(receiver)`.\\n    error ERC4626__DepositMoreThanMax();\\n\\n    /// @notice Thrown when a mint operation exceeds the maximum allowed limit.\\n    /// @dev This error is triggered if the mint amount is greater than `maxMint(receiver)`.\\n    error ERC4626__MintMoreThanMax();\\n\\n    /// @notice Thrown when a withdrawal exceeds the maximum available assets.\\n    /// @dev This error is triggered if the withdrawal amount is greater than `maxWithdraw(owner)`.\\n    error ERC4626__WithdrawMoreThanMax();\\n\\n    /// @notice Thrown when a redemption exceeds the maximum redeemable shares.\\n    /// @dev This error is triggered if the redemption amount is greater than `maxRedeem(owner)`.\\n    error ERC4626__RedeemMoreThanMax();\\n\\n    /// @notice Thrown when attempting an operation with a zero amount.\\n    /// @dev This error prevents unnecessary transactions with zero amounts in deposit, withdraw, mint, or redeem operations.\\n    /// @param operation The name of the operation that failed (e.g., \\\"deposit\\\", \\\"withdraw\\\", \\\"mint\\\", \\\"redeem\\\").\\n    error ERC4626__ZeroAmount(string operation);\\n\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    constructor() {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        _disableInitializers();\\n    }\\n\\n    /// @notice Initializes the VenusERC4626 vault, only with the VToken address associated to the vault\\n    /// @dev `initialize2` should be invoked to complete the configuration of the vault\\n    /// @param vToken_ The VToken associated with the vault, representing the yield-bearing asset.\\n    function initialize(address vToken_) public initializer {\\n        ensureNonzeroAddress(vToken_);\\n\\n        vToken = VToken(vToken_);\\n        comptroller = IComptroller(address(vToken.comptroller()));\\n        ERC20Upgradeable asset = ERC20Upgradeable(vToken.underlying());\\n\\n        __ERC20_init(_generateVaultName(asset), _generateVaultSymbol(asset));\\n        __ERC4626_init(asset);\\n        __ReentrancyGuard_init();\\n    }\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param loopsLimit Number of loops limit\\n     * @custom:event Emits MaxLoopsLimitUpdated event on success\\n     * @custom:access Controlled by ACM\\n     */\\n    function setMaxLoopsLimit(uint256 loopsLimit) external {\\n        _checkAccessAllowed(\\\"setMaxLoopsLimit(uint256)\\\");\\n        _setMaxLoopsLimit(loopsLimit);\\n    }\\n\\n    /// @notice Sets a new reward recipient address\\n    /// @param newRecipient The address of the new reward recipient\\n    /// @custom:access Controlled by ACM\\n    function setRewardRecipient(address newRecipient) external {\\n        _checkAccessAllowed(\\\"setRewardRecipient(address)\\\");\\n        _setRewardRecipient(newRecipient);\\n    }\\n\\n    /// @notice Sweeps the input token address tokens from the contract and sends them to the owner\\n    /// @param token Address of the token\\n    /// @custom:event SweepToken emits on success\\n    /// @custom:access Only owner\\n    function sweepToken(IERC20Upgradeable token) external onlyOwner {\\n        uint256 balance = token.balanceOf(address(this));\\n\\n        if (balance > 0) {\\n            address owner_ = owner();\\n            SafeERC20Upgradeable.safeTransfer(token, owner_, balance);\\n            emit SweepToken(address(token), owner_, balance);\\n        }\\n    }\\n\\n    /// @notice Claims rewards from all reward distributors associated with the VToken and transfers them to the reward recipient.\\n    /// @dev Iterates through all reward distributors fetched from the comptroller, claims rewards, and transfers them if available.\\n    function claimRewards() external {\\n        IComptroller _comptroller = comptroller;\\n        VToken _vToken = vToken;\\n        address _rewardRecipient = rewardRecipient;\\n\\n        RewardsDistributor[] memory rewardDistributors = _comptroller.getRewardDistributors();\\n\\n        _ensureMaxLoops(rewardDistributors.length);\\n\\n        for (uint256 i = 0; i < rewardDistributors.length; i++) {\\n            RewardsDistributor rewardDistributor = rewardDistributors[i];\\n            IERC20Upgradeable rewardToken = IERC20Upgradeable(address(rewardDistributor.rewardToken()));\\n\\n            VToken[] memory vTokens = new VToken[](1);\\n            vTokens[0] = _vToken;\\n            RewardsDistributor(rewardDistributor).claimRewardToken(address(this), vTokens);\\n            uint256 rewardBalance = rewardToken.balanceOf(address(this));\\n\\n            if (rewardBalance > 0) {\\n                SafeERC20Upgradeable.safeTransfer(rewardToken, _rewardRecipient, rewardBalance);\\n\\n                // Try to update the asset state on the recipient if reward recipient is a protocol share reserve\\n                // reward recipient cannot be an EOA\\n                try\\n                    IProtocolShareReserve(_rewardRecipient).updateAssetsState(\\n                        address(_comptroller),\\n                        address(rewardToken),\\n                        IProtocolShareReserve.IncomeType.ERC4626_WRAPPER_REWARDS\\n                    )\\n                {} catch {}\\n            }\\n            emit ClaimRewards(rewardBalance, address(rewardToken));\\n        }\\n    }\\n\\n    /// @notice Second function to invoke to complete the configuration of the vault, setting the rest of the attributes\\n    /// @param accessControlManager_ Address of the ACM contract\\n    /// @param rewardRecipient_ The address that will receive rewards generated by the vault.\\n    /// @param loopsLimit_ The maximum number of loops allowed for reward distribution.\\n    /// @param vaultOwner_ The owner that will be set for the created vault\\n    function initialize2(\\n        address accessControlManager_,\\n        address rewardRecipient_,\\n        uint256 loopsLimit_,\\n        address vaultOwner_\\n    ) public reinitializer(2) {\\n        ensureNonzeroAddress(vaultOwner_);\\n\\n        __AccessControlled_init(accessControlManager_);\\n        _setMaxLoopsLimit(loopsLimit_);\\n        _setRewardRecipient(rewardRecipient_);\\n        _transferOwnership(vaultOwner_);\\n    }\\n\\n    /// @inheritdoc ERC4626Upgradeable\\n    function deposit(uint256 assets, address receiver) public override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(receiver);\\n\\n        vToken.accrueInterest();\\n        if (assets == 0) {\\n            revert ERC4626__ZeroAmount(\\\"deposit\\\");\\n        }\\n        if (assets > maxDeposit(receiver)) {\\n            revert ERC4626__DepositMoreThanMax();\\n        }\\n\\n        uint256 shares = previewDeposit(assets);\\n        if (shares == 0) {\\n            revert ERC4626__ZeroAmount(\\\"deposit\\\");\\n        }\\n\\n        uint256 totalSupplyBefore = totalSupply();\\n        _deposit(_msgSender(), receiver, assets, shares);\\n        uint256 actualShares = totalSupply() - totalSupplyBefore;\\n\\n        return actualShares;\\n    }\\n\\n    /// @dev The minted shares are calculated considering the minted VTokens\\n    /// @dev It can mint slightly fewer shares than requested, because VToken.mint rounds down\\n    /// @inheritdoc ERC4626Upgradeable\\n    function mint(uint256 shares, address receiver) public override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(receiver);\\n\\n        vToken.accrueInterest();\\n        if (shares == 0) {\\n            revert ERC4626__ZeroAmount(\\\"mint\\\");\\n        }\\n        if (shares > maxMint(receiver)) {\\n            revert ERC4626__MintMoreThanMax();\\n        }\\n        uint256 assets = previewMint(shares);\\n        if (assets == 0) {\\n            revert ERC4626__ZeroAmount(\\\"mint\\\");\\n        }\\n        _deposit(_msgSender(), receiver, assets, shares);\\n        return assets;\\n    }\\n\\n    /// @dev Receiver can receive slightly more assets than requested, because VToken.redeemUnderlying rounds up\\n    /// @dev The shares to burn are calculated considering the actual transferred assets, not the requested ones\\n    /// @inheritdoc ERC4626Upgradeable\\n    function withdraw(uint256 assets, address receiver, address owner) public override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(receiver);\\n        ensureNonzeroAddress(owner);\\n\\n        vToken.accrueInterest();\\n        if (assets == 0) {\\n            revert ERC4626__ZeroAmount(\\\"withdraw\\\");\\n        }\\n        if (assets > maxWithdraw(owner)) {\\n            revert ERC4626__WithdrawMoreThanMax();\\n        }\\n\\n        (uint256 actualAssets, uint256 actualShares) = _beforeWithdraw(assets);\\n        _withdraw(_msgSender(), receiver, owner, actualAssets, actualShares);\\n\\n        return actualShares;\\n    }\\n\\n    /// @inheritdoc ERC4626Upgradeable\\n    function redeem(uint256 shares, address receiver, address owner) public override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(receiver);\\n        ensureNonzeroAddress(owner);\\n\\n        vToken.accrueInterest();\\n        if (shares == 0) {\\n            revert ERC4626__ZeroAmount(\\\"redeem\\\");\\n        }\\n        if (shares > maxRedeem(owner)) {\\n            revert ERC4626__RedeemMoreThanMax();\\n        }\\n\\n        uint256 actualAssets = _beforeRedeem(shares);\\n        if (actualAssets == 0) {\\n            revert ERC4626__ZeroAmount(\\\"redeem\\\");\\n        }\\n\\n        _withdraw(_msgSender(), receiver, owner, actualAssets, shares);\\n        return actualAssets;\\n    }\\n\\n    /// @notice Returns the total amount of assets deposited\\n    /// @return Amount of assets deposited\\n    function totalAssets() public view virtual override returns (uint256) {\\n        return (vToken.balanceOf(address(this)) * vToken.exchangeRateStored()) / EXP_SCALE;\\n    }\\n\\n    /// @notice Returns the maximum deposit allowed based on Venus supply caps.\\n    /// @dev If minting is paused or the supply cap is reached, returns 0.\\n    /// @param /*account*/ The address of the account.\\n    /// @return The maximum amount of assets that can be deposited.\\n    function maxDeposit(address /*account*/) public view virtual override returns (uint256) {\\n        if (comptroller.actionPaused(address(vToken), Action.MINT)) {\\n            return 0;\\n        }\\n\\n        uint256 supplyCap = comptroller.supplyCaps(address(vToken));\\n        uint256 totalSupply_ = (vToken.totalSupply() * vToken.exchangeRateStored()) / EXP_SCALE;\\n        return supplyCap > totalSupply_ ? supplyCap - totalSupply_ : 0;\\n    }\\n\\n    /// @notice Returns the maximum amount of shares that can be minted.\\n    /// @dev This is derived from the maximum deposit amount converted to shares.\\n    /// @param /*account*/ The address of the account.\\n    /// @return The maximum number of shares that can be minted.\\n    function maxMint(address /*account*/) public view virtual override returns (uint256) {\\n        return convertToShares(maxDeposit(address(0)));\\n    }\\n\\n    /// @notice Returns the maximum amount that can be withdrawn.\\n    /// @dev The withdrawable amount is limited by the available cash in the vault.\\n    /// @param receiver The address of the account withdrawing.\\n    /// @return The maximum amount of assets that can be withdrawn.\\n    function maxWithdraw(address receiver) public view virtual override returns (uint256) {\\n        if (comptroller.actionPaused(address(vToken), Action.REDEEM)) {\\n            return 0;\\n        }\\n\\n        uint256 cash = vToken.getCash();\\n        uint256 totalReserves = vToken.totalReserves();\\n        uint256 assetsBalance = convertToAssets(balanceOf(receiver));\\n\\n        if (cash < totalReserves) {\\n            return 0;\\n        } else {\\n            uint256 availableCash = cash - totalReserves;\\n            return availableCash < assetsBalance ? availableCash : assetsBalance;\\n        }\\n    }\\n\\n    /// @notice Returns the maximum amount of shares that can be redeemed.\\n    /// @dev Redemption is limited by the available cash in the vault.\\n    /// @param receiver The address of the account redeeming.\\n    /// @return The maximum number of shares that can be redeemed.\\n    function maxRedeem(address receiver) public view virtual override returns (uint256) {\\n        if (comptroller.actionPaused(address(vToken), Action.REDEEM)) {\\n            return 0;\\n        }\\n\\n        uint256 cash = vToken.getCash();\\n        uint256 totalReserves = vToken.totalReserves();\\n        if (cash < totalReserves) {\\n            return 0;\\n        } else {\\n            uint256 availableCash = cash - totalReserves;\\n            uint256 availableCashInShares = convertToShares(availableCash);\\n            uint256 shareBalance = balanceOf(receiver);\\n            return availableCashInShares < shareBalance ? availableCashInShares : shareBalance;\\n        }\\n    }\\n\\n    /// @notice Redeems the amount of vTokens equivalent to the provided shares.\\n    /// @dev Calls `redeem` on the vToken contract. Reverts on error.\\n    /// @param shares The amount of shares to redeem.\\n    /// @return The amount of assets transferred in\\n    function _beforeRedeem(uint256 shares) internal returns (uint256) {\\n        IERC20Upgradeable token = IERC20Upgradeable(asset());\\n        uint256 balanceBefore = token.balanceOf(address(this));\\n\\n        // Calculate the amount of vTokens equivalent to the amount of shares, rounding it down\\n        uint256 vTokens = shares.mulDiv(\\n            vToken.balanceOf(address(this)),\\n            totalSupply() + 10 ** _decimalsOffset(),\\n            MathUpgradeable.Rounding.Down\\n        );\\n\\n        uint256 errorCode = vToken.redeem(vTokens);\\n        if (errorCode != NO_ERROR) {\\n            revert VenusERC4626__VenusError(errorCode);\\n        }\\n\\n        uint256 balanceAfter = token.balanceOf(address(this));\\n\\n        // Return the amount of assets that was *actually* transferred in\\n        return balanceAfter - balanceBefore;\\n    }\\n\\n    /// @notice Redeems underlying assets before withdrawing from the vault.\\n    /// @dev Calls `redeemUnderlying` on the vToken contract. Reverts on error.\\n    /// @param assets The amount of underlying assets to redeem.\\n    /// @return actualAssets The amount of assets transferred in\\n    /// @return actualShares The shares equivalent to `actualAssets`, to be burned, rounded up\\n    /// @custom:error ERC4626__ZeroAmount is thrown when the redeemed VTokens are zero\\n    function _beforeWithdraw(uint256 assets) internal returns (uint256 actualAssets, uint256 actualShares) {\\n        IERC20Upgradeable token = IERC20Upgradeable(asset());\\n        uint256 balanceBefore = token.balanceOf(address(this));\\n        uint256 vTokenBalanceBefore = vToken.balanceOf(address(this));\\n\\n        uint256 errorCode = vToken.redeemUnderlying(assets);\\n        if (errorCode != NO_ERROR) {\\n            revert VenusERC4626__VenusError(errorCode);\\n        }\\n\\n        // Return the amount of assets *actually* transferred in\\n        actualAssets = token.balanceOf(address(this)) - balanceBefore;\\n\\n        uint256 actualVTokens = vTokenBalanceBefore - vToken.balanceOf(address(this));\\n        if (actualVTokens == 0) {\\n            revert ERC4626__ZeroAmount(\\\"actualVTokens at _beforeWithdraw\\\");\\n        }\\n        // Return the shares equivalent to the burned vTokens\\n        actualShares = actualVTokens.mulDiv(\\n            totalSupply() + 10 ** _decimalsOffset(),\\n            vTokenBalanceBefore,\\n            MathUpgradeable.Rounding.Up\\n        );\\n    }\\n\\n    /// @notice Mints vTokens after depositing assets.\\n    /// @dev Calls `mint` on the vToken contract. Reverts on error.\\n    /// @param assets The amount of underlying assets to deposit.\\n    function _mintVTokens(uint256 assets) internal {\\n        ERC20Upgradeable(asset()).safeApprove(address(vToken), assets);\\n        uint256 errorCode = vToken.mint(assets);\\n        if (errorCode != NO_ERROR) {\\n            revert VenusERC4626__VenusError(errorCode);\\n        }\\n    }\\n\\n    /// @notice Sets a new reward recipient address\\n    /// @param newRecipient The address of the new reward recipient\\n    /// @custom:error ZeroAddressNotAllowed is thrown when the new recipient address is zero\\n    /// @custom:event RewardRecipientUpdated is emitted when the reward recipient address is updated\\n    function _setRewardRecipient(address newRecipient) internal {\\n        ensureNonzeroAddress(newRecipient);\\n\\n        emit RewardRecipientUpdated(rewardRecipient, newRecipient);\\n        rewardRecipient = newRecipient;\\n    }\\n\\n    /// @notice Deposits the assets into the VToken and calculates the shares to mint based on the\\n    /// underlying assets equivalent to the new VTokens minted\\n    /// @custom:error ERC4626__ZeroAmount is thrown when the minted VTokens are zero\\n    /// @inheritdoc ERC4626Upgradeable\\n    function _deposit(address caller, address receiver, uint256 assets, uint256 shares) internal override {\\n        // 1. Track pre-transfer balances\\n        uint256 assetBalanceBefore = IERC20Upgradeable(asset()).balanceOf(address(this));\\n        uint256 vTokenBalanceBefore = vToken.balanceOf(address(this));\\n\\n        // 2. Perform asset transfer (original OZ 4626 logic)\\n        SafeERC20Upgradeable.safeTransferFrom(IERC20Upgradeable(asset()), caller, address(this), assets);\\n\\n        // 3. Calculate actual assets received (protects against fee-on-transfer)\\n        uint256 assetsReceived = IERC20Upgradeable(asset()).balanceOf(address(this)) - assetBalanceBefore;\\n\\n        // 4. Mint vTokens with received assets\\n        _mintVTokens(assetsReceived);\\n\\n        // 5. Verify actual vTokens received\\n        uint256 vTokensReceived = vToken.balanceOf(address(this)) - vTokenBalanceBefore;\\n        if (vTokensReceived == 0) {\\n            revert ERC4626__ZeroAmount(\\\"vTokensReceived at _deposit\\\");\\n        }\\n        uint256 actualAssetsValue = (vTokensReceived * vToken.exchangeRateStored()) / EXP_SCALE;\\n\\n        // 6. Recalculate shares based on actual received value\\n        // This is the same operation performed by previewDeposit, adjusting the total assets\\n        uint256 actualShares = actualAssetsValue.mulDiv(\\n            totalSupply() + 10 ** _decimalsOffset(),\\n            totalAssets() + 1 - actualAssetsValue, // remove the new assets deposited to the VToken in this operation\\n            MathUpgradeable.Rounding.Down\\n        );\\n\\n        // 7. Mint the corrected share amount\\n        _mint(receiver, actualShares);\\n\\n        emit Deposit(caller, receiver, assets, actualShares);\\n    }\\n\\n    /// @notice Override `_decimalsOffset` to normalize decimals to 18 for all VenusERC4626 vaults.\\n    /// @return Gap between 18 and the decimals of the asset token\\n    function _decimalsOffset() internal view virtual override returns (uint8) {\\n        return 18 - ERC20Upgradeable(asset()).decimals();\\n    }\\n\\n    /// @notice Generates and returns the derived name of the vault considering the asset name\\n    /// @param asset_ Asset to be accepted in the vault whose name this function will return\\n    /// @return Name of the vault considering the asset name\\n    function _generateVaultName(ERC20Upgradeable asset_) internal view returns (string memory) {\\n        return string(abi.encodePacked(\\\"ERC4626-Wrapped Venus \\\", asset_.name()));\\n    }\\n\\n    /// @notice Generates and returns the derived symbol of the vault considering the asset symbol\\n    /// @param asset_ Asset to be accepted in the vault whose symbol this function will return\\n    /// @return Symbol of the vault considering the asset name\\n    function _generateVaultSymbol(ERC20Upgradeable asset_) internal view returns (string memory) {\\n        return string(abi.encodePacked(\\\"v4626\\\", asset_.symbol()));\\n    }\\n}\\n\",\"keccak256\":\"0x6adbd1422570730a199a185d3eb6023d36d4df59a1f777901720f6ac52e3214c\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[{"astId":414,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":417,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":2820,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":681,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"_balances","offset":0,"slot":"51","type":"t_mapping(t_address,t_uint256)"},{"astId":687,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"_allowances","offset":0,"slot":"52","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":689,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"_totalSupply","offset":0,"slot":"53","type":"t_uint256"},{"astId":691,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"_name","offset":0,"slot":"54","type":"t_string_storage"},{"astId":693,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"_symbol","offset":0,"slot":"55","type":"t_string_storage"},{"astId":1273,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"__gap","offset":0,"slot":"56","type":"t_array(t_uint256)45_storage"},{"astId":1373,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"_asset","offset":0,"slot":"101","type":"t_contract(IERC20Upgradeable)1352"},{"astId":1375,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"_underlyingDecimals","offset":20,"slot":"101","type":"t_uint8"},{"astId":2002,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"__gap","offset":0,"slot":"102","type":"t_array(t_uint256)49_storage"},{"astId":118,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"_owner","offset":0,"slot":"151","type":"t_address"},{"astId":238,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"__gap","offset":0,"slot":"152","type":"t_array(t_uint256)49_storage"},{"astId":11,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"_pendingOwner","offset":0,"slot":"201","type":"t_address"},{"astId":105,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"__gap","offset":0,"slot":"202","type":"t_array(t_uint256)49_storage"},{"astId":4895,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"_accessControlManager","offset":0,"slot":"251","type":"t_contract(IAccessControlManagerV8)5080"},{"astId":4900,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"__gap","offset":0,"slot":"252","type":"t_array(t_uint256)49_storage"},{"astId":10271,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"maxLoopsLimit","offset":0,"slot":"301","type":"t_uint256"},{"astId":10276,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"__gap","offset":0,"slot":"302","type":"t_array(t_uint256)49_storage"},{"astId":591,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"_status","offset":0,"slot":"351","type":"t_uint256"},{"astId":660,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"__gap","offset":0,"slot":"352","type":"t_array(t_uint256)49_storage"},{"astId":16890,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"vToken","offset":0,"slot":"401","type":"t_contract(VToken)15506"},{"astId":16894,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"comptroller","offset":0,"slot":"402","type":"t_contract(IComptroller)16789"},{"astId":16897,"contract":"contracts/ERC4626/VenusERC4626.sol:VenusERC4626","label":"rewardRecipient","offset":0,"slot":"403","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)45_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[45]","numberOfBytes":"1440"},"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(IAccessControlManagerV8)5080":{"encoding":"inplace","label":"contract IAccessControlManagerV8","numberOfBytes":"20"},"t_contract(IComptroller)16789":{"encoding":"inplace","label":"contract IComptroller","numberOfBytes":"20"},"t_contract(IERC20Upgradeable)1352":{"encoding":"inplace","label":"contract IERC20Upgradeable","numberOfBytes":"20"},"t_contract(VToken)15506":{"encoding":"inplace","label":"contract VToken","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"errors":{"ERC4626__DepositMoreThanMax()":[{"notice":"Thrown when a deposit exceeds the maximum allowed limit."}],"ERC4626__MintMoreThanMax()":[{"notice":"Thrown when a mint operation exceeds the maximum allowed limit."}],"ERC4626__RedeemMoreThanMax()":[{"notice":"Thrown when a redemption exceeds the maximum redeemable shares."}],"ERC4626__WithdrawMoreThanMax()":[{"notice":"Thrown when a withdrawal exceeds the maximum available assets."}],"ERC4626__ZeroAmount(string)":[{"notice":"Thrown when attempting an operation with a zero amount."}],"MaxLoopsLimitExceeded(uint256,uint256)":[{"notice":"Thrown an error on maxLoopsLimit exceeds for any loop"}],"Unauthorized(address,address,string)":[{"notice":"Thrown when the action is prohibited by AccessControlManager"}],"VenusERC4626__VenusError(uint256)":[{"notice":"Thrown when a Venus protocol call returns an error."}],"ZeroAddressNotAllowed()":[{"notice":"Thrown if the supplied address is a zero address where it is not allowed"}]},"events":{"ClaimRewards(uint256,address)":{"notice":"Emitted when rewards are claimed."},"MaxLoopsLimitUpdated(uint256,uint256)":{"notice":"Emitted when max loops limit is set"},"NewAccessControlManager(address,address)":{"notice":"Emitted when access control manager contract address is changed"},"RewardRecipientUpdated(address,address)":{"notice":"Emitted when the reward recipient address is updated."},"SweepToken(address,address,uint256)":{"notice":"Event emitted when tokens are swept"}},"kind":"user","methods":{"accessControlManager()":{"notice":"Returns the address of the access control manager contract"},"claimRewards()":{"notice":"Claims rewards from all reward distributors associated with the VToken and transfers them to the reward recipient."},"comptroller()":{"notice":"The Venus Comptroller contract, responsible for market operations."},"initialize(address)":{"notice":"Initializes the VenusERC4626 vault, only with the VToken address associated to the vault"},"initialize2(address,address,uint256,address)":{"notice":"Second function to invoke to complete the configuration of the vault, setting the rest of the attributes"},"maxDeposit(address)":{"notice":"Returns the maximum deposit allowed based on Venus supply caps."},"maxMint(address)":{"notice":"Returns the maximum amount of shares that can be minted."},"maxRedeem(address)":{"notice":"Returns the maximum amount of shares that can be redeemed."},"maxWithdraw(address)":{"notice":"Returns the maximum amount that can be withdrawn."},"rewardRecipient()":{"notice":"The recipient of rewards distributed by the Venus Protocol."},"setAccessControlManager(address)":{"notice":"Sets the address of AccessControlManager"},"setMaxLoopsLimit(uint256)":{"notice":"Set the limit for the loops can iterate to avoid the DOS"},"setRewardRecipient(address)":{"notice":"Sets a new reward recipient address"},"sweepToken(address)":{"notice":"Sweeps the input token address tokens from the contract and sends them to the owner"},"totalAssets()":{"notice":"Returns the total amount of assets deposited"},"vToken()":{"notice":"The Venus vToken associated with this ERC4626 vault."}},"notice":"ERC4626 wrapper for Venus vTokens, enabling standard ERC4626 vault interactions with Venus Protocol.","version":1}}},"contracts/ERC4626/VenusERC4626Factory.sol":{"VenusERC4626Factory":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"loopsLimit","type":"uint256"},{"internalType":"uint256","name":"requiredLoops","type":"uint256"}],"name":"MaxLoopsLimitExceeded","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"calledContract","type":"address"},{"internalType":"string","name":"methodSignature","type":"string"}],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"VenusERC4626Factory__ERC4626AlreadyExists","type":"error"},{"inputs":[],"name":"VenusERC4626Factory__InvalidVToken","type":"error"},{"inputs":[],"name":"ZeroAddressNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract VTokenInterface","name":"vToken","type":"address"},{"indexed":true,"internalType":"contract ERC4626Upgradeable","name":"vault","type":"address"}],"name":"CreateERC4626","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMaxLoopsLimit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newmaxLoopsLimit","type":"uint256"}],"name":"MaxLoopsLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAccessControlManager","type":"address"},{"indexed":false,"internalType":"address","name":"newAccessControlManager","type":"address"}],"name":"NewAccessControlManager","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldRecipient","type":"address"},{"indexed":true,"internalType":"address","name":"newRecipient","type":"address"}],"name":"RewardRecipientUpdated","type":"event"},{"inputs":[],"name":"SALT","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accessControlManager","outputs":[{"internalType":"contract IAccessControlManagerV8","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beacon","outputs":[{"internalType":"contract UpgradeableBeacon","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"}],"name":"computeVaultAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"}],"name":"createERC4626","outputs":[{"internalType":"contract ERC4626Upgradeable","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken","type":"address"}],"name":"createdVaults","outputs":[{"internalType":"contract ERC4626Upgradeable","name":"vault","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"accessControlManager","type":"address"},{"internalType":"address","name":"poolRegistryAddress","type":"address"},{"internalType":"address","name":"rewardRecipientAddress","type":"address"},{"internalType":"address","name":"venusERC4626Implementation","type":"address"},{"internalType":"uint256","name":"loopsLimitNumber","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxLoopsLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolRegistry","outputs":[{"internalType":"contract PoolRegistryInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"accessControlManager_","type":"address"}],"name":"setAccessControlManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"loopsLimit","type":"uint256"}],"name":"setMaxLoopsLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRecipient","type":"address"}],"name":"setRewardRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"events":{"CreateERC4626(address,address)":{"params":{"vToken":"The vToken used by the vault","vault":"The vault that was created"}},"Initialized(uint8)":{"details":"Triggered when the contract has been initialized or reinitialized."},"RewardRecipientUpdated(address,address)":{"params":{"newRecipient":"The new reward recipient address.","oldRecipient":"The previous reward recipient address."}}},"kind":"dev","methods":{"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"computeVaultAddress(address)":{"params":{"vToken":"The vToken address"},"returns":{"_0":"The precomputed vault address"}},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"createERC4626(address)":{"custom:error":"ZeroAddressNotAllowed is thrown when the vToken address is zeroVenusERC4626Factory__InvalidVToken is thrown when the provided vToken is not supported by the poolRegistryVenusERC4626Factory__ERC4626AlreadyExists is thrown when this factory already created a VenusERC4626 for the provided vToken","custom:event":"CreateERC4626 is emitted when the ERC4626 wrapper is created","params":{"vToken":"The vToken address to create the vault"},"returns":{"vault":"The deployed VenusERC4626 vault"}},"initialize(address,address,address,address,uint256)":{"params":{"accessControlManager":"Address of the ACM contract","loopsLimitNumber":"The loops limit for the MaxLoopsLimit helper","poolRegistryAddress":"Address of the Pool Registry contract","rewardRecipientAddress":"Reward recipient address","venusERC4626Implementation":"Address of the VenusERC4626 implementation contract"}},"owner()":{"details":"Returns the address of the current owner."},"pendingOwner()":{"details":"Returns the address of the pending owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"setAccessControlManager(address)":{"custom:access":"Only Governance","custom:event":"Emits NewAccessControlManager event","details":"Admin function to set address of AccessControlManager","params":{"accessControlManager_":"The new address of the AccessControlManager"}},"setMaxLoopsLimit(uint256)":{"custom:access":"Controlled by ACM","custom:event":"Emits MaxLoopsLimitUpdated event on success","params":{"loopsLimit":"Number of loops limit"}},"setRewardRecipient(address)":{"custom:access":"Controlled by ACM","custom:error":"ZeroAddressNotAllowed is thrown when the new recipient address is zero","custom:event":"RewardRecipientUpdated is emitted when the reward recipient address is updated","params":{"newRecipient":"The address of the new reward recipient"}},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."}},"title":"VenusERC4626Factory","version":1},"evm":{"bytecode":{"functionDebugData":{"@_18294":{"entryPoint":null,"id":18294,"parameterSlots":0,"returnSlots":0},"@_disableInitializers_557":{"entryPoint":30,"id":557,"parameterSlots":0,"returnSlots":0},"abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_uint8_to_t_uint8_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":165,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":246,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_uint8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:1638:69","nodeType":"YulBlock","src":"0:1638:69","statements":[{"body":{"nativeSrc":"103:73:69","nodeType":"YulBlock","src":"103:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"120:3:69","nodeType":"YulIdentifier","src":"120:3:69"},{"name":"length","nativeSrc":"125:6:69","nodeType":"YulIdentifier","src":"125:6:69"}],"functionName":{"name":"mstore","nativeSrc":"113:6:69","nodeType":"YulIdentifier","src":"113:6:69"},"nativeSrc":"113:19:69","nodeType":"YulFunctionCall","src":"113:19:69"},"nativeSrc":"113:19:69","nodeType":"YulExpressionStatement","src":"113:19:69"},{"nativeSrc":"141:29:69","nodeType":"YulAssignment","src":"141:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"160:3:69","nodeType":"YulIdentifier","src":"160:3:69"},{"kind":"number","nativeSrc":"165:4:69","nodeType":"YulLiteral","src":"165:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"156:3:69","nodeType":"YulIdentifier","src":"156:3:69"},"nativeSrc":"156:14:69","nodeType":"YulFunctionCall","src":"156:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"141:11:69","nodeType":"YulIdentifier","src":"141:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"7:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"75:3:69","nodeType":"YulTypedName","src":"75:3:69","type":""},{"name":"length","nativeSrc":"80:6:69","nodeType":"YulTypedName","src":"80:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"91:11:69","nodeType":"YulTypedName","src":"91:11:69","type":""}],"src":"7:169:69"},{"body":{"nativeSrc":"288:120:69","nodeType":"YulBlock","src":"288:120:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},{"kind":"number","nativeSrc":"318:1:69","nodeType":"YulLiteral","src":"318:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"306:3:69","nodeType":"YulIdentifier","src":"306:3:69"},"nativeSrc":"306:14:69","nodeType":"YulFunctionCall","src":"306:14:69"},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320696e697469","kind":"string","nativeSrc":"322:34:69","nodeType":"YulLiteral","src":"322:34:69","type":"","value":"Initializable: contract is initi"}],"functionName":{"name":"mstore","nativeSrc":"299:6:69","nodeType":"YulIdentifier","src":"299:6:69"},"nativeSrc":"299:58:69","nodeType":"YulFunctionCall","src":"299:58:69"},"nativeSrc":"299:58:69","nodeType":"YulExpressionStatement","src":"299:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"378:6:69","nodeType":"YulIdentifier","src":"378:6:69"},{"kind":"number","nativeSrc":"386:2:69","nodeType":"YulLiteral","src":"386:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"374:3:69","nodeType":"YulIdentifier","src":"374:3:69"},"nativeSrc":"374:15:69","nodeType":"YulFunctionCall","src":"374:15:69"},{"hexValue":"616c697a696e67","kind":"string","nativeSrc":"391:9:69","nodeType":"YulLiteral","src":"391:9:69","type":"","value":"alizing"}],"functionName":{"name":"mstore","nativeSrc":"367:6:69","nodeType":"YulIdentifier","src":"367:6:69"},"nativeSrc":"367:34:69","nodeType":"YulFunctionCall","src":"367:34:69"},"nativeSrc":"367:34:69","nodeType":"YulExpressionStatement","src":"367:34:69"}]},"name":"store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a","nativeSrc":"182:226:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"280:6:69","nodeType":"YulTypedName","src":"280:6:69","type":""}],"src":"182:226:69"},{"body":{"nativeSrc":"560:220:69","nodeType":"YulBlock","src":"560:220:69","statements":[{"nativeSrc":"570:74:69","nodeType":"YulAssignment","src":"570:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"636:3:69","nodeType":"YulIdentifier","src":"636:3:69"},{"kind":"number","nativeSrc":"641:2:69","nodeType":"YulLiteral","src":"641:2:69","type":"","value":"39"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"577:58:69","nodeType":"YulIdentifier","src":"577:58:69"},"nativeSrc":"577:67:69","nodeType":"YulFunctionCall","src":"577:67:69"},"variableNames":[{"name":"pos","nativeSrc":"570:3:69","nodeType":"YulIdentifier","src":"570:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"742:3:69","nodeType":"YulIdentifier","src":"742:3:69"}],"functionName":{"name":"store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a","nativeSrc":"653:88:69","nodeType":"YulIdentifier","src":"653:88:69"},"nativeSrc":"653:93:69","nodeType":"YulFunctionCall","src":"653:93:69"},"nativeSrc":"653:93:69","nodeType":"YulExpressionStatement","src":"653:93:69"},{"nativeSrc":"755:19:69","nodeType":"YulAssignment","src":"755:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"766:3:69","nodeType":"YulIdentifier","src":"766:3:69"},{"kind":"number","nativeSrc":"771:2:69","nodeType":"YulLiteral","src":"771:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"762:3:69","nodeType":"YulIdentifier","src":"762:3:69"},"nativeSrc":"762:12:69","nodeType":"YulFunctionCall","src":"762:12:69"},"variableNames":[{"name":"end","nativeSrc":"755:3:69","nodeType":"YulIdentifier","src":"755:3:69"}]}]},"name":"abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack","nativeSrc":"414:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"548:3:69","nodeType":"YulTypedName","src":"548:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"556:3:69","nodeType":"YulTypedName","src":"556:3:69","type":""}],"src":"414:366:69"},{"body":{"nativeSrc":"957:248:69","nodeType":"YulBlock","src":"957:248:69","statements":[{"nativeSrc":"967:26:69","nodeType":"YulAssignment","src":"967:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"979:9:69","nodeType":"YulIdentifier","src":"979:9:69"},{"kind":"number","nativeSrc":"990:2:69","nodeType":"YulLiteral","src":"990:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"975:3:69","nodeType":"YulIdentifier","src":"975:3:69"},"nativeSrc":"975:18:69","nodeType":"YulFunctionCall","src":"975:18:69"},"variableNames":[{"name":"tail","nativeSrc":"967:4:69","nodeType":"YulIdentifier","src":"967:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1014:9:69","nodeType":"YulIdentifier","src":"1014:9:69"},{"kind":"number","nativeSrc":"1025:1:69","nodeType":"YulLiteral","src":"1025:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1010:3:69","nodeType":"YulIdentifier","src":"1010:3:69"},"nativeSrc":"1010:17:69","nodeType":"YulFunctionCall","src":"1010:17:69"},{"arguments":[{"name":"tail","nativeSrc":"1033:4:69","nodeType":"YulIdentifier","src":"1033:4:69"},{"name":"headStart","nativeSrc":"1039:9:69","nodeType":"YulIdentifier","src":"1039:9:69"}],"functionName":{"name":"sub","nativeSrc":"1029:3:69","nodeType":"YulIdentifier","src":"1029:3:69"},"nativeSrc":"1029:20:69","nodeType":"YulFunctionCall","src":"1029:20:69"}],"functionName":{"name":"mstore","nativeSrc":"1003:6:69","nodeType":"YulIdentifier","src":"1003:6:69"},"nativeSrc":"1003:47:69","nodeType":"YulFunctionCall","src":"1003:47:69"},"nativeSrc":"1003:47:69","nodeType":"YulExpressionStatement","src":"1003:47:69"},{"nativeSrc":"1059:139:69","nodeType":"YulAssignment","src":"1059:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"1193:4:69","nodeType":"YulIdentifier","src":"1193:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack","nativeSrc":"1067:124:69","nodeType":"YulIdentifier","src":"1067:124:69"},"nativeSrc":"1067:131:69","nodeType":"YulFunctionCall","src":"1067:131:69"},"variableNames":[{"name":"tail","nativeSrc":"1059:4:69","nodeType":"YulIdentifier","src":"1059:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"786:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"937:9:69","nodeType":"YulTypedName","src":"937:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"952:4:69","nodeType":"YulTypedName","src":"952:4:69","type":""}],"src":"786:419:69"},{"body":{"nativeSrc":"1254:43:69","nodeType":"YulBlock","src":"1254:43:69","statements":[{"nativeSrc":"1264:27:69","nodeType":"YulAssignment","src":"1264:27:69","value":{"arguments":[{"name":"value","nativeSrc":"1279:5:69","nodeType":"YulIdentifier","src":"1279:5:69"},{"kind":"number","nativeSrc":"1286:4:69","nodeType":"YulLiteral","src":"1286:4:69","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"1275:3:69","nodeType":"YulIdentifier","src":"1275:3:69"},"nativeSrc":"1275:16:69","nodeType":"YulFunctionCall","src":"1275:16:69"},"variableNames":[{"name":"cleaned","nativeSrc":"1264:7:69","nodeType":"YulIdentifier","src":"1264:7:69"}]}]},"name":"cleanup_t_uint8","nativeSrc":"1211:86:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1236:5:69","nodeType":"YulTypedName","src":"1236:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"1246:7:69","nodeType":"YulTypedName","src":"1246:7:69","type":""}],"src":"1211:86:69"},{"body":{"nativeSrc":"1364:51:69","nodeType":"YulBlock","src":"1364:51:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"1381:3:69","nodeType":"YulIdentifier","src":"1381:3:69"},{"arguments":[{"name":"value","nativeSrc":"1402:5:69","nodeType":"YulIdentifier","src":"1402:5:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"1386:15:69","nodeType":"YulIdentifier","src":"1386:15:69"},"nativeSrc":"1386:22:69","nodeType":"YulFunctionCall","src":"1386:22:69"}],"functionName":{"name":"mstore","nativeSrc":"1374:6:69","nodeType":"YulIdentifier","src":"1374:6:69"},"nativeSrc":"1374:35:69","nodeType":"YulFunctionCall","src":"1374:35:69"},"nativeSrc":"1374:35:69","nodeType":"YulExpressionStatement","src":"1374:35:69"}]},"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"1303:112:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1352:5:69","nodeType":"YulTypedName","src":"1352:5:69","type":""},{"name":"pos","nativeSrc":"1359:3:69","nodeType":"YulTypedName","src":"1359:3:69","type":""}],"src":"1303:112:69"},{"body":{"nativeSrc":"1515:120:69","nodeType":"YulBlock","src":"1515:120:69","statements":[{"nativeSrc":"1525:26:69","nodeType":"YulAssignment","src":"1525:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"1537:9:69","nodeType":"YulIdentifier","src":"1537:9:69"},{"kind":"number","nativeSrc":"1548:2:69","nodeType":"YulLiteral","src":"1548:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1533:3:69","nodeType":"YulIdentifier","src":"1533:3:69"},"nativeSrc":"1533:18:69","nodeType":"YulFunctionCall","src":"1533:18:69"},"variableNames":[{"name":"tail","nativeSrc":"1525:4:69","nodeType":"YulIdentifier","src":"1525:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"1601:6:69","nodeType":"YulIdentifier","src":"1601:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"1614:9:69","nodeType":"YulIdentifier","src":"1614:9:69"},{"kind":"number","nativeSrc":"1625:1:69","nodeType":"YulLiteral","src":"1625:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1610:3:69","nodeType":"YulIdentifier","src":"1610:3:69"},"nativeSrc":"1610:17:69","nodeType":"YulFunctionCall","src":"1610:17:69"}],"functionName":{"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"1561:39:69","nodeType":"YulIdentifier","src":"1561:39:69"},"nativeSrc":"1561:67:69","nodeType":"YulFunctionCall","src":"1561:67:69"},"nativeSrc":"1561:67:69","nodeType":"YulExpressionStatement","src":"1561:67:69"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nativeSrc":"1421:214:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1487:9:69","nodeType":"YulTypedName","src":"1487:9:69","type":""},{"name":"value0","nativeSrc":"1499:6:69","nodeType":"YulTypedName","src":"1499:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1510:4:69","nodeType":"YulTypedName","src":"1510:4:69","type":""}],"src":"1421:214:69"}]},"contents":"{\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a(memPtr) {\n\n        mstore(add(memPtr, 0), \"Initializable: contract is initi\")\n\n        mstore(add(memPtr, 32), \"alizing\")\n\n    }\n\n    function abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 39)\n        store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function cleanup_t_uint8(value) -> cleaned {\n        cleaned := and(value, 0xff)\n    }\n\n    function abi_encode_t_uint8_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint8_to_t_uint8_fromStack(value0,  add(headStart, 0))\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b5061001961001e565b610105565b600054610100900460ff161561004f5760405162461bcd60e51b8152600401610046906100a5565b60405180910390fd5b60005460ff908116146100a3576000805460ff191660ff9081179091556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989161009a916100f6565b60405180910390a15b565b602080825281016100f081602781527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469602082015266616c697a696e6760c81b604082015260600190565b92915050565b60ff82168152602081016100f0565b612161806101146000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063afcff50f116100a2578063be26317e11610071578063be26317e14610254578063e30c39781461025d578063e521136f1461026e578063f2fde38b14610281578063f7013ef61461029457600080fd5b8063afcff50f146101d3578063b4a0bdf3146101e6578063b599410a146101f7578063ba9a91a51461022057600080fd5b806379ba5097116100e957806379ba50971461018157806380d45a2d146101895780638da5cb5b1461019c578063a9e50471146101ad578063abeccaa4146101c057600080fd5b80630e32cb861461011b57806317f333401461013057806359659e9014610159578063715018a614610179575b600080fd5b61012e610129366004610e07565b6102a7565b005b60fd54610143906001600160a01b031681565b6040516101509190610e3f565b60405180910390f35b60fb5461016c906001600160a01b031681565b6040516101509190610e7d565b61012e6102bb565b61012e6102cf565b61012e610197366004610e9c565b61030d565b6033546001600160a01b0316610143565b6101436101bb366004610e07565b610354565b61016c6101ce366004610e07565b61046a565b60fc5461016c906001600160a01b031681565b6097546001600160a01b031661016c565b61016c610205366004610e07565b60fe602052600090815260409020546001600160a01b031681565b6102477f1991af52b18eb46fa8c9d75910fd649338d33ba3882cfe1e1afbc13a3b4df5b981565b6040516101509190610ec3565b61024760c95481565b6065546001600160a01b0316610143565b61012e61027c366004610e07565b6107c4565b61012e61028f366004610e07565b610867565b61012e6102a2366004610ed1565b6108d8565b6102af610ac3565b6102b881610aed565b50565b6102c3610ac3565b6102cd6000610b72565b565b60655433906001600160a01b031681146103045760405162461bcd60e51b81526004016102fb90610f92565b60405180910390fd5b6102b881610b72565b61034b6040518060400160405280601981526020017f7365744d61784c6f6f70734c696d69742875696e743235362900000000000000815250610b8b565b6102b881610c29565b600060ff60f81b307f1991af52b18eb46fa8c9d75910fd649338d33ba3882cfe1e1afbc13a3b4df5b96040518060200161038d90610dbb565b601f1982820381018352601f90910116604081905260fb546001600160a01b03169063189acdbd60e31b906103c6908990602401610e3f565b60408051601f19818403018152918152602080830180516001600160e01b03166001600160e01b03199095169490941790935251610405939201610ff8565b60408051601f1981840301815290829052610423929160200161103a565b6040516020818303038152906040528051906020012060405160200161044c949392919061108a565b60408051601f19818403018152919052805160209091012092915050565b600061047582610c84565b6001600160a01b03828116600090815260fe602052604090205416156104ae57604051634fa32ea760e01b815260040160405180910390fd5b60008290506000816001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051791906110f1565b905060fc60009054906101000a90046001600160a01b03166001600160a01b031663266e0a7f82846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561057c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a0919061111d565b6040518363ffffffff1660e01b81526004016105bd92919061113e565b602060405180830381865afa1580156105da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fe919061111d565b6001600160a01b0316846001600160a01b03161461062f57604051630a74323b60e21b815260040160405180910390fd5b60fb546040516000917f1991af52b18eb46fa8c9d75910fd649338d33ba3882cfe1e1afbc13a3b4df5b9916001600160a01b039091169063189acdbd60e31b9061067d908990602401610e3f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516106ba90610dbb565b6106c5929190610ff8565b8190604051809103906000f59050801580156106e5573d6000803e3d6000fd5b5060975460fd5460c9546033546040516320f08d2d60e11b81529495506001600160a01b03808716956341e11a5a9561072c95908316949083169390921690600401611160565b600060405180830381600087803b15801561074657600080fd5b505af115801561075a573d6000803e3d6000fd5b505050506001600160a01b03858116600090815260fe602052604080822080546001600160a01b0319168585169081179091559051939650869390928616917fcbd4e5d1362721c7fd10daaabb1a046344447d4798be55684b8a6b4fc1765d7291a3505050919050565b6108026040518060400160405280601b81526020017f736574526577617264526563697069656e742861646472657373290000000000815250610b8b565b61080b81610c84565b60fd546040516001600160a01b038084169216907fc8c11bb97ac2ffa10ce2e2a98f4c1fd8df84cfa2e1a15e013ed2383ab1f527ad90600090a360fd80546001600160a01b0319166001600160a01b0392909216919091179055565b61086f610ac3565b606580546001600160a01b0383166001600160a01b031990911681179091556108a06033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600054610100900460ff16158080156108f85750600054600160ff909116105b806109125750303b158015610912575060005460ff166001145b61092e5760405162461bcd60e51b81526004016102fb906111e9565b6000805460ff191660011790558015610951576000805461ff0019166101001790555b61095a86610c84565b61096385610c84565b61096c84610c84565b61097583610c84565b61097e86610cab565b60fc80546001600160a01b038088166001600160a01b03199283161790925560fd8054928716929091169190911790556109b782610c29565b826040516109c490610dc8565b6109ce9190610e3f565b604051809103906000f0801580156109ea573d6000803e3d6000fd5b5060fb80546001600160a01b03929092166001600160a01b03199092168217905563f2fde38b610a226033546001600160a01b031690565b6040518263ffffffff1660e01b8152600401610a3e9190610e3f565b600060405180830381600087803b158015610a5857600080fd5b505af1158015610a6c573d6000803e3d6000fd5b505050508015610abb576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890610ab29060019061120d565b60405180910390a15b505050505050565b6033546001600160a01b031633146102cd5760405162461bcd60e51b81526004016102fb9061121b565b6001600160a01b038116610b135760405162461bcd60e51b81526004016102fb90611297565b609780546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa090610b66908390859061113e565b60405180910390a15050565b606580546001600160a01b03191690556102b881610ce3565b6097546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab90610bbe9033908690600401610ff8565b602060405180830381865afa158015610bdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bff91906112ba565b905080610c2557333083604051634a3fa29360e01b81526004016102fb939291906112db565b5050565b60c9548111610c4a5760405162461bcd60e51b81526004016102fb90611347565b60c98054908290556040517fc2d09fef144f7c8a86f71ea459f8fc17f675768eb1ae369cbd77fb31d467aafa90610b669083908590611357565b6001600160a01b0381166102b8576040516342bcdf7f60e11b815260040160405180910390fd5b600054610100900460ff16610cd25760405162461bcd60e51b81526004016102fb906113ba565b610cda610d35565b6102b881610d64565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610d5c5760405162461bcd60e51b81526004016102fb906113ba565b6102cd610d8b565b600054610100900460ff166102af5760405162461bcd60e51b81526004016102fb906113ba565b600054610100900460ff16610db25760405162461bcd60e51b81526004016102fb906113ba565b6102cd33610b72565b6107ea806113cb83390190565b61057780611bb583390190565b60006001600160a01b0382165b92915050565b610df181610dd5565b81146102b857600080fd5b8035610de281610de8565b600060208284031215610e1c57610e1c600080fd5b6000610e288484610dfc565b949350505050565b610e3981610dd5565b82525050565b60208101610de28284610e30565b60006001600160a01b038216610de2565b6000610de282610e4d565b6000610de282610e5e565b610e3981610e69565b60208101610de28284610e74565b80610df1565b8035610de281610e8b565b600060208284031215610eb157610eb1600080fd5b6000610e288484610e91565b80610e39565b60208101610de28284610ebd565b600080600080600060a08688031215610eec57610eec600080fd5b6000610ef88888610dfc565b9550506020610f0988828901610dfc565b9450506040610f1a88828901610dfc565b9350506060610f2b88828901610dfc565b9250506080610f3c88828901610e91565b9150509295509295909350565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b602082015291505b5060400190565b60208082528101610de281610f49565b60005b83811015610fbd578181015183820152602001610fa5565b50506000910152565b6000610fd0825190565b808452602084019350610fe7818560208601610fa2565b601f01601f19169290920192915050565b604081016110068285610e30565b8181036020830152610e288184610fc6565b6000611022825190565b611030818560208601610fa2565b9290920192915050565b60006110468285611018565b9150610e288284611018565b6001600160f81b03198116610e39565b6000610de28260601b90565b6000610de282611062565b610e3961108582610dd5565b61106e565b60006110968287611052565b6001820191506110a68286611079565b6014820191506110b68285610ebd565b6020820191506110c68284610ebd565b50602001949350505050565b6000610de282610dd5565b610df1816110d2565b8051610de2816110dd565b60006020828403121561110657611106600080fd5b6000610e2884846110e6565b8051610de281610de8565b60006020828403121561113257611132600080fd5b6000610e288484611112565b6040810161114c8285610e30565b6111596020830184610e30565b9392505050565b6080810161116e8287610e30565b61117b6020830186610e30565b6111886040830185610ebd565b6111956060830184610e30565b95945050505050565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b60208201529150610f8b565b60208082528101610de28161119e565b600060ff8216610de2565b610e39816111f9565b60208101610de28284611204565b60208082528181019081527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604083015260608201610de2565b602581526000602082017f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b60208201529150610f8b565b60208082528101610de281611255565b801515610df1565b8051610de2816112a7565b6000602082840312156112cf576112cf600080fd5b6000610e2884846112af565b606081016112e98286610e30565b6112f66020830185610e30565b81810360408301526111958184610fc6565b602281526000602082017f436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d8152611a5d60f21b60208201529150610f8b565b60208082528101610de281611308565b604081016113658285610ebd565b6111596020830184610ebd565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150610f8b565b60208082528101610de28161137256fe60806040526040516107ea3803806107ea8339810160408190526100229161045d565b61002e82826000610035565b505061063a565b61003e836100f6565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100f1576100ef836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e991906104b4565b836101f7565b505b505050565b6001600160a01b0381163b6101265760405162461bcd60e51b815260040161011d9061051a565b60405180910390fd5b61019a816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610167573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061018b91906104b4565b6001600160a01b03163b151590565b6101b65760405162461bcd60e51b815260040161011d90610577565b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392909216919091179055565b606061021c83836040518060600160405280602781526020016107c360279139610225565b90505b92915050565b6060600080856001600160a01b03168560405161024291906105a9565b600060405180830381855af49150503d806000811461027d576040519150601f19603f3d011682016040523d82523d6000602084013e610282565b606091505b5090925090506102948683838761029e565b9695505050505050565b606083156102dd5782516000036102d6576001600160a01b0385163b6102d65760405162461bcd60e51b815260040161011d906105bc565b50816102e7565b6102e783836102ef565b949350505050565b8151156102ff5781518083602001fd5b8060405162461bcd60e51b815260040161011d9190610629565b60006001600160a01b03821661021f565b61033381610319565b811461033e57600080fd5b50565b805161021f8161032a565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b03821117156103875761038761034c565b6040525050565b600061039960405190565b90506103a58282610362565b919050565b60006001600160401b038211156103c3576103c361034c565b601f19601f83011660200192915050565b60005b838110156103ef5781810151838201526020016103d7565b50506000910152565b600061040b610406846103aa565b61038e565b90508281526020810184848401111561042657610426600080fd5b6104318482856103d4565b509392505050565b600082601f83011261044d5761044d600080fd5b81516102e78482602086016103f8565b6000806040838503121561047357610473600080fd5b600061047f8585610341565b92505060208301516001600160401b0381111561049e5761049e600080fd5b6104aa85828601610439565b9150509250929050565b6000602082840312156104c9576104c9600080fd5b60006102e78484610341565b602581526000602082017f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e8152641d1c9858dd60da1b602082015291505b5060400190565b6020808252810161021f816104d5565b603081526000602082017f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206981526f1cc81b9bdd08184818dbdb9d1c9858dd60821b60208201529150610513565b6020808252810161021f8161052a565b6000610591825190565b61059f8185602086016103d4565b9290920192915050565b60006105b58284610587565b9392505050565b6020808252810161021f81601d81527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000602082015260400190565b6000610601825190565b8084526020840193506106188185602086016103d4565b601f01601f19169290920192915050565b6020808252810161021c81846105f7565b61017a806106496000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610029565b6100c2565b565b600061005c7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100bd919061011b565b905090565b3660008037600080366000845af43d6000803e8080156100e1573d6000f35b3d6000fd5b60006001600160a01b0382165b92915050565b610102816100e6565b811461010d57600080fd5b50565b80516100f3816100f9565b60006020828403121561013057610130600080fd5b600061013c8484610110565b94935050505056fea2646970667358221220a8191d9194d13b48b6d155765300178c7064de2b6ed3cff4b63bd08ebfc1a49864736f6c63430008190033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564608060405234801561001057600080fd5b5060405161057738038061057783398101604081905261002f9161011e565b61003833610047565b61004181610097565b506101a8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381163b6100c75760405162461bcd60e51b81526004016100be90610147565b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0382165b92915050565b610105816100e9565b811461011057600080fd5b50565b80516100f6816100fc565b60006020828403121561013357610133600080fd5b600061013f8484610113565b949350505050565b602080825281016100f681603381527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60208201527f6e206973206e6f74206120636f6e747261637400000000000000000000000000604082015260600190565b6103c0806101b76000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a6146100945780638da5cb5b1461009c578063f2fde38b146100ad575b600080fd5b61006f61006a366004610254565b6100c0565b005b6001546001600160a01b03165b60405161008b919061028c565b60405180910390f35b61006f610108565b6000546001600160a01b031661007e565b61006f6100bb366004610254565b61011c565b6100c861015f565b6100d181610189565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b61011061015f565b61011a60006101d2565b565b61012461015f565b6001600160a01b0381166101535760405162461bcd60e51b815260040161014a906102e0565b60405180910390fd5b61015c816101d2565b50565b6000546001600160a01b0316331461011a5760405162461bcd60e51b815260040161014a906102f0565b6001600160a01b0381163b6101b05760405162461bcd60e51b815260040161014a9061037a565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b61023e81610222565b811461015c57600080fd5b803561022f81610235565b60006020828403121561026957610269600080fd5b60006102758484610249565b949350505050565b61028681610222565b82525050565b6020810161022f828461027d565b602681526000602082017f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015291505b5060400190565b6020808252810161022f8161029a565b60208082528181019081527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408301526060820161022f565b603381526000602082017f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f8152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b602082015291506102d9565b6020808252810161022f8161032a56fea264697066735822122071a7c74deecc6adc9b45c53947a48e1a9da9734144acfac95c9bc9feeeefd9f364736f6c63430008190033a2646970667358221220411845db159c9c102443c0f4ebfdae7048ed739cb793e7a9d9e30ba71dbccf3664736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19 PUSH2 0x1E JUMP JUMPDEST PUSH2 0x105 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x4F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x46 SWAP1 PUSH2 0xA5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF SWAP1 DUP2 AND EQ PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP2 PUSH2 0x9A SWAP2 PUSH2 0xF6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xF0 DUP2 PUSH1 0x27 DUP2 MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320696E697469 PUSH1 0x20 DUP3 ADD MSTORE PUSH7 0x616C697A696E67 PUSH1 0xC8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xFF DUP3 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD PUSH2 0xF0 JUMP JUMPDEST PUSH2 0x2161 DUP1 PUSH2 0x114 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x116 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAFCFF50F GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xBE26317E GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xBE26317E EQ PUSH2 0x254 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x25D JUMPI DUP1 PUSH4 0xE521136F EQ PUSH2 0x26E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x281 JUMPI DUP1 PUSH4 0xF7013EF6 EQ PUSH2 0x294 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xAFCFF50F EQ PUSH2 0x1D3 JUMPI DUP1 PUSH4 0xB4A0BDF3 EQ PUSH2 0x1E6 JUMPI DUP1 PUSH4 0xB599410A EQ PUSH2 0x1F7 JUMPI DUP1 PUSH4 0xBA9A91A5 EQ PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x79BA5097 GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0x80D45A2D EQ PUSH2 0x189 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x19C JUMPI DUP1 PUSH4 0xA9E50471 EQ PUSH2 0x1AD JUMPI DUP1 PUSH4 0xABECCAA4 EQ PUSH2 0x1C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE32CB86 EQ PUSH2 0x11B JUMPI DUP1 PUSH4 0x17F33340 EQ PUSH2 0x130 JUMPI DUP1 PUSH4 0x59659E90 EQ PUSH2 0x159 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x179 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12E PUSH2 0x129 CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x2A7 JUMP JUMPDEST STOP JUMPDEST PUSH1 0xFD SLOAD PUSH2 0x143 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x150 SWAP2 SWAP1 PUSH2 0xE3F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0xFB SLOAD PUSH2 0x16C SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x150 SWAP2 SWAP1 PUSH2 0xE7D JUMP JUMPDEST PUSH2 0x12E PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x12E PUSH2 0x2CF JUMP JUMPDEST PUSH2 0x12E PUSH2 0x197 CALLDATASIZE PUSH1 0x4 PUSH2 0xE9C JUMP JUMPDEST PUSH2 0x30D JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x143 JUMP JUMPDEST PUSH2 0x143 PUSH2 0x1BB CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x354 JUMP JUMPDEST PUSH2 0x16C PUSH2 0x1CE CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x46A JUMP JUMPDEST PUSH1 0xFC SLOAD PUSH2 0x16C SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x16C JUMP JUMPDEST PUSH2 0x16C PUSH2 0x205 CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH1 0xFE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x247 PUSH32 0x1991AF52B18EB46FA8C9D75910FD649338D33BA3882CFE1E1AFBC13A3B4DF5B9 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x150 SWAP2 SWAP1 PUSH2 0xEC3 JUMP JUMPDEST PUSH2 0x247 PUSH1 0xC9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x143 JUMP JUMPDEST PUSH2 0x12E PUSH2 0x27C CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x7C4 JUMP JUMPDEST PUSH2 0x12E PUSH2 0x28F CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x867 JUMP JUMPDEST PUSH2 0x12E PUSH2 0x2A2 CALLDATASIZE PUSH1 0x4 PUSH2 0xED1 JUMP JUMPDEST PUSH2 0x8D8 JUMP JUMPDEST PUSH2 0x2AF PUSH2 0xAC3 JUMP JUMPDEST PUSH2 0x2B8 DUP2 PUSH2 0xAED JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x2C3 PUSH2 0xAC3 JUMP JUMPDEST PUSH2 0x2CD PUSH1 0x0 PUSH2 0xB72 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x65 SLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 EQ PUSH2 0x304 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2FB SWAP1 PUSH2 0xF92 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2B8 DUP2 PUSH2 0xB72 JUMP JUMPDEST PUSH2 0x34B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x19 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x7365744D61784C6F6F70734C696D69742875696E743235362900000000000000 DUP2 MSTORE POP PUSH2 0xB8B JUMP JUMPDEST PUSH2 0x2B8 DUP2 PUSH2 0xC29 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF PUSH1 0xF8 SHL ADDRESS PUSH32 0x1991AF52B18EB46FA8C9D75910FD649338D33BA3882CFE1E1AFBC13A3B4DF5B9 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x38D SWAP1 PUSH2 0xDBB JUMP JUMPDEST PUSH1 0x1F NOT DUP3 DUP3 SUB DUP2 ADD DUP4 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD AND PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH1 0xFB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x189ACDBD PUSH1 0xE3 SHL SWAP1 PUSH2 0x3C6 SWAP1 DUP10 SWAP1 PUSH1 0x24 ADD PUSH2 0xE3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 MSTORE MLOAD PUSH2 0x405 SWAP4 SWAP3 ADD PUSH2 0xFF8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE PUSH2 0x423 SWAP3 SWAP2 PUSH1 0x20 ADD PUSH2 0x103A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x44C SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x108A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x475 DUP3 PUSH2 0xC84 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND ISZERO PUSH2 0x4AE JUMPI PUSH1 0x40 MLOAD PUSH4 0x4FA32EA7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5FE3B567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4F3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x517 SWAP2 SWAP1 PUSH2 0x10F1 JUMP JUMPDEST SWAP1 POP PUSH1 0xFC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x266E0A7F DUP3 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6F307DC3 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x57C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5A0 SWAP2 SWAP1 PUSH2 0x111D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BD SWAP3 SWAP2 SWAP1 PUSH2 0x113E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5FE SWAP2 SWAP1 PUSH2 0x111D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x62F JUMPI PUSH1 0x40 MLOAD PUSH4 0xA74323B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xFB SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP2 PUSH32 0x1991AF52B18EB46FA8C9D75910FD649338D33BA3882CFE1E1AFBC13A3B4DF5B9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x189ACDBD PUSH1 0xE3 SHL SWAP1 PUSH2 0x67D SWAP1 DUP10 SWAP1 PUSH1 0x24 ADD PUSH2 0xE3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE SWAP1 MLOAD PUSH2 0x6BA SWAP1 PUSH2 0xDBB JUMP JUMPDEST PUSH2 0x6C5 SWAP3 SWAP2 SWAP1 PUSH2 0xFF8 JUMP JUMPDEST DUP2 SWAP1 PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE2 SWAP1 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x6E5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x97 SLOAD PUSH1 0xFD SLOAD PUSH1 0xC9 SLOAD PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x20F08D2D PUSH1 0xE1 SHL DUP2 MSTORE SWAP5 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND SWAP6 PUSH4 0x41E11A5A SWAP6 PUSH2 0x72C SWAP6 SWAP1 DUP4 AND SWAP5 SWAP1 DUP4 AND SWAP4 SWAP1 SWAP3 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x1160 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x746 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x75A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFE PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP6 DUP6 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP4 SWAP7 POP DUP7 SWAP4 SWAP1 SWAP3 DUP7 AND SWAP2 PUSH32 0xCBD4E5D1362721C7FD10DAAABB1A046344447D4798BE55684B8A6B4FC1765D72 SWAP2 LOG3 POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x802 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x736574526577617264526563697069656E742861646472657373290000000000 DUP2 MSTORE POP PUSH2 0xB8B JUMP JUMPDEST PUSH2 0x80B DUP2 PUSH2 0xC84 JUMP JUMPDEST PUSH1 0xFD SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 AND SWAP1 PUSH32 0xC8C11BB97AC2FFA10CE2E2A98F4C1FD8DF84CFA2E1A15E013ED2383AB1F527AD SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0xFD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x86F PUSH2 0xAC3 JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH2 0x8A0 PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x8F8 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x912 JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x912 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x92E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2FB SWAP1 PUSH2 0x11E9 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x951 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x95A DUP7 PUSH2 0xC84 JUMP JUMPDEST PUSH2 0x963 DUP6 PUSH2 0xC84 JUMP JUMPDEST PUSH2 0x96C DUP5 PUSH2 0xC84 JUMP JUMPDEST PUSH2 0x975 DUP4 PUSH2 0xC84 JUMP JUMPDEST PUSH2 0x97E DUP7 PUSH2 0xCAB JUMP JUMPDEST PUSH1 0xFC DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0xFD DUP1 SLOAD SWAP3 DUP8 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x9B7 DUP3 PUSH2 0xC29 JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH2 0x9C4 SWAP1 PUSH2 0xDC8 JUMP JUMPDEST PUSH2 0x9CE SWAP2 SWAP1 PUSH2 0xE3F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x9EA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0xFB DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP3 AND DUP3 OR SWAP1 SSTORE PUSH4 0xF2FDE38B PUSH2 0xA22 PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA3E SWAP2 SWAP1 PUSH2 0xE3F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA6C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 ISZERO PUSH2 0xABB JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH2 0xAB2 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x120D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2CD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2FB SWAP1 PUSH2 0x121B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xB13 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2FB SWAP1 PUSH2 0x1297 JUMP JUMPDEST PUSH1 0x97 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP1 PUSH32 0x66FD58E82F7B31A2A5C30E0888F3093EFE4E111B00CD2B0C31FE014601293AA0 SWAP1 PUSH2 0xB66 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x113E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH2 0x2B8 DUP2 PUSH2 0xCE3 JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x40 MLOAD PUSH4 0x18C5E8AB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x18C5E8AB SWAP1 PUSH2 0xBBE SWAP1 CALLER SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0xFF8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBDB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBFF SWAP2 SWAP1 PUSH2 0x12BA JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0xC25 JUMPI CALLER ADDRESS DUP4 PUSH1 0x40 MLOAD PUSH4 0x4A3FA293 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2FB SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x12DB JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0xC9 SLOAD DUP2 GT PUSH2 0xC4A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2FB SWAP1 PUSH2 0x1347 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC2D09FEF144F7C8A86F71EA459F8FC17F675768EB1AE369CBD77FB31D467AAFA SWAP1 PUSH2 0xB66 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x1357 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2B8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x42BCDF7F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xCD2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2FB SWAP1 PUSH2 0x13BA JUMP JUMPDEST PUSH2 0xCDA PUSH2 0xD35 JUMP JUMPDEST PUSH2 0x2B8 DUP2 PUSH2 0xD64 JUMP JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xD5C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2FB SWAP1 PUSH2 0x13BA JUMP JUMPDEST PUSH2 0x2CD PUSH2 0xD8B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2AF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2FB SWAP1 PUSH2 0x13BA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xDB2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2FB SWAP1 PUSH2 0x13BA JUMP JUMPDEST PUSH2 0x2CD CALLER PUSH2 0xB72 JUMP JUMPDEST PUSH2 0x7EA DUP1 PUSH2 0x13CB DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH2 0x577 DUP1 PUSH2 0x1BB5 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xDF1 DUP2 PUSH2 0xDD5 JUMP JUMPDEST DUP2 EQ PUSH2 0x2B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0xDE2 DUP2 PUSH2 0xDE8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE1C JUMPI PUSH2 0xE1C PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE28 DUP5 DUP5 PUSH2 0xDFC JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0xE39 DUP2 PUSH2 0xDD5 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xDE2 DUP3 DUP5 PUSH2 0xE30 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xDE2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDE2 DUP3 PUSH2 0xE4D JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDE2 DUP3 PUSH2 0xE5E JUMP JUMPDEST PUSH2 0xE39 DUP2 PUSH2 0xE69 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xDE2 DUP3 DUP5 PUSH2 0xE74 JUMP JUMPDEST DUP1 PUSH2 0xDF1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xDE2 DUP2 PUSH2 0xE8B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xEB1 JUMPI PUSH2 0xEB1 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE28 DUP5 DUP5 PUSH2 0xE91 JUMP JUMPDEST DUP1 PUSH2 0xE39 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xDE2 DUP3 DUP5 PUSH2 0xEBD JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xEEC JUMPI PUSH2 0xEEC PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xEF8 DUP9 DUP9 PUSH2 0xDFC JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0xF09 DUP9 DUP3 DUP10 ADD PUSH2 0xDFC JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0xF1A DUP9 DUP3 DUP10 ADD PUSH2 0xDFC JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0xF2B DUP9 DUP3 DUP10 ADD PUSH2 0xDFC JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0xF3C DUP9 DUP3 DUP10 ADD PUSH2 0xE91 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x29 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4F776E61626C6532537465703A2063616C6C6572206973206E6F742074686520 DUP2 MSTORE PUSH9 0x3732BB9037BBB732B9 PUSH1 0xB9 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xDE2 DUP2 PUSH2 0xF49 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xFBD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xFA5 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFD0 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0xFE7 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xFA2 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x1006 DUP3 DUP6 PUSH2 0xE30 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0xE28 DUP2 DUP5 PUSH2 0xFC6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1022 DUP3 MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1030 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xFA2 JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1046 DUP3 DUP6 PUSH2 0x1018 JUMP JUMPDEST SWAP2 POP PUSH2 0xE28 DUP3 DUP5 PUSH2 0x1018 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT DUP2 AND PUSH2 0xE39 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDE2 DUP3 PUSH1 0x60 SHL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDE2 DUP3 PUSH2 0x1062 JUMP JUMPDEST PUSH2 0xE39 PUSH2 0x1085 DUP3 PUSH2 0xDD5 JUMP JUMPDEST PUSH2 0x106E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1096 DUP3 DUP8 PUSH2 0x1052 JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SWAP2 POP PUSH2 0x10A6 DUP3 DUP7 PUSH2 0x1079 JUMP JUMPDEST PUSH1 0x14 DUP3 ADD SWAP2 POP PUSH2 0x10B6 DUP3 DUP6 PUSH2 0xEBD JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x10C6 DUP3 DUP5 PUSH2 0xEBD JUMP JUMPDEST POP PUSH1 0x20 ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDE2 DUP3 PUSH2 0xDD5 JUMP JUMPDEST PUSH2 0xDF1 DUP2 PUSH2 0x10D2 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xDE2 DUP2 PUSH2 0x10DD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1106 JUMPI PUSH2 0x1106 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE28 DUP5 DUP5 PUSH2 0x10E6 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xDE2 DUP2 PUSH2 0xDE8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1132 JUMPI PUSH2 0x1132 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE28 DUP5 DUP5 PUSH2 0x1112 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x114C DUP3 DUP6 PUSH2 0xE30 JUMP JUMPDEST PUSH2 0x1159 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xE30 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x116E DUP3 DUP8 PUSH2 0xE30 JUMP JUMPDEST PUSH2 0x117B PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0xE30 JUMP JUMPDEST PUSH2 0x1188 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0xEBD JUMP JUMPDEST PUSH2 0x1195 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0xE30 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2E DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 DUP2 MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0xF8B JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xDE2 DUP2 PUSH2 0x119E JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND PUSH2 0xDE2 JUMP JUMPDEST PUSH2 0xE39 DUP2 PUSH2 0x11F9 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xDE2 DUP3 DUP5 PUSH2 0x1204 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD SWAP1 DUP2 MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD PUSH2 0xDE2 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x696E76616C696420616365737320636F6E74726F6C206D616E61676572206164 DUP2 MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0xF8B JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xDE2 DUP2 PUSH2 0x1255 JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0xDF1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xDE2 DUP2 PUSH2 0x12A7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x12CF JUMPI PUSH2 0x12CF PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE28 DUP5 DUP5 PUSH2 0x12AF JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x12E9 DUP3 DUP7 PUSH2 0xE30 JUMP JUMPDEST PUSH2 0x12F6 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0xE30 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1195 DUP2 DUP5 PUSH2 0xFC6 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x436F6D7074726F6C6C65723A20496E76616C6964206D61784C6F6F70734C696D DUP2 MSTORE PUSH2 0x1A5D PUSH1 0xF2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0xF8B JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xDE2 DUP2 PUSH2 0x1308 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x1365 DUP3 DUP6 PUSH2 0xEBD JUMP JUMPDEST PUSH2 0x1159 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xEBD JUMP JUMPDEST PUSH1 0x2B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 DUP2 MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0xF8B JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xDE2 DUP2 PUSH2 0x1372 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x7EA CODESIZE SUB DUP1 PUSH2 0x7EA DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x22 SWAP2 PUSH2 0x45D JUMP JUMPDEST PUSH2 0x2E DUP3 DUP3 PUSH1 0x0 PUSH2 0x35 JUMP JUMPDEST POP POP PUSH2 0x63A JUMP JUMPDEST PUSH2 0x3E DUP4 PUSH2 0xF6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH32 0x1CF3B03A6CF19FA2BABA4DF148E9DCABEDEA7F8A5C07840E207E5C089BE95D3E SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x7F JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0xF1 JUMPI PUSH2 0xEF DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5C60DA1B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE9 SWAP2 SWAP1 PUSH2 0x4B4 JUMP JUMPDEST DUP4 PUSH2 0x1F7 JUMP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x126 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11D SWAP1 PUSH2 0x51A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x19A DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5C60DA1B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x167 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18B SWAP2 SWAP1 PUSH2 0x4B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x1B6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11D SWAP1 PUSH2 0x577 JUMP JUMPDEST PUSH32 0xA3F0AD74E5423AEBFD80D3EF4346578335A9A72AEAEE59FF6CB3582B35133D50 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH2 0x21C DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x7C3 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x225 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x242 SWAP2 SWAP1 PUSH2 0x5A9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x27D JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x282 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x294 DUP7 DUP4 DUP4 DUP8 PUSH2 0x29E JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x2DD JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x2D6 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x2D6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11D SWAP1 PUSH2 0x5BC JUMP JUMPDEST POP DUP2 PUSH2 0x2E7 JUMP JUMPDEST PUSH2 0x2E7 DUP4 DUP4 PUSH2 0x2EF JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x2FF JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11D SWAP2 SWAP1 PUSH2 0x629 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x21F JUMP JUMPDEST PUSH2 0x333 DUP2 PUSH2 0x319 JUMP JUMPDEST DUP2 EQ PUSH2 0x33E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x21F DUP2 PUSH2 0x32A JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x387 JUMPI PUSH2 0x387 PUSH2 0x34C JUMP JUMPDEST PUSH1 0x40 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x399 PUSH1 0x40 MLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x3A5 DUP3 DUP3 PUSH2 0x362 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x3C3 JUMPI PUSH2 0x3C3 PUSH2 0x34C JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3EF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3D7 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x40B PUSH2 0x406 DUP5 PUSH2 0x3AA JUMP JUMPDEST PUSH2 0x38E JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x426 JUMPI PUSH2 0x426 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x431 DUP5 DUP3 DUP6 PUSH2 0x3D4 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x44D JUMPI PUSH2 0x44D PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x2E7 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x3F8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x473 JUMPI PUSH2 0x473 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x47F DUP6 DUP6 PUSH2 0x341 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x49E JUMPI PUSH2 0x49E PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4AA DUP6 DUP3 DUP7 ADD PUSH2 0x439 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4C9 JUMPI PUSH2 0x4C9 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2E7 DUP5 DUP5 PUSH2 0x341 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x455243313936373A206E657720626561636F6E206973206E6F74206120636F6E DUP2 MSTORE PUSH5 0x1D1C9858DD PUSH1 0xDA SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x21F DUP2 PUSH2 0x4D5 JUMP JUMPDEST PUSH1 0x30 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x455243313936373A20626561636F6E20696D706C656D656E746174696F6E2069 DUP2 MSTORE PUSH16 0x1CC81B9BDD08184818DBDB9D1C9858DD PUSH1 0x82 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x513 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x21F DUP2 PUSH2 0x52A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x591 DUP3 MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x59F DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x3D4 JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5B5 DUP3 DUP5 PUSH2 0x587 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x21F DUP2 PUSH1 0x1D DUP2 MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x601 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x618 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x3D4 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x21C DUP2 DUP5 PUSH2 0x5F7 JUMP JUMPDEST PUSH2 0x17A DUP1 PUSH2 0x649 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0x13 JUMPI PUSH2 0x11 PUSH2 0x17 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x11 JUMPDEST PUSH2 0x27 PUSH2 0x22 PUSH2 0x29 JUMP JUMPDEST PUSH2 0xC2 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5C PUSH32 0xA3F0AD74E5423AEBFD80D3EF4346578335A9A72AEAEE59FF6CB3582B35133D50 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5C60DA1B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x99 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBD SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0xE1 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x102 DUP2 PUSH2 0xE6 JUMP JUMPDEST DUP2 EQ PUSH2 0x10D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0xF3 DUP2 PUSH2 0xF9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x130 JUMPI PUSH2 0x130 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x13C DUP5 DUP5 PUSH2 0x110 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 NOT SAR SWAP2 SWAP5 0xD1 EXTCODESIZE BASEFEE 0xB6 0xD1 SSTORE PUSH23 0x5300178C7064DE2B6ED3CFF4B63BD08EBFC1A49864736F PUSH13 0x63430008190033416464726573 PUSH20 0x3A206C6F772D6C6576656C2064656C6567617465 KECCAK256 PUSH4 0x616C6C20 PUSH7 0x61696C65646080 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x577 CODESIZE SUB DUP1 PUSH2 0x577 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x11E JUMP JUMPDEST PUSH2 0x38 CALLER PUSH2 0x47 JUMP JUMPDEST PUSH2 0x41 DUP2 PUSH2 0x97 JUMP JUMPDEST POP PUSH2 0x1A8 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0xC7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBE SWAP1 PUSH2 0x147 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x105 DUP2 PUSH2 0xE9 JUMP JUMPDEST DUP2 EQ PUSH2 0x110 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0xF6 DUP2 PUSH2 0xFC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x133 JUMPI PUSH2 0x133 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x13F DUP5 DUP5 PUSH2 0x113 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xF6 DUP2 PUSH1 0x33 DUP2 MSTORE PUSH32 0x5570677261646561626C65426561636F6E3A20696D706C656D656E746174696F PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x6E206973206E6F74206120636F6E747261637400000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0x3C0 DUP1 PUSH2 0x1B7 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x71 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x94 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x9C JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xAD JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0x6A CALLDATASIZE PUSH1 0x4 PUSH2 0x254 JUMP JUMPDEST PUSH2 0xC0 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8B SWAP2 SWAP1 PUSH2 0x28C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6F PUSH2 0x108 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7E JUMP JUMPDEST PUSH2 0x6F PUSH2 0xBB CALLDATASIZE PUSH1 0x4 PUSH2 0x254 JUMP JUMPDEST PUSH2 0x11C JUMP JUMPDEST PUSH2 0xC8 PUSH2 0x15F JUMP JUMPDEST PUSH2 0xD1 DUP2 PUSH2 0x189 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x110 PUSH2 0x15F JUMP JUMPDEST PUSH2 0x11A PUSH1 0x0 PUSH2 0x1D2 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x124 PUSH2 0x15F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x153 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x14A SWAP1 PUSH2 0x2E0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x15C DUP2 PUSH2 0x1D2 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x11A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x14A SWAP1 PUSH2 0x2F0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x1B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x14A SWAP1 PUSH2 0x37A JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x23E DUP2 PUSH2 0x222 JUMP JUMPDEST DUP2 EQ PUSH2 0x15C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x22F DUP2 PUSH2 0x235 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x269 JUMPI PUSH2 0x269 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x275 DUP5 DUP5 PUSH2 0x249 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x286 DUP2 PUSH2 0x222 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x22F DUP3 DUP5 PUSH2 0x27D JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 DUP2 MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x22F DUP2 PUSH2 0x29A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD SWAP1 DUP2 MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD PUSH2 0x22F JUMP JUMPDEST PUSH1 0x33 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x5570677261646561626C65426561636F6E3A20696D706C656D656E746174696F DUP2 MSTORE PUSH19 0x1B881A5CC81B9BDD08184818DBDB9D1C9858DD PUSH1 0x6A SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x2D9 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x22F DUP2 PUSH2 0x32A JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH18 0xA7C74DEECC6ADC9B45C53947A48E1A9DA973 COINBASE PREVRANDAO 0xAC STATICCALL 0xC9 TLOAD SWAP12 0xC9 INVALID 0xEE 0xEF 0xD9 RETURN PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 COINBASE XOR GASLIMIT 0xDB ISZERO SWAP13 SWAP13 LT 0x24 NUMBER 0xC0 DELEGATECALL 0xEB REVERT 0xAE PUSH17 0x48ED739CB793E7A9D9E30BA71DBCCF3664 PUSH20 0x6F6C634300081900330000000000000000000000 ","sourceMap":"1034:7005:53:-:0;;;2570:177;;;;;;;;;-1:-1:-1;2718:22:53;:20;:22::i;:::-;1034:7005;;5939:280:3;6007:13;;;;;;;6006:14;5998:66;;;;-1:-1:-1;;;5998:66:3;;;;;;;:::i;:::-;;;;;;;;;6078:12;;6094:15;6078:12;;;:31;6074:139;;6125:12;:30;;-1:-1:-1;;6125:30:3;6140:15;6125:30;;;;;;6174:28;;;;;;;:::i;:::-;;;;;;;;6074:139;5939:280::o;786:419:69:-;990:2;1003:47;;;975:18;;1067:131;975:18;641:2;113:19;;322:34;165:4;156:14;;299:58;-1:-1:-1;;;374:15:69;;;367:34;762:12;;;414:366;1067:131;1059:139;786:419;-1:-1:-1;;786:419:69:o;1421:214::-;1286:4;1275:16;;1374:35;;1548:2;1533:18;;1561:67;1303:112;1421:214;1034:7005:53;;;;;;"},"deployedBytecode":{"functionDebugData":{"@SALT_18248":{"entryPoint":null,"id":18248,"parameterSlots":0,"returnSlots":0},"@__AccessControlled_init_4931":{"entryPoint":3243,"id":4931,"parameterSlots":1,"returnSlots":0},"@__AccessControlled_init_unchained_4943":{"entryPoint":3428,"id":4943,"parameterSlots":1,"returnSlots":0},"@__Ownable2Step_init_26":{"entryPoint":3381,"id":26,"parameterSlots":0,"returnSlots":0},"@__Ownable_init_unchained_145":{"entryPoint":3467,"id":145,"parameterSlots":0,"returnSlots":0},"@_checkAccessAllowed_5034":{"entryPoint":2955,"id":5034,"parameterSlots":1,"returnSlots":0},"@_checkOwner_176":{"entryPoint":2755,"id":176,"parameterSlots":0,"returnSlots":0},"@_msgSender_2798":{"entryPoint":null,"id":2798,"parameterSlots":0,"returnSlots":1},"@_setAccessControlManager_5004":{"entryPoint":2797,"id":5004,"parameterSlots":1,"returnSlots":0},"@_setMaxLoopsLimit_10317":{"entryPoint":3113,"id":10317,"parameterSlots":1,"returnSlots":0},"@_transferOwnership_233":{"entryPoint":3299,"id":233,"parameterSlots":1,"returnSlots":0},"@_transferOwnership_78":{"entryPoint":2930,"id":78,"parameterSlots":1,"returnSlots":0},"@acceptOwnership_100":{"entryPoint":719,"id":100,"parameterSlots":0,"returnSlots":0},"@accessControlManager_4966":{"entryPoint":null,"id":4966,"parameterSlots":0,"returnSlots":1},"@beacon_18252":{"entryPoint":null,"id":18252,"parameterSlots":0,"returnSlots":0},"@computeVaultAddress_18574":{"entryPoint":852,"id":18574,"parameterSlots":1,"returnSlots":1},"@createERC4626_18518":{"entryPoint":1130,"id":18518,"parameterSlots":1,"returnSlots":1},"@createdVaults_18264":{"entryPoint":null,"id":18264,"parameterSlots":0,"returnSlots":0},"@ensureNonzeroAddress_16359":{"entryPoint":3204,"id":16359,"parameterSlots":1,"returnSlots":0},"@initialize_18360":{"entryPoint":2264,"id":18360,"parameterSlots":5,"returnSlots":0},"@isContract_2458":{"entryPoint":null,"id":2458,"parameterSlots":1,"returnSlots":1},"@maxLoopsLimit_10271":{"entryPoint":null,"id":10271,"parameterSlots":0,"returnSlots":0},"@owner_162":{"entryPoint":null,"id":162,"parameterSlots":0,"returnSlots":1},"@pendingOwner_41":{"entryPoint":null,"id":41,"parameterSlots":0,"returnSlots":1},"@poolRegistry_18256":{"entryPoint":null,"id":18256,"parameterSlots":0,"returnSlots":0},"@renounceOwnership_190":{"entryPoint":699,"id":190,"parameterSlots":0,"returnSlots":0},"@rewardRecipient_18259":{"entryPoint":null,"id":18259,"parameterSlots":0,"returnSlots":0},"@setAccessControlManager_4956":{"entryPoint":679,"id":4956,"parameterSlots":1,"returnSlots":0},"@setMaxLoopsLimit_18399":{"entryPoint":781,"id":18399,"parameterSlots":1,"returnSlots":0},"@setRewardRecipient_18384":{"entryPoint":1988,"id":18384,"parameterSlots":1,"returnSlots":0},"@transferOwnership_61":{"entryPoint":2151,"id":61,"parameterSlots":1,"returnSlots":0},"abi_decode_t_address":{"entryPoint":3580,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_address_fromMemory":{"entryPoint":4370,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_bool_fromMemory":{"entryPoint":4783,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_ComptrollerInterface_$9353_fromMemory":{"entryPoint":4326,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_uint256":{"entryPoint":3729,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":3591,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":4381,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_addresst_addresst_uint256":{"entryPoint":3793,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":4794,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_ComptrollerInterface_$9353_fromMemory":{"entryPoint":4337,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":3740,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_address_to_t_address_fromStack":{"entryPoint":3632,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_address_to_t_address_nonPadded_inplace_fromStack":{"entryPoint":4217,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_bytes1_to_t_bytes1_nonPadded_inplace_fromStack":{"entryPoint":4178,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_bytes32_to_t_bytes32_fromStack":{"entryPoint":3773,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack":{"entryPoint":4038,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":4120,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_contract$_ERC4626Upgradeable_$2003_to_t_address_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_PoolRegistryInterface_$10404_to_t_address_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_UpgradeableBeacon_$4411_to_t_address_fromStack":{"entryPoint":3700,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_rational_1_by_1_to_t_uint8_fromStack":{"entryPoint":4612,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack":{"entryPoint":3913,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack":{"entryPoint":4872,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack":{"entryPoint":4693,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack":{"entryPoint":4510,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack":{"entryPoint":4978,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_uint256_to_t_uint256_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_packed_t_bytes1_t_address_t_bytes32_t_bytes32__to_t_bytes1_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":4234,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":4154,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":3647,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":4414,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_string_memory_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed":{"entryPoint":4827,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_address__to_t_address_t_address_t_uint256_t_address__fromStack_reversed":{"entryPoint":4448,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":4088,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_string_memory_ptr__to_t_address_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":3779,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_ERC4626Upgradeable_$2003__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IAccessControlManagerV8_$5080__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_PoolRegistryInterface_$10404__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_UpgradeableBeacon_$4411__to_t_address__fromStack_reversed":{"entryPoint":3709,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed":{"entryPoint":4621,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":3986,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":4935,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":4759,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":4585,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":4635,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":5050,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":4951,"id":null,"parameterSlots":3,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_length_t_bytes_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_string_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_address":{"entryPoint":3541,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_bool":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_bytes1":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_bytes32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_ComptrollerInterface_$9353":{"entryPoint":4306,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_rational_1_by_1":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_ERC4626Upgradeable_$2003_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_PoolRegistryInterface_$10404_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_UpgradeableBeacon_$4411_to_t_address":{"entryPoint":3689,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_rational_1_by_1_to_t_uint8":{"entryPoint":4601,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint160_to_t_address":{"entryPoint":3678,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint160_to_t_uint160":{"entryPoint":3661,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":4002,"id":null,"parameterSlots":3,"returnSlots":0},"identity":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"leftAlign_t_address":{"entryPoint":4206,"id":null,"parameterSlots":1,"returnSlots":1},"leftAlign_t_bytes1":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"leftAlign_t_bytes32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"leftAlign_t_uint160":{"entryPoint":4194,"id":null,"parameterSlots":1,"returnSlots":1},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"round_up_to_mul_of_32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"shift_left_96":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_address":{"entryPoint":3560,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_bool":{"entryPoint":4775,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_ComptrollerInterface_$9353":{"entryPoint":4317,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_uint256":{"entryPoint":3723,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:22942:69","nodeType":"YulBlock","src":"0:22942:69","statements":[{"body":{"nativeSrc":"47:35:69","nodeType":"YulBlock","src":"47:35:69","statements":[{"nativeSrc":"57:19:69","nodeType":"YulAssignment","src":"57:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"73:2:69","nodeType":"YulLiteral","src":"73:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"67:5:69","nodeType":"YulIdentifier","src":"67:5:69"},"nativeSrc":"67:9:69","nodeType":"YulFunctionCall","src":"67:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"57:6:69","nodeType":"YulIdentifier","src":"57:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"7:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"40:6:69","nodeType":"YulTypedName","src":"40:6:69","type":""}],"src":"7:75:69"},{"body":{"nativeSrc":"177:28:69","nodeType":"YulBlock","src":"177:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"194:1:69","nodeType":"YulLiteral","src":"194:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"197:1:69","nodeType":"YulLiteral","src":"197:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"187:6:69","nodeType":"YulIdentifier","src":"187:6:69"},"nativeSrc":"187:12:69","nodeType":"YulFunctionCall","src":"187:12:69"},"nativeSrc":"187:12:69","nodeType":"YulExpressionStatement","src":"187:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"88:117:69","nodeType":"YulFunctionDefinition","src":"88:117:69"},{"body":{"nativeSrc":"300:28:69","nodeType":"YulBlock","src":"300:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"317:1:69","nodeType":"YulLiteral","src":"317:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"320:1:69","nodeType":"YulLiteral","src":"320:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},"nativeSrc":"310:12:69","nodeType":"YulFunctionCall","src":"310:12:69"},"nativeSrc":"310:12:69","nodeType":"YulExpressionStatement","src":"310:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"211:117:69","nodeType":"YulFunctionDefinition","src":"211:117:69"},{"body":{"nativeSrc":"379:81:69","nodeType":"YulBlock","src":"379:81:69","statements":[{"nativeSrc":"389:65:69","nodeType":"YulAssignment","src":"389:65:69","value":{"arguments":[{"name":"value","nativeSrc":"404:5:69","nodeType":"YulIdentifier","src":"404:5:69"},{"kind":"number","nativeSrc":"411:42:69","nodeType":"YulLiteral","src":"411:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"400:3:69","nodeType":"YulIdentifier","src":"400:3:69"},"nativeSrc":"400:54:69","nodeType":"YulFunctionCall","src":"400:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"389:7:69","nodeType":"YulIdentifier","src":"389:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"334:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"361:5:69","nodeType":"YulTypedName","src":"361:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"371:7:69","nodeType":"YulTypedName","src":"371:7:69","type":""}],"src":"334:126:69"},{"body":{"nativeSrc":"511:51:69","nodeType":"YulBlock","src":"511:51:69","statements":[{"nativeSrc":"521:35:69","nodeType":"YulAssignment","src":"521:35:69","value":{"arguments":[{"name":"value","nativeSrc":"550:5:69","nodeType":"YulIdentifier","src":"550:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"532:17:69","nodeType":"YulIdentifier","src":"532:17:69"},"nativeSrc":"532:24:69","nodeType":"YulFunctionCall","src":"532:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"521:7:69","nodeType":"YulIdentifier","src":"521:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"466:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"493:5:69","nodeType":"YulTypedName","src":"493:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"503:7:69","nodeType":"YulTypedName","src":"503:7:69","type":""}],"src":"466:96:69"},{"body":{"nativeSrc":"611:79:69","nodeType":"YulBlock","src":"611:79:69","statements":[{"body":{"nativeSrc":"668:16:69","nodeType":"YulBlock","src":"668:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"677:1:69","nodeType":"YulLiteral","src":"677:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"680:1:69","nodeType":"YulLiteral","src":"680:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"670:6:69","nodeType":"YulIdentifier","src":"670:6:69"},"nativeSrc":"670:12:69","nodeType":"YulFunctionCall","src":"670:12:69"},"nativeSrc":"670:12:69","nodeType":"YulExpressionStatement","src":"670:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"634:5:69","nodeType":"YulIdentifier","src":"634:5:69"},{"arguments":[{"name":"value","nativeSrc":"659:5:69","nodeType":"YulIdentifier","src":"659:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"641:17:69","nodeType":"YulIdentifier","src":"641:17:69"},"nativeSrc":"641:24:69","nodeType":"YulFunctionCall","src":"641:24:69"}],"functionName":{"name":"eq","nativeSrc":"631:2:69","nodeType":"YulIdentifier","src":"631:2:69"},"nativeSrc":"631:35:69","nodeType":"YulFunctionCall","src":"631:35:69"}],"functionName":{"name":"iszero","nativeSrc":"624:6:69","nodeType":"YulIdentifier","src":"624:6:69"},"nativeSrc":"624:43:69","nodeType":"YulFunctionCall","src":"624:43:69"},"nativeSrc":"621:63:69","nodeType":"YulIf","src":"621:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"568:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"604:5:69","nodeType":"YulTypedName","src":"604:5:69","type":""}],"src":"568:122:69"},{"body":{"nativeSrc":"748:87:69","nodeType":"YulBlock","src":"748:87:69","statements":[{"nativeSrc":"758:29:69","nodeType":"YulAssignment","src":"758:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"780:6:69","nodeType":"YulIdentifier","src":"780:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"767:12:69","nodeType":"YulIdentifier","src":"767:12:69"},"nativeSrc":"767:20:69","nodeType":"YulFunctionCall","src":"767:20:69"},"variableNames":[{"name":"value","nativeSrc":"758:5:69","nodeType":"YulIdentifier","src":"758:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"823:5:69","nodeType":"YulIdentifier","src":"823:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"796:26:69","nodeType":"YulIdentifier","src":"796:26:69"},"nativeSrc":"796:33:69","nodeType":"YulFunctionCall","src":"796:33:69"},"nativeSrc":"796:33:69","nodeType":"YulExpressionStatement","src":"796:33:69"}]},"name":"abi_decode_t_address","nativeSrc":"696:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"726:6:69","nodeType":"YulTypedName","src":"726:6:69","type":""},{"name":"end","nativeSrc":"734:3:69","nodeType":"YulTypedName","src":"734:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"742:5:69","nodeType":"YulTypedName","src":"742:5:69","type":""}],"src":"696:139:69"},{"body":{"nativeSrc":"907:263:69","nodeType":"YulBlock","src":"907:263:69","statements":[{"body":{"nativeSrc":"953:83:69","nodeType":"YulBlock","src":"953:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"955:77:69","nodeType":"YulIdentifier","src":"955:77:69"},"nativeSrc":"955:79:69","nodeType":"YulFunctionCall","src":"955:79:69"},"nativeSrc":"955:79:69","nodeType":"YulExpressionStatement","src":"955:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"928:7:69","nodeType":"YulIdentifier","src":"928:7:69"},{"name":"headStart","nativeSrc":"937:9:69","nodeType":"YulIdentifier","src":"937:9:69"}],"functionName":{"name":"sub","nativeSrc":"924:3:69","nodeType":"YulIdentifier","src":"924:3:69"},"nativeSrc":"924:23:69","nodeType":"YulFunctionCall","src":"924:23:69"},{"kind":"number","nativeSrc":"949:2:69","nodeType":"YulLiteral","src":"949:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"920:3:69","nodeType":"YulIdentifier","src":"920:3:69"},"nativeSrc":"920:32:69","nodeType":"YulFunctionCall","src":"920:32:69"},"nativeSrc":"917:119:69","nodeType":"YulIf","src":"917:119:69"},{"nativeSrc":"1046:117:69","nodeType":"YulBlock","src":"1046:117:69","statements":[{"nativeSrc":"1061:15:69","nodeType":"YulVariableDeclaration","src":"1061:15:69","value":{"kind":"number","nativeSrc":"1075:1:69","nodeType":"YulLiteral","src":"1075:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"1065:6:69","nodeType":"YulTypedName","src":"1065:6:69","type":""}]},{"nativeSrc":"1090:63:69","nodeType":"YulAssignment","src":"1090:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1125:9:69","nodeType":"YulIdentifier","src":"1125:9:69"},{"name":"offset","nativeSrc":"1136:6:69","nodeType":"YulIdentifier","src":"1136:6:69"}],"functionName":{"name":"add","nativeSrc":"1121:3:69","nodeType":"YulIdentifier","src":"1121:3:69"},"nativeSrc":"1121:22:69","nodeType":"YulFunctionCall","src":"1121:22:69"},{"name":"dataEnd","nativeSrc":"1145:7:69","nodeType":"YulIdentifier","src":"1145:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"1100:20:69","nodeType":"YulIdentifier","src":"1100:20:69"},"nativeSrc":"1100:53:69","nodeType":"YulFunctionCall","src":"1100:53:69"},"variableNames":[{"name":"value0","nativeSrc":"1090:6:69","nodeType":"YulIdentifier","src":"1090:6:69"}]}]}]},"name":"abi_decode_tuple_t_address","nativeSrc":"841:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"877:9:69","nodeType":"YulTypedName","src":"877:9:69","type":""},{"name":"dataEnd","nativeSrc":"888:7:69","nodeType":"YulTypedName","src":"888:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"900:6:69","nodeType":"YulTypedName","src":"900:6:69","type":""}],"src":"841:329:69"},{"body":{"nativeSrc":"1241:53:69","nodeType":"YulBlock","src":"1241:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"1258:3:69","nodeType":"YulIdentifier","src":"1258:3:69"},{"arguments":[{"name":"value","nativeSrc":"1281:5:69","nodeType":"YulIdentifier","src":"1281:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"1263:17:69","nodeType":"YulIdentifier","src":"1263:17:69"},"nativeSrc":"1263:24:69","nodeType":"YulFunctionCall","src":"1263:24:69"}],"functionName":{"name":"mstore","nativeSrc":"1251:6:69","nodeType":"YulIdentifier","src":"1251:6:69"},"nativeSrc":"1251:37:69","nodeType":"YulFunctionCall","src":"1251:37:69"},"nativeSrc":"1251:37:69","nodeType":"YulExpressionStatement","src":"1251:37:69"}]},"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"1176:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1229:5:69","nodeType":"YulTypedName","src":"1229:5:69","type":""},{"name":"pos","nativeSrc":"1236:3:69","nodeType":"YulTypedName","src":"1236:3:69","type":""}],"src":"1176:118:69"},{"body":{"nativeSrc":"1398:124:69","nodeType":"YulBlock","src":"1398:124:69","statements":[{"nativeSrc":"1408:26:69","nodeType":"YulAssignment","src":"1408:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"1420:9:69","nodeType":"YulIdentifier","src":"1420:9:69"},{"kind":"number","nativeSrc":"1431:2:69","nodeType":"YulLiteral","src":"1431:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1416:3:69","nodeType":"YulIdentifier","src":"1416:3:69"},"nativeSrc":"1416:18:69","nodeType":"YulFunctionCall","src":"1416:18:69"},"variableNames":[{"name":"tail","nativeSrc":"1408:4:69","nodeType":"YulIdentifier","src":"1408:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"1488:6:69","nodeType":"YulIdentifier","src":"1488:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"1501:9:69","nodeType":"YulIdentifier","src":"1501:9:69"},{"kind":"number","nativeSrc":"1512:1:69","nodeType":"YulLiteral","src":"1512:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1497:3:69","nodeType":"YulIdentifier","src":"1497:3:69"},"nativeSrc":"1497:17:69","nodeType":"YulFunctionCall","src":"1497:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"1444:43:69","nodeType":"YulIdentifier","src":"1444:43:69"},"nativeSrc":"1444:71:69","nodeType":"YulFunctionCall","src":"1444:71:69"},"nativeSrc":"1444:71:69","nodeType":"YulExpressionStatement","src":"1444:71:69"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"1300:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1370:9:69","nodeType":"YulTypedName","src":"1370:9:69","type":""},{"name":"value0","nativeSrc":"1382:6:69","nodeType":"YulTypedName","src":"1382:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1393:4:69","nodeType":"YulTypedName","src":"1393:4:69","type":""}],"src":"1300:222:69"},{"body":{"nativeSrc":"1560:28:69","nodeType":"YulBlock","src":"1560:28:69","statements":[{"nativeSrc":"1570:12:69","nodeType":"YulAssignment","src":"1570:12:69","value":{"name":"value","nativeSrc":"1577:5:69","nodeType":"YulIdentifier","src":"1577:5:69"},"variableNames":[{"name":"ret","nativeSrc":"1570:3:69","nodeType":"YulIdentifier","src":"1570:3:69"}]}]},"name":"identity","nativeSrc":"1528:60:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1546:5:69","nodeType":"YulTypedName","src":"1546:5:69","type":""}],"returnVariables":[{"name":"ret","nativeSrc":"1556:3:69","nodeType":"YulTypedName","src":"1556:3:69","type":""}],"src":"1528:60:69"},{"body":{"nativeSrc":"1654:82:69","nodeType":"YulBlock","src":"1654:82:69","statements":[{"nativeSrc":"1664:66:69","nodeType":"YulAssignment","src":"1664:66:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1722:5:69","nodeType":"YulIdentifier","src":"1722:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"1704:17:69","nodeType":"YulIdentifier","src":"1704:17:69"},"nativeSrc":"1704:24:69","nodeType":"YulFunctionCall","src":"1704:24:69"}],"functionName":{"name":"identity","nativeSrc":"1695:8:69","nodeType":"YulIdentifier","src":"1695:8:69"},"nativeSrc":"1695:34:69","nodeType":"YulFunctionCall","src":"1695:34:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"1677:17:69","nodeType":"YulIdentifier","src":"1677:17:69"},"nativeSrc":"1677:53:69","nodeType":"YulFunctionCall","src":"1677:53:69"},"variableNames":[{"name":"converted","nativeSrc":"1664:9:69","nodeType":"YulIdentifier","src":"1664:9:69"}]}]},"name":"convert_t_uint160_to_t_uint160","nativeSrc":"1594:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1634:5:69","nodeType":"YulTypedName","src":"1634:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"1644:9:69","nodeType":"YulTypedName","src":"1644:9:69","type":""}],"src":"1594:142:69"},{"body":{"nativeSrc":"1802:66:69","nodeType":"YulBlock","src":"1802:66:69","statements":[{"nativeSrc":"1812:50:69","nodeType":"YulAssignment","src":"1812:50:69","value":{"arguments":[{"name":"value","nativeSrc":"1856:5:69","nodeType":"YulIdentifier","src":"1856:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_uint160","nativeSrc":"1825:30:69","nodeType":"YulIdentifier","src":"1825:30:69"},"nativeSrc":"1825:37:69","nodeType":"YulFunctionCall","src":"1825:37:69"},"variableNames":[{"name":"converted","nativeSrc":"1812:9:69","nodeType":"YulIdentifier","src":"1812:9:69"}]}]},"name":"convert_t_uint160_to_t_address","nativeSrc":"1742:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1782:5:69","nodeType":"YulTypedName","src":"1782:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"1792:9:69","nodeType":"YulTypedName","src":"1792:9:69","type":""}],"src":"1742:126:69"},{"body":{"nativeSrc":"1960:66:69","nodeType":"YulBlock","src":"1960:66:69","statements":[{"nativeSrc":"1970:50:69","nodeType":"YulAssignment","src":"1970:50:69","value":{"arguments":[{"name":"value","nativeSrc":"2014:5:69","nodeType":"YulIdentifier","src":"2014:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"1983:30:69","nodeType":"YulIdentifier","src":"1983:30:69"},"nativeSrc":"1983:37:69","nodeType":"YulFunctionCall","src":"1983:37:69"},"variableNames":[{"name":"converted","nativeSrc":"1970:9:69","nodeType":"YulIdentifier","src":"1970:9:69"}]}]},"name":"convert_t_contract$_UpgradeableBeacon_$4411_to_t_address","nativeSrc":"1874:152:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1940:5:69","nodeType":"YulTypedName","src":"1940:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"1950:9:69","nodeType":"YulTypedName","src":"1950:9:69","type":""}],"src":"1874:152:69"},{"body":{"nativeSrc":"2123:92:69","nodeType":"YulBlock","src":"2123:92:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"2140:3:69","nodeType":"YulIdentifier","src":"2140:3:69"},{"arguments":[{"name":"value","nativeSrc":"2202:5:69","nodeType":"YulIdentifier","src":"2202:5:69"}],"functionName":{"name":"convert_t_contract$_UpgradeableBeacon_$4411_to_t_address","nativeSrc":"2145:56:69","nodeType":"YulIdentifier","src":"2145:56:69"},"nativeSrc":"2145:63:69","nodeType":"YulFunctionCall","src":"2145:63:69"}],"functionName":{"name":"mstore","nativeSrc":"2133:6:69","nodeType":"YulIdentifier","src":"2133:6:69"},"nativeSrc":"2133:76:69","nodeType":"YulFunctionCall","src":"2133:76:69"},"nativeSrc":"2133:76:69","nodeType":"YulExpressionStatement","src":"2133:76:69"}]},"name":"abi_encode_t_contract$_UpgradeableBeacon_$4411_to_t_address_fromStack","nativeSrc":"2032:183:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2111:5:69","nodeType":"YulTypedName","src":"2111:5:69","type":""},{"name":"pos","nativeSrc":"2118:3:69","nodeType":"YulTypedName","src":"2118:3:69","type":""}],"src":"2032:183:69"},{"body":{"nativeSrc":"2345:150:69","nodeType":"YulBlock","src":"2345:150:69","statements":[{"nativeSrc":"2355:26:69","nodeType":"YulAssignment","src":"2355:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"2367:9:69","nodeType":"YulIdentifier","src":"2367:9:69"},{"kind":"number","nativeSrc":"2378:2:69","nodeType":"YulLiteral","src":"2378:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2363:3:69","nodeType":"YulIdentifier","src":"2363:3:69"},"nativeSrc":"2363:18:69","nodeType":"YulFunctionCall","src":"2363:18:69"},"variableNames":[{"name":"tail","nativeSrc":"2355:4:69","nodeType":"YulIdentifier","src":"2355:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"2461:6:69","nodeType":"YulIdentifier","src":"2461:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"2474:9:69","nodeType":"YulIdentifier","src":"2474:9:69"},{"kind":"number","nativeSrc":"2485:1:69","nodeType":"YulLiteral","src":"2485:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"2470:3:69","nodeType":"YulIdentifier","src":"2470:3:69"},"nativeSrc":"2470:17:69","nodeType":"YulFunctionCall","src":"2470:17:69"}],"functionName":{"name":"abi_encode_t_contract$_UpgradeableBeacon_$4411_to_t_address_fromStack","nativeSrc":"2391:69:69","nodeType":"YulIdentifier","src":"2391:69:69"},"nativeSrc":"2391:97:69","nodeType":"YulFunctionCall","src":"2391:97:69"},"nativeSrc":"2391:97:69","nodeType":"YulExpressionStatement","src":"2391:97:69"}]},"name":"abi_encode_tuple_t_contract$_UpgradeableBeacon_$4411__to_t_address__fromStack_reversed","nativeSrc":"2221:274:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2317:9:69","nodeType":"YulTypedName","src":"2317:9:69","type":""},{"name":"value0","nativeSrc":"2329:6:69","nodeType":"YulTypedName","src":"2329:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2340:4:69","nodeType":"YulTypedName","src":"2340:4:69","type":""}],"src":"2221:274:69"},{"body":{"nativeSrc":"2546:32:69","nodeType":"YulBlock","src":"2546:32:69","statements":[{"nativeSrc":"2556:16:69","nodeType":"YulAssignment","src":"2556:16:69","value":{"name":"value","nativeSrc":"2567:5:69","nodeType":"YulIdentifier","src":"2567:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"2556:7:69","nodeType":"YulIdentifier","src":"2556:7:69"}]}]},"name":"cleanup_t_uint256","nativeSrc":"2501:77:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2528:5:69","nodeType":"YulTypedName","src":"2528:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"2538:7:69","nodeType":"YulTypedName","src":"2538:7:69","type":""}],"src":"2501:77:69"},{"body":{"nativeSrc":"2627:79:69","nodeType":"YulBlock","src":"2627:79:69","statements":[{"body":{"nativeSrc":"2684:16:69","nodeType":"YulBlock","src":"2684:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2693:1:69","nodeType":"YulLiteral","src":"2693:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"2696:1:69","nodeType":"YulLiteral","src":"2696:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2686:6:69","nodeType":"YulIdentifier","src":"2686:6:69"},"nativeSrc":"2686:12:69","nodeType":"YulFunctionCall","src":"2686:12:69"},"nativeSrc":"2686:12:69","nodeType":"YulExpressionStatement","src":"2686:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"2650:5:69","nodeType":"YulIdentifier","src":"2650:5:69"},{"arguments":[{"name":"value","nativeSrc":"2675:5:69","nodeType":"YulIdentifier","src":"2675:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"2657:17:69","nodeType":"YulIdentifier","src":"2657:17:69"},"nativeSrc":"2657:24:69","nodeType":"YulFunctionCall","src":"2657:24:69"}],"functionName":{"name":"eq","nativeSrc":"2647:2:69","nodeType":"YulIdentifier","src":"2647:2:69"},"nativeSrc":"2647:35:69","nodeType":"YulFunctionCall","src":"2647:35:69"}],"functionName":{"name":"iszero","nativeSrc":"2640:6:69","nodeType":"YulIdentifier","src":"2640:6:69"},"nativeSrc":"2640:43:69","nodeType":"YulFunctionCall","src":"2640:43:69"},"nativeSrc":"2637:63:69","nodeType":"YulIf","src":"2637:63:69"}]},"name":"validator_revert_t_uint256","nativeSrc":"2584:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2620:5:69","nodeType":"YulTypedName","src":"2620:5:69","type":""}],"src":"2584:122:69"},{"body":{"nativeSrc":"2764:87:69","nodeType":"YulBlock","src":"2764:87:69","statements":[{"nativeSrc":"2774:29:69","nodeType":"YulAssignment","src":"2774:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"2796:6:69","nodeType":"YulIdentifier","src":"2796:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"2783:12:69","nodeType":"YulIdentifier","src":"2783:12:69"},"nativeSrc":"2783:20:69","nodeType":"YulFunctionCall","src":"2783:20:69"},"variableNames":[{"name":"value","nativeSrc":"2774:5:69","nodeType":"YulIdentifier","src":"2774:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"2839:5:69","nodeType":"YulIdentifier","src":"2839:5:69"}],"functionName":{"name":"validator_revert_t_uint256","nativeSrc":"2812:26:69","nodeType":"YulIdentifier","src":"2812:26:69"},"nativeSrc":"2812:33:69","nodeType":"YulFunctionCall","src":"2812:33:69"},"nativeSrc":"2812:33:69","nodeType":"YulExpressionStatement","src":"2812:33:69"}]},"name":"abi_decode_t_uint256","nativeSrc":"2712:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"2742:6:69","nodeType":"YulTypedName","src":"2742:6:69","type":""},{"name":"end","nativeSrc":"2750:3:69","nodeType":"YulTypedName","src":"2750:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"2758:5:69","nodeType":"YulTypedName","src":"2758:5:69","type":""}],"src":"2712:139:69"},{"body":{"nativeSrc":"2923:263:69","nodeType":"YulBlock","src":"2923:263:69","statements":[{"body":{"nativeSrc":"2969:83:69","nodeType":"YulBlock","src":"2969:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"2971:77:69","nodeType":"YulIdentifier","src":"2971:77:69"},"nativeSrc":"2971:79:69","nodeType":"YulFunctionCall","src":"2971:79:69"},"nativeSrc":"2971:79:69","nodeType":"YulExpressionStatement","src":"2971:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"2944:7:69","nodeType":"YulIdentifier","src":"2944:7:69"},{"name":"headStart","nativeSrc":"2953:9:69","nodeType":"YulIdentifier","src":"2953:9:69"}],"functionName":{"name":"sub","nativeSrc":"2940:3:69","nodeType":"YulIdentifier","src":"2940:3:69"},"nativeSrc":"2940:23:69","nodeType":"YulFunctionCall","src":"2940:23:69"},{"kind":"number","nativeSrc":"2965:2:69","nodeType":"YulLiteral","src":"2965:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"2936:3:69","nodeType":"YulIdentifier","src":"2936:3:69"},"nativeSrc":"2936:32:69","nodeType":"YulFunctionCall","src":"2936:32:69"},"nativeSrc":"2933:119:69","nodeType":"YulIf","src":"2933:119:69"},{"nativeSrc":"3062:117:69","nodeType":"YulBlock","src":"3062:117:69","statements":[{"nativeSrc":"3077:15:69","nodeType":"YulVariableDeclaration","src":"3077:15:69","value":{"kind":"number","nativeSrc":"3091:1:69","nodeType":"YulLiteral","src":"3091:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"3081:6:69","nodeType":"YulTypedName","src":"3081:6:69","type":""}]},{"nativeSrc":"3106:63:69","nodeType":"YulAssignment","src":"3106:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3141:9:69","nodeType":"YulIdentifier","src":"3141:9:69"},{"name":"offset","nativeSrc":"3152:6:69","nodeType":"YulIdentifier","src":"3152:6:69"}],"functionName":{"name":"add","nativeSrc":"3137:3:69","nodeType":"YulIdentifier","src":"3137:3:69"},"nativeSrc":"3137:22:69","nodeType":"YulFunctionCall","src":"3137:22:69"},{"name":"dataEnd","nativeSrc":"3161:7:69","nodeType":"YulIdentifier","src":"3161:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"3116:20:69","nodeType":"YulIdentifier","src":"3116:20:69"},"nativeSrc":"3116:53:69","nodeType":"YulFunctionCall","src":"3116:53:69"},"variableNames":[{"name":"value0","nativeSrc":"3106:6:69","nodeType":"YulIdentifier","src":"3106:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint256","nativeSrc":"2857:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2893:9:69","nodeType":"YulTypedName","src":"2893:9:69","type":""},{"name":"dataEnd","nativeSrc":"2904:7:69","nodeType":"YulTypedName","src":"2904:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"2916:6:69","nodeType":"YulTypedName","src":"2916:6:69","type":""}],"src":"2857:329:69"},{"body":{"nativeSrc":"3279:66:69","nodeType":"YulBlock","src":"3279:66:69","statements":[{"nativeSrc":"3289:50:69","nodeType":"YulAssignment","src":"3289:50:69","value":{"arguments":[{"name":"value","nativeSrc":"3333:5:69","nodeType":"YulIdentifier","src":"3333:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"3302:30:69","nodeType":"YulIdentifier","src":"3302:30:69"},"nativeSrc":"3302:37:69","nodeType":"YulFunctionCall","src":"3302:37:69"},"variableNames":[{"name":"converted","nativeSrc":"3289:9:69","nodeType":"YulIdentifier","src":"3289:9:69"}]}]},"name":"convert_t_contract$_ERC4626Upgradeable_$2003_to_t_address","nativeSrc":"3192:153:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3259:5:69","nodeType":"YulTypedName","src":"3259:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"3269:9:69","nodeType":"YulTypedName","src":"3269:9:69","type":""}],"src":"3192:153:69"},{"body":{"nativeSrc":"3443:93:69","nodeType":"YulBlock","src":"3443:93:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"3460:3:69","nodeType":"YulIdentifier","src":"3460:3:69"},{"arguments":[{"name":"value","nativeSrc":"3523:5:69","nodeType":"YulIdentifier","src":"3523:5:69"}],"functionName":{"name":"convert_t_contract$_ERC4626Upgradeable_$2003_to_t_address","nativeSrc":"3465:57:69","nodeType":"YulIdentifier","src":"3465:57:69"},"nativeSrc":"3465:64:69","nodeType":"YulFunctionCall","src":"3465:64:69"}],"functionName":{"name":"mstore","nativeSrc":"3453:6:69","nodeType":"YulIdentifier","src":"3453:6:69"},"nativeSrc":"3453:77:69","nodeType":"YulFunctionCall","src":"3453:77:69"},"nativeSrc":"3453:77:69","nodeType":"YulExpressionStatement","src":"3453:77:69"}]},"name":"abi_encode_t_contract$_ERC4626Upgradeable_$2003_to_t_address_fromStack","nativeSrc":"3351:185:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3431:5:69","nodeType":"YulTypedName","src":"3431:5:69","type":""},{"name":"pos","nativeSrc":"3438:3:69","nodeType":"YulTypedName","src":"3438:3:69","type":""}],"src":"3351:185:69"},{"body":{"nativeSrc":"3667:151:69","nodeType":"YulBlock","src":"3667:151:69","statements":[{"nativeSrc":"3677:26:69","nodeType":"YulAssignment","src":"3677:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"3689:9:69","nodeType":"YulIdentifier","src":"3689:9:69"},{"kind":"number","nativeSrc":"3700:2:69","nodeType":"YulLiteral","src":"3700:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3685:3:69","nodeType":"YulIdentifier","src":"3685:3:69"},"nativeSrc":"3685:18:69","nodeType":"YulFunctionCall","src":"3685:18:69"},"variableNames":[{"name":"tail","nativeSrc":"3677:4:69","nodeType":"YulIdentifier","src":"3677:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"3784:6:69","nodeType":"YulIdentifier","src":"3784:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"3797:9:69","nodeType":"YulIdentifier","src":"3797:9:69"},{"kind":"number","nativeSrc":"3808:1:69","nodeType":"YulLiteral","src":"3808:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"3793:3:69","nodeType":"YulIdentifier","src":"3793:3:69"},"nativeSrc":"3793:17:69","nodeType":"YulFunctionCall","src":"3793:17:69"}],"functionName":{"name":"abi_encode_t_contract$_ERC4626Upgradeable_$2003_to_t_address_fromStack","nativeSrc":"3713:70:69","nodeType":"YulIdentifier","src":"3713:70:69"},"nativeSrc":"3713:98:69","nodeType":"YulFunctionCall","src":"3713:98:69"},"nativeSrc":"3713:98:69","nodeType":"YulExpressionStatement","src":"3713:98:69"}]},"name":"abi_encode_tuple_t_contract$_ERC4626Upgradeable_$2003__to_t_address__fromStack_reversed","nativeSrc":"3542:276:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3639:9:69","nodeType":"YulTypedName","src":"3639:9:69","type":""},{"name":"value0","nativeSrc":"3651:6:69","nodeType":"YulTypedName","src":"3651:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3662:4:69","nodeType":"YulTypedName","src":"3662:4:69","type":""}],"src":"3542:276:69"},{"body":{"nativeSrc":"3915:66:69","nodeType":"YulBlock","src":"3915:66:69","statements":[{"nativeSrc":"3925:50:69","nodeType":"YulAssignment","src":"3925:50:69","value":{"arguments":[{"name":"value","nativeSrc":"3969:5:69","nodeType":"YulIdentifier","src":"3969:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"3938:30:69","nodeType":"YulIdentifier","src":"3938:30:69"},"nativeSrc":"3938:37:69","nodeType":"YulFunctionCall","src":"3938:37:69"},"variableNames":[{"name":"converted","nativeSrc":"3925:9:69","nodeType":"YulIdentifier","src":"3925:9:69"}]}]},"name":"convert_t_contract$_PoolRegistryInterface_$10404_to_t_address","nativeSrc":"3824:157:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3895:5:69","nodeType":"YulTypedName","src":"3895:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"3905:9:69","nodeType":"YulTypedName","src":"3905:9:69","type":""}],"src":"3824:157:69"},{"body":{"nativeSrc":"4083:97:69","nodeType":"YulBlock","src":"4083:97:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"4100:3:69","nodeType":"YulIdentifier","src":"4100:3:69"},{"arguments":[{"name":"value","nativeSrc":"4167:5:69","nodeType":"YulIdentifier","src":"4167:5:69"}],"functionName":{"name":"convert_t_contract$_PoolRegistryInterface_$10404_to_t_address","nativeSrc":"4105:61:69","nodeType":"YulIdentifier","src":"4105:61:69"},"nativeSrc":"4105:68:69","nodeType":"YulFunctionCall","src":"4105:68:69"}],"functionName":{"name":"mstore","nativeSrc":"4093:6:69","nodeType":"YulIdentifier","src":"4093:6:69"},"nativeSrc":"4093:81:69","nodeType":"YulFunctionCall","src":"4093:81:69"},"nativeSrc":"4093:81:69","nodeType":"YulExpressionStatement","src":"4093:81:69"}]},"name":"abi_encode_t_contract$_PoolRegistryInterface_$10404_to_t_address_fromStack","nativeSrc":"3987:193:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4071:5:69","nodeType":"YulTypedName","src":"4071:5:69","type":""},{"name":"pos","nativeSrc":"4078:3:69","nodeType":"YulTypedName","src":"4078:3:69","type":""}],"src":"3987:193:69"},{"body":{"nativeSrc":"4315:155:69","nodeType":"YulBlock","src":"4315:155:69","statements":[{"nativeSrc":"4325:26:69","nodeType":"YulAssignment","src":"4325:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"4337:9:69","nodeType":"YulIdentifier","src":"4337:9:69"},{"kind":"number","nativeSrc":"4348:2:69","nodeType":"YulLiteral","src":"4348:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4333:3:69","nodeType":"YulIdentifier","src":"4333:3:69"},"nativeSrc":"4333:18:69","nodeType":"YulFunctionCall","src":"4333:18:69"},"variableNames":[{"name":"tail","nativeSrc":"4325:4:69","nodeType":"YulIdentifier","src":"4325:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"4436:6:69","nodeType":"YulIdentifier","src":"4436:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"4449:9:69","nodeType":"YulIdentifier","src":"4449:9:69"},{"kind":"number","nativeSrc":"4460:1:69","nodeType":"YulLiteral","src":"4460:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4445:3:69","nodeType":"YulIdentifier","src":"4445:3:69"},"nativeSrc":"4445:17:69","nodeType":"YulFunctionCall","src":"4445:17:69"}],"functionName":{"name":"abi_encode_t_contract$_PoolRegistryInterface_$10404_to_t_address_fromStack","nativeSrc":"4361:74:69","nodeType":"YulIdentifier","src":"4361:74:69"},"nativeSrc":"4361:102:69","nodeType":"YulFunctionCall","src":"4361:102:69"},"nativeSrc":"4361:102:69","nodeType":"YulExpressionStatement","src":"4361:102:69"}]},"name":"abi_encode_tuple_t_contract$_PoolRegistryInterface_$10404__to_t_address__fromStack_reversed","nativeSrc":"4186:284:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4287:9:69","nodeType":"YulTypedName","src":"4287:9:69","type":""},{"name":"value0","nativeSrc":"4299:6:69","nodeType":"YulTypedName","src":"4299:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4310:4:69","nodeType":"YulTypedName","src":"4310:4:69","type":""}],"src":"4186:284:69"},{"body":{"nativeSrc":"4568:66:69","nodeType":"YulBlock","src":"4568:66:69","statements":[{"nativeSrc":"4578:50:69","nodeType":"YulAssignment","src":"4578:50:69","value":{"arguments":[{"name":"value","nativeSrc":"4622:5:69","nodeType":"YulIdentifier","src":"4622:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"4591:30:69","nodeType":"YulIdentifier","src":"4591:30:69"},"nativeSrc":"4591:37:69","nodeType":"YulFunctionCall","src":"4591:37:69"},"variableNames":[{"name":"converted","nativeSrc":"4578:9:69","nodeType":"YulIdentifier","src":"4578:9:69"}]}]},"name":"convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address","nativeSrc":"4476:158:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4548:5:69","nodeType":"YulTypedName","src":"4548:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"4558:9:69","nodeType":"YulTypedName","src":"4558:9:69","type":""}],"src":"4476:158:69"},{"body":{"nativeSrc":"4737:98:69","nodeType":"YulBlock","src":"4737:98:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"4754:3:69","nodeType":"YulIdentifier","src":"4754:3:69"},{"arguments":[{"name":"value","nativeSrc":"4822:5:69","nodeType":"YulIdentifier","src":"4822:5:69"}],"functionName":{"name":"convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address","nativeSrc":"4759:62:69","nodeType":"YulIdentifier","src":"4759:62:69"},"nativeSrc":"4759:69:69","nodeType":"YulFunctionCall","src":"4759:69:69"}],"functionName":{"name":"mstore","nativeSrc":"4747:6:69","nodeType":"YulIdentifier","src":"4747:6:69"},"nativeSrc":"4747:82:69","nodeType":"YulFunctionCall","src":"4747:82:69"},"nativeSrc":"4747:82:69","nodeType":"YulExpressionStatement","src":"4747:82:69"}]},"name":"abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack","nativeSrc":"4640:195:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4725:5:69","nodeType":"YulTypedName","src":"4725:5:69","type":""},{"name":"pos","nativeSrc":"4732:3:69","nodeType":"YulTypedName","src":"4732:3:69","type":""}],"src":"4640:195:69"},{"body":{"nativeSrc":"4971:156:69","nodeType":"YulBlock","src":"4971:156:69","statements":[{"nativeSrc":"4981:26:69","nodeType":"YulAssignment","src":"4981:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"4993:9:69","nodeType":"YulIdentifier","src":"4993:9:69"},{"kind":"number","nativeSrc":"5004:2:69","nodeType":"YulLiteral","src":"5004:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4989:3:69","nodeType":"YulIdentifier","src":"4989:3:69"},"nativeSrc":"4989:18:69","nodeType":"YulFunctionCall","src":"4989:18:69"},"variableNames":[{"name":"tail","nativeSrc":"4981:4:69","nodeType":"YulIdentifier","src":"4981:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"5093:6:69","nodeType":"YulIdentifier","src":"5093:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"5106:9:69","nodeType":"YulIdentifier","src":"5106:9:69"},{"kind":"number","nativeSrc":"5117:1:69","nodeType":"YulLiteral","src":"5117:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5102:3:69","nodeType":"YulIdentifier","src":"5102:3:69"},"nativeSrc":"5102:17:69","nodeType":"YulFunctionCall","src":"5102:17:69"}],"functionName":{"name":"abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack","nativeSrc":"5017:75:69","nodeType":"YulIdentifier","src":"5017:75:69"},"nativeSrc":"5017:103:69","nodeType":"YulFunctionCall","src":"5017:103:69"},"nativeSrc":"5017:103:69","nodeType":"YulExpressionStatement","src":"5017:103:69"}]},"name":"abi_encode_tuple_t_contract$_IAccessControlManagerV8_$5080__to_t_address__fromStack_reversed","nativeSrc":"4841:286:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4943:9:69","nodeType":"YulTypedName","src":"4943:9:69","type":""},{"name":"value0","nativeSrc":"4955:6:69","nodeType":"YulTypedName","src":"4955:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4966:4:69","nodeType":"YulTypedName","src":"4966:4:69","type":""}],"src":"4841:286:69"},{"body":{"nativeSrc":"5178:32:69","nodeType":"YulBlock","src":"5178:32:69","statements":[{"nativeSrc":"5188:16:69","nodeType":"YulAssignment","src":"5188:16:69","value":{"name":"value","nativeSrc":"5199:5:69","nodeType":"YulIdentifier","src":"5199:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"5188:7:69","nodeType":"YulIdentifier","src":"5188:7:69"}]}]},"name":"cleanup_t_bytes32","nativeSrc":"5133:77:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"5160:5:69","nodeType":"YulTypedName","src":"5160:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"5170:7:69","nodeType":"YulTypedName","src":"5170:7:69","type":""}],"src":"5133:77:69"},{"body":{"nativeSrc":"5281:53:69","nodeType":"YulBlock","src":"5281:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"5298:3:69","nodeType":"YulIdentifier","src":"5298:3:69"},{"arguments":[{"name":"value","nativeSrc":"5321:5:69","nodeType":"YulIdentifier","src":"5321:5:69"}],"functionName":{"name":"cleanup_t_bytes32","nativeSrc":"5303:17:69","nodeType":"YulIdentifier","src":"5303:17:69"},"nativeSrc":"5303:24:69","nodeType":"YulFunctionCall","src":"5303:24:69"}],"functionName":{"name":"mstore","nativeSrc":"5291:6:69","nodeType":"YulIdentifier","src":"5291:6:69"},"nativeSrc":"5291:37:69","nodeType":"YulFunctionCall","src":"5291:37:69"},"nativeSrc":"5291:37:69","nodeType":"YulExpressionStatement","src":"5291:37:69"}]},"name":"abi_encode_t_bytes32_to_t_bytes32_fromStack","nativeSrc":"5216:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"5269:5:69","nodeType":"YulTypedName","src":"5269:5:69","type":""},{"name":"pos","nativeSrc":"5276:3:69","nodeType":"YulTypedName","src":"5276:3:69","type":""}],"src":"5216:118:69"},{"body":{"nativeSrc":"5438:124:69","nodeType":"YulBlock","src":"5438:124:69","statements":[{"nativeSrc":"5448:26:69","nodeType":"YulAssignment","src":"5448:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"5460:9:69","nodeType":"YulIdentifier","src":"5460:9:69"},{"kind":"number","nativeSrc":"5471:2:69","nodeType":"YulLiteral","src":"5471:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5456:3:69","nodeType":"YulIdentifier","src":"5456:3:69"},"nativeSrc":"5456:18:69","nodeType":"YulFunctionCall","src":"5456:18:69"},"variableNames":[{"name":"tail","nativeSrc":"5448:4:69","nodeType":"YulIdentifier","src":"5448:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"5528:6:69","nodeType":"YulIdentifier","src":"5528:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"5541:9:69","nodeType":"YulIdentifier","src":"5541:9:69"},{"kind":"number","nativeSrc":"5552:1:69","nodeType":"YulLiteral","src":"5552:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5537:3:69","nodeType":"YulIdentifier","src":"5537:3:69"},"nativeSrc":"5537:17:69","nodeType":"YulFunctionCall","src":"5537:17:69"}],"functionName":{"name":"abi_encode_t_bytes32_to_t_bytes32_fromStack","nativeSrc":"5484:43:69","nodeType":"YulIdentifier","src":"5484:43:69"},"nativeSrc":"5484:71:69","nodeType":"YulFunctionCall","src":"5484:71:69"},"nativeSrc":"5484:71:69","nodeType":"YulExpressionStatement","src":"5484:71:69"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nativeSrc":"5340:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5410:9:69","nodeType":"YulTypedName","src":"5410:9:69","type":""},{"name":"value0","nativeSrc":"5422:6:69","nodeType":"YulTypedName","src":"5422:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"5433:4:69","nodeType":"YulTypedName","src":"5433:4:69","type":""}],"src":"5340:222:69"},{"body":{"nativeSrc":"5633:53:69","nodeType":"YulBlock","src":"5633:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"5650:3:69","nodeType":"YulIdentifier","src":"5650:3:69"},{"arguments":[{"name":"value","nativeSrc":"5673:5:69","nodeType":"YulIdentifier","src":"5673:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"5655:17:69","nodeType":"YulIdentifier","src":"5655:17:69"},"nativeSrc":"5655:24:69","nodeType":"YulFunctionCall","src":"5655:24:69"}],"functionName":{"name":"mstore","nativeSrc":"5643:6:69","nodeType":"YulIdentifier","src":"5643:6:69"},"nativeSrc":"5643:37:69","nodeType":"YulFunctionCall","src":"5643:37:69"},"nativeSrc":"5643:37:69","nodeType":"YulExpressionStatement","src":"5643:37:69"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"5568:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"5621:5:69","nodeType":"YulTypedName","src":"5621:5:69","type":""},{"name":"pos","nativeSrc":"5628:3:69","nodeType":"YulTypedName","src":"5628:3:69","type":""}],"src":"5568:118:69"},{"body":{"nativeSrc":"5790:124:69","nodeType":"YulBlock","src":"5790:124:69","statements":[{"nativeSrc":"5800:26:69","nodeType":"YulAssignment","src":"5800:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"5812:9:69","nodeType":"YulIdentifier","src":"5812:9:69"},{"kind":"number","nativeSrc":"5823:2:69","nodeType":"YulLiteral","src":"5823:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5808:3:69","nodeType":"YulIdentifier","src":"5808:3:69"},"nativeSrc":"5808:18:69","nodeType":"YulFunctionCall","src":"5808:18:69"},"variableNames":[{"name":"tail","nativeSrc":"5800:4:69","nodeType":"YulIdentifier","src":"5800:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"5880:6:69","nodeType":"YulIdentifier","src":"5880:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"5893:9:69","nodeType":"YulIdentifier","src":"5893:9:69"},{"kind":"number","nativeSrc":"5904:1:69","nodeType":"YulLiteral","src":"5904:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5889:3:69","nodeType":"YulIdentifier","src":"5889:3:69"},"nativeSrc":"5889:17:69","nodeType":"YulFunctionCall","src":"5889:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"5836:43:69","nodeType":"YulIdentifier","src":"5836:43:69"},"nativeSrc":"5836:71:69","nodeType":"YulFunctionCall","src":"5836:71:69"},"nativeSrc":"5836:71:69","nodeType":"YulExpressionStatement","src":"5836:71:69"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nativeSrc":"5692:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5762:9:69","nodeType":"YulTypedName","src":"5762:9:69","type":""},{"name":"value0","nativeSrc":"5774:6:69","nodeType":"YulTypedName","src":"5774:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"5785:4:69","nodeType":"YulTypedName","src":"5785:4:69","type":""}],"src":"5692:222:69"},{"body":{"nativeSrc":"6054:777:69","nodeType":"YulBlock","src":"6054:777:69","statements":[{"body":{"nativeSrc":"6101:83:69","nodeType":"YulBlock","src":"6101:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"6103:77:69","nodeType":"YulIdentifier","src":"6103:77:69"},"nativeSrc":"6103:79:69","nodeType":"YulFunctionCall","src":"6103:79:69"},"nativeSrc":"6103:79:69","nodeType":"YulExpressionStatement","src":"6103:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"6075:7:69","nodeType":"YulIdentifier","src":"6075:7:69"},{"name":"headStart","nativeSrc":"6084:9:69","nodeType":"YulIdentifier","src":"6084:9:69"}],"functionName":{"name":"sub","nativeSrc":"6071:3:69","nodeType":"YulIdentifier","src":"6071:3:69"},"nativeSrc":"6071:23:69","nodeType":"YulFunctionCall","src":"6071:23:69"},{"kind":"number","nativeSrc":"6096:3:69","nodeType":"YulLiteral","src":"6096:3:69","type":"","value":"160"}],"functionName":{"name":"slt","nativeSrc":"6067:3:69","nodeType":"YulIdentifier","src":"6067:3:69"},"nativeSrc":"6067:33:69","nodeType":"YulFunctionCall","src":"6067:33:69"},"nativeSrc":"6064:120:69","nodeType":"YulIf","src":"6064:120:69"},{"nativeSrc":"6194:117:69","nodeType":"YulBlock","src":"6194:117:69","statements":[{"nativeSrc":"6209:15:69","nodeType":"YulVariableDeclaration","src":"6209:15:69","value":{"kind":"number","nativeSrc":"6223:1:69","nodeType":"YulLiteral","src":"6223:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"6213:6:69","nodeType":"YulTypedName","src":"6213:6:69","type":""}]},{"nativeSrc":"6238:63:69","nodeType":"YulAssignment","src":"6238:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6273:9:69","nodeType":"YulIdentifier","src":"6273:9:69"},{"name":"offset","nativeSrc":"6284:6:69","nodeType":"YulIdentifier","src":"6284:6:69"}],"functionName":{"name":"add","nativeSrc":"6269:3:69","nodeType":"YulIdentifier","src":"6269:3:69"},"nativeSrc":"6269:22:69","nodeType":"YulFunctionCall","src":"6269:22:69"},{"name":"dataEnd","nativeSrc":"6293:7:69","nodeType":"YulIdentifier","src":"6293:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"6248:20:69","nodeType":"YulIdentifier","src":"6248:20:69"},"nativeSrc":"6248:53:69","nodeType":"YulFunctionCall","src":"6248:53:69"},"variableNames":[{"name":"value0","nativeSrc":"6238:6:69","nodeType":"YulIdentifier","src":"6238:6:69"}]}]},{"nativeSrc":"6321:118:69","nodeType":"YulBlock","src":"6321:118:69","statements":[{"nativeSrc":"6336:16:69","nodeType":"YulVariableDeclaration","src":"6336:16:69","value":{"kind":"number","nativeSrc":"6350:2:69","nodeType":"YulLiteral","src":"6350:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"6340:6:69","nodeType":"YulTypedName","src":"6340:6:69","type":""}]},{"nativeSrc":"6366:63:69","nodeType":"YulAssignment","src":"6366:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6401:9:69","nodeType":"YulIdentifier","src":"6401:9:69"},{"name":"offset","nativeSrc":"6412:6:69","nodeType":"YulIdentifier","src":"6412:6:69"}],"functionName":{"name":"add","nativeSrc":"6397:3:69","nodeType":"YulIdentifier","src":"6397:3:69"},"nativeSrc":"6397:22:69","nodeType":"YulFunctionCall","src":"6397:22:69"},{"name":"dataEnd","nativeSrc":"6421:7:69","nodeType":"YulIdentifier","src":"6421:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"6376:20:69","nodeType":"YulIdentifier","src":"6376:20:69"},"nativeSrc":"6376:53:69","nodeType":"YulFunctionCall","src":"6376:53:69"},"variableNames":[{"name":"value1","nativeSrc":"6366:6:69","nodeType":"YulIdentifier","src":"6366:6:69"}]}]},{"nativeSrc":"6449:118:69","nodeType":"YulBlock","src":"6449:118:69","statements":[{"nativeSrc":"6464:16:69","nodeType":"YulVariableDeclaration","src":"6464:16:69","value":{"kind":"number","nativeSrc":"6478:2:69","nodeType":"YulLiteral","src":"6478:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"6468:6:69","nodeType":"YulTypedName","src":"6468:6:69","type":""}]},{"nativeSrc":"6494:63:69","nodeType":"YulAssignment","src":"6494:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6529:9:69","nodeType":"YulIdentifier","src":"6529:9:69"},{"name":"offset","nativeSrc":"6540:6:69","nodeType":"YulIdentifier","src":"6540:6:69"}],"functionName":{"name":"add","nativeSrc":"6525:3:69","nodeType":"YulIdentifier","src":"6525:3:69"},"nativeSrc":"6525:22:69","nodeType":"YulFunctionCall","src":"6525:22:69"},{"name":"dataEnd","nativeSrc":"6549:7:69","nodeType":"YulIdentifier","src":"6549:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"6504:20:69","nodeType":"YulIdentifier","src":"6504:20:69"},"nativeSrc":"6504:53:69","nodeType":"YulFunctionCall","src":"6504:53:69"},"variableNames":[{"name":"value2","nativeSrc":"6494:6:69","nodeType":"YulIdentifier","src":"6494:6:69"}]}]},{"nativeSrc":"6577:118:69","nodeType":"YulBlock","src":"6577:118:69","statements":[{"nativeSrc":"6592:16:69","nodeType":"YulVariableDeclaration","src":"6592:16:69","value":{"kind":"number","nativeSrc":"6606:2:69","nodeType":"YulLiteral","src":"6606:2:69","type":"","value":"96"},"variables":[{"name":"offset","nativeSrc":"6596:6:69","nodeType":"YulTypedName","src":"6596:6:69","type":""}]},{"nativeSrc":"6622:63:69","nodeType":"YulAssignment","src":"6622:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6657:9:69","nodeType":"YulIdentifier","src":"6657:9:69"},{"name":"offset","nativeSrc":"6668:6:69","nodeType":"YulIdentifier","src":"6668:6:69"}],"functionName":{"name":"add","nativeSrc":"6653:3:69","nodeType":"YulIdentifier","src":"6653:3:69"},"nativeSrc":"6653:22:69","nodeType":"YulFunctionCall","src":"6653:22:69"},{"name":"dataEnd","nativeSrc":"6677:7:69","nodeType":"YulIdentifier","src":"6677:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"6632:20:69","nodeType":"YulIdentifier","src":"6632:20:69"},"nativeSrc":"6632:53:69","nodeType":"YulFunctionCall","src":"6632:53:69"},"variableNames":[{"name":"value3","nativeSrc":"6622:6:69","nodeType":"YulIdentifier","src":"6622:6:69"}]}]},{"nativeSrc":"6705:119:69","nodeType":"YulBlock","src":"6705:119:69","statements":[{"nativeSrc":"6720:17:69","nodeType":"YulVariableDeclaration","src":"6720:17:69","value":{"kind":"number","nativeSrc":"6734:3:69","nodeType":"YulLiteral","src":"6734:3:69","type":"","value":"128"},"variables":[{"name":"offset","nativeSrc":"6724:6:69","nodeType":"YulTypedName","src":"6724:6:69","type":""}]},{"nativeSrc":"6751:63:69","nodeType":"YulAssignment","src":"6751:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6786:9:69","nodeType":"YulIdentifier","src":"6786:9:69"},{"name":"offset","nativeSrc":"6797:6:69","nodeType":"YulIdentifier","src":"6797:6:69"}],"functionName":{"name":"add","nativeSrc":"6782:3:69","nodeType":"YulIdentifier","src":"6782:3:69"},"nativeSrc":"6782:22:69","nodeType":"YulFunctionCall","src":"6782:22:69"},{"name":"dataEnd","nativeSrc":"6806:7:69","nodeType":"YulIdentifier","src":"6806:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"6761:20:69","nodeType":"YulIdentifier","src":"6761:20:69"},"nativeSrc":"6761:53:69","nodeType":"YulFunctionCall","src":"6761:53:69"},"variableNames":[{"name":"value4","nativeSrc":"6751:6:69","nodeType":"YulIdentifier","src":"6751:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_addresst_uint256","nativeSrc":"5920:911:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5992:9:69","nodeType":"YulTypedName","src":"5992:9:69","type":""},{"name":"dataEnd","nativeSrc":"6003:7:69","nodeType":"YulTypedName","src":"6003:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"6015:6:69","nodeType":"YulTypedName","src":"6015:6:69","type":""},{"name":"value1","nativeSrc":"6023:6:69","nodeType":"YulTypedName","src":"6023:6:69","type":""},{"name":"value2","nativeSrc":"6031:6:69","nodeType":"YulTypedName","src":"6031:6:69","type":""},{"name":"value3","nativeSrc":"6039:6:69","nodeType":"YulTypedName","src":"6039:6:69","type":""},{"name":"value4","nativeSrc":"6047:6:69","nodeType":"YulTypedName","src":"6047:6:69","type":""}],"src":"5920:911:69"},{"body":{"nativeSrc":"6933:73:69","nodeType":"YulBlock","src":"6933:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"6950:3:69","nodeType":"YulIdentifier","src":"6950:3:69"},{"name":"length","nativeSrc":"6955:6:69","nodeType":"YulIdentifier","src":"6955:6:69"}],"functionName":{"name":"mstore","nativeSrc":"6943:6:69","nodeType":"YulIdentifier","src":"6943:6:69"},"nativeSrc":"6943:19:69","nodeType":"YulFunctionCall","src":"6943:19:69"},"nativeSrc":"6943:19:69","nodeType":"YulExpressionStatement","src":"6943:19:69"},{"nativeSrc":"6971:29:69","nodeType":"YulAssignment","src":"6971:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"6990:3:69","nodeType":"YulIdentifier","src":"6990:3:69"},{"kind":"number","nativeSrc":"6995:4:69","nodeType":"YulLiteral","src":"6995:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"6986:3:69","nodeType":"YulIdentifier","src":"6986:3:69"},"nativeSrc":"6986:14:69","nodeType":"YulFunctionCall","src":"6986:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"6971:11:69","nodeType":"YulIdentifier","src":"6971:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"6837:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"6905:3:69","nodeType":"YulTypedName","src":"6905:3:69","type":""},{"name":"length","nativeSrc":"6910:6:69","nodeType":"YulTypedName","src":"6910:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"6921:11:69","nodeType":"YulTypedName","src":"6921:11:69","type":""}],"src":"6837:169:69"},{"body":{"nativeSrc":"7118:122:69","nodeType":"YulBlock","src":"7118:122:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"7140:6:69","nodeType":"YulIdentifier","src":"7140:6:69"},{"kind":"number","nativeSrc":"7148:1:69","nodeType":"YulLiteral","src":"7148:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"7136:3:69","nodeType":"YulIdentifier","src":"7136:3:69"},"nativeSrc":"7136:14:69","nodeType":"YulFunctionCall","src":"7136:14:69"},{"hexValue":"4f776e61626c6532537465703a2063616c6c6572206973206e6f742074686520","kind":"string","nativeSrc":"7152:34:69","nodeType":"YulLiteral","src":"7152:34:69","type":"","value":"Ownable2Step: caller is not the "}],"functionName":{"name":"mstore","nativeSrc":"7129:6:69","nodeType":"YulIdentifier","src":"7129:6:69"},"nativeSrc":"7129:58:69","nodeType":"YulFunctionCall","src":"7129:58:69"},"nativeSrc":"7129:58:69","nodeType":"YulExpressionStatement","src":"7129:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"7208:6:69","nodeType":"YulIdentifier","src":"7208:6:69"},{"kind":"number","nativeSrc":"7216:2:69","nodeType":"YulLiteral","src":"7216:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7204:3:69","nodeType":"YulIdentifier","src":"7204:3:69"},"nativeSrc":"7204:15:69","nodeType":"YulFunctionCall","src":"7204:15:69"},{"hexValue":"6e6577206f776e6572","kind":"string","nativeSrc":"7221:11:69","nodeType":"YulLiteral","src":"7221:11:69","type":"","value":"new owner"}],"functionName":{"name":"mstore","nativeSrc":"7197:6:69","nodeType":"YulIdentifier","src":"7197:6:69"},"nativeSrc":"7197:36:69","nodeType":"YulFunctionCall","src":"7197:36:69"},"nativeSrc":"7197:36:69","nodeType":"YulExpressionStatement","src":"7197:36:69"}]},"name":"store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc","nativeSrc":"7012:228:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"7110:6:69","nodeType":"YulTypedName","src":"7110:6:69","type":""}],"src":"7012:228:69"},{"body":{"nativeSrc":"7392:220:69","nodeType":"YulBlock","src":"7392:220:69","statements":[{"nativeSrc":"7402:74:69","nodeType":"YulAssignment","src":"7402:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"7468:3:69","nodeType":"YulIdentifier","src":"7468:3:69"},{"kind":"number","nativeSrc":"7473:2:69","nodeType":"YulLiteral","src":"7473:2:69","type":"","value":"41"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"7409:58:69","nodeType":"YulIdentifier","src":"7409:58:69"},"nativeSrc":"7409:67:69","nodeType":"YulFunctionCall","src":"7409:67:69"},"variableNames":[{"name":"pos","nativeSrc":"7402:3:69","nodeType":"YulIdentifier","src":"7402:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"7574:3:69","nodeType":"YulIdentifier","src":"7574:3:69"}],"functionName":{"name":"store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc","nativeSrc":"7485:88:69","nodeType":"YulIdentifier","src":"7485:88:69"},"nativeSrc":"7485:93:69","nodeType":"YulFunctionCall","src":"7485:93:69"},"nativeSrc":"7485:93:69","nodeType":"YulExpressionStatement","src":"7485:93:69"},{"nativeSrc":"7587:19:69","nodeType":"YulAssignment","src":"7587:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"7598:3:69","nodeType":"YulIdentifier","src":"7598:3:69"},{"kind":"number","nativeSrc":"7603:2:69","nodeType":"YulLiteral","src":"7603:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"7594:3:69","nodeType":"YulIdentifier","src":"7594:3:69"},"nativeSrc":"7594:12:69","nodeType":"YulFunctionCall","src":"7594:12:69"},"variableNames":[{"name":"end","nativeSrc":"7587:3:69","nodeType":"YulIdentifier","src":"7587:3:69"}]}]},"name":"abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack","nativeSrc":"7246:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"7380:3:69","nodeType":"YulTypedName","src":"7380:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"7388:3:69","nodeType":"YulTypedName","src":"7388:3:69","type":""}],"src":"7246:366:69"},{"body":{"nativeSrc":"7789:248:69","nodeType":"YulBlock","src":"7789:248:69","statements":[{"nativeSrc":"7799:26:69","nodeType":"YulAssignment","src":"7799:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"7811:9:69","nodeType":"YulIdentifier","src":"7811:9:69"},{"kind":"number","nativeSrc":"7822:2:69","nodeType":"YulLiteral","src":"7822:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7807:3:69","nodeType":"YulIdentifier","src":"7807:3:69"},"nativeSrc":"7807:18:69","nodeType":"YulFunctionCall","src":"7807:18:69"},"variableNames":[{"name":"tail","nativeSrc":"7799:4:69","nodeType":"YulIdentifier","src":"7799:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7846:9:69","nodeType":"YulIdentifier","src":"7846:9:69"},{"kind":"number","nativeSrc":"7857:1:69","nodeType":"YulLiteral","src":"7857:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"7842:3:69","nodeType":"YulIdentifier","src":"7842:3:69"},"nativeSrc":"7842:17:69","nodeType":"YulFunctionCall","src":"7842:17:69"},{"arguments":[{"name":"tail","nativeSrc":"7865:4:69","nodeType":"YulIdentifier","src":"7865:4:69"},{"name":"headStart","nativeSrc":"7871:9:69","nodeType":"YulIdentifier","src":"7871:9:69"}],"functionName":{"name":"sub","nativeSrc":"7861:3:69","nodeType":"YulIdentifier","src":"7861:3:69"},"nativeSrc":"7861:20:69","nodeType":"YulFunctionCall","src":"7861:20:69"}],"functionName":{"name":"mstore","nativeSrc":"7835:6:69","nodeType":"YulIdentifier","src":"7835:6:69"},"nativeSrc":"7835:47:69","nodeType":"YulFunctionCall","src":"7835:47:69"},"nativeSrc":"7835:47:69","nodeType":"YulExpressionStatement","src":"7835:47:69"},{"nativeSrc":"7891:139:69","nodeType":"YulAssignment","src":"7891:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"8025:4:69","nodeType":"YulIdentifier","src":"8025:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack","nativeSrc":"7899:124:69","nodeType":"YulIdentifier","src":"7899:124:69"},"nativeSrc":"7899:131:69","nodeType":"YulFunctionCall","src":"7899:131:69"},"variableNames":[{"name":"tail","nativeSrc":"7891:4:69","nodeType":"YulIdentifier","src":"7891:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"7618:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"7769:9:69","nodeType":"YulTypedName","src":"7769:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"7784:4:69","nodeType":"YulTypedName","src":"7784:4:69","type":""}],"src":"7618:419:69"},{"body":{"nativeSrc":"8101:40:69","nodeType":"YulBlock","src":"8101:40:69","statements":[{"nativeSrc":"8112:22:69","nodeType":"YulAssignment","src":"8112:22:69","value":{"arguments":[{"name":"value","nativeSrc":"8128:5:69","nodeType":"YulIdentifier","src":"8128:5:69"}],"functionName":{"name":"mload","nativeSrc":"8122:5:69","nodeType":"YulIdentifier","src":"8122:5:69"},"nativeSrc":"8122:12:69","nodeType":"YulFunctionCall","src":"8122:12:69"},"variableNames":[{"name":"length","nativeSrc":"8112:6:69","nodeType":"YulIdentifier","src":"8112:6:69"}]}]},"name":"array_length_t_bytes_memory_ptr","nativeSrc":"8043:98:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"8084:5:69","nodeType":"YulTypedName","src":"8084:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"8094:6:69","nodeType":"YulTypedName","src":"8094:6:69","type":""}],"src":"8043:98:69"},{"body":{"nativeSrc":"8242:73:69","nodeType":"YulBlock","src":"8242:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"8259:3:69","nodeType":"YulIdentifier","src":"8259:3:69"},{"name":"length","nativeSrc":"8264:6:69","nodeType":"YulIdentifier","src":"8264:6:69"}],"functionName":{"name":"mstore","nativeSrc":"8252:6:69","nodeType":"YulIdentifier","src":"8252:6:69"},"nativeSrc":"8252:19:69","nodeType":"YulFunctionCall","src":"8252:19:69"},"nativeSrc":"8252:19:69","nodeType":"YulExpressionStatement","src":"8252:19:69"},{"nativeSrc":"8280:29:69","nodeType":"YulAssignment","src":"8280:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"8299:3:69","nodeType":"YulIdentifier","src":"8299:3:69"},{"kind":"number","nativeSrc":"8304:4:69","nodeType":"YulLiteral","src":"8304:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"8295:3:69","nodeType":"YulIdentifier","src":"8295:3:69"},"nativeSrc":"8295:14:69","nodeType":"YulFunctionCall","src":"8295:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"8280:11:69","nodeType":"YulIdentifier","src":"8280:11:69"}]}]},"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack","nativeSrc":"8147:168:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"8214:3:69","nodeType":"YulTypedName","src":"8214:3:69","type":""},{"name":"length","nativeSrc":"8219:6:69","nodeType":"YulTypedName","src":"8219:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"8230:11:69","nodeType":"YulTypedName","src":"8230:11:69","type":""}],"src":"8147:168:69"},{"body":{"nativeSrc":"8383:186:69","nodeType":"YulBlock","src":"8383:186:69","statements":[{"nativeSrc":"8394:10:69","nodeType":"YulVariableDeclaration","src":"8394:10:69","value":{"kind":"number","nativeSrc":"8403:1:69","nodeType":"YulLiteral","src":"8403:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"8398:1:69","nodeType":"YulTypedName","src":"8398:1:69","type":""}]},{"body":{"nativeSrc":"8463:63:69","nodeType":"YulBlock","src":"8463:63:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"8488:3:69","nodeType":"YulIdentifier","src":"8488:3:69"},{"name":"i","nativeSrc":"8493:1:69","nodeType":"YulIdentifier","src":"8493:1:69"}],"functionName":{"name":"add","nativeSrc":"8484:3:69","nodeType":"YulIdentifier","src":"8484:3:69"},"nativeSrc":"8484:11:69","nodeType":"YulFunctionCall","src":"8484:11:69"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"8507:3:69","nodeType":"YulIdentifier","src":"8507:3:69"},{"name":"i","nativeSrc":"8512:1:69","nodeType":"YulIdentifier","src":"8512:1:69"}],"functionName":{"name":"add","nativeSrc":"8503:3:69","nodeType":"YulIdentifier","src":"8503:3:69"},"nativeSrc":"8503:11:69","nodeType":"YulFunctionCall","src":"8503:11:69"}],"functionName":{"name":"mload","nativeSrc":"8497:5:69","nodeType":"YulIdentifier","src":"8497:5:69"},"nativeSrc":"8497:18:69","nodeType":"YulFunctionCall","src":"8497:18:69"}],"functionName":{"name":"mstore","nativeSrc":"8477:6:69","nodeType":"YulIdentifier","src":"8477:6:69"},"nativeSrc":"8477:39:69","nodeType":"YulFunctionCall","src":"8477:39:69"},"nativeSrc":"8477:39:69","nodeType":"YulExpressionStatement","src":"8477:39:69"}]},"condition":{"arguments":[{"name":"i","nativeSrc":"8424:1:69","nodeType":"YulIdentifier","src":"8424:1:69"},{"name":"length","nativeSrc":"8427:6:69","nodeType":"YulIdentifier","src":"8427:6:69"}],"functionName":{"name":"lt","nativeSrc":"8421:2:69","nodeType":"YulIdentifier","src":"8421:2:69"},"nativeSrc":"8421:13:69","nodeType":"YulFunctionCall","src":"8421:13:69"},"nativeSrc":"8413:113:69","nodeType":"YulForLoop","post":{"nativeSrc":"8435:19:69","nodeType":"YulBlock","src":"8435:19:69","statements":[{"nativeSrc":"8437:15:69","nodeType":"YulAssignment","src":"8437:15:69","value":{"arguments":[{"name":"i","nativeSrc":"8446:1:69","nodeType":"YulIdentifier","src":"8446:1:69"},{"kind":"number","nativeSrc":"8449:2:69","nodeType":"YulLiteral","src":"8449:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8442:3:69","nodeType":"YulIdentifier","src":"8442:3:69"},"nativeSrc":"8442:10:69","nodeType":"YulFunctionCall","src":"8442:10:69"},"variableNames":[{"name":"i","nativeSrc":"8437:1:69","nodeType":"YulIdentifier","src":"8437:1:69"}]}]},"pre":{"nativeSrc":"8417:3:69","nodeType":"YulBlock","src":"8417:3:69","statements":[]},"src":"8413:113:69"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"8546:3:69","nodeType":"YulIdentifier","src":"8546:3:69"},{"name":"length","nativeSrc":"8551:6:69","nodeType":"YulIdentifier","src":"8551:6:69"}],"functionName":{"name":"add","nativeSrc":"8542:3:69","nodeType":"YulIdentifier","src":"8542:3:69"},"nativeSrc":"8542:16:69","nodeType":"YulFunctionCall","src":"8542:16:69"},{"kind":"number","nativeSrc":"8560:1:69","nodeType":"YulLiteral","src":"8560:1:69","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"8535:6:69","nodeType":"YulIdentifier","src":"8535:6:69"},"nativeSrc":"8535:27:69","nodeType":"YulFunctionCall","src":"8535:27:69"},"nativeSrc":"8535:27:69","nodeType":"YulExpressionStatement","src":"8535:27:69"}]},"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"8321:248:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"8365:3:69","nodeType":"YulTypedName","src":"8365:3:69","type":""},{"name":"dst","nativeSrc":"8370:3:69","nodeType":"YulTypedName","src":"8370:3:69","type":""},{"name":"length","nativeSrc":"8375:6:69","nodeType":"YulTypedName","src":"8375:6:69","type":""}],"src":"8321:248:69"},{"body":{"nativeSrc":"8623:54:69","nodeType":"YulBlock","src":"8623:54:69","statements":[{"nativeSrc":"8633:38:69","nodeType":"YulAssignment","src":"8633:38:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"8651:5:69","nodeType":"YulIdentifier","src":"8651:5:69"},{"kind":"number","nativeSrc":"8658:2:69","nodeType":"YulLiteral","src":"8658:2:69","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"8647:3:69","nodeType":"YulIdentifier","src":"8647:3:69"},"nativeSrc":"8647:14:69","nodeType":"YulFunctionCall","src":"8647:14:69"},{"arguments":[{"kind":"number","nativeSrc":"8667:2:69","nodeType":"YulLiteral","src":"8667:2:69","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"8663:3:69","nodeType":"YulIdentifier","src":"8663:3:69"},"nativeSrc":"8663:7:69","nodeType":"YulFunctionCall","src":"8663:7:69"}],"functionName":{"name":"and","nativeSrc":"8643:3:69","nodeType":"YulIdentifier","src":"8643:3:69"},"nativeSrc":"8643:28:69","nodeType":"YulFunctionCall","src":"8643:28:69"},"variableNames":[{"name":"result","nativeSrc":"8633:6:69","nodeType":"YulIdentifier","src":"8633:6:69"}]}]},"name":"round_up_to_mul_of_32","nativeSrc":"8575:102:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"8606:5:69","nodeType":"YulTypedName","src":"8606:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"8616:6:69","nodeType":"YulTypedName","src":"8616:6:69","type":""}],"src":"8575:102:69"},{"body":{"nativeSrc":"8773:283:69","nodeType":"YulBlock","src":"8773:283:69","statements":[{"nativeSrc":"8783:52:69","nodeType":"YulVariableDeclaration","src":"8783:52:69","value":{"arguments":[{"name":"value","nativeSrc":"8829:5:69","nodeType":"YulIdentifier","src":"8829:5:69"}],"functionName":{"name":"array_length_t_bytes_memory_ptr","nativeSrc":"8797:31:69","nodeType":"YulIdentifier","src":"8797:31:69"},"nativeSrc":"8797:38:69","nodeType":"YulFunctionCall","src":"8797:38:69"},"variables":[{"name":"length","nativeSrc":"8787:6:69","nodeType":"YulTypedName","src":"8787:6:69","type":""}]},{"nativeSrc":"8844:77:69","nodeType":"YulAssignment","src":"8844:77:69","value":{"arguments":[{"name":"pos","nativeSrc":"8909:3:69","nodeType":"YulIdentifier","src":"8909:3:69"},{"name":"length","nativeSrc":"8914:6:69","nodeType":"YulIdentifier","src":"8914:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack","nativeSrc":"8851:57:69","nodeType":"YulIdentifier","src":"8851:57:69"},"nativeSrc":"8851:70:69","nodeType":"YulFunctionCall","src":"8851:70:69"},"variableNames":[{"name":"pos","nativeSrc":"8844:3:69","nodeType":"YulIdentifier","src":"8844:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"8969:5:69","nodeType":"YulIdentifier","src":"8969:5:69"},{"kind":"number","nativeSrc":"8976:4:69","nodeType":"YulLiteral","src":"8976:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"8965:3:69","nodeType":"YulIdentifier","src":"8965:3:69"},"nativeSrc":"8965:16:69","nodeType":"YulFunctionCall","src":"8965:16:69"},{"name":"pos","nativeSrc":"8983:3:69","nodeType":"YulIdentifier","src":"8983:3:69"},{"name":"length","nativeSrc":"8988:6:69","nodeType":"YulIdentifier","src":"8988:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"8930:34:69","nodeType":"YulIdentifier","src":"8930:34:69"},"nativeSrc":"8930:65:69","nodeType":"YulFunctionCall","src":"8930:65:69"},"nativeSrc":"8930:65:69","nodeType":"YulExpressionStatement","src":"8930:65:69"},{"nativeSrc":"9004:46:69","nodeType":"YulAssignment","src":"9004:46:69","value":{"arguments":[{"name":"pos","nativeSrc":"9015:3:69","nodeType":"YulIdentifier","src":"9015:3:69"},{"arguments":[{"name":"length","nativeSrc":"9042:6:69","nodeType":"YulIdentifier","src":"9042:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"9020:21:69","nodeType":"YulIdentifier","src":"9020:21:69"},"nativeSrc":"9020:29:69","nodeType":"YulFunctionCall","src":"9020:29:69"}],"functionName":{"name":"add","nativeSrc":"9011:3:69","nodeType":"YulIdentifier","src":"9011:3:69"},"nativeSrc":"9011:39:69","nodeType":"YulFunctionCall","src":"9011:39:69"},"variableNames":[{"name":"end","nativeSrc":"9004:3:69","nodeType":"YulIdentifier","src":"9004:3:69"}]}]},"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack","nativeSrc":"8683:373:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"8754:5:69","nodeType":"YulTypedName","src":"8754:5:69","type":""},{"name":"pos","nativeSrc":"8761:3:69","nodeType":"YulTypedName","src":"8761:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"8769:3:69","nodeType":"YulTypedName","src":"8769:3:69","type":""}],"src":"8683:373:69"},{"body":{"nativeSrc":"9206:275:69","nodeType":"YulBlock","src":"9206:275:69","statements":[{"nativeSrc":"9216:26:69","nodeType":"YulAssignment","src":"9216:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"9228:9:69","nodeType":"YulIdentifier","src":"9228:9:69"},{"kind":"number","nativeSrc":"9239:2:69","nodeType":"YulLiteral","src":"9239:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"9224:3:69","nodeType":"YulIdentifier","src":"9224:3:69"},"nativeSrc":"9224:18:69","nodeType":"YulFunctionCall","src":"9224:18:69"},"variableNames":[{"name":"tail","nativeSrc":"9216:4:69","nodeType":"YulIdentifier","src":"9216:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"9296:6:69","nodeType":"YulIdentifier","src":"9296:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"9309:9:69","nodeType":"YulIdentifier","src":"9309:9:69"},{"kind":"number","nativeSrc":"9320:1:69","nodeType":"YulLiteral","src":"9320:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"9305:3:69","nodeType":"YulIdentifier","src":"9305:3:69"},"nativeSrc":"9305:17:69","nodeType":"YulFunctionCall","src":"9305:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"9252:43:69","nodeType":"YulIdentifier","src":"9252:43:69"},"nativeSrc":"9252:71:69","nodeType":"YulFunctionCall","src":"9252:71:69"},"nativeSrc":"9252:71:69","nodeType":"YulExpressionStatement","src":"9252:71:69"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"9344:9:69","nodeType":"YulIdentifier","src":"9344:9:69"},{"kind":"number","nativeSrc":"9355:2:69","nodeType":"YulLiteral","src":"9355:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"9340:3:69","nodeType":"YulIdentifier","src":"9340:3:69"},"nativeSrc":"9340:18:69","nodeType":"YulFunctionCall","src":"9340:18:69"},{"arguments":[{"name":"tail","nativeSrc":"9364:4:69","nodeType":"YulIdentifier","src":"9364:4:69"},{"name":"headStart","nativeSrc":"9370:9:69","nodeType":"YulIdentifier","src":"9370:9:69"}],"functionName":{"name":"sub","nativeSrc":"9360:3:69","nodeType":"YulIdentifier","src":"9360:3:69"},"nativeSrc":"9360:20:69","nodeType":"YulFunctionCall","src":"9360:20:69"}],"functionName":{"name":"mstore","nativeSrc":"9333:6:69","nodeType":"YulIdentifier","src":"9333:6:69"},"nativeSrc":"9333:48:69","nodeType":"YulFunctionCall","src":"9333:48:69"},"nativeSrc":"9333:48:69","nodeType":"YulExpressionStatement","src":"9333:48:69"},{"nativeSrc":"9390:84:69","nodeType":"YulAssignment","src":"9390:84:69","value":{"arguments":[{"name":"value1","nativeSrc":"9460:6:69","nodeType":"YulIdentifier","src":"9460:6:69"},{"name":"tail","nativeSrc":"9469:4:69","nodeType":"YulIdentifier","src":"9469:4:69"}],"functionName":{"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack","nativeSrc":"9398:61:69","nodeType":"YulIdentifier","src":"9398:61:69"},"nativeSrc":"9398:76:69","nodeType":"YulFunctionCall","src":"9398:76:69"},"variableNames":[{"name":"tail","nativeSrc":"9390:4:69","nodeType":"YulIdentifier","src":"9390:4:69"}]}]},"name":"abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed","nativeSrc":"9062:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"9170:9:69","nodeType":"YulTypedName","src":"9170:9:69","type":""},{"name":"value1","nativeSrc":"9182:6:69","nodeType":"YulTypedName","src":"9182:6:69","type":""},{"name":"value0","nativeSrc":"9190:6:69","nodeType":"YulTypedName","src":"9190:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"9201:4:69","nodeType":"YulTypedName","src":"9201:4:69","type":""}],"src":"9062:419:69"},{"body":{"nativeSrc":"9600:34:69","nodeType":"YulBlock","src":"9600:34:69","statements":[{"nativeSrc":"9610:18:69","nodeType":"YulAssignment","src":"9610:18:69","value":{"name":"pos","nativeSrc":"9625:3:69","nodeType":"YulIdentifier","src":"9625:3:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"9610:11:69","nodeType":"YulIdentifier","src":"9610:11:69"}]}]},"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"9487:147:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"9572:3:69","nodeType":"YulTypedName","src":"9572:3:69","type":""},{"name":"length","nativeSrc":"9577:6:69","nodeType":"YulTypedName","src":"9577:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"9588:11:69","nodeType":"YulTypedName","src":"9588:11:69","type":""}],"src":"9487:147:69"},{"body":{"nativeSrc":"9748:278:69","nodeType":"YulBlock","src":"9748:278:69","statements":[{"nativeSrc":"9758:52:69","nodeType":"YulVariableDeclaration","src":"9758:52:69","value":{"arguments":[{"name":"value","nativeSrc":"9804:5:69","nodeType":"YulIdentifier","src":"9804:5:69"}],"functionName":{"name":"array_length_t_bytes_memory_ptr","nativeSrc":"9772:31:69","nodeType":"YulIdentifier","src":"9772:31:69"},"nativeSrc":"9772:38:69","nodeType":"YulFunctionCall","src":"9772:38:69"},"variables":[{"name":"length","nativeSrc":"9762:6:69","nodeType":"YulTypedName","src":"9762:6:69","type":""}]},{"nativeSrc":"9819:95:69","nodeType":"YulAssignment","src":"9819:95:69","value":{"arguments":[{"name":"pos","nativeSrc":"9902:3:69","nodeType":"YulIdentifier","src":"9902:3:69"},{"name":"length","nativeSrc":"9907:6:69","nodeType":"YulIdentifier","src":"9907:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"9826:75:69","nodeType":"YulIdentifier","src":"9826:75:69"},"nativeSrc":"9826:88:69","nodeType":"YulFunctionCall","src":"9826:88:69"},"variableNames":[{"name":"pos","nativeSrc":"9819:3:69","nodeType":"YulIdentifier","src":"9819:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"9962:5:69","nodeType":"YulIdentifier","src":"9962:5:69"},{"kind":"number","nativeSrc":"9969:4:69","nodeType":"YulLiteral","src":"9969:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"9958:3:69","nodeType":"YulIdentifier","src":"9958:3:69"},"nativeSrc":"9958:16:69","nodeType":"YulFunctionCall","src":"9958:16:69"},{"name":"pos","nativeSrc":"9976:3:69","nodeType":"YulIdentifier","src":"9976:3:69"},{"name":"length","nativeSrc":"9981:6:69","nodeType":"YulIdentifier","src":"9981:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"9923:34:69","nodeType":"YulIdentifier","src":"9923:34:69"},"nativeSrc":"9923:65:69","nodeType":"YulFunctionCall","src":"9923:65:69"},"nativeSrc":"9923:65:69","nodeType":"YulExpressionStatement","src":"9923:65:69"},{"nativeSrc":"9997:23:69","nodeType":"YulAssignment","src":"9997:23:69","value":{"arguments":[{"name":"pos","nativeSrc":"10008:3:69","nodeType":"YulIdentifier","src":"10008:3:69"},{"name":"length","nativeSrc":"10013:6:69","nodeType":"YulIdentifier","src":"10013:6:69"}],"functionName":{"name":"add","nativeSrc":"10004:3:69","nodeType":"YulIdentifier","src":"10004:3:69"},"nativeSrc":"10004:16:69","nodeType":"YulFunctionCall","src":"10004:16:69"},"variableNames":[{"name":"end","nativeSrc":"9997:3:69","nodeType":"YulIdentifier","src":"9997:3:69"}]}]},"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"9640:386:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"9729:5:69","nodeType":"YulTypedName","src":"9729:5:69","type":""},{"name":"pos","nativeSrc":"9736:3:69","nodeType":"YulTypedName","src":"9736:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"9744:3:69","nodeType":"YulTypedName","src":"9744:3:69","type":""}],"src":"9640:386:69"},{"body":{"nativeSrc":"10212:247:69","nodeType":"YulBlock","src":"10212:247:69","statements":[{"nativeSrc":"10223:100:69","nodeType":"YulAssignment","src":"10223:100:69","value":{"arguments":[{"name":"value0","nativeSrc":"10310:6:69","nodeType":"YulIdentifier","src":"10310:6:69"},{"name":"pos","nativeSrc":"10319:3:69","nodeType":"YulIdentifier","src":"10319:3:69"}],"functionName":{"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"10230:79:69","nodeType":"YulIdentifier","src":"10230:79:69"},"nativeSrc":"10230:93:69","nodeType":"YulFunctionCall","src":"10230:93:69"},"variableNames":[{"name":"pos","nativeSrc":"10223:3:69","nodeType":"YulIdentifier","src":"10223:3:69"}]},{"nativeSrc":"10333:100:69","nodeType":"YulAssignment","src":"10333:100:69","value":{"arguments":[{"name":"value1","nativeSrc":"10420:6:69","nodeType":"YulIdentifier","src":"10420:6:69"},{"name":"pos","nativeSrc":"10429:3:69","nodeType":"YulIdentifier","src":"10429:3:69"}],"functionName":{"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"10340:79:69","nodeType":"YulIdentifier","src":"10340:79:69"},"nativeSrc":"10340:93:69","nodeType":"YulFunctionCall","src":"10340:93:69"},"variableNames":[{"name":"pos","nativeSrc":"10333:3:69","nodeType":"YulIdentifier","src":"10333:3:69"}]},{"nativeSrc":"10443:10:69","nodeType":"YulAssignment","src":"10443:10:69","value":{"name":"pos","nativeSrc":"10450:3:69","nodeType":"YulIdentifier","src":"10450:3:69"},"variableNames":[{"name":"end","nativeSrc":"10443:3:69","nodeType":"YulIdentifier","src":"10443:3:69"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nativeSrc":"10032:427:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"10183:3:69","nodeType":"YulTypedName","src":"10183:3:69","type":""},{"name":"value1","nativeSrc":"10189:6:69","nodeType":"YulTypedName","src":"10189:6:69","type":""},{"name":"value0","nativeSrc":"10197:6:69","nodeType":"YulTypedName","src":"10197:6:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"10208:3:69","nodeType":"YulTypedName","src":"10208:3:69","type":""}],"src":"10032:427:69"},{"body":{"nativeSrc":"10509:105:69","nodeType":"YulBlock","src":"10509:105:69","statements":[{"nativeSrc":"10519:89:69","nodeType":"YulAssignment","src":"10519:89:69","value":{"arguments":[{"name":"value","nativeSrc":"10534:5:69","nodeType":"YulIdentifier","src":"10534:5:69"},{"kind":"number","nativeSrc":"10541:66:69","nodeType":"YulLiteral","src":"10541:66:69","type":"","value":"0xff00000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"and","nativeSrc":"10530:3:69","nodeType":"YulIdentifier","src":"10530:3:69"},"nativeSrc":"10530:78:69","nodeType":"YulFunctionCall","src":"10530:78:69"},"variableNames":[{"name":"cleaned","nativeSrc":"10519:7:69","nodeType":"YulIdentifier","src":"10519:7:69"}]}]},"name":"cleanup_t_bytes1","nativeSrc":"10465:149:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"10491:5:69","nodeType":"YulTypedName","src":"10491:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"10501:7:69","nodeType":"YulTypedName","src":"10501:7:69","type":""}],"src":"10465:149:69"},{"body":{"nativeSrc":"10666:32:69","nodeType":"YulBlock","src":"10666:32:69","statements":[{"nativeSrc":"10676:16:69","nodeType":"YulAssignment","src":"10676:16:69","value":{"name":"value","nativeSrc":"10687:5:69","nodeType":"YulIdentifier","src":"10687:5:69"},"variableNames":[{"name":"aligned","nativeSrc":"10676:7:69","nodeType":"YulIdentifier","src":"10676:7:69"}]}]},"name":"leftAlign_t_bytes1","nativeSrc":"10620:78:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"10648:5:69","nodeType":"YulTypedName","src":"10648:5:69","type":""}],"returnVariables":[{"name":"aligned","nativeSrc":"10658:7:69","nodeType":"YulTypedName","src":"10658:7:69","type":""}],"src":"10620:78:69"},{"body":{"nativeSrc":"10785:72:69","nodeType":"YulBlock","src":"10785:72:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"10802:3:69","nodeType":"YulIdentifier","src":"10802:3:69"},{"arguments":[{"arguments":[{"name":"value","nativeSrc":"10843:5:69","nodeType":"YulIdentifier","src":"10843:5:69"}],"functionName":{"name":"cleanup_t_bytes1","nativeSrc":"10826:16:69","nodeType":"YulIdentifier","src":"10826:16:69"},"nativeSrc":"10826:23:69","nodeType":"YulFunctionCall","src":"10826:23:69"}],"functionName":{"name":"leftAlign_t_bytes1","nativeSrc":"10807:18:69","nodeType":"YulIdentifier","src":"10807:18:69"},"nativeSrc":"10807:43:69","nodeType":"YulFunctionCall","src":"10807:43:69"}],"functionName":{"name":"mstore","nativeSrc":"10795:6:69","nodeType":"YulIdentifier","src":"10795:6:69"},"nativeSrc":"10795:56:69","nodeType":"YulFunctionCall","src":"10795:56:69"},"nativeSrc":"10795:56:69","nodeType":"YulExpressionStatement","src":"10795:56:69"}]},"name":"abi_encode_t_bytes1_to_t_bytes1_nonPadded_inplace_fromStack","nativeSrc":"10704:153:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"10773:5:69","nodeType":"YulTypedName","src":"10773:5:69","type":""},{"name":"pos","nativeSrc":"10780:3:69","nodeType":"YulTypedName","src":"10780:3:69","type":""}],"src":"10704:153:69"},{"body":{"nativeSrc":"10905:52:69","nodeType":"YulBlock","src":"10905:52:69","statements":[{"nativeSrc":"10915:35:69","nodeType":"YulAssignment","src":"10915:35:69","value":{"arguments":[{"kind":"number","nativeSrc":"10940:2:69","nodeType":"YulLiteral","src":"10940:2:69","type":"","value":"96"},{"name":"value","nativeSrc":"10944:5:69","nodeType":"YulIdentifier","src":"10944:5:69"}],"functionName":{"name":"shl","nativeSrc":"10936:3:69","nodeType":"YulIdentifier","src":"10936:3:69"},"nativeSrc":"10936:14:69","nodeType":"YulFunctionCall","src":"10936:14:69"},"variableNames":[{"name":"newValue","nativeSrc":"10915:8:69","nodeType":"YulIdentifier","src":"10915:8:69"}]}]},"name":"shift_left_96","nativeSrc":"10863:94:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"10886:5:69","nodeType":"YulTypedName","src":"10886:5:69","type":""}],"returnVariables":[{"name":"newValue","nativeSrc":"10896:8:69","nodeType":"YulTypedName","src":"10896:8:69","type":""}],"src":"10863:94:69"},{"body":{"nativeSrc":"11010:47:69","nodeType":"YulBlock","src":"11010:47:69","statements":[{"nativeSrc":"11020:31:69","nodeType":"YulAssignment","src":"11020:31:69","value":{"arguments":[{"name":"value","nativeSrc":"11045:5:69","nodeType":"YulIdentifier","src":"11045:5:69"}],"functionName":{"name":"shift_left_96","nativeSrc":"11031:13:69","nodeType":"YulIdentifier","src":"11031:13:69"},"nativeSrc":"11031:20:69","nodeType":"YulFunctionCall","src":"11031:20:69"},"variableNames":[{"name":"aligned","nativeSrc":"11020:7:69","nodeType":"YulIdentifier","src":"11020:7:69"}]}]},"name":"leftAlign_t_uint160","nativeSrc":"10963:94:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"10992:5:69","nodeType":"YulTypedName","src":"10992:5:69","type":""}],"returnVariables":[{"name":"aligned","nativeSrc":"11002:7:69","nodeType":"YulTypedName","src":"11002:7:69","type":""}],"src":"10963:94:69"},{"body":{"nativeSrc":"11110:53:69","nodeType":"YulBlock","src":"11110:53:69","statements":[{"nativeSrc":"11120:37:69","nodeType":"YulAssignment","src":"11120:37:69","value":{"arguments":[{"name":"value","nativeSrc":"11151:5:69","nodeType":"YulIdentifier","src":"11151:5:69"}],"functionName":{"name":"leftAlign_t_uint160","nativeSrc":"11131:19:69","nodeType":"YulIdentifier","src":"11131:19:69"},"nativeSrc":"11131:26:69","nodeType":"YulFunctionCall","src":"11131:26:69"},"variableNames":[{"name":"aligned","nativeSrc":"11120:7:69","nodeType":"YulIdentifier","src":"11120:7:69"}]}]},"name":"leftAlign_t_address","nativeSrc":"11063:100:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"11092:5:69","nodeType":"YulTypedName","src":"11092:5:69","type":""}],"returnVariables":[{"name":"aligned","nativeSrc":"11102:7:69","nodeType":"YulTypedName","src":"11102:7:69","type":""}],"src":"11063:100:69"},{"body":{"nativeSrc":"11252:74:69","nodeType":"YulBlock","src":"11252:74:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"11269:3:69","nodeType":"YulIdentifier","src":"11269:3:69"},{"arguments":[{"arguments":[{"name":"value","nativeSrc":"11312:5:69","nodeType":"YulIdentifier","src":"11312:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"11294:17:69","nodeType":"YulIdentifier","src":"11294:17:69"},"nativeSrc":"11294:24:69","nodeType":"YulFunctionCall","src":"11294:24:69"}],"functionName":{"name":"leftAlign_t_address","nativeSrc":"11274:19:69","nodeType":"YulIdentifier","src":"11274:19:69"},"nativeSrc":"11274:45:69","nodeType":"YulFunctionCall","src":"11274:45:69"}],"functionName":{"name":"mstore","nativeSrc":"11262:6:69","nodeType":"YulIdentifier","src":"11262:6:69"},"nativeSrc":"11262:58:69","nodeType":"YulFunctionCall","src":"11262:58:69"},"nativeSrc":"11262:58:69","nodeType":"YulExpressionStatement","src":"11262:58:69"}]},"name":"abi_encode_t_address_to_t_address_nonPadded_inplace_fromStack","nativeSrc":"11169:157:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"11240:5:69","nodeType":"YulTypedName","src":"11240:5:69","type":""},{"name":"pos","nativeSrc":"11247:3:69","nodeType":"YulTypedName","src":"11247:3:69","type":""}],"src":"11169:157:69"},{"body":{"nativeSrc":"11379:32:69","nodeType":"YulBlock","src":"11379:32:69","statements":[{"nativeSrc":"11389:16:69","nodeType":"YulAssignment","src":"11389:16:69","value":{"name":"value","nativeSrc":"11400:5:69","nodeType":"YulIdentifier","src":"11400:5:69"},"variableNames":[{"name":"aligned","nativeSrc":"11389:7:69","nodeType":"YulIdentifier","src":"11389:7:69"}]}]},"name":"leftAlign_t_bytes32","nativeSrc":"11332:79:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"11361:5:69","nodeType":"YulTypedName","src":"11361:5:69","type":""}],"returnVariables":[{"name":"aligned","nativeSrc":"11371:7:69","nodeType":"YulTypedName","src":"11371:7:69","type":""}],"src":"11332:79:69"},{"body":{"nativeSrc":"11500:74:69","nodeType":"YulBlock","src":"11500:74:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"11517:3:69","nodeType":"YulIdentifier","src":"11517:3:69"},{"arguments":[{"arguments":[{"name":"value","nativeSrc":"11560:5:69","nodeType":"YulIdentifier","src":"11560:5:69"}],"functionName":{"name":"cleanup_t_bytes32","nativeSrc":"11542:17:69","nodeType":"YulIdentifier","src":"11542:17:69"},"nativeSrc":"11542:24:69","nodeType":"YulFunctionCall","src":"11542:24:69"}],"functionName":{"name":"leftAlign_t_bytes32","nativeSrc":"11522:19:69","nodeType":"YulIdentifier","src":"11522:19:69"},"nativeSrc":"11522:45:69","nodeType":"YulFunctionCall","src":"11522:45:69"}],"functionName":{"name":"mstore","nativeSrc":"11510:6:69","nodeType":"YulIdentifier","src":"11510:6:69"},"nativeSrc":"11510:58:69","nodeType":"YulFunctionCall","src":"11510:58:69"},"nativeSrc":"11510:58:69","nodeType":"YulExpressionStatement","src":"11510:58:69"}]},"name":"abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack","nativeSrc":"11417:157:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"11488:5:69","nodeType":"YulTypedName","src":"11488:5:69","type":""},{"name":"pos","nativeSrc":"11495:3:69","nodeType":"YulTypedName","src":"11495:3:69","type":""}],"src":"11417:157:69"},{"body":{"nativeSrc":"11778:476:69","nodeType":"YulBlock","src":"11778:476:69","statements":[{"expression":{"arguments":[{"name":"value0","nativeSrc":"11849:6:69","nodeType":"YulIdentifier","src":"11849:6:69"},{"name":"pos","nativeSrc":"11858:3:69","nodeType":"YulIdentifier","src":"11858:3:69"}],"functionName":{"name":"abi_encode_t_bytes1_to_t_bytes1_nonPadded_inplace_fromStack","nativeSrc":"11789:59:69","nodeType":"YulIdentifier","src":"11789:59:69"},"nativeSrc":"11789:73:69","nodeType":"YulFunctionCall","src":"11789:73:69"},"nativeSrc":"11789:73:69","nodeType":"YulExpressionStatement","src":"11789:73:69"},{"nativeSrc":"11871:18:69","nodeType":"YulAssignment","src":"11871:18:69","value":{"arguments":[{"name":"pos","nativeSrc":"11882:3:69","nodeType":"YulIdentifier","src":"11882:3:69"},{"kind":"number","nativeSrc":"11887:1:69","nodeType":"YulLiteral","src":"11887:1:69","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"11878:3:69","nodeType":"YulIdentifier","src":"11878:3:69"},"nativeSrc":"11878:11:69","nodeType":"YulFunctionCall","src":"11878:11:69"},"variableNames":[{"name":"pos","nativeSrc":"11871:3:69","nodeType":"YulIdentifier","src":"11871:3:69"}]},{"expression":{"arguments":[{"name":"value1","nativeSrc":"11961:6:69","nodeType":"YulIdentifier","src":"11961:6:69"},{"name":"pos","nativeSrc":"11970:3:69","nodeType":"YulIdentifier","src":"11970:3:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_nonPadded_inplace_fromStack","nativeSrc":"11899:61:69","nodeType":"YulIdentifier","src":"11899:61:69"},"nativeSrc":"11899:75:69","nodeType":"YulFunctionCall","src":"11899:75:69"},"nativeSrc":"11899:75:69","nodeType":"YulExpressionStatement","src":"11899:75:69"},{"nativeSrc":"11983:19:69","nodeType":"YulAssignment","src":"11983:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"11994:3:69","nodeType":"YulIdentifier","src":"11994:3:69"},{"kind":"number","nativeSrc":"11999:2:69","nodeType":"YulLiteral","src":"11999:2:69","type":"","value":"20"}],"functionName":{"name":"add","nativeSrc":"11990:3:69","nodeType":"YulIdentifier","src":"11990:3:69"},"nativeSrc":"11990:12:69","nodeType":"YulFunctionCall","src":"11990:12:69"},"variableNames":[{"name":"pos","nativeSrc":"11983:3:69","nodeType":"YulIdentifier","src":"11983:3:69"}]},{"expression":{"arguments":[{"name":"value2","nativeSrc":"12074:6:69","nodeType":"YulIdentifier","src":"12074:6:69"},{"name":"pos","nativeSrc":"12083:3:69","nodeType":"YulIdentifier","src":"12083:3:69"}],"functionName":{"name":"abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack","nativeSrc":"12012:61:69","nodeType":"YulIdentifier","src":"12012:61:69"},"nativeSrc":"12012:75:69","nodeType":"YulFunctionCall","src":"12012:75:69"},"nativeSrc":"12012:75:69","nodeType":"YulExpressionStatement","src":"12012:75:69"},{"nativeSrc":"12096:19:69","nodeType":"YulAssignment","src":"12096:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"12107:3:69","nodeType":"YulIdentifier","src":"12107:3:69"},{"kind":"number","nativeSrc":"12112:2:69","nodeType":"YulLiteral","src":"12112:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"12103:3:69","nodeType":"YulIdentifier","src":"12103:3:69"},"nativeSrc":"12103:12:69","nodeType":"YulFunctionCall","src":"12103:12:69"},"variableNames":[{"name":"pos","nativeSrc":"12096:3:69","nodeType":"YulIdentifier","src":"12096:3:69"}]},{"expression":{"arguments":[{"name":"value3","nativeSrc":"12187:6:69","nodeType":"YulIdentifier","src":"12187:6:69"},{"name":"pos","nativeSrc":"12196:3:69","nodeType":"YulIdentifier","src":"12196:3:69"}],"functionName":{"name":"abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack","nativeSrc":"12125:61:69","nodeType":"YulIdentifier","src":"12125:61:69"},"nativeSrc":"12125:75:69","nodeType":"YulFunctionCall","src":"12125:75:69"},"nativeSrc":"12125:75:69","nodeType":"YulExpressionStatement","src":"12125:75:69"},{"nativeSrc":"12209:19:69","nodeType":"YulAssignment","src":"12209:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"12220:3:69","nodeType":"YulIdentifier","src":"12220:3:69"},{"kind":"number","nativeSrc":"12225:2:69","nodeType":"YulLiteral","src":"12225:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"12216:3:69","nodeType":"YulIdentifier","src":"12216:3:69"},"nativeSrc":"12216:12:69","nodeType":"YulFunctionCall","src":"12216:12:69"},"variableNames":[{"name":"pos","nativeSrc":"12209:3:69","nodeType":"YulIdentifier","src":"12209:3:69"}]},{"nativeSrc":"12238:10:69","nodeType":"YulAssignment","src":"12238:10:69","value":{"name":"pos","nativeSrc":"12245:3:69","nodeType":"YulIdentifier","src":"12245:3:69"},"variableNames":[{"name":"end","nativeSrc":"12238:3:69","nodeType":"YulIdentifier","src":"12238:3:69"}]}]},"name":"abi_encode_tuple_packed_t_bytes1_t_address_t_bytes32_t_bytes32__to_t_bytes1_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nativeSrc":"11580:674:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"11733:3:69","nodeType":"YulTypedName","src":"11733:3:69","type":""},{"name":"value3","nativeSrc":"11739:6:69","nodeType":"YulTypedName","src":"11739:6:69","type":""},{"name":"value2","nativeSrc":"11747:6:69","nodeType":"YulTypedName","src":"11747:6:69","type":""},{"name":"value1","nativeSrc":"11755:6:69","nodeType":"YulTypedName","src":"11755:6:69","type":""},{"name":"value0","nativeSrc":"11763:6:69","nodeType":"YulTypedName","src":"11763:6:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"11774:3:69","nodeType":"YulTypedName","src":"11774:3:69","type":""}],"src":"11580:674:69"},{"body":{"nativeSrc":"12334:51:69","nodeType":"YulBlock","src":"12334:51:69","statements":[{"nativeSrc":"12344:35:69","nodeType":"YulAssignment","src":"12344:35:69","value":{"arguments":[{"name":"value","nativeSrc":"12373:5:69","nodeType":"YulIdentifier","src":"12373:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"12355:17:69","nodeType":"YulIdentifier","src":"12355:17:69"},"nativeSrc":"12355:24:69","nodeType":"YulFunctionCall","src":"12355:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"12344:7:69","nodeType":"YulIdentifier","src":"12344:7:69"}]}]},"name":"cleanup_t_contract$_ComptrollerInterface_$9353","nativeSrc":"12260:125:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"12316:5:69","nodeType":"YulTypedName","src":"12316:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"12326:7:69","nodeType":"YulTypedName","src":"12326:7:69","type":""}],"src":"12260:125:69"},{"body":{"nativeSrc":"12463:108:69","nodeType":"YulBlock","src":"12463:108:69","statements":[{"body":{"nativeSrc":"12549:16:69","nodeType":"YulBlock","src":"12549:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"12558:1:69","nodeType":"YulLiteral","src":"12558:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"12561:1:69","nodeType":"YulLiteral","src":"12561:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"12551:6:69","nodeType":"YulIdentifier","src":"12551:6:69"},"nativeSrc":"12551:12:69","nodeType":"YulFunctionCall","src":"12551:12:69"},"nativeSrc":"12551:12:69","nodeType":"YulExpressionStatement","src":"12551:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"12486:5:69","nodeType":"YulIdentifier","src":"12486:5:69"},{"arguments":[{"name":"value","nativeSrc":"12540:5:69","nodeType":"YulIdentifier","src":"12540:5:69"}],"functionName":{"name":"cleanup_t_contract$_ComptrollerInterface_$9353","nativeSrc":"12493:46:69","nodeType":"YulIdentifier","src":"12493:46:69"},"nativeSrc":"12493:53:69","nodeType":"YulFunctionCall","src":"12493:53:69"}],"functionName":{"name":"eq","nativeSrc":"12483:2:69","nodeType":"YulIdentifier","src":"12483:2:69"},"nativeSrc":"12483:64:69","nodeType":"YulFunctionCall","src":"12483:64:69"}],"functionName":{"name":"iszero","nativeSrc":"12476:6:69","nodeType":"YulIdentifier","src":"12476:6:69"},"nativeSrc":"12476:72:69","nodeType":"YulFunctionCall","src":"12476:72:69"},"nativeSrc":"12473:92:69","nodeType":"YulIf","src":"12473:92:69"}]},"name":"validator_revert_t_contract$_ComptrollerInterface_$9353","nativeSrc":"12391:180:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"12456:5:69","nodeType":"YulTypedName","src":"12456:5:69","type":""}],"src":"12391:180:69"},{"body":{"nativeSrc":"12669:109:69","nodeType":"YulBlock","src":"12669:109:69","statements":[{"nativeSrc":"12679:22:69","nodeType":"YulAssignment","src":"12679:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"12694:6:69","nodeType":"YulIdentifier","src":"12694:6:69"}],"functionName":{"name":"mload","nativeSrc":"12688:5:69","nodeType":"YulIdentifier","src":"12688:5:69"},"nativeSrc":"12688:13:69","nodeType":"YulFunctionCall","src":"12688:13:69"},"variableNames":[{"name":"value","nativeSrc":"12679:5:69","nodeType":"YulIdentifier","src":"12679:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"12766:5:69","nodeType":"YulIdentifier","src":"12766:5:69"}],"functionName":{"name":"validator_revert_t_contract$_ComptrollerInterface_$9353","nativeSrc":"12710:55:69","nodeType":"YulIdentifier","src":"12710:55:69"},"nativeSrc":"12710:62:69","nodeType":"YulFunctionCall","src":"12710:62:69"},"nativeSrc":"12710:62:69","nodeType":"YulExpressionStatement","src":"12710:62:69"}]},"name":"abi_decode_t_contract$_ComptrollerInterface_$9353_fromMemory","nativeSrc":"12577:201:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"12647:6:69","nodeType":"YulTypedName","src":"12647:6:69","type":""},{"name":"end","nativeSrc":"12655:3:69","nodeType":"YulTypedName","src":"12655:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"12663:5:69","nodeType":"YulTypedName","src":"12663:5:69","type":""}],"src":"12577:201:69"},{"body":{"nativeSrc":"12890:303:69","nodeType":"YulBlock","src":"12890:303:69","statements":[{"body":{"nativeSrc":"12936:83:69","nodeType":"YulBlock","src":"12936:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"12938:77:69","nodeType":"YulIdentifier","src":"12938:77:69"},"nativeSrc":"12938:79:69","nodeType":"YulFunctionCall","src":"12938:79:69"},"nativeSrc":"12938:79:69","nodeType":"YulExpressionStatement","src":"12938:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"12911:7:69","nodeType":"YulIdentifier","src":"12911:7:69"},{"name":"headStart","nativeSrc":"12920:9:69","nodeType":"YulIdentifier","src":"12920:9:69"}],"functionName":{"name":"sub","nativeSrc":"12907:3:69","nodeType":"YulIdentifier","src":"12907:3:69"},"nativeSrc":"12907:23:69","nodeType":"YulFunctionCall","src":"12907:23:69"},{"kind":"number","nativeSrc":"12932:2:69","nodeType":"YulLiteral","src":"12932:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"12903:3:69","nodeType":"YulIdentifier","src":"12903:3:69"},"nativeSrc":"12903:32:69","nodeType":"YulFunctionCall","src":"12903:32:69"},"nativeSrc":"12900:119:69","nodeType":"YulIf","src":"12900:119:69"},{"nativeSrc":"13029:157:69","nodeType":"YulBlock","src":"13029:157:69","statements":[{"nativeSrc":"13044:15:69","nodeType":"YulVariableDeclaration","src":"13044:15:69","value":{"kind":"number","nativeSrc":"13058:1:69","nodeType":"YulLiteral","src":"13058:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"13048:6:69","nodeType":"YulTypedName","src":"13048:6:69","type":""}]},{"nativeSrc":"13073:103:69","nodeType":"YulAssignment","src":"13073:103:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"13148:9:69","nodeType":"YulIdentifier","src":"13148:9:69"},{"name":"offset","nativeSrc":"13159:6:69","nodeType":"YulIdentifier","src":"13159:6:69"}],"functionName":{"name":"add","nativeSrc":"13144:3:69","nodeType":"YulIdentifier","src":"13144:3:69"},"nativeSrc":"13144:22:69","nodeType":"YulFunctionCall","src":"13144:22:69"},{"name":"dataEnd","nativeSrc":"13168:7:69","nodeType":"YulIdentifier","src":"13168:7:69"}],"functionName":{"name":"abi_decode_t_contract$_ComptrollerInterface_$9353_fromMemory","nativeSrc":"13083:60:69","nodeType":"YulIdentifier","src":"13083:60:69"},"nativeSrc":"13083:93:69","nodeType":"YulFunctionCall","src":"13083:93:69"},"variableNames":[{"name":"value0","nativeSrc":"13073:6:69","nodeType":"YulIdentifier","src":"13073:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_ComptrollerInterface_$9353_fromMemory","nativeSrc":"12784:409:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"12860:9:69","nodeType":"YulTypedName","src":"12860:9:69","type":""},{"name":"dataEnd","nativeSrc":"12871:7:69","nodeType":"YulTypedName","src":"12871:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"12883:6:69","nodeType":"YulTypedName","src":"12883:6:69","type":""}],"src":"12784:409:69"},{"body":{"nativeSrc":"13262:80:69","nodeType":"YulBlock","src":"13262:80:69","statements":[{"nativeSrc":"13272:22:69","nodeType":"YulAssignment","src":"13272:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"13287:6:69","nodeType":"YulIdentifier","src":"13287:6:69"}],"functionName":{"name":"mload","nativeSrc":"13281:5:69","nodeType":"YulIdentifier","src":"13281:5:69"},"nativeSrc":"13281:13:69","nodeType":"YulFunctionCall","src":"13281:13:69"},"variableNames":[{"name":"value","nativeSrc":"13272:5:69","nodeType":"YulIdentifier","src":"13272:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"13330:5:69","nodeType":"YulIdentifier","src":"13330:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"13303:26:69","nodeType":"YulIdentifier","src":"13303:26:69"},"nativeSrc":"13303:33:69","nodeType":"YulFunctionCall","src":"13303:33:69"},"nativeSrc":"13303:33:69","nodeType":"YulExpressionStatement","src":"13303:33:69"}]},"name":"abi_decode_t_address_fromMemory","nativeSrc":"13199:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"13240:6:69","nodeType":"YulTypedName","src":"13240:6:69","type":""},{"name":"end","nativeSrc":"13248:3:69","nodeType":"YulTypedName","src":"13248:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"13256:5:69","nodeType":"YulTypedName","src":"13256:5:69","type":""}],"src":"13199:143:69"},{"body":{"nativeSrc":"13425:274:69","nodeType":"YulBlock","src":"13425:274:69","statements":[{"body":{"nativeSrc":"13471:83:69","nodeType":"YulBlock","src":"13471:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"13473:77:69","nodeType":"YulIdentifier","src":"13473:77:69"},"nativeSrc":"13473:79:69","nodeType":"YulFunctionCall","src":"13473:79:69"},"nativeSrc":"13473:79:69","nodeType":"YulExpressionStatement","src":"13473:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"13446:7:69","nodeType":"YulIdentifier","src":"13446:7:69"},{"name":"headStart","nativeSrc":"13455:9:69","nodeType":"YulIdentifier","src":"13455:9:69"}],"functionName":{"name":"sub","nativeSrc":"13442:3:69","nodeType":"YulIdentifier","src":"13442:3:69"},"nativeSrc":"13442:23:69","nodeType":"YulFunctionCall","src":"13442:23:69"},{"kind":"number","nativeSrc":"13467:2:69","nodeType":"YulLiteral","src":"13467:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"13438:3:69","nodeType":"YulIdentifier","src":"13438:3:69"},"nativeSrc":"13438:32:69","nodeType":"YulFunctionCall","src":"13438:32:69"},"nativeSrc":"13435:119:69","nodeType":"YulIf","src":"13435:119:69"},{"nativeSrc":"13564:128:69","nodeType":"YulBlock","src":"13564:128:69","statements":[{"nativeSrc":"13579:15:69","nodeType":"YulVariableDeclaration","src":"13579:15:69","value":{"kind":"number","nativeSrc":"13593:1:69","nodeType":"YulLiteral","src":"13593:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"13583:6:69","nodeType":"YulTypedName","src":"13583:6:69","type":""}]},{"nativeSrc":"13608:74:69","nodeType":"YulAssignment","src":"13608:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"13654:9:69","nodeType":"YulIdentifier","src":"13654:9:69"},{"name":"offset","nativeSrc":"13665:6:69","nodeType":"YulIdentifier","src":"13665:6:69"}],"functionName":{"name":"add","nativeSrc":"13650:3:69","nodeType":"YulIdentifier","src":"13650:3:69"},"nativeSrc":"13650:22:69","nodeType":"YulFunctionCall","src":"13650:22:69"},{"name":"dataEnd","nativeSrc":"13674:7:69","nodeType":"YulIdentifier","src":"13674:7:69"}],"functionName":{"name":"abi_decode_t_address_fromMemory","nativeSrc":"13618:31:69","nodeType":"YulIdentifier","src":"13618:31:69"},"nativeSrc":"13618:64:69","nodeType":"YulFunctionCall","src":"13618:64:69"},"variableNames":[{"name":"value0","nativeSrc":"13608:6:69","nodeType":"YulIdentifier","src":"13608:6:69"}]}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nativeSrc":"13348:351:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"13395:9:69","nodeType":"YulTypedName","src":"13395:9:69","type":""},{"name":"dataEnd","nativeSrc":"13406:7:69","nodeType":"YulTypedName","src":"13406:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"13418:6:69","nodeType":"YulTypedName","src":"13418:6:69","type":""}],"src":"13348:351:69"},{"body":{"nativeSrc":"13831:206:69","nodeType":"YulBlock","src":"13831:206:69","statements":[{"nativeSrc":"13841:26:69","nodeType":"YulAssignment","src":"13841:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"13853:9:69","nodeType":"YulIdentifier","src":"13853:9:69"},{"kind":"number","nativeSrc":"13864:2:69","nodeType":"YulLiteral","src":"13864:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"13849:3:69","nodeType":"YulIdentifier","src":"13849:3:69"},"nativeSrc":"13849:18:69","nodeType":"YulFunctionCall","src":"13849:18:69"},"variableNames":[{"name":"tail","nativeSrc":"13841:4:69","nodeType":"YulIdentifier","src":"13841:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"13921:6:69","nodeType":"YulIdentifier","src":"13921:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"13934:9:69","nodeType":"YulIdentifier","src":"13934:9:69"},{"kind":"number","nativeSrc":"13945:1:69","nodeType":"YulLiteral","src":"13945:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"13930:3:69","nodeType":"YulIdentifier","src":"13930:3:69"},"nativeSrc":"13930:17:69","nodeType":"YulFunctionCall","src":"13930:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"13877:43:69","nodeType":"YulIdentifier","src":"13877:43:69"},"nativeSrc":"13877:71:69","nodeType":"YulFunctionCall","src":"13877:71:69"},"nativeSrc":"13877:71:69","nodeType":"YulExpressionStatement","src":"13877:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"14002:6:69","nodeType":"YulIdentifier","src":"14002:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"14015:9:69","nodeType":"YulIdentifier","src":"14015:9:69"},{"kind":"number","nativeSrc":"14026:2:69","nodeType":"YulLiteral","src":"14026:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"14011:3:69","nodeType":"YulIdentifier","src":"14011:3:69"},"nativeSrc":"14011:18:69","nodeType":"YulFunctionCall","src":"14011:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"13958:43:69","nodeType":"YulIdentifier","src":"13958:43:69"},"nativeSrc":"13958:72:69","nodeType":"YulFunctionCall","src":"13958:72:69"},"nativeSrc":"13958:72:69","nodeType":"YulExpressionStatement","src":"13958:72:69"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nativeSrc":"13705:332:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"13795:9:69","nodeType":"YulTypedName","src":"13795:9:69","type":""},{"name":"value1","nativeSrc":"13807:6:69","nodeType":"YulTypedName","src":"13807:6:69","type":""},{"name":"value0","nativeSrc":"13815:6:69","nodeType":"YulTypedName","src":"13815:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"13826:4:69","nodeType":"YulTypedName","src":"13826:4:69","type":""}],"src":"13705:332:69"},{"body":{"nativeSrc":"14225:371:69","nodeType":"YulBlock","src":"14225:371:69","statements":[{"nativeSrc":"14235:27:69","nodeType":"YulAssignment","src":"14235:27:69","value":{"arguments":[{"name":"headStart","nativeSrc":"14247:9:69","nodeType":"YulIdentifier","src":"14247:9:69"},{"kind":"number","nativeSrc":"14258:3:69","nodeType":"YulLiteral","src":"14258:3:69","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"14243:3:69","nodeType":"YulIdentifier","src":"14243:3:69"},"nativeSrc":"14243:19:69","nodeType":"YulFunctionCall","src":"14243:19:69"},"variableNames":[{"name":"tail","nativeSrc":"14235:4:69","nodeType":"YulIdentifier","src":"14235:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"14316:6:69","nodeType":"YulIdentifier","src":"14316:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"14329:9:69","nodeType":"YulIdentifier","src":"14329:9:69"},{"kind":"number","nativeSrc":"14340:1:69","nodeType":"YulLiteral","src":"14340:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"14325:3:69","nodeType":"YulIdentifier","src":"14325:3:69"},"nativeSrc":"14325:17:69","nodeType":"YulFunctionCall","src":"14325:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"14272:43:69","nodeType":"YulIdentifier","src":"14272:43:69"},"nativeSrc":"14272:71:69","nodeType":"YulFunctionCall","src":"14272:71:69"},"nativeSrc":"14272:71:69","nodeType":"YulExpressionStatement","src":"14272:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"14397:6:69","nodeType":"YulIdentifier","src":"14397:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"14410:9:69","nodeType":"YulIdentifier","src":"14410:9:69"},{"kind":"number","nativeSrc":"14421:2:69","nodeType":"YulLiteral","src":"14421:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"14406:3:69","nodeType":"YulIdentifier","src":"14406:3:69"},"nativeSrc":"14406:18:69","nodeType":"YulFunctionCall","src":"14406:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"14353:43:69","nodeType":"YulIdentifier","src":"14353:43:69"},"nativeSrc":"14353:72:69","nodeType":"YulFunctionCall","src":"14353:72:69"},"nativeSrc":"14353:72:69","nodeType":"YulExpressionStatement","src":"14353:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"14479:6:69","nodeType":"YulIdentifier","src":"14479:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"14492:9:69","nodeType":"YulIdentifier","src":"14492:9:69"},{"kind":"number","nativeSrc":"14503:2:69","nodeType":"YulLiteral","src":"14503:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"14488:3:69","nodeType":"YulIdentifier","src":"14488:3:69"},"nativeSrc":"14488:18:69","nodeType":"YulFunctionCall","src":"14488:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"14435:43:69","nodeType":"YulIdentifier","src":"14435:43:69"},"nativeSrc":"14435:72:69","nodeType":"YulFunctionCall","src":"14435:72:69"},"nativeSrc":"14435:72:69","nodeType":"YulExpressionStatement","src":"14435:72:69"},{"expression":{"arguments":[{"name":"value3","nativeSrc":"14561:6:69","nodeType":"YulIdentifier","src":"14561:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"14574:9:69","nodeType":"YulIdentifier","src":"14574:9:69"},{"kind":"number","nativeSrc":"14585:2:69","nodeType":"YulLiteral","src":"14585:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"14570:3:69","nodeType":"YulIdentifier","src":"14570:3:69"},"nativeSrc":"14570:18:69","nodeType":"YulFunctionCall","src":"14570:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"14517:43:69","nodeType":"YulIdentifier","src":"14517:43:69"},"nativeSrc":"14517:72:69","nodeType":"YulFunctionCall","src":"14517:72:69"},"nativeSrc":"14517:72:69","nodeType":"YulExpressionStatement","src":"14517:72:69"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_address__to_t_address_t_address_t_uint256_t_address__fromStack_reversed","nativeSrc":"14043:553:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"14173:9:69","nodeType":"YulTypedName","src":"14173:9:69","type":""},{"name":"value3","nativeSrc":"14185:6:69","nodeType":"YulTypedName","src":"14185:6:69","type":""},{"name":"value2","nativeSrc":"14193:6:69","nodeType":"YulTypedName","src":"14193:6:69","type":""},{"name":"value1","nativeSrc":"14201:6:69","nodeType":"YulTypedName","src":"14201:6:69","type":""},{"name":"value0","nativeSrc":"14209:6:69","nodeType":"YulTypedName","src":"14209:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"14220:4:69","nodeType":"YulTypedName","src":"14220:4:69","type":""}],"src":"14043:553:69"},{"body":{"nativeSrc":"14708:127:69","nodeType":"YulBlock","src":"14708:127:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"14730:6:69","nodeType":"YulIdentifier","src":"14730:6:69"},{"kind":"number","nativeSrc":"14738:1:69","nodeType":"YulLiteral","src":"14738:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"14726:3:69","nodeType":"YulIdentifier","src":"14726:3:69"},"nativeSrc":"14726:14:69","nodeType":"YulFunctionCall","src":"14726:14:69"},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320616c726561","kind":"string","nativeSrc":"14742:34:69","nodeType":"YulLiteral","src":"14742:34:69","type":"","value":"Initializable: contract is alrea"}],"functionName":{"name":"mstore","nativeSrc":"14719:6:69","nodeType":"YulIdentifier","src":"14719:6:69"},"nativeSrc":"14719:58:69","nodeType":"YulFunctionCall","src":"14719:58:69"},"nativeSrc":"14719:58:69","nodeType":"YulExpressionStatement","src":"14719:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"14798:6:69","nodeType":"YulIdentifier","src":"14798:6:69"},{"kind":"number","nativeSrc":"14806:2:69","nodeType":"YulLiteral","src":"14806:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"14794:3:69","nodeType":"YulIdentifier","src":"14794:3:69"},"nativeSrc":"14794:15:69","nodeType":"YulFunctionCall","src":"14794:15:69"},{"hexValue":"647920696e697469616c697a6564","kind":"string","nativeSrc":"14811:16:69","nodeType":"YulLiteral","src":"14811:16:69","type":"","value":"dy initialized"}],"functionName":{"name":"mstore","nativeSrc":"14787:6:69","nodeType":"YulIdentifier","src":"14787:6:69"},"nativeSrc":"14787:41:69","nodeType":"YulFunctionCall","src":"14787:41:69"},"nativeSrc":"14787:41:69","nodeType":"YulExpressionStatement","src":"14787:41:69"}]},"name":"store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","nativeSrc":"14602:233:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"14700:6:69","nodeType":"YulTypedName","src":"14700:6:69","type":""}],"src":"14602:233:69"},{"body":{"nativeSrc":"14987:220:69","nodeType":"YulBlock","src":"14987:220:69","statements":[{"nativeSrc":"14997:74:69","nodeType":"YulAssignment","src":"14997:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"15063:3:69","nodeType":"YulIdentifier","src":"15063:3:69"},{"kind":"number","nativeSrc":"15068:2:69","nodeType":"YulLiteral","src":"15068:2:69","type":"","value":"46"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"15004:58:69","nodeType":"YulIdentifier","src":"15004:58:69"},"nativeSrc":"15004:67:69","nodeType":"YulFunctionCall","src":"15004:67:69"},"variableNames":[{"name":"pos","nativeSrc":"14997:3:69","nodeType":"YulIdentifier","src":"14997:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"15169:3:69","nodeType":"YulIdentifier","src":"15169:3:69"}],"functionName":{"name":"store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","nativeSrc":"15080:88:69","nodeType":"YulIdentifier","src":"15080:88:69"},"nativeSrc":"15080:93:69","nodeType":"YulFunctionCall","src":"15080:93:69"},"nativeSrc":"15080:93:69","nodeType":"YulExpressionStatement","src":"15080:93:69"},{"nativeSrc":"15182:19:69","nodeType":"YulAssignment","src":"15182:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"15193:3:69","nodeType":"YulIdentifier","src":"15193:3:69"},{"kind":"number","nativeSrc":"15198:2:69","nodeType":"YulLiteral","src":"15198:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"15189:3:69","nodeType":"YulIdentifier","src":"15189:3:69"},"nativeSrc":"15189:12:69","nodeType":"YulFunctionCall","src":"15189:12:69"},"variableNames":[{"name":"end","nativeSrc":"15182:3:69","nodeType":"YulIdentifier","src":"15182:3:69"}]}]},"name":"abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack","nativeSrc":"14841:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"14975:3:69","nodeType":"YulTypedName","src":"14975:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"14983:3:69","nodeType":"YulTypedName","src":"14983:3:69","type":""}],"src":"14841:366:69"},{"body":{"nativeSrc":"15384:248:69","nodeType":"YulBlock","src":"15384:248:69","statements":[{"nativeSrc":"15394:26:69","nodeType":"YulAssignment","src":"15394:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"15406:9:69","nodeType":"YulIdentifier","src":"15406:9:69"},{"kind":"number","nativeSrc":"15417:2:69","nodeType":"YulLiteral","src":"15417:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"15402:3:69","nodeType":"YulIdentifier","src":"15402:3:69"},"nativeSrc":"15402:18:69","nodeType":"YulFunctionCall","src":"15402:18:69"},"variableNames":[{"name":"tail","nativeSrc":"15394:4:69","nodeType":"YulIdentifier","src":"15394:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"15441:9:69","nodeType":"YulIdentifier","src":"15441:9:69"},{"kind":"number","nativeSrc":"15452:1:69","nodeType":"YulLiteral","src":"15452:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"15437:3:69","nodeType":"YulIdentifier","src":"15437:3:69"},"nativeSrc":"15437:17:69","nodeType":"YulFunctionCall","src":"15437:17:69"},{"arguments":[{"name":"tail","nativeSrc":"15460:4:69","nodeType":"YulIdentifier","src":"15460:4:69"},{"name":"headStart","nativeSrc":"15466:9:69","nodeType":"YulIdentifier","src":"15466:9:69"}],"functionName":{"name":"sub","nativeSrc":"15456:3:69","nodeType":"YulIdentifier","src":"15456:3:69"},"nativeSrc":"15456:20:69","nodeType":"YulFunctionCall","src":"15456:20:69"}],"functionName":{"name":"mstore","nativeSrc":"15430:6:69","nodeType":"YulIdentifier","src":"15430:6:69"},"nativeSrc":"15430:47:69","nodeType":"YulFunctionCall","src":"15430:47:69"},"nativeSrc":"15430:47:69","nodeType":"YulExpressionStatement","src":"15430:47:69"},{"nativeSrc":"15486:139:69","nodeType":"YulAssignment","src":"15486:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"15620:4:69","nodeType":"YulIdentifier","src":"15620:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack","nativeSrc":"15494:124:69","nodeType":"YulIdentifier","src":"15494:124:69"},"nativeSrc":"15494:131:69","nodeType":"YulFunctionCall","src":"15494:131:69"},"variableNames":[{"name":"tail","nativeSrc":"15486:4:69","nodeType":"YulIdentifier","src":"15486:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"15213:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"15364:9:69","nodeType":"YulTypedName","src":"15364:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"15379:4:69","nodeType":"YulTypedName","src":"15379:4:69","type":""}],"src":"15213:419:69"},{"body":{"nativeSrc":"15691:32:69","nodeType":"YulBlock","src":"15691:32:69","statements":[{"nativeSrc":"15701:16:69","nodeType":"YulAssignment","src":"15701:16:69","value":{"name":"value","nativeSrc":"15712:5:69","nodeType":"YulIdentifier","src":"15712:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"15701:7:69","nodeType":"YulIdentifier","src":"15701:7:69"}]}]},"name":"cleanup_t_rational_1_by_1","nativeSrc":"15638:85:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"15673:5:69","nodeType":"YulTypedName","src":"15673:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"15683:7:69","nodeType":"YulTypedName","src":"15683:7:69","type":""}],"src":"15638:85:69"},{"body":{"nativeSrc":"15772:43:69","nodeType":"YulBlock","src":"15772:43:69","statements":[{"nativeSrc":"15782:27:69","nodeType":"YulAssignment","src":"15782:27:69","value":{"arguments":[{"name":"value","nativeSrc":"15797:5:69","nodeType":"YulIdentifier","src":"15797:5:69"},{"kind":"number","nativeSrc":"15804:4:69","nodeType":"YulLiteral","src":"15804:4:69","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"15793:3:69","nodeType":"YulIdentifier","src":"15793:3:69"},"nativeSrc":"15793:16:69","nodeType":"YulFunctionCall","src":"15793:16:69"},"variableNames":[{"name":"cleaned","nativeSrc":"15782:7:69","nodeType":"YulIdentifier","src":"15782:7:69"}]}]},"name":"cleanup_t_uint8","nativeSrc":"15729:86:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"15754:5:69","nodeType":"YulTypedName","src":"15754:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"15764:7:69","nodeType":"YulTypedName","src":"15764:7:69","type":""}],"src":"15729:86:69"},{"body":{"nativeSrc":"15887:88:69","nodeType":"YulBlock","src":"15887:88:69","statements":[{"nativeSrc":"15897:72:69","nodeType":"YulAssignment","src":"15897:72:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"15961:5:69","nodeType":"YulIdentifier","src":"15961:5:69"}],"functionName":{"name":"cleanup_t_rational_1_by_1","nativeSrc":"15935:25:69","nodeType":"YulIdentifier","src":"15935:25:69"},"nativeSrc":"15935:32:69","nodeType":"YulFunctionCall","src":"15935:32:69"}],"functionName":{"name":"identity","nativeSrc":"15926:8:69","nodeType":"YulIdentifier","src":"15926:8:69"},"nativeSrc":"15926:42:69","nodeType":"YulFunctionCall","src":"15926:42:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"15910:15:69","nodeType":"YulIdentifier","src":"15910:15:69"},"nativeSrc":"15910:59:69","nodeType":"YulFunctionCall","src":"15910:59:69"},"variableNames":[{"name":"converted","nativeSrc":"15897:9:69","nodeType":"YulIdentifier","src":"15897:9:69"}]}]},"name":"convert_t_rational_1_by_1_to_t_uint8","nativeSrc":"15821:154:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"15867:5:69","nodeType":"YulTypedName","src":"15867:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"15877:9:69","nodeType":"YulTypedName","src":"15877:9:69","type":""}],"src":"15821:154:69"},{"body":{"nativeSrc":"16052:72:69","nodeType":"YulBlock","src":"16052:72:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"16069:3:69","nodeType":"YulIdentifier","src":"16069:3:69"},{"arguments":[{"name":"value","nativeSrc":"16111:5:69","nodeType":"YulIdentifier","src":"16111:5:69"}],"functionName":{"name":"convert_t_rational_1_by_1_to_t_uint8","nativeSrc":"16074:36:69","nodeType":"YulIdentifier","src":"16074:36:69"},"nativeSrc":"16074:43:69","nodeType":"YulFunctionCall","src":"16074:43:69"}],"functionName":{"name":"mstore","nativeSrc":"16062:6:69","nodeType":"YulIdentifier","src":"16062:6:69"},"nativeSrc":"16062:56:69","nodeType":"YulFunctionCall","src":"16062:56:69"},"nativeSrc":"16062:56:69","nodeType":"YulExpressionStatement","src":"16062:56:69"}]},"name":"abi_encode_t_rational_1_by_1_to_t_uint8_fromStack","nativeSrc":"15981:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"16040:5:69","nodeType":"YulTypedName","src":"16040:5:69","type":""},{"name":"pos","nativeSrc":"16047:3:69","nodeType":"YulTypedName","src":"16047:3:69","type":""}],"src":"15981:143:69"},{"body":{"nativeSrc":"16234:130:69","nodeType":"YulBlock","src":"16234:130:69","statements":[{"nativeSrc":"16244:26:69","nodeType":"YulAssignment","src":"16244:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"16256:9:69","nodeType":"YulIdentifier","src":"16256:9:69"},{"kind":"number","nativeSrc":"16267:2:69","nodeType":"YulLiteral","src":"16267:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"16252:3:69","nodeType":"YulIdentifier","src":"16252:3:69"},"nativeSrc":"16252:18:69","nodeType":"YulFunctionCall","src":"16252:18:69"},"variableNames":[{"name":"tail","nativeSrc":"16244:4:69","nodeType":"YulIdentifier","src":"16244:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"16330:6:69","nodeType":"YulIdentifier","src":"16330:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"16343:9:69","nodeType":"YulIdentifier","src":"16343:9:69"},{"kind":"number","nativeSrc":"16354:1:69","nodeType":"YulLiteral","src":"16354:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"16339:3:69","nodeType":"YulIdentifier","src":"16339:3:69"},"nativeSrc":"16339:17:69","nodeType":"YulFunctionCall","src":"16339:17:69"}],"functionName":{"name":"abi_encode_t_rational_1_by_1_to_t_uint8_fromStack","nativeSrc":"16280:49:69","nodeType":"YulIdentifier","src":"16280:49:69"},"nativeSrc":"16280:77:69","nodeType":"YulFunctionCall","src":"16280:77:69"},"nativeSrc":"16280:77:69","nodeType":"YulExpressionStatement","src":"16280:77:69"}]},"name":"abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed","nativeSrc":"16130:234:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"16206:9:69","nodeType":"YulTypedName","src":"16206:9:69","type":""},{"name":"value0","nativeSrc":"16218:6:69","nodeType":"YulTypedName","src":"16218:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"16229:4:69","nodeType":"YulTypedName","src":"16229:4:69","type":""}],"src":"16130:234:69"},{"body":{"nativeSrc":"16476:76:69","nodeType":"YulBlock","src":"16476:76:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"16498:6:69","nodeType":"YulIdentifier","src":"16498:6:69"},{"kind":"number","nativeSrc":"16506:1:69","nodeType":"YulLiteral","src":"16506:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"16494:3:69","nodeType":"YulIdentifier","src":"16494:3:69"},"nativeSrc":"16494:14:69","nodeType":"YulFunctionCall","src":"16494:14:69"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nativeSrc":"16510:34:69","nodeType":"YulLiteral","src":"16510:34:69","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nativeSrc":"16487:6:69","nodeType":"YulIdentifier","src":"16487:6:69"},"nativeSrc":"16487:58:69","nodeType":"YulFunctionCall","src":"16487:58:69"},"nativeSrc":"16487:58:69","nodeType":"YulExpressionStatement","src":"16487:58:69"}]},"name":"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","nativeSrc":"16370:182:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"16468:6:69","nodeType":"YulTypedName","src":"16468:6:69","type":""}],"src":"16370:182:69"},{"body":{"nativeSrc":"16704:220:69","nodeType":"YulBlock","src":"16704:220:69","statements":[{"nativeSrc":"16714:74:69","nodeType":"YulAssignment","src":"16714:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"16780:3:69","nodeType":"YulIdentifier","src":"16780:3:69"},{"kind":"number","nativeSrc":"16785:2:69","nodeType":"YulLiteral","src":"16785:2:69","type":"","value":"32"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"16721:58:69","nodeType":"YulIdentifier","src":"16721:58:69"},"nativeSrc":"16721:67:69","nodeType":"YulFunctionCall","src":"16721:67:69"},"variableNames":[{"name":"pos","nativeSrc":"16714:3:69","nodeType":"YulIdentifier","src":"16714:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"16886:3:69","nodeType":"YulIdentifier","src":"16886:3:69"}],"functionName":{"name":"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","nativeSrc":"16797:88:69","nodeType":"YulIdentifier","src":"16797:88:69"},"nativeSrc":"16797:93:69","nodeType":"YulFunctionCall","src":"16797:93:69"},"nativeSrc":"16797:93:69","nodeType":"YulExpressionStatement","src":"16797:93:69"},{"nativeSrc":"16899:19:69","nodeType":"YulAssignment","src":"16899:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"16910:3:69","nodeType":"YulIdentifier","src":"16910:3:69"},{"kind":"number","nativeSrc":"16915:2:69","nodeType":"YulLiteral","src":"16915:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"16906:3:69","nodeType":"YulIdentifier","src":"16906:3:69"},"nativeSrc":"16906:12:69","nodeType":"YulFunctionCall","src":"16906:12:69"},"variableNames":[{"name":"end","nativeSrc":"16899:3:69","nodeType":"YulIdentifier","src":"16899:3:69"}]}]},"name":"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack","nativeSrc":"16558:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"16692:3:69","nodeType":"YulTypedName","src":"16692:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"16700:3:69","nodeType":"YulTypedName","src":"16700:3:69","type":""}],"src":"16558:366:69"},{"body":{"nativeSrc":"17101:248:69","nodeType":"YulBlock","src":"17101:248:69","statements":[{"nativeSrc":"17111:26:69","nodeType":"YulAssignment","src":"17111:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"17123:9:69","nodeType":"YulIdentifier","src":"17123:9:69"},{"kind":"number","nativeSrc":"17134:2:69","nodeType":"YulLiteral","src":"17134:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"17119:3:69","nodeType":"YulIdentifier","src":"17119:3:69"},"nativeSrc":"17119:18:69","nodeType":"YulFunctionCall","src":"17119:18:69"},"variableNames":[{"name":"tail","nativeSrc":"17111:4:69","nodeType":"YulIdentifier","src":"17111:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"17158:9:69","nodeType":"YulIdentifier","src":"17158:9:69"},{"kind":"number","nativeSrc":"17169:1:69","nodeType":"YulLiteral","src":"17169:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"17154:3:69","nodeType":"YulIdentifier","src":"17154:3:69"},"nativeSrc":"17154:17:69","nodeType":"YulFunctionCall","src":"17154:17:69"},{"arguments":[{"name":"tail","nativeSrc":"17177:4:69","nodeType":"YulIdentifier","src":"17177:4:69"},{"name":"headStart","nativeSrc":"17183:9:69","nodeType":"YulIdentifier","src":"17183:9:69"}],"functionName":{"name":"sub","nativeSrc":"17173:3:69","nodeType":"YulIdentifier","src":"17173:3:69"},"nativeSrc":"17173:20:69","nodeType":"YulFunctionCall","src":"17173:20:69"}],"functionName":{"name":"mstore","nativeSrc":"17147:6:69","nodeType":"YulIdentifier","src":"17147:6:69"},"nativeSrc":"17147:47:69","nodeType":"YulFunctionCall","src":"17147:47:69"},"nativeSrc":"17147:47:69","nodeType":"YulExpressionStatement","src":"17147:47:69"},{"nativeSrc":"17203:139:69","nodeType":"YulAssignment","src":"17203:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"17337:4:69","nodeType":"YulIdentifier","src":"17337:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack","nativeSrc":"17211:124:69","nodeType":"YulIdentifier","src":"17211:124:69"},"nativeSrc":"17211:131:69","nodeType":"YulFunctionCall","src":"17211:131:69"},"variableNames":[{"name":"tail","nativeSrc":"17203:4:69","nodeType":"YulIdentifier","src":"17203:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"16930:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"17081:9:69","nodeType":"YulTypedName","src":"17081:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"17096:4:69","nodeType":"YulTypedName","src":"17096:4:69","type":""}],"src":"16930:419:69"},{"body":{"nativeSrc":"17461:118:69","nodeType":"YulBlock","src":"17461:118:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"17483:6:69","nodeType":"YulIdentifier","src":"17483:6:69"},{"kind":"number","nativeSrc":"17491:1:69","nodeType":"YulLiteral","src":"17491:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"17479:3:69","nodeType":"YulIdentifier","src":"17479:3:69"},"nativeSrc":"17479:14:69","nodeType":"YulFunctionCall","src":"17479:14:69"},{"hexValue":"696e76616c696420616365737320636f6e74726f6c206d616e61676572206164","kind":"string","nativeSrc":"17495:34:69","nodeType":"YulLiteral","src":"17495:34:69","type":"","value":"invalid acess control manager ad"}],"functionName":{"name":"mstore","nativeSrc":"17472:6:69","nodeType":"YulIdentifier","src":"17472:6:69"},"nativeSrc":"17472:58:69","nodeType":"YulFunctionCall","src":"17472:58:69"},"nativeSrc":"17472:58:69","nodeType":"YulExpressionStatement","src":"17472:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"17551:6:69","nodeType":"YulIdentifier","src":"17551:6:69"},{"kind":"number","nativeSrc":"17559:2:69","nodeType":"YulLiteral","src":"17559:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"17547:3:69","nodeType":"YulIdentifier","src":"17547:3:69"},"nativeSrc":"17547:15:69","nodeType":"YulFunctionCall","src":"17547:15:69"},{"hexValue":"6472657373","kind":"string","nativeSrc":"17564:7:69","nodeType":"YulLiteral","src":"17564:7:69","type":"","value":"dress"}],"functionName":{"name":"mstore","nativeSrc":"17540:6:69","nodeType":"YulIdentifier","src":"17540:6:69"},"nativeSrc":"17540:32:69","nodeType":"YulFunctionCall","src":"17540:32:69"},"nativeSrc":"17540:32:69","nodeType":"YulExpressionStatement","src":"17540:32:69"}]},"name":"store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb","nativeSrc":"17355:224:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"17453:6:69","nodeType":"YulTypedName","src":"17453:6:69","type":""}],"src":"17355:224:69"},{"body":{"nativeSrc":"17731:220:69","nodeType":"YulBlock","src":"17731:220:69","statements":[{"nativeSrc":"17741:74:69","nodeType":"YulAssignment","src":"17741:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"17807:3:69","nodeType":"YulIdentifier","src":"17807:3:69"},{"kind":"number","nativeSrc":"17812:2:69","nodeType":"YulLiteral","src":"17812:2:69","type":"","value":"37"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"17748:58:69","nodeType":"YulIdentifier","src":"17748:58:69"},"nativeSrc":"17748:67:69","nodeType":"YulFunctionCall","src":"17748:67:69"},"variableNames":[{"name":"pos","nativeSrc":"17741:3:69","nodeType":"YulIdentifier","src":"17741:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"17913:3:69","nodeType":"YulIdentifier","src":"17913:3:69"}],"functionName":{"name":"store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb","nativeSrc":"17824:88:69","nodeType":"YulIdentifier","src":"17824:88:69"},"nativeSrc":"17824:93:69","nodeType":"YulFunctionCall","src":"17824:93:69"},"nativeSrc":"17824:93:69","nodeType":"YulExpressionStatement","src":"17824:93:69"},{"nativeSrc":"17926:19:69","nodeType":"YulAssignment","src":"17926:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"17937:3:69","nodeType":"YulIdentifier","src":"17937:3:69"},{"kind":"number","nativeSrc":"17942:2:69","nodeType":"YulLiteral","src":"17942:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"17933:3:69","nodeType":"YulIdentifier","src":"17933:3:69"},"nativeSrc":"17933:12:69","nodeType":"YulFunctionCall","src":"17933:12:69"},"variableNames":[{"name":"end","nativeSrc":"17926:3:69","nodeType":"YulIdentifier","src":"17926:3:69"}]}]},"name":"abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack","nativeSrc":"17585:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"17719:3:69","nodeType":"YulTypedName","src":"17719:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"17727:3:69","nodeType":"YulTypedName","src":"17727:3:69","type":""}],"src":"17585:366:69"},{"body":{"nativeSrc":"18128:248:69","nodeType":"YulBlock","src":"18128:248:69","statements":[{"nativeSrc":"18138:26:69","nodeType":"YulAssignment","src":"18138:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"18150:9:69","nodeType":"YulIdentifier","src":"18150:9:69"},{"kind":"number","nativeSrc":"18161:2:69","nodeType":"YulLiteral","src":"18161:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"18146:3:69","nodeType":"YulIdentifier","src":"18146:3:69"},"nativeSrc":"18146:18:69","nodeType":"YulFunctionCall","src":"18146:18:69"},"variableNames":[{"name":"tail","nativeSrc":"18138:4:69","nodeType":"YulIdentifier","src":"18138:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"18185:9:69","nodeType":"YulIdentifier","src":"18185:9:69"},{"kind":"number","nativeSrc":"18196:1:69","nodeType":"YulLiteral","src":"18196:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"18181:3:69","nodeType":"YulIdentifier","src":"18181:3:69"},"nativeSrc":"18181:17:69","nodeType":"YulFunctionCall","src":"18181:17:69"},{"arguments":[{"name":"tail","nativeSrc":"18204:4:69","nodeType":"YulIdentifier","src":"18204:4:69"},{"name":"headStart","nativeSrc":"18210:9:69","nodeType":"YulIdentifier","src":"18210:9:69"}],"functionName":{"name":"sub","nativeSrc":"18200:3:69","nodeType":"YulIdentifier","src":"18200:3:69"},"nativeSrc":"18200:20:69","nodeType":"YulFunctionCall","src":"18200:20:69"}],"functionName":{"name":"mstore","nativeSrc":"18174:6:69","nodeType":"YulIdentifier","src":"18174:6:69"},"nativeSrc":"18174:47:69","nodeType":"YulFunctionCall","src":"18174:47:69"},"nativeSrc":"18174:47:69","nodeType":"YulExpressionStatement","src":"18174:47:69"},{"nativeSrc":"18230:139:69","nodeType":"YulAssignment","src":"18230:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"18364:4:69","nodeType":"YulIdentifier","src":"18364:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack","nativeSrc":"18238:124:69","nodeType":"YulIdentifier","src":"18238:124:69"},"nativeSrc":"18238:131:69","nodeType":"YulFunctionCall","src":"18238:131:69"},"variableNames":[{"name":"tail","nativeSrc":"18230:4:69","nodeType":"YulIdentifier","src":"18230:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"17957:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"18108:9:69","nodeType":"YulTypedName","src":"18108:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"18123:4:69","nodeType":"YulTypedName","src":"18123:4:69","type":""}],"src":"17957:419:69"},{"body":{"nativeSrc":"18441:40:69","nodeType":"YulBlock","src":"18441:40:69","statements":[{"nativeSrc":"18452:22:69","nodeType":"YulAssignment","src":"18452:22:69","value":{"arguments":[{"name":"value","nativeSrc":"18468:5:69","nodeType":"YulIdentifier","src":"18468:5:69"}],"functionName":{"name":"mload","nativeSrc":"18462:5:69","nodeType":"YulIdentifier","src":"18462:5:69"},"nativeSrc":"18462:12:69","nodeType":"YulFunctionCall","src":"18462:12:69"},"variableNames":[{"name":"length","nativeSrc":"18452:6:69","nodeType":"YulIdentifier","src":"18452:6:69"}]}]},"name":"array_length_t_string_memory_ptr","nativeSrc":"18382:99:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"18424:5:69","nodeType":"YulTypedName","src":"18424:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"18434:6:69","nodeType":"YulTypedName","src":"18434:6:69","type":""}],"src":"18382:99:69"},{"body":{"nativeSrc":"18579:285:69","nodeType":"YulBlock","src":"18579:285:69","statements":[{"nativeSrc":"18589:53:69","nodeType":"YulVariableDeclaration","src":"18589:53:69","value":{"arguments":[{"name":"value","nativeSrc":"18636:5:69","nodeType":"YulIdentifier","src":"18636:5:69"}],"functionName":{"name":"array_length_t_string_memory_ptr","nativeSrc":"18603:32:69","nodeType":"YulIdentifier","src":"18603:32:69"},"nativeSrc":"18603:39:69","nodeType":"YulFunctionCall","src":"18603:39:69"},"variables":[{"name":"length","nativeSrc":"18593:6:69","nodeType":"YulTypedName","src":"18593:6:69","type":""}]},{"nativeSrc":"18651:78:69","nodeType":"YulAssignment","src":"18651:78:69","value":{"arguments":[{"name":"pos","nativeSrc":"18717:3:69","nodeType":"YulIdentifier","src":"18717:3:69"},{"name":"length","nativeSrc":"18722:6:69","nodeType":"YulIdentifier","src":"18722:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"18658:58:69","nodeType":"YulIdentifier","src":"18658:58:69"},"nativeSrc":"18658:71:69","nodeType":"YulFunctionCall","src":"18658:71:69"},"variableNames":[{"name":"pos","nativeSrc":"18651:3:69","nodeType":"YulIdentifier","src":"18651:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"18777:5:69","nodeType":"YulIdentifier","src":"18777:5:69"},{"kind":"number","nativeSrc":"18784:4:69","nodeType":"YulLiteral","src":"18784:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18773:3:69","nodeType":"YulIdentifier","src":"18773:3:69"},"nativeSrc":"18773:16:69","nodeType":"YulFunctionCall","src":"18773:16:69"},{"name":"pos","nativeSrc":"18791:3:69","nodeType":"YulIdentifier","src":"18791:3:69"},{"name":"length","nativeSrc":"18796:6:69","nodeType":"YulIdentifier","src":"18796:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"18738:34:69","nodeType":"YulIdentifier","src":"18738:34:69"},"nativeSrc":"18738:65:69","nodeType":"YulFunctionCall","src":"18738:65:69"},"nativeSrc":"18738:65:69","nodeType":"YulExpressionStatement","src":"18738:65:69"},{"nativeSrc":"18812:46:69","nodeType":"YulAssignment","src":"18812:46:69","value":{"arguments":[{"name":"pos","nativeSrc":"18823:3:69","nodeType":"YulIdentifier","src":"18823:3:69"},{"arguments":[{"name":"length","nativeSrc":"18850:6:69","nodeType":"YulIdentifier","src":"18850:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"18828:21:69","nodeType":"YulIdentifier","src":"18828:21:69"},"nativeSrc":"18828:29:69","nodeType":"YulFunctionCall","src":"18828:29:69"}],"functionName":{"name":"add","nativeSrc":"18819:3:69","nodeType":"YulIdentifier","src":"18819:3:69"},"nativeSrc":"18819:39:69","nodeType":"YulFunctionCall","src":"18819:39:69"},"variableNames":[{"name":"end","nativeSrc":"18812:3:69","nodeType":"YulIdentifier","src":"18812:3:69"}]}]},"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"18487:377:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"18560:5:69","nodeType":"YulTypedName","src":"18560:5:69","type":""},{"name":"pos","nativeSrc":"18567:3:69","nodeType":"YulTypedName","src":"18567:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"18575:3:69","nodeType":"YulTypedName","src":"18575:3:69","type":""}],"src":"18487:377:69"},{"body":{"nativeSrc":"19016:277:69","nodeType":"YulBlock","src":"19016:277:69","statements":[{"nativeSrc":"19026:26:69","nodeType":"YulAssignment","src":"19026:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"19038:9:69","nodeType":"YulIdentifier","src":"19038:9:69"},{"kind":"number","nativeSrc":"19049:2:69","nodeType":"YulLiteral","src":"19049:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"19034:3:69","nodeType":"YulIdentifier","src":"19034:3:69"},"nativeSrc":"19034:18:69","nodeType":"YulFunctionCall","src":"19034:18:69"},"variableNames":[{"name":"tail","nativeSrc":"19026:4:69","nodeType":"YulIdentifier","src":"19026:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"19106:6:69","nodeType":"YulIdentifier","src":"19106:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"19119:9:69","nodeType":"YulIdentifier","src":"19119:9:69"},{"kind":"number","nativeSrc":"19130:1:69","nodeType":"YulLiteral","src":"19130:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"19115:3:69","nodeType":"YulIdentifier","src":"19115:3:69"},"nativeSrc":"19115:17:69","nodeType":"YulFunctionCall","src":"19115:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"19062:43:69","nodeType":"YulIdentifier","src":"19062:43:69"},"nativeSrc":"19062:71:69","nodeType":"YulFunctionCall","src":"19062:71:69"},"nativeSrc":"19062:71:69","nodeType":"YulExpressionStatement","src":"19062:71:69"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"19154:9:69","nodeType":"YulIdentifier","src":"19154:9:69"},{"kind":"number","nativeSrc":"19165:2:69","nodeType":"YulLiteral","src":"19165:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"19150:3:69","nodeType":"YulIdentifier","src":"19150:3:69"},"nativeSrc":"19150:18:69","nodeType":"YulFunctionCall","src":"19150:18:69"},{"arguments":[{"name":"tail","nativeSrc":"19174:4:69","nodeType":"YulIdentifier","src":"19174:4:69"},{"name":"headStart","nativeSrc":"19180:9:69","nodeType":"YulIdentifier","src":"19180:9:69"}],"functionName":{"name":"sub","nativeSrc":"19170:3:69","nodeType":"YulIdentifier","src":"19170:3:69"},"nativeSrc":"19170:20:69","nodeType":"YulFunctionCall","src":"19170:20:69"}],"functionName":{"name":"mstore","nativeSrc":"19143:6:69","nodeType":"YulIdentifier","src":"19143:6:69"},"nativeSrc":"19143:48:69","nodeType":"YulFunctionCall","src":"19143:48:69"},"nativeSrc":"19143:48:69","nodeType":"YulExpressionStatement","src":"19143:48:69"},{"nativeSrc":"19200:86:69","nodeType":"YulAssignment","src":"19200:86:69","value":{"arguments":[{"name":"value1","nativeSrc":"19272:6:69","nodeType":"YulIdentifier","src":"19272:6:69"},{"name":"tail","nativeSrc":"19281:4:69","nodeType":"YulIdentifier","src":"19281:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"19208:63:69","nodeType":"YulIdentifier","src":"19208:63:69"},"nativeSrc":"19208:78:69","nodeType":"YulFunctionCall","src":"19208:78:69"},"variableNames":[{"name":"tail","nativeSrc":"19200:4:69","nodeType":"YulIdentifier","src":"19200:4:69"}]}]},"name":"abi_encode_tuple_t_address_t_string_memory_ptr__to_t_address_t_string_memory_ptr__fromStack_reversed","nativeSrc":"18870:423:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"18980:9:69","nodeType":"YulTypedName","src":"18980:9:69","type":""},{"name":"value1","nativeSrc":"18992:6:69","nodeType":"YulTypedName","src":"18992:6:69","type":""},{"name":"value0","nativeSrc":"19000:6:69","nodeType":"YulTypedName","src":"19000:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"19011:4:69","nodeType":"YulTypedName","src":"19011:4:69","type":""}],"src":"18870:423:69"},{"body":{"nativeSrc":"19341:48:69","nodeType":"YulBlock","src":"19341:48:69","statements":[{"nativeSrc":"19351:32:69","nodeType":"YulAssignment","src":"19351:32:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"19376:5:69","nodeType":"YulIdentifier","src":"19376:5:69"}],"functionName":{"name":"iszero","nativeSrc":"19369:6:69","nodeType":"YulIdentifier","src":"19369:6:69"},"nativeSrc":"19369:13:69","nodeType":"YulFunctionCall","src":"19369:13:69"}],"functionName":{"name":"iszero","nativeSrc":"19362:6:69","nodeType":"YulIdentifier","src":"19362:6:69"},"nativeSrc":"19362:21:69","nodeType":"YulFunctionCall","src":"19362:21:69"},"variableNames":[{"name":"cleaned","nativeSrc":"19351:7:69","nodeType":"YulIdentifier","src":"19351:7:69"}]}]},"name":"cleanup_t_bool","nativeSrc":"19299:90:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"19323:5:69","nodeType":"YulTypedName","src":"19323:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"19333:7:69","nodeType":"YulTypedName","src":"19333:7:69","type":""}],"src":"19299:90:69"},{"body":{"nativeSrc":"19435:76:69","nodeType":"YulBlock","src":"19435:76:69","statements":[{"body":{"nativeSrc":"19489:16:69","nodeType":"YulBlock","src":"19489:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"19498:1:69","nodeType":"YulLiteral","src":"19498:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"19501:1:69","nodeType":"YulLiteral","src":"19501:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"19491:6:69","nodeType":"YulIdentifier","src":"19491:6:69"},"nativeSrc":"19491:12:69","nodeType":"YulFunctionCall","src":"19491:12:69"},"nativeSrc":"19491:12:69","nodeType":"YulExpressionStatement","src":"19491:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"19458:5:69","nodeType":"YulIdentifier","src":"19458:5:69"},{"arguments":[{"name":"value","nativeSrc":"19480:5:69","nodeType":"YulIdentifier","src":"19480:5:69"}],"functionName":{"name":"cleanup_t_bool","nativeSrc":"19465:14:69","nodeType":"YulIdentifier","src":"19465:14:69"},"nativeSrc":"19465:21:69","nodeType":"YulFunctionCall","src":"19465:21:69"}],"functionName":{"name":"eq","nativeSrc":"19455:2:69","nodeType":"YulIdentifier","src":"19455:2:69"},"nativeSrc":"19455:32:69","nodeType":"YulFunctionCall","src":"19455:32:69"}],"functionName":{"name":"iszero","nativeSrc":"19448:6:69","nodeType":"YulIdentifier","src":"19448:6:69"},"nativeSrc":"19448:40:69","nodeType":"YulFunctionCall","src":"19448:40:69"},"nativeSrc":"19445:60:69","nodeType":"YulIf","src":"19445:60:69"}]},"name":"validator_revert_t_bool","nativeSrc":"19395:116:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"19428:5:69","nodeType":"YulTypedName","src":"19428:5:69","type":""}],"src":"19395:116:69"},{"body":{"nativeSrc":"19577:77:69","nodeType":"YulBlock","src":"19577:77:69","statements":[{"nativeSrc":"19587:22:69","nodeType":"YulAssignment","src":"19587:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"19602:6:69","nodeType":"YulIdentifier","src":"19602:6:69"}],"functionName":{"name":"mload","nativeSrc":"19596:5:69","nodeType":"YulIdentifier","src":"19596:5:69"},"nativeSrc":"19596:13:69","nodeType":"YulFunctionCall","src":"19596:13:69"},"variableNames":[{"name":"value","nativeSrc":"19587:5:69","nodeType":"YulIdentifier","src":"19587:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"19642:5:69","nodeType":"YulIdentifier","src":"19642:5:69"}],"functionName":{"name":"validator_revert_t_bool","nativeSrc":"19618:23:69","nodeType":"YulIdentifier","src":"19618:23:69"},"nativeSrc":"19618:30:69","nodeType":"YulFunctionCall","src":"19618:30:69"},"nativeSrc":"19618:30:69","nodeType":"YulExpressionStatement","src":"19618:30:69"}]},"name":"abi_decode_t_bool_fromMemory","nativeSrc":"19517:137:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"19555:6:69","nodeType":"YulTypedName","src":"19555:6:69","type":""},{"name":"end","nativeSrc":"19563:3:69","nodeType":"YulTypedName","src":"19563:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"19571:5:69","nodeType":"YulTypedName","src":"19571:5:69","type":""}],"src":"19517:137:69"},{"body":{"nativeSrc":"19734:271:69","nodeType":"YulBlock","src":"19734:271:69","statements":[{"body":{"nativeSrc":"19780:83:69","nodeType":"YulBlock","src":"19780:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"19782:77:69","nodeType":"YulIdentifier","src":"19782:77:69"},"nativeSrc":"19782:79:69","nodeType":"YulFunctionCall","src":"19782:79:69"},"nativeSrc":"19782:79:69","nodeType":"YulExpressionStatement","src":"19782:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"19755:7:69","nodeType":"YulIdentifier","src":"19755:7:69"},{"name":"headStart","nativeSrc":"19764:9:69","nodeType":"YulIdentifier","src":"19764:9:69"}],"functionName":{"name":"sub","nativeSrc":"19751:3:69","nodeType":"YulIdentifier","src":"19751:3:69"},"nativeSrc":"19751:23:69","nodeType":"YulFunctionCall","src":"19751:23:69"},{"kind":"number","nativeSrc":"19776:2:69","nodeType":"YulLiteral","src":"19776:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"19747:3:69","nodeType":"YulIdentifier","src":"19747:3:69"},"nativeSrc":"19747:32:69","nodeType":"YulFunctionCall","src":"19747:32:69"},"nativeSrc":"19744:119:69","nodeType":"YulIf","src":"19744:119:69"},{"nativeSrc":"19873:125:69","nodeType":"YulBlock","src":"19873:125:69","statements":[{"nativeSrc":"19888:15:69","nodeType":"YulVariableDeclaration","src":"19888:15:69","value":{"kind":"number","nativeSrc":"19902:1:69","nodeType":"YulLiteral","src":"19902:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"19892:6:69","nodeType":"YulTypedName","src":"19892:6:69","type":""}]},{"nativeSrc":"19917:71:69","nodeType":"YulAssignment","src":"19917:71:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"19960:9:69","nodeType":"YulIdentifier","src":"19960:9:69"},{"name":"offset","nativeSrc":"19971:6:69","nodeType":"YulIdentifier","src":"19971:6:69"}],"functionName":{"name":"add","nativeSrc":"19956:3:69","nodeType":"YulIdentifier","src":"19956:3:69"},"nativeSrc":"19956:22:69","nodeType":"YulFunctionCall","src":"19956:22:69"},{"name":"dataEnd","nativeSrc":"19980:7:69","nodeType":"YulIdentifier","src":"19980:7:69"}],"functionName":{"name":"abi_decode_t_bool_fromMemory","nativeSrc":"19927:28:69","nodeType":"YulIdentifier","src":"19927:28:69"},"nativeSrc":"19927:61:69","nodeType":"YulFunctionCall","src":"19927:61:69"},"variableNames":[{"name":"value0","nativeSrc":"19917:6:69","nodeType":"YulIdentifier","src":"19917:6:69"}]}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nativeSrc":"19660:345:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"19704:9:69","nodeType":"YulTypedName","src":"19704:9:69","type":""},{"name":"dataEnd","nativeSrc":"19715:7:69","nodeType":"YulTypedName","src":"19715:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"19727:6:69","nodeType":"YulTypedName","src":"19727:6:69","type":""}],"src":"19660:345:69"},{"body":{"nativeSrc":"20185:359:69","nodeType":"YulBlock","src":"20185:359:69","statements":[{"nativeSrc":"20195:26:69","nodeType":"YulAssignment","src":"20195:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"20207:9:69","nodeType":"YulIdentifier","src":"20207:9:69"},{"kind":"number","nativeSrc":"20218:2:69","nodeType":"YulLiteral","src":"20218:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"20203:3:69","nodeType":"YulIdentifier","src":"20203:3:69"},"nativeSrc":"20203:18:69","nodeType":"YulFunctionCall","src":"20203:18:69"},"variableNames":[{"name":"tail","nativeSrc":"20195:4:69","nodeType":"YulIdentifier","src":"20195:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"20275:6:69","nodeType":"YulIdentifier","src":"20275:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"20288:9:69","nodeType":"YulIdentifier","src":"20288:9:69"},{"kind":"number","nativeSrc":"20299:1:69","nodeType":"YulLiteral","src":"20299:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"20284:3:69","nodeType":"YulIdentifier","src":"20284:3:69"},"nativeSrc":"20284:17:69","nodeType":"YulFunctionCall","src":"20284:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"20231:43:69","nodeType":"YulIdentifier","src":"20231:43:69"},"nativeSrc":"20231:71:69","nodeType":"YulFunctionCall","src":"20231:71:69"},"nativeSrc":"20231:71:69","nodeType":"YulExpressionStatement","src":"20231:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"20356:6:69","nodeType":"YulIdentifier","src":"20356:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"20369:9:69","nodeType":"YulIdentifier","src":"20369:9:69"},{"kind":"number","nativeSrc":"20380:2:69","nodeType":"YulLiteral","src":"20380:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"20365:3:69","nodeType":"YulIdentifier","src":"20365:3:69"},"nativeSrc":"20365:18:69","nodeType":"YulFunctionCall","src":"20365:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"20312:43:69","nodeType":"YulIdentifier","src":"20312:43:69"},"nativeSrc":"20312:72:69","nodeType":"YulFunctionCall","src":"20312:72:69"},"nativeSrc":"20312:72:69","nodeType":"YulExpressionStatement","src":"20312:72:69"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"20405:9:69","nodeType":"YulIdentifier","src":"20405:9:69"},{"kind":"number","nativeSrc":"20416:2:69","nodeType":"YulLiteral","src":"20416:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"20401:3:69","nodeType":"YulIdentifier","src":"20401:3:69"},"nativeSrc":"20401:18:69","nodeType":"YulFunctionCall","src":"20401:18:69"},{"arguments":[{"name":"tail","nativeSrc":"20425:4:69","nodeType":"YulIdentifier","src":"20425:4:69"},{"name":"headStart","nativeSrc":"20431:9:69","nodeType":"YulIdentifier","src":"20431:9:69"}],"functionName":{"name":"sub","nativeSrc":"20421:3:69","nodeType":"YulIdentifier","src":"20421:3:69"},"nativeSrc":"20421:20:69","nodeType":"YulFunctionCall","src":"20421:20:69"}],"functionName":{"name":"mstore","nativeSrc":"20394:6:69","nodeType":"YulIdentifier","src":"20394:6:69"},"nativeSrc":"20394:48:69","nodeType":"YulFunctionCall","src":"20394:48:69"},"nativeSrc":"20394:48:69","nodeType":"YulExpressionStatement","src":"20394:48:69"},{"nativeSrc":"20451:86:69","nodeType":"YulAssignment","src":"20451:86:69","value":{"arguments":[{"name":"value2","nativeSrc":"20523:6:69","nodeType":"YulIdentifier","src":"20523:6:69"},{"name":"tail","nativeSrc":"20532:4:69","nodeType":"YulIdentifier","src":"20532:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"20459:63:69","nodeType":"YulIdentifier","src":"20459:63:69"},"nativeSrc":"20459:78:69","nodeType":"YulFunctionCall","src":"20459:78:69"},"variableNames":[{"name":"tail","nativeSrc":"20451:4:69","nodeType":"YulIdentifier","src":"20451:4:69"}]}]},"name":"abi_encode_tuple_t_address_t_address_t_string_memory_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed","nativeSrc":"20011:533:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"20141:9:69","nodeType":"YulTypedName","src":"20141:9:69","type":""},{"name":"value2","nativeSrc":"20153:6:69","nodeType":"YulTypedName","src":"20153:6:69","type":""},{"name":"value1","nativeSrc":"20161:6:69","nodeType":"YulTypedName","src":"20161:6:69","type":""},{"name":"value0","nativeSrc":"20169:6:69","nodeType":"YulTypedName","src":"20169:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"20180:4:69","nodeType":"YulTypedName","src":"20180:4:69","type":""}],"src":"20011:533:69"},{"body":{"nativeSrc":"20656:115:69","nodeType":"YulBlock","src":"20656:115:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"20678:6:69","nodeType":"YulIdentifier","src":"20678:6:69"},{"kind":"number","nativeSrc":"20686:1:69","nodeType":"YulLiteral","src":"20686:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"20674:3:69","nodeType":"YulIdentifier","src":"20674:3:69"},"nativeSrc":"20674:14:69","nodeType":"YulFunctionCall","src":"20674:14:69"},{"hexValue":"436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d","kind":"string","nativeSrc":"20690:34:69","nodeType":"YulLiteral","src":"20690:34:69","type":"","value":"Comptroller: Invalid maxLoopsLim"}],"functionName":{"name":"mstore","nativeSrc":"20667:6:69","nodeType":"YulIdentifier","src":"20667:6:69"},"nativeSrc":"20667:58:69","nodeType":"YulFunctionCall","src":"20667:58:69"},"nativeSrc":"20667:58:69","nodeType":"YulExpressionStatement","src":"20667:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"20746:6:69","nodeType":"YulIdentifier","src":"20746:6:69"},{"kind":"number","nativeSrc":"20754:2:69","nodeType":"YulLiteral","src":"20754:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"20742:3:69","nodeType":"YulIdentifier","src":"20742:3:69"},"nativeSrc":"20742:15:69","nodeType":"YulFunctionCall","src":"20742:15:69"},{"hexValue":"6974","kind":"string","nativeSrc":"20759:4:69","nodeType":"YulLiteral","src":"20759:4:69","type":"","value":"it"}],"functionName":{"name":"mstore","nativeSrc":"20735:6:69","nodeType":"YulIdentifier","src":"20735:6:69"},"nativeSrc":"20735:29:69","nodeType":"YulFunctionCall","src":"20735:29:69"},"nativeSrc":"20735:29:69","nodeType":"YulExpressionStatement","src":"20735:29:69"}]},"name":"store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032","nativeSrc":"20550:221:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"20648:6:69","nodeType":"YulTypedName","src":"20648:6:69","type":""}],"src":"20550:221:69"},{"body":{"nativeSrc":"20923:220:69","nodeType":"YulBlock","src":"20923:220:69","statements":[{"nativeSrc":"20933:74:69","nodeType":"YulAssignment","src":"20933:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"20999:3:69","nodeType":"YulIdentifier","src":"20999:3:69"},{"kind":"number","nativeSrc":"21004:2:69","nodeType":"YulLiteral","src":"21004:2:69","type":"","value":"34"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"20940:58:69","nodeType":"YulIdentifier","src":"20940:58:69"},"nativeSrc":"20940:67:69","nodeType":"YulFunctionCall","src":"20940:67:69"},"variableNames":[{"name":"pos","nativeSrc":"20933:3:69","nodeType":"YulIdentifier","src":"20933:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"21105:3:69","nodeType":"YulIdentifier","src":"21105:3:69"}],"functionName":{"name":"store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032","nativeSrc":"21016:88:69","nodeType":"YulIdentifier","src":"21016:88:69"},"nativeSrc":"21016:93:69","nodeType":"YulFunctionCall","src":"21016:93:69"},"nativeSrc":"21016:93:69","nodeType":"YulExpressionStatement","src":"21016:93:69"},{"nativeSrc":"21118:19:69","nodeType":"YulAssignment","src":"21118:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"21129:3:69","nodeType":"YulIdentifier","src":"21129:3:69"},{"kind":"number","nativeSrc":"21134:2:69","nodeType":"YulLiteral","src":"21134:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"21125:3:69","nodeType":"YulIdentifier","src":"21125:3:69"},"nativeSrc":"21125:12:69","nodeType":"YulFunctionCall","src":"21125:12:69"},"variableNames":[{"name":"end","nativeSrc":"21118:3:69","nodeType":"YulIdentifier","src":"21118:3:69"}]}]},"name":"abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack","nativeSrc":"20777:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"20911:3:69","nodeType":"YulTypedName","src":"20911:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"20919:3:69","nodeType":"YulTypedName","src":"20919:3:69","type":""}],"src":"20777:366:69"},{"body":{"nativeSrc":"21320:248:69","nodeType":"YulBlock","src":"21320:248:69","statements":[{"nativeSrc":"21330:26:69","nodeType":"YulAssignment","src":"21330:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"21342:9:69","nodeType":"YulIdentifier","src":"21342:9:69"},{"kind":"number","nativeSrc":"21353:2:69","nodeType":"YulLiteral","src":"21353:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"21338:3:69","nodeType":"YulIdentifier","src":"21338:3:69"},"nativeSrc":"21338:18:69","nodeType":"YulFunctionCall","src":"21338:18:69"},"variableNames":[{"name":"tail","nativeSrc":"21330:4:69","nodeType":"YulIdentifier","src":"21330:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"21377:9:69","nodeType":"YulIdentifier","src":"21377:9:69"},{"kind":"number","nativeSrc":"21388:1:69","nodeType":"YulLiteral","src":"21388:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"21373:3:69","nodeType":"YulIdentifier","src":"21373:3:69"},"nativeSrc":"21373:17:69","nodeType":"YulFunctionCall","src":"21373:17:69"},{"arguments":[{"name":"tail","nativeSrc":"21396:4:69","nodeType":"YulIdentifier","src":"21396:4:69"},{"name":"headStart","nativeSrc":"21402:9:69","nodeType":"YulIdentifier","src":"21402:9:69"}],"functionName":{"name":"sub","nativeSrc":"21392:3:69","nodeType":"YulIdentifier","src":"21392:3:69"},"nativeSrc":"21392:20:69","nodeType":"YulFunctionCall","src":"21392:20:69"}],"functionName":{"name":"mstore","nativeSrc":"21366:6:69","nodeType":"YulIdentifier","src":"21366:6:69"},"nativeSrc":"21366:47:69","nodeType":"YulFunctionCall","src":"21366:47:69"},"nativeSrc":"21366:47:69","nodeType":"YulExpressionStatement","src":"21366:47:69"},{"nativeSrc":"21422:139:69","nodeType":"YulAssignment","src":"21422:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"21556:4:69","nodeType":"YulIdentifier","src":"21556:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack","nativeSrc":"21430:124:69","nodeType":"YulIdentifier","src":"21430:124:69"},"nativeSrc":"21430:131:69","nodeType":"YulFunctionCall","src":"21430:131:69"},"variableNames":[{"name":"tail","nativeSrc":"21422:4:69","nodeType":"YulIdentifier","src":"21422:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"21149:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"21300:9:69","nodeType":"YulTypedName","src":"21300:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"21315:4:69","nodeType":"YulTypedName","src":"21315:4:69","type":""}],"src":"21149:419:69"},{"body":{"nativeSrc":"21700:206:69","nodeType":"YulBlock","src":"21700:206:69","statements":[{"nativeSrc":"21710:26:69","nodeType":"YulAssignment","src":"21710:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"21722:9:69","nodeType":"YulIdentifier","src":"21722:9:69"},{"kind":"number","nativeSrc":"21733:2:69","nodeType":"YulLiteral","src":"21733:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"21718:3:69","nodeType":"YulIdentifier","src":"21718:3:69"},"nativeSrc":"21718:18:69","nodeType":"YulFunctionCall","src":"21718:18:69"},"variableNames":[{"name":"tail","nativeSrc":"21710:4:69","nodeType":"YulIdentifier","src":"21710:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"21790:6:69","nodeType":"YulIdentifier","src":"21790:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"21803:9:69","nodeType":"YulIdentifier","src":"21803:9:69"},{"kind":"number","nativeSrc":"21814:1:69","nodeType":"YulLiteral","src":"21814:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"21799:3:69","nodeType":"YulIdentifier","src":"21799:3:69"},"nativeSrc":"21799:17:69","nodeType":"YulFunctionCall","src":"21799:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"21746:43:69","nodeType":"YulIdentifier","src":"21746:43:69"},"nativeSrc":"21746:71:69","nodeType":"YulFunctionCall","src":"21746:71:69"},"nativeSrc":"21746:71:69","nodeType":"YulExpressionStatement","src":"21746:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"21871:6:69","nodeType":"YulIdentifier","src":"21871:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"21884:9:69","nodeType":"YulIdentifier","src":"21884:9:69"},{"kind":"number","nativeSrc":"21895:2:69","nodeType":"YulLiteral","src":"21895:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"21880:3:69","nodeType":"YulIdentifier","src":"21880:3:69"},"nativeSrc":"21880:18:69","nodeType":"YulFunctionCall","src":"21880:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"21827:43:69","nodeType":"YulIdentifier","src":"21827:43:69"},"nativeSrc":"21827:72:69","nodeType":"YulFunctionCall","src":"21827:72:69"},"nativeSrc":"21827:72:69","nodeType":"YulExpressionStatement","src":"21827:72:69"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"21574:332:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"21664:9:69","nodeType":"YulTypedName","src":"21664:9:69","type":""},{"name":"value1","nativeSrc":"21676:6:69","nodeType":"YulTypedName","src":"21676:6:69","type":""},{"name":"value0","nativeSrc":"21684:6:69","nodeType":"YulTypedName","src":"21684:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"21695:4:69","nodeType":"YulTypedName","src":"21695:4:69","type":""}],"src":"21574:332:69"},{"body":{"nativeSrc":"22018:124:69","nodeType":"YulBlock","src":"22018:124:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"22040:6:69","nodeType":"YulIdentifier","src":"22040:6:69"},{"kind":"number","nativeSrc":"22048:1:69","nodeType":"YulLiteral","src":"22048:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"22036:3:69","nodeType":"YulIdentifier","src":"22036:3:69"},"nativeSrc":"22036:14:69","nodeType":"YulFunctionCall","src":"22036:14:69"},{"hexValue":"496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069","kind":"string","nativeSrc":"22052:34:69","nodeType":"YulLiteral","src":"22052:34:69","type":"","value":"Initializable: contract is not i"}],"functionName":{"name":"mstore","nativeSrc":"22029:6:69","nodeType":"YulIdentifier","src":"22029:6:69"},"nativeSrc":"22029:58:69","nodeType":"YulFunctionCall","src":"22029:58:69"},"nativeSrc":"22029:58:69","nodeType":"YulExpressionStatement","src":"22029:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"22108:6:69","nodeType":"YulIdentifier","src":"22108:6:69"},{"kind":"number","nativeSrc":"22116:2:69","nodeType":"YulLiteral","src":"22116:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"22104:3:69","nodeType":"YulIdentifier","src":"22104:3:69"},"nativeSrc":"22104:15:69","nodeType":"YulFunctionCall","src":"22104:15:69"},{"hexValue":"6e697469616c697a696e67","kind":"string","nativeSrc":"22121:13:69","nodeType":"YulLiteral","src":"22121:13:69","type":"","value":"nitializing"}],"functionName":{"name":"mstore","nativeSrc":"22097:6:69","nodeType":"YulIdentifier","src":"22097:6:69"},"nativeSrc":"22097:38:69","nodeType":"YulFunctionCall","src":"22097:38:69"},"nativeSrc":"22097:38:69","nodeType":"YulExpressionStatement","src":"22097:38:69"}]},"name":"store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b","nativeSrc":"21912:230:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"22010:6:69","nodeType":"YulTypedName","src":"22010:6:69","type":""}],"src":"21912:230:69"},{"body":{"nativeSrc":"22294:220:69","nodeType":"YulBlock","src":"22294:220:69","statements":[{"nativeSrc":"22304:74:69","nodeType":"YulAssignment","src":"22304:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"22370:3:69","nodeType":"YulIdentifier","src":"22370:3:69"},{"kind":"number","nativeSrc":"22375:2:69","nodeType":"YulLiteral","src":"22375:2:69","type":"","value":"43"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"22311:58:69","nodeType":"YulIdentifier","src":"22311:58:69"},"nativeSrc":"22311:67:69","nodeType":"YulFunctionCall","src":"22311:67:69"},"variableNames":[{"name":"pos","nativeSrc":"22304:3:69","nodeType":"YulIdentifier","src":"22304:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"22476:3:69","nodeType":"YulIdentifier","src":"22476:3:69"}],"functionName":{"name":"store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b","nativeSrc":"22387:88:69","nodeType":"YulIdentifier","src":"22387:88:69"},"nativeSrc":"22387:93:69","nodeType":"YulFunctionCall","src":"22387:93:69"},"nativeSrc":"22387:93:69","nodeType":"YulExpressionStatement","src":"22387:93:69"},{"nativeSrc":"22489:19:69","nodeType":"YulAssignment","src":"22489:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"22500:3:69","nodeType":"YulIdentifier","src":"22500:3:69"},{"kind":"number","nativeSrc":"22505:2:69","nodeType":"YulLiteral","src":"22505:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"22496:3:69","nodeType":"YulIdentifier","src":"22496:3:69"},"nativeSrc":"22496:12:69","nodeType":"YulFunctionCall","src":"22496:12:69"},"variableNames":[{"name":"end","nativeSrc":"22489:3:69","nodeType":"YulIdentifier","src":"22489:3:69"}]}]},"name":"abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack","nativeSrc":"22148:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"22282:3:69","nodeType":"YulTypedName","src":"22282:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"22290:3:69","nodeType":"YulTypedName","src":"22290:3:69","type":""}],"src":"22148:366:69"},{"body":{"nativeSrc":"22691:248:69","nodeType":"YulBlock","src":"22691:248:69","statements":[{"nativeSrc":"22701:26:69","nodeType":"YulAssignment","src":"22701:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"22713:9:69","nodeType":"YulIdentifier","src":"22713:9:69"},{"kind":"number","nativeSrc":"22724:2:69","nodeType":"YulLiteral","src":"22724:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"22709:3:69","nodeType":"YulIdentifier","src":"22709:3:69"},"nativeSrc":"22709:18:69","nodeType":"YulFunctionCall","src":"22709:18:69"},"variableNames":[{"name":"tail","nativeSrc":"22701:4:69","nodeType":"YulIdentifier","src":"22701:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"22748:9:69","nodeType":"YulIdentifier","src":"22748:9:69"},{"kind":"number","nativeSrc":"22759:1:69","nodeType":"YulLiteral","src":"22759:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"22744:3:69","nodeType":"YulIdentifier","src":"22744:3:69"},"nativeSrc":"22744:17:69","nodeType":"YulFunctionCall","src":"22744:17:69"},{"arguments":[{"name":"tail","nativeSrc":"22767:4:69","nodeType":"YulIdentifier","src":"22767:4:69"},{"name":"headStart","nativeSrc":"22773:9:69","nodeType":"YulIdentifier","src":"22773:9:69"}],"functionName":{"name":"sub","nativeSrc":"22763:3:69","nodeType":"YulIdentifier","src":"22763:3:69"},"nativeSrc":"22763:20:69","nodeType":"YulFunctionCall","src":"22763:20:69"}],"functionName":{"name":"mstore","nativeSrc":"22737:6:69","nodeType":"YulIdentifier","src":"22737:6:69"},"nativeSrc":"22737:47:69","nodeType":"YulFunctionCall","src":"22737:47:69"},"nativeSrc":"22737:47:69","nodeType":"YulExpressionStatement","src":"22737:47:69"},{"nativeSrc":"22793:139:69","nodeType":"YulAssignment","src":"22793:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"22927:4:69","nodeType":"YulIdentifier","src":"22927:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack","nativeSrc":"22801:124:69","nodeType":"YulIdentifier","src":"22801:124:69"},"nativeSrc":"22801:131:69","nodeType":"YulFunctionCall","src":"22801:131:69"},"variableNames":[{"name":"tail","nativeSrc":"22793:4:69","nodeType":"YulIdentifier","src":"22793:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"22520:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"22671:9:69","nodeType":"YulTypedName","src":"22671:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"22686:4:69","nodeType":"YulTypedName","src":"22686:4:69","type":""}],"src":"22520:419:69"}]},"contents":"{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function identity(value) -> ret {\n        ret := value\n    }\n\n    function convert_t_uint160_to_t_uint160(value) -> converted {\n        converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n    }\n\n    function convert_t_uint160_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_uint160(value)\n    }\n\n    function convert_t_contract$_UpgradeableBeacon_$4411_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_UpgradeableBeacon_$4411_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_UpgradeableBeacon_$4411_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_UpgradeableBeacon_$4411__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_UpgradeableBeacon_$4411_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function validator_revert_t_uint256(value) {\n        if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_uint256(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function convert_t_contract$_ERC4626Upgradeable_$2003_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_ERC4626Upgradeable_$2003_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_ERC4626Upgradeable_$2003_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_ERC4626Upgradeable_$2003__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_ERC4626Upgradeable_$2003_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function convert_t_contract$_PoolRegistryInterface_$10404_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_PoolRegistryInterface_$10404_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_PoolRegistryInterface_$10404_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_PoolRegistryInterface_$10404__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_PoolRegistryInterface_$10404_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_IAccessControlManagerV8_$5080__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function cleanup_t_bytes32(value) -> cleaned {\n        cleaned := value\n    }\n\n    function abi_encode_t_bytes32_to_t_bytes32_fromStack(value, pos) {\n        mstore(pos, cleanup_t_bytes32(value))\n    }\n\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_bytes32_to_t_bytes32_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint256(value))\n    }\n\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4 {\n        if slt(sub(dataEnd, headStart), 160) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 96\n\n            value3 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 128\n\n            value4 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc(memPtr) {\n\n        mstore(add(memPtr, 0), \"Ownable2Step: caller is not the \")\n\n        mstore(add(memPtr, 32), \"new owner\")\n\n    }\n\n    function abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 41)\n        store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function array_length_t_bytes_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function copy_memory_to_memory_with_cleanup(src, dst, length) {\n\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value, pos) -> end {\n        let length := array_length_t_bytes_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        mstore(add(headStart, 32), sub(tail, headStart))\n        tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value1,  tail)\n\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n        updated_pos := pos\n    }\n\n    function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n        let length := array_length_t_bytes_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, length)\n    }\n\n    function abi_encode_tuple_packed_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value1, value0) -> end {\n\n        pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0,  pos)\n\n        pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value1,  pos)\n\n        end := pos\n    }\n\n    function cleanup_t_bytes1(value) -> cleaned {\n        cleaned := and(value, 0xff00000000000000000000000000000000000000000000000000000000000000)\n    }\n\n    function leftAlign_t_bytes1(value) -> aligned {\n        aligned := value\n    }\n\n    function abi_encode_t_bytes1_to_t_bytes1_nonPadded_inplace_fromStack(value, pos) {\n        mstore(pos, leftAlign_t_bytes1(cleanup_t_bytes1(value)))\n    }\n\n    function shift_left_96(value) -> newValue {\n        newValue :=\n\n        shl(96, value)\n\n    }\n\n    function leftAlign_t_uint160(value) -> aligned {\n        aligned := shift_left_96(value)\n    }\n\n    function leftAlign_t_address(value) -> aligned {\n        aligned := leftAlign_t_uint160(value)\n    }\n\n    function abi_encode_t_address_to_t_address_nonPadded_inplace_fromStack(value, pos) {\n        mstore(pos, leftAlign_t_address(cleanup_t_address(value)))\n    }\n\n    function leftAlign_t_bytes32(value) -> aligned {\n        aligned := value\n    }\n\n    function abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack(value, pos) {\n        mstore(pos, leftAlign_t_bytes32(cleanup_t_bytes32(value)))\n    }\n\n    function abi_encode_tuple_packed_t_bytes1_t_address_t_bytes32_t_bytes32__to_t_bytes1_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos , value3, value2, value1, value0) -> end {\n\n        abi_encode_t_bytes1_to_t_bytes1_nonPadded_inplace_fromStack(value0,  pos)\n        pos := add(pos, 1)\n\n        abi_encode_t_address_to_t_address_nonPadded_inplace_fromStack(value1,  pos)\n        pos := add(pos, 20)\n\n        abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack(value2,  pos)\n        pos := add(pos, 32)\n\n        abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack(value3,  pos)\n        pos := add(pos, 32)\n\n        end := pos\n    }\n\n    function cleanup_t_contract$_ComptrollerInterface_$9353(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function validator_revert_t_contract$_ComptrollerInterface_$9353(value) {\n        if iszero(eq(value, cleanup_t_contract$_ComptrollerInterface_$9353(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_ComptrollerInterface_$9353_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_contract$_ComptrollerInterface_$9353(value)\n    }\n\n    function abi_decode_tuple_t_contract$_ComptrollerInterface_$9353_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_ComptrollerInterface_$9353_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_t_address_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_address__to_t_address_t_address_t_uint256_t_address__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n        tail := add(headStart, 128)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n        abi_encode_t_address_to_t_address_fromStack(value3,  add(headStart, 96))\n\n    }\n\n    function store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759(memPtr) {\n\n        mstore(add(memPtr, 0), \"Initializable: contract is alrea\")\n\n        mstore(add(memPtr, 32), \"dy initialized\")\n\n    }\n\n    function abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 46)\n        store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function cleanup_t_rational_1_by_1(value) -> cleaned {\n        cleaned := value\n    }\n\n    function cleanup_t_uint8(value) -> cleaned {\n        cleaned := and(value, 0xff)\n    }\n\n    function convert_t_rational_1_by_1_to_t_uint8(value) -> converted {\n        converted := cleanup_t_uint8(identity(cleanup_t_rational_1_by_1(value)))\n    }\n\n    function abi_encode_t_rational_1_by_1_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, convert_t_rational_1_by_1_to_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_rational_1_by_1_to_t_uint8_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe(memPtr) {\n\n        mstore(add(memPtr, 0), \"Ownable: caller is not the owner\")\n\n    }\n\n    function abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 32)\n        store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb(memPtr) {\n\n        mstore(add(memPtr, 0), \"invalid acess control manager ad\")\n\n        mstore(add(memPtr, 32), \"dress\")\n\n    }\n\n    function abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 37)\n        store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function array_length_t_string_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n        let length := array_length_t_string_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_tuple_t_address_t_string_memory_ptr__to_t_address_t_string_memory_ptr__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        mstore(add(headStart, 32), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value1,  tail)\n\n    }\n\n    function cleanup_t_bool(value) -> cleaned {\n        cleaned := iszero(iszero(value))\n    }\n\n    function validator_revert_t_bool(value) {\n        if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_bool_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_bool(value)\n    }\n\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_bool_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_string_memory_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        mstore(add(headStart, 64), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value2,  tail)\n\n    }\n\n    function store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032(memPtr) {\n\n        mstore(add(memPtr, 0), \"Comptroller: Invalid maxLoopsLim\")\n\n        mstore(add(memPtr, 32), \"it\")\n\n    }\n\n    function abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 34)\n        store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b(memPtr) {\n\n        mstore(add(memPtr, 0), \"Initializable: contract is not i\")\n\n        mstore(add(memPtr, 32), \"nitializing\")\n\n    }\n\n    function abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 43)\n        store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106101165760003560e01c8063afcff50f116100a2578063be26317e11610071578063be26317e14610254578063e30c39781461025d578063e521136f1461026e578063f2fde38b14610281578063f7013ef61461029457600080fd5b8063afcff50f146101d3578063b4a0bdf3146101e6578063b599410a146101f7578063ba9a91a51461022057600080fd5b806379ba5097116100e957806379ba50971461018157806380d45a2d146101895780638da5cb5b1461019c578063a9e50471146101ad578063abeccaa4146101c057600080fd5b80630e32cb861461011b57806317f333401461013057806359659e9014610159578063715018a614610179575b600080fd5b61012e610129366004610e07565b6102a7565b005b60fd54610143906001600160a01b031681565b6040516101509190610e3f565b60405180910390f35b60fb5461016c906001600160a01b031681565b6040516101509190610e7d565b61012e6102bb565b61012e6102cf565b61012e610197366004610e9c565b61030d565b6033546001600160a01b0316610143565b6101436101bb366004610e07565b610354565b61016c6101ce366004610e07565b61046a565b60fc5461016c906001600160a01b031681565b6097546001600160a01b031661016c565b61016c610205366004610e07565b60fe602052600090815260409020546001600160a01b031681565b6102477f1991af52b18eb46fa8c9d75910fd649338d33ba3882cfe1e1afbc13a3b4df5b981565b6040516101509190610ec3565b61024760c95481565b6065546001600160a01b0316610143565b61012e61027c366004610e07565b6107c4565b61012e61028f366004610e07565b610867565b61012e6102a2366004610ed1565b6108d8565b6102af610ac3565b6102b881610aed565b50565b6102c3610ac3565b6102cd6000610b72565b565b60655433906001600160a01b031681146103045760405162461bcd60e51b81526004016102fb90610f92565b60405180910390fd5b6102b881610b72565b61034b6040518060400160405280601981526020017f7365744d61784c6f6f70734c696d69742875696e743235362900000000000000815250610b8b565b6102b881610c29565b600060ff60f81b307f1991af52b18eb46fa8c9d75910fd649338d33ba3882cfe1e1afbc13a3b4df5b96040518060200161038d90610dbb565b601f1982820381018352601f90910116604081905260fb546001600160a01b03169063189acdbd60e31b906103c6908990602401610e3f565b60408051601f19818403018152918152602080830180516001600160e01b03166001600160e01b03199095169490941790935251610405939201610ff8565b60408051601f1981840301815290829052610423929160200161103a565b6040516020818303038152906040528051906020012060405160200161044c949392919061108a565b60408051601f19818403018152919052805160209091012092915050565b600061047582610c84565b6001600160a01b03828116600090815260fe602052604090205416156104ae57604051634fa32ea760e01b815260040160405180910390fd5b60008290506000816001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051791906110f1565b905060fc60009054906101000a90046001600160a01b03166001600160a01b031663266e0a7f82846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561057c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a0919061111d565b6040518363ffffffff1660e01b81526004016105bd92919061113e565b602060405180830381865afa1580156105da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fe919061111d565b6001600160a01b0316846001600160a01b03161461062f57604051630a74323b60e21b815260040160405180910390fd5b60fb546040516000917f1991af52b18eb46fa8c9d75910fd649338d33ba3882cfe1e1afbc13a3b4df5b9916001600160a01b039091169063189acdbd60e31b9061067d908990602401610e3f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516106ba90610dbb565b6106c5929190610ff8565b8190604051809103906000f59050801580156106e5573d6000803e3d6000fd5b5060975460fd5460c9546033546040516320f08d2d60e11b81529495506001600160a01b03808716956341e11a5a9561072c95908316949083169390921690600401611160565b600060405180830381600087803b15801561074657600080fd5b505af115801561075a573d6000803e3d6000fd5b505050506001600160a01b03858116600090815260fe602052604080822080546001600160a01b0319168585169081179091559051939650869390928616917fcbd4e5d1362721c7fd10daaabb1a046344447d4798be55684b8a6b4fc1765d7291a3505050919050565b6108026040518060400160405280601b81526020017f736574526577617264526563697069656e742861646472657373290000000000815250610b8b565b61080b81610c84565b60fd546040516001600160a01b038084169216907fc8c11bb97ac2ffa10ce2e2a98f4c1fd8df84cfa2e1a15e013ed2383ab1f527ad90600090a360fd80546001600160a01b0319166001600160a01b0392909216919091179055565b61086f610ac3565b606580546001600160a01b0383166001600160a01b031990911681179091556108a06033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600054610100900460ff16158080156108f85750600054600160ff909116105b806109125750303b158015610912575060005460ff166001145b61092e5760405162461bcd60e51b81526004016102fb906111e9565b6000805460ff191660011790558015610951576000805461ff0019166101001790555b61095a86610c84565b61096385610c84565b61096c84610c84565b61097583610c84565b61097e86610cab565b60fc80546001600160a01b038088166001600160a01b03199283161790925560fd8054928716929091169190911790556109b782610c29565b826040516109c490610dc8565b6109ce9190610e3f565b604051809103906000f0801580156109ea573d6000803e3d6000fd5b5060fb80546001600160a01b03929092166001600160a01b03199092168217905563f2fde38b610a226033546001600160a01b031690565b6040518263ffffffff1660e01b8152600401610a3e9190610e3f565b600060405180830381600087803b158015610a5857600080fd5b505af1158015610a6c573d6000803e3d6000fd5b505050508015610abb576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890610ab29060019061120d565b60405180910390a15b505050505050565b6033546001600160a01b031633146102cd5760405162461bcd60e51b81526004016102fb9061121b565b6001600160a01b038116610b135760405162461bcd60e51b81526004016102fb90611297565b609780546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa090610b66908390859061113e565b60405180910390a15050565b606580546001600160a01b03191690556102b881610ce3565b6097546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab90610bbe9033908690600401610ff8565b602060405180830381865afa158015610bdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bff91906112ba565b905080610c2557333083604051634a3fa29360e01b81526004016102fb939291906112db565b5050565b60c9548111610c4a5760405162461bcd60e51b81526004016102fb90611347565b60c98054908290556040517fc2d09fef144f7c8a86f71ea459f8fc17f675768eb1ae369cbd77fb31d467aafa90610b669083908590611357565b6001600160a01b0381166102b8576040516342bcdf7f60e11b815260040160405180910390fd5b600054610100900460ff16610cd25760405162461bcd60e51b81526004016102fb906113ba565b610cda610d35565b6102b881610d64565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610d5c5760405162461bcd60e51b81526004016102fb906113ba565b6102cd610d8b565b600054610100900460ff166102af5760405162461bcd60e51b81526004016102fb906113ba565b600054610100900460ff16610db25760405162461bcd60e51b81526004016102fb906113ba565b6102cd33610b72565b6107ea806113cb83390190565b61057780611bb583390190565b60006001600160a01b0382165b92915050565b610df181610dd5565b81146102b857600080fd5b8035610de281610de8565b600060208284031215610e1c57610e1c600080fd5b6000610e288484610dfc565b949350505050565b610e3981610dd5565b82525050565b60208101610de28284610e30565b60006001600160a01b038216610de2565b6000610de282610e4d565b6000610de282610e5e565b610e3981610e69565b60208101610de28284610e74565b80610df1565b8035610de281610e8b565b600060208284031215610eb157610eb1600080fd5b6000610e288484610e91565b80610e39565b60208101610de28284610ebd565b600080600080600060a08688031215610eec57610eec600080fd5b6000610ef88888610dfc565b9550506020610f0988828901610dfc565b9450506040610f1a88828901610dfc565b9350506060610f2b88828901610dfc565b9250506080610f3c88828901610e91565b9150509295509295909350565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b602082015291505b5060400190565b60208082528101610de281610f49565b60005b83811015610fbd578181015183820152602001610fa5565b50506000910152565b6000610fd0825190565b808452602084019350610fe7818560208601610fa2565b601f01601f19169290920192915050565b604081016110068285610e30565b8181036020830152610e288184610fc6565b6000611022825190565b611030818560208601610fa2565b9290920192915050565b60006110468285611018565b9150610e288284611018565b6001600160f81b03198116610e39565b6000610de28260601b90565b6000610de282611062565b610e3961108582610dd5565b61106e565b60006110968287611052565b6001820191506110a68286611079565b6014820191506110b68285610ebd565b6020820191506110c68284610ebd565b50602001949350505050565b6000610de282610dd5565b610df1816110d2565b8051610de2816110dd565b60006020828403121561110657611106600080fd5b6000610e2884846110e6565b8051610de281610de8565b60006020828403121561113257611132600080fd5b6000610e288484611112565b6040810161114c8285610e30565b6111596020830184610e30565b9392505050565b6080810161116e8287610e30565b61117b6020830186610e30565b6111886040830185610ebd565b6111956060830184610e30565b95945050505050565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b60208201529150610f8b565b60208082528101610de28161119e565b600060ff8216610de2565b610e39816111f9565b60208101610de28284611204565b60208082528181019081527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604083015260608201610de2565b602581526000602082017f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b60208201529150610f8b565b60208082528101610de281611255565b801515610df1565b8051610de2816112a7565b6000602082840312156112cf576112cf600080fd5b6000610e2884846112af565b606081016112e98286610e30565b6112f66020830185610e30565b81810360408301526111958184610fc6565b602281526000602082017f436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d8152611a5d60f21b60208201529150610f8b565b60208082528101610de281611308565b604081016113658285610ebd565b6111596020830184610ebd565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150610f8b565b60208082528101610de28161137256fe60806040526040516107ea3803806107ea8339810160408190526100229161045d565b61002e82826000610035565b505061063a565b61003e836100f6565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100f1576100ef836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e991906104b4565b836101f7565b505b505050565b6001600160a01b0381163b6101265760405162461bcd60e51b815260040161011d9061051a565b60405180910390fd5b61019a816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610167573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061018b91906104b4565b6001600160a01b03163b151590565b6101b65760405162461bcd60e51b815260040161011d90610577565b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392909216919091179055565b606061021c83836040518060600160405280602781526020016107c360279139610225565b90505b92915050565b6060600080856001600160a01b03168560405161024291906105a9565b600060405180830381855af49150503d806000811461027d576040519150601f19603f3d011682016040523d82523d6000602084013e610282565b606091505b5090925090506102948683838761029e565b9695505050505050565b606083156102dd5782516000036102d6576001600160a01b0385163b6102d65760405162461bcd60e51b815260040161011d906105bc565b50816102e7565b6102e783836102ef565b949350505050565b8151156102ff5781518083602001fd5b8060405162461bcd60e51b815260040161011d9190610629565b60006001600160a01b03821661021f565b61033381610319565b811461033e57600080fd5b50565b805161021f8161032a565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b03821117156103875761038761034c565b6040525050565b600061039960405190565b90506103a58282610362565b919050565b60006001600160401b038211156103c3576103c361034c565b601f19601f83011660200192915050565b60005b838110156103ef5781810151838201526020016103d7565b50506000910152565b600061040b610406846103aa565b61038e565b90508281526020810184848401111561042657610426600080fd5b6104318482856103d4565b509392505050565b600082601f83011261044d5761044d600080fd5b81516102e78482602086016103f8565b6000806040838503121561047357610473600080fd5b600061047f8585610341565b92505060208301516001600160401b0381111561049e5761049e600080fd5b6104aa85828601610439565b9150509250929050565b6000602082840312156104c9576104c9600080fd5b60006102e78484610341565b602581526000602082017f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e8152641d1c9858dd60da1b602082015291505b5060400190565b6020808252810161021f816104d5565b603081526000602082017f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206981526f1cc81b9bdd08184818dbdb9d1c9858dd60821b60208201529150610513565b6020808252810161021f8161052a565b6000610591825190565b61059f8185602086016103d4565b9290920192915050565b60006105b58284610587565b9392505050565b6020808252810161021f81601d81527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000602082015260400190565b6000610601825190565b8084526020840193506106188185602086016103d4565b601f01601f19169290920192915050565b6020808252810161021c81846105f7565b61017a806106496000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610029565b6100c2565b565b600061005c7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100bd919061011b565b905090565b3660008037600080366000845af43d6000803e8080156100e1573d6000f35b3d6000fd5b60006001600160a01b0382165b92915050565b610102816100e6565b811461010d57600080fd5b50565b80516100f3816100f9565b60006020828403121561013057610130600080fd5b600061013c8484610110565b94935050505056fea2646970667358221220a8191d9194d13b48b6d155765300178c7064de2b6ed3cff4b63bd08ebfc1a49864736f6c63430008190033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564608060405234801561001057600080fd5b5060405161057738038061057783398101604081905261002f9161011e565b61003833610047565b61004181610097565b506101a8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381163b6100c75760405162461bcd60e51b81526004016100be90610147565b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0382165b92915050565b610105816100e9565b811461011057600080fd5b50565b80516100f6816100fc565b60006020828403121561013357610133600080fd5b600061013f8484610113565b949350505050565b602080825281016100f681603381527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60208201527f6e206973206e6f74206120636f6e747261637400000000000000000000000000604082015260600190565b6103c0806101b76000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a6146100945780638da5cb5b1461009c578063f2fde38b146100ad575b600080fd5b61006f61006a366004610254565b6100c0565b005b6001546001600160a01b03165b60405161008b919061028c565b60405180910390f35b61006f610108565b6000546001600160a01b031661007e565b61006f6100bb366004610254565b61011c565b6100c861015f565b6100d181610189565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b61011061015f565b61011a60006101d2565b565b61012461015f565b6001600160a01b0381166101535760405162461bcd60e51b815260040161014a906102e0565b60405180910390fd5b61015c816101d2565b50565b6000546001600160a01b0316331461011a5760405162461bcd60e51b815260040161014a906102f0565b6001600160a01b0381163b6101b05760405162461bcd60e51b815260040161014a9061037a565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b61023e81610222565b811461015c57600080fd5b803561022f81610235565b60006020828403121561026957610269600080fd5b60006102758484610249565b949350505050565b61028681610222565b82525050565b6020810161022f828461027d565b602681526000602082017f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015291505b5060400190565b6020808252810161022f8161029a565b60208082528181019081527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408301526060820161022f565b603381526000602082017f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f8152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b602082015291506102d9565b6020808252810161022f8161032a56fea264697066735822122071a7c74deecc6adc9b45c53947a48e1a9da9734144acfac95c9bc9feeeefd9f364736f6c63430008190033a2646970667358221220411845db159c9c102443c0f4ebfdae7048ed739cb793e7a9d9e30ba71dbccf3664736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x116 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAFCFF50F GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xBE26317E GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xBE26317E EQ PUSH2 0x254 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x25D JUMPI DUP1 PUSH4 0xE521136F EQ PUSH2 0x26E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x281 JUMPI DUP1 PUSH4 0xF7013EF6 EQ PUSH2 0x294 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xAFCFF50F EQ PUSH2 0x1D3 JUMPI DUP1 PUSH4 0xB4A0BDF3 EQ PUSH2 0x1E6 JUMPI DUP1 PUSH4 0xB599410A EQ PUSH2 0x1F7 JUMPI DUP1 PUSH4 0xBA9A91A5 EQ PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x79BA5097 GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0x80D45A2D EQ PUSH2 0x189 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x19C JUMPI DUP1 PUSH4 0xA9E50471 EQ PUSH2 0x1AD JUMPI DUP1 PUSH4 0xABECCAA4 EQ PUSH2 0x1C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE32CB86 EQ PUSH2 0x11B JUMPI DUP1 PUSH4 0x17F33340 EQ PUSH2 0x130 JUMPI DUP1 PUSH4 0x59659E90 EQ PUSH2 0x159 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x179 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12E PUSH2 0x129 CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x2A7 JUMP JUMPDEST STOP JUMPDEST PUSH1 0xFD SLOAD PUSH2 0x143 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x150 SWAP2 SWAP1 PUSH2 0xE3F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0xFB SLOAD PUSH2 0x16C SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x150 SWAP2 SWAP1 PUSH2 0xE7D JUMP JUMPDEST PUSH2 0x12E PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x12E PUSH2 0x2CF JUMP JUMPDEST PUSH2 0x12E PUSH2 0x197 CALLDATASIZE PUSH1 0x4 PUSH2 0xE9C JUMP JUMPDEST PUSH2 0x30D JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x143 JUMP JUMPDEST PUSH2 0x143 PUSH2 0x1BB CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x354 JUMP JUMPDEST PUSH2 0x16C PUSH2 0x1CE CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x46A JUMP JUMPDEST PUSH1 0xFC SLOAD PUSH2 0x16C SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x16C JUMP JUMPDEST PUSH2 0x16C PUSH2 0x205 CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH1 0xFE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x247 PUSH32 0x1991AF52B18EB46FA8C9D75910FD649338D33BA3882CFE1E1AFBC13A3B4DF5B9 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x150 SWAP2 SWAP1 PUSH2 0xEC3 JUMP JUMPDEST PUSH2 0x247 PUSH1 0xC9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x143 JUMP JUMPDEST PUSH2 0x12E PUSH2 0x27C CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x7C4 JUMP JUMPDEST PUSH2 0x12E PUSH2 0x28F CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x867 JUMP JUMPDEST PUSH2 0x12E PUSH2 0x2A2 CALLDATASIZE PUSH1 0x4 PUSH2 0xED1 JUMP JUMPDEST PUSH2 0x8D8 JUMP JUMPDEST PUSH2 0x2AF PUSH2 0xAC3 JUMP JUMPDEST PUSH2 0x2B8 DUP2 PUSH2 0xAED JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x2C3 PUSH2 0xAC3 JUMP JUMPDEST PUSH2 0x2CD PUSH1 0x0 PUSH2 0xB72 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x65 SLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 EQ PUSH2 0x304 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2FB SWAP1 PUSH2 0xF92 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2B8 DUP2 PUSH2 0xB72 JUMP JUMPDEST PUSH2 0x34B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x19 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x7365744D61784C6F6F70734C696D69742875696E743235362900000000000000 DUP2 MSTORE POP PUSH2 0xB8B JUMP JUMPDEST PUSH2 0x2B8 DUP2 PUSH2 0xC29 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF PUSH1 0xF8 SHL ADDRESS PUSH32 0x1991AF52B18EB46FA8C9D75910FD649338D33BA3882CFE1E1AFBC13A3B4DF5B9 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x38D SWAP1 PUSH2 0xDBB JUMP JUMPDEST PUSH1 0x1F NOT DUP3 DUP3 SUB DUP2 ADD DUP4 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD AND PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH1 0xFB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x189ACDBD PUSH1 0xE3 SHL SWAP1 PUSH2 0x3C6 SWAP1 DUP10 SWAP1 PUSH1 0x24 ADD PUSH2 0xE3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 MSTORE MLOAD PUSH2 0x405 SWAP4 SWAP3 ADD PUSH2 0xFF8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE PUSH2 0x423 SWAP3 SWAP2 PUSH1 0x20 ADD PUSH2 0x103A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x44C SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x108A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x475 DUP3 PUSH2 0xC84 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND ISZERO PUSH2 0x4AE JUMPI PUSH1 0x40 MLOAD PUSH4 0x4FA32EA7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5FE3B567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4F3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x517 SWAP2 SWAP1 PUSH2 0x10F1 JUMP JUMPDEST SWAP1 POP PUSH1 0xFC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x266E0A7F DUP3 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6F307DC3 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x57C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5A0 SWAP2 SWAP1 PUSH2 0x111D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BD SWAP3 SWAP2 SWAP1 PUSH2 0x113E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5FE SWAP2 SWAP1 PUSH2 0x111D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x62F JUMPI PUSH1 0x40 MLOAD PUSH4 0xA74323B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xFB SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP2 PUSH32 0x1991AF52B18EB46FA8C9D75910FD649338D33BA3882CFE1E1AFBC13A3B4DF5B9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x189ACDBD PUSH1 0xE3 SHL SWAP1 PUSH2 0x67D SWAP1 DUP10 SWAP1 PUSH1 0x24 ADD PUSH2 0xE3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE SWAP1 MLOAD PUSH2 0x6BA SWAP1 PUSH2 0xDBB JUMP JUMPDEST PUSH2 0x6C5 SWAP3 SWAP2 SWAP1 PUSH2 0xFF8 JUMP JUMPDEST DUP2 SWAP1 PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE2 SWAP1 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x6E5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x97 SLOAD PUSH1 0xFD SLOAD PUSH1 0xC9 SLOAD PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x20F08D2D PUSH1 0xE1 SHL DUP2 MSTORE SWAP5 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND SWAP6 PUSH4 0x41E11A5A SWAP6 PUSH2 0x72C SWAP6 SWAP1 DUP4 AND SWAP5 SWAP1 DUP4 AND SWAP4 SWAP1 SWAP3 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x1160 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x746 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x75A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xFE PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP6 DUP6 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP4 SWAP7 POP DUP7 SWAP4 SWAP1 SWAP3 DUP7 AND SWAP2 PUSH32 0xCBD4E5D1362721C7FD10DAAABB1A046344447D4798BE55684B8A6B4FC1765D72 SWAP2 LOG3 POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x802 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x736574526577617264526563697069656E742861646472657373290000000000 DUP2 MSTORE POP PUSH2 0xB8B JUMP JUMPDEST PUSH2 0x80B DUP2 PUSH2 0xC84 JUMP JUMPDEST PUSH1 0xFD SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 AND SWAP1 PUSH32 0xC8C11BB97AC2FFA10CE2E2A98F4C1FD8DF84CFA2E1A15E013ED2383AB1F527AD SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0xFD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x86F PUSH2 0xAC3 JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH2 0x8A0 PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x8F8 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x912 JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x912 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x92E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2FB SWAP1 PUSH2 0x11E9 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x951 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x95A DUP7 PUSH2 0xC84 JUMP JUMPDEST PUSH2 0x963 DUP6 PUSH2 0xC84 JUMP JUMPDEST PUSH2 0x96C DUP5 PUSH2 0xC84 JUMP JUMPDEST PUSH2 0x975 DUP4 PUSH2 0xC84 JUMP JUMPDEST PUSH2 0x97E DUP7 PUSH2 0xCAB JUMP JUMPDEST PUSH1 0xFC DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0xFD DUP1 SLOAD SWAP3 DUP8 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x9B7 DUP3 PUSH2 0xC29 JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH2 0x9C4 SWAP1 PUSH2 0xDC8 JUMP JUMPDEST PUSH2 0x9CE SWAP2 SWAP1 PUSH2 0xE3F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x9EA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0xFB DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP3 AND DUP3 OR SWAP1 SSTORE PUSH4 0xF2FDE38B PUSH2 0xA22 PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA3E SWAP2 SWAP1 PUSH2 0xE3F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA6C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 ISZERO PUSH2 0xABB JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH2 0xAB2 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x120D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2CD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2FB SWAP1 PUSH2 0x121B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xB13 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2FB SWAP1 PUSH2 0x1297 JUMP JUMPDEST PUSH1 0x97 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP1 PUSH32 0x66FD58E82F7B31A2A5C30E0888F3093EFE4E111B00CD2B0C31FE014601293AA0 SWAP1 PUSH2 0xB66 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x113E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH2 0x2B8 DUP2 PUSH2 0xCE3 JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x40 MLOAD PUSH4 0x18C5E8AB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x18C5E8AB SWAP1 PUSH2 0xBBE SWAP1 CALLER SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0xFF8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBDB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBFF SWAP2 SWAP1 PUSH2 0x12BA JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0xC25 JUMPI CALLER ADDRESS DUP4 PUSH1 0x40 MLOAD PUSH4 0x4A3FA293 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2FB SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x12DB JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0xC9 SLOAD DUP2 GT PUSH2 0xC4A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2FB SWAP1 PUSH2 0x1347 JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC2D09FEF144F7C8A86F71EA459F8FC17F675768EB1AE369CBD77FB31D467AAFA SWAP1 PUSH2 0xB66 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x1357 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2B8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x42BCDF7F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xCD2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2FB SWAP1 PUSH2 0x13BA JUMP JUMPDEST PUSH2 0xCDA PUSH2 0xD35 JUMP JUMPDEST PUSH2 0x2B8 DUP2 PUSH2 0xD64 JUMP JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xD5C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2FB SWAP1 PUSH2 0x13BA JUMP JUMPDEST PUSH2 0x2CD PUSH2 0xD8B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2AF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2FB SWAP1 PUSH2 0x13BA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xDB2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2FB SWAP1 PUSH2 0x13BA JUMP JUMPDEST PUSH2 0x2CD CALLER PUSH2 0xB72 JUMP JUMPDEST PUSH2 0x7EA DUP1 PUSH2 0x13CB DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH2 0x577 DUP1 PUSH2 0x1BB5 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xDF1 DUP2 PUSH2 0xDD5 JUMP JUMPDEST DUP2 EQ PUSH2 0x2B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0xDE2 DUP2 PUSH2 0xDE8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE1C JUMPI PUSH2 0xE1C PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE28 DUP5 DUP5 PUSH2 0xDFC JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0xE39 DUP2 PUSH2 0xDD5 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xDE2 DUP3 DUP5 PUSH2 0xE30 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xDE2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDE2 DUP3 PUSH2 0xE4D JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDE2 DUP3 PUSH2 0xE5E JUMP JUMPDEST PUSH2 0xE39 DUP2 PUSH2 0xE69 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xDE2 DUP3 DUP5 PUSH2 0xE74 JUMP JUMPDEST DUP1 PUSH2 0xDF1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xDE2 DUP2 PUSH2 0xE8B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xEB1 JUMPI PUSH2 0xEB1 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE28 DUP5 DUP5 PUSH2 0xE91 JUMP JUMPDEST DUP1 PUSH2 0xE39 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xDE2 DUP3 DUP5 PUSH2 0xEBD JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xEEC JUMPI PUSH2 0xEEC PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xEF8 DUP9 DUP9 PUSH2 0xDFC JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0xF09 DUP9 DUP3 DUP10 ADD PUSH2 0xDFC JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0xF1A DUP9 DUP3 DUP10 ADD PUSH2 0xDFC JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0xF2B DUP9 DUP3 DUP10 ADD PUSH2 0xDFC JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0xF3C DUP9 DUP3 DUP10 ADD PUSH2 0xE91 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x29 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4F776E61626C6532537465703A2063616C6C6572206973206E6F742074686520 DUP2 MSTORE PUSH9 0x3732BB9037BBB732B9 PUSH1 0xB9 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xDE2 DUP2 PUSH2 0xF49 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xFBD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xFA5 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFD0 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0xFE7 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xFA2 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x1006 DUP3 DUP6 PUSH2 0xE30 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0xE28 DUP2 DUP5 PUSH2 0xFC6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1022 DUP3 MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1030 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xFA2 JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1046 DUP3 DUP6 PUSH2 0x1018 JUMP JUMPDEST SWAP2 POP PUSH2 0xE28 DUP3 DUP5 PUSH2 0x1018 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT DUP2 AND PUSH2 0xE39 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDE2 DUP3 PUSH1 0x60 SHL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDE2 DUP3 PUSH2 0x1062 JUMP JUMPDEST PUSH2 0xE39 PUSH2 0x1085 DUP3 PUSH2 0xDD5 JUMP JUMPDEST PUSH2 0x106E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1096 DUP3 DUP8 PUSH2 0x1052 JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SWAP2 POP PUSH2 0x10A6 DUP3 DUP7 PUSH2 0x1079 JUMP JUMPDEST PUSH1 0x14 DUP3 ADD SWAP2 POP PUSH2 0x10B6 DUP3 DUP6 PUSH2 0xEBD JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x10C6 DUP3 DUP5 PUSH2 0xEBD JUMP JUMPDEST POP PUSH1 0x20 ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDE2 DUP3 PUSH2 0xDD5 JUMP JUMPDEST PUSH2 0xDF1 DUP2 PUSH2 0x10D2 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xDE2 DUP2 PUSH2 0x10DD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1106 JUMPI PUSH2 0x1106 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE28 DUP5 DUP5 PUSH2 0x10E6 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xDE2 DUP2 PUSH2 0xDE8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1132 JUMPI PUSH2 0x1132 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE28 DUP5 DUP5 PUSH2 0x1112 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x114C DUP3 DUP6 PUSH2 0xE30 JUMP JUMPDEST PUSH2 0x1159 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xE30 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x116E DUP3 DUP8 PUSH2 0xE30 JUMP JUMPDEST PUSH2 0x117B PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0xE30 JUMP JUMPDEST PUSH2 0x1188 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0xEBD JUMP JUMPDEST PUSH2 0x1195 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0xE30 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2E DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 DUP2 MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0xF8B JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xDE2 DUP2 PUSH2 0x119E JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND PUSH2 0xDE2 JUMP JUMPDEST PUSH2 0xE39 DUP2 PUSH2 0x11F9 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xDE2 DUP3 DUP5 PUSH2 0x1204 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD SWAP1 DUP2 MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD PUSH2 0xDE2 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x696E76616C696420616365737320636F6E74726F6C206D616E61676572206164 DUP2 MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0xF8B JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xDE2 DUP2 PUSH2 0x1255 JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0xDF1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xDE2 DUP2 PUSH2 0x12A7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x12CF JUMPI PUSH2 0x12CF PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE28 DUP5 DUP5 PUSH2 0x12AF JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x12E9 DUP3 DUP7 PUSH2 0xE30 JUMP JUMPDEST PUSH2 0x12F6 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0xE30 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1195 DUP2 DUP5 PUSH2 0xFC6 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x436F6D7074726F6C6C65723A20496E76616C6964206D61784C6F6F70734C696D DUP2 MSTORE PUSH2 0x1A5D PUSH1 0xF2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0xF8B JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xDE2 DUP2 PUSH2 0x1308 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x1365 DUP3 DUP6 PUSH2 0xEBD JUMP JUMPDEST PUSH2 0x1159 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xEBD JUMP JUMPDEST PUSH1 0x2B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 DUP2 MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0xF8B JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xDE2 DUP2 PUSH2 0x1372 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x7EA CODESIZE SUB DUP1 PUSH2 0x7EA DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x22 SWAP2 PUSH2 0x45D JUMP JUMPDEST PUSH2 0x2E DUP3 DUP3 PUSH1 0x0 PUSH2 0x35 JUMP JUMPDEST POP POP PUSH2 0x63A JUMP JUMPDEST PUSH2 0x3E DUP4 PUSH2 0xF6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH32 0x1CF3B03A6CF19FA2BABA4DF148E9DCABEDEA7F8A5C07840E207E5C089BE95D3E SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x7F JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0xF1 JUMPI PUSH2 0xEF DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5C60DA1B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE9 SWAP2 SWAP1 PUSH2 0x4B4 JUMP JUMPDEST DUP4 PUSH2 0x1F7 JUMP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x126 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11D SWAP1 PUSH2 0x51A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x19A DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5C60DA1B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x167 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18B SWAP2 SWAP1 PUSH2 0x4B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x1B6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11D SWAP1 PUSH2 0x577 JUMP JUMPDEST PUSH32 0xA3F0AD74E5423AEBFD80D3EF4346578335A9A72AEAEE59FF6CB3582B35133D50 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH2 0x21C DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x7C3 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x225 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x242 SWAP2 SWAP1 PUSH2 0x5A9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x27D JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x282 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x294 DUP7 DUP4 DUP4 DUP8 PUSH2 0x29E JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x2DD JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x2D6 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x2D6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11D SWAP1 PUSH2 0x5BC JUMP JUMPDEST POP DUP2 PUSH2 0x2E7 JUMP JUMPDEST PUSH2 0x2E7 DUP4 DUP4 PUSH2 0x2EF JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x2FF JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11D SWAP2 SWAP1 PUSH2 0x629 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x21F JUMP JUMPDEST PUSH2 0x333 DUP2 PUSH2 0x319 JUMP JUMPDEST DUP2 EQ PUSH2 0x33E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x21F DUP2 PUSH2 0x32A JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x387 JUMPI PUSH2 0x387 PUSH2 0x34C JUMP JUMPDEST PUSH1 0x40 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x399 PUSH1 0x40 MLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x3A5 DUP3 DUP3 PUSH2 0x362 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x3C3 JUMPI PUSH2 0x3C3 PUSH2 0x34C JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3EF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3D7 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x40B PUSH2 0x406 DUP5 PUSH2 0x3AA JUMP JUMPDEST PUSH2 0x38E JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x426 JUMPI PUSH2 0x426 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x431 DUP5 DUP3 DUP6 PUSH2 0x3D4 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x44D JUMPI PUSH2 0x44D PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x2E7 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x3F8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x473 JUMPI PUSH2 0x473 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x47F DUP6 DUP6 PUSH2 0x341 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x49E JUMPI PUSH2 0x49E PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4AA DUP6 DUP3 DUP7 ADD PUSH2 0x439 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4C9 JUMPI PUSH2 0x4C9 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2E7 DUP5 DUP5 PUSH2 0x341 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x455243313936373A206E657720626561636F6E206973206E6F74206120636F6E DUP2 MSTORE PUSH5 0x1D1C9858DD PUSH1 0xDA SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x21F DUP2 PUSH2 0x4D5 JUMP JUMPDEST PUSH1 0x30 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x455243313936373A20626561636F6E20696D706C656D656E746174696F6E2069 DUP2 MSTORE PUSH16 0x1CC81B9BDD08184818DBDB9D1C9858DD PUSH1 0x82 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x513 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x21F DUP2 PUSH2 0x52A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x591 DUP3 MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x59F DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x3D4 JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5B5 DUP3 DUP5 PUSH2 0x587 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x21F DUP2 PUSH1 0x1D DUP2 MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x601 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x618 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x3D4 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x21C DUP2 DUP5 PUSH2 0x5F7 JUMP JUMPDEST PUSH2 0x17A DUP1 PUSH2 0x649 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0x13 JUMPI PUSH2 0x11 PUSH2 0x17 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x11 JUMPDEST PUSH2 0x27 PUSH2 0x22 PUSH2 0x29 JUMP JUMPDEST PUSH2 0xC2 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5C PUSH32 0xA3F0AD74E5423AEBFD80D3EF4346578335A9A72AEAEE59FF6CB3582B35133D50 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5C60DA1B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x99 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBD SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0xE1 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x102 DUP2 PUSH2 0xE6 JUMP JUMPDEST DUP2 EQ PUSH2 0x10D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0xF3 DUP2 PUSH2 0xF9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x130 JUMPI PUSH2 0x130 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x13C DUP5 DUP5 PUSH2 0x110 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 NOT SAR SWAP2 SWAP5 0xD1 EXTCODESIZE BASEFEE 0xB6 0xD1 SSTORE PUSH23 0x5300178C7064DE2B6ED3CFF4B63BD08EBFC1A49864736F PUSH13 0x63430008190033416464726573 PUSH20 0x3A206C6F772D6C6576656C2064656C6567617465 KECCAK256 PUSH4 0x616C6C20 PUSH7 0x61696C65646080 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x577 CODESIZE SUB DUP1 PUSH2 0x577 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x11E JUMP JUMPDEST PUSH2 0x38 CALLER PUSH2 0x47 JUMP JUMPDEST PUSH2 0x41 DUP2 PUSH2 0x97 JUMP JUMPDEST POP PUSH2 0x1A8 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0xC7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBE SWAP1 PUSH2 0x147 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x105 DUP2 PUSH2 0xE9 JUMP JUMPDEST DUP2 EQ PUSH2 0x110 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0xF6 DUP2 PUSH2 0xFC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x133 JUMPI PUSH2 0x133 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x13F DUP5 DUP5 PUSH2 0x113 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xF6 DUP2 PUSH1 0x33 DUP2 MSTORE PUSH32 0x5570677261646561626C65426561636F6E3A20696D706C656D656E746174696F PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x6E206973206E6F74206120636F6E747261637400000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0x3C0 DUP1 PUSH2 0x1B7 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x71 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x94 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x9C JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xAD JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0x6A CALLDATASIZE PUSH1 0x4 PUSH2 0x254 JUMP JUMPDEST PUSH2 0xC0 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8B SWAP2 SWAP1 PUSH2 0x28C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6F PUSH2 0x108 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7E JUMP JUMPDEST PUSH2 0x6F PUSH2 0xBB CALLDATASIZE PUSH1 0x4 PUSH2 0x254 JUMP JUMPDEST PUSH2 0x11C JUMP JUMPDEST PUSH2 0xC8 PUSH2 0x15F JUMP JUMPDEST PUSH2 0xD1 DUP2 PUSH2 0x189 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x110 PUSH2 0x15F JUMP JUMPDEST PUSH2 0x11A PUSH1 0x0 PUSH2 0x1D2 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x124 PUSH2 0x15F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x153 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x14A SWAP1 PUSH2 0x2E0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x15C DUP2 PUSH2 0x1D2 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x11A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x14A SWAP1 PUSH2 0x2F0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x1B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x14A SWAP1 PUSH2 0x37A JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x23E DUP2 PUSH2 0x222 JUMP JUMPDEST DUP2 EQ PUSH2 0x15C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x22F DUP2 PUSH2 0x235 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x269 JUMPI PUSH2 0x269 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x275 DUP5 DUP5 PUSH2 0x249 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x286 DUP2 PUSH2 0x222 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x22F DUP3 DUP5 PUSH2 0x27D JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 DUP2 MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x22F DUP2 PUSH2 0x29A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD SWAP1 DUP2 MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD PUSH2 0x22F JUMP JUMPDEST PUSH1 0x33 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x5570677261646561626C65426561636F6E3A20696D706C656D656E746174696F DUP2 MSTORE PUSH19 0x1B881A5CC81B9BDD08184818DBDB9D1C9858DD PUSH1 0x6A SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x2D9 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x22F DUP2 PUSH2 0x32A JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH18 0xA7C74DEECC6ADC9B45C53947A48E1A9DA973 COINBASE PREVRANDAO 0xAC STATICCALL 0xC9 TLOAD SWAP12 0xC9 INVALID 0xEE 0xEF 0xD9 RETURN PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 COINBASE XOR GASLIMIT 0xDB ISZERO SWAP13 SWAP13 LT 0x24 NUMBER 0xC0 DELEGATECALL 0xEB REVERT 0xAE PUSH17 0x48ED739CB793E7A9D9E30BA71DBCCF3664 PUSH20 0x6F6C634300081900330000000000000000000000 ","sourceMap":"1034:7005:53:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2102:147:26;;;;;;:::i;:::-;;:::i;:::-;;1528:30:53;;;;;-1:-1:-1;;;;;1528:30:53;;;;;;;;;;:::i;:::-;;;;;;;;1324:31;;;;;-1:-1:-1;;;;;1324:31:53;;;;;;;;;;:::i;2085:101:1:-;;;:::i;2031:212:0:-;;;:::i;4996:159:53:-;;;;;;:::i;:::-;;:::i;1462:85:1:-;1534:6;;-1:-1:-1;;;;;1534:6:1;1462:85;;7037:1000:53;;;;;;:::i;:::-;;:::i;5800:1082::-;;;;;;:::i;:::-;;:::i;1405:41::-;;;;;-1:-1:-1;;;;;1405:41:53;;;2345:125:26;2442:21;;-1:-1:-1;;;;;2442:21:26;2345:125;;1618:72:53;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1618:72:53;;;1193:63;;1224:32;1193:63;;;;;;;;;:::i;323:28:34:-;;;;;;1144:99:0;1223:13;;-1:-1:-1;;;;;1223:13:0;1144:99;;4471:279:53;;;;;;:::i;:::-;;:::i;1436:178:0:-;;;;;;:::i;:::-;;:::i;3165:945:53:-;;;;;;:::i;:::-;;:::i;2102:147:26:-;1355:13:1;:11;:13::i;:::-;2195:47:26::1;2220:21;2195:24;:47::i;:::-;2102:147:::0;:::o;2085:101:1:-;1355:13;:11;:13::i;:::-;2149:30:::1;2176:1;2149:18;:30::i;:::-;2085:101::o:0;2031:212:0:-;1223:13;;965:10:12;;-1:-1:-1;;;;;1223:13:0;2130:24;;2122:78;;;;-1:-1:-1;;;2122:78:0;;;;;;;:::i;:::-;;;;;;;;;2210:26;2229:6;2210:18;:26::i;4996:159:53:-;5061:48;;;;;;;;;;;;;;;;;;:19;:48::i;:::-;5119:29;5137:10;5119:17;:29::i;7037:1000::-;7103:7;7324:4;7317:12;;7371:4;1224:32;7553:30;;;;;;;;:::i;:::-;-1:-1:-1;;7553:30:53;;;;;;;;;;;;;;;;7689:6;;-1:-1:-1;;;;;7689:6:53;;-1:-1:-1;;;7765:32:53;7742:64;;7799:6;;7742:64;;;:::i;:::-;;;;-1:-1:-1;;7742:64:53;;;;;;;;;;;;;;;-1:-1:-1;;;;;7742:64:53;-1:-1:-1;;;;;;7742:64:53;;;;;;;;;;7625:223;;;;;;:::i;:::-;;;;-1:-1:-1;;7625:223:53;;;;;;;;;;7495:391;;;7625:223;7495:391;;:::i;:::-;;;;;;;;;;;;;7448:472;;;;;;7267:683;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;7267:683:53;;;;;;;;;7228:748;;7267:683;7228:748;;;;;7037:1000;-1:-1:-1;;7037:1000:53:o;5800:1082::-;5857:24;5893:28;5914:6;5893:20;:28::i;:::-;-1:-1:-1;;;;;5944:21:53;;;5978:1;5944:21;;;:13;:21;;;;;;;5936:44;5932:125;;6003:43;;-1:-1:-1;;;6003:43:53;;;;;;;;;;;5932:125;6067:23;6109:6;6067:49;;6127:19;6157:7;-1:-1:-1;;;;;6157:19:53;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6127:52;;6204:12;;;;;;;;;-1:-1:-1;;;;;6204:12:53;-1:-1:-1;;;;;6204:30:53;;6235:11;6248:7;-1:-1:-1;;;;;6248:18:53;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6204:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6194:75:53;:6;-1:-1:-1;;;;;6194:75:53;;6190:149;;6292:36;;-1:-1:-1;;;6292:36:53;;;;;;;;;;;6190:149;6487:6;;6516:64;;6349:25;;1224:32;;-1:-1:-1;;;;;6487:6:53;;;;-1:-1:-1;;;6539:32:53;6516:64;;6573:6;;6516:64;;;:::i;:::-;;;;-1:-1:-1;;6516:64:53;;;;;;;;;;;;;;-1:-1:-1;;;;;6516:64:53;-1:-1:-1;;;;;;6516:64:53;;;;;;;;;;6428:170;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6666:21:53;;6690:15;;6707:13;;1534:6:1;;6633:97:53;;-1:-1:-1;;;6633:97:53;;6349:273;;-1:-1:-1;;;;;;6633:24:53;;;;;;:97;;6666:21;;;;6690:15;;;;6707:13;;1534:6:1;;6633:97:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;6801:21:53;;;;;;;:13;:21;;;;;;:29;;-1:-1:-1;;;;;;6801:29:53;;;;;;;;;;6846;;6801;;-1:-1:-1;6801:29:53;;;;6846;;;;;;5883:999;;;5800:1082;;;:::o;4471:279::-;4540:50;;;;;;;;;;;;;;;;;;:19;:50::i;:::-;4600:34;4621:12;4600:20;:34::i;:::-;4673:15;;4650:53;;-1:-1:-1;;;;;4650:53:53;;;;4673:15;;4650:53;;4673:15;;4650:53;4713:15;:30;;-1:-1:-1;;;;;;4713:30:53;-1:-1:-1;;;;;4713:30:53;;;;;;;;;;4471:279::o;1436:178:0:-;1355:13:1;:11;:13::i;:::-;1525::0::1;:24:::0;;-1:-1:-1;;;;;1525:24:0;::::1;-1:-1:-1::0;;;;;;1525:24:0;;::::1;::::0;::::1;::::0;;;1589:7:::1;1534:6:1::0;;-1:-1:-1;;;;;1534:6:1;;1462:85;1589:7:0::1;-1:-1:-1::0;;;;;1564:43:0::1;;;;;;;;;;;1436:178:::0;:::o;3165:945:53:-;3279:19:3;3302:13;;;;;;3301:14;;3347:34;;;;-1:-1:-1;3365:12:3;;3380:1;3365:12;;;;:16;3347:34;3346:108;;;-1:-1:-1;3426:4:3;1713:19:11;:23;;;3387:66:3;;-1:-1:-1;3436:12:3;;;;;:17;3387:66;3325:201;;;;-1:-1:-1;;;3325:201:3;;;;;;;:::i;:::-;3536:12;:16;;-1:-1:-1;;3536:16:3;3551:1;3536:16;;;3562:65;;;;3596:13;:20;;-1:-1:-1;;3596:20:3;;;;;3562:65;3415:42:53::1;3436:20;3415;:42::i;:::-;3467:41;3488:19;3467:20;:41::i;:::-;3518:44;3539:22;3518:20;:44::i;:::-;3572:48;3593:26;3572:20;:48::i;:::-;3631:45;3655:20;3631:23;:45::i;:::-;3687:12;:57:::0;;-1:-1:-1;;;;;3687:57:53;;::::1;-1:-1:-1::0;;;;;;3687:57:53;;::::1;;::::0;;;3754:15:::1;:40:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;3804:35:::1;3822:16:::0;3804:17:::1;:35::i;:::-;3954:26;3932:49;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;3923:6:53::1;:58:::0;;-1:-1:-1;;;;;3923:58:53;;;::::1;-1:-1:-1::0;;;;;;3923:58:53;;::::1;::::0;::::1;::::0;;4070:24:::1;4095:7;1534:6:1::0;;-1:-1:-1;;;;;1534:6:1;;1462:85;4095:7:53::1;4070:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3651:14:3::0;3647:99;;;3697:5;3681:21;;-1:-1:-1;;3681:21:3;;;3721:14;;;;;;3681:13;;3721:14;:::i;:::-;;;;;;;;3647:99;3269:483;3165:945:53;;;;;:::o;1620:130:1:-;1534:6;;-1:-1:-1;;;;;1534:6:1;965:10:12;1683:23:1;1675:68;;;;-1:-1:-1;;;1675:68:1;;;;;;;:::i;2641:425:26:-;-1:-1:-1;;;;;2733:44:26;;2725:94;;;;-1:-1:-1;;;2725:94:26;;;;;;;:::i;:::-;2871:21;;;-1:-1:-1;;;;;2903:70:26;;;-1:-1:-1;;;;;;2903:70:26;;;;;;2988:71;;2871:21;;;2988:71;;;;2871:21;;2951;;2988:71;:::i;:::-;;;;;;;;2715:351;2641:425;:::o;1798:153:0:-;1887:13;1880:20;;-1:-1:-1;;;;;;1880:20:0;;;1910:34;1935:8;1910:24;:34::i;3203:282:26:-;3304:21;;:60;;-1:-1:-1;;;3304:60:26;;3281:20;;-1:-1:-1;;;;;3304:21:26;;:37;;:60;;3342:10;;3354:9;;3304:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3281:83;;3380:15;3375:104;;3431:10;3451:4;3458:9;3418:50;;-1:-1:-1;;;3418:50:26;;;;;;;;;;:::i;3375:104::-;3271:214;3203:282;:::o;1087:279:34:-;1164:13;;1156:5;:21;1148:68;;;;-1:-1:-1;;;1148:68:34;;;;;;;:::i;:::-;1254:13;;;1277:21;;;;1314:45;;;;;;1254:13;;1293:5;;1314:45;:::i;485:136:46:-;-1:-1:-1;;;;;548:22:46;;544:75;;589:23;;-1:-1:-1;;;589:23:46;;;;;;;;;;;1419:194:26;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;1519:21:26::1;:19;:21::i;:::-;1550:56;1584:21;1550:33;:56::i;2687:187:1:-:0;2779:6;;;-1:-1:-1;;;;;2795:17:1;;;-1:-1:-1;;;;;;2795:17:1;;;;;;;2827:40;;2779:6;;;2795:17;2779:6;;2827:40;;2760:16;;2827:40;2750:124;2687:187;:::o;889:100:0:-;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;956:26:0::1;:24;:26::i;1619:164:26:-:0;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;1125:111:1:-;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;1197:32:1::1;965:10:12::0;1197:18:1::1;:32::i;-1:-1:-1:-:0;;;;;;;;:::o;:::-;;;;;;;;:::o;466:96:69:-;503:7;-1:-1:-1;;;;;400:54:69;;532:24;521:35;466:96;-1:-1:-1;;466:96:69:o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;696:139;767:20;;796:33;767:20;796:33;:::i;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;1034:7005:53;;;955:79:69;1075:1;1100:53;1145:7;1125:9;1100:53;:::i;:::-;1090:63;841:329;-1:-1:-1;;;;841:329:69:o;1176:118::-;1263:24;1281:5;1263:24;:::i;:::-;1258:3;1251:37;1176:118;;:::o;1300:222::-;1431:2;1416:18;;1444:71;1420:9;1488:6;1444:71;:::i;1594:142::-;1644:9;-1:-1:-1;;;;;400:54:69;;1677:53;334:126;1742;1792:9;1825:37;1856:5;1825:37;:::i;1874:152::-;1950:9;1983:37;2014:5;1983:37;:::i;2032:183::-;2145:63;2202:5;2145:63;:::i;2221:274::-;2378:2;2363:18;;2391:97;2367:9;2461:6;2391:97;:::i;2584:122::-;2675:5;2657:24;1528:60;2712:139;2783:20;;2812:33;2783:20;2812:33;:::i;2857:329::-;2916:6;2965:2;2953:9;2944:7;2940:23;2936:32;2933:119;;;2971:79;1034:7005:53;;;2971:79:69;3091:1;3116:53;3161:7;3141:9;3116:53;:::i;5216:118::-;5321:5;5303:24;1528:60;5340:222;5471:2;5456:18;;5484:71;5460:9;5528:6;5484:71;:::i;5920:911::-;6015:6;6023;6031;6039;6047;6096:3;6084:9;6075:7;6071:23;6067:33;6064:120;;;6103:79;1034:7005:53;;;6103:79:69;6223:1;6248:53;6293:7;6273:9;6248:53;:::i;:::-;6238:63;;6194:117;6350:2;6376:53;6421:7;6412:6;6401:9;6397:22;6376:53;:::i;:::-;6366:63;;6321:118;6478:2;6504:53;6549:7;6540:6;6529:9;6525:22;6504:53;:::i;:::-;6494:63;;6449:118;6606:2;6632:53;6677:7;6668:6;6657:9;6653:22;6632:53;:::i;:::-;6622:63;;6577:118;6734:3;6761:53;6806:7;6797:6;6786:9;6782:22;6761:53;:::i;:::-;6751:63;;6705:119;5920:911;;;;;;;;:::o;7246:366::-;7473:2;6943:19;;7388:3;6995:4;6986:14;;7152:34;7129:58;;-1:-1:-1;;;7216:2:69;7204:15;;7197:36;7402:74;-1:-1:-1;7485:93:69;-1:-1:-1;7603:2:69;7594:12;;7246:366::o;7618:419::-;7822:2;7835:47;;;7807:18;;7899:131;7807:18;7899:131;:::i;8321:248::-;8403:1;8413:113;8427:6;8424:1;8421:13;8413:113;;;8503:11;;;8497:18;8484:11;;;8477:39;8449:2;8442:10;8413:113;;;-1:-1:-1;;8560:1:69;8542:16;;8535:27;8321:248::o;8683:373::-;8769:3;8797:38;8829:5;8122:12;;8043:98;8797:38;6943:19;;;6995:4;6986:14;;8844:77;;8930:65;8988:6;8983:3;8976:4;8969:5;8965:16;8930:65;:::i;:::-;8667:2;8647:14;-1:-1:-1;;8643:28:69;9011:39;;;;;;-1:-1:-1;;8683:373:69:o;9062:419::-;9239:2;9224:18;;9252:71;9228:9;9296:6;9252:71;:::i;:::-;9370:9;9364:4;9360:20;9355:2;9344:9;9340:18;9333:48;9398:76;9469:4;9460:6;9398:76;:::i;9640:386::-;9744:3;9772:38;9804:5;8122:12;;8043:98;9772:38;9923:65;9981:6;9976:3;9969:4;9962:5;9958:16;9923:65;:::i;:::-;10004:16;;;;;9640:386;-1:-1:-1;;9640:386:69:o;10032:427::-;10208:3;10230:93;10319:3;10310:6;10230:93;:::i;:::-;10223:100;;10340:93;10429:3;10420:6;10340:93;:::i;10704:153::-;-1:-1:-1;;;;;;10530:78:69;;10807:43;1528:60;10963:94;11002:7;11031:20;11045:5;10940:2;10936:14;;10863:94;11063:100;11102:7;11131:26;11151:5;11131:26;:::i;11169:157::-;11274:45;11294:24;11312:5;11294:24;:::i;:::-;11274:45;:::i;11580:674::-;11774:3;11789:73;11858:3;11849:6;11789:73;:::i;:::-;11887:1;11882:3;11878:11;11871:18;;11899:75;11970:3;11961:6;11899:75;:::i;:::-;11999:2;11994:3;11990:12;11983:19;;12012:75;12083:3;12074:6;12012:75;:::i;:::-;12112:2;12107:3;12103:12;12096:19;;12125:75;12196:3;12187:6;12125:75;:::i;:::-;-1:-1:-1;12225:2:69;12216:12;;11580:674;-1:-1:-1;;;;11580:674:69:o;12260:125::-;12326:7;12355:24;12373:5;12355:24;:::i;12391:180::-;12493:53;12540:5;12493:53;:::i;12577:201::-;12688:13;;12710:62;12688:13;12710:62;:::i;12784:409::-;12883:6;12932:2;12920:9;12911:7;12907:23;12903:32;12900:119;;;12938:79;1034:7005:53;;;12938:79:69;13058:1;13083:93;13168:7;13148:9;13083:93;:::i;13199:143::-;13281:13;;13303:33;13281:13;13303:33;:::i;13348:351::-;13418:6;13467:2;13455:9;13446:7;13442:23;13438:32;13435:119;;;13473:79;1034:7005:53;;;13473:79:69;13593:1;13618:64;13674:7;13654:9;13618:64;:::i;13705:332::-;13864:2;13849:18;;13877:71;13853:9;13921:6;13877:71;:::i;:::-;13958:72;14026:2;14015:9;14011:18;14002:6;13958:72;:::i;:::-;13705:332;;;;;:::o;14043:553::-;14258:3;14243:19;;14272:71;14247:9;14316:6;14272:71;:::i;:::-;14353:72;14421:2;14410:9;14406:18;14397:6;14353:72;:::i;:::-;14435;14503:2;14492:9;14488:18;14479:6;14435:72;:::i;:::-;14517;14585:2;14574:9;14570:18;14561:6;14517:72;:::i;:::-;14043:553;;;;;;;:::o;14841:366::-;15068:2;6943:19;;14983:3;6995:4;6986:14;;14742:34;14719:58;;-1:-1:-1;;;14806:2:69;14794:15;;14787:41;14997:74;-1:-1:-1;15080:93:69;14602:233;15213:419;15417:2;15430:47;;;15402:18;;15494:131;15402:18;15494:131;:::i;15821:154::-;15877:9;15804:4;15793:16;;15910:59;15729:86;15981:143;16074:43;16111:5;16074:43;:::i;16130:234::-;16267:2;16252:18;;16280:77;16256:9;16330:6;16280:77;:::i;16930:419::-;17134:2;17147:47;;;17119:18;;;6943:19;;;16510:34;6986:14;;;16487:58;16906:12;;;17211:131;16558:366;17585;17812:2;6943:19;;17727:3;6995:4;6986:14;;17495:34;17472:58;;-1:-1:-1;;;17559:2:69;17547:15;;17540:32;17741:74;-1:-1:-1;17824:93:69;17355:224;17957:419;18161:2;18174:47;;;18146:18;;18238:131;18146:18;18238:131;:::i;19395:116::-;19369:13;;19362:21;19465;19299:90;19517:137;19596:13;;19618:30;19596:13;19618:30;:::i;19660:345::-;19727:6;19776:2;19764:9;19755:7;19751:23;19747:32;19744:119;;;19782:79;1034:7005:53;;;19782:79:69;19902:1;19927:61;19980:7;19960:9;19927:61;:::i;20011:533::-;20218:2;20203:18;;20231:71;20207:9;20275:6;20231:71;:::i;:::-;20312:72;20380:2;20369:9;20365:18;20356:6;20312:72;:::i;:::-;20431:9;20425:4;20421:20;20416:2;20405:9;20401:18;20394:48;20459:78;20532:4;20523:6;20459:78;:::i;20777:366::-;21004:2;6943:19;;20919:3;6995:4;6986:14;;20690:34;20667:58;;-1:-1:-1;;;20754:2:69;20742:15;;20735:29;20933:74;-1:-1:-1;21016:93:69;20550:221;21149:419;21353:2;21366:47;;;21338:18;;21430:131;21338:18;21430:131;:::i;21574:332::-;21733:2;21718:18;;21746:71;21722:9;21790:6;21746:71;:::i;:::-;21827:72;21895:2;21884:9;21880:18;21871:6;21827:72;:::i;22148:366::-;22375:2;6943:19;;22290:3;6995:4;6986:14;;22052:34;22029:58;;-1:-1:-1;;;22116:2:69;22104:15;;22097:38;22304:74;-1:-1:-1;22387:93:69;21912:230;22520:419;22724:2;22737:47;;;22709:18;;22801:131;22709:18;22801:131;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"1709000","executionCost":"31446","totalCost":"1740446"},"external":{"SALT()":"361","acceptOwnership()":"infinite","accessControlManager()":"infinite","beacon()":"infinite","computeVaultAddress(address)":"infinite","createERC4626(address)":"infinite","createdVaults(address)":"infinite","initialize(address,address,address,address,uint256)":"infinite","maxLoopsLimit()":"2394","owner()":"infinite","pendingOwner()":"infinite","poolRegistry()":"infinite","renounceOwnership()":"infinite","rewardRecipient()":"infinite","setAccessControlManager(address)":"infinite","setMaxLoopsLimit(uint256)":"infinite","setRewardRecipient(address)":"infinite","transferOwnership(address)":"infinite"}},"methodIdentifiers":{"SALT()":"ba9a91a5","acceptOwnership()":"79ba5097","accessControlManager()":"b4a0bdf3","beacon()":"59659e90","computeVaultAddress(address)":"a9e50471","createERC4626(address)":"abeccaa4","createdVaults(address)":"b599410a","initialize(address,address,address,address,uint256)":"f7013ef6","maxLoopsLimit()":"be26317e","owner()":"8da5cb5b","pendingOwner()":"e30c3978","poolRegistry()":"afcff50f","renounceOwnership()":"715018a6","rewardRecipient()":"17f33340","setAccessControlManager(address)":"0e32cb86","setMaxLoopsLimit(uint256)":"80d45a2d","setRewardRecipient(address)":"e521136f","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loopsLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredLoops\",\"type\":\"uint256\"}],\"name\":\"MaxLoopsLimitExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"calledContract\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"methodSignature\",\"type\":\"string\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VenusERC4626Factory__ERC4626AlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VenusERC4626Factory__InvalidVToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract VTokenInterface\",\"name\":\"vToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract ERC4626Upgradeable\",\"name\":\"vault\",\"type\":\"address\"}],\"name\":\"CreateERC4626\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldMaxLoopsLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newmaxLoopsLimit\",\"type\":\"uint256\"}],\"name\":\"MaxLoopsLimitUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAccessControlManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAccessControlManager\",\"type\":\"address\"}],\"name\":\"NewAccessControlManager\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRecipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRecipient\",\"type\":\"address\"}],\"name\":\"RewardRecipientUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SALT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"accessControlManager\",\"outputs\":[{\"internalType\":\"contract IAccessControlManagerV8\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"beacon\",\"outputs\":[{\"internalType\":\"contract UpgradeableBeacon\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"}],\"name\":\"computeVaultAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"}],\"name\":\"createERC4626\",\"outputs\":[{\"internalType\":\"contract ERC4626Upgradeable\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken\",\"type\":\"address\"}],\"name\":\"createdVaults\",\"outputs\":[{\"internalType\":\"contract ERC4626Upgradeable\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"accessControlManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardRecipientAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"venusERC4626Implementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"loopsLimitNumber\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxLoopsLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolRegistry\",\"outputs\":[{\"internalType\":\"contract PoolRegistryInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"accessControlManager_\",\"type\":\"address\"}],\"name\":\"setAccessControlManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loopsLimit\",\"type\":\"uint256\"}],\"name\":\"setMaxLoopsLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRecipient\",\"type\":\"address\"}],\"name\":\"setRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"CreateERC4626(address,address)\":{\"params\":{\"vToken\":\"The vToken used by the vault\",\"vault\":\"The vault that was created\"}},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RewardRecipientUpdated(address,address)\":{\"params\":{\"newRecipient\":\"The new reward recipient address.\",\"oldRecipient\":\"The previous reward recipient address.\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"computeVaultAddress(address)\":{\"params\":{\"vToken\":\"The vToken address\"},\"returns\":{\"_0\":\"The precomputed vault address\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createERC4626(address)\":{\"custom:error\":\"ZeroAddressNotAllowed is thrown when the vToken address is zeroVenusERC4626Factory__InvalidVToken is thrown when the provided vToken is not supported by the poolRegistryVenusERC4626Factory__ERC4626AlreadyExists is thrown when this factory already created a VenusERC4626 for the provided vToken\",\"custom:event\":\"CreateERC4626 is emitted when the ERC4626 wrapper is created\",\"params\":{\"vToken\":\"The vToken address to create the vault\"},\"returns\":{\"vault\":\"The deployed VenusERC4626 vault\"}},\"initialize(address,address,address,address,uint256)\":{\"params\":{\"accessControlManager\":\"Address of the ACM contract\",\"loopsLimitNumber\":\"The loops limit for the MaxLoopsLimit helper\",\"poolRegistryAddress\":\"Address of the Pool Registry contract\",\"rewardRecipientAddress\":\"Reward recipient address\",\"venusERC4626Implementation\":\"Address of the VenusERC4626 implementation contract\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setAccessControlManager(address)\":{\"custom:access\":\"Only Governance\",\"custom:event\":\"Emits NewAccessControlManager event\",\"details\":\"Admin function to set address of AccessControlManager\",\"params\":{\"accessControlManager_\":\"The new address of the AccessControlManager\"}},\"setMaxLoopsLimit(uint256)\":{\"custom:access\":\"Controlled by ACM\",\"custom:event\":\"Emits MaxLoopsLimitUpdated event on success\",\"params\":{\"loopsLimit\":\"Number of loops limit\"}},\"setRewardRecipient(address)\":{\"custom:access\":\"Controlled by ACM\",\"custom:error\":\"ZeroAddressNotAllowed is thrown when the new recipient address is zero\",\"custom:event\":\"RewardRecipientUpdated is emitted when the reward recipient address is updated\",\"params\":{\"newRecipient\":\"The address of the new reward recipient\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"}},\"title\":\"VenusERC4626Factory\",\"version\":1},\"userdoc\":{\"errors\":{\"MaxLoopsLimitExceeded(uint256,uint256)\":[{\"notice\":\"Thrown an error on maxLoopsLimit exceeds for any loop\"}],\"Unauthorized(address,address,string)\":[{\"notice\":\"Thrown when the action is prohibited by AccessControlManager\"}],\"VenusERC4626Factory__ERC4626AlreadyExists()\":[{\"notice\":\"Thrown when a VenusERC4626 already exists for the provided vToken\"}],\"VenusERC4626Factory__InvalidVToken()\":[{\"notice\":\"Thrown when the provided vToken is not registered in PoolRegistry\"}],\"ZeroAddressNotAllowed()\":[{\"notice\":\"Thrown if the supplied address is a zero address where it is not allowed\"}]},\"events\":{\"CreateERC4626(address,address)\":{\"notice\":\"Emitted when a new ERC4626 vault has been created\"},\"MaxLoopsLimitUpdated(uint256,uint256)\":{\"notice\":\"Emitted when max loops limit is set\"},\"NewAccessControlManager(address,address)\":{\"notice\":\"Emitted when access control manager contract address is changed\"},\"RewardRecipientUpdated(address,address)\":{\"notice\":\"Emitted when the reward recipient address is updated.\"}},\"kind\":\"user\",\"methods\":{\"SALT()\":{\"notice\":\"A constant salt value used for deterministic contract deployment\"},\"accessControlManager()\":{\"notice\":\"Returns the address of the access control manager contract\"},\"beacon()\":{\"notice\":\"The beacon contract for VenusERC4626 proxies\"},\"computeVaultAddress(address)\":{\"notice\":\"Predicts the vault address for a given vToken\"},\"createERC4626(address)\":{\"notice\":\"Creates a VenusERC4626 vault for a given asset and comptroller\"},\"initialize(address,address,address,address,uint256)\":{\"notice\":\"Initializes the contract\"},\"poolRegistry()\":{\"notice\":\"The Pool Registry contract\"},\"rewardRecipient()\":{\"notice\":\"The address that will receive the liquidity mining rewards\"},\"setAccessControlManager(address)\":{\"notice\":\"Sets the address of AccessControlManager\"},\"setMaxLoopsLimit(uint256)\":{\"notice\":\"Set the limit for the loops can iterate to avoid the DOS\"},\"setRewardRecipient(address)\":{\"notice\":\"Sets a new reward recipient address\"}},\"notice\":\"Factory for creating VenusERC4626 contracts\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ERC4626/VenusERC4626Factory.sol\":\"VenusERC4626Factory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./OwnableUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership} and {acceptOwnership}.\\n *\\n * This module is used through inheritance. It will make available all functions\\n * from parent (Ownable).\\n */\\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\\n    address private _pendingOwner;\\n\\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\\n\\n    function __Ownable2Step_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable2Step_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Returns the address of the pending owner.\\n     */\\n    function pendingOwner() public view virtual returns (address) {\\n        return _pendingOwner;\\n    }\\n\\n    /**\\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\\n        _pendingOwner = newOwner;\\n        emit OwnershipTransferStarted(owner(), newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual override {\\n        delete _pendingOwner;\\n        super._transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev The new owner accepts the ownership transfer.\\n     */\\n    function acceptOwnership() public virtual {\\n        address sender = _msgSender();\\n        require(pendingOwner() == sender, \\\"Ownable2Step: caller is not the new owner\\\");\\n        _transferOwnership(sender);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x9140dabc466abab21b48b72dbda26736b1183a310d0e677d3719d201df026510\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/interfaces/IERC4626Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC4626.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../token/ERC20/IERC20Upgradeable.sol\\\";\\nimport \\\"../token/ERC20/extensions/IERC20MetadataUpgradeable.sol\\\";\\n\\n/**\\n * @dev Interface of the ERC4626 \\\"Tokenized Vault Standard\\\", as defined in\\n * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\\n *\\n * _Available since v4.7._\\n */\\ninterface IERC4626Upgradeable is IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);\\n\\n    event Withdraw(\\n        address indexed sender,\\n        address indexed receiver,\\n        address indexed owner,\\n        uint256 assets,\\n        uint256 shares\\n    );\\n\\n    /**\\n     * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\\n     *\\n     * - MUST be an ERC-20 token contract.\\n     * - MUST NOT revert.\\n     */\\n    function asset() external view returns (address assetTokenAddress);\\n\\n    /**\\n     * @dev Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault.\\n     *\\n     * - SHOULD include any compounding that occurs from yield.\\n     * - MUST be inclusive of any fees that are charged against assets in the Vault.\\n     * - MUST NOT revert.\\n     */\\n    function totalAssets() external view returns (uint256 totalManagedAssets);\\n\\n    /**\\n     * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\\n     * scenario where all the conditions are met.\\n     *\\n     * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\\n     * - MUST NOT show any variations depending on the caller.\\n     * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the\\n     * \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and\\n     * from.\\n     */\\n    function convertToShares(uint256 assets) external view returns (uint256 shares);\\n\\n    /**\\n     * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\\n     * scenario where all the conditions are met.\\n     *\\n     * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\\n     * - MUST NOT show any variations depending on the caller.\\n     * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the\\n     * \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and\\n     * from.\\n     */\\n    function convertToAssets(uint256 shares) external view returns (uint256 assets);\\n\\n    /**\\n     * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\\n     * through a deposit call.\\n     *\\n     * - MUST return a limited value if receiver is subject to some deposit limit.\\n     * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\\n     * - MUST NOT revert.\\n     */\\n    function maxDeposit(address receiver) external view returns (uint256 maxAssets);\\n\\n    /**\\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\\n     * current on-chain conditions.\\n     *\\n     * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\\n     *   call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\\n     *   in the same transaction.\\n     * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\\n     *   deposit would be accepted, regardless if the user has enough tokens approved, etc.\\n     * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\\n     * share price or some other type of condition, meaning the depositor will lose assets by depositing.\\n     */\\n    function previewDeposit(uint256 assets) external view returns (uint256 shares);\\n\\n    /**\\n     * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\\n     *\\n     * - MUST emit the Deposit event.\\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\\n     *   deposit execution, and are accounted for during deposit.\\n     * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\\n     *   approving enough underlying tokens to the Vault contract, etc).\\n     *\\n     * NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\\n     */\\n    function deposit(uint256 assets, address receiver) external returns (uint256 shares);\\n\\n    /**\\n     * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\\n     * - MUST return a limited value if receiver is subject to some mint limit.\\n     * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\\n     * - MUST NOT revert.\\n     */\\n    function maxMint(address receiver) external view returns (uint256 maxShares);\\n\\n    /**\\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\\n     * current on-chain conditions.\\n     *\\n     * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\\n     *   in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\\n     *   same transaction.\\n     * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\\n     *   would be accepted, regardless if the user has enough tokens approved, etc.\\n     * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\\n     * share price or some other type of condition, meaning the depositor will lose assets by minting.\\n     */\\n    function previewMint(uint256 shares) external view returns (uint256 assets);\\n\\n    /**\\n     * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\\n     *\\n     * - MUST emit the Deposit event.\\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\\n     *   execution, and are accounted for during mint.\\n     * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\\n     *   approving enough underlying tokens to the Vault contract, etc).\\n     *\\n     * NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\\n     */\\n    function mint(uint256 shares, address receiver) external returns (uint256 assets);\\n\\n    /**\\n     * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\\n     * Vault, through a withdraw call.\\n     *\\n     * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\\n     * - MUST NOT revert.\\n     */\\n    function maxWithdraw(address owner) external view returns (uint256 maxAssets);\\n\\n    /**\\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\\n     * given current on-chain conditions.\\n     *\\n     * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\\n     *   call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\\n     *   called\\n     *   in the same transaction.\\n     * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\\n     *   the withdrawal would be accepted, regardless if the user has enough shares, etc.\\n     * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\\n     * share price or some other type of condition, meaning the depositor will lose assets by depositing.\\n     */\\n    function previewWithdraw(uint256 assets) external view returns (uint256 shares);\\n\\n    /**\\n     * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\\n     *\\n     * - MUST emit the Withdraw event.\\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\\n     *   withdraw execution, and are accounted for during withdraw.\\n     * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\\n     *   not having enough shares, etc).\\n     *\\n     * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\\n     * Those methods should be performed separately.\\n     */\\n    function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);\\n\\n    /**\\n     * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\\n     * through a redeem call.\\n     *\\n     * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\\n     * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\\n     * - MUST NOT revert.\\n     */\\n    function maxRedeem(address owner) external view returns (uint256 maxShares);\\n\\n    /**\\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\\n     * given current on-chain conditions.\\n     *\\n     * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\\n     *   in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\\n     *   same transaction.\\n     * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\\n     *   redemption would be accepted, regardless if the user has enough shares, etc.\\n     * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\\n     * share price or some other type of condition, meaning the depositor will lose assets by redeeming.\\n     */\\n    function previewRedeem(uint256 shares) external view returns (uint256 assets);\\n\\n    /**\\n     * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\\n     *\\n     * - MUST emit the Withdraw event.\\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\\n     *   redeem execution, and are accounted for during redeem.\\n     * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\\n     *   not having enough shares, etc).\\n     *\\n     * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\\n     * Those methods should be performed separately.\\n     */\\n    function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);\\n}\\n\",\"keccak256\":\"0xf867351fb48f5c0e3b45f085ce60f374b785417f84370cb2ffb57f421931e7eb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuardUpgradeable is Initializable {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    function __ReentrancyGuard_init() internal onlyInitializing {\\n        __ReentrancyGuard_init_unchained();\\n    }\\n\\n    function __ReentrancyGuard_init_unchained() internal onlyInitializing {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Returns true if the reentrancy guard is currently set to \\\"entered\\\", which indicates there is a\\n     * `nonReentrant` function in the call stack.\\n     */\\n    function _reentrancyGuardEntered() internal view returns (bool) {\\n        return _status == _ENTERED;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2025ccf05f6f1f2fd4e078e552836f525a1864e3854ed555047cd732320ab29b\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xa9311aeb22f459e57d4dac77ee76cf43fb28ad3215278456211b5852b0e9e970\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/ERC4626.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../utils/SafeERC20Upgradeable.sol\\\";\\nimport \\\"../../../interfaces/IERC4626Upgradeable.sol\\\";\\nimport \\\"../../../utils/math/MathUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the ERC4626 \\\"Tokenized Vault Standard\\\" as defined in\\n * https://eips.ethereum.org/EIPS/eip-4626[EIP-4626].\\n *\\n * This extension allows the minting and burning of \\\"shares\\\" (represented using the ERC20 inheritance) in exchange for\\n * underlying \\\"assets\\\" through standardized {deposit}, {mint}, {redeem} and {burn} workflows. This contract extends\\n * the ERC20 standard. Any additional extensions included along it would affect the \\\"shares\\\" token represented by this\\n * contract and not the \\\"assets\\\" token which is an independent contract.\\n *\\n * [CAUTION]\\n * ====\\n * In empty (or nearly empty) ERC-4626 vaults, deposits are at high risk of being stolen through frontrunning\\n * with a \\\"donation\\\" to the vault that inflates the price of a share. This is variously known as a donation or inflation\\n * attack and is essentially a problem of slippage. Vault deployers can protect against this attack by making an initial\\n * deposit of a non-trivial amount of the asset, such that price manipulation becomes infeasible. Withdrawals may\\n * similarly be affected by slippage. Users can protect against this attack as well as unexpected slippage in general by\\n * verifying the amount received is as expected, using a wrapper that performs these checks such as\\n * https://github.com/fei-protocol/ERC4626#erc4626router-and-base[ERC4626Router].\\n *\\n * Since v4.9, this implementation uses virtual assets and shares to mitigate that risk. The `_decimalsOffset()`\\n * corresponds to an offset in the decimal representation between the underlying asset's decimals and the vault\\n * decimals. This offset also determines the rate of virtual shares to virtual assets in the vault, which itself\\n * determines the initial exchange rate. While not fully preventing the attack, analysis shows that the default offset\\n * (0) makes it non-profitable, as a result of the value being captured by the virtual shares (out of the attacker's\\n * donation) matching the attacker's expected gains. With a larger offset, the attack becomes orders of magnitude more\\n * expensive than it is profitable. More details about the underlying math can be found\\n * xref:erc4626.adoc#inflation-attack[here].\\n *\\n * The drawback of this approach is that the virtual shares do capture (a very small) part of the value being accrued\\n * to the vault. Also, if the vault experiences losses, the users try to exit the vault, the virtual shares and assets\\n * will cause the first user to exit to experience reduced losses in detriment to the last users that will experience\\n * bigger losses. Developers willing to revert back to the pre-v4.9 behavior just need to override the\\n * `_convertToShares` and `_convertToAssets` functions.\\n *\\n * To learn more, check out our xref:ROOT:erc4626.adoc[ERC-4626 guide].\\n * ====\\n *\\n * _Available since v4.7._\\n */\\nabstract contract ERC4626Upgradeable is Initializable, ERC20Upgradeable, IERC4626Upgradeable {\\n    using MathUpgradeable for uint256;\\n\\n    IERC20Upgradeable private _asset;\\n    uint8 private _underlyingDecimals;\\n\\n    /**\\n     * @dev Set the underlying asset contract. This must be an ERC20-compatible contract (ERC20 or ERC777).\\n     */\\n    function __ERC4626_init(IERC20Upgradeable asset_) internal onlyInitializing {\\n        __ERC4626_init_unchained(asset_);\\n    }\\n\\n    function __ERC4626_init_unchained(IERC20Upgradeable asset_) internal onlyInitializing {\\n        (bool success, uint8 assetDecimals) = _tryGetAssetDecimals(asset_);\\n        _underlyingDecimals = success ? assetDecimals : 18;\\n        _asset = asset_;\\n    }\\n\\n    /**\\n     * @dev Attempts to fetch the asset decimals. A return value of false indicates that the attempt failed in some way.\\n     */\\n    function _tryGetAssetDecimals(IERC20Upgradeable asset_) private view returns (bool, uint8) {\\n        (bool success, bytes memory encodedDecimals) = address(asset_).staticcall(\\n            abi.encodeWithSelector(IERC20MetadataUpgradeable.decimals.selector)\\n        );\\n        if (success && encodedDecimals.length >= 32) {\\n            uint256 returnedDecimals = abi.decode(encodedDecimals, (uint256));\\n            if (returnedDecimals <= type(uint8).max) {\\n                return (true, uint8(returnedDecimals));\\n            }\\n        }\\n        return (false, 0);\\n    }\\n\\n    /**\\n     * @dev Decimals are computed by adding the decimal offset on top of the underlying asset's decimals. This\\n     * \\\"original\\\" value is cached during construction of the vault contract. If this read operation fails (e.g., the\\n     * asset has not been created yet), a default of 18 is used to represent the underlying asset's decimals.\\n     *\\n     * See {IERC20Metadata-decimals}.\\n     */\\n    function decimals() public view virtual override(IERC20MetadataUpgradeable, ERC20Upgradeable) returns (uint8) {\\n        return _underlyingDecimals + _decimalsOffset();\\n    }\\n\\n    /** @dev See {IERC4626-asset}. */\\n    function asset() public view virtual override returns (address) {\\n        return address(_asset);\\n    }\\n\\n    /** @dev See {IERC4626-totalAssets}. */\\n    function totalAssets() public view virtual override returns (uint256) {\\n        return _asset.balanceOf(address(this));\\n    }\\n\\n    /** @dev See {IERC4626-convertToShares}. */\\n    function convertToShares(uint256 assets) public view virtual override returns (uint256) {\\n        return _convertToShares(assets, MathUpgradeable.Rounding.Down);\\n    }\\n\\n    /** @dev See {IERC4626-convertToAssets}. */\\n    function convertToAssets(uint256 shares) public view virtual override returns (uint256) {\\n        return _convertToAssets(shares, MathUpgradeable.Rounding.Down);\\n    }\\n\\n    /** @dev See {IERC4626-maxDeposit}. */\\n    function maxDeposit(address) public view virtual override returns (uint256) {\\n        return type(uint256).max;\\n    }\\n\\n    /** @dev See {IERC4626-maxMint}. */\\n    function maxMint(address) public view virtual override returns (uint256) {\\n        return type(uint256).max;\\n    }\\n\\n    /** @dev See {IERC4626-maxWithdraw}. */\\n    function maxWithdraw(address owner) public view virtual override returns (uint256) {\\n        return _convertToAssets(balanceOf(owner), MathUpgradeable.Rounding.Down);\\n    }\\n\\n    /** @dev See {IERC4626-maxRedeem}. */\\n    function maxRedeem(address owner) public view virtual override returns (uint256) {\\n        return balanceOf(owner);\\n    }\\n\\n    /** @dev See {IERC4626-previewDeposit}. */\\n    function previewDeposit(uint256 assets) public view virtual override returns (uint256) {\\n        return _convertToShares(assets, MathUpgradeable.Rounding.Down);\\n    }\\n\\n    /** @dev See {IERC4626-previewMint}. */\\n    function previewMint(uint256 shares) public view virtual override returns (uint256) {\\n        return _convertToAssets(shares, MathUpgradeable.Rounding.Up);\\n    }\\n\\n    /** @dev See {IERC4626-previewWithdraw}. */\\n    function previewWithdraw(uint256 assets) public view virtual override returns (uint256) {\\n        return _convertToShares(assets, MathUpgradeable.Rounding.Up);\\n    }\\n\\n    /** @dev See {IERC4626-previewRedeem}. */\\n    function previewRedeem(uint256 shares) public view virtual override returns (uint256) {\\n        return _convertToAssets(shares, MathUpgradeable.Rounding.Down);\\n    }\\n\\n    /** @dev See {IERC4626-deposit}. */\\n    function deposit(uint256 assets, address receiver) public virtual override returns (uint256) {\\n        require(assets <= maxDeposit(receiver), \\\"ERC4626: deposit more than max\\\");\\n\\n        uint256 shares = previewDeposit(assets);\\n        _deposit(_msgSender(), receiver, assets, shares);\\n\\n        return shares;\\n    }\\n\\n    /** @dev See {IERC4626-mint}.\\n     *\\n     * As opposed to {deposit}, minting is allowed even if the vault is in a state where the price of a share is zero.\\n     * In this case, the shares will be minted without requiring any assets to be deposited.\\n     */\\n    function mint(uint256 shares, address receiver) public virtual override returns (uint256) {\\n        require(shares <= maxMint(receiver), \\\"ERC4626: mint more than max\\\");\\n\\n        uint256 assets = previewMint(shares);\\n        _deposit(_msgSender(), receiver, assets, shares);\\n\\n        return assets;\\n    }\\n\\n    /** @dev See {IERC4626-withdraw}. */\\n    function withdraw(uint256 assets, address receiver, address owner) public virtual override returns (uint256) {\\n        require(assets <= maxWithdraw(owner), \\\"ERC4626: withdraw more than max\\\");\\n\\n        uint256 shares = previewWithdraw(assets);\\n        _withdraw(_msgSender(), receiver, owner, assets, shares);\\n\\n        return shares;\\n    }\\n\\n    /** @dev See {IERC4626-redeem}. */\\n    function redeem(uint256 shares, address receiver, address owner) public virtual override returns (uint256) {\\n        require(shares <= maxRedeem(owner), \\\"ERC4626: redeem more than max\\\");\\n\\n        uint256 assets = previewRedeem(shares);\\n        _withdraw(_msgSender(), receiver, owner, assets, shares);\\n\\n        return assets;\\n    }\\n\\n    /**\\n     * @dev Internal conversion function (from assets to shares) with support for rounding direction.\\n     */\\n    function _convertToShares(uint256 assets, MathUpgradeable.Rounding rounding) internal view virtual returns (uint256) {\\n        return assets.mulDiv(totalSupply() + 10 ** _decimalsOffset(), totalAssets() + 1, rounding);\\n    }\\n\\n    /**\\n     * @dev Internal conversion function (from shares to assets) with support for rounding direction.\\n     */\\n    function _convertToAssets(uint256 shares, MathUpgradeable.Rounding rounding) internal view virtual returns (uint256) {\\n        return shares.mulDiv(totalAssets() + 1, totalSupply() + 10 ** _decimalsOffset(), rounding);\\n    }\\n\\n    /**\\n     * @dev Deposit/mint common workflow.\\n     */\\n    function _deposit(address caller, address receiver, uint256 assets, uint256 shares) internal virtual {\\n        // If _asset is ERC777, `transferFrom` can trigger a reentrancy BEFORE the transfer happens through the\\n        // `tokensToSend` hook. On the other hand, the `tokenReceived` hook, that is triggered after the transfer,\\n        // calls the vault, which is assumed not malicious.\\n        //\\n        // Conclusion: we need to do the transfer before we mint so that any reentrancy would happen before the\\n        // assets are transferred and before the shares are minted, which is a valid state.\\n        // slither-disable-next-line reentrancy-no-eth\\n        SafeERC20Upgradeable.safeTransferFrom(_asset, caller, address(this), assets);\\n        _mint(receiver, shares);\\n\\n        emit Deposit(caller, receiver, assets, shares);\\n    }\\n\\n    /**\\n     * @dev Withdraw/redeem common workflow.\\n     */\\n    function _withdraw(\\n        address caller,\\n        address receiver,\\n        address owner,\\n        uint256 assets,\\n        uint256 shares\\n    ) internal virtual {\\n        if (caller != owner) {\\n            _spendAllowance(owner, caller, shares);\\n        }\\n\\n        // If _asset is ERC777, `transfer` can trigger a reentrancy AFTER the transfer happens through the\\n        // `tokensReceived` hook. On the other hand, the `tokensToSend` hook, that is triggered before the transfer,\\n        // calls the vault, which is assumed not malicious.\\n        //\\n        // Conclusion: we need to do the transfer after the burn so that any reentrancy would happen after the\\n        // shares are burned and after the assets are transferred, which is a valid state.\\n        _burn(owner, shares);\\n        SafeERC20Upgradeable.safeTransfer(_asset, receiver, assets);\\n\\n        emit Withdraw(caller, receiver, owner, assets, shares);\\n    }\\n\\n    function _decimalsOffset() internal view virtual returns (uint8) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x48a2c0285b0ce8bf768b780142e82ccf08208b343439770464f2cc46c0cef3f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * ==== Security Considerations\\n *\\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\\n * generally recommended is:\\n *\\n * ```solidity\\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\\n *     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\\n *     doThing(..., value);\\n * }\\n *\\n * function doThing(..., uint256 value) public {\\n *     token.safeTransferFrom(msg.sender, address(this), value);\\n *     ...\\n * }\\n * ```\\n *\\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\\n * {SafeERC20-safeTransferFrom}).\\n *\\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\\n * contracts should have entry points that don't rely on permit.\\n */\\ninterface IERC20PermitUpgradeable {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     *\\n     * CAUTION: See Security Considerations above.\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x07e881de3b9f6d2c07909f193f24b96c7fe4ea60013260f3f25aecd8bab3c2f8\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\nimport \\\"../extensions/IERC20PermitUpgradeable.sol\\\";\\nimport \\\"../../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20Upgradeable {\\n    using AddressUpgradeable for address;\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransfer(IERC20Upgradeable token, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    /**\\n     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeIncreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        uint256 oldAllowance = token.allowance(address(this), spender);\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));\\n    }\\n\\n    /**\\n     * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeDecreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));\\n        }\\n    }\\n\\n    /**\\n     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n     * to be set to zero before setting it to a non-zero value, such as USDT.\\n     */\\n    function forceApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);\\n\\n        if (!_callOptionalReturnBool(token, approvalCall)) {\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));\\n            _callOptionalReturn(token, approvalCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.\\n     * Revert on invalid signature.\\n     */\\n    function safePermit(\\n        IERC20PermitUpgradeable token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20Upgradeable token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        require(returndata.length == 0 || abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     *\\n     * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\\n     */\\n    function _callOptionalReturnBool(IERC20Upgradeable token, bytes memory data) private returns (bool) {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\\n        // and not revert is the subcall reverts.\\n\\n        (bool success, bytes memory returndata) = address(token).call(data);\\n        return\\n            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && AddressUpgradeable.isContract(address(token));\\n    }\\n}\\n\",\"keccak256\":\"0x23b997be73d3dd46885262704f0f8cfc7273fdadfe303d37969a9561373972b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary MathUpgradeable {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n                // The surrounding unchecked block does not change this fact.\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10 ** 64) {\\n                value /= 10 ** 64;\\n                result += 64;\\n            }\\n            if (value >= 10 ** 32) {\\n                value /= 10 ** 32;\\n                result += 32;\\n            }\\n            if (value >= 10 ** 16) {\\n                value /= 10 ** 16;\\n                result += 16;\\n            }\\n            if (value >= 10 ** 8) {\\n                value /= 10 ** 8;\\n                result += 8;\\n            }\\n            if (value >= 10 ** 4) {\\n                value /= 10 ** 4;\\n                result += 4;\\n            }\\n            if (value >= 10 ** 2) {\\n                value /= 10 ** 2;\\n                result += 2;\\n            }\\n            if (value >= 10 ** 1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2bc0007987c229ae7624eb29be6a9b84f6a6a5872f76248b15208b131ea41c4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n    /**\\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n     *\\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n     * {RoleAdminChanged} not being emitted signaling this.\\n     *\\n     * _Available since v3.1._\\n     */\\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n    /**\\n     * @dev Emitted when `account` is granted `role`.\\n     *\\n     * `sender` is the account that originated the contract call, an admin role\\n     * bearer except when using {AccessControl-_setupRole}.\\n     */\\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Emitted when `account` is revoked `role`.\\n     *\\n     * `sender` is the account that originated the contract call:\\n     *   - if using `revokeRole`, it is the admin role bearer\\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n     */\\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Returns `true` if `account` has been granted `role`.\\n     */\\n    function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n    /**\\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\\n     * {revokeRole}.\\n     *\\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n     */\\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n    /**\\n     * @dev Grants `role` to `account`.\\n     *\\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function grantRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from `account`.\\n     *\\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function revokeRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from the calling account.\\n     *\\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n     * purpose is to provide a mechanism for accounts to lose their privileges\\n     * if they are compromised (such as when a trusted device is misplaced).\\n     *\\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must be `account`.\\n     */\\n    function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\",\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC1967.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC1967.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\\n *\\n * _Available since v4.8.3._\\n */\\ninterface IERC1967 {\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Emitted when the admin account has changed.\\n     */\\n    event AdminChanged(address previousAdmin, address newAdmin);\\n\\n    /**\\n     * @dev Emitted when the beacon is changed.\\n     */\\n    event BeaconUpgraded(address indexed beacon);\\n}\\n\",\"keccak256\":\"0x3cbef5ebc24b415252e2f8c0c9254555d30d9f085603b4b80d9b5ed20ab87e90\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/IERC1967.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract ERC1967Upgrade is IERC1967 {\\n    // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n    /**\\n     * @dev Storage slot with the address of the current implementation.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _getImplementation() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 implementation slot.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeTo(address newImplementation) internal {\\n        _setImplementation(newImplementation);\\n        emit Upgraded(newImplementation);\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCall(address newImplementation, bytes memory data, bool forceCall) internal {\\n        _upgradeTo(newImplementation);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(newImplementation, data);\\n        }\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCallUUPS(address newImplementation, bytes memory data, bool forceCall) internal {\\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\\n        if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n            _setImplementation(newImplementation);\\n        } else {\\n            try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n                require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n            } catch {\\n                revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n            }\\n            _upgradeToAndCall(newImplementation, data, forceCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Storage slot with the admin of the contract.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _getAdmin() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 admin slot.\\n     */\\n    function _setAdmin(address newAdmin) private {\\n        require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {AdminChanged} event.\\n     */\\n    function _changeAdmin(address newAdmin) internal {\\n        emit AdminChanged(_getAdmin(), newAdmin);\\n        _setAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n     */\\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n    /**\\n     * @dev Returns the current beacon.\\n     */\\n    function _getBeacon() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\\n     */\\n    function _setBeacon(address newBeacon) private {\\n        require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n        require(\\n            Address.isContract(IBeacon(newBeacon).implementation()),\\n            \\\"ERC1967: beacon implementation is not a contract\\\"\\n        );\\n        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n    }\\n\\n    /**\\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n     *\\n     * Emits a {BeaconUpgraded} event.\\n     */\\n    function _upgradeBeaconToAndCall(address newBeacon, bytes memory data, bool forceCall) internal {\\n        _setBeacon(newBeacon);\\n        emit BeaconUpgraded(newBeacon);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3b21ae06bf5957f73fa16754b0669c77b7abd8ba6c072d35c3281d446fdb86c2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n    /**\\n     * @dev Delegates the current call to `implementation`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _delegate(address implementation) internal virtual {\\n        assembly {\\n            // Copy msg.data. We take full control of memory in this inline assembly\\n            // block because it will not return to Solidity code. We overwrite the\\n            // Solidity scratch pad at memory position 0.\\n            calldatacopy(0, 0, calldatasize())\\n\\n            // Call the implementation.\\n            // out and outsize are 0 because we don't know the size yet.\\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n            // Copy the returned data.\\n            returndatacopy(0, 0, returndatasize())\\n\\n            switch result\\n            // delegatecall returns 0 on error.\\n            case 0 {\\n                revert(0, returndatasize())\\n            }\\n            default {\\n                return(0, returndatasize())\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n     * and {_fallback} should delegate.\\n     */\\n    function _implementation() internal view virtual returns (address);\\n\\n    /**\\n     * @dev Delegates the current call to the address returned by `_implementation()`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _fallback() internal virtual {\\n        _beforeFallback();\\n        _delegate(_implementation());\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n     * function in the contract matches the call data.\\n     */\\n    fallback() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n     * is empty.\\n     */\\n    receive() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n     * call, or as part of the Solidity `fallback` or `receive` functions.\\n     *\\n     * If overridden should call `super._beforeFallback()`.\\n     */\\n    function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from an {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n    /**\\n     * @dev Initializes the proxy with `beacon`.\\n     *\\n     * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n     * will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity\\n     * constructor.\\n     *\\n     * Requirements:\\n     *\\n     * - `beacon` must be a contract with the interface {IBeacon}.\\n     */\\n    constructor(address beacon, bytes memory data) payable {\\n        _upgradeBeaconToAndCall(beacon, data, false);\\n    }\\n\\n    /**\\n     * @dev Returns the current beacon address.\\n     */\\n    function _beacon() internal view virtual returns (address) {\\n        return _getBeacon();\\n    }\\n\\n    /**\\n     * @dev Returns the current implementation address of the associated beacon.\\n     */\\n    function _implementation() internal view virtual override returns (address) {\\n        return IBeacon(_getBeacon()).implementation();\\n    }\\n\\n    /**\\n     * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n     *\\n     * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n     *\\n     * Requirements:\\n     *\\n     * - `beacon` must be a contract.\\n     * - The implementation returned by `beacon` must be a contract.\\n     */\\n    function _setBeacon(address beacon, bytes memory data) internal virtual {\\n        _upgradeBeaconToAndCall(beacon, data, false);\\n    }\\n}\\n\",\"keccak256\":\"0x85439e74ab467b6a23d45d32bdc9506cbc3760320289afd605f11638c4138e95\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {BeaconProxy} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n    address private _implementation;\\n\\n    /**\\n     * @dev Emitted when the implementation returned by the beacon is changed.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n     * beacon.\\n     */\\n    constructor(address implementation_) {\\n        _setImplementation(implementation_);\\n    }\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function implementation() public view virtual override returns (address) {\\n        return _implementation;\\n    }\\n\\n    /**\\n     * @dev Upgrades the beacon to a new implementation.\\n     *\\n     * Emits an {Upgraded} event.\\n     *\\n     * Requirements:\\n     *\\n     * - msg.sender must be the owner of the contract.\\n     * - `newImplementation` must be a contract.\\n     */\\n    function upgradeTo(address newImplementation) public virtual onlyOwner {\\n        _setImplementation(newImplementation);\\n        emit Upgraded(newImplementation);\\n    }\\n\\n    /**\\n     * @dev Sets the implementation contract address for this beacon\\n     *\\n     * Requirements:\\n     *\\n     * - `newImplementation` must be a contract.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n        _implementation = newImplementation;\\n    }\\n}\\n\",\"keccak256\":\"0x6ec71aef5659f3f74011169948d2fcda8c6599be5bb38f986380a8737f96cc0f\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\",\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```solidity\\n * contract ERC1967 {\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\n * _Available since v4.9 for `string`, `bytes`._\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    struct StringSlot {\\n        string value;\\n    }\\n\\n    struct BytesSlot {\\n        bytes value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\n     */\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\n     */\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := store.slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\n     */\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\n     */\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := store.slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\",\"license\":\"MIT\"},\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\n\\nimport \\\"./IAccessControlManagerV8.sol\\\";\\n\\n/**\\n * @title AccessControlledV8\\n * @author Venus\\n * @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\\n * to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\\n */\\nabstract contract AccessControlledV8 is Initializable, Ownable2StepUpgradeable {\\n    /// @notice Access control manager contract\\n    IAccessControlManagerV8 internal _accessControlManager;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when access control manager contract address is changed\\n    event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager);\\n\\n    /// @notice Thrown when the action is prohibited by AccessControlManager\\n    error Unauthorized(address sender, address calledContract, string methodSignature);\\n\\n    function __AccessControlled_init(address accessControlManager_) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n    }\\n\\n    function __AccessControlled_init_unchained(address accessControlManager_) internal onlyInitializing {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Sets the address of AccessControlManager\\n     * @dev Admin function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     * @custom:event Emits NewAccessControlManager event\\n     * @custom:access Only Governance\\n     */\\n    function setAccessControlManager(address accessControlManager_) external onlyOwner {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Returns the address of the access control manager contract\\n     */\\n    function accessControlManager() external view returns (IAccessControlManagerV8) {\\n        return _accessControlManager;\\n    }\\n\\n    /**\\n     * @dev Internal function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     */\\n    function _setAccessControlManager(address accessControlManager_) internal {\\n        require(address(accessControlManager_) != address(0), \\\"invalid acess control manager address\\\");\\n        address oldAccessControlManager = address(_accessControlManager);\\n        _accessControlManager = IAccessControlManagerV8(accessControlManager_);\\n        emit NewAccessControlManager(oldAccessControlManager, accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Reverts if the call is not allowed by AccessControlManager\\n     * @param signature Method signature\\n     */\\n    function _checkAccessAllowed(string memory signature) internal view {\\n        bool isAllowedToCall = _accessControlManager.isAllowedToCall(msg.sender, signature);\\n\\n        if (!isAllowedToCall) {\\n            revert Unauthorized(msg.sender, address(this), signature);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe0fd441c84ac907cabc88db69ef04f6d7532d770c7e6a1dfe6e7d6305debb49\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport \\\"@openzeppelin/contracts/access/IAccessControl.sol\\\";\\n\\n/**\\n * @title IAccessControlManagerV8\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\\n */\\ninterface IAccessControlManagerV8 is IAccessControl {\\n    function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n    function revokeCallPermission(\\n        address contractAddress,\\n        string calldata functionSig,\\n        address accountToRevoke\\n    ) external;\\n\\n    function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n    function hasPermission(\\n        address account,\\n        address contractAddress,\\n        string calldata functionSig\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xaa29b098440d0b3a131c5ecdf25ce548790c1b5ac7bf9b5c0264b6af6f7a1e0b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Comptroller.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\n\\nimport { ComptrollerInterface, Action } from \\\"./ComptrollerInterface.sol\\\";\\nimport { ComptrollerStorage } from \\\"./ComptrollerStorage.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"./MaxLoopsLimitHelper.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title Comptroller\\n * @author Venus\\n * @notice The Comptroller is designed to provide checks for all minting, redeeming, transferring, borrowing, lending, repaying, liquidating,\\n * and seizing done by the `vToken` contract. Each pool has one `Comptroller` checking these interactions across markets. When a user interacts\\n * with a given market by one of these main actions, a call is made to a corresponding hook in the associated `Comptroller`, which either allows\\n * or reverts the transaction. These hooks also update supply and borrow rewards as they are called. The comptroller holds the logic for assessing\\n * liquidity snapshots of an account via the collateral factor and liquidation threshold. This check determines the collateral needed for a borrow,\\n * as well as how much of a borrow may be liquidated. A user may borrow a portion of their collateral with the maximum amount determined by the\\n * markets collateral factor. However, if their borrowed amount exceeds an amount calculated using the market\\u2019s corresponding liquidation threshold,\\n * the borrow is eligible for liquidation.\\n *\\n * The `Comptroller` also includes two functions `liquidateAccount()` and `healAccount()`, which are meant to handle accounts that do not exceed\\n * the `minLiquidatableCollateral` for the `Comptroller`:\\n *\\n * - `healAccount()`: This function is called to seize all of a given user\\u2019s collateral, requiring the `msg.sender` repay a certain percentage\\n * of the debt calculated by `collateral/(borrows*liquidationIncentive)`. The function can only be called if the calculated percentage does not exceed\\n * 100%, because otherwise no `badDebt` would be created and `liquidateAccount()` should be used instead. The difference in the actual amount of debt\\n * and debt paid off is recorded as `badDebt` for each market, which can then be auctioned off for the risk reserves of the associated pool.\\n * - `liquidateAccount()`: This function can only be called if the collateral seized will cover all borrows of an account, as well as the liquidation\\n * incentive. Otherwise, the pool will incur bad debt, in which case the function `healAccount()` should be used instead. This function skips the logic\\n * verifying that the repay amount does not exceed the close factor.\\n */\\ncontract Comptroller is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    ComptrollerStorage,\\n    ComptrollerInterface,\\n    ExponentialNoError,\\n    MaxLoopsLimitHelper\\n{\\n    // PoolRegistry, immutable to save on gas\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    address public immutable poolRegistry;\\n\\n    /// @notice Emitted when an account enters a market\\n    event MarketEntered(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when an account exits a market\\n    event MarketExited(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when close factor is changed by admin\\n    event NewCloseFactor(uint256 oldCloseFactorMantissa, uint256 newCloseFactorMantissa);\\n\\n    /// @notice Emitted when a collateral factor is changed by admin\\n    event NewCollateralFactor(VToken vToken, uint256 oldCollateralFactorMantissa, uint256 newCollateralFactorMantissa);\\n\\n    /// @notice Emitted when liquidation threshold is changed by admin\\n    event NewLiquidationThreshold(\\n        VToken vToken,\\n        uint256 oldLiquidationThresholdMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    );\\n\\n    /// @notice Emitted when liquidation incentive is changed by admin\\n    event NewLiquidationIncentive(uint256 oldLiquidationIncentiveMantissa, uint256 newLiquidationIncentiveMantissa);\\n\\n    /// @notice Emitted when price oracle is changed\\n    event NewPriceOracle(ResilientOracleInterface oldPriceOracle, ResilientOracleInterface newPriceOracle);\\n\\n    /// @notice Emitted when an action is paused on a market\\n    event ActionPausedMarket(VToken vToken, Action action, bool pauseState);\\n\\n    /// @notice Emitted when borrow cap for a vToken is changed\\n    event NewBorrowCap(VToken indexed vToken, uint256 newBorrowCap);\\n\\n    /// @notice Emitted when the collateral threshold (in USD) for non-batch liquidations is changed\\n    event NewMinLiquidatableCollateral(uint256 oldMinLiquidatableCollateral, uint256 newMinLiquidatableCollateral);\\n\\n    /// @notice Emitted when supply cap for a vToken is changed\\n    event NewSupplyCap(VToken indexed vToken, uint256 newSupplyCap);\\n\\n    /// @notice Emitted when a rewards distributor is added\\n    event NewRewardsDistributor(address indexed rewardsDistributor, address indexed rewardToken);\\n\\n    /// @notice Emitted when a market is supported\\n    event MarketSupported(VToken vToken);\\n\\n    /// @notice Emitted when prime token contract address is changed\\n    event NewPrimeToken(IPrime oldPrimeToken, IPrime newPrimeToken);\\n\\n    /// @notice Emitted when forced liquidation is enabled or disabled for a market\\n    event IsForcedLiquidationEnabledUpdated(address indexed vToken, bool enable);\\n\\n    /// @notice Emitted when a market is unlisted\\n    event MarketUnlisted(address indexed vToken);\\n    /// @notice Emitted when the borrowing or redeeming delegate rights are updated for an account\\n    event DelegateUpdated(address indexed approver, address indexed delegate, bool approved);\\n\\n    /// @notice Thrown when collateral factor exceeds the upper bound\\n    error InvalidCollateralFactor();\\n\\n    /// @notice Thrown when liquidation threshold exceeds the collateral factor\\n    error InvalidLiquidationThreshold();\\n\\n    /// @notice Thrown when the action is only available to specific sender, but the real sender was different\\n    error UnexpectedSender(address expectedSender, address actualSender);\\n\\n    /// @notice Thrown when the oracle returns an invalid price for some asset\\n    error PriceError(address vToken);\\n\\n    /// @notice Thrown if VToken unexpectedly returned a nonzero error code while trying to get account snapshot\\n    error SnapshotError(address vToken, address user);\\n\\n    /// @notice Thrown when the market is not listed\\n    error MarketNotListed(address market);\\n\\n    /// @notice Thrown when a market has an unexpected comptroller\\n    error ComptrollerMismatch();\\n\\n    /// @notice Thrown when user is not member of market\\n    error MarketNotCollateral(address vToken, address user);\\n\\n    /// @notice Thrown when borrow action is not paused\\n    error BorrowActionNotPaused();\\n\\n    /// @notice Thrown when mint action is not paused\\n    error MintActionNotPaused();\\n\\n    /// @notice Thrown when redeem action is not paused\\n    error RedeemActionNotPaused();\\n\\n    /// @notice Thrown when repay action is not paused\\n    error RepayActionNotPaused();\\n\\n    /// @notice Thrown when seize action is not paused\\n    error SeizeActionNotPaused();\\n\\n    /// @notice Thrown when exit market action is not paused\\n    error ExitMarketActionNotPaused();\\n\\n    /// @notice Thrown when transfer action is not paused\\n    error TransferActionNotPaused();\\n\\n    /// @notice Thrown when enter market action is not paused\\n    error EnterMarketActionNotPaused();\\n\\n    /// @notice Thrown when liquidate action is not paused\\n    error LiquidateActionNotPaused();\\n\\n    /// @notice Thrown when borrow cap is not zero\\n    error BorrowCapIsNotZero();\\n\\n    /// @notice Thrown when supply cap is not zero\\n    error SupplyCapIsNotZero();\\n\\n    /// @notice Thrown when collateral factor is not zero\\n    error CollateralFactorIsNotZero();\\n\\n    /**\\n     * @notice Thrown during the liquidation if user's total collateral amount is lower than\\n     *   a predefined threshold. In this case only batch liquidations (either liquidateAccount\\n     *   or healAccount) are available.\\n     */\\n    error MinimalCollateralViolated(uint256 expectedGreaterThan, uint256 actual);\\n    error CollateralExceedsThreshold(uint256 expectedLessThanOrEqualTo, uint256 actual);\\n    error InsufficientCollateral(uint256 collateralToSeize, uint256 availableCollateral);\\n\\n    /// @notice Thrown when the account doesn't have enough liquidity to redeem or borrow\\n    error InsufficientLiquidity();\\n\\n    /// @notice Thrown when trying to liquidate a healthy account\\n    error InsufficientShortfall();\\n\\n    /// @notice Thrown when trying to repay more than allowed by close factor\\n    error TooMuchRepay();\\n\\n    /// @notice Thrown if the user is trying to exit a market in which they have an outstanding debt\\n    error NonzeroBorrowBalance();\\n\\n    /// @notice Thrown when trying to perform an action that is paused\\n    error ActionPaused(address market, Action action);\\n\\n    /// @notice Thrown when trying to add a market that is already listed\\n    error MarketAlreadyListed(address market);\\n\\n    /// @notice Thrown if the supply cap is exceeded\\n    error SupplyCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if the borrow cap is exceeded\\n    error BorrowCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if delegate approval status is already set to the requested value\\n    error DelegationStatusUnchanged();\\n\\n    /// @param poolRegistry_ Pool registry address\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    /// @custom:error ZeroAddressNotAllowed is thrown when pool registry address is zero\\n    constructor(address poolRegistry_) {\\n        ensureNonzeroAddress(poolRegistry_);\\n\\n        poolRegistry = poolRegistry_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @param loopLimit Limit for the loops can iterate to avoid the DOS\\n     * @param accessControlManager Access control manager contract address\\n     */\\n    function initialize(uint256 loopLimit, address accessControlManager) external initializer {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager);\\n\\n        _setMaxLoopsLimit(loopLimit);\\n    }\\n\\n    /**\\n     * @notice Add assets to be included in account liquidity calculation; enabling them to be used as collateral\\n     * @param vTokens The list of addresses of the vToken markets to be enabled\\n     * @return errors An array of NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketEntered is emitted for each market on success\\n     * @custom:error ActionPaused error is thrown if entering any of the markets is paused\\n     * @custom:error MarketNotListed error is thrown if any of the markets is not listed\\n     * @custom:access Not restricted\\n     */\\n    function enterMarkets(address[] memory vTokens) external override returns (uint256[] memory) {\\n        uint256 len = vTokens.length;\\n\\n        uint256[] memory results = new uint256[](len);\\n        for (uint256 i; i < len; ++i) {\\n            VToken vToken = VToken(vTokens[i]);\\n\\n            _addToMarket(vToken, msg.sender);\\n            results[i] = NO_ERROR;\\n        }\\n\\n        return results;\\n    }\\n\\n    /**\\n     * @notice Unlist a market by setting isListed to false\\n     * @dev Checks if all actions are paused, borrow/supply caps is set to 0 and collateral factor is to 0.\\n     * @param market The address of the market (token) to unlist\\n     * @return uint256 Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketUnlisted is emitted on success\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error BorrowActionNotPaused error is thrown if borrow action is not paused\\n     * @custom:error MintActionNotPaused error is thrown if mint action is not paused\\n     * @custom:error RedeemActionNotPaused error is thrown if redeem action is not paused\\n     * @custom:error RepayActionNotPaused error is thrown if repay action is not paused\\n     * @custom:error EnterMarketActionNotPaused error is thrown if enter market action is not paused\\n     * @custom:error LiquidateActionNotPaused error is thrown if liquidate action is not paused\\n     * @custom:error BorrowCapIsNotZero error is thrown if borrow cap is not zero\\n     * @custom:error SupplyCapIsNotZero error is thrown if supply cap is not zero\\n     * @custom:error CollateralFactorIsNotZero error is thrown if collateral factor is not zero\\n     */\\n    function unlistMarket(address market) external returns (uint256) {\\n        _checkAccessAllowed(\\\"unlistMarket(address)\\\");\\n\\n        Market storage _market = markets[market];\\n\\n        if (!_market.isListed) {\\n            revert MarketNotListed(market);\\n        }\\n\\n        if (!actionPaused(market, Action.BORROW)) {\\n            revert BorrowActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.MINT)) {\\n            revert MintActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REDEEM)) {\\n            revert RedeemActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REPAY)) {\\n            revert RepayActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.SEIZE)) {\\n            revert SeizeActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.ENTER_MARKET)) {\\n            revert EnterMarketActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.LIQUIDATE)) {\\n            revert LiquidateActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.TRANSFER)) {\\n            revert TransferActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.EXIT_MARKET)) {\\n            revert ExitMarketActionNotPaused();\\n        }\\n\\n        if (borrowCaps[market] != 0) {\\n            revert BorrowCapIsNotZero();\\n        }\\n\\n        if (supplyCaps[market] != 0) {\\n            revert SupplyCapIsNotZero();\\n        }\\n\\n        if (_market.collateralFactorMantissa != 0) {\\n            revert CollateralFactorIsNotZero();\\n        }\\n\\n        _market.isListed = false;\\n        emit MarketUnlisted(market);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Grants or revokes the borrowing or redeeming delegate rights to / from an account\\n     *  If allowed, the delegate will be able to borrow funds on behalf of the sender\\n     *  Upon a delegated borrow, the delegate will receive the funds, and the borrower\\n     *  will see the debt on their account\\n     *  Upon a delegated redeem, the delegate will receive the redeemed amount and the approver\\n     *  will see a deduction in his vToken balance\\n     * @param delegate The address to update the rights for\\n     * @param approved Whether to grant (true) or revoke (false) the borrowing or redeeming rights\\n     * @custom:event DelegateUpdated emits on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when delegate address is zero\\n     * @custom:error DelegationStatusUnchanged is thrown if approval status is already set to the requested value\\n     * @custom:access Not restricted\\n     */\\n    function updateDelegate(address delegate, bool approved) external {\\n        ensureNonzeroAddress(delegate);\\n        if (approvedDelegates[msg.sender][delegate] == approved) {\\n            revert DelegationStatusUnchanged();\\n        }\\n\\n        approvedDelegates[msg.sender][delegate] = approved;\\n        emit DelegateUpdated(msg.sender, delegate, approved);\\n    }\\n\\n    /**\\n     * @notice Removes asset from sender's account liquidity calculation; disabling them as collateral\\n     * @dev Sender must not have an outstanding borrow balance in the asset,\\n     *  or be providing necessary collateral for an outstanding borrow.\\n     * @param vTokenAddress The address of the asset to be removed\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketExited is emitted on success\\n     * @custom:error ActionPaused error is thrown if exiting the market is paused\\n     * @custom:error NonzeroBorrowBalance error is thrown if the user has an outstanding borrow in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if exiting the market would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function exitMarket(address vTokenAddress) external override returns (uint256) {\\n        _checkActionPauseState(vTokenAddress, Action.EXIT_MARKET);\\n        VToken vToken = VToken(vTokenAddress);\\n        /* Get sender tokensHeld and amountOwed underlying from the vToken */\\n        (uint256 tokensHeld, uint256 amountOwed, ) = _safeGetAccountSnapshot(vToken, msg.sender);\\n\\n        /* Fail if the sender has a borrow balance */\\n        if (amountOwed != 0) {\\n            revert NonzeroBorrowBalance();\\n        }\\n\\n        /* Fail if the sender is not permitted to redeem all of their tokens */\\n        _checkRedeemAllowed(vTokenAddress, msg.sender, tokensHeld);\\n\\n        Market storage marketToExit = markets[address(vToken)];\\n\\n        /* Return true if the sender is not already \\u2018in\\u2019 the market */\\n        if (!marketToExit.accountMembership[msg.sender]) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Set vToken account membership to false */\\n        delete marketToExit.accountMembership[msg.sender];\\n\\n        /* Delete vToken from the account\\u2019s list of assets */\\n        // load into memory for faster iteration\\n        VToken[] memory userAssetList = accountAssets[msg.sender];\\n        uint256 len = userAssetList.length;\\n\\n        uint256 assetIndex = len;\\n        for (uint256 i; i < len; ++i) {\\n            if (userAssetList[i] == vToken) {\\n                assetIndex = i;\\n                break;\\n            }\\n        }\\n\\n        // We *must* have found the asset in the list or our redundant data structure is broken\\n        assert(assetIndex < len);\\n\\n        // copy last item in list to location of item to be removed, reduce length by 1\\n        VToken[] storage storedList = accountAssets[msg.sender];\\n        storedList[assetIndex] = storedList[storedList.length - 1];\\n        storedList.pop();\\n\\n        emit MarketExited(vToken, msg.sender);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /*** Policy Hooks ***/\\n\\n    /**\\n     * @notice Checks if the account should be allowed to mint tokens in the given market\\n     * @param vToken The market to verify the mint against\\n     * @param minter The account which would get the minted tokens\\n     * @param mintAmount The amount of underlying being supplied to the market in exchange for tokens\\n     * @custom:error ActionPaused error is thrown if supplying to this market is paused\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error SupplyCapExceeded error is thrown if the total supply exceeds the cap after minting\\n     * @custom:access Not restricted\\n     */\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external override {\\n        _checkActionPauseState(vToken, Action.MINT);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        uint256 supplyCap = supplyCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (supplyCap != type(uint256).max) {\\n            uint256 vTokenSupply = VToken(vToken).totalSupply();\\n            Exp memory exchangeRate = Exp({ mantissa: VToken(vToken).exchangeRateStored() });\\n            uint256 nextTotalSupply = mul_ScalarTruncateAddUInt(exchangeRate, vTokenSupply, mintAmount);\\n            if (nextTotalSupply > supplyCap) {\\n                revert SupplyCapExceeded(vToken, supplyCap);\\n            }\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, minter);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates mint, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being minted\\n     * @param minter The address minting the tokens\\n     * @param actualMintAmount The amount of the underlying asset being minted\\n     * @param mintTokens The number of tokens being minted\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function mintVerify(address vToken, address minter, uint256 actualMintAmount, uint256 mintTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(minter, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to redeem tokens in the given market\\n     * @param vToken The market to verify the redeem against\\n     * @param redeemer The account which would redeem the tokens\\n     * @param redeemTokens The number of vTokens to exchange for the underlying asset in the market\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external override {\\n        _checkActionPauseState(vToken, Action.REDEEM);\\n\\n        _checkRedeemAllowed(vToken, redeemer, redeemTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, redeemer);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates redeem, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being redeemed\\n     * @param redeemer The address redeeming the tokens\\n     * @param redeemAmount The amount of the underlying asset being redeemed\\n     * @param redeemTokens The number of tokens being redeemed\\n     */\\n    function redeemVerify(address vToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(redeemer, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates repayBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being repaid\\n     * @param payer The address repaying the borrow\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     */\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer, // solhint-disable-line no-unused-vars\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 borrowerIndex // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates liquidateBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     * @param seizeTokens The amount of collateral token that will be seized\\n     */\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenBorrowed);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenBorrowed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates seize, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param seizeTokens The number of collateral tokens to seize\\n     */\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenCollateral);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenCollateral);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates transfer, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being transferred\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function transferVerify(address vToken, address src, address dst, uint256 transferTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(src, vToken);\\n            prime.accrueInterestAndUpdateScore(dst, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to borrow the underlying asset of the given market\\n     * @param vToken The market to verify the borrow against\\n     * @param borrower The account which would borrow the asset\\n     * @param borrowAmount The amount of underlying the account would borrow\\n     * @custom:error ActionPaused error is thrown if borrowing is paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if there is not enough collateral to borrow\\n     * @custom:error BorrowCapExceeded is thrown if the borrow cap will be exceeded should this borrow succeed\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted if vToken is enabled as collateral, otherwise only vToken\\n     */\\n    /// disable-eslint\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external override {\\n        _checkActionPauseState(vToken, Action.BORROW);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (!markets[vToken].accountMembership[borrower]) {\\n            // only vTokens may call borrowAllowed if borrower not in market\\n            _checkSenderIs(vToken);\\n\\n            // attempt to add borrower to the market or revert\\n            _addToMarket(VToken(msg.sender), borrower);\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (oracle.getUnderlyingPrice(vToken) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 borrowCap = borrowCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (borrowCap != type(uint256).max) {\\n            uint256 totalBorrows = VToken(vToken).totalBorrows();\\n            uint256 badDebt = VToken(vToken).badDebt();\\n            uint256 nextTotalBorrows = totalBorrows + borrowAmount + badDebt;\\n            if (nextTotalBorrows > borrowCap) {\\n                revert BorrowCapExceeded(vToken, borrowCap);\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            borrower,\\n            VToken(vToken),\\n            0,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n\\n        Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates borrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset whose underlying is being borrowed\\n     * @param borrower The address borrowing the underlying\\n     * @param borrowAmount The amount of the underlying asset requested to borrow\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function borrowVerify(address vToken, address borrower, uint256 borrowAmount) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to repay a borrow in the given market\\n     * @param vToken The market to verify the repay against\\n     * @param borrower The account which would borrowed the asset\\n     * @custom:error ActionPaused error is thrown if repayments are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:access Not restricted\\n     */\\n    function preRepayHook(address vToken, address borrower) external override {\\n        _checkActionPauseState(vToken, Action.REPAY);\\n\\n        oracle.updatePrice(vToken);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the liquidation should be allowed to occur\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param borrower The address of the borrower\\n     * @param repayAmount The amount of underlying being repaid\\n     * @param skipLiquidityCheck Allows the borrow to be liquidated regardless of the account liquidity\\n     * @custom:error ActionPaused error is thrown if liquidations are paused in this market\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error TooMuchRepay error is thrown if the liquidator is trying to repay more than allowed by close factor\\n     * @custom:error MinimalCollateralViolated is thrown if the users' total collateral is lower than the threshold for non-batch liquidations\\n     * @custom:error InsufficientShortfall is thrown when trying to liquidate a healthy account\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     */\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        // Pause Action.LIQUIDATE on BORROWED TOKEN to prevent liquidating it.\\n        // If we want to pause liquidating to vTokenCollateral, we should pause\\n        // Action.SEIZE on it\\n        _checkActionPauseState(vTokenBorrowed, Action.LIQUIDATE);\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(address(vTokenBorrowed));\\n        }\\n        if (!markets[vTokenCollateral].isListed) {\\n            revert MarketNotListed(address(vTokenCollateral));\\n        }\\n\\n        uint256 borrowBalance = VToken(vTokenBorrowed).borrowBalanceStored(borrower);\\n\\n        /* Allow accounts to be liquidated if it is a forced liquidation */\\n        if (skipLiquidityCheck || isForcedLiquidationEnabled[vTokenBorrowed]) {\\n            if (repayAmount > borrowBalance) {\\n                revert TooMuchRepay();\\n            }\\n            return;\\n        }\\n\\n        /* The borrower must have shortfall and collateral > threshold in order to be liquidatable */\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral <= minLiquidatableCollateral) {\\n            /* The liquidator should use either liquidateAccount or healAccount */\\n            revert MinimalCollateralViolated(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        /* The liquidator may not repay more than what is allowed by the closeFactor */\\n        uint256 maxClose = mul_ScalarTruncate(Exp({ mantissa: closeFactorMantissa }), borrowBalance);\\n        if (repayAmount > maxClose) {\\n            revert TooMuchRepay();\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the seizing of assets should be allowed to occur\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param seizerContract Contract that tries to seize the asset (either borrowed vToken or Comptroller)\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @custom:error ActionPaused error is thrown if seizing this type of collateral is paused\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error ComptrollerMismatch error is when seizer contract or seized asset belong to different pools\\n     * @custom:access Not restricted\\n     */\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address seizerContract,\\n        address liquidator,\\n        address borrower\\n    ) external override {\\n        // Pause Action.SEIZE on COLLATERAL to prevent seizing it.\\n        // If we want to pause liquidating vTokenBorrowed, we should pause\\n        // Action.LIQUIDATE on it\\n        _checkActionPauseState(vTokenCollateral, Action.SEIZE);\\n\\n        Market storage market = markets[vTokenCollateral];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(vTokenCollateral);\\n        }\\n\\n        if (seizerContract == address(this)) {\\n            // If Comptroller is the seizer, just check if collateral's comptroller\\n            // is equal to the current address\\n            if (address(VToken(vTokenCollateral).comptroller()) != address(this)) {\\n                revert ComptrollerMismatch();\\n            }\\n        } else {\\n            // If the seizer is not the Comptroller, check that the seizer is a\\n            // listed market, and that the markets' comptrollers match\\n            if (!markets[seizerContract].isListed) {\\n                revert MarketNotListed(seizerContract);\\n            }\\n            if (VToken(vTokenCollateral).comptroller() != VToken(seizerContract).comptroller()) {\\n                revert ComptrollerMismatch();\\n            }\\n        }\\n\\n        if (!market.accountMembership[borrower]) {\\n            revert MarketNotCollateral(vTokenCollateral, borrower);\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vTokenCollateral);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, borrower);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, liquidator);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to transfer tokens in the given market\\n     * @param vToken The market to verify the transfer against\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external override {\\n        _checkActionPauseState(vToken, Action.TRANSFER);\\n\\n        // Currently the only consideration is whether or not\\n        //  the src is allowed to redeem this many tokens\\n        _checkRedeemAllowed(vToken, src, transferTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, src);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, dst);\\n        }\\n    }\\n\\n    /*** Pool-level operations ***/\\n\\n    /**\\n     * @notice Seizes all the remaining collateral, makes msg.sender repay the existing\\n     *   borrows, and treats the rest of the debt as bad debt (for each market).\\n     *   The sender has to repay a certain percentage of the debt, computed as\\n     *   collateral / (borrows * liquidationIncentive).\\n     * @param user account to heal\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for healing\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function healAccount(address user) external {\\n        VToken[] memory userAssets = getAssetsIn(user);\\n        uint256 userAssetsCount = userAssets.length;\\n\\n        address liquidator = msg.sender;\\n        {\\n            ResilientOracleInterface oracle_ = oracle;\\n            // We need all user's markets to be fresh for the computations to be correct\\n            for (uint256 i; i < userAssetsCount; ++i) {\\n                userAssets[i].accrueInterest();\\n                oracle_.updatePrice(address(userAssets[i]));\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(user, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        // percentage = collateral / (borrows * liquidation incentive)\\n        Exp memory collateral = Exp({ mantissa: snapshot.totalCollateral });\\n        Exp memory scaledBorrows = mul_(\\n            Exp({ mantissa: snapshot.borrows }),\\n            Exp({ mantissa: liquidationIncentiveMantissa })\\n        );\\n\\n        Exp memory percentage = div_(collateral, scaledBorrows);\\n        if (lessThanExp(Exp({ mantissa: MANTISSA_ONE }), percentage)) {\\n            revert CollateralExceedsThreshold(scaledBorrows.mantissa, collateral.mantissa);\\n        }\\n\\n        for (uint256 i; i < userAssetsCount; ++i) {\\n            VToken market = userAssets[i];\\n\\n            (uint256 tokens, uint256 borrowBalance, ) = _safeGetAccountSnapshot(market, user);\\n            uint256 repaymentAmount = mul_ScalarTruncate(percentage, borrowBalance);\\n\\n            // Seize the entire collateral\\n            if (tokens != 0) {\\n                market.seize(liquidator, user, tokens);\\n            }\\n            // Repay a certain percentage of the borrow, forgive the rest\\n            if (borrowBalance != 0) {\\n                market.healBorrow(liquidator, user, repaymentAmount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Liquidates all borrows of the borrower. Callable only if the collateral is less than\\n     *   a predefined threshold, and the account collateral can be seized to cover all borrows. If\\n     *   the collateral is higher than the threshold, use regular liquidations. If the collateral is\\n     *   below the threshold, and the account is insolvent, use healAccount.\\n     * @param borrower the borrower address\\n     * @param orders an array of liquidation orders\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for a batch liquidation\\n     * @custom:error InsufficientCollateral error is thrown when there is not enough collateral to cover the debt\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function liquidateAccount(address borrower, LiquidationOrder[] calldata orders) external {\\n        // We will accrue interest and update the oracle prices later during the liquidation\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            // You should use the regular vToken.liquidateBorrow(...) call\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        uint256 collateralToSeize = mul_ScalarTruncate(\\n            Exp({ mantissa: liquidationIncentiveMantissa }),\\n            snapshot.borrows\\n        );\\n        if (collateralToSeize >= snapshot.totalCollateral) {\\n            // There is not enough collateral to seize. Use healBorrow to repay some part of the borrow\\n            // and record bad debt.\\n            revert InsufficientCollateral(collateralToSeize, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        uint256 ordersCount = orders.length;\\n\\n        _ensureMaxLoops(ordersCount / 2);\\n\\n        for (uint256 i; i < ordersCount; ++i) {\\n            if (!markets[address(orders[i].vTokenBorrowed)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenBorrowed));\\n            }\\n            if (!markets[address(orders[i].vTokenCollateral)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenCollateral));\\n            }\\n\\n            LiquidationOrder calldata order = orders[i];\\n            order.vTokenBorrowed.forceLiquidateBorrow(\\n                msg.sender,\\n                borrower,\\n                order.repayAmount,\\n                order.vTokenCollateral,\\n                true\\n            );\\n        }\\n\\n        VToken[] memory borrowMarkets = getAssetsIn(borrower);\\n        uint256 marketsCount = borrowMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            (, uint256 borrowBalance, ) = _safeGetAccountSnapshot(borrowMarkets[i], borrower);\\n            require(borrowBalance == 0, \\\"Nonzero borrow balance after liquidation\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets the closeFactor to use when liquidating borrows\\n     * @param newCloseFactorMantissa New close factor, scaled by 1e18\\n     * @custom:event Emits NewCloseFactor on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCloseFactor(uint256 newCloseFactorMantissa) external {\\n        _checkAccessAllowed(\\\"setCloseFactor(uint256)\\\");\\n        require(MAX_CLOSE_FACTOR_MANTISSA >= newCloseFactorMantissa, \\\"Close factor greater than maximum close factor\\\");\\n        require(MIN_CLOSE_FACTOR_MANTISSA <= newCloseFactorMantissa, \\\"Close factor smaller than minimum close factor\\\");\\n\\n        uint256 oldCloseFactorMantissa = closeFactorMantissa;\\n        closeFactorMantissa = newCloseFactorMantissa;\\n        emit NewCloseFactor(oldCloseFactorMantissa, newCloseFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Sets the collateralFactor for a market\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param vToken The market to set the factor on\\n     * @param newCollateralFactorMantissa The new collateral factor, scaled by 1e18\\n     * @param newLiquidationThresholdMantissa The new liquidation threshold, scaled by 1e18\\n     * @custom:event Emits NewCollateralFactor when collateral factor is updated\\n     *    and NewLiquidationThreshold when liquidation threshold is updated\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InvalidCollateralFactor error is thrown when collateral factor is too high\\n     * @custom:error InvalidLiquidationThreshold error is thrown when liquidation threshold is lower than collateral factor\\n     * @custom:error PriceError is thrown when the oracle returns an invalid price for the asset\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCollateralFactor(\\n        VToken vToken,\\n        uint256 newCollateralFactorMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    ) external {\\n        _checkAccessAllowed(\\\"setCollateralFactor(address,uint256,uint256)\\\");\\n\\n        // Verify market is listed\\n        Market storage market = markets[address(vToken)];\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Check collateral factor <= 0.9\\n        if (newCollateralFactorMantissa > MAX_COLLATERAL_FACTOR_MANTISSA) {\\n            revert InvalidCollateralFactor();\\n        }\\n\\n        // Ensure that liquidation threshold <= 1\\n        if (newLiquidationThresholdMantissa > MANTISSA_ONE) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // Ensure that liquidation threshold >= CF\\n        if (newLiquidationThresholdMantissa < newCollateralFactorMantissa) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // If collateral factor != 0, fail if price == 0\\n        if (newCollateralFactorMantissa != 0 && oracle.getUnderlyingPrice(address(vToken)) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 oldCollateralFactorMantissa = market.collateralFactorMantissa;\\n        if (newCollateralFactorMantissa != oldCollateralFactorMantissa) {\\n            market.collateralFactorMantissa = newCollateralFactorMantissa;\\n            emit NewCollateralFactor(vToken, oldCollateralFactorMantissa, newCollateralFactorMantissa);\\n        }\\n\\n        uint256 oldLiquidationThresholdMantissa = market.liquidationThresholdMantissa;\\n        if (newLiquidationThresholdMantissa != oldLiquidationThresholdMantissa) {\\n            market.liquidationThresholdMantissa = newLiquidationThresholdMantissa;\\n            emit NewLiquidationThreshold(vToken, oldLiquidationThresholdMantissa, newLiquidationThresholdMantissa);\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets liquidationIncentive\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newLiquidationIncentiveMantissa New liquidationIncentive scaled by 1e18\\n     * @custom:event Emits NewLiquidationIncentive on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setLiquidationIncentive(uint256 newLiquidationIncentiveMantissa) external {\\n        require(newLiquidationIncentiveMantissa >= MANTISSA_ONE, \\\"liquidation incentive should be greater than 1e18\\\");\\n\\n        _checkAccessAllowed(\\\"setLiquidationIncentive(uint256)\\\");\\n\\n        // Save current value for use in log\\n        uint256 oldLiquidationIncentiveMantissa = liquidationIncentiveMantissa;\\n\\n        // Set liquidation incentive to new incentive\\n        liquidationIncentiveMantissa = newLiquidationIncentiveMantissa;\\n\\n        // Emit event with old incentive, new incentive\\n        emit NewLiquidationIncentive(oldLiquidationIncentiveMantissa, newLiquidationIncentiveMantissa);\\n    }\\n\\n    /**\\n     * @notice Add the market to the markets mapping and set it as listed\\n     * @dev Only callable by the PoolRegistry\\n     * @param vToken The address of the market (token) to list\\n     * @custom:error MarketAlreadyListed is thrown if the market is already listed in this pool\\n     * @custom:access Only PoolRegistry\\n     */\\n    function supportMarket(VToken vToken) external {\\n        _checkSenderIs(poolRegistry);\\n\\n        if (markets[address(vToken)].isListed) {\\n            revert MarketAlreadyListed(address(vToken));\\n        }\\n\\n        require(vToken.isVToken(), \\\"Comptroller: Invalid vToken\\\"); // Sanity check to make sure its really a VToken\\n\\n        Market storage newMarket = markets[address(vToken)];\\n        newMarket.isListed = true;\\n        newMarket.collateralFactorMantissa = 0;\\n        newMarket.liquidationThresholdMantissa = 0;\\n\\n        _addMarket(address(vToken));\\n\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            rewardsDistributors[i].initializeMarket(address(vToken));\\n        }\\n\\n        emit MarketSupported(vToken);\\n    }\\n\\n    /**\\n     * @notice Set the given borrow caps for the given vToken markets. Borrowing that brings total borrows to or above borrow cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A borrow cap of type(uint256).max corresponds to unlimited borrowing.\\n     * @dev Borrow caps smaller than the current total borrows are accepted. This way, new borrows will not be allowed\\n            until the total borrows amount goes below the new borrow cap\\n     * @param vTokens The addresses of the markets (tokens) to change the borrow caps for\\n     * @param newBorrowCaps The new borrow cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited borrowing.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketBorrowCaps(VToken[] calldata vTokens, uint256[] calldata newBorrowCaps) external {\\n        _checkAccessAllowed(\\\"setMarketBorrowCaps(address[],uint256[])\\\");\\n\\n        uint256 numMarkets = vTokens.length;\\n        uint256 numBorrowCaps = newBorrowCaps.length;\\n\\n        require(numMarkets != 0 && numMarkets == numBorrowCaps, \\\"invalid input\\\");\\n\\n        _ensureMaxLoops(numMarkets);\\n\\n        for (uint256 i; i < numMarkets; ++i) {\\n            borrowCaps[address(vTokens[i])] = newBorrowCaps[i];\\n            emit NewBorrowCap(vTokens[i], newBorrowCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given supply caps for the given vToken markets. Supply that brings total Supply to or above supply cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A supply cap of type(uint256).max corresponds to unlimited supply.\\n     * @dev Supply caps smaller than the current total supplies are accepted. This way, new supplies will not be allowed\\n            until the total supplies amount goes below the new supply cap\\n     * @param vTokens The addresses of the markets (tokens) to change the supply caps for\\n     * @param newSupplyCaps The new supply cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited supply.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketSupplyCaps(VToken[] calldata vTokens, uint256[] calldata newSupplyCaps) external {\\n        _checkAccessAllowed(\\\"setMarketSupplyCaps(address[],uint256[])\\\");\\n        uint256 vTokensCount = vTokens.length;\\n\\n        require(vTokensCount != 0, \\\"invalid number of markets\\\");\\n        require(vTokensCount == newSupplyCaps.length, \\\"invalid number of markets\\\");\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            supplyCaps[address(vTokens[i])] = newSupplyCaps[i];\\n            emit NewSupplyCap(vTokens[i], newSupplyCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Pause/unpause specified actions\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param marketsList Markets to pause/unpause the actions on\\n     * @param actionsList List of action ids to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setActionsPaused(VToken[] calldata marketsList, Action[] calldata actionsList, bool paused) external {\\n        _checkAccessAllowed(\\\"setActionsPaused(address[],uint256[],bool)\\\");\\n\\n        uint256 marketsCount = marketsList.length;\\n        uint256 actionsCount = actionsList.length;\\n\\n        _ensureMaxLoops(marketsCount * actionsCount);\\n\\n        for (uint256 marketIdx; marketIdx < marketsCount; ++marketIdx) {\\n            for (uint256 actionIdx; actionIdx < actionsCount; ++actionIdx) {\\n                _setActionPaused(address(marketsList[marketIdx]), actionsList[actionIdx], paused);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given collateral threshold for non-batch liquidations. Regular liquidations\\n     *   will fail if the collateral amount is less than this threshold. Liquidators should use batch\\n     *   operations like liquidateAccount or healAccount.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newMinLiquidatableCollateral The new min liquidatable collateral (in USD).\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMinLiquidatableCollateral(uint256 newMinLiquidatableCollateral) external {\\n        _checkAccessAllowed(\\\"setMinLiquidatableCollateral(uint256)\\\");\\n\\n        uint256 oldMinLiquidatableCollateral = minLiquidatableCollateral;\\n        minLiquidatableCollateral = newMinLiquidatableCollateral;\\n        emit NewMinLiquidatableCollateral(oldMinLiquidatableCollateral, newMinLiquidatableCollateral);\\n    }\\n\\n    /**\\n     * @notice Add a new RewardsDistributor and initialize it with all markets. We can add several RewardsDistributor\\n     * contracts with the same rewardToken, and there could be overlaping among them considering the last reward slot (block or second)\\n     * @dev Only callable by the admin\\n     * @param _rewardsDistributor Address of the RewardDistributor contract to add\\n     * @custom:access Only Governance\\n     * @custom:event Emits NewRewardsDistributor with distributor address\\n     */\\n    function addRewardsDistributor(RewardsDistributor _rewardsDistributor) external onlyOwner {\\n        require(!rewardsDistributorExists[address(_rewardsDistributor)], \\\"already exists\\\");\\n\\n        uint256 rewardsDistributorsLen = rewardsDistributors.length;\\n        _ensureMaxLoops(rewardsDistributorsLen + 1);\\n\\n        rewardsDistributors.push(_rewardsDistributor);\\n        rewardsDistributorExists[address(_rewardsDistributor)] = true;\\n\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            _rewardsDistributor.initializeMarket(address(allMarkets[i]));\\n        }\\n\\n        emit NewRewardsDistributor(address(_rewardsDistributor), address(_rewardsDistributor.rewardToken()));\\n    }\\n\\n    /**\\n     * @notice Sets a new price oracle for the Comptroller\\n     * @dev Only callable by the admin\\n     * @param newOracle Address of the new price oracle to set\\n     * @custom:event Emits NewPriceOracle on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when the new oracle address is zero\\n     */\\n    function setPriceOracle(ResilientOracleInterface newOracle) external onlyOwner {\\n        ensureNonzeroAddress(address(newOracle));\\n\\n        ResilientOracleInterface oldOracle = oracle;\\n        oracle = newOracle;\\n        emit NewPriceOracle(oldOracle, newOracle);\\n    }\\n\\n    /**\\n     * @notice Set the for loop iteration limit to avoid DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Sets the prime token contract for the comptroller\\n     * @param _prime Address of the Prime contract\\n     */\\n    function setPrimeToken(IPrime _prime) external onlyOwner {\\n        ensureNonzeroAddress(address(_prime));\\n\\n        emit NewPrimeToken(prime, _prime);\\n        prime = _prime;\\n    }\\n\\n    /**\\n     * @notice Enables forced liquidations for a market. If forced liquidation is enabled,\\n     * borrows in the market may be liquidated regardless of the account liquidity\\n     * @param vTokenBorrowed Borrowed vToken\\n     * @param enable Whether to enable forced liquidations\\n     */\\n    function setForcedLiquidation(address vTokenBorrowed, bool enable) external {\\n        _checkAccessAllowed(\\\"setForcedLiquidation(address,bool)\\\");\\n        ensureNonzeroAddress(vTokenBorrowed);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(vTokenBorrowed);\\n        }\\n\\n        isForcedLiquidationEnabled[vTokenBorrowed] = enable;\\n        emit IsForcedLiquidationEnabledUpdated(vTokenBorrowed, enable);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to liquidation threshold requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of liquidation threshold requirements,\\n     * @return shortfall Account shortfall below liquidation threshold requirements\\n     */\\n    function getAccountLiquidity(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getLiquidationThreshold);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to collateral requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of collateral requirements,\\n     * @return shortfall Account shortfall below collateral requirements\\n     */\\n    function getBorrowingPower(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getCollateralFactor);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine what the account liquidity would be if the given amounts were redeemed/borrowed\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Hypothetical account liquidity in excess of collateral requirements,\\n     * @return shortfall Hypothetical account shortfall below collateral requirements\\n     */\\n    function getHypotheticalAccountLiquidity(\\n        address account,\\n        address vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            account,\\n            VToken(vTokenModify),\\n            redeemTokens,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Return all of the markets\\n     * @dev The automatic getter may be used to access an individual market.\\n     * @return markets The list of market addresses\\n     */\\n    function getAllMarkets() external view override returns (VToken[] memory) {\\n        return allMarkets;\\n    }\\n\\n    /**\\n     * @notice Check if a market is marked as listed (active)\\n     * @param vToken vToken Address for the market to check\\n     * @return listed True if listed otherwise false\\n     */\\n    function isMarketListed(VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].isListed;\\n    }\\n\\n    /*** Assets You Are In ***/\\n\\n    /**\\n     * @notice Returns whether the given account is entered in a given market\\n     * @param account The address of the account to check\\n     * @param vToken The vToken to check\\n     * @return True if the account is in the market specified, otherwise false.\\n     */\\n    function checkMembership(address account, VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].accountMembership[account];\\n    }\\n\\n    /**\\n     * @notice Calculate number of tokens of collateral asset to seize given an underlying amount\\n     * @dev Used in liquidation (called in vToken.liquidateBorrowFresh)\\n     * @param vTokenBorrowed The address of the borrowed vToken\\n     * @param vTokenCollateral The address of the collateral vToken\\n     * @param actualRepayAmount The amount of vTokenBorrowed underlying to convert into vTokenCollateral tokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return tokensToSeize Number of vTokenCollateral tokens to be seized in a liquidation\\n     * @custom:error PriceError if the oracle returns an invalid price\\n     */\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 actualRepayAmount\\n    ) external view override returns (uint256 error, uint256 tokensToSeize) {\\n        /* Read oracle prices for borrowed and collateral markets */\\n        uint256 priceBorrowedMantissa = _safeGetUnderlyingPrice(VToken(vTokenBorrowed));\\n        uint256 priceCollateralMantissa = _safeGetUnderlyingPrice(VToken(vTokenCollateral));\\n\\n        /*\\n         * Get the exchange rate and calculate the number of collateral tokens to seize:\\n         *  seizeAmount = actualRepayAmount * liquidationIncentive * priceBorrowed / priceCollateral\\n         *  seizeTokens = seizeAmount / exchangeRate\\n         *   = actualRepayAmount * (liquidationIncentive * priceBorrowed) / (priceCollateral * exchangeRate)\\n         */\\n        uint256 exchangeRateMantissa = VToken(vTokenCollateral).exchangeRateStored(); // Note: reverts on error\\n        uint256 seizeTokens;\\n        Exp memory numerator;\\n        Exp memory denominator;\\n        Exp memory ratio;\\n\\n        numerator = mul_(Exp({ mantissa: liquidationIncentiveMantissa }), Exp({ mantissa: priceBorrowedMantissa }));\\n        denominator = mul_(Exp({ mantissa: priceCollateralMantissa }), Exp({ mantissa: exchangeRateMantissa }));\\n        ratio = div_(numerator, denominator);\\n\\n        seizeTokens = mul_ScalarTruncate(ratio, actualRepayAmount);\\n\\n        return (NO_ERROR, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Returns reward speed given a vToken\\n     * @param vToken The vToken to get the reward speeds for\\n     * @return rewardSpeeds Array of total supply and borrow speeds and reward token for all reward distributors\\n     */\\n    function getRewardsByMarket(address vToken) external view returns (RewardSpeeds[] memory rewardSpeeds) {\\n        uint256 rewardsDistributorsLength = rewardsDistributors.length;\\n        rewardSpeeds = new RewardSpeeds[](rewardsDistributorsLength);\\n        for (uint256 i; i < rewardsDistributorsLength; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            address rewardToken = address(rewardsDistributor.rewardToken());\\n            rewardSpeeds[i] = RewardSpeeds({\\n                rewardToken: rewardToken,\\n                supplySpeed: rewardsDistributor.rewardTokenSupplySpeeds(vToken),\\n                borrowSpeed: rewardsDistributor.rewardTokenBorrowSpeeds(vToken)\\n            });\\n        }\\n        return rewardSpeeds;\\n    }\\n\\n    /**\\n     * @notice Return all reward distributors for this pool\\n     * @return Array of RewardDistributor addresses\\n     */\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory) {\\n        return rewardsDistributors;\\n    }\\n\\n    /**\\n     * @notice A marker method that returns true for a valid Comptroller contract\\n     * @return Always true\\n     */\\n    function isComptroller() external pure override returns (bool) {\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Update the prices of all the tokens associated with the provided account\\n     * @param account Address of the account to get associated tokens with\\n     */\\n    function updatePrices(address account) public {\\n        VToken[] memory vTokens = getAssetsIn(account);\\n        uint256 vTokensCount = vTokens.length;\\n\\n        ResilientOracleInterface oracle_ = oracle;\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            oracle_.updatePrice(address(vTokens[i]));\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if a certain action is paused on a market\\n     * @param market vToken address\\n     * @param action Action to check\\n     * @return paused True if the action is paused otherwise false\\n     */\\n    function actionPaused(address market, Action action) public view returns (bool) {\\n        return _actionPaused[market][action];\\n    }\\n\\n    /**\\n     * @notice Returns the assets an account has entered\\n     * @param account The address of the account to pull assets for\\n     * @return A list with the assets the account has entered\\n     */\\n    function getAssetsIn(address account) public view returns (VToken[] memory) {\\n        uint256 len;\\n        VToken[] memory _accountAssets = accountAssets[account];\\n        uint256 _accountAssetsLength = _accountAssets.length;\\n\\n        VToken[] memory assetsIn = new VToken[](_accountAssetsLength);\\n\\n        for (uint256 i; i < _accountAssetsLength; ++i) {\\n            Market storage market = markets[address(_accountAssets[i])];\\n            if (market.isListed) {\\n                assetsIn[len] = _accountAssets[i];\\n                ++len;\\n            }\\n        }\\n\\n        assembly {\\n            mstore(assetsIn, len)\\n        }\\n\\n        return assetsIn;\\n    }\\n\\n    /**\\n     * @notice Add the market to the borrower's \\\"assets in\\\" for liquidity calculations\\n     * @param vToken The market to enter\\n     * @param borrower The address of the account to modify\\n     */\\n    function _addToMarket(VToken vToken, address borrower) internal {\\n        _checkActionPauseState(address(vToken), Action.ENTER_MARKET);\\n        Market storage marketToJoin = markets[address(vToken)];\\n\\n        if (!marketToJoin.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (marketToJoin.accountMembership[borrower]) {\\n            // already joined\\n            return;\\n        }\\n\\n        // survived the gauntlet, add to list\\n        // NOTE: we store these somewhat redundantly as a significant optimization\\n        //  this avoids having to iterate through the list for the most common use cases\\n        //  that is, only when we need to perform liquidity checks\\n        //  and not whenever we want to check if an account is in a particular market\\n        marketToJoin.accountMembership[borrower] = true;\\n        accountAssets[borrower].push(vToken);\\n\\n        emit MarketEntered(vToken, borrower);\\n    }\\n\\n    /**\\n     * @notice Internal function to validate that a market hasn't already been added\\n     * and if it hasn't adds it\\n     * @param vToken The market to support\\n     */\\n    function _addMarket(address vToken) internal {\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            if (allMarkets[i] == VToken(vToken)) {\\n                revert MarketAlreadyListed(vToken);\\n            }\\n        }\\n        allMarkets.push(VToken(vToken));\\n        marketsCount = allMarkets.length;\\n        _ensureMaxLoops(marketsCount);\\n    }\\n\\n    /**\\n     * @dev Pause/unpause an action on a market\\n     * @param market Market to pause/unpause the action on\\n     * @param action Action id to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     */\\n    function _setActionPaused(address market, Action action, bool paused) internal {\\n        require(markets[market].isListed, \\\"cannot pause a market that is not listed\\\");\\n        _actionPaused[market][action] = paused;\\n        emit ActionPausedMarket(VToken(market), action, paused);\\n    }\\n\\n    /**\\n     * @dev Internal function to check that vTokens can be safely redeemed for the underlying asset.\\n     * @param vToken Address of the vTokens to redeem\\n     * @param redeemer Account redeeming the tokens\\n     * @param redeemTokens The number of tokens to redeem\\n     */\\n    function _checkRedeemAllowed(address vToken, address redeemer, uint256 redeemTokens) internal {\\n        Market storage market = markets[vToken];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        /* If the redeemer is not 'in' the market, then we can bypass the liquidity check */\\n        if (!market.accountMembership[redeemer]) {\\n            return;\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(redeemer);\\n\\n        /* Otherwise, perform a hypothetical liquidity check to guard against shortfall */\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            redeemer,\\n            VToken(vToken),\\n            redeemTokens,\\n            0,\\n            _getCollateralFactor\\n        );\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n    }\\n\\n    /**\\n     * @notice Get the total collateral, weighted collateral, borrow balance, liquidity, shortfall\\n     * @param account The account to get the snapshot for\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n     *  liquidation threshold. Accepts the address of the vToken and returns the weight as Exp.\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getCurrentLiquiditySnapshot(\\n        address account,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        return _getHypotheticalLiquiditySnapshot(account, VToken(address(0)), 0, 0, weight);\\n    }\\n\\n    /**\\n     * @notice Determine what the supply/borrow balances would be if the given amounts were redeemed/borrowed\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n         liquidation threshold. Accepts the address of the VToken and returns the weight\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getHypotheticalLiquiditySnapshot(\\n        address account,\\n        VToken vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        // For each asset the account is in\\n        VToken[] memory assets = getAssetsIn(account);\\n        uint256 assetsCount = assets.length;\\n\\n        for (uint256 i; i < assetsCount; ++i) {\\n            VToken asset = assets[i];\\n\\n            // Read the balances and exchange rate from the vToken\\n            (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) = _safeGetAccountSnapshot(\\n                asset,\\n                account\\n            );\\n\\n            // Get the normalized price of the asset\\n            Exp memory oraclePrice = Exp({ mantissa: _safeGetUnderlyingPrice(asset) });\\n\\n            // Pre-compute conversion factors from vTokens -> usd\\n            Exp memory vTokenPrice = mul_(Exp({ mantissa: exchangeRateMantissa }), oraclePrice);\\n            Exp memory weightedVTokenPrice = mul_(weight(asset), vTokenPrice);\\n\\n            // weightedCollateral += weightedVTokenPrice * vTokenBalance\\n            snapshot.weightedCollateral = mul_ScalarTruncateAddUInt(\\n                weightedVTokenPrice,\\n                vTokenBalance,\\n                snapshot.weightedCollateral\\n            );\\n\\n            // totalCollateral += vTokenPrice * vTokenBalance\\n            snapshot.totalCollateral = mul_ScalarTruncateAddUInt(vTokenPrice, vTokenBalance, snapshot.totalCollateral);\\n\\n            // borrows += oraclePrice * borrowBalance\\n            snapshot.borrows = mul_ScalarTruncateAddUInt(oraclePrice, borrowBalance, snapshot.borrows);\\n\\n            // Calculate effects of interacting with vTokenModify\\n            if (asset == vTokenModify) {\\n                // redeem effect\\n                // effects += tokensToDenom * redeemTokens\\n                snapshot.effects = mul_ScalarTruncateAddUInt(weightedVTokenPrice, redeemTokens, snapshot.effects);\\n\\n                // borrow effect\\n                // effects += oraclePrice * borrowAmount\\n                snapshot.effects = mul_ScalarTruncateAddUInt(oraclePrice, borrowAmount, snapshot.effects);\\n            }\\n        }\\n\\n        uint256 borrowPlusEffects = snapshot.borrows + snapshot.effects;\\n        // These are safe, as the underflow condition is checked first\\n        unchecked {\\n            if (snapshot.weightedCollateral > borrowPlusEffects) {\\n                snapshot.liquidity = snapshot.weightedCollateral - borrowPlusEffects;\\n                snapshot.shortfall = 0;\\n            } else {\\n                snapshot.liquidity = 0;\\n                snapshot.shortfall = borrowPlusEffects - snapshot.weightedCollateral;\\n            }\\n        }\\n\\n        return snapshot;\\n    }\\n\\n    /**\\n     * @dev Retrieves price from oracle for an asset and checks it is nonzero\\n     * @param asset Address for asset to query price\\n     * @return Underlying price\\n     */\\n    function _safeGetUnderlyingPrice(VToken asset) internal view returns (uint256) {\\n        uint256 oraclePriceMantissa = oracle.getUnderlyingPrice(address(asset));\\n        if (oraclePriceMantissa == 0) {\\n            revert PriceError(address(asset));\\n        }\\n        return oraclePriceMantissa;\\n    }\\n\\n    /**\\n     * @dev Return collateral factor for a market\\n     * @param asset Address for asset\\n     * @return Collateral factor as exponential\\n     */\\n    function _getCollateralFactor(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].collateralFactorMantissa });\\n    }\\n\\n    /**\\n     * @dev Retrieves liquidation threshold for a market as an exponential\\n     * @param asset Address for asset to liquidation threshold\\n     * @return Liquidation threshold as exponential\\n     */\\n    function _getLiquidationThreshold(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].liquidationThresholdMantissa });\\n    }\\n\\n    /**\\n     * @dev Returns supply and borrow balances of user in vToken, reverts on failure\\n     * @param vToken Market to query\\n     * @param user Account address\\n     * @return vTokenBalance Balance of vTokens, the same as vToken.balanceOf(user)\\n     * @return borrowBalance Borrowed amount, including the interest\\n     * @return exchangeRateMantissa Stored exchange rate\\n     */\\n    function _safeGetAccountSnapshot(\\n        VToken vToken,\\n        address user\\n    ) internal view returns (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) {\\n        uint256 err;\\n        (err, vTokenBalance, borrowBalance, exchangeRateMantissa) = vToken.getAccountSnapshot(user);\\n        if (err != 0) {\\n            revert SnapshotError(address(vToken), user);\\n        }\\n        return (vTokenBalance, borrowBalance, exchangeRateMantissa);\\n    }\\n\\n    /// @notice Reverts if the call is not from expectedSender\\n    /// @param expectedSender Expected transaction sender\\n    function _checkSenderIs(address expectedSender) internal view {\\n        if (msg.sender != expectedSender) {\\n            revert UnexpectedSender(expectedSender, msg.sender);\\n        }\\n    }\\n\\n    /// @notice Reverts if a certain action is paused on a market\\n    /// @param market Market to check\\n    /// @param action Action to check\\n    function _checkActionPauseState(address market, Action action) private view {\\n        if (actionPaused(market, action)) {\\n            revert ActionPaused(market, action);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x7c6e1c6264e4681f82a9ac1bcd9155197a930033291ee5561ad97a56006f5e9c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\n\\nenum Action {\\n    MINT,\\n    REDEEM,\\n    BORROW,\\n    REPAY,\\n    SEIZE,\\n    LIQUIDATE,\\n    TRANSFER,\\n    ENTER_MARKET,\\n    EXIT_MARKET\\n}\\n\\n/**\\n * @title ComptrollerInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract.\\n */\\ninterface ComptrollerInterface {\\n    /*** Assets You Are In ***/\\n\\n    function enterMarkets(address[] calldata vTokens) external returns (uint256[] memory);\\n\\n    function exitMarket(address vToken) external returns (uint256);\\n\\n    /*** Policy Hooks ***/\\n\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external;\\n\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external;\\n\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external;\\n\\n    function preRepayHook(address vToken, address borrower) external;\\n\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external;\\n\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower\\n    ) external;\\n\\n    function borrowVerify(address vToken, address borrower, uint borrowAmount) external;\\n\\n    function mintVerify(address vToken, address minter, uint mintAmount, uint mintTokens) external;\\n\\n    function redeemVerify(address vToken, address redeemer, uint redeemAmount, uint redeemTokens) external;\\n\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer,\\n        address borrower,\\n        uint repayAmount,\\n        uint borrowerIndex\\n    ) external;\\n\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address liquidator,\\n        address borrower,\\n        uint repayAmount,\\n        uint seizeTokens\\n    ) external;\\n\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower,\\n        uint seizeTokens\\n    ) external;\\n\\n    function transferVerify(address vToken, address src, address dst, uint transferTokens) external;\\n\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external;\\n\\n    function isComptroller() external view returns (bool);\\n\\n    /*** Liquidity/Liquidation Calculations ***/\\n\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 repayAmount\\n    ) external view returns (uint256, uint256);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function actionPaused(address market, Action action) external view returns (bool);\\n}\\n\\n/**\\n * @title ComptrollerViewInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract, including only some util view functions.\\n */\\ninterface ComptrollerViewInterface {\\n    function markets(address) external view returns (bool, uint256);\\n\\n    function oracle() external view returns (ResilientOracleInterface);\\n\\n    function getAssetsIn(address) external view returns (VToken[] memory);\\n\\n    function closeFactorMantissa() external view returns (uint256);\\n\\n    function liquidationIncentiveMantissa() external view returns (uint256);\\n\\n    function minLiquidatableCollateral() external view returns (uint256);\\n\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function borrowCaps(address) external view returns (uint256);\\n\\n    function supplyCaps(address) external view returns (uint256);\\n\\n    function approvedDelegates(address user, address delegate) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xcbf7f9977472650c61345b7cbde23e81f626e1f8863bab4c6ce3dacfc7604919\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\nimport { Action } from \\\"./ComptrollerInterface.sol\\\";\\n\\n/**\\n * @title ComptrollerStorage\\n * @author Venus\\n * @notice Storage layout for the `Comptroller` contract.\\n */\\ncontract ComptrollerStorage {\\n    struct LiquidationOrder {\\n        VToken vTokenCollateral;\\n        VToken vTokenBorrowed;\\n        uint256 repayAmount;\\n    }\\n\\n    struct AccountLiquiditySnapshot {\\n        uint256 totalCollateral;\\n        uint256 weightedCollateral;\\n        uint256 borrows;\\n        uint256 effects;\\n        uint256 liquidity;\\n        uint256 shortfall;\\n    }\\n\\n    struct RewardSpeeds {\\n        address rewardToken;\\n        uint256 supplySpeed;\\n        uint256 borrowSpeed;\\n    }\\n\\n    struct Market {\\n        // Whether or not this market is listed\\n        bool isListed;\\n        //  Multiplier representing the most one can borrow against their collateral in this market.\\n        //  For instance, 0.9 to allow borrowing 90% of collateral value.\\n        //  Must be between 0 and 1, and stored as a mantissa.\\n        uint256 collateralFactorMantissa;\\n        //  Multiplier representing the collateralization after which the borrow is eligible\\n        //  for liquidation. For instance, 0.8 liquidate when the borrow is 80% of collateral\\n        //  value. Must be between 0 and collateral factor, stored as a mantissa.\\n        uint256 liquidationThresholdMantissa;\\n        // Per-market mapping of \\\"accounts in this asset\\\"\\n        mapping(address => bool) accountMembership;\\n    }\\n\\n    /**\\n     * @notice Oracle which gives the price of any given asset\\n     */\\n    ResilientOracleInterface public oracle;\\n\\n    /**\\n     * @notice Multiplier used to calculate the maximum repayAmount when liquidating a borrow\\n     */\\n    uint256 public closeFactorMantissa;\\n\\n    /**\\n     * @notice Multiplier representing the discount on collateral that a liquidator receives\\n     */\\n    uint256 public liquidationIncentiveMantissa;\\n\\n    /**\\n     * @notice Per-account mapping of \\\"assets you are in\\\"\\n     */\\n    mapping(address => VToken[]) public accountAssets;\\n\\n    /**\\n     * @notice Official mapping of vTokens -> Market metadata\\n     * @dev Used e.g. to determine if a market is supported\\n     */\\n    mapping(address => Market) public markets;\\n\\n    /// @notice A list of all markets\\n    VToken[] public allMarkets;\\n\\n    /// @notice Borrow caps enforced by borrowAllowed for each vToken address. Defaults to zero which restricts borrowing.\\n    mapping(address => uint256) public borrowCaps;\\n\\n    /// @notice Minimal collateral required for regular (non-batch) liquidations\\n    uint256 public minLiquidatableCollateral;\\n\\n    /// @notice Supply caps enforced by mintAllowed for each vToken address. Defaults to zero which corresponds to minting not allowed\\n    mapping(address => uint256) public supplyCaps;\\n\\n    /// @notice True if a certain action is paused on a certain market\\n    mapping(address => mapping(Action => bool)) internal _actionPaused;\\n\\n    // List of Reward Distributors added\\n    RewardsDistributor[] internal rewardsDistributors;\\n\\n    // Used to check if rewards distributor is added\\n    mapping(address => bool) internal rewardsDistributorExists;\\n\\n    /// @notice Flag indicating whether forced liquidation enabled for a market\\n    mapping(address => bool) public isForcedLiquidationEnabled;\\n\\n    uint256 internal constant NO_ERROR = 0;\\n\\n    // closeFactorMantissa must be strictly greater than this value\\n    uint256 internal constant MIN_CLOSE_FACTOR_MANTISSA = 0.05e18; // 0.05\\n\\n    // closeFactorMantissa must not exceed this value\\n    uint256 internal constant MAX_CLOSE_FACTOR_MANTISSA = 0.9e18; // 0.9\\n\\n    // No collateralFactorMantissa may exceed this value\\n    uint256 internal constant MAX_COLLATERAL_FACTOR_MANTISSA = 0.95e18; // 0.95\\n\\n    /// Prime token address\\n    IPrime public prime;\\n\\n    /// @notice Whether the delegate is allowed to borrow or redeem on behalf of the user\\n    //mapping(address user => mapping (address delegate => bool approved)) public approvedDelegates;\\n    mapping(address => mapping(address => bool)) public approvedDelegates;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4df44cb65ac152bac2be4b4545430e703005a74a55b72e144100b16421bd8bfd\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title TokenErrorReporter\\n * @author Venus\\n * @notice Errors that can be thrown by the `VToken` contract.\\n */\\ncontract TokenErrorReporter {\\n    uint256 public constant NO_ERROR = 0; // support legacy return codes\\n\\n    error TransferNotAllowed();\\n\\n    error MintFreshnessCheck();\\n\\n    error RedeemFreshnessCheck();\\n    error RedeemTransferOutNotPossible();\\n\\n    error BorrowFreshnessCheck();\\n    error BorrowCashNotAvailable();\\n    error DelegateNotApproved();\\n\\n    error RepayBorrowFreshnessCheck();\\n\\n    error HealBorrowUnauthorized();\\n    error ForceLiquidateBorrowUnauthorized();\\n\\n    error LiquidateFreshnessCheck();\\n    error LiquidateCollateralFreshnessCheck();\\n    error LiquidateAccrueCollateralInterestFailed(uint256 errorCode);\\n    error LiquidateLiquidatorIsBorrower();\\n    error LiquidateCloseAmountIsZero();\\n    error LiquidateCloseAmountIsUintMax();\\n\\n    error LiquidateSeizeLiquidatorIsBorrower();\\n\\n    error ProtocolSeizeShareTooBig();\\n\\n    error SetReserveFactorFreshCheck();\\n    error SetReserveFactorBoundsCheck();\\n\\n    error AddReservesFactorFreshCheck(uint256 actualAddAmount);\\n\\n    error ReduceReservesFreshCheck();\\n    error ReduceReservesCashNotAvailable();\\n    error ReduceReservesCashValidation();\\n\\n    error SetInterestRateModelFreshCheck();\\n}\\n\",\"keccak256\":\"0x7a7ced1caaac2d9242659ebd50b99f308c725ce958ac9e11f7ada404b1d97a7b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { EXP_SCALE as EXP_SCALE_, MANTISSA_ONE as MANTISSA_ONE_ } from \\\"./lib/constants.sol\\\";\\n\\n/**\\n * @title Exponential module for storing fixed-precision decimals\\n * @author Compound\\n * @notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.\\n *         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:\\n *         `Exp({mantissa: 5100000000000000000})`.\\n */\\ncontract ExponentialNoError {\\n    struct Exp {\\n        uint256 mantissa;\\n    }\\n\\n    struct Double {\\n        uint256 mantissa;\\n    }\\n\\n    uint256 internal constant EXP_SCALE = EXP_SCALE_;\\n    uint256 internal constant DOUBLE_SCALE = 1e36;\\n    uint256 internal constant HALF_EXP_SCALE = EXP_SCALE / 2;\\n    uint256 internal constant MANTISSA_ONE = MANTISSA_ONE_;\\n\\n    /**\\n     * @dev Truncates the given exp to a whole number value.\\n     *      For example, truncate(Exp{mantissa: 15 * EXP_SCALE}) = 15\\n     */\\n    function truncate(Exp memory exp) internal pure returns (uint256) {\\n        // Note: We are not using careful math here as we're performing a division that cannot fail\\n        return exp.mantissa / EXP_SCALE;\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, then truncate to return an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncate(Exp memory a, uint256 scalar) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return truncate(product);\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncateAddUInt(Exp memory a, uint256 scalar, uint256 addend) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return add_(truncate(product), addend);\\n    }\\n\\n    /**\\n     * @dev Checks if first Exp is less than second Exp.\\n     */\\n    function lessThanExp(Exp memory left, Exp memory right) internal pure returns (bool) {\\n        return left.mantissa < right.mantissa;\\n    }\\n\\n    function safe224(uint256 n, string memory errorMessage) internal pure returns (uint224) {\\n        require(n <= type(uint224).max, errorMessage);\\n        return uint224(n);\\n    }\\n\\n    function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) {\\n        require(n <= type(uint32).max, errorMessage);\\n        return uint32(n);\\n    }\\n\\n    function add_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a + b;\\n    }\\n\\n    function sub_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a - b;\\n    }\\n\\n    function mul_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b.mantissa) / EXP_SCALE });\\n    }\\n\\n    function mul_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / EXP_SCALE;\\n    }\\n\\n    function mul_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b.mantissa) / DOUBLE_SCALE });\\n    }\\n\\n    function mul_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / DOUBLE_SCALE;\\n    }\\n\\n    function mul_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a * b;\\n    }\\n\\n    function div_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(mul_(a.mantissa, EXP_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, EXP_SCALE), b.mantissa);\\n    }\\n\\n    function div_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a.mantissa, DOUBLE_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, DOUBLE_SCALE), b.mantissa);\\n    }\\n\\n    function div_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a / b;\\n    }\\n\\n    function fraction(uint256 a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a, DOUBLE_SCALE), b) });\\n    }\\n}\\n\",\"keccak256\":\"0x8afbe8a24fe3539c124e718681ed3dcebd24c40dd53095786c0155998213b9b0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title Compound's InterestRateModel Interface\\n * @author Compound\\n */\\nabstract contract InterestRateModel {\\n    /**\\n     * @notice Calculates the current borrow interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getBorrowRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Calculates the current supply interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param reserveFactorMantissa The current reserve factor the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getSupplyRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 reserveFactorMantissa,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is an InterestRateModel contract (for inspection)\\n     * @return Always true\\n     */\\n    function isInterestRateModel() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0xc4fda1ab75ebe4b187b707c4f10c58780f343cf343c537f641dc75d3cd28ab51\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title MaxLoopsLimitHelper\\n * @author Venus\\n * @notice Abstract contract used to avoid collection with too many items that would generate gas errors and DoS.\\n */\\nabstract contract MaxLoopsLimitHelper {\\n    // Limit for the loops to avoid the DOS\\n    uint256 public maxLoopsLimit;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when max loops limit is set\\n    event MaxLoopsLimitUpdated(uint256 oldMaxLoopsLimit, uint256 newmaxLoopsLimit);\\n\\n    /// @notice Thrown an error on maxLoopsLimit exceeds for any loop\\n    error MaxLoopsLimitExceeded(uint256 loopsLimit, uint256 requiredLoops);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function _setMaxLoopsLimit(uint256 limit) internal {\\n        require(limit > maxLoopsLimit, \\\"Comptroller: Invalid maxLoopsLimit\\\");\\n\\n        uint256 oldMaxLoopsLimit = maxLoopsLimit;\\n        maxLoopsLimit = limit;\\n\\n        emit MaxLoopsLimitUpdated(oldMaxLoopsLimit, limit);\\n    }\\n\\n    /**\\n     * @notice Compare the maxLoopsLimit with number of the times loop iterate\\n     * @param len Length of the loops iterate\\n     * @custom:error MaxLoopsLimitExceeded error is thrown when loops length exceeds maxLoopsLimit\\n     */\\n    function _ensureMaxLoops(uint256 len) internal view {\\n        if (len > maxLoopsLimit) {\\n            revert MaxLoopsLimitExceeded(maxLoopsLimit, len);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x4c25e30635485d162177effa384eee51768b0141a567a0da16ff6ad673274166\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Pool/PoolRegistryInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/**\\n * @title PoolRegistryInterface\\n * @author Venus\\n * @notice Interface implemented by `PoolRegistry`.\\n */\\ninterface PoolRegistryInterface {\\n    /**\\n     * @notice Struct for a Venus interest rate pool.\\n     */\\n    struct VenusPool {\\n        string name;\\n        address creator;\\n        address comptroller;\\n        uint256 blockPosted;\\n        uint256 timestampPosted;\\n    }\\n\\n    /**\\n     * @notice Struct for a Venus interest rate pool metadata.\\n     */\\n    struct VenusPoolMetaData {\\n        string category;\\n        string logoURL;\\n        string description;\\n    }\\n\\n    /// @notice Get all pools in PoolRegistry\\n    function getAllPools() external view returns (VenusPool[] memory);\\n\\n    /// @notice Get a pool by comptroller address\\n    function getPoolByComptroller(address comptroller) external view returns (VenusPool memory);\\n\\n    /// @notice Get the address of the VToken contract in the Pool where the underlying token is the provided asset\\n    function getVTokenForAsset(address comptroller, address asset) external view returns (address);\\n\\n    /// @notice Get the addresss of the Pools supported that include a market for the provided asset\\n    function getPoolsSupportedByAsset(address asset) external view returns (address[] memory);\\n\\n    /// @notice Get the metadata of a Pool by comptroller address\\n    function getVenusPoolMetadata(address comptroller) external view returns (VenusPoolMetaData memory);\\n}\\n\",\"keccak256\":\"0x7b39cda3b372a686501ce3c2aad288c6af410148110318249d75d4516729c92c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\n\\nimport { ExponentialNoError } from \\\"../ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"../VToken.sol\\\";\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"../MaxLoopsLimitHelper.sol\\\";\\nimport { RewardsDistributorStorage } from \\\"./RewardsDistributorStorage.sol\\\";\\n\\n/**\\n * @title `RewardsDistributor`\\n * @author Venus\\n * @notice Contract used to configure, track and distribute rewards to users based on their actions (borrows and supplies) in the protocol.\\n * Users can receive additional rewards through a `RewardsDistributor`. Each `RewardsDistributor` proxy is initialized with a specific reward\\n * token and `Comptroller`, which can then distribute the reward token to users that supply or borrow in the associated pool.\\n * Authorized users can set the reward token borrow and supply speeds for each market in the pool. This sets a fixed amount of reward\\n * token to be released each slot (block or second) for borrowers and suppliers, which is distributed based on a user\\u2019s percentage of the borrows or supplies\\n * respectively. The owner can also set up reward distributions to contributor addresses (distinct from suppliers and borrowers) by setting\\n * their contributor reward token speed, which similarly allocates a fixed amount of reward token per slot (block or second).\\n *\\n * The owner has the ability to transfer any amount of reward tokens held by the contract to any other address. Rewards are not distributed\\n * automatically and must be claimed by a user calling `claimRewardToken()`. Users should be aware that it is up to the owner and other centralized\\n * entities to ensure that the `RewardsDistributor` holds enough tokens to distribute the accumulated rewards of users and contributors.\\n */\\ncontract RewardsDistributor is\\n    ExponentialNoError,\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    MaxLoopsLimitHelper,\\n    RewardsDistributorStorage,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    /// @notice The initial REWARD TOKEN index for a market\\n    uint224 public constant INITIAL_INDEX = 1e36;\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a supplier\\n    event DistributedSupplierRewardToken(\\n        VToken indexed vToken,\\n        address indexed supplier,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenSupplyIndex\\n    );\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a borrower\\n    event DistributedBorrowerRewardToken(\\n        VToken indexed vToken,\\n        address indexed borrower,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenBorrowIndex\\n    );\\n\\n    /// @notice Emitted when a new supply-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenSupplySpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when a new borrow-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenBorrowSpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when REWARD TOKEN is granted by admin\\n    event RewardTokenGranted(address indexed recipient, uint256 amount);\\n\\n    /// @notice Emitted when a new REWARD TOKEN speed is set for a contributor\\n    event ContributorRewardTokenSpeedUpdated(address indexed contributor, uint256 newSpeed);\\n\\n    /// @notice Emitted when a market is initialized\\n    event MarketInitialized(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token supply index is updated\\n    event RewardTokenSupplyIndexUpdated(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token borrow index is updated\\n    event RewardTokenBorrowIndexUpdated(address indexed vToken, Exp marketBorrowIndex);\\n\\n    /// @notice Emitted when a reward for contributor is updated\\n    event ContributorRewardsUpdated(address indexed contributor, uint256 rewardAccrued);\\n\\n    /// @notice Emitted when a reward token last rewarding block for supply is updated\\n    event SupplyLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding block for borrow is updated\\n    event BorrowLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for supply is updated\\n    event SupplyLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for borrow is updated\\n    event BorrowLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    modifier onlyComptroller() {\\n        require(address(comptroller) == msg.sender, \\\"Only comptroller can call this function\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice RewardsDistributor initializer\\n     * @dev Initializes the deployer to owner\\n     * @param comptroller_ Comptroller to attach the reward distributor to\\n     * @param rewardToken_ Reward token to distribute\\n     * @param loopsLimit_ Maximum number of iterations for the loops in this contract\\n     * @param accessControlManager_ AccessControlManager contract address\\n     */\\n    function initialize(\\n        Comptroller comptroller_,\\n        IERC20Upgradeable rewardToken_,\\n        uint256 loopsLimit_,\\n        address accessControlManager_\\n    ) external initializer {\\n        comptroller = comptroller_;\\n        rewardToken = rewardToken_;\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n\\n        _setMaxLoopsLimit(loopsLimit_);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken\\n     * @param vToken The address of the vToken to be initialized\\n     * @custom:event MarketInitialized emits on success\\n     * @custom:access Only Comptroller\\n     */\\n    function initializeMarket(address vToken) external onlyComptroller {\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        isTimeBased\\n            ? _initializeMarketTimestampBased(vToken, blockNumberOrTimestamp)\\n            : _initializeMarketBlockBased(vToken, safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\"));\\n\\n        emit MarketInitialized(vToken);\\n    }\\n\\n    /*** Reward Token Distribution ***/\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them\\n     *         Borrowers will begin to accrue after the first interaction with the protocol.\\n     * @dev This function should only be called when the user has a borrow position in the market\\n     *      (e.g. Comptroller.preBorrowHook, and Comptroller.preRepayHook)\\n     *      We avoid an external call to check if they are in the market to save gas because this function is called in many places\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function distributeBorrowerRewardToken(\\n        address vToken,\\n        address borrower,\\n        Exp memory marketBorrowIndex\\n    ) external onlyComptroller {\\n        _distributeBorrowerRewardToken(vToken, borrower, marketBorrowIndex);\\n    }\\n\\n    function updateRewardTokenSupplyIndex(address vToken) external onlyComptroller {\\n        _updateRewardTokenSupplyIndex(vToken);\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the recipient\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all\\n     * @param recipient The address of the recipient to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     */\\n    function grantRewardToken(address recipient, uint256 amount) external onlyOwner {\\n        uint256 amountLeft = _grantRewardToken(recipient, amount);\\n        require(amountLeft == 0, \\\"insufficient rewardToken for grant\\\");\\n        emit RewardTokenGranted(recipient, amount);\\n    }\\n\\n    function updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) external onlyComptroller {\\n        _updateRewardTokenBorrowIndex(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN borrow and supply speeds for the specified markets\\n     * @param vTokens The markets whose REWARD TOKEN speed to update\\n     * @param supplySpeeds New supply-side REWARD TOKEN speed for the corresponding market\\n     * @param borrowSpeeds New borrow-side REWARD TOKEN speed for the corresponding market\\n     */\\n    function setRewardTokenSpeeds(\\n        VToken[] memory vTokens,\\n        uint256[] memory supplySpeeds,\\n        uint256[] memory borrowSpeeds\\n    ) external {\\n        _checkAccessAllowed(\\\"setRewardTokenSpeeds(address[],uint256[],uint256[])\\\");\\n        uint256 numTokens = vTokens.length;\\n        require(numTokens == supplySpeeds.length && numTokens == borrowSpeeds.length, \\\"invalid setRewardTokenSpeeds\\\");\\n\\n        for (uint256 i; i < numTokens; ++i) {\\n            _setRewardTokenSpeed(vTokens[i], supplySpeeds[i], borrowSpeeds[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for the specified markets, used when contract is block based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlocks New supply-side REWARD TOKEN last rewarding block for the corresponding market\\n     * @param borrowLastRewardingBlocks New borrow-side REWARD TOKEN last rewarding block for the corresponding market\\n     */\\n    function setLastRewardingBlocks(\\n        VToken[] calldata vTokens,\\n        uint32[] calldata supplyLastRewardingBlocks,\\n        uint32[] calldata borrowLastRewardingBlocks\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlocks(address[],uint32[],uint32[])\\\");\\n        require(!isTimeBased, \\\"Block-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlocks.length && numTokens == borrowLastRewardingBlocks.length,\\n            \\\"RewardsDistributor::setLastRewardingBlocks invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlock(vTokens[i], supplyLastRewardingBlocks[i], borrowLastRewardingBlocks[i]);\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block timestamp for the specified markets, used when contract is time based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlockTimestamps New supply-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     * @param borrowLastRewardingBlockTimestamps New borrow-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     */\\n    function setLastRewardingBlockTimestamps(\\n        VToken[] calldata vTokens,\\n        uint256[] calldata supplyLastRewardingBlockTimestamps,\\n        uint256[] calldata borrowLastRewardingBlockTimestamps\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])\\\");\\n        require(isTimeBased, \\\"Time-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlockTimestamps.length &&\\n                numTokens == borrowLastRewardingBlockTimestamps.length,\\n            \\\"RewardsDistributor::setLastRewardingBlockTimestamps invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlockTimestamp(\\n                vTokens[i],\\n                supplyLastRewardingBlockTimestamps[i],\\n                borrowLastRewardingBlockTimestamps[i]\\n            );\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single contributor\\n     * @param contributor The contributor whose REWARD TOKEN speed to update\\n     * @param rewardTokenSpeed New REWARD TOKEN speed for contributor\\n     */\\n    function setContributorRewardTokenSpeed(address contributor, uint256 rewardTokenSpeed) external onlyOwner {\\n        // note that REWARD TOKEN speed could be set to 0 to halt liquidity rewards for a contributor\\n        updateContributorRewards(contributor);\\n        if (rewardTokenSpeed == 0) {\\n            // release storage\\n            delete lastContributorBlock[contributor];\\n        } else {\\n            lastContributorBlock[contributor] = getBlockNumberOrTimestamp();\\n        }\\n        rewardTokenContributorSpeeds[contributor] = rewardTokenSpeed;\\n\\n        emit ContributorRewardTokenSpeedUpdated(contributor, rewardTokenSpeed);\\n    }\\n\\n    function distributeSupplierRewardToken(address vToken, address supplier) external onlyComptroller {\\n        _distributeSupplierRewardToken(vToken, supplier);\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in all markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     */\\n    function claimRewardToken(address holder) external {\\n        return claimRewardToken(holder, comptroller.getAllMarkets());\\n    }\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Calculate additional accrued REWARD TOKEN for a contributor since last accrual\\n     * @param contributor The address to calculate contributor rewards for\\n     */\\n    function updateContributorRewards(address contributor) public {\\n        uint256 rewardTokenSpeed = rewardTokenContributorSpeeds[contributor];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n        uint256 deltaBlocksOrTimestamp = sub_(blockNumberOrTimestamp, lastContributorBlock[contributor]);\\n        if (deltaBlocksOrTimestamp > 0 && rewardTokenSpeed > 0) {\\n            uint256 newAccrued = mul_(deltaBlocksOrTimestamp, rewardTokenSpeed);\\n            uint256 contributorAccrued = add_(rewardTokenAccrued[contributor], newAccrued);\\n\\n            rewardTokenAccrued[contributor] = contributorAccrued;\\n            lastContributorBlock[contributor] = blockNumberOrTimestamp;\\n\\n            emit ContributorRewardsUpdated(contributor, rewardTokenAccrued[contributor]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in the specified markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     * @param vTokens The list of markets to claim REWARD TOKEN in\\n     */\\n    function claimRewardToken(address holder, VToken[] memory vTokens) public {\\n        uint256 vTokensCount = vTokens.length;\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            VToken vToken = vTokens[i];\\n            require(comptroller.isMarketListed(vToken), \\\"market must be listed\\\");\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n            _distributeBorrowerRewardToken(address(vToken), holder, borrowIndex);\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n            _distributeSupplierRewardToken(address(vToken), holder);\\n        }\\n        rewardTokenAccrued[holder] = _grantRewardToken(holder, rewardTokenAccrued[holder]);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for a single market.\\n     * @param vToken market's whose reward token last rewarding block to be updated\\n     * @param supplyLastRewardingBlock New supply-side REWARD TOKEN last rewarding block for market\\n     * @param borrowLastRewardingBlock New borrow-side REWARD TOKEN last rewarding block for market\\n     */\\n    function _setLastRewardingBlock(\\n        VToken vToken,\\n        uint32 supplyLastRewardingBlock,\\n        uint32 borrowLastRewardingBlock\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockNumber = getBlockNumberOrTimestamp();\\n\\n        require(supplyLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n        require(borrowLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n\\n        uint32 currentSupplyLastRewardingBlock = rewardTokenSupplyState[address(vToken)].lastRewardingBlock;\\n        uint32 currentBorrowLastRewardingBlock = rewardTokenBorrowState[address(vToken)].lastRewardingBlock;\\n\\n        require(\\n            currentSupplyLastRewardingBlock == 0 || currentSupplyLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlock == 0 || currentBorrowLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlock != supplyLastRewardingBlock) {\\n            rewardTokenSupplyState[address(vToken)].lastRewardingBlock = supplyLastRewardingBlock;\\n            emit SupplyLastRewardingBlockUpdated(address(vToken), supplyLastRewardingBlock);\\n        }\\n\\n        if (currentBorrowLastRewardingBlock != borrowLastRewardingBlock) {\\n            rewardTokenBorrowState[address(vToken)].lastRewardingBlock = borrowLastRewardingBlock;\\n            emit BorrowLastRewardingBlockUpdated(address(vToken), borrowLastRewardingBlock);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding timestamp for a single market.\\n     * @param vToken market's whose reward token last rewarding timestamp to be updated\\n     * @param supplyLastRewardingBlockTimestamp New supply-side REWARD TOKEN last rewarding timestamp for market\\n     * @param borrowLastRewardingBlockTimestamp New borrow-side REWARD TOKEN last rewarding timestamp for market\\n     */\\n    function _setLastRewardingBlockTimestamp(\\n        VToken vToken,\\n        uint256 supplyLastRewardingBlockTimestamp,\\n        uint256 borrowLastRewardingBlockTimestamp\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockTimestamp = getBlockNumberOrTimestamp();\\n\\n        require(\\n            supplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n        require(\\n            borrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n\\n        uint256 currentSupplyLastRewardingBlockTimestamp = rewardTokenSupplyStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n        uint256 currentBorrowLastRewardingBlockTimestamp = rewardTokenBorrowStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n\\n        require(\\n            currentSupplyLastRewardingBlockTimestamp == 0 || currentSupplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlockTimestamp == 0 || currentBorrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlockTimestamp != supplyLastRewardingBlockTimestamp) {\\n            rewardTokenSupplyStateTimeBased[address(vToken)].lastRewardingTimestamp = supplyLastRewardingBlockTimestamp;\\n            emit SupplyLastRewardingBlockTimestampUpdated(address(vToken), supplyLastRewardingBlockTimestamp);\\n        }\\n\\n        if (currentBorrowLastRewardingBlockTimestamp != borrowLastRewardingBlockTimestamp) {\\n            rewardTokenBorrowStateTimeBased[address(vToken)].lastRewardingTimestamp = borrowLastRewardingBlockTimestamp;\\n            emit BorrowLastRewardingBlockTimestampUpdated(address(vToken), borrowLastRewardingBlockTimestamp);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single market.\\n     * @param vToken market's whose reward token rate to be updated\\n     * @param supplySpeed New supply-side REWARD TOKEN speed for market\\n     * @param borrowSpeed New borrow-side REWARD TOKEN speed for market\\n     */\\n    function _setRewardTokenSpeed(VToken vToken, uint256 supplySpeed, uint256 borrowSpeed) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        if (rewardTokenSupplySpeeds[address(vToken)] != supplySpeed) {\\n            // Supply speed updated so let's update supply state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n\\n            // Update speed and emit event\\n            rewardTokenSupplySpeeds[address(vToken)] = supplySpeed;\\n            emit RewardTokenSupplySpeedUpdated(vToken, supplySpeed);\\n        }\\n\\n        if (rewardTokenBorrowSpeeds[address(vToken)] != borrowSpeed) {\\n            // Borrow speed updated so let's update borrow state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n\\n            // Update speed and emit event\\n            rewardTokenBorrowSpeeds[address(vToken)] = borrowSpeed;\\n            emit RewardTokenBorrowSpeedUpdated(vToken, borrowSpeed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculate REWARD TOKEN accrued by a supplier and possibly transfer it to them.\\n     * @param vToken The market in which the supplier is interacting\\n     * @param supplier The address of the supplier to distribute REWARD TOKEN to\\n     */\\n    function _distributeSupplierRewardToken(address vToken, address supplier) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n        uint256 supplierIndex = rewardTokenSupplierIndex[vToken][supplier];\\n\\n        // Update supplier's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenSupplierIndex[vToken][supplier] = supplyIndex;\\n\\n        if (supplierIndex == 0 && supplyIndex >= INITIAL_INDEX) {\\n            // Covers the case where users supplied tokens before the market's supply state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when supplier rewards were first\\n            // set for the market.\\n            supplierIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per vToken accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(supplyIndex, supplierIndex) });\\n\\n        uint256 supplierTokens = VToken(vToken).balanceOf(supplier);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerVToken\\n        uint256 supplierDelta = mul_(supplierTokens, deltaIndex);\\n\\n        uint256 supplierAccrued = add_(rewardTokenAccrued[supplier], supplierDelta);\\n        rewardTokenAccrued[supplier] = supplierAccrued;\\n\\n        emit DistributedSupplierRewardToken(VToken(vToken), supplier, supplierDelta, supplierAccrued, supplyIndex);\\n    }\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them.\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function _distributeBorrowerRewardToken(address vToken, address borrower, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n        uint256 borrowerIndex = rewardTokenBorrowerIndex[vToken][borrower];\\n\\n        // Update borrowers's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenBorrowerIndex[vToken][borrower] = borrowIndex;\\n\\n        if (borrowerIndex == 0 && borrowIndex >= INITIAL_INDEX) {\\n            // Covers the case where users borrowed tokens before the market's borrow state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when borrower rewards were first\\n            // set for the market.\\n            borrowerIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per borrowed unit accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(borrowIndex, borrowerIndex) });\\n\\n        uint256 borrowerAmount = div_(VToken(vToken).borrowBalanceStored(borrower), marketBorrowIndex);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerBorrowedUnit\\n        if (borrowerAmount != 0) {\\n            uint256 borrowerDelta = mul_(borrowerAmount, deltaIndex);\\n\\n            uint256 borrowerAccrued = add_(rewardTokenAccrued[borrower], borrowerDelta);\\n            rewardTokenAccrued[borrower] = borrowerAccrued;\\n\\n            emit DistributedBorrowerRewardToken(VToken(vToken), borrower, borrowerDelta, borrowerAccrued, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the user.\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all.\\n     * @param user The address of the user to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     * @return The amount of REWARD TOKEN which was NOT transferred to the user\\n     */\\n    function _grantRewardToken(address user, uint256 amount) internal returns (uint256) {\\n        uint256 rewardTokenRemaining = rewardToken.balanceOf(address(this));\\n        if (amount > 0 && amount <= rewardTokenRemaining) {\\n            rewardToken.safeTransfer(user, amount);\\n            return 0;\\n        }\\n        return amount;\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the supply index\\n     * @param vToken The market whose supply index to update\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenSupplyIndex(address vToken) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplySpeed = rewardTokenSupplySpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? supplyStateTimeBased.lastRewardingTimestamp\\n            : uint256(supplyState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? supplyStateTimeBased.timestamp : uint256(supplyState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && supplySpeed > 0) {\\n            uint256 supplyTokens = VToken(vToken).totalSupply();\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, supplySpeed);\\n            Double memory ratio = supplyTokens > 0\\n                ? fraction(accruedSinceUpdate, supplyTokens)\\n                : Double({ mantissa: 0 });\\n            uint224 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: supplyIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                supplyStateTimeBased.index = index;\\n                supplyStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                supplyState.index = index;\\n                supplyState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            isTimeBased ? supplyStateTimeBased.timestamp = blockNumberOrTimestamp : supplyState.block = uint32(\\n                blockNumberOrTimestamp\\n            );\\n        }\\n\\n        emit RewardTokenSupplyIndexUpdated(vToken);\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the borrow index\\n     * @param vToken The market whose borrow index to update\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowSpeed = rewardTokenBorrowSpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? borrowStateTimeBased.lastRewardingTimestamp\\n            : uint256(borrowState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? borrowStateTimeBased.timestamp : uint256(borrowState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && borrowSpeed > 0) {\\n            uint256 borrowAmount = div_(VToken(vToken).totalBorrows(), marketBorrowIndex);\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, borrowSpeed);\\n            Double memory ratio = borrowAmount > 0\\n                ? fraction(accruedSinceUpdate, borrowAmount)\\n                : Double({ mantissa: 0 });\\n            uint224 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: borrowIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                borrowStateTimeBased.index = index;\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.index = index;\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            if (isTimeBased) {\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        }\\n\\n        emit RewardTokenBorrowIndexUpdated(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is block-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockNumber current block number\\n     */\\n    function _initializeMarketBlockBased(address vToken, uint32 blockNumber) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block numbers\\n         */\\n        supplyState.block = borrowState.block = blockNumber;\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is time-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockTimestamp current block timestamp\\n     */\\n    function _initializeMarketTimestampBased(address vToken, uint256 blockTimestamp) internal {\\n        TimeBasedRewardToken storage supplyState = rewardTokenSupplyStateTimeBased[vToken];\\n        TimeBasedRewardToken storage borrowState = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block timestamp\\n         */\\n        supplyState.timestamp = borrowState.timestamp = blockTimestamp;\\n    }\\n}\\n\",\"keccak256\":\"0x3cc824e59c923cfe25c4f1a875959b7e9410cde8e73cd405de13f301298c697f\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\n\\n/**\\n * @title RewardsDistributorStorage\\n * @author Venus\\n * @dev Storage for RewardsDistributor\\n */\\ncontract RewardsDistributorStorage {\\n    struct RewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block number the index was last updated at\\n        uint32 block;\\n        // The block number at which to stop rewards\\n        uint32 lastRewardingBlock;\\n    }\\n\\n    struct TimeBasedRewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block timestamp the index was last updated at\\n        uint256 timestamp;\\n        // The block timestamp at which to stop rewards\\n        uint256 lastRewardingTimestamp;\\n    }\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => RewardToken) public rewardTokenSupplyState;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each supplier as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenSupplierIndex;\\n\\n    /// @notice The REWARD TOKEN accrued but not yet transferred to each user\\n    mapping(address => uint256) public rewardTokenAccrued;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding borrow market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenBorrowSpeeds;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding supply market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenSupplySpeeds;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => RewardToken) public rewardTokenBorrowState;\\n\\n    /// @notice The portion of REWARD TOKEN that each contributor receives per slot (block or second)\\n    mapping(address => uint256) public rewardTokenContributorSpeeds;\\n\\n    /// @notice Last slot (block or second) at which a contributor's REWARD TOKEN rewards have been allocated\\n    mapping(address => uint256) public lastContributorBlock;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each borrower as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenBorrowerIndex;\\n\\n    Comptroller internal comptroller;\\n\\n    IERC20Upgradeable public rewardToken;\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenSupplyStateTimeBased;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenBorrowStateTimeBased;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[37] private __gap;\\n}\\n\",\"keccak256\":\"0x70e5015a78a2acf95277949c8b4796e10b9ac194130be006d5e5217e158070c0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VToken.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IProtocolShareReserve } from \\\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\\\";\\n\\nimport { VTokenInterface } from \\\"./VTokenInterfaces.sol\\\";\\nimport { ComptrollerInterface, ComptrollerViewInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { TokenErrorReporter } from \\\"./ErrorReporter.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title VToken\\n * @author Venus\\n * @notice Each asset that is supported by a pool is integrated through an instance of the `VToken` contract. As outlined in the protocol overview,\\n * each isolated pool creates its own `vToken` corresponding to an asset. Within a given pool, each included `vToken` is referred to as a market of\\n * the pool. The main actions a user regularly interacts with in a market are:\\n\\n- mint/redeem of vTokens;\\n- transfer of vTokens;\\n- borrow/repay a loan on an underlying asset;\\n- liquidate a borrow or liquidate/heal an account.\\n\\n * A user supplies the underlying asset to a pool by minting `vTokens`, where the corresponding `vToken` amount is determined by the `exchangeRate`.\\n * The `exchangeRate` will change over time, dependent on a number of factors, some of which accrue interest. Additionally, once users have minted\\n * `vToken` in a pool, they can borrow any asset in the isolated pool by using their `vToken` as collateral. In order to borrow an asset or use a `vToken`\\n * as collateral, the user must be entered into each corresponding market (else, the `vToken` will not be considered collateral for a borrow). Note that\\n * a user may borrow up to a portion of their collateral determined by the market\\u2019s collateral factor. However, if their borrowed amount exceeds an amount\\n * calculated using the market\\u2019s corresponding liquidation threshold, the borrow is eligible for liquidation. When a user repays a borrow, they must also\\n * pay off interest accrued on the borrow.\\n * \\n * The Venus protocol includes unique mechanisms for healing an account and liquidating an account. These actions are performed in the `Comptroller`\\n * and consider all borrows and collateral for which a given account is entered within a market. These functions may only be called on an account with a\\n * total collateral amount that is no larger than a universal `minLiquidatableCollateral` value, which is used for all markets within a `Comptroller`.\\n * Both functions settle all of an account\\u2019s borrows, but `healAccount()` may add `badDebt` to a vToken. For more detail, see the description of\\n * `healAccount()` and `liquidateAccount()` in the `Comptroller` summary section below.\\n */\\ncontract VToken is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    VTokenInterface,\\n    ExponentialNoError,\\n    TokenErrorReporter,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    uint256 internal constant DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA = 5e16; // 5%\\n\\n    // Maximum fraction of interest that can be set aside for reserves\\n    uint256 internal constant MAX_RESERVE_FACTOR_MANTISSA = 1e18;\\n\\n    // Maximum borrow rate that can ever be applied per slot(block or second)\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 internal immutable MAX_BORROW_RATE_MANTISSA;\\n\\n    /**\\n     * Reentrancy Guard **\\n     */\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     */\\n    modifier nonReentrant() {\\n        require(_notEntered, \\\"re-entered\\\");\\n        _notEntered = false;\\n        _;\\n        _notEntered = true; // get a gas-refund post-Istanbul\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @param maxBorrowRateMantissa_ The maximum value of borrowing rate mantissa\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(\\n        bool timeBased_,\\n        uint256 blocksPerYear_,\\n        uint256 maxBorrowRateMantissa_\\n    ) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        require(maxBorrowRateMantissa_ <= 1e18, \\\"Max borrow rate must be <= 1e18\\\");\\n\\n        MAX_BORROW_RATE_MANTISSA = maxBorrowRateMantissa_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice Construct a new money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     * @custom:error ZeroAddressNotAllowed is thrown when admin address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     */\\n    function initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) external initializer {\\n        ensureNonzeroAddress(admin_);\\n\\n        // Initialize the market\\n        _initialize(\\n            underlying_,\\n            comptroller_,\\n            interestRateModel_,\\n            initialExchangeRateMantissa_,\\n            name_,\\n            symbol_,\\n            decimals_,\\n            admin_,\\n            accessControlManager_,\\n            riskManagement,\\n            reserveFactorMantissa_\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `msg.sender` to `dst`\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transfer(address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `src` to `dst`\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transferFrom(address src, address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, src, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Approve `spender` to transfer up to `amount` from `src`\\n     * @dev This will overwrite the approval amount for `spender`\\n     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\\n     * @param spender The address of the account which may transfer tokens\\n     * @param amount The number of tokens that are approved (uint256.max means infinite)\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function approve(address spender, uint256 amount) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        transferAllowances[src][spender] = amount;\\n        emit Approval(src, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Increase approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param addedValue The number of additional tokens spender can transfer\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 newAllowance = transferAllowances[src][spender];\\n        newAllowance += addedValue;\\n        transferAllowances[src][spender] = newAllowance;\\n\\n        emit Approval(src, spender, newAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Decreases approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param subtractedValue The number of tokens to remove from total approval\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 currentAllowance = transferAllowances[src][spender];\\n        require(currentAllowance >= subtractedValue, \\\"decreased allowance below zero\\\");\\n        unchecked {\\n            currentAllowance -= subtractedValue;\\n        }\\n\\n        transferAllowances[src][spender] = currentAllowance;\\n\\n        emit Approval(src, spender, currentAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Get the underlying balance of the `owner`\\n     * @dev This also accrues interest in a transaction\\n     * @param owner The address of the account to query\\n     * @return amount The amount of underlying owned by `owner`\\n     */\\n    function balanceOfUnderlying(address owner) external override returns (uint256) {\\n        Exp memory exchangeRate = Exp({ mantissa: exchangeRateCurrent() });\\n        return mul_ScalarTruncate(exchangeRate, accountTokens[owner]);\\n    }\\n\\n    /**\\n     * @notice Returns the current total borrows plus accrued interest\\n     * @return totalBorrows The total borrows with interest\\n     */\\n    function totalBorrowsCurrent() external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return totalBorrows;\\n    }\\n\\n    /**\\n     * @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\\n     * @param account The address whose balance should be calculated after updating borrowIndex\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceCurrent(address account) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Sender supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function mint(uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, msg.sender, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender calls on-behalf of minter. minter supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param minter User whom the supply will be attributed to\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when minter address is zero\\n     */\\n    function mintBehalf(address minter, uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(minter);\\n\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, minter, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for the underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function redeem(uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer The user on behalf of whom to redeem\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for a specified amount of underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     */\\n    function redeemUnderlying(uint256 redeemAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems underlying assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer, on behalf of whom to redeem\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemUnderlyingBehalf(\\n        address redeemer,\\n        uint256 redeemAmount\\n    ) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets from the protocol to their own address\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function borrow(uint256 borrowAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _borrowFresh(msg.sender, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the borrower using `comptroller.updateDelegate`\\n     * @param borrower The borrower, on behalf of whom to borrow\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error DelegateNotApproved is thrown if caller is not approved delegate\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function borrowBehalf(address borrower, uint256 borrowAmount) external override returns (uint256) {\\n        _ensureSenderIsDelegateOf(borrower);\\n        accrueInterest();\\n\\n        _borrowFresh(borrower, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays their own borrow\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrow(uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, msg.sender, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays a borrow belonging to borrower\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, borrower, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Not restricted\\n     */\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external override returns (uint256) {\\n        _liquidateBorrow(msg.sender, borrower, repayAmount, vTokenCollateral, false);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice sets protocol share accumulated from liquidations\\n     * @dev must be equal or less than liquidation incentive - 1\\n     * @param newProtocolSeizeShareMantissa_ new protocol share mantissa\\n     * @custom:event Emits NewProtocolSeizeShare event on success\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error ProtocolSeizeShareTooBig is thrown when the new seize share is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setProtocolSeizeShare(uint256 newProtocolSeizeShareMantissa_) external {\\n        _checkAccessAllowed(\\\"setProtocolSeizeShare(uint256)\\\");\\n        uint256 liquidationIncentive = ComptrollerViewInterface(address(comptroller)).liquidationIncentiveMantissa();\\n        if (newProtocolSeizeShareMantissa_ + MANTISSA_ONE > liquidationIncentive) {\\n            revert ProtocolSeizeShareTooBig();\\n        }\\n\\n        uint256 oldProtocolSeizeShareMantissa = protocolSeizeShareMantissa;\\n        protocolSeizeShareMantissa = newProtocolSeizeShareMantissa_;\\n        emit NewProtocolSeizeShare(oldProtocolSeizeShareMantissa, newProtocolSeizeShareMantissa_);\\n    }\\n\\n    /**\\n     * @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\\n     * @dev Admin function to accrue interest and set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     * @custom:event Emits NewReserveFactor event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error SetReserveFactorBoundsCheck is thrown when the new reserve factor is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external override nonReentrant {\\n        _checkAccessAllowed(\\\"setReserveFactor(uint256)\\\");\\n\\n        accrueInterest();\\n        _setReserveFactorFresh(newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Accrues interest and reduces reserves by transferring to the protocol reserve contract\\n     * @dev Gracefully return if reserves already reduced in accrueInterest\\n     * @param reduceAmount Amount of reduction to reserves\\n     * @custom:event Emits ReservesReduced event; may emit AccrueInterest\\n     * @custom:error ReduceReservesCashNotAvailable is thrown when the vToken does not have sufficient cash\\n     * @custom:error ReduceReservesCashValidation is thrown when trying to withdraw more cash than the reserves have\\n     * @custom:access Not restricted\\n     */\\n    function reduceReserves(uint256 reduceAmount) external override nonReentrant {\\n        accrueInterest();\\n        if (reduceReservesBlockNumber == getBlockNumberOrTimestamp()) return;\\n        _reduceReservesFresh(reduceAmount);\\n    }\\n\\n    /**\\n     * @notice The sender adds to reserves.\\n     * @param addAmount The amount of underlying token to add as reserves\\n     * @custom:event Emits ReservesAdded event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function addReserves(uint256 addAmount) external override nonReentrant {\\n        accrueInterest();\\n        _addReservesFresh(addAmount);\\n    }\\n\\n    /**\\n     * @notice accrues interest and updates the interest rate model using _setInterestRateModelFresh\\n     * @dev Admin function to accrue interest and update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     * @custom:event Emits NewMarketInterestRateModel event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external override {\\n        _checkAccessAllowed(\\\"setInterestRateModel(address)\\\");\\n\\n        accrueInterest();\\n        _setInterestRateModelFresh(newInterestRateModel);\\n    }\\n\\n    /**\\n     * @notice Repays a certain amount of debt, treats the rest of the borrow as bad debt, essentially\\n     *   \\\"forgiving\\\" the borrower. Healing is a situation that should rarely happen. However, some pools\\n     *   may list risky assets or be configured improperly \\u2013 we want to still handle such cases gracefully.\\n     *   We assume that Comptroller does the seizing, so this function is only available to Comptroller.\\n     * @dev This function does not call any Comptroller hooks (like \\\"healAllowed\\\"), because we assume\\n     *   the Comptroller does all the necessary checks before calling this function.\\n     * @param payer account who repays the debt\\n     * @param borrower account to heal\\n     * @param repayAmount amount to repay\\n     * @custom:event Emits RepayBorrow, BadDebtIncreased events; may emit AccrueInterest\\n     * @custom:error HealBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:access Only Comptroller\\n     */\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external override nonReentrant {\\n        if (repayAmount != 0) {\\n            comptroller.preRepayHook(address(this), borrower);\\n        }\\n\\n        if (msg.sender != address(comptroller)) {\\n            revert HealBorrowUnauthorized();\\n        }\\n\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 totalBorrowsNew = totalBorrows;\\n\\n        uint256 actualRepayAmount;\\n        if (repayAmount != 0) {\\n            // _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n            // We violate checks-effects-interactions here to account for tokens that take transfer fees\\n            actualRepayAmount = _doTransferIn(payer, repayAmount);\\n            totalBorrowsNew = totalBorrowsNew - actualRepayAmount;\\n            emit RepayBorrow(\\n                payer,\\n                borrower,\\n                actualRepayAmount,\\n                accountBorrowsPrev - actualRepayAmount,\\n                totalBorrowsNew\\n            );\\n        }\\n\\n        // The transaction will fail if trying to repay too much\\n        uint256 badDebtDelta = accountBorrowsPrev - actualRepayAmount;\\n        if (badDebtDelta != 0) {\\n            uint256 badDebtOld = badDebt;\\n            uint256 badDebtNew = badDebtOld + badDebtDelta;\\n            totalBorrowsNew = totalBorrowsNew - badDebtDelta;\\n            badDebt = badDebtNew;\\n\\n            // We treat healing as \\\"repayment\\\", where vToken is the payer\\n            emit RepayBorrow(address(this), borrower, badDebtDelta, 0, totalBorrowsNew);\\n            emit BadDebtIncreased(borrower, badDebtDelta, badDebtOld, badDebtNew);\\n        }\\n\\n        accountBorrows[borrower].principal = 0;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        emit HealBorrow(payer, borrower, repayAmount);\\n    }\\n\\n    /**\\n     * @notice The extended version of liquidations, callable only by Comptroller. May skip\\n     *  the close factor check. The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error ForceLiquidateBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Only Comptroller\\n     */\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        if (msg.sender != address(comptroller)) {\\n            revert ForceLiquidateBorrowUnauthorized();\\n        }\\n        _liquidateBorrow(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Will fail unless called by another vToken during the process of liquidation.\\n     *  It's absolutely critical to use msg.sender as the borrowed vToken and not a parameter.\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     * @custom:event Emits Transfer, ReservesAdded events\\n     * @custom:error LiquidateSeizeLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:access Not restricted\\n     */\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external override nonReentrant {\\n        _seize(msg.sender, liquidator, borrower, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Updates bad debt\\n     * @dev Called only when bad debt is recovered from auction\\n     * @param recoveredAmount_ The amount of bad debt recovered\\n     * @custom:event Emits BadDebtRecovered event\\n     * @custom:access Only Shortfall contract\\n     */\\n    function badDebtRecovered(uint256 recoveredAmount_) external {\\n        require(msg.sender == shortfall, \\\"only shortfall contract can update bad debt\\\");\\n        require(recoveredAmount_ <= badDebt, \\\"more than bad debt recovered from auction\\\");\\n\\n        uint256 badDebtOld = badDebt;\\n        uint256 badDebtNew = badDebtOld - recoveredAmount_;\\n        badDebt = badDebtNew;\\n\\n        emit BadDebtRecovered(badDebtOld, badDebtNew);\\n    }\\n\\n    /**\\n     * @notice Sets protocol share reserve contract address\\n     * @param protocolShareReserve_ The address of the protocol share reserve contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setProtocolShareReserve(address payable protocolShareReserve_) external onlyOwner {\\n        _setProtocolShareReserve(protocolShareReserve_);\\n    }\\n\\n    /**\\n     * @notice Sets shortfall contract address\\n     * @param shortfall_ The address of the shortfall contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setShortfallContract(address shortfall_) external onlyOwner {\\n        _setShortfallContract(shortfall_);\\n    }\\n\\n    /**\\n     * @notice A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)\\n     * @param token The address of the ERC-20 token to sweep\\n     * @custom:access Only Governance\\n     */\\n    function sweepToken(IERC20Upgradeable token) external override {\\n        require(msg.sender == owner(), \\\"VToken::sweepToken: only admin can sweep tokens\\\");\\n        require(address(token) != underlying, \\\"VToken::sweepToken: can not sweep underlying token\\\");\\n        uint256 balance = token.balanceOf(address(this));\\n        token.safeTransfer(owner(), balance);\\n\\n        emit SweepToken(address(token));\\n    }\\n\\n    /**\\n     * @notice A public function to set new threshold of slot(block or second) difference after which funds will be sent to the protocol share reserve\\n     * @param _newReduceReservesBlockOrTimestampDelta slot(block or second) difference value\\n     * @custom:access Only Governance\\n     */\\n    function setReduceReservesBlockDelta(uint256 _newReduceReservesBlockOrTimestampDelta) external {\\n        _checkAccessAllowed(\\\"setReduceReservesBlockDelta(uint256)\\\");\\n        require(_newReduceReservesBlockOrTimestampDelta > 0, \\\"Invalid Input\\\");\\n        emit NewReduceReservesBlockDelta(reduceReservesBlockDelta, _newReduceReservesBlockOrTimestampDelta);\\n        reduceReservesBlockDelta = _newReduceReservesBlockOrTimestampDelta;\\n    }\\n\\n    /**\\n     * @notice Get the current allowance from `owner` for `spender`\\n     * @param owner The address of the account which owns the tokens to be spent\\n     * @param spender The address of the account which may transfer tokens\\n     * @return amount The number of tokens allowed to be spent (type(uint256).max means infinite)\\n     */\\n    function allowance(address owner, address spender) external view override returns (uint256) {\\n        return transferAllowances[owner][spender];\\n    }\\n\\n    /**\\n     * @notice Get the token balance of the `owner`\\n     * @param owner The address of the account to query\\n     * @return amount The number of tokens owned by `owner`\\n     */\\n    function balanceOf(address owner) external view override returns (uint256) {\\n        return accountTokens[owner];\\n    }\\n\\n    /**\\n     * @notice Get a snapshot of the account's balances, and the cached exchange rate\\n     * @dev This is used by comptroller to more efficiently perform liquidity checks.\\n     * @param account Address of the account to snapshot\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return vTokenBalance User's balance of vTokens\\n     * @return borrowBalance Amount owed in terms of underlying\\n     * @return exchangeRate Stored exchange rate\\n     */\\n    function getAccountSnapshot(\\n        address account\\n    )\\n        external\\n        view\\n        override\\n        returns (uint256 error, uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRate)\\n    {\\n        return (NO_ERROR, accountTokens[account], _borrowBalanceStored(account), _exchangeRateStored());\\n    }\\n\\n    /**\\n     * @notice Get cash balance of this vToken in the underlying asset\\n     * @return cash The quantity of underlying asset owned by this contract\\n     */\\n    function getCash() external view override returns (uint256) {\\n        return _getCashPrior();\\n    }\\n\\n    /**\\n     * @notice Returns the current per slot(block or second) borrow interest rate for this vToken\\n     * @return rate The borrow interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function borrowRatePerBlock() external view override returns (uint256) {\\n        return interestRateModel.getBorrowRate(_getCashPrior(), totalBorrows, totalReserves, badDebt);\\n    }\\n\\n    /**\\n     * @notice Returns the current per-slot(block or second) supply interest rate for this v\\n     * @return rate The supply interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function supplyRatePerBlock() external view override returns (uint256) {\\n        return\\n            interestRateModel.getSupplyRate(\\n                _getCashPrior(),\\n                totalBorrows,\\n                totalReserves,\\n                reserveFactorMantissa,\\n                badDebt\\n            );\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceStored(address account) external view override returns (uint256) {\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateStored() external view override returns (uint256) {\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Accrue interest then return the up-to-date exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateCurrent() public override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Applies accrued interest to total borrows and reserves\\n     * @dev This calculates interest accrued from the last checkpointed slot(block or second)\\n     *  up to the current slot(block or second) and writes new checkpoint to storage and\\n     *  reduce spread reserves to protocol share reserve\\n     *  if currentSlot - reduceReservesBlockNumber >= slotDelta\\n     * @return Always NO_ERROR\\n     * @custom:event Emits AccrueInterest event on success\\n     * @custom:access Not restricted\\n     */\\n    function accrueInterest() public virtual override returns (uint256) {\\n        /* Remember the initial block number or timestamp */\\n        uint256 currentSlotNumber = getBlockNumberOrTimestamp();\\n        uint256 accrualSlotNumberPrior = accrualBlockNumber;\\n\\n        /* Short-circuit accumulating 0 interest */\\n        if (accrualSlotNumberPrior == currentSlotNumber) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Read the previous values out of storage */\\n        uint256 cashPrior = _getCashPrior();\\n        uint256 borrowsPrior = totalBorrows;\\n        uint256 reservesPrior = totalReserves;\\n        uint256 borrowIndexPrior = borrowIndex;\\n\\n        /* Calculate the current borrow interest rate */\\n        uint256 borrowRateMantissa = interestRateModel.getBorrowRate(cashPrior, borrowsPrior, reservesPrior, badDebt);\\n        require(borrowRateMantissa <= MAX_BORROW_RATE_MANTISSA, \\\"borrow rate is absurdly high\\\");\\n\\n        /* Calculate the number of slots elapsed since the last accrual */\\n        uint256 slotDelta = currentSlotNumber - accrualSlotNumberPrior;\\n\\n        /*\\n         * Calculate the interest accumulated into borrows and reserves and the new index:\\n         *  simpleInterestFactor = borrowRate * slotDelta\\n         *  interestAccumulated = simpleInterestFactor * totalBorrows\\n         *  totalBorrowsNew = interestAccumulated + totalBorrows\\n         *  totalReservesNew = interestAccumulated * reserveFactor + totalReserves\\n         *  borrowIndexNew = simpleInterestFactor * borrowIndex + borrowIndex\\n         */\\n\\n        Exp memory simpleInterestFactor = mul_(Exp({ mantissa: borrowRateMantissa }), slotDelta);\\n        uint256 interestAccumulated = mul_ScalarTruncate(simpleInterestFactor, borrowsPrior);\\n        uint256 totalBorrowsNew = interestAccumulated + borrowsPrior;\\n        uint256 totalReservesNew = mul_ScalarTruncateAddUInt(\\n            Exp({ mantissa: reserveFactorMantissa }),\\n            interestAccumulated,\\n            reservesPrior\\n        );\\n        uint256 borrowIndexNew = mul_ScalarTruncateAddUInt(simpleInterestFactor, borrowIndexPrior, borrowIndexPrior);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the previously calculated values into storage */\\n        accrualBlockNumber = currentSlotNumber;\\n        borrowIndex = borrowIndexNew;\\n        totalBorrows = totalBorrowsNew;\\n        totalReserves = totalReservesNew;\\n\\n        if (currentSlotNumber - reduceReservesBlockNumber >= reduceReservesBlockDelta) {\\n            reduceReservesBlockNumber = currentSlotNumber;\\n            if (cashPrior < totalReservesNew) {\\n                _reduceReservesFresh(cashPrior);\\n            } else {\\n                _reduceReservesFresh(totalReservesNew);\\n            }\\n        }\\n\\n        /* We emit an AccrueInterest event */\\n        emit AccrueInterest(cashPrior, interestAccumulated, borrowIndexNew, totalBorrowsNew);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice User supplies assets into the market and receives vTokens in exchange\\n     * @dev Assumes interest has already been accrued up to the current block or timestamp\\n     * @param payer The address of the account which is sending the assets for supply\\n     * @param minter The address of the account which is supplying the assets\\n     * @param mintAmount The amount of the underlying asset to supply\\n     */\\n    function _mintFresh(address payer, address minter, uint256 mintAmount) internal {\\n        /* Fail if mint not allowed */\\n        comptroller.preMintHook(address(this), minter, mintAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert MintFreshnessCheck();\\n        }\\n\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         *  We call `_doTransferIn` for the minter and the mintAmount.\\n         *  `_doTransferIn` reverts if anything goes wrong, since we can't be sure if\\n         *  side-effects occurred. The function returns the amount actually transferred,\\n         *  in case of a fee. On success, the vToken holds an additional `actualMintAmount`\\n         *  of cash.\\n         */\\n        uint256 actualMintAmount = _doTransferIn(payer, mintAmount);\\n\\n        /*\\n         * We get the current exchange rate and calculate the number of vTokens to be minted:\\n         *  mintTokens = actualMintAmount / exchangeRate\\n         */\\n\\n        uint256 mintTokens = div_(actualMintAmount, exchangeRate);\\n\\n        /*\\n         * We calculate the new total supply of vTokens and minter token balance, checking for overflow:\\n         *  totalSupplyNew = totalSupply + mintTokens\\n         *  accountTokensNew = accountTokens[minter] + mintTokens\\n         * And write them into storage\\n         */\\n        totalSupply = totalSupply + mintTokens;\\n        uint256 balanceAfter = accountTokens[minter] + mintTokens;\\n        accountTokens[minter] = balanceAfter;\\n\\n        /* We emit a Mint event, and a Transfer event */\\n        emit Mint(minter, actualMintAmount, mintTokens, balanceAfter);\\n        emit Transfer(address(0), minter, mintTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.mintVerify(address(this), minter, actualMintAmount, mintTokens);\\n    }\\n\\n    /**\\n     * @notice Redeemer redeems vTokens in exchange for the underlying assets, transferred to the receiver. Redeemer and receiver can be the same\\n     *   address, or different addresses if the receiver was previously approved by the redeemer as a valid delegate (see Comptroller.updateDelegate)\\n     * @dev Assumes interest has already been accrued up to the current slot(block or second)\\n     * @param redeemer The address of the account which is redeeming the tokens\\n     * @param receiver The receiver of the underlying tokens\\n     * @param redeemTokensIn The number of vTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     * @param redeemAmountIn The number of underlying tokens to receive from redeeming vTokens (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     */\\n    function _redeemFresh(address redeemer, address receiver, uint256 redeemTokensIn, uint256 redeemAmountIn) internal {\\n        require(redeemTokensIn == 0 || redeemAmountIn == 0, \\\"one of redeemTokensIn or redeemAmountIn must be zero\\\");\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RedeemFreshnessCheck();\\n        }\\n\\n        /* exchangeRate = invoke Exchange Rate Stored() */\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        uint256 redeemTokens;\\n        uint256 redeemAmount;\\n\\n        /* If redeemTokensIn > 0: */\\n        if (redeemTokensIn > 0) {\\n            /*\\n             * We calculate the exchange rate and the amount of underlying to be redeemed:\\n             *  redeemTokens = redeemTokensIn\\n             */\\n            redeemTokens = redeemTokensIn;\\n        } else {\\n            /*\\n             * We get the current exchange rate and calculate the amount to be redeemed:\\n             *  redeemTokens = redeemAmountIn / exchangeRate\\n             */\\n            redeemTokens = div_(redeemAmountIn, exchangeRate);\\n\\n            uint256 _redeemAmount = mul_(redeemTokens, exchangeRate);\\n            if (_redeemAmount != 0 && _redeemAmount != redeemAmountIn) redeemTokens++; // round up\\n        }\\n\\n        // redeemAmount = exchangeRate * redeemTokens\\n        redeemAmount = mul_ScalarTruncate(exchangeRate, redeemTokens);\\n\\n        // Revert if amount is zero\\n        if (redeemAmount == 0) {\\n            revert(\\\"redeemAmount is zero\\\");\\n        }\\n\\n        /* Fail if redeem not allowed */\\n        comptroller.preRedeemHook(address(this), redeemer, redeemTokens);\\n\\n        /* Fail gracefully if protocol has insufficient cash */\\n        if (_getCashPrior() - totalReserves < redeemAmount) {\\n            revert RedeemTransferOutNotPossible();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing reduced supply before external transfer.\\n         */\\n        totalSupply = totalSupply - redeemTokens;\\n        uint256 balanceAfter = accountTokens[redeemer] - redeemTokens;\\n        accountTokens[redeemer] = balanceAfter;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the redeemAmount.\\n         *  On success, the vToken has redeemAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, redeemAmount);\\n\\n        /* We emit a Transfer event, and a Redeem event */\\n        emit Transfer(redeemer, address(this), redeemTokens);\\n        emit Redeem(redeemer, redeemAmount, redeemTokens, balanceAfter);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.redeemVerify(address(this), redeemer, redeemAmount, redeemTokens);\\n    }\\n\\n    /**\\n     * @notice Users or their delegates borrow assets from the protocol\\n     * @param borrower User who borrows the assets\\n     * @param receiver The receiver of the tokens, if called by a delegate\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     */\\n    function _borrowFresh(address borrower, address receiver, uint256 borrowAmount) internal {\\n        /* Fail if borrow not allowed */\\n        comptroller.preBorrowHook(address(this), borrower, borrowAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert BorrowFreshnessCheck();\\n        }\\n\\n        /* Fail gracefully if protocol has insufficient underlying cash */\\n        if (_getCashPrior() - totalReserves < borrowAmount) {\\n            revert BorrowCashNotAvailable();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on overflow:\\n         *  accountBorrowNew = accountBorrow + borrowAmount\\n         *  totalBorrowsNew = totalBorrows + borrowAmount\\n         */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 accountBorrowsNew = accountBorrowsPrev + borrowAmount;\\n        uint256 totalBorrowsNew = totalBorrows + borrowAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing increased borrow before external transfer.\\n        `*/\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the borrowAmount.\\n         *  On success, the vToken borrowAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, borrowAmount);\\n\\n        /* We emit a Borrow event */\\n        emit Borrow(borrower, borrowAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.borrowVerify(address(this), borrower, borrowAmount);\\n    }\\n\\n    /**\\n     * @notice Borrows are repaid by another user (possibly the borrower).\\n     * @param payer the account paying off the borrow\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount the amount of underlying tokens being returned, or type(uint256).max for the full outstanding amount\\n     * @return (uint) the actual repayment amount.\\n     */\\n    function _repayBorrowFresh(address payer, address borrower, uint256 repayAmount) internal returns (uint256) {\\n        /* Fail if repayBorrow not allowed */\\n        comptroller.preRepayHook(address(this), borrower);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RepayBorrowFreshnessCheck();\\n        }\\n\\n        /* We fetch the amount the borrower owes, with accumulated interest */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n\\n        uint256 repayAmountFinal = repayAmount >= accountBorrowsPrev ? accountBorrowsPrev : repayAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We call _doTransferIn for the payer and the repayAmount\\n         *  On success, the vToken holds an additional repayAmount of cash.\\n         *  _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         *   it returns the amount actually transferred, in case of a fee.\\n         */\\n        uint256 actualRepayAmount = _doTransferIn(payer, repayAmountFinal);\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on underflow:\\n         *  accountBorrowsNew = accountBorrows - actualRepayAmount\\n         *  totalBorrowsNew = totalBorrows - actualRepayAmount\\n         */\\n        uint256 accountBorrowsNew = accountBorrowsPrev - actualRepayAmount;\\n        uint256 totalBorrowsNew = totalBorrows - actualRepayAmount;\\n\\n        /* We write the previously calculated values into storage */\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /* We emit a RepayBorrow event */\\n        emit RepayBorrow(payer, borrower, actualRepayAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.repayBorrowVerify(address(this), payer, borrower, actualRepayAmount, borrowIndex);\\n\\n        return actualRepayAmount;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal nonReentrant {\\n        accrueInterest();\\n\\n        uint256 error = vTokenCollateral.accrueInterest();\\n        if (error != NO_ERROR) {\\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted liquidation failed\\n            revert LiquidateAccrueCollateralInterestFailed(error);\\n        }\\n\\n        _liquidateBorrowFresh(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice The liquidator liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrowFresh(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal {\\n        /* Fail if liquidate not allowed */\\n        comptroller.preLiquidateHook(\\n            address(this),\\n            address(vTokenCollateral),\\n            borrower,\\n            repayAmount,\\n            skipLiquidityCheck\\n        );\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert LiquidateFreshnessCheck();\\n        }\\n\\n        /* Verify vTokenCollateral market's slot(block or second) number equals current slot(block or second) number */\\n        if (vTokenCollateral.accrualBlockNumber() != getBlockNumberOrTimestamp()) {\\n            revert LiquidateCollateralFreshnessCheck();\\n        }\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateLiquidatorIsBorrower();\\n        }\\n\\n        /* Fail if repayAmount = 0 */\\n        if (repayAmount == 0) {\\n            revert LiquidateCloseAmountIsZero();\\n        }\\n\\n        /* Fail if repayAmount = type(uint256).max */\\n        if (repayAmount == type(uint256).max) {\\n            revert LiquidateCloseAmountIsUintMax();\\n        }\\n\\n        /* Fail if repayBorrow fails */\\n        uint256 actualRepayAmount = _repayBorrowFresh(liquidator, borrower, repayAmount);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We calculate the number of collateral tokens that will be seized */\\n        (uint256 amountSeizeError, uint256 seizeTokens) = comptroller.liquidateCalculateSeizeTokens(\\n            address(this),\\n            address(vTokenCollateral),\\n            actualRepayAmount\\n        );\\n        require(amountSeizeError == NO_ERROR, \\\"LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED\\\");\\n\\n        /* Revert if borrower collateral token balance < seizeTokens */\\n        require(vTokenCollateral.balanceOf(borrower) >= seizeTokens, \\\"LIQUIDATE_SEIZE_TOO_MUCH\\\");\\n\\n        // If this is also the collateral, call _seize internally to avoid re-entrancy, otherwise make an external call\\n        if (address(vTokenCollateral) == address(this)) {\\n            _seize(address(this), liquidator, borrower, seizeTokens);\\n        } else {\\n            vTokenCollateral.seize(liquidator, borrower, seizeTokens);\\n        }\\n\\n        /* We emit a LiquidateBorrow event */\\n        emit LiquidateBorrow(liquidator, borrower, actualRepayAmount, address(vTokenCollateral), seizeTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.liquidateBorrowVerify(\\n            address(this),\\n            address(vTokenCollateral),\\n            liquidator,\\n            borrower,\\n            actualRepayAmount,\\n            seizeTokens\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Called only during an in-kind liquidation, or by liquidateBorrow during the liquidation of another VToken.\\n     *  It's absolutely critical to use msg.sender as the seizer vToken and not a parameter.\\n     * @param seizerContract The contract seizing the collateral (either borrowed vToken or Comptroller)\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     */\\n    function _seize(address seizerContract, address liquidator, address borrower, uint256 seizeTokens) internal {\\n        /* Fail if seize not allowed */\\n        comptroller.preSeizeHook(address(this), seizerContract, liquidator, borrower);\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateSeizeLiquidatorIsBorrower();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and liquidator token balances, failing on underflow/overflow:\\n         *  borrowerTokensNew = accountTokens[borrower] - seizeTokens\\n         *  liquidatorTokensNew = accountTokens[liquidator] + seizeTokens\\n         */\\n        uint256 liquidationIncentiveMantissa = ComptrollerViewInterface(address(comptroller))\\n            .liquidationIncentiveMantissa();\\n        uint256 numerator = mul_(seizeTokens, Exp({ mantissa: protocolSeizeShareMantissa }));\\n        uint256 protocolSeizeTokens = div_(numerator, Exp({ mantissa: liquidationIncentiveMantissa }));\\n        uint256 liquidatorSeizeTokens = seizeTokens - protocolSeizeTokens;\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n        uint256 protocolSeizeAmount = mul_ScalarTruncate(exchangeRate, protocolSeizeTokens);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the calculated values into storage */\\n        totalSupply = totalSupply - protocolSeizeTokens;\\n        accountTokens[borrower] = accountTokens[borrower] - seizeTokens;\\n        accountTokens[liquidator] = accountTokens[liquidator] + liquidatorSeizeTokens;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, protocolSeizeAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.LIQUIDATION\\n        );\\n\\n        /* Emit a Transfer event */\\n        emit Transfer(borrower, liquidator, liquidatorSeizeTokens);\\n        emit ProtocolSeize(borrower, protocolShareReserve, protocolSeizeAmount);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.seizeVerify(address(this), seizerContract, liquidator, borrower, seizeTokens);\\n    }\\n\\n    function _setComptroller(ComptrollerInterface newComptroller) internal {\\n        ComptrollerInterface oldComptroller = comptroller;\\n        // Ensure invoke comptroller.isComptroller() returns true\\n        require(newComptroller.isComptroller(), \\\"marker method returned false\\\");\\n\\n        // Set market's comptroller to newComptroller\\n        comptroller = newComptroller;\\n\\n        // Emit NewComptroller(oldComptroller, newComptroller)\\n        emit NewComptroller(oldComptroller, newComptroller);\\n    }\\n\\n    /**\\n     * @notice Sets a new reserve factor for the protocol (*requires fresh interest accrual)\\n     * @dev Admin function to set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     */\\n    function _setReserveFactorFresh(uint256 newReserveFactorMantissa) internal {\\n        // Verify market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetReserveFactorFreshCheck();\\n        }\\n\\n        // Check newReserveFactor \\u2264 maxReserveFactor\\n        if (newReserveFactorMantissa > MAX_RESERVE_FACTOR_MANTISSA) {\\n            revert SetReserveFactorBoundsCheck();\\n        }\\n\\n        uint256 oldReserveFactorMantissa = reserveFactorMantissa;\\n        reserveFactorMantissa = newReserveFactorMantissa;\\n\\n        emit NewReserveFactor(oldReserveFactorMantissa, newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Add reserves by transferring from caller\\n     * @dev Requires fresh interest accrual\\n     * @param addAmount Amount of addition to reserves\\n     * @return actualAddAmount The actual amount added, excluding the potential token fees\\n     */\\n    function _addReservesFresh(uint256 addAmount) internal returns (uint256) {\\n        // totalReserves + actualAddAmount\\n        uint256 totalReservesNew;\\n        uint256 actualAddAmount;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert AddReservesFactorFreshCheck(actualAddAmount);\\n        }\\n\\n        actualAddAmount = _doTransferIn(msg.sender, addAmount);\\n        totalReservesNew = totalReserves + actualAddAmount;\\n        totalReserves = totalReservesNew;\\n        emit ReservesAdded(msg.sender, actualAddAmount, totalReservesNew);\\n\\n        return actualAddAmount;\\n    }\\n\\n    /**\\n     * @notice Reduces reserves by transferring to the protocol reserve contract\\n     * @dev Requires fresh interest accrual\\n     * @param reduceAmount Amount of reduction to reserves\\n     */\\n    function _reduceReservesFresh(uint256 reduceAmount) internal {\\n        if (reduceAmount == 0) {\\n            return;\\n        }\\n        // totalReserves - reduceAmount\\n        uint256 totalReservesNew;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert ReduceReservesFreshCheck();\\n        }\\n\\n        // Fail gracefully if protocol has insufficient underlying cash\\n        if (_getCashPrior() < reduceAmount) {\\n            revert ReduceReservesCashNotAvailable();\\n        }\\n\\n        // Check reduceAmount \\u2264 reserves[n] (totalReserves)\\n        if (reduceAmount > totalReserves) {\\n            revert ReduceReservesCashValidation();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        totalReservesNew = totalReserves - reduceAmount;\\n\\n        // Store reserves[n+1] = reserves[n] - reduceAmount\\n        totalReserves = totalReservesNew;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, reduceAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.SPREAD\\n        );\\n\\n        emit SpreadReservesReduced(protocolShareReserve, reduceAmount, totalReservesNew);\\n    }\\n\\n    /**\\n     * @notice updates the interest rate model (*requires fresh interest accrual)\\n     * @dev Admin function to update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     */\\n    function _setInterestRateModelFresh(InterestRateModel newInterestRateModel) internal {\\n        // Used to store old model for use in the event that is emitted on success\\n        InterestRateModel oldInterestRateModel;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetInterestRateModelFreshCheck();\\n        }\\n\\n        // Track the market's current interest rate model\\n        oldInterestRateModel = interestRateModel;\\n\\n        // Ensure invoke newInterestRateModel.isInterestRateModel() returns true\\n        require(newInterestRateModel.isInterestRateModel(), \\\"marker method returned false\\\");\\n\\n        // Set the interest rate model to newInterestRateModel\\n        interestRateModel = newInterestRateModel;\\n\\n        // Emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel)\\n        emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel);\\n    }\\n\\n    /**\\n     * Safe Token **\\n     */\\n\\n    /**\\n     * @dev Similar to ERC-20 transfer, but handles tokens that have transfer fees.\\n     *      This function returns the actual amount received,\\n     *      which may be less than `amount` if there is a fee attached to the transfer.\\n     * @param from Sender of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     * @return Actual amount received\\n     */\\n    function _doTransferIn(address from, uint256 amount) internal virtual returns (uint256) {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        uint256 balanceBefore = token.balanceOf(address(this));\\n        token.safeTransferFrom(from, address(this), amount);\\n        uint256 balanceAfter = token.balanceOf(address(this));\\n        // Return the amount that was *actually* transferred\\n        return balanceAfter - balanceBefore;\\n    }\\n\\n    /**\\n     * @dev Just a regular ERC-20 transfer, reverts on failure\\n     * @param to Receiver of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     */\\n    function _doTransferOut(address to, uint256 amount) internal virtual {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        token.safeTransfer(to, amount);\\n    }\\n\\n    /**\\n     * @notice Transfer `tokens` tokens from `src` to `dst` by `spender`\\n     * @dev Called by both `transfer` and `transferFrom` internally\\n     * @param spender The address of the account performing the transfer\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param tokens The number of tokens to transfer\\n     */\\n    function _transferTokens(address spender, address src, address dst, uint256 tokens) internal {\\n        /* Fail if transfer not allowed */\\n        comptroller.preTransferHook(address(this), src, dst, tokens);\\n\\n        /* Do not allow self-transfers */\\n        if (src == dst) {\\n            revert TransferNotAllowed();\\n        }\\n\\n        /* Get the allowance, infinite for the account owner */\\n        uint256 startingAllowance;\\n        if (spender == src) {\\n            startingAllowance = type(uint256).max;\\n        } else {\\n            startingAllowance = transferAllowances[src][spender];\\n        }\\n\\n        /* Do the calculations, checking for {under,over}flow */\\n        uint256 allowanceNew = startingAllowance - tokens;\\n        uint256 srcTokensNew = accountTokens[src] - tokens;\\n        uint256 dstTokensNew = accountTokens[dst] + tokens;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n\\n        accountTokens[src] = srcTokensNew;\\n        accountTokens[dst] = dstTokensNew;\\n\\n        /* Eat some of the allowance (if necessary) */\\n        if (startingAllowance != type(uint256).max) {\\n            transferAllowances[src][spender] = allowanceNew;\\n        }\\n\\n        /* We emit a Transfer event */\\n        emit Transfer(src, dst, tokens);\\n\\n        comptroller.transferVerify(address(this), src, dst, tokens);\\n    }\\n\\n    /**\\n     * @notice Initialize the money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     */\\n    function _initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n        require(accrualBlockNumber == 0 && borrowIndex == 0, \\\"market may only be initialized once\\\");\\n\\n        // Set initial exchange rate\\n        initialExchangeRateMantissa = initialExchangeRateMantissa_;\\n        require(initialExchangeRateMantissa > 0, \\\"initial exchange rate must be greater than zero.\\\");\\n\\n        _setComptroller(comptroller_);\\n\\n        // Initialize slot(block or second) number and borrow index (slot(block or second) number mocks depend on comptroller being set)\\n        accrualBlockNumber = getBlockNumberOrTimestamp();\\n        borrowIndex = MANTISSA_ONE;\\n\\n        // Set the interest rate model (depends on slot(block or second) number / borrow index)\\n        _setInterestRateModelFresh(interestRateModel_);\\n\\n        _setReserveFactorFresh(reserveFactorMantissa_);\\n\\n        name = name_;\\n        symbol = symbol_;\\n        decimals = decimals_;\\n        _setShortfallContract(riskManagement.shortfall);\\n        _setProtocolShareReserve(riskManagement.protocolShareReserve);\\n        protocolSeizeShareMantissa = DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA;\\n\\n        // Set underlying and sanity check it\\n        underlying = underlying_;\\n        IERC20Upgradeable(underlying).totalSupply();\\n\\n        // The counter starts true to prevent changing it from zero to non-zero (i.e. smaller cost/refund)\\n        _notEntered = true;\\n        _transferOwnership(admin_);\\n    }\\n\\n    function _setShortfallContract(address shortfall_) internal {\\n        ensureNonzeroAddress(shortfall_);\\n        address oldShortfall = shortfall;\\n        shortfall = shortfall_;\\n        emit NewShortfallContract(oldShortfall, shortfall_);\\n    }\\n\\n    function _setProtocolShareReserve(address payable protocolShareReserve_) internal {\\n        ensureNonzeroAddress(protocolShareReserve_);\\n        address oldProtocolShareReserve = address(protocolShareReserve);\\n        protocolShareReserve = protocolShareReserve_;\\n        emit NewProtocolShareReserve(oldProtocolShareReserve, address(protocolShareReserve_));\\n    }\\n\\n    function _ensureSenderIsDelegateOf(address user) internal view {\\n        if (!ComptrollerViewInterface(address(comptroller)).approvedDelegates(user, msg.sender)) {\\n            revert DelegateNotApproved();\\n        }\\n    }\\n\\n    /**\\n     * @notice Gets balance of this contract in terms of the underlying\\n     * @dev This excludes the value of the current message, if any\\n     * @return The quantity of underlying tokens owned by this contract\\n     */\\n    function _getCashPrior() internal view virtual returns (uint256) {\\n        return IERC20Upgradeable(underlying).balanceOf(address(this));\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance the calculated balance\\n     */\\n    function _borrowBalanceStored(address account) internal view returns (uint256) {\\n        /* Get borrowBalance and borrowIndex */\\n        BorrowSnapshot memory borrowSnapshot = accountBorrows[account];\\n\\n        /* If borrowBalance = 0 then borrowIndex is likely also 0.\\n         * Rather than failing the calculation with a division by 0, we immediately return 0 in this case.\\n         */\\n        if (borrowSnapshot.principal == 0) {\\n            return 0;\\n        }\\n\\n        /* Calculate new borrow balance using the interest index:\\n         *  recentBorrowBalance = borrower.borrowBalance * market.borrowIndex / borrower.borrowIndex\\n         */\\n        uint256 principalTimesIndex = borrowSnapshot.principal * borrowIndex;\\n\\n        return principalTimesIndex / borrowSnapshot.interestIndex;\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function _exchangeRateStored() internal view virtual returns (uint256) {\\n        uint256 _totalSupply = totalSupply;\\n        if (_totalSupply == 0) {\\n            /*\\n             * If there are no tokens minted:\\n             *  exchangeRate = initialExchangeRate\\n             */\\n            return initialExchangeRateMantissa;\\n        }\\n        /*\\n         * Otherwise:\\n         *  exchangeRate = (totalCash + totalBorrows + badDebt - totalReserves) / totalSupply\\n         */\\n        uint256 totalCash = _getCashPrior();\\n        uint256 cashPlusBorrowsMinusReserves = totalCash + totalBorrows + badDebt - totalReserves;\\n        uint256 exchangeRate = (cashPlusBorrowsMinusReserves * EXP_SCALE) / _totalSupply;\\n\\n        return exchangeRate;\\n    }\\n}\\n\",\"keccak256\":\"0xa220ca317fe69b920b86e43f054c43b5f891f12160fd312c9a21668f969ee056\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { ComptrollerInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\n\\n/**\\n * @title VTokenStorage\\n * @author Venus\\n * @notice Storage layout used by the `VToken` contract\\n */\\n// solhint-disable-next-line max-states-count\\ncontract VTokenStorage {\\n    /**\\n     * @notice Container for borrow balance information\\n     * @member principal Total balance (with accrued interest), after applying the most recent balance-changing action\\n     * @member interestIndex Global borrowIndex as of the most recent balance-changing action\\n     */\\n    struct BorrowSnapshot {\\n        uint256 principal;\\n        uint256 interestIndex;\\n    }\\n\\n    /**\\n     * @dev Guard variable for re-entrancy checks\\n     */\\n    bool internal _notEntered;\\n\\n    /**\\n     * @notice Underlying asset for this VToken\\n     */\\n    address public underlying;\\n\\n    /**\\n     * @notice EIP-20 token name for this token\\n     */\\n    string public name;\\n\\n    /**\\n     * @notice EIP-20 token symbol for this token\\n     */\\n    string public symbol;\\n\\n    /**\\n     * @notice EIP-20 token decimals for this token\\n     */\\n    uint8 public decimals;\\n\\n    /**\\n     * @notice Protocol share Reserve contract address\\n     */\\n    address payable public protocolShareReserve;\\n\\n    /**\\n     * @notice Contract which oversees inter-vToken operations\\n     */\\n    ComptrollerInterface public comptroller;\\n\\n    /**\\n     * @notice Model which tells what the current interest rate should be\\n     */\\n    InterestRateModel public interestRateModel;\\n\\n    // Initial exchange rate used when minting the first VTokens (used when totalSupply = 0)\\n    uint256 internal initialExchangeRateMantissa;\\n\\n    /**\\n     * @notice Fraction of interest currently set aside for reserves\\n     */\\n    uint256 public reserveFactorMantissa;\\n\\n    /**\\n     * @notice Slot(block or second) number that interest was last accrued at\\n     */\\n    uint256 public accrualBlockNumber;\\n\\n    /**\\n     * @notice Accumulator of the total earned interest rate since the opening of the market\\n     */\\n    uint256 public borrowIndex;\\n\\n    /**\\n     * @notice Total amount of outstanding borrows of the underlying in this market\\n     */\\n    uint256 public totalBorrows;\\n\\n    /**\\n     * @notice Total amount of reserves of the underlying held in this market\\n     */\\n    uint256 public totalReserves;\\n\\n    /**\\n     * @notice Total number of tokens in circulation\\n     */\\n    uint256 public totalSupply;\\n\\n    /**\\n     * @notice Total bad debt of the market\\n     */\\n    uint256 public badDebt;\\n\\n    // Official record of token balances for each account\\n    mapping(address => uint256) internal accountTokens;\\n\\n    // Approved token transfer amounts on behalf of others\\n    mapping(address => mapping(address => uint256)) internal transferAllowances;\\n\\n    // Mapping of account addresses to outstanding borrow balances\\n    mapping(address => BorrowSnapshot) internal accountBorrows;\\n\\n    /**\\n     * @notice Share of seized collateral that is added to reserves\\n     */\\n    uint256 public protocolSeizeShareMantissa;\\n\\n    /**\\n     * @notice Storage of Shortfall contract address\\n     */\\n    address public shortfall;\\n\\n    /**\\n     * @notice delta slot (block or second) after which reserves will be reduced\\n     */\\n    uint256 public reduceReservesBlockDelta;\\n\\n    /**\\n     * @notice last slot (block or second) number at which reserves were reduced\\n     */\\n    uint256 public reduceReservesBlockNumber;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n}\\n\\n/**\\n * @title VTokenInterface\\n * @author Venus\\n * @notice Interface implemented by the `VToken` contract\\n */\\nabstract contract VTokenInterface is VTokenStorage {\\n    struct RiskManagementInit {\\n        address shortfall;\\n        address payable protocolShareReserve;\\n    }\\n\\n    /*** Market Events ***/\\n\\n    /**\\n     * @notice Event emitted when interest is accrued\\n     */\\n    event AccrueInterest(uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when tokens are minted\\n     */\\n    event Mint(address indexed minter, uint256 mintAmount, uint256 mintTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when tokens are redeemed\\n     */\\n    event Redeem(address indexed redeemer, uint256 redeemAmount, uint256 redeemTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when underlying is borrowed\\n     */\\n    event Borrow(address indexed borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when a borrow is repaid\\n     */\\n    event RepayBorrow(\\n        address indexed payer,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        uint256 accountBorrows,\\n        uint256 totalBorrows\\n    );\\n\\n    /**\\n     * @notice Event emitted when bad debt is accumulated on a market\\n     * @param borrower borrower to \\\"forgive\\\"\\n     * @param badDebtDelta amount of new bad debt recorded\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtIncreased(address indexed borrower, uint256 badDebtDelta, uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when bad debt is recovered via an auction\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtRecovered(uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when a borrow is liquidated\\n     */\\n    event LiquidateBorrow(\\n        address indexed liquidator,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        address indexed vTokenCollateral,\\n        uint256 seizeTokens\\n    );\\n\\n    /*** Admin Events ***/\\n\\n    /**\\n     * @notice Event emitted when comptroller is changed\\n     */\\n    event NewComptroller(ComptrollerInterface indexed oldComptroller, ComptrollerInterface indexed newComptroller);\\n\\n    /**\\n     * @notice Event emitted when shortfall contract address is changed\\n     */\\n    event NewShortfallContract(address indexed oldShortfall, address indexed newShortfall);\\n\\n    /**\\n     * @notice Event emitted when protocol share reserve contract address is changed\\n     */\\n    event NewProtocolShareReserve(address indexed oldProtocolShareReserve, address indexed newProtocolShareReserve);\\n\\n    /**\\n     * @notice Event emitted when interestRateModel is changed\\n     */\\n    event NewMarketInterestRateModel(\\n        InterestRateModel indexed oldInterestRateModel,\\n        InterestRateModel indexed newInterestRateModel\\n    );\\n\\n    /**\\n     * @notice Event emitted when protocol seize share is changed\\n     */\\n    event NewProtocolSeizeShare(uint256 oldProtocolSeizeShareMantissa, uint256 newProtocolSeizeShareMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserve factor is changed\\n     */\\n    event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserves are added\\n     */\\n    event ReservesAdded(address indexed benefactor, uint256 addAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice Event emitted when the spread reserves are reduced\\n     */\\n    event SpreadReservesReduced(address indexed protocolShareReserve, uint256 reduceAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice EIP20 Transfer event\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 amount);\\n\\n    /**\\n     * @notice EIP20 Approval event\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\\n\\n    /**\\n     * @notice Event emitted when healing the borrow\\n     */\\n    event HealBorrow(address indexed payer, address indexed borrower, uint256 repayAmount);\\n\\n    /**\\n     * @notice Event emitted when tokens are swept\\n     */\\n    event SweepToken(address indexed token);\\n\\n    /**\\n     * @notice Event emitted when reduce reserves slot (block or second) delta is changed\\n     */\\n    event NewReduceReservesBlockDelta(\\n        uint256 oldReduceReservesBlockOrTimestampDelta,\\n        uint256 newReduceReservesBlockOrTimestampDelta\\n    );\\n\\n    /**\\n     * @notice Event emitted when liquidation reserves are reduced\\n     */\\n    event ProtocolSeize(address indexed from, address indexed to, uint256 amount);\\n\\n    /*** User Interface ***/\\n\\n    function mint(uint256 mintAmount) external virtual returns (uint256);\\n\\n    function mintBehalf(address minter, uint256 mintAllowed) external virtual returns (uint256);\\n\\n    function redeem(uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemUnderlying(uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function redeemUnderlyingBehalf(address redeemer, uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function borrow(uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function borrowBehalf(address borrwwer, uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function repayBorrow(uint256 repayAmount) external virtual returns (uint256);\\n\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external virtual returns (uint256);\\n\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external virtual returns (uint256);\\n\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external virtual;\\n\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipCloseFactorCheck\\n    ) external virtual;\\n\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external virtual;\\n\\n    function transfer(address dst, uint256 amount) external virtual returns (bool);\\n\\n    function transferFrom(address src, address dst, uint256 amount) external virtual returns (bool);\\n\\n    function accrueInterest() external virtual returns (uint256);\\n\\n    function sweepToken(IERC20Upgradeable token) external virtual;\\n\\n    /*** Admin Functions ***/\\n\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external virtual;\\n\\n    function reduceReserves(uint256 reduceAmount) external virtual;\\n\\n    function exchangeRateCurrent() external virtual returns (uint256);\\n\\n    function borrowBalanceCurrent(address account) external virtual returns (uint256);\\n\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external virtual;\\n\\n    function addReserves(uint256 addAmount) external virtual;\\n\\n    function totalBorrowsCurrent() external virtual returns (uint256);\\n\\n    function balanceOfUnderlying(address owner) external virtual returns (uint256);\\n\\n    function approve(address spender, uint256 amount) external virtual returns (bool);\\n\\n    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool);\\n\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool);\\n\\n    function allowance(address owner, address spender) external view virtual returns (uint256);\\n\\n    function balanceOf(address owner) external view virtual returns (uint256);\\n\\n    function getAccountSnapshot(address account) external view virtual returns (uint256, uint256, uint256, uint256);\\n\\n    function borrowRatePerBlock() external view virtual returns (uint256);\\n\\n    function supplyRatePerBlock() external view virtual returns (uint256);\\n\\n    function borrowBalanceStored(address account) external view virtual returns (uint256);\\n\\n    function exchangeRateStored() external view virtual returns (uint256);\\n\\n    function getCash() external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is a VToken contract (for inspection)\\n     * @return Always true\\n     */\\n    function isVToken() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7c4cbb879e3a931cfee4fa7a9eb1978eddff18087a1c4f56decedb84c2479f1e\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\",\"keccak256\":\"0x54ab3a6f3bc87569ed12370f3470a1ec84cea9796d4d0ccf3d07dd4280c044aa\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/validators.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\\nerror ZeroAddressNotAllowed();\\n\\n/// @notice Checks if the provided address is nonzero, reverts otherwise\\n/// @param address_ Address to check\\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\\nfunction ensureNonzeroAddress(address address_) pure {\\n    if (address_ == address(0)) {\\n        revert ZeroAddressNotAllowed();\\n    }\\n}\\n\",\"keccak256\":\"0x93bdd5cfb100f0f9a1d446857e23c3633df6ab12c266333c978428edd96b1367\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface IProtocolShareReserve {\\n    /// @notice it represents the type of vToken income\\n    enum IncomeType {\\n        SPREAD,\\n        LIQUIDATION\\n    }\\n\\n    function updateAssetsState(\\n        address comptroller,\\n        address asset,\\n        IncomeType incomeType\\n    ) external;\\n}\\n\",\"keccak256\":\"0x5fddc5b63fdd850b3b5c83576cda50dcb27a205dbb1a23af17d9da0d9f04fa0a\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { SECONDS_PER_YEAR } from \\\"./constants.sol\\\";\\n\\nabstract contract TimeManagerV8 {\\n    /// @notice Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 public immutable blocksOrSecondsPerYear;\\n\\n    /// @notice Acknowledges if a contract is time based or not\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    bool public immutable isTimeBased;\\n\\n    /// @notice Stores the current block timestamp or block number depending on isTimeBased\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    function() view returns (uint256) private immutable _getCurrentSlot;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n\\n    /// @notice Thrown when blocks per year is invalid\\n    error InvalidBlocksPerYear();\\n\\n    /// @notice Thrown when time based but blocks per year is provided\\n    error InvalidTimeBasedConfiguration();\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block\\n     * If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:error InvalidBlocksPerYear is thrown if blocksPerYear entered is zero and timeBased is false\\n     * @custom:error InvalidTimeBasedConfiguration is thrown if blocksPerYear entered is non zero and timeBased is true\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) {\\n        if (!timeBased_ && blocksPerYear_ == 0) {\\n            revert InvalidBlocksPerYear();\\n        }\\n\\n        if (timeBased_ && blocksPerYear_ != 0) {\\n            revert InvalidTimeBasedConfiguration();\\n        }\\n\\n        isTimeBased = timeBased_;\\n        blocksOrSecondsPerYear = timeBased_ ? SECONDS_PER_YEAR : blocksPerYear_;\\n        _getCurrentSlot = timeBased_ ? _getBlockTimestamp : _getBlockNumber;\\n    }\\n\\n    /**\\n     * @dev Function to simply retrieve block number or block timestamp\\n     * @return Current block number or block timestamp\\n     */\\n    function getBlockNumberOrTimestamp() public view virtual returns (uint256) {\\n        return _getCurrentSlot();\\n    }\\n\\n    /**\\n     * @dev Returns the current timestamp in seconds\\n     * @return The current timestamp\\n     */\\n    function _getBlockTimestamp() private view returns (uint256) {\\n        return block.timestamp;\\n    }\\n\\n    /**\\n     * @dev Returns the current block number\\n     * @return The current block number\\n     */\\n    function _getBlockNumber() private view returns (uint256) {\\n        return block.number;\\n    }\\n}\\n\",\"keccak256\":\"0x57a2bbb9b8e02b1c0a5c0e305fef1328a22db56c3d4b148c362010a6e767243c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\",\"keccak256\":\"0x14de93ead464da249af31bea0e3bcfb62ec693bea3475fb4d90f055ac81dc5eb\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/validators.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\\nerror ZeroAddressNotAllowed();\\n\\n/// @notice Thrown if the supplied value is 0 where it is not allowed\\nerror ZeroValueNotAllowed();\\n\\n/// @notice Checks if the provided address is nonzero, reverts otherwise\\n/// @param address_ Address to check\\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\\nfunction ensureNonzeroAddress(address address_) pure {\\n    if (address_ == address(0)) {\\n        revert ZeroAddressNotAllowed();\\n    }\\n}\\n\\n/// @notice Checks if the provided value is nonzero, reverts otherwise\\n/// @param value_ Value to check\\n/// @custom:error ZeroValueNotAllowed is thrown if the provided value is 0\\nfunction ensureNonzeroValue(uint256 value_) pure {\\n    if (value_ == 0) {\\n        revert ZeroValueNotAllowed();\\n    }\\n}\\n\",\"keccak256\":\"0xdb88e14d50dd21889ca3329d755673d022c47e8da005b6a545c7f69c2c4b7b86\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { PrimeStorageV1 } from \\\"../PrimeStorage.sol\\\";\\n\\n/**\\n * @title IPrime\\n * @author Venus\\n * @notice Interface for Prime Token\\n */\\ninterface IPrime {\\n    struct APRInfo {\\n        // supply APR of the user in BPS\\n        uint256 supplyAPR;\\n        // borrow APR of the user in BPS\\n        uint256 borrowAPR;\\n        // total score of the market\\n        uint256 totalScore;\\n        // score of the user\\n        uint256 userScore;\\n        // capped XVS balance of the user\\n        uint256 xvsBalanceForScore;\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    struct Capital {\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    /**\\n     * @notice Returns boosted pending interest accrued for a user for all markets\\n     * @param user the account for which to get the accrued interests\\n     * @return pendingRewards the number of underlying tokens accrued by the user for all markets\\n     */\\n    function getPendingRewards(address user) external returns (PrimeStorageV1.PendingReward[] memory pendingRewards);\\n\\n    /**\\n     * @notice Update total score of multiple users and market\\n     * @param users accounts for which we need to update score\\n     */\\n    function updateScores(address[] memory users) external;\\n\\n    /**\\n     * @notice Update value of alpha\\n     * @param _alphaNumerator numerator of alpha. If alpha is 0.5 then numerator is 1\\n     * @param _alphaDenominator denominator of alpha. If alpha is 0.5 then denominator is 2\\n     */\\n    function updateAlpha(uint128 _alphaNumerator, uint128 _alphaDenominator) external;\\n\\n    /**\\n     * @notice Update multipliers for a market\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier new supply multiplier for the market, scaled by 1e18\\n     * @param borrowMultiplier new borrow multiplier for the market, scaled by 1e18\\n     */\\n    function updateMultipliers(address market, uint256 supplyMultiplier, uint256 borrowMultiplier) external;\\n\\n    /**\\n     * @notice Add a market to prime program\\n     * @param comptroller address of the comptroller\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier the multiplier for supply cap. It should be converted to 1e18\\n     * @param borrowMultiplier the multiplier for borrow cap. It should be converted to 1e18\\n     */\\n    function addMarket(\\n        address comptroller,\\n        address market,\\n        uint256 supplyMultiplier,\\n        uint256 borrowMultiplier\\n    ) external;\\n\\n    /**\\n     * @notice Set limits for total tokens that can be minted\\n     * @param _irrevocableLimit total number of irrevocable tokens that can be minted\\n     * @param _revocableLimit total number of revocable tokens that can be minted\\n     */\\n    function setLimit(uint256 _irrevocableLimit, uint256 _revocableLimit) external;\\n\\n    /**\\n     * @notice Directly issue prime tokens to users\\n     * @param isIrrevocable are the tokens being issued\\n     * @param users list of address to issue tokens to\\n     */\\n    function issue(bool isIrrevocable, address[] calldata users) external;\\n\\n    /**\\n     * @notice Executed by XVSVault whenever user's XVSVault balance changes\\n     * @param user the account address whose balance was updated\\n     */\\n    function xvsUpdated(address user) external;\\n\\n    /**\\n     * @notice accrues interest and updates score for an user for a specific market\\n     * @param user the account address for which to accrue interest and update score\\n     * @param market the market for which to accrue interest and update score\\n     */\\n    function accrueInterestAndUpdateScore(address user, address market) external;\\n\\n    /**\\n     * @notice For claiming prime token when staking period is completed\\n     */\\n    function claim() external;\\n\\n    /**\\n     * @notice For burning any prime token\\n     * @param user the account address for which the prime token will be burned\\n     */\\n    function burn(address user) external;\\n\\n    /**\\n     * @notice To pause or unpause claiming of interest\\n     */\\n    function togglePause() external;\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken) external returns (uint256);\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @param user the user for which to claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Distributes income from market since last distribution\\n     * @param vToken the market for which to distribute the income\\n     */\\n    function accrueInterest(address vToken) external;\\n\\n    /**\\n     * @notice Returns boosted interest accrued for a user\\n     * @param vToken the market for which to fetch the accrued interest\\n     * @param user the account for which to get the accrued interest\\n     * @return interestAccrued the number of underlying tokens accrued by the user since the last accrual\\n     */\\n    function getInterestAccrued(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Retrieves an array of all available markets\\n     * @return an array of addresses representing all available markets\\n     */\\n    function getAllMarkets() external view returns (address[] memory);\\n\\n    /**\\n     * @notice fetch the numbers of seconds remaining for staking period to complete\\n     * @param user the account address for which we are checking the remaining time\\n     * @return timeRemaining the number of seconds the user needs to wait to claim prime token\\n     */\\n    function claimTimeRemaining(address user) external view returns (uint256);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for user for a given market\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function calculateAPR(address market, address user) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for estimated supply, borrow and XVS staked\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @param borrow hypothetical borrow amount\\n     * @param supply hypothetical supply amount\\n     * @param xvsStaked hypothetical staked XVS amount\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function estimateAPR(\\n        address market,\\n        address user,\\n        uint256 borrow,\\n        uint256 supply,\\n        uint256 xvsStaked\\n    ) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice the total income that's going to be distributed in a year to prime token holders\\n     * @param vToken the market for which to fetch the total income that's going to distributed in a year\\n     * @return amount the total income\\n     */\\n    function incomeDistributionYearly(address vToken) external view returns (uint256 amount);\\n\\n    /**\\n     * @notice Returns if user is a prime holder\\n     * @return isPrimeHolder true if user is a prime holder\\n     */\\n    function isUserPrimeHolder(address user) external view returns (bool);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param loopsLimit Number of loops limit\\n     */\\n    function setMaxLoopsLimit(uint256 loopsLimit) external;\\n\\n    /**\\n     * @notice Update staked at timestamp for multiple users\\n     * @param users accounts for which we need to update staked at timestamp\\n     * @param timestamps new staked at timestamp for the users\\n     */\\n    function setStakedAt(address[] calldata users, uint256[] calldata timestamps) external;\\n}\\n\",\"keccak256\":\"0xd112f60183416ad796093b4a83a80ddc1b8b655965f02ae55ca82e2a0c68f97d\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\n/**\\n * @title PrimeStorageV1\\n * @author Venus\\n * @notice Storage for Prime Token\\n */\\ncontract PrimeStorageV1 {\\n    struct Token {\\n        bool exists;\\n        bool isIrrevocable;\\n    }\\n\\n    struct Market {\\n        uint256 supplyMultiplier;\\n        uint256 borrowMultiplier;\\n        uint256 rewardIndex;\\n        uint256 sumOfMembersScore;\\n        bool exists;\\n    }\\n\\n    struct Interest {\\n        uint256 accrued;\\n        uint256 score;\\n        uint256 rewardIndex;\\n    }\\n\\n    struct PendingReward {\\n        address vToken;\\n        address rewardToken;\\n        uint256 amount;\\n    }\\n\\n    /// @notice Base unit for computations, usually used in scaling (multiplications, divisions)\\n    uint256 internal constant EXP_SCALE = 1e18;\\n\\n    /// @notice maximum BPS = 100%\\n    uint256 internal constant MAXIMUM_BPS = 1e4;\\n\\n    /// @notice Mapping to get prime token's metadata\\n    mapping(address => Token) public tokens;\\n\\n    /// @notice  Tracks total irrevocable tokens minted\\n    uint256 public totalIrrevocable;\\n\\n    /// @notice  Tracks total revocable tokens minted\\n    uint256 public totalRevocable;\\n\\n    /// @notice  Indicates maximum revocable tokens that can be minted\\n    uint256 public revocableLimit;\\n\\n    /// @notice  Indicates maximum irrevocable tokens that can be minted\\n    uint256 public irrevocableLimit;\\n\\n    /// @notice Tracks when prime token eligible users started staking for claiming prime token\\n    mapping(address => uint256) public stakedAt;\\n\\n    /// @notice vToken to market configuration\\n    mapping(address => Market) public markets;\\n\\n    /// @notice vToken to user to user index\\n    mapping(address => mapping(address => Interest)) public interests;\\n\\n    /// @notice A list of boosted markets\\n    address[] internal _allMarkets;\\n\\n    /// @notice numerator of alpha. Ex: if alpha is 0.5 then this will be 1\\n    uint128 public alphaNumerator;\\n\\n    /// @notice denominator of alpha. Ex: if alpha is 0.5 then this will be 2\\n    uint128 public alphaDenominator;\\n\\n    /// @notice address of XVS vault\\n    address public xvsVault;\\n\\n    /// @notice address of XVS vault reward token\\n    address public xvsVaultRewardToken;\\n\\n    /// @notice address of XVS vault pool id\\n    uint256 public xvsVaultPoolId;\\n\\n    /// @notice mapping to check if a account's score was updated in the round\\n    mapping(uint256 => mapping(address => bool)) public isScoreUpdated;\\n\\n    /// @notice unique id for next round\\n    uint256 public nextScoreUpdateRoundId;\\n\\n    /// @notice total number of accounts whose score needs to be updated\\n    uint256 public totalScoreUpdatesRequired;\\n\\n    /// @notice total number of accounts whose score is yet to be updated\\n    uint256 public pendingScoreUpdates;\\n\\n    /// @notice mapping used to find if an asset is part of prime markets\\n    mapping(address => address) public vTokenForAsset;\\n\\n    /// @notice Address of core pool comptroller contract\\n    address internal corePoolComptroller;\\n\\n    /// @notice unreleased income from PLP that's already distributed to prime holders\\n    /// @dev mapping of asset address => amount\\n    mapping(address => uint256) public unreleasedPLPIncome;\\n\\n    /// @notice The address of PLP contract\\n    address public primeLiquidityProvider;\\n\\n    /// @notice The address of ResilientOracle contract\\n    ResilientOracleInterface public oracle;\\n\\n    /// @notice The address of PoolRegistry contract\\n    address public poolRegistry;\\n\\n    /// @dev This empty reserved space is put in place to allow future versions to add new\\n    /// variables without shifting down storage in the inheritance chain.\\n    uint256[26] private __gap;\\n}\\n\",\"keccak256\":\"0x5285c875114db2ea2be0b81b65722d5761806217022db733323c4e03365a95e7\",\"license\":\"BSD-3-Clause\"},\"contracts/ERC4626/Interfaces/IComptroller.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Action } from \\\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\\\";\\nimport { RewardsDistributor } from \\\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\\\";\\n\\n/**\\n * @title IComptroller\\n * @author Venus\\n * @notice Combined interface for the `Comptroller` contract, including both core and view functions.\\n */\\ninterface IComptroller {\\n    function actionPaused(address market, Action action) external view returns (bool);\\n\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory);\\n\\n    function supplyCaps(address) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xc55d8fa6cb3e3907d0b9cf5d696afc18879d503278e40bed7f837403d0a4ed7e\",\"license\":\"BSD-3-Clause\"},\"contracts/ERC4626/Interfaces/IProtocolShareReserve.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface IProtocolShareReserve {\\n    /// @notice it represents the type of vToken income\\n    enum IncomeType {\\n        SPREAD,\\n        LIQUIDATION,\\n        ERC4626_WRAPPER_REWARDS,\\n        FLASHLOAN\\n    }\\n\\n    function updateAssetsState(address comptroller, address asset, IncomeType incomeType) external;\\n}\\n\",\"keccak256\":\"0x9ca700a59330cb3bb1b1fe1cbd93b02c06d6ba8f9457ab12e03e87bec0c41235\",\"license\":\"BSD-3-Clause\"},\"contracts/ERC4626/VenusERC4626.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ERC4626Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { ERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\\\";\\nimport { ReentrancyGuardUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol\\\";\\nimport { MathUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\n\\nimport { IProtocolShareReserve } from \\\"./Interfaces/IProtocolShareReserve.sol\\\";\\nimport { RewardsDistributor } from \\\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\\\";\\nimport { IComptroller } from \\\"./Interfaces/IComptroller.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"@venusprotocol/solidity-utilities/contracts/validators.sol\\\";\\n\\nimport { Action } from \\\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\\\";\\nimport { EXP_SCALE } from \\\"@venusprotocol/isolated-pools/contracts/lib/constants.sol\\\";\\nimport { VToken } from \\\"@venusprotocol/isolated-pools/contracts/VToken.sol\\\";\\n\\n/// @title VenusERC4626\\n/// @notice ERC4626 wrapper for Venus vTokens, enabling standard ERC4626 vault interactions with Venus Protocol.\\ncontract VenusERC4626 is ERC4626Upgradeable, AccessControlledV8, MaxLoopsLimitHelper, ReentrancyGuardUpgradeable {\\n    using MathUpgradeable for uint256;\\n    using SafeERC20Upgradeable for ERC20Upgradeable;\\n\\n    /// @notice Error code representing no errors in Venus operations.\\n    uint256 internal constant NO_ERROR = 0;\\n\\n    /// @notice The Venus vToken associated with this ERC4626 vault.\\n    VToken public vToken;\\n\\n    /// @notice The Venus Comptroller contract, responsible for market operations.\\n    IComptroller public comptroller;\\n\\n    /// @notice The recipient of rewards distributed by the Venus Protocol.\\n    address public rewardRecipient;\\n\\n    /// @notice Emitted when rewards are claimed.\\n    /// @param amount The amount of reward tokens claimed.\\n    /// @param rewardToken The address of the reward token claimed.\\n    event ClaimRewards(uint256 amount, address indexed rewardToken);\\n\\n    /// @notice Emitted when the reward recipient address is updated.\\n    /// @param oldRecipient The previous reward recipient address.\\n    /// @param newRecipient The new reward recipient address.\\n    event RewardRecipientUpdated(address indexed oldRecipient, address indexed newRecipient);\\n\\n    /// @notice Event emitted when tokens are swept\\n    event SweepToken(address indexed token, address indexed receiver, uint256 amount);\\n\\n    /// @notice Thrown when a Venus protocol call returns an error.\\n    /// @dev This error is triggered if a Venus operation (such as minting or redeeming vTokens) fails.\\n    /// @param errorCode The error code returned by the Venus protocol.\\n    error VenusERC4626__VenusError(uint256 errorCode);\\n\\n    /// @notice Thrown when a deposit exceeds the maximum allowed limit.\\n    /// @dev This error is triggered if the deposit amount is greater than `maxDeposit(receiver)`.\\n    error ERC4626__DepositMoreThanMax();\\n\\n    /// @notice Thrown when a mint operation exceeds the maximum allowed limit.\\n    /// @dev This error is triggered if the mint amount is greater than `maxMint(receiver)`.\\n    error ERC4626__MintMoreThanMax();\\n\\n    /// @notice Thrown when a withdrawal exceeds the maximum available assets.\\n    /// @dev This error is triggered if the withdrawal amount is greater than `maxWithdraw(owner)`.\\n    error ERC4626__WithdrawMoreThanMax();\\n\\n    /// @notice Thrown when a redemption exceeds the maximum redeemable shares.\\n    /// @dev This error is triggered if the redemption amount is greater than `maxRedeem(owner)`.\\n    error ERC4626__RedeemMoreThanMax();\\n\\n    /// @notice Thrown when attempting an operation with a zero amount.\\n    /// @dev This error prevents unnecessary transactions with zero amounts in deposit, withdraw, mint, or redeem operations.\\n    /// @param operation The name of the operation that failed (e.g., \\\"deposit\\\", \\\"withdraw\\\", \\\"mint\\\", \\\"redeem\\\").\\n    error ERC4626__ZeroAmount(string operation);\\n\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    constructor() {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        _disableInitializers();\\n    }\\n\\n    /// @notice Initializes the VenusERC4626 vault, only with the VToken address associated to the vault\\n    /// @dev `initialize2` should be invoked to complete the configuration of the vault\\n    /// @param vToken_ The VToken associated with the vault, representing the yield-bearing asset.\\n    function initialize(address vToken_) public initializer {\\n        ensureNonzeroAddress(vToken_);\\n\\n        vToken = VToken(vToken_);\\n        comptroller = IComptroller(address(vToken.comptroller()));\\n        ERC20Upgradeable asset = ERC20Upgradeable(vToken.underlying());\\n\\n        __ERC20_init(_generateVaultName(asset), _generateVaultSymbol(asset));\\n        __ERC4626_init(asset);\\n        __ReentrancyGuard_init();\\n    }\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param loopsLimit Number of loops limit\\n     * @custom:event Emits MaxLoopsLimitUpdated event on success\\n     * @custom:access Controlled by ACM\\n     */\\n    function setMaxLoopsLimit(uint256 loopsLimit) external {\\n        _checkAccessAllowed(\\\"setMaxLoopsLimit(uint256)\\\");\\n        _setMaxLoopsLimit(loopsLimit);\\n    }\\n\\n    /// @notice Sets a new reward recipient address\\n    /// @param newRecipient The address of the new reward recipient\\n    /// @custom:access Controlled by ACM\\n    function setRewardRecipient(address newRecipient) external {\\n        _checkAccessAllowed(\\\"setRewardRecipient(address)\\\");\\n        _setRewardRecipient(newRecipient);\\n    }\\n\\n    /// @notice Sweeps the input token address tokens from the contract and sends them to the owner\\n    /// @param token Address of the token\\n    /// @custom:event SweepToken emits on success\\n    /// @custom:access Only owner\\n    function sweepToken(IERC20Upgradeable token) external onlyOwner {\\n        uint256 balance = token.balanceOf(address(this));\\n\\n        if (balance > 0) {\\n            address owner_ = owner();\\n            SafeERC20Upgradeable.safeTransfer(token, owner_, balance);\\n            emit SweepToken(address(token), owner_, balance);\\n        }\\n    }\\n\\n    /// @notice Claims rewards from all reward distributors associated with the VToken and transfers them to the reward recipient.\\n    /// @dev Iterates through all reward distributors fetched from the comptroller, claims rewards, and transfers them if available.\\n    function claimRewards() external {\\n        IComptroller _comptroller = comptroller;\\n        VToken _vToken = vToken;\\n        address _rewardRecipient = rewardRecipient;\\n\\n        RewardsDistributor[] memory rewardDistributors = _comptroller.getRewardDistributors();\\n\\n        _ensureMaxLoops(rewardDistributors.length);\\n\\n        for (uint256 i = 0; i < rewardDistributors.length; i++) {\\n            RewardsDistributor rewardDistributor = rewardDistributors[i];\\n            IERC20Upgradeable rewardToken = IERC20Upgradeable(address(rewardDistributor.rewardToken()));\\n\\n            VToken[] memory vTokens = new VToken[](1);\\n            vTokens[0] = _vToken;\\n            RewardsDistributor(rewardDistributor).claimRewardToken(address(this), vTokens);\\n            uint256 rewardBalance = rewardToken.balanceOf(address(this));\\n\\n            if (rewardBalance > 0) {\\n                SafeERC20Upgradeable.safeTransfer(rewardToken, _rewardRecipient, rewardBalance);\\n\\n                // Try to update the asset state on the recipient if reward recipient is a protocol share reserve\\n                // reward recipient cannot be an EOA\\n                try\\n                    IProtocolShareReserve(_rewardRecipient).updateAssetsState(\\n                        address(_comptroller),\\n                        address(rewardToken),\\n                        IProtocolShareReserve.IncomeType.ERC4626_WRAPPER_REWARDS\\n                    )\\n                {} catch {}\\n            }\\n            emit ClaimRewards(rewardBalance, address(rewardToken));\\n        }\\n    }\\n\\n    /// @notice Second function to invoke to complete the configuration of the vault, setting the rest of the attributes\\n    /// @param accessControlManager_ Address of the ACM contract\\n    /// @param rewardRecipient_ The address that will receive rewards generated by the vault.\\n    /// @param loopsLimit_ The maximum number of loops allowed for reward distribution.\\n    /// @param vaultOwner_ The owner that will be set for the created vault\\n    function initialize2(\\n        address accessControlManager_,\\n        address rewardRecipient_,\\n        uint256 loopsLimit_,\\n        address vaultOwner_\\n    ) public reinitializer(2) {\\n        ensureNonzeroAddress(vaultOwner_);\\n\\n        __AccessControlled_init(accessControlManager_);\\n        _setMaxLoopsLimit(loopsLimit_);\\n        _setRewardRecipient(rewardRecipient_);\\n        _transferOwnership(vaultOwner_);\\n    }\\n\\n    /// @inheritdoc ERC4626Upgradeable\\n    function deposit(uint256 assets, address receiver) public override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(receiver);\\n\\n        vToken.accrueInterest();\\n        if (assets == 0) {\\n            revert ERC4626__ZeroAmount(\\\"deposit\\\");\\n        }\\n        if (assets > maxDeposit(receiver)) {\\n            revert ERC4626__DepositMoreThanMax();\\n        }\\n\\n        uint256 shares = previewDeposit(assets);\\n        if (shares == 0) {\\n            revert ERC4626__ZeroAmount(\\\"deposit\\\");\\n        }\\n\\n        uint256 totalSupplyBefore = totalSupply();\\n        _deposit(_msgSender(), receiver, assets, shares);\\n        uint256 actualShares = totalSupply() - totalSupplyBefore;\\n\\n        return actualShares;\\n    }\\n\\n    /// @dev The minted shares are calculated considering the minted VTokens\\n    /// @dev It can mint slightly fewer shares than requested, because VToken.mint rounds down\\n    /// @inheritdoc ERC4626Upgradeable\\n    function mint(uint256 shares, address receiver) public override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(receiver);\\n\\n        vToken.accrueInterest();\\n        if (shares == 0) {\\n            revert ERC4626__ZeroAmount(\\\"mint\\\");\\n        }\\n        if (shares > maxMint(receiver)) {\\n            revert ERC4626__MintMoreThanMax();\\n        }\\n        uint256 assets = previewMint(shares);\\n        if (assets == 0) {\\n            revert ERC4626__ZeroAmount(\\\"mint\\\");\\n        }\\n        _deposit(_msgSender(), receiver, assets, shares);\\n        return assets;\\n    }\\n\\n    /// @dev Receiver can receive slightly more assets than requested, because VToken.redeemUnderlying rounds up\\n    /// @dev The shares to burn are calculated considering the actual transferred assets, not the requested ones\\n    /// @inheritdoc ERC4626Upgradeable\\n    function withdraw(uint256 assets, address receiver, address owner) public override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(receiver);\\n        ensureNonzeroAddress(owner);\\n\\n        vToken.accrueInterest();\\n        if (assets == 0) {\\n            revert ERC4626__ZeroAmount(\\\"withdraw\\\");\\n        }\\n        if (assets > maxWithdraw(owner)) {\\n            revert ERC4626__WithdrawMoreThanMax();\\n        }\\n\\n        (uint256 actualAssets, uint256 actualShares) = _beforeWithdraw(assets);\\n        _withdraw(_msgSender(), receiver, owner, actualAssets, actualShares);\\n\\n        return actualShares;\\n    }\\n\\n    /// @inheritdoc ERC4626Upgradeable\\n    function redeem(uint256 shares, address receiver, address owner) public override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(receiver);\\n        ensureNonzeroAddress(owner);\\n\\n        vToken.accrueInterest();\\n        if (shares == 0) {\\n            revert ERC4626__ZeroAmount(\\\"redeem\\\");\\n        }\\n        if (shares > maxRedeem(owner)) {\\n            revert ERC4626__RedeemMoreThanMax();\\n        }\\n\\n        uint256 actualAssets = _beforeRedeem(shares);\\n        if (actualAssets == 0) {\\n            revert ERC4626__ZeroAmount(\\\"redeem\\\");\\n        }\\n\\n        _withdraw(_msgSender(), receiver, owner, actualAssets, shares);\\n        return actualAssets;\\n    }\\n\\n    /// @notice Returns the total amount of assets deposited\\n    /// @return Amount of assets deposited\\n    function totalAssets() public view virtual override returns (uint256) {\\n        return (vToken.balanceOf(address(this)) * vToken.exchangeRateStored()) / EXP_SCALE;\\n    }\\n\\n    /// @notice Returns the maximum deposit allowed based on Venus supply caps.\\n    /// @dev If minting is paused or the supply cap is reached, returns 0.\\n    /// @param /*account*/ The address of the account.\\n    /// @return The maximum amount of assets that can be deposited.\\n    function maxDeposit(address /*account*/) public view virtual override returns (uint256) {\\n        if (comptroller.actionPaused(address(vToken), Action.MINT)) {\\n            return 0;\\n        }\\n\\n        uint256 supplyCap = comptroller.supplyCaps(address(vToken));\\n        uint256 totalSupply_ = (vToken.totalSupply() * vToken.exchangeRateStored()) / EXP_SCALE;\\n        return supplyCap > totalSupply_ ? supplyCap - totalSupply_ : 0;\\n    }\\n\\n    /// @notice Returns the maximum amount of shares that can be minted.\\n    /// @dev This is derived from the maximum deposit amount converted to shares.\\n    /// @param /*account*/ The address of the account.\\n    /// @return The maximum number of shares that can be minted.\\n    function maxMint(address /*account*/) public view virtual override returns (uint256) {\\n        return convertToShares(maxDeposit(address(0)));\\n    }\\n\\n    /// @notice Returns the maximum amount that can be withdrawn.\\n    /// @dev The withdrawable amount is limited by the available cash in the vault.\\n    /// @param receiver The address of the account withdrawing.\\n    /// @return The maximum amount of assets that can be withdrawn.\\n    function maxWithdraw(address receiver) public view virtual override returns (uint256) {\\n        if (comptroller.actionPaused(address(vToken), Action.REDEEM)) {\\n            return 0;\\n        }\\n\\n        uint256 cash = vToken.getCash();\\n        uint256 totalReserves = vToken.totalReserves();\\n        uint256 assetsBalance = convertToAssets(balanceOf(receiver));\\n\\n        if (cash < totalReserves) {\\n            return 0;\\n        } else {\\n            uint256 availableCash = cash - totalReserves;\\n            return availableCash < assetsBalance ? availableCash : assetsBalance;\\n        }\\n    }\\n\\n    /// @notice Returns the maximum amount of shares that can be redeemed.\\n    /// @dev Redemption is limited by the available cash in the vault.\\n    /// @param receiver The address of the account redeeming.\\n    /// @return The maximum number of shares that can be redeemed.\\n    function maxRedeem(address receiver) public view virtual override returns (uint256) {\\n        if (comptroller.actionPaused(address(vToken), Action.REDEEM)) {\\n            return 0;\\n        }\\n\\n        uint256 cash = vToken.getCash();\\n        uint256 totalReserves = vToken.totalReserves();\\n        if (cash < totalReserves) {\\n            return 0;\\n        } else {\\n            uint256 availableCash = cash - totalReserves;\\n            uint256 availableCashInShares = convertToShares(availableCash);\\n            uint256 shareBalance = balanceOf(receiver);\\n            return availableCashInShares < shareBalance ? availableCashInShares : shareBalance;\\n        }\\n    }\\n\\n    /// @notice Redeems the amount of vTokens equivalent to the provided shares.\\n    /// @dev Calls `redeem` on the vToken contract. Reverts on error.\\n    /// @param shares The amount of shares to redeem.\\n    /// @return The amount of assets transferred in\\n    function _beforeRedeem(uint256 shares) internal returns (uint256) {\\n        IERC20Upgradeable token = IERC20Upgradeable(asset());\\n        uint256 balanceBefore = token.balanceOf(address(this));\\n\\n        // Calculate the amount of vTokens equivalent to the amount of shares, rounding it down\\n        uint256 vTokens = shares.mulDiv(\\n            vToken.balanceOf(address(this)),\\n            totalSupply() + 10 ** _decimalsOffset(),\\n            MathUpgradeable.Rounding.Down\\n        );\\n\\n        uint256 errorCode = vToken.redeem(vTokens);\\n        if (errorCode != NO_ERROR) {\\n            revert VenusERC4626__VenusError(errorCode);\\n        }\\n\\n        uint256 balanceAfter = token.balanceOf(address(this));\\n\\n        // Return the amount of assets that was *actually* transferred in\\n        return balanceAfter - balanceBefore;\\n    }\\n\\n    /// @notice Redeems underlying assets before withdrawing from the vault.\\n    /// @dev Calls `redeemUnderlying` on the vToken contract. Reverts on error.\\n    /// @param assets The amount of underlying assets to redeem.\\n    /// @return actualAssets The amount of assets transferred in\\n    /// @return actualShares The shares equivalent to `actualAssets`, to be burned, rounded up\\n    /// @custom:error ERC4626__ZeroAmount is thrown when the redeemed VTokens are zero\\n    function _beforeWithdraw(uint256 assets) internal returns (uint256 actualAssets, uint256 actualShares) {\\n        IERC20Upgradeable token = IERC20Upgradeable(asset());\\n        uint256 balanceBefore = token.balanceOf(address(this));\\n        uint256 vTokenBalanceBefore = vToken.balanceOf(address(this));\\n\\n        uint256 errorCode = vToken.redeemUnderlying(assets);\\n        if (errorCode != NO_ERROR) {\\n            revert VenusERC4626__VenusError(errorCode);\\n        }\\n\\n        // Return the amount of assets *actually* transferred in\\n        actualAssets = token.balanceOf(address(this)) - balanceBefore;\\n\\n        uint256 actualVTokens = vTokenBalanceBefore - vToken.balanceOf(address(this));\\n        if (actualVTokens == 0) {\\n            revert ERC4626__ZeroAmount(\\\"actualVTokens at _beforeWithdraw\\\");\\n        }\\n        // Return the shares equivalent to the burned vTokens\\n        actualShares = actualVTokens.mulDiv(\\n            totalSupply() + 10 ** _decimalsOffset(),\\n            vTokenBalanceBefore,\\n            MathUpgradeable.Rounding.Up\\n        );\\n    }\\n\\n    /// @notice Mints vTokens after depositing assets.\\n    /// @dev Calls `mint` on the vToken contract. Reverts on error.\\n    /// @param assets The amount of underlying assets to deposit.\\n    function _mintVTokens(uint256 assets) internal {\\n        ERC20Upgradeable(asset()).safeApprove(address(vToken), assets);\\n        uint256 errorCode = vToken.mint(assets);\\n        if (errorCode != NO_ERROR) {\\n            revert VenusERC4626__VenusError(errorCode);\\n        }\\n    }\\n\\n    /// @notice Sets a new reward recipient address\\n    /// @param newRecipient The address of the new reward recipient\\n    /// @custom:error ZeroAddressNotAllowed is thrown when the new recipient address is zero\\n    /// @custom:event RewardRecipientUpdated is emitted when the reward recipient address is updated\\n    function _setRewardRecipient(address newRecipient) internal {\\n        ensureNonzeroAddress(newRecipient);\\n\\n        emit RewardRecipientUpdated(rewardRecipient, newRecipient);\\n        rewardRecipient = newRecipient;\\n    }\\n\\n    /// @notice Deposits the assets into the VToken and calculates the shares to mint based on the\\n    /// underlying assets equivalent to the new VTokens minted\\n    /// @custom:error ERC4626__ZeroAmount is thrown when the minted VTokens are zero\\n    /// @inheritdoc ERC4626Upgradeable\\n    function _deposit(address caller, address receiver, uint256 assets, uint256 shares) internal override {\\n        // 1. Track pre-transfer balances\\n        uint256 assetBalanceBefore = IERC20Upgradeable(asset()).balanceOf(address(this));\\n        uint256 vTokenBalanceBefore = vToken.balanceOf(address(this));\\n\\n        // 2. Perform asset transfer (original OZ 4626 logic)\\n        SafeERC20Upgradeable.safeTransferFrom(IERC20Upgradeable(asset()), caller, address(this), assets);\\n\\n        // 3. Calculate actual assets received (protects against fee-on-transfer)\\n        uint256 assetsReceived = IERC20Upgradeable(asset()).balanceOf(address(this)) - assetBalanceBefore;\\n\\n        // 4. Mint vTokens with received assets\\n        _mintVTokens(assetsReceived);\\n\\n        // 5. Verify actual vTokens received\\n        uint256 vTokensReceived = vToken.balanceOf(address(this)) - vTokenBalanceBefore;\\n        if (vTokensReceived == 0) {\\n            revert ERC4626__ZeroAmount(\\\"vTokensReceived at _deposit\\\");\\n        }\\n        uint256 actualAssetsValue = (vTokensReceived * vToken.exchangeRateStored()) / EXP_SCALE;\\n\\n        // 6. Recalculate shares based on actual received value\\n        // This is the same operation performed by previewDeposit, adjusting the total assets\\n        uint256 actualShares = actualAssetsValue.mulDiv(\\n            totalSupply() + 10 ** _decimalsOffset(),\\n            totalAssets() + 1 - actualAssetsValue, // remove the new assets deposited to the VToken in this operation\\n            MathUpgradeable.Rounding.Down\\n        );\\n\\n        // 7. Mint the corrected share amount\\n        _mint(receiver, actualShares);\\n\\n        emit Deposit(caller, receiver, assets, actualShares);\\n    }\\n\\n    /// @notice Override `_decimalsOffset` to normalize decimals to 18 for all VenusERC4626 vaults.\\n    /// @return Gap between 18 and the decimals of the asset token\\n    function _decimalsOffset() internal view virtual override returns (uint8) {\\n        return 18 - ERC20Upgradeable(asset()).decimals();\\n    }\\n\\n    /// @notice Generates and returns the derived name of the vault considering the asset name\\n    /// @param asset_ Asset to be accepted in the vault whose name this function will return\\n    /// @return Name of the vault considering the asset name\\n    function _generateVaultName(ERC20Upgradeable asset_) internal view returns (string memory) {\\n        return string(abi.encodePacked(\\\"ERC4626-Wrapped Venus \\\", asset_.name()));\\n    }\\n\\n    /// @notice Generates and returns the derived symbol of the vault considering the asset symbol\\n    /// @param asset_ Asset to be accepted in the vault whose symbol this function will return\\n    /// @return Symbol of the vault considering the asset name\\n    function _generateVaultSymbol(ERC20Upgradeable asset_) internal view returns (string memory) {\\n        return string(abi.encodePacked(\\\"v4626\\\", asset_.symbol()));\\n    }\\n}\\n\",\"keccak256\":\"0x6adbd1422570730a199a185d3eb6023d36d4df59a1f777901720f6ac52e3214c\",\"license\":\"BSD-3-Clause\"},\"contracts/ERC4626/VenusERC4626Factory.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ERC4626Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol\\\";\\nimport { UpgradeableBeacon } from \\\"@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol\\\";\\nimport { BeaconProxy } from \\\"@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol\\\";\\n\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { PoolRegistryInterface } from \\\"@venusprotocol/isolated-pools/contracts/Pool/PoolRegistryInterface.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\\\";\\nimport { VTokenInterface } from \\\"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol\\\";\\nimport { VenusERC4626 } from \\\"./VenusERC4626.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"@venusprotocol/solidity-utilities/contracts/validators.sol\\\";\\n\\n/// @title VenusERC4626Factory\\n/// @notice Factory for creating VenusERC4626 contracts\\ncontract VenusERC4626Factory is AccessControlledV8, MaxLoopsLimitHelper {\\n    /// @notice A constant salt value used for deterministic contract deployment\\n    bytes32 public constant SALT = keccak256(\\\"Venus-ERC4626 Vault\\\");\\n\\n    /// @notice The beacon contract for VenusERC4626 proxies\\n    UpgradeableBeacon public beacon;\\n\\n    /// @notice The Pool Registry contract\\n    PoolRegistryInterface public poolRegistry;\\n\\n    /// @notice The address that will receive the liquidity mining rewards\\n    address public rewardRecipient;\\n\\n    // @notice Map of vaults created by this factory\\n    mapping(address vToken => ERC4626Upgradeable vault) public createdVaults;\\n\\n    /// @notice Emitted when a new ERC4626 vault has been created\\n    /// @param vToken The vToken used by the vault\\n    /// @param vault The vault that was created\\n    event CreateERC4626(VTokenInterface indexed vToken, ERC4626Upgradeable indexed vault);\\n\\n    /// @notice Emitted when the reward recipient address is updated.\\n    /// @param oldRecipient The previous reward recipient address.\\n    /// @param newRecipient The new reward recipient address.\\n    event RewardRecipientUpdated(address indexed oldRecipient, address indexed newRecipient);\\n\\n    /// @notice Thrown when the provided vToken is not registered in PoolRegistry\\n    error VenusERC4626Factory__InvalidVToken();\\n\\n    /// @notice Thrown when a VenusERC4626 already exists for the provided vToken\\n    error VenusERC4626Factory__ERC4626AlreadyExists();\\n\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    constructor() {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        _disableInitializers();\\n    }\\n\\n    /// @notice Initializes the contract\\n    /// @param accessControlManager Address of the ACM contract\\n    /// @param poolRegistryAddress Address of the Pool Registry contract\\n    /// @param rewardRecipientAddress Reward recipient address\\n    /// @param venusERC4626Implementation Address of the VenusERC4626 implementation contract\\n    /// @param loopsLimitNumber The loops limit for the MaxLoopsLimit helper\\n    function initialize(\\n        address accessControlManager,\\n        address poolRegistryAddress,\\n        address rewardRecipientAddress,\\n        address venusERC4626Implementation,\\n        uint256 loopsLimitNumber\\n    ) external initializer {\\n        ensureNonzeroAddress(accessControlManager);\\n        ensureNonzeroAddress(poolRegistryAddress);\\n        ensureNonzeroAddress(rewardRecipientAddress);\\n        ensureNonzeroAddress(venusERC4626Implementation);\\n\\n        __AccessControlled_init(accessControlManager);\\n\\n        poolRegistry = PoolRegistryInterface(poolRegistryAddress);\\n        rewardRecipient = rewardRecipientAddress;\\n        _setMaxLoopsLimit(loopsLimitNumber);\\n\\n        // Deploy the upgradeable beacon with the initial implementation\\n        beacon = new UpgradeableBeacon(venusERC4626Implementation);\\n\\n        // The owner of the beacon will initially be the owner of the factory\\n        beacon.transferOwnership(owner());\\n    }\\n\\n    /// @notice Sets a new reward recipient address\\n    /// @param newRecipient The address of the new reward recipient\\n    /// @custom:access Controlled by ACM\\n    /// @custom:error ZeroAddressNotAllowed is thrown when the new recipient address is zero\\n    /// @custom:event RewardRecipientUpdated is emitted when the reward recipient address is updated\\n    function setRewardRecipient(address newRecipient) external {\\n        _checkAccessAllowed(\\\"setRewardRecipient(address)\\\");\\n        ensureNonzeroAddress(newRecipient);\\n\\n        emit RewardRecipientUpdated(rewardRecipient, newRecipient);\\n        rewardRecipient = newRecipient;\\n    }\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param loopsLimit Number of loops limit\\n     * @custom:event Emits MaxLoopsLimitUpdated event on success\\n     * @custom:access Controlled by ACM\\n     */\\n    function setMaxLoopsLimit(uint256 loopsLimit) external {\\n        _checkAccessAllowed(\\\"setMaxLoopsLimit(uint256)\\\");\\n        _setMaxLoopsLimit(loopsLimit);\\n    }\\n\\n    /// @notice Creates a VenusERC4626 vault for a given asset and comptroller\\n    /// @param vToken The vToken address to create the vault\\n    /// @return vault The deployed VenusERC4626 vault\\n    /// @custom:error ZeroAddressNotAllowed is thrown when the vToken address is zero\\n    /// @custom:error VenusERC4626Factory__InvalidVToken is thrown when the provided vToken is not supported by the poolRegistry\\n    /// @custom:error VenusERC4626Factory__ERC4626AlreadyExists is thrown when this factory already created a VenusERC4626 for the provided vToken\\n    /// @custom:event CreateERC4626 is emitted when the ERC4626 wrapper is created\\n    function createERC4626(address vToken) external returns (ERC4626Upgradeable vault) {\\n        ensureNonzeroAddress(vToken);\\n\\n        if (address(createdVaults[vToken]) != address(0)) {\\n            revert VenusERC4626Factory__ERC4626AlreadyExists();\\n        }\\n\\n        VTokenInterface vToken_ = VTokenInterface(vToken);\\n\\n        address comptroller = address(vToken_.comptroller());\\n\\n        if (vToken != poolRegistry.getVTokenForAsset(comptroller, vToken_.underlying())) {\\n            revert VenusERC4626Factory__InvalidVToken();\\n        }\\n\\n        VenusERC4626 venusERC4626 = VenusERC4626(\\n            address(\\n                new BeaconProxy{ salt: SALT }(\\n                    address(beacon),\\n                    abi.encodeWithSelector(VenusERC4626.initialize.selector, vToken)\\n                )\\n            )\\n        );\\n\\n        venusERC4626.initialize2(address(_accessControlManager), rewardRecipient, maxLoopsLimit, owner());\\n\\n        vault = ERC4626Upgradeable(address(venusERC4626));\\n\\n        createdVaults[vToken] = vault;\\n\\n        emit CreateERC4626(vToken_, vault);\\n    }\\n\\n    /// @notice Predicts the vault address for a given vToken\\n    /// @param vToken The vToken address\\n    /// @return The precomputed vault address\\n    function computeVaultAddress(address vToken) public view returns (address) {\\n        return\\n            address(\\n                uint160(\\n                    uint256(\\n                        keccak256(\\n                            abi.encodePacked(\\n                                bytes1(0xff),\\n                                address(this),\\n                                SALT,\\n                                keccak256(\\n                                    abi.encodePacked(\\n                                        type(BeaconProxy).creationCode,\\n                                        abi.encode(\\n                                            address(beacon),\\n                                            abi.encodeWithSelector(VenusERC4626.initialize.selector, vToken)\\n                                        )\\n                                    )\\n                                )\\n                            )\\n                        )\\n                    )\\n                )\\n            );\\n    }\\n}\\n\",\"keccak256\":\"0x54435205a6c41344053727788a1009091abd786fd525c5dda75b42fda108e148\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[{"astId":414,"contract":"contracts/ERC4626/VenusERC4626Factory.sol:VenusERC4626Factory","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":417,"contract":"contracts/ERC4626/VenusERC4626Factory.sol:VenusERC4626Factory","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":2820,"contract":"contracts/ERC4626/VenusERC4626Factory.sol:VenusERC4626Factory","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":118,"contract":"contracts/ERC4626/VenusERC4626Factory.sol:VenusERC4626Factory","label":"_owner","offset":0,"slot":"51","type":"t_address"},{"astId":238,"contract":"contracts/ERC4626/VenusERC4626Factory.sol:VenusERC4626Factory","label":"__gap","offset":0,"slot":"52","type":"t_array(t_uint256)49_storage"},{"astId":11,"contract":"contracts/ERC4626/VenusERC4626Factory.sol:VenusERC4626Factory","label":"_pendingOwner","offset":0,"slot":"101","type":"t_address"},{"astId":105,"contract":"contracts/ERC4626/VenusERC4626Factory.sol:VenusERC4626Factory","label":"__gap","offset":0,"slot":"102","type":"t_array(t_uint256)49_storage"},{"astId":4895,"contract":"contracts/ERC4626/VenusERC4626Factory.sol:VenusERC4626Factory","label":"_accessControlManager","offset":0,"slot":"151","type":"t_contract(IAccessControlManagerV8)5080"},{"astId":4900,"contract":"contracts/ERC4626/VenusERC4626Factory.sol:VenusERC4626Factory","label":"__gap","offset":0,"slot":"152","type":"t_array(t_uint256)49_storage"},{"astId":10271,"contract":"contracts/ERC4626/VenusERC4626Factory.sol:VenusERC4626Factory","label":"maxLoopsLimit","offset":0,"slot":"201","type":"t_uint256"},{"astId":10276,"contract":"contracts/ERC4626/VenusERC4626Factory.sol:VenusERC4626Factory","label":"__gap","offset":0,"slot":"202","type":"t_array(t_uint256)49_storage"},{"astId":18252,"contract":"contracts/ERC4626/VenusERC4626Factory.sol:VenusERC4626Factory","label":"beacon","offset":0,"slot":"251","type":"t_contract(UpgradeableBeacon)4411"},{"astId":18256,"contract":"contracts/ERC4626/VenusERC4626Factory.sol:VenusERC4626Factory","label":"poolRegistry","offset":0,"slot":"252","type":"t_contract(PoolRegistryInterface)10404"},{"astId":18259,"contract":"contracts/ERC4626/VenusERC4626Factory.sol:VenusERC4626Factory","label":"rewardRecipient","offset":0,"slot":"253","type":"t_address"},{"astId":18264,"contract":"contracts/ERC4626/VenusERC4626Factory.sol:VenusERC4626Factory","label":"createdVaults","offset":0,"slot":"254","type":"t_mapping(t_address,t_contract(ERC4626Upgradeable)2003)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(ERC4626Upgradeable)2003":{"encoding":"inplace","label":"contract ERC4626Upgradeable","numberOfBytes":"20"},"t_contract(IAccessControlManagerV8)5080":{"encoding":"inplace","label":"contract IAccessControlManagerV8","numberOfBytes":"20"},"t_contract(PoolRegistryInterface)10404":{"encoding":"inplace","label":"contract PoolRegistryInterface","numberOfBytes":"20"},"t_contract(UpgradeableBeacon)4411":{"encoding":"inplace","label":"contract UpgradeableBeacon","numberOfBytes":"20"},"t_mapping(t_address,t_contract(ERC4626Upgradeable)2003)":{"encoding":"mapping","key":"t_address","label":"mapping(address => contract ERC4626Upgradeable)","numberOfBytes":"32","value":"t_contract(ERC4626Upgradeable)2003"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"errors":{"MaxLoopsLimitExceeded(uint256,uint256)":[{"notice":"Thrown an error on maxLoopsLimit exceeds for any loop"}],"Unauthorized(address,address,string)":[{"notice":"Thrown when the action is prohibited by AccessControlManager"}],"VenusERC4626Factory__ERC4626AlreadyExists()":[{"notice":"Thrown when a VenusERC4626 already exists for the provided vToken"}],"VenusERC4626Factory__InvalidVToken()":[{"notice":"Thrown when the provided vToken is not registered in PoolRegistry"}],"ZeroAddressNotAllowed()":[{"notice":"Thrown if the supplied address is a zero address where it is not allowed"}]},"events":{"CreateERC4626(address,address)":{"notice":"Emitted when a new ERC4626 vault has been created"},"MaxLoopsLimitUpdated(uint256,uint256)":{"notice":"Emitted when max loops limit is set"},"NewAccessControlManager(address,address)":{"notice":"Emitted when access control manager contract address is changed"},"RewardRecipientUpdated(address,address)":{"notice":"Emitted when the reward recipient address is updated."}},"kind":"user","methods":{"SALT()":{"notice":"A constant salt value used for deterministic contract deployment"},"accessControlManager()":{"notice":"Returns the address of the access control manager contract"},"beacon()":{"notice":"The beacon contract for VenusERC4626 proxies"},"computeVaultAddress(address)":{"notice":"Predicts the vault address for a given vToken"},"createERC4626(address)":{"notice":"Creates a VenusERC4626 vault for a given asset and comptroller"},"initialize(address,address,address,address,uint256)":{"notice":"Initializes the contract"},"poolRegistry()":{"notice":"The Pool Registry contract"},"rewardRecipient()":{"notice":"The address that will receive the liquidity mining rewards"},"setAccessControlManager(address)":{"notice":"Sets the address of AccessControlManager"},"setMaxLoopsLimit(uint256)":{"notice":"Set the limit for the loops can iterate to avoid the DOS"},"setRewardRecipient(address)":{"notice":"Sets a new reward recipient address"}},"notice":"Factory for creating VenusERC4626 contracts","version":1}}},"contracts/test/Mocks/MockVenusERC4626.sol":{"MockVenusERC4626":{"abi":[{"inputs":[],"name":"ERC4626__DepositMoreThanMax","type":"error"},{"inputs":[],"name":"ERC4626__MintMoreThanMax","type":"error"},{"inputs":[],"name":"ERC4626__RedeemMoreThanMax","type":"error"},{"inputs":[],"name":"ERC4626__WithdrawMoreThanMax","type":"error"},{"inputs":[{"internalType":"string","name":"operation","type":"string"}],"name":"ERC4626__ZeroAmount","type":"error"},{"inputs":[{"internalType":"uint256","name":"loopsLimit","type":"uint256"},{"internalType":"uint256","name":"requiredLoops","type":"uint256"}],"name":"MaxLoopsLimitExceeded","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"calledContract","type":"address"},{"internalType":"string","name":"methodSignature","type":"string"}],"name":"Unauthorized","type":"error"},{"inputs":[{"internalType":"uint256","name":"errorCode","type":"uint256"}],"name":"VenusERC4626__VenusError","type":"error"},{"inputs":[],"name":"ZeroAddressNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"rewardToken","type":"address"}],"name":"ClaimRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMaxLoopsLimit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newmaxLoopsLimit","type":"uint256"}],"name":"MaxLoopsLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAccessControlManager","type":"address"},{"indexed":false,"internalType":"address","name":"newAccessControlManager","type":"address"}],"name":"NewAccessControlManager","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldRecipient","type":"address"},{"indexed":true,"internalType":"address","name":"newRecipient","type":"address"}],"name":"RewardRecipientUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SweepToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accessControlManager","outputs":[{"internalType":"contract IAccessControlManagerV8","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"comptroller","outputs":[{"internalType":"contract IComptroller","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vToken_","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"accessControlManager_","type":"address"},{"internalType":"address","name":"rewardRecipient_","type":"address"},{"internalType":"uint256","name":"loopsLimit_","type":"uint256"},{"internalType":"address","name":"vaultOwner_","type":"address"}],"name":"initialize2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLoopsLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"accessControlManager_","type":"address"}],"name":"setAccessControlManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"}],"name":"setAccountBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxDeposit","type":"uint256"}],"name":"setMaxDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"loopsLimit","type":"uint256"}],"name":"setMaxLoopsLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMint","type":"uint256"}],"name":"setMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxRedeem","type":"uint256"}],"name":"setMaxRedeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWithdraw","type":"uint256"}],"name":"setMaxWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRecipient","type":"address"}],"name":"setRewardRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalAssets","type":"uint256"}],"name":"setTotalAssets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalSupply","type":"uint256"}],"name":"setTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20Upgradeable","name":"token","type":"address"}],"name":"sweepToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vToken","outputs":[{"internalType":"contract VToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"errors":{"ERC4626__DepositMoreThanMax()":[{"details":"This error is triggered if the deposit amount is greater than `maxDeposit(receiver)`."}],"ERC4626__MintMoreThanMax()":[{"details":"This error is triggered if the mint amount is greater than `maxMint(receiver)`."}],"ERC4626__RedeemMoreThanMax()":[{"details":"This error is triggered if the redemption amount is greater than `maxRedeem(owner)`."}],"ERC4626__WithdrawMoreThanMax()":[{"details":"This error is triggered if the withdrawal amount is greater than `maxWithdraw(owner)`."}],"ERC4626__ZeroAmount(string)":[{"details":"This error prevents unnecessary transactions with zero amounts in deposit, withdraw, mint, or redeem operations.","params":{"operation":"The name of the operation that failed (e.g., \"deposit\", \"withdraw\", \"mint\", \"redeem\")."}}],"VenusERC4626__VenusError(uint256)":[{"details":"This error is triggered if a Venus operation (such as minting or redeeming vTokens) fails.","params":{"errorCode":"The error code returned by the Venus protocol."}}]},"events":{"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"ClaimRewards(uint256,address)":{"params":{"amount":"The amount of reward tokens claimed.","rewardToken":"The address of the reward token claimed."}},"Initialized(uint8)":{"details":"Triggered when the contract has been initialized or reinitialized."},"RewardRecipientUpdated(address,address)":{"params":{"newRecipient":"The new reward recipient address.","oldRecipient":"The previous reward recipient address."}},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"kind":"dev","methods":{"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"asset()":{"details":"See {IERC4626-asset}. "},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"claimRewards()":{"details":"Iterates through all reward distributors fetched from the comptroller, claims rewards, and transfers them if available."},"convertToAssets(uint256)":{"details":"See {IERC4626-convertToAssets}. "},"convertToShares(uint256)":{"details":"See {IERC4626-convertToShares}. "},"decimals()":{"details":"Decimals are computed by adding the decimal offset on top of the underlying asset's decimals. This \"original\" value is cached during construction of the vault contract. If this read operation fails (e.g., the asset has not been created yet), a default of 18 is used to represent the underlying asset's decimals. See {IERC20Metadata-decimals}."},"decreaseAllowance(address,uint256)":{"details":"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."},"deposit(uint256,address)":{"details":"See {IERC4626-deposit}. "},"increaseAllowance(address,uint256)":{"details":"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."},"initialize(address)":{"details":"`initialize2` should be invoked to complete the configuration of the vault","params":{"vToken_":"The VToken associated with the vault, representing the yield-bearing asset."}},"initialize2(address,address,uint256,address)":{"params":{"accessControlManager_":"Address of the ACM contract","loopsLimit_":"The maximum number of loops allowed for reward distribution.","rewardRecipient_":"The address that will receive rewards generated by the vault.","vaultOwner_":"The owner that will be set for the created vault"}},"maxDeposit(address)":{"details":"If minting is paused or the supply cap is reached, returns 0.","params":{"":"/*account*/ The address of the account."},"returns":{"_0":"The maximum amount of assets that can be deposited."}},"maxMint(address)":{"details":"This is derived from the maximum deposit amount converted to shares.","params":{"":"/*account*/ The address of the account."},"returns":{"_0":"The maximum number of shares that can be minted."}},"mint(uint256,address)":{"details":"The minted shares are calculated considering the minted VTokensIt can mint slightly fewer shares than requested, because VToken.mint rounds down"},"name()":{"details":"Returns the name of the token."},"owner()":{"details":"Returns the address of the current owner."},"pendingOwner()":{"details":"Returns the address of the pending owner."},"previewDeposit(uint256)":{"details":"See {IERC4626-previewDeposit}. "},"previewMint(uint256)":{"details":"See {IERC4626-previewMint}. "},"previewRedeem(uint256)":{"details":"See {IERC4626-previewRedeem}. "},"previewWithdraw(uint256)":{"details":"See {IERC4626-previewWithdraw}. "},"redeem(uint256,address,address)":{"details":"See {IERC4626-redeem}. "},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"setAccessControlManager(address)":{"custom:access":"Only Governance","custom:event":"Emits NewAccessControlManager event","details":"Admin function to set address of AccessControlManager","params":{"accessControlManager_":"The new address of the AccessControlManager"}},"setMaxLoopsLimit(uint256)":{"custom:access":"Controlled by ACM","custom:event":"Emits MaxLoopsLimitUpdated event on success","params":{"loopsLimit":"Number of loops limit"}},"setRewardRecipient(address)":{"custom:access":"Controlled by ACM","params":{"newRecipient":"The address of the new reward recipient"}},"sweepToken(address)":{"custom:access":"Only owner","custom:event":"SweepToken emits on success","params":{"token":"Address of the token"}},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalAssets()":{"returns":{"_0":"Amount of assets deposited"}},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`."},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."},"withdraw(uint256,address,address)":{"details":"Receiver can receive slightly more assets than requested, because VToken.redeemUnderlying rounds upThe shares to burn are calculated considering the actual transferred assets, not the requested ones"}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_16950":{"entryPoint":null,"id":16950,"parameterSlots":0,"returnSlots":0},"@_disableInitializers_557":{"entryPoint":30,"id":557,"parameterSlots":0,"returnSlots":0},"abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_uint8_to_t_uint8_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":165,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":246,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_uint8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:1638:69","nodeType":"YulBlock","src":"0:1638:69","statements":[{"body":{"nativeSrc":"103:73:69","nodeType":"YulBlock","src":"103:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"120:3:69","nodeType":"YulIdentifier","src":"120:3:69"},{"name":"length","nativeSrc":"125:6:69","nodeType":"YulIdentifier","src":"125:6:69"}],"functionName":{"name":"mstore","nativeSrc":"113:6:69","nodeType":"YulIdentifier","src":"113:6:69"},"nativeSrc":"113:19:69","nodeType":"YulFunctionCall","src":"113:19:69"},"nativeSrc":"113:19:69","nodeType":"YulExpressionStatement","src":"113:19:69"},{"nativeSrc":"141:29:69","nodeType":"YulAssignment","src":"141:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"160:3:69","nodeType":"YulIdentifier","src":"160:3:69"},{"kind":"number","nativeSrc":"165:4:69","nodeType":"YulLiteral","src":"165:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"156:3:69","nodeType":"YulIdentifier","src":"156:3:69"},"nativeSrc":"156:14:69","nodeType":"YulFunctionCall","src":"156:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"141:11:69","nodeType":"YulIdentifier","src":"141:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"7:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"75:3:69","nodeType":"YulTypedName","src":"75:3:69","type":""},{"name":"length","nativeSrc":"80:6:69","nodeType":"YulTypedName","src":"80:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"91:11:69","nodeType":"YulTypedName","src":"91:11:69","type":""}],"src":"7:169:69"},{"body":{"nativeSrc":"288:120:69","nodeType":"YulBlock","src":"288:120:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},{"kind":"number","nativeSrc":"318:1:69","nodeType":"YulLiteral","src":"318:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"306:3:69","nodeType":"YulIdentifier","src":"306:3:69"},"nativeSrc":"306:14:69","nodeType":"YulFunctionCall","src":"306:14:69"},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320696e697469","kind":"string","nativeSrc":"322:34:69","nodeType":"YulLiteral","src":"322:34:69","type":"","value":"Initializable: contract is initi"}],"functionName":{"name":"mstore","nativeSrc":"299:6:69","nodeType":"YulIdentifier","src":"299:6:69"},"nativeSrc":"299:58:69","nodeType":"YulFunctionCall","src":"299:58:69"},"nativeSrc":"299:58:69","nodeType":"YulExpressionStatement","src":"299:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"378:6:69","nodeType":"YulIdentifier","src":"378:6:69"},{"kind":"number","nativeSrc":"386:2:69","nodeType":"YulLiteral","src":"386:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"374:3:69","nodeType":"YulIdentifier","src":"374:3:69"},"nativeSrc":"374:15:69","nodeType":"YulFunctionCall","src":"374:15:69"},{"hexValue":"616c697a696e67","kind":"string","nativeSrc":"391:9:69","nodeType":"YulLiteral","src":"391:9:69","type":"","value":"alizing"}],"functionName":{"name":"mstore","nativeSrc":"367:6:69","nodeType":"YulIdentifier","src":"367:6:69"},"nativeSrc":"367:34:69","nodeType":"YulFunctionCall","src":"367:34:69"},"nativeSrc":"367:34:69","nodeType":"YulExpressionStatement","src":"367:34:69"}]},"name":"store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a","nativeSrc":"182:226:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"280:6:69","nodeType":"YulTypedName","src":"280:6:69","type":""}],"src":"182:226:69"},{"body":{"nativeSrc":"560:220:69","nodeType":"YulBlock","src":"560:220:69","statements":[{"nativeSrc":"570:74:69","nodeType":"YulAssignment","src":"570:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"636:3:69","nodeType":"YulIdentifier","src":"636:3:69"},{"kind":"number","nativeSrc":"641:2:69","nodeType":"YulLiteral","src":"641:2:69","type":"","value":"39"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"577:58:69","nodeType":"YulIdentifier","src":"577:58:69"},"nativeSrc":"577:67:69","nodeType":"YulFunctionCall","src":"577:67:69"},"variableNames":[{"name":"pos","nativeSrc":"570:3:69","nodeType":"YulIdentifier","src":"570:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"742:3:69","nodeType":"YulIdentifier","src":"742:3:69"}],"functionName":{"name":"store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a","nativeSrc":"653:88:69","nodeType":"YulIdentifier","src":"653:88:69"},"nativeSrc":"653:93:69","nodeType":"YulFunctionCall","src":"653:93:69"},"nativeSrc":"653:93:69","nodeType":"YulExpressionStatement","src":"653:93:69"},{"nativeSrc":"755:19:69","nodeType":"YulAssignment","src":"755:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"766:3:69","nodeType":"YulIdentifier","src":"766:3:69"},{"kind":"number","nativeSrc":"771:2:69","nodeType":"YulLiteral","src":"771:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"762:3:69","nodeType":"YulIdentifier","src":"762:3:69"},"nativeSrc":"762:12:69","nodeType":"YulFunctionCall","src":"762:12:69"},"variableNames":[{"name":"end","nativeSrc":"755:3:69","nodeType":"YulIdentifier","src":"755:3:69"}]}]},"name":"abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack","nativeSrc":"414:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"548:3:69","nodeType":"YulTypedName","src":"548:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"556:3:69","nodeType":"YulTypedName","src":"556:3:69","type":""}],"src":"414:366:69"},{"body":{"nativeSrc":"957:248:69","nodeType":"YulBlock","src":"957:248:69","statements":[{"nativeSrc":"967:26:69","nodeType":"YulAssignment","src":"967:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"979:9:69","nodeType":"YulIdentifier","src":"979:9:69"},{"kind":"number","nativeSrc":"990:2:69","nodeType":"YulLiteral","src":"990:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"975:3:69","nodeType":"YulIdentifier","src":"975:3:69"},"nativeSrc":"975:18:69","nodeType":"YulFunctionCall","src":"975:18:69"},"variableNames":[{"name":"tail","nativeSrc":"967:4:69","nodeType":"YulIdentifier","src":"967:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1014:9:69","nodeType":"YulIdentifier","src":"1014:9:69"},{"kind":"number","nativeSrc":"1025:1:69","nodeType":"YulLiteral","src":"1025:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1010:3:69","nodeType":"YulIdentifier","src":"1010:3:69"},"nativeSrc":"1010:17:69","nodeType":"YulFunctionCall","src":"1010:17:69"},{"arguments":[{"name":"tail","nativeSrc":"1033:4:69","nodeType":"YulIdentifier","src":"1033:4:69"},{"name":"headStart","nativeSrc":"1039:9:69","nodeType":"YulIdentifier","src":"1039:9:69"}],"functionName":{"name":"sub","nativeSrc":"1029:3:69","nodeType":"YulIdentifier","src":"1029:3:69"},"nativeSrc":"1029:20:69","nodeType":"YulFunctionCall","src":"1029:20:69"}],"functionName":{"name":"mstore","nativeSrc":"1003:6:69","nodeType":"YulIdentifier","src":"1003:6:69"},"nativeSrc":"1003:47:69","nodeType":"YulFunctionCall","src":"1003:47:69"},"nativeSrc":"1003:47:69","nodeType":"YulExpressionStatement","src":"1003:47:69"},{"nativeSrc":"1059:139:69","nodeType":"YulAssignment","src":"1059:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"1193:4:69","nodeType":"YulIdentifier","src":"1193:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack","nativeSrc":"1067:124:69","nodeType":"YulIdentifier","src":"1067:124:69"},"nativeSrc":"1067:131:69","nodeType":"YulFunctionCall","src":"1067:131:69"},"variableNames":[{"name":"tail","nativeSrc":"1059:4:69","nodeType":"YulIdentifier","src":"1059:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"786:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"937:9:69","nodeType":"YulTypedName","src":"937:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"952:4:69","nodeType":"YulTypedName","src":"952:4:69","type":""}],"src":"786:419:69"},{"body":{"nativeSrc":"1254:43:69","nodeType":"YulBlock","src":"1254:43:69","statements":[{"nativeSrc":"1264:27:69","nodeType":"YulAssignment","src":"1264:27:69","value":{"arguments":[{"name":"value","nativeSrc":"1279:5:69","nodeType":"YulIdentifier","src":"1279:5:69"},{"kind":"number","nativeSrc":"1286:4:69","nodeType":"YulLiteral","src":"1286:4:69","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"1275:3:69","nodeType":"YulIdentifier","src":"1275:3:69"},"nativeSrc":"1275:16:69","nodeType":"YulFunctionCall","src":"1275:16:69"},"variableNames":[{"name":"cleaned","nativeSrc":"1264:7:69","nodeType":"YulIdentifier","src":"1264:7:69"}]}]},"name":"cleanup_t_uint8","nativeSrc":"1211:86:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1236:5:69","nodeType":"YulTypedName","src":"1236:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"1246:7:69","nodeType":"YulTypedName","src":"1246:7:69","type":""}],"src":"1211:86:69"},{"body":{"nativeSrc":"1364:51:69","nodeType":"YulBlock","src":"1364:51:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"1381:3:69","nodeType":"YulIdentifier","src":"1381:3:69"},{"arguments":[{"name":"value","nativeSrc":"1402:5:69","nodeType":"YulIdentifier","src":"1402:5:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"1386:15:69","nodeType":"YulIdentifier","src":"1386:15:69"},"nativeSrc":"1386:22:69","nodeType":"YulFunctionCall","src":"1386:22:69"}],"functionName":{"name":"mstore","nativeSrc":"1374:6:69","nodeType":"YulIdentifier","src":"1374:6:69"},"nativeSrc":"1374:35:69","nodeType":"YulFunctionCall","src":"1374:35:69"},"nativeSrc":"1374:35:69","nodeType":"YulExpressionStatement","src":"1374:35:69"}]},"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"1303:112:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1352:5:69","nodeType":"YulTypedName","src":"1352:5:69","type":""},{"name":"pos","nativeSrc":"1359:3:69","nodeType":"YulTypedName","src":"1359:3:69","type":""}],"src":"1303:112:69"},{"body":{"nativeSrc":"1515:120:69","nodeType":"YulBlock","src":"1515:120:69","statements":[{"nativeSrc":"1525:26:69","nodeType":"YulAssignment","src":"1525:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"1537:9:69","nodeType":"YulIdentifier","src":"1537:9:69"},{"kind":"number","nativeSrc":"1548:2:69","nodeType":"YulLiteral","src":"1548:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1533:3:69","nodeType":"YulIdentifier","src":"1533:3:69"},"nativeSrc":"1533:18:69","nodeType":"YulFunctionCall","src":"1533:18:69"},"variableNames":[{"name":"tail","nativeSrc":"1525:4:69","nodeType":"YulIdentifier","src":"1525:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"1601:6:69","nodeType":"YulIdentifier","src":"1601:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"1614:9:69","nodeType":"YulIdentifier","src":"1614:9:69"},{"kind":"number","nativeSrc":"1625:1:69","nodeType":"YulLiteral","src":"1625:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1610:3:69","nodeType":"YulIdentifier","src":"1610:3:69"},"nativeSrc":"1610:17:69","nodeType":"YulFunctionCall","src":"1610:17:69"}],"functionName":{"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"1561:39:69","nodeType":"YulIdentifier","src":"1561:39:69"},"nativeSrc":"1561:67:69","nodeType":"YulFunctionCall","src":"1561:67:69"},"nativeSrc":"1561:67:69","nodeType":"YulExpressionStatement","src":"1561:67:69"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nativeSrc":"1421:214:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1487:9:69","nodeType":"YulTypedName","src":"1487:9:69","type":""},{"name":"value0","nativeSrc":"1499:6:69","nodeType":"YulTypedName","src":"1499:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1510:4:69","nodeType":"YulTypedName","src":"1510:4:69","type":""}],"src":"1421:214:69"}]},"contents":"{\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a(memPtr) {\n\n        mstore(add(memPtr, 0), \"Initializable: contract is initi\")\n\n        mstore(add(memPtr, 32), \"alizing\")\n\n    }\n\n    function abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 39)\n        store_literal_in_memory_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function cleanup_t_uint8(value) -> cleaned {\n        cleaned := and(value, 0xff)\n    }\n\n    function abi_encode_t_uint8_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint8_to_t_uint8_fromStack(value0,  add(headStart, 0))\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b5061001961001e565b610105565b600054610100900460ff161561004f5760405162461bcd60e51b8152600401610046906100a5565b60405180910390fd5b60005460ff908116146100a3576000805460ff191660ff9081179091556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989161009a916100f6565b60405180910390a15b565b602080825281016100f081602781527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469602082015266616c697a696e6760c81b604082015260600190565b92915050565b60ff82168152602081016100f0565b6143d3806101146000396000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c806379ba50971161019d578063be26317e116100e9578063dcd9bb42116100a2578063e521136f1161007c578063e521136f14610690578063ef8b30f714610619578063f2fde38b146106a3578063f7ea7a3d146106b657600080fd5b8063dcd9bb4214610658578063dd62ed3e1461066c578063e30c39781461067f57600080fd5b8063be26317e146105e6578063c4d66de8146105f0578063c63d75b614610603578063c6e6f59214610619578063ce96cb771461062c578063d905777e1461064257600080fd5b8063a457c2d711610156578063b460af9411610130578063b460af941461059b578063b4a0bdf3146105ae578063ba087652146105bf578063bb371fdd146105d257600080fd5b8063a457c2d714610562578063a9059cbb14610575578063b3d7f6b91461058857600080fd5b806379ba50971461050757806380d45a2d1461050f5780638da5cb5b1461052257806394bf804d1461053357806395d89b41146105465780639bb1a99c1461054e57600080fd5b8063313ce5671161025c57806346ddb7db116102155780635fe3b567116101ef5780635fe3b567146104a25780636e553f65146104c357806370a08231146104d6578063715018a6146104ff57600080fd5b806346ddb7db146104635780634cdad50614610326578063547520fe1461048e57600080fd5b8063313ce567146103f9578063372500ab1461040e57806338d52e0f146104165780633950935114610427578063402d267d1461043a57806341e11a5a1461045057600080fd5b80631765b313116102ae5780631765b3131461038157806317f333401461039557806318160ddd146103b65780631be19560146103bf57806320f4af43146103d257806323b872dd146103e657600080fd5b806301e1d114146102f657806306fdde031461031157806307a2d13a14610326578063095ea7b3146103395780630a28a477146103595780630e32cb861461036c575b600080fd5b610195545b6040516103089190612f7b565b60405180910390f35b6103196106ca565b6040516103089190612fdf565b6102fb610334366004613008565b61075c565b61034c61034736600461304e565b61076f565b6040516103089190613093565b6102fb610367366004613008565b610787565b61037f61037a3660046130a1565b610794565b005b61037f61038f366004613008565b61019555565b610193546103a9906001600160a01b031681565b60405161030891906130cb565b61019a546102fb565b61037f6103cd3660046130f8565b6107a8565b61037f6103e0366004613008565b61019955565b61034c6103f4366004613119565b61089a565b6104016108c0565b6040516103089190613172565b61037f6108e6565b6065546001600160a01b03166103a9565b61034c61043536600461304e565b610be8565b6102fb6104483660046130a1565b506101965490565b61037f61045e366004613180565b610c0a565b61037f61047136600461304e565b6001600160a01b0390911660009081526101946020526040902055565b61037f61049c366004613008565b61019855565b610192546104b6906001600160a01b031681565b6040516103089190613226565b6102fb6104d1366004613234565b610cdc565b6102fb6104e43660046130a1565b6001600160a01b031660009081526033602052604090205490565b61037f610e1e565b61037f610e32565b61037f61051d366004613008565b610e67565b6097546001600160a01b03166103a9565b6102fb610541366004613234565b610eae565b610319610fc8565b610191546104b6906001600160a01b031681565b61034c61057036600461304e565b610fd7565b61034c61058336600461304e565b61101f565b6102fb610596366004613008565b61102d565b6102fb6105a9366004613267565b61103a565b60fb546001600160a01b03166104b6565b6102fb6105cd366004613267565b611147565b61037f6105e0366004613008565b61019655565b6102fb61012d5481565b61037f6105fe3660046130a1565b61126b565b6102fb6106113660046130a1565b506101985490565b6102fb610627366004613008565b61146f565b6102fb61063a3660046130a1565b506101975490565b6102fb6106503660046130a1565b506101995490565b61037f610666366004613008565b61019755565b6102fb61067a3660046132ad565b61147c565b60c9546001600160a01b03166103a9565b61037f61069e3660046130a1565b6114a7565b61037f6106b13660046130a1565b6114ee565b61037f6106c4366004613008565b61019a55565b6060603680546106d9906132e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610705906132e5565b80156107525780601f1061072757610100808354040283529160200191610752565b820191906000526020600020905b81548152906001019060200180831161073557829003601f168201915b5050505050905090565b600061076982600061155f565b92915050565b60003361077d8185856115a3565b5060019392505050565b600061076982600161164a565b61079c61167f565b6107a5816116a9565b50565b6107b061167f565b6040516370a0823160e01b81526000906001600160a01b038316906370a08231906107df9030906004016130cb565b602060405180830381865afa1580156107fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610820919061331c565b9050801561089657600061083c6097546001600160a01b031690565b9050610849838284611722565b806001600160a01b0316836001600160a01b03167f6d25be279134f4ecaa4770aff0c3d916d9e7c5ef37b65ed95dbdba411f5d54d58460405161088c9190612f7b565b60405180910390a3505b5050565b6000336108a885828561177d565b6108b38585856117c7565b60019150505b9392505050565b60006108ca6118b7565b6065546108e19190600160a01b900460ff16613353565b905090565b610192546101915461019354604080516361252fd160e01b815290516001600160a01b0394851694938416939092169160009185916361252fd19160048082019286929091908290030181865afa158015610945573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261096d9190810190613482565b90506109798151611937565b60005b8151811015610be1576000828281518110610999576109996134bd565b602002602001015190506000816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0791906134d3565b60408051600180825281830190925291925060009190602080830190803683370190505090508681600081518110610a4157610a416134bd565b6001600160a01b039283166020918202929092010152604051624caeb160e41b8152908416906304caeb1090610a7d9030908590600401613551565b600060405180830381600087803b158015610a9757600080fd5b505af1158015610aab573d6000803e3d6000fd5b50506040516370a0823160e01b8152600092506001600160a01b03851691506370a0823190610ade9030906004016130cb565b602060405180830381865afa158015610afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1f919061331c565b90508015610b9057610b32838883611722565b6040516305bebb3b60e21b81526001600160a01b038816906316faecec90610b63908c9087906002906004016135b5565b600060405180830381600087803b158015610b7d57600080fd5b505af1925050508015610b8e575060015b505b826001600160a01b03167fba56c3ab1f752776eef60db959a4e6b643e89595315edbbd945e104623fa03ba82604051610bc99190612f7b565b60405180910390a250506001909201915061097c9050565b5050505050565b60003361077d818585610bfb838361147c565b610c0591906135dd565b6115a3565b600054600290610100900460ff16158015610c2c575060005460ff8083169116105b610c515760405162461bcd60e51b8152600401610c489061363e565b60405180910390fd5b6000805461ffff191660ff831617610100179055610c6e82611962565b610c7785611989565b610c80836119c1565b610c8984611a1e565b610c9282611a85565b6000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890610ccd908390613172565b60405180910390a15050505050565b6000610ce6611a9e565b610cef82611962565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d69919061331c565b5082600003610d8b576040516304dd32c560e11b8152600401610c489061366f565b61019654831115610daf576040516326ac6ee160e01b815260040160405180910390fd5b6000610dba8461146f565b905080600003610ddd576040516304dd32c560e11b8152600401610c489061366f565b6000610de961019a5490565b9050610df733858785611ac9565b600081610e0461019a5490565b610e0e919061367f565b9350505050610769600161015f55565b610e2661167f565b610e306000611a85565b565b60c95433906001600160a01b03168114610e5e5760405162461bcd60e51b8152600401610c48906136d8565b6107a581611a85565b610ea56040518060400160405280601981526020017f7365744d61784c6f6f70734c696d69742875696e743235362900000000000000815250611e70565b6107a5816119c1565b6000610eb8611a9e565b610ec182611962565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610f17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3b919061331c565b5082600003610f5d576040516304dd32c560e11b8152600401610c4890613703565b61019854831115610f81576040516340868f7960e01b815260040160405180910390fd5b6000610f8c8461102d565b905080600003610faf576040516304dd32c560e11b8152600401610c4890613703565b610fbb33848387611ac9565b9050610769600161015f55565b6060603780546106d9906132e5565b60003381610fe5828661147c565b9050838110156110075760405162461bcd60e51b8152600401610c4890613755565b61101482868684036115a3565b506001949350505050565b60003361077d8185856117c7565b600061076982600161155f565b6000611044611a9e565b61104d83611962565b61105682611962565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156110ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d0919061331c565b50836000036110f2576040516304dd32c560e11b8152600401610c4890613784565b610197548411156111165760405163e9ed951560e01b815260040160405180910390fd5b60008061112286611f0a565b915091506111396111303390565b868685856121ff565b9150506108b9600161015f55565b6000611151611a9e565b61115a83611962565b61116382611962565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156111b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111dd919061331c565b50836000036111ff576040516304dd32c560e11b8152600401610c48906137b1565b6101995484111561122357604051638890247960e01b815260040160405180910390fd5b600061122e856122a2565b905080600003611251576040516304dd32c560e11b8152600401610c48906137b1565b61125e33858584896121ff565b90506108b9600161015f55565b600054610100900460ff161580801561128b5750600054600160ff909116105b806112a55750303b1580156112a5575060005460ff166001145b6112c15760405162461bcd60e51b8152600401610c489061363e565b6000805460ff1916600117905580156112e4576000805461ff0019166101001790555b6112ed82611962565b61019180546001600160a01b0319166001600160a01b03841690811790915560408051635fe3b56760e01b81529051635fe3b567916004808201926020929091908290030181865afa158015611347573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136b91906134d3565b61019280546001600160a01b0319166001600160a01b039283161790556101915460408051636f307dc360e01b815290516000939290921691636f307dc3916004808201926020929091908290030181865afa1580156113cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f391906137cc565b905061140f611401826124f1565b61140a8361257f565b6125f7565b61141881612628565b611420612658565b508015610896576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989061146390600190613801565b60405180910390a15050565b600061076982600061164a565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6114e56040518060400160405280601b81526020017f736574526577617264526563697069656e742861646472657373290000000000815250611e70565b6107a581611a1e565b6114f661167f565b60c980546001600160a01b0383166001600160a01b031990911681179091556115276097546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60006108b961156e6101955490565b6115799060016135dd565b6115816118b7565b61158c90600a61391d565b61019a5461159a91906135dd565b85919085612687565b6001600160a01b0383166115c95760405162461bcd60e51b8152600401610c4890613973565b6001600160a01b0382166115ef5760405162461bcd60e51b8152600401610c48906139c2565b6001600160a01b0380841660008181526034602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061088c908590612f7b565b60006108b96116576118b7565b61166290600a61391d565b61019a5461167091906135dd565b6101955461159a9060016135dd565b6097546001600160a01b03163314610e305760405162461bcd60e51b8152600401610c4890613a04565b6001600160a01b0381166116cf5760405162461bcd60e51b8152600401610c4890613a56565b60fb80546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa0906114639083908590613a66565b6117788363a9059cbb60e01b8484604051602401611741929190613a81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526126e6565b505050565b6000611789848461147c565b905060001981146117c157818110156117b45760405162461bcd60e51b8152600401610c4890613ad0565b6117c184848484036115a3565b50505050565b6001600160a01b0383166117ed5760405162461bcd60e51b8152600401610c4890613b22565b6001600160a01b0382166118135760405162461bcd60e51b8152600401610c4890613b72565b6001600160a01b0383166000908152603360205260409020548181101561184c5760405162461bcd60e51b8152600401610c4890613bc5565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906118aa908690612f7b565b60405180910390a36117c1565b60006118cb6065546001600160a01b031690565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611908573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192c9190613be9565b6108e1906012613c0a565b61012d548111156107a55761012d548160405163792bfb1b60e11b8152600401610c48929190613c27565b6001600160a01b0381166107a5576040516342bcdf7f60e11b815260040160405180910390fd5b600054610100900460ff166119b05760405162461bcd60e51b8152600401610c4890613c7d565b6119b8612778565b6107a5816127a7565b61012d5481116119e35760405162461bcd60e51b8152600401610c4890613ccc565b61012d8054908290556040517fc2d09fef144f7c8a86f71ea459f8fc17f675768eb1ae369cbd77fb31d467aafa906114639083908590613c27565b611a2781611962565b610193546040516001600160a01b038084169216907fc8c11bb97ac2ffa10ce2e2a98f4c1fd8df84cfa2e1a15e013ed2383ab1f527ad90600090a361019380546001600160a01b0319166001600160a01b0392909216919091179055565b60c980546001600160a01b03191690556107a5816127ce565b600261015f5403611ac15760405162461bcd60e51b8152600401610c4890613d10565b600261015f55565b6000611add6065546001600160a01b031690565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611b0891906130cb565b602060405180830381865afa158015611b25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b49919061331c565b610191546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611b809030906004016130cb565b602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc1919061331c565b9050611be0611bd86065546001600160a01b031690565b873087612820565b600082611bf56065546001600160a01b031690565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611c2091906130cb565b602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c61919061331c565b611c6b919061367f565b9050611c7681612841565b610191546040516370a0823160e01b815260009184916001600160a01b03909116906370a0823190611cac9030906004016130cb565b602060405180830381865afa158015611cc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ced919061331c565b611cf7919061367f565b905080600003611d1a576040516304dd32c560e11b8152600401610c4890613d54565b6000670de0b6b3a764000061019160009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9d919061331c565b611da79084613d64565b611db19190613d99565b90506000611e03611dc06118b7565b611dcb90600a61391d565b61019a54611dd991906135dd565b83611de46101955490565b611def9060016135dd565b611df9919061367f565b8491906000612687565b9050611e0f898261290d565b886001600160a01b03168a6001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78a84604051611e54929190613c27565b60405180910390a350505050505050505050565b600161015f55565b60fb546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab90611ea39033908690600401613dad565b602060405180830381865afa158015611ec0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee49190613de0565b90508061089657333083604051634a3fa29360e01b8152600401610c4893929190613e01565b6000806000611f216065546001600160a01b031690565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611f5191906130cb565b602060405180830381865afa158015611f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f92919061331c565b610191546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611fc99030906004016130cb565b602060405180830381865afa158015611fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200a919061331c565b6101915460405163852a12e360e01b81529192506000916001600160a01b039091169063852a12e390612041908a90600401612f7b565b6020604051808303816000875af1158015612060573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612084919061331c565b905080156120a75780604051630864657760e21b8152600401610c489190612f7b565b6040516370a0823160e01b815283906001600160a01b038616906370a08231906120d59030906004016130cb565b602060405180830381865afa1580156120f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612116919061331c565b612120919061367f565b610191546040516370a0823160e01b81529197506000916001600160a01b03909116906370a08231906121579030906004016130cb565b602060405180830381865afa158015612174573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612198919061331c565b6121a2908461367f565b9050806000036121c5576040516304dd32c560e11b8152600401610c4890613e69565b6121f36121d06118b7565b6121db90600a61391d565b61019a546121e991906135dd565b8290856001612687565b95505050505050915091565b826001600160a01b0316856001600160a01b0316146122235761222383868361177d565b61222d838261295e565b606554612244906001600160a01b03168584611722565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051612293929190613c27565b60405180910390a45050505050565b6000806122b76065546001600160a01b031690565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016122e791906130cb565b602060405180830381865afa158015612304573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612328919061331c565b610191546040516370a0823160e01b81529192506000916123cd916001600160a01b0316906370a08231906123619030906004016130cb565b602060405180830381865afa15801561237e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a2919061331c565b6123aa6118b7565b6123b590600a61391d565b61019a546123c391906135dd565b8791906000612687565b6101915460405163db006a7560e01b81529192506000916001600160a01b039091169063db006a7590612404908590600401612f7b565b6020604051808303816000875af1158015612423573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612447919061331c565b9050801561246a5780604051630864657760e21b8152600401610c489190612f7b565b6040516370a0823160e01b81526000906001600160a01b038616906370a08231906124999030906004016130cb565b602060405180830381865afa1580156124b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124da919061331c565b90506124e6848261367f565b979650505050505050565b6060816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612531573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125599190810190613f04565b6040516020016125699190613f61565b6040516020818303038152906040529050919050565b6060816001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156125bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125e79190810190613f04565b6040516020016125699190613f90565b600054610100900460ff1661261e5760405162461bcd60e51b8152600401610c4890613c7d565b61089682826129af565b600054610100900460ff1661264f5760405162461bcd60e51b8152600401610c4890613c7d565b6107a5816129ef565b600054610100900460ff1661267f5760405162461bcd60e51b8152600401610c4890613c7d565b610e30612a74565b600080612695868686612a9b565b905060018360028111156126ab576126ab613571565b1480156126c85750600084806126c3576126c3613d83565b868809115b156126db576126d86001826135dd565b90505b90505b949350505050565b600061273b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612b5d9092919063ffffffff16565b905080516000148061275c57508080602001905181019061275c9190613de0565b6117785760405162461bcd60e51b8152600401610c4890613fed565b600054610100900460ff1661279f5760405162461bcd60e51b8152600401610c4890613c7d565b610e30612b6c565b600054610100900460ff1661079c5760405162461bcd60e51b8152600401610c4890613c7d565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6117c1846323b872dd60e01b85858560405160240161174193929190613ffd565b61019154612875906001600160a01b0316826128656065546001600160a01b031690565b6001600160a01b03169190612b9c565b6101915460405163140e25ad60e31b81526000916001600160a01b03169063a0712d68906128a7908590600401612f7b565b6020604051808303816000875af11580156128c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ea919061331c565b905080156108965780604051630864657760e21b8152600401610c489190612f7b565b8061019a600082825461292091906135dd565b90915550506001600160a01b038216600090815261019460205260408120805483929061294e9084906135dd565b9091555061089690508282612c50565b8061019a6000828254612971919061367f565b90915550506001600160a01b038216600090815261019460205260408120805483929061299f90849061367f565b9091555061089690508282612ce6565b600054610100900460ff166129d65760405162461bcd60e51b8152600401610c4890613c7d565b60366129e283826140b6565b50603761177882826140b6565b600054610100900460ff16612a165760405162461bcd60e51b8152600401610c4890613c7d565b600080612a2283612d9d565b9150915081612a32576012612a34565b805b606580546001600160a01b039095166001600160a01b031960ff93909316600160a01b02929092166001600160a81b031990951694909417179092555050565b600054610100900460ff16611e685760405162461bcd60e51b8152600401610c4890613c7d565b6000808060001985870985870292508281108382030391505080600003612ad557838281612acb57612acb613d83565b04925050506108b9565b808411612af45760405162461bcd60e51b8152600401610c48906141a6565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60606126de8484600085612e79565b600054610100900460ff16612b935760405162461bcd60e51b8152600401610c4890613c7d565b610e3033611a85565b801580612c155750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90612bd29030908690600401613a66565b602060405180830381865afa158015612bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c13919061331c565b155b612c315760405162461bcd60e51b8152600401610c4890614209565b6117788363095ea7b360e01b8484604051602401611741929190613a81565b6001600160a01b038216612c765760405162461bcd60e51b8152600401610c489061424d565b8060356000828254612c8891906135dd565b90915550506001600160a01b038216600081815260336020526040808220805485019055517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612cda908590612f7b565b60405180910390a35050565b6001600160a01b038216612d0c5760405162461bcd60e51b8152600401610c489061429b565b6001600160a01b03821660009081526033602052604090205481811015612d455760405162461bcd60e51b8152600401610c48906142ea565b6001600160a01b0383166000818152603360205260408082208585039055603580548690039055519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061088c908690612f7b565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290516000918291829182916001600160a01b03871691612de4916142fa565b600060405180830381855afa9150503d8060008114612e1f576040519150601f19603f3d011682016040523d82523d6000602084013e612e24565b606091505b5091509150818015612e3857506020815110155b15612e6c57600081806020019051810190612e53919061331c565b905060ff8111612e6a576001969095509350505050565b505b5060009485945092505050565b606082471015612e9b5760405162461bcd60e51b8152600401610c4890614349565b600080866001600160a01b03168587604051612eb791906142fa565b60006040518083038185875af1925050503d8060008114612ef4576040519150601f19603f3d011682016040523d82523d6000602084013e612ef9565b606091505b50915091506124e68783838760608315612f44578251600003612f3d576001600160a01b0385163b612f3d5760405162461bcd60e51b8152600401610c489061438d565b50816126de565b6126de8383815115612f595781518083602001fd5b8060405162461bcd60e51b8152600401610c489190612fdf565b805b82525050565b602081016107698284612f73565b60005b83811015612fa4578181015183820152602001612f8c565b50506000910152565b6000612fb7825190565b808452602084019350612fce818560208601612f89565b601f01601f19169290920192915050565b602080825281016108b98184612fad565b805b81146107a557600080fd5b803561076981612ff0565b60006020828403121561301d5761301d600080fd5b60006126de8484612ffd565b60006001600160a01b038216610769565b612ff281613029565b80356107698161303a565b6000806040838503121561306457613064600080fd5b60006130708585613043565b925050602061308185828601612ffd565b9150509250929050565b801515612f75565b60208101610769828461308b565b6000602082840312156130b6576130b6600080fd5b60006126de8484613043565b612f7581613029565b6020810161076982846130c2565b600061076982613029565b612ff2816130d9565b8035610769816130e4565b60006020828403121561310d5761310d600080fd5b60006126de84846130ed565b60008060006060848603121561313157613131600080fd5b600061313d8686613043565b935050602061314e86828701613043565b925050604061315f86828701612ffd565b9150509250925092565b60ff8116612f75565b602081016107698284613169565b6000806000806080858703121561319957613199600080fd5b60006131a58787613043565b94505060206131b687828801613043565b93505060406131c787828801612ffd565b92505060606131d887828801613043565b91505092959194509250565b60006107696001600160a01b0383166131fb565b90565b6001600160a01b031690565b6000610769826131e4565b600061076982613207565b612f7581613212565b60208101610769828461321d565b6000806040838503121561324a5761324a600080fd5b60006132568585612ffd565b925050602061308185828601613043565b60008060006060848603121561327f5761327f600080fd5b600061328b8686612ffd565b935050602061329c86828701613043565b925050604061315f86828701613043565b600080604083850312156132c3576132c3600080fd5b60006132568585613043565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806132f957607f821691505b60208210810361330b5761330b6132cf565b50919050565b805161076981612ff0565b60006020828403121561333157613331600080fd5b60006126de8484613311565b634e487b7160e01b600052601160045260246000fd5b60ff9182169190811690828201908111156107695761076961333d565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156133ac576133ac613370565b6040525050565b60006133be60405190565b90506133ca8282613386565b919050565b600067ffffffffffffffff8211156133e9576133e9613370565b5060209081020190565b8051610769816130e4565b600061341161340c846133cf565b6133b3565b8381529050602080820190840283018581111561343057613430600080fd5b835b81811015613454578061344588826133f3565b84525060209283019201613432565b5050509392505050565b600082601f83011261347257613472600080fd5b81516126de8482602086016133fe565b60006020828403121561349757613497600080fd5b815167ffffffffffffffff8111156134b1576134b1600080fd5b6126de8482850161345e565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156134e8576134e8600080fd5b60006126de84846133f3565b6000613500838361321d565b505060200190565b6000613512825190565b80845260209384019383018060005b8381101561354657815161353588826134f4565b975060208301925050600101613521565b509495945050505050565b6040810161355f82856130c2565b81810360208301526126de8184613508565b634e487b7160e01b600052602160045260246000fd5b600481106107a5576107a5613571565b806133ca81613587565b600061076982613597565b612f75816135a1565b606081016135c382866130c2565b6135d060208301856130c2565b6126de60408301846135ac565b808201808211156107695761076961333d565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015291505b5060400190565b60208082528101610769816135f0565b600781526000602082016619195c1bdcda5d60ca1b815291505b5060200190565b602080825281016107698161364e565b818103818111156107695761076961333d565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b60208201529150613637565b6020808252810161076981613692565b60048152600060208201631b5a5b9d60e21b81529150613668565b60208082528101610769816136e8565b602581526000602082017f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77815264207a65726f60d81b60208201529150613637565b6020808252810161076981613713565b6008815260006020820167776974686472617760c01b81529150613668565b6020808252810161076981613765565b600681526000602082016572656465656d60d01b81529150613668565b6020808252810161076981613794565b80516107698161303a565b6000602082840312156137e1576137e1600080fd5b60006126de84846137c1565b600060ff8216610769565b612f75816137ed565b6020810161076982846137f8565b80825b600185111561384e5780860481111561382d5761382d61333d565b600185161561383b57908102905b80026138478560011c90565b9450613812565b94509492505050565b600082613866575060016108b9565b81613873575060006108b9565b81600181146138895760028114613893576138c0565b60019150506108b9565b60ff8411156138a4576138a461333d565b8360020a9150848211156138ba576138ba61333d565b506108b9565b5060208310610133831016604e8410600b84101617156138f3575081810a838111156138ee576138ee61333d565b6108b9565b613900848484600161380f565b925090508184048111156139165761391661333d565b0292915050565b600060ff831692506108b96000198484613857565b602481526000602082017f45524332303a20617070726f76652066726f6d20746865207a65726f206164648152637265737360e01b60208201529150613637565b6020808252810161076981613932565b602281526000602082017f45524332303a20617070726f766520746f20746865207a65726f206164647265815261737360f01b60208201529150613637565b6020808252810161076981613983565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081526000613668565b60208082528101610769816139d2565b602581526000602082017f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b60208201529150613637565b6020808252810161076981613a14565b60408101613a7482856130c2565b6108b960208301846130c2565b60408101613a8f82856130c2565b6108b96020830184612f73565b601d81526000602082017f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000081529150613668565b6020808252810161076981613a9c565b602581526000602082017f45524332303a207472616e736665722066726f6d20746865207a65726f206164815264647265737360d81b60208201529150613637565b6020808252810161076981613ae0565b602381526000602082017f45524332303a207472616e7366657220746f20746865207a65726f206164647281526265737360e81b60208201529150613637565b6020808252810161076981613b32565b602681526000602082017f45524332303a207472616e7366657220616d6f756e7420657863656564732062815265616c616e636560d01b60208201529150613637565b6020808252810161076981613b82565b60ff8116612ff2565b805161076981613bd5565b600060208284031215613bfe57613bfe600080fd5b60006126de8484613bde565b60ff9182169190811690828203908111156107695761076961333d565b60408101613a8f8285612f73565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150613637565b6020808252810161076981613c35565b602281526000602082017f436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d8152611a5d60f21b60208201529150613637565b6020808252810161076981613c8d565b601f81526000602082017f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081529150613668565b6020808252810161076981613cdc565b601b81526000602082017f76546f6b656e735265636569766564206174205f6465706f736974000000000081529150613668565b6020808252810161076981613d20565b818102808215838204851417613d7c57613d7c61333d565b5092915050565b634e487b7160e01b600052601260045260246000fd5b600082613da857613da8613d83565b500490565b60408101613dbb82856130c2565b81810360208301526126de8184612fad565b801515612ff2565b805161076981613dcd565b600060208284031215613df557613df5600080fd5b60006126de8484613dd5565b60608101613e0f82866130c2565b613e1c60208301856130c2565b8181036040830152613e2e8184612fad565b95945050505050565b60208082527f61637475616c56546f6b656e73206174205f6265666f7265576974686472617791019081526000613668565b6020808252810161076981613e37565b600067ffffffffffffffff821115613e9357613e93613370565b601f19601f83011660200192915050565b6000613eb261340c84613e79565b905082815260208101848484011115613ecd57613ecd600080fd5b613ed8848285612f89565b509392505050565b600082601f830112613ef457613ef4600080fd5b81516126de848260208601613ea4565b600060208284031215613f1957613f19600080fd5b815167ffffffffffffffff811115613f3357613f33600080fd5b6126de84828501613ee0565b6000613f49825190565b613f57818560208601612f89565b9290920192915050565b75022a9219a1b191b16abb930b83832b2102b32b73ab9960551b81526000601682015b91506108b98284613f3f565b643b1a1b191b60d91b8152600060058201613f84565b602a81526000602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b60208201529150613637565b6020808252810161076981613fa6565b6060810161400b82866130c2565b61401860208301856130c2565b6126de6040830184612f73565b60006107696131f88381565b61403a83614025565b815460001960089490940293841b1916921b91909117905550565b6000611778818484614031565b8181101561089657614075600082614055565b600101614062565b601f821115611778576000818152602090206020601f850104810160208510156140a45750805b610be16020601f860104830182614062565b815167ffffffffffffffff8111156140d0576140d0613370565b6140da82546132e5565b6140e582828561407d565b6020601f83116001811461411957600084156141015750858201515b600019600886021c1981166002860217865550614172565b600085815260208120601f198616915b828110156141495788850151825560209485019460019092019101614129565b868310156141655784890151600019601f89166008021c191682555b6001600288020188555050505b505050505050565b60158152600060208201744d6174683a206d756c446976206f766572666c6f7760581b81529150613668565b602080825281016107698161417a565b603681526000602082017f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60208201529150613637565b60208082528101610769816141b6565b601f81526000602082017f45524332303a206d696e7420746f20746865207a65726f20616464726573730081529150613668565b6020808252810161076981614219565b602181526000602082017f45524332303a206275726e2066726f6d20746865207a65726f206164647265738152607360f81b60208201529150613637565b602080825281016107698161425d565b602281526000602082017f45524332303a206275726e20616d6f756e7420657863656564732062616c616e815261636560f01b60208201529150613637565b60208082528101610769816142ab565b60006108b98284613f3f565b602681526000602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f8152651c8818d85b1b60d21b60208201529150613637565b6020808252810161076981614306565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150613668565b602080825281016107698161435956fea2646970667358221220c316e91d90208cb84b567b814a12c4b23c6d3f0cc08be6ce814c43c66611f4d664736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19 PUSH2 0x1E JUMP JUMPDEST PUSH2 0x105 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x4F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x46 SWAP1 PUSH2 0xA5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF SWAP1 DUP2 AND EQ PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP2 PUSH2 0x9A SWAP2 PUSH2 0xF6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xF0 DUP2 PUSH1 0x27 DUP2 MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320696E697469 PUSH1 0x20 DUP3 ADD MSTORE PUSH7 0x616C697A696E67 PUSH1 0xC8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xFF DUP3 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD PUSH2 0xF0 JUMP JUMPDEST PUSH2 0x43D3 DUP1 PUSH2 0x114 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2F1 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x79BA5097 GT PUSH2 0x19D JUMPI DUP1 PUSH4 0xBE26317E GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0xDCD9BB42 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xE521136F GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xE521136F EQ PUSH2 0x690 JUMPI DUP1 PUSH4 0xEF8B30F7 EQ PUSH2 0x619 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x6A3 JUMPI DUP1 PUSH4 0xF7EA7A3D EQ PUSH2 0x6B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xDCD9BB42 EQ PUSH2 0x658 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x66C JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x67F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBE26317E EQ PUSH2 0x5E6 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x5F0 JUMPI DUP1 PUSH4 0xC63D75B6 EQ PUSH2 0x603 JUMPI DUP1 PUSH4 0xC6E6F592 EQ PUSH2 0x619 JUMPI DUP1 PUSH4 0xCE96CB77 EQ PUSH2 0x62C JUMPI DUP1 PUSH4 0xD905777E EQ PUSH2 0x642 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x156 JUMPI DUP1 PUSH4 0xB460AF94 GT PUSH2 0x130 JUMPI DUP1 PUSH4 0xB460AF94 EQ PUSH2 0x59B JUMPI DUP1 PUSH4 0xB4A0BDF3 EQ PUSH2 0x5AE JUMPI DUP1 PUSH4 0xBA087652 EQ PUSH2 0x5BF JUMPI DUP1 PUSH4 0xBB371FDD EQ PUSH2 0x5D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x562 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x575 JUMPI DUP1 PUSH4 0xB3D7F6B9 EQ PUSH2 0x588 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x507 JUMPI DUP1 PUSH4 0x80D45A2D EQ PUSH2 0x50F JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x522 JUMPI DUP1 PUSH4 0x94BF804D EQ PUSH2 0x533 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x546 JUMPI DUP1 PUSH4 0x9BB1A99C EQ PUSH2 0x54E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0x25C JUMPI DUP1 PUSH4 0x46DDB7DB GT PUSH2 0x215 JUMPI DUP1 PUSH4 0x5FE3B567 GT PUSH2 0x1EF JUMPI DUP1 PUSH4 0x5FE3B567 EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0x6E553F65 EQ PUSH2 0x4C3 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x4D6 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x4FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x46DDB7DB EQ PUSH2 0x463 JUMPI DUP1 PUSH4 0x4CDAD506 EQ PUSH2 0x326 JUMPI DUP1 PUSH4 0x547520FE EQ PUSH2 0x48E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0x3F9 JUMPI DUP1 PUSH4 0x372500AB EQ PUSH2 0x40E JUMPI DUP1 PUSH4 0x38D52E0F EQ PUSH2 0x416 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x427 JUMPI DUP1 PUSH4 0x402D267D EQ PUSH2 0x43A JUMPI DUP1 PUSH4 0x41E11A5A EQ PUSH2 0x450 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1765B313 GT PUSH2 0x2AE JUMPI DUP1 PUSH4 0x1765B313 EQ PUSH2 0x381 JUMPI DUP1 PUSH4 0x17F33340 EQ PUSH2 0x395 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x3B6 JUMPI DUP1 PUSH4 0x1BE19560 EQ PUSH2 0x3BF JUMPI DUP1 PUSH4 0x20F4AF43 EQ PUSH2 0x3D2 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x3E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1E1D114 EQ PUSH2 0x2F6 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x311 JUMPI DUP1 PUSH4 0x7A2D13A EQ PUSH2 0x326 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x339 JUMPI DUP1 PUSH4 0xA28A477 EQ PUSH2 0x359 JUMPI DUP1 PUSH4 0xE32CB86 EQ PUSH2 0x36C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x195 SLOAD JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x308 SWAP2 SWAP1 PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x319 PUSH2 0x6CA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x308 SWAP2 SWAP1 PUSH2 0x2FDF JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x334 CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0x75C JUMP JUMPDEST PUSH2 0x34C PUSH2 0x347 CALLDATASIZE PUSH1 0x4 PUSH2 0x304E JUMP JUMPDEST PUSH2 0x76F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x308 SWAP2 SWAP1 PUSH2 0x3093 JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x367 CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0x787 JUMP JUMPDEST PUSH2 0x37F PUSH2 0x37A CALLDATASIZE PUSH1 0x4 PUSH2 0x30A1 JUMP JUMPDEST PUSH2 0x794 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x37F PUSH2 0x38F CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0x195 SSTORE JUMP JUMPDEST PUSH2 0x193 SLOAD PUSH2 0x3A9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x308 SWAP2 SWAP1 PUSH2 0x30CB JUMP JUMPDEST PUSH2 0x19A SLOAD PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x37F PUSH2 0x3CD CALLDATASIZE PUSH1 0x4 PUSH2 0x30F8 JUMP JUMPDEST PUSH2 0x7A8 JUMP JUMPDEST PUSH2 0x37F PUSH2 0x3E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0x199 SSTORE JUMP JUMPDEST PUSH2 0x34C PUSH2 0x3F4 CALLDATASIZE PUSH1 0x4 PUSH2 0x3119 JUMP JUMPDEST PUSH2 0x89A JUMP JUMPDEST PUSH2 0x401 PUSH2 0x8C0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x308 SWAP2 SWAP1 PUSH2 0x3172 JUMP JUMPDEST PUSH2 0x37F PUSH2 0x8E6 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A9 JUMP JUMPDEST PUSH2 0x34C PUSH2 0x435 CALLDATASIZE PUSH1 0x4 PUSH2 0x304E JUMP JUMPDEST PUSH2 0xBE8 JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x448 CALLDATASIZE PUSH1 0x4 PUSH2 0x30A1 JUMP JUMPDEST POP PUSH2 0x196 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x37F PUSH2 0x45E CALLDATASIZE PUSH1 0x4 PUSH2 0x3180 JUMP JUMPDEST PUSH2 0xC0A JUMP JUMPDEST PUSH2 0x37F PUSH2 0x471 CALLDATASIZE PUSH1 0x4 PUSH2 0x304E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x194 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH2 0x37F PUSH2 0x49C CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0x198 SSTORE JUMP JUMPDEST PUSH2 0x192 SLOAD PUSH2 0x4B6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x308 SWAP2 SWAP1 PUSH2 0x3226 JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x4D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3234 JUMP JUMPDEST PUSH2 0xCDC JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x4E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x30A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x37F PUSH2 0xE1E JUMP JUMPDEST PUSH2 0x37F PUSH2 0xE32 JUMP JUMPDEST PUSH2 0x37F PUSH2 0x51D CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0xE67 JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A9 JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x541 CALLDATASIZE PUSH1 0x4 PUSH2 0x3234 JUMP JUMPDEST PUSH2 0xEAE JUMP JUMPDEST PUSH2 0x319 PUSH2 0xFC8 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH2 0x4B6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x34C PUSH2 0x570 CALLDATASIZE PUSH1 0x4 PUSH2 0x304E JUMP JUMPDEST PUSH2 0xFD7 JUMP JUMPDEST PUSH2 0x34C PUSH2 0x583 CALLDATASIZE PUSH1 0x4 PUSH2 0x304E JUMP JUMPDEST PUSH2 0x101F JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x596 CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0x102D JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x5A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x103A JUMP JUMPDEST PUSH1 0xFB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4B6 JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x5CD CALLDATASIZE PUSH1 0x4 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x1147 JUMP JUMPDEST PUSH2 0x37F PUSH2 0x5E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0x196 SSTORE JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x12D SLOAD DUP2 JUMP JUMPDEST PUSH2 0x37F PUSH2 0x5FE CALLDATASIZE PUSH1 0x4 PUSH2 0x30A1 JUMP JUMPDEST PUSH2 0x126B JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x611 CALLDATASIZE PUSH1 0x4 PUSH2 0x30A1 JUMP JUMPDEST POP PUSH2 0x198 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x627 CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0x146F JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x63A CALLDATASIZE PUSH1 0x4 PUSH2 0x30A1 JUMP JUMPDEST POP PUSH2 0x197 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x650 CALLDATASIZE PUSH1 0x4 PUSH2 0x30A1 JUMP JUMPDEST POP PUSH2 0x199 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x37F PUSH2 0x666 CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0x197 SSTORE JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x67A CALLDATASIZE PUSH1 0x4 PUSH2 0x32AD JUMP JUMPDEST PUSH2 0x147C JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A9 JUMP JUMPDEST PUSH2 0x37F PUSH2 0x69E CALLDATASIZE PUSH1 0x4 PUSH2 0x30A1 JUMP JUMPDEST PUSH2 0x14A7 JUMP JUMPDEST PUSH2 0x37F PUSH2 0x6B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x30A1 JUMP JUMPDEST PUSH2 0x14EE JUMP JUMPDEST PUSH2 0x37F PUSH2 0x6C4 CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0x19A SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x36 DUP1 SLOAD PUSH2 0x6D9 SWAP1 PUSH2 0x32E5 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x705 SWAP1 PUSH2 0x32E5 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x752 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x727 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x752 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x735 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x769 DUP3 PUSH1 0x0 PUSH2 0x155F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x77D DUP2 DUP6 DUP6 PUSH2 0x15A3 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x769 DUP3 PUSH1 0x1 PUSH2 0x164A JUMP JUMPDEST PUSH2 0x79C PUSH2 0x167F JUMP JUMPDEST PUSH2 0x7A5 DUP2 PUSH2 0x16A9 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x7B0 PUSH2 0x167F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x7DF SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x820 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x896 JUMPI PUSH1 0x0 PUSH2 0x83C PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x849 DUP4 DUP3 DUP5 PUSH2 0x1722 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x6D25BE279134F4ECAA4770AFF0C3D916D9E7C5EF37B65ED95DBDBA411F5D54D5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x88C SWAP2 SWAP1 PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x8A8 DUP6 DUP3 DUP6 PUSH2 0x177D JUMP JUMPDEST PUSH2 0x8B3 DUP6 DUP6 DUP6 PUSH2 0x17C7 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8CA PUSH2 0x18B7 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH2 0x8E1 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3353 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x192 SLOAD PUSH2 0x191 SLOAD PUSH2 0x193 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x61252FD1 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP5 SWAP4 DUP5 AND SWAP4 SWAP1 SWAP3 AND SWAP2 PUSH1 0x0 SWAP2 DUP6 SWAP2 PUSH4 0x61252FD1 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 DUP7 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x945 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x96D SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3482 JUMP JUMPDEST SWAP1 POP PUSH2 0x979 DUP2 MLOAD PUSH2 0x1937 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xBE1 JUMPI PUSH1 0x0 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x999 JUMPI PUSH2 0x999 PUSH2 0x34BD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF7C618C1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9E3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA07 SWAP2 SWAP1 PUSH2 0x34D3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP7 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xA41 JUMPI PUSH2 0xA41 PUSH2 0x34BD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x20 SWAP2 DUP3 MUL SWAP3 SWAP1 SWAP3 ADD ADD MSTORE PUSH1 0x40 MLOAD PUSH3 0x4CAEB1 PUSH1 0xE4 SHL DUP2 MSTORE SWAP1 DUP5 AND SWAP1 PUSH4 0x4CAEB10 SWAP1 PUSH2 0xA7D SWAP1 ADDRESS SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x3551 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xAAB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 POP PUSH4 0x70A08231 SWAP1 PUSH2 0xADE SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB1F SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0xB90 JUMPI PUSH2 0xB32 DUP4 DUP9 DUP4 PUSH2 0x1722 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5BEBB3B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP1 PUSH4 0x16FAECEC SWAP1 PUSH2 0xB63 SWAP1 DUP13 SWAP1 DUP8 SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x4 ADD PUSH2 0x35B5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0xB8E JUMPI POP PUSH1 0x1 JUMPDEST POP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xBA56C3AB1F752776EEF60DB959A4E6B643E89595315EDBBD945E104623FA03BA DUP3 PUSH1 0x40 MLOAD PUSH2 0xBC9 SWAP2 SWAP1 PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 POP PUSH2 0x97C SWAP1 POP JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x77D DUP2 DUP6 DUP6 PUSH2 0xBFB DUP4 DUP4 PUSH2 0x147C JUMP JUMPDEST PUSH2 0xC05 SWAP2 SWAP1 PUSH2 0x35DD JUMP JUMPDEST PUSH2 0x15A3 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x2 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xC2C JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF DUP1 DUP4 AND SWAP2 AND LT JUMPDEST PUSH2 0xC51 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x363E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFFFF NOT AND PUSH1 0xFF DUP4 AND OR PUSH2 0x100 OR SWAP1 SSTORE PUSH2 0xC6E DUP3 PUSH2 0x1962 JUMP JUMPDEST PUSH2 0xC77 DUP6 PUSH2 0x1989 JUMP JUMPDEST PUSH2 0xC80 DUP4 PUSH2 0x19C1 JUMP JUMPDEST PUSH2 0xC89 DUP5 PUSH2 0x1A1E JUMP JUMPDEST PUSH2 0xC92 DUP3 PUSH2 0x1A85 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH2 0xCCD SWAP1 DUP4 SWAP1 PUSH2 0x3172 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCE6 PUSH2 0x1A9E JUMP JUMPDEST PUSH2 0xCEF DUP3 PUSH2 0x1962 JUMP JUMPDEST PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA6AFED95 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD45 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD69 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST POP DUP3 PUSH1 0x0 SUB PUSH2 0xD8B JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x366F JUMP JUMPDEST PUSH2 0x196 SLOAD DUP4 GT ISZERO PUSH2 0xDAF JUMPI PUSH1 0x40 MLOAD PUSH4 0x26AC6EE1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xDBA DUP5 PUSH2 0x146F JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0xDDD JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x366F JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDE9 PUSH2 0x19A SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0xDF7 CALLER DUP6 DUP8 DUP6 PUSH2 0x1AC9 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0xE04 PUSH2 0x19A SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xE0E SWAP2 SWAP1 PUSH2 0x367F JUMP JUMPDEST SWAP4 POP POP POP POP PUSH2 0x769 PUSH1 0x1 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH2 0xE26 PUSH2 0x167F JUMP JUMPDEST PUSH2 0xE30 PUSH1 0x0 PUSH2 0x1A85 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0xC9 SLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 EQ PUSH2 0xE5E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x36D8 JUMP JUMPDEST PUSH2 0x7A5 DUP2 PUSH2 0x1A85 JUMP JUMPDEST PUSH2 0xEA5 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x19 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x7365744D61784C6F6F70734C696D69742875696E743235362900000000000000 DUP2 MSTORE POP PUSH2 0x1E70 JUMP JUMPDEST PUSH2 0x7A5 DUP2 PUSH2 0x19C1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEB8 PUSH2 0x1A9E JUMP JUMPDEST PUSH2 0xEC1 DUP3 PUSH2 0x1962 JUMP JUMPDEST PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA6AFED95 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF17 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF3B SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST POP DUP3 PUSH1 0x0 SUB PUSH2 0xF5D JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3703 JUMP JUMPDEST PUSH2 0x198 SLOAD DUP4 GT ISZERO PUSH2 0xF81 JUMPI PUSH1 0x40 MLOAD PUSH4 0x40868F79 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xF8C DUP5 PUSH2 0x102D JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0xFAF JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3703 JUMP JUMPDEST PUSH2 0xFBB CALLER DUP5 DUP4 DUP8 PUSH2 0x1AC9 JUMP JUMPDEST SWAP1 POP PUSH2 0x769 PUSH1 0x1 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x6D9 SWAP1 PUSH2 0x32E5 JUMP JUMPDEST PUSH1 0x0 CALLER DUP2 PUSH2 0xFE5 DUP3 DUP7 PUSH2 0x147C JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x1007 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3755 JUMP JUMPDEST PUSH2 0x1014 DUP3 DUP7 DUP7 DUP5 SUB PUSH2 0x15A3 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x77D DUP2 DUP6 DUP6 PUSH2 0x17C7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x769 DUP3 PUSH1 0x1 PUSH2 0x155F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1044 PUSH2 0x1A9E JUMP JUMPDEST PUSH2 0x104D DUP4 PUSH2 0x1962 JUMP JUMPDEST PUSH2 0x1056 DUP3 PUSH2 0x1962 JUMP JUMPDEST PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA6AFED95 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10AC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10D0 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST POP DUP4 PUSH1 0x0 SUB PUSH2 0x10F2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3784 JUMP JUMPDEST PUSH2 0x197 SLOAD DUP5 GT ISZERO PUSH2 0x1116 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE9ED9515 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1122 DUP7 PUSH2 0x1F0A JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1139 PUSH2 0x1130 CALLER SWAP1 JUMP JUMPDEST DUP7 DUP7 DUP6 DUP6 PUSH2 0x21FF JUMP JUMPDEST SWAP2 POP POP PUSH2 0x8B9 PUSH1 0x1 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1151 PUSH2 0x1A9E JUMP JUMPDEST PUSH2 0x115A DUP4 PUSH2 0x1962 JUMP JUMPDEST PUSH2 0x1163 DUP3 PUSH2 0x1962 JUMP JUMPDEST PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA6AFED95 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x11B9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11DD SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST POP DUP4 PUSH1 0x0 SUB PUSH2 0x11FF JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x37B1 JUMP JUMPDEST PUSH2 0x199 SLOAD DUP5 GT ISZERO PUSH2 0x1223 JUMPI PUSH1 0x40 MLOAD PUSH4 0x88902479 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x122E DUP6 PUSH2 0x22A2 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x1251 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x37B1 JUMP JUMPDEST PUSH2 0x125E CALLER DUP6 DUP6 DUP5 DUP10 PUSH2 0x21FF JUMP JUMPDEST SWAP1 POP PUSH2 0x8B9 PUSH1 0x1 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x128B JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x12A5 JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12A5 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x12C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x363E JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x12E4 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x12ED DUP3 PUSH2 0x1962 JUMP JUMPDEST PUSH2 0x191 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x5FE3B567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH4 0x5FE3B567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1347 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x136B SWAP2 SWAP1 PUSH2 0x34D3 JUMP JUMPDEST PUSH2 0x192 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH2 0x191 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x6F307DC3 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP4 SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x6F307DC3 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13F3 SWAP2 SWAP1 PUSH2 0x37CC JUMP JUMPDEST SWAP1 POP PUSH2 0x140F PUSH2 0x1401 DUP3 PUSH2 0x24F1 JUMP JUMPDEST PUSH2 0x140A DUP4 PUSH2 0x257F JUMP JUMPDEST PUSH2 0x25F7 JUMP JUMPDEST PUSH2 0x1418 DUP2 PUSH2 0x2628 JUMP JUMPDEST PUSH2 0x1420 PUSH2 0x2658 JUMP JUMPDEST POP DUP1 ISZERO PUSH2 0x896 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH2 0x1463 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x3801 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x769 DUP3 PUSH1 0x0 PUSH2 0x164A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x14E5 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x736574526577617264526563697069656E742861646472657373290000000000 DUP2 MSTORE POP PUSH2 0x1E70 JUMP JUMPDEST PUSH2 0x7A5 DUP2 PUSH2 0x1A1E JUMP JUMPDEST PUSH2 0x14F6 PUSH2 0x167F JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH2 0x1527 PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B9 PUSH2 0x156E PUSH2 0x195 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1579 SWAP1 PUSH1 0x1 PUSH2 0x35DD JUMP JUMPDEST PUSH2 0x1581 PUSH2 0x18B7 JUMP JUMPDEST PUSH2 0x158C SWAP1 PUSH1 0xA PUSH2 0x391D JUMP JUMPDEST PUSH2 0x19A SLOAD PUSH2 0x159A SWAP2 SWAP1 PUSH2 0x35DD JUMP JUMPDEST DUP6 SWAP2 SWAP1 DUP6 PUSH2 0x2687 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x15C9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3973 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x15EF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x39C2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x88C SWAP1 DUP6 SWAP1 PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B9 PUSH2 0x1657 PUSH2 0x18B7 JUMP JUMPDEST PUSH2 0x1662 SWAP1 PUSH1 0xA PUSH2 0x391D JUMP JUMPDEST PUSH2 0x19A SLOAD PUSH2 0x1670 SWAP2 SWAP1 PUSH2 0x35DD JUMP JUMPDEST PUSH2 0x195 SLOAD PUSH2 0x159A SWAP1 PUSH1 0x1 PUSH2 0x35DD JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE30 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3A04 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x16CF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3A56 JUMP JUMPDEST PUSH1 0xFB DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP1 PUSH32 0x66FD58E82F7B31A2A5C30E0888F3093EFE4E111B00CD2B0C31FE014601293AA0 SWAP1 PUSH2 0x1463 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x3A66 JUMP JUMPDEST PUSH2 0x1778 DUP4 PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1741 SWAP3 SWAP2 SWAP1 PUSH2 0x3A81 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x26E6 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1789 DUP5 DUP5 PUSH2 0x147C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x17C1 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x17B4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3AD0 JUMP JUMPDEST PUSH2 0x17C1 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x15A3 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x17ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3B22 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1813 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3B72 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x184C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3BC5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE SWAP3 DUP7 AND DUP1 DUP3 MSTORE SWAP1 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE SWAP2 MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x18AA SWAP1 DUP7 SWAP1 PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x17C1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18CB PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1908 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x192C SWAP2 SWAP1 PUSH2 0x3BE9 JUMP JUMPDEST PUSH2 0x8E1 SWAP1 PUSH1 0x12 PUSH2 0x3C0A JUMP JUMPDEST PUSH2 0x12D SLOAD DUP2 GT ISZERO PUSH2 0x7A5 JUMPI PUSH2 0x12D SLOAD DUP2 PUSH1 0x40 MLOAD PUSH4 0x792BFB1B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP3 SWAP2 SWAP1 PUSH2 0x3C27 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7A5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x42BCDF7F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x19B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3C7D JUMP JUMPDEST PUSH2 0x19B8 PUSH2 0x2778 JUMP JUMPDEST PUSH2 0x7A5 DUP2 PUSH2 0x27A7 JUMP JUMPDEST PUSH2 0x12D SLOAD DUP2 GT PUSH2 0x19E3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3CCC JUMP JUMPDEST PUSH2 0x12D DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC2D09FEF144F7C8A86F71EA459F8FC17F675768EB1AE369CBD77FB31D467AAFA SWAP1 PUSH2 0x1463 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x3C27 JUMP JUMPDEST PUSH2 0x1A27 DUP2 PUSH2 0x1962 JUMP JUMPDEST PUSH2 0x193 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 AND SWAP1 PUSH32 0xC8C11BB97AC2FFA10CE2E2A98F4C1FD8DF84CFA2E1A15E013ED2383AB1F527AD SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH2 0x193 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH2 0x7A5 DUP2 PUSH2 0x27CE JUMP JUMPDEST PUSH1 0x2 PUSH2 0x15F SLOAD SUB PUSH2 0x1AC1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3D10 JUMP JUMPDEST PUSH1 0x2 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1ADD PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1B08 SWAP2 SWAP1 PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B25 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B49 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1B80 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B9D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BC1 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST SWAP1 POP PUSH2 0x1BE0 PUSH2 0x1BD8 PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP8 ADDRESS DUP8 PUSH2 0x2820 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1BF5 PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1C20 SWAP2 SWAP1 PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C3D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C61 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST PUSH2 0x1C6B SWAP2 SWAP1 PUSH2 0x367F JUMP JUMPDEST SWAP1 POP PUSH2 0x1C76 DUP2 PUSH2 0x2841 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1CAC SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CC9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1CED SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST PUSH2 0x1CF7 SWAP2 SWAP1 PUSH2 0x367F JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x1D1A JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3D54 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x182DF0F5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D79 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D9D SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST PUSH2 0x1DA7 SWAP1 DUP5 PUSH2 0x3D64 JUMP JUMPDEST PUSH2 0x1DB1 SWAP2 SWAP1 PUSH2 0x3D99 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1E03 PUSH2 0x1DC0 PUSH2 0x18B7 JUMP JUMPDEST PUSH2 0x1DCB SWAP1 PUSH1 0xA PUSH2 0x391D JUMP JUMPDEST PUSH2 0x19A SLOAD PUSH2 0x1DD9 SWAP2 SWAP1 PUSH2 0x35DD JUMP JUMPDEST DUP4 PUSH2 0x1DE4 PUSH2 0x195 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1DEF SWAP1 PUSH1 0x1 PUSH2 0x35DD JUMP JUMPDEST PUSH2 0x1DF9 SWAP2 SWAP1 PUSH2 0x367F JUMP JUMPDEST DUP5 SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2687 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E0F DUP10 DUP3 PUSH2 0x290D JUMP JUMPDEST DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDCBC1C05240F31FF3AD067EF1EE35CE4997762752E3A095284754544F4C709D7 DUP11 DUP5 PUSH1 0x40 MLOAD PUSH2 0x1E54 SWAP3 SWAP2 SWAP1 PUSH2 0x3C27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH1 0xFB SLOAD PUSH1 0x40 MLOAD PUSH4 0x18C5E8AB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x18C5E8AB SWAP1 PUSH2 0x1EA3 SWAP1 CALLER SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x3DAD JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1EC0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1EE4 SWAP2 SWAP1 PUSH2 0x3DE0 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x896 JUMPI CALLER ADDRESS DUP4 PUSH1 0x40 MLOAD PUSH4 0x4A3FA293 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3E01 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1F21 PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1F51 SWAP2 SWAP1 PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F6E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F92 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1FC9 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FE6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x200A SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x852A12E3 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x852A12E3 SWAP1 PUSH2 0x2041 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2060 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2084 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x20A7 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH4 0x8646577 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP2 SWAP1 PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x20D5 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2116 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST PUSH2 0x2120 SWAP2 SWAP1 PUSH2 0x367F JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP8 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2157 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2174 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2198 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST PUSH2 0x21A2 SWAP1 DUP5 PUSH2 0x367F JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x21C5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3E69 JUMP JUMPDEST PUSH2 0x21F3 PUSH2 0x21D0 PUSH2 0x18B7 JUMP JUMPDEST PUSH2 0x21DB SWAP1 PUSH1 0xA PUSH2 0x391D JUMP JUMPDEST PUSH2 0x19A SLOAD PUSH2 0x21E9 SWAP2 SWAP1 PUSH2 0x35DD JUMP JUMPDEST DUP3 SWAP1 DUP6 PUSH1 0x1 PUSH2 0x2687 JUMP JUMPDEST SWAP6 POP POP POP POP POP POP SWAP2 POP SWAP2 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x2223 JUMPI PUSH2 0x2223 DUP4 DUP7 DUP4 PUSH2 0x177D JUMP JUMPDEST PUSH2 0x222D DUP4 DUP3 PUSH2 0x295E JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH2 0x2244 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP5 PUSH2 0x1722 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFBDE797D201C681B91056529119E0B02407C7BB96A4A2C75C01FC9667232C8DB DUP6 DUP6 PUSH1 0x40 MLOAD PUSH2 0x2293 SWAP3 SWAP2 SWAP1 PUSH2 0x3C27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x22B7 PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x22E7 SWAP2 SWAP1 PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2304 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2328 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH2 0x23CD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2361 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x237E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23A2 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST PUSH2 0x23AA PUSH2 0x18B7 JUMP JUMPDEST PUSH2 0x23B5 SWAP1 PUSH1 0xA PUSH2 0x391D JUMP JUMPDEST PUSH2 0x19A SLOAD PUSH2 0x23C3 SWAP2 SWAP1 PUSH2 0x35DD JUMP JUMPDEST DUP8 SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2687 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0xDB006A75 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xDB006A75 SWAP1 PUSH2 0x2404 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2423 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2447 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x246A JUMPI DUP1 PUSH1 0x40 MLOAD PUSH4 0x8646577 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP2 SWAP1 PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2499 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x24DA SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST SWAP1 POP PUSH2 0x24E6 DUP5 DUP3 PUSH2 0x367F JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6FDDE03 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2531 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2559 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3F04 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2569 SWAP2 SWAP1 PUSH2 0x3F61 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x25BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x25E7 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3F04 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2569 SWAP2 SWAP1 PUSH2 0x3F90 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x261E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3C7D JUMP JUMPDEST PUSH2 0x896 DUP3 DUP3 PUSH2 0x29AF JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x264F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3C7D JUMP JUMPDEST PUSH2 0x7A5 DUP2 PUSH2 0x29EF JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x267F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3C7D JUMP JUMPDEST PUSH2 0xE30 PUSH2 0x2A74 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2695 DUP7 DUP7 DUP7 PUSH2 0x2A9B JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP4 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x26AB JUMPI PUSH2 0x26AB PUSH2 0x3571 JUMP JUMPDEST EQ DUP1 ISZERO PUSH2 0x26C8 JUMPI POP PUSH1 0x0 DUP5 DUP1 PUSH2 0x26C3 JUMPI PUSH2 0x26C3 PUSH2 0x3D83 JUMP JUMPDEST DUP7 DUP9 MULMOD GT JUMPDEST ISZERO PUSH2 0x26DB JUMPI PUSH2 0x26D8 PUSH1 0x1 DUP3 PUSH2 0x35DD JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP1 POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x273B DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2B5D SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH1 0x0 EQ DUP1 PUSH2 0x275C JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x275C SWAP2 SWAP1 PUSH2 0x3DE0 JUMP JUMPDEST PUSH2 0x1778 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3FED JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x279F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3C7D JUMP JUMPDEST PUSH2 0xE30 PUSH2 0x2B6C JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x79C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3C7D JUMP JUMPDEST PUSH1 0x97 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x17C1 DUP5 PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1741 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3FFD JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH2 0x2875 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH2 0x2865 PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 PUSH2 0x2B9C JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x140E25AD PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xA0712D68 SWAP1 PUSH2 0x28A7 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x28C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x28EA SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x896 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH4 0x8646577 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP2 SWAP1 PUSH2 0x2F7B JUMP JUMPDEST DUP1 PUSH2 0x19A PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x2920 SWAP2 SWAP1 PUSH2 0x35DD JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x194 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x294E SWAP1 DUP5 SWAP1 PUSH2 0x35DD JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x896 SWAP1 POP DUP3 DUP3 PUSH2 0x2C50 JUMP JUMPDEST DUP1 PUSH2 0x19A PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x2971 SWAP2 SWAP1 PUSH2 0x367F JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x194 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x299F SWAP1 DUP5 SWAP1 PUSH2 0x367F JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x896 SWAP1 POP DUP3 DUP3 PUSH2 0x2CE6 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x29D6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3C7D JUMP JUMPDEST PUSH1 0x36 PUSH2 0x29E2 DUP4 DUP3 PUSH2 0x40B6 JUMP JUMPDEST POP PUSH1 0x37 PUSH2 0x1778 DUP3 DUP3 PUSH2 0x40B6 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2A16 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3C7D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2A22 DUP4 PUSH2 0x2D9D JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH2 0x2A32 JUMPI PUSH1 0x12 PUSH2 0x2A34 JUMP JUMPDEST DUP1 JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP6 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT PUSH1 0xFF SWAP4 SWAP1 SWAP4 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL SWAP3 SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR OR SWAP1 SWAP3 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1E68 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3C7D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 SUB PUSH2 0x2AD5 JUMPI DUP4 DUP3 DUP2 PUSH2 0x2ACB JUMPI PUSH2 0x2ACB PUSH2 0x3D83 JUMP JUMPDEST DIV SWAP3 POP POP POP PUSH2 0x8B9 JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x2AF4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x41A6 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x1 DUP8 NOT DUP2 ADD DUP9 AND SWAP8 DUP9 SWAP1 DIV PUSH1 0x3 DUP2 MUL DUP4 XOR DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL SWAP1 DUP2 MUL SWAP1 SWAP3 SUB SWAP1 SWAP2 MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x26DE DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x2E79 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2B93 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3C7D JUMP JUMPDEST PUSH2 0xE30 CALLER PUSH2 0x1A85 JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x2C15 JUMPI POP PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH2 0x2BD2 SWAP1 ADDRESS SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x3A66 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2BEF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2C13 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x2C31 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x4209 JUMP JUMPDEST PUSH2 0x1778 DUP4 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1741 SWAP3 SWAP2 SWAP1 PUSH2 0x3A81 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2C76 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x424D JUMP JUMPDEST DUP1 PUSH1 0x35 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x2C88 SWAP2 SWAP1 PUSH2 0x35DD JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP6 ADD SWAP1 SSTORE MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x2CDA SWAP1 DUP6 SWAP1 PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2D0C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x429B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x2D45 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x42EA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP6 DUP6 SUB SWAP1 SSTORE PUSH1 0x35 DUP1 SLOAD DUP7 SWAP1 SUB SWAP1 SSTORE MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x88C SWAP1 DUP7 SWAP1 PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP2 MSTORE PUSH1 0x24 DUP2 ADD DUP3 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH2 0x2DE4 SWAP2 PUSH2 0x42FA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2E1F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2E24 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x2E38 JUMPI POP PUSH1 0x20 DUP2 MLOAD LT ISZERO JUMPDEST ISZERO PUSH2 0x2E6C JUMPI PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2E53 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST SWAP1 POP PUSH1 0xFF DUP2 GT PUSH2 0x2E6A JUMPI PUSH1 0x1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST POP JUMPDEST POP PUSH1 0x0 SWAP5 DUP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x2E9B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x4349 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x2EB7 SWAP2 SWAP1 PUSH2 0x42FA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2EF4 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2EF9 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x24E6 DUP8 DUP4 DUP4 DUP8 PUSH1 0x60 DUP4 ISZERO PUSH2 0x2F44 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x2F3D JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x2F3D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x438D JUMP JUMPDEST POP DUP2 PUSH2 0x26DE JUMP JUMPDEST PUSH2 0x26DE DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x2F59 JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP2 SWAP1 PUSH2 0x2FDF JUMP JUMPDEST DUP1 JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x769 DUP3 DUP5 PUSH2 0x2F73 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2FA4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2F8C JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2FB7 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x2FCE DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x2F89 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x8B9 DUP2 DUP5 PUSH2 0x2FAD JUMP JUMPDEST DUP1 JUMPDEST DUP2 EQ PUSH2 0x7A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x769 DUP2 PUSH2 0x2FF0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x301D JUMPI PUSH2 0x301D PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x26DE DUP5 DUP5 PUSH2 0x2FFD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x769 JUMP JUMPDEST PUSH2 0x2FF2 DUP2 PUSH2 0x3029 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x769 DUP2 PUSH2 0x303A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3064 JUMPI PUSH2 0x3064 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3070 DUP6 DUP6 PUSH2 0x3043 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x3081 DUP6 DUP3 DUP7 ADD PUSH2 0x2FFD JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x2F75 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x769 DUP3 DUP5 PUSH2 0x308B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30B6 JUMPI PUSH2 0x30B6 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x26DE DUP5 DUP5 PUSH2 0x3043 JUMP JUMPDEST PUSH2 0x2F75 DUP2 PUSH2 0x3029 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x769 DUP3 DUP5 PUSH2 0x30C2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x769 DUP3 PUSH2 0x3029 JUMP JUMPDEST PUSH2 0x2FF2 DUP2 PUSH2 0x30D9 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x769 DUP2 PUSH2 0x30E4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x310D JUMPI PUSH2 0x310D PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x26DE DUP5 DUP5 PUSH2 0x30ED JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3131 JUMPI PUSH2 0x3131 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x313D DUP7 DUP7 PUSH2 0x3043 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x314E DUP7 DUP3 DUP8 ADD PUSH2 0x3043 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x315F DUP7 DUP3 DUP8 ADD PUSH2 0x2FFD JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0xFF DUP2 AND PUSH2 0x2F75 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x769 DUP3 DUP5 PUSH2 0x3169 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3199 JUMPI PUSH2 0x3199 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x31A5 DUP8 DUP8 PUSH2 0x3043 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x31B6 DUP8 DUP3 DUP9 ADD PUSH2 0x3043 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x31C7 DUP8 DUP3 DUP9 ADD PUSH2 0x2FFD JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0x31D8 DUP8 DUP3 DUP9 ADD PUSH2 0x3043 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x769 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x31FB JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x769 DUP3 PUSH2 0x31E4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x769 DUP3 PUSH2 0x3207 JUMP JUMPDEST PUSH2 0x2F75 DUP2 PUSH2 0x3212 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x769 DUP3 DUP5 PUSH2 0x321D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x324A JUMPI PUSH2 0x324A PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3256 DUP6 DUP6 PUSH2 0x2FFD JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x3081 DUP6 DUP3 DUP7 ADD PUSH2 0x3043 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x327F JUMPI PUSH2 0x327F PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x328B DUP7 DUP7 PUSH2 0x2FFD JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x329C DUP7 DUP3 DUP8 ADD PUSH2 0x3043 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x315F DUP7 DUP3 DUP8 ADD PUSH2 0x3043 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x32C3 JUMPI PUSH2 0x32C3 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3256 DUP6 DUP6 PUSH2 0x3043 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP2 DIV PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x32F9 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x330B JUMPI PUSH2 0x330B PUSH2 0x32CF JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x769 DUP2 PUSH2 0x2FF0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3331 JUMPI PUSH2 0x3331 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x26DE DUP5 DUP5 PUSH2 0x3311 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0xFF SWAP2 DUP3 AND SWAP2 SWAP1 DUP2 AND SWAP1 DUP3 DUP3 ADD SWAP1 DUP2 GT ISZERO PUSH2 0x769 JUMPI PUSH2 0x769 PUSH2 0x333D JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x33AC JUMPI PUSH2 0x33AC PUSH2 0x3370 JUMP JUMPDEST PUSH1 0x40 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33BE PUSH1 0x40 MLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x33CA DUP3 DUP3 PUSH2 0x3386 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x33E9 JUMPI PUSH2 0x33E9 PUSH2 0x3370 JUMP JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x769 DUP2 PUSH2 0x30E4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3411 PUSH2 0x340C DUP5 PUSH2 0x33CF JUMP JUMPDEST PUSH2 0x33B3 JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP1 POP PUSH1 0x20 DUP1 DUP3 ADD SWAP1 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3430 JUMPI PUSH2 0x3430 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3454 JUMPI DUP1 PUSH2 0x3445 DUP9 DUP3 PUSH2 0x33F3 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x3432 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3472 JUMPI PUSH2 0x3472 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x26DE DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x33FE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3497 JUMPI PUSH2 0x3497 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x34B1 JUMPI PUSH2 0x34B1 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26DE DUP5 DUP3 DUP6 ADD PUSH2 0x345E JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x34E8 JUMPI PUSH2 0x34E8 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x26DE DUP5 DUP5 PUSH2 0x33F3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3500 DUP4 DUP4 PUSH2 0x321D JUMP JUMPDEST POP POP PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3512 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 DUP4 ADD DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3546 JUMPI DUP2 MLOAD PUSH2 0x3535 DUP9 DUP3 PUSH2 0x34F4 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x3521 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x355F DUP3 DUP6 PUSH2 0x30C2 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x26DE DUP2 DUP5 PUSH2 0x3508 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x4 DUP2 LT PUSH2 0x7A5 JUMPI PUSH2 0x7A5 PUSH2 0x3571 JUMP JUMPDEST DUP1 PUSH2 0x33CA DUP2 PUSH2 0x3587 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x769 DUP3 PUSH2 0x3597 JUMP JUMPDEST PUSH2 0x2F75 DUP2 PUSH2 0x35A1 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x35C3 DUP3 DUP7 PUSH2 0x30C2 JUMP JUMPDEST PUSH2 0x35D0 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x30C2 JUMP JUMPDEST PUSH2 0x26DE PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x35AC JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x769 JUMPI PUSH2 0x769 PUSH2 0x333D JUMP JUMPDEST PUSH1 0x2E DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 DUP2 MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x35F0 JUMP JUMPDEST PUSH1 0x7 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH7 0x19195C1BDCDA5D PUSH1 0xCA SHL DUP2 MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x364E JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x769 JUMPI PUSH2 0x769 PUSH2 0x333D JUMP JUMPDEST PUSH1 0x29 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4F776E61626C6532537465703A2063616C6C6572206973206E6F742074686520 DUP2 MSTORE PUSH9 0x3732BB9037BBB732B9 PUSH1 0xB9 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3692 JUMP JUMPDEST PUSH1 0x4 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH4 0x1B5A5B9D PUSH1 0xE2 SHL DUP2 MSTORE SWAP2 POP PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x36E8 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 DUP2 MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3713 JUMP JUMPDEST PUSH1 0x8 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH8 0x7769746864726177 PUSH1 0xC0 SHL DUP2 MSTORE SWAP2 POP PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3765 JUMP JUMPDEST PUSH1 0x6 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH6 0x72656465656D PUSH1 0xD0 SHL DUP2 MSTORE SWAP2 POP PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3794 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x769 DUP2 PUSH2 0x303A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x37E1 JUMPI PUSH2 0x37E1 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x26DE DUP5 DUP5 PUSH2 0x37C1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND PUSH2 0x769 JUMP JUMPDEST PUSH2 0x2F75 DUP2 PUSH2 0x37ED JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x769 DUP3 DUP5 PUSH2 0x37F8 JUMP JUMPDEST DUP1 DUP3 JUMPDEST PUSH1 0x1 DUP6 GT ISZERO PUSH2 0x384E JUMPI DUP1 DUP7 DIV DUP2 GT ISZERO PUSH2 0x382D JUMPI PUSH2 0x382D PUSH2 0x333D JUMP JUMPDEST PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x383B JUMPI SWAP1 DUP2 MUL SWAP1 JUMPDEST DUP1 MUL PUSH2 0x3847 DUP6 PUSH1 0x1 SHR SWAP1 JUMP JUMPDEST SWAP5 POP PUSH2 0x3812 JUMP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3866 JUMPI POP PUSH1 0x1 PUSH2 0x8B9 JUMP JUMPDEST DUP2 PUSH2 0x3873 JUMPI POP PUSH1 0x0 PUSH2 0x8B9 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x3889 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x3893 JUMPI PUSH2 0x38C0 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x8B9 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x38A4 JUMPI PUSH2 0x38A4 PUSH2 0x333D JUMP JUMPDEST DUP4 PUSH1 0x2 EXP SWAP2 POP DUP5 DUP3 GT ISZERO PUSH2 0x38BA JUMPI PUSH2 0x38BA PUSH2 0x333D JUMP JUMPDEST POP PUSH2 0x8B9 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x38F3 JUMPI POP DUP2 DUP2 EXP DUP4 DUP2 GT ISZERO PUSH2 0x38EE JUMPI PUSH2 0x38EE PUSH2 0x333D JUMP JUMPDEST PUSH2 0x8B9 JUMP JUMPDEST PUSH2 0x3900 DUP5 DUP5 DUP5 PUSH1 0x1 PUSH2 0x380F JUMP JUMPDEST SWAP3 POP SWAP1 POP DUP2 DUP5 DIV DUP2 GT ISZERO PUSH2 0x3916 JUMPI PUSH2 0x3916 PUSH2 0x333D JUMP JUMPDEST MUL SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP4 AND SWAP3 POP PUSH2 0x8B9 PUSH1 0x0 NOT DUP5 DUP5 PUSH2 0x3857 JUMP JUMPDEST PUSH1 0x24 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 DUP2 MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3932 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 DUP2 MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3983 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 SWAP2 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x39D2 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x696E76616C696420616365737320636F6E74726F6C206D616E61676572206164 DUP2 MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3A14 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x3A74 DUP3 DUP6 PUSH2 0x30C2 JUMP JUMPDEST PUSH2 0x8B9 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x30C2 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x3A8F DUP3 DUP6 PUSH2 0x30C2 JUMP JUMPDEST PUSH2 0x8B9 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2F73 JUMP JUMPDEST PUSH1 0x1D DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 DUP2 MSTORE SWAP2 POP PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3A9C JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 DUP2 MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3AE0 JUMP JUMPDEST PUSH1 0x23 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 DUP2 MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3B32 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 DUP2 MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3B82 JUMP JUMPDEST PUSH1 0xFF DUP2 AND PUSH2 0x2FF2 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x769 DUP2 PUSH2 0x3BD5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BFE JUMPI PUSH2 0x3BFE PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x26DE DUP5 DUP5 PUSH2 0x3BDE JUMP JUMPDEST PUSH1 0xFF SWAP2 DUP3 AND SWAP2 SWAP1 DUP2 AND SWAP1 DUP3 DUP3 SUB SWAP1 DUP2 GT ISZERO PUSH2 0x769 JUMPI PUSH2 0x769 PUSH2 0x333D JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x3A8F DUP3 DUP6 PUSH2 0x2F73 JUMP JUMPDEST PUSH1 0x2B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 DUP2 MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3C35 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x436F6D7074726F6C6C65723A20496E76616C6964206D61784C6F6F70734C696D DUP2 MSTORE PUSH2 0x1A5D PUSH1 0xF2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3C8D JUMP JUMPDEST PUSH1 0x1F DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 DUP2 MSTORE SWAP2 POP PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3CDC JUMP JUMPDEST PUSH1 0x1B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x76546F6B656E735265636569766564206174205F6465706F7369740000000000 DUP2 MSTORE SWAP2 POP PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3D20 JUMP JUMPDEST DUP2 DUP2 MUL DUP1 DUP3 ISZERO DUP4 DUP3 DIV DUP6 EQ OR PUSH2 0x3D7C JUMPI PUSH2 0x3D7C PUSH2 0x333D JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3DA8 JUMPI PUSH2 0x3DA8 PUSH2 0x3D83 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x3DBB DUP3 DUP6 PUSH2 0x30C2 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x26DE DUP2 DUP5 PUSH2 0x2FAD JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x2FF2 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x769 DUP2 PUSH2 0x3DCD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3DF5 JUMPI PUSH2 0x3DF5 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x26DE DUP5 DUP5 PUSH2 0x3DD5 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x3E0F DUP3 DUP7 PUSH2 0x30C2 JUMP JUMPDEST PUSH2 0x3E1C PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x30C2 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x3E2E DUP2 DUP5 PUSH2 0x2FAD JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH32 0x61637475616C56546F6B656E73206174205F6265666F72655769746864726177 SWAP2 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3E37 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x3E93 JUMPI PUSH2 0x3E93 PUSH2 0x3370 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EB2 PUSH2 0x340C DUP5 PUSH2 0x3E79 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x3ECD JUMPI PUSH2 0x3ECD PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3ED8 DUP5 DUP3 DUP6 PUSH2 0x2F89 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3EF4 JUMPI PUSH2 0x3EF4 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x26DE DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x3EA4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3F19 JUMPI PUSH2 0x3F19 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3F33 JUMPI PUSH2 0x3F33 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26DE DUP5 DUP3 DUP6 ADD PUSH2 0x3EE0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F49 DUP3 MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3F57 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x2F89 JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH22 0x22A9219A1B191B16ABB930B83832B2102B32B73AB99 PUSH1 0x55 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x16 DUP3 ADD JUMPDEST SWAP2 POP PUSH2 0x8B9 DUP3 DUP5 PUSH2 0x3F3F JUMP JUMPDEST PUSH5 0x3B1A1B191B PUSH1 0xD9 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x5 DUP3 ADD PUSH2 0x3F84 JUMP JUMPDEST PUSH1 0x2A DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E DUP2 MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3FA6 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x400B DUP3 DUP7 PUSH2 0x30C2 JUMP JUMPDEST PUSH2 0x4018 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x30C2 JUMP JUMPDEST PUSH2 0x26DE PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2F73 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x769 PUSH2 0x31F8 DUP4 DUP2 JUMP JUMPDEST PUSH2 0x403A DUP4 PUSH2 0x4025 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 NOT PUSH1 0x8 SWAP5 SWAP1 SWAP5 MUL SWAP4 DUP5 SHL NOT AND SWAP3 SHL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1778 DUP2 DUP5 DUP5 PUSH2 0x4031 JUMP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x896 JUMPI PUSH2 0x4075 PUSH1 0x0 DUP3 PUSH2 0x4055 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x4062 JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x1778 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH1 0x20 PUSH1 0x1F DUP6 ADD DIV DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x40A4 JUMPI POP DUP1 JUMPDEST PUSH2 0xBE1 PUSH1 0x20 PUSH1 0x1F DUP7 ADD DIV DUP4 ADD DUP3 PUSH2 0x4062 JUMP JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x40D0 JUMPI PUSH2 0x40D0 PUSH2 0x3370 JUMP JUMPDEST PUSH2 0x40DA DUP3 SLOAD PUSH2 0x32E5 JUMP JUMPDEST PUSH2 0x40E5 DUP3 DUP3 DUP6 PUSH2 0x407D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x4119 JUMPI PUSH1 0x0 DUP5 ISZERO PUSH2 0x4101 JUMPI POP DUP6 DUP3 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x8 DUP7 MUL SHR NOT DUP2 AND PUSH1 0x2 DUP7 MUL OR DUP7 SSTORE POP PUSH2 0x4172 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x4149 JUMPI DUP9 DUP6 ADD MLOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x4129 JUMP JUMPDEST DUP7 DUP4 LT ISZERO PUSH2 0x4165 JUMPI DUP5 DUP10 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x1F DUP10 AND PUSH1 0x8 MUL SHR NOT AND DUP3 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x2 DUP9 MUL ADD DUP9 SSTORE POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH21 0x4D6174683A206D756C446976206F766572666C6F77 PUSH1 0x58 SHL DUP2 MSTORE SWAP2 POP PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x417A JUMP JUMPDEST PUSH1 0x36 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F DUP2 MSTORE PUSH22 0x20746F206E6F6E2D7A65726F20616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x41B6 JUMP JUMPDEST PUSH1 0x1F DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 DUP2 MSTORE SWAP2 POP PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x4219 JUMP JUMPDEST PUSH1 0x21 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A206275726E2066726F6D20746865207A65726F20616464726573 DUP2 MSTORE PUSH1 0x73 PUSH1 0xF8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x425D JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A206275726E20616D6F756E7420657863656564732062616C616E DUP2 MSTORE PUSH2 0x6365 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x42AB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B9 DUP3 DUP5 PUSH2 0x3F3F JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F DUP2 MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x4306 JUMP JUMPDEST PUSH1 0x1D DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 DUP2 MSTORE SWAP2 POP PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x4359 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC3 AND 0xE9 SAR SWAP1 KECCAK256 DUP13 0xB8 0x4B JUMP PUSH28 0x814A12C4B23C6D3F0CC08BE6CE814C43C66611F4D664736F6C634300 ADDMOD NOT STOP CALLER ","sourceMap":"342:2321:56:-:0;;;;;;;;;;;;-1:-1:-1;4774:22:52;:20;:22::i;:::-;342:2321:56;;5939:280:3;6007:13;;;;;;;6006:14;5998:66;;;;-1:-1:-1;;;5998:66:3;;;;;;;:::i;:::-;;;;;;;;;6078:12;;6094:15;6078:12;;;:31;6074:139;;6125:12;:30;;-1:-1:-1;;6125:30:3;6140:15;6125:30;;;;;;6174:28;;;;;;;:::i;:::-;;;;;;;;6074:139;5939:280::o;786:419:69:-;990:2;1003:47;;;975:18;;1067:131;975:18;641:2;113:19;;322:34;165:4;156:14;;299:58;-1:-1:-1;;;374:15:69;;;367:34;762:12;;;414:366;1067:131;1059:139;786:419;-1:-1:-1;;786:419:69:o;1421:214::-;1286:4;1275:16;;1374:35;;1548:2;1533:18;;1561:67;1303:112;1421:214;342:2321:56;;;;;;"},"deployedBytecode":{"functionDebugData":{"@__AccessControlled_init_4931":{"entryPoint":6537,"id":4931,"parameterSlots":1,"returnSlots":0},"@__AccessControlled_init_unchained_4943":{"entryPoint":10151,"id":4943,"parameterSlots":1,"returnSlots":0},"@__ERC20_init_709":{"entryPoint":9719,"id":709,"parameterSlots":2,"returnSlots":0},"@__ERC20_init_unchained_727":{"entryPoint":10671,"id":727,"parameterSlots":2,"returnSlots":0},"@__ERC4626_init_1389":{"entryPoint":9768,"id":1389,"parameterSlots":1,"returnSlots":0},"@__ERC4626_init_unchained_1417":{"entryPoint":10735,"id":1417,"parameterSlots":1,"returnSlots":0},"@__Ownable2Step_init_26":{"entryPoint":10104,"id":26,"parameterSlots":0,"returnSlots":0},"@__Ownable_init_unchained_145":{"entryPoint":11116,"id":145,"parameterSlots":0,"returnSlots":0},"@__ReentrancyGuard_init_600":{"entryPoint":9816,"id":600,"parameterSlots":0,"returnSlots":0},"@__ReentrancyGuard_init_unchained_610":{"entryPoint":10868,"id":610,"parameterSlots":0,"returnSlots":0},"@_afterTokenTransfer_1268":{"entryPoint":null,"id":1268,"parameterSlots":3,"returnSlots":0},"@_approve_1203":{"entryPoint":5539,"id":1203,"parameterSlots":3,"returnSlots":0},"@_beforeRedeem_17860":{"entryPoint":8866,"id":17860,"parameterSlots":1,"returnSlots":1},"@_beforeTokenTransfer_1257":{"entryPoint":null,"id":1257,"parameterSlots":3,"returnSlots":0},"@_beforeWithdraw_17965":{"entryPoint":7946,"id":17965,"parameterSlots":1,"returnSlots":2},"@_burn_1158":{"entryPoint":11494,"id":1158,"parameterSlots":2,"returnSlots":0},"@_burn_18797":{"entryPoint":10590,"id":18797,"parameterSlots":2,"returnSlots":0},"@_callOptionalReturn_2391":{"entryPoint":9958,"id":2391,"parameterSlots":2,"returnSlots":0},"@_checkAccessAllowed_5034":{"entryPoint":7792,"id":5034,"parameterSlots":1,"returnSlots":0},"@_checkOwner_176":{"entryPoint":5759,"id":176,"parameterSlots":0,"returnSlots":0},"@_convertToAssets_1905":{"entryPoint":5471,"id":1905,"parameterSlots":2,"returnSlots":1},"@_convertToShares_1877":{"entryPoint":5706,"id":1877,"parameterSlots":2,"returnSlots":1},"@_decimalsOffset_18174":{"entryPoint":6327,"id":18174,"parameterSlots":0,"returnSlots":1},"@_deposit_18157":{"entryPoint":6857,"id":18157,"parameterSlots":4,"returnSlots":0},"@_ensureMaxLoops_10334":{"entryPoint":6455,"id":10334,"parameterSlots":1,"returnSlots":0},"@_generateVaultName_18195":{"entryPoint":9457,"id":18195,"parameterSlots":1,"returnSlots":1},"@_generateVaultSymbol_18216":{"entryPoint":9599,"id":18216,"parameterSlots":1,"returnSlots":1},"@_mintVTokens_18000":{"entryPoint":10305,"id":18000,"parameterSlots":1,"returnSlots":0},"@_mint_1086":{"entryPoint":11344,"id":1086,"parameterSlots":2,"returnSlots":0},"@_mint_18771":{"entryPoint":10509,"id":18771,"parameterSlots":2,"returnSlots":0},"@_msgSender_2798":{"entryPoint":null,"id":2798,"parameterSlots":0,"returnSlots":1},"@_nonReentrantAfter_644":{"entryPoint":7784,"id":644,"parameterSlots":0,"returnSlots":0},"@_nonReentrantBefore_636":{"entryPoint":6814,"id":636,"parameterSlots":0,"returnSlots":0},"@_revert_2769":{"entryPoint":null,"id":2769,"parameterSlots":2,"returnSlots":0},"@_setAccessControlManager_5004":{"entryPoint":5801,"id":5004,"parameterSlots":1,"returnSlots":0},"@_setMaxLoopsLimit_10317":{"entryPoint":6593,"id":10317,"parameterSlots":1,"returnSlots":0},"@_setRewardRecipient_18020":{"entryPoint":6686,"id":18020,"parameterSlots":1,"returnSlots":0},"@_spendAllowance_1246":{"entryPoint":6013,"id":1246,"parameterSlots":3,"returnSlots":0},"@_transferOwnership_233":{"entryPoint":10190,"id":233,"parameterSlots":1,"returnSlots":0},"@_transferOwnership_78":{"entryPoint":6789,"id":78,"parameterSlots":1,"returnSlots":0},"@_transfer_1029":{"entryPoint":6087,"id":1029,"parameterSlots":3,"returnSlots":0},"@_tryGetAssetDecimals_1484":{"entryPoint":11677,"id":1484,"parameterSlots":1,"returnSlots":2},"@_withdraw_1989":{"entryPoint":8703,"id":1989,"parameterSlots":5,"returnSlots":0},"@acceptOwnership_100":{"entryPoint":3634,"id":100,"parameterSlots":0,"returnSlots":0},"@accessControlManager_4966":{"entryPoint":null,"id":4966,"parameterSlots":0,"returnSlots":1},"@allowance_824":{"entryPoint":5244,"id":824,"parameterSlots":2,"returnSlots":1},"@approve_849":{"entryPoint":1903,"id":849,"parameterSlots":2,"returnSlots":1},"@asset_1512":{"entryPoint":null,"id":1512,"parameterSlots":0,"returnSlots":1},"@balanceOf_781":{"entryPoint":null,"id":781,"parameterSlots":1,"returnSlots":1},"@claimRewards_17228":{"entryPoint":2278,"id":17228,"parameterSlots":0,"returnSlots":0},"@comptroller_16894":{"entryPoint":null,"id":16894,"parameterSlots":0,"returnSlots":0},"@convertToAssets_1562":{"entryPoint":1884,"id":1562,"parameterSlots":1,"returnSlots":1},"@convertToShares_1545":{"entryPoint":5231,"id":1545,"parameterSlots":1,"returnSlots":1},"@decimals_1499":{"entryPoint":2240,"id":1499,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_952":{"entryPoint":4055,"id":952,"parameterSlots":2,"returnSlots":1},"@deposit_17343":{"entryPoint":3292,"id":17343,"parameterSlots":2,"returnSlots":1},"@ensureNonzeroAddress_16359":{"entryPoint":6498,"id":16359,"parameterSlots":1,"returnSlots":0},"@functionCallWithValue_2594":{"entryPoint":11897,"id":2594,"parameterSlots":4,"returnSlots":1},"@functionCall_2530":{"entryPoint":11101,"id":2530,"parameterSlots":3,"returnSlots":1},"@increaseAllowance_911":{"entryPoint":3048,"id":911,"parameterSlots":2,"returnSlots":1},"@initialize2_17264":{"entryPoint":3082,"id":17264,"parameterSlots":4,"returnSlots":0},"@initialize_17005":{"entryPoint":4715,"id":17005,"parameterSlots":1,"returnSlots":0},"@isContract_2458":{"entryPoint":null,"id":2458,"parameterSlots":1,"returnSlots":1},"@maxDeposit_18701":{"entryPoint":null,"id":18701,"parameterSlots":1,"returnSlots":1},"@maxLoopsLimit_10271":{"entryPoint":null,"id":10271,"parameterSlots":0,"returnSlots":0},"@maxMint_18723":{"entryPoint":null,"id":18723,"parameterSlots":1,"returnSlots":1},"@maxRedeem_18734":{"entryPoint":null,"id":18734,"parameterSlots":1,"returnSlots":1},"@maxWithdraw_18712":{"entryPoint":null,"id":18712,"parameterSlots":1,"returnSlots":1},"@mint_17410":{"entryPoint":3758,"id":17410,"parameterSlots":2,"returnSlots":1},"@mulDiv_3035":{"entryPoint":10907,"id":3035,"parameterSlots":3,"returnSlots":1},"@mulDiv_3079":{"entryPoint":9863,"id":3079,"parameterSlots":4,"returnSlots":1},"@name_737":{"entryPoint":1738,"id":737,"parameterSlots":0,"returnSlots":1},"@owner_162":{"entryPoint":null,"id":162,"parameterSlots":0,"returnSlots":1},"@pendingOwner_41":{"entryPoint":null,"id":41,"parameterSlots":0,"returnSlots":1},"@previewDeposit_1644":{"entryPoint":null,"id":1644,"parameterSlots":1,"returnSlots":1},"@previewMint_1661":{"entryPoint":4141,"id":1661,"parameterSlots":1,"returnSlots":1},"@previewRedeem_1695":{"entryPoint":null,"id":1695,"parameterSlots":1,"returnSlots":1},"@previewWithdraw_1678":{"entryPoint":1927,"id":1678,"parameterSlots":1,"returnSlots":1},"@redeem_17551":{"entryPoint":4423,"id":17551,"parameterSlots":3,"returnSlots":1},"@renounceOwnership_190":{"entryPoint":3614,"id":190,"parameterSlots":0,"returnSlots":0},"@rewardRecipient_16897":{"entryPoint":null,"id":16897,"parameterSlots":0,"returnSlots":0},"@safeApprove_2168":{"entryPoint":11164,"id":2168,"parameterSlots":3,"returnSlots":0},"@safeTransferFrom_2124":{"entryPoint":10272,"id":2124,"parameterSlots":4,"returnSlots":0},"@safeTransfer_2097":{"entryPoint":5922,"id":2097,"parameterSlots":3,"returnSlots":0},"@setAccessControlManager_4956":{"entryPoint":1940,"id":4956,"parameterSlots":1,"returnSlots":0},"@setAccountBalance_18681":{"entryPoint":null,"id":18681,"parameterSlots":2,"returnSlots":0},"@setMaxDeposit_18637":{"entryPoint":null,"id":18637,"parameterSlots":1,"returnSlots":0},"@setMaxLoopsLimit_17020":{"entryPoint":3687,"id":17020,"parameterSlots":1,"returnSlots":0},"@setMaxMint_18657":{"entryPoint":null,"id":18657,"parameterSlots":1,"returnSlots":0},"@setMaxRedeem_18647":{"entryPoint":null,"id":18647,"parameterSlots":1,"returnSlots":0},"@setMaxWithdraw_18627":{"entryPoint":null,"id":18627,"parameterSlots":1,"returnSlots":0},"@setRewardRecipient_17035":{"entryPoint":5287,"id":17035,"parameterSlots":1,"returnSlots":0},"@setTotalAssets_18617":{"entryPoint":null,"id":18617,"parameterSlots":1,"returnSlots":0},"@setTotalSupply_18667":{"entryPoint":null,"id":18667,"parameterSlots":1,"returnSlots":0},"@sweepToken_17082":{"entryPoint":1960,"id":17082,"parameterSlots":1,"returnSlots":0},"@symbol_747":{"entryPoint":4040,"id":747,"parameterSlots":0,"returnSlots":1},"@totalAssets_18690":{"entryPoint":null,"id":18690,"parameterSlots":0,"returnSlots":1},"@totalSupply_18745":{"entryPoint":null,"id":18745,"parameterSlots":0,"returnSlots":1},"@transferFrom_882":{"entryPoint":2202,"id":882,"parameterSlots":3,"returnSlots":1},"@transferOwnership_61":{"entryPoint":5358,"id":61,"parameterSlots":1,"returnSlots":0},"@transfer_806":{"entryPoint":4127,"id":806,"parameterSlots":2,"returnSlots":1},"@vToken_16890":{"entryPoint":null,"id":16890,"parameterSlots":0,"returnSlots":0},"@verifyCallResultFromTarget_2725":{"entryPoint":null,"id":2725,"parameterSlots":4,"returnSlots":1},"@withdraw_17477":{"entryPoint":4154,"id":17477,"parameterSlots":3,"returnSlots":1},"abi_decode_available_length_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory":{"entryPoint":13310,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_available_length_t_string_memory_ptr_fromMemory":{"entryPoint":16036,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_t_address":{"entryPoint":12355,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_address_fromMemory":{"entryPoint":14273,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory":{"entryPoint":13406,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_bool_fromMemory":{"entryPoint":15829,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_ComptrollerInterface_$9353_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_IERC20Upgradeable_$1352":{"entryPoint":12525,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_IERC20Upgradeable_$1352_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_RewardsDistributor_$12324_fromMemory":{"entryPoint":13299,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_string_memory_ptr_fromMemory":{"entryPoint":16096,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_uint256":{"entryPoint":12285,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_uint256_fromMemory":{"entryPoint":13073,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_uint8_fromMemory":{"entryPoint":15326,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":12449,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":14284,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":12973,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":12569,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_address":{"entryPoint":12672,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":12366,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory":{"entryPoint":13442,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":15840,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_ComptrollerInterface_$9353_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IERC20Upgradeable_$1352":{"entryPoint":12536,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IERC20Upgradeable_$1352_fromMemory":{"entryPoint":13523,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_string_memory_ptr_fromMemory":{"entryPoint":16132,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":12296,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":13084,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_address":{"entryPoint":12852,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256t_addresst_address":{"entryPoint":12903,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint8_fromMemory":{"entryPoint":15337,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encodeUpdatedPos_t_contract$_VToken_$15506_to_t_address":{"entryPoint":13556,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_address_to_t_address_fromStack":{"entryPoint":12482,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack":{"entryPoint":13576,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_bool_to_t_bool_fromStack":{"entryPoint":12427,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_IComptroller_$16789_to_t_address_fromStack":{"entryPoint":12829,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_VToken_$15506_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_enum$_IncomeType_$16797_to_t_uint8_fromStack":{"entryPoint":13740,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_rational_1_by_1_to_t_uint8_fromStack":{"entryPoint":14328,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack":{"entryPoint":12205,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":16191,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f_to_t_string_memory_ptr_fromStack":{"entryPoint":15154,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd_to_t_string_memory_ptr_fromStack":{"entryPoint":17067,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack":{"entryPoint":13970,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack":{"entryPoint":15501,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029_to_t_string_memory_ptr_fromStack":{"entryPoint":14723,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609_to_t_string_memory_ptr_fromStack":{"entryPoint":14228,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe_to_t_string_memory_ptr_fromStack":{"entryPoint":15004,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6_to_t_string_memory_ptr_fromStack":{"entryPoint":15234,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526_to_t_string_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01_to_t_string_memory_ptr_fromStack":{"entryPoint":13902,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack":{"entryPoint":14868,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack":{"entryPoint":17158,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137_to_t_string_memory_ptr_fromStack":{"entryPoint":15648,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack":{"entryPoint":13808,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f_to_t_string_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77_to_t_string_memory_ptr_fromStack":{"entryPoint":14181,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack":{"entryPoint":14802,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f_to_t_string_memory_ptr_fromStack":{"entryPoint":16989,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea_to_t_string_memory_ptr_fromStack":{"entryPoint":15072,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208_to_t_string_memory_ptr_fromStack":{"entryPoint":14642,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack":{"entryPoint":17241,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack":{"entryPoint":15413,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851_to_t_string_memory_ptr_fromStack":{"entryPoint":16762,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354_to_t_string_memory_ptr_fromStack":{"entryPoint":14056,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack":{"entryPoint":16294,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619_to_t_string_memory_ptr_fromStack":{"entryPoint":15580,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25_to_t_string_memory_ptr_fromStack":{"entryPoint":16822,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8_to_t_string_memory_ptr_fromStack":{"entryPoint":14099,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e_to_t_string_memory_ptr_fromStack":{"entryPoint":16921,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e_to_t_string_memory_ptr_fromStack":{"entryPoint":15927,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_uint256_to_t_uint256_fromStack":{"entryPoint":12147,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_uint8_to_t_uint8_fromStack":{"entryPoint":12649,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":17146,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":16272,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":16225,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":12491,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":14950,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_enum$_IncomeType_$16797__to_t_address_t_address_t_uint8__fromStack_reversed":{"entryPoint":13749,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_string_memory_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15873,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":16381,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr__to_t_address_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":13649,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_string_memory_ptr__to_t_address_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15789,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":14977,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":12435,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IAccessControlManagerV8_$5080__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IComptroller_$16789__to_t_address__fromStack_reversed":{"entryPoint":12838,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_VToken_$15506__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed":{"entryPoint":14337,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":12255,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15218,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":17130,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":14040,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15564,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":14786,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":14257,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15056,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15301,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":13935,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":14934,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":17225,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15700,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":13886,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":14212,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":14852,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":17051,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15138,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":14707,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":17293,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15485,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":16806,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":14083,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":16365,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15632,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":16905,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":14165,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":16973,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15977,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":12155,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":15399,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":12658,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":13235,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr":{"entryPoint":13263,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_t_string_memory_ptr":{"entryPoint":15993,"id":null,"parameterSlots":1,"returnSlots":1},"array_dataslot_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_dataslot_t_string_storage":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_bytes_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_string_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_nextElement_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":13789,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint8":{"entryPoint":13139,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":15769,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":14351,"id":null,"parameterSlots":4,"returnSlots":2},"checked_exp_t_uint256_t_uint8":{"entryPoint":14621,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":14423,"id":null,"parameterSlots":3,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":15716,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":13951,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint8":{"entryPoint":15370,"id":null,"parameterSlots":2,"returnSlots":1},"clean_up_bytearray_end_slots_t_string_storage":{"entryPoint":16509,"id":null,"parameterSlots":3,"returnSlots":0},"cleanup_t_address":{"entryPoint":12329,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_bool":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_ComptrollerInterface_$9353":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_IERC20Upgradeable_$1352":{"entryPoint":12505,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_RewardsDistributor_$12324":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_enum$_IncomeType_$16797":{"entryPoint":13719,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_rational_1_by_1":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"clear_storage_range_t_bytes1":{"entryPoint":16482,"id":null,"parameterSlots":2,"returnSlots":0},"convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_IComptroller_$16789_to_t_address":{"entryPoint":12818,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_contract$_VToken_$15506_to_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_enum$_IncomeType_$16797_to_t_uint8":{"entryPoint":13729,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_rational_1_by_1_to_t_uint8":{"entryPoint":14317,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint160_to_t_address":{"entryPoint":12807,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint160_to_t_uint160":{"entryPoint":12772,"id":null,"parameterSlots":1,"returnSlots":1},"convert_t_uint256_to_t_uint256":{"entryPoint":16421,"id":null,"parameterSlots":1,"returnSlots":1},"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage":{"entryPoint":16566,"id":null,"parameterSlots":2,"returnSlots":0},"copy_memory_to_memory_with_cleanup":{"entryPoint":12169,"id":null,"parameterSlots":3,"returnSlots":0},"divide_by_32_ceil":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"extract_byte_array_length":{"entryPoint":13029,"id":null,"parameterSlots":1,"returnSlots":1},"extract_used_part_and_set_length_of_short_byte_array":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":13190,"id":null,"parameterSlots":2,"returnSlots":0},"identity":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mask_bytes_dynamic":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":13117,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":15747,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":13681,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x22":{"entryPoint":13007,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":13501,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":13168,"id":null,"parameterSlots":0,"returnSlots":0},"prepare_store_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"round_up_to_mul_of_32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"shift_left_dynamic":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"shift_right_1_unsigned":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"shift_right_unsigned_dynamic":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"storage_set_to_zero_t_uint256":{"entryPoint":16469,"id":null,"parameterSlots":2,"returnSlots":0},"store_literal_in_memory_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"update_byte_slice_dynamic32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"update_storage_value_t_uint256_to_t_uint256":{"entryPoint":16433,"id":null,"parameterSlots":3,"returnSlots":0},"validator_assert_t_enum$_IncomeType_$16797":{"entryPoint":13703,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_address":{"entryPoint":12346,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_bool":{"entryPoint":15821,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_ComptrollerInterface_$9353":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_IERC20Upgradeable_$1352":{"entryPoint":12516,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_RewardsDistributor_$12324":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_uint256":{"entryPoint":12272,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_uint8":{"entryPoint":15317,"id":null,"parameterSlots":1,"returnSlots":0},"zero_value_for_split_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1}},"generatedSources":[{"ast":{"nativeSrc":"0:68196:69","nodeType":"YulBlock","src":"0:68196:69","statements":[{"body":{"nativeSrc":"52:32:69","nodeType":"YulBlock","src":"52:32:69","statements":[{"nativeSrc":"62:16:69","nodeType":"YulAssignment","src":"62:16:69","value":{"name":"value","nativeSrc":"73:5:69","nodeType":"YulIdentifier","src":"73:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"62:7:69","nodeType":"YulIdentifier","src":"62:7:69"}]}]},"name":"cleanup_t_uint256","nativeSrc":"7:77:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"34:5:69","nodeType":"YulTypedName","src":"34:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"44:7:69","nodeType":"YulTypedName","src":"44:7:69","type":""}],"src":"7:77:69"},{"body":{"nativeSrc":"155:53:69","nodeType":"YulBlock","src":"155:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"172:3:69","nodeType":"YulIdentifier","src":"172:3:69"},{"arguments":[{"name":"value","nativeSrc":"195:5:69","nodeType":"YulIdentifier","src":"195:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"177:17:69","nodeType":"YulIdentifier","src":"177:17:69"},"nativeSrc":"177:24:69","nodeType":"YulFunctionCall","src":"177:24:69"}],"functionName":{"name":"mstore","nativeSrc":"165:6:69","nodeType":"YulIdentifier","src":"165:6:69"},"nativeSrc":"165:37:69","nodeType":"YulFunctionCall","src":"165:37:69"},"nativeSrc":"165:37:69","nodeType":"YulExpressionStatement","src":"165:37:69"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"90:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"143:5:69","nodeType":"YulTypedName","src":"143:5:69","type":""},{"name":"pos","nativeSrc":"150:3:69","nodeType":"YulTypedName","src":"150:3:69","type":""}],"src":"90:118:69"},{"body":{"nativeSrc":"312:124:69","nodeType":"YulBlock","src":"312:124:69","statements":[{"nativeSrc":"322:26:69","nodeType":"YulAssignment","src":"322:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"334:9:69","nodeType":"YulIdentifier","src":"334:9:69"},{"kind":"number","nativeSrc":"345:2:69","nodeType":"YulLiteral","src":"345:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"330:3:69","nodeType":"YulIdentifier","src":"330:3:69"},"nativeSrc":"330:18:69","nodeType":"YulFunctionCall","src":"330:18:69"},"variableNames":[{"name":"tail","nativeSrc":"322:4:69","nodeType":"YulIdentifier","src":"322:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"402:6:69","nodeType":"YulIdentifier","src":"402:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"415:9:69","nodeType":"YulIdentifier","src":"415:9:69"},{"kind":"number","nativeSrc":"426:1:69","nodeType":"YulLiteral","src":"426:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"411:3:69","nodeType":"YulIdentifier","src":"411:3:69"},"nativeSrc":"411:17:69","nodeType":"YulFunctionCall","src":"411:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"358:43:69","nodeType":"YulIdentifier","src":"358:43:69"},"nativeSrc":"358:71:69","nodeType":"YulFunctionCall","src":"358:71:69"},"nativeSrc":"358:71:69","nodeType":"YulExpressionStatement","src":"358:71:69"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nativeSrc":"214:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"284:9:69","nodeType":"YulTypedName","src":"284:9:69","type":""},{"name":"value0","nativeSrc":"296:6:69","nodeType":"YulTypedName","src":"296:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"307:4:69","nodeType":"YulTypedName","src":"307:4:69","type":""}],"src":"214:222:69"},{"body":{"nativeSrc":"501:40:69","nodeType":"YulBlock","src":"501:40:69","statements":[{"nativeSrc":"512:22:69","nodeType":"YulAssignment","src":"512:22:69","value":{"arguments":[{"name":"value","nativeSrc":"528:5:69","nodeType":"YulIdentifier","src":"528:5:69"}],"functionName":{"name":"mload","nativeSrc":"522:5:69","nodeType":"YulIdentifier","src":"522:5:69"},"nativeSrc":"522:12:69","nodeType":"YulFunctionCall","src":"522:12:69"},"variableNames":[{"name":"length","nativeSrc":"512:6:69","nodeType":"YulIdentifier","src":"512:6:69"}]}]},"name":"array_length_t_string_memory_ptr","nativeSrc":"442:99:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"484:5:69","nodeType":"YulTypedName","src":"484:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"494:6:69","nodeType":"YulTypedName","src":"494:6:69","type":""}],"src":"442:99:69"},{"body":{"nativeSrc":"643:73:69","nodeType":"YulBlock","src":"643:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"660:3:69","nodeType":"YulIdentifier","src":"660:3:69"},{"name":"length","nativeSrc":"665:6:69","nodeType":"YulIdentifier","src":"665:6:69"}],"functionName":{"name":"mstore","nativeSrc":"653:6:69","nodeType":"YulIdentifier","src":"653:6:69"},"nativeSrc":"653:19:69","nodeType":"YulFunctionCall","src":"653:19:69"},"nativeSrc":"653:19:69","nodeType":"YulExpressionStatement","src":"653:19:69"},{"nativeSrc":"681:29:69","nodeType":"YulAssignment","src":"681:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"700:3:69","nodeType":"YulIdentifier","src":"700:3:69"},{"kind":"number","nativeSrc":"705:4:69","nodeType":"YulLiteral","src":"705:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"696:3:69","nodeType":"YulIdentifier","src":"696:3:69"},"nativeSrc":"696:14:69","nodeType":"YulFunctionCall","src":"696:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"681:11:69","nodeType":"YulIdentifier","src":"681:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"547:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"615:3:69","nodeType":"YulTypedName","src":"615:3:69","type":""},{"name":"length","nativeSrc":"620:6:69","nodeType":"YulTypedName","src":"620:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"631:11:69","nodeType":"YulTypedName","src":"631:11:69","type":""}],"src":"547:169:69"},{"body":{"nativeSrc":"784:186:69","nodeType":"YulBlock","src":"784:186:69","statements":[{"nativeSrc":"795:10:69","nodeType":"YulVariableDeclaration","src":"795:10:69","value":{"kind":"number","nativeSrc":"804:1:69","nodeType":"YulLiteral","src":"804:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"799:1:69","nodeType":"YulTypedName","src":"799:1:69","type":""}]},{"body":{"nativeSrc":"864:63:69","nodeType":"YulBlock","src":"864:63:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"889:3:69","nodeType":"YulIdentifier","src":"889:3:69"},{"name":"i","nativeSrc":"894:1:69","nodeType":"YulIdentifier","src":"894:1:69"}],"functionName":{"name":"add","nativeSrc":"885:3:69","nodeType":"YulIdentifier","src":"885:3:69"},"nativeSrc":"885:11:69","nodeType":"YulFunctionCall","src":"885:11:69"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"908:3:69","nodeType":"YulIdentifier","src":"908:3:69"},{"name":"i","nativeSrc":"913:1:69","nodeType":"YulIdentifier","src":"913:1:69"}],"functionName":{"name":"add","nativeSrc":"904:3:69","nodeType":"YulIdentifier","src":"904:3:69"},"nativeSrc":"904:11:69","nodeType":"YulFunctionCall","src":"904:11:69"}],"functionName":{"name":"mload","nativeSrc":"898:5:69","nodeType":"YulIdentifier","src":"898:5:69"},"nativeSrc":"898:18:69","nodeType":"YulFunctionCall","src":"898:18:69"}],"functionName":{"name":"mstore","nativeSrc":"878:6:69","nodeType":"YulIdentifier","src":"878:6:69"},"nativeSrc":"878:39:69","nodeType":"YulFunctionCall","src":"878:39:69"},"nativeSrc":"878:39:69","nodeType":"YulExpressionStatement","src":"878:39:69"}]},"condition":{"arguments":[{"name":"i","nativeSrc":"825:1:69","nodeType":"YulIdentifier","src":"825:1:69"},{"name":"length","nativeSrc":"828:6:69","nodeType":"YulIdentifier","src":"828:6:69"}],"functionName":{"name":"lt","nativeSrc":"822:2:69","nodeType":"YulIdentifier","src":"822:2:69"},"nativeSrc":"822:13:69","nodeType":"YulFunctionCall","src":"822:13:69"},"nativeSrc":"814:113:69","nodeType":"YulForLoop","post":{"nativeSrc":"836:19:69","nodeType":"YulBlock","src":"836:19:69","statements":[{"nativeSrc":"838:15:69","nodeType":"YulAssignment","src":"838:15:69","value":{"arguments":[{"name":"i","nativeSrc":"847:1:69","nodeType":"YulIdentifier","src":"847:1:69"},{"kind":"number","nativeSrc":"850:2:69","nodeType":"YulLiteral","src":"850:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"843:3:69","nodeType":"YulIdentifier","src":"843:3:69"},"nativeSrc":"843:10:69","nodeType":"YulFunctionCall","src":"843:10:69"},"variableNames":[{"name":"i","nativeSrc":"838:1:69","nodeType":"YulIdentifier","src":"838:1:69"}]}]},"pre":{"nativeSrc":"818:3:69","nodeType":"YulBlock","src":"818:3:69","statements":[]},"src":"814:113:69"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"947:3:69","nodeType":"YulIdentifier","src":"947:3:69"},{"name":"length","nativeSrc":"952:6:69","nodeType":"YulIdentifier","src":"952:6:69"}],"functionName":{"name":"add","nativeSrc":"943:3:69","nodeType":"YulIdentifier","src":"943:3:69"},"nativeSrc":"943:16:69","nodeType":"YulFunctionCall","src":"943:16:69"},{"kind":"number","nativeSrc":"961:1:69","nodeType":"YulLiteral","src":"961:1:69","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"936:6:69","nodeType":"YulIdentifier","src":"936:6:69"},"nativeSrc":"936:27:69","nodeType":"YulFunctionCall","src":"936:27:69"},"nativeSrc":"936:27:69","nodeType":"YulExpressionStatement","src":"936:27:69"}]},"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"722:248:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"766:3:69","nodeType":"YulTypedName","src":"766:3:69","type":""},{"name":"dst","nativeSrc":"771:3:69","nodeType":"YulTypedName","src":"771:3:69","type":""},{"name":"length","nativeSrc":"776:6:69","nodeType":"YulTypedName","src":"776:6:69","type":""}],"src":"722:248:69"},{"body":{"nativeSrc":"1024:54:69","nodeType":"YulBlock","src":"1024:54:69","statements":[{"nativeSrc":"1034:38:69","nodeType":"YulAssignment","src":"1034:38:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1052:5:69","nodeType":"YulIdentifier","src":"1052:5:69"},{"kind":"number","nativeSrc":"1059:2:69","nodeType":"YulLiteral","src":"1059:2:69","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"1048:3:69","nodeType":"YulIdentifier","src":"1048:3:69"},"nativeSrc":"1048:14:69","nodeType":"YulFunctionCall","src":"1048:14:69"},{"arguments":[{"kind":"number","nativeSrc":"1068:2:69","nodeType":"YulLiteral","src":"1068:2:69","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"1064:3:69","nodeType":"YulIdentifier","src":"1064:3:69"},"nativeSrc":"1064:7:69","nodeType":"YulFunctionCall","src":"1064:7:69"}],"functionName":{"name":"and","nativeSrc":"1044:3:69","nodeType":"YulIdentifier","src":"1044:3:69"},"nativeSrc":"1044:28:69","nodeType":"YulFunctionCall","src":"1044:28:69"},"variableNames":[{"name":"result","nativeSrc":"1034:6:69","nodeType":"YulIdentifier","src":"1034:6:69"}]}]},"name":"round_up_to_mul_of_32","nativeSrc":"976:102:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1007:5:69","nodeType":"YulTypedName","src":"1007:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"1017:6:69","nodeType":"YulTypedName","src":"1017:6:69","type":""}],"src":"976:102:69"},{"body":{"nativeSrc":"1176:285:69","nodeType":"YulBlock","src":"1176:285:69","statements":[{"nativeSrc":"1186:53:69","nodeType":"YulVariableDeclaration","src":"1186:53:69","value":{"arguments":[{"name":"value","nativeSrc":"1233:5:69","nodeType":"YulIdentifier","src":"1233:5:69"}],"functionName":{"name":"array_length_t_string_memory_ptr","nativeSrc":"1200:32:69","nodeType":"YulIdentifier","src":"1200:32:69"},"nativeSrc":"1200:39:69","nodeType":"YulFunctionCall","src":"1200:39:69"},"variables":[{"name":"length","nativeSrc":"1190:6:69","nodeType":"YulTypedName","src":"1190:6:69","type":""}]},{"nativeSrc":"1248:78:69","nodeType":"YulAssignment","src":"1248:78:69","value":{"arguments":[{"name":"pos","nativeSrc":"1314:3:69","nodeType":"YulIdentifier","src":"1314:3:69"},{"name":"length","nativeSrc":"1319:6:69","nodeType":"YulIdentifier","src":"1319:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"1255:58:69","nodeType":"YulIdentifier","src":"1255:58:69"},"nativeSrc":"1255:71:69","nodeType":"YulFunctionCall","src":"1255:71:69"},"variableNames":[{"name":"pos","nativeSrc":"1248:3:69","nodeType":"YulIdentifier","src":"1248:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1374:5:69","nodeType":"YulIdentifier","src":"1374:5:69"},{"kind":"number","nativeSrc":"1381:4:69","nodeType":"YulLiteral","src":"1381:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1370:3:69","nodeType":"YulIdentifier","src":"1370:3:69"},"nativeSrc":"1370:16:69","nodeType":"YulFunctionCall","src":"1370:16:69"},{"name":"pos","nativeSrc":"1388:3:69","nodeType":"YulIdentifier","src":"1388:3:69"},{"name":"length","nativeSrc":"1393:6:69","nodeType":"YulIdentifier","src":"1393:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"1335:34:69","nodeType":"YulIdentifier","src":"1335:34:69"},"nativeSrc":"1335:65:69","nodeType":"YulFunctionCall","src":"1335:65:69"},"nativeSrc":"1335:65:69","nodeType":"YulExpressionStatement","src":"1335:65:69"},{"nativeSrc":"1409:46:69","nodeType":"YulAssignment","src":"1409:46:69","value":{"arguments":[{"name":"pos","nativeSrc":"1420:3:69","nodeType":"YulIdentifier","src":"1420:3:69"},{"arguments":[{"name":"length","nativeSrc":"1447:6:69","nodeType":"YulIdentifier","src":"1447:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"1425:21:69","nodeType":"YulIdentifier","src":"1425:21:69"},"nativeSrc":"1425:29:69","nodeType":"YulFunctionCall","src":"1425:29:69"}],"functionName":{"name":"add","nativeSrc":"1416:3:69","nodeType":"YulIdentifier","src":"1416:3:69"},"nativeSrc":"1416:39:69","nodeType":"YulFunctionCall","src":"1416:39:69"},"variableNames":[{"name":"end","nativeSrc":"1409:3:69","nodeType":"YulIdentifier","src":"1409:3:69"}]}]},"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"1084:377:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1157:5:69","nodeType":"YulTypedName","src":"1157:5:69","type":""},{"name":"pos","nativeSrc":"1164:3:69","nodeType":"YulTypedName","src":"1164:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"1172:3:69","nodeType":"YulTypedName","src":"1172:3:69","type":""}],"src":"1084:377:69"},{"body":{"nativeSrc":"1585:195:69","nodeType":"YulBlock","src":"1585:195:69","statements":[{"nativeSrc":"1595:26:69","nodeType":"YulAssignment","src":"1595:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"1607:9:69","nodeType":"YulIdentifier","src":"1607:9:69"},{"kind":"number","nativeSrc":"1618:2:69","nodeType":"YulLiteral","src":"1618:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1603:3:69","nodeType":"YulIdentifier","src":"1603:3:69"},"nativeSrc":"1603:18:69","nodeType":"YulFunctionCall","src":"1603:18:69"},"variableNames":[{"name":"tail","nativeSrc":"1595:4:69","nodeType":"YulIdentifier","src":"1595:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1642:9:69","nodeType":"YulIdentifier","src":"1642:9:69"},{"kind":"number","nativeSrc":"1653:1:69","nodeType":"YulLiteral","src":"1653:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1638:3:69","nodeType":"YulIdentifier","src":"1638:3:69"},"nativeSrc":"1638:17:69","nodeType":"YulFunctionCall","src":"1638:17:69"},{"arguments":[{"name":"tail","nativeSrc":"1661:4:69","nodeType":"YulIdentifier","src":"1661:4:69"},{"name":"headStart","nativeSrc":"1667:9:69","nodeType":"YulIdentifier","src":"1667:9:69"}],"functionName":{"name":"sub","nativeSrc":"1657:3:69","nodeType":"YulIdentifier","src":"1657:3:69"},"nativeSrc":"1657:20:69","nodeType":"YulFunctionCall","src":"1657:20:69"}],"functionName":{"name":"mstore","nativeSrc":"1631:6:69","nodeType":"YulIdentifier","src":"1631:6:69"},"nativeSrc":"1631:47:69","nodeType":"YulFunctionCall","src":"1631:47:69"},"nativeSrc":"1631:47:69","nodeType":"YulExpressionStatement","src":"1631:47:69"},{"nativeSrc":"1687:86:69","nodeType":"YulAssignment","src":"1687:86:69","value":{"arguments":[{"name":"value0","nativeSrc":"1759:6:69","nodeType":"YulIdentifier","src":"1759:6:69"},{"name":"tail","nativeSrc":"1768:4:69","nodeType":"YulIdentifier","src":"1768:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"1695:63:69","nodeType":"YulIdentifier","src":"1695:63:69"},"nativeSrc":"1695:78:69","nodeType":"YulFunctionCall","src":"1695:78:69"},"variableNames":[{"name":"tail","nativeSrc":"1687:4:69","nodeType":"YulIdentifier","src":"1687:4:69"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"1467:313:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1557:9:69","nodeType":"YulTypedName","src":"1557:9:69","type":""},{"name":"value0","nativeSrc":"1569:6:69","nodeType":"YulTypedName","src":"1569:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1580:4:69","nodeType":"YulTypedName","src":"1580:4:69","type":""}],"src":"1467:313:69"},{"body":{"nativeSrc":"1826:35:69","nodeType":"YulBlock","src":"1826:35:69","statements":[{"nativeSrc":"1836:19:69","nodeType":"YulAssignment","src":"1836:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"1852:2:69","nodeType":"YulLiteral","src":"1852:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"1846:5:69","nodeType":"YulIdentifier","src":"1846:5:69"},"nativeSrc":"1846:9:69","nodeType":"YulFunctionCall","src":"1846:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"1836:6:69","nodeType":"YulIdentifier","src":"1836:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"1786:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"1819:6:69","nodeType":"YulTypedName","src":"1819:6:69","type":""}],"src":"1786:75:69"},{"body":{"nativeSrc":"1956:28:69","nodeType":"YulBlock","src":"1956:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1973:1:69","nodeType":"YulLiteral","src":"1973:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1976:1:69","nodeType":"YulLiteral","src":"1976:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1966:6:69","nodeType":"YulIdentifier","src":"1966:6:69"},"nativeSrc":"1966:12:69","nodeType":"YulFunctionCall","src":"1966:12:69"},"nativeSrc":"1966:12:69","nodeType":"YulExpressionStatement","src":"1966:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"1867:117:69","nodeType":"YulFunctionDefinition","src":"1867:117:69"},{"body":{"nativeSrc":"2079:28:69","nodeType":"YulBlock","src":"2079:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2096:1:69","nodeType":"YulLiteral","src":"2096:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"2099:1:69","nodeType":"YulLiteral","src":"2099:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2089:6:69","nodeType":"YulIdentifier","src":"2089:6:69"},"nativeSrc":"2089:12:69","nodeType":"YulFunctionCall","src":"2089:12:69"},"nativeSrc":"2089:12:69","nodeType":"YulExpressionStatement","src":"2089:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"1990:117:69","nodeType":"YulFunctionDefinition","src":"1990:117:69"},{"body":{"nativeSrc":"2156:79:69","nodeType":"YulBlock","src":"2156:79:69","statements":[{"body":{"nativeSrc":"2213:16:69","nodeType":"YulBlock","src":"2213:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2222:1:69","nodeType":"YulLiteral","src":"2222:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"2225:1:69","nodeType":"YulLiteral","src":"2225:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2215:6:69","nodeType":"YulIdentifier","src":"2215:6:69"},"nativeSrc":"2215:12:69","nodeType":"YulFunctionCall","src":"2215:12:69"},"nativeSrc":"2215:12:69","nodeType":"YulExpressionStatement","src":"2215:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"2179:5:69","nodeType":"YulIdentifier","src":"2179:5:69"},{"arguments":[{"name":"value","nativeSrc":"2204:5:69","nodeType":"YulIdentifier","src":"2204:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"2186:17:69","nodeType":"YulIdentifier","src":"2186:17:69"},"nativeSrc":"2186:24:69","nodeType":"YulFunctionCall","src":"2186:24:69"}],"functionName":{"name":"eq","nativeSrc":"2176:2:69","nodeType":"YulIdentifier","src":"2176:2:69"},"nativeSrc":"2176:35:69","nodeType":"YulFunctionCall","src":"2176:35:69"}],"functionName":{"name":"iszero","nativeSrc":"2169:6:69","nodeType":"YulIdentifier","src":"2169:6:69"},"nativeSrc":"2169:43:69","nodeType":"YulFunctionCall","src":"2169:43:69"},"nativeSrc":"2166:63:69","nodeType":"YulIf","src":"2166:63:69"}]},"name":"validator_revert_t_uint256","nativeSrc":"2113:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2149:5:69","nodeType":"YulTypedName","src":"2149:5:69","type":""}],"src":"2113:122:69"},{"body":{"nativeSrc":"2293:87:69","nodeType":"YulBlock","src":"2293:87:69","statements":[{"nativeSrc":"2303:29:69","nodeType":"YulAssignment","src":"2303:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"2325:6:69","nodeType":"YulIdentifier","src":"2325:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"2312:12:69","nodeType":"YulIdentifier","src":"2312:12:69"},"nativeSrc":"2312:20:69","nodeType":"YulFunctionCall","src":"2312:20:69"},"variableNames":[{"name":"value","nativeSrc":"2303:5:69","nodeType":"YulIdentifier","src":"2303:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"2368:5:69","nodeType":"YulIdentifier","src":"2368:5:69"}],"functionName":{"name":"validator_revert_t_uint256","nativeSrc":"2341:26:69","nodeType":"YulIdentifier","src":"2341:26:69"},"nativeSrc":"2341:33:69","nodeType":"YulFunctionCall","src":"2341:33:69"},"nativeSrc":"2341:33:69","nodeType":"YulExpressionStatement","src":"2341:33:69"}]},"name":"abi_decode_t_uint256","nativeSrc":"2241:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"2271:6:69","nodeType":"YulTypedName","src":"2271:6:69","type":""},{"name":"end","nativeSrc":"2279:3:69","nodeType":"YulTypedName","src":"2279:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"2287:5:69","nodeType":"YulTypedName","src":"2287:5:69","type":""}],"src":"2241:139:69"},{"body":{"nativeSrc":"2452:263:69","nodeType":"YulBlock","src":"2452:263:69","statements":[{"body":{"nativeSrc":"2498:83:69","nodeType":"YulBlock","src":"2498:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"2500:77:69","nodeType":"YulIdentifier","src":"2500:77:69"},"nativeSrc":"2500:79:69","nodeType":"YulFunctionCall","src":"2500:79:69"},"nativeSrc":"2500:79:69","nodeType":"YulExpressionStatement","src":"2500:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"2473:7:69","nodeType":"YulIdentifier","src":"2473:7:69"},{"name":"headStart","nativeSrc":"2482:9:69","nodeType":"YulIdentifier","src":"2482:9:69"}],"functionName":{"name":"sub","nativeSrc":"2469:3:69","nodeType":"YulIdentifier","src":"2469:3:69"},"nativeSrc":"2469:23:69","nodeType":"YulFunctionCall","src":"2469:23:69"},{"kind":"number","nativeSrc":"2494:2:69","nodeType":"YulLiteral","src":"2494:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"2465:3:69","nodeType":"YulIdentifier","src":"2465:3:69"},"nativeSrc":"2465:32:69","nodeType":"YulFunctionCall","src":"2465:32:69"},"nativeSrc":"2462:119:69","nodeType":"YulIf","src":"2462:119:69"},{"nativeSrc":"2591:117:69","nodeType":"YulBlock","src":"2591:117:69","statements":[{"nativeSrc":"2606:15:69","nodeType":"YulVariableDeclaration","src":"2606:15:69","value":{"kind":"number","nativeSrc":"2620:1:69","nodeType":"YulLiteral","src":"2620:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"2610:6:69","nodeType":"YulTypedName","src":"2610:6:69","type":""}]},{"nativeSrc":"2635:63:69","nodeType":"YulAssignment","src":"2635:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2670:9:69","nodeType":"YulIdentifier","src":"2670:9:69"},{"name":"offset","nativeSrc":"2681:6:69","nodeType":"YulIdentifier","src":"2681:6:69"}],"functionName":{"name":"add","nativeSrc":"2666:3:69","nodeType":"YulIdentifier","src":"2666:3:69"},"nativeSrc":"2666:22:69","nodeType":"YulFunctionCall","src":"2666:22:69"},{"name":"dataEnd","nativeSrc":"2690:7:69","nodeType":"YulIdentifier","src":"2690:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"2645:20:69","nodeType":"YulIdentifier","src":"2645:20:69"},"nativeSrc":"2645:53:69","nodeType":"YulFunctionCall","src":"2645:53:69"},"variableNames":[{"name":"value0","nativeSrc":"2635:6:69","nodeType":"YulIdentifier","src":"2635:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint256","nativeSrc":"2386:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2422:9:69","nodeType":"YulTypedName","src":"2422:9:69","type":""},{"name":"dataEnd","nativeSrc":"2433:7:69","nodeType":"YulTypedName","src":"2433:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"2445:6:69","nodeType":"YulTypedName","src":"2445:6:69","type":""}],"src":"2386:329:69"},{"body":{"nativeSrc":"2766:81:69","nodeType":"YulBlock","src":"2766:81:69","statements":[{"nativeSrc":"2776:65:69","nodeType":"YulAssignment","src":"2776:65:69","value":{"arguments":[{"name":"value","nativeSrc":"2791:5:69","nodeType":"YulIdentifier","src":"2791:5:69"},{"kind":"number","nativeSrc":"2798:42:69","nodeType":"YulLiteral","src":"2798:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"2787:3:69","nodeType":"YulIdentifier","src":"2787:3:69"},"nativeSrc":"2787:54:69","nodeType":"YulFunctionCall","src":"2787:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"2776:7:69","nodeType":"YulIdentifier","src":"2776:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"2721:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2748:5:69","nodeType":"YulTypedName","src":"2748:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"2758:7:69","nodeType":"YulTypedName","src":"2758:7:69","type":""}],"src":"2721:126:69"},{"body":{"nativeSrc":"2898:51:69","nodeType":"YulBlock","src":"2898:51:69","statements":[{"nativeSrc":"2908:35:69","nodeType":"YulAssignment","src":"2908:35:69","value":{"arguments":[{"name":"value","nativeSrc":"2937:5:69","nodeType":"YulIdentifier","src":"2937:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"2919:17:69","nodeType":"YulIdentifier","src":"2919:17:69"},"nativeSrc":"2919:24:69","nodeType":"YulFunctionCall","src":"2919:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"2908:7:69","nodeType":"YulIdentifier","src":"2908:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"2853:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2880:5:69","nodeType":"YulTypedName","src":"2880:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"2890:7:69","nodeType":"YulTypedName","src":"2890:7:69","type":""}],"src":"2853:96:69"},{"body":{"nativeSrc":"2998:79:69","nodeType":"YulBlock","src":"2998:79:69","statements":[{"body":{"nativeSrc":"3055:16:69","nodeType":"YulBlock","src":"3055:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3064:1:69","nodeType":"YulLiteral","src":"3064:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"3067:1:69","nodeType":"YulLiteral","src":"3067:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"3057:6:69","nodeType":"YulIdentifier","src":"3057:6:69"},"nativeSrc":"3057:12:69","nodeType":"YulFunctionCall","src":"3057:12:69"},"nativeSrc":"3057:12:69","nodeType":"YulExpressionStatement","src":"3057:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"3021:5:69","nodeType":"YulIdentifier","src":"3021:5:69"},{"arguments":[{"name":"value","nativeSrc":"3046:5:69","nodeType":"YulIdentifier","src":"3046:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"3028:17:69","nodeType":"YulIdentifier","src":"3028:17:69"},"nativeSrc":"3028:24:69","nodeType":"YulFunctionCall","src":"3028:24:69"}],"functionName":{"name":"eq","nativeSrc":"3018:2:69","nodeType":"YulIdentifier","src":"3018:2:69"},"nativeSrc":"3018:35:69","nodeType":"YulFunctionCall","src":"3018:35:69"}],"functionName":{"name":"iszero","nativeSrc":"3011:6:69","nodeType":"YulIdentifier","src":"3011:6:69"},"nativeSrc":"3011:43:69","nodeType":"YulFunctionCall","src":"3011:43:69"},"nativeSrc":"3008:63:69","nodeType":"YulIf","src":"3008:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"2955:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2991:5:69","nodeType":"YulTypedName","src":"2991:5:69","type":""}],"src":"2955:122:69"},{"body":{"nativeSrc":"3135:87:69","nodeType":"YulBlock","src":"3135:87:69","statements":[{"nativeSrc":"3145:29:69","nodeType":"YulAssignment","src":"3145:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"3167:6:69","nodeType":"YulIdentifier","src":"3167:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"3154:12:69","nodeType":"YulIdentifier","src":"3154:12:69"},"nativeSrc":"3154:20:69","nodeType":"YulFunctionCall","src":"3154:20:69"},"variableNames":[{"name":"value","nativeSrc":"3145:5:69","nodeType":"YulIdentifier","src":"3145:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"3210:5:69","nodeType":"YulIdentifier","src":"3210:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"3183:26:69","nodeType":"YulIdentifier","src":"3183:26:69"},"nativeSrc":"3183:33:69","nodeType":"YulFunctionCall","src":"3183:33:69"},"nativeSrc":"3183:33:69","nodeType":"YulExpressionStatement","src":"3183:33:69"}]},"name":"abi_decode_t_address","nativeSrc":"3083:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"3113:6:69","nodeType":"YulTypedName","src":"3113:6:69","type":""},{"name":"end","nativeSrc":"3121:3:69","nodeType":"YulTypedName","src":"3121:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"3129:5:69","nodeType":"YulTypedName","src":"3129:5:69","type":""}],"src":"3083:139:69"},{"body":{"nativeSrc":"3311:391:69","nodeType":"YulBlock","src":"3311:391:69","statements":[{"body":{"nativeSrc":"3357:83:69","nodeType":"YulBlock","src":"3357:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"3359:77:69","nodeType":"YulIdentifier","src":"3359:77:69"},"nativeSrc":"3359:79:69","nodeType":"YulFunctionCall","src":"3359:79:69"},"nativeSrc":"3359:79:69","nodeType":"YulExpressionStatement","src":"3359:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"3332:7:69","nodeType":"YulIdentifier","src":"3332:7:69"},{"name":"headStart","nativeSrc":"3341:9:69","nodeType":"YulIdentifier","src":"3341:9:69"}],"functionName":{"name":"sub","nativeSrc":"3328:3:69","nodeType":"YulIdentifier","src":"3328:3:69"},"nativeSrc":"3328:23:69","nodeType":"YulFunctionCall","src":"3328:23:69"},{"kind":"number","nativeSrc":"3353:2:69","nodeType":"YulLiteral","src":"3353:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"3324:3:69","nodeType":"YulIdentifier","src":"3324:3:69"},"nativeSrc":"3324:32:69","nodeType":"YulFunctionCall","src":"3324:32:69"},"nativeSrc":"3321:119:69","nodeType":"YulIf","src":"3321:119:69"},{"nativeSrc":"3450:117:69","nodeType":"YulBlock","src":"3450:117:69","statements":[{"nativeSrc":"3465:15:69","nodeType":"YulVariableDeclaration","src":"3465:15:69","value":{"kind":"number","nativeSrc":"3479:1:69","nodeType":"YulLiteral","src":"3479:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"3469:6:69","nodeType":"YulTypedName","src":"3469:6:69","type":""}]},{"nativeSrc":"3494:63:69","nodeType":"YulAssignment","src":"3494:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3529:9:69","nodeType":"YulIdentifier","src":"3529:9:69"},{"name":"offset","nativeSrc":"3540:6:69","nodeType":"YulIdentifier","src":"3540:6:69"}],"functionName":{"name":"add","nativeSrc":"3525:3:69","nodeType":"YulIdentifier","src":"3525:3:69"},"nativeSrc":"3525:22:69","nodeType":"YulFunctionCall","src":"3525:22:69"},{"name":"dataEnd","nativeSrc":"3549:7:69","nodeType":"YulIdentifier","src":"3549:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"3504:20:69","nodeType":"YulIdentifier","src":"3504:20:69"},"nativeSrc":"3504:53:69","nodeType":"YulFunctionCall","src":"3504:53:69"},"variableNames":[{"name":"value0","nativeSrc":"3494:6:69","nodeType":"YulIdentifier","src":"3494:6:69"}]}]},{"nativeSrc":"3577:118:69","nodeType":"YulBlock","src":"3577:118:69","statements":[{"nativeSrc":"3592:16:69","nodeType":"YulVariableDeclaration","src":"3592:16:69","value":{"kind":"number","nativeSrc":"3606:2:69","nodeType":"YulLiteral","src":"3606:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"3596:6:69","nodeType":"YulTypedName","src":"3596:6:69","type":""}]},{"nativeSrc":"3622:63:69","nodeType":"YulAssignment","src":"3622:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3657:9:69","nodeType":"YulIdentifier","src":"3657:9:69"},{"name":"offset","nativeSrc":"3668:6:69","nodeType":"YulIdentifier","src":"3668:6:69"}],"functionName":{"name":"add","nativeSrc":"3653:3:69","nodeType":"YulIdentifier","src":"3653:3:69"},"nativeSrc":"3653:22:69","nodeType":"YulFunctionCall","src":"3653:22:69"},{"name":"dataEnd","nativeSrc":"3677:7:69","nodeType":"YulIdentifier","src":"3677:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"3632:20:69","nodeType":"YulIdentifier","src":"3632:20:69"},"nativeSrc":"3632:53:69","nodeType":"YulFunctionCall","src":"3632:53:69"},"variableNames":[{"name":"value1","nativeSrc":"3622:6:69","nodeType":"YulIdentifier","src":"3622:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nativeSrc":"3228:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3273:9:69","nodeType":"YulTypedName","src":"3273:9:69","type":""},{"name":"dataEnd","nativeSrc":"3284:7:69","nodeType":"YulTypedName","src":"3284:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"3296:6:69","nodeType":"YulTypedName","src":"3296:6:69","type":""},{"name":"value1","nativeSrc":"3304:6:69","nodeType":"YulTypedName","src":"3304:6:69","type":""}],"src":"3228:474:69"},{"body":{"nativeSrc":"3750:48:69","nodeType":"YulBlock","src":"3750:48:69","statements":[{"nativeSrc":"3760:32:69","nodeType":"YulAssignment","src":"3760:32:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"3785:5:69","nodeType":"YulIdentifier","src":"3785:5:69"}],"functionName":{"name":"iszero","nativeSrc":"3778:6:69","nodeType":"YulIdentifier","src":"3778:6:69"},"nativeSrc":"3778:13:69","nodeType":"YulFunctionCall","src":"3778:13:69"}],"functionName":{"name":"iszero","nativeSrc":"3771:6:69","nodeType":"YulIdentifier","src":"3771:6:69"},"nativeSrc":"3771:21:69","nodeType":"YulFunctionCall","src":"3771:21:69"},"variableNames":[{"name":"cleaned","nativeSrc":"3760:7:69","nodeType":"YulIdentifier","src":"3760:7:69"}]}]},"name":"cleanup_t_bool","nativeSrc":"3708:90:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3732:5:69","nodeType":"YulTypedName","src":"3732:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"3742:7:69","nodeType":"YulTypedName","src":"3742:7:69","type":""}],"src":"3708:90:69"},{"body":{"nativeSrc":"3863:50:69","nodeType":"YulBlock","src":"3863:50:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"3880:3:69","nodeType":"YulIdentifier","src":"3880:3:69"},{"arguments":[{"name":"value","nativeSrc":"3900:5:69","nodeType":"YulIdentifier","src":"3900:5:69"}],"functionName":{"name":"cleanup_t_bool","nativeSrc":"3885:14:69","nodeType":"YulIdentifier","src":"3885:14:69"},"nativeSrc":"3885:21:69","nodeType":"YulFunctionCall","src":"3885:21:69"}],"functionName":{"name":"mstore","nativeSrc":"3873:6:69","nodeType":"YulIdentifier","src":"3873:6:69"},"nativeSrc":"3873:34:69","nodeType":"YulFunctionCall","src":"3873:34:69"},"nativeSrc":"3873:34:69","nodeType":"YulExpressionStatement","src":"3873:34:69"}]},"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"3804:109:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3851:5:69","nodeType":"YulTypedName","src":"3851:5:69","type":""},{"name":"pos","nativeSrc":"3858:3:69","nodeType":"YulTypedName","src":"3858:3:69","type":""}],"src":"3804:109:69"},{"body":{"nativeSrc":"4011:118:69","nodeType":"YulBlock","src":"4011:118:69","statements":[{"nativeSrc":"4021:26:69","nodeType":"YulAssignment","src":"4021:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"4033:9:69","nodeType":"YulIdentifier","src":"4033:9:69"},{"kind":"number","nativeSrc":"4044:2:69","nodeType":"YulLiteral","src":"4044:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4029:3:69","nodeType":"YulIdentifier","src":"4029:3:69"},"nativeSrc":"4029:18:69","nodeType":"YulFunctionCall","src":"4029:18:69"},"variableNames":[{"name":"tail","nativeSrc":"4021:4:69","nodeType":"YulIdentifier","src":"4021:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"4095:6:69","nodeType":"YulIdentifier","src":"4095:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"4108:9:69","nodeType":"YulIdentifier","src":"4108:9:69"},{"kind":"number","nativeSrc":"4119:1:69","nodeType":"YulLiteral","src":"4119:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4104:3:69","nodeType":"YulIdentifier","src":"4104:3:69"},"nativeSrc":"4104:17:69","nodeType":"YulFunctionCall","src":"4104:17:69"}],"functionName":{"name":"abi_encode_t_bool_to_t_bool_fromStack","nativeSrc":"4057:37:69","nodeType":"YulIdentifier","src":"4057:37:69"},"nativeSrc":"4057:65:69","nodeType":"YulFunctionCall","src":"4057:65:69"},"nativeSrc":"4057:65:69","nodeType":"YulExpressionStatement","src":"4057:65:69"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nativeSrc":"3919:210:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3983:9:69","nodeType":"YulTypedName","src":"3983:9:69","type":""},{"name":"value0","nativeSrc":"3995:6:69","nodeType":"YulTypedName","src":"3995:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4006:4:69","nodeType":"YulTypedName","src":"4006:4:69","type":""}],"src":"3919:210:69"},{"body":{"nativeSrc":"4201:263:69","nodeType":"YulBlock","src":"4201:263:69","statements":[{"body":{"nativeSrc":"4247:83:69","nodeType":"YulBlock","src":"4247:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"4249:77:69","nodeType":"YulIdentifier","src":"4249:77:69"},"nativeSrc":"4249:79:69","nodeType":"YulFunctionCall","src":"4249:79:69"},"nativeSrc":"4249:79:69","nodeType":"YulExpressionStatement","src":"4249:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"4222:7:69","nodeType":"YulIdentifier","src":"4222:7:69"},{"name":"headStart","nativeSrc":"4231:9:69","nodeType":"YulIdentifier","src":"4231:9:69"}],"functionName":{"name":"sub","nativeSrc":"4218:3:69","nodeType":"YulIdentifier","src":"4218:3:69"},"nativeSrc":"4218:23:69","nodeType":"YulFunctionCall","src":"4218:23:69"},{"kind":"number","nativeSrc":"4243:2:69","nodeType":"YulLiteral","src":"4243:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"4214:3:69","nodeType":"YulIdentifier","src":"4214:3:69"},"nativeSrc":"4214:32:69","nodeType":"YulFunctionCall","src":"4214:32:69"},"nativeSrc":"4211:119:69","nodeType":"YulIf","src":"4211:119:69"},{"nativeSrc":"4340:117:69","nodeType":"YulBlock","src":"4340:117:69","statements":[{"nativeSrc":"4355:15:69","nodeType":"YulVariableDeclaration","src":"4355:15:69","value":{"kind":"number","nativeSrc":"4369:1:69","nodeType":"YulLiteral","src":"4369:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"4359:6:69","nodeType":"YulTypedName","src":"4359:6:69","type":""}]},{"nativeSrc":"4384:63:69","nodeType":"YulAssignment","src":"4384:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4419:9:69","nodeType":"YulIdentifier","src":"4419:9:69"},{"name":"offset","nativeSrc":"4430:6:69","nodeType":"YulIdentifier","src":"4430:6:69"}],"functionName":{"name":"add","nativeSrc":"4415:3:69","nodeType":"YulIdentifier","src":"4415:3:69"},"nativeSrc":"4415:22:69","nodeType":"YulFunctionCall","src":"4415:22:69"},{"name":"dataEnd","nativeSrc":"4439:7:69","nodeType":"YulIdentifier","src":"4439:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"4394:20:69","nodeType":"YulIdentifier","src":"4394:20:69"},"nativeSrc":"4394:53:69","nodeType":"YulFunctionCall","src":"4394:53:69"},"variableNames":[{"name":"value0","nativeSrc":"4384:6:69","nodeType":"YulIdentifier","src":"4384:6:69"}]}]}]},"name":"abi_decode_tuple_t_address","nativeSrc":"4135:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4171:9:69","nodeType":"YulTypedName","src":"4171:9:69","type":""},{"name":"dataEnd","nativeSrc":"4182:7:69","nodeType":"YulTypedName","src":"4182:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"4194:6:69","nodeType":"YulTypedName","src":"4194:6:69","type":""}],"src":"4135:329:69"},{"body":{"nativeSrc":"4535:53:69","nodeType":"YulBlock","src":"4535:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"4552:3:69","nodeType":"YulIdentifier","src":"4552:3:69"},{"arguments":[{"name":"value","nativeSrc":"4575:5:69","nodeType":"YulIdentifier","src":"4575:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"4557:17:69","nodeType":"YulIdentifier","src":"4557:17:69"},"nativeSrc":"4557:24:69","nodeType":"YulFunctionCall","src":"4557:24:69"}],"functionName":{"name":"mstore","nativeSrc":"4545:6:69","nodeType":"YulIdentifier","src":"4545:6:69"},"nativeSrc":"4545:37:69","nodeType":"YulFunctionCall","src":"4545:37:69"},"nativeSrc":"4545:37:69","nodeType":"YulExpressionStatement","src":"4545:37:69"}]},"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"4470:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4523:5:69","nodeType":"YulTypedName","src":"4523:5:69","type":""},{"name":"pos","nativeSrc":"4530:3:69","nodeType":"YulTypedName","src":"4530:3:69","type":""}],"src":"4470:118:69"},{"body":{"nativeSrc":"4692:124:69","nodeType":"YulBlock","src":"4692:124:69","statements":[{"nativeSrc":"4702:26:69","nodeType":"YulAssignment","src":"4702:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"4714:9:69","nodeType":"YulIdentifier","src":"4714:9:69"},{"kind":"number","nativeSrc":"4725:2:69","nodeType":"YulLiteral","src":"4725:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4710:3:69","nodeType":"YulIdentifier","src":"4710:3:69"},"nativeSrc":"4710:18:69","nodeType":"YulFunctionCall","src":"4710:18:69"},"variableNames":[{"name":"tail","nativeSrc":"4702:4:69","nodeType":"YulIdentifier","src":"4702:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"4782:6:69","nodeType":"YulIdentifier","src":"4782:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"4795:9:69","nodeType":"YulIdentifier","src":"4795:9:69"},{"kind":"number","nativeSrc":"4806:1:69","nodeType":"YulLiteral","src":"4806:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4791:3:69","nodeType":"YulIdentifier","src":"4791:3:69"},"nativeSrc":"4791:17:69","nodeType":"YulFunctionCall","src":"4791:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"4738:43:69","nodeType":"YulIdentifier","src":"4738:43:69"},"nativeSrc":"4738:71:69","nodeType":"YulFunctionCall","src":"4738:71:69"},"nativeSrc":"4738:71:69","nodeType":"YulExpressionStatement","src":"4738:71:69"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"4594:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4664:9:69","nodeType":"YulTypedName","src":"4664:9:69","type":""},{"name":"value0","nativeSrc":"4676:6:69","nodeType":"YulTypedName","src":"4676:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4687:4:69","nodeType":"YulTypedName","src":"4687:4:69","type":""}],"src":"4594:222:69"},{"body":{"nativeSrc":"4893:51:69","nodeType":"YulBlock","src":"4893:51:69","statements":[{"nativeSrc":"4903:35:69","nodeType":"YulAssignment","src":"4903:35:69","value":{"arguments":[{"name":"value","nativeSrc":"4932:5:69","nodeType":"YulIdentifier","src":"4932:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"4914:17:69","nodeType":"YulIdentifier","src":"4914:17:69"},"nativeSrc":"4914:24:69","nodeType":"YulFunctionCall","src":"4914:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"4903:7:69","nodeType":"YulIdentifier","src":"4903:7:69"}]}]},"name":"cleanup_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"4822:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4875:5:69","nodeType":"YulTypedName","src":"4875:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"4885:7:69","nodeType":"YulTypedName","src":"4885:7:69","type":""}],"src":"4822:122:69"},{"body":{"nativeSrc":"5019:105:69","nodeType":"YulBlock","src":"5019:105:69","statements":[{"body":{"nativeSrc":"5102:16:69","nodeType":"YulBlock","src":"5102:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"5111:1:69","nodeType":"YulLiteral","src":"5111:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"5114:1:69","nodeType":"YulLiteral","src":"5114:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"5104:6:69","nodeType":"YulIdentifier","src":"5104:6:69"},"nativeSrc":"5104:12:69","nodeType":"YulFunctionCall","src":"5104:12:69"},"nativeSrc":"5104:12:69","nodeType":"YulExpressionStatement","src":"5104:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"5042:5:69","nodeType":"YulIdentifier","src":"5042:5:69"},{"arguments":[{"name":"value","nativeSrc":"5093:5:69","nodeType":"YulIdentifier","src":"5093:5:69"}],"functionName":{"name":"cleanup_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"5049:43:69","nodeType":"YulIdentifier","src":"5049:43:69"},"nativeSrc":"5049:50:69","nodeType":"YulFunctionCall","src":"5049:50:69"}],"functionName":{"name":"eq","nativeSrc":"5039:2:69","nodeType":"YulIdentifier","src":"5039:2:69"},"nativeSrc":"5039:61:69","nodeType":"YulFunctionCall","src":"5039:61:69"}],"functionName":{"name":"iszero","nativeSrc":"5032:6:69","nodeType":"YulIdentifier","src":"5032:6:69"},"nativeSrc":"5032:69:69","nodeType":"YulFunctionCall","src":"5032:69:69"},"nativeSrc":"5029:89:69","nodeType":"YulIf","src":"5029:89:69"}]},"name":"validator_revert_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"4950:174:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"5012:5:69","nodeType":"YulTypedName","src":"5012:5:69","type":""}],"src":"4950:174:69"},{"body":{"nativeSrc":"5208:113:69","nodeType":"YulBlock","src":"5208:113:69","statements":[{"nativeSrc":"5218:29:69","nodeType":"YulAssignment","src":"5218:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"5240:6:69","nodeType":"YulIdentifier","src":"5240:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"5227:12:69","nodeType":"YulIdentifier","src":"5227:12:69"},"nativeSrc":"5227:20:69","nodeType":"YulFunctionCall","src":"5227:20:69"},"variableNames":[{"name":"value","nativeSrc":"5218:5:69","nodeType":"YulIdentifier","src":"5218:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"5309:5:69","nodeType":"YulIdentifier","src":"5309:5:69"}],"functionName":{"name":"validator_revert_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"5256:52:69","nodeType":"YulIdentifier","src":"5256:52:69"},"nativeSrc":"5256:59:69","nodeType":"YulFunctionCall","src":"5256:59:69"},"nativeSrc":"5256:59:69","nodeType":"YulExpressionStatement","src":"5256:59:69"}]},"name":"abi_decode_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"5130:191:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"5186:6:69","nodeType":"YulTypedName","src":"5186:6:69","type":""},{"name":"end","nativeSrc":"5194:3:69","nodeType":"YulTypedName","src":"5194:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"5202:5:69","nodeType":"YulTypedName","src":"5202:5:69","type":""}],"src":"5130:191:69"},{"body":{"nativeSrc":"5419:289:69","nodeType":"YulBlock","src":"5419:289:69","statements":[{"body":{"nativeSrc":"5465:83:69","nodeType":"YulBlock","src":"5465:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"5467:77:69","nodeType":"YulIdentifier","src":"5467:77:69"},"nativeSrc":"5467:79:69","nodeType":"YulFunctionCall","src":"5467:79:69"},"nativeSrc":"5467:79:69","nodeType":"YulExpressionStatement","src":"5467:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"5440:7:69","nodeType":"YulIdentifier","src":"5440:7:69"},{"name":"headStart","nativeSrc":"5449:9:69","nodeType":"YulIdentifier","src":"5449:9:69"}],"functionName":{"name":"sub","nativeSrc":"5436:3:69","nodeType":"YulIdentifier","src":"5436:3:69"},"nativeSrc":"5436:23:69","nodeType":"YulFunctionCall","src":"5436:23:69"},{"kind":"number","nativeSrc":"5461:2:69","nodeType":"YulLiteral","src":"5461:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"5432:3:69","nodeType":"YulIdentifier","src":"5432:3:69"},"nativeSrc":"5432:32:69","nodeType":"YulFunctionCall","src":"5432:32:69"},"nativeSrc":"5429:119:69","nodeType":"YulIf","src":"5429:119:69"},{"nativeSrc":"5558:143:69","nodeType":"YulBlock","src":"5558:143:69","statements":[{"nativeSrc":"5573:15:69","nodeType":"YulVariableDeclaration","src":"5573:15:69","value":{"kind":"number","nativeSrc":"5587:1:69","nodeType":"YulLiteral","src":"5587:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"5577:6:69","nodeType":"YulTypedName","src":"5577:6:69","type":""}]},{"nativeSrc":"5602:89:69","nodeType":"YulAssignment","src":"5602:89:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5663:9:69","nodeType":"YulIdentifier","src":"5663:9:69"},{"name":"offset","nativeSrc":"5674:6:69","nodeType":"YulIdentifier","src":"5674:6:69"}],"functionName":{"name":"add","nativeSrc":"5659:3:69","nodeType":"YulIdentifier","src":"5659:3:69"},"nativeSrc":"5659:22:69","nodeType":"YulFunctionCall","src":"5659:22:69"},{"name":"dataEnd","nativeSrc":"5683:7:69","nodeType":"YulIdentifier","src":"5683:7:69"}],"functionName":{"name":"abi_decode_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"5612:46:69","nodeType":"YulIdentifier","src":"5612:46:69"},"nativeSrc":"5612:79:69","nodeType":"YulFunctionCall","src":"5612:79:69"},"variableNames":[{"name":"value0","nativeSrc":"5602:6:69","nodeType":"YulIdentifier","src":"5602:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"5327:381:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5389:9:69","nodeType":"YulTypedName","src":"5389:9:69","type":""},{"name":"dataEnd","nativeSrc":"5400:7:69","nodeType":"YulTypedName","src":"5400:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"5412:6:69","nodeType":"YulTypedName","src":"5412:6:69","type":""}],"src":"5327:381:69"},{"body":{"nativeSrc":"5814:519:69","nodeType":"YulBlock","src":"5814:519:69","statements":[{"body":{"nativeSrc":"5860:83:69","nodeType":"YulBlock","src":"5860:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"5862:77:69","nodeType":"YulIdentifier","src":"5862:77:69"},"nativeSrc":"5862:79:69","nodeType":"YulFunctionCall","src":"5862:79:69"},"nativeSrc":"5862:79:69","nodeType":"YulExpressionStatement","src":"5862:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"5835:7:69","nodeType":"YulIdentifier","src":"5835:7:69"},{"name":"headStart","nativeSrc":"5844:9:69","nodeType":"YulIdentifier","src":"5844:9:69"}],"functionName":{"name":"sub","nativeSrc":"5831:3:69","nodeType":"YulIdentifier","src":"5831:3:69"},"nativeSrc":"5831:23:69","nodeType":"YulFunctionCall","src":"5831:23:69"},{"kind":"number","nativeSrc":"5856:2:69","nodeType":"YulLiteral","src":"5856:2:69","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"5827:3:69","nodeType":"YulIdentifier","src":"5827:3:69"},"nativeSrc":"5827:32:69","nodeType":"YulFunctionCall","src":"5827:32:69"},"nativeSrc":"5824:119:69","nodeType":"YulIf","src":"5824:119:69"},{"nativeSrc":"5953:117:69","nodeType":"YulBlock","src":"5953:117:69","statements":[{"nativeSrc":"5968:15:69","nodeType":"YulVariableDeclaration","src":"5968:15:69","value":{"kind":"number","nativeSrc":"5982:1:69","nodeType":"YulLiteral","src":"5982:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"5972:6:69","nodeType":"YulTypedName","src":"5972:6:69","type":""}]},{"nativeSrc":"5997:63:69","nodeType":"YulAssignment","src":"5997:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6032:9:69","nodeType":"YulIdentifier","src":"6032:9:69"},{"name":"offset","nativeSrc":"6043:6:69","nodeType":"YulIdentifier","src":"6043:6:69"}],"functionName":{"name":"add","nativeSrc":"6028:3:69","nodeType":"YulIdentifier","src":"6028:3:69"},"nativeSrc":"6028:22:69","nodeType":"YulFunctionCall","src":"6028:22:69"},{"name":"dataEnd","nativeSrc":"6052:7:69","nodeType":"YulIdentifier","src":"6052:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"6007:20:69","nodeType":"YulIdentifier","src":"6007:20:69"},"nativeSrc":"6007:53:69","nodeType":"YulFunctionCall","src":"6007:53:69"},"variableNames":[{"name":"value0","nativeSrc":"5997:6:69","nodeType":"YulIdentifier","src":"5997:6:69"}]}]},{"nativeSrc":"6080:118:69","nodeType":"YulBlock","src":"6080:118:69","statements":[{"nativeSrc":"6095:16:69","nodeType":"YulVariableDeclaration","src":"6095:16:69","value":{"kind":"number","nativeSrc":"6109:2:69","nodeType":"YulLiteral","src":"6109:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"6099:6:69","nodeType":"YulTypedName","src":"6099:6:69","type":""}]},{"nativeSrc":"6125:63:69","nodeType":"YulAssignment","src":"6125:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6160:9:69","nodeType":"YulIdentifier","src":"6160:9:69"},{"name":"offset","nativeSrc":"6171:6:69","nodeType":"YulIdentifier","src":"6171:6:69"}],"functionName":{"name":"add","nativeSrc":"6156:3:69","nodeType":"YulIdentifier","src":"6156:3:69"},"nativeSrc":"6156:22:69","nodeType":"YulFunctionCall","src":"6156:22:69"},{"name":"dataEnd","nativeSrc":"6180:7:69","nodeType":"YulIdentifier","src":"6180:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"6135:20:69","nodeType":"YulIdentifier","src":"6135:20:69"},"nativeSrc":"6135:53:69","nodeType":"YulFunctionCall","src":"6135:53:69"},"variableNames":[{"name":"value1","nativeSrc":"6125:6:69","nodeType":"YulIdentifier","src":"6125:6:69"}]}]},{"nativeSrc":"6208:118:69","nodeType":"YulBlock","src":"6208:118:69","statements":[{"nativeSrc":"6223:16:69","nodeType":"YulVariableDeclaration","src":"6223:16:69","value":{"kind":"number","nativeSrc":"6237:2:69","nodeType":"YulLiteral","src":"6237:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"6227:6:69","nodeType":"YulTypedName","src":"6227:6:69","type":""}]},{"nativeSrc":"6253:63:69","nodeType":"YulAssignment","src":"6253:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6288:9:69","nodeType":"YulIdentifier","src":"6288:9:69"},{"name":"offset","nativeSrc":"6299:6:69","nodeType":"YulIdentifier","src":"6299:6:69"}],"functionName":{"name":"add","nativeSrc":"6284:3:69","nodeType":"YulIdentifier","src":"6284:3:69"},"nativeSrc":"6284:22:69","nodeType":"YulFunctionCall","src":"6284:22:69"},{"name":"dataEnd","nativeSrc":"6308:7:69","nodeType":"YulIdentifier","src":"6308:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"6263:20:69","nodeType":"YulIdentifier","src":"6263:20:69"},"nativeSrc":"6263:53:69","nodeType":"YulFunctionCall","src":"6263:53:69"},"variableNames":[{"name":"value2","nativeSrc":"6253:6:69","nodeType":"YulIdentifier","src":"6253:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nativeSrc":"5714:619:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5768:9:69","nodeType":"YulTypedName","src":"5768:9:69","type":""},{"name":"dataEnd","nativeSrc":"5779:7:69","nodeType":"YulTypedName","src":"5779:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"5791:6:69","nodeType":"YulTypedName","src":"5791:6:69","type":""},{"name":"value1","nativeSrc":"5799:6:69","nodeType":"YulTypedName","src":"5799:6:69","type":""},{"name":"value2","nativeSrc":"5807:6:69","nodeType":"YulTypedName","src":"5807:6:69","type":""}],"src":"5714:619:69"},{"body":{"nativeSrc":"6382:43:69","nodeType":"YulBlock","src":"6382:43:69","statements":[{"nativeSrc":"6392:27:69","nodeType":"YulAssignment","src":"6392:27:69","value":{"arguments":[{"name":"value","nativeSrc":"6407:5:69","nodeType":"YulIdentifier","src":"6407:5:69"},{"kind":"number","nativeSrc":"6414:4:69","nodeType":"YulLiteral","src":"6414:4:69","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"6403:3:69","nodeType":"YulIdentifier","src":"6403:3:69"},"nativeSrc":"6403:16:69","nodeType":"YulFunctionCall","src":"6403:16:69"},"variableNames":[{"name":"cleaned","nativeSrc":"6392:7:69","nodeType":"YulIdentifier","src":"6392:7:69"}]}]},"name":"cleanup_t_uint8","nativeSrc":"6339:86:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"6364:5:69","nodeType":"YulTypedName","src":"6364:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"6374:7:69","nodeType":"YulTypedName","src":"6374:7:69","type":""}],"src":"6339:86:69"},{"body":{"nativeSrc":"6492:51:69","nodeType":"YulBlock","src":"6492:51:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"6509:3:69","nodeType":"YulIdentifier","src":"6509:3:69"},{"arguments":[{"name":"value","nativeSrc":"6530:5:69","nodeType":"YulIdentifier","src":"6530:5:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"6514:15:69","nodeType":"YulIdentifier","src":"6514:15:69"},"nativeSrc":"6514:22:69","nodeType":"YulFunctionCall","src":"6514:22:69"}],"functionName":{"name":"mstore","nativeSrc":"6502:6:69","nodeType":"YulIdentifier","src":"6502:6:69"},"nativeSrc":"6502:35:69","nodeType":"YulFunctionCall","src":"6502:35:69"},"nativeSrc":"6502:35:69","nodeType":"YulExpressionStatement","src":"6502:35:69"}]},"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"6431:112:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"6480:5:69","nodeType":"YulTypedName","src":"6480:5:69","type":""},{"name":"pos","nativeSrc":"6487:3:69","nodeType":"YulTypedName","src":"6487:3:69","type":""}],"src":"6431:112:69"},{"body":{"nativeSrc":"6643:120:69","nodeType":"YulBlock","src":"6643:120:69","statements":[{"nativeSrc":"6653:26:69","nodeType":"YulAssignment","src":"6653:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"6665:9:69","nodeType":"YulIdentifier","src":"6665:9:69"},{"kind":"number","nativeSrc":"6676:2:69","nodeType":"YulLiteral","src":"6676:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"6661:3:69","nodeType":"YulIdentifier","src":"6661:3:69"},"nativeSrc":"6661:18:69","nodeType":"YulFunctionCall","src":"6661:18:69"},"variableNames":[{"name":"tail","nativeSrc":"6653:4:69","nodeType":"YulIdentifier","src":"6653:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"6729:6:69","nodeType":"YulIdentifier","src":"6729:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"6742:9:69","nodeType":"YulIdentifier","src":"6742:9:69"},{"kind":"number","nativeSrc":"6753:1:69","nodeType":"YulLiteral","src":"6753:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"6738:3:69","nodeType":"YulIdentifier","src":"6738:3:69"},"nativeSrc":"6738:17:69","nodeType":"YulFunctionCall","src":"6738:17:69"}],"functionName":{"name":"abi_encode_t_uint8_to_t_uint8_fromStack","nativeSrc":"6689:39:69","nodeType":"YulIdentifier","src":"6689:39:69"},"nativeSrc":"6689:67:69","nodeType":"YulFunctionCall","src":"6689:67:69"},"nativeSrc":"6689:67:69","nodeType":"YulExpressionStatement","src":"6689:67:69"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nativeSrc":"6549:214:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6615:9:69","nodeType":"YulTypedName","src":"6615:9:69","type":""},{"name":"value0","nativeSrc":"6627:6:69","nodeType":"YulTypedName","src":"6627:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"6638:4:69","nodeType":"YulTypedName","src":"6638:4:69","type":""}],"src":"6549:214:69"},{"body":{"nativeSrc":"6886:648:69","nodeType":"YulBlock","src":"6886:648:69","statements":[{"body":{"nativeSrc":"6933:83:69","nodeType":"YulBlock","src":"6933:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"6935:77:69","nodeType":"YulIdentifier","src":"6935:77:69"},"nativeSrc":"6935:79:69","nodeType":"YulFunctionCall","src":"6935:79:69"},"nativeSrc":"6935:79:69","nodeType":"YulExpressionStatement","src":"6935:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"6907:7:69","nodeType":"YulIdentifier","src":"6907:7:69"},{"name":"headStart","nativeSrc":"6916:9:69","nodeType":"YulIdentifier","src":"6916:9:69"}],"functionName":{"name":"sub","nativeSrc":"6903:3:69","nodeType":"YulIdentifier","src":"6903:3:69"},"nativeSrc":"6903:23:69","nodeType":"YulFunctionCall","src":"6903:23:69"},{"kind":"number","nativeSrc":"6928:3:69","nodeType":"YulLiteral","src":"6928:3:69","type":"","value":"128"}],"functionName":{"name":"slt","nativeSrc":"6899:3:69","nodeType":"YulIdentifier","src":"6899:3:69"},"nativeSrc":"6899:33:69","nodeType":"YulFunctionCall","src":"6899:33:69"},"nativeSrc":"6896:120:69","nodeType":"YulIf","src":"6896:120:69"},{"nativeSrc":"7026:117:69","nodeType":"YulBlock","src":"7026:117:69","statements":[{"nativeSrc":"7041:15:69","nodeType":"YulVariableDeclaration","src":"7041:15:69","value":{"kind":"number","nativeSrc":"7055:1:69","nodeType":"YulLiteral","src":"7055:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"7045:6:69","nodeType":"YulTypedName","src":"7045:6:69","type":""}]},{"nativeSrc":"7070:63:69","nodeType":"YulAssignment","src":"7070:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7105:9:69","nodeType":"YulIdentifier","src":"7105:9:69"},{"name":"offset","nativeSrc":"7116:6:69","nodeType":"YulIdentifier","src":"7116:6:69"}],"functionName":{"name":"add","nativeSrc":"7101:3:69","nodeType":"YulIdentifier","src":"7101:3:69"},"nativeSrc":"7101:22:69","nodeType":"YulFunctionCall","src":"7101:22:69"},{"name":"dataEnd","nativeSrc":"7125:7:69","nodeType":"YulIdentifier","src":"7125:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"7080:20:69","nodeType":"YulIdentifier","src":"7080:20:69"},"nativeSrc":"7080:53:69","nodeType":"YulFunctionCall","src":"7080:53:69"},"variableNames":[{"name":"value0","nativeSrc":"7070:6:69","nodeType":"YulIdentifier","src":"7070:6:69"}]}]},{"nativeSrc":"7153:118:69","nodeType":"YulBlock","src":"7153:118:69","statements":[{"nativeSrc":"7168:16:69","nodeType":"YulVariableDeclaration","src":"7168:16:69","value":{"kind":"number","nativeSrc":"7182:2:69","nodeType":"YulLiteral","src":"7182:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"7172:6:69","nodeType":"YulTypedName","src":"7172:6:69","type":""}]},{"nativeSrc":"7198:63:69","nodeType":"YulAssignment","src":"7198:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7233:9:69","nodeType":"YulIdentifier","src":"7233:9:69"},{"name":"offset","nativeSrc":"7244:6:69","nodeType":"YulIdentifier","src":"7244:6:69"}],"functionName":{"name":"add","nativeSrc":"7229:3:69","nodeType":"YulIdentifier","src":"7229:3:69"},"nativeSrc":"7229:22:69","nodeType":"YulFunctionCall","src":"7229:22:69"},{"name":"dataEnd","nativeSrc":"7253:7:69","nodeType":"YulIdentifier","src":"7253:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"7208:20:69","nodeType":"YulIdentifier","src":"7208:20:69"},"nativeSrc":"7208:53:69","nodeType":"YulFunctionCall","src":"7208:53:69"},"variableNames":[{"name":"value1","nativeSrc":"7198:6:69","nodeType":"YulIdentifier","src":"7198:6:69"}]}]},{"nativeSrc":"7281:118:69","nodeType":"YulBlock","src":"7281:118:69","statements":[{"nativeSrc":"7296:16:69","nodeType":"YulVariableDeclaration","src":"7296:16:69","value":{"kind":"number","nativeSrc":"7310:2:69","nodeType":"YulLiteral","src":"7310:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"7300:6:69","nodeType":"YulTypedName","src":"7300:6:69","type":""}]},{"nativeSrc":"7326:63:69","nodeType":"YulAssignment","src":"7326:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7361:9:69","nodeType":"YulIdentifier","src":"7361:9:69"},{"name":"offset","nativeSrc":"7372:6:69","nodeType":"YulIdentifier","src":"7372:6:69"}],"functionName":{"name":"add","nativeSrc":"7357:3:69","nodeType":"YulIdentifier","src":"7357:3:69"},"nativeSrc":"7357:22:69","nodeType":"YulFunctionCall","src":"7357:22:69"},{"name":"dataEnd","nativeSrc":"7381:7:69","nodeType":"YulIdentifier","src":"7381:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"7336:20:69","nodeType":"YulIdentifier","src":"7336:20:69"},"nativeSrc":"7336:53:69","nodeType":"YulFunctionCall","src":"7336:53:69"},"variableNames":[{"name":"value2","nativeSrc":"7326:6:69","nodeType":"YulIdentifier","src":"7326:6:69"}]}]},{"nativeSrc":"7409:118:69","nodeType":"YulBlock","src":"7409:118:69","statements":[{"nativeSrc":"7424:16:69","nodeType":"YulVariableDeclaration","src":"7424:16:69","value":{"kind":"number","nativeSrc":"7438:2:69","nodeType":"YulLiteral","src":"7438:2:69","type":"","value":"96"},"variables":[{"name":"offset","nativeSrc":"7428:6:69","nodeType":"YulTypedName","src":"7428:6:69","type":""}]},{"nativeSrc":"7454:63:69","nodeType":"YulAssignment","src":"7454:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7489:9:69","nodeType":"YulIdentifier","src":"7489:9:69"},{"name":"offset","nativeSrc":"7500:6:69","nodeType":"YulIdentifier","src":"7500:6:69"}],"functionName":{"name":"add","nativeSrc":"7485:3:69","nodeType":"YulIdentifier","src":"7485:3:69"},"nativeSrc":"7485:22:69","nodeType":"YulFunctionCall","src":"7485:22:69"},{"name":"dataEnd","nativeSrc":"7509:7:69","nodeType":"YulIdentifier","src":"7509:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"7464:20:69","nodeType":"YulIdentifier","src":"7464:20:69"},"nativeSrc":"7464:53:69","nodeType":"YulFunctionCall","src":"7464:53:69"},"variableNames":[{"name":"value3","nativeSrc":"7454:6:69","nodeType":"YulIdentifier","src":"7454:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_address","nativeSrc":"6769:765:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6832:9:69","nodeType":"YulTypedName","src":"6832:9:69","type":""},{"name":"dataEnd","nativeSrc":"6843:7:69","nodeType":"YulTypedName","src":"6843:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"6855:6:69","nodeType":"YulTypedName","src":"6855:6:69","type":""},{"name":"value1","nativeSrc":"6863:6:69","nodeType":"YulTypedName","src":"6863:6:69","type":""},{"name":"value2","nativeSrc":"6871:6:69","nodeType":"YulTypedName","src":"6871:6:69","type":""},{"name":"value3","nativeSrc":"6879:6:69","nodeType":"YulTypedName","src":"6879:6:69","type":""}],"src":"6769:765:69"},{"body":{"nativeSrc":"7572:28:69","nodeType":"YulBlock","src":"7572:28:69","statements":[{"nativeSrc":"7582:12:69","nodeType":"YulAssignment","src":"7582:12:69","value":{"name":"value","nativeSrc":"7589:5:69","nodeType":"YulIdentifier","src":"7589:5:69"},"variableNames":[{"name":"ret","nativeSrc":"7582:3:69","nodeType":"YulIdentifier","src":"7582:3:69"}]}]},"name":"identity","nativeSrc":"7540:60:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7558:5:69","nodeType":"YulTypedName","src":"7558:5:69","type":""}],"returnVariables":[{"name":"ret","nativeSrc":"7568:3:69","nodeType":"YulTypedName","src":"7568:3:69","type":""}],"src":"7540:60:69"},{"body":{"nativeSrc":"7666:82:69","nodeType":"YulBlock","src":"7666:82:69","statements":[{"nativeSrc":"7676:66:69","nodeType":"YulAssignment","src":"7676:66:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"7734:5:69","nodeType":"YulIdentifier","src":"7734:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"7716:17:69","nodeType":"YulIdentifier","src":"7716:17:69"},"nativeSrc":"7716:24:69","nodeType":"YulFunctionCall","src":"7716:24:69"}],"functionName":{"name":"identity","nativeSrc":"7707:8:69","nodeType":"YulIdentifier","src":"7707:8:69"},"nativeSrc":"7707:34:69","nodeType":"YulFunctionCall","src":"7707:34:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"7689:17:69","nodeType":"YulIdentifier","src":"7689:17:69"},"nativeSrc":"7689:53:69","nodeType":"YulFunctionCall","src":"7689:53:69"},"variableNames":[{"name":"converted","nativeSrc":"7676:9:69","nodeType":"YulIdentifier","src":"7676:9:69"}]}]},"name":"convert_t_uint160_to_t_uint160","nativeSrc":"7606:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7646:5:69","nodeType":"YulTypedName","src":"7646:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"7656:9:69","nodeType":"YulTypedName","src":"7656:9:69","type":""}],"src":"7606:142:69"},{"body":{"nativeSrc":"7814:66:69","nodeType":"YulBlock","src":"7814:66:69","statements":[{"nativeSrc":"7824:50:69","nodeType":"YulAssignment","src":"7824:50:69","value":{"arguments":[{"name":"value","nativeSrc":"7868:5:69","nodeType":"YulIdentifier","src":"7868:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_uint160","nativeSrc":"7837:30:69","nodeType":"YulIdentifier","src":"7837:30:69"},"nativeSrc":"7837:37:69","nodeType":"YulFunctionCall","src":"7837:37:69"},"variableNames":[{"name":"converted","nativeSrc":"7824:9:69","nodeType":"YulIdentifier","src":"7824:9:69"}]}]},"name":"convert_t_uint160_to_t_address","nativeSrc":"7754:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7794:5:69","nodeType":"YulTypedName","src":"7794:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"7804:9:69","nodeType":"YulTypedName","src":"7804:9:69","type":""}],"src":"7754:126:69"},{"body":{"nativeSrc":"7968:66:69","nodeType":"YulBlock","src":"7968:66:69","statements":[{"nativeSrc":"7978:50:69","nodeType":"YulAssignment","src":"7978:50:69","value":{"arguments":[{"name":"value","nativeSrc":"8022:5:69","nodeType":"YulIdentifier","src":"8022:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"7991:30:69","nodeType":"YulIdentifier","src":"7991:30:69"},"nativeSrc":"7991:37:69","nodeType":"YulFunctionCall","src":"7991:37:69"},"variableNames":[{"name":"converted","nativeSrc":"7978:9:69","nodeType":"YulIdentifier","src":"7978:9:69"}]}]},"name":"convert_t_contract$_IComptroller_$16789_to_t_address","nativeSrc":"7886:148:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7948:5:69","nodeType":"YulTypedName","src":"7948:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"7958:9:69","nodeType":"YulTypedName","src":"7958:9:69","type":""}],"src":"7886:148:69"},{"body":{"nativeSrc":"8127:88:69","nodeType":"YulBlock","src":"8127:88:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"8144:3:69","nodeType":"YulIdentifier","src":"8144:3:69"},{"arguments":[{"name":"value","nativeSrc":"8202:5:69","nodeType":"YulIdentifier","src":"8202:5:69"}],"functionName":{"name":"convert_t_contract$_IComptroller_$16789_to_t_address","nativeSrc":"8149:52:69","nodeType":"YulIdentifier","src":"8149:52:69"},"nativeSrc":"8149:59:69","nodeType":"YulFunctionCall","src":"8149:59:69"}],"functionName":{"name":"mstore","nativeSrc":"8137:6:69","nodeType":"YulIdentifier","src":"8137:6:69"},"nativeSrc":"8137:72:69","nodeType":"YulFunctionCall","src":"8137:72:69"},"nativeSrc":"8137:72:69","nodeType":"YulExpressionStatement","src":"8137:72:69"}]},"name":"abi_encode_t_contract$_IComptroller_$16789_to_t_address_fromStack","nativeSrc":"8040:175:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"8115:5:69","nodeType":"YulTypedName","src":"8115:5:69","type":""},{"name":"pos","nativeSrc":"8122:3:69","nodeType":"YulTypedName","src":"8122:3:69","type":""}],"src":"8040:175:69"},{"body":{"nativeSrc":"8341:146:69","nodeType":"YulBlock","src":"8341:146:69","statements":[{"nativeSrc":"8351:26:69","nodeType":"YulAssignment","src":"8351:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"8363:9:69","nodeType":"YulIdentifier","src":"8363:9:69"},{"kind":"number","nativeSrc":"8374:2:69","nodeType":"YulLiteral","src":"8374:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8359:3:69","nodeType":"YulIdentifier","src":"8359:3:69"},"nativeSrc":"8359:18:69","nodeType":"YulFunctionCall","src":"8359:18:69"},"variableNames":[{"name":"tail","nativeSrc":"8351:4:69","nodeType":"YulIdentifier","src":"8351:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"8453:6:69","nodeType":"YulIdentifier","src":"8453:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"8466:9:69","nodeType":"YulIdentifier","src":"8466:9:69"},{"kind":"number","nativeSrc":"8477:1:69","nodeType":"YulLiteral","src":"8477:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"8462:3:69","nodeType":"YulIdentifier","src":"8462:3:69"},"nativeSrc":"8462:17:69","nodeType":"YulFunctionCall","src":"8462:17:69"}],"functionName":{"name":"abi_encode_t_contract$_IComptroller_$16789_to_t_address_fromStack","nativeSrc":"8387:65:69","nodeType":"YulIdentifier","src":"8387:65:69"},"nativeSrc":"8387:93:69","nodeType":"YulFunctionCall","src":"8387:93:69"},"nativeSrc":"8387:93:69","nodeType":"YulExpressionStatement","src":"8387:93:69"}]},"name":"abi_encode_tuple_t_contract$_IComptroller_$16789__to_t_address__fromStack_reversed","nativeSrc":"8221:266:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8313:9:69","nodeType":"YulTypedName","src":"8313:9:69","type":""},{"name":"value0","nativeSrc":"8325:6:69","nodeType":"YulTypedName","src":"8325:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"8336:4:69","nodeType":"YulTypedName","src":"8336:4:69","type":""}],"src":"8221:266:69"},{"body":{"nativeSrc":"8576:391:69","nodeType":"YulBlock","src":"8576:391:69","statements":[{"body":{"nativeSrc":"8622:83:69","nodeType":"YulBlock","src":"8622:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"8624:77:69","nodeType":"YulIdentifier","src":"8624:77:69"},"nativeSrc":"8624:79:69","nodeType":"YulFunctionCall","src":"8624:79:69"},"nativeSrc":"8624:79:69","nodeType":"YulExpressionStatement","src":"8624:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"8597:7:69","nodeType":"YulIdentifier","src":"8597:7:69"},{"name":"headStart","nativeSrc":"8606:9:69","nodeType":"YulIdentifier","src":"8606:9:69"}],"functionName":{"name":"sub","nativeSrc":"8593:3:69","nodeType":"YulIdentifier","src":"8593:3:69"},"nativeSrc":"8593:23:69","nodeType":"YulFunctionCall","src":"8593:23:69"},{"kind":"number","nativeSrc":"8618:2:69","nodeType":"YulLiteral","src":"8618:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"8589:3:69","nodeType":"YulIdentifier","src":"8589:3:69"},"nativeSrc":"8589:32:69","nodeType":"YulFunctionCall","src":"8589:32:69"},"nativeSrc":"8586:119:69","nodeType":"YulIf","src":"8586:119:69"},{"nativeSrc":"8715:117:69","nodeType":"YulBlock","src":"8715:117:69","statements":[{"nativeSrc":"8730:15:69","nodeType":"YulVariableDeclaration","src":"8730:15:69","value":{"kind":"number","nativeSrc":"8744:1:69","nodeType":"YulLiteral","src":"8744:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"8734:6:69","nodeType":"YulTypedName","src":"8734:6:69","type":""}]},{"nativeSrc":"8759:63:69","nodeType":"YulAssignment","src":"8759:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8794:9:69","nodeType":"YulIdentifier","src":"8794:9:69"},{"name":"offset","nativeSrc":"8805:6:69","nodeType":"YulIdentifier","src":"8805:6:69"}],"functionName":{"name":"add","nativeSrc":"8790:3:69","nodeType":"YulIdentifier","src":"8790:3:69"},"nativeSrc":"8790:22:69","nodeType":"YulFunctionCall","src":"8790:22:69"},{"name":"dataEnd","nativeSrc":"8814:7:69","nodeType":"YulIdentifier","src":"8814:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"8769:20:69","nodeType":"YulIdentifier","src":"8769:20:69"},"nativeSrc":"8769:53:69","nodeType":"YulFunctionCall","src":"8769:53:69"},"variableNames":[{"name":"value0","nativeSrc":"8759:6:69","nodeType":"YulIdentifier","src":"8759:6:69"}]}]},{"nativeSrc":"8842:118:69","nodeType":"YulBlock","src":"8842:118:69","statements":[{"nativeSrc":"8857:16:69","nodeType":"YulVariableDeclaration","src":"8857:16:69","value":{"kind":"number","nativeSrc":"8871:2:69","nodeType":"YulLiteral","src":"8871:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"8861:6:69","nodeType":"YulTypedName","src":"8861:6:69","type":""}]},{"nativeSrc":"8887:63:69","nodeType":"YulAssignment","src":"8887:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8922:9:69","nodeType":"YulIdentifier","src":"8922:9:69"},{"name":"offset","nativeSrc":"8933:6:69","nodeType":"YulIdentifier","src":"8933:6:69"}],"functionName":{"name":"add","nativeSrc":"8918:3:69","nodeType":"YulIdentifier","src":"8918:3:69"},"nativeSrc":"8918:22:69","nodeType":"YulFunctionCall","src":"8918:22:69"},{"name":"dataEnd","nativeSrc":"8942:7:69","nodeType":"YulIdentifier","src":"8942:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"8897:20:69","nodeType":"YulIdentifier","src":"8897:20:69"},"nativeSrc":"8897:53:69","nodeType":"YulFunctionCall","src":"8897:53:69"},"variableNames":[{"name":"value1","nativeSrc":"8887:6:69","nodeType":"YulIdentifier","src":"8887:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint256t_address","nativeSrc":"8493:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8538:9:69","nodeType":"YulTypedName","src":"8538:9:69","type":""},{"name":"dataEnd","nativeSrc":"8549:7:69","nodeType":"YulTypedName","src":"8549:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"8561:6:69","nodeType":"YulTypedName","src":"8561:6:69","type":""},{"name":"value1","nativeSrc":"8569:6:69","nodeType":"YulTypedName","src":"8569:6:69","type":""}],"src":"8493:474:69"},{"body":{"nativeSrc":"9049:66:69","nodeType":"YulBlock","src":"9049:66:69","statements":[{"nativeSrc":"9059:50:69","nodeType":"YulAssignment","src":"9059:50:69","value":{"arguments":[{"name":"value","nativeSrc":"9103:5:69","nodeType":"YulIdentifier","src":"9103:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"9072:30:69","nodeType":"YulIdentifier","src":"9072:30:69"},"nativeSrc":"9072:37:69","nodeType":"YulFunctionCall","src":"9072:37:69"},"variableNames":[{"name":"converted","nativeSrc":"9059:9:69","nodeType":"YulIdentifier","src":"9059:9:69"}]}]},"name":"convert_t_contract$_VToken_$15506_to_t_address","nativeSrc":"8973:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"9029:5:69","nodeType":"YulTypedName","src":"9029:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"9039:9:69","nodeType":"YulTypedName","src":"9039:9:69","type":""}],"src":"8973:142:69"},{"body":{"nativeSrc":"9202:82:69","nodeType":"YulBlock","src":"9202:82:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"9219:3:69","nodeType":"YulIdentifier","src":"9219:3:69"},{"arguments":[{"name":"value","nativeSrc":"9271:5:69","nodeType":"YulIdentifier","src":"9271:5:69"}],"functionName":{"name":"convert_t_contract$_VToken_$15506_to_t_address","nativeSrc":"9224:46:69","nodeType":"YulIdentifier","src":"9224:46:69"},"nativeSrc":"9224:53:69","nodeType":"YulFunctionCall","src":"9224:53:69"}],"functionName":{"name":"mstore","nativeSrc":"9212:6:69","nodeType":"YulIdentifier","src":"9212:6:69"},"nativeSrc":"9212:66:69","nodeType":"YulFunctionCall","src":"9212:66:69"},"nativeSrc":"9212:66:69","nodeType":"YulExpressionStatement","src":"9212:66:69"}]},"name":"abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack","nativeSrc":"9121:163:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"9190:5:69","nodeType":"YulTypedName","src":"9190:5:69","type":""},{"name":"pos","nativeSrc":"9197:3:69","nodeType":"YulTypedName","src":"9197:3:69","type":""}],"src":"9121:163:69"},{"body":{"nativeSrc":"9404:140:69","nodeType":"YulBlock","src":"9404:140:69","statements":[{"nativeSrc":"9414:26:69","nodeType":"YulAssignment","src":"9414:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"9426:9:69","nodeType":"YulIdentifier","src":"9426:9:69"},{"kind":"number","nativeSrc":"9437:2:69","nodeType":"YulLiteral","src":"9437:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"9422:3:69","nodeType":"YulIdentifier","src":"9422:3:69"},"nativeSrc":"9422:18:69","nodeType":"YulFunctionCall","src":"9422:18:69"},"variableNames":[{"name":"tail","nativeSrc":"9414:4:69","nodeType":"YulIdentifier","src":"9414:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"9510:6:69","nodeType":"YulIdentifier","src":"9510:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"9523:9:69","nodeType":"YulIdentifier","src":"9523:9:69"},{"kind":"number","nativeSrc":"9534:1:69","nodeType":"YulLiteral","src":"9534:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"9519:3:69","nodeType":"YulIdentifier","src":"9519:3:69"},"nativeSrc":"9519:17:69","nodeType":"YulFunctionCall","src":"9519:17:69"}],"functionName":{"name":"abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack","nativeSrc":"9450:59:69","nodeType":"YulIdentifier","src":"9450:59:69"},"nativeSrc":"9450:87:69","nodeType":"YulFunctionCall","src":"9450:87:69"},"nativeSrc":"9450:87:69","nodeType":"YulExpressionStatement","src":"9450:87:69"}]},"name":"abi_encode_tuple_t_contract$_VToken_$15506__to_t_address__fromStack_reversed","nativeSrc":"9290:254:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"9376:9:69","nodeType":"YulTypedName","src":"9376:9:69","type":""},{"name":"value0","nativeSrc":"9388:6:69","nodeType":"YulTypedName","src":"9388:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"9399:4:69","nodeType":"YulTypedName","src":"9399:4:69","type":""}],"src":"9290:254:69"},{"body":{"nativeSrc":"9650:519:69","nodeType":"YulBlock","src":"9650:519:69","statements":[{"body":{"nativeSrc":"9696:83:69","nodeType":"YulBlock","src":"9696:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"9698:77:69","nodeType":"YulIdentifier","src":"9698:77:69"},"nativeSrc":"9698:79:69","nodeType":"YulFunctionCall","src":"9698:79:69"},"nativeSrc":"9698:79:69","nodeType":"YulExpressionStatement","src":"9698:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"9671:7:69","nodeType":"YulIdentifier","src":"9671:7:69"},{"name":"headStart","nativeSrc":"9680:9:69","nodeType":"YulIdentifier","src":"9680:9:69"}],"functionName":{"name":"sub","nativeSrc":"9667:3:69","nodeType":"YulIdentifier","src":"9667:3:69"},"nativeSrc":"9667:23:69","nodeType":"YulFunctionCall","src":"9667:23:69"},{"kind":"number","nativeSrc":"9692:2:69","nodeType":"YulLiteral","src":"9692:2:69","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"9663:3:69","nodeType":"YulIdentifier","src":"9663:3:69"},"nativeSrc":"9663:32:69","nodeType":"YulFunctionCall","src":"9663:32:69"},"nativeSrc":"9660:119:69","nodeType":"YulIf","src":"9660:119:69"},{"nativeSrc":"9789:117:69","nodeType":"YulBlock","src":"9789:117:69","statements":[{"nativeSrc":"9804:15:69","nodeType":"YulVariableDeclaration","src":"9804:15:69","value":{"kind":"number","nativeSrc":"9818:1:69","nodeType":"YulLiteral","src":"9818:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"9808:6:69","nodeType":"YulTypedName","src":"9808:6:69","type":""}]},{"nativeSrc":"9833:63:69","nodeType":"YulAssignment","src":"9833:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"9868:9:69","nodeType":"YulIdentifier","src":"9868:9:69"},{"name":"offset","nativeSrc":"9879:6:69","nodeType":"YulIdentifier","src":"9879:6:69"}],"functionName":{"name":"add","nativeSrc":"9864:3:69","nodeType":"YulIdentifier","src":"9864:3:69"},"nativeSrc":"9864:22:69","nodeType":"YulFunctionCall","src":"9864:22:69"},{"name":"dataEnd","nativeSrc":"9888:7:69","nodeType":"YulIdentifier","src":"9888:7:69"}],"functionName":{"name":"abi_decode_t_uint256","nativeSrc":"9843:20:69","nodeType":"YulIdentifier","src":"9843:20:69"},"nativeSrc":"9843:53:69","nodeType":"YulFunctionCall","src":"9843:53:69"},"variableNames":[{"name":"value0","nativeSrc":"9833:6:69","nodeType":"YulIdentifier","src":"9833:6:69"}]}]},{"nativeSrc":"9916:118:69","nodeType":"YulBlock","src":"9916:118:69","statements":[{"nativeSrc":"9931:16:69","nodeType":"YulVariableDeclaration","src":"9931:16:69","value":{"kind":"number","nativeSrc":"9945:2:69","nodeType":"YulLiteral","src":"9945:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"9935:6:69","nodeType":"YulTypedName","src":"9935:6:69","type":""}]},{"nativeSrc":"9961:63:69","nodeType":"YulAssignment","src":"9961:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"9996:9:69","nodeType":"YulIdentifier","src":"9996:9:69"},{"name":"offset","nativeSrc":"10007:6:69","nodeType":"YulIdentifier","src":"10007:6:69"}],"functionName":{"name":"add","nativeSrc":"9992:3:69","nodeType":"YulIdentifier","src":"9992:3:69"},"nativeSrc":"9992:22:69","nodeType":"YulFunctionCall","src":"9992:22:69"},{"name":"dataEnd","nativeSrc":"10016:7:69","nodeType":"YulIdentifier","src":"10016:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"9971:20:69","nodeType":"YulIdentifier","src":"9971:20:69"},"nativeSrc":"9971:53:69","nodeType":"YulFunctionCall","src":"9971:53:69"},"variableNames":[{"name":"value1","nativeSrc":"9961:6:69","nodeType":"YulIdentifier","src":"9961:6:69"}]}]},{"nativeSrc":"10044:118:69","nodeType":"YulBlock","src":"10044:118:69","statements":[{"nativeSrc":"10059:16:69","nodeType":"YulVariableDeclaration","src":"10059:16:69","value":{"kind":"number","nativeSrc":"10073:2:69","nodeType":"YulLiteral","src":"10073:2:69","type":"","value":"64"},"variables":[{"name":"offset","nativeSrc":"10063:6:69","nodeType":"YulTypedName","src":"10063:6:69","type":""}]},{"nativeSrc":"10089:63:69","nodeType":"YulAssignment","src":"10089:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10124:9:69","nodeType":"YulIdentifier","src":"10124:9:69"},{"name":"offset","nativeSrc":"10135:6:69","nodeType":"YulIdentifier","src":"10135:6:69"}],"functionName":{"name":"add","nativeSrc":"10120:3:69","nodeType":"YulIdentifier","src":"10120:3:69"},"nativeSrc":"10120:22:69","nodeType":"YulFunctionCall","src":"10120:22:69"},{"name":"dataEnd","nativeSrc":"10144:7:69","nodeType":"YulIdentifier","src":"10144:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"10099:20:69","nodeType":"YulIdentifier","src":"10099:20:69"},"nativeSrc":"10099:53:69","nodeType":"YulFunctionCall","src":"10099:53:69"},"variableNames":[{"name":"value2","nativeSrc":"10089:6:69","nodeType":"YulIdentifier","src":"10089:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint256t_addresst_address","nativeSrc":"9550:619:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"9604:9:69","nodeType":"YulTypedName","src":"9604:9:69","type":""},{"name":"dataEnd","nativeSrc":"9615:7:69","nodeType":"YulTypedName","src":"9615:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"9627:6:69","nodeType":"YulTypedName","src":"9627:6:69","type":""},{"name":"value1","nativeSrc":"9635:6:69","nodeType":"YulTypedName","src":"9635:6:69","type":""},{"name":"value2","nativeSrc":"9643:6:69","nodeType":"YulTypedName","src":"9643:6:69","type":""}],"src":"9550:619:69"},{"body":{"nativeSrc":"10267:66:69","nodeType":"YulBlock","src":"10267:66:69","statements":[{"nativeSrc":"10277:50:69","nodeType":"YulAssignment","src":"10277:50:69","value":{"arguments":[{"name":"value","nativeSrc":"10321:5:69","nodeType":"YulIdentifier","src":"10321:5:69"}],"functionName":{"name":"convert_t_uint160_to_t_address","nativeSrc":"10290:30:69","nodeType":"YulIdentifier","src":"10290:30:69"},"nativeSrc":"10290:37:69","nodeType":"YulFunctionCall","src":"10290:37:69"},"variableNames":[{"name":"converted","nativeSrc":"10277:9:69","nodeType":"YulIdentifier","src":"10277:9:69"}]}]},"name":"convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address","nativeSrc":"10175:158:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"10247:5:69","nodeType":"YulTypedName","src":"10247:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"10257:9:69","nodeType":"YulTypedName","src":"10257:9:69","type":""}],"src":"10175:158:69"},{"body":{"nativeSrc":"10436:98:69","nodeType":"YulBlock","src":"10436:98:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"10453:3:69","nodeType":"YulIdentifier","src":"10453:3:69"},{"arguments":[{"name":"value","nativeSrc":"10521:5:69","nodeType":"YulIdentifier","src":"10521:5:69"}],"functionName":{"name":"convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address","nativeSrc":"10458:62:69","nodeType":"YulIdentifier","src":"10458:62:69"},"nativeSrc":"10458:69:69","nodeType":"YulFunctionCall","src":"10458:69:69"}],"functionName":{"name":"mstore","nativeSrc":"10446:6:69","nodeType":"YulIdentifier","src":"10446:6:69"},"nativeSrc":"10446:82:69","nodeType":"YulFunctionCall","src":"10446:82:69"},"nativeSrc":"10446:82:69","nodeType":"YulExpressionStatement","src":"10446:82:69"}]},"name":"abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack","nativeSrc":"10339:195:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"10424:5:69","nodeType":"YulTypedName","src":"10424:5:69","type":""},{"name":"pos","nativeSrc":"10431:3:69","nodeType":"YulTypedName","src":"10431:3:69","type":""}],"src":"10339:195:69"},{"body":{"nativeSrc":"10670:156:69","nodeType":"YulBlock","src":"10670:156:69","statements":[{"nativeSrc":"10680:26:69","nodeType":"YulAssignment","src":"10680:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"10692:9:69","nodeType":"YulIdentifier","src":"10692:9:69"},{"kind":"number","nativeSrc":"10703:2:69","nodeType":"YulLiteral","src":"10703:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"10688:3:69","nodeType":"YulIdentifier","src":"10688:3:69"},"nativeSrc":"10688:18:69","nodeType":"YulFunctionCall","src":"10688:18:69"},"variableNames":[{"name":"tail","nativeSrc":"10680:4:69","nodeType":"YulIdentifier","src":"10680:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"10792:6:69","nodeType":"YulIdentifier","src":"10792:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"10805:9:69","nodeType":"YulIdentifier","src":"10805:9:69"},{"kind":"number","nativeSrc":"10816:1:69","nodeType":"YulLiteral","src":"10816:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"10801:3:69","nodeType":"YulIdentifier","src":"10801:3:69"},"nativeSrc":"10801:17:69","nodeType":"YulFunctionCall","src":"10801:17:69"}],"functionName":{"name":"abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack","nativeSrc":"10716:75:69","nodeType":"YulIdentifier","src":"10716:75:69"},"nativeSrc":"10716:103:69","nodeType":"YulFunctionCall","src":"10716:103:69"},"nativeSrc":"10716:103:69","nodeType":"YulExpressionStatement","src":"10716:103:69"}]},"name":"abi_encode_tuple_t_contract$_IAccessControlManagerV8_$5080__to_t_address__fromStack_reversed","nativeSrc":"10540:286:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"10642:9:69","nodeType":"YulTypedName","src":"10642:9:69","type":""},{"name":"value0","nativeSrc":"10654:6:69","nodeType":"YulTypedName","src":"10654:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"10665:4:69","nodeType":"YulTypedName","src":"10665:4:69","type":""}],"src":"10540:286:69"},{"body":{"nativeSrc":"10915:391:69","nodeType":"YulBlock","src":"10915:391:69","statements":[{"body":{"nativeSrc":"10961:83:69","nodeType":"YulBlock","src":"10961:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"10963:77:69","nodeType":"YulIdentifier","src":"10963:77:69"},"nativeSrc":"10963:79:69","nodeType":"YulFunctionCall","src":"10963:79:69"},"nativeSrc":"10963:79:69","nodeType":"YulExpressionStatement","src":"10963:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"10936:7:69","nodeType":"YulIdentifier","src":"10936:7:69"},{"name":"headStart","nativeSrc":"10945:9:69","nodeType":"YulIdentifier","src":"10945:9:69"}],"functionName":{"name":"sub","nativeSrc":"10932:3:69","nodeType":"YulIdentifier","src":"10932:3:69"},"nativeSrc":"10932:23:69","nodeType":"YulFunctionCall","src":"10932:23:69"},{"kind":"number","nativeSrc":"10957:2:69","nodeType":"YulLiteral","src":"10957:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"10928:3:69","nodeType":"YulIdentifier","src":"10928:3:69"},"nativeSrc":"10928:32:69","nodeType":"YulFunctionCall","src":"10928:32:69"},"nativeSrc":"10925:119:69","nodeType":"YulIf","src":"10925:119:69"},{"nativeSrc":"11054:117:69","nodeType":"YulBlock","src":"11054:117:69","statements":[{"nativeSrc":"11069:15:69","nodeType":"YulVariableDeclaration","src":"11069:15:69","value":{"kind":"number","nativeSrc":"11083:1:69","nodeType":"YulLiteral","src":"11083:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"11073:6:69","nodeType":"YulTypedName","src":"11073:6:69","type":""}]},{"nativeSrc":"11098:63:69","nodeType":"YulAssignment","src":"11098:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"11133:9:69","nodeType":"YulIdentifier","src":"11133:9:69"},{"name":"offset","nativeSrc":"11144:6:69","nodeType":"YulIdentifier","src":"11144:6:69"}],"functionName":{"name":"add","nativeSrc":"11129:3:69","nodeType":"YulIdentifier","src":"11129:3:69"},"nativeSrc":"11129:22:69","nodeType":"YulFunctionCall","src":"11129:22:69"},{"name":"dataEnd","nativeSrc":"11153:7:69","nodeType":"YulIdentifier","src":"11153:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"11108:20:69","nodeType":"YulIdentifier","src":"11108:20:69"},"nativeSrc":"11108:53:69","nodeType":"YulFunctionCall","src":"11108:53:69"},"variableNames":[{"name":"value0","nativeSrc":"11098:6:69","nodeType":"YulIdentifier","src":"11098:6:69"}]}]},{"nativeSrc":"11181:118:69","nodeType":"YulBlock","src":"11181:118:69","statements":[{"nativeSrc":"11196:16:69","nodeType":"YulVariableDeclaration","src":"11196:16:69","value":{"kind":"number","nativeSrc":"11210:2:69","nodeType":"YulLiteral","src":"11210:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"11200:6:69","nodeType":"YulTypedName","src":"11200:6:69","type":""}]},{"nativeSrc":"11226:63:69","nodeType":"YulAssignment","src":"11226:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"11261:9:69","nodeType":"YulIdentifier","src":"11261:9:69"},{"name":"offset","nativeSrc":"11272:6:69","nodeType":"YulIdentifier","src":"11272:6:69"}],"functionName":{"name":"add","nativeSrc":"11257:3:69","nodeType":"YulIdentifier","src":"11257:3:69"},"nativeSrc":"11257:22:69","nodeType":"YulFunctionCall","src":"11257:22:69"},{"name":"dataEnd","nativeSrc":"11281:7:69","nodeType":"YulIdentifier","src":"11281:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"11236:20:69","nodeType":"YulIdentifier","src":"11236:20:69"},"nativeSrc":"11236:53:69","nodeType":"YulFunctionCall","src":"11236:53:69"},"variableNames":[{"name":"value1","nativeSrc":"11226:6:69","nodeType":"YulIdentifier","src":"11226:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_address","nativeSrc":"10832:474:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"10877:9:69","nodeType":"YulTypedName","src":"10877:9:69","type":""},{"name":"dataEnd","nativeSrc":"10888:7:69","nodeType":"YulTypedName","src":"10888:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"10900:6:69","nodeType":"YulTypedName","src":"10900:6:69","type":""},{"name":"value1","nativeSrc":"10908:6:69","nodeType":"YulTypedName","src":"10908:6:69","type":""}],"src":"10832:474:69"},{"body":{"nativeSrc":"11340:152:69","nodeType":"YulBlock","src":"11340:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"11357:1:69","nodeType":"YulLiteral","src":"11357:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"11360:77:69","nodeType":"YulLiteral","src":"11360:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"11350:6:69","nodeType":"YulIdentifier","src":"11350:6:69"},"nativeSrc":"11350:88:69","nodeType":"YulFunctionCall","src":"11350:88:69"},"nativeSrc":"11350:88:69","nodeType":"YulExpressionStatement","src":"11350:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"11454:1:69","nodeType":"YulLiteral","src":"11454:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"11457:4:69","nodeType":"YulLiteral","src":"11457:4:69","type":"","value":"0x22"}],"functionName":{"name":"mstore","nativeSrc":"11447:6:69","nodeType":"YulIdentifier","src":"11447:6:69"},"nativeSrc":"11447:15:69","nodeType":"YulFunctionCall","src":"11447:15:69"},"nativeSrc":"11447:15:69","nodeType":"YulExpressionStatement","src":"11447:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"11478:1:69","nodeType":"YulLiteral","src":"11478:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"11481:4:69","nodeType":"YulLiteral","src":"11481:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"11471:6:69","nodeType":"YulIdentifier","src":"11471:6:69"},"nativeSrc":"11471:15:69","nodeType":"YulFunctionCall","src":"11471:15:69"},"nativeSrc":"11471:15:69","nodeType":"YulExpressionStatement","src":"11471:15:69"}]},"name":"panic_error_0x22","nativeSrc":"11312:180:69","nodeType":"YulFunctionDefinition","src":"11312:180:69"},{"body":{"nativeSrc":"11549:269:69","nodeType":"YulBlock","src":"11549:269:69","statements":[{"nativeSrc":"11559:22:69","nodeType":"YulAssignment","src":"11559:22:69","value":{"arguments":[{"name":"data","nativeSrc":"11573:4:69","nodeType":"YulIdentifier","src":"11573:4:69"},{"kind":"number","nativeSrc":"11579:1:69","nodeType":"YulLiteral","src":"11579:1:69","type":"","value":"2"}],"functionName":{"name":"div","nativeSrc":"11569:3:69","nodeType":"YulIdentifier","src":"11569:3:69"},"nativeSrc":"11569:12:69","nodeType":"YulFunctionCall","src":"11569:12:69"},"variableNames":[{"name":"length","nativeSrc":"11559:6:69","nodeType":"YulIdentifier","src":"11559:6:69"}]},{"nativeSrc":"11590:38:69","nodeType":"YulVariableDeclaration","src":"11590:38:69","value":{"arguments":[{"name":"data","nativeSrc":"11620:4:69","nodeType":"YulIdentifier","src":"11620:4:69"},{"kind":"number","nativeSrc":"11626:1:69","nodeType":"YulLiteral","src":"11626:1:69","type":"","value":"1"}],"functionName":{"name":"and","nativeSrc":"11616:3:69","nodeType":"YulIdentifier","src":"11616:3:69"},"nativeSrc":"11616:12:69","nodeType":"YulFunctionCall","src":"11616:12:69"},"variables":[{"name":"outOfPlaceEncoding","nativeSrc":"11594:18:69","nodeType":"YulTypedName","src":"11594:18:69","type":""}]},{"body":{"nativeSrc":"11667:51:69","nodeType":"YulBlock","src":"11667:51:69","statements":[{"nativeSrc":"11681:27:69","nodeType":"YulAssignment","src":"11681:27:69","value":{"arguments":[{"name":"length","nativeSrc":"11695:6:69","nodeType":"YulIdentifier","src":"11695:6:69"},{"kind":"number","nativeSrc":"11703:4:69","nodeType":"YulLiteral","src":"11703:4:69","type":"","value":"0x7f"}],"functionName":{"name":"and","nativeSrc":"11691:3:69","nodeType":"YulIdentifier","src":"11691:3:69"},"nativeSrc":"11691:17:69","nodeType":"YulFunctionCall","src":"11691:17:69"},"variableNames":[{"name":"length","nativeSrc":"11681:6:69","nodeType":"YulIdentifier","src":"11681:6:69"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nativeSrc":"11647:18:69","nodeType":"YulIdentifier","src":"11647:18:69"}],"functionName":{"name":"iszero","nativeSrc":"11640:6:69","nodeType":"YulIdentifier","src":"11640:6:69"},"nativeSrc":"11640:26:69","nodeType":"YulFunctionCall","src":"11640:26:69"},"nativeSrc":"11637:81:69","nodeType":"YulIf","src":"11637:81:69"},{"body":{"nativeSrc":"11770:42:69","nodeType":"YulBlock","src":"11770:42:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x22","nativeSrc":"11784:16:69","nodeType":"YulIdentifier","src":"11784:16:69"},"nativeSrc":"11784:18:69","nodeType":"YulFunctionCall","src":"11784:18:69"},"nativeSrc":"11784:18:69","nodeType":"YulExpressionStatement","src":"11784:18:69"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nativeSrc":"11734:18:69","nodeType":"YulIdentifier","src":"11734:18:69"},{"arguments":[{"name":"length","nativeSrc":"11757:6:69","nodeType":"YulIdentifier","src":"11757:6:69"},{"kind":"number","nativeSrc":"11765:2:69","nodeType":"YulLiteral","src":"11765:2:69","type":"","value":"32"}],"functionName":{"name":"lt","nativeSrc":"11754:2:69","nodeType":"YulIdentifier","src":"11754:2:69"},"nativeSrc":"11754:14:69","nodeType":"YulFunctionCall","src":"11754:14:69"}],"functionName":{"name":"eq","nativeSrc":"11731:2:69","nodeType":"YulIdentifier","src":"11731:2:69"},"nativeSrc":"11731:38:69","nodeType":"YulFunctionCall","src":"11731:38:69"},"nativeSrc":"11728:84:69","nodeType":"YulIf","src":"11728:84:69"}]},"name":"extract_byte_array_length","nativeSrc":"11498:320:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nativeSrc":"11533:4:69","nodeType":"YulTypedName","src":"11533:4:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"11542:6:69","nodeType":"YulTypedName","src":"11542:6:69","type":""}],"src":"11498:320:69"},{"body":{"nativeSrc":"11887:80:69","nodeType":"YulBlock","src":"11887:80:69","statements":[{"nativeSrc":"11897:22:69","nodeType":"YulAssignment","src":"11897:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"11912:6:69","nodeType":"YulIdentifier","src":"11912:6:69"}],"functionName":{"name":"mload","nativeSrc":"11906:5:69","nodeType":"YulIdentifier","src":"11906:5:69"},"nativeSrc":"11906:13:69","nodeType":"YulFunctionCall","src":"11906:13:69"},"variableNames":[{"name":"value","nativeSrc":"11897:5:69","nodeType":"YulIdentifier","src":"11897:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"11955:5:69","nodeType":"YulIdentifier","src":"11955:5:69"}],"functionName":{"name":"validator_revert_t_uint256","nativeSrc":"11928:26:69","nodeType":"YulIdentifier","src":"11928:26:69"},"nativeSrc":"11928:33:69","nodeType":"YulFunctionCall","src":"11928:33:69"},"nativeSrc":"11928:33:69","nodeType":"YulExpressionStatement","src":"11928:33:69"}]},"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"11824:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"11865:6:69","nodeType":"YulTypedName","src":"11865:6:69","type":""},{"name":"end","nativeSrc":"11873:3:69","nodeType":"YulTypedName","src":"11873:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"11881:5:69","nodeType":"YulTypedName","src":"11881:5:69","type":""}],"src":"11824:143:69"},{"body":{"nativeSrc":"12050:274:69","nodeType":"YulBlock","src":"12050:274:69","statements":[{"body":{"nativeSrc":"12096:83:69","nodeType":"YulBlock","src":"12096:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"12098:77:69","nodeType":"YulIdentifier","src":"12098:77:69"},"nativeSrc":"12098:79:69","nodeType":"YulFunctionCall","src":"12098:79:69"},"nativeSrc":"12098:79:69","nodeType":"YulExpressionStatement","src":"12098:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"12071:7:69","nodeType":"YulIdentifier","src":"12071:7:69"},{"name":"headStart","nativeSrc":"12080:9:69","nodeType":"YulIdentifier","src":"12080:9:69"}],"functionName":{"name":"sub","nativeSrc":"12067:3:69","nodeType":"YulIdentifier","src":"12067:3:69"},"nativeSrc":"12067:23:69","nodeType":"YulFunctionCall","src":"12067:23:69"},{"kind":"number","nativeSrc":"12092:2:69","nodeType":"YulLiteral","src":"12092:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"12063:3:69","nodeType":"YulIdentifier","src":"12063:3:69"},"nativeSrc":"12063:32:69","nodeType":"YulFunctionCall","src":"12063:32:69"},"nativeSrc":"12060:119:69","nodeType":"YulIf","src":"12060:119:69"},{"nativeSrc":"12189:128:69","nodeType":"YulBlock","src":"12189:128:69","statements":[{"nativeSrc":"12204:15:69","nodeType":"YulVariableDeclaration","src":"12204:15:69","value":{"kind":"number","nativeSrc":"12218:1:69","nodeType":"YulLiteral","src":"12218:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"12208:6:69","nodeType":"YulTypedName","src":"12208:6:69","type":""}]},{"nativeSrc":"12233:74:69","nodeType":"YulAssignment","src":"12233:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"12279:9:69","nodeType":"YulIdentifier","src":"12279:9:69"},{"name":"offset","nativeSrc":"12290:6:69","nodeType":"YulIdentifier","src":"12290:6:69"}],"functionName":{"name":"add","nativeSrc":"12275:3:69","nodeType":"YulIdentifier","src":"12275:3:69"},"nativeSrc":"12275:22:69","nodeType":"YulFunctionCall","src":"12275:22:69"},{"name":"dataEnd","nativeSrc":"12299:7:69","nodeType":"YulIdentifier","src":"12299:7:69"}],"functionName":{"name":"abi_decode_t_uint256_fromMemory","nativeSrc":"12243:31:69","nodeType":"YulIdentifier","src":"12243:31:69"},"nativeSrc":"12243:64:69","nodeType":"YulFunctionCall","src":"12243:64:69"},"variableNames":[{"name":"value0","nativeSrc":"12233:6:69","nodeType":"YulIdentifier","src":"12233:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nativeSrc":"11973:351:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"12020:9:69","nodeType":"YulTypedName","src":"12020:9:69","type":""},{"name":"dataEnd","nativeSrc":"12031:7:69","nodeType":"YulTypedName","src":"12031:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"12043:6:69","nodeType":"YulTypedName","src":"12043:6:69","type":""}],"src":"11973:351:69"},{"body":{"nativeSrc":"12358:152:69","nodeType":"YulBlock","src":"12358:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"12375:1:69","nodeType":"YulLiteral","src":"12375:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"12378:77:69","nodeType":"YulLiteral","src":"12378:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"12368:6:69","nodeType":"YulIdentifier","src":"12368:6:69"},"nativeSrc":"12368:88:69","nodeType":"YulFunctionCall","src":"12368:88:69"},"nativeSrc":"12368:88:69","nodeType":"YulExpressionStatement","src":"12368:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"12472:1:69","nodeType":"YulLiteral","src":"12472:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"12475:4:69","nodeType":"YulLiteral","src":"12475:4:69","type":"","value":"0x11"}],"functionName":{"name":"mstore","nativeSrc":"12465:6:69","nodeType":"YulIdentifier","src":"12465:6:69"},"nativeSrc":"12465:15:69","nodeType":"YulFunctionCall","src":"12465:15:69"},"nativeSrc":"12465:15:69","nodeType":"YulExpressionStatement","src":"12465:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"12496:1:69","nodeType":"YulLiteral","src":"12496:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"12499:4:69","nodeType":"YulLiteral","src":"12499:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"12489:6:69","nodeType":"YulIdentifier","src":"12489:6:69"},"nativeSrc":"12489:15:69","nodeType":"YulFunctionCall","src":"12489:15:69"},"nativeSrc":"12489:15:69","nodeType":"YulExpressionStatement","src":"12489:15:69"}]},"name":"panic_error_0x11","nativeSrc":"12330:180:69","nodeType":"YulFunctionDefinition","src":"12330:180:69"},{"body":{"nativeSrc":"12558:146:69","nodeType":"YulBlock","src":"12558:146:69","statements":[{"nativeSrc":"12568:23:69","nodeType":"YulAssignment","src":"12568:23:69","value":{"arguments":[{"name":"x","nativeSrc":"12589:1:69","nodeType":"YulIdentifier","src":"12589:1:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"12573:15:69","nodeType":"YulIdentifier","src":"12573:15:69"},"nativeSrc":"12573:18:69","nodeType":"YulFunctionCall","src":"12573:18:69"},"variableNames":[{"name":"x","nativeSrc":"12568:1:69","nodeType":"YulIdentifier","src":"12568:1:69"}]},{"nativeSrc":"12600:23:69","nodeType":"YulAssignment","src":"12600:23:69","value":{"arguments":[{"name":"y","nativeSrc":"12621:1:69","nodeType":"YulIdentifier","src":"12621:1:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"12605:15:69","nodeType":"YulIdentifier","src":"12605:15:69"},"nativeSrc":"12605:18:69","nodeType":"YulFunctionCall","src":"12605:18:69"},"variableNames":[{"name":"y","nativeSrc":"12600:1:69","nodeType":"YulIdentifier","src":"12600:1:69"}]},{"nativeSrc":"12632:16:69","nodeType":"YulAssignment","src":"12632:16:69","value":{"arguments":[{"name":"x","nativeSrc":"12643:1:69","nodeType":"YulIdentifier","src":"12643:1:69"},{"name":"y","nativeSrc":"12646:1:69","nodeType":"YulIdentifier","src":"12646:1:69"}],"functionName":{"name":"add","nativeSrc":"12639:3:69","nodeType":"YulIdentifier","src":"12639:3:69"},"nativeSrc":"12639:9:69","nodeType":"YulFunctionCall","src":"12639:9:69"},"variableNames":[{"name":"sum","nativeSrc":"12632:3:69","nodeType":"YulIdentifier","src":"12632:3:69"}]},{"body":{"nativeSrc":"12675:22:69","nodeType":"YulBlock","src":"12675:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"12677:16:69","nodeType":"YulIdentifier","src":"12677:16:69"},"nativeSrc":"12677:18:69","nodeType":"YulFunctionCall","src":"12677:18:69"},"nativeSrc":"12677:18:69","nodeType":"YulExpressionStatement","src":"12677:18:69"}]},"condition":{"arguments":[{"name":"sum","nativeSrc":"12664:3:69","nodeType":"YulIdentifier","src":"12664:3:69"},{"kind":"number","nativeSrc":"12669:4:69","nodeType":"YulLiteral","src":"12669:4:69","type":"","value":"0xff"}],"functionName":{"name":"gt","nativeSrc":"12661:2:69","nodeType":"YulIdentifier","src":"12661:2:69"},"nativeSrc":"12661:13:69","nodeType":"YulFunctionCall","src":"12661:13:69"},"nativeSrc":"12658:39:69","nodeType":"YulIf","src":"12658:39:69"}]},"name":"checked_add_t_uint8","nativeSrc":"12516:188:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"12545:1:69","nodeType":"YulTypedName","src":"12545:1:69","type":""},{"name":"y","nativeSrc":"12548:1:69","nodeType":"YulTypedName","src":"12548:1:69","type":""}],"returnVariables":[{"name":"sum","nativeSrc":"12554:3:69","nodeType":"YulTypedName","src":"12554:3:69","type":""}],"src":"12516:188:69"},{"body":{"nativeSrc":"12799:28:69","nodeType":"YulBlock","src":"12799:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"12816:1:69","nodeType":"YulLiteral","src":"12816:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"12819:1:69","nodeType":"YulLiteral","src":"12819:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"12809:6:69","nodeType":"YulIdentifier","src":"12809:6:69"},"nativeSrc":"12809:12:69","nodeType":"YulFunctionCall","src":"12809:12:69"},"nativeSrc":"12809:12:69","nodeType":"YulExpressionStatement","src":"12809:12:69"}]},"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"12710:117:69","nodeType":"YulFunctionDefinition","src":"12710:117:69"},{"body":{"nativeSrc":"12861:152:69","nodeType":"YulBlock","src":"12861:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"12878:1:69","nodeType":"YulLiteral","src":"12878:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"12881:77:69","nodeType":"YulLiteral","src":"12881:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"12871:6:69","nodeType":"YulIdentifier","src":"12871:6:69"},"nativeSrc":"12871:88:69","nodeType":"YulFunctionCall","src":"12871:88:69"},"nativeSrc":"12871:88:69","nodeType":"YulExpressionStatement","src":"12871:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"12975:1:69","nodeType":"YulLiteral","src":"12975:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"12978:4:69","nodeType":"YulLiteral","src":"12978:4:69","type":"","value":"0x41"}],"functionName":{"name":"mstore","nativeSrc":"12968:6:69","nodeType":"YulIdentifier","src":"12968:6:69"},"nativeSrc":"12968:15:69","nodeType":"YulFunctionCall","src":"12968:15:69"},"nativeSrc":"12968:15:69","nodeType":"YulExpressionStatement","src":"12968:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"12999:1:69","nodeType":"YulLiteral","src":"12999:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"13002:4:69","nodeType":"YulLiteral","src":"13002:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"12992:6:69","nodeType":"YulIdentifier","src":"12992:6:69"},"nativeSrc":"12992:15:69","nodeType":"YulFunctionCall","src":"12992:15:69"},"nativeSrc":"12992:15:69","nodeType":"YulExpressionStatement","src":"12992:15:69"}]},"name":"panic_error_0x41","nativeSrc":"12833:180:69","nodeType":"YulFunctionDefinition","src":"12833:180:69"},{"body":{"nativeSrc":"13062:238:69","nodeType":"YulBlock","src":"13062:238:69","statements":[{"nativeSrc":"13072:58:69","nodeType":"YulVariableDeclaration","src":"13072:58:69","value":{"arguments":[{"name":"memPtr","nativeSrc":"13094:6:69","nodeType":"YulIdentifier","src":"13094:6:69"},{"arguments":[{"name":"size","nativeSrc":"13124:4:69","nodeType":"YulIdentifier","src":"13124:4:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"13102:21:69","nodeType":"YulIdentifier","src":"13102:21:69"},"nativeSrc":"13102:27:69","nodeType":"YulFunctionCall","src":"13102:27:69"}],"functionName":{"name":"add","nativeSrc":"13090:3:69","nodeType":"YulIdentifier","src":"13090:3:69"},"nativeSrc":"13090:40:69","nodeType":"YulFunctionCall","src":"13090:40:69"},"variables":[{"name":"newFreePtr","nativeSrc":"13076:10:69","nodeType":"YulTypedName","src":"13076:10:69","type":""}]},{"body":{"nativeSrc":"13241:22:69","nodeType":"YulBlock","src":"13241:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"13243:16:69","nodeType":"YulIdentifier","src":"13243:16:69"},"nativeSrc":"13243:18:69","nodeType":"YulFunctionCall","src":"13243:18:69"},"nativeSrc":"13243:18:69","nodeType":"YulExpressionStatement","src":"13243:18:69"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nativeSrc":"13184:10:69","nodeType":"YulIdentifier","src":"13184:10:69"},{"kind":"number","nativeSrc":"13196:18:69","nodeType":"YulLiteral","src":"13196:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"13181:2:69","nodeType":"YulIdentifier","src":"13181:2:69"},"nativeSrc":"13181:34:69","nodeType":"YulFunctionCall","src":"13181:34:69"},{"arguments":[{"name":"newFreePtr","nativeSrc":"13220:10:69","nodeType":"YulIdentifier","src":"13220:10:69"},{"name":"memPtr","nativeSrc":"13232:6:69","nodeType":"YulIdentifier","src":"13232:6:69"}],"functionName":{"name":"lt","nativeSrc":"13217:2:69","nodeType":"YulIdentifier","src":"13217:2:69"},"nativeSrc":"13217:22:69","nodeType":"YulFunctionCall","src":"13217:22:69"}],"functionName":{"name":"or","nativeSrc":"13178:2:69","nodeType":"YulIdentifier","src":"13178:2:69"},"nativeSrc":"13178:62:69","nodeType":"YulFunctionCall","src":"13178:62:69"},"nativeSrc":"13175:88:69","nodeType":"YulIf","src":"13175:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"13279:2:69","nodeType":"YulLiteral","src":"13279:2:69","type":"","value":"64"},{"name":"newFreePtr","nativeSrc":"13283:10:69","nodeType":"YulIdentifier","src":"13283:10:69"}],"functionName":{"name":"mstore","nativeSrc":"13272:6:69","nodeType":"YulIdentifier","src":"13272:6:69"},"nativeSrc":"13272:22:69","nodeType":"YulFunctionCall","src":"13272:22:69"},"nativeSrc":"13272:22:69","nodeType":"YulExpressionStatement","src":"13272:22:69"}]},"name":"finalize_allocation","nativeSrc":"13019:281:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"13048:6:69","nodeType":"YulTypedName","src":"13048:6:69","type":""},{"name":"size","nativeSrc":"13056:4:69","nodeType":"YulTypedName","src":"13056:4:69","type":""}],"src":"13019:281:69"},{"body":{"nativeSrc":"13347:88:69","nodeType":"YulBlock","src":"13347:88:69","statements":[{"nativeSrc":"13357:30:69","nodeType":"YulAssignment","src":"13357:30:69","value":{"arguments":[],"functionName":{"name":"allocate_unbounded","nativeSrc":"13367:18:69","nodeType":"YulIdentifier","src":"13367:18:69"},"nativeSrc":"13367:20:69","nodeType":"YulFunctionCall","src":"13367:20:69"},"variableNames":[{"name":"memPtr","nativeSrc":"13357:6:69","nodeType":"YulIdentifier","src":"13357:6:69"}]},{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"13416:6:69","nodeType":"YulIdentifier","src":"13416:6:69"},{"name":"size","nativeSrc":"13424:4:69","nodeType":"YulIdentifier","src":"13424:4:69"}],"functionName":{"name":"finalize_allocation","nativeSrc":"13396:19:69","nodeType":"YulIdentifier","src":"13396:19:69"},"nativeSrc":"13396:33:69","nodeType":"YulFunctionCall","src":"13396:33:69"},"nativeSrc":"13396:33:69","nodeType":"YulExpressionStatement","src":"13396:33:69"}]},"name":"allocate_memory","nativeSrc":"13306:129:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nativeSrc":"13331:4:69","nodeType":"YulTypedName","src":"13331:4:69","type":""}],"returnVariables":[{"name":"memPtr","nativeSrc":"13340:6:69","nodeType":"YulTypedName","src":"13340:6:69","type":""}],"src":"13306:129:69"},{"body":{"nativeSrc":"13551:229:69","nodeType":"YulBlock","src":"13551:229:69","statements":[{"body":{"nativeSrc":"13656:22:69","nodeType":"YulBlock","src":"13656:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"13658:16:69","nodeType":"YulIdentifier","src":"13658:16:69"},"nativeSrc":"13658:18:69","nodeType":"YulFunctionCall","src":"13658:18:69"},"nativeSrc":"13658:18:69","nodeType":"YulExpressionStatement","src":"13658:18:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"13628:6:69","nodeType":"YulIdentifier","src":"13628:6:69"},{"kind":"number","nativeSrc":"13636:18:69","nodeType":"YulLiteral","src":"13636:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"13625:2:69","nodeType":"YulIdentifier","src":"13625:2:69"},"nativeSrc":"13625:30:69","nodeType":"YulFunctionCall","src":"13625:30:69"},"nativeSrc":"13622:56:69","nodeType":"YulIf","src":"13622:56:69"},{"nativeSrc":"13688:25:69","nodeType":"YulAssignment","src":"13688:25:69","value":{"arguments":[{"name":"length","nativeSrc":"13700:6:69","nodeType":"YulIdentifier","src":"13700:6:69"},{"kind":"number","nativeSrc":"13708:4:69","nodeType":"YulLiteral","src":"13708:4:69","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"13696:3:69","nodeType":"YulIdentifier","src":"13696:3:69"},"nativeSrc":"13696:17:69","nodeType":"YulFunctionCall","src":"13696:17:69"},"variableNames":[{"name":"size","nativeSrc":"13688:4:69","nodeType":"YulIdentifier","src":"13688:4:69"}]},{"nativeSrc":"13750:23:69","nodeType":"YulAssignment","src":"13750:23:69","value":{"arguments":[{"name":"size","nativeSrc":"13762:4:69","nodeType":"YulIdentifier","src":"13762:4:69"},{"kind":"number","nativeSrc":"13768:4:69","nodeType":"YulLiteral","src":"13768:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"13758:3:69","nodeType":"YulIdentifier","src":"13758:3:69"},"nativeSrc":"13758:15:69","nodeType":"YulFunctionCall","src":"13758:15:69"},"variableNames":[{"name":"size","nativeSrc":"13750:4:69","nodeType":"YulIdentifier","src":"13750:4:69"}]}]},"name":"array_allocation_size_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr","nativeSrc":"13441:339:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nativeSrc":"13535:6:69","nodeType":"YulTypedName","src":"13535:6:69","type":""}],"returnVariables":[{"name":"size","nativeSrc":"13546:4:69","nodeType":"YulTypedName","src":"13546:4:69","type":""}],"src":"13441:339:69"},{"body":{"nativeSrc":"13875:28:69","nodeType":"YulBlock","src":"13875:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"13892:1:69","nodeType":"YulLiteral","src":"13892:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"13895:1:69","nodeType":"YulLiteral","src":"13895:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"13885:6:69","nodeType":"YulIdentifier","src":"13885:6:69"},"nativeSrc":"13885:12:69","nodeType":"YulFunctionCall","src":"13885:12:69"},"nativeSrc":"13885:12:69","nodeType":"YulExpressionStatement","src":"13885:12:69"}]},"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"13786:117:69","nodeType":"YulFunctionDefinition","src":"13786:117:69"},{"body":{"nativeSrc":"13982:51:69","nodeType":"YulBlock","src":"13982:51:69","statements":[{"nativeSrc":"13992:35:69","nodeType":"YulAssignment","src":"13992:35:69","value":{"arguments":[{"name":"value","nativeSrc":"14021:5:69","nodeType":"YulIdentifier","src":"14021:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"14003:17:69","nodeType":"YulIdentifier","src":"14003:17:69"},"nativeSrc":"14003:24:69","nodeType":"YulFunctionCall","src":"14003:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"13992:7:69","nodeType":"YulIdentifier","src":"13992:7:69"}]}]},"name":"cleanup_t_contract$_RewardsDistributor_$12324","nativeSrc":"13909:124:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"13964:5:69","nodeType":"YulTypedName","src":"13964:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"13974:7:69","nodeType":"YulTypedName","src":"13974:7:69","type":""}],"src":"13909:124:69"},{"body":{"nativeSrc":"14110:107:69","nodeType":"YulBlock","src":"14110:107:69","statements":[{"body":{"nativeSrc":"14195:16:69","nodeType":"YulBlock","src":"14195:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"14204:1:69","nodeType":"YulLiteral","src":"14204:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"14207:1:69","nodeType":"YulLiteral","src":"14207:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"14197:6:69","nodeType":"YulIdentifier","src":"14197:6:69"},"nativeSrc":"14197:12:69","nodeType":"YulFunctionCall","src":"14197:12:69"},"nativeSrc":"14197:12:69","nodeType":"YulExpressionStatement","src":"14197:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"14133:5:69","nodeType":"YulIdentifier","src":"14133:5:69"},{"arguments":[{"name":"value","nativeSrc":"14186:5:69","nodeType":"YulIdentifier","src":"14186:5:69"}],"functionName":{"name":"cleanup_t_contract$_RewardsDistributor_$12324","nativeSrc":"14140:45:69","nodeType":"YulIdentifier","src":"14140:45:69"},"nativeSrc":"14140:52:69","nodeType":"YulFunctionCall","src":"14140:52:69"}],"functionName":{"name":"eq","nativeSrc":"14130:2:69","nodeType":"YulIdentifier","src":"14130:2:69"},"nativeSrc":"14130:63:69","nodeType":"YulFunctionCall","src":"14130:63:69"}],"functionName":{"name":"iszero","nativeSrc":"14123:6:69","nodeType":"YulIdentifier","src":"14123:6:69"},"nativeSrc":"14123:71:69","nodeType":"YulFunctionCall","src":"14123:71:69"},"nativeSrc":"14120:91:69","nodeType":"YulIf","src":"14120:91:69"}]},"name":"validator_revert_t_contract$_RewardsDistributor_$12324","nativeSrc":"14039:178:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"14103:5:69","nodeType":"YulTypedName","src":"14103:5:69","type":""}],"src":"14039:178:69"},{"body":{"nativeSrc":"14314:108:69","nodeType":"YulBlock","src":"14314:108:69","statements":[{"nativeSrc":"14324:22:69","nodeType":"YulAssignment","src":"14324:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"14339:6:69","nodeType":"YulIdentifier","src":"14339:6:69"}],"functionName":{"name":"mload","nativeSrc":"14333:5:69","nodeType":"YulIdentifier","src":"14333:5:69"},"nativeSrc":"14333:13:69","nodeType":"YulFunctionCall","src":"14333:13:69"},"variableNames":[{"name":"value","nativeSrc":"14324:5:69","nodeType":"YulIdentifier","src":"14324:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"14410:5:69","nodeType":"YulIdentifier","src":"14410:5:69"}],"functionName":{"name":"validator_revert_t_contract$_RewardsDistributor_$12324","nativeSrc":"14355:54:69","nodeType":"YulIdentifier","src":"14355:54:69"},"nativeSrc":"14355:61:69","nodeType":"YulFunctionCall","src":"14355:61:69"},"nativeSrc":"14355:61:69","nodeType":"YulExpressionStatement","src":"14355:61:69"}]},"name":"abi_decode_t_contract$_RewardsDistributor_$12324_fromMemory","nativeSrc":"14223:199:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"14292:6:69","nodeType":"YulTypedName","src":"14292:6:69","type":""},{"name":"end","nativeSrc":"14300:3:69","nodeType":"YulTypedName","src":"14300:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"14308:5:69","nodeType":"YulTypedName","src":"14308:5:69","type":""}],"src":"14223:199:69"},{"body":{"nativeSrc":"14606:675:69","nodeType":"YulBlock","src":"14606:675:69","statements":[{"nativeSrc":"14616:118:69","nodeType":"YulAssignment","src":"14616:118:69","value":{"arguments":[{"arguments":[{"name":"length","nativeSrc":"14726:6:69","nodeType":"YulIdentifier","src":"14726:6:69"}],"functionName":{"name":"array_allocation_size_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr","nativeSrc":"14641:84:69","nodeType":"YulIdentifier","src":"14641:84:69"},"nativeSrc":"14641:92:69","nodeType":"YulFunctionCall","src":"14641:92:69"}],"functionName":{"name":"allocate_memory","nativeSrc":"14625:15:69","nodeType":"YulIdentifier","src":"14625:15:69"},"nativeSrc":"14625:109:69","nodeType":"YulFunctionCall","src":"14625:109:69"},"variableNames":[{"name":"array","nativeSrc":"14616:5:69","nodeType":"YulIdentifier","src":"14616:5:69"}]},{"nativeSrc":"14743:16:69","nodeType":"YulVariableDeclaration","src":"14743:16:69","value":{"name":"array","nativeSrc":"14754:5:69","nodeType":"YulIdentifier","src":"14754:5:69"},"variables":[{"name":"dst","nativeSrc":"14747:3:69","nodeType":"YulTypedName","src":"14747:3:69","type":""}]},{"expression":{"arguments":[{"name":"array","nativeSrc":"14776:5:69","nodeType":"YulIdentifier","src":"14776:5:69"},{"name":"length","nativeSrc":"14783:6:69","nodeType":"YulIdentifier","src":"14783:6:69"}],"functionName":{"name":"mstore","nativeSrc":"14769:6:69","nodeType":"YulIdentifier","src":"14769:6:69"},"nativeSrc":"14769:21:69","nodeType":"YulFunctionCall","src":"14769:21:69"},"nativeSrc":"14769:21:69","nodeType":"YulExpressionStatement","src":"14769:21:69"},{"nativeSrc":"14799:23:69","nodeType":"YulAssignment","src":"14799:23:69","value":{"arguments":[{"name":"array","nativeSrc":"14810:5:69","nodeType":"YulIdentifier","src":"14810:5:69"},{"kind":"number","nativeSrc":"14817:4:69","nodeType":"YulLiteral","src":"14817:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"14806:3:69","nodeType":"YulIdentifier","src":"14806:3:69"},"nativeSrc":"14806:16:69","nodeType":"YulFunctionCall","src":"14806:16:69"},"variableNames":[{"name":"dst","nativeSrc":"14799:3:69","nodeType":"YulIdentifier","src":"14799:3:69"}]},{"nativeSrc":"14832:44:69","nodeType":"YulVariableDeclaration","src":"14832:44:69","value":{"arguments":[{"name":"offset","nativeSrc":"14850:6:69","nodeType":"YulIdentifier","src":"14850:6:69"},{"arguments":[{"name":"length","nativeSrc":"14862:6:69","nodeType":"YulIdentifier","src":"14862:6:69"},{"kind":"number","nativeSrc":"14870:4:69","nodeType":"YulLiteral","src":"14870:4:69","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"14858:3:69","nodeType":"YulIdentifier","src":"14858:3:69"},"nativeSrc":"14858:17:69","nodeType":"YulFunctionCall","src":"14858:17:69"}],"functionName":{"name":"add","nativeSrc":"14846:3:69","nodeType":"YulIdentifier","src":"14846:3:69"},"nativeSrc":"14846:30:69","nodeType":"YulFunctionCall","src":"14846:30:69"},"variables":[{"name":"srcEnd","nativeSrc":"14836:6:69","nodeType":"YulTypedName","src":"14836:6:69","type":""}]},{"body":{"nativeSrc":"14904:103:69","nodeType":"YulBlock","src":"14904:103:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"14918:77:69","nodeType":"YulIdentifier","src":"14918:77:69"},"nativeSrc":"14918:79:69","nodeType":"YulFunctionCall","src":"14918:79:69"},"nativeSrc":"14918:79:69","nodeType":"YulExpressionStatement","src":"14918:79:69"}]},"condition":{"arguments":[{"name":"srcEnd","nativeSrc":"14891:6:69","nodeType":"YulIdentifier","src":"14891:6:69"},{"name":"end","nativeSrc":"14899:3:69","nodeType":"YulIdentifier","src":"14899:3:69"}],"functionName":{"name":"gt","nativeSrc":"14888:2:69","nodeType":"YulIdentifier","src":"14888:2:69"},"nativeSrc":"14888:15:69","nodeType":"YulFunctionCall","src":"14888:15:69"},"nativeSrc":"14885:122:69","nodeType":"YulIf","src":"14885:122:69"},{"body":{"nativeSrc":"15092:183:69","nodeType":"YulBlock","src":"15092:183:69","statements":[{"nativeSrc":"15107:21:69","nodeType":"YulVariableDeclaration","src":"15107:21:69","value":{"name":"src","nativeSrc":"15125:3:69","nodeType":"YulIdentifier","src":"15125:3:69"},"variables":[{"name":"elementPos","nativeSrc":"15111:10:69","nodeType":"YulTypedName","src":"15111:10:69","type":""}]},{"expression":{"arguments":[{"name":"dst","nativeSrc":"15149:3:69","nodeType":"YulIdentifier","src":"15149:3:69"},{"arguments":[{"name":"elementPos","nativeSrc":"15214:10:69","nodeType":"YulIdentifier","src":"15214:10:69"},{"name":"end","nativeSrc":"15226:3:69","nodeType":"YulIdentifier","src":"15226:3:69"}],"functionName":{"name":"abi_decode_t_contract$_RewardsDistributor_$12324_fromMemory","nativeSrc":"15154:59:69","nodeType":"YulIdentifier","src":"15154:59:69"},"nativeSrc":"15154:76:69","nodeType":"YulFunctionCall","src":"15154:76:69"}],"functionName":{"name":"mstore","nativeSrc":"15142:6:69","nodeType":"YulIdentifier","src":"15142:6:69"},"nativeSrc":"15142:89:69","nodeType":"YulFunctionCall","src":"15142:89:69"},"nativeSrc":"15142:89:69","nodeType":"YulExpressionStatement","src":"15142:89:69"},{"nativeSrc":"15244:21:69","nodeType":"YulAssignment","src":"15244:21:69","value":{"arguments":[{"name":"dst","nativeSrc":"15255:3:69","nodeType":"YulIdentifier","src":"15255:3:69"},{"kind":"number","nativeSrc":"15260:4:69","nodeType":"YulLiteral","src":"15260:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"15251:3:69","nodeType":"YulIdentifier","src":"15251:3:69"},"nativeSrc":"15251:14:69","nodeType":"YulFunctionCall","src":"15251:14:69"},"variableNames":[{"name":"dst","nativeSrc":"15244:3:69","nodeType":"YulIdentifier","src":"15244:3:69"}]}]},"condition":{"arguments":[{"name":"src","nativeSrc":"15045:3:69","nodeType":"YulIdentifier","src":"15045:3:69"},{"name":"srcEnd","nativeSrc":"15050:6:69","nodeType":"YulIdentifier","src":"15050:6:69"}],"functionName":{"name":"lt","nativeSrc":"15042:2:69","nodeType":"YulIdentifier","src":"15042:2:69"},"nativeSrc":"15042:15:69","nodeType":"YulFunctionCall","src":"15042:15:69"},"nativeSrc":"15016:259:69","nodeType":"YulForLoop","post":{"nativeSrc":"15058:25:69","nodeType":"YulBlock","src":"15058:25:69","statements":[{"nativeSrc":"15060:21:69","nodeType":"YulAssignment","src":"15060:21:69","value":{"arguments":[{"name":"src","nativeSrc":"15071:3:69","nodeType":"YulIdentifier","src":"15071:3:69"},{"kind":"number","nativeSrc":"15076:4:69","nodeType":"YulLiteral","src":"15076:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"15067:3:69","nodeType":"YulIdentifier","src":"15067:3:69"},"nativeSrc":"15067:14:69","nodeType":"YulFunctionCall","src":"15067:14:69"},"variableNames":[{"name":"src","nativeSrc":"15060:3:69","nodeType":"YulIdentifier","src":"15060:3:69"}]}]},"pre":{"nativeSrc":"15020:21:69","nodeType":"YulBlock","src":"15020:21:69","statements":[{"nativeSrc":"15022:17:69","nodeType":"YulVariableDeclaration","src":"15022:17:69","value":{"name":"offset","nativeSrc":"15033:6:69","nodeType":"YulIdentifier","src":"15033:6:69"},"variables":[{"name":"src","nativeSrc":"15026:3:69","nodeType":"YulTypedName","src":"15026:3:69","type":""}]}]},"src":"15016:259:69"}]},"name":"abi_decode_available_length_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory","nativeSrc":"14465:816:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"14576:6:69","nodeType":"YulTypedName","src":"14576:6:69","type":""},{"name":"length","nativeSrc":"14584:6:69","nodeType":"YulTypedName","src":"14584:6:69","type":""},{"name":"end","nativeSrc":"14592:3:69","nodeType":"YulTypedName","src":"14592:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"14600:5:69","nodeType":"YulTypedName","src":"14600:5:69","type":""}],"src":"14465:816:69"},{"body":{"nativeSrc":"15440:325:69","nodeType":"YulBlock","src":"15440:325:69","statements":[{"body":{"nativeSrc":"15489:83:69","nodeType":"YulBlock","src":"15489:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"15491:77:69","nodeType":"YulIdentifier","src":"15491:77:69"},"nativeSrc":"15491:79:69","nodeType":"YulFunctionCall","src":"15491:79:69"},"nativeSrc":"15491:79:69","nodeType":"YulExpressionStatement","src":"15491:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"15468:6:69","nodeType":"YulIdentifier","src":"15468:6:69"},{"kind":"number","nativeSrc":"15476:4:69","nodeType":"YulLiteral","src":"15476:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"15464:3:69","nodeType":"YulIdentifier","src":"15464:3:69"},"nativeSrc":"15464:17:69","nodeType":"YulFunctionCall","src":"15464:17:69"},{"name":"end","nativeSrc":"15483:3:69","nodeType":"YulIdentifier","src":"15483:3:69"}],"functionName":{"name":"slt","nativeSrc":"15460:3:69","nodeType":"YulIdentifier","src":"15460:3:69"},"nativeSrc":"15460:27:69","nodeType":"YulFunctionCall","src":"15460:27:69"}],"functionName":{"name":"iszero","nativeSrc":"15453:6:69","nodeType":"YulIdentifier","src":"15453:6:69"},"nativeSrc":"15453:35:69","nodeType":"YulFunctionCall","src":"15453:35:69"},"nativeSrc":"15450:122:69","nodeType":"YulIf","src":"15450:122:69"},{"nativeSrc":"15581:27:69","nodeType":"YulVariableDeclaration","src":"15581:27:69","value":{"arguments":[{"name":"offset","nativeSrc":"15601:6:69","nodeType":"YulIdentifier","src":"15601:6:69"}],"functionName":{"name":"mload","nativeSrc":"15595:5:69","nodeType":"YulIdentifier","src":"15595:5:69"},"nativeSrc":"15595:13:69","nodeType":"YulFunctionCall","src":"15595:13:69"},"variables":[{"name":"length","nativeSrc":"15585:6:69","nodeType":"YulTypedName","src":"15585:6:69","type":""}]},{"nativeSrc":"15617:142:69","nodeType":"YulAssignment","src":"15617:142:69","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"15732:6:69","nodeType":"YulIdentifier","src":"15732:6:69"},{"kind":"number","nativeSrc":"15740:4:69","nodeType":"YulLiteral","src":"15740:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"15728:3:69","nodeType":"YulIdentifier","src":"15728:3:69"},"nativeSrc":"15728:17:69","nodeType":"YulFunctionCall","src":"15728:17:69"},{"name":"length","nativeSrc":"15747:6:69","nodeType":"YulIdentifier","src":"15747:6:69"},{"name":"end","nativeSrc":"15755:3:69","nodeType":"YulIdentifier","src":"15755:3:69"}],"functionName":{"name":"abi_decode_available_length_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory","nativeSrc":"15626:101:69","nodeType":"YulIdentifier","src":"15626:101:69"},"nativeSrc":"15626:133:69","nodeType":"YulFunctionCall","src":"15626:133:69"},"variableNames":[{"name":"array","nativeSrc":"15617:5:69","nodeType":"YulIdentifier","src":"15617:5:69"}]}]},"name":"abi_decode_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory","nativeSrc":"15324:441:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"15418:6:69","nodeType":"YulTypedName","src":"15418:6:69","type":""},{"name":"end","nativeSrc":"15426:3:69","nodeType":"YulTypedName","src":"15426:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"15434:5:69","nodeType":"YulTypedName","src":"15434:5:69","type":""}],"src":"15324:441:69"},{"body":{"nativeSrc":"15901:480:69","nodeType":"YulBlock","src":"15901:480:69","statements":[{"body":{"nativeSrc":"15947:83:69","nodeType":"YulBlock","src":"15947:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"15949:77:69","nodeType":"YulIdentifier","src":"15949:77:69"},"nativeSrc":"15949:79:69","nodeType":"YulFunctionCall","src":"15949:79:69"},"nativeSrc":"15949:79:69","nodeType":"YulExpressionStatement","src":"15949:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"15922:7:69","nodeType":"YulIdentifier","src":"15922:7:69"},{"name":"headStart","nativeSrc":"15931:9:69","nodeType":"YulIdentifier","src":"15931:9:69"}],"functionName":{"name":"sub","nativeSrc":"15918:3:69","nodeType":"YulIdentifier","src":"15918:3:69"},"nativeSrc":"15918:23:69","nodeType":"YulFunctionCall","src":"15918:23:69"},{"kind":"number","nativeSrc":"15943:2:69","nodeType":"YulLiteral","src":"15943:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"15914:3:69","nodeType":"YulIdentifier","src":"15914:3:69"},"nativeSrc":"15914:32:69","nodeType":"YulFunctionCall","src":"15914:32:69"},"nativeSrc":"15911:119:69","nodeType":"YulIf","src":"15911:119:69"},{"nativeSrc":"16040:334:69","nodeType":"YulBlock","src":"16040:334:69","statements":[{"nativeSrc":"16055:38:69","nodeType":"YulVariableDeclaration","src":"16055:38:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"16079:9:69","nodeType":"YulIdentifier","src":"16079:9:69"},{"kind":"number","nativeSrc":"16090:1:69","nodeType":"YulLiteral","src":"16090:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"16075:3:69","nodeType":"YulIdentifier","src":"16075:3:69"},"nativeSrc":"16075:17:69","nodeType":"YulFunctionCall","src":"16075:17:69"}],"functionName":{"name":"mload","nativeSrc":"16069:5:69","nodeType":"YulIdentifier","src":"16069:5:69"},"nativeSrc":"16069:24:69","nodeType":"YulFunctionCall","src":"16069:24:69"},"variables":[{"name":"offset","nativeSrc":"16059:6:69","nodeType":"YulTypedName","src":"16059:6:69","type":""}]},{"body":{"nativeSrc":"16140:83:69","nodeType":"YulBlock","src":"16140:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"16142:77:69","nodeType":"YulIdentifier","src":"16142:77:69"},"nativeSrc":"16142:79:69","nodeType":"YulFunctionCall","src":"16142:79:69"},"nativeSrc":"16142:79:69","nodeType":"YulExpressionStatement","src":"16142:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"16112:6:69","nodeType":"YulIdentifier","src":"16112:6:69"},{"kind":"number","nativeSrc":"16120:18:69","nodeType":"YulLiteral","src":"16120:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"16109:2:69","nodeType":"YulIdentifier","src":"16109:2:69"},"nativeSrc":"16109:30:69","nodeType":"YulFunctionCall","src":"16109:30:69"},"nativeSrc":"16106:117:69","nodeType":"YulIf","src":"16106:117:69"},{"nativeSrc":"16237:127:69","nodeType":"YulAssignment","src":"16237:127:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"16336:9:69","nodeType":"YulIdentifier","src":"16336:9:69"},{"name":"offset","nativeSrc":"16347:6:69","nodeType":"YulIdentifier","src":"16347:6:69"}],"functionName":{"name":"add","nativeSrc":"16332:3:69","nodeType":"YulIdentifier","src":"16332:3:69"},"nativeSrc":"16332:22:69","nodeType":"YulFunctionCall","src":"16332:22:69"},{"name":"dataEnd","nativeSrc":"16356:7:69","nodeType":"YulIdentifier","src":"16356:7:69"}],"functionName":{"name":"abi_decode_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory","nativeSrc":"16247:84:69","nodeType":"YulIdentifier","src":"16247:84:69"},"nativeSrc":"16247:117:69","nodeType":"YulFunctionCall","src":"16247:117:69"},"variableNames":[{"name":"value0","nativeSrc":"16237:6:69","nodeType":"YulIdentifier","src":"16237:6:69"}]}]}]},"name":"abi_decode_tuple_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory","nativeSrc":"15771:610:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"15871:9:69","nodeType":"YulTypedName","src":"15871:9:69","type":""},{"name":"dataEnd","nativeSrc":"15882:7:69","nodeType":"YulTypedName","src":"15882:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"15894:6:69","nodeType":"YulTypedName","src":"15894:6:69","type":""}],"src":"15771:610:69"},{"body":{"nativeSrc":"16415:152:69","nodeType":"YulBlock","src":"16415:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"16432:1:69","nodeType":"YulLiteral","src":"16432:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"16435:77:69","nodeType":"YulLiteral","src":"16435:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"16425:6:69","nodeType":"YulIdentifier","src":"16425:6:69"},"nativeSrc":"16425:88:69","nodeType":"YulFunctionCall","src":"16425:88:69"},"nativeSrc":"16425:88:69","nodeType":"YulExpressionStatement","src":"16425:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"16529:1:69","nodeType":"YulLiteral","src":"16529:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"16532:4:69","nodeType":"YulLiteral","src":"16532:4:69","type":"","value":"0x32"}],"functionName":{"name":"mstore","nativeSrc":"16522:6:69","nodeType":"YulIdentifier","src":"16522:6:69"},"nativeSrc":"16522:15:69","nodeType":"YulFunctionCall","src":"16522:15:69"},"nativeSrc":"16522:15:69","nodeType":"YulExpressionStatement","src":"16522:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"16553:1:69","nodeType":"YulLiteral","src":"16553:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"16556:4:69","nodeType":"YulLiteral","src":"16556:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"16546:6:69","nodeType":"YulIdentifier","src":"16546:6:69"},"nativeSrc":"16546:15:69","nodeType":"YulFunctionCall","src":"16546:15:69"},"nativeSrc":"16546:15:69","nodeType":"YulExpressionStatement","src":"16546:15:69"}]},"name":"panic_error_0x32","nativeSrc":"16387:180:69","nodeType":"YulFunctionDefinition","src":"16387:180:69"},{"body":{"nativeSrc":"16662:106:69","nodeType":"YulBlock","src":"16662:106:69","statements":[{"nativeSrc":"16672:22:69","nodeType":"YulAssignment","src":"16672:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"16687:6:69","nodeType":"YulIdentifier","src":"16687:6:69"}],"functionName":{"name":"mload","nativeSrc":"16681:5:69","nodeType":"YulIdentifier","src":"16681:5:69"},"nativeSrc":"16681:13:69","nodeType":"YulFunctionCall","src":"16681:13:69"},"variableNames":[{"name":"value","nativeSrc":"16672:5:69","nodeType":"YulIdentifier","src":"16672:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"16756:5:69","nodeType":"YulIdentifier","src":"16756:5:69"}],"functionName":{"name":"validator_revert_t_contract$_IERC20Upgradeable_$1352","nativeSrc":"16703:52:69","nodeType":"YulIdentifier","src":"16703:52:69"},"nativeSrc":"16703:59:69","nodeType":"YulFunctionCall","src":"16703:59:69"},"nativeSrc":"16703:59:69","nodeType":"YulExpressionStatement","src":"16703:59:69"}]},"name":"abi_decode_t_contract$_IERC20Upgradeable_$1352_fromMemory","nativeSrc":"16573:195:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"16640:6:69","nodeType":"YulTypedName","src":"16640:6:69","type":""},{"name":"end","nativeSrc":"16648:3:69","nodeType":"YulTypedName","src":"16648:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"16656:5:69","nodeType":"YulTypedName","src":"16656:5:69","type":""}],"src":"16573:195:69"},{"body":{"nativeSrc":"16877:300:69","nodeType":"YulBlock","src":"16877:300:69","statements":[{"body":{"nativeSrc":"16923:83:69","nodeType":"YulBlock","src":"16923:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"16925:77:69","nodeType":"YulIdentifier","src":"16925:77:69"},"nativeSrc":"16925:79:69","nodeType":"YulFunctionCall","src":"16925:79:69"},"nativeSrc":"16925:79:69","nodeType":"YulExpressionStatement","src":"16925:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"16898:7:69","nodeType":"YulIdentifier","src":"16898:7:69"},{"name":"headStart","nativeSrc":"16907:9:69","nodeType":"YulIdentifier","src":"16907:9:69"}],"functionName":{"name":"sub","nativeSrc":"16894:3:69","nodeType":"YulIdentifier","src":"16894:3:69"},"nativeSrc":"16894:23:69","nodeType":"YulFunctionCall","src":"16894:23:69"},{"kind":"number","nativeSrc":"16919:2:69","nodeType":"YulLiteral","src":"16919:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"16890:3:69","nodeType":"YulIdentifier","src":"16890:3:69"},"nativeSrc":"16890:32:69","nodeType":"YulFunctionCall","src":"16890:32:69"},"nativeSrc":"16887:119:69","nodeType":"YulIf","src":"16887:119:69"},{"nativeSrc":"17016:154:69","nodeType":"YulBlock","src":"17016:154:69","statements":[{"nativeSrc":"17031:15:69","nodeType":"YulVariableDeclaration","src":"17031:15:69","value":{"kind":"number","nativeSrc":"17045:1:69","nodeType":"YulLiteral","src":"17045:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"17035:6:69","nodeType":"YulTypedName","src":"17035:6:69","type":""}]},{"nativeSrc":"17060:100:69","nodeType":"YulAssignment","src":"17060:100:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"17132:9:69","nodeType":"YulIdentifier","src":"17132:9:69"},{"name":"offset","nativeSrc":"17143:6:69","nodeType":"YulIdentifier","src":"17143:6:69"}],"functionName":{"name":"add","nativeSrc":"17128:3:69","nodeType":"YulIdentifier","src":"17128:3:69"},"nativeSrc":"17128:22:69","nodeType":"YulFunctionCall","src":"17128:22:69"},{"name":"dataEnd","nativeSrc":"17152:7:69","nodeType":"YulIdentifier","src":"17152:7:69"}],"functionName":{"name":"abi_decode_t_contract$_IERC20Upgradeable_$1352_fromMemory","nativeSrc":"17070:57:69","nodeType":"YulIdentifier","src":"17070:57:69"},"nativeSrc":"17070:90:69","nodeType":"YulFunctionCall","src":"17070:90:69"},"variableNames":[{"name":"value0","nativeSrc":"17060:6:69","nodeType":"YulIdentifier","src":"17060:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_IERC20Upgradeable_$1352_fromMemory","nativeSrc":"16774:403:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"16847:9:69","nodeType":"YulTypedName","src":"16847:9:69","type":""},{"name":"dataEnd","nativeSrc":"16858:7:69","nodeType":"YulTypedName","src":"16858:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"16870:6:69","nodeType":"YulTypedName","src":"16870:6:69","type":""}],"src":"16774:403:69"},{"body":{"nativeSrc":"17273:40:69","nodeType":"YulBlock","src":"17273:40:69","statements":[{"nativeSrc":"17284:22:69","nodeType":"YulAssignment","src":"17284:22:69","value":{"arguments":[{"name":"value","nativeSrc":"17300:5:69","nodeType":"YulIdentifier","src":"17300:5:69"}],"functionName":{"name":"mload","nativeSrc":"17294:5:69","nodeType":"YulIdentifier","src":"17294:5:69"},"nativeSrc":"17294:12:69","nodeType":"YulFunctionCall","src":"17294:12:69"},"variableNames":[{"name":"length","nativeSrc":"17284:6:69","nodeType":"YulIdentifier","src":"17284:6:69"}]}]},"name":"array_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"17183:130:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"17256:5:69","nodeType":"YulTypedName","src":"17256:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"17266:6:69","nodeType":"YulTypedName","src":"17266:6:69","type":""}],"src":"17183:130:69"},{"body":{"nativeSrc":"17430:73:69","nodeType":"YulBlock","src":"17430:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"17447:3:69","nodeType":"YulIdentifier","src":"17447:3:69"},{"name":"length","nativeSrc":"17452:6:69","nodeType":"YulIdentifier","src":"17452:6:69"}],"functionName":{"name":"mstore","nativeSrc":"17440:6:69","nodeType":"YulIdentifier","src":"17440:6:69"},"nativeSrc":"17440:19:69","nodeType":"YulFunctionCall","src":"17440:19:69"},"nativeSrc":"17440:19:69","nodeType":"YulExpressionStatement","src":"17440:19:69"},{"nativeSrc":"17468:29:69","nodeType":"YulAssignment","src":"17468:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"17487:3:69","nodeType":"YulIdentifier","src":"17487:3:69"},{"kind":"number","nativeSrc":"17492:4:69","nodeType":"YulLiteral","src":"17492:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"17483:3:69","nodeType":"YulIdentifier","src":"17483:3:69"},"nativeSrc":"17483:14:69","nodeType":"YulFunctionCall","src":"17483:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"17468:11:69","nodeType":"YulIdentifier","src":"17468:11:69"}]}]},"name":"array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack","nativeSrc":"17319:184:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"17402:3:69","nodeType":"YulTypedName","src":"17402:3:69","type":""},{"name":"length","nativeSrc":"17407:6:69","nodeType":"YulTypedName","src":"17407:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"17418:11:69","nodeType":"YulTypedName","src":"17418:11:69","type":""}],"src":"17319:184:69"},{"body":{"nativeSrc":"17597:60:69","nodeType":"YulBlock","src":"17597:60:69","statements":[{"nativeSrc":"17607:11:69","nodeType":"YulAssignment","src":"17607:11:69","value":{"name":"ptr","nativeSrc":"17615:3:69","nodeType":"YulIdentifier","src":"17615:3:69"},"variableNames":[{"name":"data","nativeSrc":"17607:4:69","nodeType":"YulIdentifier","src":"17607:4:69"}]},{"nativeSrc":"17628:22:69","nodeType":"YulAssignment","src":"17628:22:69","value":{"arguments":[{"name":"ptr","nativeSrc":"17640:3:69","nodeType":"YulIdentifier","src":"17640:3:69"},{"kind":"number","nativeSrc":"17645:4:69","nodeType":"YulLiteral","src":"17645:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"17636:3:69","nodeType":"YulIdentifier","src":"17636:3:69"},"nativeSrc":"17636:14:69","nodeType":"YulFunctionCall","src":"17636:14:69"},"variableNames":[{"name":"data","nativeSrc":"17628:4:69","nodeType":"YulIdentifier","src":"17628:4:69"}]}]},"name":"array_dataslot_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"17509:148:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nativeSrc":"17584:3:69","nodeType":"YulTypedName","src":"17584:3:69","type":""}],"returnVariables":[{"name":"data","nativeSrc":"17592:4:69","nodeType":"YulTypedName","src":"17592:4:69","type":""}],"src":"17509:148:69"},{"body":{"nativeSrc":"17734:82:69","nodeType":"YulBlock","src":"17734:82:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"17751:3:69","nodeType":"YulIdentifier","src":"17751:3:69"},{"arguments":[{"name":"value","nativeSrc":"17803:5:69","nodeType":"YulIdentifier","src":"17803:5:69"}],"functionName":{"name":"convert_t_contract$_VToken_$15506_to_t_address","nativeSrc":"17756:46:69","nodeType":"YulIdentifier","src":"17756:46:69"},"nativeSrc":"17756:53:69","nodeType":"YulFunctionCall","src":"17756:53:69"}],"functionName":{"name":"mstore","nativeSrc":"17744:6:69","nodeType":"YulIdentifier","src":"17744:6:69"},"nativeSrc":"17744:66:69","nodeType":"YulFunctionCall","src":"17744:66:69"},"nativeSrc":"17744:66:69","nodeType":"YulExpressionStatement","src":"17744:66:69"}]},"name":"abi_encode_t_contract$_VToken_$15506_to_t_address","nativeSrc":"17663:153:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"17722:5:69","nodeType":"YulTypedName","src":"17722:5:69","type":""},{"name":"pos","nativeSrc":"17729:3:69","nodeType":"YulTypedName","src":"17729:3:69","type":""}],"src":"17663:153:69"},{"body":{"nativeSrc":"17918:115:69","nodeType":"YulBlock","src":"17918:115:69","statements":[{"expression":{"arguments":[{"name":"value0","nativeSrc":"17978:6:69","nodeType":"YulIdentifier","src":"17978:6:69"},{"name":"pos","nativeSrc":"17986:3:69","nodeType":"YulIdentifier","src":"17986:3:69"}],"functionName":{"name":"abi_encode_t_contract$_VToken_$15506_to_t_address","nativeSrc":"17928:49:69","nodeType":"YulIdentifier","src":"17928:49:69"},"nativeSrc":"17928:62:69","nodeType":"YulFunctionCall","src":"17928:62:69"},"nativeSrc":"17928:62:69","nodeType":"YulExpressionStatement","src":"17928:62:69"},{"nativeSrc":"17999:28:69","nodeType":"YulAssignment","src":"17999:28:69","value":{"arguments":[{"name":"pos","nativeSrc":"18017:3:69","nodeType":"YulIdentifier","src":"18017:3:69"},{"kind":"number","nativeSrc":"18022:4:69","nodeType":"YulLiteral","src":"18022:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18013:3:69","nodeType":"YulIdentifier","src":"18013:3:69"},"nativeSrc":"18013:14:69","nodeType":"YulFunctionCall","src":"18013:14:69"},"variableNames":[{"name":"updatedPos","nativeSrc":"17999:10:69","nodeType":"YulIdentifier","src":"17999:10:69"}]}]},"name":"abi_encodeUpdatedPos_t_contract$_VToken_$15506_to_t_address","nativeSrc":"17822:211:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value0","nativeSrc":"17891:6:69","nodeType":"YulTypedName","src":"17891:6:69","type":""},{"name":"pos","nativeSrc":"17899:3:69","nodeType":"YulTypedName","src":"17899:3:69","type":""}],"returnVariables":[{"name":"updatedPos","nativeSrc":"17907:10:69","nodeType":"YulTypedName","src":"17907:10:69","type":""}],"src":"17822:211:69"},{"body":{"nativeSrc":"18130:38:69","nodeType":"YulBlock","src":"18130:38:69","statements":[{"nativeSrc":"18140:22:69","nodeType":"YulAssignment","src":"18140:22:69","value":{"arguments":[{"name":"ptr","nativeSrc":"18152:3:69","nodeType":"YulIdentifier","src":"18152:3:69"},{"kind":"number","nativeSrc":"18157:4:69","nodeType":"YulLiteral","src":"18157:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18148:3:69","nodeType":"YulIdentifier","src":"18148:3:69"},"nativeSrc":"18148:14:69","nodeType":"YulFunctionCall","src":"18148:14:69"},"variableNames":[{"name":"next","nativeSrc":"18140:4:69","nodeType":"YulIdentifier","src":"18140:4:69"}]}]},"name":"array_nextElement_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"18039:129:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nativeSrc":"18117:3:69","nodeType":"YulTypedName","src":"18117:3:69","type":""}],"returnVariables":[{"name":"next","nativeSrc":"18125:4:69","nodeType":"YulTypedName","src":"18125:4:69","type":""}],"src":"18039:129:69"},{"body":{"nativeSrc":"18352:672:69","nodeType":"YulBlock","src":"18352:672:69","statements":[{"nativeSrc":"18362:84:69","nodeType":"YulVariableDeclaration","src":"18362:84:69","value":{"arguments":[{"name":"value","nativeSrc":"18440:5:69","nodeType":"YulIdentifier","src":"18440:5:69"}],"functionName":{"name":"array_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"18376:63:69","nodeType":"YulIdentifier","src":"18376:63:69"},"nativeSrc":"18376:70:69","nodeType":"YulFunctionCall","src":"18376:70:69"},"variables":[{"name":"length","nativeSrc":"18366:6:69","nodeType":"YulTypedName","src":"18366:6:69","type":""}]},{"nativeSrc":"18455:93:69","nodeType":"YulAssignment","src":"18455:93:69","value":{"arguments":[{"name":"pos","nativeSrc":"18536:3:69","nodeType":"YulIdentifier","src":"18536:3:69"},{"name":"length","nativeSrc":"18541:6:69","nodeType":"YulIdentifier","src":"18541:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack","nativeSrc":"18462:73:69","nodeType":"YulIdentifier","src":"18462:73:69"},"nativeSrc":"18462:86:69","nodeType":"YulFunctionCall","src":"18462:86:69"},"variableNames":[{"name":"pos","nativeSrc":"18455:3:69","nodeType":"YulIdentifier","src":"18455:3:69"}]},{"nativeSrc":"18557:87:69","nodeType":"YulVariableDeclaration","src":"18557:87:69","value":{"arguments":[{"name":"value","nativeSrc":"18638:5:69","nodeType":"YulIdentifier","src":"18638:5:69"}],"functionName":{"name":"array_dataslot_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"18572:65:69","nodeType":"YulIdentifier","src":"18572:65:69"},"nativeSrc":"18572:72:69","nodeType":"YulFunctionCall","src":"18572:72:69"},"variables":[{"name":"baseRef","nativeSrc":"18561:7:69","nodeType":"YulTypedName","src":"18561:7:69","type":""}]},{"nativeSrc":"18653:21:69","nodeType":"YulVariableDeclaration","src":"18653:21:69","value":{"name":"baseRef","nativeSrc":"18667:7:69","nodeType":"YulIdentifier","src":"18667:7:69"},"variables":[{"name":"srcPtr","nativeSrc":"18657:6:69","nodeType":"YulTypedName","src":"18657:6:69","type":""}]},{"body":{"nativeSrc":"18743:256:69","nodeType":"YulBlock","src":"18743:256:69","statements":[{"nativeSrc":"18757:34:69","nodeType":"YulVariableDeclaration","src":"18757:34:69","value":{"arguments":[{"name":"srcPtr","nativeSrc":"18784:6:69","nodeType":"YulIdentifier","src":"18784:6:69"}],"functionName":{"name":"mload","nativeSrc":"18778:5:69","nodeType":"YulIdentifier","src":"18778:5:69"},"nativeSrc":"18778:13:69","nodeType":"YulFunctionCall","src":"18778:13:69"},"variables":[{"name":"elementValue0","nativeSrc":"18761:13:69","nodeType":"YulTypedName","src":"18761:13:69","type":""}]},{"nativeSrc":"18804:86:69","nodeType":"YulAssignment","src":"18804:86:69","value":{"arguments":[{"name":"elementValue0","nativeSrc":"18871:13:69","nodeType":"YulIdentifier","src":"18871:13:69"},{"name":"pos","nativeSrc":"18886:3:69","nodeType":"YulIdentifier","src":"18886:3:69"}],"functionName":{"name":"abi_encodeUpdatedPos_t_contract$_VToken_$15506_to_t_address","nativeSrc":"18811:59:69","nodeType":"YulIdentifier","src":"18811:59:69"},"nativeSrc":"18811:79:69","nodeType":"YulFunctionCall","src":"18811:79:69"},"variableNames":[{"name":"pos","nativeSrc":"18804:3:69","nodeType":"YulIdentifier","src":"18804:3:69"}]},{"nativeSrc":"18903:86:69","nodeType":"YulAssignment","src":"18903:86:69","value":{"arguments":[{"name":"srcPtr","nativeSrc":"18982:6:69","nodeType":"YulIdentifier","src":"18982:6:69"}],"functionName":{"name":"array_nextElement_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr","nativeSrc":"18913:68:69","nodeType":"YulIdentifier","src":"18913:68:69"},"nativeSrc":"18913:76:69","nodeType":"YulFunctionCall","src":"18913:76:69"},"variableNames":[{"name":"srcPtr","nativeSrc":"18903:6:69","nodeType":"YulIdentifier","src":"18903:6:69"}]}]},"condition":{"arguments":[{"name":"i","nativeSrc":"18705:1:69","nodeType":"YulIdentifier","src":"18705:1:69"},{"name":"length","nativeSrc":"18708:6:69","nodeType":"YulIdentifier","src":"18708:6:69"}],"functionName":{"name":"lt","nativeSrc":"18702:2:69","nodeType":"YulIdentifier","src":"18702:2:69"},"nativeSrc":"18702:13:69","nodeType":"YulFunctionCall","src":"18702:13:69"},"nativeSrc":"18683:316:69","nodeType":"YulForLoop","post":{"nativeSrc":"18716:18:69","nodeType":"YulBlock","src":"18716:18:69","statements":[{"nativeSrc":"18718:14:69","nodeType":"YulAssignment","src":"18718:14:69","value":{"arguments":[{"name":"i","nativeSrc":"18727:1:69","nodeType":"YulIdentifier","src":"18727:1:69"},{"kind":"number","nativeSrc":"18730:1:69","nodeType":"YulLiteral","src":"18730:1:69","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"18723:3:69","nodeType":"YulIdentifier","src":"18723:3:69"},"nativeSrc":"18723:9:69","nodeType":"YulFunctionCall","src":"18723:9:69"},"variableNames":[{"name":"i","nativeSrc":"18718:1:69","nodeType":"YulIdentifier","src":"18718:1:69"}]}]},"pre":{"nativeSrc":"18687:14:69","nodeType":"YulBlock","src":"18687:14:69","statements":[{"nativeSrc":"18689:10:69","nodeType":"YulVariableDeclaration","src":"18689:10:69","value":{"kind":"number","nativeSrc":"18698:1:69","nodeType":"YulLiteral","src":"18698:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"18693:1:69","nodeType":"YulTypedName","src":"18693:1:69","type":""}]}]},"src":"18683:316:69"},{"nativeSrc":"19008:10:69","nodeType":"YulAssignment","src":"19008:10:69","value":{"name":"pos","nativeSrc":"19015:3:69","nodeType":"YulIdentifier","src":"19015:3:69"},"variableNames":[{"name":"end","nativeSrc":"19008:3:69","nodeType":"YulIdentifier","src":"19008:3:69"}]}]},"name":"abi_encode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack","nativeSrc":"18212:812:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"18331:5:69","nodeType":"YulTypedName","src":"18331:5:69","type":""},{"name":"pos","nativeSrc":"18338:3:69","nodeType":"YulTypedName","src":"18338:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"18347:3:69","nodeType":"YulTypedName","src":"18347:3:69","type":""}],"src":"18212:812:69"},{"body":{"nativeSrc":"19222:323:69","nodeType":"YulBlock","src":"19222:323:69","statements":[{"nativeSrc":"19232:26:69","nodeType":"YulAssignment","src":"19232:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"19244:9:69","nodeType":"YulIdentifier","src":"19244:9:69"},{"kind":"number","nativeSrc":"19255:2:69","nodeType":"YulLiteral","src":"19255:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"19240:3:69","nodeType":"YulIdentifier","src":"19240:3:69"},"nativeSrc":"19240:18:69","nodeType":"YulFunctionCall","src":"19240:18:69"},"variableNames":[{"name":"tail","nativeSrc":"19232:4:69","nodeType":"YulIdentifier","src":"19232:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"19312:6:69","nodeType":"YulIdentifier","src":"19312:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"19325:9:69","nodeType":"YulIdentifier","src":"19325:9:69"},{"kind":"number","nativeSrc":"19336:1:69","nodeType":"YulLiteral","src":"19336:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"19321:3:69","nodeType":"YulIdentifier","src":"19321:3:69"},"nativeSrc":"19321:17:69","nodeType":"YulFunctionCall","src":"19321:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"19268:43:69","nodeType":"YulIdentifier","src":"19268:43:69"},"nativeSrc":"19268:71:69","nodeType":"YulFunctionCall","src":"19268:71:69"},"nativeSrc":"19268:71:69","nodeType":"YulExpressionStatement","src":"19268:71:69"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"19360:9:69","nodeType":"YulIdentifier","src":"19360:9:69"},{"kind":"number","nativeSrc":"19371:2:69","nodeType":"YulLiteral","src":"19371:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"19356:3:69","nodeType":"YulIdentifier","src":"19356:3:69"},"nativeSrc":"19356:18:69","nodeType":"YulFunctionCall","src":"19356:18:69"},{"arguments":[{"name":"tail","nativeSrc":"19380:4:69","nodeType":"YulIdentifier","src":"19380:4:69"},{"name":"headStart","nativeSrc":"19386:9:69","nodeType":"YulIdentifier","src":"19386:9:69"}],"functionName":{"name":"sub","nativeSrc":"19376:3:69","nodeType":"YulIdentifier","src":"19376:3:69"},"nativeSrc":"19376:20:69","nodeType":"YulFunctionCall","src":"19376:20:69"}],"functionName":{"name":"mstore","nativeSrc":"19349:6:69","nodeType":"YulIdentifier","src":"19349:6:69"},"nativeSrc":"19349:48:69","nodeType":"YulFunctionCall","src":"19349:48:69"},"nativeSrc":"19349:48:69","nodeType":"YulExpressionStatement","src":"19349:48:69"},{"nativeSrc":"19406:132:69","nodeType":"YulAssignment","src":"19406:132:69","value":{"arguments":[{"name":"value1","nativeSrc":"19524:6:69","nodeType":"YulIdentifier","src":"19524:6:69"},{"name":"tail","nativeSrc":"19533:4:69","nodeType":"YulIdentifier","src":"19533:4:69"}],"functionName":{"name":"abi_encode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack","nativeSrc":"19414:109:69","nodeType":"YulIdentifier","src":"19414:109:69"},"nativeSrc":"19414:124:69","nodeType":"YulFunctionCall","src":"19414:124:69"},"variableNames":[{"name":"tail","nativeSrc":"19406:4:69","nodeType":"YulIdentifier","src":"19406:4:69"}]}]},"name":"abi_encode_tuple_t_address_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr__to_t_address_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nativeSrc":"19030:515:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"19186:9:69","nodeType":"YulTypedName","src":"19186:9:69","type":""},{"name":"value1","nativeSrc":"19198:6:69","nodeType":"YulTypedName","src":"19198:6:69","type":""},{"name":"value0","nativeSrc":"19206:6:69","nodeType":"YulTypedName","src":"19206:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"19217:4:69","nodeType":"YulTypedName","src":"19217:4:69","type":""}],"src":"19030:515:69"},{"body":{"nativeSrc":"19579:152:69","nodeType":"YulBlock","src":"19579:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"19596:1:69","nodeType":"YulLiteral","src":"19596:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"19599:77:69","nodeType":"YulLiteral","src":"19599:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"19589:6:69","nodeType":"YulIdentifier","src":"19589:6:69"},"nativeSrc":"19589:88:69","nodeType":"YulFunctionCall","src":"19589:88:69"},"nativeSrc":"19589:88:69","nodeType":"YulExpressionStatement","src":"19589:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"19693:1:69","nodeType":"YulLiteral","src":"19693:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"19696:4:69","nodeType":"YulLiteral","src":"19696:4:69","type":"","value":"0x21"}],"functionName":{"name":"mstore","nativeSrc":"19686:6:69","nodeType":"YulIdentifier","src":"19686:6:69"},"nativeSrc":"19686:15:69","nodeType":"YulFunctionCall","src":"19686:15:69"},"nativeSrc":"19686:15:69","nodeType":"YulExpressionStatement","src":"19686:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"19717:1:69","nodeType":"YulLiteral","src":"19717:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"19720:4:69","nodeType":"YulLiteral","src":"19720:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"19710:6:69","nodeType":"YulIdentifier","src":"19710:6:69"},"nativeSrc":"19710:15:69","nodeType":"YulFunctionCall","src":"19710:15:69"},"nativeSrc":"19710:15:69","nodeType":"YulExpressionStatement","src":"19710:15:69"}]},"name":"panic_error_0x21","nativeSrc":"19551:180:69","nodeType":"YulFunctionDefinition","src":"19551:180:69"},{"body":{"nativeSrc":"19796:62:69","nodeType":"YulBlock","src":"19796:62:69","statements":[{"body":{"nativeSrc":"19830:22:69","nodeType":"YulBlock","src":"19830:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x21","nativeSrc":"19832:16:69","nodeType":"YulIdentifier","src":"19832:16:69"},"nativeSrc":"19832:18:69","nodeType":"YulFunctionCall","src":"19832:18:69"},"nativeSrc":"19832:18:69","nodeType":"YulExpressionStatement","src":"19832:18:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"19819:5:69","nodeType":"YulIdentifier","src":"19819:5:69"},{"kind":"number","nativeSrc":"19826:1:69","nodeType":"YulLiteral","src":"19826:1:69","type":"","value":"4"}],"functionName":{"name":"lt","nativeSrc":"19816:2:69","nodeType":"YulIdentifier","src":"19816:2:69"},"nativeSrc":"19816:12:69","nodeType":"YulFunctionCall","src":"19816:12:69"}],"functionName":{"name":"iszero","nativeSrc":"19809:6:69","nodeType":"YulIdentifier","src":"19809:6:69"},"nativeSrc":"19809:20:69","nodeType":"YulFunctionCall","src":"19809:20:69"},"nativeSrc":"19806:46:69","nodeType":"YulIf","src":"19806:46:69"}]},"name":"validator_assert_t_enum$_IncomeType_$16797","nativeSrc":"19737:121:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"19789:5:69","nodeType":"YulTypedName","src":"19789:5:69","type":""}],"src":"19737:121:69"},{"body":{"nativeSrc":"19925:82:69","nodeType":"YulBlock","src":"19925:82:69","statements":[{"nativeSrc":"19935:16:69","nodeType":"YulAssignment","src":"19935:16:69","value":{"name":"value","nativeSrc":"19946:5:69","nodeType":"YulIdentifier","src":"19946:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"19935:7:69","nodeType":"YulIdentifier","src":"19935:7:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"19995:5:69","nodeType":"YulIdentifier","src":"19995:5:69"}],"functionName":{"name":"validator_assert_t_enum$_IncomeType_$16797","nativeSrc":"19952:42:69","nodeType":"YulIdentifier","src":"19952:42:69"},"nativeSrc":"19952:49:69","nodeType":"YulFunctionCall","src":"19952:49:69"},"nativeSrc":"19952:49:69","nodeType":"YulExpressionStatement","src":"19952:49:69"}]},"name":"cleanup_t_enum$_IncomeType_$16797","nativeSrc":"19864:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"19907:5:69","nodeType":"YulTypedName","src":"19907:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"19917:7:69","nodeType":"YulTypedName","src":"19917:7:69","type":""}],"src":"19864:143:69"},{"body":{"nativeSrc":"20087:69:69","nodeType":"YulBlock","src":"20087:69:69","statements":[{"nativeSrc":"20097:53:69","nodeType":"YulAssignment","src":"20097:53:69","value":{"arguments":[{"name":"value","nativeSrc":"20144:5:69","nodeType":"YulIdentifier","src":"20144:5:69"}],"functionName":{"name":"cleanup_t_enum$_IncomeType_$16797","nativeSrc":"20110:33:69","nodeType":"YulIdentifier","src":"20110:33:69"},"nativeSrc":"20110:40:69","nodeType":"YulFunctionCall","src":"20110:40:69"},"variableNames":[{"name":"converted","nativeSrc":"20097:9:69","nodeType":"YulIdentifier","src":"20097:9:69"}]}]},"name":"convert_t_enum$_IncomeType_$16797_to_t_uint8","nativeSrc":"20013:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"20067:5:69","nodeType":"YulTypedName","src":"20067:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"20077:9:69","nodeType":"YulTypedName","src":"20077:9:69","type":""}],"src":"20013:143:69"},{"body":{"nativeSrc":"20241:80:69","nodeType":"YulBlock","src":"20241:80:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"20258:3:69","nodeType":"YulIdentifier","src":"20258:3:69"},{"arguments":[{"name":"value","nativeSrc":"20308:5:69","nodeType":"YulIdentifier","src":"20308:5:69"}],"functionName":{"name":"convert_t_enum$_IncomeType_$16797_to_t_uint8","nativeSrc":"20263:44:69","nodeType":"YulIdentifier","src":"20263:44:69"},"nativeSrc":"20263:51:69","nodeType":"YulFunctionCall","src":"20263:51:69"}],"functionName":{"name":"mstore","nativeSrc":"20251:6:69","nodeType":"YulIdentifier","src":"20251:6:69"},"nativeSrc":"20251:64:69","nodeType":"YulFunctionCall","src":"20251:64:69"},"nativeSrc":"20251:64:69","nodeType":"YulExpressionStatement","src":"20251:64:69"}]},"name":"abi_encode_t_enum$_IncomeType_$16797_to_t_uint8_fromStack","nativeSrc":"20162:159:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"20229:5:69","nodeType":"YulTypedName","src":"20229:5:69","type":""},{"name":"pos","nativeSrc":"20236:3:69","nodeType":"YulTypedName","src":"20236:3:69","type":""}],"src":"20162:159:69"},{"body":{"nativeSrc":"20495:302:69","nodeType":"YulBlock","src":"20495:302:69","statements":[{"nativeSrc":"20505:26:69","nodeType":"YulAssignment","src":"20505:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"20517:9:69","nodeType":"YulIdentifier","src":"20517:9:69"},{"kind":"number","nativeSrc":"20528:2:69","nodeType":"YulLiteral","src":"20528:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"20513:3:69","nodeType":"YulIdentifier","src":"20513:3:69"},"nativeSrc":"20513:18:69","nodeType":"YulFunctionCall","src":"20513:18:69"},"variableNames":[{"name":"tail","nativeSrc":"20505:4:69","nodeType":"YulIdentifier","src":"20505:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"20585:6:69","nodeType":"YulIdentifier","src":"20585:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"20598:9:69","nodeType":"YulIdentifier","src":"20598:9:69"},{"kind":"number","nativeSrc":"20609:1:69","nodeType":"YulLiteral","src":"20609:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"20594:3:69","nodeType":"YulIdentifier","src":"20594:3:69"},"nativeSrc":"20594:17:69","nodeType":"YulFunctionCall","src":"20594:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"20541:43:69","nodeType":"YulIdentifier","src":"20541:43:69"},"nativeSrc":"20541:71:69","nodeType":"YulFunctionCall","src":"20541:71:69"},"nativeSrc":"20541:71:69","nodeType":"YulExpressionStatement","src":"20541:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"20666:6:69","nodeType":"YulIdentifier","src":"20666:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"20679:9:69","nodeType":"YulIdentifier","src":"20679:9:69"},{"kind":"number","nativeSrc":"20690:2:69","nodeType":"YulLiteral","src":"20690:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"20675:3:69","nodeType":"YulIdentifier","src":"20675:3:69"},"nativeSrc":"20675:18:69","nodeType":"YulFunctionCall","src":"20675:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"20622:43:69","nodeType":"YulIdentifier","src":"20622:43:69"},"nativeSrc":"20622:72:69","nodeType":"YulFunctionCall","src":"20622:72:69"},"nativeSrc":"20622:72:69","nodeType":"YulExpressionStatement","src":"20622:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"20762:6:69","nodeType":"YulIdentifier","src":"20762:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"20775:9:69","nodeType":"YulIdentifier","src":"20775:9:69"},{"kind":"number","nativeSrc":"20786:2:69","nodeType":"YulLiteral","src":"20786:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"20771:3:69","nodeType":"YulIdentifier","src":"20771:3:69"},"nativeSrc":"20771:18:69","nodeType":"YulFunctionCall","src":"20771:18:69"}],"functionName":{"name":"abi_encode_t_enum$_IncomeType_$16797_to_t_uint8_fromStack","nativeSrc":"20704:57:69","nodeType":"YulIdentifier","src":"20704:57:69"},"nativeSrc":"20704:86:69","nodeType":"YulFunctionCall","src":"20704:86:69"},"nativeSrc":"20704:86:69","nodeType":"YulExpressionStatement","src":"20704:86:69"}]},"name":"abi_encode_tuple_t_address_t_address_t_enum$_IncomeType_$16797__to_t_address_t_address_t_uint8__fromStack_reversed","nativeSrc":"20327:470:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"20451:9:69","nodeType":"YulTypedName","src":"20451:9:69","type":""},{"name":"value2","nativeSrc":"20463:6:69","nodeType":"YulTypedName","src":"20463:6:69","type":""},{"name":"value1","nativeSrc":"20471:6:69","nodeType":"YulTypedName","src":"20471:6:69","type":""},{"name":"value0","nativeSrc":"20479:6:69","nodeType":"YulTypedName","src":"20479:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"20490:4:69","nodeType":"YulTypedName","src":"20490:4:69","type":""}],"src":"20327:470:69"},{"body":{"nativeSrc":"20847:147:69","nodeType":"YulBlock","src":"20847:147:69","statements":[{"nativeSrc":"20857:25:69","nodeType":"YulAssignment","src":"20857:25:69","value":{"arguments":[{"name":"x","nativeSrc":"20880:1:69","nodeType":"YulIdentifier","src":"20880:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"20862:17:69","nodeType":"YulIdentifier","src":"20862:17:69"},"nativeSrc":"20862:20:69","nodeType":"YulFunctionCall","src":"20862:20:69"},"variableNames":[{"name":"x","nativeSrc":"20857:1:69","nodeType":"YulIdentifier","src":"20857:1:69"}]},{"nativeSrc":"20891:25:69","nodeType":"YulAssignment","src":"20891:25:69","value":{"arguments":[{"name":"y","nativeSrc":"20914:1:69","nodeType":"YulIdentifier","src":"20914:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"20896:17:69","nodeType":"YulIdentifier","src":"20896:17:69"},"nativeSrc":"20896:20:69","nodeType":"YulFunctionCall","src":"20896:20:69"},"variableNames":[{"name":"y","nativeSrc":"20891:1:69","nodeType":"YulIdentifier","src":"20891:1:69"}]},{"nativeSrc":"20925:16:69","nodeType":"YulAssignment","src":"20925:16:69","value":{"arguments":[{"name":"x","nativeSrc":"20936:1:69","nodeType":"YulIdentifier","src":"20936:1:69"},{"name":"y","nativeSrc":"20939:1:69","nodeType":"YulIdentifier","src":"20939:1:69"}],"functionName":{"name":"add","nativeSrc":"20932:3:69","nodeType":"YulIdentifier","src":"20932:3:69"},"nativeSrc":"20932:9:69","nodeType":"YulFunctionCall","src":"20932:9:69"},"variableNames":[{"name":"sum","nativeSrc":"20925:3:69","nodeType":"YulIdentifier","src":"20925:3:69"}]},{"body":{"nativeSrc":"20965:22:69","nodeType":"YulBlock","src":"20965:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"20967:16:69","nodeType":"YulIdentifier","src":"20967:16:69"},"nativeSrc":"20967:18:69","nodeType":"YulFunctionCall","src":"20967:18:69"},"nativeSrc":"20967:18:69","nodeType":"YulExpressionStatement","src":"20967:18:69"}]},"condition":{"arguments":[{"name":"x","nativeSrc":"20957:1:69","nodeType":"YulIdentifier","src":"20957:1:69"},{"name":"sum","nativeSrc":"20960:3:69","nodeType":"YulIdentifier","src":"20960:3:69"}],"functionName":{"name":"gt","nativeSrc":"20954:2:69","nodeType":"YulIdentifier","src":"20954:2:69"},"nativeSrc":"20954:10:69","nodeType":"YulFunctionCall","src":"20954:10:69"},"nativeSrc":"20951:36:69","nodeType":"YulIf","src":"20951:36:69"}]},"name":"checked_add_t_uint256","nativeSrc":"20803:191:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"20834:1:69","nodeType":"YulTypedName","src":"20834:1:69","type":""},{"name":"y","nativeSrc":"20837:1:69","nodeType":"YulTypedName","src":"20837:1:69","type":""}],"returnVariables":[{"name":"sum","nativeSrc":"20843:3:69","nodeType":"YulTypedName","src":"20843:3:69","type":""}],"src":"20803:191:69"},{"body":{"nativeSrc":"21106:127:69","nodeType":"YulBlock","src":"21106:127:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"21128:6:69","nodeType":"YulIdentifier","src":"21128:6:69"},{"kind":"number","nativeSrc":"21136:1:69","nodeType":"YulLiteral","src":"21136:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"21124:3:69","nodeType":"YulIdentifier","src":"21124:3:69"},"nativeSrc":"21124:14:69","nodeType":"YulFunctionCall","src":"21124:14:69"},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320616c726561","kind":"string","nativeSrc":"21140:34:69","nodeType":"YulLiteral","src":"21140:34:69","type":"","value":"Initializable: contract is alrea"}],"functionName":{"name":"mstore","nativeSrc":"21117:6:69","nodeType":"YulIdentifier","src":"21117:6:69"},"nativeSrc":"21117:58:69","nodeType":"YulFunctionCall","src":"21117:58:69"},"nativeSrc":"21117:58:69","nodeType":"YulExpressionStatement","src":"21117:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"21196:6:69","nodeType":"YulIdentifier","src":"21196:6:69"},{"kind":"number","nativeSrc":"21204:2:69","nodeType":"YulLiteral","src":"21204:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"21192:3:69","nodeType":"YulIdentifier","src":"21192:3:69"},"nativeSrc":"21192:15:69","nodeType":"YulFunctionCall","src":"21192:15:69"},{"hexValue":"647920696e697469616c697a6564","kind":"string","nativeSrc":"21209:16:69","nodeType":"YulLiteral","src":"21209:16:69","type":"","value":"dy initialized"}],"functionName":{"name":"mstore","nativeSrc":"21185:6:69","nodeType":"YulIdentifier","src":"21185:6:69"},"nativeSrc":"21185:41:69","nodeType":"YulFunctionCall","src":"21185:41:69"},"nativeSrc":"21185:41:69","nodeType":"YulExpressionStatement","src":"21185:41:69"}]},"name":"store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","nativeSrc":"21000:233:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"21098:6:69","nodeType":"YulTypedName","src":"21098:6:69","type":""}],"src":"21000:233:69"},{"body":{"nativeSrc":"21385:220:69","nodeType":"YulBlock","src":"21385:220:69","statements":[{"nativeSrc":"21395:74:69","nodeType":"YulAssignment","src":"21395:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"21461:3:69","nodeType":"YulIdentifier","src":"21461:3:69"},{"kind":"number","nativeSrc":"21466:2:69","nodeType":"YulLiteral","src":"21466:2:69","type":"","value":"46"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"21402:58:69","nodeType":"YulIdentifier","src":"21402:58:69"},"nativeSrc":"21402:67:69","nodeType":"YulFunctionCall","src":"21402:67:69"},"variableNames":[{"name":"pos","nativeSrc":"21395:3:69","nodeType":"YulIdentifier","src":"21395:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"21567:3:69","nodeType":"YulIdentifier","src":"21567:3:69"}],"functionName":{"name":"store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","nativeSrc":"21478:88:69","nodeType":"YulIdentifier","src":"21478:88:69"},"nativeSrc":"21478:93:69","nodeType":"YulFunctionCall","src":"21478:93:69"},"nativeSrc":"21478:93:69","nodeType":"YulExpressionStatement","src":"21478:93:69"},{"nativeSrc":"21580:19:69","nodeType":"YulAssignment","src":"21580:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"21591:3:69","nodeType":"YulIdentifier","src":"21591:3:69"},{"kind":"number","nativeSrc":"21596:2:69","nodeType":"YulLiteral","src":"21596:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"21587:3:69","nodeType":"YulIdentifier","src":"21587:3:69"},"nativeSrc":"21587:12:69","nodeType":"YulFunctionCall","src":"21587:12:69"},"variableNames":[{"name":"end","nativeSrc":"21580:3:69","nodeType":"YulIdentifier","src":"21580:3:69"}]}]},"name":"abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack","nativeSrc":"21239:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"21373:3:69","nodeType":"YulTypedName","src":"21373:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"21381:3:69","nodeType":"YulTypedName","src":"21381:3:69","type":""}],"src":"21239:366:69"},{"body":{"nativeSrc":"21782:248:69","nodeType":"YulBlock","src":"21782:248:69","statements":[{"nativeSrc":"21792:26:69","nodeType":"YulAssignment","src":"21792:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"21804:9:69","nodeType":"YulIdentifier","src":"21804:9:69"},{"kind":"number","nativeSrc":"21815:2:69","nodeType":"YulLiteral","src":"21815:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"21800:3:69","nodeType":"YulIdentifier","src":"21800:3:69"},"nativeSrc":"21800:18:69","nodeType":"YulFunctionCall","src":"21800:18:69"},"variableNames":[{"name":"tail","nativeSrc":"21792:4:69","nodeType":"YulIdentifier","src":"21792:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"21839:9:69","nodeType":"YulIdentifier","src":"21839:9:69"},{"kind":"number","nativeSrc":"21850:1:69","nodeType":"YulLiteral","src":"21850:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"21835:3:69","nodeType":"YulIdentifier","src":"21835:3:69"},"nativeSrc":"21835:17:69","nodeType":"YulFunctionCall","src":"21835:17:69"},{"arguments":[{"name":"tail","nativeSrc":"21858:4:69","nodeType":"YulIdentifier","src":"21858:4:69"},{"name":"headStart","nativeSrc":"21864:9:69","nodeType":"YulIdentifier","src":"21864:9:69"}],"functionName":{"name":"sub","nativeSrc":"21854:3:69","nodeType":"YulIdentifier","src":"21854:3:69"},"nativeSrc":"21854:20:69","nodeType":"YulFunctionCall","src":"21854:20:69"}],"functionName":{"name":"mstore","nativeSrc":"21828:6:69","nodeType":"YulIdentifier","src":"21828:6:69"},"nativeSrc":"21828:47:69","nodeType":"YulFunctionCall","src":"21828:47:69"},"nativeSrc":"21828:47:69","nodeType":"YulExpressionStatement","src":"21828:47:69"},{"nativeSrc":"21884:139:69","nodeType":"YulAssignment","src":"21884:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"22018:4:69","nodeType":"YulIdentifier","src":"22018:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack","nativeSrc":"21892:124:69","nodeType":"YulIdentifier","src":"21892:124:69"},"nativeSrc":"21892:131:69","nodeType":"YulFunctionCall","src":"21892:131:69"},"variableNames":[{"name":"tail","nativeSrc":"21884:4:69","nodeType":"YulIdentifier","src":"21884:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"21611:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"21762:9:69","nodeType":"YulTypedName","src":"21762:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"21777:4:69","nodeType":"YulTypedName","src":"21777:4:69","type":""}],"src":"21611:419:69"},{"body":{"nativeSrc":"22142:51:69","nodeType":"YulBlock","src":"22142:51:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"22164:6:69","nodeType":"YulIdentifier","src":"22164:6:69"},{"kind":"number","nativeSrc":"22172:1:69","nodeType":"YulLiteral","src":"22172:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"22160:3:69","nodeType":"YulIdentifier","src":"22160:3:69"},"nativeSrc":"22160:14:69","nodeType":"YulFunctionCall","src":"22160:14:69"},{"hexValue":"6465706f736974","kind":"string","nativeSrc":"22176:9:69","nodeType":"YulLiteral","src":"22176:9:69","type":"","value":"deposit"}],"functionName":{"name":"mstore","nativeSrc":"22153:6:69","nodeType":"YulIdentifier","src":"22153:6:69"},"nativeSrc":"22153:33:69","nodeType":"YulFunctionCall","src":"22153:33:69"},"nativeSrc":"22153:33:69","nodeType":"YulExpressionStatement","src":"22153:33:69"}]},"name":"store_literal_in_memory_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01","nativeSrc":"22036:157:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"22134:6:69","nodeType":"YulTypedName","src":"22134:6:69","type":""}],"src":"22036:157:69"},{"body":{"nativeSrc":"22345:219:69","nodeType":"YulBlock","src":"22345:219:69","statements":[{"nativeSrc":"22355:73:69","nodeType":"YulAssignment","src":"22355:73:69","value":{"arguments":[{"name":"pos","nativeSrc":"22421:3:69","nodeType":"YulIdentifier","src":"22421:3:69"},{"kind":"number","nativeSrc":"22426:1:69","nodeType":"YulLiteral","src":"22426:1:69","type":"","value":"7"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"22362:58:69","nodeType":"YulIdentifier","src":"22362:58:69"},"nativeSrc":"22362:66:69","nodeType":"YulFunctionCall","src":"22362:66:69"},"variableNames":[{"name":"pos","nativeSrc":"22355:3:69","nodeType":"YulIdentifier","src":"22355:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"22526:3:69","nodeType":"YulIdentifier","src":"22526:3:69"}],"functionName":{"name":"store_literal_in_memory_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01","nativeSrc":"22437:88:69","nodeType":"YulIdentifier","src":"22437:88:69"},"nativeSrc":"22437:93:69","nodeType":"YulFunctionCall","src":"22437:93:69"},"nativeSrc":"22437:93:69","nodeType":"YulExpressionStatement","src":"22437:93:69"},{"nativeSrc":"22539:19:69","nodeType":"YulAssignment","src":"22539:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"22550:3:69","nodeType":"YulIdentifier","src":"22550:3:69"},{"kind":"number","nativeSrc":"22555:2:69","nodeType":"YulLiteral","src":"22555:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"22546:3:69","nodeType":"YulIdentifier","src":"22546:3:69"},"nativeSrc":"22546:12:69","nodeType":"YulFunctionCall","src":"22546:12:69"},"variableNames":[{"name":"end","nativeSrc":"22539:3:69","nodeType":"YulIdentifier","src":"22539:3:69"}]}]},"name":"abi_encode_t_stringliteral_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01_to_t_string_memory_ptr_fromStack","nativeSrc":"22199:365:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"22333:3:69","nodeType":"YulTypedName","src":"22333:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"22341:3:69","nodeType":"YulTypedName","src":"22341:3:69","type":""}],"src":"22199:365:69"},{"body":{"nativeSrc":"22741:248:69","nodeType":"YulBlock","src":"22741:248:69","statements":[{"nativeSrc":"22751:26:69","nodeType":"YulAssignment","src":"22751:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"22763:9:69","nodeType":"YulIdentifier","src":"22763:9:69"},{"kind":"number","nativeSrc":"22774:2:69","nodeType":"YulLiteral","src":"22774:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"22759:3:69","nodeType":"YulIdentifier","src":"22759:3:69"},"nativeSrc":"22759:18:69","nodeType":"YulFunctionCall","src":"22759:18:69"},"variableNames":[{"name":"tail","nativeSrc":"22751:4:69","nodeType":"YulIdentifier","src":"22751:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"22798:9:69","nodeType":"YulIdentifier","src":"22798:9:69"},{"kind":"number","nativeSrc":"22809:1:69","nodeType":"YulLiteral","src":"22809:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"22794:3:69","nodeType":"YulIdentifier","src":"22794:3:69"},"nativeSrc":"22794:17:69","nodeType":"YulFunctionCall","src":"22794:17:69"},{"arguments":[{"name":"tail","nativeSrc":"22817:4:69","nodeType":"YulIdentifier","src":"22817:4:69"},{"name":"headStart","nativeSrc":"22823:9:69","nodeType":"YulIdentifier","src":"22823:9:69"}],"functionName":{"name":"sub","nativeSrc":"22813:3:69","nodeType":"YulIdentifier","src":"22813:3:69"},"nativeSrc":"22813:20:69","nodeType":"YulFunctionCall","src":"22813:20:69"}],"functionName":{"name":"mstore","nativeSrc":"22787:6:69","nodeType":"YulIdentifier","src":"22787:6:69"},"nativeSrc":"22787:47:69","nodeType":"YulFunctionCall","src":"22787:47:69"},"nativeSrc":"22787:47:69","nodeType":"YulExpressionStatement","src":"22787:47:69"},{"nativeSrc":"22843:139:69","nodeType":"YulAssignment","src":"22843:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"22977:4:69","nodeType":"YulIdentifier","src":"22977:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01_to_t_string_memory_ptr_fromStack","nativeSrc":"22851:124:69","nodeType":"YulIdentifier","src":"22851:124:69"},"nativeSrc":"22851:131:69","nodeType":"YulFunctionCall","src":"22851:131:69"},"variableNames":[{"name":"tail","nativeSrc":"22843:4:69","nodeType":"YulIdentifier","src":"22843:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"22570:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"22721:9:69","nodeType":"YulTypedName","src":"22721:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"22736:4:69","nodeType":"YulTypedName","src":"22736:4:69","type":""}],"src":"22570:419:69"},{"body":{"nativeSrc":"23040:149:69","nodeType":"YulBlock","src":"23040:149:69","statements":[{"nativeSrc":"23050:25:69","nodeType":"YulAssignment","src":"23050:25:69","value":{"arguments":[{"name":"x","nativeSrc":"23073:1:69","nodeType":"YulIdentifier","src":"23073:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"23055:17:69","nodeType":"YulIdentifier","src":"23055:17:69"},"nativeSrc":"23055:20:69","nodeType":"YulFunctionCall","src":"23055:20:69"},"variableNames":[{"name":"x","nativeSrc":"23050:1:69","nodeType":"YulIdentifier","src":"23050:1:69"}]},{"nativeSrc":"23084:25:69","nodeType":"YulAssignment","src":"23084:25:69","value":{"arguments":[{"name":"y","nativeSrc":"23107:1:69","nodeType":"YulIdentifier","src":"23107:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"23089:17:69","nodeType":"YulIdentifier","src":"23089:17:69"},"nativeSrc":"23089:20:69","nodeType":"YulFunctionCall","src":"23089:20:69"},"variableNames":[{"name":"y","nativeSrc":"23084:1:69","nodeType":"YulIdentifier","src":"23084:1:69"}]},{"nativeSrc":"23118:17:69","nodeType":"YulAssignment","src":"23118:17:69","value":{"arguments":[{"name":"x","nativeSrc":"23130:1:69","nodeType":"YulIdentifier","src":"23130:1:69"},{"name":"y","nativeSrc":"23133:1:69","nodeType":"YulIdentifier","src":"23133:1:69"}],"functionName":{"name":"sub","nativeSrc":"23126:3:69","nodeType":"YulIdentifier","src":"23126:3:69"},"nativeSrc":"23126:9:69","nodeType":"YulFunctionCall","src":"23126:9:69"},"variableNames":[{"name":"diff","nativeSrc":"23118:4:69","nodeType":"YulIdentifier","src":"23118:4:69"}]},{"body":{"nativeSrc":"23160:22:69","nodeType":"YulBlock","src":"23160:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"23162:16:69","nodeType":"YulIdentifier","src":"23162:16:69"},"nativeSrc":"23162:18:69","nodeType":"YulFunctionCall","src":"23162:18:69"},"nativeSrc":"23162:18:69","nodeType":"YulExpressionStatement","src":"23162:18:69"}]},"condition":{"arguments":[{"name":"diff","nativeSrc":"23151:4:69","nodeType":"YulIdentifier","src":"23151:4:69"},{"name":"x","nativeSrc":"23157:1:69","nodeType":"YulIdentifier","src":"23157:1:69"}],"functionName":{"name":"gt","nativeSrc":"23148:2:69","nodeType":"YulIdentifier","src":"23148:2:69"},"nativeSrc":"23148:11:69","nodeType":"YulFunctionCall","src":"23148:11:69"},"nativeSrc":"23145:37:69","nodeType":"YulIf","src":"23145:37:69"}]},"name":"checked_sub_t_uint256","nativeSrc":"22995:194:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"23026:1:69","nodeType":"YulTypedName","src":"23026:1:69","type":""},{"name":"y","nativeSrc":"23029:1:69","nodeType":"YulTypedName","src":"23029:1:69","type":""}],"returnVariables":[{"name":"diff","nativeSrc":"23035:4:69","nodeType":"YulTypedName","src":"23035:4:69","type":""}],"src":"22995:194:69"},{"body":{"nativeSrc":"23301:122:69","nodeType":"YulBlock","src":"23301:122:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"23323:6:69","nodeType":"YulIdentifier","src":"23323:6:69"},{"kind":"number","nativeSrc":"23331:1:69","nodeType":"YulLiteral","src":"23331:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"23319:3:69","nodeType":"YulIdentifier","src":"23319:3:69"},"nativeSrc":"23319:14:69","nodeType":"YulFunctionCall","src":"23319:14:69"},{"hexValue":"4f776e61626c6532537465703a2063616c6c6572206973206e6f742074686520","kind":"string","nativeSrc":"23335:34:69","nodeType":"YulLiteral","src":"23335:34:69","type":"","value":"Ownable2Step: caller is not the "}],"functionName":{"name":"mstore","nativeSrc":"23312:6:69","nodeType":"YulIdentifier","src":"23312:6:69"},"nativeSrc":"23312:58:69","nodeType":"YulFunctionCall","src":"23312:58:69"},"nativeSrc":"23312:58:69","nodeType":"YulExpressionStatement","src":"23312:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"23391:6:69","nodeType":"YulIdentifier","src":"23391:6:69"},{"kind":"number","nativeSrc":"23399:2:69","nodeType":"YulLiteral","src":"23399:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"23387:3:69","nodeType":"YulIdentifier","src":"23387:3:69"},"nativeSrc":"23387:15:69","nodeType":"YulFunctionCall","src":"23387:15:69"},{"hexValue":"6e6577206f776e6572","kind":"string","nativeSrc":"23404:11:69","nodeType":"YulLiteral","src":"23404:11:69","type":"","value":"new owner"}],"functionName":{"name":"mstore","nativeSrc":"23380:6:69","nodeType":"YulIdentifier","src":"23380:6:69"},"nativeSrc":"23380:36:69","nodeType":"YulFunctionCall","src":"23380:36:69"},"nativeSrc":"23380:36:69","nodeType":"YulExpressionStatement","src":"23380:36:69"}]},"name":"store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc","nativeSrc":"23195:228:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"23293:6:69","nodeType":"YulTypedName","src":"23293:6:69","type":""}],"src":"23195:228:69"},{"body":{"nativeSrc":"23575:220:69","nodeType":"YulBlock","src":"23575:220:69","statements":[{"nativeSrc":"23585:74:69","nodeType":"YulAssignment","src":"23585:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"23651:3:69","nodeType":"YulIdentifier","src":"23651:3:69"},{"kind":"number","nativeSrc":"23656:2:69","nodeType":"YulLiteral","src":"23656:2:69","type":"","value":"41"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"23592:58:69","nodeType":"YulIdentifier","src":"23592:58:69"},"nativeSrc":"23592:67:69","nodeType":"YulFunctionCall","src":"23592:67:69"},"variableNames":[{"name":"pos","nativeSrc":"23585:3:69","nodeType":"YulIdentifier","src":"23585:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"23757:3:69","nodeType":"YulIdentifier","src":"23757:3:69"}],"functionName":{"name":"store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc","nativeSrc":"23668:88:69","nodeType":"YulIdentifier","src":"23668:88:69"},"nativeSrc":"23668:93:69","nodeType":"YulFunctionCall","src":"23668:93:69"},"nativeSrc":"23668:93:69","nodeType":"YulExpressionStatement","src":"23668:93:69"},{"nativeSrc":"23770:19:69","nodeType":"YulAssignment","src":"23770:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"23781:3:69","nodeType":"YulIdentifier","src":"23781:3:69"},{"kind":"number","nativeSrc":"23786:2:69","nodeType":"YulLiteral","src":"23786:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"23777:3:69","nodeType":"YulIdentifier","src":"23777:3:69"},"nativeSrc":"23777:12:69","nodeType":"YulFunctionCall","src":"23777:12:69"},"variableNames":[{"name":"end","nativeSrc":"23770:3:69","nodeType":"YulIdentifier","src":"23770:3:69"}]}]},"name":"abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack","nativeSrc":"23429:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"23563:3:69","nodeType":"YulTypedName","src":"23563:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"23571:3:69","nodeType":"YulTypedName","src":"23571:3:69","type":""}],"src":"23429:366:69"},{"body":{"nativeSrc":"23972:248:69","nodeType":"YulBlock","src":"23972:248:69","statements":[{"nativeSrc":"23982:26:69","nodeType":"YulAssignment","src":"23982:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"23994:9:69","nodeType":"YulIdentifier","src":"23994:9:69"},{"kind":"number","nativeSrc":"24005:2:69","nodeType":"YulLiteral","src":"24005:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"23990:3:69","nodeType":"YulIdentifier","src":"23990:3:69"},"nativeSrc":"23990:18:69","nodeType":"YulFunctionCall","src":"23990:18:69"},"variableNames":[{"name":"tail","nativeSrc":"23982:4:69","nodeType":"YulIdentifier","src":"23982:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"24029:9:69","nodeType":"YulIdentifier","src":"24029:9:69"},{"kind":"number","nativeSrc":"24040:1:69","nodeType":"YulLiteral","src":"24040:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"24025:3:69","nodeType":"YulIdentifier","src":"24025:3:69"},"nativeSrc":"24025:17:69","nodeType":"YulFunctionCall","src":"24025:17:69"},{"arguments":[{"name":"tail","nativeSrc":"24048:4:69","nodeType":"YulIdentifier","src":"24048:4:69"},{"name":"headStart","nativeSrc":"24054:9:69","nodeType":"YulIdentifier","src":"24054:9:69"}],"functionName":{"name":"sub","nativeSrc":"24044:3:69","nodeType":"YulIdentifier","src":"24044:3:69"},"nativeSrc":"24044:20:69","nodeType":"YulFunctionCall","src":"24044:20:69"}],"functionName":{"name":"mstore","nativeSrc":"24018:6:69","nodeType":"YulIdentifier","src":"24018:6:69"},"nativeSrc":"24018:47:69","nodeType":"YulFunctionCall","src":"24018:47:69"},"nativeSrc":"24018:47:69","nodeType":"YulExpressionStatement","src":"24018:47:69"},{"nativeSrc":"24074:139:69","nodeType":"YulAssignment","src":"24074:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"24208:4:69","nodeType":"YulIdentifier","src":"24208:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack","nativeSrc":"24082:124:69","nodeType":"YulIdentifier","src":"24082:124:69"},"nativeSrc":"24082:131:69","nodeType":"YulFunctionCall","src":"24082:131:69"},"variableNames":[{"name":"tail","nativeSrc":"24074:4:69","nodeType":"YulIdentifier","src":"24074:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"23801:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"23952:9:69","nodeType":"YulTypedName","src":"23952:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"23967:4:69","nodeType":"YulTypedName","src":"23967:4:69","type":""}],"src":"23801:419:69"},{"body":{"nativeSrc":"24332:48:69","nodeType":"YulBlock","src":"24332:48:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"24354:6:69","nodeType":"YulIdentifier","src":"24354:6:69"},{"kind":"number","nativeSrc":"24362:1:69","nodeType":"YulLiteral","src":"24362:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"24350:3:69","nodeType":"YulIdentifier","src":"24350:3:69"},"nativeSrc":"24350:14:69","nodeType":"YulFunctionCall","src":"24350:14:69"},{"hexValue":"6d696e74","kind":"string","nativeSrc":"24366:6:69","nodeType":"YulLiteral","src":"24366:6:69","type":"","value":"mint"}],"functionName":{"name":"mstore","nativeSrc":"24343:6:69","nodeType":"YulIdentifier","src":"24343:6:69"},"nativeSrc":"24343:30:69","nodeType":"YulFunctionCall","src":"24343:30:69"},"nativeSrc":"24343:30:69","nodeType":"YulExpressionStatement","src":"24343:30:69"}]},"name":"store_literal_in_memory_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354","nativeSrc":"24226:154:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"24324:6:69","nodeType":"YulTypedName","src":"24324:6:69","type":""}],"src":"24226:154:69"},{"body":{"nativeSrc":"24532:219:69","nodeType":"YulBlock","src":"24532:219:69","statements":[{"nativeSrc":"24542:73:69","nodeType":"YulAssignment","src":"24542:73:69","value":{"arguments":[{"name":"pos","nativeSrc":"24608:3:69","nodeType":"YulIdentifier","src":"24608:3:69"},{"kind":"number","nativeSrc":"24613:1:69","nodeType":"YulLiteral","src":"24613:1:69","type":"","value":"4"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"24549:58:69","nodeType":"YulIdentifier","src":"24549:58:69"},"nativeSrc":"24549:66:69","nodeType":"YulFunctionCall","src":"24549:66:69"},"variableNames":[{"name":"pos","nativeSrc":"24542:3:69","nodeType":"YulIdentifier","src":"24542:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"24713:3:69","nodeType":"YulIdentifier","src":"24713:3:69"}],"functionName":{"name":"store_literal_in_memory_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354","nativeSrc":"24624:88:69","nodeType":"YulIdentifier","src":"24624:88:69"},"nativeSrc":"24624:93:69","nodeType":"YulFunctionCall","src":"24624:93:69"},"nativeSrc":"24624:93:69","nodeType":"YulExpressionStatement","src":"24624:93:69"},{"nativeSrc":"24726:19:69","nodeType":"YulAssignment","src":"24726:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"24737:3:69","nodeType":"YulIdentifier","src":"24737:3:69"},{"kind":"number","nativeSrc":"24742:2:69","nodeType":"YulLiteral","src":"24742:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"24733:3:69","nodeType":"YulIdentifier","src":"24733:3:69"},"nativeSrc":"24733:12:69","nodeType":"YulFunctionCall","src":"24733:12:69"},"variableNames":[{"name":"end","nativeSrc":"24726:3:69","nodeType":"YulIdentifier","src":"24726:3:69"}]}]},"name":"abi_encode_t_stringliteral_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354_to_t_string_memory_ptr_fromStack","nativeSrc":"24386:365:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"24520:3:69","nodeType":"YulTypedName","src":"24520:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"24528:3:69","nodeType":"YulTypedName","src":"24528:3:69","type":""}],"src":"24386:365:69"},{"body":{"nativeSrc":"24928:248:69","nodeType":"YulBlock","src":"24928:248:69","statements":[{"nativeSrc":"24938:26:69","nodeType":"YulAssignment","src":"24938:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"24950:9:69","nodeType":"YulIdentifier","src":"24950:9:69"},{"kind":"number","nativeSrc":"24961:2:69","nodeType":"YulLiteral","src":"24961:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"24946:3:69","nodeType":"YulIdentifier","src":"24946:3:69"},"nativeSrc":"24946:18:69","nodeType":"YulFunctionCall","src":"24946:18:69"},"variableNames":[{"name":"tail","nativeSrc":"24938:4:69","nodeType":"YulIdentifier","src":"24938:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"24985:9:69","nodeType":"YulIdentifier","src":"24985:9:69"},{"kind":"number","nativeSrc":"24996:1:69","nodeType":"YulLiteral","src":"24996:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"24981:3:69","nodeType":"YulIdentifier","src":"24981:3:69"},"nativeSrc":"24981:17:69","nodeType":"YulFunctionCall","src":"24981:17:69"},{"arguments":[{"name":"tail","nativeSrc":"25004:4:69","nodeType":"YulIdentifier","src":"25004:4:69"},{"name":"headStart","nativeSrc":"25010:9:69","nodeType":"YulIdentifier","src":"25010:9:69"}],"functionName":{"name":"sub","nativeSrc":"25000:3:69","nodeType":"YulIdentifier","src":"25000:3:69"},"nativeSrc":"25000:20:69","nodeType":"YulFunctionCall","src":"25000:20:69"}],"functionName":{"name":"mstore","nativeSrc":"24974:6:69","nodeType":"YulIdentifier","src":"24974:6:69"},"nativeSrc":"24974:47:69","nodeType":"YulFunctionCall","src":"24974:47:69"},"nativeSrc":"24974:47:69","nodeType":"YulExpressionStatement","src":"24974:47:69"},{"nativeSrc":"25030:139:69","nodeType":"YulAssignment","src":"25030:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"25164:4:69","nodeType":"YulIdentifier","src":"25164:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354_to_t_string_memory_ptr_fromStack","nativeSrc":"25038:124:69","nodeType":"YulIdentifier","src":"25038:124:69"},"nativeSrc":"25038:131:69","nodeType":"YulFunctionCall","src":"25038:131:69"},"variableNames":[{"name":"tail","nativeSrc":"25030:4:69","nodeType":"YulIdentifier","src":"25030:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"24757:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"24908:9:69","nodeType":"YulTypedName","src":"24908:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"24923:4:69","nodeType":"YulTypedName","src":"24923:4:69","type":""}],"src":"24757:419:69"},{"body":{"nativeSrc":"25288:118:69","nodeType":"YulBlock","src":"25288:118:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"25310:6:69","nodeType":"YulIdentifier","src":"25310:6:69"},{"kind":"number","nativeSrc":"25318:1:69","nodeType":"YulLiteral","src":"25318:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"25306:3:69","nodeType":"YulIdentifier","src":"25306:3:69"},"nativeSrc":"25306:14:69","nodeType":"YulFunctionCall","src":"25306:14:69"},{"hexValue":"45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77","kind":"string","nativeSrc":"25322:34:69","nodeType":"YulLiteral","src":"25322:34:69","type":"","value":"ERC20: decreased allowance below"}],"functionName":{"name":"mstore","nativeSrc":"25299:6:69","nodeType":"YulIdentifier","src":"25299:6:69"},"nativeSrc":"25299:58:69","nodeType":"YulFunctionCall","src":"25299:58:69"},"nativeSrc":"25299:58:69","nodeType":"YulExpressionStatement","src":"25299:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"25378:6:69","nodeType":"YulIdentifier","src":"25378:6:69"},{"kind":"number","nativeSrc":"25386:2:69","nodeType":"YulLiteral","src":"25386:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"25374:3:69","nodeType":"YulIdentifier","src":"25374:3:69"},"nativeSrc":"25374:15:69","nodeType":"YulFunctionCall","src":"25374:15:69"},{"hexValue":"207a65726f","kind":"string","nativeSrc":"25391:7:69","nodeType":"YulLiteral","src":"25391:7:69","type":"","value":" zero"}],"functionName":{"name":"mstore","nativeSrc":"25367:6:69","nodeType":"YulIdentifier","src":"25367:6:69"},"nativeSrc":"25367:32:69","nodeType":"YulFunctionCall","src":"25367:32:69"},"nativeSrc":"25367:32:69","nodeType":"YulExpressionStatement","src":"25367:32:69"}]},"name":"store_literal_in_memory_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8","nativeSrc":"25182:224:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"25280:6:69","nodeType":"YulTypedName","src":"25280:6:69","type":""}],"src":"25182:224:69"},{"body":{"nativeSrc":"25558:220:69","nodeType":"YulBlock","src":"25558:220:69","statements":[{"nativeSrc":"25568:74:69","nodeType":"YulAssignment","src":"25568:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"25634:3:69","nodeType":"YulIdentifier","src":"25634:3:69"},{"kind":"number","nativeSrc":"25639:2:69","nodeType":"YulLiteral","src":"25639:2:69","type":"","value":"37"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"25575:58:69","nodeType":"YulIdentifier","src":"25575:58:69"},"nativeSrc":"25575:67:69","nodeType":"YulFunctionCall","src":"25575:67:69"},"variableNames":[{"name":"pos","nativeSrc":"25568:3:69","nodeType":"YulIdentifier","src":"25568:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"25740:3:69","nodeType":"YulIdentifier","src":"25740:3:69"}],"functionName":{"name":"store_literal_in_memory_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8","nativeSrc":"25651:88:69","nodeType":"YulIdentifier","src":"25651:88:69"},"nativeSrc":"25651:93:69","nodeType":"YulFunctionCall","src":"25651:93:69"},"nativeSrc":"25651:93:69","nodeType":"YulExpressionStatement","src":"25651:93:69"},{"nativeSrc":"25753:19:69","nodeType":"YulAssignment","src":"25753:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"25764:3:69","nodeType":"YulIdentifier","src":"25764:3:69"},{"kind":"number","nativeSrc":"25769:2:69","nodeType":"YulLiteral","src":"25769:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"25760:3:69","nodeType":"YulIdentifier","src":"25760:3:69"},"nativeSrc":"25760:12:69","nodeType":"YulFunctionCall","src":"25760:12:69"},"variableNames":[{"name":"end","nativeSrc":"25753:3:69","nodeType":"YulIdentifier","src":"25753:3:69"}]}]},"name":"abi_encode_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8_to_t_string_memory_ptr_fromStack","nativeSrc":"25412:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"25546:3:69","nodeType":"YulTypedName","src":"25546:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"25554:3:69","nodeType":"YulTypedName","src":"25554:3:69","type":""}],"src":"25412:366:69"},{"body":{"nativeSrc":"25955:248:69","nodeType":"YulBlock","src":"25955:248:69","statements":[{"nativeSrc":"25965:26:69","nodeType":"YulAssignment","src":"25965:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"25977:9:69","nodeType":"YulIdentifier","src":"25977:9:69"},{"kind":"number","nativeSrc":"25988:2:69","nodeType":"YulLiteral","src":"25988:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"25973:3:69","nodeType":"YulIdentifier","src":"25973:3:69"},"nativeSrc":"25973:18:69","nodeType":"YulFunctionCall","src":"25973:18:69"},"variableNames":[{"name":"tail","nativeSrc":"25965:4:69","nodeType":"YulIdentifier","src":"25965:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"26012:9:69","nodeType":"YulIdentifier","src":"26012:9:69"},{"kind":"number","nativeSrc":"26023:1:69","nodeType":"YulLiteral","src":"26023:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"26008:3:69","nodeType":"YulIdentifier","src":"26008:3:69"},"nativeSrc":"26008:17:69","nodeType":"YulFunctionCall","src":"26008:17:69"},{"arguments":[{"name":"tail","nativeSrc":"26031:4:69","nodeType":"YulIdentifier","src":"26031:4:69"},{"name":"headStart","nativeSrc":"26037:9:69","nodeType":"YulIdentifier","src":"26037:9:69"}],"functionName":{"name":"sub","nativeSrc":"26027:3:69","nodeType":"YulIdentifier","src":"26027:3:69"},"nativeSrc":"26027:20:69","nodeType":"YulFunctionCall","src":"26027:20:69"}],"functionName":{"name":"mstore","nativeSrc":"26001:6:69","nodeType":"YulIdentifier","src":"26001:6:69"},"nativeSrc":"26001:47:69","nodeType":"YulFunctionCall","src":"26001:47:69"},"nativeSrc":"26001:47:69","nodeType":"YulExpressionStatement","src":"26001:47:69"},{"nativeSrc":"26057:139:69","nodeType":"YulAssignment","src":"26057:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"26191:4:69","nodeType":"YulIdentifier","src":"26191:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8_to_t_string_memory_ptr_fromStack","nativeSrc":"26065:124:69","nodeType":"YulIdentifier","src":"26065:124:69"},"nativeSrc":"26065:131:69","nodeType":"YulFunctionCall","src":"26065:131:69"},"variableNames":[{"name":"tail","nativeSrc":"26057:4:69","nodeType":"YulIdentifier","src":"26057:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"25784:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"25935:9:69","nodeType":"YulTypedName","src":"25935:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"25950:4:69","nodeType":"YulTypedName","src":"25950:4:69","type":""}],"src":"25784:419:69"},{"body":{"nativeSrc":"26315:52:69","nodeType":"YulBlock","src":"26315:52:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"26337:6:69","nodeType":"YulIdentifier","src":"26337:6:69"},{"kind":"number","nativeSrc":"26345:1:69","nodeType":"YulLiteral","src":"26345:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"26333:3:69","nodeType":"YulIdentifier","src":"26333:3:69"},"nativeSrc":"26333:14:69","nodeType":"YulFunctionCall","src":"26333:14:69"},{"hexValue":"7769746864726177","kind":"string","nativeSrc":"26349:10:69","nodeType":"YulLiteral","src":"26349:10:69","type":"","value":"withdraw"}],"functionName":{"name":"mstore","nativeSrc":"26326:6:69","nodeType":"YulIdentifier","src":"26326:6:69"},"nativeSrc":"26326:34:69","nodeType":"YulFunctionCall","src":"26326:34:69"},"nativeSrc":"26326:34:69","nodeType":"YulExpressionStatement","src":"26326:34:69"}]},"name":"store_literal_in_memory_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77","nativeSrc":"26209:158:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"26307:6:69","nodeType":"YulTypedName","src":"26307:6:69","type":""}],"src":"26209:158:69"},{"body":{"nativeSrc":"26519:219:69","nodeType":"YulBlock","src":"26519:219:69","statements":[{"nativeSrc":"26529:73:69","nodeType":"YulAssignment","src":"26529:73:69","value":{"arguments":[{"name":"pos","nativeSrc":"26595:3:69","nodeType":"YulIdentifier","src":"26595:3:69"},{"kind":"number","nativeSrc":"26600:1:69","nodeType":"YulLiteral","src":"26600:1:69","type":"","value":"8"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"26536:58:69","nodeType":"YulIdentifier","src":"26536:58:69"},"nativeSrc":"26536:66:69","nodeType":"YulFunctionCall","src":"26536:66:69"},"variableNames":[{"name":"pos","nativeSrc":"26529:3:69","nodeType":"YulIdentifier","src":"26529:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"26700:3:69","nodeType":"YulIdentifier","src":"26700:3:69"}],"functionName":{"name":"store_literal_in_memory_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77","nativeSrc":"26611:88:69","nodeType":"YulIdentifier","src":"26611:88:69"},"nativeSrc":"26611:93:69","nodeType":"YulFunctionCall","src":"26611:93:69"},"nativeSrc":"26611:93:69","nodeType":"YulExpressionStatement","src":"26611:93:69"},{"nativeSrc":"26713:19:69","nodeType":"YulAssignment","src":"26713:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"26724:3:69","nodeType":"YulIdentifier","src":"26724:3:69"},{"kind":"number","nativeSrc":"26729:2:69","nodeType":"YulLiteral","src":"26729:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"26720:3:69","nodeType":"YulIdentifier","src":"26720:3:69"},"nativeSrc":"26720:12:69","nodeType":"YulFunctionCall","src":"26720:12:69"},"variableNames":[{"name":"end","nativeSrc":"26713:3:69","nodeType":"YulIdentifier","src":"26713:3:69"}]}]},"name":"abi_encode_t_stringliteral_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77_to_t_string_memory_ptr_fromStack","nativeSrc":"26373:365:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"26507:3:69","nodeType":"YulTypedName","src":"26507:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"26515:3:69","nodeType":"YulTypedName","src":"26515:3:69","type":""}],"src":"26373:365:69"},{"body":{"nativeSrc":"26915:248:69","nodeType":"YulBlock","src":"26915:248:69","statements":[{"nativeSrc":"26925:26:69","nodeType":"YulAssignment","src":"26925:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"26937:9:69","nodeType":"YulIdentifier","src":"26937:9:69"},{"kind":"number","nativeSrc":"26948:2:69","nodeType":"YulLiteral","src":"26948:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"26933:3:69","nodeType":"YulIdentifier","src":"26933:3:69"},"nativeSrc":"26933:18:69","nodeType":"YulFunctionCall","src":"26933:18:69"},"variableNames":[{"name":"tail","nativeSrc":"26925:4:69","nodeType":"YulIdentifier","src":"26925:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"26972:9:69","nodeType":"YulIdentifier","src":"26972:9:69"},{"kind":"number","nativeSrc":"26983:1:69","nodeType":"YulLiteral","src":"26983:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"26968:3:69","nodeType":"YulIdentifier","src":"26968:3:69"},"nativeSrc":"26968:17:69","nodeType":"YulFunctionCall","src":"26968:17:69"},{"arguments":[{"name":"tail","nativeSrc":"26991:4:69","nodeType":"YulIdentifier","src":"26991:4:69"},{"name":"headStart","nativeSrc":"26997:9:69","nodeType":"YulIdentifier","src":"26997:9:69"}],"functionName":{"name":"sub","nativeSrc":"26987:3:69","nodeType":"YulIdentifier","src":"26987:3:69"},"nativeSrc":"26987:20:69","nodeType":"YulFunctionCall","src":"26987:20:69"}],"functionName":{"name":"mstore","nativeSrc":"26961:6:69","nodeType":"YulIdentifier","src":"26961:6:69"},"nativeSrc":"26961:47:69","nodeType":"YulFunctionCall","src":"26961:47:69"},"nativeSrc":"26961:47:69","nodeType":"YulExpressionStatement","src":"26961:47:69"},{"nativeSrc":"27017:139:69","nodeType":"YulAssignment","src":"27017:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"27151:4:69","nodeType":"YulIdentifier","src":"27151:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77_to_t_string_memory_ptr_fromStack","nativeSrc":"27025:124:69","nodeType":"YulIdentifier","src":"27025:124:69"},"nativeSrc":"27025:131:69","nodeType":"YulFunctionCall","src":"27025:131:69"},"variableNames":[{"name":"tail","nativeSrc":"27017:4:69","nodeType":"YulIdentifier","src":"27017:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"26744:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"26895:9:69","nodeType":"YulTypedName","src":"26895:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"26910:4:69","nodeType":"YulTypedName","src":"26910:4:69","type":""}],"src":"26744:419:69"},{"body":{"nativeSrc":"27275:50:69","nodeType":"YulBlock","src":"27275:50:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"27297:6:69","nodeType":"YulIdentifier","src":"27297:6:69"},{"kind":"number","nativeSrc":"27305:1:69","nodeType":"YulLiteral","src":"27305:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"27293:3:69","nodeType":"YulIdentifier","src":"27293:3:69"},"nativeSrc":"27293:14:69","nodeType":"YulFunctionCall","src":"27293:14:69"},{"hexValue":"72656465656d","kind":"string","nativeSrc":"27309:8:69","nodeType":"YulLiteral","src":"27309:8:69","type":"","value":"redeem"}],"functionName":{"name":"mstore","nativeSrc":"27286:6:69","nodeType":"YulIdentifier","src":"27286:6:69"},"nativeSrc":"27286:32:69","nodeType":"YulFunctionCall","src":"27286:32:69"},"nativeSrc":"27286:32:69","nodeType":"YulExpressionStatement","src":"27286:32:69"}]},"name":"store_literal_in_memory_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609","nativeSrc":"27169:156:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"27267:6:69","nodeType":"YulTypedName","src":"27267:6:69","type":""}],"src":"27169:156:69"},{"body":{"nativeSrc":"27477:219:69","nodeType":"YulBlock","src":"27477:219:69","statements":[{"nativeSrc":"27487:73:69","nodeType":"YulAssignment","src":"27487:73:69","value":{"arguments":[{"name":"pos","nativeSrc":"27553:3:69","nodeType":"YulIdentifier","src":"27553:3:69"},{"kind":"number","nativeSrc":"27558:1:69","nodeType":"YulLiteral","src":"27558:1:69","type":"","value":"6"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"27494:58:69","nodeType":"YulIdentifier","src":"27494:58:69"},"nativeSrc":"27494:66:69","nodeType":"YulFunctionCall","src":"27494:66:69"},"variableNames":[{"name":"pos","nativeSrc":"27487:3:69","nodeType":"YulIdentifier","src":"27487:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"27658:3:69","nodeType":"YulIdentifier","src":"27658:3:69"}],"functionName":{"name":"store_literal_in_memory_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609","nativeSrc":"27569:88:69","nodeType":"YulIdentifier","src":"27569:88:69"},"nativeSrc":"27569:93:69","nodeType":"YulFunctionCall","src":"27569:93:69"},"nativeSrc":"27569:93:69","nodeType":"YulExpressionStatement","src":"27569:93:69"},{"nativeSrc":"27671:19:69","nodeType":"YulAssignment","src":"27671:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"27682:3:69","nodeType":"YulIdentifier","src":"27682:3:69"},{"kind":"number","nativeSrc":"27687:2:69","nodeType":"YulLiteral","src":"27687:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"27678:3:69","nodeType":"YulIdentifier","src":"27678:3:69"},"nativeSrc":"27678:12:69","nodeType":"YulFunctionCall","src":"27678:12:69"},"variableNames":[{"name":"end","nativeSrc":"27671:3:69","nodeType":"YulIdentifier","src":"27671:3:69"}]}]},"name":"abi_encode_t_stringliteral_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609_to_t_string_memory_ptr_fromStack","nativeSrc":"27331:365:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"27465:3:69","nodeType":"YulTypedName","src":"27465:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"27473:3:69","nodeType":"YulTypedName","src":"27473:3:69","type":""}],"src":"27331:365:69"},{"body":{"nativeSrc":"27873:248:69","nodeType":"YulBlock","src":"27873:248:69","statements":[{"nativeSrc":"27883:26:69","nodeType":"YulAssignment","src":"27883:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"27895:9:69","nodeType":"YulIdentifier","src":"27895:9:69"},{"kind":"number","nativeSrc":"27906:2:69","nodeType":"YulLiteral","src":"27906:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"27891:3:69","nodeType":"YulIdentifier","src":"27891:3:69"},"nativeSrc":"27891:18:69","nodeType":"YulFunctionCall","src":"27891:18:69"},"variableNames":[{"name":"tail","nativeSrc":"27883:4:69","nodeType":"YulIdentifier","src":"27883:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"27930:9:69","nodeType":"YulIdentifier","src":"27930:9:69"},{"kind":"number","nativeSrc":"27941:1:69","nodeType":"YulLiteral","src":"27941:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"27926:3:69","nodeType":"YulIdentifier","src":"27926:3:69"},"nativeSrc":"27926:17:69","nodeType":"YulFunctionCall","src":"27926:17:69"},{"arguments":[{"name":"tail","nativeSrc":"27949:4:69","nodeType":"YulIdentifier","src":"27949:4:69"},{"name":"headStart","nativeSrc":"27955:9:69","nodeType":"YulIdentifier","src":"27955:9:69"}],"functionName":{"name":"sub","nativeSrc":"27945:3:69","nodeType":"YulIdentifier","src":"27945:3:69"},"nativeSrc":"27945:20:69","nodeType":"YulFunctionCall","src":"27945:20:69"}],"functionName":{"name":"mstore","nativeSrc":"27919:6:69","nodeType":"YulIdentifier","src":"27919:6:69"},"nativeSrc":"27919:47:69","nodeType":"YulFunctionCall","src":"27919:47:69"},"nativeSrc":"27919:47:69","nodeType":"YulExpressionStatement","src":"27919:47:69"},{"nativeSrc":"27975:139:69","nodeType":"YulAssignment","src":"27975:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"28109:4:69","nodeType":"YulIdentifier","src":"28109:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609_to_t_string_memory_ptr_fromStack","nativeSrc":"27983:124:69","nodeType":"YulIdentifier","src":"27983:124:69"},"nativeSrc":"27983:131:69","nodeType":"YulFunctionCall","src":"27983:131:69"},"variableNames":[{"name":"tail","nativeSrc":"27975:4:69","nodeType":"YulIdentifier","src":"27975:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"27702:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"27853:9:69","nodeType":"YulTypedName","src":"27853:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"27868:4:69","nodeType":"YulTypedName","src":"27868:4:69","type":""}],"src":"27702:419:69"},{"body":{"nativeSrc":"28201:51:69","nodeType":"YulBlock","src":"28201:51:69","statements":[{"nativeSrc":"28211:35:69","nodeType":"YulAssignment","src":"28211:35:69","value":{"arguments":[{"name":"value","nativeSrc":"28240:5:69","nodeType":"YulIdentifier","src":"28240:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"28222:17:69","nodeType":"YulIdentifier","src":"28222:17:69"},"nativeSrc":"28222:24:69","nodeType":"YulFunctionCall","src":"28222:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"28211:7:69","nodeType":"YulIdentifier","src":"28211:7:69"}]}]},"name":"cleanup_t_contract$_ComptrollerInterface_$9353","nativeSrc":"28127:125:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"28183:5:69","nodeType":"YulTypedName","src":"28183:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"28193:7:69","nodeType":"YulTypedName","src":"28193:7:69","type":""}],"src":"28127:125:69"},{"body":{"nativeSrc":"28330:108:69","nodeType":"YulBlock","src":"28330:108:69","statements":[{"body":{"nativeSrc":"28416:16:69","nodeType":"YulBlock","src":"28416:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"28425:1:69","nodeType":"YulLiteral","src":"28425:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"28428:1:69","nodeType":"YulLiteral","src":"28428:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"28418:6:69","nodeType":"YulIdentifier","src":"28418:6:69"},"nativeSrc":"28418:12:69","nodeType":"YulFunctionCall","src":"28418:12:69"},"nativeSrc":"28418:12:69","nodeType":"YulExpressionStatement","src":"28418:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"28353:5:69","nodeType":"YulIdentifier","src":"28353:5:69"},{"arguments":[{"name":"value","nativeSrc":"28407:5:69","nodeType":"YulIdentifier","src":"28407:5:69"}],"functionName":{"name":"cleanup_t_contract$_ComptrollerInterface_$9353","nativeSrc":"28360:46:69","nodeType":"YulIdentifier","src":"28360:46:69"},"nativeSrc":"28360:53:69","nodeType":"YulFunctionCall","src":"28360:53:69"}],"functionName":{"name":"eq","nativeSrc":"28350:2:69","nodeType":"YulIdentifier","src":"28350:2:69"},"nativeSrc":"28350:64:69","nodeType":"YulFunctionCall","src":"28350:64:69"}],"functionName":{"name":"iszero","nativeSrc":"28343:6:69","nodeType":"YulIdentifier","src":"28343:6:69"},"nativeSrc":"28343:72:69","nodeType":"YulFunctionCall","src":"28343:72:69"},"nativeSrc":"28340:92:69","nodeType":"YulIf","src":"28340:92:69"}]},"name":"validator_revert_t_contract$_ComptrollerInterface_$9353","nativeSrc":"28258:180:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"28323:5:69","nodeType":"YulTypedName","src":"28323:5:69","type":""}],"src":"28258:180:69"},{"body":{"nativeSrc":"28536:109:69","nodeType":"YulBlock","src":"28536:109:69","statements":[{"nativeSrc":"28546:22:69","nodeType":"YulAssignment","src":"28546:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"28561:6:69","nodeType":"YulIdentifier","src":"28561:6:69"}],"functionName":{"name":"mload","nativeSrc":"28555:5:69","nodeType":"YulIdentifier","src":"28555:5:69"},"nativeSrc":"28555:13:69","nodeType":"YulFunctionCall","src":"28555:13:69"},"variableNames":[{"name":"value","nativeSrc":"28546:5:69","nodeType":"YulIdentifier","src":"28546:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"28633:5:69","nodeType":"YulIdentifier","src":"28633:5:69"}],"functionName":{"name":"validator_revert_t_contract$_ComptrollerInterface_$9353","nativeSrc":"28577:55:69","nodeType":"YulIdentifier","src":"28577:55:69"},"nativeSrc":"28577:62:69","nodeType":"YulFunctionCall","src":"28577:62:69"},"nativeSrc":"28577:62:69","nodeType":"YulExpressionStatement","src":"28577:62:69"}]},"name":"abi_decode_t_contract$_ComptrollerInterface_$9353_fromMemory","nativeSrc":"28444:201:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"28514:6:69","nodeType":"YulTypedName","src":"28514:6:69","type":""},{"name":"end","nativeSrc":"28522:3:69","nodeType":"YulTypedName","src":"28522:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"28530:5:69","nodeType":"YulTypedName","src":"28530:5:69","type":""}],"src":"28444:201:69"},{"body":{"nativeSrc":"28757:303:69","nodeType":"YulBlock","src":"28757:303:69","statements":[{"body":{"nativeSrc":"28803:83:69","nodeType":"YulBlock","src":"28803:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"28805:77:69","nodeType":"YulIdentifier","src":"28805:77:69"},"nativeSrc":"28805:79:69","nodeType":"YulFunctionCall","src":"28805:79:69"},"nativeSrc":"28805:79:69","nodeType":"YulExpressionStatement","src":"28805:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"28778:7:69","nodeType":"YulIdentifier","src":"28778:7:69"},{"name":"headStart","nativeSrc":"28787:9:69","nodeType":"YulIdentifier","src":"28787:9:69"}],"functionName":{"name":"sub","nativeSrc":"28774:3:69","nodeType":"YulIdentifier","src":"28774:3:69"},"nativeSrc":"28774:23:69","nodeType":"YulFunctionCall","src":"28774:23:69"},{"kind":"number","nativeSrc":"28799:2:69","nodeType":"YulLiteral","src":"28799:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"28770:3:69","nodeType":"YulIdentifier","src":"28770:3:69"},"nativeSrc":"28770:32:69","nodeType":"YulFunctionCall","src":"28770:32:69"},"nativeSrc":"28767:119:69","nodeType":"YulIf","src":"28767:119:69"},{"nativeSrc":"28896:157:69","nodeType":"YulBlock","src":"28896:157:69","statements":[{"nativeSrc":"28911:15:69","nodeType":"YulVariableDeclaration","src":"28911:15:69","value":{"kind":"number","nativeSrc":"28925:1:69","nodeType":"YulLiteral","src":"28925:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"28915:6:69","nodeType":"YulTypedName","src":"28915:6:69","type":""}]},{"nativeSrc":"28940:103:69","nodeType":"YulAssignment","src":"28940:103:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"29015:9:69","nodeType":"YulIdentifier","src":"29015:9:69"},{"name":"offset","nativeSrc":"29026:6:69","nodeType":"YulIdentifier","src":"29026:6:69"}],"functionName":{"name":"add","nativeSrc":"29011:3:69","nodeType":"YulIdentifier","src":"29011:3:69"},"nativeSrc":"29011:22:69","nodeType":"YulFunctionCall","src":"29011:22:69"},{"name":"dataEnd","nativeSrc":"29035:7:69","nodeType":"YulIdentifier","src":"29035:7:69"}],"functionName":{"name":"abi_decode_t_contract$_ComptrollerInterface_$9353_fromMemory","nativeSrc":"28950:60:69","nodeType":"YulIdentifier","src":"28950:60:69"},"nativeSrc":"28950:93:69","nodeType":"YulFunctionCall","src":"28950:93:69"},"variableNames":[{"name":"value0","nativeSrc":"28940:6:69","nodeType":"YulIdentifier","src":"28940:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_ComptrollerInterface_$9353_fromMemory","nativeSrc":"28651:409:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"28727:9:69","nodeType":"YulTypedName","src":"28727:9:69","type":""},{"name":"dataEnd","nativeSrc":"28738:7:69","nodeType":"YulTypedName","src":"28738:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"28750:6:69","nodeType":"YulTypedName","src":"28750:6:69","type":""}],"src":"28651:409:69"},{"body":{"nativeSrc":"29129:80:69","nodeType":"YulBlock","src":"29129:80:69","statements":[{"nativeSrc":"29139:22:69","nodeType":"YulAssignment","src":"29139:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"29154:6:69","nodeType":"YulIdentifier","src":"29154:6:69"}],"functionName":{"name":"mload","nativeSrc":"29148:5:69","nodeType":"YulIdentifier","src":"29148:5:69"},"nativeSrc":"29148:13:69","nodeType":"YulFunctionCall","src":"29148:13:69"},"variableNames":[{"name":"value","nativeSrc":"29139:5:69","nodeType":"YulIdentifier","src":"29139:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"29197:5:69","nodeType":"YulIdentifier","src":"29197:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"29170:26:69","nodeType":"YulIdentifier","src":"29170:26:69"},"nativeSrc":"29170:33:69","nodeType":"YulFunctionCall","src":"29170:33:69"},"nativeSrc":"29170:33:69","nodeType":"YulExpressionStatement","src":"29170:33:69"}]},"name":"abi_decode_t_address_fromMemory","nativeSrc":"29066:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"29107:6:69","nodeType":"YulTypedName","src":"29107:6:69","type":""},{"name":"end","nativeSrc":"29115:3:69","nodeType":"YulTypedName","src":"29115:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"29123:5:69","nodeType":"YulTypedName","src":"29123:5:69","type":""}],"src":"29066:143:69"},{"body":{"nativeSrc":"29292:274:69","nodeType":"YulBlock","src":"29292:274:69","statements":[{"body":{"nativeSrc":"29338:83:69","nodeType":"YulBlock","src":"29338:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"29340:77:69","nodeType":"YulIdentifier","src":"29340:77:69"},"nativeSrc":"29340:79:69","nodeType":"YulFunctionCall","src":"29340:79:69"},"nativeSrc":"29340:79:69","nodeType":"YulExpressionStatement","src":"29340:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"29313:7:69","nodeType":"YulIdentifier","src":"29313:7:69"},{"name":"headStart","nativeSrc":"29322:9:69","nodeType":"YulIdentifier","src":"29322:9:69"}],"functionName":{"name":"sub","nativeSrc":"29309:3:69","nodeType":"YulIdentifier","src":"29309:3:69"},"nativeSrc":"29309:23:69","nodeType":"YulFunctionCall","src":"29309:23:69"},{"kind":"number","nativeSrc":"29334:2:69","nodeType":"YulLiteral","src":"29334:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"29305:3:69","nodeType":"YulIdentifier","src":"29305:3:69"},"nativeSrc":"29305:32:69","nodeType":"YulFunctionCall","src":"29305:32:69"},"nativeSrc":"29302:119:69","nodeType":"YulIf","src":"29302:119:69"},{"nativeSrc":"29431:128:69","nodeType":"YulBlock","src":"29431:128:69","statements":[{"nativeSrc":"29446:15:69","nodeType":"YulVariableDeclaration","src":"29446:15:69","value":{"kind":"number","nativeSrc":"29460:1:69","nodeType":"YulLiteral","src":"29460:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"29450:6:69","nodeType":"YulTypedName","src":"29450:6:69","type":""}]},{"nativeSrc":"29475:74:69","nodeType":"YulAssignment","src":"29475:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"29521:9:69","nodeType":"YulIdentifier","src":"29521:9:69"},{"name":"offset","nativeSrc":"29532:6:69","nodeType":"YulIdentifier","src":"29532:6:69"}],"functionName":{"name":"add","nativeSrc":"29517:3:69","nodeType":"YulIdentifier","src":"29517:3:69"},"nativeSrc":"29517:22:69","nodeType":"YulFunctionCall","src":"29517:22:69"},{"name":"dataEnd","nativeSrc":"29541:7:69","nodeType":"YulIdentifier","src":"29541:7:69"}],"functionName":{"name":"abi_decode_t_address_fromMemory","nativeSrc":"29485:31:69","nodeType":"YulIdentifier","src":"29485:31:69"},"nativeSrc":"29485:64:69","nodeType":"YulFunctionCall","src":"29485:64:69"},"variableNames":[{"name":"value0","nativeSrc":"29475:6:69","nodeType":"YulIdentifier","src":"29475:6:69"}]}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nativeSrc":"29215:351:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"29262:9:69","nodeType":"YulTypedName","src":"29262:9:69","type":""},{"name":"dataEnd","nativeSrc":"29273:7:69","nodeType":"YulTypedName","src":"29273:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"29285:6:69","nodeType":"YulTypedName","src":"29285:6:69","type":""}],"src":"29215:351:69"},{"body":{"nativeSrc":"29625:32:69","nodeType":"YulBlock","src":"29625:32:69","statements":[{"nativeSrc":"29635:16:69","nodeType":"YulAssignment","src":"29635:16:69","value":{"name":"value","nativeSrc":"29646:5:69","nodeType":"YulIdentifier","src":"29646:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"29635:7:69","nodeType":"YulIdentifier","src":"29635:7:69"}]}]},"name":"cleanup_t_rational_1_by_1","nativeSrc":"29572:85:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"29607:5:69","nodeType":"YulTypedName","src":"29607:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"29617:7:69","nodeType":"YulTypedName","src":"29617:7:69","type":""}],"src":"29572:85:69"},{"body":{"nativeSrc":"29729:88:69","nodeType":"YulBlock","src":"29729:88:69","statements":[{"nativeSrc":"29739:72:69","nodeType":"YulAssignment","src":"29739:72:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"29803:5:69","nodeType":"YulIdentifier","src":"29803:5:69"}],"functionName":{"name":"cleanup_t_rational_1_by_1","nativeSrc":"29777:25:69","nodeType":"YulIdentifier","src":"29777:25:69"},"nativeSrc":"29777:32:69","nodeType":"YulFunctionCall","src":"29777:32:69"}],"functionName":{"name":"identity","nativeSrc":"29768:8:69","nodeType":"YulIdentifier","src":"29768:8:69"},"nativeSrc":"29768:42:69","nodeType":"YulFunctionCall","src":"29768:42:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"29752:15:69","nodeType":"YulIdentifier","src":"29752:15:69"},"nativeSrc":"29752:59:69","nodeType":"YulFunctionCall","src":"29752:59:69"},"variableNames":[{"name":"converted","nativeSrc":"29739:9:69","nodeType":"YulIdentifier","src":"29739:9:69"}]}]},"name":"convert_t_rational_1_by_1_to_t_uint8","nativeSrc":"29663:154:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"29709:5:69","nodeType":"YulTypedName","src":"29709:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"29719:9:69","nodeType":"YulTypedName","src":"29719:9:69","type":""}],"src":"29663:154:69"},{"body":{"nativeSrc":"29894:72:69","nodeType":"YulBlock","src":"29894:72:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"29911:3:69","nodeType":"YulIdentifier","src":"29911:3:69"},{"arguments":[{"name":"value","nativeSrc":"29953:5:69","nodeType":"YulIdentifier","src":"29953:5:69"}],"functionName":{"name":"convert_t_rational_1_by_1_to_t_uint8","nativeSrc":"29916:36:69","nodeType":"YulIdentifier","src":"29916:36:69"},"nativeSrc":"29916:43:69","nodeType":"YulFunctionCall","src":"29916:43:69"}],"functionName":{"name":"mstore","nativeSrc":"29904:6:69","nodeType":"YulIdentifier","src":"29904:6:69"},"nativeSrc":"29904:56:69","nodeType":"YulFunctionCall","src":"29904:56:69"},"nativeSrc":"29904:56:69","nodeType":"YulExpressionStatement","src":"29904:56:69"}]},"name":"abi_encode_t_rational_1_by_1_to_t_uint8_fromStack","nativeSrc":"29823:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"29882:5:69","nodeType":"YulTypedName","src":"29882:5:69","type":""},{"name":"pos","nativeSrc":"29889:3:69","nodeType":"YulTypedName","src":"29889:3:69","type":""}],"src":"29823:143:69"},{"body":{"nativeSrc":"30076:130:69","nodeType":"YulBlock","src":"30076:130:69","statements":[{"nativeSrc":"30086:26:69","nodeType":"YulAssignment","src":"30086:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"30098:9:69","nodeType":"YulIdentifier","src":"30098:9:69"},{"kind":"number","nativeSrc":"30109:2:69","nodeType":"YulLiteral","src":"30109:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"30094:3:69","nodeType":"YulIdentifier","src":"30094:3:69"},"nativeSrc":"30094:18:69","nodeType":"YulFunctionCall","src":"30094:18:69"},"variableNames":[{"name":"tail","nativeSrc":"30086:4:69","nodeType":"YulIdentifier","src":"30086:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"30172:6:69","nodeType":"YulIdentifier","src":"30172:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"30185:9:69","nodeType":"YulIdentifier","src":"30185:9:69"},{"kind":"number","nativeSrc":"30196:1:69","nodeType":"YulLiteral","src":"30196:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"30181:3:69","nodeType":"YulIdentifier","src":"30181:3:69"},"nativeSrc":"30181:17:69","nodeType":"YulFunctionCall","src":"30181:17:69"}],"functionName":{"name":"abi_encode_t_rational_1_by_1_to_t_uint8_fromStack","nativeSrc":"30122:49:69","nodeType":"YulIdentifier","src":"30122:49:69"},"nativeSrc":"30122:77:69","nodeType":"YulFunctionCall","src":"30122:77:69"},"nativeSrc":"30122:77:69","nodeType":"YulExpressionStatement","src":"30122:77:69"}]},"name":"abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed","nativeSrc":"29972:234:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"30048:9:69","nodeType":"YulTypedName","src":"30048:9:69","type":""},{"name":"value0","nativeSrc":"30060:6:69","nodeType":"YulTypedName","src":"30060:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"30071:4:69","nodeType":"YulTypedName","src":"30071:4:69","type":""}],"src":"29972:234:69"},{"body":{"nativeSrc":"30263:51:69","nodeType":"YulBlock","src":"30263:51:69","statements":[{"nativeSrc":"30273:34:69","nodeType":"YulAssignment","src":"30273:34:69","value":{"arguments":[{"kind":"number","nativeSrc":"30298:1:69","nodeType":"YulLiteral","src":"30298:1:69","type":"","value":"1"},{"name":"value","nativeSrc":"30301:5:69","nodeType":"YulIdentifier","src":"30301:5:69"}],"functionName":{"name":"shr","nativeSrc":"30294:3:69","nodeType":"YulIdentifier","src":"30294:3:69"},"nativeSrc":"30294:13:69","nodeType":"YulFunctionCall","src":"30294:13:69"},"variableNames":[{"name":"newValue","nativeSrc":"30273:8:69","nodeType":"YulIdentifier","src":"30273:8:69"}]}]},"name":"shift_right_1_unsigned","nativeSrc":"30212:102:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"30244:5:69","nodeType":"YulTypedName","src":"30244:5:69","type":""}],"returnVariables":[{"name":"newValue","nativeSrc":"30254:8:69","nodeType":"YulTypedName","src":"30254:8:69","type":""}],"src":"30212:102:69"},{"body":{"nativeSrc":"30393:775:69","nodeType":"YulBlock","src":"30393:775:69","statements":[{"nativeSrc":"30403:15:69","nodeType":"YulAssignment","src":"30403:15:69","value":{"name":"_power","nativeSrc":"30412:6:69","nodeType":"YulIdentifier","src":"30412:6:69"},"variableNames":[{"name":"power","nativeSrc":"30403:5:69","nodeType":"YulIdentifier","src":"30403:5:69"}]},{"nativeSrc":"30427:14:69","nodeType":"YulAssignment","src":"30427:14:69","value":{"name":"_base","nativeSrc":"30436:5:69","nodeType":"YulIdentifier","src":"30436:5:69"},"variableNames":[{"name":"base","nativeSrc":"30427:4:69","nodeType":"YulIdentifier","src":"30427:4:69"}]},{"body":{"nativeSrc":"30485:677:69","nodeType":"YulBlock","src":"30485:677:69","statements":[{"body":{"nativeSrc":"30573:22:69","nodeType":"YulBlock","src":"30573:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"30575:16:69","nodeType":"YulIdentifier","src":"30575:16:69"},"nativeSrc":"30575:18:69","nodeType":"YulFunctionCall","src":"30575:18:69"},"nativeSrc":"30575:18:69","nodeType":"YulExpressionStatement","src":"30575:18:69"}]},"condition":{"arguments":[{"name":"base","nativeSrc":"30551:4:69","nodeType":"YulIdentifier","src":"30551:4:69"},{"arguments":[{"name":"max","nativeSrc":"30561:3:69","nodeType":"YulIdentifier","src":"30561:3:69"},{"name":"base","nativeSrc":"30566:4:69","nodeType":"YulIdentifier","src":"30566:4:69"}],"functionName":{"name":"div","nativeSrc":"30557:3:69","nodeType":"YulIdentifier","src":"30557:3:69"},"nativeSrc":"30557:14:69","nodeType":"YulFunctionCall","src":"30557:14:69"}],"functionName":{"name":"gt","nativeSrc":"30548:2:69","nodeType":"YulIdentifier","src":"30548:2:69"},"nativeSrc":"30548:24:69","nodeType":"YulFunctionCall","src":"30548:24:69"},"nativeSrc":"30545:50:69","nodeType":"YulIf","src":"30545:50:69"},{"body":{"nativeSrc":"30640:419:69","nodeType":"YulBlock","src":"30640:419:69","statements":[{"nativeSrc":"31020:25:69","nodeType":"YulAssignment","src":"31020:25:69","value":{"arguments":[{"name":"power","nativeSrc":"31033:5:69","nodeType":"YulIdentifier","src":"31033:5:69"},{"name":"base","nativeSrc":"31040:4:69","nodeType":"YulIdentifier","src":"31040:4:69"}],"functionName":{"name":"mul","nativeSrc":"31029:3:69","nodeType":"YulIdentifier","src":"31029:3:69"},"nativeSrc":"31029:16:69","nodeType":"YulFunctionCall","src":"31029:16:69"},"variableNames":[{"name":"power","nativeSrc":"31020:5:69","nodeType":"YulIdentifier","src":"31020:5:69"}]}]},"condition":{"arguments":[{"name":"exponent","nativeSrc":"30615:8:69","nodeType":"YulIdentifier","src":"30615:8:69"},{"kind":"number","nativeSrc":"30625:1:69","nodeType":"YulLiteral","src":"30625:1:69","type":"","value":"1"}],"functionName":{"name":"and","nativeSrc":"30611:3:69","nodeType":"YulIdentifier","src":"30611:3:69"},"nativeSrc":"30611:16:69","nodeType":"YulFunctionCall","src":"30611:16:69"},"nativeSrc":"30608:451:69","nodeType":"YulIf","src":"30608:451:69"},{"nativeSrc":"31072:23:69","nodeType":"YulAssignment","src":"31072:23:69","value":{"arguments":[{"name":"base","nativeSrc":"31084:4:69","nodeType":"YulIdentifier","src":"31084:4:69"},{"name":"base","nativeSrc":"31090:4:69","nodeType":"YulIdentifier","src":"31090:4:69"}],"functionName":{"name":"mul","nativeSrc":"31080:3:69","nodeType":"YulIdentifier","src":"31080:3:69"},"nativeSrc":"31080:15:69","nodeType":"YulFunctionCall","src":"31080:15:69"},"variableNames":[{"name":"base","nativeSrc":"31072:4:69","nodeType":"YulIdentifier","src":"31072:4:69"}]},{"nativeSrc":"31108:44:69","nodeType":"YulAssignment","src":"31108:44:69","value":{"arguments":[{"name":"exponent","nativeSrc":"31143:8:69","nodeType":"YulIdentifier","src":"31143:8:69"}],"functionName":{"name":"shift_right_1_unsigned","nativeSrc":"31120:22:69","nodeType":"YulIdentifier","src":"31120:22:69"},"nativeSrc":"31120:32:69","nodeType":"YulFunctionCall","src":"31120:32:69"},"variableNames":[{"name":"exponent","nativeSrc":"31108:8:69","nodeType":"YulIdentifier","src":"31108:8:69"}]}]},"condition":{"arguments":[{"name":"exponent","nativeSrc":"30461:8:69","nodeType":"YulIdentifier","src":"30461:8:69"},{"kind":"number","nativeSrc":"30471:1:69","nodeType":"YulLiteral","src":"30471:1:69","type":"","value":"1"}],"functionName":{"name":"gt","nativeSrc":"30458:2:69","nodeType":"YulIdentifier","src":"30458:2:69"},"nativeSrc":"30458:15:69","nodeType":"YulFunctionCall","src":"30458:15:69"},"nativeSrc":"30450:712:69","nodeType":"YulForLoop","post":{"nativeSrc":"30474:2:69","nodeType":"YulBlock","src":"30474:2:69","statements":[]},"pre":{"nativeSrc":"30454:3:69","nodeType":"YulBlock","src":"30454:3:69","statements":[]},"src":"30450:712:69"}]},"name":"checked_exp_helper","nativeSrc":"30320:848:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"_power","nativeSrc":"30348:6:69","nodeType":"YulTypedName","src":"30348:6:69","type":""},{"name":"_base","nativeSrc":"30356:5:69","nodeType":"YulTypedName","src":"30356:5:69","type":""},{"name":"exponent","nativeSrc":"30363:8:69","nodeType":"YulTypedName","src":"30363:8:69","type":""},{"name":"max","nativeSrc":"30373:3:69","nodeType":"YulTypedName","src":"30373:3:69","type":""}],"returnVariables":[{"name":"power","nativeSrc":"30381:5:69","nodeType":"YulTypedName","src":"30381:5:69","type":""},{"name":"base","nativeSrc":"30388:4:69","nodeType":"YulTypedName","src":"30388:4:69","type":""}],"src":"30320:848:69"},{"body":{"nativeSrc":"31234:1013:69","nodeType":"YulBlock","src":"31234:1013:69","statements":[{"body":{"nativeSrc":"31429:20:69","nodeType":"YulBlock","src":"31429:20:69","statements":[{"nativeSrc":"31431:10:69","nodeType":"YulAssignment","src":"31431:10:69","value":{"kind":"number","nativeSrc":"31440:1:69","nodeType":"YulLiteral","src":"31440:1:69","type":"","value":"1"},"variableNames":[{"name":"power","nativeSrc":"31431:5:69","nodeType":"YulIdentifier","src":"31431:5:69"}]},{"nativeSrc":"31442:5:69","nodeType":"YulLeave","src":"31442:5:69"}]},"condition":{"arguments":[{"name":"exponent","nativeSrc":"31419:8:69","nodeType":"YulIdentifier","src":"31419:8:69"}],"functionName":{"name":"iszero","nativeSrc":"31412:6:69","nodeType":"YulIdentifier","src":"31412:6:69"},"nativeSrc":"31412:16:69","nodeType":"YulFunctionCall","src":"31412:16:69"},"nativeSrc":"31409:40:69","nodeType":"YulIf","src":"31409:40:69"},{"body":{"nativeSrc":"31474:20:69","nodeType":"YulBlock","src":"31474:20:69","statements":[{"nativeSrc":"31476:10:69","nodeType":"YulAssignment","src":"31476:10:69","value":{"kind":"number","nativeSrc":"31485:1:69","nodeType":"YulLiteral","src":"31485:1:69","type":"","value":"0"},"variableNames":[{"name":"power","nativeSrc":"31476:5:69","nodeType":"YulIdentifier","src":"31476:5:69"}]},{"nativeSrc":"31487:5:69","nodeType":"YulLeave","src":"31487:5:69"}]},"condition":{"arguments":[{"name":"base","nativeSrc":"31468:4:69","nodeType":"YulIdentifier","src":"31468:4:69"}],"functionName":{"name":"iszero","nativeSrc":"31461:6:69","nodeType":"YulIdentifier","src":"31461:6:69"},"nativeSrc":"31461:12:69","nodeType":"YulFunctionCall","src":"31461:12:69"},"nativeSrc":"31458:36:69","nodeType":"YulIf","src":"31458:36:69"},{"cases":[{"body":{"nativeSrc":"31604:20:69","nodeType":"YulBlock","src":"31604:20:69","statements":[{"nativeSrc":"31606:10:69","nodeType":"YulAssignment","src":"31606:10:69","value":{"kind":"number","nativeSrc":"31615:1:69","nodeType":"YulLiteral","src":"31615:1:69","type":"","value":"1"},"variableNames":[{"name":"power","nativeSrc":"31606:5:69","nodeType":"YulIdentifier","src":"31606:5:69"}]},{"nativeSrc":"31617:5:69","nodeType":"YulLeave","src":"31617:5:69"}]},"nativeSrc":"31597:27:69","nodeType":"YulCase","src":"31597:27:69","value":{"kind":"number","nativeSrc":"31602:1:69","nodeType":"YulLiteral","src":"31602:1:69","type":"","value":"1"}},{"body":{"nativeSrc":"31648:176:69","nodeType":"YulBlock","src":"31648:176:69","statements":[{"body":{"nativeSrc":"31683:22:69","nodeType":"YulBlock","src":"31683:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"31685:16:69","nodeType":"YulIdentifier","src":"31685:16:69"},"nativeSrc":"31685:18:69","nodeType":"YulFunctionCall","src":"31685:18:69"},"nativeSrc":"31685:18:69","nodeType":"YulExpressionStatement","src":"31685:18:69"}]},"condition":{"arguments":[{"name":"exponent","nativeSrc":"31668:8:69","nodeType":"YulIdentifier","src":"31668:8:69"},{"kind":"number","nativeSrc":"31678:3:69","nodeType":"YulLiteral","src":"31678:3:69","type":"","value":"255"}],"functionName":{"name":"gt","nativeSrc":"31665:2:69","nodeType":"YulIdentifier","src":"31665:2:69"},"nativeSrc":"31665:17:69","nodeType":"YulFunctionCall","src":"31665:17:69"},"nativeSrc":"31662:43:69","nodeType":"YulIf","src":"31662:43:69"},{"nativeSrc":"31718:25:69","nodeType":"YulAssignment","src":"31718:25:69","value":{"arguments":[{"kind":"number","nativeSrc":"31731:1:69","nodeType":"YulLiteral","src":"31731:1:69","type":"","value":"2"},{"name":"exponent","nativeSrc":"31734:8:69","nodeType":"YulIdentifier","src":"31734:8:69"}],"functionName":{"name":"exp","nativeSrc":"31727:3:69","nodeType":"YulIdentifier","src":"31727:3:69"},"nativeSrc":"31727:16:69","nodeType":"YulFunctionCall","src":"31727:16:69"},"variableNames":[{"name":"power","nativeSrc":"31718:5:69","nodeType":"YulIdentifier","src":"31718:5:69"}]},{"body":{"nativeSrc":"31774:22:69","nodeType":"YulBlock","src":"31774:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"31776:16:69","nodeType":"YulIdentifier","src":"31776:16:69"},"nativeSrc":"31776:18:69","nodeType":"YulFunctionCall","src":"31776:18:69"},"nativeSrc":"31776:18:69","nodeType":"YulExpressionStatement","src":"31776:18:69"}]},"condition":{"arguments":[{"name":"power","nativeSrc":"31762:5:69","nodeType":"YulIdentifier","src":"31762:5:69"},{"name":"max","nativeSrc":"31769:3:69","nodeType":"YulIdentifier","src":"31769:3:69"}],"functionName":{"name":"gt","nativeSrc":"31759:2:69","nodeType":"YulIdentifier","src":"31759:2:69"},"nativeSrc":"31759:14:69","nodeType":"YulFunctionCall","src":"31759:14:69"},"nativeSrc":"31756:40:69","nodeType":"YulIf","src":"31756:40:69"},{"nativeSrc":"31809:5:69","nodeType":"YulLeave","src":"31809:5:69"}]},"nativeSrc":"31633:191:69","nodeType":"YulCase","src":"31633:191:69","value":{"kind":"number","nativeSrc":"31638:1:69","nodeType":"YulLiteral","src":"31638:1:69","type":"","value":"2"}}],"expression":{"name":"base","nativeSrc":"31554:4:69","nodeType":"YulIdentifier","src":"31554:4:69"},"nativeSrc":"31547:277:69","nodeType":"YulSwitch","src":"31547:277:69"},{"body":{"nativeSrc":"31956:123:69","nodeType":"YulBlock","src":"31956:123:69","statements":[{"nativeSrc":"31970:28:69","nodeType":"YulAssignment","src":"31970:28:69","value":{"arguments":[{"name":"base","nativeSrc":"31983:4:69","nodeType":"YulIdentifier","src":"31983:4:69"},{"name":"exponent","nativeSrc":"31989:8:69","nodeType":"YulIdentifier","src":"31989:8:69"}],"functionName":{"name":"exp","nativeSrc":"31979:3:69","nodeType":"YulIdentifier","src":"31979:3:69"},"nativeSrc":"31979:19:69","nodeType":"YulFunctionCall","src":"31979:19:69"},"variableNames":[{"name":"power","nativeSrc":"31970:5:69","nodeType":"YulIdentifier","src":"31970:5:69"}]},{"body":{"nativeSrc":"32029:22:69","nodeType":"YulBlock","src":"32029:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"32031:16:69","nodeType":"YulIdentifier","src":"32031:16:69"},"nativeSrc":"32031:18:69","nodeType":"YulFunctionCall","src":"32031:18:69"},"nativeSrc":"32031:18:69","nodeType":"YulExpressionStatement","src":"32031:18:69"}]},"condition":{"arguments":[{"name":"power","nativeSrc":"32017:5:69","nodeType":"YulIdentifier","src":"32017:5:69"},{"name":"max","nativeSrc":"32024:3:69","nodeType":"YulIdentifier","src":"32024:3:69"}],"functionName":{"name":"gt","nativeSrc":"32014:2:69","nodeType":"YulIdentifier","src":"32014:2:69"},"nativeSrc":"32014:14:69","nodeType":"YulFunctionCall","src":"32014:14:69"},"nativeSrc":"32011:40:69","nodeType":"YulIf","src":"32011:40:69"},{"nativeSrc":"32064:5:69","nodeType":"YulLeave","src":"32064:5:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nativeSrc":"31859:4:69","nodeType":"YulIdentifier","src":"31859:4:69"},{"kind":"number","nativeSrc":"31865:2:69","nodeType":"YulLiteral","src":"31865:2:69","type":"","value":"11"}],"functionName":{"name":"lt","nativeSrc":"31856:2:69","nodeType":"YulIdentifier","src":"31856:2:69"},"nativeSrc":"31856:12:69","nodeType":"YulFunctionCall","src":"31856:12:69"},{"arguments":[{"name":"exponent","nativeSrc":"31873:8:69","nodeType":"YulIdentifier","src":"31873:8:69"},{"kind":"number","nativeSrc":"31883:2:69","nodeType":"YulLiteral","src":"31883:2:69","type":"","value":"78"}],"functionName":{"name":"lt","nativeSrc":"31870:2:69","nodeType":"YulIdentifier","src":"31870:2:69"},"nativeSrc":"31870:16:69","nodeType":"YulFunctionCall","src":"31870:16:69"}],"functionName":{"name":"and","nativeSrc":"31852:3:69","nodeType":"YulIdentifier","src":"31852:3:69"},"nativeSrc":"31852:35:69","nodeType":"YulFunctionCall","src":"31852:35:69"},{"arguments":[{"arguments":[{"name":"base","nativeSrc":"31908:4:69","nodeType":"YulIdentifier","src":"31908:4:69"},{"kind":"number","nativeSrc":"31914:3:69","nodeType":"YulLiteral","src":"31914:3:69","type":"","value":"307"}],"functionName":{"name":"lt","nativeSrc":"31905:2:69","nodeType":"YulIdentifier","src":"31905:2:69"},"nativeSrc":"31905:13:69","nodeType":"YulFunctionCall","src":"31905:13:69"},{"arguments":[{"name":"exponent","nativeSrc":"31923:8:69","nodeType":"YulIdentifier","src":"31923:8:69"},{"kind":"number","nativeSrc":"31933:2:69","nodeType":"YulLiteral","src":"31933:2:69","type":"","value":"32"}],"functionName":{"name":"lt","nativeSrc":"31920:2:69","nodeType":"YulIdentifier","src":"31920:2:69"},"nativeSrc":"31920:16:69","nodeType":"YulFunctionCall","src":"31920:16:69"}],"functionName":{"name":"and","nativeSrc":"31901:3:69","nodeType":"YulIdentifier","src":"31901:3:69"},"nativeSrc":"31901:36:69","nodeType":"YulFunctionCall","src":"31901:36:69"}],"functionName":{"name":"or","nativeSrc":"31836:2:69","nodeType":"YulIdentifier","src":"31836:2:69"},"nativeSrc":"31836:111:69","nodeType":"YulFunctionCall","src":"31836:111:69"},"nativeSrc":"31833:246:69","nodeType":"YulIf","src":"31833:246:69"},{"nativeSrc":"32089:57:69","nodeType":"YulAssignment","src":"32089:57:69","value":{"arguments":[{"kind":"number","nativeSrc":"32123:1:69","nodeType":"YulLiteral","src":"32123:1:69","type":"","value":"1"},{"name":"base","nativeSrc":"32126:4:69","nodeType":"YulIdentifier","src":"32126:4:69"},{"name":"exponent","nativeSrc":"32132:8:69","nodeType":"YulIdentifier","src":"32132:8:69"},{"name":"max","nativeSrc":"32142:3:69","nodeType":"YulIdentifier","src":"32142:3:69"}],"functionName":{"name":"checked_exp_helper","nativeSrc":"32104:18:69","nodeType":"YulIdentifier","src":"32104:18:69"},"nativeSrc":"32104:42:69","nodeType":"YulFunctionCall","src":"32104:42:69"},"variableNames":[{"name":"power","nativeSrc":"32089:5:69","nodeType":"YulIdentifier","src":"32089:5:69"},{"name":"base","nativeSrc":"32096:4:69","nodeType":"YulIdentifier","src":"32096:4:69"}]},{"body":{"nativeSrc":"32185:22:69","nodeType":"YulBlock","src":"32185:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"32187:16:69","nodeType":"YulIdentifier","src":"32187:16:69"},"nativeSrc":"32187:18:69","nodeType":"YulFunctionCall","src":"32187:18:69"},"nativeSrc":"32187:18:69","nodeType":"YulExpressionStatement","src":"32187:18:69"}]},"condition":{"arguments":[{"name":"power","nativeSrc":"32162:5:69","nodeType":"YulIdentifier","src":"32162:5:69"},{"arguments":[{"name":"max","nativeSrc":"32173:3:69","nodeType":"YulIdentifier","src":"32173:3:69"},{"name":"base","nativeSrc":"32178:4:69","nodeType":"YulIdentifier","src":"32178:4:69"}],"functionName":{"name":"div","nativeSrc":"32169:3:69","nodeType":"YulIdentifier","src":"32169:3:69"},"nativeSrc":"32169:14:69","nodeType":"YulFunctionCall","src":"32169:14:69"}],"functionName":{"name":"gt","nativeSrc":"32159:2:69","nodeType":"YulIdentifier","src":"32159:2:69"},"nativeSrc":"32159:25:69","nodeType":"YulFunctionCall","src":"32159:25:69"},"nativeSrc":"32156:51:69","nodeType":"YulIf","src":"32156:51:69"},{"nativeSrc":"32216:25:69","nodeType":"YulAssignment","src":"32216:25:69","value":{"arguments":[{"name":"power","nativeSrc":"32229:5:69","nodeType":"YulIdentifier","src":"32229:5:69"},{"name":"base","nativeSrc":"32236:4:69","nodeType":"YulIdentifier","src":"32236:4:69"}],"functionName":{"name":"mul","nativeSrc":"32225:3:69","nodeType":"YulIdentifier","src":"32225:3:69"},"nativeSrc":"32225:16:69","nodeType":"YulFunctionCall","src":"32225:16:69"},"variableNames":[{"name":"power","nativeSrc":"32216:5:69","nodeType":"YulIdentifier","src":"32216:5:69"}]}]},"name":"checked_exp_unsigned","nativeSrc":"31174:1073:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nativeSrc":"31204:4:69","nodeType":"YulTypedName","src":"31204:4:69","type":""},{"name":"exponent","nativeSrc":"31210:8:69","nodeType":"YulTypedName","src":"31210:8:69","type":""},{"name":"max","nativeSrc":"31220:3:69","nodeType":"YulTypedName","src":"31220:3:69","type":""}],"returnVariables":[{"name":"power","nativeSrc":"31228:5:69","nodeType":"YulTypedName","src":"31228:5:69","type":""}],"src":"31174:1073:69"},{"body":{"nativeSrc":"32317:217:69","nodeType":"YulBlock","src":"32317:217:69","statements":[{"nativeSrc":"32327:31:69","nodeType":"YulAssignment","src":"32327:31:69","value":{"arguments":[{"name":"base","nativeSrc":"32353:4:69","nodeType":"YulIdentifier","src":"32353:4:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"32335:17:69","nodeType":"YulIdentifier","src":"32335:17:69"},"nativeSrc":"32335:23:69","nodeType":"YulFunctionCall","src":"32335:23:69"},"variableNames":[{"name":"base","nativeSrc":"32327:4:69","nodeType":"YulIdentifier","src":"32327:4:69"}]},{"nativeSrc":"32367:37:69","nodeType":"YulAssignment","src":"32367:37:69","value":{"arguments":[{"name":"exponent","nativeSrc":"32395:8:69","nodeType":"YulIdentifier","src":"32395:8:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"32379:15:69","nodeType":"YulIdentifier","src":"32379:15:69"},"nativeSrc":"32379:25:69","nodeType":"YulFunctionCall","src":"32379:25:69"},"variableNames":[{"name":"exponent","nativeSrc":"32367:8:69","nodeType":"YulIdentifier","src":"32367:8:69"}]},{"nativeSrc":"32414:113:69","nodeType":"YulAssignment","src":"32414:113:69","value":{"arguments":[{"name":"base","nativeSrc":"32444:4:69","nodeType":"YulIdentifier","src":"32444:4:69"},{"name":"exponent","nativeSrc":"32450:8:69","nodeType":"YulIdentifier","src":"32450:8:69"},{"kind":"number","nativeSrc":"32460:66:69","nodeType":"YulLiteral","src":"32460:66:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"checked_exp_unsigned","nativeSrc":"32423:20:69","nodeType":"YulIdentifier","src":"32423:20:69"},"nativeSrc":"32423:104:69","nodeType":"YulFunctionCall","src":"32423:104:69"},"variableNames":[{"name":"power","nativeSrc":"32414:5:69","nodeType":"YulIdentifier","src":"32414:5:69"}]}]},"name":"checked_exp_t_uint256_t_uint8","nativeSrc":"32253:281:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nativeSrc":"32292:4:69","nodeType":"YulTypedName","src":"32292:4:69","type":""},{"name":"exponent","nativeSrc":"32298:8:69","nodeType":"YulTypedName","src":"32298:8:69","type":""}],"returnVariables":[{"name":"power","nativeSrc":"32311:5:69","nodeType":"YulTypedName","src":"32311:5:69","type":""}],"src":"32253:281:69"},{"body":{"nativeSrc":"32646:117:69","nodeType":"YulBlock","src":"32646:117:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"32668:6:69","nodeType":"YulIdentifier","src":"32668:6:69"},{"kind":"number","nativeSrc":"32676:1:69","nodeType":"YulLiteral","src":"32676:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"32664:3:69","nodeType":"YulIdentifier","src":"32664:3:69"},"nativeSrc":"32664:14:69","nodeType":"YulFunctionCall","src":"32664:14:69"},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f20616464","kind":"string","nativeSrc":"32680:34:69","nodeType":"YulLiteral","src":"32680:34:69","type":"","value":"ERC20: approve from the zero add"}],"functionName":{"name":"mstore","nativeSrc":"32657:6:69","nodeType":"YulIdentifier","src":"32657:6:69"},"nativeSrc":"32657:58:69","nodeType":"YulFunctionCall","src":"32657:58:69"},"nativeSrc":"32657:58:69","nodeType":"YulExpressionStatement","src":"32657:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"32736:6:69","nodeType":"YulIdentifier","src":"32736:6:69"},{"kind":"number","nativeSrc":"32744:2:69","nodeType":"YulLiteral","src":"32744:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"32732:3:69","nodeType":"YulIdentifier","src":"32732:3:69"},"nativeSrc":"32732:15:69","nodeType":"YulFunctionCall","src":"32732:15:69"},{"hexValue":"72657373","kind":"string","nativeSrc":"32749:6:69","nodeType":"YulLiteral","src":"32749:6:69","type":"","value":"ress"}],"functionName":{"name":"mstore","nativeSrc":"32725:6:69","nodeType":"YulIdentifier","src":"32725:6:69"},"nativeSrc":"32725:31:69","nodeType":"YulFunctionCall","src":"32725:31:69"},"nativeSrc":"32725:31:69","nodeType":"YulExpressionStatement","src":"32725:31:69"}]},"name":"store_literal_in_memory_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208","nativeSrc":"32540:223:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"32638:6:69","nodeType":"YulTypedName","src":"32638:6:69","type":""}],"src":"32540:223:69"},{"body":{"nativeSrc":"32915:220:69","nodeType":"YulBlock","src":"32915:220:69","statements":[{"nativeSrc":"32925:74:69","nodeType":"YulAssignment","src":"32925:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"32991:3:69","nodeType":"YulIdentifier","src":"32991:3:69"},{"kind":"number","nativeSrc":"32996:2:69","nodeType":"YulLiteral","src":"32996:2:69","type":"","value":"36"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"32932:58:69","nodeType":"YulIdentifier","src":"32932:58:69"},"nativeSrc":"32932:67:69","nodeType":"YulFunctionCall","src":"32932:67:69"},"variableNames":[{"name":"pos","nativeSrc":"32925:3:69","nodeType":"YulIdentifier","src":"32925:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"33097:3:69","nodeType":"YulIdentifier","src":"33097:3:69"}],"functionName":{"name":"store_literal_in_memory_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208","nativeSrc":"33008:88:69","nodeType":"YulIdentifier","src":"33008:88:69"},"nativeSrc":"33008:93:69","nodeType":"YulFunctionCall","src":"33008:93:69"},"nativeSrc":"33008:93:69","nodeType":"YulExpressionStatement","src":"33008:93:69"},{"nativeSrc":"33110:19:69","nodeType":"YulAssignment","src":"33110:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"33121:3:69","nodeType":"YulIdentifier","src":"33121:3:69"},{"kind":"number","nativeSrc":"33126:2:69","nodeType":"YulLiteral","src":"33126:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"33117:3:69","nodeType":"YulIdentifier","src":"33117:3:69"},"nativeSrc":"33117:12:69","nodeType":"YulFunctionCall","src":"33117:12:69"},"variableNames":[{"name":"end","nativeSrc":"33110:3:69","nodeType":"YulIdentifier","src":"33110:3:69"}]}]},"name":"abi_encode_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208_to_t_string_memory_ptr_fromStack","nativeSrc":"32769:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"32903:3:69","nodeType":"YulTypedName","src":"32903:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"32911:3:69","nodeType":"YulTypedName","src":"32911:3:69","type":""}],"src":"32769:366:69"},{"body":{"nativeSrc":"33312:248:69","nodeType":"YulBlock","src":"33312:248:69","statements":[{"nativeSrc":"33322:26:69","nodeType":"YulAssignment","src":"33322:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"33334:9:69","nodeType":"YulIdentifier","src":"33334:9:69"},{"kind":"number","nativeSrc":"33345:2:69","nodeType":"YulLiteral","src":"33345:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"33330:3:69","nodeType":"YulIdentifier","src":"33330:3:69"},"nativeSrc":"33330:18:69","nodeType":"YulFunctionCall","src":"33330:18:69"},"variableNames":[{"name":"tail","nativeSrc":"33322:4:69","nodeType":"YulIdentifier","src":"33322:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"33369:9:69","nodeType":"YulIdentifier","src":"33369:9:69"},{"kind":"number","nativeSrc":"33380:1:69","nodeType":"YulLiteral","src":"33380:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"33365:3:69","nodeType":"YulIdentifier","src":"33365:3:69"},"nativeSrc":"33365:17:69","nodeType":"YulFunctionCall","src":"33365:17:69"},{"arguments":[{"name":"tail","nativeSrc":"33388:4:69","nodeType":"YulIdentifier","src":"33388:4:69"},{"name":"headStart","nativeSrc":"33394:9:69","nodeType":"YulIdentifier","src":"33394:9:69"}],"functionName":{"name":"sub","nativeSrc":"33384:3:69","nodeType":"YulIdentifier","src":"33384:3:69"},"nativeSrc":"33384:20:69","nodeType":"YulFunctionCall","src":"33384:20:69"}],"functionName":{"name":"mstore","nativeSrc":"33358:6:69","nodeType":"YulIdentifier","src":"33358:6:69"},"nativeSrc":"33358:47:69","nodeType":"YulFunctionCall","src":"33358:47:69"},"nativeSrc":"33358:47:69","nodeType":"YulExpressionStatement","src":"33358:47:69"},{"nativeSrc":"33414:139:69","nodeType":"YulAssignment","src":"33414:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"33548:4:69","nodeType":"YulIdentifier","src":"33548:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208_to_t_string_memory_ptr_fromStack","nativeSrc":"33422:124:69","nodeType":"YulIdentifier","src":"33422:124:69"},"nativeSrc":"33422:131:69","nodeType":"YulFunctionCall","src":"33422:131:69"},"variableNames":[{"name":"tail","nativeSrc":"33414:4:69","nodeType":"YulIdentifier","src":"33414:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"33141:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"33292:9:69","nodeType":"YulTypedName","src":"33292:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"33307:4:69","nodeType":"YulTypedName","src":"33307:4:69","type":""}],"src":"33141:419:69"},{"body":{"nativeSrc":"33672:115:69","nodeType":"YulBlock","src":"33672:115:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"33694:6:69","nodeType":"YulIdentifier","src":"33694:6:69"},{"kind":"number","nativeSrc":"33702:1:69","nodeType":"YulLiteral","src":"33702:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"33690:3:69","nodeType":"YulIdentifier","src":"33690:3:69"},"nativeSrc":"33690:14:69","nodeType":"YulFunctionCall","src":"33690:14:69"},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f206164647265","kind":"string","nativeSrc":"33706:34:69","nodeType":"YulLiteral","src":"33706:34:69","type":"","value":"ERC20: approve to the zero addre"}],"functionName":{"name":"mstore","nativeSrc":"33683:6:69","nodeType":"YulIdentifier","src":"33683:6:69"},"nativeSrc":"33683:58:69","nodeType":"YulFunctionCall","src":"33683:58:69"},"nativeSrc":"33683:58:69","nodeType":"YulExpressionStatement","src":"33683:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"33762:6:69","nodeType":"YulIdentifier","src":"33762:6:69"},{"kind":"number","nativeSrc":"33770:2:69","nodeType":"YulLiteral","src":"33770:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"33758:3:69","nodeType":"YulIdentifier","src":"33758:3:69"},"nativeSrc":"33758:15:69","nodeType":"YulFunctionCall","src":"33758:15:69"},{"hexValue":"7373","kind":"string","nativeSrc":"33775:4:69","nodeType":"YulLiteral","src":"33775:4:69","type":"","value":"ss"}],"functionName":{"name":"mstore","nativeSrc":"33751:6:69","nodeType":"YulIdentifier","src":"33751:6:69"},"nativeSrc":"33751:29:69","nodeType":"YulFunctionCall","src":"33751:29:69"},"nativeSrc":"33751:29:69","nodeType":"YulExpressionStatement","src":"33751:29:69"}]},"name":"store_literal_in_memory_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029","nativeSrc":"33566:221:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"33664:6:69","nodeType":"YulTypedName","src":"33664:6:69","type":""}],"src":"33566:221:69"},{"body":{"nativeSrc":"33939:220:69","nodeType":"YulBlock","src":"33939:220:69","statements":[{"nativeSrc":"33949:74:69","nodeType":"YulAssignment","src":"33949:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"34015:3:69","nodeType":"YulIdentifier","src":"34015:3:69"},{"kind":"number","nativeSrc":"34020:2:69","nodeType":"YulLiteral","src":"34020:2:69","type":"","value":"34"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"33956:58:69","nodeType":"YulIdentifier","src":"33956:58:69"},"nativeSrc":"33956:67:69","nodeType":"YulFunctionCall","src":"33956:67:69"},"variableNames":[{"name":"pos","nativeSrc":"33949:3:69","nodeType":"YulIdentifier","src":"33949:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"34121:3:69","nodeType":"YulIdentifier","src":"34121:3:69"}],"functionName":{"name":"store_literal_in_memory_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029","nativeSrc":"34032:88:69","nodeType":"YulIdentifier","src":"34032:88:69"},"nativeSrc":"34032:93:69","nodeType":"YulFunctionCall","src":"34032:93:69"},"nativeSrc":"34032:93:69","nodeType":"YulExpressionStatement","src":"34032:93:69"},{"nativeSrc":"34134:19:69","nodeType":"YulAssignment","src":"34134:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"34145:3:69","nodeType":"YulIdentifier","src":"34145:3:69"},{"kind":"number","nativeSrc":"34150:2:69","nodeType":"YulLiteral","src":"34150:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"34141:3:69","nodeType":"YulIdentifier","src":"34141:3:69"},"nativeSrc":"34141:12:69","nodeType":"YulFunctionCall","src":"34141:12:69"},"variableNames":[{"name":"end","nativeSrc":"34134:3:69","nodeType":"YulIdentifier","src":"34134:3:69"}]}]},"name":"abi_encode_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029_to_t_string_memory_ptr_fromStack","nativeSrc":"33793:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"33927:3:69","nodeType":"YulTypedName","src":"33927:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"33935:3:69","nodeType":"YulTypedName","src":"33935:3:69","type":""}],"src":"33793:366:69"},{"body":{"nativeSrc":"34336:248:69","nodeType":"YulBlock","src":"34336:248:69","statements":[{"nativeSrc":"34346:26:69","nodeType":"YulAssignment","src":"34346:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"34358:9:69","nodeType":"YulIdentifier","src":"34358:9:69"},{"kind":"number","nativeSrc":"34369:2:69","nodeType":"YulLiteral","src":"34369:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"34354:3:69","nodeType":"YulIdentifier","src":"34354:3:69"},"nativeSrc":"34354:18:69","nodeType":"YulFunctionCall","src":"34354:18:69"},"variableNames":[{"name":"tail","nativeSrc":"34346:4:69","nodeType":"YulIdentifier","src":"34346:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"34393:9:69","nodeType":"YulIdentifier","src":"34393:9:69"},{"kind":"number","nativeSrc":"34404:1:69","nodeType":"YulLiteral","src":"34404:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"34389:3:69","nodeType":"YulIdentifier","src":"34389:3:69"},"nativeSrc":"34389:17:69","nodeType":"YulFunctionCall","src":"34389:17:69"},{"arguments":[{"name":"tail","nativeSrc":"34412:4:69","nodeType":"YulIdentifier","src":"34412:4:69"},{"name":"headStart","nativeSrc":"34418:9:69","nodeType":"YulIdentifier","src":"34418:9:69"}],"functionName":{"name":"sub","nativeSrc":"34408:3:69","nodeType":"YulIdentifier","src":"34408:3:69"},"nativeSrc":"34408:20:69","nodeType":"YulFunctionCall","src":"34408:20:69"}],"functionName":{"name":"mstore","nativeSrc":"34382:6:69","nodeType":"YulIdentifier","src":"34382:6:69"},"nativeSrc":"34382:47:69","nodeType":"YulFunctionCall","src":"34382:47:69"},"nativeSrc":"34382:47:69","nodeType":"YulExpressionStatement","src":"34382:47:69"},{"nativeSrc":"34438:139:69","nodeType":"YulAssignment","src":"34438:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"34572:4:69","nodeType":"YulIdentifier","src":"34572:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029_to_t_string_memory_ptr_fromStack","nativeSrc":"34446:124:69","nodeType":"YulIdentifier","src":"34446:124:69"},"nativeSrc":"34446:131:69","nodeType":"YulFunctionCall","src":"34446:131:69"},"variableNames":[{"name":"tail","nativeSrc":"34438:4:69","nodeType":"YulIdentifier","src":"34438:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"34165:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"34316:9:69","nodeType":"YulTypedName","src":"34316:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"34331:4:69","nodeType":"YulTypedName","src":"34331:4:69","type":""}],"src":"34165:419:69"},{"body":{"nativeSrc":"34696:76:69","nodeType":"YulBlock","src":"34696:76:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"34718:6:69","nodeType":"YulIdentifier","src":"34718:6:69"},{"kind":"number","nativeSrc":"34726:1:69","nodeType":"YulLiteral","src":"34726:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"34714:3:69","nodeType":"YulIdentifier","src":"34714:3:69"},"nativeSrc":"34714:14:69","nodeType":"YulFunctionCall","src":"34714:14:69"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nativeSrc":"34730:34:69","nodeType":"YulLiteral","src":"34730:34:69","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nativeSrc":"34707:6:69","nodeType":"YulIdentifier","src":"34707:6:69"},"nativeSrc":"34707:58:69","nodeType":"YulFunctionCall","src":"34707:58:69"},"nativeSrc":"34707:58:69","nodeType":"YulExpressionStatement","src":"34707:58:69"}]},"name":"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","nativeSrc":"34590:182:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"34688:6:69","nodeType":"YulTypedName","src":"34688:6:69","type":""}],"src":"34590:182:69"},{"body":{"nativeSrc":"34924:220:69","nodeType":"YulBlock","src":"34924:220:69","statements":[{"nativeSrc":"34934:74:69","nodeType":"YulAssignment","src":"34934:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"35000:3:69","nodeType":"YulIdentifier","src":"35000:3:69"},{"kind":"number","nativeSrc":"35005:2:69","nodeType":"YulLiteral","src":"35005:2:69","type":"","value":"32"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"34941:58:69","nodeType":"YulIdentifier","src":"34941:58:69"},"nativeSrc":"34941:67:69","nodeType":"YulFunctionCall","src":"34941:67:69"},"variableNames":[{"name":"pos","nativeSrc":"34934:3:69","nodeType":"YulIdentifier","src":"34934:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"35106:3:69","nodeType":"YulIdentifier","src":"35106:3:69"}],"functionName":{"name":"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","nativeSrc":"35017:88:69","nodeType":"YulIdentifier","src":"35017:88:69"},"nativeSrc":"35017:93:69","nodeType":"YulFunctionCall","src":"35017:93:69"},"nativeSrc":"35017:93:69","nodeType":"YulExpressionStatement","src":"35017:93:69"},{"nativeSrc":"35119:19:69","nodeType":"YulAssignment","src":"35119:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"35130:3:69","nodeType":"YulIdentifier","src":"35130:3:69"},{"kind":"number","nativeSrc":"35135:2:69","nodeType":"YulLiteral","src":"35135:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"35126:3:69","nodeType":"YulIdentifier","src":"35126:3:69"},"nativeSrc":"35126:12:69","nodeType":"YulFunctionCall","src":"35126:12:69"},"variableNames":[{"name":"end","nativeSrc":"35119:3:69","nodeType":"YulIdentifier","src":"35119:3:69"}]}]},"name":"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack","nativeSrc":"34778:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"34912:3:69","nodeType":"YulTypedName","src":"34912:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"34920:3:69","nodeType":"YulTypedName","src":"34920:3:69","type":""}],"src":"34778:366:69"},{"body":{"nativeSrc":"35321:248:69","nodeType":"YulBlock","src":"35321:248:69","statements":[{"nativeSrc":"35331:26:69","nodeType":"YulAssignment","src":"35331:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"35343:9:69","nodeType":"YulIdentifier","src":"35343:9:69"},{"kind":"number","nativeSrc":"35354:2:69","nodeType":"YulLiteral","src":"35354:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"35339:3:69","nodeType":"YulIdentifier","src":"35339:3:69"},"nativeSrc":"35339:18:69","nodeType":"YulFunctionCall","src":"35339:18:69"},"variableNames":[{"name":"tail","nativeSrc":"35331:4:69","nodeType":"YulIdentifier","src":"35331:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"35378:9:69","nodeType":"YulIdentifier","src":"35378:9:69"},{"kind":"number","nativeSrc":"35389:1:69","nodeType":"YulLiteral","src":"35389:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"35374:3:69","nodeType":"YulIdentifier","src":"35374:3:69"},"nativeSrc":"35374:17:69","nodeType":"YulFunctionCall","src":"35374:17:69"},{"arguments":[{"name":"tail","nativeSrc":"35397:4:69","nodeType":"YulIdentifier","src":"35397:4:69"},{"name":"headStart","nativeSrc":"35403:9:69","nodeType":"YulIdentifier","src":"35403:9:69"}],"functionName":{"name":"sub","nativeSrc":"35393:3:69","nodeType":"YulIdentifier","src":"35393:3:69"},"nativeSrc":"35393:20:69","nodeType":"YulFunctionCall","src":"35393:20:69"}],"functionName":{"name":"mstore","nativeSrc":"35367:6:69","nodeType":"YulIdentifier","src":"35367:6:69"},"nativeSrc":"35367:47:69","nodeType":"YulFunctionCall","src":"35367:47:69"},"nativeSrc":"35367:47:69","nodeType":"YulExpressionStatement","src":"35367:47:69"},{"nativeSrc":"35423:139:69","nodeType":"YulAssignment","src":"35423:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"35557:4:69","nodeType":"YulIdentifier","src":"35557:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack","nativeSrc":"35431:124:69","nodeType":"YulIdentifier","src":"35431:124:69"},"nativeSrc":"35431:131:69","nodeType":"YulFunctionCall","src":"35431:131:69"},"variableNames":[{"name":"tail","nativeSrc":"35423:4:69","nodeType":"YulIdentifier","src":"35423:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"35150:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"35301:9:69","nodeType":"YulTypedName","src":"35301:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"35316:4:69","nodeType":"YulTypedName","src":"35316:4:69","type":""}],"src":"35150:419:69"},{"body":{"nativeSrc":"35681:118:69","nodeType":"YulBlock","src":"35681:118:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"35703:6:69","nodeType":"YulIdentifier","src":"35703:6:69"},{"kind":"number","nativeSrc":"35711:1:69","nodeType":"YulLiteral","src":"35711:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"35699:3:69","nodeType":"YulIdentifier","src":"35699:3:69"},"nativeSrc":"35699:14:69","nodeType":"YulFunctionCall","src":"35699:14:69"},{"hexValue":"696e76616c696420616365737320636f6e74726f6c206d616e61676572206164","kind":"string","nativeSrc":"35715:34:69","nodeType":"YulLiteral","src":"35715:34:69","type":"","value":"invalid acess control manager ad"}],"functionName":{"name":"mstore","nativeSrc":"35692:6:69","nodeType":"YulIdentifier","src":"35692:6:69"},"nativeSrc":"35692:58:69","nodeType":"YulFunctionCall","src":"35692:58:69"},"nativeSrc":"35692:58:69","nodeType":"YulExpressionStatement","src":"35692:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"35771:6:69","nodeType":"YulIdentifier","src":"35771:6:69"},{"kind":"number","nativeSrc":"35779:2:69","nodeType":"YulLiteral","src":"35779:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"35767:3:69","nodeType":"YulIdentifier","src":"35767:3:69"},"nativeSrc":"35767:15:69","nodeType":"YulFunctionCall","src":"35767:15:69"},{"hexValue":"6472657373","kind":"string","nativeSrc":"35784:7:69","nodeType":"YulLiteral","src":"35784:7:69","type":"","value":"dress"}],"functionName":{"name":"mstore","nativeSrc":"35760:6:69","nodeType":"YulIdentifier","src":"35760:6:69"},"nativeSrc":"35760:32:69","nodeType":"YulFunctionCall","src":"35760:32:69"},"nativeSrc":"35760:32:69","nodeType":"YulExpressionStatement","src":"35760:32:69"}]},"name":"store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb","nativeSrc":"35575:224:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"35673:6:69","nodeType":"YulTypedName","src":"35673:6:69","type":""}],"src":"35575:224:69"},{"body":{"nativeSrc":"35951:220:69","nodeType":"YulBlock","src":"35951:220:69","statements":[{"nativeSrc":"35961:74:69","nodeType":"YulAssignment","src":"35961:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"36027:3:69","nodeType":"YulIdentifier","src":"36027:3:69"},{"kind":"number","nativeSrc":"36032:2:69","nodeType":"YulLiteral","src":"36032:2:69","type":"","value":"37"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"35968:58:69","nodeType":"YulIdentifier","src":"35968:58:69"},"nativeSrc":"35968:67:69","nodeType":"YulFunctionCall","src":"35968:67:69"},"variableNames":[{"name":"pos","nativeSrc":"35961:3:69","nodeType":"YulIdentifier","src":"35961:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"36133:3:69","nodeType":"YulIdentifier","src":"36133:3:69"}],"functionName":{"name":"store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb","nativeSrc":"36044:88:69","nodeType":"YulIdentifier","src":"36044:88:69"},"nativeSrc":"36044:93:69","nodeType":"YulFunctionCall","src":"36044:93:69"},"nativeSrc":"36044:93:69","nodeType":"YulExpressionStatement","src":"36044:93:69"},{"nativeSrc":"36146:19:69","nodeType":"YulAssignment","src":"36146:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"36157:3:69","nodeType":"YulIdentifier","src":"36157:3:69"},{"kind":"number","nativeSrc":"36162:2:69","nodeType":"YulLiteral","src":"36162:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"36153:3:69","nodeType":"YulIdentifier","src":"36153:3:69"},"nativeSrc":"36153:12:69","nodeType":"YulFunctionCall","src":"36153:12:69"},"variableNames":[{"name":"end","nativeSrc":"36146:3:69","nodeType":"YulIdentifier","src":"36146:3:69"}]}]},"name":"abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack","nativeSrc":"35805:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"35939:3:69","nodeType":"YulTypedName","src":"35939:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"35947:3:69","nodeType":"YulTypedName","src":"35947:3:69","type":""}],"src":"35805:366:69"},{"body":{"nativeSrc":"36348:248:69","nodeType":"YulBlock","src":"36348:248:69","statements":[{"nativeSrc":"36358:26:69","nodeType":"YulAssignment","src":"36358:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"36370:9:69","nodeType":"YulIdentifier","src":"36370:9:69"},{"kind":"number","nativeSrc":"36381:2:69","nodeType":"YulLiteral","src":"36381:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"36366:3:69","nodeType":"YulIdentifier","src":"36366:3:69"},"nativeSrc":"36366:18:69","nodeType":"YulFunctionCall","src":"36366:18:69"},"variableNames":[{"name":"tail","nativeSrc":"36358:4:69","nodeType":"YulIdentifier","src":"36358:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"36405:9:69","nodeType":"YulIdentifier","src":"36405:9:69"},{"kind":"number","nativeSrc":"36416:1:69","nodeType":"YulLiteral","src":"36416:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"36401:3:69","nodeType":"YulIdentifier","src":"36401:3:69"},"nativeSrc":"36401:17:69","nodeType":"YulFunctionCall","src":"36401:17:69"},{"arguments":[{"name":"tail","nativeSrc":"36424:4:69","nodeType":"YulIdentifier","src":"36424:4:69"},{"name":"headStart","nativeSrc":"36430:9:69","nodeType":"YulIdentifier","src":"36430:9:69"}],"functionName":{"name":"sub","nativeSrc":"36420:3:69","nodeType":"YulIdentifier","src":"36420:3:69"},"nativeSrc":"36420:20:69","nodeType":"YulFunctionCall","src":"36420:20:69"}],"functionName":{"name":"mstore","nativeSrc":"36394:6:69","nodeType":"YulIdentifier","src":"36394:6:69"},"nativeSrc":"36394:47:69","nodeType":"YulFunctionCall","src":"36394:47:69"},"nativeSrc":"36394:47:69","nodeType":"YulExpressionStatement","src":"36394:47:69"},{"nativeSrc":"36450:139:69","nodeType":"YulAssignment","src":"36450:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"36584:4:69","nodeType":"YulIdentifier","src":"36584:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack","nativeSrc":"36458:124:69","nodeType":"YulIdentifier","src":"36458:124:69"},"nativeSrc":"36458:131:69","nodeType":"YulFunctionCall","src":"36458:131:69"},"variableNames":[{"name":"tail","nativeSrc":"36450:4:69","nodeType":"YulIdentifier","src":"36450:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"36177:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"36328:9:69","nodeType":"YulTypedName","src":"36328:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"36343:4:69","nodeType":"YulTypedName","src":"36343:4:69","type":""}],"src":"36177:419:69"},{"body":{"nativeSrc":"36728:206:69","nodeType":"YulBlock","src":"36728:206:69","statements":[{"nativeSrc":"36738:26:69","nodeType":"YulAssignment","src":"36738:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"36750:9:69","nodeType":"YulIdentifier","src":"36750:9:69"},{"kind":"number","nativeSrc":"36761:2:69","nodeType":"YulLiteral","src":"36761:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"36746:3:69","nodeType":"YulIdentifier","src":"36746:3:69"},"nativeSrc":"36746:18:69","nodeType":"YulFunctionCall","src":"36746:18:69"},"variableNames":[{"name":"tail","nativeSrc":"36738:4:69","nodeType":"YulIdentifier","src":"36738:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"36818:6:69","nodeType":"YulIdentifier","src":"36818:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"36831:9:69","nodeType":"YulIdentifier","src":"36831:9:69"},{"kind":"number","nativeSrc":"36842:1:69","nodeType":"YulLiteral","src":"36842:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"36827:3:69","nodeType":"YulIdentifier","src":"36827:3:69"},"nativeSrc":"36827:17:69","nodeType":"YulFunctionCall","src":"36827:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"36774:43:69","nodeType":"YulIdentifier","src":"36774:43:69"},"nativeSrc":"36774:71:69","nodeType":"YulFunctionCall","src":"36774:71:69"},"nativeSrc":"36774:71:69","nodeType":"YulExpressionStatement","src":"36774:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"36899:6:69","nodeType":"YulIdentifier","src":"36899:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"36912:9:69","nodeType":"YulIdentifier","src":"36912:9:69"},{"kind":"number","nativeSrc":"36923:2:69","nodeType":"YulLiteral","src":"36923:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"36908:3:69","nodeType":"YulIdentifier","src":"36908:3:69"},"nativeSrc":"36908:18:69","nodeType":"YulFunctionCall","src":"36908:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"36855:43:69","nodeType":"YulIdentifier","src":"36855:43:69"},"nativeSrc":"36855:72:69","nodeType":"YulFunctionCall","src":"36855:72:69"},"nativeSrc":"36855:72:69","nodeType":"YulExpressionStatement","src":"36855:72:69"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nativeSrc":"36602:332:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"36692:9:69","nodeType":"YulTypedName","src":"36692:9:69","type":""},{"name":"value1","nativeSrc":"36704:6:69","nodeType":"YulTypedName","src":"36704:6:69","type":""},{"name":"value0","nativeSrc":"36712:6:69","nodeType":"YulTypedName","src":"36712:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"36723:4:69","nodeType":"YulTypedName","src":"36723:4:69","type":""}],"src":"36602:332:69"},{"body":{"nativeSrc":"37066:206:69","nodeType":"YulBlock","src":"37066:206:69","statements":[{"nativeSrc":"37076:26:69","nodeType":"YulAssignment","src":"37076:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"37088:9:69","nodeType":"YulIdentifier","src":"37088:9:69"},{"kind":"number","nativeSrc":"37099:2:69","nodeType":"YulLiteral","src":"37099:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"37084:3:69","nodeType":"YulIdentifier","src":"37084:3:69"},"nativeSrc":"37084:18:69","nodeType":"YulFunctionCall","src":"37084:18:69"},"variableNames":[{"name":"tail","nativeSrc":"37076:4:69","nodeType":"YulIdentifier","src":"37076:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"37156:6:69","nodeType":"YulIdentifier","src":"37156:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"37169:9:69","nodeType":"YulIdentifier","src":"37169:9:69"},{"kind":"number","nativeSrc":"37180:1:69","nodeType":"YulLiteral","src":"37180:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"37165:3:69","nodeType":"YulIdentifier","src":"37165:3:69"},"nativeSrc":"37165:17:69","nodeType":"YulFunctionCall","src":"37165:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"37112:43:69","nodeType":"YulIdentifier","src":"37112:43:69"},"nativeSrc":"37112:71:69","nodeType":"YulFunctionCall","src":"37112:71:69"},"nativeSrc":"37112:71:69","nodeType":"YulExpressionStatement","src":"37112:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"37237:6:69","nodeType":"YulIdentifier","src":"37237:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"37250:9:69","nodeType":"YulIdentifier","src":"37250:9:69"},{"kind":"number","nativeSrc":"37261:2:69","nodeType":"YulLiteral","src":"37261:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"37246:3:69","nodeType":"YulIdentifier","src":"37246:3:69"},"nativeSrc":"37246:18:69","nodeType":"YulFunctionCall","src":"37246:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"37193:43:69","nodeType":"YulIdentifier","src":"37193:43:69"},"nativeSrc":"37193:72:69","nodeType":"YulFunctionCall","src":"37193:72:69"},"nativeSrc":"37193:72:69","nodeType":"YulExpressionStatement","src":"37193:72:69"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nativeSrc":"36940:332:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"37030:9:69","nodeType":"YulTypedName","src":"37030:9:69","type":""},{"name":"value1","nativeSrc":"37042:6:69","nodeType":"YulTypedName","src":"37042:6:69","type":""},{"name":"value0","nativeSrc":"37050:6:69","nodeType":"YulTypedName","src":"37050:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"37061:4:69","nodeType":"YulTypedName","src":"37061:4:69","type":""}],"src":"36940:332:69"},{"body":{"nativeSrc":"37384:73:69","nodeType":"YulBlock","src":"37384:73:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"37406:6:69","nodeType":"YulIdentifier","src":"37406:6:69"},{"kind":"number","nativeSrc":"37414:1:69","nodeType":"YulLiteral","src":"37414:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"37402:3:69","nodeType":"YulIdentifier","src":"37402:3:69"},"nativeSrc":"37402:14:69","nodeType":"YulFunctionCall","src":"37402:14:69"},{"hexValue":"45524332303a20696e73756666696369656e7420616c6c6f77616e6365","kind":"string","nativeSrc":"37418:31:69","nodeType":"YulLiteral","src":"37418:31:69","type":"","value":"ERC20: insufficient allowance"}],"functionName":{"name":"mstore","nativeSrc":"37395:6:69","nodeType":"YulIdentifier","src":"37395:6:69"},"nativeSrc":"37395:55:69","nodeType":"YulFunctionCall","src":"37395:55:69"},"nativeSrc":"37395:55:69","nodeType":"YulExpressionStatement","src":"37395:55:69"}]},"name":"store_literal_in_memory_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe","nativeSrc":"37278:179:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"37376:6:69","nodeType":"YulTypedName","src":"37376:6:69","type":""}],"src":"37278:179:69"},{"body":{"nativeSrc":"37609:220:69","nodeType":"YulBlock","src":"37609:220:69","statements":[{"nativeSrc":"37619:74:69","nodeType":"YulAssignment","src":"37619:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"37685:3:69","nodeType":"YulIdentifier","src":"37685:3:69"},{"kind":"number","nativeSrc":"37690:2:69","nodeType":"YulLiteral","src":"37690:2:69","type":"","value":"29"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"37626:58:69","nodeType":"YulIdentifier","src":"37626:58:69"},"nativeSrc":"37626:67:69","nodeType":"YulFunctionCall","src":"37626:67:69"},"variableNames":[{"name":"pos","nativeSrc":"37619:3:69","nodeType":"YulIdentifier","src":"37619:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"37791:3:69","nodeType":"YulIdentifier","src":"37791:3:69"}],"functionName":{"name":"store_literal_in_memory_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe","nativeSrc":"37702:88:69","nodeType":"YulIdentifier","src":"37702:88:69"},"nativeSrc":"37702:93:69","nodeType":"YulFunctionCall","src":"37702:93:69"},"nativeSrc":"37702:93:69","nodeType":"YulExpressionStatement","src":"37702:93:69"},{"nativeSrc":"37804:19:69","nodeType":"YulAssignment","src":"37804:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"37815:3:69","nodeType":"YulIdentifier","src":"37815:3:69"},{"kind":"number","nativeSrc":"37820:2:69","nodeType":"YulLiteral","src":"37820:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"37811:3:69","nodeType":"YulIdentifier","src":"37811:3:69"},"nativeSrc":"37811:12:69","nodeType":"YulFunctionCall","src":"37811:12:69"},"variableNames":[{"name":"end","nativeSrc":"37804:3:69","nodeType":"YulIdentifier","src":"37804:3:69"}]}]},"name":"abi_encode_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe_to_t_string_memory_ptr_fromStack","nativeSrc":"37463:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"37597:3:69","nodeType":"YulTypedName","src":"37597:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"37605:3:69","nodeType":"YulTypedName","src":"37605:3:69","type":""}],"src":"37463:366:69"},{"body":{"nativeSrc":"38006:248:69","nodeType":"YulBlock","src":"38006:248:69","statements":[{"nativeSrc":"38016:26:69","nodeType":"YulAssignment","src":"38016:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"38028:9:69","nodeType":"YulIdentifier","src":"38028:9:69"},{"kind":"number","nativeSrc":"38039:2:69","nodeType":"YulLiteral","src":"38039:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"38024:3:69","nodeType":"YulIdentifier","src":"38024:3:69"},"nativeSrc":"38024:18:69","nodeType":"YulFunctionCall","src":"38024:18:69"},"variableNames":[{"name":"tail","nativeSrc":"38016:4:69","nodeType":"YulIdentifier","src":"38016:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"38063:9:69","nodeType":"YulIdentifier","src":"38063:9:69"},{"kind":"number","nativeSrc":"38074:1:69","nodeType":"YulLiteral","src":"38074:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"38059:3:69","nodeType":"YulIdentifier","src":"38059:3:69"},"nativeSrc":"38059:17:69","nodeType":"YulFunctionCall","src":"38059:17:69"},{"arguments":[{"name":"tail","nativeSrc":"38082:4:69","nodeType":"YulIdentifier","src":"38082:4:69"},{"name":"headStart","nativeSrc":"38088:9:69","nodeType":"YulIdentifier","src":"38088:9:69"}],"functionName":{"name":"sub","nativeSrc":"38078:3:69","nodeType":"YulIdentifier","src":"38078:3:69"},"nativeSrc":"38078:20:69","nodeType":"YulFunctionCall","src":"38078:20:69"}],"functionName":{"name":"mstore","nativeSrc":"38052:6:69","nodeType":"YulIdentifier","src":"38052:6:69"},"nativeSrc":"38052:47:69","nodeType":"YulFunctionCall","src":"38052:47:69"},"nativeSrc":"38052:47:69","nodeType":"YulExpressionStatement","src":"38052:47:69"},{"nativeSrc":"38108:139:69","nodeType":"YulAssignment","src":"38108:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"38242:4:69","nodeType":"YulIdentifier","src":"38242:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe_to_t_string_memory_ptr_fromStack","nativeSrc":"38116:124:69","nodeType":"YulIdentifier","src":"38116:124:69"},"nativeSrc":"38116:131:69","nodeType":"YulFunctionCall","src":"38116:131:69"},"variableNames":[{"name":"tail","nativeSrc":"38108:4:69","nodeType":"YulIdentifier","src":"38108:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"37835:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"37986:9:69","nodeType":"YulTypedName","src":"37986:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"38001:4:69","nodeType":"YulTypedName","src":"38001:4:69","type":""}],"src":"37835:419:69"},{"body":{"nativeSrc":"38366:118:69","nodeType":"YulBlock","src":"38366:118:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"38388:6:69","nodeType":"YulIdentifier","src":"38388:6:69"},{"kind":"number","nativeSrc":"38396:1:69","nodeType":"YulLiteral","src":"38396:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"38384:3:69","nodeType":"YulIdentifier","src":"38384:3:69"},"nativeSrc":"38384:14:69","nodeType":"YulFunctionCall","src":"38384:14:69"},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f206164","kind":"string","nativeSrc":"38400:34:69","nodeType":"YulLiteral","src":"38400:34:69","type":"","value":"ERC20: transfer from the zero ad"}],"functionName":{"name":"mstore","nativeSrc":"38377:6:69","nodeType":"YulIdentifier","src":"38377:6:69"},"nativeSrc":"38377:58:69","nodeType":"YulFunctionCall","src":"38377:58:69"},"nativeSrc":"38377:58:69","nodeType":"YulExpressionStatement","src":"38377:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"38456:6:69","nodeType":"YulIdentifier","src":"38456:6:69"},{"kind":"number","nativeSrc":"38464:2:69","nodeType":"YulLiteral","src":"38464:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"38452:3:69","nodeType":"YulIdentifier","src":"38452:3:69"},"nativeSrc":"38452:15:69","nodeType":"YulFunctionCall","src":"38452:15:69"},{"hexValue":"6472657373","kind":"string","nativeSrc":"38469:7:69","nodeType":"YulLiteral","src":"38469:7:69","type":"","value":"dress"}],"functionName":{"name":"mstore","nativeSrc":"38445:6:69","nodeType":"YulIdentifier","src":"38445:6:69"},"nativeSrc":"38445:32:69","nodeType":"YulFunctionCall","src":"38445:32:69"},"nativeSrc":"38445:32:69","nodeType":"YulExpressionStatement","src":"38445:32:69"}]},"name":"store_literal_in_memory_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea","nativeSrc":"38260:224:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"38358:6:69","nodeType":"YulTypedName","src":"38358:6:69","type":""}],"src":"38260:224:69"},{"body":{"nativeSrc":"38636:220:69","nodeType":"YulBlock","src":"38636:220:69","statements":[{"nativeSrc":"38646:74:69","nodeType":"YulAssignment","src":"38646:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"38712:3:69","nodeType":"YulIdentifier","src":"38712:3:69"},{"kind":"number","nativeSrc":"38717:2:69","nodeType":"YulLiteral","src":"38717:2:69","type":"","value":"37"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"38653:58:69","nodeType":"YulIdentifier","src":"38653:58:69"},"nativeSrc":"38653:67:69","nodeType":"YulFunctionCall","src":"38653:67:69"},"variableNames":[{"name":"pos","nativeSrc":"38646:3:69","nodeType":"YulIdentifier","src":"38646:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"38818:3:69","nodeType":"YulIdentifier","src":"38818:3:69"}],"functionName":{"name":"store_literal_in_memory_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea","nativeSrc":"38729:88:69","nodeType":"YulIdentifier","src":"38729:88:69"},"nativeSrc":"38729:93:69","nodeType":"YulFunctionCall","src":"38729:93:69"},"nativeSrc":"38729:93:69","nodeType":"YulExpressionStatement","src":"38729:93:69"},{"nativeSrc":"38831:19:69","nodeType":"YulAssignment","src":"38831:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"38842:3:69","nodeType":"YulIdentifier","src":"38842:3:69"},{"kind":"number","nativeSrc":"38847:2:69","nodeType":"YulLiteral","src":"38847:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"38838:3:69","nodeType":"YulIdentifier","src":"38838:3:69"},"nativeSrc":"38838:12:69","nodeType":"YulFunctionCall","src":"38838:12:69"},"variableNames":[{"name":"end","nativeSrc":"38831:3:69","nodeType":"YulIdentifier","src":"38831:3:69"}]}]},"name":"abi_encode_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea_to_t_string_memory_ptr_fromStack","nativeSrc":"38490:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"38624:3:69","nodeType":"YulTypedName","src":"38624:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"38632:3:69","nodeType":"YulTypedName","src":"38632:3:69","type":""}],"src":"38490:366:69"},{"body":{"nativeSrc":"39033:248:69","nodeType":"YulBlock","src":"39033:248:69","statements":[{"nativeSrc":"39043:26:69","nodeType":"YulAssignment","src":"39043:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"39055:9:69","nodeType":"YulIdentifier","src":"39055:9:69"},{"kind":"number","nativeSrc":"39066:2:69","nodeType":"YulLiteral","src":"39066:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"39051:3:69","nodeType":"YulIdentifier","src":"39051:3:69"},"nativeSrc":"39051:18:69","nodeType":"YulFunctionCall","src":"39051:18:69"},"variableNames":[{"name":"tail","nativeSrc":"39043:4:69","nodeType":"YulIdentifier","src":"39043:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"39090:9:69","nodeType":"YulIdentifier","src":"39090:9:69"},{"kind":"number","nativeSrc":"39101:1:69","nodeType":"YulLiteral","src":"39101:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"39086:3:69","nodeType":"YulIdentifier","src":"39086:3:69"},"nativeSrc":"39086:17:69","nodeType":"YulFunctionCall","src":"39086:17:69"},{"arguments":[{"name":"tail","nativeSrc":"39109:4:69","nodeType":"YulIdentifier","src":"39109:4:69"},{"name":"headStart","nativeSrc":"39115:9:69","nodeType":"YulIdentifier","src":"39115:9:69"}],"functionName":{"name":"sub","nativeSrc":"39105:3:69","nodeType":"YulIdentifier","src":"39105:3:69"},"nativeSrc":"39105:20:69","nodeType":"YulFunctionCall","src":"39105:20:69"}],"functionName":{"name":"mstore","nativeSrc":"39079:6:69","nodeType":"YulIdentifier","src":"39079:6:69"},"nativeSrc":"39079:47:69","nodeType":"YulFunctionCall","src":"39079:47:69"},"nativeSrc":"39079:47:69","nodeType":"YulExpressionStatement","src":"39079:47:69"},{"nativeSrc":"39135:139:69","nodeType":"YulAssignment","src":"39135:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"39269:4:69","nodeType":"YulIdentifier","src":"39269:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea_to_t_string_memory_ptr_fromStack","nativeSrc":"39143:124:69","nodeType":"YulIdentifier","src":"39143:124:69"},"nativeSrc":"39143:131:69","nodeType":"YulFunctionCall","src":"39143:131:69"},"variableNames":[{"name":"tail","nativeSrc":"39135:4:69","nodeType":"YulIdentifier","src":"39135:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"38862:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"39013:9:69","nodeType":"YulTypedName","src":"39013:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"39028:4:69","nodeType":"YulTypedName","src":"39028:4:69","type":""}],"src":"38862:419:69"},{"body":{"nativeSrc":"39393:116:69","nodeType":"YulBlock","src":"39393:116:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"39415:6:69","nodeType":"YulIdentifier","src":"39415:6:69"},{"kind":"number","nativeSrc":"39423:1:69","nodeType":"YulLiteral","src":"39423:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"39411:3:69","nodeType":"YulIdentifier","src":"39411:3:69"},"nativeSrc":"39411:14:69","nodeType":"YulFunctionCall","src":"39411:14:69"},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472","kind":"string","nativeSrc":"39427:34:69","nodeType":"YulLiteral","src":"39427:34:69","type":"","value":"ERC20: transfer to the zero addr"}],"functionName":{"name":"mstore","nativeSrc":"39404:6:69","nodeType":"YulIdentifier","src":"39404:6:69"},"nativeSrc":"39404:58:69","nodeType":"YulFunctionCall","src":"39404:58:69"},"nativeSrc":"39404:58:69","nodeType":"YulExpressionStatement","src":"39404:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"39483:6:69","nodeType":"YulIdentifier","src":"39483:6:69"},{"kind":"number","nativeSrc":"39491:2:69","nodeType":"YulLiteral","src":"39491:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"39479:3:69","nodeType":"YulIdentifier","src":"39479:3:69"},"nativeSrc":"39479:15:69","nodeType":"YulFunctionCall","src":"39479:15:69"},{"hexValue":"657373","kind":"string","nativeSrc":"39496:5:69","nodeType":"YulLiteral","src":"39496:5:69","type":"","value":"ess"}],"functionName":{"name":"mstore","nativeSrc":"39472:6:69","nodeType":"YulIdentifier","src":"39472:6:69"},"nativeSrc":"39472:30:69","nodeType":"YulFunctionCall","src":"39472:30:69"},"nativeSrc":"39472:30:69","nodeType":"YulExpressionStatement","src":"39472:30:69"}]},"name":"store_literal_in_memory_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f","nativeSrc":"39287:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"39385:6:69","nodeType":"YulTypedName","src":"39385:6:69","type":""}],"src":"39287:222:69"},{"body":{"nativeSrc":"39661:220:69","nodeType":"YulBlock","src":"39661:220:69","statements":[{"nativeSrc":"39671:74:69","nodeType":"YulAssignment","src":"39671:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"39737:3:69","nodeType":"YulIdentifier","src":"39737:3:69"},{"kind":"number","nativeSrc":"39742:2:69","nodeType":"YulLiteral","src":"39742:2:69","type":"","value":"35"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"39678:58:69","nodeType":"YulIdentifier","src":"39678:58:69"},"nativeSrc":"39678:67:69","nodeType":"YulFunctionCall","src":"39678:67:69"},"variableNames":[{"name":"pos","nativeSrc":"39671:3:69","nodeType":"YulIdentifier","src":"39671:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"39843:3:69","nodeType":"YulIdentifier","src":"39843:3:69"}],"functionName":{"name":"store_literal_in_memory_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f","nativeSrc":"39754:88:69","nodeType":"YulIdentifier","src":"39754:88:69"},"nativeSrc":"39754:93:69","nodeType":"YulFunctionCall","src":"39754:93:69"},"nativeSrc":"39754:93:69","nodeType":"YulExpressionStatement","src":"39754:93:69"},{"nativeSrc":"39856:19:69","nodeType":"YulAssignment","src":"39856:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"39867:3:69","nodeType":"YulIdentifier","src":"39867:3:69"},{"kind":"number","nativeSrc":"39872:2:69","nodeType":"YulLiteral","src":"39872:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"39863:3:69","nodeType":"YulIdentifier","src":"39863:3:69"},"nativeSrc":"39863:12:69","nodeType":"YulFunctionCall","src":"39863:12:69"},"variableNames":[{"name":"end","nativeSrc":"39856:3:69","nodeType":"YulIdentifier","src":"39856:3:69"}]}]},"name":"abi_encode_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f_to_t_string_memory_ptr_fromStack","nativeSrc":"39515:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"39649:3:69","nodeType":"YulTypedName","src":"39649:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"39657:3:69","nodeType":"YulTypedName","src":"39657:3:69","type":""}],"src":"39515:366:69"},{"body":{"nativeSrc":"40058:248:69","nodeType":"YulBlock","src":"40058:248:69","statements":[{"nativeSrc":"40068:26:69","nodeType":"YulAssignment","src":"40068:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"40080:9:69","nodeType":"YulIdentifier","src":"40080:9:69"},{"kind":"number","nativeSrc":"40091:2:69","nodeType":"YulLiteral","src":"40091:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"40076:3:69","nodeType":"YulIdentifier","src":"40076:3:69"},"nativeSrc":"40076:18:69","nodeType":"YulFunctionCall","src":"40076:18:69"},"variableNames":[{"name":"tail","nativeSrc":"40068:4:69","nodeType":"YulIdentifier","src":"40068:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"40115:9:69","nodeType":"YulIdentifier","src":"40115:9:69"},{"kind":"number","nativeSrc":"40126:1:69","nodeType":"YulLiteral","src":"40126:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"40111:3:69","nodeType":"YulIdentifier","src":"40111:3:69"},"nativeSrc":"40111:17:69","nodeType":"YulFunctionCall","src":"40111:17:69"},{"arguments":[{"name":"tail","nativeSrc":"40134:4:69","nodeType":"YulIdentifier","src":"40134:4:69"},{"name":"headStart","nativeSrc":"40140:9:69","nodeType":"YulIdentifier","src":"40140:9:69"}],"functionName":{"name":"sub","nativeSrc":"40130:3:69","nodeType":"YulIdentifier","src":"40130:3:69"},"nativeSrc":"40130:20:69","nodeType":"YulFunctionCall","src":"40130:20:69"}],"functionName":{"name":"mstore","nativeSrc":"40104:6:69","nodeType":"YulIdentifier","src":"40104:6:69"},"nativeSrc":"40104:47:69","nodeType":"YulFunctionCall","src":"40104:47:69"},"nativeSrc":"40104:47:69","nodeType":"YulExpressionStatement","src":"40104:47:69"},{"nativeSrc":"40160:139:69","nodeType":"YulAssignment","src":"40160:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"40294:4:69","nodeType":"YulIdentifier","src":"40294:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f_to_t_string_memory_ptr_fromStack","nativeSrc":"40168:124:69","nodeType":"YulIdentifier","src":"40168:124:69"},"nativeSrc":"40168:131:69","nodeType":"YulFunctionCall","src":"40168:131:69"},"variableNames":[{"name":"tail","nativeSrc":"40160:4:69","nodeType":"YulIdentifier","src":"40160:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"39887:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"40038:9:69","nodeType":"YulTypedName","src":"40038:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"40053:4:69","nodeType":"YulTypedName","src":"40053:4:69","type":""}],"src":"39887:419:69"},{"body":{"nativeSrc":"40418:119:69","nodeType":"YulBlock","src":"40418:119:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"40440:6:69","nodeType":"YulIdentifier","src":"40440:6:69"},{"kind":"number","nativeSrc":"40448:1:69","nodeType":"YulLiteral","src":"40448:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"40436:3:69","nodeType":"YulIdentifier","src":"40436:3:69"},"nativeSrc":"40436:14:69","nodeType":"YulFunctionCall","src":"40436:14:69"},{"hexValue":"45524332303a207472616e7366657220616d6f756e7420657863656564732062","kind":"string","nativeSrc":"40452:34:69","nodeType":"YulLiteral","src":"40452:34:69","type":"","value":"ERC20: transfer amount exceeds b"}],"functionName":{"name":"mstore","nativeSrc":"40429:6:69","nodeType":"YulIdentifier","src":"40429:6:69"},"nativeSrc":"40429:58:69","nodeType":"YulFunctionCall","src":"40429:58:69"},"nativeSrc":"40429:58:69","nodeType":"YulExpressionStatement","src":"40429:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"40508:6:69","nodeType":"YulIdentifier","src":"40508:6:69"},{"kind":"number","nativeSrc":"40516:2:69","nodeType":"YulLiteral","src":"40516:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"40504:3:69","nodeType":"YulIdentifier","src":"40504:3:69"},"nativeSrc":"40504:15:69","nodeType":"YulFunctionCall","src":"40504:15:69"},{"hexValue":"616c616e6365","kind":"string","nativeSrc":"40521:8:69","nodeType":"YulLiteral","src":"40521:8:69","type":"","value":"alance"}],"functionName":{"name":"mstore","nativeSrc":"40497:6:69","nodeType":"YulIdentifier","src":"40497:6:69"},"nativeSrc":"40497:33:69","nodeType":"YulFunctionCall","src":"40497:33:69"},"nativeSrc":"40497:33:69","nodeType":"YulExpressionStatement","src":"40497:33:69"}]},"name":"store_literal_in_memory_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6","nativeSrc":"40312:225:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"40410:6:69","nodeType":"YulTypedName","src":"40410:6:69","type":""}],"src":"40312:225:69"},{"body":{"nativeSrc":"40689:220:69","nodeType":"YulBlock","src":"40689:220:69","statements":[{"nativeSrc":"40699:74:69","nodeType":"YulAssignment","src":"40699:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"40765:3:69","nodeType":"YulIdentifier","src":"40765:3:69"},{"kind":"number","nativeSrc":"40770:2:69","nodeType":"YulLiteral","src":"40770:2:69","type":"","value":"38"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"40706:58:69","nodeType":"YulIdentifier","src":"40706:58:69"},"nativeSrc":"40706:67:69","nodeType":"YulFunctionCall","src":"40706:67:69"},"variableNames":[{"name":"pos","nativeSrc":"40699:3:69","nodeType":"YulIdentifier","src":"40699:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"40871:3:69","nodeType":"YulIdentifier","src":"40871:3:69"}],"functionName":{"name":"store_literal_in_memory_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6","nativeSrc":"40782:88:69","nodeType":"YulIdentifier","src":"40782:88:69"},"nativeSrc":"40782:93:69","nodeType":"YulFunctionCall","src":"40782:93:69"},"nativeSrc":"40782:93:69","nodeType":"YulExpressionStatement","src":"40782:93:69"},{"nativeSrc":"40884:19:69","nodeType":"YulAssignment","src":"40884:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"40895:3:69","nodeType":"YulIdentifier","src":"40895:3:69"},{"kind":"number","nativeSrc":"40900:2:69","nodeType":"YulLiteral","src":"40900:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"40891:3:69","nodeType":"YulIdentifier","src":"40891:3:69"},"nativeSrc":"40891:12:69","nodeType":"YulFunctionCall","src":"40891:12:69"},"variableNames":[{"name":"end","nativeSrc":"40884:3:69","nodeType":"YulIdentifier","src":"40884:3:69"}]}]},"name":"abi_encode_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6_to_t_string_memory_ptr_fromStack","nativeSrc":"40543:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"40677:3:69","nodeType":"YulTypedName","src":"40677:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"40685:3:69","nodeType":"YulTypedName","src":"40685:3:69","type":""}],"src":"40543:366:69"},{"body":{"nativeSrc":"41086:248:69","nodeType":"YulBlock","src":"41086:248:69","statements":[{"nativeSrc":"41096:26:69","nodeType":"YulAssignment","src":"41096:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"41108:9:69","nodeType":"YulIdentifier","src":"41108:9:69"},{"kind":"number","nativeSrc":"41119:2:69","nodeType":"YulLiteral","src":"41119:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"41104:3:69","nodeType":"YulIdentifier","src":"41104:3:69"},"nativeSrc":"41104:18:69","nodeType":"YulFunctionCall","src":"41104:18:69"},"variableNames":[{"name":"tail","nativeSrc":"41096:4:69","nodeType":"YulIdentifier","src":"41096:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"41143:9:69","nodeType":"YulIdentifier","src":"41143:9:69"},{"kind":"number","nativeSrc":"41154:1:69","nodeType":"YulLiteral","src":"41154:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"41139:3:69","nodeType":"YulIdentifier","src":"41139:3:69"},"nativeSrc":"41139:17:69","nodeType":"YulFunctionCall","src":"41139:17:69"},{"arguments":[{"name":"tail","nativeSrc":"41162:4:69","nodeType":"YulIdentifier","src":"41162:4:69"},{"name":"headStart","nativeSrc":"41168:9:69","nodeType":"YulIdentifier","src":"41168:9:69"}],"functionName":{"name":"sub","nativeSrc":"41158:3:69","nodeType":"YulIdentifier","src":"41158:3:69"},"nativeSrc":"41158:20:69","nodeType":"YulFunctionCall","src":"41158:20:69"}],"functionName":{"name":"mstore","nativeSrc":"41132:6:69","nodeType":"YulIdentifier","src":"41132:6:69"},"nativeSrc":"41132:47:69","nodeType":"YulFunctionCall","src":"41132:47:69"},"nativeSrc":"41132:47:69","nodeType":"YulExpressionStatement","src":"41132:47:69"},{"nativeSrc":"41188:139:69","nodeType":"YulAssignment","src":"41188:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"41322:4:69","nodeType":"YulIdentifier","src":"41322:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6_to_t_string_memory_ptr_fromStack","nativeSrc":"41196:124:69","nodeType":"YulIdentifier","src":"41196:124:69"},"nativeSrc":"41196:131:69","nodeType":"YulFunctionCall","src":"41196:131:69"},"variableNames":[{"name":"tail","nativeSrc":"41188:4:69","nodeType":"YulIdentifier","src":"41188:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"40915:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"41066:9:69","nodeType":"YulTypedName","src":"41066:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"41081:4:69","nodeType":"YulTypedName","src":"41081:4:69","type":""}],"src":"40915:419:69"},{"body":{"nativeSrc":"41381:77:69","nodeType":"YulBlock","src":"41381:77:69","statements":[{"body":{"nativeSrc":"41436:16:69","nodeType":"YulBlock","src":"41436:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"41445:1:69","nodeType":"YulLiteral","src":"41445:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"41448:1:69","nodeType":"YulLiteral","src":"41448:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"41438:6:69","nodeType":"YulIdentifier","src":"41438:6:69"},"nativeSrc":"41438:12:69","nodeType":"YulFunctionCall","src":"41438:12:69"},"nativeSrc":"41438:12:69","nodeType":"YulExpressionStatement","src":"41438:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"41404:5:69","nodeType":"YulIdentifier","src":"41404:5:69"},{"arguments":[{"name":"value","nativeSrc":"41427:5:69","nodeType":"YulIdentifier","src":"41427:5:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"41411:15:69","nodeType":"YulIdentifier","src":"41411:15:69"},"nativeSrc":"41411:22:69","nodeType":"YulFunctionCall","src":"41411:22:69"}],"functionName":{"name":"eq","nativeSrc":"41401:2:69","nodeType":"YulIdentifier","src":"41401:2:69"},"nativeSrc":"41401:33:69","nodeType":"YulFunctionCall","src":"41401:33:69"}],"functionName":{"name":"iszero","nativeSrc":"41394:6:69","nodeType":"YulIdentifier","src":"41394:6:69"},"nativeSrc":"41394:41:69","nodeType":"YulFunctionCall","src":"41394:41:69"},"nativeSrc":"41391:61:69","nodeType":"YulIf","src":"41391:61:69"}]},"name":"validator_revert_t_uint8","nativeSrc":"41340:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"41374:5:69","nodeType":"YulTypedName","src":"41374:5:69","type":""}],"src":"41340:118:69"},{"body":{"nativeSrc":"41525:78:69","nodeType":"YulBlock","src":"41525:78:69","statements":[{"nativeSrc":"41535:22:69","nodeType":"YulAssignment","src":"41535:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"41550:6:69","nodeType":"YulIdentifier","src":"41550:6:69"}],"functionName":{"name":"mload","nativeSrc":"41544:5:69","nodeType":"YulIdentifier","src":"41544:5:69"},"nativeSrc":"41544:13:69","nodeType":"YulFunctionCall","src":"41544:13:69"},"variableNames":[{"name":"value","nativeSrc":"41535:5:69","nodeType":"YulIdentifier","src":"41535:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"41591:5:69","nodeType":"YulIdentifier","src":"41591:5:69"}],"functionName":{"name":"validator_revert_t_uint8","nativeSrc":"41566:24:69","nodeType":"YulIdentifier","src":"41566:24:69"},"nativeSrc":"41566:31:69","nodeType":"YulFunctionCall","src":"41566:31:69"},"nativeSrc":"41566:31:69","nodeType":"YulExpressionStatement","src":"41566:31:69"}]},"name":"abi_decode_t_uint8_fromMemory","nativeSrc":"41464:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"41503:6:69","nodeType":"YulTypedName","src":"41503:6:69","type":""},{"name":"end","nativeSrc":"41511:3:69","nodeType":"YulTypedName","src":"41511:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"41519:5:69","nodeType":"YulTypedName","src":"41519:5:69","type":""}],"src":"41464:139:69"},{"body":{"nativeSrc":"41684:272:69","nodeType":"YulBlock","src":"41684:272:69","statements":[{"body":{"nativeSrc":"41730:83:69","nodeType":"YulBlock","src":"41730:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"41732:77:69","nodeType":"YulIdentifier","src":"41732:77:69"},"nativeSrc":"41732:79:69","nodeType":"YulFunctionCall","src":"41732:79:69"},"nativeSrc":"41732:79:69","nodeType":"YulExpressionStatement","src":"41732:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"41705:7:69","nodeType":"YulIdentifier","src":"41705:7:69"},{"name":"headStart","nativeSrc":"41714:9:69","nodeType":"YulIdentifier","src":"41714:9:69"}],"functionName":{"name":"sub","nativeSrc":"41701:3:69","nodeType":"YulIdentifier","src":"41701:3:69"},"nativeSrc":"41701:23:69","nodeType":"YulFunctionCall","src":"41701:23:69"},{"kind":"number","nativeSrc":"41726:2:69","nodeType":"YulLiteral","src":"41726:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"41697:3:69","nodeType":"YulIdentifier","src":"41697:3:69"},"nativeSrc":"41697:32:69","nodeType":"YulFunctionCall","src":"41697:32:69"},"nativeSrc":"41694:119:69","nodeType":"YulIf","src":"41694:119:69"},{"nativeSrc":"41823:126:69","nodeType":"YulBlock","src":"41823:126:69","statements":[{"nativeSrc":"41838:15:69","nodeType":"YulVariableDeclaration","src":"41838:15:69","value":{"kind":"number","nativeSrc":"41852:1:69","nodeType":"YulLiteral","src":"41852:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"41842:6:69","nodeType":"YulTypedName","src":"41842:6:69","type":""}]},{"nativeSrc":"41867:72:69","nodeType":"YulAssignment","src":"41867:72:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"41911:9:69","nodeType":"YulIdentifier","src":"41911:9:69"},{"name":"offset","nativeSrc":"41922:6:69","nodeType":"YulIdentifier","src":"41922:6:69"}],"functionName":{"name":"add","nativeSrc":"41907:3:69","nodeType":"YulIdentifier","src":"41907:3:69"},"nativeSrc":"41907:22:69","nodeType":"YulFunctionCall","src":"41907:22:69"},{"name":"dataEnd","nativeSrc":"41931:7:69","nodeType":"YulIdentifier","src":"41931:7:69"}],"functionName":{"name":"abi_decode_t_uint8_fromMemory","nativeSrc":"41877:29:69","nodeType":"YulIdentifier","src":"41877:29:69"},"nativeSrc":"41877:62:69","nodeType":"YulFunctionCall","src":"41877:62:69"},"variableNames":[{"name":"value0","nativeSrc":"41867:6:69","nodeType":"YulIdentifier","src":"41867:6:69"}]}]}]},"name":"abi_decode_tuple_t_uint8_fromMemory","nativeSrc":"41609:347:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"41654:9:69","nodeType":"YulTypedName","src":"41654:9:69","type":""},{"name":"dataEnd","nativeSrc":"41665:7:69","nodeType":"YulTypedName","src":"41665:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"41677:6:69","nodeType":"YulTypedName","src":"41677:6:69","type":""}],"src":"41609:347:69"},{"body":{"nativeSrc":"42005:148:69","nodeType":"YulBlock","src":"42005:148:69","statements":[{"nativeSrc":"42015:23:69","nodeType":"YulAssignment","src":"42015:23:69","value":{"arguments":[{"name":"x","nativeSrc":"42036:1:69","nodeType":"YulIdentifier","src":"42036:1:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"42020:15:69","nodeType":"YulIdentifier","src":"42020:15:69"},"nativeSrc":"42020:18:69","nodeType":"YulFunctionCall","src":"42020:18:69"},"variableNames":[{"name":"x","nativeSrc":"42015:1:69","nodeType":"YulIdentifier","src":"42015:1:69"}]},{"nativeSrc":"42047:23:69","nodeType":"YulAssignment","src":"42047:23:69","value":{"arguments":[{"name":"y","nativeSrc":"42068:1:69","nodeType":"YulIdentifier","src":"42068:1:69"}],"functionName":{"name":"cleanup_t_uint8","nativeSrc":"42052:15:69","nodeType":"YulIdentifier","src":"42052:15:69"},"nativeSrc":"42052:18:69","nodeType":"YulFunctionCall","src":"42052:18:69"},"variableNames":[{"name":"y","nativeSrc":"42047:1:69","nodeType":"YulIdentifier","src":"42047:1:69"}]},{"nativeSrc":"42079:17:69","nodeType":"YulAssignment","src":"42079:17:69","value":{"arguments":[{"name":"x","nativeSrc":"42091:1:69","nodeType":"YulIdentifier","src":"42091:1:69"},{"name":"y","nativeSrc":"42094:1:69","nodeType":"YulIdentifier","src":"42094:1:69"}],"functionName":{"name":"sub","nativeSrc":"42087:3:69","nodeType":"YulIdentifier","src":"42087:3:69"},"nativeSrc":"42087:9:69","nodeType":"YulFunctionCall","src":"42087:9:69"},"variableNames":[{"name":"diff","nativeSrc":"42079:4:69","nodeType":"YulIdentifier","src":"42079:4:69"}]},{"body":{"nativeSrc":"42124:22:69","nodeType":"YulBlock","src":"42124:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"42126:16:69","nodeType":"YulIdentifier","src":"42126:16:69"},"nativeSrc":"42126:18:69","nodeType":"YulFunctionCall","src":"42126:18:69"},"nativeSrc":"42126:18:69","nodeType":"YulExpressionStatement","src":"42126:18:69"}]},"condition":{"arguments":[{"name":"diff","nativeSrc":"42112:4:69","nodeType":"YulIdentifier","src":"42112:4:69"},{"kind":"number","nativeSrc":"42118:4:69","nodeType":"YulLiteral","src":"42118:4:69","type":"","value":"0xff"}],"functionName":{"name":"gt","nativeSrc":"42109:2:69","nodeType":"YulIdentifier","src":"42109:2:69"},"nativeSrc":"42109:14:69","nodeType":"YulFunctionCall","src":"42109:14:69"},"nativeSrc":"42106:40:69","nodeType":"YulIf","src":"42106:40:69"}]},"name":"checked_sub_t_uint8","nativeSrc":"41962:191:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"41991:1:69","nodeType":"YulTypedName","src":"41991:1:69","type":""},{"name":"y","nativeSrc":"41994:1:69","nodeType":"YulTypedName","src":"41994:1:69","type":""}],"returnVariables":[{"name":"diff","nativeSrc":"42000:4:69","nodeType":"YulTypedName","src":"42000:4:69","type":""}],"src":"41962:191:69"},{"body":{"nativeSrc":"42285:206:69","nodeType":"YulBlock","src":"42285:206:69","statements":[{"nativeSrc":"42295:26:69","nodeType":"YulAssignment","src":"42295:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"42307:9:69","nodeType":"YulIdentifier","src":"42307:9:69"},{"kind":"number","nativeSrc":"42318:2:69","nodeType":"YulLiteral","src":"42318:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"42303:3:69","nodeType":"YulIdentifier","src":"42303:3:69"},"nativeSrc":"42303:18:69","nodeType":"YulFunctionCall","src":"42303:18:69"},"variableNames":[{"name":"tail","nativeSrc":"42295:4:69","nodeType":"YulIdentifier","src":"42295:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"42375:6:69","nodeType":"YulIdentifier","src":"42375:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"42388:9:69","nodeType":"YulIdentifier","src":"42388:9:69"},{"kind":"number","nativeSrc":"42399:1:69","nodeType":"YulLiteral","src":"42399:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"42384:3:69","nodeType":"YulIdentifier","src":"42384:3:69"},"nativeSrc":"42384:17:69","nodeType":"YulFunctionCall","src":"42384:17:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"42331:43:69","nodeType":"YulIdentifier","src":"42331:43:69"},"nativeSrc":"42331:71:69","nodeType":"YulFunctionCall","src":"42331:71:69"},"nativeSrc":"42331:71:69","nodeType":"YulExpressionStatement","src":"42331:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"42456:6:69","nodeType":"YulIdentifier","src":"42456:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"42469:9:69","nodeType":"YulIdentifier","src":"42469:9:69"},{"kind":"number","nativeSrc":"42480:2:69","nodeType":"YulLiteral","src":"42480:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"42465:3:69","nodeType":"YulIdentifier","src":"42465:3:69"},"nativeSrc":"42465:18:69","nodeType":"YulFunctionCall","src":"42465:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"42412:43:69","nodeType":"YulIdentifier","src":"42412:43:69"},"nativeSrc":"42412:72:69","nodeType":"YulFunctionCall","src":"42412:72:69"},"nativeSrc":"42412:72:69","nodeType":"YulExpressionStatement","src":"42412:72:69"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"42159:332:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"42249:9:69","nodeType":"YulTypedName","src":"42249:9:69","type":""},{"name":"value1","nativeSrc":"42261:6:69","nodeType":"YulTypedName","src":"42261:6:69","type":""},{"name":"value0","nativeSrc":"42269:6:69","nodeType":"YulTypedName","src":"42269:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"42280:4:69","nodeType":"YulTypedName","src":"42280:4:69","type":""}],"src":"42159:332:69"},{"body":{"nativeSrc":"42603:124:69","nodeType":"YulBlock","src":"42603:124:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"42625:6:69","nodeType":"YulIdentifier","src":"42625:6:69"},{"kind":"number","nativeSrc":"42633:1:69","nodeType":"YulLiteral","src":"42633:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"42621:3:69","nodeType":"YulIdentifier","src":"42621:3:69"},"nativeSrc":"42621:14:69","nodeType":"YulFunctionCall","src":"42621:14:69"},{"hexValue":"496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069","kind":"string","nativeSrc":"42637:34:69","nodeType":"YulLiteral","src":"42637:34:69","type":"","value":"Initializable: contract is not i"}],"functionName":{"name":"mstore","nativeSrc":"42614:6:69","nodeType":"YulIdentifier","src":"42614:6:69"},"nativeSrc":"42614:58:69","nodeType":"YulFunctionCall","src":"42614:58:69"},"nativeSrc":"42614:58:69","nodeType":"YulExpressionStatement","src":"42614:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"42693:6:69","nodeType":"YulIdentifier","src":"42693:6:69"},{"kind":"number","nativeSrc":"42701:2:69","nodeType":"YulLiteral","src":"42701:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"42689:3:69","nodeType":"YulIdentifier","src":"42689:3:69"},"nativeSrc":"42689:15:69","nodeType":"YulFunctionCall","src":"42689:15:69"},{"hexValue":"6e697469616c697a696e67","kind":"string","nativeSrc":"42706:13:69","nodeType":"YulLiteral","src":"42706:13:69","type":"","value":"nitializing"}],"functionName":{"name":"mstore","nativeSrc":"42682:6:69","nodeType":"YulIdentifier","src":"42682:6:69"},"nativeSrc":"42682:38:69","nodeType":"YulFunctionCall","src":"42682:38:69"},"nativeSrc":"42682:38:69","nodeType":"YulExpressionStatement","src":"42682:38:69"}]},"name":"store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b","nativeSrc":"42497:230:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"42595:6:69","nodeType":"YulTypedName","src":"42595:6:69","type":""}],"src":"42497:230:69"},{"body":{"nativeSrc":"42879:220:69","nodeType":"YulBlock","src":"42879:220:69","statements":[{"nativeSrc":"42889:74:69","nodeType":"YulAssignment","src":"42889:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"42955:3:69","nodeType":"YulIdentifier","src":"42955:3:69"},{"kind":"number","nativeSrc":"42960:2:69","nodeType":"YulLiteral","src":"42960:2:69","type":"","value":"43"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"42896:58:69","nodeType":"YulIdentifier","src":"42896:58:69"},"nativeSrc":"42896:67:69","nodeType":"YulFunctionCall","src":"42896:67:69"},"variableNames":[{"name":"pos","nativeSrc":"42889:3:69","nodeType":"YulIdentifier","src":"42889:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"43061:3:69","nodeType":"YulIdentifier","src":"43061:3:69"}],"functionName":{"name":"store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b","nativeSrc":"42972:88:69","nodeType":"YulIdentifier","src":"42972:88:69"},"nativeSrc":"42972:93:69","nodeType":"YulFunctionCall","src":"42972:93:69"},"nativeSrc":"42972:93:69","nodeType":"YulExpressionStatement","src":"42972:93:69"},{"nativeSrc":"43074:19:69","nodeType":"YulAssignment","src":"43074:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"43085:3:69","nodeType":"YulIdentifier","src":"43085:3:69"},{"kind":"number","nativeSrc":"43090:2:69","nodeType":"YulLiteral","src":"43090:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"43081:3:69","nodeType":"YulIdentifier","src":"43081:3:69"},"nativeSrc":"43081:12:69","nodeType":"YulFunctionCall","src":"43081:12:69"},"variableNames":[{"name":"end","nativeSrc":"43074:3:69","nodeType":"YulIdentifier","src":"43074:3:69"}]}]},"name":"abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack","nativeSrc":"42733:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"42867:3:69","nodeType":"YulTypedName","src":"42867:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"42875:3:69","nodeType":"YulTypedName","src":"42875:3:69","type":""}],"src":"42733:366:69"},{"body":{"nativeSrc":"43276:248:69","nodeType":"YulBlock","src":"43276:248:69","statements":[{"nativeSrc":"43286:26:69","nodeType":"YulAssignment","src":"43286:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"43298:9:69","nodeType":"YulIdentifier","src":"43298:9:69"},{"kind":"number","nativeSrc":"43309:2:69","nodeType":"YulLiteral","src":"43309:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"43294:3:69","nodeType":"YulIdentifier","src":"43294:3:69"},"nativeSrc":"43294:18:69","nodeType":"YulFunctionCall","src":"43294:18:69"},"variableNames":[{"name":"tail","nativeSrc":"43286:4:69","nodeType":"YulIdentifier","src":"43286:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"43333:9:69","nodeType":"YulIdentifier","src":"43333:9:69"},{"kind":"number","nativeSrc":"43344:1:69","nodeType":"YulLiteral","src":"43344:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"43329:3:69","nodeType":"YulIdentifier","src":"43329:3:69"},"nativeSrc":"43329:17:69","nodeType":"YulFunctionCall","src":"43329:17:69"},{"arguments":[{"name":"tail","nativeSrc":"43352:4:69","nodeType":"YulIdentifier","src":"43352:4:69"},{"name":"headStart","nativeSrc":"43358:9:69","nodeType":"YulIdentifier","src":"43358:9:69"}],"functionName":{"name":"sub","nativeSrc":"43348:3:69","nodeType":"YulIdentifier","src":"43348:3:69"},"nativeSrc":"43348:20:69","nodeType":"YulFunctionCall","src":"43348:20:69"}],"functionName":{"name":"mstore","nativeSrc":"43322:6:69","nodeType":"YulIdentifier","src":"43322:6:69"},"nativeSrc":"43322:47:69","nodeType":"YulFunctionCall","src":"43322:47:69"},"nativeSrc":"43322:47:69","nodeType":"YulExpressionStatement","src":"43322:47:69"},{"nativeSrc":"43378:139:69","nodeType":"YulAssignment","src":"43378:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"43512:4:69","nodeType":"YulIdentifier","src":"43512:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack","nativeSrc":"43386:124:69","nodeType":"YulIdentifier","src":"43386:124:69"},"nativeSrc":"43386:131:69","nodeType":"YulFunctionCall","src":"43386:131:69"},"variableNames":[{"name":"tail","nativeSrc":"43378:4:69","nodeType":"YulIdentifier","src":"43378:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"43105:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"43256:9:69","nodeType":"YulTypedName","src":"43256:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"43271:4:69","nodeType":"YulTypedName","src":"43271:4:69","type":""}],"src":"43105:419:69"},{"body":{"nativeSrc":"43636:115:69","nodeType":"YulBlock","src":"43636:115:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"43658:6:69","nodeType":"YulIdentifier","src":"43658:6:69"},{"kind":"number","nativeSrc":"43666:1:69","nodeType":"YulLiteral","src":"43666:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"43654:3:69","nodeType":"YulIdentifier","src":"43654:3:69"},"nativeSrc":"43654:14:69","nodeType":"YulFunctionCall","src":"43654:14:69"},{"hexValue":"436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d","kind":"string","nativeSrc":"43670:34:69","nodeType":"YulLiteral","src":"43670:34:69","type":"","value":"Comptroller: Invalid maxLoopsLim"}],"functionName":{"name":"mstore","nativeSrc":"43647:6:69","nodeType":"YulIdentifier","src":"43647:6:69"},"nativeSrc":"43647:58:69","nodeType":"YulFunctionCall","src":"43647:58:69"},"nativeSrc":"43647:58:69","nodeType":"YulExpressionStatement","src":"43647:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"43726:6:69","nodeType":"YulIdentifier","src":"43726:6:69"},{"kind":"number","nativeSrc":"43734:2:69","nodeType":"YulLiteral","src":"43734:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"43722:3:69","nodeType":"YulIdentifier","src":"43722:3:69"},"nativeSrc":"43722:15:69","nodeType":"YulFunctionCall","src":"43722:15:69"},{"hexValue":"6974","kind":"string","nativeSrc":"43739:4:69","nodeType":"YulLiteral","src":"43739:4:69","type":"","value":"it"}],"functionName":{"name":"mstore","nativeSrc":"43715:6:69","nodeType":"YulIdentifier","src":"43715:6:69"},"nativeSrc":"43715:29:69","nodeType":"YulFunctionCall","src":"43715:29:69"},"nativeSrc":"43715:29:69","nodeType":"YulExpressionStatement","src":"43715:29:69"}]},"name":"store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032","nativeSrc":"43530:221:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"43628:6:69","nodeType":"YulTypedName","src":"43628:6:69","type":""}],"src":"43530:221:69"},{"body":{"nativeSrc":"43903:220:69","nodeType":"YulBlock","src":"43903:220:69","statements":[{"nativeSrc":"43913:74:69","nodeType":"YulAssignment","src":"43913:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"43979:3:69","nodeType":"YulIdentifier","src":"43979:3:69"},{"kind":"number","nativeSrc":"43984:2:69","nodeType":"YulLiteral","src":"43984:2:69","type":"","value":"34"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"43920:58:69","nodeType":"YulIdentifier","src":"43920:58:69"},"nativeSrc":"43920:67:69","nodeType":"YulFunctionCall","src":"43920:67:69"},"variableNames":[{"name":"pos","nativeSrc":"43913:3:69","nodeType":"YulIdentifier","src":"43913:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"44085:3:69","nodeType":"YulIdentifier","src":"44085:3:69"}],"functionName":{"name":"store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032","nativeSrc":"43996:88:69","nodeType":"YulIdentifier","src":"43996:88:69"},"nativeSrc":"43996:93:69","nodeType":"YulFunctionCall","src":"43996:93:69"},"nativeSrc":"43996:93:69","nodeType":"YulExpressionStatement","src":"43996:93:69"},{"nativeSrc":"44098:19:69","nodeType":"YulAssignment","src":"44098:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"44109:3:69","nodeType":"YulIdentifier","src":"44109:3:69"},{"kind":"number","nativeSrc":"44114:2:69","nodeType":"YulLiteral","src":"44114:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"44105:3:69","nodeType":"YulIdentifier","src":"44105:3:69"},"nativeSrc":"44105:12:69","nodeType":"YulFunctionCall","src":"44105:12:69"},"variableNames":[{"name":"end","nativeSrc":"44098:3:69","nodeType":"YulIdentifier","src":"44098:3:69"}]}]},"name":"abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack","nativeSrc":"43757:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"43891:3:69","nodeType":"YulTypedName","src":"43891:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"43899:3:69","nodeType":"YulTypedName","src":"43899:3:69","type":""}],"src":"43757:366:69"},{"body":{"nativeSrc":"44300:248:69","nodeType":"YulBlock","src":"44300:248:69","statements":[{"nativeSrc":"44310:26:69","nodeType":"YulAssignment","src":"44310:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"44322:9:69","nodeType":"YulIdentifier","src":"44322:9:69"},{"kind":"number","nativeSrc":"44333:2:69","nodeType":"YulLiteral","src":"44333:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"44318:3:69","nodeType":"YulIdentifier","src":"44318:3:69"},"nativeSrc":"44318:18:69","nodeType":"YulFunctionCall","src":"44318:18:69"},"variableNames":[{"name":"tail","nativeSrc":"44310:4:69","nodeType":"YulIdentifier","src":"44310:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"44357:9:69","nodeType":"YulIdentifier","src":"44357:9:69"},{"kind":"number","nativeSrc":"44368:1:69","nodeType":"YulLiteral","src":"44368:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"44353:3:69","nodeType":"YulIdentifier","src":"44353:3:69"},"nativeSrc":"44353:17:69","nodeType":"YulFunctionCall","src":"44353:17:69"},{"arguments":[{"name":"tail","nativeSrc":"44376:4:69","nodeType":"YulIdentifier","src":"44376:4:69"},{"name":"headStart","nativeSrc":"44382:9:69","nodeType":"YulIdentifier","src":"44382:9:69"}],"functionName":{"name":"sub","nativeSrc":"44372:3:69","nodeType":"YulIdentifier","src":"44372:3:69"},"nativeSrc":"44372:20:69","nodeType":"YulFunctionCall","src":"44372:20:69"}],"functionName":{"name":"mstore","nativeSrc":"44346:6:69","nodeType":"YulIdentifier","src":"44346:6:69"},"nativeSrc":"44346:47:69","nodeType":"YulFunctionCall","src":"44346:47:69"},"nativeSrc":"44346:47:69","nodeType":"YulExpressionStatement","src":"44346:47:69"},{"nativeSrc":"44402:139:69","nodeType":"YulAssignment","src":"44402:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"44536:4:69","nodeType":"YulIdentifier","src":"44536:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack","nativeSrc":"44410:124:69","nodeType":"YulIdentifier","src":"44410:124:69"},"nativeSrc":"44410:131:69","nodeType":"YulFunctionCall","src":"44410:131:69"},"variableNames":[{"name":"tail","nativeSrc":"44402:4:69","nodeType":"YulIdentifier","src":"44402:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"44129:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"44280:9:69","nodeType":"YulTypedName","src":"44280:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"44295:4:69","nodeType":"YulTypedName","src":"44295:4:69","type":""}],"src":"44129:419:69"},{"body":{"nativeSrc":"44660:75:69","nodeType":"YulBlock","src":"44660:75:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"44682:6:69","nodeType":"YulIdentifier","src":"44682:6:69"},{"kind":"number","nativeSrc":"44690:1:69","nodeType":"YulLiteral","src":"44690:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"44678:3:69","nodeType":"YulIdentifier","src":"44678:3:69"},"nativeSrc":"44678:14:69","nodeType":"YulFunctionCall","src":"44678:14:69"},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","kind":"string","nativeSrc":"44694:33:69","nodeType":"YulLiteral","src":"44694:33:69","type":"","value":"ReentrancyGuard: reentrant call"}],"functionName":{"name":"mstore","nativeSrc":"44671:6:69","nodeType":"YulIdentifier","src":"44671:6:69"},"nativeSrc":"44671:57:69","nodeType":"YulFunctionCall","src":"44671:57:69"},"nativeSrc":"44671:57:69","nodeType":"YulExpressionStatement","src":"44671:57:69"}]},"name":"store_literal_in_memory_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619","nativeSrc":"44554:181:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"44652:6:69","nodeType":"YulTypedName","src":"44652:6:69","type":""}],"src":"44554:181:69"},{"body":{"nativeSrc":"44887:220:69","nodeType":"YulBlock","src":"44887:220:69","statements":[{"nativeSrc":"44897:74:69","nodeType":"YulAssignment","src":"44897:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"44963:3:69","nodeType":"YulIdentifier","src":"44963:3:69"},{"kind":"number","nativeSrc":"44968:2:69","nodeType":"YulLiteral","src":"44968:2:69","type":"","value":"31"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"44904:58:69","nodeType":"YulIdentifier","src":"44904:58:69"},"nativeSrc":"44904:67:69","nodeType":"YulFunctionCall","src":"44904:67:69"},"variableNames":[{"name":"pos","nativeSrc":"44897:3:69","nodeType":"YulIdentifier","src":"44897:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"45069:3:69","nodeType":"YulIdentifier","src":"45069:3:69"}],"functionName":{"name":"store_literal_in_memory_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619","nativeSrc":"44980:88:69","nodeType":"YulIdentifier","src":"44980:88:69"},"nativeSrc":"44980:93:69","nodeType":"YulFunctionCall","src":"44980:93:69"},"nativeSrc":"44980:93:69","nodeType":"YulExpressionStatement","src":"44980:93:69"},{"nativeSrc":"45082:19:69","nodeType":"YulAssignment","src":"45082:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"45093:3:69","nodeType":"YulIdentifier","src":"45093:3:69"},{"kind":"number","nativeSrc":"45098:2:69","nodeType":"YulLiteral","src":"45098:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"45089:3:69","nodeType":"YulIdentifier","src":"45089:3:69"},"nativeSrc":"45089:12:69","nodeType":"YulFunctionCall","src":"45089:12:69"},"variableNames":[{"name":"end","nativeSrc":"45082:3:69","nodeType":"YulIdentifier","src":"45082:3:69"}]}]},"name":"abi_encode_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619_to_t_string_memory_ptr_fromStack","nativeSrc":"44741:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"44875:3:69","nodeType":"YulTypedName","src":"44875:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"44883:3:69","nodeType":"YulTypedName","src":"44883:3:69","type":""}],"src":"44741:366:69"},{"body":{"nativeSrc":"45284:248:69","nodeType":"YulBlock","src":"45284:248:69","statements":[{"nativeSrc":"45294:26:69","nodeType":"YulAssignment","src":"45294:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"45306:9:69","nodeType":"YulIdentifier","src":"45306:9:69"},{"kind":"number","nativeSrc":"45317:2:69","nodeType":"YulLiteral","src":"45317:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"45302:3:69","nodeType":"YulIdentifier","src":"45302:3:69"},"nativeSrc":"45302:18:69","nodeType":"YulFunctionCall","src":"45302:18:69"},"variableNames":[{"name":"tail","nativeSrc":"45294:4:69","nodeType":"YulIdentifier","src":"45294:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"45341:9:69","nodeType":"YulIdentifier","src":"45341:9:69"},{"kind":"number","nativeSrc":"45352:1:69","nodeType":"YulLiteral","src":"45352:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"45337:3:69","nodeType":"YulIdentifier","src":"45337:3:69"},"nativeSrc":"45337:17:69","nodeType":"YulFunctionCall","src":"45337:17:69"},{"arguments":[{"name":"tail","nativeSrc":"45360:4:69","nodeType":"YulIdentifier","src":"45360:4:69"},{"name":"headStart","nativeSrc":"45366:9:69","nodeType":"YulIdentifier","src":"45366:9:69"}],"functionName":{"name":"sub","nativeSrc":"45356:3:69","nodeType":"YulIdentifier","src":"45356:3:69"},"nativeSrc":"45356:20:69","nodeType":"YulFunctionCall","src":"45356:20:69"}],"functionName":{"name":"mstore","nativeSrc":"45330:6:69","nodeType":"YulIdentifier","src":"45330:6:69"},"nativeSrc":"45330:47:69","nodeType":"YulFunctionCall","src":"45330:47:69"},"nativeSrc":"45330:47:69","nodeType":"YulExpressionStatement","src":"45330:47:69"},{"nativeSrc":"45386:139:69","nodeType":"YulAssignment","src":"45386:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"45520:4:69","nodeType":"YulIdentifier","src":"45520:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619_to_t_string_memory_ptr_fromStack","nativeSrc":"45394:124:69","nodeType":"YulIdentifier","src":"45394:124:69"},"nativeSrc":"45394:131:69","nodeType":"YulFunctionCall","src":"45394:131:69"},"variableNames":[{"name":"tail","nativeSrc":"45386:4:69","nodeType":"YulIdentifier","src":"45386:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"45113:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"45264:9:69","nodeType":"YulTypedName","src":"45264:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"45279:4:69","nodeType":"YulTypedName","src":"45279:4:69","type":""}],"src":"45113:419:69"},{"body":{"nativeSrc":"45644:71:69","nodeType":"YulBlock","src":"45644:71:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"45666:6:69","nodeType":"YulIdentifier","src":"45666:6:69"},{"kind":"number","nativeSrc":"45674:1:69","nodeType":"YulLiteral","src":"45674:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"45662:3:69","nodeType":"YulIdentifier","src":"45662:3:69"},"nativeSrc":"45662:14:69","nodeType":"YulFunctionCall","src":"45662:14:69"},{"hexValue":"76546f6b656e735265636569766564206174205f6465706f736974","kind":"string","nativeSrc":"45678:29:69","nodeType":"YulLiteral","src":"45678:29:69","type":"","value":"vTokensReceived at _deposit"}],"functionName":{"name":"mstore","nativeSrc":"45655:6:69","nodeType":"YulIdentifier","src":"45655:6:69"},"nativeSrc":"45655:53:69","nodeType":"YulFunctionCall","src":"45655:53:69"},"nativeSrc":"45655:53:69","nodeType":"YulExpressionStatement","src":"45655:53:69"}]},"name":"store_literal_in_memory_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137","nativeSrc":"45538:177:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"45636:6:69","nodeType":"YulTypedName","src":"45636:6:69","type":""}],"src":"45538:177:69"},{"body":{"nativeSrc":"45867:220:69","nodeType":"YulBlock","src":"45867:220:69","statements":[{"nativeSrc":"45877:74:69","nodeType":"YulAssignment","src":"45877:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"45943:3:69","nodeType":"YulIdentifier","src":"45943:3:69"},{"kind":"number","nativeSrc":"45948:2:69","nodeType":"YulLiteral","src":"45948:2:69","type":"","value":"27"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"45884:58:69","nodeType":"YulIdentifier","src":"45884:58:69"},"nativeSrc":"45884:67:69","nodeType":"YulFunctionCall","src":"45884:67:69"},"variableNames":[{"name":"pos","nativeSrc":"45877:3:69","nodeType":"YulIdentifier","src":"45877:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"46049:3:69","nodeType":"YulIdentifier","src":"46049:3:69"}],"functionName":{"name":"store_literal_in_memory_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137","nativeSrc":"45960:88:69","nodeType":"YulIdentifier","src":"45960:88:69"},"nativeSrc":"45960:93:69","nodeType":"YulFunctionCall","src":"45960:93:69"},"nativeSrc":"45960:93:69","nodeType":"YulExpressionStatement","src":"45960:93:69"},{"nativeSrc":"46062:19:69","nodeType":"YulAssignment","src":"46062:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"46073:3:69","nodeType":"YulIdentifier","src":"46073:3:69"},{"kind":"number","nativeSrc":"46078:2:69","nodeType":"YulLiteral","src":"46078:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"46069:3:69","nodeType":"YulIdentifier","src":"46069:3:69"},"nativeSrc":"46069:12:69","nodeType":"YulFunctionCall","src":"46069:12:69"},"variableNames":[{"name":"end","nativeSrc":"46062:3:69","nodeType":"YulIdentifier","src":"46062:3:69"}]}]},"name":"abi_encode_t_stringliteral_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137_to_t_string_memory_ptr_fromStack","nativeSrc":"45721:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"45855:3:69","nodeType":"YulTypedName","src":"45855:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"45863:3:69","nodeType":"YulTypedName","src":"45863:3:69","type":""}],"src":"45721:366:69"},{"body":{"nativeSrc":"46264:248:69","nodeType":"YulBlock","src":"46264:248:69","statements":[{"nativeSrc":"46274:26:69","nodeType":"YulAssignment","src":"46274:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"46286:9:69","nodeType":"YulIdentifier","src":"46286:9:69"},{"kind":"number","nativeSrc":"46297:2:69","nodeType":"YulLiteral","src":"46297:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"46282:3:69","nodeType":"YulIdentifier","src":"46282:3:69"},"nativeSrc":"46282:18:69","nodeType":"YulFunctionCall","src":"46282:18:69"},"variableNames":[{"name":"tail","nativeSrc":"46274:4:69","nodeType":"YulIdentifier","src":"46274:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"46321:9:69","nodeType":"YulIdentifier","src":"46321:9:69"},{"kind":"number","nativeSrc":"46332:1:69","nodeType":"YulLiteral","src":"46332:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"46317:3:69","nodeType":"YulIdentifier","src":"46317:3:69"},"nativeSrc":"46317:17:69","nodeType":"YulFunctionCall","src":"46317:17:69"},{"arguments":[{"name":"tail","nativeSrc":"46340:4:69","nodeType":"YulIdentifier","src":"46340:4:69"},{"name":"headStart","nativeSrc":"46346:9:69","nodeType":"YulIdentifier","src":"46346:9:69"}],"functionName":{"name":"sub","nativeSrc":"46336:3:69","nodeType":"YulIdentifier","src":"46336:3:69"},"nativeSrc":"46336:20:69","nodeType":"YulFunctionCall","src":"46336:20:69"}],"functionName":{"name":"mstore","nativeSrc":"46310:6:69","nodeType":"YulIdentifier","src":"46310:6:69"},"nativeSrc":"46310:47:69","nodeType":"YulFunctionCall","src":"46310:47:69"},"nativeSrc":"46310:47:69","nodeType":"YulExpressionStatement","src":"46310:47:69"},{"nativeSrc":"46366:139:69","nodeType":"YulAssignment","src":"46366:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"46500:4:69","nodeType":"YulIdentifier","src":"46500:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137_to_t_string_memory_ptr_fromStack","nativeSrc":"46374:124:69","nodeType":"YulIdentifier","src":"46374:124:69"},"nativeSrc":"46374:131:69","nodeType":"YulFunctionCall","src":"46374:131:69"},"variableNames":[{"name":"tail","nativeSrc":"46366:4:69","nodeType":"YulIdentifier","src":"46366:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"46093:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"46244:9:69","nodeType":"YulTypedName","src":"46244:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"46259:4:69","nodeType":"YulTypedName","src":"46259:4:69","type":""}],"src":"46093:419:69"},{"body":{"nativeSrc":"46566:362:69","nodeType":"YulBlock","src":"46566:362:69","statements":[{"nativeSrc":"46576:25:69","nodeType":"YulAssignment","src":"46576:25:69","value":{"arguments":[{"name":"x","nativeSrc":"46599:1:69","nodeType":"YulIdentifier","src":"46599:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"46581:17:69","nodeType":"YulIdentifier","src":"46581:17:69"},"nativeSrc":"46581:20:69","nodeType":"YulFunctionCall","src":"46581:20:69"},"variableNames":[{"name":"x","nativeSrc":"46576:1:69","nodeType":"YulIdentifier","src":"46576:1:69"}]},{"nativeSrc":"46610:25:69","nodeType":"YulAssignment","src":"46610:25:69","value":{"arguments":[{"name":"y","nativeSrc":"46633:1:69","nodeType":"YulIdentifier","src":"46633:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"46615:17:69","nodeType":"YulIdentifier","src":"46615:17:69"},"nativeSrc":"46615:20:69","nodeType":"YulFunctionCall","src":"46615:20:69"},"variableNames":[{"name":"y","nativeSrc":"46610:1:69","nodeType":"YulIdentifier","src":"46610:1:69"}]},{"nativeSrc":"46644:28:69","nodeType":"YulVariableDeclaration","src":"46644:28:69","value":{"arguments":[{"name":"x","nativeSrc":"46667:1:69","nodeType":"YulIdentifier","src":"46667:1:69"},{"name":"y","nativeSrc":"46670:1:69","nodeType":"YulIdentifier","src":"46670:1:69"}],"functionName":{"name":"mul","nativeSrc":"46663:3:69","nodeType":"YulIdentifier","src":"46663:3:69"},"nativeSrc":"46663:9:69","nodeType":"YulFunctionCall","src":"46663:9:69"},"variables":[{"name":"product_raw","nativeSrc":"46648:11:69","nodeType":"YulTypedName","src":"46648:11:69","type":""}]},{"nativeSrc":"46681:41:69","nodeType":"YulAssignment","src":"46681:41:69","value":{"arguments":[{"name":"product_raw","nativeSrc":"46710:11:69","nodeType":"YulIdentifier","src":"46710:11:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"46692:17:69","nodeType":"YulIdentifier","src":"46692:17:69"},"nativeSrc":"46692:30:69","nodeType":"YulFunctionCall","src":"46692:30:69"},"variableNames":[{"name":"product","nativeSrc":"46681:7:69","nodeType":"YulIdentifier","src":"46681:7:69"}]},{"body":{"nativeSrc":"46899:22:69","nodeType":"YulBlock","src":"46899:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"46901:16:69","nodeType":"YulIdentifier","src":"46901:16:69"},"nativeSrc":"46901:18:69","nodeType":"YulFunctionCall","src":"46901:18:69"},"nativeSrc":"46901:18:69","nodeType":"YulExpressionStatement","src":"46901:18:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nativeSrc":"46832:1:69","nodeType":"YulIdentifier","src":"46832:1:69"}],"functionName":{"name":"iszero","nativeSrc":"46825:6:69","nodeType":"YulIdentifier","src":"46825:6:69"},"nativeSrc":"46825:9:69","nodeType":"YulFunctionCall","src":"46825:9:69"},{"arguments":[{"name":"y","nativeSrc":"46855:1:69","nodeType":"YulIdentifier","src":"46855:1:69"},{"arguments":[{"name":"product","nativeSrc":"46862:7:69","nodeType":"YulIdentifier","src":"46862:7:69"},{"name":"x","nativeSrc":"46871:1:69","nodeType":"YulIdentifier","src":"46871:1:69"}],"functionName":{"name":"div","nativeSrc":"46858:3:69","nodeType":"YulIdentifier","src":"46858:3:69"},"nativeSrc":"46858:15:69","nodeType":"YulFunctionCall","src":"46858:15:69"}],"functionName":{"name":"eq","nativeSrc":"46852:2:69","nodeType":"YulIdentifier","src":"46852:2:69"},"nativeSrc":"46852:22:69","nodeType":"YulFunctionCall","src":"46852:22:69"}],"functionName":{"name":"or","nativeSrc":"46805:2:69","nodeType":"YulIdentifier","src":"46805:2:69"},"nativeSrc":"46805:83:69","nodeType":"YulFunctionCall","src":"46805:83:69"}],"functionName":{"name":"iszero","nativeSrc":"46785:6:69","nodeType":"YulIdentifier","src":"46785:6:69"},"nativeSrc":"46785:113:69","nodeType":"YulFunctionCall","src":"46785:113:69"},"nativeSrc":"46782:139:69","nodeType":"YulIf","src":"46782:139:69"}]},"name":"checked_mul_t_uint256","nativeSrc":"46518:410:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"46549:1:69","nodeType":"YulTypedName","src":"46549:1:69","type":""},{"name":"y","nativeSrc":"46552:1:69","nodeType":"YulTypedName","src":"46552:1:69","type":""}],"returnVariables":[{"name":"product","nativeSrc":"46558:7:69","nodeType":"YulTypedName","src":"46558:7:69","type":""}],"src":"46518:410:69"},{"body":{"nativeSrc":"46962:152:69","nodeType":"YulBlock","src":"46962:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"46979:1:69","nodeType":"YulLiteral","src":"46979:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"46982:77:69","nodeType":"YulLiteral","src":"46982:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"46972:6:69","nodeType":"YulIdentifier","src":"46972:6:69"},"nativeSrc":"46972:88:69","nodeType":"YulFunctionCall","src":"46972:88:69"},"nativeSrc":"46972:88:69","nodeType":"YulExpressionStatement","src":"46972:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"47076:1:69","nodeType":"YulLiteral","src":"47076:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"47079:4:69","nodeType":"YulLiteral","src":"47079:4:69","type":"","value":"0x12"}],"functionName":{"name":"mstore","nativeSrc":"47069:6:69","nodeType":"YulIdentifier","src":"47069:6:69"},"nativeSrc":"47069:15:69","nodeType":"YulFunctionCall","src":"47069:15:69"},"nativeSrc":"47069:15:69","nodeType":"YulExpressionStatement","src":"47069:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"47100:1:69","nodeType":"YulLiteral","src":"47100:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"47103:4:69","nodeType":"YulLiteral","src":"47103:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"47093:6:69","nodeType":"YulIdentifier","src":"47093:6:69"},"nativeSrc":"47093:15:69","nodeType":"YulFunctionCall","src":"47093:15:69"},"nativeSrc":"47093:15:69","nodeType":"YulExpressionStatement","src":"47093:15:69"}]},"name":"panic_error_0x12","nativeSrc":"46934:180:69","nodeType":"YulFunctionDefinition","src":"46934:180:69"},{"body":{"nativeSrc":"47162:143:69","nodeType":"YulBlock","src":"47162:143:69","statements":[{"nativeSrc":"47172:25:69","nodeType":"YulAssignment","src":"47172:25:69","value":{"arguments":[{"name":"x","nativeSrc":"47195:1:69","nodeType":"YulIdentifier","src":"47195:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"47177:17:69","nodeType":"YulIdentifier","src":"47177:17:69"},"nativeSrc":"47177:20:69","nodeType":"YulFunctionCall","src":"47177:20:69"},"variableNames":[{"name":"x","nativeSrc":"47172:1:69","nodeType":"YulIdentifier","src":"47172:1:69"}]},{"nativeSrc":"47206:25:69","nodeType":"YulAssignment","src":"47206:25:69","value":{"arguments":[{"name":"y","nativeSrc":"47229:1:69","nodeType":"YulIdentifier","src":"47229:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"47211:17:69","nodeType":"YulIdentifier","src":"47211:17:69"},"nativeSrc":"47211:20:69","nodeType":"YulFunctionCall","src":"47211:20:69"},"variableNames":[{"name":"y","nativeSrc":"47206:1:69","nodeType":"YulIdentifier","src":"47206:1:69"}]},{"body":{"nativeSrc":"47253:22:69","nodeType":"YulBlock","src":"47253:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x12","nativeSrc":"47255:16:69","nodeType":"YulIdentifier","src":"47255:16:69"},"nativeSrc":"47255:18:69","nodeType":"YulFunctionCall","src":"47255:18:69"},"nativeSrc":"47255:18:69","nodeType":"YulExpressionStatement","src":"47255:18:69"}]},"condition":{"arguments":[{"name":"y","nativeSrc":"47250:1:69","nodeType":"YulIdentifier","src":"47250:1:69"}],"functionName":{"name":"iszero","nativeSrc":"47243:6:69","nodeType":"YulIdentifier","src":"47243:6:69"},"nativeSrc":"47243:9:69","nodeType":"YulFunctionCall","src":"47243:9:69"},"nativeSrc":"47240:35:69","nodeType":"YulIf","src":"47240:35:69"},{"nativeSrc":"47285:14:69","nodeType":"YulAssignment","src":"47285:14:69","value":{"arguments":[{"name":"x","nativeSrc":"47294:1:69","nodeType":"YulIdentifier","src":"47294:1:69"},{"name":"y","nativeSrc":"47297:1:69","nodeType":"YulIdentifier","src":"47297:1:69"}],"functionName":{"name":"div","nativeSrc":"47290:3:69","nodeType":"YulIdentifier","src":"47290:3:69"},"nativeSrc":"47290:9:69","nodeType":"YulFunctionCall","src":"47290:9:69"},"variableNames":[{"name":"r","nativeSrc":"47285:1:69","nodeType":"YulIdentifier","src":"47285:1:69"}]}]},"name":"checked_div_t_uint256","nativeSrc":"47120:185:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"47151:1:69","nodeType":"YulTypedName","src":"47151:1:69","type":""},{"name":"y","nativeSrc":"47154:1:69","nodeType":"YulTypedName","src":"47154:1:69","type":""}],"returnVariables":[{"name":"r","nativeSrc":"47160:1:69","nodeType":"YulTypedName","src":"47160:1:69","type":""}],"src":"47120:185:69"},{"body":{"nativeSrc":"47457:277:69","nodeType":"YulBlock","src":"47457:277:69","statements":[{"nativeSrc":"47467:26:69","nodeType":"YulAssignment","src":"47467:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"47479:9:69","nodeType":"YulIdentifier","src":"47479:9:69"},{"kind":"number","nativeSrc":"47490:2:69","nodeType":"YulLiteral","src":"47490:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"47475:3:69","nodeType":"YulIdentifier","src":"47475:3:69"},"nativeSrc":"47475:18:69","nodeType":"YulFunctionCall","src":"47475:18:69"},"variableNames":[{"name":"tail","nativeSrc":"47467:4:69","nodeType":"YulIdentifier","src":"47467:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"47547:6:69","nodeType":"YulIdentifier","src":"47547:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"47560:9:69","nodeType":"YulIdentifier","src":"47560:9:69"},{"kind":"number","nativeSrc":"47571:1:69","nodeType":"YulLiteral","src":"47571:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"47556:3:69","nodeType":"YulIdentifier","src":"47556:3:69"},"nativeSrc":"47556:17:69","nodeType":"YulFunctionCall","src":"47556:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"47503:43:69","nodeType":"YulIdentifier","src":"47503:43:69"},"nativeSrc":"47503:71:69","nodeType":"YulFunctionCall","src":"47503:71:69"},"nativeSrc":"47503:71:69","nodeType":"YulExpressionStatement","src":"47503:71:69"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"47595:9:69","nodeType":"YulIdentifier","src":"47595:9:69"},{"kind":"number","nativeSrc":"47606:2:69","nodeType":"YulLiteral","src":"47606:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"47591:3:69","nodeType":"YulIdentifier","src":"47591:3:69"},"nativeSrc":"47591:18:69","nodeType":"YulFunctionCall","src":"47591:18:69"},{"arguments":[{"name":"tail","nativeSrc":"47615:4:69","nodeType":"YulIdentifier","src":"47615:4:69"},{"name":"headStart","nativeSrc":"47621:9:69","nodeType":"YulIdentifier","src":"47621:9:69"}],"functionName":{"name":"sub","nativeSrc":"47611:3:69","nodeType":"YulIdentifier","src":"47611:3:69"},"nativeSrc":"47611:20:69","nodeType":"YulFunctionCall","src":"47611:20:69"}],"functionName":{"name":"mstore","nativeSrc":"47584:6:69","nodeType":"YulIdentifier","src":"47584:6:69"},"nativeSrc":"47584:48:69","nodeType":"YulFunctionCall","src":"47584:48:69"},"nativeSrc":"47584:48:69","nodeType":"YulExpressionStatement","src":"47584:48:69"},{"nativeSrc":"47641:86:69","nodeType":"YulAssignment","src":"47641:86:69","value":{"arguments":[{"name":"value1","nativeSrc":"47713:6:69","nodeType":"YulIdentifier","src":"47713:6:69"},{"name":"tail","nativeSrc":"47722:4:69","nodeType":"YulIdentifier","src":"47722:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"47649:63:69","nodeType":"YulIdentifier","src":"47649:63:69"},"nativeSrc":"47649:78:69","nodeType":"YulFunctionCall","src":"47649:78:69"},"variableNames":[{"name":"tail","nativeSrc":"47641:4:69","nodeType":"YulIdentifier","src":"47641:4:69"}]}]},"name":"abi_encode_tuple_t_address_t_string_memory_ptr__to_t_address_t_string_memory_ptr__fromStack_reversed","nativeSrc":"47311:423:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"47421:9:69","nodeType":"YulTypedName","src":"47421:9:69","type":""},{"name":"value1","nativeSrc":"47433:6:69","nodeType":"YulTypedName","src":"47433:6:69","type":""},{"name":"value0","nativeSrc":"47441:6:69","nodeType":"YulTypedName","src":"47441:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"47452:4:69","nodeType":"YulTypedName","src":"47452:4:69","type":""}],"src":"47311:423:69"},{"body":{"nativeSrc":"47780:76:69","nodeType":"YulBlock","src":"47780:76:69","statements":[{"body":{"nativeSrc":"47834:16:69","nodeType":"YulBlock","src":"47834:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"47843:1:69","nodeType":"YulLiteral","src":"47843:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"47846:1:69","nodeType":"YulLiteral","src":"47846:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"47836:6:69","nodeType":"YulIdentifier","src":"47836:6:69"},"nativeSrc":"47836:12:69","nodeType":"YulFunctionCall","src":"47836:12:69"},"nativeSrc":"47836:12:69","nodeType":"YulExpressionStatement","src":"47836:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"47803:5:69","nodeType":"YulIdentifier","src":"47803:5:69"},{"arguments":[{"name":"value","nativeSrc":"47825:5:69","nodeType":"YulIdentifier","src":"47825:5:69"}],"functionName":{"name":"cleanup_t_bool","nativeSrc":"47810:14:69","nodeType":"YulIdentifier","src":"47810:14:69"},"nativeSrc":"47810:21:69","nodeType":"YulFunctionCall","src":"47810:21:69"}],"functionName":{"name":"eq","nativeSrc":"47800:2:69","nodeType":"YulIdentifier","src":"47800:2:69"},"nativeSrc":"47800:32:69","nodeType":"YulFunctionCall","src":"47800:32:69"}],"functionName":{"name":"iszero","nativeSrc":"47793:6:69","nodeType":"YulIdentifier","src":"47793:6:69"},"nativeSrc":"47793:40:69","nodeType":"YulFunctionCall","src":"47793:40:69"},"nativeSrc":"47790:60:69","nodeType":"YulIf","src":"47790:60:69"}]},"name":"validator_revert_t_bool","nativeSrc":"47740:116:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"47773:5:69","nodeType":"YulTypedName","src":"47773:5:69","type":""}],"src":"47740:116:69"},{"body":{"nativeSrc":"47922:77:69","nodeType":"YulBlock","src":"47922:77:69","statements":[{"nativeSrc":"47932:22:69","nodeType":"YulAssignment","src":"47932:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"47947:6:69","nodeType":"YulIdentifier","src":"47947:6:69"}],"functionName":{"name":"mload","nativeSrc":"47941:5:69","nodeType":"YulIdentifier","src":"47941:5:69"},"nativeSrc":"47941:13:69","nodeType":"YulFunctionCall","src":"47941:13:69"},"variableNames":[{"name":"value","nativeSrc":"47932:5:69","nodeType":"YulIdentifier","src":"47932:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"47987:5:69","nodeType":"YulIdentifier","src":"47987:5:69"}],"functionName":{"name":"validator_revert_t_bool","nativeSrc":"47963:23:69","nodeType":"YulIdentifier","src":"47963:23:69"},"nativeSrc":"47963:30:69","nodeType":"YulFunctionCall","src":"47963:30:69"},"nativeSrc":"47963:30:69","nodeType":"YulExpressionStatement","src":"47963:30:69"}]},"name":"abi_decode_t_bool_fromMemory","nativeSrc":"47862:137:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"47900:6:69","nodeType":"YulTypedName","src":"47900:6:69","type":""},{"name":"end","nativeSrc":"47908:3:69","nodeType":"YulTypedName","src":"47908:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"47916:5:69","nodeType":"YulTypedName","src":"47916:5:69","type":""}],"src":"47862:137:69"},{"body":{"nativeSrc":"48079:271:69","nodeType":"YulBlock","src":"48079:271:69","statements":[{"body":{"nativeSrc":"48125:83:69","nodeType":"YulBlock","src":"48125:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"48127:77:69","nodeType":"YulIdentifier","src":"48127:77:69"},"nativeSrc":"48127:79:69","nodeType":"YulFunctionCall","src":"48127:79:69"},"nativeSrc":"48127:79:69","nodeType":"YulExpressionStatement","src":"48127:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"48100:7:69","nodeType":"YulIdentifier","src":"48100:7:69"},{"name":"headStart","nativeSrc":"48109:9:69","nodeType":"YulIdentifier","src":"48109:9:69"}],"functionName":{"name":"sub","nativeSrc":"48096:3:69","nodeType":"YulIdentifier","src":"48096:3:69"},"nativeSrc":"48096:23:69","nodeType":"YulFunctionCall","src":"48096:23:69"},{"kind":"number","nativeSrc":"48121:2:69","nodeType":"YulLiteral","src":"48121:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"48092:3:69","nodeType":"YulIdentifier","src":"48092:3:69"},"nativeSrc":"48092:32:69","nodeType":"YulFunctionCall","src":"48092:32:69"},"nativeSrc":"48089:119:69","nodeType":"YulIf","src":"48089:119:69"},{"nativeSrc":"48218:125:69","nodeType":"YulBlock","src":"48218:125:69","statements":[{"nativeSrc":"48233:15:69","nodeType":"YulVariableDeclaration","src":"48233:15:69","value":{"kind":"number","nativeSrc":"48247:1:69","nodeType":"YulLiteral","src":"48247:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"48237:6:69","nodeType":"YulTypedName","src":"48237:6:69","type":""}]},{"nativeSrc":"48262:71:69","nodeType":"YulAssignment","src":"48262:71:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"48305:9:69","nodeType":"YulIdentifier","src":"48305:9:69"},{"name":"offset","nativeSrc":"48316:6:69","nodeType":"YulIdentifier","src":"48316:6:69"}],"functionName":{"name":"add","nativeSrc":"48301:3:69","nodeType":"YulIdentifier","src":"48301:3:69"},"nativeSrc":"48301:22:69","nodeType":"YulFunctionCall","src":"48301:22:69"},{"name":"dataEnd","nativeSrc":"48325:7:69","nodeType":"YulIdentifier","src":"48325:7:69"}],"functionName":{"name":"abi_decode_t_bool_fromMemory","nativeSrc":"48272:28:69","nodeType":"YulIdentifier","src":"48272:28:69"},"nativeSrc":"48272:61:69","nodeType":"YulFunctionCall","src":"48272:61:69"},"variableNames":[{"name":"value0","nativeSrc":"48262:6:69","nodeType":"YulIdentifier","src":"48262:6:69"}]}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nativeSrc":"48005:345:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"48049:9:69","nodeType":"YulTypedName","src":"48049:9:69","type":""},{"name":"dataEnd","nativeSrc":"48060:7:69","nodeType":"YulTypedName","src":"48060:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"48072:6:69","nodeType":"YulTypedName","src":"48072:6:69","type":""}],"src":"48005:345:69"},{"body":{"nativeSrc":"48530:359:69","nodeType":"YulBlock","src":"48530:359:69","statements":[{"nativeSrc":"48540:26:69","nodeType":"YulAssignment","src":"48540:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"48552:9:69","nodeType":"YulIdentifier","src":"48552:9:69"},{"kind":"number","nativeSrc":"48563:2:69","nodeType":"YulLiteral","src":"48563:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"48548:3:69","nodeType":"YulIdentifier","src":"48548:3:69"},"nativeSrc":"48548:18:69","nodeType":"YulFunctionCall","src":"48548:18:69"},"variableNames":[{"name":"tail","nativeSrc":"48540:4:69","nodeType":"YulIdentifier","src":"48540:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"48620:6:69","nodeType":"YulIdentifier","src":"48620:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"48633:9:69","nodeType":"YulIdentifier","src":"48633:9:69"},{"kind":"number","nativeSrc":"48644:1:69","nodeType":"YulLiteral","src":"48644:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"48629:3:69","nodeType":"YulIdentifier","src":"48629:3:69"},"nativeSrc":"48629:17:69","nodeType":"YulFunctionCall","src":"48629:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"48576:43:69","nodeType":"YulIdentifier","src":"48576:43:69"},"nativeSrc":"48576:71:69","nodeType":"YulFunctionCall","src":"48576:71:69"},"nativeSrc":"48576:71:69","nodeType":"YulExpressionStatement","src":"48576:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"48701:6:69","nodeType":"YulIdentifier","src":"48701:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"48714:9:69","nodeType":"YulIdentifier","src":"48714:9:69"},{"kind":"number","nativeSrc":"48725:2:69","nodeType":"YulLiteral","src":"48725:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"48710:3:69","nodeType":"YulIdentifier","src":"48710:3:69"},"nativeSrc":"48710:18:69","nodeType":"YulFunctionCall","src":"48710:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"48657:43:69","nodeType":"YulIdentifier","src":"48657:43:69"},"nativeSrc":"48657:72:69","nodeType":"YulFunctionCall","src":"48657:72:69"},"nativeSrc":"48657:72:69","nodeType":"YulExpressionStatement","src":"48657:72:69"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"48750:9:69","nodeType":"YulIdentifier","src":"48750:9:69"},{"kind":"number","nativeSrc":"48761:2:69","nodeType":"YulLiteral","src":"48761:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"48746:3:69","nodeType":"YulIdentifier","src":"48746:3:69"},"nativeSrc":"48746:18:69","nodeType":"YulFunctionCall","src":"48746:18:69"},{"arguments":[{"name":"tail","nativeSrc":"48770:4:69","nodeType":"YulIdentifier","src":"48770:4:69"},{"name":"headStart","nativeSrc":"48776:9:69","nodeType":"YulIdentifier","src":"48776:9:69"}],"functionName":{"name":"sub","nativeSrc":"48766:3:69","nodeType":"YulIdentifier","src":"48766:3:69"},"nativeSrc":"48766:20:69","nodeType":"YulFunctionCall","src":"48766:20:69"}],"functionName":{"name":"mstore","nativeSrc":"48739:6:69","nodeType":"YulIdentifier","src":"48739:6:69"},"nativeSrc":"48739:48:69","nodeType":"YulFunctionCall","src":"48739:48:69"},"nativeSrc":"48739:48:69","nodeType":"YulExpressionStatement","src":"48739:48:69"},{"nativeSrc":"48796:86:69","nodeType":"YulAssignment","src":"48796:86:69","value":{"arguments":[{"name":"value2","nativeSrc":"48868:6:69","nodeType":"YulIdentifier","src":"48868:6:69"},{"name":"tail","nativeSrc":"48877:4:69","nodeType":"YulIdentifier","src":"48877:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"48804:63:69","nodeType":"YulIdentifier","src":"48804:63:69"},"nativeSrc":"48804:78:69","nodeType":"YulFunctionCall","src":"48804:78:69"},"variableNames":[{"name":"tail","nativeSrc":"48796:4:69","nodeType":"YulIdentifier","src":"48796:4:69"}]}]},"name":"abi_encode_tuple_t_address_t_address_t_string_memory_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed","nativeSrc":"48356:533:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"48486:9:69","nodeType":"YulTypedName","src":"48486:9:69","type":""},{"name":"value2","nativeSrc":"48498:6:69","nodeType":"YulTypedName","src":"48498:6:69","type":""},{"name":"value1","nativeSrc":"48506:6:69","nodeType":"YulTypedName","src":"48506:6:69","type":""},{"name":"value0","nativeSrc":"48514:6:69","nodeType":"YulTypedName","src":"48514:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"48525:4:69","nodeType":"YulTypedName","src":"48525:4:69","type":""}],"src":"48356:533:69"},{"body":{"nativeSrc":"49001:76:69","nodeType":"YulBlock","src":"49001:76:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"49023:6:69","nodeType":"YulIdentifier","src":"49023:6:69"},{"kind":"number","nativeSrc":"49031:1:69","nodeType":"YulLiteral","src":"49031:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"49019:3:69","nodeType":"YulIdentifier","src":"49019:3:69"},"nativeSrc":"49019:14:69","nodeType":"YulFunctionCall","src":"49019:14:69"},{"hexValue":"61637475616c56546f6b656e73206174205f6265666f72655769746864726177","kind":"string","nativeSrc":"49035:34:69","nodeType":"YulLiteral","src":"49035:34:69","type":"","value":"actualVTokens at _beforeWithdraw"}],"functionName":{"name":"mstore","nativeSrc":"49012:6:69","nodeType":"YulIdentifier","src":"49012:6:69"},"nativeSrc":"49012:58:69","nodeType":"YulFunctionCall","src":"49012:58:69"},"nativeSrc":"49012:58:69","nodeType":"YulExpressionStatement","src":"49012:58:69"}]},"name":"store_literal_in_memory_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e","nativeSrc":"48895:182:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"48993:6:69","nodeType":"YulTypedName","src":"48993:6:69","type":""}],"src":"48895:182:69"},{"body":{"nativeSrc":"49229:220:69","nodeType":"YulBlock","src":"49229:220:69","statements":[{"nativeSrc":"49239:74:69","nodeType":"YulAssignment","src":"49239:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"49305:3:69","nodeType":"YulIdentifier","src":"49305:3:69"},{"kind":"number","nativeSrc":"49310:2:69","nodeType":"YulLiteral","src":"49310:2:69","type":"","value":"32"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"49246:58:69","nodeType":"YulIdentifier","src":"49246:58:69"},"nativeSrc":"49246:67:69","nodeType":"YulFunctionCall","src":"49246:67:69"},"variableNames":[{"name":"pos","nativeSrc":"49239:3:69","nodeType":"YulIdentifier","src":"49239:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"49411:3:69","nodeType":"YulIdentifier","src":"49411:3:69"}],"functionName":{"name":"store_literal_in_memory_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e","nativeSrc":"49322:88:69","nodeType":"YulIdentifier","src":"49322:88:69"},"nativeSrc":"49322:93:69","nodeType":"YulFunctionCall","src":"49322:93:69"},"nativeSrc":"49322:93:69","nodeType":"YulExpressionStatement","src":"49322:93:69"},{"nativeSrc":"49424:19:69","nodeType":"YulAssignment","src":"49424:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"49435:3:69","nodeType":"YulIdentifier","src":"49435:3:69"},{"kind":"number","nativeSrc":"49440:2:69","nodeType":"YulLiteral","src":"49440:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"49431:3:69","nodeType":"YulIdentifier","src":"49431:3:69"},"nativeSrc":"49431:12:69","nodeType":"YulFunctionCall","src":"49431:12:69"},"variableNames":[{"name":"end","nativeSrc":"49424:3:69","nodeType":"YulIdentifier","src":"49424:3:69"}]}]},"name":"abi_encode_t_stringliteral_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e_to_t_string_memory_ptr_fromStack","nativeSrc":"49083:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"49217:3:69","nodeType":"YulTypedName","src":"49217:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"49225:3:69","nodeType":"YulTypedName","src":"49225:3:69","type":""}],"src":"49083:366:69"},{"body":{"nativeSrc":"49626:248:69","nodeType":"YulBlock","src":"49626:248:69","statements":[{"nativeSrc":"49636:26:69","nodeType":"YulAssignment","src":"49636:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"49648:9:69","nodeType":"YulIdentifier","src":"49648:9:69"},{"kind":"number","nativeSrc":"49659:2:69","nodeType":"YulLiteral","src":"49659:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"49644:3:69","nodeType":"YulIdentifier","src":"49644:3:69"},"nativeSrc":"49644:18:69","nodeType":"YulFunctionCall","src":"49644:18:69"},"variableNames":[{"name":"tail","nativeSrc":"49636:4:69","nodeType":"YulIdentifier","src":"49636:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"49683:9:69","nodeType":"YulIdentifier","src":"49683:9:69"},{"kind":"number","nativeSrc":"49694:1:69","nodeType":"YulLiteral","src":"49694:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"49679:3:69","nodeType":"YulIdentifier","src":"49679:3:69"},"nativeSrc":"49679:17:69","nodeType":"YulFunctionCall","src":"49679:17:69"},{"arguments":[{"name":"tail","nativeSrc":"49702:4:69","nodeType":"YulIdentifier","src":"49702:4:69"},{"name":"headStart","nativeSrc":"49708:9:69","nodeType":"YulIdentifier","src":"49708:9:69"}],"functionName":{"name":"sub","nativeSrc":"49698:3:69","nodeType":"YulIdentifier","src":"49698:3:69"},"nativeSrc":"49698:20:69","nodeType":"YulFunctionCall","src":"49698:20:69"}],"functionName":{"name":"mstore","nativeSrc":"49672:6:69","nodeType":"YulIdentifier","src":"49672:6:69"},"nativeSrc":"49672:47:69","nodeType":"YulFunctionCall","src":"49672:47:69"},"nativeSrc":"49672:47:69","nodeType":"YulExpressionStatement","src":"49672:47:69"},{"nativeSrc":"49728:139:69","nodeType":"YulAssignment","src":"49728:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"49862:4:69","nodeType":"YulIdentifier","src":"49862:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e_to_t_string_memory_ptr_fromStack","nativeSrc":"49736:124:69","nodeType":"YulIdentifier","src":"49736:124:69"},"nativeSrc":"49736:131:69","nodeType":"YulFunctionCall","src":"49736:131:69"},"variableNames":[{"name":"tail","nativeSrc":"49728:4:69","nodeType":"YulIdentifier","src":"49728:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"49455:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"49606:9:69","nodeType":"YulTypedName","src":"49606:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"49621:4:69","nodeType":"YulTypedName","src":"49621:4:69","type":""}],"src":"49455:419:69"},{"body":{"nativeSrc":"49969:28:69","nodeType":"YulBlock","src":"49969:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"49986:1:69","nodeType":"YulLiteral","src":"49986:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"49989:1:69","nodeType":"YulLiteral","src":"49989:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"49979:6:69","nodeType":"YulIdentifier","src":"49979:6:69"},"nativeSrc":"49979:12:69","nodeType":"YulFunctionCall","src":"49979:12:69"},"nativeSrc":"49979:12:69","nodeType":"YulExpressionStatement","src":"49979:12:69"}]},"name":"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae","nativeSrc":"49880:117:69","nodeType":"YulFunctionDefinition","src":"49880:117:69"},{"body":{"nativeSrc":"50070:241:69","nodeType":"YulBlock","src":"50070:241:69","statements":[{"body":{"nativeSrc":"50175:22:69","nodeType":"YulBlock","src":"50175:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"50177:16:69","nodeType":"YulIdentifier","src":"50177:16:69"},"nativeSrc":"50177:18:69","nodeType":"YulFunctionCall","src":"50177:18:69"},"nativeSrc":"50177:18:69","nodeType":"YulExpressionStatement","src":"50177:18:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"50147:6:69","nodeType":"YulIdentifier","src":"50147:6:69"},{"kind":"number","nativeSrc":"50155:18:69","nodeType":"YulLiteral","src":"50155:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"50144:2:69","nodeType":"YulIdentifier","src":"50144:2:69"},"nativeSrc":"50144:30:69","nodeType":"YulFunctionCall","src":"50144:30:69"},"nativeSrc":"50141:56:69","nodeType":"YulIf","src":"50141:56:69"},{"nativeSrc":"50207:37:69","nodeType":"YulAssignment","src":"50207:37:69","value":{"arguments":[{"name":"length","nativeSrc":"50237:6:69","nodeType":"YulIdentifier","src":"50237:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"50215:21:69","nodeType":"YulIdentifier","src":"50215:21:69"},"nativeSrc":"50215:29:69","nodeType":"YulFunctionCall","src":"50215:29:69"},"variableNames":[{"name":"size","nativeSrc":"50207:4:69","nodeType":"YulIdentifier","src":"50207:4:69"}]},{"nativeSrc":"50281:23:69","nodeType":"YulAssignment","src":"50281:23:69","value":{"arguments":[{"name":"size","nativeSrc":"50293:4:69","nodeType":"YulIdentifier","src":"50293:4:69"},{"kind":"number","nativeSrc":"50299:4:69","nodeType":"YulLiteral","src":"50299:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"50289:3:69","nodeType":"YulIdentifier","src":"50289:3:69"},"nativeSrc":"50289:15:69","nodeType":"YulFunctionCall","src":"50289:15:69"},"variableNames":[{"name":"size","nativeSrc":"50281:4:69","nodeType":"YulIdentifier","src":"50281:4:69"}]}]},"name":"array_allocation_size_t_string_memory_ptr","nativeSrc":"50003:308:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nativeSrc":"50054:6:69","nodeType":"YulTypedName","src":"50054:6:69","type":""}],"returnVariables":[{"name":"size","nativeSrc":"50065:4:69","nodeType":"YulTypedName","src":"50065:4:69","type":""}],"src":"50003:308:69"},{"body":{"nativeSrc":"50412:339:69","nodeType":"YulBlock","src":"50412:339:69","statements":[{"nativeSrc":"50422:75:69","nodeType":"YulAssignment","src":"50422:75:69","value":{"arguments":[{"arguments":[{"name":"length","nativeSrc":"50489:6:69","nodeType":"YulIdentifier","src":"50489:6:69"}],"functionName":{"name":"array_allocation_size_t_string_memory_ptr","nativeSrc":"50447:41:69","nodeType":"YulIdentifier","src":"50447:41:69"},"nativeSrc":"50447:49:69","nodeType":"YulFunctionCall","src":"50447:49:69"}],"functionName":{"name":"allocate_memory","nativeSrc":"50431:15:69","nodeType":"YulIdentifier","src":"50431:15:69"},"nativeSrc":"50431:66:69","nodeType":"YulFunctionCall","src":"50431:66:69"},"variableNames":[{"name":"array","nativeSrc":"50422:5:69","nodeType":"YulIdentifier","src":"50422:5:69"}]},{"expression":{"arguments":[{"name":"array","nativeSrc":"50513:5:69","nodeType":"YulIdentifier","src":"50513:5:69"},{"name":"length","nativeSrc":"50520:6:69","nodeType":"YulIdentifier","src":"50520:6:69"}],"functionName":{"name":"mstore","nativeSrc":"50506:6:69","nodeType":"YulIdentifier","src":"50506:6:69"},"nativeSrc":"50506:21:69","nodeType":"YulFunctionCall","src":"50506:21:69"},"nativeSrc":"50506:21:69","nodeType":"YulExpressionStatement","src":"50506:21:69"},{"nativeSrc":"50536:27:69","nodeType":"YulVariableDeclaration","src":"50536:27:69","value":{"arguments":[{"name":"array","nativeSrc":"50551:5:69","nodeType":"YulIdentifier","src":"50551:5:69"},{"kind":"number","nativeSrc":"50558:4:69","nodeType":"YulLiteral","src":"50558:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"50547:3:69","nodeType":"YulIdentifier","src":"50547:3:69"},"nativeSrc":"50547:16:69","nodeType":"YulFunctionCall","src":"50547:16:69"},"variables":[{"name":"dst","nativeSrc":"50540:3:69","nodeType":"YulTypedName","src":"50540:3:69","type":""}]},{"body":{"nativeSrc":"50601:83:69","nodeType":"YulBlock","src":"50601:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae","nativeSrc":"50603:77:69","nodeType":"YulIdentifier","src":"50603:77:69"},"nativeSrc":"50603:79:69","nodeType":"YulFunctionCall","src":"50603:79:69"},"nativeSrc":"50603:79:69","nodeType":"YulExpressionStatement","src":"50603:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"src","nativeSrc":"50582:3:69","nodeType":"YulIdentifier","src":"50582:3:69"},{"name":"length","nativeSrc":"50587:6:69","nodeType":"YulIdentifier","src":"50587:6:69"}],"functionName":{"name":"add","nativeSrc":"50578:3:69","nodeType":"YulIdentifier","src":"50578:3:69"},"nativeSrc":"50578:16:69","nodeType":"YulFunctionCall","src":"50578:16:69"},{"name":"end","nativeSrc":"50596:3:69","nodeType":"YulIdentifier","src":"50596:3:69"}],"functionName":{"name":"gt","nativeSrc":"50575:2:69","nodeType":"YulIdentifier","src":"50575:2:69"},"nativeSrc":"50575:25:69","nodeType":"YulFunctionCall","src":"50575:25:69"},"nativeSrc":"50572:112:69","nodeType":"YulIf","src":"50572:112:69"},{"expression":{"arguments":[{"name":"src","nativeSrc":"50728:3:69","nodeType":"YulIdentifier","src":"50728:3:69"},{"name":"dst","nativeSrc":"50733:3:69","nodeType":"YulIdentifier","src":"50733:3:69"},{"name":"length","nativeSrc":"50738:6:69","nodeType":"YulIdentifier","src":"50738:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"50693:34:69","nodeType":"YulIdentifier","src":"50693:34:69"},"nativeSrc":"50693:52:69","nodeType":"YulFunctionCall","src":"50693:52:69"},"nativeSrc":"50693:52:69","nodeType":"YulExpressionStatement","src":"50693:52:69"}]},"name":"abi_decode_available_length_t_string_memory_ptr_fromMemory","nativeSrc":"50317:434:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"50385:3:69","nodeType":"YulTypedName","src":"50385:3:69","type":""},{"name":"length","nativeSrc":"50390:6:69","nodeType":"YulTypedName","src":"50390:6:69","type":""},{"name":"end","nativeSrc":"50398:3:69","nodeType":"YulTypedName","src":"50398:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"50406:5:69","nodeType":"YulTypedName","src":"50406:5:69","type":""}],"src":"50317:434:69"},{"body":{"nativeSrc":"50844:282:69","nodeType":"YulBlock","src":"50844:282:69","statements":[{"body":{"nativeSrc":"50893:83:69","nodeType":"YulBlock","src":"50893:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"50895:77:69","nodeType":"YulIdentifier","src":"50895:77:69"},"nativeSrc":"50895:79:69","nodeType":"YulFunctionCall","src":"50895:79:69"},"nativeSrc":"50895:79:69","nodeType":"YulExpressionStatement","src":"50895:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"50872:6:69","nodeType":"YulIdentifier","src":"50872:6:69"},{"kind":"number","nativeSrc":"50880:4:69","nodeType":"YulLiteral","src":"50880:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"50868:3:69","nodeType":"YulIdentifier","src":"50868:3:69"},"nativeSrc":"50868:17:69","nodeType":"YulFunctionCall","src":"50868:17:69"},{"name":"end","nativeSrc":"50887:3:69","nodeType":"YulIdentifier","src":"50887:3:69"}],"functionName":{"name":"slt","nativeSrc":"50864:3:69","nodeType":"YulIdentifier","src":"50864:3:69"},"nativeSrc":"50864:27:69","nodeType":"YulFunctionCall","src":"50864:27:69"}],"functionName":{"name":"iszero","nativeSrc":"50857:6:69","nodeType":"YulIdentifier","src":"50857:6:69"},"nativeSrc":"50857:35:69","nodeType":"YulFunctionCall","src":"50857:35:69"},"nativeSrc":"50854:122:69","nodeType":"YulIf","src":"50854:122:69"},{"nativeSrc":"50985:27:69","nodeType":"YulVariableDeclaration","src":"50985:27:69","value":{"arguments":[{"name":"offset","nativeSrc":"51005:6:69","nodeType":"YulIdentifier","src":"51005:6:69"}],"functionName":{"name":"mload","nativeSrc":"50999:5:69","nodeType":"YulIdentifier","src":"50999:5:69"},"nativeSrc":"50999:13:69","nodeType":"YulFunctionCall","src":"50999:13:69"},"variables":[{"name":"length","nativeSrc":"50989:6:69","nodeType":"YulTypedName","src":"50989:6:69","type":""}]},{"nativeSrc":"51021:99:69","nodeType":"YulAssignment","src":"51021:99:69","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"51093:6:69","nodeType":"YulIdentifier","src":"51093:6:69"},{"kind":"number","nativeSrc":"51101:4:69","nodeType":"YulLiteral","src":"51101:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"51089:3:69","nodeType":"YulIdentifier","src":"51089:3:69"},"nativeSrc":"51089:17:69","nodeType":"YulFunctionCall","src":"51089:17:69"},{"name":"length","nativeSrc":"51108:6:69","nodeType":"YulIdentifier","src":"51108:6:69"},{"name":"end","nativeSrc":"51116:3:69","nodeType":"YulIdentifier","src":"51116:3:69"}],"functionName":{"name":"abi_decode_available_length_t_string_memory_ptr_fromMemory","nativeSrc":"51030:58:69","nodeType":"YulIdentifier","src":"51030:58:69"},"nativeSrc":"51030:90:69","nodeType":"YulFunctionCall","src":"51030:90:69"},"variableNames":[{"name":"array","nativeSrc":"51021:5:69","nodeType":"YulIdentifier","src":"51021:5:69"}]}]},"name":"abi_decode_t_string_memory_ptr_fromMemory","nativeSrc":"50771:355:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"50822:6:69","nodeType":"YulTypedName","src":"50822:6:69","type":""},{"name":"end","nativeSrc":"50830:3:69","nodeType":"YulTypedName","src":"50830:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"50838:5:69","nodeType":"YulTypedName","src":"50838:5:69","type":""}],"src":"50771:355:69"},{"body":{"nativeSrc":"51219:437:69","nodeType":"YulBlock","src":"51219:437:69","statements":[{"body":{"nativeSrc":"51265:83:69","nodeType":"YulBlock","src":"51265:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"51267:77:69","nodeType":"YulIdentifier","src":"51267:77:69"},"nativeSrc":"51267:79:69","nodeType":"YulFunctionCall","src":"51267:79:69"},"nativeSrc":"51267:79:69","nodeType":"YulExpressionStatement","src":"51267:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"51240:7:69","nodeType":"YulIdentifier","src":"51240:7:69"},{"name":"headStart","nativeSrc":"51249:9:69","nodeType":"YulIdentifier","src":"51249:9:69"}],"functionName":{"name":"sub","nativeSrc":"51236:3:69","nodeType":"YulIdentifier","src":"51236:3:69"},"nativeSrc":"51236:23:69","nodeType":"YulFunctionCall","src":"51236:23:69"},{"kind":"number","nativeSrc":"51261:2:69","nodeType":"YulLiteral","src":"51261:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"51232:3:69","nodeType":"YulIdentifier","src":"51232:3:69"},"nativeSrc":"51232:32:69","nodeType":"YulFunctionCall","src":"51232:32:69"},"nativeSrc":"51229:119:69","nodeType":"YulIf","src":"51229:119:69"},{"nativeSrc":"51358:291:69","nodeType":"YulBlock","src":"51358:291:69","statements":[{"nativeSrc":"51373:38:69","nodeType":"YulVariableDeclaration","src":"51373:38:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"51397:9:69","nodeType":"YulIdentifier","src":"51397:9:69"},{"kind":"number","nativeSrc":"51408:1:69","nodeType":"YulLiteral","src":"51408:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"51393:3:69","nodeType":"YulIdentifier","src":"51393:3:69"},"nativeSrc":"51393:17:69","nodeType":"YulFunctionCall","src":"51393:17:69"}],"functionName":{"name":"mload","nativeSrc":"51387:5:69","nodeType":"YulIdentifier","src":"51387:5:69"},"nativeSrc":"51387:24:69","nodeType":"YulFunctionCall","src":"51387:24:69"},"variables":[{"name":"offset","nativeSrc":"51377:6:69","nodeType":"YulTypedName","src":"51377:6:69","type":""}]},{"body":{"nativeSrc":"51458:83:69","nodeType":"YulBlock","src":"51458:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"51460:77:69","nodeType":"YulIdentifier","src":"51460:77:69"},"nativeSrc":"51460:79:69","nodeType":"YulFunctionCall","src":"51460:79:69"},"nativeSrc":"51460:79:69","nodeType":"YulExpressionStatement","src":"51460:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"51430:6:69","nodeType":"YulIdentifier","src":"51430:6:69"},{"kind":"number","nativeSrc":"51438:18:69","nodeType":"YulLiteral","src":"51438:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"51427:2:69","nodeType":"YulIdentifier","src":"51427:2:69"},"nativeSrc":"51427:30:69","nodeType":"YulFunctionCall","src":"51427:30:69"},"nativeSrc":"51424:117:69","nodeType":"YulIf","src":"51424:117:69"},{"nativeSrc":"51555:84:69","nodeType":"YulAssignment","src":"51555:84:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"51611:9:69","nodeType":"YulIdentifier","src":"51611:9:69"},{"name":"offset","nativeSrc":"51622:6:69","nodeType":"YulIdentifier","src":"51622:6:69"}],"functionName":{"name":"add","nativeSrc":"51607:3:69","nodeType":"YulIdentifier","src":"51607:3:69"},"nativeSrc":"51607:22:69","nodeType":"YulFunctionCall","src":"51607:22:69"},{"name":"dataEnd","nativeSrc":"51631:7:69","nodeType":"YulIdentifier","src":"51631:7:69"}],"functionName":{"name":"abi_decode_t_string_memory_ptr_fromMemory","nativeSrc":"51565:41:69","nodeType":"YulIdentifier","src":"51565:41:69"},"nativeSrc":"51565:74:69","nodeType":"YulFunctionCall","src":"51565:74:69"},"variableNames":[{"name":"value0","nativeSrc":"51555:6:69","nodeType":"YulIdentifier","src":"51555:6:69"}]}]}]},"name":"abi_decode_tuple_t_string_memory_ptr_fromMemory","nativeSrc":"51132:524:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"51189:9:69","nodeType":"YulTypedName","src":"51189:9:69","type":""},{"name":"dataEnd","nativeSrc":"51200:7:69","nodeType":"YulTypedName","src":"51200:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"51212:6:69","nodeType":"YulTypedName","src":"51212:6:69","type":""}],"src":"51132:524:69"},{"body":{"nativeSrc":"51776:34:69","nodeType":"YulBlock","src":"51776:34:69","statements":[{"nativeSrc":"51786:18:69","nodeType":"YulAssignment","src":"51786:18:69","value":{"name":"pos","nativeSrc":"51801:3:69","nodeType":"YulIdentifier","src":"51801:3:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"51786:11:69","nodeType":"YulIdentifier","src":"51786:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"51662:148:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"51748:3:69","nodeType":"YulTypedName","src":"51748:3:69","type":""},{"name":"length","nativeSrc":"51753:6:69","nodeType":"YulTypedName","src":"51753:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"51764:11:69","nodeType":"YulTypedName","src":"51764:11:69","type":""}],"src":"51662:148:69"},{"body":{"nativeSrc":"51922:66:69","nodeType":"YulBlock","src":"51922:66:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"51944:6:69","nodeType":"YulIdentifier","src":"51944:6:69"},{"kind":"number","nativeSrc":"51952:1:69","nodeType":"YulLiteral","src":"51952:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"51940:3:69","nodeType":"YulIdentifier","src":"51940:3:69"},"nativeSrc":"51940:14:69","nodeType":"YulFunctionCall","src":"51940:14:69"},{"hexValue":"455243343632362d577261707065642056656e757320","kind":"string","nativeSrc":"51956:24:69","nodeType":"YulLiteral","src":"51956:24:69","type":"","value":"ERC4626-Wrapped Venus "}],"functionName":{"name":"mstore","nativeSrc":"51933:6:69","nodeType":"YulIdentifier","src":"51933:6:69"},"nativeSrc":"51933:48:69","nodeType":"YulFunctionCall","src":"51933:48:69"},"nativeSrc":"51933:48:69","nodeType":"YulExpressionStatement","src":"51933:48:69"}]},"name":"store_literal_in_memory_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f","nativeSrc":"51816:172:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"51914:6:69","nodeType":"YulTypedName","src":"51914:6:69","type":""}],"src":"51816:172:69"},{"body":{"nativeSrc":"52158:238:69","nodeType":"YulBlock","src":"52158:238:69","statements":[{"nativeSrc":"52168:92:69","nodeType":"YulAssignment","src":"52168:92:69","value":{"arguments":[{"name":"pos","nativeSrc":"52252:3:69","nodeType":"YulIdentifier","src":"52252:3:69"},{"kind":"number","nativeSrc":"52257:2:69","nodeType":"YulLiteral","src":"52257:2:69","type":"","value":"22"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"52175:76:69","nodeType":"YulIdentifier","src":"52175:76:69"},"nativeSrc":"52175:85:69","nodeType":"YulFunctionCall","src":"52175:85:69"},"variableNames":[{"name":"pos","nativeSrc":"52168:3:69","nodeType":"YulIdentifier","src":"52168:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"52358:3:69","nodeType":"YulIdentifier","src":"52358:3:69"}],"functionName":{"name":"store_literal_in_memory_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f","nativeSrc":"52269:88:69","nodeType":"YulIdentifier","src":"52269:88:69"},"nativeSrc":"52269:93:69","nodeType":"YulFunctionCall","src":"52269:93:69"},"nativeSrc":"52269:93:69","nodeType":"YulExpressionStatement","src":"52269:93:69"},{"nativeSrc":"52371:19:69","nodeType":"YulAssignment","src":"52371:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"52382:3:69","nodeType":"YulIdentifier","src":"52382:3:69"},{"kind":"number","nativeSrc":"52387:2:69","nodeType":"YulLiteral","src":"52387:2:69","type":"","value":"22"}],"functionName":{"name":"add","nativeSrc":"52378:3:69","nodeType":"YulIdentifier","src":"52378:3:69"},"nativeSrc":"52378:12:69","nodeType":"YulFunctionCall","src":"52378:12:69"},"variableNames":[{"name":"end","nativeSrc":"52371:3:69","nodeType":"YulIdentifier","src":"52371:3:69"}]}]},"name":"abi_encode_t_stringliteral_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f_to_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"51994:402:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"52146:3:69","nodeType":"YulTypedName","src":"52146:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"52154:3:69","nodeType":"YulTypedName","src":"52154:3:69","type":""}],"src":"51994:402:69"},{"body":{"nativeSrc":"52512:280:69","nodeType":"YulBlock","src":"52512:280:69","statements":[{"nativeSrc":"52522:53:69","nodeType":"YulVariableDeclaration","src":"52522:53:69","value":{"arguments":[{"name":"value","nativeSrc":"52569:5:69","nodeType":"YulIdentifier","src":"52569:5:69"}],"functionName":{"name":"array_length_t_string_memory_ptr","nativeSrc":"52536:32:69","nodeType":"YulIdentifier","src":"52536:32:69"},"nativeSrc":"52536:39:69","nodeType":"YulFunctionCall","src":"52536:39:69"},"variables":[{"name":"length","nativeSrc":"52526:6:69","nodeType":"YulTypedName","src":"52526:6:69","type":""}]},{"nativeSrc":"52584:96:69","nodeType":"YulAssignment","src":"52584:96:69","value":{"arguments":[{"name":"pos","nativeSrc":"52668:3:69","nodeType":"YulIdentifier","src":"52668:3:69"},{"name":"length","nativeSrc":"52673:6:69","nodeType":"YulIdentifier","src":"52673:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"52591:76:69","nodeType":"YulIdentifier","src":"52591:76:69"},"nativeSrc":"52591:89:69","nodeType":"YulFunctionCall","src":"52591:89:69"},"variableNames":[{"name":"pos","nativeSrc":"52584:3:69","nodeType":"YulIdentifier","src":"52584:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"52728:5:69","nodeType":"YulIdentifier","src":"52728:5:69"},{"kind":"number","nativeSrc":"52735:4:69","nodeType":"YulLiteral","src":"52735:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"52724:3:69","nodeType":"YulIdentifier","src":"52724:3:69"},"nativeSrc":"52724:16:69","nodeType":"YulFunctionCall","src":"52724:16:69"},{"name":"pos","nativeSrc":"52742:3:69","nodeType":"YulIdentifier","src":"52742:3:69"},{"name":"length","nativeSrc":"52747:6:69","nodeType":"YulIdentifier","src":"52747:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"52689:34:69","nodeType":"YulIdentifier","src":"52689:34:69"},"nativeSrc":"52689:65:69","nodeType":"YulFunctionCall","src":"52689:65:69"},"nativeSrc":"52689:65:69","nodeType":"YulExpressionStatement","src":"52689:65:69"},{"nativeSrc":"52763:23:69","nodeType":"YulAssignment","src":"52763:23:69","value":{"arguments":[{"name":"pos","nativeSrc":"52774:3:69","nodeType":"YulIdentifier","src":"52774:3:69"},{"name":"length","nativeSrc":"52779:6:69","nodeType":"YulIdentifier","src":"52779:6:69"}],"functionName":{"name":"add","nativeSrc":"52770:3:69","nodeType":"YulIdentifier","src":"52770:3:69"},"nativeSrc":"52770:16:69","nodeType":"YulFunctionCall","src":"52770:16:69"},"variableNames":[{"name":"end","nativeSrc":"52763:3:69","nodeType":"YulIdentifier","src":"52763:3:69"}]}]},"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"52402:390:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"52493:5:69","nodeType":"YulTypedName","src":"52493:5:69","type":""},{"name":"pos","nativeSrc":"52500:3:69","nodeType":"YulTypedName","src":"52500:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"52508:3:69","nodeType":"YulTypedName","src":"52508:3:69","type":""}],"src":"52402:390:69"},{"body":{"nativeSrc":"53035:304:69","nodeType":"YulBlock","src":"53035:304:69","statements":[{"nativeSrc":"53046:155:69","nodeType":"YulAssignment","src":"53046:155:69","value":{"arguments":[{"name":"pos","nativeSrc":"53197:3:69","nodeType":"YulIdentifier","src":"53197:3:69"}],"functionName":{"name":"abi_encode_t_stringliteral_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f_to_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"53053:142:69","nodeType":"YulIdentifier","src":"53053:142:69"},"nativeSrc":"53053:148:69","nodeType":"YulFunctionCall","src":"53053:148:69"},"variableNames":[{"name":"pos","nativeSrc":"53046:3:69","nodeType":"YulIdentifier","src":"53046:3:69"}]},{"nativeSrc":"53211:102:69","nodeType":"YulAssignment","src":"53211:102:69","value":{"arguments":[{"name":"value0","nativeSrc":"53300:6:69","nodeType":"YulIdentifier","src":"53300:6:69"},{"name":"pos","nativeSrc":"53309:3:69","nodeType":"YulIdentifier","src":"53309:3:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"53218:81:69","nodeType":"YulIdentifier","src":"53218:81:69"},"nativeSrc":"53218:95:69","nodeType":"YulFunctionCall","src":"53218:95:69"},"variableNames":[{"name":"pos","nativeSrc":"53211:3:69","nodeType":"YulIdentifier","src":"53211:3:69"}]},{"nativeSrc":"53323:10:69","nodeType":"YulAssignment","src":"53323:10:69","value":{"name":"pos","nativeSrc":"53330:3:69","nodeType":"YulIdentifier","src":"53330:3:69"},"variableNames":[{"name":"end","nativeSrc":"53323:3:69","nodeType":"YulIdentifier","src":"53323:3:69"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed","nativeSrc":"52798:541:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"53014:3:69","nodeType":"YulTypedName","src":"53014:3:69","type":""},{"name":"value0","nativeSrc":"53020:6:69","nodeType":"YulTypedName","src":"53020:6:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"53031:3:69","nodeType":"YulTypedName","src":"53031:3:69","type":""}],"src":"52798:541:69"},{"body":{"nativeSrc":"53451:49:69","nodeType":"YulBlock","src":"53451:49:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"53473:6:69","nodeType":"YulIdentifier","src":"53473:6:69"},{"kind":"number","nativeSrc":"53481:1:69","nodeType":"YulLiteral","src":"53481:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"53469:3:69","nodeType":"YulIdentifier","src":"53469:3:69"},"nativeSrc":"53469:14:69","nodeType":"YulFunctionCall","src":"53469:14:69"},{"hexValue":"7634363236","kind":"string","nativeSrc":"53485:7:69","nodeType":"YulLiteral","src":"53485:7:69","type":"","value":"v4626"}],"functionName":{"name":"mstore","nativeSrc":"53462:6:69","nodeType":"YulIdentifier","src":"53462:6:69"},"nativeSrc":"53462:31:69","nodeType":"YulFunctionCall","src":"53462:31:69"},"nativeSrc":"53462:31:69","nodeType":"YulExpressionStatement","src":"53462:31:69"}]},"name":"store_literal_in_memory_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526","nativeSrc":"53345:155:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"53443:6:69","nodeType":"YulTypedName","src":"53443:6:69","type":""}],"src":"53345:155:69"},{"body":{"nativeSrc":"53670:236:69","nodeType":"YulBlock","src":"53670:236:69","statements":[{"nativeSrc":"53680:91:69","nodeType":"YulAssignment","src":"53680:91:69","value":{"arguments":[{"name":"pos","nativeSrc":"53764:3:69","nodeType":"YulIdentifier","src":"53764:3:69"},{"kind":"number","nativeSrc":"53769:1:69","nodeType":"YulLiteral","src":"53769:1:69","type":"","value":"5"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"53687:76:69","nodeType":"YulIdentifier","src":"53687:76:69"},"nativeSrc":"53687:84:69","nodeType":"YulFunctionCall","src":"53687:84:69"},"variableNames":[{"name":"pos","nativeSrc":"53680:3:69","nodeType":"YulIdentifier","src":"53680:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"53869:3:69","nodeType":"YulIdentifier","src":"53869:3:69"}],"functionName":{"name":"store_literal_in_memory_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526","nativeSrc":"53780:88:69","nodeType":"YulIdentifier","src":"53780:88:69"},"nativeSrc":"53780:93:69","nodeType":"YulFunctionCall","src":"53780:93:69"},"nativeSrc":"53780:93:69","nodeType":"YulExpressionStatement","src":"53780:93:69"},{"nativeSrc":"53882:18:69","nodeType":"YulAssignment","src":"53882:18:69","value":{"arguments":[{"name":"pos","nativeSrc":"53893:3:69","nodeType":"YulIdentifier","src":"53893:3:69"},{"kind":"number","nativeSrc":"53898:1:69","nodeType":"YulLiteral","src":"53898:1:69","type":"","value":"5"}],"functionName":{"name":"add","nativeSrc":"53889:3:69","nodeType":"YulIdentifier","src":"53889:3:69"},"nativeSrc":"53889:11:69","nodeType":"YulFunctionCall","src":"53889:11:69"},"variableNames":[{"name":"end","nativeSrc":"53882:3:69","nodeType":"YulIdentifier","src":"53882:3:69"}]}]},"name":"abi_encode_t_stringliteral_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526_to_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"53506:400:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"53658:3:69","nodeType":"YulTypedName","src":"53658:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"53666:3:69","nodeType":"YulTypedName","src":"53666:3:69","type":""}],"src":"53506:400:69"},{"body":{"nativeSrc":"54149:304:69","nodeType":"YulBlock","src":"54149:304:69","statements":[{"nativeSrc":"54160:155:69","nodeType":"YulAssignment","src":"54160:155:69","value":{"arguments":[{"name":"pos","nativeSrc":"54311:3:69","nodeType":"YulIdentifier","src":"54311:3:69"}],"functionName":{"name":"abi_encode_t_stringliteral_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526_to_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"54167:142:69","nodeType":"YulIdentifier","src":"54167:142:69"},"nativeSrc":"54167:148:69","nodeType":"YulFunctionCall","src":"54167:148:69"},"variableNames":[{"name":"pos","nativeSrc":"54160:3:69","nodeType":"YulIdentifier","src":"54160:3:69"}]},{"nativeSrc":"54325:102:69","nodeType":"YulAssignment","src":"54325:102:69","value":{"arguments":[{"name":"value0","nativeSrc":"54414:6:69","nodeType":"YulIdentifier","src":"54414:6:69"},{"name":"pos","nativeSrc":"54423:3:69","nodeType":"YulIdentifier","src":"54423:3:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"54332:81:69","nodeType":"YulIdentifier","src":"54332:81:69"},"nativeSrc":"54332:95:69","nodeType":"YulFunctionCall","src":"54332:95:69"},"variableNames":[{"name":"pos","nativeSrc":"54325:3:69","nodeType":"YulIdentifier","src":"54325:3:69"}]},{"nativeSrc":"54437:10:69","nodeType":"YulAssignment","src":"54437:10:69","value":{"name":"pos","nativeSrc":"54444:3:69","nodeType":"YulIdentifier","src":"54444:3:69"},"variableNames":[{"name":"end","nativeSrc":"54437:3:69","nodeType":"YulIdentifier","src":"54437:3:69"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed","nativeSrc":"53912:541:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"54128:3:69","nodeType":"YulTypedName","src":"54128:3:69","type":""},{"name":"value0","nativeSrc":"54134:6:69","nodeType":"YulTypedName","src":"54134:6:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"54145:3:69","nodeType":"YulTypedName","src":"54145:3:69","type":""}],"src":"53912:541:69"},{"body":{"nativeSrc":"54565:123:69","nodeType":"YulBlock","src":"54565:123:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"54587:6:69","nodeType":"YulIdentifier","src":"54587:6:69"},{"kind":"number","nativeSrc":"54595:1:69","nodeType":"YulLiteral","src":"54595:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"54583:3:69","nodeType":"YulIdentifier","src":"54583:3:69"},"nativeSrc":"54583:14:69","nodeType":"YulFunctionCall","src":"54583:14:69"},{"hexValue":"5361666545524332303a204552433230206f7065726174696f6e20646964206e","kind":"string","nativeSrc":"54599:34:69","nodeType":"YulLiteral","src":"54599:34:69","type":"","value":"SafeERC20: ERC20 operation did n"}],"functionName":{"name":"mstore","nativeSrc":"54576:6:69","nodeType":"YulIdentifier","src":"54576:6:69"},"nativeSrc":"54576:58:69","nodeType":"YulFunctionCall","src":"54576:58:69"},"nativeSrc":"54576:58:69","nodeType":"YulExpressionStatement","src":"54576:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"54655:6:69","nodeType":"YulIdentifier","src":"54655:6:69"},{"kind":"number","nativeSrc":"54663:2:69","nodeType":"YulLiteral","src":"54663:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"54651:3:69","nodeType":"YulIdentifier","src":"54651:3:69"},"nativeSrc":"54651:15:69","nodeType":"YulFunctionCall","src":"54651:15:69"},{"hexValue":"6f742073756363656564","kind":"string","nativeSrc":"54668:12:69","nodeType":"YulLiteral","src":"54668:12:69","type":"","value":"ot succeed"}],"functionName":{"name":"mstore","nativeSrc":"54644:6:69","nodeType":"YulIdentifier","src":"54644:6:69"},"nativeSrc":"54644:37:69","nodeType":"YulFunctionCall","src":"54644:37:69"},"nativeSrc":"54644:37:69","nodeType":"YulExpressionStatement","src":"54644:37:69"}]},"name":"store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd","nativeSrc":"54459:229:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"54557:6:69","nodeType":"YulTypedName","src":"54557:6:69","type":""}],"src":"54459:229:69"},{"body":{"nativeSrc":"54840:220:69","nodeType":"YulBlock","src":"54840:220:69","statements":[{"nativeSrc":"54850:74:69","nodeType":"YulAssignment","src":"54850:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"54916:3:69","nodeType":"YulIdentifier","src":"54916:3:69"},{"kind":"number","nativeSrc":"54921:2:69","nodeType":"YulLiteral","src":"54921:2:69","type":"","value":"42"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"54857:58:69","nodeType":"YulIdentifier","src":"54857:58:69"},"nativeSrc":"54857:67:69","nodeType":"YulFunctionCall","src":"54857:67:69"},"variableNames":[{"name":"pos","nativeSrc":"54850:3:69","nodeType":"YulIdentifier","src":"54850:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"55022:3:69","nodeType":"YulIdentifier","src":"55022:3:69"}],"functionName":{"name":"store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd","nativeSrc":"54933:88:69","nodeType":"YulIdentifier","src":"54933:88:69"},"nativeSrc":"54933:93:69","nodeType":"YulFunctionCall","src":"54933:93:69"},"nativeSrc":"54933:93:69","nodeType":"YulExpressionStatement","src":"54933:93:69"},{"nativeSrc":"55035:19:69","nodeType":"YulAssignment","src":"55035:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"55046:3:69","nodeType":"YulIdentifier","src":"55046:3:69"},{"kind":"number","nativeSrc":"55051:2:69","nodeType":"YulLiteral","src":"55051:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"55042:3:69","nodeType":"YulIdentifier","src":"55042:3:69"},"nativeSrc":"55042:12:69","nodeType":"YulFunctionCall","src":"55042:12:69"},"variableNames":[{"name":"end","nativeSrc":"55035:3:69","nodeType":"YulIdentifier","src":"55035:3:69"}]}]},"name":"abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack","nativeSrc":"54694:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"54828:3:69","nodeType":"YulTypedName","src":"54828:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"54836:3:69","nodeType":"YulTypedName","src":"54836:3:69","type":""}],"src":"54694:366:69"},{"body":{"nativeSrc":"55237:248:69","nodeType":"YulBlock","src":"55237:248:69","statements":[{"nativeSrc":"55247:26:69","nodeType":"YulAssignment","src":"55247:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"55259:9:69","nodeType":"YulIdentifier","src":"55259:9:69"},{"kind":"number","nativeSrc":"55270:2:69","nodeType":"YulLiteral","src":"55270:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"55255:3:69","nodeType":"YulIdentifier","src":"55255:3:69"},"nativeSrc":"55255:18:69","nodeType":"YulFunctionCall","src":"55255:18:69"},"variableNames":[{"name":"tail","nativeSrc":"55247:4:69","nodeType":"YulIdentifier","src":"55247:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"55294:9:69","nodeType":"YulIdentifier","src":"55294:9:69"},{"kind":"number","nativeSrc":"55305:1:69","nodeType":"YulLiteral","src":"55305:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"55290:3:69","nodeType":"YulIdentifier","src":"55290:3:69"},"nativeSrc":"55290:17:69","nodeType":"YulFunctionCall","src":"55290:17:69"},{"arguments":[{"name":"tail","nativeSrc":"55313:4:69","nodeType":"YulIdentifier","src":"55313:4:69"},{"name":"headStart","nativeSrc":"55319:9:69","nodeType":"YulIdentifier","src":"55319:9:69"}],"functionName":{"name":"sub","nativeSrc":"55309:3:69","nodeType":"YulIdentifier","src":"55309:3:69"},"nativeSrc":"55309:20:69","nodeType":"YulFunctionCall","src":"55309:20:69"}],"functionName":{"name":"mstore","nativeSrc":"55283:6:69","nodeType":"YulIdentifier","src":"55283:6:69"},"nativeSrc":"55283:47:69","nodeType":"YulFunctionCall","src":"55283:47:69"},"nativeSrc":"55283:47:69","nodeType":"YulExpressionStatement","src":"55283:47:69"},{"nativeSrc":"55339:139:69","nodeType":"YulAssignment","src":"55339:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"55473:4:69","nodeType":"YulIdentifier","src":"55473:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack","nativeSrc":"55347:124:69","nodeType":"YulIdentifier","src":"55347:124:69"},"nativeSrc":"55347:131:69","nodeType":"YulFunctionCall","src":"55347:131:69"},"variableNames":[{"name":"tail","nativeSrc":"55339:4:69","nodeType":"YulIdentifier","src":"55339:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"55066:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"55217:9:69","nodeType":"YulTypedName","src":"55217:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"55232:4:69","nodeType":"YulTypedName","src":"55232:4:69","type":""}],"src":"55066:419:69"},{"body":{"nativeSrc":"55645:288:69","nodeType":"YulBlock","src":"55645:288:69","statements":[{"nativeSrc":"55655:26:69","nodeType":"YulAssignment","src":"55655:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"55667:9:69","nodeType":"YulIdentifier","src":"55667:9:69"},{"kind":"number","nativeSrc":"55678:2:69","nodeType":"YulLiteral","src":"55678:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"55663:3:69","nodeType":"YulIdentifier","src":"55663:3:69"},"nativeSrc":"55663:18:69","nodeType":"YulFunctionCall","src":"55663:18:69"},"variableNames":[{"name":"tail","nativeSrc":"55655:4:69","nodeType":"YulIdentifier","src":"55655:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"55735:6:69","nodeType":"YulIdentifier","src":"55735:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"55748:9:69","nodeType":"YulIdentifier","src":"55748:9:69"},{"kind":"number","nativeSrc":"55759:1:69","nodeType":"YulLiteral","src":"55759:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"55744:3:69","nodeType":"YulIdentifier","src":"55744:3:69"},"nativeSrc":"55744:17:69","nodeType":"YulFunctionCall","src":"55744:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"55691:43:69","nodeType":"YulIdentifier","src":"55691:43:69"},"nativeSrc":"55691:71:69","nodeType":"YulFunctionCall","src":"55691:71:69"},"nativeSrc":"55691:71:69","nodeType":"YulExpressionStatement","src":"55691:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"55816:6:69","nodeType":"YulIdentifier","src":"55816:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"55829:9:69","nodeType":"YulIdentifier","src":"55829:9:69"},{"kind":"number","nativeSrc":"55840:2:69","nodeType":"YulLiteral","src":"55840:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"55825:3:69","nodeType":"YulIdentifier","src":"55825:3:69"},"nativeSrc":"55825:18:69","nodeType":"YulFunctionCall","src":"55825:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"55772:43:69","nodeType":"YulIdentifier","src":"55772:43:69"},"nativeSrc":"55772:72:69","nodeType":"YulFunctionCall","src":"55772:72:69"},"nativeSrc":"55772:72:69","nodeType":"YulExpressionStatement","src":"55772:72:69"},{"expression":{"arguments":[{"name":"value2","nativeSrc":"55898:6:69","nodeType":"YulIdentifier","src":"55898:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"55911:9:69","nodeType":"YulIdentifier","src":"55911:9:69"},{"kind":"number","nativeSrc":"55922:2:69","nodeType":"YulLiteral","src":"55922:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"55907:3:69","nodeType":"YulIdentifier","src":"55907:3:69"},"nativeSrc":"55907:18:69","nodeType":"YulFunctionCall","src":"55907:18:69"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nativeSrc":"55854:43:69","nodeType":"YulIdentifier","src":"55854:43:69"},"nativeSrc":"55854:72:69","nodeType":"YulFunctionCall","src":"55854:72:69"},"nativeSrc":"55854:72:69","nodeType":"YulExpressionStatement","src":"55854:72:69"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nativeSrc":"55491:442:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"55601:9:69","nodeType":"YulTypedName","src":"55601:9:69","type":""},{"name":"value2","nativeSrc":"55613:6:69","nodeType":"YulTypedName","src":"55613:6:69","type":""},{"name":"value1","nativeSrc":"55621:6:69","nodeType":"YulTypedName","src":"55621:6:69","type":""},{"name":"value0","nativeSrc":"55629:6:69","nodeType":"YulTypedName","src":"55629:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"55640:4:69","nodeType":"YulTypedName","src":"55640:4:69","type":""}],"src":"55491:442:69"},{"body":{"nativeSrc":"55993:87:69","nodeType":"YulBlock","src":"55993:87:69","statements":[{"nativeSrc":"56003:11:69","nodeType":"YulAssignment","src":"56003:11:69","value":{"name":"ptr","nativeSrc":"56011:3:69","nodeType":"YulIdentifier","src":"56011:3:69"},"variableNames":[{"name":"data","nativeSrc":"56003:4:69","nodeType":"YulIdentifier","src":"56003:4:69"}]},{"expression":{"arguments":[{"kind":"number","nativeSrc":"56031:1:69","nodeType":"YulLiteral","src":"56031:1:69","type":"","value":"0"},{"name":"ptr","nativeSrc":"56034:3:69","nodeType":"YulIdentifier","src":"56034:3:69"}],"functionName":{"name":"mstore","nativeSrc":"56024:6:69","nodeType":"YulIdentifier","src":"56024:6:69"},"nativeSrc":"56024:14:69","nodeType":"YulFunctionCall","src":"56024:14:69"},"nativeSrc":"56024:14:69","nodeType":"YulExpressionStatement","src":"56024:14:69"},{"nativeSrc":"56047:26:69","nodeType":"YulAssignment","src":"56047:26:69","value":{"arguments":[{"kind":"number","nativeSrc":"56065:1:69","nodeType":"YulLiteral","src":"56065:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"56068:4:69","nodeType":"YulLiteral","src":"56068:4:69","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nativeSrc":"56055:9:69","nodeType":"YulIdentifier","src":"56055:9:69"},"nativeSrc":"56055:18:69","nodeType":"YulFunctionCall","src":"56055:18:69"},"variableNames":[{"name":"data","nativeSrc":"56047:4:69","nodeType":"YulIdentifier","src":"56047:4:69"}]}]},"name":"array_dataslot_t_string_storage","nativeSrc":"55939:141:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nativeSrc":"55980:3:69","nodeType":"YulTypedName","src":"55980:3:69","type":""}],"returnVariables":[{"name":"data","nativeSrc":"55988:4:69","nodeType":"YulTypedName","src":"55988:4:69","type":""}],"src":"55939:141:69"},{"body":{"nativeSrc":"56130:49:69","nodeType":"YulBlock","src":"56130:49:69","statements":[{"nativeSrc":"56140:33:69","nodeType":"YulAssignment","src":"56140:33:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"56158:5:69","nodeType":"YulIdentifier","src":"56158:5:69"},{"kind":"number","nativeSrc":"56165:2:69","nodeType":"YulLiteral","src":"56165:2:69","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"56154:3:69","nodeType":"YulIdentifier","src":"56154:3:69"},"nativeSrc":"56154:14:69","nodeType":"YulFunctionCall","src":"56154:14:69"},{"kind":"number","nativeSrc":"56170:2:69","nodeType":"YulLiteral","src":"56170:2:69","type":"","value":"32"}],"functionName":{"name":"div","nativeSrc":"56150:3:69","nodeType":"YulIdentifier","src":"56150:3:69"},"nativeSrc":"56150:23:69","nodeType":"YulFunctionCall","src":"56150:23:69"},"variableNames":[{"name":"result","nativeSrc":"56140:6:69","nodeType":"YulIdentifier","src":"56140:6:69"}]}]},"name":"divide_by_32_ceil","nativeSrc":"56086:93:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"56113:5:69","nodeType":"YulTypedName","src":"56113:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"56123:6:69","nodeType":"YulTypedName","src":"56123:6:69","type":""}],"src":"56086:93:69"},{"body":{"nativeSrc":"56238:54:69","nodeType":"YulBlock","src":"56238:54:69","statements":[{"nativeSrc":"56248:37:69","nodeType":"YulAssignment","src":"56248:37:69","value":{"arguments":[{"name":"bits","nativeSrc":"56273:4:69","nodeType":"YulIdentifier","src":"56273:4:69"},{"name":"value","nativeSrc":"56279:5:69","nodeType":"YulIdentifier","src":"56279:5:69"}],"functionName":{"name":"shl","nativeSrc":"56269:3:69","nodeType":"YulIdentifier","src":"56269:3:69"},"nativeSrc":"56269:16:69","nodeType":"YulFunctionCall","src":"56269:16:69"},"variableNames":[{"name":"newValue","nativeSrc":"56248:8:69","nodeType":"YulIdentifier","src":"56248:8:69"}]}]},"name":"shift_left_dynamic","nativeSrc":"56185:107:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"bits","nativeSrc":"56213:4:69","nodeType":"YulTypedName","src":"56213:4:69","type":""},{"name":"value","nativeSrc":"56219:5:69","nodeType":"YulTypedName","src":"56219:5:69","type":""}],"returnVariables":[{"name":"newValue","nativeSrc":"56229:8:69","nodeType":"YulTypedName","src":"56229:8:69","type":""}],"src":"56185:107:69"},{"body":{"nativeSrc":"56374:317:69","nodeType":"YulBlock","src":"56374:317:69","statements":[{"nativeSrc":"56384:35:69","nodeType":"YulVariableDeclaration","src":"56384:35:69","value":{"arguments":[{"name":"shiftBytes","nativeSrc":"56405:10:69","nodeType":"YulIdentifier","src":"56405:10:69"},{"kind":"number","nativeSrc":"56417:1:69","nodeType":"YulLiteral","src":"56417:1:69","type":"","value":"8"}],"functionName":{"name":"mul","nativeSrc":"56401:3:69","nodeType":"YulIdentifier","src":"56401:3:69"},"nativeSrc":"56401:18:69","nodeType":"YulFunctionCall","src":"56401:18:69"},"variables":[{"name":"shiftBits","nativeSrc":"56388:9:69","nodeType":"YulTypedName","src":"56388:9:69","type":""}]},{"nativeSrc":"56428:109:69","nodeType":"YulVariableDeclaration","src":"56428:109:69","value":{"arguments":[{"name":"shiftBits","nativeSrc":"56459:9:69","nodeType":"YulIdentifier","src":"56459:9:69"},{"kind":"number","nativeSrc":"56470:66:69","nodeType":"YulLiteral","src":"56470:66:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"shift_left_dynamic","nativeSrc":"56440:18:69","nodeType":"YulIdentifier","src":"56440:18:69"},"nativeSrc":"56440:97:69","nodeType":"YulFunctionCall","src":"56440:97:69"},"variables":[{"name":"mask","nativeSrc":"56432:4:69","nodeType":"YulTypedName","src":"56432:4:69","type":""}]},{"nativeSrc":"56546:51:69","nodeType":"YulAssignment","src":"56546:51:69","value":{"arguments":[{"name":"shiftBits","nativeSrc":"56577:9:69","nodeType":"YulIdentifier","src":"56577:9:69"},{"name":"toInsert","nativeSrc":"56588:8:69","nodeType":"YulIdentifier","src":"56588:8:69"}],"functionName":{"name":"shift_left_dynamic","nativeSrc":"56558:18:69","nodeType":"YulIdentifier","src":"56558:18:69"},"nativeSrc":"56558:39:69","nodeType":"YulFunctionCall","src":"56558:39:69"},"variableNames":[{"name":"toInsert","nativeSrc":"56546:8:69","nodeType":"YulIdentifier","src":"56546:8:69"}]},{"nativeSrc":"56606:30:69","nodeType":"YulAssignment","src":"56606:30:69","value":{"arguments":[{"name":"value","nativeSrc":"56619:5:69","nodeType":"YulIdentifier","src":"56619:5:69"},{"arguments":[{"name":"mask","nativeSrc":"56630:4:69","nodeType":"YulIdentifier","src":"56630:4:69"}],"functionName":{"name":"not","nativeSrc":"56626:3:69","nodeType":"YulIdentifier","src":"56626:3:69"},"nativeSrc":"56626:9:69","nodeType":"YulFunctionCall","src":"56626:9:69"}],"functionName":{"name":"and","nativeSrc":"56615:3:69","nodeType":"YulIdentifier","src":"56615:3:69"},"nativeSrc":"56615:21:69","nodeType":"YulFunctionCall","src":"56615:21:69"},"variableNames":[{"name":"value","nativeSrc":"56606:5:69","nodeType":"YulIdentifier","src":"56606:5:69"}]},{"nativeSrc":"56645:40:69","nodeType":"YulAssignment","src":"56645:40:69","value":{"arguments":[{"name":"value","nativeSrc":"56658:5:69","nodeType":"YulIdentifier","src":"56658:5:69"},{"arguments":[{"name":"toInsert","nativeSrc":"56669:8:69","nodeType":"YulIdentifier","src":"56669:8:69"},{"name":"mask","nativeSrc":"56679:4:69","nodeType":"YulIdentifier","src":"56679:4:69"}],"functionName":{"name":"and","nativeSrc":"56665:3:69","nodeType":"YulIdentifier","src":"56665:3:69"},"nativeSrc":"56665:19:69","nodeType":"YulFunctionCall","src":"56665:19:69"}],"functionName":{"name":"or","nativeSrc":"56655:2:69","nodeType":"YulIdentifier","src":"56655:2:69"},"nativeSrc":"56655:30:69","nodeType":"YulFunctionCall","src":"56655:30:69"},"variableNames":[{"name":"result","nativeSrc":"56645:6:69","nodeType":"YulIdentifier","src":"56645:6:69"}]}]},"name":"update_byte_slice_dynamic32","nativeSrc":"56298:393:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"56335:5:69","nodeType":"YulTypedName","src":"56335:5:69","type":""},{"name":"shiftBytes","nativeSrc":"56342:10:69","nodeType":"YulTypedName","src":"56342:10:69","type":""},{"name":"toInsert","nativeSrc":"56354:8:69","nodeType":"YulTypedName","src":"56354:8:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"56367:6:69","nodeType":"YulTypedName","src":"56367:6:69","type":""}],"src":"56298:393:69"},{"body":{"nativeSrc":"56757:82:69","nodeType":"YulBlock","src":"56757:82:69","statements":[{"nativeSrc":"56767:66:69","nodeType":"YulAssignment","src":"56767:66:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"56825:5:69","nodeType":"YulIdentifier","src":"56825:5:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"56807:17:69","nodeType":"YulIdentifier","src":"56807:17:69"},"nativeSrc":"56807:24:69","nodeType":"YulFunctionCall","src":"56807:24:69"}],"functionName":{"name":"identity","nativeSrc":"56798:8:69","nodeType":"YulIdentifier","src":"56798:8:69"},"nativeSrc":"56798:34:69","nodeType":"YulFunctionCall","src":"56798:34:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"56780:17:69","nodeType":"YulIdentifier","src":"56780:17:69"},"nativeSrc":"56780:53:69","nodeType":"YulFunctionCall","src":"56780:53:69"},"variableNames":[{"name":"converted","nativeSrc":"56767:9:69","nodeType":"YulIdentifier","src":"56767:9:69"}]}]},"name":"convert_t_uint256_to_t_uint256","nativeSrc":"56697:142:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"56737:5:69","nodeType":"YulTypedName","src":"56737:5:69","type":""}],"returnVariables":[{"name":"converted","nativeSrc":"56747:9:69","nodeType":"YulTypedName","src":"56747:9:69","type":""}],"src":"56697:142:69"},{"body":{"nativeSrc":"56892:28:69","nodeType":"YulBlock","src":"56892:28:69","statements":[{"nativeSrc":"56902:12:69","nodeType":"YulAssignment","src":"56902:12:69","value":{"name":"value","nativeSrc":"56909:5:69","nodeType":"YulIdentifier","src":"56909:5:69"},"variableNames":[{"name":"ret","nativeSrc":"56902:3:69","nodeType":"YulIdentifier","src":"56902:3:69"}]}]},"name":"prepare_store_t_uint256","nativeSrc":"56845:75:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"56878:5:69","nodeType":"YulTypedName","src":"56878:5:69","type":""}],"returnVariables":[{"name":"ret","nativeSrc":"56888:3:69","nodeType":"YulTypedName","src":"56888:3:69","type":""}],"src":"56845:75:69"},{"body":{"nativeSrc":"57002:193:69","nodeType":"YulBlock","src":"57002:193:69","statements":[{"nativeSrc":"57012:63:69","nodeType":"YulVariableDeclaration","src":"57012:63:69","value":{"arguments":[{"name":"value_0","nativeSrc":"57067:7:69","nodeType":"YulIdentifier","src":"57067:7:69"}],"functionName":{"name":"convert_t_uint256_to_t_uint256","nativeSrc":"57036:30:69","nodeType":"YulIdentifier","src":"57036:30:69"},"nativeSrc":"57036:39:69","nodeType":"YulFunctionCall","src":"57036:39:69"},"variables":[{"name":"convertedValue_0","nativeSrc":"57016:16:69","nodeType":"YulTypedName","src":"57016:16:69","type":""}]},{"expression":{"arguments":[{"name":"slot","nativeSrc":"57091:4:69","nodeType":"YulIdentifier","src":"57091:4:69"},{"arguments":[{"arguments":[{"name":"slot","nativeSrc":"57131:4:69","nodeType":"YulIdentifier","src":"57131:4:69"}],"functionName":{"name":"sload","nativeSrc":"57125:5:69","nodeType":"YulIdentifier","src":"57125:5:69"},"nativeSrc":"57125:11:69","nodeType":"YulFunctionCall","src":"57125:11:69"},{"name":"offset","nativeSrc":"57138:6:69","nodeType":"YulIdentifier","src":"57138:6:69"},{"arguments":[{"name":"convertedValue_0","nativeSrc":"57170:16:69","nodeType":"YulIdentifier","src":"57170:16:69"}],"functionName":{"name":"prepare_store_t_uint256","nativeSrc":"57146:23:69","nodeType":"YulIdentifier","src":"57146:23:69"},"nativeSrc":"57146:41:69","nodeType":"YulFunctionCall","src":"57146:41:69"}],"functionName":{"name":"update_byte_slice_dynamic32","nativeSrc":"57097:27:69","nodeType":"YulIdentifier","src":"57097:27:69"},"nativeSrc":"57097:91:69","nodeType":"YulFunctionCall","src":"57097:91:69"}],"functionName":{"name":"sstore","nativeSrc":"57084:6:69","nodeType":"YulIdentifier","src":"57084:6:69"},"nativeSrc":"57084:105:69","nodeType":"YulFunctionCall","src":"57084:105:69"},"nativeSrc":"57084:105:69","nodeType":"YulExpressionStatement","src":"57084:105:69"}]},"name":"update_storage_value_t_uint256_to_t_uint256","nativeSrc":"56926:269:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nativeSrc":"56979:4:69","nodeType":"YulTypedName","src":"56979:4:69","type":""},{"name":"offset","nativeSrc":"56985:6:69","nodeType":"YulTypedName","src":"56985:6:69","type":""},{"name":"value_0","nativeSrc":"56993:7:69","nodeType":"YulTypedName","src":"56993:7:69","type":""}],"src":"56926:269:69"},{"body":{"nativeSrc":"57250:24:69","nodeType":"YulBlock","src":"57250:24:69","statements":[{"nativeSrc":"57260:8:69","nodeType":"YulAssignment","src":"57260:8:69","value":{"kind":"number","nativeSrc":"57267:1:69","nodeType":"YulLiteral","src":"57267:1:69","type":"","value":"0"},"variableNames":[{"name":"ret","nativeSrc":"57260:3:69","nodeType":"YulIdentifier","src":"57260:3:69"}]}]},"name":"zero_value_for_split_t_uint256","nativeSrc":"57201:73:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"ret","nativeSrc":"57246:3:69","nodeType":"YulTypedName","src":"57246:3:69","type":""}],"src":"57201:73:69"},{"body":{"nativeSrc":"57333:136:69","nodeType":"YulBlock","src":"57333:136:69","statements":[{"nativeSrc":"57343:46:69","nodeType":"YulVariableDeclaration","src":"57343:46:69","value":{"arguments":[],"functionName":{"name":"zero_value_for_split_t_uint256","nativeSrc":"57357:30:69","nodeType":"YulIdentifier","src":"57357:30:69"},"nativeSrc":"57357:32:69","nodeType":"YulFunctionCall","src":"57357:32:69"},"variables":[{"name":"zero_0","nativeSrc":"57347:6:69","nodeType":"YulTypedName","src":"57347:6:69","type":""}]},{"expression":{"arguments":[{"name":"slot","nativeSrc":"57442:4:69","nodeType":"YulIdentifier","src":"57442:4:69"},{"name":"offset","nativeSrc":"57448:6:69","nodeType":"YulIdentifier","src":"57448:6:69"},{"name":"zero_0","nativeSrc":"57456:6:69","nodeType":"YulIdentifier","src":"57456:6:69"}],"functionName":{"name":"update_storage_value_t_uint256_to_t_uint256","nativeSrc":"57398:43:69","nodeType":"YulIdentifier","src":"57398:43:69"},"nativeSrc":"57398:65:69","nodeType":"YulFunctionCall","src":"57398:65:69"},"nativeSrc":"57398:65:69","nodeType":"YulExpressionStatement","src":"57398:65:69"}]},"name":"storage_set_to_zero_t_uint256","nativeSrc":"57280:189:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nativeSrc":"57319:4:69","nodeType":"YulTypedName","src":"57319:4:69","type":""},{"name":"offset","nativeSrc":"57325:6:69","nodeType":"YulTypedName","src":"57325:6:69","type":""}],"src":"57280:189:69"},{"body":{"nativeSrc":"57525:136:69","nodeType":"YulBlock","src":"57525:136:69","statements":[{"body":{"nativeSrc":"57592:63:69","nodeType":"YulBlock","src":"57592:63:69","statements":[{"expression":{"arguments":[{"name":"start","nativeSrc":"57636:5:69","nodeType":"YulIdentifier","src":"57636:5:69"},{"kind":"number","nativeSrc":"57643:1:69","nodeType":"YulLiteral","src":"57643:1:69","type":"","value":"0"}],"functionName":{"name":"storage_set_to_zero_t_uint256","nativeSrc":"57606:29:69","nodeType":"YulIdentifier","src":"57606:29:69"},"nativeSrc":"57606:39:69","nodeType":"YulFunctionCall","src":"57606:39:69"},"nativeSrc":"57606:39:69","nodeType":"YulExpressionStatement","src":"57606:39:69"}]},"condition":{"arguments":[{"name":"start","nativeSrc":"57545:5:69","nodeType":"YulIdentifier","src":"57545:5:69"},{"name":"end","nativeSrc":"57552:3:69","nodeType":"YulIdentifier","src":"57552:3:69"}],"functionName":{"name":"lt","nativeSrc":"57542:2:69","nodeType":"YulIdentifier","src":"57542:2:69"},"nativeSrc":"57542:14:69","nodeType":"YulFunctionCall","src":"57542:14:69"},"nativeSrc":"57535:120:69","nodeType":"YulForLoop","post":{"nativeSrc":"57557:26:69","nodeType":"YulBlock","src":"57557:26:69","statements":[{"nativeSrc":"57559:22:69","nodeType":"YulAssignment","src":"57559:22:69","value":{"arguments":[{"name":"start","nativeSrc":"57572:5:69","nodeType":"YulIdentifier","src":"57572:5:69"},{"kind":"number","nativeSrc":"57579:1:69","nodeType":"YulLiteral","src":"57579:1:69","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"57568:3:69","nodeType":"YulIdentifier","src":"57568:3:69"},"nativeSrc":"57568:13:69","nodeType":"YulFunctionCall","src":"57568:13:69"},"variableNames":[{"name":"start","nativeSrc":"57559:5:69","nodeType":"YulIdentifier","src":"57559:5:69"}]}]},"pre":{"nativeSrc":"57539:2:69","nodeType":"YulBlock","src":"57539:2:69","statements":[]},"src":"57535:120:69"}]},"name":"clear_storage_range_t_bytes1","nativeSrc":"57475:186:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nativeSrc":"57513:5:69","nodeType":"YulTypedName","src":"57513:5:69","type":""},{"name":"end","nativeSrc":"57520:3:69","nodeType":"YulTypedName","src":"57520:3:69","type":""}],"src":"57475:186:69"},{"body":{"nativeSrc":"57746:464:69","nodeType":"YulBlock","src":"57746:464:69","statements":[{"body":{"nativeSrc":"57772:431:69","nodeType":"YulBlock","src":"57772:431:69","statements":[{"nativeSrc":"57786:54:69","nodeType":"YulVariableDeclaration","src":"57786:54:69","value":{"arguments":[{"name":"array","nativeSrc":"57834:5:69","nodeType":"YulIdentifier","src":"57834:5:69"}],"functionName":{"name":"array_dataslot_t_string_storage","nativeSrc":"57802:31:69","nodeType":"YulIdentifier","src":"57802:31:69"},"nativeSrc":"57802:38:69","nodeType":"YulFunctionCall","src":"57802:38:69"},"variables":[{"name":"dataArea","nativeSrc":"57790:8:69","nodeType":"YulTypedName","src":"57790:8:69","type":""}]},{"nativeSrc":"57853:63:69","nodeType":"YulVariableDeclaration","src":"57853:63:69","value":{"arguments":[{"name":"dataArea","nativeSrc":"57876:8:69","nodeType":"YulIdentifier","src":"57876:8:69"},{"arguments":[{"name":"startIndex","nativeSrc":"57904:10:69","nodeType":"YulIdentifier","src":"57904:10:69"}],"functionName":{"name":"divide_by_32_ceil","nativeSrc":"57886:17:69","nodeType":"YulIdentifier","src":"57886:17:69"},"nativeSrc":"57886:29:69","nodeType":"YulFunctionCall","src":"57886:29:69"}],"functionName":{"name":"add","nativeSrc":"57872:3:69","nodeType":"YulIdentifier","src":"57872:3:69"},"nativeSrc":"57872:44:69","nodeType":"YulFunctionCall","src":"57872:44:69"},"variables":[{"name":"deleteStart","nativeSrc":"57857:11:69","nodeType":"YulTypedName","src":"57857:11:69","type":""}]},{"body":{"nativeSrc":"58073:27:69","nodeType":"YulBlock","src":"58073:27:69","statements":[{"nativeSrc":"58075:23:69","nodeType":"YulAssignment","src":"58075:23:69","value":{"name":"dataArea","nativeSrc":"58090:8:69","nodeType":"YulIdentifier","src":"58090:8:69"},"variableNames":[{"name":"deleteStart","nativeSrc":"58075:11:69","nodeType":"YulIdentifier","src":"58075:11:69"}]}]},"condition":{"arguments":[{"name":"startIndex","nativeSrc":"58057:10:69","nodeType":"YulIdentifier","src":"58057:10:69"},{"kind":"number","nativeSrc":"58069:2:69","nodeType":"YulLiteral","src":"58069:2:69","type":"","value":"32"}],"functionName":{"name":"lt","nativeSrc":"58054:2:69","nodeType":"YulIdentifier","src":"58054:2:69"},"nativeSrc":"58054:18:69","nodeType":"YulFunctionCall","src":"58054:18:69"},"nativeSrc":"58051:49:69","nodeType":"YulIf","src":"58051:49:69"},{"expression":{"arguments":[{"name":"deleteStart","nativeSrc":"58142:11:69","nodeType":"YulIdentifier","src":"58142:11:69"},{"arguments":[{"name":"dataArea","nativeSrc":"58159:8:69","nodeType":"YulIdentifier","src":"58159:8:69"},{"arguments":[{"name":"len","nativeSrc":"58187:3:69","nodeType":"YulIdentifier","src":"58187:3:69"}],"functionName":{"name":"divide_by_32_ceil","nativeSrc":"58169:17:69","nodeType":"YulIdentifier","src":"58169:17:69"},"nativeSrc":"58169:22:69","nodeType":"YulFunctionCall","src":"58169:22:69"}],"functionName":{"name":"add","nativeSrc":"58155:3:69","nodeType":"YulIdentifier","src":"58155:3:69"},"nativeSrc":"58155:37:69","nodeType":"YulFunctionCall","src":"58155:37:69"}],"functionName":{"name":"clear_storage_range_t_bytes1","nativeSrc":"58113:28:69","nodeType":"YulIdentifier","src":"58113:28:69"},"nativeSrc":"58113:80:69","nodeType":"YulFunctionCall","src":"58113:80:69"},"nativeSrc":"58113:80:69","nodeType":"YulExpressionStatement","src":"58113:80:69"}]},"condition":{"arguments":[{"name":"len","nativeSrc":"57763:3:69","nodeType":"YulIdentifier","src":"57763:3:69"},{"kind":"number","nativeSrc":"57768:2:69","nodeType":"YulLiteral","src":"57768:2:69","type":"","value":"31"}],"functionName":{"name":"gt","nativeSrc":"57760:2:69","nodeType":"YulIdentifier","src":"57760:2:69"},"nativeSrc":"57760:11:69","nodeType":"YulFunctionCall","src":"57760:11:69"},"nativeSrc":"57757:446:69","nodeType":"YulIf","src":"57757:446:69"}]},"name":"clean_up_bytearray_end_slots_t_string_storage","nativeSrc":"57667:543:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nativeSrc":"57722:5:69","nodeType":"YulTypedName","src":"57722:5:69","type":""},{"name":"len","nativeSrc":"57729:3:69","nodeType":"YulTypedName","src":"57729:3:69","type":""},{"name":"startIndex","nativeSrc":"57734:10:69","nodeType":"YulTypedName","src":"57734:10:69","type":""}],"src":"57667:543:69"},{"body":{"nativeSrc":"58279:54:69","nodeType":"YulBlock","src":"58279:54:69","statements":[{"nativeSrc":"58289:37:69","nodeType":"YulAssignment","src":"58289:37:69","value":{"arguments":[{"name":"bits","nativeSrc":"58314:4:69","nodeType":"YulIdentifier","src":"58314:4:69"},{"name":"value","nativeSrc":"58320:5:69","nodeType":"YulIdentifier","src":"58320:5:69"}],"functionName":{"name":"shr","nativeSrc":"58310:3:69","nodeType":"YulIdentifier","src":"58310:3:69"},"nativeSrc":"58310:16:69","nodeType":"YulFunctionCall","src":"58310:16:69"},"variableNames":[{"name":"newValue","nativeSrc":"58289:8:69","nodeType":"YulIdentifier","src":"58289:8:69"}]}]},"name":"shift_right_unsigned_dynamic","nativeSrc":"58216:117:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"bits","nativeSrc":"58254:4:69","nodeType":"YulTypedName","src":"58254:4:69","type":""},{"name":"value","nativeSrc":"58260:5:69","nodeType":"YulTypedName","src":"58260:5:69","type":""}],"returnVariables":[{"name":"newValue","nativeSrc":"58270:8:69","nodeType":"YulTypedName","src":"58270:8:69","type":""}],"src":"58216:117:69"},{"body":{"nativeSrc":"58390:118:69","nodeType":"YulBlock","src":"58390:118:69","statements":[{"nativeSrc":"58400:68:69","nodeType":"YulVariableDeclaration","src":"58400:68:69","value":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"58449:1:69","nodeType":"YulLiteral","src":"58449:1:69","type":"","value":"8"},{"name":"bytes","nativeSrc":"58452:5:69","nodeType":"YulIdentifier","src":"58452:5:69"}],"functionName":{"name":"mul","nativeSrc":"58445:3:69","nodeType":"YulIdentifier","src":"58445:3:69"},"nativeSrc":"58445:13:69","nodeType":"YulFunctionCall","src":"58445:13:69"},{"arguments":[{"kind":"number","nativeSrc":"58464:1:69","nodeType":"YulLiteral","src":"58464:1:69","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"58460:3:69","nodeType":"YulIdentifier","src":"58460:3:69"},"nativeSrc":"58460:6:69","nodeType":"YulFunctionCall","src":"58460:6:69"}],"functionName":{"name":"shift_right_unsigned_dynamic","nativeSrc":"58416:28:69","nodeType":"YulIdentifier","src":"58416:28:69"},"nativeSrc":"58416:51:69","nodeType":"YulFunctionCall","src":"58416:51:69"}],"functionName":{"name":"not","nativeSrc":"58412:3:69","nodeType":"YulIdentifier","src":"58412:3:69"},"nativeSrc":"58412:56:69","nodeType":"YulFunctionCall","src":"58412:56:69"},"variables":[{"name":"mask","nativeSrc":"58404:4:69","nodeType":"YulTypedName","src":"58404:4:69","type":""}]},{"nativeSrc":"58477:25:69","nodeType":"YulAssignment","src":"58477:25:69","value":{"arguments":[{"name":"data","nativeSrc":"58491:4:69","nodeType":"YulIdentifier","src":"58491:4:69"},{"name":"mask","nativeSrc":"58497:4:69","nodeType":"YulIdentifier","src":"58497:4:69"}],"functionName":{"name":"and","nativeSrc":"58487:3:69","nodeType":"YulIdentifier","src":"58487:3:69"},"nativeSrc":"58487:15:69","nodeType":"YulFunctionCall","src":"58487:15:69"},"variableNames":[{"name":"result","nativeSrc":"58477:6:69","nodeType":"YulIdentifier","src":"58477:6:69"}]}]},"name":"mask_bytes_dynamic","nativeSrc":"58339:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nativeSrc":"58367:4:69","nodeType":"YulTypedName","src":"58367:4:69","type":""},{"name":"bytes","nativeSrc":"58373:5:69","nodeType":"YulTypedName","src":"58373:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"58383:6:69","nodeType":"YulTypedName","src":"58383:6:69","type":""}],"src":"58339:169:69"},{"body":{"nativeSrc":"58594:214:69","nodeType":"YulBlock","src":"58594:214:69","statements":[{"nativeSrc":"58727:37:69","nodeType":"YulAssignment","src":"58727:37:69","value":{"arguments":[{"name":"data","nativeSrc":"58754:4:69","nodeType":"YulIdentifier","src":"58754:4:69"},{"name":"len","nativeSrc":"58760:3:69","nodeType":"YulIdentifier","src":"58760:3:69"}],"functionName":{"name":"mask_bytes_dynamic","nativeSrc":"58735:18:69","nodeType":"YulIdentifier","src":"58735:18:69"},"nativeSrc":"58735:29:69","nodeType":"YulFunctionCall","src":"58735:29:69"},"variableNames":[{"name":"data","nativeSrc":"58727:4:69","nodeType":"YulIdentifier","src":"58727:4:69"}]},{"nativeSrc":"58773:29:69","nodeType":"YulAssignment","src":"58773:29:69","value":{"arguments":[{"name":"data","nativeSrc":"58784:4:69","nodeType":"YulIdentifier","src":"58784:4:69"},{"arguments":[{"kind":"number","nativeSrc":"58794:1:69","nodeType":"YulLiteral","src":"58794:1:69","type":"","value":"2"},{"name":"len","nativeSrc":"58797:3:69","nodeType":"YulIdentifier","src":"58797:3:69"}],"functionName":{"name":"mul","nativeSrc":"58790:3:69","nodeType":"YulIdentifier","src":"58790:3:69"},"nativeSrc":"58790:11:69","nodeType":"YulFunctionCall","src":"58790:11:69"}],"functionName":{"name":"or","nativeSrc":"58781:2:69","nodeType":"YulIdentifier","src":"58781:2:69"},"nativeSrc":"58781:21:69","nodeType":"YulFunctionCall","src":"58781:21:69"},"variableNames":[{"name":"used","nativeSrc":"58773:4:69","nodeType":"YulIdentifier","src":"58773:4:69"}]}]},"name":"extract_used_part_and_set_length_of_short_byte_array","nativeSrc":"58513:295:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nativeSrc":"58575:4:69","nodeType":"YulTypedName","src":"58575:4:69","type":""},{"name":"len","nativeSrc":"58581:3:69","nodeType":"YulTypedName","src":"58581:3:69","type":""}],"returnVariables":[{"name":"used","nativeSrc":"58589:4:69","nodeType":"YulTypedName","src":"58589:4:69","type":""}],"src":"58513:295:69"},{"body":{"nativeSrc":"58905:1303:69","nodeType":"YulBlock","src":"58905:1303:69","statements":[{"nativeSrc":"58916:51:69","nodeType":"YulVariableDeclaration","src":"58916:51:69","value":{"arguments":[{"name":"src","nativeSrc":"58963:3:69","nodeType":"YulIdentifier","src":"58963:3:69"}],"functionName":{"name":"array_length_t_string_memory_ptr","nativeSrc":"58930:32:69","nodeType":"YulIdentifier","src":"58930:32:69"},"nativeSrc":"58930:37:69","nodeType":"YulFunctionCall","src":"58930:37:69"},"variables":[{"name":"newLen","nativeSrc":"58920:6:69","nodeType":"YulTypedName","src":"58920:6:69","type":""}]},{"body":{"nativeSrc":"59052:22:69","nodeType":"YulBlock","src":"59052:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"59054:16:69","nodeType":"YulIdentifier","src":"59054:16:69"},"nativeSrc":"59054:18:69","nodeType":"YulFunctionCall","src":"59054:18:69"},"nativeSrc":"59054:18:69","nodeType":"YulExpressionStatement","src":"59054:18:69"}]},"condition":{"arguments":[{"name":"newLen","nativeSrc":"59024:6:69","nodeType":"YulIdentifier","src":"59024:6:69"},{"kind":"number","nativeSrc":"59032:18:69","nodeType":"YulLiteral","src":"59032:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"59021:2:69","nodeType":"YulIdentifier","src":"59021:2:69"},"nativeSrc":"59021:30:69","nodeType":"YulFunctionCall","src":"59021:30:69"},"nativeSrc":"59018:56:69","nodeType":"YulIf","src":"59018:56:69"},{"nativeSrc":"59084:52:69","nodeType":"YulVariableDeclaration","src":"59084:52:69","value":{"arguments":[{"arguments":[{"name":"slot","nativeSrc":"59130:4:69","nodeType":"YulIdentifier","src":"59130:4:69"}],"functionName":{"name":"sload","nativeSrc":"59124:5:69","nodeType":"YulIdentifier","src":"59124:5:69"},"nativeSrc":"59124:11:69","nodeType":"YulFunctionCall","src":"59124:11:69"}],"functionName":{"name":"extract_byte_array_length","nativeSrc":"59098:25:69","nodeType":"YulIdentifier","src":"59098:25:69"},"nativeSrc":"59098:38:69","nodeType":"YulFunctionCall","src":"59098:38:69"},"variables":[{"name":"oldLen","nativeSrc":"59088:6:69","nodeType":"YulTypedName","src":"59088:6:69","type":""}]},{"expression":{"arguments":[{"name":"slot","nativeSrc":"59229:4:69","nodeType":"YulIdentifier","src":"59229:4:69"},{"name":"oldLen","nativeSrc":"59235:6:69","nodeType":"YulIdentifier","src":"59235:6:69"},{"name":"newLen","nativeSrc":"59243:6:69","nodeType":"YulIdentifier","src":"59243:6:69"}],"functionName":{"name":"clean_up_bytearray_end_slots_t_string_storage","nativeSrc":"59183:45:69","nodeType":"YulIdentifier","src":"59183:45:69"},"nativeSrc":"59183:67:69","nodeType":"YulFunctionCall","src":"59183:67:69"},"nativeSrc":"59183:67:69","nodeType":"YulExpressionStatement","src":"59183:67:69"},{"nativeSrc":"59260:18:69","nodeType":"YulVariableDeclaration","src":"59260:18:69","value":{"kind":"number","nativeSrc":"59277:1:69","nodeType":"YulLiteral","src":"59277:1:69","type":"","value":"0"},"variables":[{"name":"srcOffset","nativeSrc":"59264:9:69","nodeType":"YulTypedName","src":"59264:9:69","type":""}]},{"nativeSrc":"59288:17:69","nodeType":"YulAssignment","src":"59288:17:69","value":{"kind":"number","nativeSrc":"59301:4:69","nodeType":"YulLiteral","src":"59301:4:69","type":"","value":"0x20"},"variableNames":[{"name":"srcOffset","nativeSrc":"59288:9:69","nodeType":"YulIdentifier","src":"59288:9:69"}]},{"cases":[{"body":{"nativeSrc":"59352:611:69","nodeType":"YulBlock","src":"59352:611:69","statements":[{"nativeSrc":"59366:37:69","nodeType":"YulVariableDeclaration","src":"59366:37:69","value":{"arguments":[{"name":"newLen","nativeSrc":"59385:6:69","nodeType":"YulIdentifier","src":"59385:6:69"},{"arguments":[{"kind":"number","nativeSrc":"59397:4:69","nodeType":"YulLiteral","src":"59397:4:69","type":"","value":"0x1f"}],"functionName":{"name":"not","nativeSrc":"59393:3:69","nodeType":"YulIdentifier","src":"59393:3:69"},"nativeSrc":"59393:9:69","nodeType":"YulFunctionCall","src":"59393:9:69"}],"functionName":{"name":"and","nativeSrc":"59381:3:69","nodeType":"YulIdentifier","src":"59381:3:69"},"nativeSrc":"59381:22:69","nodeType":"YulFunctionCall","src":"59381:22:69"},"variables":[{"name":"loopEnd","nativeSrc":"59370:7:69","nodeType":"YulTypedName","src":"59370:7:69","type":""}]},{"nativeSrc":"59417:51:69","nodeType":"YulVariableDeclaration","src":"59417:51:69","value":{"arguments":[{"name":"slot","nativeSrc":"59463:4:69","nodeType":"YulIdentifier","src":"59463:4:69"}],"functionName":{"name":"array_dataslot_t_string_storage","nativeSrc":"59431:31:69","nodeType":"YulIdentifier","src":"59431:31:69"},"nativeSrc":"59431:37:69","nodeType":"YulFunctionCall","src":"59431:37:69"},"variables":[{"name":"dstPtr","nativeSrc":"59421:6:69","nodeType":"YulTypedName","src":"59421:6:69","type":""}]},{"nativeSrc":"59481:10:69","nodeType":"YulVariableDeclaration","src":"59481:10:69","value":{"kind":"number","nativeSrc":"59490:1:69","nodeType":"YulLiteral","src":"59490:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"59485:1:69","nodeType":"YulTypedName","src":"59485:1:69","type":""}]},{"body":{"nativeSrc":"59549:163:69","nodeType":"YulBlock","src":"59549:163:69","statements":[{"expression":{"arguments":[{"name":"dstPtr","nativeSrc":"59574:6:69","nodeType":"YulIdentifier","src":"59574:6:69"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"59592:3:69","nodeType":"YulIdentifier","src":"59592:3:69"},{"name":"srcOffset","nativeSrc":"59597:9:69","nodeType":"YulIdentifier","src":"59597:9:69"}],"functionName":{"name":"add","nativeSrc":"59588:3:69","nodeType":"YulIdentifier","src":"59588:3:69"},"nativeSrc":"59588:19:69","nodeType":"YulFunctionCall","src":"59588:19:69"}],"functionName":{"name":"mload","nativeSrc":"59582:5:69","nodeType":"YulIdentifier","src":"59582:5:69"},"nativeSrc":"59582:26:69","nodeType":"YulFunctionCall","src":"59582:26:69"}],"functionName":{"name":"sstore","nativeSrc":"59567:6:69","nodeType":"YulIdentifier","src":"59567:6:69"},"nativeSrc":"59567:42:69","nodeType":"YulFunctionCall","src":"59567:42:69"},"nativeSrc":"59567:42:69","nodeType":"YulExpressionStatement","src":"59567:42:69"},{"nativeSrc":"59626:24:69","nodeType":"YulAssignment","src":"59626:24:69","value":{"arguments":[{"name":"dstPtr","nativeSrc":"59640:6:69","nodeType":"YulIdentifier","src":"59640:6:69"},{"kind":"number","nativeSrc":"59648:1:69","nodeType":"YulLiteral","src":"59648:1:69","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"59636:3:69","nodeType":"YulIdentifier","src":"59636:3:69"},"nativeSrc":"59636:14:69","nodeType":"YulFunctionCall","src":"59636:14:69"},"variableNames":[{"name":"dstPtr","nativeSrc":"59626:6:69","nodeType":"YulIdentifier","src":"59626:6:69"}]},{"nativeSrc":"59667:31:69","nodeType":"YulAssignment","src":"59667:31:69","value":{"arguments":[{"name":"srcOffset","nativeSrc":"59684:9:69","nodeType":"YulIdentifier","src":"59684:9:69"},{"kind":"number","nativeSrc":"59695:2:69","nodeType":"YulLiteral","src":"59695:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"59680:3:69","nodeType":"YulIdentifier","src":"59680:3:69"},"nativeSrc":"59680:18:69","nodeType":"YulFunctionCall","src":"59680:18:69"},"variableNames":[{"name":"srcOffset","nativeSrc":"59667:9:69","nodeType":"YulIdentifier","src":"59667:9:69"}]}]},"condition":{"arguments":[{"name":"i","nativeSrc":"59515:1:69","nodeType":"YulIdentifier","src":"59515:1:69"},{"name":"loopEnd","nativeSrc":"59518:7:69","nodeType":"YulIdentifier","src":"59518:7:69"}],"functionName":{"name":"lt","nativeSrc":"59512:2:69","nodeType":"YulIdentifier","src":"59512:2:69"},"nativeSrc":"59512:14:69","nodeType":"YulFunctionCall","src":"59512:14:69"},"nativeSrc":"59504:208:69","nodeType":"YulForLoop","post":{"nativeSrc":"59527:21:69","nodeType":"YulBlock","src":"59527:21:69","statements":[{"nativeSrc":"59529:17:69","nodeType":"YulAssignment","src":"59529:17:69","value":{"arguments":[{"name":"i","nativeSrc":"59538:1:69","nodeType":"YulIdentifier","src":"59538:1:69"},{"kind":"number","nativeSrc":"59541:4:69","nodeType":"YulLiteral","src":"59541:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"59534:3:69","nodeType":"YulIdentifier","src":"59534:3:69"},"nativeSrc":"59534:12:69","nodeType":"YulFunctionCall","src":"59534:12:69"},"variableNames":[{"name":"i","nativeSrc":"59529:1:69","nodeType":"YulIdentifier","src":"59529:1:69"}]}]},"pre":{"nativeSrc":"59508:3:69","nodeType":"YulBlock","src":"59508:3:69","statements":[]},"src":"59504:208:69"},{"body":{"nativeSrc":"59748:156:69","nodeType":"YulBlock","src":"59748:156:69","statements":[{"nativeSrc":"59766:43:69","nodeType":"YulVariableDeclaration","src":"59766:43:69","value":{"arguments":[{"arguments":[{"name":"src","nativeSrc":"59793:3:69","nodeType":"YulIdentifier","src":"59793:3:69"},{"name":"srcOffset","nativeSrc":"59798:9:69","nodeType":"YulIdentifier","src":"59798:9:69"}],"functionName":{"name":"add","nativeSrc":"59789:3:69","nodeType":"YulIdentifier","src":"59789:3:69"},"nativeSrc":"59789:19:69","nodeType":"YulFunctionCall","src":"59789:19:69"}],"functionName":{"name":"mload","nativeSrc":"59783:5:69","nodeType":"YulIdentifier","src":"59783:5:69"},"nativeSrc":"59783:26:69","nodeType":"YulFunctionCall","src":"59783:26:69"},"variables":[{"name":"lastValue","nativeSrc":"59770:9:69","nodeType":"YulTypedName","src":"59770:9:69","type":""}]},{"expression":{"arguments":[{"name":"dstPtr","nativeSrc":"59833:6:69","nodeType":"YulIdentifier","src":"59833:6:69"},{"arguments":[{"name":"lastValue","nativeSrc":"59860:9:69","nodeType":"YulIdentifier","src":"59860:9:69"},{"arguments":[{"name":"newLen","nativeSrc":"59875:6:69","nodeType":"YulIdentifier","src":"59875:6:69"},{"kind":"number","nativeSrc":"59883:4:69","nodeType":"YulLiteral","src":"59883:4:69","type":"","value":"0x1f"}],"functionName":{"name":"and","nativeSrc":"59871:3:69","nodeType":"YulIdentifier","src":"59871:3:69"},"nativeSrc":"59871:17:69","nodeType":"YulFunctionCall","src":"59871:17:69"}],"functionName":{"name":"mask_bytes_dynamic","nativeSrc":"59841:18:69","nodeType":"YulIdentifier","src":"59841:18:69"},"nativeSrc":"59841:48:69","nodeType":"YulFunctionCall","src":"59841:48:69"}],"functionName":{"name":"sstore","nativeSrc":"59826:6:69","nodeType":"YulIdentifier","src":"59826:6:69"},"nativeSrc":"59826:64:69","nodeType":"YulFunctionCall","src":"59826:64:69"},"nativeSrc":"59826:64:69","nodeType":"YulExpressionStatement","src":"59826:64:69"}]},"condition":{"arguments":[{"name":"loopEnd","nativeSrc":"59731:7:69","nodeType":"YulIdentifier","src":"59731:7:69"},{"name":"newLen","nativeSrc":"59740:6:69","nodeType":"YulIdentifier","src":"59740:6:69"}],"functionName":{"name":"lt","nativeSrc":"59728:2:69","nodeType":"YulIdentifier","src":"59728:2:69"},"nativeSrc":"59728:19:69","nodeType":"YulFunctionCall","src":"59728:19:69"},"nativeSrc":"59725:179:69","nodeType":"YulIf","src":"59725:179:69"},{"expression":{"arguments":[{"name":"slot","nativeSrc":"59924:4:69","nodeType":"YulIdentifier","src":"59924:4:69"},{"arguments":[{"arguments":[{"name":"newLen","nativeSrc":"59938:6:69","nodeType":"YulIdentifier","src":"59938:6:69"},{"kind":"number","nativeSrc":"59946:1:69","nodeType":"YulLiteral","src":"59946:1:69","type":"","value":"2"}],"functionName":{"name":"mul","nativeSrc":"59934:3:69","nodeType":"YulIdentifier","src":"59934:3:69"},"nativeSrc":"59934:14:69","nodeType":"YulFunctionCall","src":"59934:14:69"},{"kind":"number","nativeSrc":"59950:1:69","nodeType":"YulLiteral","src":"59950:1:69","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"59930:3:69","nodeType":"YulIdentifier","src":"59930:3:69"},"nativeSrc":"59930:22:69","nodeType":"YulFunctionCall","src":"59930:22:69"}],"functionName":{"name":"sstore","nativeSrc":"59917:6:69","nodeType":"YulIdentifier","src":"59917:6:69"},"nativeSrc":"59917:36:69","nodeType":"YulFunctionCall","src":"59917:36:69"},"nativeSrc":"59917:36:69","nodeType":"YulExpressionStatement","src":"59917:36:69"}]},"nativeSrc":"59345:618:69","nodeType":"YulCase","src":"59345:618:69","value":{"kind":"number","nativeSrc":"59350:1:69","nodeType":"YulLiteral","src":"59350:1:69","type":"","value":"1"}},{"body":{"nativeSrc":"59980:222:69","nodeType":"YulBlock","src":"59980:222:69","statements":[{"nativeSrc":"59994:14:69","nodeType":"YulVariableDeclaration","src":"59994:14:69","value":{"kind":"number","nativeSrc":"60007:1:69","nodeType":"YulLiteral","src":"60007:1:69","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"59998:5:69","nodeType":"YulTypedName","src":"59998:5:69","type":""}]},{"body":{"nativeSrc":"60031:67:69","nodeType":"YulBlock","src":"60031:67:69","statements":[{"nativeSrc":"60049:35:69","nodeType":"YulAssignment","src":"60049:35:69","value":{"arguments":[{"arguments":[{"name":"src","nativeSrc":"60068:3:69","nodeType":"YulIdentifier","src":"60068:3:69"},{"name":"srcOffset","nativeSrc":"60073:9:69","nodeType":"YulIdentifier","src":"60073:9:69"}],"functionName":{"name":"add","nativeSrc":"60064:3:69","nodeType":"YulIdentifier","src":"60064:3:69"},"nativeSrc":"60064:19:69","nodeType":"YulFunctionCall","src":"60064:19:69"}],"functionName":{"name":"mload","nativeSrc":"60058:5:69","nodeType":"YulIdentifier","src":"60058:5:69"},"nativeSrc":"60058:26:69","nodeType":"YulFunctionCall","src":"60058:26:69"},"variableNames":[{"name":"value","nativeSrc":"60049:5:69","nodeType":"YulIdentifier","src":"60049:5:69"}]}]},"condition":{"name":"newLen","nativeSrc":"60024:6:69","nodeType":"YulIdentifier","src":"60024:6:69"},"nativeSrc":"60021:77:69","nodeType":"YulIf","src":"60021:77:69"},{"expression":{"arguments":[{"name":"slot","nativeSrc":"60118:4:69","nodeType":"YulIdentifier","src":"60118:4:69"},{"arguments":[{"name":"value","nativeSrc":"60177:5:69","nodeType":"YulIdentifier","src":"60177:5:69"},{"name":"newLen","nativeSrc":"60184:6:69","nodeType":"YulIdentifier","src":"60184:6:69"}],"functionName":{"name":"extract_used_part_and_set_length_of_short_byte_array","nativeSrc":"60124:52:69","nodeType":"YulIdentifier","src":"60124:52:69"},"nativeSrc":"60124:67:69","nodeType":"YulFunctionCall","src":"60124:67:69"}],"functionName":{"name":"sstore","nativeSrc":"60111:6:69","nodeType":"YulIdentifier","src":"60111:6:69"},"nativeSrc":"60111:81:69","nodeType":"YulFunctionCall","src":"60111:81:69"},"nativeSrc":"60111:81:69","nodeType":"YulExpressionStatement","src":"60111:81:69"}]},"nativeSrc":"59972:230:69","nodeType":"YulCase","src":"59972:230:69","value":"default"}],"expression":{"arguments":[{"name":"newLen","nativeSrc":"59325:6:69","nodeType":"YulIdentifier","src":"59325:6:69"},{"kind":"number","nativeSrc":"59333:2:69","nodeType":"YulLiteral","src":"59333:2:69","type":"","value":"31"}],"functionName":{"name":"gt","nativeSrc":"59322:2:69","nodeType":"YulIdentifier","src":"59322:2:69"},"nativeSrc":"59322:14:69","nodeType":"YulFunctionCall","src":"59322:14:69"},"nativeSrc":"59315:887:69","nodeType":"YulSwitch","src":"59315:887:69"}]},"name":"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage","nativeSrc":"58813:1395:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nativeSrc":"58894:4:69","nodeType":"YulTypedName","src":"58894:4:69","type":""},{"name":"src","nativeSrc":"58900:3:69","nodeType":"YulTypedName","src":"58900:3:69","type":""}],"src":"58813:1395:69"},{"body":{"nativeSrc":"60320:65:69","nodeType":"YulBlock","src":"60320:65:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"60342:6:69","nodeType":"YulIdentifier","src":"60342:6:69"},{"kind":"number","nativeSrc":"60350:1:69","nodeType":"YulLiteral","src":"60350:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"60338:3:69","nodeType":"YulIdentifier","src":"60338:3:69"},"nativeSrc":"60338:14:69","nodeType":"YulFunctionCall","src":"60338:14:69"},{"hexValue":"4d6174683a206d756c446976206f766572666c6f77","kind":"string","nativeSrc":"60354:23:69","nodeType":"YulLiteral","src":"60354:23:69","type":"","value":"Math: mulDiv overflow"}],"functionName":{"name":"mstore","nativeSrc":"60331:6:69","nodeType":"YulIdentifier","src":"60331:6:69"},"nativeSrc":"60331:47:69","nodeType":"YulFunctionCall","src":"60331:47:69"},"nativeSrc":"60331:47:69","nodeType":"YulExpressionStatement","src":"60331:47:69"}]},"name":"store_literal_in_memory_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851","nativeSrc":"60214:171:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"60312:6:69","nodeType":"YulTypedName","src":"60312:6:69","type":""}],"src":"60214:171:69"},{"body":{"nativeSrc":"60537:220:69","nodeType":"YulBlock","src":"60537:220:69","statements":[{"nativeSrc":"60547:74:69","nodeType":"YulAssignment","src":"60547:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"60613:3:69","nodeType":"YulIdentifier","src":"60613:3:69"},{"kind":"number","nativeSrc":"60618:2:69","nodeType":"YulLiteral","src":"60618:2:69","type":"","value":"21"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"60554:58:69","nodeType":"YulIdentifier","src":"60554:58:69"},"nativeSrc":"60554:67:69","nodeType":"YulFunctionCall","src":"60554:67:69"},"variableNames":[{"name":"pos","nativeSrc":"60547:3:69","nodeType":"YulIdentifier","src":"60547:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"60719:3:69","nodeType":"YulIdentifier","src":"60719:3:69"}],"functionName":{"name":"store_literal_in_memory_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851","nativeSrc":"60630:88:69","nodeType":"YulIdentifier","src":"60630:88:69"},"nativeSrc":"60630:93:69","nodeType":"YulFunctionCall","src":"60630:93:69"},"nativeSrc":"60630:93:69","nodeType":"YulExpressionStatement","src":"60630:93:69"},{"nativeSrc":"60732:19:69","nodeType":"YulAssignment","src":"60732:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"60743:3:69","nodeType":"YulIdentifier","src":"60743:3:69"},{"kind":"number","nativeSrc":"60748:2:69","nodeType":"YulLiteral","src":"60748:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"60739:3:69","nodeType":"YulIdentifier","src":"60739:3:69"},"nativeSrc":"60739:12:69","nodeType":"YulFunctionCall","src":"60739:12:69"},"variableNames":[{"name":"end","nativeSrc":"60732:3:69","nodeType":"YulIdentifier","src":"60732:3:69"}]}]},"name":"abi_encode_t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851_to_t_string_memory_ptr_fromStack","nativeSrc":"60391:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"60525:3:69","nodeType":"YulTypedName","src":"60525:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"60533:3:69","nodeType":"YulTypedName","src":"60533:3:69","type":""}],"src":"60391:366:69"},{"body":{"nativeSrc":"60934:248:69","nodeType":"YulBlock","src":"60934:248:69","statements":[{"nativeSrc":"60944:26:69","nodeType":"YulAssignment","src":"60944:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"60956:9:69","nodeType":"YulIdentifier","src":"60956:9:69"},{"kind":"number","nativeSrc":"60967:2:69","nodeType":"YulLiteral","src":"60967:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"60952:3:69","nodeType":"YulIdentifier","src":"60952:3:69"},"nativeSrc":"60952:18:69","nodeType":"YulFunctionCall","src":"60952:18:69"},"variableNames":[{"name":"tail","nativeSrc":"60944:4:69","nodeType":"YulIdentifier","src":"60944:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"60991:9:69","nodeType":"YulIdentifier","src":"60991:9:69"},{"kind":"number","nativeSrc":"61002:1:69","nodeType":"YulLiteral","src":"61002:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"60987:3:69","nodeType":"YulIdentifier","src":"60987:3:69"},"nativeSrc":"60987:17:69","nodeType":"YulFunctionCall","src":"60987:17:69"},{"arguments":[{"name":"tail","nativeSrc":"61010:4:69","nodeType":"YulIdentifier","src":"61010:4:69"},{"name":"headStart","nativeSrc":"61016:9:69","nodeType":"YulIdentifier","src":"61016:9:69"}],"functionName":{"name":"sub","nativeSrc":"61006:3:69","nodeType":"YulIdentifier","src":"61006:3:69"},"nativeSrc":"61006:20:69","nodeType":"YulFunctionCall","src":"61006:20:69"}],"functionName":{"name":"mstore","nativeSrc":"60980:6:69","nodeType":"YulIdentifier","src":"60980:6:69"},"nativeSrc":"60980:47:69","nodeType":"YulFunctionCall","src":"60980:47:69"},"nativeSrc":"60980:47:69","nodeType":"YulExpressionStatement","src":"60980:47:69"},{"nativeSrc":"61036:139:69","nodeType":"YulAssignment","src":"61036:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"61170:4:69","nodeType":"YulIdentifier","src":"61170:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851_to_t_string_memory_ptr_fromStack","nativeSrc":"61044:124:69","nodeType":"YulIdentifier","src":"61044:124:69"},"nativeSrc":"61044:131:69","nodeType":"YulFunctionCall","src":"61044:131:69"},"variableNames":[{"name":"tail","nativeSrc":"61036:4:69","nodeType":"YulIdentifier","src":"61036:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"60763:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"60914:9:69","nodeType":"YulTypedName","src":"60914:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"60929:4:69","nodeType":"YulTypedName","src":"60929:4:69","type":""}],"src":"60763:419:69"},{"body":{"nativeSrc":"61294:135:69","nodeType":"YulBlock","src":"61294:135:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"61316:6:69","nodeType":"YulIdentifier","src":"61316:6:69"},{"kind":"number","nativeSrc":"61324:1:69","nodeType":"YulLiteral","src":"61324:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"61312:3:69","nodeType":"YulIdentifier","src":"61312:3:69"},"nativeSrc":"61312:14:69","nodeType":"YulFunctionCall","src":"61312:14:69"},{"hexValue":"5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f","kind":"string","nativeSrc":"61328:34:69","nodeType":"YulLiteral","src":"61328:34:69","type":"","value":"SafeERC20: approve from non-zero"}],"functionName":{"name":"mstore","nativeSrc":"61305:6:69","nodeType":"YulIdentifier","src":"61305:6:69"},"nativeSrc":"61305:58:69","nodeType":"YulFunctionCall","src":"61305:58:69"},"nativeSrc":"61305:58:69","nodeType":"YulExpressionStatement","src":"61305:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"61384:6:69","nodeType":"YulIdentifier","src":"61384:6:69"},{"kind":"number","nativeSrc":"61392:2:69","nodeType":"YulLiteral","src":"61392:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"61380:3:69","nodeType":"YulIdentifier","src":"61380:3:69"},"nativeSrc":"61380:15:69","nodeType":"YulFunctionCall","src":"61380:15:69"},{"hexValue":"20746f206e6f6e2d7a65726f20616c6c6f77616e6365","kind":"string","nativeSrc":"61397:24:69","nodeType":"YulLiteral","src":"61397:24:69","type":"","value":" to non-zero allowance"}],"functionName":{"name":"mstore","nativeSrc":"61373:6:69","nodeType":"YulIdentifier","src":"61373:6:69"},"nativeSrc":"61373:49:69","nodeType":"YulFunctionCall","src":"61373:49:69"},"nativeSrc":"61373:49:69","nodeType":"YulExpressionStatement","src":"61373:49:69"}]},"name":"store_literal_in_memory_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25","nativeSrc":"61188:241:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"61286:6:69","nodeType":"YulTypedName","src":"61286:6:69","type":""}],"src":"61188:241:69"},{"body":{"nativeSrc":"61581:220:69","nodeType":"YulBlock","src":"61581:220:69","statements":[{"nativeSrc":"61591:74:69","nodeType":"YulAssignment","src":"61591:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"61657:3:69","nodeType":"YulIdentifier","src":"61657:3:69"},{"kind":"number","nativeSrc":"61662:2:69","nodeType":"YulLiteral","src":"61662:2:69","type":"","value":"54"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"61598:58:69","nodeType":"YulIdentifier","src":"61598:58:69"},"nativeSrc":"61598:67:69","nodeType":"YulFunctionCall","src":"61598:67:69"},"variableNames":[{"name":"pos","nativeSrc":"61591:3:69","nodeType":"YulIdentifier","src":"61591:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"61763:3:69","nodeType":"YulIdentifier","src":"61763:3:69"}],"functionName":{"name":"store_literal_in_memory_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25","nativeSrc":"61674:88:69","nodeType":"YulIdentifier","src":"61674:88:69"},"nativeSrc":"61674:93:69","nodeType":"YulFunctionCall","src":"61674:93:69"},"nativeSrc":"61674:93:69","nodeType":"YulExpressionStatement","src":"61674:93:69"},{"nativeSrc":"61776:19:69","nodeType":"YulAssignment","src":"61776:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"61787:3:69","nodeType":"YulIdentifier","src":"61787:3:69"},{"kind":"number","nativeSrc":"61792:2:69","nodeType":"YulLiteral","src":"61792:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"61783:3:69","nodeType":"YulIdentifier","src":"61783:3:69"},"nativeSrc":"61783:12:69","nodeType":"YulFunctionCall","src":"61783:12:69"},"variableNames":[{"name":"end","nativeSrc":"61776:3:69","nodeType":"YulIdentifier","src":"61776:3:69"}]}]},"name":"abi_encode_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25_to_t_string_memory_ptr_fromStack","nativeSrc":"61435:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"61569:3:69","nodeType":"YulTypedName","src":"61569:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"61577:3:69","nodeType":"YulTypedName","src":"61577:3:69","type":""}],"src":"61435:366:69"},{"body":{"nativeSrc":"61978:248:69","nodeType":"YulBlock","src":"61978:248:69","statements":[{"nativeSrc":"61988:26:69","nodeType":"YulAssignment","src":"61988:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"62000:9:69","nodeType":"YulIdentifier","src":"62000:9:69"},{"kind":"number","nativeSrc":"62011:2:69","nodeType":"YulLiteral","src":"62011:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"61996:3:69","nodeType":"YulIdentifier","src":"61996:3:69"},"nativeSrc":"61996:18:69","nodeType":"YulFunctionCall","src":"61996:18:69"},"variableNames":[{"name":"tail","nativeSrc":"61988:4:69","nodeType":"YulIdentifier","src":"61988:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"62035:9:69","nodeType":"YulIdentifier","src":"62035:9:69"},{"kind":"number","nativeSrc":"62046:1:69","nodeType":"YulLiteral","src":"62046:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"62031:3:69","nodeType":"YulIdentifier","src":"62031:3:69"},"nativeSrc":"62031:17:69","nodeType":"YulFunctionCall","src":"62031:17:69"},{"arguments":[{"name":"tail","nativeSrc":"62054:4:69","nodeType":"YulIdentifier","src":"62054:4:69"},{"name":"headStart","nativeSrc":"62060:9:69","nodeType":"YulIdentifier","src":"62060:9:69"}],"functionName":{"name":"sub","nativeSrc":"62050:3:69","nodeType":"YulIdentifier","src":"62050:3:69"},"nativeSrc":"62050:20:69","nodeType":"YulFunctionCall","src":"62050:20:69"}],"functionName":{"name":"mstore","nativeSrc":"62024:6:69","nodeType":"YulIdentifier","src":"62024:6:69"},"nativeSrc":"62024:47:69","nodeType":"YulFunctionCall","src":"62024:47:69"},"nativeSrc":"62024:47:69","nodeType":"YulExpressionStatement","src":"62024:47:69"},{"nativeSrc":"62080:139:69","nodeType":"YulAssignment","src":"62080:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"62214:4:69","nodeType":"YulIdentifier","src":"62214:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25_to_t_string_memory_ptr_fromStack","nativeSrc":"62088:124:69","nodeType":"YulIdentifier","src":"62088:124:69"},"nativeSrc":"62088:131:69","nodeType":"YulFunctionCall","src":"62088:131:69"},"variableNames":[{"name":"tail","nativeSrc":"62080:4:69","nodeType":"YulIdentifier","src":"62080:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"61807:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"61958:9:69","nodeType":"YulTypedName","src":"61958:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"61973:4:69","nodeType":"YulTypedName","src":"61973:4:69","type":""}],"src":"61807:419:69"},{"body":{"nativeSrc":"62338:75:69","nodeType":"YulBlock","src":"62338:75:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"62360:6:69","nodeType":"YulIdentifier","src":"62360:6:69"},{"kind":"number","nativeSrc":"62368:1:69","nodeType":"YulLiteral","src":"62368:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"62356:3:69","nodeType":"YulIdentifier","src":"62356:3:69"},"nativeSrc":"62356:14:69","nodeType":"YulFunctionCall","src":"62356:14:69"},{"hexValue":"45524332303a206d696e7420746f20746865207a65726f2061646472657373","kind":"string","nativeSrc":"62372:33:69","nodeType":"YulLiteral","src":"62372:33:69","type":"","value":"ERC20: mint to the zero address"}],"functionName":{"name":"mstore","nativeSrc":"62349:6:69","nodeType":"YulIdentifier","src":"62349:6:69"},"nativeSrc":"62349:57:69","nodeType":"YulFunctionCall","src":"62349:57:69"},"nativeSrc":"62349:57:69","nodeType":"YulExpressionStatement","src":"62349:57:69"}]},"name":"store_literal_in_memory_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e","nativeSrc":"62232:181:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"62330:6:69","nodeType":"YulTypedName","src":"62330:6:69","type":""}],"src":"62232:181:69"},{"body":{"nativeSrc":"62565:220:69","nodeType":"YulBlock","src":"62565:220:69","statements":[{"nativeSrc":"62575:74:69","nodeType":"YulAssignment","src":"62575:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"62641:3:69","nodeType":"YulIdentifier","src":"62641:3:69"},{"kind":"number","nativeSrc":"62646:2:69","nodeType":"YulLiteral","src":"62646:2:69","type":"","value":"31"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"62582:58:69","nodeType":"YulIdentifier","src":"62582:58:69"},"nativeSrc":"62582:67:69","nodeType":"YulFunctionCall","src":"62582:67:69"},"variableNames":[{"name":"pos","nativeSrc":"62575:3:69","nodeType":"YulIdentifier","src":"62575:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"62747:3:69","nodeType":"YulIdentifier","src":"62747:3:69"}],"functionName":{"name":"store_literal_in_memory_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e","nativeSrc":"62658:88:69","nodeType":"YulIdentifier","src":"62658:88:69"},"nativeSrc":"62658:93:69","nodeType":"YulFunctionCall","src":"62658:93:69"},"nativeSrc":"62658:93:69","nodeType":"YulExpressionStatement","src":"62658:93:69"},{"nativeSrc":"62760:19:69","nodeType":"YulAssignment","src":"62760:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"62771:3:69","nodeType":"YulIdentifier","src":"62771:3:69"},{"kind":"number","nativeSrc":"62776:2:69","nodeType":"YulLiteral","src":"62776:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"62767:3:69","nodeType":"YulIdentifier","src":"62767:3:69"},"nativeSrc":"62767:12:69","nodeType":"YulFunctionCall","src":"62767:12:69"},"variableNames":[{"name":"end","nativeSrc":"62760:3:69","nodeType":"YulIdentifier","src":"62760:3:69"}]}]},"name":"abi_encode_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e_to_t_string_memory_ptr_fromStack","nativeSrc":"62419:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"62553:3:69","nodeType":"YulTypedName","src":"62553:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"62561:3:69","nodeType":"YulTypedName","src":"62561:3:69","type":""}],"src":"62419:366:69"},{"body":{"nativeSrc":"62962:248:69","nodeType":"YulBlock","src":"62962:248:69","statements":[{"nativeSrc":"62972:26:69","nodeType":"YulAssignment","src":"62972:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"62984:9:69","nodeType":"YulIdentifier","src":"62984:9:69"},{"kind":"number","nativeSrc":"62995:2:69","nodeType":"YulLiteral","src":"62995:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"62980:3:69","nodeType":"YulIdentifier","src":"62980:3:69"},"nativeSrc":"62980:18:69","nodeType":"YulFunctionCall","src":"62980:18:69"},"variableNames":[{"name":"tail","nativeSrc":"62972:4:69","nodeType":"YulIdentifier","src":"62972:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"63019:9:69","nodeType":"YulIdentifier","src":"63019:9:69"},{"kind":"number","nativeSrc":"63030:1:69","nodeType":"YulLiteral","src":"63030:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"63015:3:69","nodeType":"YulIdentifier","src":"63015:3:69"},"nativeSrc":"63015:17:69","nodeType":"YulFunctionCall","src":"63015:17:69"},{"arguments":[{"name":"tail","nativeSrc":"63038:4:69","nodeType":"YulIdentifier","src":"63038:4:69"},{"name":"headStart","nativeSrc":"63044:9:69","nodeType":"YulIdentifier","src":"63044:9:69"}],"functionName":{"name":"sub","nativeSrc":"63034:3:69","nodeType":"YulIdentifier","src":"63034:3:69"},"nativeSrc":"63034:20:69","nodeType":"YulFunctionCall","src":"63034:20:69"}],"functionName":{"name":"mstore","nativeSrc":"63008:6:69","nodeType":"YulIdentifier","src":"63008:6:69"},"nativeSrc":"63008:47:69","nodeType":"YulFunctionCall","src":"63008:47:69"},"nativeSrc":"63008:47:69","nodeType":"YulExpressionStatement","src":"63008:47:69"},{"nativeSrc":"63064:139:69","nodeType":"YulAssignment","src":"63064:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"63198:4:69","nodeType":"YulIdentifier","src":"63198:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e_to_t_string_memory_ptr_fromStack","nativeSrc":"63072:124:69","nodeType":"YulIdentifier","src":"63072:124:69"},"nativeSrc":"63072:131:69","nodeType":"YulFunctionCall","src":"63072:131:69"},"variableNames":[{"name":"tail","nativeSrc":"63064:4:69","nodeType":"YulIdentifier","src":"63064:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"62791:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"62942:9:69","nodeType":"YulTypedName","src":"62942:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"62957:4:69","nodeType":"YulTypedName","src":"62957:4:69","type":""}],"src":"62791:419:69"},{"body":{"nativeSrc":"63322:114:69","nodeType":"YulBlock","src":"63322:114:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"63344:6:69","nodeType":"YulIdentifier","src":"63344:6:69"},{"kind":"number","nativeSrc":"63352:1:69","nodeType":"YulLiteral","src":"63352:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"63340:3:69","nodeType":"YulIdentifier","src":"63340:3:69"},"nativeSrc":"63340:14:69","nodeType":"YulFunctionCall","src":"63340:14:69"},{"hexValue":"45524332303a206275726e2066726f6d20746865207a65726f20616464726573","kind":"string","nativeSrc":"63356:34:69","nodeType":"YulLiteral","src":"63356:34:69","type":"","value":"ERC20: burn from the zero addres"}],"functionName":{"name":"mstore","nativeSrc":"63333:6:69","nodeType":"YulIdentifier","src":"63333:6:69"},"nativeSrc":"63333:58:69","nodeType":"YulFunctionCall","src":"63333:58:69"},"nativeSrc":"63333:58:69","nodeType":"YulExpressionStatement","src":"63333:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"63412:6:69","nodeType":"YulIdentifier","src":"63412:6:69"},{"kind":"number","nativeSrc":"63420:2:69","nodeType":"YulLiteral","src":"63420:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"63408:3:69","nodeType":"YulIdentifier","src":"63408:3:69"},"nativeSrc":"63408:15:69","nodeType":"YulFunctionCall","src":"63408:15:69"},{"hexValue":"73","kind":"string","nativeSrc":"63425:3:69","nodeType":"YulLiteral","src":"63425:3:69","type":"","value":"s"}],"functionName":{"name":"mstore","nativeSrc":"63401:6:69","nodeType":"YulIdentifier","src":"63401:6:69"},"nativeSrc":"63401:28:69","nodeType":"YulFunctionCall","src":"63401:28:69"},"nativeSrc":"63401:28:69","nodeType":"YulExpressionStatement","src":"63401:28:69"}]},"name":"store_literal_in_memory_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f","nativeSrc":"63216:220:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"63314:6:69","nodeType":"YulTypedName","src":"63314:6:69","type":""}],"src":"63216:220:69"},{"body":{"nativeSrc":"63588:220:69","nodeType":"YulBlock","src":"63588:220:69","statements":[{"nativeSrc":"63598:74:69","nodeType":"YulAssignment","src":"63598:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"63664:3:69","nodeType":"YulIdentifier","src":"63664:3:69"},{"kind":"number","nativeSrc":"63669:2:69","nodeType":"YulLiteral","src":"63669:2:69","type":"","value":"33"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"63605:58:69","nodeType":"YulIdentifier","src":"63605:58:69"},"nativeSrc":"63605:67:69","nodeType":"YulFunctionCall","src":"63605:67:69"},"variableNames":[{"name":"pos","nativeSrc":"63598:3:69","nodeType":"YulIdentifier","src":"63598:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"63770:3:69","nodeType":"YulIdentifier","src":"63770:3:69"}],"functionName":{"name":"store_literal_in_memory_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f","nativeSrc":"63681:88:69","nodeType":"YulIdentifier","src":"63681:88:69"},"nativeSrc":"63681:93:69","nodeType":"YulFunctionCall","src":"63681:93:69"},"nativeSrc":"63681:93:69","nodeType":"YulExpressionStatement","src":"63681:93:69"},{"nativeSrc":"63783:19:69","nodeType":"YulAssignment","src":"63783:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"63794:3:69","nodeType":"YulIdentifier","src":"63794:3:69"},{"kind":"number","nativeSrc":"63799:2:69","nodeType":"YulLiteral","src":"63799:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"63790:3:69","nodeType":"YulIdentifier","src":"63790:3:69"},"nativeSrc":"63790:12:69","nodeType":"YulFunctionCall","src":"63790:12:69"},"variableNames":[{"name":"end","nativeSrc":"63783:3:69","nodeType":"YulIdentifier","src":"63783:3:69"}]}]},"name":"abi_encode_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f_to_t_string_memory_ptr_fromStack","nativeSrc":"63442:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"63576:3:69","nodeType":"YulTypedName","src":"63576:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"63584:3:69","nodeType":"YulTypedName","src":"63584:3:69","type":""}],"src":"63442:366:69"},{"body":{"nativeSrc":"63985:248:69","nodeType":"YulBlock","src":"63985:248:69","statements":[{"nativeSrc":"63995:26:69","nodeType":"YulAssignment","src":"63995:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"64007:9:69","nodeType":"YulIdentifier","src":"64007:9:69"},{"kind":"number","nativeSrc":"64018:2:69","nodeType":"YulLiteral","src":"64018:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"64003:3:69","nodeType":"YulIdentifier","src":"64003:3:69"},"nativeSrc":"64003:18:69","nodeType":"YulFunctionCall","src":"64003:18:69"},"variableNames":[{"name":"tail","nativeSrc":"63995:4:69","nodeType":"YulIdentifier","src":"63995:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"64042:9:69","nodeType":"YulIdentifier","src":"64042:9:69"},{"kind":"number","nativeSrc":"64053:1:69","nodeType":"YulLiteral","src":"64053:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"64038:3:69","nodeType":"YulIdentifier","src":"64038:3:69"},"nativeSrc":"64038:17:69","nodeType":"YulFunctionCall","src":"64038:17:69"},{"arguments":[{"name":"tail","nativeSrc":"64061:4:69","nodeType":"YulIdentifier","src":"64061:4:69"},{"name":"headStart","nativeSrc":"64067:9:69","nodeType":"YulIdentifier","src":"64067:9:69"}],"functionName":{"name":"sub","nativeSrc":"64057:3:69","nodeType":"YulIdentifier","src":"64057:3:69"},"nativeSrc":"64057:20:69","nodeType":"YulFunctionCall","src":"64057:20:69"}],"functionName":{"name":"mstore","nativeSrc":"64031:6:69","nodeType":"YulIdentifier","src":"64031:6:69"},"nativeSrc":"64031:47:69","nodeType":"YulFunctionCall","src":"64031:47:69"},"nativeSrc":"64031:47:69","nodeType":"YulExpressionStatement","src":"64031:47:69"},{"nativeSrc":"64087:139:69","nodeType":"YulAssignment","src":"64087:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"64221:4:69","nodeType":"YulIdentifier","src":"64221:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f_to_t_string_memory_ptr_fromStack","nativeSrc":"64095:124:69","nodeType":"YulIdentifier","src":"64095:124:69"},"nativeSrc":"64095:131:69","nodeType":"YulFunctionCall","src":"64095:131:69"},"variableNames":[{"name":"tail","nativeSrc":"64087:4:69","nodeType":"YulIdentifier","src":"64087:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"63814:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"63965:9:69","nodeType":"YulTypedName","src":"63965:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"63980:4:69","nodeType":"YulTypedName","src":"63980:4:69","type":""}],"src":"63814:419:69"},{"body":{"nativeSrc":"64345:115:69","nodeType":"YulBlock","src":"64345:115:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"64367:6:69","nodeType":"YulIdentifier","src":"64367:6:69"},{"kind":"number","nativeSrc":"64375:1:69","nodeType":"YulLiteral","src":"64375:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"64363:3:69","nodeType":"YulIdentifier","src":"64363:3:69"},"nativeSrc":"64363:14:69","nodeType":"YulFunctionCall","src":"64363:14:69"},{"hexValue":"45524332303a206275726e20616d6f756e7420657863656564732062616c616e","kind":"string","nativeSrc":"64379:34:69","nodeType":"YulLiteral","src":"64379:34:69","type":"","value":"ERC20: burn amount exceeds balan"}],"functionName":{"name":"mstore","nativeSrc":"64356:6:69","nodeType":"YulIdentifier","src":"64356:6:69"},"nativeSrc":"64356:58:69","nodeType":"YulFunctionCall","src":"64356:58:69"},"nativeSrc":"64356:58:69","nodeType":"YulExpressionStatement","src":"64356:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"64435:6:69","nodeType":"YulIdentifier","src":"64435:6:69"},{"kind":"number","nativeSrc":"64443:2:69","nodeType":"YulLiteral","src":"64443:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"64431:3:69","nodeType":"YulIdentifier","src":"64431:3:69"},"nativeSrc":"64431:15:69","nodeType":"YulFunctionCall","src":"64431:15:69"},{"hexValue":"6365","kind":"string","nativeSrc":"64448:4:69","nodeType":"YulLiteral","src":"64448:4:69","type":"","value":"ce"}],"functionName":{"name":"mstore","nativeSrc":"64424:6:69","nodeType":"YulIdentifier","src":"64424:6:69"},"nativeSrc":"64424:29:69","nodeType":"YulFunctionCall","src":"64424:29:69"},"nativeSrc":"64424:29:69","nodeType":"YulExpressionStatement","src":"64424:29:69"}]},"name":"store_literal_in_memory_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd","nativeSrc":"64239:221:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"64337:6:69","nodeType":"YulTypedName","src":"64337:6:69","type":""}],"src":"64239:221:69"},{"body":{"nativeSrc":"64612:220:69","nodeType":"YulBlock","src":"64612:220:69","statements":[{"nativeSrc":"64622:74:69","nodeType":"YulAssignment","src":"64622:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"64688:3:69","nodeType":"YulIdentifier","src":"64688:3:69"},{"kind":"number","nativeSrc":"64693:2:69","nodeType":"YulLiteral","src":"64693:2:69","type":"","value":"34"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"64629:58:69","nodeType":"YulIdentifier","src":"64629:58:69"},"nativeSrc":"64629:67:69","nodeType":"YulFunctionCall","src":"64629:67:69"},"variableNames":[{"name":"pos","nativeSrc":"64622:3:69","nodeType":"YulIdentifier","src":"64622:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"64794:3:69","nodeType":"YulIdentifier","src":"64794:3:69"}],"functionName":{"name":"store_literal_in_memory_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd","nativeSrc":"64705:88:69","nodeType":"YulIdentifier","src":"64705:88:69"},"nativeSrc":"64705:93:69","nodeType":"YulFunctionCall","src":"64705:93:69"},"nativeSrc":"64705:93:69","nodeType":"YulExpressionStatement","src":"64705:93:69"},{"nativeSrc":"64807:19:69","nodeType":"YulAssignment","src":"64807:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"64818:3:69","nodeType":"YulIdentifier","src":"64818:3:69"},{"kind":"number","nativeSrc":"64823:2:69","nodeType":"YulLiteral","src":"64823:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"64814:3:69","nodeType":"YulIdentifier","src":"64814:3:69"},"nativeSrc":"64814:12:69","nodeType":"YulFunctionCall","src":"64814:12:69"},"variableNames":[{"name":"end","nativeSrc":"64807:3:69","nodeType":"YulIdentifier","src":"64807:3:69"}]}]},"name":"abi_encode_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd_to_t_string_memory_ptr_fromStack","nativeSrc":"64466:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"64600:3:69","nodeType":"YulTypedName","src":"64600:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"64608:3:69","nodeType":"YulTypedName","src":"64608:3:69","type":""}],"src":"64466:366:69"},{"body":{"nativeSrc":"65009:248:69","nodeType":"YulBlock","src":"65009:248:69","statements":[{"nativeSrc":"65019:26:69","nodeType":"YulAssignment","src":"65019:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"65031:9:69","nodeType":"YulIdentifier","src":"65031:9:69"},{"kind":"number","nativeSrc":"65042:2:69","nodeType":"YulLiteral","src":"65042:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"65027:3:69","nodeType":"YulIdentifier","src":"65027:3:69"},"nativeSrc":"65027:18:69","nodeType":"YulFunctionCall","src":"65027:18:69"},"variableNames":[{"name":"tail","nativeSrc":"65019:4:69","nodeType":"YulIdentifier","src":"65019:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"65066:9:69","nodeType":"YulIdentifier","src":"65066:9:69"},{"kind":"number","nativeSrc":"65077:1:69","nodeType":"YulLiteral","src":"65077:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"65062:3:69","nodeType":"YulIdentifier","src":"65062:3:69"},"nativeSrc":"65062:17:69","nodeType":"YulFunctionCall","src":"65062:17:69"},{"arguments":[{"name":"tail","nativeSrc":"65085:4:69","nodeType":"YulIdentifier","src":"65085:4:69"},{"name":"headStart","nativeSrc":"65091:9:69","nodeType":"YulIdentifier","src":"65091:9:69"}],"functionName":{"name":"sub","nativeSrc":"65081:3:69","nodeType":"YulIdentifier","src":"65081:3:69"},"nativeSrc":"65081:20:69","nodeType":"YulFunctionCall","src":"65081:20:69"}],"functionName":{"name":"mstore","nativeSrc":"65055:6:69","nodeType":"YulIdentifier","src":"65055:6:69"},"nativeSrc":"65055:47:69","nodeType":"YulFunctionCall","src":"65055:47:69"},"nativeSrc":"65055:47:69","nodeType":"YulExpressionStatement","src":"65055:47:69"},{"nativeSrc":"65111:139:69","nodeType":"YulAssignment","src":"65111:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"65245:4:69","nodeType":"YulIdentifier","src":"65245:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd_to_t_string_memory_ptr_fromStack","nativeSrc":"65119:124:69","nodeType":"YulIdentifier","src":"65119:124:69"},"nativeSrc":"65119:131:69","nodeType":"YulFunctionCall","src":"65119:131:69"},"variableNames":[{"name":"tail","nativeSrc":"65111:4:69","nodeType":"YulIdentifier","src":"65111:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"64838:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"64989:9:69","nodeType":"YulTypedName","src":"64989:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"65004:4:69","nodeType":"YulTypedName","src":"65004:4:69","type":""}],"src":"64838:419:69"},{"body":{"nativeSrc":"65321:40:69","nodeType":"YulBlock","src":"65321:40:69","statements":[{"nativeSrc":"65332:22:69","nodeType":"YulAssignment","src":"65332:22:69","value":{"arguments":[{"name":"value","nativeSrc":"65348:5:69","nodeType":"YulIdentifier","src":"65348:5:69"}],"functionName":{"name":"mload","nativeSrc":"65342:5:69","nodeType":"YulIdentifier","src":"65342:5:69"},"nativeSrc":"65342:12:69","nodeType":"YulFunctionCall","src":"65342:12:69"},"variableNames":[{"name":"length","nativeSrc":"65332:6:69","nodeType":"YulIdentifier","src":"65332:6:69"}]}]},"name":"array_length_t_bytes_memory_ptr","nativeSrc":"65263:98:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"65304:5:69","nodeType":"YulTypedName","src":"65304:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"65314:6:69","nodeType":"YulTypedName","src":"65314:6:69","type":""}],"src":"65263:98:69"},{"body":{"nativeSrc":"65480:34:69","nodeType":"YulBlock","src":"65480:34:69","statements":[{"nativeSrc":"65490:18:69","nodeType":"YulAssignment","src":"65490:18:69","value":{"name":"pos","nativeSrc":"65505:3:69","nodeType":"YulIdentifier","src":"65505:3:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"65490:11:69","nodeType":"YulIdentifier","src":"65490:11:69"}]}]},"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"65367:147:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"65452:3:69","nodeType":"YulTypedName","src":"65452:3:69","type":""},{"name":"length","nativeSrc":"65457:6:69","nodeType":"YulTypedName","src":"65457:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"65468:11:69","nodeType":"YulTypedName","src":"65468:11:69","type":""}],"src":"65367:147:69"},{"body":{"nativeSrc":"65628:278:69","nodeType":"YulBlock","src":"65628:278:69","statements":[{"nativeSrc":"65638:52:69","nodeType":"YulVariableDeclaration","src":"65638:52:69","value":{"arguments":[{"name":"value","nativeSrc":"65684:5:69","nodeType":"YulIdentifier","src":"65684:5:69"}],"functionName":{"name":"array_length_t_bytes_memory_ptr","nativeSrc":"65652:31:69","nodeType":"YulIdentifier","src":"65652:31:69"},"nativeSrc":"65652:38:69","nodeType":"YulFunctionCall","src":"65652:38:69"},"variables":[{"name":"length","nativeSrc":"65642:6:69","nodeType":"YulTypedName","src":"65642:6:69","type":""}]},{"nativeSrc":"65699:95:69","nodeType":"YulAssignment","src":"65699:95:69","value":{"arguments":[{"name":"pos","nativeSrc":"65782:3:69","nodeType":"YulIdentifier","src":"65782:3:69"},{"name":"length","nativeSrc":"65787:6:69","nodeType":"YulIdentifier","src":"65787:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"65706:75:69","nodeType":"YulIdentifier","src":"65706:75:69"},"nativeSrc":"65706:88:69","nodeType":"YulFunctionCall","src":"65706:88:69"},"variableNames":[{"name":"pos","nativeSrc":"65699:3:69","nodeType":"YulIdentifier","src":"65699:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"65842:5:69","nodeType":"YulIdentifier","src":"65842:5:69"},{"kind":"number","nativeSrc":"65849:4:69","nodeType":"YulLiteral","src":"65849:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"65838:3:69","nodeType":"YulIdentifier","src":"65838:3:69"},"nativeSrc":"65838:16:69","nodeType":"YulFunctionCall","src":"65838:16:69"},{"name":"pos","nativeSrc":"65856:3:69","nodeType":"YulIdentifier","src":"65856:3:69"},{"name":"length","nativeSrc":"65861:6:69","nodeType":"YulIdentifier","src":"65861:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"65803:34:69","nodeType":"YulIdentifier","src":"65803:34:69"},"nativeSrc":"65803:65:69","nodeType":"YulFunctionCall","src":"65803:65:69"},"nativeSrc":"65803:65:69","nodeType":"YulExpressionStatement","src":"65803:65:69"},{"nativeSrc":"65877:23:69","nodeType":"YulAssignment","src":"65877:23:69","value":{"arguments":[{"name":"pos","nativeSrc":"65888:3:69","nodeType":"YulIdentifier","src":"65888:3:69"},{"name":"length","nativeSrc":"65893:6:69","nodeType":"YulIdentifier","src":"65893:6:69"}],"functionName":{"name":"add","nativeSrc":"65884:3:69","nodeType":"YulIdentifier","src":"65884:3:69"},"nativeSrc":"65884:16:69","nodeType":"YulFunctionCall","src":"65884:16:69"},"variableNames":[{"name":"end","nativeSrc":"65877:3:69","nodeType":"YulIdentifier","src":"65877:3:69"}]}]},"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"65520:386:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"65609:5:69","nodeType":"YulTypedName","src":"65609:5:69","type":""},{"name":"pos","nativeSrc":"65616:3:69","nodeType":"YulTypedName","src":"65616:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"65624:3:69","nodeType":"YulTypedName","src":"65624:3:69","type":""}],"src":"65520:386:69"},{"body":{"nativeSrc":"66046:137:69","nodeType":"YulBlock","src":"66046:137:69","statements":[{"nativeSrc":"66057:100:69","nodeType":"YulAssignment","src":"66057:100:69","value":{"arguments":[{"name":"value0","nativeSrc":"66144:6:69","nodeType":"YulIdentifier","src":"66144:6:69"},{"name":"pos","nativeSrc":"66153:3:69","nodeType":"YulIdentifier","src":"66153:3:69"}],"functionName":{"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"66064:79:69","nodeType":"YulIdentifier","src":"66064:79:69"},"nativeSrc":"66064:93:69","nodeType":"YulFunctionCall","src":"66064:93:69"},"variableNames":[{"name":"pos","nativeSrc":"66057:3:69","nodeType":"YulIdentifier","src":"66057:3:69"}]},{"nativeSrc":"66167:10:69","nodeType":"YulAssignment","src":"66167:10:69","value":{"name":"pos","nativeSrc":"66174:3:69","nodeType":"YulIdentifier","src":"66174:3:69"},"variableNames":[{"name":"end","nativeSrc":"66167:3:69","nodeType":"YulIdentifier","src":"66167:3:69"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nativeSrc":"65912:271:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"66025:3:69","nodeType":"YulTypedName","src":"66025:3:69","type":""},{"name":"value0","nativeSrc":"66031:6:69","nodeType":"YulTypedName","src":"66031:6:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"66042:3:69","nodeType":"YulTypedName","src":"66042:3:69","type":""}],"src":"65912:271:69"},{"body":{"nativeSrc":"66295:119:69","nodeType":"YulBlock","src":"66295:119:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"66317:6:69","nodeType":"YulIdentifier","src":"66317:6:69"},{"kind":"number","nativeSrc":"66325:1:69","nodeType":"YulLiteral","src":"66325:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"66313:3:69","nodeType":"YulIdentifier","src":"66313:3:69"},"nativeSrc":"66313:14:69","nodeType":"YulFunctionCall","src":"66313:14:69"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f","kind":"string","nativeSrc":"66329:34:69","nodeType":"YulLiteral","src":"66329:34:69","type":"","value":"Address: insufficient balance fo"}],"functionName":{"name":"mstore","nativeSrc":"66306:6:69","nodeType":"YulIdentifier","src":"66306:6:69"},"nativeSrc":"66306:58:69","nodeType":"YulFunctionCall","src":"66306:58:69"},"nativeSrc":"66306:58:69","nodeType":"YulExpressionStatement","src":"66306:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"66385:6:69","nodeType":"YulIdentifier","src":"66385:6:69"},{"kind":"number","nativeSrc":"66393:2:69","nodeType":"YulLiteral","src":"66393:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"66381:3:69","nodeType":"YulIdentifier","src":"66381:3:69"},"nativeSrc":"66381:15:69","nodeType":"YulFunctionCall","src":"66381:15:69"},{"hexValue":"722063616c6c","kind":"string","nativeSrc":"66398:8:69","nodeType":"YulLiteral","src":"66398:8:69","type":"","value":"r call"}],"functionName":{"name":"mstore","nativeSrc":"66374:6:69","nodeType":"YulIdentifier","src":"66374:6:69"},"nativeSrc":"66374:33:69","nodeType":"YulFunctionCall","src":"66374:33:69"},"nativeSrc":"66374:33:69","nodeType":"YulExpressionStatement","src":"66374:33:69"}]},"name":"store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","nativeSrc":"66189:225:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"66287:6:69","nodeType":"YulTypedName","src":"66287:6:69","type":""}],"src":"66189:225:69"},{"body":{"nativeSrc":"66566:220:69","nodeType":"YulBlock","src":"66566:220:69","statements":[{"nativeSrc":"66576:74:69","nodeType":"YulAssignment","src":"66576:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"66642:3:69","nodeType":"YulIdentifier","src":"66642:3:69"},{"kind":"number","nativeSrc":"66647:2:69","nodeType":"YulLiteral","src":"66647:2:69","type":"","value":"38"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"66583:58:69","nodeType":"YulIdentifier","src":"66583:58:69"},"nativeSrc":"66583:67:69","nodeType":"YulFunctionCall","src":"66583:67:69"},"variableNames":[{"name":"pos","nativeSrc":"66576:3:69","nodeType":"YulIdentifier","src":"66576:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"66748:3:69","nodeType":"YulIdentifier","src":"66748:3:69"}],"functionName":{"name":"store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","nativeSrc":"66659:88:69","nodeType":"YulIdentifier","src":"66659:88:69"},"nativeSrc":"66659:93:69","nodeType":"YulFunctionCall","src":"66659:93:69"},"nativeSrc":"66659:93:69","nodeType":"YulExpressionStatement","src":"66659:93:69"},{"nativeSrc":"66761:19:69","nodeType":"YulAssignment","src":"66761:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"66772:3:69","nodeType":"YulIdentifier","src":"66772:3:69"},{"kind":"number","nativeSrc":"66777:2:69","nodeType":"YulLiteral","src":"66777:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"66768:3:69","nodeType":"YulIdentifier","src":"66768:3:69"},"nativeSrc":"66768:12:69","nodeType":"YulFunctionCall","src":"66768:12:69"},"variableNames":[{"name":"end","nativeSrc":"66761:3:69","nodeType":"YulIdentifier","src":"66761:3:69"}]}]},"name":"abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack","nativeSrc":"66420:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"66554:3:69","nodeType":"YulTypedName","src":"66554:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"66562:3:69","nodeType":"YulTypedName","src":"66562:3:69","type":""}],"src":"66420:366:69"},{"body":{"nativeSrc":"66963:248:69","nodeType":"YulBlock","src":"66963:248:69","statements":[{"nativeSrc":"66973:26:69","nodeType":"YulAssignment","src":"66973:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"66985:9:69","nodeType":"YulIdentifier","src":"66985:9:69"},{"kind":"number","nativeSrc":"66996:2:69","nodeType":"YulLiteral","src":"66996:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"66981:3:69","nodeType":"YulIdentifier","src":"66981:3:69"},"nativeSrc":"66981:18:69","nodeType":"YulFunctionCall","src":"66981:18:69"},"variableNames":[{"name":"tail","nativeSrc":"66973:4:69","nodeType":"YulIdentifier","src":"66973:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"67020:9:69","nodeType":"YulIdentifier","src":"67020:9:69"},{"kind":"number","nativeSrc":"67031:1:69","nodeType":"YulLiteral","src":"67031:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"67016:3:69","nodeType":"YulIdentifier","src":"67016:3:69"},"nativeSrc":"67016:17:69","nodeType":"YulFunctionCall","src":"67016:17:69"},{"arguments":[{"name":"tail","nativeSrc":"67039:4:69","nodeType":"YulIdentifier","src":"67039:4:69"},{"name":"headStart","nativeSrc":"67045:9:69","nodeType":"YulIdentifier","src":"67045:9:69"}],"functionName":{"name":"sub","nativeSrc":"67035:3:69","nodeType":"YulIdentifier","src":"67035:3:69"},"nativeSrc":"67035:20:69","nodeType":"YulFunctionCall","src":"67035:20:69"}],"functionName":{"name":"mstore","nativeSrc":"67009:6:69","nodeType":"YulIdentifier","src":"67009:6:69"},"nativeSrc":"67009:47:69","nodeType":"YulFunctionCall","src":"67009:47:69"},"nativeSrc":"67009:47:69","nodeType":"YulExpressionStatement","src":"67009:47:69"},{"nativeSrc":"67065:139:69","nodeType":"YulAssignment","src":"67065:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"67199:4:69","nodeType":"YulIdentifier","src":"67199:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack","nativeSrc":"67073:124:69","nodeType":"YulIdentifier","src":"67073:124:69"},"nativeSrc":"67073:131:69","nodeType":"YulFunctionCall","src":"67073:131:69"},"variableNames":[{"name":"tail","nativeSrc":"67065:4:69","nodeType":"YulIdentifier","src":"67065:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"66792:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"66943:9:69","nodeType":"YulTypedName","src":"66943:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"66958:4:69","nodeType":"YulTypedName","src":"66958:4:69","type":""}],"src":"66792:419:69"},{"body":{"nativeSrc":"67323:73:69","nodeType":"YulBlock","src":"67323:73:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"67345:6:69","nodeType":"YulIdentifier","src":"67345:6:69"},{"kind":"number","nativeSrc":"67353:1:69","nodeType":"YulLiteral","src":"67353:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"67341:3:69","nodeType":"YulIdentifier","src":"67341:3:69"},"nativeSrc":"67341:14:69","nodeType":"YulFunctionCall","src":"67341:14:69"},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","kind":"string","nativeSrc":"67357:31:69","nodeType":"YulLiteral","src":"67357:31:69","type":"","value":"Address: call to non-contract"}],"functionName":{"name":"mstore","nativeSrc":"67334:6:69","nodeType":"YulIdentifier","src":"67334:6:69"},"nativeSrc":"67334:55:69","nodeType":"YulFunctionCall","src":"67334:55:69"},"nativeSrc":"67334:55:69","nodeType":"YulExpressionStatement","src":"67334:55:69"}]},"name":"store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","nativeSrc":"67217:179:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"67315:6:69","nodeType":"YulTypedName","src":"67315:6:69","type":""}],"src":"67217:179:69"},{"body":{"nativeSrc":"67548:220:69","nodeType":"YulBlock","src":"67548:220:69","statements":[{"nativeSrc":"67558:74:69","nodeType":"YulAssignment","src":"67558:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"67624:3:69","nodeType":"YulIdentifier","src":"67624:3:69"},{"kind":"number","nativeSrc":"67629:2:69","nodeType":"YulLiteral","src":"67629:2:69","type":"","value":"29"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"67565:58:69","nodeType":"YulIdentifier","src":"67565:58:69"},"nativeSrc":"67565:67:69","nodeType":"YulFunctionCall","src":"67565:67:69"},"variableNames":[{"name":"pos","nativeSrc":"67558:3:69","nodeType":"YulIdentifier","src":"67558:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"67730:3:69","nodeType":"YulIdentifier","src":"67730:3:69"}],"functionName":{"name":"store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","nativeSrc":"67641:88:69","nodeType":"YulIdentifier","src":"67641:88:69"},"nativeSrc":"67641:93:69","nodeType":"YulFunctionCall","src":"67641:93:69"},"nativeSrc":"67641:93:69","nodeType":"YulExpressionStatement","src":"67641:93:69"},{"nativeSrc":"67743:19:69","nodeType":"YulAssignment","src":"67743:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"67754:3:69","nodeType":"YulIdentifier","src":"67754:3:69"},{"kind":"number","nativeSrc":"67759:2:69","nodeType":"YulLiteral","src":"67759:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"67750:3:69","nodeType":"YulIdentifier","src":"67750:3:69"},"nativeSrc":"67750:12:69","nodeType":"YulFunctionCall","src":"67750:12:69"},"variableNames":[{"name":"end","nativeSrc":"67743:3:69","nodeType":"YulIdentifier","src":"67743:3:69"}]}]},"name":"abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack","nativeSrc":"67402:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"67536:3:69","nodeType":"YulTypedName","src":"67536:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"67544:3:69","nodeType":"YulTypedName","src":"67544:3:69","type":""}],"src":"67402:366:69"},{"body":{"nativeSrc":"67945:248:69","nodeType":"YulBlock","src":"67945:248:69","statements":[{"nativeSrc":"67955:26:69","nodeType":"YulAssignment","src":"67955:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"67967:9:69","nodeType":"YulIdentifier","src":"67967:9:69"},{"kind":"number","nativeSrc":"67978:2:69","nodeType":"YulLiteral","src":"67978:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"67963:3:69","nodeType":"YulIdentifier","src":"67963:3:69"},"nativeSrc":"67963:18:69","nodeType":"YulFunctionCall","src":"67963:18:69"},"variableNames":[{"name":"tail","nativeSrc":"67955:4:69","nodeType":"YulIdentifier","src":"67955:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"68002:9:69","nodeType":"YulIdentifier","src":"68002:9:69"},{"kind":"number","nativeSrc":"68013:1:69","nodeType":"YulLiteral","src":"68013:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"67998:3:69","nodeType":"YulIdentifier","src":"67998:3:69"},"nativeSrc":"67998:17:69","nodeType":"YulFunctionCall","src":"67998:17:69"},{"arguments":[{"name":"tail","nativeSrc":"68021:4:69","nodeType":"YulIdentifier","src":"68021:4:69"},{"name":"headStart","nativeSrc":"68027:9:69","nodeType":"YulIdentifier","src":"68027:9:69"}],"functionName":{"name":"sub","nativeSrc":"68017:3:69","nodeType":"YulIdentifier","src":"68017:3:69"},"nativeSrc":"68017:20:69","nodeType":"YulFunctionCall","src":"68017:20:69"}],"functionName":{"name":"mstore","nativeSrc":"67991:6:69","nodeType":"YulIdentifier","src":"67991:6:69"},"nativeSrc":"67991:47:69","nodeType":"YulFunctionCall","src":"67991:47:69"},"nativeSrc":"67991:47:69","nodeType":"YulExpressionStatement","src":"67991:47:69"},{"nativeSrc":"68047:139:69","nodeType":"YulAssignment","src":"68047:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"68181:4:69","nodeType":"YulIdentifier","src":"68181:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack","nativeSrc":"68055:124:69","nodeType":"YulIdentifier","src":"68055:124:69"},"nativeSrc":"68055:131:69","nodeType":"YulFunctionCall","src":"68055:131:69"},"variableNames":[{"name":"tail","nativeSrc":"68047:4:69","nodeType":"YulIdentifier","src":"68047:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"67774:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"67925:9:69","nodeType":"YulTypedName","src":"67925:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"67940:4:69","nodeType":"YulTypedName","src":"67940:4:69","type":""}],"src":"67774:419:69"}]},"contents":"{\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint256(value))\n    }\n\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function array_length_t_string_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function copy_memory_to_memory_with_cleanup(src, dst, length) {\n\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n        let length := array_length_t_string_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0,  tail)\n\n    }\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function validator_revert_t_uint256(value) {\n        if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_uint256(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_bool(value) -> cleaned {\n        cleaned := iszero(iszero(value))\n    }\n\n    function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n        mstore(pos, cleanup_t_bool(value))\n    }\n\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_bool_to_t_bool_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function cleanup_t_contract$_IERC20Upgradeable_$1352(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function validator_revert_t_contract$_IERC20Upgradeable_$1352(value) {\n        if iszero(eq(value, cleanup_t_contract$_IERC20Upgradeable_$1352(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_IERC20Upgradeable_$1352(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_contract$_IERC20Upgradeable_$1352(value)\n    }\n\n    function abi_decode_tuple_t_contract$_IERC20Upgradeable_$1352(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_IERC20Upgradeable_$1352(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_uint8(value) -> cleaned {\n        cleaned := and(value, 0xff)\n    }\n\n    function abi_encode_t_uint8_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint8_to_t_uint8_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3 {\n        if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 96\n\n            value3 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function identity(value) -> ret {\n        ret := value\n    }\n\n    function convert_t_uint160_to_t_uint160(value) -> converted {\n        converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n    }\n\n    function convert_t_uint160_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_uint160(value)\n    }\n\n    function convert_t_contract$_IComptroller_$16789_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_IComptroller_$16789_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_IComptroller_$16789_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_IComptroller_$16789__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_IComptroller_$16789_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_uint256t_address(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function convert_t_contract$_VToken_$15506_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_VToken_$15506_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_VToken_$15506__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_VToken_$15506_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_uint256t_addresst_address(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 64\n\n            value2 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address(value) -> converted {\n        converted := convert_t_uint160_to_t_address(value)\n    }\n\n    function abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack(value, pos) {\n        mstore(pos, convert_t_contract$_IAccessControlManagerV8_$5080_to_t_address(value))\n    }\n\n    function abi_encode_tuple_t_contract$_IAccessControlManagerV8_$5080__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_contract$_IAccessControlManagerV8_$5080_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function panic_error_0x22() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x22)\n        revert(0, 0x24)\n    }\n\n    function extract_byte_array_length(data) -> length {\n        length := div(data, 2)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) {\n            length := and(length, 0x7f)\n        }\n\n        if eq(outOfPlaceEncoding, lt(length, 32)) {\n            panic_error_0x22()\n        }\n    }\n\n    function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function panic_error_0x11() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n\n    function checked_add_t_uint8(x, y) -> sum {\n        x := cleanup_t_uint8(x)\n        y := cleanup_t_uint8(y)\n        sum := add(x, y)\n\n        if gt(sum, 0xff) { panic_error_0x11() }\n\n    }\n\n    function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n        revert(0, 0)\n    }\n\n    function panic_error_0x41() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n\n    function finalize_allocation(memPtr, size) {\n        let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n        // protect against overflow\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n\n    function allocate_memory(size) -> memPtr {\n        memPtr := allocate_unbounded()\n        finalize_allocation(memPtr, size)\n    }\n\n    function array_allocation_size_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr(length) -> size {\n        // Make sure we can allocate memory without overflow\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n        size := mul(length, 0x20)\n\n        // add length slot\n        size := add(size, 0x20)\n\n    }\n\n    function revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_contract$_RewardsDistributor_$12324(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function validator_revert_t_contract$_RewardsDistributor_$12324(value) {\n        if iszero(eq(value, cleanup_t_contract$_RewardsDistributor_$12324(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_RewardsDistributor_$12324_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_contract$_RewardsDistributor_$12324(value)\n    }\n\n    // contract RewardsDistributor[]\n    function abi_decode_available_length_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory(offset, length, end) -> array {\n        array := allocate_memory(array_allocation_size_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr(length))\n        let dst := array\n\n        mstore(array, length)\n        dst := add(array, 0x20)\n\n        let srcEnd := add(offset, mul(length, 0x20))\n        if gt(srcEnd, end) {\n            revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n        }\n        for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n        {\n\n            let elementPos := src\n\n            mstore(dst, abi_decode_t_contract$_RewardsDistributor_$12324_fromMemory(elementPos, end))\n            dst := add(dst, 0x20)\n        }\n    }\n\n    // contract RewardsDistributor[]\n    function abi_decode_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory(offset, end) -> array {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        let length := mload(offset)\n        array := abi_decode_available_length_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory(add(offset, 0x20), length, end)\n    }\n\n    function abi_decode_tuple_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := mload(add(headStart, 0))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value0 := abi_decode_t_array$_t_contract$_RewardsDistributor_$12324_$dyn_memory_ptr_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function panic_error_0x32() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n\n    function abi_decode_t_contract$_IERC20Upgradeable_$1352_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_contract$_IERC20Upgradeable_$1352(value)\n    }\n\n    function abi_decode_tuple_t_contract$_IERC20Upgradeable_$1352_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_IERC20Upgradeable_$1352_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function array_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function array_dataslot_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(ptr) -> data {\n        data := ptr\n\n        data := add(ptr, 0x20)\n\n    }\n\n    function abi_encode_t_contract$_VToken_$15506_to_t_address(value, pos) {\n        mstore(pos, convert_t_contract$_VToken_$15506_to_t_address(value))\n    }\n\n    function abi_encodeUpdatedPos_t_contract$_VToken_$15506_to_t_address(value0, pos) -> updatedPos {\n        abi_encode_t_contract$_VToken_$15506_to_t_address(value0, pos)\n        updatedPos := add(pos, 0x20)\n    }\n\n    function array_nextElement_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(ptr) -> next {\n        next := add(ptr, 0x20)\n    }\n\n    // contract VToken[] -> address[]\n    function abi_encode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack(value, pos)  -> end  {\n        let length := array_length_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack(pos, length)\n        let baseRef := array_dataslot_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(value)\n        let srcPtr := baseRef\n        for { let i := 0 } lt(i, length) { i := add(i, 1) }\n        {\n            let elementValue0 := mload(srcPtr)\n            pos := abi_encodeUpdatedPos_t_contract$_VToken_$15506_to_t_address(elementValue0, pos)\n            srcPtr := array_nextElement_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr(srcPtr)\n        }\n        end := pos\n    }\n\n    function abi_encode_tuple_t_address_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr__to_t_address_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        mstore(add(headStart, 32), sub(tail, headStart))\n        tail := abi_encode_t_array$_t_contract$_VToken_$15506_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack(value1,  tail)\n\n    }\n\n    function panic_error_0x21() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n\n    function validator_assert_t_enum$_IncomeType_$16797(value) {\n        if iszero(lt(value, 4)) { panic_error_0x21() }\n    }\n\n    function cleanup_t_enum$_IncomeType_$16797(value) -> cleaned {\n        cleaned := value validator_assert_t_enum$_IncomeType_$16797(value)\n    }\n\n    function convert_t_enum$_IncomeType_$16797_to_t_uint8(value) -> converted {\n        converted := cleanup_t_enum$_IncomeType_$16797(value)\n    }\n\n    function abi_encode_t_enum$_IncomeType_$16797_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, convert_t_enum$_IncomeType_$16797_to_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_enum$_IncomeType_$16797__to_t_address_t_address_t_uint8__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_enum$_IncomeType_$16797_to_t_uint8_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function checked_add_t_uint256(x, y) -> sum {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        sum := add(x, y)\n\n        if gt(x, sum) { panic_error_0x11() }\n\n    }\n\n    function store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759(memPtr) {\n\n        mstore(add(memPtr, 0), \"Initializable: contract is alrea\")\n\n        mstore(add(memPtr, 32), \"dy initialized\")\n\n    }\n\n    function abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 46)\n        store_literal_in_memory_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01(memPtr) {\n\n        mstore(add(memPtr, 0), \"deposit\")\n\n    }\n\n    function abi_encode_t_stringliteral_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 7)\n        store_literal_in_memory_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function checked_sub_t_uint256(x, y) -> diff {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        diff := sub(x, y)\n\n        if gt(diff, x) { panic_error_0x11() }\n\n    }\n\n    function store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc(memPtr) {\n\n        mstore(add(memPtr, 0), \"Ownable2Step: caller is not the \")\n\n        mstore(add(memPtr, 32), \"new owner\")\n\n    }\n\n    function abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 41)\n        store_literal_in_memory_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354(memPtr) {\n\n        mstore(add(memPtr, 0), \"mint\")\n\n    }\n\n    function abi_encode_t_stringliteral_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 4)\n        store_literal_in_memory_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_daf0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: decreased allowance below\")\n\n        mstore(add(memPtr, 32), \" zero\")\n\n    }\n\n    function abi_encode_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 37)\n        store_literal_in_memory_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77(memPtr) {\n\n        mstore(add(memPtr, 0), \"withdraw\")\n\n    }\n\n    function abi_encode_t_stringliteral_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 8)\n        store_literal_in_memory_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609(memPtr) {\n\n        mstore(add(memPtr, 0), \"redeem\")\n\n    }\n\n    function abi_encode_t_stringliteral_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 6)\n        store_literal_in_memory_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_26ef0a97332ad048ac544d8dfacdd43e128b9816d599fdd0310960904fa18609_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function cleanup_t_contract$_ComptrollerInterface_$9353(value) -> cleaned {\n        cleaned := cleanup_t_address(value)\n    }\n\n    function validator_revert_t_contract$_ComptrollerInterface_$9353(value) {\n        if iszero(eq(value, cleanup_t_contract$_ComptrollerInterface_$9353(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_ComptrollerInterface_$9353_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_contract$_ComptrollerInterface_$9353(value)\n    }\n\n    function abi_decode_tuple_t_contract$_ComptrollerInterface_$9353_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_ComptrollerInterface_$9353_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_t_address_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_rational_1_by_1(value) -> cleaned {\n        cleaned := value\n    }\n\n    function convert_t_rational_1_by_1_to_t_uint8(value) -> converted {\n        converted := cleanup_t_uint8(identity(cleanup_t_rational_1_by_1(value)))\n    }\n\n    function abi_encode_t_rational_1_by_1_to_t_uint8_fromStack(value, pos) {\n        mstore(pos, convert_t_rational_1_by_1_to_t_uint8(value))\n    }\n\n    function abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_rational_1_by_1_to_t_uint8_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function shift_right_1_unsigned(value) -> newValue {\n        newValue :=\n\n        shr(1, value)\n\n    }\n\n    function checked_exp_helper(_power, _base, exponent, max) -> power, base {\n        power := _power\n        base  := _base\n        for { } gt(exponent, 1) {}\n        {\n            // overflow check for base * base\n            if gt(base, div(max, base)) { panic_error_0x11() }\n            if and(exponent, 1)\n            {\n                // No checks for power := mul(power, base) needed, because the check\n                // for base * base above is sufficient, since:\n                // |power| <= base (proof by induction) and thus:\n                // |power * base| <= base * base <= max <= |min| (for signed)\n                // (this is equally true for signed and unsigned exp)\n                power := mul(power, base)\n            }\n            base := mul(base, base)\n            exponent := shift_right_1_unsigned(exponent)\n        }\n    }\n\n    function checked_exp_unsigned(base, exponent, max) -> power {\n        // This function currently cannot be inlined because of the\n        // \"leave\" statements. We have to improve the optimizer.\n\n        // Note that 0**0 == 1\n        if iszero(exponent) { power := 1 leave }\n        if iszero(base) { power := 0 leave }\n\n        // Specializations for small bases\n        switch base\n        // 0 is handled above\n        case 1 { power := 1 leave }\n        case 2\n        {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := exp(2, exponent)\n            if gt(power, max) { panic_error_0x11() }\n            leave\n        }\n        if or(\n            and(lt(base, 11), lt(exponent, 78)),\n            and(lt(base, 307), lt(exponent, 32))\n        )\n        {\n            power := exp(base, exponent)\n            if gt(power, max) { panic_error_0x11() }\n            leave\n        }\n\n        power, base := checked_exp_helper(1, base, exponent, max)\n\n        if gt(power, div(max, base)) { panic_error_0x11() }\n        power := mul(power, base)\n    }\n\n    function checked_exp_t_uint256_t_uint8(base, exponent) -> power {\n        base := cleanup_t_uint256(base)\n        exponent := cleanup_t_uint8(exponent)\n\n        power := checked_exp_unsigned(base, exponent, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n\n    }\n\n    function store_literal_in_memory_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: approve from the zero add\")\n\n        mstore(add(memPtr, 32), \"ress\")\n\n    }\n\n    function abi_encode_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 36)\n        store_literal_in_memory_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: approve to the zero addre\")\n\n        mstore(add(memPtr, 32), \"ss\")\n\n    }\n\n    function abi_encode_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 34)\n        store_literal_in_memory_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe(memPtr) {\n\n        mstore(add(memPtr, 0), \"Ownable: caller is not the owner\")\n\n    }\n\n    function abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 32)\n        store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb(memPtr) {\n\n        mstore(add(memPtr, 0), \"invalid acess control manager ad\")\n\n        mstore(add(memPtr, 32), \"dress\")\n\n    }\n\n    function abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 37)\n        store_literal_in_memory_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function store_literal_in_memory_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: insufficient allowance\")\n\n    }\n\n    function abi_encode_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 29)\n        store_literal_in_memory_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: transfer from the zero ad\")\n\n        mstore(add(memPtr, 32), \"dress\")\n\n    }\n\n    function abi_encode_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 37)\n        store_literal_in_memory_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: transfer to the zero addr\")\n\n        mstore(add(memPtr, 32), \"ess\")\n\n    }\n\n    function abi_encode_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 35)\n        store_literal_in_memory_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: transfer amount exceeds b\")\n\n        mstore(add(memPtr, 32), \"alance\")\n\n    }\n\n    function abi_encode_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 38)\n        store_literal_in_memory_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function validator_revert_t_uint8(value) {\n        if iszero(eq(value, cleanup_t_uint8(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_uint8_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_uint8(value)\n    }\n\n    function abi_decode_tuple_t_uint8_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_uint8_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function checked_sub_t_uint8(x, y) -> diff {\n        x := cleanup_t_uint8(x)\n        y := cleanup_t_uint8(y)\n        diff := sub(x, y)\n\n        if gt(diff, 0xff) { panic_error_0x11() }\n\n    }\n\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b(memPtr) {\n\n        mstore(add(memPtr, 0), \"Initializable: contract is not i\")\n\n        mstore(add(memPtr, 32), \"nitializing\")\n\n    }\n\n    function abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 43)\n        store_literal_in_memory_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032(memPtr) {\n\n        mstore(add(memPtr, 0), \"Comptroller: Invalid maxLoopsLim\")\n\n        mstore(add(memPtr, 32), \"it\")\n\n    }\n\n    function abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 34)\n        store_literal_in_memory_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_23be8481e5bb726fcd00b9916eba154f9378f4b75b3d3907a24febd0531c6032_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619(memPtr) {\n\n        mstore(add(memPtr, 0), \"ReentrancyGuard: reentrant call\")\n\n    }\n\n    function abi_encode_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 31)\n        store_literal_in_memory_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137(memPtr) {\n\n        mstore(add(memPtr, 0), \"vTokensReceived at _deposit\")\n\n    }\n\n    function abi_encode_t_stringliteral_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 27)\n        store_literal_in_memory_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_5bf4ec2861b78a7f0b7adbd8b1e7eab1e968de690ffce90f608b67ef9a870137_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function checked_mul_t_uint256(x, y) -> product {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        let product_raw := mul(x, y)\n        product := cleanup_t_uint256(product_raw)\n\n        // overflow, if x != 0 and y != product/x\n        if iszero(\n            or(\n                iszero(x),\n                eq(y, div(product, x))\n            )\n        ) { panic_error_0x11() }\n\n    }\n\n    function panic_error_0x12() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n\n    function checked_div_t_uint256(x, y) -> r {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        if iszero(y) { panic_error_0x12() }\n\n        r := div(x, y)\n    }\n\n    function abi_encode_tuple_t_address_t_string_memory_ptr__to_t_address_t_string_memory_ptr__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        mstore(add(headStart, 32), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value1,  tail)\n\n    }\n\n    function validator_revert_t_bool(value) {\n        if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_bool_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_bool(value)\n    }\n\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_bool_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_string_memory_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        mstore(add(headStart, 64), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value2,  tail)\n\n    }\n\n    function store_literal_in_memory_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e(memPtr) {\n\n        mstore(add(memPtr, 0), \"actualVTokens at _beforeWithdraw\")\n\n    }\n\n    function abi_encode_t_stringliteral_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 32)\n        store_literal_in_memory_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_fd4ef6a4791eb729ab9b0b87467a7545d72ea7ba31d1f474d2b128b6e05e911e_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n        revert(0, 0)\n    }\n\n    function array_allocation_size_t_string_memory_ptr(length) -> size {\n        // Make sure we can allocate memory without overflow\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n        size := round_up_to_mul_of_32(length)\n\n        // add length slot\n        size := add(size, 0x20)\n\n    }\n\n    function abi_decode_available_length_t_string_memory_ptr_fromMemory(src, length, end) -> array {\n        array := allocate_memory(array_allocation_size_t_string_memory_ptr(length))\n        mstore(array, length)\n        let dst := add(array, 0x20)\n        if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n        copy_memory_to_memory_with_cleanup(src, dst, length)\n    }\n\n    // string\n    function abi_decode_t_string_memory_ptr_fromMemory(offset, end) -> array {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        let length := mload(offset)\n        array := abi_decode_available_length_t_string_memory_ptr_fromMemory(add(offset, 0x20), length, end)\n    }\n\n    function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := mload(add(headStart, 0))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value0 := abi_decode_t_string_memory_ptr_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n        updated_pos := pos\n    }\n\n    function store_literal_in_memory_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC4626-Wrapped Venus \")\n\n    }\n\n    function abi_encode_t_stringliteral_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f_to_t_string_memory_ptr_nonPadded_inplace_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, 22)\n        store_literal_in_memory_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f(pos)\n        end := add(pos, 22)\n    }\n\n    function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n        let length := array_length_t_string_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, length)\n    }\n\n    function abi_encode_tuple_packed_t_stringliteral_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n        pos := abi_encode_t_stringliteral_7def5e38e768a2edb9609cbbc4586921fc7fb9bd828766627f5f41531233796f_to_t_string_memory_ptr_nonPadded_inplace_fromStack( pos)\n\n        pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value0,  pos)\n\n        end := pos\n    }\n\n    function store_literal_in_memory_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526(memPtr) {\n\n        mstore(add(memPtr, 0), \"v4626\")\n\n    }\n\n    function abi_encode_t_stringliteral_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526_to_t_string_memory_ptr_nonPadded_inplace_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, 5)\n        store_literal_in_memory_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526(pos)\n        end := add(pos, 5)\n    }\n\n    function abi_encode_tuple_packed_t_stringliteral_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n        pos := abi_encode_t_stringliteral_43a4bac29d311b28d1e0c922d89042e98561d74718822ad4e24ebed56a578526_to_t_string_memory_ptr_nonPadded_inplace_fromStack( pos)\n\n        pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value0,  pos)\n\n        end := pos\n    }\n\n    function store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd(memPtr) {\n\n        mstore(add(memPtr, 0), \"SafeERC20: ERC20 operation did n\")\n\n        mstore(add(memPtr, 32), \"ot succeed\")\n\n    }\n\n    function abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 42)\n        store_literal_in_memory_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value2,  add(headStart, 64))\n\n    }\n\n    function array_dataslot_t_string_storage(ptr) -> data {\n        data := ptr\n\n        mstore(0, ptr)\n        data := keccak256(0, 0x20)\n\n    }\n\n    function divide_by_32_ceil(value) -> result {\n        result := div(add(value, 31), 32)\n    }\n\n    function shift_left_dynamic(bits, value) -> newValue {\n        newValue :=\n\n        shl(bits, value)\n\n    }\n\n    function update_byte_slice_dynamic32(value, shiftBytes, toInsert) -> result {\n        let shiftBits := mul(shiftBytes, 8)\n        let mask := shift_left_dynamic(shiftBits, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n        toInsert := shift_left_dynamic(shiftBits, toInsert)\n        value := and(value, not(mask))\n        result := or(value, and(toInsert, mask))\n    }\n\n    function convert_t_uint256_to_t_uint256(value) -> converted {\n        converted := cleanup_t_uint256(identity(cleanup_t_uint256(value)))\n    }\n\n    function prepare_store_t_uint256(value) -> ret {\n        ret := value\n    }\n\n    function update_storage_value_t_uint256_to_t_uint256(slot, offset, value_0) {\n        let convertedValue_0 := convert_t_uint256_to_t_uint256(value_0)\n        sstore(slot, update_byte_slice_dynamic32(sload(slot), offset, prepare_store_t_uint256(convertedValue_0)))\n    }\n\n    function zero_value_for_split_t_uint256() -> ret {\n        ret := 0\n    }\n\n    function storage_set_to_zero_t_uint256(slot, offset) {\n        let zero_0 := zero_value_for_split_t_uint256()\n        update_storage_value_t_uint256_to_t_uint256(slot, offset, zero_0)\n    }\n\n    function clear_storage_range_t_bytes1(start, end) {\n        for {} lt(start, end) { start := add(start, 1) }\n        {\n            storage_set_to_zero_t_uint256(start, 0)\n        }\n    }\n\n    function clean_up_bytearray_end_slots_t_string_storage(array, len, startIndex) {\n\n        if gt(len, 31) {\n            let dataArea := array_dataslot_t_string_storage(array)\n            let deleteStart := add(dataArea, divide_by_32_ceil(startIndex))\n            // If we are clearing array to be short byte array, we want to clear only data starting from array data area.\n            if lt(startIndex, 32) { deleteStart := dataArea }\n            clear_storage_range_t_bytes1(deleteStart, add(dataArea, divide_by_32_ceil(len)))\n        }\n\n    }\n\n    function shift_right_unsigned_dynamic(bits, value) -> newValue {\n        newValue :=\n\n        shr(bits, value)\n\n    }\n\n    function mask_bytes_dynamic(data, bytes) -> result {\n        let mask := not(shift_right_unsigned_dynamic(mul(8, bytes), not(0)))\n        result := and(data, mask)\n    }\n    function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used {\n        // we want to save only elements that are part of the array after resizing\n        // others should be set to zero\n        data := mask_bytes_dynamic(data, len)\n        used := or(data, mul(2, len))\n    }\n    function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src) {\n\n        let newLen := array_length_t_string_memory_ptr(src)\n        // Make sure array length is sane\n        if gt(newLen, 0xffffffffffffffff) { panic_error_0x41() }\n\n        let oldLen := extract_byte_array_length(sload(slot))\n\n        // potentially truncate data\n        clean_up_bytearray_end_slots_t_string_storage(slot, oldLen, newLen)\n\n        let srcOffset := 0\n\n        srcOffset := 0x20\n\n        switch gt(newLen, 31)\n        case 1 {\n            let loopEnd := and(newLen, not(0x1f))\n\n            let dstPtr := array_dataslot_t_string_storage(slot)\n            let i := 0\n            for { } lt(i, loopEnd) { i := add(i, 0x20) } {\n                sstore(dstPtr, mload(add(src, srcOffset)))\n                dstPtr := add(dstPtr, 1)\n                srcOffset := add(srcOffset, 32)\n            }\n            if lt(loopEnd, newLen) {\n                let lastValue := mload(add(src, srcOffset))\n                sstore(dstPtr, mask_bytes_dynamic(lastValue, and(newLen, 0x1f)))\n            }\n            sstore(slot, add(mul(newLen, 2), 1))\n        }\n        default {\n            let value := 0\n            if newLen {\n                value := mload(add(src, srcOffset))\n            }\n            sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n        }\n    }\n\n    function store_literal_in_memory_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851(memPtr) {\n\n        mstore(add(memPtr, 0), \"Math: mulDiv overflow\")\n\n    }\n\n    function abi_encode_t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 21)\n        store_literal_in_memory_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25(memPtr) {\n\n        mstore(add(memPtr, 0), \"SafeERC20: approve from non-zero\")\n\n        mstore(add(memPtr, 32), \" to non-zero allowance\")\n\n    }\n\n    function abi_encode_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 54)\n        store_literal_in_memory_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: mint to the zero address\")\n\n    }\n\n    function abi_encode_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 31)\n        store_literal_in_memory_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: burn from the zero addres\")\n\n        mstore(add(memPtr, 32), \"s\")\n\n    }\n\n    function abi_encode_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 33)\n        store_literal_in_memory_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC20: burn amount exceeds balan\")\n\n        mstore(add(memPtr, 32), \"ce\")\n\n    }\n\n    function abi_encode_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 34)\n        store_literal_in_memory_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function array_length_t_bytes_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n        updated_pos := pos\n    }\n\n    function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n        let length := array_length_t_bytes_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, length)\n    }\n\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n        pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0,  pos)\n\n        end := pos\n    }\n\n    function store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c(memPtr) {\n\n        mstore(add(memPtr, 0), \"Address: insufficient balance fo\")\n\n        mstore(add(memPtr, 32), \"r call\")\n\n    }\n\n    function abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 38)\n        store_literal_in_memory_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad(memPtr) {\n\n        mstore(add(memPtr, 0), \"Address: call to non-contract\")\n\n    }\n\n    function abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 29)\n        store_literal_in_memory_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106102f15760003560e01c806379ba50971161019d578063be26317e116100e9578063dcd9bb42116100a2578063e521136f1161007c578063e521136f14610690578063ef8b30f714610619578063f2fde38b146106a3578063f7ea7a3d146106b657600080fd5b8063dcd9bb4214610658578063dd62ed3e1461066c578063e30c39781461067f57600080fd5b8063be26317e146105e6578063c4d66de8146105f0578063c63d75b614610603578063c6e6f59214610619578063ce96cb771461062c578063d905777e1461064257600080fd5b8063a457c2d711610156578063b460af9411610130578063b460af941461059b578063b4a0bdf3146105ae578063ba087652146105bf578063bb371fdd146105d257600080fd5b8063a457c2d714610562578063a9059cbb14610575578063b3d7f6b91461058857600080fd5b806379ba50971461050757806380d45a2d1461050f5780638da5cb5b1461052257806394bf804d1461053357806395d89b41146105465780639bb1a99c1461054e57600080fd5b8063313ce5671161025c57806346ddb7db116102155780635fe3b567116101ef5780635fe3b567146104a25780636e553f65146104c357806370a08231146104d6578063715018a6146104ff57600080fd5b806346ddb7db146104635780634cdad50614610326578063547520fe1461048e57600080fd5b8063313ce567146103f9578063372500ab1461040e57806338d52e0f146104165780633950935114610427578063402d267d1461043a57806341e11a5a1461045057600080fd5b80631765b313116102ae5780631765b3131461038157806317f333401461039557806318160ddd146103b65780631be19560146103bf57806320f4af43146103d257806323b872dd146103e657600080fd5b806301e1d114146102f657806306fdde031461031157806307a2d13a14610326578063095ea7b3146103395780630a28a477146103595780630e32cb861461036c575b600080fd5b610195545b6040516103089190612f7b565b60405180910390f35b6103196106ca565b6040516103089190612fdf565b6102fb610334366004613008565b61075c565b61034c61034736600461304e565b61076f565b6040516103089190613093565b6102fb610367366004613008565b610787565b61037f61037a3660046130a1565b610794565b005b61037f61038f366004613008565b61019555565b610193546103a9906001600160a01b031681565b60405161030891906130cb565b61019a546102fb565b61037f6103cd3660046130f8565b6107a8565b61037f6103e0366004613008565b61019955565b61034c6103f4366004613119565b61089a565b6104016108c0565b6040516103089190613172565b61037f6108e6565b6065546001600160a01b03166103a9565b61034c61043536600461304e565b610be8565b6102fb6104483660046130a1565b506101965490565b61037f61045e366004613180565b610c0a565b61037f61047136600461304e565b6001600160a01b0390911660009081526101946020526040902055565b61037f61049c366004613008565b61019855565b610192546104b6906001600160a01b031681565b6040516103089190613226565b6102fb6104d1366004613234565b610cdc565b6102fb6104e43660046130a1565b6001600160a01b031660009081526033602052604090205490565b61037f610e1e565b61037f610e32565b61037f61051d366004613008565b610e67565b6097546001600160a01b03166103a9565b6102fb610541366004613234565b610eae565b610319610fc8565b610191546104b6906001600160a01b031681565b61034c61057036600461304e565b610fd7565b61034c61058336600461304e565b61101f565b6102fb610596366004613008565b61102d565b6102fb6105a9366004613267565b61103a565b60fb546001600160a01b03166104b6565b6102fb6105cd366004613267565b611147565b61037f6105e0366004613008565b61019655565b6102fb61012d5481565b61037f6105fe3660046130a1565b61126b565b6102fb6106113660046130a1565b506101985490565b6102fb610627366004613008565b61146f565b6102fb61063a3660046130a1565b506101975490565b6102fb6106503660046130a1565b506101995490565b61037f610666366004613008565b61019755565b6102fb61067a3660046132ad565b61147c565b60c9546001600160a01b03166103a9565b61037f61069e3660046130a1565b6114a7565b61037f6106b13660046130a1565b6114ee565b61037f6106c4366004613008565b61019a55565b6060603680546106d9906132e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610705906132e5565b80156107525780601f1061072757610100808354040283529160200191610752565b820191906000526020600020905b81548152906001019060200180831161073557829003601f168201915b5050505050905090565b600061076982600061155f565b92915050565b60003361077d8185856115a3565b5060019392505050565b600061076982600161164a565b61079c61167f565b6107a5816116a9565b50565b6107b061167f565b6040516370a0823160e01b81526000906001600160a01b038316906370a08231906107df9030906004016130cb565b602060405180830381865afa1580156107fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610820919061331c565b9050801561089657600061083c6097546001600160a01b031690565b9050610849838284611722565b806001600160a01b0316836001600160a01b03167f6d25be279134f4ecaa4770aff0c3d916d9e7c5ef37b65ed95dbdba411f5d54d58460405161088c9190612f7b565b60405180910390a3505b5050565b6000336108a885828561177d565b6108b38585856117c7565b60019150505b9392505050565b60006108ca6118b7565b6065546108e19190600160a01b900460ff16613353565b905090565b610192546101915461019354604080516361252fd160e01b815290516001600160a01b0394851694938416939092169160009185916361252fd19160048082019286929091908290030181865afa158015610945573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261096d9190810190613482565b90506109798151611937565b60005b8151811015610be1576000828281518110610999576109996134bd565b602002602001015190506000816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0791906134d3565b60408051600180825281830190925291925060009190602080830190803683370190505090508681600081518110610a4157610a416134bd565b6001600160a01b039283166020918202929092010152604051624caeb160e41b8152908416906304caeb1090610a7d9030908590600401613551565b600060405180830381600087803b158015610a9757600080fd5b505af1158015610aab573d6000803e3d6000fd5b50506040516370a0823160e01b8152600092506001600160a01b03851691506370a0823190610ade9030906004016130cb565b602060405180830381865afa158015610afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1f919061331c565b90508015610b9057610b32838883611722565b6040516305bebb3b60e21b81526001600160a01b038816906316faecec90610b63908c9087906002906004016135b5565b600060405180830381600087803b158015610b7d57600080fd5b505af1925050508015610b8e575060015b505b826001600160a01b03167fba56c3ab1f752776eef60db959a4e6b643e89595315edbbd945e104623fa03ba82604051610bc99190612f7b565b60405180910390a250506001909201915061097c9050565b5050505050565b60003361077d818585610bfb838361147c565b610c0591906135dd565b6115a3565b600054600290610100900460ff16158015610c2c575060005460ff8083169116105b610c515760405162461bcd60e51b8152600401610c489061363e565b60405180910390fd5b6000805461ffff191660ff831617610100179055610c6e82611962565b610c7785611989565b610c80836119c1565b610c8984611a1e565b610c9282611a85565b6000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890610ccd908390613172565b60405180910390a15050505050565b6000610ce6611a9e565b610cef82611962565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d69919061331c565b5082600003610d8b576040516304dd32c560e11b8152600401610c489061366f565b61019654831115610daf576040516326ac6ee160e01b815260040160405180910390fd5b6000610dba8461146f565b905080600003610ddd576040516304dd32c560e11b8152600401610c489061366f565b6000610de961019a5490565b9050610df733858785611ac9565b600081610e0461019a5490565b610e0e919061367f565b9350505050610769600161015f55565b610e2661167f565b610e306000611a85565b565b60c95433906001600160a01b03168114610e5e5760405162461bcd60e51b8152600401610c48906136d8565b6107a581611a85565b610ea56040518060400160405280601981526020017f7365744d61784c6f6f70734c696d69742875696e743235362900000000000000815250611e70565b6107a5816119c1565b6000610eb8611a9e565b610ec182611962565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610f17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3b919061331c565b5082600003610f5d576040516304dd32c560e11b8152600401610c4890613703565b61019854831115610f81576040516340868f7960e01b815260040160405180910390fd5b6000610f8c8461102d565b905080600003610faf576040516304dd32c560e11b8152600401610c4890613703565b610fbb33848387611ac9565b9050610769600161015f55565b6060603780546106d9906132e5565b60003381610fe5828661147c565b9050838110156110075760405162461bcd60e51b8152600401610c4890613755565b61101482868684036115a3565b506001949350505050565b60003361077d8185856117c7565b600061076982600161155f565b6000611044611a9e565b61104d83611962565b61105682611962565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156110ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d0919061331c565b50836000036110f2576040516304dd32c560e11b8152600401610c4890613784565b610197548411156111165760405163e9ed951560e01b815260040160405180910390fd5b60008061112286611f0a565b915091506111396111303390565b868685856121ff565b9150506108b9600161015f55565b6000611151611a9e565b61115a83611962565b61116382611962565b61019160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156111b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111dd919061331c565b50836000036111ff576040516304dd32c560e11b8152600401610c48906137b1565b6101995484111561122357604051638890247960e01b815260040160405180910390fd5b600061122e856122a2565b905080600003611251576040516304dd32c560e11b8152600401610c48906137b1565b61125e33858584896121ff565b90506108b9600161015f55565b600054610100900460ff161580801561128b5750600054600160ff909116105b806112a55750303b1580156112a5575060005460ff166001145b6112c15760405162461bcd60e51b8152600401610c489061363e565b6000805460ff1916600117905580156112e4576000805461ff0019166101001790555b6112ed82611962565b61019180546001600160a01b0319166001600160a01b03841690811790915560408051635fe3b56760e01b81529051635fe3b567916004808201926020929091908290030181865afa158015611347573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136b91906134d3565b61019280546001600160a01b0319166001600160a01b039283161790556101915460408051636f307dc360e01b815290516000939290921691636f307dc3916004808201926020929091908290030181865afa1580156113cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f391906137cc565b905061140f611401826124f1565b61140a8361257f565b6125f7565b61141881612628565b611420612658565b508015610896576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989061146390600190613801565b60405180910390a15050565b600061076982600061164a565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6114e56040518060400160405280601b81526020017f736574526577617264526563697069656e742861646472657373290000000000815250611e70565b6107a581611a1e565b6114f661167f565b60c980546001600160a01b0383166001600160a01b031990911681179091556115276097546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60006108b961156e6101955490565b6115799060016135dd565b6115816118b7565b61158c90600a61391d565b61019a5461159a91906135dd565b85919085612687565b6001600160a01b0383166115c95760405162461bcd60e51b8152600401610c4890613973565b6001600160a01b0382166115ef5760405162461bcd60e51b8152600401610c48906139c2565b6001600160a01b0380841660008181526034602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061088c908590612f7b565b60006108b96116576118b7565b61166290600a61391d565b61019a5461167091906135dd565b6101955461159a9060016135dd565b6097546001600160a01b03163314610e305760405162461bcd60e51b8152600401610c4890613a04565b6001600160a01b0381166116cf5760405162461bcd60e51b8152600401610c4890613a56565b60fb80546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa0906114639083908590613a66565b6117788363a9059cbb60e01b8484604051602401611741929190613a81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526126e6565b505050565b6000611789848461147c565b905060001981146117c157818110156117b45760405162461bcd60e51b8152600401610c4890613ad0565b6117c184848484036115a3565b50505050565b6001600160a01b0383166117ed5760405162461bcd60e51b8152600401610c4890613b22565b6001600160a01b0382166118135760405162461bcd60e51b8152600401610c4890613b72565b6001600160a01b0383166000908152603360205260409020548181101561184c5760405162461bcd60e51b8152600401610c4890613bc5565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906118aa908690612f7b565b60405180910390a36117c1565b60006118cb6065546001600160a01b031690565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611908573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192c9190613be9565b6108e1906012613c0a565b61012d548111156107a55761012d548160405163792bfb1b60e11b8152600401610c48929190613c27565b6001600160a01b0381166107a5576040516342bcdf7f60e11b815260040160405180910390fd5b600054610100900460ff166119b05760405162461bcd60e51b8152600401610c4890613c7d565b6119b8612778565b6107a5816127a7565b61012d5481116119e35760405162461bcd60e51b8152600401610c4890613ccc565b61012d8054908290556040517fc2d09fef144f7c8a86f71ea459f8fc17f675768eb1ae369cbd77fb31d467aafa906114639083908590613c27565b611a2781611962565b610193546040516001600160a01b038084169216907fc8c11bb97ac2ffa10ce2e2a98f4c1fd8df84cfa2e1a15e013ed2383ab1f527ad90600090a361019380546001600160a01b0319166001600160a01b0392909216919091179055565b60c980546001600160a01b03191690556107a5816127ce565b600261015f5403611ac15760405162461bcd60e51b8152600401610c4890613d10565b600261015f55565b6000611add6065546001600160a01b031690565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611b0891906130cb565b602060405180830381865afa158015611b25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b49919061331c565b610191546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611b809030906004016130cb565b602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc1919061331c565b9050611be0611bd86065546001600160a01b031690565b873087612820565b600082611bf56065546001600160a01b031690565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611c2091906130cb565b602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c61919061331c565b611c6b919061367f565b9050611c7681612841565b610191546040516370a0823160e01b815260009184916001600160a01b03909116906370a0823190611cac9030906004016130cb565b602060405180830381865afa158015611cc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ced919061331c565b611cf7919061367f565b905080600003611d1a576040516304dd32c560e11b8152600401610c4890613d54565b6000670de0b6b3a764000061019160009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9d919061331c565b611da79084613d64565b611db19190613d99565b90506000611e03611dc06118b7565b611dcb90600a61391d565b61019a54611dd991906135dd565b83611de46101955490565b611def9060016135dd565b611df9919061367f565b8491906000612687565b9050611e0f898261290d565b886001600160a01b03168a6001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78a84604051611e54929190613c27565b60405180910390a350505050505050505050565b600161015f55565b60fb546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab90611ea39033908690600401613dad565b602060405180830381865afa158015611ec0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee49190613de0565b90508061089657333083604051634a3fa29360e01b8152600401610c4893929190613e01565b6000806000611f216065546001600160a01b031690565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611f5191906130cb565b602060405180830381865afa158015611f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f92919061331c565b610191546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611fc99030906004016130cb565b602060405180830381865afa158015611fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200a919061331c565b6101915460405163852a12e360e01b81529192506000916001600160a01b039091169063852a12e390612041908a90600401612f7b565b6020604051808303816000875af1158015612060573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612084919061331c565b905080156120a75780604051630864657760e21b8152600401610c489190612f7b565b6040516370a0823160e01b815283906001600160a01b038616906370a08231906120d59030906004016130cb565b602060405180830381865afa1580156120f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612116919061331c565b612120919061367f565b610191546040516370a0823160e01b81529197506000916001600160a01b03909116906370a08231906121579030906004016130cb565b602060405180830381865afa158015612174573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612198919061331c565b6121a2908461367f565b9050806000036121c5576040516304dd32c560e11b8152600401610c4890613e69565b6121f36121d06118b7565b6121db90600a61391d565b61019a546121e991906135dd565b8290856001612687565b95505050505050915091565b826001600160a01b0316856001600160a01b0316146122235761222383868361177d565b61222d838261295e565b606554612244906001600160a01b03168584611722565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051612293929190613c27565b60405180910390a45050505050565b6000806122b76065546001600160a01b031690565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016122e791906130cb565b602060405180830381865afa158015612304573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612328919061331c565b610191546040516370a0823160e01b81529192506000916123cd916001600160a01b0316906370a08231906123619030906004016130cb565b602060405180830381865afa15801561237e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a2919061331c565b6123aa6118b7565b6123b590600a61391d565b61019a546123c391906135dd565b8791906000612687565b6101915460405163db006a7560e01b81529192506000916001600160a01b039091169063db006a7590612404908590600401612f7b565b6020604051808303816000875af1158015612423573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612447919061331c565b9050801561246a5780604051630864657760e21b8152600401610c489190612f7b565b6040516370a0823160e01b81526000906001600160a01b038616906370a08231906124999030906004016130cb565b602060405180830381865afa1580156124b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124da919061331c565b90506124e6848261367f565b979650505050505050565b6060816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612531573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125599190810190613f04565b6040516020016125699190613f61565b6040516020818303038152906040529050919050565b6060816001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156125bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125e79190810190613f04565b6040516020016125699190613f90565b600054610100900460ff1661261e5760405162461bcd60e51b8152600401610c4890613c7d565b61089682826129af565b600054610100900460ff1661264f5760405162461bcd60e51b8152600401610c4890613c7d565b6107a5816129ef565b600054610100900460ff1661267f5760405162461bcd60e51b8152600401610c4890613c7d565b610e30612a74565b600080612695868686612a9b565b905060018360028111156126ab576126ab613571565b1480156126c85750600084806126c3576126c3613d83565b868809115b156126db576126d86001826135dd565b90505b90505b949350505050565b600061273b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612b5d9092919063ffffffff16565b905080516000148061275c57508080602001905181019061275c9190613de0565b6117785760405162461bcd60e51b8152600401610c4890613fed565b600054610100900460ff1661279f5760405162461bcd60e51b8152600401610c4890613c7d565b610e30612b6c565b600054610100900460ff1661079c5760405162461bcd60e51b8152600401610c4890613c7d565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6117c1846323b872dd60e01b85858560405160240161174193929190613ffd565b61019154612875906001600160a01b0316826128656065546001600160a01b031690565b6001600160a01b03169190612b9c565b6101915460405163140e25ad60e31b81526000916001600160a01b03169063a0712d68906128a7908590600401612f7b565b6020604051808303816000875af11580156128c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ea919061331c565b905080156108965780604051630864657760e21b8152600401610c489190612f7b565b8061019a600082825461292091906135dd565b90915550506001600160a01b038216600090815261019460205260408120805483929061294e9084906135dd565b9091555061089690508282612c50565b8061019a6000828254612971919061367f565b90915550506001600160a01b038216600090815261019460205260408120805483929061299f90849061367f565b9091555061089690508282612ce6565b600054610100900460ff166129d65760405162461bcd60e51b8152600401610c4890613c7d565b60366129e283826140b6565b50603761177882826140b6565b600054610100900460ff16612a165760405162461bcd60e51b8152600401610c4890613c7d565b600080612a2283612d9d565b9150915081612a32576012612a34565b805b606580546001600160a01b039095166001600160a01b031960ff93909316600160a01b02929092166001600160a81b031990951694909417179092555050565b600054610100900460ff16611e685760405162461bcd60e51b8152600401610c4890613c7d565b6000808060001985870985870292508281108382030391505080600003612ad557838281612acb57612acb613d83565b04925050506108b9565b808411612af45760405162461bcd60e51b8152600401610c48906141a6565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60606126de8484600085612e79565b600054610100900460ff16612b935760405162461bcd60e51b8152600401610c4890613c7d565b610e3033611a85565b801580612c155750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90612bd29030908690600401613a66565b602060405180830381865afa158015612bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c13919061331c565b155b612c315760405162461bcd60e51b8152600401610c4890614209565b6117788363095ea7b360e01b8484604051602401611741929190613a81565b6001600160a01b038216612c765760405162461bcd60e51b8152600401610c489061424d565b8060356000828254612c8891906135dd565b90915550506001600160a01b038216600081815260336020526040808220805485019055517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612cda908590612f7b565b60405180910390a35050565b6001600160a01b038216612d0c5760405162461bcd60e51b8152600401610c489061429b565b6001600160a01b03821660009081526033602052604090205481811015612d455760405162461bcd60e51b8152600401610c48906142ea565b6001600160a01b0383166000818152603360205260408082208585039055603580548690039055519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061088c908690612f7b565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290516000918291829182916001600160a01b03871691612de4916142fa565b600060405180830381855afa9150503d8060008114612e1f576040519150601f19603f3d011682016040523d82523d6000602084013e612e24565b606091505b5091509150818015612e3857506020815110155b15612e6c57600081806020019051810190612e53919061331c565b905060ff8111612e6a576001969095509350505050565b505b5060009485945092505050565b606082471015612e9b5760405162461bcd60e51b8152600401610c4890614349565b600080866001600160a01b03168587604051612eb791906142fa565b60006040518083038185875af1925050503d8060008114612ef4576040519150601f19603f3d011682016040523d82523d6000602084013e612ef9565b606091505b50915091506124e68783838760608315612f44578251600003612f3d576001600160a01b0385163b612f3d5760405162461bcd60e51b8152600401610c489061438d565b50816126de565b6126de8383815115612f595781518083602001fd5b8060405162461bcd60e51b8152600401610c489190612fdf565b805b82525050565b602081016107698284612f73565b60005b83811015612fa4578181015183820152602001612f8c565b50506000910152565b6000612fb7825190565b808452602084019350612fce818560208601612f89565b601f01601f19169290920192915050565b602080825281016108b98184612fad565b805b81146107a557600080fd5b803561076981612ff0565b60006020828403121561301d5761301d600080fd5b60006126de8484612ffd565b60006001600160a01b038216610769565b612ff281613029565b80356107698161303a565b6000806040838503121561306457613064600080fd5b60006130708585613043565b925050602061308185828601612ffd565b9150509250929050565b801515612f75565b60208101610769828461308b565b6000602082840312156130b6576130b6600080fd5b60006126de8484613043565b612f7581613029565b6020810161076982846130c2565b600061076982613029565b612ff2816130d9565b8035610769816130e4565b60006020828403121561310d5761310d600080fd5b60006126de84846130ed565b60008060006060848603121561313157613131600080fd5b600061313d8686613043565b935050602061314e86828701613043565b925050604061315f86828701612ffd565b9150509250925092565b60ff8116612f75565b602081016107698284613169565b6000806000806080858703121561319957613199600080fd5b60006131a58787613043565b94505060206131b687828801613043565b93505060406131c787828801612ffd565b92505060606131d887828801613043565b91505092959194509250565b60006107696001600160a01b0383166131fb565b90565b6001600160a01b031690565b6000610769826131e4565b600061076982613207565b612f7581613212565b60208101610769828461321d565b6000806040838503121561324a5761324a600080fd5b60006132568585612ffd565b925050602061308185828601613043565b60008060006060848603121561327f5761327f600080fd5b600061328b8686612ffd565b935050602061329c86828701613043565b925050604061315f86828701613043565b600080604083850312156132c3576132c3600080fd5b60006132568585613043565b634e487b7160e01b600052602260045260246000fd5b6002810460018216806132f957607f821691505b60208210810361330b5761330b6132cf565b50919050565b805161076981612ff0565b60006020828403121561333157613331600080fd5b60006126de8484613311565b634e487b7160e01b600052601160045260246000fd5b60ff9182169190811690828201908111156107695761076961333d565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156133ac576133ac613370565b6040525050565b60006133be60405190565b90506133ca8282613386565b919050565b600067ffffffffffffffff8211156133e9576133e9613370565b5060209081020190565b8051610769816130e4565b600061341161340c846133cf565b6133b3565b8381529050602080820190840283018581111561343057613430600080fd5b835b81811015613454578061344588826133f3565b84525060209283019201613432565b5050509392505050565b600082601f83011261347257613472600080fd5b81516126de8482602086016133fe565b60006020828403121561349757613497600080fd5b815167ffffffffffffffff8111156134b1576134b1600080fd5b6126de8482850161345e565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156134e8576134e8600080fd5b60006126de84846133f3565b6000613500838361321d565b505060200190565b6000613512825190565b80845260209384019383018060005b8381101561354657815161353588826134f4565b975060208301925050600101613521565b509495945050505050565b6040810161355f82856130c2565b81810360208301526126de8184613508565b634e487b7160e01b600052602160045260246000fd5b600481106107a5576107a5613571565b806133ca81613587565b600061076982613597565b612f75816135a1565b606081016135c382866130c2565b6135d060208301856130c2565b6126de60408301846135ac565b808201808211156107695761076961333d565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015291505b5060400190565b60208082528101610769816135f0565b600781526000602082016619195c1bdcda5d60ca1b815291505b5060200190565b602080825281016107698161364e565b818103818111156107695761076961333d565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b60208201529150613637565b6020808252810161076981613692565b60048152600060208201631b5a5b9d60e21b81529150613668565b60208082528101610769816136e8565b602581526000602082017f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77815264207a65726f60d81b60208201529150613637565b6020808252810161076981613713565b6008815260006020820167776974686472617760c01b81529150613668565b6020808252810161076981613765565b600681526000602082016572656465656d60d01b81529150613668565b6020808252810161076981613794565b80516107698161303a565b6000602082840312156137e1576137e1600080fd5b60006126de84846137c1565b600060ff8216610769565b612f75816137ed565b6020810161076982846137f8565b80825b600185111561384e5780860481111561382d5761382d61333d565b600185161561383b57908102905b80026138478560011c90565b9450613812565b94509492505050565b600082613866575060016108b9565b81613873575060006108b9565b81600181146138895760028114613893576138c0565b60019150506108b9565b60ff8411156138a4576138a461333d565b8360020a9150848211156138ba576138ba61333d565b506108b9565b5060208310610133831016604e8410600b84101617156138f3575081810a838111156138ee576138ee61333d565b6108b9565b613900848484600161380f565b925090508184048111156139165761391661333d565b0292915050565b600060ff831692506108b96000198484613857565b602481526000602082017f45524332303a20617070726f76652066726f6d20746865207a65726f206164648152637265737360e01b60208201529150613637565b6020808252810161076981613932565b602281526000602082017f45524332303a20617070726f766520746f20746865207a65726f206164647265815261737360f01b60208201529150613637565b6020808252810161076981613983565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081526000613668565b60208082528101610769816139d2565b602581526000602082017f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b60208201529150613637565b6020808252810161076981613a14565b60408101613a7482856130c2565b6108b960208301846130c2565b60408101613a8f82856130c2565b6108b96020830184612f73565b601d81526000602082017f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000081529150613668565b6020808252810161076981613a9c565b602581526000602082017f45524332303a207472616e736665722066726f6d20746865207a65726f206164815264647265737360d81b60208201529150613637565b6020808252810161076981613ae0565b602381526000602082017f45524332303a207472616e7366657220746f20746865207a65726f206164647281526265737360e81b60208201529150613637565b6020808252810161076981613b32565b602681526000602082017f45524332303a207472616e7366657220616d6f756e7420657863656564732062815265616c616e636560d01b60208201529150613637565b6020808252810161076981613b82565b60ff8116612ff2565b805161076981613bd5565b600060208284031215613bfe57613bfe600080fd5b60006126de8484613bde565b60ff9182169190811690828203908111156107695761076961333d565b60408101613a8f8285612f73565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150613637565b6020808252810161076981613c35565b602281526000602082017f436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d8152611a5d60f21b60208201529150613637565b6020808252810161076981613c8d565b601f81526000602082017f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081529150613668565b6020808252810161076981613cdc565b601b81526000602082017f76546f6b656e735265636569766564206174205f6465706f736974000000000081529150613668565b6020808252810161076981613d20565b818102808215838204851417613d7c57613d7c61333d565b5092915050565b634e487b7160e01b600052601260045260246000fd5b600082613da857613da8613d83565b500490565b60408101613dbb82856130c2565b81810360208301526126de8184612fad565b801515612ff2565b805161076981613dcd565b600060208284031215613df557613df5600080fd5b60006126de8484613dd5565b60608101613e0f82866130c2565b613e1c60208301856130c2565b8181036040830152613e2e8184612fad565b95945050505050565b60208082527f61637475616c56546f6b656e73206174205f6265666f7265576974686472617791019081526000613668565b6020808252810161076981613e37565b600067ffffffffffffffff821115613e9357613e93613370565b601f19601f83011660200192915050565b6000613eb261340c84613e79565b905082815260208101848484011115613ecd57613ecd600080fd5b613ed8848285612f89565b509392505050565b600082601f830112613ef457613ef4600080fd5b81516126de848260208601613ea4565b600060208284031215613f1957613f19600080fd5b815167ffffffffffffffff811115613f3357613f33600080fd5b6126de84828501613ee0565b6000613f49825190565b613f57818560208601612f89565b9290920192915050565b75022a9219a1b191b16abb930b83832b2102b32b73ab9960551b81526000601682015b91506108b98284613f3f565b643b1a1b191b60d91b8152600060058201613f84565b602a81526000602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b60208201529150613637565b6020808252810161076981613fa6565b6060810161400b82866130c2565b61401860208301856130c2565b6126de6040830184612f73565b60006107696131f88381565b61403a83614025565b815460001960089490940293841b1916921b91909117905550565b6000611778818484614031565b8181101561089657614075600082614055565b600101614062565b601f821115611778576000818152602090206020601f850104810160208510156140a45750805b610be16020601f860104830182614062565b815167ffffffffffffffff8111156140d0576140d0613370565b6140da82546132e5565b6140e582828561407d565b6020601f83116001811461411957600084156141015750858201515b600019600886021c1981166002860217865550614172565b600085815260208120601f198616915b828110156141495788850151825560209485019460019092019101614129565b868310156141655784890151600019601f89166008021c191682555b6001600288020188555050505b505050505050565b60158152600060208201744d6174683a206d756c446976206f766572666c6f7760581b81529150613668565b602080825281016107698161417a565b603681526000602082017f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60208201529150613637565b60208082528101610769816141b6565b601f81526000602082017f45524332303a206d696e7420746f20746865207a65726f20616464726573730081529150613668565b6020808252810161076981614219565b602181526000602082017f45524332303a206275726e2066726f6d20746865207a65726f206164647265738152607360f81b60208201529150613637565b602080825281016107698161425d565b602281526000602082017f45524332303a206275726e20616d6f756e7420657863656564732062616c616e815261636560f01b60208201529150613637565b60208082528101610769816142ab565b60006108b98284613f3f565b602681526000602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f8152651c8818d85b1b60d21b60208201529150613637565b6020808252810161076981614306565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150613668565b602080825281016107698161435956fea2646970667358221220c316e91d90208cb84b567b814a12c4b23c6d3f0cc08be6ce814c43c66611f4d664736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2F1 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x79BA5097 GT PUSH2 0x19D JUMPI DUP1 PUSH4 0xBE26317E GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0xDCD9BB42 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xE521136F GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xE521136F EQ PUSH2 0x690 JUMPI DUP1 PUSH4 0xEF8B30F7 EQ PUSH2 0x619 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x6A3 JUMPI DUP1 PUSH4 0xF7EA7A3D EQ PUSH2 0x6B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xDCD9BB42 EQ PUSH2 0x658 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x66C JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x67F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBE26317E EQ PUSH2 0x5E6 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x5F0 JUMPI DUP1 PUSH4 0xC63D75B6 EQ PUSH2 0x603 JUMPI DUP1 PUSH4 0xC6E6F592 EQ PUSH2 0x619 JUMPI DUP1 PUSH4 0xCE96CB77 EQ PUSH2 0x62C JUMPI DUP1 PUSH4 0xD905777E EQ PUSH2 0x642 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x156 JUMPI DUP1 PUSH4 0xB460AF94 GT PUSH2 0x130 JUMPI DUP1 PUSH4 0xB460AF94 EQ PUSH2 0x59B JUMPI DUP1 PUSH4 0xB4A0BDF3 EQ PUSH2 0x5AE JUMPI DUP1 PUSH4 0xBA087652 EQ PUSH2 0x5BF JUMPI DUP1 PUSH4 0xBB371FDD EQ PUSH2 0x5D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x562 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x575 JUMPI DUP1 PUSH4 0xB3D7F6B9 EQ PUSH2 0x588 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x507 JUMPI DUP1 PUSH4 0x80D45A2D EQ PUSH2 0x50F JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x522 JUMPI DUP1 PUSH4 0x94BF804D EQ PUSH2 0x533 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x546 JUMPI DUP1 PUSH4 0x9BB1A99C EQ PUSH2 0x54E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0x25C JUMPI DUP1 PUSH4 0x46DDB7DB GT PUSH2 0x215 JUMPI DUP1 PUSH4 0x5FE3B567 GT PUSH2 0x1EF JUMPI DUP1 PUSH4 0x5FE3B567 EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0x6E553F65 EQ PUSH2 0x4C3 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x4D6 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x4FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x46DDB7DB EQ PUSH2 0x463 JUMPI DUP1 PUSH4 0x4CDAD506 EQ PUSH2 0x326 JUMPI DUP1 PUSH4 0x547520FE EQ PUSH2 0x48E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0x3F9 JUMPI DUP1 PUSH4 0x372500AB EQ PUSH2 0x40E JUMPI DUP1 PUSH4 0x38D52E0F EQ PUSH2 0x416 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x427 JUMPI DUP1 PUSH4 0x402D267D EQ PUSH2 0x43A JUMPI DUP1 PUSH4 0x41E11A5A EQ PUSH2 0x450 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1765B313 GT PUSH2 0x2AE JUMPI DUP1 PUSH4 0x1765B313 EQ PUSH2 0x381 JUMPI DUP1 PUSH4 0x17F33340 EQ PUSH2 0x395 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x3B6 JUMPI DUP1 PUSH4 0x1BE19560 EQ PUSH2 0x3BF JUMPI DUP1 PUSH4 0x20F4AF43 EQ PUSH2 0x3D2 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x3E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1E1D114 EQ PUSH2 0x2F6 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x311 JUMPI DUP1 PUSH4 0x7A2D13A EQ PUSH2 0x326 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x339 JUMPI DUP1 PUSH4 0xA28A477 EQ PUSH2 0x359 JUMPI DUP1 PUSH4 0xE32CB86 EQ PUSH2 0x36C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x195 SLOAD JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x308 SWAP2 SWAP1 PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x319 PUSH2 0x6CA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x308 SWAP2 SWAP1 PUSH2 0x2FDF JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x334 CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0x75C JUMP JUMPDEST PUSH2 0x34C PUSH2 0x347 CALLDATASIZE PUSH1 0x4 PUSH2 0x304E JUMP JUMPDEST PUSH2 0x76F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x308 SWAP2 SWAP1 PUSH2 0x3093 JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x367 CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0x787 JUMP JUMPDEST PUSH2 0x37F PUSH2 0x37A CALLDATASIZE PUSH1 0x4 PUSH2 0x30A1 JUMP JUMPDEST PUSH2 0x794 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x37F PUSH2 0x38F CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0x195 SSTORE JUMP JUMPDEST PUSH2 0x193 SLOAD PUSH2 0x3A9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x308 SWAP2 SWAP1 PUSH2 0x30CB JUMP JUMPDEST PUSH2 0x19A SLOAD PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x37F PUSH2 0x3CD CALLDATASIZE PUSH1 0x4 PUSH2 0x30F8 JUMP JUMPDEST PUSH2 0x7A8 JUMP JUMPDEST PUSH2 0x37F PUSH2 0x3E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0x199 SSTORE JUMP JUMPDEST PUSH2 0x34C PUSH2 0x3F4 CALLDATASIZE PUSH1 0x4 PUSH2 0x3119 JUMP JUMPDEST PUSH2 0x89A JUMP JUMPDEST PUSH2 0x401 PUSH2 0x8C0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x308 SWAP2 SWAP1 PUSH2 0x3172 JUMP JUMPDEST PUSH2 0x37F PUSH2 0x8E6 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A9 JUMP JUMPDEST PUSH2 0x34C PUSH2 0x435 CALLDATASIZE PUSH1 0x4 PUSH2 0x304E JUMP JUMPDEST PUSH2 0xBE8 JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x448 CALLDATASIZE PUSH1 0x4 PUSH2 0x30A1 JUMP JUMPDEST POP PUSH2 0x196 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x37F PUSH2 0x45E CALLDATASIZE PUSH1 0x4 PUSH2 0x3180 JUMP JUMPDEST PUSH2 0xC0A JUMP JUMPDEST PUSH2 0x37F PUSH2 0x471 CALLDATASIZE PUSH1 0x4 PUSH2 0x304E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x194 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH2 0x37F PUSH2 0x49C CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0x198 SSTORE JUMP JUMPDEST PUSH2 0x192 SLOAD PUSH2 0x4B6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x308 SWAP2 SWAP1 PUSH2 0x3226 JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x4D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3234 JUMP JUMPDEST PUSH2 0xCDC JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x4E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x30A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x37F PUSH2 0xE1E JUMP JUMPDEST PUSH2 0x37F PUSH2 0xE32 JUMP JUMPDEST PUSH2 0x37F PUSH2 0x51D CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0xE67 JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A9 JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x541 CALLDATASIZE PUSH1 0x4 PUSH2 0x3234 JUMP JUMPDEST PUSH2 0xEAE JUMP JUMPDEST PUSH2 0x319 PUSH2 0xFC8 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH2 0x4B6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x34C PUSH2 0x570 CALLDATASIZE PUSH1 0x4 PUSH2 0x304E JUMP JUMPDEST PUSH2 0xFD7 JUMP JUMPDEST PUSH2 0x34C PUSH2 0x583 CALLDATASIZE PUSH1 0x4 PUSH2 0x304E JUMP JUMPDEST PUSH2 0x101F JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x596 CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0x102D JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x5A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x103A JUMP JUMPDEST PUSH1 0xFB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4B6 JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x5CD CALLDATASIZE PUSH1 0x4 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x1147 JUMP JUMPDEST PUSH2 0x37F PUSH2 0x5E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0x196 SSTORE JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x12D SLOAD DUP2 JUMP JUMPDEST PUSH2 0x37F PUSH2 0x5FE CALLDATASIZE PUSH1 0x4 PUSH2 0x30A1 JUMP JUMPDEST PUSH2 0x126B JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x611 CALLDATASIZE PUSH1 0x4 PUSH2 0x30A1 JUMP JUMPDEST POP PUSH2 0x198 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x627 CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0x146F JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x63A CALLDATASIZE PUSH1 0x4 PUSH2 0x30A1 JUMP JUMPDEST POP PUSH2 0x197 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x650 CALLDATASIZE PUSH1 0x4 PUSH2 0x30A1 JUMP JUMPDEST POP PUSH2 0x199 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x37F PUSH2 0x666 CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0x197 SSTORE JUMP JUMPDEST PUSH2 0x2FB PUSH2 0x67A CALLDATASIZE PUSH1 0x4 PUSH2 0x32AD JUMP JUMPDEST PUSH2 0x147C JUMP JUMPDEST PUSH1 0xC9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A9 JUMP JUMPDEST PUSH2 0x37F PUSH2 0x69E CALLDATASIZE PUSH1 0x4 PUSH2 0x30A1 JUMP JUMPDEST PUSH2 0x14A7 JUMP JUMPDEST PUSH2 0x37F PUSH2 0x6B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x30A1 JUMP JUMPDEST PUSH2 0x14EE JUMP JUMPDEST PUSH2 0x37F PUSH2 0x6C4 CALLDATASIZE PUSH1 0x4 PUSH2 0x3008 JUMP JUMPDEST PUSH2 0x19A SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x36 DUP1 SLOAD PUSH2 0x6D9 SWAP1 PUSH2 0x32E5 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x705 SWAP1 PUSH2 0x32E5 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x752 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x727 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x752 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x735 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x769 DUP3 PUSH1 0x0 PUSH2 0x155F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x77D DUP2 DUP6 DUP6 PUSH2 0x15A3 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x769 DUP3 PUSH1 0x1 PUSH2 0x164A JUMP JUMPDEST PUSH2 0x79C PUSH2 0x167F JUMP JUMPDEST PUSH2 0x7A5 DUP2 PUSH2 0x16A9 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x7B0 PUSH2 0x167F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x7DF SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x820 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x896 JUMPI PUSH1 0x0 PUSH2 0x83C PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x849 DUP4 DUP3 DUP5 PUSH2 0x1722 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x6D25BE279134F4ECAA4770AFF0C3D916D9E7C5EF37B65ED95DBDBA411F5D54D5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x88C SWAP2 SWAP1 PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x8A8 DUP6 DUP3 DUP6 PUSH2 0x177D JUMP JUMPDEST PUSH2 0x8B3 DUP6 DUP6 DUP6 PUSH2 0x17C7 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8CA PUSH2 0x18B7 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH2 0x8E1 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3353 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x192 SLOAD PUSH2 0x191 SLOAD PUSH2 0x193 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x61252FD1 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP5 SWAP4 DUP5 AND SWAP4 SWAP1 SWAP3 AND SWAP2 PUSH1 0x0 SWAP2 DUP6 SWAP2 PUSH4 0x61252FD1 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 DUP7 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x945 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x96D SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3482 JUMP JUMPDEST SWAP1 POP PUSH2 0x979 DUP2 MLOAD PUSH2 0x1937 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xBE1 JUMPI PUSH1 0x0 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x999 JUMPI PUSH2 0x999 PUSH2 0x34BD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF7C618C1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9E3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA07 SWAP2 SWAP1 PUSH2 0x34D3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP7 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xA41 JUMPI PUSH2 0xA41 PUSH2 0x34BD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x20 SWAP2 DUP3 MUL SWAP3 SWAP1 SWAP3 ADD ADD MSTORE PUSH1 0x40 MLOAD PUSH3 0x4CAEB1 PUSH1 0xE4 SHL DUP2 MSTORE SWAP1 DUP5 AND SWAP1 PUSH4 0x4CAEB10 SWAP1 PUSH2 0xA7D SWAP1 ADDRESS SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x3551 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xAAB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 POP PUSH4 0x70A08231 SWAP1 PUSH2 0xADE SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB1F SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0xB90 JUMPI PUSH2 0xB32 DUP4 DUP9 DUP4 PUSH2 0x1722 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5BEBB3B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP1 PUSH4 0x16FAECEC SWAP1 PUSH2 0xB63 SWAP1 DUP13 SWAP1 DUP8 SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x4 ADD PUSH2 0x35B5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0xB8E JUMPI POP PUSH1 0x1 JUMPDEST POP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xBA56C3AB1F752776EEF60DB959A4E6B643E89595315EDBBD945E104623FA03BA DUP3 PUSH1 0x40 MLOAD PUSH2 0xBC9 SWAP2 SWAP1 PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 POP PUSH2 0x97C SWAP1 POP JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x77D DUP2 DUP6 DUP6 PUSH2 0xBFB DUP4 DUP4 PUSH2 0x147C JUMP JUMPDEST PUSH2 0xC05 SWAP2 SWAP1 PUSH2 0x35DD JUMP JUMPDEST PUSH2 0x15A3 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x2 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xC2C JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF DUP1 DUP4 AND SWAP2 AND LT JUMPDEST PUSH2 0xC51 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x363E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFFFF NOT AND PUSH1 0xFF DUP4 AND OR PUSH2 0x100 OR SWAP1 SSTORE PUSH2 0xC6E DUP3 PUSH2 0x1962 JUMP JUMPDEST PUSH2 0xC77 DUP6 PUSH2 0x1989 JUMP JUMPDEST PUSH2 0xC80 DUP4 PUSH2 0x19C1 JUMP JUMPDEST PUSH2 0xC89 DUP5 PUSH2 0x1A1E JUMP JUMPDEST PUSH2 0xC92 DUP3 PUSH2 0x1A85 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH2 0xCCD SWAP1 DUP4 SWAP1 PUSH2 0x3172 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCE6 PUSH2 0x1A9E JUMP JUMPDEST PUSH2 0xCEF DUP3 PUSH2 0x1962 JUMP JUMPDEST PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA6AFED95 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD45 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD69 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST POP DUP3 PUSH1 0x0 SUB PUSH2 0xD8B JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x366F JUMP JUMPDEST PUSH2 0x196 SLOAD DUP4 GT ISZERO PUSH2 0xDAF JUMPI PUSH1 0x40 MLOAD PUSH4 0x26AC6EE1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xDBA DUP5 PUSH2 0x146F JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0xDDD JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x366F JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDE9 PUSH2 0x19A SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0xDF7 CALLER DUP6 DUP8 DUP6 PUSH2 0x1AC9 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0xE04 PUSH2 0x19A SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xE0E SWAP2 SWAP1 PUSH2 0x367F JUMP JUMPDEST SWAP4 POP POP POP POP PUSH2 0x769 PUSH1 0x1 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH2 0xE26 PUSH2 0x167F JUMP JUMPDEST PUSH2 0xE30 PUSH1 0x0 PUSH2 0x1A85 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0xC9 SLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 EQ PUSH2 0xE5E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x36D8 JUMP JUMPDEST PUSH2 0x7A5 DUP2 PUSH2 0x1A85 JUMP JUMPDEST PUSH2 0xEA5 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x19 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x7365744D61784C6F6F70734C696D69742875696E743235362900000000000000 DUP2 MSTORE POP PUSH2 0x1E70 JUMP JUMPDEST PUSH2 0x7A5 DUP2 PUSH2 0x19C1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEB8 PUSH2 0x1A9E JUMP JUMPDEST PUSH2 0xEC1 DUP3 PUSH2 0x1962 JUMP JUMPDEST PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA6AFED95 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF17 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF3B SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST POP DUP3 PUSH1 0x0 SUB PUSH2 0xF5D JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3703 JUMP JUMPDEST PUSH2 0x198 SLOAD DUP4 GT ISZERO PUSH2 0xF81 JUMPI PUSH1 0x40 MLOAD PUSH4 0x40868F79 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xF8C DUP5 PUSH2 0x102D JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0xFAF JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3703 JUMP JUMPDEST PUSH2 0xFBB CALLER DUP5 DUP4 DUP8 PUSH2 0x1AC9 JUMP JUMPDEST SWAP1 POP PUSH2 0x769 PUSH1 0x1 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x6D9 SWAP1 PUSH2 0x32E5 JUMP JUMPDEST PUSH1 0x0 CALLER DUP2 PUSH2 0xFE5 DUP3 DUP7 PUSH2 0x147C JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x1007 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3755 JUMP JUMPDEST PUSH2 0x1014 DUP3 DUP7 DUP7 DUP5 SUB PUSH2 0x15A3 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x77D DUP2 DUP6 DUP6 PUSH2 0x17C7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x769 DUP3 PUSH1 0x1 PUSH2 0x155F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1044 PUSH2 0x1A9E JUMP JUMPDEST PUSH2 0x104D DUP4 PUSH2 0x1962 JUMP JUMPDEST PUSH2 0x1056 DUP3 PUSH2 0x1962 JUMP JUMPDEST PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA6AFED95 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10AC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10D0 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST POP DUP4 PUSH1 0x0 SUB PUSH2 0x10F2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3784 JUMP JUMPDEST PUSH2 0x197 SLOAD DUP5 GT ISZERO PUSH2 0x1116 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE9ED9515 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1122 DUP7 PUSH2 0x1F0A JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1139 PUSH2 0x1130 CALLER SWAP1 JUMP JUMPDEST DUP7 DUP7 DUP6 DUP6 PUSH2 0x21FF JUMP JUMPDEST SWAP2 POP POP PUSH2 0x8B9 PUSH1 0x1 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1151 PUSH2 0x1A9E JUMP JUMPDEST PUSH2 0x115A DUP4 PUSH2 0x1962 JUMP JUMPDEST PUSH2 0x1163 DUP3 PUSH2 0x1962 JUMP JUMPDEST PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA6AFED95 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x11B9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11DD SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST POP DUP4 PUSH1 0x0 SUB PUSH2 0x11FF JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x37B1 JUMP JUMPDEST PUSH2 0x199 SLOAD DUP5 GT ISZERO PUSH2 0x1223 JUMPI PUSH1 0x40 MLOAD PUSH4 0x88902479 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x122E DUP6 PUSH2 0x22A2 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x1251 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x37B1 JUMP JUMPDEST PUSH2 0x125E CALLER DUP6 DUP6 DUP5 DUP10 PUSH2 0x21FF JUMP JUMPDEST SWAP1 POP PUSH2 0x8B9 PUSH1 0x1 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x128B JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x12A5 JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12A5 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x12C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x363E JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x12E4 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x12ED DUP3 PUSH2 0x1962 JUMP JUMPDEST PUSH2 0x191 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x5FE3B567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH4 0x5FE3B567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1347 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x136B SWAP2 SWAP1 PUSH2 0x34D3 JUMP JUMPDEST PUSH2 0x192 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH2 0x191 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x6F307DC3 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP4 SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x6F307DC3 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13F3 SWAP2 SWAP1 PUSH2 0x37CC JUMP JUMPDEST SWAP1 POP PUSH2 0x140F PUSH2 0x1401 DUP3 PUSH2 0x24F1 JUMP JUMPDEST PUSH2 0x140A DUP4 PUSH2 0x257F JUMP JUMPDEST PUSH2 0x25F7 JUMP JUMPDEST PUSH2 0x1418 DUP2 PUSH2 0x2628 JUMP JUMPDEST PUSH2 0x1420 PUSH2 0x2658 JUMP JUMPDEST POP DUP1 ISZERO PUSH2 0x896 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH2 0x1463 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x3801 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x769 DUP3 PUSH1 0x0 PUSH2 0x164A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x14E5 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x736574526577617264526563697069656E742861646472657373290000000000 DUP2 MSTORE POP PUSH2 0x1E70 JUMP JUMPDEST PUSH2 0x7A5 DUP2 PUSH2 0x1A1E JUMP JUMPDEST PUSH2 0x14F6 PUSH2 0x167F JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH2 0x1527 PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B9 PUSH2 0x156E PUSH2 0x195 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1579 SWAP1 PUSH1 0x1 PUSH2 0x35DD JUMP JUMPDEST PUSH2 0x1581 PUSH2 0x18B7 JUMP JUMPDEST PUSH2 0x158C SWAP1 PUSH1 0xA PUSH2 0x391D JUMP JUMPDEST PUSH2 0x19A SLOAD PUSH2 0x159A SWAP2 SWAP1 PUSH2 0x35DD JUMP JUMPDEST DUP6 SWAP2 SWAP1 DUP6 PUSH2 0x2687 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x15C9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3973 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x15EF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x39C2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x88C SWAP1 DUP6 SWAP1 PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B9 PUSH2 0x1657 PUSH2 0x18B7 JUMP JUMPDEST PUSH2 0x1662 SWAP1 PUSH1 0xA PUSH2 0x391D JUMP JUMPDEST PUSH2 0x19A SLOAD PUSH2 0x1670 SWAP2 SWAP1 PUSH2 0x35DD JUMP JUMPDEST PUSH2 0x195 SLOAD PUSH2 0x159A SWAP1 PUSH1 0x1 PUSH2 0x35DD JUMP JUMPDEST PUSH1 0x97 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE30 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3A04 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x16CF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3A56 JUMP JUMPDEST PUSH1 0xFB DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP1 PUSH32 0x66FD58E82F7B31A2A5C30E0888F3093EFE4E111B00CD2B0C31FE014601293AA0 SWAP1 PUSH2 0x1463 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x3A66 JUMP JUMPDEST PUSH2 0x1778 DUP4 PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1741 SWAP3 SWAP2 SWAP1 PUSH2 0x3A81 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x26E6 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1789 DUP5 DUP5 PUSH2 0x147C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x17C1 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x17B4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3AD0 JUMP JUMPDEST PUSH2 0x17C1 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x15A3 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x17ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3B22 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1813 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3B72 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x184C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3BC5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE SWAP3 DUP7 AND DUP1 DUP3 MSTORE SWAP1 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE SWAP2 MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x18AA SWAP1 DUP7 SWAP1 PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x17C1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18CB PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1908 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x192C SWAP2 SWAP1 PUSH2 0x3BE9 JUMP JUMPDEST PUSH2 0x8E1 SWAP1 PUSH1 0x12 PUSH2 0x3C0A JUMP JUMPDEST PUSH2 0x12D SLOAD DUP2 GT ISZERO PUSH2 0x7A5 JUMPI PUSH2 0x12D SLOAD DUP2 PUSH1 0x40 MLOAD PUSH4 0x792BFB1B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP3 SWAP2 SWAP1 PUSH2 0x3C27 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7A5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x42BCDF7F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x19B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3C7D JUMP JUMPDEST PUSH2 0x19B8 PUSH2 0x2778 JUMP JUMPDEST PUSH2 0x7A5 DUP2 PUSH2 0x27A7 JUMP JUMPDEST PUSH2 0x12D SLOAD DUP2 GT PUSH2 0x19E3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3CCC JUMP JUMPDEST PUSH2 0x12D DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC2D09FEF144F7C8A86F71EA459F8FC17F675768EB1AE369CBD77FB31D467AAFA SWAP1 PUSH2 0x1463 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x3C27 JUMP JUMPDEST PUSH2 0x1A27 DUP2 PUSH2 0x1962 JUMP JUMPDEST PUSH2 0x193 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 AND SWAP1 PUSH32 0xC8C11BB97AC2FFA10CE2E2A98F4C1FD8DF84CFA2E1A15E013ED2383AB1F527AD SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH2 0x193 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xC9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH2 0x7A5 DUP2 PUSH2 0x27CE JUMP JUMPDEST PUSH1 0x2 PUSH2 0x15F SLOAD SUB PUSH2 0x1AC1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3D10 JUMP JUMPDEST PUSH1 0x2 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1ADD PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1B08 SWAP2 SWAP1 PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B25 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B49 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1B80 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B9D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BC1 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST SWAP1 POP PUSH2 0x1BE0 PUSH2 0x1BD8 PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP8 ADDRESS DUP8 PUSH2 0x2820 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1BF5 PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1C20 SWAP2 SWAP1 PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C3D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C61 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST PUSH2 0x1C6B SWAP2 SWAP1 PUSH2 0x367F JUMP JUMPDEST SWAP1 POP PUSH2 0x1C76 DUP2 PUSH2 0x2841 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1CAC SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CC9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1CED SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST PUSH2 0x1CF7 SWAP2 SWAP1 PUSH2 0x367F JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x1D1A JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3D54 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 PUSH2 0x191 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x182DF0F5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D79 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D9D SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST PUSH2 0x1DA7 SWAP1 DUP5 PUSH2 0x3D64 JUMP JUMPDEST PUSH2 0x1DB1 SWAP2 SWAP1 PUSH2 0x3D99 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1E03 PUSH2 0x1DC0 PUSH2 0x18B7 JUMP JUMPDEST PUSH2 0x1DCB SWAP1 PUSH1 0xA PUSH2 0x391D JUMP JUMPDEST PUSH2 0x19A SLOAD PUSH2 0x1DD9 SWAP2 SWAP1 PUSH2 0x35DD JUMP JUMPDEST DUP4 PUSH2 0x1DE4 PUSH2 0x195 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1DEF SWAP1 PUSH1 0x1 PUSH2 0x35DD JUMP JUMPDEST PUSH2 0x1DF9 SWAP2 SWAP1 PUSH2 0x367F JUMP JUMPDEST DUP5 SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2687 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E0F DUP10 DUP3 PUSH2 0x290D JUMP JUMPDEST DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDCBC1C05240F31FF3AD067EF1EE35CE4997762752E3A095284754544F4C709D7 DUP11 DUP5 PUSH1 0x40 MLOAD PUSH2 0x1E54 SWAP3 SWAP2 SWAP1 PUSH2 0x3C27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH2 0x15F SSTORE JUMP JUMPDEST PUSH1 0xFB SLOAD PUSH1 0x40 MLOAD PUSH4 0x18C5E8AB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x18C5E8AB SWAP1 PUSH2 0x1EA3 SWAP1 CALLER SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x3DAD JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1EC0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1EE4 SWAP2 SWAP1 PUSH2 0x3DE0 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x896 JUMPI CALLER ADDRESS DUP4 PUSH1 0x40 MLOAD PUSH4 0x4A3FA293 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3E01 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1F21 PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1F51 SWAP2 SWAP1 PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F6E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F92 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1FC9 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FE6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x200A SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x852A12E3 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x852A12E3 SWAP1 PUSH2 0x2041 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2060 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2084 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x20A7 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH4 0x8646577 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP2 SWAP1 PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x20D5 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2116 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST PUSH2 0x2120 SWAP2 SWAP1 PUSH2 0x367F JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP8 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2157 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2174 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2198 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST PUSH2 0x21A2 SWAP1 DUP5 PUSH2 0x367F JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x21C5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4DD32C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3E69 JUMP JUMPDEST PUSH2 0x21F3 PUSH2 0x21D0 PUSH2 0x18B7 JUMP JUMPDEST PUSH2 0x21DB SWAP1 PUSH1 0xA PUSH2 0x391D JUMP JUMPDEST PUSH2 0x19A SLOAD PUSH2 0x21E9 SWAP2 SWAP1 PUSH2 0x35DD JUMP JUMPDEST DUP3 SWAP1 DUP6 PUSH1 0x1 PUSH2 0x2687 JUMP JUMPDEST SWAP6 POP POP POP POP POP POP SWAP2 POP SWAP2 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x2223 JUMPI PUSH2 0x2223 DUP4 DUP7 DUP4 PUSH2 0x177D JUMP JUMPDEST PUSH2 0x222D DUP4 DUP3 PUSH2 0x295E JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH2 0x2244 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP5 PUSH2 0x1722 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFBDE797D201C681B91056529119E0B02407C7BB96A4A2C75C01FC9667232C8DB DUP6 DUP6 PUSH1 0x40 MLOAD PUSH2 0x2293 SWAP3 SWAP2 SWAP1 PUSH2 0x3C27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x22B7 PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x22E7 SWAP2 SWAP1 PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2304 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2328 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH2 0x23CD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2361 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x237E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23A2 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST PUSH2 0x23AA PUSH2 0x18B7 JUMP JUMPDEST PUSH2 0x23B5 SWAP1 PUSH1 0xA PUSH2 0x391D JUMP JUMPDEST PUSH2 0x19A SLOAD PUSH2 0x23C3 SWAP2 SWAP1 PUSH2 0x35DD JUMP JUMPDEST DUP8 SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2687 JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0xDB006A75 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xDB006A75 SWAP1 PUSH2 0x2404 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2423 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2447 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x246A JUMPI DUP1 PUSH1 0x40 MLOAD PUSH4 0x8646577 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP2 SWAP1 PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2499 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x30CB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x24DA SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST SWAP1 POP PUSH2 0x24E6 DUP5 DUP3 PUSH2 0x367F JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6FDDE03 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2531 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2559 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3F04 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2569 SWAP2 SWAP1 PUSH2 0x3F61 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x25BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x25E7 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3F04 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2569 SWAP2 SWAP1 PUSH2 0x3F90 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x261E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3C7D JUMP JUMPDEST PUSH2 0x896 DUP3 DUP3 PUSH2 0x29AF JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x264F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3C7D JUMP JUMPDEST PUSH2 0x7A5 DUP2 PUSH2 0x29EF JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x267F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3C7D JUMP JUMPDEST PUSH2 0xE30 PUSH2 0x2A74 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2695 DUP7 DUP7 DUP7 PUSH2 0x2A9B JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP4 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x26AB JUMPI PUSH2 0x26AB PUSH2 0x3571 JUMP JUMPDEST EQ DUP1 ISZERO PUSH2 0x26C8 JUMPI POP PUSH1 0x0 DUP5 DUP1 PUSH2 0x26C3 JUMPI PUSH2 0x26C3 PUSH2 0x3D83 JUMP JUMPDEST DUP7 DUP9 MULMOD GT JUMPDEST ISZERO PUSH2 0x26DB JUMPI PUSH2 0x26D8 PUSH1 0x1 DUP3 PUSH2 0x35DD JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP1 POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x273B DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2B5D SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH1 0x0 EQ DUP1 PUSH2 0x275C JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x275C SWAP2 SWAP1 PUSH2 0x3DE0 JUMP JUMPDEST PUSH2 0x1778 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3FED JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x279F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3C7D JUMP JUMPDEST PUSH2 0xE30 PUSH2 0x2B6C JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x79C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3C7D JUMP JUMPDEST PUSH1 0x97 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x17C1 DUP5 PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1741 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3FFD JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH2 0x2875 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH2 0x2865 PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 PUSH2 0x2B9C JUMP JUMPDEST PUSH2 0x191 SLOAD PUSH1 0x40 MLOAD PUSH4 0x140E25AD PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xA0712D68 SWAP1 PUSH2 0x28A7 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x28C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x28EA SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x896 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH4 0x8646577 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP2 SWAP1 PUSH2 0x2F7B JUMP JUMPDEST DUP1 PUSH2 0x19A PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x2920 SWAP2 SWAP1 PUSH2 0x35DD JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x194 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x294E SWAP1 DUP5 SWAP1 PUSH2 0x35DD JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x896 SWAP1 POP DUP3 DUP3 PUSH2 0x2C50 JUMP JUMPDEST DUP1 PUSH2 0x19A PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x2971 SWAP2 SWAP1 PUSH2 0x367F JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH2 0x194 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x299F SWAP1 DUP5 SWAP1 PUSH2 0x367F JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x896 SWAP1 POP DUP3 DUP3 PUSH2 0x2CE6 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x29D6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3C7D JUMP JUMPDEST PUSH1 0x36 PUSH2 0x29E2 DUP4 DUP3 PUSH2 0x40B6 JUMP JUMPDEST POP PUSH1 0x37 PUSH2 0x1778 DUP3 DUP3 PUSH2 0x40B6 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2A16 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3C7D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2A22 DUP4 PUSH2 0x2D9D JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH2 0x2A32 JUMPI PUSH1 0x12 PUSH2 0x2A34 JUMP JUMPDEST DUP1 JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP6 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT PUSH1 0xFF SWAP4 SWAP1 SWAP4 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL SWAP3 SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR OR SWAP1 SWAP3 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1E68 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3C7D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 SUB PUSH2 0x2AD5 JUMPI DUP4 DUP3 DUP2 PUSH2 0x2ACB JUMPI PUSH2 0x2ACB PUSH2 0x3D83 JUMP JUMPDEST DIV SWAP3 POP POP POP PUSH2 0x8B9 JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x2AF4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x41A6 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x1 DUP8 NOT DUP2 ADD DUP9 AND SWAP8 DUP9 SWAP1 DIV PUSH1 0x3 DUP2 MUL DUP4 XOR DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL SWAP1 DUP2 MUL SWAP1 SWAP3 SUB SWAP1 SWAP2 MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x26DE DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x2E79 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2B93 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x3C7D JUMP JUMPDEST PUSH2 0xE30 CALLER PUSH2 0x1A85 JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x2C15 JUMPI POP PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH2 0x2BD2 SWAP1 ADDRESS SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x3A66 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2BEF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2C13 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x2C31 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x4209 JUMP JUMPDEST PUSH2 0x1778 DUP4 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1741 SWAP3 SWAP2 SWAP1 PUSH2 0x3A81 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2C76 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x424D JUMP JUMPDEST DUP1 PUSH1 0x35 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x2C88 SWAP2 SWAP1 PUSH2 0x35DD JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP6 ADD SWAP1 SSTORE MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x2CDA SWAP1 DUP6 SWAP1 PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2D0C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x429B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x2D45 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x42EA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP6 DUP6 SUB SWAP1 SSTORE PUSH1 0x35 DUP1 SLOAD DUP7 SWAP1 SUB SWAP1 SSTORE MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x88C SWAP1 DUP7 SWAP1 PUSH2 0x2F7B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP2 MSTORE PUSH1 0x24 DUP2 ADD DUP3 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH2 0x2DE4 SWAP2 PUSH2 0x42FA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2E1F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2E24 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x2E38 JUMPI POP PUSH1 0x20 DUP2 MLOAD LT ISZERO JUMPDEST ISZERO PUSH2 0x2E6C JUMPI PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2E53 SWAP2 SWAP1 PUSH2 0x331C JUMP JUMPDEST SWAP1 POP PUSH1 0xFF DUP2 GT PUSH2 0x2E6A JUMPI PUSH1 0x1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST POP JUMPDEST POP PUSH1 0x0 SWAP5 DUP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x2E9B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x4349 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x2EB7 SWAP2 SWAP1 PUSH2 0x42FA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2EF4 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2EF9 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x24E6 DUP8 DUP4 DUP4 DUP8 PUSH1 0x60 DUP4 ISZERO PUSH2 0x2F44 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x2F3D JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x2F3D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP1 PUSH2 0x438D JUMP JUMPDEST POP DUP2 PUSH2 0x26DE JUMP JUMPDEST PUSH2 0x26DE DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x2F59 JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC48 SWAP2 SWAP1 PUSH2 0x2FDF JUMP JUMPDEST DUP1 JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x769 DUP3 DUP5 PUSH2 0x2F73 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2FA4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2F8C JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2FB7 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x2FCE DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x2F89 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x8B9 DUP2 DUP5 PUSH2 0x2FAD JUMP JUMPDEST DUP1 JUMPDEST DUP2 EQ PUSH2 0x7A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x769 DUP2 PUSH2 0x2FF0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x301D JUMPI PUSH2 0x301D PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x26DE DUP5 DUP5 PUSH2 0x2FFD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x769 JUMP JUMPDEST PUSH2 0x2FF2 DUP2 PUSH2 0x3029 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x769 DUP2 PUSH2 0x303A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3064 JUMPI PUSH2 0x3064 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3070 DUP6 DUP6 PUSH2 0x3043 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x3081 DUP6 DUP3 DUP7 ADD PUSH2 0x2FFD JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x2F75 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x769 DUP3 DUP5 PUSH2 0x308B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30B6 JUMPI PUSH2 0x30B6 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x26DE DUP5 DUP5 PUSH2 0x3043 JUMP JUMPDEST PUSH2 0x2F75 DUP2 PUSH2 0x3029 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x769 DUP3 DUP5 PUSH2 0x30C2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x769 DUP3 PUSH2 0x3029 JUMP JUMPDEST PUSH2 0x2FF2 DUP2 PUSH2 0x30D9 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x769 DUP2 PUSH2 0x30E4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x310D JUMPI PUSH2 0x310D PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x26DE DUP5 DUP5 PUSH2 0x30ED JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3131 JUMPI PUSH2 0x3131 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x313D DUP7 DUP7 PUSH2 0x3043 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x314E DUP7 DUP3 DUP8 ADD PUSH2 0x3043 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x315F DUP7 DUP3 DUP8 ADD PUSH2 0x2FFD JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0xFF DUP2 AND PUSH2 0x2F75 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x769 DUP3 DUP5 PUSH2 0x3169 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3199 JUMPI PUSH2 0x3199 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x31A5 DUP8 DUP8 PUSH2 0x3043 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x31B6 DUP8 DUP3 DUP9 ADD PUSH2 0x3043 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x31C7 DUP8 DUP3 DUP9 ADD PUSH2 0x2FFD JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0x31D8 DUP8 DUP3 DUP9 ADD PUSH2 0x3043 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x769 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x31FB JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x769 DUP3 PUSH2 0x31E4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x769 DUP3 PUSH2 0x3207 JUMP JUMPDEST PUSH2 0x2F75 DUP2 PUSH2 0x3212 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x769 DUP3 DUP5 PUSH2 0x321D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x324A JUMPI PUSH2 0x324A PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3256 DUP6 DUP6 PUSH2 0x2FFD JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x3081 DUP6 DUP3 DUP7 ADD PUSH2 0x3043 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x327F JUMPI PUSH2 0x327F PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x328B DUP7 DUP7 PUSH2 0x2FFD JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x329C DUP7 DUP3 DUP8 ADD PUSH2 0x3043 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x315F DUP7 DUP3 DUP8 ADD PUSH2 0x3043 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x32C3 JUMPI PUSH2 0x32C3 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3256 DUP6 DUP6 PUSH2 0x3043 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP2 DIV PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x32F9 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x330B JUMPI PUSH2 0x330B PUSH2 0x32CF JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x769 DUP2 PUSH2 0x2FF0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3331 JUMPI PUSH2 0x3331 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x26DE DUP5 DUP5 PUSH2 0x3311 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0xFF SWAP2 DUP3 AND SWAP2 SWAP1 DUP2 AND SWAP1 DUP3 DUP3 ADD SWAP1 DUP2 GT ISZERO PUSH2 0x769 JUMPI PUSH2 0x769 PUSH2 0x333D JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x33AC JUMPI PUSH2 0x33AC PUSH2 0x3370 JUMP JUMPDEST PUSH1 0x40 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33BE PUSH1 0x40 MLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x33CA DUP3 DUP3 PUSH2 0x3386 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x33E9 JUMPI PUSH2 0x33E9 PUSH2 0x3370 JUMP JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x769 DUP2 PUSH2 0x30E4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3411 PUSH2 0x340C DUP5 PUSH2 0x33CF JUMP JUMPDEST PUSH2 0x33B3 JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP1 POP PUSH1 0x20 DUP1 DUP3 ADD SWAP1 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3430 JUMPI PUSH2 0x3430 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3454 JUMPI DUP1 PUSH2 0x3445 DUP9 DUP3 PUSH2 0x33F3 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x3432 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3472 JUMPI PUSH2 0x3472 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x26DE DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x33FE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3497 JUMPI PUSH2 0x3497 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x34B1 JUMPI PUSH2 0x34B1 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26DE DUP5 DUP3 DUP6 ADD PUSH2 0x345E JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x34E8 JUMPI PUSH2 0x34E8 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x26DE DUP5 DUP5 PUSH2 0x33F3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3500 DUP4 DUP4 PUSH2 0x321D JUMP JUMPDEST POP POP PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3512 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 DUP4 ADD DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3546 JUMPI DUP2 MLOAD PUSH2 0x3535 DUP9 DUP3 PUSH2 0x34F4 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP4 ADD SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x3521 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x355F DUP3 DUP6 PUSH2 0x30C2 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x26DE DUP2 DUP5 PUSH2 0x3508 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x4 DUP2 LT PUSH2 0x7A5 JUMPI PUSH2 0x7A5 PUSH2 0x3571 JUMP JUMPDEST DUP1 PUSH2 0x33CA DUP2 PUSH2 0x3587 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x769 DUP3 PUSH2 0x3597 JUMP JUMPDEST PUSH2 0x2F75 DUP2 PUSH2 0x35A1 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x35C3 DUP3 DUP7 PUSH2 0x30C2 JUMP JUMPDEST PUSH2 0x35D0 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x30C2 JUMP JUMPDEST PUSH2 0x26DE PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x35AC JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x769 JUMPI PUSH2 0x769 PUSH2 0x333D JUMP JUMPDEST PUSH1 0x2E DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 DUP2 MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x35F0 JUMP JUMPDEST PUSH1 0x7 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH7 0x19195C1BDCDA5D PUSH1 0xCA SHL DUP2 MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x364E JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x769 JUMPI PUSH2 0x769 PUSH2 0x333D JUMP JUMPDEST PUSH1 0x29 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x4F776E61626C6532537465703A2063616C6C6572206973206E6F742074686520 DUP2 MSTORE PUSH9 0x3732BB9037BBB732B9 PUSH1 0xB9 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3692 JUMP JUMPDEST PUSH1 0x4 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH4 0x1B5A5B9D PUSH1 0xE2 SHL DUP2 MSTORE SWAP2 POP PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x36E8 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 DUP2 MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3713 JUMP JUMPDEST PUSH1 0x8 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH8 0x7769746864726177 PUSH1 0xC0 SHL DUP2 MSTORE SWAP2 POP PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3765 JUMP JUMPDEST PUSH1 0x6 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH6 0x72656465656D PUSH1 0xD0 SHL DUP2 MSTORE SWAP2 POP PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3794 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x769 DUP2 PUSH2 0x303A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x37E1 JUMPI PUSH2 0x37E1 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x26DE DUP5 DUP5 PUSH2 0x37C1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND PUSH2 0x769 JUMP JUMPDEST PUSH2 0x2F75 DUP2 PUSH2 0x37ED JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x769 DUP3 DUP5 PUSH2 0x37F8 JUMP JUMPDEST DUP1 DUP3 JUMPDEST PUSH1 0x1 DUP6 GT ISZERO PUSH2 0x384E JUMPI DUP1 DUP7 DIV DUP2 GT ISZERO PUSH2 0x382D JUMPI PUSH2 0x382D PUSH2 0x333D JUMP JUMPDEST PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x383B JUMPI SWAP1 DUP2 MUL SWAP1 JUMPDEST DUP1 MUL PUSH2 0x3847 DUP6 PUSH1 0x1 SHR SWAP1 JUMP JUMPDEST SWAP5 POP PUSH2 0x3812 JUMP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3866 JUMPI POP PUSH1 0x1 PUSH2 0x8B9 JUMP JUMPDEST DUP2 PUSH2 0x3873 JUMPI POP PUSH1 0x0 PUSH2 0x8B9 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x3889 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x3893 JUMPI PUSH2 0x38C0 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x8B9 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x38A4 JUMPI PUSH2 0x38A4 PUSH2 0x333D JUMP JUMPDEST DUP4 PUSH1 0x2 EXP SWAP2 POP DUP5 DUP3 GT ISZERO PUSH2 0x38BA JUMPI PUSH2 0x38BA PUSH2 0x333D JUMP JUMPDEST POP PUSH2 0x8B9 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x38F3 JUMPI POP DUP2 DUP2 EXP DUP4 DUP2 GT ISZERO PUSH2 0x38EE JUMPI PUSH2 0x38EE PUSH2 0x333D JUMP JUMPDEST PUSH2 0x8B9 JUMP JUMPDEST PUSH2 0x3900 DUP5 DUP5 DUP5 PUSH1 0x1 PUSH2 0x380F JUMP JUMPDEST SWAP3 POP SWAP1 POP DUP2 DUP5 DIV DUP2 GT ISZERO PUSH2 0x3916 JUMPI PUSH2 0x3916 PUSH2 0x333D JUMP JUMPDEST MUL SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP4 AND SWAP3 POP PUSH2 0x8B9 PUSH1 0x0 NOT DUP5 DUP5 PUSH2 0x3857 JUMP JUMPDEST PUSH1 0x24 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 DUP2 MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3932 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 DUP2 MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3983 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 SWAP2 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x39D2 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x696E76616C696420616365737320636F6E74726F6C206D616E61676572206164 DUP2 MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3A14 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x3A74 DUP3 DUP6 PUSH2 0x30C2 JUMP JUMPDEST PUSH2 0x8B9 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x30C2 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x3A8F DUP3 DUP6 PUSH2 0x30C2 JUMP JUMPDEST PUSH2 0x8B9 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2F73 JUMP JUMPDEST PUSH1 0x1D DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 DUP2 MSTORE SWAP2 POP PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3A9C JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 DUP2 MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3AE0 JUMP JUMPDEST PUSH1 0x23 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 DUP2 MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3B32 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 DUP2 MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3B82 JUMP JUMPDEST PUSH1 0xFF DUP2 AND PUSH2 0x2FF2 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x769 DUP2 PUSH2 0x3BD5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BFE JUMPI PUSH2 0x3BFE PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x26DE DUP5 DUP5 PUSH2 0x3BDE JUMP JUMPDEST PUSH1 0xFF SWAP2 DUP3 AND SWAP2 SWAP1 DUP2 AND SWAP1 DUP3 DUP3 SUB SWAP1 DUP2 GT ISZERO PUSH2 0x769 JUMPI PUSH2 0x769 PUSH2 0x333D JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x3A8F DUP3 DUP6 PUSH2 0x2F73 JUMP JUMPDEST PUSH1 0x2B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 DUP2 MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3C35 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x436F6D7074726F6C6C65723A20496E76616C6964206D61784C6F6F70734C696D DUP2 MSTORE PUSH2 0x1A5D PUSH1 0xF2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3C8D JUMP JUMPDEST PUSH1 0x1F DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 DUP2 MSTORE SWAP2 POP PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3CDC JUMP JUMPDEST PUSH1 0x1B DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x76546F6B656E735265636569766564206174205F6465706F7369740000000000 DUP2 MSTORE SWAP2 POP PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3D20 JUMP JUMPDEST DUP2 DUP2 MUL DUP1 DUP3 ISZERO DUP4 DUP3 DIV DUP6 EQ OR PUSH2 0x3D7C JUMPI PUSH2 0x3D7C PUSH2 0x333D JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3DA8 JUMPI PUSH2 0x3DA8 PUSH2 0x3D83 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x3DBB DUP3 DUP6 PUSH2 0x30C2 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x26DE DUP2 DUP5 PUSH2 0x2FAD JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x2FF2 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x769 DUP2 PUSH2 0x3DCD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3DF5 JUMPI PUSH2 0x3DF5 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x26DE DUP5 DUP5 PUSH2 0x3DD5 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x3E0F DUP3 DUP7 PUSH2 0x30C2 JUMP JUMPDEST PUSH2 0x3E1C PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x30C2 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x3E2E DUP2 DUP5 PUSH2 0x2FAD JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH32 0x61637475616C56546F6B656E73206174205F6265666F72655769746864726177 SWAP2 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3E37 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x3E93 JUMPI PUSH2 0x3E93 PUSH2 0x3370 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EB2 PUSH2 0x340C DUP5 PUSH2 0x3E79 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x3ECD JUMPI PUSH2 0x3ECD PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3ED8 DUP5 DUP3 DUP6 PUSH2 0x2F89 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3EF4 JUMPI PUSH2 0x3EF4 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x26DE DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x3EA4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3F19 JUMPI PUSH2 0x3F19 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3F33 JUMPI PUSH2 0x3F33 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26DE DUP5 DUP3 DUP6 ADD PUSH2 0x3EE0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F49 DUP3 MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3F57 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x2F89 JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH22 0x22A9219A1B191B16ABB930B83832B2102B32B73AB99 PUSH1 0x55 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x16 DUP3 ADD JUMPDEST SWAP2 POP PUSH2 0x8B9 DUP3 DUP5 PUSH2 0x3F3F JUMP JUMPDEST PUSH5 0x3B1A1B191B PUSH1 0xD9 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x5 DUP3 ADD PUSH2 0x3F84 JUMP JUMPDEST PUSH1 0x2A DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E DUP2 MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x3FA6 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x400B DUP3 DUP7 PUSH2 0x30C2 JUMP JUMPDEST PUSH2 0x4018 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x30C2 JUMP JUMPDEST PUSH2 0x26DE PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2F73 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x769 PUSH2 0x31F8 DUP4 DUP2 JUMP JUMPDEST PUSH2 0x403A DUP4 PUSH2 0x4025 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 NOT PUSH1 0x8 SWAP5 SWAP1 SWAP5 MUL SWAP4 DUP5 SHL NOT AND SWAP3 SHL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1778 DUP2 DUP5 DUP5 PUSH2 0x4031 JUMP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x896 JUMPI PUSH2 0x4075 PUSH1 0x0 DUP3 PUSH2 0x4055 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x4062 JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x1778 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH1 0x20 PUSH1 0x1F DUP6 ADD DIV DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x40A4 JUMPI POP DUP1 JUMPDEST PUSH2 0xBE1 PUSH1 0x20 PUSH1 0x1F DUP7 ADD DIV DUP4 ADD DUP3 PUSH2 0x4062 JUMP JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x40D0 JUMPI PUSH2 0x40D0 PUSH2 0x3370 JUMP JUMPDEST PUSH2 0x40DA DUP3 SLOAD PUSH2 0x32E5 JUMP JUMPDEST PUSH2 0x40E5 DUP3 DUP3 DUP6 PUSH2 0x407D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x4119 JUMPI PUSH1 0x0 DUP5 ISZERO PUSH2 0x4101 JUMPI POP DUP6 DUP3 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x8 DUP7 MUL SHR NOT DUP2 AND PUSH1 0x2 DUP7 MUL OR DUP7 SSTORE POP PUSH2 0x4172 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x4149 JUMPI DUP9 DUP6 ADD MLOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x4129 JUMP JUMPDEST DUP7 DUP4 LT ISZERO PUSH2 0x4165 JUMPI DUP5 DUP10 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x1F DUP10 AND PUSH1 0x8 MUL SHR NOT AND DUP3 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x2 DUP9 MUL ADD DUP9 SSTORE POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH21 0x4D6174683A206D756C446976206F766572666C6F77 PUSH1 0x58 SHL DUP2 MSTORE SWAP2 POP PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x417A JUMP JUMPDEST PUSH1 0x36 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F DUP2 MSTORE PUSH22 0x20746F206E6F6E2D7A65726F20616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x41B6 JUMP JUMPDEST PUSH1 0x1F DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 DUP2 MSTORE SWAP2 POP PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x4219 JUMP JUMPDEST PUSH1 0x21 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A206275726E2066726F6D20746865207A65726F20616464726573 DUP2 MSTORE PUSH1 0x73 PUSH1 0xF8 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x425D JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x45524332303A206275726E20616D6F756E7420657863656564732062616C616E DUP2 MSTORE PUSH2 0x6365 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x42AB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B9 DUP3 DUP5 PUSH2 0x3F3F JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F DUP2 MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x3637 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x4306 JUMP JUMPDEST PUSH1 0x1D DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 DUP2 MSTORE SWAP2 POP PUSH2 0x3668 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x769 DUP2 PUSH2 0x4359 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC3 AND 0xE9 SAR SWAP1 KECCAK256 DUP13 0xB8 0x4B JUMP PUSH28 0x814A12C4B23C6D3F0CC08BE6CE814C43C66611F4D664736F6C634300 ADDMOD NOT STOP CALLER ","sourceMap":"342:2321:56:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1485:101;1564:15;;1485:101;;;;;;;:::i;:::-;;;;;;;;2516:98:5;;;:::i;:::-;;;;;;;:::i;5831:167:7:-;;;;;;:::i;:::-;;:::i;4802:197:5:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7199:165:7:-;;;;;;:::i;:::-;;:::i;2102:147:26:-;;;;;;:::i;:::-;;:::i;:::-;;691:102:56;;;;;;:::i;:::-;756:15;:30;691:102;2328:30:52;;;;;-1:-1:-1;;;;;2328:30:52;;;;;;;;;;:::i;2143:138:56:-;2259:15;;2143:138;;6494:338:52;;;;;;:::i;:::-;;:::i;1011:94:56:-;;;;;;:::i;:::-;1072:13;:26;1011:94;5561:256:5;;;;;;:::i;:::-;;:::i;5061:173:7:-;;;:::i;:::-;;;;;;;:::i;7102:1543:52:-;;;:::i;5278:103:7:-;5367:6;;-1:-1:-1;;;;;5367:6:7;5278:103;;6212:234:5;;;;;;:::i;:::-;;:::i;1646:106:56:-;;;;;;:::i;:::-;-1:-1:-1;1731:14:56;;;1646:106;9095:417:52;;;;;;:::i;:::-;;:::i;1311:113:56:-;;;;;;:::i;:::-;-1:-1:-1;;;;;1389:18:56;;;;;;;:9;:18;;;;;:28;1311:113;1111:86;;;;;;:::i;:::-;1168:11;:22;1111:86;2214:31:52;;;;;-1:-1:-1;;;;;2214:31:52;;;;;;;;;;:::i;9557:716::-;;;;;;:::i;:::-;;:::i;3777:125:5:-;;;;;;:::i;:::-;-1:-1:-1;;;;;3877:18:5;3851:7;3877:18;;;:9;:18;;;;;;;3777:125;2085:101:1;;;:::i;2031:212:0:-;;;:::i;5767:159:52:-;;;;;;:::i;:::-;;:::i;1462:85:1:-;1534:6;;-1:-1:-1;;;;;1534:6:1;1462:85;;10490:572:52;;;;;;:::i;:::-;;:::i;2727:102:5:-;;;:::i;2104:20:52:-;;;;;-1:-1:-1;;;;;2104:20:52;;;6933:427:5;;;;;;:::i;:::-;;:::i;4098:189::-;;;;;;:::i;:::-;;:::i;6984:161:7:-;;;;;;:::i;:::-;;:::i;11333:614:52:-;;;;;;:::i;:::-;;:::i;2345:125:26:-;2442:21;;-1:-1:-1;;;;;2442:21:26;2345:125;;11992:667:52;;;;;;:::i;:::-;;:::i;907:98:56:-;;;;;;:::i;:::-;970:14;:28;907:98;323:28:34;;;;;;5101:420:52;;;;;;:::i;:::-;;:::i;1927:100:56:-;;;;;;:::i;:::-;-1:-1:-1;2009:11:56;;;1927:100;5610:167:7;;;;;;:::i;:::-;;:::i;1813:108:56:-;;;;;;:::i;:::-;-1:-1:-1;1899:15:56;;;1813:108;2033:104;;;;;;:::i;:::-;-1:-1:-1;2117:13:56;;;2033:104;799:102;;;;;;:::i;:::-;864:15;:30;799:102;4345:149:5;;;;;;:::i;:::-;;:::i;1144:99:0:-;1223:13;;-1:-1:-1;;;;;1223:13:0;1144:99;;6093:169:52;;;;;;:::i;:::-;;:::i;1436:178:0:-;;;;;;:::i;:::-;;:::i;1203:102:56:-;;;;;;:::i;:::-;1268:15;:30;1203:102;2516:98:5;2570:13;2602:5;2595:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2516:98;:::o;5831:167:7:-;5910:7;5936:55;5953:6;5961:29;5936:16;:55::i;:::-;5929:62;5831:167;-1:-1:-1;;5831:167:7:o;4802:197:5:-;4885:4;965:10:12;4939:32:5;965:10:12;4955:7:5;4964:6;4939:8;:32::i;:::-;-1:-1:-1;4988:4:5;;4802:197;-1:-1:-1;;;4802:197:5:o;7199:165:7:-;7278:7;7304:53;7321:6;7329:27;7304:16;:53::i;2102:147:26:-;1355:13:1;:11;:13::i;:::-;2195:47:26::1;2220:21;2195:24;:47::i;:::-;2102:147:::0;:::o;6494:338:52:-;1355:13:1;:11;:13::i;:::-;6586:30:52::1;::::0;-1:-1:-1;;;6586:30:52;;6568:15:::1;::::0;-1:-1:-1;;;;;6586:15:52;::::1;::::0;::::1;::::0;:30:::1;::::0;6610:4:::1;::::0;6586:30:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6568:48:::0;-1:-1:-1;6631:11:52;;6627:199:::1;;6658:14;6675:7;1534:6:1::0;;-1:-1:-1;;;;;1534:6:1;;1462:85;6675:7:52::1;6658:24;;6696:57;6730:5;6737:6;6745:7;6696:33;:57::i;:::-;6799:6;-1:-1:-1::0;;;;;6772:43:52::1;6791:5;-1:-1:-1::0;;;;;6772:43:52::1;;6807:7;6772:43;;;;;;:::i;:::-;;;;;;;;6644:182;6627:199;6558:274;6494:338:::0;:::o;5561:256:5:-;5658:4;965:10:12;5714:38:5;5730:4;965:10:12;5745:6:5;5714:15;:38::i;:::-;5762:27;5772:4;5778:2;5782:6;5762:9;:27::i;:::-;5806:4;5799:11;;;5561:256;;;;;;:::o;5061:173:7:-;5164:5;5210:17;:15;:17::i;:::-;5188:19;;:39;;;-1:-1:-1;;;5188:19:7;;;;:39;:::i;:::-;5181:46;;5061:173;:::o;7102:1543:52:-;7173:11;;7211:6;;7254:15;;7329:36;;;-1:-1:-1;;;7329:36:52;;;;-1:-1:-1;;;;;7173:11:52;;;;7211:6;;;;7254:15;;;;7145:25;;7173:11;;7329:34;;:36;;;;;7145:25;;7329:36;;;;;;;;7173:11;7329:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7329:36:52;;;;;;;;;;;;:::i;:::-;7280:85;;7376:42;7392:18;:25;7376:15;:42::i;:::-;7434:9;7429:1210;7453:18;:25;7449:1;:29;7429:1210;;;7499:36;7538:18;7557:1;7538:21;;;;;;;;:::i;:::-;;;;;;;7499:60;;7573:29;7631:17;-1:-1:-1;;;;;7631:29:52;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7705:15;;;7718:1;7705:15;;;;;;;;;7573:91;;-1:-1:-1;7679:23:52;;7705:15;;;;;;;;;;;;-1:-1:-1;7705:15:52;7679:41;;7747:7;7734;7742:1;7734:10;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7734:20:52;;;:10;;;;;;;;;:20;7768:78;;-1:-1:-1;;;7768:78:52;;:54;;;;;;:78;;7831:4;;7838:7;;7768:78;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7884:36:52;;-1:-1:-1;;;7884:36:52;;7860:21;;-1:-1:-1;;;;;;7884:21:52;;;-1:-1:-1;7884:21:52;;:36;;7914:4;;7884:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7860:60;-1:-1:-1;7939:17:52;;7935:626;;7976:79;8010:11;8023:16;8041:13;7976:33;:79::i;:::-;8265:254;;-1:-1:-1;;;8265:254:52;;-1:-1:-1;;;;;8265:57:52;;;;;:254;;8356:12;;8403:11;;8441:56;;8265:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8241:306;;8615:11;-1:-1:-1;;;;;8579:49:52;;8592:13;8579:49;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;7480:3:52;;;;;-1:-1:-1;7429:1210:52;;-1:-1:-1;7429:1210:52;;;7135:1510;;;;7102:1543::o;6212:234:5:-;6300:4;965:10:12;6354:64:5;965:10:12;6370:7:5;6407:10;6379:25;965:10:12;6370:7:5;6379:9;:25::i;:::-;:38;;;;:::i;:::-;6354:8;:64::i;9095:417:52:-;4882:13:3;;9274:1:52;;4882:13:3;;;;;4881:14;:40;;;;-1:-1:-1;4899:12:3;;:22;;;;:12;;:22;4881:40;4873:99;;;;-1:-1:-1;;;4873:99:3;;;;;;;:::i;:::-;;;;;;;;;4982:12;:22;;-1:-1:-1;;5014:20:3;4982:22;;;5014:20;4982:22;5014:20;;;9287:33:52::1;9308:11:::0;9287:20:::1;:33::i;:::-;9331:46;9355:21;9331:23;:46::i;:::-;9387:30;9405:11;9387:17;:30::i;:::-;9427:37;9447:16;9427:19;:37::i;:::-;9474:31;9493:11;9474:18;:31::i;:::-;5071:5:3::0;5055:21;;-1:-1:-1;;5055:21:3;;;5091:20;;;;;;5103:7;;5091:20;:::i;:::-;;;;;;;;9095:417:52;;;;;:::o;9557:716::-;9646:7;2526:21:4;:19;:21::i;:::-;9665:30:52::1;9686:8;9665:20;:30::i;:::-;9706:6;;;;;;;;;-1:-1:-1::0;;;;;9706:6:52::1;-1:-1:-1::0;;;;;9706:21:52::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9743:6;9753:1;9743:11:::0;9739:79:::1;;9777:30;;-1:-1:-1::0;;;9777:30:52::1;;;;;;;:::i;9739:79::-;1731:14:56::0;;9831:6:52::1;:29;9827:96;;;9883:29;;-1:-1:-1::0;;;9883:29:52::1;;;;;;;;;;;9827:96;9933:14;9950:22;9965:6;9950:14;:22::i;:::-;9933:39;;9986:6;9996:1;9986:11:::0;9982:79:::1;;10020:30;;-1:-1:-1::0;;;10020:30:52::1;;;;;;;:::i;9982:79::-;10071:25;10099:13;2259:15:56::0;;;2143:138;10099:13:52::1;10071:41:::0;-1:-1:-1;10122:48:52::1;965:10:12::0;10145:8:52::1;10155:6;10163;10122:8;:48::i;:::-;10180:20;10219:17;10203:13;2259:15:56::0;;;2143:138;10203:13:52::1;:33;;;;:::i;:::-;10180:56:::0;-1:-1:-1;;;;2568:20:4;1808:1;3074:7;:22;2894:209;2085:101:1;1355:13;:11;:13::i;:::-;2149:30:::1;2176:1;2149:18;:30::i;:::-;2085:101::o:0;2031:212:0:-;1223:13;;965:10:12;;-1:-1:-1;;;;;1223:13:0;2130:24;;2122:78;;;;-1:-1:-1;;;2122:78:0;;;;;;;:::i;:::-;2210:26;2229:6;2210:18;:26::i;5767:159:52:-;5832:48;;;;;;;;;;;;;;;;;;:19;:48::i;:::-;5890:29;5908:10;5890:17;:29::i;10490:572::-;10576:7;2526:21:4;:19;:21::i;:::-;10595:30:52::1;10616:8;10595:20;:30::i;:::-;10636:6;;;;;;;;;-1:-1:-1::0;;;;;10636:6:52::1;-1:-1:-1::0;;;;;10636:21:52::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10673:6;10683:1;10673:11:::0;10669:76:::1;;10707:27;;-1:-1:-1::0;;;10707:27:52::1;;;;;;;:::i;10669:76::-;2009:11:56::0;;10758:6:52::1;:26;10754:90;;;10807:26;;-1:-1:-1::0;;;10807:26:52::1;;;;;;;;;;;10754:90;10853:14;10870:19;10882:6;10870:11;:19::i;:::-;10853:36;;10903:6;10913:1;10903:11:::0;10899:76:::1;;10937:27;;-1:-1:-1::0;;;10937:27:52::1;;;;;;;:::i;10899:76::-;10984:48;965:10:12::0;11007:8:52::1;11017:6;11025;10984:8;:48::i;:::-;11049:6:::0;-1:-1:-1;2568:20:4;1808:1;3074:7;:22;2894:209;2727:102:5;2783:13;2815:7;2808:14;;;;;:::i;6933:427::-;7026:4;965:10:12;7026:4:5;7107:25;965:10:12;7124:7:5;7107:9;:25::i;:::-;7080:52;;7170:15;7150:16;:35;;7142:85;;;;-1:-1:-1;;;7142:85:5;;;;;;;:::i;:::-;7261:60;7270:5;7277:7;7305:15;7286:16;:34;7261:8;:60::i;:::-;-1:-1:-1;7349:4:5;;6933:427;-1:-1:-1;;;;6933:427:5:o;4098:189::-;4177:4;965:10:12;4231:28:5;965:10:12;4248:2:5;4252:6;4231:9;:28::i;6984:161:7:-;7059:7;7085:53;7102:6;7110:27;7085:16;:53::i;11333:614:52:-;11438:7;2526:21:4;:19;:21::i;:::-;11457:30:52::1;11478:8;11457:20;:30::i;:::-;11497:27;11518:5;11497:20;:27::i;:::-;11535:6;;;;;;;;;-1:-1:-1::0;;;;;11535:6:52::1;-1:-1:-1::0;;;;;11535:21:52::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11572:6;11582:1;11572:11:::0;11568:80:::1;;11606:31;;-1:-1:-1::0;;;11606:31:52::1;;;;;;;:::i;11568:80::-;1899:15:56::0;;11661:6:52::1;:27;11657:95;;;11711:30;;-1:-1:-1::0;;;11711:30:52::1;;;;;;;;;;;11657:95;11763:20;11785::::0;11809:23:::1;11825:6;11809:15;:23::i;:::-;11762:70;;;;11842:68;11852:12;965:10:12::0;;886:96;11852:12:52::1;11866:8;11876:5;11883:12;11897;11842:9;:68::i;:::-;11928:12:::0;-1:-1:-1;;2568:20:4;1808:1;3074:7;:22;2894:209;11992:667:52;12095:7;2526:21:4;:19;:21::i;:::-;12114:30:52::1;12135:8;12114:20;:30::i;:::-;12154:27;12175:5;12154:20;:27::i;:::-;12192:6;;;;;;;;;-1:-1:-1::0;;;;;12192:6:52::1;-1:-1:-1::0;;;;;12192:21:52::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12229:6;12239:1;12229:11:::0;12225:78:::1;;12263:29;;-1:-1:-1::0;;;12263:29:52::1;;;;;;;:::i;12225:78::-;2117:13:56::0;;12316:6:52::1;:25;12312:91;;;12364:28;;-1:-1:-1::0;;;12364:28:52::1;;;;;;;;;;;12312:91;12413:20;12436:21;12450:6;12436:13;:21::i;:::-;12413:44;;12471:12;12487:1;12471:17:::0;12467:84:::1;;12511:29;;-1:-1:-1::0;;;12511:29:52::1;;;;;;;:::i;12467:84::-;12561:62;965:10:12::0;12585:8:52::1;12595:5;12602:12;12616:6;12561:9;:62::i;:::-;12640:12:::0;-1:-1:-1;2568:20:4;1808:1;3074:7;:22;2894:209;5101:420:52;3279:19:3;3302:13;;;;;;3301:14;;3347:34;;;;-1:-1:-1;3365:12:3;;3380:1;3365:12;;;;:16;3347:34;3346:108;;;-1:-1:-1;3426:4:3;1713:19:11;:23;;;3387:66:3;;-1:-1:-1;3436:12:3;;;;;:17;3387:66;3325:201;;;;-1:-1:-1;;;3325:201:3;;;;;;;:::i;:::-;3536:12;:16;;-1:-1:-1;;3536:16:3;3551:1;3536:16;;;3562:65;;;;3596:13;:20;;-1:-1:-1;;3596:20:3;;;;;3562:65;5167:29:52::1;5188:7;5167:20;:29::i;:::-;5207:6;:24:::0;;-1:-1:-1;;;;;;5207:24:52::1;-1:-1:-1::0;;;;;5207:24:52;::::1;::::0;;::::1;::::0;;;5276:20:::1;::::0;;-1:-1:-1;;;5276:20:52;;;;:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;5207:24;5276:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5241:11;:57:::0;;-1:-1:-1;;;;;;5241:57:52::1;-1:-1:-1::0;;;;;5241:57:52;;::::1;;::::0;;5350:6:::1;::::0;:19:::1;::::0;;-1:-1:-1;;;5350:19:52;;;;-1:-1:-1;;5350:6:52;;;::::1;::::0;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:6;:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5308:62;;5381:68;5394:25;5413:5;5394:18;:25::i;:::-;5421:27;5442:5;5421:20;:27::i;:::-;5381:12;:68::i;:::-;5459:21;5474:5;5459:14;:21::i;:::-;5490:24;:22;:24::i;:::-;5157:364;3651:14:3::0;3647:99;;;3697:5;3681:21;;-1:-1:-1;;3681:21:3;;;3721:14;;;;;;3681:13;;3721:14;:::i;:::-;;;;;;;;3269:483;5101:420:52;:::o;5610:167:7:-;5689:7;5715:55;5732:6;5740:29;5715:16;:55::i;4345:149:5:-;-1:-1:-1;;;;;4460:18:5;;;4434:7;4460:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4345:149::o;6093:169:52:-;6162:50;;;;;;;;;;;;;;;;;;:19;:50::i;:::-;6222:33;6242:12;6222:19;:33::i;1436:178:0:-;1355:13:1;:11;:13::i;:::-;1525::0::1;:24:::0;;-1:-1:-1;;;;;1525:24:0;::::1;-1:-1:-1::0;;;;;;1525:24:0;;::::1;::::0;::::1;::::0;;;1589:7:::1;1534:6:1::0;;-1:-1:-1;;;;;1534:6:1;;1462:85;1589:7:0::1;-1:-1:-1::0;;;;;1564:43:0::1;;;;;;;;;;;1436:178:::0;:::o;9746:224:7:-;9854:7;9880:83;9894:13;1564:15:56;;;1485:101;9894:13:7;:17;;9910:1;9894:17;:::i;:::-;9935;:15;:17::i;:::-;9929:23;;:2;:23;:::i;:::-;2259:15:56;;9913:39:7;;;;:::i;:::-;9880:6;;:83;9954:8;9880:13;:83::i;10815:340:5:-;-1:-1:-1;;;;;10916:19:5;;10908:68;;;;-1:-1:-1;;;10908:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;10994:21:5;;10986:68;;;;-1:-1:-1;;;10986:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;11065:18:5;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;11116:32;;;;;11095:6;;11116:32;:::i;9398:224:7:-;9506:7;9532:83;9568:17;:15;:17::i;:::-;9562:23;;:2;:23;:::i;:::-;2259:15:56;;9546:39:7;;;;:::i;:::-;1564:15:56;;9587:17:7;;9603:1;9587:17;:::i;1620:130:1:-;1534:6;;-1:-1:-1;;;;;1534:6:1;965:10:12;1683:23:1;1675:68;;;;-1:-1:-1;;;1675:68:1;;;;;;;:::i;2641:425:26:-;-1:-1:-1;;;;;2733:44:26;;2725:94;;;;-1:-1:-1;;;2725:94:26;;;;;;;:::i;:::-;2871:21;;;-1:-1:-1;;;;;2903:70:26;;;-1:-1:-1;;;;;;2903:70:26;;;;;;2988:71;;2871:21;;;2988:71;;;;2871:21;;2951;;2988:71;:::i;996:186:10:-;1089:86;1109:5;1139:23;;;1164:2;1168:5;1116:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1116:58:10;;;;;;;;;;;;;;-1:-1:-1;;;;;1116:58:10;-1:-1:-1;;;;;;1116:58:10;;;;;;;;;;1089:19;:86::i;:::-;996:186;;;:::o;11436:411:5:-;11536:24;11563:25;11573:5;11580:7;11563:9;:25::i;:::-;11536:52;;-1:-1:-1;;11602:16:5;:37;11598:243;;11683:6;11663:16;:26;;11655:68;;;;-1:-1:-1;;;11655:68:5;;;;;;;:::i;:::-;11765:51;11774:5;11781:7;11809:6;11790:16;:25;11765:8;:51::i;:::-;11526:321;11436:411;;;:::o;7814:788::-;-1:-1:-1;;;;;7910:18:5;;7902:68;;;;-1:-1:-1;;;7902:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;7988:16:5;;7980:64;;;;-1:-1:-1;;;7980:64:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;8126:15:5;;8104:19;8126:15;;;:9;:15;;;;;;8159:21;;;;8151:72;;;;-1:-1:-1;;;8151:72:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;8257:15:5;;;;;;;:9;:15;;;;;;8275:20;;;8257:38;;8472:13;;;;;;;;;;:23;;;;;;8521:26;;;;;;8289:6;;8521:26;:::i;:::-;;;;;;;;8558:37;996:186:10;21712:139:52;21779:5;21825:7;5367:6:7;;-1:-1:-1;;;;;5367:6:7;;5278:103;21825:7:52;-1:-1:-1;;;;;21808:34:52;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21803:41;;:2;:41;:::i;1612:166:34:-;1684:13;;1678:3;:19;1674:98;;;1742:13;;1757:3;1720:41;;-1:-1:-1;;;1720:41:34;;;;;;;;;:::i;485:136:46:-;-1:-1:-1;;;;;548:22:46;;544:75;;589:23;;-1:-1:-1;;;589:23:46;;;;;;;;;;;1419:194:26;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;1519:21:26::1;:19;:21::i;:::-;1550:56;1584:21;1550:33;:56::i;1087:279:34:-:0;1164:13;;1156:5;:21;1148:68;;;;-1:-1:-1;;;1148:68:34;;;;;;;:::i;:::-;1254:13;;;1277:21;;;;1314:45;;;;;;1254:13;;1293:5;;1314:45;:::i;19331:220:52:-;19401:34;19422:12;19401:20;:34::i;:::-;19474:15;;19451:53;;-1:-1:-1;;;;;19451:53:52;;;;19474:15;;19451:53;;19474:15;;19451:53;19514:15;:30;;-1:-1:-1;;;;;;19514:30:52;-1:-1:-1;;;;;19514:30:52;;;;;;;;;;19331:220::o;1798:153:0:-;1887:13;1880:20;;-1:-1:-1;;;;;;1880:20:0;;;1910:34;1935:8;1910:24;:34::i;2601:287:4:-;1851:1;2733:7;;:19;2725:63;;;;-1:-1:-1;;;2725:63:4;;;;;;;:::i;:::-;1851:1;2863:7;:18;2601:287::o;19843:1696:52:-;19997:26;20044:7;5367:6:7;;-1:-1:-1;;;;;5367:6:7;;5278:103;20044:7:52;-1:-1:-1;;;;;20026:36:52;;20071:4;20026:51;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20117:6;;:31;;-1:-1:-1;;;20117:31:52;;19997:80;;-1:-1:-1;20087:27:52;;-1:-1:-1;;;;;20117:6:52;;;;:16;;:31;;20142:4;;20117:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20087:61;;20221:96;20277:7;5367:6:7;;-1:-1:-1;;;;;5367:6:7;;5278:103;20277:7:52;20287:6;20303:4;20310:6;20221:37;:96::i;:::-;20410:22;20489:18;20453:7;5367:6:7;;-1:-1:-1;;;;;5367:6:7;;5278:103;20453:7:52;-1:-1:-1;;;;;20435:36:52;;20480:4;20435:51;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:72;;;;:::i;:::-;20410:97;;20566:28;20579:14;20566:12;:28::i;:::-;20676:6;;:31;;-1:-1:-1;;;20676:31:52;;20650:23;;20710:19;;-1:-1:-1;;;;;20676:6:52;;;;:16;;:31;;20701:4;;20676:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;;:::i;:::-;20650:79;;20743:15;20762:1;20743:20;20739:108;;20786:50;;-1:-1:-1;;;20786:50:52;;;;;;;:::i;20739:108::-;20856:25;287:4:40;20903:6:52;;;;;;;;;-1:-1:-1;;;;;20903:6:52;-1:-1:-1;;;;;20903:25:52;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20885:45;;:15;:45;:::i;:::-;20884:59;;;;:::i;:::-;20856:87;;21112:20;21135:248;21195:17;:15;:17::i;:::-;21189:23;;:2;:23;:::i;:::-;2259:15:56;;21173:39:52;;;;:::i;:::-;21246:17;21226:13;1564:15:56;;;1485:101;21226:13:52;:17;;21242:1;21226:17;:::i;:::-;:37;;;;:::i;:::-;21135:17;;:248;21344:29;21135:24;:248::i;:::-;21112:271;;21440:29;21446:8;21456:12;21440:5;:29::i;:::-;21501:8;-1:-1:-1;;;;;21485:47:52;21493:6;-1:-1:-1;;;;;21485:47:52;;21511:6;21519:12;21485:47;;;;;;;:::i;:::-;;;;;;;;19945:1594;;;;;;19843:1696;;;;:::o;2894:209:4:-;1808:1;3074:7;:22;2894:209::o;3203:282:26:-;3304:21;;:60;;-1:-1:-1;;;3304:60:26;;3281:20;;-1:-1:-1;;;;;3304:21:26;;:37;;:60;;3342:10;;3354:9;;3304:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3281:83;;3380:15;3375:104;;3431:10;3451:4;3458:9;3418:50;;-1:-1:-1;;;3418:50:26;;;;;;;;;;:::i;17477:1061:52:-;17536:20;17558;17590:23;17634:7;5367:6:7;;-1:-1:-1;;;;;5367:6:7;;5278:103;17634:7:52;17590:52;;17652:21;17676:5;-1:-1:-1;;;;;17676:15:52;;17700:4;17676:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17746:6;;:31;;-1:-1:-1;;;17746:31:52;;17652:54;;-1:-1:-1;17716:27:52;;-1:-1:-1;;;;;17746:6:52;;;;:16;;:31;;17771:4;;17746:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17808:6;;:31;;-1:-1:-1;;;17808:31:52;;17716:61;;-1:-1:-1;17788:17:52;;-1:-1:-1;;;;;17808:6:52;;;;:23;;:31;;17832:6;;17808:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17788:51;-1:-1:-1;17853:21:52;;17849:94;;17922:9;17897:35;;-1:-1:-1;;;17897:35:52;;;;;;;;:::i;17849:94::-;18033:30;;-1:-1:-1;;;18033:30:52;;18066:13;;-1:-1:-1;;;;;18033:15:52;;;;;:30;;18057:4;;18033:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;;;:::i;:::-;18136:6;;:31;;-1:-1:-1;;;18136:31:52;;18018:61;;-1:-1:-1;18090:21:52;;-1:-1:-1;;;;;18136:6:52;;;;:16;;:31;;18161:4;;18136:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18114:53;;:19;:53;:::i;:::-;18090:77;;18181:13;18198:1;18181:18;18177:111;;18222:55;;-1:-1:-1;;;18222:55:52;;;;;;;:::i;18177:111::-;18374:157;18430:17;:15;:17::i;:::-;18424:23;;:2;:23;:::i;:::-;2259:15:56;;18408:39:52;;;;:::i;:::-;18374:13;;18461:19;18494:27;18374:20;:157::i;:::-;18359:172;;17580:958;;;;;17477:1061;;;:::o;10942:925:7:-;11129:5;-1:-1:-1;;;;;11119:15:7;:6;-1:-1:-1;;;;;11119:15:7;;11115:84;;11150:38;11166:5;11173:6;11181;11150:15;:38::i;:::-;11706:20;11712:5;11719:6;11706:5;:20::i;:::-;11770:6;;11736:59;;-1:-1:-1;;;;;11770:6:7;11778:8;11788:6;11736:33;:59::i;:::-;11838:5;-1:-1:-1;;;;;11811:49:7;11828:8;-1:-1:-1;;;;;11811:49:7;11820:6;-1:-1:-1;;;;;11811:49:7;;11845:6;11853;11811:49;;;;;;;:::i;:::-;;;;;;;;10942:925;;;;;:::o;16174:828:52:-;16231:7;16250:23;16294:7;5367:6:7;;-1:-1:-1;;;;;5367:6:7;;5278:103;16294:7:52;16250:52;;16312:21;16336:5;-1:-1:-1;;;;;16336:15:52;;16360:4;16336:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16518:6;;:31;;-1:-1:-1;;;16518:31:52;;16312:54;;-1:-1:-1;16473:15:52;;16491:164;;-1:-1:-1;;;;;16518:6:52;;:16;;:31;;16543:4;;16518:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16585:17;:15;:17::i;:::-;16579:23;;:2;:23;:::i;:::-;2259:15:56;;16563:39:52;;;;:::i;:::-;16491:6;;:164;16616:29;16491:13;:164::i;:::-;16686:6;;:22;;-1:-1:-1;;;16686:22:52;;16473:182;;-1:-1:-1;16666:17:52;;-1:-1:-1;;;;;16686:6:52;;;;:13;;:22;;16473:182;;16686:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16666:42;-1:-1:-1;16722:21:52;;16718:94;;16791:9;16766:35;;-1:-1:-1;;;16766:35:52;;;;;;;;:::i;16718:94::-;16845:30;;-1:-1:-1;;;16845:30:52;;16822:20;;-1:-1:-1;;;;;16845:15:52;;;;;:30;;16869:4;;16845:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16822:53;-1:-1:-1;16967:28:52;16982:13;16822:53;16967:28;:::i;:::-;16960:35;16174:828;-1:-1:-1;;;;;;;16174:828:52:o;22106:180::-;22182:13;22264:6;-1:-1:-1;;;;;22264:11:52;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22264:13:52;;;;;;;;;;;;:::i;:::-;22221:57;;;;;;;;:::i;:::-;;;;;;;;;;;;;22207:72;;22106:180;;;:::o;22549:167::-;22627:13;22692:6;-1:-1:-1;;;;;22692:13:52;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22692:15:52;;;;;;;;;;;;:::i;:::-;22666:42;;;;;;;;:::i;2139:147:5:-;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;2241:38:5::1;2264:5;2271:7;2241:22;:38::i;3560:125:7:-:0;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;3646:32:7::1;3671:6;3646:24;:32::i;1889:111:4:-:0;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;1959:34:4::1;:32;:34::i;6023:299:13:-:0;6124:7;6143:14;6160:25;6167:1;6170;6173:11;6160:6;:25::i;:::-;6143:42;-1:-1:-1;6211:11:13;6199:8;:23;;;;;;;;:::i;:::-;;:56;;;;;6254:1;6239:11;6226:25;;;;;:::i;:::-;6236:1;6233;6226:25;:29;6199:56;6195:98;;;6271:11;6281:1;6271:11;;:::i;:::-;;;6195:98;6309:6;-1:-1:-1;6023:299:13;;;;;;;:::o;5328:653:10:-;5758:23;5784:69;5812:4;5784:69;;;;;;;;;;;;;;;;;5792:5;-1:-1:-1;;;;;5784:27:10;;;:69;;;;;:::i;:::-;5758:95;;5871:10;:17;5892:1;5871:22;:56;;;;5908:10;5897:30;;;;;;;;;;;;:::i;:::-;5863:111;;;;-1:-1:-1;;;5863:111:10;;;;;;;:::i;889:100:0:-;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;956:26:0::1;:24;:26::i;1619:164:26:-:0;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;2687:187:1:-;2779:6;;;-1:-1:-1;;;;;2795:17:1;;;-1:-1:-1;;;;;;2795:17:1;;;;;;;2827:40;;2779:6;;;2795:17;2779:6;;2827:40;;2760:16;;2827:40;2750:124;2687:187;:::o;1421:214:10:-;1532:96;1552:5;1582:27;;;1611:4;1617:2;1621:5;1559:68;;;;;;;;;;:::i;18733:278:52:-;18836:6;;18790:62;;-1:-1:-1;;;;;18836:6:52;18845;18807:7;5367:6:7;;-1:-1:-1;;;;;5367:6:7;;5278:103;18807:7:52;-1:-1:-1;;;;;18790:37:52;;:62;:37;:62::i;:::-;18882:6;;:19;;-1:-1:-1;;;18882:19:52;;18862:17;;-1:-1:-1;;;;;18882:6:52;;:11;;:19;;18894:6;;18882:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18862:39;-1:-1:-1;18915:21:52;;18911:94;;18984:9;18959:35;;-1:-1:-1;;;18959:35:52;;;;;;;;:::i;2287:184:56:-;2382:6;2363:15;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;2398:18:56;;;;;;:9;:18;;;;;:28;;2420:6;;2398:18;:28;;2420:6;;2398:28;:::i;:::-;;;;-1:-1:-1;2436:28:56;;-1:-1:-1;2448:7:56;2457:6;2436:11;:28::i;2477:184::-;2572:6;2553:15;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;2588:18:56;;;;;;:9;:18;;;;;:28;;2610:6;;2588:18;:28;;2610:6;;2588:28;:::i;:::-;;;;-1:-1:-1;2626:28:56;;-1:-1:-1;2638:7:56;2647:6;2626:11;:28::i;2292:159:5:-;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;2404:5:5::1;:13;2412:5:::0;2404;:13:::1;:::i;:::-;-1:-1:-1::0;2427:7:5::1;:17;2437:7:::0;2427;:17:::1;:::i;3691:254:7:-:0;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;3788:12:7::1;3802:19:::0;3825:28:::1;3846:6;3825:20;:28::i;:::-;3787:66;;;;3885:7;:28;;3911:2;3885:28;;;3895:13;3885:28;3863:19;:50:::0;;-1:-1:-1;;;;;3923:15:7;;::::1;-1:-1:-1::0;;;;;;3863:50:7::1;::::0;;;::::1;-1:-1:-1::0;;;3863:50:7::1;3923:15:::0;;;;-1:-1:-1;;;;;;3923:15:7;;;;;;;::::1;::::0;;;-1:-1:-1;;3691:254:7:o;2006:109:4:-;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;1678:4213:13:-;1760:14;;;-1:-1:-1;;2297:1:13;2294;2287:20;2340:1;2337;2333:9;2324:18;;2395:5;2391:2;2388:13;2380:5;2376:2;2372:14;2368:34;2359:43;;2259:157;2497:5;2506:1;2497:10;2493:368;;2835:11;2827:5;:19;;;;;:::i;:::-;;2820:26;;;;;;2493:368;2985:5;2971:11;:19;2963:53;;;;-1:-1:-1;;;2963:53:13;;;;;;;:::i;:::-;3272:17;3407:11;3404:1;3401;3394:25;4785:1;3955;3940:12;;:16;;3925:32;;4060:22;;;;4766:1;:15;;4765:21;;5018;;;5014:25;;5003:36;5087:21;;;5083:25;;5072:36;5157:21;;;5153:25;;5142:36;5227:21;;;5223:25;;5212:36;5297:21;;;5293:25;;5282:36;5368:21;;;5364:25;;;5353:36;;;3910:12;4305;;;4301:23;;;4297:31;;;3521:20;;;3510:32;;;4417:12;;;;3568:21;;4158:16;;;;4408:21;;;;5832:15;;;-1:-1:-1;;;;1678:4213:13:o;4119:223:11:-;4252:12;4283:52;4305:6;4313:4;4319:1;4322:12;4283:21;:52::i;1125:111:1:-;5374:13:3;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:3;;;;;;;:::i;:::-;1197:32:1::1;965:10:12::0;1197:18:1::1;:32::i;1895:584:10:-:0;2231:10;;;2230:62;;-1:-1:-1;2247:39:10;;-1:-1:-1;;;2247:39:10;;-1:-1:-1;;;;;2247:15:10;;;;;:39;;2271:4;;2278:7;;2247:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;2230:62;2209:163;;;;-1:-1:-1;;;2209:163:10;;;;;;;:::i;:::-;2382:90;2402:5;2432:22;;;2456:7;2465:5;2409:62;;;;;;;;;:::i;8878:535:5:-;-1:-1:-1;;;;;8961:21:5;;8953:65;;;;-1:-1:-1;;;8953:65:5;;;;;;;:::i;:::-;9105:6;9089:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;9257:18:5;;;;;;:9;:18;;;;;;:28;;;;;;9310:37;;;;;9279:6;;9310:37;:::i;:::-;;;;;;;;6558:274:52::1;6494:338:::0;:::o;9733:659:5:-;-1:-1:-1;;;;;9816:21:5;;9808:67;;;;-1:-1:-1;;;9808:67:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;9971:18:5;;9946:22;9971:18;;;:9;:18;;;;;;10007:24;;;;9999:71;;;;-1:-1:-1;;;9999:71:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;10104:18:5;;;;;;:9;:18;;;;;;10125:23;;;10104:44;;10241:12;:22;;;;;;;10289:37;10104:18;;;10289:37;;;;10142:6;;10289:37;:::i;4088:568:7:-;4276:67;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4276:67:7;-1:-1:-1;;;4276:67:7;;;4236:117;;4166:4;;;;;;;;-1:-1:-1;;;;;4236:26:7;;;:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4189:164;;;;4367:7;:39;;;;;4404:2;4378:15;:22;:28;;4367:39;4363:260;;;4422:24;4460:15;4449:38;;;;;;;;;;;;:::i;:::-;4422:65;-1:-1:-1;4525:15:7;4505:35;;4501:112;;4568:4;;4580:16;;-1:-1:-1;4088:568:7;-1:-1:-1;;;;4088:568:7:o;4501:112::-;4408:215;4363:260;-1:-1:-1;4640:5:7;;;;-1:-1:-1;4088:568:7;-1:-1:-1;;;4088:568:7:o;5176:446:11:-;5341:12;5398:5;5373:21;:30;;5365:81;;;;-1:-1:-1;;;5365:81:11;;;;;;;:::i;:::-;5457:12;5471:23;5498:6;-1:-1:-1;;;;;5498:11:11;5517:5;5524:4;5498:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5456:73;;;;5546:69;5573:6;5581:7;5590:10;5602:12;7862;7890:7;7886:418;;;7917:10;:17;7938:1;7917:22;7913:286;;-1:-1:-1;;;;;1713:19:11;;;8124:60;;;;-1:-1:-1;;;8124:60:11;;;;;;;:::i;:::-;-1:-1:-1;8219:10:11;8212:17;;7886:418;8260:33;8268:10;8280:12;8991:17;;:21;8987:379;;9219:10;9213:17;9275:15;9262:10;9258:2;9254:19;9247:44;8987:379;9342:12;9335:20;;-1:-1:-1;;;9335:20:11;;;;;;;;:::i;90:118:69:-;195:5;177:24;172:3;165:37;90:118;;:::o;214:222::-;345:2;330:18;;358:71;334:9;402:6;358:71;:::i;722:248::-;804:1;814:113;828:6;825:1;822:13;814:113;;;904:11;;;898:18;885:11;;;878:39;850:2;843:10;814:113;;;-1:-1:-1;;961:1:69;943:16;;936:27;722:248::o;1084:377::-;1172:3;1200:39;1233:5;522:12;;442:99;1200:39;653:19;;;705:4;696:14;;1248:78;;1335:65;1393:6;1388:3;1381:4;1374:5;1370:16;1335:65;:::i;:::-;1068:2;1048:14;-1:-1:-1;;1044:28:69;1416:39;;;;;;-1:-1:-1;;1084:377:69:o;1467:313::-;1618:2;1631:47;;;1603:18;;1695:78;1603:18;1759:6;1695:78;:::i;2113:122::-;2204:5;2186:24;2179:5;2176:35;2166:63;;2225:1;2222;2215:12;2241:139;2312:20;;2341:33;2312:20;2341:33;:::i;2386:329::-;2445:6;2494:2;2482:9;2473:7;2469:23;2465:32;2462:119;;;2500:79;342:2321:56;;;2500:79:69;2620:1;2645:53;2690:7;2670:9;2645:53;:::i;2853:96::-;2890:7;-1:-1:-1;;;;;2787:54:69;;2919:24;2721:126;2955:122;3028:24;3046:5;3028:24;:::i;3083:139::-;3154:20;;3183:33;3154:20;3183:33;:::i;3228:474::-;3296:6;3304;3353:2;3341:9;3332:7;3328:23;3324:32;3321:119;;;3359:79;342:2321:56;;;3359:79:69;3479:1;3504:53;3549:7;3529:9;3504:53;:::i;:::-;3494:63;;3450:117;3606:2;3632:53;3677:7;3668:6;3657:9;3653:22;3632:53;:::i;:::-;3622:63;;3577:118;3228:474;;;;;:::o;3804:109::-;3778:13;;3771:21;3885;3708:90;3919:210;4044:2;4029:18;;4057:65;4033:9;4095:6;4057:65;:::i;4135:329::-;4194:6;4243:2;4231:9;4222:7;4218:23;4214:32;4211:119;;;4249:79;342:2321:56;;;4249:79:69;4369:1;4394:53;4439:7;4419:9;4394:53;:::i;4470:118::-;4557:24;4575:5;4557:24;:::i;4594:222::-;4725:2;4710:18;;4738:71;4714:9;4782:6;4738:71;:::i;4822:122::-;4885:7;4914:24;4932:5;4914:24;:::i;4950:174::-;5049:50;5093:5;5049:50;:::i;5130:191::-;5227:20;;5256:59;5227:20;5256:59;:::i;5327:381::-;5412:6;5461:2;5449:9;5440:7;5436:23;5432:32;5429:119;;;5467:79;342:2321:56;;;5467:79:69;5587:1;5612:79;5683:7;5663:9;5612:79;:::i;5714:619::-;5791:6;5799;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;342:2321:56;;;5862:79:69;5982:1;6007:53;6052:7;6032:9;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;6237:2;6263:53;6308:7;6299:6;6288:9;6284:22;6263:53;:::i;:::-;6253:63;;6208:118;5714:619;;;;;:::o;6431:112::-;6414:4;6403:16;;6514:22;6339:86;6549:214;6676:2;6661:18;;6689:67;6665:9;6729:6;6689:67;:::i;6769:765::-;6855:6;6863;6871;6879;6928:3;6916:9;6907:7;6903:23;6899:33;6896:120;;;6935:79;342:2321:56;;;6935:79:69;7055:1;7080:53;7125:7;7105:9;7080:53;:::i;:::-;7070:63;;7026:117;7182:2;7208:53;7253:7;7244:6;7233:9;7229:22;7208:53;:::i;:::-;7198:63;;7153:118;7310:2;7336:53;7381:7;7372:6;7361:9;7357:22;7336:53;:::i;:::-;7326:63;;7281:118;7438:2;7464:53;7509:7;7500:6;7489:9;7485:22;7464:53;:::i;:::-;7454:63;;7409:118;6769:765;;;;;;;:::o;7606:142::-;7656:9;7689:53;-1:-1:-1;;;;;2787:54:69;;7707:34;7:77;7716:24;73:5;7:77;7707:34;-1:-1:-1;;;;;2787:54:69;;2721:126;7754;7804:9;7837:37;7868:5;7837:37;:::i;7886:148::-;7958:9;7991:37;8022:5;7991:37;:::i;8040:175::-;8149:59;8202:5;8149:59;:::i;8221:266::-;8374:2;8359:18;;8387:93;8363:9;8453:6;8387:93;:::i;8493:474::-;8561:6;8569;8618:2;8606:9;8597:7;8593:23;8589:32;8586:119;;;8624:79;342:2321:56;;;8624:79:69;8744:1;8769:53;8814:7;8794:9;8769:53;:::i;:::-;8759:63;;8715:117;8871:2;8897:53;8942:7;8933:6;8922:9;8918:22;8897:53;:::i;9550:619::-;9627:6;9635;9643;9692:2;9680:9;9671:7;9667:23;9663:32;9660:119;;;9698:79;342:2321:56;;;9698:79:69;9818:1;9843:53;9888:7;9868:9;9843:53;:::i;:::-;9833:63;;9789:117;9945:2;9971:53;10016:7;10007:6;9996:9;9992:22;9971:53;:::i;:::-;9961:63;;9916:118;10073:2;10099:53;10144:7;10135:6;10124:9;10120:22;10099:53;:::i;10832:474::-;10900:6;10908;10957:2;10945:9;10936:7;10932:23;10928:32;10925:119;;;10963:79;342:2321:56;;;10963:79:69;11083:1;11108:53;11153:7;11133:9;11108:53;:::i;11312:180::-;-1:-1:-1;;;11357:1:69;11350:88;11457:4;11454:1;11447:15;11481:4;11478:1;11471:15;11498:320;11579:1;11569:12;;11626:1;11616:12;;;11637:81;;11703:4;11695:6;11691:17;11681:27;;11637:81;11765:2;11757:6;11754:14;11734:18;11731:38;11728:84;;11784:18;;:::i;:::-;11549:269;11498:320;;;:::o;11824:143::-;11906:13;;11928:33;11906:13;11928:33;:::i;11973:351::-;12043:6;12092:2;12080:9;12071:7;12067:23;12063:32;12060:119;;;12098:79;342:2321:56;;;12098:79:69;12218:1;12243:64;12299:7;12279:9;12243:64;:::i;12330:180::-;-1:-1:-1;;;12375:1:69;12368:88;12475:4;12472:1;12465:15;12499:4;12496:1;12489:15;12516:188;6414:4;6403:16;;;;;;;;12639:9;;;;12661:13;;12658:39;;;12677:18;;:::i;12833:180::-;-1:-1:-1;;;12878:1:69;12871:88;12978:4;12975:1;12968:15;13002:4;12999:1;12992:15;13019:281;-1:-1:-1;;1068:2:69;1048:14;;1044:28;13094:6;13090:40;13232:6;13220:10;13217:22;13196:18;13184:10;13181:34;13178:62;13175:88;;;13243:18;;:::i;:::-;13279:2;13272:22;-1:-1:-1;;13019:281:69:o;13306:129::-;13340:6;13367:20;1852:2;1846:9;;1786:75;13367:20;13357:30;;13396:33;13424:4;13416:6;13396:33;:::i;:::-;13306:129;;;:::o;13441:339::-;13546:4;13636:18;13628:6;13625:30;13622:56;;;13658:18;;:::i;:::-;-1:-1:-1;13708:4:69;13696:17;;;13758:15;;13441:339::o;14223:199::-;14333:13;;14355:61;14333:13;14355:61;:::i;14465:816::-;14600:5;14625:109;14641:92;14726:6;14641:92;:::i;:::-;14625:109;:::i;:::-;14769:21;;;14616:118;-1:-1:-1;14817:4:69;14806:16;;;;14858:17;;14846:30;;14888:15;;;14885:122;;;14918:79;342:2321:56;;;14918:79:69;15033:6;15016:259;15050:6;15045:3;15042:15;15016:259;;;15125:3;15154:76;15226:3;15214:10;15154:76;:::i;:::-;15142:89;;-1:-1:-1;15260:4:69;15251:14;;;;15067;15016:259;;;15020:21;14606:675;;14465:816;;;;;:::o;15324:441::-;15434:5;15483:3;15476:4;15468:6;15464:17;15460:27;15450:122;;15491:79;342:2321:56;;;15491:79:69;15601:6;15595:13;15626:133;15755:3;15747:6;15740:4;15732:6;15728:17;15626:133;:::i;15771:610::-;15894:6;15943:2;15931:9;15922:7;15918:23;15914:32;15911:119;;;15949:79;342:2321:56;;;15949:79:69;16069:24;;16120:18;16109:30;;16106:117;;;16142:79;342:2321:56;;;16142:79:69;16247:117;16356:7;16347:6;16336:9;16332:22;16247:117;:::i;16387:180::-;-1:-1:-1;;;16432:1:69;16425:88;16532:4;16529:1;16522:15;16556:4;16553:1;16546:15;16774:403;16870:6;16919:2;16907:9;16898:7;16894:23;16890:32;16887:119;;;16925:79;342:2321:56;;;16925:79:69;17045:1;17070:90;17152:7;17132:9;17070:90;:::i;17822:211::-;17907:10;17928:62;17986:3;17978:6;17928:62;:::i;:::-;-1:-1:-1;;18022:4:69;18013:14;;17822:211::o;18212:812::-;18347:3;18376:70;18440:5;522:12;;442:99;18376:70;653:19;;;705:4;696:14;;;;17636;;;18698:1;18683:316;18708:6;18705:1;18702:13;18683:316;;;18784:6;18778:13;18811:79;18886:3;18871:13;18811:79;:::i;:::-;18804:86;-1:-1:-1;18157:4:69;18148:14;;18903:86;-1:-1:-1;;18730:1:69;18723:9;18683:316;;;-1:-1:-1;19015:3:69;;18212:812;-1:-1:-1;;;;;18212:812:69:o;19030:515::-;19255:2;19240:18;;19268:71;19244:9;19312:6;19268:71;:::i;:::-;19386:9;19380:4;19376:20;19371:2;19360:9;19356:18;19349:48;19414:124;19533:4;19524:6;19414:124;:::i;19551:180::-;-1:-1:-1;;;19596:1:69;19589:88;19696:4;19693:1;19686:15;19720:4;19717:1;19710:15;19737:121;19826:1;19819:5;19816:12;19806:46;;19832:18;;:::i;19864:143::-;19946:5;19952:49;19946:5;19952:49;:::i;20013:143::-;20077:9;20110:40;20144:5;20110:40;:::i;20162:159::-;20263:51;20308:5;20263:51;:::i;20327:470::-;20528:2;20513:18;;20541:71;20517:9;20585:6;20541:71;:::i;:::-;20622:72;20690:2;20679:9;20675:18;20666:6;20622:72;:::i;:::-;20704:86;20786:2;20775:9;20771:18;20762:6;20704:86;:::i;20803:191::-;20932:9;;;20954:10;;;20951:36;;;20967:18;;:::i;21239:366::-;21466:2;653:19;;21381:3;705:4;696:14;;21140:34;21117:58;;-1:-1:-1;;;21204:2:69;21192:15;;21185:41;21395:74;-1:-1:-1;21478:93:69;-1:-1:-1;21596:2:69;21587:12;;21239:366::o;21611:419::-;21815:2;21828:47;;;21800:18;;21892:131;21800:18;21892:131;:::i;22199:365::-;22426:1;653:19;;22341:3;705:4;696:14;;-1:-1:-1;;;22153:33:69;;22355:73;-1:-1:-1;22437:93:69;-1:-1:-1;22555:2:69;22546:12;;22199:365::o;22570:419::-;22774:2;22787:47;;;22759:18;;22851:131;22759:18;22851:131;:::i;22995:194::-;23126:9;;;23148:11;;;23145:37;;;23162:18;;:::i;23429:366::-;23656:2;653:19;;23571:3;705:4;696:14;;23335:34;23312:58;;-1:-1:-1;;;23399:2:69;23387:15;;23380:36;23585:74;-1:-1:-1;23668:93:69;23195:228;23801:419;24005:2;24018:47;;;23990:18;;24082:131;23990:18;24082:131;:::i;24386:365::-;24613:1;653:19;;24528:3;705:4;696:14;;-1:-1:-1;;;24343:30:69;;24542:73;-1:-1:-1;24624:93:69;24226:154;24757:419;24961:2;24974:47;;;24946:18;;25038:131;24946:18;25038:131;:::i;25412:366::-;25639:2;653:19;;25554:3;705:4;696:14;;25322:34;25299:58;;-1:-1:-1;;;25386:2:69;25374:15;;25367:32;25568:74;-1:-1:-1;25651:93:69;25182:224;25784:419;25988:2;26001:47;;;25973:18;;26065:131;25973:18;26065:131;:::i;26373:365::-;26600:1;653:19;;26515:3;705:4;696:14;;-1:-1:-1;;;26326:34:69;;26529:73;-1:-1:-1;26611:93:69;26209:158;26744:419;26948:2;26961:47;;;26933:18;;27025:131;26933:18;27025:131;:::i;27331:365::-;27558:1;653:19;;27473:3;705:4;696:14;;-1:-1:-1;;;27286:32:69;;27487:73;-1:-1:-1;27569:93:69;27169:156;27702:419;27906:2;27919:47;;;27891:18;;27983:131;27891:18;27983:131;:::i;29066:143::-;29148:13;;29170:33;29148:13;29170:33;:::i;29215:351::-;29285:6;29334:2;29322:9;29313:7;29309:23;29305:32;29302:119;;;29340:79;342:2321:56;;;29340:79:69;29460:1;29485:64;29541:7;29521:9;29485:64;:::i;29663:154::-;29719:9;6414:4;6403:16;;29752:59;6339:86;29823:143;29916:43;29953:5;29916:43;:::i;29972:234::-;30109:2;30094:18;;30122:77;30098:9;30172:6;30122:77;:::i;30320:848::-;30412:6;30436:5;30450:712;30471:1;30461:8;30458:15;30450:712;;;30566:4;30561:3;30557:14;30551:4;30548:24;30545:50;;;30575:18;;:::i;:::-;30625:1;30615:8;30611:16;30608:451;;;31029:16;;;;30608:451;31080:15;;31120:32;31143:8;30298:1;30294:13;;30212:102;31120:32;31108:44;;30450:712;;;30320:848;;;;;;;:::o;31174:1073::-;31228:5;31419:8;31409:40;;-1:-1:-1;31440:1:69;31442:5;;31409:40;31468:4;31458:36;;-1:-1:-1;31485:1:69;31487:5;;31458:36;31554:4;31602:1;31597:27;;;;31638:1;31633:191;;;;31547:277;;31597:27;31615:1;31606:10;;31617:5;;;31633:191;31678:3;31668:8;31665:17;31662:43;;;31685:18;;:::i;:::-;31734:8;31731:1;31727:16;31718:25;;31769:3;31762:5;31759:14;31756:40;;;31776:18;;:::i;:::-;31809:5;;;31547:277;;31933:2;31923:8;31920:16;31914:3;31908:4;31905:13;31901:36;31883:2;31873:8;31870:16;31865:2;31859:4;31856:12;31852:35;31836:111;31833:246;;;-1:-1:-1;31979:19:69;;;32014:14;;;32011:40;;;32031:18;;:::i;:::-;32064:5;;31833:246;32104:42;32142:3;32132:8;32126:4;32123:1;32104:42;:::i;:::-;32089:57;;;;32178:4;32173:3;32169:14;32162:5;32159:25;32156:51;;;32187:18;;:::i;:::-;32225:16;;31174:1073;-1:-1:-1;;31174:1073:69:o;32253:281::-;32311:5;6414:4;6403:16;;32367:37;;32423:104;-1:-1:-1;;32450:8:69;32444:4;32423:104;:::i;32769:366::-;32996:2;653:19;;32911:3;705:4;696:14;;32680:34;32657:58;;-1:-1:-1;;;32744:2:69;32732:15;;32725:31;32925:74;-1:-1:-1;33008:93:69;32540:223;33141:419;33345:2;33358:47;;;33330:18;;33422:131;33330:18;33422:131;:::i;33793:366::-;34020:2;653:19;;33935:3;705:4;696:14;;33706:34;33683:58;;-1:-1:-1;;;33770:2:69;33758:15;;33751:29;33949:74;-1:-1:-1;34032:93:69;33566:221;34165:419;34369:2;34382:47;;;34354:18;;34446:131;34354:18;34446:131;:::i;34778:366::-;35005:2;653:19;;;34730:34;696:14;;34707:58;;;34920:3;35017:93;34590:182;35150:419;35354:2;35367:47;;;35339:18;;35431:131;35339:18;35431:131;:::i;35805:366::-;36032:2;653:19;;35947:3;705:4;696:14;;35715:34;35692:58;;-1:-1:-1;;;35779:2:69;35767:15;;35760:32;35961:74;-1:-1:-1;36044:93:69;35575:224;36177:419;36381:2;36394:47;;;36366:18;;36458:131;36366:18;36458:131;:::i;36602:332::-;36761:2;36746:18;;36774:71;36750:9;36818:6;36774:71;:::i;:::-;36855:72;36923:2;36912:9;36908:18;36899:6;36855:72;:::i;36940:332::-;37099:2;37084:18;;37112:71;37088:9;37156:6;37112:71;:::i;:::-;37193:72;37261:2;37250:9;37246:18;37237:6;37193:72;:::i;37463:366::-;37690:2;653:19;;37605:3;705:4;696:14;;37418:31;37395:55;;37619:74;-1:-1:-1;37702:93:69;37278:179;37835:419;38039:2;38052:47;;;38024:18;;38116:131;38024:18;38116:131;:::i;38490:366::-;38717:2;653:19;;38632:3;705:4;696:14;;38400:34;38377:58;;-1:-1:-1;;;38464:2:69;38452:15;;38445:32;38646:74;-1:-1:-1;38729:93:69;38260:224;38862:419;39066:2;39079:47;;;39051:18;;39143:131;39051:18;39143:131;:::i;39515:366::-;39742:2;653:19;;39657:3;705:4;696:14;;39427:34;39404:58;;-1:-1:-1;;;39491:2:69;39479:15;;39472:30;39671:74;-1:-1:-1;39754:93:69;39287:222;39887:419;40091:2;40104:47;;;40076:18;;40168:131;40076:18;40168:131;:::i;40543:366::-;40770:2;653:19;;40685:3;705:4;696:14;;40452:34;40429:58;;-1:-1:-1;;;40516:2:69;40504:15;;40497:33;40699:74;-1:-1:-1;40782:93:69;40312:225;40915:419;41119:2;41132:47;;;41104:18;;41196:131;41104:18;41196:131;:::i;41340:118::-;6414:4;6403:16;;41411:22;6339:86;41464:139;41544:13;;41566:31;41544:13;41566:31;:::i;41609:347::-;41677:6;41726:2;41714:9;41705:7;41701:23;41697:32;41694:119;;;41732:79;342:2321:56;;;41732:79:69;41852:1;41877:62;41931:7;41911:9;41877:62;:::i;41962:191::-;6414:4;6403:16;;;;;;;;42087:9;;;;42109:14;;42106:40;;;42126:18;;:::i;42159:332::-;42318:2;42303:18;;42331:71;42307:9;42375:6;42331:71;:::i;42733:366::-;42960:2;653:19;;42875:3;705:4;696:14;;42637:34;42614:58;;-1:-1:-1;;;42701:2:69;42689:15;;42682:38;42889:74;-1:-1:-1;42972:93:69;42497:230;43105:419;43309:2;43322:47;;;43294:18;;43386:131;43294:18;43386:131;:::i;43757:366::-;43984:2;653:19;;43899:3;705:4;696:14;;43670:34;43647:58;;-1:-1:-1;;;43734:2:69;43722:15;;43715:29;43913:74;-1:-1:-1;43996:93:69;43530:221;44129:419;44333:2;44346:47;;;44318:18;;44410:131;44318:18;44410:131;:::i;44741:366::-;44968:2;653:19;;44883:3;705:4;696:14;;44694:33;44671:57;;44897:74;-1:-1:-1;44980:93:69;44554:181;45113:419;45317:2;45330:47;;;45302:18;;45394:131;45302:18;45394:131;:::i;45721:366::-;45948:2;653:19;;45863:3;705:4;696:14;;45678:29;45655:53;;45877:74;-1:-1:-1;45960:93:69;45538:177;46093:419;46297:2;46310:47;;;46282:18;;46374:131;46282:18;46374:131;:::i;46518:410::-;46663:9;;;;46825;;46858:15;;;46852:22;;46805:83;46782:139;;46901:18;;:::i;:::-;46566:362;46518:410;;;;:::o;46934:180::-;-1:-1:-1;;;46979:1:69;46972:88;47079:4;47076:1;47069:15;47103:4;47100:1;47093:15;47120:185;47160:1;47250;47240:35;;47255:18;;:::i;:::-;-1:-1:-1;47290:9:69;;47120:185::o;47311:423::-;47490:2;47475:18;;47503:71;47479:9;47547:6;47503:71;:::i;:::-;47621:9;47615:4;47611:20;47606:2;47595:9;47591:18;47584:48;47649:78;47722:4;47713:6;47649:78;:::i;47740:116::-;3778:13;;3771:21;47810;3708:90;47862:137;47941:13;;47963:30;47941:13;47963:30;:::i;48005:345::-;48072:6;48121:2;48109:9;48100:7;48096:23;48092:32;48089:119;;;48127:79;342:2321:56;;;48127:79:69;48247:1;48272:61;48325:7;48305:9;48272:61;:::i;48356:533::-;48563:2;48548:18;;48576:71;48552:9;48620:6;48576:71;:::i;:::-;48657:72;48725:2;48714:9;48710:18;48701:6;48657:72;:::i;:::-;48776:9;48770:4;48766:20;48761:2;48750:9;48746:18;48739:48;48804:78;48877:4;48868:6;48804:78;:::i;:::-;48796:86;48356:533;-1:-1:-1;;;;;48356:533:69:o;49083:366::-;49310:2;653:19;;;49035:34;696:14;;49012:58;;;49225:3;49322:93;48895:182;49455:419;49659:2;49672:47;;;49644:18;;49736:131;49644:18;49736:131;:::i;50003:308::-;50065:4;50155:18;50147:6;50144:30;50141:56;;;50177:18;;:::i;:::-;-1:-1:-1;;1068:2:69;1048:14;;1044:28;50299:4;50289:15;;50003:308;-1:-1:-1;;50003:308:69:o;50317:434::-;50406:5;50431:66;50447:49;50489:6;50447:49;:::i;50431:66::-;50422:75;;50520:6;50513:5;50506:21;50558:4;50551:5;50547:16;50596:3;50587:6;50582:3;50578:16;50575:25;50572:112;;;50603:79;342:2321:56;;;50603:79:69;50693:52;50738:6;50733:3;50728;50693:52;:::i;:::-;50412:339;50317:434;;;;;:::o;50771:355::-;50838:5;50887:3;50880:4;50872:6;50868:17;50864:27;50854:122;;50895:79;342:2321:56;;;50895:79:69;51005:6;50999:13;51030:90;51116:3;51108:6;51101:4;51093:6;51089:17;51030:90;:::i;51132:524::-;51212:6;51261:2;51249:9;51240:7;51236:23;51232:32;51229:119;;;51267:79;342:2321:56;;;51267:79:69;51387:24;;51438:18;51427:30;;51424:117;;;51460:79;342:2321:56;;;51460:79:69;51565:74;51631:7;51622:6;51611:9;51607:22;51565:74;:::i;52402:390::-;52508:3;52536:39;52569:5;522:12;;442:99;52536:39;52689:65;52747:6;52742:3;52735:4;52728:5;52724:16;52689:65;:::i;:::-;52770:16;;;;;52402:390;-1:-1:-1;;52402:390:69:o;52798:541::-;-1:-1:-1;;;51933:48:69;;53031:3;52387:2;52378:12;;53053:148;53046:155;;53218:95;53309:3;53300:6;53218:95;:::i;53912:541::-;-1:-1:-1;;;53462:31:69;;54145:3;53898:1;53889:11;;54167:148;53506:400;54694:366;54921:2;653:19;;54836:3;705:4;696:14;;54599:34;54576:58;;-1:-1:-1;;;54663:2:69;54651:15;;54644:37;54850:74;-1:-1:-1;54933:93:69;54459:229;55066:419;55270:2;55283:47;;;55255:18;;55347:131;55255:18;55347:131;:::i;55491:442::-;55678:2;55663:18;;55691:71;55667:9;55735:6;55691:71;:::i;:::-;55772:72;55840:2;55829:9;55825:18;55816:6;55772:72;:::i;:::-;55854;55922:2;55911:9;55907:18;55898:6;55854:72;:::i;56697:142::-;56747:9;56780:53;56798:34;56825:5;56798:34;7:77;56926:269;57036:39;57067:7;57036:39;:::i;:::-;57125:11;;-1:-1:-1;;56417:1:69;56401:18;;;;56269:16;;;56626:9;56615:21;56269:16;;56655:30;;;;57084:105;;-1:-1:-1;56926:269:69:o;57280:189::-;57246:3;57398:65;57456:6;57448;57442:4;57398:65;:::i;57475:186::-;57552:3;57545:5;57542:14;57535:120;;;57606:39;57643:1;57636:5;57606:39;:::i;:::-;57579:1;57568:13;57535:120;;57667:543;57768:2;57763:3;57760:11;57757:446;;;55988:4;56024:14;;;56068:4;56055:18;;56170:2;56165;56154:14;;56150:23;57876:8;57872:44;58069:2;58057:10;58054:18;58051:49;;;-1:-1:-1;58090:8:69;58051:49;58113:80;56170:2;56165;56154:14;;56150:23;58159:8;58155:37;58142:11;58113:80;:::i;58813:1395::-;522:12;;59032:18;59024:6;59021:30;59018:56;;;59054:18;;:::i;:::-;59098:38;59130:4;59124:11;59098:38;:::i;:::-;59183:67;59243:6;59235;59229:4;59183:67;:::i;:::-;59301:4;59333:2;59322:14;;59350:1;59345:618;;;;60007:1;60024:6;60021:77;;;-1:-1:-1;60064:19:69;;;60058:26;60021:77;-1:-1:-1;;58449:1:69;58445:13;;58310:16;58412:56;58487:15;;58794:1;58790:11;;58781:21;60118:4;60111:81;59980:222;59315:887;;59345:618;55988:4;56024:14;;;56068:4;56055:18;;-1:-1:-1;;59381:22:69;;;59504:208;59518:7;59515:1;59512:14;59504:208;;;59588:19;;;59582:26;59567:42;;59695:2;59680:18;;;;59648:1;59636:14;;;;59534:12;59504:208;;;59740:6;59731:7;59728:19;59725:179;;;59789:19;;;59783:26;-1:-1:-1;;59883:4:69;59871:17;;58449:1;58445:13;58310:16;58412:56;58487:15;59826:64;;59725:179;59950:1;59946;59938:6;59934:14;59930:22;59924:4;59917:36;59352:611;;;59315:887;;58905:1303;;;58813:1395;;:::o;60391:366::-;60618:2;653:19;;60533:3;705:4;696:14;;-1:-1:-1;;;60331:47:69;;60547:74;-1:-1:-1;60630:93:69;60214:171;60763:419;60967:2;60980:47;;;60952:18;;61044:131;60952:18;61044:131;:::i;61435:366::-;61662:2;653:19;;61577:3;705:4;696:14;;61328:34;61305:58;;-1:-1:-1;;;61392:2:69;61380:15;;61373:49;61591:74;-1:-1:-1;61674:93:69;61188:241;61807:419;62011:2;62024:47;;;61996:18;;62088:131;61996:18;62088:131;:::i;62419:366::-;62646:2;653:19;;62561:3;705:4;696:14;;62372:33;62349:57;;62575:74;-1:-1:-1;62658:93:69;62232:181;62791:419;62995:2;63008:47;;;62980:18;;63072:131;62980:18;63072:131;:::i;63442:366::-;63669:2;653:19;;63584:3;705:4;696:14;;63356:34;63333:58;;-1:-1:-1;;;63420:2:69;63408:15;;63401:28;63598:74;-1:-1:-1;63681:93:69;63216:220;63814:419;64018:2;64031:47;;;64003:18;;64095:131;64003:18;64095:131;:::i;64466:366::-;64693:2;653:19;;64608:3;705:4;696:14;;64379:34;64356:58;;-1:-1:-1;;;64443:2:69;64431:15;;64424:29;64622:74;-1:-1:-1;64705:93:69;64239:221;64838:419;65042:2;65055:47;;;65027:18;;65119:131;65027:18;65119:131;:::i;65912:271::-;66042:3;66064:93;66153:3;66144:6;66064:93;:::i;66420:366::-;66647:2;653:19;;66562:3;705:4;696:14;;66329:34;66306:58;;-1:-1:-1;;;66393:2:69;66381:15;;66374:33;66576:74;-1:-1:-1;66659:93:69;66189:225;66792:419;66996:2;67009:47;;;66981:18;;67073:131;66981:18;67073:131;:::i;67402:366::-;67629:2;653:19;;67544:3;705:4;696:14;;67357:31;67334:55;;67558:74;-1:-1:-1;67641:93:69;67217:179;67774:419;67978:2;67991:47;;;67963:18;;68055:131;67963:18;68055:131;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"3472600","executionCost":"33531","totalCost":"3506131"},"external":{"acceptOwnership()":"infinite","accessControlManager()":"infinite","allowance(address,address)":"infinite","approve(address,uint256)":"infinite","asset()":"infinite","balanceOf(address)":"infinite","claimRewards()":"infinite","comptroller()":"infinite","convertToAssets(uint256)":"infinite","convertToShares(uint256)":"infinite","decimals()":"infinite","decreaseAllowance(address,uint256)":"infinite","deposit(uint256,address)":"infinite","increaseAllowance(address,uint256)":"infinite","initialize(address)":"infinite","initialize2(address,address,uint256,address)":"infinite","maxDeposit(address)":"infinite","maxLoopsLimit()":"2406","maxMint(address)":"infinite","maxRedeem(address)":"infinite","maxWithdraw(address)":"infinite","mint(uint256,address)":"infinite","name()":"infinite","owner()":"infinite","pendingOwner()":"infinite","previewDeposit(uint256)":"infinite","previewMint(uint256)":"infinite","previewRedeem(uint256)":"infinite","previewWithdraw(uint256)":"infinite","redeem(uint256,address,address)":"infinite","renounceOwnership()":"infinite","rewardRecipient()":"infinite","setAccessControlManager(address)":"infinite","setAccountBalance(address,uint256)":"infinite","setMaxDeposit(uint256)":"22548","setMaxLoopsLimit(uint256)":"infinite","setMaxMint(uint256)":"22527","setMaxRedeem(uint256)":"22549","setMaxWithdraw(uint256)":"22482","setRewardRecipient(address)":"infinite","setTotalAssets(uint256)":"22461","setTotalSupply(uint256)":"22547","sweepToken(address)":"infinite","symbol()":"infinite","totalAssets()":"2394","totalSupply()":"2448","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite","transferOwnership(address)":"infinite","vToken()":"infinite","withdraw(uint256,address,address)":"infinite"},"internal":{"_burn(address,uint256)":"infinite","_mint(address,uint256)":"infinite"}},"methodIdentifiers":{"acceptOwnership()":"79ba5097","accessControlManager()":"b4a0bdf3","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","asset()":"38d52e0f","balanceOf(address)":"70a08231","claimRewards()":"372500ab","comptroller()":"5fe3b567","convertToAssets(uint256)":"07a2d13a","convertToShares(uint256)":"c6e6f592","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","deposit(uint256,address)":"6e553f65","increaseAllowance(address,uint256)":"39509351","initialize(address)":"c4d66de8","initialize2(address,address,uint256,address)":"41e11a5a","maxDeposit(address)":"402d267d","maxLoopsLimit()":"be26317e","maxMint(address)":"c63d75b6","maxRedeem(address)":"d905777e","maxWithdraw(address)":"ce96cb77","mint(uint256,address)":"94bf804d","name()":"06fdde03","owner()":"8da5cb5b","pendingOwner()":"e30c3978","previewDeposit(uint256)":"ef8b30f7","previewMint(uint256)":"b3d7f6b9","previewRedeem(uint256)":"4cdad506","previewWithdraw(uint256)":"0a28a477","redeem(uint256,address,address)":"ba087652","renounceOwnership()":"715018a6","rewardRecipient()":"17f33340","setAccessControlManager(address)":"0e32cb86","setAccountBalance(address,uint256)":"46ddb7db","setMaxDeposit(uint256)":"bb371fdd","setMaxLoopsLimit(uint256)":"80d45a2d","setMaxMint(uint256)":"547520fe","setMaxRedeem(uint256)":"20f4af43","setMaxWithdraw(uint256)":"dcd9bb42","setRewardRecipient(address)":"e521136f","setTotalAssets(uint256)":"1765b313","setTotalSupply(uint256)":"f7ea7a3d","sweepToken(address)":"1be19560","symbol()":"95d89b41","totalAssets()":"01e1d114","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b","vToken()":"9bb1a99c","withdraw(uint256,address,address)":"b460af94"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ERC4626__DepositMoreThanMax\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC4626__MintMoreThanMax\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC4626__RedeemMoreThanMax\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC4626__WithdrawMoreThanMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"operation\",\"type\":\"string\"}],\"name\":\"ERC4626__ZeroAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loopsLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredLoops\",\"type\":\"uint256\"}],\"name\":\"MaxLoopsLimitExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"calledContract\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"methodSignature\",\"type\":\"string\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"errorCode\",\"type\":\"uint256\"}],\"name\":\"VenusERC4626__VenusError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"}],\"name\":\"ClaimRewards\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldMaxLoopsLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newmaxLoopsLimit\",\"type\":\"uint256\"}],\"name\":\"MaxLoopsLimitUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAccessControlManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAccessControlManager\",\"type\":\"address\"}],\"name\":\"NewAccessControlManager\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRecipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRecipient\",\"type\":\"address\"}],\"name\":\"RewardRecipientUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SweepToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"accessControlManager\",\"outputs\":[{\"internalType\":\"contract IAccessControlManagerV8\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"comptroller\",\"outputs\":[{\"internalType\":\"contract IComptroller\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"convertToAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"convertToShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vToken_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"accessControlManager_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"loopsLimit_\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"vaultOwner_\",\"type\":\"address\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxLoopsLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"maxMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"maxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"maxWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"accessControlManager_\",\"type\":\"address\"}],\"name\":\"setAccessControlManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"name\":\"setAccountBalance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxDeposit\",\"type\":\"uint256\"}],\"name\":\"setMaxDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loopsLimit\",\"type\":\"uint256\"}],\"name\":\"setMaxLoopsLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxMint\",\"type\":\"uint256\"}],\"name\":\"setMaxMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxRedeem\",\"type\":\"uint256\"}],\"name\":\"setMaxRedeem\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxWithdraw\",\"type\":\"uint256\"}],\"name\":\"setMaxWithdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRecipient\",\"type\":\"address\"}],\"name\":\"setRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalAssets\",\"type\":\"uint256\"}],\"name\":\"setTotalAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalSupply\",\"type\":\"uint256\"}],\"name\":\"setTotalSupply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Upgradeable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"sweepToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vToken\",\"outputs\":[{\"internalType\":\"contract VToken\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC4626__DepositMoreThanMax()\":[{\"details\":\"This error is triggered if the deposit amount is greater than `maxDeposit(receiver)`.\"}],\"ERC4626__MintMoreThanMax()\":[{\"details\":\"This error is triggered if the mint amount is greater than `maxMint(receiver)`.\"}],\"ERC4626__RedeemMoreThanMax()\":[{\"details\":\"This error is triggered if the redemption amount is greater than `maxRedeem(owner)`.\"}],\"ERC4626__WithdrawMoreThanMax()\":[{\"details\":\"This error is triggered if the withdrawal amount is greater than `maxWithdraw(owner)`.\"}],\"ERC4626__ZeroAmount(string)\":[{\"details\":\"This error prevents unnecessary transactions with zero amounts in deposit, withdraw, mint, or redeem operations.\",\"params\":{\"operation\":\"The name of the operation that failed (e.g., \\\"deposit\\\", \\\"withdraw\\\", \\\"mint\\\", \\\"redeem\\\").\"}}],\"VenusERC4626__VenusError(uint256)\":[{\"details\":\"This error is triggered if a Venus operation (such as minting or redeeming vTokens) fails.\",\"params\":{\"errorCode\":\"The error code returned by the Venus protocol.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"ClaimRewards(uint256,address)\":{\"params\":{\"amount\":\"The amount of reward tokens claimed.\",\"rewardToken\":\"The address of the reward token claimed.\"}},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RewardRecipientUpdated(address,address)\":{\"params\":{\"newRecipient\":\"The new reward recipient address.\",\"oldRecipient\":\"The previous reward recipient address.\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"asset()\":{\"details\":\"See {IERC4626-asset}. \"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"claimRewards()\":{\"details\":\"Iterates through all reward distributors fetched from the comptroller, claims rewards, and transfers them if available.\"},\"convertToAssets(uint256)\":{\"details\":\"See {IERC4626-convertToAssets}. \"},\"convertToShares(uint256)\":{\"details\":\"See {IERC4626-convertToShares}. \"},\"decimals()\":{\"details\":\"Decimals are computed by adding the decimal offset on top of the underlying asset's decimals. This \\\"original\\\" value is cached during construction of the vault contract. If this read operation fails (e.g., the asset has not been created yet), a default of 18 is used to represent the underlying asset's decimals. See {IERC20Metadata-decimals}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"deposit(uint256,address)\":{\"details\":\"See {IERC4626-deposit}. \"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"initialize(address)\":{\"details\":\"`initialize2` should be invoked to complete the configuration of the vault\",\"params\":{\"vToken_\":\"The VToken associated with the vault, representing the yield-bearing asset.\"}},\"initialize2(address,address,uint256,address)\":{\"params\":{\"accessControlManager_\":\"Address of the ACM contract\",\"loopsLimit_\":\"The maximum number of loops allowed for reward distribution.\",\"rewardRecipient_\":\"The address that will receive rewards generated by the vault.\",\"vaultOwner_\":\"The owner that will be set for the created vault\"}},\"maxDeposit(address)\":{\"details\":\"If minting is paused or the supply cap is reached, returns 0.\",\"params\":{\"\":\"/*account*/ The address of the account.\"},\"returns\":{\"_0\":\"The maximum amount of assets that can be deposited.\"}},\"maxMint(address)\":{\"details\":\"This is derived from the maximum deposit amount converted to shares.\",\"params\":{\"\":\"/*account*/ The address of the account.\"},\"returns\":{\"_0\":\"The maximum number of shares that can be minted.\"}},\"mint(uint256,address)\":{\"details\":\"The minted shares are calculated considering the minted VTokensIt can mint slightly fewer shares than requested, because VToken.mint rounds down\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"previewDeposit(uint256)\":{\"details\":\"See {IERC4626-previewDeposit}. \"},\"previewMint(uint256)\":{\"details\":\"See {IERC4626-previewMint}. \"},\"previewRedeem(uint256)\":{\"details\":\"See {IERC4626-previewRedeem}. \"},\"previewWithdraw(uint256)\":{\"details\":\"See {IERC4626-previewWithdraw}. \"},\"redeem(uint256,address,address)\":{\"details\":\"See {IERC4626-redeem}. \"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setAccessControlManager(address)\":{\"custom:access\":\"Only Governance\",\"custom:event\":\"Emits NewAccessControlManager event\",\"details\":\"Admin function to set address of AccessControlManager\",\"params\":{\"accessControlManager_\":\"The new address of the AccessControlManager\"}},\"setMaxLoopsLimit(uint256)\":{\"custom:access\":\"Controlled by ACM\",\"custom:event\":\"Emits MaxLoopsLimitUpdated event on success\",\"params\":{\"loopsLimit\":\"Number of loops limit\"}},\"setRewardRecipient(address)\":{\"custom:access\":\"Controlled by ACM\",\"params\":{\"newRecipient\":\"The address of the new reward recipient\"}},\"sweepToken(address)\":{\"custom:access\":\"Only owner\",\"custom:event\":\"SweepToken emits on success\",\"params\":{\"token\":\"Address of the token\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalAssets()\":{\"returns\":{\"_0\":\"Amount of assets deposited\"}},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"},\"withdraw(uint256,address,address)\":{\"details\":\"Receiver can receive slightly more assets than requested, because VToken.redeemUnderlying rounds upThe shares to burn are calculated considering the actual transferred assets, not the requested ones\"}},\"version\":1},\"userdoc\":{\"errors\":{\"ERC4626__DepositMoreThanMax()\":[{\"notice\":\"Thrown when a deposit exceeds the maximum allowed limit.\"}],\"ERC4626__MintMoreThanMax()\":[{\"notice\":\"Thrown when a mint operation exceeds the maximum allowed limit.\"}],\"ERC4626__RedeemMoreThanMax()\":[{\"notice\":\"Thrown when a redemption exceeds the maximum redeemable shares.\"}],\"ERC4626__WithdrawMoreThanMax()\":[{\"notice\":\"Thrown when a withdrawal exceeds the maximum available assets.\"}],\"ERC4626__ZeroAmount(string)\":[{\"notice\":\"Thrown when attempting an operation with a zero amount.\"}],\"MaxLoopsLimitExceeded(uint256,uint256)\":[{\"notice\":\"Thrown an error on maxLoopsLimit exceeds for any loop\"}],\"Unauthorized(address,address,string)\":[{\"notice\":\"Thrown when the action is prohibited by AccessControlManager\"}],\"VenusERC4626__VenusError(uint256)\":[{\"notice\":\"Thrown when a Venus protocol call returns an error.\"}],\"ZeroAddressNotAllowed()\":[{\"notice\":\"Thrown if the supplied address is a zero address where it is not allowed\"}]},\"events\":{\"ClaimRewards(uint256,address)\":{\"notice\":\"Emitted when rewards are claimed.\"},\"MaxLoopsLimitUpdated(uint256,uint256)\":{\"notice\":\"Emitted when max loops limit is set\"},\"NewAccessControlManager(address,address)\":{\"notice\":\"Emitted when access control manager contract address is changed\"},\"RewardRecipientUpdated(address,address)\":{\"notice\":\"Emitted when the reward recipient address is updated.\"},\"SweepToken(address,address,uint256)\":{\"notice\":\"Event emitted when tokens are swept\"}},\"kind\":\"user\",\"methods\":{\"accessControlManager()\":{\"notice\":\"Returns the address of the access control manager contract\"},\"claimRewards()\":{\"notice\":\"Claims rewards from all reward distributors associated with the VToken and transfers them to the reward recipient.\"},\"comptroller()\":{\"notice\":\"The Venus Comptroller contract, responsible for market operations.\"},\"initialize(address)\":{\"notice\":\"Initializes the VenusERC4626 vault, only with the VToken address associated to the vault\"},\"initialize2(address,address,uint256,address)\":{\"notice\":\"Second function to invoke to complete the configuration of the vault, setting the rest of the attributes\"},\"maxDeposit(address)\":{\"notice\":\"Returns the maximum deposit allowed based on Venus supply caps.\"},\"maxMint(address)\":{\"notice\":\"Returns the maximum amount of shares that can be minted.\"},\"rewardRecipient()\":{\"notice\":\"The recipient of rewards distributed by the Venus Protocol.\"},\"setAccessControlManager(address)\":{\"notice\":\"Sets the address of AccessControlManager\"},\"setMaxLoopsLimit(uint256)\":{\"notice\":\"Set the limit for the loops can iterate to avoid the DOS\"},\"setRewardRecipient(address)\":{\"notice\":\"Sets a new reward recipient address\"},\"sweepToken(address)\":{\"notice\":\"Sweeps the input token address tokens from the contract and sends them to the owner\"},\"totalAssets()\":{\"notice\":\"Returns the total amount of assets deposited\"},\"vToken()\":{\"notice\":\"The Venus vToken associated with this ERC4626 vault.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/Mocks/MockVenusERC4626.sol\":\"MockVenusERC4626\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./OwnableUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership} and {acceptOwnership}.\\n *\\n * This module is used through inheritance. It will make available all functions\\n * from parent (Ownable).\\n */\\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\\n    address private _pendingOwner;\\n\\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\\n\\n    function __Ownable2Step_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable2Step_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Returns the address of the pending owner.\\n     */\\n    function pendingOwner() public view virtual returns (address) {\\n        return _pendingOwner;\\n    }\\n\\n    /**\\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\\n        _pendingOwner = newOwner;\\n        emit OwnershipTransferStarted(owner(), newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual override {\\n        delete _pendingOwner;\\n        super._transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev The new owner accepts the ownership transfer.\\n     */\\n    function acceptOwnership() public virtual {\\n        address sender = _msgSender();\\n        require(pendingOwner() == sender, \\\"Ownable2Step: caller is not the new owner\\\");\\n        _transferOwnership(sender);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x9140dabc466abab21b48b72dbda26736b1183a310d0e677d3719d201df026510\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/interfaces/IERC4626Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC4626.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../token/ERC20/IERC20Upgradeable.sol\\\";\\nimport \\\"../token/ERC20/extensions/IERC20MetadataUpgradeable.sol\\\";\\n\\n/**\\n * @dev Interface of the ERC4626 \\\"Tokenized Vault Standard\\\", as defined in\\n * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\\n *\\n * _Available since v4.7._\\n */\\ninterface IERC4626Upgradeable is IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);\\n\\n    event Withdraw(\\n        address indexed sender,\\n        address indexed receiver,\\n        address indexed owner,\\n        uint256 assets,\\n        uint256 shares\\n    );\\n\\n    /**\\n     * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\\n     *\\n     * - MUST be an ERC-20 token contract.\\n     * - MUST NOT revert.\\n     */\\n    function asset() external view returns (address assetTokenAddress);\\n\\n    /**\\n     * @dev Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault.\\n     *\\n     * - SHOULD include any compounding that occurs from yield.\\n     * - MUST be inclusive of any fees that are charged against assets in the Vault.\\n     * - MUST NOT revert.\\n     */\\n    function totalAssets() external view returns (uint256 totalManagedAssets);\\n\\n    /**\\n     * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\\n     * scenario where all the conditions are met.\\n     *\\n     * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\\n     * - MUST NOT show any variations depending on the caller.\\n     * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the\\n     * \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and\\n     * from.\\n     */\\n    function convertToShares(uint256 assets) external view returns (uint256 shares);\\n\\n    /**\\n     * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\\n     * scenario where all the conditions are met.\\n     *\\n     * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\\n     * - MUST NOT show any variations depending on the caller.\\n     * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the\\n     * \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and\\n     * from.\\n     */\\n    function convertToAssets(uint256 shares) external view returns (uint256 assets);\\n\\n    /**\\n     * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\\n     * through a deposit call.\\n     *\\n     * - MUST return a limited value if receiver is subject to some deposit limit.\\n     * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\\n     * - MUST NOT revert.\\n     */\\n    function maxDeposit(address receiver) external view returns (uint256 maxAssets);\\n\\n    /**\\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\\n     * current on-chain conditions.\\n     *\\n     * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\\n     *   call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\\n     *   in the same transaction.\\n     * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\\n     *   deposit would be accepted, regardless if the user has enough tokens approved, etc.\\n     * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\\n     * share price or some other type of condition, meaning the depositor will lose assets by depositing.\\n     */\\n    function previewDeposit(uint256 assets) external view returns (uint256 shares);\\n\\n    /**\\n     * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\\n     *\\n     * - MUST emit the Deposit event.\\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\\n     *   deposit execution, and are accounted for during deposit.\\n     * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\\n     *   approving enough underlying tokens to the Vault contract, etc).\\n     *\\n     * NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\\n     */\\n    function deposit(uint256 assets, address receiver) external returns (uint256 shares);\\n\\n    /**\\n     * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\\n     * - MUST return a limited value if receiver is subject to some mint limit.\\n     * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\\n     * - MUST NOT revert.\\n     */\\n    function maxMint(address receiver) external view returns (uint256 maxShares);\\n\\n    /**\\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\\n     * current on-chain conditions.\\n     *\\n     * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\\n     *   in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\\n     *   same transaction.\\n     * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\\n     *   would be accepted, regardless if the user has enough tokens approved, etc.\\n     * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\\n     * share price or some other type of condition, meaning the depositor will lose assets by minting.\\n     */\\n    function previewMint(uint256 shares) external view returns (uint256 assets);\\n\\n    /**\\n     * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\\n     *\\n     * - MUST emit the Deposit event.\\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\\n     *   execution, and are accounted for during mint.\\n     * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\\n     *   approving enough underlying tokens to the Vault contract, etc).\\n     *\\n     * NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\\n     */\\n    function mint(uint256 shares, address receiver) external returns (uint256 assets);\\n\\n    /**\\n     * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\\n     * Vault, through a withdraw call.\\n     *\\n     * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\\n     * - MUST NOT revert.\\n     */\\n    function maxWithdraw(address owner) external view returns (uint256 maxAssets);\\n\\n    /**\\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\\n     * given current on-chain conditions.\\n     *\\n     * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\\n     *   call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\\n     *   called\\n     *   in the same transaction.\\n     * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\\n     *   the withdrawal would be accepted, regardless if the user has enough shares, etc.\\n     * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\\n     * share price or some other type of condition, meaning the depositor will lose assets by depositing.\\n     */\\n    function previewWithdraw(uint256 assets) external view returns (uint256 shares);\\n\\n    /**\\n     * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\\n     *\\n     * - MUST emit the Withdraw event.\\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\\n     *   withdraw execution, and are accounted for during withdraw.\\n     * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\\n     *   not having enough shares, etc).\\n     *\\n     * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\\n     * Those methods should be performed separately.\\n     */\\n    function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);\\n\\n    /**\\n     * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\\n     * through a redeem call.\\n     *\\n     * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\\n     * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\\n     * - MUST NOT revert.\\n     */\\n    function maxRedeem(address owner) external view returns (uint256 maxShares);\\n\\n    /**\\n     * @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\\n     * given current on-chain conditions.\\n     *\\n     * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\\n     *   in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\\n     *   same transaction.\\n     * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\\n     *   redemption would be accepted, regardless if the user has enough shares, etc.\\n     * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\\n     * - MUST NOT revert.\\n     *\\n     * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\\n     * share price or some other type of condition, meaning the depositor will lose assets by redeeming.\\n     */\\n    function previewRedeem(uint256 shares) external view returns (uint256 assets);\\n\\n    /**\\n     * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\\n     *\\n     * - MUST emit the Withdraw event.\\n     * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\\n     *   redeem execution, and are accounted for during redeem.\\n     * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\\n     *   not having enough shares, etc).\\n     *\\n     * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\\n     * Those methods should be performed separately.\\n     */\\n    function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);\\n}\\n\",\"keccak256\":\"0xf867351fb48f5c0e3b45f085ce60f374b785417f84370cb2ffb57f421931e7eb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuardUpgradeable is Initializable {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    function __ReentrancyGuard_init() internal onlyInitializing {\\n        __ReentrancyGuard_init_unchained();\\n    }\\n\\n    function __ReentrancyGuard_init_unchained() internal onlyInitializing {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Returns true if the reentrancy guard is currently set to \\\"entered\\\", which indicates there is a\\n     * `nonReentrant` function in the call stack.\\n     */\\n    function _reentrancyGuardEntered() internal view returns (bool) {\\n        return _status == _ENTERED;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2025ccf05f6f1f2fd4e078e552836f525a1864e3854ed555047cd732320ab29b\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xa9311aeb22f459e57d4dac77ee76cf43fb28ad3215278456211b5852b0e9e970\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/ERC4626.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../utils/SafeERC20Upgradeable.sol\\\";\\nimport \\\"../../../interfaces/IERC4626Upgradeable.sol\\\";\\nimport \\\"../../../utils/math/MathUpgradeable.sol\\\";\\nimport {Initializable} from \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the ERC4626 \\\"Tokenized Vault Standard\\\" as defined in\\n * https://eips.ethereum.org/EIPS/eip-4626[EIP-4626].\\n *\\n * This extension allows the minting and burning of \\\"shares\\\" (represented using the ERC20 inheritance) in exchange for\\n * underlying \\\"assets\\\" through standardized {deposit}, {mint}, {redeem} and {burn} workflows. This contract extends\\n * the ERC20 standard. Any additional extensions included along it would affect the \\\"shares\\\" token represented by this\\n * contract and not the \\\"assets\\\" token which is an independent contract.\\n *\\n * [CAUTION]\\n * ====\\n * In empty (or nearly empty) ERC-4626 vaults, deposits are at high risk of being stolen through frontrunning\\n * with a \\\"donation\\\" to the vault that inflates the price of a share. This is variously known as a donation or inflation\\n * attack and is essentially a problem of slippage. Vault deployers can protect against this attack by making an initial\\n * deposit of a non-trivial amount of the asset, such that price manipulation becomes infeasible. Withdrawals may\\n * similarly be affected by slippage. Users can protect against this attack as well as unexpected slippage in general by\\n * verifying the amount received is as expected, using a wrapper that performs these checks such as\\n * https://github.com/fei-protocol/ERC4626#erc4626router-and-base[ERC4626Router].\\n *\\n * Since v4.9, this implementation uses virtual assets and shares to mitigate that risk. The `_decimalsOffset()`\\n * corresponds to an offset in the decimal representation between the underlying asset's decimals and the vault\\n * decimals. This offset also determines the rate of virtual shares to virtual assets in the vault, which itself\\n * determines the initial exchange rate. While not fully preventing the attack, analysis shows that the default offset\\n * (0) makes it non-profitable, as a result of the value being captured by the virtual shares (out of the attacker's\\n * donation) matching the attacker's expected gains. With a larger offset, the attack becomes orders of magnitude more\\n * expensive than it is profitable. More details about the underlying math can be found\\n * xref:erc4626.adoc#inflation-attack[here].\\n *\\n * The drawback of this approach is that the virtual shares do capture (a very small) part of the value being accrued\\n * to the vault. Also, if the vault experiences losses, the users try to exit the vault, the virtual shares and assets\\n * will cause the first user to exit to experience reduced losses in detriment to the last users that will experience\\n * bigger losses. Developers willing to revert back to the pre-v4.9 behavior just need to override the\\n * `_convertToShares` and `_convertToAssets` functions.\\n *\\n * To learn more, check out our xref:ROOT:erc4626.adoc[ERC-4626 guide].\\n * ====\\n *\\n * _Available since v4.7._\\n */\\nabstract contract ERC4626Upgradeable is Initializable, ERC20Upgradeable, IERC4626Upgradeable {\\n    using MathUpgradeable for uint256;\\n\\n    IERC20Upgradeable private _asset;\\n    uint8 private _underlyingDecimals;\\n\\n    /**\\n     * @dev Set the underlying asset contract. This must be an ERC20-compatible contract (ERC20 or ERC777).\\n     */\\n    function __ERC4626_init(IERC20Upgradeable asset_) internal onlyInitializing {\\n        __ERC4626_init_unchained(asset_);\\n    }\\n\\n    function __ERC4626_init_unchained(IERC20Upgradeable asset_) internal onlyInitializing {\\n        (bool success, uint8 assetDecimals) = _tryGetAssetDecimals(asset_);\\n        _underlyingDecimals = success ? assetDecimals : 18;\\n        _asset = asset_;\\n    }\\n\\n    /**\\n     * @dev Attempts to fetch the asset decimals. A return value of false indicates that the attempt failed in some way.\\n     */\\n    function _tryGetAssetDecimals(IERC20Upgradeable asset_) private view returns (bool, uint8) {\\n        (bool success, bytes memory encodedDecimals) = address(asset_).staticcall(\\n            abi.encodeWithSelector(IERC20MetadataUpgradeable.decimals.selector)\\n        );\\n        if (success && encodedDecimals.length >= 32) {\\n            uint256 returnedDecimals = abi.decode(encodedDecimals, (uint256));\\n            if (returnedDecimals <= type(uint8).max) {\\n                return (true, uint8(returnedDecimals));\\n            }\\n        }\\n        return (false, 0);\\n    }\\n\\n    /**\\n     * @dev Decimals are computed by adding the decimal offset on top of the underlying asset's decimals. This\\n     * \\\"original\\\" value is cached during construction of the vault contract. If this read operation fails (e.g., the\\n     * asset has not been created yet), a default of 18 is used to represent the underlying asset's decimals.\\n     *\\n     * See {IERC20Metadata-decimals}.\\n     */\\n    function decimals() public view virtual override(IERC20MetadataUpgradeable, ERC20Upgradeable) returns (uint8) {\\n        return _underlyingDecimals + _decimalsOffset();\\n    }\\n\\n    /** @dev See {IERC4626-asset}. */\\n    function asset() public view virtual override returns (address) {\\n        return address(_asset);\\n    }\\n\\n    /** @dev See {IERC4626-totalAssets}. */\\n    function totalAssets() public view virtual override returns (uint256) {\\n        return _asset.balanceOf(address(this));\\n    }\\n\\n    /** @dev See {IERC4626-convertToShares}. */\\n    function convertToShares(uint256 assets) public view virtual override returns (uint256) {\\n        return _convertToShares(assets, MathUpgradeable.Rounding.Down);\\n    }\\n\\n    /** @dev See {IERC4626-convertToAssets}. */\\n    function convertToAssets(uint256 shares) public view virtual override returns (uint256) {\\n        return _convertToAssets(shares, MathUpgradeable.Rounding.Down);\\n    }\\n\\n    /** @dev See {IERC4626-maxDeposit}. */\\n    function maxDeposit(address) public view virtual override returns (uint256) {\\n        return type(uint256).max;\\n    }\\n\\n    /** @dev See {IERC4626-maxMint}. */\\n    function maxMint(address) public view virtual override returns (uint256) {\\n        return type(uint256).max;\\n    }\\n\\n    /** @dev See {IERC4626-maxWithdraw}. */\\n    function maxWithdraw(address owner) public view virtual override returns (uint256) {\\n        return _convertToAssets(balanceOf(owner), MathUpgradeable.Rounding.Down);\\n    }\\n\\n    /** @dev See {IERC4626-maxRedeem}. */\\n    function maxRedeem(address owner) public view virtual override returns (uint256) {\\n        return balanceOf(owner);\\n    }\\n\\n    /** @dev See {IERC4626-previewDeposit}. */\\n    function previewDeposit(uint256 assets) public view virtual override returns (uint256) {\\n        return _convertToShares(assets, MathUpgradeable.Rounding.Down);\\n    }\\n\\n    /** @dev See {IERC4626-previewMint}. */\\n    function previewMint(uint256 shares) public view virtual override returns (uint256) {\\n        return _convertToAssets(shares, MathUpgradeable.Rounding.Up);\\n    }\\n\\n    /** @dev See {IERC4626-previewWithdraw}. */\\n    function previewWithdraw(uint256 assets) public view virtual override returns (uint256) {\\n        return _convertToShares(assets, MathUpgradeable.Rounding.Up);\\n    }\\n\\n    /** @dev See {IERC4626-previewRedeem}. */\\n    function previewRedeem(uint256 shares) public view virtual override returns (uint256) {\\n        return _convertToAssets(shares, MathUpgradeable.Rounding.Down);\\n    }\\n\\n    /** @dev See {IERC4626-deposit}. */\\n    function deposit(uint256 assets, address receiver) public virtual override returns (uint256) {\\n        require(assets <= maxDeposit(receiver), \\\"ERC4626: deposit more than max\\\");\\n\\n        uint256 shares = previewDeposit(assets);\\n        _deposit(_msgSender(), receiver, assets, shares);\\n\\n        return shares;\\n    }\\n\\n    /** @dev See {IERC4626-mint}.\\n     *\\n     * As opposed to {deposit}, minting is allowed even if the vault is in a state where the price of a share is zero.\\n     * In this case, the shares will be minted without requiring any assets to be deposited.\\n     */\\n    function mint(uint256 shares, address receiver) public virtual override returns (uint256) {\\n        require(shares <= maxMint(receiver), \\\"ERC4626: mint more than max\\\");\\n\\n        uint256 assets = previewMint(shares);\\n        _deposit(_msgSender(), receiver, assets, shares);\\n\\n        return assets;\\n    }\\n\\n    /** @dev See {IERC4626-withdraw}. */\\n    function withdraw(uint256 assets, address receiver, address owner) public virtual override returns (uint256) {\\n        require(assets <= maxWithdraw(owner), \\\"ERC4626: withdraw more than max\\\");\\n\\n        uint256 shares = previewWithdraw(assets);\\n        _withdraw(_msgSender(), receiver, owner, assets, shares);\\n\\n        return shares;\\n    }\\n\\n    /** @dev See {IERC4626-redeem}. */\\n    function redeem(uint256 shares, address receiver, address owner) public virtual override returns (uint256) {\\n        require(shares <= maxRedeem(owner), \\\"ERC4626: redeem more than max\\\");\\n\\n        uint256 assets = previewRedeem(shares);\\n        _withdraw(_msgSender(), receiver, owner, assets, shares);\\n\\n        return assets;\\n    }\\n\\n    /**\\n     * @dev Internal conversion function (from assets to shares) with support for rounding direction.\\n     */\\n    function _convertToShares(uint256 assets, MathUpgradeable.Rounding rounding) internal view virtual returns (uint256) {\\n        return assets.mulDiv(totalSupply() + 10 ** _decimalsOffset(), totalAssets() + 1, rounding);\\n    }\\n\\n    /**\\n     * @dev Internal conversion function (from shares to assets) with support for rounding direction.\\n     */\\n    function _convertToAssets(uint256 shares, MathUpgradeable.Rounding rounding) internal view virtual returns (uint256) {\\n        return shares.mulDiv(totalAssets() + 1, totalSupply() + 10 ** _decimalsOffset(), rounding);\\n    }\\n\\n    /**\\n     * @dev Deposit/mint common workflow.\\n     */\\n    function _deposit(address caller, address receiver, uint256 assets, uint256 shares) internal virtual {\\n        // If _asset is ERC777, `transferFrom` can trigger a reentrancy BEFORE the transfer happens through the\\n        // `tokensToSend` hook. On the other hand, the `tokenReceived` hook, that is triggered after the transfer,\\n        // calls the vault, which is assumed not malicious.\\n        //\\n        // Conclusion: we need to do the transfer before we mint so that any reentrancy would happen before the\\n        // assets are transferred and before the shares are minted, which is a valid state.\\n        // slither-disable-next-line reentrancy-no-eth\\n        SafeERC20Upgradeable.safeTransferFrom(_asset, caller, address(this), assets);\\n        _mint(receiver, shares);\\n\\n        emit Deposit(caller, receiver, assets, shares);\\n    }\\n\\n    /**\\n     * @dev Withdraw/redeem common workflow.\\n     */\\n    function _withdraw(\\n        address caller,\\n        address receiver,\\n        address owner,\\n        uint256 assets,\\n        uint256 shares\\n    ) internal virtual {\\n        if (caller != owner) {\\n            _spendAllowance(owner, caller, shares);\\n        }\\n\\n        // If _asset is ERC777, `transfer` can trigger a reentrancy AFTER the transfer happens through the\\n        // `tokensReceived` hook. On the other hand, the `tokensToSend` hook, that is triggered before the transfer,\\n        // calls the vault, which is assumed not malicious.\\n        //\\n        // Conclusion: we need to do the transfer after the burn so that any reentrancy would happen after the\\n        // shares are burned and after the assets are transferred, which is a valid state.\\n        _burn(owner, shares);\\n        SafeERC20Upgradeable.safeTransfer(_asset, receiver, assets);\\n\\n        emit Withdraw(caller, receiver, owner, assets, shares);\\n    }\\n\\n    function _decimalsOffset() internal view virtual returns (uint8) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x48a2c0285b0ce8bf768b780142e82ccf08208b343439770464f2cc46c0cef3f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * ==== Security Considerations\\n *\\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\\n * generally recommended is:\\n *\\n * ```solidity\\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\\n *     try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\\n *     doThing(..., value);\\n * }\\n *\\n * function doThing(..., uint256 value) public {\\n *     token.safeTransferFrom(msg.sender, address(this), value);\\n *     ...\\n * }\\n * ```\\n *\\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\\n * {SafeERC20-safeTransferFrom}).\\n *\\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\\n * contracts should have entry points that don't rely on permit.\\n */\\ninterface IERC20PermitUpgradeable {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     *\\n     * CAUTION: See Security Considerations above.\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x07e881de3b9f6d2c07909f193f24b96c7fe4ea60013260f3f25aecd8bab3c2f8\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\nimport \\\"../extensions/IERC20PermitUpgradeable.sol\\\";\\nimport \\\"../../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20Upgradeable {\\n    using AddressUpgradeable for address;\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransfer(IERC20Upgradeable token, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    /**\\n     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n     */\\n    function safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    /**\\n     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeIncreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        uint256 oldAllowance = token.allowance(address(this), spender);\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));\\n    }\\n\\n    /**\\n     * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful.\\n     */\\n    function safeDecreaseAllowance(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));\\n        }\\n    }\\n\\n    /**\\n     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n     * to be set to zero before setting it to a non-zero value, such as USDT.\\n     */\\n    function forceApprove(IERC20Upgradeable token, address spender, uint256 value) internal {\\n        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);\\n\\n        if (!_callOptionalReturnBool(token, approvalCall)) {\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));\\n            _callOptionalReturn(token, approvalCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.\\n     * Revert on invalid signature.\\n     */\\n    function safePermit(\\n        IERC20PermitUpgradeable token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20Upgradeable token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        require(returndata.length == 0 || abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     *\\n     * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\\n     */\\n    function _callOptionalReturnBool(IERC20Upgradeable token, bytes memory data) private returns (bool) {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\\n        // and not revert is the subcall reverts.\\n\\n        (bool success, bytes memory returndata) = address(token).call(data);\\n        return\\n            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && AddressUpgradeable.isContract(address(token));\\n    }\\n}\\n\",\"keccak256\":\"0x23b997be73d3dd46885262704f0f8cfc7273fdadfe303d37969a9561373972b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary MathUpgradeable {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n                // The surrounding unchecked block does not change this fact.\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10 ** 64) {\\n                value /= 10 ** 64;\\n                result += 64;\\n            }\\n            if (value >= 10 ** 32) {\\n                value /= 10 ** 32;\\n                result += 32;\\n            }\\n            if (value >= 10 ** 16) {\\n                value /= 10 ** 16;\\n                result += 16;\\n            }\\n            if (value >= 10 ** 8) {\\n                value /= 10 ** 8;\\n                result += 8;\\n            }\\n            if (value >= 10 ** 4) {\\n                value /= 10 ** 4;\\n                result += 4;\\n            }\\n            if (value >= 10 ** 2) {\\n                value /= 10 ** 2;\\n                result += 2;\\n            }\\n            if (value >= 10 ** 1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2bc0007987c229ae7624eb29be6a9b84f6a6a5872f76248b15208b131ea41c4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n    /**\\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n     *\\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n     * {RoleAdminChanged} not being emitted signaling this.\\n     *\\n     * _Available since v3.1._\\n     */\\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n    /**\\n     * @dev Emitted when `account` is granted `role`.\\n     *\\n     * `sender` is the account that originated the contract call, an admin role\\n     * bearer except when using {AccessControl-_setupRole}.\\n     */\\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Emitted when `account` is revoked `role`.\\n     *\\n     * `sender` is the account that originated the contract call:\\n     *   - if using `revokeRole`, it is the admin role bearer\\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n     */\\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Returns `true` if `account` has been granted `role`.\\n     */\\n    function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n    /**\\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\\n     * {revokeRole}.\\n     *\\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n     */\\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n    /**\\n     * @dev Grants `role` to `account`.\\n     *\\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function grantRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from `account`.\\n     *\\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function revokeRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from the calling account.\\n     *\\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n     * purpose is to provide a mechanism for accounts to lose their privileges\\n     * if they are compromised (such as when a trusted device is misplaced).\\n     *\\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must be `account`.\\n     */\\n    function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\n\\nimport \\\"./IAccessControlManagerV8.sol\\\";\\n\\n/**\\n * @title AccessControlledV8\\n * @author Venus\\n * @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\\n * to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\\n */\\nabstract contract AccessControlledV8 is Initializable, Ownable2StepUpgradeable {\\n    /// @notice Access control manager contract\\n    IAccessControlManagerV8 internal _accessControlManager;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when access control manager contract address is changed\\n    event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager);\\n\\n    /// @notice Thrown when the action is prohibited by AccessControlManager\\n    error Unauthorized(address sender, address calledContract, string methodSignature);\\n\\n    function __AccessControlled_init(address accessControlManager_) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n    }\\n\\n    function __AccessControlled_init_unchained(address accessControlManager_) internal onlyInitializing {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Sets the address of AccessControlManager\\n     * @dev Admin function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     * @custom:event Emits NewAccessControlManager event\\n     * @custom:access Only Governance\\n     */\\n    function setAccessControlManager(address accessControlManager_) external onlyOwner {\\n        _setAccessControlManager(accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Returns the address of the access control manager contract\\n     */\\n    function accessControlManager() external view returns (IAccessControlManagerV8) {\\n        return _accessControlManager;\\n    }\\n\\n    /**\\n     * @dev Internal function to set address of AccessControlManager\\n     * @param accessControlManager_ The new address of the AccessControlManager\\n     */\\n    function _setAccessControlManager(address accessControlManager_) internal {\\n        require(address(accessControlManager_) != address(0), \\\"invalid acess control manager address\\\");\\n        address oldAccessControlManager = address(_accessControlManager);\\n        _accessControlManager = IAccessControlManagerV8(accessControlManager_);\\n        emit NewAccessControlManager(oldAccessControlManager, accessControlManager_);\\n    }\\n\\n    /**\\n     * @notice Reverts if the call is not allowed by AccessControlManager\\n     * @param signature Method signature\\n     */\\n    function _checkAccessAllowed(string memory signature) internal view {\\n        bool isAllowedToCall = _accessControlManager.isAllowedToCall(msg.sender, signature);\\n\\n        if (!isAllowedToCall) {\\n            revert Unauthorized(msg.sender, address(this), signature);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe0fd441c84ac907cabc88db69ef04f6d7532d770c7e6a1dfe6e7d6305debb49\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport \\\"@openzeppelin/contracts/access/IAccessControl.sol\\\";\\n\\n/**\\n * @title IAccessControlManagerV8\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\\n */\\ninterface IAccessControlManagerV8 is IAccessControl {\\n    function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n    function revokeCallPermission(\\n        address contractAddress,\\n        string calldata functionSig,\\n        address accountToRevoke\\n    ) external;\\n\\n    function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n    function hasPermission(\\n        address account,\\n        address contractAddress,\\n        string calldata functionSig\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xaa29b098440d0b3a131c5ecdf25ce548790c1b5ac7bf9b5c0264b6af6f7a1e0b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Comptroller.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\n\\nimport { ComptrollerInterface, Action } from \\\"./ComptrollerInterface.sol\\\";\\nimport { ComptrollerStorage } from \\\"./ComptrollerStorage.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"./MaxLoopsLimitHelper.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title Comptroller\\n * @author Venus\\n * @notice The Comptroller is designed to provide checks for all minting, redeeming, transferring, borrowing, lending, repaying, liquidating,\\n * and seizing done by the `vToken` contract. Each pool has one `Comptroller` checking these interactions across markets. When a user interacts\\n * with a given market by one of these main actions, a call is made to a corresponding hook in the associated `Comptroller`, which either allows\\n * or reverts the transaction. These hooks also update supply and borrow rewards as they are called. The comptroller holds the logic for assessing\\n * liquidity snapshots of an account via the collateral factor and liquidation threshold. This check determines the collateral needed for a borrow,\\n * as well as how much of a borrow may be liquidated. A user may borrow a portion of their collateral with the maximum amount determined by the\\n * markets collateral factor. However, if their borrowed amount exceeds an amount calculated using the market\\u2019s corresponding liquidation threshold,\\n * the borrow is eligible for liquidation.\\n *\\n * The `Comptroller` also includes two functions `liquidateAccount()` and `healAccount()`, which are meant to handle accounts that do not exceed\\n * the `minLiquidatableCollateral` for the `Comptroller`:\\n *\\n * - `healAccount()`: This function is called to seize all of a given user\\u2019s collateral, requiring the `msg.sender` repay a certain percentage\\n * of the debt calculated by `collateral/(borrows*liquidationIncentive)`. The function can only be called if the calculated percentage does not exceed\\n * 100%, because otherwise no `badDebt` would be created and `liquidateAccount()` should be used instead. The difference in the actual amount of debt\\n * and debt paid off is recorded as `badDebt` for each market, which can then be auctioned off for the risk reserves of the associated pool.\\n * - `liquidateAccount()`: This function can only be called if the collateral seized will cover all borrows of an account, as well as the liquidation\\n * incentive. Otherwise, the pool will incur bad debt, in which case the function `healAccount()` should be used instead. This function skips the logic\\n * verifying that the repay amount does not exceed the close factor.\\n */\\ncontract Comptroller is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    ComptrollerStorage,\\n    ComptrollerInterface,\\n    ExponentialNoError,\\n    MaxLoopsLimitHelper\\n{\\n    // PoolRegistry, immutable to save on gas\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    address public immutable poolRegistry;\\n\\n    /// @notice Emitted when an account enters a market\\n    event MarketEntered(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when an account exits a market\\n    event MarketExited(VToken indexed vToken, address indexed account);\\n\\n    /// @notice Emitted when close factor is changed by admin\\n    event NewCloseFactor(uint256 oldCloseFactorMantissa, uint256 newCloseFactorMantissa);\\n\\n    /// @notice Emitted when a collateral factor is changed by admin\\n    event NewCollateralFactor(VToken vToken, uint256 oldCollateralFactorMantissa, uint256 newCollateralFactorMantissa);\\n\\n    /// @notice Emitted when liquidation threshold is changed by admin\\n    event NewLiquidationThreshold(\\n        VToken vToken,\\n        uint256 oldLiquidationThresholdMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    );\\n\\n    /// @notice Emitted when liquidation incentive is changed by admin\\n    event NewLiquidationIncentive(uint256 oldLiquidationIncentiveMantissa, uint256 newLiquidationIncentiveMantissa);\\n\\n    /// @notice Emitted when price oracle is changed\\n    event NewPriceOracle(ResilientOracleInterface oldPriceOracle, ResilientOracleInterface newPriceOracle);\\n\\n    /// @notice Emitted when an action is paused on a market\\n    event ActionPausedMarket(VToken vToken, Action action, bool pauseState);\\n\\n    /// @notice Emitted when borrow cap for a vToken is changed\\n    event NewBorrowCap(VToken indexed vToken, uint256 newBorrowCap);\\n\\n    /// @notice Emitted when the collateral threshold (in USD) for non-batch liquidations is changed\\n    event NewMinLiquidatableCollateral(uint256 oldMinLiquidatableCollateral, uint256 newMinLiquidatableCollateral);\\n\\n    /// @notice Emitted when supply cap for a vToken is changed\\n    event NewSupplyCap(VToken indexed vToken, uint256 newSupplyCap);\\n\\n    /// @notice Emitted when a rewards distributor is added\\n    event NewRewardsDistributor(address indexed rewardsDistributor, address indexed rewardToken);\\n\\n    /// @notice Emitted when a market is supported\\n    event MarketSupported(VToken vToken);\\n\\n    /// @notice Emitted when prime token contract address is changed\\n    event NewPrimeToken(IPrime oldPrimeToken, IPrime newPrimeToken);\\n\\n    /// @notice Emitted when forced liquidation is enabled or disabled for a market\\n    event IsForcedLiquidationEnabledUpdated(address indexed vToken, bool enable);\\n\\n    /// @notice Emitted when a market is unlisted\\n    event MarketUnlisted(address indexed vToken);\\n    /// @notice Emitted when the borrowing or redeeming delegate rights are updated for an account\\n    event DelegateUpdated(address indexed approver, address indexed delegate, bool approved);\\n\\n    /// @notice Thrown when collateral factor exceeds the upper bound\\n    error InvalidCollateralFactor();\\n\\n    /// @notice Thrown when liquidation threshold exceeds the collateral factor\\n    error InvalidLiquidationThreshold();\\n\\n    /// @notice Thrown when the action is only available to specific sender, but the real sender was different\\n    error UnexpectedSender(address expectedSender, address actualSender);\\n\\n    /// @notice Thrown when the oracle returns an invalid price for some asset\\n    error PriceError(address vToken);\\n\\n    /// @notice Thrown if VToken unexpectedly returned a nonzero error code while trying to get account snapshot\\n    error SnapshotError(address vToken, address user);\\n\\n    /// @notice Thrown when the market is not listed\\n    error MarketNotListed(address market);\\n\\n    /// @notice Thrown when a market has an unexpected comptroller\\n    error ComptrollerMismatch();\\n\\n    /// @notice Thrown when user is not member of market\\n    error MarketNotCollateral(address vToken, address user);\\n\\n    /// @notice Thrown when borrow action is not paused\\n    error BorrowActionNotPaused();\\n\\n    /// @notice Thrown when mint action is not paused\\n    error MintActionNotPaused();\\n\\n    /// @notice Thrown when redeem action is not paused\\n    error RedeemActionNotPaused();\\n\\n    /// @notice Thrown when repay action is not paused\\n    error RepayActionNotPaused();\\n\\n    /// @notice Thrown when seize action is not paused\\n    error SeizeActionNotPaused();\\n\\n    /// @notice Thrown when exit market action is not paused\\n    error ExitMarketActionNotPaused();\\n\\n    /// @notice Thrown when transfer action is not paused\\n    error TransferActionNotPaused();\\n\\n    /// @notice Thrown when enter market action is not paused\\n    error EnterMarketActionNotPaused();\\n\\n    /// @notice Thrown when liquidate action is not paused\\n    error LiquidateActionNotPaused();\\n\\n    /// @notice Thrown when borrow cap is not zero\\n    error BorrowCapIsNotZero();\\n\\n    /// @notice Thrown when supply cap is not zero\\n    error SupplyCapIsNotZero();\\n\\n    /// @notice Thrown when collateral factor is not zero\\n    error CollateralFactorIsNotZero();\\n\\n    /**\\n     * @notice Thrown during the liquidation if user's total collateral amount is lower than\\n     *   a predefined threshold. In this case only batch liquidations (either liquidateAccount\\n     *   or healAccount) are available.\\n     */\\n    error MinimalCollateralViolated(uint256 expectedGreaterThan, uint256 actual);\\n    error CollateralExceedsThreshold(uint256 expectedLessThanOrEqualTo, uint256 actual);\\n    error InsufficientCollateral(uint256 collateralToSeize, uint256 availableCollateral);\\n\\n    /// @notice Thrown when the account doesn't have enough liquidity to redeem or borrow\\n    error InsufficientLiquidity();\\n\\n    /// @notice Thrown when trying to liquidate a healthy account\\n    error InsufficientShortfall();\\n\\n    /// @notice Thrown when trying to repay more than allowed by close factor\\n    error TooMuchRepay();\\n\\n    /// @notice Thrown if the user is trying to exit a market in which they have an outstanding debt\\n    error NonzeroBorrowBalance();\\n\\n    /// @notice Thrown when trying to perform an action that is paused\\n    error ActionPaused(address market, Action action);\\n\\n    /// @notice Thrown when trying to add a market that is already listed\\n    error MarketAlreadyListed(address market);\\n\\n    /// @notice Thrown if the supply cap is exceeded\\n    error SupplyCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if the borrow cap is exceeded\\n    error BorrowCapExceeded(address market, uint256 cap);\\n\\n    /// @notice Thrown if delegate approval status is already set to the requested value\\n    error DelegationStatusUnchanged();\\n\\n    /// @param poolRegistry_ Pool registry address\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    /// @custom:error ZeroAddressNotAllowed is thrown when pool registry address is zero\\n    constructor(address poolRegistry_) {\\n        ensureNonzeroAddress(poolRegistry_);\\n\\n        poolRegistry = poolRegistry_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @param loopLimit Limit for the loops can iterate to avoid the DOS\\n     * @param accessControlManager Access control manager contract address\\n     */\\n    function initialize(uint256 loopLimit, address accessControlManager) external initializer {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager);\\n\\n        _setMaxLoopsLimit(loopLimit);\\n    }\\n\\n    /**\\n     * @notice Add assets to be included in account liquidity calculation; enabling them to be used as collateral\\n     * @param vTokens The list of addresses of the vToken markets to be enabled\\n     * @return errors An array of NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketEntered is emitted for each market on success\\n     * @custom:error ActionPaused error is thrown if entering any of the markets is paused\\n     * @custom:error MarketNotListed error is thrown if any of the markets is not listed\\n     * @custom:access Not restricted\\n     */\\n    function enterMarkets(address[] memory vTokens) external override returns (uint256[] memory) {\\n        uint256 len = vTokens.length;\\n\\n        uint256[] memory results = new uint256[](len);\\n        for (uint256 i; i < len; ++i) {\\n            VToken vToken = VToken(vTokens[i]);\\n\\n            _addToMarket(vToken, msg.sender);\\n            results[i] = NO_ERROR;\\n        }\\n\\n        return results;\\n    }\\n\\n    /**\\n     * @notice Unlist a market by setting isListed to false\\n     * @dev Checks if all actions are paused, borrow/supply caps is set to 0 and collateral factor is to 0.\\n     * @param market The address of the market (token) to unlist\\n     * @return uint256 Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketUnlisted is emitted on success\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error BorrowActionNotPaused error is thrown if borrow action is not paused\\n     * @custom:error MintActionNotPaused error is thrown if mint action is not paused\\n     * @custom:error RedeemActionNotPaused error is thrown if redeem action is not paused\\n     * @custom:error RepayActionNotPaused error is thrown if repay action is not paused\\n     * @custom:error EnterMarketActionNotPaused error is thrown if enter market action is not paused\\n     * @custom:error LiquidateActionNotPaused error is thrown if liquidate action is not paused\\n     * @custom:error BorrowCapIsNotZero error is thrown if borrow cap is not zero\\n     * @custom:error SupplyCapIsNotZero error is thrown if supply cap is not zero\\n     * @custom:error CollateralFactorIsNotZero error is thrown if collateral factor is not zero\\n     */\\n    function unlistMarket(address market) external returns (uint256) {\\n        _checkAccessAllowed(\\\"unlistMarket(address)\\\");\\n\\n        Market storage _market = markets[market];\\n\\n        if (!_market.isListed) {\\n            revert MarketNotListed(market);\\n        }\\n\\n        if (!actionPaused(market, Action.BORROW)) {\\n            revert BorrowActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.MINT)) {\\n            revert MintActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REDEEM)) {\\n            revert RedeemActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.REPAY)) {\\n            revert RepayActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.SEIZE)) {\\n            revert SeizeActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.ENTER_MARKET)) {\\n            revert EnterMarketActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.LIQUIDATE)) {\\n            revert LiquidateActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.TRANSFER)) {\\n            revert TransferActionNotPaused();\\n        }\\n\\n        if (!actionPaused(market, Action.EXIT_MARKET)) {\\n            revert ExitMarketActionNotPaused();\\n        }\\n\\n        if (borrowCaps[market] != 0) {\\n            revert BorrowCapIsNotZero();\\n        }\\n\\n        if (supplyCaps[market] != 0) {\\n            revert SupplyCapIsNotZero();\\n        }\\n\\n        if (_market.collateralFactorMantissa != 0) {\\n            revert CollateralFactorIsNotZero();\\n        }\\n\\n        _market.isListed = false;\\n        emit MarketUnlisted(market);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Grants or revokes the borrowing or redeeming delegate rights to / from an account\\n     *  If allowed, the delegate will be able to borrow funds on behalf of the sender\\n     *  Upon a delegated borrow, the delegate will receive the funds, and the borrower\\n     *  will see the debt on their account\\n     *  Upon a delegated redeem, the delegate will receive the redeemed amount and the approver\\n     *  will see a deduction in his vToken balance\\n     * @param delegate The address to update the rights for\\n     * @param approved Whether to grant (true) or revoke (false) the borrowing or redeeming rights\\n     * @custom:event DelegateUpdated emits on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when delegate address is zero\\n     * @custom:error DelegationStatusUnchanged is thrown if approval status is already set to the requested value\\n     * @custom:access Not restricted\\n     */\\n    function updateDelegate(address delegate, bool approved) external {\\n        ensureNonzeroAddress(delegate);\\n        if (approvedDelegates[msg.sender][delegate] == approved) {\\n            revert DelegationStatusUnchanged();\\n        }\\n\\n        approvedDelegates[msg.sender][delegate] = approved;\\n        emit DelegateUpdated(msg.sender, delegate, approved);\\n    }\\n\\n    /**\\n     * @notice Removes asset from sender's account liquidity calculation; disabling them as collateral\\n     * @dev Sender must not have an outstanding borrow balance in the asset,\\n     *  or be providing necessary collateral for an outstanding borrow.\\n     * @param vTokenAddress The address of the asset to be removed\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event MarketExited is emitted on success\\n     * @custom:error ActionPaused error is thrown if exiting the market is paused\\n     * @custom:error NonzeroBorrowBalance error is thrown if the user has an outstanding borrow in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if exiting the market would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function exitMarket(address vTokenAddress) external override returns (uint256) {\\n        _checkActionPauseState(vTokenAddress, Action.EXIT_MARKET);\\n        VToken vToken = VToken(vTokenAddress);\\n        /* Get sender tokensHeld and amountOwed underlying from the vToken */\\n        (uint256 tokensHeld, uint256 amountOwed, ) = _safeGetAccountSnapshot(vToken, msg.sender);\\n\\n        /* Fail if the sender has a borrow balance */\\n        if (amountOwed != 0) {\\n            revert NonzeroBorrowBalance();\\n        }\\n\\n        /* Fail if the sender is not permitted to redeem all of their tokens */\\n        _checkRedeemAllowed(vTokenAddress, msg.sender, tokensHeld);\\n\\n        Market storage marketToExit = markets[address(vToken)];\\n\\n        /* Return true if the sender is not already \\u2018in\\u2019 the market */\\n        if (!marketToExit.accountMembership[msg.sender]) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Set vToken account membership to false */\\n        delete marketToExit.accountMembership[msg.sender];\\n\\n        /* Delete vToken from the account\\u2019s list of assets */\\n        // load into memory for faster iteration\\n        VToken[] memory userAssetList = accountAssets[msg.sender];\\n        uint256 len = userAssetList.length;\\n\\n        uint256 assetIndex = len;\\n        for (uint256 i; i < len; ++i) {\\n            if (userAssetList[i] == vToken) {\\n                assetIndex = i;\\n                break;\\n            }\\n        }\\n\\n        // We *must* have found the asset in the list or our redundant data structure is broken\\n        assert(assetIndex < len);\\n\\n        // copy last item in list to location of item to be removed, reduce length by 1\\n        VToken[] storage storedList = accountAssets[msg.sender];\\n        storedList[assetIndex] = storedList[storedList.length - 1];\\n        storedList.pop();\\n\\n        emit MarketExited(vToken, msg.sender);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /*** Policy Hooks ***/\\n\\n    /**\\n     * @notice Checks if the account should be allowed to mint tokens in the given market\\n     * @param vToken The market to verify the mint against\\n     * @param minter The account which would get the minted tokens\\n     * @param mintAmount The amount of underlying being supplied to the market in exchange for tokens\\n     * @custom:error ActionPaused error is thrown if supplying to this market is paused\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error SupplyCapExceeded error is thrown if the total supply exceeds the cap after minting\\n     * @custom:access Not restricted\\n     */\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external override {\\n        _checkActionPauseState(vToken, Action.MINT);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        uint256 supplyCap = supplyCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (supplyCap != type(uint256).max) {\\n            uint256 vTokenSupply = VToken(vToken).totalSupply();\\n            Exp memory exchangeRate = Exp({ mantissa: VToken(vToken).exchangeRateStored() });\\n            uint256 nextTotalSupply = mul_ScalarTruncateAddUInt(exchangeRate, vTokenSupply, mintAmount);\\n            if (nextTotalSupply > supplyCap) {\\n                revert SupplyCapExceeded(vToken, supplyCap);\\n            }\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, minter);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates mint, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being minted\\n     * @param minter The address minting the tokens\\n     * @param actualMintAmount The amount of the underlying asset being minted\\n     * @param mintTokens The number of tokens being minted\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function mintVerify(address vToken, address minter, uint256 actualMintAmount, uint256 mintTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(minter, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to redeem tokens in the given market\\n     * @param vToken The market to verify the redeem against\\n     * @param redeemer The account which would redeem the tokens\\n     * @param redeemTokens The number of vTokens to exchange for the underlying asset in the market\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external override {\\n        _checkActionPauseState(vToken, Action.REDEEM);\\n\\n        _checkRedeemAllowed(vToken, redeemer, redeemTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, redeemer);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates redeem, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being redeemed\\n     * @param redeemer The address redeeming the tokens\\n     * @param redeemAmount The amount of the underlying asset being redeemed\\n     * @param redeemTokens The number of tokens being redeemed\\n     */\\n    function redeemVerify(address vToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(redeemer, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates repayBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being repaid\\n     * @param payer The address repaying the borrow\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     */\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer, // solhint-disable-line no-unused-vars\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 borrowerIndex // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates liquidateBorrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param actualRepayAmount The amount of underlying being repaid\\n     * @param seizeTokens The amount of collateral token that will be seized\\n     */\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 actualRepayAmount, // solhint-disable-line no-unused-vars\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenBorrowed);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenBorrowed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates seize, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @param seizeTokens The number of collateral tokens to seize\\n     */\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed, // solhint-disable-line no-unused-vars\\n        address liquidator,\\n        address borrower,\\n        uint256 seizeTokens // solhint-disable-line no-unused-vars\\n    ) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vTokenCollateral);\\n            prime.accrueInterestAndUpdateScore(liquidator, vTokenCollateral);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates transfer, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset being transferred\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function transferVerify(address vToken, address src, address dst, uint256 transferTokens) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(src, vToken);\\n            prime.accrueInterestAndUpdateScore(dst, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to borrow the underlying asset of the given market\\n     * @param vToken The market to verify the borrow against\\n     * @param borrower The account which would borrow the asset\\n     * @param borrowAmount The amount of underlying the account would borrow\\n     * @custom:error ActionPaused error is thrown if borrowing is paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if there is not enough collateral to borrow\\n     * @custom:error BorrowCapExceeded is thrown if the borrow cap will be exceeded should this borrow succeed\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted if vToken is enabled as collateral, otherwise only vToken\\n     */\\n    /// disable-eslint\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external override {\\n        _checkActionPauseState(vToken, Action.BORROW);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (!markets[vToken].accountMembership[borrower]) {\\n            // only vTokens may call borrowAllowed if borrower not in market\\n            _checkSenderIs(vToken);\\n\\n            // attempt to add borrower to the market or revert\\n            _addToMarket(VToken(msg.sender), borrower);\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (oracle.getUnderlyingPrice(vToken) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 borrowCap = borrowCaps[vToken];\\n        // Skipping the cap check for uncapped coins to save some gas\\n        if (borrowCap != type(uint256).max) {\\n            uint256 totalBorrows = VToken(vToken).totalBorrows();\\n            uint256 badDebt = VToken(vToken).badDebt();\\n            uint256 nextTotalBorrows = totalBorrows + borrowAmount + badDebt;\\n            if (nextTotalBorrows > borrowCap) {\\n                revert BorrowCapExceeded(vToken, borrowCap);\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            borrower,\\n            VToken(vToken),\\n            0,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n\\n        Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Validates borrow, accrues interest and updates score in prime. Reverts on rejection. May emit logs.\\n     * @param vToken Asset whose underlying is being borrowed\\n     * @param borrower The address borrowing the underlying\\n     * @param borrowAmount The amount of the underlying asset requested to borrow\\n     */\\n    // solhint-disable-next-line no-unused-vars\\n    function borrowVerify(address vToken, address borrower, uint256 borrowAmount) external {\\n        if (address(prime) != address(0)) {\\n            prime.accrueInterestAndUpdateScore(borrower, vToken);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to repay a borrow in the given market\\n     * @param vToken The market to verify the repay against\\n     * @param borrower The account which would borrowed the asset\\n     * @custom:error ActionPaused error is thrown if repayments are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:access Not restricted\\n     */\\n    function preRepayHook(address vToken, address borrower) external override {\\n        _checkActionPauseState(vToken, Action.REPAY);\\n\\n        oracle.updatePrice(vToken);\\n\\n        if (!markets[vToken].isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            Exp memory borrowIndex = Exp({ mantissa: VToken(vToken).borrowIndex() });\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenBorrowIndex(vToken, borrowIndex);\\n            rewardsDistributor.distributeBorrowerRewardToken(vToken, borrower, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the liquidation should be allowed to occur\\n     * @param vTokenBorrowed Asset which was borrowed by the borrower\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param borrower The address of the borrower\\n     * @param repayAmount The amount of underlying being repaid\\n     * @param skipLiquidityCheck Allows the borrow to be liquidated regardless of the account liquidity\\n     * @custom:error ActionPaused error is thrown if liquidations are paused in this market\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error TooMuchRepay error is thrown if the liquidator is trying to repay more than allowed by close factor\\n     * @custom:error MinimalCollateralViolated is thrown if the users' total collateral is lower than the threshold for non-batch liquidations\\n     * @custom:error InsufficientShortfall is thrown when trying to liquidate a healthy account\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     */\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        // Pause Action.LIQUIDATE on BORROWED TOKEN to prevent liquidating it.\\n        // If we want to pause liquidating to vTokenCollateral, we should pause\\n        // Action.SEIZE on it\\n        _checkActionPauseState(vTokenBorrowed, Action.LIQUIDATE);\\n\\n        // Update the prices of tokens\\n        updatePrices(borrower);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(address(vTokenBorrowed));\\n        }\\n        if (!markets[vTokenCollateral].isListed) {\\n            revert MarketNotListed(address(vTokenCollateral));\\n        }\\n\\n        uint256 borrowBalance = VToken(vTokenBorrowed).borrowBalanceStored(borrower);\\n\\n        /* Allow accounts to be liquidated if it is a forced liquidation */\\n        if (skipLiquidityCheck || isForcedLiquidationEnabled[vTokenBorrowed]) {\\n            if (repayAmount > borrowBalance) {\\n                revert TooMuchRepay();\\n            }\\n            return;\\n        }\\n\\n        /* The borrower must have shortfall and collateral > threshold in order to be liquidatable */\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral <= minLiquidatableCollateral) {\\n            /* The liquidator should use either liquidateAccount or healAccount */\\n            revert MinimalCollateralViolated(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        /* The liquidator may not repay more than what is allowed by the closeFactor */\\n        uint256 maxClose = mul_ScalarTruncate(Exp({ mantissa: closeFactorMantissa }), borrowBalance);\\n        if (repayAmount > maxClose) {\\n            revert TooMuchRepay();\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the seizing of assets should be allowed to occur\\n     * @param vTokenCollateral Asset which was used as collateral and will be seized\\n     * @param seizerContract Contract that tries to seize the asset (either borrowed vToken or Comptroller)\\n     * @param liquidator The address repaying the borrow and seizing the collateral\\n     * @param borrower The address of the borrower\\n     * @custom:error ActionPaused error is thrown if seizing this type of collateral is paused\\n     * @custom:error MarketNotListed error is thrown if either collateral or borrowed token is not listed\\n     * @custom:error ComptrollerMismatch error is when seizer contract or seized asset belong to different pools\\n     * @custom:access Not restricted\\n     */\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address seizerContract,\\n        address liquidator,\\n        address borrower\\n    ) external override {\\n        // Pause Action.SEIZE on COLLATERAL to prevent seizing it.\\n        // If we want to pause liquidating vTokenBorrowed, we should pause\\n        // Action.LIQUIDATE on it\\n        _checkActionPauseState(vTokenCollateral, Action.SEIZE);\\n\\n        Market storage market = markets[vTokenCollateral];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(vTokenCollateral);\\n        }\\n\\n        if (seizerContract == address(this)) {\\n            // If Comptroller is the seizer, just check if collateral's comptroller\\n            // is equal to the current address\\n            if (address(VToken(vTokenCollateral).comptroller()) != address(this)) {\\n                revert ComptrollerMismatch();\\n            }\\n        } else {\\n            // If the seizer is not the Comptroller, check that the seizer is a\\n            // listed market, and that the markets' comptrollers match\\n            if (!markets[seizerContract].isListed) {\\n                revert MarketNotListed(seizerContract);\\n            }\\n            if (VToken(vTokenCollateral).comptroller() != VToken(seizerContract).comptroller()) {\\n                revert ComptrollerMismatch();\\n            }\\n        }\\n\\n        if (!market.accountMembership[borrower]) {\\n            revert MarketNotCollateral(vTokenCollateral, borrower);\\n        }\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vTokenCollateral);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, borrower);\\n            rewardsDistributor.distributeSupplierRewardToken(vTokenCollateral, liquidator);\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if the account should be allowed to transfer tokens in the given market\\n     * @param vToken The market to verify the transfer against\\n     * @param src The account which sources the tokens\\n     * @param dst The account which receives the tokens\\n     * @param transferTokens The number of vTokens to transfer\\n     * @custom:error ActionPaused error is thrown if withdrawals are paused in this market\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InsufficientLiquidity error is thrown if the withdrawal would lead to user's insolvency\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external override {\\n        _checkActionPauseState(vToken, Action.TRANSFER);\\n\\n        // Currently the only consideration is whether or not\\n        //  the src is allowed to redeem this many tokens\\n        _checkRedeemAllowed(vToken, src, transferTokens);\\n\\n        // Keep the flywheel moving\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            rewardsDistributor.updateRewardTokenSupplyIndex(vToken);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, src);\\n            rewardsDistributor.distributeSupplierRewardToken(vToken, dst);\\n        }\\n    }\\n\\n    /*** Pool-level operations ***/\\n\\n    /**\\n     * @notice Seizes all the remaining collateral, makes msg.sender repay the existing\\n     *   borrows, and treats the rest of the debt as bad debt (for each market).\\n     *   The sender has to repay a certain percentage of the debt, computed as\\n     *   collateral / (borrows * liquidationIncentive).\\n     * @param user account to heal\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for healing\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function healAccount(address user) external {\\n        VToken[] memory userAssets = getAssetsIn(user);\\n        uint256 userAssetsCount = userAssets.length;\\n\\n        address liquidator = msg.sender;\\n        {\\n            ResilientOracleInterface oracle_ = oracle;\\n            // We need all user's markets to be fresh for the computations to be correct\\n            for (uint256 i; i < userAssetsCount; ++i) {\\n                userAssets[i].accrueInterest();\\n                oracle_.updatePrice(address(userAssets[i]));\\n            }\\n        }\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(user, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        // percentage = collateral / (borrows * liquidation incentive)\\n        Exp memory collateral = Exp({ mantissa: snapshot.totalCollateral });\\n        Exp memory scaledBorrows = mul_(\\n            Exp({ mantissa: snapshot.borrows }),\\n            Exp({ mantissa: liquidationIncentiveMantissa })\\n        );\\n\\n        Exp memory percentage = div_(collateral, scaledBorrows);\\n        if (lessThanExp(Exp({ mantissa: MANTISSA_ONE }), percentage)) {\\n            revert CollateralExceedsThreshold(scaledBorrows.mantissa, collateral.mantissa);\\n        }\\n\\n        for (uint256 i; i < userAssetsCount; ++i) {\\n            VToken market = userAssets[i];\\n\\n            (uint256 tokens, uint256 borrowBalance, ) = _safeGetAccountSnapshot(market, user);\\n            uint256 repaymentAmount = mul_ScalarTruncate(percentage, borrowBalance);\\n\\n            // Seize the entire collateral\\n            if (tokens != 0) {\\n                market.seize(liquidator, user, tokens);\\n            }\\n            // Repay a certain percentage of the borrow, forgive the rest\\n            if (borrowBalance != 0) {\\n                market.healBorrow(liquidator, user, repaymentAmount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Liquidates all borrows of the borrower. Callable only if the collateral is less than\\n     *   a predefined threshold, and the account collateral can be seized to cover all borrows. If\\n     *   the collateral is higher than the threshold, use regular liquidations. If the collateral is\\n     *   below the threshold, and the account is insolvent, use healAccount.\\n     * @param borrower the borrower address\\n     * @param orders an array of liquidation orders\\n     * @custom:error CollateralExceedsThreshold error is thrown when the collateral is too big for a batch liquidation\\n     * @custom:error InsufficientCollateral error is thrown when there is not enough collateral to cover the debt\\n     * @custom:error SnapshotError is thrown if some vToken fails to return the account's supply and borrows\\n     * @custom:error PriceError is thrown if the oracle returns an incorrect price for some asset\\n     * @custom:access Not restricted\\n     */\\n    function liquidateAccount(address borrower, LiquidationOrder[] calldata orders) external {\\n        // We will accrue interest and update the oracle prices later during the liquidation\\n\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(borrower, _getLiquidationThreshold);\\n\\n        if (snapshot.totalCollateral > minLiquidatableCollateral) {\\n            // You should use the regular vToken.liquidateBorrow(...) call\\n            revert CollateralExceedsThreshold(minLiquidatableCollateral, snapshot.totalCollateral);\\n        }\\n\\n        uint256 collateralToSeize = mul_ScalarTruncate(\\n            Exp({ mantissa: liquidationIncentiveMantissa }),\\n            snapshot.borrows\\n        );\\n        if (collateralToSeize >= snapshot.totalCollateral) {\\n            // There is not enough collateral to seize. Use healBorrow to repay some part of the borrow\\n            // and record bad debt.\\n            revert InsufficientCollateral(collateralToSeize, snapshot.totalCollateral);\\n        }\\n\\n        if (snapshot.shortfall == 0) {\\n            revert InsufficientShortfall();\\n        }\\n\\n        uint256 ordersCount = orders.length;\\n\\n        _ensureMaxLoops(ordersCount / 2);\\n\\n        for (uint256 i; i < ordersCount; ++i) {\\n            if (!markets[address(orders[i].vTokenBorrowed)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenBorrowed));\\n            }\\n            if (!markets[address(orders[i].vTokenCollateral)].isListed) {\\n                revert MarketNotListed(address(orders[i].vTokenCollateral));\\n            }\\n\\n            LiquidationOrder calldata order = orders[i];\\n            order.vTokenBorrowed.forceLiquidateBorrow(\\n                msg.sender,\\n                borrower,\\n                order.repayAmount,\\n                order.vTokenCollateral,\\n                true\\n            );\\n        }\\n\\n        VToken[] memory borrowMarkets = getAssetsIn(borrower);\\n        uint256 marketsCount = borrowMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            (, uint256 borrowBalance, ) = _safeGetAccountSnapshot(borrowMarkets[i], borrower);\\n            require(borrowBalance == 0, \\\"Nonzero borrow balance after liquidation\\\");\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets the closeFactor to use when liquidating borrows\\n     * @param newCloseFactorMantissa New close factor, scaled by 1e18\\n     * @custom:event Emits NewCloseFactor on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCloseFactor(uint256 newCloseFactorMantissa) external {\\n        _checkAccessAllowed(\\\"setCloseFactor(uint256)\\\");\\n        require(MAX_CLOSE_FACTOR_MANTISSA >= newCloseFactorMantissa, \\\"Close factor greater than maximum close factor\\\");\\n        require(MIN_CLOSE_FACTOR_MANTISSA <= newCloseFactorMantissa, \\\"Close factor smaller than minimum close factor\\\");\\n\\n        uint256 oldCloseFactorMantissa = closeFactorMantissa;\\n        closeFactorMantissa = newCloseFactorMantissa;\\n        emit NewCloseFactor(oldCloseFactorMantissa, newCloseFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Sets the collateralFactor for a market\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param vToken The market to set the factor on\\n     * @param newCollateralFactorMantissa The new collateral factor, scaled by 1e18\\n     * @param newLiquidationThresholdMantissa The new liquidation threshold, scaled by 1e18\\n     * @custom:event Emits NewCollateralFactor when collateral factor is updated\\n     *    and NewLiquidationThreshold when liquidation threshold is updated\\n     * @custom:error MarketNotListed error is thrown when the market is not listed\\n     * @custom:error InvalidCollateralFactor error is thrown when collateral factor is too high\\n     * @custom:error InvalidLiquidationThreshold error is thrown when liquidation threshold is lower than collateral factor\\n     * @custom:error PriceError is thrown when the oracle returns an invalid price for the asset\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setCollateralFactor(\\n        VToken vToken,\\n        uint256 newCollateralFactorMantissa,\\n        uint256 newLiquidationThresholdMantissa\\n    ) external {\\n        _checkAccessAllowed(\\\"setCollateralFactor(address,uint256,uint256)\\\");\\n\\n        // Verify market is listed\\n        Market storage market = markets[address(vToken)];\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        // Check collateral factor <= 0.9\\n        if (newCollateralFactorMantissa > MAX_COLLATERAL_FACTOR_MANTISSA) {\\n            revert InvalidCollateralFactor();\\n        }\\n\\n        // Ensure that liquidation threshold <= 1\\n        if (newLiquidationThresholdMantissa > MANTISSA_ONE) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // Ensure that liquidation threshold >= CF\\n        if (newLiquidationThresholdMantissa < newCollateralFactorMantissa) {\\n            revert InvalidLiquidationThreshold();\\n        }\\n\\n        // If collateral factor != 0, fail if price == 0\\n        if (newCollateralFactorMantissa != 0 && oracle.getUnderlyingPrice(address(vToken)) == 0) {\\n            revert PriceError(address(vToken));\\n        }\\n\\n        uint256 oldCollateralFactorMantissa = market.collateralFactorMantissa;\\n        if (newCollateralFactorMantissa != oldCollateralFactorMantissa) {\\n            market.collateralFactorMantissa = newCollateralFactorMantissa;\\n            emit NewCollateralFactor(vToken, oldCollateralFactorMantissa, newCollateralFactorMantissa);\\n        }\\n\\n        uint256 oldLiquidationThresholdMantissa = market.liquidationThresholdMantissa;\\n        if (newLiquidationThresholdMantissa != oldLiquidationThresholdMantissa) {\\n            market.liquidationThresholdMantissa = newLiquidationThresholdMantissa;\\n            emit NewLiquidationThreshold(vToken, oldLiquidationThresholdMantissa, newLiquidationThresholdMantissa);\\n        }\\n    }\\n\\n    /**\\n     * @notice Sets liquidationIncentive\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newLiquidationIncentiveMantissa New liquidationIncentive scaled by 1e18\\n     * @custom:event Emits NewLiquidationIncentive on success\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setLiquidationIncentive(uint256 newLiquidationIncentiveMantissa) external {\\n        require(newLiquidationIncentiveMantissa >= MANTISSA_ONE, \\\"liquidation incentive should be greater than 1e18\\\");\\n\\n        _checkAccessAllowed(\\\"setLiquidationIncentive(uint256)\\\");\\n\\n        // Save current value for use in log\\n        uint256 oldLiquidationIncentiveMantissa = liquidationIncentiveMantissa;\\n\\n        // Set liquidation incentive to new incentive\\n        liquidationIncentiveMantissa = newLiquidationIncentiveMantissa;\\n\\n        // Emit event with old incentive, new incentive\\n        emit NewLiquidationIncentive(oldLiquidationIncentiveMantissa, newLiquidationIncentiveMantissa);\\n    }\\n\\n    /**\\n     * @notice Add the market to the markets mapping and set it as listed\\n     * @dev Only callable by the PoolRegistry\\n     * @param vToken The address of the market (token) to list\\n     * @custom:error MarketAlreadyListed is thrown if the market is already listed in this pool\\n     * @custom:access Only PoolRegistry\\n     */\\n    function supportMarket(VToken vToken) external {\\n        _checkSenderIs(poolRegistry);\\n\\n        if (markets[address(vToken)].isListed) {\\n            revert MarketAlreadyListed(address(vToken));\\n        }\\n\\n        require(vToken.isVToken(), \\\"Comptroller: Invalid vToken\\\"); // Sanity check to make sure its really a VToken\\n\\n        Market storage newMarket = markets[address(vToken)];\\n        newMarket.isListed = true;\\n        newMarket.collateralFactorMantissa = 0;\\n        newMarket.liquidationThresholdMantissa = 0;\\n\\n        _addMarket(address(vToken));\\n\\n        uint256 rewardDistributorsCount = rewardsDistributors.length;\\n\\n        for (uint256 i; i < rewardDistributorsCount; ++i) {\\n            rewardsDistributors[i].initializeMarket(address(vToken));\\n        }\\n\\n        emit MarketSupported(vToken);\\n    }\\n\\n    /**\\n     * @notice Set the given borrow caps for the given vToken markets. Borrowing that brings total borrows to or above borrow cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A borrow cap of type(uint256).max corresponds to unlimited borrowing.\\n     * @dev Borrow caps smaller than the current total borrows are accepted. This way, new borrows will not be allowed\\n            until the total borrows amount goes below the new borrow cap\\n     * @param vTokens The addresses of the markets (tokens) to change the borrow caps for\\n     * @param newBorrowCaps The new borrow cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited borrowing.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketBorrowCaps(VToken[] calldata vTokens, uint256[] calldata newBorrowCaps) external {\\n        _checkAccessAllowed(\\\"setMarketBorrowCaps(address[],uint256[])\\\");\\n\\n        uint256 numMarkets = vTokens.length;\\n        uint256 numBorrowCaps = newBorrowCaps.length;\\n\\n        require(numMarkets != 0 && numMarkets == numBorrowCaps, \\\"invalid input\\\");\\n\\n        _ensureMaxLoops(numMarkets);\\n\\n        for (uint256 i; i < numMarkets; ++i) {\\n            borrowCaps[address(vTokens[i])] = newBorrowCaps[i];\\n            emit NewBorrowCap(vTokens[i], newBorrowCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given supply caps for the given vToken markets. Supply that brings total Supply to or above supply cap will revert.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @dev A supply cap of type(uint256).max corresponds to unlimited supply.\\n     * @dev Supply caps smaller than the current total supplies are accepted. This way, new supplies will not be allowed\\n            until the total supplies amount goes below the new supply cap\\n     * @param vTokens The addresses of the markets (tokens) to change the supply caps for\\n     * @param newSupplyCaps The new supply cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited supply.\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMarketSupplyCaps(VToken[] calldata vTokens, uint256[] calldata newSupplyCaps) external {\\n        _checkAccessAllowed(\\\"setMarketSupplyCaps(address[],uint256[])\\\");\\n        uint256 vTokensCount = vTokens.length;\\n\\n        require(vTokensCount != 0, \\\"invalid number of markets\\\");\\n        require(vTokensCount == newSupplyCaps.length, \\\"invalid number of markets\\\");\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            supplyCaps[address(vTokens[i])] = newSupplyCaps[i];\\n            emit NewSupplyCap(vTokens[i], newSupplyCaps[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Pause/unpause specified actions\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param marketsList Markets to pause/unpause the actions on\\n     * @param actionsList List of action ids to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setActionsPaused(VToken[] calldata marketsList, Action[] calldata actionsList, bool paused) external {\\n        _checkAccessAllowed(\\\"setActionsPaused(address[],uint256[],bool)\\\");\\n\\n        uint256 marketsCount = marketsList.length;\\n        uint256 actionsCount = actionsList.length;\\n\\n        _ensureMaxLoops(marketsCount * actionsCount);\\n\\n        for (uint256 marketIdx; marketIdx < marketsCount; ++marketIdx) {\\n            for (uint256 actionIdx; actionIdx < actionsCount; ++actionIdx) {\\n                _setActionPaused(address(marketsList[marketIdx]), actionsList[actionIdx], paused);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set the given collateral threshold for non-batch liquidations. Regular liquidations\\n     *   will fail if the collateral amount is less than this threshold. Liquidators should use batch\\n     *   operations like liquidateAccount or healAccount.\\n     * @dev This function is restricted by the AccessControlManager\\n     * @param newMinLiquidatableCollateral The new min liquidatable collateral (in USD).\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setMinLiquidatableCollateral(uint256 newMinLiquidatableCollateral) external {\\n        _checkAccessAllowed(\\\"setMinLiquidatableCollateral(uint256)\\\");\\n\\n        uint256 oldMinLiquidatableCollateral = minLiquidatableCollateral;\\n        minLiquidatableCollateral = newMinLiquidatableCollateral;\\n        emit NewMinLiquidatableCollateral(oldMinLiquidatableCollateral, newMinLiquidatableCollateral);\\n    }\\n\\n    /**\\n     * @notice Add a new RewardsDistributor and initialize it with all markets. We can add several RewardsDistributor\\n     * contracts with the same rewardToken, and there could be overlaping among them considering the last reward slot (block or second)\\n     * @dev Only callable by the admin\\n     * @param _rewardsDistributor Address of the RewardDistributor contract to add\\n     * @custom:access Only Governance\\n     * @custom:event Emits NewRewardsDistributor with distributor address\\n     */\\n    function addRewardsDistributor(RewardsDistributor _rewardsDistributor) external onlyOwner {\\n        require(!rewardsDistributorExists[address(_rewardsDistributor)], \\\"already exists\\\");\\n\\n        uint256 rewardsDistributorsLen = rewardsDistributors.length;\\n        _ensureMaxLoops(rewardsDistributorsLen + 1);\\n\\n        rewardsDistributors.push(_rewardsDistributor);\\n        rewardsDistributorExists[address(_rewardsDistributor)] = true;\\n\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            _rewardsDistributor.initializeMarket(address(allMarkets[i]));\\n        }\\n\\n        emit NewRewardsDistributor(address(_rewardsDistributor), address(_rewardsDistributor.rewardToken()));\\n    }\\n\\n    /**\\n     * @notice Sets a new price oracle for the Comptroller\\n     * @dev Only callable by the admin\\n     * @param newOracle Address of the new price oracle to set\\n     * @custom:event Emits NewPriceOracle on success\\n     * @custom:error ZeroAddressNotAllowed is thrown when the new oracle address is zero\\n     */\\n    function setPriceOracle(ResilientOracleInterface newOracle) external onlyOwner {\\n        ensureNonzeroAddress(address(newOracle));\\n\\n        ResilientOracleInterface oldOracle = oracle;\\n        oracle = newOracle;\\n        emit NewPriceOracle(oldOracle, newOracle);\\n    }\\n\\n    /**\\n     * @notice Set the for loop iteration limit to avoid DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Sets the prime token contract for the comptroller\\n     * @param _prime Address of the Prime contract\\n     */\\n    function setPrimeToken(IPrime _prime) external onlyOwner {\\n        ensureNonzeroAddress(address(_prime));\\n\\n        emit NewPrimeToken(prime, _prime);\\n        prime = _prime;\\n    }\\n\\n    /**\\n     * @notice Enables forced liquidations for a market. If forced liquidation is enabled,\\n     * borrows in the market may be liquidated regardless of the account liquidity\\n     * @param vTokenBorrowed Borrowed vToken\\n     * @param enable Whether to enable forced liquidations\\n     */\\n    function setForcedLiquidation(address vTokenBorrowed, bool enable) external {\\n        _checkAccessAllowed(\\\"setForcedLiquidation(address,bool)\\\");\\n        ensureNonzeroAddress(vTokenBorrowed);\\n\\n        if (!markets[vTokenBorrowed].isListed) {\\n            revert MarketNotListed(vTokenBorrowed);\\n        }\\n\\n        isForcedLiquidationEnabled[vTokenBorrowed] = enable;\\n        emit IsForcedLiquidationEnabledUpdated(vTokenBorrowed, enable);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to liquidation threshold requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of liquidation threshold requirements,\\n     * @return shortfall Account shortfall below liquidation threshold requirements\\n     */\\n    function getAccountLiquidity(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getLiquidationThreshold);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine the current account liquidity with respect to collateral requirements\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param account The account get liquidity for\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Account liquidity in excess of collateral requirements,\\n     * @return shortfall Account shortfall below collateral requirements\\n     */\\n    function getBorrowingPower(\\n        address account\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getCurrentLiquiditySnapshot(account, _getCollateralFactor);\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Determine what the account liquidity would be if the given amounts were redeemed/borrowed\\n     * @dev The interface of this function is intentionally kept compatible with Compound and Venus Core\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return liquidity Hypothetical account liquidity in excess of collateral requirements,\\n     * @return shortfall Hypothetical account shortfall below collateral requirements\\n     */\\n    function getHypotheticalAccountLiquidity(\\n        address account,\\n        address vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount\\n    ) external view returns (uint256 error, uint256 liquidity, uint256 shortfall) {\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            account,\\n            VToken(vTokenModify),\\n            redeemTokens,\\n            borrowAmount,\\n            _getCollateralFactor\\n        );\\n        return (NO_ERROR, snapshot.liquidity, snapshot.shortfall);\\n    }\\n\\n    /**\\n     * @notice Return all of the markets\\n     * @dev The automatic getter may be used to access an individual market.\\n     * @return markets The list of market addresses\\n     */\\n    function getAllMarkets() external view override returns (VToken[] memory) {\\n        return allMarkets;\\n    }\\n\\n    /**\\n     * @notice Check if a market is marked as listed (active)\\n     * @param vToken vToken Address for the market to check\\n     * @return listed True if listed otherwise false\\n     */\\n    function isMarketListed(VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].isListed;\\n    }\\n\\n    /*** Assets You Are In ***/\\n\\n    /**\\n     * @notice Returns whether the given account is entered in a given market\\n     * @param account The address of the account to check\\n     * @param vToken The vToken to check\\n     * @return True if the account is in the market specified, otherwise false.\\n     */\\n    function checkMembership(address account, VToken vToken) external view returns (bool) {\\n        return markets[address(vToken)].accountMembership[account];\\n    }\\n\\n    /**\\n     * @notice Calculate number of tokens of collateral asset to seize given an underlying amount\\n     * @dev Used in liquidation (called in vToken.liquidateBorrowFresh)\\n     * @param vTokenBorrowed The address of the borrowed vToken\\n     * @param vTokenCollateral The address of the collateral vToken\\n     * @param actualRepayAmount The amount of vTokenBorrowed underlying to convert into vTokenCollateral tokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return tokensToSeize Number of vTokenCollateral tokens to be seized in a liquidation\\n     * @custom:error PriceError if the oracle returns an invalid price\\n     */\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 actualRepayAmount\\n    ) external view override returns (uint256 error, uint256 tokensToSeize) {\\n        /* Read oracle prices for borrowed and collateral markets */\\n        uint256 priceBorrowedMantissa = _safeGetUnderlyingPrice(VToken(vTokenBorrowed));\\n        uint256 priceCollateralMantissa = _safeGetUnderlyingPrice(VToken(vTokenCollateral));\\n\\n        /*\\n         * Get the exchange rate and calculate the number of collateral tokens to seize:\\n         *  seizeAmount = actualRepayAmount * liquidationIncentive * priceBorrowed / priceCollateral\\n         *  seizeTokens = seizeAmount / exchangeRate\\n         *   = actualRepayAmount * (liquidationIncentive * priceBorrowed) / (priceCollateral * exchangeRate)\\n         */\\n        uint256 exchangeRateMantissa = VToken(vTokenCollateral).exchangeRateStored(); // Note: reverts on error\\n        uint256 seizeTokens;\\n        Exp memory numerator;\\n        Exp memory denominator;\\n        Exp memory ratio;\\n\\n        numerator = mul_(Exp({ mantissa: liquidationIncentiveMantissa }), Exp({ mantissa: priceBorrowedMantissa }));\\n        denominator = mul_(Exp({ mantissa: priceCollateralMantissa }), Exp({ mantissa: exchangeRateMantissa }));\\n        ratio = div_(numerator, denominator);\\n\\n        seizeTokens = mul_ScalarTruncate(ratio, actualRepayAmount);\\n\\n        return (NO_ERROR, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Returns reward speed given a vToken\\n     * @param vToken The vToken to get the reward speeds for\\n     * @return rewardSpeeds Array of total supply and borrow speeds and reward token for all reward distributors\\n     */\\n    function getRewardsByMarket(address vToken) external view returns (RewardSpeeds[] memory rewardSpeeds) {\\n        uint256 rewardsDistributorsLength = rewardsDistributors.length;\\n        rewardSpeeds = new RewardSpeeds[](rewardsDistributorsLength);\\n        for (uint256 i; i < rewardsDistributorsLength; ++i) {\\n            RewardsDistributor rewardsDistributor = rewardsDistributors[i];\\n            address rewardToken = address(rewardsDistributor.rewardToken());\\n            rewardSpeeds[i] = RewardSpeeds({\\n                rewardToken: rewardToken,\\n                supplySpeed: rewardsDistributor.rewardTokenSupplySpeeds(vToken),\\n                borrowSpeed: rewardsDistributor.rewardTokenBorrowSpeeds(vToken)\\n            });\\n        }\\n        return rewardSpeeds;\\n    }\\n\\n    /**\\n     * @notice Return all reward distributors for this pool\\n     * @return Array of RewardDistributor addresses\\n     */\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory) {\\n        return rewardsDistributors;\\n    }\\n\\n    /**\\n     * @notice A marker method that returns true for a valid Comptroller contract\\n     * @return Always true\\n     */\\n    function isComptroller() external pure override returns (bool) {\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Update the prices of all the tokens associated with the provided account\\n     * @param account Address of the account to get associated tokens with\\n     */\\n    function updatePrices(address account) public {\\n        VToken[] memory vTokens = getAssetsIn(account);\\n        uint256 vTokensCount = vTokens.length;\\n\\n        ResilientOracleInterface oracle_ = oracle;\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            oracle_.updatePrice(address(vTokens[i]));\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if a certain action is paused on a market\\n     * @param market vToken address\\n     * @param action Action to check\\n     * @return paused True if the action is paused otherwise false\\n     */\\n    function actionPaused(address market, Action action) public view returns (bool) {\\n        return _actionPaused[market][action];\\n    }\\n\\n    /**\\n     * @notice Returns the assets an account has entered\\n     * @param account The address of the account to pull assets for\\n     * @return A list with the assets the account has entered\\n     */\\n    function getAssetsIn(address account) public view returns (VToken[] memory) {\\n        uint256 len;\\n        VToken[] memory _accountAssets = accountAssets[account];\\n        uint256 _accountAssetsLength = _accountAssets.length;\\n\\n        VToken[] memory assetsIn = new VToken[](_accountAssetsLength);\\n\\n        for (uint256 i; i < _accountAssetsLength; ++i) {\\n            Market storage market = markets[address(_accountAssets[i])];\\n            if (market.isListed) {\\n                assetsIn[len] = _accountAssets[i];\\n                ++len;\\n            }\\n        }\\n\\n        assembly {\\n            mstore(assetsIn, len)\\n        }\\n\\n        return assetsIn;\\n    }\\n\\n    /**\\n     * @notice Add the market to the borrower's \\\"assets in\\\" for liquidity calculations\\n     * @param vToken The market to enter\\n     * @param borrower The address of the account to modify\\n     */\\n    function _addToMarket(VToken vToken, address borrower) internal {\\n        _checkActionPauseState(address(vToken), Action.ENTER_MARKET);\\n        Market storage marketToJoin = markets[address(vToken)];\\n\\n        if (!marketToJoin.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        if (marketToJoin.accountMembership[borrower]) {\\n            // already joined\\n            return;\\n        }\\n\\n        // survived the gauntlet, add to list\\n        // NOTE: we store these somewhat redundantly as a significant optimization\\n        //  this avoids having to iterate through the list for the most common use cases\\n        //  that is, only when we need to perform liquidity checks\\n        //  and not whenever we want to check if an account is in a particular market\\n        marketToJoin.accountMembership[borrower] = true;\\n        accountAssets[borrower].push(vToken);\\n\\n        emit MarketEntered(vToken, borrower);\\n    }\\n\\n    /**\\n     * @notice Internal function to validate that a market hasn't already been added\\n     * and if it hasn't adds it\\n     * @param vToken The market to support\\n     */\\n    function _addMarket(address vToken) internal {\\n        uint256 marketsCount = allMarkets.length;\\n\\n        for (uint256 i; i < marketsCount; ++i) {\\n            if (allMarkets[i] == VToken(vToken)) {\\n                revert MarketAlreadyListed(vToken);\\n            }\\n        }\\n        allMarkets.push(VToken(vToken));\\n        marketsCount = allMarkets.length;\\n        _ensureMaxLoops(marketsCount);\\n    }\\n\\n    /**\\n     * @dev Pause/unpause an action on a market\\n     * @param market Market to pause/unpause the action on\\n     * @param action Action id to pause/unpause\\n     * @param paused The new paused state (true=paused, false=unpaused)\\n     */\\n    function _setActionPaused(address market, Action action, bool paused) internal {\\n        require(markets[market].isListed, \\\"cannot pause a market that is not listed\\\");\\n        _actionPaused[market][action] = paused;\\n        emit ActionPausedMarket(VToken(market), action, paused);\\n    }\\n\\n    /**\\n     * @dev Internal function to check that vTokens can be safely redeemed for the underlying asset.\\n     * @param vToken Address of the vTokens to redeem\\n     * @param redeemer Account redeeming the tokens\\n     * @param redeemTokens The number of tokens to redeem\\n     */\\n    function _checkRedeemAllowed(address vToken, address redeemer, uint256 redeemTokens) internal {\\n        Market storage market = markets[vToken];\\n\\n        if (!market.isListed) {\\n            revert MarketNotListed(address(vToken));\\n        }\\n\\n        /* If the redeemer is not 'in' the market, then we can bypass the liquidity check */\\n        if (!market.accountMembership[redeemer]) {\\n            return;\\n        }\\n\\n        // Update the prices of tokens\\n        updatePrices(redeemer);\\n\\n        /* Otherwise, perform a hypothetical liquidity check to guard against shortfall */\\n        AccountLiquiditySnapshot memory snapshot = _getHypotheticalLiquiditySnapshot(\\n            redeemer,\\n            VToken(vToken),\\n            redeemTokens,\\n            0,\\n            _getCollateralFactor\\n        );\\n        if (snapshot.shortfall > 0) {\\n            revert InsufficientLiquidity();\\n        }\\n    }\\n\\n    /**\\n     * @notice Get the total collateral, weighted collateral, borrow balance, liquidity, shortfall\\n     * @param account The account to get the snapshot for\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n     *  liquidation threshold. Accepts the address of the vToken and returns the weight as Exp.\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getCurrentLiquiditySnapshot(\\n        address account,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        return _getHypotheticalLiquiditySnapshot(account, VToken(address(0)), 0, 0, weight);\\n    }\\n\\n    /**\\n     * @notice Determine what the supply/borrow balances would be if the given amounts were redeemed/borrowed\\n     * @param vTokenModify The market to hypothetically redeem/borrow in\\n     * @param account The account to determine liquidity for\\n     * @param redeemTokens The number of tokens to hypothetically redeem\\n     * @param borrowAmount The amount of underlying to hypothetically borrow\\n     * @param weight The function to compute the weight of the collateral \\u2013\\u00a0either collateral factor or\\n         liquidation threshold. Accepts the address of the VToken and returns the weight\\n     * @dev Note that we calculate the exchangeRateStored for each collateral vToken using stored data,\\n     *  without calculating accumulated interest.\\n     * @return snapshot Account liquidity snapshot\\n     */\\n    function _getHypotheticalLiquiditySnapshot(\\n        address account,\\n        VToken vTokenModify,\\n        uint256 redeemTokens,\\n        uint256 borrowAmount,\\n        function(VToken) internal view returns (Exp memory) weight\\n    ) internal view returns (AccountLiquiditySnapshot memory snapshot) {\\n        // For each asset the account is in\\n        VToken[] memory assets = getAssetsIn(account);\\n        uint256 assetsCount = assets.length;\\n\\n        for (uint256 i; i < assetsCount; ++i) {\\n            VToken asset = assets[i];\\n\\n            // Read the balances and exchange rate from the vToken\\n            (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) = _safeGetAccountSnapshot(\\n                asset,\\n                account\\n            );\\n\\n            // Get the normalized price of the asset\\n            Exp memory oraclePrice = Exp({ mantissa: _safeGetUnderlyingPrice(asset) });\\n\\n            // Pre-compute conversion factors from vTokens -> usd\\n            Exp memory vTokenPrice = mul_(Exp({ mantissa: exchangeRateMantissa }), oraclePrice);\\n            Exp memory weightedVTokenPrice = mul_(weight(asset), vTokenPrice);\\n\\n            // weightedCollateral += weightedVTokenPrice * vTokenBalance\\n            snapshot.weightedCollateral = mul_ScalarTruncateAddUInt(\\n                weightedVTokenPrice,\\n                vTokenBalance,\\n                snapshot.weightedCollateral\\n            );\\n\\n            // totalCollateral += vTokenPrice * vTokenBalance\\n            snapshot.totalCollateral = mul_ScalarTruncateAddUInt(vTokenPrice, vTokenBalance, snapshot.totalCollateral);\\n\\n            // borrows += oraclePrice * borrowBalance\\n            snapshot.borrows = mul_ScalarTruncateAddUInt(oraclePrice, borrowBalance, snapshot.borrows);\\n\\n            // Calculate effects of interacting with vTokenModify\\n            if (asset == vTokenModify) {\\n                // redeem effect\\n                // effects += tokensToDenom * redeemTokens\\n                snapshot.effects = mul_ScalarTruncateAddUInt(weightedVTokenPrice, redeemTokens, snapshot.effects);\\n\\n                // borrow effect\\n                // effects += oraclePrice * borrowAmount\\n                snapshot.effects = mul_ScalarTruncateAddUInt(oraclePrice, borrowAmount, snapshot.effects);\\n            }\\n        }\\n\\n        uint256 borrowPlusEffects = snapshot.borrows + snapshot.effects;\\n        // These are safe, as the underflow condition is checked first\\n        unchecked {\\n            if (snapshot.weightedCollateral > borrowPlusEffects) {\\n                snapshot.liquidity = snapshot.weightedCollateral - borrowPlusEffects;\\n                snapshot.shortfall = 0;\\n            } else {\\n                snapshot.liquidity = 0;\\n                snapshot.shortfall = borrowPlusEffects - snapshot.weightedCollateral;\\n            }\\n        }\\n\\n        return snapshot;\\n    }\\n\\n    /**\\n     * @dev Retrieves price from oracle for an asset and checks it is nonzero\\n     * @param asset Address for asset to query price\\n     * @return Underlying price\\n     */\\n    function _safeGetUnderlyingPrice(VToken asset) internal view returns (uint256) {\\n        uint256 oraclePriceMantissa = oracle.getUnderlyingPrice(address(asset));\\n        if (oraclePriceMantissa == 0) {\\n            revert PriceError(address(asset));\\n        }\\n        return oraclePriceMantissa;\\n    }\\n\\n    /**\\n     * @dev Return collateral factor for a market\\n     * @param asset Address for asset\\n     * @return Collateral factor as exponential\\n     */\\n    function _getCollateralFactor(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].collateralFactorMantissa });\\n    }\\n\\n    /**\\n     * @dev Retrieves liquidation threshold for a market as an exponential\\n     * @param asset Address for asset to liquidation threshold\\n     * @return Liquidation threshold as exponential\\n     */\\n    function _getLiquidationThreshold(VToken asset) internal view returns (Exp memory) {\\n        return Exp({ mantissa: markets[address(asset)].liquidationThresholdMantissa });\\n    }\\n\\n    /**\\n     * @dev Returns supply and borrow balances of user in vToken, reverts on failure\\n     * @param vToken Market to query\\n     * @param user Account address\\n     * @return vTokenBalance Balance of vTokens, the same as vToken.balanceOf(user)\\n     * @return borrowBalance Borrowed amount, including the interest\\n     * @return exchangeRateMantissa Stored exchange rate\\n     */\\n    function _safeGetAccountSnapshot(\\n        VToken vToken,\\n        address user\\n    ) internal view returns (uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRateMantissa) {\\n        uint256 err;\\n        (err, vTokenBalance, borrowBalance, exchangeRateMantissa) = vToken.getAccountSnapshot(user);\\n        if (err != 0) {\\n            revert SnapshotError(address(vToken), user);\\n        }\\n        return (vTokenBalance, borrowBalance, exchangeRateMantissa);\\n    }\\n\\n    /// @notice Reverts if the call is not from expectedSender\\n    /// @param expectedSender Expected transaction sender\\n    function _checkSenderIs(address expectedSender) internal view {\\n        if (msg.sender != expectedSender) {\\n            revert UnexpectedSender(expectedSender, msg.sender);\\n        }\\n    }\\n\\n    /// @notice Reverts if a certain action is paused on a market\\n    /// @param market Market to check\\n    /// @param action Action to check\\n    function _checkActionPauseState(address market, Action action) private view {\\n        if (actionPaused(market, action)) {\\n            revert ActionPaused(market, action);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x7c6e1c6264e4681f82a9ac1bcd9155197a930033291ee5561ad97a56006f5e9c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\n\\nenum Action {\\n    MINT,\\n    REDEEM,\\n    BORROW,\\n    REPAY,\\n    SEIZE,\\n    LIQUIDATE,\\n    TRANSFER,\\n    ENTER_MARKET,\\n    EXIT_MARKET\\n}\\n\\n/**\\n * @title ComptrollerInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract.\\n */\\ninterface ComptrollerInterface {\\n    /*** Assets You Are In ***/\\n\\n    function enterMarkets(address[] calldata vTokens) external returns (uint256[] memory);\\n\\n    function exitMarket(address vToken) external returns (uint256);\\n\\n    /*** Policy Hooks ***/\\n\\n    function preMintHook(address vToken, address minter, uint256 mintAmount) external;\\n\\n    function preRedeemHook(address vToken, address redeemer, uint256 redeemTokens) external;\\n\\n    function preBorrowHook(address vToken, address borrower, uint256 borrowAmount) external;\\n\\n    function preRepayHook(address vToken, address borrower) external;\\n\\n    function preLiquidateHook(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address borrower,\\n        uint256 repayAmount,\\n        bool skipLiquidityCheck\\n    ) external;\\n\\n    function preSeizeHook(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower\\n    ) external;\\n\\n    function borrowVerify(address vToken, address borrower, uint borrowAmount) external;\\n\\n    function mintVerify(address vToken, address minter, uint mintAmount, uint mintTokens) external;\\n\\n    function redeemVerify(address vToken, address redeemer, uint redeemAmount, uint redeemTokens) external;\\n\\n    function repayBorrowVerify(\\n        address vToken,\\n        address payer,\\n        address borrower,\\n        uint repayAmount,\\n        uint borrowerIndex\\n    ) external;\\n\\n    function liquidateBorrowVerify(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        address liquidator,\\n        address borrower,\\n        uint repayAmount,\\n        uint seizeTokens\\n    ) external;\\n\\n    function seizeVerify(\\n        address vTokenCollateral,\\n        address vTokenBorrowed,\\n        address liquidator,\\n        address borrower,\\n        uint seizeTokens\\n    ) external;\\n\\n    function transferVerify(address vToken, address src, address dst, uint transferTokens) external;\\n\\n    function preTransferHook(address vToken, address src, address dst, uint256 transferTokens) external;\\n\\n    function isComptroller() external view returns (bool);\\n\\n    /*** Liquidity/Liquidation Calculations ***/\\n\\n    function liquidateCalculateSeizeTokens(\\n        address vTokenBorrowed,\\n        address vTokenCollateral,\\n        uint256 repayAmount\\n    ) external view returns (uint256, uint256);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function actionPaused(address market, Action action) external view returns (bool);\\n}\\n\\n/**\\n * @title ComptrollerViewInterface\\n * @author Venus\\n * @notice Interface implemented by the `Comptroller` contract, including only some util view functions.\\n */\\ninterface ComptrollerViewInterface {\\n    function markets(address) external view returns (bool, uint256);\\n\\n    function oracle() external view returns (ResilientOracleInterface);\\n\\n    function getAssetsIn(address) external view returns (VToken[] memory);\\n\\n    function closeFactorMantissa() external view returns (uint256);\\n\\n    function liquidationIncentiveMantissa() external view returns (uint256);\\n\\n    function minLiquidatableCollateral() external view returns (uint256);\\n\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory);\\n\\n    function getAllMarkets() external view returns (VToken[] memory);\\n\\n    function borrowCaps(address) external view returns (uint256);\\n\\n    function supplyCaps(address) external view returns (uint256);\\n\\n    function approvedDelegates(address user, address delegate) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xcbf7f9977472650c61345b7cbde23e81f626e1f8863bab4c6ce3dacfc7604919\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ComptrollerStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { VToken } from \\\"./VToken.sol\\\";\\nimport { RewardsDistributor } from \\\"./Rewards/RewardsDistributor.sol\\\";\\nimport { IPrime } from \\\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\\\";\\nimport { Action } from \\\"./ComptrollerInterface.sol\\\";\\n\\n/**\\n * @title ComptrollerStorage\\n * @author Venus\\n * @notice Storage layout for the `Comptroller` contract.\\n */\\ncontract ComptrollerStorage {\\n    struct LiquidationOrder {\\n        VToken vTokenCollateral;\\n        VToken vTokenBorrowed;\\n        uint256 repayAmount;\\n    }\\n\\n    struct AccountLiquiditySnapshot {\\n        uint256 totalCollateral;\\n        uint256 weightedCollateral;\\n        uint256 borrows;\\n        uint256 effects;\\n        uint256 liquidity;\\n        uint256 shortfall;\\n    }\\n\\n    struct RewardSpeeds {\\n        address rewardToken;\\n        uint256 supplySpeed;\\n        uint256 borrowSpeed;\\n    }\\n\\n    struct Market {\\n        // Whether or not this market is listed\\n        bool isListed;\\n        //  Multiplier representing the most one can borrow against their collateral in this market.\\n        //  For instance, 0.9 to allow borrowing 90% of collateral value.\\n        //  Must be between 0 and 1, and stored as a mantissa.\\n        uint256 collateralFactorMantissa;\\n        //  Multiplier representing the collateralization after which the borrow is eligible\\n        //  for liquidation. For instance, 0.8 liquidate when the borrow is 80% of collateral\\n        //  value. Must be between 0 and collateral factor, stored as a mantissa.\\n        uint256 liquidationThresholdMantissa;\\n        // Per-market mapping of \\\"accounts in this asset\\\"\\n        mapping(address => bool) accountMembership;\\n    }\\n\\n    /**\\n     * @notice Oracle which gives the price of any given asset\\n     */\\n    ResilientOracleInterface public oracle;\\n\\n    /**\\n     * @notice Multiplier used to calculate the maximum repayAmount when liquidating a borrow\\n     */\\n    uint256 public closeFactorMantissa;\\n\\n    /**\\n     * @notice Multiplier representing the discount on collateral that a liquidator receives\\n     */\\n    uint256 public liquidationIncentiveMantissa;\\n\\n    /**\\n     * @notice Per-account mapping of \\\"assets you are in\\\"\\n     */\\n    mapping(address => VToken[]) public accountAssets;\\n\\n    /**\\n     * @notice Official mapping of vTokens -> Market metadata\\n     * @dev Used e.g. to determine if a market is supported\\n     */\\n    mapping(address => Market) public markets;\\n\\n    /// @notice A list of all markets\\n    VToken[] public allMarkets;\\n\\n    /// @notice Borrow caps enforced by borrowAllowed for each vToken address. Defaults to zero which restricts borrowing.\\n    mapping(address => uint256) public borrowCaps;\\n\\n    /// @notice Minimal collateral required for regular (non-batch) liquidations\\n    uint256 public minLiquidatableCollateral;\\n\\n    /// @notice Supply caps enforced by mintAllowed for each vToken address. Defaults to zero which corresponds to minting not allowed\\n    mapping(address => uint256) public supplyCaps;\\n\\n    /// @notice True if a certain action is paused on a certain market\\n    mapping(address => mapping(Action => bool)) internal _actionPaused;\\n\\n    // List of Reward Distributors added\\n    RewardsDistributor[] internal rewardsDistributors;\\n\\n    // Used to check if rewards distributor is added\\n    mapping(address => bool) internal rewardsDistributorExists;\\n\\n    /// @notice Flag indicating whether forced liquidation enabled for a market\\n    mapping(address => bool) public isForcedLiquidationEnabled;\\n\\n    uint256 internal constant NO_ERROR = 0;\\n\\n    // closeFactorMantissa must be strictly greater than this value\\n    uint256 internal constant MIN_CLOSE_FACTOR_MANTISSA = 0.05e18; // 0.05\\n\\n    // closeFactorMantissa must not exceed this value\\n    uint256 internal constant MAX_CLOSE_FACTOR_MANTISSA = 0.9e18; // 0.9\\n\\n    // No collateralFactorMantissa may exceed this value\\n    uint256 internal constant MAX_COLLATERAL_FACTOR_MANTISSA = 0.95e18; // 0.95\\n\\n    /// Prime token address\\n    IPrime public prime;\\n\\n    /// @notice Whether the delegate is allowed to borrow or redeem on behalf of the user\\n    //mapping(address user => mapping (address delegate => bool approved)) public approvedDelegates;\\n    mapping(address => mapping(address => bool)) public approvedDelegates;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4df44cb65ac152bac2be4b4545430e703005a74a55b72e144100b16421bd8bfd\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ErrorReporter.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title TokenErrorReporter\\n * @author Venus\\n * @notice Errors that can be thrown by the `VToken` contract.\\n */\\ncontract TokenErrorReporter {\\n    uint256 public constant NO_ERROR = 0; // support legacy return codes\\n\\n    error TransferNotAllowed();\\n\\n    error MintFreshnessCheck();\\n\\n    error RedeemFreshnessCheck();\\n    error RedeemTransferOutNotPossible();\\n\\n    error BorrowFreshnessCheck();\\n    error BorrowCashNotAvailable();\\n    error DelegateNotApproved();\\n\\n    error RepayBorrowFreshnessCheck();\\n\\n    error HealBorrowUnauthorized();\\n    error ForceLiquidateBorrowUnauthorized();\\n\\n    error LiquidateFreshnessCheck();\\n    error LiquidateCollateralFreshnessCheck();\\n    error LiquidateAccrueCollateralInterestFailed(uint256 errorCode);\\n    error LiquidateLiquidatorIsBorrower();\\n    error LiquidateCloseAmountIsZero();\\n    error LiquidateCloseAmountIsUintMax();\\n\\n    error LiquidateSeizeLiquidatorIsBorrower();\\n\\n    error ProtocolSeizeShareTooBig();\\n\\n    error SetReserveFactorFreshCheck();\\n    error SetReserveFactorBoundsCheck();\\n\\n    error AddReservesFactorFreshCheck(uint256 actualAddAmount);\\n\\n    error ReduceReservesFreshCheck();\\n    error ReduceReservesCashNotAvailable();\\n    error ReduceReservesCashValidation();\\n\\n    error SetInterestRateModelFreshCheck();\\n}\\n\",\"keccak256\":\"0x7a7ced1caaac2d9242659ebd50b99f308c725ce958ac9e11f7ada404b1d97a7b\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/ExponentialNoError.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { EXP_SCALE as EXP_SCALE_, MANTISSA_ONE as MANTISSA_ONE_ } from \\\"./lib/constants.sol\\\";\\n\\n/**\\n * @title Exponential module for storing fixed-precision decimals\\n * @author Compound\\n * @notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.\\n *         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:\\n *         `Exp({mantissa: 5100000000000000000})`.\\n */\\ncontract ExponentialNoError {\\n    struct Exp {\\n        uint256 mantissa;\\n    }\\n\\n    struct Double {\\n        uint256 mantissa;\\n    }\\n\\n    uint256 internal constant EXP_SCALE = EXP_SCALE_;\\n    uint256 internal constant DOUBLE_SCALE = 1e36;\\n    uint256 internal constant HALF_EXP_SCALE = EXP_SCALE / 2;\\n    uint256 internal constant MANTISSA_ONE = MANTISSA_ONE_;\\n\\n    /**\\n     * @dev Truncates the given exp to a whole number value.\\n     *      For example, truncate(Exp{mantissa: 15 * EXP_SCALE}) = 15\\n     */\\n    function truncate(Exp memory exp) internal pure returns (uint256) {\\n        // Note: We are not using careful math here as we're performing a division that cannot fail\\n        return exp.mantissa / EXP_SCALE;\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, then truncate to return an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncate(Exp memory a, uint256 scalar) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return truncate(product);\\n    }\\n\\n    /**\\n     * @dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function mul_ScalarTruncateAddUInt(Exp memory a, uint256 scalar, uint256 addend) internal pure returns (uint256) {\\n        Exp memory product = mul_(a, scalar);\\n        return add_(truncate(product), addend);\\n    }\\n\\n    /**\\n     * @dev Checks if first Exp is less than second Exp.\\n     */\\n    function lessThanExp(Exp memory left, Exp memory right) internal pure returns (bool) {\\n        return left.mantissa < right.mantissa;\\n    }\\n\\n    function safe224(uint256 n, string memory errorMessage) internal pure returns (uint224) {\\n        require(n <= type(uint224).max, errorMessage);\\n        return uint224(n);\\n    }\\n\\n    function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) {\\n        require(n <= type(uint32).max, errorMessage);\\n        return uint32(n);\\n    }\\n\\n    function add_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: add_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function add_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a + b;\\n    }\\n\\n    function sub_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: sub_(a.mantissa, b.mantissa) });\\n    }\\n\\n    function sub_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a - b;\\n    }\\n\\n    function mul_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b.mantissa) / EXP_SCALE });\\n    }\\n\\n    function mul_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / EXP_SCALE;\\n    }\\n\\n    function mul_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b.mantissa) / DOUBLE_SCALE });\\n    }\\n\\n    function mul_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: mul_(a.mantissa, b) });\\n    }\\n\\n    function mul_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return mul_(a, b.mantissa) / DOUBLE_SCALE;\\n    }\\n\\n    function mul_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a * b;\\n    }\\n\\n    function div_(Exp memory a, Exp memory b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(mul_(a.mantissa, EXP_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Exp memory a, uint256 b) internal pure returns (Exp memory) {\\n        return Exp({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Exp memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, EXP_SCALE), b.mantissa);\\n    }\\n\\n    function div_(Double memory a, Double memory b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a.mantissa, DOUBLE_SCALE), b.mantissa) });\\n    }\\n\\n    function div_(Double memory a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(a.mantissa, b) });\\n    }\\n\\n    function div_(uint256 a, Double memory b) internal pure returns (uint256) {\\n        return div_(mul_(a, DOUBLE_SCALE), b.mantissa);\\n    }\\n\\n    function div_(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a / b;\\n    }\\n\\n    function fraction(uint256 a, uint256 b) internal pure returns (Double memory) {\\n        return Double({ mantissa: div_(mul_(a, DOUBLE_SCALE), b) });\\n    }\\n}\\n\",\"keccak256\":\"0x8afbe8a24fe3539c124e718681ed3dcebd24c40dd53095786c0155998213b9b0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/InterestRateModel.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title Compound's InterestRateModel Interface\\n * @author Compound\\n */\\nabstract contract InterestRateModel {\\n    /**\\n     * @notice Calculates the current borrow interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getBorrowRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Calculates the current supply interest rate per slot (block or second)\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amount of reserves the market has\\n     * @param reserveFactorMantissa The current reserve factor the market has\\n     * @param badDebt The amount of badDebt in the market\\n     * @return The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)\\n     */\\n    function getSupplyRate(\\n        uint256 cash,\\n        uint256 borrows,\\n        uint256 reserves,\\n        uint256 reserveFactorMantissa,\\n        uint256 badDebt\\n    ) external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is an InterestRateModel contract (for inspection)\\n     * @return Always true\\n     */\\n    function isInterestRateModel() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0xc4fda1ab75ebe4b187b707c4f10c58780f343cf343c537f641dc75d3cd28ab51\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/**\\n * @title MaxLoopsLimitHelper\\n * @author Venus\\n * @notice Abstract contract used to avoid collection with too many items that would generate gas errors and DoS.\\n */\\nabstract contract MaxLoopsLimitHelper {\\n    // Limit for the loops to avoid the DOS\\n    uint256 public maxLoopsLimit;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n\\n    /// @notice Emitted when max loops limit is set\\n    event MaxLoopsLimitUpdated(uint256 oldMaxLoopsLimit, uint256 newmaxLoopsLimit);\\n\\n    /// @notice Thrown an error on maxLoopsLimit exceeds for any loop\\n    error MaxLoopsLimitExceeded(uint256 loopsLimit, uint256 requiredLoops);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function _setMaxLoopsLimit(uint256 limit) internal {\\n        require(limit > maxLoopsLimit, \\\"Comptroller: Invalid maxLoopsLimit\\\");\\n\\n        uint256 oldMaxLoopsLimit = maxLoopsLimit;\\n        maxLoopsLimit = limit;\\n\\n        emit MaxLoopsLimitUpdated(oldMaxLoopsLimit, limit);\\n    }\\n\\n    /**\\n     * @notice Compare the maxLoopsLimit with number of the times loop iterate\\n     * @param len Length of the loops iterate\\n     * @custom:error MaxLoopsLimitExceeded error is thrown when loops length exceeds maxLoopsLimit\\n     */\\n    function _ensureMaxLoops(uint256 len) internal view {\\n        if (len > maxLoopsLimit) {\\n            revert MaxLoopsLimitExceeded(maxLoopsLimit, len);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x4c25e30635485d162177effa384eee51768b0141a567a0da16ff6ad673274166\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\n\\nimport { ExponentialNoError } from \\\"../ExponentialNoError.sol\\\";\\nimport { VToken } from \\\"../VToken.sol\\\";\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"../MaxLoopsLimitHelper.sol\\\";\\nimport { RewardsDistributorStorage } from \\\"./RewardsDistributorStorage.sol\\\";\\n\\n/**\\n * @title `RewardsDistributor`\\n * @author Venus\\n * @notice Contract used to configure, track and distribute rewards to users based on their actions (borrows and supplies) in the protocol.\\n * Users can receive additional rewards through a `RewardsDistributor`. Each `RewardsDistributor` proxy is initialized with a specific reward\\n * token and `Comptroller`, which can then distribute the reward token to users that supply or borrow in the associated pool.\\n * Authorized users can set the reward token borrow and supply speeds for each market in the pool. This sets a fixed amount of reward\\n * token to be released each slot (block or second) for borrowers and suppliers, which is distributed based on a user\\u2019s percentage of the borrows or supplies\\n * respectively. The owner can also set up reward distributions to contributor addresses (distinct from suppliers and borrowers) by setting\\n * their contributor reward token speed, which similarly allocates a fixed amount of reward token per slot (block or second).\\n *\\n * The owner has the ability to transfer any amount of reward tokens held by the contract to any other address. Rewards are not distributed\\n * automatically and must be claimed by a user calling `claimRewardToken()`. Users should be aware that it is up to the owner and other centralized\\n * entities to ensure that the `RewardsDistributor` holds enough tokens to distribute the accumulated rewards of users and contributors.\\n */\\ncontract RewardsDistributor is\\n    ExponentialNoError,\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    MaxLoopsLimitHelper,\\n    RewardsDistributorStorage,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    /// @notice The initial REWARD TOKEN index for a market\\n    uint224 public constant INITIAL_INDEX = 1e36;\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a supplier\\n    event DistributedSupplierRewardToken(\\n        VToken indexed vToken,\\n        address indexed supplier,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenSupplyIndex\\n    );\\n\\n    /// @notice Emitted when REWARD TOKEN is distributed to a borrower\\n    event DistributedBorrowerRewardToken(\\n        VToken indexed vToken,\\n        address indexed borrower,\\n        uint256 rewardTokenDelta,\\n        uint256 rewardTokenTotal,\\n        uint256 rewardTokenBorrowIndex\\n    );\\n\\n    /// @notice Emitted when a new supply-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenSupplySpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when a new borrow-side REWARD TOKEN speed is calculated for a market\\n    event RewardTokenBorrowSpeedUpdated(VToken indexed vToken, uint256 newSpeed);\\n\\n    /// @notice Emitted when REWARD TOKEN is granted by admin\\n    event RewardTokenGranted(address indexed recipient, uint256 amount);\\n\\n    /// @notice Emitted when a new REWARD TOKEN speed is set for a contributor\\n    event ContributorRewardTokenSpeedUpdated(address indexed contributor, uint256 newSpeed);\\n\\n    /// @notice Emitted when a market is initialized\\n    event MarketInitialized(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token supply index is updated\\n    event RewardTokenSupplyIndexUpdated(address indexed vToken);\\n\\n    /// @notice Emitted when a reward token borrow index is updated\\n    event RewardTokenBorrowIndexUpdated(address indexed vToken, Exp marketBorrowIndex);\\n\\n    /// @notice Emitted when a reward for contributor is updated\\n    event ContributorRewardsUpdated(address indexed contributor, uint256 rewardAccrued);\\n\\n    /// @notice Emitted when a reward token last rewarding block for supply is updated\\n    event SupplyLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding block for borrow is updated\\n    event BorrowLastRewardingBlockUpdated(address indexed vToken, uint32 newBlock);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for supply is updated\\n    event SupplyLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    /// @notice Emitted when a reward token last rewarding timestamp for borrow is updated\\n    event BorrowLastRewardingBlockTimestampUpdated(address indexed vToken, uint256 newTimestamp);\\n\\n    modifier onlyComptroller() {\\n        require(address(comptroller) == msg.sender, \\\"Only comptroller can call this function\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice RewardsDistributor initializer\\n     * @dev Initializes the deployer to owner\\n     * @param comptroller_ Comptroller to attach the reward distributor to\\n     * @param rewardToken_ Reward token to distribute\\n     * @param loopsLimit_ Maximum number of iterations for the loops in this contract\\n     * @param accessControlManager_ AccessControlManager contract address\\n     */\\n    function initialize(\\n        Comptroller comptroller_,\\n        IERC20Upgradeable rewardToken_,\\n        uint256 loopsLimit_,\\n        address accessControlManager_\\n    ) external initializer {\\n        comptroller = comptroller_;\\n        rewardToken = rewardToken_;\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n\\n        _setMaxLoopsLimit(loopsLimit_);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken\\n     * @param vToken The address of the vToken to be initialized\\n     * @custom:event MarketInitialized emits on success\\n     * @custom:access Only Comptroller\\n     */\\n    function initializeMarket(address vToken) external onlyComptroller {\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        isTimeBased\\n            ? _initializeMarketTimestampBased(vToken, blockNumberOrTimestamp)\\n            : _initializeMarketBlockBased(vToken, safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\"));\\n\\n        emit MarketInitialized(vToken);\\n    }\\n\\n    /*** Reward Token Distribution ***/\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them\\n     *         Borrowers will begin to accrue after the first interaction with the protocol.\\n     * @dev This function should only be called when the user has a borrow position in the market\\n     *      (e.g. Comptroller.preBorrowHook, and Comptroller.preRepayHook)\\n     *      We avoid an external call to check if they are in the market to save gas because this function is called in many places\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function distributeBorrowerRewardToken(\\n        address vToken,\\n        address borrower,\\n        Exp memory marketBorrowIndex\\n    ) external onlyComptroller {\\n        _distributeBorrowerRewardToken(vToken, borrower, marketBorrowIndex);\\n    }\\n\\n    function updateRewardTokenSupplyIndex(address vToken) external onlyComptroller {\\n        _updateRewardTokenSupplyIndex(vToken);\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the recipient\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all\\n     * @param recipient The address of the recipient to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     */\\n    function grantRewardToken(address recipient, uint256 amount) external onlyOwner {\\n        uint256 amountLeft = _grantRewardToken(recipient, amount);\\n        require(amountLeft == 0, \\\"insufficient rewardToken for grant\\\");\\n        emit RewardTokenGranted(recipient, amount);\\n    }\\n\\n    function updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) external onlyComptroller {\\n        _updateRewardTokenBorrowIndex(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN borrow and supply speeds for the specified markets\\n     * @param vTokens The markets whose REWARD TOKEN speed to update\\n     * @param supplySpeeds New supply-side REWARD TOKEN speed for the corresponding market\\n     * @param borrowSpeeds New borrow-side REWARD TOKEN speed for the corresponding market\\n     */\\n    function setRewardTokenSpeeds(\\n        VToken[] memory vTokens,\\n        uint256[] memory supplySpeeds,\\n        uint256[] memory borrowSpeeds\\n    ) external {\\n        _checkAccessAllowed(\\\"setRewardTokenSpeeds(address[],uint256[],uint256[])\\\");\\n        uint256 numTokens = vTokens.length;\\n        require(numTokens == supplySpeeds.length && numTokens == borrowSpeeds.length, \\\"invalid setRewardTokenSpeeds\\\");\\n\\n        for (uint256 i; i < numTokens; ++i) {\\n            _setRewardTokenSpeed(vTokens[i], supplySpeeds[i], borrowSpeeds[i]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for the specified markets, used when contract is block based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlocks New supply-side REWARD TOKEN last rewarding block for the corresponding market\\n     * @param borrowLastRewardingBlocks New borrow-side REWARD TOKEN last rewarding block for the corresponding market\\n     */\\n    function setLastRewardingBlocks(\\n        VToken[] calldata vTokens,\\n        uint32[] calldata supplyLastRewardingBlocks,\\n        uint32[] calldata borrowLastRewardingBlocks\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlocks(address[],uint32[],uint32[])\\\");\\n        require(!isTimeBased, \\\"Block-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlocks.length && numTokens == borrowLastRewardingBlocks.length,\\n            \\\"RewardsDistributor::setLastRewardingBlocks invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlock(vTokens[i], supplyLastRewardingBlocks[i], borrowLastRewardingBlocks[i]);\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block timestamp for the specified markets, used when contract is time based\\n     * @param vTokens The markets whose REWARD TOKEN last rewarding block to update\\n     * @param supplyLastRewardingBlockTimestamps New supply-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     * @param borrowLastRewardingBlockTimestamps New borrow-side REWARD TOKEN last rewarding block timestamp for the corresponding market\\n     */\\n    function setLastRewardingBlockTimestamps(\\n        VToken[] calldata vTokens,\\n        uint256[] calldata supplyLastRewardingBlockTimestamps,\\n        uint256[] calldata borrowLastRewardingBlockTimestamps\\n    ) external {\\n        _checkAccessAllowed(\\\"setLastRewardingBlockTimestamps(address[],uint256[],uint256[])\\\");\\n        require(isTimeBased, \\\"Time-based operation only\\\");\\n\\n        uint256 numTokens = vTokens.length;\\n        require(\\n            numTokens == supplyLastRewardingBlockTimestamps.length &&\\n                numTokens == borrowLastRewardingBlockTimestamps.length,\\n            \\\"RewardsDistributor::setLastRewardingBlockTimestamps invalid input\\\"\\n        );\\n\\n        for (uint256 i; i < numTokens; ) {\\n            _setLastRewardingBlockTimestamp(\\n                vTokens[i],\\n                supplyLastRewardingBlockTimestamps[i],\\n                borrowLastRewardingBlockTimestamps[i]\\n            );\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single contributor\\n     * @param contributor The contributor whose REWARD TOKEN speed to update\\n     * @param rewardTokenSpeed New REWARD TOKEN speed for contributor\\n     */\\n    function setContributorRewardTokenSpeed(address contributor, uint256 rewardTokenSpeed) external onlyOwner {\\n        // note that REWARD TOKEN speed could be set to 0 to halt liquidity rewards for a contributor\\n        updateContributorRewards(contributor);\\n        if (rewardTokenSpeed == 0) {\\n            // release storage\\n            delete lastContributorBlock[contributor];\\n        } else {\\n            lastContributorBlock[contributor] = getBlockNumberOrTimestamp();\\n        }\\n        rewardTokenContributorSpeeds[contributor] = rewardTokenSpeed;\\n\\n        emit ContributorRewardTokenSpeedUpdated(contributor, rewardTokenSpeed);\\n    }\\n\\n    function distributeSupplierRewardToken(address vToken, address supplier) external onlyComptroller {\\n        _distributeSupplierRewardToken(vToken, supplier);\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in all markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     */\\n    function claimRewardToken(address holder) external {\\n        return claimRewardToken(holder, comptroller.getAllMarkets());\\n    }\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param limit Limit for the max loops can execute at a time\\n     */\\n    function setMaxLoopsLimit(uint256 limit) external onlyOwner {\\n        _setMaxLoopsLimit(limit);\\n    }\\n\\n    /**\\n     * @notice Calculate additional accrued REWARD TOKEN for a contributor since last accrual\\n     * @param contributor The address to calculate contributor rewards for\\n     */\\n    function updateContributorRewards(address contributor) public {\\n        uint256 rewardTokenSpeed = rewardTokenContributorSpeeds[contributor];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n        uint256 deltaBlocksOrTimestamp = sub_(blockNumberOrTimestamp, lastContributorBlock[contributor]);\\n        if (deltaBlocksOrTimestamp > 0 && rewardTokenSpeed > 0) {\\n            uint256 newAccrued = mul_(deltaBlocksOrTimestamp, rewardTokenSpeed);\\n            uint256 contributorAccrued = add_(rewardTokenAccrued[contributor], newAccrued);\\n\\n            rewardTokenAccrued[contributor] = contributorAccrued;\\n            lastContributorBlock[contributor] = blockNumberOrTimestamp;\\n\\n            emit ContributorRewardsUpdated(contributor, rewardTokenAccrued[contributor]);\\n        }\\n    }\\n\\n    /**\\n     * @notice Claim all the rewardToken accrued by holder in the specified markets\\n     * @param holder The address to claim REWARD TOKEN for\\n     * @param vTokens The list of markets to claim REWARD TOKEN in\\n     */\\n    function claimRewardToken(address holder, VToken[] memory vTokens) public {\\n        uint256 vTokensCount = vTokens.length;\\n\\n        _ensureMaxLoops(vTokensCount);\\n\\n        for (uint256 i; i < vTokensCount; ++i) {\\n            VToken vToken = vTokens[i];\\n            require(comptroller.isMarketListed(vToken), \\\"market must be listed\\\");\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n            _distributeBorrowerRewardToken(address(vToken), holder, borrowIndex);\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n            _distributeSupplierRewardToken(address(vToken), holder);\\n        }\\n        rewardTokenAccrued[holder] = _grantRewardToken(holder, rewardTokenAccrued[holder]);\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding block for a single market.\\n     * @param vToken market's whose reward token last rewarding block to be updated\\n     * @param supplyLastRewardingBlock New supply-side REWARD TOKEN last rewarding block for market\\n     * @param borrowLastRewardingBlock New borrow-side REWARD TOKEN last rewarding block for market\\n     */\\n    function _setLastRewardingBlock(\\n        VToken vToken,\\n        uint32 supplyLastRewardingBlock,\\n        uint32 borrowLastRewardingBlock\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockNumber = getBlockNumberOrTimestamp();\\n\\n        require(supplyLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n        require(borrowLastRewardingBlock > blockNumber, \\\"setting last rewarding block in the past is not allowed\\\");\\n\\n        uint32 currentSupplyLastRewardingBlock = rewardTokenSupplyState[address(vToken)].lastRewardingBlock;\\n        uint32 currentBorrowLastRewardingBlock = rewardTokenBorrowState[address(vToken)].lastRewardingBlock;\\n\\n        require(\\n            currentSupplyLastRewardingBlock == 0 || currentSupplyLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlock == 0 || currentBorrowLastRewardingBlock > blockNumber,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlock != supplyLastRewardingBlock) {\\n            rewardTokenSupplyState[address(vToken)].lastRewardingBlock = supplyLastRewardingBlock;\\n            emit SupplyLastRewardingBlockUpdated(address(vToken), supplyLastRewardingBlock);\\n        }\\n\\n        if (currentBorrowLastRewardingBlock != borrowLastRewardingBlock) {\\n            rewardTokenBorrowState[address(vToken)].lastRewardingBlock = borrowLastRewardingBlock;\\n            emit BorrowLastRewardingBlockUpdated(address(vToken), borrowLastRewardingBlock);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN last rewarding timestamp for a single market.\\n     * @param vToken market's whose reward token last rewarding timestamp to be updated\\n     * @param supplyLastRewardingBlockTimestamp New supply-side REWARD TOKEN last rewarding timestamp for market\\n     * @param borrowLastRewardingBlockTimestamp New borrow-side REWARD TOKEN last rewarding timestamp for market\\n     */\\n    function _setLastRewardingBlockTimestamp(\\n        VToken vToken,\\n        uint256 supplyLastRewardingBlockTimestamp,\\n        uint256 borrowLastRewardingBlockTimestamp\\n    ) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        uint256 blockTimestamp = getBlockNumberOrTimestamp();\\n\\n        require(\\n            supplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n        require(\\n            borrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"setting last rewarding timestamp in the past is not allowed\\\"\\n        );\\n\\n        uint256 currentSupplyLastRewardingBlockTimestamp = rewardTokenSupplyStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n        uint256 currentBorrowLastRewardingBlockTimestamp = rewardTokenBorrowStateTimeBased[address(vToken)]\\n            .lastRewardingTimestamp;\\n\\n        require(\\n            currentSupplyLastRewardingBlockTimestamp == 0 || currentSupplyLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n        require(\\n            currentBorrowLastRewardingBlockTimestamp == 0 || currentBorrowLastRewardingBlockTimestamp > blockTimestamp,\\n            \\\"this RewardsDistributor is already locked\\\"\\n        );\\n\\n        if (currentSupplyLastRewardingBlockTimestamp != supplyLastRewardingBlockTimestamp) {\\n            rewardTokenSupplyStateTimeBased[address(vToken)].lastRewardingTimestamp = supplyLastRewardingBlockTimestamp;\\n            emit SupplyLastRewardingBlockTimestampUpdated(address(vToken), supplyLastRewardingBlockTimestamp);\\n        }\\n\\n        if (currentBorrowLastRewardingBlockTimestamp != borrowLastRewardingBlockTimestamp) {\\n            rewardTokenBorrowStateTimeBased[address(vToken)].lastRewardingTimestamp = borrowLastRewardingBlockTimestamp;\\n            emit BorrowLastRewardingBlockTimestampUpdated(address(vToken), borrowLastRewardingBlockTimestamp);\\n        }\\n    }\\n\\n    /**\\n     * @notice Set REWARD TOKEN speed for a single market.\\n     * @param vToken market's whose reward token rate to be updated\\n     * @param supplySpeed New supply-side REWARD TOKEN speed for market\\n     * @param borrowSpeed New borrow-side REWARD TOKEN speed for market\\n     */\\n    function _setRewardTokenSpeed(VToken vToken, uint256 supplySpeed, uint256 borrowSpeed) internal {\\n        require(comptroller.isMarketListed(vToken), \\\"rewardToken market is not listed\\\");\\n\\n        if (rewardTokenSupplySpeeds[address(vToken)] != supplySpeed) {\\n            // Supply speed updated so let's update supply state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            _updateRewardTokenSupplyIndex(address(vToken));\\n\\n            // Update speed and emit event\\n            rewardTokenSupplySpeeds[address(vToken)] = supplySpeed;\\n            emit RewardTokenSupplySpeedUpdated(vToken, supplySpeed);\\n        }\\n\\n        if (rewardTokenBorrowSpeeds[address(vToken)] != borrowSpeed) {\\n            // Borrow speed updated so let's update borrow state to ensure that\\n            //  1. REWARD TOKEN accrued properly for the old speed, and\\n            //  2. REWARD TOKEN accrued at the new speed starts after this block.\\n            Exp memory borrowIndex = Exp({ mantissa: vToken.borrowIndex() });\\n            _updateRewardTokenBorrowIndex(address(vToken), borrowIndex);\\n\\n            // Update speed and emit event\\n            rewardTokenBorrowSpeeds[address(vToken)] = borrowSpeed;\\n            emit RewardTokenBorrowSpeedUpdated(vToken, borrowSpeed);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculate REWARD TOKEN accrued by a supplier and possibly transfer it to them.\\n     * @param vToken The market in which the supplier is interacting\\n     * @param supplier The address of the supplier to distribute REWARD TOKEN to\\n     */\\n    function _distributeSupplierRewardToken(address vToken, address supplier) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n        uint256 supplierIndex = rewardTokenSupplierIndex[vToken][supplier];\\n\\n        // Update supplier's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenSupplierIndex[vToken][supplier] = supplyIndex;\\n\\n        if (supplierIndex == 0 && supplyIndex >= INITIAL_INDEX) {\\n            // Covers the case where users supplied tokens before the market's supply state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when supplier rewards were first\\n            // set for the market.\\n            supplierIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per vToken accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(supplyIndex, supplierIndex) });\\n\\n        uint256 supplierTokens = VToken(vToken).balanceOf(supplier);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerVToken\\n        uint256 supplierDelta = mul_(supplierTokens, deltaIndex);\\n\\n        uint256 supplierAccrued = add_(rewardTokenAccrued[supplier], supplierDelta);\\n        rewardTokenAccrued[supplier] = supplierAccrued;\\n\\n        emit DistributedSupplierRewardToken(VToken(vToken), supplier, supplierDelta, supplierAccrued, supplyIndex);\\n    }\\n\\n    /**\\n     * @notice Calculate reward token accrued by a borrower and possibly transfer it to them.\\n     * @param vToken The market in which the borrower is interacting\\n     * @param borrower The address of the borrower to distribute REWARD TOKEN to\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     */\\n    function _distributeBorrowerRewardToken(address vToken, address borrower, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n        uint256 borrowerIndex = rewardTokenBorrowerIndex[vToken][borrower];\\n\\n        // Update borrowers's index to the current index since we are distributing accrued REWARD TOKEN\\n        rewardTokenBorrowerIndex[vToken][borrower] = borrowIndex;\\n\\n        if (borrowerIndex == 0 && borrowIndex >= INITIAL_INDEX) {\\n            // Covers the case where users borrowed tokens before the market's borrow state index was set.\\n            // Rewards the user with REWARD TOKEN accrued from the start of when borrower rewards were first\\n            // set for the market.\\n            borrowerIndex = INITIAL_INDEX;\\n        }\\n\\n        // Calculate change in the cumulative sum of the REWARD TOKEN per borrowed unit accrued\\n        Double memory deltaIndex = Double({ mantissa: sub_(borrowIndex, borrowerIndex) });\\n\\n        uint256 borrowerAmount = div_(VToken(vToken).borrowBalanceStored(borrower), marketBorrowIndex);\\n\\n        // Calculate REWARD TOKEN accrued: vTokenAmount * accruedPerBorrowedUnit\\n        if (borrowerAmount != 0) {\\n            uint256 borrowerDelta = mul_(borrowerAmount, deltaIndex);\\n\\n            uint256 borrowerAccrued = add_(rewardTokenAccrued[borrower], borrowerDelta);\\n            rewardTokenAccrued[borrower] = borrowerAccrued;\\n\\n            emit DistributedBorrowerRewardToken(VToken(vToken), borrower, borrowerDelta, borrowerAccrued, borrowIndex);\\n        }\\n    }\\n\\n    /**\\n     * @notice Transfer REWARD TOKEN to the user.\\n     * @dev Note: If there is not enough REWARD TOKEN, we do not perform the transfer all.\\n     * @param user The address of the user to transfer REWARD TOKEN to\\n     * @param amount The amount of REWARD TOKEN to (possibly) transfer\\n     * @return The amount of REWARD TOKEN which was NOT transferred to the user\\n     */\\n    function _grantRewardToken(address user, uint256 amount) internal returns (uint256) {\\n        uint256 rewardTokenRemaining = rewardToken.balanceOf(address(this));\\n        if (amount > 0 && amount <= rewardTokenRemaining) {\\n            rewardToken.safeTransfer(user, amount);\\n            return 0;\\n        }\\n        return amount;\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the supply index\\n     * @param vToken The market whose supply index to update\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenSupplyIndex(address vToken) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        TimeBasedRewardToken storage supplyStateTimeBased = rewardTokenSupplyStateTimeBased[vToken];\\n\\n        uint256 supplySpeed = rewardTokenSupplySpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? supplyStateTimeBased.lastRewardingTimestamp\\n            : uint256(supplyState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? supplyStateTimeBased.timestamp : uint256(supplyState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && supplySpeed > 0) {\\n            uint256 supplyTokens = VToken(vToken).totalSupply();\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, supplySpeed);\\n            Double memory ratio = supplyTokens > 0\\n                ? fraction(accruedSinceUpdate, supplyTokens)\\n                : Double({ mantissa: 0 });\\n            uint224 supplyIndex = isTimeBased ? supplyStateTimeBased.index : supplyState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: supplyIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                supplyStateTimeBased.index = index;\\n                supplyStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                supplyState.index = index;\\n                supplyState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            isTimeBased ? supplyStateTimeBased.timestamp = blockNumberOrTimestamp : supplyState.block = uint32(\\n                blockNumberOrTimestamp\\n            );\\n        }\\n\\n        emit RewardTokenSupplyIndexUpdated(vToken);\\n    }\\n\\n    /**\\n     * @notice Accrue REWARD TOKEN to the market by updating the borrow index\\n     * @param vToken The market whose borrow index to update\\n     * @param marketBorrowIndex The current global borrow index of vToken\\n     * @dev Index is a cumulative sum of the REWARD TOKEN per vToken accrued\\n     */\\n    function _updateRewardTokenBorrowIndex(address vToken, Exp memory marketBorrowIndex) internal {\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n        TimeBasedRewardToken storage borrowStateTimeBased = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        uint256 borrowSpeed = rewardTokenBorrowSpeeds[vToken];\\n        uint256 blockNumberOrTimestamp = getBlockNumberOrTimestamp();\\n\\n        if (!isTimeBased) {\\n            safe32(blockNumberOrTimestamp, \\\"block number exceeds 32 bits\\\");\\n        }\\n\\n        uint256 lastRewardingBlockOrTimestamp = isTimeBased\\n            ? borrowStateTimeBased.lastRewardingTimestamp\\n            : uint256(borrowState.lastRewardingBlock);\\n\\n        if (lastRewardingBlockOrTimestamp > 0 && blockNumberOrTimestamp > lastRewardingBlockOrTimestamp) {\\n            blockNumberOrTimestamp = lastRewardingBlockOrTimestamp;\\n        }\\n\\n        uint256 deltaBlocksOrTimestamp = sub_(\\n            blockNumberOrTimestamp,\\n            (isTimeBased ? borrowStateTimeBased.timestamp : uint256(borrowState.block))\\n        );\\n        if (deltaBlocksOrTimestamp > 0 && borrowSpeed > 0) {\\n            uint256 borrowAmount = div_(VToken(vToken).totalBorrows(), marketBorrowIndex);\\n            uint256 accruedSinceUpdate = mul_(deltaBlocksOrTimestamp, borrowSpeed);\\n            Double memory ratio = borrowAmount > 0\\n                ? fraction(accruedSinceUpdate, borrowAmount)\\n                : Double({ mantissa: 0 });\\n            uint224 borrowIndex = isTimeBased ? borrowStateTimeBased.index : borrowState.index;\\n            uint224 index = safe224(\\n                add_(Double({ mantissa: borrowIndex }), ratio).mantissa,\\n                \\\"new index exceeds 224 bits\\\"\\n            );\\n\\n            if (isTimeBased) {\\n                borrowStateTimeBased.index = index;\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.index = index;\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        } else if (deltaBlocksOrTimestamp > 0) {\\n            if (isTimeBased) {\\n                borrowStateTimeBased.timestamp = blockNumberOrTimestamp;\\n            } else {\\n                borrowState.block = uint32(blockNumberOrTimestamp);\\n            }\\n        }\\n\\n        emit RewardTokenBorrowIndexUpdated(vToken, marketBorrowIndex);\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is block-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockNumber current block number\\n     */\\n    function _initializeMarketBlockBased(address vToken, uint32 blockNumber) internal {\\n        RewardToken storage supplyState = rewardTokenSupplyState[vToken];\\n        RewardToken storage borrowState = rewardTokenBorrowState[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block numbers\\n         */\\n        supplyState.block = borrowState.block = blockNumber;\\n    }\\n\\n    /**\\n     * @notice Initializes the market state for a specific vToken called when contract is time-based\\n     * @param vToken The address of the vToken to be initialized\\n     * @param blockTimestamp current block timestamp\\n     */\\n    function _initializeMarketTimestampBased(address vToken, uint256 blockTimestamp) internal {\\n        TimeBasedRewardToken storage supplyState = rewardTokenSupplyStateTimeBased[vToken];\\n        TimeBasedRewardToken storage borrowState = rewardTokenBorrowStateTimeBased[vToken];\\n\\n        /*\\n         * Update market state indices\\n         */\\n        if (supplyState.index == 0) {\\n            // Initialize supply state index with default value\\n            supplyState.index = INITIAL_INDEX;\\n        }\\n\\n        if (borrowState.index == 0) {\\n            // Initialize borrow state index with default value\\n            borrowState.index = INITIAL_INDEX;\\n        }\\n\\n        /*\\n         * Update market state block timestamp\\n         */\\n        supplyState.timestamp = borrowState.timestamp = blockTimestamp;\\n    }\\n}\\n\",\"keccak256\":\"0x3cc824e59c923cfe25c4f1a875959b7e9410cde8e73cd405de13f301298c697f\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributorStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport { Comptroller } from \\\"../Comptroller.sol\\\";\\n\\n/**\\n * @title RewardsDistributorStorage\\n * @author Venus\\n * @dev Storage for RewardsDistributor\\n */\\ncontract RewardsDistributorStorage {\\n    struct RewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block number the index was last updated at\\n        uint32 block;\\n        // The block number at which to stop rewards\\n        uint32 lastRewardingBlock;\\n    }\\n\\n    struct TimeBasedRewardToken {\\n        // The market's last updated rewardTokenBorrowIndex or rewardTokenSupplyIndex\\n        uint224 index;\\n        // The block timestamp the index was last updated at\\n        uint256 timestamp;\\n        // The block timestamp at which to stop rewards\\n        uint256 lastRewardingTimestamp;\\n    }\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => RewardToken) public rewardTokenSupplyState;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each supplier as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenSupplierIndex;\\n\\n    /// @notice The REWARD TOKEN accrued but not yet transferred to each user\\n    mapping(address => uint256) public rewardTokenAccrued;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding borrow market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenBorrowSpeeds;\\n\\n    /// @notice The rate at which rewardToken is distributed to the corresponding supply market per slot (block or second)\\n    mapping(address => uint256) public rewardTokenSupplySpeeds;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => RewardToken) public rewardTokenBorrowState;\\n\\n    /// @notice The portion of REWARD TOKEN that each contributor receives per slot (block or second)\\n    mapping(address => uint256) public rewardTokenContributorSpeeds;\\n\\n    /// @notice Last slot (block or second) at which a contributor's REWARD TOKEN rewards have been allocated\\n    mapping(address => uint256) public lastContributorBlock;\\n\\n    /// @notice The REWARD TOKEN borrow index for each market for each borrower as of the last time they accrued REWARD TOKEN\\n    mapping(address => mapping(address => uint256)) public rewardTokenBorrowerIndex;\\n\\n    Comptroller internal comptroller;\\n\\n    IERC20Upgradeable public rewardToken;\\n\\n    /// @notice The REWARD TOKEN market supply state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenSupplyStateTimeBased;\\n\\n    /// @notice The REWARD TOKEN market borrow state for each market\\n    mapping(address => TimeBasedRewardToken) public rewardTokenBorrowStateTimeBased;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[37] private __gap;\\n}\\n\",\"keccak256\":\"0x70e5015a78a2acf95277949c8b4796e10b9ac194130be006d5e5217e158070c0\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VToken.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Ownable2StepUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\nimport { IProtocolShareReserve } from \\\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\\\";\\n\\nimport { VTokenInterface } from \\\"./VTokenInterfaces.sol\\\";\\nimport { ComptrollerInterface, ComptrollerViewInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { TokenErrorReporter } from \\\"./ErrorReporter.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\nimport { ExponentialNoError } from \\\"./ExponentialNoError.sol\\\";\\nimport { TimeManagerV8 } from \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"./lib/validators.sol\\\";\\n\\n/**\\n * @title VToken\\n * @author Venus\\n * @notice Each asset that is supported by a pool is integrated through an instance of the `VToken` contract. As outlined in the protocol overview,\\n * each isolated pool creates its own `vToken` corresponding to an asset. Within a given pool, each included `vToken` is referred to as a market of\\n * the pool. The main actions a user regularly interacts with in a market are:\\n\\n- mint/redeem of vTokens;\\n- transfer of vTokens;\\n- borrow/repay a loan on an underlying asset;\\n- liquidate a borrow or liquidate/heal an account.\\n\\n * A user supplies the underlying asset to a pool by minting `vTokens`, where the corresponding `vToken` amount is determined by the `exchangeRate`.\\n * The `exchangeRate` will change over time, dependent on a number of factors, some of which accrue interest. Additionally, once users have minted\\n * `vToken` in a pool, they can borrow any asset in the isolated pool by using their `vToken` as collateral. In order to borrow an asset or use a `vToken`\\n * as collateral, the user must be entered into each corresponding market (else, the `vToken` will not be considered collateral for a borrow). Note that\\n * a user may borrow up to a portion of their collateral determined by the market\\u2019s collateral factor. However, if their borrowed amount exceeds an amount\\n * calculated using the market\\u2019s corresponding liquidation threshold, the borrow is eligible for liquidation. When a user repays a borrow, they must also\\n * pay off interest accrued on the borrow.\\n * \\n * The Venus protocol includes unique mechanisms for healing an account and liquidating an account. These actions are performed in the `Comptroller`\\n * and consider all borrows and collateral for which a given account is entered within a market. These functions may only be called on an account with a\\n * total collateral amount that is no larger than a universal `minLiquidatableCollateral` value, which is used for all markets within a `Comptroller`.\\n * Both functions settle all of an account\\u2019s borrows, but `healAccount()` may add `badDebt` to a vToken. For more detail, see the description of\\n * `healAccount()` and `liquidateAccount()` in the `Comptroller` summary section below.\\n */\\ncontract VToken is\\n    Ownable2StepUpgradeable,\\n    AccessControlledV8,\\n    VTokenInterface,\\n    ExponentialNoError,\\n    TokenErrorReporter,\\n    TimeManagerV8\\n{\\n    using SafeERC20Upgradeable for IERC20Upgradeable;\\n\\n    uint256 internal constant DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA = 5e16; // 5%\\n\\n    // Maximum fraction of interest that can be set aside for reserves\\n    uint256 internal constant MAX_RESERVE_FACTOR_MANTISSA = 1e18;\\n\\n    // Maximum borrow rate that can ever be applied per slot(block or second)\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 internal immutable MAX_BORROW_RATE_MANTISSA;\\n\\n    /**\\n     * Reentrancy Guard **\\n     */\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     */\\n    modifier nonReentrant() {\\n        require(_notEntered, \\\"re-entered\\\");\\n        _notEntered = false;\\n        _;\\n        _notEntered = true; // get a gas-refund post-Istanbul\\n    }\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block.\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @param maxBorrowRateMantissa_ The maximum value of borrowing rate mantissa\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(\\n        bool timeBased_,\\n        uint256 blocksPerYear_,\\n        uint256 maxBorrowRateMantissa_\\n    ) TimeManagerV8(timeBased_, blocksPerYear_) {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        require(maxBorrowRateMantissa_ <= 1e18, \\\"Max borrow rate must be <= 1e18\\\");\\n\\n        MAX_BORROW_RATE_MANTISSA = maxBorrowRateMantissa_;\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @notice Construct a new money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     * @custom:error ZeroAddressNotAllowed is thrown when admin address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     */\\n    function initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) external initializer {\\n        ensureNonzeroAddress(admin_);\\n\\n        // Initialize the market\\n        _initialize(\\n            underlying_,\\n            comptroller_,\\n            interestRateModel_,\\n            initialExchangeRateMantissa_,\\n            name_,\\n            symbol_,\\n            decimals_,\\n            admin_,\\n            accessControlManager_,\\n            riskManagement,\\n            reserveFactorMantissa_\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `msg.sender` to `dst`\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transfer(address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Transfer `amount` tokens from `src` to `dst`\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param amount The number of tokens to transfer\\n     * @return success True if the transfer succeeded, reverts otherwise\\n     * @custom:event Emits Transfer event on success\\n     * @custom:error TransferNotAllowed is thrown if trying to transfer to self\\n     * @custom:access Not restricted\\n     */\\n    function transferFrom(address src, address dst, uint256 amount) external override nonReentrant returns (bool) {\\n        _transferTokens(msg.sender, src, dst, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Approve `spender` to transfer up to `amount` from `src`\\n     * @dev This will overwrite the approval amount for `spender`\\n     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\\n     * @param spender The address of the account which may transfer tokens\\n     * @param amount The number of tokens that are approved (uint256.max means infinite)\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function approve(address spender, uint256 amount) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        transferAllowances[src][spender] = amount;\\n        emit Approval(src, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Increase approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param addedValue The number of additional tokens spender can transfer\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 newAllowance = transferAllowances[src][spender];\\n        newAllowance += addedValue;\\n        transferAllowances[src][spender] = newAllowance;\\n\\n        emit Approval(src, spender, newAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Decreases approval for `spender`\\n     * @param spender The address of the account which may transfer tokens\\n     * @param subtractedValue The number of tokens to remove from total approval\\n     * @return success Whether or not the approval succeeded\\n     * @custom:event Emits Approval event\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when spender address is zero\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external override returns (bool) {\\n        ensureNonzeroAddress(spender);\\n\\n        address src = msg.sender;\\n        uint256 currentAllowance = transferAllowances[src][spender];\\n        require(currentAllowance >= subtractedValue, \\\"decreased allowance below zero\\\");\\n        unchecked {\\n            currentAllowance -= subtractedValue;\\n        }\\n\\n        transferAllowances[src][spender] = currentAllowance;\\n\\n        emit Approval(src, spender, currentAllowance);\\n        return true;\\n    }\\n\\n    /**\\n     * @notice Get the underlying balance of the `owner`\\n     * @dev This also accrues interest in a transaction\\n     * @param owner The address of the account to query\\n     * @return amount The amount of underlying owned by `owner`\\n     */\\n    function balanceOfUnderlying(address owner) external override returns (uint256) {\\n        Exp memory exchangeRate = Exp({ mantissa: exchangeRateCurrent() });\\n        return mul_ScalarTruncate(exchangeRate, accountTokens[owner]);\\n    }\\n\\n    /**\\n     * @notice Returns the current total borrows plus accrued interest\\n     * @return totalBorrows The total borrows with interest\\n     */\\n    function totalBorrowsCurrent() external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return totalBorrows;\\n    }\\n\\n    /**\\n     * @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\\n     * @param account The address whose balance should be calculated after updating borrowIndex\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceCurrent(address account) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Sender supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function mint(uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, msg.sender, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender calls on-behalf of minter. minter supplies assets into the market and receives vTokens in exchange\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param minter User whom the supply will be attributed to\\n     * @param mintAmount The amount of the underlying asset to supply\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Mint and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     * @custom:error ZeroAddressNotAllowed is thrown when minter address is zero\\n     */\\n    function mintBehalf(address minter, uint256 mintAmount) external override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(minter);\\n\\n        accrueInterest();\\n\\n        _mintFresh(msg.sender, minter, mintAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for the underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function redeem(uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer The user on behalf of whom to redeem\\n     * @param redeemTokens The number of vTokens to redeem into underlying\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:error RedeemTransferOutNotPossible is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, redeemTokens, 0);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems vTokens in exchange for a specified amount of underlying asset\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     */\\n    function redeemUnderlying(uint256 redeemAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _redeemFresh(msg.sender, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender redeems underlying assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the supplier using `comptroller.updateDelegate`\\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\\n     * @param redeemer, on behalf of whom to redeem\\n     * @param redeemAmount The amount of underlying to receive from redeeming vTokens\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error InsufficientRedeemApproval is thrown when sender is not approved by the redeemer for the given amount\\n     * @custom:event Emits Redeem and Transfer events; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function redeemUnderlyingBehalf(\\n        address redeemer,\\n        uint256 redeemAmount\\n    ) external override nonReentrant returns (uint256) {\\n        _ensureSenderIsDelegateOf(redeemer);\\n\\n        accrueInterest();\\n\\n        _redeemFresh(redeemer, msg.sender, 0, redeemAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets from the protocol to their own address\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:access Not restricted\\n     */\\n    function borrow(uint256 borrowAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _borrowFresh(msg.sender, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender borrows assets on behalf of some other address. This function is only available\\n     *   for senders, explicitly marked as delegates of the borrower using `comptroller.updateDelegate`\\n     * @param borrower The borrower, on behalf of whom to borrow\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:error DelegateNotApproved is thrown if caller is not approved delegate\\n     * @custom:error BorrowCashNotAvailable is thrown when the protocol has insufficient cash\\n     * @custom:event Emits Borrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function borrowBehalf(address borrower, uint256 borrowAmount) external override returns (uint256) {\\n        _ensureSenderIsDelegateOf(borrower);\\n        accrueInterest();\\n\\n        _borrowFresh(borrower, msg.sender, borrowAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays their own borrow\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrow(uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, msg.sender, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice Sender repays a borrow belonging to borrower\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount The amount to repay, or type(uint256).max for the full outstanding amount\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits RepayBorrow event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external override nonReentrant returns (uint256) {\\n        accrueInterest();\\n\\n        _repayBorrowFresh(msg.sender, borrower, repayAmount);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Not restricted\\n     */\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external override returns (uint256) {\\n        _liquidateBorrow(msg.sender, borrower, repayAmount, vTokenCollateral, false);\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice sets protocol share accumulated from liquidations\\n     * @dev must be equal or less than liquidation incentive - 1\\n     * @param newProtocolSeizeShareMantissa_ new protocol share mantissa\\n     * @custom:event Emits NewProtocolSeizeShare event on success\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error ProtocolSeizeShareTooBig is thrown when the new seize share is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setProtocolSeizeShare(uint256 newProtocolSeizeShareMantissa_) external {\\n        _checkAccessAllowed(\\\"setProtocolSeizeShare(uint256)\\\");\\n        uint256 liquidationIncentive = ComptrollerViewInterface(address(comptroller)).liquidationIncentiveMantissa();\\n        if (newProtocolSeizeShareMantissa_ + MANTISSA_ONE > liquidationIncentive) {\\n            revert ProtocolSeizeShareTooBig();\\n        }\\n\\n        uint256 oldProtocolSeizeShareMantissa = protocolSeizeShareMantissa;\\n        protocolSeizeShareMantissa = newProtocolSeizeShareMantissa_;\\n        emit NewProtocolSeizeShare(oldProtocolSeizeShareMantissa, newProtocolSeizeShareMantissa_);\\n    }\\n\\n    /**\\n     * @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\\n     * @dev Admin function to accrue interest and set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     * @custom:event Emits NewReserveFactor event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:error SetReserveFactorBoundsCheck is thrown when the new reserve factor is too high\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external override nonReentrant {\\n        _checkAccessAllowed(\\\"setReserveFactor(uint256)\\\");\\n\\n        accrueInterest();\\n        _setReserveFactorFresh(newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Accrues interest and reduces reserves by transferring to the protocol reserve contract\\n     * @dev Gracefully return if reserves already reduced in accrueInterest\\n     * @param reduceAmount Amount of reduction to reserves\\n     * @custom:event Emits ReservesReduced event; may emit AccrueInterest\\n     * @custom:error ReduceReservesCashNotAvailable is thrown when the vToken does not have sufficient cash\\n     * @custom:error ReduceReservesCashValidation is thrown when trying to withdraw more cash than the reserves have\\n     * @custom:access Not restricted\\n     */\\n    function reduceReserves(uint256 reduceAmount) external override nonReentrant {\\n        accrueInterest();\\n        if (reduceReservesBlockNumber == getBlockNumberOrTimestamp()) return;\\n        _reduceReservesFresh(reduceAmount);\\n    }\\n\\n    /**\\n     * @notice The sender adds to reserves.\\n     * @param addAmount The amount of underlying token to add as reserves\\n     * @custom:event Emits ReservesAdded event; may emit AccrueInterest\\n     * @custom:access Not restricted\\n     */\\n    function addReserves(uint256 addAmount) external override nonReentrant {\\n        accrueInterest();\\n        _addReservesFresh(addAmount);\\n    }\\n\\n    /**\\n     * @notice accrues interest and updates the interest rate model using _setInterestRateModelFresh\\n     * @dev Admin function to accrue interest and update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     * @custom:event Emits NewMarketInterestRateModel event; may emit AccrueInterest\\n     * @custom:error Unauthorized error is thrown when the call is not authorized by AccessControlManager\\n     * @custom:access Controlled by AccessControlManager\\n     */\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external override {\\n        _checkAccessAllowed(\\\"setInterestRateModel(address)\\\");\\n\\n        accrueInterest();\\n        _setInterestRateModelFresh(newInterestRateModel);\\n    }\\n\\n    /**\\n     * @notice Repays a certain amount of debt, treats the rest of the borrow as bad debt, essentially\\n     *   \\\"forgiving\\\" the borrower. Healing is a situation that should rarely happen. However, some pools\\n     *   may list risky assets or be configured improperly \\u2013 we want to still handle such cases gracefully.\\n     *   We assume that Comptroller does the seizing, so this function is only available to Comptroller.\\n     * @dev This function does not call any Comptroller hooks (like \\\"healAllowed\\\"), because we assume\\n     *   the Comptroller does all the necessary checks before calling this function.\\n     * @param payer account who repays the debt\\n     * @param borrower account to heal\\n     * @param repayAmount amount to repay\\n     * @custom:event Emits RepayBorrow, BadDebtIncreased events; may emit AccrueInterest\\n     * @custom:error HealBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:access Only Comptroller\\n     */\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external override nonReentrant {\\n        if (repayAmount != 0) {\\n            comptroller.preRepayHook(address(this), borrower);\\n        }\\n\\n        if (msg.sender != address(comptroller)) {\\n            revert HealBorrowUnauthorized();\\n        }\\n\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 totalBorrowsNew = totalBorrows;\\n\\n        uint256 actualRepayAmount;\\n        if (repayAmount != 0) {\\n            // _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n            // We violate checks-effects-interactions here to account for tokens that take transfer fees\\n            actualRepayAmount = _doTransferIn(payer, repayAmount);\\n            totalBorrowsNew = totalBorrowsNew - actualRepayAmount;\\n            emit RepayBorrow(\\n                payer,\\n                borrower,\\n                actualRepayAmount,\\n                accountBorrowsPrev - actualRepayAmount,\\n                totalBorrowsNew\\n            );\\n        }\\n\\n        // The transaction will fail if trying to repay too much\\n        uint256 badDebtDelta = accountBorrowsPrev - actualRepayAmount;\\n        if (badDebtDelta != 0) {\\n            uint256 badDebtOld = badDebt;\\n            uint256 badDebtNew = badDebtOld + badDebtDelta;\\n            totalBorrowsNew = totalBorrowsNew - badDebtDelta;\\n            badDebt = badDebtNew;\\n\\n            // We treat healing as \\\"repayment\\\", where vToken is the payer\\n            emit RepayBorrow(address(this), borrower, badDebtDelta, 0, totalBorrowsNew);\\n            emit BadDebtIncreased(borrower, badDebtDelta, badDebtOld, badDebtNew);\\n        }\\n\\n        accountBorrows[borrower].principal = 0;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        emit HealBorrow(payer, borrower, repayAmount);\\n    }\\n\\n    /**\\n     * @notice The extended version of liquidations, callable only by Comptroller. May skip\\n     *  the close factor check. The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     * @custom:event Emits LiquidateBorrow event; may emit AccrueInterest\\n     * @custom:error ForceLiquidateBorrowUnauthorized is thrown when the request does not come from Comptroller\\n     * @custom:error LiquidateAccrueCollateralInterestFailed is thrown when it is not possible to accrue interest on the collateral vToken\\n     * @custom:error LiquidateCollateralFreshnessCheck is thrown when interest has not been accrued on the collateral vToken\\n     * @custom:error LiquidateLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:error LiquidateCloseAmountIsZero is thrown when repayment amount is zero\\n     * @custom:error LiquidateCloseAmountIsUintMax is thrown when repayment amount is UINT_MAX\\n     * @custom:access Only Comptroller\\n     */\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) external override {\\n        if (msg.sender != address(comptroller)) {\\n            revert ForceLiquidateBorrowUnauthorized();\\n        }\\n        _liquidateBorrow(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Will fail unless called by another vToken during the process of liquidation.\\n     *  It's absolutely critical to use msg.sender as the borrowed vToken and not a parameter.\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     * @custom:event Emits Transfer, ReservesAdded events\\n     * @custom:error LiquidateSeizeLiquidatorIsBorrower is thrown when trying to liquidate self\\n     * @custom:access Not restricted\\n     */\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external override nonReentrant {\\n        _seize(msg.sender, liquidator, borrower, seizeTokens);\\n    }\\n\\n    /**\\n     * @notice Updates bad debt\\n     * @dev Called only when bad debt is recovered from auction\\n     * @param recoveredAmount_ The amount of bad debt recovered\\n     * @custom:event Emits BadDebtRecovered event\\n     * @custom:access Only Shortfall contract\\n     */\\n    function badDebtRecovered(uint256 recoveredAmount_) external {\\n        require(msg.sender == shortfall, \\\"only shortfall contract can update bad debt\\\");\\n        require(recoveredAmount_ <= badDebt, \\\"more than bad debt recovered from auction\\\");\\n\\n        uint256 badDebtOld = badDebt;\\n        uint256 badDebtNew = badDebtOld - recoveredAmount_;\\n        badDebt = badDebtNew;\\n\\n        emit BadDebtRecovered(badDebtOld, badDebtNew);\\n    }\\n\\n    /**\\n     * @notice Sets protocol share reserve contract address\\n     * @param protocolShareReserve_ The address of the protocol share reserve contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when protocol share reserve address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setProtocolShareReserve(address payable protocolShareReserve_) external onlyOwner {\\n        _setProtocolShareReserve(protocolShareReserve_);\\n    }\\n\\n    /**\\n     * @notice Sets shortfall contract address\\n     * @param shortfall_ The address of the shortfall contract\\n     * @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero\\n     * @custom:access Only Governance\\n     */\\n    function setShortfallContract(address shortfall_) external onlyOwner {\\n        _setShortfallContract(shortfall_);\\n    }\\n\\n    /**\\n     * @notice A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)\\n     * @param token The address of the ERC-20 token to sweep\\n     * @custom:access Only Governance\\n     */\\n    function sweepToken(IERC20Upgradeable token) external override {\\n        require(msg.sender == owner(), \\\"VToken::sweepToken: only admin can sweep tokens\\\");\\n        require(address(token) != underlying, \\\"VToken::sweepToken: can not sweep underlying token\\\");\\n        uint256 balance = token.balanceOf(address(this));\\n        token.safeTransfer(owner(), balance);\\n\\n        emit SweepToken(address(token));\\n    }\\n\\n    /**\\n     * @notice A public function to set new threshold of slot(block or second) difference after which funds will be sent to the protocol share reserve\\n     * @param _newReduceReservesBlockOrTimestampDelta slot(block or second) difference value\\n     * @custom:access Only Governance\\n     */\\n    function setReduceReservesBlockDelta(uint256 _newReduceReservesBlockOrTimestampDelta) external {\\n        _checkAccessAllowed(\\\"setReduceReservesBlockDelta(uint256)\\\");\\n        require(_newReduceReservesBlockOrTimestampDelta > 0, \\\"Invalid Input\\\");\\n        emit NewReduceReservesBlockDelta(reduceReservesBlockDelta, _newReduceReservesBlockOrTimestampDelta);\\n        reduceReservesBlockDelta = _newReduceReservesBlockOrTimestampDelta;\\n    }\\n\\n    /**\\n     * @notice Get the current allowance from `owner` for `spender`\\n     * @param owner The address of the account which owns the tokens to be spent\\n     * @param spender The address of the account which may transfer tokens\\n     * @return amount The number of tokens allowed to be spent (type(uint256).max means infinite)\\n     */\\n    function allowance(address owner, address spender) external view override returns (uint256) {\\n        return transferAllowances[owner][spender];\\n    }\\n\\n    /**\\n     * @notice Get the token balance of the `owner`\\n     * @param owner The address of the account to query\\n     * @return amount The number of tokens owned by `owner`\\n     */\\n    function balanceOf(address owner) external view override returns (uint256) {\\n        return accountTokens[owner];\\n    }\\n\\n    /**\\n     * @notice Get a snapshot of the account's balances, and the cached exchange rate\\n     * @dev This is used by comptroller to more efficiently perform liquidity checks.\\n     * @param account Address of the account to snapshot\\n     * @return error Always NO_ERROR for compatibility with Venus core tooling\\n     * @return vTokenBalance User's balance of vTokens\\n     * @return borrowBalance Amount owed in terms of underlying\\n     * @return exchangeRate Stored exchange rate\\n     */\\n    function getAccountSnapshot(\\n        address account\\n    )\\n        external\\n        view\\n        override\\n        returns (uint256 error, uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRate)\\n    {\\n        return (NO_ERROR, accountTokens[account], _borrowBalanceStored(account), _exchangeRateStored());\\n    }\\n\\n    /**\\n     * @notice Get cash balance of this vToken in the underlying asset\\n     * @return cash The quantity of underlying asset owned by this contract\\n     */\\n    function getCash() external view override returns (uint256) {\\n        return _getCashPrior();\\n    }\\n\\n    /**\\n     * @notice Returns the current per slot(block or second) borrow interest rate for this vToken\\n     * @return rate The borrow interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function borrowRatePerBlock() external view override returns (uint256) {\\n        return interestRateModel.getBorrowRate(_getCashPrior(), totalBorrows, totalReserves, badDebt);\\n    }\\n\\n    /**\\n     * @notice Returns the current per-slot(block or second) supply interest rate for this v\\n     * @return rate The supply interest rate per slot(block or second), scaled by 1e18\\n     */\\n    function supplyRatePerBlock() external view override returns (uint256) {\\n        return\\n            interestRateModel.getSupplyRate(\\n                _getCashPrior(),\\n                totalBorrows,\\n                totalReserves,\\n                reserveFactorMantissa,\\n                badDebt\\n            );\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance The calculated balance\\n     */\\n    function borrowBalanceStored(address account) external view override returns (uint256) {\\n        return _borrowBalanceStored(account);\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateStored() external view override returns (uint256) {\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Accrue interest then return the up-to-date exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function exchangeRateCurrent() public override nonReentrant returns (uint256) {\\n        accrueInterest();\\n        return _exchangeRateStored();\\n    }\\n\\n    /**\\n     * @notice Applies accrued interest to total borrows and reserves\\n     * @dev This calculates interest accrued from the last checkpointed slot(block or second)\\n     *  up to the current slot(block or second) and writes new checkpoint to storage and\\n     *  reduce spread reserves to protocol share reserve\\n     *  if currentSlot - reduceReservesBlockNumber >= slotDelta\\n     * @return Always NO_ERROR\\n     * @custom:event Emits AccrueInterest event on success\\n     * @custom:access Not restricted\\n     */\\n    function accrueInterest() public virtual override returns (uint256) {\\n        /* Remember the initial block number or timestamp */\\n        uint256 currentSlotNumber = getBlockNumberOrTimestamp();\\n        uint256 accrualSlotNumberPrior = accrualBlockNumber;\\n\\n        /* Short-circuit accumulating 0 interest */\\n        if (accrualSlotNumberPrior == currentSlotNumber) {\\n            return NO_ERROR;\\n        }\\n\\n        /* Read the previous values out of storage */\\n        uint256 cashPrior = _getCashPrior();\\n        uint256 borrowsPrior = totalBorrows;\\n        uint256 reservesPrior = totalReserves;\\n        uint256 borrowIndexPrior = borrowIndex;\\n\\n        /* Calculate the current borrow interest rate */\\n        uint256 borrowRateMantissa = interestRateModel.getBorrowRate(cashPrior, borrowsPrior, reservesPrior, badDebt);\\n        require(borrowRateMantissa <= MAX_BORROW_RATE_MANTISSA, \\\"borrow rate is absurdly high\\\");\\n\\n        /* Calculate the number of slots elapsed since the last accrual */\\n        uint256 slotDelta = currentSlotNumber - accrualSlotNumberPrior;\\n\\n        /*\\n         * Calculate the interest accumulated into borrows and reserves and the new index:\\n         *  simpleInterestFactor = borrowRate * slotDelta\\n         *  interestAccumulated = simpleInterestFactor * totalBorrows\\n         *  totalBorrowsNew = interestAccumulated + totalBorrows\\n         *  totalReservesNew = interestAccumulated * reserveFactor + totalReserves\\n         *  borrowIndexNew = simpleInterestFactor * borrowIndex + borrowIndex\\n         */\\n\\n        Exp memory simpleInterestFactor = mul_(Exp({ mantissa: borrowRateMantissa }), slotDelta);\\n        uint256 interestAccumulated = mul_ScalarTruncate(simpleInterestFactor, borrowsPrior);\\n        uint256 totalBorrowsNew = interestAccumulated + borrowsPrior;\\n        uint256 totalReservesNew = mul_ScalarTruncateAddUInt(\\n            Exp({ mantissa: reserveFactorMantissa }),\\n            interestAccumulated,\\n            reservesPrior\\n        );\\n        uint256 borrowIndexNew = mul_ScalarTruncateAddUInt(simpleInterestFactor, borrowIndexPrior, borrowIndexPrior);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the previously calculated values into storage */\\n        accrualBlockNumber = currentSlotNumber;\\n        borrowIndex = borrowIndexNew;\\n        totalBorrows = totalBorrowsNew;\\n        totalReserves = totalReservesNew;\\n\\n        if (currentSlotNumber - reduceReservesBlockNumber >= reduceReservesBlockDelta) {\\n            reduceReservesBlockNumber = currentSlotNumber;\\n            if (cashPrior < totalReservesNew) {\\n                _reduceReservesFresh(cashPrior);\\n            } else {\\n                _reduceReservesFresh(totalReservesNew);\\n            }\\n        }\\n\\n        /* We emit an AccrueInterest event */\\n        emit AccrueInterest(cashPrior, interestAccumulated, borrowIndexNew, totalBorrowsNew);\\n\\n        return NO_ERROR;\\n    }\\n\\n    /**\\n     * @notice User supplies assets into the market and receives vTokens in exchange\\n     * @dev Assumes interest has already been accrued up to the current block or timestamp\\n     * @param payer The address of the account which is sending the assets for supply\\n     * @param minter The address of the account which is supplying the assets\\n     * @param mintAmount The amount of the underlying asset to supply\\n     */\\n    function _mintFresh(address payer, address minter, uint256 mintAmount) internal {\\n        /* Fail if mint not allowed */\\n        comptroller.preMintHook(address(this), minter, mintAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert MintFreshnessCheck();\\n        }\\n\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         *  We call `_doTransferIn` for the minter and the mintAmount.\\n         *  `_doTransferIn` reverts if anything goes wrong, since we can't be sure if\\n         *  side-effects occurred. The function returns the amount actually transferred,\\n         *  in case of a fee. On success, the vToken holds an additional `actualMintAmount`\\n         *  of cash.\\n         */\\n        uint256 actualMintAmount = _doTransferIn(payer, mintAmount);\\n\\n        /*\\n         * We get the current exchange rate and calculate the number of vTokens to be minted:\\n         *  mintTokens = actualMintAmount / exchangeRate\\n         */\\n\\n        uint256 mintTokens = div_(actualMintAmount, exchangeRate);\\n\\n        /*\\n         * We calculate the new total supply of vTokens and minter token balance, checking for overflow:\\n         *  totalSupplyNew = totalSupply + mintTokens\\n         *  accountTokensNew = accountTokens[minter] + mintTokens\\n         * And write them into storage\\n         */\\n        totalSupply = totalSupply + mintTokens;\\n        uint256 balanceAfter = accountTokens[minter] + mintTokens;\\n        accountTokens[minter] = balanceAfter;\\n\\n        /* We emit a Mint event, and a Transfer event */\\n        emit Mint(minter, actualMintAmount, mintTokens, balanceAfter);\\n        emit Transfer(address(0), minter, mintTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.mintVerify(address(this), minter, actualMintAmount, mintTokens);\\n    }\\n\\n    /**\\n     * @notice Redeemer redeems vTokens in exchange for the underlying assets, transferred to the receiver. Redeemer and receiver can be the same\\n     *   address, or different addresses if the receiver was previously approved by the redeemer as a valid delegate (see Comptroller.updateDelegate)\\n     * @dev Assumes interest has already been accrued up to the current slot(block or second)\\n     * @param redeemer The address of the account which is redeeming the tokens\\n     * @param receiver The receiver of the underlying tokens\\n     * @param redeemTokensIn The number of vTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     * @param redeemAmountIn The number of underlying tokens to receive from redeeming vTokens (only one of redeemTokensIn or redeemAmountIn may be non-zero)\\n     */\\n    function _redeemFresh(address redeemer, address receiver, uint256 redeemTokensIn, uint256 redeemAmountIn) internal {\\n        require(redeemTokensIn == 0 || redeemAmountIn == 0, \\\"one of redeemTokensIn or redeemAmountIn must be zero\\\");\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RedeemFreshnessCheck();\\n        }\\n\\n        /* exchangeRate = invoke Exchange Rate Stored() */\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n\\n        uint256 redeemTokens;\\n        uint256 redeemAmount;\\n\\n        /* If redeemTokensIn > 0: */\\n        if (redeemTokensIn > 0) {\\n            /*\\n             * We calculate the exchange rate and the amount of underlying to be redeemed:\\n             *  redeemTokens = redeemTokensIn\\n             */\\n            redeemTokens = redeemTokensIn;\\n        } else {\\n            /*\\n             * We get the current exchange rate and calculate the amount to be redeemed:\\n             *  redeemTokens = redeemAmountIn / exchangeRate\\n             */\\n            redeemTokens = div_(redeemAmountIn, exchangeRate);\\n\\n            uint256 _redeemAmount = mul_(redeemTokens, exchangeRate);\\n            if (_redeemAmount != 0 && _redeemAmount != redeemAmountIn) redeemTokens++; // round up\\n        }\\n\\n        // redeemAmount = exchangeRate * redeemTokens\\n        redeemAmount = mul_ScalarTruncate(exchangeRate, redeemTokens);\\n\\n        // Revert if amount is zero\\n        if (redeemAmount == 0) {\\n            revert(\\\"redeemAmount is zero\\\");\\n        }\\n\\n        /* Fail if redeem not allowed */\\n        comptroller.preRedeemHook(address(this), redeemer, redeemTokens);\\n\\n        /* Fail gracefully if protocol has insufficient cash */\\n        if (_getCashPrior() - totalReserves < redeemAmount) {\\n            revert RedeemTransferOutNotPossible();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing reduced supply before external transfer.\\n         */\\n        totalSupply = totalSupply - redeemTokens;\\n        uint256 balanceAfter = accountTokens[redeemer] - redeemTokens;\\n        accountTokens[redeemer] = balanceAfter;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the redeemAmount.\\n         *  On success, the vToken has redeemAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, redeemAmount);\\n\\n        /* We emit a Transfer event, and a Redeem event */\\n        emit Transfer(redeemer, address(this), redeemTokens);\\n        emit Redeem(redeemer, redeemAmount, redeemTokens, balanceAfter);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.redeemVerify(address(this), redeemer, redeemAmount, redeemTokens);\\n    }\\n\\n    /**\\n     * @notice Users or their delegates borrow assets from the protocol\\n     * @param borrower User who borrows the assets\\n     * @param receiver The receiver of the tokens, if called by a delegate\\n     * @param borrowAmount The amount of the underlying asset to borrow\\n     */\\n    function _borrowFresh(address borrower, address receiver, uint256 borrowAmount) internal {\\n        /* Fail if borrow not allowed */\\n        comptroller.preBorrowHook(address(this), borrower, borrowAmount);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert BorrowFreshnessCheck();\\n        }\\n\\n        /* Fail gracefully if protocol has insufficient underlying cash */\\n        if (_getCashPrior() - totalReserves < borrowAmount) {\\n            revert BorrowCashNotAvailable();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on overflow:\\n         *  accountBorrowNew = accountBorrow + borrowAmount\\n         *  totalBorrowsNew = totalBorrows + borrowAmount\\n         */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n        uint256 accountBorrowsNew = accountBorrowsPrev + borrowAmount;\\n        uint256 totalBorrowsNew = totalBorrows + borrowAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We write the previously calculated values into storage.\\n         *  Note: Avoid token reentrancy attacks by writing increased borrow before external transfer.\\n        `*/\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /*\\n         * We invoke _doTransferOut for the receiver and the borrowAmount.\\n         *  On success, the vToken borrowAmount less of cash.\\n         *  _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         */\\n        _doTransferOut(receiver, borrowAmount);\\n\\n        /* We emit a Borrow event */\\n        emit Borrow(borrower, borrowAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.borrowVerify(address(this), borrower, borrowAmount);\\n    }\\n\\n    /**\\n     * @notice Borrows are repaid by another user (possibly the borrower).\\n     * @param payer the account paying off the borrow\\n     * @param borrower the account with the debt being payed off\\n     * @param repayAmount the amount of underlying tokens being returned, or type(uint256).max for the full outstanding amount\\n     * @return (uint) the actual repayment amount.\\n     */\\n    function _repayBorrowFresh(address payer, address borrower, uint256 repayAmount) internal returns (uint256) {\\n        /* Fail if repayBorrow not allowed */\\n        comptroller.preRepayHook(address(this), borrower);\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert RepayBorrowFreshnessCheck();\\n        }\\n\\n        /* We fetch the amount the borrower owes, with accumulated interest */\\n        uint256 accountBorrowsPrev = _borrowBalanceStored(borrower);\\n\\n        uint256 repayAmountFinal = repayAmount >= accountBorrowsPrev ? accountBorrowsPrev : repayAmount;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /*\\n         * We call _doTransferIn for the payer and the repayAmount\\n         *  On success, the vToken holds an additional repayAmount of cash.\\n         *  _doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n         *   it returns the amount actually transferred, in case of a fee.\\n         */\\n        uint256 actualRepayAmount = _doTransferIn(payer, repayAmountFinal);\\n\\n        /*\\n         * We calculate the new borrower and total borrow balances, failing on underflow:\\n         *  accountBorrowsNew = accountBorrows - actualRepayAmount\\n         *  totalBorrowsNew = totalBorrows - actualRepayAmount\\n         */\\n        uint256 accountBorrowsNew = accountBorrowsPrev - actualRepayAmount;\\n        uint256 totalBorrowsNew = totalBorrows - actualRepayAmount;\\n\\n        /* We write the previously calculated values into storage */\\n        accountBorrows[borrower].principal = accountBorrowsNew;\\n        accountBorrows[borrower].interestIndex = borrowIndex;\\n        totalBorrows = totalBorrowsNew;\\n\\n        /* We emit a RepayBorrow event */\\n        emit RepayBorrow(payer, borrower, actualRepayAmount, accountBorrowsNew, totalBorrowsNew);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.repayBorrowVerify(address(this), payer, borrower, actualRepayAmount, borrowIndex);\\n\\n        return actualRepayAmount;\\n    }\\n\\n    /**\\n     * @notice The sender liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal nonReentrant {\\n        accrueInterest();\\n\\n        uint256 error = vTokenCollateral.accrueInterest();\\n        if (error != NO_ERROR) {\\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted liquidation failed\\n            revert LiquidateAccrueCollateralInterestFailed(error);\\n        }\\n\\n        _liquidateBorrowFresh(liquidator, borrower, repayAmount, vTokenCollateral, skipLiquidityCheck);\\n    }\\n\\n    /**\\n     * @notice The liquidator liquidates the borrowers collateral.\\n     *  The collateral seized is transferred to the liquidator.\\n     * @param liquidator The address repaying the borrow and seizing collateral\\n     * @param borrower The borrower of this vToken to be liquidated\\n     * @param vTokenCollateral The market in which to seize collateral from the borrower\\n     * @param repayAmount The amount of the underlying borrowed asset to repay\\n     * @param skipLiquidityCheck If set to true, allows to liquidate up to 100% of the borrow\\n     *   regardless of the account liquidity\\n     */\\n    function _liquidateBorrowFresh(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipLiquidityCheck\\n    ) internal {\\n        /* Fail if liquidate not allowed */\\n        comptroller.preLiquidateHook(\\n            address(this),\\n            address(vTokenCollateral),\\n            borrower,\\n            repayAmount,\\n            skipLiquidityCheck\\n        );\\n\\n        /* Verify market's slot(block or second) number equals current slot(block or second) number */\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert LiquidateFreshnessCheck();\\n        }\\n\\n        /* Verify vTokenCollateral market's slot(block or second) number equals current slot(block or second) number */\\n        if (vTokenCollateral.accrualBlockNumber() != getBlockNumberOrTimestamp()) {\\n            revert LiquidateCollateralFreshnessCheck();\\n        }\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateLiquidatorIsBorrower();\\n        }\\n\\n        /* Fail if repayAmount = 0 */\\n        if (repayAmount == 0) {\\n            revert LiquidateCloseAmountIsZero();\\n        }\\n\\n        /* Fail if repayAmount = type(uint256).max */\\n        if (repayAmount == type(uint256).max) {\\n            revert LiquidateCloseAmountIsUintMax();\\n        }\\n\\n        /* Fail if repayBorrow fails */\\n        uint256 actualRepayAmount = _repayBorrowFresh(liquidator, borrower, repayAmount);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We calculate the number of collateral tokens that will be seized */\\n        (uint256 amountSeizeError, uint256 seizeTokens) = comptroller.liquidateCalculateSeizeTokens(\\n            address(this),\\n            address(vTokenCollateral),\\n            actualRepayAmount\\n        );\\n        require(amountSeizeError == NO_ERROR, \\\"LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED\\\");\\n\\n        /* Revert if borrower collateral token balance < seizeTokens */\\n        require(vTokenCollateral.balanceOf(borrower) >= seizeTokens, \\\"LIQUIDATE_SEIZE_TOO_MUCH\\\");\\n\\n        // If this is also the collateral, call _seize internally to avoid re-entrancy, otherwise make an external call\\n        if (address(vTokenCollateral) == address(this)) {\\n            _seize(address(this), liquidator, borrower, seizeTokens);\\n        } else {\\n            vTokenCollateral.seize(liquidator, borrower, seizeTokens);\\n        }\\n\\n        /* We emit a LiquidateBorrow event */\\n        emit LiquidateBorrow(liquidator, borrower, actualRepayAmount, address(vTokenCollateral), seizeTokens);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.liquidateBorrowVerify(\\n            address(this),\\n            address(vTokenCollateral),\\n            liquidator,\\n            borrower,\\n            actualRepayAmount,\\n            seizeTokens\\n        );\\n    }\\n\\n    /**\\n     * @notice Transfers collateral tokens (this market) to the liquidator.\\n     * @dev Called only during an in-kind liquidation, or by liquidateBorrow during the liquidation of another VToken.\\n     *  It's absolutely critical to use msg.sender as the seizer vToken and not a parameter.\\n     * @param seizerContract The contract seizing the collateral (either borrowed vToken or Comptroller)\\n     * @param liquidator The account receiving seized collateral\\n     * @param borrower The account having collateral seized\\n     * @param seizeTokens The number of vTokens to seize\\n     */\\n    function _seize(address seizerContract, address liquidator, address borrower, uint256 seizeTokens) internal {\\n        /* Fail if seize not allowed */\\n        comptroller.preSeizeHook(address(this), seizerContract, liquidator, borrower);\\n\\n        /* Fail if borrower = liquidator */\\n        if (borrower == liquidator) {\\n            revert LiquidateSeizeLiquidatorIsBorrower();\\n        }\\n\\n        /*\\n         * We calculate the new borrower and liquidator token balances, failing on underflow/overflow:\\n         *  borrowerTokensNew = accountTokens[borrower] - seizeTokens\\n         *  liquidatorTokensNew = accountTokens[liquidator] + seizeTokens\\n         */\\n        uint256 liquidationIncentiveMantissa = ComptrollerViewInterface(address(comptroller))\\n            .liquidationIncentiveMantissa();\\n        uint256 numerator = mul_(seizeTokens, Exp({ mantissa: protocolSeizeShareMantissa }));\\n        uint256 protocolSeizeTokens = div_(numerator, Exp({ mantissa: liquidationIncentiveMantissa }));\\n        uint256 liquidatorSeizeTokens = seizeTokens - protocolSeizeTokens;\\n        Exp memory exchangeRate = Exp({ mantissa: _exchangeRateStored() });\\n        uint256 protocolSeizeAmount = mul_ScalarTruncate(exchangeRate, protocolSeizeTokens);\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        /* We write the calculated values into storage */\\n        totalSupply = totalSupply - protocolSeizeTokens;\\n        accountTokens[borrower] = accountTokens[borrower] - seizeTokens;\\n        accountTokens[liquidator] = accountTokens[liquidator] + liquidatorSeizeTokens;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, protocolSeizeAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.LIQUIDATION\\n        );\\n\\n        /* Emit a Transfer event */\\n        emit Transfer(borrower, liquidator, liquidatorSeizeTokens);\\n        emit ProtocolSeize(borrower, protocolShareReserve, protocolSeizeAmount);\\n\\n        /* We call the defense and prime accrue interest hook */\\n        comptroller.seizeVerify(address(this), seizerContract, liquidator, borrower, seizeTokens);\\n    }\\n\\n    function _setComptroller(ComptrollerInterface newComptroller) internal {\\n        ComptrollerInterface oldComptroller = comptroller;\\n        // Ensure invoke comptroller.isComptroller() returns true\\n        require(newComptroller.isComptroller(), \\\"marker method returned false\\\");\\n\\n        // Set market's comptroller to newComptroller\\n        comptroller = newComptroller;\\n\\n        // Emit NewComptroller(oldComptroller, newComptroller)\\n        emit NewComptroller(oldComptroller, newComptroller);\\n    }\\n\\n    /**\\n     * @notice Sets a new reserve factor for the protocol (*requires fresh interest accrual)\\n     * @dev Admin function to set a new reserve factor\\n     * @param newReserveFactorMantissa New reserve factor (from 0 to 1e18)\\n     */\\n    function _setReserveFactorFresh(uint256 newReserveFactorMantissa) internal {\\n        // Verify market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetReserveFactorFreshCheck();\\n        }\\n\\n        // Check newReserveFactor \\u2264 maxReserveFactor\\n        if (newReserveFactorMantissa > MAX_RESERVE_FACTOR_MANTISSA) {\\n            revert SetReserveFactorBoundsCheck();\\n        }\\n\\n        uint256 oldReserveFactorMantissa = reserveFactorMantissa;\\n        reserveFactorMantissa = newReserveFactorMantissa;\\n\\n        emit NewReserveFactor(oldReserveFactorMantissa, newReserveFactorMantissa);\\n    }\\n\\n    /**\\n     * @notice Add reserves by transferring from caller\\n     * @dev Requires fresh interest accrual\\n     * @param addAmount Amount of addition to reserves\\n     * @return actualAddAmount The actual amount added, excluding the potential token fees\\n     */\\n    function _addReservesFresh(uint256 addAmount) internal returns (uint256) {\\n        // totalReserves + actualAddAmount\\n        uint256 totalReservesNew;\\n        uint256 actualAddAmount;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert AddReservesFactorFreshCheck(actualAddAmount);\\n        }\\n\\n        actualAddAmount = _doTransferIn(msg.sender, addAmount);\\n        totalReservesNew = totalReserves + actualAddAmount;\\n        totalReserves = totalReservesNew;\\n        emit ReservesAdded(msg.sender, actualAddAmount, totalReservesNew);\\n\\n        return actualAddAmount;\\n    }\\n\\n    /**\\n     * @notice Reduces reserves by transferring to the protocol reserve contract\\n     * @dev Requires fresh interest accrual\\n     * @param reduceAmount Amount of reduction to reserves\\n     */\\n    function _reduceReservesFresh(uint256 reduceAmount) internal {\\n        if (reduceAmount == 0) {\\n            return;\\n        }\\n        // totalReserves - reduceAmount\\n        uint256 totalReservesNew;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert ReduceReservesFreshCheck();\\n        }\\n\\n        // Fail gracefully if protocol has insufficient underlying cash\\n        if (_getCashPrior() < reduceAmount) {\\n            revert ReduceReservesCashNotAvailable();\\n        }\\n\\n        // Check reduceAmount \\u2264 reserves[n] (totalReserves)\\n        if (reduceAmount > totalReserves) {\\n            revert ReduceReservesCashValidation();\\n        }\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n        // (No safe failures beyond this point)\\n\\n        totalReservesNew = totalReserves - reduceAmount;\\n\\n        // Store reserves[n+1] = reserves[n] - reduceAmount\\n        totalReserves = totalReservesNew;\\n\\n        // _doTransferOut reverts if anything goes wrong, since we can't be sure if side effects occurred.\\n        // Transferring an underlying asset to the protocolShareReserve contract to channel the funds for different use.\\n        _doTransferOut(protocolShareReserve, reduceAmount);\\n\\n        // Update the pool asset's state in the protocol share reserve for the above transfer.\\n        IProtocolShareReserve(protocolShareReserve).updateAssetsState(\\n            address(comptroller),\\n            underlying,\\n            IProtocolShareReserve.IncomeType.SPREAD\\n        );\\n\\n        emit SpreadReservesReduced(protocolShareReserve, reduceAmount, totalReservesNew);\\n    }\\n\\n    /**\\n     * @notice updates the interest rate model (*requires fresh interest accrual)\\n     * @dev Admin function to update the interest rate model\\n     * @param newInterestRateModel the new interest rate model to use\\n     */\\n    function _setInterestRateModelFresh(InterestRateModel newInterestRateModel) internal {\\n        // Used to store old model for use in the event that is emitted on success\\n        InterestRateModel oldInterestRateModel;\\n\\n        // We fail gracefully unless market's slot(block or second) number equals current slot(block or second) number\\n        if (accrualBlockNumber != getBlockNumberOrTimestamp()) {\\n            revert SetInterestRateModelFreshCheck();\\n        }\\n\\n        // Track the market's current interest rate model\\n        oldInterestRateModel = interestRateModel;\\n\\n        // Ensure invoke newInterestRateModel.isInterestRateModel() returns true\\n        require(newInterestRateModel.isInterestRateModel(), \\\"marker method returned false\\\");\\n\\n        // Set the interest rate model to newInterestRateModel\\n        interestRateModel = newInterestRateModel;\\n\\n        // Emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel)\\n        emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel);\\n    }\\n\\n    /**\\n     * Safe Token **\\n     */\\n\\n    /**\\n     * @dev Similar to ERC-20 transfer, but handles tokens that have transfer fees.\\n     *      This function returns the actual amount received,\\n     *      which may be less than `amount` if there is a fee attached to the transfer.\\n     * @param from Sender of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     * @return Actual amount received\\n     */\\n    function _doTransferIn(address from, uint256 amount) internal virtual returns (uint256) {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        uint256 balanceBefore = token.balanceOf(address(this));\\n        token.safeTransferFrom(from, address(this), amount);\\n        uint256 balanceAfter = token.balanceOf(address(this));\\n        // Return the amount that was *actually* transferred\\n        return balanceAfter - balanceBefore;\\n    }\\n\\n    /**\\n     * @dev Just a regular ERC-20 transfer, reverts on failure\\n     * @param to Receiver of the underlying tokens\\n     * @param amount Amount of underlying to transfer\\n     */\\n    function _doTransferOut(address to, uint256 amount) internal virtual {\\n        IERC20Upgradeable token = IERC20Upgradeable(underlying);\\n        token.safeTransfer(to, amount);\\n    }\\n\\n    /**\\n     * @notice Transfer `tokens` tokens from `src` to `dst` by `spender`\\n     * @dev Called by both `transfer` and `transferFrom` internally\\n     * @param spender The address of the account performing the transfer\\n     * @param src The address of the source account\\n     * @param dst The address of the destination account\\n     * @param tokens The number of tokens to transfer\\n     */\\n    function _transferTokens(address spender, address src, address dst, uint256 tokens) internal {\\n        /* Fail if transfer not allowed */\\n        comptroller.preTransferHook(address(this), src, dst, tokens);\\n\\n        /* Do not allow self-transfers */\\n        if (src == dst) {\\n            revert TransferNotAllowed();\\n        }\\n\\n        /* Get the allowance, infinite for the account owner */\\n        uint256 startingAllowance;\\n        if (spender == src) {\\n            startingAllowance = type(uint256).max;\\n        } else {\\n            startingAllowance = transferAllowances[src][spender];\\n        }\\n\\n        /* Do the calculations, checking for {under,over}flow */\\n        uint256 allowanceNew = startingAllowance - tokens;\\n        uint256 srcTokensNew = accountTokens[src] - tokens;\\n        uint256 dstTokensNew = accountTokens[dst] + tokens;\\n\\n        /////////////////////////\\n        // EFFECTS & INTERACTIONS\\n\\n        accountTokens[src] = srcTokensNew;\\n        accountTokens[dst] = dstTokensNew;\\n\\n        /* Eat some of the allowance (if necessary) */\\n        if (startingAllowance != type(uint256).max) {\\n            transferAllowances[src][spender] = allowanceNew;\\n        }\\n\\n        /* We emit a Transfer event */\\n        emit Transfer(src, dst, tokens);\\n\\n        comptroller.transferVerify(address(this), src, dst, tokens);\\n    }\\n\\n    /**\\n     * @notice Initialize the money market\\n     * @param underlying_ The address of the underlying asset\\n     * @param comptroller_ The address of the Comptroller\\n     * @param interestRateModel_ The address of the interest rate model\\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\\n     * @param name_ ERC-20 name of this token\\n     * @param symbol_ ERC-20 symbol of this token\\n     * @param decimals_ ERC-20 decimal precision of this token\\n     * @param admin_ Address of the administrator of this token\\n     * @param accessControlManager_ AccessControlManager contract address\\n     * @param riskManagement Addresses of risk & income related contracts\\n     * @param reserveFactorMantissa_ Percentage of borrow interest that goes to reserves (from 0 to 1e18)\\n     */\\n    function _initialize(\\n        address underlying_,\\n        ComptrollerInterface comptroller_,\\n        InterestRateModel interestRateModel_,\\n        uint256 initialExchangeRateMantissa_,\\n        string memory name_,\\n        string memory symbol_,\\n        uint8 decimals_,\\n        address admin_,\\n        address accessControlManager_,\\n        RiskManagementInit memory riskManagement,\\n        uint256 reserveFactorMantissa_\\n    ) internal onlyInitializing {\\n        __Ownable2Step_init();\\n        __AccessControlled_init_unchained(accessControlManager_);\\n        require(accrualBlockNumber == 0 && borrowIndex == 0, \\\"market may only be initialized once\\\");\\n\\n        // Set initial exchange rate\\n        initialExchangeRateMantissa = initialExchangeRateMantissa_;\\n        require(initialExchangeRateMantissa > 0, \\\"initial exchange rate must be greater than zero.\\\");\\n\\n        _setComptroller(comptroller_);\\n\\n        // Initialize slot(block or second) number and borrow index (slot(block or second) number mocks depend on comptroller being set)\\n        accrualBlockNumber = getBlockNumberOrTimestamp();\\n        borrowIndex = MANTISSA_ONE;\\n\\n        // Set the interest rate model (depends on slot(block or second) number / borrow index)\\n        _setInterestRateModelFresh(interestRateModel_);\\n\\n        _setReserveFactorFresh(reserveFactorMantissa_);\\n\\n        name = name_;\\n        symbol = symbol_;\\n        decimals = decimals_;\\n        _setShortfallContract(riskManagement.shortfall);\\n        _setProtocolShareReserve(riskManagement.protocolShareReserve);\\n        protocolSeizeShareMantissa = DEFAULT_PROTOCOL_SEIZE_SHARE_MANTISSA;\\n\\n        // Set underlying and sanity check it\\n        underlying = underlying_;\\n        IERC20Upgradeable(underlying).totalSupply();\\n\\n        // The counter starts true to prevent changing it from zero to non-zero (i.e. smaller cost/refund)\\n        _notEntered = true;\\n        _transferOwnership(admin_);\\n    }\\n\\n    function _setShortfallContract(address shortfall_) internal {\\n        ensureNonzeroAddress(shortfall_);\\n        address oldShortfall = shortfall;\\n        shortfall = shortfall_;\\n        emit NewShortfallContract(oldShortfall, shortfall_);\\n    }\\n\\n    function _setProtocolShareReserve(address payable protocolShareReserve_) internal {\\n        ensureNonzeroAddress(protocolShareReserve_);\\n        address oldProtocolShareReserve = address(protocolShareReserve);\\n        protocolShareReserve = protocolShareReserve_;\\n        emit NewProtocolShareReserve(oldProtocolShareReserve, address(protocolShareReserve_));\\n    }\\n\\n    function _ensureSenderIsDelegateOf(address user) internal view {\\n        if (!ComptrollerViewInterface(address(comptroller)).approvedDelegates(user, msg.sender)) {\\n            revert DelegateNotApproved();\\n        }\\n    }\\n\\n    /**\\n     * @notice Gets balance of this contract in terms of the underlying\\n     * @dev This excludes the value of the current message, if any\\n     * @return The quantity of underlying tokens owned by this contract\\n     */\\n    function _getCashPrior() internal view virtual returns (uint256) {\\n        return IERC20Upgradeable(underlying).balanceOf(address(this));\\n    }\\n\\n    /**\\n     * @notice Return the borrow balance of account based on stored data\\n     * @param account The address whose balance should be calculated\\n     * @return borrowBalance the calculated balance\\n     */\\n    function _borrowBalanceStored(address account) internal view returns (uint256) {\\n        /* Get borrowBalance and borrowIndex */\\n        BorrowSnapshot memory borrowSnapshot = accountBorrows[account];\\n\\n        /* If borrowBalance = 0 then borrowIndex is likely also 0.\\n         * Rather than failing the calculation with a division by 0, we immediately return 0 in this case.\\n         */\\n        if (borrowSnapshot.principal == 0) {\\n            return 0;\\n        }\\n\\n        /* Calculate new borrow balance using the interest index:\\n         *  recentBorrowBalance = borrower.borrowBalance * market.borrowIndex / borrower.borrowIndex\\n         */\\n        uint256 principalTimesIndex = borrowSnapshot.principal * borrowIndex;\\n\\n        return principalTimesIndex / borrowSnapshot.interestIndex;\\n    }\\n\\n    /**\\n     * @notice Calculates the exchange rate from the underlying to the VToken\\n     * @dev This function does not accrue interest before calculating the exchange rate\\n     * @return exchangeRate Calculated exchange rate scaled by 1e18\\n     */\\n    function _exchangeRateStored() internal view virtual returns (uint256) {\\n        uint256 _totalSupply = totalSupply;\\n        if (_totalSupply == 0) {\\n            /*\\n             * If there are no tokens minted:\\n             *  exchangeRate = initialExchangeRate\\n             */\\n            return initialExchangeRateMantissa;\\n        }\\n        /*\\n         * Otherwise:\\n         *  exchangeRate = (totalCash + totalBorrows + badDebt - totalReserves) / totalSupply\\n         */\\n        uint256 totalCash = _getCashPrior();\\n        uint256 cashPlusBorrowsMinusReserves = totalCash + totalBorrows + badDebt - totalReserves;\\n        uint256 exchangeRate = (cashPlusBorrowsMinusReserves * EXP_SCALE) / _totalSupply;\\n\\n        return exchangeRate;\\n    }\\n}\\n\",\"keccak256\":\"0xa220ca317fe69b920b86e43f054c43b5f891f12160fd312c9a21668f969ee056\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/VTokenInterfaces.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\nimport { ComptrollerInterface } from \\\"./ComptrollerInterface.sol\\\";\\nimport { InterestRateModel } from \\\"./InterestRateModel.sol\\\";\\n\\n/**\\n * @title VTokenStorage\\n * @author Venus\\n * @notice Storage layout used by the `VToken` contract\\n */\\n// solhint-disable-next-line max-states-count\\ncontract VTokenStorage {\\n    /**\\n     * @notice Container for borrow balance information\\n     * @member principal Total balance (with accrued interest), after applying the most recent balance-changing action\\n     * @member interestIndex Global borrowIndex as of the most recent balance-changing action\\n     */\\n    struct BorrowSnapshot {\\n        uint256 principal;\\n        uint256 interestIndex;\\n    }\\n\\n    /**\\n     * @dev Guard variable for re-entrancy checks\\n     */\\n    bool internal _notEntered;\\n\\n    /**\\n     * @notice Underlying asset for this VToken\\n     */\\n    address public underlying;\\n\\n    /**\\n     * @notice EIP-20 token name for this token\\n     */\\n    string public name;\\n\\n    /**\\n     * @notice EIP-20 token symbol for this token\\n     */\\n    string public symbol;\\n\\n    /**\\n     * @notice EIP-20 token decimals for this token\\n     */\\n    uint8 public decimals;\\n\\n    /**\\n     * @notice Protocol share Reserve contract address\\n     */\\n    address payable public protocolShareReserve;\\n\\n    /**\\n     * @notice Contract which oversees inter-vToken operations\\n     */\\n    ComptrollerInterface public comptroller;\\n\\n    /**\\n     * @notice Model which tells what the current interest rate should be\\n     */\\n    InterestRateModel public interestRateModel;\\n\\n    // Initial exchange rate used when minting the first VTokens (used when totalSupply = 0)\\n    uint256 internal initialExchangeRateMantissa;\\n\\n    /**\\n     * @notice Fraction of interest currently set aside for reserves\\n     */\\n    uint256 public reserveFactorMantissa;\\n\\n    /**\\n     * @notice Slot(block or second) number that interest was last accrued at\\n     */\\n    uint256 public accrualBlockNumber;\\n\\n    /**\\n     * @notice Accumulator of the total earned interest rate since the opening of the market\\n     */\\n    uint256 public borrowIndex;\\n\\n    /**\\n     * @notice Total amount of outstanding borrows of the underlying in this market\\n     */\\n    uint256 public totalBorrows;\\n\\n    /**\\n     * @notice Total amount of reserves of the underlying held in this market\\n     */\\n    uint256 public totalReserves;\\n\\n    /**\\n     * @notice Total number of tokens in circulation\\n     */\\n    uint256 public totalSupply;\\n\\n    /**\\n     * @notice Total bad debt of the market\\n     */\\n    uint256 public badDebt;\\n\\n    // Official record of token balances for each account\\n    mapping(address => uint256) internal accountTokens;\\n\\n    // Approved token transfer amounts on behalf of others\\n    mapping(address => mapping(address => uint256)) internal transferAllowances;\\n\\n    // Mapping of account addresses to outstanding borrow balances\\n    mapping(address => BorrowSnapshot) internal accountBorrows;\\n\\n    /**\\n     * @notice Share of seized collateral that is added to reserves\\n     */\\n    uint256 public protocolSeizeShareMantissa;\\n\\n    /**\\n     * @notice Storage of Shortfall contract address\\n     */\\n    address public shortfall;\\n\\n    /**\\n     * @notice delta slot (block or second) after which reserves will be reduced\\n     */\\n    uint256 public reduceReservesBlockDelta;\\n\\n    /**\\n     * @notice last slot (block or second) number at which reserves were reduced\\n     */\\n    uint256 public reduceReservesBlockNumber;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n}\\n\\n/**\\n * @title VTokenInterface\\n * @author Venus\\n * @notice Interface implemented by the `VToken` contract\\n */\\nabstract contract VTokenInterface is VTokenStorage {\\n    struct RiskManagementInit {\\n        address shortfall;\\n        address payable protocolShareReserve;\\n    }\\n\\n    /*** Market Events ***/\\n\\n    /**\\n     * @notice Event emitted when interest is accrued\\n     */\\n    event AccrueInterest(uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when tokens are minted\\n     */\\n    event Mint(address indexed minter, uint256 mintAmount, uint256 mintTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when tokens are redeemed\\n     */\\n    event Redeem(address indexed redeemer, uint256 redeemAmount, uint256 redeemTokens, uint256 accountBalance);\\n\\n    /**\\n     * @notice Event emitted when underlying is borrowed\\n     */\\n    event Borrow(address indexed borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows);\\n\\n    /**\\n     * @notice Event emitted when a borrow is repaid\\n     */\\n    event RepayBorrow(\\n        address indexed payer,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        uint256 accountBorrows,\\n        uint256 totalBorrows\\n    );\\n\\n    /**\\n     * @notice Event emitted when bad debt is accumulated on a market\\n     * @param borrower borrower to \\\"forgive\\\"\\n     * @param badDebtDelta amount of new bad debt recorded\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtIncreased(address indexed borrower, uint256 badDebtDelta, uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when bad debt is recovered via an auction\\n     * @param badDebtOld previous bad debt value\\n     * @param badDebtNew new bad debt value\\n     */\\n    event BadDebtRecovered(uint256 badDebtOld, uint256 badDebtNew);\\n\\n    /**\\n     * @notice Event emitted when a borrow is liquidated\\n     */\\n    event LiquidateBorrow(\\n        address indexed liquidator,\\n        address indexed borrower,\\n        uint256 repayAmount,\\n        address indexed vTokenCollateral,\\n        uint256 seizeTokens\\n    );\\n\\n    /*** Admin Events ***/\\n\\n    /**\\n     * @notice Event emitted when comptroller is changed\\n     */\\n    event NewComptroller(ComptrollerInterface indexed oldComptroller, ComptrollerInterface indexed newComptroller);\\n\\n    /**\\n     * @notice Event emitted when shortfall contract address is changed\\n     */\\n    event NewShortfallContract(address indexed oldShortfall, address indexed newShortfall);\\n\\n    /**\\n     * @notice Event emitted when protocol share reserve contract address is changed\\n     */\\n    event NewProtocolShareReserve(address indexed oldProtocolShareReserve, address indexed newProtocolShareReserve);\\n\\n    /**\\n     * @notice Event emitted when interestRateModel is changed\\n     */\\n    event NewMarketInterestRateModel(\\n        InterestRateModel indexed oldInterestRateModel,\\n        InterestRateModel indexed newInterestRateModel\\n    );\\n\\n    /**\\n     * @notice Event emitted when protocol seize share is changed\\n     */\\n    event NewProtocolSeizeShare(uint256 oldProtocolSeizeShareMantissa, uint256 newProtocolSeizeShareMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserve factor is changed\\n     */\\n    event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa);\\n\\n    /**\\n     * @notice Event emitted when the reserves are added\\n     */\\n    event ReservesAdded(address indexed benefactor, uint256 addAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice Event emitted when the spread reserves are reduced\\n     */\\n    event SpreadReservesReduced(address indexed protocolShareReserve, uint256 reduceAmount, uint256 newTotalReserves);\\n\\n    /**\\n     * @notice EIP20 Transfer event\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 amount);\\n\\n    /**\\n     * @notice EIP20 Approval event\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\\n\\n    /**\\n     * @notice Event emitted when healing the borrow\\n     */\\n    event HealBorrow(address indexed payer, address indexed borrower, uint256 repayAmount);\\n\\n    /**\\n     * @notice Event emitted when tokens are swept\\n     */\\n    event SweepToken(address indexed token);\\n\\n    /**\\n     * @notice Event emitted when reduce reserves slot (block or second) delta is changed\\n     */\\n    event NewReduceReservesBlockDelta(\\n        uint256 oldReduceReservesBlockOrTimestampDelta,\\n        uint256 newReduceReservesBlockOrTimestampDelta\\n    );\\n\\n    /**\\n     * @notice Event emitted when liquidation reserves are reduced\\n     */\\n    event ProtocolSeize(address indexed from, address indexed to, uint256 amount);\\n\\n    /*** User Interface ***/\\n\\n    function mint(uint256 mintAmount) external virtual returns (uint256);\\n\\n    function mintBehalf(address minter, uint256 mintAllowed) external virtual returns (uint256);\\n\\n    function redeem(uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemBehalf(address redeemer, uint256 redeemTokens) external virtual returns (uint256);\\n\\n    function redeemUnderlying(uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function redeemUnderlyingBehalf(address redeemer, uint256 redeemAmount) external virtual returns (uint256);\\n\\n    function borrow(uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function borrowBehalf(address borrwwer, uint256 borrowAmount) external virtual returns (uint256);\\n\\n    function repayBorrow(uint256 repayAmount) external virtual returns (uint256);\\n\\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external virtual returns (uint256);\\n\\n    function liquidateBorrow(\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral\\n    ) external virtual returns (uint256);\\n\\n    function healBorrow(address payer, address borrower, uint256 repayAmount) external virtual;\\n\\n    function forceLiquidateBorrow(\\n        address liquidator,\\n        address borrower,\\n        uint256 repayAmount,\\n        VTokenInterface vTokenCollateral,\\n        bool skipCloseFactorCheck\\n    ) external virtual;\\n\\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external virtual;\\n\\n    function transfer(address dst, uint256 amount) external virtual returns (bool);\\n\\n    function transferFrom(address src, address dst, uint256 amount) external virtual returns (bool);\\n\\n    function accrueInterest() external virtual returns (uint256);\\n\\n    function sweepToken(IERC20Upgradeable token) external virtual;\\n\\n    /*** Admin Functions ***/\\n\\n    function setReserveFactor(uint256 newReserveFactorMantissa) external virtual;\\n\\n    function reduceReserves(uint256 reduceAmount) external virtual;\\n\\n    function exchangeRateCurrent() external virtual returns (uint256);\\n\\n    function borrowBalanceCurrent(address account) external virtual returns (uint256);\\n\\n    function setInterestRateModel(InterestRateModel newInterestRateModel) external virtual;\\n\\n    function addReserves(uint256 addAmount) external virtual;\\n\\n    function totalBorrowsCurrent() external virtual returns (uint256);\\n\\n    function balanceOfUnderlying(address owner) external virtual returns (uint256);\\n\\n    function approve(address spender, uint256 amount) external virtual returns (bool);\\n\\n    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool);\\n\\n    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool);\\n\\n    function allowance(address owner, address spender) external view virtual returns (uint256);\\n\\n    function balanceOf(address owner) external view virtual returns (uint256);\\n\\n    function getAccountSnapshot(address account) external view virtual returns (uint256, uint256, uint256, uint256);\\n\\n    function borrowRatePerBlock() external view virtual returns (uint256);\\n\\n    function supplyRatePerBlock() external view virtual returns (uint256);\\n\\n    function borrowBalanceStored(address account) external view virtual returns (uint256);\\n\\n    function exchangeRateStored() external view virtual returns (uint256);\\n\\n    function getCash() external view virtual returns (uint256);\\n\\n    /**\\n     * @notice Indicator that this is a VToken contract (for inspection)\\n     * @return Always true\\n     */\\n    function isVToken() external pure virtual returns (bool) {\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7c4cbb879e3a931cfee4fa7a9eb1978eddff18087a1c4f56decedb84c2479f1e\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\",\"keccak256\":\"0x54ab3a6f3bc87569ed12370f3470a1ec84cea9796d4d0ccf3d07dd4280c044aa\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/isolated-pools/contracts/lib/validators.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\\nerror ZeroAddressNotAllowed();\\n\\n/// @notice Checks if the provided address is nonzero, reverts otherwise\\n/// @param address_ Address to check\\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\\nfunction ensureNonzeroAddress(address address_) pure {\\n    if (address_ == address(0)) {\\n        revert ZeroAddressNotAllowed();\\n    }\\n}\\n\",\"keccak256\":\"0x93bdd5cfb100f0f9a1d446857e23c3633df6ab12c266333c978428edd96b1367\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface OracleInterface {\\n    function getPrice(address asset) external view returns (uint256);\\n}\\n\\ninterface ResilientOracleInterface is OracleInterface {\\n    function updatePrice(address vToken) external;\\n\\n    function updateAssetPrice(address asset) external;\\n\\n    function getUnderlyingPrice(address vToken) external view returns (uint256);\\n}\\n\\ninterface TwapInterface is OracleInterface {\\n    function updateTwap(address asset) external returns (uint256);\\n}\\n\\ninterface BoundValidatorInterface {\\n    function validatePriceWithAnchorPrice(\\n        address asset,\\n        uint256 reporterPrice,\\n        uint256 anchorPrice\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x2432799b0d824fc701beb4c30146e912b9aeecf77b5c1635dde6c5fbe6bfc3a7\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/protocol-reserve/contracts/Interfaces/IProtocolShareReserve.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface IProtocolShareReserve {\\n    /// @notice it represents the type of vToken income\\n    enum IncomeType {\\n        SPREAD,\\n        LIQUIDATION\\n    }\\n\\n    function updateAssetsState(\\n        address comptroller,\\n        address asset,\\n        IncomeType incomeType\\n    ) external;\\n}\\n\",\"keccak256\":\"0x5fddc5b63fdd850b3b5c83576cda50dcb27a205dbb1a23af17d9da0d9f04fa0a\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { SECONDS_PER_YEAR } from \\\"./constants.sol\\\";\\n\\nabstract contract TimeManagerV8 {\\n    /// @notice Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    uint256 public immutable blocksOrSecondsPerYear;\\n\\n    /// @notice Acknowledges if a contract is time based or not\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    bool public immutable isTimeBased;\\n\\n    /// @notice Stores the current block timestamp or block number depending on isTimeBased\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    function() view returns (uint256) private immutable _getCurrentSlot;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[48] private __gap;\\n\\n    /// @notice Thrown when blocks per year is invalid\\n    error InvalidBlocksPerYear();\\n\\n    /// @notice Thrown when time based but blocks per year is provided\\n    error InvalidTimeBasedConfiguration();\\n\\n    /**\\n     * @param timeBased_ A boolean indicating whether the contract is based on time or block\\n     * If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\\n     * @param blocksPerYear_ The number of blocks per year\\n     * @custom:error InvalidBlocksPerYear is thrown if blocksPerYear entered is zero and timeBased is false\\n     * @custom:error InvalidTimeBasedConfiguration is thrown if blocksPerYear entered is non zero and timeBased is true\\n     * @custom:oz-upgrades-unsafe-allow constructor\\n     */\\n    constructor(bool timeBased_, uint256 blocksPerYear_) {\\n        if (!timeBased_ && blocksPerYear_ == 0) {\\n            revert InvalidBlocksPerYear();\\n        }\\n\\n        if (timeBased_ && blocksPerYear_ != 0) {\\n            revert InvalidTimeBasedConfiguration();\\n        }\\n\\n        isTimeBased = timeBased_;\\n        blocksOrSecondsPerYear = timeBased_ ? SECONDS_PER_YEAR : blocksPerYear_;\\n        _getCurrentSlot = timeBased_ ? _getBlockTimestamp : _getBlockNumber;\\n    }\\n\\n    /**\\n     * @dev Function to simply retrieve block number or block timestamp\\n     * @return Current block number or block timestamp\\n     */\\n    function getBlockNumberOrTimestamp() public view virtual returns (uint256) {\\n        return _getCurrentSlot();\\n    }\\n\\n    /**\\n     * @dev Returns the current timestamp in seconds\\n     * @return The current timestamp\\n     */\\n    function _getBlockTimestamp() private view returns (uint256) {\\n        return block.timestamp;\\n    }\\n\\n    /**\\n     * @dev Returns the current block number\\n     * @return The current block number\\n     */\\n    function _getBlockNumber() private view returns (uint256) {\\n        return block.number;\\n    }\\n}\\n\",\"keccak256\":\"0x57a2bbb9b8e02b1c0a5c0e305fef1328a22db56c3d4b148c362010a6e767243c\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/constants.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\n/// @dev Base unit for computations, usually used in scaling (multiplications, divisions)\\nuint256 constant EXP_SCALE = 1e18;\\n\\n/// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions\\nuint256 constant MANTISSA_ONE = EXP_SCALE;\\n\\n/// @dev The approximate number of seconds per year\\nuint256 constant SECONDS_PER_YEAR = 31_536_000;\\n\",\"keccak256\":\"0x14de93ead464da249af31bea0e3bcfb62ec693bea3475fb4d90f055ac81dc5eb\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/solidity-utilities/contracts/validators.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\\nerror ZeroAddressNotAllowed();\\n\\n/// @notice Thrown if the supplied value is 0 where it is not allowed\\nerror ZeroValueNotAllowed();\\n\\n/// @notice Checks if the provided address is nonzero, reverts otherwise\\n/// @param address_ Address to check\\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\\nfunction ensureNonzeroAddress(address address_) pure {\\n    if (address_ == address(0)) {\\n        revert ZeroAddressNotAllowed();\\n    }\\n}\\n\\n/// @notice Checks if the provided value is nonzero, reverts otherwise\\n/// @param value_ Value to check\\n/// @custom:error ZeroValueNotAllowed is thrown if the provided value is 0\\nfunction ensureNonzeroValue(uint256 value_) pure {\\n    if (value_ == 0) {\\n        revert ZeroValueNotAllowed();\\n    }\\n}\\n\",\"keccak256\":\"0xdb88e14d50dd21889ca3329d755673d022c47e8da005b6a545c7f69c2c4b7b86\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/Interfaces/IPrime.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\nimport { PrimeStorageV1 } from \\\"../PrimeStorage.sol\\\";\\n\\n/**\\n * @title IPrime\\n * @author Venus\\n * @notice Interface for Prime Token\\n */\\ninterface IPrime {\\n    struct APRInfo {\\n        // supply APR of the user in BPS\\n        uint256 supplyAPR;\\n        // borrow APR of the user in BPS\\n        uint256 borrowAPR;\\n        // total score of the market\\n        uint256 totalScore;\\n        // score of the user\\n        uint256 userScore;\\n        // capped XVS balance of the user\\n        uint256 xvsBalanceForScore;\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    struct Capital {\\n        // capital of the user\\n        uint256 capital;\\n        // capped supply of the user\\n        uint256 cappedSupply;\\n        // capped borrow of the user\\n        uint256 cappedBorrow;\\n        // capped supply of user in USD\\n        uint256 supplyCapUSD;\\n        // capped borrow of user in USD\\n        uint256 borrowCapUSD;\\n    }\\n\\n    /**\\n     * @notice Returns boosted pending interest accrued for a user for all markets\\n     * @param user the account for which to get the accrued interests\\n     * @return pendingRewards the number of underlying tokens accrued by the user for all markets\\n     */\\n    function getPendingRewards(address user) external returns (PrimeStorageV1.PendingReward[] memory pendingRewards);\\n\\n    /**\\n     * @notice Update total score of multiple users and market\\n     * @param users accounts for which we need to update score\\n     */\\n    function updateScores(address[] memory users) external;\\n\\n    /**\\n     * @notice Update value of alpha\\n     * @param _alphaNumerator numerator of alpha. If alpha is 0.5 then numerator is 1\\n     * @param _alphaDenominator denominator of alpha. If alpha is 0.5 then denominator is 2\\n     */\\n    function updateAlpha(uint128 _alphaNumerator, uint128 _alphaDenominator) external;\\n\\n    /**\\n     * @notice Update multipliers for a market\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier new supply multiplier for the market, scaled by 1e18\\n     * @param borrowMultiplier new borrow multiplier for the market, scaled by 1e18\\n     */\\n    function updateMultipliers(address market, uint256 supplyMultiplier, uint256 borrowMultiplier) external;\\n\\n    /**\\n     * @notice Add a market to prime program\\n     * @param comptroller address of the comptroller\\n     * @param market address of the market vToken\\n     * @param supplyMultiplier the multiplier for supply cap. It should be converted to 1e18\\n     * @param borrowMultiplier the multiplier for borrow cap. It should be converted to 1e18\\n     */\\n    function addMarket(\\n        address comptroller,\\n        address market,\\n        uint256 supplyMultiplier,\\n        uint256 borrowMultiplier\\n    ) external;\\n\\n    /**\\n     * @notice Set limits for total tokens that can be minted\\n     * @param _irrevocableLimit total number of irrevocable tokens that can be minted\\n     * @param _revocableLimit total number of revocable tokens that can be minted\\n     */\\n    function setLimit(uint256 _irrevocableLimit, uint256 _revocableLimit) external;\\n\\n    /**\\n     * @notice Directly issue prime tokens to users\\n     * @param isIrrevocable are the tokens being issued\\n     * @param users list of address to issue tokens to\\n     */\\n    function issue(bool isIrrevocable, address[] calldata users) external;\\n\\n    /**\\n     * @notice Executed by XVSVault whenever user's XVSVault balance changes\\n     * @param user the account address whose balance was updated\\n     */\\n    function xvsUpdated(address user) external;\\n\\n    /**\\n     * @notice accrues interest and updates score for an user for a specific market\\n     * @param user the account address for which to accrue interest and update score\\n     * @param market the market for which to accrue interest and update score\\n     */\\n    function accrueInterestAndUpdateScore(address user, address market) external;\\n\\n    /**\\n     * @notice For claiming prime token when staking period is completed\\n     */\\n    function claim() external;\\n\\n    /**\\n     * @notice For burning any prime token\\n     * @param user the account address for which the prime token will be burned\\n     */\\n    function burn(address user) external;\\n\\n    /**\\n     * @notice To pause or unpause claiming of interest\\n     */\\n    function togglePause() external;\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken) external returns (uint256);\\n\\n    /**\\n     * @notice For user to claim boosted yield\\n     * @param vToken the market for which claim the accrued interest\\n     * @param user the user for which to claim the accrued interest\\n     * @return amount the amount of tokens transferred to the user\\n     */\\n    function claimInterest(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Distributes income from market since last distribution\\n     * @param vToken the market for which to distribute the income\\n     */\\n    function accrueInterest(address vToken) external;\\n\\n    /**\\n     * @notice Returns boosted interest accrued for a user\\n     * @param vToken the market for which to fetch the accrued interest\\n     * @param user the account for which to get the accrued interest\\n     * @return interestAccrued the number of underlying tokens accrued by the user since the last accrual\\n     */\\n    function getInterestAccrued(address vToken, address user) external returns (uint256);\\n\\n    /**\\n     * @notice Retrieves an array of all available markets\\n     * @return an array of addresses representing all available markets\\n     */\\n    function getAllMarkets() external view returns (address[] memory);\\n\\n    /**\\n     * @notice fetch the numbers of seconds remaining for staking period to complete\\n     * @param user the account address for which we are checking the remaining time\\n     * @return timeRemaining the number of seconds the user needs to wait to claim prime token\\n     */\\n    function claimTimeRemaining(address user) external view returns (uint256);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for user for a given market\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function calculateAPR(address market, address user) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice Returns supply and borrow APR for estimated supply, borrow and XVS staked\\n     * @param market the market for which to fetch the APR\\n     * @param user the account for which to get the APR\\n     * @param borrow hypothetical borrow amount\\n     * @param supply hypothetical supply amount\\n     * @param xvsStaked hypothetical staked XVS amount\\n     * @return aprInfo APR information for the user for the given market\\n     */\\n    function estimateAPR(\\n        address market,\\n        address user,\\n        uint256 borrow,\\n        uint256 supply,\\n        uint256 xvsStaked\\n    ) external view returns (APRInfo memory aprInfo);\\n\\n    /**\\n     * @notice the total income that's going to be distributed in a year to prime token holders\\n     * @param vToken the market for which to fetch the total income that's going to distributed in a year\\n     * @return amount the total income\\n     */\\n    function incomeDistributionYearly(address vToken) external view returns (uint256 amount);\\n\\n    /**\\n     * @notice Returns if user is a prime holder\\n     * @return isPrimeHolder true if user is a prime holder\\n     */\\n    function isUserPrimeHolder(address user) external view returns (bool);\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param loopsLimit Number of loops limit\\n     */\\n    function setMaxLoopsLimit(uint256 loopsLimit) external;\\n\\n    /**\\n     * @notice Update staked at timestamp for multiple users\\n     * @param users accounts for which we need to update staked at timestamp\\n     * @param timestamps new staked at timestamp for the users\\n     */\\n    function setStakedAt(address[] calldata users, uint256[] calldata timestamps) external;\\n}\\n\",\"keccak256\":\"0xd112f60183416ad796093b4a83a80ddc1b8b655965f02ae55ca82e2a0c68f97d\",\"license\":\"BSD-3-Clause\"},\"@venusprotocol/venus-protocol/contracts/Tokens/Prime/PrimeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ResilientOracleInterface } from \\\"@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol\\\";\\n\\n/**\\n * @title PrimeStorageV1\\n * @author Venus\\n * @notice Storage for Prime Token\\n */\\ncontract PrimeStorageV1 {\\n    struct Token {\\n        bool exists;\\n        bool isIrrevocable;\\n    }\\n\\n    struct Market {\\n        uint256 supplyMultiplier;\\n        uint256 borrowMultiplier;\\n        uint256 rewardIndex;\\n        uint256 sumOfMembersScore;\\n        bool exists;\\n    }\\n\\n    struct Interest {\\n        uint256 accrued;\\n        uint256 score;\\n        uint256 rewardIndex;\\n    }\\n\\n    struct PendingReward {\\n        address vToken;\\n        address rewardToken;\\n        uint256 amount;\\n    }\\n\\n    /// @notice Base unit for computations, usually used in scaling (multiplications, divisions)\\n    uint256 internal constant EXP_SCALE = 1e18;\\n\\n    /// @notice maximum BPS = 100%\\n    uint256 internal constant MAXIMUM_BPS = 1e4;\\n\\n    /// @notice Mapping to get prime token's metadata\\n    mapping(address => Token) public tokens;\\n\\n    /// @notice  Tracks total irrevocable tokens minted\\n    uint256 public totalIrrevocable;\\n\\n    /// @notice  Tracks total revocable tokens minted\\n    uint256 public totalRevocable;\\n\\n    /// @notice  Indicates maximum revocable tokens that can be minted\\n    uint256 public revocableLimit;\\n\\n    /// @notice  Indicates maximum irrevocable tokens that can be minted\\n    uint256 public irrevocableLimit;\\n\\n    /// @notice Tracks when prime token eligible users started staking for claiming prime token\\n    mapping(address => uint256) public stakedAt;\\n\\n    /// @notice vToken to market configuration\\n    mapping(address => Market) public markets;\\n\\n    /// @notice vToken to user to user index\\n    mapping(address => mapping(address => Interest)) public interests;\\n\\n    /// @notice A list of boosted markets\\n    address[] internal _allMarkets;\\n\\n    /// @notice numerator of alpha. Ex: if alpha is 0.5 then this will be 1\\n    uint128 public alphaNumerator;\\n\\n    /// @notice denominator of alpha. Ex: if alpha is 0.5 then this will be 2\\n    uint128 public alphaDenominator;\\n\\n    /// @notice address of XVS vault\\n    address public xvsVault;\\n\\n    /// @notice address of XVS vault reward token\\n    address public xvsVaultRewardToken;\\n\\n    /// @notice address of XVS vault pool id\\n    uint256 public xvsVaultPoolId;\\n\\n    /// @notice mapping to check if a account's score was updated in the round\\n    mapping(uint256 => mapping(address => bool)) public isScoreUpdated;\\n\\n    /// @notice unique id for next round\\n    uint256 public nextScoreUpdateRoundId;\\n\\n    /// @notice total number of accounts whose score needs to be updated\\n    uint256 public totalScoreUpdatesRequired;\\n\\n    /// @notice total number of accounts whose score is yet to be updated\\n    uint256 public pendingScoreUpdates;\\n\\n    /// @notice mapping used to find if an asset is part of prime markets\\n    mapping(address => address) public vTokenForAsset;\\n\\n    /// @notice Address of core pool comptroller contract\\n    address internal corePoolComptroller;\\n\\n    /// @notice unreleased income from PLP that's already distributed to prime holders\\n    /// @dev mapping of asset address => amount\\n    mapping(address => uint256) public unreleasedPLPIncome;\\n\\n    /// @notice The address of PLP contract\\n    address public primeLiquidityProvider;\\n\\n    /// @notice The address of ResilientOracle contract\\n    ResilientOracleInterface public oracle;\\n\\n    /// @notice The address of PoolRegistry contract\\n    address public poolRegistry;\\n\\n    /// @dev This empty reserved space is put in place to allow future versions to add new\\n    /// variables without shifting down storage in the inheritance chain.\\n    uint256[26] private __gap;\\n}\\n\",\"keccak256\":\"0x5285c875114db2ea2be0b81b65722d5761806217022db733323c4e03365a95e7\",\"license\":\"BSD-3-Clause\"},\"contracts/ERC4626/Interfaces/IComptroller.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { Action } from \\\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\\\";\\nimport { RewardsDistributor } from \\\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\\\";\\n\\n/**\\n * @title IComptroller\\n * @author Venus\\n * @notice Combined interface for the `Comptroller` contract, including both core and view functions.\\n */\\ninterface IComptroller {\\n    function actionPaused(address market, Action action) external view returns (bool);\\n\\n    function getRewardDistributors() external view returns (RewardsDistributor[] memory);\\n\\n    function supplyCaps(address) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xc55d8fa6cb3e3907d0b9cf5d696afc18879d503278e40bed7f837403d0a4ed7e\",\"license\":\"BSD-3-Clause\"},\"contracts/ERC4626/Interfaces/IProtocolShareReserve.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.8.25;\\n\\ninterface IProtocolShareReserve {\\n    /// @notice it represents the type of vToken income\\n    enum IncomeType {\\n        SPREAD,\\n        LIQUIDATION,\\n        ERC4626_WRAPPER_REWARDS,\\n        FLASHLOAN\\n    }\\n\\n    function updateAssetsState(address comptroller, address asset, IncomeType incomeType) external;\\n}\\n\",\"keccak256\":\"0x9ca700a59330cb3bb1b1fe1cbd93b02c06d6ba8f9457ab12e03e87bec0c41235\",\"license\":\"BSD-3-Clause\"},\"contracts/ERC4626/VenusERC4626.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { ERC4626Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC4626Upgradeable.sol\\\";\\nimport { SafeERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { ERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\\\";\\nimport { ReentrancyGuardUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol\\\";\\nimport { MathUpgradeable } from \\\"@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol\\\";\\nimport { AccessControlledV8 } from \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol\\\";\\n\\nimport { IProtocolShareReserve } from \\\"./Interfaces/IProtocolShareReserve.sol\\\";\\nimport { RewardsDistributor } from \\\"@venusprotocol/isolated-pools/contracts/Rewards/RewardsDistributor.sol\\\";\\nimport { MaxLoopsLimitHelper } from \\\"@venusprotocol/isolated-pools/contracts/MaxLoopsLimitHelper.sol\\\";\\nimport { IComptroller } from \\\"./Interfaces/IComptroller.sol\\\";\\nimport { ensureNonzeroAddress } from \\\"@venusprotocol/solidity-utilities/contracts/validators.sol\\\";\\n\\nimport { Action } from \\\"@venusprotocol/isolated-pools/contracts/ComptrollerInterface.sol\\\";\\nimport { EXP_SCALE } from \\\"@venusprotocol/isolated-pools/contracts/lib/constants.sol\\\";\\nimport { VToken } from \\\"@venusprotocol/isolated-pools/contracts/VToken.sol\\\";\\n\\n/// @title VenusERC4626\\n/// @notice ERC4626 wrapper for Venus vTokens, enabling standard ERC4626 vault interactions with Venus Protocol.\\ncontract VenusERC4626 is ERC4626Upgradeable, AccessControlledV8, MaxLoopsLimitHelper, ReentrancyGuardUpgradeable {\\n    using MathUpgradeable for uint256;\\n    using SafeERC20Upgradeable for ERC20Upgradeable;\\n\\n    /// @notice Error code representing no errors in Venus operations.\\n    uint256 internal constant NO_ERROR = 0;\\n\\n    /// @notice The Venus vToken associated with this ERC4626 vault.\\n    VToken public vToken;\\n\\n    /// @notice The Venus Comptroller contract, responsible for market operations.\\n    IComptroller public comptroller;\\n\\n    /// @notice The recipient of rewards distributed by the Venus Protocol.\\n    address public rewardRecipient;\\n\\n    /// @notice Emitted when rewards are claimed.\\n    /// @param amount The amount of reward tokens claimed.\\n    /// @param rewardToken The address of the reward token claimed.\\n    event ClaimRewards(uint256 amount, address indexed rewardToken);\\n\\n    /// @notice Emitted when the reward recipient address is updated.\\n    /// @param oldRecipient The previous reward recipient address.\\n    /// @param newRecipient The new reward recipient address.\\n    event RewardRecipientUpdated(address indexed oldRecipient, address indexed newRecipient);\\n\\n    /// @notice Event emitted when tokens are swept\\n    event SweepToken(address indexed token, address indexed receiver, uint256 amount);\\n\\n    /// @notice Thrown when a Venus protocol call returns an error.\\n    /// @dev This error is triggered if a Venus operation (such as minting or redeeming vTokens) fails.\\n    /// @param errorCode The error code returned by the Venus protocol.\\n    error VenusERC4626__VenusError(uint256 errorCode);\\n\\n    /// @notice Thrown when a deposit exceeds the maximum allowed limit.\\n    /// @dev This error is triggered if the deposit amount is greater than `maxDeposit(receiver)`.\\n    error ERC4626__DepositMoreThanMax();\\n\\n    /// @notice Thrown when a mint operation exceeds the maximum allowed limit.\\n    /// @dev This error is triggered if the mint amount is greater than `maxMint(receiver)`.\\n    error ERC4626__MintMoreThanMax();\\n\\n    /// @notice Thrown when a withdrawal exceeds the maximum available assets.\\n    /// @dev This error is triggered if the withdrawal amount is greater than `maxWithdraw(owner)`.\\n    error ERC4626__WithdrawMoreThanMax();\\n\\n    /// @notice Thrown when a redemption exceeds the maximum redeemable shares.\\n    /// @dev This error is triggered if the redemption amount is greater than `maxRedeem(owner)`.\\n    error ERC4626__RedeemMoreThanMax();\\n\\n    /// @notice Thrown when attempting an operation with a zero amount.\\n    /// @dev This error prevents unnecessary transactions with zero amounts in deposit, withdraw, mint, or redeem operations.\\n    /// @param operation The name of the operation that failed (e.g., \\\"deposit\\\", \\\"withdraw\\\", \\\"mint\\\", \\\"redeem\\\").\\n    error ERC4626__ZeroAmount(string operation);\\n\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    constructor() {\\n        // Note that the contract is upgradeable. Use initialize() or reinitializers\\n        // to set the state variables.\\n        _disableInitializers();\\n    }\\n\\n    /// @notice Initializes the VenusERC4626 vault, only with the VToken address associated to the vault\\n    /// @dev `initialize2` should be invoked to complete the configuration of the vault\\n    /// @param vToken_ The VToken associated with the vault, representing the yield-bearing asset.\\n    function initialize(address vToken_) public initializer {\\n        ensureNonzeroAddress(vToken_);\\n\\n        vToken = VToken(vToken_);\\n        comptroller = IComptroller(address(vToken.comptroller()));\\n        ERC20Upgradeable asset = ERC20Upgradeable(vToken.underlying());\\n\\n        __ERC20_init(_generateVaultName(asset), _generateVaultSymbol(asset));\\n        __ERC4626_init(asset);\\n        __ReentrancyGuard_init();\\n    }\\n\\n    /**\\n     * @notice Set the limit for the loops can iterate to avoid the DOS\\n     * @param loopsLimit Number of loops limit\\n     * @custom:event Emits MaxLoopsLimitUpdated event on success\\n     * @custom:access Controlled by ACM\\n     */\\n    function setMaxLoopsLimit(uint256 loopsLimit) external {\\n        _checkAccessAllowed(\\\"setMaxLoopsLimit(uint256)\\\");\\n        _setMaxLoopsLimit(loopsLimit);\\n    }\\n\\n    /// @notice Sets a new reward recipient address\\n    /// @param newRecipient The address of the new reward recipient\\n    /// @custom:access Controlled by ACM\\n    function setRewardRecipient(address newRecipient) external {\\n        _checkAccessAllowed(\\\"setRewardRecipient(address)\\\");\\n        _setRewardRecipient(newRecipient);\\n    }\\n\\n    /// @notice Sweeps the input token address tokens from the contract and sends them to the owner\\n    /// @param token Address of the token\\n    /// @custom:event SweepToken emits on success\\n    /// @custom:access Only owner\\n    function sweepToken(IERC20Upgradeable token) external onlyOwner {\\n        uint256 balance = token.balanceOf(address(this));\\n\\n        if (balance > 0) {\\n            address owner_ = owner();\\n            SafeERC20Upgradeable.safeTransfer(token, owner_, balance);\\n            emit SweepToken(address(token), owner_, balance);\\n        }\\n    }\\n\\n    /// @notice Claims rewards from all reward distributors associated with the VToken and transfers them to the reward recipient.\\n    /// @dev Iterates through all reward distributors fetched from the comptroller, claims rewards, and transfers them if available.\\n    function claimRewards() external {\\n        IComptroller _comptroller = comptroller;\\n        VToken _vToken = vToken;\\n        address _rewardRecipient = rewardRecipient;\\n\\n        RewardsDistributor[] memory rewardDistributors = _comptroller.getRewardDistributors();\\n\\n        _ensureMaxLoops(rewardDistributors.length);\\n\\n        for (uint256 i = 0; i < rewardDistributors.length; i++) {\\n            RewardsDistributor rewardDistributor = rewardDistributors[i];\\n            IERC20Upgradeable rewardToken = IERC20Upgradeable(address(rewardDistributor.rewardToken()));\\n\\n            VToken[] memory vTokens = new VToken[](1);\\n            vTokens[0] = _vToken;\\n            RewardsDistributor(rewardDistributor).claimRewardToken(address(this), vTokens);\\n            uint256 rewardBalance = rewardToken.balanceOf(address(this));\\n\\n            if (rewardBalance > 0) {\\n                SafeERC20Upgradeable.safeTransfer(rewardToken, _rewardRecipient, rewardBalance);\\n\\n                // Try to update the asset state on the recipient if reward recipient is a protocol share reserve\\n                // reward recipient cannot be an EOA\\n                try\\n                    IProtocolShareReserve(_rewardRecipient).updateAssetsState(\\n                        address(_comptroller),\\n                        address(rewardToken),\\n                        IProtocolShareReserve.IncomeType.ERC4626_WRAPPER_REWARDS\\n                    )\\n                {} catch {}\\n            }\\n            emit ClaimRewards(rewardBalance, address(rewardToken));\\n        }\\n    }\\n\\n    /// @notice Second function to invoke to complete the configuration of the vault, setting the rest of the attributes\\n    /// @param accessControlManager_ Address of the ACM contract\\n    /// @param rewardRecipient_ The address that will receive rewards generated by the vault.\\n    /// @param loopsLimit_ The maximum number of loops allowed for reward distribution.\\n    /// @param vaultOwner_ The owner that will be set for the created vault\\n    function initialize2(\\n        address accessControlManager_,\\n        address rewardRecipient_,\\n        uint256 loopsLimit_,\\n        address vaultOwner_\\n    ) public reinitializer(2) {\\n        ensureNonzeroAddress(vaultOwner_);\\n\\n        __AccessControlled_init(accessControlManager_);\\n        _setMaxLoopsLimit(loopsLimit_);\\n        _setRewardRecipient(rewardRecipient_);\\n        _transferOwnership(vaultOwner_);\\n    }\\n\\n    /// @inheritdoc ERC4626Upgradeable\\n    function deposit(uint256 assets, address receiver) public override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(receiver);\\n\\n        vToken.accrueInterest();\\n        if (assets == 0) {\\n            revert ERC4626__ZeroAmount(\\\"deposit\\\");\\n        }\\n        if (assets > maxDeposit(receiver)) {\\n            revert ERC4626__DepositMoreThanMax();\\n        }\\n\\n        uint256 shares = previewDeposit(assets);\\n        if (shares == 0) {\\n            revert ERC4626__ZeroAmount(\\\"deposit\\\");\\n        }\\n\\n        uint256 totalSupplyBefore = totalSupply();\\n        _deposit(_msgSender(), receiver, assets, shares);\\n        uint256 actualShares = totalSupply() - totalSupplyBefore;\\n\\n        return actualShares;\\n    }\\n\\n    /// @dev The minted shares are calculated considering the minted VTokens\\n    /// @dev It can mint slightly fewer shares than requested, because VToken.mint rounds down\\n    /// @inheritdoc ERC4626Upgradeable\\n    function mint(uint256 shares, address receiver) public override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(receiver);\\n\\n        vToken.accrueInterest();\\n        if (shares == 0) {\\n            revert ERC4626__ZeroAmount(\\\"mint\\\");\\n        }\\n        if (shares > maxMint(receiver)) {\\n            revert ERC4626__MintMoreThanMax();\\n        }\\n        uint256 assets = previewMint(shares);\\n        if (assets == 0) {\\n            revert ERC4626__ZeroAmount(\\\"mint\\\");\\n        }\\n        _deposit(_msgSender(), receiver, assets, shares);\\n        return assets;\\n    }\\n\\n    /// @dev Receiver can receive slightly more assets than requested, because VToken.redeemUnderlying rounds up\\n    /// @dev The shares to burn are calculated considering the actual transferred assets, not the requested ones\\n    /// @inheritdoc ERC4626Upgradeable\\n    function withdraw(uint256 assets, address receiver, address owner) public override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(receiver);\\n        ensureNonzeroAddress(owner);\\n\\n        vToken.accrueInterest();\\n        if (assets == 0) {\\n            revert ERC4626__ZeroAmount(\\\"withdraw\\\");\\n        }\\n        if (assets > maxWithdraw(owner)) {\\n            revert ERC4626__WithdrawMoreThanMax();\\n        }\\n\\n        (uint256 actualAssets, uint256 actualShares) = _beforeWithdraw(assets);\\n        _withdraw(_msgSender(), receiver, owner, actualAssets, actualShares);\\n\\n        return actualShares;\\n    }\\n\\n    /// @inheritdoc ERC4626Upgradeable\\n    function redeem(uint256 shares, address receiver, address owner) public override nonReentrant returns (uint256) {\\n        ensureNonzeroAddress(receiver);\\n        ensureNonzeroAddress(owner);\\n\\n        vToken.accrueInterest();\\n        if (shares == 0) {\\n            revert ERC4626__ZeroAmount(\\\"redeem\\\");\\n        }\\n        if (shares > maxRedeem(owner)) {\\n            revert ERC4626__RedeemMoreThanMax();\\n        }\\n\\n        uint256 actualAssets = _beforeRedeem(shares);\\n        if (actualAssets == 0) {\\n            revert ERC4626__ZeroAmount(\\\"redeem\\\");\\n        }\\n\\n        _withdraw(_msgSender(), receiver, owner, actualAssets, shares);\\n        return actualAssets;\\n    }\\n\\n    /// @notice Returns the total amount of assets deposited\\n    /// @return Amount of assets deposited\\n    function totalAssets() public view virtual override returns (uint256) {\\n        return (vToken.balanceOf(address(this)) * vToken.exchangeRateStored()) / EXP_SCALE;\\n    }\\n\\n    /// @notice Returns the maximum deposit allowed based on Venus supply caps.\\n    /// @dev If minting is paused or the supply cap is reached, returns 0.\\n    /// @param /*account*/ The address of the account.\\n    /// @return The maximum amount of assets that can be deposited.\\n    function maxDeposit(address /*account*/) public view virtual override returns (uint256) {\\n        if (comptroller.actionPaused(address(vToken), Action.MINT)) {\\n            return 0;\\n        }\\n\\n        uint256 supplyCap = comptroller.supplyCaps(address(vToken));\\n        uint256 totalSupply_ = (vToken.totalSupply() * vToken.exchangeRateStored()) / EXP_SCALE;\\n        return supplyCap > totalSupply_ ? supplyCap - totalSupply_ : 0;\\n    }\\n\\n    /// @notice Returns the maximum amount of shares that can be minted.\\n    /// @dev This is derived from the maximum deposit amount converted to shares.\\n    /// @param /*account*/ The address of the account.\\n    /// @return The maximum number of shares that can be minted.\\n    function maxMint(address /*account*/) public view virtual override returns (uint256) {\\n        return convertToShares(maxDeposit(address(0)));\\n    }\\n\\n    /// @notice Returns the maximum amount that can be withdrawn.\\n    /// @dev The withdrawable amount is limited by the available cash in the vault.\\n    /// @param receiver The address of the account withdrawing.\\n    /// @return The maximum amount of assets that can be withdrawn.\\n    function maxWithdraw(address receiver) public view virtual override returns (uint256) {\\n        if (comptroller.actionPaused(address(vToken), Action.REDEEM)) {\\n            return 0;\\n        }\\n\\n        uint256 cash = vToken.getCash();\\n        uint256 totalReserves = vToken.totalReserves();\\n        uint256 assetsBalance = convertToAssets(balanceOf(receiver));\\n\\n        if (cash < totalReserves) {\\n            return 0;\\n        } else {\\n            uint256 availableCash = cash - totalReserves;\\n            return availableCash < assetsBalance ? availableCash : assetsBalance;\\n        }\\n    }\\n\\n    /// @notice Returns the maximum amount of shares that can be redeemed.\\n    /// @dev Redemption is limited by the available cash in the vault.\\n    /// @param receiver The address of the account redeeming.\\n    /// @return The maximum number of shares that can be redeemed.\\n    function maxRedeem(address receiver) public view virtual override returns (uint256) {\\n        if (comptroller.actionPaused(address(vToken), Action.REDEEM)) {\\n            return 0;\\n        }\\n\\n        uint256 cash = vToken.getCash();\\n        uint256 totalReserves = vToken.totalReserves();\\n        if (cash < totalReserves) {\\n            return 0;\\n        } else {\\n            uint256 availableCash = cash - totalReserves;\\n            uint256 availableCashInShares = convertToShares(availableCash);\\n            uint256 shareBalance = balanceOf(receiver);\\n            return availableCashInShares < shareBalance ? availableCashInShares : shareBalance;\\n        }\\n    }\\n\\n    /// @notice Redeems the amount of vTokens equivalent to the provided shares.\\n    /// @dev Calls `redeem` on the vToken contract. Reverts on error.\\n    /// @param shares The amount of shares to redeem.\\n    /// @return The amount of assets transferred in\\n    function _beforeRedeem(uint256 shares) internal returns (uint256) {\\n        IERC20Upgradeable token = IERC20Upgradeable(asset());\\n        uint256 balanceBefore = token.balanceOf(address(this));\\n\\n        // Calculate the amount of vTokens equivalent to the amount of shares, rounding it down\\n        uint256 vTokens = shares.mulDiv(\\n            vToken.balanceOf(address(this)),\\n            totalSupply() + 10 ** _decimalsOffset(),\\n            MathUpgradeable.Rounding.Down\\n        );\\n\\n        uint256 errorCode = vToken.redeem(vTokens);\\n        if (errorCode != NO_ERROR) {\\n            revert VenusERC4626__VenusError(errorCode);\\n        }\\n\\n        uint256 balanceAfter = token.balanceOf(address(this));\\n\\n        // Return the amount of assets that was *actually* transferred in\\n        return balanceAfter - balanceBefore;\\n    }\\n\\n    /// @notice Redeems underlying assets before withdrawing from the vault.\\n    /// @dev Calls `redeemUnderlying` on the vToken contract. Reverts on error.\\n    /// @param assets The amount of underlying assets to redeem.\\n    /// @return actualAssets The amount of assets transferred in\\n    /// @return actualShares The shares equivalent to `actualAssets`, to be burned, rounded up\\n    /// @custom:error ERC4626__ZeroAmount is thrown when the redeemed VTokens are zero\\n    function _beforeWithdraw(uint256 assets) internal returns (uint256 actualAssets, uint256 actualShares) {\\n        IERC20Upgradeable token = IERC20Upgradeable(asset());\\n        uint256 balanceBefore = token.balanceOf(address(this));\\n        uint256 vTokenBalanceBefore = vToken.balanceOf(address(this));\\n\\n        uint256 errorCode = vToken.redeemUnderlying(assets);\\n        if (errorCode != NO_ERROR) {\\n            revert VenusERC4626__VenusError(errorCode);\\n        }\\n\\n        // Return the amount of assets *actually* transferred in\\n        actualAssets = token.balanceOf(address(this)) - balanceBefore;\\n\\n        uint256 actualVTokens = vTokenBalanceBefore - vToken.balanceOf(address(this));\\n        if (actualVTokens == 0) {\\n            revert ERC4626__ZeroAmount(\\\"actualVTokens at _beforeWithdraw\\\");\\n        }\\n        // Return the shares equivalent to the burned vTokens\\n        actualShares = actualVTokens.mulDiv(\\n            totalSupply() + 10 ** _decimalsOffset(),\\n            vTokenBalanceBefore,\\n            MathUpgradeable.Rounding.Up\\n        );\\n    }\\n\\n    /// @notice Mints vTokens after depositing assets.\\n    /// @dev Calls `mint` on the vToken contract. Reverts on error.\\n    /// @param assets The amount of underlying assets to deposit.\\n    function _mintVTokens(uint256 assets) internal {\\n        ERC20Upgradeable(asset()).safeApprove(address(vToken), assets);\\n        uint256 errorCode = vToken.mint(assets);\\n        if (errorCode != NO_ERROR) {\\n            revert VenusERC4626__VenusError(errorCode);\\n        }\\n    }\\n\\n    /// @notice Sets a new reward recipient address\\n    /// @param newRecipient The address of the new reward recipient\\n    /// @custom:error ZeroAddressNotAllowed is thrown when the new recipient address is zero\\n    /// @custom:event RewardRecipientUpdated is emitted when the reward recipient address is updated\\n    function _setRewardRecipient(address newRecipient) internal {\\n        ensureNonzeroAddress(newRecipient);\\n\\n        emit RewardRecipientUpdated(rewardRecipient, newRecipient);\\n        rewardRecipient = newRecipient;\\n    }\\n\\n    /// @notice Deposits the assets into the VToken and calculates the shares to mint based on the\\n    /// underlying assets equivalent to the new VTokens minted\\n    /// @custom:error ERC4626__ZeroAmount is thrown when the minted VTokens are zero\\n    /// @inheritdoc ERC4626Upgradeable\\n    function _deposit(address caller, address receiver, uint256 assets, uint256 shares) internal override {\\n        // 1. Track pre-transfer balances\\n        uint256 assetBalanceBefore = IERC20Upgradeable(asset()).balanceOf(address(this));\\n        uint256 vTokenBalanceBefore = vToken.balanceOf(address(this));\\n\\n        // 2. Perform asset transfer (original OZ 4626 logic)\\n        SafeERC20Upgradeable.safeTransferFrom(IERC20Upgradeable(asset()), caller, address(this), assets);\\n\\n        // 3. Calculate actual assets received (protects against fee-on-transfer)\\n        uint256 assetsReceived = IERC20Upgradeable(asset()).balanceOf(address(this)) - assetBalanceBefore;\\n\\n        // 4. Mint vTokens with received assets\\n        _mintVTokens(assetsReceived);\\n\\n        // 5. Verify actual vTokens received\\n        uint256 vTokensReceived = vToken.balanceOf(address(this)) - vTokenBalanceBefore;\\n        if (vTokensReceived == 0) {\\n            revert ERC4626__ZeroAmount(\\\"vTokensReceived at _deposit\\\");\\n        }\\n        uint256 actualAssetsValue = (vTokensReceived * vToken.exchangeRateStored()) / EXP_SCALE;\\n\\n        // 6. Recalculate shares based on actual received value\\n        // This is the same operation performed by previewDeposit, adjusting the total assets\\n        uint256 actualShares = actualAssetsValue.mulDiv(\\n            totalSupply() + 10 ** _decimalsOffset(),\\n            totalAssets() + 1 - actualAssetsValue, // remove the new assets deposited to the VToken in this operation\\n            MathUpgradeable.Rounding.Down\\n        );\\n\\n        // 7. Mint the corrected share amount\\n        _mint(receiver, actualShares);\\n\\n        emit Deposit(caller, receiver, assets, actualShares);\\n    }\\n\\n    /// @notice Override `_decimalsOffset` to normalize decimals to 18 for all VenusERC4626 vaults.\\n    /// @return Gap between 18 and the decimals of the asset token\\n    function _decimalsOffset() internal view virtual override returns (uint8) {\\n        return 18 - ERC20Upgradeable(asset()).decimals();\\n    }\\n\\n    /// @notice Generates and returns the derived name of the vault considering the asset name\\n    /// @param asset_ Asset to be accepted in the vault whose name this function will return\\n    /// @return Name of the vault considering the asset name\\n    function _generateVaultName(ERC20Upgradeable asset_) internal view returns (string memory) {\\n        return string(abi.encodePacked(\\\"ERC4626-Wrapped Venus \\\", asset_.name()));\\n    }\\n\\n    /// @notice Generates and returns the derived symbol of the vault considering the asset symbol\\n    /// @param asset_ Asset to be accepted in the vault whose symbol this function will return\\n    /// @return Symbol of the vault considering the asset name\\n    function _generateVaultSymbol(ERC20Upgradeable asset_) internal view returns (string memory) {\\n        return string(abi.encodePacked(\\\"v4626\\\", asset_.symbol()));\\n    }\\n}\\n\",\"keccak256\":\"0x6adbd1422570730a199a185d3eb6023d36d4df59a1f777901720f6ac52e3214c\",\"license\":\"BSD-3-Clause\"},\"contracts/test/Mocks/MockVenusERC4626.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.25;\\n\\nimport { VenusERC4626 } from \\\"../../ERC4626/VenusERC4626.sol\\\";\\nimport { IERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\nimport { ERC20Upgradeable } from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\\\";\\n\\ncontract MockVenusERC4626 is VenusERC4626 {\\n    mapping(address => uint256) private _balances;\\n    uint256 private mockTotalAssets;\\n    uint256 private mockMaxDeposit;\\n    uint256 private mockMaxWithdraw;\\n    uint256 private mockMaxMint;\\n    uint256 private mockMaxRedeem;\\n    uint256 private mockTotalSupply;\\n\\n    // Mock functions for testing\\n    function setTotalAssets(uint256 _totalAssets) external {\\n        mockTotalAssets = _totalAssets;\\n    }\\n\\n    function setMaxWithdraw(uint256 _maxWithdraw) external {\\n        mockMaxWithdraw = _maxWithdraw;\\n    }\\n\\n    function setMaxDeposit(uint256 _maxDeposit) external {\\n        mockMaxDeposit = _maxDeposit;\\n    }\\n\\n    function setMaxRedeem(uint256 _maxRedeem) external {\\n        mockMaxRedeem = _maxRedeem;\\n    }\\n\\n    function setMaxMint(uint256 _maxMint) external {\\n        mockMaxMint = _maxMint;\\n    }\\n\\n    function setTotalSupply(uint256 _totalSupply) external {\\n        mockTotalSupply = _totalSupply;\\n    }\\n\\n    function setAccountBalance(address account, uint256 balance) public {\\n        _balances[account] = balance;\\n    }\\n\\n    // Override totalAssets to return the mocked value\\n    function totalAssets() public view override returns (uint256) {\\n        return mockTotalAssets;\\n    }\\n\\n    // Override maxDeposit to return the mocked value\\n    function maxDeposit(address) public view override returns (uint256) {\\n        return mockMaxDeposit;\\n    }\\n\\n    // Override maxWithdraw to return the mocked value\\n    function maxWithdraw(address) public view override returns (uint256) {\\n        return mockMaxWithdraw;\\n    }\\n\\n    function maxMint(address) public view override returns (uint256) {\\n        return mockMaxMint;\\n    }\\n\\n    function maxRedeem(address) public view override returns (uint256) {\\n        return mockMaxRedeem;\\n    }\\n\\n    function totalSupply() public view override(ERC20Upgradeable, IERC20Upgradeable) returns (uint256) {\\n        return mockTotalSupply;\\n    }\\n\\n    function _mint(address account, uint256 amount) internal override {\\n        mockTotalSupply += amount;\\n        _balances[account] += amount;\\n        super._mint(account, amount);\\n    }\\n\\n    function _burn(address account, uint256 amount) internal override {\\n        mockTotalSupply -= amount;\\n        _balances[account] -= amount;\\n        super._burn(account, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x1761e3b369a2840e7d623d384efe3d72fd6d5eadcfa0284d5a5830387ec1d517\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[{"astId":414,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":417,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":2820,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":681,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"_balances","offset":0,"slot":"51","type":"t_mapping(t_address,t_uint256)"},{"astId":687,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"_allowances","offset":0,"slot":"52","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":689,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"_totalSupply","offset":0,"slot":"53","type":"t_uint256"},{"astId":691,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"_name","offset":0,"slot":"54","type":"t_string_storage"},{"astId":693,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"_symbol","offset":0,"slot":"55","type":"t_string_storage"},{"astId":1273,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"__gap","offset":0,"slot":"56","type":"t_array(t_uint256)45_storage"},{"astId":1373,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"_asset","offset":0,"slot":"101","type":"t_contract(IERC20Upgradeable)1352"},{"astId":1375,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"_underlyingDecimals","offset":20,"slot":"101","type":"t_uint8"},{"astId":2002,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"__gap","offset":0,"slot":"102","type":"t_array(t_uint256)49_storage"},{"astId":118,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"_owner","offset":0,"slot":"151","type":"t_address"},{"astId":238,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"__gap","offset":0,"slot":"152","type":"t_array(t_uint256)49_storage"},{"astId":11,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"_pendingOwner","offset":0,"slot":"201","type":"t_address"},{"astId":105,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"__gap","offset":0,"slot":"202","type":"t_array(t_uint256)49_storage"},{"astId":4895,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"_accessControlManager","offset":0,"slot":"251","type":"t_contract(IAccessControlManagerV8)5080"},{"astId":4900,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"__gap","offset":0,"slot":"252","type":"t_array(t_uint256)49_storage"},{"astId":10271,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"maxLoopsLimit","offset":0,"slot":"301","type":"t_uint256"},{"astId":10276,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"__gap","offset":0,"slot":"302","type":"t_array(t_uint256)49_storage"},{"astId":591,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"_status","offset":0,"slot":"351","type":"t_uint256"},{"astId":660,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"__gap","offset":0,"slot":"352","type":"t_array(t_uint256)49_storage"},{"astId":16890,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"vToken","offset":0,"slot":"401","type":"t_contract(VToken)15506"},{"astId":16894,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"comptroller","offset":0,"slot":"402","type":"t_contract(IComptroller)16789"},{"astId":16897,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"rewardRecipient","offset":0,"slot":"403","type":"t_address"},{"astId":18595,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"_balances","offset":0,"slot":"404","type":"t_mapping(t_address,t_uint256)"},{"astId":18597,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"mockTotalAssets","offset":0,"slot":"405","type":"t_uint256"},{"astId":18599,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"mockMaxDeposit","offset":0,"slot":"406","type":"t_uint256"},{"astId":18601,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"mockMaxWithdraw","offset":0,"slot":"407","type":"t_uint256"},{"astId":18603,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"mockMaxMint","offset":0,"slot":"408","type":"t_uint256"},{"astId":18605,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"mockMaxRedeem","offset":0,"slot":"409","type":"t_uint256"},{"astId":18607,"contract":"contracts/test/Mocks/MockVenusERC4626.sol:MockVenusERC4626","label":"mockTotalSupply","offset":0,"slot":"410","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)45_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[45]","numberOfBytes":"1440"},"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(IAccessControlManagerV8)5080":{"encoding":"inplace","label":"contract IAccessControlManagerV8","numberOfBytes":"20"},"t_contract(IComptroller)16789":{"encoding":"inplace","label":"contract IComptroller","numberOfBytes":"20"},"t_contract(IERC20Upgradeable)1352":{"encoding":"inplace","label":"contract IERC20Upgradeable","numberOfBytes":"20"},"t_contract(VToken)15506":{"encoding":"inplace","label":"contract VToken","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"errors":{"ERC4626__DepositMoreThanMax()":[{"notice":"Thrown when a deposit exceeds the maximum allowed limit."}],"ERC4626__MintMoreThanMax()":[{"notice":"Thrown when a mint operation exceeds the maximum allowed limit."}],"ERC4626__RedeemMoreThanMax()":[{"notice":"Thrown when a redemption exceeds the maximum redeemable shares."}],"ERC4626__WithdrawMoreThanMax()":[{"notice":"Thrown when a withdrawal exceeds the maximum available assets."}],"ERC4626__ZeroAmount(string)":[{"notice":"Thrown when attempting an operation with a zero amount."}],"MaxLoopsLimitExceeded(uint256,uint256)":[{"notice":"Thrown an error on maxLoopsLimit exceeds for any loop"}],"Unauthorized(address,address,string)":[{"notice":"Thrown when the action is prohibited by AccessControlManager"}],"VenusERC4626__VenusError(uint256)":[{"notice":"Thrown when a Venus protocol call returns an error."}],"ZeroAddressNotAllowed()":[{"notice":"Thrown if the supplied address is a zero address where it is not allowed"}]},"events":{"ClaimRewards(uint256,address)":{"notice":"Emitted when rewards are claimed."},"MaxLoopsLimitUpdated(uint256,uint256)":{"notice":"Emitted when max loops limit is set"},"NewAccessControlManager(address,address)":{"notice":"Emitted when access control manager contract address is changed"},"RewardRecipientUpdated(address,address)":{"notice":"Emitted when the reward recipient address is updated."},"SweepToken(address,address,uint256)":{"notice":"Event emitted when tokens are swept"}},"kind":"user","methods":{"accessControlManager()":{"notice":"Returns the address of the access control manager contract"},"claimRewards()":{"notice":"Claims rewards from all reward distributors associated with the VToken and transfers them to the reward recipient."},"comptroller()":{"notice":"The Venus Comptroller contract, responsible for market operations."},"initialize(address)":{"notice":"Initializes the VenusERC4626 vault, only with the VToken address associated to the vault"},"initialize2(address,address,uint256,address)":{"notice":"Second function to invoke to complete the configuration of the vault, setting the rest of the attributes"},"maxDeposit(address)":{"notice":"Returns the maximum deposit allowed based on Venus supply caps."},"maxMint(address)":{"notice":"Returns the maximum amount of shares that can be minted."},"rewardRecipient()":{"notice":"The recipient of rewards distributed by the Venus Protocol."},"setAccessControlManager(address)":{"notice":"Sets the address of AccessControlManager"},"setMaxLoopsLimit(uint256)":{"notice":"Set the limit for the loops can iterate to avoid the DOS"},"setRewardRecipient(address)":{"notice":"Sets a new reward recipient address"},"sweepToken(address)":{"notice":"Sweeps the input token address tokens from the contract and sends them to the owner"},"totalAssets()":{"notice":"Returns the total amount of assets deposited"},"vToken()":{"notice":"The Venus vToken associated with this ERC4626 vault."}},"version":1}}},"hardhat-deploy/solc_0.8/openzeppelin/access/Ownable.sol":{"Ownable":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.","kind":"dev","methods":{"constructor":{"details":"Initializes the contract setting the deployer as the initial owner."},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"hardhat-deploy/solc_0.8/openzeppelin/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"hardhat-deploy/solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor (address initialOwner) {\\n        _transferOwnership(initialOwner);\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":18806,"contract":"hardhat-deploy/solc_0.8/openzeppelin/access/Ownable.sol:Ownable","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"hardhat-deploy/solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol":{"IERC1822Proxiable":{"abi":[{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified proxy whose upgrades are fully controlled by the current implementation.","kind":"dev","methods":{"proxiableUUID()":{"details":"Returns the storage slot that the proxiable contract assumes is being used to store the implementation address. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"proxiableUUID()":"52d1902d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified proxy whose upgrades are fully controlled by the current implementation.\",\"kind\":\"dev\",\"methods\":{\"proxiableUUID()\":{\"details\":\"Returns the storage slot that the proxiable contract assumes is being used to store the implementation address. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"hardhat-deploy/solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":\"IERC1822Proxiable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"hardhat-deploy/solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol":{"ERC1967Proxy":{"abi":[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"details":"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.","events":{"AdminChanged(address,address)":{"details":"Emitted when the admin account has changed."},"BeaconUpgraded(address)":{"details":"Emitted when the beacon is upgraded."},"Upgraded(address)":{"details":"Emitted when the implementation is upgraded."}},"kind":"dev","methods":{"constructor":{"details":"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_18954":{"entryPoint":null,"id":18954,"parameterSlots":2,"returnSlots":0},"@_setImplementation_19023":{"entryPoint":278,"id":19023,"parameterSlots":1,"returnSlots":0},"@_upgradeToAndCall_19068":{"entryPoint":124,"id":19068,"parameterSlots":3,"returnSlots":0},"@_upgradeTo_19038":{"entryPoint":168,"id":19038,"parameterSlots":1,"returnSlots":0},"@functionDelegateCall_19884":{"entryPoint":232,"id":19884,"parameterSlots":2,"returnSlots":1},"@functionDelegateCall_19919":{"entryPoint":373,"id":19919,"parameterSlots":3,"returnSlots":1},"@getAddressSlot_19999":{"entryPoint":null,"id":19999,"parameterSlots":1,"returnSlots":1},"@isContract_19674":{"entryPoint":null,"id":19674,"parameterSlots":1,"returnSlots":1},"@verifyCallResult_19950":{"entryPoint":534,"id":19950,"parameterSlots":3,"returnSlots":1},"abi_decode_available_length_t_bytes_memory_ptr_fromMemory":{"entryPoint":814,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_t_address_fromMemory":{"entryPoint":631,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_bytes_memory_ptr_fromMemory":{"entryPoint":879,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory":{"entryPoint":923,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":1249,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack":{"entryPoint":1295,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack":{"entryPoint":1073,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack":{"entryPoint":1166,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":1283,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1345,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1150,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1233,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory":{"entryPoint":708,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_t_bytes_memory_ptr":{"entryPoint":736,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_bytes_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_string_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":1032,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_address":{"entryPoint":591,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":778,"id":null,"parameterSlots":3,"returnSlots":0},"finalize_allocation":{"entryPoint":664,"id":null,"parameterSlots":2,"returnSlots":0},"panic_error_0x01":{"entryPoint":1051,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x11":{"entryPoint":1010,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":642,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"round_up_to_mul_of_32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_address":{"entryPoint":608,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:8491:69","nodeType":"YulBlock","src":"0:8491:69","statements":[{"body":{"nativeSrc":"47:35:69","nodeType":"YulBlock","src":"47:35:69","statements":[{"nativeSrc":"57:19:69","nodeType":"YulAssignment","src":"57:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"73:2:69","nodeType":"YulLiteral","src":"73:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"67:5:69","nodeType":"YulIdentifier","src":"67:5:69"},"nativeSrc":"67:9:69","nodeType":"YulFunctionCall","src":"67:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"57:6:69","nodeType":"YulIdentifier","src":"57:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"7:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"40:6:69","nodeType":"YulTypedName","src":"40:6:69","type":""}],"src":"7:75:69"},{"body":{"nativeSrc":"177:28:69","nodeType":"YulBlock","src":"177:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"194:1:69","nodeType":"YulLiteral","src":"194:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"197:1:69","nodeType":"YulLiteral","src":"197:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"187:6:69","nodeType":"YulIdentifier","src":"187:6:69"},"nativeSrc":"187:12:69","nodeType":"YulFunctionCall","src":"187:12:69"},"nativeSrc":"187:12:69","nodeType":"YulExpressionStatement","src":"187:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"88:117:69","nodeType":"YulFunctionDefinition","src":"88:117:69"},{"body":{"nativeSrc":"300:28:69","nodeType":"YulBlock","src":"300:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"317:1:69","nodeType":"YulLiteral","src":"317:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"320:1:69","nodeType":"YulLiteral","src":"320:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},"nativeSrc":"310:12:69","nodeType":"YulFunctionCall","src":"310:12:69"},"nativeSrc":"310:12:69","nodeType":"YulExpressionStatement","src":"310:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"211:117:69","nodeType":"YulFunctionDefinition","src":"211:117:69"},{"body":{"nativeSrc":"379:81:69","nodeType":"YulBlock","src":"379:81:69","statements":[{"nativeSrc":"389:65:69","nodeType":"YulAssignment","src":"389:65:69","value":{"arguments":[{"name":"value","nativeSrc":"404:5:69","nodeType":"YulIdentifier","src":"404:5:69"},{"kind":"number","nativeSrc":"411:42:69","nodeType":"YulLiteral","src":"411:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"400:3:69","nodeType":"YulIdentifier","src":"400:3:69"},"nativeSrc":"400:54:69","nodeType":"YulFunctionCall","src":"400:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"389:7:69","nodeType":"YulIdentifier","src":"389:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"334:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"361:5:69","nodeType":"YulTypedName","src":"361:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"371:7:69","nodeType":"YulTypedName","src":"371:7:69","type":""}],"src":"334:126:69"},{"body":{"nativeSrc":"511:51:69","nodeType":"YulBlock","src":"511:51:69","statements":[{"nativeSrc":"521:35:69","nodeType":"YulAssignment","src":"521:35:69","value":{"arguments":[{"name":"value","nativeSrc":"550:5:69","nodeType":"YulIdentifier","src":"550:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"532:17:69","nodeType":"YulIdentifier","src":"532:17:69"},"nativeSrc":"532:24:69","nodeType":"YulFunctionCall","src":"532:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"521:7:69","nodeType":"YulIdentifier","src":"521:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"466:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"493:5:69","nodeType":"YulTypedName","src":"493:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"503:7:69","nodeType":"YulTypedName","src":"503:7:69","type":""}],"src":"466:96:69"},{"body":{"nativeSrc":"611:79:69","nodeType":"YulBlock","src":"611:79:69","statements":[{"body":{"nativeSrc":"668:16:69","nodeType":"YulBlock","src":"668:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"677:1:69","nodeType":"YulLiteral","src":"677:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"680:1:69","nodeType":"YulLiteral","src":"680:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"670:6:69","nodeType":"YulIdentifier","src":"670:6:69"},"nativeSrc":"670:12:69","nodeType":"YulFunctionCall","src":"670:12:69"},"nativeSrc":"670:12:69","nodeType":"YulExpressionStatement","src":"670:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"634:5:69","nodeType":"YulIdentifier","src":"634:5:69"},{"arguments":[{"name":"value","nativeSrc":"659:5:69","nodeType":"YulIdentifier","src":"659:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"641:17:69","nodeType":"YulIdentifier","src":"641:17:69"},"nativeSrc":"641:24:69","nodeType":"YulFunctionCall","src":"641:24:69"}],"functionName":{"name":"eq","nativeSrc":"631:2:69","nodeType":"YulIdentifier","src":"631:2:69"},"nativeSrc":"631:35:69","nodeType":"YulFunctionCall","src":"631:35:69"}],"functionName":{"name":"iszero","nativeSrc":"624:6:69","nodeType":"YulIdentifier","src":"624:6:69"},"nativeSrc":"624:43:69","nodeType":"YulFunctionCall","src":"624:43:69"},"nativeSrc":"621:63:69","nodeType":"YulIf","src":"621:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"568:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"604:5:69","nodeType":"YulTypedName","src":"604:5:69","type":""}],"src":"568:122:69"},{"body":{"nativeSrc":"759:80:69","nodeType":"YulBlock","src":"759:80:69","statements":[{"nativeSrc":"769:22:69","nodeType":"YulAssignment","src":"769:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"784:6:69","nodeType":"YulIdentifier","src":"784:6:69"}],"functionName":{"name":"mload","nativeSrc":"778:5:69","nodeType":"YulIdentifier","src":"778:5:69"},"nativeSrc":"778:13:69","nodeType":"YulFunctionCall","src":"778:13:69"},"variableNames":[{"name":"value","nativeSrc":"769:5:69","nodeType":"YulIdentifier","src":"769:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"827:5:69","nodeType":"YulIdentifier","src":"827:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"800:26:69","nodeType":"YulIdentifier","src":"800:26:69"},"nativeSrc":"800:33:69","nodeType":"YulFunctionCall","src":"800:33:69"},"nativeSrc":"800:33:69","nodeType":"YulExpressionStatement","src":"800:33:69"}]},"name":"abi_decode_t_address_fromMemory","nativeSrc":"696:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"737:6:69","nodeType":"YulTypedName","src":"737:6:69","type":""},{"name":"end","nativeSrc":"745:3:69","nodeType":"YulTypedName","src":"745:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"753:5:69","nodeType":"YulTypedName","src":"753:5:69","type":""}],"src":"696:143:69"},{"body":{"nativeSrc":"934:28:69","nodeType":"YulBlock","src":"934:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"951:1:69","nodeType":"YulLiteral","src":"951:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"954:1:69","nodeType":"YulLiteral","src":"954:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"944:6:69","nodeType":"YulIdentifier","src":"944:6:69"},"nativeSrc":"944:12:69","nodeType":"YulFunctionCall","src":"944:12:69"},"nativeSrc":"944:12:69","nodeType":"YulExpressionStatement","src":"944:12:69"}]},"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"845:117:69","nodeType":"YulFunctionDefinition","src":"845:117:69"},{"body":{"nativeSrc":"1057:28:69","nodeType":"YulBlock","src":"1057:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1074:1:69","nodeType":"YulLiteral","src":"1074:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1077:1:69","nodeType":"YulLiteral","src":"1077:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1067:6:69","nodeType":"YulIdentifier","src":"1067:6:69"},"nativeSrc":"1067:12:69","nodeType":"YulFunctionCall","src":"1067:12:69"},"nativeSrc":"1067:12:69","nodeType":"YulExpressionStatement","src":"1067:12:69"}]},"name":"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae","nativeSrc":"968:117:69","nodeType":"YulFunctionDefinition","src":"968:117:69"},{"body":{"nativeSrc":"1139:54:69","nodeType":"YulBlock","src":"1139:54:69","statements":[{"nativeSrc":"1149:38:69","nodeType":"YulAssignment","src":"1149:38:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1167:5:69","nodeType":"YulIdentifier","src":"1167:5:69"},{"kind":"number","nativeSrc":"1174:2:69","nodeType":"YulLiteral","src":"1174:2:69","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"1163:3:69","nodeType":"YulIdentifier","src":"1163:3:69"},"nativeSrc":"1163:14:69","nodeType":"YulFunctionCall","src":"1163:14:69"},{"arguments":[{"kind":"number","nativeSrc":"1183:2:69","nodeType":"YulLiteral","src":"1183:2:69","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"1179:3:69","nodeType":"YulIdentifier","src":"1179:3:69"},"nativeSrc":"1179:7:69","nodeType":"YulFunctionCall","src":"1179:7:69"}],"functionName":{"name":"and","nativeSrc":"1159:3:69","nodeType":"YulIdentifier","src":"1159:3:69"},"nativeSrc":"1159:28:69","nodeType":"YulFunctionCall","src":"1159:28:69"},"variableNames":[{"name":"result","nativeSrc":"1149:6:69","nodeType":"YulIdentifier","src":"1149:6:69"}]}]},"name":"round_up_to_mul_of_32","nativeSrc":"1091:102:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1122:5:69","nodeType":"YulTypedName","src":"1122:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"1132:6:69","nodeType":"YulTypedName","src":"1132:6:69","type":""}],"src":"1091:102:69"},{"body":{"nativeSrc":"1227:152:69","nodeType":"YulBlock","src":"1227:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1244:1:69","nodeType":"YulLiteral","src":"1244:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1247:77:69","nodeType":"YulLiteral","src":"1247:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"1237:6:69","nodeType":"YulIdentifier","src":"1237:6:69"},"nativeSrc":"1237:88:69","nodeType":"YulFunctionCall","src":"1237:88:69"},"nativeSrc":"1237:88:69","nodeType":"YulExpressionStatement","src":"1237:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1341:1:69","nodeType":"YulLiteral","src":"1341:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"1344:4:69","nodeType":"YulLiteral","src":"1344:4:69","type":"","value":"0x41"}],"functionName":{"name":"mstore","nativeSrc":"1334:6:69","nodeType":"YulIdentifier","src":"1334:6:69"},"nativeSrc":"1334:15:69","nodeType":"YulFunctionCall","src":"1334:15:69"},"nativeSrc":"1334:15:69","nodeType":"YulExpressionStatement","src":"1334:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1365:1:69","nodeType":"YulLiteral","src":"1365:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1368:4:69","nodeType":"YulLiteral","src":"1368:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"1358:6:69","nodeType":"YulIdentifier","src":"1358:6:69"},"nativeSrc":"1358:15:69","nodeType":"YulFunctionCall","src":"1358:15:69"},"nativeSrc":"1358:15:69","nodeType":"YulExpressionStatement","src":"1358:15:69"}]},"name":"panic_error_0x41","nativeSrc":"1199:180:69","nodeType":"YulFunctionDefinition","src":"1199:180:69"},{"body":{"nativeSrc":"1428:238:69","nodeType":"YulBlock","src":"1428:238:69","statements":[{"nativeSrc":"1438:58:69","nodeType":"YulVariableDeclaration","src":"1438:58:69","value":{"arguments":[{"name":"memPtr","nativeSrc":"1460:6:69","nodeType":"YulIdentifier","src":"1460:6:69"},{"arguments":[{"name":"size","nativeSrc":"1490:4:69","nodeType":"YulIdentifier","src":"1490:4:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"1468:21:69","nodeType":"YulIdentifier","src":"1468:21:69"},"nativeSrc":"1468:27:69","nodeType":"YulFunctionCall","src":"1468:27:69"}],"functionName":{"name":"add","nativeSrc":"1456:3:69","nodeType":"YulIdentifier","src":"1456:3:69"},"nativeSrc":"1456:40:69","nodeType":"YulFunctionCall","src":"1456:40:69"},"variables":[{"name":"newFreePtr","nativeSrc":"1442:10:69","nodeType":"YulTypedName","src":"1442:10:69","type":""}]},{"body":{"nativeSrc":"1607:22:69","nodeType":"YulBlock","src":"1607:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"1609:16:69","nodeType":"YulIdentifier","src":"1609:16:69"},"nativeSrc":"1609:18:69","nodeType":"YulFunctionCall","src":"1609:18:69"},"nativeSrc":"1609:18:69","nodeType":"YulExpressionStatement","src":"1609:18:69"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nativeSrc":"1550:10:69","nodeType":"YulIdentifier","src":"1550:10:69"},{"kind":"number","nativeSrc":"1562:18:69","nodeType":"YulLiteral","src":"1562:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"1547:2:69","nodeType":"YulIdentifier","src":"1547:2:69"},"nativeSrc":"1547:34:69","nodeType":"YulFunctionCall","src":"1547:34:69"},{"arguments":[{"name":"newFreePtr","nativeSrc":"1586:10:69","nodeType":"YulIdentifier","src":"1586:10:69"},{"name":"memPtr","nativeSrc":"1598:6:69","nodeType":"YulIdentifier","src":"1598:6:69"}],"functionName":{"name":"lt","nativeSrc":"1583:2:69","nodeType":"YulIdentifier","src":"1583:2:69"},"nativeSrc":"1583:22:69","nodeType":"YulFunctionCall","src":"1583:22:69"}],"functionName":{"name":"or","nativeSrc":"1544:2:69","nodeType":"YulIdentifier","src":"1544:2:69"},"nativeSrc":"1544:62:69","nodeType":"YulFunctionCall","src":"1544:62:69"},"nativeSrc":"1541:88:69","nodeType":"YulIf","src":"1541:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1645:2:69","nodeType":"YulLiteral","src":"1645:2:69","type":"","value":"64"},{"name":"newFreePtr","nativeSrc":"1649:10:69","nodeType":"YulIdentifier","src":"1649:10:69"}],"functionName":{"name":"mstore","nativeSrc":"1638:6:69","nodeType":"YulIdentifier","src":"1638:6:69"},"nativeSrc":"1638:22:69","nodeType":"YulFunctionCall","src":"1638:22:69"},"nativeSrc":"1638:22:69","nodeType":"YulExpressionStatement","src":"1638:22:69"}]},"name":"finalize_allocation","nativeSrc":"1385:281:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"1414:6:69","nodeType":"YulTypedName","src":"1414:6:69","type":""},{"name":"size","nativeSrc":"1422:4:69","nodeType":"YulTypedName","src":"1422:4:69","type":""}],"src":"1385:281:69"},{"body":{"nativeSrc":"1713:88:69","nodeType":"YulBlock","src":"1713:88:69","statements":[{"nativeSrc":"1723:30:69","nodeType":"YulAssignment","src":"1723:30:69","value":{"arguments":[],"functionName":{"name":"allocate_unbounded","nativeSrc":"1733:18:69","nodeType":"YulIdentifier","src":"1733:18:69"},"nativeSrc":"1733:20:69","nodeType":"YulFunctionCall","src":"1733:20:69"},"variableNames":[{"name":"memPtr","nativeSrc":"1723:6:69","nodeType":"YulIdentifier","src":"1723:6:69"}]},{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"1782:6:69","nodeType":"YulIdentifier","src":"1782:6:69"},{"name":"size","nativeSrc":"1790:4:69","nodeType":"YulIdentifier","src":"1790:4:69"}],"functionName":{"name":"finalize_allocation","nativeSrc":"1762:19:69","nodeType":"YulIdentifier","src":"1762:19:69"},"nativeSrc":"1762:33:69","nodeType":"YulFunctionCall","src":"1762:33:69"},"nativeSrc":"1762:33:69","nodeType":"YulExpressionStatement","src":"1762:33:69"}]},"name":"allocate_memory","nativeSrc":"1672:129:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nativeSrc":"1697:4:69","nodeType":"YulTypedName","src":"1697:4:69","type":""}],"returnVariables":[{"name":"memPtr","nativeSrc":"1706:6:69","nodeType":"YulTypedName","src":"1706:6:69","type":""}],"src":"1672:129:69"},{"body":{"nativeSrc":"1873:241:69","nodeType":"YulBlock","src":"1873:241:69","statements":[{"body":{"nativeSrc":"1978:22:69","nodeType":"YulBlock","src":"1978:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"1980:16:69","nodeType":"YulIdentifier","src":"1980:16:69"},"nativeSrc":"1980:18:69","nodeType":"YulFunctionCall","src":"1980:18:69"},"nativeSrc":"1980:18:69","nodeType":"YulExpressionStatement","src":"1980:18:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"1950:6:69","nodeType":"YulIdentifier","src":"1950:6:69"},{"kind":"number","nativeSrc":"1958:18:69","nodeType":"YulLiteral","src":"1958:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"1947:2:69","nodeType":"YulIdentifier","src":"1947:2:69"},"nativeSrc":"1947:30:69","nodeType":"YulFunctionCall","src":"1947:30:69"},"nativeSrc":"1944:56:69","nodeType":"YulIf","src":"1944:56:69"},{"nativeSrc":"2010:37:69","nodeType":"YulAssignment","src":"2010:37:69","value":{"arguments":[{"name":"length","nativeSrc":"2040:6:69","nodeType":"YulIdentifier","src":"2040:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"2018:21:69","nodeType":"YulIdentifier","src":"2018:21:69"},"nativeSrc":"2018:29:69","nodeType":"YulFunctionCall","src":"2018:29:69"},"variableNames":[{"name":"size","nativeSrc":"2010:4:69","nodeType":"YulIdentifier","src":"2010:4:69"}]},{"nativeSrc":"2084:23:69","nodeType":"YulAssignment","src":"2084:23:69","value":{"arguments":[{"name":"size","nativeSrc":"2096:4:69","nodeType":"YulIdentifier","src":"2096:4:69"},{"kind":"number","nativeSrc":"2102:4:69","nodeType":"YulLiteral","src":"2102:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2092:3:69","nodeType":"YulIdentifier","src":"2092:3:69"},"nativeSrc":"2092:15:69","nodeType":"YulFunctionCall","src":"2092:15:69"},"variableNames":[{"name":"size","nativeSrc":"2084:4:69","nodeType":"YulIdentifier","src":"2084:4:69"}]}]},"name":"array_allocation_size_t_bytes_memory_ptr","nativeSrc":"1807:307:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nativeSrc":"1857:6:69","nodeType":"YulTypedName","src":"1857:6:69","type":""}],"returnVariables":[{"name":"size","nativeSrc":"1868:4:69","nodeType":"YulTypedName","src":"1868:4:69","type":""}],"src":"1807:307:69"},{"body":{"nativeSrc":"2182:186:69","nodeType":"YulBlock","src":"2182:186:69","statements":[{"nativeSrc":"2193:10:69","nodeType":"YulVariableDeclaration","src":"2193:10:69","value":{"kind":"number","nativeSrc":"2202:1:69","nodeType":"YulLiteral","src":"2202:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"2197:1:69","nodeType":"YulTypedName","src":"2197:1:69","type":""}]},{"body":{"nativeSrc":"2262:63:69","nodeType":"YulBlock","src":"2262:63:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"2287:3:69","nodeType":"YulIdentifier","src":"2287:3:69"},{"name":"i","nativeSrc":"2292:1:69","nodeType":"YulIdentifier","src":"2292:1:69"}],"functionName":{"name":"add","nativeSrc":"2283:3:69","nodeType":"YulIdentifier","src":"2283:3:69"},"nativeSrc":"2283:11:69","nodeType":"YulFunctionCall","src":"2283:11:69"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"2306:3:69","nodeType":"YulIdentifier","src":"2306:3:69"},{"name":"i","nativeSrc":"2311:1:69","nodeType":"YulIdentifier","src":"2311:1:69"}],"functionName":{"name":"add","nativeSrc":"2302:3:69","nodeType":"YulIdentifier","src":"2302:3:69"},"nativeSrc":"2302:11:69","nodeType":"YulFunctionCall","src":"2302:11:69"}],"functionName":{"name":"mload","nativeSrc":"2296:5:69","nodeType":"YulIdentifier","src":"2296:5:69"},"nativeSrc":"2296:18:69","nodeType":"YulFunctionCall","src":"2296:18:69"}],"functionName":{"name":"mstore","nativeSrc":"2276:6:69","nodeType":"YulIdentifier","src":"2276:6:69"},"nativeSrc":"2276:39:69","nodeType":"YulFunctionCall","src":"2276:39:69"},"nativeSrc":"2276:39:69","nodeType":"YulExpressionStatement","src":"2276:39:69"}]},"condition":{"arguments":[{"name":"i","nativeSrc":"2223:1:69","nodeType":"YulIdentifier","src":"2223:1:69"},{"name":"length","nativeSrc":"2226:6:69","nodeType":"YulIdentifier","src":"2226:6:69"}],"functionName":{"name":"lt","nativeSrc":"2220:2:69","nodeType":"YulIdentifier","src":"2220:2:69"},"nativeSrc":"2220:13:69","nodeType":"YulFunctionCall","src":"2220:13:69"},"nativeSrc":"2212:113:69","nodeType":"YulForLoop","post":{"nativeSrc":"2234:19:69","nodeType":"YulBlock","src":"2234:19:69","statements":[{"nativeSrc":"2236:15:69","nodeType":"YulAssignment","src":"2236:15:69","value":{"arguments":[{"name":"i","nativeSrc":"2245:1:69","nodeType":"YulIdentifier","src":"2245:1:69"},{"kind":"number","nativeSrc":"2248:2:69","nodeType":"YulLiteral","src":"2248:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2241:3:69","nodeType":"YulIdentifier","src":"2241:3:69"},"nativeSrc":"2241:10:69","nodeType":"YulFunctionCall","src":"2241:10:69"},"variableNames":[{"name":"i","nativeSrc":"2236:1:69","nodeType":"YulIdentifier","src":"2236:1:69"}]}]},"pre":{"nativeSrc":"2216:3:69","nodeType":"YulBlock","src":"2216:3:69","statements":[]},"src":"2212:113:69"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"2345:3:69","nodeType":"YulIdentifier","src":"2345:3:69"},{"name":"length","nativeSrc":"2350:6:69","nodeType":"YulIdentifier","src":"2350:6:69"}],"functionName":{"name":"add","nativeSrc":"2341:3:69","nodeType":"YulIdentifier","src":"2341:3:69"},"nativeSrc":"2341:16:69","nodeType":"YulFunctionCall","src":"2341:16:69"},{"kind":"number","nativeSrc":"2359:1:69","nodeType":"YulLiteral","src":"2359:1:69","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"2334:6:69","nodeType":"YulIdentifier","src":"2334:6:69"},"nativeSrc":"2334:27:69","nodeType":"YulFunctionCall","src":"2334:27:69"},"nativeSrc":"2334:27:69","nodeType":"YulExpressionStatement","src":"2334:27:69"}]},"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"2120:248:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"2164:3:69","nodeType":"YulTypedName","src":"2164:3:69","type":""},{"name":"dst","nativeSrc":"2169:3:69","nodeType":"YulTypedName","src":"2169:3:69","type":""},{"name":"length","nativeSrc":"2174:6:69","nodeType":"YulTypedName","src":"2174:6:69","type":""}],"src":"2120:248:69"},{"body":{"nativeSrc":"2468:338:69","nodeType":"YulBlock","src":"2468:338:69","statements":[{"nativeSrc":"2478:74:69","nodeType":"YulAssignment","src":"2478:74:69","value":{"arguments":[{"arguments":[{"name":"length","nativeSrc":"2544:6:69","nodeType":"YulIdentifier","src":"2544:6:69"}],"functionName":{"name":"array_allocation_size_t_bytes_memory_ptr","nativeSrc":"2503:40:69","nodeType":"YulIdentifier","src":"2503:40:69"},"nativeSrc":"2503:48:69","nodeType":"YulFunctionCall","src":"2503:48:69"}],"functionName":{"name":"allocate_memory","nativeSrc":"2487:15:69","nodeType":"YulIdentifier","src":"2487:15:69"},"nativeSrc":"2487:65:69","nodeType":"YulFunctionCall","src":"2487:65:69"},"variableNames":[{"name":"array","nativeSrc":"2478:5:69","nodeType":"YulIdentifier","src":"2478:5:69"}]},{"expression":{"arguments":[{"name":"array","nativeSrc":"2568:5:69","nodeType":"YulIdentifier","src":"2568:5:69"},{"name":"length","nativeSrc":"2575:6:69","nodeType":"YulIdentifier","src":"2575:6:69"}],"functionName":{"name":"mstore","nativeSrc":"2561:6:69","nodeType":"YulIdentifier","src":"2561:6:69"},"nativeSrc":"2561:21:69","nodeType":"YulFunctionCall","src":"2561:21:69"},"nativeSrc":"2561:21:69","nodeType":"YulExpressionStatement","src":"2561:21:69"},{"nativeSrc":"2591:27:69","nodeType":"YulVariableDeclaration","src":"2591:27:69","value":{"arguments":[{"name":"array","nativeSrc":"2606:5:69","nodeType":"YulIdentifier","src":"2606:5:69"},{"kind":"number","nativeSrc":"2613:4:69","nodeType":"YulLiteral","src":"2613:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2602:3:69","nodeType":"YulIdentifier","src":"2602:3:69"},"nativeSrc":"2602:16:69","nodeType":"YulFunctionCall","src":"2602:16:69"},"variables":[{"name":"dst","nativeSrc":"2595:3:69","nodeType":"YulTypedName","src":"2595:3:69","type":""}]},{"body":{"nativeSrc":"2656:83:69","nodeType":"YulBlock","src":"2656:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae","nativeSrc":"2658:77:69","nodeType":"YulIdentifier","src":"2658:77:69"},"nativeSrc":"2658:79:69","nodeType":"YulFunctionCall","src":"2658:79:69"},"nativeSrc":"2658:79:69","nodeType":"YulExpressionStatement","src":"2658:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"src","nativeSrc":"2637:3:69","nodeType":"YulIdentifier","src":"2637:3:69"},{"name":"length","nativeSrc":"2642:6:69","nodeType":"YulIdentifier","src":"2642:6:69"}],"functionName":{"name":"add","nativeSrc":"2633:3:69","nodeType":"YulIdentifier","src":"2633:3:69"},"nativeSrc":"2633:16:69","nodeType":"YulFunctionCall","src":"2633:16:69"},{"name":"end","nativeSrc":"2651:3:69","nodeType":"YulIdentifier","src":"2651:3:69"}],"functionName":{"name":"gt","nativeSrc":"2630:2:69","nodeType":"YulIdentifier","src":"2630:2:69"},"nativeSrc":"2630:25:69","nodeType":"YulFunctionCall","src":"2630:25:69"},"nativeSrc":"2627:112:69","nodeType":"YulIf","src":"2627:112:69"},{"expression":{"arguments":[{"name":"src","nativeSrc":"2783:3:69","nodeType":"YulIdentifier","src":"2783:3:69"},{"name":"dst","nativeSrc":"2788:3:69","nodeType":"YulIdentifier","src":"2788:3:69"},{"name":"length","nativeSrc":"2793:6:69","nodeType":"YulIdentifier","src":"2793:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"2748:34:69","nodeType":"YulIdentifier","src":"2748:34:69"},"nativeSrc":"2748:52:69","nodeType":"YulFunctionCall","src":"2748:52:69"},"nativeSrc":"2748:52:69","nodeType":"YulExpressionStatement","src":"2748:52:69"}]},"name":"abi_decode_available_length_t_bytes_memory_ptr_fromMemory","nativeSrc":"2374:432:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"2441:3:69","nodeType":"YulTypedName","src":"2441:3:69","type":""},{"name":"length","nativeSrc":"2446:6:69","nodeType":"YulTypedName","src":"2446:6:69","type":""},{"name":"end","nativeSrc":"2454:3:69","nodeType":"YulTypedName","src":"2454:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"2462:5:69","nodeType":"YulTypedName","src":"2462:5:69","type":""}],"src":"2374:432:69"},{"body":{"nativeSrc":"2897:281:69","nodeType":"YulBlock","src":"2897:281:69","statements":[{"body":{"nativeSrc":"2946:83:69","nodeType":"YulBlock","src":"2946:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"2948:77:69","nodeType":"YulIdentifier","src":"2948:77:69"},"nativeSrc":"2948:79:69","nodeType":"YulFunctionCall","src":"2948:79:69"},"nativeSrc":"2948:79:69","nodeType":"YulExpressionStatement","src":"2948:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"2925:6:69","nodeType":"YulIdentifier","src":"2925:6:69"},{"kind":"number","nativeSrc":"2933:4:69","nodeType":"YulLiteral","src":"2933:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"2921:3:69","nodeType":"YulIdentifier","src":"2921:3:69"},"nativeSrc":"2921:17:69","nodeType":"YulFunctionCall","src":"2921:17:69"},{"name":"end","nativeSrc":"2940:3:69","nodeType":"YulIdentifier","src":"2940:3:69"}],"functionName":{"name":"slt","nativeSrc":"2917:3:69","nodeType":"YulIdentifier","src":"2917:3:69"},"nativeSrc":"2917:27:69","nodeType":"YulFunctionCall","src":"2917:27:69"}],"functionName":{"name":"iszero","nativeSrc":"2910:6:69","nodeType":"YulIdentifier","src":"2910:6:69"},"nativeSrc":"2910:35:69","nodeType":"YulFunctionCall","src":"2910:35:69"},"nativeSrc":"2907:122:69","nodeType":"YulIf","src":"2907:122:69"},{"nativeSrc":"3038:27:69","nodeType":"YulVariableDeclaration","src":"3038:27:69","value":{"arguments":[{"name":"offset","nativeSrc":"3058:6:69","nodeType":"YulIdentifier","src":"3058:6:69"}],"functionName":{"name":"mload","nativeSrc":"3052:5:69","nodeType":"YulIdentifier","src":"3052:5:69"},"nativeSrc":"3052:13:69","nodeType":"YulFunctionCall","src":"3052:13:69"},"variables":[{"name":"length","nativeSrc":"3042:6:69","nodeType":"YulTypedName","src":"3042:6:69","type":""}]},{"nativeSrc":"3074:98:69","nodeType":"YulAssignment","src":"3074:98:69","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"3145:6:69","nodeType":"YulIdentifier","src":"3145:6:69"},{"kind":"number","nativeSrc":"3153:4:69","nodeType":"YulLiteral","src":"3153:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"3141:3:69","nodeType":"YulIdentifier","src":"3141:3:69"},"nativeSrc":"3141:17:69","nodeType":"YulFunctionCall","src":"3141:17:69"},{"name":"length","nativeSrc":"3160:6:69","nodeType":"YulIdentifier","src":"3160:6:69"},{"name":"end","nativeSrc":"3168:3:69","nodeType":"YulIdentifier","src":"3168:3:69"}],"functionName":{"name":"abi_decode_available_length_t_bytes_memory_ptr_fromMemory","nativeSrc":"3083:57:69","nodeType":"YulIdentifier","src":"3083:57:69"},"nativeSrc":"3083:89:69","nodeType":"YulFunctionCall","src":"3083:89:69"},"variableNames":[{"name":"array","nativeSrc":"3074:5:69","nodeType":"YulIdentifier","src":"3074:5:69"}]}]},"name":"abi_decode_t_bytes_memory_ptr_fromMemory","nativeSrc":"2825:353:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"2875:6:69","nodeType":"YulTypedName","src":"2875:6:69","type":""},{"name":"end","nativeSrc":"2883:3:69","nodeType":"YulTypedName","src":"2883:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"2891:5:69","nodeType":"YulTypedName","src":"2891:5:69","type":""}],"src":"2825:353:69"},{"body":{"nativeSrc":"3287:575:69","nodeType":"YulBlock","src":"3287:575:69","statements":[{"body":{"nativeSrc":"3333:83:69","nodeType":"YulBlock","src":"3333:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"3335:77:69","nodeType":"YulIdentifier","src":"3335:77:69"},"nativeSrc":"3335:79:69","nodeType":"YulFunctionCall","src":"3335:79:69"},"nativeSrc":"3335:79:69","nodeType":"YulExpressionStatement","src":"3335:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"3308:7:69","nodeType":"YulIdentifier","src":"3308:7:69"},{"name":"headStart","nativeSrc":"3317:9:69","nodeType":"YulIdentifier","src":"3317:9:69"}],"functionName":{"name":"sub","nativeSrc":"3304:3:69","nodeType":"YulIdentifier","src":"3304:3:69"},"nativeSrc":"3304:23:69","nodeType":"YulFunctionCall","src":"3304:23:69"},{"kind":"number","nativeSrc":"3329:2:69","nodeType":"YulLiteral","src":"3329:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"3300:3:69","nodeType":"YulIdentifier","src":"3300:3:69"},"nativeSrc":"3300:32:69","nodeType":"YulFunctionCall","src":"3300:32:69"},"nativeSrc":"3297:119:69","nodeType":"YulIf","src":"3297:119:69"},{"nativeSrc":"3426:128:69","nodeType":"YulBlock","src":"3426:128:69","statements":[{"nativeSrc":"3441:15:69","nodeType":"YulVariableDeclaration","src":"3441:15:69","value":{"kind":"number","nativeSrc":"3455:1:69","nodeType":"YulLiteral","src":"3455:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"3445:6:69","nodeType":"YulTypedName","src":"3445:6:69","type":""}]},{"nativeSrc":"3470:74:69","nodeType":"YulAssignment","src":"3470:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3516:9:69","nodeType":"YulIdentifier","src":"3516:9:69"},{"name":"offset","nativeSrc":"3527:6:69","nodeType":"YulIdentifier","src":"3527:6:69"}],"functionName":{"name":"add","nativeSrc":"3512:3:69","nodeType":"YulIdentifier","src":"3512:3:69"},"nativeSrc":"3512:22:69","nodeType":"YulFunctionCall","src":"3512:22:69"},{"name":"dataEnd","nativeSrc":"3536:7:69","nodeType":"YulIdentifier","src":"3536:7:69"}],"functionName":{"name":"abi_decode_t_address_fromMemory","nativeSrc":"3480:31:69","nodeType":"YulIdentifier","src":"3480:31:69"},"nativeSrc":"3480:64:69","nodeType":"YulFunctionCall","src":"3480:64:69"},"variableNames":[{"name":"value0","nativeSrc":"3470:6:69","nodeType":"YulIdentifier","src":"3470:6:69"}]}]},{"nativeSrc":"3564:291:69","nodeType":"YulBlock","src":"3564:291:69","statements":[{"nativeSrc":"3579:39:69","nodeType":"YulVariableDeclaration","src":"3579:39:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3603:9:69","nodeType":"YulIdentifier","src":"3603:9:69"},{"kind":"number","nativeSrc":"3614:2:69","nodeType":"YulLiteral","src":"3614:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3599:3:69","nodeType":"YulIdentifier","src":"3599:3:69"},"nativeSrc":"3599:18:69","nodeType":"YulFunctionCall","src":"3599:18:69"}],"functionName":{"name":"mload","nativeSrc":"3593:5:69","nodeType":"YulIdentifier","src":"3593:5:69"},"nativeSrc":"3593:25:69","nodeType":"YulFunctionCall","src":"3593:25:69"},"variables":[{"name":"offset","nativeSrc":"3583:6:69","nodeType":"YulTypedName","src":"3583:6:69","type":""}]},{"body":{"nativeSrc":"3665:83:69","nodeType":"YulBlock","src":"3665:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"3667:77:69","nodeType":"YulIdentifier","src":"3667:77:69"},"nativeSrc":"3667:79:69","nodeType":"YulFunctionCall","src":"3667:79:69"},"nativeSrc":"3667:79:69","nodeType":"YulExpressionStatement","src":"3667:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"3637:6:69","nodeType":"YulIdentifier","src":"3637:6:69"},{"kind":"number","nativeSrc":"3645:18:69","nodeType":"YulLiteral","src":"3645:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"3634:2:69","nodeType":"YulIdentifier","src":"3634:2:69"},"nativeSrc":"3634:30:69","nodeType":"YulFunctionCall","src":"3634:30:69"},"nativeSrc":"3631:117:69","nodeType":"YulIf","src":"3631:117:69"},{"nativeSrc":"3762:83:69","nodeType":"YulAssignment","src":"3762:83:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3817:9:69","nodeType":"YulIdentifier","src":"3817:9:69"},{"name":"offset","nativeSrc":"3828:6:69","nodeType":"YulIdentifier","src":"3828:6:69"}],"functionName":{"name":"add","nativeSrc":"3813:3:69","nodeType":"YulIdentifier","src":"3813:3:69"},"nativeSrc":"3813:22:69","nodeType":"YulFunctionCall","src":"3813:22:69"},{"name":"dataEnd","nativeSrc":"3837:7:69","nodeType":"YulIdentifier","src":"3837:7:69"}],"functionName":{"name":"abi_decode_t_bytes_memory_ptr_fromMemory","nativeSrc":"3772:40:69","nodeType":"YulIdentifier","src":"3772:40:69"},"nativeSrc":"3772:73:69","nodeType":"YulFunctionCall","src":"3772:73:69"},"variableNames":[{"name":"value1","nativeSrc":"3762:6:69","nodeType":"YulIdentifier","src":"3762:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory","nativeSrc":"3184:678:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3249:9:69","nodeType":"YulTypedName","src":"3249:9:69","type":""},{"name":"dataEnd","nativeSrc":"3260:7:69","nodeType":"YulTypedName","src":"3260:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"3272:6:69","nodeType":"YulTypedName","src":"3272:6:69","type":""},{"name":"value1","nativeSrc":"3280:6:69","nodeType":"YulTypedName","src":"3280:6:69","type":""}],"src":"3184:678:69"},{"body":{"nativeSrc":"3913:32:69","nodeType":"YulBlock","src":"3913:32:69","statements":[{"nativeSrc":"3923:16:69","nodeType":"YulAssignment","src":"3923:16:69","value":{"name":"value","nativeSrc":"3934:5:69","nodeType":"YulIdentifier","src":"3934:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"3923:7:69","nodeType":"YulIdentifier","src":"3923:7:69"}]}]},"name":"cleanup_t_uint256","nativeSrc":"3868:77:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3895:5:69","nodeType":"YulTypedName","src":"3895:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"3905:7:69","nodeType":"YulTypedName","src":"3905:7:69","type":""}],"src":"3868:77:69"},{"body":{"nativeSrc":"3979:152:69","nodeType":"YulBlock","src":"3979:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3996:1:69","nodeType":"YulLiteral","src":"3996:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"3999:77:69","nodeType":"YulLiteral","src":"3999:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"3989:6:69","nodeType":"YulIdentifier","src":"3989:6:69"},"nativeSrc":"3989:88:69","nodeType":"YulFunctionCall","src":"3989:88:69"},"nativeSrc":"3989:88:69","nodeType":"YulExpressionStatement","src":"3989:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4093:1:69","nodeType":"YulLiteral","src":"4093:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"4096:4:69","nodeType":"YulLiteral","src":"4096:4:69","type":"","value":"0x11"}],"functionName":{"name":"mstore","nativeSrc":"4086:6:69","nodeType":"YulIdentifier","src":"4086:6:69"},"nativeSrc":"4086:15:69","nodeType":"YulFunctionCall","src":"4086:15:69"},"nativeSrc":"4086:15:69","nodeType":"YulExpressionStatement","src":"4086:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4117:1:69","nodeType":"YulLiteral","src":"4117:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"4120:4:69","nodeType":"YulLiteral","src":"4120:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"4110:6:69","nodeType":"YulIdentifier","src":"4110:6:69"},"nativeSrc":"4110:15:69","nodeType":"YulFunctionCall","src":"4110:15:69"},"nativeSrc":"4110:15:69","nodeType":"YulExpressionStatement","src":"4110:15:69"}]},"name":"panic_error_0x11","nativeSrc":"3951:180:69","nodeType":"YulFunctionDefinition","src":"3951:180:69"},{"body":{"nativeSrc":"4182:149:69","nodeType":"YulBlock","src":"4182:149:69","statements":[{"nativeSrc":"4192:25:69","nodeType":"YulAssignment","src":"4192:25:69","value":{"arguments":[{"name":"x","nativeSrc":"4215:1:69","nodeType":"YulIdentifier","src":"4215:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"4197:17:69","nodeType":"YulIdentifier","src":"4197:17:69"},"nativeSrc":"4197:20:69","nodeType":"YulFunctionCall","src":"4197:20:69"},"variableNames":[{"name":"x","nativeSrc":"4192:1:69","nodeType":"YulIdentifier","src":"4192:1:69"}]},{"nativeSrc":"4226:25:69","nodeType":"YulAssignment","src":"4226:25:69","value":{"arguments":[{"name":"y","nativeSrc":"4249:1:69","nodeType":"YulIdentifier","src":"4249:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"4231:17:69","nodeType":"YulIdentifier","src":"4231:17:69"},"nativeSrc":"4231:20:69","nodeType":"YulFunctionCall","src":"4231:20:69"},"variableNames":[{"name":"y","nativeSrc":"4226:1:69","nodeType":"YulIdentifier","src":"4226:1:69"}]},{"nativeSrc":"4260:17:69","nodeType":"YulAssignment","src":"4260:17:69","value":{"arguments":[{"name":"x","nativeSrc":"4272:1:69","nodeType":"YulIdentifier","src":"4272:1:69"},{"name":"y","nativeSrc":"4275:1:69","nodeType":"YulIdentifier","src":"4275:1:69"}],"functionName":{"name":"sub","nativeSrc":"4268:3:69","nodeType":"YulIdentifier","src":"4268:3:69"},"nativeSrc":"4268:9:69","nodeType":"YulFunctionCall","src":"4268:9:69"},"variableNames":[{"name":"diff","nativeSrc":"4260:4:69","nodeType":"YulIdentifier","src":"4260:4:69"}]},{"body":{"nativeSrc":"4302:22:69","nodeType":"YulBlock","src":"4302:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"4304:16:69","nodeType":"YulIdentifier","src":"4304:16:69"},"nativeSrc":"4304:18:69","nodeType":"YulFunctionCall","src":"4304:18:69"},"nativeSrc":"4304:18:69","nodeType":"YulExpressionStatement","src":"4304:18:69"}]},"condition":{"arguments":[{"name":"diff","nativeSrc":"4293:4:69","nodeType":"YulIdentifier","src":"4293:4:69"},{"name":"x","nativeSrc":"4299:1:69","nodeType":"YulIdentifier","src":"4299:1:69"}],"functionName":{"name":"gt","nativeSrc":"4290:2:69","nodeType":"YulIdentifier","src":"4290:2:69"},"nativeSrc":"4290:11:69","nodeType":"YulFunctionCall","src":"4290:11:69"},"nativeSrc":"4287:37:69","nodeType":"YulIf","src":"4287:37:69"}]},"name":"checked_sub_t_uint256","nativeSrc":"4137:194:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"4168:1:69","nodeType":"YulTypedName","src":"4168:1:69","type":""},{"name":"y","nativeSrc":"4171:1:69","nodeType":"YulTypedName","src":"4171:1:69","type":""}],"returnVariables":[{"name":"diff","nativeSrc":"4177:4:69","nodeType":"YulTypedName","src":"4177:4:69","type":""}],"src":"4137:194:69"},{"body":{"nativeSrc":"4365:152:69","nodeType":"YulBlock","src":"4365:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4382:1:69","nodeType":"YulLiteral","src":"4382:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"4385:77:69","nodeType":"YulLiteral","src":"4385:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"4375:6:69","nodeType":"YulIdentifier","src":"4375:6:69"},"nativeSrc":"4375:88:69","nodeType":"YulFunctionCall","src":"4375:88:69"},"nativeSrc":"4375:88:69","nodeType":"YulExpressionStatement","src":"4375:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4479:1:69","nodeType":"YulLiteral","src":"4479:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"4482:4:69","nodeType":"YulLiteral","src":"4482:4:69","type":"","value":"0x01"}],"functionName":{"name":"mstore","nativeSrc":"4472:6:69","nodeType":"YulIdentifier","src":"4472:6:69"},"nativeSrc":"4472:15:69","nodeType":"YulFunctionCall","src":"4472:15:69"},"nativeSrc":"4472:15:69","nodeType":"YulExpressionStatement","src":"4472:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4503:1:69","nodeType":"YulLiteral","src":"4503:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"4506:4:69","nodeType":"YulLiteral","src":"4506:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"4496:6:69","nodeType":"YulIdentifier","src":"4496:6:69"},"nativeSrc":"4496:15:69","nodeType":"YulFunctionCall","src":"4496:15:69"},"nativeSrc":"4496:15:69","nodeType":"YulExpressionStatement","src":"4496:15:69"}]},"name":"panic_error_0x01","nativeSrc":"4337:180:69","nodeType":"YulFunctionDefinition","src":"4337:180:69"},{"body":{"nativeSrc":"4619:73:69","nodeType":"YulBlock","src":"4619:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"4636:3:69","nodeType":"YulIdentifier","src":"4636:3:69"},{"name":"length","nativeSrc":"4641:6:69","nodeType":"YulIdentifier","src":"4641:6:69"}],"functionName":{"name":"mstore","nativeSrc":"4629:6:69","nodeType":"YulIdentifier","src":"4629:6:69"},"nativeSrc":"4629:19:69","nodeType":"YulFunctionCall","src":"4629:19:69"},"nativeSrc":"4629:19:69","nodeType":"YulExpressionStatement","src":"4629:19:69"},{"nativeSrc":"4657:29:69","nodeType":"YulAssignment","src":"4657:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"4676:3:69","nodeType":"YulIdentifier","src":"4676:3:69"},{"kind":"number","nativeSrc":"4681:4:69","nodeType":"YulLiteral","src":"4681:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4672:3:69","nodeType":"YulIdentifier","src":"4672:3:69"},"nativeSrc":"4672:14:69","nodeType":"YulFunctionCall","src":"4672:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"4657:11:69","nodeType":"YulIdentifier","src":"4657:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"4523:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"4591:3:69","nodeType":"YulTypedName","src":"4591:3:69","type":""},{"name":"length","nativeSrc":"4596:6:69","nodeType":"YulTypedName","src":"4596:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"4607:11:69","nodeType":"YulTypedName","src":"4607:11:69","type":""}],"src":"4523:169:69"},{"body":{"nativeSrc":"4804:126:69","nodeType":"YulBlock","src":"4804:126:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"4826:6:69","nodeType":"YulIdentifier","src":"4826:6:69"},{"kind":"number","nativeSrc":"4834:1:69","nodeType":"YulLiteral","src":"4834:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4822:3:69","nodeType":"YulIdentifier","src":"4822:3:69"},"nativeSrc":"4822:14:69","nodeType":"YulFunctionCall","src":"4822:14:69"},{"hexValue":"455243313936373a206e657720696d706c656d656e746174696f6e206973206e","kind":"string","nativeSrc":"4838:34:69","nodeType":"YulLiteral","src":"4838:34:69","type":"","value":"ERC1967: new implementation is n"}],"functionName":{"name":"mstore","nativeSrc":"4815:6:69","nodeType":"YulIdentifier","src":"4815:6:69"},"nativeSrc":"4815:58:69","nodeType":"YulFunctionCall","src":"4815:58:69"},"nativeSrc":"4815:58:69","nodeType":"YulExpressionStatement","src":"4815:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"4894:6:69","nodeType":"YulIdentifier","src":"4894:6:69"},{"kind":"number","nativeSrc":"4902:2:69","nodeType":"YulLiteral","src":"4902:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4890:3:69","nodeType":"YulIdentifier","src":"4890:3:69"},"nativeSrc":"4890:15:69","nodeType":"YulFunctionCall","src":"4890:15:69"},{"hexValue":"6f74206120636f6e7472616374","kind":"string","nativeSrc":"4907:15:69","nodeType":"YulLiteral","src":"4907:15:69","type":"","value":"ot a contract"}],"functionName":{"name":"mstore","nativeSrc":"4883:6:69","nodeType":"YulIdentifier","src":"4883:6:69"},"nativeSrc":"4883:40:69","nodeType":"YulFunctionCall","src":"4883:40:69"},"nativeSrc":"4883:40:69","nodeType":"YulExpressionStatement","src":"4883:40:69"}]},"name":"store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65","nativeSrc":"4698:232:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"4796:6:69","nodeType":"YulTypedName","src":"4796:6:69","type":""}],"src":"4698:232:69"},{"body":{"nativeSrc":"5082:220:69","nodeType":"YulBlock","src":"5082:220:69","statements":[{"nativeSrc":"5092:74:69","nodeType":"YulAssignment","src":"5092:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"5158:3:69","nodeType":"YulIdentifier","src":"5158:3:69"},{"kind":"number","nativeSrc":"5163:2:69","nodeType":"YulLiteral","src":"5163:2:69","type":"","value":"45"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"5099:58:69","nodeType":"YulIdentifier","src":"5099:58:69"},"nativeSrc":"5099:67:69","nodeType":"YulFunctionCall","src":"5099:67:69"},"variableNames":[{"name":"pos","nativeSrc":"5092:3:69","nodeType":"YulIdentifier","src":"5092:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"5264:3:69","nodeType":"YulIdentifier","src":"5264:3:69"}],"functionName":{"name":"store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65","nativeSrc":"5175:88:69","nodeType":"YulIdentifier","src":"5175:88:69"},"nativeSrc":"5175:93:69","nodeType":"YulFunctionCall","src":"5175:93:69"},"nativeSrc":"5175:93:69","nodeType":"YulExpressionStatement","src":"5175:93:69"},{"nativeSrc":"5277:19:69","nodeType":"YulAssignment","src":"5277:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"5288:3:69","nodeType":"YulIdentifier","src":"5288:3:69"},{"kind":"number","nativeSrc":"5293:2:69","nodeType":"YulLiteral","src":"5293:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"5284:3:69","nodeType":"YulIdentifier","src":"5284:3:69"},"nativeSrc":"5284:12:69","nodeType":"YulFunctionCall","src":"5284:12:69"},"variableNames":[{"name":"end","nativeSrc":"5277:3:69","nodeType":"YulIdentifier","src":"5277:3:69"}]}]},"name":"abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack","nativeSrc":"4936:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"5070:3:69","nodeType":"YulTypedName","src":"5070:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"5078:3:69","nodeType":"YulTypedName","src":"5078:3:69","type":""}],"src":"4936:366:69"},{"body":{"nativeSrc":"5479:248:69","nodeType":"YulBlock","src":"5479:248:69","statements":[{"nativeSrc":"5489:26:69","nodeType":"YulAssignment","src":"5489:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"5501:9:69","nodeType":"YulIdentifier","src":"5501:9:69"},{"kind":"number","nativeSrc":"5512:2:69","nodeType":"YulLiteral","src":"5512:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5497:3:69","nodeType":"YulIdentifier","src":"5497:3:69"},"nativeSrc":"5497:18:69","nodeType":"YulFunctionCall","src":"5497:18:69"},"variableNames":[{"name":"tail","nativeSrc":"5489:4:69","nodeType":"YulIdentifier","src":"5489:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5536:9:69","nodeType":"YulIdentifier","src":"5536:9:69"},{"kind":"number","nativeSrc":"5547:1:69","nodeType":"YulLiteral","src":"5547:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5532:3:69","nodeType":"YulIdentifier","src":"5532:3:69"},"nativeSrc":"5532:17:69","nodeType":"YulFunctionCall","src":"5532:17:69"},{"arguments":[{"name":"tail","nativeSrc":"5555:4:69","nodeType":"YulIdentifier","src":"5555:4:69"},{"name":"headStart","nativeSrc":"5561:9:69","nodeType":"YulIdentifier","src":"5561:9:69"}],"functionName":{"name":"sub","nativeSrc":"5551:3:69","nodeType":"YulIdentifier","src":"5551:3:69"},"nativeSrc":"5551:20:69","nodeType":"YulFunctionCall","src":"5551:20:69"}],"functionName":{"name":"mstore","nativeSrc":"5525:6:69","nodeType":"YulIdentifier","src":"5525:6:69"},"nativeSrc":"5525:47:69","nodeType":"YulFunctionCall","src":"5525:47:69"},"nativeSrc":"5525:47:69","nodeType":"YulExpressionStatement","src":"5525:47:69"},{"nativeSrc":"5581:139:69","nodeType":"YulAssignment","src":"5581:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"5715:4:69","nodeType":"YulIdentifier","src":"5715:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack","nativeSrc":"5589:124:69","nodeType":"YulIdentifier","src":"5589:124:69"},"nativeSrc":"5589:131:69","nodeType":"YulFunctionCall","src":"5589:131:69"},"variableNames":[{"name":"tail","nativeSrc":"5581:4:69","nodeType":"YulIdentifier","src":"5581:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"5308:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5459:9:69","nodeType":"YulTypedName","src":"5459:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"5474:4:69","nodeType":"YulTypedName","src":"5474:4:69","type":""}],"src":"5308:419:69"},{"body":{"nativeSrc":"5839:119:69","nodeType":"YulBlock","src":"5839:119:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"5861:6:69","nodeType":"YulIdentifier","src":"5861:6:69"},{"kind":"number","nativeSrc":"5869:1:69","nodeType":"YulLiteral","src":"5869:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5857:3:69","nodeType":"YulIdentifier","src":"5857:3:69"},"nativeSrc":"5857:14:69","nodeType":"YulFunctionCall","src":"5857:14:69"},{"hexValue":"416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f","kind":"string","nativeSrc":"5873:34:69","nodeType":"YulLiteral","src":"5873:34:69","type":"","value":"Address: delegate call to non-co"}],"functionName":{"name":"mstore","nativeSrc":"5850:6:69","nodeType":"YulIdentifier","src":"5850:6:69"},"nativeSrc":"5850:58:69","nodeType":"YulFunctionCall","src":"5850:58:69"},"nativeSrc":"5850:58:69","nodeType":"YulExpressionStatement","src":"5850:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"5929:6:69","nodeType":"YulIdentifier","src":"5929:6:69"},{"kind":"number","nativeSrc":"5937:2:69","nodeType":"YulLiteral","src":"5937:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5925:3:69","nodeType":"YulIdentifier","src":"5925:3:69"},"nativeSrc":"5925:15:69","nodeType":"YulFunctionCall","src":"5925:15:69"},{"hexValue":"6e7472616374","kind":"string","nativeSrc":"5942:8:69","nodeType":"YulLiteral","src":"5942:8:69","type":"","value":"ntract"}],"functionName":{"name":"mstore","nativeSrc":"5918:6:69","nodeType":"YulIdentifier","src":"5918:6:69"},"nativeSrc":"5918:33:69","nodeType":"YulFunctionCall","src":"5918:33:69"},"nativeSrc":"5918:33:69","nodeType":"YulExpressionStatement","src":"5918:33:69"}]},"name":"store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520","nativeSrc":"5733:225:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"5831:6:69","nodeType":"YulTypedName","src":"5831:6:69","type":""}],"src":"5733:225:69"},{"body":{"nativeSrc":"6110:220:69","nodeType":"YulBlock","src":"6110:220:69","statements":[{"nativeSrc":"6120:74:69","nodeType":"YulAssignment","src":"6120:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"6186:3:69","nodeType":"YulIdentifier","src":"6186:3:69"},{"kind":"number","nativeSrc":"6191:2:69","nodeType":"YulLiteral","src":"6191:2:69","type":"","value":"38"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"6127:58:69","nodeType":"YulIdentifier","src":"6127:58:69"},"nativeSrc":"6127:67:69","nodeType":"YulFunctionCall","src":"6127:67:69"},"variableNames":[{"name":"pos","nativeSrc":"6120:3:69","nodeType":"YulIdentifier","src":"6120:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"6292:3:69","nodeType":"YulIdentifier","src":"6292:3:69"}],"functionName":{"name":"store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520","nativeSrc":"6203:88:69","nodeType":"YulIdentifier","src":"6203:88:69"},"nativeSrc":"6203:93:69","nodeType":"YulFunctionCall","src":"6203:93:69"},"nativeSrc":"6203:93:69","nodeType":"YulExpressionStatement","src":"6203:93:69"},{"nativeSrc":"6305:19:69","nodeType":"YulAssignment","src":"6305:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"6316:3:69","nodeType":"YulIdentifier","src":"6316:3:69"},{"kind":"number","nativeSrc":"6321:2:69","nodeType":"YulLiteral","src":"6321:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"6312:3:69","nodeType":"YulIdentifier","src":"6312:3:69"},"nativeSrc":"6312:12:69","nodeType":"YulFunctionCall","src":"6312:12:69"},"variableNames":[{"name":"end","nativeSrc":"6305:3:69","nodeType":"YulIdentifier","src":"6305:3:69"}]}]},"name":"abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack","nativeSrc":"5964:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"6098:3:69","nodeType":"YulTypedName","src":"6098:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"6106:3:69","nodeType":"YulTypedName","src":"6106:3:69","type":""}],"src":"5964:366:69"},{"body":{"nativeSrc":"6507:248:69","nodeType":"YulBlock","src":"6507:248:69","statements":[{"nativeSrc":"6517:26:69","nodeType":"YulAssignment","src":"6517:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"6529:9:69","nodeType":"YulIdentifier","src":"6529:9:69"},{"kind":"number","nativeSrc":"6540:2:69","nodeType":"YulLiteral","src":"6540:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"6525:3:69","nodeType":"YulIdentifier","src":"6525:3:69"},"nativeSrc":"6525:18:69","nodeType":"YulFunctionCall","src":"6525:18:69"},"variableNames":[{"name":"tail","nativeSrc":"6517:4:69","nodeType":"YulIdentifier","src":"6517:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6564:9:69","nodeType":"YulIdentifier","src":"6564:9:69"},{"kind":"number","nativeSrc":"6575:1:69","nodeType":"YulLiteral","src":"6575:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"6560:3:69","nodeType":"YulIdentifier","src":"6560:3:69"},"nativeSrc":"6560:17:69","nodeType":"YulFunctionCall","src":"6560:17:69"},{"arguments":[{"name":"tail","nativeSrc":"6583:4:69","nodeType":"YulIdentifier","src":"6583:4:69"},{"name":"headStart","nativeSrc":"6589:9:69","nodeType":"YulIdentifier","src":"6589:9:69"}],"functionName":{"name":"sub","nativeSrc":"6579:3:69","nodeType":"YulIdentifier","src":"6579:3:69"},"nativeSrc":"6579:20:69","nodeType":"YulFunctionCall","src":"6579:20:69"}],"functionName":{"name":"mstore","nativeSrc":"6553:6:69","nodeType":"YulIdentifier","src":"6553:6:69"},"nativeSrc":"6553:47:69","nodeType":"YulFunctionCall","src":"6553:47:69"},"nativeSrc":"6553:47:69","nodeType":"YulExpressionStatement","src":"6553:47:69"},{"nativeSrc":"6609:139:69","nodeType":"YulAssignment","src":"6609:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"6743:4:69","nodeType":"YulIdentifier","src":"6743:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack","nativeSrc":"6617:124:69","nodeType":"YulIdentifier","src":"6617:124:69"},"nativeSrc":"6617:131:69","nodeType":"YulFunctionCall","src":"6617:131:69"},"variableNames":[{"name":"tail","nativeSrc":"6609:4:69","nodeType":"YulIdentifier","src":"6609:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"6336:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6487:9:69","nodeType":"YulTypedName","src":"6487:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"6502:4:69","nodeType":"YulTypedName","src":"6502:4:69","type":""}],"src":"6336:419:69"},{"body":{"nativeSrc":"6819:40:69","nodeType":"YulBlock","src":"6819:40:69","statements":[{"nativeSrc":"6830:22:69","nodeType":"YulAssignment","src":"6830:22:69","value":{"arguments":[{"name":"value","nativeSrc":"6846:5:69","nodeType":"YulIdentifier","src":"6846:5:69"}],"functionName":{"name":"mload","nativeSrc":"6840:5:69","nodeType":"YulIdentifier","src":"6840:5:69"},"nativeSrc":"6840:12:69","nodeType":"YulFunctionCall","src":"6840:12:69"},"variableNames":[{"name":"length","nativeSrc":"6830:6:69","nodeType":"YulIdentifier","src":"6830:6:69"}]}]},"name":"array_length_t_bytes_memory_ptr","nativeSrc":"6761:98:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"6802:5:69","nodeType":"YulTypedName","src":"6802:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"6812:6:69","nodeType":"YulTypedName","src":"6812:6:69","type":""}],"src":"6761:98:69"},{"body":{"nativeSrc":"6978:34:69","nodeType":"YulBlock","src":"6978:34:69","statements":[{"nativeSrc":"6988:18:69","nodeType":"YulAssignment","src":"6988:18:69","value":{"name":"pos","nativeSrc":"7003:3:69","nodeType":"YulIdentifier","src":"7003:3:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"6988:11:69","nodeType":"YulIdentifier","src":"6988:11:69"}]}]},"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"6865:147:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"6950:3:69","nodeType":"YulTypedName","src":"6950:3:69","type":""},{"name":"length","nativeSrc":"6955:6:69","nodeType":"YulTypedName","src":"6955:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"6966:11:69","nodeType":"YulTypedName","src":"6966:11:69","type":""}],"src":"6865:147:69"},{"body":{"nativeSrc":"7126:278:69","nodeType":"YulBlock","src":"7126:278:69","statements":[{"nativeSrc":"7136:52:69","nodeType":"YulVariableDeclaration","src":"7136:52:69","value":{"arguments":[{"name":"value","nativeSrc":"7182:5:69","nodeType":"YulIdentifier","src":"7182:5:69"}],"functionName":{"name":"array_length_t_bytes_memory_ptr","nativeSrc":"7150:31:69","nodeType":"YulIdentifier","src":"7150:31:69"},"nativeSrc":"7150:38:69","nodeType":"YulFunctionCall","src":"7150:38:69"},"variables":[{"name":"length","nativeSrc":"7140:6:69","nodeType":"YulTypedName","src":"7140:6:69","type":""}]},{"nativeSrc":"7197:95:69","nodeType":"YulAssignment","src":"7197:95:69","value":{"arguments":[{"name":"pos","nativeSrc":"7280:3:69","nodeType":"YulIdentifier","src":"7280:3:69"},{"name":"length","nativeSrc":"7285:6:69","nodeType":"YulIdentifier","src":"7285:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"7204:75:69","nodeType":"YulIdentifier","src":"7204:75:69"},"nativeSrc":"7204:88:69","nodeType":"YulFunctionCall","src":"7204:88:69"},"variableNames":[{"name":"pos","nativeSrc":"7197:3:69","nodeType":"YulIdentifier","src":"7197:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"7340:5:69","nodeType":"YulIdentifier","src":"7340:5:69"},{"kind":"number","nativeSrc":"7347:4:69","nodeType":"YulLiteral","src":"7347:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"7336:3:69","nodeType":"YulIdentifier","src":"7336:3:69"},"nativeSrc":"7336:16:69","nodeType":"YulFunctionCall","src":"7336:16:69"},{"name":"pos","nativeSrc":"7354:3:69","nodeType":"YulIdentifier","src":"7354:3:69"},{"name":"length","nativeSrc":"7359:6:69","nodeType":"YulIdentifier","src":"7359:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"7301:34:69","nodeType":"YulIdentifier","src":"7301:34:69"},"nativeSrc":"7301:65:69","nodeType":"YulFunctionCall","src":"7301:65:69"},"nativeSrc":"7301:65:69","nodeType":"YulExpressionStatement","src":"7301:65:69"},{"nativeSrc":"7375:23:69","nodeType":"YulAssignment","src":"7375:23:69","value":{"arguments":[{"name":"pos","nativeSrc":"7386:3:69","nodeType":"YulIdentifier","src":"7386:3:69"},{"name":"length","nativeSrc":"7391:6:69","nodeType":"YulIdentifier","src":"7391:6:69"}],"functionName":{"name":"add","nativeSrc":"7382:3:69","nodeType":"YulIdentifier","src":"7382:3:69"},"nativeSrc":"7382:16:69","nodeType":"YulFunctionCall","src":"7382:16:69"},"variableNames":[{"name":"end","nativeSrc":"7375:3:69","nodeType":"YulIdentifier","src":"7375:3:69"}]}]},"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"7018:386:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7107:5:69","nodeType":"YulTypedName","src":"7107:5:69","type":""},{"name":"pos","nativeSrc":"7114:3:69","nodeType":"YulTypedName","src":"7114:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"7122:3:69","nodeType":"YulTypedName","src":"7122:3:69","type":""}],"src":"7018:386:69"},{"body":{"nativeSrc":"7544:137:69","nodeType":"YulBlock","src":"7544:137:69","statements":[{"nativeSrc":"7555:100:69","nodeType":"YulAssignment","src":"7555:100:69","value":{"arguments":[{"name":"value0","nativeSrc":"7642:6:69","nodeType":"YulIdentifier","src":"7642:6:69"},{"name":"pos","nativeSrc":"7651:3:69","nodeType":"YulIdentifier","src":"7651:3:69"}],"functionName":{"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"7562:79:69","nodeType":"YulIdentifier","src":"7562:79:69"},"nativeSrc":"7562:93:69","nodeType":"YulFunctionCall","src":"7562:93:69"},"variableNames":[{"name":"pos","nativeSrc":"7555:3:69","nodeType":"YulIdentifier","src":"7555:3:69"}]},{"nativeSrc":"7665:10:69","nodeType":"YulAssignment","src":"7665:10:69","value":{"name":"pos","nativeSrc":"7672:3:69","nodeType":"YulIdentifier","src":"7672:3:69"},"variableNames":[{"name":"end","nativeSrc":"7665:3:69","nodeType":"YulIdentifier","src":"7665:3:69"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nativeSrc":"7410:271:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"7523:3:69","nodeType":"YulTypedName","src":"7523:3:69","type":""},{"name":"value0","nativeSrc":"7529:6:69","nodeType":"YulTypedName","src":"7529:6:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"7540:3:69","nodeType":"YulTypedName","src":"7540:3:69","type":""}],"src":"7410:271:69"},{"body":{"nativeSrc":"7746:40:69","nodeType":"YulBlock","src":"7746:40:69","statements":[{"nativeSrc":"7757:22:69","nodeType":"YulAssignment","src":"7757:22:69","value":{"arguments":[{"name":"value","nativeSrc":"7773:5:69","nodeType":"YulIdentifier","src":"7773:5:69"}],"functionName":{"name":"mload","nativeSrc":"7767:5:69","nodeType":"YulIdentifier","src":"7767:5:69"},"nativeSrc":"7767:12:69","nodeType":"YulFunctionCall","src":"7767:12:69"},"variableNames":[{"name":"length","nativeSrc":"7757:6:69","nodeType":"YulIdentifier","src":"7757:6:69"}]}]},"name":"array_length_t_string_memory_ptr","nativeSrc":"7687:99:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7729:5:69","nodeType":"YulTypedName","src":"7729:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"7739:6:69","nodeType":"YulTypedName","src":"7739:6:69","type":""}],"src":"7687:99:69"},{"body":{"nativeSrc":"7884:285:69","nodeType":"YulBlock","src":"7884:285:69","statements":[{"nativeSrc":"7894:53:69","nodeType":"YulVariableDeclaration","src":"7894:53:69","value":{"arguments":[{"name":"value","nativeSrc":"7941:5:69","nodeType":"YulIdentifier","src":"7941:5:69"}],"functionName":{"name":"array_length_t_string_memory_ptr","nativeSrc":"7908:32:69","nodeType":"YulIdentifier","src":"7908:32:69"},"nativeSrc":"7908:39:69","nodeType":"YulFunctionCall","src":"7908:39:69"},"variables":[{"name":"length","nativeSrc":"7898:6:69","nodeType":"YulTypedName","src":"7898:6:69","type":""}]},{"nativeSrc":"7956:78:69","nodeType":"YulAssignment","src":"7956:78:69","value":{"arguments":[{"name":"pos","nativeSrc":"8022:3:69","nodeType":"YulIdentifier","src":"8022:3:69"},{"name":"length","nativeSrc":"8027:6:69","nodeType":"YulIdentifier","src":"8027:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"7963:58:69","nodeType":"YulIdentifier","src":"7963:58:69"},"nativeSrc":"7963:71:69","nodeType":"YulFunctionCall","src":"7963:71:69"},"variableNames":[{"name":"pos","nativeSrc":"7956:3:69","nodeType":"YulIdentifier","src":"7956:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"8082:5:69","nodeType":"YulIdentifier","src":"8082:5:69"},{"kind":"number","nativeSrc":"8089:4:69","nodeType":"YulLiteral","src":"8089:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"8078:3:69","nodeType":"YulIdentifier","src":"8078:3:69"},"nativeSrc":"8078:16:69","nodeType":"YulFunctionCall","src":"8078:16:69"},{"name":"pos","nativeSrc":"8096:3:69","nodeType":"YulIdentifier","src":"8096:3:69"},{"name":"length","nativeSrc":"8101:6:69","nodeType":"YulIdentifier","src":"8101:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"8043:34:69","nodeType":"YulIdentifier","src":"8043:34:69"},"nativeSrc":"8043:65:69","nodeType":"YulFunctionCall","src":"8043:65:69"},"nativeSrc":"8043:65:69","nodeType":"YulExpressionStatement","src":"8043:65:69"},{"nativeSrc":"8117:46:69","nodeType":"YulAssignment","src":"8117:46:69","value":{"arguments":[{"name":"pos","nativeSrc":"8128:3:69","nodeType":"YulIdentifier","src":"8128:3:69"},{"arguments":[{"name":"length","nativeSrc":"8155:6:69","nodeType":"YulIdentifier","src":"8155:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"8133:21:69","nodeType":"YulIdentifier","src":"8133:21:69"},"nativeSrc":"8133:29:69","nodeType":"YulFunctionCall","src":"8133:29:69"}],"functionName":{"name":"add","nativeSrc":"8124:3:69","nodeType":"YulIdentifier","src":"8124:3:69"},"nativeSrc":"8124:39:69","nodeType":"YulFunctionCall","src":"8124:39:69"},"variableNames":[{"name":"end","nativeSrc":"8117:3:69","nodeType":"YulIdentifier","src":"8117:3:69"}]}]},"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"7792:377:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7865:5:69","nodeType":"YulTypedName","src":"7865:5:69","type":""},{"name":"pos","nativeSrc":"7872:3:69","nodeType":"YulTypedName","src":"7872:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"7880:3:69","nodeType":"YulTypedName","src":"7880:3:69","type":""}],"src":"7792:377:69"},{"body":{"nativeSrc":"8293:195:69","nodeType":"YulBlock","src":"8293:195:69","statements":[{"nativeSrc":"8303:26:69","nodeType":"YulAssignment","src":"8303:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"8315:9:69","nodeType":"YulIdentifier","src":"8315:9:69"},{"kind":"number","nativeSrc":"8326:2:69","nodeType":"YulLiteral","src":"8326:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8311:3:69","nodeType":"YulIdentifier","src":"8311:3:69"},"nativeSrc":"8311:18:69","nodeType":"YulFunctionCall","src":"8311:18:69"},"variableNames":[{"name":"tail","nativeSrc":"8303:4:69","nodeType":"YulIdentifier","src":"8303:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8350:9:69","nodeType":"YulIdentifier","src":"8350:9:69"},{"kind":"number","nativeSrc":"8361:1:69","nodeType":"YulLiteral","src":"8361:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"8346:3:69","nodeType":"YulIdentifier","src":"8346:3:69"},"nativeSrc":"8346:17:69","nodeType":"YulFunctionCall","src":"8346:17:69"},{"arguments":[{"name":"tail","nativeSrc":"8369:4:69","nodeType":"YulIdentifier","src":"8369:4:69"},{"name":"headStart","nativeSrc":"8375:9:69","nodeType":"YulIdentifier","src":"8375:9:69"}],"functionName":{"name":"sub","nativeSrc":"8365:3:69","nodeType":"YulIdentifier","src":"8365:3:69"},"nativeSrc":"8365:20:69","nodeType":"YulFunctionCall","src":"8365:20:69"}],"functionName":{"name":"mstore","nativeSrc":"8339:6:69","nodeType":"YulIdentifier","src":"8339:6:69"},"nativeSrc":"8339:47:69","nodeType":"YulFunctionCall","src":"8339:47:69"},"nativeSrc":"8339:47:69","nodeType":"YulExpressionStatement","src":"8339:47:69"},{"nativeSrc":"8395:86:69","nodeType":"YulAssignment","src":"8395:86:69","value":{"arguments":[{"name":"value0","nativeSrc":"8467:6:69","nodeType":"YulIdentifier","src":"8467:6:69"},{"name":"tail","nativeSrc":"8476:4:69","nodeType":"YulIdentifier","src":"8476:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"8403:63:69","nodeType":"YulIdentifier","src":"8403:63:69"},"nativeSrc":"8403:78:69","nodeType":"YulFunctionCall","src":"8403:78:69"},"variableNames":[{"name":"tail","nativeSrc":"8395:4:69","nodeType":"YulIdentifier","src":"8395:4:69"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"8175:313:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8265:9:69","nodeType":"YulTypedName","src":"8265:9:69","type":""},{"name":"value0","nativeSrc":"8277:6:69","nodeType":"YulTypedName","src":"8277:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"8288:4:69","nodeType":"YulTypedName","src":"8288:4:69","type":""}],"src":"8175:313:69"}]},"contents":"{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n        revert(0, 0)\n    }\n\n    function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n        revert(0, 0)\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    function panic_error_0x41() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n\n    function finalize_allocation(memPtr, size) {\n        let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n        // protect against overflow\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n\n    function allocate_memory(size) -> memPtr {\n        memPtr := allocate_unbounded()\n        finalize_allocation(memPtr, size)\n    }\n\n    function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n        // Make sure we can allocate memory without overflow\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n        size := round_up_to_mul_of_32(length)\n\n        // add length slot\n        size := add(size, 0x20)\n\n    }\n\n    function copy_memory_to_memory_with_cleanup(src, dst, length) {\n\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n\n    }\n\n    function abi_decode_available_length_t_bytes_memory_ptr_fromMemory(src, length, end) -> array {\n        array := allocate_memory(array_allocation_size_t_bytes_memory_ptr(length))\n        mstore(array, length)\n        let dst := add(array, 0x20)\n        if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n        copy_memory_to_memory_with_cleanup(src, dst, length)\n    }\n\n    // bytes\n    function abi_decode_t_bytes_memory_ptr_fromMemory(offset, end) -> array {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        let length := mload(offset)\n        array := abi_decode_available_length_t_bytes_memory_ptr_fromMemory(add(offset, 0x20), length, end)\n    }\n\n    function abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := mload(add(headStart, 32))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value1 := abi_decode_t_bytes_memory_ptr_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function panic_error_0x11() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n\n    function checked_sub_t_uint256(x, y) -> diff {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        diff := sub(x, y)\n\n        if gt(diff, x) { panic_error_0x11() }\n\n    }\n\n    function panic_error_0x01() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x01)\n        revert(0, 0x24)\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC1967: new implementation is n\")\n\n        mstore(add(memPtr, 32), \"ot a contract\")\n\n    }\n\n    function abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 45)\n        store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520(memPtr) {\n\n        mstore(add(memPtr, 0), \"Address: delegate call to non-co\")\n\n        mstore(add(memPtr, 32), \"ntract\")\n\n    }\n\n    function abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 38)\n        store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function array_length_t_bytes_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n        updated_pos := pos\n    }\n\n    function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n        let length := array_length_t_bytes_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, length)\n    }\n\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n        pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0,  pos)\n\n        end := pos\n    }\n\n    function array_length_t_string_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n        let length := array_length_t_string_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0,  tail)\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60806040526040516106583803806106588339810160408190526100229161039b565b61004d60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd610408565b600080516020610611833981519152146100695761006961041b565b6100758282600061007c565b5050610552565b610085836100a8565b6000825111806100925750805b156100a3576100a183836100e8565b505b505050565b6100b181610116565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061010d838360405180606001604052806027815260200161063160279139610175565b90505b92915050565b6001600160a01b0381163b6101465760405162461bcd60e51b815260040161013d9061047e565b60405180910390fd5b60008051602061061183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60606001600160a01b0384163b61019e5760405162461bcd60e51b815260040161013d906104d1565b600080856001600160a01b0316856040516101b99190610503565b600060405180830381855af49150503d80600081146101f4576040519150601f19603f3d011682016040523d82523d6000602084013e6101f9565b606091505b50909250905061020a828286610216565b925050505b9392505050565b6060831561022557508161020f565b8251156102355782518084602001fd5b8160405162461bcd60e51b815260040161013d9190610541565b60006001600160a01b038216610110565b6102698161024f565b811461027457600080fd5b50565b805161011081610260565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b03821117156102bd576102bd610282565b6040525050565b60006102cf60405190565b90506102db8282610298565b919050565b60006001600160401b038211156102f9576102f9610282565b601f19601f83011660200192915050565b60005b8381101561032557818101518382015260200161030d565b50506000910152565b600061034161033c846102e0565b6102c4565b90508281526020810184848401111561035c5761035c600080fd5b61036784828561030a565b509392505050565b600082601f83011261038357610383600080fd5b815161039384826020860161032e565b949350505050565b600080604083850312156103b1576103b1600080fd5b60006103bd8585610277565b92505060208301516001600160401b038111156103dc576103dc600080fd5b6103e88582860161036f565b9150509250929050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610110576101106103f2565b634e487b7160e01b600052600160045260246000fd5b602d81526000602082017f455243313936373a206e657720696d706c656d656e746174696f6e206973206e81526c1bdd08184818dbdb9d1c9858dd609a1b602082015291505b5060400190565b6020808252810161011081610431565b602681526000602082017f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f8152651b9d1c9858dd60d21b60208201529150610477565b602080825281016101108161048e565b60006104eb825190565b6104f981856020860161030a565b9290920192915050565b600061020f82846104e1565b6000610519825190565b80845260208401935061053081856020860161030a565b601f01601f19169290920192915050565b6020808252810161010d818461050f565b60b1806105606000396000f3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6058565b565b600060537f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156076573d6000f35b3d6000fdfea26469706673582212206514576b9b5085c0351b6b146cfff3777796ae47c549b886b20feb128093d14664736f6c63430008190033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x658 CODESIZE SUB DUP1 PUSH2 0x658 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x22 SWAP2 PUSH2 0x39B JUMP JUMPDEST PUSH2 0x4D PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x408 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x611 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH2 0x69 JUMPI PUSH2 0x69 PUSH2 0x41B JUMP JUMPDEST PUSH2 0x75 DUP3 DUP3 PUSH1 0x0 PUSH2 0x7C JUMP JUMPDEST POP POP PUSH2 0x552 JUMP JUMPDEST PUSH2 0x85 DUP4 PUSH2 0xA8 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x92 JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0xA3 JUMPI PUSH2 0xA1 DUP4 DUP4 PUSH2 0xE8 JUMP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xB1 DUP2 PUSH2 0x116 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x10D DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x631 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x175 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x146 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x13D SWAP1 PUSH2 0x47E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x611 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE PUSH2 0x19E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x13D SWAP1 PUSH2 0x4D1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x1B9 SWAP2 SWAP1 PUSH2 0x503 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1F4 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1F9 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x20A DUP3 DUP3 DUP7 PUSH2 0x216 JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x225 JUMPI POP DUP2 PUSH2 0x20F JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x235 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x13D SWAP2 SWAP1 PUSH2 0x541 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x110 JUMP JUMPDEST PUSH2 0x269 DUP2 PUSH2 0x24F JUMP JUMPDEST DUP2 EQ PUSH2 0x274 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x110 DUP2 PUSH2 0x260 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x2BD JUMPI PUSH2 0x2BD PUSH2 0x282 JUMP JUMPDEST PUSH1 0x40 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CF PUSH1 0x40 MLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x2DB DUP3 DUP3 PUSH2 0x298 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x2F9 JUMPI PUSH2 0x2F9 PUSH2 0x282 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x325 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x30D JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x341 PUSH2 0x33C DUP5 PUSH2 0x2E0 JUMP JUMPDEST PUSH2 0x2C4 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x35C JUMPI PUSH2 0x35C PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x367 DUP5 DUP3 DUP6 PUSH2 0x30A JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x383 JUMPI PUSH2 0x383 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x393 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x32E JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3B1 JUMPI PUSH2 0x3B1 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3BD DUP6 DUP6 PUSH2 0x277 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3DC JUMPI PUSH2 0x3DC PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3E8 DUP6 DUP3 DUP7 ADD PUSH2 0x36F JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x110 JUMPI PUSH2 0x110 PUSH2 0x3F2 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2D DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E DUP2 MSTORE PUSH13 0x1BDD08184818DBDB9D1C9858DD PUSH1 0x9A SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x110 DUP2 PUSH2 0x431 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F DUP2 MSTORE PUSH6 0x1B9D1C9858DD PUSH1 0xD2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x477 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x110 DUP2 PUSH2 0x48E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4EB DUP3 MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x4F9 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x30A JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x20F DUP3 DUP5 PUSH2 0x4E1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x519 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x530 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x30A JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10D DUP2 DUP5 PUSH2 0x50F JUMP JUMPDEST PUSH1 0xB1 DUP1 PUSH2 0x560 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH1 0x10 JUMPI PUSH1 0xE PUSH1 0x13 JUMP JUMPDEST STOP JUMPDEST PUSH1 0xE JUMPDEST PUSH1 0x1F PUSH1 0x1B PUSH1 0x21 JUMP JUMPDEST PUSH1 0x58 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH1 0x53 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH1 0x76 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH6 0x14576B9B5085 0xC0 CALLDATALOAD SHL PUSH12 0x146CFFF3777796AE47C549B8 DUP7 0xB2 0xF 0xEB SLT DUP1 SWAP4 0xD1 CHAINID PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER CALLDATASIZE ADDMOD SWAP5 LOG1 EXTCODESIZE LOG1 LOG3 0x21 MOD PUSH8 0xC828492DB98DCA3E KECCAK256 PUSH23 0xCC3735A920A3CA505D382BBC416464726573733A206C6F PUSH24 0x2D6C6576656C2064656C65676174652063616C6C20666169 PUSH13 0x65640000000000000000000000 ","sourceMap":"552:830:59:-:0;;;945:217;;;;;;;;;;;;;;;;;;:::i;:::-;1050:54;1103:1;1058:41;1050:54;:::i;:::-;-1:-1:-1;;;;;;;;;;;1018:87:59;1011:95;;;;:::i;:::-;1116:39;1134:6;1142:5;1149;1116:17;:39::i;:::-;945:217;;552:830;;2188:295:60;2326:29;2337:17;2326:10;:29::i;:::-;2383:1;2369:4;:11;:15;:28;;;;2388:9;2369:28;2365:112;;;2413:53;2442:17;2461:4;2413:28;:53::i;:::-;;2365:112;2188:295;;;:::o;1902:152::-;1968:37;1987:17;1968:18;:37::i;:::-;2020:27;;-1:-1:-1;;;;;2020:27:60;;;;;;;;1902:152;:::o;6575:198:65:-;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;;6575:198;;;;;:::o;1537:259:60:-;-1:-1:-1;;;;;1470:19:65;;;1610:95:60;;;;-1:-1:-1;;;1610:95:60;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;;;;;;;1715:74:60;;-1:-1:-1;;;;;;1715:74:60;-1:-1:-1;;;;;1715:74:60;;;;;;;;;;1537:259::o;6959:387:65:-;7100:12;-1:-1:-1;;;;;1470:19:65;;;7124:69;;;;-1:-1:-1;;;7124:69:65;;;;;;;:::i;:::-;7205:12;7219:23;7246:6;-1:-1:-1;;;;;7246:19:65;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7204:67:65;;-1:-1:-1;7204:67:65;-1:-1:-1;7288:51:65;7204:67;;7326:12;7288:16;:51::i;:::-;7281:58;;;;6959:387;;;;;;:::o;7566:692::-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:65;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;-1:-1:-1;;;8207:20:65;;;;;;;;:::i;466:96:69:-;503:7;-1:-1:-1;;;;;400:54:69;;532:24;334:126;568:122;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;778:13;;800:33;778:13;800:33;:::i;1199:180::-;-1:-1:-1;;;1244:1:69;1237:88;1344:4;1341:1;1334:15;1368:4;1365:1;1358:15;1385:281;-1:-1:-1;;1183:2:69;1163:14;;1159:28;1460:6;1456:40;1598:6;1586:10;1583:22;-1:-1:-1;;;;;1550:10:69;1547:34;1544:62;1541:88;;;1609:18;;:::i;:::-;1645:2;1638:22;-1:-1:-1;;1385:281:69:o;1672:129::-;1706:6;1733:20;73:2;67:9;;7:75;1733:20;1723:30;;1762:33;1790:4;1782:6;1762:33;:::i;:::-;1672:129;;;:::o;1807:307::-;1868:4;-1:-1:-1;;;;;1950:6:69;1947:30;1944:56;;;1980:18;;:::i;:::-;-1:-1:-1;;1183:2:69;1163:14;;1159:28;2102:4;2092:15;;1807:307;-1:-1:-1;;1807:307:69:o;2120:248::-;2202:1;2212:113;2226:6;2223:1;2220:13;2212:113;;;2302:11;;;2296:18;2283:11;;;2276:39;2248:2;2241:10;2212:113;;;-1:-1:-1;;2359:1:69;2341:16;;2334:27;2120:248::o;2374:432::-;2462:5;2487:65;2503:48;2544:6;2503:48;:::i;:::-;2487:65;:::i;:::-;2478:74;;2575:6;2568:5;2561:21;2613:4;2606:5;2602:16;2651:3;2642:6;2637:3;2633:16;2630:25;2627:112;;;2658:79;197:1;194;187:12;2658:79;2748:52;2793:6;2788:3;2783;2748:52;:::i;:::-;2468:338;2374:432;;;;;:::o;2825:353::-;2891:5;2940:3;2933:4;2925:6;2921:17;2917:27;2907:122;;2948:79;197:1;194;187:12;2948:79;3058:6;3052:13;3083:89;3168:3;3160:6;3153:4;3145:6;3141:17;3083:89;:::i;:::-;3074:98;2825:353;-1:-1:-1;;;;2825:353:69:o;3184:678::-;3272:6;3280;3329:2;3317:9;3308:7;3304:23;3300:32;3297:119;;;3335:79;197:1;194;187:12;3335:79;3455:1;3480:64;3536:7;3516:9;3480:64;:::i;:::-;3470:74;;3426:128;3614:2;3603:9;3599:18;3593:25;-1:-1:-1;;;;;3637:6:69;3634:30;3631:117;;;3667:79;197:1;194;187:12;3667:79;3772:73;3837:7;3828:6;3817:9;3813:22;3772:73;:::i;:::-;3762:83;;3564:291;3184:678;;;;;:::o;3951:180::-;-1:-1:-1;;;3996:1:69;3989:88;4096:4;4093:1;4086:15;4120:4;4117:1;4110:15;4137:194;4268:9;;;4290:11;;;4287:37;;;4304:18;;:::i;4337:180::-;-1:-1:-1;;;4382:1:69;4375:88;4482:4;4479:1;4472:15;4506:4;4503:1;4496:15;4936:366;5163:2;4629:19;;5078:3;4681:4;4672:14;;4838:34;4815:58;;-1:-1:-1;;;4902:2:69;4890:15;;4883:40;5092:74;-1:-1:-1;5175:93:69;-1:-1:-1;5293:2:69;5284:12;;4936:366::o;5308:419::-;5512:2;5525:47;;;5497:18;;5589:131;5497:18;5589:131;:::i;5964:366::-;6191:2;4629:19;;6106:3;4681:4;4672:14;;5873:34;5850:58;;-1:-1:-1;;;5937:2:69;5925:15;;5918:33;6120:74;-1:-1:-1;6203:93:69;5733:225;6336:419;6540:2;6553:47;;;6525:18;;6617:131;6525:18;6617:131;:::i;7018:386::-;7122:3;7150:38;7182:5;6840:12;;6761:98;7150:38;7301:65;7359:6;7354:3;7347:4;7340:5;7336:16;7301:65;:::i;:::-;7382:16;;;;;7018:386;-1:-1:-1;;7018:386:69:o;7410:271::-;7540:3;7562:93;7651:3;7642:6;7562:93;:::i;7792:377::-;7880:3;7908:39;7941:5;6840:12;;6761:98;7908:39;4629:19;;;4681:4;4672:14;;7956:78;;8043:65;8101:6;8096:3;8089:4;8082:5;8078:16;8043:65;:::i;:::-;1183:2;1163:14;-1:-1:-1;;1159:28:69;8124:39;;;;;;-1:-1:-1;;7792:377:69:o;8175:313::-;8326:2;8339:47;;;8311:18;;8403:78;8311:18;8467:6;8403:78;:::i;8175:313::-;552:830:59;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_19323":{"entryPoint":null,"id":19323,"parameterSlots":0,"returnSlots":0},"@_19331":{"entryPoint":null,"id":19331,"parameterSlots":0,"returnSlots":0},"@_beforeFallback_19336":{"entryPoint":null,"id":19336,"parameterSlots":0,"returnSlots":0},"@_delegate_19296":{"entryPoint":88,"id":19296,"parameterSlots":1,"returnSlots":0},"@_fallback_19315":{"entryPoint":19,"id":19315,"parameterSlots":0,"returnSlots":0},"@_getImplementation_18999":{"entryPoint":null,"id":18999,"parameterSlots":0,"returnSlots":1},"@_implementation_18966":{"entryPoint":33,"id":18966,"parameterSlots":0,"returnSlots":1},"@getAddressSlot_19999":{"entryPoint":null,"id":19999,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608060405236601057600e6013565b005b600e5b601f601b6021565b6058565b565b600060537f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156076573d6000f35b3d6000fdfea26469706673582212206514576b9b5085c0351b6b146cfff3777796ae47c549b886b20feb128093d14664736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH1 0x10 JUMPI PUSH1 0xE PUSH1 0x13 JUMP JUMPDEST STOP JUMPDEST PUSH1 0xE JUMPDEST PUSH1 0x1F PUSH1 0x1B PUSH1 0x21 JUMP JUMPDEST PUSH1 0x58 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH1 0x53 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH1 0x76 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH6 0x14576B9B5085 0xC0 CALLDATALOAD SHL PUSH12 0x146CFFF3777796AE47C549B8 DUP7 0xB2 0xF 0xEB SLT DUP1 SWAP4 0xD1 CHAINID PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ","sourceMap":"552:830:59:-:0;;;;;;2903:11:61;:9;:11::i;:::-;552:830:59;;2680:11:61;2327:110;2402:28;2412:17;:15;:17::i;:::-;2402:9;:28::i;:::-;2327:110::o;1240:140:59:-;1307:12;1338:35;1035:66:60;1385:54;-1:-1:-1;;;;;1385:54:60;;1306:140;1338:35:59;1331:42;;1240:140;:::o;953:895:61:-;1291:14;1288:1;1285;1272:34;1505:1;1502;1486:14;1483:1;1467:14;1460:5;1447:60;1581:16;1578:1;1575;1560:38;1619:6;1686:66;;;;1801:16;1798:1;1791:27;1686:66;1721:16;1718:1;1711:27"},"gasEstimates":{"creation":{"codeDepositCost":"35400","executionCost":"infinite","totalCost":"infinite"},"external":{"":"infinite"},"internal":{"_implementation()":"2156"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is upgraded.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"hardhat-deploy/solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n    /**\\n     * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n     *\\n     * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n     * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n     */\\n    constructor(address _logic, bytes memory _data) payable {\\n        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n        _upgradeToAndCall(_logic, _data, false);\\n    }\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _implementation() internal view virtual override returns (address impl) {\\n        return ERC1967Upgrade._getImplementation();\\n    }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n    // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n    /**\\n     * @dev Storage slot with the address of the current implementation.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _getImplementation() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 implementation slot.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeTo(address newImplementation) internal {\\n        _setImplementation(newImplementation);\\n        emit Upgraded(newImplementation);\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCall(\\n        address newImplementation,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        _upgradeTo(newImplementation);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(newImplementation, data);\\n        }\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCallUUPS(\\n        address newImplementation,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\\n        if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n            _setImplementation(newImplementation);\\n        } else {\\n            try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n                require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n            } catch {\\n                revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n            }\\n            _upgradeToAndCall(newImplementation, data, forceCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Storage slot with the admin of the contract.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n    /**\\n     * @dev Emitted when the admin account has changed.\\n     */\\n    event AdminChanged(address previousAdmin, address newAdmin);\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _getAdmin() internal view virtual returns (address) {\\n        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 admin slot.\\n     */\\n    function _setAdmin(address newAdmin) private {\\n        require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {AdminChanged} event.\\n     */\\n    function _changeAdmin(address newAdmin) internal {\\n        emit AdminChanged(_getAdmin(), newAdmin);\\n        _setAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n     */\\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n    /**\\n     * @dev Emitted when the beacon is upgraded.\\n     */\\n    event BeaconUpgraded(address indexed beacon);\\n\\n    /**\\n     * @dev Returns the current beacon.\\n     */\\n    function _getBeacon() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\\n     */\\n    function _setBeacon(address newBeacon) private {\\n        require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n        require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n    }\\n\\n    /**\\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n     *\\n     * Emits a {BeaconUpgraded} event.\\n     */\\n    function _upgradeBeaconToAndCall(\\n        address newBeacon,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        _setBeacon(newBeacon);\\n        emit BeaconUpgraded(newBeacon);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n    /**\\n     * @dev Delegates the current call to `implementation`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _delegate(address implementation) internal virtual {\\n        assembly {\\n            // Copy msg.data. We take full control of memory in this inline assembly\\n            // block because it will not return to Solidity code. We overwrite the\\n            // Solidity scratch pad at memory position 0.\\n            calldatacopy(0, 0, calldatasize())\\n\\n            // Call the implementation.\\n            // out and outsize are 0 because we don't know the size yet.\\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n            // Copy the returned data.\\n            returndatacopy(0, 0, returndatasize())\\n\\n            switch result\\n            // delegatecall returns 0 on error.\\n            case 0 {\\n                revert(0, returndatasize())\\n            }\\n            default {\\n                return(0, returndatasize())\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n     * and {_fallback} should delegate.\\n     */\\n    function _implementation() internal view virtual returns (address);\\n\\n    /**\\n     * @dev Delegates the current call to the address returned by `_implementation()`.\\n     *\\n     * This function does not return to its internall call site, it will return directly to the external caller.\\n     */\\n    function _fallback() internal virtual {\\n        _beforeFallback();\\n        _delegate(_implementation());\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n     * function in the contract matches the call data.\\n     */\\n    fallback() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n     * is empty.\\n     */\\n    receive() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n     * call, or as part of the Solidity `fallback` or `receive` functions.\\n     *\\n     * If overriden should call `super._beforeFallback()`.\\n     */\\n    function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {BeaconProxy} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol":{"ERC1967Upgrade":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"}],"devdoc":{"custom:oz-upgrades-unsafe-allow":"delegatecall","details":"This abstract contract provides getters and event emitting update functions for https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. _Available since v4.1._","events":{"AdminChanged(address,address)":{"details":"Emitted when the admin account has changed."},"BeaconUpgraded(address)":{"details":"Emitted when the beacon is upgraded."},"Upgraded(address)":{"details":"Emitted when the implementation is upgraded."}},"kind":"dev","methods":{},"stateVariables":{"_ADMIN_SLOT":{"details":"Storage slot with the admin of the contract. This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is validated in the constructor."},"_BEACON_SLOT":{"details":"The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor."},"_IMPLEMENTATION_SLOT":{"details":"Storage slot with the address of the current implementation. This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is validated in the constructor."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"}],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"delegatecall\",\"details\":\"This abstract contract provides getters and event emitting update functions for https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. _Available since v4.1._\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is upgraded.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"_ADMIN_SLOT\":{\"details\":\"Storage slot with the admin of the contract. This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is validated in the constructor.\"},\"_BEACON_SLOT\":{\"details\":\"The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\"},\"_IMPLEMENTATION_SLOT\":{\"details\":\"Storage slot with the address of the current implementation. This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is validated in the constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":\"ERC1967Upgrade\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"hardhat-deploy/solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n    // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n    /**\\n     * @dev Storage slot with the address of the current implementation.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _getImplementation() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 implementation slot.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeTo(address newImplementation) internal {\\n        _setImplementation(newImplementation);\\n        emit Upgraded(newImplementation);\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCall(\\n        address newImplementation,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        _upgradeTo(newImplementation);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(newImplementation, data);\\n        }\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCallUUPS(\\n        address newImplementation,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\\n        if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n            _setImplementation(newImplementation);\\n        } else {\\n            try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n                require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n            } catch {\\n                revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n            }\\n            _upgradeToAndCall(newImplementation, data, forceCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Storage slot with the admin of the contract.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n    /**\\n     * @dev Emitted when the admin account has changed.\\n     */\\n    event AdminChanged(address previousAdmin, address newAdmin);\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _getAdmin() internal view virtual returns (address) {\\n        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 admin slot.\\n     */\\n    function _setAdmin(address newAdmin) private {\\n        require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {AdminChanged} event.\\n     */\\n    function _changeAdmin(address newAdmin) internal {\\n        emit AdminChanged(_getAdmin(), newAdmin);\\n        _setAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n     */\\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n    /**\\n     * @dev Emitted when the beacon is upgraded.\\n     */\\n    event BeaconUpgraded(address indexed beacon);\\n\\n    /**\\n     * @dev Returns the current beacon.\\n     */\\n    function _getBeacon() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\\n     */\\n    function _setBeacon(address newBeacon) private {\\n        require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n        require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n    }\\n\\n    /**\\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n     *\\n     * Emits a {BeaconUpgraded} event.\\n     */\\n    function _upgradeBeaconToAndCall(\\n        address newBeacon,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        _setBeacon(newBeacon);\\n        emit BeaconUpgraded(newBeacon);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {BeaconProxy} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"hardhat-deploy/solc_0.8/openzeppelin/proxy/Proxy.sol":{"Proxy":{"abi":[{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"details":"This abstract contract provides a fallback function that delegates all calls to another contract using the EVM instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to be specified by overriding the virtual {_implementation} function. Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a different contract through the {_delegate} function. The success and return data of the delegated call will be returned back to the caller of the proxy.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This abstract contract provides a fallback function that delegates all calls to another contract using the EVM instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to be specified by overriding the virtual {_implementation} function. Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a different contract through the {_delegate} function. The success and return data of the delegated call will be returned back to the caller of the proxy.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"hardhat-deploy/solc_0.8/openzeppelin/proxy/Proxy.sol\":\"Proxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"hardhat-deploy/solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n    /**\\n     * @dev Delegates the current call to `implementation`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _delegate(address implementation) internal virtual {\\n        assembly {\\n            // Copy msg.data. We take full control of memory in this inline assembly\\n            // block because it will not return to Solidity code. We overwrite the\\n            // Solidity scratch pad at memory position 0.\\n            calldatacopy(0, 0, calldatasize())\\n\\n            // Call the implementation.\\n            // out and outsize are 0 because we don't know the size yet.\\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n            // Copy the returned data.\\n            returndatacopy(0, 0, returndatasize())\\n\\n            switch result\\n            // delegatecall returns 0 on error.\\n            case 0 {\\n                revert(0, returndatasize())\\n            }\\n            default {\\n                return(0, returndatasize())\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n     * and {_fallback} should delegate.\\n     */\\n    function _implementation() internal view virtual returns (address);\\n\\n    /**\\n     * @dev Delegates the current call to the address returned by `_implementation()`.\\n     *\\n     * This function does not return to its internall call site, it will return directly to the external caller.\\n     */\\n    function _fallback() internal virtual {\\n        _beforeFallback();\\n        _delegate(_implementation());\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n     * function in the contract matches the call data.\\n     */\\n    fallback() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n     * is empty.\\n     */\\n    receive() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n     * call, or as part of the Solidity `fallback` or `receive` functions.\\n     *\\n     * If overriden should call `super._beforeFallback()`.\\n     */\\n    function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"hardhat-deploy/solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol":{"IBeacon":{"abi":[{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"This is the interface that {BeaconProxy} expects of its beacon.","kind":"dev","methods":{"implementation()":{"details":"Must return an address that can be used as a delegate call target. {BeaconProxy} will check that this address is a contract."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"implementation()":"5c60da1b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is the interface that {BeaconProxy} expects of its beacon.\",\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Must return an address that can be used as a delegate call target. {BeaconProxy} will check that this address is a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"hardhat-deploy/solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":\"IBeacon\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"hardhat-deploy/solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {BeaconProxy} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol":{"ProxyAdmin":{"abi":[{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeProxyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"}],"name":"getProxyAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"}],"name":"getProxyImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"implementation","type":"address"}],"name":"upgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeAndCall","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"details":"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.","kind":"dev","methods":{"changeProxyAdmin(address,address)":{"details":"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`."},"getProxyAdmin(address)":{"details":"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`."},"getProxyImplementation(address)":{"details":"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`."},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"upgrade(address,address)":{"details":"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`."},"upgradeAndCall(address,address,bytes)":{"details":"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_18823":{"entryPoint":null,"id":18823,"parameterSlots":1,"returnSlots":0},"@_19363":{"entryPoint":null,"id":19363,"parameterSlots":1,"returnSlots":0},"@_transferOwnership_18903":{"entryPoint":64,"id":18903,"parameterSlots":1,"returnSlots":0},"abi_decode_t_address_fromMemory":{"entryPoint":186,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":197,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"cleanup_t_address":{"entryPoint":144,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_t_address":{"entryPoint":163,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:1199:69","nodeType":"YulBlock","src":"0:1199:69","statements":[{"body":{"nativeSrc":"47:35:69","nodeType":"YulBlock","src":"47:35:69","statements":[{"nativeSrc":"57:19:69","nodeType":"YulAssignment","src":"57:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"73:2:69","nodeType":"YulLiteral","src":"73:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"67:5:69","nodeType":"YulIdentifier","src":"67:5:69"},"nativeSrc":"67:9:69","nodeType":"YulFunctionCall","src":"67:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"57:6:69","nodeType":"YulIdentifier","src":"57:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"7:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"40:6:69","nodeType":"YulTypedName","src":"40:6:69","type":""}],"src":"7:75:69"},{"body":{"nativeSrc":"177:28:69","nodeType":"YulBlock","src":"177:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"194:1:69","nodeType":"YulLiteral","src":"194:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"197:1:69","nodeType":"YulLiteral","src":"197:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"187:6:69","nodeType":"YulIdentifier","src":"187:6:69"},"nativeSrc":"187:12:69","nodeType":"YulFunctionCall","src":"187:12:69"},"nativeSrc":"187:12:69","nodeType":"YulExpressionStatement","src":"187:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"88:117:69","nodeType":"YulFunctionDefinition","src":"88:117:69"},{"body":{"nativeSrc":"300:28:69","nodeType":"YulBlock","src":"300:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"317:1:69","nodeType":"YulLiteral","src":"317:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"320:1:69","nodeType":"YulLiteral","src":"320:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},"nativeSrc":"310:12:69","nodeType":"YulFunctionCall","src":"310:12:69"},"nativeSrc":"310:12:69","nodeType":"YulExpressionStatement","src":"310:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"211:117:69","nodeType":"YulFunctionDefinition","src":"211:117:69"},{"body":{"nativeSrc":"379:81:69","nodeType":"YulBlock","src":"379:81:69","statements":[{"nativeSrc":"389:65:69","nodeType":"YulAssignment","src":"389:65:69","value":{"arguments":[{"name":"value","nativeSrc":"404:5:69","nodeType":"YulIdentifier","src":"404:5:69"},{"kind":"number","nativeSrc":"411:42:69","nodeType":"YulLiteral","src":"411:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"400:3:69","nodeType":"YulIdentifier","src":"400:3:69"},"nativeSrc":"400:54:69","nodeType":"YulFunctionCall","src":"400:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"389:7:69","nodeType":"YulIdentifier","src":"389:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"334:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"361:5:69","nodeType":"YulTypedName","src":"361:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"371:7:69","nodeType":"YulTypedName","src":"371:7:69","type":""}],"src":"334:126:69"},{"body":{"nativeSrc":"511:51:69","nodeType":"YulBlock","src":"511:51:69","statements":[{"nativeSrc":"521:35:69","nodeType":"YulAssignment","src":"521:35:69","value":{"arguments":[{"name":"value","nativeSrc":"550:5:69","nodeType":"YulIdentifier","src":"550:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"532:17:69","nodeType":"YulIdentifier","src":"532:17:69"},"nativeSrc":"532:24:69","nodeType":"YulFunctionCall","src":"532:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"521:7:69","nodeType":"YulIdentifier","src":"521:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"466:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"493:5:69","nodeType":"YulTypedName","src":"493:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"503:7:69","nodeType":"YulTypedName","src":"503:7:69","type":""}],"src":"466:96:69"},{"body":{"nativeSrc":"611:79:69","nodeType":"YulBlock","src":"611:79:69","statements":[{"body":{"nativeSrc":"668:16:69","nodeType":"YulBlock","src":"668:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"677:1:69","nodeType":"YulLiteral","src":"677:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"680:1:69","nodeType":"YulLiteral","src":"680:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"670:6:69","nodeType":"YulIdentifier","src":"670:6:69"},"nativeSrc":"670:12:69","nodeType":"YulFunctionCall","src":"670:12:69"},"nativeSrc":"670:12:69","nodeType":"YulExpressionStatement","src":"670:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"634:5:69","nodeType":"YulIdentifier","src":"634:5:69"},{"arguments":[{"name":"value","nativeSrc":"659:5:69","nodeType":"YulIdentifier","src":"659:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"641:17:69","nodeType":"YulIdentifier","src":"641:17:69"},"nativeSrc":"641:24:69","nodeType":"YulFunctionCall","src":"641:24:69"}],"functionName":{"name":"eq","nativeSrc":"631:2:69","nodeType":"YulIdentifier","src":"631:2:69"},"nativeSrc":"631:35:69","nodeType":"YulFunctionCall","src":"631:35:69"}],"functionName":{"name":"iszero","nativeSrc":"624:6:69","nodeType":"YulIdentifier","src":"624:6:69"},"nativeSrc":"624:43:69","nodeType":"YulFunctionCall","src":"624:43:69"},"nativeSrc":"621:63:69","nodeType":"YulIf","src":"621:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"568:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"604:5:69","nodeType":"YulTypedName","src":"604:5:69","type":""}],"src":"568:122:69"},{"body":{"nativeSrc":"759:80:69","nodeType":"YulBlock","src":"759:80:69","statements":[{"nativeSrc":"769:22:69","nodeType":"YulAssignment","src":"769:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"784:6:69","nodeType":"YulIdentifier","src":"784:6:69"}],"functionName":{"name":"mload","nativeSrc":"778:5:69","nodeType":"YulIdentifier","src":"778:5:69"},"nativeSrc":"778:13:69","nodeType":"YulFunctionCall","src":"778:13:69"},"variableNames":[{"name":"value","nativeSrc":"769:5:69","nodeType":"YulIdentifier","src":"769:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"827:5:69","nodeType":"YulIdentifier","src":"827:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"800:26:69","nodeType":"YulIdentifier","src":"800:26:69"},"nativeSrc":"800:33:69","nodeType":"YulFunctionCall","src":"800:33:69"},"nativeSrc":"800:33:69","nodeType":"YulExpressionStatement","src":"800:33:69"}]},"name":"abi_decode_t_address_fromMemory","nativeSrc":"696:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"737:6:69","nodeType":"YulTypedName","src":"737:6:69","type":""},{"name":"end","nativeSrc":"745:3:69","nodeType":"YulTypedName","src":"745:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"753:5:69","nodeType":"YulTypedName","src":"753:5:69","type":""}],"src":"696:143:69"},{"body":{"nativeSrc":"922:274:69","nodeType":"YulBlock","src":"922:274:69","statements":[{"body":{"nativeSrc":"968:83:69","nodeType":"YulBlock","src":"968:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"970:77:69","nodeType":"YulIdentifier","src":"970:77:69"},"nativeSrc":"970:79:69","nodeType":"YulFunctionCall","src":"970:79:69"},"nativeSrc":"970:79:69","nodeType":"YulExpressionStatement","src":"970:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"943:7:69","nodeType":"YulIdentifier","src":"943:7:69"},{"name":"headStart","nativeSrc":"952:9:69","nodeType":"YulIdentifier","src":"952:9:69"}],"functionName":{"name":"sub","nativeSrc":"939:3:69","nodeType":"YulIdentifier","src":"939:3:69"},"nativeSrc":"939:23:69","nodeType":"YulFunctionCall","src":"939:23:69"},{"kind":"number","nativeSrc":"964:2:69","nodeType":"YulLiteral","src":"964:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"935:3:69","nodeType":"YulIdentifier","src":"935:3:69"},"nativeSrc":"935:32:69","nodeType":"YulFunctionCall","src":"935:32:69"},"nativeSrc":"932:119:69","nodeType":"YulIf","src":"932:119:69"},{"nativeSrc":"1061:128:69","nodeType":"YulBlock","src":"1061:128:69","statements":[{"nativeSrc":"1076:15:69","nodeType":"YulVariableDeclaration","src":"1076:15:69","value":{"kind":"number","nativeSrc":"1090:1:69","nodeType":"YulLiteral","src":"1090:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"1080:6:69","nodeType":"YulTypedName","src":"1080:6:69","type":""}]},{"nativeSrc":"1105:74:69","nodeType":"YulAssignment","src":"1105:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1151:9:69","nodeType":"YulIdentifier","src":"1151:9:69"},{"name":"offset","nativeSrc":"1162:6:69","nodeType":"YulIdentifier","src":"1162:6:69"}],"functionName":{"name":"add","nativeSrc":"1147:3:69","nodeType":"YulIdentifier","src":"1147:3:69"},"nativeSrc":"1147:22:69","nodeType":"YulFunctionCall","src":"1147:22:69"},{"name":"dataEnd","nativeSrc":"1171:7:69","nodeType":"YulIdentifier","src":"1171:7:69"}],"functionName":{"name":"abi_decode_t_address_fromMemory","nativeSrc":"1115:31:69","nodeType":"YulIdentifier","src":"1115:31:69"},"nativeSrc":"1115:64:69","nodeType":"YulFunctionCall","src":"1115:64:69"},"variableNames":[{"name":"value0","nativeSrc":"1105:6:69","nodeType":"YulIdentifier","src":"1105:6:69"}]}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nativeSrc":"845:351:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"892:9:69","nodeType":"YulTypedName","src":"892:9:69","type":""},{"name":"dataEnd","nativeSrc":"903:7:69","nodeType":"YulTypedName","src":"903:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"915:6:69","nodeType":"YulTypedName","src":"915:6:69","type":""}],"src":"845:351:69"}]},"contents":"{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060405161096438038061096483398101604081905261002f916100c5565b8061003981610040565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100ac81610090565b81146100b757600080fd5b50565b805161009d816100a3565b6000602082840312156100da576100da600080fd5b60006100e684846100ba565b949350505050565b610867806100fd6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461010b57806399a88ec41461011e578063f2fde38b1461013e578063f3b7dead1461015e57600080fd5b8063204e1c7a14610080578063715018a6146100b65780637eff275e146100cd5780638da5cb5b146100ed575b600080fd5b34801561008c57600080fd5b506100a061009b3660046104ba565b61017e565b6040516100ad91906104ea565b60405180910390f35b3480156100c257600080fd5b506100cb610204565b005b3480156100d957600080fd5b506100cb6100e836600461050c565b610243565b3480156100f957600080fd5b506000546001600160a01b03166100a0565b6100cb610119366004610644565b6102cf565b34801561012a57600080fd5b506100cb61013936600461050c565b610360565b34801561014a57600080fd5b506100cb6101593660046106af565b6103b6565b34801561016a57600080fd5b506100a06101793660046104ba565b610412565b6000806000836001600160a01b0316604051610199906106e4565b600060405180830381855afa9150503d80600081146101d4576040519150601f19603f3d011682016040523d82523d6000602084013e6101d9565b606091505b5091509150816101e857600080fd5b808060200190518101906101fc91906106fa565b949350505050565b6000546001600160a01b031633146102375760405162461bcd60e51b815260040161022e9061071b565b60405180910390fd5b610241600061042d565b565b6000546001600160a01b0316331461026d5760405162461bcd60e51b815260040161022e9061071b565b6040516308f2839760e41b81526001600160a01b03831690638f283970906102999084906004016104ea565b600060405180830381600087803b1580156102b357600080fd5b505af11580156102c7573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146102f95760405162461bcd60e51b815260040161022e9061071b565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061032990869086906004016107ab565b6000604051808303818588803b15801561034257600080fd5b505af1158015610356573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b0316331461038a5760405162461bcd60e51b815260040161022e9061071b565b604051631b2ce7f360e11b81526001600160a01b03831690633659cfe6906102999084906004016104ea565b6000546001600160a01b031633146103e05760405162461bcd60e51b815260040161022e9061071b565b6001600160a01b0381166104065760405162461bcd60e51b815260040161022e906107cb565b61040f8161042d565b50565b6000806000836001600160a01b031660405161019990610826565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b600061048a8261047d565b6104a481610490565b811461040f57600080fd5b803561048a8161049b565b6000602082840312156104cf576104cf600080fd5b60006101fc84846104af565b6104e48161047d565b82525050565b6020810161048a82846104db565b6104a48161047d565b803561048a816104f8565b6000806040838503121561052257610522600080fd5b600061052e85856104af565b925050602061053f85828601610501565b9150509250929050565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561058557610585610549565b6040525050565b600061059760405190565b90506105a3828261055f565b919050565b600067ffffffffffffffff8211156105c2576105c2610549565b601f19601f83011660200192915050565b82818337506000910152565b60006105f26105ed846105a8565b61058c565b90508281526020810184848401111561060d5761060d600080fd5b6106188482856105d3565b509392505050565b600082601f83011261063457610634600080fd5b81356101fc8482602086016105df565b60008060006060848603121561065c5761065c600080fd5b600061066886866104af565b935050602061067986828701610501565b925050604084013567ffffffffffffffff81111561069957610699600080fd5b6106a586828701610620565b9150509250925092565b6000602082840312156106c4576106c4600080fd5b60006101fc8484610501565b635c60da1b60e01b815260005b5060040190565b600061048a826106d0565b805161048a816104f8565b60006020828403121561070f5761070f600080fd5b60006101fc84846106ef565b60208082528181019081527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408301526060820161048a565b60005b83811015610770578181015183820152602001610758565b50506000910152565b6000610783825190565b80845260208401935061079a818560208601610755565b601f01601f19169290920192915050565b604081016107b982856104db565b81810360208301526101fc8184610779565b6020808252810161048a81602681527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160208201526564647265737360d01b604082015260600190565b6303e1469160e61b815260006106dd565b600061048a8261081556fea26469706673582212203b58938bc480699dc5b9a3a90f976b9179e4bbcc2d37584c8881a01abfb51dc764736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x964 CODESIZE SUB DUP1 PUSH2 0x964 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0xC5 JUMP JUMPDEST DUP1 PUSH2 0x39 DUP2 PUSH2 0x40 JUMP JUMPDEST POP POP PUSH2 0xEE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xAC DUP2 PUSH2 0x90 JUMP JUMPDEST DUP2 EQ PUSH2 0xB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x9D DUP2 PUSH2 0xA3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDA JUMPI PUSH2 0xDA PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE6 DUP5 DUP5 PUSH2 0xBA JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x867 DUP1 PUSH2 0xFD PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9623609D GT PUSH2 0x4E JUMPI DUP1 PUSH4 0x9623609D EQ PUSH2 0x10B JUMPI DUP1 PUSH4 0x99A88EC4 EQ PUSH2 0x11E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x13E JUMPI DUP1 PUSH4 0xF3B7DEAD EQ PUSH2 0x15E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x204E1C7A EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xB6 JUMPI DUP1 PUSH4 0x7EFF275E EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xED JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA0 PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0x4BA JUMP JUMPDEST PUSH2 0x17E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0x4EA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCB PUSH2 0x204 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCB PUSH2 0xE8 CALLDATASIZE PUSH1 0x4 PUSH2 0x50C JUMP JUMPDEST PUSH2 0x243 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA0 JUMP JUMPDEST PUSH2 0xCB PUSH2 0x119 CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH2 0x2CF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCB PUSH2 0x139 CALLDATASIZE PUSH1 0x4 PUSH2 0x50C JUMP JUMPDEST PUSH2 0x360 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCB PUSH2 0x159 CALLDATASIZE PUSH1 0x4 PUSH2 0x6AF JUMP JUMPDEST PUSH2 0x3B6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA0 PUSH2 0x179 CALLDATASIZE PUSH1 0x4 PUSH2 0x4BA JUMP JUMPDEST PUSH2 0x412 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 MLOAD PUSH2 0x199 SWAP1 PUSH2 0x6E4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1D4 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1D9 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x1E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1FC SWAP2 SWAP1 PUSH2 0x6FA JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x237 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x22E SWAP1 PUSH2 0x71B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x241 PUSH1 0x0 PUSH2 0x42D JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x26D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x22E SWAP1 PUSH2 0x71B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8F28397 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x8F283970 SWAP1 PUSH2 0x299 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x4EA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2F9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x22E SWAP1 PUSH2 0x71B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x278F7943 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 CALLVALUE SWAP1 PUSH2 0x329 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x7AB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x342 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x356 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x38A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x22E SWAP1 PUSH2 0x71B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1B2CE7F3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x3659CFE6 SWAP1 PUSH2 0x299 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x4EA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x22E SWAP1 PUSH2 0x71B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x406 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x22E SWAP1 PUSH2 0x7CB JUMP JUMPDEST PUSH2 0x40F DUP2 PUSH2 0x42D JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 MLOAD PUSH2 0x199 SWAP1 PUSH2 0x826 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48A DUP3 PUSH2 0x47D JUMP JUMPDEST PUSH2 0x4A4 DUP2 PUSH2 0x490 JUMP JUMPDEST DUP2 EQ PUSH2 0x40F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x48A DUP2 PUSH2 0x49B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4CF JUMPI PUSH2 0x4CF PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1FC DUP5 DUP5 PUSH2 0x4AF JUMP JUMPDEST PUSH2 0x4E4 DUP2 PUSH2 0x47D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x48A DUP3 DUP5 PUSH2 0x4DB JUMP JUMPDEST PUSH2 0x4A4 DUP2 PUSH2 0x47D JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x48A DUP2 PUSH2 0x4F8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x522 JUMPI PUSH2 0x522 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x52E DUP6 DUP6 PUSH2 0x4AF JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x53F DUP6 DUP3 DUP7 ADD PUSH2 0x501 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x585 JUMPI PUSH2 0x585 PUSH2 0x549 JUMP JUMPDEST PUSH1 0x40 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x597 PUSH1 0x40 MLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x5A3 DUP3 DUP3 PUSH2 0x55F JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5C2 JUMPI PUSH2 0x5C2 PUSH2 0x549 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5F2 PUSH2 0x5ED DUP5 PUSH2 0x5A8 JUMP JUMPDEST PUSH2 0x58C JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x60D JUMPI PUSH2 0x60D PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x618 DUP5 DUP3 DUP6 PUSH2 0x5D3 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x634 JUMPI PUSH2 0x634 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1FC DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x5DF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x65C JUMPI PUSH2 0x65C PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x668 DUP7 DUP7 PUSH2 0x4AF JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x679 DUP7 DUP3 DUP8 ADD PUSH2 0x501 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x699 JUMPI PUSH2 0x699 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6A5 DUP7 DUP3 DUP8 ADD PUSH2 0x620 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6C4 JUMPI PUSH2 0x6C4 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1FC DUP5 DUP5 PUSH2 0x501 JUMP JUMPDEST PUSH4 0x5C60DA1B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 JUMPDEST POP PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48A DUP3 PUSH2 0x6D0 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x48A DUP2 PUSH2 0x4F8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x70F JUMPI PUSH2 0x70F PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1FC DUP5 DUP5 PUSH2 0x6EF JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD SWAP1 DUP2 MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD PUSH2 0x48A JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x770 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x758 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x783 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x79A DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x755 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x7B9 DUP3 DUP6 PUSH2 0x4DB JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x1FC DUP2 DUP5 PUSH2 0x779 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x48A DUP2 PUSH1 0x26 DUP2 MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x20 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH4 0x3E14691 PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x0 PUSH2 0x6DD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48A DUP3 PUSH2 0x815 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXTCODESIZE PC SWAP4 DUP12 0xC4 DUP1 PUSH10 0x9DC5B9A3A90F976B9179 0xE4 0xBB 0xCC 0x2D CALLDATACOPY PC 0x4C DUP9 DUP2 LOG0 BYTE 0xBF 0xB5 SAR 0xC7 PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ","sourceMap":"435:2470:63:-:0;;;473:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;516:12;942:32:57;516:12:63;942:18:57;:32::i;:::-;897:84;473:59:63;435:2470;;2291:187:57;2364:16;2383:6;;-1:-1:-1;;;;;2399:17:57;;;-1:-1:-1;;;;;;2399:17:57;;;;;;2431:40;;2383:6;;;;;;;2431:40;;2364:16;2431:40;2354:124;2291:187;:::o;466:96:69:-;503:7;-1:-1:-1;;;;;400:54:69;;532:24;521:35;466:96;-1:-1:-1;;466:96:69:o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;778:13;;800:33;778:13;800:33;:::i;845:351::-;915:6;964:2;952:9;943:7;939:23;935:32;932:119;;;970:79;197:1;194;187:12;970:79;1090:1;1115:64;1171:7;1151:9;1115:64;:::i;:::-;1105:74;845:351;-1:-1:-1;;;;845:351:69:o;:::-;435:2470:63;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_msgSender_19963":{"entryPoint":null,"id":19963,"parameterSlots":0,"returnSlots":1},"@_transferOwnership_18903":{"entryPoint":1069,"id":18903,"parameterSlots":1,"returnSlots":0},"@changeProxyAdmin_19449":{"entryPoint":579,"id":19449,"parameterSlots":2,"returnSlots":0},"@getProxyAdmin_19431":{"entryPoint":1042,"id":19431,"parameterSlots":1,"returnSlots":1},"@getProxyImplementation_19397":{"entryPoint":382,"id":19397,"parameterSlots":1,"returnSlots":1},"@owner_18832":{"entryPoint":null,"id":18832,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_18860":{"entryPoint":516,"id":18860,"parameterSlots":0,"returnSlots":0},"@transferOwnership_18883":{"entryPoint":950,"id":18883,"parameterSlots":1,"returnSlots":0},"@upgradeAndCall_19491":{"entryPoint":719,"id":19491,"parameterSlots":3,"returnSlots":0},"@upgrade_19467":{"entryPoint":864,"id":19467,"parameterSlots":2,"returnSlots":0},"abi_decode_available_length_t_bytes_memory_ptr":{"entryPoint":1503,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_t_address":{"entryPoint":1281,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_address_payable_fromMemory":{"entryPoint":1775,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_bytes_memory_ptr":{"entryPoint":1568,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_contract$_TransparentUpgradeableProxy_$19656":{"entryPoint":1199,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":1711,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_payable_fromMemory":{"entryPoint":1786,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$19656":{"entryPoint":1210,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$19656t_address":{"entryPoint":1292,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$19656t_addresst_bytes_memory_ptr":{"entryPoint":1604,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_t_address_to_t_address_fromStack":{"entryPoint":1243,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack":{"entryPoint":1913,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":1744,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":2069,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":1764,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":2086,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":1258,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":1963,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1995,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1819,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory":{"entryPoint":1420,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_t_bytes_memory_ptr":{"entryPoint":1448,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_bytes_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_address_payable":{"entryPoint":1149,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_contract$_TransparentUpgradeableProxy_$19656":{"entryPoint":1168,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_calldata_to_memory_with_cleanup":{"entryPoint":1491,"id":null,"parameterSlots":3,"returnSlots":0},"copy_memory_to_memory_with_cleanup":{"entryPoint":1877,"id":null,"parameterSlots":3,"returnSlots":0},"finalize_allocation":{"entryPoint":1375,"id":null,"parameterSlots":2,"returnSlots":0},"panic_error_0x41":{"entryPoint":1353,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"round_up_to_mul_of_32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_address":{"entryPoint":1272,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_address_payable":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_contract$_TransparentUpgradeableProxy_$19656":{"entryPoint":1179,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:12635:69","nodeType":"YulBlock","src":"0:12635:69","statements":[{"body":{"nativeSrc":"47:35:69","nodeType":"YulBlock","src":"47:35:69","statements":[{"nativeSrc":"57:19:69","nodeType":"YulAssignment","src":"57:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"73:2:69","nodeType":"YulLiteral","src":"73:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"67:5:69","nodeType":"YulIdentifier","src":"67:5:69"},"nativeSrc":"67:9:69","nodeType":"YulFunctionCall","src":"67:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"57:6:69","nodeType":"YulIdentifier","src":"57:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"7:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"40:6:69","nodeType":"YulTypedName","src":"40:6:69","type":""}],"src":"7:75:69"},{"body":{"nativeSrc":"177:28:69","nodeType":"YulBlock","src":"177:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"194:1:69","nodeType":"YulLiteral","src":"194:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"197:1:69","nodeType":"YulLiteral","src":"197:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"187:6:69","nodeType":"YulIdentifier","src":"187:6:69"},"nativeSrc":"187:12:69","nodeType":"YulFunctionCall","src":"187:12:69"},"nativeSrc":"187:12:69","nodeType":"YulExpressionStatement","src":"187:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"88:117:69","nodeType":"YulFunctionDefinition","src":"88:117:69"},{"body":{"nativeSrc":"300:28:69","nodeType":"YulBlock","src":"300:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"317:1:69","nodeType":"YulLiteral","src":"317:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"320:1:69","nodeType":"YulLiteral","src":"320:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},"nativeSrc":"310:12:69","nodeType":"YulFunctionCall","src":"310:12:69"},"nativeSrc":"310:12:69","nodeType":"YulExpressionStatement","src":"310:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"211:117:69","nodeType":"YulFunctionDefinition","src":"211:117:69"},{"body":{"nativeSrc":"379:81:69","nodeType":"YulBlock","src":"379:81:69","statements":[{"nativeSrc":"389:65:69","nodeType":"YulAssignment","src":"389:65:69","value":{"arguments":[{"name":"value","nativeSrc":"404:5:69","nodeType":"YulIdentifier","src":"404:5:69"},{"kind":"number","nativeSrc":"411:42:69","nodeType":"YulLiteral","src":"411:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"400:3:69","nodeType":"YulIdentifier","src":"400:3:69"},"nativeSrc":"400:54:69","nodeType":"YulFunctionCall","src":"400:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"389:7:69","nodeType":"YulIdentifier","src":"389:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"334:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"361:5:69","nodeType":"YulTypedName","src":"361:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"371:7:69","nodeType":"YulTypedName","src":"371:7:69","type":""}],"src":"334:126:69"},{"body":{"nativeSrc":"519:51:69","nodeType":"YulBlock","src":"519:51:69","statements":[{"nativeSrc":"529:35:69","nodeType":"YulAssignment","src":"529:35:69","value":{"arguments":[{"name":"value","nativeSrc":"558:5:69","nodeType":"YulIdentifier","src":"558:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"540:17:69","nodeType":"YulIdentifier","src":"540:17:69"},"nativeSrc":"540:24:69","nodeType":"YulFunctionCall","src":"540:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"529:7:69","nodeType":"YulIdentifier","src":"529:7:69"}]}]},"name":"cleanup_t_address_payable","nativeSrc":"466:104:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"501:5:69","nodeType":"YulTypedName","src":"501:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"511:7:69","nodeType":"YulTypedName","src":"511:7:69","type":""}],"src":"466:104:69"},{"body":{"nativeSrc":"658:59:69","nodeType":"YulBlock","src":"658:59:69","statements":[{"nativeSrc":"668:43:69","nodeType":"YulAssignment","src":"668:43:69","value":{"arguments":[{"name":"value","nativeSrc":"705:5:69","nodeType":"YulIdentifier","src":"705:5:69"}],"functionName":{"name":"cleanup_t_address_payable","nativeSrc":"679:25:69","nodeType":"YulIdentifier","src":"679:25:69"},"nativeSrc":"679:32:69","nodeType":"YulFunctionCall","src":"679:32:69"},"variableNames":[{"name":"cleaned","nativeSrc":"668:7:69","nodeType":"YulIdentifier","src":"668:7:69"}]}]},"name":"cleanup_t_contract$_TransparentUpgradeableProxy_$19656","nativeSrc":"576:141:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"640:5:69","nodeType":"YulTypedName","src":"640:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"650:7:69","nodeType":"YulTypedName","src":"650:7:69","type":""}],"src":"576:141:69"},{"body":{"nativeSrc":"803:116:69","nodeType":"YulBlock","src":"803:116:69","statements":[{"body":{"nativeSrc":"897:16:69","nodeType":"YulBlock","src":"897:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"906:1:69","nodeType":"YulLiteral","src":"906:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"909:1:69","nodeType":"YulLiteral","src":"909:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"899:6:69","nodeType":"YulIdentifier","src":"899:6:69"},"nativeSrc":"899:12:69","nodeType":"YulFunctionCall","src":"899:12:69"},"nativeSrc":"899:12:69","nodeType":"YulExpressionStatement","src":"899:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"826:5:69","nodeType":"YulIdentifier","src":"826:5:69"},{"arguments":[{"name":"value","nativeSrc":"888:5:69","nodeType":"YulIdentifier","src":"888:5:69"}],"functionName":{"name":"cleanup_t_contract$_TransparentUpgradeableProxy_$19656","nativeSrc":"833:54:69","nodeType":"YulIdentifier","src":"833:54:69"},"nativeSrc":"833:61:69","nodeType":"YulFunctionCall","src":"833:61:69"}],"functionName":{"name":"eq","nativeSrc":"823:2:69","nodeType":"YulIdentifier","src":"823:2:69"},"nativeSrc":"823:72:69","nodeType":"YulFunctionCall","src":"823:72:69"}],"functionName":{"name":"iszero","nativeSrc":"816:6:69","nodeType":"YulIdentifier","src":"816:6:69"},"nativeSrc":"816:80:69","nodeType":"YulFunctionCall","src":"816:80:69"},"nativeSrc":"813:100:69","nodeType":"YulIf","src":"813:100:69"}]},"name":"validator_revert_t_contract$_TransparentUpgradeableProxy_$19656","nativeSrc":"723:196:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"796:5:69","nodeType":"YulTypedName","src":"796:5:69","type":""}],"src":"723:196:69"},{"body":{"nativeSrc":"1014:124:69","nodeType":"YulBlock","src":"1014:124:69","statements":[{"nativeSrc":"1024:29:69","nodeType":"YulAssignment","src":"1024:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"1046:6:69","nodeType":"YulIdentifier","src":"1046:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"1033:12:69","nodeType":"YulIdentifier","src":"1033:12:69"},"nativeSrc":"1033:20:69","nodeType":"YulFunctionCall","src":"1033:20:69"},"variableNames":[{"name":"value","nativeSrc":"1024:5:69","nodeType":"YulIdentifier","src":"1024:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"1126:5:69","nodeType":"YulIdentifier","src":"1126:5:69"}],"functionName":{"name":"validator_revert_t_contract$_TransparentUpgradeableProxy_$19656","nativeSrc":"1062:63:69","nodeType":"YulIdentifier","src":"1062:63:69"},"nativeSrc":"1062:70:69","nodeType":"YulFunctionCall","src":"1062:70:69"},"nativeSrc":"1062:70:69","nodeType":"YulExpressionStatement","src":"1062:70:69"}]},"name":"abi_decode_t_contract$_TransparentUpgradeableProxy_$19656","nativeSrc":"925:213:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"992:6:69","nodeType":"YulTypedName","src":"992:6:69","type":""},{"name":"end","nativeSrc":"1000:3:69","nodeType":"YulTypedName","src":"1000:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"1008:5:69","nodeType":"YulTypedName","src":"1008:5:69","type":""}],"src":"925:213:69"},{"body":{"nativeSrc":"1247:300:69","nodeType":"YulBlock","src":"1247:300:69","statements":[{"body":{"nativeSrc":"1293:83:69","nodeType":"YulBlock","src":"1293:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"1295:77:69","nodeType":"YulIdentifier","src":"1295:77:69"},"nativeSrc":"1295:79:69","nodeType":"YulFunctionCall","src":"1295:79:69"},"nativeSrc":"1295:79:69","nodeType":"YulExpressionStatement","src":"1295:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"1268:7:69","nodeType":"YulIdentifier","src":"1268:7:69"},{"name":"headStart","nativeSrc":"1277:9:69","nodeType":"YulIdentifier","src":"1277:9:69"}],"functionName":{"name":"sub","nativeSrc":"1264:3:69","nodeType":"YulIdentifier","src":"1264:3:69"},"nativeSrc":"1264:23:69","nodeType":"YulFunctionCall","src":"1264:23:69"},{"kind":"number","nativeSrc":"1289:2:69","nodeType":"YulLiteral","src":"1289:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"1260:3:69","nodeType":"YulIdentifier","src":"1260:3:69"},"nativeSrc":"1260:32:69","nodeType":"YulFunctionCall","src":"1260:32:69"},"nativeSrc":"1257:119:69","nodeType":"YulIf","src":"1257:119:69"},{"nativeSrc":"1386:154:69","nodeType":"YulBlock","src":"1386:154:69","statements":[{"nativeSrc":"1401:15:69","nodeType":"YulVariableDeclaration","src":"1401:15:69","value":{"kind":"number","nativeSrc":"1415:1:69","nodeType":"YulLiteral","src":"1415:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"1405:6:69","nodeType":"YulTypedName","src":"1405:6:69","type":""}]},{"nativeSrc":"1430:100:69","nodeType":"YulAssignment","src":"1430:100:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1502:9:69","nodeType":"YulIdentifier","src":"1502:9:69"},{"name":"offset","nativeSrc":"1513:6:69","nodeType":"YulIdentifier","src":"1513:6:69"}],"functionName":{"name":"add","nativeSrc":"1498:3:69","nodeType":"YulIdentifier","src":"1498:3:69"},"nativeSrc":"1498:22:69","nodeType":"YulFunctionCall","src":"1498:22:69"},{"name":"dataEnd","nativeSrc":"1522:7:69","nodeType":"YulIdentifier","src":"1522:7:69"}],"functionName":{"name":"abi_decode_t_contract$_TransparentUpgradeableProxy_$19656","nativeSrc":"1440:57:69","nodeType":"YulIdentifier","src":"1440:57:69"},"nativeSrc":"1440:90:69","nodeType":"YulFunctionCall","src":"1440:90:69"},"variableNames":[{"name":"value0","nativeSrc":"1430:6:69","nodeType":"YulIdentifier","src":"1430:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$19656","nativeSrc":"1144:403:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1217:9:69","nodeType":"YulTypedName","src":"1217:9:69","type":""},{"name":"dataEnd","nativeSrc":"1228:7:69","nodeType":"YulTypedName","src":"1228:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"1240:6:69","nodeType":"YulTypedName","src":"1240:6:69","type":""}],"src":"1144:403:69"},{"body":{"nativeSrc":"1598:51:69","nodeType":"YulBlock","src":"1598:51:69","statements":[{"nativeSrc":"1608:35:69","nodeType":"YulAssignment","src":"1608:35:69","value":{"arguments":[{"name":"value","nativeSrc":"1637:5:69","nodeType":"YulIdentifier","src":"1637:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"1619:17:69","nodeType":"YulIdentifier","src":"1619:17:69"},"nativeSrc":"1619:24:69","nodeType":"YulFunctionCall","src":"1619:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"1608:7:69","nodeType":"YulIdentifier","src":"1608:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"1553:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1580:5:69","nodeType":"YulTypedName","src":"1580:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"1590:7:69","nodeType":"YulTypedName","src":"1590:7:69","type":""}],"src":"1553:96:69"},{"body":{"nativeSrc":"1720:53:69","nodeType":"YulBlock","src":"1720:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"1737:3:69","nodeType":"YulIdentifier","src":"1737:3:69"},{"arguments":[{"name":"value","nativeSrc":"1760:5:69","nodeType":"YulIdentifier","src":"1760:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"1742:17:69","nodeType":"YulIdentifier","src":"1742:17:69"},"nativeSrc":"1742:24:69","nodeType":"YulFunctionCall","src":"1742:24:69"}],"functionName":{"name":"mstore","nativeSrc":"1730:6:69","nodeType":"YulIdentifier","src":"1730:6:69"},"nativeSrc":"1730:37:69","nodeType":"YulFunctionCall","src":"1730:37:69"},"nativeSrc":"1730:37:69","nodeType":"YulExpressionStatement","src":"1730:37:69"}]},"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"1655:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1708:5:69","nodeType":"YulTypedName","src":"1708:5:69","type":""},{"name":"pos","nativeSrc":"1715:3:69","nodeType":"YulTypedName","src":"1715:3:69","type":""}],"src":"1655:118:69"},{"body":{"nativeSrc":"1877:124:69","nodeType":"YulBlock","src":"1877:124:69","statements":[{"nativeSrc":"1887:26:69","nodeType":"YulAssignment","src":"1887:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"1899:9:69","nodeType":"YulIdentifier","src":"1899:9:69"},{"kind":"number","nativeSrc":"1910:2:69","nodeType":"YulLiteral","src":"1910:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1895:3:69","nodeType":"YulIdentifier","src":"1895:3:69"},"nativeSrc":"1895:18:69","nodeType":"YulFunctionCall","src":"1895:18:69"},"variableNames":[{"name":"tail","nativeSrc":"1887:4:69","nodeType":"YulIdentifier","src":"1887:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"1967:6:69","nodeType":"YulIdentifier","src":"1967:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"1980:9:69","nodeType":"YulIdentifier","src":"1980:9:69"},{"kind":"number","nativeSrc":"1991:1:69","nodeType":"YulLiteral","src":"1991:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"1976:3:69","nodeType":"YulIdentifier","src":"1976:3:69"},"nativeSrc":"1976:17:69","nodeType":"YulFunctionCall","src":"1976:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"1923:43:69","nodeType":"YulIdentifier","src":"1923:43:69"},"nativeSrc":"1923:71:69","nodeType":"YulFunctionCall","src":"1923:71:69"},"nativeSrc":"1923:71:69","nodeType":"YulExpressionStatement","src":"1923:71:69"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"1779:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1849:9:69","nodeType":"YulTypedName","src":"1849:9:69","type":""},{"name":"value0","nativeSrc":"1861:6:69","nodeType":"YulTypedName","src":"1861:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1872:4:69","nodeType":"YulTypedName","src":"1872:4:69","type":""}],"src":"1779:222:69"},{"body":{"nativeSrc":"2050:79:69","nodeType":"YulBlock","src":"2050:79:69","statements":[{"body":{"nativeSrc":"2107:16:69","nodeType":"YulBlock","src":"2107:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2116:1:69","nodeType":"YulLiteral","src":"2116:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"2119:1:69","nodeType":"YulLiteral","src":"2119:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2109:6:69","nodeType":"YulIdentifier","src":"2109:6:69"},"nativeSrc":"2109:12:69","nodeType":"YulFunctionCall","src":"2109:12:69"},"nativeSrc":"2109:12:69","nodeType":"YulExpressionStatement","src":"2109:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"2073:5:69","nodeType":"YulIdentifier","src":"2073:5:69"},{"arguments":[{"name":"value","nativeSrc":"2098:5:69","nodeType":"YulIdentifier","src":"2098:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"2080:17:69","nodeType":"YulIdentifier","src":"2080:17:69"},"nativeSrc":"2080:24:69","nodeType":"YulFunctionCall","src":"2080:24:69"}],"functionName":{"name":"eq","nativeSrc":"2070:2:69","nodeType":"YulIdentifier","src":"2070:2:69"},"nativeSrc":"2070:35:69","nodeType":"YulFunctionCall","src":"2070:35:69"}],"functionName":{"name":"iszero","nativeSrc":"2063:6:69","nodeType":"YulIdentifier","src":"2063:6:69"},"nativeSrc":"2063:43:69","nodeType":"YulFunctionCall","src":"2063:43:69"},"nativeSrc":"2060:63:69","nodeType":"YulIf","src":"2060:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"2007:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2043:5:69","nodeType":"YulTypedName","src":"2043:5:69","type":""}],"src":"2007:122:69"},{"body":{"nativeSrc":"2187:87:69","nodeType":"YulBlock","src":"2187:87:69","statements":[{"nativeSrc":"2197:29:69","nodeType":"YulAssignment","src":"2197:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"2219:6:69","nodeType":"YulIdentifier","src":"2219:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"2206:12:69","nodeType":"YulIdentifier","src":"2206:12:69"},"nativeSrc":"2206:20:69","nodeType":"YulFunctionCall","src":"2206:20:69"},"variableNames":[{"name":"value","nativeSrc":"2197:5:69","nodeType":"YulIdentifier","src":"2197:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"2262:5:69","nodeType":"YulIdentifier","src":"2262:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"2235:26:69","nodeType":"YulIdentifier","src":"2235:26:69"},"nativeSrc":"2235:33:69","nodeType":"YulFunctionCall","src":"2235:33:69"},"nativeSrc":"2235:33:69","nodeType":"YulExpressionStatement","src":"2235:33:69"}]},"name":"abi_decode_t_address","nativeSrc":"2135:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"2165:6:69","nodeType":"YulTypedName","src":"2165:6:69","type":""},{"name":"end","nativeSrc":"2173:3:69","nodeType":"YulTypedName","src":"2173:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"2181:5:69","nodeType":"YulTypedName","src":"2181:5:69","type":""}],"src":"2135:139:69"},{"body":{"nativeSrc":"2400:428:69","nodeType":"YulBlock","src":"2400:428:69","statements":[{"body":{"nativeSrc":"2446:83:69","nodeType":"YulBlock","src":"2446:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"2448:77:69","nodeType":"YulIdentifier","src":"2448:77:69"},"nativeSrc":"2448:79:69","nodeType":"YulFunctionCall","src":"2448:79:69"},"nativeSrc":"2448:79:69","nodeType":"YulExpressionStatement","src":"2448:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"2421:7:69","nodeType":"YulIdentifier","src":"2421:7:69"},{"name":"headStart","nativeSrc":"2430:9:69","nodeType":"YulIdentifier","src":"2430:9:69"}],"functionName":{"name":"sub","nativeSrc":"2417:3:69","nodeType":"YulIdentifier","src":"2417:3:69"},"nativeSrc":"2417:23:69","nodeType":"YulFunctionCall","src":"2417:23:69"},{"kind":"number","nativeSrc":"2442:2:69","nodeType":"YulLiteral","src":"2442:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"2413:3:69","nodeType":"YulIdentifier","src":"2413:3:69"},"nativeSrc":"2413:32:69","nodeType":"YulFunctionCall","src":"2413:32:69"},"nativeSrc":"2410:119:69","nodeType":"YulIf","src":"2410:119:69"},{"nativeSrc":"2539:154:69","nodeType":"YulBlock","src":"2539:154:69","statements":[{"nativeSrc":"2554:15:69","nodeType":"YulVariableDeclaration","src":"2554:15:69","value":{"kind":"number","nativeSrc":"2568:1:69","nodeType":"YulLiteral","src":"2568:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"2558:6:69","nodeType":"YulTypedName","src":"2558:6:69","type":""}]},{"nativeSrc":"2583:100:69","nodeType":"YulAssignment","src":"2583:100:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2655:9:69","nodeType":"YulIdentifier","src":"2655:9:69"},{"name":"offset","nativeSrc":"2666:6:69","nodeType":"YulIdentifier","src":"2666:6:69"}],"functionName":{"name":"add","nativeSrc":"2651:3:69","nodeType":"YulIdentifier","src":"2651:3:69"},"nativeSrc":"2651:22:69","nodeType":"YulFunctionCall","src":"2651:22:69"},{"name":"dataEnd","nativeSrc":"2675:7:69","nodeType":"YulIdentifier","src":"2675:7:69"}],"functionName":{"name":"abi_decode_t_contract$_TransparentUpgradeableProxy_$19656","nativeSrc":"2593:57:69","nodeType":"YulIdentifier","src":"2593:57:69"},"nativeSrc":"2593:90:69","nodeType":"YulFunctionCall","src":"2593:90:69"},"variableNames":[{"name":"value0","nativeSrc":"2583:6:69","nodeType":"YulIdentifier","src":"2583:6:69"}]}]},{"nativeSrc":"2703:118:69","nodeType":"YulBlock","src":"2703:118:69","statements":[{"nativeSrc":"2718:16:69","nodeType":"YulVariableDeclaration","src":"2718:16:69","value":{"kind":"number","nativeSrc":"2732:2:69","nodeType":"YulLiteral","src":"2732:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"2722:6:69","nodeType":"YulTypedName","src":"2722:6:69","type":""}]},{"nativeSrc":"2748:63:69","nodeType":"YulAssignment","src":"2748:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2783:9:69","nodeType":"YulIdentifier","src":"2783:9:69"},{"name":"offset","nativeSrc":"2794:6:69","nodeType":"YulIdentifier","src":"2794:6:69"}],"functionName":{"name":"add","nativeSrc":"2779:3:69","nodeType":"YulIdentifier","src":"2779:3:69"},"nativeSrc":"2779:22:69","nodeType":"YulFunctionCall","src":"2779:22:69"},{"name":"dataEnd","nativeSrc":"2803:7:69","nodeType":"YulIdentifier","src":"2803:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"2758:20:69","nodeType":"YulIdentifier","src":"2758:20:69"},"nativeSrc":"2758:53:69","nodeType":"YulFunctionCall","src":"2758:53:69"},"variableNames":[{"name":"value1","nativeSrc":"2748:6:69","nodeType":"YulIdentifier","src":"2748:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$19656t_address","nativeSrc":"2280:548:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2362:9:69","nodeType":"YulTypedName","src":"2362:9:69","type":""},{"name":"dataEnd","nativeSrc":"2373:7:69","nodeType":"YulTypedName","src":"2373:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"2385:6:69","nodeType":"YulTypedName","src":"2385:6:69","type":""},{"name":"value1","nativeSrc":"2393:6:69","nodeType":"YulTypedName","src":"2393:6:69","type":""}],"src":"2280:548:69"},{"body":{"nativeSrc":"2923:28:69","nodeType":"YulBlock","src":"2923:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2940:1:69","nodeType":"YulLiteral","src":"2940:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"2943:1:69","nodeType":"YulLiteral","src":"2943:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2933:6:69","nodeType":"YulIdentifier","src":"2933:6:69"},"nativeSrc":"2933:12:69","nodeType":"YulFunctionCall","src":"2933:12:69"},"nativeSrc":"2933:12:69","nodeType":"YulExpressionStatement","src":"2933:12:69"}]},"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"2834:117:69","nodeType":"YulFunctionDefinition","src":"2834:117:69"},{"body":{"nativeSrc":"3046:28:69","nodeType":"YulBlock","src":"3046:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3063:1:69","nodeType":"YulLiteral","src":"3063:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"3066:1:69","nodeType":"YulLiteral","src":"3066:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"3056:6:69","nodeType":"YulIdentifier","src":"3056:6:69"},"nativeSrc":"3056:12:69","nodeType":"YulFunctionCall","src":"3056:12:69"},"nativeSrc":"3056:12:69","nodeType":"YulExpressionStatement","src":"3056:12:69"}]},"name":"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae","nativeSrc":"2957:117:69","nodeType":"YulFunctionDefinition","src":"2957:117:69"},{"body":{"nativeSrc":"3128:54:69","nodeType":"YulBlock","src":"3128:54:69","statements":[{"nativeSrc":"3138:38:69","nodeType":"YulAssignment","src":"3138:38:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"3156:5:69","nodeType":"YulIdentifier","src":"3156:5:69"},{"kind":"number","nativeSrc":"3163:2:69","nodeType":"YulLiteral","src":"3163:2:69","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"3152:3:69","nodeType":"YulIdentifier","src":"3152:3:69"},"nativeSrc":"3152:14:69","nodeType":"YulFunctionCall","src":"3152:14:69"},{"arguments":[{"kind":"number","nativeSrc":"3172:2:69","nodeType":"YulLiteral","src":"3172:2:69","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"3168:3:69","nodeType":"YulIdentifier","src":"3168:3:69"},"nativeSrc":"3168:7:69","nodeType":"YulFunctionCall","src":"3168:7:69"}],"functionName":{"name":"and","nativeSrc":"3148:3:69","nodeType":"YulIdentifier","src":"3148:3:69"},"nativeSrc":"3148:28:69","nodeType":"YulFunctionCall","src":"3148:28:69"},"variableNames":[{"name":"result","nativeSrc":"3138:6:69","nodeType":"YulIdentifier","src":"3138:6:69"}]}]},"name":"round_up_to_mul_of_32","nativeSrc":"3080:102:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"3111:5:69","nodeType":"YulTypedName","src":"3111:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"3121:6:69","nodeType":"YulTypedName","src":"3121:6:69","type":""}],"src":"3080:102:69"},{"body":{"nativeSrc":"3216:152:69","nodeType":"YulBlock","src":"3216:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3233:1:69","nodeType":"YulLiteral","src":"3233:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"3236:77:69","nodeType":"YulLiteral","src":"3236:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"3226:6:69","nodeType":"YulIdentifier","src":"3226:6:69"},"nativeSrc":"3226:88:69","nodeType":"YulFunctionCall","src":"3226:88:69"},"nativeSrc":"3226:88:69","nodeType":"YulExpressionStatement","src":"3226:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"3330:1:69","nodeType":"YulLiteral","src":"3330:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"3333:4:69","nodeType":"YulLiteral","src":"3333:4:69","type":"","value":"0x41"}],"functionName":{"name":"mstore","nativeSrc":"3323:6:69","nodeType":"YulIdentifier","src":"3323:6:69"},"nativeSrc":"3323:15:69","nodeType":"YulFunctionCall","src":"3323:15:69"},"nativeSrc":"3323:15:69","nodeType":"YulExpressionStatement","src":"3323:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"3354:1:69","nodeType":"YulLiteral","src":"3354:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"3357:4:69","nodeType":"YulLiteral","src":"3357:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"3347:6:69","nodeType":"YulIdentifier","src":"3347:6:69"},"nativeSrc":"3347:15:69","nodeType":"YulFunctionCall","src":"3347:15:69"},"nativeSrc":"3347:15:69","nodeType":"YulExpressionStatement","src":"3347:15:69"}]},"name":"panic_error_0x41","nativeSrc":"3188:180:69","nodeType":"YulFunctionDefinition","src":"3188:180:69"},{"body":{"nativeSrc":"3417:238:69","nodeType":"YulBlock","src":"3417:238:69","statements":[{"nativeSrc":"3427:58:69","nodeType":"YulVariableDeclaration","src":"3427:58:69","value":{"arguments":[{"name":"memPtr","nativeSrc":"3449:6:69","nodeType":"YulIdentifier","src":"3449:6:69"},{"arguments":[{"name":"size","nativeSrc":"3479:4:69","nodeType":"YulIdentifier","src":"3479:4:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"3457:21:69","nodeType":"YulIdentifier","src":"3457:21:69"},"nativeSrc":"3457:27:69","nodeType":"YulFunctionCall","src":"3457:27:69"}],"functionName":{"name":"add","nativeSrc":"3445:3:69","nodeType":"YulIdentifier","src":"3445:3:69"},"nativeSrc":"3445:40:69","nodeType":"YulFunctionCall","src":"3445:40:69"},"variables":[{"name":"newFreePtr","nativeSrc":"3431:10:69","nodeType":"YulTypedName","src":"3431:10:69","type":""}]},{"body":{"nativeSrc":"3596:22:69","nodeType":"YulBlock","src":"3596:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"3598:16:69","nodeType":"YulIdentifier","src":"3598:16:69"},"nativeSrc":"3598:18:69","nodeType":"YulFunctionCall","src":"3598:18:69"},"nativeSrc":"3598:18:69","nodeType":"YulExpressionStatement","src":"3598:18:69"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nativeSrc":"3539:10:69","nodeType":"YulIdentifier","src":"3539:10:69"},{"kind":"number","nativeSrc":"3551:18:69","nodeType":"YulLiteral","src":"3551:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"3536:2:69","nodeType":"YulIdentifier","src":"3536:2:69"},"nativeSrc":"3536:34:69","nodeType":"YulFunctionCall","src":"3536:34:69"},{"arguments":[{"name":"newFreePtr","nativeSrc":"3575:10:69","nodeType":"YulIdentifier","src":"3575:10:69"},{"name":"memPtr","nativeSrc":"3587:6:69","nodeType":"YulIdentifier","src":"3587:6:69"}],"functionName":{"name":"lt","nativeSrc":"3572:2:69","nodeType":"YulIdentifier","src":"3572:2:69"},"nativeSrc":"3572:22:69","nodeType":"YulFunctionCall","src":"3572:22:69"}],"functionName":{"name":"or","nativeSrc":"3533:2:69","nodeType":"YulIdentifier","src":"3533:2:69"},"nativeSrc":"3533:62:69","nodeType":"YulFunctionCall","src":"3533:62:69"},"nativeSrc":"3530:88:69","nodeType":"YulIf","src":"3530:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"3634:2:69","nodeType":"YulLiteral","src":"3634:2:69","type":"","value":"64"},{"name":"newFreePtr","nativeSrc":"3638:10:69","nodeType":"YulIdentifier","src":"3638:10:69"}],"functionName":{"name":"mstore","nativeSrc":"3627:6:69","nodeType":"YulIdentifier","src":"3627:6:69"},"nativeSrc":"3627:22:69","nodeType":"YulFunctionCall","src":"3627:22:69"},"nativeSrc":"3627:22:69","nodeType":"YulExpressionStatement","src":"3627:22:69"}]},"name":"finalize_allocation","nativeSrc":"3374:281:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"3403:6:69","nodeType":"YulTypedName","src":"3403:6:69","type":""},{"name":"size","nativeSrc":"3411:4:69","nodeType":"YulTypedName","src":"3411:4:69","type":""}],"src":"3374:281:69"},{"body":{"nativeSrc":"3702:88:69","nodeType":"YulBlock","src":"3702:88:69","statements":[{"nativeSrc":"3712:30:69","nodeType":"YulAssignment","src":"3712:30:69","value":{"arguments":[],"functionName":{"name":"allocate_unbounded","nativeSrc":"3722:18:69","nodeType":"YulIdentifier","src":"3722:18:69"},"nativeSrc":"3722:20:69","nodeType":"YulFunctionCall","src":"3722:20:69"},"variableNames":[{"name":"memPtr","nativeSrc":"3712:6:69","nodeType":"YulIdentifier","src":"3712:6:69"}]},{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"3771:6:69","nodeType":"YulIdentifier","src":"3771:6:69"},{"name":"size","nativeSrc":"3779:4:69","nodeType":"YulIdentifier","src":"3779:4:69"}],"functionName":{"name":"finalize_allocation","nativeSrc":"3751:19:69","nodeType":"YulIdentifier","src":"3751:19:69"},"nativeSrc":"3751:33:69","nodeType":"YulFunctionCall","src":"3751:33:69"},"nativeSrc":"3751:33:69","nodeType":"YulExpressionStatement","src":"3751:33:69"}]},"name":"allocate_memory","nativeSrc":"3661:129:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nativeSrc":"3686:4:69","nodeType":"YulTypedName","src":"3686:4:69","type":""}],"returnVariables":[{"name":"memPtr","nativeSrc":"3695:6:69","nodeType":"YulTypedName","src":"3695:6:69","type":""}],"src":"3661:129:69"},{"body":{"nativeSrc":"3862:241:69","nodeType":"YulBlock","src":"3862:241:69","statements":[{"body":{"nativeSrc":"3967:22:69","nodeType":"YulBlock","src":"3967:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"3969:16:69","nodeType":"YulIdentifier","src":"3969:16:69"},"nativeSrc":"3969:18:69","nodeType":"YulFunctionCall","src":"3969:18:69"},"nativeSrc":"3969:18:69","nodeType":"YulExpressionStatement","src":"3969:18:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"3939:6:69","nodeType":"YulIdentifier","src":"3939:6:69"},{"kind":"number","nativeSrc":"3947:18:69","nodeType":"YulLiteral","src":"3947:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"3936:2:69","nodeType":"YulIdentifier","src":"3936:2:69"},"nativeSrc":"3936:30:69","nodeType":"YulFunctionCall","src":"3936:30:69"},"nativeSrc":"3933:56:69","nodeType":"YulIf","src":"3933:56:69"},{"nativeSrc":"3999:37:69","nodeType":"YulAssignment","src":"3999:37:69","value":{"arguments":[{"name":"length","nativeSrc":"4029:6:69","nodeType":"YulIdentifier","src":"4029:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"4007:21:69","nodeType":"YulIdentifier","src":"4007:21:69"},"nativeSrc":"4007:29:69","nodeType":"YulFunctionCall","src":"4007:29:69"},"variableNames":[{"name":"size","nativeSrc":"3999:4:69","nodeType":"YulIdentifier","src":"3999:4:69"}]},{"nativeSrc":"4073:23:69","nodeType":"YulAssignment","src":"4073:23:69","value":{"arguments":[{"name":"size","nativeSrc":"4085:4:69","nodeType":"YulIdentifier","src":"4085:4:69"},{"kind":"number","nativeSrc":"4091:4:69","nodeType":"YulLiteral","src":"4091:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4081:3:69","nodeType":"YulIdentifier","src":"4081:3:69"},"nativeSrc":"4081:15:69","nodeType":"YulFunctionCall","src":"4081:15:69"},"variableNames":[{"name":"size","nativeSrc":"4073:4:69","nodeType":"YulIdentifier","src":"4073:4:69"}]}]},"name":"array_allocation_size_t_bytes_memory_ptr","nativeSrc":"3796:307:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nativeSrc":"3846:6:69","nodeType":"YulTypedName","src":"3846:6:69","type":""}],"returnVariables":[{"name":"size","nativeSrc":"3857:4:69","nodeType":"YulTypedName","src":"3857:4:69","type":""}],"src":"3796:307:69"},{"body":{"nativeSrc":"4173:84:69","nodeType":"YulBlock","src":"4173:84:69","statements":[{"expression":{"arguments":[{"name":"dst","nativeSrc":"4197:3:69","nodeType":"YulIdentifier","src":"4197:3:69"},{"name":"src","nativeSrc":"4202:3:69","nodeType":"YulIdentifier","src":"4202:3:69"},{"name":"length","nativeSrc":"4207:6:69","nodeType":"YulIdentifier","src":"4207:6:69"}],"functionName":{"name":"calldatacopy","nativeSrc":"4184:12:69","nodeType":"YulIdentifier","src":"4184:12:69"},"nativeSrc":"4184:30:69","nodeType":"YulFunctionCall","src":"4184:30:69"},"nativeSrc":"4184:30:69","nodeType":"YulExpressionStatement","src":"4184:30:69"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"4234:3:69","nodeType":"YulIdentifier","src":"4234:3:69"},{"name":"length","nativeSrc":"4239:6:69","nodeType":"YulIdentifier","src":"4239:6:69"}],"functionName":{"name":"add","nativeSrc":"4230:3:69","nodeType":"YulIdentifier","src":"4230:3:69"},"nativeSrc":"4230:16:69","nodeType":"YulFunctionCall","src":"4230:16:69"},{"kind":"number","nativeSrc":"4248:1:69","nodeType":"YulLiteral","src":"4248:1:69","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"4223:6:69","nodeType":"YulIdentifier","src":"4223:6:69"},"nativeSrc":"4223:27:69","nodeType":"YulFunctionCall","src":"4223:27:69"},"nativeSrc":"4223:27:69","nodeType":"YulExpressionStatement","src":"4223:27:69"}]},"name":"copy_calldata_to_memory_with_cleanup","nativeSrc":"4109:148:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"4155:3:69","nodeType":"YulTypedName","src":"4155:3:69","type":""},{"name":"dst","nativeSrc":"4160:3:69","nodeType":"YulTypedName","src":"4160:3:69","type":""},{"name":"length","nativeSrc":"4165:6:69","nodeType":"YulTypedName","src":"4165:6:69","type":""}],"src":"4109:148:69"},{"body":{"nativeSrc":"4346:340:69","nodeType":"YulBlock","src":"4346:340:69","statements":[{"nativeSrc":"4356:74:69","nodeType":"YulAssignment","src":"4356:74:69","value":{"arguments":[{"arguments":[{"name":"length","nativeSrc":"4422:6:69","nodeType":"YulIdentifier","src":"4422:6:69"}],"functionName":{"name":"array_allocation_size_t_bytes_memory_ptr","nativeSrc":"4381:40:69","nodeType":"YulIdentifier","src":"4381:40:69"},"nativeSrc":"4381:48:69","nodeType":"YulFunctionCall","src":"4381:48:69"}],"functionName":{"name":"allocate_memory","nativeSrc":"4365:15:69","nodeType":"YulIdentifier","src":"4365:15:69"},"nativeSrc":"4365:65:69","nodeType":"YulFunctionCall","src":"4365:65:69"},"variableNames":[{"name":"array","nativeSrc":"4356:5:69","nodeType":"YulIdentifier","src":"4356:5:69"}]},{"expression":{"arguments":[{"name":"array","nativeSrc":"4446:5:69","nodeType":"YulIdentifier","src":"4446:5:69"},{"name":"length","nativeSrc":"4453:6:69","nodeType":"YulIdentifier","src":"4453:6:69"}],"functionName":{"name":"mstore","nativeSrc":"4439:6:69","nodeType":"YulIdentifier","src":"4439:6:69"},"nativeSrc":"4439:21:69","nodeType":"YulFunctionCall","src":"4439:21:69"},"nativeSrc":"4439:21:69","nodeType":"YulExpressionStatement","src":"4439:21:69"},{"nativeSrc":"4469:27:69","nodeType":"YulVariableDeclaration","src":"4469:27:69","value":{"arguments":[{"name":"array","nativeSrc":"4484:5:69","nodeType":"YulIdentifier","src":"4484:5:69"},{"kind":"number","nativeSrc":"4491:4:69","nodeType":"YulLiteral","src":"4491:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4480:3:69","nodeType":"YulIdentifier","src":"4480:3:69"},"nativeSrc":"4480:16:69","nodeType":"YulFunctionCall","src":"4480:16:69"},"variables":[{"name":"dst","nativeSrc":"4473:3:69","nodeType":"YulTypedName","src":"4473:3:69","type":""}]},{"body":{"nativeSrc":"4534:83:69","nodeType":"YulBlock","src":"4534:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae","nativeSrc":"4536:77:69","nodeType":"YulIdentifier","src":"4536:77:69"},"nativeSrc":"4536:79:69","nodeType":"YulFunctionCall","src":"4536:79:69"},"nativeSrc":"4536:79:69","nodeType":"YulExpressionStatement","src":"4536:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"src","nativeSrc":"4515:3:69","nodeType":"YulIdentifier","src":"4515:3:69"},{"name":"length","nativeSrc":"4520:6:69","nodeType":"YulIdentifier","src":"4520:6:69"}],"functionName":{"name":"add","nativeSrc":"4511:3:69","nodeType":"YulIdentifier","src":"4511:3:69"},"nativeSrc":"4511:16:69","nodeType":"YulFunctionCall","src":"4511:16:69"},{"name":"end","nativeSrc":"4529:3:69","nodeType":"YulIdentifier","src":"4529:3:69"}],"functionName":{"name":"gt","nativeSrc":"4508:2:69","nodeType":"YulIdentifier","src":"4508:2:69"},"nativeSrc":"4508:25:69","nodeType":"YulFunctionCall","src":"4508:25:69"},"nativeSrc":"4505:112:69","nodeType":"YulIf","src":"4505:112:69"},{"expression":{"arguments":[{"name":"src","nativeSrc":"4663:3:69","nodeType":"YulIdentifier","src":"4663:3:69"},{"name":"dst","nativeSrc":"4668:3:69","nodeType":"YulIdentifier","src":"4668:3:69"},{"name":"length","nativeSrc":"4673:6:69","nodeType":"YulIdentifier","src":"4673:6:69"}],"functionName":{"name":"copy_calldata_to_memory_with_cleanup","nativeSrc":"4626:36:69","nodeType":"YulIdentifier","src":"4626:36:69"},"nativeSrc":"4626:54:69","nodeType":"YulFunctionCall","src":"4626:54:69"},"nativeSrc":"4626:54:69","nodeType":"YulExpressionStatement","src":"4626:54:69"}]},"name":"abi_decode_available_length_t_bytes_memory_ptr","nativeSrc":"4263:423:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"4319:3:69","nodeType":"YulTypedName","src":"4319:3:69","type":""},{"name":"length","nativeSrc":"4324:6:69","nodeType":"YulTypedName","src":"4324:6:69","type":""},{"name":"end","nativeSrc":"4332:3:69","nodeType":"YulTypedName","src":"4332:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"4340:5:69","nodeType":"YulTypedName","src":"4340:5:69","type":""}],"src":"4263:423:69"},{"body":{"nativeSrc":"4766:277:69","nodeType":"YulBlock","src":"4766:277:69","statements":[{"body":{"nativeSrc":"4815:83:69","nodeType":"YulBlock","src":"4815:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"4817:77:69","nodeType":"YulIdentifier","src":"4817:77:69"},"nativeSrc":"4817:79:69","nodeType":"YulFunctionCall","src":"4817:79:69"},"nativeSrc":"4817:79:69","nodeType":"YulExpressionStatement","src":"4817:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"4794:6:69","nodeType":"YulIdentifier","src":"4794:6:69"},{"kind":"number","nativeSrc":"4802:4:69","nodeType":"YulLiteral","src":"4802:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"4790:3:69","nodeType":"YulIdentifier","src":"4790:3:69"},"nativeSrc":"4790:17:69","nodeType":"YulFunctionCall","src":"4790:17:69"},{"name":"end","nativeSrc":"4809:3:69","nodeType":"YulIdentifier","src":"4809:3:69"}],"functionName":{"name":"slt","nativeSrc":"4786:3:69","nodeType":"YulIdentifier","src":"4786:3:69"},"nativeSrc":"4786:27:69","nodeType":"YulFunctionCall","src":"4786:27:69"}],"functionName":{"name":"iszero","nativeSrc":"4779:6:69","nodeType":"YulIdentifier","src":"4779:6:69"},"nativeSrc":"4779:35:69","nodeType":"YulFunctionCall","src":"4779:35:69"},"nativeSrc":"4776:122:69","nodeType":"YulIf","src":"4776:122:69"},{"nativeSrc":"4907:34:69","nodeType":"YulVariableDeclaration","src":"4907:34:69","value":{"arguments":[{"name":"offset","nativeSrc":"4934:6:69","nodeType":"YulIdentifier","src":"4934:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"4921:12:69","nodeType":"YulIdentifier","src":"4921:12:69"},"nativeSrc":"4921:20:69","nodeType":"YulFunctionCall","src":"4921:20:69"},"variables":[{"name":"length","nativeSrc":"4911:6:69","nodeType":"YulTypedName","src":"4911:6:69","type":""}]},{"nativeSrc":"4950:87:69","nodeType":"YulAssignment","src":"4950:87:69","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"5010:6:69","nodeType":"YulIdentifier","src":"5010:6:69"},{"kind":"number","nativeSrc":"5018:4:69","nodeType":"YulLiteral","src":"5018:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5006:3:69","nodeType":"YulIdentifier","src":"5006:3:69"},"nativeSrc":"5006:17:69","nodeType":"YulFunctionCall","src":"5006:17:69"},{"name":"length","nativeSrc":"5025:6:69","nodeType":"YulIdentifier","src":"5025:6:69"},{"name":"end","nativeSrc":"5033:3:69","nodeType":"YulIdentifier","src":"5033:3:69"}],"functionName":{"name":"abi_decode_available_length_t_bytes_memory_ptr","nativeSrc":"4959:46:69","nodeType":"YulIdentifier","src":"4959:46:69"},"nativeSrc":"4959:78:69","nodeType":"YulFunctionCall","src":"4959:78:69"},"variableNames":[{"name":"array","nativeSrc":"4950:5:69","nodeType":"YulIdentifier","src":"4950:5:69"}]}]},"name":"abi_decode_t_bytes_memory_ptr","nativeSrc":"4705:338:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"4744:6:69","nodeType":"YulTypedName","src":"4744:6:69","type":""},{"name":"end","nativeSrc":"4752:3:69","nodeType":"YulTypedName","src":"4752:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"4760:5:69","nodeType":"YulTypedName","src":"4760:5:69","type":""}],"src":"4705:338:69"},{"body":{"nativeSrc":"5195:725:69","nodeType":"YulBlock","src":"5195:725:69","statements":[{"body":{"nativeSrc":"5241:83:69","nodeType":"YulBlock","src":"5241:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"5243:77:69","nodeType":"YulIdentifier","src":"5243:77:69"},"nativeSrc":"5243:79:69","nodeType":"YulFunctionCall","src":"5243:79:69"},"nativeSrc":"5243:79:69","nodeType":"YulExpressionStatement","src":"5243:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"5216:7:69","nodeType":"YulIdentifier","src":"5216:7:69"},{"name":"headStart","nativeSrc":"5225:9:69","nodeType":"YulIdentifier","src":"5225:9:69"}],"functionName":{"name":"sub","nativeSrc":"5212:3:69","nodeType":"YulIdentifier","src":"5212:3:69"},"nativeSrc":"5212:23:69","nodeType":"YulFunctionCall","src":"5212:23:69"},{"kind":"number","nativeSrc":"5237:2:69","nodeType":"YulLiteral","src":"5237:2:69","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"5208:3:69","nodeType":"YulIdentifier","src":"5208:3:69"},"nativeSrc":"5208:32:69","nodeType":"YulFunctionCall","src":"5208:32:69"},"nativeSrc":"5205:119:69","nodeType":"YulIf","src":"5205:119:69"},{"nativeSrc":"5334:154:69","nodeType":"YulBlock","src":"5334:154:69","statements":[{"nativeSrc":"5349:15:69","nodeType":"YulVariableDeclaration","src":"5349:15:69","value":{"kind":"number","nativeSrc":"5363:1:69","nodeType":"YulLiteral","src":"5363:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"5353:6:69","nodeType":"YulTypedName","src":"5353:6:69","type":""}]},{"nativeSrc":"5378:100:69","nodeType":"YulAssignment","src":"5378:100:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5450:9:69","nodeType":"YulIdentifier","src":"5450:9:69"},{"name":"offset","nativeSrc":"5461:6:69","nodeType":"YulIdentifier","src":"5461:6:69"}],"functionName":{"name":"add","nativeSrc":"5446:3:69","nodeType":"YulIdentifier","src":"5446:3:69"},"nativeSrc":"5446:22:69","nodeType":"YulFunctionCall","src":"5446:22:69"},{"name":"dataEnd","nativeSrc":"5470:7:69","nodeType":"YulIdentifier","src":"5470:7:69"}],"functionName":{"name":"abi_decode_t_contract$_TransparentUpgradeableProxy_$19656","nativeSrc":"5388:57:69","nodeType":"YulIdentifier","src":"5388:57:69"},"nativeSrc":"5388:90:69","nodeType":"YulFunctionCall","src":"5388:90:69"},"variableNames":[{"name":"value0","nativeSrc":"5378:6:69","nodeType":"YulIdentifier","src":"5378:6:69"}]}]},{"nativeSrc":"5498:118:69","nodeType":"YulBlock","src":"5498:118:69","statements":[{"nativeSrc":"5513:16:69","nodeType":"YulVariableDeclaration","src":"5513:16:69","value":{"kind":"number","nativeSrc":"5527:2:69","nodeType":"YulLiteral","src":"5527:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"5517:6:69","nodeType":"YulTypedName","src":"5517:6:69","type":""}]},{"nativeSrc":"5543:63:69","nodeType":"YulAssignment","src":"5543:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5578:9:69","nodeType":"YulIdentifier","src":"5578:9:69"},{"name":"offset","nativeSrc":"5589:6:69","nodeType":"YulIdentifier","src":"5589:6:69"}],"functionName":{"name":"add","nativeSrc":"5574:3:69","nodeType":"YulIdentifier","src":"5574:3:69"},"nativeSrc":"5574:22:69","nodeType":"YulFunctionCall","src":"5574:22:69"},{"name":"dataEnd","nativeSrc":"5598:7:69","nodeType":"YulIdentifier","src":"5598:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"5553:20:69","nodeType":"YulIdentifier","src":"5553:20:69"},"nativeSrc":"5553:53:69","nodeType":"YulFunctionCall","src":"5553:53:69"},"variableNames":[{"name":"value1","nativeSrc":"5543:6:69","nodeType":"YulIdentifier","src":"5543:6:69"}]}]},{"nativeSrc":"5626:287:69","nodeType":"YulBlock","src":"5626:287:69","statements":[{"nativeSrc":"5641:46:69","nodeType":"YulVariableDeclaration","src":"5641:46:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5672:9:69","nodeType":"YulIdentifier","src":"5672:9:69"},{"kind":"number","nativeSrc":"5683:2:69","nodeType":"YulLiteral","src":"5683:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"5668:3:69","nodeType":"YulIdentifier","src":"5668:3:69"},"nativeSrc":"5668:18:69","nodeType":"YulFunctionCall","src":"5668:18:69"}],"functionName":{"name":"calldataload","nativeSrc":"5655:12:69","nodeType":"YulIdentifier","src":"5655:12:69"},"nativeSrc":"5655:32:69","nodeType":"YulFunctionCall","src":"5655:32:69"},"variables":[{"name":"offset","nativeSrc":"5645:6:69","nodeType":"YulTypedName","src":"5645:6:69","type":""}]},{"body":{"nativeSrc":"5734:83:69","nodeType":"YulBlock","src":"5734:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"5736:77:69","nodeType":"YulIdentifier","src":"5736:77:69"},"nativeSrc":"5736:79:69","nodeType":"YulFunctionCall","src":"5736:79:69"},"nativeSrc":"5736:79:69","nodeType":"YulExpressionStatement","src":"5736:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"5706:6:69","nodeType":"YulIdentifier","src":"5706:6:69"},{"kind":"number","nativeSrc":"5714:18:69","nodeType":"YulLiteral","src":"5714:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"5703:2:69","nodeType":"YulIdentifier","src":"5703:2:69"},"nativeSrc":"5703:30:69","nodeType":"YulFunctionCall","src":"5703:30:69"},"nativeSrc":"5700:117:69","nodeType":"YulIf","src":"5700:117:69"},{"nativeSrc":"5831:72:69","nodeType":"YulAssignment","src":"5831:72:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5875:9:69","nodeType":"YulIdentifier","src":"5875:9:69"},{"name":"offset","nativeSrc":"5886:6:69","nodeType":"YulIdentifier","src":"5886:6:69"}],"functionName":{"name":"add","nativeSrc":"5871:3:69","nodeType":"YulIdentifier","src":"5871:3:69"},"nativeSrc":"5871:22:69","nodeType":"YulFunctionCall","src":"5871:22:69"},{"name":"dataEnd","nativeSrc":"5895:7:69","nodeType":"YulIdentifier","src":"5895:7:69"}],"functionName":{"name":"abi_decode_t_bytes_memory_ptr","nativeSrc":"5841:29:69","nodeType":"YulIdentifier","src":"5841:29:69"},"nativeSrc":"5841:62:69","nodeType":"YulFunctionCall","src":"5841:62:69"},"variableNames":[{"name":"value2","nativeSrc":"5831:6:69","nodeType":"YulIdentifier","src":"5831:6:69"}]}]}]},"name":"abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$19656t_addresst_bytes_memory_ptr","nativeSrc":"5049:871:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5149:9:69","nodeType":"YulTypedName","src":"5149:9:69","type":""},{"name":"dataEnd","nativeSrc":"5160:7:69","nodeType":"YulTypedName","src":"5160:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"5172:6:69","nodeType":"YulTypedName","src":"5172:6:69","type":""},{"name":"value1","nativeSrc":"5180:6:69","nodeType":"YulTypedName","src":"5180:6:69","type":""},{"name":"value2","nativeSrc":"5188:6:69","nodeType":"YulTypedName","src":"5188:6:69","type":""}],"src":"5049:871:69"},{"body":{"nativeSrc":"5992:263:69","nodeType":"YulBlock","src":"5992:263:69","statements":[{"body":{"nativeSrc":"6038:83:69","nodeType":"YulBlock","src":"6038:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"6040:77:69","nodeType":"YulIdentifier","src":"6040:77:69"},"nativeSrc":"6040:79:69","nodeType":"YulFunctionCall","src":"6040:79:69"},"nativeSrc":"6040:79:69","nodeType":"YulExpressionStatement","src":"6040:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"6013:7:69","nodeType":"YulIdentifier","src":"6013:7:69"},{"name":"headStart","nativeSrc":"6022:9:69","nodeType":"YulIdentifier","src":"6022:9:69"}],"functionName":{"name":"sub","nativeSrc":"6009:3:69","nodeType":"YulIdentifier","src":"6009:3:69"},"nativeSrc":"6009:23:69","nodeType":"YulFunctionCall","src":"6009:23:69"},{"kind":"number","nativeSrc":"6034:2:69","nodeType":"YulLiteral","src":"6034:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"6005:3:69","nodeType":"YulIdentifier","src":"6005:3:69"},"nativeSrc":"6005:32:69","nodeType":"YulFunctionCall","src":"6005:32:69"},"nativeSrc":"6002:119:69","nodeType":"YulIf","src":"6002:119:69"},{"nativeSrc":"6131:117:69","nodeType":"YulBlock","src":"6131:117:69","statements":[{"nativeSrc":"6146:15:69","nodeType":"YulVariableDeclaration","src":"6146:15:69","value":{"kind":"number","nativeSrc":"6160:1:69","nodeType":"YulLiteral","src":"6160:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"6150:6:69","nodeType":"YulTypedName","src":"6150:6:69","type":""}]},{"nativeSrc":"6175:63:69","nodeType":"YulAssignment","src":"6175:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6210:9:69","nodeType":"YulIdentifier","src":"6210:9:69"},{"name":"offset","nativeSrc":"6221:6:69","nodeType":"YulIdentifier","src":"6221:6:69"}],"functionName":{"name":"add","nativeSrc":"6206:3:69","nodeType":"YulIdentifier","src":"6206:3:69"},"nativeSrc":"6206:22:69","nodeType":"YulFunctionCall","src":"6206:22:69"},{"name":"dataEnd","nativeSrc":"6230:7:69","nodeType":"YulIdentifier","src":"6230:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"6185:20:69","nodeType":"YulIdentifier","src":"6185:20:69"},"nativeSrc":"6185:53:69","nodeType":"YulFunctionCall","src":"6185:53:69"},"variableNames":[{"name":"value0","nativeSrc":"6175:6:69","nodeType":"YulIdentifier","src":"6175:6:69"}]}]}]},"name":"abi_decode_tuple_t_address","nativeSrc":"5926:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5962:9:69","nodeType":"YulTypedName","src":"5962:9:69","type":""},{"name":"dataEnd","nativeSrc":"5973:7:69","nodeType":"YulTypedName","src":"5973:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"5985:6:69","nodeType":"YulTypedName","src":"5985:6:69","type":""}],"src":"5926:329:69"},{"body":{"nativeSrc":"6374:34:69","nodeType":"YulBlock","src":"6374:34:69","statements":[{"nativeSrc":"6384:18:69","nodeType":"YulAssignment","src":"6384:18:69","value":{"name":"pos","nativeSrc":"6399:3:69","nodeType":"YulIdentifier","src":"6399:3:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"6384:11:69","nodeType":"YulIdentifier","src":"6384:11:69"}]}]},"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"6261:147:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"6346:3:69","nodeType":"YulTypedName","src":"6346:3:69","type":""},{"name":"length","nativeSrc":"6351:6:69","nodeType":"YulTypedName","src":"6351:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"6362:11:69","nodeType":"YulTypedName","src":"6362:11:69","type":""}],"src":"6261:147:69"},{"body":{"nativeSrc":"6520:108:69","nodeType":"YulBlock","src":"6520:108:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"6542:6:69","nodeType":"YulIdentifier","src":"6542:6:69"},{"kind":"number","nativeSrc":"6550:1:69","nodeType":"YulLiteral","src":"6550:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"6538:3:69","nodeType":"YulIdentifier","src":"6538:3:69"},"nativeSrc":"6538:14:69","nodeType":"YulFunctionCall","src":"6538:14:69"},{"kind":"number","nativeSrc":"6554:66:69","nodeType":"YulLiteral","src":"6554:66:69","type":"","value":"0x5c60da1b00000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"mstore","nativeSrc":"6531:6:69","nodeType":"YulIdentifier","src":"6531:6:69"},"nativeSrc":"6531:90:69","nodeType":"YulFunctionCall","src":"6531:90:69"},"nativeSrc":"6531:90:69","nodeType":"YulExpressionStatement","src":"6531:90:69"}]},"name":"store_literal_in_memory_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29","nativeSrc":"6414:214:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"6512:6:69","nodeType":"YulTypedName","src":"6512:6:69","type":""}],"src":"6414:214:69"},{"body":{"nativeSrc":"6797:235:69","nodeType":"YulBlock","src":"6797:235:69","statements":[{"nativeSrc":"6807:90:69","nodeType":"YulAssignment","src":"6807:90:69","value":{"arguments":[{"name":"pos","nativeSrc":"6890:3:69","nodeType":"YulIdentifier","src":"6890:3:69"},{"kind":"number","nativeSrc":"6895:1:69","nodeType":"YulLiteral","src":"6895:1:69","type":"","value":"4"}],"functionName":{"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"6814:75:69","nodeType":"YulIdentifier","src":"6814:75:69"},"nativeSrc":"6814:83:69","nodeType":"YulFunctionCall","src":"6814:83:69"},"variableNames":[{"name":"pos","nativeSrc":"6807:3:69","nodeType":"YulIdentifier","src":"6807:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"6995:3:69","nodeType":"YulIdentifier","src":"6995:3:69"}],"functionName":{"name":"store_literal_in_memory_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29","nativeSrc":"6906:88:69","nodeType":"YulIdentifier","src":"6906:88:69"},"nativeSrc":"6906:93:69","nodeType":"YulFunctionCall","src":"6906:93:69"},"nativeSrc":"6906:93:69","nodeType":"YulExpressionStatement","src":"6906:93:69"},{"nativeSrc":"7008:18:69","nodeType":"YulAssignment","src":"7008:18:69","value":{"arguments":[{"name":"pos","nativeSrc":"7019:3:69","nodeType":"YulIdentifier","src":"7019:3:69"},{"kind":"number","nativeSrc":"7024:1:69","nodeType":"YulLiteral","src":"7024:1:69","type":"","value":"4"}],"functionName":{"name":"add","nativeSrc":"7015:3:69","nodeType":"YulIdentifier","src":"7015:3:69"},"nativeSrc":"7015:11:69","nodeType":"YulFunctionCall","src":"7015:11:69"},"variableNames":[{"name":"end","nativeSrc":"7008:3:69","nodeType":"YulIdentifier","src":"7008:3:69"}]}]},"name":"abi_encode_t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"6634:398:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"6785:3:69","nodeType":"YulTypedName","src":"6785:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"6793:3:69","nodeType":"YulTypedName","src":"6793:3:69","type":""}],"src":"6634:398:69"},{"body":{"nativeSrc":"7226:191:69","nodeType":"YulBlock","src":"7226:191:69","statements":[{"nativeSrc":"7237:154:69","nodeType":"YulAssignment","src":"7237:154:69","value":{"arguments":[{"name":"pos","nativeSrc":"7387:3:69","nodeType":"YulIdentifier","src":"7387:3:69"}],"functionName":{"name":"abi_encode_t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"7244:141:69","nodeType":"YulIdentifier","src":"7244:141:69"},"nativeSrc":"7244:147:69","nodeType":"YulFunctionCall","src":"7244:147:69"},"variableNames":[{"name":"pos","nativeSrc":"7237:3:69","nodeType":"YulIdentifier","src":"7237:3:69"}]},{"nativeSrc":"7401:10:69","nodeType":"YulAssignment","src":"7401:10:69","value":{"name":"pos","nativeSrc":"7408:3:69","nodeType":"YulIdentifier","src":"7408:3:69"},"variableNames":[{"name":"end","nativeSrc":"7401:3:69","nodeType":"YulIdentifier","src":"7401:3:69"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nativeSrc":"7038:379:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"7213:3:69","nodeType":"YulTypedName","src":"7213:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"7222:3:69","nodeType":"YulTypedName","src":"7222:3:69","type":""}],"src":"7038:379:69"},{"body":{"nativeSrc":"7474:87:69","nodeType":"YulBlock","src":"7474:87:69","statements":[{"body":{"nativeSrc":"7539:16:69","nodeType":"YulBlock","src":"7539:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"7548:1:69","nodeType":"YulLiteral","src":"7548:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"7551:1:69","nodeType":"YulLiteral","src":"7551:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"7541:6:69","nodeType":"YulIdentifier","src":"7541:6:69"},"nativeSrc":"7541:12:69","nodeType":"YulFunctionCall","src":"7541:12:69"},"nativeSrc":"7541:12:69","nodeType":"YulExpressionStatement","src":"7541:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"7497:5:69","nodeType":"YulIdentifier","src":"7497:5:69"},{"arguments":[{"name":"value","nativeSrc":"7530:5:69","nodeType":"YulIdentifier","src":"7530:5:69"}],"functionName":{"name":"cleanup_t_address_payable","nativeSrc":"7504:25:69","nodeType":"YulIdentifier","src":"7504:25:69"},"nativeSrc":"7504:32:69","nodeType":"YulFunctionCall","src":"7504:32:69"}],"functionName":{"name":"eq","nativeSrc":"7494:2:69","nodeType":"YulIdentifier","src":"7494:2:69"},"nativeSrc":"7494:43:69","nodeType":"YulFunctionCall","src":"7494:43:69"}],"functionName":{"name":"iszero","nativeSrc":"7487:6:69","nodeType":"YulIdentifier","src":"7487:6:69"},"nativeSrc":"7487:51:69","nodeType":"YulFunctionCall","src":"7487:51:69"},"nativeSrc":"7484:71:69","nodeType":"YulIf","src":"7484:71:69"}]},"name":"validator_revert_t_address_payable","nativeSrc":"7423:138:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7467:5:69","nodeType":"YulTypedName","src":"7467:5:69","type":""}],"src":"7423:138:69"},{"body":{"nativeSrc":"7638:88:69","nodeType":"YulBlock","src":"7638:88:69","statements":[{"nativeSrc":"7648:22:69","nodeType":"YulAssignment","src":"7648:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"7663:6:69","nodeType":"YulIdentifier","src":"7663:6:69"}],"functionName":{"name":"mload","nativeSrc":"7657:5:69","nodeType":"YulIdentifier","src":"7657:5:69"},"nativeSrc":"7657:13:69","nodeType":"YulFunctionCall","src":"7657:13:69"},"variableNames":[{"name":"value","nativeSrc":"7648:5:69","nodeType":"YulIdentifier","src":"7648:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"7714:5:69","nodeType":"YulIdentifier","src":"7714:5:69"}],"functionName":{"name":"validator_revert_t_address_payable","nativeSrc":"7679:34:69","nodeType":"YulIdentifier","src":"7679:34:69"},"nativeSrc":"7679:41:69","nodeType":"YulFunctionCall","src":"7679:41:69"},"nativeSrc":"7679:41:69","nodeType":"YulExpressionStatement","src":"7679:41:69"}]},"name":"abi_decode_t_address_payable_fromMemory","nativeSrc":"7567:159:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"7616:6:69","nodeType":"YulTypedName","src":"7616:6:69","type":""},{"name":"end","nativeSrc":"7624:3:69","nodeType":"YulTypedName","src":"7624:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"7632:5:69","nodeType":"YulTypedName","src":"7632:5:69","type":""}],"src":"7567:159:69"},{"body":{"nativeSrc":"7817:282:69","nodeType":"YulBlock","src":"7817:282:69","statements":[{"body":{"nativeSrc":"7863:83:69","nodeType":"YulBlock","src":"7863:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"7865:77:69","nodeType":"YulIdentifier","src":"7865:77:69"},"nativeSrc":"7865:79:69","nodeType":"YulFunctionCall","src":"7865:79:69"},"nativeSrc":"7865:79:69","nodeType":"YulExpressionStatement","src":"7865:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"7838:7:69","nodeType":"YulIdentifier","src":"7838:7:69"},{"name":"headStart","nativeSrc":"7847:9:69","nodeType":"YulIdentifier","src":"7847:9:69"}],"functionName":{"name":"sub","nativeSrc":"7834:3:69","nodeType":"YulIdentifier","src":"7834:3:69"},"nativeSrc":"7834:23:69","nodeType":"YulFunctionCall","src":"7834:23:69"},{"kind":"number","nativeSrc":"7859:2:69","nodeType":"YulLiteral","src":"7859:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"7830:3:69","nodeType":"YulIdentifier","src":"7830:3:69"},"nativeSrc":"7830:32:69","nodeType":"YulFunctionCall","src":"7830:32:69"},"nativeSrc":"7827:119:69","nodeType":"YulIf","src":"7827:119:69"},{"nativeSrc":"7956:136:69","nodeType":"YulBlock","src":"7956:136:69","statements":[{"nativeSrc":"7971:15:69","nodeType":"YulVariableDeclaration","src":"7971:15:69","value":{"kind":"number","nativeSrc":"7985:1:69","nodeType":"YulLiteral","src":"7985:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"7975:6:69","nodeType":"YulTypedName","src":"7975:6:69","type":""}]},{"nativeSrc":"8000:82:69","nodeType":"YulAssignment","src":"8000:82:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8054:9:69","nodeType":"YulIdentifier","src":"8054:9:69"},{"name":"offset","nativeSrc":"8065:6:69","nodeType":"YulIdentifier","src":"8065:6:69"}],"functionName":{"name":"add","nativeSrc":"8050:3:69","nodeType":"YulIdentifier","src":"8050:3:69"},"nativeSrc":"8050:22:69","nodeType":"YulFunctionCall","src":"8050:22:69"},{"name":"dataEnd","nativeSrc":"8074:7:69","nodeType":"YulIdentifier","src":"8074:7:69"}],"functionName":{"name":"abi_decode_t_address_payable_fromMemory","nativeSrc":"8010:39:69","nodeType":"YulIdentifier","src":"8010:39:69"},"nativeSrc":"8010:72:69","nodeType":"YulFunctionCall","src":"8010:72:69"},"variableNames":[{"name":"value0","nativeSrc":"8000:6:69","nodeType":"YulIdentifier","src":"8000:6:69"}]}]}]},"name":"abi_decode_tuple_t_address_payable_fromMemory","nativeSrc":"7732:367:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"7787:9:69","nodeType":"YulTypedName","src":"7787:9:69","type":""},{"name":"dataEnd","nativeSrc":"7798:7:69","nodeType":"YulTypedName","src":"7798:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"7810:6:69","nodeType":"YulTypedName","src":"7810:6:69","type":""}],"src":"7732:367:69"},{"body":{"nativeSrc":"8201:73:69","nodeType":"YulBlock","src":"8201:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"8218:3:69","nodeType":"YulIdentifier","src":"8218:3:69"},{"name":"length","nativeSrc":"8223:6:69","nodeType":"YulIdentifier","src":"8223:6:69"}],"functionName":{"name":"mstore","nativeSrc":"8211:6:69","nodeType":"YulIdentifier","src":"8211:6:69"},"nativeSrc":"8211:19:69","nodeType":"YulFunctionCall","src":"8211:19:69"},"nativeSrc":"8211:19:69","nodeType":"YulExpressionStatement","src":"8211:19:69"},{"nativeSrc":"8239:29:69","nodeType":"YulAssignment","src":"8239:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"8258:3:69","nodeType":"YulIdentifier","src":"8258:3:69"},{"kind":"number","nativeSrc":"8263:4:69","nodeType":"YulLiteral","src":"8263:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"8254:3:69","nodeType":"YulIdentifier","src":"8254:3:69"},"nativeSrc":"8254:14:69","nodeType":"YulFunctionCall","src":"8254:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"8239:11:69","nodeType":"YulIdentifier","src":"8239:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"8105:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"8173:3:69","nodeType":"YulTypedName","src":"8173:3:69","type":""},{"name":"length","nativeSrc":"8178:6:69","nodeType":"YulTypedName","src":"8178:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"8189:11:69","nodeType":"YulTypedName","src":"8189:11:69","type":""}],"src":"8105:169:69"},{"body":{"nativeSrc":"8386:76:69","nodeType":"YulBlock","src":"8386:76:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"8408:6:69","nodeType":"YulIdentifier","src":"8408:6:69"},{"kind":"number","nativeSrc":"8416:1:69","nodeType":"YulLiteral","src":"8416:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"8404:3:69","nodeType":"YulIdentifier","src":"8404:3:69"},"nativeSrc":"8404:14:69","nodeType":"YulFunctionCall","src":"8404:14:69"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nativeSrc":"8420:34:69","nodeType":"YulLiteral","src":"8420:34:69","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nativeSrc":"8397:6:69","nodeType":"YulIdentifier","src":"8397:6:69"},"nativeSrc":"8397:58:69","nodeType":"YulFunctionCall","src":"8397:58:69"},"nativeSrc":"8397:58:69","nodeType":"YulExpressionStatement","src":"8397:58:69"}]},"name":"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","nativeSrc":"8280:182:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"8378:6:69","nodeType":"YulTypedName","src":"8378:6:69","type":""}],"src":"8280:182:69"},{"body":{"nativeSrc":"8614:220:69","nodeType":"YulBlock","src":"8614:220:69","statements":[{"nativeSrc":"8624:74:69","nodeType":"YulAssignment","src":"8624:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"8690:3:69","nodeType":"YulIdentifier","src":"8690:3:69"},{"kind":"number","nativeSrc":"8695:2:69","nodeType":"YulLiteral","src":"8695:2:69","type":"","value":"32"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"8631:58:69","nodeType":"YulIdentifier","src":"8631:58:69"},"nativeSrc":"8631:67:69","nodeType":"YulFunctionCall","src":"8631:67:69"},"variableNames":[{"name":"pos","nativeSrc":"8624:3:69","nodeType":"YulIdentifier","src":"8624:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"8796:3:69","nodeType":"YulIdentifier","src":"8796:3:69"}],"functionName":{"name":"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","nativeSrc":"8707:88:69","nodeType":"YulIdentifier","src":"8707:88:69"},"nativeSrc":"8707:93:69","nodeType":"YulFunctionCall","src":"8707:93:69"},"nativeSrc":"8707:93:69","nodeType":"YulExpressionStatement","src":"8707:93:69"},{"nativeSrc":"8809:19:69","nodeType":"YulAssignment","src":"8809:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"8820:3:69","nodeType":"YulIdentifier","src":"8820:3:69"},{"kind":"number","nativeSrc":"8825:2:69","nodeType":"YulLiteral","src":"8825:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8816:3:69","nodeType":"YulIdentifier","src":"8816:3:69"},"nativeSrc":"8816:12:69","nodeType":"YulFunctionCall","src":"8816:12:69"},"variableNames":[{"name":"end","nativeSrc":"8809:3:69","nodeType":"YulIdentifier","src":"8809:3:69"}]}]},"name":"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack","nativeSrc":"8468:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"8602:3:69","nodeType":"YulTypedName","src":"8602:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"8610:3:69","nodeType":"YulTypedName","src":"8610:3:69","type":""}],"src":"8468:366:69"},{"body":{"nativeSrc":"9011:248:69","nodeType":"YulBlock","src":"9011:248:69","statements":[{"nativeSrc":"9021:26:69","nodeType":"YulAssignment","src":"9021:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"9033:9:69","nodeType":"YulIdentifier","src":"9033:9:69"},{"kind":"number","nativeSrc":"9044:2:69","nodeType":"YulLiteral","src":"9044:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"9029:3:69","nodeType":"YulIdentifier","src":"9029:3:69"},"nativeSrc":"9029:18:69","nodeType":"YulFunctionCall","src":"9029:18:69"},"variableNames":[{"name":"tail","nativeSrc":"9021:4:69","nodeType":"YulIdentifier","src":"9021:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"9068:9:69","nodeType":"YulIdentifier","src":"9068:9:69"},{"kind":"number","nativeSrc":"9079:1:69","nodeType":"YulLiteral","src":"9079:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"9064:3:69","nodeType":"YulIdentifier","src":"9064:3:69"},"nativeSrc":"9064:17:69","nodeType":"YulFunctionCall","src":"9064:17:69"},{"arguments":[{"name":"tail","nativeSrc":"9087:4:69","nodeType":"YulIdentifier","src":"9087:4:69"},{"name":"headStart","nativeSrc":"9093:9:69","nodeType":"YulIdentifier","src":"9093:9:69"}],"functionName":{"name":"sub","nativeSrc":"9083:3:69","nodeType":"YulIdentifier","src":"9083:3:69"},"nativeSrc":"9083:20:69","nodeType":"YulFunctionCall","src":"9083:20:69"}],"functionName":{"name":"mstore","nativeSrc":"9057:6:69","nodeType":"YulIdentifier","src":"9057:6:69"},"nativeSrc":"9057:47:69","nodeType":"YulFunctionCall","src":"9057:47:69"},"nativeSrc":"9057:47:69","nodeType":"YulExpressionStatement","src":"9057:47:69"},{"nativeSrc":"9113:139:69","nodeType":"YulAssignment","src":"9113:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"9247:4:69","nodeType":"YulIdentifier","src":"9247:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack","nativeSrc":"9121:124:69","nodeType":"YulIdentifier","src":"9121:124:69"},"nativeSrc":"9121:131:69","nodeType":"YulFunctionCall","src":"9121:131:69"},"variableNames":[{"name":"tail","nativeSrc":"9113:4:69","nodeType":"YulIdentifier","src":"9113:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"8840:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8991:9:69","nodeType":"YulTypedName","src":"8991:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"9006:4:69","nodeType":"YulTypedName","src":"9006:4:69","type":""}],"src":"8840:419:69"},{"body":{"nativeSrc":"9323:40:69","nodeType":"YulBlock","src":"9323:40:69","statements":[{"nativeSrc":"9334:22:69","nodeType":"YulAssignment","src":"9334:22:69","value":{"arguments":[{"name":"value","nativeSrc":"9350:5:69","nodeType":"YulIdentifier","src":"9350:5:69"}],"functionName":{"name":"mload","nativeSrc":"9344:5:69","nodeType":"YulIdentifier","src":"9344:5:69"},"nativeSrc":"9344:12:69","nodeType":"YulFunctionCall","src":"9344:12:69"},"variableNames":[{"name":"length","nativeSrc":"9334:6:69","nodeType":"YulIdentifier","src":"9334:6:69"}]}]},"name":"array_length_t_bytes_memory_ptr","nativeSrc":"9265:98:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"9306:5:69","nodeType":"YulTypedName","src":"9306:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"9316:6:69","nodeType":"YulTypedName","src":"9316:6:69","type":""}],"src":"9265:98:69"},{"body":{"nativeSrc":"9464:73:69","nodeType":"YulBlock","src":"9464:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"9481:3:69","nodeType":"YulIdentifier","src":"9481:3:69"},{"name":"length","nativeSrc":"9486:6:69","nodeType":"YulIdentifier","src":"9486:6:69"}],"functionName":{"name":"mstore","nativeSrc":"9474:6:69","nodeType":"YulIdentifier","src":"9474:6:69"},"nativeSrc":"9474:19:69","nodeType":"YulFunctionCall","src":"9474:19:69"},"nativeSrc":"9474:19:69","nodeType":"YulExpressionStatement","src":"9474:19:69"},{"nativeSrc":"9502:29:69","nodeType":"YulAssignment","src":"9502:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"9521:3:69","nodeType":"YulIdentifier","src":"9521:3:69"},{"kind":"number","nativeSrc":"9526:4:69","nodeType":"YulLiteral","src":"9526:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"9517:3:69","nodeType":"YulIdentifier","src":"9517:3:69"},"nativeSrc":"9517:14:69","nodeType":"YulFunctionCall","src":"9517:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"9502:11:69","nodeType":"YulIdentifier","src":"9502:11:69"}]}]},"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack","nativeSrc":"9369:168:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"9436:3:69","nodeType":"YulTypedName","src":"9436:3:69","type":""},{"name":"length","nativeSrc":"9441:6:69","nodeType":"YulTypedName","src":"9441:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"9452:11:69","nodeType":"YulTypedName","src":"9452:11:69","type":""}],"src":"9369:168:69"},{"body":{"nativeSrc":"9605:186:69","nodeType":"YulBlock","src":"9605:186:69","statements":[{"nativeSrc":"9616:10:69","nodeType":"YulVariableDeclaration","src":"9616:10:69","value":{"kind":"number","nativeSrc":"9625:1:69","nodeType":"YulLiteral","src":"9625:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"9620:1:69","nodeType":"YulTypedName","src":"9620:1:69","type":""}]},{"body":{"nativeSrc":"9685:63:69","nodeType":"YulBlock","src":"9685:63:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"9710:3:69","nodeType":"YulIdentifier","src":"9710:3:69"},{"name":"i","nativeSrc":"9715:1:69","nodeType":"YulIdentifier","src":"9715:1:69"}],"functionName":{"name":"add","nativeSrc":"9706:3:69","nodeType":"YulIdentifier","src":"9706:3:69"},"nativeSrc":"9706:11:69","nodeType":"YulFunctionCall","src":"9706:11:69"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"9729:3:69","nodeType":"YulIdentifier","src":"9729:3:69"},{"name":"i","nativeSrc":"9734:1:69","nodeType":"YulIdentifier","src":"9734:1:69"}],"functionName":{"name":"add","nativeSrc":"9725:3:69","nodeType":"YulIdentifier","src":"9725:3:69"},"nativeSrc":"9725:11:69","nodeType":"YulFunctionCall","src":"9725:11:69"}],"functionName":{"name":"mload","nativeSrc":"9719:5:69","nodeType":"YulIdentifier","src":"9719:5:69"},"nativeSrc":"9719:18:69","nodeType":"YulFunctionCall","src":"9719:18:69"}],"functionName":{"name":"mstore","nativeSrc":"9699:6:69","nodeType":"YulIdentifier","src":"9699:6:69"},"nativeSrc":"9699:39:69","nodeType":"YulFunctionCall","src":"9699:39:69"},"nativeSrc":"9699:39:69","nodeType":"YulExpressionStatement","src":"9699:39:69"}]},"condition":{"arguments":[{"name":"i","nativeSrc":"9646:1:69","nodeType":"YulIdentifier","src":"9646:1:69"},{"name":"length","nativeSrc":"9649:6:69","nodeType":"YulIdentifier","src":"9649:6:69"}],"functionName":{"name":"lt","nativeSrc":"9643:2:69","nodeType":"YulIdentifier","src":"9643:2:69"},"nativeSrc":"9643:13:69","nodeType":"YulFunctionCall","src":"9643:13:69"},"nativeSrc":"9635:113:69","nodeType":"YulForLoop","post":{"nativeSrc":"9657:19:69","nodeType":"YulBlock","src":"9657:19:69","statements":[{"nativeSrc":"9659:15:69","nodeType":"YulAssignment","src":"9659:15:69","value":{"arguments":[{"name":"i","nativeSrc":"9668:1:69","nodeType":"YulIdentifier","src":"9668:1:69"},{"kind":"number","nativeSrc":"9671:2:69","nodeType":"YulLiteral","src":"9671:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"9664:3:69","nodeType":"YulIdentifier","src":"9664:3:69"},"nativeSrc":"9664:10:69","nodeType":"YulFunctionCall","src":"9664:10:69"},"variableNames":[{"name":"i","nativeSrc":"9659:1:69","nodeType":"YulIdentifier","src":"9659:1:69"}]}]},"pre":{"nativeSrc":"9639:3:69","nodeType":"YulBlock","src":"9639:3:69","statements":[]},"src":"9635:113:69"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"9768:3:69","nodeType":"YulIdentifier","src":"9768:3:69"},{"name":"length","nativeSrc":"9773:6:69","nodeType":"YulIdentifier","src":"9773:6:69"}],"functionName":{"name":"add","nativeSrc":"9764:3:69","nodeType":"YulIdentifier","src":"9764:3:69"},"nativeSrc":"9764:16:69","nodeType":"YulFunctionCall","src":"9764:16:69"},{"kind":"number","nativeSrc":"9782:1:69","nodeType":"YulLiteral","src":"9782:1:69","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"9757:6:69","nodeType":"YulIdentifier","src":"9757:6:69"},"nativeSrc":"9757:27:69","nodeType":"YulFunctionCall","src":"9757:27:69"},"nativeSrc":"9757:27:69","nodeType":"YulExpressionStatement","src":"9757:27:69"}]},"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"9543:248:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"9587:3:69","nodeType":"YulTypedName","src":"9587:3:69","type":""},{"name":"dst","nativeSrc":"9592:3:69","nodeType":"YulTypedName","src":"9592:3:69","type":""},{"name":"length","nativeSrc":"9597:6:69","nodeType":"YulTypedName","src":"9597:6:69","type":""}],"src":"9543:248:69"},{"body":{"nativeSrc":"9887:283:69","nodeType":"YulBlock","src":"9887:283:69","statements":[{"nativeSrc":"9897:52:69","nodeType":"YulVariableDeclaration","src":"9897:52:69","value":{"arguments":[{"name":"value","nativeSrc":"9943:5:69","nodeType":"YulIdentifier","src":"9943:5:69"}],"functionName":{"name":"array_length_t_bytes_memory_ptr","nativeSrc":"9911:31:69","nodeType":"YulIdentifier","src":"9911:31:69"},"nativeSrc":"9911:38:69","nodeType":"YulFunctionCall","src":"9911:38:69"},"variables":[{"name":"length","nativeSrc":"9901:6:69","nodeType":"YulTypedName","src":"9901:6:69","type":""}]},{"nativeSrc":"9958:77:69","nodeType":"YulAssignment","src":"9958:77:69","value":{"arguments":[{"name":"pos","nativeSrc":"10023:3:69","nodeType":"YulIdentifier","src":"10023:3:69"},{"name":"length","nativeSrc":"10028:6:69","nodeType":"YulIdentifier","src":"10028:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack","nativeSrc":"9965:57:69","nodeType":"YulIdentifier","src":"9965:57:69"},"nativeSrc":"9965:70:69","nodeType":"YulFunctionCall","src":"9965:70:69"},"variableNames":[{"name":"pos","nativeSrc":"9958:3:69","nodeType":"YulIdentifier","src":"9958:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"10083:5:69","nodeType":"YulIdentifier","src":"10083:5:69"},{"kind":"number","nativeSrc":"10090:4:69","nodeType":"YulLiteral","src":"10090:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"10079:3:69","nodeType":"YulIdentifier","src":"10079:3:69"},"nativeSrc":"10079:16:69","nodeType":"YulFunctionCall","src":"10079:16:69"},{"name":"pos","nativeSrc":"10097:3:69","nodeType":"YulIdentifier","src":"10097:3:69"},{"name":"length","nativeSrc":"10102:6:69","nodeType":"YulIdentifier","src":"10102:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"10044:34:69","nodeType":"YulIdentifier","src":"10044:34:69"},"nativeSrc":"10044:65:69","nodeType":"YulFunctionCall","src":"10044:65:69"},"nativeSrc":"10044:65:69","nodeType":"YulExpressionStatement","src":"10044:65:69"},{"nativeSrc":"10118:46:69","nodeType":"YulAssignment","src":"10118:46:69","value":{"arguments":[{"name":"pos","nativeSrc":"10129:3:69","nodeType":"YulIdentifier","src":"10129:3:69"},{"arguments":[{"name":"length","nativeSrc":"10156:6:69","nodeType":"YulIdentifier","src":"10156:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"10134:21:69","nodeType":"YulIdentifier","src":"10134:21:69"},"nativeSrc":"10134:29:69","nodeType":"YulFunctionCall","src":"10134:29:69"}],"functionName":{"name":"add","nativeSrc":"10125:3:69","nodeType":"YulIdentifier","src":"10125:3:69"},"nativeSrc":"10125:39:69","nodeType":"YulFunctionCall","src":"10125:39:69"},"variableNames":[{"name":"end","nativeSrc":"10118:3:69","nodeType":"YulIdentifier","src":"10118:3:69"}]}]},"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack","nativeSrc":"9797:373:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"9868:5:69","nodeType":"YulTypedName","src":"9868:5:69","type":""},{"name":"pos","nativeSrc":"9875:3:69","nodeType":"YulTypedName","src":"9875:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"9883:3:69","nodeType":"YulTypedName","src":"9883:3:69","type":""}],"src":"9797:373:69"},{"body":{"nativeSrc":"10320:275:69","nodeType":"YulBlock","src":"10320:275:69","statements":[{"nativeSrc":"10330:26:69","nodeType":"YulAssignment","src":"10330:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"10342:9:69","nodeType":"YulIdentifier","src":"10342:9:69"},{"kind":"number","nativeSrc":"10353:2:69","nodeType":"YulLiteral","src":"10353:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"10338:3:69","nodeType":"YulIdentifier","src":"10338:3:69"},"nativeSrc":"10338:18:69","nodeType":"YulFunctionCall","src":"10338:18:69"},"variableNames":[{"name":"tail","nativeSrc":"10330:4:69","nodeType":"YulIdentifier","src":"10330:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"10410:6:69","nodeType":"YulIdentifier","src":"10410:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"10423:9:69","nodeType":"YulIdentifier","src":"10423:9:69"},{"kind":"number","nativeSrc":"10434:1:69","nodeType":"YulLiteral","src":"10434:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"10419:3:69","nodeType":"YulIdentifier","src":"10419:3:69"},"nativeSrc":"10419:17:69","nodeType":"YulFunctionCall","src":"10419:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"10366:43:69","nodeType":"YulIdentifier","src":"10366:43:69"},"nativeSrc":"10366:71:69","nodeType":"YulFunctionCall","src":"10366:71:69"},"nativeSrc":"10366:71:69","nodeType":"YulExpressionStatement","src":"10366:71:69"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10458:9:69","nodeType":"YulIdentifier","src":"10458:9:69"},{"kind":"number","nativeSrc":"10469:2:69","nodeType":"YulLiteral","src":"10469:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"10454:3:69","nodeType":"YulIdentifier","src":"10454:3:69"},"nativeSrc":"10454:18:69","nodeType":"YulFunctionCall","src":"10454:18:69"},{"arguments":[{"name":"tail","nativeSrc":"10478:4:69","nodeType":"YulIdentifier","src":"10478:4:69"},{"name":"headStart","nativeSrc":"10484:9:69","nodeType":"YulIdentifier","src":"10484:9:69"}],"functionName":{"name":"sub","nativeSrc":"10474:3:69","nodeType":"YulIdentifier","src":"10474:3:69"},"nativeSrc":"10474:20:69","nodeType":"YulFunctionCall","src":"10474:20:69"}],"functionName":{"name":"mstore","nativeSrc":"10447:6:69","nodeType":"YulIdentifier","src":"10447:6:69"},"nativeSrc":"10447:48:69","nodeType":"YulFunctionCall","src":"10447:48:69"},"nativeSrc":"10447:48:69","nodeType":"YulExpressionStatement","src":"10447:48:69"},{"nativeSrc":"10504:84:69","nodeType":"YulAssignment","src":"10504:84:69","value":{"arguments":[{"name":"value1","nativeSrc":"10574:6:69","nodeType":"YulIdentifier","src":"10574:6:69"},{"name":"tail","nativeSrc":"10583:4:69","nodeType":"YulIdentifier","src":"10583:4:69"}],"functionName":{"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack","nativeSrc":"10512:61:69","nodeType":"YulIdentifier","src":"10512:61:69"},"nativeSrc":"10512:76:69","nodeType":"YulFunctionCall","src":"10512:76:69"},"variableNames":[{"name":"tail","nativeSrc":"10504:4:69","nodeType":"YulIdentifier","src":"10504:4:69"}]}]},"name":"abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed","nativeSrc":"10176:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"10284:9:69","nodeType":"YulTypedName","src":"10284:9:69","type":""},{"name":"value1","nativeSrc":"10296:6:69","nodeType":"YulTypedName","src":"10296:6:69","type":""},{"name":"value0","nativeSrc":"10304:6:69","nodeType":"YulTypedName","src":"10304:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"10315:4:69","nodeType":"YulTypedName","src":"10315:4:69","type":""}],"src":"10176:419:69"},{"body":{"nativeSrc":"10707:119:69","nodeType":"YulBlock","src":"10707:119:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"10729:6:69","nodeType":"YulIdentifier","src":"10729:6:69"},{"kind":"number","nativeSrc":"10737:1:69","nodeType":"YulLiteral","src":"10737:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"10725:3:69","nodeType":"YulIdentifier","src":"10725:3:69"},"nativeSrc":"10725:14:69","nodeType":"YulFunctionCall","src":"10725:14:69"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nativeSrc":"10741:34:69","nodeType":"YulLiteral","src":"10741:34:69","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nativeSrc":"10718:6:69","nodeType":"YulIdentifier","src":"10718:6:69"},"nativeSrc":"10718:58:69","nodeType":"YulFunctionCall","src":"10718:58:69"},"nativeSrc":"10718:58:69","nodeType":"YulExpressionStatement","src":"10718:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"10797:6:69","nodeType":"YulIdentifier","src":"10797:6:69"},{"kind":"number","nativeSrc":"10805:2:69","nodeType":"YulLiteral","src":"10805:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"10793:3:69","nodeType":"YulIdentifier","src":"10793:3:69"},"nativeSrc":"10793:15:69","nodeType":"YulFunctionCall","src":"10793:15:69"},{"hexValue":"646472657373","kind":"string","nativeSrc":"10810:8:69","nodeType":"YulLiteral","src":"10810:8:69","type":"","value":"ddress"}],"functionName":{"name":"mstore","nativeSrc":"10786:6:69","nodeType":"YulIdentifier","src":"10786:6:69"},"nativeSrc":"10786:33:69","nodeType":"YulFunctionCall","src":"10786:33:69"},"nativeSrc":"10786:33:69","nodeType":"YulExpressionStatement","src":"10786:33:69"}]},"name":"store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","nativeSrc":"10601:225:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"10699:6:69","nodeType":"YulTypedName","src":"10699:6:69","type":""}],"src":"10601:225:69"},{"body":{"nativeSrc":"10978:220:69","nodeType":"YulBlock","src":"10978:220:69","statements":[{"nativeSrc":"10988:74:69","nodeType":"YulAssignment","src":"10988:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"11054:3:69","nodeType":"YulIdentifier","src":"11054:3:69"},{"kind":"number","nativeSrc":"11059:2:69","nodeType":"YulLiteral","src":"11059:2:69","type":"","value":"38"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"10995:58:69","nodeType":"YulIdentifier","src":"10995:58:69"},"nativeSrc":"10995:67:69","nodeType":"YulFunctionCall","src":"10995:67:69"},"variableNames":[{"name":"pos","nativeSrc":"10988:3:69","nodeType":"YulIdentifier","src":"10988:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"11160:3:69","nodeType":"YulIdentifier","src":"11160:3:69"}],"functionName":{"name":"store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","nativeSrc":"11071:88:69","nodeType":"YulIdentifier","src":"11071:88:69"},"nativeSrc":"11071:93:69","nodeType":"YulFunctionCall","src":"11071:93:69"},"nativeSrc":"11071:93:69","nodeType":"YulExpressionStatement","src":"11071:93:69"},{"nativeSrc":"11173:19:69","nodeType":"YulAssignment","src":"11173:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"11184:3:69","nodeType":"YulIdentifier","src":"11184:3:69"},{"kind":"number","nativeSrc":"11189:2:69","nodeType":"YulLiteral","src":"11189:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"11180:3:69","nodeType":"YulIdentifier","src":"11180:3:69"},"nativeSrc":"11180:12:69","nodeType":"YulFunctionCall","src":"11180:12:69"},"variableNames":[{"name":"end","nativeSrc":"11173:3:69","nodeType":"YulIdentifier","src":"11173:3:69"}]}]},"name":"abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack","nativeSrc":"10832:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"10966:3:69","nodeType":"YulTypedName","src":"10966:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"10974:3:69","nodeType":"YulTypedName","src":"10974:3:69","type":""}],"src":"10832:366:69"},{"body":{"nativeSrc":"11375:248:69","nodeType":"YulBlock","src":"11375:248:69","statements":[{"nativeSrc":"11385:26:69","nodeType":"YulAssignment","src":"11385:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"11397:9:69","nodeType":"YulIdentifier","src":"11397:9:69"},{"kind":"number","nativeSrc":"11408:2:69","nodeType":"YulLiteral","src":"11408:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"11393:3:69","nodeType":"YulIdentifier","src":"11393:3:69"},"nativeSrc":"11393:18:69","nodeType":"YulFunctionCall","src":"11393:18:69"},"variableNames":[{"name":"tail","nativeSrc":"11385:4:69","nodeType":"YulIdentifier","src":"11385:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"11432:9:69","nodeType":"YulIdentifier","src":"11432:9:69"},{"kind":"number","nativeSrc":"11443:1:69","nodeType":"YulLiteral","src":"11443:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"11428:3:69","nodeType":"YulIdentifier","src":"11428:3:69"},"nativeSrc":"11428:17:69","nodeType":"YulFunctionCall","src":"11428:17:69"},{"arguments":[{"name":"tail","nativeSrc":"11451:4:69","nodeType":"YulIdentifier","src":"11451:4:69"},{"name":"headStart","nativeSrc":"11457:9:69","nodeType":"YulIdentifier","src":"11457:9:69"}],"functionName":{"name":"sub","nativeSrc":"11447:3:69","nodeType":"YulIdentifier","src":"11447:3:69"},"nativeSrc":"11447:20:69","nodeType":"YulFunctionCall","src":"11447:20:69"}],"functionName":{"name":"mstore","nativeSrc":"11421:6:69","nodeType":"YulIdentifier","src":"11421:6:69"},"nativeSrc":"11421:47:69","nodeType":"YulFunctionCall","src":"11421:47:69"},"nativeSrc":"11421:47:69","nodeType":"YulExpressionStatement","src":"11421:47:69"},{"nativeSrc":"11477:139:69","nodeType":"YulAssignment","src":"11477:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"11611:4:69","nodeType":"YulIdentifier","src":"11611:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack","nativeSrc":"11485:124:69","nodeType":"YulIdentifier","src":"11485:124:69"},"nativeSrc":"11485:131:69","nodeType":"YulFunctionCall","src":"11485:131:69"},"variableNames":[{"name":"tail","nativeSrc":"11477:4:69","nodeType":"YulIdentifier","src":"11477:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"11204:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"11355:9:69","nodeType":"YulTypedName","src":"11355:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"11370:4:69","nodeType":"YulTypedName","src":"11370:4:69","type":""}],"src":"11204:419:69"},{"body":{"nativeSrc":"11735:108:69","nodeType":"YulBlock","src":"11735:108:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"11757:6:69","nodeType":"YulIdentifier","src":"11757:6:69"},{"kind":"number","nativeSrc":"11765:1:69","nodeType":"YulLiteral","src":"11765:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"11753:3:69","nodeType":"YulIdentifier","src":"11753:3:69"},"nativeSrc":"11753:14:69","nodeType":"YulFunctionCall","src":"11753:14:69"},{"kind":"number","nativeSrc":"11769:66:69","nodeType":"YulLiteral","src":"11769:66:69","type":"","value":"0xf851a44000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"mstore","nativeSrc":"11746:6:69","nodeType":"YulIdentifier","src":"11746:6:69"},"nativeSrc":"11746:90:69","nodeType":"YulFunctionCall","src":"11746:90:69"},"nativeSrc":"11746:90:69","nodeType":"YulExpressionStatement","src":"11746:90:69"}]},"name":"store_literal_in_memory_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7","nativeSrc":"11629:214:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"11727:6:69","nodeType":"YulTypedName","src":"11727:6:69","type":""}],"src":"11629:214:69"},{"body":{"nativeSrc":"12012:235:69","nodeType":"YulBlock","src":"12012:235:69","statements":[{"nativeSrc":"12022:90:69","nodeType":"YulAssignment","src":"12022:90:69","value":{"arguments":[{"name":"pos","nativeSrc":"12105:3:69","nodeType":"YulIdentifier","src":"12105:3:69"},{"kind":"number","nativeSrc":"12110:1:69","nodeType":"YulLiteral","src":"12110:1:69","type":"","value":"4"}],"functionName":{"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"12029:75:69","nodeType":"YulIdentifier","src":"12029:75:69"},"nativeSrc":"12029:83:69","nodeType":"YulFunctionCall","src":"12029:83:69"},"variableNames":[{"name":"pos","nativeSrc":"12022:3:69","nodeType":"YulIdentifier","src":"12022:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"12210:3:69","nodeType":"YulIdentifier","src":"12210:3:69"}],"functionName":{"name":"store_literal_in_memory_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7","nativeSrc":"12121:88:69","nodeType":"YulIdentifier","src":"12121:88:69"},"nativeSrc":"12121:93:69","nodeType":"YulFunctionCall","src":"12121:93:69"},"nativeSrc":"12121:93:69","nodeType":"YulExpressionStatement","src":"12121:93:69"},{"nativeSrc":"12223:18:69","nodeType":"YulAssignment","src":"12223:18:69","value":{"arguments":[{"name":"pos","nativeSrc":"12234:3:69","nodeType":"YulIdentifier","src":"12234:3:69"},{"kind":"number","nativeSrc":"12239:1:69","nodeType":"YulLiteral","src":"12239:1:69","type":"","value":"4"}],"functionName":{"name":"add","nativeSrc":"12230:3:69","nodeType":"YulIdentifier","src":"12230:3:69"},"nativeSrc":"12230:11:69","nodeType":"YulFunctionCall","src":"12230:11:69"},"variableNames":[{"name":"end","nativeSrc":"12223:3:69","nodeType":"YulIdentifier","src":"12223:3:69"}]}]},"name":"abi_encode_t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"11849:398:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"12000:3:69","nodeType":"YulTypedName","src":"12000:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"12008:3:69","nodeType":"YulTypedName","src":"12008:3:69","type":""}],"src":"11849:398:69"},{"body":{"nativeSrc":"12441:191:69","nodeType":"YulBlock","src":"12441:191:69","statements":[{"nativeSrc":"12452:154:69","nodeType":"YulAssignment","src":"12452:154:69","value":{"arguments":[{"name":"pos","nativeSrc":"12602:3:69","nodeType":"YulIdentifier","src":"12602:3:69"}],"functionName":{"name":"abi_encode_t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"12459:141:69","nodeType":"YulIdentifier","src":"12459:141:69"},"nativeSrc":"12459:147:69","nodeType":"YulFunctionCall","src":"12459:147:69"},"variableNames":[{"name":"pos","nativeSrc":"12452:3:69","nodeType":"YulIdentifier","src":"12452:3:69"}]},{"nativeSrc":"12616:10:69","nodeType":"YulAssignment","src":"12616:10:69","value":{"name":"pos","nativeSrc":"12623:3:69","nodeType":"YulIdentifier","src":"12623:3:69"},"variableNames":[{"name":"end","nativeSrc":"12616:3:69","nodeType":"YulIdentifier","src":"12616:3:69"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nativeSrc":"12253:379:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"12428:3:69","nodeType":"YulTypedName","src":"12428:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"12437:3:69","nodeType":"YulTypedName","src":"12437:3:69","type":""}],"src":"12253:379:69"}]},"contents":"{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address_payable(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function cleanup_t_contract$_TransparentUpgradeableProxy_$19656(value) -> cleaned {\n        cleaned := cleanup_t_address_payable(value)\n    }\n\n    function validator_revert_t_contract$_TransparentUpgradeableProxy_$19656(value) {\n        if iszero(eq(value, cleanup_t_contract$_TransparentUpgradeableProxy_$19656(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_contract$_TransparentUpgradeableProxy_$19656(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_contract$_TransparentUpgradeableProxy_$19656(value)\n    }\n\n    function abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$19656(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_TransparentUpgradeableProxy_$19656(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$19656t_address(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_TransparentUpgradeableProxy_$19656(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n        revert(0, 0)\n    }\n\n    function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n        revert(0, 0)\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    function panic_error_0x41() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n\n    function finalize_allocation(memPtr, size) {\n        let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n        // protect against overflow\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n\n    function allocate_memory(size) -> memPtr {\n        memPtr := allocate_unbounded()\n        finalize_allocation(memPtr, size)\n    }\n\n    function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n        // Make sure we can allocate memory without overflow\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n        size := round_up_to_mul_of_32(length)\n\n        // add length slot\n        size := add(size, 0x20)\n\n    }\n\n    function copy_calldata_to_memory_with_cleanup(src, dst, length) {\n\n        calldatacopy(dst, src, length)\n        mstore(add(dst, length), 0)\n\n    }\n\n    function abi_decode_available_length_t_bytes_memory_ptr(src, length, end) -> array {\n        array := allocate_memory(array_allocation_size_t_bytes_memory_ptr(length))\n        mstore(array, length)\n        let dst := add(array, 0x20)\n        if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n        copy_calldata_to_memory_with_cleanup(src, dst, length)\n    }\n\n    // bytes\n    function abi_decode_t_bytes_memory_ptr(offset, end) -> array {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        let length := calldataload(offset)\n        array := abi_decode_available_length_t_bytes_memory_ptr(add(offset, 0x20), length, end)\n    }\n\n    function abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$19656t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_contract$_TransparentUpgradeableProxy_$19656(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := calldataload(add(headStart, 64))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value2 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n        updated_pos := pos\n    }\n\n    function store_literal_in_memory_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29(memPtr) {\n\n        mstore(add(memPtr, 0), 0x5c60da1b00000000000000000000000000000000000000000000000000000000)\n\n    }\n\n    function abi_encode_t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, 4)\n        store_literal_in_memory_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29(pos)\n        end := add(pos, 4)\n    }\n\n    function abi_encode_tuple_packed_t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos ) -> end {\n\n        pos := abi_encode_t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack( pos)\n\n        end := pos\n    }\n\n    function validator_revert_t_address_payable(value) {\n        if iszero(eq(value, cleanup_t_address_payable(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address_payable_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_address_payable(value)\n    }\n\n    function abi_decode_tuple_t_address_payable_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address_payable_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe(memPtr) {\n\n        mstore(add(memPtr, 0), \"Ownable: caller is not the owner\")\n\n    }\n\n    function abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 32)\n        store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe(pos)\n        end := add(pos, 32)\n    }\n\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function array_length_t_bytes_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function copy_memory_to_memory_with_cleanup(src, dst, length) {\n\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n\n    }\n\n    function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value, pos) -> end {\n        let length := array_length_t_bytes_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        mstore(add(headStart, 32), sub(tail, headStart))\n        tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value1,  tail)\n\n    }\n\n    function store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe(memPtr) {\n\n        mstore(add(memPtr, 0), \"Ownable: new owner is the zero a\")\n\n        mstore(add(memPtr, 32), \"ddress\")\n\n    }\n\n    function abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 38)\n        store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7(memPtr) {\n\n        mstore(add(memPtr, 0), 0xf851a44000000000000000000000000000000000000000000000000000000000)\n\n    }\n\n    function abi_encode_t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, 4)\n        store_literal_in_memory_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7(pos)\n        end := add(pos, 4)\n    }\n\n    function abi_encode_tuple_packed_t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos ) -> end {\n\n        pos := abi_encode_t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack( pos)\n\n        end := pos\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461010b57806399a88ec41461011e578063f2fde38b1461013e578063f3b7dead1461015e57600080fd5b8063204e1c7a14610080578063715018a6146100b65780637eff275e146100cd5780638da5cb5b146100ed575b600080fd5b34801561008c57600080fd5b506100a061009b3660046104ba565b61017e565b6040516100ad91906104ea565b60405180910390f35b3480156100c257600080fd5b506100cb610204565b005b3480156100d957600080fd5b506100cb6100e836600461050c565b610243565b3480156100f957600080fd5b506000546001600160a01b03166100a0565b6100cb610119366004610644565b6102cf565b34801561012a57600080fd5b506100cb61013936600461050c565b610360565b34801561014a57600080fd5b506100cb6101593660046106af565b6103b6565b34801561016a57600080fd5b506100a06101793660046104ba565b610412565b6000806000836001600160a01b0316604051610199906106e4565b600060405180830381855afa9150503d80600081146101d4576040519150601f19603f3d011682016040523d82523d6000602084013e6101d9565b606091505b5091509150816101e857600080fd5b808060200190518101906101fc91906106fa565b949350505050565b6000546001600160a01b031633146102375760405162461bcd60e51b815260040161022e9061071b565b60405180910390fd5b610241600061042d565b565b6000546001600160a01b0316331461026d5760405162461bcd60e51b815260040161022e9061071b565b6040516308f2839760e41b81526001600160a01b03831690638f283970906102999084906004016104ea565b600060405180830381600087803b1580156102b357600080fd5b505af11580156102c7573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146102f95760405162461bcd60e51b815260040161022e9061071b565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061032990869086906004016107ab565b6000604051808303818588803b15801561034257600080fd5b505af1158015610356573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b0316331461038a5760405162461bcd60e51b815260040161022e9061071b565b604051631b2ce7f360e11b81526001600160a01b03831690633659cfe6906102999084906004016104ea565b6000546001600160a01b031633146103e05760405162461bcd60e51b815260040161022e9061071b565b6001600160a01b0381166104065760405162461bcd60e51b815260040161022e906107cb565b61040f8161042d565b50565b6000806000836001600160a01b031660405161019990610826565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b600061048a8261047d565b6104a481610490565b811461040f57600080fd5b803561048a8161049b565b6000602082840312156104cf576104cf600080fd5b60006101fc84846104af565b6104e48161047d565b82525050565b6020810161048a82846104db565b6104a48161047d565b803561048a816104f8565b6000806040838503121561052257610522600080fd5b600061052e85856104af565b925050602061053f85828601610501565b9150509250929050565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561058557610585610549565b6040525050565b600061059760405190565b90506105a3828261055f565b919050565b600067ffffffffffffffff8211156105c2576105c2610549565b601f19601f83011660200192915050565b82818337506000910152565b60006105f26105ed846105a8565b61058c565b90508281526020810184848401111561060d5761060d600080fd5b6106188482856105d3565b509392505050565b600082601f83011261063457610634600080fd5b81356101fc8482602086016105df565b60008060006060848603121561065c5761065c600080fd5b600061066886866104af565b935050602061067986828701610501565b925050604084013567ffffffffffffffff81111561069957610699600080fd5b6106a586828701610620565b9150509250925092565b6000602082840312156106c4576106c4600080fd5b60006101fc8484610501565b635c60da1b60e01b815260005b5060040190565b600061048a826106d0565b805161048a816104f8565b60006020828403121561070f5761070f600080fd5b60006101fc84846106ef565b60208082528181019081527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408301526060820161048a565b60005b83811015610770578181015183820152602001610758565b50506000910152565b6000610783825190565b80845260208401935061079a818560208601610755565b601f01601f19169290920192915050565b604081016107b982856104db565b81810360208301526101fc8184610779565b6020808252810161048a81602681527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160208201526564647265737360d01b604082015260600190565b6303e1469160e61b815260006106dd565b600061048a8261081556fea26469706673582212203b58938bc480699dc5b9a3a90f976b9179e4bbcc2d37584c8881a01abfb51dc764736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9623609D GT PUSH2 0x4E JUMPI DUP1 PUSH4 0x9623609D EQ PUSH2 0x10B JUMPI DUP1 PUSH4 0x99A88EC4 EQ PUSH2 0x11E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x13E JUMPI DUP1 PUSH4 0xF3B7DEAD EQ PUSH2 0x15E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x204E1C7A EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xB6 JUMPI DUP1 PUSH4 0x7EFF275E EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xED JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA0 PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0x4BA JUMP JUMPDEST PUSH2 0x17E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAD SWAP2 SWAP1 PUSH2 0x4EA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCB PUSH2 0x204 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCB PUSH2 0xE8 CALLDATASIZE PUSH1 0x4 PUSH2 0x50C JUMP JUMPDEST PUSH2 0x243 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA0 JUMP JUMPDEST PUSH2 0xCB PUSH2 0x119 CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH2 0x2CF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCB PUSH2 0x139 CALLDATASIZE PUSH1 0x4 PUSH2 0x50C JUMP JUMPDEST PUSH2 0x360 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCB PUSH2 0x159 CALLDATASIZE PUSH1 0x4 PUSH2 0x6AF JUMP JUMPDEST PUSH2 0x3B6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA0 PUSH2 0x179 CALLDATASIZE PUSH1 0x4 PUSH2 0x4BA JUMP JUMPDEST PUSH2 0x412 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 MLOAD PUSH2 0x199 SWAP1 PUSH2 0x6E4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1D4 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1D9 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x1E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1FC SWAP2 SWAP1 PUSH2 0x6FA JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x237 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x22E SWAP1 PUSH2 0x71B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x241 PUSH1 0x0 PUSH2 0x42D JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x26D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x22E SWAP1 PUSH2 0x71B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8F28397 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x8F283970 SWAP1 PUSH2 0x299 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x4EA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2F9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x22E SWAP1 PUSH2 0x71B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x278F7943 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 CALLVALUE SWAP1 PUSH2 0x329 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x7AB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x342 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x356 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x38A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x22E SWAP1 PUSH2 0x71B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1B2CE7F3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x3659CFE6 SWAP1 PUSH2 0x299 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x4EA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x22E SWAP1 PUSH2 0x71B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x406 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x22E SWAP1 PUSH2 0x7CB JUMP JUMPDEST PUSH2 0x40F DUP2 PUSH2 0x42D JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 MLOAD PUSH2 0x199 SWAP1 PUSH2 0x826 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48A DUP3 PUSH2 0x47D JUMP JUMPDEST PUSH2 0x4A4 DUP2 PUSH2 0x490 JUMP JUMPDEST DUP2 EQ PUSH2 0x40F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x48A DUP2 PUSH2 0x49B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4CF JUMPI PUSH2 0x4CF PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1FC DUP5 DUP5 PUSH2 0x4AF JUMP JUMPDEST PUSH2 0x4E4 DUP2 PUSH2 0x47D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x48A DUP3 DUP5 PUSH2 0x4DB JUMP JUMPDEST PUSH2 0x4A4 DUP2 PUSH2 0x47D JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x48A DUP2 PUSH2 0x4F8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x522 JUMPI PUSH2 0x522 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x52E DUP6 DUP6 PUSH2 0x4AF JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x53F DUP6 DUP3 DUP7 ADD PUSH2 0x501 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x585 JUMPI PUSH2 0x585 PUSH2 0x549 JUMP JUMPDEST PUSH1 0x40 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x597 PUSH1 0x40 MLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x5A3 DUP3 DUP3 PUSH2 0x55F JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5C2 JUMPI PUSH2 0x5C2 PUSH2 0x549 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5F2 PUSH2 0x5ED DUP5 PUSH2 0x5A8 JUMP JUMPDEST PUSH2 0x58C JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x60D JUMPI PUSH2 0x60D PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x618 DUP5 DUP3 DUP6 PUSH2 0x5D3 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x634 JUMPI PUSH2 0x634 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1FC DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x5DF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x65C JUMPI PUSH2 0x65C PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x668 DUP7 DUP7 PUSH2 0x4AF JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x679 DUP7 DUP3 DUP8 ADD PUSH2 0x501 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x699 JUMPI PUSH2 0x699 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6A5 DUP7 DUP3 DUP8 ADD PUSH2 0x620 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6C4 JUMPI PUSH2 0x6C4 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1FC DUP5 DUP5 PUSH2 0x501 JUMP JUMPDEST PUSH4 0x5C60DA1B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 JUMPDEST POP PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48A DUP3 PUSH2 0x6D0 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x48A DUP2 PUSH2 0x4F8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x70F JUMPI PUSH2 0x70F PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1FC DUP5 DUP5 PUSH2 0x6EF JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD SWAP1 DUP2 MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD PUSH2 0x48A JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x770 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x758 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x783 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x79A DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x755 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x7B9 DUP3 DUP6 PUSH2 0x4DB JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x1FC DUP2 DUP5 PUSH2 0x779 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x48A DUP2 PUSH1 0x26 DUP2 MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x20 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH4 0x3E14691 PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x0 PUSH2 0x6DD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48A DUP3 PUSH2 0x815 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXTCODESIZE PC SWAP4 DUP12 0xC4 DUP1 PUSH10 0x9DC5B9A3A90F976B9179 0xE4 0xBB 0xCC 0x2D CALLDATACOPY PC 0x4C DUP9 DUP2 LOG0 BYTE 0xBF 0xB5 SAR 0xC7 PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ","sourceMap":"435:2470:63:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;701:437;;;;;;;;;;-1:-1:-1;701:437:63;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1689:101:57;;;;;;;;;;;;;:::i;:::-;;1891:148:63;;;;;;;;;;-1:-1:-1;1891:148:63;;;;;:::i;:::-;;:::i;1057:85:57:-;;;;;;;;;;-1:-1:-1;1103:7:57;1129:6;-1:-1:-1;;;;;1129:6:57;1057:85;;2659:244:63;;;;;;:::i;:::-;;:::i;2244:149::-;;;;;;;;;;-1:-1:-1;2244:149:63;;;;;:::i;:::-;;:::i;1939:198:57:-;;;;;;;;;;-1:-1:-1;1939:198:57;;;;;:::i;:::-;;:::i;1298:419:63:-;;;;;;;;;;-1:-1:-1;1298:419:63;;;;;:::i;:::-;;:::i;701:437::-;797:7;974:12;988:23;1023:5;-1:-1:-1;;;;;1015:25:63;:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;973:82;;;;1073:7;1065:16;;;;;;1109:10;1098:33;;;;;;;;;;;;:::i;:::-;1091:40;701:437;-1:-1:-1;;;;701:437:63:o;1689:101:57:-;1103:7;1129:6;-1:-1:-1;;;;;1129:6:57;719:10:66;1269:23:57;1261:68;;;;-1:-1:-1;;;1261:68:57;;;;;;;:::i;:::-;;;;;;;;;1753:30:::1;1780:1;1753:18;:30::i;:::-;1689:101::o:0;1891:148:63:-;1103:7:57;1129:6;-1:-1:-1;;;;;1129:6:57;719:10:66;1269:23:57;1261:68;;;;-1:-1:-1;;;1261:68:57;;;;;;;:::i;:::-;2005:27:63::1;::::0;-1:-1:-1;;;2005:27:63;;-1:-1:-1;;;;;2005:17:63;::::1;::::0;::::1;::::0;:27:::1;::::0;2023:8;;2005:27:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1891:148:::0;;:::o;2659:244::-;1103:7:57;1129:6;-1:-1:-1;;;;;1129:6:57;719:10:66;1269:23:57;1261:68;;;;-1:-1:-1;;;1261:68:57;;;;;;;:::i;:::-;2834:62:63::1;::::0;-1:-1:-1;;;2834:62:63;;-1:-1:-1;;;;;2834:22:63;::::1;::::0;::::1;::::0;2864:9:::1;::::0;2834:62:::1;::::0;2875:14;;2891:4;;2834:62:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;2659:244:::0;;;:::o;2244:149::-;1103:7:57;1129:6;-1:-1:-1;;;;;1129:6:57;719:10:66;1269:23:57;1261:68;;;;-1:-1:-1;;;1261:68:57;;;;;;;:::i;:::-;2355:31:63::1;::::0;-1:-1:-1;;;2355:31:63;;-1:-1:-1;;;;;2355:15:63;::::1;::::0;::::1;::::0;:31:::1;::::0;2371:14;;2355:31:::1;;;:::i;1939:198:57:-:0;1103:7;1129:6;-1:-1:-1;;;;;1129:6:57;719:10:66;1269:23:57;1261:68;;;;-1:-1:-1;;;1261:68:57;;;;;;;:::i;:::-;-1:-1:-1;;;;;2027:22:57;::::1;2019:73;;;;-1:-1:-1::0;;;2019:73:57::1;;;;;;;:::i;:::-;2102:28;2121:8;2102:18;:28::i;:::-;1939:198:::0;:::o;1298:419:63:-;1385:7;1553:12;1567:23;1602:5;-1:-1:-1;;;;;1594:25:63;:40;;;;;:::i;2291:187:57:-;2364:16;2383:6;;-1:-1:-1;;;;;2399:17:57;;;-1:-1:-1;;;;;;2399:17:57;;;;;;2431:40;;2383:6;;;;;;;2431:40;;2364:16;2431:40;2354:124;2291:187;:::o;466:104:69:-;511:7;-1:-1:-1;;;;;400:54:69;;540:24;529:35;466:104;-1:-1:-1;;466:104:69:o;576:141::-;650:7;679:32;705:5;679:32;:::i;723:196::-;833:61;888:5;833:61;:::i;:::-;826:5;823:72;813:100;;909:1;906;899:12;925:213;1033:20;;1062:70;1033:20;1062:70;:::i;1144:403::-;1240:6;1289:2;1277:9;1268:7;1264:23;1260:32;1257:119;;;1295:79;435:2470:63;;;1295:79:69;1415:1;1440:90;1522:7;1502:9;1440:90;:::i;1655:118::-;1742:24;1760:5;1742:24;:::i;:::-;1737:3;1730:37;1655:118;;:::o;1779:222::-;1910:2;1895:18;;1923:71;1899:9;1967:6;1923:71;:::i;2007:122::-;2080:24;2098:5;2080:24;:::i;2135:139::-;2206:20;;2235:33;2206:20;2235:33;:::i;2280:548::-;2385:6;2393;2442:2;2430:9;2421:7;2417:23;2413:32;2410:119;;;2448:79;435:2470:63;;;2448:79:69;2568:1;2593:90;2675:7;2655:9;2593:90;:::i;:::-;2583:100;;2539:154;2732:2;2758:53;2803:7;2794:6;2783:9;2779:22;2758:53;:::i;:::-;2748:63;;2703:118;2280:548;;;;;:::o;3188:180::-;-1:-1:-1;;;3233:1:69;3226:88;3333:4;3330:1;3323:15;3357:4;3354:1;3347:15;3374:281;-1:-1:-1;;3172:2:69;3152:14;;3148:28;3449:6;3445:40;3587:6;3575:10;3572:22;3551:18;3539:10;3536:34;3533:62;3530:88;;;3598:18;;:::i;:::-;3634:2;3627:22;-1:-1:-1;;3374:281:69:o;3661:129::-;3695:6;3722:20;73:2;67:9;;7:75;3722:20;3712:30;;3751:33;3779:4;3771:6;3751:33;:::i;:::-;3661:129;;;:::o;3796:307::-;3857:4;3947:18;3939:6;3936:30;3933:56;;;3969:18;;:::i;:::-;-1:-1:-1;;3172:2:69;3152:14;;3148:28;4091:4;4081:15;;3796:307;-1:-1:-1;;3796:307:69:o;4109:148::-;4207:6;4202:3;4197;4184:30;-1:-1:-1;4248:1:69;4230:16;;4223:27;4109:148::o;4263:423::-;4340:5;4365:65;4381:48;4422:6;4381:48;:::i;:::-;4365:65;:::i;:::-;4356:74;;4453:6;4446:5;4439:21;4491:4;4484:5;4480:16;4529:3;4520:6;4515:3;4511:16;4508:25;4505:112;;;4536:79;435:2470:63;;;4536:79:69;4626:54;4673:6;4668:3;4663;4626:54;:::i;:::-;4346:340;4263:423;;;;;:::o;4705:338::-;4760:5;4809:3;4802:4;4794:6;4790:17;4786:27;4776:122;;4817:79;435:2470:63;;;4817:79:69;4934:6;4921:20;4959:78;5033:3;5025:6;5018:4;5010:6;5006:17;4959:78;:::i;5049:871::-;5172:6;5180;5188;5237:2;5225:9;5216:7;5212:23;5208:32;5205:119;;;5243:79;435:2470:63;;;5243:79:69;5363:1;5388:90;5470:7;5450:9;5388:90;:::i;:::-;5378:100;;5334:154;5527:2;5553:53;5598:7;5589:6;5578:9;5574:22;5553:53;:::i;:::-;5543:63;;5498:118;5683:2;5672:9;5668:18;5655:32;5714:18;5706:6;5703:30;5700:117;;;5736:79;435:2470:63;;;5736:79:69;5841:62;5895:7;5886:6;5875:9;5871:22;5841:62;:::i;:::-;5831:72;;5626:287;5049:871;;;;;:::o;5926:329::-;5985:6;6034:2;6022:9;6013:7;6009:23;6005:32;6002:119;;;6040:79;435:2470:63;;;6040:79:69;6160:1;6185:53;6230:7;6210:9;6185:53;:::i;6634:398::-;-1:-1:-1;;;6531:90:69;;6793:3;6906:93;-1:-1:-1;7024:1:69;7015:11;;6634:398::o;7038:379::-;7222:3;7244:147;7387:3;7244:147;:::i;7567:159::-;7657:13;;7679:41;7657:13;7679:41;:::i;7732:367::-;7810:6;7859:2;7847:9;7838:7;7834:23;7830:32;7827:119;;;7865:79;435:2470:63;;;7865:79:69;7985:1;8010:72;8074:7;8054:9;8010:72;:::i;8840:419::-;9044:2;9057:47;;;9029:18;;;8211:19;;;8420:34;8254:14;;;8397:58;8816:12;;;9121:131;8468:366;9543:248;9625:1;9635:113;9649:6;9646:1;9643:13;9635:113;;;9725:11;;;9719:18;9706:11;;;9699:39;9671:2;9664:10;9635:113;;;-1:-1:-1;;9782:1:69;9764:16;;9757:27;9543:248::o;9797:373::-;9883:3;9911:38;9943:5;9344:12;;9265:98;9911:38;8211:19;;;8263:4;8254:14;;9958:77;;10044:65;10102:6;10097:3;10090:4;10083:5;10079:16;10044:65;:::i;:::-;3172:2;3152:14;-1:-1:-1;;3148:28:69;10125:39;;;;;;-1:-1:-1;;9797:373:69:o;10176:419::-;10353:2;10338:18;;10366:71;10342:9;10410:6;10366:71;:::i;:::-;10484:9;10478:4;10474:20;10469:2;10458:9;10454:18;10447:48;10512:76;10583:4;10574:6;10512:76;:::i;11204:419::-;11408:2;11421:47;;;11393:18;;11485:131;11393:18;11059:2;8211:19;;10741:34;8263:4;8254:14;;10718:58;-1:-1:-1;;;10793:15:69;;;10786:33;11180:12;;;10832:366;11849:398;-1:-1:-1;;;11746:90:69;;12008:3;12121:93;11629:214;12253:379;12437:3;12459:147;12602:3;12459:147;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"430200","executionCost":"infinite","totalCost":"infinite"},"external":{"changeProxyAdmin(address,address)":"infinite","getProxyAdmin(address)":"infinite","getProxyImplementation(address)":"infinite","owner()":"infinite","renounceOwnership()":"28137","transferOwnership(address)":"infinite","upgrade(address,address)":"infinite","upgradeAndCall(address,address,bytes)":"infinite"}},"methodIdentifiers":{"changeProxyAdmin(address,address)":"7eff275e","getProxyAdmin(address)":"f3b7dead","getProxyImplementation(address)":"204e1c7a","owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","upgrade(address,address)":"99a88ec4","upgradeAndCall(address,address,bytes)":"9623609d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"hardhat-deploy/solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor (address initialOwner) {\\n        _transferOwnership(initialOwner);\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n    /**\\n     * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n     *\\n     * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n     * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n     */\\n    constructor(address _logic, bytes memory _data) payable {\\n        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n        _upgradeToAndCall(_logic, _data, false);\\n    }\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _implementation() internal view virtual override returns (address impl) {\\n        return ERC1967Upgrade._getImplementation();\\n    }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n    // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n    /**\\n     * @dev Storage slot with the address of the current implementation.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _getImplementation() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 implementation slot.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeTo(address newImplementation) internal {\\n        _setImplementation(newImplementation);\\n        emit Upgraded(newImplementation);\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCall(\\n        address newImplementation,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        _upgradeTo(newImplementation);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(newImplementation, data);\\n        }\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCallUUPS(\\n        address newImplementation,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\\n        if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n            _setImplementation(newImplementation);\\n        } else {\\n            try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n                require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n            } catch {\\n                revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n            }\\n            _upgradeToAndCall(newImplementation, data, forceCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Storage slot with the admin of the contract.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n    /**\\n     * @dev Emitted when the admin account has changed.\\n     */\\n    event AdminChanged(address previousAdmin, address newAdmin);\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _getAdmin() internal view virtual returns (address) {\\n        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 admin slot.\\n     */\\n    function _setAdmin(address newAdmin) private {\\n        require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {AdminChanged} event.\\n     */\\n    function _changeAdmin(address newAdmin) internal {\\n        emit AdminChanged(_getAdmin(), newAdmin);\\n        _setAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n     */\\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n    /**\\n     * @dev Emitted when the beacon is upgraded.\\n     */\\n    event BeaconUpgraded(address indexed beacon);\\n\\n    /**\\n     * @dev Returns the current beacon.\\n     */\\n    function _getBeacon() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\\n     */\\n    function _setBeacon(address newBeacon) private {\\n        require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n        require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n    }\\n\\n    /**\\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n     *\\n     * Emits a {BeaconUpgraded} event.\\n     */\\n    function _upgradeBeaconToAndCall(\\n        address newBeacon,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        _setBeacon(newBeacon);\\n        emit BeaconUpgraded(newBeacon);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n    /**\\n     * @dev Delegates the current call to `implementation`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _delegate(address implementation) internal virtual {\\n        assembly {\\n            // Copy msg.data. We take full control of memory in this inline assembly\\n            // block because it will not return to Solidity code. We overwrite the\\n            // Solidity scratch pad at memory position 0.\\n            calldatacopy(0, 0, calldatasize())\\n\\n            // Call the implementation.\\n            // out and outsize are 0 because we don't know the size yet.\\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n            // Copy the returned data.\\n            returndatacopy(0, 0, returndatasize())\\n\\n            switch result\\n            // delegatecall returns 0 on error.\\n            case 0 {\\n                revert(0, returndatasize())\\n            }\\n            default {\\n                return(0, returndatasize())\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n     * and {_fallback} should delegate.\\n     */\\n    function _implementation() internal view virtual returns (address);\\n\\n    /**\\n     * @dev Delegates the current call to the address returned by `_implementation()`.\\n     *\\n     * This function does not return to its internall call site, it will return directly to the external caller.\\n     */\\n    function _fallback() internal virtual {\\n        _beforeFallback();\\n        _delegate(_implementation());\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n     * function in the contract matches the call data.\\n     */\\n    fallback() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n     * is empty.\\n     */\\n    receive() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n     * call, or as part of the Solidity `fallback` or `receive` functions.\\n     *\\n     * If overriden should call `super._beforeFallback()`.\\n     */\\n    function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {BeaconProxy} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n    constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n    /**\\n     * @dev Returns the current implementation of `proxy`.\\n     *\\n     * Requirements:\\n     *\\n     * - This contract must be the admin of `proxy`.\\n     */\\n    function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n        // We need to manually run the static call since the getter cannot be flagged as view\\n        // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n        (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n        require(success);\\n        return abi.decode(returndata, (address));\\n    }\\n\\n    /**\\n     * @dev Returns the current admin of `proxy`.\\n     *\\n     * Requirements:\\n     *\\n     * - This contract must be the admin of `proxy`.\\n     */\\n    function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n        // We need to manually run the static call since the getter cannot be flagged as view\\n        // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n        (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n        require(success);\\n        return abi.decode(returndata, (address));\\n    }\\n\\n    /**\\n     * @dev Changes the admin of `proxy` to `newAdmin`.\\n     *\\n     * Requirements:\\n     *\\n     * - This contract must be the current admin of `proxy`.\\n     */\\n    function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n        proxy.changeAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n     *\\n     * Requirements:\\n     *\\n     * - This contract must be the admin of `proxy`.\\n     */\\n    function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n        proxy.upgradeTo(implementation);\\n    }\\n\\n    /**\\n     * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n     * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n     *\\n     * Requirements:\\n     *\\n     * - This contract must be the admin of `proxy`.\\n     */\\n    function upgradeAndCall(\\n        TransparentUpgradeableProxy proxy,\\n        address implementation,\\n        bytes memory data\\n    ) public payable virtual onlyOwner {\\n        proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n    }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n    /**\\n     * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n     * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n     */\\n    constructor(\\n        address _logic,\\n        address admin_,\\n        bytes memory _data\\n    ) payable ERC1967Proxy(_logic, _data) {\\n        assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n        _changeAdmin(admin_);\\n    }\\n\\n    /**\\n     * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n     */\\n    modifier ifAdmin() {\\n        if (msg.sender == _getAdmin()) {\\n            _;\\n        } else {\\n            _fallback();\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the current admin.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n     *\\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n     */\\n    function admin() external ifAdmin returns (address admin_) {\\n        admin_ = _getAdmin();\\n    }\\n\\n    /**\\n     * @dev Returns the current implementation.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n     *\\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n     * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n     */\\n    function implementation() external ifAdmin returns (address implementation_) {\\n        implementation_ = _implementation();\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {AdminChanged} event.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n     */\\n    function changeAdmin(address newAdmin) external virtual ifAdmin {\\n        _changeAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev Upgrade the implementation of the proxy.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n     */\\n    function upgradeTo(address newImplementation) external ifAdmin {\\n        _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n    }\\n\\n    /**\\n     * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n     * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n     * proxied contract.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n     */\\n    function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n        _upgradeToAndCall(newImplementation, data, true);\\n    }\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _admin() internal view virtual returns (address) {\\n        return _getAdmin();\\n    }\\n\\n    /**\\n     * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n     */\\n    function _beforeFallback() internal virtual override {\\n        require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n        super._beforeFallback();\\n    }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":18806,"contract":"hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol":{"TransparentUpgradeableProxy":{"abi":[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"admin_","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"admin_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"implementation_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"details":"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.","events":{"AdminChanged(address,address)":{"details":"Emitted when the admin account has changed."},"BeaconUpgraded(address)":{"details":"Emitted when the beacon is upgraded."},"Upgraded(address)":{"details":"Emitted when the implementation is upgraded."}},"kind":"dev","methods":{"admin()":{"details":"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`"},"changeAdmin(address)":{"details":"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}."},"constructor":{"details":"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}."},"implementation()":{"details":"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`"},"upgradeTo(address)":{"details":"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}."},"upgradeToAndCall(address,bytes)":{"details":"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_18954":{"entryPoint":null,"id":18954,"parameterSlots":2,"returnSlots":0},"@_19533":{"entryPoint":null,"id":19533,"parameterSlots":3,"returnSlots":0},"@_changeAdmin_19188":{"entryPoint":254,"id":19188,"parameterSlots":1,"returnSlots":0},"@_getAdmin_19145":{"entryPoint":null,"id":19145,"parameterSlots":0,"returnSlots":1},"@_setAdmin_19171":{"entryPoint":463,"id":19171,"parameterSlots":1,"returnSlots":0},"@_setImplementation_19023":{"entryPoint":560,"id":19023,"parameterSlots":1,"returnSlots":0},"@_upgradeToAndCall_19068":{"entryPoint":210,"id":19068,"parameterSlots":3,"returnSlots":0},"@_upgradeTo_19038":{"entryPoint":353,"id":19038,"parameterSlots":1,"returnSlots":0},"@functionDelegateCall_19884":{"entryPoint":417,"id":19884,"parameterSlots":2,"returnSlots":1},"@functionDelegateCall_19919":{"entryPoint":620,"id":19919,"parameterSlots":3,"returnSlots":1},"@getAddressSlot_19999":{"entryPoint":null,"id":19999,"parameterSlots":1,"returnSlots":1},"@isContract_19674":{"entryPoint":null,"id":19674,"parameterSlots":1,"returnSlots":1},"@verifyCallResult_19950":{"entryPoint":781,"id":19950,"parameterSlots":3,"returnSlots":1},"abi_decode_available_length_t_bytes_memory_ptr_fromMemory":{"entryPoint":1058,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_t_address_fromMemory":{"entryPoint":875,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_bytes_memory_ptr_fromMemory":{"entryPoint":1123,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory":{"entryPoint":1167,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_t_address_to_t_address_fromStack":{"entryPoint":1336,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":1637,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack":{"entryPoint":1683,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5_to_t_string_memory_ptr_fromStack":{"entryPoint":1378,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack":{"entryPoint":1464,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack":{"entryPoint":1554,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":1671,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":1351,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1733,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1448,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1538,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1621,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory":{"entryPoint":952,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_t_bytes_memory_ptr":{"entryPoint":980,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_bytes_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_string_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":1295,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_address":{"entryPoint":838,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":1022,"id":null,"parameterSlots":3,"returnSlots":0},"finalize_allocation":{"entryPoint":908,"id":null,"parameterSlots":2,"returnSlots":0},"panic_error_0x01":{"entryPoint":1314,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x11":{"entryPoint":1273,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":886,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"round_up_to_mul_of_32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"store_literal_in_memory_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_address":{"entryPoint":855,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:10137:69","nodeType":"YulBlock","src":"0:10137:69","statements":[{"body":{"nativeSrc":"47:35:69","nodeType":"YulBlock","src":"47:35:69","statements":[{"nativeSrc":"57:19:69","nodeType":"YulAssignment","src":"57:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"73:2:69","nodeType":"YulLiteral","src":"73:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"67:5:69","nodeType":"YulIdentifier","src":"67:5:69"},"nativeSrc":"67:9:69","nodeType":"YulFunctionCall","src":"67:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"57:6:69","nodeType":"YulIdentifier","src":"57:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"7:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"40:6:69","nodeType":"YulTypedName","src":"40:6:69","type":""}],"src":"7:75:69"},{"body":{"nativeSrc":"177:28:69","nodeType":"YulBlock","src":"177:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"194:1:69","nodeType":"YulLiteral","src":"194:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"197:1:69","nodeType":"YulLiteral","src":"197:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"187:6:69","nodeType":"YulIdentifier","src":"187:6:69"},"nativeSrc":"187:12:69","nodeType":"YulFunctionCall","src":"187:12:69"},"nativeSrc":"187:12:69","nodeType":"YulExpressionStatement","src":"187:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"88:117:69","nodeType":"YulFunctionDefinition","src":"88:117:69"},{"body":{"nativeSrc":"300:28:69","nodeType":"YulBlock","src":"300:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"317:1:69","nodeType":"YulLiteral","src":"317:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"320:1:69","nodeType":"YulLiteral","src":"320:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},"nativeSrc":"310:12:69","nodeType":"YulFunctionCall","src":"310:12:69"},"nativeSrc":"310:12:69","nodeType":"YulExpressionStatement","src":"310:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"211:117:69","nodeType":"YulFunctionDefinition","src":"211:117:69"},{"body":{"nativeSrc":"379:81:69","nodeType":"YulBlock","src":"379:81:69","statements":[{"nativeSrc":"389:65:69","nodeType":"YulAssignment","src":"389:65:69","value":{"arguments":[{"name":"value","nativeSrc":"404:5:69","nodeType":"YulIdentifier","src":"404:5:69"},{"kind":"number","nativeSrc":"411:42:69","nodeType":"YulLiteral","src":"411:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"400:3:69","nodeType":"YulIdentifier","src":"400:3:69"},"nativeSrc":"400:54:69","nodeType":"YulFunctionCall","src":"400:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"389:7:69","nodeType":"YulIdentifier","src":"389:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"334:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"361:5:69","nodeType":"YulTypedName","src":"361:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"371:7:69","nodeType":"YulTypedName","src":"371:7:69","type":""}],"src":"334:126:69"},{"body":{"nativeSrc":"511:51:69","nodeType":"YulBlock","src":"511:51:69","statements":[{"nativeSrc":"521:35:69","nodeType":"YulAssignment","src":"521:35:69","value":{"arguments":[{"name":"value","nativeSrc":"550:5:69","nodeType":"YulIdentifier","src":"550:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"532:17:69","nodeType":"YulIdentifier","src":"532:17:69"},"nativeSrc":"532:24:69","nodeType":"YulFunctionCall","src":"532:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"521:7:69","nodeType":"YulIdentifier","src":"521:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"466:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"493:5:69","nodeType":"YulTypedName","src":"493:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"503:7:69","nodeType":"YulTypedName","src":"503:7:69","type":""}],"src":"466:96:69"},{"body":{"nativeSrc":"611:79:69","nodeType":"YulBlock","src":"611:79:69","statements":[{"body":{"nativeSrc":"668:16:69","nodeType":"YulBlock","src":"668:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"677:1:69","nodeType":"YulLiteral","src":"677:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"680:1:69","nodeType":"YulLiteral","src":"680:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"670:6:69","nodeType":"YulIdentifier","src":"670:6:69"},"nativeSrc":"670:12:69","nodeType":"YulFunctionCall","src":"670:12:69"},"nativeSrc":"670:12:69","nodeType":"YulExpressionStatement","src":"670:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"634:5:69","nodeType":"YulIdentifier","src":"634:5:69"},{"arguments":[{"name":"value","nativeSrc":"659:5:69","nodeType":"YulIdentifier","src":"659:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"641:17:69","nodeType":"YulIdentifier","src":"641:17:69"},"nativeSrc":"641:24:69","nodeType":"YulFunctionCall","src":"641:24:69"}],"functionName":{"name":"eq","nativeSrc":"631:2:69","nodeType":"YulIdentifier","src":"631:2:69"},"nativeSrc":"631:35:69","nodeType":"YulFunctionCall","src":"631:35:69"}],"functionName":{"name":"iszero","nativeSrc":"624:6:69","nodeType":"YulIdentifier","src":"624:6:69"},"nativeSrc":"624:43:69","nodeType":"YulFunctionCall","src":"624:43:69"},"nativeSrc":"621:63:69","nodeType":"YulIf","src":"621:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"568:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"604:5:69","nodeType":"YulTypedName","src":"604:5:69","type":""}],"src":"568:122:69"},{"body":{"nativeSrc":"759:80:69","nodeType":"YulBlock","src":"759:80:69","statements":[{"nativeSrc":"769:22:69","nodeType":"YulAssignment","src":"769:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"784:6:69","nodeType":"YulIdentifier","src":"784:6:69"}],"functionName":{"name":"mload","nativeSrc":"778:5:69","nodeType":"YulIdentifier","src":"778:5:69"},"nativeSrc":"778:13:69","nodeType":"YulFunctionCall","src":"778:13:69"},"variableNames":[{"name":"value","nativeSrc":"769:5:69","nodeType":"YulIdentifier","src":"769:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"827:5:69","nodeType":"YulIdentifier","src":"827:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"800:26:69","nodeType":"YulIdentifier","src":"800:26:69"},"nativeSrc":"800:33:69","nodeType":"YulFunctionCall","src":"800:33:69"},"nativeSrc":"800:33:69","nodeType":"YulExpressionStatement","src":"800:33:69"}]},"name":"abi_decode_t_address_fromMemory","nativeSrc":"696:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"737:6:69","nodeType":"YulTypedName","src":"737:6:69","type":""},{"name":"end","nativeSrc":"745:3:69","nodeType":"YulTypedName","src":"745:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"753:5:69","nodeType":"YulTypedName","src":"753:5:69","type":""}],"src":"696:143:69"},{"body":{"nativeSrc":"934:28:69","nodeType":"YulBlock","src":"934:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"951:1:69","nodeType":"YulLiteral","src":"951:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"954:1:69","nodeType":"YulLiteral","src":"954:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"944:6:69","nodeType":"YulIdentifier","src":"944:6:69"},"nativeSrc":"944:12:69","nodeType":"YulFunctionCall","src":"944:12:69"},"nativeSrc":"944:12:69","nodeType":"YulExpressionStatement","src":"944:12:69"}]},"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"845:117:69","nodeType":"YulFunctionDefinition","src":"845:117:69"},{"body":{"nativeSrc":"1057:28:69","nodeType":"YulBlock","src":"1057:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1074:1:69","nodeType":"YulLiteral","src":"1074:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1077:1:69","nodeType":"YulLiteral","src":"1077:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1067:6:69","nodeType":"YulIdentifier","src":"1067:6:69"},"nativeSrc":"1067:12:69","nodeType":"YulFunctionCall","src":"1067:12:69"},"nativeSrc":"1067:12:69","nodeType":"YulExpressionStatement","src":"1067:12:69"}]},"name":"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae","nativeSrc":"968:117:69","nodeType":"YulFunctionDefinition","src":"968:117:69"},{"body":{"nativeSrc":"1139:54:69","nodeType":"YulBlock","src":"1139:54:69","statements":[{"nativeSrc":"1149:38:69","nodeType":"YulAssignment","src":"1149:38:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1167:5:69","nodeType":"YulIdentifier","src":"1167:5:69"},{"kind":"number","nativeSrc":"1174:2:69","nodeType":"YulLiteral","src":"1174:2:69","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"1163:3:69","nodeType":"YulIdentifier","src":"1163:3:69"},"nativeSrc":"1163:14:69","nodeType":"YulFunctionCall","src":"1163:14:69"},{"arguments":[{"kind":"number","nativeSrc":"1183:2:69","nodeType":"YulLiteral","src":"1183:2:69","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"1179:3:69","nodeType":"YulIdentifier","src":"1179:3:69"},"nativeSrc":"1179:7:69","nodeType":"YulFunctionCall","src":"1179:7:69"}],"functionName":{"name":"and","nativeSrc":"1159:3:69","nodeType":"YulIdentifier","src":"1159:3:69"},"nativeSrc":"1159:28:69","nodeType":"YulFunctionCall","src":"1159:28:69"},"variableNames":[{"name":"result","nativeSrc":"1149:6:69","nodeType":"YulIdentifier","src":"1149:6:69"}]}]},"name":"round_up_to_mul_of_32","nativeSrc":"1091:102:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1122:5:69","nodeType":"YulTypedName","src":"1122:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"1132:6:69","nodeType":"YulTypedName","src":"1132:6:69","type":""}],"src":"1091:102:69"},{"body":{"nativeSrc":"1227:152:69","nodeType":"YulBlock","src":"1227:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1244:1:69","nodeType":"YulLiteral","src":"1244:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1247:77:69","nodeType":"YulLiteral","src":"1247:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"1237:6:69","nodeType":"YulIdentifier","src":"1237:6:69"},"nativeSrc":"1237:88:69","nodeType":"YulFunctionCall","src":"1237:88:69"},"nativeSrc":"1237:88:69","nodeType":"YulExpressionStatement","src":"1237:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1341:1:69","nodeType":"YulLiteral","src":"1341:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"1344:4:69","nodeType":"YulLiteral","src":"1344:4:69","type":"","value":"0x41"}],"functionName":{"name":"mstore","nativeSrc":"1334:6:69","nodeType":"YulIdentifier","src":"1334:6:69"},"nativeSrc":"1334:15:69","nodeType":"YulFunctionCall","src":"1334:15:69"},"nativeSrc":"1334:15:69","nodeType":"YulExpressionStatement","src":"1334:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1365:1:69","nodeType":"YulLiteral","src":"1365:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1368:4:69","nodeType":"YulLiteral","src":"1368:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"1358:6:69","nodeType":"YulIdentifier","src":"1358:6:69"},"nativeSrc":"1358:15:69","nodeType":"YulFunctionCall","src":"1358:15:69"},"nativeSrc":"1358:15:69","nodeType":"YulExpressionStatement","src":"1358:15:69"}]},"name":"panic_error_0x41","nativeSrc":"1199:180:69","nodeType":"YulFunctionDefinition","src":"1199:180:69"},{"body":{"nativeSrc":"1428:238:69","nodeType":"YulBlock","src":"1428:238:69","statements":[{"nativeSrc":"1438:58:69","nodeType":"YulVariableDeclaration","src":"1438:58:69","value":{"arguments":[{"name":"memPtr","nativeSrc":"1460:6:69","nodeType":"YulIdentifier","src":"1460:6:69"},{"arguments":[{"name":"size","nativeSrc":"1490:4:69","nodeType":"YulIdentifier","src":"1490:4:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"1468:21:69","nodeType":"YulIdentifier","src":"1468:21:69"},"nativeSrc":"1468:27:69","nodeType":"YulFunctionCall","src":"1468:27:69"}],"functionName":{"name":"add","nativeSrc":"1456:3:69","nodeType":"YulIdentifier","src":"1456:3:69"},"nativeSrc":"1456:40:69","nodeType":"YulFunctionCall","src":"1456:40:69"},"variables":[{"name":"newFreePtr","nativeSrc":"1442:10:69","nodeType":"YulTypedName","src":"1442:10:69","type":""}]},{"body":{"nativeSrc":"1607:22:69","nodeType":"YulBlock","src":"1607:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"1609:16:69","nodeType":"YulIdentifier","src":"1609:16:69"},"nativeSrc":"1609:18:69","nodeType":"YulFunctionCall","src":"1609:18:69"},"nativeSrc":"1609:18:69","nodeType":"YulExpressionStatement","src":"1609:18:69"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nativeSrc":"1550:10:69","nodeType":"YulIdentifier","src":"1550:10:69"},{"kind":"number","nativeSrc":"1562:18:69","nodeType":"YulLiteral","src":"1562:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"1547:2:69","nodeType":"YulIdentifier","src":"1547:2:69"},"nativeSrc":"1547:34:69","nodeType":"YulFunctionCall","src":"1547:34:69"},{"arguments":[{"name":"newFreePtr","nativeSrc":"1586:10:69","nodeType":"YulIdentifier","src":"1586:10:69"},{"name":"memPtr","nativeSrc":"1598:6:69","nodeType":"YulIdentifier","src":"1598:6:69"}],"functionName":{"name":"lt","nativeSrc":"1583:2:69","nodeType":"YulIdentifier","src":"1583:2:69"},"nativeSrc":"1583:22:69","nodeType":"YulFunctionCall","src":"1583:22:69"}],"functionName":{"name":"or","nativeSrc":"1544:2:69","nodeType":"YulIdentifier","src":"1544:2:69"},"nativeSrc":"1544:62:69","nodeType":"YulFunctionCall","src":"1544:62:69"},"nativeSrc":"1541:88:69","nodeType":"YulIf","src":"1541:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1645:2:69","nodeType":"YulLiteral","src":"1645:2:69","type":"","value":"64"},{"name":"newFreePtr","nativeSrc":"1649:10:69","nodeType":"YulIdentifier","src":"1649:10:69"}],"functionName":{"name":"mstore","nativeSrc":"1638:6:69","nodeType":"YulIdentifier","src":"1638:6:69"},"nativeSrc":"1638:22:69","nodeType":"YulFunctionCall","src":"1638:22:69"},"nativeSrc":"1638:22:69","nodeType":"YulExpressionStatement","src":"1638:22:69"}]},"name":"finalize_allocation","nativeSrc":"1385:281:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"1414:6:69","nodeType":"YulTypedName","src":"1414:6:69","type":""},{"name":"size","nativeSrc":"1422:4:69","nodeType":"YulTypedName","src":"1422:4:69","type":""}],"src":"1385:281:69"},{"body":{"nativeSrc":"1713:88:69","nodeType":"YulBlock","src":"1713:88:69","statements":[{"nativeSrc":"1723:30:69","nodeType":"YulAssignment","src":"1723:30:69","value":{"arguments":[],"functionName":{"name":"allocate_unbounded","nativeSrc":"1733:18:69","nodeType":"YulIdentifier","src":"1733:18:69"},"nativeSrc":"1733:20:69","nodeType":"YulFunctionCall","src":"1733:20:69"},"variableNames":[{"name":"memPtr","nativeSrc":"1723:6:69","nodeType":"YulIdentifier","src":"1723:6:69"}]},{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"1782:6:69","nodeType":"YulIdentifier","src":"1782:6:69"},{"name":"size","nativeSrc":"1790:4:69","nodeType":"YulIdentifier","src":"1790:4:69"}],"functionName":{"name":"finalize_allocation","nativeSrc":"1762:19:69","nodeType":"YulIdentifier","src":"1762:19:69"},"nativeSrc":"1762:33:69","nodeType":"YulFunctionCall","src":"1762:33:69"},"nativeSrc":"1762:33:69","nodeType":"YulExpressionStatement","src":"1762:33:69"}]},"name":"allocate_memory","nativeSrc":"1672:129:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nativeSrc":"1697:4:69","nodeType":"YulTypedName","src":"1697:4:69","type":""}],"returnVariables":[{"name":"memPtr","nativeSrc":"1706:6:69","nodeType":"YulTypedName","src":"1706:6:69","type":""}],"src":"1672:129:69"},{"body":{"nativeSrc":"1873:241:69","nodeType":"YulBlock","src":"1873:241:69","statements":[{"body":{"nativeSrc":"1978:22:69","nodeType":"YulBlock","src":"1978:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"1980:16:69","nodeType":"YulIdentifier","src":"1980:16:69"},"nativeSrc":"1980:18:69","nodeType":"YulFunctionCall","src":"1980:18:69"},"nativeSrc":"1980:18:69","nodeType":"YulExpressionStatement","src":"1980:18:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"1950:6:69","nodeType":"YulIdentifier","src":"1950:6:69"},{"kind":"number","nativeSrc":"1958:18:69","nodeType":"YulLiteral","src":"1958:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"1947:2:69","nodeType":"YulIdentifier","src":"1947:2:69"},"nativeSrc":"1947:30:69","nodeType":"YulFunctionCall","src":"1947:30:69"},"nativeSrc":"1944:56:69","nodeType":"YulIf","src":"1944:56:69"},{"nativeSrc":"2010:37:69","nodeType":"YulAssignment","src":"2010:37:69","value":{"arguments":[{"name":"length","nativeSrc":"2040:6:69","nodeType":"YulIdentifier","src":"2040:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"2018:21:69","nodeType":"YulIdentifier","src":"2018:21:69"},"nativeSrc":"2018:29:69","nodeType":"YulFunctionCall","src":"2018:29:69"},"variableNames":[{"name":"size","nativeSrc":"2010:4:69","nodeType":"YulIdentifier","src":"2010:4:69"}]},{"nativeSrc":"2084:23:69","nodeType":"YulAssignment","src":"2084:23:69","value":{"arguments":[{"name":"size","nativeSrc":"2096:4:69","nodeType":"YulIdentifier","src":"2096:4:69"},{"kind":"number","nativeSrc":"2102:4:69","nodeType":"YulLiteral","src":"2102:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2092:3:69","nodeType":"YulIdentifier","src":"2092:3:69"},"nativeSrc":"2092:15:69","nodeType":"YulFunctionCall","src":"2092:15:69"},"variableNames":[{"name":"size","nativeSrc":"2084:4:69","nodeType":"YulIdentifier","src":"2084:4:69"}]}]},"name":"array_allocation_size_t_bytes_memory_ptr","nativeSrc":"1807:307:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nativeSrc":"1857:6:69","nodeType":"YulTypedName","src":"1857:6:69","type":""}],"returnVariables":[{"name":"size","nativeSrc":"1868:4:69","nodeType":"YulTypedName","src":"1868:4:69","type":""}],"src":"1807:307:69"},{"body":{"nativeSrc":"2182:186:69","nodeType":"YulBlock","src":"2182:186:69","statements":[{"nativeSrc":"2193:10:69","nodeType":"YulVariableDeclaration","src":"2193:10:69","value":{"kind":"number","nativeSrc":"2202:1:69","nodeType":"YulLiteral","src":"2202:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"2197:1:69","nodeType":"YulTypedName","src":"2197:1:69","type":""}]},{"body":{"nativeSrc":"2262:63:69","nodeType":"YulBlock","src":"2262:63:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"2287:3:69","nodeType":"YulIdentifier","src":"2287:3:69"},{"name":"i","nativeSrc":"2292:1:69","nodeType":"YulIdentifier","src":"2292:1:69"}],"functionName":{"name":"add","nativeSrc":"2283:3:69","nodeType":"YulIdentifier","src":"2283:3:69"},"nativeSrc":"2283:11:69","nodeType":"YulFunctionCall","src":"2283:11:69"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"2306:3:69","nodeType":"YulIdentifier","src":"2306:3:69"},{"name":"i","nativeSrc":"2311:1:69","nodeType":"YulIdentifier","src":"2311:1:69"}],"functionName":{"name":"add","nativeSrc":"2302:3:69","nodeType":"YulIdentifier","src":"2302:3:69"},"nativeSrc":"2302:11:69","nodeType":"YulFunctionCall","src":"2302:11:69"}],"functionName":{"name":"mload","nativeSrc":"2296:5:69","nodeType":"YulIdentifier","src":"2296:5:69"},"nativeSrc":"2296:18:69","nodeType":"YulFunctionCall","src":"2296:18:69"}],"functionName":{"name":"mstore","nativeSrc":"2276:6:69","nodeType":"YulIdentifier","src":"2276:6:69"},"nativeSrc":"2276:39:69","nodeType":"YulFunctionCall","src":"2276:39:69"},"nativeSrc":"2276:39:69","nodeType":"YulExpressionStatement","src":"2276:39:69"}]},"condition":{"arguments":[{"name":"i","nativeSrc":"2223:1:69","nodeType":"YulIdentifier","src":"2223:1:69"},{"name":"length","nativeSrc":"2226:6:69","nodeType":"YulIdentifier","src":"2226:6:69"}],"functionName":{"name":"lt","nativeSrc":"2220:2:69","nodeType":"YulIdentifier","src":"2220:2:69"},"nativeSrc":"2220:13:69","nodeType":"YulFunctionCall","src":"2220:13:69"},"nativeSrc":"2212:113:69","nodeType":"YulForLoop","post":{"nativeSrc":"2234:19:69","nodeType":"YulBlock","src":"2234:19:69","statements":[{"nativeSrc":"2236:15:69","nodeType":"YulAssignment","src":"2236:15:69","value":{"arguments":[{"name":"i","nativeSrc":"2245:1:69","nodeType":"YulIdentifier","src":"2245:1:69"},{"kind":"number","nativeSrc":"2248:2:69","nodeType":"YulLiteral","src":"2248:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2241:3:69","nodeType":"YulIdentifier","src":"2241:3:69"},"nativeSrc":"2241:10:69","nodeType":"YulFunctionCall","src":"2241:10:69"},"variableNames":[{"name":"i","nativeSrc":"2236:1:69","nodeType":"YulIdentifier","src":"2236:1:69"}]}]},"pre":{"nativeSrc":"2216:3:69","nodeType":"YulBlock","src":"2216:3:69","statements":[]},"src":"2212:113:69"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"2345:3:69","nodeType":"YulIdentifier","src":"2345:3:69"},{"name":"length","nativeSrc":"2350:6:69","nodeType":"YulIdentifier","src":"2350:6:69"}],"functionName":{"name":"add","nativeSrc":"2341:3:69","nodeType":"YulIdentifier","src":"2341:3:69"},"nativeSrc":"2341:16:69","nodeType":"YulFunctionCall","src":"2341:16:69"},{"kind":"number","nativeSrc":"2359:1:69","nodeType":"YulLiteral","src":"2359:1:69","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"2334:6:69","nodeType":"YulIdentifier","src":"2334:6:69"},"nativeSrc":"2334:27:69","nodeType":"YulFunctionCall","src":"2334:27:69"},"nativeSrc":"2334:27:69","nodeType":"YulExpressionStatement","src":"2334:27:69"}]},"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"2120:248:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"2164:3:69","nodeType":"YulTypedName","src":"2164:3:69","type":""},{"name":"dst","nativeSrc":"2169:3:69","nodeType":"YulTypedName","src":"2169:3:69","type":""},{"name":"length","nativeSrc":"2174:6:69","nodeType":"YulTypedName","src":"2174:6:69","type":""}],"src":"2120:248:69"},{"body":{"nativeSrc":"2468:338:69","nodeType":"YulBlock","src":"2468:338:69","statements":[{"nativeSrc":"2478:74:69","nodeType":"YulAssignment","src":"2478:74:69","value":{"arguments":[{"arguments":[{"name":"length","nativeSrc":"2544:6:69","nodeType":"YulIdentifier","src":"2544:6:69"}],"functionName":{"name":"array_allocation_size_t_bytes_memory_ptr","nativeSrc":"2503:40:69","nodeType":"YulIdentifier","src":"2503:40:69"},"nativeSrc":"2503:48:69","nodeType":"YulFunctionCall","src":"2503:48:69"}],"functionName":{"name":"allocate_memory","nativeSrc":"2487:15:69","nodeType":"YulIdentifier","src":"2487:15:69"},"nativeSrc":"2487:65:69","nodeType":"YulFunctionCall","src":"2487:65:69"},"variableNames":[{"name":"array","nativeSrc":"2478:5:69","nodeType":"YulIdentifier","src":"2478:5:69"}]},{"expression":{"arguments":[{"name":"array","nativeSrc":"2568:5:69","nodeType":"YulIdentifier","src":"2568:5:69"},{"name":"length","nativeSrc":"2575:6:69","nodeType":"YulIdentifier","src":"2575:6:69"}],"functionName":{"name":"mstore","nativeSrc":"2561:6:69","nodeType":"YulIdentifier","src":"2561:6:69"},"nativeSrc":"2561:21:69","nodeType":"YulFunctionCall","src":"2561:21:69"},"nativeSrc":"2561:21:69","nodeType":"YulExpressionStatement","src":"2561:21:69"},{"nativeSrc":"2591:27:69","nodeType":"YulVariableDeclaration","src":"2591:27:69","value":{"arguments":[{"name":"array","nativeSrc":"2606:5:69","nodeType":"YulIdentifier","src":"2606:5:69"},{"kind":"number","nativeSrc":"2613:4:69","nodeType":"YulLiteral","src":"2613:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2602:3:69","nodeType":"YulIdentifier","src":"2602:3:69"},"nativeSrc":"2602:16:69","nodeType":"YulFunctionCall","src":"2602:16:69"},"variables":[{"name":"dst","nativeSrc":"2595:3:69","nodeType":"YulTypedName","src":"2595:3:69","type":""}]},{"body":{"nativeSrc":"2656:83:69","nodeType":"YulBlock","src":"2656:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae","nativeSrc":"2658:77:69","nodeType":"YulIdentifier","src":"2658:77:69"},"nativeSrc":"2658:79:69","nodeType":"YulFunctionCall","src":"2658:79:69"},"nativeSrc":"2658:79:69","nodeType":"YulExpressionStatement","src":"2658:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"src","nativeSrc":"2637:3:69","nodeType":"YulIdentifier","src":"2637:3:69"},{"name":"length","nativeSrc":"2642:6:69","nodeType":"YulIdentifier","src":"2642:6:69"}],"functionName":{"name":"add","nativeSrc":"2633:3:69","nodeType":"YulIdentifier","src":"2633:3:69"},"nativeSrc":"2633:16:69","nodeType":"YulFunctionCall","src":"2633:16:69"},{"name":"end","nativeSrc":"2651:3:69","nodeType":"YulIdentifier","src":"2651:3:69"}],"functionName":{"name":"gt","nativeSrc":"2630:2:69","nodeType":"YulIdentifier","src":"2630:2:69"},"nativeSrc":"2630:25:69","nodeType":"YulFunctionCall","src":"2630:25:69"},"nativeSrc":"2627:112:69","nodeType":"YulIf","src":"2627:112:69"},{"expression":{"arguments":[{"name":"src","nativeSrc":"2783:3:69","nodeType":"YulIdentifier","src":"2783:3:69"},{"name":"dst","nativeSrc":"2788:3:69","nodeType":"YulIdentifier","src":"2788:3:69"},{"name":"length","nativeSrc":"2793:6:69","nodeType":"YulIdentifier","src":"2793:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"2748:34:69","nodeType":"YulIdentifier","src":"2748:34:69"},"nativeSrc":"2748:52:69","nodeType":"YulFunctionCall","src":"2748:52:69"},"nativeSrc":"2748:52:69","nodeType":"YulExpressionStatement","src":"2748:52:69"}]},"name":"abi_decode_available_length_t_bytes_memory_ptr_fromMemory","nativeSrc":"2374:432:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"2441:3:69","nodeType":"YulTypedName","src":"2441:3:69","type":""},{"name":"length","nativeSrc":"2446:6:69","nodeType":"YulTypedName","src":"2446:6:69","type":""},{"name":"end","nativeSrc":"2454:3:69","nodeType":"YulTypedName","src":"2454:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"2462:5:69","nodeType":"YulTypedName","src":"2462:5:69","type":""}],"src":"2374:432:69"},{"body":{"nativeSrc":"2897:281:69","nodeType":"YulBlock","src":"2897:281:69","statements":[{"body":{"nativeSrc":"2946:83:69","nodeType":"YulBlock","src":"2946:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"2948:77:69","nodeType":"YulIdentifier","src":"2948:77:69"},"nativeSrc":"2948:79:69","nodeType":"YulFunctionCall","src":"2948:79:69"},"nativeSrc":"2948:79:69","nodeType":"YulExpressionStatement","src":"2948:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"2925:6:69","nodeType":"YulIdentifier","src":"2925:6:69"},{"kind":"number","nativeSrc":"2933:4:69","nodeType":"YulLiteral","src":"2933:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"2921:3:69","nodeType":"YulIdentifier","src":"2921:3:69"},"nativeSrc":"2921:17:69","nodeType":"YulFunctionCall","src":"2921:17:69"},{"name":"end","nativeSrc":"2940:3:69","nodeType":"YulIdentifier","src":"2940:3:69"}],"functionName":{"name":"slt","nativeSrc":"2917:3:69","nodeType":"YulIdentifier","src":"2917:3:69"},"nativeSrc":"2917:27:69","nodeType":"YulFunctionCall","src":"2917:27:69"}],"functionName":{"name":"iszero","nativeSrc":"2910:6:69","nodeType":"YulIdentifier","src":"2910:6:69"},"nativeSrc":"2910:35:69","nodeType":"YulFunctionCall","src":"2910:35:69"},"nativeSrc":"2907:122:69","nodeType":"YulIf","src":"2907:122:69"},{"nativeSrc":"3038:27:69","nodeType":"YulVariableDeclaration","src":"3038:27:69","value":{"arguments":[{"name":"offset","nativeSrc":"3058:6:69","nodeType":"YulIdentifier","src":"3058:6:69"}],"functionName":{"name":"mload","nativeSrc":"3052:5:69","nodeType":"YulIdentifier","src":"3052:5:69"},"nativeSrc":"3052:13:69","nodeType":"YulFunctionCall","src":"3052:13:69"},"variables":[{"name":"length","nativeSrc":"3042:6:69","nodeType":"YulTypedName","src":"3042:6:69","type":""}]},{"nativeSrc":"3074:98:69","nodeType":"YulAssignment","src":"3074:98:69","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"3145:6:69","nodeType":"YulIdentifier","src":"3145:6:69"},{"kind":"number","nativeSrc":"3153:4:69","nodeType":"YulLiteral","src":"3153:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"3141:3:69","nodeType":"YulIdentifier","src":"3141:3:69"},"nativeSrc":"3141:17:69","nodeType":"YulFunctionCall","src":"3141:17:69"},{"name":"length","nativeSrc":"3160:6:69","nodeType":"YulIdentifier","src":"3160:6:69"},{"name":"end","nativeSrc":"3168:3:69","nodeType":"YulIdentifier","src":"3168:3:69"}],"functionName":{"name":"abi_decode_available_length_t_bytes_memory_ptr_fromMemory","nativeSrc":"3083:57:69","nodeType":"YulIdentifier","src":"3083:57:69"},"nativeSrc":"3083:89:69","nodeType":"YulFunctionCall","src":"3083:89:69"},"variableNames":[{"name":"array","nativeSrc":"3074:5:69","nodeType":"YulIdentifier","src":"3074:5:69"}]}]},"name":"abi_decode_t_bytes_memory_ptr_fromMemory","nativeSrc":"2825:353:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"2875:6:69","nodeType":"YulTypedName","src":"2875:6:69","type":""},{"name":"end","nativeSrc":"2883:3:69","nodeType":"YulTypedName","src":"2883:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"2891:5:69","nodeType":"YulTypedName","src":"2891:5:69","type":""}],"src":"2825:353:69"},{"body":{"nativeSrc":"3304:714:69","nodeType":"YulBlock","src":"3304:714:69","statements":[{"body":{"nativeSrc":"3350:83:69","nodeType":"YulBlock","src":"3350:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"3352:77:69","nodeType":"YulIdentifier","src":"3352:77:69"},"nativeSrc":"3352:79:69","nodeType":"YulFunctionCall","src":"3352:79:69"},"nativeSrc":"3352:79:69","nodeType":"YulExpressionStatement","src":"3352:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"3325:7:69","nodeType":"YulIdentifier","src":"3325:7:69"},{"name":"headStart","nativeSrc":"3334:9:69","nodeType":"YulIdentifier","src":"3334:9:69"}],"functionName":{"name":"sub","nativeSrc":"3321:3:69","nodeType":"YulIdentifier","src":"3321:3:69"},"nativeSrc":"3321:23:69","nodeType":"YulFunctionCall","src":"3321:23:69"},{"kind":"number","nativeSrc":"3346:2:69","nodeType":"YulLiteral","src":"3346:2:69","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"3317:3:69","nodeType":"YulIdentifier","src":"3317:3:69"},"nativeSrc":"3317:32:69","nodeType":"YulFunctionCall","src":"3317:32:69"},"nativeSrc":"3314:119:69","nodeType":"YulIf","src":"3314:119:69"},{"nativeSrc":"3443:128:69","nodeType":"YulBlock","src":"3443:128:69","statements":[{"nativeSrc":"3458:15:69","nodeType":"YulVariableDeclaration","src":"3458:15:69","value":{"kind":"number","nativeSrc":"3472:1:69","nodeType":"YulLiteral","src":"3472:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"3462:6:69","nodeType":"YulTypedName","src":"3462:6:69","type":""}]},{"nativeSrc":"3487:74:69","nodeType":"YulAssignment","src":"3487:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3533:9:69","nodeType":"YulIdentifier","src":"3533:9:69"},{"name":"offset","nativeSrc":"3544:6:69","nodeType":"YulIdentifier","src":"3544:6:69"}],"functionName":{"name":"add","nativeSrc":"3529:3:69","nodeType":"YulIdentifier","src":"3529:3:69"},"nativeSrc":"3529:22:69","nodeType":"YulFunctionCall","src":"3529:22:69"},{"name":"dataEnd","nativeSrc":"3553:7:69","nodeType":"YulIdentifier","src":"3553:7:69"}],"functionName":{"name":"abi_decode_t_address_fromMemory","nativeSrc":"3497:31:69","nodeType":"YulIdentifier","src":"3497:31:69"},"nativeSrc":"3497:64:69","nodeType":"YulFunctionCall","src":"3497:64:69"},"variableNames":[{"name":"value0","nativeSrc":"3487:6:69","nodeType":"YulIdentifier","src":"3487:6:69"}]}]},{"nativeSrc":"3581:129:69","nodeType":"YulBlock","src":"3581:129:69","statements":[{"nativeSrc":"3596:16:69","nodeType":"YulVariableDeclaration","src":"3596:16:69","value":{"kind":"number","nativeSrc":"3610:2:69","nodeType":"YulLiteral","src":"3610:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"3600:6:69","nodeType":"YulTypedName","src":"3600:6:69","type":""}]},{"nativeSrc":"3626:74:69","nodeType":"YulAssignment","src":"3626:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3672:9:69","nodeType":"YulIdentifier","src":"3672:9:69"},{"name":"offset","nativeSrc":"3683:6:69","nodeType":"YulIdentifier","src":"3683:6:69"}],"functionName":{"name":"add","nativeSrc":"3668:3:69","nodeType":"YulIdentifier","src":"3668:3:69"},"nativeSrc":"3668:22:69","nodeType":"YulFunctionCall","src":"3668:22:69"},{"name":"dataEnd","nativeSrc":"3692:7:69","nodeType":"YulIdentifier","src":"3692:7:69"}],"functionName":{"name":"abi_decode_t_address_fromMemory","nativeSrc":"3636:31:69","nodeType":"YulIdentifier","src":"3636:31:69"},"nativeSrc":"3636:64:69","nodeType":"YulFunctionCall","src":"3636:64:69"},"variableNames":[{"name":"value1","nativeSrc":"3626:6:69","nodeType":"YulIdentifier","src":"3626:6:69"}]}]},{"nativeSrc":"3720:291:69","nodeType":"YulBlock","src":"3720:291:69","statements":[{"nativeSrc":"3735:39:69","nodeType":"YulVariableDeclaration","src":"3735:39:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3759:9:69","nodeType":"YulIdentifier","src":"3759:9:69"},{"kind":"number","nativeSrc":"3770:2:69","nodeType":"YulLiteral","src":"3770:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"3755:3:69","nodeType":"YulIdentifier","src":"3755:3:69"},"nativeSrc":"3755:18:69","nodeType":"YulFunctionCall","src":"3755:18:69"}],"functionName":{"name":"mload","nativeSrc":"3749:5:69","nodeType":"YulIdentifier","src":"3749:5:69"},"nativeSrc":"3749:25:69","nodeType":"YulFunctionCall","src":"3749:25:69"},"variables":[{"name":"offset","nativeSrc":"3739:6:69","nodeType":"YulTypedName","src":"3739:6:69","type":""}]},{"body":{"nativeSrc":"3821:83:69","nodeType":"YulBlock","src":"3821:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"3823:77:69","nodeType":"YulIdentifier","src":"3823:77:69"},"nativeSrc":"3823:79:69","nodeType":"YulFunctionCall","src":"3823:79:69"},"nativeSrc":"3823:79:69","nodeType":"YulExpressionStatement","src":"3823:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"3793:6:69","nodeType":"YulIdentifier","src":"3793:6:69"},{"kind":"number","nativeSrc":"3801:18:69","nodeType":"YulLiteral","src":"3801:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"3790:2:69","nodeType":"YulIdentifier","src":"3790:2:69"},"nativeSrc":"3790:30:69","nodeType":"YulFunctionCall","src":"3790:30:69"},"nativeSrc":"3787:117:69","nodeType":"YulIf","src":"3787:117:69"},{"nativeSrc":"3918:83:69","nodeType":"YulAssignment","src":"3918:83:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3973:9:69","nodeType":"YulIdentifier","src":"3973:9:69"},{"name":"offset","nativeSrc":"3984:6:69","nodeType":"YulIdentifier","src":"3984:6:69"}],"functionName":{"name":"add","nativeSrc":"3969:3:69","nodeType":"YulIdentifier","src":"3969:3:69"},"nativeSrc":"3969:22:69","nodeType":"YulFunctionCall","src":"3969:22:69"},{"name":"dataEnd","nativeSrc":"3993:7:69","nodeType":"YulIdentifier","src":"3993:7:69"}],"functionName":{"name":"abi_decode_t_bytes_memory_ptr_fromMemory","nativeSrc":"3928:40:69","nodeType":"YulIdentifier","src":"3928:40:69"},"nativeSrc":"3928:73:69","nodeType":"YulFunctionCall","src":"3928:73:69"},"variableNames":[{"name":"value2","nativeSrc":"3918:6:69","nodeType":"YulIdentifier","src":"3918:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory","nativeSrc":"3184:834:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3258:9:69","nodeType":"YulTypedName","src":"3258:9:69","type":""},{"name":"dataEnd","nativeSrc":"3269:7:69","nodeType":"YulTypedName","src":"3269:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"3281:6:69","nodeType":"YulTypedName","src":"3281:6:69","type":""},{"name":"value1","nativeSrc":"3289:6:69","nodeType":"YulTypedName","src":"3289:6:69","type":""},{"name":"value2","nativeSrc":"3297:6:69","nodeType":"YulTypedName","src":"3297:6:69","type":""}],"src":"3184:834:69"},{"body":{"nativeSrc":"4069:32:69","nodeType":"YulBlock","src":"4069:32:69","statements":[{"nativeSrc":"4079:16:69","nodeType":"YulAssignment","src":"4079:16:69","value":{"name":"value","nativeSrc":"4090:5:69","nodeType":"YulIdentifier","src":"4090:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"4079:7:69","nodeType":"YulIdentifier","src":"4079:7:69"}]}]},"name":"cleanup_t_uint256","nativeSrc":"4024:77:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4051:5:69","nodeType":"YulTypedName","src":"4051:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"4061:7:69","nodeType":"YulTypedName","src":"4061:7:69","type":""}],"src":"4024:77:69"},{"body":{"nativeSrc":"4135:152:69","nodeType":"YulBlock","src":"4135:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4152:1:69","nodeType":"YulLiteral","src":"4152:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"4155:77:69","nodeType":"YulLiteral","src":"4155:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"4145:6:69","nodeType":"YulIdentifier","src":"4145:6:69"},"nativeSrc":"4145:88:69","nodeType":"YulFunctionCall","src":"4145:88:69"},"nativeSrc":"4145:88:69","nodeType":"YulExpressionStatement","src":"4145:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4249:1:69","nodeType":"YulLiteral","src":"4249:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"4252:4:69","nodeType":"YulLiteral","src":"4252:4:69","type":"","value":"0x11"}],"functionName":{"name":"mstore","nativeSrc":"4242:6:69","nodeType":"YulIdentifier","src":"4242:6:69"},"nativeSrc":"4242:15:69","nodeType":"YulFunctionCall","src":"4242:15:69"},"nativeSrc":"4242:15:69","nodeType":"YulExpressionStatement","src":"4242:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4273:1:69","nodeType":"YulLiteral","src":"4273:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"4276:4:69","nodeType":"YulLiteral","src":"4276:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"4266:6:69","nodeType":"YulIdentifier","src":"4266:6:69"},"nativeSrc":"4266:15:69","nodeType":"YulFunctionCall","src":"4266:15:69"},"nativeSrc":"4266:15:69","nodeType":"YulExpressionStatement","src":"4266:15:69"}]},"name":"panic_error_0x11","nativeSrc":"4107:180:69","nodeType":"YulFunctionDefinition","src":"4107:180:69"},{"body":{"nativeSrc":"4338:149:69","nodeType":"YulBlock","src":"4338:149:69","statements":[{"nativeSrc":"4348:25:69","nodeType":"YulAssignment","src":"4348:25:69","value":{"arguments":[{"name":"x","nativeSrc":"4371:1:69","nodeType":"YulIdentifier","src":"4371:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"4353:17:69","nodeType":"YulIdentifier","src":"4353:17:69"},"nativeSrc":"4353:20:69","nodeType":"YulFunctionCall","src":"4353:20:69"},"variableNames":[{"name":"x","nativeSrc":"4348:1:69","nodeType":"YulIdentifier","src":"4348:1:69"}]},{"nativeSrc":"4382:25:69","nodeType":"YulAssignment","src":"4382:25:69","value":{"arguments":[{"name":"y","nativeSrc":"4405:1:69","nodeType":"YulIdentifier","src":"4405:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"4387:17:69","nodeType":"YulIdentifier","src":"4387:17:69"},"nativeSrc":"4387:20:69","nodeType":"YulFunctionCall","src":"4387:20:69"},"variableNames":[{"name":"y","nativeSrc":"4382:1:69","nodeType":"YulIdentifier","src":"4382:1:69"}]},{"nativeSrc":"4416:17:69","nodeType":"YulAssignment","src":"4416:17:69","value":{"arguments":[{"name":"x","nativeSrc":"4428:1:69","nodeType":"YulIdentifier","src":"4428:1:69"},{"name":"y","nativeSrc":"4431:1:69","nodeType":"YulIdentifier","src":"4431:1:69"}],"functionName":{"name":"sub","nativeSrc":"4424:3:69","nodeType":"YulIdentifier","src":"4424:3:69"},"nativeSrc":"4424:9:69","nodeType":"YulFunctionCall","src":"4424:9:69"},"variableNames":[{"name":"diff","nativeSrc":"4416:4:69","nodeType":"YulIdentifier","src":"4416:4:69"}]},{"body":{"nativeSrc":"4458:22:69","nodeType":"YulBlock","src":"4458:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"4460:16:69","nodeType":"YulIdentifier","src":"4460:16:69"},"nativeSrc":"4460:18:69","nodeType":"YulFunctionCall","src":"4460:18:69"},"nativeSrc":"4460:18:69","nodeType":"YulExpressionStatement","src":"4460:18:69"}]},"condition":{"arguments":[{"name":"diff","nativeSrc":"4449:4:69","nodeType":"YulIdentifier","src":"4449:4:69"},{"name":"x","nativeSrc":"4455:1:69","nodeType":"YulIdentifier","src":"4455:1:69"}],"functionName":{"name":"gt","nativeSrc":"4446:2:69","nodeType":"YulIdentifier","src":"4446:2:69"},"nativeSrc":"4446:11:69","nodeType":"YulFunctionCall","src":"4446:11:69"},"nativeSrc":"4443:37:69","nodeType":"YulIf","src":"4443:37:69"}]},"name":"checked_sub_t_uint256","nativeSrc":"4293:194:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"4324:1:69","nodeType":"YulTypedName","src":"4324:1:69","type":""},{"name":"y","nativeSrc":"4327:1:69","nodeType":"YulTypedName","src":"4327:1:69","type":""}],"returnVariables":[{"name":"diff","nativeSrc":"4333:4:69","nodeType":"YulTypedName","src":"4333:4:69","type":""}],"src":"4293:194:69"},{"body":{"nativeSrc":"4521:152:69","nodeType":"YulBlock","src":"4521:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4538:1:69","nodeType":"YulLiteral","src":"4538:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"4541:77:69","nodeType":"YulLiteral","src":"4541:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"4531:6:69","nodeType":"YulIdentifier","src":"4531:6:69"},"nativeSrc":"4531:88:69","nodeType":"YulFunctionCall","src":"4531:88:69"},"nativeSrc":"4531:88:69","nodeType":"YulExpressionStatement","src":"4531:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4635:1:69","nodeType":"YulLiteral","src":"4635:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"4638:4:69","nodeType":"YulLiteral","src":"4638:4:69","type":"","value":"0x01"}],"functionName":{"name":"mstore","nativeSrc":"4628:6:69","nodeType":"YulIdentifier","src":"4628:6:69"},"nativeSrc":"4628:15:69","nodeType":"YulFunctionCall","src":"4628:15:69"},"nativeSrc":"4628:15:69","nodeType":"YulExpressionStatement","src":"4628:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4659:1:69","nodeType":"YulLiteral","src":"4659:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"4662:4:69","nodeType":"YulLiteral","src":"4662:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"4652:6:69","nodeType":"YulIdentifier","src":"4652:6:69"},"nativeSrc":"4652:15:69","nodeType":"YulFunctionCall","src":"4652:15:69"},"nativeSrc":"4652:15:69","nodeType":"YulExpressionStatement","src":"4652:15:69"}]},"name":"panic_error_0x01","nativeSrc":"4493:180:69","nodeType":"YulFunctionDefinition","src":"4493:180:69"},{"body":{"nativeSrc":"4744:53:69","nodeType":"YulBlock","src":"4744:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"4761:3:69","nodeType":"YulIdentifier","src":"4761:3:69"},{"arguments":[{"name":"value","nativeSrc":"4784:5:69","nodeType":"YulIdentifier","src":"4784:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"4766:17:69","nodeType":"YulIdentifier","src":"4766:17:69"},"nativeSrc":"4766:24:69","nodeType":"YulFunctionCall","src":"4766:24:69"}],"functionName":{"name":"mstore","nativeSrc":"4754:6:69","nodeType":"YulIdentifier","src":"4754:6:69"},"nativeSrc":"4754:37:69","nodeType":"YulFunctionCall","src":"4754:37:69"},"nativeSrc":"4754:37:69","nodeType":"YulExpressionStatement","src":"4754:37:69"}]},"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"4679:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4732:5:69","nodeType":"YulTypedName","src":"4732:5:69","type":""},{"name":"pos","nativeSrc":"4739:3:69","nodeType":"YulTypedName","src":"4739:3:69","type":""}],"src":"4679:118:69"},{"body":{"nativeSrc":"4929:206:69","nodeType":"YulBlock","src":"4929:206:69","statements":[{"nativeSrc":"4939:26:69","nodeType":"YulAssignment","src":"4939:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"4951:9:69","nodeType":"YulIdentifier","src":"4951:9:69"},{"kind":"number","nativeSrc":"4962:2:69","nodeType":"YulLiteral","src":"4962:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"4947:3:69","nodeType":"YulIdentifier","src":"4947:3:69"},"nativeSrc":"4947:18:69","nodeType":"YulFunctionCall","src":"4947:18:69"},"variableNames":[{"name":"tail","nativeSrc":"4939:4:69","nodeType":"YulIdentifier","src":"4939:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"5019:6:69","nodeType":"YulIdentifier","src":"5019:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"5032:9:69","nodeType":"YulIdentifier","src":"5032:9:69"},{"kind":"number","nativeSrc":"5043:1:69","nodeType":"YulLiteral","src":"5043:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5028:3:69","nodeType":"YulIdentifier","src":"5028:3:69"},"nativeSrc":"5028:17:69","nodeType":"YulFunctionCall","src":"5028:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"4975:43:69","nodeType":"YulIdentifier","src":"4975:43:69"},"nativeSrc":"4975:71:69","nodeType":"YulFunctionCall","src":"4975:71:69"},"nativeSrc":"4975:71:69","nodeType":"YulExpressionStatement","src":"4975:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"5100:6:69","nodeType":"YulIdentifier","src":"5100:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"5113:9:69","nodeType":"YulIdentifier","src":"5113:9:69"},{"kind":"number","nativeSrc":"5124:2:69","nodeType":"YulLiteral","src":"5124:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5109:3:69","nodeType":"YulIdentifier","src":"5109:3:69"},"nativeSrc":"5109:18:69","nodeType":"YulFunctionCall","src":"5109:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"5056:43:69","nodeType":"YulIdentifier","src":"5056:43:69"},"nativeSrc":"5056:72:69","nodeType":"YulFunctionCall","src":"5056:72:69"},"nativeSrc":"5056:72:69","nodeType":"YulExpressionStatement","src":"5056:72:69"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nativeSrc":"4803:332:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4893:9:69","nodeType":"YulTypedName","src":"4893:9:69","type":""},{"name":"value1","nativeSrc":"4905:6:69","nodeType":"YulTypedName","src":"4905:6:69","type":""},{"name":"value0","nativeSrc":"4913:6:69","nodeType":"YulTypedName","src":"4913:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4924:4:69","nodeType":"YulTypedName","src":"4924:4:69","type":""}],"src":"4803:332:69"},{"body":{"nativeSrc":"5237:73:69","nodeType":"YulBlock","src":"5237:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"5254:3:69","nodeType":"YulIdentifier","src":"5254:3:69"},{"name":"length","nativeSrc":"5259:6:69","nodeType":"YulIdentifier","src":"5259:6:69"}],"functionName":{"name":"mstore","nativeSrc":"5247:6:69","nodeType":"YulIdentifier","src":"5247:6:69"},"nativeSrc":"5247:19:69","nodeType":"YulFunctionCall","src":"5247:19:69"},"nativeSrc":"5247:19:69","nodeType":"YulExpressionStatement","src":"5247:19:69"},{"nativeSrc":"5275:29:69","nodeType":"YulAssignment","src":"5275:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"5294:3:69","nodeType":"YulIdentifier","src":"5294:3:69"},{"kind":"number","nativeSrc":"5299:4:69","nodeType":"YulLiteral","src":"5299:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5290:3:69","nodeType":"YulIdentifier","src":"5290:3:69"},"nativeSrc":"5290:14:69","nodeType":"YulFunctionCall","src":"5290:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"5275:11:69","nodeType":"YulIdentifier","src":"5275:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"5141:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"5209:3:69","nodeType":"YulTypedName","src":"5209:3:69","type":""},{"name":"length","nativeSrc":"5214:6:69","nodeType":"YulTypedName","src":"5214:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"5225:11:69","nodeType":"YulTypedName","src":"5225:11:69","type":""}],"src":"5141:169:69"},{"body":{"nativeSrc":"5422:119:69","nodeType":"YulBlock","src":"5422:119:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"5444:6:69","nodeType":"YulIdentifier","src":"5444:6:69"},{"kind":"number","nativeSrc":"5452:1:69","nodeType":"YulLiteral","src":"5452:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5440:3:69","nodeType":"YulIdentifier","src":"5440:3:69"},"nativeSrc":"5440:14:69","nodeType":"YulFunctionCall","src":"5440:14:69"},{"hexValue":"455243313936373a206e65772061646d696e20697320746865207a65726f2061","kind":"string","nativeSrc":"5456:34:69","nodeType":"YulLiteral","src":"5456:34:69","type":"","value":"ERC1967: new admin is the zero a"}],"functionName":{"name":"mstore","nativeSrc":"5433:6:69","nodeType":"YulIdentifier","src":"5433:6:69"},"nativeSrc":"5433:58:69","nodeType":"YulFunctionCall","src":"5433:58:69"},"nativeSrc":"5433:58:69","nodeType":"YulExpressionStatement","src":"5433:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"5512:6:69","nodeType":"YulIdentifier","src":"5512:6:69"},{"kind":"number","nativeSrc":"5520:2:69","nodeType":"YulLiteral","src":"5520:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5508:3:69","nodeType":"YulIdentifier","src":"5508:3:69"},"nativeSrc":"5508:15:69","nodeType":"YulFunctionCall","src":"5508:15:69"},{"hexValue":"646472657373","kind":"string","nativeSrc":"5525:8:69","nodeType":"YulLiteral","src":"5525:8:69","type":"","value":"ddress"}],"functionName":{"name":"mstore","nativeSrc":"5501:6:69","nodeType":"YulIdentifier","src":"5501:6:69"},"nativeSrc":"5501:33:69","nodeType":"YulFunctionCall","src":"5501:33:69"},"nativeSrc":"5501:33:69","nodeType":"YulExpressionStatement","src":"5501:33:69"}]},"name":"store_literal_in_memory_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5","nativeSrc":"5316:225:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"5414:6:69","nodeType":"YulTypedName","src":"5414:6:69","type":""}],"src":"5316:225:69"},{"body":{"nativeSrc":"5693:220:69","nodeType":"YulBlock","src":"5693:220:69","statements":[{"nativeSrc":"5703:74:69","nodeType":"YulAssignment","src":"5703:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"5769:3:69","nodeType":"YulIdentifier","src":"5769:3:69"},{"kind":"number","nativeSrc":"5774:2:69","nodeType":"YulLiteral","src":"5774:2:69","type":"","value":"38"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"5710:58:69","nodeType":"YulIdentifier","src":"5710:58:69"},"nativeSrc":"5710:67:69","nodeType":"YulFunctionCall","src":"5710:67:69"},"variableNames":[{"name":"pos","nativeSrc":"5703:3:69","nodeType":"YulIdentifier","src":"5703:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"5875:3:69","nodeType":"YulIdentifier","src":"5875:3:69"}],"functionName":{"name":"store_literal_in_memory_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5","nativeSrc":"5786:88:69","nodeType":"YulIdentifier","src":"5786:88:69"},"nativeSrc":"5786:93:69","nodeType":"YulFunctionCall","src":"5786:93:69"},"nativeSrc":"5786:93:69","nodeType":"YulExpressionStatement","src":"5786:93:69"},{"nativeSrc":"5888:19:69","nodeType":"YulAssignment","src":"5888:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"5899:3:69","nodeType":"YulIdentifier","src":"5899:3:69"},{"kind":"number","nativeSrc":"5904:2:69","nodeType":"YulLiteral","src":"5904:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"5895:3:69","nodeType":"YulIdentifier","src":"5895:3:69"},"nativeSrc":"5895:12:69","nodeType":"YulFunctionCall","src":"5895:12:69"},"variableNames":[{"name":"end","nativeSrc":"5888:3:69","nodeType":"YulIdentifier","src":"5888:3:69"}]}]},"name":"abi_encode_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5_to_t_string_memory_ptr_fromStack","nativeSrc":"5547:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"5681:3:69","nodeType":"YulTypedName","src":"5681:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"5689:3:69","nodeType":"YulTypedName","src":"5689:3:69","type":""}],"src":"5547:366:69"},{"body":{"nativeSrc":"6090:248:69","nodeType":"YulBlock","src":"6090:248:69","statements":[{"nativeSrc":"6100:26:69","nodeType":"YulAssignment","src":"6100:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"6112:9:69","nodeType":"YulIdentifier","src":"6112:9:69"},{"kind":"number","nativeSrc":"6123:2:69","nodeType":"YulLiteral","src":"6123:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"6108:3:69","nodeType":"YulIdentifier","src":"6108:3:69"},"nativeSrc":"6108:18:69","nodeType":"YulFunctionCall","src":"6108:18:69"},"variableNames":[{"name":"tail","nativeSrc":"6100:4:69","nodeType":"YulIdentifier","src":"6100:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6147:9:69","nodeType":"YulIdentifier","src":"6147:9:69"},{"kind":"number","nativeSrc":"6158:1:69","nodeType":"YulLiteral","src":"6158:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"6143:3:69","nodeType":"YulIdentifier","src":"6143:3:69"},"nativeSrc":"6143:17:69","nodeType":"YulFunctionCall","src":"6143:17:69"},{"arguments":[{"name":"tail","nativeSrc":"6166:4:69","nodeType":"YulIdentifier","src":"6166:4:69"},{"name":"headStart","nativeSrc":"6172:9:69","nodeType":"YulIdentifier","src":"6172:9:69"}],"functionName":{"name":"sub","nativeSrc":"6162:3:69","nodeType":"YulIdentifier","src":"6162:3:69"},"nativeSrc":"6162:20:69","nodeType":"YulFunctionCall","src":"6162:20:69"}],"functionName":{"name":"mstore","nativeSrc":"6136:6:69","nodeType":"YulIdentifier","src":"6136:6:69"},"nativeSrc":"6136:47:69","nodeType":"YulFunctionCall","src":"6136:47:69"},"nativeSrc":"6136:47:69","nodeType":"YulExpressionStatement","src":"6136:47:69"},{"nativeSrc":"6192:139:69","nodeType":"YulAssignment","src":"6192:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"6326:4:69","nodeType":"YulIdentifier","src":"6326:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5_to_t_string_memory_ptr_fromStack","nativeSrc":"6200:124:69","nodeType":"YulIdentifier","src":"6200:124:69"},"nativeSrc":"6200:131:69","nodeType":"YulFunctionCall","src":"6200:131:69"},"variableNames":[{"name":"tail","nativeSrc":"6192:4:69","nodeType":"YulIdentifier","src":"6192:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"5919:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6070:9:69","nodeType":"YulTypedName","src":"6070:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"6085:4:69","nodeType":"YulTypedName","src":"6085:4:69","type":""}],"src":"5919:419:69"},{"body":{"nativeSrc":"6450:126:69","nodeType":"YulBlock","src":"6450:126:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"6472:6:69","nodeType":"YulIdentifier","src":"6472:6:69"},{"kind":"number","nativeSrc":"6480:1:69","nodeType":"YulLiteral","src":"6480:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"6468:3:69","nodeType":"YulIdentifier","src":"6468:3:69"},"nativeSrc":"6468:14:69","nodeType":"YulFunctionCall","src":"6468:14:69"},{"hexValue":"455243313936373a206e657720696d706c656d656e746174696f6e206973206e","kind":"string","nativeSrc":"6484:34:69","nodeType":"YulLiteral","src":"6484:34:69","type":"","value":"ERC1967: new implementation is n"}],"functionName":{"name":"mstore","nativeSrc":"6461:6:69","nodeType":"YulIdentifier","src":"6461:6:69"},"nativeSrc":"6461:58:69","nodeType":"YulFunctionCall","src":"6461:58:69"},"nativeSrc":"6461:58:69","nodeType":"YulExpressionStatement","src":"6461:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"6540:6:69","nodeType":"YulIdentifier","src":"6540:6:69"},{"kind":"number","nativeSrc":"6548:2:69","nodeType":"YulLiteral","src":"6548:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"6536:3:69","nodeType":"YulIdentifier","src":"6536:3:69"},"nativeSrc":"6536:15:69","nodeType":"YulFunctionCall","src":"6536:15:69"},{"hexValue":"6f74206120636f6e7472616374","kind":"string","nativeSrc":"6553:15:69","nodeType":"YulLiteral","src":"6553:15:69","type":"","value":"ot a contract"}],"functionName":{"name":"mstore","nativeSrc":"6529:6:69","nodeType":"YulIdentifier","src":"6529:6:69"},"nativeSrc":"6529:40:69","nodeType":"YulFunctionCall","src":"6529:40:69"},"nativeSrc":"6529:40:69","nodeType":"YulExpressionStatement","src":"6529:40:69"}]},"name":"store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65","nativeSrc":"6344:232:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"6442:6:69","nodeType":"YulTypedName","src":"6442:6:69","type":""}],"src":"6344:232:69"},{"body":{"nativeSrc":"6728:220:69","nodeType":"YulBlock","src":"6728:220:69","statements":[{"nativeSrc":"6738:74:69","nodeType":"YulAssignment","src":"6738:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"6804:3:69","nodeType":"YulIdentifier","src":"6804:3:69"},{"kind":"number","nativeSrc":"6809:2:69","nodeType":"YulLiteral","src":"6809:2:69","type":"","value":"45"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"6745:58:69","nodeType":"YulIdentifier","src":"6745:58:69"},"nativeSrc":"6745:67:69","nodeType":"YulFunctionCall","src":"6745:67:69"},"variableNames":[{"name":"pos","nativeSrc":"6738:3:69","nodeType":"YulIdentifier","src":"6738:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"6910:3:69","nodeType":"YulIdentifier","src":"6910:3:69"}],"functionName":{"name":"store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65","nativeSrc":"6821:88:69","nodeType":"YulIdentifier","src":"6821:88:69"},"nativeSrc":"6821:93:69","nodeType":"YulFunctionCall","src":"6821:93:69"},"nativeSrc":"6821:93:69","nodeType":"YulExpressionStatement","src":"6821:93:69"},{"nativeSrc":"6923:19:69","nodeType":"YulAssignment","src":"6923:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"6934:3:69","nodeType":"YulIdentifier","src":"6934:3:69"},{"kind":"number","nativeSrc":"6939:2:69","nodeType":"YulLiteral","src":"6939:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"6930:3:69","nodeType":"YulIdentifier","src":"6930:3:69"},"nativeSrc":"6930:12:69","nodeType":"YulFunctionCall","src":"6930:12:69"},"variableNames":[{"name":"end","nativeSrc":"6923:3:69","nodeType":"YulIdentifier","src":"6923:3:69"}]}]},"name":"abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack","nativeSrc":"6582:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"6716:3:69","nodeType":"YulTypedName","src":"6716:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"6724:3:69","nodeType":"YulTypedName","src":"6724:3:69","type":""}],"src":"6582:366:69"},{"body":{"nativeSrc":"7125:248:69","nodeType":"YulBlock","src":"7125:248:69","statements":[{"nativeSrc":"7135:26:69","nodeType":"YulAssignment","src":"7135:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"7147:9:69","nodeType":"YulIdentifier","src":"7147:9:69"},{"kind":"number","nativeSrc":"7158:2:69","nodeType":"YulLiteral","src":"7158:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7143:3:69","nodeType":"YulIdentifier","src":"7143:3:69"},"nativeSrc":"7143:18:69","nodeType":"YulFunctionCall","src":"7143:18:69"},"variableNames":[{"name":"tail","nativeSrc":"7135:4:69","nodeType":"YulIdentifier","src":"7135:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7182:9:69","nodeType":"YulIdentifier","src":"7182:9:69"},{"kind":"number","nativeSrc":"7193:1:69","nodeType":"YulLiteral","src":"7193:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"7178:3:69","nodeType":"YulIdentifier","src":"7178:3:69"},"nativeSrc":"7178:17:69","nodeType":"YulFunctionCall","src":"7178:17:69"},{"arguments":[{"name":"tail","nativeSrc":"7201:4:69","nodeType":"YulIdentifier","src":"7201:4:69"},{"name":"headStart","nativeSrc":"7207:9:69","nodeType":"YulIdentifier","src":"7207:9:69"}],"functionName":{"name":"sub","nativeSrc":"7197:3:69","nodeType":"YulIdentifier","src":"7197:3:69"},"nativeSrc":"7197:20:69","nodeType":"YulFunctionCall","src":"7197:20:69"}],"functionName":{"name":"mstore","nativeSrc":"7171:6:69","nodeType":"YulIdentifier","src":"7171:6:69"},"nativeSrc":"7171:47:69","nodeType":"YulFunctionCall","src":"7171:47:69"},"nativeSrc":"7171:47:69","nodeType":"YulExpressionStatement","src":"7171:47:69"},{"nativeSrc":"7227:139:69","nodeType":"YulAssignment","src":"7227:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"7361:4:69","nodeType":"YulIdentifier","src":"7361:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack","nativeSrc":"7235:124:69","nodeType":"YulIdentifier","src":"7235:124:69"},"nativeSrc":"7235:131:69","nodeType":"YulFunctionCall","src":"7235:131:69"},"variableNames":[{"name":"tail","nativeSrc":"7227:4:69","nodeType":"YulIdentifier","src":"7227:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"6954:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"7105:9:69","nodeType":"YulTypedName","src":"7105:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"7120:4:69","nodeType":"YulTypedName","src":"7120:4:69","type":""}],"src":"6954:419:69"},{"body":{"nativeSrc":"7485:119:69","nodeType":"YulBlock","src":"7485:119:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"7507:6:69","nodeType":"YulIdentifier","src":"7507:6:69"},{"kind":"number","nativeSrc":"7515:1:69","nodeType":"YulLiteral","src":"7515:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"7503:3:69","nodeType":"YulIdentifier","src":"7503:3:69"},"nativeSrc":"7503:14:69","nodeType":"YulFunctionCall","src":"7503:14:69"},{"hexValue":"416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f","kind":"string","nativeSrc":"7519:34:69","nodeType":"YulLiteral","src":"7519:34:69","type":"","value":"Address: delegate call to non-co"}],"functionName":{"name":"mstore","nativeSrc":"7496:6:69","nodeType":"YulIdentifier","src":"7496:6:69"},"nativeSrc":"7496:58:69","nodeType":"YulFunctionCall","src":"7496:58:69"},"nativeSrc":"7496:58:69","nodeType":"YulExpressionStatement","src":"7496:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"7575:6:69","nodeType":"YulIdentifier","src":"7575:6:69"},{"kind":"number","nativeSrc":"7583:2:69","nodeType":"YulLiteral","src":"7583:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7571:3:69","nodeType":"YulIdentifier","src":"7571:3:69"},"nativeSrc":"7571:15:69","nodeType":"YulFunctionCall","src":"7571:15:69"},{"hexValue":"6e7472616374","kind":"string","nativeSrc":"7588:8:69","nodeType":"YulLiteral","src":"7588:8:69","type":"","value":"ntract"}],"functionName":{"name":"mstore","nativeSrc":"7564:6:69","nodeType":"YulIdentifier","src":"7564:6:69"},"nativeSrc":"7564:33:69","nodeType":"YulFunctionCall","src":"7564:33:69"},"nativeSrc":"7564:33:69","nodeType":"YulExpressionStatement","src":"7564:33:69"}]},"name":"store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520","nativeSrc":"7379:225:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"7477:6:69","nodeType":"YulTypedName","src":"7477:6:69","type":""}],"src":"7379:225:69"},{"body":{"nativeSrc":"7756:220:69","nodeType":"YulBlock","src":"7756:220:69","statements":[{"nativeSrc":"7766:74:69","nodeType":"YulAssignment","src":"7766:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"7832:3:69","nodeType":"YulIdentifier","src":"7832:3:69"},{"kind":"number","nativeSrc":"7837:2:69","nodeType":"YulLiteral","src":"7837:2:69","type":"","value":"38"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"7773:58:69","nodeType":"YulIdentifier","src":"7773:58:69"},"nativeSrc":"7773:67:69","nodeType":"YulFunctionCall","src":"7773:67:69"},"variableNames":[{"name":"pos","nativeSrc":"7766:3:69","nodeType":"YulIdentifier","src":"7766:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"7938:3:69","nodeType":"YulIdentifier","src":"7938:3:69"}],"functionName":{"name":"store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520","nativeSrc":"7849:88:69","nodeType":"YulIdentifier","src":"7849:88:69"},"nativeSrc":"7849:93:69","nodeType":"YulFunctionCall","src":"7849:93:69"},"nativeSrc":"7849:93:69","nodeType":"YulExpressionStatement","src":"7849:93:69"},{"nativeSrc":"7951:19:69","nodeType":"YulAssignment","src":"7951:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"7962:3:69","nodeType":"YulIdentifier","src":"7962:3:69"},{"kind":"number","nativeSrc":"7967:2:69","nodeType":"YulLiteral","src":"7967:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"7958:3:69","nodeType":"YulIdentifier","src":"7958:3:69"},"nativeSrc":"7958:12:69","nodeType":"YulFunctionCall","src":"7958:12:69"},"variableNames":[{"name":"end","nativeSrc":"7951:3:69","nodeType":"YulIdentifier","src":"7951:3:69"}]}]},"name":"abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack","nativeSrc":"7610:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"7744:3:69","nodeType":"YulTypedName","src":"7744:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"7752:3:69","nodeType":"YulTypedName","src":"7752:3:69","type":""}],"src":"7610:366:69"},{"body":{"nativeSrc":"8153:248:69","nodeType":"YulBlock","src":"8153:248:69","statements":[{"nativeSrc":"8163:26:69","nodeType":"YulAssignment","src":"8163:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"8175:9:69","nodeType":"YulIdentifier","src":"8175:9:69"},{"kind":"number","nativeSrc":"8186:2:69","nodeType":"YulLiteral","src":"8186:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8171:3:69","nodeType":"YulIdentifier","src":"8171:3:69"},"nativeSrc":"8171:18:69","nodeType":"YulFunctionCall","src":"8171:18:69"},"variableNames":[{"name":"tail","nativeSrc":"8163:4:69","nodeType":"YulIdentifier","src":"8163:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8210:9:69","nodeType":"YulIdentifier","src":"8210:9:69"},{"kind":"number","nativeSrc":"8221:1:69","nodeType":"YulLiteral","src":"8221:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"8206:3:69","nodeType":"YulIdentifier","src":"8206:3:69"},"nativeSrc":"8206:17:69","nodeType":"YulFunctionCall","src":"8206:17:69"},{"arguments":[{"name":"tail","nativeSrc":"8229:4:69","nodeType":"YulIdentifier","src":"8229:4:69"},{"name":"headStart","nativeSrc":"8235:9:69","nodeType":"YulIdentifier","src":"8235:9:69"}],"functionName":{"name":"sub","nativeSrc":"8225:3:69","nodeType":"YulIdentifier","src":"8225:3:69"},"nativeSrc":"8225:20:69","nodeType":"YulFunctionCall","src":"8225:20:69"}],"functionName":{"name":"mstore","nativeSrc":"8199:6:69","nodeType":"YulIdentifier","src":"8199:6:69"},"nativeSrc":"8199:47:69","nodeType":"YulFunctionCall","src":"8199:47:69"},"nativeSrc":"8199:47:69","nodeType":"YulExpressionStatement","src":"8199:47:69"},{"nativeSrc":"8255:139:69","nodeType":"YulAssignment","src":"8255:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"8389:4:69","nodeType":"YulIdentifier","src":"8389:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack","nativeSrc":"8263:124:69","nodeType":"YulIdentifier","src":"8263:124:69"},"nativeSrc":"8263:131:69","nodeType":"YulFunctionCall","src":"8263:131:69"},"variableNames":[{"name":"tail","nativeSrc":"8255:4:69","nodeType":"YulIdentifier","src":"8255:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"7982:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8133:9:69","nodeType":"YulTypedName","src":"8133:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"8148:4:69","nodeType":"YulTypedName","src":"8148:4:69","type":""}],"src":"7982:419:69"},{"body":{"nativeSrc":"8465:40:69","nodeType":"YulBlock","src":"8465:40:69","statements":[{"nativeSrc":"8476:22:69","nodeType":"YulAssignment","src":"8476:22:69","value":{"arguments":[{"name":"value","nativeSrc":"8492:5:69","nodeType":"YulIdentifier","src":"8492:5:69"}],"functionName":{"name":"mload","nativeSrc":"8486:5:69","nodeType":"YulIdentifier","src":"8486:5:69"},"nativeSrc":"8486:12:69","nodeType":"YulFunctionCall","src":"8486:12:69"},"variableNames":[{"name":"length","nativeSrc":"8476:6:69","nodeType":"YulIdentifier","src":"8476:6:69"}]}]},"name":"array_length_t_bytes_memory_ptr","nativeSrc":"8407:98:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"8448:5:69","nodeType":"YulTypedName","src":"8448:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"8458:6:69","nodeType":"YulTypedName","src":"8458:6:69","type":""}],"src":"8407:98:69"},{"body":{"nativeSrc":"8624:34:69","nodeType":"YulBlock","src":"8624:34:69","statements":[{"nativeSrc":"8634:18:69","nodeType":"YulAssignment","src":"8634:18:69","value":{"name":"pos","nativeSrc":"8649:3:69","nodeType":"YulIdentifier","src":"8649:3:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"8634:11:69","nodeType":"YulIdentifier","src":"8634:11:69"}]}]},"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"8511:147:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"8596:3:69","nodeType":"YulTypedName","src":"8596:3:69","type":""},{"name":"length","nativeSrc":"8601:6:69","nodeType":"YulTypedName","src":"8601:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"8612:11:69","nodeType":"YulTypedName","src":"8612:11:69","type":""}],"src":"8511:147:69"},{"body":{"nativeSrc":"8772:278:69","nodeType":"YulBlock","src":"8772:278:69","statements":[{"nativeSrc":"8782:52:69","nodeType":"YulVariableDeclaration","src":"8782:52:69","value":{"arguments":[{"name":"value","nativeSrc":"8828:5:69","nodeType":"YulIdentifier","src":"8828:5:69"}],"functionName":{"name":"array_length_t_bytes_memory_ptr","nativeSrc":"8796:31:69","nodeType":"YulIdentifier","src":"8796:31:69"},"nativeSrc":"8796:38:69","nodeType":"YulFunctionCall","src":"8796:38:69"},"variables":[{"name":"length","nativeSrc":"8786:6:69","nodeType":"YulTypedName","src":"8786:6:69","type":""}]},{"nativeSrc":"8843:95:69","nodeType":"YulAssignment","src":"8843:95:69","value":{"arguments":[{"name":"pos","nativeSrc":"8926:3:69","nodeType":"YulIdentifier","src":"8926:3:69"},{"name":"length","nativeSrc":"8931:6:69","nodeType":"YulIdentifier","src":"8931:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"8850:75:69","nodeType":"YulIdentifier","src":"8850:75:69"},"nativeSrc":"8850:88:69","nodeType":"YulFunctionCall","src":"8850:88:69"},"variableNames":[{"name":"pos","nativeSrc":"8843:3:69","nodeType":"YulIdentifier","src":"8843:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"8986:5:69","nodeType":"YulIdentifier","src":"8986:5:69"},{"kind":"number","nativeSrc":"8993:4:69","nodeType":"YulLiteral","src":"8993:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"8982:3:69","nodeType":"YulIdentifier","src":"8982:3:69"},"nativeSrc":"8982:16:69","nodeType":"YulFunctionCall","src":"8982:16:69"},{"name":"pos","nativeSrc":"9000:3:69","nodeType":"YulIdentifier","src":"9000:3:69"},{"name":"length","nativeSrc":"9005:6:69","nodeType":"YulIdentifier","src":"9005:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"8947:34:69","nodeType":"YulIdentifier","src":"8947:34:69"},"nativeSrc":"8947:65:69","nodeType":"YulFunctionCall","src":"8947:65:69"},"nativeSrc":"8947:65:69","nodeType":"YulExpressionStatement","src":"8947:65:69"},{"nativeSrc":"9021:23:69","nodeType":"YulAssignment","src":"9021:23:69","value":{"arguments":[{"name":"pos","nativeSrc":"9032:3:69","nodeType":"YulIdentifier","src":"9032:3:69"},{"name":"length","nativeSrc":"9037:6:69","nodeType":"YulIdentifier","src":"9037:6:69"}],"functionName":{"name":"add","nativeSrc":"9028:3:69","nodeType":"YulIdentifier","src":"9028:3:69"},"nativeSrc":"9028:16:69","nodeType":"YulFunctionCall","src":"9028:16:69"},"variableNames":[{"name":"end","nativeSrc":"9021:3:69","nodeType":"YulIdentifier","src":"9021:3:69"}]}]},"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"8664:386:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"8753:5:69","nodeType":"YulTypedName","src":"8753:5:69","type":""},{"name":"pos","nativeSrc":"8760:3:69","nodeType":"YulTypedName","src":"8760:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"8768:3:69","nodeType":"YulTypedName","src":"8768:3:69","type":""}],"src":"8664:386:69"},{"body":{"nativeSrc":"9190:137:69","nodeType":"YulBlock","src":"9190:137:69","statements":[{"nativeSrc":"9201:100:69","nodeType":"YulAssignment","src":"9201:100:69","value":{"arguments":[{"name":"value0","nativeSrc":"9288:6:69","nodeType":"YulIdentifier","src":"9288:6:69"},{"name":"pos","nativeSrc":"9297:3:69","nodeType":"YulIdentifier","src":"9297:3:69"}],"functionName":{"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"9208:79:69","nodeType":"YulIdentifier","src":"9208:79:69"},"nativeSrc":"9208:93:69","nodeType":"YulFunctionCall","src":"9208:93:69"},"variableNames":[{"name":"pos","nativeSrc":"9201:3:69","nodeType":"YulIdentifier","src":"9201:3:69"}]},{"nativeSrc":"9311:10:69","nodeType":"YulAssignment","src":"9311:10:69","value":{"name":"pos","nativeSrc":"9318:3:69","nodeType":"YulIdentifier","src":"9318:3:69"},"variableNames":[{"name":"end","nativeSrc":"9311:3:69","nodeType":"YulIdentifier","src":"9311:3:69"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nativeSrc":"9056:271:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"9169:3:69","nodeType":"YulTypedName","src":"9169:3:69","type":""},{"name":"value0","nativeSrc":"9175:6:69","nodeType":"YulTypedName","src":"9175:6:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"9186:3:69","nodeType":"YulTypedName","src":"9186:3:69","type":""}],"src":"9056:271:69"},{"body":{"nativeSrc":"9392:40:69","nodeType":"YulBlock","src":"9392:40:69","statements":[{"nativeSrc":"9403:22:69","nodeType":"YulAssignment","src":"9403:22:69","value":{"arguments":[{"name":"value","nativeSrc":"9419:5:69","nodeType":"YulIdentifier","src":"9419:5:69"}],"functionName":{"name":"mload","nativeSrc":"9413:5:69","nodeType":"YulIdentifier","src":"9413:5:69"},"nativeSrc":"9413:12:69","nodeType":"YulFunctionCall","src":"9413:12:69"},"variableNames":[{"name":"length","nativeSrc":"9403:6:69","nodeType":"YulIdentifier","src":"9403:6:69"}]}]},"name":"array_length_t_string_memory_ptr","nativeSrc":"9333:99:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"9375:5:69","nodeType":"YulTypedName","src":"9375:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"9385:6:69","nodeType":"YulTypedName","src":"9385:6:69","type":""}],"src":"9333:99:69"},{"body":{"nativeSrc":"9530:285:69","nodeType":"YulBlock","src":"9530:285:69","statements":[{"nativeSrc":"9540:53:69","nodeType":"YulVariableDeclaration","src":"9540:53:69","value":{"arguments":[{"name":"value","nativeSrc":"9587:5:69","nodeType":"YulIdentifier","src":"9587:5:69"}],"functionName":{"name":"array_length_t_string_memory_ptr","nativeSrc":"9554:32:69","nodeType":"YulIdentifier","src":"9554:32:69"},"nativeSrc":"9554:39:69","nodeType":"YulFunctionCall","src":"9554:39:69"},"variables":[{"name":"length","nativeSrc":"9544:6:69","nodeType":"YulTypedName","src":"9544:6:69","type":""}]},{"nativeSrc":"9602:78:69","nodeType":"YulAssignment","src":"9602:78:69","value":{"arguments":[{"name":"pos","nativeSrc":"9668:3:69","nodeType":"YulIdentifier","src":"9668:3:69"},{"name":"length","nativeSrc":"9673:6:69","nodeType":"YulIdentifier","src":"9673:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"9609:58:69","nodeType":"YulIdentifier","src":"9609:58:69"},"nativeSrc":"9609:71:69","nodeType":"YulFunctionCall","src":"9609:71:69"},"variableNames":[{"name":"pos","nativeSrc":"9602:3:69","nodeType":"YulIdentifier","src":"9602:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"9728:5:69","nodeType":"YulIdentifier","src":"9728:5:69"},{"kind":"number","nativeSrc":"9735:4:69","nodeType":"YulLiteral","src":"9735:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"9724:3:69","nodeType":"YulIdentifier","src":"9724:3:69"},"nativeSrc":"9724:16:69","nodeType":"YulFunctionCall","src":"9724:16:69"},{"name":"pos","nativeSrc":"9742:3:69","nodeType":"YulIdentifier","src":"9742:3:69"},{"name":"length","nativeSrc":"9747:6:69","nodeType":"YulIdentifier","src":"9747:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"9689:34:69","nodeType":"YulIdentifier","src":"9689:34:69"},"nativeSrc":"9689:65:69","nodeType":"YulFunctionCall","src":"9689:65:69"},"nativeSrc":"9689:65:69","nodeType":"YulExpressionStatement","src":"9689:65:69"},{"nativeSrc":"9763:46:69","nodeType":"YulAssignment","src":"9763:46:69","value":{"arguments":[{"name":"pos","nativeSrc":"9774:3:69","nodeType":"YulIdentifier","src":"9774:3:69"},{"arguments":[{"name":"length","nativeSrc":"9801:6:69","nodeType":"YulIdentifier","src":"9801:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"9779:21:69","nodeType":"YulIdentifier","src":"9779:21:69"},"nativeSrc":"9779:29:69","nodeType":"YulFunctionCall","src":"9779:29:69"}],"functionName":{"name":"add","nativeSrc":"9770:3:69","nodeType":"YulIdentifier","src":"9770:3:69"},"nativeSrc":"9770:39:69","nodeType":"YulFunctionCall","src":"9770:39:69"},"variableNames":[{"name":"end","nativeSrc":"9763:3:69","nodeType":"YulIdentifier","src":"9763:3:69"}]}]},"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"9438:377:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"9511:5:69","nodeType":"YulTypedName","src":"9511:5:69","type":""},{"name":"pos","nativeSrc":"9518:3:69","nodeType":"YulTypedName","src":"9518:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"9526:3:69","nodeType":"YulTypedName","src":"9526:3:69","type":""}],"src":"9438:377:69"},{"body":{"nativeSrc":"9939:195:69","nodeType":"YulBlock","src":"9939:195:69","statements":[{"nativeSrc":"9949:26:69","nodeType":"YulAssignment","src":"9949:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"9961:9:69","nodeType":"YulIdentifier","src":"9961:9:69"},{"kind":"number","nativeSrc":"9972:2:69","nodeType":"YulLiteral","src":"9972:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"9957:3:69","nodeType":"YulIdentifier","src":"9957:3:69"},"nativeSrc":"9957:18:69","nodeType":"YulFunctionCall","src":"9957:18:69"},"variableNames":[{"name":"tail","nativeSrc":"9949:4:69","nodeType":"YulIdentifier","src":"9949:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"9996:9:69","nodeType":"YulIdentifier","src":"9996:9:69"},{"kind":"number","nativeSrc":"10007:1:69","nodeType":"YulLiteral","src":"10007:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"9992:3:69","nodeType":"YulIdentifier","src":"9992:3:69"},"nativeSrc":"9992:17:69","nodeType":"YulFunctionCall","src":"9992:17:69"},{"arguments":[{"name":"tail","nativeSrc":"10015:4:69","nodeType":"YulIdentifier","src":"10015:4:69"},{"name":"headStart","nativeSrc":"10021:9:69","nodeType":"YulIdentifier","src":"10021:9:69"}],"functionName":{"name":"sub","nativeSrc":"10011:3:69","nodeType":"YulIdentifier","src":"10011:3:69"},"nativeSrc":"10011:20:69","nodeType":"YulFunctionCall","src":"10011:20:69"}],"functionName":{"name":"mstore","nativeSrc":"9985:6:69","nodeType":"YulIdentifier","src":"9985:6:69"},"nativeSrc":"9985:47:69","nodeType":"YulFunctionCall","src":"9985:47:69"},"nativeSrc":"9985:47:69","nodeType":"YulExpressionStatement","src":"9985:47:69"},{"nativeSrc":"10041:86:69","nodeType":"YulAssignment","src":"10041:86:69","value":{"arguments":[{"name":"value0","nativeSrc":"10113:6:69","nodeType":"YulIdentifier","src":"10113:6:69"},{"name":"tail","nativeSrc":"10122:4:69","nodeType":"YulIdentifier","src":"10122:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"10049:63:69","nodeType":"YulIdentifier","src":"10049:63:69"},"nativeSrc":"10049:78:69","nodeType":"YulFunctionCall","src":"10049:78:69"},"variableNames":[{"name":"tail","nativeSrc":"10041:4:69","nodeType":"YulIdentifier","src":"10041:4:69"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"9821:313:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"9911:9:69","nodeType":"YulTypedName","src":"9911:9:69","type":""},{"name":"value0","nativeSrc":"9923:6:69","nodeType":"YulTypedName","src":"9923:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"9934:4:69","nodeType":"YulTypedName","src":"9934:4:69","type":""}],"src":"9821:313:69"}]},"contents":"{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n        revert(0, 0)\n    }\n\n    function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n        revert(0, 0)\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    function panic_error_0x41() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n\n    function finalize_allocation(memPtr, size) {\n        let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n        // protect against overflow\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n\n    function allocate_memory(size) -> memPtr {\n        memPtr := allocate_unbounded()\n        finalize_allocation(memPtr, size)\n    }\n\n    function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n        // Make sure we can allocate memory without overflow\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n        size := round_up_to_mul_of_32(length)\n\n        // add length slot\n        size := add(size, 0x20)\n\n    }\n\n    function copy_memory_to_memory_with_cleanup(src, dst, length) {\n\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n\n    }\n\n    function abi_decode_available_length_t_bytes_memory_ptr_fromMemory(src, length, end) -> array {\n        array := allocate_memory(array_allocation_size_t_bytes_memory_ptr(length))\n        mstore(array, length)\n        let dst := add(array, 0x20)\n        if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n        copy_memory_to_memory_with_cleanup(src, dst, length)\n    }\n\n    // bytes\n    function abi_decode_t_bytes_memory_ptr_fromMemory(offset, end) -> array {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        let length := mload(offset)\n        array := abi_decode_available_length_t_bytes_memory_ptr_fromMemory(add(offset, 0x20), length, end)\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := mload(add(headStart, 64))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value2 := abi_decode_t_bytes_memory_ptr_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function panic_error_0x11() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n\n    function checked_sub_t_uint256(x, y) -> diff {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        diff := sub(x, y)\n\n        if gt(diff, x) { panic_error_0x11() }\n\n    }\n\n    function panic_error_0x01() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x01)\n        revert(0, 0x24)\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function store_literal_in_memory_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC1967: new admin is the zero a\")\n\n        mstore(add(memPtr, 32), \"ddress\")\n\n    }\n\n    function abi_encode_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 38)\n        store_literal_in_memory_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC1967: new implementation is n\")\n\n        mstore(add(memPtr, 32), \"ot a contract\")\n\n    }\n\n    function abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 45)\n        store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520(memPtr) {\n\n        mstore(add(memPtr, 0), \"Address: delegate call to non-co\")\n\n        mstore(add(memPtr, 32), \"ntract\")\n\n    }\n\n    function abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 38)\n        store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function array_length_t_bytes_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n        updated_pos := pos\n    }\n\n    function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n        let length := array_length_t_bytes_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, length)\n    }\n\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n        pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0,  pos)\n\n        end := pos\n    }\n\n    function array_length_t_string_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n        let length := array_length_t_string_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0,  tail)\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60806040526040516110483803806110488339810160408190526100229161048f565b828161004f60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61050f565b6000805160206110018339815191521461006b5761006b610522565b610077828260006100d2565b506100a5905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610461050f565b600080516020610fe1833981519152146100c1576100c1610522565b6100ca826100fe565b5050506106d6565b6100db83610161565b6000825111806100e85750805b156100f9576100f783836101a1565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61013e600080516020610fe1833981519152546001600160a01b031690565b8260405161014d929190610547565b60405180910390a161015e816101cf565b50565b61016a81610230565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606101c683836040518060600160405280602781526020016110216027913961026c565b90505b92915050565b6001600160a01b0381166101fe5760405162461bcd60e51b81526004016101f5906105a8565b60405180910390fd5b80600080516020610fe18339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6102575760405162461bcd60e51b81526004016101f590610602565b8060008051602061100183398151915261020f565b60606001600160a01b0384163b6102955760405162461bcd60e51b81526004016101f590610655565b600080856001600160a01b0316856040516102b09190610687565b600060405180830381855af49150503d80600081146102eb576040519150601f19603f3d011682016040523d82523d6000602084013e6102f0565b606091505b50909250905061030182828661030d565b925050505b9392505050565b6060831561031c575081610306565b82511561032c5782518084602001fd5b8160405162461bcd60e51b81526004016101f591906106c5565b60006001600160a01b0382166101c9565b61036081610346565b811461015e57600080fd5b80516101c981610357565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b03821117156103b1576103b1610376565b6040525050565b60006103c360405190565b90506103cf828261038c565b919050565b60006001600160401b038211156103ed576103ed610376565b601f19601f83011660200192915050565b60005b83811015610419578181015183820152602001610401565b50506000910152565b6000610435610430846103d4565b6103b8565b90508281526020810184848401111561045057610450600080fd5b61045b8482856103fe565b509392505050565b600082601f83011261047757610477600080fd5b8151610487848260208601610422565b949350505050565b6000806000606084860312156104a7576104a7600080fd5b60006104b3868661036b565b93505060206104c48682870161036b565b92505060408401516001600160401b038111156104e3576104e3600080fd5b6104ef86828701610463565b9150509250925092565b634e487b7160e01b600052601160045260246000fd5b818103818111156101c9576101c96104f9565b634e487b7160e01b600052600160045260246000fd5b61054181610346565b82525050565b604081016105558285610538565b6103066020830184610538565b602681526000602082017f455243313936373a206e65772061646d696e20697320746865207a65726f206181526564647265737360d01b602082015291505b5060400190565b602080825281016101c981610562565b602d81526000602082017f455243313936373a206e657720696d706c656d656e746174696f6e206973206e81526c1bdd08184818dbdb9d1c9858dd609a1b602082015291506105a1565b602080825281016101c9816105b8565b602681526000602082017f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f8152651b9d1c9858dd60d21b602082015291506105a1565b602080825281016101c981610612565b600061066f825190565b61067d8185602086016103fe565b9290920192915050565b60006103068284610665565b600061069d825190565b8084526020840193506106b48185602086016103fe565b601f01601f19169290920192915050565b602080825281016101c68184610693565b6108fc806106e56000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c3578063f851a440146100e35761005d565b3661005d5761005b6100f8565b005b61005b6100f8565b34801561007157600080fd5b5061005b61008036600461058c565b610112565b61005b610093366004610607565b61014f565b3480156100a457600080fd5b506100ad6101b6565b6040516100ba9190610672565b60405180910390f35b3480156100cf57600080fd5b5061005b6100de36600461058c565b6101e7565b3480156100ef57600080fd5b506100ad610207565b610100610228565b61011061010b610260565b61026a565b565b61011a61028e565b6001600160a01b0316330361014757610144816040518060200160405280600081525060006102c1565b50565b6101446100f8565b61015761028e565b6001600160a01b031633036101ae576101a98383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506102c1915050565b505050565b6101a96100f8565b60006101c061028e565b6001600160a01b031633036101dc576101d7610260565b905090565b6101e46100f8565b90565b6101ef61028e565b6001600160a01b0316330361014757610144816102ec565b600061021161028e565b6001600160a01b031633036101dc576101d761028e565b61023061028e565b6001600160a01b031633036101105760405162461bcd60e51b815260040161025790610680565b60405180910390fd5b60006101d7610335565b3660008037600080366000845af43d6000803e808015610289573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6102ca8361035d565b6000825111806102d75750805b156101a9576102e6838361039d565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61031561028e565b826040516103249291906106ec565b60405180910390a1610144816103cb565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6102b2565b61036681610435565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103c283836040518060600160405280602781526020016108a060279139610483565b90505b92915050565b6001600160a01b0381166103f15760405162461bcd60e51b81526004016102579061074d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b61045c5760405162461bcd60e51b8152600401610257906107a7565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b60606001600160a01b0384163b6104ac5760405162461bcd60e51b8152600401610257906107fa565b600080856001600160a01b0316856040516104c79190610850565b600060405180830381855af49150503d8060008114610502576040519150601f19603f3d011682016040523d82523d6000602084013e610507565b606091505b5091509150610517828286610523565b925050505b9392505050565b6060831561053257508161051c565b8251156105425782518084602001fd5b8160405162461bcd60e51b8152600401610257919061088e565b60006001600160a01b0382166103c5565b6105768161055c565b811461014457600080fd5b80356103c58161056d565b6000602082840312156105a1576105a1600080fd5b60006105ad8484610581565b949350505050565b60008083601f8401126105ca576105ca600080fd5b50813567ffffffffffffffff8111156105e5576105e5600080fd5b60208301915083600182028301111561060057610600600080fd5b9250929050565b60008060006040848603121561061f5761061f600080fd5b600061062b8686610581565b935050602084013567ffffffffffffffff81111561064b5761064b600080fd5b610657868287016105b5565b92509250509250925092565b61066c8161055c565b82525050565b602081016103c58284610663565b602080825281016103c581604281527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60208201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267604082015261195d60f21b606082015260800190565b604081016106fa8285610663565b61051c6020830184610663565b602681526000602082017f455243313936373a206e65772061646d696e20697320746865207a65726f206181526564647265737360d01b602082015291505b5060400190565b602080825281016103c581610707565b602d81526000602082017f455243313936373a206e657720696d706c656d656e746174696f6e206973206e81526c1bdd08184818dbdb9d1c9858dd609a1b60208201529150610746565b602080825281016103c58161075d565b602681526000602082017f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f8152651b9d1c9858dd60d21b60208201529150610746565b602080825281016103c5816107b7565b60005b8381101561082557818101518382015260200161080d565b50506000910152565b6000610838825190565b61084681856020860161080a565b9290920192915050565b600061051c828461082e565b6000610866825190565b80845260208401935061087d81856020860161080a565b601f01601f19169290920192915050565b602080825281016103c2818461085c56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212204e444297db3ae5fc9a9eefc71ca740bbeafc20c6972d32c6b51d1effee1baf3164736f6c63430008190033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x1048 CODESIZE SUB DUP1 PUSH2 0x1048 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x22 SWAP2 PUSH2 0x48F JUMP JUMPDEST DUP3 DUP2 PUSH2 0x4F PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x50F JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1001 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH2 0x6B JUMPI PUSH2 0x6B PUSH2 0x522 JUMP JUMPDEST PUSH2 0x77 DUP3 DUP3 PUSH1 0x0 PUSH2 0xD2 JUMP JUMPDEST POP PUSH2 0xA5 SWAP1 POP PUSH1 0x1 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6104 PUSH2 0x50F JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xFE1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH2 0xC1 JUMPI PUSH2 0xC1 PUSH2 0x522 JUMP JUMPDEST PUSH2 0xCA DUP3 PUSH2 0xFE JUMP JUMPDEST POP POP POP PUSH2 0x6D6 JUMP JUMPDEST PUSH2 0xDB DUP4 PUSH2 0x161 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0xE8 JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0xF9 JUMPI PUSH2 0xF7 DUP4 DUP4 PUSH2 0x1A1 JUMP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH2 0x13E PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xFE1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH2 0x14D SWAP3 SWAP2 SWAP1 PUSH2 0x547 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x15E DUP2 PUSH2 0x1CF JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x16A DUP2 PUSH2 0x230 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1C6 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1021 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x26C JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1FE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1F5 SWAP1 PUSH2 0x5A8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xFE1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x257 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1F5 SWAP1 PUSH2 0x602 JUMP JUMPDEST DUP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1001 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH2 0x20F JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE PUSH2 0x295 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1F5 SWAP1 PUSH2 0x655 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x2B0 SWAP2 SWAP1 PUSH2 0x687 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2EB JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2F0 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x301 DUP3 DUP3 DUP7 PUSH2 0x30D JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x31C JUMPI POP DUP2 PUSH2 0x306 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x32C JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1F5 SWAP2 SWAP1 PUSH2 0x6C5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1C9 JUMP JUMPDEST PUSH2 0x360 DUP2 PUSH2 0x346 JUMP JUMPDEST DUP2 EQ PUSH2 0x15E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x1C9 DUP2 PUSH2 0x357 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x3B1 JUMPI PUSH2 0x3B1 PUSH2 0x376 JUMP JUMPDEST PUSH1 0x40 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C3 PUSH1 0x40 MLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x3CF DUP3 DUP3 PUSH2 0x38C JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x3ED JUMPI PUSH2 0x3ED PUSH2 0x376 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x419 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x401 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x435 PUSH2 0x430 DUP5 PUSH2 0x3D4 JUMP JUMPDEST PUSH2 0x3B8 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x450 JUMPI PUSH2 0x450 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x45B DUP5 DUP3 DUP6 PUSH2 0x3FE JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x477 JUMPI PUSH2 0x477 PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x487 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x422 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4A7 JUMPI PUSH2 0x4A7 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4B3 DUP7 DUP7 PUSH2 0x36B JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x4C4 DUP7 DUP3 DUP8 ADD PUSH2 0x36B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4E3 JUMPI PUSH2 0x4E3 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4EF DUP7 DUP3 DUP8 ADD PUSH2 0x463 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x1C9 JUMPI PUSH2 0x1C9 PUSH2 0x4F9 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x541 DUP2 PUSH2 0x346 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x555 DUP3 DUP6 PUSH2 0x538 JUMP JUMPDEST PUSH2 0x306 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x538 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x455243313936373A206E65772061646D696E20697320746865207A65726F2061 DUP2 MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1C9 DUP2 PUSH2 0x562 JUMP JUMPDEST PUSH1 0x2D DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E DUP2 MSTORE PUSH13 0x1BDD08184818DBDB9D1C9858DD PUSH1 0x9A SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x5A1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1C9 DUP2 PUSH2 0x5B8 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F DUP2 MSTORE PUSH6 0x1B9D1C9858DD PUSH1 0xD2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x5A1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1C9 DUP2 PUSH2 0x612 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x66F DUP3 MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x67D DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x3FE JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x306 DUP3 DUP5 PUSH2 0x665 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x69D DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x6B4 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x3FE JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1C6 DUP2 DUP5 PUSH2 0x693 JUMP JUMPDEST PUSH2 0x8FC DUP1 PUSH2 0x6E5 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x65 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x85 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x8F283970 EQ PUSH2 0xC3 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xE3 JUMPI PUSH2 0x5D JUMP JUMPDEST CALLDATASIZE PUSH2 0x5D JUMPI PUSH2 0x5B PUSH2 0xF8 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x5B PUSH2 0xF8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5B PUSH2 0x80 CALLDATASIZE PUSH1 0x4 PUSH2 0x58C JUMP JUMPDEST PUSH2 0x112 JUMP JUMPDEST PUSH2 0x5B PUSH2 0x93 CALLDATASIZE PUSH1 0x4 PUSH2 0x607 JUMP JUMPDEST PUSH2 0x14F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0x1B6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBA SWAP2 SWAP1 PUSH2 0x672 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5B PUSH2 0xDE CALLDATASIZE PUSH1 0x4 PUSH2 0x58C JUMP JUMPDEST PUSH2 0x1E7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0x207 JUMP JUMPDEST PUSH2 0x100 PUSH2 0x228 JUMP JUMPDEST PUSH2 0x110 PUSH2 0x10B PUSH2 0x260 JUMP JUMPDEST PUSH2 0x26A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x11A PUSH2 0x28E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x147 JUMPI PUSH2 0x144 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH1 0x0 PUSH2 0x2C1 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x144 PUSH2 0xF8 JUMP JUMPDEST PUSH2 0x157 PUSH2 0x28E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x1AE JUMPI PUSH2 0x1A9 DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH1 0x1 SWAP3 POP PUSH2 0x2C1 SWAP2 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1A9 PUSH2 0xF8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C0 PUSH2 0x28E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x1DC JUMPI PUSH2 0x1D7 PUSH2 0x260 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x1E4 PUSH2 0xF8 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1EF PUSH2 0x28E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x147 JUMPI PUSH2 0x144 DUP2 PUSH2 0x2EC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x211 PUSH2 0x28E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x1DC JUMPI PUSH2 0x1D7 PUSH2 0x28E JUMP JUMPDEST PUSH2 0x230 PUSH2 0x28E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x110 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x257 SWAP1 PUSH2 0x680 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1D7 PUSH2 0x335 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x289 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2CA DUP4 PUSH2 0x35D JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x2D7 JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0x1A9 JUMPI PUSH2 0x2E6 DUP4 DUP4 PUSH2 0x39D JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH2 0x315 PUSH2 0x28E JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH2 0x324 SWAP3 SWAP2 SWAP1 PUSH2 0x6EC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x144 DUP2 PUSH2 0x3CB JUMP JUMPDEST PUSH1 0x0 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH2 0x2B2 JUMP JUMPDEST PUSH2 0x366 DUP2 PUSH2 0x435 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3C2 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x8A0 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x483 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x3F1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x257 SWAP1 PUSH2 0x74D JUMP JUMPDEST DUP1 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x45C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x257 SWAP1 PUSH2 0x7A7 JUMP JUMPDEST DUP1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH2 0x414 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE PUSH2 0x4AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x257 SWAP1 PUSH2 0x7FA JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x4C7 SWAP2 SWAP1 PUSH2 0x850 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x502 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x507 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x517 DUP3 DUP3 DUP7 PUSH2 0x523 JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x532 JUMPI POP DUP2 PUSH2 0x51C JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x542 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x257 SWAP2 SWAP1 PUSH2 0x88E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x576 DUP2 PUSH2 0x55C JUMP JUMPDEST DUP2 EQ PUSH2 0x144 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3C5 DUP2 PUSH2 0x56D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5A1 JUMPI PUSH2 0x5A1 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5AD DUP5 DUP5 PUSH2 0x581 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x5CA JUMPI PUSH2 0x5CA PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5E5 JUMPI PUSH2 0x5E5 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x600 JUMPI PUSH2 0x600 PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x61F JUMPI PUSH2 0x61F PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x62B DUP7 DUP7 PUSH2 0x581 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x64B JUMPI PUSH2 0x64B PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x657 DUP7 DUP3 DUP8 ADD PUSH2 0x5B5 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x66C DUP2 PUSH2 0x55C JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x3C5 DUP3 DUP5 PUSH2 0x663 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x3C5 DUP2 PUSH1 0x42 DUP2 MSTORE PUSH32 0x5472616E73706172656E745570677261646561626C6550726F78793A2061646D PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x696E2063616E6E6F742066616C6C6261636B20746F2070726F78792074617267 PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x195D PUSH1 0xF2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x6FA DUP3 DUP6 PUSH2 0x663 JUMP JUMPDEST PUSH2 0x51C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x663 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x455243313936373A206E65772061646D696E20697320746865207A65726F2061 DUP2 MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x3C5 DUP2 PUSH2 0x707 JUMP JUMPDEST PUSH1 0x2D DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E DUP2 MSTORE PUSH13 0x1BDD08184818DBDB9D1C9858DD PUSH1 0x9A SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x746 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x3C5 DUP2 PUSH2 0x75D JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F DUP2 MSTORE PUSH6 0x1B9D1C9858DD PUSH1 0xD2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x746 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x3C5 DUP2 PUSH2 0x7B7 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x825 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x80D JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x838 DUP3 MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x846 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x80A JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x51C DUP3 DUP5 PUSH2 0x82E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x866 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x87D DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x80A JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x3C2 DUP2 DUP5 PUSH2 0x85C JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH10 0x706673582212204E4442 SWAP8 0xDB GASPRICE 0xE5 0xFC SWAP11 SWAP15 0xEF 0xC7 SHR 0xA7 BLOCKHASH 0xBB 0xEA 0xFC KECCAK256 0xC6 SWAP8 0x2D ORIGIN 0xC6 0xB5 SAR 0x1E SELFDESTRUCT 0xEE SHL 0xAF BALANCE PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER 0xB5 BALANCE 0x27 PUSH9 0x4A568B3173AE13B9F8 0xA6 ADD PUSH15 0x243E63B6E8EE1178D6A717850B5D61 SUB CALLDATASIZE ADDMOD SWAP5 LOG1 EXTCODESIZE LOG1 LOG3 0x21 MOD PUSH8 0xC828492DB98DCA3E KECCAK256 PUSH23 0xCC3735A920A3CA505D382BBC416464726573733A206C6F PUSH24 0x2D6C6576656C2064656C65676174652063616C6C20666169 PUSH13 0x65640000000000000000000000 ","sourceMap":"1634:3556:64:-:0;;;1908:254;;;;;;;;;;;;;;;;;;:::i;:::-;2023:6;2031:5;1050:54:59;1103:1;1058:41;1050:54;:::i;:::-;-1:-1:-1;;;;;;;;;;;1018:87:59;1011:95;;;;:::i;:::-;1116:39;1134:6;1142:5;1149;1116:17;:39::i;:::-;-1:-1:-1;2078:45:64::1;::::0;-1:-1:-1;2122:1:64::1;2086:32;2078:45;:::i;:::-;-1:-1:-1::0;;;;;;;;;;;2055:69:64::1;2048:77;;;;:::i;:::-;2135:20;2148:6:::0;2135:12:::1;:20::i;:::-;1908:254:::0;;;1634:3556;;2188:295:60;2326:29;2337:17;2326:10;:29::i;:::-;2383:1;2369:4;:11;:15;:28;;;;2388:9;2369:28;2365:112;;;2413:53;2442:17;2461:4;2413:28;:53::i;:::-;;2365:112;2188:295;;;:::o;4637:135::-;4701:35;4714:11;-1:-1:-1;;;;;;;;;;;4191:45:60;-1:-1:-1;;;;;4191:45:60;;4113:130;4714:11;4727:8;4701:35;;;;;;;:::i;:::-;;;;;;;;4746:19;4756:8;4746:9;:19::i;:::-;4637:135;:::o;1902:152::-;1968:37;1987:17;1968:18;:37::i;:::-;2020:27;;-1:-1:-1;;;;;2020:27:60;;;;;;;;1902:152;:::o;6575:198:65:-;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;;6575:198;;;;;:::o;4325:201:60:-;-1:-1:-1;;;;;4388:22:60;;4380:73;;;;-1:-1:-1;;;4380:73:60;;;;;;;:::i;:::-;;;;;;;;;4511:8;-1:-1:-1;;;;;;;;;;;4463:39:60;:56;;-1:-1:-1;;;;;;4463:56:60;-1:-1:-1;;;;;4463:56:60;;;;;;;;;;-1:-1:-1;4325:201:60:o;1537:259::-;-1:-1:-1;;;;;1470:19:65;;;1610:95:60;;;;-1:-1:-1;;;1610:95:60;;;;;;;:::i;:::-;1772:17;-1:-1:-1;;;;;;;;;;;1715:48:60;1599:147:67;6959:387:65;7100:12;-1:-1:-1;;;;;1470:19:65;;;7124:69;;;;-1:-1:-1;;;7124:69:65;;;;;;;:::i;:::-;7205:12;7219:23;7246:6;-1:-1:-1;;;;;7246:19:65;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7204:67:65;;-1:-1:-1;7204:67:65;-1:-1:-1;7288:51:65;7204:67;;7326:12;7288:16;:51::i;:::-;7281:58;;;;6959:387;;;;;;:::o;7566:692::-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:65;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;-1:-1:-1;;;8207:20:65;;;;;;;;:::i;466:96:69:-;503:7;-1:-1:-1;;;;;400:54:69;;532:24;334:126;568:122;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;696:143;778:13;;800:33;778:13;800:33;:::i;1199:180::-;-1:-1:-1;;;1244:1:69;1237:88;1344:4;1341:1;1334:15;1368:4;1365:1;1358:15;1385:281;-1:-1:-1;;1183:2:69;1163:14;;1159:28;1460:6;1456:40;1598:6;1586:10;1583:22;-1:-1:-1;;;;;1550:10:69;1547:34;1544:62;1541:88;;;1609:18;;:::i;:::-;1645:2;1638:22;-1:-1:-1;;1385:281:69:o;1672:129::-;1706:6;1733:20;73:2;67:9;;7:75;1733:20;1723:30;;1762:33;1790:4;1782:6;1762:33;:::i;:::-;1672:129;;;:::o;1807:307::-;1868:4;-1:-1:-1;;;;;1950:6:69;1947:30;1944:56;;;1980:18;;:::i;:::-;-1:-1:-1;;1183:2:69;1163:14;;1159:28;2102:4;2092:15;;1807:307;-1:-1:-1;;1807:307:69:o;2120:248::-;2202:1;2212:113;2226:6;2223:1;2220:13;2212:113;;;2302:11;;;2296:18;2283:11;;;2276:39;2248:2;2241:10;2212:113;;;-1:-1:-1;;2359:1:69;2341:16;;2334:27;2120:248::o;2374:432::-;2462:5;2487:65;2503:48;2544:6;2503:48;:::i;:::-;2487:65;:::i;:::-;2478:74;;2575:6;2568:5;2561:21;2613:4;2606:5;2602:16;2651:3;2642:6;2637:3;2633:16;2630:25;2627:112;;;2658:79;197:1;194;187:12;2658:79;2748:52;2793:6;2788:3;2783;2748:52;:::i;:::-;2468:338;2374:432;;;;;:::o;2825:353::-;2891:5;2940:3;2933:4;2925:6;2921:17;2917:27;2907:122;;2948:79;197:1;194;187:12;2948:79;3058:6;3052:13;3083:89;3168:3;3160:6;3153:4;3145:6;3141:17;3083:89;:::i;:::-;3074:98;2825:353;-1:-1:-1;;;;2825:353:69:o;3184:834::-;3281:6;3289;3297;3346:2;3334:9;3325:7;3321:23;3317:32;3314:119;;;3352:79;197:1;194;187:12;3352:79;3472:1;3497:64;3553:7;3533:9;3497:64;:::i;:::-;3487:74;;3443:128;3610:2;3636:64;3692:7;3683:6;3672:9;3668:22;3636:64;:::i;:::-;3626:74;;3581:129;3770:2;3759:9;3755:18;3749:25;-1:-1:-1;;;;;3793:6:69;3790:30;3787:117;;;3823:79;197:1;194;187:12;3823:79;3928:73;3993:7;3984:6;3973:9;3969:22;3928:73;:::i;:::-;3918:83;;3720:291;3184:834;;;;;:::o;4107:180::-;-1:-1:-1;;;4152:1:69;4145:88;4252:4;4249:1;4242:15;4276:4;4273:1;4266:15;4293:194;4424:9;;;4446:11;;;4443:37;;;4460:18;;:::i;4493:180::-;-1:-1:-1;;;4538:1:69;4531:88;4638:4;4635:1;4628:15;4662:4;4659:1;4652:15;4679:118;4766:24;4784:5;4766:24;:::i;:::-;4761:3;4754:37;4679:118;;:::o;4803:332::-;4962:2;4947:18;;4975:71;4951:9;5019:6;4975:71;:::i;:::-;5056:72;5124:2;5113:9;5109:18;5100:6;5056:72;:::i;5547:366::-;5774:2;5247:19;;5689:3;5299:4;5290:14;;5456:34;5433:58;;-1:-1:-1;;;5520:2:69;5508:15;;5501:33;5703:74;-1:-1:-1;5786:93:69;-1:-1:-1;5904:2:69;5895:12;;5547:366::o;5919:419::-;6123:2;6136:47;;;6108:18;;6200:131;6108:18;6200:131;:::i;6582:366::-;6809:2;5247:19;;6724:3;5299:4;5290:14;;6484:34;6461:58;;-1:-1:-1;;;6548:2:69;6536:15;;6529:40;6738:74;-1:-1:-1;6821:93:69;6344:232;6954:419;7158:2;7171:47;;;7143:18;;7235:131;7143:18;7235:131;:::i;7610:366::-;7837:2;5247:19;;7752:3;5299:4;5290:14;;7519:34;7496:58;;-1:-1:-1;;;7583:2:69;7571:15;;7564:33;7766:74;-1:-1:-1;7849:93:69;7379:225;7982:419;8186:2;8199:47;;;8171:18;;8263:131;8171:18;8263:131;:::i;8664:386::-;8768:3;8796:38;8828:5;8486:12;;8407:98;8796:38;8947:65;9005:6;9000:3;8993:4;8986:5;8982:16;8947:65;:::i;:::-;9028:16;;;;;8664:386;-1:-1:-1;;8664:386:69:o;9056:271::-;9186:3;9208:93;9297:3;9288:6;9208:93;:::i;9438:377::-;9526:3;9554:39;9587:5;8486:12;;8407:98;9554:39;5247:19;;;5299:4;5290:14;;9602:78;;9689:65;9747:6;9742:3;9735:4;9728:5;9724:16;9689:65;:::i;:::-;1183:2;1163:14;-1:-1:-1;;1159:28:69;9770:39;;;;;;-1:-1:-1;;9438:377:69:o;9821:313::-;9972:2;9985:47;;;9957:18;;10049:78;9957:18;10113:6;10049:78;:::i;9821:313::-;1634:3556:64;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_19323":{"entryPoint":null,"id":19323,"parameterSlots":0,"returnSlots":0},"@_19331":{"entryPoint":null,"id":19331,"parameterSlots":0,"returnSlots":0},"@_beforeFallback_19336":{"entryPoint":null,"id":19336,"parameterSlots":0,"returnSlots":0},"@_beforeFallback_19655":{"entryPoint":552,"id":19655,"parameterSlots":0,"returnSlots":0},"@_changeAdmin_19188":{"entryPoint":748,"id":19188,"parameterSlots":1,"returnSlots":0},"@_delegate_19296":{"entryPoint":618,"id":19296,"parameterSlots":1,"returnSlots":0},"@_fallback_19315":{"entryPoint":248,"id":19315,"parameterSlots":0,"returnSlots":0},"@_getAdmin_19145":{"entryPoint":654,"id":19145,"parameterSlots":0,"returnSlots":1},"@_getImplementation_18999":{"entryPoint":821,"id":18999,"parameterSlots":0,"returnSlots":1},"@_implementation_18966":{"entryPoint":608,"id":18966,"parameterSlots":0,"returnSlots":1},"@_setAdmin_19171":{"entryPoint":971,"id":19171,"parameterSlots":1,"returnSlots":0},"@_setImplementation_19023":{"entryPoint":1077,"id":19023,"parameterSlots":1,"returnSlots":0},"@_upgradeToAndCall_19068":{"entryPoint":705,"id":19068,"parameterSlots":3,"returnSlots":0},"@_upgradeTo_19038":{"entryPoint":861,"id":19038,"parameterSlots":1,"returnSlots":0},"@admin_19563":{"entryPoint":519,"id":19563,"parameterSlots":0,"returnSlots":1},"@changeAdmin_19590":{"entryPoint":487,"id":19590,"parameterSlots":1,"returnSlots":0},"@functionDelegateCall_19884":{"entryPoint":925,"id":19884,"parameterSlots":2,"returnSlots":1},"@functionDelegateCall_19919":{"entryPoint":1155,"id":19919,"parameterSlots":3,"returnSlots":1},"@getAddressSlot_19999":{"entryPoint":null,"id":19999,"parameterSlots":1,"returnSlots":1},"@implementation_19577":{"entryPoint":438,"id":19577,"parameterSlots":0,"returnSlots":1},"@isContract_19674":{"entryPoint":null,"id":19674,"parameterSlots":1,"returnSlots":1},"@upgradeToAndCall_19625":{"entryPoint":335,"id":19625,"parameterSlots":3,"returnSlots":0},"@upgradeTo_19608":{"entryPoint":274,"id":19608,"parameterSlots":1,"returnSlots":0},"@verifyCallResult_19950":{"entryPoint":1315,"id":19950,"parameterSlots":3,"returnSlots":1},"abi_decode_t_address":{"entryPoint":1409,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_bytes_calldata_ptr":{"entryPoint":1461,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":1420,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_bytes_calldata_ptr":{"entryPoint":1543,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_t_address_to_t_address_fromStack":{"entryPoint":1635,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":2094,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack":{"entryPoint":2140,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5_to_t_string_memory_ptr_fromStack":{"entryPoint":1799,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack":{"entryPoint":1885,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack":{"entryPoint":1975,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d_to_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":2128,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":1650,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":1772,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":2190,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1869,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1959,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":2042,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1664,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_length_t_bytes_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_string_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_address":{"entryPoint":1372,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":2058,"id":null,"parameterSlots":3,"returnSlots":0},"revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"round_up_to_mul_of_32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"store_literal_in_memory_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_address":{"entryPoint":1389,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:9935:69","nodeType":"YulBlock","src":"0:9935:69","statements":[{"body":{"nativeSrc":"47:35:69","nodeType":"YulBlock","src":"47:35:69","statements":[{"nativeSrc":"57:19:69","nodeType":"YulAssignment","src":"57:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"73:2:69","nodeType":"YulLiteral","src":"73:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"67:5:69","nodeType":"YulIdentifier","src":"67:5:69"},"nativeSrc":"67:9:69","nodeType":"YulFunctionCall","src":"67:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"57:6:69","nodeType":"YulIdentifier","src":"57:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"7:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"40:6:69","nodeType":"YulTypedName","src":"40:6:69","type":""}],"src":"7:75:69"},{"body":{"nativeSrc":"177:28:69","nodeType":"YulBlock","src":"177:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"194:1:69","nodeType":"YulLiteral","src":"194:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"197:1:69","nodeType":"YulLiteral","src":"197:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"187:6:69","nodeType":"YulIdentifier","src":"187:6:69"},"nativeSrc":"187:12:69","nodeType":"YulFunctionCall","src":"187:12:69"},"nativeSrc":"187:12:69","nodeType":"YulExpressionStatement","src":"187:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"88:117:69","nodeType":"YulFunctionDefinition","src":"88:117:69"},{"body":{"nativeSrc":"300:28:69","nodeType":"YulBlock","src":"300:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"317:1:69","nodeType":"YulLiteral","src":"317:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"320:1:69","nodeType":"YulLiteral","src":"320:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},"nativeSrc":"310:12:69","nodeType":"YulFunctionCall","src":"310:12:69"},"nativeSrc":"310:12:69","nodeType":"YulExpressionStatement","src":"310:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"211:117:69","nodeType":"YulFunctionDefinition","src":"211:117:69"},{"body":{"nativeSrc":"379:81:69","nodeType":"YulBlock","src":"379:81:69","statements":[{"nativeSrc":"389:65:69","nodeType":"YulAssignment","src":"389:65:69","value":{"arguments":[{"name":"value","nativeSrc":"404:5:69","nodeType":"YulIdentifier","src":"404:5:69"},{"kind":"number","nativeSrc":"411:42:69","nodeType":"YulLiteral","src":"411:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"400:3:69","nodeType":"YulIdentifier","src":"400:3:69"},"nativeSrc":"400:54:69","nodeType":"YulFunctionCall","src":"400:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"389:7:69","nodeType":"YulIdentifier","src":"389:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"334:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"361:5:69","nodeType":"YulTypedName","src":"361:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"371:7:69","nodeType":"YulTypedName","src":"371:7:69","type":""}],"src":"334:126:69"},{"body":{"nativeSrc":"511:51:69","nodeType":"YulBlock","src":"511:51:69","statements":[{"nativeSrc":"521:35:69","nodeType":"YulAssignment","src":"521:35:69","value":{"arguments":[{"name":"value","nativeSrc":"550:5:69","nodeType":"YulIdentifier","src":"550:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"532:17:69","nodeType":"YulIdentifier","src":"532:17:69"},"nativeSrc":"532:24:69","nodeType":"YulFunctionCall","src":"532:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"521:7:69","nodeType":"YulIdentifier","src":"521:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"466:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"493:5:69","nodeType":"YulTypedName","src":"493:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"503:7:69","nodeType":"YulTypedName","src":"503:7:69","type":""}],"src":"466:96:69"},{"body":{"nativeSrc":"611:79:69","nodeType":"YulBlock","src":"611:79:69","statements":[{"body":{"nativeSrc":"668:16:69","nodeType":"YulBlock","src":"668:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"677:1:69","nodeType":"YulLiteral","src":"677:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"680:1:69","nodeType":"YulLiteral","src":"680:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"670:6:69","nodeType":"YulIdentifier","src":"670:6:69"},"nativeSrc":"670:12:69","nodeType":"YulFunctionCall","src":"670:12:69"},"nativeSrc":"670:12:69","nodeType":"YulExpressionStatement","src":"670:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"634:5:69","nodeType":"YulIdentifier","src":"634:5:69"},{"arguments":[{"name":"value","nativeSrc":"659:5:69","nodeType":"YulIdentifier","src":"659:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"641:17:69","nodeType":"YulIdentifier","src":"641:17:69"},"nativeSrc":"641:24:69","nodeType":"YulFunctionCall","src":"641:24:69"}],"functionName":{"name":"eq","nativeSrc":"631:2:69","nodeType":"YulIdentifier","src":"631:2:69"},"nativeSrc":"631:35:69","nodeType":"YulFunctionCall","src":"631:35:69"}],"functionName":{"name":"iszero","nativeSrc":"624:6:69","nodeType":"YulIdentifier","src":"624:6:69"},"nativeSrc":"624:43:69","nodeType":"YulFunctionCall","src":"624:43:69"},"nativeSrc":"621:63:69","nodeType":"YulIf","src":"621:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"568:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"604:5:69","nodeType":"YulTypedName","src":"604:5:69","type":""}],"src":"568:122:69"},{"body":{"nativeSrc":"748:87:69","nodeType":"YulBlock","src":"748:87:69","statements":[{"nativeSrc":"758:29:69","nodeType":"YulAssignment","src":"758:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"780:6:69","nodeType":"YulIdentifier","src":"780:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"767:12:69","nodeType":"YulIdentifier","src":"767:12:69"},"nativeSrc":"767:20:69","nodeType":"YulFunctionCall","src":"767:20:69"},"variableNames":[{"name":"value","nativeSrc":"758:5:69","nodeType":"YulIdentifier","src":"758:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"823:5:69","nodeType":"YulIdentifier","src":"823:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"796:26:69","nodeType":"YulIdentifier","src":"796:26:69"},"nativeSrc":"796:33:69","nodeType":"YulFunctionCall","src":"796:33:69"},"nativeSrc":"796:33:69","nodeType":"YulExpressionStatement","src":"796:33:69"}]},"name":"abi_decode_t_address","nativeSrc":"696:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"726:6:69","nodeType":"YulTypedName","src":"726:6:69","type":""},{"name":"end","nativeSrc":"734:3:69","nodeType":"YulTypedName","src":"734:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"742:5:69","nodeType":"YulTypedName","src":"742:5:69","type":""}],"src":"696:139:69"},{"body":{"nativeSrc":"907:263:69","nodeType":"YulBlock","src":"907:263:69","statements":[{"body":{"nativeSrc":"953:83:69","nodeType":"YulBlock","src":"953:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"955:77:69","nodeType":"YulIdentifier","src":"955:77:69"},"nativeSrc":"955:79:69","nodeType":"YulFunctionCall","src":"955:79:69"},"nativeSrc":"955:79:69","nodeType":"YulExpressionStatement","src":"955:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"928:7:69","nodeType":"YulIdentifier","src":"928:7:69"},{"name":"headStart","nativeSrc":"937:9:69","nodeType":"YulIdentifier","src":"937:9:69"}],"functionName":{"name":"sub","nativeSrc":"924:3:69","nodeType":"YulIdentifier","src":"924:3:69"},"nativeSrc":"924:23:69","nodeType":"YulFunctionCall","src":"924:23:69"},{"kind":"number","nativeSrc":"949:2:69","nodeType":"YulLiteral","src":"949:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"920:3:69","nodeType":"YulIdentifier","src":"920:3:69"},"nativeSrc":"920:32:69","nodeType":"YulFunctionCall","src":"920:32:69"},"nativeSrc":"917:119:69","nodeType":"YulIf","src":"917:119:69"},{"nativeSrc":"1046:117:69","nodeType":"YulBlock","src":"1046:117:69","statements":[{"nativeSrc":"1061:15:69","nodeType":"YulVariableDeclaration","src":"1061:15:69","value":{"kind":"number","nativeSrc":"1075:1:69","nodeType":"YulLiteral","src":"1075:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"1065:6:69","nodeType":"YulTypedName","src":"1065:6:69","type":""}]},{"nativeSrc":"1090:63:69","nodeType":"YulAssignment","src":"1090:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1125:9:69","nodeType":"YulIdentifier","src":"1125:9:69"},{"name":"offset","nativeSrc":"1136:6:69","nodeType":"YulIdentifier","src":"1136:6:69"}],"functionName":{"name":"add","nativeSrc":"1121:3:69","nodeType":"YulIdentifier","src":"1121:3:69"},"nativeSrc":"1121:22:69","nodeType":"YulFunctionCall","src":"1121:22:69"},{"name":"dataEnd","nativeSrc":"1145:7:69","nodeType":"YulIdentifier","src":"1145:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"1100:20:69","nodeType":"YulIdentifier","src":"1100:20:69"},"nativeSrc":"1100:53:69","nodeType":"YulFunctionCall","src":"1100:53:69"},"variableNames":[{"name":"value0","nativeSrc":"1090:6:69","nodeType":"YulIdentifier","src":"1090:6:69"}]}]}]},"name":"abi_decode_tuple_t_address","nativeSrc":"841:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"877:9:69","nodeType":"YulTypedName","src":"877:9:69","type":""},{"name":"dataEnd","nativeSrc":"888:7:69","nodeType":"YulTypedName","src":"888:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"900:6:69","nodeType":"YulTypedName","src":"900:6:69","type":""}],"src":"841:329:69"},{"body":{"nativeSrc":"1265:28:69","nodeType":"YulBlock","src":"1265:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1282:1:69","nodeType":"YulLiteral","src":"1282:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1285:1:69","nodeType":"YulLiteral","src":"1285:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1275:6:69","nodeType":"YulIdentifier","src":"1275:6:69"},"nativeSrc":"1275:12:69","nodeType":"YulFunctionCall","src":"1275:12:69"},"nativeSrc":"1275:12:69","nodeType":"YulExpressionStatement","src":"1275:12:69"}]},"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"1176:117:69","nodeType":"YulFunctionDefinition","src":"1176:117:69"},{"body":{"nativeSrc":"1388:28:69","nodeType":"YulBlock","src":"1388:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1405:1:69","nodeType":"YulLiteral","src":"1405:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1408:1:69","nodeType":"YulLiteral","src":"1408:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1398:6:69","nodeType":"YulIdentifier","src":"1398:6:69"},"nativeSrc":"1398:12:69","nodeType":"YulFunctionCall","src":"1398:12:69"},"nativeSrc":"1398:12:69","nodeType":"YulExpressionStatement","src":"1398:12:69"}]},"name":"revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490","nativeSrc":"1299:117:69","nodeType":"YulFunctionDefinition","src":"1299:117:69"},{"body":{"nativeSrc":"1511:28:69","nodeType":"YulBlock","src":"1511:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1528:1:69","nodeType":"YulLiteral","src":"1528:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1531:1:69","nodeType":"YulLiteral","src":"1531:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1521:6:69","nodeType":"YulIdentifier","src":"1521:6:69"},"nativeSrc":"1521:12:69","nodeType":"YulFunctionCall","src":"1521:12:69"},"nativeSrc":"1521:12:69","nodeType":"YulExpressionStatement","src":"1521:12:69"}]},"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"1422:117:69","nodeType":"YulFunctionDefinition","src":"1422:117:69"},{"body":{"nativeSrc":"1632:478:69","nodeType":"YulBlock","src":"1632:478:69","statements":[{"body":{"nativeSrc":"1681:83:69","nodeType":"YulBlock","src":"1681:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"1683:77:69","nodeType":"YulIdentifier","src":"1683:77:69"},"nativeSrc":"1683:79:69","nodeType":"YulFunctionCall","src":"1683:79:69"},"nativeSrc":"1683:79:69","nodeType":"YulExpressionStatement","src":"1683:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"1660:6:69","nodeType":"YulIdentifier","src":"1660:6:69"},{"kind":"number","nativeSrc":"1668:4:69","nodeType":"YulLiteral","src":"1668:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"1656:3:69","nodeType":"YulIdentifier","src":"1656:3:69"},"nativeSrc":"1656:17:69","nodeType":"YulFunctionCall","src":"1656:17:69"},{"name":"end","nativeSrc":"1675:3:69","nodeType":"YulIdentifier","src":"1675:3:69"}],"functionName":{"name":"slt","nativeSrc":"1652:3:69","nodeType":"YulIdentifier","src":"1652:3:69"},"nativeSrc":"1652:27:69","nodeType":"YulFunctionCall","src":"1652:27:69"}],"functionName":{"name":"iszero","nativeSrc":"1645:6:69","nodeType":"YulIdentifier","src":"1645:6:69"},"nativeSrc":"1645:35:69","nodeType":"YulFunctionCall","src":"1645:35:69"},"nativeSrc":"1642:122:69","nodeType":"YulIf","src":"1642:122:69"},{"nativeSrc":"1773:30:69","nodeType":"YulAssignment","src":"1773:30:69","value":{"arguments":[{"name":"offset","nativeSrc":"1796:6:69","nodeType":"YulIdentifier","src":"1796:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"1783:12:69","nodeType":"YulIdentifier","src":"1783:12:69"},"nativeSrc":"1783:20:69","nodeType":"YulFunctionCall","src":"1783:20:69"},"variableNames":[{"name":"length","nativeSrc":"1773:6:69","nodeType":"YulIdentifier","src":"1773:6:69"}]},{"body":{"nativeSrc":"1846:83:69","nodeType":"YulBlock","src":"1846:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490","nativeSrc":"1848:77:69","nodeType":"YulIdentifier","src":"1848:77:69"},"nativeSrc":"1848:79:69","nodeType":"YulFunctionCall","src":"1848:79:69"},"nativeSrc":"1848:79:69","nodeType":"YulExpressionStatement","src":"1848:79:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"1818:6:69","nodeType":"YulIdentifier","src":"1818:6:69"},{"kind":"number","nativeSrc":"1826:18:69","nodeType":"YulLiteral","src":"1826:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"1815:2:69","nodeType":"YulIdentifier","src":"1815:2:69"},"nativeSrc":"1815:30:69","nodeType":"YulFunctionCall","src":"1815:30:69"},"nativeSrc":"1812:117:69","nodeType":"YulIf","src":"1812:117:69"},{"nativeSrc":"1938:29:69","nodeType":"YulAssignment","src":"1938:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"1954:6:69","nodeType":"YulIdentifier","src":"1954:6:69"},{"kind":"number","nativeSrc":"1962:4:69","nodeType":"YulLiteral","src":"1962:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1950:3:69","nodeType":"YulIdentifier","src":"1950:3:69"},"nativeSrc":"1950:17:69","nodeType":"YulFunctionCall","src":"1950:17:69"},"variableNames":[{"name":"arrayPos","nativeSrc":"1938:8:69","nodeType":"YulIdentifier","src":"1938:8:69"}]},{"body":{"nativeSrc":"2021:83:69","nodeType":"YulBlock","src":"2021:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"2023:77:69","nodeType":"YulIdentifier","src":"2023:77:69"},"nativeSrc":"2023:79:69","nodeType":"YulFunctionCall","src":"2023:79:69"},"nativeSrc":"2023:79:69","nodeType":"YulExpressionStatement","src":"2023:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"arrayPos","nativeSrc":"1986:8:69","nodeType":"YulIdentifier","src":"1986:8:69"},{"arguments":[{"name":"length","nativeSrc":"2000:6:69","nodeType":"YulIdentifier","src":"2000:6:69"},{"kind":"number","nativeSrc":"2008:4:69","nodeType":"YulLiteral","src":"2008:4:69","type":"","value":"0x01"}],"functionName":{"name":"mul","nativeSrc":"1996:3:69","nodeType":"YulIdentifier","src":"1996:3:69"},"nativeSrc":"1996:17:69","nodeType":"YulFunctionCall","src":"1996:17:69"}],"functionName":{"name":"add","nativeSrc":"1982:3:69","nodeType":"YulIdentifier","src":"1982:3:69"},"nativeSrc":"1982:32:69","nodeType":"YulFunctionCall","src":"1982:32:69"},{"name":"end","nativeSrc":"2016:3:69","nodeType":"YulIdentifier","src":"2016:3:69"}],"functionName":{"name":"gt","nativeSrc":"1979:2:69","nodeType":"YulIdentifier","src":"1979:2:69"},"nativeSrc":"1979:41:69","nodeType":"YulFunctionCall","src":"1979:41:69"},"nativeSrc":"1976:128:69","nodeType":"YulIf","src":"1976:128:69"}]},"name":"abi_decode_t_bytes_calldata_ptr","nativeSrc":"1558:552:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"1599:6:69","nodeType":"YulTypedName","src":"1599:6:69","type":""},{"name":"end","nativeSrc":"1607:3:69","nodeType":"YulTypedName","src":"1607:3:69","type":""}],"returnVariables":[{"name":"arrayPos","nativeSrc":"1615:8:69","nodeType":"YulTypedName","src":"1615:8:69","type":""},{"name":"length","nativeSrc":"1625:6:69","nodeType":"YulTypedName","src":"1625:6:69","type":""}],"src":"1558:552:69"},{"body":{"nativeSrc":"2218:570:69","nodeType":"YulBlock","src":"2218:570:69","statements":[{"body":{"nativeSrc":"2264:83:69","nodeType":"YulBlock","src":"2264:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"2266:77:69","nodeType":"YulIdentifier","src":"2266:77:69"},"nativeSrc":"2266:79:69","nodeType":"YulFunctionCall","src":"2266:79:69"},"nativeSrc":"2266:79:69","nodeType":"YulExpressionStatement","src":"2266:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"2239:7:69","nodeType":"YulIdentifier","src":"2239:7:69"},{"name":"headStart","nativeSrc":"2248:9:69","nodeType":"YulIdentifier","src":"2248:9:69"}],"functionName":{"name":"sub","nativeSrc":"2235:3:69","nodeType":"YulIdentifier","src":"2235:3:69"},"nativeSrc":"2235:23:69","nodeType":"YulFunctionCall","src":"2235:23:69"},{"kind":"number","nativeSrc":"2260:2:69","nodeType":"YulLiteral","src":"2260:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"2231:3:69","nodeType":"YulIdentifier","src":"2231:3:69"},"nativeSrc":"2231:32:69","nodeType":"YulFunctionCall","src":"2231:32:69"},"nativeSrc":"2228:119:69","nodeType":"YulIf","src":"2228:119:69"},{"nativeSrc":"2357:117:69","nodeType":"YulBlock","src":"2357:117:69","statements":[{"nativeSrc":"2372:15:69","nodeType":"YulVariableDeclaration","src":"2372:15:69","value":{"kind":"number","nativeSrc":"2386:1:69","nodeType":"YulLiteral","src":"2386:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"2376:6:69","nodeType":"YulTypedName","src":"2376:6:69","type":""}]},{"nativeSrc":"2401:63:69","nodeType":"YulAssignment","src":"2401:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2436:9:69","nodeType":"YulIdentifier","src":"2436:9:69"},{"name":"offset","nativeSrc":"2447:6:69","nodeType":"YulIdentifier","src":"2447:6:69"}],"functionName":{"name":"add","nativeSrc":"2432:3:69","nodeType":"YulIdentifier","src":"2432:3:69"},"nativeSrc":"2432:22:69","nodeType":"YulFunctionCall","src":"2432:22:69"},{"name":"dataEnd","nativeSrc":"2456:7:69","nodeType":"YulIdentifier","src":"2456:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"2411:20:69","nodeType":"YulIdentifier","src":"2411:20:69"},"nativeSrc":"2411:53:69","nodeType":"YulFunctionCall","src":"2411:53:69"},"variableNames":[{"name":"value0","nativeSrc":"2401:6:69","nodeType":"YulIdentifier","src":"2401:6:69"}]}]},{"nativeSrc":"2484:297:69","nodeType":"YulBlock","src":"2484:297:69","statements":[{"nativeSrc":"2499:46:69","nodeType":"YulVariableDeclaration","src":"2499:46:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2530:9:69","nodeType":"YulIdentifier","src":"2530:9:69"},{"kind":"number","nativeSrc":"2541:2:69","nodeType":"YulLiteral","src":"2541:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2526:3:69","nodeType":"YulIdentifier","src":"2526:3:69"},"nativeSrc":"2526:18:69","nodeType":"YulFunctionCall","src":"2526:18:69"}],"functionName":{"name":"calldataload","nativeSrc":"2513:12:69","nodeType":"YulIdentifier","src":"2513:12:69"},"nativeSrc":"2513:32:69","nodeType":"YulFunctionCall","src":"2513:32:69"},"variables":[{"name":"offset","nativeSrc":"2503:6:69","nodeType":"YulTypedName","src":"2503:6:69","type":""}]},{"body":{"nativeSrc":"2592:83:69","nodeType":"YulBlock","src":"2592:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"2594:77:69","nodeType":"YulIdentifier","src":"2594:77:69"},"nativeSrc":"2594:79:69","nodeType":"YulFunctionCall","src":"2594:79:69"},"nativeSrc":"2594:79:69","nodeType":"YulExpressionStatement","src":"2594:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"2564:6:69","nodeType":"YulIdentifier","src":"2564:6:69"},{"kind":"number","nativeSrc":"2572:18:69","nodeType":"YulLiteral","src":"2572:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"2561:2:69","nodeType":"YulIdentifier","src":"2561:2:69"},"nativeSrc":"2561:30:69","nodeType":"YulFunctionCall","src":"2561:30:69"},"nativeSrc":"2558:117:69","nodeType":"YulIf","src":"2558:117:69"},{"nativeSrc":"2689:82:69","nodeType":"YulAssignment","src":"2689:82:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2743:9:69","nodeType":"YulIdentifier","src":"2743:9:69"},{"name":"offset","nativeSrc":"2754:6:69","nodeType":"YulIdentifier","src":"2754:6:69"}],"functionName":{"name":"add","nativeSrc":"2739:3:69","nodeType":"YulIdentifier","src":"2739:3:69"},"nativeSrc":"2739:22:69","nodeType":"YulFunctionCall","src":"2739:22:69"},{"name":"dataEnd","nativeSrc":"2763:7:69","nodeType":"YulIdentifier","src":"2763:7:69"}],"functionName":{"name":"abi_decode_t_bytes_calldata_ptr","nativeSrc":"2707:31:69","nodeType":"YulIdentifier","src":"2707:31:69"},"nativeSrc":"2707:64:69","nodeType":"YulFunctionCall","src":"2707:64:69"},"variableNames":[{"name":"value1","nativeSrc":"2689:6:69","nodeType":"YulIdentifier","src":"2689:6:69"},{"name":"value2","nativeSrc":"2697:6:69","nodeType":"YulIdentifier","src":"2697:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_bytes_calldata_ptr","nativeSrc":"2116:672:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2172:9:69","nodeType":"YulTypedName","src":"2172:9:69","type":""},{"name":"dataEnd","nativeSrc":"2183:7:69","nodeType":"YulTypedName","src":"2183:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"2195:6:69","nodeType":"YulTypedName","src":"2195:6:69","type":""},{"name":"value1","nativeSrc":"2203:6:69","nodeType":"YulTypedName","src":"2203:6:69","type":""},{"name":"value2","nativeSrc":"2211:6:69","nodeType":"YulTypedName","src":"2211:6:69","type":""}],"src":"2116:672:69"},{"body":{"nativeSrc":"2859:53:69","nodeType":"YulBlock","src":"2859:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"2876:3:69","nodeType":"YulIdentifier","src":"2876:3:69"},{"arguments":[{"name":"value","nativeSrc":"2899:5:69","nodeType":"YulIdentifier","src":"2899:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"2881:17:69","nodeType":"YulIdentifier","src":"2881:17:69"},"nativeSrc":"2881:24:69","nodeType":"YulFunctionCall","src":"2881:24:69"}],"functionName":{"name":"mstore","nativeSrc":"2869:6:69","nodeType":"YulIdentifier","src":"2869:6:69"},"nativeSrc":"2869:37:69","nodeType":"YulFunctionCall","src":"2869:37:69"},"nativeSrc":"2869:37:69","nodeType":"YulExpressionStatement","src":"2869:37:69"}]},"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"2794:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2847:5:69","nodeType":"YulTypedName","src":"2847:5:69","type":""},{"name":"pos","nativeSrc":"2854:3:69","nodeType":"YulTypedName","src":"2854:3:69","type":""}],"src":"2794:118:69"},{"body":{"nativeSrc":"3016:124:69","nodeType":"YulBlock","src":"3016:124:69","statements":[{"nativeSrc":"3026:26:69","nodeType":"YulAssignment","src":"3026:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"3038:9:69","nodeType":"YulIdentifier","src":"3038:9:69"},{"kind":"number","nativeSrc":"3049:2:69","nodeType":"YulLiteral","src":"3049:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3034:3:69","nodeType":"YulIdentifier","src":"3034:3:69"},"nativeSrc":"3034:18:69","nodeType":"YulFunctionCall","src":"3034:18:69"},"variableNames":[{"name":"tail","nativeSrc":"3026:4:69","nodeType":"YulIdentifier","src":"3026:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"3106:6:69","nodeType":"YulIdentifier","src":"3106:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"3119:9:69","nodeType":"YulIdentifier","src":"3119:9:69"},{"kind":"number","nativeSrc":"3130:1:69","nodeType":"YulLiteral","src":"3130:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"3115:3:69","nodeType":"YulIdentifier","src":"3115:3:69"},"nativeSrc":"3115:17:69","nodeType":"YulFunctionCall","src":"3115:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"3062:43:69","nodeType":"YulIdentifier","src":"3062:43:69"},"nativeSrc":"3062:71:69","nodeType":"YulFunctionCall","src":"3062:71:69"},"nativeSrc":"3062:71:69","nodeType":"YulExpressionStatement","src":"3062:71:69"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"2918:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2988:9:69","nodeType":"YulTypedName","src":"2988:9:69","type":""},{"name":"value0","nativeSrc":"3000:6:69","nodeType":"YulTypedName","src":"3000:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3011:4:69","nodeType":"YulTypedName","src":"3011:4:69","type":""}],"src":"2918:222:69"},{"body":{"nativeSrc":"3242:73:69","nodeType":"YulBlock","src":"3242:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"3259:3:69","nodeType":"YulIdentifier","src":"3259:3:69"},{"name":"length","nativeSrc":"3264:6:69","nodeType":"YulIdentifier","src":"3264:6:69"}],"functionName":{"name":"mstore","nativeSrc":"3252:6:69","nodeType":"YulIdentifier","src":"3252:6:69"},"nativeSrc":"3252:19:69","nodeType":"YulFunctionCall","src":"3252:19:69"},"nativeSrc":"3252:19:69","nodeType":"YulExpressionStatement","src":"3252:19:69"},{"nativeSrc":"3280:29:69","nodeType":"YulAssignment","src":"3280:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"3299:3:69","nodeType":"YulIdentifier","src":"3299:3:69"},{"kind":"number","nativeSrc":"3304:4:69","nodeType":"YulLiteral","src":"3304:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"3295:3:69","nodeType":"YulIdentifier","src":"3295:3:69"},"nativeSrc":"3295:14:69","nodeType":"YulFunctionCall","src":"3295:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"3280:11:69","nodeType":"YulIdentifier","src":"3280:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"3146:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"3214:3:69","nodeType":"YulTypedName","src":"3214:3:69","type":""},{"name":"length","nativeSrc":"3219:6:69","nodeType":"YulTypedName","src":"3219:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"3230:11:69","nodeType":"YulTypedName","src":"3230:11:69","type":""}],"src":"3146:169:69"},{"body":{"nativeSrc":"3427:184:69","nodeType":"YulBlock","src":"3427:184:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"3449:6:69","nodeType":"YulIdentifier","src":"3449:6:69"},{"kind":"number","nativeSrc":"3457:1:69","nodeType":"YulLiteral","src":"3457:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"3445:3:69","nodeType":"YulIdentifier","src":"3445:3:69"},"nativeSrc":"3445:14:69","nodeType":"YulFunctionCall","src":"3445:14:69"},{"hexValue":"5472616e73706172656e745570677261646561626c6550726f78793a2061646d","kind":"string","nativeSrc":"3461:34:69","nodeType":"YulLiteral","src":"3461:34:69","type":"","value":"TransparentUpgradeableProxy: adm"}],"functionName":{"name":"mstore","nativeSrc":"3438:6:69","nodeType":"YulIdentifier","src":"3438:6:69"},"nativeSrc":"3438:58:69","nodeType":"YulFunctionCall","src":"3438:58:69"},"nativeSrc":"3438:58:69","nodeType":"YulExpressionStatement","src":"3438:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"3517:6:69","nodeType":"YulIdentifier","src":"3517:6:69"},{"kind":"number","nativeSrc":"3525:2:69","nodeType":"YulLiteral","src":"3525:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3513:3:69","nodeType":"YulIdentifier","src":"3513:3:69"},"nativeSrc":"3513:15:69","nodeType":"YulFunctionCall","src":"3513:15:69"},{"hexValue":"696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267","kind":"string","nativeSrc":"3530:34:69","nodeType":"YulLiteral","src":"3530:34:69","type":"","value":"in cannot fallback to proxy targ"}],"functionName":{"name":"mstore","nativeSrc":"3506:6:69","nodeType":"YulIdentifier","src":"3506:6:69"},"nativeSrc":"3506:59:69","nodeType":"YulFunctionCall","src":"3506:59:69"},"nativeSrc":"3506:59:69","nodeType":"YulExpressionStatement","src":"3506:59:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"3586:6:69","nodeType":"YulIdentifier","src":"3586:6:69"},{"kind":"number","nativeSrc":"3594:2:69","nodeType":"YulLiteral","src":"3594:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"3582:3:69","nodeType":"YulIdentifier","src":"3582:3:69"},"nativeSrc":"3582:15:69","nodeType":"YulFunctionCall","src":"3582:15:69"},{"hexValue":"6574","kind":"string","nativeSrc":"3599:4:69","nodeType":"YulLiteral","src":"3599:4:69","type":"","value":"et"}],"functionName":{"name":"mstore","nativeSrc":"3575:6:69","nodeType":"YulIdentifier","src":"3575:6:69"},"nativeSrc":"3575:29:69","nodeType":"YulFunctionCall","src":"3575:29:69"},"nativeSrc":"3575:29:69","nodeType":"YulExpressionStatement","src":"3575:29:69"}]},"name":"store_literal_in_memory_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d","nativeSrc":"3321:290:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"3419:6:69","nodeType":"YulTypedName","src":"3419:6:69","type":""}],"src":"3321:290:69"},{"body":{"nativeSrc":"3763:220:69","nodeType":"YulBlock","src":"3763:220:69","statements":[{"nativeSrc":"3773:74:69","nodeType":"YulAssignment","src":"3773:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"3839:3:69","nodeType":"YulIdentifier","src":"3839:3:69"},{"kind":"number","nativeSrc":"3844:2:69","nodeType":"YulLiteral","src":"3844:2:69","type":"","value":"66"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"3780:58:69","nodeType":"YulIdentifier","src":"3780:58:69"},"nativeSrc":"3780:67:69","nodeType":"YulFunctionCall","src":"3780:67:69"},"variableNames":[{"name":"pos","nativeSrc":"3773:3:69","nodeType":"YulIdentifier","src":"3773:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"3945:3:69","nodeType":"YulIdentifier","src":"3945:3:69"}],"functionName":{"name":"store_literal_in_memory_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d","nativeSrc":"3856:88:69","nodeType":"YulIdentifier","src":"3856:88:69"},"nativeSrc":"3856:93:69","nodeType":"YulFunctionCall","src":"3856:93:69"},"nativeSrc":"3856:93:69","nodeType":"YulExpressionStatement","src":"3856:93:69"},{"nativeSrc":"3958:19:69","nodeType":"YulAssignment","src":"3958:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"3969:3:69","nodeType":"YulIdentifier","src":"3969:3:69"},{"kind":"number","nativeSrc":"3974:2:69","nodeType":"YulLiteral","src":"3974:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"3965:3:69","nodeType":"YulIdentifier","src":"3965:3:69"},"nativeSrc":"3965:12:69","nodeType":"YulFunctionCall","src":"3965:12:69"},"variableNames":[{"name":"end","nativeSrc":"3958:3:69","nodeType":"YulIdentifier","src":"3958:3:69"}]}]},"name":"abi_encode_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d_to_t_string_memory_ptr_fromStack","nativeSrc":"3617:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"3751:3:69","nodeType":"YulTypedName","src":"3751:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"3759:3:69","nodeType":"YulTypedName","src":"3759:3:69","type":""}],"src":"3617:366:69"},{"body":{"nativeSrc":"4160:248:69","nodeType":"YulBlock","src":"4160:248:69","statements":[{"nativeSrc":"4170:26:69","nodeType":"YulAssignment","src":"4170:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"4182:9:69","nodeType":"YulIdentifier","src":"4182:9:69"},{"kind":"number","nativeSrc":"4193:2:69","nodeType":"YulLiteral","src":"4193:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4178:3:69","nodeType":"YulIdentifier","src":"4178:3:69"},"nativeSrc":"4178:18:69","nodeType":"YulFunctionCall","src":"4178:18:69"},"variableNames":[{"name":"tail","nativeSrc":"4170:4:69","nodeType":"YulIdentifier","src":"4170:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4217:9:69","nodeType":"YulIdentifier","src":"4217:9:69"},{"kind":"number","nativeSrc":"4228:1:69","nodeType":"YulLiteral","src":"4228:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4213:3:69","nodeType":"YulIdentifier","src":"4213:3:69"},"nativeSrc":"4213:17:69","nodeType":"YulFunctionCall","src":"4213:17:69"},{"arguments":[{"name":"tail","nativeSrc":"4236:4:69","nodeType":"YulIdentifier","src":"4236:4:69"},{"name":"headStart","nativeSrc":"4242:9:69","nodeType":"YulIdentifier","src":"4242:9:69"}],"functionName":{"name":"sub","nativeSrc":"4232:3:69","nodeType":"YulIdentifier","src":"4232:3:69"},"nativeSrc":"4232:20:69","nodeType":"YulFunctionCall","src":"4232:20:69"}],"functionName":{"name":"mstore","nativeSrc":"4206:6:69","nodeType":"YulIdentifier","src":"4206:6:69"},"nativeSrc":"4206:47:69","nodeType":"YulFunctionCall","src":"4206:47:69"},"nativeSrc":"4206:47:69","nodeType":"YulExpressionStatement","src":"4206:47:69"},{"nativeSrc":"4262:139:69","nodeType":"YulAssignment","src":"4262:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"4396:4:69","nodeType":"YulIdentifier","src":"4396:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d_to_t_string_memory_ptr_fromStack","nativeSrc":"4270:124:69","nodeType":"YulIdentifier","src":"4270:124:69"},"nativeSrc":"4270:131:69","nodeType":"YulFunctionCall","src":"4270:131:69"},"variableNames":[{"name":"tail","nativeSrc":"4262:4:69","nodeType":"YulIdentifier","src":"4262:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"3989:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4140:9:69","nodeType":"YulTypedName","src":"4140:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4155:4:69","nodeType":"YulTypedName","src":"4155:4:69","type":""}],"src":"3989:419:69"},{"body":{"nativeSrc":"4540:206:69","nodeType":"YulBlock","src":"4540:206:69","statements":[{"nativeSrc":"4550:26:69","nodeType":"YulAssignment","src":"4550:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"4562:9:69","nodeType":"YulIdentifier","src":"4562:9:69"},{"kind":"number","nativeSrc":"4573:2:69","nodeType":"YulLiteral","src":"4573:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"4558:3:69","nodeType":"YulIdentifier","src":"4558:3:69"},"nativeSrc":"4558:18:69","nodeType":"YulFunctionCall","src":"4558:18:69"},"variableNames":[{"name":"tail","nativeSrc":"4550:4:69","nodeType":"YulIdentifier","src":"4550:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"4630:6:69","nodeType":"YulIdentifier","src":"4630:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"4643:9:69","nodeType":"YulIdentifier","src":"4643:9:69"},{"kind":"number","nativeSrc":"4654:1:69","nodeType":"YulLiteral","src":"4654:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4639:3:69","nodeType":"YulIdentifier","src":"4639:3:69"},"nativeSrc":"4639:17:69","nodeType":"YulFunctionCall","src":"4639:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"4586:43:69","nodeType":"YulIdentifier","src":"4586:43:69"},"nativeSrc":"4586:71:69","nodeType":"YulFunctionCall","src":"4586:71:69"},"nativeSrc":"4586:71:69","nodeType":"YulExpressionStatement","src":"4586:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"4711:6:69","nodeType":"YulIdentifier","src":"4711:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"4724:9:69","nodeType":"YulIdentifier","src":"4724:9:69"},{"kind":"number","nativeSrc":"4735:2:69","nodeType":"YulLiteral","src":"4735:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4720:3:69","nodeType":"YulIdentifier","src":"4720:3:69"},"nativeSrc":"4720:18:69","nodeType":"YulFunctionCall","src":"4720:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"4667:43:69","nodeType":"YulIdentifier","src":"4667:43:69"},"nativeSrc":"4667:72:69","nodeType":"YulFunctionCall","src":"4667:72:69"},"nativeSrc":"4667:72:69","nodeType":"YulExpressionStatement","src":"4667:72:69"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nativeSrc":"4414:332:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4504:9:69","nodeType":"YulTypedName","src":"4504:9:69","type":""},{"name":"value1","nativeSrc":"4516:6:69","nodeType":"YulTypedName","src":"4516:6:69","type":""},{"name":"value0","nativeSrc":"4524:6:69","nodeType":"YulTypedName","src":"4524:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4535:4:69","nodeType":"YulTypedName","src":"4535:4:69","type":""}],"src":"4414:332:69"},{"body":{"nativeSrc":"4858:119:69","nodeType":"YulBlock","src":"4858:119:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"4880:6:69","nodeType":"YulIdentifier","src":"4880:6:69"},{"kind":"number","nativeSrc":"4888:1:69","nodeType":"YulLiteral","src":"4888:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4876:3:69","nodeType":"YulIdentifier","src":"4876:3:69"},"nativeSrc":"4876:14:69","nodeType":"YulFunctionCall","src":"4876:14:69"},{"hexValue":"455243313936373a206e65772061646d696e20697320746865207a65726f2061","kind":"string","nativeSrc":"4892:34:69","nodeType":"YulLiteral","src":"4892:34:69","type":"","value":"ERC1967: new admin is the zero a"}],"functionName":{"name":"mstore","nativeSrc":"4869:6:69","nodeType":"YulIdentifier","src":"4869:6:69"},"nativeSrc":"4869:58:69","nodeType":"YulFunctionCall","src":"4869:58:69"},"nativeSrc":"4869:58:69","nodeType":"YulExpressionStatement","src":"4869:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"4948:6:69","nodeType":"YulIdentifier","src":"4948:6:69"},{"kind":"number","nativeSrc":"4956:2:69","nodeType":"YulLiteral","src":"4956:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4944:3:69","nodeType":"YulIdentifier","src":"4944:3:69"},"nativeSrc":"4944:15:69","nodeType":"YulFunctionCall","src":"4944:15:69"},{"hexValue":"646472657373","kind":"string","nativeSrc":"4961:8:69","nodeType":"YulLiteral","src":"4961:8:69","type":"","value":"ddress"}],"functionName":{"name":"mstore","nativeSrc":"4937:6:69","nodeType":"YulIdentifier","src":"4937:6:69"},"nativeSrc":"4937:33:69","nodeType":"YulFunctionCall","src":"4937:33:69"},"nativeSrc":"4937:33:69","nodeType":"YulExpressionStatement","src":"4937:33:69"}]},"name":"store_literal_in_memory_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5","nativeSrc":"4752:225:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"4850:6:69","nodeType":"YulTypedName","src":"4850:6:69","type":""}],"src":"4752:225:69"},{"body":{"nativeSrc":"5129:220:69","nodeType":"YulBlock","src":"5129:220:69","statements":[{"nativeSrc":"5139:74:69","nodeType":"YulAssignment","src":"5139:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"5205:3:69","nodeType":"YulIdentifier","src":"5205:3:69"},{"kind":"number","nativeSrc":"5210:2:69","nodeType":"YulLiteral","src":"5210:2:69","type":"","value":"38"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"5146:58:69","nodeType":"YulIdentifier","src":"5146:58:69"},"nativeSrc":"5146:67:69","nodeType":"YulFunctionCall","src":"5146:67:69"},"variableNames":[{"name":"pos","nativeSrc":"5139:3:69","nodeType":"YulIdentifier","src":"5139:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"5311:3:69","nodeType":"YulIdentifier","src":"5311:3:69"}],"functionName":{"name":"store_literal_in_memory_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5","nativeSrc":"5222:88:69","nodeType":"YulIdentifier","src":"5222:88:69"},"nativeSrc":"5222:93:69","nodeType":"YulFunctionCall","src":"5222:93:69"},"nativeSrc":"5222:93:69","nodeType":"YulExpressionStatement","src":"5222:93:69"},{"nativeSrc":"5324:19:69","nodeType":"YulAssignment","src":"5324:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"5335:3:69","nodeType":"YulIdentifier","src":"5335:3:69"},{"kind":"number","nativeSrc":"5340:2:69","nodeType":"YulLiteral","src":"5340:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"5331:3:69","nodeType":"YulIdentifier","src":"5331:3:69"},"nativeSrc":"5331:12:69","nodeType":"YulFunctionCall","src":"5331:12:69"},"variableNames":[{"name":"end","nativeSrc":"5324:3:69","nodeType":"YulIdentifier","src":"5324:3:69"}]}]},"name":"abi_encode_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5_to_t_string_memory_ptr_fromStack","nativeSrc":"4983:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"5117:3:69","nodeType":"YulTypedName","src":"5117:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"5125:3:69","nodeType":"YulTypedName","src":"5125:3:69","type":""}],"src":"4983:366:69"},{"body":{"nativeSrc":"5526:248:69","nodeType":"YulBlock","src":"5526:248:69","statements":[{"nativeSrc":"5536:26:69","nodeType":"YulAssignment","src":"5536:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"5548:9:69","nodeType":"YulIdentifier","src":"5548:9:69"},{"kind":"number","nativeSrc":"5559:2:69","nodeType":"YulLiteral","src":"5559:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5544:3:69","nodeType":"YulIdentifier","src":"5544:3:69"},"nativeSrc":"5544:18:69","nodeType":"YulFunctionCall","src":"5544:18:69"},"variableNames":[{"name":"tail","nativeSrc":"5536:4:69","nodeType":"YulIdentifier","src":"5536:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5583:9:69","nodeType":"YulIdentifier","src":"5583:9:69"},{"kind":"number","nativeSrc":"5594:1:69","nodeType":"YulLiteral","src":"5594:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5579:3:69","nodeType":"YulIdentifier","src":"5579:3:69"},"nativeSrc":"5579:17:69","nodeType":"YulFunctionCall","src":"5579:17:69"},{"arguments":[{"name":"tail","nativeSrc":"5602:4:69","nodeType":"YulIdentifier","src":"5602:4:69"},{"name":"headStart","nativeSrc":"5608:9:69","nodeType":"YulIdentifier","src":"5608:9:69"}],"functionName":{"name":"sub","nativeSrc":"5598:3:69","nodeType":"YulIdentifier","src":"5598:3:69"},"nativeSrc":"5598:20:69","nodeType":"YulFunctionCall","src":"5598:20:69"}],"functionName":{"name":"mstore","nativeSrc":"5572:6:69","nodeType":"YulIdentifier","src":"5572:6:69"},"nativeSrc":"5572:47:69","nodeType":"YulFunctionCall","src":"5572:47:69"},"nativeSrc":"5572:47:69","nodeType":"YulExpressionStatement","src":"5572:47:69"},{"nativeSrc":"5628:139:69","nodeType":"YulAssignment","src":"5628:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"5762:4:69","nodeType":"YulIdentifier","src":"5762:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5_to_t_string_memory_ptr_fromStack","nativeSrc":"5636:124:69","nodeType":"YulIdentifier","src":"5636:124:69"},"nativeSrc":"5636:131:69","nodeType":"YulFunctionCall","src":"5636:131:69"},"variableNames":[{"name":"tail","nativeSrc":"5628:4:69","nodeType":"YulIdentifier","src":"5628:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"5355:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5506:9:69","nodeType":"YulTypedName","src":"5506:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"5521:4:69","nodeType":"YulTypedName","src":"5521:4:69","type":""}],"src":"5355:419:69"},{"body":{"nativeSrc":"5886:126:69","nodeType":"YulBlock","src":"5886:126:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"5908:6:69","nodeType":"YulIdentifier","src":"5908:6:69"},{"kind":"number","nativeSrc":"5916:1:69","nodeType":"YulLiteral","src":"5916:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5904:3:69","nodeType":"YulIdentifier","src":"5904:3:69"},"nativeSrc":"5904:14:69","nodeType":"YulFunctionCall","src":"5904:14:69"},{"hexValue":"455243313936373a206e657720696d706c656d656e746174696f6e206973206e","kind":"string","nativeSrc":"5920:34:69","nodeType":"YulLiteral","src":"5920:34:69","type":"","value":"ERC1967: new implementation is n"}],"functionName":{"name":"mstore","nativeSrc":"5897:6:69","nodeType":"YulIdentifier","src":"5897:6:69"},"nativeSrc":"5897:58:69","nodeType":"YulFunctionCall","src":"5897:58:69"},"nativeSrc":"5897:58:69","nodeType":"YulExpressionStatement","src":"5897:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"5976:6:69","nodeType":"YulIdentifier","src":"5976:6:69"},{"kind":"number","nativeSrc":"5984:2:69","nodeType":"YulLiteral","src":"5984:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5972:3:69","nodeType":"YulIdentifier","src":"5972:3:69"},"nativeSrc":"5972:15:69","nodeType":"YulFunctionCall","src":"5972:15:69"},{"hexValue":"6f74206120636f6e7472616374","kind":"string","nativeSrc":"5989:15:69","nodeType":"YulLiteral","src":"5989:15:69","type":"","value":"ot a contract"}],"functionName":{"name":"mstore","nativeSrc":"5965:6:69","nodeType":"YulIdentifier","src":"5965:6:69"},"nativeSrc":"5965:40:69","nodeType":"YulFunctionCall","src":"5965:40:69"},"nativeSrc":"5965:40:69","nodeType":"YulExpressionStatement","src":"5965:40:69"}]},"name":"store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65","nativeSrc":"5780:232:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"5878:6:69","nodeType":"YulTypedName","src":"5878:6:69","type":""}],"src":"5780:232:69"},{"body":{"nativeSrc":"6164:220:69","nodeType":"YulBlock","src":"6164:220:69","statements":[{"nativeSrc":"6174:74:69","nodeType":"YulAssignment","src":"6174:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"6240:3:69","nodeType":"YulIdentifier","src":"6240:3:69"},{"kind":"number","nativeSrc":"6245:2:69","nodeType":"YulLiteral","src":"6245:2:69","type":"","value":"45"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"6181:58:69","nodeType":"YulIdentifier","src":"6181:58:69"},"nativeSrc":"6181:67:69","nodeType":"YulFunctionCall","src":"6181:67:69"},"variableNames":[{"name":"pos","nativeSrc":"6174:3:69","nodeType":"YulIdentifier","src":"6174:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"6346:3:69","nodeType":"YulIdentifier","src":"6346:3:69"}],"functionName":{"name":"store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65","nativeSrc":"6257:88:69","nodeType":"YulIdentifier","src":"6257:88:69"},"nativeSrc":"6257:93:69","nodeType":"YulFunctionCall","src":"6257:93:69"},"nativeSrc":"6257:93:69","nodeType":"YulExpressionStatement","src":"6257:93:69"},{"nativeSrc":"6359:19:69","nodeType":"YulAssignment","src":"6359:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"6370:3:69","nodeType":"YulIdentifier","src":"6370:3:69"},{"kind":"number","nativeSrc":"6375:2:69","nodeType":"YulLiteral","src":"6375:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"6366:3:69","nodeType":"YulIdentifier","src":"6366:3:69"},"nativeSrc":"6366:12:69","nodeType":"YulFunctionCall","src":"6366:12:69"},"variableNames":[{"name":"end","nativeSrc":"6359:3:69","nodeType":"YulIdentifier","src":"6359:3:69"}]}]},"name":"abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack","nativeSrc":"6018:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"6152:3:69","nodeType":"YulTypedName","src":"6152:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"6160:3:69","nodeType":"YulTypedName","src":"6160:3:69","type":""}],"src":"6018:366:69"},{"body":{"nativeSrc":"6561:248:69","nodeType":"YulBlock","src":"6561:248:69","statements":[{"nativeSrc":"6571:26:69","nodeType":"YulAssignment","src":"6571:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"6583:9:69","nodeType":"YulIdentifier","src":"6583:9:69"},{"kind":"number","nativeSrc":"6594:2:69","nodeType":"YulLiteral","src":"6594:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"6579:3:69","nodeType":"YulIdentifier","src":"6579:3:69"},"nativeSrc":"6579:18:69","nodeType":"YulFunctionCall","src":"6579:18:69"},"variableNames":[{"name":"tail","nativeSrc":"6571:4:69","nodeType":"YulIdentifier","src":"6571:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6618:9:69","nodeType":"YulIdentifier","src":"6618:9:69"},{"kind":"number","nativeSrc":"6629:1:69","nodeType":"YulLiteral","src":"6629:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"6614:3:69","nodeType":"YulIdentifier","src":"6614:3:69"},"nativeSrc":"6614:17:69","nodeType":"YulFunctionCall","src":"6614:17:69"},{"arguments":[{"name":"tail","nativeSrc":"6637:4:69","nodeType":"YulIdentifier","src":"6637:4:69"},{"name":"headStart","nativeSrc":"6643:9:69","nodeType":"YulIdentifier","src":"6643:9:69"}],"functionName":{"name":"sub","nativeSrc":"6633:3:69","nodeType":"YulIdentifier","src":"6633:3:69"},"nativeSrc":"6633:20:69","nodeType":"YulFunctionCall","src":"6633:20:69"}],"functionName":{"name":"mstore","nativeSrc":"6607:6:69","nodeType":"YulIdentifier","src":"6607:6:69"},"nativeSrc":"6607:47:69","nodeType":"YulFunctionCall","src":"6607:47:69"},"nativeSrc":"6607:47:69","nodeType":"YulExpressionStatement","src":"6607:47:69"},{"nativeSrc":"6663:139:69","nodeType":"YulAssignment","src":"6663:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"6797:4:69","nodeType":"YulIdentifier","src":"6797:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack","nativeSrc":"6671:124:69","nodeType":"YulIdentifier","src":"6671:124:69"},"nativeSrc":"6671:131:69","nodeType":"YulFunctionCall","src":"6671:131:69"},"variableNames":[{"name":"tail","nativeSrc":"6663:4:69","nodeType":"YulIdentifier","src":"6663:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"6390:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6541:9:69","nodeType":"YulTypedName","src":"6541:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"6556:4:69","nodeType":"YulTypedName","src":"6556:4:69","type":""}],"src":"6390:419:69"},{"body":{"nativeSrc":"6921:119:69","nodeType":"YulBlock","src":"6921:119:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"6943:6:69","nodeType":"YulIdentifier","src":"6943:6:69"},{"kind":"number","nativeSrc":"6951:1:69","nodeType":"YulLiteral","src":"6951:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"6939:3:69","nodeType":"YulIdentifier","src":"6939:3:69"},"nativeSrc":"6939:14:69","nodeType":"YulFunctionCall","src":"6939:14:69"},{"hexValue":"416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f","kind":"string","nativeSrc":"6955:34:69","nodeType":"YulLiteral","src":"6955:34:69","type":"","value":"Address: delegate call to non-co"}],"functionName":{"name":"mstore","nativeSrc":"6932:6:69","nodeType":"YulIdentifier","src":"6932:6:69"},"nativeSrc":"6932:58:69","nodeType":"YulFunctionCall","src":"6932:58:69"},"nativeSrc":"6932:58:69","nodeType":"YulExpressionStatement","src":"6932:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"7011:6:69","nodeType":"YulIdentifier","src":"7011:6:69"},{"kind":"number","nativeSrc":"7019:2:69","nodeType":"YulLiteral","src":"7019:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7007:3:69","nodeType":"YulIdentifier","src":"7007:3:69"},"nativeSrc":"7007:15:69","nodeType":"YulFunctionCall","src":"7007:15:69"},{"hexValue":"6e7472616374","kind":"string","nativeSrc":"7024:8:69","nodeType":"YulLiteral","src":"7024:8:69","type":"","value":"ntract"}],"functionName":{"name":"mstore","nativeSrc":"7000:6:69","nodeType":"YulIdentifier","src":"7000:6:69"},"nativeSrc":"7000:33:69","nodeType":"YulFunctionCall","src":"7000:33:69"},"nativeSrc":"7000:33:69","nodeType":"YulExpressionStatement","src":"7000:33:69"}]},"name":"store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520","nativeSrc":"6815:225:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"6913:6:69","nodeType":"YulTypedName","src":"6913:6:69","type":""}],"src":"6815:225:69"},{"body":{"nativeSrc":"7192:220:69","nodeType":"YulBlock","src":"7192:220:69","statements":[{"nativeSrc":"7202:74:69","nodeType":"YulAssignment","src":"7202:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"7268:3:69","nodeType":"YulIdentifier","src":"7268:3:69"},{"kind":"number","nativeSrc":"7273:2:69","nodeType":"YulLiteral","src":"7273:2:69","type":"","value":"38"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"7209:58:69","nodeType":"YulIdentifier","src":"7209:58:69"},"nativeSrc":"7209:67:69","nodeType":"YulFunctionCall","src":"7209:67:69"},"variableNames":[{"name":"pos","nativeSrc":"7202:3:69","nodeType":"YulIdentifier","src":"7202:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"7374:3:69","nodeType":"YulIdentifier","src":"7374:3:69"}],"functionName":{"name":"store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520","nativeSrc":"7285:88:69","nodeType":"YulIdentifier","src":"7285:88:69"},"nativeSrc":"7285:93:69","nodeType":"YulFunctionCall","src":"7285:93:69"},"nativeSrc":"7285:93:69","nodeType":"YulExpressionStatement","src":"7285:93:69"},{"nativeSrc":"7387:19:69","nodeType":"YulAssignment","src":"7387:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"7398:3:69","nodeType":"YulIdentifier","src":"7398:3:69"},{"kind":"number","nativeSrc":"7403:2:69","nodeType":"YulLiteral","src":"7403:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"7394:3:69","nodeType":"YulIdentifier","src":"7394:3:69"},"nativeSrc":"7394:12:69","nodeType":"YulFunctionCall","src":"7394:12:69"},"variableNames":[{"name":"end","nativeSrc":"7387:3:69","nodeType":"YulIdentifier","src":"7387:3:69"}]}]},"name":"abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack","nativeSrc":"7046:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"7180:3:69","nodeType":"YulTypedName","src":"7180:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"7188:3:69","nodeType":"YulTypedName","src":"7188:3:69","type":""}],"src":"7046:366:69"},{"body":{"nativeSrc":"7589:248:69","nodeType":"YulBlock","src":"7589:248:69","statements":[{"nativeSrc":"7599:26:69","nodeType":"YulAssignment","src":"7599:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"7611:9:69","nodeType":"YulIdentifier","src":"7611:9:69"},{"kind":"number","nativeSrc":"7622:2:69","nodeType":"YulLiteral","src":"7622:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7607:3:69","nodeType":"YulIdentifier","src":"7607:3:69"},"nativeSrc":"7607:18:69","nodeType":"YulFunctionCall","src":"7607:18:69"},"variableNames":[{"name":"tail","nativeSrc":"7599:4:69","nodeType":"YulIdentifier","src":"7599:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7646:9:69","nodeType":"YulIdentifier","src":"7646:9:69"},{"kind":"number","nativeSrc":"7657:1:69","nodeType":"YulLiteral","src":"7657:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"7642:3:69","nodeType":"YulIdentifier","src":"7642:3:69"},"nativeSrc":"7642:17:69","nodeType":"YulFunctionCall","src":"7642:17:69"},{"arguments":[{"name":"tail","nativeSrc":"7665:4:69","nodeType":"YulIdentifier","src":"7665:4:69"},{"name":"headStart","nativeSrc":"7671:9:69","nodeType":"YulIdentifier","src":"7671:9:69"}],"functionName":{"name":"sub","nativeSrc":"7661:3:69","nodeType":"YulIdentifier","src":"7661:3:69"},"nativeSrc":"7661:20:69","nodeType":"YulFunctionCall","src":"7661:20:69"}],"functionName":{"name":"mstore","nativeSrc":"7635:6:69","nodeType":"YulIdentifier","src":"7635:6:69"},"nativeSrc":"7635:47:69","nodeType":"YulFunctionCall","src":"7635:47:69"},"nativeSrc":"7635:47:69","nodeType":"YulExpressionStatement","src":"7635:47:69"},{"nativeSrc":"7691:139:69","nodeType":"YulAssignment","src":"7691:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"7825:4:69","nodeType":"YulIdentifier","src":"7825:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack","nativeSrc":"7699:124:69","nodeType":"YulIdentifier","src":"7699:124:69"},"nativeSrc":"7699:131:69","nodeType":"YulFunctionCall","src":"7699:131:69"},"variableNames":[{"name":"tail","nativeSrc":"7691:4:69","nodeType":"YulIdentifier","src":"7691:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"7418:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"7569:9:69","nodeType":"YulTypedName","src":"7569:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"7584:4:69","nodeType":"YulTypedName","src":"7584:4:69","type":""}],"src":"7418:419:69"},{"body":{"nativeSrc":"7901:40:69","nodeType":"YulBlock","src":"7901:40:69","statements":[{"nativeSrc":"7912:22:69","nodeType":"YulAssignment","src":"7912:22:69","value":{"arguments":[{"name":"value","nativeSrc":"7928:5:69","nodeType":"YulIdentifier","src":"7928:5:69"}],"functionName":{"name":"mload","nativeSrc":"7922:5:69","nodeType":"YulIdentifier","src":"7922:5:69"},"nativeSrc":"7922:12:69","nodeType":"YulFunctionCall","src":"7922:12:69"},"variableNames":[{"name":"length","nativeSrc":"7912:6:69","nodeType":"YulIdentifier","src":"7912:6:69"}]}]},"name":"array_length_t_bytes_memory_ptr","nativeSrc":"7843:98:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7884:5:69","nodeType":"YulTypedName","src":"7884:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"7894:6:69","nodeType":"YulTypedName","src":"7894:6:69","type":""}],"src":"7843:98:69"},{"body":{"nativeSrc":"8060:34:69","nodeType":"YulBlock","src":"8060:34:69","statements":[{"nativeSrc":"8070:18:69","nodeType":"YulAssignment","src":"8070:18:69","value":{"name":"pos","nativeSrc":"8085:3:69","nodeType":"YulIdentifier","src":"8085:3:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"8070:11:69","nodeType":"YulIdentifier","src":"8070:11:69"}]}]},"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"7947:147:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"8032:3:69","nodeType":"YulTypedName","src":"8032:3:69","type":""},{"name":"length","nativeSrc":"8037:6:69","nodeType":"YulTypedName","src":"8037:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"8048:11:69","nodeType":"YulTypedName","src":"8048:11:69","type":""}],"src":"7947:147:69"},{"body":{"nativeSrc":"8162:186:69","nodeType":"YulBlock","src":"8162:186:69","statements":[{"nativeSrc":"8173:10:69","nodeType":"YulVariableDeclaration","src":"8173:10:69","value":{"kind":"number","nativeSrc":"8182:1:69","nodeType":"YulLiteral","src":"8182:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"8177:1:69","nodeType":"YulTypedName","src":"8177:1:69","type":""}]},{"body":{"nativeSrc":"8242:63:69","nodeType":"YulBlock","src":"8242:63:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"8267:3:69","nodeType":"YulIdentifier","src":"8267:3:69"},{"name":"i","nativeSrc":"8272:1:69","nodeType":"YulIdentifier","src":"8272:1:69"}],"functionName":{"name":"add","nativeSrc":"8263:3:69","nodeType":"YulIdentifier","src":"8263:3:69"},"nativeSrc":"8263:11:69","nodeType":"YulFunctionCall","src":"8263:11:69"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"8286:3:69","nodeType":"YulIdentifier","src":"8286:3:69"},{"name":"i","nativeSrc":"8291:1:69","nodeType":"YulIdentifier","src":"8291:1:69"}],"functionName":{"name":"add","nativeSrc":"8282:3:69","nodeType":"YulIdentifier","src":"8282:3:69"},"nativeSrc":"8282:11:69","nodeType":"YulFunctionCall","src":"8282:11:69"}],"functionName":{"name":"mload","nativeSrc":"8276:5:69","nodeType":"YulIdentifier","src":"8276:5:69"},"nativeSrc":"8276:18:69","nodeType":"YulFunctionCall","src":"8276:18:69"}],"functionName":{"name":"mstore","nativeSrc":"8256:6:69","nodeType":"YulIdentifier","src":"8256:6:69"},"nativeSrc":"8256:39:69","nodeType":"YulFunctionCall","src":"8256:39:69"},"nativeSrc":"8256:39:69","nodeType":"YulExpressionStatement","src":"8256:39:69"}]},"condition":{"arguments":[{"name":"i","nativeSrc":"8203:1:69","nodeType":"YulIdentifier","src":"8203:1:69"},{"name":"length","nativeSrc":"8206:6:69","nodeType":"YulIdentifier","src":"8206:6:69"}],"functionName":{"name":"lt","nativeSrc":"8200:2:69","nodeType":"YulIdentifier","src":"8200:2:69"},"nativeSrc":"8200:13:69","nodeType":"YulFunctionCall","src":"8200:13:69"},"nativeSrc":"8192:113:69","nodeType":"YulForLoop","post":{"nativeSrc":"8214:19:69","nodeType":"YulBlock","src":"8214:19:69","statements":[{"nativeSrc":"8216:15:69","nodeType":"YulAssignment","src":"8216:15:69","value":{"arguments":[{"name":"i","nativeSrc":"8225:1:69","nodeType":"YulIdentifier","src":"8225:1:69"},{"kind":"number","nativeSrc":"8228:2:69","nodeType":"YulLiteral","src":"8228:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8221:3:69","nodeType":"YulIdentifier","src":"8221:3:69"},"nativeSrc":"8221:10:69","nodeType":"YulFunctionCall","src":"8221:10:69"},"variableNames":[{"name":"i","nativeSrc":"8216:1:69","nodeType":"YulIdentifier","src":"8216:1:69"}]}]},"pre":{"nativeSrc":"8196:3:69","nodeType":"YulBlock","src":"8196:3:69","statements":[]},"src":"8192:113:69"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"8325:3:69","nodeType":"YulIdentifier","src":"8325:3:69"},{"name":"length","nativeSrc":"8330:6:69","nodeType":"YulIdentifier","src":"8330:6:69"}],"functionName":{"name":"add","nativeSrc":"8321:3:69","nodeType":"YulIdentifier","src":"8321:3:69"},"nativeSrc":"8321:16:69","nodeType":"YulFunctionCall","src":"8321:16:69"},{"kind":"number","nativeSrc":"8339:1:69","nodeType":"YulLiteral","src":"8339:1:69","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"8314:6:69","nodeType":"YulIdentifier","src":"8314:6:69"},"nativeSrc":"8314:27:69","nodeType":"YulFunctionCall","src":"8314:27:69"},"nativeSrc":"8314:27:69","nodeType":"YulExpressionStatement","src":"8314:27:69"}]},"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"8100:248:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"8144:3:69","nodeType":"YulTypedName","src":"8144:3:69","type":""},{"name":"dst","nativeSrc":"8149:3:69","nodeType":"YulTypedName","src":"8149:3:69","type":""},{"name":"length","nativeSrc":"8154:6:69","nodeType":"YulTypedName","src":"8154:6:69","type":""}],"src":"8100:248:69"},{"body":{"nativeSrc":"8462:278:69","nodeType":"YulBlock","src":"8462:278:69","statements":[{"nativeSrc":"8472:52:69","nodeType":"YulVariableDeclaration","src":"8472:52:69","value":{"arguments":[{"name":"value","nativeSrc":"8518:5:69","nodeType":"YulIdentifier","src":"8518:5:69"}],"functionName":{"name":"array_length_t_bytes_memory_ptr","nativeSrc":"8486:31:69","nodeType":"YulIdentifier","src":"8486:31:69"},"nativeSrc":"8486:38:69","nodeType":"YulFunctionCall","src":"8486:38:69"},"variables":[{"name":"length","nativeSrc":"8476:6:69","nodeType":"YulTypedName","src":"8476:6:69","type":""}]},{"nativeSrc":"8533:95:69","nodeType":"YulAssignment","src":"8533:95:69","value":{"arguments":[{"name":"pos","nativeSrc":"8616:3:69","nodeType":"YulIdentifier","src":"8616:3:69"},{"name":"length","nativeSrc":"8621:6:69","nodeType":"YulIdentifier","src":"8621:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"8540:75:69","nodeType":"YulIdentifier","src":"8540:75:69"},"nativeSrc":"8540:88:69","nodeType":"YulFunctionCall","src":"8540:88:69"},"variableNames":[{"name":"pos","nativeSrc":"8533:3:69","nodeType":"YulIdentifier","src":"8533:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"8676:5:69","nodeType":"YulIdentifier","src":"8676:5:69"},{"kind":"number","nativeSrc":"8683:4:69","nodeType":"YulLiteral","src":"8683:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"8672:3:69","nodeType":"YulIdentifier","src":"8672:3:69"},"nativeSrc":"8672:16:69","nodeType":"YulFunctionCall","src":"8672:16:69"},{"name":"pos","nativeSrc":"8690:3:69","nodeType":"YulIdentifier","src":"8690:3:69"},{"name":"length","nativeSrc":"8695:6:69","nodeType":"YulIdentifier","src":"8695:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"8637:34:69","nodeType":"YulIdentifier","src":"8637:34:69"},"nativeSrc":"8637:65:69","nodeType":"YulFunctionCall","src":"8637:65:69"},"nativeSrc":"8637:65:69","nodeType":"YulExpressionStatement","src":"8637:65:69"},{"nativeSrc":"8711:23:69","nodeType":"YulAssignment","src":"8711:23:69","value":{"arguments":[{"name":"pos","nativeSrc":"8722:3:69","nodeType":"YulIdentifier","src":"8722:3:69"},{"name":"length","nativeSrc":"8727:6:69","nodeType":"YulIdentifier","src":"8727:6:69"}],"functionName":{"name":"add","nativeSrc":"8718:3:69","nodeType":"YulIdentifier","src":"8718:3:69"},"nativeSrc":"8718:16:69","nodeType":"YulFunctionCall","src":"8718:16:69"},"variableNames":[{"name":"end","nativeSrc":"8711:3:69","nodeType":"YulIdentifier","src":"8711:3:69"}]}]},"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"8354:386:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"8443:5:69","nodeType":"YulTypedName","src":"8443:5:69","type":""},{"name":"pos","nativeSrc":"8450:3:69","nodeType":"YulTypedName","src":"8450:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"8458:3:69","nodeType":"YulTypedName","src":"8458:3:69","type":""}],"src":"8354:386:69"},{"body":{"nativeSrc":"8880:137:69","nodeType":"YulBlock","src":"8880:137:69","statements":[{"nativeSrc":"8891:100:69","nodeType":"YulAssignment","src":"8891:100:69","value":{"arguments":[{"name":"value0","nativeSrc":"8978:6:69","nodeType":"YulIdentifier","src":"8978:6:69"},{"name":"pos","nativeSrc":"8987:3:69","nodeType":"YulIdentifier","src":"8987:3:69"}],"functionName":{"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"8898:79:69","nodeType":"YulIdentifier","src":"8898:79:69"},"nativeSrc":"8898:93:69","nodeType":"YulFunctionCall","src":"8898:93:69"},"variableNames":[{"name":"pos","nativeSrc":"8891:3:69","nodeType":"YulIdentifier","src":"8891:3:69"}]},{"nativeSrc":"9001:10:69","nodeType":"YulAssignment","src":"9001:10:69","value":{"name":"pos","nativeSrc":"9008:3:69","nodeType":"YulIdentifier","src":"9008:3:69"},"variableNames":[{"name":"end","nativeSrc":"9001:3:69","nodeType":"YulIdentifier","src":"9001:3:69"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nativeSrc":"8746:271:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"8859:3:69","nodeType":"YulTypedName","src":"8859:3:69","type":""},{"name":"value0","nativeSrc":"8865:6:69","nodeType":"YulTypedName","src":"8865:6:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"8876:3:69","nodeType":"YulTypedName","src":"8876:3:69","type":""}],"src":"8746:271:69"},{"body":{"nativeSrc":"9082:40:69","nodeType":"YulBlock","src":"9082:40:69","statements":[{"nativeSrc":"9093:22:69","nodeType":"YulAssignment","src":"9093:22:69","value":{"arguments":[{"name":"value","nativeSrc":"9109:5:69","nodeType":"YulIdentifier","src":"9109:5:69"}],"functionName":{"name":"mload","nativeSrc":"9103:5:69","nodeType":"YulIdentifier","src":"9103:5:69"},"nativeSrc":"9103:12:69","nodeType":"YulFunctionCall","src":"9103:12:69"},"variableNames":[{"name":"length","nativeSrc":"9093:6:69","nodeType":"YulIdentifier","src":"9093:6:69"}]}]},"name":"array_length_t_string_memory_ptr","nativeSrc":"9023:99:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"9065:5:69","nodeType":"YulTypedName","src":"9065:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"9075:6:69","nodeType":"YulTypedName","src":"9075:6:69","type":""}],"src":"9023:99:69"},{"body":{"nativeSrc":"9176:54:69","nodeType":"YulBlock","src":"9176:54:69","statements":[{"nativeSrc":"9186:38:69","nodeType":"YulAssignment","src":"9186:38:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"9204:5:69","nodeType":"YulIdentifier","src":"9204:5:69"},{"kind":"number","nativeSrc":"9211:2:69","nodeType":"YulLiteral","src":"9211:2:69","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"9200:3:69","nodeType":"YulIdentifier","src":"9200:3:69"},"nativeSrc":"9200:14:69","nodeType":"YulFunctionCall","src":"9200:14:69"},{"arguments":[{"kind":"number","nativeSrc":"9220:2:69","nodeType":"YulLiteral","src":"9220:2:69","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"9216:3:69","nodeType":"YulIdentifier","src":"9216:3:69"},"nativeSrc":"9216:7:69","nodeType":"YulFunctionCall","src":"9216:7:69"}],"functionName":{"name":"and","nativeSrc":"9196:3:69","nodeType":"YulIdentifier","src":"9196:3:69"},"nativeSrc":"9196:28:69","nodeType":"YulFunctionCall","src":"9196:28:69"},"variableNames":[{"name":"result","nativeSrc":"9186:6:69","nodeType":"YulIdentifier","src":"9186:6:69"}]}]},"name":"round_up_to_mul_of_32","nativeSrc":"9128:102:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"9159:5:69","nodeType":"YulTypedName","src":"9159:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"9169:6:69","nodeType":"YulTypedName","src":"9169:6:69","type":""}],"src":"9128:102:69"},{"body":{"nativeSrc":"9328:285:69","nodeType":"YulBlock","src":"9328:285:69","statements":[{"nativeSrc":"9338:53:69","nodeType":"YulVariableDeclaration","src":"9338:53:69","value":{"arguments":[{"name":"value","nativeSrc":"9385:5:69","nodeType":"YulIdentifier","src":"9385:5:69"}],"functionName":{"name":"array_length_t_string_memory_ptr","nativeSrc":"9352:32:69","nodeType":"YulIdentifier","src":"9352:32:69"},"nativeSrc":"9352:39:69","nodeType":"YulFunctionCall","src":"9352:39:69"},"variables":[{"name":"length","nativeSrc":"9342:6:69","nodeType":"YulTypedName","src":"9342:6:69","type":""}]},{"nativeSrc":"9400:78:69","nodeType":"YulAssignment","src":"9400:78:69","value":{"arguments":[{"name":"pos","nativeSrc":"9466:3:69","nodeType":"YulIdentifier","src":"9466:3:69"},{"name":"length","nativeSrc":"9471:6:69","nodeType":"YulIdentifier","src":"9471:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"9407:58:69","nodeType":"YulIdentifier","src":"9407:58:69"},"nativeSrc":"9407:71:69","nodeType":"YulFunctionCall","src":"9407:71:69"},"variableNames":[{"name":"pos","nativeSrc":"9400:3:69","nodeType":"YulIdentifier","src":"9400:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"9526:5:69","nodeType":"YulIdentifier","src":"9526:5:69"},{"kind":"number","nativeSrc":"9533:4:69","nodeType":"YulLiteral","src":"9533:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"9522:3:69","nodeType":"YulIdentifier","src":"9522:3:69"},"nativeSrc":"9522:16:69","nodeType":"YulFunctionCall","src":"9522:16:69"},{"name":"pos","nativeSrc":"9540:3:69","nodeType":"YulIdentifier","src":"9540:3:69"},{"name":"length","nativeSrc":"9545:6:69","nodeType":"YulIdentifier","src":"9545:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"9487:34:69","nodeType":"YulIdentifier","src":"9487:34:69"},"nativeSrc":"9487:65:69","nodeType":"YulFunctionCall","src":"9487:65:69"},"nativeSrc":"9487:65:69","nodeType":"YulExpressionStatement","src":"9487:65:69"},{"nativeSrc":"9561:46:69","nodeType":"YulAssignment","src":"9561:46:69","value":{"arguments":[{"name":"pos","nativeSrc":"9572:3:69","nodeType":"YulIdentifier","src":"9572:3:69"},{"arguments":[{"name":"length","nativeSrc":"9599:6:69","nodeType":"YulIdentifier","src":"9599:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"9577:21:69","nodeType":"YulIdentifier","src":"9577:21:69"},"nativeSrc":"9577:29:69","nodeType":"YulFunctionCall","src":"9577:29:69"}],"functionName":{"name":"add","nativeSrc":"9568:3:69","nodeType":"YulIdentifier","src":"9568:3:69"},"nativeSrc":"9568:39:69","nodeType":"YulFunctionCall","src":"9568:39:69"},"variableNames":[{"name":"end","nativeSrc":"9561:3:69","nodeType":"YulIdentifier","src":"9561:3:69"}]}]},"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"9236:377:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"9309:5:69","nodeType":"YulTypedName","src":"9309:5:69","type":""},{"name":"pos","nativeSrc":"9316:3:69","nodeType":"YulTypedName","src":"9316:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"9324:3:69","nodeType":"YulTypedName","src":"9324:3:69","type":""}],"src":"9236:377:69"},{"body":{"nativeSrc":"9737:195:69","nodeType":"YulBlock","src":"9737:195:69","statements":[{"nativeSrc":"9747:26:69","nodeType":"YulAssignment","src":"9747:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"9759:9:69","nodeType":"YulIdentifier","src":"9759:9:69"},{"kind":"number","nativeSrc":"9770:2:69","nodeType":"YulLiteral","src":"9770:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"9755:3:69","nodeType":"YulIdentifier","src":"9755:3:69"},"nativeSrc":"9755:18:69","nodeType":"YulFunctionCall","src":"9755:18:69"},"variableNames":[{"name":"tail","nativeSrc":"9747:4:69","nodeType":"YulIdentifier","src":"9747:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"9794:9:69","nodeType":"YulIdentifier","src":"9794:9:69"},{"kind":"number","nativeSrc":"9805:1:69","nodeType":"YulLiteral","src":"9805:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"9790:3:69","nodeType":"YulIdentifier","src":"9790:3:69"},"nativeSrc":"9790:17:69","nodeType":"YulFunctionCall","src":"9790:17:69"},{"arguments":[{"name":"tail","nativeSrc":"9813:4:69","nodeType":"YulIdentifier","src":"9813:4:69"},{"name":"headStart","nativeSrc":"9819:9:69","nodeType":"YulIdentifier","src":"9819:9:69"}],"functionName":{"name":"sub","nativeSrc":"9809:3:69","nodeType":"YulIdentifier","src":"9809:3:69"},"nativeSrc":"9809:20:69","nodeType":"YulFunctionCall","src":"9809:20:69"}],"functionName":{"name":"mstore","nativeSrc":"9783:6:69","nodeType":"YulIdentifier","src":"9783:6:69"},"nativeSrc":"9783:47:69","nodeType":"YulFunctionCall","src":"9783:47:69"},"nativeSrc":"9783:47:69","nodeType":"YulExpressionStatement","src":"9783:47:69"},{"nativeSrc":"9839:86:69","nodeType":"YulAssignment","src":"9839:86:69","value":{"arguments":[{"name":"value0","nativeSrc":"9911:6:69","nodeType":"YulIdentifier","src":"9911:6:69"},{"name":"tail","nativeSrc":"9920:4:69","nodeType":"YulIdentifier","src":"9920:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"9847:63:69","nodeType":"YulIdentifier","src":"9847:63:69"},"nativeSrc":"9847:78:69","nodeType":"YulFunctionCall","src":"9847:78:69"},"variableNames":[{"name":"tail","nativeSrc":"9839:4:69","nodeType":"YulIdentifier","src":"9839:4:69"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"9619:313:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"9709:9:69","nodeType":"YulTypedName","src":"9709:9:69","type":""},{"name":"value0","nativeSrc":"9721:6:69","nodeType":"YulTypedName","src":"9721:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"9732:4:69","nodeType":"YulTypedName","src":"9732:4:69","type":""}],"src":"9619:313:69"}]},"contents":"{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n        revert(0, 0)\n    }\n\n    function revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490() {\n        revert(0, 0)\n    }\n\n    function revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() {\n        revert(0, 0)\n    }\n\n    // bytes\n    function abi_decode_t_bytes_calldata_ptr(offset, end) -> arrayPos, length {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490() }\n        arrayPos := add(offset, 0x20)\n        if gt(add(arrayPos, mul(length, 0x01)), end) { revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() }\n    }\n\n    function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := calldataload(add(headStart, 32))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value1, value2 := abi_decode_t_bytes_calldata_ptr(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function store_literal_in_memory_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d(memPtr) {\n\n        mstore(add(memPtr, 0), \"TransparentUpgradeableProxy: adm\")\n\n        mstore(add(memPtr, 32), \"in cannot fallback to proxy targ\")\n\n        mstore(add(memPtr, 64), \"et\")\n\n    }\n\n    function abi_encode_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 66)\n        store_literal_in_memory_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d(pos)\n        end := add(pos, 96)\n    }\n\n    function abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function store_literal_in_memory_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC1967: new admin is the zero a\")\n\n        mstore(add(memPtr, 32), \"ddress\")\n\n    }\n\n    function abi_encode_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 38)\n        store_literal_in_memory_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC1967: new implementation is n\")\n\n        mstore(add(memPtr, 32), \"ot a contract\")\n\n    }\n\n    function abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 45)\n        store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520(memPtr) {\n\n        mstore(add(memPtr, 0), \"Address: delegate call to non-co\")\n\n        mstore(add(memPtr, 32), \"ntract\")\n\n    }\n\n    function abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 38)\n        store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function array_length_t_bytes_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n        updated_pos := pos\n    }\n\n    function copy_memory_to_memory_with_cleanup(src, dst, length) {\n\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n\n    }\n\n    function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n        let length := array_length_t_bytes_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, length)\n    }\n\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n        pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0,  pos)\n\n        end := pos\n    }\n\n    function array_length_t_string_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n        let length := array_length_t_string_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0,  tail)\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c3578063f851a440146100e35761005d565b3661005d5761005b6100f8565b005b61005b6100f8565b34801561007157600080fd5b5061005b61008036600461058c565b610112565b61005b610093366004610607565b61014f565b3480156100a457600080fd5b506100ad6101b6565b6040516100ba9190610672565b60405180910390f35b3480156100cf57600080fd5b5061005b6100de36600461058c565b6101e7565b3480156100ef57600080fd5b506100ad610207565b610100610228565b61011061010b610260565b61026a565b565b61011a61028e565b6001600160a01b0316330361014757610144816040518060200160405280600081525060006102c1565b50565b6101446100f8565b61015761028e565b6001600160a01b031633036101ae576101a98383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506102c1915050565b505050565b6101a96100f8565b60006101c061028e565b6001600160a01b031633036101dc576101d7610260565b905090565b6101e46100f8565b90565b6101ef61028e565b6001600160a01b0316330361014757610144816102ec565b600061021161028e565b6001600160a01b031633036101dc576101d761028e565b61023061028e565b6001600160a01b031633036101105760405162461bcd60e51b815260040161025790610680565b60405180910390fd5b60006101d7610335565b3660008037600080366000845af43d6000803e808015610289573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6102ca8361035d565b6000825111806102d75750805b156101a9576102e6838361039d565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61031561028e565b826040516103249291906106ec565b60405180910390a1610144816103cb565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6102b2565b61036681610435565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103c283836040518060600160405280602781526020016108a060279139610483565b90505b92915050565b6001600160a01b0381166103f15760405162461bcd60e51b81526004016102579061074d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b61045c5760405162461bcd60e51b8152600401610257906107a7565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b60606001600160a01b0384163b6104ac5760405162461bcd60e51b8152600401610257906107fa565b600080856001600160a01b0316856040516104c79190610850565b600060405180830381855af49150503d8060008114610502576040519150601f19603f3d011682016040523d82523d6000602084013e610507565b606091505b5091509150610517828286610523565b925050505b9392505050565b6060831561053257508161051c565b8251156105425782518084602001fd5b8160405162461bcd60e51b8152600401610257919061088e565b60006001600160a01b0382166103c5565b6105768161055c565b811461014457600080fd5b80356103c58161056d565b6000602082840312156105a1576105a1600080fd5b60006105ad8484610581565b949350505050565b60008083601f8401126105ca576105ca600080fd5b50813567ffffffffffffffff8111156105e5576105e5600080fd5b60208301915083600182028301111561060057610600600080fd5b9250929050565b60008060006040848603121561061f5761061f600080fd5b600061062b8686610581565b935050602084013567ffffffffffffffff81111561064b5761064b600080fd5b610657868287016105b5565b92509250509250925092565b61066c8161055c565b82525050565b602081016103c58284610663565b602080825281016103c581604281527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60208201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267604082015261195d60f21b606082015260800190565b604081016106fa8285610663565b61051c6020830184610663565b602681526000602082017f455243313936373a206e65772061646d696e20697320746865207a65726f206181526564647265737360d01b602082015291505b5060400190565b602080825281016103c581610707565b602d81526000602082017f455243313936373a206e657720696d706c656d656e746174696f6e206973206e81526c1bdd08184818dbdb9d1c9858dd609a1b60208201529150610746565b602080825281016103c58161075d565b602681526000602082017f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f8152651b9d1c9858dd60d21b60208201529150610746565b602080825281016103c5816107b7565b60005b8381101561082557818101518382015260200161080d565b50506000910152565b6000610838825190565b61084681856020860161080a565b9290920192915050565b600061051c828461082e565b6000610866825190565b80845260208401935061087d81856020860161080a565b601f01601f19169290920192915050565b602080825281016103c2818461085c56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212204e444297db3ae5fc9a9eefc71ca740bbeafc20c6972d32c6b51d1effee1baf3164736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x65 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x85 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x8F283970 EQ PUSH2 0xC3 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xE3 JUMPI PUSH2 0x5D JUMP JUMPDEST CALLDATASIZE PUSH2 0x5D JUMPI PUSH2 0x5B PUSH2 0xF8 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x5B PUSH2 0xF8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5B PUSH2 0x80 CALLDATASIZE PUSH1 0x4 PUSH2 0x58C JUMP JUMPDEST PUSH2 0x112 JUMP JUMPDEST PUSH2 0x5B PUSH2 0x93 CALLDATASIZE PUSH1 0x4 PUSH2 0x607 JUMP JUMPDEST PUSH2 0x14F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0x1B6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBA SWAP2 SWAP1 PUSH2 0x672 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5B PUSH2 0xDE CALLDATASIZE PUSH1 0x4 PUSH2 0x58C JUMP JUMPDEST PUSH2 0x1E7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0x207 JUMP JUMPDEST PUSH2 0x100 PUSH2 0x228 JUMP JUMPDEST PUSH2 0x110 PUSH2 0x10B PUSH2 0x260 JUMP JUMPDEST PUSH2 0x26A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x11A PUSH2 0x28E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x147 JUMPI PUSH2 0x144 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH1 0x0 PUSH2 0x2C1 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x144 PUSH2 0xF8 JUMP JUMPDEST PUSH2 0x157 PUSH2 0x28E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x1AE JUMPI PUSH2 0x1A9 DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH1 0x1 SWAP3 POP PUSH2 0x2C1 SWAP2 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1A9 PUSH2 0xF8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C0 PUSH2 0x28E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x1DC JUMPI PUSH2 0x1D7 PUSH2 0x260 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x1E4 PUSH2 0xF8 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1EF PUSH2 0x28E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x147 JUMPI PUSH2 0x144 DUP2 PUSH2 0x2EC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x211 PUSH2 0x28E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x1DC JUMPI PUSH2 0x1D7 PUSH2 0x28E JUMP JUMPDEST PUSH2 0x230 PUSH2 0x28E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x110 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x257 SWAP1 PUSH2 0x680 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1D7 PUSH2 0x335 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x289 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2CA DUP4 PUSH2 0x35D JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x2D7 JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0x1A9 JUMPI PUSH2 0x2E6 DUP4 DUP4 PUSH2 0x39D JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH2 0x315 PUSH2 0x28E JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH2 0x324 SWAP3 SWAP2 SWAP1 PUSH2 0x6EC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x144 DUP2 PUSH2 0x3CB JUMP JUMPDEST PUSH1 0x0 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH2 0x2B2 JUMP JUMPDEST PUSH2 0x366 DUP2 PUSH2 0x435 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3C2 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x8A0 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x483 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x3F1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x257 SWAP1 PUSH2 0x74D JUMP JUMPDEST DUP1 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x45C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x257 SWAP1 PUSH2 0x7A7 JUMP JUMPDEST DUP1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH2 0x414 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE PUSH2 0x4AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x257 SWAP1 PUSH2 0x7FA JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x4C7 SWAP2 SWAP1 PUSH2 0x850 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x502 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x507 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x517 DUP3 DUP3 DUP7 PUSH2 0x523 JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x532 JUMPI POP DUP2 PUSH2 0x51C JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x542 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x257 SWAP2 SWAP1 PUSH2 0x88E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x576 DUP2 PUSH2 0x55C JUMP JUMPDEST DUP2 EQ PUSH2 0x144 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3C5 DUP2 PUSH2 0x56D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5A1 JUMPI PUSH2 0x5A1 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5AD DUP5 DUP5 PUSH2 0x581 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x5CA JUMPI PUSH2 0x5CA PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5E5 JUMPI PUSH2 0x5E5 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x600 JUMPI PUSH2 0x600 PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x61F JUMPI PUSH2 0x61F PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x62B DUP7 DUP7 PUSH2 0x581 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x64B JUMPI PUSH2 0x64B PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x657 DUP7 DUP3 DUP8 ADD PUSH2 0x5B5 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x66C DUP2 PUSH2 0x55C JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x3C5 DUP3 DUP5 PUSH2 0x663 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x3C5 DUP2 PUSH1 0x42 DUP2 MSTORE PUSH32 0x5472616E73706172656E745570677261646561626C6550726F78793A2061646D PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x696E2063616E6E6F742066616C6C6261636B20746F2070726F78792074617267 PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x195D PUSH1 0xF2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x6FA DUP3 DUP6 PUSH2 0x663 JUMP JUMPDEST PUSH2 0x51C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x663 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x455243313936373A206E65772061646D696E20697320746865207A65726F2061 DUP2 MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x3C5 DUP2 PUSH2 0x707 JUMP JUMPDEST PUSH1 0x2D DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E DUP2 MSTORE PUSH13 0x1BDD08184818DBDB9D1C9858DD PUSH1 0x9A SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x746 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x3C5 DUP2 PUSH2 0x75D JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F DUP2 MSTORE PUSH6 0x1B9D1C9858DD PUSH1 0xD2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x746 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x3C5 DUP2 PUSH2 0x7B7 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x825 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x80D JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x838 DUP3 MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x846 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x80A JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x51C DUP3 DUP5 PUSH2 0x82E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x866 DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x87D DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x80A JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x3C2 DUP2 DUP5 PUSH2 0x85C JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH10 0x706673582212204E4442 SWAP8 0xDB GASPRICE 0xE5 0xFC SWAP11 SWAP15 0xEF 0xC7 SHR 0xA7 BLOCKHASH 0xBB 0xEA 0xFC KECCAK256 0xC6 SWAP8 0x2D ORIGIN 0xC6 0xB5 SAR 0x1E SELFDESTRUCT 0xEE SHL 0xAF BALANCE PUSH5 0x736F6C6343 STOP ADDMOD NOT STOP CALLER ","sourceMap":"1634:3556:64:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2903:11:61;:9;:11::i;:::-;1634:3556:64;;2680:11:61;:9;:11::i;4032:134:64:-;;;;;;;;;;-1:-1:-1;4032:134:64;;;;;:::i;:::-;;:::i;4542:164::-;;;;;;:::i;:::-;;:::i;3435:129::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3769:103;;;;;;;;;;-1:-1:-1;3769:103:64;;;;;:::i;:::-;;:::i;2879:96::-;;;;;;;;;;;;;:::i;2327:110:61:-;2375:17;:15;:17::i;:::-;2402:28;2412:17;:15;:17::i;:::-;2402:9;:28::i;:::-;2327:110::o;4032:134:64:-;2350:11;:9;:11::i;:::-;-1:-1:-1;;;;;2336:25:64;:10;:25;2332:99;;4105:54:::1;4123:17;4142:9;;;;;;;;;;;::::0;4153:5:::1;4105:17;:54::i;:::-;4032:134:::0;:::o;2332:99::-;2409:11;:9;:11::i;4542:164::-;2350:11;:9;:11::i;:::-;-1:-1:-1;;;;;2336:25:64;:10;:25;2332:99;;4651:48:::1;4669:17;4688:4;;4651:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;4694:4:64::1;::::0;-1:-1:-1;4651:17:64::1;::::0;-1:-1:-1;;4651:48:64:i:1;:::-;4542:164:::0;;;:::o;2332:99::-;2409:11;:9;:11::i;3435:129::-;3487:23;2350:11;:9;:11::i;:::-;-1:-1:-1;;;;;2336:25:64;:10;:25;2332:99;;3540:17:::1;:15;:17::i;:::-;3522:35;;3435:129:::0;:::o;2332:99::-;2409:11;:9;:11::i;:::-;3435:129;:::o;3769:103::-;2350:11;:9;:11::i;:::-;-1:-1:-1;;;;;2336:25:64;:10;:25;2332:99;;3843:22:::1;3856:8;3843:12;:22::i;2879:96::-:0;2922:14;2350:11;:9;:11::i;:::-;-1:-1:-1;;;;;2336:25:64;:10;:25;2332:99;;2957:11:::1;:9;:11::i;4981:207::-:0;5066:11;:9;:11::i;:::-;-1:-1:-1;;;;;5052:25:64;:10;:25;5044:104;;;;-1:-1:-1;;;5044:104:64;;;;;;;:::i;:::-;;;;;;;;1240:140:59;1307:12;1338:35;:33;:35::i;953:895:61:-;1291:14;1288:1;1285;1272:34;1505:1;1502;1486:14;1483:1;1467:14;1460:5;1447:60;1581:16;1578:1;1575;1560:38;1619:6;1686:66;;;;1801:16;1798:1;1791:27;1686:66;1721:16;1718:1;1711:27;4113:130:60;4165:7;3847:66;4191:39;:45;-1:-1:-1;;;;;4191:45:60;;4113:130;-1:-1:-1;4113:130:60:o;2188:295::-;2326:29;2337:17;2326:10;:29::i;:::-;2383:1;2369:4;:11;:15;:28;;;;2388:9;2369:28;2365:112;;;2413:53;2442:17;2461:4;2413:28;:53::i;:::-;;2188:295;;;:::o;4637:135::-;4701:35;4714:11;:9;:11::i;:::-;4727:8;4701:35;;;;;;;:::i;:::-;;;;;;;;4746:19;4756:8;4746:9;:19::i;1306:140::-;1359:7;1035:66;1385:48;1599:147:67;1902:152:60;1968:37;1987:17;1968:18;:37::i;:::-;2020:27;;-1:-1:-1;;;;;2020:27:60;;;;;;;;1902:152;:::o;6575:198:65:-;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;;6575:198;;;;;:::o;4325:201:60:-;-1:-1:-1;;;;;4388:22:60;;4380:73;;;;-1:-1:-1;;;4380:73:60;;;;;;;:::i;:::-;4511:8;3847:66;4463:39;:56;;-1:-1:-1;;;;;;4463:56:60;-1:-1:-1;;;;;4463:56:60;;;;;;;;;;-1:-1:-1;4325:201:60:o;1537:259::-;-1:-1:-1;;;;;1470:19:65;;;1610:95:60;;;;-1:-1:-1;;;1610:95:60;;;;;;;:::i;:::-;1772:17;1035:66;1715:48;1599:147:67;6959:387:65;7100:12;-1:-1:-1;;;;;1470:19:65;;;7124:69;;;;-1:-1:-1;;;7124:69:65;;;;;;;:::i;:::-;7205:12;7219:23;7246:6;-1:-1:-1;;;;;7246:19:65;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7204:67;;;;7288:51;7305:7;7314:10;7326:12;7288:16;:51::i;:::-;7281:58;;;;6959:387;;;;;;:::o;7566:692::-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:65;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;-1:-1:-1;;;8207:20:65;;;;;;;;:::i;466:96:69:-;503:7;-1:-1:-1;;;;;400:54:69;;532:24;334:126;568:122;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;696:139;767:20;;796:33;767:20;796:33;:::i;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;197:1;194;187:12;955:79;1075:1;1100:53;1145:7;1125:9;1100:53;:::i;:::-;1090:63;841:329;-1:-1:-1;;;;841:329:69:o;1558:552::-;1615:8;1625:6;1675:3;1668:4;1660:6;1656:17;1652:27;1642:122;;1683:79;197:1;194;187:12;1683:79;-1:-1:-1;1783:20:69;;1826:18;1815:30;;1812:117;;;1848:79;197:1;194;187:12;1848:79;1962:4;1954:6;1950:17;1938:29;;2016:3;2008:4;2000:6;1996:17;1986:8;1982:32;1979:41;1976:128;;;2023:79;197:1;194;187:12;2023:79;1558:552;;;;;:::o;2116:672::-;2195:6;2203;2211;2260:2;2248:9;2239:7;2235:23;2231:32;2228:119;;;2266:79;197:1;194;187:12;2266:79;2386:1;2411:53;2456:7;2436:9;2411:53;:::i;:::-;2401:63;;2357:117;2541:2;2530:9;2526:18;2513:32;2572:18;2564:6;2561:30;2558:117;;;2594:79;197:1;194;187:12;2594:79;2707:64;2763:7;2754:6;2743:9;2739:22;2707:64;:::i;:::-;2689:82;;;;2484:297;2116:672;;;;;:::o;2794:118::-;2881:24;2899:5;2881:24;:::i;:::-;2876:3;2869:37;2794:118;;:::o;2918:222::-;3049:2;3034:18;;3062:71;3038:9;3106:6;3062:71;:::i;3989:419::-;4193:2;4206:47;;;4178:18;;4270:131;4178:18;3844:2;3252:19;;3461:34;3304:4;3295:14;;3438:58;3530:34;3513:15;;;3506:59;-1:-1:-1;;;3582:15:69;;;3575:29;3965:12;;;3617:366;4414:332;4573:2;4558:18;;4586:71;4562:9;4630:6;4586:71;:::i;:::-;4667:72;4735:2;4724:9;4720:18;4711:6;4667:72;:::i;4983:366::-;5210:2;3252:19;;5125:3;3304:4;3295:14;;4892:34;4869:58;;-1:-1:-1;;;4956:2:69;4944:15;;4937:33;5139:74;-1:-1:-1;5222:93:69;-1:-1:-1;5340:2:69;5331:12;;4983:366::o;5355:419::-;5559:2;5572:47;;;5544:18;;5636:131;5544:18;5636:131;:::i;6018:366::-;6245:2;3252:19;;6160:3;3304:4;3295:14;;5920:34;5897:58;;-1:-1:-1;;;5984:2:69;5972:15;;5965:40;6174:74;-1:-1:-1;6257:93:69;5780:232;6390:419;6594:2;6607:47;;;6579:18;;6671:131;6579:18;6671:131;:::i;7046:366::-;7273:2;3252:19;;7188:3;3304:4;3295:14;;6955:34;6932:58;;-1:-1:-1;;;7019:2:69;7007:15;;7000:33;7202:74;-1:-1:-1;7285:93:69;6815:225;7418:419;7622:2;7635:47;;;7607:18;;7699:131;7607:18;7699:131;:::i;8100:248::-;8182:1;8192:113;8206:6;8203:1;8200:13;8192:113;;;8282:11;;;8276:18;8263:11;;;8256:39;8228:2;8221:10;8192:113;;;-1:-1:-1;;8339:1:69;8321:16;;8314:27;8100:248::o;8354:386::-;8458:3;8486:38;8518:5;7922:12;;7843:98;8486:38;8637:65;8695:6;8690:3;8683:4;8676:5;8672:16;8637:65;:::i;:::-;8718:16;;;;;8354:386;-1:-1:-1;;8354:386:69:o;8746:271::-;8876:3;8898:93;8987:3;8978:6;8898:93;:::i;9236:377::-;9324:3;9352:39;9385:5;7922:12;;7843:98;9352:39;3252:19;;;3304:4;3295:14;;9400:78;;9487:65;9545:6;9540:3;9533:4;9526:5;9522:16;9487:65;:::i;:::-;9220:2;9200:14;-1:-1:-1;;9196:28:69;9568:39;;;;;;-1:-1:-1;;9236:377:69:o;9619:313::-;9770:2;9783:47;;;9755:18;;9847:78;9755:18;9911:6;9847:78;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"460000","executionCost":"infinite","totalCost":"infinite"},"external":{"":"infinite","admin()":"infinite","changeAdmin(address)":"infinite","implementation()":"infinite","upgradeTo(address)":"infinite","upgradeToAndCall(address,bytes)":"infinite"},"internal":{"_admin()":"infinite","_beforeFallback()":"infinite"}},"methodIdentifiers":{"admin()":"f851a440","changeAdmin(address)":"8f283970","implementation()":"5c60da1b","upgradeTo(address)":"3659cfe6","upgradeToAndCall(address,bytes)":"4f1ef286"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is upgraded.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"hardhat-deploy/solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n    /**\\n     * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n     *\\n     * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n     * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n     */\\n    constructor(address _logic, bytes memory _data) payable {\\n        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n        _upgradeToAndCall(_logic, _data, false);\\n    }\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _implementation() internal view virtual override returns (address impl) {\\n        return ERC1967Upgrade._getImplementation();\\n    }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n    // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n    /**\\n     * @dev Storage slot with the address of the current implementation.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _getImplementation() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 implementation slot.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeTo(address newImplementation) internal {\\n        _setImplementation(newImplementation);\\n        emit Upgraded(newImplementation);\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCall(\\n        address newImplementation,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        _upgradeTo(newImplementation);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(newImplementation, data);\\n        }\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCallUUPS(\\n        address newImplementation,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\\n        if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n            _setImplementation(newImplementation);\\n        } else {\\n            try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n                require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n            } catch {\\n                revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n            }\\n            _upgradeToAndCall(newImplementation, data, forceCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Storage slot with the admin of the contract.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n    /**\\n     * @dev Emitted when the admin account has changed.\\n     */\\n    event AdminChanged(address previousAdmin, address newAdmin);\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _getAdmin() internal view virtual returns (address) {\\n        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 admin slot.\\n     */\\n    function _setAdmin(address newAdmin) private {\\n        require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {AdminChanged} event.\\n     */\\n    function _changeAdmin(address newAdmin) internal {\\n        emit AdminChanged(_getAdmin(), newAdmin);\\n        _setAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n     */\\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n    /**\\n     * @dev Emitted when the beacon is upgraded.\\n     */\\n    event BeaconUpgraded(address indexed beacon);\\n\\n    /**\\n     * @dev Returns the current beacon.\\n     */\\n    function _getBeacon() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\\n     */\\n    function _setBeacon(address newBeacon) private {\\n        require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n        require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n    }\\n\\n    /**\\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n     *\\n     * Emits a {BeaconUpgraded} event.\\n     */\\n    function _upgradeBeaconToAndCall(\\n        address newBeacon,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        _setBeacon(newBeacon);\\n        emit BeaconUpgraded(newBeacon);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n    /**\\n     * @dev Delegates the current call to `implementation`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _delegate(address implementation) internal virtual {\\n        assembly {\\n            // Copy msg.data. We take full control of memory in this inline assembly\\n            // block because it will not return to Solidity code. We overwrite the\\n            // Solidity scratch pad at memory position 0.\\n            calldatacopy(0, 0, calldatasize())\\n\\n            // Call the implementation.\\n            // out and outsize are 0 because we don't know the size yet.\\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n            // Copy the returned data.\\n            returndatacopy(0, 0, returndatasize())\\n\\n            switch result\\n            // delegatecall returns 0 on error.\\n            case 0 {\\n                revert(0, returndatasize())\\n            }\\n            default {\\n                return(0, returndatasize())\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n     * and {_fallback} should delegate.\\n     */\\n    function _implementation() internal view virtual returns (address);\\n\\n    /**\\n     * @dev Delegates the current call to the address returned by `_implementation()`.\\n     *\\n     * This function does not return to its internall call site, it will return directly to the external caller.\\n     */\\n    function _fallback() internal virtual {\\n        _beforeFallback();\\n        _delegate(_implementation());\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n     * function in the contract matches the call data.\\n     */\\n    fallback() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n     * is empty.\\n     */\\n    receive() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n     * call, or as part of the Solidity `fallback` or `receive` functions.\\n     *\\n     * If overriden should call `super._beforeFallback()`.\\n     */\\n    function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {BeaconProxy} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n    /**\\n     * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n     * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n     */\\n    constructor(\\n        address _logic,\\n        address admin_,\\n        bytes memory _data\\n    ) payable ERC1967Proxy(_logic, _data) {\\n        assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n        _changeAdmin(admin_);\\n    }\\n\\n    /**\\n     * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n     */\\n    modifier ifAdmin() {\\n        if (msg.sender == _getAdmin()) {\\n            _;\\n        } else {\\n            _fallback();\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the current admin.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n     *\\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n     */\\n    function admin() external ifAdmin returns (address admin_) {\\n        admin_ = _getAdmin();\\n    }\\n\\n    /**\\n     * @dev Returns the current implementation.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n     *\\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n     * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n     */\\n    function implementation() external ifAdmin returns (address implementation_) {\\n        implementation_ = _implementation();\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {AdminChanged} event.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n     */\\n    function changeAdmin(address newAdmin) external virtual ifAdmin {\\n        _changeAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev Upgrade the implementation of the proxy.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n     */\\n    function upgradeTo(address newImplementation) external ifAdmin {\\n        _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n    }\\n\\n    /**\\n     * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n     * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n     * proxied contract.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n     */\\n    function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n        _upgradeToAndCall(newImplementation, data, true);\\n    }\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _admin() internal view virtual returns (address) {\\n        return _getAdmin();\\n    }\\n\\n    /**\\n     * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n     */\\n    function _beforeFallback() internal virtual override {\\n        require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n        super._beforeFallback();\\n    }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"hardhat-deploy/solc_0.8/openzeppelin/utils/Address.sol":{"Address":{"abi":[],"devdoc":{"details":"Collection of functions related to the address type","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122098184856a7c0835282c3ff3bc5a15de6237c573cde01cf1784d537f753d6edd564736f6c63430008190033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP9 XOR BASEFEE JUMP 0xA7 0xC0 DUP4 MSTORE DUP3 0xC3 SELFDESTRUCT EXTCODESIZE 0xC5 LOG1 TSTORE 0xE6 0x23 PUSH29 0x573CDE01CF1784D537F753D6EDD564736F6C6343000819003300000000 ","sourceMap":"199:8061:65:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;199:8061:65;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122098184856a7c0835282c3ff3bc5a15de6237c573cde01cf1784d537f753d6edd564736f6c63430008190033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP9 XOR BASEFEE JUMP 0xA7 0xC0 DUP4 MSTORE DUP3 0xC3 SELFDESTRUCT EXTCODESIZE 0xC5 LOG1 TSTORE 0xE6 0x23 PUSH29 0x573CDE01CF1784D537F753D6EDD564736F6C6343000819003300000000 ","sourceMap":"199:8061:65:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"functionCall(address,bytes memory)":"infinite","functionCall(address,bytes memory,string memory)":"infinite","functionCallWithValue(address,bytes memory,uint256)":"infinite","functionCallWithValue(address,bytes memory,uint256,string memory)":"infinite","functionDelegateCall(address,bytes memory)":"infinite","functionDelegateCall(address,bytes memory,string memory)":"infinite","functionStaticCall(address,bytes memory)":"infinite","functionStaticCall(address,bytes memory,string memory)":"infinite","isContract(address)":"infinite","sendValue(address payable,uint256)":"infinite","verifyCallResult(bool,bytes memory,string memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"hardhat-deploy/solc_0.8/openzeppelin/utils/Address.sol\":\"Address\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"hardhat-deploy/solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"hardhat-deploy/solc_0.8/openzeppelin/utils/Context.sol":{"Context":{"abi":[],"devdoc":{"details":"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"hardhat-deploy/solc_0.8/openzeppelin/utils/Context.sol\":\"Context\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"hardhat-deploy/solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"hardhat-deploy/solc_0.8/openzeppelin/utils/StorageSlot.sol":{"StorageSlot":{"abi":[],"devdoc":{"details":"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC1967 implementation slot: ``` contract ERC1967 {     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;     function _getImplementation() internal view returns (address) {         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;     }     function _setImplementation(address newImplementation) internal {         require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;     } } ``` _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208761d5803ff179efb1e7368f0bd3ec1aa9fd2e088a2f991316bbafaee0d7e83164736f6c63430008190033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP8 PUSH2 0xD580 EXTCODEHASH CALL PUSH26 0xEFB1E7368F0BD3EC1AA9FD2E088A2F991316BBAFAEE0D7E83164 PUSH20 0x6F6C634300081900330000000000000000000000 ","sourceMap":"1264:1219:67:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1264:1219:67;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208761d5803ff179efb1e7368f0bd3ec1aa9fd2e088a2f991316bbafaee0d7e83164736f6c63430008190033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP8 PUSH2 0xD580 EXTCODEHASH CALL PUSH26 0xEFB1E7368F0BD3EC1AA9FD2E088A2F991316BBAFAEE0D7E83164 PUSH20 0x6F6C634300081900330000000000000000000000 ","sourceMap":"1264:1219:67:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"getAddressSlot(bytes32)":"infinite","getBooleanSlot(bytes32)":"infinite","getBytes32Slot(bytes32)":"infinite","getUint256Slot(bytes32)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC1967 implementation slot: ``` contract ERC1967 {     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;     function _getImplementation() internal view returns (address) {         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;     }     function _setImplementation(address newImplementation) internal {         require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;     } } ``` _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"hardhat-deploy/solc_0.8/openzeppelin/utils/StorageSlot.sol\":\"StorageSlot\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"hardhat-deploy/solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"hardhat-deploy/solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol":{"OptimizedTransparentUpgradeableProxy":{"abi":[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"admin_","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"admin_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"implementation_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"details":"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.","events":{"AdminChanged(address,address)":{"details":"Emitted when the admin account has changed."},"BeaconUpgraded(address)":{"details":"Emitted when the beacon is upgraded."},"Upgraded(address)":{"details":"Emitted when the implementation is upgraded."}},"kind":"dev","methods":{"admin()":{"details":"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`"},"constructor":{"details":"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}."},"implementation()":{"details":"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`"},"upgradeTo(address)":{"details":"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}."},"upgradeToAndCall(address,bytes)":{"details":"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_18954":{"entryPoint":null,"id":18954,"parameterSlots":2,"returnSlots":0},"@_20089":{"entryPoint":null,"id":20089,"parameterSlots":3,"returnSlots":0},"@_setImplementation_19023":{"entryPoint":446,"id":19023,"parameterSlots":1,"returnSlots":0},"@_upgradeToAndCall_19068":{"entryPoint":292,"id":19068,"parameterSlots":3,"returnSlots":0},"@_upgradeTo_19038":{"entryPoint":336,"id":19038,"parameterSlots":1,"returnSlots":0},"@functionDelegateCall_19884":{"entryPoint":400,"id":19884,"parameterSlots":2,"returnSlots":1},"@functionDelegateCall_19919":{"entryPoint":541,"id":19919,"parameterSlots":3,"returnSlots":1},"@getAddressSlot_19999":{"entryPoint":null,"id":19999,"parameterSlots":1,"returnSlots":1},"@isContract_19674":{"entryPoint":null,"id":19674,"parameterSlots":1,"returnSlots":1},"@verifyCallResult_19950":{"entryPoint":702,"id":19950,"parameterSlots":3,"returnSlots":1},"abi_decode_available_length_t_bytes_memory_ptr_fromMemory":{"entryPoint":982,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_t_address_fromMemory":{"entryPoint":799,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_bytes_memory_ptr_fromMemory":{"entryPoint":1047,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory":{"entryPoint":1091,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_t_address_to_t_address_fromStack":{"entryPoint":1260,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":1478,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack":{"entryPoint":1524,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack":{"entryPoint":1302,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack":{"entryPoint":1395,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":1512,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":1275,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1574,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1379,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1462,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory":{"entryPoint":876,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_t_bytes_memory_ptr":{"entryPoint":904,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_bytes_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_string_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":1219,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_address":{"entryPoint":759,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":946,"id":null,"parameterSlots":3,"returnSlots":0},"finalize_allocation":{"entryPoint":832,"id":null,"parameterSlots":2,"returnSlots":0},"panic_error_0x01":{"entryPoint":1238,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x11":{"entryPoint":1197,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":810,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"round_up_to_mul_of_32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_address":{"entryPoint":776,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:9109:69","nodeType":"YulBlock","src":"0:9109:69","statements":[{"body":{"nativeSrc":"47:35:69","nodeType":"YulBlock","src":"47:35:69","statements":[{"nativeSrc":"57:19:69","nodeType":"YulAssignment","src":"57:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"73:2:69","nodeType":"YulLiteral","src":"73:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"67:5:69","nodeType":"YulIdentifier","src":"67:5:69"},"nativeSrc":"67:9:69","nodeType":"YulFunctionCall","src":"67:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"57:6:69","nodeType":"YulIdentifier","src":"57:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"7:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"40:6:69","nodeType":"YulTypedName","src":"40:6:69","type":""}],"src":"7:75:69"},{"body":{"nativeSrc":"177:28:69","nodeType":"YulBlock","src":"177:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"194:1:69","nodeType":"YulLiteral","src":"194:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"197:1:69","nodeType":"YulLiteral","src":"197:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"187:6:69","nodeType":"YulIdentifier","src":"187:6:69"},"nativeSrc":"187:12:69","nodeType":"YulFunctionCall","src":"187:12:69"},"nativeSrc":"187:12:69","nodeType":"YulExpressionStatement","src":"187:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"88:117:69","nodeType":"YulFunctionDefinition","src":"88:117:69"},{"body":{"nativeSrc":"300:28:69","nodeType":"YulBlock","src":"300:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"317:1:69","nodeType":"YulLiteral","src":"317:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"320:1:69","nodeType":"YulLiteral","src":"320:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},"nativeSrc":"310:12:69","nodeType":"YulFunctionCall","src":"310:12:69"},"nativeSrc":"310:12:69","nodeType":"YulExpressionStatement","src":"310:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"211:117:69","nodeType":"YulFunctionDefinition","src":"211:117:69"},{"body":{"nativeSrc":"379:81:69","nodeType":"YulBlock","src":"379:81:69","statements":[{"nativeSrc":"389:65:69","nodeType":"YulAssignment","src":"389:65:69","value":{"arguments":[{"name":"value","nativeSrc":"404:5:69","nodeType":"YulIdentifier","src":"404:5:69"},{"kind":"number","nativeSrc":"411:42:69","nodeType":"YulLiteral","src":"411:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"400:3:69","nodeType":"YulIdentifier","src":"400:3:69"},"nativeSrc":"400:54:69","nodeType":"YulFunctionCall","src":"400:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"389:7:69","nodeType":"YulIdentifier","src":"389:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"334:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"361:5:69","nodeType":"YulTypedName","src":"361:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"371:7:69","nodeType":"YulTypedName","src":"371:7:69","type":""}],"src":"334:126:69"},{"body":{"nativeSrc":"511:51:69","nodeType":"YulBlock","src":"511:51:69","statements":[{"nativeSrc":"521:35:69","nodeType":"YulAssignment","src":"521:35:69","value":{"arguments":[{"name":"value","nativeSrc":"550:5:69","nodeType":"YulIdentifier","src":"550:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"532:17:69","nodeType":"YulIdentifier","src":"532:17:69"},"nativeSrc":"532:24:69","nodeType":"YulFunctionCall","src":"532:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"521:7:69","nodeType":"YulIdentifier","src":"521:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"466:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"493:5:69","nodeType":"YulTypedName","src":"493:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"503:7:69","nodeType":"YulTypedName","src":"503:7:69","type":""}],"src":"466:96:69"},{"body":{"nativeSrc":"611:79:69","nodeType":"YulBlock","src":"611:79:69","statements":[{"body":{"nativeSrc":"668:16:69","nodeType":"YulBlock","src":"668:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"677:1:69","nodeType":"YulLiteral","src":"677:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"680:1:69","nodeType":"YulLiteral","src":"680:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"670:6:69","nodeType":"YulIdentifier","src":"670:6:69"},"nativeSrc":"670:12:69","nodeType":"YulFunctionCall","src":"670:12:69"},"nativeSrc":"670:12:69","nodeType":"YulExpressionStatement","src":"670:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"634:5:69","nodeType":"YulIdentifier","src":"634:5:69"},{"arguments":[{"name":"value","nativeSrc":"659:5:69","nodeType":"YulIdentifier","src":"659:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"641:17:69","nodeType":"YulIdentifier","src":"641:17:69"},"nativeSrc":"641:24:69","nodeType":"YulFunctionCall","src":"641:24:69"}],"functionName":{"name":"eq","nativeSrc":"631:2:69","nodeType":"YulIdentifier","src":"631:2:69"},"nativeSrc":"631:35:69","nodeType":"YulFunctionCall","src":"631:35:69"}],"functionName":{"name":"iszero","nativeSrc":"624:6:69","nodeType":"YulIdentifier","src":"624:6:69"},"nativeSrc":"624:43:69","nodeType":"YulFunctionCall","src":"624:43:69"},"nativeSrc":"621:63:69","nodeType":"YulIf","src":"621:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"568:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"604:5:69","nodeType":"YulTypedName","src":"604:5:69","type":""}],"src":"568:122:69"},{"body":{"nativeSrc":"759:80:69","nodeType":"YulBlock","src":"759:80:69","statements":[{"nativeSrc":"769:22:69","nodeType":"YulAssignment","src":"769:22:69","value":{"arguments":[{"name":"offset","nativeSrc":"784:6:69","nodeType":"YulIdentifier","src":"784:6:69"}],"functionName":{"name":"mload","nativeSrc":"778:5:69","nodeType":"YulIdentifier","src":"778:5:69"},"nativeSrc":"778:13:69","nodeType":"YulFunctionCall","src":"778:13:69"},"variableNames":[{"name":"value","nativeSrc":"769:5:69","nodeType":"YulIdentifier","src":"769:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"827:5:69","nodeType":"YulIdentifier","src":"827:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"800:26:69","nodeType":"YulIdentifier","src":"800:26:69"},"nativeSrc":"800:33:69","nodeType":"YulFunctionCall","src":"800:33:69"},"nativeSrc":"800:33:69","nodeType":"YulExpressionStatement","src":"800:33:69"}]},"name":"abi_decode_t_address_fromMemory","nativeSrc":"696:143:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"737:6:69","nodeType":"YulTypedName","src":"737:6:69","type":""},{"name":"end","nativeSrc":"745:3:69","nodeType":"YulTypedName","src":"745:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"753:5:69","nodeType":"YulTypedName","src":"753:5:69","type":""}],"src":"696:143:69"},{"body":{"nativeSrc":"934:28:69","nodeType":"YulBlock","src":"934:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"951:1:69","nodeType":"YulLiteral","src":"951:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"954:1:69","nodeType":"YulLiteral","src":"954:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"944:6:69","nodeType":"YulIdentifier","src":"944:6:69"},"nativeSrc":"944:12:69","nodeType":"YulFunctionCall","src":"944:12:69"},"nativeSrc":"944:12:69","nodeType":"YulExpressionStatement","src":"944:12:69"}]},"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"845:117:69","nodeType":"YulFunctionDefinition","src":"845:117:69"},{"body":{"nativeSrc":"1057:28:69","nodeType":"YulBlock","src":"1057:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1074:1:69","nodeType":"YulLiteral","src":"1074:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1077:1:69","nodeType":"YulLiteral","src":"1077:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1067:6:69","nodeType":"YulIdentifier","src":"1067:6:69"},"nativeSrc":"1067:12:69","nodeType":"YulFunctionCall","src":"1067:12:69"},"nativeSrc":"1067:12:69","nodeType":"YulExpressionStatement","src":"1067:12:69"}]},"name":"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae","nativeSrc":"968:117:69","nodeType":"YulFunctionDefinition","src":"968:117:69"},{"body":{"nativeSrc":"1139:54:69","nodeType":"YulBlock","src":"1139:54:69","statements":[{"nativeSrc":"1149:38:69","nodeType":"YulAssignment","src":"1149:38:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1167:5:69","nodeType":"YulIdentifier","src":"1167:5:69"},{"kind":"number","nativeSrc":"1174:2:69","nodeType":"YulLiteral","src":"1174:2:69","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"1163:3:69","nodeType":"YulIdentifier","src":"1163:3:69"},"nativeSrc":"1163:14:69","nodeType":"YulFunctionCall","src":"1163:14:69"},{"arguments":[{"kind":"number","nativeSrc":"1183:2:69","nodeType":"YulLiteral","src":"1183:2:69","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"1179:3:69","nodeType":"YulIdentifier","src":"1179:3:69"},"nativeSrc":"1179:7:69","nodeType":"YulFunctionCall","src":"1179:7:69"}],"functionName":{"name":"and","nativeSrc":"1159:3:69","nodeType":"YulIdentifier","src":"1159:3:69"},"nativeSrc":"1159:28:69","nodeType":"YulFunctionCall","src":"1159:28:69"},"variableNames":[{"name":"result","nativeSrc":"1149:6:69","nodeType":"YulIdentifier","src":"1149:6:69"}]}]},"name":"round_up_to_mul_of_32","nativeSrc":"1091:102:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1122:5:69","nodeType":"YulTypedName","src":"1122:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"1132:6:69","nodeType":"YulTypedName","src":"1132:6:69","type":""}],"src":"1091:102:69"},{"body":{"nativeSrc":"1227:152:69","nodeType":"YulBlock","src":"1227:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1244:1:69","nodeType":"YulLiteral","src":"1244:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1247:77:69","nodeType":"YulLiteral","src":"1247:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"1237:6:69","nodeType":"YulIdentifier","src":"1237:6:69"},"nativeSrc":"1237:88:69","nodeType":"YulFunctionCall","src":"1237:88:69"},"nativeSrc":"1237:88:69","nodeType":"YulExpressionStatement","src":"1237:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1341:1:69","nodeType":"YulLiteral","src":"1341:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"1344:4:69","nodeType":"YulLiteral","src":"1344:4:69","type":"","value":"0x41"}],"functionName":{"name":"mstore","nativeSrc":"1334:6:69","nodeType":"YulIdentifier","src":"1334:6:69"},"nativeSrc":"1334:15:69","nodeType":"YulFunctionCall","src":"1334:15:69"},"nativeSrc":"1334:15:69","nodeType":"YulExpressionStatement","src":"1334:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1365:1:69","nodeType":"YulLiteral","src":"1365:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1368:4:69","nodeType":"YulLiteral","src":"1368:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"1358:6:69","nodeType":"YulIdentifier","src":"1358:6:69"},"nativeSrc":"1358:15:69","nodeType":"YulFunctionCall","src":"1358:15:69"},"nativeSrc":"1358:15:69","nodeType":"YulExpressionStatement","src":"1358:15:69"}]},"name":"panic_error_0x41","nativeSrc":"1199:180:69","nodeType":"YulFunctionDefinition","src":"1199:180:69"},{"body":{"nativeSrc":"1428:238:69","nodeType":"YulBlock","src":"1428:238:69","statements":[{"nativeSrc":"1438:58:69","nodeType":"YulVariableDeclaration","src":"1438:58:69","value":{"arguments":[{"name":"memPtr","nativeSrc":"1460:6:69","nodeType":"YulIdentifier","src":"1460:6:69"},{"arguments":[{"name":"size","nativeSrc":"1490:4:69","nodeType":"YulIdentifier","src":"1490:4:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"1468:21:69","nodeType":"YulIdentifier","src":"1468:21:69"},"nativeSrc":"1468:27:69","nodeType":"YulFunctionCall","src":"1468:27:69"}],"functionName":{"name":"add","nativeSrc":"1456:3:69","nodeType":"YulIdentifier","src":"1456:3:69"},"nativeSrc":"1456:40:69","nodeType":"YulFunctionCall","src":"1456:40:69"},"variables":[{"name":"newFreePtr","nativeSrc":"1442:10:69","nodeType":"YulTypedName","src":"1442:10:69","type":""}]},{"body":{"nativeSrc":"1607:22:69","nodeType":"YulBlock","src":"1607:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"1609:16:69","nodeType":"YulIdentifier","src":"1609:16:69"},"nativeSrc":"1609:18:69","nodeType":"YulFunctionCall","src":"1609:18:69"},"nativeSrc":"1609:18:69","nodeType":"YulExpressionStatement","src":"1609:18:69"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nativeSrc":"1550:10:69","nodeType":"YulIdentifier","src":"1550:10:69"},{"kind":"number","nativeSrc":"1562:18:69","nodeType":"YulLiteral","src":"1562:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"1547:2:69","nodeType":"YulIdentifier","src":"1547:2:69"},"nativeSrc":"1547:34:69","nodeType":"YulFunctionCall","src":"1547:34:69"},{"arguments":[{"name":"newFreePtr","nativeSrc":"1586:10:69","nodeType":"YulIdentifier","src":"1586:10:69"},{"name":"memPtr","nativeSrc":"1598:6:69","nodeType":"YulIdentifier","src":"1598:6:69"}],"functionName":{"name":"lt","nativeSrc":"1583:2:69","nodeType":"YulIdentifier","src":"1583:2:69"},"nativeSrc":"1583:22:69","nodeType":"YulFunctionCall","src":"1583:22:69"}],"functionName":{"name":"or","nativeSrc":"1544:2:69","nodeType":"YulIdentifier","src":"1544:2:69"},"nativeSrc":"1544:62:69","nodeType":"YulFunctionCall","src":"1544:62:69"},"nativeSrc":"1541:88:69","nodeType":"YulIf","src":"1541:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1645:2:69","nodeType":"YulLiteral","src":"1645:2:69","type":"","value":"64"},{"name":"newFreePtr","nativeSrc":"1649:10:69","nodeType":"YulIdentifier","src":"1649:10:69"}],"functionName":{"name":"mstore","nativeSrc":"1638:6:69","nodeType":"YulIdentifier","src":"1638:6:69"},"nativeSrc":"1638:22:69","nodeType":"YulFunctionCall","src":"1638:22:69"},"nativeSrc":"1638:22:69","nodeType":"YulExpressionStatement","src":"1638:22:69"}]},"name":"finalize_allocation","nativeSrc":"1385:281:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"1414:6:69","nodeType":"YulTypedName","src":"1414:6:69","type":""},{"name":"size","nativeSrc":"1422:4:69","nodeType":"YulTypedName","src":"1422:4:69","type":""}],"src":"1385:281:69"},{"body":{"nativeSrc":"1713:88:69","nodeType":"YulBlock","src":"1713:88:69","statements":[{"nativeSrc":"1723:30:69","nodeType":"YulAssignment","src":"1723:30:69","value":{"arguments":[],"functionName":{"name":"allocate_unbounded","nativeSrc":"1733:18:69","nodeType":"YulIdentifier","src":"1733:18:69"},"nativeSrc":"1733:20:69","nodeType":"YulFunctionCall","src":"1733:20:69"},"variableNames":[{"name":"memPtr","nativeSrc":"1723:6:69","nodeType":"YulIdentifier","src":"1723:6:69"}]},{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"1782:6:69","nodeType":"YulIdentifier","src":"1782:6:69"},{"name":"size","nativeSrc":"1790:4:69","nodeType":"YulIdentifier","src":"1790:4:69"}],"functionName":{"name":"finalize_allocation","nativeSrc":"1762:19:69","nodeType":"YulIdentifier","src":"1762:19:69"},"nativeSrc":"1762:33:69","nodeType":"YulFunctionCall","src":"1762:33:69"},"nativeSrc":"1762:33:69","nodeType":"YulExpressionStatement","src":"1762:33:69"}]},"name":"allocate_memory","nativeSrc":"1672:129:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nativeSrc":"1697:4:69","nodeType":"YulTypedName","src":"1697:4:69","type":""}],"returnVariables":[{"name":"memPtr","nativeSrc":"1706:6:69","nodeType":"YulTypedName","src":"1706:6:69","type":""}],"src":"1672:129:69"},{"body":{"nativeSrc":"1873:241:69","nodeType":"YulBlock","src":"1873:241:69","statements":[{"body":{"nativeSrc":"1978:22:69","nodeType":"YulBlock","src":"1978:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"1980:16:69","nodeType":"YulIdentifier","src":"1980:16:69"},"nativeSrc":"1980:18:69","nodeType":"YulFunctionCall","src":"1980:18:69"},"nativeSrc":"1980:18:69","nodeType":"YulExpressionStatement","src":"1980:18:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"1950:6:69","nodeType":"YulIdentifier","src":"1950:6:69"},{"kind":"number","nativeSrc":"1958:18:69","nodeType":"YulLiteral","src":"1958:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"1947:2:69","nodeType":"YulIdentifier","src":"1947:2:69"},"nativeSrc":"1947:30:69","nodeType":"YulFunctionCall","src":"1947:30:69"},"nativeSrc":"1944:56:69","nodeType":"YulIf","src":"1944:56:69"},{"nativeSrc":"2010:37:69","nodeType":"YulAssignment","src":"2010:37:69","value":{"arguments":[{"name":"length","nativeSrc":"2040:6:69","nodeType":"YulIdentifier","src":"2040:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"2018:21:69","nodeType":"YulIdentifier","src":"2018:21:69"},"nativeSrc":"2018:29:69","nodeType":"YulFunctionCall","src":"2018:29:69"},"variableNames":[{"name":"size","nativeSrc":"2010:4:69","nodeType":"YulIdentifier","src":"2010:4:69"}]},{"nativeSrc":"2084:23:69","nodeType":"YulAssignment","src":"2084:23:69","value":{"arguments":[{"name":"size","nativeSrc":"2096:4:69","nodeType":"YulIdentifier","src":"2096:4:69"},{"kind":"number","nativeSrc":"2102:4:69","nodeType":"YulLiteral","src":"2102:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2092:3:69","nodeType":"YulIdentifier","src":"2092:3:69"},"nativeSrc":"2092:15:69","nodeType":"YulFunctionCall","src":"2092:15:69"},"variableNames":[{"name":"size","nativeSrc":"2084:4:69","nodeType":"YulIdentifier","src":"2084:4:69"}]}]},"name":"array_allocation_size_t_bytes_memory_ptr","nativeSrc":"1807:307:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nativeSrc":"1857:6:69","nodeType":"YulTypedName","src":"1857:6:69","type":""}],"returnVariables":[{"name":"size","nativeSrc":"1868:4:69","nodeType":"YulTypedName","src":"1868:4:69","type":""}],"src":"1807:307:69"},{"body":{"nativeSrc":"2182:186:69","nodeType":"YulBlock","src":"2182:186:69","statements":[{"nativeSrc":"2193:10:69","nodeType":"YulVariableDeclaration","src":"2193:10:69","value":{"kind":"number","nativeSrc":"2202:1:69","nodeType":"YulLiteral","src":"2202:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"2197:1:69","nodeType":"YulTypedName","src":"2197:1:69","type":""}]},{"body":{"nativeSrc":"2262:63:69","nodeType":"YulBlock","src":"2262:63:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"2287:3:69","nodeType":"YulIdentifier","src":"2287:3:69"},{"name":"i","nativeSrc":"2292:1:69","nodeType":"YulIdentifier","src":"2292:1:69"}],"functionName":{"name":"add","nativeSrc":"2283:3:69","nodeType":"YulIdentifier","src":"2283:3:69"},"nativeSrc":"2283:11:69","nodeType":"YulFunctionCall","src":"2283:11:69"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"2306:3:69","nodeType":"YulIdentifier","src":"2306:3:69"},{"name":"i","nativeSrc":"2311:1:69","nodeType":"YulIdentifier","src":"2311:1:69"}],"functionName":{"name":"add","nativeSrc":"2302:3:69","nodeType":"YulIdentifier","src":"2302:3:69"},"nativeSrc":"2302:11:69","nodeType":"YulFunctionCall","src":"2302:11:69"}],"functionName":{"name":"mload","nativeSrc":"2296:5:69","nodeType":"YulIdentifier","src":"2296:5:69"},"nativeSrc":"2296:18:69","nodeType":"YulFunctionCall","src":"2296:18:69"}],"functionName":{"name":"mstore","nativeSrc":"2276:6:69","nodeType":"YulIdentifier","src":"2276:6:69"},"nativeSrc":"2276:39:69","nodeType":"YulFunctionCall","src":"2276:39:69"},"nativeSrc":"2276:39:69","nodeType":"YulExpressionStatement","src":"2276:39:69"}]},"condition":{"arguments":[{"name":"i","nativeSrc":"2223:1:69","nodeType":"YulIdentifier","src":"2223:1:69"},{"name":"length","nativeSrc":"2226:6:69","nodeType":"YulIdentifier","src":"2226:6:69"}],"functionName":{"name":"lt","nativeSrc":"2220:2:69","nodeType":"YulIdentifier","src":"2220:2:69"},"nativeSrc":"2220:13:69","nodeType":"YulFunctionCall","src":"2220:13:69"},"nativeSrc":"2212:113:69","nodeType":"YulForLoop","post":{"nativeSrc":"2234:19:69","nodeType":"YulBlock","src":"2234:19:69","statements":[{"nativeSrc":"2236:15:69","nodeType":"YulAssignment","src":"2236:15:69","value":{"arguments":[{"name":"i","nativeSrc":"2245:1:69","nodeType":"YulIdentifier","src":"2245:1:69"},{"kind":"number","nativeSrc":"2248:2:69","nodeType":"YulLiteral","src":"2248:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2241:3:69","nodeType":"YulIdentifier","src":"2241:3:69"},"nativeSrc":"2241:10:69","nodeType":"YulFunctionCall","src":"2241:10:69"},"variableNames":[{"name":"i","nativeSrc":"2236:1:69","nodeType":"YulIdentifier","src":"2236:1:69"}]}]},"pre":{"nativeSrc":"2216:3:69","nodeType":"YulBlock","src":"2216:3:69","statements":[]},"src":"2212:113:69"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"2345:3:69","nodeType":"YulIdentifier","src":"2345:3:69"},{"name":"length","nativeSrc":"2350:6:69","nodeType":"YulIdentifier","src":"2350:6:69"}],"functionName":{"name":"add","nativeSrc":"2341:3:69","nodeType":"YulIdentifier","src":"2341:3:69"},"nativeSrc":"2341:16:69","nodeType":"YulFunctionCall","src":"2341:16:69"},{"kind":"number","nativeSrc":"2359:1:69","nodeType":"YulLiteral","src":"2359:1:69","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"2334:6:69","nodeType":"YulIdentifier","src":"2334:6:69"},"nativeSrc":"2334:27:69","nodeType":"YulFunctionCall","src":"2334:27:69"},"nativeSrc":"2334:27:69","nodeType":"YulExpressionStatement","src":"2334:27:69"}]},"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"2120:248:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"2164:3:69","nodeType":"YulTypedName","src":"2164:3:69","type":""},{"name":"dst","nativeSrc":"2169:3:69","nodeType":"YulTypedName","src":"2169:3:69","type":""},{"name":"length","nativeSrc":"2174:6:69","nodeType":"YulTypedName","src":"2174:6:69","type":""}],"src":"2120:248:69"},{"body":{"nativeSrc":"2468:338:69","nodeType":"YulBlock","src":"2468:338:69","statements":[{"nativeSrc":"2478:74:69","nodeType":"YulAssignment","src":"2478:74:69","value":{"arguments":[{"arguments":[{"name":"length","nativeSrc":"2544:6:69","nodeType":"YulIdentifier","src":"2544:6:69"}],"functionName":{"name":"array_allocation_size_t_bytes_memory_ptr","nativeSrc":"2503:40:69","nodeType":"YulIdentifier","src":"2503:40:69"},"nativeSrc":"2503:48:69","nodeType":"YulFunctionCall","src":"2503:48:69"}],"functionName":{"name":"allocate_memory","nativeSrc":"2487:15:69","nodeType":"YulIdentifier","src":"2487:15:69"},"nativeSrc":"2487:65:69","nodeType":"YulFunctionCall","src":"2487:65:69"},"variableNames":[{"name":"array","nativeSrc":"2478:5:69","nodeType":"YulIdentifier","src":"2478:5:69"}]},{"expression":{"arguments":[{"name":"array","nativeSrc":"2568:5:69","nodeType":"YulIdentifier","src":"2568:5:69"},{"name":"length","nativeSrc":"2575:6:69","nodeType":"YulIdentifier","src":"2575:6:69"}],"functionName":{"name":"mstore","nativeSrc":"2561:6:69","nodeType":"YulIdentifier","src":"2561:6:69"},"nativeSrc":"2561:21:69","nodeType":"YulFunctionCall","src":"2561:21:69"},"nativeSrc":"2561:21:69","nodeType":"YulExpressionStatement","src":"2561:21:69"},{"nativeSrc":"2591:27:69","nodeType":"YulVariableDeclaration","src":"2591:27:69","value":{"arguments":[{"name":"array","nativeSrc":"2606:5:69","nodeType":"YulIdentifier","src":"2606:5:69"},{"kind":"number","nativeSrc":"2613:4:69","nodeType":"YulLiteral","src":"2613:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2602:3:69","nodeType":"YulIdentifier","src":"2602:3:69"},"nativeSrc":"2602:16:69","nodeType":"YulFunctionCall","src":"2602:16:69"},"variables":[{"name":"dst","nativeSrc":"2595:3:69","nodeType":"YulTypedName","src":"2595:3:69","type":""}]},{"body":{"nativeSrc":"2656:83:69","nodeType":"YulBlock","src":"2656:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae","nativeSrc":"2658:77:69","nodeType":"YulIdentifier","src":"2658:77:69"},"nativeSrc":"2658:79:69","nodeType":"YulFunctionCall","src":"2658:79:69"},"nativeSrc":"2658:79:69","nodeType":"YulExpressionStatement","src":"2658:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"src","nativeSrc":"2637:3:69","nodeType":"YulIdentifier","src":"2637:3:69"},{"name":"length","nativeSrc":"2642:6:69","nodeType":"YulIdentifier","src":"2642:6:69"}],"functionName":{"name":"add","nativeSrc":"2633:3:69","nodeType":"YulIdentifier","src":"2633:3:69"},"nativeSrc":"2633:16:69","nodeType":"YulFunctionCall","src":"2633:16:69"},{"name":"end","nativeSrc":"2651:3:69","nodeType":"YulIdentifier","src":"2651:3:69"}],"functionName":{"name":"gt","nativeSrc":"2630:2:69","nodeType":"YulIdentifier","src":"2630:2:69"},"nativeSrc":"2630:25:69","nodeType":"YulFunctionCall","src":"2630:25:69"},"nativeSrc":"2627:112:69","nodeType":"YulIf","src":"2627:112:69"},{"expression":{"arguments":[{"name":"src","nativeSrc":"2783:3:69","nodeType":"YulIdentifier","src":"2783:3:69"},{"name":"dst","nativeSrc":"2788:3:69","nodeType":"YulIdentifier","src":"2788:3:69"},{"name":"length","nativeSrc":"2793:6:69","nodeType":"YulIdentifier","src":"2793:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"2748:34:69","nodeType":"YulIdentifier","src":"2748:34:69"},"nativeSrc":"2748:52:69","nodeType":"YulFunctionCall","src":"2748:52:69"},"nativeSrc":"2748:52:69","nodeType":"YulExpressionStatement","src":"2748:52:69"}]},"name":"abi_decode_available_length_t_bytes_memory_ptr_fromMemory","nativeSrc":"2374:432:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"2441:3:69","nodeType":"YulTypedName","src":"2441:3:69","type":""},{"name":"length","nativeSrc":"2446:6:69","nodeType":"YulTypedName","src":"2446:6:69","type":""},{"name":"end","nativeSrc":"2454:3:69","nodeType":"YulTypedName","src":"2454:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"2462:5:69","nodeType":"YulTypedName","src":"2462:5:69","type":""}],"src":"2374:432:69"},{"body":{"nativeSrc":"2897:281:69","nodeType":"YulBlock","src":"2897:281:69","statements":[{"body":{"nativeSrc":"2946:83:69","nodeType":"YulBlock","src":"2946:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"2948:77:69","nodeType":"YulIdentifier","src":"2948:77:69"},"nativeSrc":"2948:79:69","nodeType":"YulFunctionCall","src":"2948:79:69"},"nativeSrc":"2948:79:69","nodeType":"YulExpressionStatement","src":"2948:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"2925:6:69","nodeType":"YulIdentifier","src":"2925:6:69"},{"kind":"number","nativeSrc":"2933:4:69","nodeType":"YulLiteral","src":"2933:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"2921:3:69","nodeType":"YulIdentifier","src":"2921:3:69"},"nativeSrc":"2921:17:69","nodeType":"YulFunctionCall","src":"2921:17:69"},{"name":"end","nativeSrc":"2940:3:69","nodeType":"YulIdentifier","src":"2940:3:69"}],"functionName":{"name":"slt","nativeSrc":"2917:3:69","nodeType":"YulIdentifier","src":"2917:3:69"},"nativeSrc":"2917:27:69","nodeType":"YulFunctionCall","src":"2917:27:69"}],"functionName":{"name":"iszero","nativeSrc":"2910:6:69","nodeType":"YulIdentifier","src":"2910:6:69"},"nativeSrc":"2910:35:69","nodeType":"YulFunctionCall","src":"2910:35:69"},"nativeSrc":"2907:122:69","nodeType":"YulIf","src":"2907:122:69"},{"nativeSrc":"3038:27:69","nodeType":"YulVariableDeclaration","src":"3038:27:69","value":{"arguments":[{"name":"offset","nativeSrc":"3058:6:69","nodeType":"YulIdentifier","src":"3058:6:69"}],"functionName":{"name":"mload","nativeSrc":"3052:5:69","nodeType":"YulIdentifier","src":"3052:5:69"},"nativeSrc":"3052:13:69","nodeType":"YulFunctionCall","src":"3052:13:69"},"variables":[{"name":"length","nativeSrc":"3042:6:69","nodeType":"YulTypedName","src":"3042:6:69","type":""}]},{"nativeSrc":"3074:98:69","nodeType":"YulAssignment","src":"3074:98:69","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"3145:6:69","nodeType":"YulIdentifier","src":"3145:6:69"},{"kind":"number","nativeSrc":"3153:4:69","nodeType":"YulLiteral","src":"3153:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"3141:3:69","nodeType":"YulIdentifier","src":"3141:3:69"},"nativeSrc":"3141:17:69","nodeType":"YulFunctionCall","src":"3141:17:69"},{"name":"length","nativeSrc":"3160:6:69","nodeType":"YulIdentifier","src":"3160:6:69"},{"name":"end","nativeSrc":"3168:3:69","nodeType":"YulIdentifier","src":"3168:3:69"}],"functionName":{"name":"abi_decode_available_length_t_bytes_memory_ptr_fromMemory","nativeSrc":"3083:57:69","nodeType":"YulIdentifier","src":"3083:57:69"},"nativeSrc":"3083:89:69","nodeType":"YulFunctionCall","src":"3083:89:69"},"variableNames":[{"name":"array","nativeSrc":"3074:5:69","nodeType":"YulIdentifier","src":"3074:5:69"}]}]},"name":"abi_decode_t_bytes_memory_ptr_fromMemory","nativeSrc":"2825:353:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"2875:6:69","nodeType":"YulTypedName","src":"2875:6:69","type":""},{"name":"end","nativeSrc":"2883:3:69","nodeType":"YulTypedName","src":"2883:3:69","type":""}],"returnVariables":[{"name":"array","nativeSrc":"2891:5:69","nodeType":"YulTypedName","src":"2891:5:69","type":""}],"src":"2825:353:69"},{"body":{"nativeSrc":"3304:714:69","nodeType":"YulBlock","src":"3304:714:69","statements":[{"body":{"nativeSrc":"3350:83:69","nodeType":"YulBlock","src":"3350:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"3352:77:69","nodeType":"YulIdentifier","src":"3352:77:69"},"nativeSrc":"3352:79:69","nodeType":"YulFunctionCall","src":"3352:79:69"},"nativeSrc":"3352:79:69","nodeType":"YulExpressionStatement","src":"3352:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"3325:7:69","nodeType":"YulIdentifier","src":"3325:7:69"},{"name":"headStart","nativeSrc":"3334:9:69","nodeType":"YulIdentifier","src":"3334:9:69"}],"functionName":{"name":"sub","nativeSrc":"3321:3:69","nodeType":"YulIdentifier","src":"3321:3:69"},"nativeSrc":"3321:23:69","nodeType":"YulFunctionCall","src":"3321:23:69"},{"kind":"number","nativeSrc":"3346:2:69","nodeType":"YulLiteral","src":"3346:2:69","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"3317:3:69","nodeType":"YulIdentifier","src":"3317:3:69"},"nativeSrc":"3317:32:69","nodeType":"YulFunctionCall","src":"3317:32:69"},"nativeSrc":"3314:119:69","nodeType":"YulIf","src":"3314:119:69"},{"nativeSrc":"3443:128:69","nodeType":"YulBlock","src":"3443:128:69","statements":[{"nativeSrc":"3458:15:69","nodeType":"YulVariableDeclaration","src":"3458:15:69","value":{"kind":"number","nativeSrc":"3472:1:69","nodeType":"YulLiteral","src":"3472:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"3462:6:69","nodeType":"YulTypedName","src":"3462:6:69","type":""}]},{"nativeSrc":"3487:74:69","nodeType":"YulAssignment","src":"3487:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3533:9:69","nodeType":"YulIdentifier","src":"3533:9:69"},{"name":"offset","nativeSrc":"3544:6:69","nodeType":"YulIdentifier","src":"3544:6:69"}],"functionName":{"name":"add","nativeSrc":"3529:3:69","nodeType":"YulIdentifier","src":"3529:3:69"},"nativeSrc":"3529:22:69","nodeType":"YulFunctionCall","src":"3529:22:69"},{"name":"dataEnd","nativeSrc":"3553:7:69","nodeType":"YulIdentifier","src":"3553:7:69"}],"functionName":{"name":"abi_decode_t_address_fromMemory","nativeSrc":"3497:31:69","nodeType":"YulIdentifier","src":"3497:31:69"},"nativeSrc":"3497:64:69","nodeType":"YulFunctionCall","src":"3497:64:69"},"variableNames":[{"name":"value0","nativeSrc":"3487:6:69","nodeType":"YulIdentifier","src":"3487:6:69"}]}]},{"nativeSrc":"3581:129:69","nodeType":"YulBlock","src":"3581:129:69","statements":[{"nativeSrc":"3596:16:69","nodeType":"YulVariableDeclaration","src":"3596:16:69","value":{"kind":"number","nativeSrc":"3610:2:69","nodeType":"YulLiteral","src":"3610:2:69","type":"","value":"32"},"variables":[{"name":"offset","nativeSrc":"3600:6:69","nodeType":"YulTypedName","src":"3600:6:69","type":""}]},{"nativeSrc":"3626:74:69","nodeType":"YulAssignment","src":"3626:74:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3672:9:69","nodeType":"YulIdentifier","src":"3672:9:69"},{"name":"offset","nativeSrc":"3683:6:69","nodeType":"YulIdentifier","src":"3683:6:69"}],"functionName":{"name":"add","nativeSrc":"3668:3:69","nodeType":"YulIdentifier","src":"3668:3:69"},"nativeSrc":"3668:22:69","nodeType":"YulFunctionCall","src":"3668:22:69"},{"name":"dataEnd","nativeSrc":"3692:7:69","nodeType":"YulIdentifier","src":"3692:7:69"}],"functionName":{"name":"abi_decode_t_address_fromMemory","nativeSrc":"3636:31:69","nodeType":"YulIdentifier","src":"3636:31:69"},"nativeSrc":"3636:64:69","nodeType":"YulFunctionCall","src":"3636:64:69"},"variableNames":[{"name":"value1","nativeSrc":"3626:6:69","nodeType":"YulIdentifier","src":"3626:6:69"}]}]},{"nativeSrc":"3720:291:69","nodeType":"YulBlock","src":"3720:291:69","statements":[{"nativeSrc":"3735:39:69","nodeType":"YulVariableDeclaration","src":"3735:39:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3759:9:69","nodeType":"YulIdentifier","src":"3759:9:69"},{"kind":"number","nativeSrc":"3770:2:69","nodeType":"YulLiteral","src":"3770:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"3755:3:69","nodeType":"YulIdentifier","src":"3755:3:69"},"nativeSrc":"3755:18:69","nodeType":"YulFunctionCall","src":"3755:18:69"}],"functionName":{"name":"mload","nativeSrc":"3749:5:69","nodeType":"YulIdentifier","src":"3749:5:69"},"nativeSrc":"3749:25:69","nodeType":"YulFunctionCall","src":"3749:25:69"},"variables":[{"name":"offset","nativeSrc":"3739:6:69","nodeType":"YulTypedName","src":"3739:6:69","type":""}]},{"body":{"nativeSrc":"3821:83:69","nodeType":"YulBlock","src":"3821:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"3823:77:69","nodeType":"YulIdentifier","src":"3823:77:69"},"nativeSrc":"3823:79:69","nodeType":"YulFunctionCall","src":"3823:79:69"},"nativeSrc":"3823:79:69","nodeType":"YulExpressionStatement","src":"3823:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"3793:6:69","nodeType":"YulIdentifier","src":"3793:6:69"},{"kind":"number","nativeSrc":"3801:18:69","nodeType":"YulLiteral","src":"3801:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"3790:2:69","nodeType":"YulIdentifier","src":"3790:2:69"},"nativeSrc":"3790:30:69","nodeType":"YulFunctionCall","src":"3790:30:69"},"nativeSrc":"3787:117:69","nodeType":"YulIf","src":"3787:117:69"},{"nativeSrc":"3918:83:69","nodeType":"YulAssignment","src":"3918:83:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3973:9:69","nodeType":"YulIdentifier","src":"3973:9:69"},{"name":"offset","nativeSrc":"3984:6:69","nodeType":"YulIdentifier","src":"3984:6:69"}],"functionName":{"name":"add","nativeSrc":"3969:3:69","nodeType":"YulIdentifier","src":"3969:3:69"},"nativeSrc":"3969:22:69","nodeType":"YulFunctionCall","src":"3969:22:69"},{"name":"dataEnd","nativeSrc":"3993:7:69","nodeType":"YulIdentifier","src":"3993:7:69"}],"functionName":{"name":"abi_decode_t_bytes_memory_ptr_fromMemory","nativeSrc":"3928:40:69","nodeType":"YulIdentifier","src":"3928:40:69"},"nativeSrc":"3928:73:69","nodeType":"YulFunctionCall","src":"3928:73:69"},"variableNames":[{"name":"value2","nativeSrc":"3918:6:69","nodeType":"YulIdentifier","src":"3918:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory","nativeSrc":"3184:834:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3258:9:69","nodeType":"YulTypedName","src":"3258:9:69","type":""},{"name":"dataEnd","nativeSrc":"3269:7:69","nodeType":"YulTypedName","src":"3269:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"3281:6:69","nodeType":"YulTypedName","src":"3281:6:69","type":""},{"name":"value1","nativeSrc":"3289:6:69","nodeType":"YulTypedName","src":"3289:6:69","type":""},{"name":"value2","nativeSrc":"3297:6:69","nodeType":"YulTypedName","src":"3297:6:69","type":""}],"src":"3184:834:69"},{"body":{"nativeSrc":"4069:32:69","nodeType":"YulBlock","src":"4069:32:69","statements":[{"nativeSrc":"4079:16:69","nodeType":"YulAssignment","src":"4079:16:69","value":{"name":"value","nativeSrc":"4090:5:69","nodeType":"YulIdentifier","src":"4090:5:69"},"variableNames":[{"name":"cleaned","nativeSrc":"4079:7:69","nodeType":"YulIdentifier","src":"4079:7:69"}]}]},"name":"cleanup_t_uint256","nativeSrc":"4024:77:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4051:5:69","nodeType":"YulTypedName","src":"4051:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"4061:7:69","nodeType":"YulTypedName","src":"4061:7:69","type":""}],"src":"4024:77:69"},{"body":{"nativeSrc":"4135:152:69","nodeType":"YulBlock","src":"4135:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4152:1:69","nodeType":"YulLiteral","src":"4152:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"4155:77:69","nodeType":"YulLiteral","src":"4155:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"4145:6:69","nodeType":"YulIdentifier","src":"4145:6:69"},"nativeSrc":"4145:88:69","nodeType":"YulFunctionCall","src":"4145:88:69"},"nativeSrc":"4145:88:69","nodeType":"YulExpressionStatement","src":"4145:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4249:1:69","nodeType":"YulLiteral","src":"4249:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"4252:4:69","nodeType":"YulLiteral","src":"4252:4:69","type":"","value":"0x11"}],"functionName":{"name":"mstore","nativeSrc":"4242:6:69","nodeType":"YulIdentifier","src":"4242:6:69"},"nativeSrc":"4242:15:69","nodeType":"YulFunctionCall","src":"4242:15:69"},"nativeSrc":"4242:15:69","nodeType":"YulExpressionStatement","src":"4242:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4273:1:69","nodeType":"YulLiteral","src":"4273:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"4276:4:69","nodeType":"YulLiteral","src":"4276:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"4266:6:69","nodeType":"YulIdentifier","src":"4266:6:69"},"nativeSrc":"4266:15:69","nodeType":"YulFunctionCall","src":"4266:15:69"},"nativeSrc":"4266:15:69","nodeType":"YulExpressionStatement","src":"4266:15:69"}]},"name":"panic_error_0x11","nativeSrc":"4107:180:69","nodeType":"YulFunctionDefinition","src":"4107:180:69"},{"body":{"nativeSrc":"4338:149:69","nodeType":"YulBlock","src":"4338:149:69","statements":[{"nativeSrc":"4348:25:69","nodeType":"YulAssignment","src":"4348:25:69","value":{"arguments":[{"name":"x","nativeSrc":"4371:1:69","nodeType":"YulIdentifier","src":"4371:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"4353:17:69","nodeType":"YulIdentifier","src":"4353:17:69"},"nativeSrc":"4353:20:69","nodeType":"YulFunctionCall","src":"4353:20:69"},"variableNames":[{"name":"x","nativeSrc":"4348:1:69","nodeType":"YulIdentifier","src":"4348:1:69"}]},{"nativeSrc":"4382:25:69","nodeType":"YulAssignment","src":"4382:25:69","value":{"arguments":[{"name":"y","nativeSrc":"4405:1:69","nodeType":"YulIdentifier","src":"4405:1:69"}],"functionName":{"name":"cleanup_t_uint256","nativeSrc":"4387:17:69","nodeType":"YulIdentifier","src":"4387:17:69"},"nativeSrc":"4387:20:69","nodeType":"YulFunctionCall","src":"4387:20:69"},"variableNames":[{"name":"y","nativeSrc":"4382:1:69","nodeType":"YulIdentifier","src":"4382:1:69"}]},{"nativeSrc":"4416:17:69","nodeType":"YulAssignment","src":"4416:17:69","value":{"arguments":[{"name":"x","nativeSrc":"4428:1:69","nodeType":"YulIdentifier","src":"4428:1:69"},{"name":"y","nativeSrc":"4431:1:69","nodeType":"YulIdentifier","src":"4431:1:69"}],"functionName":{"name":"sub","nativeSrc":"4424:3:69","nodeType":"YulIdentifier","src":"4424:3:69"},"nativeSrc":"4424:9:69","nodeType":"YulFunctionCall","src":"4424:9:69"},"variableNames":[{"name":"diff","nativeSrc":"4416:4:69","nodeType":"YulIdentifier","src":"4416:4:69"}]},{"body":{"nativeSrc":"4458:22:69","nodeType":"YulBlock","src":"4458:22:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"4460:16:69","nodeType":"YulIdentifier","src":"4460:16:69"},"nativeSrc":"4460:18:69","nodeType":"YulFunctionCall","src":"4460:18:69"},"nativeSrc":"4460:18:69","nodeType":"YulExpressionStatement","src":"4460:18:69"}]},"condition":{"arguments":[{"name":"diff","nativeSrc":"4449:4:69","nodeType":"YulIdentifier","src":"4449:4:69"},{"name":"x","nativeSrc":"4455:1:69","nodeType":"YulIdentifier","src":"4455:1:69"}],"functionName":{"name":"gt","nativeSrc":"4446:2:69","nodeType":"YulIdentifier","src":"4446:2:69"},"nativeSrc":"4446:11:69","nodeType":"YulFunctionCall","src":"4446:11:69"},"nativeSrc":"4443:37:69","nodeType":"YulIf","src":"4443:37:69"}]},"name":"checked_sub_t_uint256","nativeSrc":"4293:194:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"4324:1:69","nodeType":"YulTypedName","src":"4324:1:69","type":""},{"name":"y","nativeSrc":"4327:1:69","nodeType":"YulTypedName","src":"4327:1:69","type":""}],"returnVariables":[{"name":"diff","nativeSrc":"4333:4:69","nodeType":"YulTypedName","src":"4333:4:69","type":""}],"src":"4293:194:69"},{"body":{"nativeSrc":"4521:152:69","nodeType":"YulBlock","src":"4521:152:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4538:1:69","nodeType":"YulLiteral","src":"4538:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"4541:77:69","nodeType":"YulLiteral","src":"4541:77:69","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"4531:6:69","nodeType":"YulIdentifier","src":"4531:6:69"},"nativeSrc":"4531:88:69","nodeType":"YulFunctionCall","src":"4531:88:69"},"nativeSrc":"4531:88:69","nodeType":"YulExpressionStatement","src":"4531:88:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4635:1:69","nodeType":"YulLiteral","src":"4635:1:69","type":"","value":"4"},{"kind":"number","nativeSrc":"4638:4:69","nodeType":"YulLiteral","src":"4638:4:69","type":"","value":"0x01"}],"functionName":{"name":"mstore","nativeSrc":"4628:6:69","nodeType":"YulIdentifier","src":"4628:6:69"},"nativeSrc":"4628:15:69","nodeType":"YulFunctionCall","src":"4628:15:69"},"nativeSrc":"4628:15:69","nodeType":"YulExpressionStatement","src":"4628:15:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4659:1:69","nodeType":"YulLiteral","src":"4659:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"4662:4:69","nodeType":"YulLiteral","src":"4662:4:69","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"4652:6:69","nodeType":"YulIdentifier","src":"4652:6:69"},"nativeSrc":"4652:15:69","nodeType":"YulFunctionCall","src":"4652:15:69"},"nativeSrc":"4652:15:69","nodeType":"YulExpressionStatement","src":"4652:15:69"}]},"name":"panic_error_0x01","nativeSrc":"4493:180:69","nodeType":"YulFunctionDefinition","src":"4493:180:69"},{"body":{"nativeSrc":"4744:53:69","nodeType":"YulBlock","src":"4744:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"4761:3:69","nodeType":"YulIdentifier","src":"4761:3:69"},{"arguments":[{"name":"value","nativeSrc":"4784:5:69","nodeType":"YulIdentifier","src":"4784:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"4766:17:69","nodeType":"YulIdentifier","src":"4766:17:69"},"nativeSrc":"4766:24:69","nodeType":"YulFunctionCall","src":"4766:24:69"}],"functionName":{"name":"mstore","nativeSrc":"4754:6:69","nodeType":"YulIdentifier","src":"4754:6:69"},"nativeSrc":"4754:37:69","nodeType":"YulFunctionCall","src":"4754:37:69"},"nativeSrc":"4754:37:69","nodeType":"YulExpressionStatement","src":"4754:37:69"}]},"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"4679:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"4732:5:69","nodeType":"YulTypedName","src":"4732:5:69","type":""},{"name":"pos","nativeSrc":"4739:3:69","nodeType":"YulTypedName","src":"4739:3:69","type":""}],"src":"4679:118:69"},{"body":{"nativeSrc":"4929:206:69","nodeType":"YulBlock","src":"4929:206:69","statements":[{"nativeSrc":"4939:26:69","nodeType":"YulAssignment","src":"4939:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"4951:9:69","nodeType":"YulIdentifier","src":"4951:9:69"},{"kind":"number","nativeSrc":"4962:2:69","nodeType":"YulLiteral","src":"4962:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"4947:3:69","nodeType":"YulIdentifier","src":"4947:3:69"},"nativeSrc":"4947:18:69","nodeType":"YulFunctionCall","src":"4947:18:69"},"variableNames":[{"name":"tail","nativeSrc":"4939:4:69","nodeType":"YulIdentifier","src":"4939:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"5019:6:69","nodeType":"YulIdentifier","src":"5019:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"5032:9:69","nodeType":"YulIdentifier","src":"5032:9:69"},{"kind":"number","nativeSrc":"5043:1:69","nodeType":"YulLiteral","src":"5043:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5028:3:69","nodeType":"YulIdentifier","src":"5028:3:69"},"nativeSrc":"5028:17:69","nodeType":"YulFunctionCall","src":"5028:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"4975:43:69","nodeType":"YulIdentifier","src":"4975:43:69"},"nativeSrc":"4975:71:69","nodeType":"YulFunctionCall","src":"4975:71:69"},"nativeSrc":"4975:71:69","nodeType":"YulExpressionStatement","src":"4975:71:69"},{"expression":{"arguments":[{"name":"value1","nativeSrc":"5100:6:69","nodeType":"YulIdentifier","src":"5100:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"5113:9:69","nodeType":"YulIdentifier","src":"5113:9:69"},{"kind":"number","nativeSrc":"5124:2:69","nodeType":"YulLiteral","src":"5124:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5109:3:69","nodeType":"YulIdentifier","src":"5109:3:69"},"nativeSrc":"5109:18:69","nodeType":"YulFunctionCall","src":"5109:18:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"5056:43:69","nodeType":"YulIdentifier","src":"5056:43:69"},"nativeSrc":"5056:72:69","nodeType":"YulFunctionCall","src":"5056:72:69"},"nativeSrc":"5056:72:69","nodeType":"YulExpressionStatement","src":"5056:72:69"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nativeSrc":"4803:332:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4893:9:69","nodeType":"YulTypedName","src":"4893:9:69","type":""},{"name":"value1","nativeSrc":"4905:6:69","nodeType":"YulTypedName","src":"4905:6:69","type":""},{"name":"value0","nativeSrc":"4913:6:69","nodeType":"YulTypedName","src":"4913:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4924:4:69","nodeType":"YulTypedName","src":"4924:4:69","type":""}],"src":"4803:332:69"},{"body":{"nativeSrc":"5237:73:69","nodeType":"YulBlock","src":"5237:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"5254:3:69","nodeType":"YulIdentifier","src":"5254:3:69"},{"name":"length","nativeSrc":"5259:6:69","nodeType":"YulIdentifier","src":"5259:6:69"}],"functionName":{"name":"mstore","nativeSrc":"5247:6:69","nodeType":"YulIdentifier","src":"5247:6:69"},"nativeSrc":"5247:19:69","nodeType":"YulFunctionCall","src":"5247:19:69"},"nativeSrc":"5247:19:69","nodeType":"YulExpressionStatement","src":"5247:19:69"},{"nativeSrc":"5275:29:69","nodeType":"YulAssignment","src":"5275:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"5294:3:69","nodeType":"YulIdentifier","src":"5294:3:69"},{"kind":"number","nativeSrc":"5299:4:69","nodeType":"YulLiteral","src":"5299:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5290:3:69","nodeType":"YulIdentifier","src":"5290:3:69"},"nativeSrc":"5290:14:69","nodeType":"YulFunctionCall","src":"5290:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"5275:11:69","nodeType":"YulIdentifier","src":"5275:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"5141:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"5209:3:69","nodeType":"YulTypedName","src":"5209:3:69","type":""},{"name":"length","nativeSrc":"5214:6:69","nodeType":"YulTypedName","src":"5214:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"5225:11:69","nodeType":"YulTypedName","src":"5225:11:69","type":""}],"src":"5141:169:69"},{"body":{"nativeSrc":"5422:126:69","nodeType":"YulBlock","src":"5422:126:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"5444:6:69","nodeType":"YulIdentifier","src":"5444:6:69"},{"kind":"number","nativeSrc":"5452:1:69","nodeType":"YulLiteral","src":"5452:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5440:3:69","nodeType":"YulIdentifier","src":"5440:3:69"},"nativeSrc":"5440:14:69","nodeType":"YulFunctionCall","src":"5440:14:69"},{"hexValue":"455243313936373a206e657720696d706c656d656e746174696f6e206973206e","kind":"string","nativeSrc":"5456:34:69","nodeType":"YulLiteral","src":"5456:34:69","type":"","value":"ERC1967: new implementation is n"}],"functionName":{"name":"mstore","nativeSrc":"5433:6:69","nodeType":"YulIdentifier","src":"5433:6:69"},"nativeSrc":"5433:58:69","nodeType":"YulFunctionCall","src":"5433:58:69"},"nativeSrc":"5433:58:69","nodeType":"YulExpressionStatement","src":"5433:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"5512:6:69","nodeType":"YulIdentifier","src":"5512:6:69"},{"kind":"number","nativeSrc":"5520:2:69","nodeType":"YulLiteral","src":"5520:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5508:3:69","nodeType":"YulIdentifier","src":"5508:3:69"},"nativeSrc":"5508:15:69","nodeType":"YulFunctionCall","src":"5508:15:69"},{"hexValue":"6f74206120636f6e7472616374","kind":"string","nativeSrc":"5525:15:69","nodeType":"YulLiteral","src":"5525:15:69","type":"","value":"ot a contract"}],"functionName":{"name":"mstore","nativeSrc":"5501:6:69","nodeType":"YulIdentifier","src":"5501:6:69"},"nativeSrc":"5501:40:69","nodeType":"YulFunctionCall","src":"5501:40:69"},"nativeSrc":"5501:40:69","nodeType":"YulExpressionStatement","src":"5501:40:69"}]},"name":"store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65","nativeSrc":"5316:232:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"5414:6:69","nodeType":"YulTypedName","src":"5414:6:69","type":""}],"src":"5316:232:69"},{"body":{"nativeSrc":"5700:220:69","nodeType":"YulBlock","src":"5700:220:69","statements":[{"nativeSrc":"5710:74:69","nodeType":"YulAssignment","src":"5710:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"5776:3:69","nodeType":"YulIdentifier","src":"5776:3:69"},{"kind":"number","nativeSrc":"5781:2:69","nodeType":"YulLiteral","src":"5781:2:69","type":"","value":"45"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"5717:58:69","nodeType":"YulIdentifier","src":"5717:58:69"},"nativeSrc":"5717:67:69","nodeType":"YulFunctionCall","src":"5717:67:69"},"variableNames":[{"name":"pos","nativeSrc":"5710:3:69","nodeType":"YulIdentifier","src":"5710:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"5882:3:69","nodeType":"YulIdentifier","src":"5882:3:69"}],"functionName":{"name":"store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65","nativeSrc":"5793:88:69","nodeType":"YulIdentifier","src":"5793:88:69"},"nativeSrc":"5793:93:69","nodeType":"YulFunctionCall","src":"5793:93:69"},"nativeSrc":"5793:93:69","nodeType":"YulExpressionStatement","src":"5793:93:69"},{"nativeSrc":"5895:19:69","nodeType":"YulAssignment","src":"5895:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"5906:3:69","nodeType":"YulIdentifier","src":"5906:3:69"},{"kind":"number","nativeSrc":"5911:2:69","nodeType":"YulLiteral","src":"5911:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"5902:3:69","nodeType":"YulIdentifier","src":"5902:3:69"},"nativeSrc":"5902:12:69","nodeType":"YulFunctionCall","src":"5902:12:69"},"variableNames":[{"name":"end","nativeSrc":"5895:3:69","nodeType":"YulIdentifier","src":"5895:3:69"}]}]},"name":"abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack","nativeSrc":"5554:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"5688:3:69","nodeType":"YulTypedName","src":"5688:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"5696:3:69","nodeType":"YulTypedName","src":"5696:3:69","type":""}],"src":"5554:366:69"},{"body":{"nativeSrc":"6097:248:69","nodeType":"YulBlock","src":"6097:248:69","statements":[{"nativeSrc":"6107:26:69","nodeType":"YulAssignment","src":"6107:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"6119:9:69","nodeType":"YulIdentifier","src":"6119:9:69"},{"kind":"number","nativeSrc":"6130:2:69","nodeType":"YulLiteral","src":"6130:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"6115:3:69","nodeType":"YulIdentifier","src":"6115:3:69"},"nativeSrc":"6115:18:69","nodeType":"YulFunctionCall","src":"6115:18:69"},"variableNames":[{"name":"tail","nativeSrc":"6107:4:69","nodeType":"YulIdentifier","src":"6107:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6154:9:69","nodeType":"YulIdentifier","src":"6154:9:69"},{"kind":"number","nativeSrc":"6165:1:69","nodeType":"YulLiteral","src":"6165:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"6150:3:69","nodeType":"YulIdentifier","src":"6150:3:69"},"nativeSrc":"6150:17:69","nodeType":"YulFunctionCall","src":"6150:17:69"},{"arguments":[{"name":"tail","nativeSrc":"6173:4:69","nodeType":"YulIdentifier","src":"6173:4:69"},{"name":"headStart","nativeSrc":"6179:9:69","nodeType":"YulIdentifier","src":"6179:9:69"}],"functionName":{"name":"sub","nativeSrc":"6169:3:69","nodeType":"YulIdentifier","src":"6169:3:69"},"nativeSrc":"6169:20:69","nodeType":"YulFunctionCall","src":"6169:20:69"}],"functionName":{"name":"mstore","nativeSrc":"6143:6:69","nodeType":"YulIdentifier","src":"6143:6:69"},"nativeSrc":"6143:47:69","nodeType":"YulFunctionCall","src":"6143:47:69"},"nativeSrc":"6143:47:69","nodeType":"YulExpressionStatement","src":"6143:47:69"},{"nativeSrc":"6199:139:69","nodeType":"YulAssignment","src":"6199:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"6333:4:69","nodeType":"YulIdentifier","src":"6333:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack","nativeSrc":"6207:124:69","nodeType":"YulIdentifier","src":"6207:124:69"},"nativeSrc":"6207:131:69","nodeType":"YulFunctionCall","src":"6207:131:69"},"variableNames":[{"name":"tail","nativeSrc":"6199:4:69","nodeType":"YulIdentifier","src":"6199:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"5926:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6077:9:69","nodeType":"YulTypedName","src":"6077:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"6092:4:69","nodeType":"YulTypedName","src":"6092:4:69","type":""}],"src":"5926:419:69"},{"body":{"nativeSrc":"6457:119:69","nodeType":"YulBlock","src":"6457:119:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"6479:6:69","nodeType":"YulIdentifier","src":"6479:6:69"},{"kind":"number","nativeSrc":"6487:1:69","nodeType":"YulLiteral","src":"6487:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"6475:3:69","nodeType":"YulIdentifier","src":"6475:3:69"},"nativeSrc":"6475:14:69","nodeType":"YulFunctionCall","src":"6475:14:69"},{"hexValue":"416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f","kind":"string","nativeSrc":"6491:34:69","nodeType":"YulLiteral","src":"6491:34:69","type":"","value":"Address: delegate call to non-co"}],"functionName":{"name":"mstore","nativeSrc":"6468:6:69","nodeType":"YulIdentifier","src":"6468:6:69"},"nativeSrc":"6468:58:69","nodeType":"YulFunctionCall","src":"6468:58:69"},"nativeSrc":"6468:58:69","nodeType":"YulExpressionStatement","src":"6468:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"6547:6:69","nodeType":"YulIdentifier","src":"6547:6:69"},{"kind":"number","nativeSrc":"6555:2:69","nodeType":"YulLiteral","src":"6555:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"6543:3:69","nodeType":"YulIdentifier","src":"6543:3:69"},"nativeSrc":"6543:15:69","nodeType":"YulFunctionCall","src":"6543:15:69"},{"hexValue":"6e7472616374","kind":"string","nativeSrc":"6560:8:69","nodeType":"YulLiteral","src":"6560:8:69","type":"","value":"ntract"}],"functionName":{"name":"mstore","nativeSrc":"6536:6:69","nodeType":"YulIdentifier","src":"6536:6:69"},"nativeSrc":"6536:33:69","nodeType":"YulFunctionCall","src":"6536:33:69"},"nativeSrc":"6536:33:69","nodeType":"YulExpressionStatement","src":"6536:33:69"}]},"name":"store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520","nativeSrc":"6351:225:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"6449:6:69","nodeType":"YulTypedName","src":"6449:6:69","type":""}],"src":"6351:225:69"},{"body":{"nativeSrc":"6728:220:69","nodeType":"YulBlock","src":"6728:220:69","statements":[{"nativeSrc":"6738:74:69","nodeType":"YulAssignment","src":"6738:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"6804:3:69","nodeType":"YulIdentifier","src":"6804:3:69"},{"kind":"number","nativeSrc":"6809:2:69","nodeType":"YulLiteral","src":"6809:2:69","type":"","value":"38"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"6745:58:69","nodeType":"YulIdentifier","src":"6745:58:69"},"nativeSrc":"6745:67:69","nodeType":"YulFunctionCall","src":"6745:67:69"},"variableNames":[{"name":"pos","nativeSrc":"6738:3:69","nodeType":"YulIdentifier","src":"6738:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"6910:3:69","nodeType":"YulIdentifier","src":"6910:3:69"}],"functionName":{"name":"store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520","nativeSrc":"6821:88:69","nodeType":"YulIdentifier","src":"6821:88:69"},"nativeSrc":"6821:93:69","nodeType":"YulFunctionCall","src":"6821:93:69"},"nativeSrc":"6821:93:69","nodeType":"YulExpressionStatement","src":"6821:93:69"},{"nativeSrc":"6923:19:69","nodeType":"YulAssignment","src":"6923:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"6934:3:69","nodeType":"YulIdentifier","src":"6934:3:69"},{"kind":"number","nativeSrc":"6939:2:69","nodeType":"YulLiteral","src":"6939:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"6930:3:69","nodeType":"YulIdentifier","src":"6930:3:69"},"nativeSrc":"6930:12:69","nodeType":"YulFunctionCall","src":"6930:12:69"},"variableNames":[{"name":"end","nativeSrc":"6923:3:69","nodeType":"YulIdentifier","src":"6923:3:69"}]}]},"name":"abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack","nativeSrc":"6582:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"6716:3:69","nodeType":"YulTypedName","src":"6716:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"6724:3:69","nodeType":"YulTypedName","src":"6724:3:69","type":""}],"src":"6582:366:69"},{"body":{"nativeSrc":"7125:248:69","nodeType":"YulBlock","src":"7125:248:69","statements":[{"nativeSrc":"7135:26:69","nodeType":"YulAssignment","src":"7135:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"7147:9:69","nodeType":"YulIdentifier","src":"7147:9:69"},{"kind":"number","nativeSrc":"7158:2:69","nodeType":"YulLiteral","src":"7158:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7143:3:69","nodeType":"YulIdentifier","src":"7143:3:69"},"nativeSrc":"7143:18:69","nodeType":"YulFunctionCall","src":"7143:18:69"},"variableNames":[{"name":"tail","nativeSrc":"7135:4:69","nodeType":"YulIdentifier","src":"7135:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7182:9:69","nodeType":"YulIdentifier","src":"7182:9:69"},{"kind":"number","nativeSrc":"7193:1:69","nodeType":"YulLiteral","src":"7193:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"7178:3:69","nodeType":"YulIdentifier","src":"7178:3:69"},"nativeSrc":"7178:17:69","nodeType":"YulFunctionCall","src":"7178:17:69"},{"arguments":[{"name":"tail","nativeSrc":"7201:4:69","nodeType":"YulIdentifier","src":"7201:4:69"},{"name":"headStart","nativeSrc":"7207:9:69","nodeType":"YulIdentifier","src":"7207:9:69"}],"functionName":{"name":"sub","nativeSrc":"7197:3:69","nodeType":"YulIdentifier","src":"7197:3:69"},"nativeSrc":"7197:20:69","nodeType":"YulFunctionCall","src":"7197:20:69"}],"functionName":{"name":"mstore","nativeSrc":"7171:6:69","nodeType":"YulIdentifier","src":"7171:6:69"},"nativeSrc":"7171:47:69","nodeType":"YulFunctionCall","src":"7171:47:69"},"nativeSrc":"7171:47:69","nodeType":"YulExpressionStatement","src":"7171:47:69"},{"nativeSrc":"7227:139:69","nodeType":"YulAssignment","src":"7227:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"7361:4:69","nodeType":"YulIdentifier","src":"7361:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack","nativeSrc":"7235:124:69","nodeType":"YulIdentifier","src":"7235:124:69"},"nativeSrc":"7235:131:69","nodeType":"YulFunctionCall","src":"7235:131:69"},"variableNames":[{"name":"tail","nativeSrc":"7227:4:69","nodeType":"YulIdentifier","src":"7227:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"6954:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"7105:9:69","nodeType":"YulTypedName","src":"7105:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"7120:4:69","nodeType":"YulTypedName","src":"7120:4:69","type":""}],"src":"6954:419:69"},{"body":{"nativeSrc":"7437:40:69","nodeType":"YulBlock","src":"7437:40:69","statements":[{"nativeSrc":"7448:22:69","nodeType":"YulAssignment","src":"7448:22:69","value":{"arguments":[{"name":"value","nativeSrc":"7464:5:69","nodeType":"YulIdentifier","src":"7464:5:69"}],"functionName":{"name":"mload","nativeSrc":"7458:5:69","nodeType":"YulIdentifier","src":"7458:5:69"},"nativeSrc":"7458:12:69","nodeType":"YulFunctionCall","src":"7458:12:69"},"variableNames":[{"name":"length","nativeSrc":"7448:6:69","nodeType":"YulIdentifier","src":"7448:6:69"}]}]},"name":"array_length_t_bytes_memory_ptr","nativeSrc":"7379:98:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7420:5:69","nodeType":"YulTypedName","src":"7420:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"7430:6:69","nodeType":"YulTypedName","src":"7430:6:69","type":""}],"src":"7379:98:69"},{"body":{"nativeSrc":"7596:34:69","nodeType":"YulBlock","src":"7596:34:69","statements":[{"nativeSrc":"7606:18:69","nodeType":"YulAssignment","src":"7606:18:69","value":{"name":"pos","nativeSrc":"7621:3:69","nodeType":"YulIdentifier","src":"7621:3:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"7606:11:69","nodeType":"YulIdentifier","src":"7606:11:69"}]}]},"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"7483:147:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"7568:3:69","nodeType":"YulTypedName","src":"7568:3:69","type":""},{"name":"length","nativeSrc":"7573:6:69","nodeType":"YulTypedName","src":"7573:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"7584:11:69","nodeType":"YulTypedName","src":"7584:11:69","type":""}],"src":"7483:147:69"},{"body":{"nativeSrc":"7744:278:69","nodeType":"YulBlock","src":"7744:278:69","statements":[{"nativeSrc":"7754:52:69","nodeType":"YulVariableDeclaration","src":"7754:52:69","value":{"arguments":[{"name":"value","nativeSrc":"7800:5:69","nodeType":"YulIdentifier","src":"7800:5:69"}],"functionName":{"name":"array_length_t_bytes_memory_ptr","nativeSrc":"7768:31:69","nodeType":"YulIdentifier","src":"7768:31:69"},"nativeSrc":"7768:38:69","nodeType":"YulFunctionCall","src":"7768:38:69"},"variables":[{"name":"length","nativeSrc":"7758:6:69","nodeType":"YulTypedName","src":"7758:6:69","type":""}]},{"nativeSrc":"7815:95:69","nodeType":"YulAssignment","src":"7815:95:69","value":{"arguments":[{"name":"pos","nativeSrc":"7898:3:69","nodeType":"YulIdentifier","src":"7898:3:69"},{"name":"length","nativeSrc":"7903:6:69","nodeType":"YulIdentifier","src":"7903:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"7822:75:69","nodeType":"YulIdentifier","src":"7822:75:69"},"nativeSrc":"7822:88:69","nodeType":"YulFunctionCall","src":"7822:88:69"},"variableNames":[{"name":"pos","nativeSrc":"7815:3:69","nodeType":"YulIdentifier","src":"7815:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"7958:5:69","nodeType":"YulIdentifier","src":"7958:5:69"},{"kind":"number","nativeSrc":"7965:4:69","nodeType":"YulLiteral","src":"7965:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"7954:3:69","nodeType":"YulIdentifier","src":"7954:3:69"},"nativeSrc":"7954:16:69","nodeType":"YulFunctionCall","src":"7954:16:69"},{"name":"pos","nativeSrc":"7972:3:69","nodeType":"YulIdentifier","src":"7972:3:69"},{"name":"length","nativeSrc":"7977:6:69","nodeType":"YulIdentifier","src":"7977:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"7919:34:69","nodeType":"YulIdentifier","src":"7919:34:69"},"nativeSrc":"7919:65:69","nodeType":"YulFunctionCall","src":"7919:65:69"},"nativeSrc":"7919:65:69","nodeType":"YulExpressionStatement","src":"7919:65:69"},{"nativeSrc":"7993:23:69","nodeType":"YulAssignment","src":"7993:23:69","value":{"arguments":[{"name":"pos","nativeSrc":"8004:3:69","nodeType":"YulIdentifier","src":"8004:3:69"},{"name":"length","nativeSrc":"8009:6:69","nodeType":"YulIdentifier","src":"8009:6:69"}],"functionName":{"name":"add","nativeSrc":"8000:3:69","nodeType":"YulIdentifier","src":"8000:3:69"},"nativeSrc":"8000:16:69","nodeType":"YulFunctionCall","src":"8000:16:69"},"variableNames":[{"name":"end","nativeSrc":"7993:3:69","nodeType":"YulIdentifier","src":"7993:3:69"}]}]},"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"7636:386:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7725:5:69","nodeType":"YulTypedName","src":"7725:5:69","type":""},{"name":"pos","nativeSrc":"7732:3:69","nodeType":"YulTypedName","src":"7732:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"7740:3:69","nodeType":"YulTypedName","src":"7740:3:69","type":""}],"src":"7636:386:69"},{"body":{"nativeSrc":"8162:137:69","nodeType":"YulBlock","src":"8162:137:69","statements":[{"nativeSrc":"8173:100:69","nodeType":"YulAssignment","src":"8173:100:69","value":{"arguments":[{"name":"value0","nativeSrc":"8260:6:69","nodeType":"YulIdentifier","src":"8260:6:69"},{"name":"pos","nativeSrc":"8269:3:69","nodeType":"YulIdentifier","src":"8269:3:69"}],"functionName":{"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"8180:79:69","nodeType":"YulIdentifier","src":"8180:79:69"},"nativeSrc":"8180:93:69","nodeType":"YulFunctionCall","src":"8180:93:69"},"variableNames":[{"name":"pos","nativeSrc":"8173:3:69","nodeType":"YulIdentifier","src":"8173:3:69"}]},{"nativeSrc":"8283:10:69","nodeType":"YulAssignment","src":"8283:10:69","value":{"name":"pos","nativeSrc":"8290:3:69","nodeType":"YulIdentifier","src":"8290:3:69"},"variableNames":[{"name":"end","nativeSrc":"8283:3:69","nodeType":"YulIdentifier","src":"8283:3:69"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nativeSrc":"8028:271:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"8141:3:69","nodeType":"YulTypedName","src":"8141:3:69","type":""},{"name":"value0","nativeSrc":"8147:6:69","nodeType":"YulTypedName","src":"8147:6:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"8158:3:69","nodeType":"YulTypedName","src":"8158:3:69","type":""}],"src":"8028:271:69"},{"body":{"nativeSrc":"8364:40:69","nodeType":"YulBlock","src":"8364:40:69","statements":[{"nativeSrc":"8375:22:69","nodeType":"YulAssignment","src":"8375:22:69","value":{"arguments":[{"name":"value","nativeSrc":"8391:5:69","nodeType":"YulIdentifier","src":"8391:5:69"}],"functionName":{"name":"mload","nativeSrc":"8385:5:69","nodeType":"YulIdentifier","src":"8385:5:69"},"nativeSrc":"8385:12:69","nodeType":"YulFunctionCall","src":"8385:12:69"},"variableNames":[{"name":"length","nativeSrc":"8375:6:69","nodeType":"YulIdentifier","src":"8375:6:69"}]}]},"name":"array_length_t_string_memory_ptr","nativeSrc":"8305:99:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"8347:5:69","nodeType":"YulTypedName","src":"8347:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"8357:6:69","nodeType":"YulTypedName","src":"8357:6:69","type":""}],"src":"8305:99:69"},{"body":{"nativeSrc":"8502:285:69","nodeType":"YulBlock","src":"8502:285:69","statements":[{"nativeSrc":"8512:53:69","nodeType":"YulVariableDeclaration","src":"8512:53:69","value":{"arguments":[{"name":"value","nativeSrc":"8559:5:69","nodeType":"YulIdentifier","src":"8559:5:69"}],"functionName":{"name":"array_length_t_string_memory_ptr","nativeSrc":"8526:32:69","nodeType":"YulIdentifier","src":"8526:32:69"},"nativeSrc":"8526:39:69","nodeType":"YulFunctionCall","src":"8526:39:69"},"variables":[{"name":"length","nativeSrc":"8516:6:69","nodeType":"YulTypedName","src":"8516:6:69","type":""}]},{"nativeSrc":"8574:78:69","nodeType":"YulAssignment","src":"8574:78:69","value":{"arguments":[{"name":"pos","nativeSrc":"8640:3:69","nodeType":"YulIdentifier","src":"8640:3:69"},{"name":"length","nativeSrc":"8645:6:69","nodeType":"YulIdentifier","src":"8645:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"8581:58:69","nodeType":"YulIdentifier","src":"8581:58:69"},"nativeSrc":"8581:71:69","nodeType":"YulFunctionCall","src":"8581:71:69"},"variableNames":[{"name":"pos","nativeSrc":"8574:3:69","nodeType":"YulIdentifier","src":"8574:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"8700:5:69","nodeType":"YulIdentifier","src":"8700:5:69"},{"kind":"number","nativeSrc":"8707:4:69","nodeType":"YulLiteral","src":"8707:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"8696:3:69","nodeType":"YulIdentifier","src":"8696:3:69"},"nativeSrc":"8696:16:69","nodeType":"YulFunctionCall","src":"8696:16:69"},{"name":"pos","nativeSrc":"8714:3:69","nodeType":"YulIdentifier","src":"8714:3:69"},{"name":"length","nativeSrc":"8719:6:69","nodeType":"YulIdentifier","src":"8719:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"8661:34:69","nodeType":"YulIdentifier","src":"8661:34:69"},"nativeSrc":"8661:65:69","nodeType":"YulFunctionCall","src":"8661:65:69"},"nativeSrc":"8661:65:69","nodeType":"YulExpressionStatement","src":"8661:65:69"},{"nativeSrc":"8735:46:69","nodeType":"YulAssignment","src":"8735:46:69","value":{"arguments":[{"name":"pos","nativeSrc":"8746:3:69","nodeType":"YulIdentifier","src":"8746:3:69"},{"arguments":[{"name":"length","nativeSrc":"8773:6:69","nodeType":"YulIdentifier","src":"8773:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"8751:21:69","nodeType":"YulIdentifier","src":"8751:21:69"},"nativeSrc":"8751:29:69","nodeType":"YulFunctionCall","src":"8751:29:69"}],"functionName":{"name":"add","nativeSrc":"8742:3:69","nodeType":"YulIdentifier","src":"8742:3:69"},"nativeSrc":"8742:39:69","nodeType":"YulFunctionCall","src":"8742:39:69"},"variableNames":[{"name":"end","nativeSrc":"8735:3:69","nodeType":"YulIdentifier","src":"8735:3:69"}]}]},"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"8410:377:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"8483:5:69","nodeType":"YulTypedName","src":"8483:5:69","type":""},{"name":"pos","nativeSrc":"8490:3:69","nodeType":"YulTypedName","src":"8490:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"8498:3:69","nodeType":"YulTypedName","src":"8498:3:69","type":""}],"src":"8410:377:69"},{"body":{"nativeSrc":"8911:195:69","nodeType":"YulBlock","src":"8911:195:69","statements":[{"nativeSrc":"8921:26:69","nodeType":"YulAssignment","src":"8921:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"8933:9:69","nodeType":"YulIdentifier","src":"8933:9:69"},{"kind":"number","nativeSrc":"8944:2:69","nodeType":"YulLiteral","src":"8944:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8929:3:69","nodeType":"YulIdentifier","src":"8929:3:69"},"nativeSrc":"8929:18:69","nodeType":"YulFunctionCall","src":"8929:18:69"},"variableNames":[{"name":"tail","nativeSrc":"8921:4:69","nodeType":"YulIdentifier","src":"8921:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8968:9:69","nodeType":"YulIdentifier","src":"8968:9:69"},{"kind":"number","nativeSrc":"8979:1:69","nodeType":"YulLiteral","src":"8979:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"8964:3:69","nodeType":"YulIdentifier","src":"8964:3:69"},"nativeSrc":"8964:17:69","nodeType":"YulFunctionCall","src":"8964:17:69"},{"arguments":[{"name":"tail","nativeSrc":"8987:4:69","nodeType":"YulIdentifier","src":"8987:4:69"},{"name":"headStart","nativeSrc":"8993:9:69","nodeType":"YulIdentifier","src":"8993:9:69"}],"functionName":{"name":"sub","nativeSrc":"8983:3:69","nodeType":"YulIdentifier","src":"8983:3:69"},"nativeSrc":"8983:20:69","nodeType":"YulFunctionCall","src":"8983:20:69"}],"functionName":{"name":"mstore","nativeSrc":"8957:6:69","nodeType":"YulIdentifier","src":"8957:6:69"},"nativeSrc":"8957:47:69","nodeType":"YulFunctionCall","src":"8957:47:69"},"nativeSrc":"8957:47:69","nodeType":"YulExpressionStatement","src":"8957:47:69"},{"nativeSrc":"9013:86:69","nodeType":"YulAssignment","src":"9013:86:69","value":{"arguments":[{"name":"value0","nativeSrc":"9085:6:69","nodeType":"YulIdentifier","src":"9085:6:69"},{"name":"tail","nativeSrc":"9094:4:69","nodeType":"YulIdentifier","src":"9094:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"9021:63:69","nodeType":"YulIdentifier","src":"9021:63:69"},"nativeSrc":"9021:78:69","nodeType":"YulFunctionCall","src":"9021:78:69"},"variableNames":[{"name":"tail","nativeSrc":"9013:4:69","nodeType":"YulIdentifier","src":"9013:4:69"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"8793:313:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8883:9:69","nodeType":"YulTypedName","src":"8883:9:69","type":""},{"name":"value0","nativeSrc":"8895:6:69","nodeType":"YulTypedName","src":"8895:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"8906:4:69","nodeType":"YulTypedName","src":"8906:4:69","type":""}],"src":"8793:313:69"}]},"contents":"{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n        revert(0, 0)\n    }\n\n    function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n        revert(0, 0)\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    function panic_error_0x41() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n\n    function finalize_allocation(memPtr, size) {\n        let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n        // protect against overflow\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n\n    function allocate_memory(size) -> memPtr {\n        memPtr := allocate_unbounded()\n        finalize_allocation(memPtr, size)\n    }\n\n    function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n        // Make sure we can allocate memory without overflow\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n        size := round_up_to_mul_of_32(length)\n\n        // add length slot\n        size := add(size, 0x20)\n\n    }\n\n    function copy_memory_to_memory_with_cleanup(src, dst, length) {\n\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n\n    }\n\n    function abi_decode_available_length_t_bytes_memory_ptr_fromMemory(src, length, end) -> array {\n        array := allocate_memory(array_allocation_size_t_bytes_memory_ptr(length))\n        mstore(array, length)\n        let dst := add(array, 0x20)\n        if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n        copy_memory_to_memory_with_cleanup(src, dst, length)\n    }\n\n    // bytes\n    function abi_decode_t_bytes_memory_ptr_fromMemory(offset, end) -> array {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        let length := mload(offset)\n        array := abi_decode_available_length_t_bytes_memory_ptr_fromMemory(add(offset, 0x20), length, end)\n    }\n\n    function abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := mload(add(headStart, 64))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value2 := abi_decode_t_bytes_memory_ptr_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function panic_error_0x11() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n\n    function checked_sub_t_uint256(x, y) -> diff {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        diff := sub(x, y)\n\n        if gt(diff, x) { panic_error_0x11() }\n\n    }\n\n    function panic_error_0x01() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x01)\n        revert(0, 0x24)\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart , value1, value0) -> tail {\n        tail := add(headStart, 64)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_address_to_t_address_fromStack(value1,  add(headStart, 32))\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC1967: new implementation is n\")\n\n        mstore(add(memPtr, 32), \"ot a contract\")\n\n    }\n\n    function abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 45)\n        store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520(memPtr) {\n\n        mstore(add(memPtr, 0), \"Address: delegate call to non-co\")\n\n        mstore(add(memPtr, 32), \"ntract\")\n\n    }\n\n    function abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 38)\n        store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function array_length_t_bytes_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n        updated_pos := pos\n    }\n\n    function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n        let length := array_length_t_bytes_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, length)\n    }\n\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n        pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0,  pos)\n\n        end := pos\n    }\n\n    function array_length_t_string_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n        let length := array_length_t_string_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0,  tail)\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a0604052604051610eed380380610eed83398101604081905261002291610443565b828161004f60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd6104c3565b600080516020610ea68339815191521461006b5761006b6104d6565b61007782826000610124565b506100a5905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61046104c3565b600080516020610e86833981519152146100c1576100c16104d6565b6001600160a01b038216608052600080516020610e868339815191528281556040517f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f906101139060009086906104fb565b60405180910390a150505050610637565b61012d83610150565b60008251118061013a5750805b1561014b576101498383610190565b505b505050565b610159816101be565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606101b58383604051806060016040528060278152602001610ec66027913961021d565b90505b92915050565b6001600160a01b0381163b6101ee5760405162461bcd60e51b81526004016101e590610563565b60405180910390fd5b600080516020610ea683398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60606001600160a01b0384163b6102465760405162461bcd60e51b81526004016101e5906105b6565b600080856001600160a01b03168560405161026191906105e8565b600060405180830381855af49150503d806000811461029c576040519150601f19603f3d011682016040523d82523d6000602084013e6102a1565b606091505b5090925090506102b28282866102be565b925050505b9392505050565b606083156102cd5750816102b7565b8251156102dd5782518084602001fd5b8160405162461bcd60e51b81526004016101e59190610626565b60006001600160a01b0382166101b8565b610311816102f7565b811461031c57600080fd5b50565b80516101b881610308565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b03821117156103655761036561032a565b6040525050565b600061037760405190565b90506103838282610340565b919050565b60006001600160401b038211156103a1576103a161032a565b601f19601f83011660200192915050565b60005b838110156103cd5781810151838201526020016103b5565b50506000910152565b60006103e96103e484610388565b61036c565b90508281526020810184848401111561040457610404600080fd5b61040f8482856103b2565b509392505050565b600082601f83011261042b5761042b600080fd5b815161043b8482602086016103d6565b949350505050565b60008060006060848603121561045b5761045b600080fd5b6000610467868661031f565b93505060206104788682870161031f565b92505060408401516001600160401b0381111561049757610497600080fd5b6104a386828701610417565b9150509250925092565b634e487b7160e01b600052601160045260246000fd5b818103818111156101b8576101b86104ad565b634e487b7160e01b600052600160045260246000fd5b6104f5816102f7565b82525050565b6040810161050982856104ec565b6102b760208301846104ec565b602d81526000602082017f455243313936373a206e657720696d706c656d656e746174696f6e206973206e81526c1bdd08184818dbdb9d1c9858dd609a1b602082015291505b5060400190565b602080825281016101b881610516565b602681526000602082017f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f8152651b9d1c9858dd60d21b6020820152915061055c565b602080825281016101b881610573565b60006105d0825190565b6105de8185602086016103b2565b9290920192915050565b60006102b782846105c6565b60006105fe825190565b8084526020840193506106158185602086016103b2565b601f01601f19169290920192915050565b602080825281016101b581846105f4565b6080516108126106746000396000818160e90152818161013f015281816101c10152818161020b0152818161023c015261026001526108126000f3fe6080604052600436106100435760003560e01c80633659cfe61461005a5780634f1ef2861461007a5780635c60da1b1461008d578063f851a440146100b857610052565b36610052576100506100cd565b005b6100506100cd565b34801561006657600080fd5b50610050610075366004610510565b6100e7565b61005061008836600461058b565b61013d565b34801561009957600080fd5b506100a26101bd565b6040516100af91906105f6565b60405180910390f35b3480156100c457600080fd5b506100a2610207565b6100d561025e565b6100e56100e06102af565b6102e2565b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101355761013281604051806020016040528060008152506000610306565b50565b6101326100cd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101b5576101b08383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610306915050565b505050565b6101b06100cd565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101fc576101f76102af565b905090565b6102046100cd565b90565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101fc57507f000000000000000000000000000000000000000000000000000000000000000090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100e55760405162461bcd60e51b81526004016102a690610604565b60405180910390fd5b60006101f77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b3660008037600080366000845af43d6000803e808015610301573d6000f35b3d6000fd5b61030f83610331565b60008251118061031c5750805b156101b05761032b8383610371565b50505050565b61033a8161039f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061039683836040518060600160405280602781526020016107b660279139610407565b90505b92915050565b6001600160a01b0381163b6103c65760405162461bcd60e51b81526004016102a6906106bd565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60606001600160a01b0384163b6104305760405162461bcd60e51b81526004016102a690610710565b600080856001600160a01b03168560405161044b9190610766565b600060405180830381855af49150503d8060008114610486576040519150601f19603f3d011682016040523d82523d6000602084013e61048b565b606091505b509150915061049b8282866104a7565b925050505b9392505050565b606083156104b65750816104a0565b8251156104c65782518084602001fd5b8160405162461bcd60e51b81526004016102a691906107a4565b60006001600160a01b038216610399565b6104fa816104e0565b811461013257600080fd5b8035610399816104f1565b60006020828403121561052557610525600080fd5b60006105318484610505565b949350505050565b60008083601f84011261054e5761054e600080fd5b50813567ffffffffffffffff81111561056957610569600080fd5b60208301915083600182028301111561058457610584600080fd5b9250929050565b6000806000604084860312156105a3576105a3600080fd5b60006105af8686610505565b935050602084013567ffffffffffffffff8111156105cf576105cf600080fd5b6105db86828701610539565b92509250509250925092565b6105f0816104e0565b82525050565b6020810161039982846105e7565b6020808252810161039981604281527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60208201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267604082015261195d60f21b606082015260800190565b602d81526000602082017f455243313936373a206e657720696d706c656d656e746174696f6e206973206e81526c1bdd08184818dbdb9d1c9858dd609a1b602082015291505b5060400190565b6020808252810161039981610670565b602681526000602082017f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f8152651b9d1c9858dd60d21b602082015291506106b6565b60208082528101610399816106cd565b60005b8381101561073b578181015183820152602001610723565b50506000910152565b600061074e825190565b61075c818560208601610720565b9290920192915050565b60006104a08284610744565b600061077c825190565b808452602084019350610793818560208601610720565b601f01601f19169290920192915050565b60208082528101610396818461077256fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122074d46e8de9a3e5294fe7b4f85337f8b52a8b902fb14551d71a6dd8277259694664736f6c63430008190033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0xEED CODESIZE SUB DUP1 PUSH2 0xEED DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x22 SWAP2 PUSH2 0x443 JUMP JUMPDEST DUP3 DUP2 PUSH2 0x4F PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x4C3 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xEA6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH2 0x6B JUMPI PUSH2 0x6B PUSH2 0x4D6 JUMP JUMPDEST PUSH2 0x77 DUP3 DUP3 PUSH1 0x0 PUSH2 0x124 JUMP JUMPDEST POP PUSH2 0xA5 SWAP1 POP PUSH1 0x1 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6104 PUSH2 0x4C3 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xE86 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH2 0xC1 JUMPI PUSH2 0xC1 PUSH2 0x4D6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x80 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xE86 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 DUP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F SWAP1 PUSH2 0x113 SWAP1 PUSH1 0x0 SWAP1 DUP7 SWAP1 PUSH2 0x4FB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP PUSH2 0x637 JUMP JUMPDEST PUSH2 0x12D DUP4 PUSH2 0x150 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x13A JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0x14B JUMPI PUSH2 0x149 DUP4 DUP4 PUSH2 0x190 JUMP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x159 DUP2 PUSH2 0x1BE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1B5 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xEC6 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x21D JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x1EE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1E5 SWAP1 PUSH2 0x563 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xEA6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE PUSH2 0x246 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1E5 SWAP1 PUSH2 0x5B6 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x261 SWAP2 SWAP1 PUSH2 0x5E8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x29C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2A1 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x2B2 DUP3 DUP3 DUP7 PUSH2 0x2BE JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x2CD JUMPI POP DUP2 PUSH2 0x2B7 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x2DD JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1E5 SWAP2 SWAP1 PUSH2 0x626 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1B8 JUMP JUMPDEST PUSH2 0x311 DUP2 PUSH2 0x2F7 JUMP JUMPDEST DUP2 EQ PUSH2 0x31C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1B8 DUP2 PUSH2 0x308 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x365 JUMPI PUSH2 0x365 PUSH2 0x32A JUMP JUMPDEST PUSH1 0x40 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x377 PUSH1 0x40 MLOAD SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x383 DUP3 DUP3 PUSH2 0x340 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x3A1 JUMPI PUSH2 0x3A1 PUSH2 0x32A JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3CD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3B5 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E9 PUSH2 0x3E4 DUP5 PUSH2 0x388 JUMP JUMPDEST PUSH2 0x36C JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x404 JUMPI PUSH2 0x404 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x40F DUP5 DUP3 DUP6 PUSH2 0x3B2 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x42B JUMPI PUSH2 0x42B PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x43B DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x3D6 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x45B JUMPI PUSH2 0x45B PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x467 DUP7 DUP7 PUSH2 0x31F JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x478 DUP7 DUP3 DUP8 ADD PUSH2 0x31F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x497 JUMPI PUSH2 0x497 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A3 DUP7 DUP3 DUP8 ADD PUSH2 0x417 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x1B8 JUMPI PUSH2 0x1B8 PUSH2 0x4AD JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x4F5 DUP2 PUSH2 0x2F7 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x509 DUP3 DUP6 PUSH2 0x4EC JUMP JUMPDEST PUSH2 0x2B7 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x4EC JUMP JUMPDEST PUSH1 0x2D DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E DUP2 MSTORE PUSH13 0x1BDD08184818DBDB9D1C9858DD PUSH1 0x9A SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1B8 DUP2 PUSH2 0x516 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F DUP2 MSTORE PUSH6 0x1B9D1C9858DD PUSH1 0xD2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x55C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1B8 DUP2 PUSH2 0x573 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5D0 DUP3 MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x5DE DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x3B2 JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2B7 DUP3 DUP5 PUSH2 0x5C6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5FE DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x615 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1B5 DUP2 DUP5 PUSH2 0x5F4 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x812 PUSH2 0x674 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH1 0xE9 ADD MSTORE DUP2 DUP2 PUSH2 0x13F ADD MSTORE DUP2 DUP2 PUSH2 0x1C1 ADD MSTORE DUP2 DUP2 PUSH2 0x20B ADD MSTORE DUP2 DUP2 PUSH2 0x23C ADD MSTORE PUSH2 0x260 ADD MSTORE PUSH2 0x812 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x43 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x5A JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xB8 JUMPI PUSH2 0x52 JUMP JUMPDEST CALLDATASIZE PUSH2 0x52 JUMPI PUSH2 0x50 PUSH2 0xCD JUMP JUMPDEST STOP JUMPDEST PUSH2 0x50 PUSH2 0xCD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x50 PUSH2 0x75 CALLDATASIZE PUSH1 0x4 PUSH2 0x510 JUMP JUMPDEST PUSH2 0xE7 JUMP JUMPDEST PUSH2 0x50 PUSH2 0x88 CALLDATASIZE PUSH1 0x4 PUSH2 0x58B JUMP JUMPDEST PUSH2 0x13D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA2 PUSH2 0x1BD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAF SWAP2 SWAP1 PUSH2 0x5F6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA2 PUSH2 0x207 JUMP JUMPDEST PUSH2 0xD5 PUSH2 0x25E JUMP JUMPDEST PUSH2 0xE5 PUSH2 0xE0 PUSH2 0x2AF JUMP JUMPDEST PUSH2 0x2E2 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x135 JUMPI PUSH2 0x132 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH1 0x0 PUSH2 0x306 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x132 PUSH2 0xCD JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x1B5 JUMPI PUSH2 0x1B0 DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH1 0x1 SWAP3 POP PUSH2 0x306 SWAP2 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1B0 PUSH2 0xCD JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x1FC JUMPI PUSH2 0x1F7 PUSH2 0x2AF JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x204 PUSH2 0xCD JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x1FC JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0xE5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2A6 SWAP1 PUSH2 0x604 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1F7 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x301 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x30F DUP4 PUSH2 0x331 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x31C JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0x1B0 JUMPI PUSH2 0x32B DUP4 DUP4 PUSH2 0x371 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x33A DUP2 PUSH2 0x39F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x396 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x7B6 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x407 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x3C6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2A6 SWAP1 PUSH2 0x6BD JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE PUSH2 0x430 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2A6 SWAP1 PUSH2 0x710 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x44B SWAP2 SWAP1 PUSH2 0x766 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x486 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x48B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x49B DUP3 DUP3 DUP7 PUSH2 0x4A7 JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x4B6 JUMPI POP DUP2 PUSH2 0x4A0 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x4C6 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2A6 SWAP2 SWAP1 PUSH2 0x7A4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x399 JUMP JUMPDEST PUSH2 0x4FA DUP2 PUSH2 0x4E0 JUMP JUMPDEST DUP2 EQ PUSH2 0x132 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x399 DUP2 PUSH2 0x4F1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x525 JUMPI PUSH2 0x525 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x531 DUP5 DUP5 PUSH2 0x505 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x54E JUMPI PUSH2 0x54E PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x569 JUMPI PUSH2 0x569 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x584 JUMPI PUSH2 0x584 PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5A3 JUMPI PUSH2 0x5A3 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5AF DUP7 DUP7 PUSH2 0x505 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5CF JUMPI PUSH2 0x5CF PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5DB DUP7 DUP3 DUP8 ADD PUSH2 0x539 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x5F0 DUP2 PUSH2 0x4E0 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x399 DUP3 DUP5 PUSH2 0x5E7 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x399 DUP2 PUSH1 0x42 DUP2 MSTORE PUSH32 0x5472616E73706172656E745570677261646561626C6550726F78793A2061646D PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x696E2063616E6E6F742066616C6C6261636B20746F2070726F78792074617267 PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x195D PUSH1 0xF2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x2D DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E DUP2 MSTORE PUSH13 0x1BDD08184818DBDB9D1C9858DD PUSH1 0x9A SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x399 DUP2 PUSH2 0x670 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F DUP2 MSTORE PUSH6 0x1B9D1C9858DD PUSH1 0xD2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x6B6 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x399 DUP2 PUSH2 0x6CD JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x73B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x723 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74E DUP3 MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x75C DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x720 JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4A0 DUP3 DUP5 PUSH2 0x744 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x77C DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x793 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x720 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x396 DUP2 DUP5 PUSH2 0x772 JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH10 0x7066735822122074D46E DUP14 0xE9 LOG3 0xE5 0x29 0x4F 0xE7 0xB4 0xF8 MSTORE8 CALLDATACOPY 0xF8 0xB5 0x2A DUP12 SWAP1 0x2F 0xB1 GASLIMIT MLOAD 0xD7 BYTE PUSH14 0xD8277259694664736F6C63430008 NOT STOP CALLER 0xB5 BALANCE 0x27 PUSH9 0x4A568B3173AE13B9F8 0xA6 ADD PUSH15 0x243E63B6E8EE1178D6A717850B5D61 SUB CALLDATASIZE ADDMOD SWAP5 LOG1 EXTCODESIZE LOG1 LOG3 0x21 MOD PUSH8 0xC828492DB98DCA3E KECCAK256 PUSH23 0xCC3735A920A3CA505D382BBC416464726573733A206C6F PUSH24 0x2D6C6576656C2064656C65676174652063616C6C20666169 PUSH13 0x65640000000000000000000000 ","sourceMap":"1653:3648:68:-:0;;;1976:499;;;;;;;;;;;;;;;;;;:::i;:::-;2091:6;2099:5;1050:54:59;1103:1;1058:41;1050:54;:::i;:::-;-1:-1:-1;;;;;;;;;;;1018:87:59;1011:95;;;;:::i;:::-;1116:39;1134:6;1142:5;1149;1116:17;:39::i;:::-;-1:-1:-1;2146:45:68::1;::::0;-1:-1:-1;2190:1:68::1;2154:32;2146:45;:::i;:::-;-1:-1:-1::0;;;;;;;;;;;2123:69:68::1;2116:77;;;;:::i;:::-;-1:-1:-1::0;;;;;2203:15:68;::::1;;::::0;-1:-1:-1;;;;;;;;;;;2392:20:68;;;2436:32:::1;::::0;::::1;::::0;::::1;::::0;2277:12:::1;::::0;2212:6;;2436:32:::1;:::i;:::-;;;;;;;;2106:369;1976:499:::0;;;1653:3648;;2188:295:60;2326:29;2337:17;2326:10;:29::i;:::-;2383:1;2369:4;:11;:15;:28;;;;2388:9;2369:28;2365:112;;;2413:53;2442:17;2461:4;2413:28;:53::i;:::-;;2365:112;2188:295;;;:::o;1902:152::-;1968:37;1987:17;1968:18;:37::i;:::-;2020:27;;-1:-1:-1;;;;;2020:27:60;;;;;;;;1902:152;:::o;6575:198:65:-;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;;6575:198;;;;;:::o;1537:259:60:-;-1:-1:-1;;;;;1470:19:65;;;1610:95:60;;;;-1:-1:-1;;;1610:95:60;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;;;;;;;1715:74:60;;-1:-1:-1;;;;;;1715:74:60;-1:-1:-1;;;;;1715:74:60;;;;;;;;;;1537:259::o;6959:387:65:-;7100:12;-1:-1:-1;;;;;1470:19:65;;;7124:69;;;;-1:-1:-1;;;7124:69:65;;;;;;;:::i;:::-;7205:12;7219:23;7246:6;-1:-1:-1;;;;;7246:19:65;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7204:67:65;;-1:-1:-1;7204:67:65;-1:-1:-1;7288:51:65;7204:67;;7326:12;7288:16;:51::i;:::-;7281:58;;;;6959:387;;;;;;:::o;7566:692::-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:65;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;-1:-1:-1;;;8207:20:65;;;;;;;;:::i;466:96:69:-;503:7;-1:-1:-1;;;;;400:54:69;;532:24;334:126;568:122;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;778:13;;800:33;778:13;800:33;:::i;1199:180::-;-1:-1:-1;;;1244:1:69;1237:88;1344:4;1341:1;1334:15;1368:4;1365:1;1358:15;1385:281;-1:-1:-1;;1183:2:69;1163:14;;1159:28;1460:6;1456:40;1598:6;1586:10;1583:22;-1:-1:-1;;;;;1550:10:69;1547:34;1544:62;1541:88;;;1609:18;;:::i;:::-;1645:2;1638:22;-1:-1:-1;;1385:281:69:o;1672:129::-;1706:6;1733:20;73:2;67:9;;7:75;1733:20;1723:30;;1762:33;1790:4;1782:6;1762:33;:::i;:::-;1672:129;;;:::o;1807:307::-;1868:4;-1:-1:-1;;;;;1950:6:69;1947:30;1944:56;;;1980:18;;:::i;:::-;-1:-1:-1;;1183:2:69;1163:14;;1159:28;2102:4;2092:15;;1807:307;-1:-1:-1;;1807:307:69:o;2120:248::-;2202:1;2212:113;2226:6;2223:1;2220:13;2212:113;;;2302:11;;;2296:18;2283:11;;;2276:39;2248:2;2241:10;2212:113;;;-1:-1:-1;;2359:1:69;2341:16;;2334:27;2120:248::o;2374:432::-;2462:5;2487:65;2503:48;2544:6;2503:48;:::i;:::-;2487:65;:::i;:::-;2478:74;;2575:6;2568:5;2561:21;2613:4;2606:5;2602:16;2651:3;2642:6;2637:3;2633:16;2630:25;2627:112;;;2658:79;197:1;194;187:12;2658:79;2748:52;2793:6;2788:3;2783;2748:52;:::i;:::-;2468:338;2374:432;;;;;:::o;2825:353::-;2891:5;2940:3;2933:4;2925:6;2921:17;2917:27;2907:122;;2948:79;197:1;194;187:12;2948:79;3058:6;3052:13;3083:89;3168:3;3160:6;3153:4;3145:6;3141:17;3083:89;:::i;:::-;3074:98;2825:353;-1:-1:-1;;;;2825:353:69:o;3184:834::-;3281:6;3289;3297;3346:2;3334:9;3325:7;3321:23;3317:32;3314:119;;;3352:79;197:1;194;187:12;3352:79;3472:1;3497:64;3553:7;3533:9;3497:64;:::i;:::-;3487:74;;3443:128;3610:2;3636:64;3692:7;3683:6;3672:9;3668:22;3636:64;:::i;:::-;3626:74;;3581:129;3770:2;3759:9;3755:18;3749:25;-1:-1:-1;;;;;3793:6:69;3790:30;3787:117;;;3823:79;197:1;194;187:12;3823:79;3928:73;3993:7;3984:6;3973:9;3969:22;3928:73;:::i;:::-;3918:83;;3720:291;3184:834;;;;;:::o;4107:180::-;-1:-1:-1;;;4152:1:69;4145:88;4252:4;4249:1;4242:15;4276:4;4273:1;4266:15;4293:194;4424:9;;;4446:11;;;4443:37;;;4460:18;;:::i;4493:180::-;-1:-1:-1;;;4538:1:69;4531:88;4638:4;4635:1;4628:15;4662:4;4659:1;4652:15;4679:118;4766:24;4784:5;4766:24;:::i;:::-;4761:3;4754:37;4679:118;;:::o;4803:332::-;4962:2;4947:18;;4975:71;4951:9;5019:6;4975:71;:::i;:::-;5056:72;5124:2;5113:9;5109:18;5100:6;5056:72;:::i;5554:366::-;5781:2;5247:19;;5696:3;5299:4;5290:14;;5456:34;5433:58;;-1:-1:-1;;;5520:2:69;5508:15;;5501:40;5710:74;-1:-1:-1;5793:93:69;-1:-1:-1;5911:2:69;5902:12;;5554:366::o;5926:419::-;6130:2;6143:47;;;6115:18;;6207:131;6115:18;6207:131;:::i;6582:366::-;6809:2;5247:19;;6724:3;5299:4;5290:14;;6491:34;6468:58;;-1:-1:-1;;;6555:2:69;6543:15;;6536:33;6738:74;-1:-1:-1;6821:93:69;6351:225;6954:419;7158:2;7171:47;;;7143:18;;7235:131;7143:18;7235:131;:::i;7636:386::-;7740:3;7768:38;7800:5;7458:12;;7379:98;7768:38;7919:65;7977:6;7972:3;7965:4;7958:5;7954:16;7919:65;:::i;:::-;8000:16;;;;;7636:386;-1:-1:-1;;7636:386:69:o;8028:271::-;8158:3;8180:93;8269:3;8260:6;8180:93;:::i;8410:377::-;8498:3;8526:39;8559:5;7458:12;;7379:98;8526:39;5247:19;;;5299:4;5290:14;;8574:78;;8661:65;8719:6;8714:3;8707:4;8700:5;8696:16;8661:65;:::i;:::-;1183:2;1163:14;-1:-1:-1;;1159:28:69;8742:39;;;;;;-1:-1:-1;;8410:377:69:o;8793:313::-;8944:2;8957:47;;;8929:18;;9021:78;8929:18;9085:6;9021:78;:::i;8793:313::-;1653:3648:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_19323":{"entryPoint":null,"id":19323,"parameterSlots":0,"returnSlots":0},"@_19331":{"entryPoint":null,"id":19331,"parameterSlots":0,"returnSlots":0},"@_beforeFallback_19336":{"entryPoint":null,"id":19336,"parameterSlots":0,"returnSlots":0},"@_beforeFallback_20198":{"entryPoint":606,"id":20198,"parameterSlots":0,"returnSlots":0},"@_delegate_19296":{"entryPoint":738,"id":19296,"parameterSlots":1,"returnSlots":0},"@_fallback_19315":{"entryPoint":205,"id":19315,"parameterSlots":0,"returnSlots":0},"@_getAdmin_20207":{"entryPoint":null,"id":20207,"parameterSlots":0,"returnSlots":1},"@_getImplementation_18999":{"entryPoint":null,"id":18999,"parameterSlots":0,"returnSlots":1},"@_implementation_18966":{"entryPoint":687,"id":18966,"parameterSlots":0,"returnSlots":1},"@_setImplementation_19023":{"entryPoint":927,"id":19023,"parameterSlots":1,"returnSlots":0},"@_upgradeToAndCall_19068":{"entryPoint":774,"id":19068,"parameterSlots":3,"returnSlots":0},"@_upgradeTo_19038":{"entryPoint":817,"id":19038,"parameterSlots":1,"returnSlots":0},"@admin_20119":{"entryPoint":519,"id":20119,"parameterSlots":0,"returnSlots":1},"@functionDelegateCall_19884":{"entryPoint":881,"id":19884,"parameterSlots":2,"returnSlots":1},"@functionDelegateCall_19919":{"entryPoint":1031,"id":19919,"parameterSlots":3,"returnSlots":1},"@getAddressSlot_19999":{"entryPoint":null,"id":19999,"parameterSlots":1,"returnSlots":1},"@implementation_20133":{"entryPoint":445,"id":20133,"parameterSlots":0,"returnSlots":1},"@isContract_19674":{"entryPoint":null,"id":19674,"parameterSlots":1,"returnSlots":1},"@upgradeToAndCall_20168":{"entryPoint":317,"id":20168,"parameterSlots":3,"returnSlots":0},"@upgradeTo_20151":{"entryPoint":231,"id":20151,"parameterSlots":1,"returnSlots":0},"@verifyCallResult_19950":{"entryPoint":1191,"id":19950,"parameterSlots":3,"returnSlots":1},"abi_decode_t_address":{"entryPoint":1285,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_bytes_calldata_ptr":{"entryPoint":1337,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":1296,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_bytes_calldata_ptr":{"entryPoint":1419,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_t_address_to_t_address_fromStack":{"entryPoint":1511,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":1860,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack":{"entryPoint":1906,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack":{"entryPoint":1648,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack":{"entryPoint":1741,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d_to_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":1894,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":1526,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1956,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1725,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1808,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1540,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_unbounded":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_length_t_bytes_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_length_t_string_memory_ptr":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_storeLengthForEncoding_t_string_memory_ptr_fromStack":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_t_address":{"entryPoint":1248,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_t_uint160":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":1824,"id":null,"parameterSlots":3,"returnSlots":0},"revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"round_up_to_mul_of_32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"store_literal_in_memory_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_t_address":{"entryPoint":1265,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:8569:69","nodeType":"YulBlock","src":"0:8569:69","statements":[{"body":{"nativeSrc":"47:35:69","nodeType":"YulBlock","src":"47:35:69","statements":[{"nativeSrc":"57:19:69","nodeType":"YulAssignment","src":"57:19:69","value":{"arguments":[{"kind":"number","nativeSrc":"73:2:69","nodeType":"YulLiteral","src":"73:2:69","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"67:5:69","nodeType":"YulIdentifier","src":"67:5:69"},"nativeSrc":"67:9:69","nodeType":"YulFunctionCall","src":"67:9:69"},"variableNames":[{"name":"memPtr","nativeSrc":"57:6:69","nodeType":"YulIdentifier","src":"57:6:69"}]}]},"name":"allocate_unbounded","nativeSrc":"7:75:69","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nativeSrc":"40:6:69","nodeType":"YulTypedName","src":"40:6:69","type":""}],"src":"7:75:69"},{"body":{"nativeSrc":"177:28:69","nodeType":"YulBlock","src":"177:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"194:1:69","nodeType":"YulLiteral","src":"194:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"197:1:69","nodeType":"YulLiteral","src":"197:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"187:6:69","nodeType":"YulIdentifier","src":"187:6:69"},"nativeSrc":"187:12:69","nodeType":"YulFunctionCall","src":"187:12:69"},"nativeSrc":"187:12:69","nodeType":"YulExpressionStatement","src":"187:12:69"}]},"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"88:117:69","nodeType":"YulFunctionDefinition","src":"88:117:69"},{"body":{"nativeSrc":"300:28:69","nodeType":"YulBlock","src":"300:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"317:1:69","nodeType":"YulLiteral","src":"317:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"320:1:69","nodeType":"YulLiteral","src":"320:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"310:6:69","nodeType":"YulIdentifier","src":"310:6:69"},"nativeSrc":"310:12:69","nodeType":"YulFunctionCall","src":"310:12:69"},"nativeSrc":"310:12:69","nodeType":"YulExpressionStatement","src":"310:12:69"}]},"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"211:117:69","nodeType":"YulFunctionDefinition","src":"211:117:69"},{"body":{"nativeSrc":"379:81:69","nodeType":"YulBlock","src":"379:81:69","statements":[{"nativeSrc":"389:65:69","nodeType":"YulAssignment","src":"389:65:69","value":{"arguments":[{"name":"value","nativeSrc":"404:5:69","nodeType":"YulIdentifier","src":"404:5:69"},{"kind":"number","nativeSrc":"411:42:69","nodeType":"YulLiteral","src":"411:42:69","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"400:3:69","nodeType":"YulIdentifier","src":"400:3:69"},"nativeSrc":"400:54:69","nodeType":"YulFunctionCall","src":"400:54:69"},"variableNames":[{"name":"cleaned","nativeSrc":"389:7:69","nodeType":"YulIdentifier","src":"389:7:69"}]}]},"name":"cleanup_t_uint160","nativeSrc":"334:126:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"361:5:69","nodeType":"YulTypedName","src":"361:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"371:7:69","nodeType":"YulTypedName","src":"371:7:69","type":""}],"src":"334:126:69"},{"body":{"nativeSrc":"511:51:69","nodeType":"YulBlock","src":"511:51:69","statements":[{"nativeSrc":"521:35:69","nodeType":"YulAssignment","src":"521:35:69","value":{"arguments":[{"name":"value","nativeSrc":"550:5:69","nodeType":"YulIdentifier","src":"550:5:69"}],"functionName":{"name":"cleanup_t_uint160","nativeSrc":"532:17:69","nodeType":"YulIdentifier","src":"532:17:69"},"nativeSrc":"532:24:69","nodeType":"YulFunctionCall","src":"532:24:69"},"variableNames":[{"name":"cleaned","nativeSrc":"521:7:69","nodeType":"YulIdentifier","src":"521:7:69"}]}]},"name":"cleanup_t_address","nativeSrc":"466:96:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"493:5:69","nodeType":"YulTypedName","src":"493:5:69","type":""}],"returnVariables":[{"name":"cleaned","nativeSrc":"503:7:69","nodeType":"YulTypedName","src":"503:7:69","type":""}],"src":"466:96:69"},{"body":{"nativeSrc":"611:79:69","nodeType":"YulBlock","src":"611:79:69","statements":[{"body":{"nativeSrc":"668:16:69","nodeType":"YulBlock","src":"668:16:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"677:1:69","nodeType":"YulLiteral","src":"677:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"680:1:69","nodeType":"YulLiteral","src":"680:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"670:6:69","nodeType":"YulIdentifier","src":"670:6:69"},"nativeSrc":"670:12:69","nodeType":"YulFunctionCall","src":"670:12:69"},"nativeSrc":"670:12:69","nodeType":"YulExpressionStatement","src":"670:12:69"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"634:5:69","nodeType":"YulIdentifier","src":"634:5:69"},{"arguments":[{"name":"value","nativeSrc":"659:5:69","nodeType":"YulIdentifier","src":"659:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"641:17:69","nodeType":"YulIdentifier","src":"641:17:69"},"nativeSrc":"641:24:69","nodeType":"YulFunctionCall","src":"641:24:69"}],"functionName":{"name":"eq","nativeSrc":"631:2:69","nodeType":"YulIdentifier","src":"631:2:69"},"nativeSrc":"631:35:69","nodeType":"YulFunctionCall","src":"631:35:69"}],"functionName":{"name":"iszero","nativeSrc":"624:6:69","nodeType":"YulIdentifier","src":"624:6:69"},"nativeSrc":"624:43:69","nodeType":"YulFunctionCall","src":"624:43:69"},"nativeSrc":"621:63:69","nodeType":"YulIf","src":"621:63:69"}]},"name":"validator_revert_t_address","nativeSrc":"568:122:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"604:5:69","nodeType":"YulTypedName","src":"604:5:69","type":""}],"src":"568:122:69"},{"body":{"nativeSrc":"748:87:69","nodeType":"YulBlock","src":"748:87:69","statements":[{"nativeSrc":"758:29:69","nodeType":"YulAssignment","src":"758:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"780:6:69","nodeType":"YulIdentifier","src":"780:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"767:12:69","nodeType":"YulIdentifier","src":"767:12:69"},"nativeSrc":"767:20:69","nodeType":"YulFunctionCall","src":"767:20:69"},"variableNames":[{"name":"value","nativeSrc":"758:5:69","nodeType":"YulIdentifier","src":"758:5:69"}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"823:5:69","nodeType":"YulIdentifier","src":"823:5:69"}],"functionName":{"name":"validator_revert_t_address","nativeSrc":"796:26:69","nodeType":"YulIdentifier","src":"796:26:69"},"nativeSrc":"796:33:69","nodeType":"YulFunctionCall","src":"796:33:69"},"nativeSrc":"796:33:69","nodeType":"YulExpressionStatement","src":"796:33:69"}]},"name":"abi_decode_t_address","nativeSrc":"696:139:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"726:6:69","nodeType":"YulTypedName","src":"726:6:69","type":""},{"name":"end","nativeSrc":"734:3:69","nodeType":"YulTypedName","src":"734:3:69","type":""}],"returnVariables":[{"name":"value","nativeSrc":"742:5:69","nodeType":"YulTypedName","src":"742:5:69","type":""}],"src":"696:139:69"},{"body":{"nativeSrc":"907:263:69","nodeType":"YulBlock","src":"907:263:69","statements":[{"body":{"nativeSrc":"953:83:69","nodeType":"YulBlock","src":"953:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"955:77:69","nodeType":"YulIdentifier","src":"955:77:69"},"nativeSrc":"955:79:69","nodeType":"YulFunctionCall","src":"955:79:69"},"nativeSrc":"955:79:69","nodeType":"YulExpressionStatement","src":"955:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"928:7:69","nodeType":"YulIdentifier","src":"928:7:69"},{"name":"headStart","nativeSrc":"937:9:69","nodeType":"YulIdentifier","src":"937:9:69"}],"functionName":{"name":"sub","nativeSrc":"924:3:69","nodeType":"YulIdentifier","src":"924:3:69"},"nativeSrc":"924:23:69","nodeType":"YulFunctionCall","src":"924:23:69"},{"kind":"number","nativeSrc":"949:2:69","nodeType":"YulLiteral","src":"949:2:69","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"920:3:69","nodeType":"YulIdentifier","src":"920:3:69"},"nativeSrc":"920:32:69","nodeType":"YulFunctionCall","src":"920:32:69"},"nativeSrc":"917:119:69","nodeType":"YulIf","src":"917:119:69"},{"nativeSrc":"1046:117:69","nodeType":"YulBlock","src":"1046:117:69","statements":[{"nativeSrc":"1061:15:69","nodeType":"YulVariableDeclaration","src":"1061:15:69","value":{"kind":"number","nativeSrc":"1075:1:69","nodeType":"YulLiteral","src":"1075:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"1065:6:69","nodeType":"YulTypedName","src":"1065:6:69","type":""}]},{"nativeSrc":"1090:63:69","nodeType":"YulAssignment","src":"1090:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1125:9:69","nodeType":"YulIdentifier","src":"1125:9:69"},{"name":"offset","nativeSrc":"1136:6:69","nodeType":"YulIdentifier","src":"1136:6:69"}],"functionName":{"name":"add","nativeSrc":"1121:3:69","nodeType":"YulIdentifier","src":"1121:3:69"},"nativeSrc":"1121:22:69","nodeType":"YulFunctionCall","src":"1121:22:69"},{"name":"dataEnd","nativeSrc":"1145:7:69","nodeType":"YulIdentifier","src":"1145:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"1100:20:69","nodeType":"YulIdentifier","src":"1100:20:69"},"nativeSrc":"1100:53:69","nodeType":"YulFunctionCall","src":"1100:53:69"},"variableNames":[{"name":"value0","nativeSrc":"1090:6:69","nodeType":"YulIdentifier","src":"1090:6:69"}]}]}]},"name":"abi_decode_tuple_t_address","nativeSrc":"841:329:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"877:9:69","nodeType":"YulTypedName","src":"877:9:69","type":""},{"name":"dataEnd","nativeSrc":"888:7:69","nodeType":"YulTypedName","src":"888:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"900:6:69","nodeType":"YulTypedName","src":"900:6:69","type":""}],"src":"841:329:69"},{"body":{"nativeSrc":"1265:28:69","nodeType":"YulBlock","src":"1265:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1282:1:69","nodeType":"YulLiteral","src":"1282:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1285:1:69","nodeType":"YulLiteral","src":"1285:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1275:6:69","nodeType":"YulIdentifier","src":"1275:6:69"},"nativeSrc":"1275:12:69","nodeType":"YulFunctionCall","src":"1275:12:69"},"nativeSrc":"1275:12:69","nodeType":"YulExpressionStatement","src":"1275:12:69"}]},"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"1176:117:69","nodeType":"YulFunctionDefinition","src":"1176:117:69"},{"body":{"nativeSrc":"1388:28:69","nodeType":"YulBlock","src":"1388:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1405:1:69","nodeType":"YulLiteral","src":"1405:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1408:1:69","nodeType":"YulLiteral","src":"1408:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1398:6:69","nodeType":"YulIdentifier","src":"1398:6:69"},"nativeSrc":"1398:12:69","nodeType":"YulFunctionCall","src":"1398:12:69"},"nativeSrc":"1398:12:69","nodeType":"YulExpressionStatement","src":"1398:12:69"}]},"name":"revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490","nativeSrc":"1299:117:69","nodeType":"YulFunctionDefinition","src":"1299:117:69"},{"body":{"nativeSrc":"1511:28:69","nodeType":"YulBlock","src":"1511:28:69","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1528:1:69","nodeType":"YulLiteral","src":"1528:1:69","type":"","value":"0"},{"kind":"number","nativeSrc":"1531:1:69","nodeType":"YulLiteral","src":"1531:1:69","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1521:6:69","nodeType":"YulIdentifier","src":"1521:6:69"},"nativeSrc":"1521:12:69","nodeType":"YulFunctionCall","src":"1521:12:69"},"nativeSrc":"1521:12:69","nodeType":"YulExpressionStatement","src":"1521:12:69"}]},"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"1422:117:69","nodeType":"YulFunctionDefinition","src":"1422:117:69"},{"body":{"nativeSrc":"1632:478:69","nodeType":"YulBlock","src":"1632:478:69","statements":[{"body":{"nativeSrc":"1681:83:69","nodeType":"YulBlock","src":"1681:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d","nativeSrc":"1683:77:69","nodeType":"YulIdentifier","src":"1683:77:69"},"nativeSrc":"1683:79:69","nodeType":"YulFunctionCall","src":"1683:79:69"},"nativeSrc":"1683:79:69","nodeType":"YulExpressionStatement","src":"1683:79:69"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"1660:6:69","nodeType":"YulIdentifier","src":"1660:6:69"},{"kind":"number","nativeSrc":"1668:4:69","nodeType":"YulLiteral","src":"1668:4:69","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"1656:3:69","nodeType":"YulIdentifier","src":"1656:3:69"},"nativeSrc":"1656:17:69","nodeType":"YulFunctionCall","src":"1656:17:69"},{"name":"end","nativeSrc":"1675:3:69","nodeType":"YulIdentifier","src":"1675:3:69"}],"functionName":{"name":"slt","nativeSrc":"1652:3:69","nodeType":"YulIdentifier","src":"1652:3:69"},"nativeSrc":"1652:27:69","nodeType":"YulFunctionCall","src":"1652:27:69"}],"functionName":{"name":"iszero","nativeSrc":"1645:6:69","nodeType":"YulIdentifier","src":"1645:6:69"},"nativeSrc":"1645:35:69","nodeType":"YulFunctionCall","src":"1645:35:69"},"nativeSrc":"1642:122:69","nodeType":"YulIf","src":"1642:122:69"},{"nativeSrc":"1773:30:69","nodeType":"YulAssignment","src":"1773:30:69","value":{"arguments":[{"name":"offset","nativeSrc":"1796:6:69","nodeType":"YulIdentifier","src":"1796:6:69"}],"functionName":{"name":"calldataload","nativeSrc":"1783:12:69","nodeType":"YulIdentifier","src":"1783:12:69"},"nativeSrc":"1783:20:69","nodeType":"YulFunctionCall","src":"1783:20:69"},"variableNames":[{"name":"length","nativeSrc":"1773:6:69","nodeType":"YulIdentifier","src":"1773:6:69"}]},{"body":{"nativeSrc":"1846:83:69","nodeType":"YulBlock","src":"1846:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490","nativeSrc":"1848:77:69","nodeType":"YulIdentifier","src":"1848:77:69"},"nativeSrc":"1848:79:69","nodeType":"YulFunctionCall","src":"1848:79:69"},"nativeSrc":"1848:79:69","nodeType":"YulExpressionStatement","src":"1848:79:69"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"1818:6:69","nodeType":"YulIdentifier","src":"1818:6:69"},{"kind":"number","nativeSrc":"1826:18:69","nodeType":"YulLiteral","src":"1826:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"1815:2:69","nodeType":"YulIdentifier","src":"1815:2:69"},"nativeSrc":"1815:30:69","nodeType":"YulFunctionCall","src":"1815:30:69"},"nativeSrc":"1812:117:69","nodeType":"YulIf","src":"1812:117:69"},{"nativeSrc":"1938:29:69","nodeType":"YulAssignment","src":"1938:29:69","value":{"arguments":[{"name":"offset","nativeSrc":"1954:6:69","nodeType":"YulIdentifier","src":"1954:6:69"},{"kind":"number","nativeSrc":"1962:4:69","nodeType":"YulLiteral","src":"1962:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1950:3:69","nodeType":"YulIdentifier","src":"1950:3:69"},"nativeSrc":"1950:17:69","nodeType":"YulFunctionCall","src":"1950:17:69"},"variableNames":[{"name":"arrayPos","nativeSrc":"1938:8:69","nodeType":"YulIdentifier","src":"1938:8:69"}]},{"body":{"nativeSrc":"2021:83:69","nodeType":"YulBlock","src":"2021:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef","nativeSrc":"2023:77:69","nodeType":"YulIdentifier","src":"2023:77:69"},"nativeSrc":"2023:79:69","nodeType":"YulFunctionCall","src":"2023:79:69"},"nativeSrc":"2023:79:69","nodeType":"YulExpressionStatement","src":"2023:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"arrayPos","nativeSrc":"1986:8:69","nodeType":"YulIdentifier","src":"1986:8:69"},{"arguments":[{"name":"length","nativeSrc":"2000:6:69","nodeType":"YulIdentifier","src":"2000:6:69"},{"kind":"number","nativeSrc":"2008:4:69","nodeType":"YulLiteral","src":"2008:4:69","type":"","value":"0x01"}],"functionName":{"name":"mul","nativeSrc":"1996:3:69","nodeType":"YulIdentifier","src":"1996:3:69"},"nativeSrc":"1996:17:69","nodeType":"YulFunctionCall","src":"1996:17:69"}],"functionName":{"name":"add","nativeSrc":"1982:3:69","nodeType":"YulIdentifier","src":"1982:3:69"},"nativeSrc":"1982:32:69","nodeType":"YulFunctionCall","src":"1982:32:69"},{"name":"end","nativeSrc":"2016:3:69","nodeType":"YulIdentifier","src":"2016:3:69"}],"functionName":{"name":"gt","nativeSrc":"1979:2:69","nodeType":"YulIdentifier","src":"1979:2:69"},"nativeSrc":"1979:41:69","nodeType":"YulFunctionCall","src":"1979:41:69"},"nativeSrc":"1976:128:69","nodeType":"YulIf","src":"1976:128:69"}]},"name":"abi_decode_t_bytes_calldata_ptr","nativeSrc":"1558:552:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"1599:6:69","nodeType":"YulTypedName","src":"1599:6:69","type":""},{"name":"end","nativeSrc":"1607:3:69","nodeType":"YulTypedName","src":"1607:3:69","type":""}],"returnVariables":[{"name":"arrayPos","nativeSrc":"1615:8:69","nodeType":"YulTypedName","src":"1615:8:69","type":""},{"name":"length","nativeSrc":"1625:6:69","nodeType":"YulTypedName","src":"1625:6:69","type":""}],"src":"1558:552:69"},{"body":{"nativeSrc":"2218:570:69","nodeType":"YulBlock","src":"2218:570:69","statements":[{"body":{"nativeSrc":"2264:83:69","nodeType":"YulBlock","src":"2264:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b","nativeSrc":"2266:77:69","nodeType":"YulIdentifier","src":"2266:77:69"},"nativeSrc":"2266:79:69","nodeType":"YulFunctionCall","src":"2266:79:69"},"nativeSrc":"2266:79:69","nodeType":"YulExpressionStatement","src":"2266:79:69"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"2239:7:69","nodeType":"YulIdentifier","src":"2239:7:69"},{"name":"headStart","nativeSrc":"2248:9:69","nodeType":"YulIdentifier","src":"2248:9:69"}],"functionName":{"name":"sub","nativeSrc":"2235:3:69","nodeType":"YulIdentifier","src":"2235:3:69"},"nativeSrc":"2235:23:69","nodeType":"YulFunctionCall","src":"2235:23:69"},{"kind":"number","nativeSrc":"2260:2:69","nodeType":"YulLiteral","src":"2260:2:69","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"2231:3:69","nodeType":"YulIdentifier","src":"2231:3:69"},"nativeSrc":"2231:32:69","nodeType":"YulFunctionCall","src":"2231:32:69"},"nativeSrc":"2228:119:69","nodeType":"YulIf","src":"2228:119:69"},{"nativeSrc":"2357:117:69","nodeType":"YulBlock","src":"2357:117:69","statements":[{"nativeSrc":"2372:15:69","nodeType":"YulVariableDeclaration","src":"2372:15:69","value":{"kind":"number","nativeSrc":"2386:1:69","nodeType":"YulLiteral","src":"2386:1:69","type":"","value":"0"},"variables":[{"name":"offset","nativeSrc":"2376:6:69","nodeType":"YulTypedName","src":"2376:6:69","type":""}]},{"nativeSrc":"2401:63:69","nodeType":"YulAssignment","src":"2401:63:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2436:9:69","nodeType":"YulIdentifier","src":"2436:9:69"},{"name":"offset","nativeSrc":"2447:6:69","nodeType":"YulIdentifier","src":"2447:6:69"}],"functionName":{"name":"add","nativeSrc":"2432:3:69","nodeType":"YulIdentifier","src":"2432:3:69"},"nativeSrc":"2432:22:69","nodeType":"YulFunctionCall","src":"2432:22:69"},{"name":"dataEnd","nativeSrc":"2456:7:69","nodeType":"YulIdentifier","src":"2456:7:69"}],"functionName":{"name":"abi_decode_t_address","nativeSrc":"2411:20:69","nodeType":"YulIdentifier","src":"2411:20:69"},"nativeSrc":"2411:53:69","nodeType":"YulFunctionCall","src":"2411:53:69"},"variableNames":[{"name":"value0","nativeSrc":"2401:6:69","nodeType":"YulIdentifier","src":"2401:6:69"}]}]},{"nativeSrc":"2484:297:69","nodeType":"YulBlock","src":"2484:297:69","statements":[{"nativeSrc":"2499:46:69","nodeType":"YulVariableDeclaration","src":"2499:46:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2530:9:69","nodeType":"YulIdentifier","src":"2530:9:69"},{"kind":"number","nativeSrc":"2541:2:69","nodeType":"YulLiteral","src":"2541:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2526:3:69","nodeType":"YulIdentifier","src":"2526:3:69"},"nativeSrc":"2526:18:69","nodeType":"YulFunctionCall","src":"2526:18:69"}],"functionName":{"name":"calldataload","nativeSrc":"2513:12:69","nodeType":"YulIdentifier","src":"2513:12:69"},"nativeSrc":"2513:32:69","nodeType":"YulFunctionCall","src":"2513:32:69"},"variables":[{"name":"offset","nativeSrc":"2503:6:69","nodeType":"YulTypedName","src":"2503:6:69","type":""}]},{"body":{"nativeSrc":"2592:83:69","nodeType":"YulBlock","src":"2592:83:69","statements":[{"expression":{"arguments":[],"functionName":{"name":"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db","nativeSrc":"2594:77:69","nodeType":"YulIdentifier","src":"2594:77:69"},"nativeSrc":"2594:79:69","nodeType":"YulFunctionCall","src":"2594:79:69"},"nativeSrc":"2594:79:69","nodeType":"YulExpressionStatement","src":"2594:79:69"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"2564:6:69","nodeType":"YulIdentifier","src":"2564:6:69"},{"kind":"number","nativeSrc":"2572:18:69","nodeType":"YulLiteral","src":"2572:18:69","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"2561:2:69","nodeType":"YulIdentifier","src":"2561:2:69"},"nativeSrc":"2561:30:69","nodeType":"YulFunctionCall","src":"2561:30:69"},"nativeSrc":"2558:117:69","nodeType":"YulIf","src":"2558:117:69"},{"nativeSrc":"2689:82:69","nodeType":"YulAssignment","src":"2689:82:69","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2743:9:69","nodeType":"YulIdentifier","src":"2743:9:69"},{"name":"offset","nativeSrc":"2754:6:69","nodeType":"YulIdentifier","src":"2754:6:69"}],"functionName":{"name":"add","nativeSrc":"2739:3:69","nodeType":"YulIdentifier","src":"2739:3:69"},"nativeSrc":"2739:22:69","nodeType":"YulFunctionCall","src":"2739:22:69"},{"name":"dataEnd","nativeSrc":"2763:7:69","nodeType":"YulIdentifier","src":"2763:7:69"}],"functionName":{"name":"abi_decode_t_bytes_calldata_ptr","nativeSrc":"2707:31:69","nodeType":"YulIdentifier","src":"2707:31:69"},"nativeSrc":"2707:64:69","nodeType":"YulFunctionCall","src":"2707:64:69"},"variableNames":[{"name":"value1","nativeSrc":"2689:6:69","nodeType":"YulIdentifier","src":"2689:6:69"},{"name":"value2","nativeSrc":"2697:6:69","nodeType":"YulIdentifier","src":"2697:6:69"}]}]}]},"name":"abi_decode_tuple_t_addresst_bytes_calldata_ptr","nativeSrc":"2116:672:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2172:9:69","nodeType":"YulTypedName","src":"2172:9:69","type":""},{"name":"dataEnd","nativeSrc":"2183:7:69","nodeType":"YulTypedName","src":"2183:7:69","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"2195:6:69","nodeType":"YulTypedName","src":"2195:6:69","type":""},{"name":"value1","nativeSrc":"2203:6:69","nodeType":"YulTypedName","src":"2203:6:69","type":""},{"name":"value2","nativeSrc":"2211:6:69","nodeType":"YulTypedName","src":"2211:6:69","type":""}],"src":"2116:672:69"},{"body":{"nativeSrc":"2859:53:69","nodeType":"YulBlock","src":"2859:53:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"2876:3:69","nodeType":"YulIdentifier","src":"2876:3:69"},{"arguments":[{"name":"value","nativeSrc":"2899:5:69","nodeType":"YulIdentifier","src":"2899:5:69"}],"functionName":{"name":"cleanup_t_address","nativeSrc":"2881:17:69","nodeType":"YulIdentifier","src":"2881:17:69"},"nativeSrc":"2881:24:69","nodeType":"YulFunctionCall","src":"2881:24:69"}],"functionName":{"name":"mstore","nativeSrc":"2869:6:69","nodeType":"YulIdentifier","src":"2869:6:69"},"nativeSrc":"2869:37:69","nodeType":"YulFunctionCall","src":"2869:37:69"},"nativeSrc":"2869:37:69","nodeType":"YulExpressionStatement","src":"2869:37:69"}]},"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"2794:118:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2847:5:69","nodeType":"YulTypedName","src":"2847:5:69","type":""},{"name":"pos","nativeSrc":"2854:3:69","nodeType":"YulTypedName","src":"2854:3:69","type":""}],"src":"2794:118:69"},{"body":{"nativeSrc":"3016:124:69","nodeType":"YulBlock","src":"3016:124:69","statements":[{"nativeSrc":"3026:26:69","nodeType":"YulAssignment","src":"3026:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"3038:9:69","nodeType":"YulIdentifier","src":"3038:9:69"},{"kind":"number","nativeSrc":"3049:2:69","nodeType":"YulLiteral","src":"3049:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3034:3:69","nodeType":"YulIdentifier","src":"3034:3:69"},"nativeSrc":"3034:18:69","nodeType":"YulFunctionCall","src":"3034:18:69"},"variableNames":[{"name":"tail","nativeSrc":"3026:4:69","nodeType":"YulIdentifier","src":"3026:4:69"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"3106:6:69","nodeType":"YulIdentifier","src":"3106:6:69"},{"arguments":[{"name":"headStart","nativeSrc":"3119:9:69","nodeType":"YulIdentifier","src":"3119:9:69"},{"kind":"number","nativeSrc":"3130:1:69","nodeType":"YulLiteral","src":"3130:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"3115:3:69","nodeType":"YulIdentifier","src":"3115:3:69"},"nativeSrc":"3115:17:69","nodeType":"YulFunctionCall","src":"3115:17:69"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nativeSrc":"3062:43:69","nodeType":"YulIdentifier","src":"3062:43:69"},"nativeSrc":"3062:71:69","nodeType":"YulFunctionCall","src":"3062:71:69"},"nativeSrc":"3062:71:69","nodeType":"YulExpressionStatement","src":"3062:71:69"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"2918:222:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2988:9:69","nodeType":"YulTypedName","src":"2988:9:69","type":""},{"name":"value0","nativeSrc":"3000:6:69","nodeType":"YulTypedName","src":"3000:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3011:4:69","nodeType":"YulTypedName","src":"3011:4:69","type":""}],"src":"2918:222:69"},{"body":{"nativeSrc":"3242:73:69","nodeType":"YulBlock","src":"3242:73:69","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"3259:3:69","nodeType":"YulIdentifier","src":"3259:3:69"},{"name":"length","nativeSrc":"3264:6:69","nodeType":"YulIdentifier","src":"3264:6:69"}],"functionName":{"name":"mstore","nativeSrc":"3252:6:69","nodeType":"YulIdentifier","src":"3252:6:69"},"nativeSrc":"3252:19:69","nodeType":"YulFunctionCall","src":"3252:19:69"},"nativeSrc":"3252:19:69","nodeType":"YulExpressionStatement","src":"3252:19:69"},{"nativeSrc":"3280:29:69","nodeType":"YulAssignment","src":"3280:29:69","value":{"arguments":[{"name":"pos","nativeSrc":"3299:3:69","nodeType":"YulIdentifier","src":"3299:3:69"},{"kind":"number","nativeSrc":"3304:4:69","nodeType":"YulLiteral","src":"3304:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"3295:3:69","nodeType":"YulIdentifier","src":"3295:3:69"},"nativeSrc":"3295:14:69","nodeType":"YulFunctionCall","src":"3295:14:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"3280:11:69","nodeType":"YulIdentifier","src":"3280:11:69"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"3146:169:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"3214:3:69","nodeType":"YulTypedName","src":"3214:3:69","type":""},{"name":"length","nativeSrc":"3219:6:69","nodeType":"YulTypedName","src":"3219:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"3230:11:69","nodeType":"YulTypedName","src":"3230:11:69","type":""}],"src":"3146:169:69"},{"body":{"nativeSrc":"3427:184:69","nodeType":"YulBlock","src":"3427:184:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"3449:6:69","nodeType":"YulIdentifier","src":"3449:6:69"},{"kind":"number","nativeSrc":"3457:1:69","nodeType":"YulLiteral","src":"3457:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"3445:3:69","nodeType":"YulIdentifier","src":"3445:3:69"},"nativeSrc":"3445:14:69","nodeType":"YulFunctionCall","src":"3445:14:69"},{"hexValue":"5472616e73706172656e745570677261646561626c6550726f78793a2061646d","kind":"string","nativeSrc":"3461:34:69","nodeType":"YulLiteral","src":"3461:34:69","type":"","value":"TransparentUpgradeableProxy: adm"}],"functionName":{"name":"mstore","nativeSrc":"3438:6:69","nodeType":"YulIdentifier","src":"3438:6:69"},"nativeSrc":"3438:58:69","nodeType":"YulFunctionCall","src":"3438:58:69"},"nativeSrc":"3438:58:69","nodeType":"YulExpressionStatement","src":"3438:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"3517:6:69","nodeType":"YulIdentifier","src":"3517:6:69"},{"kind":"number","nativeSrc":"3525:2:69","nodeType":"YulLiteral","src":"3525:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3513:3:69","nodeType":"YulIdentifier","src":"3513:3:69"},"nativeSrc":"3513:15:69","nodeType":"YulFunctionCall","src":"3513:15:69"},{"hexValue":"696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267","kind":"string","nativeSrc":"3530:34:69","nodeType":"YulLiteral","src":"3530:34:69","type":"","value":"in cannot fallback to proxy targ"}],"functionName":{"name":"mstore","nativeSrc":"3506:6:69","nodeType":"YulIdentifier","src":"3506:6:69"},"nativeSrc":"3506:59:69","nodeType":"YulFunctionCall","src":"3506:59:69"},"nativeSrc":"3506:59:69","nodeType":"YulExpressionStatement","src":"3506:59:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"3586:6:69","nodeType":"YulIdentifier","src":"3586:6:69"},{"kind":"number","nativeSrc":"3594:2:69","nodeType":"YulLiteral","src":"3594:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"3582:3:69","nodeType":"YulIdentifier","src":"3582:3:69"},"nativeSrc":"3582:15:69","nodeType":"YulFunctionCall","src":"3582:15:69"},{"hexValue":"6574","kind":"string","nativeSrc":"3599:4:69","nodeType":"YulLiteral","src":"3599:4:69","type":"","value":"et"}],"functionName":{"name":"mstore","nativeSrc":"3575:6:69","nodeType":"YulIdentifier","src":"3575:6:69"},"nativeSrc":"3575:29:69","nodeType":"YulFunctionCall","src":"3575:29:69"},"nativeSrc":"3575:29:69","nodeType":"YulExpressionStatement","src":"3575:29:69"}]},"name":"store_literal_in_memory_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d","nativeSrc":"3321:290:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"3419:6:69","nodeType":"YulTypedName","src":"3419:6:69","type":""}],"src":"3321:290:69"},{"body":{"nativeSrc":"3763:220:69","nodeType":"YulBlock","src":"3763:220:69","statements":[{"nativeSrc":"3773:74:69","nodeType":"YulAssignment","src":"3773:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"3839:3:69","nodeType":"YulIdentifier","src":"3839:3:69"},{"kind":"number","nativeSrc":"3844:2:69","nodeType":"YulLiteral","src":"3844:2:69","type":"","value":"66"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"3780:58:69","nodeType":"YulIdentifier","src":"3780:58:69"},"nativeSrc":"3780:67:69","nodeType":"YulFunctionCall","src":"3780:67:69"},"variableNames":[{"name":"pos","nativeSrc":"3773:3:69","nodeType":"YulIdentifier","src":"3773:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"3945:3:69","nodeType":"YulIdentifier","src":"3945:3:69"}],"functionName":{"name":"store_literal_in_memory_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d","nativeSrc":"3856:88:69","nodeType":"YulIdentifier","src":"3856:88:69"},"nativeSrc":"3856:93:69","nodeType":"YulFunctionCall","src":"3856:93:69"},"nativeSrc":"3856:93:69","nodeType":"YulExpressionStatement","src":"3856:93:69"},{"nativeSrc":"3958:19:69","nodeType":"YulAssignment","src":"3958:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"3969:3:69","nodeType":"YulIdentifier","src":"3969:3:69"},{"kind":"number","nativeSrc":"3974:2:69","nodeType":"YulLiteral","src":"3974:2:69","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"3965:3:69","nodeType":"YulIdentifier","src":"3965:3:69"},"nativeSrc":"3965:12:69","nodeType":"YulFunctionCall","src":"3965:12:69"},"variableNames":[{"name":"end","nativeSrc":"3958:3:69","nodeType":"YulIdentifier","src":"3958:3:69"}]}]},"name":"abi_encode_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d_to_t_string_memory_ptr_fromStack","nativeSrc":"3617:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"3751:3:69","nodeType":"YulTypedName","src":"3751:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"3759:3:69","nodeType":"YulTypedName","src":"3759:3:69","type":""}],"src":"3617:366:69"},{"body":{"nativeSrc":"4160:248:69","nodeType":"YulBlock","src":"4160:248:69","statements":[{"nativeSrc":"4170:26:69","nodeType":"YulAssignment","src":"4170:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"4182:9:69","nodeType":"YulIdentifier","src":"4182:9:69"},{"kind":"number","nativeSrc":"4193:2:69","nodeType":"YulLiteral","src":"4193:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4178:3:69","nodeType":"YulIdentifier","src":"4178:3:69"},"nativeSrc":"4178:18:69","nodeType":"YulFunctionCall","src":"4178:18:69"},"variableNames":[{"name":"tail","nativeSrc":"4170:4:69","nodeType":"YulIdentifier","src":"4170:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4217:9:69","nodeType":"YulIdentifier","src":"4217:9:69"},{"kind":"number","nativeSrc":"4228:1:69","nodeType":"YulLiteral","src":"4228:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4213:3:69","nodeType":"YulIdentifier","src":"4213:3:69"},"nativeSrc":"4213:17:69","nodeType":"YulFunctionCall","src":"4213:17:69"},{"arguments":[{"name":"tail","nativeSrc":"4236:4:69","nodeType":"YulIdentifier","src":"4236:4:69"},{"name":"headStart","nativeSrc":"4242:9:69","nodeType":"YulIdentifier","src":"4242:9:69"}],"functionName":{"name":"sub","nativeSrc":"4232:3:69","nodeType":"YulIdentifier","src":"4232:3:69"},"nativeSrc":"4232:20:69","nodeType":"YulFunctionCall","src":"4232:20:69"}],"functionName":{"name":"mstore","nativeSrc":"4206:6:69","nodeType":"YulIdentifier","src":"4206:6:69"},"nativeSrc":"4206:47:69","nodeType":"YulFunctionCall","src":"4206:47:69"},"nativeSrc":"4206:47:69","nodeType":"YulExpressionStatement","src":"4206:47:69"},{"nativeSrc":"4262:139:69","nodeType":"YulAssignment","src":"4262:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"4396:4:69","nodeType":"YulIdentifier","src":"4396:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d_to_t_string_memory_ptr_fromStack","nativeSrc":"4270:124:69","nodeType":"YulIdentifier","src":"4270:124:69"},"nativeSrc":"4270:131:69","nodeType":"YulFunctionCall","src":"4270:131:69"},"variableNames":[{"name":"tail","nativeSrc":"4262:4:69","nodeType":"YulIdentifier","src":"4262:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"3989:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4140:9:69","nodeType":"YulTypedName","src":"4140:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4155:4:69","nodeType":"YulTypedName","src":"4155:4:69","type":""}],"src":"3989:419:69"},{"body":{"nativeSrc":"4520:126:69","nodeType":"YulBlock","src":"4520:126:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"4542:6:69","nodeType":"YulIdentifier","src":"4542:6:69"},{"kind":"number","nativeSrc":"4550:1:69","nodeType":"YulLiteral","src":"4550:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"4538:3:69","nodeType":"YulIdentifier","src":"4538:3:69"},"nativeSrc":"4538:14:69","nodeType":"YulFunctionCall","src":"4538:14:69"},{"hexValue":"455243313936373a206e657720696d706c656d656e746174696f6e206973206e","kind":"string","nativeSrc":"4554:34:69","nodeType":"YulLiteral","src":"4554:34:69","type":"","value":"ERC1967: new implementation is n"}],"functionName":{"name":"mstore","nativeSrc":"4531:6:69","nodeType":"YulIdentifier","src":"4531:6:69"},"nativeSrc":"4531:58:69","nodeType":"YulFunctionCall","src":"4531:58:69"},"nativeSrc":"4531:58:69","nodeType":"YulExpressionStatement","src":"4531:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"4610:6:69","nodeType":"YulIdentifier","src":"4610:6:69"},{"kind":"number","nativeSrc":"4618:2:69","nodeType":"YulLiteral","src":"4618:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4606:3:69","nodeType":"YulIdentifier","src":"4606:3:69"},"nativeSrc":"4606:15:69","nodeType":"YulFunctionCall","src":"4606:15:69"},{"hexValue":"6f74206120636f6e7472616374","kind":"string","nativeSrc":"4623:15:69","nodeType":"YulLiteral","src":"4623:15:69","type":"","value":"ot a contract"}],"functionName":{"name":"mstore","nativeSrc":"4599:6:69","nodeType":"YulIdentifier","src":"4599:6:69"},"nativeSrc":"4599:40:69","nodeType":"YulFunctionCall","src":"4599:40:69"},"nativeSrc":"4599:40:69","nodeType":"YulExpressionStatement","src":"4599:40:69"}]},"name":"store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65","nativeSrc":"4414:232:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"4512:6:69","nodeType":"YulTypedName","src":"4512:6:69","type":""}],"src":"4414:232:69"},{"body":{"nativeSrc":"4798:220:69","nodeType":"YulBlock","src":"4798:220:69","statements":[{"nativeSrc":"4808:74:69","nodeType":"YulAssignment","src":"4808:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"4874:3:69","nodeType":"YulIdentifier","src":"4874:3:69"},{"kind":"number","nativeSrc":"4879:2:69","nodeType":"YulLiteral","src":"4879:2:69","type":"","value":"45"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"4815:58:69","nodeType":"YulIdentifier","src":"4815:58:69"},"nativeSrc":"4815:67:69","nodeType":"YulFunctionCall","src":"4815:67:69"},"variableNames":[{"name":"pos","nativeSrc":"4808:3:69","nodeType":"YulIdentifier","src":"4808:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"4980:3:69","nodeType":"YulIdentifier","src":"4980:3:69"}],"functionName":{"name":"store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65","nativeSrc":"4891:88:69","nodeType":"YulIdentifier","src":"4891:88:69"},"nativeSrc":"4891:93:69","nodeType":"YulFunctionCall","src":"4891:93:69"},"nativeSrc":"4891:93:69","nodeType":"YulExpressionStatement","src":"4891:93:69"},{"nativeSrc":"4993:19:69","nodeType":"YulAssignment","src":"4993:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"5004:3:69","nodeType":"YulIdentifier","src":"5004:3:69"},{"kind":"number","nativeSrc":"5009:2:69","nodeType":"YulLiteral","src":"5009:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"5000:3:69","nodeType":"YulIdentifier","src":"5000:3:69"},"nativeSrc":"5000:12:69","nodeType":"YulFunctionCall","src":"5000:12:69"},"variableNames":[{"name":"end","nativeSrc":"4993:3:69","nodeType":"YulIdentifier","src":"4993:3:69"}]}]},"name":"abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack","nativeSrc":"4652:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"4786:3:69","nodeType":"YulTypedName","src":"4786:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"4794:3:69","nodeType":"YulTypedName","src":"4794:3:69","type":""}],"src":"4652:366:69"},{"body":{"nativeSrc":"5195:248:69","nodeType":"YulBlock","src":"5195:248:69","statements":[{"nativeSrc":"5205:26:69","nodeType":"YulAssignment","src":"5205:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"5217:9:69","nodeType":"YulIdentifier","src":"5217:9:69"},{"kind":"number","nativeSrc":"5228:2:69","nodeType":"YulLiteral","src":"5228:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5213:3:69","nodeType":"YulIdentifier","src":"5213:3:69"},"nativeSrc":"5213:18:69","nodeType":"YulFunctionCall","src":"5213:18:69"},"variableNames":[{"name":"tail","nativeSrc":"5205:4:69","nodeType":"YulIdentifier","src":"5205:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5252:9:69","nodeType":"YulIdentifier","src":"5252:9:69"},{"kind":"number","nativeSrc":"5263:1:69","nodeType":"YulLiteral","src":"5263:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5248:3:69","nodeType":"YulIdentifier","src":"5248:3:69"},"nativeSrc":"5248:17:69","nodeType":"YulFunctionCall","src":"5248:17:69"},{"arguments":[{"name":"tail","nativeSrc":"5271:4:69","nodeType":"YulIdentifier","src":"5271:4:69"},{"name":"headStart","nativeSrc":"5277:9:69","nodeType":"YulIdentifier","src":"5277:9:69"}],"functionName":{"name":"sub","nativeSrc":"5267:3:69","nodeType":"YulIdentifier","src":"5267:3:69"},"nativeSrc":"5267:20:69","nodeType":"YulFunctionCall","src":"5267:20:69"}],"functionName":{"name":"mstore","nativeSrc":"5241:6:69","nodeType":"YulIdentifier","src":"5241:6:69"},"nativeSrc":"5241:47:69","nodeType":"YulFunctionCall","src":"5241:47:69"},"nativeSrc":"5241:47:69","nodeType":"YulExpressionStatement","src":"5241:47:69"},{"nativeSrc":"5297:139:69","nodeType":"YulAssignment","src":"5297:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"5431:4:69","nodeType":"YulIdentifier","src":"5431:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack","nativeSrc":"5305:124:69","nodeType":"YulIdentifier","src":"5305:124:69"},"nativeSrc":"5305:131:69","nodeType":"YulFunctionCall","src":"5305:131:69"},"variableNames":[{"name":"tail","nativeSrc":"5297:4:69","nodeType":"YulIdentifier","src":"5297:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"5024:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5175:9:69","nodeType":"YulTypedName","src":"5175:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"5190:4:69","nodeType":"YulTypedName","src":"5190:4:69","type":""}],"src":"5024:419:69"},{"body":{"nativeSrc":"5555:119:69","nodeType":"YulBlock","src":"5555:119:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"5577:6:69","nodeType":"YulIdentifier","src":"5577:6:69"},{"kind":"number","nativeSrc":"5585:1:69","nodeType":"YulLiteral","src":"5585:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"5573:3:69","nodeType":"YulIdentifier","src":"5573:3:69"},"nativeSrc":"5573:14:69","nodeType":"YulFunctionCall","src":"5573:14:69"},{"hexValue":"416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f","kind":"string","nativeSrc":"5589:34:69","nodeType":"YulLiteral","src":"5589:34:69","type":"","value":"Address: delegate call to non-co"}],"functionName":{"name":"mstore","nativeSrc":"5566:6:69","nodeType":"YulIdentifier","src":"5566:6:69"},"nativeSrc":"5566:58:69","nodeType":"YulFunctionCall","src":"5566:58:69"},"nativeSrc":"5566:58:69","nodeType":"YulExpressionStatement","src":"5566:58:69"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"5645:6:69","nodeType":"YulIdentifier","src":"5645:6:69"},{"kind":"number","nativeSrc":"5653:2:69","nodeType":"YulLiteral","src":"5653:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5641:3:69","nodeType":"YulIdentifier","src":"5641:3:69"},"nativeSrc":"5641:15:69","nodeType":"YulFunctionCall","src":"5641:15:69"},{"hexValue":"6e7472616374","kind":"string","nativeSrc":"5658:8:69","nodeType":"YulLiteral","src":"5658:8:69","type":"","value":"ntract"}],"functionName":{"name":"mstore","nativeSrc":"5634:6:69","nodeType":"YulIdentifier","src":"5634:6:69"},"nativeSrc":"5634:33:69","nodeType":"YulFunctionCall","src":"5634:33:69"},"nativeSrc":"5634:33:69","nodeType":"YulExpressionStatement","src":"5634:33:69"}]},"name":"store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520","nativeSrc":"5449:225:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nativeSrc":"5547:6:69","nodeType":"YulTypedName","src":"5547:6:69","type":""}],"src":"5449:225:69"},{"body":{"nativeSrc":"5826:220:69","nodeType":"YulBlock","src":"5826:220:69","statements":[{"nativeSrc":"5836:74:69","nodeType":"YulAssignment","src":"5836:74:69","value":{"arguments":[{"name":"pos","nativeSrc":"5902:3:69","nodeType":"YulIdentifier","src":"5902:3:69"},{"kind":"number","nativeSrc":"5907:2:69","nodeType":"YulLiteral","src":"5907:2:69","type":"","value":"38"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"5843:58:69","nodeType":"YulIdentifier","src":"5843:58:69"},"nativeSrc":"5843:67:69","nodeType":"YulFunctionCall","src":"5843:67:69"},"variableNames":[{"name":"pos","nativeSrc":"5836:3:69","nodeType":"YulIdentifier","src":"5836:3:69"}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"6008:3:69","nodeType":"YulIdentifier","src":"6008:3:69"}],"functionName":{"name":"store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520","nativeSrc":"5919:88:69","nodeType":"YulIdentifier","src":"5919:88:69"},"nativeSrc":"5919:93:69","nodeType":"YulFunctionCall","src":"5919:93:69"},"nativeSrc":"5919:93:69","nodeType":"YulExpressionStatement","src":"5919:93:69"},{"nativeSrc":"6021:19:69","nodeType":"YulAssignment","src":"6021:19:69","value":{"arguments":[{"name":"pos","nativeSrc":"6032:3:69","nodeType":"YulIdentifier","src":"6032:3:69"},{"kind":"number","nativeSrc":"6037:2:69","nodeType":"YulLiteral","src":"6037:2:69","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"6028:3:69","nodeType":"YulIdentifier","src":"6028:3:69"},"nativeSrc":"6028:12:69","nodeType":"YulFunctionCall","src":"6028:12:69"},"variableNames":[{"name":"end","nativeSrc":"6021:3:69","nodeType":"YulIdentifier","src":"6021:3:69"}]}]},"name":"abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack","nativeSrc":"5680:366:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"5814:3:69","nodeType":"YulTypedName","src":"5814:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"5822:3:69","nodeType":"YulTypedName","src":"5822:3:69","type":""}],"src":"5680:366:69"},{"body":{"nativeSrc":"6223:248:69","nodeType":"YulBlock","src":"6223:248:69","statements":[{"nativeSrc":"6233:26:69","nodeType":"YulAssignment","src":"6233:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"6245:9:69","nodeType":"YulIdentifier","src":"6245:9:69"},{"kind":"number","nativeSrc":"6256:2:69","nodeType":"YulLiteral","src":"6256:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"6241:3:69","nodeType":"YulIdentifier","src":"6241:3:69"},"nativeSrc":"6241:18:69","nodeType":"YulFunctionCall","src":"6241:18:69"},"variableNames":[{"name":"tail","nativeSrc":"6233:4:69","nodeType":"YulIdentifier","src":"6233:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6280:9:69","nodeType":"YulIdentifier","src":"6280:9:69"},{"kind":"number","nativeSrc":"6291:1:69","nodeType":"YulLiteral","src":"6291:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"6276:3:69","nodeType":"YulIdentifier","src":"6276:3:69"},"nativeSrc":"6276:17:69","nodeType":"YulFunctionCall","src":"6276:17:69"},{"arguments":[{"name":"tail","nativeSrc":"6299:4:69","nodeType":"YulIdentifier","src":"6299:4:69"},{"name":"headStart","nativeSrc":"6305:9:69","nodeType":"YulIdentifier","src":"6305:9:69"}],"functionName":{"name":"sub","nativeSrc":"6295:3:69","nodeType":"YulIdentifier","src":"6295:3:69"},"nativeSrc":"6295:20:69","nodeType":"YulFunctionCall","src":"6295:20:69"}],"functionName":{"name":"mstore","nativeSrc":"6269:6:69","nodeType":"YulIdentifier","src":"6269:6:69"},"nativeSrc":"6269:47:69","nodeType":"YulFunctionCall","src":"6269:47:69"},"nativeSrc":"6269:47:69","nodeType":"YulExpressionStatement","src":"6269:47:69"},{"nativeSrc":"6325:139:69","nodeType":"YulAssignment","src":"6325:139:69","value":{"arguments":[{"name":"tail","nativeSrc":"6459:4:69","nodeType":"YulIdentifier","src":"6459:4:69"}],"functionName":{"name":"abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack","nativeSrc":"6333:124:69","nodeType":"YulIdentifier","src":"6333:124:69"},"nativeSrc":"6333:131:69","nodeType":"YulFunctionCall","src":"6333:131:69"},"variableNames":[{"name":"tail","nativeSrc":"6325:4:69","nodeType":"YulIdentifier","src":"6325:4:69"}]}]},"name":"abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"6052:419:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6203:9:69","nodeType":"YulTypedName","src":"6203:9:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"6218:4:69","nodeType":"YulTypedName","src":"6218:4:69","type":""}],"src":"6052:419:69"},{"body":{"nativeSrc":"6535:40:69","nodeType":"YulBlock","src":"6535:40:69","statements":[{"nativeSrc":"6546:22:69","nodeType":"YulAssignment","src":"6546:22:69","value":{"arguments":[{"name":"value","nativeSrc":"6562:5:69","nodeType":"YulIdentifier","src":"6562:5:69"}],"functionName":{"name":"mload","nativeSrc":"6556:5:69","nodeType":"YulIdentifier","src":"6556:5:69"},"nativeSrc":"6556:12:69","nodeType":"YulFunctionCall","src":"6556:12:69"},"variableNames":[{"name":"length","nativeSrc":"6546:6:69","nodeType":"YulIdentifier","src":"6546:6:69"}]}]},"name":"array_length_t_bytes_memory_ptr","nativeSrc":"6477:98:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"6518:5:69","nodeType":"YulTypedName","src":"6518:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"6528:6:69","nodeType":"YulTypedName","src":"6528:6:69","type":""}],"src":"6477:98:69"},{"body":{"nativeSrc":"6694:34:69","nodeType":"YulBlock","src":"6694:34:69","statements":[{"nativeSrc":"6704:18:69","nodeType":"YulAssignment","src":"6704:18:69","value":{"name":"pos","nativeSrc":"6719:3:69","nodeType":"YulIdentifier","src":"6719:3:69"},"variableNames":[{"name":"updated_pos","nativeSrc":"6704:11:69","nodeType":"YulIdentifier","src":"6704:11:69"}]}]},"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"6581:147:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"6666:3:69","nodeType":"YulTypedName","src":"6666:3:69","type":""},{"name":"length","nativeSrc":"6671:6:69","nodeType":"YulTypedName","src":"6671:6:69","type":""}],"returnVariables":[{"name":"updated_pos","nativeSrc":"6682:11:69","nodeType":"YulTypedName","src":"6682:11:69","type":""}],"src":"6581:147:69"},{"body":{"nativeSrc":"6796:186:69","nodeType":"YulBlock","src":"6796:186:69","statements":[{"nativeSrc":"6807:10:69","nodeType":"YulVariableDeclaration","src":"6807:10:69","value":{"kind":"number","nativeSrc":"6816:1:69","nodeType":"YulLiteral","src":"6816:1:69","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"6811:1:69","nodeType":"YulTypedName","src":"6811:1:69","type":""}]},{"body":{"nativeSrc":"6876:63:69","nodeType":"YulBlock","src":"6876:63:69","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"6901:3:69","nodeType":"YulIdentifier","src":"6901:3:69"},{"name":"i","nativeSrc":"6906:1:69","nodeType":"YulIdentifier","src":"6906:1:69"}],"functionName":{"name":"add","nativeSrc":"6897:3:69","nodeType":"YulIdentifier","src":"6897:3:69"},"nativeSrc":"6897:11:69","nodeType":"YulFunctionCall","src":"6897:11:69"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"6920:3:69","nodeType":"YulIdentifier","src":"6920:3:69"},{"name":"i","nativeSrc":"6925:1:69","nodeType":"YulIdentifier","src":"6925:1:69"}],"functionName":{"name":"add","nativeSrc":"6916:3:69","nodeType":"YulIdentifier","src":"6916:3:69"},"nativeSrc":"6916:11:69","nodeType":"YulFunctionCall","src":"6916:11:69"}],"functionName":{"name":"mload","nativeSrc":"6910:5:69","nodeType":"YulIdentifier","src":"6910:5:69"},"nativeSrc":"6910:18:69","nodeType":"YulFunctionCall","src":"6910:18:69"}],"functionName":{"name":"mstore","nativeSrc":"6890:6:69","nodeType":"YulIdentifier","src":"6890:6:69"},"nativeSrc":"6890:39:69","nodeType":"YulFunctionCall","src":"6890:39:69"},"nativeSrc":"6890:39:69","nodeType":"YulExpressionStatement","src":"6890:39:69"}]},"condition":{"arguments":[{"name":"i","nativeSrc":"6837:1:69","nodeType":"YulIdentifier","src":"6837:1:69"},{"name":"length","nativeSrc":"6840:6:69","nodeType":"YulIdentifier","src":"6840:6:69"}],"functionName":{"name":"lt","nativeSrc":"6834:2:69","nodeType":"YulIdentifier","src":"6834:2:69"},"nativeSrc":"6834:13:69","nodeType":"YulFunctionCall","src":"6834:13:69"},"nativeSrc":"6826:113:69","nodeType":"YulForLoop","post":{"nativeSrc":"6848:19:69","nodeType":"YulBlock","src":"6848:19:69","statements":[{"nativeSrc":"6850:15:69","nodeType":"YulAssignment","src":"6850:15:69","value":{"arguments":[{"name":"i","nativeSrc":"6859:1:69","nodeType":"YulIdentifier","src":"6859:1:69"},{"kind":"number","nativeSrc":"6862:2:69","nodeType":"YulLiteral","src":"6862:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"6855:3:69","nodeType":"YulIdentifier","src":"6855:3:69"},"nativeSrc":"6855:10:69","nodeType":"YulFunctionCall","src":"6855:10:69"},"variableNames":[{"name":"i","nativeSrc":"6850:1:69","nodeType":"YulIdentifier","src":"6850:1:69"}]}]},"pre":{"nativeSrc":"6830:3:69","nodeType":"YulBlock","src":"6830:3:69","statements":[]},"src":"6826:113:69"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"6959:3:69","nodeType":"YulIdentifier","src":"6959:3:69"},{"name":"length","nativeSrc":"6964:6:69","nodeType":"YulIdentifier","src":"6964:6:69"}],"functionName":{"name":"add","nativeSrc":"6955:3:69","nodeType":"YulIdentifier","src":"6955:3:69"},"nativeSrc":"6955:16:69","nodeType":"YulFunctionCall","src":"6955:16:69"},{"kind":"number","nativeSrc":"6973:1:69","nodeType":"YulLiteral","src":"6973:1:69","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"6948:6:69","nodeType":"YulIdentifier","src":"6948:6:69"},"nativeSrc":"6948:27:69","nodeType":"YulFunctionCall","src":"6948:27:69"},"nativeSrc":"6948:27:69","nodeType":"YulExpressionStatement","src":"6948:27:69"}]},"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"6734:248:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"6778:3:69","nodeType":"YulTypedName","src":"6778:3:69","type":""},{"name":"dst","nativeSrc":"6783:3:69","nodeType":"YulTypedName","src":"6783:3:69","type":""},{"name":"length","nativeSrc":"6788:6:69","nodeType":"YulTypedName","src":"6788:6:69","type":""}],"src":"6734:248:69"},{"body":{"nativeSrc":"7096:278:69","nodeType":"YulBlock","src":"7096:278:69","statements":[{"nativeSrc":"7106:52:69","nodeType":"YulVariableDeclaration","src":"7106:52:69","value":{"arguments":[{"name":"value","nativeSrc":"7152:5:69","nodeType":"YulIdentifier","src":"7152:5:69"}],"functionName":{"name":"array_length_t_bytes_memory_ptr","nativeSrc":"7120:31:69","nodeType":"YulIdentifier","src":"7120:31:69"},"nativeSrc":"7120:38:69","nodeType":"YulFunctionCall","src":"7120:38:69"},"variables":[{"name":"length","nativeSrc":"7110:6:69","nodeType":"YulTypedName","src":"7110:6:69","type":""}]},{"nativeSrc":"7167:95:69","nodeType":"YulAssignment","src":"7167:95:69","value":{"arguments":[{"name":"pos","nativeSrc":"7250:3:69","nodeType":"YulIdentifier","src":"7250:3:69"},{"name":"length","nativeSrc":"7255:6:69","nodeType":"YulIdentifier","src":"7255:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"7174:75:69","nodeType":"YulIdentifier","src":"7174:75:69"},"nativeSrc":"7174:88:69","nodeType":"YulFunctionCall","src":"7174:88:69"},"variableNames":[{"name":"pos","nativeSrc":"7167:3:69","nodeType":"YulIdentifier","src":"7167:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"7310:5:69","nodeType":"YulIdentifier","src":"7310:5:69"},{"kind":"number","nativeSrc":"7317:4:69","nodeType":"YulLiteral","src":"7317:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"7306:3:69","nodeType":"YulIdentifier","src":"7306:3:69"},"nativeSrc":"7306:16:69","nodeType":"YulFunctionCall","src":"7306:16:69"},{"name":"pos","nativeSrc":"7324:3:69","nodeType":"YulIdentifier","src":"7324:3:69"},{"name":"length","nativeSrc":"7329:6:69","nodeType":"YulIdentifier","src":"7329:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"7271:34:69","nodeType":"YulIdentifier","src":"7271:34:69"},"nativeSrc":"7271:65:69","nodeType":"YulFunctionCall","src":"7271:65:69"},"nativeSrc":"7271:65:69","nodeType":"YulExpressionStatement","src":"7271:65:69"},{"nativeSrc":"7345:23:69","nodeType":"YulAssignment","src":"7345:23:69","value":{"arguments":[{"name":"pos","nativeSrc":"7356:3:69","nodeType":"YulIdentifier","src":"7356:3:69"},{"name":"length","nativeSrc":"7361:6:69","nodeType":"YulIdentifier","src":"7361:6:69"}],"functionName":{"name":"add","nativeSrc":"7352:3:69","nodeType":"YulIdentifier","src":"7352:3:69"},"nativeSrc":"7352:16:69","nodeType":"YulFunctionCall","src":"7352:16:69"},"variableNames":[{"name":"end","nativeSrc":"7345:3:69","nodeType":"YulIdentifier","src":"7345:3:69"}]}]},"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"6988:386:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7077:5:69","nodeType":"YulTypedName","src":"7077:5:69","type":""},{"name":"pos","nativeSrc":"7084:3:69","nodeType":"YulTypedName","src":"7084:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"7092:3:69","nodeType":"YulTypedName","src":"7092:3:69","type":""}],"src":"6988:386:69"},{"body":{"nativeSrc":"7514:137:69","nodeType":"YulBlock","src":"7514:137:69","statements":[{"nativeSrc":"7525:100:69","nodeType":"YulAssignment","src":"7525:100:69","value":{"arguments":[{"name":"value0","nativeSrc":"7612:6:69","nodeType":"YulIdentifier","src":"7612:6:69"},{"name":"pos","nativeSrc":"7621:3:69","nodeType":"YulIdentifier","src":"7621:3:69"}],"functionName":{"name":"abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack","nativeSrc":"7532:79:69","nodeType":"YulIdentifier","src":"7532:79:69"},"nativeSrc":"7532:93:69","nodeType":"YulFunctionCall","src":"7532:93:69"},"variableNames":[{"name":"pos","nativeSrc":"7525:3:69","nodeType":"YulIdentifier","src":"7525:3:69"}]},{"nativeSrc":"7635:10:69","nodeType":"YulAssignment","src":"7635:10:69","value":{"name":"pos","nativeSrc":"7642:3:69","nodeType":"YulIdentifier","src":"7642:3:69"},"variableNames":[{"name":"end","nativeSrc":"7635:3:69","nodeType":"YulIdentifier","src":"7635:3:69"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nativeSrc":"7380:271:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"7493:3:69","nodeType":"YulTypedName","src":"7493:3:69","type":""},{"name":"value0","nativeSrc":"7499:6:69","nodeType":"YulTypedName","src":"7499:6:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"7510:3:69","nodeType":"YulTypedName","src":"7510:3:69","type":""}],"src":"7380:271:69"},{"body":{"nativeSrc":"7716:40:69","nodeType":"YulBlock","src":"7716:40:69","statements":[{"nativeSrc":"7727:22:69","nodeType":"YulAssignment","src":"7727:22:69","value":{"arguments":[{"name":"value","nativeSrc":"7743:5:69","nodeType":"YulIdentifier","src":"7743:5:69"}],"functionName":{"name":"mload","nativeSrc":"7737:5:69","nodeType":"YulIdentifier","src":"7737:5:69"},"nativeSrc":"7737:12:69","nodeType":"YulFunctionCall","src":"7737:12:69"},"variableNames":[{"name":"length","nativeSrc":"7727:6:69","nodeType":"YulIdentifier","src":"7727:6:69"}]}]},"name":"array_length_t_string_memory_ptr","nativeSrc":"7657:99:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7699:5:69","nodeType":"YulTypedName","src":"7699:5:69","type":""}],"returnVariables":[{"name":"length","nativeSrc":"7709:6:69","nodeType":"YulTypedName","src":"7709:6:69","type":""}],"src":"7657:99:69"},{"body":{"nativeSrc":"7810:54:69","nodeType":"YulBlock","src":"7810:54:69","statements":[{"nativeSrc":"7820:38:69","nodeType":"YulAssignment","src":"7820:38:69","value":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"7838:5:69","nodeType":"YulIdentifier","src":"7838:5:69"},{"kind":"number","nativeSrc":"7845:2:69","nodeType":"YulLiteral","src":"7845:2:69","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"7834:3:69","nodeType":"YulIdentifier","src":"7834:3:69"},"nativeSrc":"7834:14:69","nodeType":"YulFunctionCall","src":"7834:14:69"},{"arguments":[{"kind":"number","nativeSrc":"7854:2:69","nodeType":"YulLiteral","src":"7854:2:69","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"7850:3:69","nodeType":"YulIdentifier","src":"7850:3:69"},"nativeSrc":"7850:7:69","nodeType":"YulFunctionCall","src":"7850:7:69"}],"functionName":{"name":"and","nativeSrc":"7830:3:69","nodeType":"YulIdentifier","src":"7830:3:69"},"nativeSrc":"7830:28:69","nodeType":"YulFunctionCall","src":"7830:28:69"},"variableNames":[{"name":"result","nativeSrc":"7820:6:69","nodeType":"YulIdentifier","src":"7820:6:69"}]}]},"name":"round_up_to_mul_of_32","nativeSrc":"7762:102:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7793:5:69","nodeType":"YulTypedName","src":"7793:5:69","type":""}],"returnVariables":[{"name":"result","nativeSrc":"7803:6:69","nodeType":"YulTypedName","src":"7803:6:69","type":""}],"src":"7762:102:69"},{"body":{"nativeSrc":"7962:285:69","nodeType":"YulBlock","src":"7962:285:69","statements":[{"nativeSrc":"7972:53:69","nodeType":"YulVariableDeclaration","src":"7972:53:69","value":{"arguments":[{"name":"value","nativeSrc":"8019:5:69","nodeType":"YulIdentifier","src":"8019:5:69"}],"functionName":{"name":"array_length_t_string_memory_ptr","nativeSrc":"7986:32:69","nodeType":"YulIdentifier","src":"7986:32:69"},"nativeSrc":"7986:39:69","nodeType":"YulFunctionCall","src":"7986:39:69"},"variables":[{"name":"length","nativeSrc":"7976:6:69","nodeType":"YulTypedName","src":"7976:6:69","type":""}]},{"nativeSrc":"8034:78:69","nodeType":"YulAssignment","src":"8034:78:69","value":{"arguments":[{"name":"pos","nativeSrc":"8100:3:69","nodeType":"YulIdentifier","src":"8100:3:69"},{"name":"length","nativeSrc":"8105:6:69","nodeType":"YulIdentifier","src":"8105:6:69"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nativeSrc":"8041:58:69","nodeType":"YulIdentifier","src":"8041:58:69"},"nativeSrc":"8041:71:69","nodeType":"YulFunctionCall","src":"8041:71:69"},"variableNames":[{"name":"pos","nativeSrc":"8034:3:69","nodeType":"YulIdentifier","src":"8034:3:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"8160:5:69","nodeType":"YulIdentifier","src":"8160:5:69"},{"kind":"number","nativeSrc":"8167:4:69","nodeType":"YulLiteral","src":"8167:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"8156:3:69","nodeType":"YulIdentifier","src":"8156:3:69"},"nativeSrc":"8156:16:69","nodeType":"YulFunctionCall","src":"8156:16:69"},{"name":"pos","nativeSrc":"8174:3:69","nodeType":"YulIdentifier","src":"8174:3:69"},{"name":"length","nativeSrc":"8179:6:69","nodeType":"YulIdentifier","src":"8179:6:69"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"8121:34:69","nodeType":"YulIdentifier","src":"8121:34:69"},"nativeSrc":"8121:65:69","nodeType":"YulFunctionCall","src":"8121:65:69"},"nativeSrc":"8121:65:69","nodeType":"YulExpressionStatement","src":"8121:65:69"},{"nativeSrc":"8195:46:69","nodeType":"YulAssignment","src":"8195:46:69","value":{"arguments":[{"name":"pos","nativeSrc":"8206:3:69","nodeType":"YulIdentifier","src":"8206:3:69"},{"arguments":[{"name":"length","nativeSrc":"8233:6:69","nodeType":"YulIdentifier","src":"8233:6:69"}],"functionName":{"name":"round_up_to_mul_of_32","nativeSrc":"8211:21:69","nodeType":"YulIdentifier","src":"8211:21:69"},"nativeSrc":"8211:29:69","nodeType":"YulFunctionCall","src":"8211:29:69"}],"functionName":{"name":"add","nativeSrc":"8202:3:69","nodeType":"YulIdentifier","src":"8202:3:69"},"nativeSrc":"8202:39:69","nodeType":"YulFunctionCall","src":"8202:39:69"},"variableNames":[{"name":"end","nativeSrc":"8195:3:69","nodeType":"YulIdentifier","src":"8195:3:69"}]}]},"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"7870:377:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"7943:5:69","nodeType":"YulTypedName","src":"7943:5:69","type":""},{"name":"pos","nativeSrc":"7950:3:69","nodeType":"YulTypedName","src":"7950:3:69","type":""}],"returnVariables":[{"name":"end","nativeSrc":"7958:3:69","nodeType":"YulTypedName","src":"7958:3:69","type":""}],"src":"7870:377:69"},{"body":{"nativeSrc":"8371:195:69","nodeType":"YulBlock","src":"8371:195:69","statements":[{"nativeSrc":"8381:26:69","nodeType":"YulAssignment","src":"8381:26:69","value":{"arguments":[{"name":"headStart","nativeSrc":"8393:9:69","nodeType":"YulIdentifier","src":"8393:9:69"},{"kind":"number","nativeSrc":"8404:2:69","nodeType":"YulLiteral","src":"8404:2:69","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8389:3:69","nodeType":"YulIdentifier","src":"8389:3:69"},"nativeSrc":"8389:18:69","nodeType":"YulFunctionCall","src":"8389:18:69"},"variableNames":[{"name":"tail","nativeSrc":"8381:4:69","nodeType":"YulIdentifier","src":"8381:4:69"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8428:9:69","nodeType":"YulIdentifier","src":"8428:9:69"},{"kind":"number","nativeSrc":"8439:1:69","nodeType":"YulLiteral","src":"8439:1:69","type":"","value":"0"}],"functionName":{"name":"add","nativeSrc":"8424:3:69","nodeType":"YulIdentifier","src":"8424:3:69"},"nativeSrc":"8424:17:69","nodeType":"YulFunctionCall","src":"8424:17:69"},{"arguments":[{"name":"tail","nativeSrc":"8447:4:69","nodeType":"YulIdentifier","src":"8447:4:69"},{"name":"headStart","nativeSrc":"8453:9:69","nodeType":"YulIdentifier","src":"8453:9:69"}],"functionName":{"name":"sub","nativeSrc":"8443:3:69","nodeType":"YulIdentifier","src":"8443:3:69"},"nativeSrc":"8443:20:69","nodeType":"YulFunctionCall","src":"8443:20:69"}],"functionName":{"name":"mstore","nativeSrc":"8417:6:69","nodeType":"YulIdentifier","src":"8417:6:69"},"nativeSrc":"8417:47:69","nodeType":"YulFunctionCall","src":"8417:47:69"},"nativeSrc":"8417:47:69","nodeType":"YulExpressionStatement","src":"8417:47:69"},{"nativeSrc":"8473:86:69","nodeType":"YulAssignment","src":"8473:86:69","value":{"arguments":[{"name":"value0","nativeSrc":"8545:6:69","nodeType":"YulIdentifier","src":"8545:6:69"},{"name":"tail","nativeSrc":"8554:4:69","nodeType":"YulIdentifier","src":"8554:4:69"}],"functionName":{"name":"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack","nativeSrc":"8481:63:69","nodeType":"YulIdentifier","src":"8481:63:69"},"nativeSrc":"8481:78:69","nodeType":"YulFunctionCall","src":"8481:78:69"},"variableNames":[{"name":"tail","nativeSrc":"8473:4:69","nodeType":"YulIdentifier","src":"8473:4:69"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"8253:313:69","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8343:9:69","nodeType":"YulTypedName","src":"8343:9:69","type":""},{"name":"value0","nativeSrc":"8355:6:69","nodeType":"YulTypedName","src":"8355:6:69","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"8366:4:69","nodeType":"YulTypedName","src":"8366:4:69","type":""}],"src":"8253:313:69"}]},"contents":"{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n        revert(0, 0)\n    }\n\n    function revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490() {\n        revert(0, 0)\n    }\n\n    function revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() {\n        revert(0, 0)\n    }\n\n    // bytes\n    function abi_decode_t_bytes_calldata_ptr(offset, end) -> arrayPos, length {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490() }\n        arrayPos := add(offset, 0x20)\n        if gt(add(arrayPos, mul(length, 0x01)), end) { revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() }\n    }\n\n    function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := calldataload(add(headStart, 32))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value1, value2 := abi_decode_t_bytes_calldata_ptr(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function store_literal_in_memory_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d(memPtr) {\n\n        mstore(add(memPtr, 0), \"TransparentUpgradeableProxy: adm\")\n\n        mstore(add(memPtr, 32), \"in cannot fallback to proxy targ\")\n\n        mstore(add(memPtr, 64), \"et\")\n\n    }\n\n    function abi_encode_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 66)\n        store_literal_in_memory_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d(pos)\n        end := add(pos, 96)\n    }\n\n    function abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65(memPtr) {\n\n        mstore(add(memPtr, 0), \"ERC1967: new implementation is n\")\n\n        mstore(add(memPtr, 32), \"ot a contract\")\n\n    }\n\n    function abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 45)\n        store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520(memPtr) {\n\n        mstore(add(memPtr, 0), \"Address: delegate call to non-co\")\n\n        mstore(add(memPtr, 32), \"ntract\")\n\n    }\n\n    function abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack(pos) -> end {\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 38)\n        store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520(pos)\n        end := add(pos, 64)\n    }\n\n    function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack( tail)\n\n    }\n\n    function array_length_t_bytes_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n        updated_pos := pos\n    }\n\n    function copy_memory_to_memory_with_cleanup(src, dst, length) {\n\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n\n    }\n\n    function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n        let length := array_length_t_bytes_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, length)\n    }\n\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n        pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0,  pos)\n\n        end := pos\n    }\n\n    function array_length_t_string_memory_ptr(value) -> length {\n\n        length := mload(value)\n\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n        let length := array_length_t_string_memory_ptr(value)\n        pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        mstore(add(headStart, 0), sub(tail, headStart))\n        tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0,  tail)\n\n    }\n\n}\n","id":69,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"20041":[{"length":32,"start":233},{"length":32,"start":319},{"length":32,"start":449},{"length":32,"start":523},{"length":32,"start":572},{"length":32,"start":608}]},"linkReferences":{},"object":"6080604052600436106100435760003560e01c80633659cfe61461005a5780634f1ef2861461007a5780635c60da1b1461008d578063f851a440146100b857610052565b36610052576100506100cd565b005b6100506100cd565b34801561006657600080fd5b50610050610075366004610510565b6100e7565b61005061008836600461058b565b61013d565b34801561009957600080fd5b506100a26101bd565b6040516100af91906105f6565b60405180910390f35b3480156100c457600080fd5b506100a2610207565b6100d561025e565b6100e56100e06102af565b6102e2565b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101355761013281604051806020016040528060008152506000610306565b50565b6101326100cd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101b5576101b08383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610306915050565b505050565b6101b06100cd565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101fc576101f76102af565b905090565b6102046100cd565b90565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101fc57507f000000000000000000000000000000000000000000000000000000000000000090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100e55760405162461bcd60e51b81526004016102a690610604565b60405180910390fd5b60006101f77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b3660008037600080366000845af43d6000803e808015610301573d6000f35b3d6000fd5b61030f83610331565b60008251118061031c5750805b156101b05761032b8383610371565b50505050565b61033a8161039f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061039683836040518060600160405280602781526020016107b660279139610407565b90505b92915050565b6001600160a01b0381163b6103c65760405162461bcd60e51b81526004016102a6906106bd565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60606001600160a01b0384163b6104305760405162461bcd60e51b81526004016102a690610710565b600080856001600160a01b03168560405161044b9190610766565b600060405180830381855af49150503d8060008114610486576040519150601f19603f3d011682016040523d82523d6000602084013e61048b565b606091505b509150915061049b8282866104a7565b925050505b9392505050565b606083156104b65750816104a0565b8251156104c65782518084602001fd5b8160405162461bcd60e51b81526004016102a691906107a4565b60006001600160a01b038216610399565b6104fa816104e0565b811461013257600080fd5b8035610399816104f1565b60006020828403121561052557610525600080fd5b60006105318484610505565b949350505050565b60008083601f84011261054e5761054e600080fd5b50813567ffffffffffffffff81111561056957610569600080fd5b60208301915083600182028301111561058457610584600080fd5b9250929050565b6000806000604084860312156105a3576105a3600080fd5b60006105af8686610505565b935050602084013567ffffffffffffffff8111156105cf576105cf600080fd5b6105db86828701610539565b92509250509250925092565b6105f0816104e0565b82525050565b6020810161039982846105e7565b6020808252810161039981604281527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60208201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267604082015261195d60f21b606082015260800190565b602d81526000602082017f455243313936373a206e657720696d706c656d656e746174696f6e206973206e81526c1bdd08184818dbdb9d1c9858dd609a1b602082015291505b5060400190565b6020808252810161039981610670565b602681526000602082017f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f8152651b9d1c9858dd60d21b602082015291506106b6565b60208082528101610399816106cd565b60005b8381101561073b578181015183820152602001610723565b50506000910152565b600061074e825190565b61075c818560208601610720565b9290920192915050565b60006104a08284610744565b600061077c825190565b808452602084019350610793818560208601610720565b601f01601f19169290920192915050565b60208082528101610396818461077256fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122074d46e8de9a3e5294fe7b4f85337f8b52a8b902fb14551d71a6dd8277259694664736f6c63430008190033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x43 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x5A JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xB8 JUMPI PUSH2 0x52 JUMP JUMPDEST CALLDATASIZE PUSH2 0x52 JUMPI PUSH2 0x50 PUSH2 0xCD JUMP JUMPDEST STOP JUMPDEST PUSH2 0x50 PUSH2 0xCD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x50 PUSH2 0x75 CALLDATASIZE PUSH1 0x4 PUSH2 0x510 JUMP JUMPDEST PUSH2 0xE7 JUMP JUMPDEST PUSH2 0x50 PUSH2 0x88 CALLDATASIZE PUSH1 0x4 PUSH2 0x58B JUMP JUMPDEST PUSH2 0x13D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA2 PUSH2 0x1BD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAF SWAP2 SWAP1 PUSH2 0x5F6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA2 PUSH2 0x207 JUMP JUMPDEST PUSH2 0xD5 PUSH2 0x25E JUMP JUMPDEST PUSH2 0xE5 PUSH2 0xE0 PUSH2 0x2AF JUMP JUMPDEST PUSH2 0x2E2 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x135 JUMPI PUSH2 0x132 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH1 0x0 PUSH2 0x306 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x132 PUSH2 0xCD JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x1B5 JUMPI PUSH2 0x1B0 DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH1 0x1 SWAP3 POP PUSH2 0x306 SWAP2 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1B0 PUSH2 0xCD JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x1FC JUMPI PUSH2 0x1F7 PUSH2 0x2AF JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x204 PUSH2 0xCD JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x1FC JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0xE5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2A6 SWAP1 PUSH2 0x604 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1F7 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x301 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x30F DUP4 PUSH2 0x331 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x31C JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0x1B0 JUMPI PUSH2 0x32B DUP4 DUP4 PUSH2 0x371 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x33A DUP2 PUSH2 0x39F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x396 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x7B6 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x407 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x3C6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2A6 SWAP1 PUSH2 0x6BD JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE PUSH2 0x430 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2A6 SWAP1 PUSH2 0x710 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x44B SWAP2 SWAP1 PUSH2 0x766 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x486 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x48B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x49B DUP3 DUP3 DUP7 PUSH2 0x4A7 JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x4B6 JUMPI POP DUP2 PUSH2 0x4A0 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x4C6 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2A6 SWAP2 SWAP1 PUSH2 0x7A4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x399 JUMP JUMPDEST PUSH2 0x4FA DUP2 PUSH2 0x4E0 JUMP JUMPDEST DUP2 EQ PUSH2 0x132 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x399 DUP2 PUSH2 0x4F1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x525 JUMPI PUSH2 0x525 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x531 DUP5 DUP5 PUSH2 0x505 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x54E JUMPI PUSH2 0x54E PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x569 JUMPI PUSH2 0x569 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x584 JUMPI PUSH2 0x584 PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5A3 JUMPI PUSH2 0x5A3 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5AF DUP7 DUP7 PUSH2 0x505 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5CF JUMPI PUSH2 0x5CF PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5DB DUP7 DUP3 DUP8 ADD PUSH2 0x539 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x5F0 DUP2 PUSH2 0x4E0 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x399 DUP3 DUP5 PUSH2 0x5E7 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x399 DUP2 PUSH1 0x42 DUP2 MSTORE PUSH32 0x5472616E73706172656E745570677261646561626C6550726F78793A2061646D PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x696E2063616E6E6F742066616C6C6261636B20746F2070726F78792074617267 PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x195D PUSH1 0xF2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x2D DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E DUP2 MSTORE PUSH13 0x1BDD08184818DBDB9D1C9858DD PUSH1 0x9A SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP JUMPDEST POP PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x399 DUP2 PUSH2 0x670 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F DUP2 MSTORE PUSH6 0x1B9D1C9858DD PUSH1 0xD2 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x6B6 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x399 DUP2 PUSH2 0x6CD JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x73B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x723 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74E DUP3 MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x75C DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x720 JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4A0 DUP3 DUP5 PUSH2 0x744 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x77C DUP3 MLOAD SWAP1 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x793 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x720 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x396 DUP2 DUP5 PUSH2 0x772 JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH10 0x7066735822122074D46E DUP14 0xE9 LOG3 0xE5 0x29 0x4F 0xE7 0xB4 0xF8 MSTORE8 CALLDATACOPY 0xF8 0xB5 0x2A DUP12 SWAP1 0x2F 0xB1 GASLIMIT MLOAD 0xD7 BYTE PUSH14 0xD8277259694664736F6C63430008 NOT STOP CALLER ","sourceMap":"1653:3648:68:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2903:11:61;:9;:11::i;:::-;1653:3648:68;;2680:11:61;:9;:11::i;4037:134:68:-;;;;;;;;;;-1:-1:-1;4037:134:68;;;;;:::i;:::-;;:::i;4547:164::-;;;;;;:::i;:::-;;:::i;3748:129::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3192:96;;;;;;;;;;;;;:::i;2327:110:61:-;2375:17;:15;:17::i;:::-;2402:28;2412:17;:15;:17::i;:::-;2402:9;:28::i;:::-;2327:110::o;4037:134:68:-;5286:6;-1:-1:-1;;;;;2649:25:68;:10;:25;2645:99;;4110:54:::1;4128:17;4147:9;;;;;;;;;;;::::0;4158:5:::1;4110:17;:54::i;:::-;4037:134:::0;:::o;2645:99::-;2722:11;:9;:11::i;4547:164::-;5286:6;-1:-1:-1;;;;;2649:25:68;:10;:25;2645:99;;4656:48:::1;4674:17;4693:4;;4656:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;4699:4:68::1;::::0;-1:-1:-1;4656:17:68::1;::::0;-1:-1:-1;;4656:48:68:i:1;:::-;4547:164:::0;;;:::o;2645:99::-;2722:11;:9;:11::i;3748:129::-;3800:23;5286:6;-1:-1:-1;;;;;2649:25:68;:10;:25;2645:99;;3853:17:::1;:15;:17::i;:::-;3835:35;;3748:129:::0;:::o;2645:99::-;2722:11;:9;:11::i;:::-;3748:129;:::o;3192:96::-;3235:14;5286:6;-1:-1:-1;;;;;2649:25:68;:10;:25;2645:99;;-1:-1:-1;5286:6:68;;3748:129::o;4986:207::-;5286:6;-1:-1:-1;;;;;5057:25:68;:10;:25;5049:104;;;;-1:-1:-1;;;5049:104:68;;;;;;;:::i;:::-;;;;;;;;1240:140:59;1307:12;1338:35;1035:66:60;1385:54;-1:-1:-1;;;;;1385:54:60;;1306:140;953:895:61;1291:14;1288:1;1285;1272:34;1505:1;1502;1486:14;1483:1;1467:14;1460:5;1447:60;1581:16;1578:1;1575;1560:38;1619:6;1686:66;;;;1801:16;1798:1;1791:27;1686:66;1721:16;1718:1;1711:27;2188:295:60;2326:29;2337:17;2326:10;:29::i;:::-;2383:1;2369:4;:11;:15;:28;;;;2388:9;2369:28;2365:112;;;2413:53;2442:17;2461:4;2413:28;:53::i;:::-;;2188:295;;;:::o;1902:152::-;1968:37;1987:17;1968:18;:37::i;:::-;2020:27;;-1:-1:-1;;;;;2020:27:60;;;;;;;;1902:152;:::o;6575:198:65:-;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;;6575:198;;;;;:::o;1537:259:60:-;-1:-1:-1;;;;;1470:19:65;;;1610:95:60;;;;-1:-1:-1;;;1610:95:60;;;;;;;:::i;:::-;1035:66;1715:74;;-1:-1:-1;;;;;;1715:74:60;-1:-1:-1;;;;;1715:74:60;;;;;;;;;;1537:259::o;6959:387:65:-;7100:12;-1:-1:-1;;;;;1470:19:65;;;7124:69;;;;-1:-1:-1;;;7124:69:65;;;;;;;:::i;:::-;7205:12;7219:23;7246:6;-1:-1:-1;;;;;7246:19:65;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7204:67;;;;7288:51;7305:7;7314:10;7326:12;7288:16;:51::i;:::-;7281:58;;;;6959:387;;;;;;:::o;7566:692::-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:65;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;-1:-1:-1;;;8207:20:65;;;;;;;;:::i;466:96:69:-;503:7;-1:-1:-1;;;;;400:54:69;;532:24;334:126;568:122;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;696:139;767:20;;796:33;767:20;796:33;:::i;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;197:1;194;187:12;955:79;1075:1;1100:53;1145:7;1125:9;1100:53;:::i;:::-;1090:63;841:329;-1:-1:-1;;;;841:329:69:o;1558:552::-;1615:8;1625:6;1675:3;1668:4;1660:6;1656:17;1652:27;1642:122;;1683:79;197:1;194;187:12;1683:79;-1:-1:-1;1783:20:69;;1826:18;1815:30;;1812:117;;;1848:79;197:1;194;187:12;1848:79;1962:4;1954:6;1950:17;1938:29;;2016:3;2008:4;2000:6;1996:17;1986:8;1982:32;1979:41;1976:128;;;2023:79;197:1;194;187:12;2023:79;1558:552;;;;;:::o;2116:672::-;2195:6;2203;2211;2260:2;2248:9;2239:7;2235:23;2231:32;2228:119;;;2266:79;197:1;194;187:12;2266:79;2386:1;2411:53;2456:7;2436:9;2411:53;:::i;:::-;2401:63;;2357:117;2541:2;2530:9;2526:18;2513:32;2572:18;2564:6;2561:30;2558:117;;;2594:79;197:1;194;187:12;2594:79;2707:64;2763:7;2754:6;2743:9;2739:22;2707:64;:::i;:::-;2689:82;;;;2484:297;2116:672;;;;;:::o;2794:118::-;2881:24;2899:5;2881:24;:::i;:::-;2876:3;2869:37;2794:118;;:::o;2918:222::-;3049:2;3034:18;;3062:71;3038:9;3106:6;3062:71;:::i;3989:419::-;4193:2;4206:47;;;4178:18;;4270:131;4178:18;3844:2;3252:19;;3461:34;3304:4;3295:14;;3438:58;3530:34;3513:15;;;3506:59;-1:-1:-1;;;3582:15:69;;;3575:29;3965:12;;;3617:366;4652;4879:2;3252:19;;4794:3;3304:4;3295:14;;4554:34;4531:58;;-1:-1:-1;;;4618:2:69;4606:15;;4599:40;4808:74;-1:-1:-1;4891:93:69;-1:-1:-1;5009:2:69;5000:12;;4652:366::o;5024:419::-;5228:2;5241:47;;;5213:18;;5305:131;5213:18;5305:131;:::i;5680:366::-;5907:2;3252:19;;5822:3;3304:4;3295:14;;5589:34;5566:58;;-1:-1:-1;;;5653:2:69;5641:15;;5634:33;5836:74;-1:-1:-1;5919:93:69;5449:225;6052:419;6256:2;6269:47;;;6241:18;;6333:131;6241:18;6333:131;:::i;6734:248::-;6816:1;6826:113;6840:6;6837:1;6834:13;6826:113;;;6916:11;;;6910:18;6897:11;;;6890:39;6862:2;6855:10;6826:113;;;-1:-1:-1;;6973:1:69;6955:16;;6948:27;6734:248::o;6988:386::-;7092:3;7120:38;7152:5;6556:12;;6477:98;7120:38;7271:65;7329:6;7324:3;7317:4;7310:5;7306:16;7271:65;:::i;:::-;7352:16;;;;;6988:386;-1:-1:-1;;6988:386:69:o;7380:271::-;7510:3;7532:93;7621:3;7612:6;7532:93;:::i;7870:377::-;7958:3;7986:39;8019:5;6556:12;;6477:98;7986:39;3252:19;;;3304:4;3295:14;;8034:78;;8121:65;8179:6;8174:3;8167:4;8160:5;8156:16;8121:65;:::i;:::-;7854:2;7834:14;-1:-1:-1;;7830:28:69;8202:39;;;;;;-1:-1:-1;;7870:377:69:o;8253:313::-;8404:2;8417:47;;;8389:18;;8481:78;8389:18;8545:6;8481:78;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"413200","executionCost":"infinite","totalCost":"infinite"},"external":{"":"infinite","admin()":"infinite","implementation()":"infinite","upgradeTo(address)":"infinite","upgradeToAndCall(address,bytes)":"infinite"},"internal":{"_admin()":"infinite","_beforeFallback()":"infinite","_getAdmin()":"infinite"}},"methodIdentifiers":{"admin()":"f851a440","implementation()":"5c60da1b","upgradeTo(address)":"3659cfe6","upgradeToAndCall(address,bytes)":"4f1ef286"}},"metadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is upgraded.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"hardhat-deploy/solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\":\"OptimizedTransparentUpgradeableProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false},\"runs\":200},\"remappings\":[]},\"sources\":{\"hardhat-deploy/solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n    /**\\n     * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n     *\\n     * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n     * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n     */\\n    constructor(address _logic, bytes memory _data) payable {\\n        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n        _upgradeToAndCall(_logic, _data, false);\\n    }\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _implementation() internal view virtual override returns (address impl) {\\n        return ERC1967Upgrade._getImplementation();\\n    }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n    // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n    /**\\n     * @dev Storage slot with the address of the current implementation.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _getImplementation() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 implementation slot.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeTo(address newImplementation) internal {\\n        _setImplementation(newImplementation);\\n        emit Upgraded(newImplementation);\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCall(\\n        address newImplementation,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        _upgradeTo(newImplementation);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(newImplementation, data);\\n        }\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCallUUPS(\\n        address newImplementation,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\\n        if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n            _setImplementation(newImplementation);\\n        } else {\\n            try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n                require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n            } catch {\\n                revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n            }\\n            _upgradeToAndCall(newImplementation, data, forceCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Storage slot with the admin of the contract.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n    /**\\n     * @dev Emitted when the admin account has changed.\\n     */\\n    event AdminChanged(address previousAdmin, address newAdmin);\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _getAdmin() internal view virtual returns (address) {\\n        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 admin slot.\\n     */\\n    function _setAdmin(address newAdmin) private {\\n        require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {AdminChanged} event.\\n     */\\n    function _changeAdmin(address newAdmin) internal {\\n        emit AdminChanged(_getAdmin(), newAdmin);\\n        _setAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n     */\\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n    /**\\n     * @dev Emitted when the beacon is upgraded.\\n     */\\n    event BeaconUpgraded(address indexed beacon);\\n\\n    /**\\n     * @dev Returns the current beacon.\\n     */\\n    function _getBeacon() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\\n     */\\n    function _setBeacon(address newBeacon) private {\\n        require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n        require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n    }\\n\\n    /**\\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n     *\\n     * Emits a {BeaconUpgraded} event.\\n     */\\n    function _upgradeBeaconToAndCall(\\n        address newBeacon,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        _setBeacon(newBeacon);\\n        emit BeaconUpgraded(newBeacon);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n    /**\\n     * @dev Delegates the current call to `implementation`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _delegate(address implementation) internal virtual {\\n        assembly {\\n            // Copy msg.data. We take full control of memory in this inline assembly\\n            // block because it will not return to Solidity code. We overwrite the\\n            // Solidity scratch pad at memory position 0.\\n            calldatacopy(0, 0, calldatasize())\\n\\n            // Call the implementation.\\n            // out and outsize are 0 because we don't know the size yet.\\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n            // Copy the returned data.\\n            returndatacopy(0, 0, returndatasize())\\n\\n            switch result\\n            // delegatecall returns 0 on error.\\n            case 0 {\\n                revert(0, returndatasize())\\n            }\\n            default {\\n                return(0, returndatasize())\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n     * and {_fallback} should delegate.\\n     */\\n    function _implementation() internal view virtual returns (address);\\n\\n    /**\\n     * @dev Delegates the current call to the address returned by `_implementation()`.\\n     *\\n     * This function does not return to its internall call site, it will return directly to the external caller.\\n     */\\n    function _fallback() internal virtual {\\n        _beforeFallback();\\n        _delegate(_implementation());\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n     * function in the contract matches the call data.\\n     */\\n    fallback() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n     * is empty.\\n     */\\n    receive() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n     * call, or as part of the Solidity `fallback` or `receive` functions.\\n     *\\n     * If overriden should call `super._beforeFallback()`.\\n     */\\n    function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {BeaconProxy} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"},\"hardhat-deploy/solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n    address internal immutable _ADMIN;\\n\\n    /**\\n     * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n     * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n     */\\n    constructor(\\n        address _logic,\\n        address admin_,\\n        bytes memory _data\\n    ) payable ERC1967Proxy(_logic, _data) {\\n        assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n        _ADMIN = admin_;\\n\\n        // still store it to work with EIP-1967\\n        bytes32 slot = _ADMIN_SLOT;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            sstore(slot, admin_)\\n        }\\n        emit AdminChanged(address(0), admin_);\\n    }\\n\\n    /**\\n     * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n     */\\n    modifier ifAdmin() {\\n        if (msg.sender == _getAdmin()) {\\n            _;\\n        } else {\\n            _fallback();\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the current admin.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n     *\\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n     */\\n    function admin() external ifAdmin returns (address admin_) {\\n        admin_ = _getAdmin();\\n    }\\n\\n    /**\\n     * @dev Returns the current implementation.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n     *\\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n     * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n     */\\n    function implementation() external ifAdmin returns (address implementation_) {\\n        implementation_ = _implementation();\\n    }\\n\\n    /**\\n     * @dev Upgrade the implementation of the proxy.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n     */\\n    function upgradeTo(address newImplementation) external ifAdmin {\\n        _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n    }\\n\\n    /**\\n     * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n     * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n     * proxied contract.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n     */\\n    function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n        _upgradeToAndCall(newImplementation, data, true);\\n    }\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _admin() internal view virtual returns (address) {\\n        return _getAdmin();\\n    }\\n\\n    /**\\n     * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n     */\\n    function _beforeFallback() internal virtual override {\\n        require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n        super._beforeFallback();\\n    }\\n\\n    function _getAdmin() internal view virtual override returns (address) {\\n        return _ADMIN;\\n    }\\n}\\n\",\"keccak256\":\"0xa30117644e27fa5b49e162aae2f62b36c1aca02f801b8c594d46e2024963a534\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}}}}}